BAL and Maple Release 2.2

Signed-off-by: Shad Ansari <developer@Carbon.local>
diff --git a/SW-BCM68620_2_2_2_2.zip b/SW-BCM68620_2_2_2_2.zip
new file mode 100644
index 0000000..2d45019
--- /dev/null
+++ b/SW-BCM68620_2_2_2_2.zip
Binary files differ
diff --git a/bal_release/.release_build b/bal_release/.release_build
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/bal_release/.release_build
diff --git a/bal_release/3rdparty/bcm-sdk/Makefile b/bal_release/3rdparty/bcm-sdk/Makefile
new file mode 100644
index 0000000..5e0dfd6
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/Makefile
@@ -0,0 +1,30 @@
+# Switch SDK for KT2
+#
+
+ifneq ("$(TEST_SW_UTIL_LOOPBACK)", "y")
+
+MOD_NAME = switch_sdk
+MOD_TYPE = lib
+
+MOD_INC_DIRS  = $(ING_SDK_DIR)/include
+MOD_INC_DIRS  += $(ING_SDK_DIR)/libs/phymod/include
+MOD_LIBS_NOREC_BEFORE = $(shell cat ${ING_SDK_DIR}/.bcm_objs)
+MOD_LIBS  = $(shell cat ${ING_SDK_DIR}/.bcm_libs)
+MOD_LIBS_NOREC_AFTER  = $(shell cat ${ING_SDK_DIR}/.bcm_ldflags | sed -e 's/-static //') -lutil
+
+# Building with libnetconf requires special care because libxml in bcm_sdk conflicts
+# with newer libxml2
+ifeq ("$(NC_AGENT)", "libnetconf")
+	MOD_LIBS := $(subst -lxml,,$(MOD_LIBS))
+
+	# This is tricky again. SDK build can include multiple versions of xml_api.o
+	# built for different architectures. We need to pick the right one.
+	_all_xml_api := $(shell find $(ING_SDK_DIR) -name xml_api.o)
+	_arch := $(shell file $(firstword $(MOD_LIBS_NOREC_BEFORE)) | awk '{print $$7}')
+	_xml_api := $(shell for aa in $(_all_xml_api); do _test_arch=`file $$aa | awk '{print $$7}'`; if [[ \"$(_arch)\" = \"$$_test_arch\" ]]; then echo $$aa; fi; done) 
+	
+	MOD_LIBS_NOREC_AFTER += $(_xml_api) 
+endif
+
+# end of ifneq ("$(TEST_SW_UTIL_LOOPBACK)", "y")
+endif
diff --git a/bal_release/3rdparty/bcm-sdk/Makefile.sdk b/bal_release/3rdparty/bcm-sdk/Makefile.sdk
new file mode 100644
index 0000000..5f1776d
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/Makefile.sdk
@@ -0,0 +1,60 @@
+# ING SDK
+#
+
+ifeq ("$(BOARD)", "wrx")
+    TARGET_DIR ?= systems/linux/user/wrx-3_7
+else
+    TARGET_DIR ?= systems/sim
+    export CONFIG_SWITCH_RPC=y
+endif
+
+export BUILD_ING_AS_LIB=1
+export SDK=$(ING_SDK_DIR)
+
+ifeq ("$(BOARD)", "wrx")
+    CMD_PARMS=platform=wrx-3_7 bldroot_suffix=/wrx-3_7 kernel_version=3_7 LINUX_MAKE_SHARED_LIB=0 SHAREDLIBVER=1 WRX_64BIT=1
+    $(info evaluating $(CMD_PARMS)) 
+    $(foreach _cmd,$(CMD_PARMS),$(eval export $(_cmd)))
+    include $(ING_SDK_DIR)/systems/linux/user/common/Makefile
+    BCM_LIBS_DEPS = user_libs $(BLDDIR)/socdiag.o $(BLDDIR)/version.o $(PLATFORM_DEFINES_OBJ) $(KERNEL_BDE) $(USER_BDE)
+    MAIN_LIB := $(BLDDIR)/socdiag.o $(MAIN_LIB) 
+    CGLAGS += $(ARCH_FLAGS)
+
+$(BLDDIR)/socdiag.o:: $(ING_SDK_DIR)/systems/linux/user/common/socdiag.c
+	@mkdir -p $(BLDDIR)
+	$(CC) -c -o $@ $(CFLAGS) $<
+
+else
+
+    include $(ING_SDK_DIR)/$(TARGET_DIR)/Makefile
+ 
+ifdef DPP_CHIPS
+$(LIBDIR)/libchipsim_sim.$(libext):
+	make -C $(ING_SDK_DIR)/$(TARGET_DIR)/dpp/ChipSim
+endif
+
+    BCM_LIBS_DEPS = $(MAIN_LIB) _bde _bcm_libraries $(BLDDIR)/version.o $(PLATFORM_DEFINES_OBJ) $(BCM_LIBS_BLD)
+
+endif
+
+# ING SDK links very strange. Instead of using -l, all libraries are added to executable as objects
+# it is better to convert to -l directives
+BCM_LIB_PATH 	:= $(dir $(firstword $(BCM_LIBS_BLD)))
+BCM_LIB_LIST 	:= $(patsubst lib%.a,-l%,$(notdir $(BCM_LIBS_BLD)))
+EXTRA_CFLAGS    += -Wno-error=unused-value -Wno-unused-but-set-variable -Wno-format-security
+export EXTRA_CFLAGS 
+
+sdk: $(ING_SDK_DIR)/.bcm_libs
+	echo "done: `ls $(ING_SDK_DIR)/$(TARGET_DIR)/`"
+	
+$(ING_SDK_DIR)/.bcm_libs: $(BCM_LIBS_DEPS)
+	echo "Building BCM SDK ... $(TARGET_DIR)"
+	@echo $(MAIN_LIB) $(BLDDIR)/version.o $(PLATFORM_DEFINES_OBJ) > $(ING_SDK_DIR)/.bcm_objs
+	@echo -L$(BCM_LIB_PATH) $(BCM_LIB_LIST) > $(ING_SDK_DIR)/.bcm_libs
+	@echo $(LDFLAGS) > $(ING_SDK_DIR)/.bcm_ldflags
+
+$(BLDDIR)/%.o:: $(ING_SDK_DIR)/$(TARGET_DIR)/%.c
+	@mkdir -p $(BLDDIR)
+	$(CC) -c -o $@ $(CFLAGS) $<
+
+
diff --git a/bal_release/3rdparty/bcm-sdk/make/Make.local.all b/bal_release/3rdparty/bcm-sdk/make/Make.local.all
new file mode 100755
index 0000000..9fa470f
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/make/Make.local.all
@@ -0,0 +1,571 @@
+# $Id: Make.local.template,v 1.181 Broadcom SDK $
+# $Copyright: Copyright 2012 Broadcom Corporation.
+# This program is the proprietary software of Broadcom Corporation
+# and/or its licensors, and may only be used, duplicated, modified
+# or distributed pursuant to the terms and conditions of a separate,
+# written license agreement executed between you and Broadcom
+# (an "Authorized License").  Except as set forth in an Authorized
+# License, Broadcom grants no license (express or implied), right
+# to use, or waiver of any kind with respect to the Software, and
+# Broadcom expressly reserves all rights in and to the Software
+# and all intellectual property rights therein.  IF YOU HAVE
+# NO AUTHORIZED LICENSE, THEN YOU HAVE NO RIGHT TO USE THIS SOFTWARE
+# IN ANY WAY, AND SHOULD IMMEDIATELY NOTIFY BROADCOM AND DISCONTINUE
+# ALL USE OF THE SOFTWARE.  
+#  
+# Except as expressly set forth in the Authorized License,
+#  
+# 1.     This program, including its structure, sequence and organization,
+# constitutes the valuable trade secrets of Broadcom, and you shall use
+# all reasonable efforts to protect the confidentiality thereof,
+# and to use this information only in connection with your use of
+# Broadcom integrated circuit products.
+#  
+# 2.     TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS
+# PROVIDED "AS IS" AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES,
+# REPRESENTATIONS OR WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY,
+# OR OTHERWISE, WITH RESPECT TO THE SOFTWARE.  BROADCOM SPECIFICALLY
+# DISCLAIMS ANY AND ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY,
+# NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES,
+# ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR
+# CORRESPONDENCE TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING
+# OUT OF USE OR PERFORMANCE OF THE SOFTWARE.
+# 
+# 3.     TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL
+# BROADCOM OR ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL,
+# INCIDENTAL, SPECIAL, INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER
+# ARISING OUT OF OR IN ANY WAY RELATING TO YOUR USE OF OR INABILITY
+# TO USE THE SOFTWARE EVEN IF BROADCOM HAS BEEN ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGES; OR (ii) ANY AMOUNT IN EXCESS OF
+# THE AMOUNT ACTUALLY PAID FOR THE SOFTWARE ITSELF OR USD 1.00,
+# WHICHEVER IS GREATER. THESE LIMITATIONS SHALL APPLY NOTWITHSTANDING
+# ANY FAILURE OF ESSENTIAL PURPOSE OF ANY LIMITED REMEDY.$
+#
+
+# Usage for Make.local.template and Make.local:
+#
+# Make.local.template is checked into the tree, but Make.local is never
+# checked in.  Copy Make.local.template to Make.local, then change
+# Make.local to select the desired compilation options (mostly debugging
+# features).
+#
+# Note on CFGFLAGS usage:
+#
+#   Because CFGFLAGS may be used with other source preprocessing tools,
+#   please limit the values added to CFGFLAGS to -D defines.
+#
+#
+# Table of Contents:
+#
+#     Compiler Related Options
+#     Boot and Debug Related Options
+#     Operational and Policy Options
+#     System Management and Multiple CPU Options
+#     Selective Device Support (Switches and PHYs)
+#     Miscellaneous Options
+#
+
+################################################################
+#
+# Compiler Related Options
+#
+################################################################
+
+# Compiling out #ifdef DEBUG code saves about 1.3% on executable size.
+# It is recommended to leave debug enabled when developing applications.
+#DEBUG_IFDEFS=FALSE
+
+# SAL resource usage tracking #ifdef control
+# DEBUG_IFDEFS should also be  TRUE for this switch to take effect.
+#BCM_RESOURCE_USAGE_PROFILE_IFDEFS=TRUE
+
+# Uncomment to build without debug symbols
+#DEBUG_SYMBOLS=FALSE
+
+# Uncomment to add private CFLAGS
+#DEBUG_CFLAGS=
+
+# Uncomment to turn off the optimizer when debugging (recommended)
+#DEBUG_OPTIMIZE=FALSE
+
+# Compiling out assert() saves about 1.1% on executable size,
+# however do so is VERY MUCH discouraged.
+#DEBUG_ASSERTS=FALSE
+
+# Controlling GCC -pedantic flag
+#DEBUG_PEDANTIC=TRUE
+
+# compiler.h overrides, these disable various compiler
+# related features even if the compiler normally supports them
+
+# Disable use of long long for uint64
+#CFGFLAGS += -DCOMPILER_OVERRIDE_NO_LONGLONG
+
+# Disable use of doubles
+#CFGFLAGS += -DCOMPILER_OVERRIDE_NO_DOUBLE
+
+# Disable inlining of functions
+#CFGFLAGS += -DCOMPILER_OVERRIDE_NO_INLINE
+
+# Disable use of const
+#CFGFLAGS += -DCOMPILER_OVERRIDE_NO_CONST
+
+# Disable use of static functions
+#CFGFLAGS += -DCOMPILER_OVERRIDE_NO_STATIC
+
+# Disable RPC flexible (long) bitmaps.
+# Warning: Disabling this changes the RPC version to 2 and
+# makes systems running this code incompatible with systems
+# running previous versions of BCM RPC code.
+#CFGFLAGS += -DBCM_RPC_PBMP_64
+
+#
+# Define if longs are 64 bits on your compiler;
+# this is typically true ONLY for 64-bit processors.
+#CFGFLAGS += -DLONGS_ARE_64BITS
+
+#
+# Define if pointers are 64 bits on your compiler;
+# this is typically true ONLY for 64-bit processors.
+# NOTE: This support works ONLY under conditions where the
+# upper 32 bits for ALL pointers are ZERO.
+#CFGFLAGS += -DPTRS_ARE_64BITS
+
+
+################################################################
+#
+# Boot and Debug Related Options
+#
+################################################################
+
+# Define this to add debug code for RX pool buffer tracking
+#CFGFLAGS += -DBCM_RXP_DEBUG
+
+# Allow debugging of PCI reads/writes (debug +pci)
+#CFGFLAGS += -DSOC_PCI_DEBUG
+
+# Make default debugging settings be 0 (very very quiet)
+#CFGFLAGS += -DNO_DEBUG_OUTPUT_DEFAULT
+
+# Don't use vxMemProbe
+#CFGFLAGS += -DVX_NO_MEM_PROBE
+
+# Allow debugging of Memory Allocation/Deallocation logging
+#CFGFLAGS += -DMEMLOG_SUPPORT
+
+################################################################
+################################################################
+#
+# Operational and Policy Options
+#
+################################################################
+
+# VLAN policy control:
+#	NO_DEFAULT_ETHER	do not init ether ports into vlan 1
+#	NO_DEFAULT_CPU		do not init cpu ports into vlan 1
+#	NO_DEFAULT_SPI_SUBPORT	do not init spi subports into vlan 1
+#	NO_AUTO_STACK		do not init stack/HG ports into created vlans
+#CFGFLAGS += -DBCM_VLAN_NO_DEFAULT_ETHER
+#CFGFLAGS += -DBCM_VLAN_NO_DEFAULT_CPU
+#CFGFLAGS += -DBCM_VLAN_NO_DEFAULT_SPI_SUBPORT
+#CFGFLAGS += -DBCM_VLAN_NO_AUTO_STACK
+
+# VLAN multicast flood Policy Control:
+# BCM_VLAN_MCAST_FLOOD_ALL      Flood all multicast packets to the VLAN
+# BCM_VLAN_MCAST_FLOOD_UNKNOWN  Flood unknown multicast packets to the vlan
+# BCM_VLAN_MCAST_FLOOD_NONE     Forward multicast packets with known
+#                               destination addresses to the appropriate ports.
+#                               All packets destined to an unknown multicast
+#                               address are dropped.
+#CFGFLAGS += -DBCM_MCAST_FLOOD_DEFAULT=BCM_VLAN_MCAST_FLOOD_ALL
+#CFGFLAGS += -DBCM_MCAST_FLOOD_DEFAULT=BCM_VLAN_MCAST_FLOOD_UNKNOWN
+#CFGFLAGS += -DBCM_MCAST_FLOOD_DEFAULT=BCM_VLAN_MCAST_FLOOD_NONE
+
+#Port Enable/Disable Policy control:
+#       PORT_DEFAULT_DISABLE       disable ports during switch initialization
+#CFGFLAGS += -DBCM_PORT_DEFAULT_DISABLE
+
+# sal thread priority override (this value used for all threads if defined)
+#CFGFLAGS += -DSAL_THREAD_PRIORITY=255
+
+# disable printing of thread name in messages
+#CFGFLAGS += -DSAL_THREAD_NAME_PRINT_DISABLE
+
+# disable runtime reading of flash config.bcm file (even if !NO_FILEIO)
+#CFGFLAGS += -DSAL_CONFIG_FILE_DISABLE
+
+# disable all Application SAL dependencies
+#NO_SAL_APPL=1
+
+
+# Prevent scheduling in SPL locks when interrupt code is run as a thread.
+# This option should not be necessary if all locks are implemented correctly,
+# however, some locks may still rely on the assumption that scheduling does
+# not occur when interrupts are disabled. If you experience any locking
+# problems in e.g. Linux User Mode, try enabling this option.
+# Please note that turning on this option will reduce performance by an
+# estimated 5 to 10 %.
+#CFGFLAGS += -DSAL_SPL_NO_PREEMPT
+
+# disable mapping of higig cosq when mapping priority to cosq
+# (use identity mapping instead : map prio0->cos0, prio1->cos1, ... , prio7->cos7)
+#CFGFLAGS += -DBCM_COSQ_HIGIG_MAP_DISABLE
+
+# Enable ukernel debugging module
+#CFGFLAGS += -DSOC_UKERNEL_DEBUG
+
+
+################################################################
+#
+# System Management and Multiple CPU Options
+#
+################################################################
+
+# Turn on BCMX inclusion
+#     INCLUDE_BCMX for any support
+INCLUDE_BCMX=1
+
+# Telekinesis suite applications for CPU to CPU communication and discovery
+#     CPUDB:         Simple CPU data base manager
+#     CPUTRANS:      CPU to CPU communication mechanisms
+#     DISCOVER:      Simple discovery; will also include CPUTRANS
+#     STKTASK:       Stack manager application
+#
+#CFGFLAGS += -DINCLUDE_LIB_CPUDB
+#CFGFLAGS += -DINCLUDE_LIB_CPUTRANS
+#CFGFLAGS += -DINCLUDE_LIB_DISCOVER
+#CFGFLAGS += -DINCLUDE_LIB_STKTASK
+
+# Option for discovery to use the application-data field in routing
+# packets for Board-ID and CPU base flag information.
+#CFGFLAGS += -DDISCOVER_APP_DATA_BOARDID
+
+# Optionally override list of included dispatch modules
+# Note: including RPC automatically includes the Telekinesis suite libs
+# ESW is the enterprise platforms.
+# ROBO includes the managed devices.
+# SBX includes API support for bcm988020QSK24X2
+#DISPATCH_LIST = RPC ESW ASYNC SBX
+
+# Define to have end-to-end flow control enabled on boards that
+# support it
+#CFGFLAGS += -DBCM_BOARD_AUTO_E2E
+
+# Define the following to support per-CPU transmit pointers.
+# This allows the TX setup and send functions to be defined on a
+# per-CPU basis, allowing mixed in-band and out-of-band communication.
+#CFGFLAGS += -DBCM_C2C_TRANSPORT_SWITCHING
+
+# Options for feature list (INCLUDE_XXX)
+# If FEATURE_LIST is defined, it is a list of features to include.
+# See Make.config for the default feature list.
+#
+# Avaliable features:
+#
+#     BCMX
+#     BCMX_DIAG
+#     CHASSIS
+#     CUSTOMER
+#     DRIVERS
+#     EDITLINE
+#     I2C
+#     L3
+#     MEM_SCAN
+#     ATPTRANS_SOCKET
+#     TELNET
+#     TEST
+#     ACL
+#     RCPU
+#     KNET - Linux user mode kernel network support
+#     BCM_SAL_PROFILE - make available an API to track SAL usage.
+#     CINT - Include the C Interpreter in the diagnostic shell. 
+#            Please note this cannot be used in Linux kernel mode. 
+#     C_UNIT - Include the C unit testing framework.  If CINT is also included
+#              then hooks will be provided for use from it.
+#     PHY_SYM_DBG - PHY GUI MDIO read/write support. Socket interface
+#                   to PHY GUI for Symbolic debugging.
+#     APIMODE - call SDK API functions from shell, requires CINT
+#     DUNE_UI - dune legacy user interface. For debug only. Tested
+#               on linux-user-gto-2.6 only.
+#     KBP   -   include nlm2(11K)/nlm3(12K) KBP support
+#     BHH   -   Include Support for BHH Application (MPLS-TP OAM based on Y.1731) 
+#               using BTE on select devices.
+#     AVS   - Include AVS support
+#FEATURE_LIST=ATPTRANS_SOCKET BCMX_DIAG L3 I2C BCMX MEM_SCAN EDITLINE \
+#    CUSTOMER TELNET DRIVERS CHASSIS TEST ACL RCPU BCM_SAL_PROFILE CINT \
+#    PTP CES FCMAP BOARD KNET REGEX MACSEC APIMODE BFD KBP AVS
+
+#FEATURE_LIST= ATPTRANS_SOCKET PTP CINT L3 I2C BCMX BCMX_DIAG MEM_SCAN EDITLINE BCM_SAL_PROFILE CUSTOMER TEST CHASSIS MSTP RCPU  
+
+# ARAD + KT2
+FEATURE_LIST= ATPTRANS_SOCKET PTP CINT L3 I2C BCMX BCMX_DIAG MEM_SCAN EDITLINE BCM_SAL_PROFILE CUSTOMER TEST CHASSIS MSTP RCPU   INTR BSAFE TELNET DRIVERS DUNE_UI 
+#
+###############################################################
+#              KBP supported devices
+#
+#Enable this for 11K device support
+#KBP_DEVICE = KBP_11K
+#
+#Enable this for 12K device support
+#KBP_DEVICE = KBP_ALG
+#
+###############################################################
+
+################################################################
+#
+# Selective Device Support (Switches and PHYs)
+#
+################################################################
+
+# Multiple Chip Support
+#
+# By default, the driver supports all Strata switch and fabric chips
+# included in this software release.  It checks device IDs at runtime
+# to run the correct driver modules.
+#
+# To save space, the driver can be compiled to support just a subset of
+# the chips.  To do this, uncomment the line for BCM_PTL_SPT (partial
+# support) and uncomment one line for each chip to support.
+#
+# Note that there are a lot more chips than drivers.
+# For example, the BCM5615 driver is also used for BCM5625 and BCM5645.
+#
+
+BCM_PTL_SPT = 1
+
+#BCM_5675_A0 = 1
+#BCM_56102_A0 = 1
+#BCM_56112_A0 = 1
+#BCM_56304_B0 = 1
+#BCM_56314_A0 = 1
+#BCM_56504_A0 = 1
+#BCM_56504_B0 = 1
+#BCM_56514_A0 = 1
+#BCM_56624_A0 = 1
+#BCM_56624_B0 = 1
+#BCM_56680_A0 = 1
+#BCM_56680_B0 = 1
+#BCM_56580_A0 = 1
+#BCM_56700_A0 = 1
+#BCM_56800_A0 = 1
+#BCM_56218_A0 = 1
+#BCM_56224_A0 = 1
+#BCM_56224_B0 = 1
+#BCM_56725_A0 = 1
+#BCM_56820_A0 = 1
+#BCM_53314_A0 = 1
+#BCM_53324_A0 = 1
+#BCM_56634_A0 = 1
+#BCM_56634_B0 = 1
+#BCM_56524_A0 = 1
+#BCM_56524_B0 = 1
+#BCM_56685_A0 = 1
+#BCM_56685_B0 = 1
+#BCM_56334_A0 = 1
+#BCM_56334_B0 = 1
+#BCM_56840_A0 = 1
+#BCM_56840_B0 = 1
+#BCM_56850_A0 = 1
+#BCM_56142_A0 = 1
+#BCM_56150_A0 = 1
+#BCM_56836_A0 = 1
+#BCM_56640_A0 = 1
+BCM_56440_A0 = 1
+BCM_56440_B0 = 1
+BCM_56450_A0 = 1
+BCM_56450_B0 = 1
+BCM_56450_B1 = 1
+#BCM_56960_A0 = 1
+#BCM_56860_A0 = 1
+
+#BCM_5338_A0 = 1
+#BCM_5380_A0 = 1
+#BCM_5338_B0 = 1
+#BCM_5325_A1 = 1
+
+#BCM_5324_A0 = 1
+#BCM_5396_A0 = 1
+#BCM_5389_A0 = 1
+#BCM_5398_A0 = 1
+#BCM_5324_A1 = 1
+#BCM_53115_A0 = 1
+#BCM_53118_A0 = 1
+#BCM_53280_A0 = 1
+#BCM_53280_B0 = 1
+#BCM_53101_A0 = 1
+#BCM_53125_A0 = 1
+#BCM_53128_A0 = 1
+#BCM_53600_A0 = 1
+#BCM_89500_A0 = 1
+
+#BCM_88030_A0 = 1
+#BCM_QE2000_A0 = 1
+#BCM_BME3200_B0 = 1
+#BCM_BM9600_A0 = 1
+#BCM_88230_A0 = 1
+#BCM_88230_B0 = 1
+#BCM_88230_C0 = 1
+
+# ARAD
+BCM_88640_A0=1
+BCM_88650_A0=1
+BCM_88650_B0=1
+BCM_88660_A0=1
+
+#BCM_TK371X_A0 = 1
+
+# Options for multiple PHY support
+# If BCM_PHY_LIST is defined, it is a list of PHYs to include.
+# The default is to include all of them.
+# If none of them should be included specify BCM_PHY_LIST=EMPTY
+#BCM_PHY_LIST=522X 54XX 5464 5421S 5482 54616 54680 54680E 52681E 54880E 54682 54684 54640 54640E 54880 SERDES SIMUL 8703 8705 8706 8072 8040 8481 8750 8729 84740 84756 84328 EMPTY
+
+# Options for BCM5338 5380
+#CFGFLAGS += -DROBO_OLD
+#ROBO_OLD = 1
+
+# Support for phy simulation
+#CFGFLAGS += -DINCLUDE_PHY_SIMUL
+#CFGFLAGS += -DSIM_ALL_PHYS        # All phys use simulation driver
+#CFGFLAGS += -DSIM_CMIC_LINK_STAT  # Get link status from CMIC register
+
+# Support for BOARD library
+# if BOARD_LIST is defined, it is a list of Board drivers to include.
+# The default is to include all board drivers appropriate for the devices
+# included in the build. If none of them should be included specify
+# BOARD_LIST=EMPTY.
+#BOARD_LIST=GENERIC
+
+# Support for event logging
+#CFGFLAGS += -DINCLUDE_SHARED_EVLOG
+
+# Support for BCM API port translation
+#CFGFLAGS += -DINCLUDE_BCM_API_XLATE_PORT
+
+# Support for callback error checks and abort in traverse api's
+#CFGFLAGS += -DBCM_CB_ABORT_ON_ERR
+################################################################
+#
+# Misc Options
+#
+################################################################
+#CFGFLAGS += -DSOC_MEM_L3_DEFIP_WAR
+
+# Compile out Register/Table descriptive strings to generate a
+# compact image
+#CFGFLAGS +=-DSOC_NO_NAMES
+#CFGFLAGS +=-DSOC_NO_ALIAS
+#CFGFLAGS +=-DSOC_NO_DESC
+
+# Reload/WarmBoot Support
+#
+CFGFLAGS += -DBCM_WARM_BOOT_SUPPORT
+#
+# Need this for validation using SOC scripts; Will move to tcl 
+# someday
+CFGFLAGS += -DBCM_WARM_BOOT_SUPPORT_SW_DUMP
+#
+# Adds a CRC check on scache buffer: Calculate when saving,
+# and verify when loading.
+# When doing ISSU, both source and destination versions should either have
+# this flag enabled or disabled.
+#CFGFLAGS += -DSCACHE_CRC_CHECK
+
+################################################################
+#
+# Enable Easy Reload Support
+#
+################################################################
+#CFGFLAGS += -DBCM_EASY_RELOAD_SUPPORT
+# For validation purposes
+#CFGFLAGS += -DBCM_EASY_RELOAD_SUPPORT_SW_DUMP
+
+# Software Trunk failover Support
+#
+#CFGFLAGS += -DBCM_TRUNK_FAILOVER_SUPPORT
+
+################################################################
+#
+# Override default VXWORKS thread options to make set 
+# VX_UNBREAKABLE flag in task creation.
+#
+################################################################
+#CFGFLAGS += -DVX_THREAD_OPT_UNBREAKABLE
+
+
+################################################################
+#
+# Use default priority for BDE interrupt thread.
+#
+################################################################
+#CFGFLAGS += -DSAL_BDE_THREAD_PRIO_DEFAULT
+
+################################################################
+#
+# Use cached DMA memory when mapping kernel DMA memory to user
+# mode. Should only be enabled on cache-coherent platforms.
+#
+################################################################
+#CFGFLAGS += -DSAL_BDE_CACHE_DMA_MEM
+
+################################################################
+#
+# Take the spl lock upon entering an ISR
+#
+################################################################
+#CFGFLAGS += -DSAL_SPL_LOCK_ON_IRQ
+
+################################################################
+#
+# Silently ignore NULL pointer free in sal_free API
+# Default behaviour is to assert if a NULL pointer is passed to sal_free
+#
+################################################################
+#CFGFLAGS += -DSAL_FREE_NULL_IGNORE
+
+################################################################
+# Enable SBX MPLS TP support
+################################################################
+#CFGFLAGS += -DBCM_SBX_MPLSTP_SUPPORT
+#CFGFLAGS += -DBCM_SBX_C1_MPLSTP_SUPPORT
+
+################################################################
+# Restrict SBX C2 Fte range to C2's range
+################################################################
+#CFGFLAGS += -DBCM_SBX_C1_C2_INTEROP
+
+################################################################
+# For historical reasons the PCI probe function skips device 12
+# by default to prevent a system hang on certain platforms.
+# Set this value to zero to probe all PCI devices.
+################################################################
+#CFGFLAGS += -DOVERRIDE_PCI_SKIP_DEV_MASK=0
+
+################################################################
+# Override max devices supported by PLI BDE
+################################################################
+#CFGFLAGS += -DPLI_MAX_DEVICES
+
+################################################################
+# Track BCM API calls to avoid deinitialization while calls active
+# This will incur a small time penalty for each BCM API call
+################################################################
+#CFGFLAGS += -DBCM_CONTROL_API_TRACKING
+
+################################################################
+# Override default retry time for detach to wait for executing
+# APIs to complete.
+################################################################
+#CFGFLAGS += -DBCM_DETACH_POLL_INTERVAL_USECS_DEFAULT=100000
+#CFGFLAGS += -DBCM_DETACH_NUM_RETRIES_DEFAULT=3000
+
+################################################################
+# Disable the RX module initialization
+################################################################
+#CFGFLAGS += -DBCM_RX_DISABLE
+
+################################################################
+# Enable TX callback in interrupt thread
+################################################################
+#CFGFLAGS += -DTX_CB_INTR
+
diff --git a/bal_release/3rdparty/bcm-sdk/make/Make.local.arad b/bal_release/3rdparty/bcm-sdk/make/Make.local.arad
new file mode 100755
index 0000000..67c11f5
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/make/Make.local.arad
@@ -0,0 +1,565 @@
+# $Id: Make.local.template,v 1.181 Broadcom SDK $
+# $Copyright: Copyright 2012 Broadcom Corporation.
+# This program is the proprietary software of Broadcom Corporation
+# and/or its licensors, and may only be used, duplicated, modified
+# or distributed pursuant to the terms and conditions of a separate,
+# written license agreement executed between you and Broadcom
+# (an "Authorized License").  Except as set forth in an Authorized
+# License, Broadcom grants no license (express or implied), right
+# to use, or waiver of any kind with respect to the Software, and
+# Broadcom expressly reserves all rights in and to the Software
+# and all intellectual property rights therein.  IF YOU HAVE
+# NO AUTHORIZED LICENSE, THEN YOU HAVE NO RIGHT TO USE THIS SOFTWARE
+# IN ANY WAY, AND SHOULD IMMEDIATELY NOTIFY BROADCOM AND DISCONTINUE
+# ALL USE OF THE SOFTWARE.  
+#  
+# Except as expressly set forth in the Authorized License,
+#  
+# 1.     This program, including its structure, sequence and organization,
+# constitutes the valuable trade secrets of Broadcom, and you shall use
+# all reasonable efforts to protect the confidentiality thereof,
+# and to use this information only in connection with your use of
+# Broadcom integrated circuit products.
+#  
+# 2.     TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS
+# PROVIDED "AS IS" AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES,
+# REPRESENTATIONS OR WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY,
+# OR OTHERWISE, WITH RESPECT TO THE SOFTWARE.  BROADCOM SPECIFICALLY
+# DISCLAIMS ANY AND ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY,
+# NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES,
+# ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR
+# CORRESPONDENCE TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING
+# OUT OF USE OR PERFORMANCE OF THE SOFTWARE.
+# 
+# 3.     TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL
+# BROADCOM OR ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL,
+# INCIDENTAL, SPECIAL, INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER
+# ARISING OUT OF OR IN ANY WAY RELATING TO YOUR USE OF OR INABILITY
+# TO USE THE SOFTWARE EVEN IF BROADCOM HAS BEEN ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGES; OR (ii) ANY AMOUNT IN EXCESS OF
+# THE AMOUNT ACTUALLY PAID FOR THE SOFTWARE ITSELF OR USD 1.00,
+# WHICHEVER IS GREATER. THESE LIMITATIONS SHALL APPLY NOTWITHSTANDING
+# ANY FAILURE OF ESSENTIAL PURPOSE OF ANY LIMITED REMEDY.$
+#
+
+# Usage for Make.local.template and Make.local:
+#
+# Make.local.template is checked into the tree, but Make.local is never
+# checked in.  Copy Make.local.template to Make.local, then change
+# Make.local to select the desired compilation options (mostly debugging
+# features).
+#
+# Note on CFGFLAGS usage:
+#
+#   Because CFGFLAGS may be used with other source preprocessing tools,
+#   please limit the values added to CFGFLAGS to -D defines.
+#
+#
+# Table of Contents:
+#
+#     Compiler Related Options
+#     Boot and Debug Related Options
+#     Operational and Policy Options
+#     System Management and Multiple CPU Options
+#     Selective Device Support (Switches and PHYs)
+#     Miscellaneous Options
+#
+
+################################################################
+#
+# Compiler Related Options
+#
+################################################################
+
+# Compiling out #ifdef DEBUG code saves about 1.3% on executable size.
+# It is recommended to leave debug enabled when developing applications.
+#DEBUG_IFDEFS=FALSE
+
+# SAL resource usage tracking #ifdef control
+# DEBUG_IFDEFS should also be  TRUE for this switch to take effect.
+#BCM_RESOURCE_USAGE_PROFILE_IFDEFS=TRUE
+
+# Uncomment to build without debug symbols
+#DEBUG_SYMBOLS=FALSE
+
+# Uncomment to add private CFLAGS
+#DEBUG_CFLAGS=
+
+# Uncomment to turn off the optimizer when debugging (recommended)
+#DEBUG_OPTIMIZE=FALSE
+
+# Compiling out assert() saves about 1.1% on executable size,
+# however do so is VERY MUCH discouraged.
+#DEBUG_ASSERTS=FALSE
+
+# Controlling GCC -pedantic flag
+#DEBUG_PEDANTIC=TRUE
+
+# compiler.h overrides, these disable various compiler
+# related features even if the compiler normally supports them
+
+# Disable use of long long for uint64
+#CFGFLAGS += -DCOMPILER_OVERRIDE_NO_LONGLONG
+
+# Disable use of doubles
+#CFGFLAGS += -DCOMPILER_OVERRIDE_NO_DOUBLE
+
+# Disable inlining of functions
+#CFGFLAGS += -DCOMPILER_OVERRIDE_NO_INLINE
+
+# Disable use of const
+#CFGFLAGS += -DCOMPILER_OVERRIDE_NO_CONST
+
+# Disable use of static functions
+#CFGFLAGS += -DCOMPILER_OVERRIDE_NO_STATIC
+
+# Disable RPC flexible (long) bitmaps.
+# Warning: Disabling this changes the RPC version to 2 and
+# makes systems running this code incompatible with systems
+# running previous versions of BCM RPC code.
+#CFGFLAGS += -DBCM_RPC_PBMP_64
+
+#
+# Define if longs are 64 bits on your compiler;
+# this is typically true ONLY for 64-bit processors.
+#CFGFLAGS += -DLONGS_ARE_64BITS
+
+#
+# Define if pointers are 64 bits on your compiler;
+# this is typically true ONLY for 64-bit processors.
+# NOTE: This support works ONLY under conditions where the
+# upper 32 bits for ALL pointers are ZERO.
+#CFGFLAGS += -DPTRS_ARE_64BITS
+
+
+################################################################
+#
+# Boot and Debug Related Options
+#
+################################################################
+
+# Define this to add debug code for RX pool buffer tracking
+#CFGFLAGS += -DBCM_RXP_DEBUG
+
+# Allow debugging of PCI reads/writes (debug +pci)
+#CFGFLAGS += -DSOC_PCI_DEBUG
+
+# Make default debugging settings be 0 (very very quiet)
+#CFGFLAGS += -DNO_DEBUG_OUTPUT_DEFAULT
+
+# Don't use vxMemProbe
+#CFGFLAGS += -DVX_NO_MEM_PROBE
+
+# Allow debugging of Memory Allocation/Deallocation logging
+#CFGFLAGS += -DMEMLOG_SUPPORT
+
+################################################################
+################################################################
+#
+# Operational and Policy Options
+#
+################################################################
+
+# VLAN policy control:
+#	NO_DEFAULT_ETHER	do not init ether ports into vlan 1
+#	NO_DEFAULT_CPU		do not init cpu ports into vlan 1
+#	NO_DEFAULT_SPI_SUBPORT	do not init spi subports into vlan 1
+#	NO_AUTO_STACK		do not init stack/HG ports into created vlans
+#CFGFLAGS += -DBCM_VLAN_NO_DEFAULT_ETHER
+#CFGFLAGS += -DBCM_VLAN_NO_DEFAULT_CPU
+#CFGFLAGS += -DBCM_VLAN_NO_DEFAULT_SPI_SUBPORT
+#CFGFLAGS += -DBCM_VLAN_NO_AUTO_STACK
+
+# VLAN multicast flood Policy Control:
+# BCM_VLAN_MCAST_FLOOD_ALL      Flood all multicast packets to the VLAN
+# BCM_VLAN_MCAST_FLOOD_UNKNOWN  Flood unknown multicast packets to the vlan
+# BCM_VLAN_MCAST_FLOOD_NONE     Forward multicast packets with known
+#                               destination addresses to the appropriate ports.
+#                               All packets destined to an unknown multicast
+#                               address are dropped.
+#CFGFLAGS += -DBCM_MCAST_FLOOD_DEFAULT=BCM_VLAN_MCAST_FLOOD_ALL
+#CFGFLAGS += -DBCM_MCAST_FLOOD_DEFAULT=BCM_VLAN_MCAST_FLOOD_UNKNOWN
+#CFGFLAGS += -DBCM_MCAST_FLOOD_DEFAULT=BCM_VLAN_MCAST_FLOOD_NONE
+
+#Port Enable/Disable Policy control:
+#       PORT_DEFAULT_DISABLE       disable ports during switch initialization
+#CFGFLAGS += -DBCM_PORT_DEFAULT_DISABLE
+
+# sal thread priority override (this value used for all threads if defined)
+#CFGFLAGS += -DSAL_THREAD_PRIORITY=255
+
+# disable printing of thread name in messages
+#CFGFLAGS += -DSAL_THREAD_NAME_PRINT_DISABLE
+
+# disable runtime reading of flash config.bcm file (even if !NO_FILEIO)
+#CFGFLAGS += -DSAL_CONFIG_FILE_DISABLE
+
+# disable all Application SAL dependencies
+#NO_SAL_APPL=1
+
+
+# Prevent scheduling in SPL locks when interrupt code is run as a thread.
+# This option should not be necessary if all locks are implemented correctly,
+# however, some locks may still rely on the assumption that scheduling does
+# not occur when interrupts are disabled. If you experience any locking
+# problems in e.g. Linux User Mode, try enabling this option.
+# Please note that turning on this option will reduce performance by an
+# estimated 5 to 10 %.
+#CFGFLAGS += -DSAL_SPL_NO_PREEMPT
+
+# disable mapping of higig cosq when mapping priority to cosq
+# (use identity mapping instead : map prio0->cos0, prio1->cos1, ... , prio7->cos7)
+#CFGFLAGS += -DBCM_COSQ_HIGIG_MAP_DISABLE
+
+# Enable ukernel debugging module
+#CFGFLAGS += -DSOC_UKERNEL_DEBUG
+
+
+################################################################
+#
+# System Management and Multiple CPU Options
+#
+################################################################
+
+# Turn on BCMX inclusion
+#     INCLUDE_BCMX for any support
+#INCLUDE_BCMX=1
+
+# Telekinesis suite applications for CPU to CPU communication and discovery
+#     CPUDB:         Simple CPU data base manager
+#     CPUTRANS:      CPU to CPU communication mechanisms
+#     DISCOVER:      Simple discovery; will also include CPUTRANS
+#     STKTASK:       Stack manager application
+#
+#CFGFLAGS += -DINCLUDE_LIB_CPUDB
+#CFGFLAGS += -DINCLUDE_LIB_CPUTRANS
+#CFGFLAGS += -DINCLUDE_LIB_DISCOVER
+#CFGFLAGS += -DINCLUDE_LIB_STKTASK
+
+# Option for discovery to use the application-data field in routing
+# packets for Board-ID and CPU base flag information.
+#CFGFLAGS += -DDISCOVER_APP_DATA_BOARDID
+
+# Optionally override list of included dispatch modules
+# Note: including RPC automatically includes the Telekinesis suite libs
+# ESW is the enterprise platforms.
+# ROBO includes the managed devices.
+# SBX includes API support for bcm988020QSK24X2
+#DISPATCH_LIST = RPC ESW ASYNC SBX
+
+# Define to have end-to-end flow control enabled on boards that
+# support it
+#CFGFLAGS += -DBCM_BOARD_AUTO_E2E
+
+# Define the following to support per-CPU transmit pointers.
+# This allows the TX setup and send functions to be defined on a
+# per-CPU basis, allowing mixed in-band and out-of-band communication.
+#CFGFLAGS += -DBCM_C2C_TRANSPORT_SWITCHING
+
+# Options for feature list (INCLUDE_XXX)
+# If FEATURE_LIST is defined, it is a list of features to include.
+# See Make.config for the default feature list.
+#
+# Avaliable features:
+#
+#     BCMX
+#     BCMX_DIAG
+#     CHASSIS
+#     CUSTOMER
+#     DRIVERS
+#     EDITLINE
+#     I2C
+#     L3
+#     MEM_SCAN
+#     ATPTRANS_SOCKET
+#     TELNET
+#     TEST
+#     ACL
+#     RCPU
+#     KNET - Linux user mode kernel network support
+#     BCM_SAL_PROFILE - make available an API to track SAL usage.
+#     CINT - Include the C Interpreter in the diagnostic shell. 
+#            Please note this cannot be used in Linux kernel mode. 
+#     C_UNIT - Include the C unit testing framework.  If CINT is also included
+#              then hooks will be provided for use from it.
+#     PHY_SYM_DBG - PHY GUI MDIO read/write support. Socket interface
+#                   to PHY GUI for Symbolic debugging.
+#     APIMODE - call SDK API functions from shell, requires CINT
+#     DUNE_UI - dune legacy user interface. For debug only. Tested
+#               on linux-user-gto-2.6 only.
+#     KBP   -   include nlm2(11K)/nlm3(12K) KBP support
+#     BHH   -   Include Support for BHH Application (MPLS-TP OAM based on Y.1731) 
+#               using BTE on select devices.
+#     AVS   - Include AVS support
+#FEATURE_LIST=ATPTRANS_SOCKET BCMX_DIAG L3 I2C BCMX MEM_SCAN EDITLINE \
+#    CUSTOMER TELNET DRIVERS CHASSIS TEST ACL RCPU BCM_SAL_PROFILE CINT \
+#    PTP CES FCMAP BOARD KNET REGEX MACSEC APIMODE BFD KBP AVS
+
+FEATURE_LIST= INTR CINT BSAFE ATPTRANS_SOCKET L3 I2C MEM_SCAN EDITLINE TELNET DRIVERS CHASSIS TEST BCM_SAL_PROFILE RCPU DUNE_UI
+
+###############################################################
+#              KBP supported devices
+#
+#Enable this for 11K device support
+#KBP_DEVICE = KBP_11K
+#
+#Enable this for 12K device support
+#KBP_DEVICE = KBP_ALG
+#
+###############################################################
+
+################################################################
+#
+# Selective Device Support (Switches and PHYs)
+#
+################################################################
+
+# Multiple Chip Support
+#
+# By default, the driver supports all Strata switch and fabric chips
+# included in this software release.  It checks device IDs at runtime
+# to run the correct driver modules.
+#
+# To save space, the driver can be compiled to support just a subset of
+# the chips.  To do this, uncomment the line for BCM_PTL_SPT (partial
+# support) and uncomment one line for each chip to support.
+#
+# Note that there are a lot more chips than drivers.
+# For example, the BCM5615 driver is also used for BCM5625 and BCM5645.
+#
+
+BCM_PTL_SPT = 1
+
+#BCM_5675_A0 = 1
+#BCM_56102_A0 = 1
+#BCM_56112_A0 = 1
+#BCM_56304_B0 = 1
+#BCM_56314_A0 = 1
+#BCM_56504_A0 = 1
+#BCM_56504_B0 = 1
+#BCM_56514_A0 = 1
+#BCM_56624_A0 = 1
+#BCM_56624_B0 = 1
+#BCM_56680_A0 = 1
+#BCM_56680_B0 = 1
+#BCM_56580_A0 = 1
+#BCM_56700_A0 = 1
+#BCM_56800_A0 = 1
+#BCM_56218_A0 = 1
+#BCM_56224_A0 = 1
+#BCM_56224_B0 = 1
+#BCM_56725_A0 = 1
+#BCM_56820_A0 = 1
+#BCM_53314_A0 = 1
+#BCM_53324_A0 = 1
+#BCM_56634_A0 = 1
+#BCM_56634_B0 = 1
+#BCM_56524_A0 = 1
+#BCM_56524_B0 = 1
+#BCM_56685_A0 = 1
+#BCM_56685_B0 = 1
+#BCM_56334_A0 = 1
+#BCM_56334_B0 = 1
+#BCM_56840_A0 = 1
+#BCM_56840_B0 = 1
+#BCM_56850_A0 = 1
+#BCM_56142_A0 = 1
+#BCM_56150_A0 = 1
+#BCM_56836_A0 = 1
+#BCM_56640_A0 = 1
+#BCM_56440_A0 = 1
+#BCM_56440_B0 = 1
+#BCM_56450_A0 = 1
+#BCM_56960_A0 = 1
+#BCM_56860_A0 = 1
+
+#BCM_5338_A0 = 1
+#BCM_5380_A0 = 1
+#BCM_5338_B0 = 1
+#BCM_5325_A1 = 1
+
+#BCM_5324_A0 = 1
+#BCM_5396_A0 = 1
+#BCM_5389_A0 = 1
+#BCM_5398_A0 = 1
+#BCM_5324_A1 = 1
+#BCM_53115_A0 = 1
+#BCM_53118_A0 = 1
+#BCM_53280_A0 = 1
+#BCM_53280_B0 = 1
+#BCM_53101_A0 = 1
+#BCM_53125_A0 = 1
+#BCM_53128_A0 = 1
+#BCM_53600_A0 = 1
+#BCM_89500_A0 = 1
+
+#BCM_88030_A0 = 1
+#BCM_QE2000_A0 = 1
+#BCM_BME3200_B0 = 1
+#BCM_BM9600_A0 = 1
+#BCM_88230_A0 = 1
+#BCM_88230_B0 = 1
+#BCM_88230_C0 = 1
+BCM_88640_A0=1
+BCM_88650_A0=1
+BCM_88650_B0=1
+BCM_88660_A0=1
+
+#BCM_TK371X_A0 = 1
+
+# Options for multiple PHY support
+# If BCM_PHY_LIST is defined, it is a list of PHYs to include.
+# The default is to include all of them.
+# If none of them should be included specify BCM_PHY_LIST=EMPTY
+#BCM_PHY_LIST=522X 54XX 5464 5421S 5482 54616 54680 54680E 52681E 54880E 54682 54684 54640 54640E 54880 SERDES SIMUL 8703 8705 8706 8072 8040 8481 8750 8729 84740 84756 84328 EMPTY
+
+# Options for BCM5338 5380
+#CFGFLAGS += -DROBO_OLD
+#ROBO_OLD = 1
+
+# Support for phy simulation
+#CFGFLAGS += -DINCLUDE_PHY_SIMUL
+#CFGFLAGS += -DSIM_ALL_PHYS        # All phys use simulation driver
+#CFGFLAGS += -DSIM_CMIC_LINK_STAT  # Get link status from CMIC register
+
+# Support for BOARD library
+# if BOARD_LIST is defined, it is a list of Board drivers to include.
+# The default is to include all board drivers appropriate for the devices
+# included in the build. If none of them should be included specify
+# BOARD_LIST=EMPTY.
+#BOARD_LIST=GENERIC
+
+# Support for event logging
+#CFGFLAGS += -DINCLUDE_SHARED_EVLOG
+
+# Support for BCM API port translation
+#CFGFLAGS += -DINCLUDE_BCM_API_XLATE_PORT
+
+# Support for callback error checks and abort in traverse api's
+#CFGFLAGS += -DBCM_CB_ABORT_ON_ERR
+################################################################
+#
+# Misc Options
+#
+################################################################
+#CFGFLAGS += -DSOC_MEM_L3_DEFIP_WAR
+
+# Compile out Register/Table descriptive strings to generate a
+# compact image
+#CFGFLAGS +=-DSOC_NO_NAMES
+#CFGFLAGS +=-DSOC_NO_ALIAS
+#CFGFLAGS +=-DSOC_NO_DESC
+
+# Reload/WarmBoot Support
+#
+CFGFLAGS += -DBCM_WARM_BOOT_SUPPORT
+#
+# Need this for validation using SOC scripts; Will move to tcl 
+# someday
+CFGFLAGS += -DBCM_WARM_BOOT_SUPPORT_SW_DUMP
+#
+# Adds a CRC check on scache buffer: Calculate when saving,
+# and verify when loading.
+# When doing ISSU, both source and destination versions should either have
+# this flag enabled or disabled.
+#CFGFLAGS += -DSCACHE_CRC_CHECK
+
+################################################################
+#
+# Enable Easy Reload Support
+#
+################################################################
+#CFGFLAGS += -DBCM_EASY_RELOAD_SUPPORT
+# For validation purposes
+#CFGFLAGS += -DBCM_EASY_RELOAD_SUPPORT_SW_DUMP
+
+# Software Trunk failover Support
+#
+#CFGFLAGS += -DBCM_TRUNK_FAILOVER_SUPPORT
+
+################################################################
+#
+# Override default VXWORKS thread options to make set 
+# VX_UNBREAKABLE flag in task creation.
+#
+################################################################
+#CFGFLAGS += -DVX_THREAD_OPT_UNBREAKABLE
+
+
+################################################################
+#
+# Use default priority for BDE interrupt thread.
+#
+################################################################
+#CFGFLAGS += -DSAL_BDE_THREAD_PRIO_DEFAULT
+
+################################################################
+#
+# Use cached DMA memory when mapping kernel DMA memory to user
+# mode. Should only be enabled on cache-coherent platforms.
+#
+################################################################
+#CFGFLAGS += -DSAL_BDE_CACHE_DMA_MEM
+
+################################################################
+#
+# Take the spl lock upon entering an ISR
+#
+################################################################
+#CFGFLAGS += -DSAL_SPL_LOCK_ON_IRQ
+
+################################################################
+#
+# Silently ignore NULL pointer free in sal_free API
+# Default behaviour is to assert if a NULL pointer is passed to sal_free
+#
+################################################################
+#CFGFLAGS += -DSAL_FREE_NULL_IGNORE
+
+################################################################
+# Enable SBX MPLS TP support
+################################################################
+#CFGFLAGS += -DBCM_SBX_MPLSTP_SUPPORT
+#CFGFLAGS += -DBCM_SBX_C1_MPLSTP_SUPPORT
+
+################################################################
+# Restrict SBX C2 Fte range to C2's range
+################################################################
+#CFGFLAGS += -DBCM_SBX_C1_C2_INTEROP
+
+################################################################
+# For historical reasons the PCI probe function skips device 12
+# by default to prevent a system hang on certain platforms.
+# Set this value to zero to probe all PCI devices.
+################################################################
+#CFGFLAGS += -DOVERRIDE_PCI_SKIP_DEV_MASK=0
+
+################################################################
+# Override max devices supported by PLI BDE
+################################################################
+#CFGFLAGS += -DPLI_MAX_DEVICES
+
+################################################################
+# Track BCM API calls to avoid deinitialization while calls active
+# This will incur a small time penalty for each BCM API call
+################################################################
+#CFGFLAGS += -DBCM_CONTROL_API_TRACKING
+
+################################################################
+# Override default retry time for detach to wait for executing
+# APIs to complete.
+################################################################
+#CFGFLAGS += -DBCM_DETACH_POLL_INTERVAL_USECS_DEFAULT=100000
+#CFGFLAGS += -DBCM_DETACH_NUM_RETRIES_DEFAULT=3000
+
+################################################################
+# Disable the RX module initialization
+################################################################
+#CFGFLAGS += -DBCM_RX_DISABLE
+
+################################################################
+# Enable TX callback in interrupt thread
+################################################################
+#CFGFLAGS += -DTX_CB_INTR
+
+override SBX_CHIPS=
diff --git a/bal_release/3rdparty/bcm-sdk/make/Make.local.kt2 b/bal_release/3rdparty/bcm-sdk/make/Make.local.kt2
new file mode 100755
index 0000000..d7876b1
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/make/Make.local.kt2
@@ -0,0 +1,562 @@
+# $Id: Make.local.template,v 1.181 Broadcom SDK $
+# $Copyright: Copyright 2012 Broadcom Corporation.
+# This program is the proprietary software of Broadcom Corporation
+# and/or its licensors, and may only be used, duplicated, modified
+# or distributed pursuant to the terms and conditions of a separate,
+# written license agreement executed between you and Broadcom
+# (an "Authorized License").  Except as set forth in an Authorized
+# License, Broadcom grants no license (express or implied), right
+# to use, or waiver of any kind with respect to the Software, and
+# Broadcom expressly reserves all rights in and to the Software
+# and all intellectual property rights therein.  IF YOU HAVE
+# NO AUTHORIZED LICENSE, THEN YOU HAVE NO RIGHT TO USE THIS SOFTWARE
+# IN ANY WAY, AND SHOULD IMMEDIATELY NOTIFY BROADCOM AND DISCONTINUE
+# ALL USE OF THE SOFTWARE.  
+#  
+# Except as expressly set forth in the Authorized License,
+#  
+# 1.     This program, including its structure, sequence and organization,
+# constitutes the valuable trade secrets of Broadcom, and you shall use
+# all reasonable efforts to protect the confidentiality thereof,
+# and to use this information only in connection with your use of
+# Broadcom integrated circuit products.
+#  
+# 2.     TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS
+# PROVIDED "AS IS" AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES,
+# REPRESENTATIONS OR WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY,
+# OR OTHERWISE, WITH RESPECT TO THE SOFTWARE.  BROADCOM SPECIFICALLY
+# DISCLAIMS ANY AND ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY,
+# NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES,
+# ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR
+# CORRESPONDENCE TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING
+# OUT OF USE OR PERFORMANCE OF THE SOFTWARE.
+# 
+# 3.     TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL
+# BROADCOM OR ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL,
+# INCIDENTAL, SPECIAL, INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER
+# ARISING OUT OF OR IN ANY WAY RELATING TO YOUR USE OF OR INABILITY
+# TO USE THE SOFTWARE EVEN IF BROADCOM HAS BEEN ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGES; OR (ii) ANY AMOUNT IN EXCESS OF
+# THE AMOUNT ACTUALLY PAID FOR THE SOFTWARE ITSELF OR USD 1.00,
+# WHICHEVER IS GREATER. THESE LIMITATIONS SHALL APPLY NOTWITHSTANDING
+# ANY FAILURE OF ESSENTIAL PURPOSE OF ANY LIMITED REMEDY.$
+#
+
+# Usage for Make.local.template and Make.local:
+#
+# Make.local.template is checked into the tree, but Make.local is never
+# checked in.  Copy Make.local.template to Make.local, then change
+# Make.local to select the desired compilation options (mostly debugging
+# features).
+#
+# Note on CFGFLAGS usage:
+#
+#   Because CFGFLAGS may be used with other source preprocessing tools,
+#   please limit the values added to CFGFLAGS to -D defines.
+#
+#
+# Table of Contents:
+#
+#     Compiler Related Options
+#     Boot and Debug Related Options
+#     Operational and Policy Options
+#     System Management and Multiple CPU Options
+#     Selective Device Support (Switches and PHYs)
+#     Miscellaneous Options
+#
+
+################################################################
+#
+# Compiler Related Options
+#
+################################################################
+
+# Compiling out #ifdef DEBUG code saves about 1.3% on executable size.
+# It is recommended to leave debug enabled when developing applications.
+#DEBUG_IFDEFS=FALSE
+
+# SAL resource usage tracking #ifdef control
+# DEBUG_IFDEFS should also be  TRUE for this switch to take effect.
+#BCM_RESOURCE_USAGE_PROFILE_IFDEFS=TRUE
+
+# Uncomment to build without debug symbols
+#DEBUG_SYMBOLS=FALSE
+
+# Uncomment to add private CFLAGS
+#DEBUG_CFLAGS=
+
+# Uncomment to turn off the optimizer when debugging (recommended)
+#DEBUG_OPTIMIZE=FALSE
+
+# Compiling out assert() saves about 1.1% on executable size,
+# however do so is VERY MUCH discouraged.
+#DEBUG_ASSERTS=FALSE
+
+# Controlling GCC -pedantic flag
+#DEBUG_PEDANTIC=TRUE
+
+# compiler.h overrides, these disable various compiler
+# related features even if the compiler normally supports them
+
+# Disable use of long long for uint64
+#CFGFLAGS += -DCOMPILER_OVERRIDE_NO_LONGLONG
+
+# Disable use of doubles
+#CFGFLAGS += -DCOMPILER_OVERRIDE_NO_DOUBLE
+
+# Disable inlining of functions
+#CFGFLAGS += -DCOMPILER_OVERRIDE_NO_INLINE
+
+# Disable use of const
+#CFGFLAGS += -DCOMPILER_OVERRIDE_NO_CONST
+
+# Disable use of static functions
+#CFGFLAGS += -DCOMPILER_OVERRIDE_NO_STATIC
+
+# Disable RPC flexible (long) bitmaps.
+# Warning: Disabling this changes the RPC version to 2 and
+# makes systems running this code incompatible with systems
+# running previous versions of BCM RPC code.
+#CFGFLAGS += -DBCM_RPC_PBMP_64
+
+#
+# Define if longs are 64 bits on your compiler;
+# this is typically true ONLY for 64-bit processors.
+#CFGFLAGS += -DLONGS_ARE_64BITS
+
+#
+# Define if pointers are 64 bits on your compiler;
+# this is typically true ONLY for 64-bit processors.
+# NOTE: This support works ONLY under conditions where the
+# upper 32 bits for ALL pointers are ZERO.
+#CFGFLAGS += -DPTRS_ARE_64BITS
+
+
+################################################################
+#
+# Boot and Debug Related Options
+#
+################################################################
+
+# Define this to add debug code for RX pool buffer tracking
+#CFGFLAGS += -DBCM_RXP_DEBUG
+
+# Allow debugging of PCI reads/writes (debug +pci)
+#CFGFLAGS += -DSOC_PCI_DEBUG
+
+# Make default debugging settings be 0 (very very quiet)
+#CFGFLAGS += -DNO_DEBUG_OUTPUT_DEFAULT
+
+# Don't use vxMemProbe
+#CFGFLAGS += -DVX_NO_MEM_PROBE
+
+# Allow debugging of Memory Allocation/Deallocation logging
+#CFGFLAGS += -DMEMLOG_SUPPORT
+
+################################################################
+################################################################
+#
+# Operational and Policy Options
+#
+################################################################
+
+# VLAN policy control:
+#	NO_DEFAULT_ETHER	do not init ether ports into vlan 1
+#	NO_DEFAULT_CPU		do not init cpu ports into vlan 1
+#	NO_DEFAULT_SPI_SUBPORT	do not init spi subports into vlan 1
+#	NO_AUTO_STACK		do not init stack/HG ports into created vlans
+#CFGFLAGS += -DBCM_VLAN_NO_DEFAULT_ETHER
+#CFGFLAGS += -DBCM_VLAN_NO_DEFAULT_CPU
+#CFGFLAGS += -DBCM_VLAN_NO_DEFAULT_SPI_SUBPORT
+#CFGFLAGS += -DBCM_VLAN_NO_AUTO_STACK
+
+# VLAN multicast flood Policy Control:
+# BCM_VLAN_MCAST_FLOOD_ALL      Flood all multicast packets to the VLAN
+# BCM_VLAN_MCAST_FLOOD_UNKNOWN  Flood unknown multicast packets to the vlan
+# BCM_VLAN_MCAST_FLOOD_NONE     Forward multicast packets with known
+#                               destination addresses to the appropriate ports.
+#                               All packets destined to an unknown multicast
+#                               address are dropped.
+#CFGFLAGS += -DBCM_MCAST_FLOOD_DEFAULT=BCM_VLAN_MCAST_FLOOD_ALL
+#CFGFLAGS += -DBCM_MCAST_FLOOD_DEFAULT=BCM_VLAN_MCAST_FLOOD_UNKNOWN
+#CFGFLAGS += -DBCM_MCAST_FLOOD_DEFAULT=BCM_VLAN_MCAST_FLOOD_NONE
+
+#Port Enable/Disable Policy control:
+#       PORT_DEFAULT_DISABLE       disable ports during switch initialization
+#CFGFLAGS += -DBCM_PORT_DEFAULT_DISABLE
+
+# sal thread priority override (this value used for all threads if defined)
+#CFGFLAGS += -DSAL_THREAD_PRIORITY=255
+
+# disable printing of thread name in messages
+#CFGFLAGS += -DSAL_THREAD_NAME_PRINT_DISABLE
+
+# disable runtime reading of flash config.bcm file (even if !NO_FILEIO)
+#CFGFLAGS += -DSAL_CONFIG_FILE_DISABLE
+
+# disable all Application SAL dependencies
+#NO_SAL_APPL=1
+
+
+# Prevent scheduling in SPL locks when interrupt code is run as a thread.
+# This option should not be necessary if all locks are implemented correctly,
+# however, some locks may still rely on the assumption that scheduling does
+# not occur when interrupts are disabled. If you experience any locking
+# problems in e.g. Linux User Mode, try enabling this option.
+# Please note that turning on this option will reduce performance by an
+# estimated 5 to 10 %.
+#CFGFLAGS += -DSAL_SPL_NO_PREEMPT
+
+# disable mapping of higig cosq when mapping priority to cosq
+# (use identity mapping instead : map prio0->cos0, prio1->cos1, ... , prio7->cos7)
+#CFGFLAGS += -DBCM_COSQ_HIGIG_MAP_DISABLE
+
+# Enable ukernel debugging module
+#CFGFLAGS += -DSOC_UKERNEL_DEBUG
+
+
+################################################################
+#
+# System Management and Multiple CPU Options
+#
+################################################################
+
+# Turn on BCMX inclusion
+#     INCLUDE_BCMX for any support
+INCLUDE_BCMX=1
+
+# Telekinesis suite applications for CPU to CPU communication and discovery
+#     CPUDB:         Simple CPU data base manager
+#     CPUTRANS:      CPU to CPU communication mechanisms
+#     DISCOVER:      Simple discovery; will also include CPUTRANS
+#     STKTASK:       Stack manager application
+#
+#CFGFLAGS += -DINCLUDE_LIB_CPUDB
+#CFGFLAGS += -DINCLUDE_LIB_CPUTRANS
+#CFGFLAGS += -DINCLUDE_LIB_DISCOVER
+#CFGFLAGS += -DINCLUDE_LIB_STKTASK
+
+# Option for discovery to use the application-data field in routing
+# packets for Board-ID and CPU base flag information.
+#CFGFLAGS += -DDISCOVER_APP_DATA_BOARDID
+
+# Optionally override list of included dispatch modules
+# Note: including RPC automatically includes the Telekinesis suite libs
+# ESW is the enterprise platforms.
+# ROBO includes the managed devices.
+# SBX includes API support for bcm988020QSK24X2
+#DISPATCH_LIST = RPC ESW ASYNC SBX
+
+# Define to have end-to-end flow control enabled on boards that
+# support it
+#CFGFLAGS += -DBCM_BOARD_AUTO_E2E
+
+# Define the following to support per-CPU transmit pointers.
+# This allows the TX setup and send functions to be defined on a
+# per-CPU basis, allowing mixed in-band and out-of-band communication.
+#CFGFLAGS += -DBCM_C2C_TRANSPORT_SWITCHING
+
+# Options for feature list (INCLUDE_XXX)
+# If FEATURE_LIST is defined, it is a list of features to include.
+# See Make.config for the default feature list.
+#
+# Avaliable features:
+#
+#     BCMX
+#     BCMX_DIAG
+#     CHASSIS
+#     CUSTOMER
+#     DRIVERS
+#     EDITLINE
+#     I2C
+#     L3
+#     MEM_SCAN
+#     ATPTRANS_SOCKET
+#     TELNET
+#     TEST
+#     ACL
+#     RCPU
+#     KNET - Linux user mode kernel network support
+#     BCM_SAL_PROFILE - make available an API to track SAL usage.
+#     CINT - Include the C Interpreter in the diagnostic shell. 
+#            Please note this cannot be used in Linux kernel mode. 
+#     C_UNIT - Include the C unit testing framework.  If CINT is also included
+#              then hooks will be provided for use from it.
+#     PHY_SYM_DBG - PHY GUI MDIO read/write support. Socket interface
+#                   to PHY GUI for Symbolic debugging.
+#     APIMODE - call SDK API functions from shell, requires CINT
+#     DUNE_UI - dune legacy user interface. For debug only. Tested
+#               on linux-user-gto-2.6 only.
+#     KBP   -   include nlm2(11K)/nlm3(12K) KBP support
+#     BHH   -   Include Support for BHH Application (MPLS-TP OAM based on Y.1731) 
+#               using BTE on select devices.
+#     AVS   - Include AVS support
+#FEATURE_LIST=ATPTRANS_SOCKET BCMX_DIAG L3 I2C BCMX MEM_SCAN EDITLINE \
+#    CUSTOMER TELNET DRIVERS CHASSIS TEST ACL RCPU BCM_SAL_PROFILE CINT \
+#    PTP CES FCMAP BOARD KNET REGEX MACSEC APIMODE BFD KBP AVS
+
+FEATURE_LIST= ATPTRANS_SOCKET PTP CINT L3 I2C BCMX BCMX_DIAG MEM_SCAN EDITLINE BCM_SAL_PROFILE CUSTOMER TEST CHASSIS MSTP RCPU
+
+###############################################################
+#              KBP supported devices
+#
+#Enable this for 11K device support
+#KBP_DEVICE = KBP_11K
+#
+#Enable this for 12K device support
+#KBP_DEVICE = KBP_ALG
+#
+###############################################################
+
+################################################################
+#
+# Selective Device Support (Switches and PHYs)
+#
+################################################################
+
+# Multiple Chip Support
+#
+# By default, the driver supports all Strata switch and fabric chips
+# included in this software release.  It checks device IDs at runtime
+# to run the correct driver modules.
+#
+# To save space, the driver can be compiled to support just a subset of
+# the chips.  To do this, uncomment the line for BCM_PTL_SPT (partial
+# support) and uncomment one line for each chip to support.
+#
+# Note that there are a lot more chips than drivers.
+# For example, the BCM5615 driver is also used for BCM5625 and BCM5645.
+#
+
+BCM_PTL_SPT = 1
+
+#BCM_5675_A0 = 1
+#BCM_56102_A0 = 1
+#BCM_56112_A0 = 1
+#BCM_56304_B0 = 1
+#BCM_56314_A0 = 1
+#BCM_56504_A0 = 1
+#BCM_56504_B0 = 1
+#BCM_56514_A0 = 1
+#BCM_56624_A0 = 1
+#BCM_56624_B0 = 1
+#BCM_56680_A0 = 1
+#BCM_56680_B0 = 1
+#BCM_56580_A0 = 1
+#BCM_56700_A0 = 1
+#BCM_56800_A0 = 1
+#BCM_56218_A0 = 1
+#BCM_56224_A0 = 1
+#BCM_56224_B0 = 1
+#BCM_56725_A0 = 1
+#BCM_56820_A0 = 1
+#BCM_53314_A0 = 1
+#BCM_53324_A0 = 1
+#BCM_56634_A0 = 1
+#BCM_56634_B0 = 1
+#BCM_56524_A0 = 1
+#BCM_56524_B0 = 1
+#BCM_56685_A0 = 1
+#BCM_56685_B0 = 1
+#BCM_56334_A0 = 1
+#BCM_56334_B0 = 1
+#BCM_56840_A0 = 1
+#BCM_56840_B0 = 1
+#BCM_56850_A0 = 1
+#BCM_56142_A0 = 1
+#BCM_56150_A0 = 1
+#BCM_56836_A0 = 1
+#BCM_56640_A0 = 1
+BCM_56440_A0 = 1
+BCM_56440_B0 = 1
+BCM_56450_A0 = 1
+BCM_56450_B0 = 1
+BCM_56450_B1 = 1
+#BCM_56960_A0 = 1
+#BCM_56860_A0 = 1
+
+#BCM_5338_A0 = 1
+#BCM_5380_A0 = 1
+#BCM_5338_B0 = 1
+#BCM_5325_A1 = 1
+
+#BCM_5324_A0 = 1
+#BCM_5396_A0 = 1
+#BCM_5389_A0 = 1
+#BCM_5398_A0 = 1
+#BCM_5324_A1 = 1
+#BCM_53115_A0 = 1
+#BCM_53118_A0 = 1
+#BCM_53280_A0 = 1
+#BCM_53280_B0 = 1
+#BCM_53101_A0 = 1
+#BCM_53125_A0 = 1
+#BCM_53128_A0 = 1
+#BCM_53600_A0 = 1
+#BCM_89500_A0 = 1
+
+#BCM_88030_A0 = 1
+#BCM_QE2000_A0 = 1
+#BCM_BME3200_B0 = 1
+#BCM_BM9600_A0 = 1
+#BCM_88230_A0 = 1
+#BCM_88230_B0 = 1
+#BCM_88230_C0 = 1
+
+#BCM_TK371X_A0 = 1
+
+# Options for multiple PHY support
+# If BCM_PHY_LIST is defined, it is a list of PHYs to include.
+# The default is to include all of them.
+# If none of them should be included specify BCM_PHY_LIST=EMPTY
+#BCM_PHY_LIST=522X 54XX 5464 5421S 5482 54616 54680 54680E 52681E 54880E 54682 54684 54640 54640E 54880 SERDES SIMUL 8703 8705 8706 8072 8040 8481 8750 8729 84740 84756 84328 EMPTY
+
+# Options for BCM5338 5380
+#CFGFLAGS += -DROBO_OLD
+#ROBO_OLD = 1
+
+# Support for phy simulation
+#CFGFLAGS += -DINCLUDE_PHY_SIMUL
+#CFGFLAGS += -DSIM_ALL_PHYS        # All phys use simulation driver
+#CFGFLAGS += -DSIM_CMIC_LINK_STAT  # Get link status from CMIC register
+
+# Support for BOARD library
+# if BOARD_LIST is defined, it is a list of Board drivers to include.
+# The default is to include all board drivers appropriate for the devices
+# included in the build. If none of them should be included specify
+# BOARD_LIST=EMPTY.
+#BOARD_LIST=GENERIC
+
+# Support for event logging
+#CFGFLAGS += -DINCLUDE_SHARED_EVLOG
+
+# Support for BCM API port translation
+#CFGFLAGS += -DINCLUDE_BCM_API_XLATE_PORT
+
+# Support for callback error checks and abort in traverse api's
+#CFGFLAGS += -DBCM_CB_ABORT_ON_ERR
+################################################################
+#
+# Misc Options
+#
+################################################################
+#CFGFLAGS += -DSOC_MEM_L3_DEFIP_WAR
+
+# Compile out Register/Table descriptive strings to generate a
+# compact image
+#CFGFLAGS +=-DSOC_NO_NAMES
+#CFGFLAGS +=-DSOC_NO_ALIAS
+#CFGFLAGS +=-DSOC_NO_DESC
+
+# Reload/WarmBoot Support
+#
+CFGFLAGS += -DBCM_WARM_BOOT_SUPPORT
+#
+# Need this for validation using SOC scripts; Will move to tcl 
+# someday
+CFGFLAGS += -DBCM_WARM_BOOT_SUPPORT_SW_DUMP
+#
+# Adds a CRC check on scache buffer: Calculate when saving,
+# and verify when loading.
+# When doing ISSU, both source and destination versions should either have
+# this flag enabled or disabled.
+#CFGFLAGS += -DSCACHE_CRC_CHECK
+
+################################################################
+#
+# Enable Easy Reload Support
+#
+################################################################
+#CFGFLAGS += -DBCM_EASY_RELOAD_SUPPORT
+# For validation purposes
+#CFGFLAGS += -DBCM_EASY_RELOAD_SUPPORT_SW_DUMP
+
+# Software Trunk failover Support
+#
+#CFGFLAGS += -DBCM_TRUNK_FAILOVER_SUPPORT
+
+################################################################
+#
+# Override default VXWORKS thread options to make set 
+# VX_UNBREAKABLE flag in task creation.
+#
+################################################################
+#CFGFLAGS += -DVX_THREAD_OPT_UNBREAKABLE
+
+
+################################################################
+#
+# Use default priority for BDE interrupt thread.
+#
+################################################################
+#CFGFLAGS += -DSAL_BDE_THREAD_PRIO_DEFAULT
+
+################################################################
+#
+# Use cached DMA memory when mapping kernel DMA memory to user
+# mode. Should only be enabled on cache-coherent platforms.
+#
+################################################################
+#CFGFLAGS += -DSAL_BDE_CACHE_DMA_MEM
+
+################################################################
+#
+# Take the spl lock upon entering an ISR
+#
+################################################################
+#CFGFLAGS += -DSAL_SPL_LOCK_ON_IRQ
+
+################################################################
+#
+# Silently ignore NULL pointer free in sal_free API
+# Default behaviour is to assert if a NULL pointer is passed to sal_free
+#
+################################################################
+#CFGFLAGS += -DSAL_FREE_NULL_IGNORE
+
+################################################################
+# Enable SBX MPLS TP support
+################################################################
+#CFGFLAGS += -DBCM_SBX_MPLSTP_SUPPORT
+#CFGFLAGS += -DBCM_SBX_C1_MPLSTP_SUPPORT
+
+################################################################
+# Restrict SBX C2 Fte range to C2's range
+################################################################
+#CFGFLAGS += -DBCM_SBX_C1_C2_INTEROP
+
+################################################################
+# For historical reasons the PCI probe function skips device 12
+# by default to prevent a system hang on certain platforms.
+# Set this value to zero to probe all PCI devices.
+################################################################
+#CFGFLAGS += -DOVERRIDE_PCI_SKIP_DEV_MASK=0
+
+################################################################
+# Override max devices supported by PLI BDE
+################################################################
+#CFGFLAGS += -DPLI_MAX_DEVICES
+
+################################################################
+# Track BCM API calls to avoid deinitialization while calls active
+# This will incur a small time penalty for each BCM API call
+################################################################
+#CFGFLAGS += -DBCM_CONTROL_API_TRACKING
+
+################################################################
+# Override default retry time for detach to wait for executing
+# APIs to complete.
+################################################################
+#CFGFLAGS += -DBCM_DETACH_POLL_INTERVAL_USECS_DEFAULT=100000
+#CFGFLAGS += -DBCM_DETACH_NUM_RETRIES_DEFAULT=3000
+
+################################################################
+# Disable the RX module initialization
+################################################################
+#CFGFLAGS += -DBCM_RX_DISABLE
+
+################################################################
+# Enable TX callback in interrupt thread
+################################################################
+#CFGFLAGS += -DTX_CB_INTR
+
diff --git a/bal_release/3rdparty/bcm-sdk/make/Make.local.qax b/bal_release/3rdparty/bcm-sdk/make/Make.local.qax
new file mode 100644
index 0000000..1a47e1b
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/make/Make.local.qax
@@ -0,0 +1,28 @@
+FEATURE_LIST := CINT L3 I2C MEM_SCAN EDITLINE TEST BCM_SAL_PROFILE CHASSIS RCPU ATPTRANS_SOCKET DUNE_UI INTR APIMODE PTP 
+
+DEBUG_CFLAGS=-Wdeclaration-after-statement
+
+BCM_PTL_SPT=1
+
+ALL_DPP_CHIPS = 1
+ALL_DFE_CHIPS = 1
+
+# Includes XML library and enables use of "diag pp dump" utility for PP import/export facilities 
+DATAIO_SUPPORT = 1
+KERN_VER=3.7.10
+
+CFGFLAGS += -DSTATIC=static
+CFGFLAGS += -DBCM_WARM_BOOT_SUPPORT
+CFGFLAGS += -DBCM_WARM_BOOT_SUPPORT_SW_DUMP
+CFGFLAGS += -DBCM_EASY_RELOAD_WB_COMPAT_SUPPORT
+CFGFLAGS += -DBCM_CONTROL_API_TRACKING
+CFGFLAGS += -D__DUNE_LINUX_BCM_CPU_PCIE__
+CFGFLAGS += -DPHYS_ADDRS_ARE_64BITS -DSAL_BDE_32BIT_USER_64BIT_KERNEL
+CFGFLAGS += -D_SIMPLE_MEMORY_ALLOCATION_=0 -DUSE_LINUX_BDE_MMAP=1
+CFGFLAGS += -DSCACHE_CRC_CHECK
+
+CFGFLAGS += -DBROADCOM_SVK
+
+
+VENDOR_LIST=CUSTOMER78 BROADCOM DNX
+
diff --git a/bal_release/3rdparty/bcm-sdk/make/Make.local.qax_sim b/bal_release/3rdparty/bcm-sdk/make/Make.local.qax_sim
new file mode 100644
index 0000000..9f2c402
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/make/Make.local.qax_sim
@@ -0,0 +1,33 @@
+#FEATURE_LIST := CINT L3 I2C BCMX BCMX_DIAG MEM_SCAN EDITLINE TEST BCM_SAL_PROFILE CUSTOMER CHASSIS MSTP RCPU ATPTRANS_SOCKET DUNE_UI INTR APIMODE PTP KBP
+
+FEATURE_LIST := CINT L3 I2C MEM_SCAN EDITLINE TEST BCM_SAL_PROFILE CUSTOMER CHASSIS RCPU ATPTRANS_SOCKET DUNE_UI INTR APIMODE PTP 
+
+DEBUG_CFLAGS=-Wdeclaration-after-statement 
+
+BCM_PTL_SPT=1
+
+ALL_DPP_CHIPS = 1
+ALL_DFE_CHIPS = 1
+
+# Includes XML library and enables use of "diag pp dump" utility for PP import/export facilities 
+DATAIO_SUPPORT = 1
+KERN_VER=3.7.10
+
+CFGFLAGS += -DSTATIC=static
+CFGFLAGS += -DBCM_WARM_BOOT_SUPPORT
+CFGFLAGS += -DBCM_WARM_BOOT_SUPPORT_SW_DUMP
+CFGFLAGS += -DBCM_EASY_RELOAD_WB_COMPAT_SUPPORT
+CFGFLAGS += -DBCM_CONTROL_API_TRACKING
+CFGFLAGS += -D__DUNE_LINUX_BCM_CPU_PCIE__
+CFGFLAGS += -DPHYS_ADDRS_ARE_64BITS -DSAL_BDE_32BIT_USER_64BIT_KERNEL
+CFGFLAGS += -D_SIMPLE_MEMORY_ALLOCATION_=0 -DUSE_LINUX_BDE_MMAP=1
+CFGFLAGS += -DSCACHE_CRC_CHECK
+
+CFGFLAGS += -DBROADCOM_SVK
+
+CFGFLAGS += -Wno-format-security -Wno-unused-but-set-variable
+
+#KBP_DEVICE := KBP_ALG
+
+VENDOR_LIST=CUSTOMER78 BROADCOM DNX
+
diff --git a/bal_release/3rdparty/bcm-sdk/make_ing_dir.sh b/bal_release/3rdparty/bcm-sdk/make_ing_dir.sh
new file mode 100755
index 0000000..4f15b82
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/make_ing_dir.sh
@@ -0,0 +1,33 @@
+#!/bin/sh
+# this shell script build the ING SDK with BAL switch app as a thread
+# Eventually this script will be replaced by a make file
+#set -x
+echo "Preparing ING SDK ${ING_SDK} source tree in ${ING_SDK_DIR}"
+
+# making build directory
+rm -fr ${ING_SDK_DIR}
+mkdir -p ${ING_SDK_DIR}
+cd ${ING_SDK_DIR}/..
+
+#untar the sdk tgz file
+echo "Untaring ${ING_SDK}.tar.gz"
+tar zxf ${ING_SDK_TOP_DIR}/${ING_SDK}.tar.gz
+
+#patch sdk with bal modifications - DO NOT change the patch order
+echo "Patching SDK ${ING_SDK}.tar.gz with patch file ${ING_SDK_PATCH}"
+patch -p0 < ${ING_SDK_TOP_DIR}/${ING_SDK_PATCH}
+
+#link switch app .h and .c files
+echo "Link Switch App Source files"
+cd ${ING_SDK_DIR}
+mkdir -p make/
+
+if [ "${SWITCH}" = "qax" ];
+then
+    ln -s ${ING_SDK_TOP_DIR}/make/Make.local.qax    make/Make.local
+else
+    echo " SWITCH = ${SWITCH} is not specified or supported"
+    exit
+fi
+
+echo "Done"
diff --git a/bal_release/3rdparty/bcm-sdk/rc/arad/arad.soc b/bal_release/3rdparty/bcm-sdk/rc/arad/arad.soc
new file mode 100755
index 0000000..58ff029
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/rc/arad/arad.soc
@@ -0,0 +1,156 @@
+#
+# $Id: arad.soc,v 1.90 Broadcom SDK $
+#
+# $Copyright: Copyright 2016 Broadcom Corporation.
+# This program is the proprietary software of Broadcom Corporation
+# and/or its licensors, and may only be used, duplicated, modified
+# or distributed pursuant to the terms and conditions of a separate,
+# written license agreement executed between you and Broadcom
+# (an "Authorized License").  Except as set forth in an Authorized
+# License, Broadcom grants no license (express or implied), right
+# to use, or waiver of any kind with respect to the Software, and
+# Broadcom expressly reserves all rights in and to the Software
+# and all intellectual property rights therein.  IF YOU HAVE
+# NO AUTHORIZED LICENSE, THEN YOU HAVE NO RIGHT TO USE THIS SOFTWARE
+# IN ANY WAY, AND SHOULD IMMEDIATELY NOTIFY BROADCOM AND DISCONTINUE
+# ALL USE OF THE SOFTWARE.  
+#  
+# Except as expressly set forth in the Authorized License,
+#  
+# 1.     This program, including its structure, sequence and organization,
+# constitutes the valuable trade secrets of Broadcom, and you shall use
+# all reasonable efforts to protect the confidentiality thereof,
+# and to use this information only in connection with your use of
+# Broadcom integrated circuit products.
+#  
+# 2.     TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS
+# PROVIDED "AS IS" AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES,
+# REPRESENTATIONS OR WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY,
+# OR OTHERWISE, WITH RESPECT TO THE SOFTWARE.  BROADCOM SPECIFICALLY
+# DISCLAIMS ANY AND ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY,
+# NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES,
+# ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR
+# CORRESPONDENCE TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING
+# OUT OF USE OR PERFORMANCE OF THE SOFTWARE.
+# 
+# 3.     TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL
+# BROADCOM OR ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL,
+# INCIDENTAL, SPECIAL, INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER
+# ARISING OUT OF OR IN ANY WAY RELATING TO YOUR USE OF OR INABILITY
+# TO USE THE SOFTWARE EVEN IF BROADCOM HAS BEEN ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGES; OR (ii) ANY AMOUNT IN EXCESS OF
+# THE AMOUNT ACTUALLY PAID FOR THE SOFTWARE ITSELF OR USD 1.00,
+# WHICHEVER IS GREATER. THESE LIMITATIONS SHALL APPLY NOTWITHSTANDING
+# ANY FAILURE OF ESSENTIAL PURPOSE OF ANY LIMITED REMEDY.$
+#
+
+# Load DRAM tuning properties from local File. RcLoad will not fail if file not found, and will not show errors of missing file.
+set RCError=off
+debug appl shell warn
+rcload /home/negev/bcm88650_dram_tune.soc
+debug appl shell =
+set RCError=on
+
+debug info
+debug appl rcload warn
+debug appl symtab warn
+debug bcm rx,tx,link,attach warn
+debug soc tests warn
+debug soc rx,phy,schan,reg,socmem,dma,mem,miim,mii,intr,counter,ddr warn
+debug soc common err
+debug sys verinet warn
+
+rcload arad_dram.soc
+
+# Set modid:
+# If diag_chassis is enabled (two line cards), and 'slot' is defined (slot is defined only when
+# working without a management card) - set modid to be 0 for slot 0, and 2 for slot 2
+# Otherwise (single line card, or management card), set modid to be 0 for unit 0, and 2 for unit 2
+# If module_id is set, then set modid to have module_id value
+if $?diag_chassis && $?slot "\
+  local modid $slot" \
+else "\
+  local modid $unit"
+expr $modid==1; if $? "local modid 2"
+
+if $?module_id " \
+  local modid $module_id"
+
+echo "$unit: modid=$modid"
+
+# Set base_modid:
+# Id base_module_id is set, then set base_modid to have base_module_id value.
+# Otherwise, set base_modid to be 0.
+if $?base_module_id " \
+  local base_modid $base_module_id" \
+else " \
+  local base_modid 0"
+
+expr $base_modid > 0
+if $? " \
+  echo '$unit: base_modid=$base_modid'"
+
+# Set nof_devices:
+# If diag_chassis is enabled (mgmt card) - set nof_devices to be 2.
+# Otherwise, set nof_devices to be 1.
+# If n_devices is set, then set nof_devices to have n_devices value.
+if $?diag_chassis " \
+  local nof_devices 2" \
+else "\
+  local nof_devices 1"
+
+if $?n_devices " \
+  local nof_devices $n_devices"
+
+expr $nof_devices > 1
+if $? " \
+  echo '$unit: nof_devices=$nof_devices'"
+
+if $?mng_cpu " \
+  echo '$unit:management card - polling is set on'; \
+  config add polled_irq_mode.BCM88650=1; \
+  config add schan_intr_enable.BCM88650=0; \
+  config add tdma_intr_enable.BCM88650=0; \
+  config add tslam_intr_enable.BCM88650=0; \
+  config add miim_intr_enable.BCM88650=0; \
+  config add polled_irq_mode.BCM88750=1; \
+  config add schan_intr_enable.BCM88750=0; \
+  config add tdma_intr_enable.BCM88750=0; \
+  config add tslam_intr_enable.BCM88750=0; \
+  config add miim_intr_enable.BCM88750=0; "
+
+#default values in a case which these parameters are not exist
+if !$?diag_cosq_disable "\
+  local diag_cosq_disable 0"
+if !$?warmboot "\
+  local warmboot 0"
+if !$?diag_disable "\
+  local diag_disable 0"
+if !$?diag_no_appl_stk "\
+  local diag_no_appl_stk 0"
+if !$?diag_no_itmh_prog_mode "\
+  local diag_no_itmh_prog_mode 0"
+if !$?l2_mode "\
+  local l2_mode 0"
+
+INIT_DNX ModID=$modid BaseModID=$base_modid NofDevices=$nof_devices CosqDisable=$diag_cosq_disable NoAppl=$diag_disable Warmboot=$warmboot NoApplStk=$diag_no_appl_stk NoItmhProgMode=$diag_no_itmh_prog_mode L2Mode=$l2_mode
+
+#LED support section start
+local ledcode '02 0D 67 31 67 1C 02 0E 67 31 67 1C 02 0F 67 31\
+ 67 1C 02 10 67 31 67 1C 86 E0 3A 08 67 37 75 3E\
+ 28 32 00 32 01 B7 97 75 3E 16 E0 CA 05 70 42 77\
+ 3E 67 37 75 3E 77 42 12 A0 F8 15 1A 00 57 32 0E\
+ 87 57 32 0F 87 57' #sdk88650.hex
+
+# Download LED code into LED processor and enable (if applicable).
+if $?feature_led_proc && $?ledcode && !$?simulator \
+    "led prog $ledcode; \
+     led auto on; led start"
+
+# If loading multiple rc.soc, upon loading the last unit, restart
+# all LED processors so any common blinking is in sync.
+# if !"expr $?feature_led_proc && !$?simulator && $unit == $units - 1" \
+#    "*:led stop; *:led start"
+#LED support section end
+
+echo "arad.soc: Done."
diff --git a/bal_release/3rdparty/bcm-sdk/rc/arad/arad_dram.soc b/bal_release/3rdparty/bcm-sdk/rc/arad/arad_dram.soc
new file mode 100755
index 0000000..f50e165
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/rc/arad/arad_dram.soc
@@ -0,0 +1,242 @@
+#
+# $Id: arad_dram.soc,v 1.0 Broadcom SDK $
+#
+# $Copyright: Copyright 2012 Broadcom Corporation.
+# This program is the proprietary software of Broadcom Corporation
+# and/or its licensors, and may only be used, duplicated, modified
+# or distributed pursuant to the terms and conditions of a separate,
+# written license agreement executed between you and Broadcom
+# (an "Authorized License").  Except as set forth in an Authorized
+# License, Broadcom grants no license (express or implied), right
+# to use, or waiver of any kind with respect to the Software, and
+# Broadcom expressly reserves all rights in and to the Software
+# and all intellectual property rights therein.  IF YOU HAVE
+# NO AUTHORIZED LICENSE, THEN YOU HAVE NO RIGHT TO USE THIS SOFTWARE
+# IN ANY WAY, AND SHOULD IMMEDIATELY NOTIFY BROADCOM AND DISCONTINUE
+# ALL USE OF THE SOFTWARE.  
+#  
+# Except as expressly set forth in the Authorized License,
+#  
+# 1.     This program, including its structure, sequence and organization,
+# constitutes the valuable trade secrets of Broadcom, and you shall use
+# all reasonable efforts to protect the confidentiality thereof,
+# and to use this information only in connection with your use of
+# Broadcom integrated circuit products.
+#  
+# 2.     TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS
+# PROVIDED "AS IS" AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES,
+# REPRESENTATIONS OR WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY,
+# OR OTHERWISE, WITH RESPECT TO THE SOFTWARE.  BROADCOM SPECIFICALLY
+# DISCLAIMS ANY AND ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY,
+# NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES,
+# ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR
+# CORRESPONDENCE TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING
+# OUT OF USE OR PERFORMANCE OF THE SOFTWARE.
+# 
+# 3.     TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL
+# BROADCOM OR ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL,
+# INCIDENTAL, SPECIAL, INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER
+# ARISING OUT OF OR IN ANY WAY RELATING TO YOUR USE OF OR INABILITY
+# TO USE THE SOFTWARE EVEN IF BROADCOM HAS BEEN ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGES; OR (ii) ANY AMOUNT IN EXCESS OF
+# THE AMOUNT ACTUALLY PAID FOR THE SOFTWARE ITSELF OR USD 1.00,
+# WHICHEVER IS GREATER. THESE LIMITATIONS SHALL APPLY NOTWITHSTANDING
+# ANY FAILURE OF ESSENTIAL PURPOSE OF ANY LIMITED REMEDY.$
+#
+
+if $?dram_type_DDR3_HYNIX_H5TQ2G63BFR_TEC_800 "\
+  config add ext_ram_freq=800; \
+  config add ext_ram_rows=16384; \
+  config add ext_ram_jedec=21; \
+  config add ext_ram_t_rrd=7500; \
+  config add ext_ram_t_rc=46090; \
+  config add ext_ram_t_rcd_rd=13090; \
+  config add ext_ram_t_rcd_wr=13090; \
+  config add ext_ram_t_rp=13090; \
+  config add ext_ram_t_rfc=160000; \
+  config add ext_ram_t_ras=33000; \
+  config add ext_ram_c_wr_latency=8; \
+  config add ext_ram_t_faw=40000; \
+  config add ext_ram_c_cas_latency=11; \
+  config add ddr3_mem_grade=0x111111"
+    
+if $?dram_type_DDR3_HYNIX_H5TQ2G63BFR_TEC_933 "\
+  config add ext_ram_freq=933; \
+  config add ext_ram_rows=16384; \
+  config add ext_ram_jedec=25; \
+  config add ext_ram_t_rrd=6000; \
+  config add ext_ram_t_rc=46090; \
+  config add ext_ram_t_rcd_rd=13090; \
+  config add ext_ram_t_rcd_wr=13090; \
+  config add ext_ram_t_rp=13090; \
+  config add ext_ram_t_rfc=160000; \
+  config add ext_ram_t_ras=33000; \
+  config add ext_ram_c_wr_latency=9; \
+  config add ext_ram_t_faw=35000; \
+  config add ext_ram_c_cas_latency=13; \
+  config add ddr3_mem_grade=0x131313"
+   
+if $?dram_type_DDR3_HYNIX_H5TQ2G63BFR_TEC_1066 "\
+  config add ext_ram_freq=1066; \
+  config add ext_ram_rows=16384; \
+  config add ext_ram_jedec=29; \
+  config add ext_ram_t_rrd=6000; \
+  config add ext_ram_t_rc=46090; \
+  config add ext_ram_t_rcd_rd=13090; \
+  config add ext_ram_t_rcd_wr=13090; \
+  config add ext_ram_t_rp=13090; \
+  config add ext_ram_t_rfc=160000; \
+  config add ext_ram_t_ras=33000; \
+  config add ext_ram_c_wr_latency=10; \
+  config add ext_ram_t_faw=35000; \
+  config add ext_ram_c_cas_latency=14; \
+  config add ddr3_mem_grade=0x141414"
+
+if $?dram_type_DDR3_MICRON_MT41J256M16_4GBIT_1066 "\
+  config add ext_ram_freq=1066; \
+  config add ext_ram_rows=16384; \
+  config add ext_ram_jedec=29; \
+  config add ext_ram_t_rrd=6000; \
+  config add ext_ram_t_rc=46130; \
+  config add ext_ram_t_rcd_rd=13090; \
+  config add ext_ram_t_rcd_wr=13090; \
+  config add ext_ram_t_rp=13090; \
+  config add ext_ram_t_rfc=260000; \
+  config add ext_ram_t_ras=33000; \
+  config add ext_ram_c_wr_latency=10; \
+  config add ext_ram_t_faw=35000; \
+  config add ext_ram_c_cas_latency=14; \
+  config add ddr3_mem_grade=0x141414"
+  
+if $?dram_type_DDR3_MICRON_MT42J64M16LA_15E_667 "\
+  config add ext_ram_freq=667; \
+  config add ext_ram_rows=8192; \
+  config add ext_ram_jedec=21; \
+  config add ext_ram_t_rrd=7500; \
+  config add ext_ram_t_rc=49500; \
+  config add ext_ram_t_rcd_rd=13500; \
+  config add ext_ram_t_rcd_wr=13500; \
+  config add ext_ram_t_rp=13500; \
+  config add ext_ram_t_rfc=110000; \
+  config add ext_ram_t_ras=36000; \
+  config add ext_ram_c_wr_latency=7; \
+  config add ext_ram_t_faw=45000; \
+  config add ext_ram_c_cas_latency=9; \
+  config add ddr3_mem_grade=0x090909"
+
+if $?dram_type_DDR3_MICRON_MT41J128M16HA_125_800 "\
+  config add ext_ram_freq=800; \
+  config add ext_ram_rows=16384; \
+  config add ext_ram_jedec=21; \
+  config add ext_ram_t_rrd=7500; \
+  config add ext_ram_t_rc=46090; \
+  config add ext_ram_t_rcd_rd=13090; \
+  config add ext_ram_t_rcd_wr=13090; \
+  config add ext_ram_t_rp=13090; \
+  config add ext_ram_t_rfc=160000; \
+  config add ext_ram_t_ras=33000; \
+  config add ext_ram_c_wr_latency=8; \
+  config add ext_ram_t_faw=40000; \
+  config add ext_ram_c_cas_latency=11; \
+  config add ddr3_mem_grade=0x111111"
+  
+if $?dram_type_DDR3_MICRON_MT41J128M16HA_125_933 "\
+  config add ext_ram_freq=933; \
+  config add ext_ram_rows=16384; \
+  config add ext_ram_jedec=25; \
+  config add ext_ram_t_rrd=6000; \
+  config add ext_ram_t_rc=46090; \
+  config add ext_ram_t_rcd_rd=13090; \
+  config add ext_ram_t_rcd_wr=13090; \
+  config add ext_ram_t_rp=13090; \
+  config add ext_ram_t_rfc=160000; \
+  config add ext_ram_t_ras=33000; \
+  config add ext_ram_c_wr_latency=9; \
+  config add ext_ram_t_faw=35000; \
+  config add ext_ram_c_cas_latency=13; \
+  config add ddr3_mem_grade=0x131313"
+  
+if $?dram_type_DDR3_MICRON_MT41J128M16HA_125_1066 "\
+  config add ext_ram_freq=1066; \
+  config add ext_ram_rows=16384; \
+  config add ext_ram_jedec=29; \
+  config add ext_ram_t_rrd=6000; \
+  config add ext_ram_t_rc=46090; \
+  config add ext_ram_t_rcd_rd=13090; \
+  config add ext_ram_t_rcd_wr=13090; \
+  config add ext_ram_t_rp=13090; \
+  config add ext_ram_t_rfc=160000; \
+  config add ext_ram_t_ras=33000; \
+  config add ext_ram_c_wr_latency=10; \
+  config add ext_ram_t_faw=35000; \
+  config add ext_ram_c_cas_latency=14; \
+  config add ddr3_mem_grade=0x141414"
+  
+if $?dram_type_DDR3_SAMSUNG_K4B4G1646B_4GBIT_1066 "\
+  config add ext_ram_freq=1066; \
+  config add ext_ram_rows=16384; \
+  config add ext_ram_jedec=29; \
+  config add ext_ram_t_rrd=6000; \
+  config add ext_ram_t_rc=46090; \
+  config add ext_ram_t_rcd_rd=13090; \
+  config add ext_ram_t_rcd_wr=13090; \
+  config add ext_ram_t_rp=13090; \
+  config add ext_ram_t_rfc=260000; \
+  config add ext_ram_t_ras=33000; \
+  config add ext_ram_c_wr_latency=10; \
+  config add ext_ram_t_faw=35000; \
+  config add ext_ram_c_cas_latency=14; \
+  config add ddr3_mem_grade=0x141414"
+  
+if $?dram_type_DDR3_SAMSUNG_K4B1G1646G_800 "\
+  config add ext_ram_freq=800; \
+  config add ext_ram_rows=8192; \
+  config add ext_ram_jedec=25; \
+  config add ext_ram_t_rrd=7500; \
+  config add ext_ram_t_rc=47910; \
+  config add ext_ram_t_rcd_rd=13910; \
+  config add ext_ram_t_rcd_wr=13910; \
+  config add ext_ram_t_rp=13910; \
+  config add ext_ram_t_rfc=110000; \
+  config add ext_ram_t_ras=34000; \
+  config add ext_ram_c_wr_latency=8; \
+  config add ext_ram_t_faw=40000; \
+  config add ext_ram_c_cas_latency=11; \
+  config add ddr3_mem_grade=0x111111"
+  
+if $?dram_type_DDR3_SAMSUNG_K4B1G1646G_933 "\
+  config add ext_ram_freq=933; \
+  config add ext_ram_rows=8192; \
+  config add ext_ram_jedec=25; \
+  config add ext_ram_t_rrd=6000; \
+  config add ext_ram_t_rc=47910; \
+  config add ext_ram_t_rcd_rd=13910; \
+  config add ext_ram_t_rcd_wr=13910; \
+  config add ext_ram_t_rp=13910; \
+  config add ext_ram_t_rfc=110000; \
+  config add ext_ram_t_ras=34000; \
+  config add ext_ram_c_wr_latency=9; \
+  config add ext_ram_t_faw=35000; \
+  config add ext_ram_c_cas_latency=13; \
+  config add ddr3_mem_grade=0x131313"
+  
+if $?dram_type_DDR3_HYNIX_H5TQ2G63BFR_TEC_800 || \
+   $?dram_type_DDR3_HYNIX_H5TQ2G63BFR_TEC_933 || \
+   $?dram_type_DDR3_HYNIX_H5TQ2G63BFR_TEC_1066 || \
+   $?dram_type_DDR3_MICRON_MT41J256M16_4GBIT_1066 || \
+   $?dram_type_DDR3_MICRON_MT41J128M16HA_125_800 || \
+   $?dram_type_DDR3_MICRON_MT41J128M16HA_125_933 || \
+   $?dram_type_DDR3_MICRON_MT41J128M16HA_125_1066 || \
+   $?dram_type_DDR3_MICRON_MT42J64M16LA_15E_667 || \
+   $?dram_type_DDR3_SAMSUNG_K4B4G1646B_4GBIT_1066 || \
+   $?dram_type_DDR3_SAMSUNG_K4B1G1646G_933 || \
+   $?dram_type_DDR3_SAMSUNG_K4B1G1646G_800 "\
+  config add ext_ram_type=DDR3; \
+  config add ext_ram_columns=1024; \
+  config add ext_ram_banks=8; \
+  config add ext_ram_ap_bit_pos=10; \
+  config add ext_ram_burst_size=32; \
+  config add ext_ram_t_ref=3900000; \
+  config add ext_ram_t_wr=15000; \
+  config add ext_ram_t_wtr=7500; \
+  config add ext_ram_t_rtp=7500"
diff --git a/bal_release/3rdparty/bcm-sdk/rc/arad/config.bcm b/bal_release/3rdparty/bcm-sdk/rc/arad/config.bcm
new file mode 100644
index 0000000..9fcb9ba
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/rc/arad/config.bcm
@@ -0,0 +1,1838 @@
+#
+# $Id: config-sand.bcm,v 1.140 2013/09/22 14:29:47 tomerma Exp $
+#
+# $Copyright: (c) 2011 Broadcom Corporation
+# All Rights Reserved.$
+
+#########################################
+##cfg for BCM88640 (PetraB) and BCM88650 (Arad)
+#########################################
+
+## temporary suppressing unknown soc properties warnings - till adding them unknown to property.h/propgen
+## (need to be the first soc property in the file).
+suppress_unknown_prop_warnings=1
+
+## Multi device system (Negev): 2 devices, fabric mode is FE, mod id is slot id
+## (Top line card is 0, button is 1).
+#diag_chassis=1
+
+## Disable diag init application. Should be used if one wants to run his own
+## application instead of the diag init example
+#diag_disable=1
+
+## Skip cosq configuration in diag_init
+#diag_cosq_disable=1
+
+#########################################
+##cfg for BCM88650 - Arad
+#########################################
+
+### Device configuration ###
+
+## Activate Emulation partial init. Values: 0 - Normal, 1 - Emulation .Default: 0x0.
+diag_emulator_partial_init.BCM88650=0
+
+## General
+# Set the FAP Device mode
+# Options: PP / TM / TDM_OPTIMIZED / TDM_STANDARD
+fap_device_mode.BCM88650=PP
+
+## Credit worth size (Bytes)
+credit_size.BCM88650=1024
+
+## Clock configurations
+# Core clock speed (MHz). Default: 600 MHz
+core_clock_speed_khz.BCM88650=600000
+# System reference clock (MHz). Default: 600 MHz
+system_ref_core_clock_khz.BCM88650=600000
+
+### Network Interface configuration ###
+## Use of the ucode_port_<Local-Port-Id>=<Interface-type>[<Interface-Id>][.<Channel-Id>]
+## Local port range: 0 - 255.
+## Interface types: XAUI/RXAUI/SGMII/ILKN/10GBase-R/XLGE/CGE/CPU
+
+# Map bcm local port to CPU[.channel] interfaces
+ucode_port_180.BCM88650=CPU.0
+
+pon_application_support_enabled_0.BCM88650=TRUE
+pon_application_support_enabled_1.BCM88650=TRUE
+pon_application_support_enabled_2.BCM88650=TRUE
+pon_application_support_enabled_3.BCM88650=TRUE
+#pon_application_support_enabled_4.BCM88650=TRUE
+#pon_application_support_enabled_5.BCM88650=TRUE
+#pon_application_support_enabled_6.BCM88650=TRUE
+#pon_application_support_enabled_7.BCM88650=TRUE
+
+vlan_match_criteria_mode=PON_PCP_ETHERTYPE
+
+#Firmware mode:
+# 0=DEFAULT
+# 1=SFP_OPT_SR4     - optical short range
+# 2=SFP_DAC         - direct attach copper
+# 3=XLAUI           - 40G XLAUI mode
+# 4=FORCE_OSDFE     - force over sample digital feedback equalization
+# 5=FORCE_BRDFE     - force baud rate digital feedback equalization
+# 6=SW_CL72         - software cl72 with AN on
+# 7=CL72_WITHOUT_AN - cl72 without AN
+#For Negev2 chassis enable DFE is recommended
+
+serdes_if_type=1024
+
+#serdes_firmware_mode.BCM88650=3
+serdes_firmware_mode_il.BCM88650=4
+serdes_firmware_mode_sfi.BCM88650=0
+
+#
+# Serdes firmware mode for Channelized PON interfaces
+#
+#serdes_firmware_mode_xe0.BCM88650=0
+#serdes_firmware_mode_xe1.BCM88650=0
+#serdes_firmware_mode_xe2.BCM88650=0
+#serdes_firmware_mode_xe3.BCM88650=0
+#serdes_firmware_mode_xe4.BCM88650=0
+#serdes_firmware_mode_xe5.BCM88650=0
+#serdes_firmware_mode_xe6.BCM88650=0
+#serdes_firmware_mode_xe7.BCM88650=0
+#serdes_firmware_mode_xe8.BCM88650=0
+#serdes_firmware_mode_xe9.BCM88650=0
+#serdes_firmware_mode_xe10.BCM88650=0
+#serdes_firmware_mode_xe11.BCM88650=0
+#serdes_firmware_mode_xe12.BCM88650=0
+#serdes_firmware_mode_xe13.BCM88650=0
+#serdes_firmware_mode_xe14.BCM88650=0
+#serdes_firmware_mode_xe15.BCM88650=0
+
+#
+# Serdes firmware mode for NNI interfaces
+#
+serdes_firmware_mode_xe128.BCM88650=2
+serdes_firmware_mode_xe129.BCM88650=2
+serdes_firmware_mode_xe130.BCM88650=2
+serdes_firmware_mode_xe131.BCM88650=2
+serdes_firmware_mode_xe0.BCM88650=2
+serdes_firmware_mode_xe1.BCM88650=2
+serdes_firmware_mode_xe2.BCM88650=2
+serdes_firmware_mode_xe3.BCM88650=2
+
+#
+# Set the speed for the PON-side ports (connected to Pioneer) to 12.5G
+#
+#port_init_speed_xe0.BCM88650=12500
+#port_init_speed_xe1.BCM88650=12500
+#IL# change xe3, xe2 speed to 2.5G and 1G
+port_init_speed_xe2.BCM88650=2500
+port_init_speed_xe3.BCM88650=1000
+#port_init_speed_xe4.BCM88650=12500
+#port_init_speed_xe5.BCM88650=12500
+#port_init_speed_xe6.BCM88650=12500
+#port_init_speed_xe7.BCM88650=12500
+#port_init_speed_xe8.BCM88650=12500
+#port_init_speed_xe9.BCM88650=12500
+#port_init_speed_xe10.BCM88650=12500
+#port_init_speed_xe11.BCM88650=12500
+#port_init_speed_xe12.BCM88650=12500
+#port_init_speed_xe13.BCM88650=12500
+#port_init_speed_xe14.BCM88650=12500
+#port_init_speed_xe15.BCM88650=12500
+
+#
+# Set the number of priorities for the PON-side ports (connected to
+# Pioneer) to '2'.
+#
+port_priorities_xe0.BCM88650=2
+port_priorities_xe1.BCM88650=2
+port_priorities_xe2.BCM88650=2
+port_priorities_xe3.BCM88650=2
+#port_priorities_xe4.BCM88650=2
+#port_priorities_xe5.BCM88650=2
+#port_priorities_xe6.BCM88650=2
+#port_priorities_xe7.BCM88650=2
+#port_priorities_xe8.BCM88650=2
+#port_priorities_xe9.BCM88650=2
+#port_priorities_xe10.BCM88650=2
+#port_priorities_xe11.BCM88650=2
+#port_priorities_xe12.BCM88650=2
+#port_priorities_xe13.BCM88650=2
+#port_priorities_xe14.BCM88650=2
+#port_priorities_xe15.BCM88650=2
+
+#
+# Map bcm local port to Network-Interface[.channel] interfaces
+#
+# PON Interfaces
+#
+
+#
+# Non-channelized PON Interfaces
+#
+# Uncomment the following if using non-channelized PON interfaces with
+# Pioneer.
+#
+#ucode_port_0.BCM88650=10GBase-R8
+#ucode_port_1.BCM88650=10GBase-R9
+#ucode_port_2.BCM88650=10GBase-R10
+#ucode_port_3.BCM88650=10GBase-R11
+#ucode_port_4.BCM88650=10GBase-R12
+#ucode_port_5.BCM88650=10GBase-R13
+#ucode_port_6.BCM88650=10GBase-R14
+#ucode_port_7.BCM88650=10GBase-R15
+
+#
+# Channelized PON Interfaces
+#
+# Define virtual ports for the 10G Channels
+#
+#ucode_port_0.BCM88650=10GBase-R8.0
+#ucode_port_1.BCM88650=10GBase-R9.0
+#ucode_port_2.BCM88650=10GBase-R10.0
+#ucode_port_3.BCM88650=10GBase-R11.0
+#ucode_port_4.BCM88650=10GBase-R12.0
+#ucode_port_5.BCM88650=10GBase-R13.0
+#ucode_port_6.BCM88650=10GBase-R14.0
+#ucode_port_7.BCM88650=10GBase-R15.0
+
+#
+# Define virtual ports for the 1G Channels
+#
+#ucode_port_8.BCM88650=10GBase-R8.1
+#ucode_port_9.BCM88650=10GBase-R9.1
+#ucode_port_10.BCM88650=10GBase-R10.1
+#ucode_port_11.BCM88650=10GBase-R11.1
+#ucode_port_12.BCM88650=10GBase-R12.1
+#ucode_port_13.BCM88650=10GBase-R13.1
+#ucode_port_14.BCM88650=10GBase-R14.1
+#ucode_port_15.BCM88650=10GBase-R15.1
+
+#
+# NNI Interfaces
+#
+ucode_port_128.BCM88650=10GBase-R0
+ucode_port_129.BCM88650=10GBase-R1
+ucode_port_130.BCM88650=10GBase-R2
+ucode_port_131.BCM88650=10GBase-R3
+ucode_port_0.BCM88650=10GBase-R4
+ucode_port_1.BCM88650=10GBase-R5
+ucode_port_2.BCM88650=10GBase-R6
+ucode_port_3.BCM88650=10GBase-R7
+
+#ucode_port_200.BCM88650=CPU.1
+#ucode_port_201.BCM88650=CPU.2
+#ucode_port_202.BCM88650=CPU.3
+#ucode_port_203.BCM88650=CPU.4
+
+#40G
+#ucode_port_1.BCM88650=XLGE0
+#ucode_port_2.BCM88650=XLGE1
+#ucode_port_3.BCM88650=XLGE2
+#ucode_port_4.BCM88650=XLGE3
+#ucode_port_5.BCM88650=XLGE4
+#ucode_port_6.BCM88650=XLGE5
+#ucode_port_7.BCM88650=XLGE6
+
+#ILKN configuration - basic config
+#ucode_port_31.BCM88650=ILKN0
+#ucode_port_32.BCM88650=ILKN1
+#ilkn_num_lanes_0.BCM88650=12
+#ilkn_num_lanes_1.BCM88650=12
+#port_init_speed_il.BCM88650=10312
+
+
+#ILKN per port channel stat
+#ilkn_counters_mode.BCM88650=PACKET_PER_CHANNEL
+
+#ILKN configuration - advanced
+#ilkn_metaframe_sync_period=2048
+# Enable\Disable ILKN status message sent through an out-of-band interface.
+# ilkn_interface_status_oob_ignore.BCM88650=1
+
+##ILKN retransmit
+#ilkn_retransmit_enable_rx.BCM88650=1
+#ilkn_retransmit_enable_tx.BCM88650=1
+#ilkn_retransmit_buffer_size.BCM88650=250
+#ilkn_retransmit_num_requests_resent.BCM88650=15
+#ilkn_retransmit_num_sn_repetitions_tx.BCM88650=1
+#ilkn_retransmit_num_sn_repetitions_rx.BCM88650=1
+#ilkn_retransmit_rx_timeout_words.BCM88650=3800
+#ilkn_retransmit_rx_timeout_sn.BCM88650=250
+#ilkn_retransmit_rx_ignore.BCM88650=80
+#ilkn_retransmit_rx_reset_when_error_enable.BCM88650=1
+#ilkn_retransmit_rx_watchdog.BCM88650=0
+#ilkn_retransmit_rx_reset_when_alligned_error_enable.BCM88650=1
+#ilkn_retransmit_rx_reset_when_retry_error_enable.BCM88650=1
+#ilkn_retransmit_rx_reset_when_wrap_after_disc_error_enable.BCM88650=1
+#ilkn_retransmit_rx_reset_when_wrap_before_disc_error_enable.BCM88650=0
+#ilkn_retransmit_rx_reset_when_timout_error_enable.BCM88650=0
+#ilkn_retransmit_tx_wait_for_seq_num_change_enable.BCM88650=1
+#ilkn_retransmit_tx_ignore_requests_when_fifo_almost_empty.BCM88650=1
+
+#ucode_port_40.BCM88650=RCY.0
+#ucode_port_41.BCM88650=RCY.1
+#ucode_port_42.BCM88650=RCY.2
+
+## CAUI Configuration
+#ucode_port_41.BCM88650=CGE0
+#ucode_port_42.BCM88650=CGE1
+caui_num_lanes_0.BCM88650=10
+caui_num_lanes_1.BCM88650=10
+#Required for working IXIA 100G port:
+mld_lane_swap_lane20_ce.BCM88650=0
+mld_lane_swap_lane21_ce.BCM88650=1
+mld_lane_swap_lane0_ce.BCM88650=20
+mld_lane_swap_lane1_ce.BCM88650=21
+
+# This configures the lane polarity
+pb_serdes_lane_swap_polarity_tx_phy1.BCM88650=1
+pb_serdes_lane_swap_polarity_tx_phy2.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy3.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy4.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy5.BCM88650=1
+pb_serdes_lane_swap_polarity_tx_phy6.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy7.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy8.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy9.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy10.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy11.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy12.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy13.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy14.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy15.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy16.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy17.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy18.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy19.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy20.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy21.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy22.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy23.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy24.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy25.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy26.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy27.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy28.BCM88650=0
+
+pb_serdes_lane_swap_polarity_rx_phy1.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy2.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy3.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy4.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy5.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy6.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy7.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy8.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy9.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy10.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy11.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy12.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy13.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy14.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy15.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy16.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy17.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy18.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy19.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy20.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy21.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy22.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy23.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy24.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy25.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy26.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy27.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy28.BCM88650=0
+
+xgxs_tx_lane_map_quad0.BCM88650=0x3210
+xgxs_tx_lane_map_quad1.BCM88650=0x3210
+xgxs_tx_lane_map_quad2.BCM88650=0x3210
+xgxs_tx_lane_map_quad3.BCM88650=0x3210
+xgxs_tx_lane_map_quad4.BCM88650=0x3210
+xgxs_tx_lane_map_quad5.BCM88650=0x3210
+xgxs_tx_lane_map_quad6.BCM88650=0x3210
+
+xgxs_rx_lane_map_quad0.BCM88650=0x3210
+xgxs_rx_lane_map_quad1.BCM88650=0x3210
+xgxs_rx_lane_map_quad2.BCM88650=0x3210
+xgxs_rx_lane_map_quad3.BCM88650=0x3210
+xgxs_rx_lane_map_quad4.BCM88650=0x3210
+xgxs_rx_lane_map_quad5.BCM88650=0x3210
+xgxs_rx_lane_map_quad6.BCM88650=0x3210
+
+
+
+#High voltage driver strap. If 0, connected to 1.4V supply; if 1, connected to 1V mode.
+#for specific quad use srd_tx_drv_hv_disable_quad_X where X is (FSRD num * 4 + internal quad)
+srd_tx_drv_hv_disable.BCM88650=1
+
+#Port init mode
+#port_init_duplex=0
+#port_init_adv=0
+#port_init_autoneg=0
+
+
+# This disables serdes initialization
+# phy_null.BCM88650=1
+
+##  Number of Internal ports
+# Enable the ERP port. Values: 0 / 1.
+num_erp_tm_ports.BCM88650=1
+# Enable the OLP port. Values: 0 / 1.
+num_olp_tm_ports.BCM88650=1
+# Enable OAMP
+num_oamp_ports.BCM88650=0
+
+## Firmware Load Method
+load_firmware.BCM88650=0x102
+
+### Headers configuration ###
+
+## Use of the tm_port_header_type_<Local-Port-Id>=<Header-type>
+## Default header type is derived from fap_device_mode: If fap_device_mode is
+## PP, default header type is ETH. Otherwise, defualt header type is TM.
+## Header type per port can be overriden.
+## All options: ETH/RAW/TM/PROG/CPU/STACKING/TDM/TDM_RAW/UDH_ETH
+## Injected header types: if PTCH, INJECTED (local Port of type TM) or INJECTED_PP (PP)
+##                        if PTCH-2, INJECTED_2 (local Port of type TM) or INJECTED_2_PP (PP)
+
+# Set CPU to work with TM header (ITMH)
+#tm_port_header_type_0.BCM88650=TM
+
+tm_port_header_type_in_180.BCM88650=INJECTED_2
+tm_port_header_type_out_180.BCM88650=CPU
+
+tm_port_header_type_in_200.BCM88650=INJECTED_2_PP
+tm_port_header_type_out_200.BCM88650=ETH
+tm_port_header_type_in_201.BCM88650=INJECTED_2_PP
+tm_port_header_type_out_201.BCM88650=ETH
+tm_port_header_type_in_202.BCM88650=INJECTED_2_PP
+tm_port_header_type_out_202.BCM88650=ETH
+tm_port_header_type_in_203.BCM88650=INJECTED_2_PP
+tm_port_header_type_out_203.BCM88650=ETH
+
+### Parser Configuration ###
+# Parser has 4 custom macros that are allocated dynamically and
+# configured according to the following features and soc properties:
+# Trill (1 macro) - trill_mode
+# FCoE (2 macros) - bcm886xx_fcoe_switch_mode
+# VxLAN (1 macro) - bcm886xx_vxlan_enable
+# IPv6-Extension-header (2 macros) - bcm886xx_ipv6_ext_hdr_enable
+# UDP (1 macro) - UDP parsing is enabled by default, and can be 
+#  disabled with soc property custom_feature_udp_parse_disable
+#  When disabling UDP parsing VxLAN and 1588oUDP are affected
+
+# Enable IPv6 Extension Header, 0 - disable (default), 1 - enable
+#bcm886xx_ipv6_ext_hdr_enable=1
+
+# Disable UDP parsing, 0 - enable (default), 1 - disable
+#custom_feature_udp_parse_disable=1
+
+#OAMP port
+#tm_port_header_type_out_232.BCM88650=CPU
+
+#MPLS-TP channel types for OAM/BFD - If MPLS-TP used, channel should be specified
+#Available types: mplstp_bfd_control_channel_type
+#               mplstp_pw_ach_channel_type
+#               mplstp_dlm_channel_type
+#               mplstp_ilm_channel_type
+#               mplstp_dm_channel_type
+#               mplstp_ipv4_channel_type
+#               mplstp_cc_channel_type
+#               mplstp_cv_channel_type
+#               mplstp_on_demand_cv_channel_type
+#               mplstp_pwe_oam_channel_type
+#               mplstp_ipv6_channel_type
+#               mplstp_fault_oam_channel_type
+#               mplstp_g8113_channel_type
+#mplstp_g8113_channel_type=0x8902
+
+
+
+# Set the recycling port processing to be raw (static forwarding)
+tm_port_header_type_rcy.BCM88650=RAW
+
+### RCPU
+# Valid CPU local ports on which RCPU packets can be received by slave device.
+#rcpu_rx_pbmp=0xf00000000000000000000000000000000000000000000000001
+
+#tm_port_header_type_514.BCM88650=RAW
+
+## Header extensions
+# Set if an FTMH Out-LIF extension is present to Unicast and Multicast packets
+# Options: NEVER / IF_MC (only Multicast packets) / ALWAYS
+fabric_ftmh_outlif_extension.BCM88650=IF_MC
+
+# Set the FTMH Load-Balancing Key extension mode
+# Options for 88660: ENABLED, FULL_HASH
+# Options for 88650: ENABLED
+# Options for 88640 compatible: DISABLED / 8B_LB_KEY_8B_STACKING_ROUTE_HISTORY / 16B_STACKING_ROUTE_HISTORY / 
+#                               STANDBY_MC_LB (available only for AradPlus)
+# Default: DISABLED
+system_ftmh_load_balancing_ext_mode.BCM88650=DISABLED
+
+# Set if an OTMH Out-LIF (CUD) Extension is present to Unicast and Multicast packets
+# Options: NEVER / IF_MC (only Multicast packets) / ALWAYS / DOUBLE_TAG (two hop scheduling)
+# Default: NEVER
+# tm_port_otmh_outlif_ext_mode_13.BCM88650=NEVER
+
+# Set if an OTMH Source-System-Port Extension is present.
+# Option: 0/1
+# Default: 0
+# tm_port_otmh_src_ext_enable_13.BCM88650=0
+
+#Trunk hash format, relevant only for AradPlus. Possible values: NORMAL (default) / INVERTED / DUPLICATED.
+#trunk_hash_format=NORMAL
+
+## Stacking Application
+#stacking_enable.BCM88650=1
+#custom_feature_stamp_uc_destination.BCM88650=1
+
+## System RED
+# Set System-Red functionality.
+#system_red_enable.BCM88650=1
+
+# Indicate the size (Bytes) of a first header to skip
+# before the major header at ingress (e.g. Ethernet, ITMH)
+# It can be set per port also
+first_header_size.BCM88650=0
+
+# Indicate the size (Bytes) of the PMF Extension Headers
+# to remove for TM header type ports (expecting ITMH)
+# Set per port
+#post_headers_size_0.BCM88650=4
+
+# Indicate the size (Bytes) of the User-Headers: configurable
+# headers located in the fabric between internal headers and
+# Ethernet. Their values are set by Ingress FP, and can be used
+# by Egress FP or Egress Editor.
+# units: bits. 4 values can be set:
+# 0 - size of the 1st User-Header, for the Egress PMF. 0b / 8b / 16b
+# 1 - size of the 2nd User-Header, for the Egress PMF. 0b / 8b / 16b
+# The sum of these 2 values should be under 16b
+# 2, 3 - size of the 1st/2nd User-Header, for the Egress Editor.
+# 0b / 8b / 16b / 24b / 32b
+# Each of the global User-Header size must be under 32 bits, but not 24 bits.
+# The Egress FP field is always at the MSB of the User-Header
+# Not available for 88650-A0.
+#field_class_id_size_0.BCM88650=8
+#field_class_id_size_1.BCM88650=0
+#field_class_id_size_2.BCM88650=24
+#field_class_id_size_3.BCM88650=0
+
+
+### Trunk - LAG configuration ###
+# Set Set the number of LAGs: 1024, 512, 256, 128 or 64
+number_of_trunks.BCM88650=256
+
+### SYNCE configuration ###
+## Synchronous Ethernet Signal Mode.
+## Options: TWO_DIFF_CLK, TWO_CLK_AND_VALID. Default: TWO_CLK_AND_VALID
+#sync_eth_mode.BCM88650=TWO_CLK_AND_VALID
+
+## Clock Source (single SerDes) lane in the specified NIF port.
+## Usage: sync_eth_clk_to_nif_id_clk_<clk_number>=<serdes_number>
+#sync_eth_clk_to_nif_id_clk_0.BCM88650=1
+#sync_eth_clk_to_nif_id_clk_1.BCM88650=1
+
+## Clock Divider for the selected recovered clock. Valid values: 1/2/4. Default: 1.
+## Usage: sync_eth_clk_divider_clk_<clk_number>=<1/2/4>
+#sync_eth_clk_divider_clk_0.BCM88650=1
+#sync_eth_clk_divider_clk_1.BCM88650=1
+
+## Enable the automatic squelch function for the recovered clock. Valid values: 0/1. Default: 0.
+## Usage: sync_eth_clk_squelch_enable_clk_<clk_number>=<0/1>
+#sync_eth_clk_squelch_enable_clk_0.BCM88650=0
+#sync_eth_clk_squelch_enable_clk_1.BCM88650=0
+
+### ELK configuration ###
+## External lookup (TCAM) Device type select, Indicate the External lookup Device type.
+# Value Options: NONE/NL88650. Default: NONE.
+#ext_tcam_dev_type=NL88650
+
+## Set ELK FWD table Size.
+# format: ext_xxx_fwd_table_size.
+# where xxx replaced by FWD options: ip4_uc_rpf/ip4_mc/ip6_uc_rpf/ip6/ip6_mc/trill_uc/trill_mc/mpls/coup_mpls
+# Value Options: (0) - External table disabled, >0: number of entries. Default: 0.
+#ext_ip4_uc_rpf_fwd_table_size=8192
+#ext_ip4_mc_fwd_table_size=8192
+
+## Set ELK IP FWD use NetRoute  ALG.
+# Value Options: ALG_LPM_LPM/ALG_LPM_NETROUTE/ALG_LPM_TCAM. Default: ALG_LPM_TCAM.
+#ext_fwd_algorithm_lpm=ALG_LPM_TCAM
+
+## Set ELK interface mode.
+# Change ELK interface configuration to support CAUI port.
+# Value Options: 0/1. 0 - Normal mode, 1  2 CAUI port + ELK mode. Default: 0.
+#ext_interface_mode=0
+
+### Configure MDIO interface
+# External MDIO clock rate divisor . Default: 0x24.
+#rate_ext_mdio_divisor=0x36
+# External MDIO clock rate divisor. Default: 0x1.
+#rate_ext_mdio_dividend=1
+
+### TDM - OTN configuration ###
+#fap_tdm_bypass.BCM88650=0
+
+# Indicate if a Petra-B device is connected to the actual device
+# For TDM/OTN applications,
+# system_is_petra_b_in_system.BCM88650=0
+##Indicate if TDM can arrive throgh primary pipe.
+#Should be 1 for a System with PetraB that connected to fabric over primary pipe.
+fabric_tdm_over_primary_pipe.BCM88650=0
+
+### Fabric configuration ###
+#0-LFEC 1-8b\10b 2-FEC 3-BEC
+backplane_serdes_encoding.BCM88650=2
+#SFI speed rate
+port_init_speed_sfi.BCM88650=10312
+#CL72
+#port_init_cl72_sfi=0
+fabric_segmentation_enable.BCM88650=1
+
+## Fabric transmission mode
+# Set the Connect mode to the Fabric
+# Options: FE - presence of a Fabric device (single stage) / MULT_STAGE_FE -  Multi-stage /
+# SINGLE_FAP - stand-alone device / MESH - mesh / BACK2BACK - 2 devices in Mesh
+fabric_connect_mode.BCM88650=SINGLE_FAP
+#fabric_connect_mode.BCM88650=FE
+
+## Cell format configuration
+# Indicate if the traffic can be sent in dual pipe
+is_dual_mode.BCM88650=0
+# Indicate the format of the cell:
+# A VCS128 cell is used if system_is_vcs_128_in_system or system_is_fe600_in_system is TRUE
+system_is_vcs_128_in_system.BCM88650=0
+system_is_fe600_in_system.BCM88650=0
+
+### WRED ###
+
+# Set the maximum packet size for WRED tests. 0 - means ignore max packet size.
+discard_mtu_size.BCM88650=0
+
+### OCB (On-Chip Buffer) configuration ###
+# Enable the OCB
+# Enable MODES:
+#   0/FALSE        -->  OCB_DISABLED     --> No OCB use
+#   1/TRUE         -->  OCB_ENABLED      --> Like in Arad-A0/B0. Some packets may use both DRAM and OCB resources
+#   ONE_WAY_BYPASS -->  Depends on number of present drams (available only for AradPlus):
+#                      0 drams:   - OCB_ONLY
+#                      1 drams:   - OCB_ONLY_1_DRAM     -->  : OCB-only with 1 DRAM for the free pointers
+#                      2-8 drams: - OCB_DRAM_SEPARATE   -->  : OCB and DRAM coexist separately
+#   Default: TRUE.
+bcm886xx_ocb_enable.BCM88650=1
+
+# OCB Data Buffer size. Possible values: 128/256/512/1024. Default: 256.
+bcm886xx_ocb_databuffer_size.BCM88650=256
+# Repartition between Unicast and Full Multicast buffers.
+# 0: 80% Unicast and 20% Multicast, 1: Unicast-Only
+bcm886xx_ocb_repartition.BCM88650=0
+
+### PDM configuration ###
+# Set the PDM Mode.
+# 0: simple (default), 1: reduced (mandatory for LLFC-VSQ, PFC-VSQ, or ST-VSQ)
+bcm886xx_pdm_mode.BCM88650=0
+
+### Multicast Number of DBuff mode ###
+# Set IQM FMC buffers-replication sizes
+# Options for 88650: ARAD_INIT_FMC_4K_REP_64K_DBUFF_MODE/ARAD_INIT_FMC_64_REP_128K_DBUFF_MODE
+# Default: ARAD_INIT_FMC_4K_REP_64K_DBUFF_MODE
+multicast_nbr_full_dbuff.BCM88650=ARAD_INIT_FMC_4K_REP_64K_DBUFF_MODE
+
+### Multicast configuration ###
+# Multicast egress vlan membership range. By default: 0-4095.
+egress_multicast_direct_bitmap_min.BCM88650=0
+egress_multicast_direct_bitmap_max.BCM88650=4095
+
+### VOQ - Flow configuration ###
+
+# Set the VOQ mapping mode:
+# DIRECT: More than 4K System Ports are supported. System-level WRED is not supported.
+# INDIRECT: similar to Petra-B. Up to 4K System Ports.
+voq_mapping_mode.BCM88650=INDIRECT
+
+# Set the Base Queue to be added to the packet flow-id
+# when the Flow-Id is set explicitely either by the ITMH
+# or by the Destination resolution in the Packet processing
+flow_mapping_queue_base.BCM88650=0
+
+# Set the number of priorities supported at egress per Port
+# Options: 1 / 2 / 8
+port_priorities.BCM88650=8
+
+# Set the shared multicast resource mode: Strict / Discrete
+egress_shared_resources_mode.BCM88650=Strict
+
+# Define outgoing port rate mode in data rate or packet rate.
+# Options: DATA / PACKET
+otm_port_packet_rate.BCM88650=DATA
+
+# Set Port egress recycling scheduler configuration.
+# 0: Strict Priority Scheduler, 1: Round Robin Scheduler
+port_egress_recycling_scheduler_configuration.BCM88650=0
+
+# Set statically the region mode per region id
+# 0: queue connectors only (InterDigitated = FALSE, OddEven = TRUE)
+# 1: queue connectors, SE (InterDigitated =TRUE, OddEven = TRUE)
+# 2: queue connectors, SE (InterDigitated =TRUE, OddEven = FALSE)
+dtm_flow_mapping_mode_region_65.BCM88650=0
+dtm_flow_mapping_mode_region_66.BCM88650=0
+dtm_flow_mapping_mode_region_67.BCM88650=0
+dtm_flow_mapping_mode_region_68.BCM88650=0
+dtm_flow_mapping_mode_region_69.BCM88650=0
+dtm_flow_mapping_mode_region_70.BCM88650=0
+dtm_flow_mapping_mode_region_71.BCM88650=0
+dtm_flow_mapping_mode_region_72.BCM88650=0
+dtm_flow_mapping_mode_region_73.BCM88650=0
+dtm_flow_mapping_mode_region_74.BCM88650=0
+dtm_flow_mapping_mode_region_75.BCM88650=0
+dtm_flow_mapping_mode_region_76.BCM88650=0
+dtm_flow_mapping_mode_region_77.BCM88650=0
+dtm_flow_mapping_mode_region_78.BCM88650=0
+dtm_flow_mapping_mode_region_79.BCM88650=0
+dtm_flow_mapping_mode_region_80.BCM88650=0
+dtm_flow_mapping_mode_region_81.BCM88650=1
+dtm_flow_mapping_mode_region_82.BCM88650=1
+dtm_flow_mapping_mode_region_83.BCM88650=1
+dtm_flow_mapping_mode_region_84.BCM88650=1
+dtm_flow_mapping_mode_region_85.BCM88650=1
+dtm_flow_mapping_mode_region_86.BCM88650=1
+dtm_flow_mapping_mode_region_87.BCM88650=1
+dtm_flow_mapping_mode_region_88.BCM88650=1
+dtm_flow_mapping_mode_region_89.BCM88650=1
+dtm_flow_mapping_mode_region_90.BCM88650=1
+dtm_flow_mapping_mode_region_91.BCM88650=1
+dtm_flow_mapping_mode_region_92.BCM88650=1
+dtm_flow_mapping_mode_region_93.BCM88650=1
+dtm_flow_mapping_mode_region_94.BCM88650=1
+dtm_flow_mapping_mode_region_95.BCM88650=1
+dtm_flow_mapping_mode_region_96.BCM88650=1
+dtm_flow_mapping_mode_region_97.BCM88650=1
+dtm_flow_mapping_mode_region_98.BCM88650=1
+dtm_flow_mapping_mode_region_99.BCM88650=2
+dtm_flow_mapping_mode_region_100.BCM88650=2
+dtm_flow_mapping_mode_region_101.BCM88650=2
+dtm_flow_mapping_mode_region_102.BCM88650=2
+dtm_flow_mapping_mode_region_103.BCM88650=2
+dtm_flow_mapping_mode_region_104.BCM88650=2
+dtm_flow_mapping_mode_region_105.BCM88650=2
+dtm_flow_mapping_mode_region_106.BCM88650=2
+dtm_flow_mapping_mode_region_107.BCM88650=2
+dtm_flow_mapping_mode_region_108.BCM88650=2
+dtm_flow_mapping_mode_region_109.BCM88650=2
+dtm_flow_mapping_mode_region_110.BCM88650=2
+dtm_flow_mapping_mode_region_111.BCM88650=2
+dtm_flow_mapping_mode_region_112.BCM88650=2
+dtm_flow_mapping_mode_region_113.BCM88650=2
+dtm_flow_mapping_mode_region_114.BCM88650=2
+dtm_flow_mapping_mode_region_115.BCM88650=2
+dtm_flow_mapping_mode_region_116.BCM88650=2
+dtm_flow_mapping_mode_region_117.BCM88650=2
+dtm_flow_mapping_mode_region_118.BCM88650=2
+dtm_flow_mapping_mode_region_119.BCM88650=2
+dtm_flow_mapping_mode_region_120.BCM88650=2
+dtm_flow_mapping_mode_region_121.BCM88650=2
+dtm_flow_mapping_mode_region_122.BCM88650=2
+dtm_flow_mapping_mode_region_123.BCM88650=2
+dtm_flow_mapping_mode_region_124.BCM88650=2
+dtm_flow_mapping_mode_region_125.BCM88650=2
+dtm_flow_mapping_mode_region_126.BCM88650=2
+dtm_flow_mapping_mode_region_127.BCM88650=2
+dtm_flow_mapping_mode_region_128.BCM88650=2
+
+#IL# Configure number of symmetric cores each region supports ##
+dtm_flow_nof_remote_cores_region_1.BCM88650=2
+dtm_flow_nof_remote_cores_region_2.BCM88650=2
+dtm_flow_nof_remote_cores_region_3.BCM88650=2
+dtm_flow_nof_remote_cores_region_4.BCM88650=2
+dtm_flow_nof_remote_cores_region_5.BCM88650=2
+dtm_flow_nof_remote_cores_region_6.BCM88650=2
+dtm_flow_nof_remote_cores_region_7.BCM88650=2
+dtm_flow_nof_remote_cores_region_8.BCM88650=2
+dtm_flow_nof_remote_cores_region_9.BCM88650=2
+dtm_flow_nof_remote_cores_region_10.BCM88650=2
+dtm_flow_nof_remote_cores_region_11.BCM88650=2
+dtm_flow_nof_remote_cores_region_12.BCM88650=2
+dtm_flow_nof_remote_cores_region_13.BCM88650=2
+dtm_flow_nof_remote_cores_region_14.BCM88650=2
+dtm_flow_nof_remote_cores_region_15.BCM88650=2
+dtm_flow_nof_remote_cores_region_16.BCM88650=2
+dtm_flow_nof_remote_cores_region_17.BCM88650=2
+dtm_flow_nof_remote_cores_region_18.BCM88650=2
+dtm_flow_nof_remote_cores_region_19.BCM88650=2
+dtm_flow_nof_remote_cores_region_20.BCM88650=2
+dtm_flow_nof_remote_cores_region_21.BCM88650=2
+dtm_flow_nof_remote_cores_region_22.BCM88650=2
+dtm_flow_nof_remote_cores_region_23.BCM88650=2
+dtm_flow_nof_remote_cores_region_24.BCM88650=2
+dtm_flow_nof_remote_cores_region_25.BCM88650=2
+dtm_flow_nof_remote_cores_region_26.BCM88650=2
+dtm_flow_nof_remote_cores_region_27.BCM88650=2
+dtm_flow_nof_remote_cores_region_28.BCM88650=2
+dtm_flow_nof_remote_cores_region_29.BCM88650=2
+dtm_flow_nof_remote_cores_region_30.BCM88650=2
+dtm_flow_nof_remote_cores_region_31.BCM88650=2
+dtm_flow_nof_remote_cores_region_32.BCM88650=2
+dtm_flow_nof_remote_cores_region_33.BCM88650=2
+dtm_flow_nof_remote_cores_region_34.BCM88650=2
+dtm_flow_nof_remote_cores_region_35.BCM88650=2
+dtm_flow_nof_remote_cores_region_36.BCM88650=2
+dtm_flow_nof_remote_cores_region_37.BCM88650=2
+dtm_flow_nof_remote_cores_region_38.BCM88650=2
+dtm_flow_nof_remote_cores_region_39.BCM88650=2
+dtm_flow_nof_remote_cores_region_40.BCM88650=2
+dtm_flow_nof_remote_cores_region_41.BCM88650=2
+dtm_flow_nof_remote_cores_region_42.BCM88650=2
+dtm_flow_nof_remote_cores_region_43.BCM88650=2
+dtm_flow_nof_remote_cores_region_44.BCM88650=2
+dtm_flow_nof_remote_cores_region_45.BCM88650=2
+dtm_flow_nof_remote_cores_region_46.BCM88650=2
+dtm_flow_nof_remote_cores_region_47.BCM88650=2
+dtm_flow_nof_remote_cores_region_48.BCM88650=2
+dtm_flow_nof_remote_cores_region_49.BCM88650=2
+dtm_flow_nof_remote_cores_region_50.BCM88650=2
+dtm_flow_nof_remote_cores_region_51.BCM88650=2
+dtm_flow_nof_remote_cores_region_52.BCM88650=2
+dtm_flow_nof_remote_cores_region_53.BCM88650=2
+dtm_flow_nof_remote_cores_region_54.BCM88650=2
+dtm_flow_nof_remote_cores_region_55.BCM88650=2
+dtm_flow_nof_remote_cores_region_56.BCM88650=2
+dtm_flow_nof_remote_cores_region_57.BCM88650=2
+dtm_flow_nof_remote_cores_region_58.BCM88650=2
+dtm_flow_nof_remote_cores_region_59.BCM88650=2
+dtm_flow_nof_remote_cores_region_60.BCM88650=2
+
+dtm_flow_nof_remote_cores_region_core0_2.BCM88650=1
+dtm_flow_nof_remote_cores_region_core0_3.BCM88650=1
+
+### Flow Control configuration ###
+# Set the Flow control type per Port.
+# Options: LL (Link-level) / CB2 (Class-Based - 2 classes) /
+# CB8 (Class-Based - 8 classes)
+# flow_control_type.BCM88650=LL
+
+## Out-Of-Band Flow control configuration
+#spn_FC_OOB_TYPE, spn_FC_OOB_MODE, spn_FC_OOB_CALENDER_LENGTH, spn_FC_OOB_CALENDER_REP_COUNT,
+
+## Set voltage mode for oob interfaces
+#HSTL_1.5V
+#3.3V
+#HSTL_1.5V_VDDO_DIV_2
+ext_voltage_mode_oob=3.3V
+
+## Inband Interlaken configuration
+# spn_FC_INBAND_INTLKN_MODE, spn_FC_INBAND_INTLKN_CALENDER_LENGTH, spn_FC_INBAND_INTLKN_CALENDER_REP_COUNT
+# spn_FC_INBAND_INTLKN_CALENDER_LLFC_MODE, spn_FC_INBAND_INTLKN_LLFC_MUB_ENABLE_MASK
+
+### Meter engine configuration ###
+
+# Specify meter operation mode
+# 32 - Two meters per packet (32k total)
+# 64 - One meter per packet (64k total)
+# Options: 0, 32, 64
+policer_ingress_count.BCM88650=32
+
+# For meters in double 32k mode, determine the sharing mode
+# Options:
+# 0 - NONE (only for 64k mode)
+# 1 - SERIAL (only for 32k mode)
+# 2 - PARALLEL (only for 32k mode)
+policer_ingress_sharing_mode.BCM88650=1
+
+# Applies only to Arad+ (88660)
+# For meters in parallel mode, determine the mapping
+# Options: BEST, WORST
+# policer_result_parallel_color_map.BCM88650=WORST
+
+# Applies only to Arad+ (88660)
+# For meters in parallel mode, determine how the buckets are changed
+# Options: CONSTANT, TRANSPARENT, DEFERRED
+# policer_result_parallel_bucket_update.BCM88650=CONSTANT
+
+# Applies only to Arad+ (88660)
+# Set the Ethernet policer to work in color blind mode
+# rate_color_blind.BCM88650=1
+
+# L2 learn limit mode
+# Options: VLAN, VLAN_PORT, TUNNEL or the numeric equivalent 0-2.
+# Default: VLAN
+# l2_learn_limit_mode = VLAN_PORT
+
+# Applies only to Arad+ (88660)
+# Determines the L2 learn limit ranges when l2_learn_limit_mode is set to VLAN_PORT
+# Two range bases can be selected, each of 16K size.
+# Options: 0, 16K, 32K, 48K.
+# Default: 0 & 16K
+# l2_learn_lif_range_base_0 = 0
+# l2_learn_lif_range_base_1 = 16K
+
+### Counter engine configuration ###
+
+# Set the Counter source
+# Options: INGRESS_FIELD / INGRESS_VOQ / INGRESS_VSQ
+# INGRESS_CNM / EGRESS_FIELD / EGRESS_VSI / EGRESS_OUT_LIF / EGRESS_TM (per queue) / EGRESS_TM_PORT (per port)
+# EGRESS_RECEIVE_VSI / EGRESS_RECEIVE_OUT_LIF / EGRESS_RECEIVE_TM (per queue) / EGRESS_RECEIVE_TM_PORT (per port)
+# INGRESS_OAM / EGRESS_OAM
+# 2 Counter-Pointers can be set (with _0 and _1) for
+# INGRESS_FIELD / EGRESS_VSI / EGRESS_OUT_LIF / EGRESS_TM / EGRESS_TM_PORT
+# Range extension can be set (with _LSB and _MSB) for
+# INGRESS_FIELD / EGRESS_VSI / EGRESS_OUT_LIF / EGRESS_TM / EGRESS_TM_PORT /EGRESS_RECEIVE_VSI /
+# EGRESS_RECEIVE_OUT_LIF / EGRESS_RECEIVE_TM / EGRESS_RECEIVE_TM_PORT
+counter_engine_source_0.BCM88650=INGRESS_FIELD
+counter_engine_source_1.BCM88650=INGRESS_FIELD_1
+counter_engine_source_2.BCM88650=INGRESS_VOQ
+###
+###  DML
+###
+###  For DML applications, counter engine 3 is used for VOQ
+###  counters. This in combination with configuring the engines used for
+###  VOQs for FWD_DROP allows for counters for 32K VOQs.
+###
+#counter_engine_source_3.BCM88650=EGRESS_FIELD
+counter_engine_source_3.BCM88650=INGRESS_VOQ
+
+# Configure the statistic interface egress source
+# Options: EGRESS_VSI / EGRESS_OUT_LIF / EGRESS_TM / EGRESS_TM_PORT (the default is TM)
+# valid just when there is no conflict with the other counter engines
+#counter_engine_source_stat0.BCM88650=EGRESS_TM
+#counter_engine_source_stat1.BCM88650=EGRESS_TM
+
+
+# Set the Counter engine resolution
+# SIMPLE_COLOR = green, not green
+# SIMPLE_COLOR_FWD = fwd green, fwd not green (BCM88660_A0 only)
+# SIMPLE_COLOR_DROP = drop green, drop not green (BCM88660_A0 only)
+# FWD_DROP = forwarded, dropped
+# GREEN_NOT_GREEN = fwd grn, drop grn, fwd not grn, drop not grn
+# FULL_COLOR = fwd grn, drop grn, fwd not grn, drop yel, drop red
+# ALL = received
+# FWD = forwarded, DROP = droped (not supported by ARAD_A0)
+# CONFIGURABLE = defined by counter_engine_map_ SOC properties (BCM88660_A0 only)
+counter_engine_statistics_0.BCM88650=FULL_COLOR
+counter_engine_statistics_1.BCM88650=FULL_COLOR
+###
+###  DML
+###
+###  For DML applications, counter engine 3 is used for VOQ
+###  counters. This in combination with configuring the engines used for
+###  VOQs for FWD_DROP allows for counters for 32K VOQs.
+###
+#counter_engine_statistics_2.BCM88650=FULL_COLOR
+#counter_engine_statistics_3.BCM88650=FULL_COLOR
+counter_engine_statistics_2.BCM88650=FWD_DROP
+counter_engine_statistics_3.BCM88650=FWD_DROP
+
+# Set the Counter format
+# Options: PACKETS_AND_BYTES / PACKETS / BYTES
+# / MAX_QUEUE_SIZE / PACKETS_AND_PACKETS(supported just in FWD_DROP statistic in BCM88660_A0)
+# If not PACKETS_AND_BYTES or PACKETS_AND_PACKETS, the HW Counter width is 59 bits, thus
+# no background SW operation is performed
+counter_engine_format_0.BCM88650=PACKETS_AND_BYTES
+counter_engine_format_1.BCM88650=PACKETS_AND_BYTES
+counter_engine_format_2.BCM88650=PACKETS_AND_BYTES
+counter_engine_format_3.BCM88650=PACKETS_AND_BYTES
+
+# #enable/disable counter processor background thread (default:1-enable)
+# counter_engine_sampling_interval=1
+
+### Configurable mode configuration (BCM88660_A0 only)###
+# counter_engine_statistics_0.BCM88660_A0=CONFIGURABLE
+# counter_engine_map_enable_0.BCM88660_A0=1
+# counter_engine_map_size_0.BCM88660_A0=4
+# counter_engine_map_fwd_green_offset_0.BCM88660_A0=0
+# counter_engine_map_fwd_yellow_offset_0.BCM88660_A0=1
+# counter_engine_map_fwd_red_offset_0.BCM88660_A0=1
+# counter_engine_map_fwd_black_offset_0.BCM88660_A0=2
+# counter_engine_map_drop_green_offset_0.BCM88660_A0=3
+# counter_engine_map_drop_yellow_offset_0.BCM88660_A0=3
+# counter_engine_map_drop_red_offset_0.BCM88660_A0=3
+# counter_engine_map_drop_black_offset_0.BCM88660_A0=3
+
+### Statistic-Report configuration ###
+# Enable the Statistic-Interface configuration
+# stat_if_enable_<port> - not supported by ARAD_A0
+# stat_if_enable.BCM88650=1
+
+# ## Statistic-Report Properties
+# # Set the Statistic-Report mode
+# # Options: BILLING / BILLING_QUEUE_NUMBER (not supported by ARAD_A0)/ QSIZE
+# stat_if_report_mode.BCM88650=QSIZE
+# #Indicate if idle reports must be sent
+# #when the Statistic-report rate is too low
+# stat_if_idle_reports_present.BCM88650=0
+# # Indicate if the reported packet size is the original packet size
+# stat_if_report_original_pkt_size.BCM88650=1
+# #If set then a single ingress-billing report will be generated
+# #for the whole set of the multicast copies
+# stat_if_report_multicast_single_copy=1
+# ## Statistic Packet configurations
+# # Set the Statistic Packet size (Bytes)
+# # Valid valued: 65B/126B/248B/492B (Queue-Size), 64B/128B/256B/512B/1024B (Billing)
+# stat_if_pkt_size=64B
+#
+# ## Scrubber configuration
+# # Set the range of VOQs to scrub. Range: 0 - 96K-1.
+# stat_if_scrubber_queue_min.BCM88650=0
+# stat_if_scrubber_queue_max.BCM88650=0
+#
+# # Set the scrubber rate range
+# # If set to 0 (default), the scrubber is disabled. Units: nanoseconds
+# stat_if_scrubber_rate_min.BCM88650=0
+# stat_if_scrubber_rate_max.BCM88650=0
+#
+# # Set the thresholds (thresh_id 0 - 15) defining
+# # occupancy range per resource type:
+# # DRAM Buffers, Buffer descriptors, Buffer descriptors buffers
+# stat_if_scrubber_bdb_th.BCM88650=0
+# stat_if_scrubber_buffer_descr_th.BCM88650=0
+# stat_if_uc_dram_buffer_descr_th.BCM88650=0
+#
+# #Relective report for queue size mode - not supported by ARAD_A0
+# #Reports will be created for queue num range (stat_if_selective_report_queue_min -stat_if_selective_report_queue_max)
+# #Default - all range
+# stat_if_selective_report_queue_min.BCM88650_B0=0
+# stat_if_selective_report_queue_max.BCM88650_B0=98303
+
+### Transaction - DMA configuration ###
+# Time to wait for SCHAN channel response (from CMIC). Units: microseconds.
+
+# TODO
+### Counter threads ###
+# spn_BCM_STAT_PBMP, spn_BCM_STAT_INTERVAL, spn_BCM_STAT_FLAGS
+
+### Interrupts ###
+## Set interrupts global parameters.
+# Options: 1 - Polling interrupt mode, 0 - Line/MSI interrupt mode. Default: 1.
+polled_irq_mode.BCM88650=0
+#  Set the delay in microsecond between the polling, relevant only to Polling mode.  Default: 0x0.
+polled_irq_delay.BCM88650=50000
+
+## CMIC interrupts:
+# Enable: Use interrupts completion instead of polling completion for the following operations.
+#         Options: 1 - Enable, 0 - Disable. Default: 0.
+# Timeout: delay in Microsecond between the polling, relevant only to Polling completion mode.
+# SCHAN:
+#schan_intr_enable.0=1
+schan_timeout_usec.BCM88650=300000
+# TDMA
+tdma_intr_enable.BCM88650=1
+tdma_timeout_usec.BCM88650=80000000
+# TSLAM
+tslam_intr_enable.BCM88650=1
+tslam_timeout_usec.BCM88650=80000000
+# MIIM
+#miim_intr_enable.0=1
+miim_timeout_usec.0=300000
+
+### DRAM configuration ###
+
+# DRAM buffer (Dbuff) size
+# Allowed values: 256/512/1024/2048.
+ext_ram_dbuff_size.BCM88650=1024
+
+# Number of external DRAMs.
+# Allowed values for 88650: 0/2/3/4/6/8. A value of 0 disables the DRAM.
+# Allowed values for 88660: 0/1/2/3/4/6/8. A value of 0 disables the DRAM.
+#                                          A value of 1 is permitted only in ONE WAY BYPASS ocb mode.
+ext_ram_present.BCM88650=8
+
+### Dram Tuning (Shmoo)
+# 2 = Use Dram saved config Parameters, if no Parameters Perform Shmoo on init. Default option.
+# 1 = Perform Shmoo on init.
+# 0 = Use Dram saved config Parameters, if no Parameters do nothing.
+ddr3_auto_tune.BCM88650=2
+
+### Enable BIST
+# Run Dram BIST on initialization, if BIST fail the initialization will fail. Defult: 1.
+# bist_enable_dram.BCM88650=1
+
+### Example for Dram Saved config Parameters.
+## This example is for ci=14 (Dram=7).
+#ddr3_tune_addrc_ci14=0x000000ae
+#ddr3_tune_wr_dq_wl1_ci14=0x92929292,0x92929292,0x92929292,0x92929292
+#ddr3_tune_wr_dq_wl0_ci14=0x93939393,0x93939393,0x92929292,0x92929292
+#ddr3_tune_wr_dq_ci14=0x80808080
+#ddr3_tune_vref_ci14=0x000007df
+#ddr3_tune_rd_dqs_ci14=0x96969191,0x90909191
+#ddr3_tune_rd_dq_wl1_rn_ci14=0x82828282,0x82828282,0x82828282,0x82828282
+#ddr3_tune_rd_dq_wl0_rn_ci14=0x82828282,0x82828282,0x89898989,0x89898989
+#ddr3_tune_rd_dq_wl1_rp_ci14=0x82828282,0x82828282,0x82828282,0x82828282
+#ddr3_tune_rd_dq_wl0_rp_ci14=0x82828282,0x82828282,0x89898989,0x89898989
+#ddr3_tune_rd_en_ci14=0x009d9e9d,0x00a2a3a1
+#ddr3_tune_rd_data_dly_ci14=0x00000505
+   ddr3_tune_rd_dq_wl1_rp_ci8.0=0x82828282,0x82828282,0x8b8b8b8b,0x8b8b8b8b
+    ddr3_tune_wr_dq_wl0_ci4.0=0x93939393,0x93939393,0x92929292,0x92929292
+    ddr3_tune_vref_ci10.0=0x0000079e
+    ddr3_tune_wr_dq_wl1_ci2.0=0x92929292,0x92929292,0x92929292,0x92929292
+    ddr3_tune_wr_dq_ci6.0=0x80808080
+    ddr3_tune_rd_dq_wl0_rn_ci6.0=0x80808080,0x80808080,0x8c8c8c8c,0x8c8c8c8c
+    ddr3_tune_rd_dq_wl1_rp_ci10.0=0x83838383,0x83838383,0x84848484,0x84848484
+    ddr3_tune_rd_dqs_ci8.0=0x96969797,0x94949090
+    ddr3_tune_vref_ci6.0=0x0000079e
+    ddr3_tune_rd_dq_wl0_rp_ci14.0=0x83838383,0x83838383,0x83838383,0x83838383
+    ddr3_tune_rd_en_ci10.0=0x009fa09f,0x009a9c99
+    ddr3_tune_rd_data_dly_ci4.0=0x00000404
+    ddr3_tune_addrc_ci8.0=0x000000ab
+    ddr3_tune_rd_dq_wl0_rp_ci2.0=0x81818181,0x81818181,0x84848484,0x84848484
+    ddr3_tune_rd_dqs_ci10.0=0x96969090,0x90909090
+    ddr3_tune_rd_en_ci2.0=0x009c9c9c,0x009a9c98
+    ddr3_tune_wr_dq_wl0_ci12.0=0x93939393,0x93939393,0x93939393,0x93939393
+    ddr3_tune_rd_dq_wl1_rn_ci4.0=0x84848484,0x84848484,0x8c8c8c8c,0x8c8c8c8c
+    ddr3_tune_addrc_ci10.0=0x000000af
+    ddr3_tune_wr_dq_wl0_ci6.0=0x90909090,0x90909090,0x93939393,0x93939393
+    ddr3_tune_vref_ci12.0=0x0000079e
+    ddr3_tune_rd_dq_wl0_rn_ci10.0=0x83838383,0x83838383,0x8c8c8c8c,0x8c8c8c8c
+    ddr3_tune_wr_dq_wl1_ci4.0=0x93939393,0x93939393,0x94949494,0x94949494
+    ddr3_tune_wr_dq_ci8.0=0x80808080
+    ddr3_tune_rd_dq_wl1_rp_ci0.0=0x83838383,0x83838383,0x84848484,0x84848484
+    ddr3_tune_wr_dq_wl1_ci10.0=0x95959595,0x95959595,0x95959595,0x95959595
+    ddr3_tune_rd_dq_wl0_rn_ci8.0=0x8a8a8a8a,0x8a8a8a8a,0x89898989,0x89898989
+    ddr3_tune_rd_dq_wl1_rp_ci12.0=0x84848484,0x84848484,0x84848484,0x84848484
+    ddr3_tune_wr_dq_ci10.0=0x80808080
+    ddr3_tune_vref_ci8.0=0x000007df
+    ddr3_tune_rd_en_ci12.0=0x009c9c9d,0x00a0a29f
+    ddr3_tune_rd_data_dly_ci6.0=0x00000505
+    ddr3_tune_rd_dq_wl0_rp_ci4.0=0x83838383,0x83838383,0x81818181,0x81818181
+    ddr3_tune_rd_dqs_ci12.0=0x91919292,0x92929393
+    ddr3_tune_rd_dqs_ci0.0=0x96969292,0x91919191
+    ddr3_tune_rd_en_ci4.0=0x00979798,0x009c9e9a
+    ddr3_tune_rd_data_dly_ci10.0=0x00000505
+    ddr3_tune_addrc_ci0.0=0x000000ad
+    ddr3_tune_wr_dq_wl0_ci14.0=0x94949494,0x94949494,0x93939393,0x93939393
+    ddr3_tune_rd_dq_wl1_rn_ci6.0=0x89898989,0x89898989,0x8b8b8b8b,0x8b8b8b8b
+    ddr3_tune_addrc_ci12.0=0x000000b3
+    ddr3_tune_wr_dq_wl0_ci8.0=0x93939393,0x93939393,0x93939393,0x93939393
+    ddr3_tune_vref_ci14.0=0x0000079e
+    ddr3_tune_rd_dq_wl0_rn_ci12.0=0x83838383,0x83838383,0x83838383,0x83838383
+    ddr3_tune_wr_dq_wl1_ci6.0=0x94949494,0x94949494,0x94949494,0x94949494
+    ddr3_tune_rd_dq_wl1_rp_ci2.0=0x83838383,0x83838383,0x89898989,0x89898989
+    ddr3_tune_wr_dq_wl1_ci12.0=0x94949494,0x94949494,0x94949494,0x94949494
+    ddr3_tune_rd_dq_wl1_rp_ci14.0=0x81818181,0x81818181,0x83838383,0x83838383
+    ddr3_tune_wr_dq_ci12.0=0x80808080
+    ddr3_tune_wr_dq_ci0.0=0x80808080
+    ddr3_tune_rd_en_ci14.0=0x009f9f9f,0x00a2a4a1
+    ddr3_tune_rd_dq_wl0_rn_ci0.0=0x83838383,0x83838383,0x89898989,0x89898989
+    ddr3_tune_rd_data_dly_ci8.0=0x00000505
+    ddr3_tune_rd_dq_wl0_rp_ci6.0=0x80808080,0x80808080,0x8c8c8c8c,0x8c8c8c8c
+    ddr3_tune_rd_dqs_ci14.0=0x91919292,0x90909090
+    ddr3_tune_rd_dqs_ci2.0=0x90908f8f,0x95959090
+    ddr3_tune_rd_en_ci6.0=0x009c9d9b,0x009ea09d
+    ddr3_tune_rd_data_dly_ci12.0=0x00000505
+    ddr3_tune_vref_ci0.0=0x000007df
+    ddr3_tune_addrc_ci2.0=0x000000ae
+    ddr3_tune_rd_dq_wl1_rn_ci8.0=0x82828282,0x82828282,0x8b8b8b8b,0x8b8b8b8b
+    ddr3_tune_addrc_ci14.0=0x000000b0
+    ddr3_tune_rd_dq_wl1_rn_ci10.0=0x83838383,0x83838383,0x84848484,0x84848484
+    ddr3_tune_rd_dq_wl0_rn_ci14.0=0x83838383,0x83838383,0x83838383,0x83838383
+    ddr3_tune_wr_dq_wl1_ci8.0=0x93939393,0x93939393,0x94949494,0x94949494
+    ddr3_tune_rd_dq_wl1_rp_ci4.0=0x84848484,0x84848484,0x8c8c8c8c,0x8c8c8c8c
+    ddr3_tune_wr_dq_wl1_ci14.0=0x95959595,0x95959595,0x95959595,0x95959595
+    ddr3_tune_wr_dq_wl0_ci0.0=0x93939393,0x93939393,0x92929292,0x92929292
+    ddr3_tune_wr_dq_ci14.0=0x80808080
+    ddr3_tune_wr_dq_ci2.0=0x80808080
+    ddr3_tune_rd_dq_wl0_rn_ci2.0=0x81818181,0x81818181,0x84848484,0x84848484
+    ddr3_tune_rd_dq_wl0_rp_ci8.0=0x8a8a8a8a,0x8a8a8a8a,0x89898989,0x89898989
+    ddr3_tune_rd_dqs_ci4.0=0x8f8f9090,0x95959191
+    ddr3_tune_rd_en_ci8.0=0x00a0a0a0,0x009b9e99
+    ddr3_tune_rd_data_dly_ci14.0=0x00000505
+    ddr3_tune_vref_ci2.0=0x000007df
+    ddr3_tune_rd_dq_wl0_rp_ci10.0=0x83838383,0x83838383,0x8c8c8c8c,0x8c8c8c8c
+    ddr3_tune_rd_data_dly_ci0.0=0x00000505
+    ddr3_tune_addrc_ci4.0=0x000000af
+    ddr3_tune_rd_dq_wl1_rn_ci12.0=0x84848484,0x84848484,0x84848484,0x84848484
+    ddr3_tune_rd_dq_wl1_rn_ci0.0=0x83838383,0x83838383,0x84848484,0x84848484
+    ddr3_tune_rd_dq_wl1_rp_ci6.0=0x89898989,0x89898989,0x8b8b8b8b,0x8b8b8b8b
+    ddr3_tune_wr_dq_wl0_ci2.0=0x92929292,0x92929292,0x92929292,0x92929292
+    ddr3_tune_wr_dq_wl1_ci0.0=0x92929292,0x92929292,0x92929292,0x92929292
+    ddr3_tune_wr_dq_ci4.0=0x80808080
+    ddr3_tune_rd_dq_wl0_rn_ci4.0=0x83838383,0x83838383,0x81818181,0x81818181
+    ddr3_tune_rd_dqs_ci6.0=0x94948f8f,0x93939393
+    ddr3_tune_vref_ci4.0=0x0000079e
+    ddr3_tune_rd_dq_wl0_rp_ci12.0=0x83838383,0x83838383,0x83838383,0x83838383
+    ddr3_tune_rd_data_dly_ci2.0=0x00000404
+    ddr3_tune_addrc_ci6.0=0x000000ab
+    ddr3_tune_rd_dq_wl0_rp_ci0.0=0x83838383,0x83838383,0x89898989,0x89898989
+    ddr3_tune_rd_dq_wl1_rn_ci14.0=0x81818181,0x81818181,0x83838383,0x83838383
+    ddr3_tune_rd_en_ci0.0=0x009fa09f,0x00999b98
+    ddr3_tune_wr_dq_wl0_ci10.0=0x94949494,0x94949494,0x96969696,0x96969696
+    ddr3_tune_rd_dq_wl1_rn_ci2.0=0x83838383,0x83838383,0x89898989,0x89898989
+
+
+# Dram type: Select ONLY ONE of the following DRAM types, to configure all dram related parameteres per type.
+# Dram Type for Arad:
+dram_type_DDR3_HYNIX_H5TQ2G63BFR_TEC_1066=1
+#dram_type_DDR3_HYNIX_H5TQ2G63BFR_TEC_933=1
+#dram_type_DDR3_HYNIX_H5TQ2G63BFR_TEC_800=1
+#dram_type_DDR3_MICRON_MT41J256M16_4GBIT_1066=1
+#dram_type_DDR3_MICRON_MT41J128M16HA_125_1066=1
+#dram_type_DDR3_MICRON_MT41J128M16HA_125_933=1
+#dram_type_DDR3_MICRON_MT41J128M16HA_125_800=1
+#dram_type_DDR3_MICRON_MT42J64M16LA_15E_667=1
+#dram_type_DDR3_SAMSUNG_K4B4G1646B_4GBIT_1066=1
+#dram_type_DDR3_SAMSUNG_K4B1G1646G_933=1
+#dram_type_DDR3_SAMSUNG_K4B1G1646G_800=1
+
+### Setting dram_type_DDR3_HYNIX_H5TQ2G63BFR_TEC_1066 Parameters as Default:
+## All other dram types parameter resides in arad.soc. choosing another Dram Type will override the following parameters.
+ext_ram_t_rrd=6000
+ext_ram_columns=1024
+ext_ram_banks=8
+ext_ram_ap_bit_pos=10
+ext_ram_burst_size=32
+ext_ram_t_ref=3900000
+ext_ram_t_wr=15000
+ext_ram_t_wtr=7500
+ext_ram_t_rtp=7500
+ext_ram_freq=1066
+ext_ram_rows=16384
+ext_ram_jedec=29
+ext_ram_t_rc=46090
+ext_ram_t_rcd_rd=13090
+ext_ram_t_rcd_wr=13090
+ext_ram_t_rp=13090
+ext_ram_t_rfc=160000
+ext_ram_t_ras=33000
+ext_ram_c_wr_latency=10
+ext_ram_t_faw=35000
+ext_ram_c_cas_latency=14
+ddr3_mem_grade=0x141414
+
+# DRAM pre-configurations according to config variables which defines
+# Dram Type. supports only DDR3:
+ext_ram_type.BCM88650=DDR3
+
+# Total Dram Size (MBytes)
+# For 8 drams interfaces, 2 channel each, Each channel 2Gbit Dram. the total DRAM size is 32GBits=4000MBytes.
+ext_ram_total_size.BCM88650=4000
+
+# Total buffer size allocated for User buffer. Units: Mbytes. Default: '0x0'.
+# Supported suffix:
+#       dram - the buffer size will be subtracted from the DRAM size available for packet memory.
+#user_buffer_size=0
+#user_buffer_size_dram=50
+
+# DRAM ClamShell (interface swap its HW PIN pairs during init. Note: Only one of DRAMs can have its PIN swapped)
+# Valid values: 0/1
+#dram0_clamshell_enable.BCM88650=1
+#dram1_clamshell_enable.BCM88650=1
+
+# DRAM maximum number of crc error per buffer, buffer deleted by interrupt application.
+#dram_crc_del_buffer_max_reclaims=0
+
+### Warmboot ###
+## Scache initialization for warmboot persistent storage.
+#Save the warm boot data in a file. Allowed values: 3.
+#stable_location.BCM88650=3
+#Set the warm boot data filename.
+#stable_filename.BCM88650=./warmboot_data
+#Set the warm boot data file size (At least 10MB for PETRA-B, 4MB for ARAD)
+#stable_size.BCM88650=1000000000
+
+
+##############################
+# Config variable below are only accessed from dune.soc, and are used to
+# configure BSP / example application / group of formal config variables.
+##############################
+
+## If set, always configures synthesizers, even if the configured rate is equal to
+## their nominal rate. Can be disabled to speedup bringup time (keep in mind that if
+## disabled, changing a synt to a non-nominal freq and than back to nominal will not
+## work
+#synt_over.BCM88650=1
+
+# Local variables for board synthesizers freq. Fabric, combo and nif also configure
+# the *_ref_clock soc properties for these frequencies. core, ddr and phy only
+# configures the synthesizer
+synt_core.BCM88650=100000000
+synt_ddr.BCM88650=125000000
+synt_phy.BCM88650=156250000
+synth_dram_freq.BCM88650=25
+
+#Configure the reference clock frequencies for NIF and Fabric SerDes
+# Options:  0 - 125MHZ, 1 - 156.25MHz
+serdes_nif_clk_freq.BCM88650=1
+serdes_fabric_clk_freq.BCM88650=1
+# IEEE 1588 -
+# configure clock (for 1588 debug, when Broadsync is disabled):
+#  DPLL mode/lock: 0 - eci ts pll clk disabled, 1 - configure eci ts pll clk
+#  DPLL phase/freq. Default initial: lo = 0x40000000, hi = 0x10000000.
+#phy_1588_dpll_frequency_lock.BCM88650=1
+#phy_1588_dpll_phase_initial_lo.BCM88650=0x40000000
+#phy_1588_dpll_phase_initial_hi.BCM88650=0x10000000
+# port external MAC
+#  indication whether external MAC exists or not.
+#  0: 1588 external MAC does not exist
+#  1: 1588 external MAC exists
+#  the external MAC substracts the RX time from the correction field
+#  and adds the TX time to the correction field.
+#ext_1588_mac_enable_14.BCM88650=1
+
+## Trill configurations
+# Trill mode: 0 (disabled) / 1 (coarse-grained) / 2 (fine-grained)
+#trill_mode.BCM88650=1
+
+# Trill multicast prunning mode:
+# 0: no prunning - vsi is not part of the key
+# 1: VSI prunning: Key is dist-tree,esadit-bit,VSI.
+trill_mc_prune_mode.BCM88650=0
+
+# Enable SA authentication
+#sa_auth_enabled=1
+
+# Bridge default logical interfaces allocation IDS
+logical_port_l2_bridge.BCM88650=0
+logical_port_drop.BCM88650=1
+
+#logical_port_mim_in.BCM88650=2
+#logical_port_mim_out.BCM88650=4096
+
+# Enable EVB application
+#evb_enable=1
+
+# Enable Flexible QinQ application
+#vlan_translation_match_ipv4=1
+
+
+# Prepend tag to be 4 bytes or 8 bytes. Default: 4B.
+# Applicable only from ARAD+
+#prepend_tag_bytes=4B
+
+# The Prepend Tag is located at (12 + 2*offset) bytes from the start of the packet.
+# Range: 0-7. Default: 0
+#prepend_tag_offset=0
+
+# Enable ARP (next hop mac extension) feature
+bcm886xx_next_hop_mac_extension_enable.BCM88650=0
+
+# Set VLAN translate mode.
+# 0: normal
+# 1: advanced mode. Enable vlan edit settings with enhanced user control
+#bcm886xx_vlan_translate_mode=0
+
+# Set MPLS termination database mode
+# Set MPLS databases location for each MPLS namespace (L1,L2,L3)
+#bcm886xx_mpls_termination_database_mode=0
+
+# Enable , Disable MPLS indexed.
+# MPLS termination with known label stack location.
+# Must be enabled in case device supports more than 2 MPLS label terminations (L1,L2,L3)
+#mpls_termination_label_index_enable=1
+
+# Enable FastReRoute labels in device.
+#fast_reroute_labels_enable=0
+
+# Enable MPLS Context specific. Upstream label assignment in device.
+#mpls_context_specific_label_enable=0
+
+# MPLS context.
+# Can be global, per port , per interface or per port,interface.
+#mpls_context=global
+
+# MPLS TP MC reserved mac address (01-00-5E-90-00-00).
+# If set device will support My-MAC termination of reserved MC Ethernet
+#mpls_tp_mymac_reserved_address=0
+
+# MPLS ELI enable disable
+mpls_entropy_label_indicator_enable=0
+
+
+#########################################
+##cfg for BCM88640_A0 - Petra
+#########################################
+
+force_clk_m_n_divisors_zero_nif0.BCM88640_A0=0
+force_clk_m_n_divisors_zero_fabric0.BCM88640_A0=1
+force_clk_m_n_divisors_zero_comb0.BCM88640_A0=0
+
+combo_ref_clock.BCM88640=312500
+
+nif_ref_clock.BCM88640_A0=312500
+
+# Use variable cell size
+system_cell_format.BCM88640_A0=VCS128
+
+# Core clock speed (MHz)
+core_clock_speed.BCM88640_A0=300
+
+# Map bcm local port to CPU/NIF interfaces
+ucode_port_0.BCM88640_A0=CPU.0
+ucode_port_73.BCM88640_A0=CPU.1
+ucode_port_74.BCM88640_A0=CPU.2
+ucode_port_75.BCM88640_A0=CPU.3
+ucode_port_76.BCM88640_A0=CPU.4
+ucode_port_77.BCM88640_A0=CPU.5
+ucode_port_78.BCM88640_A0=CPU.6
+
+# Interlaken ports basic configuration (temporary).
+# This configuration replaces the above XAUI/RXAUI ports config
+# The following PB design constraint is not enforced in SW, so must be taken
+# care of here, when mapping ports to interfaces:
+#   If using ilkn0, port 1 (if used) must be mapped to ilkn0
+#   If using ilkn1, port 2 (if used) must be mapped to ilkn1
+#   Note that in our default mapping, port 2 is mapped to RXAUI 6, thus won't
+#   work. If one wants to use front panel port 2 with ilkn1, he should be map
+#   RAXUI6 to a port != 2.
+#ilkn_num_lanes_0.BCM88640_A0=12
+#ucode_port_1.BCM88640_A0=ILKN0.0
+#ucode_port_2.BCM88640_A0=ILKN0.1
+#ucode_port_3.BCM88640_A0=ILKN0.2
+#ilkn_num_lanes_1.BCM88640_A0=12
+#ucode_port_4.BCM88640_A0=RXAUI6
+#ucode_port_5.BCM88640_A0=ILKN1.0
+#ucode_port_6.BCM88640_A0=ILKN1.1
+#ucode_port_7.BCM88640_A0=ILKN1.2
+
+# Default header type is derived from fap_device_mode: If fap_device_mode is
+# PP, default header type is ETH. Otherwise, defualt header type is TM.
+# Header type per port can be overriden.
+# All options: ETH/RAW/TM/PROG/CPU/STACKING/TDM/TDM_RAW/INJECTED
+
+# Set CPU to work with TM header (ITMH)
+#tm_port_header_type_0.BCM88640_A0=TM
+tm_port_header_type_in_0.BCM88640_A0=TM
+tm_port_header_type_out_0.BCM88640_A0=CPU
+tm_port_header_type_73.BCM88640_A0=TM
+tm_port_header_type_74.BCM88640_A0=TM
+tm_port_header_type_75.BCM88640_A0=TM
+tm_port_header_type_76.BCM88640_A0=TM
+tm_port_header_type_77.BCM88640_A0=TM
+tm_port_header_type_78.BCM88640_A0=TM
+# recycling port
+tm_port_header_type_40.BCM88640_A0=RAW
+ucode_port_40.BCM88640_A0=RCY.0
+
+# Enable ERP and OLP ports
+num_erp_tm_ports.BCM88640_A0=1
+num_olp_tm_ports.BCM88640_A0=1
+num_recycle_tm_ports.BCM88640_A0=1
+
+# Dram configuration
+# 600 Mhz
+ext_ram_pll_r.BCM88640_A0=4
+ext_ram_pll_f.BCM88640_A0=47
+ext_ram_pll_q.BCM88640_A0=1
+ext_ram_freq.BCM88640_A0=600
+
+# Dbuff size
+# Allowed values: 256/512/1024/2048.
+ext_ram_dbuff_size.BCM88640_A0=1024
+
+# Number of external DRAMs.
+# Allowed values for 88x4x: 0/2/3/4/6.
+# Allowed values for 88650: 0/2/3/4/6/8.
+# ext_ram_total_size below assumed this value is 6 for 88x4x and 8 for
+ext_ram_present.BCM88640_A0=6
+
+# Dram type: Select ONLY ONE of the following DRAM types, to configure all dram
+# related parameteres per type.
+# Dram Type for Pb:
+dram_type_DDR3_MICRON_MT41J64M16_15E.BCM88640_A0=1
+#dram_type_DDR2_MICRON_K4T51163QE_ZC_LF7.BCM88640_A0=1
+#dram_type_DDR3_SAMSUNG_K4B1G1646E_HCK0_1333.BCM88640_A0=1
+#dram_type_DDR3_SAMSUNG_K4B1G1646E_HCK0_1600.BCM88640_A0=1
+#dram_type_GDDR3_SAMSUNG_K4J52324QE.BCM88640_A0=1
+#dram_type_DDR3_MICRON_MT41J128M16HA_15E_2G.BCM88640_A0=1
+
+# QDR configuration
+# Parity. Allowed values: PARITY/ECC.
+ext_qdr_protection_type.BCM88640_A0=PARITY
+ext_qdr_size_mbit.BCM88640_A0=72
+#QDR type: QDR/QDR2P/QDR3/NONE.
+ext_qdr_type.BCM88640_A0=QDR
+
+# QDR can use the core clock, or using it's own pll. Current example is for 250MHz pll (if used).
+# QDR using own pll configuration
+#ext_qdr_use_core_clock_freq.BCM88640_A0=0
+#ext_qdr_pll_m.BCM88640_A0=4
+#ext_qdr_pll_n.BCM88640_A0=4
+#ext_qdr_pll_p.BCM88640_A0=0
+
+# QDR using core clock
+ext_qdr_use_core_clock_freq.BCM88640_A0=1
+
+#Configure MDIO. If parameter is not defined, MDIO is disabled.
+mdio_clock_freq_khz.BCM88640_A0=1000
+
+# Streaming interface configuration
+streaming_if_enable_timeoutcnt.BCM88640_A0=1
+streaming_if_timeout_prd.BCM88640_A0=70
+streaming_if_quiet_mode.BCM88640_A0=0
+streaming_if_discard_bad_parity.BCM88640_A0=0
+
+# maximum packet size for WRED tests. 0 - means ignore max packet size.
+discard_mtu_size.BCM88640_A0=0
+
+# multicast egress vlan membership range. By default: 0-4095.
+egress_multicast_direct_bitmap_min.BCM88640_A0=0
+egress_multicast_direct_bitmap_max.BCM88640_A0=4095
+
+# configure flow mapping base to 0
+flow_mapping_queue_base.BCM88640_A0=0
+
+dtm_flow_mapping_mode_region_25.BCM88640_A0=0
+dtm_flow_mapping_mode_region_26.BCM88640_A0=0
+dtm_flow_mapping_mode_region_27.BCM88640_A0=0
+dtm_flow_mapping_mode_region_28.BCM88640_A0=0
+dtm_flow_mapping_mode_region_29.BCM88640_A0=0
+dtm_flow_mapping_mode_region_30.BCM88640_A0=0
+dtm_flow_mapping_mode_region_31.BCM88640_A0=0
+dtm_flow_mapping_mode_region_32.BCM88640_A0=0
+dtm_flow_mapping_mode_region_33.BCM88640_A0=1
+dtm_flow_mapping_mode_region_34.BCM88640_A0=1
+dtm_flow_mapping_mode_region_35.BCM88640_A0=1
+dtm_flow_mapping_mode_region_36.BCM88640_A0=1
+dtm_flow_mapping_mode_region_37.BCM88640_A0=1
+dtm_flow_mapping_mode_region_38.BCM88640_A0=1
+dtm_flow_mapping_mode_region_39.BCM88640_A0=1
+dtm_flow_mapping_mode_region_40.BCM88640_A0=1
+dtm_flow_mapping_mode_region_41.BCM88640_A0=1
+dtm_flow_mapping_mode_region_42.BCM88640_A0=2
+dtm_flow_mapping_mode_region_43.BCM88640_A0=2
+dtm_flow_mapping_mode_region_44.BCM88640_A0=2
+dtm_flow_mapping_mode_region_45.BCM88640_A0=2
+dtm_flow_mapping_mode_region_46.BCM88640_A0=2
+dtm_flow_mapping_mode_region_47.BCM88640_A0=2
+dtm_flow_mapping_mode_region_48.BCM88640_A0=2
+dtm_flow_mapping_mode_region_49.BCM88640_A0=2
+dtm_flow_mapping_mode_region_50.BCM88640_A0=2
+dtm_flow_mapping_mode_region_51.BCM88640_A0=2
+dtm_flow_mapping_mode_region_52.BCM88640_A0=2
+dtm_flow_mapping_mode_region_53.BCM88640_A0=2
+dtm_flow_mapping_mode_region_54.BCM88640_A0=2
+dtm_flow_mapping_mode_region_55.BCM88640_A0=2
+
+# Power up state (DOWN/UP/UP_AND_RELOCK). Can be configured per lane.
+pb_serdes_lane_power_state.BCM88640_A0=UP_AND_RELOCK
+
+# SeDes media type: Pre-configuration for tx params, according to
+# media type.
+# Allowed values: SHORT_BACKPLANE/LONG_BACKPLANE/CHIP2CHIP
+pb_serdes_lane_tx_phys_media_type.BCM88640_A0=SHORT_BACKPLANE
+pb_serdes_lane_tx_phys_media_type_28.BCM88640_A0=CHIP2CHIP
+pb_serdes_lane_tx_phys_media_type_29.BCM88640_A0=CHIP2CHIP
+pb_serdes_lane_tx_phys_media_type_30.BCM88640_A0=CHIP2CHIP
+pb_serdes_lane_tx_phys_media_type_31.BCM88640_A0=CHIP2CHIP
+
+system_is_fe1600_in_system.BCM88640_A0=0
+
+# Counter engine configuration
+counter_engine_source_1.BCM88640_A0=0
+counter_engine_statistics_1.BCM88640_A0=4
+counter_engine_source_2.BCM88640_A0=1
+counter_engine_statistics_2.BCM88640_A0=4
+
+# Statistic Reporting
+stat_if_enable=0
+
+# Clock Phases: 0/90/180/270
+stat_if_phase=0
+
+# Rate in nm
+stat_if_sync_rate=0
+
+# TRUE/FALSE
+stat_if_parity_enable=FALSE
+
+# BILLING/FAP20V
+stat_if_report_mode=BILLING
+
+# Billing Mode
+# EGR_Q_NB/CUD/VSI_VLAN/BOTH_LIFS
+stat_if_report_billing_mode=VSI_VLAN
+
+# Fap20V Mode
+# QUEUE/PACKET
+stat_if_report_fap20v_mode=QUEUE
+
+# QUEUE_NUM/MC_ID (only valid in Fap20V PACKET mode)
+stat_if_report_fap20v_fabric_mc=QUEUE_NUM
+stat_if_report_fap20v_ing_mc=QUEUE_NUM
+
+# TRUE/FALSE (only valid in Fap20V PACKET mode)
+stat_if_report_fap20v_cnm_report=FALSE
+
+# TRUE/FALSE
+stat_if_report_fap20v_count_snoop=FALSE
+stat_if_report_original_pkt_size=FALSE
+stat_if_report_fap20v_single_copy_reported=FALSE
+
+schan_timeout_usec.BCM88640_A0=300000
+
+
+polled_irq_mode.BCM88640_A0=0
+polled_irq_delay.BCM88640_A0=1000
+
+# Set the FTMH Load-Balancing Key extension mode
+# Options for 88650: ENABLED
+# Options for 88640 compatible: DISABLED / 8B_LB_KEY_8B_STACKING_ROUTE_HISTORY / 16B_STACKING_ROUTE_HISTORY
+# Default: DISABLED
+system_ftmh_load_balancing_ext_mode.BCM88640=DISABLED
+
+#########################################
+##cfg for BCM88750
+#########################################
+
+fabric_device_mode.BCM88750=SINGLE_STAGE_FE2
+
+is_dual_mode.BCM88750=0
+system_is_vcs_128_in_system.BCM88750=0
+
+system_is_dual_mode_in_system.BCM88750=0
+system_is_single_mode_in_system.BCM88750=1
+
+system_is_fe600_in_system.BCM88750=0
+
+system_ref_core_clock_khz.BCM88750=600000
+
+fabric_merge_cells.BCM88750=0
+fabric_multicast_mode.BCM88750=DIRECT
+fabric_load_balancing_mode.BCM88750=NORMAL_LOAD_BALANCE
+fabric_tdm_fragment.BCM88750=0x180
+##Allows single pipe device to send TDM traffic over the fabric primary pipe - available for Fe1600_B0 only
+#change  vcs128_unicast_priority to be lower than 2 - when enabling
+fabric_tdm_over_primary_pipe.BCM88750=0
+fabric_optimize_partial_links.BCM88750=0
+vcs128_unicast_priority.BCM88750=2
+
+polled_irq_mode.BCM88750=0
+polled_irq_delay.BCM88750=1000
+
+#Selects if to run MBIST (Memory Built In Self Test) of internal memory (tables) during startup.
+#Supported values: 0=don't run, 1=run, 2=run with extra logs
+#bist_enable.BCM88650=1
+bist_enable.BCM88750=1
+#High voltage driver strap. If 0, connected to 1.4V supply; if 1, connected to 1V mode.
+#for specific quad use srd_tx_drv_hv_disable_quad_X where X is (FSRD num * 4 + internal quad)
+srd_tx_drv_hv_disable.BCM88750=0
+load_firmware.BCM88750=2
+
+#0-LFEC 1-8b\10b 2-FEC 3-BEC
+backplane_serdes_encoding.BCM88750=2
+
+#enable\disable CL72
+port_init_cl72.BCM88750=0
+#Avaliable speeds for BCM88750: 5750, 6250, 10312, 11500, 12500
+port_init_speed.BCM88750=10312
+#LC PLL in\out 0=125MHz 1=156.25MHz
+serdes_fabric_clk_freq_in.BCM88750=1
+serdes_fabric_clk_freq_out.BCM88750=1
+serdes_mixed_rate_enable.BCM88750_B0=0
+
+# VSC128 or VSC256
+fabric_cell_format.BCM88750=VSC256
+
+# Core clock speed (MHz)
+core_clock_speed_khz.BCM88750=533333
+
+## CMIC interrupts:
+# Enable: Use interrupts completion instead of polling completion for the following operations.
+#         Options: 1 - Enable, 0 - Disable. Default: 0.
+# Timeout: delay in Microsecond between the polling,
+# SCHAN:
+schan_intr_enable.BCM88750=0
+schan_timeout_usec.BCM88750=300000
+# TDMA
+tdma_intr_enable.BCM88750=0
+tdma_timeout_usec.BCM88750=80000000
+# TSLAM
+tslam_intr_enable.BCM88750=0
+tslam_timeout_usec.BCM88750=80000000
+# MIIM
+miim_intr_enable.BCM88750=0
+miim_timeout_usec.BCM88750=300000
+
+
+##initialization for warmboot
+stable_location.BCM88750=3
+stable_size.BCM88750=200000
+scache_filename.BCM88750=fe1600_warmboot.mem
+
+##############################
+# Config variable below are only accessed from dune.soc, and are used to
+# configure BSP / example application / group of formal config variables.
+##############################
+
+# Support (and configure on init) packet processing features.
+# If not defined - only traffic management capabilities are enabled.
+packet_processing=1
+
+## PCP (Petra Co-Processor) features
+#pcp_elk.BCM88640_A0=1
+#pcp_oam.BCM88640_A0=1
+#pcp_dma.BCM88640_A0=1
+
+## Set/Override TDM related config variables
+#tdm.BCM88640_A0=1
+
+# If set, always configures synthesizers, even if the configured rate is
+# equal to
+# their nominal rate. Can be disabled to speedup bringup time
+# (keep in mind that if disabled, changing a synt to a non-nominal freq and
+# than back to nominal will not work
+#synt_over.BCM88640_A0=1
+
+# Local variables for board synthesizers freq. Fabric, combo and nif also configure
+# the *_ref_clock soc properties for these frequencies. core, ddr and phy only
+# configures the synthesizer
+synt_core.BCM88640_A0=100000000
+synt_ddr.BCM88640_A0=125000000
+synt_phy.BCM88640_A0=156250000
+
+## Scache initialization for warmboot persistent storage.
+## Valid values: 2: Store in dram. 3: Store in a file.
+stable_location=3
+stable_filename=./warmboot_data
+stable_flags=0
+stable_size=1000000000
+
+# Bridge default logical interfaces allocation IDS
+logical_port_l2_bridge.BCM88640=1
+logical_port_drop.BCM88640=-1
+
+#logical_port_mim_in.BCM88640=2
+#logical_port_mim_out.BCM88640=3
+
+## IPV6 tunnel
+bcm886xx_ipv6_tunnel_enable=1
+
+## Inlif Profile Management Mode - QoS L3 L2 marking mode
+#
+# BCM88660 ONLY
+#
+# QoS L3 L2 marking allows changing the DSCP and/or EXP values
+# of IP and/or MPLS packets according to the incoming port
+# (or inlif), and the Traffic Class/Drop Precedence.
+#
+# The inlif profile is used to control the DSCP/EXP marking.
+# This SOC property controls which mode is used for the inlif profile:
+# 1: Basic mode (1 bit of the inlif profile is reserved and is used for the DSCP/EXP marking).
+# 0: Advanced mode (the user controls which inlif profile values perform DSCP/EXP marking directly).
+#bcm886xx_qos_l3_l2_marking=1
+
+## Unicast RPF mode per RIF
+#
+# This SOC property allows the user to set the unicast RPF mode - loose, strict or disabled - per RIF.
+# If disabled, the unicast RPF mode of a RIF is set globally.
+# Options: 0 / 1
+
+# bcm886xx_l3_ingress_urpf_enable=1
+
+## BOS handling mode
+# BCM8866X ONLY
+#
+# There are two ways to handle BOS, controlled by bcm886xx_mpls_termination_mode:
+# 0 - Use BOS as key in lookup.
+# 1 - Don't use it (except for reserved labels).
+#
+#bcm886xx_mpls_termination_key_mode=0
+
+# Color resolution mode allows the user to have more detailed metering color information.
+# BCM88660 ONLY
+#
+# Options: 0/1
+# 0: A red result from both Ethernet policer and policer implies DP=3.
+# 1: A red result from the policer implies that DP=2, while a red result from rate (Ethernet policer) implies DP=3.
+#policer_color_resolution_mode=1
+
+## Inlif Profile Management Mode - Disable Same Interface Filter
+# BCM8866X ONLY
+#
+# Controls which mode is used for the inlif profile management.
+# 1: Basic mode (1 bit of the inlif profile is reserved and is used for the same-interface filter).
+# 0: Advanced mode (the user controls which inlif profile values have the same-interface filter disabled for them).
+#bcm886xx_logical_interface_bridge_filter_enable=1
+
+## Default Block Forwarding Strength
+#
+# Configure the default forwarding strength of blocks.
+#
+# SOC Properties:
+#block_trap_strength_vtt - VTT block forwarding strength
+#block_trap_strength_flp - FLP block forwarding strength
+#block_trap_strength_hash - SLB block forwarding strength (BCM8866X ONLY)
+#block_trap_strength_pmf_0 - PMF 1st lookup forwarding strength
+#block_trap_strength_pmf_1 - PMF 2nd lookup forwarding strength
+#
+# Options: 0-7
+
+## Stateful Load Balancing
+# BCM8866X ONLY
+#
+# Stateful Load Balancing (SLB) allows the load balancing of ECMP and LAG
+# groups to become stateful.
+# In standard load balancing, removing a member from the ECMP/LAG
+# group may affect the selected member, since the formula
+# depends on group size.
+# In stateful load balancing the member is selected once and saved.
+# Later, the member is always retrieved, and does not depend on
+# the size of the LAG/ECMP group.
+#
+# resilient_hash_enable - Enable/disable SLB. Values:
+# 1 - Enable SLB.
+# 0 - Disable SLB.
+#resilient_hash_enable=1
+
+
+#Make Arad SOC properties work for Arad+, by mapping the BCM88660 suffix to BCM88650
+soc_family.BCM88660=BCM88650
+#Make Arad SOC properties work for Ardon, by mapping the BCM88202 suffix to BCM88650
+soc_family.BCM88202=BCM88650
+
+# Use different mymac addresses for ipv4 and ipv6 when using vrrp for mymac termination.
+#l3_vrrp_ipv6_distinct=1
+
+# Enable multiple mymac termination mode. In order to enable it, also set 
+# l3_vrrp_ipv6_distinct=0 and l3_vrrp_max_vid=0 since vrrp and
+# multiple mymac mode can't co exist.
+#l3_multiple_mymac_termination_enable=1
+
+# Distinguish between ipv4 and all other l3 protocols when multiple mymac terminating 
+#l3_multiple_mymac_termination_mode=1
+
+# Usually the final DP given by the meter (or the In-DP) is unchanged, and can be from 0-3.
+# When this SOC property is set to 1, when the final INGRESS DP is 2, it is mapped to 1 instead, 
+# and thus only the values 0-1 and 3 can be output.
+# This has no effect when policer_color_resolution_mode=1.
+#custom_feature_always_map_result_dp_2_to_1=1
+
+############################
+### Warmboot & SW State ####
+############################
+
+
+ha_hw_journal_size=15728640
+ha_sw_journal_size=15728640
+ha_crash_recovery=1
+
+
+# stable_size - a strict bound on the application's external storage size
+stable_size.BCM88650=281000000
+stable_size=420000000
+
+# determine the memory size pre-allocated for the SDK's SW State
+sw_state_max_size.BCM88650=160000000
+sw_state_max_size=350000000
+
+# stable location
+## part of scache initialization for warmboot persistent storage.
+## values: 1-2:Not Valid for dnx 3: Store in a file  4: Use Shared Mem.
+# 4 is the preffered option, using 3 for Arad and FE in order to regress both modes.
+ stable_location.BCM88650=3
+ stable_location.BCM88660=3
+
+#
+# Enable L3 Source Binds for DPoE SAV
+#
+l3_source_bind_mode=IP
+l3_source_bind_subnet_mode=IP
+ipv4_num_vrfs = 4096
+
+#
+# Enable ARP checking for L3 Source Binds
+#
+# This feature is not currently used.
+#
+# Valid values for custom_feature_l3_source_bind_arp_relay:
+#    0 - disabled
+#    1 - downstream ARP checking
+#    2 - upstream ARP checking
+#    3 - both downstream and upstream ARP checking
+#
+#custom_feature_l3_source_bind_arp_relay=2
+
diff --git a/bal_release/3rdparty/bcm-sdk/rc/arad/rc.soc b/bal_release/3rdparty/bcm-sdk/rc/arad/rc.soc
new file mode 100755
index 0000000..12003a3
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/rc/arad/rc.soc
@@ -0,0 +1,1811 @@
+# $Id: rc.soc,v 1.192 Broadcom SDK $
+# $Copyright: Copyright 2016 Broadcom Corporation.
+# This program is the proprietary software of Broadcom Corporation
+# and/or its licensors, and may only be used, duplicated, modified
+# or distributed pursuant to the terms and conditions of a separate,
+# written license agreement executed between you and Broadcom
+# (an "Authorized License").  Except as set forth in an Authorized
+# License, Broadcom grants no license (express or implied), right
+# to use, or waiver of any kind with respect to the Software, and
+# Broadcom expressly reserves all rights in and to the Software
+# and all intellectual property rights therein.  IF YOU HAVE
+# NO AUTHORIZED LICENSE, THEN YOU HAVE NO RIGHT TO USE THIS SOFTWARE
+# IN ANY WAY, AND SHOULD IMMEDIATELY NOTIFY BROADCOM AND DISCONTINUE
+# ALL USE OF THE SOFTWARE.  
+#  
+# Except as expressly set forth in the Authorized License,
+#  
+# 1.     This program, including its structure, sequence and organization,
+# constitutes the valuable trade secrets of Broadcom, and you shall use
+# all reasonable efforts to protect the confidentiality thereof,
+# and to use this information only in connection with your use of
+# Broadcom integrated circuit products.
+#  
+# 2.     TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS
+# PROVIDED "AS IS" AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES,
+# REPRESENTATIONS OR WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY,
+# OR OTHERWISE, WITH RESPECT TO THE SOFTWARE.  BROADCOM SPECIFICALLY
+# DISCLAIMS ANY AND ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY,
+# NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES,
+# ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR
+# CORRESPONDENCE TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING
+# OUT OF USE OR PERFORMANCE OF THE SOFTWARE.
+# 
+# 3.     TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL
+# BROADCOM OR ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL,
+# INCIDENTAL, SPECIAL, INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER
+# ARISING OUT OF OR IN ANY WAY RELATING TO YOUR USE OF OR INABILITY
+# TO USE THE SOFTWARE EVEN IF BROADCOM HAS BEEN ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGES; OR (ii) ANY AMOUNT IN EXCESS OF
+# THE AMOUNT ACTUALLY PAID FOR THE SOFTWARE ITSELF OR USD 1.00,
+# WHICHEVER IS GREATER. THESE LIMITATIONS SHALL APPLY NOTWITHSTANDING
+# ANY FAILURE OF ESSENTIAL PURPOSE OF ANY LIMITED REMEDY.$
+#
+# Initialization RC (run commands) file
+#
+#       These are default commands that are read and executed by default
+#       when BCM boots up.  Typically this file is called rc.soc and resides
+#       in the flash filesystem, NVRAM, or disk.
+#
+# Board Configuration Setting
+#
+#       This file uses configuration properties to know on which board
+#       it is running.  Currently one of following settings must be made:
+#
+#       BCM95670K8          config add herc8=1
+#       BCM95690K24         config add draco_b2b=1
+#       BCM95690K24S        config add draco_stk=1
+#       BCM95690R24         config add galahad=1
+#       BCM95690R24S        config add merlin=1
+#       BCM95690R48S        config add lancelot=1
+#       BCM95691K12         config add draco_k12=1
+#       White Knight        config add white_knight=1 (not shipping)
+#       Black Knight        config add black_knight=1 (not shipping)
+#       BCM95673K2S         config add twolynx=1
+#       BCM95673R8          config add herculynx=1
+#       BCM95673R24S        config add lynxalittle=1
+#       BCM95673R48S        config add lynxalot=1
+#       BCM95695P24SX_10    config add guenevere=1
+#       BCM95650K24         config add magnum=1 (automatic for 5650L)
+#       BCM95675            config add herc8_15=1
+#       BCM95650R24         config add tuc24_ref=1
+#       BCM95695P48LM       config add lm48p=1
+#       BCM95695P48LM-10    config add lm48p_B=1
+#       BCM956504P48LM-10   config add lm48p_C=1
+#       BCM956504P48LM-20   config add lm48p_C=1
+#       BCM956504P48LM-50   config add lm48p_D=1
+#       BCM956504P48POEREF  config add fbpoe=1
+#       BCM956504P24REF P0  config add fb24=1
+#       BCM956504P24    P0  config add fb24=1
+#       BCM956102P48        config add felix48=1
+#       BCM953300P24REF     config add mirage24=1
+#       BCM956800K20C       config add bradley_1g=1
+#       BCM956700K16        config add humv=1
+#       BCM956800K20        config add bradley=1
+#       BCM956580K16        config add goldwing=1
+#       BCM956314P24REF     config add bcm56314p24ref=1
+#       BCM956024P48REF     config add BCM956024P48REF=1
+#       BCM956224P48REF     config add BCM956224P48REF=1
+#       BCM956224R50T       config add BCM956224R50T=1
+#       BCM956024R50T       config add BCM956024R50T=1
+#       BCM56820K24XG       config add BCM56820K24XG=1
+#       BCM953314R24GS      config add BCM953314R24GS=1
+#       BCM953314K24        config add BCM953314K24=1
+#       BCM956820R24XG      config add BCM956820R24XG=1
+#       BCM956160R          config add bcm956160r=1
+
+if $?BCM56146_A0 \
+    'local BCM56146 1'
+
+if $?BCM56147_A0 \
+    'local BCM56147 1'
+
+
+if $?1 "echo rc: arguments not supported; exit"
+if !$?unit "echo rc: no current unit; exit"
+
+echo "rc: unit $unit device $devname"
+local quiet no
+local echo echo
+local rcdone \$rc$unit
+if !"expr $rcdone + 0" "local echo noecho; local quiet yes"
+
+# Set convenience local variables
+
+# simulation related
+#if $?plisim \
+#       "local no_bcm 1"
+if $?quickturn || $?plisim \
+	"local simulator 1"
+
+# board related
+if $?galahad \
+	"local draco_b2b 1"
+if $?black_knight || $?white_knight || $?merlin \
+	"local draco_herc4 1"
+
+# chip related
+if $?PETRAB_A0 \
+    'rcload dune.soc ; exit'
+
+#if $?QUX_A0 \
+#    'echo blablabla;der 0x40 4 ; exit'
+
+if $?FLAIR_A0 \
+    'echo blablabla;der 0x40 4 ; exit'
+
+if $?BCM88750_A0 || $?BCM88750_B0 || $?BCM88753_A0 || $?BCM88753_B0 || $?BCM88752_A0 || $?BCM88752_B0 ||  $?BCM88755_B0 || $?BCM88754_A0 || $?BCM88770_A1 || $?BCM88773_A1 || $?BCM88774_A1 || $?BCM88775_A1 || $?BCM88776_A1 || $?BCM88950_A0 || $?BCM88950_A1 || $?BCM88953_A1 || $?BCM88954_A1 || $?BCM88955_A1 || $?BCM88956_A1 || $?BCM88952_A0 || $?BCM88952_A1 || $?BCM88772_A1 \
+    'rcload dfe.soc ; exit'
+
+if $?ARAD_A0 || $?ARAD_B0 || $?ARAD_B1 || $?ARADPLUS_A0 || $?BCM88650_A0 || $?BCM88650_B0 || $?BCM88650_B1 || $?BCM88652_A0 || $?BCM88652_B0 || $?BCM88350_B1 || $?BCM88351_B1 || \
+   $?BCM88450_B1 || $?BCM88451_B1 || $?BCM88550_B1 || $?BCM88551_B1 || $?BCM88552_B1 || $?BCM88651_B1 || $?BCM88654_B1 || $?BCM88660_A0 || $?BCM88360_A0 || $?BCM88361_A0 || $?BCM88363_A0 ||\
+   $?BCM88460_A0 || $?BCM88461_A0 || $?BCM88560_A0 || $?BCM88561_A0 || $?BCM88562_A0 || $?BCM88661_A0 || $?BCM88664_A0  \
+    'rcload arad.soc ;  rcload rpc.soc ; exit'
+
+if $?BCM88850_P3 \
+    'exit'
+
+if $?QAX_A0 || $?BCM88470P_A0 || $?BCM88470_A0 || $?BCM88470M_A0 || $?BCM88471P_A0 || $?BCM88471_A0 || $?BCM88472_A0 || \
+ $?BCM88473_A0 || $?BCM88471D_A0 || $?BCM88476P_A0 || $?BCM88476_A0 || $?BCM88476D_A0 || $?BCM88476T_A0 || $?BCM88477_A0  \
+    'setenv QAX 1'
+    
+if $?QUX_A0 || $?BCM88270_A0 \
+    'setenv QUX 1'
+
+if $?JERICHO_A0 ||  $?BCM88670_A0 || $?BCM88671_A0 || $?BCM88671M_A0 || $?BCM88672_A0 || $?BCM88673_A0 || $?BCM88674_A0 || $?BCM88675_A0 || $?BCM88675M_A0 || $?BCM88676_A0 || $?BCM88676M_A0 || $?BCM88678_A0 || $?BCM88679_A0 || \
+   $?JERICHO_A1 ||  $?BCM88670_A1 || $?BCM88671_A1 || $?BCM88671M_A1 || $?BCM88672_A1 || $?BCM88673_A1 || $?BCM88674_A1 || $?BCM88675_A1 || $?BCM88675M_A1 || $?BCM88676_A1 || $?BCM88676M_A1 || $?BCM88678_A1 || $?BCM88679_A1 || \
+   $?QMX_A0     ||  $?BCM88370_A0 || $?BCM88371_A0 || $?BCM88371M_A0 || $?BCM88375_A0 || $?BCM88376_A0 || $?BCM88376M_A0 || $?BCM88377_A0 || $?BCM88378_A0 || $?BCM88379_A0 || \
+   $?QMX_A1     ||  $?BCM88370_A1 || $?BCM88371_A1 || $?BCM88371M_A1 || $?BCM88375_A1 || $?BCM88376_A1 || $?BCM88376M_A1 || $?BCM88377_A1 || $?BCM88378_A1 || $?BCM88379_A1 || \
+   $?JERICHO_B0 ||  $?BCM88670_B0 || $?BCM88671_B0 || $?BCM88671M_B0 || $?BCM88672_B0 || $?BCM88673_B0 || $?BCM88674_B0 || $?BCM88675_B0 || $?BCM88675M_B0 || $?BCM88676_B0 || $?BCM88676M_B0 || $?BCM88678_B0 || $?BCM88679_B0 || $?BCM88680_A0 || \
+   $?QMX_B0     ||  $?BCM88370_B0 || $?BCM88371_B0 || $?BCM88371M_B0 || $?BCM88375_B0 || $?BCM88376_B0 || $?BCM88376M_B0 || $?BCM88377_B0 || $?BCM88378_B0 || $?BCM88379_B0 || $?BCM88379_A1 || \
+   $?JERPLUS    ||  $?BCM88680_A0 ||  $?BCM88682_A0 || $?BCM88683_A0 ||  $?BCM88381_A0 || $?BCM88382_A0 || $?BCM88385_A0 || $?BCM88686_A0 \
+    'rcload jer.soc ; exit'
+
+if $?QAX || $?QUX\
+    'rcload qax.soc ; exit'
+
+
+if $?BCM88202_A0 || $?ARDON_A0 || $?BCM88202_A1 || $?ARDON_A1 || $?BCM88202_A2 || $?ARDON_A2\
+    'rcload atmf.soc ; exit'
+
+if $?ACP \
+    'exit'
+
+if $?BCM88690_A0\
+    'exit'
+        
+if !"expr $pcidev + 0 == 0x5650" \
+	"local magnum 1"
+if $?drac || $?drac15 \
+	"local drac_any 1"
+if $?lynx || $?lynx15 \
+	"local lynx_any 1"
+if $?tucana || $?magnum \
+	"local tucana_any 1"
+if $?herc || $?herc15 \
+	"local herc_any 1"
+if $?firebolt || $?firebolt2 || $?helix || \
+   $?felix || $?helix15 || $?felix15 || $?raptor || $?raven || $?hawkeye\
+	"local firebolt_any 1"
+if !"expr $pcidev + 0 == 0xb501" \
+	"local firebolt_10x4 1"
+if $?easyrider \
+	"local easyrider_any 1"
+if !"expr $pcidev + 0 == 0xb602" \
+	"local easyrider_1x1 1"
+if $?bradley || $?humv || $?goldwing \
+	"local bradley_any 1"
+if $?drac_any || $?lynx_any || $?tucana_any \
+	"local xgs12_switch 1"
+if $?firebolt_any || $?easyrider_any || $?bradley_any \
+	"local xgs3_switch 1"
+if $?xgs12_switch || $?xgs3_switch \
+	"local xgs_switch 1"
+if $?herc_any \
+	"local xgs_fabric 1"
+if $?xgs_fabric || $?xgs_switch \
+	"local xgs 1"
+if !$?xgs \
+	"local strata 1"
+if $?strata && !$?gsl \
+	"local PBMP_ALL 0x0bffffff"
+if $?strata && $?gsl \
+	"local PBMP_ALL 0x080000ff"
+if $?BCM56214_A0 || $?BCM56014_A0 || $?BCM56215_A0 || \
+   $?BCM56214_A1 || $?BCM56014_A1 || $?BCM56215_A1 && \
+   !$?BCM956024P48REF \
+	"local rap24_ref 1"
+
+if $?BCM5655_A0 || $?BCM5655_B0 \
+        "local tucana_nohg 1"
+
+if $?BCM956024P48REF || $?BCM956224P48REF || $?BCM956024R50T || \
+   $?BCM956224R50T \
+        "local raven_eb_48p 1"
+
+if $?BCM953314R24GS \
+        "local hawkeye_p24 1"
+
+if $?BCM953314K24 \
+        "local hawkeye_k24 1"
+
+if $?firebolt_any && $?lm48p || $?lm48p_D \
+        "config add lmfb48=1"
+
+# Set software's wait for S-Channel response to 3 seconds for QuickTurn
+# (Recommend at least 10 seconds if the ARL is 100% busy with inserts.)
+if $?quickturn	"stimeout 3000000"
+if $?plisim	"stimeout 60000000"
+
+# Direct phy led programming: 5464 activity led becomes link/activity
+if $?drac_any && $?lancelot || $?lynxalot || $?guenevere \
+	"config add phy_led_ctrl=0x18"
+
+# Shutdown threads if system is already running
+if $?triumph3 \
+	"ibodSync off"
+counter off
+linkscan off
+if $?feature_arl_hashed && !$?simulator \
+        "l2mode off"
+if $?feature_ces && $?BCM56440_A0 \
+        "ces off"
+
+# Test on-chip memory before initializing
+#if !$?simulator "init soc; bist l3 arl cbp"
+init soc
+
+# Initialize miscellaneous chip registers
+init misc
+
+# Initialize external TCAM if necessary
+# NOTE : tcam is initialized during "init misc" unless 
+#        tcam_reset_toggle = 1 is configured
+if "expr $rcdone + 0" && !"expr $tcam_reset_toggle + 0" \
+        "dispatch attach 0 esw 0"
+if !"expr $tcam_reset_toggle + 0" "muxsel 0; muxsel 0x80"
+if !"expr $tcam_reset_toggle + 0" "init tcam; $echo rc: TCAM initialized"
+
+# Initialize the StrataSwitch MMU registers
+init mmu
+if $?katana2 \
+   kt2config.soc
+
+
+# Uncomment to turn off Single-Bit Error reporting on 5670
+#if $?herc "m mmu_intcntl pp_sbe_en=0"
+
+# Initialize Cell Free Address Pool
+# NOTE: this should NOT be done unless chip is known to have bad CFAP
+# memory entries that need to be mapped out.
+if $?cfap_tests "$echo rc: Initializing CFAP; cfapinit"
+
+$echo rc: MMU initialized
+
+#
+# Load uKernel
+#
+
+# Pick default FW names if not set already by config
+if !$?fw_core_0 \
+    'local fw_core_0 ${fw_prefix}_0_bfd_bhh.srec; \
+     if $?greyhound || $?hurricane2 || $?hurricane3 "local fw_core_0 ${fw_prefix}_0_ptpfull.srec"; \
+     if $?caladan3 "local fw_core_0 ${fw_prefix}_0.srec"; \
+     if $?helix4 && !$?feature_bhh "local fw_core_0 ${fw_prefix}_0_bfd.srec"; \
+     if $?helix4 && $?feature_bhh "local fw_core_0 ${fw_prefix}_0_bfd_bhh.srec"; \
+     if $?tomahawk && !$?feature_bhh "local fw_core_0 ${fw_prefix}_0_bfd.srec"; \
+     if $?trident2plus && !$?feature_bhh "local fw_core_0 ${fw_prefix}_0_bfd.srec"; \
+    '
+
+if !$?fw_core_1 \
+   'local fw_core_1 ${fw_prefix}_1_ptpfull.srec; \
+    if $?caladan3 "local fw_core_1 ${fw_prefix}_1_bs.srec"; \
+   '
+
+if !$?fw_core_2 \
+   "local fw_core_2 ${fw_prefix}_2_eth_lmdm.srec"
+
+# Load the firmwares
+if $?feature_cmicm && !$?rcpu_only && !$ihost_mode && !$?feature_iproc \
+    "mcsload 0 ${fw_core_0} InitMCS=true; \
+     mcsload 1 ${fw_core_1};"
+
+if $?hurricane2 \
+   "mcsload 0 ${fw_core_0} InitMCS=true;"
+
+if $?feature_iproc && !$?hurricane2 && !$?hurricane3 && !$?rcpu_only && !$?feature_uc_mhost && !$ihost_mode\
+    "mcsload 0 ${fw_core_0} InitMCS=true TwoStage=true TwoStageAddr=0x60000000;\
+     mcsload 1 ${fw_core_1} TwoStage=true TwoStageAddr=0x6002c000;"
+
+if $?feature_iproc && !$?rcpu_only && $?feature_uc_mhost && $?num_ucs\
+    'if !"expr $num_ucs > 0" "mcsload 0 ${fw_core_0} InitMCS=true"; \
+     if !"expr $num_ucs > 1" "mcsload 1 ${fw_core_1}"; \
+     if !"expr $num_ucs > 2" "mcsload 2 ${fw_core_2}";'
+
+#
+# Init CLI and BCM API
+#
+# This must be done after the raw register writes to avoid having state
+# clobbered.  NOTE: Tables are cleared by "init bcm" below.  If
+# table modifications are required, put them after "init bcm".  Some
+# registers might also be affected.
+#
+
+if !$?no_bcm \
+	"init bcm; \
+	 $echo rc: BCM driver initialized"
+
+if $?no_bcm \
+	"$echo rc: *** NOT initializing BCM driver ***"
+
+if $?no_bcm && $?strata \
+    'write vtable 0 1 VLAN_TAG=0,PORT_BITMAP=0,UT_PORT_BITMAP=0; \
+     insert vtable VLAN_TAG=1,PORT_BITMAP=$PBMP_ALL,UT_PORT_BITMAP=$PBMP_ALL; \
+     local pv \
+         VLAN_TAG=1,SP_ST=3,PORT_BITMAP=$PBMP_ALL,UT_PORT_BITMAP=$PBMP_ALL; \
+	 write ptable 0 32 PTYPE=0; \
+	 if !$?gsl "write ptable 0 24 $pv,PTYPE=1"; \
+	 if !$?gsl "write ptable 24 2 $pv,PTYPE=2"; \
+	 if $?gsl  "write ptable 0 8 $pv,PTYPE=2"; \
+	 write ptable 27 1 $pv,PTYPE=3; \
+     local pv'
+
+# Turn on mirroring of hardware ARL operations into software ARL table.
+if $?feature_arl_sorted \
+	"arlmode intr_dma; \
+	 $echo rc: ARL DMA shadowing enabled"
+
+if $?feature_arl_hashed && !$?simulator && !$?rcpu_only \
+	"l2mode interval=3000000; \
+	 $echo rc: L2 Table shadowing enabled"
+
+# If running BCM library, start linkscan task and set port modes
+
+if !$?no_bcm && !$?rcpu_only \
+	"linkscan 250000; \
+	 port fe,ge linkscan=on autoneg=on \
+		speed=0 fullduplex=true txpause=true rxpause=true; \
+	 port st linkscan=on txpause=false rxpause=false; \
+         port xe,ce linkscan=on autoneg=off \
+                speed=0 fullduplex=true txpause=true rxpause=true; \
+         port hg linkscan=on fullduplex=true txpause=false rxpause=false; \
+	 $echo rc: Port modes initialized"
+
+if !$?no_bcm && $?rcpu_only \
+	"linkscan 250000; \
+	 port e linkscan=on; \
+	 port st linkscan=on; \
+     port xe linkscan=on; \
+	 $echo rc: Port modes initialized"
+
+if !$?no_bcm && $?shadow \
+     "port il linkscan=on; \
+	  $echo rc: Interlaken Port mode initialized"
+
+# Selectively re-enable Auto Negotiation based on config port_force_an_list.
+#if $?port_force_an_list \
+#    "port $port_force_an_list autoneg=on"
+
+# No spanning tree is running, so put ports all in the forwarding state
+# stp support not available for shadow device.
+
+if !$?no_bcm && !$?shadow \
+	"stg stp 1 all forward"
+
+# Start counter task unless already started by "init bcm" above.
+if $?plisim "local dma false"
+if !$?plisim "local dma true"
+if $?device_eb_vli "local dma false"
+if $?no_bcm && !$?rcpu_only\
+	"counter Interval=1000 Pbm=all Dma=$dma; \
+	 $echo rc: Counter collection enabled"
+if $?rcpu_only \
+	"counter Interval=2000000 Pbm=all Dma=false; \
+	 $echo rc: Counter collection enabled"
+
+# Resynchronize the saved values kept by the 'show counter' command.
+if !$?simulator \
+    "counter sync"
+
+# By default, dump data of packets that go to CPU.
+if !$?testinit \
+	"pw report +raw"
+
+# Default LED processor program for various SDKs and reference designs.
+# Source code can be found in $SDK/led/examples.
+
+if !$?p48 "local ledcode '\
+ E0 28 60 7F 67 2F 67 6B 06 7F 80 D2 1A 74 01 12 \
+ 7E 85 05 D2 0F 71 19 52 00 12 7D 85 05 D2 1F 71 \
+ 23 52 00 12 7C 85 05 D2 05 71 2D 52 00 3A 68 32 \
+ 00 97 75 3B 12 A0 FE 7F 02 0A 50 32 01 97 75 47 \
+ 12 BA FE 7F 02 0A 50 12 BA FE 7F 95 75 59 85 12 \
+ A0 FE 7F 95 75 A8 85 77 9A 12 A0 FE 7F 95 75 63 \
+ 85 77 A1 16 7C DA 02 71 A1 77 A8 32 05 97 71 76 \
+ 06 7D D2 01 71 9A 06 7F 67 93 75 9A 32 02 97 71 \
+ 9A 32 03 97 71 A8 32 04 97 75 A1 06 7E D2 07 71 \
+ A1 77 A8 12 80 F8 15 1A 00 57 32 0E 87 32 0E 87 \
+ 57 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 57'"		# sdk5605.hex
+
+if $?p48 "local ledcode '\
+ E0 28 60 7F 67 43 67 3C 67 35 67 2F 06 7F 80 D2 \
+ 18 74 01 28 60 7F 67 9B 67 89 67 BF 67 83 67 3C \
+ 67 73 67 68 67 5D 06 7F 80 D2 1A 74 13 3A 70 67 \
+ AD 71 C3 77 BF 32 03 97 71 C3 77 BF 32 05 97 71 \
+ C3 77 BF 12 BA FE 7F 32 01 97 75 4F 02 06 50 32 \
+ 00 97 75 57 02 06 50 95 75 C3 85 77 BF 67 AD 75 \
+ BF 32 04 97 71 C3 77 BF 67 AD 75 BF 32 03 97 71 \
+ C3 77 BF 67 AD 75 BF 32 03 97 71 BF 32 04 97 71 \
+ BF 77 C3 67 B6 71 C3 77 BF 12 A0 FE 7F 32 00 97 \
+ 75 95 02 06 50 95 75 C3 85 77 BF 12 BA FE 7F 32 \
+ 01 97 75 A7 02 06 50 95 75 C3 85 77 BF 06 7F 12 \
+ 80 F8 15 1A 00 57 06 7F 12 80 F8 15 1A 07 57 32 \
+ 0F 87 57 32 0E 87 57'"					# p48.hex
+
+if $?herc && !$?black_knight "local ledcode '\
+ 02 01 67 36 29 32 08 D7 87 32 07 D7 87 32 01 D7 \
+ 87 32 00 D7 87 80 D2 09 74 02 86 7F 06 7F C2 07 \
+ 74 24 86 7E 16 7E CA 07 E0 17 0D 12 08 98 27 D7 \
+ 87 91 74 2D 3A 28 10 DA 07 75 3E FA 02 57 EA 06 \
+ 57'"							# sdk5670.hex
+
+if $?herc && $?black_knight "local ledcode '\
+ 2A 03 32 08 D7 87 32 07 D7 87 32 01 D7 87 32 00 \
+ D7 87 2A 06 32 08 D7 87 32 07 D7 87 32 01 D7 87 \
+ 32 00 D7 87 3A 08'"					# knigget.hex
+
+if $?drac_any "local ledcode '\
+ E0 28 60 C3 67 4E 67 8A 06 C3 80 D2 0C 74 01 28 \
+ 60 C3 32 00 D7 87 32 01 D7 87 32 07 D7 87 32 08 \
+ D7 87 32 0F 87 32 0F 87 32 0F 87 32 0F 87 12 C2 \
+ 85 05 D2 0F 71 38 52 00 12 C1 85 05 D2 1F 71 42 \
+ 52 00 12 C0 85 05 D2 05 71 4C 52 00 3A 38 32 00 \
+ 97 75 5A 12 A0 FE C3 02 0A 50 32 01 97 75 66 12 \
+ AD FE C3 02 0A 50 12 AD FE C3 95 75 78 85 12 A0 \
+ FE C3 95 75 C0 85 77 B9 12 A0 FE C3 95 75 82 85 \
+ 77 C7 16 C0 DA 02 71 C7 77 C0 32 05 97 71 9A 32 \
+ 02 97 71 B9 06 C1 D2 01 71 B9 06 C3 67 B2 75 B9 \
+ 32 03 97 71 C0 32 04 97 75 C7 06 C2 D2 07 71 C7 \
+ 77 C0 12 80 F8 15 1A 00 57 32 0E 87 32 0E 87 57 \
+ 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 57'"		# sdk5690.hex
+
+if $?draco_k12 "local ledcode '\
+ 02 0B A2 01 28 A2 01 60 C3 67 32 67 6E 06 C3 90 \
+ 75 02 12 C2 85 05 D2 0F 71 1C 52 00 12 C1 85 05 \
+ D2 1F 71 26 52 00 12 C0 85 05 D2 05 71 30 52 00 \
+ 3A 30 32 00 97 75 3E 12 A0 FE C3 02 0A 50 32 01 \
+ 97 75 4A 12 AC FE C3 02 0A 50 12 AC FE C3 95 75 \
+ 5C 85 12 A0 FE C3 95 75 A6 85 77 9F 12 A0 FE C3 \
+ 95 75 66 85 77 AD 16 C0 DA 02 71 AD 77 A6 32 05 \
+ 97 71 7E 32 02 97 71 9F 06 C1 D2 01 71 9F 06 C3 \
+ 67 96 75 9F 32 03 97 71 A6 32 04 97 75 AD 06 C2 \
+ D2 07 71 AD 77 A6 12 80 A2 01 F8 15 1A 00 57 32 \
+ 0E 87 32 0E 87 57 32 0E 87 32 0F 87 57 32 0F 87 \
+ 32 0E 87 57'"						# k12-5690.hex
+
+if $?herc && $?white_knight "local ledcode '\
+ 2A 03 67 0A 2A 06 67 0A 3A 08 32 08 D7 87 32 07 \
+ D7 87 32 01 D7 87 32 00 D7 87 57'"			# wk5670.hex
+
+if $?herc && $?merlin "local ledcode '\
+ 2A 03 67 0A 2A 06 67 0A 3A 08 32 08 D7 87 32 00 \
+ D7 87 32 01 D7 87 32 07 D7 87 57'"			# merlin5670.hex
+
+if $?herc && $?lancelot "local ledcode '\
+ 2A 05 67 12 2A 06 67 12 2A 03 67 12 2A 04 67 12 \
+ 3A 10 32 08 D7 87 32 00 D7 87 32 01 D7 87 32 07 \
+ D7 87 57'"						# lancelot.hex
+
+if $?xgs_fabric && $?guenevere "local ledcode '\
+ 2A 04 67 0A 2A 05 67 0A 3A 04 32 07 D7 87 32 00 \
+ 32 01 B7 D7 87 57'"                                    # guenevere5670.hex
+
+if $?drac_any && $?white_knight "local ledcode '\
+ E0 28 60 C3 67 2f 67 6B 06 C3 80 D2 0C 74 01 12 \
+ C2 85 05 D2 0F 71 19 52 00 12 C1 85 05 D2 1F 71 \
+ 23 52 00 12 C0 85 05 D2 05 71 2D 52 00 3A 30 32 \
+ 00 97 75 3B 12 A0 FE C3 02 0A 50 32 01 97 75 47 \
+ 12 AC FE C3 02 0A 50 12 AC FE C3 95 75 59 85 12 \
+ A0 FE C3 95 75 A8 85 77 9A 12 A0 FE C3 95 75 63 \
+ 85 77 A1 16 C0 DA 02 71 A1 77 A8 32 05 97 71 7B \
+ 32 02 97 71 9A 06 C1 D2 01 71 9A 06 C3 67 93 75 \
+ 9A 32 03 97 71 A8 32 04 97 75 A1 06 C2 D2 07 71 \
+ A1 77 A8 12 80 F8 15 1A 00 57 32 0E 87 32 0E 87 \
+ 57 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 57'"		# wk5690.hex
+
+if $?drac_any && $?merlin "local ledcode '\
+ E0 28 60 C3 67 2F 67 6B 06 C3 80 D2 0C 74 01 12 \
+ C2 85 05 D2 0F 71 19 52 00 12 C1 85 05 D2 1F 71 \
+ 23 52 00 12 C0 85 05 D2 05 71 2D 52 00 3A 30 32 \
+ 00 97 75 3B 12 A0 FE C3 02 0A 50 32 01 97 75 47 \
+ 12 AC FE C3 02 0A 50 12 AC FE C3 95 75 59 85 12 \
+ A0 FE C3 95 75 A8 85 77 9A 12 A0 FE C3 95 75 63 \
+ 85 77 A1 16 C0 DA 02 71 A1 77 A8 32 05 97 71 7B \
+ 32 02 97 71 9A 06 C1 D2 01 71 9A 06 C3 67 93 75 \
+ 9A 32 03 97 71 A8 32 04 97 75 A1 06 C2 D2 07 71 \
+ A1 77 A8 12 80 F8 15 1A 00 57 32 0E 87 32 0E 87 \
+ 57 32 0F 87 32 0E 87 57 32 0E 87 32 0F 87 57'"		# merlin5690.hex
+
+if $?drac_any && $?galahad "local ledcode '\
+ E0 28 60 C3 67 2F 67 6B 06 C3 80 D2 0C 74 01 12 \
+ C2 85 05 D2 0F 71 19 52 00 12 C1 85 05 D2 1F 71 \
+ 23 52 00 12 C0 85 05 D2 05 71 2D 52 00 3A 30 32 \
+ 00 97 75 3B 12 A0 FE C3 02 0A 50 32 01 97 75 47 \
+ 12 AC FE C3 02 0A 50 12 AC FE C3 95 75 59 85 12 \
+ A0 FE C3 95 75 A8 85 77 9A 12 A0 FE C3 95 75 63 \
+ 85 77 A1 16 C0 DA 02 71 A1 77 A8 32 05 97 71 7B \
+ 32 02 97 71 9A 06 C1 D2 01 71 9A 06 C3 67 93 75 \
+ 9A 32 03 97 71 A8 32 04 97 75 A1 06 C2 D2 07 71 \
+ A1 77 A8 12 80 F8 15 1A 00 57 32 0E 87 32 0E 87 \
+ 57 32 0F 87 32 0E 87 57 32 0E 87 32 0F 87 57'"		# galahad.hex
+
+if $?drac_any && $?lm "local ledcode '\
+E0 28 60 C3 67 2D 06 C3 80 D2 0C 74 01 12 C2 85 \
+05 D2 0F 71 17 52 00 12 C1 85 05 D2 1F 71 21 52 \
+00 12 C0 85 05 D2 05 71 2B 52 00 3A 18 32 00 97 \
+75 39 12 A0 FE C3 02 0A 50 32 01 97 75 45 12 AC \
+FE C3 02 0A 50 12 AC FE C3 95 75 5F 85 12 A0 FE \
+C3 95 71 5C 16 C0 DA 02 71 A6 77 B4 85 77 77 12 \
+A0 FE C3 95 75 6F 85 16 C0 DA 02 71 A6 77 AD 16 \
+C0 DA 02 71 AD 77 B4 32 05 97 71 82 06 C1 D2 01 \
+71 A6 06 C3 67 9F 75 A6 32 02 97 71 A6 32 03 97 \
+71 B4 32 04 97 75 AD 06 C2 D2 07 71 AD 77 B4 12 \
+80 F8 15 1A 00 57 32 0E 87 32 0E 87 57 32 0E 87 \
+32 0F 87 57 32 0F 87 32 0E 87 57'"      # lm5690.hex
+
+if $?twolynx "local ledcode '\
+ 2A 01 67 0A 2A 00 67 0A 3A 08 32 08 D7 87 32 00 \
+ D7 87 32 01 D7 87 32 07 D7 87 57'"                 # twolynx.hex
+
+if $?lynx_any && $?herculynx || $?lynxalot || $?lm || $?guenevere \
+	"local ledcode '\
+12 C0 85 05 D2 03 71 0A 52 00 2A 00 67 10 3A 04 \
+32 08 D7 87 06 C0 D2 01 71 22 32 0F 87 32 0F 87 \
+77 2A 32 00 D7 87 32 01 D7 87 32 07 D7 87 57'"      # herculynx.hex
+
+if $?tucana && !$?magnum "local ledcode '\
+ E0 67 23 D2 18 74 01 02 20 67 23 D2 38 74 09 02 \
+ 18 67 23 D2 1C 74 11 E9 02 80 45 80 81 DA 0D 74 \
+ 1A 3A 68 28 60 E3 67 4A 67 36 06 E4 30 87 06 E5 \
+ 30 87 06 E3 80 57 32 00 97 71 45 32 01 97 71 45 \
+ 02 0F 60 E5 57 02 0E 60 E5 57 06 E3 12 A0 F8 15 \
+ 1A 00 75 59 02 0E 60 E4 57 02 0F 60 E4 57'"        # sdk5665.hex
+
+if $?magnum && !$?tuc24_ref && !$?BCM5650_C0 "local ledcode '\
+ E0 28 60 FC 67 5A 67 9C 06 FA 67 DA 06 FB 67 DA \
+ 06 FC 80 D2 1C 74 01 12 FD 85 05 D2 0F 71 21 52 \
+ 00 12 FE 85 05 D2 1F 71 2B 52 00 12 FF 85 05 D2 \
+ 05 71 35 52 00 E9 05 98 98 98 98 C2 0F 60 F9 05 \
+ 88 88 88 88 C2 F0 B6 F9 50 81 DA 0C 74 36 E9 02 \
+ 80 45 80 81 DA 0E 74 51 3A 70 32 00 97 75 66 12 \
+ C0 FE FC 02 0A 50 32 01 97 75 72 12 DC FE FC 02 \
+ 0A 50 12 DC FE FC 95 75 86 85 12 C0 FE FC 95 02 \
+ FA 75 D7 85 77 D1 12 C0 FE FC 95 75 92 85 02 FA \
+ 77 D4 16 FF DA 02 02 FA 71 D4 77 D7 32 05 97 71 \
+ A9 06 FE D2 01 02 FB 71 D1 06 FC 67 CA 02 FB 75 \
+ D1 32 02 97 71 D1 32 03 97 71 D7 32 04 97 75 D4 \
+ 06 FD D2 07 02 FB 71 D4 77 D7 12 A0 F8 15 1A 00 \
+ 57 42 00 57 42 01 57 42 02 57 D2 02 74 E3 32 0F \
+ 87 77 E6 32 0E 87 D2 01 74 EE 32 0F 87 57 32 0E \
+ 87 57'"                                            # sdk5665.hex
+
+if $?magnum && !$?tuc24_ref && $?BCM5650_C0 "local ledcode '\
+ E0 60 FB D2 18 75 09 A2 01 60 FC 28 67 37 67 73 \
+ 06 FB 80 D2 1C 74 01 12 FD 85 05 D2 0F 71 21 52 \
+ 00 12 FE 85 05 D2 1F 71 2B 52 00 12 FF 85 05 D2 \
+ 05 71 35 52 00 3A 70 32 00 97 75 43 12 C0 FE FC \
+ 02 0A 50 32 01 97 75 4F 12 DC FE FC 02 0A 50 12 \
+ DC FE FC 95 75 61 85 12 C0 FE FC 95 75 B0 85 77 \
+ A2 12 C0 FE FC 95 75 6B 85 77 A9 16 FF DA 02 71 \
+ A9 77 B0 32 05 97 71 7E 06 FE D2 01 71 A2 06 FC \
+ 67 9B 75 A2 32 02 97 71 A2 32 03 97 71 B0 32 04 \
+ 97 75 A9 06 FD D2 07 71 A9 77 B0 12 A0 F8 15 1A \
+ 00 57 32 0F 87 32 0F 87 57 32 0E 87 32 0F 87 57 \
+ 32 0F 87 32 0E 87 57'"                            # magnum_sdk.hex
+
+if $?tuc24_ref && $?BCM5650_C0 "local ledcode '\
+ E0 60 FB D2 18 71 10 60 FC 28 67 D0 67 C0 77 19 \
+ A2 01 60 FC 28 67 40 67 7C 06 FB 80 D2 1C 74 01 \
+ 12 FD 85 05 D2 0F 71 2A 52 00 12 FE 85 05 D2 1F \
+ 71 34 52 00 12 FF 85 05 D2 05 71 3E 52 00 3A 68 \
+ 32 00 97 75 4C 12 C0 FE FC 02 0A 50 32 01 97 75 \
+ 58 12 DC FE FC 02 0A 50 12 DC FE FC 95 75 6A 85 \
+ 12 C0 FE FC 95 75 B9 85 77 AB 12 C0 FE FC 95 75 \
+ 74 85 77 B2 16 FF DA 02 71 B2 77 B9 32 05 97 71 \
+ 87 06 FE D2 01 71 AB 06 FC 67 A4 75 AB 32 02 97 \
+ 71 AB 32 03 97 71 B9 32 04 97 75 B2 06 FD D2 07 \
+ 71 B2 77 B9 12 A0 F8 15 1A 00 57 32 0F 87 32 0F \
+ 87 57 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 57 \
+ 02 0E 32 00 97 71 CD 32 01 97 71 CD 80 30 87 57 \
+ 06 FC 12 A0 F8 15 1A 00 02 0F 75 DD 90 30 87 57'"  # magnum.hex
+
+if $?tuc24_ref && !$?BCM5650_C0 "local ledcode '\
+ E0 28 60 FC D2 18 71 0E 67 E9 67 D9 77 1A 67 5A \
+ 67 9C 06 FA 67 D0 06 FB 67 D0 06 FC 80 D2 1C 74 \
+ 01 12 FE 85 05 D2 1F 71 2B 52 00 12 FF 85 05 D2 \
+ 05 71 35 52 00 E9 05 98 98 98 98 C2 0F 60 F9 05 \
+ 88 88 88 88 C2 F0 B6 F9 50 81 DA 0C 74 36 E9 02 \
+ 80 45 80 81 DA 0D 74 51 3A 68 32 00 97 75 66 12 \
+ C0 FE FC 02 0A 50 32 01 97 75 72 12 DC FE FC 02 \
+ 0A 50 12 DC FE FC 95 75 86 85 12 C0 FE FC 95 02 \
+ FA 75 CD 85 77 C7 12 C0 FE FC 95 75 92 85 02 FA \
+ 77 CA 16 FF DA 02 02 FA 71 CA 77 CD 32 05 97 71 \
+ A9 06 FE D2 01 02 FB 71 C7 06 FC 67 C0 02 FB 75 \
+ C7 32 02 97 71 C7 32 03 97 71 CD 32 04 97 75 CA \
+ 12 A0 F8 15 1A 00 57 42 FF 57 42 FE 57 42 EF 57 \
+ 30 87 98 98 98 98 30 87 57 02 0E 32 00 97 71 E6 \
+ 32 01 97 71 E6 80 30 87 57 06 FC 12 A0 F8 15 1A \
+ 00 02 0F 75 F6 90 30 87 57'"                       # tuc24_ref.hex
+
+if $?herc8_15 "local ledcode '\
+ 02 01 28 32 08 D7 87 32 07 D7 87 32 01 D7 87 32 \
+ 00 D7 87 80 D2 09 74 02 86 7F 06 7F C2 07 74 22 \
+ 86 7E 16 7E CA 07 E0 17 0D 12 08 98 27 D7 87 91 \
+ 74 2B 3A 28'"                                      # sdk5675.hex
+
+if $?drac_any && $?lm "local ledcode '\
+ E0 28 60 C3 67 2D 06 C3 80 D2 0C 74 01 12 C2 85 \
+ 05 D2 0F 71 17 52 00 12 C1 85 05 D2 1F 71 21 52 \
+ 00 12 C0 85 05 D2 05 71 2B 52 00 3A 18 32 00 97 \
+ 75 39 12 A0 FE C3 02 0A 50 32 01 97 75 45 12 AC \
+ FE C3 02 0A 50 12 AC FE C3 95 75 5F 85 12 A0 FE \
+ C3 95 71 5C 16 C0 DA 02 71 A6 77 B4 85 77 77 12 \
+ A0 FE C3 95 75 6F 85 16 C0 DA 02 71 A6 77 AD 16 \
+ C0 DA 02 71 AD 77 B4 32 05 97 71 82 06 C1 D2 01 \
+ 71 A6 06 C3 67 9F 75 A6 32 02 97 71 A6 32 03 97 \
+ 71 B4 32 04 97 75 AD 06 C2 D2 07 71 AD 77 B4 12 \
+ 80 F8 15 1A 00 57 32 0E 87 32 0E 87 57 32 0E 87 \
+ 32 0F 87 57 32 0F 87 32 0E 87 57 00 00 00 00 00'"  # lm5690.hex
+
+if $?drac_any && $?lm48p "local ledcode '\
+ E0 28 60 C3 67 7C 06 C3 80 28 60 C3 67 7C 67 40 \
+ 06 C3 90 28 60 C3 67 40 06 C3 80 80 D2 0C 74 01 \
+ 12 C2 85 05 D2 0F 71 2A 52 00 12 C1 85 05 D2 1F \
+ 71 34 52 00 12 C0 85 05 D2 05 71 3E 52 00 3A 30 \
+ 32 00 97 75 4C 12 A0 FE C3 02 0A 50 32 01 97 75 \
+ 58 12 AC FE C3 02 0A 50 12 AC FE C3 95 75 6A 85 \
+ 12 A0 FE C3 95 75 B9 85 77 AB 12 A0 FE C3 95 75 \
+ 74 85 77 B2 16 C0 DA 02 71 B2 77 B9 32 05 97 71 \
+ 8C 32 02 97 71 AB 06 C1 D2 01 71 AB 06 C3 67 A4 \
+ 75 AB 32 03 97 71 B9 32 04 97 75 B2 06 C2 D2 07 \
+ 71 B2 77 B9 12 80 F8 15 1A 00 57 32 0E 87 32 0E \
+ 87 57 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 57'"  # lm48p5695.hex
+
+if $?drac_any && $?lm48p_B "local ledcode '\
+ E0 28 60 C3 67 79 06 C3 67 3D 06 C3 80 28 60 C3 \
+ 67 3D 06 C3 67 79 06 C3 80 D2 0C 74 01 12 C2 85 \
+ 05 D2 0F 71 27 52 00 12 C1 85 05 D2 1F 71 31 52 \
+ 00 12 C0 85 05 D2 05 71 3B 52 00 3A 30 32 00 97 \
+ 75 49 12 A0 FE C3 02 0A 50 32 01 97 75 55 12 AC \
+ FE C3 02 0A 50 12 AC FE C3 95 75 67 85 12 A0 FE \
+ C3 95 75 B6 85 77 A8 12 A0 FE C3 95 75 71 85 77 \
+ AF 16 C0 DA 02 71 AF 77 B6 32 05 97 71 89 32 02 \
+ 97 71 A8 06 C1 D2 01 71 A8 06 C3 67 A1 75 A8 32 \
+ 03 97 71 B6 32 04 97 75 AF 06 C2 D2 07 71 AF 77 \
+ B6 12 80 F8 15 1A 00 57 32 0E 87 32 0E 87 57 32 \
+ 0E 87 32 0F 87 57 32 0F 87 32 0E 87 57'"  # lm48p5695_10.hex
+
+if $?firebolt_any "local ledcode '\
+ E0 28 60 E3 67 55 67 91 06 E3 80 28 60 E3 67 91 \
+ 67 55 06 E3 80 D2 18 74 01 28 60 E3 67 B9 75 26 \
+ 67 CE 67 55 77 2E 32 0E 87 32 08 87 67 C0 06 E3 \
+ 80 D2 1C 74 19 12 E2 85 05 D2 0F 71 3F 52 00 12 \
+ E1 85 05 D2 1F 71 49 52 00 12 E0 85 05 D2 05 71 \
+ 53 52 00 3A 70 32 00 97 75 61 12 A0 FE E3 02 0A \
+ 50 32 01 97 75 6D 12 BC FE E3 02 0A 50 12 BC FE \
+ E3 95 75 7F 85 12 A0 FE E3 95 75 CE 85 77 C0 12 \
+ A0 FE E3 95 75 89 85 77 C7 16 E0 DA 02 71 C7 77 \
+ CE 32 05 97 71 A1 32 02 97 71 C0 06 E1 D2 01 71 \
+ C0 06 E3 67 B9 75 C0 32 03 97 71 CE 32 04 97 75 \
+ C7 06 E2 D2 07 71 C7 77 CE 12 80 F8 15 1A 00 57 \
+ 32 0E 87 32 0E 87 57 32 0E 87 32 0F 87 57 32 0F \
+ 87 32 0E 87 57'"  # sdk56504.hex
+
+#Led program for new rev of FB SDK and Ref design
+if $?firebolt_any && !$?fb24 "local ledcode '\
+ E0 28 60 E3 67 4B 67 87 06 E3 80 D2 18 74 01 28 \
+ 60 E3 67 AF 75 1C 67 C4 67 4B 77 24 32 0E 87 32 \
+ 08 87 67 B6 06 E3 80 D2 1C 74 0F 12 E2 85 05 D2 \
+ 0F 71 35 52 00 12 E1 85 05 D2 1F 71 3F 52 00 12 \
+ E0 85 05 D2 05 71 49 52 00 3A 70 32 00 97 75 57 \
+ 12 A0 FE E3 02 0A 50 32 01 97 75 63 12 BC FE E3 \
+ 02 0A 50 12 BC FE E3 95 75 75 85 12 A0 FE E3 95 \
+ 75 C4 85 77 B6 12 A0 FE E3 95 75 7F 85 77 BD 16 \
+ E0 DA 02 71 BD 77 C4 32 05 97 71 97 32 02 97 71 \
+ B6 06 E1 D2 01 71 B6 06 E3 67 AF 75 B6 32 03 97 \
+ 71 C4 32 04 97 75 BD 06 E2 D2 07 71 BD 77 C4 12 \
+ 80 F8 15 1A 00 57 32 0E 87 32 0E 87 57 32 0E 87 \
+ 32 0F 87 57 32 0F 87 32 0E 87 57'" # sdk56504ref.hex
+
+#Override Default Firebolt LED program for Line Module
+if $?lm && $?firebolt_any "local ledcode '\
+ E0 28 60 E3 67 79 06 E3 67 3D 06 E3 80 28 60 E3 \
+ 67 3D 06 E3 67 79 06 E3 80 D2 18 74 01 12 E2 85 \
+ 05 D2 0F 71 27 52 00 12 E1 85 05 D2 1F 71 31 52 \
+ 00 12 E0 85 05 D2 05 71 3B 52 00 3A 60 32 00 97 \
+ 75 49 12 A0 FE E3 02 0A 50 32 01 97 75 55 12 BC \
+ FE E3 02 0A 50 12 BC FE E3 95 75 67 85 12 A0 FE \
+ E3 95 75 B6 85 77 A8 12 A0 FE E3 95 75 71 85 77 \
+ AF 16 E0 DA 02 71 AF 77 B6 32 05 97 71 89 32 02 \
+ 97 71 A8 06 E1 D2 01 71 A8 06 E3 67 A1 75 A8 32 \
+ 03 97 71 B6 32 04 97 75 AF 06 E2 D2 07 71 AF 77 \
+ B6 12 80 F8 15 1A 00 57 32 0E 87 32 0E 87 57 32 \
+ 0E 87 32 0F 87 57 32 0F 87 32 0E 87 57'" # lm48p56504.hex
+
+#Override Default Firebolt LED program for Line Module -50 version
+if $?lm && $?lm48p_D && $?firebolt_any "local ledcode '\
+ E0 28 60 E3 67 6D 06 E3 67 31 06 E3 80 D2 18 74 \
+ 01 12 E2 85 05 D2 0F 71 1B 52 00 12 E1 85 05 D2 \
+ 1F 71 25 52 00 12 E0 85 05 D2 05 71 2F 52 00 3A \
+ 60 32 00 97 75 3D 12 A0 FE E3 02 0A 50 32 01 97 \
+ 75 49 12 BC FE E3 02 0A 50 12 BC FE E3 95 75 5B \
+ 85 12 A0 FE E3 95 75 AA 85 77 9C 12 A0 FE E3 95 \
+ 75 65 85 77 A3 16 E0 DA 02 71 A3 77 AA 32 05 97 \
+ 71 7D 32 02 97 71 9C 06 E1 D2 01 71 9C 06 E3 67 \
+ 95 75 9C 32 03 97 71 AA 32 04 97 75 A3 06 E2 D2 \
+ 07 71 A3 77 AA 12 80 F8 15 1A 00 57 32 0E 87 32 \
+ 0E 87 57 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 \
+ 57'" # lm48p56504_50.hex
+
+if $?lm && $?firebolt_10x4 "local ledcode '\
+ 02 18 28 32 07 67 1E 75 0A D7 87 32 01 D7 87 32 \
+ 00 D7 87 32 08 D7 87 80 D2 1C 74 02 3A 0C 12 80 \
+ F8 15 1A 00 57 '" # lm12pcx456501.hex
+
+if $?fbpoe && $?firebolt_any "local ledcode '\
+ E0 28 60 E3 67 85 67 49 06 E3 80 D2 18 74 01 28 \
+ 60 E3 67 AD 75 1A 67 C2 77 20 32 0E 87 32 08 87 \
+ 67 49 06 E3 80 D2 1A 74 0F 12 E2 85 05 D2 0F 71 \
+ 33 52 00 12 E1 85 05 D2 1F 71 3D 52 00 12 E0 85 \
+ 05 D2 05 71 47 52 00 3A 68 32 00 97 75 55 12 A0 \
+ FE E3 02 0A 50 32 01 97 75 61 12 BA FE E3 02 0A \
+ 50 12 BA FE E3 95 75 73 85 12 A0 FE E3 95 75 C2 \
+ 85 77 B4 12 A0 FE E3 95 75 7D 85 77 BB 16 E0 DA \
+ 02 71 BB 77 C2 32 05 97 71 95 32 02 97 71 B4 06 \
+ E1 D2 01 71 B4 06 E3 67 AD 75 B4 32 03 97 71 C2 \
+ 32 04 97 75 BB 06 E2 D2 07 71 BB 77 C2 12 80 F8 \
+ 15 1A 00 57 32 0E 87 32 0E 87 57 32 0E 87 32 0F \
+ 87 57 32 0F 87 32 0E 87 57'" # poe48p56504.hex
+
+#Override Default Firebolt LED program for felix
+if $?felix || $?felix15 "local ledcode '\
+ E0 28 60 E3 67 6B 67 A7 06 E3 80 D2 18 74 01 02 \
+ 18 28 60 E3 67 49 02 19 28 60 E3 67 49 32 0E 87 \
+ 32 0E 87 32 0E 87 32 0E 87 12 E2 85 05 D2 0F 71 \
+ 33 52 00 12 E1 85 05 D2 1F 71 3D 52 00 12 E0 85 \
+ 05 D2 05 71 47 52 00 3A 68 67 CF 75 52 32 0E 87 \
+ 77 55 32 0F 87 32 00 97 75 5E 32 0E 87 57 32 01 \
+ 97 75 67 32 0E 87 57 32 0F 87 57 32 00 97 75 77 \
+ 12 A0 FE E3 02 0A 50 32 01 97 75 83 12 BC FE E3 \
+ 02 0A 50 12 BC FE E3 95 75 95 85 12 A0 FE E3 95 \
+ 75 E4 85 77 D6 12 A0 FE E3 95 75 9F 85 77 DD 16 \
+ E0 DA 02 71 DD 77 E4 32 05 97 71 B7 32 02 97 71 \
+ D6 06 E1 D2 01 71 D6 06 E3 67 CF 75 D6 32 03 97 \
+ 71 E4 32 04 97 75 DD 06 E2 D2 07 71 DD 77 E4 12 \
+ 80 F8 15 1A 00 57 32 0E 87 32 0E 87 57 32 0E 87 \
+ 32 0F 87 57 32 0E 87 32 0F 87 57'"  # sdk56102.hex
+
+#Override Default Felix LED program for felix48
+if $?felix48 && $?felix || $?felix15 "local ledcode '\
+ E0 28 60 E3 67 6B 67 A7 06 E3 80 D2 18 74 01 02 \
+ 18 28 60 E3 67 49 02 19 28 60 E3 67 49 32 0E 87 \
+ 32 0E 87 32 0E 87 32 0E 87 12 E2 85 05 D2 0F 71 \
+ 33 52 00 12 E1 85 05 D2 1F 71 3D 52 00 12 E0 85 \
+ 05 D2 05 71 47 52 00 3A 68 67 CF 75 52 32 0E 87 \
+ 77 55 32 0F 87 32 00 97 75 5E 32 0E 87 57 32 01 \
+ 97 75 67 32 0E 87 57 32 0F 87 57 32 00 97 75 77 \
+ 12 A0 FE E3 02 0A 50 32 01 97 75 83 12 BC FE E3 \
+ 02 0A 50 12 BC FE E3 95 75 95 85 12 A0 FE E3 95 \
+ 75 E4 85 77 D6 12 A0 FE E3 95 75 9F 85 77 DD 16 \
+ E0 DA 02 71 DD 77 E4 32 05 97 71 B7 32 02 97 71 \
+ D6 06 E1 D2 01 71 D6 06 E3 67 CF 75 D6 32 03 97 \
+ 71 E4 32 04 97 75 DD 06 E2 D2 07 71 DD 77 E4 12 \
+ 80 F8 15 1A 00 57 32 0E 87 32 0E 87 57 32 0E 87 \
+ 32 0F 87 57 32 0F 87 32 0E 87 57'"  # felix48.hex
+
+if $?easyrider_any "local ledcode '\
+ E0 28 60 E3 67 59 67 95 06 E3 80 28 60 E3 67 95 \
+ 67 59 06 E3 80 D2 0C 74 01 28 60 E3 67 BD 75 26 \
+ 67 D2 67 59 77 2E 32 0E 87 32 08 87 67 C4 06 E3 \
+ 80 D2 0D 74 19 12 E2 85 05 D2 0F 71 3F 52 00 12 \
+ E1 85 05 D2 1F 71 49 52 00 12 E0 85 05 D2 05 71 \
+ 53 52 00 67 C4 67 C4 3A 38 32 00 97 75 65 12 A0 \
+ FE E3 02 0A 50 32 01 97 75 71 12 AD FE E3 02 0A \
+ 50 12 AD FE E3 95 75 83 85 12 A0 FE E3 95 75 D2 \
+ 85 77 C4 12 A0 FE E3 95 75 8D 85 77 CB 16 E0 DA \
+ 02 71 CB 77 D2 32 05 97 71 A5 32 02 97 71 C4 06 \
+ E1 D2 01 71 C4 06 E3 67 BD 75 C4 32 03 97 71 D2 \
+ 32 04 97 75 CB 06 E2 D2 07 71 CB 77 D2 12 80 F8 \
+ 15 1A 00 57 32 0E 87 32 0E 87 57 32 0E 87 32 0F \
+ 87 57 32 0F 87 32 0E 87 57'"   # sdk56601.hex
+
+#Override Default Easyrider LED program for 56602
+if $?easyrider_1x1 "local ledcode '\
+ E0 60 E1 67 7C 67 7C 06 E1 80 D2 0C 74 01 02 0C \
+ 28 60 E1 67 75 75 1D 67 8A 67 39 77 25 32 0E 87 \
+ 32 08 87 67 7C 06 E1 D2 00 02 00 74 10 12 E0 85 \
+ 05 D2 05 71 37 52 00 3A 38 32 00 97 75 45 12 A0 \
+ FE E1 02 0A 50 32 01 97 75 51 12 AD FE E1 02 0A \
+ 50 12 AD FE E1 95 75 63 85 12 A0 FE E1 95 75 8A \
+ 85 77 7C 12 A0 FE E1 95 75 6D 85 77 83 16 E0 DA \
+ 02 71 83 77 8A 12 80 F8 15 1A 00 57 32 0E 87 32 \
+ 0E 87 57 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 \
+ 57'"   # sdk56602.hex
+
+#Override Default  LED program for 53300
+if $?mirage24 "local ledcode '\
+ E0 28 60 E3 67 6B 67 2F 06 E3 80 D2 18 74 01 12 \
+ E2 85 05 D2 0F 71 19 52 00 12 E1 85 05 D2 1F 71 \
+ 23 52 00 12 E0 85 05 D2 05 71 2D 52 00 3A 30 32 \
+ 00 97 75 3B 12 A0 FE E3 02 0A 50 32 01 97 75 47 \
+ 12 BC FE E3 02 0A 50 12 BC FE E3 95 75 59 85 12 \
+ A0 FE E3 95 75 A2 85 77 9A 12 A0 FE E3 95 75 63 \
+ 85 77 9E 16 E0 DA 02 71 9E 77 A2 32 05 97 71 7B \
+ 32 02 97 71 9A 06 E1 D2 01 71 9A 06 E3 67 93 75 \
+ 9A 32 03 97 71 A2 32 04 97 75 9E 06 E2 D2 07 71 \
+ 9E 77 A2 12 80 F8 15 1A 00 57 32 0F 87 57 32 0E \
+ 87 57 32 0E 87 57'"  # sdk53300.hex
+
+#Override Default LED program for 56314
+if $?bcm56314p24ref "local ledcode '\
+ E0 28 60 E3 67 79 67 3D 06 E3 80 D2 18 74 01 28 \
+ 60 E3 67 79 67 A8 06 E3 80 D2 1C 74 0F 12 E2 85 \
+ 05 D2 0F 71 27 52 00 12 E1 85 05 D2 1F 71 31 52 \
+ 00 12 E0 85 05 D2 05 71 3B 52 00 3A 38 32 00 97 \
+ 75 49 12 A0 FE E3 02 0A 50 32 01 97 75 55 12 BC \
+ FE E3 02 0A 50 12 BC FE E3 95 75 67 85 12 A0 FE \
+ E3 95 75 B0 85 77 A8 12 A0 FE E3 95 75 71 85 77 \
+ AC 16 E0 DA 02 71 AC 77 B0 32 05 97 71 89 32 02 \
+ 97 71 A8 06 E1 D2 01 71 A8 06 E3 67 A1 75 A8 32 \
+ 03 97 71 B0 32 04 97 75 AC 06 E2 D2 07 71 AC 77 \
+ B0 12 80 F8 15 1A 00 57 32 0F 87 57 32 0E 87 57 \
+ 32 0E 87 57'"  # bcm956314p24ref.hex
+
+if $?bradley "local ledcode '\
+ E0 28 60 F2 67 1B 06 F2 80 D2 14 74 01 86 F3 12 \
+ F0 85 05 D2 05 71 19 52 00 3A 28 32 00 97 75 27 \
+ 12 A8 FE F2 02 0A 50 32 01 97 75 33 12 BC FE F2 \
+ 02 0A 50 12 BC FE F2 95 75 45 85 12 A8 FE F2 95 \
+ 75 91 85 77 57 12 A8 FE F2 95 75 4F 85 77 8A 16 \
+ F0 DA 02 71 8A 77 91 06 F2 12 94 F8 15 02 02 C1 \
+ 74 6E 02 04 C1 74 6E 02 08 C1 74 6E 77 74 C6 F3 \
+ 74 91 77 8A 06 F2 67 7C 75 83 77 91 12 80 F8 15 \
+ 1A 00 57 32 0E 87 32 0E 87 57 32 0E 87 32 0F 87 \
+ 57 32 0F 87 32 0E 87 57'"     # sdk56800.hex
+
+if $?humv "local ledcode '\
+ E0 28 60 F2 67 21 06 F2 80 D2 08 74 0F F2 02 D2 \
+ 12 74 01 86 F3 12 F0 85 05 D2 05 71 1F 52 00 3A \
+ 20 32 00 97 75 2D 12 A8 FE F2 02 0A 50 32 01 97 \
+ 75 39 12 BA FE F2 02 0A 50 12 BA FE F2 95 75 4B \
+ 85 12 A8 FE F2 95 75 97 85 77 5D 12 A8 FE F2 95 \
+ 75 55 85 77 90 16 F0 DA 02 71 90 77 97 06 F2 12 \
+ 94 F8 15 02 02 C1 74 74 02 04 C1 74 74 02 08 C1 \
+ 74 74 77 7A C6 F3 74 97 77 90 06 F2 67 82 75 89 \
+ 77 97 12 80 F8 15 1A 00 57 32 0E 87 32 0E 87 57 \
+ 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 57'" # sdk56700.hex
+
+if $?bradley_1g "local ledcode '\
+ E0 28 60 E3 67 2F 67 6B 06 E3 80 D2 14 74 01 12 \
+ E2 85 05 D2 0F 71 19 52 00 12 E1 85 05 D2 1F 71 \
+ 23 52 00 12 E0 85 05 D2 05 71 2D 52 00 3A 50 32 \
+ 00 97 75 3B 12 A0 FE E3 02 0A 50 32 01 97 75 47 \
+ 12 B4 FE E3 02 0A 50 12 B4 FE E3 95 75 59 85 12 \
+ A0 FE E3 95 75 A8 85 77 9A 12 A0 FE E3 95 75 63 \
+ 85 77 A1 16 E0 DA 02 71 A1 77 A8 32 05 97 71 7B \
+ 32 02 97 71 9A 06 E1 D2 01 71 9A 06 E3 67 93 75 \
+ 9A 32 03 97 71 A8 32 04 97 75 A1 06 E2 D2 07 71 \
+ A1 77 A8 12 80 F8 15 1A 00 57 32 0E 87 32 0E 87 \
+ 57 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 57 '"  # sdk56800c.hex
+
+if $?goldwing "local ledcode '\
+ E0 28 60 F3 D2 10 75 0E 67 3B 67 94 77 12 67 94 \
+ 67 3B 06 F3 80 D2 14 74 01 86 F4 12 F2 85 05 D2 \
+ 0F 71 25 52 00 12 F1 85 05 D2 1F 71 2F 52 00 12 \
+ F0 85 05 D2 05 71 39 52 00 3A 50 32 00 97 75 47 \
+ 12 A8 FE F3 02 0A 50 32 01 97 75 53 12 BC FE F3 \
+ 02 0A 50 12 BC FE F3 95 75 65 85 12 A8 FE F3 95 \
+ 75 C0 85 77 77 12 A8 FE F3 95 75 6F 85 77 B9 16 \
+ F0 DA 02 71 B9 77 C0 06 F3 12 94 F8 15 02 02 C1 \
+ 74 8E 02 04 C1 74 8E 02 08 C1 74 8E 77 B2 C6 F4 \
+ 74 C0 77 B9 06 F3 67 AB 75 B2 32 04 75 B2 32 03 \
+ 97 71 C0 06 F2 D2 07 71 B9 77 C0 12 80 F8 15 1A \
+ 00 57 32 0E 87 32 0E 87 57 32 0E 87 32 0F 87 57 \
+ 32 0F 87 32 0E 87 57 '"                          # sdk56580.hex
+
+if $?humv && $?lm "local ledcode '\
+ 02 04 28 D2 08 74 0A F2 02 28 32 07 67 29 75 11 \
+ D7 87 60 E4 67 30 06 E4 60 E4 67 4C 06 E4 32 08 \
+ D7 87 80 D2 12 74 02 3A 30 12 80 F8 15 1A 00 57 \
+ 06 E4 12 94 F8 15 02 10 C1 70 42 12 D2 FE E4 02 \
+ 0A 50 12 D2 FE E4 95 75 6D 85 77 68 06 E4 12 94 \
+ F8 15 02 20 C1 70 5E 12 C0 FE E4 02 0A 50 12 C0 \
+ FE E4 95 75 6D 85 77 68 32 0E D7 87 57 32 0F D7 \
+ 87 57 '"                                         # lm12p56802.hex
+
+
+if $?raptor "local ledcode '\
+ 02 06 28 60 FF 67 64 67 93 06 FF 80 D2 36 74 02 \
+ 02 04 28 60 FF 67 BB 75 1E 32 0E 87 77 21 32 0F \
+ 87 67 7D 06 FF 80 D2 06 74 12 02 01 28 60 FF 67 \
+ BB 75 38 32 0E 87 77 3B 32 0F 87 67 7D 06 FF 80 \
+ D2 03 74 2C 12 FE 85 05 D2 0F 71 4E 52 00 12 FD \
+ 85 05 D2 1F 71 58 52 00 12 FC 85 05 D2 05 71 62 \
+ 52 00 3A C8 32 01 97 75 76 32 00 97 75 C9 16 FC \
+ DA 02 71 C9 77 D0 32 00 97 75 C2 77 D0 32 00 97 \
+ 75 86 32 0E 87 57 32 01 97 75 8F 32 0E 87 57 32 \
+ 0F 87 57 32 05 97 71 A3 32 02 97 71 C2 06 FD D2 \
+ 01 71 C2 06 FF 67 BB 75 C2 32 03 97 71 D0 32 04 \
+ 97 75 C9 06 FE D2 07 71 C9 77 D0 12 A0 F8 15 1A \
+ 00 57 32 0E 87 32 0E 87 57 32 0E 87 32 0F 87 57 \
+ 32 0F 87 32 0E 87 57 00 00 00 00 00 00 00 00 00'" # sdk56018.hex
+
+if $?raptor && $?rap24_ref "local ledcode '\
+ 02 06 60 E1 67 48 67 31 06 E1 80 D2 1E 71 02 02 \
+ 05 60 E1 67 48 67 31 06 E1 90 D2 03 74 11 02 02 \
+ 60 E1 67 48 67 31 06 E1 90 D2 00 74 20 86 E0 3A \
+ 38 06 E1 67 50 75 57 28 32 00 32 01 B7 97 75 57 \
+ 16 E0 CA 05 74 5B 77 57 06 E1 67 50 75 57 77 5B \
+ 12 A0 F8 15 1A 00 57 32 0F 87 57 32 0E 87 57 00'" # sdk56214.hex
+
+if $?raven_eb_48p "local ledcode '\
+ 02 06 28 60 C3 67 30 67 6C 06 C3 80 D2 1E 74 02 \
+ 12 C2 85 05 D2 0F 71 1A 52 00 12 C1 85 05 D2 1F \
+ 71 24 52 00 12 C0 85 05 D2 05 71 2E 52 00 3A 60 \
+ 32 00 97 75 3C 12 C0 FE C3 02 0A 50 32 01 97 75 \
+ 48 12 E0 FE C3 02 0A 50 12 E0 FE C3 95 75 5A 85 \
+ 12 C0 FE C3 95 75 A9 85 77 9B 12 C0 FE C3 95 75 \
+ 64 85 77 A2 16 C0 DA 02 71 A2 77 A9 32 05 97 71 \
+ 7C 32 02 97 71 9B 06 C1 D2 01 71 9B 06 C3 67 94 \
+ 75 9B 32 03 97 71 A9 32 04 97 75 A2 06 C2 D2 07 \
+ 71 A2 77 A9 12 A0 F8 15 1A 00 57 32 0E 87 32 0E \
+ 87 57 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 57'" #bcm956024p48ref.hex
+
+if $?BCM956024R50T "local ledcode '\
+ 02 06 28 60 C3 67 30 67 6C 06 C3 80 D2 1E 74 02 \
+ 12 C2 85 05 D2 0F 71 1A 52 00 12 C1 85 05 D2 1F \
+ 71 24 52 00 12 C0 85 05 D2 05 71 2E 52 00 3A 60 \
+ 32 00 97 75 3C 12 C0 FE C3 02 0A 50 32 01 97 75 \
+ 48 12 E0 FE C3 02 0A 50 12 E0 FE C3 95 75 5A 85 \
+ 12 C0 FE C3 95 75 A9 85 77 9B 12 C0 FE C3 95 75 \
+ 64 85 77 A2 16 C0 DA 02 71 A2 77 A9 32 05 97 75 \
+ 7C 32 02 97 71 9B 06 C1 D2 01 71 9B 06 C3 67 94 \
+ 75 9B 32 03 97 71 A9 32 04 97 75 A2 06 C2 D2 07 \
+ 71 A2 77 A9 12 A0 F8 15 1A 00 57 32 0E 87 32 0E \
+ 87 57 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 57'" #bcm956024r50t.hex
+
+if $?scorpion || $?conqueror "local ledcode '\
+ 02 18 28 60 E1 67 12 06 E1 90 D2 00 74 02 86 E0 \
+ 3A 18 67 2D 75 34 28 32 00 32 01 B7 97 75 38 16 \
+ E0 CA 05 74 38 77 34 67 2D 75 34 77 38 12 A0 F8 \
+ 15 1A 00 57 32 0F 87 57 32 0E 87 57 00 00 00 00 \
+ 00 00 00'" #sdk56820.hex
+
+if $?scorpion && $?BCM956820R24XG "local ledcode '\
+ 02 01 28 67 D0 02 02 28 67 D6 67 D0 02 01 28 67 \
+ D6 02 04 28 67 D0 02 03 28 67 D6 67 D0 02 04 28 \
+ 67 D6 02 05 28 67 D0 02 06 28 67 D6 67 D0 02 05 \
+ 28 67 D6 02 07 28 67 D0 02 08 28 67 D6 67 D0 02 \
+ 07 28 67 D6 02 09 28 67 D0 02 0A 28 67 D6 67 D0 \
+ 02 09 28 67 D6 02 0C 28 67 D0 02 0B 28 67 D6 67 \
+ D0 02 0C 28 67 D6 02 0D 28 67 D0 02 0E 28 67 D6 \
+ 67 D0 02 0D 28 67 D6 02 0F 28 67 D0 02 10 28 67 \
+ D6 67 D0 02 0F 28 67 D6 02 11 28 67 D0 02 12 28 \
+ 67 D6 67 D0 02 11 28 67 D6 02 14 28 67 D0 02 13 \
+ 28 67 D6 67 D0 02 14 28 67 D6 02 15 28 67 D0 02 \
+ 16 28 67 D6 67 D0 02 15 28 67 D6 02 17 28 67 D0 \
+ 02 18 28 67 D6 67 D0 02 17 28 67 D6 86 E0 3A 30 \
+ 67 F1 75 F8 77 FC 67 F1 75 F8 28 32 00 32 01 B7 \
+ 97 75 F8 16 E0 CA 05 74 FC 77 F8 67 F1 75 F8 77 \
+ FC 12 A0 F8 15 1A 00 57 32 0F 87 57 32 0E 87 57 \
+ '" #bcm956820r24xg.hex
+
+if $?valkyrie "local ledcode '\
+ 02 02 67 A9 67 94 02 03 67 A9 67 94 02 05 67 A9 \
+ 67 94 02 04 67 A9 67 94 02 06 67 A9 67 94 02 07 \
+ 67 A9 67 94 02 12 67 A9 67 94 02 13 67 A9 67 94 \
+ 02 0E 67 A9 67 94 02 0F 67 A9 67 94 02 11 67 A9 \
+ 67 94 02 10 67 A9 67 94 02 1A 67 A9 67 94 02 20 \
+ 67 A9 67 94 02 21 67 A9 67 94 02 22 67 A9 67 94 \
+ 02 23 67 A9 67 94 02 24 67 A9 67 94 02 2F 67 A9 \
+ 67 94 02 2E 67 A9 67 94 02 1B 67 A9 67 94 02 2B \
+ 67 A9 67 94 02 2C 67 A9 67 94 02 2D 67 A9 67 94 \
+ 86 E0 3A 30 67 AF 75 B6 28 32 00 32 01 B7 97 75 \
+ B6 16 E0 CA 05 74 BA 77 B6 67 AF 75 B6 77 BA 12 \
+ A0 F8 15 1A 00 57 32 0F 87 57 32 0E 87 57 00 00 \
+ 00'" #sdk56680.hex
+
+if $?valkyrie2 "local ledcode '\
+ 02 1E 67 A9 67 94 02 1F 67 A9 67 94 02 21 67 A9 \
+ 67 94 02 20 67 A9 67 94 02 22 67 A9 67 94 02 23 \
+ 67 A9 67 94 02 24 67 A9 67 94 02 25 67 A9 67 94 \
+ 02 26 67 A9 67 94 02 27 67 A9 67 94 02 29 67 A9 \
+ 67 94 02 28 67 A9 67 94 02 2A 67 A9 67 94 02 2B \
+ 67 A9 67 94 02 2C 67 A9 67 94 02 2D 67 A9 67 94 \
+ 02 2E 67 A9 67 94 02 2F 67 A9 67 94 02 31 67 A9 \
+ 67 94 02 30 67 A9 67 94 02 32 67 A9 67 94 02 33 \
+ 67 A9 67 94 02 34 67 A9 67 94 02 35 67 A9 67 94 \
+ 86 E0 3A 30 67 AF 75 B6 28 32 00 32 01 B7 97 75 \
+ B6 16 E0 CA 05 74 BA 77 B6 67 AF 75 B6 77 BA 12 \
+ A0 F8 15 1A 00 57 32 0F 87 57 32 0E 87 57 00 00 \
+ 00'" #sdk56685.hex
+
+if $?hawkeye_p24 "local ledcode '\
+ 02 01 28 60 E3 67 43 67 1C 06 E3 80 D2 19 74 02 \
+ 12 E0 85 05 D2 03 71 1A 52 00 3A 60 32 00 32 01 \
+ B7 97 75 2B 12 E4 FE E3 02 01 50 12 E4 FE E3 95 \
+ 75 3B 85 06 E3 67 55 75 6A 77 5C 16 E0 DA 01 71 \
+ 6A 77 5C 06 E3 67 55 75 6A 32 03 97 71 5C 32 04 \
+ 97 75 6A 77 63 12 A0 F8 15 1A 00 57 32 0E 87 32 \
+ 0F 87 57 32 0F 87 32 0E 87 57 32 0F 87 32 0F 87 \
+ 57'"  #bcm953314p24ref.hex
+
+if $?hawkeye_k24 "local ledcode '\
+ 02 01 28 60 E1 67 3D 67 1C 06 E1 80 D2 19 74 02 \
+ 12 E0 85 05 D2 05 71 1A 52 00 3A 30 32 00 32 01 \
+ B7 97 75 2B 12 E2 FE E1 02 0A 50 12 E2 FE E1 95 \
+ 75 35 85 77 50 16 E0 DA 02 71 4C 77 50 06 E1 67 \
+ 45 75 50 77 4C 12 A0 F8 15 1A 00 57 32 0E 87 57 \
+ 32 0F 87 57 00 00 00 00 00 00 00 00 00 00 00 00'" #bcm953314k24.hex
+
+if !"expr $pcidev + 0 == 0xb624" "local ledcode '\
+ 02 1C 28 67 18 02 1D 28 67 18 02 1E 28 67 18 02 \
+ 1F 28 67 18 86 E0 3A 08 67 3B 75 20 67 46 77 24 \
+ 67 42 77 42 28 32 00 32 01 B7 97 75 42 16 E0 CA \
+ 05 74 46 77 42 67 3B 75 42 77 46 12 A0 F8 15 1A \
+ 00 57 32 0F 87 57 32 0E 87 57 00 00 00 00 00 00'" #sdk56624.hex
+
+if !"expr $pcidev + 0 == 0xb626" "local ledcode '\
+ 02 1A 28 67 22 02 1B 28 67 22 02 1C 28 67 22 02 \
+ 1D 28 67 22 02 1E 28 67 22 02 1F 28 67 22 86 E0 \
+ 3A 08 67 3D 75 44 28 32 00 32 01 B7 97 75 48 16 \
+ E0 CA 05 74 48 77 44 67 3D 75 44 77 48 12 A0 F8 \
+ 15 1A 00 57 32 0F 87 57 32 0E 87 57 00 00 00 00'" #sdk56626.hex
+
+if !"expr $pcidev + 0 == 0xb628" "local ledcode '\
+ 02 02 28 67 2C 02 0E 28 67 2C 02 1A 28 67 2C 02 \
+ 1B 28 67 2C 02 1C 28 67 2C 02 1D 28 67 2C 02 1E \
+ 28 67 2C 02 1F 28 67 2C 86 E0 3A 08 67 47 75 4E \
+ 28 32 00 32 01 B7 97 75 52 16 E0 CA 05 74 52 77 \
+ 4E 67 47 75 4E 77 52 12 A0 F8 15 1A 00 57 32 0F \
+ 87 57 32 0E 87 57 00 00 00 00 00 00 00 00 00 00'" #sdk56628.hex
+
+if !"expr $pcidev + 0 == 0xb629" "local ledcode '\
+ 02 02 28 67 2C 02 0E 28 67 2C 02 1A 28 67 2C 02 \
+ 1B 28 67 2C 02 1C 28 67 2C 02 1D 28 67 2C 02 1E \
+ 28 67 2C 02 1F 28 67 2C 86 E0 3A 08 67 47 75 4E \
+ 28 32 00 32 01 B7 97 75 52 16 E0 CA 05 74 52 77 \
+ 4E 67 47 75 4E 77 52 12 A0 F8 15 1A 00 57 32 0F \
+ 87 57 32 0E 87 57 00 00 00 00 00 00 00 00 00 00'" #sdk56629.hex
+
+if !"expr $pcidev + 0 == 0xb634" "local ledcode '\
+ 02 1A 28 67 18 02 1B 28 67 18 02 1C 28 67 18 02 \
+ 1D 28 67 18 86 E0 3A 08 67 3B 75 20 67 46 77 24 \
+ 67 42 77 42 28 32 00 32 01 B7 97 75 42 16 E0 CA \
+ 05 74 46 77 42 67 3B 75 42 77 46 12 A0 F8 15 1A \
+ 00 57 32 0F 87 57 32 0E 87 57 00 00 00 00 00 00'" #sdk56634.hex
+
+if !"expr $pcidev + 0 == 0xb630" "local ledcode '\
+ 02 1A 28 67 18 02 1B 28 67 18 02 1C 28 67 18 02 \
+ 1D 28 67 18 86 E0 3A 08 67 3B 75 20 67 46 77 24 \
+ 67 42 77 42 28 32 00 32 01 B7 97 75 42 16 E0 CA \
+ 05 74 46 77 42 67 3B 75 42 77 46 12 A0 F8 15 1A \
+ 00 57 32 0F 87 57 32 0E 87 57 00 00 00 00 00 00'" #sdk56634.hex
+
+if !"expr $pcidev + 0 == 0xb636" "local ledcode '\
+ 02 2A 28 67 22 02 32 28 67 22 02 1A 28 67 22 02 \
+ 1B 28 67 22 02 1C 28 67 22 02 1D 28 67 22 86 E0 \
+ 3A 08 67 3D 75 44 28 32 00 32 01 B7 97 75 48 16 \
+ E0 CA 05 74 48 77 44 67 3D 75 44 77 48 12 A0 F8 \
+ 15 1A 00 57 32 0F 87 57 32 0E 87 57 00 00 00 00'" #sdk56636.hex
+
+if !"expr $pcidev + 0 == 0xb638" "local ledcode '\
+ 02 1E 28 67 2C 02 26 28 67 2C 02 2A 28 67 2C 02 \
+ 32 28 67 2C 02 1A 28 67 2C 02 1B 28 67 2C 02 1C \
+ 28 67 2C 02 1D 28 67 2C 86 E0 3A 08 67 47 75 4E \
+ 28 32 00 32 01 B7 97 75 52 16 E0 CA 05 74 52 77 \
+ 4E 67 47 75 4E 77 52 12 A0 F8 15 1A 00 57 32 0F \
+ 87 57 32 0E 87 57 00 00 00 00 00 00 00 00 00 00'" #sdk56638.hex
+
+if !"expr $pcidev + 0 == 0xb639" "local ledcode '\
+ 02 1E 28 67 2C 02 26 28 67 2C 02 2A 28 67 2C 02 \
+ 32 28 67 2C 02 1A 28 67 2C 02 1B 28 67 2C 02 1C \
+ 28 67 2C 02 1D 28 67 2C 86 E0 3A 08 67 47 75 4E \
+ 28 32 00 32 01 B7 97 75 52 16 E0 CA 05 74 52 77 \
+ 4E 67 47 75 4E 77 52 12 A0 F8 15 1A 00 57 32 0F \
+ 87 57 32 0E 87 57 00 00 00 00 00 00 00 00 00 00'" #sdk56639.hex
+
+if !"expr $pcidev + 0 == 0xb334" "local ledcode '\
+ 02 02 28 60 E1 67 3D 67 1C 06 E1 80 D2 1E 74 02 \
+ 12 E0 85 05 D2 05 71 1A 52 00 3A 38 32 00 32 01 \
+ B7 97 75 2B 12 E2 FE E1 02 0A 50 12 E2 FE E1 95 \
+ 75 35 85 77 4C 16 E0 DA 02 71 50 77 4C 06 E1 67 \
+ 45 75 4C 77 50 12 A0 F8 15 1A 00 57 32 0F 87 57 \
+ 32 0E 87 57 00 00 00 00 00 00 00 00 00 00 00 00'" #sdk56334.hex
+
+if $?apollo "local ledcode '\
+ 02 1E 28 60 E0 67 58 67 73 06 E0 80 28 60 E0 67 \
+ 73 67 58 06 E0 80 D2 36 74 02 02 1A 28 60 E0 67 \
+ 9B 75 29 67 B0 67 58 77 31 32 0E 87 32 08 87 67 \
+ A2 06 E0 80 D2 1E 74 1C 12 E2 85 05 D2 0F 71 42 \
+ 52 00 12 E1 85 05 D2 1F 71 4C 52 00 12 E3 85 05 \
+ D2 05 71 56 52 00 3A 70 32 00 97 75 64 32 01 97 \
+ 71 6B 77 B0 32 01 97 71 A9 77 A2 16 E3 DA 02 71 \
+ A9 77 B0 32 05 97 75 83 32 02 97 71 A2 06 E1 D2 \
+ 01 71 A2 06 E0 67 9B 75 A2 32 03 97 71 B0 32 04 \
+ 97 75 A9 06 E2 D2 07 71 A9 77 B0 12 A0 F8 15 1A \
+ 00 57 32 0E 87 32 0E 87 57 32 0E 87 32 0F 87 57 \
+ 32 0F 87 32 0E 87 57 00 00 00 00 00 00 00 00 00'" #sdk56524.hex
+
+if $?tomahawk "local ledcode '\
+ 02 00 28 60 E1 67 25 67 14 06 E1 80 D2 40 74 02 \
+ 86 E0 3A FC 28 32 00 32 01 B7 97 75 37 16 E0 CA \
+ 05 74 3E 77 37 67 2B 75 37 77 45 12 A0 F8 15 1A \
+ 00 57 28 32 07 97 57 32 0E 87 32 0E 87 57 32 0F \
+ 87 32 0E 87 57 32 0E 87 32 0F 87 57 00 00 00 00'" #sdk56960.hex
+
+if $?trident2plus "local ledcode '\
+ 02 01 28 60 E1 67 31 67 20 06 E1 80 D2 31 74 02 \
+ 86 E0 3A C0 67 37 75 1C 67 51 77 20 67 43 77 43 \
+ 28 32 00 32 01 B7 97 75 43 16 E0 CA 05 74 4A 77 \
+ 43 67 37 75 43 77 51 12 A0 F8 15 1A 00 57 28 32 \
+ 07 97 57 32 0E 87 32 0E 87 57 32 0F 87 32 0E 87 \
+ 57 32 0E 87 32 0F 87 57 00 00 00 00 00 00 00 00'" #sdk56860.hex
+
+if $?apache "local ledcode '\
+ 02 00 67 24 67 0F 80 D2 24 74 02 86 E0 3A F8 67 \
+ 34 75 16 77 1D 57 67 3C 75 62 77 44 57 67 3C 75 \
+ 4E 77 58 57 67 2C 75 62 77 70 07 57 07 12 A0 F8 \
+ 15 1A 00 57 07 12 A0 F8 15 1A 04 57 07 12 A0 F8 \
+ 15 1A 05 57 16 E0 CA 1E 74 69 77 62 07 57 16 E0 \
+ CA 1E 74 70 77 62 07 57 16 E0 CA 1E 74 69 77 70 \
+ 07 57 32 0E 87 32 0E 87 57 32 0F 87 32 0E 87 57 \
+ 32 0E 87 32 0F 87 57 00 00 00 00 00 00 00 00 00'" #sdk56560.hex
+
+if $?generic8led "local ledcode '\
+ 06 E1 D2 40 71 11 E0 60 E1 16 E3 DA 01 71 15 60 \
+ E3 67 5D 75 2B 12 01 61 E3 67 71 28 67 32 86 E0 \
+ 16 E2 81 61 E2 DA 1E 75 2B 3A 08 E9 61 E2 86 E1 \
+ 77 00 67 5D 75 38 77 3C 67 64 77 64 67 41 67 4F \
+ 57 28 32 01 97 75 64 16 E0 CA 05 74 68 77 64 28 \
+ 32 00 97 75 64 16 E0 CA 05 74 68 77 64 12 A0 F8 \
+ 15 1A 00 57 32 0F 87 57 32 0E 87 57 09 75 64 77 \
+ 68 12 05 67 6C 12 04 67 6C 12 03 67 6C 12 02 67 \
+ 6C 12 01 67 6C 12 00 67 6C 57 00 00 00 00 00 00'" #generic8led.hex
+
+# Download LED code into LED processor and enable (if applicable).
+
+if $?feature_led_proc && $?ledcode && !$?simulator \
+	"led prog $ledcode; \
+	 led auto on; led start"
+
+# Setup Greyhound LED processor
+if $?greyhound \
+    "rcload gh_ledup.soc"
+
+# Setup Hurricane3 LED processor
+if $?hurricane3 \
+    "rcload hr3_led.soc"
+
+# Setup Tomahawk LED processor
+if $?tomahawk && !$?simulator \
+    "led 1 prog $ledcode; \
+     led 1 auto on; led 1 start; \
+     led 2 prog $ledcode; \
+     led 2 auto on; led 2 start"
+
+# If loading multiple rc.soc, upon loading the last unit, restart
+# all LED processors so any common blinking is in sync.
+
+if !"expr $?feature_led_proc && !$?simulator && $unit == $units - 1" \
+	"*:led stop; *:led start"
+
+# Run counter DMA task 4 times per second to achieve better
+# ctr_xaui_activity.
+if $?bradley_any \
+        "ctr interval=250000"
+
+# Initialize Hercules UC modid 0 entry to point to the CPU
+if $?herc_any \
+	"w uc 0 1 1"
+
+# Additional configuration for 48-port in Stacking mode.
+# On the 48-port platform, rc.soc is run twice; once on unit 0 and
+# then once on unit 1.  The turbo port on unit N is geN.
+# All turbo port traffic must be tagged; see vlan add below.
+# See $SDK/doc/48-port.txt for more information including how
+# to configure IPG values for line rate operation.
+
+if $?p48 && $?unit0 \
+	"local turbo_port 0; local my_modid 1;"
+
+if $?p48 && $?unit1 \
+	"local turbo_port 1; local my_modid 2;"
+
+if $?p48 \
+	"m config st_is_mirr=0 st_module=1 st_mcnt=1 st_simplex=0 st_link=0; \
+	 m config.g$turbo_port st_link=1; \
+	 m gmacc2.ge$turbo_port ipgt=8 mclkfq=1; \
+	 m fe_maxf maxfr=1560; \
+	 m maxfr maxfr=1568; \
+	 m config2 my_modid=$my_modid; \
+	 port ge$turbo_port speed=2500; \
+	 vlan add 1 pbm=ge$turbo_port ubm=none"
+
+if !$?no_bcm && $?drac_any \
+   "m modport_7_0 port_for_mod1=0xc"
+if !$?no_bcm && $?lynx_any \
+   "m modport_7_0 port_for_mod1=0x1"
+if !$?no_bcm && $?tucana \
+   "stkmode modid=0;"
+if !$?no_bcm && $?tucana && !$?magnum && !$?tucana_nohg \
+   "m modport_7_0 port_for_mod2=0x38; \
+    m imodport_7_0 port_for_mod0=0 port_for_mod1=0 port_for_mod2=0x38; \
+    stkmode modid=0"
+if !$?no_bcm && $?xgs_switch && !$?rcpu_only\
+   "stkmode modid=0; \
+    s CMIC_COS_CTRL_RX CH0_COS_BMP=0,CH1_COS_BMP=0xff, \
+        CH2_COS_BMP=0,CH3_COS_BMP=0"
+
+# Back-to-back Draco setup.
+
+# Draco chips must run at 127MHz. Some older versions
+# are not set to this frequency.
+
+if $?draco_stk && $?unit0 \
+    "i2c probe quiet; bb clock Ref125 127"
+
+# Applies to SDK Baseboard with either internal or external Higigs,
+# as well as the Galahad reference design.
+
+if $?draco_b2b && $?unit0 \
+    "stkmode modid=0; \
+     m modport_7_0 port_for_mod0=0 port_for_mod1=12; \
+     m imodport_7_0 port_for_mod0=0 port_for_mod1=12"
+
+if !$?simulator && $?draco_b2b && $?unit0 \
+     "i2c probe quiet; bb clock Ref125 127"
+
+if $?draco_b2b && $?unit1 \
+    "stkmode modid=1; \
+     m modport_7_0 port_for_mod0=12 port_for_mod1=0; \
+     m imodport_7_0 port_for_mod0=12 port_for_mod1=0"
+
+# Merlin, White Knight, Black Knight setup.
+#	Draco unit 1 is on Herc port 8
+#	Draco unit 2 is on Herc port 1
+
+if $?draco_herc4 && $?unit0 \
+    "w uc.hpic7 0 1 0x0; \
+     w uc.hpic7 1 1 0x2; \
+     w uc.hpic0 0 1 0x100; \
+     w uc.hpic0 1 1 0x0"
+
+if !$?simulator && $?draco_herc4 && $?unit0 \
+     "i2c probe quiet; bb clock Ref125 127"
+
+if $?draco_herc4 && $?unit1 \
+    "stkmode modid=0; \
+     m modport_7_0 port_for_mod0=0 port_for_mod1=12; \
+     m imodport_7_0 port_for_mod0=0 port_for_mod1=12"
+
+if $?draco_herc4 && $?unit2 \
+    "stkmode modid=1; \
+     m modport_7_0 port_for_mod0=12 port_for_mod1=0; \
+     m imodport_7_0 port_for_mod0=12 port_for_mod1=0"
+
+# Lancelot setup
+# (enabled by adding the property "lancelot=1")
+# Notes:
+#	Draco unit 1 is on Herc port 7
+#	Draco unit 2 is on Herc port 8
+#	Draco unit 3 is on Herc port 1
+#	Draco unit 4 is on Herc port 2
+
+if $?lancelot && $?unit0 \
+    "w uc.hpic6 0 1 0x0; \
+     w uc.hpic6 1 1 0x100; \
+     w uc.hpic6 2 1 0x2; \
+     w uc.hpic6 3 1 0x4; \
+     w uc.hpic7 0 1 0x80; \
+     w uc.hpic7 1 1 0x0; \
+     w uc.hpic7 2 1 0x2; \
+     w uc.hpic7 3 1 0x4; \
+     w uc.hpic0 0 1 0x80; \
+     w uc.hpic0 1 1 0x100; \
+     w uc.hpic0 2 1 0x0; \
+     w uc.hpic0 3 1 0x4; \
+     w uc.hpic1 0 1 0x80; \
+     w uc.hpic1 1 1 0x100; \
+     w uc.hpic1 2 1 0x2; \
+     w uc.hpic1 3 1 0x0"
+
+if !$?simulator && $?lancelot && $?unit0 \
+     "i2c probe quiet; bb clock Draco_Core 127"
+
+if $?lancelot && $?unit1 \
+    "stkmode modid=0; \
+     m modport_7_0 port_for_mod0=0 port_for_mod1=12 \
+     port_for_mod2=12 port_for_mod3=12; \
+     m imodport_7_0 port_for_mod0=0 port_for_mod1=12 \
+     port_for_mod2=12 port_for_mod3=12"
+
+if $?lancelot && $?unit2 \
+    "stkmode modid=1; \
+     m modport_7_0 port_for_mod0=12 port_for_mod1=0 \
+     port_for_mod2=12 port_for_mod3=12; \
+     m imodport_7_0 port_for_mod0=12 port_for_mod1=0 \
+     port_for_mod2=12 port_for_mod3=12"
+
+if $?lancelot && $?unit3 \
+    "stkmode modid=2; \
+     m modport_7_0 port_for_mod0=12 port_for_mod1=12 \
+     port_for_mod2=0 port_for_mod3=12; \
+     m imodport_7_0 port_for_mod0=12 port_for_mod1=12 \
+     port_for_mod2=0 port_for_mod3=12"
+
+if $?lancelot && $?unit4 \
+    "stkmode modid=3; \
+     m modport_7_0 port_for_mod0=12 port_for_mod1=12 \
+     port_for_mod2=12 port_for_mod3=0; \
+     m imodport_7_0 port_for_mod0=12 port_for_mod1=12 \
+     port_for_mod2=12 port_for_mod3=0"
+
+# Lynx SDK (TwoLynx) setup
+# (enabled by adding the property "twolynx=1")
+
+if $?twolynx && $?unit0 \
+    "stkmode modid=0; \
+     m modport_7_0 port_for_mod0=0 port_for_mod1=1; \
+     m imodport_7_0 port_for_mod0=0 port_for_mod1=1; \
+     "
+
+if $?twolynx && $?unit1 \
+    "stkmode modid=1; \
+     m modport_7_0 port_for_mod0=1 port_for_mod1=0; \
+     m imodport_7_0 port_for_mod0=1 port_for_mod1=0; \
+     "
+# HercuLynx setup
+# (enabled by adding the property "herculynx=1")
+# Notes:
+#	Lynx unit 1 is on Herc port 1
+#	Lynx unit 2 is on Herc port 2
+#	Lynx unit 3 is on Herc port 3
+#	Lynx unit 4 is on Herc port 4
+#	Lynx unit 5 is on Herc port 5
+#	Lynx unit 6 is on Herc port 6
+#	Lynx unit 7 is on Herc port 7
+#	Lynx unit 8 is on Herc port 8
+
+if $?herculynx && $?unit0 \
+    " \
+     w uc.hpic0 0 1 0x002; \
+     w uc.hpic0 1 1 0x004; \
+     w uc.hpic0 2 1 0x008; \
+     w uc.hpic0 3 1 0x010; \
+     w uc.hpic0 4 1 0x020; \
+     w uc.hpic0 5 1 0x040; \
+     w uc.hpic0 6 1 0x080; \
+     w uc.hpic0 7 1 0x100; \
+                         ; \
+     w uc.hpic1 0 1 0x002; \
+     w uc.hpic1 1 1 0x004; \
+     w uc.hpic1 2 1 0x008; \
+     w uc.hpic1 3 1 0x010; \
+     w uc.hpic1 4 1 0x020; \
+     w uc.hpic1 5 1 0x040; \
+     w uc.hpic1 6 1 0x080; \
+     w uc.hpic1 7 1 0x100; \
+                         ; \
+     w uc.hpic2 0 1 0x002; \
+     w uc.hpic2 1 1 0x004; \
+     w uc.hpic2 2 1 0x008; \
+     w uc.hpic2 3 1 0x010; \
+     w uc.hpic2 4 1 0x020; \
+     w uc.hpic2 5 1 0x040; \
+     w uc.hpic2 6 1 0x080; \
+     w uc.hpic2 7 1 0x100; \
+                         ; \
+     w uc.hpic3 0 1 0x002; \
+     w uc.hpic3 1 1 0x004; \
+     w uc.hpic3 2 1 0x008; \
+     w uc.hpic3 3 1 0x010; \
+     w uc.hpic3 4 1 0x020; \
+     w uc.hpic3 5 1 0x040; \
+     w uc.hpic3 6 1 0x080; \
+     w uc.hpic3 7 1 0x100; \
+                         ; \
+     w uc.hpic4 0 1 0x002; \
+     w uc.hpic4 1 1 0x004; \
+     w uc.hpic4 2 1 0x008; \
+     w uc.hpic4 3 1 0x010; \
+     w uc.hpic4 4 1 0x020; \
+     w uc.hpic4 5 1 0x040; \
+     w uc.hpic4 6 1 0x080; \
+     w uc.hpic4 7 1 0x100; \
+                         ; \
+     w uc.hpic5 0 1 0x002; \
+     w uc.hpic5 1 1 0x004; \
+     w uc.hpic5 2 1 0x008; \
+     w uc.hpic5 3 1 0x010; \
+     w uc.hpic5 4 1 0x020; \
+     w uc.hpic5 5 1 0x040; \
+     w uc.hpic5 6 1 0x080; \
+     w uc.hpic5 7 1 0x100; \
+                         ; \
+     w uc.hpic6 0 1 0x002; \
+     w uc.hpic6 1 1 0x004; \
+     w uc.hpic6 2 1 0x008; \
+     w uc.hpic6 3 1 0x010; \
+     w uc.hpic6 4 1 0x020; \
+     w uc.hpic6 5 1 0x040; \
+     w uc.hpic6 6 1 0x080; \
+     w uc.hpic6 7 1 0x100; \
+                         ; \
+     w uc.hpic7 0 1 0x002; \
+     w uc.hpic7 1 1 0x004; \
+     w uc.hpic7 2 1 0x008; \
+     w uc.hpic7 3 1 0x010; \
+     w uc.hpic7 4 1 0x020; \
+     w uc.hpic7 5 1 0x040; \
+     w uc.hpic7 6 1 0x080; \
+     w uc.hpic7 7 1 0x100; \
+                         ; \
+     "
+
+if $?herculynx && $?lynx_any \
+     "m modport_7_0 \
+     port_for_mod0=1 port_for_mod1=1 \
+     port_for_mod2=1 port_for_mod3=1 \
+     port_for_mod4=1 port_for_mod5=1 \
+     port_for_mod6=1 port_for_mod7=1; \
+     m imodport_7_0 \
+     port_for_mod0=1 port_for_mod1=1 \
+     port_for_mod2=1 port_for_mod3=1 \
+     port_for_mod4=1 port_for_mod5=1 \
+     port_for_mod6=1 port_for_mod7=1; \
+     "
+
+if $?herculynx && $?unit1 \
+    "stkmode modid=0"
+
+if $?herculynx && $?unit2 \
+    "stkmode modid=1"
+
+if $?herculynx && $?unit3 \
+    "stkmode modid=2"
+
+if $?herculynx && $?unit4 \
+    "stkmode modid=3"
+
+if $?herculynx && $?unit5 \
+    "stkmode modid=4"
+
+if $?herculynx && $?unit6 \
+    "stkmode modid=5"
+
+if $?herculynx && $?unit7 \
+    "stkmode modid=6"
+
+if $?herculynx && $?unit8 \
+    "stkmode modid=7"
+
+# LynxaLot setup
+# (enabled by adding the property "lynxalot=1")
+# Notes:
+#	Lynx unit 0 is on Herc port 3 (hg2/hpic2) (mod 0)
+#	Lynx unit 1 is on Herc port 4 (hg3/hpic3) (mod 1)
+#	Higig conn 0 is on Herc port 5 (hg4/hpic4)
+#	Higig conn 1 is on Herc port 6 (hg5/hpic5)
+#	Draco unit 3 is on Herc port 7 (hg6/hpic6) (mod 2)
+#	Draco unit 4 is on Herc port 8 (hg7/hpic7) (mod 3)
+#	Draco unit 5 is on Herc port 1 (hg0/hpic0) (mod 4)
+#	Draco unit 6 is on Herc port 2 (hg1/hpic1) (mod 5)
+
+if $?lynxalot && $?unit2 \
+    " \
+     w uc.hpic0 0 1 0x008; \
+     w uc.hpic0 1 1 0x010; \
+     w uc.hpic0 2 1 0x080; \
+     w uc.hpic0 3 1 0x100; \
+     w uc.hpic0 4 1 0x002; \
+     w uc.hpic0 5 1 0x004; \
+                         ; \
+     w uc.hpic1 0 1 0x008; \
+     w uc.hpic1 1 1 0x010; \
+     w uc.hpic1 2 1 0x080; \
+     w uc.hpic1 3 1 0x100; \
+     w uc.hpic1 4 1 0x002; \
+     w uc.hpic1 5 1 0x004; \
+                         ; \
+     w uc.hpic2 0 1 0x008; \
+     w uc.hpic2 1 1 0x010; \
+     w uc.hpic2 2 1 0x080; \
+     w uc.hpic2 3 1 0x100; \
+     w uc.hpic2 4 1 0x002; \
+     w uc.hpic2 5 1 0x004; \
+                         ; \
+     w uc.hpic3 0 1 0x008; \
+     w uc.hpic3 1 1 0x010; \
+     w uc.hpic3 2 1 0x080; \
+     w uc.hpic3 3 1 0x100; \
+     w uc.hpic3 4 1 0x002; \
+     w uc.hpic3 5 1 0x004; \
+                         ; \
+     w uc.hpic6 0 1 0x008; \
+     w uc.hpic6 1 1 0x010; \
+     w uc.hpic6 2 1 0x080; \
+     w uc.hpic6 3 1 0x100; \
+     w uc.hpic6 4 1 0x002; \
+     w uc.hpic6 5 1 0x004; \
+                         ; \
+     w uc.hpic7 0 1 0x008; \
+     w uc.hpic7 1 1 0x010; \
+     w uc.hpic7 2 1 0x080; \
+     w uc.hpic7 3 1 0x100; \
+     w uc.hpic7 4 1 0x002; \
+     w uc.hpic7 5 1 0x004; \
+                         ; \
+     "
+
+if $?lynxalot && $?lynx_any \
+     "m modport_7_0 \
+     port_for_mod0=1 port_for_mod1=1 \
+     port_for_mod2=1 port_for_mod3=1 \
+     port_for_mod4=1 port_for_mod5=1 \
+     port_for_mod6=1 port_for_mod7=1; \
+     m imodport_7_0 \
+     port_for_mod0=1 port_for_mod1=1 \
+     port_for_mod2=1 port_for_mod3=1 \
+     port_for_mod4=1 port_for_mod5=1 \
+     port_for_mod6=1 port_for_mod7=1; \
+     "
+
+if $?lynxalot && $?drac_any \
+    "m modport_7_0 port_for_mod0=12 port_for_mod1=12 \
+     port_for_mod2=12 port_for_mod3=12 \
+     port_for_mod4=12 port_for_mod5=12 \
+     port_for_mod6=12 port_for_mod7=12; \
+     m imodport_7_0 port_for_mod0=12 port_for_mod1=12 \
+     port_for_mod2=12 port_for_mod3=12 \
+     port_for_mod4=12 port_for_mod5=12 \
+     port_for_mod6=12 port_for_mod7=12; \
+     "
+
+if $?lynxalot && $?unit0 \
+    "stkmode modid=0"
+     
+if $?lynxalot && $?unit1 \
+    "stkmode modid=1"
+
+if $?lynxalot && $?unit3 \
+    "stkmode modid=2"
+
+if $?lynxalot && $?unit4 \
+    "stkmode modid=3"
+
+if $?lynxalot && $?unit5 \
+    "stkmode modid=4"
+
+if $?lynxalot && $?unit6 \
+    "stkmode modid=5"
+
+# guenevere setup
+# (enabled by adding the property "guenevere=1")
+# Notes:
+#       hgX mapping based on pbmp_valid.0=0x1b7
+#	Draco unit 1 is on Herc port 1 (hg0/hpic0) (mod 0)
+#	Draco unit 2 is on Herc port 2 (hg1/hpic1) (mod 1)
+#	Lynx unit 3 is on Herc port 8 (hg5/hpic7) (mod 2)
+#	Lynx unit 4 is on Herc port 7 (hg4/hpic6) (mod 3)
+#	Higig conn 0 is on Herc port 4 (hg2/hpic3)
+#	Higig conn 1 is on Herc port 5 (hg3/hpic4)
+#       Herc port 3 - Unused (hpic2)
+#       Herc port 6 - Unused (hpic5)
+if $?guenevere && $?unit0 \
+    " \
+     w uc.hpic0 0 1 0x002; \
+     w uc.hpic0 1 1 0x004; \
+     w uc.hpic0 2 1 0x100; \
+     w uc.hpic0 3 1 0x080; \
+                         ; \
+     w uc.hpic1 0 1 0x002; \
+     w uc.hpic1 1 1 0x004; \
+     w uc.hpic1 2 1 0x100; \
+     w uc.hpic1 3 1 0x080; \
+                         ; \
+     w uc.hpic7 0 1 0x002; \
+     w uc.hpic7 1 1 0x004; \
+     w uc.hpic7 2 1 0x100; \
+     w uc.hpic7 3 1 0x080; \
+                         ; \
+     w uc.hpic6 0 1 0x002; \
+     w uc.hpic6 1 1 0x004; \
+     w uc.hpic6 2 1 0x100; \
+     w uc.hpic6 3 1 0x080; \
+                         ; \
+     "
+
+if $?guenevere && $?lynx_any \
+     "m modport_7_0 \
+     port_for_mod0=1 port_for_mod1=1 \
+     port_for_mod2=1 port_for_mod3=1 \
+     port_for_mod4=1 port_for_mod5=1 \
+     port_for_mod6=1 port_for_mod7=1; \
+     m imodport_7_0 \
+     port_for_mod0=1 port_for_mod1=1 \
+     port_for_mod2=1 port_for_mod3=1 \
+     port_for_mod4=1 port_for_mod5=1 \
+     port_for_mod6=1 port_for_mod7=1; \
+     "
+
+if $?guenevere && $?drac_any \
+    "m modport_7_0 port_for_mod0=12 port_for_mod1=12 \
+     port_for_mod2=12 port_for_mod3=12 \
+     port_for_mod4=12 port_for_mod5=12 \
+     port_for_mod6=12 port_for_mod7=12; \
+     m imodport_7_0 port_for_mod0=12 port_for_mod1=12 \
+     port_for_mod2=12 port_for_mod3=12 \
+     port_for_mod4=12 port_for_mod5=12 \
+     port_for_mod6=12 port_for_mod7=12; \
+     "
+
+if $?guenevere && $?unit1 \
+    "stkmode modid=0"
+     
+if $?guenevere && $?unit2 \
+    "stkmode modid=1"
+
+if $?guenevere && $?unit3 \
+    "stkmode modid=2"
+
+if $?guenevere && $?unit4 \
+    "stkmode modid=3"
+     
+# felix48 setup
+# (enabled by adding the property "felix48=1")
+# Notes:
+#       BCM56102 unit-0 higig port (port 26) is connected
+#       to BCM56102 Unit-1 higig port (port 26)
+#
+
+if $?felix48 && $?unit0 \
+    "stkmode modid=0 ; \
+     m IEGR_PORT MY_MODID=0; \
+     m XPORT_CONFIG MY_MODID=0; \
+     w MODPORT_MAP 1 1 HIGIG_PORT_BITMAP=0x4 ; \
+     "
+
+if $?felix48 && $?unit1 \
+    "stkmode modid=1 ; \
+     m IEGR_PORT MY_MODID=1; \
+     m XPORT_CONFIG MY_MODID=1; \
+     w MODPORT_MAP 0 1 HIGIG_PORT_BITMAP=0x4 ; \
+     "
+# fbpoe setup
+# (enabled by adding the property "fbpoe=1")
+# Notes:
+#       BCM56504 unit-0 higig port (port 27,28) is connected
+#       to BCM56504 Unit-1 higig port (port 27,28)
+#
+
+if $?unit0 && $?firebolt_any && $?fbpoe     \
+  "stkmode modid=0;           \
+   w modport_map 1 1 HIGIG_PORT_BITMAP=0x4; \
+   m HIGIG_TRUNK_GROUP HIGIG_TRUNK_RTAG1=3 \
+                       HIGIG_TRUNK_ID1_PORT0=2 \
+                       HIGIG_TRUNK_ID1_PORT1=3 \
+                       HIGIG_TRUNK_ID1_PORT2=2 \
+                       HIGIG_TRUNK_ID1_PORT3=3; \
+   m HIGIG_TRUNK_CONTROL HIGIG_TRUNK_ID2=1 \
+                         HIGIG_TRUNK2=1 \
+                         HIGIG_TRUNK_ID3=1 \
+                         HIGIG_TRUNK3=1 \
+                         HIGIG_TRUNK_BITMAP1=0xc \
+                         ACTIVE_PORT_BITMAP=0xf"
+
+if $?unit1 && $?firebolt_any && $?fbpoe \
+  "stkmode modid=1; \
+   w modport_map 0 1 HIGIG_PORT_BITMAP=0x4; \
+   m HIGIG_TRUNK_GROUP HIGIG_TRUNK_RTAG1=3 \
+                       HIGIG_TRUNK_ID1_PORT0=2 \
+                       HIGIG_TRUNK_ID1_PORT1=3 \
+                       HIGIG_TRUNK_ID1_PORT2=2 \
+                       HIGIG_TRUNK_ID1_PORT3=3; \
+   m HIGIG_TRUNK_CONTROL HIGIG_TRUNK_ID2=1 \
+                         HIGIG_TRUNK2=1 \
+                         HIGIG_TRUNK_ID3=1 \
+                         HIGIG_TRUNK3=1 \
+                         HIGIG_TRUNK_BITMAP1=0xc \
+                         ACTIVE_PORT_BITMAP=0xf"
+
+# Dual Raptor/Raven boards
+if $?raven_eb_48p || $?rap24_ref \
+    "local rcpu_system 1"
+if $?unit0 && $?rcpu_system \
+   "stkmode modid=0"
+if $?unit1 && $?rcpu_system \
+   "stkmode modid=1"
+
+# LM fb48 platform setup
+# (enabled by adding the property "lm48p=1")
+#
+if $?unit0 && $?firebolt_any && $?lm48p || $?lm48p_D \
+   "stkmode modid=0"
+
+if $?unit1 && $?firebolt_any && $?lm48p || $?lm48p_D \
+   "stkmode modid=1"
+
+# Set Firebolt POE power level 170(total) - 110(switch) = 60
+if $?fbpoe \
+        "local poepower 60"
+
+# Set Draco15 POE power level 170(total) - 80(switch) = 90
+if $?drac15\
+        "local poepower 90"
+
+# Hurricane3 BCM956160R setup
+# Notes:
+#       BCM56160 unit-0 higig port (port 29,30) is connected
+#       to BCM56160 Unit-1 higig port (port 26,27)
+#
+
+if $?bcm956160r && $?unit0  \
+  "stkmode modid=0; \
+   w modport_map 1 1 HIGIG_PORT_BITMAP=0x60000000; \
+   trunk add id=128 r=3 pbm=hg0-hg1"
+
+if $?bcm956160r && $?unit1  \
+  "stkmode modid=1; \
+   w modport_map 0 1 HIGIG_PORT_BITMAP=0xc000000; \
+   trunk add id=128 r=3 pbm=hg0-hg1"
+
+# if enable_poe is set, then enable the POE processor for
+# either Firebolt or Draco15 platform
+if $?unit0 && $?enable_poe && $?fbpoe || $?drac15 \
+        "$echo rc: Enabling POE ...; \
+         poesel reset; \
+         i2c probe quiet; \
+         xpoe verbose off; \
+         xpoe power $poepower; \
+         xpoe verbose on; \
+         poesel enable"
+
+# mark this unit so that subsequent rc runs are quiet
+setenv rc$unit 1
+
+if $?macsec '\
+    macsec sync; \
+    $echo "rc: MACSEC CLI Enabled"'
+
+# cache a copy of rc.soc in memory
+rccache addq rc.soc
+
+# setup chassis if requested
+if !"expr $?autochassis2 && $unit == $units - 1" \
+    "setenv chassis2_no_rc 1; \
+     rcload c2switch.soc; \
+     setenv chassis2_no_rc; \
+    "
+
+# start stacking if requested
+if !"expr $?autostack && $unit == $units - 1" \
+	"rcload stk.soc"
+
+if !"expr $?aedev + 0" && !"expr $unit == $units - 1" \
+       "aedev init"
+
+# hurricane 48p FE platform LED setup for 56146_A0 and 56147_A0 board
+# (enabled by adding the property "fe_hu_48p=1")
+#
+if $?fe_hu_48p && $?BCM56146 || $?BCM56147 \
+    "phy fe0 0x1f 0x008b; \
+     phy fe0 0x1a 0x3f09;\
+     phy fe8 0x1f 0x008b; \
+     phy fe8 0x1a 0x3f09; \
+     phy fe16 0x1f 0x008b; \
+     phy fe16 0x1a 0x3f09"
+
+# enable LED matrix mode for PHY54292 on BCM953411K/R
+if $?bcm953411 \
+    "rcload gh_bcm953411x.soc"
diff --git a/bal_release/3rdparty/bcm-sdk/rc/arad/readme.txt b/bal_release/3rdparty/bcm-sdk/rc/arad/readme.txt
new file mode 100644
index 0000000..84e5089
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/rc/arad/readme.txt
@@ -0,0 +1,18 @@
+This directory contains bcm files that are needed in the Pioneer svk file system `to bring up 
+the Arad BCM Diag Shell.
+User should also copy the bcm.user linux-kernel-bde.ko and linux-user-bde.ko
+from the Jenkins BAL bcm-sdk build (for PPC) or private bcm_sdk build to the same Pioneer svk file system.
+!!!
+   Do not forget to change the IP in rpc.soc to point it to the BAL_CORE
+!!!
+
+The currently supported bcm_sdk version is 6.5.4
+.
+|-- config.bcm
+|-- arad.soc
+|-- arad_dram.soc
+|-- rc.soc
+`-- rpc.soc
+ 
+  
+
diff --git a/bal_release/3rdparty/bcm-sdk/rc/arad/rpc.soc b/bal_release/3rdparty/bcm-sdk/rc/arad/rpc.soc
new file mode 100644
index 0000000..07e45b4
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/rc/arad/rpc.soc
@@ -0,0 +1,22 @@
+cpudb newdb
+
+cpudb add key=0x1
+
+cpudb add key=0x2 local=t
+
+cts atp trans sock server start
+
+cts atp cos=0 vlan=1
+
+cte reg mode=atp
+
+cts atp trans sock inst dk=0x1 dip=10.25.8.74
+
+rpc nonexthop
+
+rpc start
+
+dune "sand trap_target 10.25.8.74:50001"
+
+dune "sand trap_receive 10.25.8.74:50002"
+
diff --git a/bal_release/3rdparty/bcm-sdk/rc/bal/bal_config.ini b/bal_release/3rdparty/bcm-sdk/rc/bal/bal_config.ini
new file mode 100644
index 0000000..bc9c0c3
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/rc/bal/bal_config.ini
@@ -0,0 +1,16 @@
+# Maple IWF mode "direct" or "per_flow"
+iwf_mode=direct
+# System NNI/PON mapping table
+# 	0: KT2
+# 	1: SVK3
+# 	2: ARAD (experiment)
+# 	3: Qumran (experiment)
+intf_maptable=3
+# UDP port that receive the switch CPU_TRAP packets
+trap_udp_port=50001
+# Switch QOS scheduler mode
+#	0: SP
+#	1: WFQ
+ds_sched_mode=1
+# UDP port on switch that receive packet_out packets
+pkt_send_svr_listen_port=50002
diff --git a/bal_release/3rdparty/bcm-sdk/rc/bal/config.bcm b/bal_release/3rdparty/bcm-sdk/rc/bal/config.bcm
new file mode 100644
index 0000000..239ee72
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/rc/bal/config.bcm
@@ -0,0 +1,1713 @@
+#
+# $Id: config-sand.bcm,v 1.140 2013/09/22 14:29:47 tomerma Exp $
+#
+# $Copyright: (c) 2011 Broadcom Corporation
+# All Rights Reserved.$
+
+#########################################
+##cfg for BCM88640 (PetraB) and BCM88650 (Arad)
+#########################################
+
+## temporary suppressing unknown soc properties warnings - till adding them unknown to property.h/propgen
+## (need to be the first soc property in the file).
+suppress_unknown_prop_warnings=1
+
+## Multi device system (Negev): 2 devices, fabric mode is FE, mod id is slot id
+## (Top line card is 0, button is 1).
+#diag_chassis=1
+
+## Disable diag init application. Should be used if one wants to run his own
+## application instead of the diag init example
+#diag_disable=1
+
+## Skip cosq configuration in diag_init
+#diag_cosq_disable=1
+
+#########################################
+##cfg for BCM88650 - Arad
+#########################################
+
+### Device configuration ###
+
+## Activate Emulation partial init. Values: 0 - Normal, 1 - Emulation .Default: 0x0.
+diag_emulator_partial_init.BCM88650=0
+
+## General
+# Set the FAP Device mode
+# Options: PP / TM / TDM_OPTIMIZED / TDM_STANDARD
+fap_device_mode.BCM88650=PP
+
+## Credit worth size (Bytes)
+credit_size.BCM88650=1024
+
+## Clock configurations
+# Core clock speed (MHz). Default: 600 MHz
+core_clock_speed_khz.BCM88650=600000
+# System reference clock (MHz). Default: 600 MHz
+system_ref_core_clock_khz.BCM88650=600000
+
+### Network Interface configuration ###
+## Use of the ucode_port_<Local-Port-Id>=<Interface-type>[<Interface-Id>][.<Channel-Id>]
+## Local port range: 0 - 255.
+## Interface types: XAUI/RXAUI/SGMII/ILKN/10GBase-R/XLGE/CGE/CPU
+
+# Map bcm local port to CPU[.channel] interfaces
+ucode_port_180.BCM88650=CPU.0
+
+pon_application_support_enabled_0.BCM88650=TRUE
+pon_application_support_enabled_1.BCM88650=TRUE
+pon_application_support_enabled_2.BCM88650=TRUE
+pon_application_support_enabled_3.BCM88650=TRUE
+#pon_application_support_enabled_4.BCM88650=TRUE
+#pon_application_support_enabled_5.BCM88650=TRUE
+#pon_application_support_enabled_6.BCM88650=TRUE
+#pon_application_support_enabled_7.BCM88650=TRUE
+
+vlan_match_criteria_mode=PON_PCP_ETHERTYPE
+
+#Firmware mode:
+# 0=DEFAULT
+# 1=SFP_OPT_SR4     - optical short range
+# 2=SFP_DAC         - direct attach copper
+# 3=XLAUI           - 40G XLAUI mode
+# 4=FORCE_OSDFE     - force over sample digital feedback equalization
+# 5=FORCE_BRDFE     - force baud rate digital feedback equalization
+# 6=SW_CL72         - software cl72 with AN on
+# 7=CL72_WITHOUT_AN - cl72 without AN
+#For Negev2 chassis enable DFE is recommended
+
+serdes_if_type=1024
+
+#serdes_firmware_mode.BCM88650=3
+serdes_firmware_mode_il.BCM88650=4
+serdes_firmware_mode_sfi.BCM88650=0
+
+#
+# Serdes firmware mode for Channelized PON interfaces
+#
+#serdes_firmware_mode_xe0.BCM88650=0
+#serdes_firmware_mode_xe1.BCM88650=0
+#serdes_firmware_mode_xe2.BCM88650=0
+#serdes_firmware_mode_xe3.BCM88650=0
+#serdes_firmware_mode_xe4.BCM88650=0
+#serdes_firmware_mode_xe5.BCM88650=0
+#serdes_firmware_mode_xe6.BCM88650=0
+#serdes_firmware_mode_xe7.BCM88650=0
+#serdes_firmware_mode_xe8.BCM88650=0
+#serdes_firmware_mode_xe9.BCM88650=0
+#serdes_firmware_mode_xe10.BCM88650=0
+#serdes_firmware_mode_xe11.BCM88650=0
+#serdes_firmware_mode_xe12.BCM88650=0
+#serdes_firmware_mode_xe13.BCM88650=0
+#serdes_firmware_mode_xe14.BCM88650=0
+#serdes_firmware_mode_xe15.BCM88650=0
+
+#
+# Serdes firmware mode for NNI interfaces
+#
+serdes_firmware_mode_xe128.BCM88650=2
+serdes_firmware_mode_xe129.BCM88650=2
+serdes_firmware_mode_xe130.BCM88650=2
+serdes_firmware_mode_xe131.BCM88650=2
+serdes_firmware_mode_xe0.BCM88650=2
+serdes_firmware_mode_xe1.BCM88650=2
+serdes_firmware_mode_xe2.BCM88650=2
+serdes_firmware_mode_xe3.BCM88650=2
+
+#
+# Set the speed for the PON-side ports (connected to Pioneer) to 12.5G
+#
+#port_init_speed_xe0.BCM88650=12500
+#port_init_speed_xe1.BCM88650=12500
+#IL# change xe2, xe3 speed to 1G
+port_init_speed_xe2.BCM88650=1000
+port_init_speed_xe3.BCM88650=1000
+#port_init_speed_xe4.BCM88650=12500
+#port_init_speed_xe5.BCM88650=12500
+#port_init_speed_xe6.BCM88650=12500
+#port_init_speed_xe7.BCM88650=12500
+#port_init_speed_xe8.BCM88650=12500
+#port_init_speed_xe9.BCM88650=12500
+#port_init_speed_xe10.BCM88650=12500
+#port_init_speed_xe11.BCM88650=12500
+#port_init_speed_xe12.BCM88650=12500
+#port_init_speed_xe13.BCM88650=12500
+#port_init_speed_xe14.BCM88650=12500
+#port_init_speed_xe15.BCM88650=12500
+
+#
+# Set the number of priorities for the PON-side ports (connected to
+# Pioneer) to '2'.
+#
+port_priorities_xe0.BCM88650=2
+port_priorities_xe1.BCM88650=2
+port_priorities_xe2.BCM88650=2
+port_priorities_xe3.BCM88650=2
+#port_priorities_xe4.BCM88650=2
+#port_priorities_xe5.BCM88650=2
+#port_priorities_xe6.BCM88650=2
+#port_priorities_xe7.BCM88650=2
+#port_priorities_xe8.BCM88650=2
+#port_priorities_xe9.BCM88650=2
+#port_priorities_xe10.BCM88650=2
+#port_priorities_xe11.BCM88650=2
+#port_priorities_xe12.BCM88650=2
+#port_priorities_xe13.BCM88650=2
+#port_priorities_xe14.BCM88650=2
+#port_priorities_xe15.BCM88650=2
+
+#
+# Map bcm local port to Network-Interface[.channel] interfaces
+#
+# PON Interfaces
+#
+
+#
+# Non-channelized PON Interfaces
+#
+# Uncomment the following if using non-channelized PON interfaces with
+# Pioneer.
+#
+#ucode_port_0.BCM88650=10GBase-R8
+#ucode_port_1.BCM88650=10GBase-R9
+#ucode_port_2.BCM88650=10GBase-R10
+#ucode_port_3.BCM88650=10GBase-R11
+#ucode_port_4.BCM88650=10GBase-R12
+#ucode_port_5.BCM88650=10GBase-R13
+#ucode_port_6.BCM88650=10GBase-R14
+#ucode_port_7.BCM88650=10GBase-R15
+
+#
+# Channelized PON Interfaces
+#
+# Define virtual ports for the 10G Channels
+#
+#ucode_port_0.BCM88650=10GBase-R8.0
+#ucode_port_1.BCM88650=10GBase-R9.0
+#ucode_port_2.BCM88650=10GBase-R10.0
+#ucode_port_3.BCM88650=10GBase-R11.0
+#ucode_port_4.BCM88650=10GBase-R12.0
+#ucode_port_5.BCM88650=10GBase-R13.0
+#ucode_port_6.BCM88650=10GBase-R14.0
+#ucode_port_7.BCM88650=10GBase-R15.0
+
+#
+# Define virtual ports for the 1G Channels
+#
+#ucode_port_8.BCM88650=10GBase-R8.1
+#ucode_port_9.BCM88650=10GBase-R9.1
+#ucode_port_10.BCM88650=10GBase-R10.1
+#ucode_port_11.BCM88650=10GBase-R11.1
+#ucode_port_12.BCM88650=10GBase-R12.1
+#ucode_port_13.BCM88650=10GBase-R13.1
+#ucode_port_14.BCM88650=10GBase-R14.1
+#ucode_port_15.BCM88650=10GBase-R15.1
+
+#
+# NNI Interfaces
+#
+ucode_port_128.BCM88650=10GBase-R0
+ucode_port_129.BCM88650=10GBase-R1
+ucode_port_130.BCM88650=10GBase-R2
+ucode_port_131.BCM88650=10GBase-R3
+ucode_port_0.BCM88650=10GBase-R4
+ucode_port_1.BCM88650=10GBase-R5
+ucode_port_2.BCM88650=10GBase-R6
+ucode_port_3.BCM88650=10GBase-R7
+
+#ucode_port_200.BCM88650=CPU.1
+#ucode_port_201.BCM88650=CPU.2
+#ucode_port_202.BCM88650=CPU.3
+#ucode_port_203.BCM88650=CPU.4
+
+#40G
+#ucode_port_1.BCM88650=XLGE0
+#ucode_port_2.BCM88650=XLGE1
+#ucode_port_3.BCM88650=XLGE2
+#ucode_port_4.BCM88650=XLGE3
+#ucode_port_5.BCM88650=XLGE4
+#ucode_port_6.BCM88650=XLGE5
+#ucode_port_7.BCM88650=XLGE6
+
+#ILKN configuration - basic config
+#ucode_port_31.BCM88650=ILKN0
+#ucode_port_32.BCM88650=ILKN1
+#ilkn_num_lanes_0.BCM88650=12
+#ilkn_num_lanes_1.BCM88650=12
+#port_init_speed_il.BCM88650=10312
+
+
+#ILKN per port channel stat
+#ilkn_counters_mode.BCM88650=PACKET_PER_CHANNEL
+
+#ILKN configuration - advanced
+#ilkn_metaframe_sync_period=2048
+# Enable\Disable ILKN status message sent through an out-of-band interface.
+# ilkn_interface_status_oob_ignore.BCM88650=1
+
+##ILKN retransmit
+#ilkn_retransmit_enable_rx.BCM88650=1
+#ilkn_retransmit_enable_tx.BCM88650=1
+#ilkn_retransmit_buffer_size.BCM88650=250
+#ilkn_retransmit_num_requests_resent.BCM88650=15
+#ilkn_retransmit_num_sn_repetitions_tx.BCM88650=1
+#ilkn_retransmit_num_sn_repetitions_rx.BCM88650=1
+#ilkn_retransmit_rx_timeout_words.BCM88650=3800
+#ilkn_retransmit_rx_timeout_sn.BCM88650=250
+#ilkn_retransmit_rx_ignore.BCM88650=80
+#ilkn_retransmit_rx_reset_when_error_enable.BCM88650=1
+#ilkn_retransmit_rx_watchdog.BCM88650=0
+#ilkn_retransmit_rx_reset_when_alligned_error_enable.BCM88650=1
+#ilkn_retransmit_rx_reset_when_retry_error_enable.BCM88650=1
+#ilkn_retransmit_rx_reset_when_wrap_after_disc_error_enable.BCM88650=1
+#ilkn_retransmit_rx_reset_when_wrap_before_disc_error_enable.BCM88650=0
+#ilkn_retransmit_rx_reset_when_timout_error_enable.BCM88650=0
+#ilkn_retransmit_tx_wait_for_seq_num_change_enable.BCM88650=1
+#ilkn_retransmit_tx_ignore_requests_when_fifo_almost_empty.BCM88650=1
+
+#ucode_port_40.BCM88650=RCY.0
+#ucode_port_41.BCM88650=RCY.1
+#ucode_port_42.BCM88650=RCY.2
+
+## CAUI Configuration
+#ucode_port_41.BCM88650=CGE0
+#ucode_port_42.BCM88650=CGE1
+caui_num_lanes_0.BCM88650=10
+caui_num_lanes_1.BCM88650=10
+#Required for working IXIA 100G port:
+mld_lane_swap_lane20_ce.BCM88650=0
+mld_lane_swap_lane21_ce.BCM88650=1
+mld_lane_swap_lane0_ce.BCM88650=20
+mld_lane_swap_lane1_ce.BCM88650=21
+
+# This configures the lane polarity
+pb_serdes_lane_swap_polarity_tx_phy1.BCM88650=1
+pb_serdes_lane_swap_polarity_tx_phy2.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy3.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy4.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy5.BCM88650=1
+pb_serdes_lane_swap_polarity_tx_phy6.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy7.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy8.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy9.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy10.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy11.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy12.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy13.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy14.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy15.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy16.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy17.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy18.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy19.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy20.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy21.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy22.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy23.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy24.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy25.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy26.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy27.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy28.BCM88650=0
+
+pb_serdes_lane_swap_polarity_rx_phy1.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy2.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy3.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy4.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy5.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy6.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy7.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy8.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy9.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy10.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy11.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy12.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy13.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy14.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy15.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy16.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy17.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy18.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy19.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy20.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy21.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy22.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy23.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy24.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy25.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy26.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy27.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy28.BCM88650=0
+
+xgxs_tx_lane_map_quad0.BCM88650=0x3210
+xgxs_tx_lane_map_quad1.BCM88650=0x3210
+xgxs_tx_lane_map_quad2.BCM88650=0x3210
+xgxs_tx_lane_map_quad3.BCM88650=0x3210
+xgxs_tx_lane_map_quad4.BCM88650=0x3210
+xgxs_tx_lane_map_quad5.BCM88650=0x3210
+xgxs_tx_lane_map_quad6.BCM88650=0x3210
+
+xgxs_rx_lane_map_quad0.BCM88650=0x3210
+xgxs_rx_lane_map_quad1.BCM88650=0x3210
+xgxs_rx_lane_map_quad2.BCM88650=0x3210
+xgxs_rx_lane_map_quad3.BCM88650=0x3210
+xgxs_rx_lane_map_quad4.BCM88650=0x3210
+xgxs_rx_lane_map_quad5.BCM88650=0x3210
+xgxs_rx_lane_map_quad6.BCM88650=0x3210
+
+
+
+#High voltage driver strap. If 0, connected to 1.4V supply; if 1, connected to 1V mode.
+#for specific quad use srd_tx_drv_hv_disable_quad_X where X is (FSRD num * 4 + internal quad)
+srd_tx_drv_hv_disable.BCM88650=1
+
+#Port init mode
+#port_init_duplex=0
+#port_init_adv=0
+#port_init_autoneg=0
+
+
+# This disables serdes initialization
+# phy_null.BCM88650=1
+
+##  Number of Internal ports
+# Enable the ERP port. Values: 0 / 1.
+num_erp_tm_ports.BCM88650=1
+# Enable the OLP port. Values: 0 / 1.
+num_olp_tm_ports.BCM88650=1
+# Enable OAMP
+num_oamp_ports.BCM88650=0
+
+## Firmware Load Method
+load_firmware.BCM88650=0x102
+
+### Headers configuration ###
+
+## Use of the tm_port_header_type_<Local-Port-Id>=<Header-type>
+## Default header type is derived from fap_device_mode: If fap_device_mode is
+## PP, default header type is ETH. Otherwise, defualt header type is TM.
+## Header type per port can be overriden.
+## All options: ETH/RAW/TM/PROG/CPU/STACKING/TDM/TDM_RAW/UDH_ETH
+## Injected header types: if PTCH, INJECTED (local Port of type TM) or INJECTED_PP (PP)
+##                        if PTCH-2, INJECTED_2 (local Port of type TM) or INJECTED_2_PP (PP)
+
+# Set CPU to work with TM header (ITMH)
+#tm_port_header_type_0.BCM88650=TM
+
+tm_port_header_type_in_180.BCM88650=INJECTED_2
+tm_port_header_type_out_180.BCM88650=CPU
+
+tm_port_header_type_in_200.BCM88650=INJECTED_2_PP
+tm_port_header_type_out_200.BCM88650=ETH
+tm_port_header_type_in_201.BCM88650=INJECTED_2_PP
+tm_port_header_type_out_201.BCM88650=ETH
+tm_port_header_type_in_202.BCM88650=INJECTED_2_PP
+tm_port_header_type_out_202.BCM88650=ETH
+tm_port_header_type_in_203.BCM88650=INJECTED_2_PP
+tm_port_header_type_out_203.BCM88650=ETH
+
+### Parser Configuration ###
+# Parser has 4 custom macros that are allocated dynamically and
+# configured according to the following features and soc properties:
+# Trill (1 macro) - trill_mode
+# FCoE (2 macros) - bcm886xx_fcoe_switch_mode
+# VxLAN (1 macro) - bcm886xx_vxlan_enable
+# IPv6-Extension-header (2 macros) - bcm886xx_ipv6_ext_hdr_enable
+# UDP (1 macro) - UDP parsing is enabled by default, and can be 
+#  disabled with soc property custom_feature_udp_parse_disable
+#  When disabling UDP parsing VxLAN and 1588oUDP are affected
+
+# Enable IPv6 Extension Header, 0 - disable (default), 1 - enable
+#bcm886xx_ipv6_ext_hdr_enable=1
+
+# Disable UDP parsing, 0 - enable (default), 1 - disable
+#custom_feature_udp_parse_disable=1
+
+#OAMP port
+#tm_port_header_type_out_232.BCM88650=CPU
+
+#MPLS-TP channel types for OAM/BFD - If MPLS-TP used, channel should be specified
+#Available types: mplstp_bfd_control_channel_type
+#               mplstp_pw_ach_channel_type
+#               mplstp_dlm_channel_type
+#               mplstp_ilm_channel_type
+#               mplstp_dm_channel_type
+#               mplstp_ipv4_channel_type
+#               mplstp_cc_channel_type
+#               mplstp_cv_channel_type
+#               mplstp_on_demand_cv_channel_type
+#               mplstp_pwe_oam_channel_type
+#               mplstp_ipv6_channel_type
+#               mplstp_fault_oam_channel_type
+#               mplstp_g8113_channel_type
+#mplstp_g8113_channel_type=0x8902
+
+
+
+# Set the recycling port processing to be raw (static forwarding)
+tm_port_header_type_rcy.BCM88650=RAW
+
+### RCPU
+# Valid CPU local ports on which RCPU packets can be received by slave device.
+#rcpu_rx_pbmp=0xf00000000000000000000000000000000000000000000000001
+
+#tm_port_header_type_514.BCM88650=RAW
+
+## Header extensions
+# Set if an FTMH Out-LIF extension is present to Unicast and Multicast packets
+# Options: NEVER / IF_MC (only Multicast packets) / ALWAYS
+fabric_ftmh_outlif_extension.BCM88650=IF_MC
+
+# Set the FTMH Load-Balancing Key extension mode
+# Options for 88660: ENABLED, FULL_HASH
+# Options for 88650: ENABLED
+# Options for 88640 compatible: DISABLED / 8B_LB_KEY_8B_STACKING_ROUTE_HISTORY / 16B_STACKING_ROUTE_HISTORY / STANDBY_MC_LB
+#  (available only for AradPlus)
+# Default: DISABLED
+system_ftmh_load_balancing_ext_mode.BCM88650=DISABLED
+
+# Set if an OTMH Out-LIF (CUD) Extension is present to Unicast and Multicast packets
+# Options: NEVER / IF_MC (only Multicast packets) / ALWAYS / DOUBLE_TAG (two hop scheduling)
+# Default: NEVER
+# tm_port_otmh_outlif_ext_mode_13.BCM88650=NEVER
+
+# Set if an OTMH Source-System-Port Extension is present.
+# Option: 0/1
+# Default: 0
+# tm_port_otmh_src_ext_enable_13.BCM88650=0
+
+#Trunk hash format, relevant only for AradPlus. Possible values: NORMAL (default) / INVERTED / DUPLICATED.
+#trunk_hash_format=NORMAL
+
+## Stacking Application
+#stacking_enable.BCM88650=1
+#custom_feature_stamp_uc_destination.BCM88650=1
+
+## System RED
+# Set System-Red functionality.
+#system_red_enable.BCM88650=1
+
+# Indicate the size (Bytes) of a first header to skip
+# before the major header at ingress (e.g. Ethernet, ITMH)
+# It can be set per port also
+first_header_size.BCM88650=0
+
+# Indicate the size (Bytes) of the PMF Extension Headers
+# to remove for TM header type ports (expecting ITMH)
+# Set per port
+#post_headers_size_0.BCM88650=4
+
+# Indicate the size (Bytes) of the User-Headers: configurable
+# headers located in the fabric between internal headers and
+# Ethernet. Their values are set by Ingress FP, and can be used
+# by Egress FP or Egress Editor.
+# units: bits. 4 values can be set:
+# 0 - size of the 1st User-Header, for the Egress PMF. 0b / 8b / 16b
+# 1 - size of the 2nd User-Header, for the Egress PMF. 0b / 8b / 16b
+# The sum of these 2 values should be under 16b
+# 2, 3 - size of the 1st/2nd User-Header, for the Egress Editor.
+# 0b / 8b / 16b / 24b / 32b
+# Each of the global User-Header size must be under 32 bits, but not 24 bits.
+# The Egress FP field is always at the MSB of the User-Header
+# Not available for 88650-A0.
+#field_class_id_size_0.BCM88650=8
+#field_class_id_size_1.BCM88650=0
+#field_class_id_size_2.BCM88650=24
+#field_class_id_size_3.BCM88650=0
+
+
+### Trunk - LAG configuration ###
+# Set Set the number of LAGs: 1024, 512, 256, 128 or 64
+number_of_trunks.BCM88650=256
+
+### SYNCE configuration ###
+## Synchronous Ethernet Signal Mode.
+## Options: TWO_DIFF_CLK, TWO_CLK_AND_VALID. Default: TWO_CLK_AND_VALID
+#sync_eth_mode.BCM88650=TWO_CLK_AND_VALID
+
+## Clock Source (single SerDes) lane in the specified NIF port.
+## Usage: sync_eth_clk_to_nif_id_clk_<clk_number>=<serdes_number>
+#sync_eth_clk_to_nif_id_clk_0.BCM88650=1
+#sync_eth_clk_to_nif_id_clk_1.BCM88650=1
+
+## Clock Divider for the selected recovered clock. Valid values: 1/2/4. Default: 1.
+## Usage: sync_eth_clk_divider_clk_<clk_number>=<1/2/4>
+#sync_eth_clk_divider_clk_0.BCM88650=1
+#sync_eth_clk_divider_clk_1.BCM88650=1
+
+## Enable the automatic squelch function for the recovered clock. Valid values: 0/1. Default: 0.
+## Usage: sync_eth_clk_squelch_enable_clk_<clk_number>=<0/1>
+#sync_eth_clk_squelch_enable_clk_0.BCM88650=0
+#sync_eth_clk_squelch_enable_clk_1.BCM88650=0
+
+### ELK configuration ###
+## External lookup (TCAM) Device type select, Indicate the External lookup Device type.
+# Value Options: NONE/NL88650. Default: NONE.
+#ext_tcam_dev_type=NL88650
+
+## Set ELK FWD table Size.
+# format: ext_xxx_fwd_table_size.
+# where xxx replaced by FWD options: ip4_uc_rpf/ip4_mc/ip6_uc_rpf/ip6/ip6_mc/trill_uc/trill_mc/mpls/coup_mpls
+# Value Options: (0) - External table disabled, >0: number of entries. Default: 0.
+#ext_ip4_uc_rpf_fwd_table_size=8192
+#ext_ip4_mc_fwd_table_size=8192
+
+## Set ELK IP FWD use NetRoute  ALG.
+# Value Options: ALG_LPM_LPM/ALG_LPM_NETROUTE/ALG_LPM_TCAM. Default: ALG_LPM_TCAM.
+#ext_fwd_algorithm_lpm=ALG_LPM_TCAM
+
+## Set ELK interface mode.
+# Change ELK interface configuration to support CAUI port.
+# Value Options: 0/1. 0 - Normal mode, 1  2 CAUI port + ELK mode. Default: 0.
+#ext_interface_mode=0
+
+### Configure MDIO interface
+# External MDIO clock rate divisor . Default: 0x24.
+#rate_ext_mdio_divisor=0x36
+# External MDIO clock rate divisor. Default: 0x1.
+#rate_ext_mdio_dividend=1
+
+### TDM - OTN configuration ###
+#fap_tdm_bypass.BCM88650=0
+
+# Indicate if a Petra-B device is connected to the actual device
+# For TDM/OTN applications,
+# system_is_petra_b_in_system.BCM88650=0
+##Indicate if TDM can arrive throgh primary pipe.
+#Should be 1 for a System with PetraB that connected to fabric over primary pipe.
+fabric_tdm_over_primary_pipe.BCM88650=0
+
+### Fabric configuration ###
+#0-LFEC 1-8b\10b 2-FEC 3-BEC
+backplane_serdes_encoding.BCM88650=2
+#SFI speed rate
+port_init_speed_sfi.BCM88650=10312
+#CL72
+#port_init_cl72_sfi=0
+fabric_segmentation_enable.BCM88650=1
+
+## Fabric transmission mode
+# Set the Connect mode to the Fabric
+# Options: FE - presence of a Fabric device (single stage) / MULT_STAGE_FE -  Multi-stage /
+# SINGLE_FAP - stand-alone device / MESH - mesh / BACK2BACK - 2 devices in Mesh
+#fabric_connect_mode.BCM88650=SINGLE_FAP
+fabric_connect_mode.BCM88650=FE
+
+## Cell format configuration
+# Indicate if the traffic can be sent in dual pipe
+is_dual_mode.BCM88650=0
+# Indicate the format of the cell:
+# A VCS128 cell is used if system_is_vcs_128_in_system or system_is_fe600_in_system is TRUE
+system_is_vcs_128_in_system.BCM88650=0
+system_is_fe600_in_system.BCM88650=0
+
+### WRED ###
+
+# Set the maximum packet size for WRED tests. 0 - means ignore max packet size.
+discard_mtu_size.BCM88650=0
+
+### OCB (On-Chip Buffer) configuration ###
+# Enable the OCB
+# Enable MODES:
+#   0/FALSE        -->  OCB_DISABLED     --> No OCB use
+#   1/TRUE         -->  OCB_ENABLED      --> Like in Arad-A0/B0. Some packets may use both DRAM and OCB resources
+#   ONE_WAY_BYPASS -->  Depends on number of present drams (available only for AradPlus):
+#                      0 drams:   - OCB_ONLY
+#                      1 drams:   - OCB_ONLY_1_DRAM     -->  : OCB-only with 1 DRAM for the free pointers
+#                      2-8 drams: - OCB_DRAM_SEPARATE   -->  : OCB and DRAM coexist separately
+#   Default: TRUE.
+bcm886xx_ocb_enable.BCM88650=1
+
+# OCB Data Buffer size. Possible values: 128/256/512/1024. Default: 256.
+bcm886xx_ocb_databuffer_size.BCM88650=256
+# Repartition between Unicast and Full Multicast buffers.
+# 0: 80% Unicast and 20% Multicast, 1: Unicast-Only
+bcm886xx_ocb_repartition.BCM88650=0
+
+### PDM configuration ###
+# Set the PDM Mode.
+# 0: simple (default), 1: reduced (mandatory for LLFC-VSQ, PFC-VSQ, or ST-VSQ)
+bcm886xx_pdm_mode.BCM88650=0
+
+### Multicast Number of DBuff mode ###
+# Set IQM FMC buffers-replication sizes
+# Options for 88650: ARAD_INIT_FMC_4K_REP_64K_DBUFF_MODE/ARAD_INIT_FMC_64_REP_128K_DBUFF_MODE
+# Default: ARAD_INIT_FMC_4K_REP_64K_DBUFF_MODE
+multicast_nbr_full_dbuff.BCM88650=ARAD_INIT_FMC_4K_REP_64K_DBUFF_MODE
+
+### Multicast configuration ###
+# Multicast egress vlan membership range. By default: 0-4095.
+egress_multicast_direct_bitmap_min.BCM88650=0
+egress_multicast_direct_bitmap_max.BCM88650=4095
+
+### VOQ - Flow configuration ###
+
+# Set the VOQ mapping mode:
+# DIRECT: More than 4K System Ports are supported. System-level WRED is not supported.
+# INDIRECT: similar to Petra-B. Up to 4K System Ports.
+voq_mapping_mode.BCM88650=INDIRECT
+
+# Set the Base Queue to be added to the packet flow-id
+# when the Flow-Id is set explicitely either by the ITMH
+# or by the Destination resolution in the Packet processing
+flow_mapping_queue_base.BCM88650=0
+
+# Set the number of priorities supported at egress per Port
+# Options: 1 / 2 / 8
+port_priorities.BCM88650=8
+
+# Set the shared multicast resource mode: Strict / Discrete
+egress_shared_resources_mode.BCM88650=Strict
+
+# Define outgoing port rate mode in data rate or packet rate.
+# Options: DATA / PACKET
+otm_port_packet_rate.BCM88650=DATA
+
+# Set Port egress recycling scheduler configuration.
+# 0: Strict Priority Scheduler, 1: Round Robin Scheduler
+port_egress_recycling_scheduler_configuration.BCM88650=0
+
+# Set statically the region mode per region id
+# 0: queue connectors only (InterDigitated = FALSE, OddEven = TRUE)
+# 1: queue connectors, SE (InterDigitated =TRUE, OddEven = TRUE)
+# 2: queue connectors, SE (InterDigitated =TRUE, OddEven = FALSE)
+dtm_flow_mapping_mode_region_65.BCM88650=0
+dtm_flow_mapping_mode_region_66.BCM88650=0
+dtm_flow_mapping_mode_region_67.BCM88650=0
+dtm_flow_mapping_mode_region_68.BCM88650=0
+dtm_flow_mapping_mode_region_69.BCM88650=0
+dtm_flow_mapping_mode_region_70.BCM88650=0
+dtm_flow_mapping_mode_region_71.BCM88650=0
+dtm_flow_mapping_mode_region_72.BCM88650=0
+dtm_flow_mapping_mode_region_73.BCM88650=0
+dtm_flow_mapping_mode_region_74.BCM88650=0
+dtm_flow_mapping_mode_region_75.BCM88650=0
+dtm_flow_mapping_mode_region_76.BCM88650=0
+dtm_flow_mapping_mode_region_77.BCM88650=0
+dtm_flow_mapping_mode_region_78.BCM88650=0
+dtm_flow_mapping_mode_region_79.BCM88650=0
+dtm_flow_mapping_mode_region_80.BCM88650=0
+dtm_flow_mapping_mode_region_81.BCM88650=1
+dtm_flow_mapping_mode_region_82.BCM88650=1
+dtm_flow_mapping_mode_region_83.BCM88650=1
+dtm_flow_mapping_mode_region_84.BCM88650=1
+dtm_flow_mapping_mode_region_85.BCM88650=1
+dtm_flow_mapping_mode_region_86.BCM88650=1
+dtm_flow_mapping_mode_region_87.BCM88650=1
+dtm_flow_mapping_mode_region_88.BCM88650=1
+dtm_flow_mapping_mode_region_89.BCM88650=1
+dtm_flow_mapping_mode_region_90.BCM88650=1
+dtm_flow_mapping_mode_region_91.BCM88650=1
+dtm_flow_mapping_mode_region_92.BCM88650=1
+dtm_flow_mapping_mode_region_93.BCM88650=1
+dtm_flow_mapping_mode_region_94.BCM88650=1
+dtm_flow_mapping_mode_region_95.BCM88650=1
+dtm_flow_mapping_mode_region_96.BCM88650=1
+dtm_flow_mapping_mode_region_97.BCM88650=1
+dtm_flow_mapping_mode_region_98.BCM88650=1
+dtm_flow_mapping_mode_region_99.BCM88650=2
+dtm_flow_mapping_mode_region_100.BCM88650=2
+dtm_flow_mapping_mode_region_101.BCM88650=2
+dtm_flow_mapping_mode_region_102.BCM88650=2
+dtm_flow_mapping_mode_region_103.BCM88650=2
+dtm_flow_mapping_mode_region_104.BCM88650=2
+dtm_flow_mapping_mode_region_105.BCM88650=2
+dtm_flow_mapping_mode_region_106.BCM88650=2
+dtm_flow_mapping_mode_region_107.BCM88650=2
+dtm_flow_mapping_mode_region_108.BCM88650=2
+dtm_flow_mapping_mode_region_109.BCM88650=2
+dtm_flow_mapping_mode_region_110.BCM88650=2
+dtm_flow_mapping_mode_region_111.BCM88650=2
+dtm_flow_mapping_mode_region_112.BCM88650=2
+dtm_flow_mapping_mode_region_113.BCM88650=2
+dtm_flow_mapping_mode_region_114.BCM88650=2
+dtm_flow_mapping_mode_region_115.BCM88650=2
+dtm_flow_mapping_mode_region_116.BCM88650=2
+dtm_flow_mapping_mode_region_117.BCM88650=2
+dtm_flow_mapping_mode_region_118.BCM88650=2
+dtm_flow_mapping_mode_region_119.BCM88650=2
+dtm_flow_mapping_mode_region_120.BCM88650=2
+dtm_flow_mapping_mode_region_121.BCM88650=2
+dtm_flow_mapping_mode_region_122.BCM88650=2
+dtm_flow_mapping_mode_region_123.BCM88650=2
+dtm_flow_mapping_mode_region_124.BCM88650=2
+dtm_flow_mapping_mode_region_125.BCM88650=2
+dtm_flow_mapping_mode_region_126.BCM88650=2
+dtm_flow_mapping_mode_region_127.BCM88650=2
+dtm_flow_mapping_mode_region_128.BCM88650=2
+
+#IL# Configure number of symmetric cores each region supports ##
+dtm_flow_nof_remote_cores_region_1.BCM88650=2
+dtm_flow_nof_remote_cores_region_2.BCM88650=2
+dtm_flow_nof_remote_cores_region_3.BCM88650=2
+dtm_flow_nof_remote_cores_region_4.BCM88650=2
+dtm_flow_nof_remote_cores_region_5.BCM88650=2
+dtm_flow_nof_remote_cores_region_6.BCM88650=2
+dtm_flow_nof_remote_cores_region_7.BCM88650=2
+dtm_flow_nof_remote_cores_region_8.BCM88650=2
+dtm_flow_nof_remote_cores_region_9.BCM88650=2
+dtm_flow_nof_remote_cores_region_10.BCM88650=2
+dtm_flow_nof_remote_cores_region_11.BCM88650=2
+dtm_flow_nof_remote_cores_region_12.BCM88650=2
+dtm_flow_nof_remote_cores_region_13.BCM88650=2
+dtm_flow_nof_remote_cores_region_14.BCM88650=2
+dtm_flow_nof_remote_cores_region_15.BCM88650=2
+dtm_flow_nof_remote_cores_region_16.BCM88650=2
+dtm_flow_nof_remote_cores_region_17.BCM88650=2
+dtm_flow_nof_remote_cores_region_18.BCM88650=2
+dtm_flow_nof_remote_cores_region_19.BCM88650=2
+dtm_flow_nof_remote_cores_region_20.BCM88650=2
+dtm_flow_nof_remote_cores_region_21.BCM88650=2
+dtm_flow_nof_remote_cores_region_22.BCM88650=2
+dtm_flow_nof_remote_cores_region_23.BCM88650=2
+dtm_flow_nof_remote_cores_region_24.BCM88650=2
+dtm_flow_nof_remote_cores_region_25.BCM88650=2
+dtm_flow_nof_remote_cores_region_26.BCM88650=2
+dtm_flow_nof_remote_cores_region_27.BCM88650=2
+dtm_flow_nof_remote_cores_region_28.BCM88650=2
+dtm_flow_nof_remote_cores_region_29.BCM88650=2
+dtm_flow_nof_remote_cores_region_30.BCM88650=2
+dtm_flow_nof_remote_cores_region_31.BCM88650=2
+dtm_flow_nof_remote_cores_region_32.BCM88650=2
+dtm_flow_nof_remote_cores_region_33.BCM88650=2
+dtm_flow_nof_remote_cores_region_34.BCM88650=2
+dtm_flow_nof_remote_cores_region_35.BCM88650=2
+dtm_flow_nof_remote_cores_region_36.BCM88650=2
+dtm_flow_nof_remote_cores_region_37.BCM88650=2
+dtm_flow_nof_remote_cores_region_38.BCM88650=2
+dtm_flow_nof_remote_cores_region_39.BCM88650=2
+dtm_flow_nof_remote_cores_region_40.BCM88650=2
+dtm_flow_nof_remote_cores_region_41.BCM88650=2
+dtm_flow_nof_remote_cores_region_42.BCM88650=2
+dtm_flow_nof_remote_cores_region_43.BCM88650=2
+dtm_flow_nof_remote_cores_region_44.BCM88650=2
+dtm_flow_nof_remote_cores_region_45.BCM88650=2
+dtm_flow_nof_remote_cores_region_46.BCM88650=2
+dtm_flow_nof_remote_cores_region_47.BCM88650=2
+dtm_flow_nof_remote_cores_region_48.BCM88650=2
+dtm_flow_nof_remote_cores_region_49.BCM88650=2
+dtm_flow_nof_remote_cores_region_50.BCM88650=2
+dtm_flow_nof_remote_cores_region_51.BCM88650=2
+dtm_flow_nof_remote_cores_region_52.BCM88650=2
+dtm_flow_nof_remote_cores_region_53.BCM88650=2
+dtm_flow_nof_remote_cores_region_54.BCM88650=2
+dtm_flow_nof_remote_cores_region_55.BCM88650=2
+dtm_flow_nof_remote_cores_region_56.BCM88650=2
+dtm_flow_nof_remote_cores_region_57.BCM88650=2
+dtm_flow_nof_remote_cores_region_58.BCM88650=2
+dtm_flow_nof_remote_cores_region_59.BCM88650=2
+dtm_flow_nof_remote_cores_region_60.BCM88650=2
+#dtm_flow_nof_remote_cores_region_core0_2.BCM88675=2
+
+### Flow Control configuration ###
+# Set the Flow control type per Port.
+# Options: LL (Link-level) / CB2 (Class-Based - 2 classes) /
+# CB8 (Class-Based - 8 classes)
+# flow_control_type.BCM88650=LL
+
+## Out-Of-Band Flow control configuration
+#spn_FC_OOB_TYPE, spn_FC_OOB_MODE, spn_FC_OOB_CALENDER_LENGTH, spn_FC_OOB_CALENDER_REP_COUNT,
+
+## Set voltage mode for oob interfaces
+#HSTL_1.5V
+#3.3V
+#HSTL_1.5V_VDDO_DIV_2
+ext_voltage_mode_oob=3.3V
+
+## Inband Interlaken configuration
+# spn_FC_INBAND_INTLKN_MODE, spn_FC_INBAND_INTLKN_CALENDER_LENGTH, spn_FC_INBAND_INTLKN_CALENDER_REP_COUNT
+# spn_FC_INBAND_INTLKN_CALENDER_LLFC_MODE, spn_FC_INBAND_INTLKN_LLFC_MUB_ENABLE_MASK
+
+### Meter engine configuration ###
+
+# Specify meter operation mode
+# 32 - Two meters per packet (32k total)
+# 64 - One meter per packet (64k total)
+# Options: 0, 32, 64
+policer_ingress_count.BCM88650=32
+
+# For meters in double 32k mode, determine the sharing mode
+# Options:
+# 0 - NONE (only for 64k mode)
+# 1 - SERIAL (only for 32k mode)
+# 2 - PARALLEL (only for 32k mode)
+policer_ingress_sharing_mode.BCM88650=1
+
+# Applies only to Arad+ (88660)
+# For meters in parallel mode, determine the mapping
+# Options: BEST, WORST
+# policer_result_parallel_color_map.BCM88650=WORST
+
+# Applies only to Arad+ (88660)
+# For meters in parallel mode, determine how the buckets are changed
+# Options: CONSTANT, TRANSPARENT, DEFERRED
+# policer_result_parallel_bucket_update.BCM88650=CONSTANT
+
+# Applies only to Arad+ (88660)
+# Set the Ethernet policer to work in color blind mode
+# rate_color_blind.BCM88650=1
+
+# L2 learn limit mode
+# Options: VLAN, VLAN_PORT, TUNNEL or the numeric equivalent 0-2.
+# Default: VLAN
+# l2_learn_limit_mode = VLAN_PORT
+
+# Applies only to Arad+ (88660)
+# Determines the L2 learn limit ranges when l2_learn_limit_mode is set to VLAN_PORT
+# Two range bases can be selected, each of 16K size.
+# Options: 0, 16K, 32K, 48K.
+# Default: 0 & 16K
+# l2_learn_lif_range_base_0 = 0
+# l2_learn_lif_range_base_1 = 16K
+
+### Counter engine configuration ###
+
+# Set the Counter source
+# Options: INGRESS_FIELD / INGRESS_VOQ / INGRESS_VSQ
+# INGRESS_CNM / EGRESS_FIELD / EGRESS_VSI / EGRESS_OUT_LIF / EGRESS_TM (per queue) / EGRESS_TM_PORT (per port)
+# EGRESS_RECEIVE_VSI / EGRESS_RECEIVE_OUT_LIF / EGRESS_RECEIVE_TM (per queue) / EGRESS_RECEIVE_TM_PORT (per port)
+# INGRESS_OAM / EGRESS_OAM
+# 2 Counter-Pointers can be set (with _0 and _1) for
+# INGRESS_FIELD / EGRESS_VSI / EGRESS_OUT_LIF / EGRESS_TM / EGRESS_TM_PORT
+# Range extension can be set (with _LSB and _MSB) for
+# INGRESS_FIELD / EGRESS_VSI / EGRESS_OUT_LIF / EGRESS_TM / EGRESS_TM_PORT /EGRESS_RECEIVE_VSI /
+# EGRESS_RECEIVE_OUT_LIF / EGRESS_RECEIVE_TM / EGRESS_RECEIVE_TM_PORT
+counter_engine_source_0.BCM88650=INGRESS_FIELD
+counter_engine_source_1.BCM88650=INGRESS_FIELD_1
+counter_engine_source_2.BCM88650=INGRESS_VOQ
+###
+###  DML
+###
+###  For DML applications, counter engine 3 is used for VOQ
+###  counters. This in combination with configuring the engines used for
+###  VOQs for FWD_DROP allows for counters for 32K VOQs.
+###
+#counter_engine_source_3.BCM88650=EGRESS_FIELD
+counter_engine_source_3.BCM88650=INGRESS_VOQ
+
+# Configure the statistic interface egress source
+# Options: EGRESS_VSI / EGRESS_OUT_LIF / EGRESS_TM / EGRESS_TM_PORT (the default is TM)
+# valid just when there is no conflict with the other counter engines
+#counter_engine_source_stat0.BCM88650=EGRESS_TM
+#counter_engine_source_stat1.BCM88650=EGRESS_TM
+
+
+# Set the Counter engine resolution
+# SIMPLE_COLOR = green, not green
+# SIMPLE_COLOR_FWD = fwd green, fwd not green (BCM88660_A0 only)
+# SIMPLE_COLOR_DROP = drop green, drop not green (BCM88660_A0 only)
+# FWD_DROP = forwarded, dropped
+# GREEN_NOT_GREEN = fwd grn, drop grn, fwd not grn, drop not grn
+# FULL_COLOR = fwd grn, drop grn, fwd not grn, drop yel, drop red
+# ALL = received
+# FWD = forwarded, DROP = droped (not supported by ARAD_A0)
+# CONFIGURABLE = defined by counter_engine_map_ SOC properties (BCM88660_A0 only)
+counter_engine_statistics_0.BCM88650=FULL_COLOR
+counter_engine_statistics_1.BCM88650=FULL_COLOR
+###
+###  DML
+###
+###  For DML applications, counter engine 3 is used for VOQ
+###  counters. This in combination with configuring the engines used for
+###  VOQs for FWD_DROP allows for counters for 32K VOQs.
+###
+#counter_engine_statistics_2.BCM88650=FULL_COLOR
+#counter_engine_statistics_3.BCM88650=FULL_COLOR
+counter_engine_statistics_2.BCM88650=FWD_DROP
+counter_engine_statistics_3.BCM88650=FWD_DROP
+
+# Set the Counter format
+# Options: PACKETS_AND_BYTES / PACKETS / BYTES
+# / MAX_QUEUE_SIZE / PACKETS_AND_PACKETS(supported just in FWD_DROP statistic in BCM88660_A0)
+# If not PACKETS_AND_BYTES or PACKETS_AND_PACKETS, the HW Counter width is 59 bits, thus
+# no background SW operation is performed
+counter_engine_format_0.BCM88650=PACKETS_AND_BYTES
+counter_engine_format_1.BCM88650=PACKETS_AND_BYTES
+counter_engine_format_2.BCM88650=PACKETS_AND_BYTES
+counter_engine_format_3.BCM88650=PACKETS_AND_BYTES
+
+# #enable/disable counter processor background thread (default:1-enable)
+# counter_engine_sampling_interval=1
+
+### Configurable mode configuration (BCM88660_A0 only)###
+# counter_engine_statistics_0.BCM88660_A0=CONFIGURABLE
+# counter_engine_map_enable_0.BCM88660_A0=1
+# counter_engine_map_size_0.BCM88660_A0=4
+# counter_engine_map_fwd_green_offset_0.BCM88660_A0=0
+# counter_engine_map_fwd_yellow_offset_0.BCM88660_A0=1
+# counter_engine_map_fwd_red_offset_0.BCM88660_A0=1
+# counter_engine_map_fwd_black_offset_0.BCM88660_A0=2
+# counter_engine_map_drop_green_offset_0.BCM88660_A0=3
+# counter_engine_map_drop_yellow_offset_0.BCM88660_A0=3
+# counter_engine_map_drop_red_offset_0.BCM88660_A0=3
+# counter_engine_map_drop_black_offset_0.BCM88660_A0=3
+
+### Statistic-Report configuration ###
+# Enable the Statistic-Interface configuration
+# stat_if_enable_<port> - not supported by ARAD_A0
+# stat_if_enable.BCM88650=1
+
+# ## Statistic-Report Properties
+# # Set the Statistic-Report mode
+# # Options: BILLING / BILLING_QUEUE_NUMBER (not supported by ARAD_A0)/ QSIZE
+# stat_if_report_mode.BCM88650=QSIZE
+# #Indicate if idle reports must be sent
+# #when the Statistic-report rate is too low
+# stat_if_idle_reports_present.BCM88650=0
+# # Indicate if the reported packet size is the original packet size
+# stat_if_report_original_pkt_size.BCM88650=1
+# #If set then a single ingress-billing report will be generated
+# #for the whole set of the multicast copies
+# stat_if_report_multicast_single_copy=1
+# ## Statistic Packet configurations
+# # Set the Statistic Packet size (Bytes)
+# # Valid valued: 65B/126B/248B/492B (Queue-Size), 64B/128B/256B/512B/1024B (Billing)
+# stat_if_pkt_size=64B
+#
+# ## Scrubber configuration
+# # Set the range of VOQs to scrub. Range: 0 - 96K-1.
+# stat_if_scrubber_queue_min.BCM88650=0
+# stat_if_scrubber_queue_max.BCM88650=0
+#
+# # Set the scrubber rate range
+# # If set to 0 (default), the scrubber is disabled. Units: nanoseconds
+# stat_if_scrubber_rate_min.BCM88650=0
+# stat_if_scrubber_rate_max.BCM88650=0
+#
+# # Set the thresholds (thresh_id 0 - 15) defining
+# # occupancy range per resource type:
+# # DRAM Buffers, Buffer descriptors, Buffer descriptors buffers
+# stat_if_scrubber_bdb_th.BCM88650=0
+# stat_if_scrubber_buffer_descr_th.BCM88650=0
+# stat_if_uc_dram_buffer_descr_th.BCM88650=0
+#
+# #Relective report for queue size mode - not supported by ARAD_A0
+# #Reports will be created for queue num range (stat_if_selective_report_queue_min -stat_if_selective_report_queue_max)
+# #Default - all range
+# stat_if_selective_report_queue_min.BCM88650_B0=0
+# stat_if_selective_report_queue_max.BCM88650_B0=98303
+
+### Transaction - DMA configuration ###
+# Time to wait for SCHAN channel response (from CMIC). Units: microseconds.
+
+# TODO
+### Counter threads ###
+# spn_BCM_STAT_PBMP, spn_BCM_STAT_INTERVAL, spn_BCM_STAT_FLAGS
+
+### Interrupts ###
+## Set interrupts global parameters.
+# Options: 1 - Polling interrupt mode, 0 - Line/MSI interrupt mode. Default: 1.
+polled_irq_mode.BCM88650=0
+#  Set the delay in microsecond between the polling, relevant only to Polling mode.  Default: 0x0.
+polled_irq_delay.BCM88650=50000
+
+## CMIC interrupts:
+# Enable: Use interrupts completion instead of polling completion for the following operations.
+#         Options: 1 - Enable, 0 - Disable. Default: 0.
+# Timeout: delay in Microsecond between the polling, relevant only to Polling completion mode.
+# SCHAN:
+#schan_intr_enable.0=1
+schan_timeout_usec.BCM88650=300000
+# TDMA
+tdma_intr_enable.BCM88650=1
+tdma_timeout_usec.BCM88650=80000000
+# TSLAM
+tslam_intr_enable.BCM88650=1
+tslam_timeout_usec.BCM88650=80000000
+# MIIM
+#miim_intr_enable.0=1
+miim_timeout_usec.0=300000
+
+### DRAM configuration ###
+
+# DRAM buffer (Dbuff) size
+# Allowed values: 256/512/1024/2048.
+ext_ram_dbuff_size.BCM88650=1024
+
+# Number of external DRAMs.
+# Allowed values for 88650: 0/2/3/4/6/8. A value of 0 disables the DRAM.
+# Allowed values for 88660: 0/1/2/3/4/6/8. A value of 0 disables the DRAM.
+#                                          A value of 1 is permitted only in ONE WAY BYPASS ocb mode.
+ext_ram_present.BCM88650=8
+
+### Dram Tuning (Shmoo)
+# 2 = Use Dram saved config Parameters, if no Parameters Perform Shmoo on init. Default option.
+# 1 = Perform Shmoo on init.
+# 0 = Use Dram saved config Parameters, if no Parameters do nothing.
+ddr3_auto_tune.BCM88650=2
+
+### Enable BIST
+# Run Dram BIST on initialization, if BIST fail the initialization will fail. Defult: 1.
+# bist_enable_dram.BCM88650=1
+
+### Example for Dram Saved config Parameters.
+## This example is for ci=14 (Dram=7).
+#ddr3_tune_addrc_ci14=0x000000ae
+#ddr3_tune_wr_dq_wl1_ci14=0x92929292,0x92929292,0x92929292,0x92929292
+#ddr3_tune_wr_dq_wl0_ci14=0x93939393,0x93939393,0x92929292,0x92929292
+#ddr3_tune_wr_dq_ci14=0x80808080
+#ddr3_tune_vref_ci14=0x000007df
+#ddr3_tune_rd_dqs_ci14=0x96969191,0x90909191
+#ddr3_tune_rd_dq_wl1_rn_ci14=0x82828282,0x82828282,0x82828282,0x82828282
+#ddr3_tune_rd_dq_wl0_rn_ci14=0x82828282,0x82828282,0x89898989,0x89898989
+#ddr3_tune_rd_dq_wl1_rp_ci14=0x82828282,0x82828282,0x82828282,0x82828282
+#ddr3_tune_rd_dq_wl0_rp_ci14=0x82828282,0x82828282,0x89898989,0x89898989
+#ddr3_tune_rd_en_ci14=0x009d9e9d,0x00a2a3a1
+#ddr3_tune_rd_data_dly_ci14=0x00000505
+
+
+# Dram type: Select ONLY ONE of the following DRAM types, to configure all dram related parameteres per type.
+# Dram Type for Arad:
+dram_type_DDR3_HYNIX_H5TQ2G63BFR_TEC_1066=1
+#dram_type_DDR3_HYNIX_H5TQ2G63BFR_TEC_933=1
+#dram_type_DDR3_HYNIX_H5TQ2G63BFR_TEC_800=1
+#dram_type_DDR3_MICRON_MT41J256M16_4GBIT_1066=1
+#dram_type_DDR3_MICRON_MT41J128M16HA_125_1066=1
+#dram_type_DDR3_MICRON_MT41J128M16HA_125_933=1
+#dram_type_DDR3_MICRON_MT41J128M16HA_125_800=1
+#dram_type_DDR3_MICRON_MT42J64M16LA_15E_667=1
+#dram_type_DDR3_SAMSUNG_K4B4G1646B_4GBIT_1066=1
+#dram_type_DDR3_SAMSUNG_K4B1G1646G_933=1
+#dram_type_DDR3_SAMSUNG_K4B1G1646G_800=1
+
+### Setting dram_type_DDR3_HYNIX_H5TQ2G63BFR_TEC_1066 Parameters as Default:
+## All other dram types parameter resides in arad.soc. choosing another Dram Type will override the following parameters.
+ext_ram_t_rrd=6000
+ext_ram_columns=1024
+ext_ram_banks=8
+ext_ram_ap_bit_pos=10
+ext_ram_burst_size=32
+ext_ram_t_ref=3900000
+ext_ram_t_wr=15000
+ext_ram_t_wtr=7500
+ext_ram_t_rtp=7500
+ext_ram_freq=1066
+ext_ram_rows=16384
+ext_ram_jedec=29
+ext_ram_t_rc=46090
+ext_ram_t_rcd_rd=13090
+ext_ram_t_rcd_wr=13090
+ext_ram_t_rp=13090
+ext_ram_t_rfc=160000
+ext_ram_t_ras=33000
+ext_ram_c_wr_latency=10
+ext_ram_t_faw=35000
+ext_ram_c_cas_latency=14
+ddr3_mem_grade=0x141414
+
+# DRAM pre-configurations according to config variables which defines
+# Dram Type. supports only DDR3:
+ext_ram_type.BCM88650=DDR3
+
+# Total Dram Size (MBytes)
+# For 8 drams interfaces, 2 channel each, Each channel 2Gbit Dram. the total DRAM size is 32GBits=4000MBytes.
+ext_ram_total_size.BCM88650=4000
+
+# Total buffer size allocated for User buffer. Units: Mbytes. Default: '0x0'.
+# Supported suffix:
+#       dram - the buffer size will be subtracted from the DRAM size available for packet memory.
+#user_buffer_size=0
+#user_buffer_size_dram=50
+
+# DRAM ClamShell (interface swap its HW PIN pairs during init. Note: Only one of DRAMs can have its PIN swapped)
+# Valid values: 0/1
+#dram0_clamshell_enable.BCM88650=1
+#dram1_clamshell_enable.BCM88650=1
+
+# DRAM maximum number of crc error per buffer, buffer deleted by interrupt application.
+#dram_crc_del_buffer_max_reclaims=0
+
+### Warmboot ###
+## Scache initialization for warmboot persistent storage.
+#Save the warm boot data in a file. Allowed values: 3.
+#stable_location.BCM88650=3
+#Set the warm boot data filename.
+#stable_filename.BCM88650=./warmboot_data
+#Set the warm boot data file size (At least 10MB for PETRA-B, 4MB for ARAD)
+#stable_size.BCM88650=1000000000
+
+
+##############################
+# Config variable below are only accessed from dune.soc, and are used to
+# configure BSP / example application / group of formal config variables.
+##############################
+
+## If set, always configures synthesizers, even if the configured rate is equal to
+## their nominal rate. Can be disabled to speedup bringup time (keep in mind that if
+## disabled, changing a synt to a non-nominal freq and than back to nominal will not
+## work
+#synt_over.BCM88650=1
+
+# Local variables for board synthesizers freq. Fabric, combo and nif also configure
+# the *_ref_clock soc properties for these frequencies. core, ddr and phy only
+# configures the synthesizer
+synt_core.BCM88650=100000000
+synt_ddr.BCM88650=125000000
+synt_phy.BCM88650=156250000
+synth_dram_freq.BCM88650=25
+
+#Configure the reference clock frequencies for NIF and Fabric SerDes
+# Options:  0 - 125MHZ, 1 - 156.25MHz
+serdes_nif_clk_freq.BCM88650=1
+serdes_fabric_clk_freq.BCM88650=1
+# IEEE 1588 -
+# configure clock (for 1588 debug, when Broadsync is disabled):
+#  DPLL mode/lock: 0 - eci ts pll clk disabled, 1 - configure eci ts pll clk
+#  DPLL phase/freq. Default initial: lo = 0x40000000, hi = 0x10000000.
+#phy_1588_dpll_frequency_lock.BCM88650=1
+#phy_1588_dpll_phase_initial_lo.BCM88650=0x40000000
+#phy_1588_dpll_phase_initial_hi.BCM88650=0x10000000
+# port external MAC
+#  indication whether external MAC exists or not.
+#  0: 1588 external MAC does not exist
+#  1: 1588 external MAC exists
+#  the external MAC substracts the RX time from the correction field
+#  and adds the TX time to the correction field.
+#ext_1588_mac_enable_14.BCM88650=1
+
+## Trill configurations
+# Trill mode: 0 (disabled) / 1 (coarse-grained) / 2 (fine-grained)
+#trill_mode.BCM88650=1
+
+# Trill multicast prunning mode:
+# 0: no prunning - vsi is not part of the key
+# 1: VSI prunning: Key is dist-tree,esadit-bit,VSI.
+trill_mc_prune_mode.BCM88650=0
+
+# Enable SA authentication
+#sa_auth_enabled=1
+
+# Bridge default logical interfaces allocation IDS
+logical_port_l2_bridge.BCM88650=0
+logical_port_drop.BCM88650=1
+
+#logical_port_mim_in.BCM88650=2
+#logical_port_mim_out.BCM88650=4096
+
+# Enable EVB application
+#evb_enable=1
+
+# Enable Flexible QinQ application
+#vlan_translation_match_ipv4=1
+
+
+# Prepend tag to be 4 bytes or 8 bytes. Default: 4B.
+# Applicable only from ARAD+
+#prepend_tag_bytes=4B
+
+# The Prepend Tag is located at (12 + 2*offset) bytes from the start of the packet.
+# Range: 0-7. Default: 0
+#prepend_tag_offset=0
+
+# Enable ARP (next hop mac extension) feature
+bcm886xx_next_hop_mac_extension_enable.BCM88650=0
+
+# Set VLAN translate mode.
+# 0: normal
+# 1: advanced mode. Enable vlan edit settings with enhanced user control
+#bcm886xx_vlan_translate_mode=0
+
+# Set MPLS termination database mode
+# Set MPLS databases location for each MPLS namespace (L1,L2,L3)
+#bcm886xx_mpls_termination_database_mode=0
+
+# Enable , Disable MPLS indexed.
+# MPLS termination with known label stack location.
+# Must be enabled in case device supports more than 2 MPLS label terminations (L1,L2,L3)
+#mpls_termination_label_index_enable=1
+
+# Enable FastReRoute labels in device.
+#fast_reroute_labels_enable=0
+
+# Enable MPLS Context specific. Upstream label assignment in device.
+#mpls_context_specific_label_enable=0
+
+# MPLS context.
+# Can be global, per port , per interface or per port,interface.
+#mpls_context=global
+
+# MPLS TP MC reserved mac address (01-00-5E-90-00-00).
+# If set device will support My-MAC termination of reserved MC Ethernet
+#mpls_tp_mymac_reserved_address=0
+
+# MPLS ELI enable disable
+mpls_entropy_label_indicator_enable=0
+
+
+#########################################
+##cfg for BCM88640_A0 - Petra
+#########################################
+
+force_clk_m_n_divisors_zero_nif0.BCM88640_A0=0
+force_clk_m_n_divisors_zero_fabric0.BCM88640_A0=1
+force_clk_m_n_divisors_zero_comb0.BCM88640_A0=0
+
+combo_ref_clock.BCM88640=312500
+
+nif_ref_clock.BCM88640_A0=312500
+
+# Use variable cell size
+system_cell_format.BCM88640_A0=VCS128
+
+# Core clock speed (MHz)
+core_clock_speed.BCM88640_A0=300
+
+# Map bcm local port to CPU/NIF interfaces
+ucode_port_0.BCM88640_A0=CPU.0
+ucode_port_73.BCM88640_A0=CPU.1
+ucode_port_74.BCM88640_A0=CPU.2
+ucode_port_75.BCM88640_A0=CPU.3
+ucode_port_76.BCM88640_A0=CPU.4
+ucode_port_77.BCM88640_A0=CPU.5
+ucode_port_78.BCM88640_A0=CPU.6
+
+# Interlaken ports basic configuration (temporary).
+# This configuration replaces the above XAUI/RXAUI ports config
+# The following PB design constraint is not enforced in SW, so must be taken
+# care of here, when mapping ports to interfaces:
+#   If using ilkn0, port 1 (if used) must be mapped to ilkn0
+#   If using ilkn1, port 2 (if used) must be mapped to ilkn1
+#   Note that in our default mapping, port 2 is mapped to RXAUI 6, thus won't
+#   work. If one wants to use front panel port 2 with ilkn1, he should be map
+#   RAXUI6 to a port != 2.
+#ilkn_num_lanes_0.BCM88640_A0=12
+#ucode_port_1.BCM88640_A0=ILKN0.0
+#ucode_port_2.BCM88640_A0=ILKN0.1
+#ucode_port_3.BCM88640_A0=ILKN0.2
+#ilkn_num_lanes_1.BCM88640_A0=12
+#ucode_port_4.BCM88640_A0=RXAUI6
+#ucode_port_5.BCM88640_A0=ILKN1.0
+#ucode_port_6.BCM88640_A0=ILKN1.1
+#ucode_port_7.BCM88640_A0=ILKN1.2
+
+# Default header type is derived from fap_device_mode: If fap_device_mode is
+# PP, default header type is ETH. Otherwise, defualt header type is TM.
+# Header type per port can be overriden.
+# All options: ETH/RAW/TM/PROG/CPU/STACKING/TDM/TDM_RAW/INJECTED
+
+# Set CPU to work with TM header (ITMH)
+#tm_port_header_type_0.BCM88640_A0=TM
+tm_port_header_type_in_0.BCM88640_A0=TM
+tm_port_header_type_out_0.BCM88640_A0=CPU
+tm_port_header_type_73.BCM88640_A0=TM
+tm_port_header_type_74.BCM88640_A0=TM
+tm_port_header_type_75.BCM88640_A0=TM
+tm_port_header_type_76.BCM88640_A0=TM
+tm_port_header_type_77.BCM88640_A0=TM
+tm_port_header_type_78.BCM88640_A0=TM
+# recycling port
+tm_port_header_type_40.BCM88640_A0=RAW
+ucode_port_40.BCM88640_A0=RCY.0
+
+# Enable ERP and OLP ports
+num_erp_tm_ports.BCM88640_A0=1
+num_olp_tm_ports.BCM88640_A0=1
+num_recycle_tm_ports.BCM88640_A0=1
+
+# Dram configuration
+# 600 Mhz
+ext_ram_pll_r.BCM88640_A0=4
+ext_ram_pll_f.BCM88640_A0=47
+ext_ram_pll_q.BCM88640_A0=1
+ext_ram_freq.BCM88640_A0=600
+
+# Dbuff size
+# Allowed values: 256/512/1024/2048.
+ext_ram_dbuff_size.BCM88640_A0=1024
+
+# Number of external DRAMs.
+# Allowed values for 88x4x: 0/2/3/4/6.
+# Allowed values for 88650: 0/2/3/4/6/8.
+# ext_ram_total_size below assumed this value is 6 for 88x4x and 8 for
+ext_ram_present.BCM88640_A0=6
+
+# Dram type: Select ONLY ONE of the following DRAM types, to configure all dram
+# related parameteres per type.
+# Dram Type for Pb:
+dram_type_DDR3_MICRON_MT41J64M16_15E.BCM88640_A0=1
+#dram_type_DDR2_MICRON_K4T51163QE_ZC_LF7.BCM88640_A0=1
+#dram_type_DDR3_SAMSUNG_K4B1G1646E_HCK0_1333.BCM88640_A0=1
+#dram_type_DDR3_SAMSUNG_K4B1G1646E_HCK0_1600.BCM88640_A0=1
+#dram_type_GDDR3_SAMSUNG_K4J52324QE.BCM88640_A0=1
+#dram_type_DDR3_MICRON_MT41J128M16HA_15E_2G.BCM88640_A0=1
+
+# QDR configuration
+# Parity. Allowed values: PARITY/ECC.
+ext_qdr_protection_type.BCM88640_A0=PARITY
+ext_qdr_size_mbit.BCM88640_A0=72
+#QDR type: QDR/QDR2P/QDR3/NONE.
+ext_qdr_type.BCM88640_A0=QDR
+
+# QDR can use the core clock, or using it's own pll. Current example is for 250MHz pll (if used).
+# QDR using own pll configuration
+#ext_qdr_use_core_clock_freq.BCM88640_A0=0
+#ext_qdr_pll_m.BCM88640_A0=4
+#ext_qdr_pll_n.BCM88640_A0=4
+#ext_qdr_pll_p.BCM88640_A0=0
+
+# QDR using core clock
+ext_qdr_use_core_clock_freq.BCM88640_A0=1
+
+#Configure MDIO. If parameter is not defined, MDIO is disabled.
+mdio_clock_freq_khz.BCM88640_A0=1000
+
+# Streaming interface configuration
+streaming_if_enable_timeoutcnt.BCM88640_A0=1
+streaming_if_timeout_prd.BCM88640_A0=70
+streaming_if_quiet_mode.BCM88640_A0=0
+streaming_if_discard_bad_parity.BCM88640_A0=0
+
+# maximum packet size for WRED tests. 0 - means ignore max packet size.
+discard_mtu_size.BCM88640_A0=0
+
+# multicast egress vlan membership range. By default: 0-4095.
+egress_multicast_direct_bitmap_min.BCM88640_A0=0
+egress_multicast_direct_bitmap_max.BCM88640_A0=4095
+
+# configure flow mapping base to 0
+flow_mapping_queue_base.BCM88640_A0=0
+
+dtm_flow_mapping_mode_region_25.BCM88640_A0=0
+dtm_flow_mapping_mode_region_26.BCM88640_A0=0
+dtm_flow_mapping_mode_region_27.BCM88640_A0=0
+dtm_flow_mapping_mode_region_28.BCM88640_A0=0
+dtm_flow_mapping_mode_region_29.BCM88640_A0=0
+dtm_flow_mapping_mode_region_30.BCM88640_A0=0
+dtm_flow_mapping_mode_region_31.BCM88640_A0=0
+dtm_flow_mapping_mode_region_32.BCM88640_A0=0
+dtm_flow_mapping_mode_region_33.BCM88640_A0=1
+dtm_flow_mapping_mode_region_34.BCM88640_A0=1
+dtm_flow_mapping_mode_region_35.BCM88640_A0=1
+dtm_flow_mapping_mode_region_36.BCM88640_A0=1
+dtm_flow_mapping_mode_region_37.BCM88640_A0=1
+dtm_flow_mapping_mode_region_38.BCM88640_A0=1
+dtm_flow_mapping_mode_region_39.BCM88640_A0=1
+dtm_flow_mapping_mode_region_40.BCM88640_A0=1
+dtm_flow_mapping_mode_region_41.BCM88640_A0=1
+dtm_flow_mapping_mode_region_42.BCM88640_A0=2
+dtm_flow_mapping_mode_region_43.BCM88640_A0=2
+dtm_flow_mapping_mode_region_44.BCM88640_A0=2
+dtm_flow_mapping_mode_region_45.BCM88640_A0=2
+dtm_flow_mapping_mode_region_46.BCM88640_A0=2
+dtm_flow_mapping_mode_region_47.BCM88640_A0=2
+dtm_flow_mapping_mode_region_48.BCM88640_A0=2
+dtm_flow_mapping_mode_region_49.BCM88640_A0=2
+dtm_flow_mapping_mode_region_50.BCM88640_A0=2
+dtm_flow_mapping_mode_region_51.BCM88640_A0=2
+dtm_flow_mapping_mode_region_52.BCM88640_A0=2
+dtm_flow_mapping_mode_region_53.BCM88640_A0=2
+dtm_flow_mapping_mode_region_54.BCM88640_A0=2
+dtm_flow_mapping_mode_region_55.BCM88640_A0=2
+
+# Power up state (DOWN/UP/UP_AND_RELOCK). Can be configured per lane.
+pb_serdes_lane_power_state.BCM88640_A0=UP_AND_RELOCK
+
+# SeDes media type: Pre-configuration for tx params, according to
+# media type.
+# Allowed values: SHORT_BACKPLANE/LONG_BACKPLANE/CHIP2CHIP
+pb_serdes_lane_tx_phys_media_type.BCM88640_A0=SHORT_BACKPLANE
+pb_serdes_lane_tx_phys_media_type_28.BCM88640_A0=CHIP2CHIP
+pb_serdes_lane_tx_phys_media_type_29.BCM88640_A0=CHIP2CHIP
+pb_serdes_lane_tx_phys_media_type_30.BCM88640_A0=CHIP2CHIP
+pb_serdes_lane_tx_phys_media_type_31.BCM88640_A0=CHIP2CHIP
+
+system_is_fe1600_in_system.BCM88640_A0=0
+
+# Counter engine configuration
+counter_engine_source_1.BCM88640_A0=0
+counter_engine_statistics_1.BCM88640_A0=4
+counter_engine_source_2.BCM88640_A0=1
+counter_engine_statistics_2.BCM88640_A0=4
+
+# Statistic Reporting
+stat_if_enable=0
+
+# Clock Phases: 0/90/180/270
+stat_if_phase=0
+
+# Rate in nm
+stat_if_sync_rate=0
+
+# TRUE/FALSE
+stat_if_parity_enable=FALSE
+
+# BILLING/FAP20V
+stat_if_report_mode=BILLING
+
+# Billing Mode
+# EGR_Q_NB/CUD/VSI_VLAN/BOTH_LIFS
+stat_if_report_billing_mode=VSI_VLAN
+
+# Fap20V Mode
+# QUEUE/PACKET
+stat_if_report_fap20v_mode=QUEUE
+
+# QUEUE_NUM/MC_ID (only valid in Fap20V PACKET mode)
+stat_if_report_fap20v_fabric_mc=QUEUE_NUM
+stat_if_report_fap20v_ing_mc=QUEUE_NUM
+
+# TRUE/FALSE (only valid in Fap20V PACKET mode)
+stat_if_report_fap20v_cnm_report=FALSE
+
+# TRUE/FALSE
+stat_if_report_fap20v_count_snoop=FALSE
+stat_if_report_original_pkt_size=FALSE
+stat_if_report_fap20v_single_copy_reported=FALSE
+
+schan_timeout_usec.BCM88640_A0=300000
+
+
+polled_irq_mode.BCM88640_A0=0
+polled_irq_delay.BCM88640_A0=1000
+
+# Set the FTMH Load-Balancing Key extension mode
+# Options for 88650: ENABLED
+# Options for 88640 compatible: DISABLED / 8B_LB_KEY_8B_STACKING_ROUTE_HISTORY / 16B_STACKING_ROUTE_HISTORY
+# Default: DISABLED
+system_ftmh_load_balancing_ext_mode.BCM88640=DISABLED
+
+#########################################
+##cfg for BCM88750
+#########################################
+
+fabric_device_mode.BCM88750=SINGLE_STAGE_FE2
+
+is_dual_mode.BCM88750=0
+system_is_vcs_128_in_system.BCM88750=0
+
+system_is_dual_mode_in_system.BCM88750=0
+system_is_single_mode_in_system.BCM88750=1
+
+system_is_fe600_in_system.BCM88750=0
+
+system_ref_core_clock_khz.BCM88750=600000
+
+fabric_merge_cells.BCM88750=0
+fabric_multicast_mode.BCM88750=DIRECT
+fabric_load_balancing_mode.BCM88750=NORMAL_LOAD_BALANCE
+fabric_tdm_fragment.BCM88750=0x180
+##Allows single pipe device to send TDM traffic over the fabric primary pipe - available for Fe1600_B0 only
+#change  vcs128_unicast_priority to be lower than 2 - when enabling
+fabric_tdm_over_primary_pipe.BCM88750=0
+fabric_optimize_partial_links.BCM88750=0
+vcs128_unicast_priority.BCM88750=2
+
+polled_irq_mode.BCM88750=0
+polled_irq_delay.BCM88750=1000
+
+#Selects if to run MBIST (Memory Built In Self Test) of internal memory (tables) during startup.
+#Supported values: 0=don't run, 1=run, 2=run with extra logs
+#bist_enable.BCM88650=1
+bist_enable.BCM88750=1
+#High voltage driver strap. If 0, connected to 1.4V supply; if 1, connected to 1V mode.
+#for specific quad use srd_tx_drv_hv_disable_quad_X where X is (FSRD num * 4 + internal quad)
+srd_tx_drv_hv_disable.BCM88750=0
+load_firmware.BCM88750=2
+
+#0-LFEC 1-8b\10b 2-FEC 3-BEC
+backplane_serdes_encoding.BCM88750=2
+
+#enable\disable CL72
+port_init_cl72.BCM88750=0
+#Avaliable speeds for BCM88750: 5750, 6250, 10312, 11500, 12500
+port_init_speed.BCM88750=10312
+#LC PLL in\out 0=125MHz 1=156.25MHz
+serdes_fabric_clk_freq_in.BCM88750=1
+serdes_fabric_clk_freq_out.BCM88750=1
+serdes_mixed_rate_enable.BCM88750_B0=0
+
+# VSC128 or VSC256
+fabric_cell_format.BCM88750=VSC256
+
+# Core clock speed (MHz)
+core_clock_speed_khz.BCM88750=533333
+
+## CMIC interrupts:
+# Enable: Use interrupts completion instead of polling completion for the following operations.
+#         Options: 1 - Enable, 0 - Disable. Default: 0.
+# Timeout: delay in Microsecond between the polling,
+# SCHAN:
+schan_intr_enable.BCM88750=0
+schan_timeout_usec.BCM88750=300000
+# TDMA
+tdma_intr_enable.BCM88750=0
+tdma_timeout_usec.BCM88750=80000000
+# TSLAM
+tslam_intr_enable.BCM88750=0
+tslam_timeout_usec.BCM88750=80000000
+# MIIM
+miim_intr_enable.BCM88750=0
+miim_timeout_usec.BCM88750=300000
+
+
+##initialization for warmboot
+stable_location.BCM88750=3
+stable_size.BCM88750=200000
+scache_filename.BCM88750=fe1600_warmboot.mem
+
+##############################
+# Config variable below are only accessed from dune.soc, and are used to
+# configure BSP / example application / group of formal config variables.
+##############################
+
+# Support (and configure on init) packet processing features.
+# If not defined - only traffic management capabilities are enabled.
+packet_processing=1
+
+## PCP (Petra Co-Processor) features
+#pcp_elk.BCM88640_A0=1
+#pcp_oam.BCM88640_A0=1
+#pcp_dma.BCM88640_A0=1
+
+## Set/Override TDM related config variables
+#tdm.BCM88640_A0=1
+
+# If set, always configures synthesizers, even if the configured rate is
+# equal to
+# their nominal rate. Can be disabled to speedup bringup time
+# (keep in mind that if disabled, changing a synt to a non-nominal freq and
+# than back to nominal will not work
+#synt_over.BCM88640_A0=1
+
+# Local variables for board synthesizers freq. Fabric, combo and nif also configure
+# the *_ref_clock soc properties for these frequencies. core, ddr and phy only
+# configures the synthesizer
+synt_core.BCM88640_A0=100000000
+synt_ddr.BCM88640_A0=125000000
+synt_phy.BCM88640_A0=156250000
+
+## Scache initialization for warmboot persistent storage.
+## Valid values: 2: Store in dram. 3: Store in a file.
+stable_location=3
+stable_filename=./warmboot_data
+stable_flags=0
+stable_size=1000000000
+
+# Bridge default logical interfaces allocation IDS
+logical_port_l2_bridge.BCM88640=1
+logical_port_drop.BCM88640=-1
+
+#logical_port_mim_in.BCM88640=2
+#logical_port_mim_out.BCM88640=3
+
+## IPV6 tunnel
+bcm886xx_ipv6_tunnel_enable=1
+
+## Inlif Profile Management Mode - QoS L3 L2 marking mode
+#
+# BCM88660 ONLY
+#
+# QoS L3 L2 marking allows changing the DSCP and/or EXP values
+# of IP and/or MPLS packets according to the incoming port
+# (or inlif), and the Traffic Class/Drop Precedence.
+#
+# The inlif profile is used to control the DSCP/EXP marking.
+# This SOC property controls which mode is used for the inlif profile:
+# 1: Basic mode (1 bit of the inlif profile is reserved and is used for the DSCP/EXP marking).
+# 0: Advanced mode (the user controls which inlif profile values perform DSCP/EXP marking directly).
+#bcm886xx_qos_l3_l2_marking=1
+
+## Unicast RPF mode per RIF
+#
+# This SOC property allows the user to set the unicast RPF mode - loose, strict or disabled - per RIF.
+# If disabled, the unicast RPF mode of a RIF is set globally.
+# Options: 0 / 1
+
+# bcm886xx_l3_ingress_urpf_enable=1
+
+## BOS handling mode
+# BCM8866X ONLY
+#
+# There are two ways to handle BOS, controlled by bcm886xx_mpls_termination_mode:
+# 0 - Use BOS as key in lookup.
+# 1 - Don't use it (except for reserved labels).
+#
+#bcm886xx_mpls_termination_key_mode=0
+
+# Color resolution mode allows the user to have more detailed metering color information.
+# BCM88660 ONLY
+#
+# Options: 0/1
+# 0: A red result from both Ethernet policer and policer implies DP=3.
+# 1: A red result from the policer implies that DP=2, while a red result from rate (Ethernet policer) implies DP=3.
+#policer_color_resolution_mode=1
+
+## Inlif Profile Management Mode - Disable Same Interface Filter
+# BCM8866X ONLY
+#
+# Controls which mode is used for the inlif profile management.
+# 1: Basic mode (1 bit of the inlif profile is reserved and is used for the same-interface filter).
+# 0: Advanced mode (the user controls which inlif profile values have the same-interface filter disabled for them).
+#bcm886xx_logical_interface_bridge_filter_enable=1
+
+## Default Block Forwarding Strength
+#
+# Configure the default forwarding strength of blocks.
+#
+# SOC Properties:
+#block_trap_strength_vtt - VTT block forwarding strength
+#block_trap_strength_flp - FLP block forwarding strength
+#block_trap_strength_hash - SLB block forwarding strength (BCM8866X ONLY)
+#block_trap_strength_pmf_0 - PMF 1st lookup forwarding strength
+#block_trap_strength_pmf_1 - PMF 2nd lookup forwarding strength
+#
+# Options: 0-7
+
+## Stateful Load Balancing
+# BCM8866X ONLY
+#
+# Stateful Load Balancing (SLB) allows the load balancing of ECMP and LAG
+# groups to become stateful.
+# In standard load balancing, removing a member from the ECMP/LAG
+# group may affect the selected member, since the formula
+# depends on group size.
+# In stateful load balancing the member is selected once and saved.
+# Later, the member is always retrieved, and does not depend on
+# the size of the LAG/ECMP group.
+#
+# resilient_hash_enable - Enable/disable SLB. Values:
+# 1 - Enable SLB.
+# 0 - Disable SLB.
+#resilient_hash_enable=1
+
+
+#Make Arad SOC properties work for Arad+, by mapping the BCM88660 suffix to BCM88650
+soc_family.BCM88660=BCM88650
+#Make Arad SOC properties work for Ardon, by mapping the BCM88202 suffix to BCM88650
+soc_family.BCM88202=BCM88650
+
+# Use different mymac addresses for ipv4 and ipv6 when using vrrp for mymac termination.
+#l3_vrrp_ipv6_distinct=1
+
+# Enable multiple mymac termination mode. In order to enable it, also set l3_vrrp_ipv6_distinct=0 and 
+# l3_vrrp_max_vid=0 since vrrp and  multiple mymac mode can't co exist.
+#l3_multiple_mymac_termination_enable=1
+
+# Distinguish between ipv4 and all other l3 protocols when multiple mymac terminating 
+#l3_multiple_mymac_termination_mode=1
+
+# Usually the final DP given by the meter (or the In-DP) is unchanged, and can be from 0-3.
+# When this SOC property is set to 1, when the final INGRESS DP is 2, it is mapped to 1 instead, 
+# and thus only the values 0-1 and 3 can be output.
+# This has no effect when policer_color_resolution_mode=1.
+#custom_feature_always_map_result_dp_2_to_1=1
+
+#
+# Enable L3 Source Binds for DPoE SAV
+#
+l3_source_bind_mode=IP
+l3_source_bind_subnet_mode=IP
+ipv4_num_vrfs = 4096
+
+#
+# Enable ARP checking for L3 Source Binds
+#
+# This feature is not currently used.
+#
+# Valid values for custom_feature_l3_source_bind_arp_relay:
+#    0 - disabled
+#    1 - downstream ARP checking
+#    2 - upstream ARP checking
+#    3 - both downstream and upstream ARP checking
+#
+#custom_feature_l3_source_bind_arp_relay=2
diff --git a/bal_release/3rdparty/bcm-sdk/rc/bal/readme.txt b/bal_release/3rdparty/bcm-sdk/rc/bal/readme.txt
new file mode 100644
index 0000000..65ea330
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/rc/bal/readme.txt
@@ -0,0 +1,12 @@
+This directory contains bcm files that are needed in the BAL file system to bring up 
+the bal_core or bal_op_agent.
+For bal_op_agent,
+User should also copy the bal_autostart.ini from P4 BAL branch ~cur/scripts/ to the same BAL file system.
+
+The currently supported bcm_sdk version is 6.5.3
+.
+|-- bal_config.ini
+|-- config.bcm
+`-- rpc.soc.template 
+  
+
diff --git a/bal_release/3rdparty/bcm-sdk/rc/bal/rpc.soc.template b/bal_release/3rdparty/bcm-sdk/rc/bal/rpc.soc.template
new file mode 100755
index 0000000..f119730
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/rc/bal/rpc.soc.template
@@ -0,0 +1,25 @@
+cpudb newdb
+
+cpudb add key=0x1 local=t
+
+cpudb add key=0x2
+
+cts atp trans sock server start
+
+cts atp cos=0 vlan=1
+
+cte reg mode=atp
+
+# DIP token is to be replaced by an IP address supplied by application's command line option. Please do not remove or change this line - it is mandatory.
+cts atp trans sock inst dk=0x2 dip=$DIP$
+
+rpc nonexthop
+
+rpc start
+
+dispatch attach 2 client 0 0x2
+
+sleep 1
+
+cte echo string="!> tr 141" mode=atp dk=0x2
+
diff --git a/bal_release/3rdparty/bcm-sdk/rc/kt2/bal.soc b/bal_release/3rdparty/bcm-sdk/rc/kt2/bal.soc
new file mode 100755
index 0000000..d209d10
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/rc/kt2/bal.soc
@@ -0,0 +1,20 @@
+port xe0,xe1,xe2,xe3,xe4,xe5 lanes 4
+
+cpudb newdb
+
+cpudb add key=0x1
+
+cpudb add key=0x2 local=t
+
+cts atp trans sock server start
+
+cts atp cos=0 vlan=1
+
+cte reg mode=atp
+
+cts atp trans sock inst dk=0x1 dip=10.25.8.25
+
+rpc nonexthop
+
+rpc start
+
diff --git a/bal_release/3rdparty/bcm-sdk/rc/kt2/bcm.user b/bal_release/3rdparty/bcm-sdk/rc/kt2/bcm.user
new file mode 100755
index 0000000..0e3d484
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/rc/kt2/bcm.user
Binary files differ
diff --git a/bal_release/3rdparty/bcm-sdk/rc/kt2/linux-kernel-bde.ko b/bal_release/3rdparty/bcm-sdk/rc/kt2/linux-kernel-bde.ko
new file mode 100755
index 0000000..5031d17
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/rc/kt2/linux-kernel-bde.ko
Binary files differ
diff --git a/bal_release/3rdparty/bcm-sdk/rc/kt2/linux-user-bde.ko b/bal_release/3rdparty/bcm-sdk/rc/kt2/linux-user-bde.ko
new file mode 100755
index 0000000..0f54e9b
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/rc/kt2/linux-user-bde.ko
Binary files differ
diff --git a/bal_release/3rdparty/bcm-sdk/rc/kt2/rc.soc b/bal_release/3rdparty/bcm-sdk/rc/kt2/rc.soc
new file mode 100755
index 0000000..7bf9ce4
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/rc/kt2/rc.soc
@@ -0,0 +1,1686 @@
+# $Id: rc.soc 1.192 Broadcom SDK $
+# $Copyright: Copyright 2012 Broadcom Corporation.
+# This program is the proprietary software of Broadcom Corporation
+# and/or its licensors, and may only be used, duplicated, modified
+# or distributed pursuant to the terms and conditions of a separate,
+# written license agreement executed between you and Broadcom
+# (an "Authorized License").  Except as set forth in an Authorized
+# License, Broadcom grants no license (express or implied), right
+# to use, or waiver of any kind with respect to the Software, and
+# Broadcom expressly reserves all rights in and to the Software
+# and all intellectual property rights therein.  IF YOU HAVE
+# NO AUTHORIZED LICENSE, THEN YOU HAVE NO RIGHT TO USE THIS SOFTWARE
+# IN ANY WAY, AND SHOULD IMMEDIATELY NOTIFY BROADCOM AND DISCONTINUE
+# ALL USE OF THE SOFTWARE.  
+#  
+# Except as expressly set forth in the Authorized License,
+#  
+# 1.     This program, including its structure, sequence and organization,
+# constitutes the valuable trade secrets of Broadcom, and you shall use
+# all reasonable efforts to protect the confidentiality thereof,
+# and to use this information only in connection with your use of
+# Broadcom integrated circuit products.
+#  
+# 2.     TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS
+# PROVIDED "AS IS" AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES,
+# REPRESENTATIONS OR WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY,
+# OR OTHERWISE, WITH RESPECT TO THE SOFTWARE.  BROADCOM SPECIFICALLY
+# DISCLAIMS ANY AND ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY,
+# NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES,
+# ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR
+# CORRESPONDENCE TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING
+# OUT OF USE OR PERFORMANCE OF THE SOFTWARE.
+# 
+# 3.     TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL
+# BROADCOM OR ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL,
+# INCIDENTAL, SPECIAL, INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER
+# ARISING OUT OF OR IN ANY WAY RELATING TO YOUR USE OF OR INABILITY
+# TO USE THE SOFTWARE EVEN IF BROADCOM HAS BEEN ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGES; OR (ii) ANY AMOUNT IN EXCESS OF
+# THE AMOUNT ACTUALLY PAID FOR THE SOFTWARE ITSELF OR USD 1.00,
+# WHICHEVER IS GREATER. THESE LIMITATIONS SHALL APPLY NOTWITHSTANDING
+# ANY FAILURE OF ESSENTIAL PURPOSE OF ANY LIMITED REMEDY.$
+#
+# Initialization RC (run commands) file
+#
+#       These are default commands that are read and executed by default
+#       when BCM boots up.  Typically this file is called rc.soc and resides
+#       in the flash filesystem, NVRAM, or disk.
+#
+# Board Configuration Setting
+#
+#       This file uses configuration properties to know on which board
+#       it is running.  Currently one of following settings must be made:
+#
+#       BCM95670K8          config add herc8=1
+#       BCM95690K24         config add draco_b2b=1
+#       BCM95690K24S        config add draco_stk=1
+#       BCM95690R24         config add galahad=1
+#       BCM95690R24S        config add merlin=1
+#       BCM95690R48S        config add lancelot=1
+#       BCM95691K12         config add draco_k12=1
+#       White Knight        config add white_knight=1 (not shipping)
+#       Black Knight        config add black_knight=1 (not shipping)
+#       BCM95673K2S         config add twolynx=1
+#       BCM95673R8          config add herculynx=1
+#       BCM95673R24S        config add lynxalittle=1
+#       BCM95673R48S        config add lynxalot=1
+#       BCM95695P24SX_10    config add guenevere=1
+#       BCM95650K24         config add magnum=1 (automatic for 5650L)
+#       BCM95675            config add herc8_15=1
+#       BCM95650R24         config add tuc24_ref=1
+#       BCM95695P48LM       config add lm48p=1
+#       BCM95695P48LM-10    config add lm48p_B=1
+#       BCM956504P48LM-10   config add lm48p_C=1
+#       BCM956504P48LM-20   config add lm48p_C=1
+#       BCM956504P48LM-50   config add lm48p_D=1
+#       BCM956504P48POEREF  config add fbpoe=1
+#       BCM956504P24REF P0  config add fb24=1
+#       BCM956504P24    P0  config add fb24=1
+#       BCM956102P48        config add felix48=1
+#       BCM953300P24REF     config add mirage24=1
+#       BCM956800K20C       config add bradley_1g=1
+#       BCM956700K16        config add humv=1
+#       BCM956800K20        config add bradley=1
+#       BCM956580K16        config add goldwing=1
+#       BCM956314P24REF     config add bcm56314p24ref=1
+#       BCM956024P48REF     config add BCM956024P48REF=1
+#       BCM956224P48REF     config add BCM956224P48REF=1
+#       BCM956224R50T       config add BCM956224R50T=1
+#       BCM956024R50T       config add BCM956024R50T=1
+#       BCM56820K24XG       config add BCM56820K24XG=1
+#       BCM953314R24GS      config add BCM953314R24GS=1
+#       BCM953314K24        config add BCM953314K24=1
+#       BCM956820R24XG      config add BCM956820R24XG=1
+
+if $?BCM56146_A0 \
+    'local BCM56146 1'
+
+if $?BCM56147_A0 \
+    'local BCM56147 1'
+
+
+if $?1 "echo rc: arguments not supported; exit"
+if !$?unit "echo rc: no current unit; exit"
+
+echo "rc: unit $unit device $devname"
+local quiet no
+local echo echo
+local rcdone \$rc$unit
+if !"expr $rcdone + 0" "local echo noecho; local quiet yes"
+
+# Set convenience local variables
+
+# simulation related
+#if $?plisim \
+#       "local no_bcm 1"
+if $?quickturn || $?plisim \
+	"local simulator 1"
+
+# board related
+if $?galahad \
+	"local draco_b2b 1"
+if $?black_knight || $?white_knight || $?merlin \
+	"local draco_herc4 1"
+
+# chip related
+if $?PETRAB_A0 \
+    'rcload dune.soc ; exit'
+
+
+if $?BCM88750_A0 || $?BCM88750_B0 || $?BCM88755_B0 || $?BCM88754_A0\
+    'rcload dfe.soc ; exit'
+
+if $?ARAD_A0 || $?ARAD_B0 || $?ARAD_B1 || $?BCM88650_A0 || $?BCM88650_B0 || $?BCM88650_B1 || $?BCM88350_B1 || $?BCM88351_B1 || \
+   $?BCM88450_B1 || $?BCM88451_B1 || $?BCM88550_B1 || $?BCM88551_B1 || $?BCM88552_B1 || $?BCM88651_B1 || $?BCM88654_B1 || $?ARADPLUS_A0 || $?BCM88360_A0 || $?BCM88361_A0 || \
+   $?BCM88460_A0 || $?BCM88461_A0 || $?BCM88560_A0 || $?BCM88561_A0 || $?BCM88562_A0 || $?BCM88661_A0 || $?BCM88664_A0  \
+    'rcload arad.soc ; exit'
+
+if $?BCM88850_P3 \
+    'exit'
+
+
+
+
+
+
+if $?ACP \
+    'exit'
+        
+if !"expr $pcidev + 0 == 0x5650" \
+	"local magnum 1"
+if $?drac || $?drac15 \
+	"local drac_any 1"
+if $?lynx || $?lynx15 \
+	"local lynx_any 1"
+if $?tucana || $?magnum \
+	"local tucana_any 1"
+if $?herc || $?herc15 \
+	"local herc_any 1"
+if $?firebolt || $?firebolt2 || $?helix || \
+   $?felix || $?helix15 || $?felix15 || $?raptor || $?raven || $?hawkeye\
+	"local firebolt_any 1"
+if !"expr $pcidev + 0 == 0xb501" \
+	"local firebolt_10x4 1"
+if $?easyrider \
+	"local easyrider_any 1"
+if !"expr $pcidev + 0 == 0xb602" \
+	"local easyrider_1x1 1"
+if $?bradley || $?humv || $?goldwing \
+	"local bradley_any 1"
+if $?drac_any || $?lynx_any || $?tucana_any \
+	"local xgs12_switch 1"
+if $?firebolt_any || $?easyrider_any || $?bradley_any \
+	"local xgs3_switch 1"
+if $?xgs12_switch || $?xgs3_switch \
+	"local xgs_switch 1"
+if $?herc_any \
+	"local xgs_fabric 1"
+if $?xgs_fabric || $?xgs_switch \
+	"local xgs 1"
+if !$?xgs \
+	"local strata 1"
+if $?strata && !$?gsl \
+	"local PBMP_ALL 0x0bffffff"
+if $?strata && $?gsl \
+	"local PBMP_ALL 0x080000ff"
+if $?BCM56214_A0 || $?BCM56014_A0 || $?BCM56215_A0 || \
+   $?BCM56214_A1 || $?BCM56014_A1 || $?BCM56215_A1 && \
+   !$?BCM956024P48REF \
+	"local rap24_ref 1"
+
+if $?BCM5655_A0 || $?BCM5655_B0 \
+        "local tucana_nohg 1"
+
+if $?BCM956024P48REF || $?BCM956224P48REF || $?BCM956024R50T || \
+   $?BCM956224R50T \
+        "local raven_eb_48p 1"
+
+if $?BCM953314R24GS \
+        "local hawkeye_p24 1"
+
+if $?BCM953314K24 \
+        "local hawkeye_k24 1"
+
+if $?firebolt_any && $?lm48p || $?lm48p_D \
+        "config add lmfb48=1"
+
+# Set software's wait for S-Channel response to 3 seconds for QuickTurn
+# (Recommend at least 10 seconds if the ARL is 100% busy with inserts.)
+if $?quickturn	"stimeout 3000000"
+if $?plisim	"stimeout 60000000"
+
+# Direct phy led programming: 5464 activity led becomes link/activity
+if $?drac_any && $?lancelot || $?lynxalot || $?guenevere \
+	"config add phy_led_ctrl=0x18"
+
+# Shutdown threads if system is already running
+if $?triumph3 \
+	"ibodSync off"
+counter off
+linkscan off
+if $?feature_arl_hashed && !$?simulator \
+        "l2mode off"
+if $?feature_ces && $?BCM56440_A0 \
+        "ces off"
+
+# Test on-chip memory before initializing
+#if !$?simulator "init soc; bist l3 arl cbp"
+init soc
+
+# Initialize miscellaneous chip registers
+init misc
+
+# Initialize external TCAM if necessary
+# NOTE : tcam is initialized during "init misc" unless 
+#        tcam_reset_toggle = 1 is configured
+if "expr $rcdone + 0" && !"expr $tcam_reset_toggle + 0" \
+        "dispatch attach 0 esw 0"
+if !"expr $tcam_reset_toggle + 0" "muxsel 0; muxsel 0x80"
+if !"expr $tcam_reset_toggle + 0" "init tcam; $echo rc: TCAM initialized"
+
+# Initialize the StrataSwitch MMU registers
+init mmu
+
+# Uncomment to turn off Single-Bit Error reporting on 5670
+#if $?herc "m mmu_intcntl pp_sbe_en=0"
+
+# Initialize Cell Free Address Pool
+# NOTE: this should NOT be done unless chip is known to have bad CFAP
+# memory entries that need to be mapped out.
+if $?cfap_tests "$echo rc: Initializing CFAP; cfapinit"
+
+$echo rc: MMU initialized
+
+#
+# Load uKernel
+#
+
+if $?feature_cmicm && !$?rcpu_only && !$ihost_mode\
+    "mcsload 0 ${drivername}_0.srec InitMCS=true; \
+     mcsload 1 ${drivername}_1.srec;"
+
+#
+# Init CLI and BCM API
+#
+# This must be done after the raw register writes to avoid having state
+# clobbered.  NOTE: Tables are cleared by "init bcm" below.  If
+# table modifications are required, put them after "init bcm".  Some
+# registers might also be affected.
+#
+
+if !$?no_bcm \
+	"init bcm; \
+	 $echo rc: BCM driver initialized"
+
+if $?no_bcm \
+	"$echo rc: *** NOT initializing BCM driver ***"
+
+if $?no_bcm && $?strata \
+    'write vtable 0 1 VLAN_TAG=0,PORT_BITMAP=0,UT_PORT_BITMAP=0; \
+     insert vtable VLAN_TAG=1,PORT_BITMAP=$PBMP_ALL,UT_PORT_BITMAP=$PBMP_ALL; \
+     local pv \
+         VLAN_TAG=1,SP_ST=3,PORT_BITMAP=$PBMP_ALL,UT_PORT_BITMAP=$PBMP_ALL; \
+	 write ptable 0 32 PTYPE=0; \
+	 if !$?gsl "write ptable 0 24 $pv,PTYPE=1"; \
+	 if !$?gsl "write ptable 24 2 $pv,PTYPE=2"; \
+	 if $?gsl  "write ptable 0 8 $pv,PTYPE=2"; \
+	 write ptable 27 1 $pv,PTYPE=3; \
+     local pv'
+
+# Turn on mirroring of hardware ARL operations into software ARL table.
+if $?feature_arl_sorted \
+	"arlmode intr_dma; \
+	 $echo rc: ARL DMA shadowing enabled"
+
+if $?feature_arl_hashed && !$?simulator && !$?rcpu_only \
+	"l2mode interval=3000000; \
+	 $echo rc: L2 Table shadowing enabled"
+
+# If running BCM library, start linkscan task and set port modes
+
+if !$?no_bcm && !$?rcpu_only \
+	"linkscan 250000; \
+	 port fe,ge linkscan=on autoneg=on \
+		speed=0 fullduplex=true txpause=true rxpause=true; \
+	 port st linkscan=on txpause=false rxpause=false; \
+         port xe,ce linkscan=on autoneg=off \
+                speed=0 fullduplex=true txpause=true rxpause=true; \
+	 $echo rc: Port modes initialized"
+
+if !$?no_bcm && $?rcpu_only \
+	"linkscan 250000; \
+	 port e linkscan=on; \
+	 port st linkscan=on; \
+     port xe linkscan=on; \
+	 $echo rc: Port modes initialized"
+
+if !$?no_bcm && $?shadow \
+     "port il linkscan=on; \
+	  $echo rc: Interlaken Port mode initialized"
+
+# No spanning tree is running, so put ports all in the forwarding state
+# stp support not available for shadow device.
+
+if !$?no_bcm && !$?shadow \
+	"stg stp 1 all forward"
+
+# Start counter task unless already started by "init bcm" above.
+if $?plisim "local dma false"
+if !$?plisim "local dma true"
+if $?device_eb_vli "local dma false"
+if $?no_bcm && !$?rcpu_only\
+	"counter Interval=1000 Pbm=all Dma=$dma; \
+	 $echo rc: Counter collection enabled"
+if $?rcpu_only \
+	"counter Interval=2000000 Pbm=all Dma=false; \
+	 $echo rc: Counter collection enabled"
+
+# Resynchronize the saved values kept by the 'show counter' command.
+if !$?simulator \
+    "counter sync"
+
+# By default, dump data of packets that go to CPU.
+if !$?testinit \
+	"pw report +raw"
+
+# Default LED processor program for various SDKs and reference designs.
+# Source code can be found in $SDK/led/examples.
+
+if !$?p48 "local ledcode '\
+ E0 28 60 7F 67 2F 67 6B 06 7F 80 D2 1A 74 01 12 \
+ 7E 85 05 D2 0F 71 19 52 00 12 7D 85 05 D2 1F 71 \
+ 23 52 00 12 7C 85 05 D2 05 71 2D 52 00 3A 68 32 \
+ 00 97 75 3B 12 A0 FE 7F 02 0A 50 32 01 97 75 47 \
+ 12 BA FE 7F 02 0A 50 12 BA FE 7F 95 75 59 85 12 \
+ A0 FE 7F 95 75 A8 85 77 9A 12 A0 FE 7F 95 75 63 \
+ 85 77 A1 16 7C DA 02 71 A1 77 A8 32 05 97 71 76 \
+ 06 7D D2 01 71 9A 06 7F 67 93 75 9A 32 02 97 71 \
+ 9A 32 03 97 71 A8 32 04 97 75 A1 06 7E D2 07 71 \
+ A1 77 A8 12 80 F8 15 1A 00 57 32 0E 87 32 0E 87 \
+ 57 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 57'"		# sdk5605.hex
+
+if $?p48 "local ledcode '\
+ E0 28 60 7F 67 43 67 3C 67 35 67 2F 06 7F 80 D2 \
+ 18 74 01 28 60 7F 67 9B 67 89 67 BF 67 83 67 3C \
+ 67 73 67 68 67 5D 06 7F 80 D2 1A 74 13 3A 70 67 \
+ AD 71 C3 77 BF 32 03 97 71 C3 77 BF 32 05 97 71 \
+ C3 77 BF 12 BA FE 7F 32 01 97 75 4F 02 06 50 32 \
+ 00 97 75 57 02 06 50 95 75 C3 85 77 BF 67 AD 75 \
+ BF 32 04 97 71 C3 77 BF 67 AD 75 BF 32 03 97 71 \
+ C3 77 BF 67 AD 75 BF 32 03 97 71 BF 32 04 97 71 \
+ BF 77 C3 67 B6 71 C3 77 BF 12 A0 FE 7F 32 00 97 \
+ 75 95 02 06 50 95 75 C3 85 77 BF 12 BA FE 7F 32 \
+ 01 97 75 A7 02 06 50 95 75 C3 85 77 BF 06 7F 12 \
+ 80 F8 15 1A 00 57 06 7F 12 80 F8 15 1A 07 57 32 \
+ 0F 87 57 32 0E 87 57'"					# p48.hex
+
+if $?herc && !$?black_knight "local ledcode '\
+ 02 01 67 36 29 32 08 D7 87 32 07 D7 87 32 01 D7 \
+ 87 32 00 D7 87 80 D2 09 74 02 86 7F 06 7F C2 07 \
+ 74 24 86 7E 16 7E CA 07 E0 17 0D 12 08 98 27 D7 \
+ 87 91 74 2D 3A 28 10 DA 07 75 3E FA 02 57 EA 06 \
+ 57'"							# sdk5670.hex
+
+if $?herc && $?black_knight "local ledcode '\
+ 2A 03 32 08 D7 87 32 07 D7 87 32 01 D7 87 32 00 \
+ D7 87 2A 06 32 08 D7 87 32 07 D7 87 32 01 D7 87 \
+ 32 00 D7 87 3A 08'"					# knigget.hex
+
+if $?drac_any "local ledcode '\
+ E0 28 60 C3 67 4E 67 8A 06 C3 80 D2 0C 74 01 28 \
+ 60 C3 32 00 D7 87 32 01 D7 87 32 07 D7 87 32 08 \
+ D7 87 32 0F 87 32 0F 87 32 0F 87 32 0F 87 12 C2 \
+ 85 05 D2 0F 71 38 52 00 12 C1 85 05 D2 1F 71 42 \
+ 52 00 12 C0 85 05 D2 05 71 4C 52 00 3A 38 32 00 \
+ 97 75 5A 12 A0 FE C3 02 0A 50 32 01 97 75 66 12 \
+ AD FE C3 02 0A 50 12 AD FE C3 95 75 78 85 12 A0 \
+ FE C3 95 75 C0 85 77 B9 12 A0 FE C3 95 75 82 85 \
+ 77 C7 16 C0 DA 02 71 C7 77 C0 32 05 97 71 9A 32 \
+ 02 97 71 B9 06 C1 D2 01 71 B9 06 C3 67 B2 75 B9 \
+ 32 03 97 71 C0 32 04 97 75 C7 06 C2 D2 07 71 C7 \
+ 77 C0 12 80 F8 15 1A 00 57 32 0E 87 32 0E 87 57 \
+ 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 57'"		# sdk5690.hex
+
+if $?draco_k12 "local ledcode '\
+ 02 0B A2 01 28 A2 01 60 C3 67 32 67 6E 06 C3 90 \
+ 75 02 12 C2 85 05 D2 0F 71 1C 52 00 12 C1 85 05 \
+ D2 1F 71 26 52 00 12 C0 85 05 D2 05 71 30 52 00 \
+ 3A 30 32 00 97 75 3E 12 A0 FE C3 02 0A 50 32 01 \
+ 97 75 4A 12 AC FE C3 02 0A 50 12 AC FE C3 95 75 \
+ 5C 85 12 A0 FE C3 95 75 A6 85 77 9F 12 A0 FE C3 \
+ 95 75 66 85 77 AD 16 C0 DA 02 71 AD 77 A6 32 05 \
+ 97 71 7E 32 02 97 71 9F 06 C1 D2 01 71 9F 06 C3 \
+ 67 96 75 9F 32 03 97 71 A6 32 04 97 75 AD 06 C2 \
+ D2 07 71 AD 77 A6 12 80 A2 01 F8 15 1A 00 57 32 \
+ 0E 87 32 0E 87 57 32 0E 87 32 0F 87 57 32 0F 87 \
+ 32 0E 87 57'"						# k12-5690.hex
+
+if $?herc && $?white_knight "local ledcode '\
+ 2A 03 67 0A 2A 06 67 0A 3A 08 32 08 D7 87 32 07 \
+ D7 87 32 01 D7 87 32 00 D7 87 57'"			# wk5670.hex
+
+if $?herc && $?merlin "local ledcode '\
+ 2A 03 67 0A 2A 06 67 0A 3A 08 32 08 D7 87 32 00 \
+ D7 87 32 01 D7 87 32 07 D7 87 57'"			# merlin5670.hex
+
+if $?herc && $?lancelot "local ledcode '\
+ 2A 05 67 12 2A 06 67 12 2A 03 67 12 2A 04 67 12 \
+ 3A 10 32 08 D7 87 32 00 D7 87 32 01 D7 87 32 07 \
+ D7 87 57'"						# lancelot.hex
+
+if $?xgs_fabric && $?guenevere "local ledcode '\
+ 2A 04 67 0A 2A 05 67 0A 3A 04 32 07 D7 87 32 00 \
+ 32 01 B7 D7 87 57'"                                    # guenevere5670.hex
+
+if $?drac_any && $?white_knight "local ledcode '\
+ E0 28 60 C3 67 2f 67 6B 06 C3 80 D2 0C 74 01 12 \
+ C2 85 05 D2 0F 71 19 52 00 12 C1 85 05 D2 1F 71 \
+ 23 52 00 12 C0 85 05 D2 05 71 2D 52 00 3A 30 32 \
+ 00 97 75 3B 12 A0 FE C3 02 0A 50 32 01 97 75 47 \
+ 12 AC FE C3 02 0A 50 12 AC FE C3 95 75 59 85 12 \
+ A0 FE C3 95 75 A8 85 77 9A 12 A0 FE C3 95 75 63 \
+ 85 77 A1 16 C0 DA 02 71 A1 77 A8 32 05 97 71 7B \
+ 32 02 97 71 9A 06 C1 D2 01 71 9A 06 C3 67 93 75 \
+ 9A 32 03 97 71 A8 32 04 97 75 A1 06 C2 D2 07 71 \
+ A1 77 A8 12 80 F8 15 1A 00 57 32 0E 87 32 0E 87 \
+ 57 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 57'"		# wk5690.hex
+
+if $?drac_any && $?merlin "local ledcode '\
+ E0 28 60 C3 67 2F 67 6B 06 C3 80 D2 0C 74 01 12 \
+ C2 85 05 D2 0F 71 19 52 00 12 C1 85 05 D2 1F 71 \
+ 23 52 00 12 C0 85 05 D2 05 71 2D 52 00 3A 30 32 \
+ 00 97 75 3B 12 A0 FE C3 02 0A 50 32 01 97 75 47 \
+ 12 AC FE C3 02 0A 50 12 AC FE C3 95 75 59 85 12 \
+ A0 FE C3 95 75 A8 85 77 9A 12 A0 FE C3 95 75 63 \
+ 85 77 A1 16 C0 DA 02 71 A1 77 A8 32 05 97 71 7B \
+ 32 02 97 71 9A 06 C1 D2 01 71 9A 06 C3 67 93 75 \
+ 9A 32 03 97 71 A8 32 04 97 75 A1 06 C2 D2 07 71 \
+ A1 77 A8 12 80 F8 15 1A 00 57 32 0E 87 32 0E 87 \
+ 57 32 0F 87 32 0E 87 57 32 0E 87 32 0F 87 57'"		# merlin5690.hex
+
+if $?drac_any && $?galahad "local ledcode '\
+ E0 28 60 C3 67 2F 67 6B 06 C3 80 D2 0C 74 01 12 \
+ C2 85 05 D2 0F 71 19 52 00 12 C1 85 05 D2 1F 71 \
+ 23 52 00 12 C0 85 05 D2 05 71 2D 52 00 3A 30 32 \
+ 00 97 75 3B 12 A0 FE C3 02 0A 50 32 01 97 75 47 \
+ 12 AC FE C3 02 0A 50 12 AC FE C3 95 75 59 85 12 \
+ A0 FE C3 95 75 A8 85 77 9A 12 A0 FE C3 95 75 63 \
+ 85 77 A1 16 C0 DA 02 71 A1 77 A8 32 05 97 71 7B \
+ 32 02 97 71 9A 06 C1 D2 01 71 9A 06 C3 67 93 75 \
+ 9A 32 03 97 71 A8 32 04 97 75 A1 06 C2 D2 07 71 \
+ A1 77 A8 12 80 F8 15 1A 00 57 32 0E 87 32 0E 87 \
+ 57 32 0F 87 32 0E 87 57 32 0E 87 32 0F 87 57'"		# galahad.hex
+
+if $?drac_any && $?lm "local ledcode '\
+E0 28 60 C3 67 2D 06 C3 80 D2 0C 74 01 12 C2 85 \
+05 D2 0F 71 17 52 00 12 C1 85 05 D2 1F 71 21 52 \
+00 12 C0 85 05 D2 05 71 2B 52 00 3A 18 32 00 97 \
+75 39 12 A0 FE C3 02 0A 50 32 01 97 75 45 12 AC \
+FE C3 02 0A 50 12 AC FE C3 95 75 5F 85 12 A0 FE \
+C3 95 71 5C 16 C0 DA 02 71 A6 77 B4 85 77 77 12 \
+A0 FE C3 95 75 6F 85 16 C0 DA 02 71 A6 77 AD 16 \
+C0 DA 02 71 AD 77 B4 32 05 97 71 82 06 C1 D2 01 \
+71 A6 06 C3 67 9F 75 A6 32 02 97 71 A6 32 03 97 \
+71 B4 32 04 97 75 AD 06 C2 D2 07 71 AD 77 B4 12 \
+80 F8 15 1A 00 57 32 0E 87 32 0E 87 57 32 0E 87 \
+32 0F 87 57 32 0F 87 32 0E 87 57'"      # lm5690.hex
+
+if $?twolynx "local ledcode '\
+ 2A 01 67 0A 2A 00 67 0A 3A 08 32 08 D7 87 32 00 \
+ D7 87 32 01 D7 87 32 07 D7 87 57'"                 # twolynx.hex
+
+if $?lynx_any && $?herculynx || $?lynxalot || $?lm || $?guenevere \
+	"local ledcode '\
+12 C0 85 05 D2 03 71 0A 52 00 2A 00 67 10 3A 04 \
+32 08 D7 87 06 C0 D2 01 71 22 32 0F 87 32 0F 87 \
+77 2A 32 00 D7 87 32 01 D7 87 32 07 D7 87 57'"      # herculynx.hex
+
+if $?tucana && !$?magnum "local ledcode '\
+ E0 67 23 D2 18 74 01 02 20 67 23 D2 38 74 09 02 \
+ 18 67 23 D2 1C 74 11 E9 02 80 45 80 81 DA 0D 74 \
+ 1A 3A 68 28 60 E3 67 4A 67 36 06 E4 30 87 06 E5 \
+ 30 87 06 E3 80 57 32 00 97 71 45 32 01 97 71 45 \
+ 02 0F 60 E5 57 02 0E 60 E5 57 06 E3 12 A0 F8 15 \
+ 1A 00 75 59 02 0E 60 E4 57 02 0F 60 E4 57'"        # sdk5665.hex
+
+if $?magnum && !$?tuc24_ref && !$?BCM5650_C0 "local ledcode '\
+ E0 28 60 FC 67 5A 67 9C 06 FA 67 DA 06 FB 67 DA \
+ 06 FC 80 D2 1C 74 01 12 FD 85 05 D2 0F 71 21 52 \
+ 00 12 FE 85 05 D2 1F 71 2B 52 00 12 FF 85 05 D2 \
+ 05 71 35 52 00 E9 05 98 98 98 98 C2 0F 60 F9 05 \
+ 88 88 88 88 C2 F0 B6 F9 50 81 DA 0C 74 36 E9 02 \
+ 80 45 80 81 DA 0E 74 51 3A 70 32 00 97 75 66 12 \
+ C0 FE FC 02 0A 50 32 01 97 75 72 12 DC FE FC 02 \
+ 0A 50 12 DC FE FC 95 75 86 85 12 C0 FE FC 95 02 \
+ FA 75 D7 85 77 D1 12 C0 FE FC 95 75 92 85 02 FA \
+ 77 D4 16 FF DA 02 02 FA 71 D4 77 D7 32 05 97 71 \
+ A9 06 FE D2 01 02 FB 71 D1 06 FC 67 CA 02 FB 75 \
+ D1 32 02 97 71 D1 32 03 97 71 D7 32 04 97 75 D4 \
+ 06 FD D2 07 02 FB 71 D4 77 D7 12 A0 F8 15 1A 00 \
+ 57 42 00 57 42 01 57 42 02 57 D2 02 74 E3 32 0F \
+ 87 77 E6 32 0E 87 D2 01 74 EE 32 0F 87 57 32 0E \
+ 87 57'"                                            # sdk5665.hex
+
+if $?magnum && !$?tuc24_ref && $?BCM5650_C0 "local ledcode '\
+ E0 60 FB D2 18 75 09 A2 01 60 FC 28 67 37 67 73 \
+ 06 FB 80 D2 1C 74 01 12 FD 85 05 D2 0F 71 21 52 \
+ 00 12 FE 85 05 D2 1F 71 2B 52 00 12 FF 85 05 D2 \
+ 05 71 35 52 00 3A 70 32 00 97 75 43 12 C0 FE FC \
+ 02 0A 50 32 01 97 75 4F 12 DC FE FC 02 0A 50 12 \
+ DC FE FC 95 75 61 85 12 C0 FE FC 95 75 B0 85 77 \
+ A2 12 C0 FE FC 95 75 6B 85 77 A9 16 FF DA 02 71 \
+ A9 77 B0 32 05 97 71 7E 06 FE D2 01 71 A2 06 FC \
+ 67 9B 75 A2 32 02 97 71 A2 32 03 97 71 B0 32 04 \
+ 97 75 A9 06 FD D2 07 71 A9 77 B0 12 A0 F8 15 1A \
+ 00 57 32 0F 87 32 0F 87 57 32 0E 87 32 0F 87 57 \
+ 32 0F 87 32 0E 87 57'"                            # magnum_sdk.hex
+
+if $?tuc24_ref && $?BCM5650_C0 "local ledcode '\
+ E0 60 FB D2 18 71 10 60 FC 28 67 D0 67 C0 77 19 \
+ A2 01 60 FC 28 67 40 67 7C 06 FB 80 D2 1C 74 01 \
+ 12 FD 85 05 D2 0F 71 2A 52 00 12 FE 85 05 D2 1F \
+ 71 34 52 00 12 FF 85 05 D2 05 71 3E 52 00 3A 68 \
+ 32 00 97 75 4C 12 C0 FE FC 02 0A 50 32 01 97 75 \
+ 58 12 DC FE FC 02 0A 50 12 DC FE FC 95 75 6A 85 \
+ 12 C0 FE FC 95 75 B9 85 77 AB 12 C0 FE FC 95 75 \
+ 74 85 77 B2 16 FF DA 02 71 B2 77 B9 32 05 97 71 \
+ 87 06 FE D2 01 71 AB 06 FC 67 A4 75 AB 32 02 97 \
+ 71 AB 32 03 97 71 B9 32 04 97 75 B2 06 FD D2 07 \
+ 71 B2 77 B9 12 A0 F8 15 1A 00 57 32 0F 87 32 0F \
+ 87 57 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 57 \
+ 02 0E 32 00 97 71 CD 32 01 97 71 CD 80 30 87 57 \
+ 06 FC 12 A0 F8 15 1A 00 02 0F 75 DD 90 30 87 57'"  # magnum.hex
+
+if $?tuc24_ref && !$?BCM5650_C0 "local ledcode '\
+ E0 28 60 FC D2 18 71 0E 67 E9 67 D9 77 1A 67 5A \
+ 67 9C 06 FA 67 D0 06 FB 67 D0 06 FC 80 D2 1C 74 \
+ 01 12 FE 85 05 D2 1F 71 2B 52 00 12 FF 85 05 D2 \
+ 05 71 35 52 00 E9 05 98 98 98 98 C2 0F 60 F9 05 \
+ 88 88 88 88 C2 F0 B6 F9 50 81 DA 0C 74 36 E9 02 \
+ 80 45 80 81 DA 0D 74 51 3A 68 32 00 97 75 66 12 \
+ C0 FE FC 02 0A 50 32 01 97 75 72 12 DC FE FC 02 \
+ 0A 50 12 DC FE FC 95 75 86 85 12 C0 FE FC 95 02 \
+ FA 75 CD 85 77 C7 12 C0 FE FC 95 75 92 85 02 FA \
+ 77 CA 16 FF DA 02 02 FA 71 CA 77 CD 32 05 97 71 \
+ A9 06 FE D2 01 02 FB 71 C7 06 FC 67 C0 02 FB 75 \
+ C7 32 02 97 71 C7 32 03 97 71 CD 32 04 97 75 CA \
+ 12 A0 F8 15 1A 00 57 42 FF 57 42 FE 57 42 EF 57 \
+ 30 87 98 98 98 98 30 87 57 02 0E 32 00 97 71 E6 \
+ 32 01 97 71 E6 80 30 87 57 06 FC 12 A0 F8 15 1A \
+ 00 02 0F 75 F6 90 30 87 57'"                       # tuc24_ref.hex
+
+if $?herc8_15 "local ledcode '\
+ 02 01 28 32 08 D7 87 32 07 D7 87 32 01 D7 87 32 \
+ 00 D7 87 80 D2 09 74 02 86 7F 06 7F C2 07 74 22 \
+ 86 7E 16 7E CA 07 E0 17 0D 12 08 98 27 D7 87 91 \
+ 74 2B 3A 28'"                                      # sdk5675.hex
+
+if $?drac_any && $?lm "local ledcode '\
+ E0 28 60 C3 67 2D 06 C3 80 D2 0C 74 01 12 C2 85 \
+ 05 D2 0F 71 17 52 00 12 C1 85 05 D2 1F 71 21 52 \
+ 00 12 C0 85 05 D2 05 71 2B 52 00 3A 18 32 00 97 \
+ 75 39 12 A0 FE C3 02 0A 50 32 01 97 75 45 12 AC \
+ FE C3 02 0A 50 12 AC FE C3 95 75 5F 85 12 A0 FE \
+ C3 95 71 5C 16 C0 DA 02 71 A6 77 B4 85 77 77 12 \
+ A0 FE C3 95 75 6F 85 16 C0 DA 02 71 A6 77 AD 16 \
+ C0 DA 02 71 AD 77 B4 32 05 97 71 82 06 C1 D2 01 \
+ 71 A6 06 C3 67 9F 75 A6 32 02 97 71 A6 32 03 97 \
+ 71 B4 32 04 97 75 AD 06 C2 D2 07 71 AD 77 B4 12 \
+ 80 F8 15 1A 00 57 32 0E 87 32 0E 87 57 32 0E 87 \
+ 32 0F 87 57 32 0F 87 32 0E 87 57 00 00 00 00 00'"  # lm5690.hex
+
+if $?drac_any && $?lm48p "local ledcode '\
+ E0 28 60 C3 67 7C 06 C3 80 28 60 C3 67 7C 67 40 \
+ 06 C3 90 28 60 C3 67 40 06 C3 80 80 D2 0C 74 01 \
+ 12 C2 85 05 D2 0F 71 2A 52 00 12 C1 85 05 D2 1F \
+ 71 34 52 00 12 C0 85 05 D2 05 71 3E 52 00 3A 30 \
+ 32 00 97 75 4C 12 A0 FE C3 02 0A 50 32 01 97 75 \
+ 58 12 AC FE C3 02 0A 50 12 AC FE C3 95 75 6A 85 \
+ 12 A0 FE C3 95 75 B9 85 77 AB 12 A0 FE C3 95 75 \
+ 74 85 77 B2 16 C0 DA 02 71 B2 77 B9 32 05 97 71 \
+ 8C 32 02 97 71 AB 06 C1 D2 01 71 AB 06 C3 67 A4 \
+ 75 AB 32 03 97 71 B9 32 04 97 75 B2 06 C2 D2 07 \
+ 71 B2 77 B9 12 80 F8 15 1A 00 57 32 0E 87 32 0E \
+ 87 57 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 57'"  # lm48p5695.hex
+
+if $?drac_any && $?lm48p_B "local ledcode '\
+ E0 28 60 C3 67 79 06 C3 67 3D 06 C3 80 28 60 C3 \
+ 67 3D 06 C3 67 79 06 C3 80 D2 0C 74 01 12 C2 85 \
+ 05 D2 0F 71 27 52 00 12 C1 85 05 D2 1F 71 31 52 \
+ 00 12 C0 85 05 D2 05 71 3B 52 00 3A 30 32 00 97 \
+ 75 49 12 A0 FE C3 02 0A 50 32 01 97 75 55 12 AC \
+ FE C3 02 0A 50 12 AC FE C3 95 75 67 85 12 A0 FE \
+ C3 95 75 B6 85 77 A8 12 A0 FE C3 95 75 71 85 77 \
+ AF 16 C0 DA 02 71 AF 77 B6 32 05 97 71 89 32 02 \
+ 97 71 A8 06 C1 D2 01 71 A8 06 C3 67 A1 75 A8 32 \
+ 03 97 71 B6 32 04 97 75 AF 06 C2 D2 07 71 AF 77 \
+ B6 12 80 F8 15 1A 00 57 32 0E 87 32 0E 87 57 32 \
+ 0E 87 32 0F 87 57 32 0F 87 32 0E 87 57'"  # lm48p5695_10.hex
+
+if $?firebolt_any "local ledcode '\
+ E0 28 60 E3 67 55 67 91 06 E3 80 28 60 E3 67 91 \
+ 67 55 06 E3 80 D2 18 74 01 28 60 E3 67 B9 75 26 \
+ 67 CE 67 55 77 2E 32 0E 87 32 08 87 67 C0 06 E3 \
+ 80 D2 1C 74 19 12 E2 85 05 D2 0F 71 3F 52 00 12 \
+ E1 85 05 D2 1F 71 49 52 00 12 E0 85 05 D2 05 71 \
+ 53 52 00 3A 70 32 00 97 75 61 12 A0 FE E3 02 0A \
+ 50 32 01 97 75 6D 12 BC FE E3 02 0A 50 12 BC FE \
+ E3 95 75 7F 85 12 A0 FE E3 95 75 CE 85 77 C0 12 \
+ A0 FE E3 95 75 89 85 77 C7 16 E0 DA 02 71 C7 77 \
+ CE 32 05 97 71 A1 32 02 97 71 C0 06 E1 D2 01 71 \
+ C0 06 E3 67 B9 75 C0 32 03 97 71 CE 32 04 97 75 \
+ C7 06 E2 D2 07 71 C7 77 CE 12 80 F8 15 1A 00 57 \
+ 32 0E 87 32 0E 87 57 32 0E 87 32 0F 87 57 32 0F \
+ 87 32 0E 87 57'"  # sdk56504.hex
+
+#Led program for new rev of FB SDK and Ref design
+if $?firebolt_any && !$?fb24 "local ledcode '\
+ E0 28 60 E3 67 4B 67 87 06 E3 80 D2 18 74 01 28 \
+ 60 E3 67 AF 75 1C 67 C4 67 4B 77 24 32 0E 87 32 \
+ 08 87 67 B6 06 E3 80 D2 1C 74 0F 12 E2 85 05 D2 \
+ 0F 71 35 52 00 12 E1 85 05 D2 1F 71 3F 52 00 12 \
+ E0 85 05 D2 05 71 49 52 00 3A 70 32 00 97 75 57 \
+ 12 A0 FE E3 02 0A 50 32 01 97 75 63 12 BC FE E3 \
+ 02 0A 50 12 BC FE E3 95 75 75 85 12 A0 FE E3 95 \
+ 75 C4 85 77 B6 12 A0 FE E3 95 75 7F 85 77 BD 16 \
+ E0 DA 02 71 BD 77 C4 32 05 97 71 97 32 02 97 71 \
+ B6 06 E1 D2 01 71 B6 06 E3 67 AF 75 B6 32 03 97 \
+ 71 C4 32 04 97 75 BD 06 E2 D2 07 71 BD 77 C4 12 \
+ 80 F8 15 1A 00 57 32 0E 87 32 0E 87 57 32 0E 87 \
+ 32 0F 87 57 32 0F 87 32 0E 87 57'" # sdk56504ref.hex
+
+#Override Default Firebolt LED program for Line Module
+if $?lm && $?firebolt_any "local ledcode '\
+ E0 28 60 E3 67 79 06 E3 67 3D 06 E3 80 28 60 E3 \
+ 67 3D 06 E3 67 79 06 E3 80 D2 18 74 01 12 E2 85 \
+ 05 D2 0F 71 27 52 00 12 E1 85 05 D2 1F 71 31 52 \
+ 00 12 E0 85 05 D2 05 71 3B 52 00 3A 60 32 00 97 \
+ 75 49 12 A0 FE E3 02 0A 50 32 01 97 75 55 12 BC \
+ FE E3 02 0A 50 12 BC FE E3 95 75 67 85 12 A0 FE \
+ E3 95 75 B6 85 77 A8 12 A0 FE E3 95 75 71 85 77 \
+ AF 16 E0 DA 02 71 AF 77 B6 32 05 97 71 89 32 02 \
+ 97 71 A8 06 E1 D2 01 71 A8 06 E3 67 A1 75 A8 32 \
+ 03 97 71 B6 32 04 97 75 AF 06 E2 D2 07 71 AF 77 \
+ B6 12 80 F8 15 1A 00 57 32 0E 87 32 0E 87 57 32 \
+ 0E 87 32 0F 87 57 32 0F 87 32 0E 87 57'" # lm48p56504.hex
+
+#Override Default Firebolt LED program for Line Module -50 version
+if $?lm && $?lm48p_D && $?firebolt_any "local ledcode '\
+ E0 28 60 E3 67 6D 06 E3 67 31 06 E3 80 D2 18 74 \
+ 01 12 E2 85 05 D2 0F 71 1B 52 00 12 E1 85 05 D2 \
+ 1F 71 25 52 00 12 E0 85 05 D2 05 71 2F 52 00 3A \
+ 60 32 00 97 75 3D 12 A0 FE E3 02 0A 50 32 01 97 \
+ 75 49 12 BC FE E3 02 0A 50 12 BC FE E3 95 75 5B \
+ 85 12 A0 FE E3 95 75 AA 85 77 9C 12 A0 FE E3 95 \
+ 75 65 85 77 A3 16 E0 DA 02 71 A3 77 AA 32 05 97 \
+ 71 7D 32 02 97 71 9C 06 E1 D2 01 71 9C 06 E3 67 \
+ 95 75 9C 32 03 97 71 AA 32 04 97 75 A3 06 E2 D2 \
+ 07 71 A3 77 AA 12 80 F8 15 1A 00 57 32 0E 87 32 \
+ 0E 87 57 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 \
+ 57'" # lm48p56504_50.hex
+
+if $?lm && $?firebolt_10x4 "local ledcode '\
+ 02 18 28 32 07 67 1E 75 0A D7 87 32 01 D7 87 32 \
+ 00 D7 87 32 08 D7 87 80 D2 1C 74 02 3A 0C 12 80 \
+ F8 15 1A 00 57 '" # lm12pcx456501.hex
+
+if $?fbpoe && $?firebolt_any "local ledcode '\
+ E0 28 60 E3 67 85 67 49 06 E3 80 D2 18 74 01 28 \
+ 60 E3 67 AD 75 1A 67 C2 77 20 32 0E 87 32 08 87 \
+ 67 49 06 E3 80 D2 1A 74 0F 12 E2 85 05 D2 0F 71 \
+ 33 52 00 12 E1 85 05 D2 1F 71 3D 52 00 12 E0 85 \
+ 05 D2 05 71 47 52 00 3A 68 32 00 97 75 55 12 A0 \
+ FE E3 02 0A 50 32 01 97 75 61 12 BA FE E3 02 0A \
+ 50 12 BA FE E3 95 75 73 85 12 A0 FE E3 95 75 C2 \
+ 85 77 B4 12 A0 FE E3 95 75 7D 85 77 BB 16 E0 DA \
+ 02 71 BB 77 C2 32 05 97 71 95 32 02 97 71 B4 06 \
+ E1 D2 01 71 B4 06 E3 67 AD 75 B4 32 03 97 71 C2 \
+ 32 04 97 75 BB 06 E2 D2 07 71 BB 77 C2 12 80 F8 \
+ 15 1A 00 57 32 0E 87 32 0E 87 57 32 0E 87 32 0F \
+ 87 57 32 0F 87 32 0E 87 57'" # poe48p56504.hex
+
+#Override Default Firebolt LED program for felix
+if $?felix || $?felix15 "local ledcode '\
+ E0 28 60 E3 67 6B 67 A7 06 E3 80 D2 18 74 01 02 \
+ 18 28 60 E3 67 49 02 19 28 60 E3 67 49 32 0E 87 \
+ 32 0E 87 32 0E 87 32 0E 87 12 E2 85 05 D2 0F 71 \
+ 33 52 00 12 E1 85 05 D2 1F 71 3D 52 00 12 E0 85 \
+ 05 D2 05 71 47 52 00 3A 68 67 CF 75 52 32 0E 87 \
+ 77 55 32 0F 87 32 00 97 75 5E 32 0E 87 57 32 01 \
+ 97 75 67 32 0E 87 57 32 0F 87 57 32 00 97 75 77 \
+ 12 A0 FE E3 02 0A 50 32 01 97 75 83 12 BC FE E3 \
+ 02 0A 50 12 BC FE E3 95 75 95 85 12 A0 FE E3 95 \
+ 75 E4 85 77 D6 12 A0 FE E3 95 75 9F 85 77 DD 16 \
+ E0 DA 02 71 DD 77 E4 32 05 97 71 B7 32 02 97 71 \
+ D6 06 E1 D2 01 71 D6 06 E3 67 CF 75 D6 32 03 97 \
+ 71 E4 32 04 97 75 DD 06 E2 D2 07 71 DD 77 E4 12 \
+ 80 F8 15 1A 00 57 32 0E 87 32 0E 87 57 32 0E 87 \
+ 32 0F 87 57 32 0E 87 32 0F 87 57'"  # sdk56102.hex
+
+#Override Default Felix LED program for felix48
+if $?felix48 && $?felix || $?felix15 "local ledcode '\
+ E0 28 60 E3 67 6B 67 A7 06 E3 80 D2 18 74 01 02 \
+ 18 28 60 E3 67 49 02 19 28 60 E3 67 49 32 0E 87 \
+ 32 0E 87 32 0E 87 32 0E 87 12 E2 85 05 D2 0F 71 \
+ 33 52 00 12 E1 85 05 D2 1F 71 3D 52 00 12 E0 85 \
+ 05 D2 05 71 47 52 00 3A 68 67 CF 75 52 32 0E 87 \
+ 77 55 32 0F 87 32 00 97 75 5E 32 0E 87 57 32 01 \
+ 97 75 67 32 0E 87 57 32 0F 87 57 32 00 97 75 77 \
+ 12 A0 FE E3 02 0A 50 32 01 97 75 83 12 BC FE E3 \
+ 02 0A 50 12 BC FE E3 95 75 95 85 12 A0 FE E3 95 \
+ 75 E4 85 77 D6 12 A0 FE E3 95 75 9F 85 77 DD 16 \
+ E0 DA 02 71 DD 77 E4 32 05 97 71 B7 32 02 97 71 \
+ D6 06 E1 D2 01 71 D6 06 E3 67 CF 75 D6 32 03 97 \
+ 71 E4 32 04 97 75 DD 06 E2 D2 07 71 DD 77 E4 12 \
+ 80 F8 15 1A 00 57 32 0E 87 32 0E 87 57 32 0E 87 \
+ 32 0F 87 57 32 0F 87 32 0E 87 57'"  # felix48.hex
+
+if $?easyrider_any "local ledcode '\
+ E0 28 60 E3 67 59 67 95 06 E3 80 28 60 E3 67 95 \
+ 67 59 06 E3 80 D2 0C 74 01 28 60 E3 67 BD 75 26 \
+ 67 D2 67 59 77 2E 32 0E 87 32 08 87 67 C4 06 E3 \
+ 80 D2 0D 74 19 12 E2 85 05 D2 0F 71 3F 52 00 12 \
+ E1 85 05 D2 1F 71 49 52 00 12 E0 85 05 D2 05 71 \
+ 53 52 00 67 C4 67 C4 3A 38 32 00 97 75 65 12 A0 \
+ FE E3 02 0A 50 32 01 97 75 71 12 AD FE E3 02 0A \
+ 50 12 AD FE E3 95 75 83 85 12 A0 FE E3 95 75 D2 \
+ 85 77 C4 12 A0 FE E3 95 75 8D 85 77 CB 16 E0 DA \
+ 02 71 CB 77 D2 32 05 97 71 A5 32 02 97 71 C4 06 \
+ E1 D2 01 71 C4 06 E3 67 BD 75 C4 32 03 97 71 D2 \
+ 32 04 97 75 CB 06 E2 D2 07 71 CB 77 D2 12 80 F8 \
+ 15 1A 00 57 32 0E 87 32 0E 87 57 32 0E 87 32 0F \
+ 87 57 32 0F 87 32 0E 87 57'"   # sdk56601.hex
+
+#Override Default Easyrider LED program for 56602
+if $?easyrider_1x1 "local ledcode '\
+ E0 60 E1 67 7C 67 7C 06 E1 80 D2 0C 74 01 02 0C \
+ 28 60 E1 67 75 75 1D 67 8A 67 39 77 25 32 0E 87 \
+ 32 08 87 67 7C 06 E1 D2 00 02 00 74 10 12 E0 85 \
+ 05 D2 05 71 37 52 00 3A 38 32 00 97 75 45 12 A0 \
+ FE E1 02 0A 50 32 01 97 75 51 12 AD FE E1 02 0A \
+ 50 12 AD FE E1 95 75 63 85 12 A0 FE E1 95 75 8A \
+ 85 77 7C 12 A0 FE E1 95 75 6D 85 77 83 16 E0 DA \
+ 02 71 83 77 8A 12 80 F8 15 1A 00 57 32 0E 87 32 \
+ 0E 87 57 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 \
+ 57'"   # sdk56602.hex
+
+#Override Default  LED program for 53300
+if $?mirage24 "local ledcode '\
+ E0 28 60 E3 67 6B 67 2F 06 E3 80 D2 18 74 01 12 \
+ E2 85 05 D2 0F 71 19 52 00 12 E1 85 05 D2 1F 71 \
+ 23 52 00 12 E0 85 05 D2 05 71 2D 52 00 3A 30 32 \
+ 00 97 75 3B 12 A0 FE E3 02 0A 50 32 01 97 75 47 \
+ 12 BC FE E3 02 0A 50 12 BC FE E3 95 75 59 85 12 \
+ A0 FE E3 95 75 A2 85 77 9A 12 A0 FE E3 95 75 63 \
+ 85 77 9E 16 E0 DA 02 71 9E 77 A2 32 05 97 71 7B \
+ 32 02 97 71 9A 06 E1 D2 01 71 9A 06 E3 67 93 75 \
+ 9A 32 03 97 71 A2 32 04 97 75 9E 06 E2 D2 07 71 \
+ 9E 77 A2 12 80 F8 15 1A 00 57 32 0F 87 57 32 0E \
+ 87 57 32 0E 87 57'"  # sdk53300.hex
+
+#Override Default LED program for 56314
+if $?bcm56314p24ref "local ledcode '\
+ E0 28 60 E3 67 79 67 3D 06 E3 80 D2 18 74 01 28 \
+ 60 E3 67 79 67 A8 06 E3 80 D2 1C 74 0F 12 E2 85 \
+ 05 D2 0F 71 27 52 00 12 E1 85 05 D2 1F 71 31 52 \
+ 00 12 E0 85 05 D2 05 71 3B 52 00 3A 38 32 00 97 \
+ 75 49 12 A0 FE E3 02 0A 50 32 01 97 75 55 12 BC \
+ FE E3 02 0A 50 12 BC FE E3 95 75 67 85 12 A0 FE \
+ E3 95 75 B0 85 77 A8 12 A0 FE E3 95 75 71 85 77 \
+ AC 16 E0 DA 02 71 AC 77 B0 32 05 97 71 89 32 02 \
+ 97 71 A8 06 E1 D2 01 71 A8 06 E3 67 A1 75 A8 32 \
+ 03 97 71 B0 32 04 97 75 AC 06 E2 D2 07 71 AC 77 \
+ B0 12 80 F8 15 1A 00 57 32 0F 87 57 32 0E 87 57 \
+ 32 0E 87 57'"  # bcm956314p24ref.hex
+
+if $?bradley "local ledcode '\
+ E0 28 60 F2 67 1B 06 F2 80 D2 14 74 01 86 F3 12 \
+ F0 85 05 D2 05 71 19 52 00 3A 28 32 00 97 75 27 \
+ 12 A8 FE F2 02 0A 50 32 01 97 75 33 12 BC FE F2 \
+ 02 0A 50 12 BC FE F2 95 75 45 85 12 A8 FE F2 95 \
+ 75 91 85 77 57 12 A8 FE F2 95 75 4F 85 77 8A 16 \
+ F0 DA 02 71 8A 77 91 06 F2 12 94 F8 15 02 02 C1 \
+ 74 6E 02 04 C1 74 6E 02 08 C1 74 6E 77 74 C6 F3 \
+ 74 91 77 8A 06 F2 67 7C 75 83 77 91 12 80 F8 15 \
+ 1A 00 57 32 0E 87 32 0E 87 57 32 0E 87 32 0F 87 \
+ 57 32 0F 87 32 0E 87 57'"     # sdk56800.hex
+
+if $?humv "local ledcode '\
+ E0 28 60 F2 67 21 06 F2 80 D2 08 74 0F F2 02 D2 \
+ 12 74 01 86 F3 12 F0 85 05 D2 05 71 1F 52 00 3A \
+ 20 32 00 97 75 2D 12 A8 FE F2 02 0A 50 32 01 97 \
+ 75 39 12 BA FE F2 02 0A 50 12 BA FE F2 95 75 4B \
+ 85 12 A8 FE F2 95 75 97 85 77 5D 12 A8 FE F2 95 \
+ 75 55 85 77 90 16 F0 DA 02 71 90 77 97 06 F2 12 \
+ 94 F8 15 02 02 C1 74 74 02 04 C1 74 74 02 08 C1 \
+ 74 74 77 7A C6 F3 74 97 77 90 06 F2 67 82 75 89 \
+ 77 97 12 80 F8 15 1A 00 57 32 0E 87 32 0E 87 57 \
+ 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 57'" # sdk56700.hex
+
+if $?bradley_1g "local ledcode '\
+ E0 28 60 E3 67 2F 67 6B 06 E3 80 D2 14 74 01 12 \
+ E2 85 05 D2 0F 71 19 52 00 12 E1 85 05 D2 1F 71 \
+ 23 52 00 12 E0 85 05 D2 05 71 2D 52 00 3A 50 32 \
+ 00 97 75 3B 12 A0 FE E3 02 0A 50 32 01 97 75 47 \
+ 12 B4 FE E3 02 0A 50 12 B4 FE E3 95 75 59 85 12 \
+ A0 FE E3 95 75 A8 85 77 9A 12 A0 FE E3 95 75 63 \
+ 85 77 A1 16 E0 DA 02 71 A1 77 A8 32 05 97 71 7B \
+ 32 02 97 71 9A 06 E1 D2 01 71 9A 06 E3 67 93 75 \
+ 9A 32 03 97 71 A8 32 04 97 75 A1 06 E2 D2 07 71 \
+ A1 77 A8 12 80 F8 15 1A 00 57 32 0E 87 32 0E 87 \
+ 57 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 57 '"  # sdk56800c.hex
+
+if $?goldwing "local ledcode '\
+ E0 28 60 F3 D2 10 75 0E 67 3B 67 94 77 12 67 94 \
+ 67 3B 06 F3 80 D2 14 74 01 86 F4 12 F2 85 05 D2 \
+ 0F 71 25 52 00 12 F1 85 05 D2 1F 71 2F 52 00 12 \
+ F0 85 05 D2 05 71 39 52 00 3A 50 32 00 97 75 47 \
+ 12 A8 FE F3 02 0A 50 32 01 97 75 53 12 BC FE F3 \
+ 02 0A 50 12 BC FE F3 95 75 65 85 12 A8 FE F3 95 \
+ 75 C0 85 77 77 12 A8 FE F3 95 75 6F 85 77 B9 16 \
+ F0 DA 02 71 B9 77 C0 06 F3 12 94 F8 15 02 02 C1 \
+ 74 8E 02 04 C1 74 8E 02 08 C1 74 8E 77 B2 C6 F4 \
+ 74 C0 77 B9 06 F3 67 AB 75 B2 32 04 75 B2 32 03 \
+ 97 71 C0 06 F2 D2 07 71 B9 77 C0 12 80 F8 15 1A \
+ 00 57 32 0E 87 32 0E 87 57 32 0E 87 32 0F 87 57 \
+ 32 0F 87 32 0E 87 57 '"                          # sdk56580.hex
+
+if $?humv && $?lm "local ledcode '\
+ 02 04 28 D2 08 74 0A F2 02 28 32 07 67 29 75 11 \
+ D7 87 60 E4 67 30 06 E4 60 E4 67 4C 06 E4 32 08 \
+ D7 87 80 D2 12 74 02 3A 30 12 80 F8 15 1A 00 57 \
+ 06 E4 12 94 F8 15 02 10 C1 70 42 12 D2 FE E4 02 \
+ 0A 50 12 D2 FE E4 95 75 6D 85 77 68 06 E4 12 94 \
+ F8 15 02 20 C1 70 5E 12 C0 FE E4 02 0A 50 12 C0 \
+ FE E4 95 75 6D 85 77 68 32 0E D7 87 57 32 0F D7 \
+ 87 57 '"                                         # lm12p56802.hex
+
+
+if $?raptor "local ledcode '\
+ 02 06 28 60 FF 67 64 67 93 06 FF 80 D2 36 74 02 \
+ 02 04 28 60 FF 67 BB 75 1E 32 0E 87 77 21 32 0F \
+ 87 67 7D 06 FF 80 D2 06 74 12 02 01 28 60 FF 67 \
+ BB 75 38 32 0E 87 77 3B 32 0F 87 67 7D 06 FF 80 \
+ D2 03 74 2C 12 FE 85 05 D2 0F 71 4E 52 00 12 FD \
+ 85 05 D2 1F 71 58 52 00 12 FC 85 05 D2 05 71 62 \
+ 52 00 3A C8 32 01 97 75 76 32 00 97 75 C9 16 FC \
+ DA 02 71 C9 77 D0 32 00 97 75 C2 77 D0 32 00 97 \
+ 75 86 32 0E 87 57 32 01 97 75 8F 32 0E 87 57 32 \
+ 0F 87 57 32 05 97 71 A3 32 02 97 71 C2 06 FD D2 \
+ 01 71 C2 06 FF 67 BB 75 C2 32 03 97 71 D0 32 04 \
+ 97 75 C9 06 FE D2 07 71 C9 77 D0 12 A0 F8 15 1A \
+ 00 57 32 0E 87 32 0E 87 57 32 0E 87 32 0F 87 57 \
+ 32 0F 87 32 0E 87 57 00 00 00 00 00 00 00 00 00'" # sdk56018.hex
+
+if $?raptor && $?rap24_ref "local ledcode '\
+ 02 06 60 E1 67 48 67 31 06 E1 80 D2 1E 71 02 02 \
+ 05 60 E1 67 48 67 31 06 E1 90 D2 03 74 11 02 02 \
+ 60 E1 67 48 67 31 06 E1 90 D2 00 74 20 86 E0 3A \
+ 38 06 E1 67 50 75 57 28 32 00 32 01 B7 97 75 57 \
+ 16 E0 CA 05 74 5B 77 57 06 E1 67 50 75 57 77 5B \
+ 12 A0 F8 15 1A 00 57 32 0F 87 57 32 0E 87 57 00'" # sdk56214.hex
+
+if $?raven_eb_48p "local ledcode '\
+ 02 06 28 60 C3 67 30 67 6C 06 C3 80 D2 1E 74 02 \
+ 12 C2 85 05 D2 0F 71 1A 52 00 12 C1 85 05 D2 1F \
+ 71 24 52 00 12 C0 85 05 D2 05 71 2E 52 00 3A 60 \
+ 32 00 97 75 3C 12 C0 FE C3 02 0A 50 32 01 97 75 \
+ 48 12 E0 FE C3 02 0A 50 12 E0 FE C3 95 75 5A 85 \
+ 12 C0 FE C3 95 75 A9 85 77 9B 12 C0 FE C3 95 75 \
+ 64 85 77 A2 16 C0 DA 02 71 A2 77 A9 32 05 97 71 \
+ 7C 32 02 97 71 9B 06 C1 D2 01 71 9B 06 C3 67 94 \
+ 75 9B 32 03 97 71 A9 32 04 97 75 A2 06 C2 D2 07 \
+ 71 A2 77 A9 12 A0 F8 15 1A 00 57 32 0E 87 32 0E \
+ 87 57 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 57'" #bcm956024p48ref.hex
+
+if $?BCM956024R50T "local ledcode '\
+ 02 06 28 60 C3 67 30 67 6C 06 C3 80 D2 1E 74 02 \
+ 12 C2 85 05 D2 0F 71 1A 52 00 12 C1 85 05 D2 1F \
+ 71 24 52 00 12 C0 85 05 D2 05 71 2E 52 00 3A 60 \
+ 32 00 97 75 3C 12 C0 FE C3 02 0A 50 32 01 97 75 \
+ 48 12 E0 FE C3 02 0A 50 12 E0 FE C3 95 75 5A 85 \
+ 12 C0 FE C3 95 75 A9 85 77 9B 12 C0 FE C3 95 75 \
+ 64 85 77 A2 16 C0 DA 02 71 A2 77 A9 32 05 97 75 \
+ 7C 32 02 97 71 9B 06 C1 D2 01 71 9B 06 C3 67 94 \
+ 75 9B 32 03 97 71 A9 32 04 97 75 A2 06 C2 D2 07 \
+ 71 A2 77 A9 12 A0 F8 15 1A 00 57 32 0E 87 32 0E \
+ 87 57 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 57'" #bcm956024r50t.hex
+
+if $?scorpion || $?conqueror "local ledcode '\
+ 02 18 28 60 E1 67 12 06 E1 90 D2 00 74 02 86 E0 \
+ 3A 18 67 2D 75 34 28 32 00 32 01 B7 97 75 38 16 \
+ E0 CA 05 74 38 77 34 67 2D 75 34 77 38 12 A0 F8 \
+ 15 1A 00 57 32 0F 87 57 32 0E 87 57 00 00 00 00 \
+ 00 00 00'" #sdk56820.hex
+
+if $?scorpion && $?BCM956820R24XG "local ledcode '\
+ 02 01 28 67 D0 02 02 28 67 D6 67 D0 02 01 28 67 \
+ D6 02 04 28 67 D0 02 03 28 67 D6 67 D0 02 04 28 \
+ 67 D6 02 05 28 67 D0 02 06 28 67 D6 67 D0 02 05 \
+ 28 67 D6 02 07 28 67 D0 02 08 28 67 D6 67 D0 02 \
+ 07 28 67 D6 02 09 28 67 D0 02 0A 28 67 D6 67 D0 \
+ 02 09 28 67 D6 02 0C 28 67 D0 02 0B 28 67 D6 67 \
+ D0 02 0C 28 67 D6 02 0D 28 67 D0 02 0E 28 67 D6 \
+ 67 D0 02 0D 28 67 D6 02 0F 28 67 D0 02 10 28 67 \
+ D6 67 D0 02 0F 28 67 D6 02 11 28 67 D0 02 12 28 \
+ 67 D6 67 D0 02 11 28 67 D6 02 14 28 67 D0 02 13 \
+ 28 67 D6 67 D0 02 14 28 67 D6 02 15 28 67 D0 02 \
+ 16 28 67 D6 67 D0 02 15 28 67 D6 02 17 28 67 D0 \
+ 02 18 28 67 D6 67 D0 02 17 28 67 D6 86 E0 3A 30 \
+ 67 F1 75 F8 77 FC 67 F1 75 F8 28 32 00 32 01 B7 \
+ 97 75 F8 16 E0 CA 05 74 FC 77 F8 67 F1 75 F8 77 \
+ FC 12 A0 F8 15 1A 00 57 32 0F 87 57 32 0E 87 57 \
+ '" #bcm956820r24xg.hex
+
+if $?valkyrie "local ledcode '\
+ 02 02 67 A9 67 94 02 03 67 A9 67 94 02 05 67 A9 \
+ 67 94 02 04 67 A9 67 94 02 06 67 A9 67 94 02 07 \
+ 67 A9 67 94 02 12 67 A9 67 94 02 13 67 A9 67 94 \
+ 02 0E 67 A9 67 94 02 0F 67 A9 67 94 02 11 67 A9 \
+ 67 94 02 10 67 A9 67 94 02 1A 67 A9 67 94 02 20 \
+ 67 A9 67 94 02 21 67 A9 67 94 02 22 67 A9 67 94 \
+ 02 23 67 A9 67 94 02 24 67 A9 67 94 02 2F 67 A9 \
+ 67 94 02 2E 67 A9 67 94 02 1B 67 A9 67 94 02 2B \
+ 67 A9 67 94 02 2C 67 A9 67 94 02 2D 67 A9 67 94 \
+ 86 E0 3A 30 67 AF 75 B6 28 32 00 32 01 B7 97 75 \
+ B6 16 E0 CA 05 74 BA 77 B6 67 AF 75 B6 77 BA 12 \
+ A0 F8 15 1A 00 57 32 0F 87 57 32 0E 87 57 00 00 \
+ 00'" #sdk56680.hex
+
+if $?valkyrie2 "local ledcode '\
+ 02 1E 67 A9 67 94 02 1F 67 A9 67 94 02 21 67 A9 \
+ 67 94 02 20 67 A9 67 94 02 22 67 A9 67 94 02 23 \
+ 67 A9 67 94 02 24 67 A9 67 94 02 25 67 A9 67 94 \
+ 02 26 67 A9 67 94 02 27 67 A9 67 94 02 29 67 A9 \
+ 67 94 02 28 67 A9 67 94 02 2A 67 A9 67 94 02 2B \
+ 67 A9 67 94 02 2C 67 A9 67 94 02 2D 67 A9 67 94 \
+ 02 2E 67 A9 67 94 02 2F 67 A9 67 94 02 31 67 A9 \
+ 67 94 02 30 67 A9 67 94 02 32 67 A9 67 94 02 33 \
+ 67 A9 67 94 02 34 67 A9 67 94 02 35 67 A9 67 94 \
+ 86 E0 3A 30 67 AF 75 B6 28 32 00 32 01 B7 97 75 \
+ B6 16 E0 CA 05 74 BA 77 B6 67 AF 75 B6 77 BA 12 \
+ A0 F8 15 1A 00 57 32 0F 87 57 32 0E 87 57 00 00 \
+ 00'" #sdk56685.hex
+
+if $?hawkeye_p24 "local ledcode '\
+ 02 01 28 60 E3 67 43 67 1C 06 E3 80 D2 19 74 02 \
+ 12 E0 85 05 D2 03 71 1A 52 00 3A 60 32 00 32 01 \
+ B7 97 75 2B 12 E4 FE E3 02 01 50 12 E4 FE E3 95 \
+ 75 3B 85 06 E3 67 55 75 6A 77 5C 16 E0 DA 01 71 \
+ 6A 77 5C 06 E3 67 55 75 6A 32 03 97 71 5C 32 04 \
+ 97 75 6A 77 63 12 A0 F8 15 1A 00 57 32 0E 87 32 \
+ 0F 87 57 32 0F 87 32 0E 87 57 32 0F 87 32 0F 87 \
+ 57'"  #bcm953314p24ref.hex
+
+if $?hawkeye_k24 "local ledcode '\
+ 02 01 28 60 E1 67 3D 67 1C 06 E1 80 D2 19 74 02 \
+ 12 E0 85 05 D2 05 71 1A 52 00 3A 30 32 00 32 01 \
+ B7 97 75 2B 12 E2 FE E1 02 0A 50 12 E2 FE E1 95 \
+ 75 35 85 77 50 16 E0 DA 02 71 4C 77 50 06 E1 67 \
+ 45 75 50 77 4C 12 A0 F8 15 1A 00 57 32 0E 87 57 \
+ 32 0F 87 57 00 00 00 00 00 00 00 00 00 00 00 00'" #bcm953314k24.hex
+
+if !"expr $pcidev + 0 == 0xb624" "local ledcode '\
+ 02 1C 28 67 18 02 1D 28 67 18 02 1E 28 67 18 02 \
+ 1F 28 67 18 86 E0 3A 08 67 3B 75 20 67 46 77 24 \
+ 67 42 77 42 28 32 00 32 01 B7 97 75 42 16 E0 CA \
+ 05 74 46 77 42 67 3B 75 42 77 46 12 A0 F8 15 1A \
+ 00 57 32 0F 87 57 32 0E 87 57 00 00 00 00 00 00'" #sdk56624.hex
+
+if !"expr $pcidev + 0 == 0xb626" "local ledcode '\
+ 02 1A 28 67 22 02 1B 28 67 22 02 1C 28 67 22 02 \
+ 1D 28 67 22 02 1E 28 67 22 02 1F 28 67 22 86 E0 \
+ 3A 08 67 3D 75 44 28 32 00 32 01 B7 97 75 48 16 \
+ E0 CA 05 74 48 77 44 67 3D 75 44 77 48 12 A0 F8 \
+ 15 1A 00 57 32 0F 87 57 32 0E 87 57 00 00 00 00'" #sdk56626.hex
+
+if !"expr $pcidev + 0 == 0xb628" "local ledcode '\
+ 02 02 28 67 2C 02 0E 28 67 2C 02 1A 28 67 2C 02 \
+ 1B 28 67 2C 02 1C 28 67 2C 02 1D 28 67 2C 02 1E \
+ 28 67 2C 02 1F 28 67 2C 86 E0 3A 08 67 47 75 4E \
+ 28 32 00 32 01 B7 97 75 52 16 E0 CA 05 74 52 77 \
+ 4E 67 47 75 4E 77 52 12 A0 F8 15 1A 00 57 32 0F \
+ 87 57 32 0E 87 57 00 00 00 00 00 00 00 00 00 00'" #sdk56628.hex
+
+if !"expr $pcidev + 0 == 0xb629" "local ledcode '\
+ 02 02 28 67 2C 02 0E 28 67 2C 02 1A 28 67 2C 02 \
+ 1B 28 67 2C 02 1C 28 67 2C 02 1D 28 67 2C 02 1E \
+ 28 67 2C 02 1F 28 67 2C 86 E0 3A 08 67 47 75 4E \
+ 28 32 00 32 01 B7 97 75 52 16 E0 CA 05 74 52 77 \
+ 4E 67 47 75 4E 77 52 12 A0 F8 15 1A 00 57 32 0F \
+ 87 57 32 0E 87 57 00 00 00 00 00 00 00 00 00 00'" #sdk56629.hex
+
+if !"expr $pcidev + 0 == 0xb634" "local ledcode '\
+ 02 1A 28 67 18 02 1B 28 67 18 02 1C 28 67 18 02 \
+ 1D 28 67 18 86 E0 3A 08 67 3B 75 20 67 46 77 24 \
+ 67 42 77 42 28 32 00 32 01 B7 97 75 42 16 E0 CA \
+ 05 74 46 77 42 67 3B 75 42 77 46 12 A0 F8 15 1A \
+ 00 57 32 0F 87 57 32 0E 87 57 00 00 00 00 00 00'" #sdk56634.hex
+
+if !"expr $pcidev + 0 == 0xb630" "local ledcode '\
+ 02 1A 28 67 18 02 1B 28 67 18 02 1C 28 67 18 02 \
+ 1D 28 67 18 86 E0 3A 08 67 3B 75 20 67 46 77 24 \
+ 67 42 77 42 28 32 00 32 01 B7 97 75 42 16 E0 CA \
+ 05 74 46 77 42 67 3B 75 42 77 46 12 A0 F8 15 1A \
+ 00 57 32 0F 87 57 32 0E 87 57 00 00 00 00 00 00'" #sdk56634.hex
+
+if !"expr $pcidev + 0 == 0xb636" "local ledcode '\
+ 02 2A 28 67 22 02 32 28 67 22 02 1A 28 67 22 02 \
+ 1B 28 67 22 02 1C 28 67 22 02 1D 28 67 22 86 E0 \
+ 3A 08 67 3D 75 44 28 32 00 32 01 B7 97 75 48 16 \
+ E0 CA 05 74 48 77 44 67 3D 75 44 77 48 12 A0 F8 \
+ 15 1A 00 57 32 0F 87 57 32 0E 87 57 00 00 00 00'" #sdk56636.hex
+
+if !"expr $pcidev + 0 == 0xb638" "local ledcode '\
+ 02 1E 28 67 2C 02 26 28 67 2C 02 2A 28 67 2C 02 \
+ 32 28 67 2C 02 1A 28 67 2C 02 1B 28 67 2C 02 1C \
+ 28 67 2C 02 1D 28 67 2C 86 E0 3A 08 67 47 75 4E \
+ 28 32 00 32 01 B7 97 75 52 16 E0 CA 05 74 52 77 \
+ 4E 67 47 75 4E 77 52 12 A0 F8 15 1A 00 57 32 0F \
+ 87 57 32 0E 87 57 00 00 00 00 00 00 00 00 00 00'" #sdk56638.hex
+
+if !"expr $pcidev + 0 == 0xb639" "local ledcode '\
+ 02 1E 28 67 2C 02 26 28 67 2C 02 2A 28 67 2C 02 \
+ 32 28 67 2C 02 1A 28 67 2C 02 1B 28 67 2C 02 1C \
+ 28 67 2C 02 1D 28 67 2C 86 E0 3A 08 67 47 75 4E \
+ 28 32 00 32 01 B7 97 75 52 16 E0 CA 05 74 52 77 \
+ 4E 67 47 75 4E 77 52 12 A0 F8 15 1A 00 57 32 0F \
+ 87 57 32 0E 87 57 00 00 00 00 00 00 00 00 00 00'" #sdk56639.hex
+
+if !"expr $pcidev + 0 == 0xb334" "local ledcode '\
+ 02 02 28 60 E1 67 3D 67 1C 06 E1 80 D2 1E 74 02 \
+ 12 E0 85 05 D2 05 71 1A 52 00 3A 38 32 00 32 01 \
+ B7 97 75 2B 12 E2 FE E1 02 0A 50 12 E2 FE E1 95 \
+ 75 35 85 77 4C 16 E0 DA 02 71 50 77 4C 06 E1 67 \
+ 45 75 4C 77 50 12 A0 F8 15 1A 00 57 32 0F 87 57 \
+ 32 0E 87 57 00 00 00 00 00 00 00 00 00 00 00 00'" #sdk56334.hex
+
+if $?apollo "local ledcode '\
+ 02 1E 28 60 E0 67 58 67 73 06 E0 80 28 60 E0 67 \
+ 73 67 58 06 E0 80 D2 36 74 02 02 1A 28 60 E0 67 \
+ 9B 75 29 67 B0 67 58 77 31 32 0E 87 32 08 87 67 \
+ A2 06 E0 80 D2 1E 74 1C 12 E2 85 05 D2 0F 71 42 \
+ 52 00 12 E1 85 05 D2 1F 71 4C 52 00 12 E3 85 05 \
+ D2 05 71 56 52 00 3A 70 32 00 97 75 64 32 01 97 \
+ 71 6B 77 B0 32 01 97 71 A9 77 A2 16 E3 DA 02 71 \
+ A9 77 B0 32 05 97 75 83 32 02 97 71 A2 06 E1 D2 \
+ 01 71 A2 06 E0 67 9B 75 A2 32 03 97 71 B0 32 04 \
+ 97 75 A9 06 E2 D2 07 71 A9 77 B0 12 A0 F8 15 1A \
+ 00 57 32 0E 87 32 0E 87 57 32 0E 87 32 0F 87 57 \
+ 32 0F 87 32 0E 87 57 00 00 00 00 00 00 00 00 00'" #sdk56524.hex
+
+if $?generic8led "local ledcode '\
+ 06 E1 D2 40 71 11 E0 60 E1 16 E3 DA 01 71 15 60 \
+ E3 67 5D 75 2B 12 01 61 E3 67 71 28 67 32 86 E0 \
+ 16 E2 81 61 E2 DA 1E 75 2B 3A 08 E9 61 E2 86 E1 \
+ 77 00 67 5D 75 38 77 3C 67 64 77 64 67 41 67 4F \
+ 57 28 32 01 97 75 64 16 E0 CA 05 74 68 77 64 28 \
+ 32 00 97 75 64 16 E0 CA 05 74 68 77 64 12 A0 F8 \
+ 15 1A 00 57 32 0F 87 57 32 0E 87 57 09 75 64 77 \
+ 68 12 05 67 6C 12 04 67 6C 12 03 67 6C 12 02 67 \
+ 6C 12 01 67 6C 12 00 67 6C 57 00 00 00 00 00 00'" #generic8led.hex
+
+# Download LED code into LED processor and enable (if applicable).
+
+if $?feature_led_proc && $?ledcode && !$?simulator \
+	"led prog $ledcode; \
+	 led auto on; led start"
+
+# If loading multiple rc.soc, upon loading the last unit, restart
+# all LED processors so any common blinking is in sync.
+
+if !"expr $?feature_led_proc && !$?simulator && $unit == $units - 1" \
+	"*:led stop; *:led start"
+
+# Run counter DMA task 4 times per second to achieve better
+# ctr_xaui_activity.
+if $?bradley_any \
+        "ctr interval=250000"
+
+# Initialize Hercules UC modid 0 entry to point to the CPU
+if $?herc_any \
+	"w uc 0 1 1"
+
+# Additional configuration for 48-port in Stacking mode.
+# On the 48-port platform, rc.soc is run twice; once on unit 0 and
+# then once on unit 1.  The turbo port on unit N is geN.
+# All turbo port traffic must be tagged; see vlan add below.
+# See $SDK/doc/48-port.txt for more information including how
+# to configure IPG values for line rate operation.
+
+if $?p48 && $?unit0 \
+	"local turbo_port 0; local my_modid 1;"
+
+if $?p48 && $?unit1 \
+	"local turbo_port 1; local my_modid 2;"
+
+if $?p48 \
+	"m config st_is_mirr=0 st_module=1 st_mcnt=1 st_simplex=0 st_link=0; \
+	 m config.g$turbo_port st_link=1; \
+	 m gmacc2.ge$turbo_port ipgt=8 mclkfq=1; \
+	 m fe_maxf maxfr=1560; \
+	 m maxfr maxfr=1568; \
+	 m config2 my_modid=$my_modid; \
+	 port ge$turbo_port speed=2500; \
+	 vlan add 1 pbm=ge$turbo_port ubm=none"
+
+if !$?no_bcm && $?drac_any \
+   "m modport_7_0 port_for_mod1=0xc"
+if !$?no_bcm && $?lynx_any \
+   "m modport_7_0 port_for_mod1=0x1"
+if !$?no_bcm && $?tucana \
+   "stkmode modid=0;"
+if !$?no_bcm && $?tucana && !$?magnum && !$?tucana_nohg \
+   "m modport_7_0 port_for_mod2=0x38; \
+    m imodport_7_0 port_for_mod0=0 port_for_mod1=0 port_for_mod2=0x38; \
+    stkmode modid=0"
+if !$?no_bcm && $?xgs_switch && !$?rcpu_only\
+   "stkmode modid=0; \
+    s CMIC_COS_CTRL_RX CH0_COS_BMP=0,CH1_COS_BMP=0xff, \
+        CH2_COS_BMP=0,CH3_COS_BMP=0"
+
+# Back-to-back Draco setup.
+
+# Draco chips must run at 127MHz. Some older versions
+# are not set to this frequency.
+
+if $?draco_stk && $?unit0 \
+    "i2c probe quiet; bb clock Ref125 127"
+
+# Applies to SDK Baseboard with either internal or external Higigs,
+# as well as the Galahad reference design.
+
+if $?draco_b2b && $?unit0 \
+    "stkmode modid=0; \
+     m modport_7_0 port_for_mod0=0 port_for_mod1=12; \
+     m imodport_7_0 port_for_mod0=0 port_for_mod1=12"
+
+if !$?simulator && $?draco_b2b && $?unit0 \
+     "i2c probe quiet; bb clock Ref125 127"
+
+if $?draco_b2b && $?unit1 \
+    "stkmode modid=1; \
+     m modport_7_0 port_for_mod0=12 port_for_mod1=0; \
+     m imodport_7_0 port_for_mod0=12 port_for_mod1=0"
+
+# Merlin, White Knight, Black Knight setup.
+#	Draco unit 1 is on Herc port 8
+#	Draco unit 2 is on Herc port 1
+
+if $?draco_herc4 && $?unit0 \
+    "w uc.hpic7 0 1 0x0; \
+     w uc.hpic7 1 1 0x2; \
+     w uc.hpic0 0 1 0x100; \
+     w uc.hpic0 1 1 0x0"
+
+if !$?simulator && $?draco_herc4 && $?unit0 \
+     "i2c probe quiet; bb clock Ref125 127"
+
+if $?draco_herc4 && $?unit1 \
+    "stkmode modid=0; \
+     m modport_7_0 port_for_mod0=0 port_for_mod1=12; \
+     m imodport_7_0 port_for_mod0=0 port_for_mod1=12"
+
+if $?draco_herc4 && $?unit2 \
+    "stkmode modid=1; \
+     m modport_7_0 port_for_mod0=12 port_for_mod1=0; \
+     m imodport_7_0 port_for_mod0=12 port_for_mod1=0"
+
+# Lancelot setup
+# (enabled by adding the property "lancelot=1")
+# Notes:
+#	Draco unit 1 is on Herc port 7
+#	Draco unit 2 is on Herc port 8
+#	Draco unit 3 is on Herc port 1
+#	Draco unit 4 is on Herc port 2
+
+if $?lancelot && $?unit0 \
+    "w uc.hpic6 0 1 0x0; \
+     w uc.hpic6 1 1 0x100; \
+     w uc.hpic6 2 1 0x2; \
+     w uc.hpic6 3 1 0x4; \
+     w uc.hpic7 0 1 0x80; \
+     w uc.hpic7 1 1 0x0; \
+     w uc.hpic7 2 1 0x2; \
+     w uc.hpic7 3 1 0x4; \
+     w uc.hpic0 0 1 0x80; \
+     w uc.hpic0 1 1 0x100; \
+     w uc.hpic0 2 1 0x0; \
+     w uc.hpic0 3 1 0x4; \
+     w uc.hpic1 0 1 0x80; \
+     w uc.hpic1 1 1 0x100; \
+     w uc.hpic1 2 1 0x2; \
+     w uc.hpic1 3 1 0x0"
+
+if !$?simulator && $?lancelot && $?unit0 \
+     "i2c probe quiet; bb clock Draco_Core 127"
+
+if $?lancelot && $?unit1 \
+    "stkmode modid=0; \
+     m modport_7_0 port_for_mod0=0 port_for_mod1=12 \
+     port_for_mod2=12 port_for_mod3=12; \
+     m imodport_7_0 port_for_mod0=0 port_for_mod1=12 \
+     port_for_mod2=12 port_for_mod3=12"
+
+if $?lancelot && $?unit2 \
+    "stkmode modid=1; \
+     m modport_7_0 port_for_mod0=12 port_for_mod1=0 \
+     port_for_mod2=12 port_for_mod3=12; \
+     m imodport_7_0 port_for_mod0=12 port_for_mod1=0 \
+     port_for_mod2=12 port_for_mod3=12"
+
+if $?lancelot && $?unit3 \
+    "stkmode modid=2; \
+     m modport_7_0 port_for_mod0=12 port_for_mod1=12 \
+     port_for_mod2=0 port_for_mod3=12; \
+     m imodport_7_0 port_for_mod0=12 port_for_mod1=12 \
+     port_for_mod2=0 port_for_mod3=12"
+
+if $?lancelot && $?unit4 \
+    "stkmode modid=3; \
+     m modport_7_0 port_for_mod0=12 port_for_mod1=12 \
+     port_for_mod2=12 port_for_mod3=0; \
+     m imodport_7_0 port_for_mod0=12 port_for_mod1=12 \
+     port_for_mod2=12 port_for_mod3=0"
+
+# Lynx SDK (TwoLynx) setup
+# (enabled by adding the property "twolynx=1")
+
+if $?twolynx && $?unit0 \
+    "stkmode modid=0; \
+     m modport_7_0 port_for_mod0=0 port_for_mod1=1; \
+     m imodport_7_0 port_for_mod0=0 port_for_mod1=1; \
+     "
+
+if $?twolynx && $?unit1 \
+    "stkmode modid=1; \
+     m modport_7_0 port_for_mod0=1 port_for_mod1=0; \
+     m imodport_7_0 port_for_mod0=1 port_for_mod1=0; \
+     "
+# HercuLynx setup
+# (enabled by adding the property "herculynx=1")
+# Notes:
+#	Lynx unit 1 is on Herc port 1
+#	Lynx unit 2 is on Herc port 2
+#	Lynx unit 3 is on Herc port 3
+#	Lynx unit 4 is on Herc port 4
+#	Lynx unit 5 is on Herc port 5
+#	Lynx unit 6 is on Herc port 6
+#	Lynx unit 7 is on Herc port 7
+#	Lynx unit 8 is on Herc port 8
+
+if $?herculynx && $?unit0 \
+    " \
+     w uc.hpic0 0 1 0x002; \
+     w uc.hpic0 1 1 0x004; \
+     w uc.hpic0 2 1 0x008; \
+     w uc.hpic0 3 1 0x010; \
+     w uc.hpic0 4 1 0x020; \
+     w uc.hpic0 5 1 0x040; \
+     w uc.hpic0 6 1 0x080; \
+     w uc.hpic0 7 1 0x100; \
+                         ; \
+     w uc.hpic1 0 1 0x002; \
+     w uc.hpic1 1 1 0x004; \
+     w uc.hpic1 2 1 0x008; \
+     w uc.hpic1 3 1 0x010; \
+     w uc.hpic1 4 1 0x020; \
+     w uc.hpic1 5 1 0x040; \
+     w uc.hpic1 6 1 0x080; \
+     w uc.hpic1 7 1 0x100; \
+                         ; \
+     w uc.hpic2 0 1 0x002; \
+     w uc.hpic2 1 1 0x004; \
+     w uc.hpic2 2 1 0x008; \
+     w uc.hpic2 3 1 0x010; \
+     w uc.hpic2 4 1 0x020; \
+     w uc.hpic2 5 1 0x040; \
+     w uc.hpic2 6 1 0x080; \
+     w uc.hpic2 7 1 0x100; \
+                         ; \
+     w uc.hpic3 0 1 0x002; \
+     w uc.hpic3 1 1 0x004; \
+     w uc.hpic3 2 1 0x008; \
+     w uc.hpic3 3 1 0x010; \
+     w uc.hpic3 4 1 0x020; \
+     w uc.hpic3 5 1 0x040; \
+     w uc.hpic3 6 1 0x080; \
+     w uc.hpic3 7 1 0x100; \
+                         ; \
+     w uc.hpic4 0 1 0x002; \
+     w uc.hpic4 1 1 0x004; \
+     w uc.hpic4 2 1 0x008; \
+     w uc.hpic4 3 1 0x010; \
+     w uc.hpic4 4 1 0x020; \
+     w uc.hpic4 5 1 0x040; \
+     w uc.hpic4 6 1 0x080; \
+     w uc.hpic4 7 1 0x100; \
+                         ; \
+     w uc.hpic5 0 1 0x002; \
+     w uc.hpic5 1 1 0x004; \
+     w uc.hpic5 2 1 0x008; \
+     w uc.hpic5 3 1 0x010; \
+     w uc.hpic5 4 1 0x020; \
+     w uc.hpic5 5 1 0x040; \
+     w uc.hpic5 6 1 0x080; \
+     w uc.hpic5 7 1 0x100; \
+                         ; \
+     w uc.hpic6 0 1 0x002; \
+     w uc.hpic6 1 1 0x004; \
+     w uc.hpic6 2 1 0x008; \
+     w uc.hpic6 3 1 0x010; \
+     w uc.hpic6 4 1 0x020; \
+     w uc.hpic6 5 1 0x040; \
+     w uc.hpic6 6 1 0x080; \
+     w uc.hpic6 7 1 0x100; \
+                         ; \
+     w uc.hpic7 0 1 0x002; \
+     w uc.hpic7 1 1 0x004; \
+     w uc.hpic7 2 1 0x008; \
+     w uc.hpic7 3 1 0x010; \
+     w uc.hpic7 4 1 0x020; \
+     w uc.hpic7 5 1 0x040; \
+     w uc.hpic7 6 1 0x080; \
+     w uc.hpic7 7 1 0x100; \
+                         ; \
+     "
+
+if $?herculynx && $?lynx_any \
+     "m modport_7_0 \
+     port_for_mod0=1 port_for_mod1=1 \
+     port_for_mod2=1 port_for_mod3=1 \
+     port_for_mod4=1 port_for_mod5=1 \
+     port_for_mod6=1 port_for_mod7=1; \
+     m imodport_7_0 \
+     port_for_mod0=1 port_for_mod1=1 \
+     port_for_mod2=1 port_for_mod3=1 \
+     port_for_mod4=1 port_for_mod5=1 \
+     port_for_mod6=1 port_for_mod7=1; \
+     "
+
+if $?herculynx && $?unit1 \
+    "stkmode modid=0"
+
+if $?herculynx && $?unit2 \
+    "stkmode modid=1"
+
+if $?herculynx && $?unit3 \
+    "stkmode modid=2"
+
+if $?herculynx && $?unit4 \
+    "stkmode modid=3"
+
+if $?herculynx && $?unit5 \
+    "stkmode modid=4"
+
+if $?herculynx && $?unit6 \
+    "stkmode modid=5"
+
+if $?herculynx && $?unit7 \
+    "stkmode modid=6"
+
+if $?herculynx && $?unit8 \
+    "stkmode modid=7"
+
+# LynxaLot setup
+# (enabled by adding the property "lynxalot=1")
+# Notes:
+#	Lynx unit 0 is on Herc port 3 (hg2/hpic2) (mod 0)
+#	Lynx unit 1 is on Herc port 4 (hg3/hpic3) (mod 1)
+#	Higig conn 0 is on Herc port 5 (hg4/hpic4)
+#	Higig conn 1 is on Herc port 6 (hg5/hpic5)
+#	Draco unit 3 is on Herc port 7 (hg6/hpic6) (mod 2)
+#	Draco unit 4 is on Herc port 8 (hg7/hpic7) (mod 3)
+#	Draco unit 5 is on Herc port 1 (hg0/hpic0) (mod 4)
+#	Draco unit 6 is on Herc port 2 (hg1/hpic1) (mod 5)
+
+if $?lynxalot && $?unit2 \
+    " \
+     w uc.hpic0 0 1 0x008; \
+     w uc.hpic0 1 1 0x010; \
+     w uc.hpic0 2 1 0x080; \
+     w uc.hpic0 3 1 0x100; \
+     w uc.hpic0 4 1 0x002; \
+     w uc.hpic0 5 1 0x004; \
+                         ; \
+     w uc.hpic1 0 1 0x008; \
+     w uc.hpic1 1 1 0x010; \
+     w uc.hpic1 2 1 0x080; \
+     w uc.hpic1 3 1 0x100; \
+     w uc.hpic1 4 1 0x002; \
+     w uc.hpic1 5 1 0x004; \
+                         ; \
+     w uc.hpic2 0 1 0x008; \
+     w uc.hpic2 1 1 0x010; \
+     w uc.hpic2 2 1 0x080; \
+     w uc.hpic2 3 1 0x100; \
+     w uc.hpic2 4 1 0x002; \
+     w uc.hpic2 5 1 0x004; \
+                         ; \
+     w uc.hpic3 0 1 0x008; \
+     w uc.hpic3 1 1 0x010; \
+     w uc.hpic3 2 1 0x080; \
+     w uc.hpic3 3 1 0x100; \
+     w uc.hpic3 4 1 0x002; \
+     w uc.hpic3 5 1 0x004; \
+                         ; \
+     w uc.hpic6 0 1 0x008; \
+     w uc.hpic6 1 1 0x010; \
+     w uc.hpic6 2 1 0x080; \
+     w uc.hpic6 3 1 0x100; \
+     w uc.hpic6 4 1 0x002; \
+     w uc.hpic6 5 1 0x004; \
+                         ; \
+     w uc.hpic7 0 1 0x008; \
+     w uc.hpic7 1 1 0x010; \
+     w uc.hpic7 2 1 0x080; \
+     w uc.hpic7 3 1 0x100; \
+     w uc.hpic7 4 1 0x002; \
+     w uc.hpic7 5 1 0x004; \
+                         ; \
+     "
+
+if $?lynxalot && $?lynx_any \
+     "m modport_7_0 \
+     port_for_mod0=1 port_for_mod1=1 \
+     port_for_mod2=1 port_for_mod3=1 \
+     port_for_mod4=1 port_for_mod5=1 \
+     port_for_mod6=1 port_for_mod7=1; \
+     m imodport_7_0 \
+     port_for_mod0=1 port_for_mod1=1 \
+     port_for_mod2=1 port_for_mod3=1 \
+     port_for_mod4=1 port_for_mod5=1 \
+     port_for_mod6=1 port_for_mod7=1; \
+     "
+
+if $?lynxalot && $?drac_any \
+    "m modport_7_0 port_for_mod0=12 port_for_mod1=12 \
+     port_for_mod2=12 port_for_mod3=12 \
+     port_for_mod4=12 port_for_mod5=12 \
+     port_for_mod6=12 port_for_mod7=12; \
+     m imodport_7_0 port_for_mod0=12 port_for_mod1=12 \
+     port_for_mod2=12 port_for_mod3=12 \
+     port_for_mod4=12 port_for_mod5=12 \
+     port_for_mod6=12 port_for_mod7=12; \
+     "
+
+if $?lynxalot && $?unit0 \
+    "stkmode modid=0"
+     
+if $?lynxalot && $?unit1 \
+    "stkmode modid=1"
+
+if $?lynxalot && $?unit3 \
+    "stkmode modid=2"
+
+if $?lynxalot && $?unit4 \
+    "stkmode modid=3"
+
+if $?lynxalot && $?unit5 \
+    "stkmode modid=4"
+
+if $?lynxalot && $?unit6 \
+    "stkmode modid=5"
+
+# guenevere setup
+# (enabled by adding the property "guenevere=1")
+# Notes:
+#       hgX mapping based on pbmp_valid.0=0x1b7
+#	Draco unit 1 is on Herc port 1 (hg0/hpic0) (mod 0)
+#	Draco unit 2 is on Herc port 2 (hg1/hpic1) (mod 1)
+#	Lynx unit 3 is on Herc port 8 (hg5/hpic7) (mod 2)
+#	Lynx unit 4 is on Herc port 7 (hg4/hpic6) (mod 3)
+#	Higig conn 0 is on Herc port 4 (hg2/hpic3)
+#	Higig conn 1 is on Herc port 5 (hg3/hpic4)
+#       Herc port 3 - Unused (hpic2)
+#       Herc port 6 - Unused (hpic5)
+if $?guenevere && $?unit0 \
+    " \
+     w uc.hpic0 0 1 0x002; \
+     w uc.hpic0 1 1 0x004; \
+     w uc.hpic0 2 1 0x100; \
+     w uc.hpic0 3 1 0x080; \
+                         ; \
+     w uc.hpic1 0 1 0x002; \
+     w uc.hpic1 1 1 0x004; \
+     w uc.hpic1 2 1 0x100; \
+     w uc.hpic1 3 1 0x080; \
+                         ; \
+     w uc.hpic7 0 1 0x002; \
+     w uc.hpic7 1 1 0x004; \
+     w uc.hpic7 2 1 0x100; \
+     w uc.hpic7 3 1 0x080; \
+                         ; \
+     w uc.hpic6 0 1 0x002; \
+     w uc.hpic6 1 1 0x004; \
+     w uc.hpic6 2 1 0x100; \
+     w uc.hpic6 3 1 0x080; \
+                         ; \
+     "
+
+if $?guenevere && $?lynx_any \
+     "m modport_7_0 \
+     port_for_mod0=1 port_for_mod1=1 \
+     port_for_mod2=1 port_for_mod3=1 \
+     port_for_mod4=1 port_for_mod5=1 \
+     port_for_mod6=1 port_for_mod7=1; \
+     m imodport_7_0 \
+     port_for_mod0=1 port_for_mod1=1 \
+     port_for_mod2=1 port_for_mod3=1 \
+     port_for_mod4=1 port_for_mod5=1 \
+     port_for_mod6=1 port_for_mod7=1; \
+     "
+
+if $?guenevere && $?drac_any \
+    "m modport_7_0 port_for_mod0=12 port_for_mod1=12 \
+     port_for_mod2=12 port_for_mod3=12 \
+     port_for_mod4=12 port_for_mod5=12 \
+     port_for_mod6=12 port_for_mod7=12; \
+     m imodport_7_0 port_for_mod0=12 port_for_mod1=12 \
+     port_for_mod2=12 port_for_mod3=12 \
+     port_for_mod4=12 port_for_mod5=12 \
+     port_for_mod6=12 port_for_mod7=12; \
+     "
+
+if $?guenevere && $?unit1 \
+    "stkmode modid=0"
+     
+if $?guenevere && $?unit2 \
+    "stkmode modid=1"
+
+if $?guenevere && $?unit3 \
+    "stkmode modid=2"
+
+if $?guenevere && $?unit4 \
+    "stkmode modid=3"
+     
+# felix48 setup
+# (enabled by adding the property "felix48=1")
+# Notes:
+#       BCM56102 unit-0 higig port (port 26) is connected
+#       to BCM56102 Unit-1 higig port (port 26)
+#
+
+if $?felix48 && $?unit0 \
+    "stkmode modid=0 ; \
+     m IEGR_PORT MY_MODID=0; \
+     m XPORT_CONFIG MY_MODID=0; \
+     w MODPORT_MAP 1 1 HIGIG_PORT_BITMAP=0x4 ; \
+     "
+
+if $?felix48 && $?unit1 \
+    "stkmode modid=1 ; \
+     m IEGR_PORT MY_MODID=1; \
+     m XPORT_CONFIG MY_MODID=1; \
+     w MODPORT_MAP 0 1 HIGIG_PORT_BITMAP=0x4 ; \
+     "
+# fbpoe setup
+# (enabled by adding the property "fbpoe=1")
+# Notes:
+#       BCM56504 unit-0 higig port (port 27,28) is connected
+#       to BCM56504 Unit-1 higig port (port 27,28)
+#
+
+if $?unit0 && $?firebolt_any && $?fbpoe     \
+  "stkmode modid=0;           \
+   w modport_map 1 1 HIGIG_PORT_BITMAP=0x4; \
+   m HIGIG_TRUNK_GROUP HIGIG_TRUNK_RTAG1=3 \
+                       HIGIG_TRUNK_ID1_PORT0=2 \
+                       HIGIG_TRUNK_ID1_PORT1=3 \
+                       HIGIG_TRUNK_ID1_PORT2=2 \
+                       HIGIG_TRUNK_ID1_PORT3=3; \
+   m HIGIG_TRUNK_CONTROL HIGIG_TRUNK_ID2=1 \
+                         HIGIG_TRUNK2=1 \
+                         HIGIG_TRUNK_ID3=1 \
+                         HIGIG_TRUNK3=1 \
+                         HIGIG_TRUNK_BITMAP1=0xc \
+                         ACTIVE_PORT_BITMAP=0xf"
+
+if $?unit1 && $?firebolt_any && $?fbpoe \
+  "stkmode modid=1; \
+   w modport_map 0 1 HIGIG_PORT_BITMAP=0x4; \
+   m HIGIG_TRUNK_GROUP HIGIG_TRUNK_RTAG1=3 \
+                       HIGIG_TRUNK_ID1_PORT0=2 \
+                       HIGIG_TRUNK_ID1_PORT1=3 \
+                       HIGIG_TRUNK_ID1_PORT2=2 \
+                       HIGIG_TRUNK_ID1_PORT3=3; \
+   m HIGIG_TRUNK_CONTROL HIGIG_TRUNK_ID2=1 \
+                         HIGIG_TRUNK2=1 \
+                         HIGIG_TRUNK_ID3=1 \
+                         HIGIG_TRUNK3=1 \
+                         HIGIG_TRUNK_BITMAP1=0xc \
+                         ACTIVE_PORT_BITMAP=0xf"
+
+# Dual Raptor/Raven boards
+if $?raven_eb_48p || $?rap24_ref \
+    "local rcpu_system 1"
+if $?unit0 && $?rcpu_system \
+   "stkmode modid=0"
+if $?unit1 && $?rcpu_system \
+   "stkmode modid=1"
+
+# LM fb48 platform setup
+# (enabled by adding the property "lm48p=1")
+#
+if $?unit0 && $?firebolt_any && $?lm48p || $?lm48p_D \
+   "stkmode modid=0"
+
+if $?unit1 && $?firebolt_any && $?lm48p || $?lm48p_D \
+   "stkmode modid=1"
+
+# Set Firebolt POE power level 170(total) - 110(switch) = 60
+if $?fbpoe \
+        "local poepower 60"
+
+# Set Draco15 POE power level 170(total) - 80(switch) = 90
+if $?drac15\
+        "local poepower 90"
+
+# if enable_poe is set, then enable the POE processor for
+# either Firebolt or Draco15 platform
+if $?unit0 && $?enable_poe && $?fbpoe || $?drac15 \
+        "$echo rc: Enabling POE ...; \
+         poesel reset; \
+         i2c probe quiet; \
+         xpoe verbose off; \
+         xpoe power $poepower; \
+         xpoe verbose on; \
+         poesel enable"
+
+# mark this unit so that subsequent rc runs are quiet
+setenv rc$unit 1
+
+if $?macsec '\
+    macsec sync; \
+    $echo "rc: MACSEC CLI Enabled"'
+
+# cache a copy of rc.soc in memory
+rccache addq rc.soc
+
+# setup chassis if requested
+if !"expr $?autochassis2 && $unit == $units - 1" \
+    "setenv chassis2_no_rc 1; \
+     rcload c2switch.soc; \
+     setenv chassis2_no_rc; \
+    "
+
+# start stacking if requested
+if !"expr $?autostack && $unit == $units - 1" \
+	"rcload stk.soc"
+
+if !"expr $?aedev + 0" && !"expr $unit == $units - 1" \
+       "aedev init"
+
+# hurricane 48p FE platform LED setup for 56146_A0 and 56147_A0 board
+# (enabled by adding the property "fe_hu_48p=1")
+#
+if $?fe_hu_48p && $?BCM56146 || $?BCM56147 \
+    "phy fe0 0x1f 0x008b; \
+     phy fe0 0x1a 0x3f09;\
+     phy fe8 0x1f 0x008b; \
+     phy fe8 0x1a 0x3f09; \
+     phy fe16 0x1f 0x008b; \
+     phy fe16 0x1a 0x3f09"
+
+rcload bal.soc
diff --git a/bal_release/3rdparty/bcm-sdk/rc/kt2/readme.txt b/bal_release/3rdparty/bcm-sdk/rc/kt2/readme.txt
new file mode 100644
index 0000000..b027d55
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/rc/kt2/readme.txt
@@ -0,0 +1,18 @@
+This directory contains bcm files that are needed in the KT2 svk file system to bring up 
+the BCM Diag Shell.
+User can also copy the bcm.user linux-kernel-bde.ko and linux-user-bde.ko
+from a private bcm_sdk build to the same KT2 svk file system.
+!!!
+   Do not forget to change the IP in bal.soc to point it to the BAL_CORE
+!!!
+
+The currently supported bcm_sdk version is 6.4.4
+.
+|-- bal.soc
+|-- bcm.user
+|-- linux-kernel-bde.ko
+|-- linux-user-bde.ko
+|-- rc.soc
+ 
+  
+
diff --git a/bal_release/3rdparty/bcm-sdk/rc/qax/bcm88470_board.soc b/bal_release/3rdparty/bcm-sdk/rc/qax/bcm88470_board.soc
new file mode 100755
index 0000000..b944270
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/rc/qax/bcm88470_board.soc
@@ -0,0 +1,211 @@
+# $Id:
+# $Copyright: (c) 1998-2001 Broadcom Corp.
+# All Rights Reserved.$
+#
+
+# Dram dq swaps for BCM88470
+
+#Dram HW properties
+
+#RX polarity
+config add phy_rx_polarity_flip.BCM88470=0
+
+
+#TX polarity
+config add phy_tx_polarity_flip.BCM88470=0
+
+#rx lane swap
+config add phy_rx_lane_map.BCM88470=0x3210
+config add phy_rx_lane_map_quad0.BCM88470=0x3210
+config add phy_rx_lane_map_quad1.BCM88470=0x3210
+config add phy_rx_lane_map_quad2.BCM88470=0x3210
+config add phy_rx_lane_map_quad3.BCM88470=0x3210
+config add phy_rx_lane_map_quad4.BCM88470=0x3210
+config add phy_rx_lane_map_quad5.BCM88470=0x3210
+config add phy_rx_lane_map_quad6.BCM88470=0x3210
+config add phy_rx_lane_map_quad7.BCM88470=0x3210
+config add phy_rx_lane_map_quad8.BCM88470=0x3210
+config add phy_rx_lane_map_quad9.BCM88470=0x3210
+config add phy_rx_lane_map_quad10.BCM88470=0x3120
+config add phy_rx_lane_map_quad11.BCM88470=0x3210
+
+
+#tx lane swap
+config add phy_tx_lane_map.BCM88470=0x3210
+config add phy_tx_lane_map_quad0.BCM88470=0x3210
+config add phy_tx_lane_map_quad1.BCM88470=0x3210
+config add phy_tx_lane_map_quad2.BCM88470=0x3210
+config add phy_tx_lane_map_quad3.BCM88470=0x3210
+config add phy_tx_lane_map_quad4.BCM88470=0x3210
+config add phy_tx_lane_map_quad5.BCM88470=0x3210
+config add phy_tx_lane_map_quad6.BCM88470=0x3210
+config add phy_tx_lane_map_quad7.BCM88470=0x3210
+config add phy_tx_lane_map_quad8.BCM88470=0x3210
+config add phy_tx_lane_map_quad9.BCM88470=0x3210
+config add phy_tx_lane_map_quad10.BCM88470=0x3120
+config add phy_tx_lane_map_quad11.BCM88470=0x3210
+
+# Dram dq swaps for BCM88470
+config add ext_ram_dq_swap_dram0_byte0_bit0.BCM88470=1
+config add ext_ram_dq_swap_dram0_byte0_bit1.BCM88470=0
+config add ext_ram_dq_swap_dram0_byte0_bit2.BCM88470=5
+config add ext_ram_dq_swap_dram0_byte0_bit3.BCM88470=4
+config add ext_ram_dq_swap_dram0_byte0_bit4.BCM88470=3
+config add ext_ram_dq_swap_dram0_byte0_bit5.BCM88470=2
+config add ext_ram_dq_swap_dram0_byte0_bit6.BCM88470=6
+config add ext_ram_dq_swap_dram0_byte0_bit7.BCM88470=7
+config add ext_ram_dq_swap_dram0_byte1_bit0.BCM88470=7
+config add ext_ram_dq_swap_dram0_byte1_bit1.BCM88470=3
+config add ext_ram_dq_swap_dram0_byte1_bit2.BCM88470=5
+config add ext_ram_dq_swap_dram0_byte1_bit3.BCM88470=1
+config add ext_ram_dq_swap_dram0_byte1_bit4.BCM88470=4
+config add ext_ram_dq_swap_dram0_byte1_bit5.BCM88470=0
+config add ext_ram_dq_swap_dram0_byte1_bit6.BCM88470=6
+config add ext_ram_dq_swap_dram0_byte1_bit7.BCM88470=2
+config add ext_ram_dq_swap_dram0_byte2_bit0.BCM88470=5
+config add ext_ram_dq_swap_dram0_byte2_bit1.BCM88470=1
+config add ext_ram_dq_swap_dram0_byte2_bit2.BCM88470=7
+config add ext_ram_dq_swap_dram0_byte2_bit3.BCM88470=3
+config add ext_ram_dq_swap_dram0_byte2_bit4.BCM88470=4
+config add ext_ram_dq_swap_dram0_byte2_bit5.BCM88470=2
+config add ext_ram_dq_swap_dram0_byte2_bit6.BCM88470=0
+config add ext_ram_dq_swap_dram0_byte2_bit7.BCM88470=6
+config add ext_ram_dq_swap_dram0_byte3_bit0.BCM88470=3
+config add ext_ram_dq_swap_dram0_byte3_bit1.BCM88470=2
+config add ext_ram_dq_swap_dram0_byte3_bit2.BCM88470=5
+config add ext_ram_dq_swap_dram0_byte3_bit3.BCM88470=7
+config add ext_ram_dq_swap_dram0_byte3_bit4.BCM88470=6
+config add ext_ram_dq_swap_dram0_byte3_bit5.BCM88470=1
+config add ext_ram_dq_swap_dram0_byte3_bit6.BCM88470=4
+config add ext_ram_dq_swap_dram0_byte3_bit7.BCM88470=0
+config add ext_ram_dq_swap_dram1_byte0_bit0.BCM88470=6
+config add ext_ram_dq_swap_dram1_byte0_bit1.BCM88470=7
+config add ext_ram_dq_swap_dram1_byte0_bit2.BCM88470=5
+config add ext_ram_dq_swap_dram1_byte0_bit3.BCM88470=3
+config add ext_ram_dq_swap_dram1_byte0_bit4.BCM88470=1
+config add ext_ram_dq_swap_dram1_byte0_bit5.BCM88470=0
+config add ext_ram_dq_swap_dram1_byte0_bit6.BCM88470=4
+config add ext_ram_dq_swap_dram1_byte0_bit7.BCM88470=2
+config add ext_ram_dq_swap_dram1_byte1_bit0.BCM88470=3
+config add ext_ram_dq_swap_dram1_byte1_bit1.BCM88470=1
+config add ext_ram_dq_swap_dram1_byte1_bit2.BCM88470=5
+config add ext_ram_dq_swap_dram1_byte1_bit3.BCM88470=6
+config add ext_ram_dq_swap_dram1_byte1_bit4.BCM88470=0
+config add ext_ram_dq_swap_dram1_byte1_bit5.BCM88470=2
+config add ext_ram_dq_swap_dram1_byte1_bit6.BCM88470=7
+config add ext_ram_dq_swap_dram1_byte1_bit7.BCM88470=4
+config add ext_ram_dq_swap_dram1_byte2_bit0.BCM88470=0
+config add ext_ram_dq_swap_dram1_byte2_bit1.BCM88470=3
+config add ext_ram_dq_swap_dram1_byte2_bit2.BCM88470=1
+config add ext_ram_dq_swap_dram1_byte2_bit3.BCM88470=4
+config add ext_ram_dq_swap_dram1_byte2_bit4.BCM88470=6
+config add ext_ram_dq_swap_dram1_byte2_bit5.BCM88470=5
+config add ext_ram_dq_swap_dram1_byte2_bit6.BCM88470=7
+config add ext_ram_dq_swap_dram1_byte2_bit7.BCM88470=2
+config add ext_ram_dq_swap_dram1_byte3_bit0.BCM88470=2
+config add ext_ram_dq_swap_dram1_byte3_bit1.BCM88470=6
+config add ext_ram_dq_swap_dram1_byte3_bit2.BCM88470=1
+config add ext_ram_dq_swap_dram1_byte3_bit3.BCM88470=7
+config add ext_ram_dq_swap_dram1_byte3_bit4.BCM88470=4
+config add ext_ram_dq_swap_dram1_byte3_bit5.BCM88470=0
+config add ext_ram_dq_swap_dram1_byte3_bit6.BCM88470=5
+config add ext_ram_dq_swap_dram1_byte3_bit7.BCM88470=3
+config add ext_ram_dq_swap_dram2_byte0_bit0.BCM88470=7
+config add ext_ram_dq_swap_dram2_byte0_bit1.BCM88470=4
+config add ext_ram_dq_swap_dram2_byte0_bit2.BCM88470=0
+config add ext_ram_dq_swap_dram2_byte0_bit3.BCM88470=2
+config add ext_ram_dq_swap_dram2_byte0_bit4.BCM88470=3
+config add ext_ram_dq_swap_dram2_byte0_bit5.BCM88470=1
+config add ext_ram_dq_swap_dram2_byte0_bit6.BCM88470=6
+config add ext_ram_dq_swap_dram2_byte0_bit7.BCM88470=5
+config add ext_ram_dq_swap_dram2_byte1_bit0.BCM88470=2
+config add ext_ram_dq_swap_dram2_byte1_bit1.BCM88470=4
+config add ext_ram_dq_swap_dram2_byte1_bit2.BCM88470=0
+config add ext_ram_dq_swap_dram2_byte1_bit3.BCM88470=6
+config add ext_ram_dq_swap_dram2_byte1_bit4.BCM88470=5
+config add ext_ram_dq_swap_dram2_byte1_bit5.BCM88470=3
+config add ext_ram_dq_swap_dram2_byte1_bit6.BCM88470=1
+config add ext_ram_dq_swap_dram2_byte1_bit7.BCM88470=7
+config add ext_ram_dq_swap_dram2_byte2_bit0.BCM88470=1
+config add ext_ram_dq_swap_dram2_byte2_bit1.BCM88470=7
+config add ext_ram_dq_swap_dram2_byte2_bit2.BCM88470=3
+config add ext_ram_dq_swap_dram2_byte2_bit3.BCM88470=6
+config add ext_ram_dq_swap_dram2_byte2_bit4.BCM88470=5
+config add ext_ram_dq_swap_dram2_byte2_bit5.BCM88470=0
+config add ext_ram_dq_swap_dram2_byte2_bit6.BCM88470=2
+config add ext_ram_dq_swap_dram2_byte2_bit7.BCM88470=4
+config add ext_ram_dq_swap_dram2_byte3_bit0.BCM88470=0
+config add ext_ram_dq_swap_dram2_byte3_bit1.BCM88470=7
+config add ext_ram_dq_swap_dram2_byte3_bit2.BCM88470=4
+config add ext_ram_dq_swap_dram2_byte3_bit3.BCM88470=6
+config add ext_ram_dq_swap_dram2_byte3_bit4.BCM88470=2
+config add ext_ram_dq_swap_dram2_byte3_bit5.BCM88470=5
+config add ext_ram_dq_swap_dram2_byte3_bit6.BCM88470=3
+config add ext_ram_dq_swap_dram2_byte3_bit7.BCM88470=1
+
+# Dram bank addr swaps for BCM88470
+config add ext_ram_addr_bank_swap_dram0_bit7.BCM88470=4
+config add ext_ram_addr_bank_swap_dram0_bit11.BCM88470=5
+config add ext_ram_addr_bank_swap_dram0_bit13.BCM88470=15
+config add ext_ram_addr_bank_swap_dram0_bit14.BCM88470=17
+config add ext_ram_addr_bank_swap_dram0_bit5.BCM88470=6
+config add ext_ram_addr_bank_swap_dram0_bit0.BCM88470=7
+config add ext_ram_addr_bank_swap_dram0_bit8.BCM88470=8
+config add ext_ram_addr_bank_swap_dram0_bit1.BCM88470=9
+config add ext_ram_addr_bank_swap_dram0_bit4.BCM88470=10
+config add ext_ram_addr_bank_swap_dram0_bit16.BCM88470=11
+config add ext_ram_addr_bank_swap_dram0_bit15.BCM88470=12
+config add ext_ram_addr_bank_swap_dram0_bit12.BCM88470=13
+config add ext_ram_addr_bank_swap_dram0_bit6.BCM88470=0
+config add ext_ram_addr_bank_swap_dram0_bit2.BCM88470=1
+config add ext_ram_addr_bank_swap_dram0_bit9.BCM88470=2
+config add ext_ram_addr_bank_swap_dram0_bit10.BCM88470=14
+config add ext_ram_addr_bank_swap_dram0_bit17.BCM88470=16
+config add ext_ram_addr_bank_swap_dram1_bit10.BCM88470=4
+config add ext_ram_addr_bank_swap_dram1_bit14.BCM88470=5
+config add ext_ram_addr_bank_swap_dram1_bit7.BCM88470=15
+config add ext_ram_addr_bank_swap_dram1_bit12.BCM88470=17
+config add ext_ram_addr_bank_swap_dram1_bit4.BCM88470=6
+config add ext_ram_addr_bank_swap_dram1_bit6.BCM88470=7
+config add ext_ram_addr_bank_swap_dram1_bit9.BCM88470=8
+config add ext_ram_addr_bank_swap_dram1_bit1.BCM88470=9
+config add ext_ram_addr_bank_swap_dram1_bit5.BCM88470=10
+config add ext_ram_addr_bank_swap_dram1_bit11.BCM88470=11
+config add ext_ram_addr_bank_swap_dram1_bit8.BCM88470=12
+config add ext_ram_addr_bank_swap_dram1_bit13.BCM88470=13
+config add ext_ram_addr_bank_swap_dram1_bit0.BCM88470=0
+config add ext_ram_addr_bank_swap_dram1_bit15.BCM88470=1
+config add ext_ram_addr_bank_swap_dram1_bit2.BCM88470=2
+config add ext_ram_addr_bank_swap_dram1_bit17.BCM88470=14
+config add ext_ram_addr_bank_swap_dram1_bit16.BCM88470=16
+config add ext_ram_addr_bank_swap_dram2_bit15.BCM88470=4
+config add ext_ram_addr_bank_swap_dram2_bit5.BCM88470=5
+config add ext_ram_addr_bank_swap_dram2_bit11.BCM88470=15
+config add ext_ram_addr_bank_swap_dram2_bit7.BCM88470=17
+config add ext_ram_addr_bank_swap_dram2_bit17.BCM88470=6
+config add ext_ram_addr_bank_swap_dram2_bit0.BCM88470=7
+config add ext_ram_addr_bank_swap_dram2_bit16.BCM88470=8
+config add ext_ram_addr_bank_swap_dram2_bit2.BCM88470=9
+config add ext_ram_addr_bank_swap_dram2_bit13.BCM88470=10
+config add ext_ram_addr_bank_swap_dram2_bit9.BCM88470=11
+config add ext_ram_addr_bank_swap_dram2_bit12.BCM88470=12
+config add ext_ram_addr_bank_swap_dram2_bit6.BCM88470=13
+config add ext_ram_addr_bank_swap_dram2_bit14.BCM88470=0
+config add ext_ram_addr_bank_swap_dram2_bit8.BCM88470=1
+config add ext_ram_addr_bank_swap_dram2_bit1.BCM88470=2
+config add ext_ram_addr_bank_swap_dram2_bit4.BCM88470=14
+config add ext_ram_addr_bank_swap_dram2_bit10.BCM88470=16
+
+##Dram HW properties
+config add ext_ram_present.BCM88470=3
+config add dram_type_DDR4_MICRON_Y4016AABG_JD_F_4GBIT=1
+config add ext_ram_freq.BCM88470=1600
+config add ext_ram_abi.BCM88470=0
+config add ext_ram_write_dbi.BCM88470=0
+config add ext_ram_read_dbi.BCM88470=0
+config add ext_ram_write_crc.BCM88470=0
+config add ext_ram_read_crc.BCM88470=0
+config add ext_ram_cmd_par_latency.BCM88470=6
+config add ext_ram_type.BCM88470=DDR4
+config add ext_ram_total_size.BCM88470=3000
+
diff --git a/bal_release/3rdparty/bcm-sdk/rc/qax/combo28_dram.soc b/bal_release/3rdparty/bcm-sdk/rc/qax/combo28_dram.soc
new file mode 100755
index 0000000..d47c1f5
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/rc/qax/combo28_dram.soc
@@ -0,0 +1,560 @@
+#
+# $Id: combo28_dram.soc,v 1.0 2014/04/28 15:50:00 nhefetz Exp $
+#
+# $Copyright: (c) 2014 Broadcom Corporation
+# All Rights Reserved.$
+#
+
+#################### General Notes ########################
+# Our controller support both DDR4 and GDDR5, we need to "modify" ext_ram_columns in the following way:
+#   For DDR4, need to use column number as in DRAM Data Sheet, meaning 1024 in drams supported.
+#   For GDDR5, need to multiply number in Data Sheet by 8 (representing the 3 address bits, which are constant 000 in DDR4.), meaning 512 in drams supported.
+
+
+if $?dram_type_DDR4_SAMSUNG_K4A4G165WD_4GBIT "\
+  config add ext_ram_type=DDR4; \
+  config add ext_ram_t_rfc=260000;\
+  config add ext_ram_t_rc=45320;\
+  config add ext_ram_t_rcd_wr=13320;\
+  config add ext_ram_t_rcd_rd=13320;\
+  config add ext_ram_t_rrd_l=8c;\
+  config add ext_ram_t_rrd_s=7c;\
+  config add ext_ram_t_ras=32000;\
+  config add ext_ram_t_rp=13320;\
+  config add ext_ram_t_wr=15000;\
+  config add ext_ram_t_faw=30000;\
+  config add ext_ram_t_rtp_s=10c;\
+  config add ext_ram_t_rtp_l=10c;\
+  config add ext_ram_t_wtr_s=4c;\\
+  config add ext_ram_t_wtr_l=10c;\\
+  config add ext_ram_t_ccd_l=6c;\\
+  config add ext_ram_t_ccd_s=4c;\
+  config add ext_ram_t_zqcs=128c;\
+  config add ext_ram_t_crc_alert=13000;\
+  config add ext_ram_t_rst=500000000;\
+  config add ext_ram_t_ref=3900000;\
+  config add ext_ram_c_wr_latency=12c;\
+  config add ext_ram_c_cas_latency=17c;\
+  config add ext_ram_t_al=0;\
+  config add ext_ram_columns=1024; \
+  config add ext_ram_rows=32768; \
+  config add ext_ram_banks=8;"
+
+if $?dram_type_DDR4_MICRON_EDY4016AABG_DRFR_4GBIT "\
+  config add ext_ram_type=DDR4; \
+  config add ext_ram_t_rfc=260000;\
+  config add ext_ram_t_rc=45320;\
+  config add ext_ram_t_rcd_wr=13320;\
+  config add ext_ram_t_rcd_rd=13320;\
+  config add ext_ram_t_rrd_l=8c;\
+  config add ext_ram_t_rrd_s=7c;\
+  config add ext_ram_t_ras=32000;\
+  config add ext_ram_t_rp=13320;\
+  config add ext_ram_t_wr=15000;\
+  config add ext_ram_t_faw=30000;\
+  config add ext_ram_t_rtp_s=10c;\
+  config add ext_ram_t_rtp_l=10c;\
+  config add ext_ram_t_wtr_s=4c;\\
+  config add ext_ram_t_wtr_l=10c;\\
+  config add ext_ram_t_ccd_l=6c;\\
+  config add ext_ram_t_ccd_s=4c;\
+  config add ext_ram_t_zqcs=128c;\
+  config add ext_ram_t_crc_alert=13000;\
+  config add ext_ram_t_rst=500000000;\
+  config add ext_ram_t_ref=3900000;\
+  config add ext_ram_c_wr_latency=12c;\
+  config add ext_ram_c_cas_latency=16c;\
+  config add ext_ram_t_al=0;\
+  config add ext_ram_columns=1024; \
+  config add ext_ram_rows=32768; \
+  config add ext_ram_banks=8;"
+
+########################################################################
+# Note: Not for new design not recommended to be used and not supported
+########################################################################
+if $?dram_type_DDR4_MICRON_MT40A256M16HA_083EA_4GBIT "\
+  config add ext_ram_type=DDR4; \
+  config add ext_ram_t_rfc=260000;\
+  config add ext_ram_t_rc=47000;\
+  config add ext_ram_t_rcd_wr=15000;\
+  config add ext_ram_t_rcd_rd=15000;\
+  config add ext_ram_t_rrd_l=11c;\
+  config add ext_ram_t_rrd_s=9c;\
+  config add ext_ram_t_ras=32000;\
+  config add ext_ram_t_rp=15000;\
+  config add ext_ram_t_wr=14900;\
+  config add ext_ram_t_faw=30000;\
+  config add ext_ram_t_rtp_s=12c;\
+  config add ext_ram_t_rtp_l=12c;\
+  config add ext_ram_t_wtr_s=4c;\\
+  config add ext_ram_t_wtr_l=12c;\\
+  config add ext_ram_t_ccd_l=8c;\\
+  config add ext_ram_t_ccd_s=4c;\
+  config add ext_ram_t_zqcs=170c;\
+  config add ext_ram_t_crc_alert=13000;\
+  config add ext_ram_t_rst=500000000;\
+  config add ext_ram_t_ref=3900000;\
+  config add ext_ram_c_wr_latency=18c;\
+  config add ext_ram_c_cas_latency=24c;\
+  config add ext_ram_t_al=0;\
+  config add ext_ram_columns=1024; \
+  config add ext_ram_rows=32768; \
+  config add ext_ram_banks=8;"
+
+########################################################################
+# Note: Not for new design not recommended to be used and not supported
+########################################################################
+if $?dram_type_DDR4_MICRON_MT40A512M16_8GBIT "\
+    config add ext_ram_type=DDR4; \
+    config add ext_ram_t_rfc=350000;\
+    config add ext_ram_t_rc=45320;\
+    config add ext_ram_t_rcd_wr=13320;\
+    config add ext_ram_t_rcd_rd=13320;\
+    config add ext_ram_t_rrd_l=8c;\
+    config add ext_ram_t_rrd_s=7c;\
+    config add ext_ram_t_ras=32000;\
+    config add ext_ram_t_wr=15000;\
+    config add ext_ram_t_faw=30000;\
+    config add ext_ram_t_rtp_s=10c;\
+    config add ext_ram_t_rtp_l=10c;\
+    config add ext_ram_t_wtr_s=4c;\\
+    config add ext_ram_t_wtr_l=10c;\
+    config add ext_ram_t_ccd_l=8c;\
+    config add ext_ram_t_ccd_s=4c;\
+    config add ext_ram_t_zqcs=128c;\
+    config add ext_ram_t_crc_alert=13000;\
+    config add ext_ram_t_rst=500000000;\
+    config add ext_ram_t_ref=3900000;\
+    config add ext_ram_c_wr_latency=12c;\
+    config add ext_ram_c_cas_latency=16c;\
+    config add ext_ram_t_al=0;\
+    config add ext_ram_columns=1024; \
+    config add ext_ram_rows=65536; \
+    config add ext_ram_t_rp=13320;\
+    config add ext_ram_banks=8;"
+
+if $?dram_type_DDR4_HYNIX_H5AN4G6NMFR_VJC_4GBIT "\
+  config add ext_ram_type=DDR4; \
+  config add ext_ram_t_rfc=260000;\
+  config add ext_ram_t_rc=45320;\
+  config add ext_ram_t_rcd_wr=13320;\
+  config add ext_ram_t_rcd_rd=13320;\
+  config add ext_ram_t_rrd_l=8c;\
+  config add ext_ram_t_rrd_s=4c;\
+  config add ext_ram_t_ras=32000;\
+  config add ext_ram_t_rp=13320;\
+  config add ext_ram_t_wr=15000;\
+  config add ext_ram_t_faw=30000;\
+  config add ext_ram_t_rtp_s=7500;\
+  config add ext_ram_t_rtp_l=7500;\
+  config add ext_ram_t_wtr_s=2500;\
+  config add ext_ram_t_wtr_l=7500;\
+  config add ext_ram_t_ccd_l=8c;\
+  config add ext_ram_t_ccd_s=4c;\
+  config add ext_ram_t_zqcs=128c;\
+  config add ext_ram_t_crc_alert=13000;\
+  config add ext_ram_t_crc_wr_latency=12c;\
+  config add ext_ram_t_rst=500000000;\
+  config add ext_ram_t_ref=3900000;\
+  config add ext_ram_c_wr_latency=16c;\
+  config add ext_ram_c_cas_latency=20c;\
+  config add ext_ram_t_al=0;\
+  config add ext_ram_columns=1024; \
+  config add ext_ram_rows=32768; \
+  config add ext_ram_banks=8;"
+
+if $?dram_type_DDR4_MICRON_Y4016AABG_JD_F_4GBIT "\
+  config add ext_ram_type=DDR4; \
+  config add ext_ram_t_rfc=260000;\
+  config add ext_ram_t_rc=47000;\
+  config add ext_ram_t_rcd_wr=15000;\
+  config add ext_ram_t_rcd_rd=15000;\
+  config add ext_ram_t_rrd_l=11c;\
+  config add ext_ram_t_rrd_s=9c;\
+  config add ext_ram_t_ras=32000;\
+  config add ext_ram_t_rp=15000;\
+  config add ext_ram_t_wr=14900;\
+  config add ext_ram_t_faw=30000;\
+  config add ext_ram_t_rtp_s=12c;\
+  config add ext_ram_t_rtp_l=12c;\
+  config add ext_ram_t_wtr_s=4c;\\
+  config add ext_ram_t_wtr_l=12c;\\
+  config add ext_ram_t_ccd_l=8c;\\
+  config add ext_ram_t_ccd_s=4c;\
+  config add ext_ram_t_zqcs=170c;\
+  config add ext_ram_t_crc_alert=13000;\
+  config add ext_ram_t_rst=500000000;\
+  config add ext_ram_t_ref=3900000;\
+  config add ext_ram_c_wr_latency=16c;\
+  config add ext_ram_c_cas_latency=24c;\
+  config add ext_ram_t_al=0;\
+  config add ext_ram_columns=1024; \
+  config add ext_ram_rows=32768; \
+  config add ext_ram_banks=8;"
+
+if $?dram_type_GDDR5_SAMSUNG_K4G20325FD_2GBIT "\
+  config add ext_ram_type=GDDR5; \
+  config add ext_ram_t_rfc=78000;\
+  config add ext_ram_t_rc=48000;\
+  config add ext_ram_t_rcd_wr=15000;\
+  config add ext_ram_t_rcd_rd=16000;\
+  config add ext_ram_t_rrd_l=6000;\
+  config add ext_ram_t_rrd_s=6000;\
+  config add ext_ram_t_ras=34000;\
+  config add ext_ram_t_rp=14000;\
+  config add ext_ram_t_wr=16000;\
+  config add ext_ram_t_faw=24000;\
+  config add ext_ram_t_32aw=192000;\
+  config add ext_ram_t_rtp_s=2c;\
+  config add ext_ram_t_rtp_l=4c;\
+  config add ext_ram_t_wtr_s=8c;\
+  config add ext_ram_t_wtr_l=10c;\
+  config add ext_ram_t_ccd_l=3c;\
+  config add ext_ram_t_ccd_s=2c;\
+  config add ext_ram_t_ref=1900000;\
+  config add ext_ram_c_wr_latency=3c;\
+  config add ext_ram_c_cas_latency=20c;\
+  config add ext_ram_t_crc_rd_latency=3c;\
+  config add ext_ram_t_crc_wr_latency=14c;\
+  config add ext_ram_t_rst=200000000;\
+  config add ext_ram_t_al=1c;\
+  config add ext_ram_columns=512; \
+  config add ext_ram_rows=8192; \
+  config add ext_ram_banks=16;"
+
+########################################################################
+# Note: Not for new design not recommended to be used and not supported
+########################################################################
+if $?dram_type_GDDR5_SAMSUNG_K4G41325FC_4GBIT "\
+  config add ext_ram_type=GDDR5; \
+  config add ext_ram_t_rfc=110000;\
+  config add ext_ram_t_rc=48000;\
+  config add ext_ram_t_rcd_wr=15000;\
+  config add ext_ram_t_rcd_rd=16000;\
+  config add ext_ram_t_rrd_l=6000;\
+  config add ext_ram_t_rrd_s=6000;\
+  config add ext_ram_t_ras=34000;\
+  config add ext_ram_t_rp=14000;\
+  config add ext_ram_t_wr=16000;\
+  config add ext_ram_t_faw=24000;\
+  config add ext_ram_t_32aw=192000;\
+  config add ext_ram_t_rtp_s=2c;\
+  config add ext_ram_t_rtp_l=4c;\
+  config add ext_ram_t_wtr_s=8c;\
+  config add ext_ram_t_wtr_l=10c;\
+  config add ext_ram_t_ccd_l=3c;\
+  config add ext_ram_t_ccd_s=2c;\
+  config add ext_ram_t_ref=1900000;\
+  config add ext_ram_c_wr_latency=3c;\
+  config add ext_ram_c_cas_latency=20c;\
+  config add ext_ram_t_crc_rd_latency=3c;\
+  config add ext_ram_t_crc_wr_latency=14c;\
+  config add ext_ram_t_rst=200000000;\
+  config add ext_ram_t_al=1c;\
+  config add ext_ram_columns=512; \
+  config add ext_ram_rows=16384; \
+  config add ext_ram_banks=16;"
+
+#if $?dram_type_GDDR5_HYNIX_H5GQ2H24AFR_R0C_2GBIT "\
+#  config add ext_ram_type=GDDR5; \
+#  config add ext_ram_t_rfc=120000;\
+#  config add ext_ram_t_rc=48000;\
+#  config add ext_ram_t_rcd_wr=14000;\
+#  config add ext_ram_t_rcd_rd=18000;\
+#  config add ext_ram_t_rrd_l=9c;\
+#  config add ext_ram_t_rrd_s=9c;\
+#  config add ext_ram_t_ras=32000;\
+#  config add ext_ram_t_rp=16000;\
+#  config add ext_ram_t_wr=16000;\
+#  config add ext_ram_t_faw=30000;\
+#  config add ext_ram_t_32aw=245000;\
+#  config add ext_ram_t_rtp_s=2c;\
+#  config add ext_ram_t_rtp_l=2c;\
+#  config add ext_ram_t_wtr_s=8c;\
+#  config add ext_ram_t_wtr_l=8c;\
+#  config add ext_ram_t_ccd_l=3c;\
+#  config add ext_ram_t_ccd_s=2c;\
+#  config add ext_ram_t_ref=3900000;\
+#  config add ext_ram_c_wr_latency=3c;\
+#  config add ext_ram_c_cas_latency=16c;\
+#  config add ext_ram_t_crc_rd_latency=2c;\
+#  config add ext_ram_t_crc_wr_latency=11c;\
+#  config add ext_ram_t_rst=200000000;\
+#  config add ext_ram_t_al=1c;\
+#  config add ext_ram_columns=512; \
+#  config add ext_ram_rows=8192; \
+#  config add ext_ram_banks=16;"
+#
+
+###################################################
+#     ELPIDA GDDR5
+###################################################
+if $?dram_type_GDDR5_MICRON_EDW4032CABG_4GBIT "\
+  config add ext_ram_type=GDDR5; \
+  config add ext_ram_t_rfc=90000;\
+  config add ext_ram_t_rc=44000;\
+  config add ext_ram_t_rcd_wr=13000;\
+  config add ext_ram_t_rcd_rd=17000;\
+  config add ext_ram_t_rrd_l=5000;\
+  config add ext_ram_t_rrd_s=5000;\
+  config add ext_ram_t_ras=27000;\
+  config add ext_ram_t_rp=17000;\
+  config add ext_ram_t_wr=18000;\
+  config add ext_ram_t_faw=20000;\
+  config add ext_ram_t_32aw=160000;\
+  config add ext_ram_t_rtp_s=2c;\
+  config add ext_ram_t_rtp_l=2c;\
+  config add ext_ram_t_wtr_s=7c;\
+  config add ext_ram_t_wtr_l=7c;\
+  config add ext_ram_t_ccd_l=3c;\
+  config add ext_ram_t_ccd_s=2c;\
+  config add ext_ram_t_ref=1900000;\
+  config add ext_ram_c_wr_latency=4c;\
+  config add ext_ram_c_cas_latency=18c;\
+  config add ext_ram_t_crc_rd_latency=3c;\
+  config add ext_ram_t_crc_wr_latency=11c;\
+  config add ext_ram_t_rst=200000000;\
+  config add ext_ram_t_al=2c;\
+  config add ext_ram_columns=512; \
+  config add ext_ram_rows=16384; \
+  config add ext_ram_banks=16;"
+
+if $?dram_type_GDDR5_HYNIX_H5GC4H24MFR_T2C_4GBIT "\
+  config add ext_ram_type=GDDR5; \
+  config add ext_ram_t_rfc=120000;\
+  config add ext_ram_t_rc=48000;\
+  config add ext_ram_t_rcd_wr=14000;\
+  config add ext_ram_t_rcd_rd=18000;\
+  config add ext_ram_t_rrd_l=9c;\
+  config add ext_ram_t_rrd_s=9c;\
+  config add ext_ram_t_ras=32000;\
+  config add ext_ram_t_rp=16000;\
+  config add ext_ram_t_wr=16000;\
+  config add ext_ram_t_faw=30000;\
+  config add ext_ram_t_32aw=245000;\
+  config add ext_ram_t_rtp_s=2c;\
+  config add ext_ram_t_rtp_l=2c;\
+  config add ext_ram_t_wtr_s=8c;\
+  config add ext_ram_t_wtr_l=8c;\
+  config add ext_ram_t_ccd_l=3c;\
+  config add ext_ram_t_ccd_s=2c;\
+  config add ext_ram_t_ref=1900000;\
+  config add ext_ram_c_wr_latency=4c;\
+  config add ext_ram_c_cas_latency=18c;\
+  config add ext_ram_t_crc_rd_latency=2c;\
+  config add ext_ram_t_crc_wr_latency=13c;\
+  config add ext_ram_t_rst=200000000;\
+  config add ext_ram_t_al=1c;\
+  config add ext_ram_columns=512; \
+  config add ext_ram_rows=16384; \
+  config add ext_ram_banks=16;"
+
+###############################################################################################
+# Note: For extended devices for example Micron dram_type_DDR4_MICRON_MT40A256M16HA_083E
+#       please use none extended parameters for example dram_type_DDR4_MICRON_MT40A256M16HA_083
+###############################################################################################
+if $?dram_type_DDR4_MICRON_MT40A256M16HA_083_4GBIT "\
+  config add ext_ram_type=DDR4;\
+  config add ext_ram_freq=1200;\
+  config add ext_ram_t_rfc=260000;\
+  config add ext_ram_t_rc=46160;\
+  config add ext_ram_t_rcd_wr=14160;\
+  config add ext_ram_t_rcd_rd=14160;\
+  config add ext_ram_t_rrd_l=8c;\
+  config add ext_ram_t_rrd_s=7c;\
+  config add ext_ram_t_ras=32000;\
+  config add ext_ram_t_rp=14160;\
+  config add ext_ram_t_wr=15000;\
+  config add ext_ram_t_faw=30000;\
+  config add ext_ram_t_rtp_s=10c;\
+  config add ext_ram_t_rtp_l=10c;\
+  config add ext_ram_t_wtr_s=4c;\
+  config add ext_ram_t_wtr_l=10c;\
+  config add ext_ram_t_ccd_l=6c;\
+  config add ext_ram_t_ccd_s=4c;\
+  config add ext_ram_t_zqcs=128c;\
+  config add ext_ram_t_crc_alert=13000;\
+  config add ext_ram_t_rst=500000000;\
+  config add ext_ram_t_ref=3900000;\
+  config add ext_ram_c_wr_latency=12c;\
+  config add ext_ram_t_al=0;\
+  config add ext_ram_columns=1024;\
+  config add ext_ram_rows=32768;\
+  config add ext_ram_banks=8;\
+  config delete ext_ram_cmd_par_latency*;\
+  config add ext_ram_cmd_par_latency=5;\
+  config add ext_ram_c_cas_latency=17c;"
+expr $ext_ram_write_dbi+0 == 1
+if $? && $?dram_type_DDR4_MICRON_MT40A256M16HA_083_4GBIT "\
+  config add ext_ram_c_cas_latency=20c;"
+
+if $?dram_type_DDR4_MICRON_MT40A512M16HA_083_8GBIT "\
+  config add ext_ram_type=DDR4;\
+  config add ext_ram_freq=1200;\
+  config add ext_ram_t_rfc=350000;\
+  config add ext_ram_t_rc=46160;\
+  config add ext_ram_t_rcd_wr=14160;\
+  config add ext_ram_t_rcd_rd=14160;\
+  config add ext_ram_t_rrd_l=8c;\
+  config add ext_ram_t_rrd_s=7c;\
+  config add ext_ram_t_ras=32000;\
+  config add ext_ram_t_rp=14160;\
+  config add ext_ram_t_wr=15000;\
+  config add ext_ram_t_faw=30000;\
+  config add ext_ram_t_rtp_s=10c;\
+  config add ext_ram_t_rtp_l=10c;\
+  config add ext_ram_t_wtr_s=4c;\
+  config add ext_ram_t_wtr_l=10c;\
+  config add ext_ram_t_ccd_l=6c;\
+  config add ext_ram_t_ccd_s=4c;\
+  config add ext_ram_t_zqcs=128c;\
+  config add ext_ram_t_crc_alert=13000;\
+  config add ext_ram_t_rst=500000000;\
+  config add ext_ram_t_ref=3900000;\
+  config add ext_ram_c_wr_latency=12c;\
+  config add ext_ram_t_al=0;\
+  config add ext_ram_columns=1024;\
+  config add ext_ram_rows=65536;\
+  config add ext_ram_banks=8;\
+  config delete ext_ram_cmd_par_latency*;\
+  config add ext_ram_cmd_par_latency=5;\
+  config add ext_ram_c_cas_latency=17c;"
+expr $ext_ram_write_dbi+0 == 1
+if $? && $?dram_type_DDR4_MICRON_MT40A512M16HA_083_8GBIT "\
+  config add ext_ram_c_cas_latency=20c;"
+
+if $?dram_type_DDR4_MICRON_MT40A256M16GE_062_4GBIT "\
+  config add ext_ram_type=DDR4;\
+  config add ext_ram_freq=1600;\
+  config add ext_ram_t_rfc=260000;\
+  config add ext_ram_t_rc=47000;\
+  config add ext_ram_t_rcd_wr=15000;\
+  config add ext_ram_t_rcd_rd=15000;\
+  config add ext_ram_t_rrd_l=11c;\
+  config add ext_ram_t_rrd_s=9c;\
+  config add ext_ram_t_ras=32000;\
+  config add ext_ram_t_rp=15000;\
+  config add ext_ram_t_wr=14900;\
+  config add ext_ram_t_faw=30000;\
+  config add ext_ram_t_rtp_s=12c;\
+  config add ext_ram_t_rtp_l=12c;\
+  config add ext_ram_t_wtr_s=4c;\
+  config add ext_ram_t_wtr_l=12c;\
+  config add ext_ram_t_ccd_l=8c;\
+  config add ext_ram_t_ccd_s=4c;\
+  config add ext_ram_t_zqcs=170c;\
+  config add ext_ram_t_crc_alert=13000;\
+  config add ext_ram_t_rst=500000000;\
+  config add ext_ram_t_ref=3900000;\
+  config add ext_ram_c_wr_latency=16c;\
+  config add ext_ram_t_al=0;\
+  config add ext_ram_columns=1024;\
+  config add ext_ram_rows=32768;\
+  config add ext_ram_banks=8;\
+  config delete ext_ram_cmd_par_latency*;\
+  config add ext_ram_cmd_par_latency=8;\
+  config add ext_ram_c_cas_latency=24c;"
+expr $ext_ram_write_dbi+0 == 1
+if $? && $?dram_type_DDR4_MICRON_MT40A256M16GE_062_4GBIT "\
+  config add ext_ram_c_cas_latency=28c;"
+
+if $?dram_type_DDR4_SAMSUNG_K4A4G165WE_4GBIT "\
+  config add ext_ram_type=DDR4;\
+  config add ext_ram_freq=1200;\
+  config add ext_ram_t_rfc=260000;\
+  config add ext_ram_t_rc=46160;\
+  config add ext_ram_t_rcd_wr=14160;\
+  config add ext_ram_t_rcd_rd=14160;\
+  config add ext_ram_t_rrd_l=8c;\
+  config add ext_ram_t_rrd_s=7c;\
+  config add ext_ram_t_ras=32000;\
+  config add ext_ram_t_rp=14160;\
+  config add ext_ram_t_wr=15000;\
+  config add ext_ram_t_faw=30000;\
+  config add ext_ram_t_rtp_s=10c;\
+  config add ext_ram_t_rtp_l=10c;\
+  config add ext_ram_t_wtr_s=4c;\
+  config add ext_ram_t_wtr_l=10c;\
+  config add ext_ram_t_ccd_l=6c;\
+  config add ext_ram_t_ccd_s=4c;\
+  config add ext_ram_t_zqcs=128c;\
+  config add ext_ram_t_crc_alert=13000;\
+  config add ext_ram_t_rst=500000000;\
+  config add ext_ram_t_ref=3900000;\
+  config add ext_ram_c_wr_latency=12c ;\
+  config add ext_ram_t_al=0;\
+  config add ext_ram_columns=1024;\
+  config add ext_ram_rows=32768;\
+  config add ext_ram_banks=8;\
+  config delete ext_ram_cmd_par_latency*;\
+  config add ext_ram_cmd_par_latency=5;\
+  config add ext_ram_c_cas_latency=17c;"
+expr $ext_ram_write_dbi+0 == 1
+if $? && $?dram_type_DDR4_SAMSUNG_K4A4G165WE_4GBIT "\
+  config add ext_ram_c_cas_latency=20c;"
+
+if $?dram_type_GDDR5_MICRON_MT51K256M32HF_50_8GBIT "\
+  config add ext_ram_type=GDDR5;\
+  config add ext_ram_t_rfc=110000;\
+  config add ext_ram_t_rc=44000;\
+  config add ext_ram_t_rcd_wr=12000;\
+  config add ext_ram_t_rcd_rd=17000;\
+  config add ext_ram_t_rrd_l=5000;\
+  config add ext_ram_t_rrd_s=5000;\
+  config add ext_ram_t_ras=27000;\
+  config add ext_ram_t_rp=17000;\
+  config add ext_ram_t_wr=18000;\
+  config add ext_ram_t_faw=20000;\
+  config add ext_ram_t_32aw=160000;\
+  config add ext_ram_t_rtp_s=2c;\
+  config add ext_ram_t_rtp_l=2c;\
+  config add ext_ram_t_wtr_s=6c;\
+  config add ext_ram_t_wtr_l=6c;\
+  config add ext_ram_t_ccd_l=2c;\
+  config add ext_ram_t_ccd_s=2c;\
+  config add ext_ram_t_ref=1900000;\
+  config add ext_ram_c_wr_latency=4c;\
+  config add ext_ram_t_crc_rd_latency=3c;\
+  config add ext_ram_t_crc_wr_latency=11c;\
+  config add ext_ram_t_rst=200000000;\
+  config add ext_ram_t_al=2c;\
+  config add ext_ram_columns=1024;\
+  config add ext_ram_rows=16384;\
+  config add ext_ram_banks=16;\
+  config add ext_ram_c_cas_latency=16c;"
+expr $ext_ram_write_dbi==1
+if $? && $?dram_type_GDDR5_MICRON_MT51K256M32HF_50_8GBIT "\
+  config add ext_ram_c_cas_latency=16c;"
+
+if $?dram_type_GDDR5_SAMSUNG_K4G41325FE_HC28_4GBIT "\
+  config add ext_ram_type=GDDR5;\
+  config add ext_ram_t_rfc=110000;\
+  config add ext_ram_t_rc=48000;\
+  config add ext_ram_t_rcd_wr=15000;\
+  config add ext_ram_t_rcd_rd=16000;\
+  config add ext_ram_t_rrd_l=6000;\
+  config add ext_ram_t_rrd_s=6000;\
+  config add ext_ram_t_ras=34000;\
+  config add ext_ram_t_rp=14000;\
+  config add ext_ram_t_wr=16000;\
+  config add ext_ram_t_faw=24000;\
+  config add ext_ram_t_32aw=192000;\
+  config add ext_ram_t_rtp_s=2c;\
+  config add ext_ram_t_rtp_l=4c;\
+  config add ext_ram_t_wtr_s=3c;\
+  config add ext_ram_t_wtr_l=8c;\
+  config add ext_ram_t_ccd_l=3c;\
+  config add ext_ram_t_ccd_s=2c;\
+  config add ext_ram_t_ref=1900000;\
+  config add ext_ram_c_wr_latency=3c;\
+  config add ext_ram_t_crc_rd_latency=3c;\
+  config add ext_ram_t_crc_wr_latency=14c;\
+  config add ext_ram_t_rst=200000000;\
+  config add ext_ram_t_al=1c;\
+  config add ext_ram_columns=512;\
+  config add ext_ram_rows=16384;\
+  config add ext_ram_banks=16;\
+  config add ext_ram_c_cas_latency=18c;"
+expr $ext_ram_write_dbi+0 == 1
+if $? && $?dram_type_GDDR5_SAMSUNG_K4G41325FE_HC28_4GBIT "\
+  config add ext_ram_c_cas_latency=19c;"
diff --git a/bal_release/3rdparty/bcm-sdk/rc/qax/config.bcm b/bal_release/3rdparty/bcm-sdk/rc/qax/config.bcm
new file mode 100755
index 0000000..4645da3
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/rc/qax/config.bcm
@@ -0,0 +1,2910 @@
+#
+# $Id: config-sand.bcm,v 1.140 2013/09/22 14:29:47 tomerma Exp $
+#
+# $Copyright: (c) 2011 Broadcom Corporation
+# All Rights Reserved.$
+
+#pci_override_dev.0=0x8375
+
+# Note: comment size is restricted to 128 charecters per line.
+
+#########################################
+##cfg for BCM88640 (PetraB), BCM88650 (Arad) and BCM88202 (Ardon)
+#########################################
+
+## temporary suppressing unknown soc properties warnings - till adding them unknown to property.h/propgen
+## (need to be the first soc property in the file).
+suppress_unknown_prop_warnings=1
+
+
+## Multi device system (Negev): 2 devices, fabric mode is FE, mod id is slot id
+## (Top line card is 0, button is 1).
+#diag_chassis=1
+
+## Disable diag init application. Should be used if one wants to run his own
+## application instead of the diag init example
+#diag_disable=1
+
+## Skip cosq configuration in diag_init
+#diag_cosq_disable=1
+#
+
+stack_enable.BCM88680=1
+tdma_timeout_usec.BCM88680=3000000
+tslam_timeout_usec.BCM88680=3000000
+diag_emulator_partial_init.BCM88680=0
+phy_simul.BCM88680=0
+
+
+## Skip l2 configuration in diag_init
+#diag_l2_disable=1
+
+## L2 mode to load 0=DEFAULT, 1=INGRESS_DIST, 2=INGRESS_CENT, 3=EGRESS_DIST, 4=EGRESS_CENT, 5=EGRESS_INDEPENDENT
+#                  6=(INGRESS_CENT + LEARN_CPU), 7=(EGRESS_CENT + LEARN_CPU)
+#l2_mode=0
+
+## Skip stk configuration in diag_init
+#diag_no_appl_stk=1
+
+## Skip itmh programmable mode configuration in diag_init
+#diag_no_itmh_prog_mode=1
+
+# Ingress PMF key allocation optimization
+field_key_allocation_msb_balance_enable=1
+
+## Set modid value. Should be used when running multi-fap system.
+## Each fap should have it's unique modid value. Default is described in diag_chassis.
+#module_id=<modid>
+
+## Set base_modid value. Default is 0.
+#base_module_id=<base_modid>
+
+## Set nof_devices value. Should be set when working on multi-faps system.
+## Default is 1 when diag_chassis is not enabled, or 2 when diag_chassis is enabled.
+#n_devices=<nof_devices>
+
+#########################################
+##cfg for BCM88650 - Arad
+#########################################
+
+### Device configuration ###
+
+## Activate Emulation partial init. Values: 0 - Normal, 1 - Emulation .Default: 0x0.
+diag_emulator_partial_init.BCM88650=0
+#diag_emulator_partial_init.BCM88270=1
+#diag_emulator_partial_init.BCM88680=1
+#diag_emulator_partial_init.BCM88675=2
+
+#real phy isn't connected - remove on silicon arrival
+#phy_simul.BCM88675=1
+
+## General
+# Set the FAP Device mode
+# Options: PP / TM / TDM_OPTIMIZED / TDM_STANDARD
+fap_device_mode.BCM88650=PP
+#
+# FIXME: SDK-91833
+# PP Fixed Followed SDK-91662
+#
+
+# Options: SYMMETRIC / ASYMMETRIC / SINGLE_CORE
+# For faster emulation, use SINGLE_CORE
+device_core_mode.BCM88675=SYMMETRIC
+device_core_mode.BCM88680=SYMMETRIC
+## Credit worth size (Bytes)
+credit_size.BCM88650=1024
+
+## KBP recovery - allow for recovery sequence to run during init and soft reset (only if necessary)
+custom_feature_kbp_recovery_enable=0
+
+## Clock configurations
+# Core clock speed (MHz). Default- BCM88650: 600 MHz, BCM88675: 720 MHz
+core_clock_speed_khz.BCM88650=600000
+core_clock_speed_khz.BCM88675=720000
+core_clock_speed_khz.BCM88470=600000
+core_clock_speed_khz.BCM88680=837500
+core_clock_speed_khz.BCM88270=250000
+
+# System reference clock (MHz). Default- BCM88650: 600 MHz, BCM88675: 800 MHz
+system_ref_core_clock_khz.BCM88650=1200000
+
+#fabric pcp
+fabric_pcp_enable.BCM88675=1
+
+#Using Tcam instead of the KAPS for the IPv4 MC and IPV6 MC
+# 0 - Don't use TACM
+# 1 - Use TCAM for IPV4/6 MC
+# 2 - Use TACM for IPV4/6 MC but don't use the VRF field as a qualifier for IPV4 MC entries
+#custom_feature_l3_mc_use_tcam=0
+
+#for IPv6UC: use Tcam instead of KAPS
+#Note that if this property is enabled the IPV6-UC RPF will be disabled
+#custom_feature_l3_ipv6_uc_use_tcam=0
+
+
+#ams pll override value (only for Jericho A0/A1)- possible values: 0x19, 0x1e, 0x1f. Default value 0x1f
+#custom_feature_ams_pll_override.BCM88675=0x1f
+
+### Network Interface configuration ###
+## Use of the ucode_port_<Local-Port-Id>=<Interface-type>[<Interface-Id>][.<Channel-Id>]
+## Local port range: 0 - 255.
+## Interface types: XAUI/RXAUI/SGMII/ILKN/10GBase-R/XLGE/CGE/CPU/IGNORE
+
+# Map bcm local port to CPU[.channel] interfaces
+ucode_port_0.BCM88650=CPU.0
+
+# Map bcm local port to Network-Interface[.channel] interfaces - TBD
+ucode_port_132.BCM88650=10GBase-R3
+ucode_port_131.BCM88650=10GBase-R2
+ucode_port_130.BCM88650=10GBase-R1
+ucode_port_129.BCM88650=10GBase-R0
+ucode_port_128.BCM88650=10GBase-R46
+#ucode_port_128.BCM88650=GE46
+
+ucode_port_6.BCM88650=10GBase-R22
+ucode_port_5.BCM88650=10GBase-R23
+ucode_port_4.BCM88650=10GBase-R16
+ucode_port_3.BCM88650=10GBase-R17
+ucode_port_2.BCM88650=10GBase-R45
+ucode_port_1.BCM88650=10GBase-R47
+
+custom_feature_nif_recovery_enable.BCM88650=1
+custom_feature_nif_recovery_iter.BCM88650=7
+custom_feature_skip_before_traffic_validation.BCM88675=0
+#custom_feature_mac_fifo_start_tx_thrs.BCM88675=9
+
+#redirect packets that are destined to invalid queues
+invalid_queue_redirect=0
+
+#CLP0
+#ucode_port_1.BCM88675=XE0:core_0.1
+#ucode_port_2.BCM88675=XE1:core_0.2
+#ucode_port_3.BCM88675=XE2:core_0.3
+#ucode_port_4.BCM88675=XE3:core_0.4
+#CLP1
+#ucode_port_5.BCM88675=XE4:core_0.5
+#ucode_port_6.BCM88675=XE5:core_0.6
+#ucode_port_7.BCM88675=XE6:core_0.7
+#ucode_port_8.BCM88675=XE7:core_0.8
+#CLP2
+#ucode_port_9.BCM88675=XE8:core_0.9
+#ucode_port_10.BCM88675=XE9:core_0.10
+#ucode_port_11.BCM88675=XE10:core_0.11
+#ucode_port_12.BCM88675=XE11:core_0.12
+#CLP3
+#ucode_port_13.BCM88675=XE12:core_0.13
+#ucode_port_14.BCM88675=XE13:core_0.14
+#ucode_port_15.BCM88675=XE14:core_0.15
+#ucode_port_16.BCM88675=XE15:core_0.16
+#CLP4
+#ucode_port_17.BCM88675=XE16:core_0.17
+#ucode_port_18.BCM88675=XE17:core_0.18
+#ucode_port_19.BCM88675=XE18:core_0.19
+#ucode_port_20.BCM88675=XE19:core_0.20
+#CLP5
+#ucode_port_21.BCM88675=XE20:core_0.21
+#ucode_port_22.BCM88675=XE21:core_0.22
+#ucode_port_23.BCM88675=XE22:core_0.23
+#ucode_port_24.BCM88675=XE23:core_0.24
+#XLP0
+#ucode_port_25.BCM88675=XE24:core_0.25
+#ucode_port_26.BCM88675=XE25:core_0.26
+#ucode_port_27.BCM88675=XE26:core_0.27
+#ucode_port_28.BCM88675=XE27:core_0.28
+#XLP1
+#ucode_port_29.BCM88675=XE28:core_0.29
+#ucode_port_30.BCM88675=XE29:core_0.30
+#ucode_port_31.BCM88675=XE30:core_0.31
+#ucode_port_32.BCM88675=XE31:core_0.32
+#XLP2
+#ucode_port_33.BCM88675=XE32:core_0.33
+#ucode_port_34.BCM88675=XE33:core_0.34
+#ucode_port_35.BCM88675=XE34:core_0.35
+#ucode_port_36.BCM88675=XE35:core_0.36
+#XLP3
+#ucode_port_37.BCM88675=XE36:core_0.37
+#ucode_port_38.BCM88675=XE37:core_0.38
+#ucode_port_39.BCM88675=XE38:core_0.39
+#ucode_port_40.BCM88675=XE39:core_0.40
+#XLP4 (not as PMQ0)
+#ucode_port_41.BCM88675=XE40:core_0.41
+#ucode_port_42.BCM88675=XE41:core_0.42
+#ucode_port_43.BCM88675=XE42:core_0.43
+#ucode_port_44.BCM88675=XE43:core_0.44
+#XLP5 (not as PMQ1)
+#ucode_port_45.BCM88675=XE44:core_0.45
+#ucode_port_46.BCM88675=XE45:core_0.46
+#ucode_port_47.BCM88675=XE46:core_0.47
+#ucode_port_48.BCM88675=XE47:core_0.48
+#XLP9
+#ucode_port_49.BCM88675=XE60:core_0.49
+#ucode_port_50.BCM88675=XE61:core_0.50
+#ucode_port_51.BCM88675=XE62:core_0.51
+#ucode_port_52.BCM88675=XE63:core_0.52
+#XLP10
+#ucode_port_53.BCM88675=XE64:core_0.53
+#ucode_port_54.BCM88675=XE65:core_0.54
+#ucode_port_55.BCM88675=XE66:core_0.55
+#ucode_port_56.BCM88675=XE67:core_0.56
+#XLP11 (not as PMQ3)
+#ucode_port_57.BCM88675=XE68:core_0.57
+#ucode_port_58.BCM88675=XE69:core_0.58
+#ucode_port_59.BCM88675=XE70:core_0.59
+#ucode_port_60.BCM88675=XE71:core_0.60
+
+
+ucode_port_0.BCM88675=CPU.0:core_0.0
+ucode_port_0.BCM88680=CPU.0:core_0.0
+ucode_port_200.BCM88675=CPU.8:core_1.200
+ucode_port_200.BCM88680=CPU.8:core_1.200
+ucode_port_201.BCM88675=CPU.16:core_0.201
+ucode_port_201.BCM88680=CPU.16:core_0.201
+ucode_port_202.BCM88675=CPU.24:core_1.202
+ucode_port_202.BCM88680=CPU.24:core_1.202
+ucode_port_203.BCM88675=CPU.32:core_0.203
+ucode_port_203.BCM88680=CPU.32:core_0.203
+
+#default ports for Jericho and QMX
+ucode_port_1.BCM88675=CGE0:core_0.1
+ucode_port_2.BCM88675=ILKN1:core_0.2
+ilkn_lanes_1.BCM88675=0xfff000
+ucode_port_3.BCM88675=ILKN2:core_0.3
+ilkn_lanes_2.BCM88675=0xfff
+ucode_port_17.BCM88675=CGE1:core_1.17
+
+#default ports for Jericho
+ucode_port_13.BCM88675=10GBase-R64:core_0.13
+ucode_port_14.BCM88675=10GBase-R65:core_0.14
+ucode_port_15.BCM88675=10GBase-R68:core_1.15
+ucode_port_16.BCM88675=10GBase-R69:core_1.16
+
+#default ports for Jericho Plus
+ucode_port_13.BCM88680=10GBase-R40:core_0.13
+ucode_port_14.BCM88680=10GBase-R43:core_0.14
+ucode_port_15.BCM88680=10GBase-R44:core_1.15
+ucode_port_16.BCM88680=10GBase-R46:core_1.16
+
+#default ports for QMX
+ucode_port_13.BCM88375_A0=10GBase-R64:core_0.13
+ucode_port_14.BCM88375_A0=10GBase-R66:core_0.14
+ucode_port_15.BCM88375_A0=10GBase-R69:core_1.15
+ucode_port_16.BCM88375_A0=10GBase-R71:core_1.16
+ 
+
+ucode_port_13.BCM88375_B0=10GBase-R64:core_0.13
+ucode_port_14.BCM88375_B0=10GBase-R66:core_0.14
+ucode_port_15.BCM88375_B0=10GBase-R69:core_1.15
+ucode_port_16.BCM88375_B0=10GBase-R71:core_1.16
+ 
+ 
+#default ports for QAX
+ucode_port_0.BCM88470=CPU.0:core_0.0
+
+ucode_port_200.BCM88470=CPU.8:core_0.200
+
+ucode_port_201.BCM88470=CPU.16:core_0.201
+
+ucode_port_202.BCM88470=CPU.24:core_0.202
+
+ucode_port_203.BCM88470=CPU.32:core_0.203
+
+tm_port_header_type_in_0.BCM88470=INJECTED_2_PP
+tm_port_header_type_out_0.BCM88470=CPU
+
+ucode_port_1.BCM88470=XE47:core_0.1
+ucode_port_2.BCM88470=XE45:core_0.2
+ucode_port_3.BCM88470=XE17:core_0.3
+ucode_port_4.BCM88470=XE16:core_0.4
+ucode_port_5.BCM88470=XE23:core_0.5
+ucode_port_6.BCM88470=XE22:core_0.6
+#port_init_speed_xe1.BCM88470=2500
+pon_application_support_enabled_1.BCM88470=TRUE
+pon_application_support_enabled_3.BCM88470=TRUE
+pon_application_support_enabled_4.BCM88470=TRUE
+pon_application_support_enabled_5.BCM88470=TRUE
+pon_application_support_enabled_6.BCM88470=TRUE
+
+bcm886xx_rx_use_hw_trap_id.BCM88650=0
+
+#ucode_port_128.BCM88470=GE46:core_0.128
+#port_init_speed_ge46.BCM88470=1000
+ucode_port_128.BCM88470=XE46:core_0.128
+ucode_port_132.BCM88470=XE3:core_0.132
+ucode_port_131.BCM88470=XE2:core_0.131
+ucode_port_130.BCM88470=XE1:core_0.130
+ucode_port_129.BCM88470=XE0:core_0.129
+
+bcm886xx_rx_use_hw_trap_id.BCM88470=0
+
+stable_filename.BCM88270=/tmp/warmboot_data
+fap_device_mode.BCM88270=PP
+#default ports for QUX
+ucode_port_0.BCM88270=CPU.0:core_0.0
+ucode_port_200.BCM88270=CPU.8:core_0.100
+ucode_port_201.BCM88270=CPU.16:core_0.101
+ucode_port_202.BCM88270=CPU.24:core_0.102
+ucode_port_203.BCM88270=CPU.32:core_0.103
+ucode_port_1.BCM88270=XE0:core_0.1
+ucode_port_2.BCM88270=XE1:core_0.2
+ucode_port_3.BCM88270=XE2:core_0.3
+ucode_port_13.BCM88270=GE12:core_0.13
+ucode_port_14.BCM88270=GE13:core_0.14
+ucode_port_15.BCM88270=GE14:core_0.15
+ucode_port_16.BCM88270=GE15:core_0.16
+ucode_port_17.BCM88270=GE16:core_0.17
+
+
+#Firmware mode:
+#(Documantation relevant for BCM886xx and BCM887xx)
+# 0=DEFAULT
+# 1=SFP_OPT_SR4     - optical short range
+# 2=SFP_DAC         - direct attach copper
+# 3=XLAUI           - 40G XLAUI mode
+# 4=FORCE_OSDFE     - force over sample digital feedback equalization
+# 5=FORCE_BRDFE     - force baud rate digital feedback equalization
+# 6=SW_CL72         - software cl72 with AN on
+# 7=CL72_WITHOUT_AN - cl72 without AN
+#For Negev2 chassis enable DFE is recommended
+serdes_firmware_mode.BCM88650=2
+serdes_firmware_mode_il.BCM88650=4
+serdes_firmware_mode_sfi.BCM88650=0
+serdes_firmware_mode_sfi.BCM88675=4
+serdes_firmware_mode_sfi.BCM88470=4
+serdes_firmware_mode_sfi.BCM88270=4
+serdes_firmware_mode_sfi.BCM88680=4
+
+
+#ucode_port_1.BCM88650=10GBase-R0
+#ucode_port_2.BCM88650=10GBase-R1
+#ucode_port_3.BCM88650=10GBase-R2
+#ucode_port_4.BCM88650=10GBase-R3
+#ucode_port_5.BCM88650=10GBase-R4
+#ucode_port_6.BCM88650=10GBase-R5
+#ucode_port_7.BCM88650=10GBase-R6
+#ucode_port_8.BCM88650=10GBase-R7
+#ucode_port_9.BCM88650=10GBase-R8
+#ucode_port_10.BCM88650=10GBase-R9
+#ucode_port_11.BCM88650=10GBase-R10
+#ucode_port_12.BCM88650=10GBase-R11
+#ucode_port_13.BCM88650=10GBase-R12
+#ucode_port_14.BCM88650=10GBase-R13
+#ucode_port_15.BCM88650=10GBase-R14
+#ucode_port_16.BCM88650=10GBase-R15
+#ucode_port_17.BCM88650=10GBase-R16
+#ucode_port_18.BCM88650=10GBase-R17
+#ucode_port_19.BCM88650=10GBase-R18
+#ucode_port_20.BCM88650=10GBase-R19
+ucode_port_200.BCM88650=CPU.8
+ucode_port_201.BCM88650=CPU.16
+ucode_port_202.BCM88650=CPU.24
+ucode_port_203.BCM88650=CPU.32
+
+#40G
+#ucode_port_1.BCM88650=XLGE0
+#ucode_port_2.BCM88650=XLGE1
+#ucode_port_3.BCM88650=XLGE2
+#ucode_port_4.BCM88650=XLGE3
+#ucode_port_5.BCM88650=XLGE4
+#ucode_port_6.BCM88650=XLGE5
+#ucode_port_7.BCM88650=XLGE6
+
+#ILKN configuration - basic config
+#ucode_port_31.BCM88650=ILKN0
+#ucode_port_32.BCM88650=ILKN1
+#ucode_port_32.BCM88675=ILKN1:core_0.32
+#ilkn_num_lanes_0.BCM88650=12
+#ilkn_num_lanes_1.BCM88650=12
+#port_init_speed_il.BCM88650=10312
+
+
+#ILKN per port channel stat
+#ilkn_counters_mode.BCM88650=PACKET_PER_CHANNEL
+
+#ILKN configuration - advanced
+#ilkn_metaframe_sync_period=2048
+#ILKN burst configuration - ILKN max burst suppored values: 128, 256
+#ILKN burst short should be lesser or equal to burst max /2
+#ilkn_burst_max.BCM88675=256
+#ilkn_burst_min.BCM88675=32
+# Enable\Disable ILKN status message sent through an out-of-band interface.
+# ilkn_interface_status_oob_ignore.BCM88650=1
+
+# ilkn_is_burst_interleaving<ilkn_id>
+# 1 - The channelized interface functions in burst interleaving mode (default). 0 - in full packet mode.
+#ilkn_is_burst_interleaving_1.BCM88675=0
+
+##ILKN retransmit
+#ilkn_retransmit_enable_rx.BCM88650=1
+#ilkn_retransmit_enable_tx.BCM88650=1
+#ilkn_retransmit_buffer_size.BCM88650=250
+#ilkn_retransmit_num_requests_resent.BCM88650=15
+#ilkn_retransmit_num_sn_repetitions_tx.BCM88650=1
+#ilkn_retransmit_num_sn_repetitions_rx.BCM88650=1
+#ilkn_retransmit_rx_timeout_words.BCM88650=3800
+#ilkn_retransmit_rx_timeout_sn.BCM88650=250
+#ilkn_retransmit_rx_ignore.BCM88650=80
+#ilkn_retransmit_rx_reset_when_error_enable.BCM88650=1
+#ilkn_retransmit_rx_watchdog.BCM88650=0
+#ilkn_retransmit_rx_reset_when_alligned_error_enable.BCM88650=1
+#ilkn_retransmit_rx_reset_when_retry_error_enable.BCM88650=1
+#ilkn_retransmit_rx_reset_when_wrap_after_disc_error_enable.BCM88650=1
+#ilkn_retransmit_rx_reset_when_wrap_before_disc_error_enable.BCM88650=0
+#ilkn_retransmit_rx_reset_when_timout_error_enable.BCM88650=0
+#ilkn_retransmit_tx_wait_for_seq_num_change_enable.BCM88650=1
+#ilkn_retransmit_tx_ignore_requests_when_fifo_almost_empty.BCM88650=1
+
+#ucode_port_40.BCM88650=RCY.0
+#ucode_port_41.BCM88650=RCY.1
+#ucode_port_42.BCM88650=RCY.2
+
+## CAUI Configuration
+#ucode_port_41.BCM88650=CGE0
+#ucode_port_42.BCM88650=CGE1
+caui_num_lanes_0.BCM88650=10
+caui_num_lanes_1.BCM88650=10
+#Required for working IXIA 100G port:
+mld_lane_swap_lane20_ce.BCM88650=0
+mld_lane_swap_lane21_ce.BCM88650=1
+mld_lane_swap_lane0_ce.BCM88650=20
+mld_lane_swap_lane1_ce.BCM88650=21
+
+# This configures the lane polarity
+pb_serdes_lane_swap_polarity_tx_phy1.BCM88650=1
+pb_serdes_lane_swap_polarity_tx_phy2.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy3.BCM88650=1
+pb_serdes_lane_swap_polarity_tx_phy4.BCM88650=1
+pb_serdes_lane_swap_polarity_tx_phy5.BCM88650=1
+pb_serdes_lane_swap_polarity_tx_phy6.BCM88650=1
+pb_serdes_lane_swap_polarity_tx_phy7.BCM88650=1
+pb_serdes_lane_swap_polarity_tx_phy8.BCM88650=1
+pb_serdes_lane_swap_polarity_tx_phy9.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy10.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy11.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy12.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy13.BCM88650=1
+pb_serdes_lane_swap_polarity_tx_phy14.BCM88650=1
+pb_serdes_lane_swap_polarity_tx_phy15.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy16.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy17.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy18.BCM88650=1
+pb_serdes_lane_swap_polarity_tx_phy19.BCM88650=1
+pb_serdes_lane_swap_polarity_tx_phy20.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy21.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy22.BCM88650=1
+pb_serdes_lane_swap_polarity_tx_phy23.BCM88650=1
+pb_serdes_lane_swap_polarity_tx_phy24.BCM88650=1
+pb_serdes_lane_swap_polarity_tx_phy25.BCM88650=1
+pb_serdes_lane_swap_polarity_tx_phy26.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy27.BCM88650=1
+pb_serdes_lane_swap_polarity_tx_phy28.BCM88650=1
+
+pb_serdes_lane_swap_polarity_rx_phy1.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy2.BCM88650=1
+pb_serdes_lane_swap_polarity_rx_phy3.BCM88650=1
+pb_serdes_lane_swap_polarity_rx_phy4.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy5.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy6.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy7.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy8.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy9.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy10.BCM88650=1
+pb_serdes_lane_swap_polarity_rx_phy11.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy12.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy13.BCM88650=1
+pb_serdes_lane_swap_polarity_rx_phy14.BCM88650=1
+pb_serdes_lane_swap_polarity_rx_phy15.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy16.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy17.BCM88650=1
+pb_serdes_lane_swap_polarity_rx_phy18.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy19.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy20.BCM88650=1
+pb_serdes_lane_swap_polarity_rx_phy21.BCM88650=1
+pb_serdes_lane_swap_polarity_rx_phy22.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy23.BCM88650=1
+pb_serdes_lane_swap_polarity_rx_phy24.BCM88650=1
+pb_serdes_lane_swap_polarity_rx_phy25.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy26.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy27.BCM88650=1
+pb_serdes_lane_swap_polarity_rx_phy28.BCM88650=1
+
+xgxs_tx_lane_map_quad0.BCM88650=0x1032
+xgxs_tx_lane_map_quad1.BCM88650=0x2310
+xgxs_tx_lane_map_quad2.BCM88650=0x3210
+xgxs_tx_lane_map_quad3.BCM88650=0x3210
+xgxs_tx_lane_map_quad4.BCM88650=0x1230
+xgxs_tx_lane_map_quad5.BCM88650=0x3201
+xgxs_tx_lane_map_quad6.BCM88650=0x2103
+xgxs_tx_lane_map_quad7.BCM88650=0x0123
+
+xgxs_rx_lane_map_quad0.BCM88650=0x3012
+xgxs_rx_lane_map_quad1.BCM88650=0x0132
+xgxs_rx_lane_map_quad2.BCM88650=0x1230
+xgxs_rx_lane_map_quad3.BCM88650=0x0123
+xgxs_rx_lane_map_quad4.BCM88650=0x3012
+xgxs_rx_lane_map_quad5.BCM88650=0x2013
+xgxs_rx_lane_map_quad6.BCM88650=0x2103
+
+
+#High voltage driver strap. If 0, connected to 1.4V supply; if 1, connected to 1V mode.
+#for specific quad use srd_tx_drv_hv_disable_quad_X where X is (FSRD num * 4 + internal quad)
+srd_tx_drv_hv_disable.BCM88650=1
+
+#Port init mode
+#port_init_duplex=0
+#port_init_adv=0
+#port_init_autoneg=0
+
+
+# This disables serdes initialization
+# phy_null.BCM88650=1
+
+##  Number of Internal ports
+# Enable the ERP port. Values: 0 / 1.
+num_erp_tm_ports.BCM88650=1
+# Enable the OLP port. Values: 0 / 1.
+num_olp_tm_ports.BCM88650=1
+
+## Firmware Load Method
+load_firmware.BCM88650=0x102
+load_firmware.BCM88675=0x102
+load_firmware_fabric.BCM88675=0x102
+load_firmware_fabric.BCM88680=0x102
+
+### Headers configuration ###
+
+## Use of the tm_port_header_type_<Local-Port-Id>=<Header-type>
+## Default header type is derived from fap_device_mode: If fap_device_mode is
+## PP, default header type is ETH. Otherwise, defualt header type is TM.
+## Header type per port can be overriden.
+## All options: ETH/RAW/TM/PROG/CPU/STACKING/TDM/TDM_RAW/UDH_ETH
+## Injected header types: if PTCH, INJECTED (local Port of type TM) or INJECTED_PP (PP)
+##                        if PTCH-2, INJECTED_2 (local Port of type TM) or INJECTED_2_PP (PP)
+
+# Set CPU to work with TM header (ITMH)
+#tm_port_header_type_0.BCM88650=TM
+
+tm_port_header_type_in_0.BCM88650=INJECTED_2
+tm_port_header_type_out_0.BCM88650=TM
+
+tm_port_header_type_in_200.BCM88650=INJECTED_2_PP
+tm_port_header_type_out_200.BCM88650=ETH
+tm_port_header_type_in_201.BCM88650=INJECTED_2_PP
+tm_port_header_type_out_201.BCM88650=ETH
+tm_port_header_type_in_202.BCM88650=INJECTED_2_PP
+tm_port_header_type_out_202.BCM88650=ETH
+tm_port_header_type_in_203.BCM88650=INJECTED_2_PP
+tm_port_header_type_out_203.BCM88650=ETH
+
+
+### Parser Configuration ###
+# Parser has 4 custom macros that are allocated dynamically and
+# configured according to the following features and soc properties:
+# Trill (1 macro) - trill_mode
+# FCoE (2 macros) - bcm886xx_fcoe_switch_mode
+# VxLAN (1 macro) - bcm886xx_vxlan_enable
+# IPv6-Extension-header (2 macros) - bcm886xx_ipv6_ext_hdr_enable
+# UDP (1 macro) - UDP parsing is enabled by default, and can be
+#  disabled with soc property custom_feature_udp_parse_disable
+#  When disabling UDP parsing VxLAN and 1588oUDP are affected
+
+
+# In FCoE NPV switch, if set to 1, 
+# packets that ingress from the N_PORT are treated as bridge
+# and packets that ingress from the NP_PORT are treated as router
+#fcoe_npv_bridge_mode=1
+# Enable IPv6 Extension Header, 0 - disable (default), 1 - enable
+#bcm886xx_ipv6_ext_hdr_enable=1
+
+# Disable UDP parsing, 0 - enable (default), 1 - disable
+#custom_feature_udp_parse_disable=1
+
+#OAMP/SAT port
+#tm_port_header_type_out_232.BCM88650=CPU
+tm_port_header_type_out_232.BCM88675=CPU
+
+### SAT
+## Enable SAT Interface. 0 - Disable, 1 - Enable (Default) 
+sat_enable=1
+
+# Set the recycling port processing to be raw (static forwarding)
+tm_port_header_type_rcy.BCM88650=RAW
+
+### RCPU
+# Valid CPU local ports on which RCPU packets can be received by slave device.
+#rcpu_rx_pbmp=0xf00000000000000000000000000000000000000000000000001
+
+#tm_port_header_type_514.BCM88650=RAW
+
+## Header extensions
+# Set if an FTMH Out-LIF extension is present to Unicast and Multicast packets
+# Options: NEVER / IF_MC (only Multicast packets) / ALWAYS
+fabric_ftmh_outlif_extension.BCM88650=IF_MC
+
+# Set the FTMH Load-Balancing Key extension mode
+# Options for 88660: ENABLED, FULL_HASH
+# Options for 88650: ENABLED
+# Options for 88640 compatible: DISABLED / 8B_LB_KEY_8B_STACKING_ROUTE_HISTORY
+# / 16B_STACKING_ROUTE_HISTORY / STANDBY_MC_LB (available only for AradPlus)
+# Default: DISABLED
+system_ftmh_load_balancing_ext_mode.BCM88650=DISABLED
+
+# Set if an OTMH Out-LIF (CUD) Extension is present to Unicast and Multicast packets
+# Options: NEVER / IF_MC (only Multicast packets) / ALWAYS / DOUBLE_TAG (two hop scheduling) / EXTENDED: Extended 24 bit CUD
+# Default: NEVER
+# tm_port_otmh_outlif_ext_mode_13.BCM88650=NEVER
+
+# Set if an OTMH Source-System-Port Extension is present.
+# Option: 0/1
+# Default: 0
+# tm_port_otmh_src_ext_enable_13.BCM88650=0
+
+#Trunk hash format, relevant only for AradPlus. Possible values: NORMAL (default) / INVERTED / DUPLICATED.
+#trunk_hash_format=NORMAL
+
+## Stacking Application
+#stacking_enable.BCM88650=1
+
+## Determine if FTMH Destination System Port Extension is added to all Ethernet packets.
+#ftmh_dsp_extension_add=1
+
+## Determine if FTMH Destination System Port Extension of mirrored/snooped packets is stamped with the original destination.
+#mirror_stamp_sys_on_dsp_ext=1
+
+## System RED
+# Set System-Red functionality.
+#system_red_enable.BCM88650=1
+
+# Indicate the size (Bytes) of a first header to skip
+# before the major header at ingress (e.g. Ethernet, ITMH)
+# It can be set per port also
+first_header_size.BCM88650=0
+
+# Indicate the size (Bytes) of the PMF Extension Headers
+# to remove for TM header type ports (expecting ITMH)
+# Set per port
+#post_headers_size_0.BCM88650=4
+
+# Indicate the size (Bytes) of the User-Headers: configurable
+# headers located in the fabric between internal headers and
+# Ethernet. Their values are set by Ingress FP, and can be used
+# by Egress FP or Egress Editor.
+# units: bits. 4 values can be set:
+# 0 - size of the 1st User-Header, for the Egress PMF. 0b / 8b / 16b
+# 1 - size of the 2nd User-Header, for the Egress PMF. 0b / 8b / 16b
+# The sum of these 2 values should be under 16b
+# 2, 3 - size of the 1st/2nd User-Header, for the Egress Editor.
+# 0b / 8b / 16b / 24b / 32b
+# Each of the global User-Header size must be under 32 bits, but not 24 bits.
+# The Egress FP field is always at the MSB of the User-Header
+# Not available for 88650-A0.
+#field_class_id_size_0.BCM88650=8
+#field_class_id_size_1.BCM88650=0
+#field_class_id_size_2.BCM88650=24
+#field_class_id_size_3.BCM88650=0
+
+
+### Trunk - LAG configuration ###
+# Set the number of LAGs: 1024, 512, 256, 128 or 64
+number_of_trunks.BCM88650=256
+# Using the lb-key's MSB in trunk resolutions.
+# 0 = use LSB (default)
+# 1 = use MSB
+trunk_resolve_use_lb_key_msb_stack = 0
+trunk_resolve_use_lb_key_msb_smooth_division = 0
+
+### SYNCE configuration ###
+## Synchronous Ethernet Signal Mode.
+## Options: TWO_DIFF_CLK, TWO_CLK_AND_VALID. Default: TWO_CLK_AND_VALID
+#sync_eth_mode.BCM88650=TWO_CLK_AND_VALID
+
+## Clock Source (single SerDes) lane in the specified NIF port.
+## Usage: sync_eth_clk_to_nif_id_clk_<clk_number>=<serdes_number>
+#sync_eth_clk_to_nif_id_clk_0.BCM88650=1
+#sync_eth_clk_to_nif_id_clk_1.BCM88650=1
+
+## Clock Divider for the selected recovered clock. Valid values: 1/2/4. Default: 1.
+## Usage: sync_eth_clk_divider_clk_<clk_number>=<1/2/4>
+#sync_eth_clk_divider_clk_0.BCM88650=1
+#sync_eth_clk_divider_clk_1.BCM88650=1
+
+## Usage: sync_eth_clk_to_port_id_clk_<clk_number>=<serdes_number>
+#sync_eth_clk_to_port_id_clk_0.BCM88675=13
+#sync_eth_clk_to_port_id_clk_1.BCM88675=13
+
+## Clock frequency selector for the selected recovered clock. Valid values: <125MHz-0/156.25MHz-1/25MHz-2>. Default: 1.
+## Usage: sync_eth_clk_divider_clk<clk_id>=<0-125MHz/1-156.25MHz/2-25MHz>
+#sync_eth_clk_divider_clk0.BCM88675=1
+#sync_eth_clk_divider_clk1.BCM88675=1
+
+## Enable the automatic squelch function for the recovered clock. Valid values: 0/1. Default: 0.
+## Usage: sync_eth_clk_squelch_enable_clk_<clk_number>=<0/1>
+#sync_eth_clk_squelch_enable_clk_0.BCM88650=0
+#sync_eth_clk_squelch_enable_clk_1.BCM88650=0
+
+### ELK configuration ###
+## External lookup (TCAM) Device type select, Indicate the External lookup Device type.
+# Value Options: NONE/NL88650. Default: NONE.
+#ext_tcam_dev_type=NL88650
+
+
+##External lookup (elk) ILKN lanes swap. If set, reverse the lanes numbering order on elk device side. DNX system default is 1.
+#ext_ilkn_reverse=0
+
+## Set ELK FWD table Size.
+# format: ext_xxx_fwd_table_size.
+# where xxx replaced by FWD options: ip4_uc_rpf/ip4_mc/ip6_uc_rpf/ip6/ip6_mc/trill_uc/trill_mc/mpls/coup_mpls
+# Value Options: (0) - External table disabled, >0: number of entries. Default: 0.
+#ext_ip4_uc_rpf_fwd_table_size=8192
+#ext_ip4_mc_fwd_table_size=8192
+
+#External TCAM result size, allows to modify each external tcam result size. 
+#The total size of the external result for NL12K = 120bit .
+#The size of each segment updates the corresponding qualifier bcmFieldQualifyExternalValue. 
+#Default values according to the device property.
+#in-case of double capacity use the following values: 48,48,24,24 and ext_tcam_result_size_segment_pad_3=24
+
+#ext_tcam_result_size_segment_0=48
+#ext_tcam_result_size_segment_1=32
+#ext_tcam_result_size_segment_2=24
+#ext_tcam_result_size_segment_3=16
+#ext_tcam_result_size_segment_4=32
+#ext_tcam_result_size_segment_5=32
+
+## Set ELK IP FWD use NetRoute  ALG.
+# Value Options: ALG_LPM_LPM/ALG_LPM_NETROUTE/ALG_LPM_TCAM. Default: ALG_LPM_TCAM.
+#ext_fwd_algorithm_lpm=ALG_LPM_TCAM
+
+## Set ELK interface mode.
+# Change ELK interface configuration to support CAUI port.
+# Value Options: 0/1. 0 - Normal mode, 1  2 CAUI port + ELK mode. Default: 0.
+#ext_interface_mode=0
+
+### Configure MDIO interface
+# External MDIO clock rate divisor . Default: 0x24.
+#rate_ext_mdio_divisor=0x36
+# External MDIO clock rate divisor. Default: 0x1.
+#rate_ext_mdio_dividend=1
+
+### TDM - OTN configuration ###
+# Options: 0 / TDM_OPTIMIZED / TDM_STANDARD
+fap_tdm_bypass.BCM88650=0
+
+### TDM - RAW/PACKET configuration ###
+# if fap_tdm_packet config to be true, enable specific ports on the device to configure for tdm packet mode traffic.
+fap_tdm_packet.BCM88650=0
+
+# Indicate if a Petra-B device is connected to the actual device
+# For TDM/OTN applications,
+# system_is_petra_b_in_system.BCM88650=0
+##Indicate if TDM can arrive throgh primary pipe.
+#Should be 1 for a System with PetraB that connected to fabric over primary pipe.
+fabric_tdm_over_primary_pipe.BCM88650=0
+
+### Fabric configuration ###
+#0-LFEC 1-8b\10b 2-FEC 3-BEC
+backplane_serdes_encoding.BCM88650=2
+#Possible values - KR_FEC, 64_66, RS_FEC, LL_RS_FEC
+backplane_serdes_encoding.BCM88675=RS_FEC
+backplane_serdes_encoding.BCM88470=RS_FEC
+backplane_serdes_encoding.BCM88270=RS_FEC
+backplane_serdes_encoding.BCM88680=RS_FEC
+
+#SFI speed rate
+port_init_speed_sfi.BCM88650=10312
+port_init_speed_sfi.BCM88675=25000
+port_init_speed_sfi.BCM88470=25000
+port_init_speed_sfi.BCM88270=25000
+port_init_speed_sfi.BCM88680=25000
+
+#CL72
+port_init_cl72_sfi.BCM88650=1
+port_init_cl72_sfi.BCM88675=1
+fabric_segmentation_enable.BCM88650=1
+
+## Fabric transmission mode
+# Set the Connect mode to the Fabric
+# Options: FE - presence of a Fabric device (single stage) / MULT_STAGE_FE -  Multi-stage /
+# SINGLE_FAP - stand-alone device / MESH - mesh / BACK2BACK - 2 devices in Mesh
+#fabric_connect_mode.BCM88650=SINGLE_FAP
+fabric_connect_mode.BCM88650=FE
+# The Jericho configuration below will be overriden in jer.soc for multi device configurations
+fabric_connect_mode.BCM88675=SINGLE_FAP
+fabric_connect_mode.BCM88470=SINGLE_FAP
+fabric_connect_mode.BCM88270=SINGLE_FAP
+fabric_connect_mode.BCM88680=SINGLE_FAP
+
+
+## Cell format configuration
+# Indicate if the traffic can be sent in dual pipe
+is_dual_mode.BCM88650=0
+# Indicate on the existance of dual pipe device mode in system
+system_is_dual_mode_in_system.BCM88650=0
+
+# Indicate the format of the cell:
+# A VCS128 cell is used if system_is_vcs_128_in_system or system_is_fe600_in_system is TRUE
+system_is_vcs_128_in_system.BCM88650=0
+system_is_fe600_in_system.BCM88650=0
+
+### WRED ###
+
+# Set the maximum packet size for WRED tests. 0 - means ignore max packet size.
+discard_mtu_size.BCM88650=0
+
+### OCB (On-Chip Buffer) configuration ###
+# Enable the OCB
+# Enable MODES:
+#   0/FALSE        -->  OCB_DISABLED     --> No OCB use
+#   1/TRUE         -->  OCB_ENABLED      --> Like in Arad-A0/B0. Some packets may use both DRAM and OCB resources
+#   ONE_WAY_BYPASS -->  Depends on number of present drams (available only for AradPlus):
+#                      0 drams:   - OCB_ONLY
+#                      1 drams:   - OCB_ONLY_1_DRAM     -->  : OCB-only with 1 DRAM for the free pointers
+#                      2-8 drams: - OCB_DRAM_SEPARATE   -->  : OCB and DRAM coexist separately
+#   Default: TRUE.
+bcm886xx_ocb_enable.BCM88650=1
+
+## OCB (On-Chip Buffer) configuration
+# OCB modes:
+#   0 - Disabled
+#   1 - Enabled (Default).
+bcm886xx_ocb_enable.BCM88675=1
+
+# OCB Data Buffer size. Possible values: 128/256/512/1024. Default: 256.
+bcm886xx_ocb_databuffer_size.BCM88650=256
+# OCB Data Buffer size. Jericho allowed values: 256/512. Default: 256.
+bcm886xx_ocb_databuffer_size.BCM88675=256
+# Repartition between Unicast and Full Multicast buffers.
+# 0: 80% Unicast and 20% Multicast, 1: Unicast-Only
+bcm886xx_ocb_repartition.BCM88650=0
+
+
+### PDM configuration ###
+# Set the PDM Mode.
+# 0: simple (default), 1: extended (mandatory for LLFC-VSQ, PFC-VSQ, or ST-VSQ)
+bcm886xx_pdm_mode.BCM88650=0
+
+### Multicast Number of DBuff mode ###
+# Set IQM FMC buffers-replication sizes
+# Options for 88650: ARAD_INIT_FMC_4K_REP_64K_DBUFF_MODE/ARAD_INIT_FMC_64_REP_128K_DBUFF_MODE
+# Default: ARAD_INIT_FMC_4K_REP_64K_DBUFF_MODE
+multicast_nbr_full_dbuff.BCM88650=ARAD_INIT_FMC_4K_REP_64K_DBUFF_MODE
+
+### Multicast Number of DBuff mode ###
+# Set FMC buffers-replication sizes
+# Options for 88675:
+#    JERICHO_INIT_FMC_64_REP_512K_DBUFF_MODE
+#    JERICHO_INIT_FMC_4K_REP_256K_DBUFF_MODE (Default)
+#    JERICHO_INIT_FMC_NO_REP_DBUFF_MODE
+multicast_nbr_full_dbuff.BCM88675=JERICHO_INIT_FMC_4K_REP_256K_DBUFF_MODE
+multicast_nbr_full_dbuff.BCM88470=JERICHO_INIT_FMC_NO_REP_DBUFF_MODE
+multicast_nbr_full_dbuff.BCM88270=JERICHO_INIT_FMC_NO_REP_DBUFF_MODE
+multicast_nbr_full_dbuff.BCM88680=JERICHO_INIT_FMC_4K_REP_256K_DBUFF_MODE
+
+
+### Multicast configuration ###
+# Multicast egress vlan membership range. By default: 0-4095.
+egress_multicast_direct_bitmap_max.BCM88650=4095
+
+#### Jericho configuration of the number of ingress/egress multicast groups
+# Ingress max MCID can be up to 131070, Egress max MCID in Mesh or single FAP modes is up to 65535,
+# or otherwise is up to 131071.
+#multicast_ingress_group_id_range_max.BCM88675=32768
+#multicast_egress_group_id_range_max.BCM88675=60000
+
+### VOQ - Flow configuration ###
+
+# Set the VOQ mapping mode:
+# DIRECT: More than 4K System Ports are supported. System-level WRED is not supported.
+# INDIRECT: similar to Petra-B. Up to 4K System Ports.
+voq_mapping_mode.BCM88650=INDIRECT
+
+#Enable/disable HQOS support - mapping of many system ports to single modport
+hqos_mapping_enable.BCM88650=0
+
+# Set the Base Queue to be added to the packet flow-id
+# when the Flow-Id is set explicitely either by the ITMH
+# or by the Destination resolution in the Packet processing
+flow_mapping_queue_base.BCM88650=0
+
+
+# The allocation of the total per core resources between source and
+# queue based reservation depends on one of two guarantee modes: strict and loose.
+#ingress_congestion_management_guarantee_mode={STRICT,LOOSE} default: STRICT
+ingress_congestion_management_guarantee_mode=LOOSE
+# Each DP has its own thresholds for source based (dynamic) and for queue based (pools 0,1 and headroom).
+#  ingress_congestion_management_{source,queue,all}_threshold_percentage_color_[0-3]=[0-100] default: 100,85,75,0
+#  ingress_congestion_management_{ocb_only,dram_mix}_{pool_{0,1},headroom}=size default: 0
+#  ingress_congestion_management_min_resource_percentage_dynamic=[0-80] default: 20
+
+# Configure maximum IDs of ST-VSQs, maximum IDs of TM-ports, and enabling/disabling header compensation. 
+ingress_congestion_management_stag_max_id.BCM88675=0
+ingress_congestion_management_tm_port_max_id.BCM88675=255
+ingress_congestion_management_pkt_header_compensation_enable.BCM88675=0
+
+# The number of packet buffers used for the allocation of DMA memory at BCM RX task
+# The pool size determined by nof_pkts (256) * 16K.
+#rx_pool_nof_pkts.BCM88675=256
+
+
+# Set the number of priorities supported at egress per Port
+# Options: 1 / 2 / 8
+port_priorities.BCM88650=8
+port_priorities.BCM88675=2
+port_priorities.BCM88470=2
+port_priorities.BCM88270=2
+port_priorities.BCM88680=2
+
+
+# Set the shared multicast resource mode: Strict / Discrete
+egress_shared_resources_mode.BCM88650=Strict
+
+# Define outgoing port rate mode in data rate or packet rate.
+# Options: DATA / PACKET
+otm_port_packet_rate.BCM88650=DATA
+
+# Set Port egress recycling scheduler configuration.
+# 0: Strict Priority Scheduler, 1: Round Robin Scheduler
+port_egress_recycling_scheduler_configuration.BCM88650=0
+
+# Set statically the region mode per region id
+# 0: queue connectors only (InterDigitated = FALSE, OddEven = TRUE)
+# 1: queue connectors, SE (InterDigitated =TRUE, OddEven = TRUE)
+# 2: queue connectors, SE (InterDigitated =TRUE, OddEven = FALSE)
+dtm_flow_mapping_mode_region_65.BCM88650=0
+dtm_flow_mapping_mode_region_66.BCM88650=0
+dtm_flow_mapping_mode_region_67.BCM88650=0
+dtm_flow_mapping_mode_region_68.BCM88650=0
+dtm_flow_mapping_mode_region_69.BCM88650=0
+dtm_flow_mapping_mode_region_70.BCM88650=0
+dtm_flow_mapping_mode_region_71.BCM88650=0
+dtm_flow_mapping_mode_region_72.BCM88650=0
+dtm_flow_mapping_mode_region_73.BCM88650=0
+dtm_flow_mapping_mode_region_74.BCM88650=0
+dtm_flow_mapping_mode_region_75.BCM88650=0
+dtm_flow_mapping_mode_region_76.BCM88650=0
+dtm_flow_mapping_mode_region_77.BCM88650=0
+dtm_flow_mapping_mode_region_78.BCM88650=0
+dtm_flow_mapping_mode_region_79.BCM88650=0
+dtm_flow_mapping_mode_region_80.BCM88650=0
+dtm_flow_mapping_mode_region_81.BCM88650=1
+dtm_flow_mapping_mode_region_82.BCM88650=1
+dtm_flow_mapping_mode_region_83.BCM88650=1
+dtm_flow_mapping_mode_region_84.BCM88650=1
+dtm_flow_mapping_mode_region_85.BCM88650=1
+dtm_flow_mapping_mode_region_86.BCM88650=1
+dtm_flow_mapping_mode_region_87.BCM88650=1
+dtm_flow_mapping_mode_region_88.BCM88650=1
+dtm_flow_mapping_mode_region_89.BCM88650=1
+dtm_flow_mapping_mode_region_90.BCM88650=1
+dtm_flow_mapping_mode_region_91.BCM88650=1
+dtm_flow_mapping_mode_region_92.BCM88650=1
+dtm_flow_mapping_mode_region_93.BCM88650=1
+dtm_flow_mapping_mode_region_94.BCM88650=1
+dtm_flow_mapping_mode_region_95.BCM88650=1
+dtm_flow_mapping_mode_region_96.BCM88650=1
+dtm_flow_mapping_mode_region_97.BCM88650=1
+dtm_flow_mapping_mode_region_98.BCM88650=1
+dtm_flow_mapping_mode_region_99.BCM88650=2
+dtm_flow_mapping_mode_region_100.BCM88650=2
+dtm_flow_mapping_mode_region_101.BCM88650=2
+dtm_flow_mapping_mode_region_102.BCM88650=2
+dtm_flow_mapping_mode_region_103.BCM88650=2
+dtm_flow_mapping_mode_region_104.BCM88650=2
+dtm_flow_mapping_mode_region_105.BCM88650=2
+dtm_flow_mapping_mode_region_106.BCM88650=2
+dtm_flow_mapping_mode_region_107.BCM88650=2
+dtm_flow_mapping_mode_region_108.BCM88650=2
+dtm_flow_mapping_mode_region_109.BCM88650=2
+dtm_flow_mapping_mode_region_110.BCM88650=2
+dtm_flow_mapping_mode_region_111.BCM88650=2
+dtm_flow_mapping_mode_region_112.BCM88650=2
+dtm_flow_mapping_mode_region_113.BCM88650=2
+dtm_flow_mapping_mode_region_114.BCM88650=2
+dtm_flow_mapping_mode_region_115.BCM88650=2
+dtm_flow_mapping_mode_region_116.BCM88650=2
+dtm_flow_mapping_mode_region_117.BCM88650=2
+dtm_flow_mapping_mode_region_118.BCM88650=2
+dtm_flow_mapping_mode_region_119.BCM88650=2
+dtm_flow_mapping_mode_region_120.BCM88650=2
+dtm_flow_mapping_mode_region_121.BCM88650=2
+dtm_flow_mapping_mode_region_122.BCM88650=2
+dtm_flow_mapping_mode_region_123.BCM88650=2
+dtm_flow_mapping_mode_region_124.BCM88650=2
+dtm_flow_mapping_mode_region_125.BCM88650=2
+dtm_flow_mapping_mode_region_126.BCM88650=2
+dtm_flow_mapping_mode_region_127.BCM88650=2
+dtm_flow_mapping_mode_region_128.BCM88650=2
+
+## Configure number of symmetric cores each region supports ##
+dtm_flow_nof_remote_cores_region_1.BCM88650=2
+dtm_flow_nof_remote_cores_region_2.BCM88650=2
+dtm_flow_nof_remote_cores_region_3.BCM88650=2
+dtm_flow_nof_remote_cores_region_4.BCM88650=2
+dtm_flow_nof_remote_cores_region_5.BCM88650=2
+dtm_flow_nof_remote_cores_region_6.BCM88650=2
+dtm_flow_nof_remote_cores_region_7.BCM88650=2
+dtm_flow_nof_remote_cores_region_8.BCM88650=2
+dtm_flow_nof_remote_cores_region_9.BCM88650=2
+dtm_flow_nof_remote_cores_region_10.BCM88650=2
+dtm_flow_nof_remote_cores_region_11.BCM88650=2
+dtm_flow_nof_remote_cores_region_12.BCM88650=2
+dtm_flow_nof_remote_cores_region_13.BCM88650=2
+dtm_flow_nof_remote_cores_region_14.BCM88650=2
+dtm_flow_nof_remote_cores_region_15.BCM88650=2
+dtm_flow_nof_remote_cores_region_16.BCM88650=2
+dtm_flow_nof_remote_cores_region_17.BCM88650=2
+dtm_flow_nof_remote_cores_region_18.BCM88650=2
+dtm_flow_nof_remote_cores_region_19.BCM88650=2
+dtm_flow_nof_remote_cores_region_20.BCM88650=2
+dtm_flow_nof_remote_cores_region_21.BCM88650=2
+dtm_flow_nof_remote_cores_region_22.BCM88650=2
+dtm_flow_nof_remote_cores_region_23.BCM88650=2
+dtm_flow_nof_remote_cores_region_24.BCM88650=2
+dtm_flow_nof_remote_cores_region_25.BCM88650=2
+dtm_flow_nof_remote_cores_region_26.BCM88650=2
+dtm_flow_nof_remote_cores_region_27.BCM88650=2
+dtm_flow_nof_remote_cores_region_28.BCM88650=2
+dtm_flow_nof_remote_cores_region_29.BCM88650=2
+dtm_flow_nof_remote_cores_region_30.BCM88650=2
+dtm_flow_nof_remote_cores_region_31.BCM88650=2
+dtm_flow_nof_remote_cores_region_32.BCM88650=2
+dtm_flow_nof_remote_cores_region_33.BCM88650=2
+dtm_flow_nof_remote_cores_region_34.BCM88650=2
+dtm_flow_nof_remote_cores_region_35.BCM88650=2
+dtm_flow_nof_remote_cores_region_36.BCM88650=2
+dtm_flow_nof_remote_cores_region_37.BCM88650=2
+dtm_flow_nof_remote_cores_region_38.BCM88650=2
+dtm_flow_nof_remote_cores_region_39.BCM88650=2
+dtm_flow_nof_remote_cores_region_40.BCM88650=2
+dtm_flow_nof_remote_cores_region_41.BCM88650=2
+dtm_flow_nof_remote_cores_region_42.BCM88650=2
+dtm_flow_nof_remote_cores_region_43.BCM88650=2
+dtm_flow_nof_remote_cores_region_44.BCM88650=2
+dtm_flow_nof_remote_cores_region_45.BCM88650=2
+dtm_flow_nof_remote_cores_region_46.BCM88650=2
+dtm_flow_nof_remote_cores_region_47.BCM88650=2
+dtm_flow_nof_remote_cores_region_48.BCM88650=2
+dtm_flow_nof_remote_cores_region_49.BCM88650=2
+dtm_flow_nof_remote_cores_region_50.BCM88650=2
+dtm_flow_nof_remote_cores_region_51.BCM88650=2
+dtm_flow_nof_remote_cores_region_52.BCM88650=2
+dtm_flow_nof_remote_cores_region_53.BCM88650=2
+dtm_flow_nof_remote_cores_region_54.BCM88650=2
+dtm_flow_nof_remote_cores_region_55.BCM88650=2
+dtm_flow_nof_remote_cores_region_56.BCM88650=2
+dtm_flow_nof_remote_cores_region_57.BCM88650=2
+dtm_flow_nof_remote_cores_region_58.BCM88650=2
+dtm_flow_nof_remote_cores_region_59.BCM88650=2
+dtm_flow_nof_remote_cores_region_60.BCM88650=2
+#dtm_flow_nof_remote_cores_region_core0_2.BCM88675=2
+
+## Configure number of symmetric cores each region supports ##
+#device_core_mode.BCM88470=SINGLE_CORE
+# IL region has offset of 63, i.e. region_1 here will show as region 64 in code
+## Configure number of symmetric cores each region supports ##
+dtm_flow_nof_remote_cores_region_1.BCM88470=2
+dtm_flow_nof_remote_cores_region_2.BCM88470=2
+dtm_flow_nof_remote_cores_region_3.BCM88470=1
+dtm_flow_nof_remote_cores_region_4.BCM88470=1
+dtm_flow_nof_remote_cores_region_5.BCM88470=2
+dtm_flow_nof_remote_cores_region_6.BCM88470=1
+dtm_flow_nof_remote_cores_region_7.BCM88470=2
+dtm_flow_nof_remote_cores_region_8.BCM88470=2
+dtm_flow_nof_remote_cores_region_9.BCM88470=1
+dtm_flow_nof_remote_cores_region_10.BCM88470=1
+dtm_flow_nof_remote_cores_region_11.BCM88470=1
+dtm_flow_nof_remote_cores_region_12.BCM88470=1
+dtm_flow_nof_remote_cores_region_13.BCM88470=1
+dtm_flow_nof_remote_cores_region_14.BCM88470=1
+dtm_flow_nof_remote_cores_region_15.BCM88470=1
+dtm_flow_nof_remote_cores_region_16.BCM88470=1
+dtm_flow_nof_remote_cores_region_17.BCM88470=1
+dtm_flow_nof_remote_cores_region_18.BCM88470=2
+dtm_flow_nof_remote_cores_region_19.BCM88470=1
+dtm_flow_nof_remote_cores_region_20.BCM88470=1
+dtm_flow_nof_remote_cores_region_21.BCM88470=1
+dtm_flow_nof_remote_cores_region_22.BCM88470=1
+dtm_flow_nof_remote_cores_region_23.BCM88470=1
+dtm_flow_nof_remote_cores_region_24.BCM88470=1
+dtm_flow_nof_remote_cores_region_25.BCM88470=1
+dtm_flow_nof_remote_cores_region_26.BCM88470=1
+dtm_flow_nof_remote_cores_region_27.BCM88470=1
+dtm_flow_nof_remote_cores_region_28.BCM88470=1
+dtm_flow_nof_remote_cores_region_29.BCM88470=1
+dtm_flow_nof_remote_cores_region_30.BCM88470=1
+dtm_flow_nof_remote_cores_region_31.BCM88470=1
+dtm_flow_nof_remote_cores_region_32.BCM88470=1
+dtm_flow_nof_remote_cores_region_33.BCM88470=1
+dtm_flow_nof_remote_cores_region_34.BCM88470=1
+dtm_flow_nof_remote_cores_region_35.BCM88470=1
+dtm_flow_nof_remote_cores_region_36.BCM88470=1
+
+dtm_flow_nof_remote_cores_region_37.BCM88470=1
+dtm_flow_nof_remote_cores_region_38.BCM88470=1
+dtm_flow_nof_remote_cores_region_39.BCM88470=1
+dtm_flow_nof_remote_cores_region_40.BCM88470=1
+dtm_flow_nof_remote_cores_region_41.BCM88470=1
+dtm_flow_nof_remote_cores_region_42.BCM88470=1
+dtm_flow_nof_remote_cores_region_43.BCM88470=1
+dtm_flow_nof_remote_cores_region_44.BCM88470=1
+dtm_flow_nof_remote_cores_region_45.BCM88470=1
+dtm_flow_nof_remote_cores_region_46.BCM88470=1
+dtm_flow_nof_remote_cores_region_47.BCM88470=1
+dtm_flow_nof_remote_cores_region_48.BCM88470=1
+dtm_flow_nof_remote_cores_region_49.BCM88470=1
+dtm_flow_nof_remote_cores_region_50.BCM88470=1
+dtm_flow_nof_remote_cores_region_51.BCM88470=1
+dtm_flow_nof_remote_cores_region_52.BCM88470=1
+dtm_flow_nof_remote_cores_region_53.BCM88470=1
+dtm_flow_nof_remote_cores_region_54.BCM88470=1
+dtm_flow_nof_remote_cores_region_55.BCM88470=1
+dtm_flow_nof_remote_cores_region_56.BCM88470=1
+dtm_flow_nof_remote_cores_region_57.BCM88470=1
+dtm_flow_nof_remote_cores_region_58.BCM88470=1
+dtm_flow_nof_remote_cores_region_59.BCM88470=1
+dtm_flow_nof_remote_cores_region_60.BCM88470=1
+
+dtm_flow_mapping_mode_region_33.BCM88470=0
+dtm_flow_mapping_mode_region_34.BCM88470=0
+dtm_flow_mapping_mode_region_35.BCM88470=0
+dtm_flow_mapping_mode_region_36.BCM88470=0
+dtm_flow_mapping_mode_region_37.BCM88470=0
+dtm_flow_mapping_mode_region_38.BCM88470=0
+dtm_flow_mapping_mode_region_39.BCM88470=0
+dtm_flow_mapping_mode_region_40.BCM88470=0
+
+## Configure number of symmetric cores each region supports ##
+dtm_flow_nof_remote_cores_region_1.BCM88270=2
+dtm_flow_nof_remote_cores_region_2.BCM88270=2
+dtm_flow_nof_remote_cores_region_3.BCM88270=2
+dtm_flow_nof_remote_cores_region_4.BCM88270=2
+dtm_flow_nof_remote_cores_region_5.BCM88270=2
+dtm_flow_nof_remote_cores_region_6.BCM88270=2
+dtm_flow_nof_remote_cores_region_7.BCM88270=2
+dtm_flow_nof_remote_cores_region_8.BCM88270=2
+dtm_flow_nof_remote_cores_region_9.BCM88270=2
+dtm_flow_nof_remote_cores_region_10.BCM88270=2
+dtm_flow_nof_remote_cores_region_11.BCM88270=2
+dtm_flow_nof_remote_cores_region_12.BCM88270=2
+dtm_flow_nof_remote_cores_region_13.BCM88270=2
+dtm_flow_nof_remote_cores_region_14.BCM88270=2
+dtm_flow_nof_remote_cores_region_15.BCM88270=2
+dtm_flow_nof_remote_cores_region_16.BCM88270=2
+dtm_flow_nof_remote_cores_region_17.BCM88270=2
+dtm_flow_nof_remote_cores_region_18.BCM88270=2
+dtm_flow_nof_remote_cores_region_19.BCM88270=1
+dtm_flow_nof_remote_cores_region_20.BCM88270=1
+dtm_flow_nof_remote_cores_region_21.BCM88270=1
+dtm_flow_nof_remote_cores_region_22.BCM88270=1
+dtm_flow_nof_remote_cores_region_23.BCM88270=1
+dtm_flow_nof_remote_cores_region_24.BCM88270=1
+dtm_flow_nof_remote_cores_region_25.BCM88270=1
+dtm_flow_nof_remote_cores_region_26.BCM88270=1
+dtm_flow_nof_remote_cores_region_27.BCM88270=1
+dtm_flow_nof_remote_cores_region_28.BCM88270=1
+dtm_flow_nof_remote_cores_region_29.BCM88270=1
+dtm_flow_nof_remote_cores_region_30.BCM88270=1
+dtm_flow_nof_remote_cores_region_31.BCM88270=1
+dtm_flow_nof_remote_cores_region_32.BCM88270=1
+
+dtm_flow_mapping_mode_region_17.BCM88270=0
+dtm_flow_mapping_mode_region_18.BCM88270=0
+dtm_flow_mapping_mode_region_19.BCM88270=0
+dtm_flow_mapping_mode_region_20.BCM88270=0
+
+### Flow Control configuration ###
+# Set the Flow control type per Port.
+# Options: LL (Link-level) / CB2 (Class-Based - 2 classes) /
+# CB8 (Class-Based - 8 classes)
+# flow_control_type.BCM88650=LL
+
+## Out-Of-Band Flow control configuration
+#spn_FC_OOB_TYPE, spn_FC_OOB_MODE, spn_FC_OOB_CALENDER_LENGTH, spn_FC_OOB_CALENDER_REP_COUNT,
+
+## Set voltage mode for oob interfaces
+#HSTL_1.5V
+#3.3V
+#HSTL_1.5V_VDDO_DIV_2
+ext_voltage_mode_oob=3.3V
+
+## Inband Interlaken configuration
+# spn_FC_INBAND_INTLKN_MODE, spn_FC_INBAND_INTLKN_CALENDER_LENGTH, spn_FC_INBAND_INTLKN_CALENDER_REP_COUNT
+# spn_FC_INBAND_INTLKN_CALENDER_LLFC_MODE, spn_FC_INBAND_INTLKN_LLFC_MUB_ENABLE_MASK
+
+### Meter engine configuration ###
+
+# Specify meter operation mode
+# 32 - Two meters per packet (32k total)
+# 64 - One meter per packet (64k total) or two meter per packet in dual core device configured as SINGLE_CORE (128K total)
+# 128 - One meter per packet in dual core device configured as SINGLE_CORE (128K total)
+# Options: 0, 32, 64, 128
+policer_ingress_count.BCM88650=32
+policer_ingress_count.BCM88470=32
+policer_ingress_count.BCM88270=32
+policer_ingress_count.BCM88680=32
+
+
+# For meters in double 32k/64K mode, determine the sharing mode
+# Options:
+# 0 - NONE - For 64k or 128K (one meter per packet)
+# 1 - SERIAL - 32k mode only (two meters per packet)
+# 2 - PARALLEL - For 32k or 64k (two meter per packet)
+policer_ingress_sharing_mode.BCM88650=1
+policer_ingress_sharing_mode.BCM88470=1
+policer_ingress_sharing_mode.BCM88270=1
+policer_ingress_sharing_mode.BCM88680=1
+
+
+# Applies only to Arad+ (88660)
+# For meters in parallel mode, determine the mapping
+# Options: BEST, WORST
+# policer_result_parallel_color_map.BCM88650=WORST
+
+# Applies only to Arad+ (88660)
+# For meters in parallel mode, determine how the buckets are changed
+# Options: CONSTANT, TRANSPARENT, DEFERRED
+# policer_result_parallel_bucket_update.BCM88650=CONSTANT
+
+# Applies only to Arad+ (88660)
+# Set the Ethernet policer to work in color blind mode
+# rate_color_blind.BCM88650=1
+
+# L2 learn limit mode
+# Options: VLAN, VLAN_PORT, TUNNEL or the numeric equivalent 0-2.
+# Default: VLAN
+# l2_learn_limit_mode = VLAN_PORT
+
+# Applies only to Arad+ (88660)
+# Determines the L2 learn limit ranges when l2_learn_limit_mode is set to VLAN_PORT
+# Two range bases can be selected, each of 16K size.
+# Options: 0, 16K, 32K, 48K.
+# Default: 0 & 16K
+# l2_learn_lif_range_base_0 = 0
+# l2_learn_lif_range_base_1 = 16K
+
+# SW shadow mode for exact match tables. Required for SER support and DBAL diagnostics.
+#   0 - Disabled (Default)
+#   1 - Enabled
+#   2 - Disabled for LEM, enabled for other exact match tables
+exact_match_tables_shadow_enable.BCM88650 = 1
+exact_match_tables_shadow_enable.BCM88675 = 2
+
+# determine how many cmcs connected to the CPU. 
+# default value = 1
+# applies only to jericho and above. 
+pci_cmcs_num.88675 = 3
+pci_cmcs_num.88470 = 3
+
+### Counter engine configuration ###
+
+# Set the Counter source
+# Options: INGRESS_FIELD / INGRESS_VOQ / INGRESS_VSQ / INGRESS_CNM / 
+# INGRESS_LATENCY / EGRESS_FIELD / EGRESS_VSI / EGRESS_OUT_LIF / EGRESS_TM (per queue) / EGRESS_TM_PORT (per port)
+# EGRESS_RECEIVE_VSI / EGRESS_RECEIVE_OUT_LIF / EGRESS_RECEIVE_TM (per queue) / EGRESS_RECEIVE_TM_PORT (per port)
+# INGRESS_OAM / EGRESS_OAM
+# 2 Counter-Pointers can be set (with _0 and _1) for
+# INGRESS_FIELD / EGRESS_FIELD / EGRESS_VSI / EGRESS_OUT_LIF / EGRESS_TM / EGRESS_TM_PORT
+# Range extension can be set (with _LSB and _MSB) for
+# INGRESS_FIELD / EGRESS_VSI / EGRESS_OUT_LIF / EGRESS_TM / EGRESS_TM_PORT /EGRESS_RECEIVE_VSI /
+# EGRESS_RECEIVE_OUT_LIF / EGRESS_RECEIVE_TM / EGRESS_RECEIVE_TM_PORT
+counter_engine_source_0.BCM88650=INGRESS_FIELD_0
+counter_engine_source_1.BCM88650=INGRESS_FIELD_1
+counter_engine_source_2.BCM88650=INGRESS_VOQ
+counter_engine_source_3.BCM88650=EGRESS_FIELD
+
+# Configure the statistic interface egress transmit PP source and the ingress received PP source
+# Options for egress: EGRESS_VSI / EGRESS_OUT_LIF / EGRESS_TM / EGRESS_TM_PORT (the default is TM)
+# Options for ingress: INGRESS_VSI / INGRESS_IN_LIF / INGRESS_TM (the default is TM)
+# valid just when there is no conflict with the other counter engines
+#counter_engine_source_egress_pp_stat0.BCM88650=EGRESS_TM
+#counter_engine_source_egress_pp_stat1.BCM88650=EGRESS_VSI
+#counter_engine_source_ingress_pp_stat0.BCM88650=INGRESS_IN_LIF
+#counter_engine_source_ingress_pp_stat1.BCM88650=INGRESS_TM
+
+
+# Set the Counter engine resolution
+# SIMPLE_COLOR = green, not green
+# SIMPLE_COLOR_FWD = fwd green, fwd not green (BCM88660_A0 only)
+# SIMPLE_COLOR_DROP = drop green, drop not green (BCM88660_A0 only)
+# FWD_DROP = forwarded, dropped
+# GREEN_NOT_GREEN = fwd grn, drop grn, fwd not grn, drop not grn
+# FULL_COLOR = fwd grn, drop grn, fwd not grn, drop yel, drop red
+# ALL = received
+# FWD = forwarded, DROP = droped (not supported by ARAD_A0)
+# CONFIGURABLE = defined by counter_engine_map_ SOC properties (BCM88660_A0 only)
+counter_engine_statistics_0.BCM88650=FULL_COLOR
+counter_engine_statistics_1.BCM88650=FULL_COLOR
+counter_engine_statistics_2.BCM88650=FULL_COLOR
+counter_engine_statistics_3.BCM88650=FULL_COLOR
+
+# Set the Counter format
+# Options: PACKETS_AND_BYTES / PACKETS / BYTES
+# / MAX_QUEUE_SIZE / LATENCY / PACKETS_AND_PACKETS(supported just in FWD_DROP statistic in BCM88660_A0)
+# If not PACKETS_AND_BYTES or PACKETS_AND_PACKETS, the HW Counter width is 59 bits, thus
+# no background SW operation is performed
+counter_engine_format_0.BCM88650=PACKETS_AND_BYTES
+counter_engine_format_1.BCM88650=PACKETS_AND_BYTES
+counter_engine_format_2.BCM88650=PACKETS_AND_BYTES
+counter_engine_format_3.BCM88650=PACKETS_AND_BYTES
+
+# #enable/disable counter processor background thread (default:1-enable)
+# counter_engine_sampling_interval=1
+
+
+### Configurable mode configuration (BCM88660_A0 only)###
+# counter_engine_statistics_0.BCM88660_A0=CONFIGURABLE
+# counter_engine_map_enable_0.BCM88660_A0=1
+# counter_engine_map_size_0.BCM88660_A0=4
+# counter_engine_map_fwd_green_offset_0.BCM88660_A0=0
+# counter_engine_map_fwd_yellow_offset_0.BCM88660_A0=1
+# counter_engine_map_fwd_red_offset_0.BCM88660_A0=1
+# counter_engine_map_fwd_black_offset_0.BCM88660_A0=2
+# counter_engine_map_drop_green_offset_0.BCM88660_A0=3
+# counter_engine_map_drop_yellow_offset_0.BCM88660_A0=3
+# counter_engine_map_drop_red_offset_0.BCM88660_A0=3
+# counter_engine_map_drop_black_offset_0.BCM88660_A0=3
+
+### Statistic-Report configuration ###
+# Enable the Statistic-Interface configuration
+# stat_if_enable_<port> - not supported by ARAD_A0
+# stat_if_enable.BCM88650=1
+
+# ## Statistic-Report Properties
+# # Set Statistic-Report interface rate in Mbps
+# # If Value is '0' the statistics port rate will be used. Default: 0.
+# stat_if_rate.BCM88650=0
+# # Set the Statistic-Report mode
+# # Options: BILLING / BILLING_QUEUE_NUMBER (not supported by ARAD_A0)/ QSIZE
+# stat_if_report_mode.BCM88650=QSIZE
+# #Indicate if idle reports must be sent
+# #when the Statistic-report rate is too low
+# stat_if_idle_reports_present.BCM88650=0
+# # Indicate if the reported packet size is the original packet size
+# stat_if_report_original_pkt_size.BCM88650=1
+# #If set then a single ingress-billing report will be generated
+# #for the whole set of the multicast copies
+# stat_if_report_multicast_single_copy=1
+# ## Statistic Packet configurations
+# # Set the Statistic Packet size (Bytes)
+# # Valid values: 65B/126B/248B/492B (Queue-Size), 64B/128B/256B/512B/1024B (Billing).
+# stat_if_pkt_size=64B
+#
+# ## Scrubber configuration
+# # Set the range of VOQs to scrub. Range: 0 - 96K-1.
+# stat_if_scrubber_queue_min.BCM88650=0
+# stat_if_scrubber_queue_max.BCM88650=0
+#
+# # Set the scrubber rate range
+# # If set to 0 (default), the scrubber is disabled. Units: nanoseconds
+# stat_if_scrubber_rate_min.BCM88650=0
+# stat_if_scrubber_rate_max.BCM88650=0
+#
+# # Set the thresholds (thresh_id 0 - 15) defining
+# # occupancy range per resource type:
+# # DRAM Buffers, Buffer descriptors, Buffer descriptors buffers
+# stat_if_scrubber_bdb_th.BCM88650=0
+# stat_if_scrubber_buffer_descr_th.BCM88650=0
+# stat_if_uc_dram_buffer_descr_th.BCM88650=0
+#
+# #Relective report for queue size mode - not supported by ARAD_A0
+# #Reports will be created for queue num range (stat_if_selective_report_queue_min -stat_if_selective_report_queue_max)
+# #Default - all range
+# stat_if_selective_report_queue_min.BCM88650_B0=0
+# stat_if_selective_report_queue_max.BCM88650_B0=98303
+
+### Transaction - DMA configuration ###
+# Time to wait for SCHAN channel response (from CMIC). Units: microseconds.
+
+
+### Counter threads ###
+# # set port bitmap on which statistics collection will be enabled (default all ports)
+# bcm_stat_pbmp.BCM88675=0xfffffffff000000000000000000000000000000000000000000000000000000000003e002
+#
+# # set statistics collection interval in microseconds (default is 1000000)
+# bcm_stat_interval.BCM88675=1000000
+
+### Control optimization of cosq port initializations: speed for memory ###
+runtime_performance_optimize_enable_sched_allocation.BCM88650=1
+runtime_performance_optimize_enable_sched_allocation.BCM88675=1
+
+### static tables initiation (Supported for Jericho) ###
+# Options: 1 - initiating static tables, 0 - doesn't initiate tables (Default Value for PCID/emulation)
+#custom_feature_static_tbl_full_init.BCM88675=1
+#custom_feature_dynamic_tbl_full_init.BCM88675=1
+
+### Interrupts ###
+## Set interrupts global parameters.
+# Options: 1 - Polling interrupt mode, 0 - Line/MSI interrupt mode. Default: 1.
+polled_irq_mode.BCM88650=0
+polled_irq_mode.BCM88675=0
+#  Set the delay in microsecond between the polling, relevant only to Polling mode.  Default: 0x0.
+polled_irq_delay.BCM88650=50000
+
+## CMIC interrupts:
+# Enable: Use interrupts completion instead of polling completion for the following operations.
+#         Options: 1 - Enable, 0 - Disable. Default: 0.
+# Timeout: delay in Microsecond between the polling, relevant only to Polling completion mode.
+# SCHAN:
+#schan_intr_enable.0=1
+schan_timeout_usec.BCM88650=300000
+# TDMA
+tdma_intr_enable.BCM88650=1
+tdma_intr_enable.BCM88675=0
+tdma_timeout_usec.BCM88650=5000000
+tdma_timeout_usec.BCM88675=560000000
+# TSLAM
+tslam_intr_enable.BCM88650=1
+tslam_intr_enable.BCM88675=0
+tslam_timeout_usec.BCM88650=5000000
+tslam_timeout_usec.BCM88675=560000000
+# MIIM
+#miim_intr_enable.0=1
+miim_timeout_usec.0=300000
+
+### DRAM configuration ###
+
+# DRAM buffer (Dbuff) size
+# Allowed values: 256/512/1024/2048.
+ext_ram_dbuff_size.BCM88650=1024
+ext_ram_dbuff_size.BCM88470=4096
+ext_ram_dbuff_size.BCM88270=4096
+
+# Number of external DRAMs.
+# Allowed values for 88650: 0/2/3/4/6/8.
+# Allowed values for 88660: 0/1/2/3/4/6/8. A value of 1 is permitted only in ONE WAY BYPASS ocb mode.
+# Allowed values for 88675: 0/2/3/41/42/6/8. '41' - configure 4 drams in Single Side mode (A, B, C, D).
+#                                            '42' - configure 4 drams in symmetric mode (A, C, F, H).
+# Value of 0 disables the DRAM.
+ext_ram_present.BCM88650=8
+## this soc is configured in per board soc file (bcm88x7x_board.soc)
+ext_ram_present.BCM88470=3
+ext_ram_present.BCM88270=1
+
+### Dram Tuning (Shmoo)
+# 3 = Skip Dram Tuning (Shmoo).
+# 2 = Use Dram saved config Parameters, if no Parameters Perform Shmoo on init. Default option.
+# 1 = Perform Shmoo on init.
+# 0 = Use Dram saved config Parameters, if no Parameters do nothing.
+ddr3_auto_tune.BCM88650=2
+ddr3_auto_tune.BCM88270=2
+ddr3_auto_tune.BCM88470=2
+
+##### DDR Tuning parameters for IL SVK4
+combo28_tune_dq_wr_min_vdl_byte3_ci1.0=0x00000004,0x00000003,0x00000007,0x00000003,0x00000002,0x00000000,0x00000006,0x00000004,
+combo28_tune_dq_rd_min_vdl_byte1_ci2.0=0x00000017,0x00000014,0x00000016,0x00000014,0x00000017,0x00000018,0x00000017,0x00000017,
+combo28_tune_common_macro_reserved_reg_ci0.0=0x00000000,
+combo28_tune_control_regs_reserved_reg_ci1.0=0x00000003,
+combo28_tune_control_regs_read_clock_config_ci0.0=0x00000002,
+combo28_tune_dq_rd_min_vdl_byte2_ci0.0=0x00000018,0x00000017,0x00000017,0x00000018,0x00000017,0x00000014,0x00000015,0x00000017,
+combo28_tune_dq_read_max_vdl_fsm_ci1.0=0x0000004c,0x0000004c,0x0000004c,0x0000004c,
+combo28_tune_aq_u_max_vdl_ctrl_ci1.0=0x00000214,
+combo28_tune_dq_rd_max_vdl_dqsn_ci1.0=0x00000017,0x00000019,0x0000002d,0x0000002d,
+combo28_tune_dq_ren_fifo_config_ci0.0=0x00000090,0x00000090,0x00000090,0x00000090,
+combo28_tune_dq_wr_min_vdl_dbi_ci1.0=0x00000001,0x00000004,0x00000002,0x00000003,
+combo28_tune_aq_u_macro_reserved_reg_ci0.0=0x00000000,
+combo28_tune_dq_rd_min_vdl_edc_ci1.0=0x00000016,0x00000016,0x00000017,0x0000001a,
+combo28_tune_aq_l_max_vdl_addr_ci1.0=0x00000214,
+combo28_tune_dq_wr_max_vdl_data_ci2.0=0x00000238,0x00000406,0x00000247,0x00000416,
+combo28_tune_dq_wr_min_vdl_byte3_ci2.0=0x00000000,0x00000003,0x00000000,0x00000000,0x00000000,0x00000003,0x00000001,0x00000001,
+combo28_tune_common_macro_reserved_reg_ci1.0=0x00000000,
+combo28_tune_control_regs_reserved_reg_ci2.0=0x00000003,
+combo28_tune_control_regs_read_clock_config_ci1.0=0x00000002,
+combo28_tune_dq_rd_min_vdl_byte2_ci1.0=0x00000015,0x00000015,0x00000019,0x00000017,0x00000014,0x00000016,0x00000018,0x00000016,
+combo28_tune_dq_read_max_vdl_fsm_ci2.0=0x0000004d,0x0000004d,0x0000004d,0x0000004d,
+combo28_tune_aq_u_max_vdl_ctrl_ci2.0=0x00000048,
+combo28_tune_dq_rd_max_vdl_dqsn_ci2.0=0x00000023,0x00000022,0x0000002c,0x00000020,
+combo28_tune_dq_ren_fifo_config_ci1.0=0x00000090,0x00000090,0x00000090,0x00000090,
+combo28_tune_dq_wr_min_vdl_dbi_ci2.0=0x00000002,0x00000001,0x00000003,0x00000001,
+combo28_tune_aq_u_macro_reserved_reg_ci1.0=0x00000000,
+combo28_tune_dq_rd_min_vdl_edc_ci2.0=0x00000016,0x00000017,0x00000016,0x00000017,
+combo28_tune_aq_l_max_vdl_addr_ci2.0=0x00000048,
+combo28_tune_control_regs_ren_fifo_central_initializer_ci0.0=0x0000000f,
+combo28_tune_common_macro_reserved_reg_ci2.0=0x00000000,
+combo28_tune_control_regs_read_clock_config_ci2.0=0x00000002,
+combo28_tune_dq_rd_min_vdl_byte2_ci2.0=0x00000018,0x00000016,0x00000015,0x00000014,0x00000015,0x00000015,0x00000014,0x00000015,
+combo28_tune_dq_wr_min_vdl_byte0_ci0.0=0x00000001,0x00000002,0x00000000,0x00000002,0x00000002,0x00000003,0x00000004,0x00000001,
+combo28_tune_dq_ren_fifo_config_ci2.0=0x00000090,0x00000090,0x00000090,0x00000090,
+combo28_tune_dq_rd_min_vdl_byte3_ci0.0=0x00000019,0x00000017,0x0000001a,0x0000001c,0x00000017,0x00000018,0x00000014,0x00000014,
+combo28_tune_aq_u_macro_reserved_reg_ci2.0=0x00000000,
+combo28_tune_control_regs_ren_fifo_central_initializer_ci1.0=0x0000000f,
+combo28_tune_aq_l_max_vdl_ctrl_ci0.0=0x00000201,
+combo28_tune_control_regs_input_shift_ctrl_ci0.0=0x00000070,
+combo28_tune_dq_wr_min_vdl_byte0_ci1.0=0x00000005,0x00000001,0x00000000,0x00000000,0x00000001,0x00000000,0x00000000,0x00000003,
+combo28_tune_dq_rd_min_vdl_byte3_ci1.0=0x00000018,0x00000017,0x0000001c,0x0000001d,0x00000014,0x00000017,0x0000001e,0x0000001d,
+combo28_tune_control_regs_ren_fifo_central_initializer_ci2.0=0x0000000f,
+combo28_tune_dq_rd_max_vdl_dqsp_ci0.0=0x00000018,0x00000019,0x00000025,0x0000002b,
+combo28_tune_aq_l_max_vdl_ctrl_ci1.0=0x00000214,
+combo28_tune_control_regs_input_shift_ctrl_ci1.0=0x00000070,
+combo28_tune_dq_wr_min_vdl_byte0_ci2.0=0x00000000,0x00000005,0x00000003,0x00000003,0x00000003,0x00000003,0x00000003,0x00000002,
+combo28_tune_dq_wr_min_vdl_edc_ci0.0=0x00000000,0x00000000,0x00000000,0x00000000,
+combo28_tune_dq_rd_min_vdl_byte3_ci2.0=0x00000015,0x00000017,0x00000014,0x00000015,0x00000016,0x00000018,0x00000018,0x00000019,
+combo28_tune_dq_wr_min_vdl_byte1_ci0.0=0x00000002,0x00000002,0x00000002,0x00000003,0x00000002,0x00000001,0x00000002,0x00000000,
+combo28_tune_control_regs_edcen_fifo_central_init_ci0.0=0x00000000,
+combo28_tune_dq_macro_reserved_reg_ci0.0=0x00000026,0x00000026,0x00000025,0x00000026,
+combo28_tune_dq_rd_max_vdl_dqsp_ci1.0=0x00000017,0x00000019,0x0000002d,0x0000002d,
+combo28_tune_aq_l_max_vdl_ctrl_ci2.0=0x00000048,
+combo28_tune_control_regs_input_shift_ctrl_ci2.0=0x00000070,
+combo28_tune_dq_rd_min_vdl_dbi_ci0.0=0x00000016,0x00000017,0x00000017,0x00000018,
+combo28_tune_dq_wr_min_vdl_edc_ci1.0=0x00000000,0x00000000,0x00000000,0x00000000,
+combo28_tune_dq_wr_min_vdl_byte1_ci1.0=0x00000006,0x00000007,0x00000005,0x00000005,0x00000000,0x00000001,0x00000007,0x00000005,
+combo28_tune_dq_edcen_fifo_config_ci0.0=0x00000080,0x00000080,0x00000080,0x00000080,
+combo28_tune_control_regs_edcen_fifo_central_init_ci1.0=0x00000000,
+combo28_tune_dq_vref_dac_config_ci0.0=0x00760000,0x00740000,0x00800000,0x007c0000,
+combo28_tune_dq_macro_reserved_reg_ci1.0=0x00000026,0x0000002a,0x00000028,0x00000029,
+combo28_tune_dq_rd_max_vdl_dqsp_ci2.0=0x00000023,0x00000022,0x0000002c,0x00000020,
+combo28_tune_dq_rd_min_vdl_byte0_ci0.0=0x00000016,0x00000014,0x00000014,0x00000016,0x00000015,0x00000015,0x00000016,0x00000016,
+combo28_tune_dq_rd_min_vdl_dbi_ci1.0=0x00000016,0x00000016,0x00000017,0x0000001a,
+combo28_tune_aq_u_max_vdl_addr_ci0.0=0x00000201,
+combo28_tune_dq_wr_max_vdl_dqs_ci0.0=0x00000440,0x0000044a,0x00000422,0x00000430,
+combo28_tune_dq_wr_min_vdl_edc_ci2.0=0x00000000,0x00000000,0x00000000,0x00000000,
+combo28_tune_dq_wr_min_vdl_byte1_ci2.0=0x00000003,0x00000000,0x00000002,0x00000001,0x00000002,0x00000001,0x00000004,0x00000001,
+combo28_tune_dq_edcen_fifo_config_ci1.0=0x00000080,0x00000080,0x00000080,0x00000080,
+combo28_tune_control_regs_edcen_fifo_central_init_ci2.0=0x00000000,
+combo28_tune_dq_vref_dac_config_ci1.0=0x007e0000,0x007a0000,0x00820000,0x00820000,
+combo28_tune_dq_macro_reserved_reg_ci2.0=0x00000028,0x00000028,0x0000002a,0x0000002b,
+combo28_tune_dq_wr_min_vdl_byte2_ci0.0=0x00000001,0x00000000,0x00000003,0x00000002,0x00000005,0x00000005,0x00000003,0x00000005,
+combo28_tune_dq_rd_min_vdl_byte0_ci1.0=0x00000015,0x00000017,0x00000017,0x00000017,0x00000017,0x00000015,0x00000014,0x00000015,
+combo28_tune_dq_rd_min_vdl_dbi_ci2.0=0x00000016,0x00000017,0x00000016,0x00000017,
+combo28_tune_control_regs_shared_vref_dac_config_ci0.0=0x00920000,
+combo28_tune_aq_u_max_vdl_addr_ci1.0=0x00000214,
+combo28_tune_dq_wr_max_vdl_dqs_ci1.0=0x00000440,0x00000446,0x0000042d,0x00000434,
+combo28_tune_dq_edcen_fifo_config_ci2.0=0x00000080,0x00000080,0x00000080,0x00000080,
+combo28_tune_aq_l_macro_reserved_reg_ci0.0=0x00000000,
+combo28_tune_dq_vref_dac_config_ci2.0=0x00840000,0x007e0000,0x008a0000,0x00820000,
+combo28_tune_dq_wr_min_vdl_byte2_ci1.0=0x00000000,0x00000001,0x00000002,0x00000004,0x00000003,0x00000000,0x00000004,0x00000007,
+combo28_tune_dq_rd_min_vdl_byte0_ci2.0=0x00000014,0x00000015,0x00000015,0x00000014,0x00000016,0x00000017,0x00000015,0x00000016,
+combo28_tune_control_regs_shared_vref_dac_config_ci1.0=0x00920000,
+combo28_tune_aq_u_max_vdl_addr_ci2.0=0x00000048,
+combo28_tune_dq_wr_max_vdl_dqs_ci2.0=0x00000424,0x00000435,0x0000043c,0x00000444,
+combo28_tune_dq_rd_min_vdl_byte1_ci0.0=0x00000017,0x00000017,0x00000018,0x00000018,0x00000014,0x00000015,0x00000015,0x00000015,
+combo28_tune_aq_l_macro_reserved_reg_ci1.0=0x00000000,
+combo28_tune_dq_wr_min_vdl_byte2_ci2.0=0x00000004,0x00000000,0x00000004,0x00000005,0x00000002,0x00000003,0x00000004,0x00000004,
+combo28_tune_dq_wr_max_vdl_data_ci0.0=0x00000416,0x00000428,0x00000232,0x00000241,
+combo28_tune_control_regs_shared_vref_dac_config_ci2.0=0x00920000,
+combo28_tune_dq_wr_min_vdl_byte3_ci0.0=0x00000005,0x00000005,0x00000005,0x00000004,0x00000003,0x00000003,0x00000003,0x00000000,
+combo28_tune_dq_rd_min_vdl_byte1_ci1.0=0x00000018,0x00000018,0x00000018,0x00000014,0x00000014,0x00000014,0x00000018,0x00000014,
+combo28_tune_aq_l_macro_reserved_reg_ci2.0=0x00000000,
+combo28_tune_control_regs_reserved_reg_ci0.0=0x00000003,
+combo28_tune_dq_read_max_vdl_fsm_ci0.0=0x0000004b,0x0000004b,0x0000004b,0x0000004b,
+combo28_tune_aq_u_max_vdl_ctrl_ci0.0=0x00000201,
+combo28_tune_dq_rd_max_vdl_dqsn_ci0.0=0x00000018,0x00000019,0x00000025,0x0000002b,
+combo28_tune_dq_wr_min_vdl_dbi_ci0.0=0x00000001,0x00000001,0x00000003,0x00000003,
+combo28_tune_dq_rd_min_vdl_edc_ci0.0=0x00000016,0x00000017,0x00000017,0x00000018,
+combo28_tune_aq_l_max_vdl_addr_ci0.0=0x00000201,
+combo28_tune_dq_wr_max_vdl_data_ci1.0=0x00000414,0x0000041e,0x00000234,0x00000245,
+
+### Enable BIST
+# Run Dram BIST on initialization, if BIST fail the initialization will fail. Defult: 1.
+# bist_enable_dram.BCM88650=1
+bist_enable_dram.BCM88270=1
+bist_enable_dram.BCM88470=1
+
+### Example for Dram Saved config Parameters.
+## This example is for ci=14 (Dram=7).
+#ddr3_tune_addrc_ci14=0x000000ae
+#ddr3_tune_wr_dq_wl1_ci14=0x92929292,0x92929292,0x92929292,0x92929292
+#ddr3_tune_wr_dq_wl0_ci14=0x93939393,0x93939393,0x92929292,0x92929292
+#ddr3_tune_wr_dq_ci14=0x80808080
+#ddr3_tune_vref_ci14=0x000007df
+#ddr3_tune_rd_dqs_ci14=0x96969191,0x90909191
+#ddr3_tune_rd_dq_wl1_rn_ci14=0x82828282,0x82828282,0x82828282,0x82828282
+#ddr3_tune_rd_dq_wl0_rn_ci14=0x82828282,0x82828282,0x89898989,0x89898989
+#ddr3_tune_rd_dq_wl1_rp_ci14=0x82828282,0x82828282,0x82828282,0x82828282
+#ddr3_tune_rd_dq_wl0_rp_ci14=0x82828282,0x82828282,0x89898989,0x89898989
+#ddr3_tune_rd_en_ci14=0x009d9e9d,0x00a2a3a1
+#ddr3_tune_rd_data_dly_ci14=0x00000505
+
+
+### Dram type: Select ONLY ONE of the following DRAM types, to configure all dram related parameteres per type.
+
+# Dram Type for Arad:
+#dram_type_DDR3_HYNIX_H5TQ2G63BFR_TEC_1066=1
+#dram_type_DDR3_HYNIX_H5TQ2G63BFR_TEC_933=1
+#dram_type_DDR3_HYNIX_H5TQ2G63BFR_TEC_800=1
+#dram_type_DDR3_MICRON_MT41J256M16_4GBIT_1066=1
+#dram_type_DDR3_MICRON_MT41J128M16HA_125_1066=1
+#dram_type_DDR3_MICRON_MT41J128M16HA_125_933=1
+#dram_type_DDR3_MICRON_MT41J128M16HA_125_800=1
+#dram_type_DDR3_MICRON_MT42J64M16LA_15E_667=1
+#dram_type_DDR3_SAMSUNG_K4B4G1646B_4GBIT_1066=1
+#dram_type_DDR3_SAMSUNG_K4B1G1646G_933=1
+#dram_type_DDR3_SAMSUNG_K4B1G1646G_800=1
+
+# Dram Type for Jericho:
+## this soc is configured in per board soc file (bcm88x7x_board.soc)
+#dram_type_DDR4_MICRON_Y4016AABG_JD_F_4GBIT=1
+dram_type_DDR4_MICRON_MT40A256M16HA_083EA_4GBIT=1
+#dram_type_DDR4_HYNIX_H5AN4G6NMFR_VJC_4GBIT=1
+#dram_type_GDDR5_SAMSUNG_K4G20325FD_2GBIT=1
+#dram_type_GDDR5_SAMSUNG_K4G41325FC_4GBIT=1
+#dram_type_GDDR5_MICRON_EDW4032CABG_4GBIT=1
+#dram_type_GDDR5_HYNIX_H5GC4H24MFR_T2C_4GBIT=1
+
+# Dram Type for Ardon:
+#dram_type_DDR4_MICRON_EDY4016AABG_DRFR_4GBIT=1
+
+# DRAM frequency
+ext_ram_freq.BCM88675=1600
+
+### Setting dram_type_DDR3_HYNIX_H5TQ2G63BFR_TEC_1066 Parameters as Default:
+## All other dram types parameter resides in arad.soc. choosing another Dram Type will override the following parameters.
+ext_ram_t_rrd=6000
+ext_ram_columns=1024
+ext_ram_banks=8
+ext_ram_ap_bit_pos=10
+ext_ram_burst_size=32
+ext_ram_t_ref=3900000
+ext_ram_t_wr=15000
+ext_ram_t_wtr=7500
+ext_ram_t_rtp=7500
+ext_ram_freq=1066
+ext_ram_rows=16384
+ext_ram_jedec=29
+ext_ram_t_rc=46090
+ext_ram_t_rcd_rd=13090
+ext_ram_t_rcd_wr=13090
+ext_ram_t_rp=13090
+ext_ram_t_rfc=160000
+ext_ram_t_ras=33000
+ext_ram_c_wr_latency=10
+ext_ram_t_faw=35000
+ext_ram_c_cas_latency=14
+ddr3_mem_grade=0x141414
+
+## address or bank address swap example
+#swaps are found in bcm88xxx_board.soc
+#ext_ram_addr_bank_swap_dramX_bitY=M
+
+## dq swap example
+#swaps are found in bcm88xxx_board.soc
+#bit swap example:
+#ext_ram_dq_swap_dramX_byteY_bitZ=M
+#byte swap example:
+#ext_ram_dq_swap_dramX_byteY=M
+
+## Dram Gear down mode. Valid values: 0 - Enable, 1 - Disable. Default: 0x0.
+ext_ram_gear_down_mode.BCM88675=0
+
+## Alert_n de-assertion period above which error is considered parity error
+#ext_ram_alert_n_period_thrs.BCM88675=20
+
+## Dram Address bus inversion. Valid values: 0 - Enable, 1 - Disable. Default: 0x0.
+## this soc is configured in per board soc file (bcm88x7x_board.soc)
+#ext_ram_abi.BCM88675=0
+
+## Data bus inversion on write/read direction. Valid values: 0 - Disable, 1 - Enable. Default: 0x0.
+## those socs are configured in per board soc file (bcm88x7x_board.soc)
+#ext_ram_write_dbi.BCM88675=0
+#ext_ram_read_dbi.BCM88675=0
+
+## Enable write/read CRC (DDR4 does not support read CRC). Default: 0x0.
+## those socs are configured in per board soc file (bcm88x7x_board.soc)
+#ext_ram_write_crc.BCM88675=1
+#ext_ram_read_crc.BCM88675=0
+
+## Command parity latency. Valid values: 0 - Disable, 4,5 or 6 - Valid values. Default: 0x0.
+## this soc is configured in per board soc file (bcm88x7x_board.soc)
+#ext_ram_cmd_par_latency.BCM88675=6
+
+# DRAM pre-configurations according to config variables which defines
+# Dram Type. BCM88650 supports only DDR3.
+# Dram Type. BCM88675 supports DDR4 and GDDR5.
+ext_ram_type.BCM88650=DDR3
+## this soc is configured in per board soc file (bcm88x7x_board.soc)
+#ext_ram_type.BCM88675=DDR4
+
+# Total Dram Size (MBytes)
+# For 8 drams interfaces, 2 channel each, Each channel 2Gbit Dram. the total DRAM size is 32GBits=4000MBytes.
+ext_ram_total_size.BCM88650=4000
+## this soc is configured in per board soc file (bcm88x7x_board.soc)
+#ext_ram_total_size.BCM88675=8000
+
+# Total buffer size allocated for User buffer. Units: Mbytes. Default: '0x0'.
+# Supported suffix:
+#       dram - the buffer size will be subtracted from the DRAM size available for packet memory.
+#user_buffer_size=0
+#user_buffer_size_dram=50
+
+# DRAM ClamShell (interface swap its HW PIN pairs during init.)
+# Note: Only one of DRAMs can have its PIN swapped
+# Valid values: 0/1
+#dram0_clamshell_enable.BCM88650=1
+#dram1_clamshell_enable.BCM88650=1
+
+# DRAM maximum number of crc error per buffer, buffer deleted by interrupt application.
+#dram_crc_del_buffer_max_reclaims=0
+
+##############################
+# Config variable below are only accessed from dune.soc, and are used to
+# configure BSP / example application / group of formal config variables.
+##############################
+
+## If set, always configures synthesizers, even if the configured rate is equal to
+## their nominal rate. Can be disabled to speedup bringup time (keep in mind that if
+## disabled, changing a synt to a non-nominal freq and than back to nominal will not
+## work
+#synt_over.BCM88650=1
+
+# Local variables for board synthesizers freq. Fabric, combo and nif also configure
+# the *_ref_clock soc properties for these frequencies. core, ddr and phy only
+# configures the synthesizer
+synt_core.BCM88650=100000000
+synt_ddr.BCM88650=125000000
+synt_phy.BCM88650=156250000
+# in Jericho, this freq is used only for the core synth
+synth_dram_freq.BCM88650=25
+
+#Configure the reference clock frequencies for NIF and Fabric SerDes
+# Options:  0 - 125MHz, 1 - 156.25MHz, -1 - Disable
+serdes_nif_clk_freq.BCM88650=1
+serdes_fabric_clk_freq.BCM88650=1
+#serdes_nif_clk_freq.BCM88270=-1
+#serdes_fabric_clk_freq.BCM88270=-1
+serdes_nif_clk_freq.BCM8206=-1
+serdes_fabric_clk_freq.BCM8206=-1
+#serdes_nif_clk_freq_out0.BCM88675=1
+#serdes_nif_clk_freq_out1.BCM88675=1
+#serdes_nif_clk_freq_out2.BCM88675=1
+#serdes_nif_clk_freq_in0.BCM88675=1
+#serdes_nif_clk_freq_in1.BCM88675=1
+#serdes_nif_clk_freq_in2.BCM88675=1
+#serdes_fabric_clk_freq_out0.BCM88675=1
+#serdes_fabric_clk_freq_out1.BCM88675=1
+#serdes_fabric_clk_freq_in0.BCM88675=1
+#serdes_fabric_clk_freq_in1.BCM88675=1
+
+
+# IEEE 1588 / Broadsync -
+# configure clock :
+#  DPLL mode/lock: 0 - eci ts pll clk disabled, 1 - configure eci ts pll clk
+#  DPLL phase/freq. Default initial: lo = 0x40000000, hi = 0x10000000.
+#phy_1588_dpll_frequency_lock.BCM88650=1
+#phy_1588_dpll_phase_initial_lo.BCM88650=0x40000000
+#phy_1588_dpll_phase_initial_hi.BCM88650=0x10000000
+# IEEE 1588 -
+# port external MAC
+#  indication whether external MAC exists or not.
+#  0: 1588 external MAC does not exist
+#  1: 1588 external MAC exists
+#  the external MAC substracts the RX time from the correction field
+#  and adds the TX time to the correction field.
+#ext_1588_mac_enable_14.BCM88650=1
+#  If set, 48 bits stamping is used for 1588 packets. otherwise 32 bit stamping is used
+#  0: 1588 32b stamping (Default)
+#  1: 1588 48b stamping
+#bcm88660_1588_48b_stamping_enable.BCM88660=1
+
+## Trill configurations
+# Trill mode: 0 (disabled) / 1 (coarse-grained) / 2 (fine-grained)
+#trill_mode.BCM88650=1
+
+# Trill multicast prunning mode:
+# 0: no prunning - vsi is not part of the key
+# 1: VSI prunning: Key is dist-tree,esadit-bit,VSI.
+trill_mc_prune_mode.BCM88650=0
+
+# Enable SA authentication
+#sa_auth_enabled=1
+
+# Bridge default logical interfaces allocation IDS
+logical_port_l2_bridge.BCM88650=0
+logical_port_drop.BCM88650=1
+
+#logical_port_mim_in.BCM88650=2
+#logical_port_mim_out.BCM88650=4096
+
+# Enable EVB application
+#evb_enable=1
+
+# Enable Flexible QinQ application
+#vlan_translation_match_ipv4=1
+
+# Enable presel mgmt advance mode
+#field_presel_mgmt_advanced_mode=1
+
+# Enable ITMH programmable mode
+# ITMH processing fully programmable (not fixed) by using the FP APIs. 
+# In this mode ITMH processing uses the TCAM/direct table for TM programs lookup, in same manner as Ethernet frames.
+itmh_programmable_mode_enable.BCM88675=1
+itmh_programmable_mode_enable.BCM88470=1
+itmh_programmable_mode_enable.BCM88270=1
+itmh_programmable_mode_enable.BCM88680=1
+
+
+
+# Prepend tag to be 4 bytes or 8 bytes. Default: 4B.
+# Applicable only from ARAD+
+#prepend_tag_bytes=4B
+
+# The Prepend Tag is located at (12 + 2*offset) bytes from the start of the packet.
+# Range: 0-7. Default: 0
+#prepend_tag_offset=0
+
+# Enable ARP (next hop mac extension) feature
+bcm886xx_next_hop_mac_extension_enable.BCM88650=1
+
+# Set VLAN translate mode.
+# 0: normal
+# 1: advanced mode. Enable vlan edit settings with enhanced user control
+#bcm886xx_vlan_translate_mode=0
+
+# Set MPLS termination database mode
+# Set MPLS databases location for each MPLS namespace (L1,L2,L3)
+#bcm886xx_mpls_termination_database_mode=0
+
+# Enable , Disable MPLS indexed.
+# MPLS termination with known label stack location.
+# Must be enabled in case device supports more than 2 MPLS label terminations (L1,L2,L3)
+#mpls_termination_label_index_enable=1
+
+# Enable FastReRoute labels in device.
+#fast_reroute_labels_enable=0
+
+# Enable MPLS Context specific. Upstream label assignment in device.
+#mpls_context_specific_label_enable=0
+
+# MPLS context.
+# Can be global, per port , per interface or per port,interface.
+#mpls_context=global
+
+# MPLS TP MC reserved mac address (01-00-5E-90-00-00).
+# If set device will support My-MAC termination of reserved MC Ethernet
+#mpls_tp_mymac_reserved_address=0
+
+# MPLS ELI enable disable
+mpls_entropy_label_indicator_enable=0
+
+#########################################
+##cfg for BCM88202 - Ardon
+#########################################
+
+#Core clock and system reference clock (KHz)
+core_clock_speed_khz.BCM88202=450000
+system_ref_core_clock_khz.BCM88202=1200000
+
+## Set TM as device mode
+fap_device_mode.BCM88202=TM
+
+## Set CPU ports header type
+tm_port_header_type_in_0.BCM88202=TM
+tm_port_header_type_out_0.BCM88202=TM
+tm_port_header_type_in_200.BCM88202=TM
+tm_port_header_type_out_200.BCM88202=TM
+tm_port_header_type_in_201.BCM88202=TM
+tm_port_header_type_out_201.BCM88202=TM
+tm_port_header_type_in_202.BCM88202=TM
+tm_port_header_type_out_202.BCM88202=TM
+tm_port_header_type_in_203.BCM88202=TM
+tm_port_header_type_out_203.BCM88202=TM
+
+##### Application configuration
+### Default SDK Application
+ucode_port_1.BCM88202=TM_INTERNAL_PKT.0
+ucode_port_13.BCM88202=TM_INTERNAL_PKT.1
+ucode_port_14.BCM88202=TM_INTERNAL_PKT.2
+ucode_port_15.BCM88202=TM_INTERNAL_PKT.3
+ucode_port_16.BCM88202=TM_INTERNAL_PKT.4
+ucode_port_17.BCM88202=TM_INTERNAL_PKT.5
+
+### PortOpriority (additonal ports can be added)
+#diag_cosq_disable.BCM88202=1
+#ucode_port_1.BCM88202=IGNORE
+#ucode_port_13.BCM88202=IGNORE
+#ucode_port_14.BCM88202=IGNORE
+#ucode_port_15.BCM88202=IGNORE
+#ucode_port_16.BCM88202=IGNORE
+#ucode_port_17.BCM88202=IGNORE
+#ucode_port_1.BCM88202=TM_INTERNAL_PKT.0
+#ucode_port_2.BCM88202=TM_INTERNAL_PKT.1
+#ucode_port_3.BCM88202=TM_INTERNAL_PKT.2
+#ucode_port_4.BCM88202=TM_INTERNAL_PKT.3
+#ucode_port_5.BCM88202=TM_INTERNAL_PKT.4
+#ucode_port_6.BCM88202=TM_INTERNAL_PKT.5
+#ucode_port_7.BCM88202=TM_INTERNAL_PKT.6
+#ucode_port_8.BCM88202=TM_INTERNAL_PKT.7
+#ucode_port_9.BCM88202=TM_INTERNAL_PKT.8
+#ucode_port_10.BCM88202=TM_INTERNAL_PKT.9
+#ucode_port_11.BCM88202=TM_INTERNAL_PKT.10
+#ucode_port_12.BCM88202=TM_INTERNAL_PKT.11
+#ucode_port_13.BCM88202=TM_INTERNAL_PKT.12
+#ucode_port_14.BCM88202=TM_INTERNAL_PKT.13
+#ucode_port_15.BCM88202=TM_INTERNAL_PKT.14
+#ucode_port_16.BCM88202=TM_INTERNAL_PKT.15
+#ucode_port_17.BCM88202=TM_INTERNAL_PKT.16
+#ucode_port_18.BCM88202=TM_INTERNAL_PKT.17
+#ucode_port_19.BCM88202=TM_INTERNAL_PKT.18
+#ucode_port_20.BCM88202=TM_INTERNAL_PKT.19
+#ucode_port_21.BCM88202=TM_INTERNAL_PKT.20
+#ucode_port_22.BCM88202=TM_INTERNAL_PKT.21
+#ucode_port_23.BCM88202=TM_INTERNAL_PKT.22
+#ucode_port_24.BCM88202=TM_INTERNAL_PKT.23
+#ucode_port_25.BCM88202=TM_INTERNAL_PKT.24
+
+#dtm_flow_nof_remote_cores_region_1.BCM88202=1
+#dtm_flow_nof_remote_cores_region_2.BCM88202=1
+#dtm_flow_nof_remote_cores_region_3.BCM88202=1
+#dtm_flow_nof_remote_cores_region_4.BCM88202=1
+#dtm_flow_nof_remote_cores_region_5.BCM88202=1
+#dtm_flow_nof_remote_cores_region_6.BCM88202=1
+#dtm_flow_nof_remote_cores_region_7.BCM88202=1
+#dtm_flow_nof_remote_cores_region_8.BCM88202=1
+#dtm_flow_nof_remote_cores_region_9.BCM88202=1
+#dtm_flow_nof_remote_cores_region_10.BCM88202=1
+
+### PriorityOPort
+#diag_cosq_disable.BCM88202=1
+#stack_enable.BCM88202=0
+#ucode_port_17.BCM88202=IGNORE
+#ucode_port_16.BCM88202=IGNORE
+#ucode_port_15.BCM88202=IGNORE
+#ucode_port_14.BCM88202=IGNORE
+#ucode_port_13.BCM88202=IGNORE
+#ucode_port_1.BCM88202=TM_INTERNAL_PKT.0
+
+## Credit worth resolution (Fix the Interface rate)
+credit_worth_resolution.BCM88202=medium
+
+### Interrupts
+polled_irq_mode.BCM88202=1
+
+## To use MC-ID in the range of < 255
+egress_multicast_direct_bitmap_max.BCM88202=255
+
+### Flow Control
+## Enable Flow Control to CL SCH. Relevant only to Priority Over Port application
+## Valid values: 1 - Enable, 0 - Disable. Default: 0x0.
+custom_feature_cl_scheduler_fc.BCM88202=1
+
+## Valid values: 1 - Enable, 0 - Disable. Default: 0x0.
+#custom_feature_high_vsi_fp.BCM88660=0
+
+## Use lower CL. Ardon FC is mapped to CL 0-255.
+dtm_flow_mapping_mode_region_65.BCM88202=1
+dtm_flow_mapping_mode_region_66.BCM88202=1
+
+### Statistic-Report Properties
+stat_if_enable.BCM88202=1
+stat_if_rate.BCM88202=10000
+stat_if_pkt_size.BCM88202=126B
+## Set the Statistic-Report mode
+stat_if_report_mode.BCM88202=QSIZE
+## Enable statistics reports on EnQueue. Valid valued: 0/1. Default: '1'.
+stat_if_report_enqueue_enable.BCM88202=1
+## Enable statistics reports on DeQueue. Valid valued: 0/1. Default: '1'.
+stat_if_report_dequeue_enable.BCM88202=1
+
+## Disable removed features
+phy_1588_dpll_frequency_lock.BCM88202=0
+low_power_nif_mac.BCM88202=0
+low_power_fabric_mac.BCM88202=0
+custom_feature_nif_recovery_enable.BCM88202=0
+phy_null.BCM88202=0
+
+## Disable counter thread
+bcm_stat_interval.BCM88202=0
+#bcm_stat_sync_timeout.BCM88202=0xfffffff
+
+### EMUL changes
+#diag_emulator_partial_init.BCM88202=1
+#schan_timeout_usec.BCM88202=0x7fffffff
+#tdma_timeout_usec.BCM88202=0x7fffffff
+#tslam_timeout_usec.BCM88202=0x7fffffff
+#phy_null.BCM88202=0
+
+### Disable DMA
+#tdma_timeout_usec.BCM88202=0
+#tslam_timeout_usec.BCM88202=0
+#table_dma_enable.BCM88202=0
+#tslam_dma_enable.BCM88202=0
+
+### Dram setup
+# Number of external DRAMs.
+# Allowed values for 88202: 0 / 1 (Dram D) / 2 (Dram's C, D) / 3 (Dram's B, C, D) / 4 (Dram's A, B, C, D) /
+ext_ram_present.BCM88202=0
+
+### Total size of ram
+ext_ram_total_size.BCM88202=2000
+
+### OCB
+bcm886xx_ocb_databuffer_size.BCM88202=1024
+
+# DRAM frequency (DQ/2)
+ext_ram_freq.BCM88202=1200
+
+# Dram Type. Ardon supports only DDR4.
+ext_ram_type.BCM88202=DDR4
+
+### Dram Features
+
+## Dram Gear down mode. Valid values: 0 - Enable, 1 - Disable. Default: 0x0.
+#ext_ram_gear_down_mode.BCM88202=1
+
+## Alert_n de-assertion period above which error is considered parity error
+#ext_ram_alert_n_period_thrs.BCM88202=0
+
+## Dram Address bus inversion. Valid values: 0 - Enable, 1 - Disable. Default: 0x0.
+ext_ram_abi.BCM88202=0
+
+## Data bus inversion on write/read direction. Valid values: 0 - Disable, 1 - Enable. Default: 0x0.
+ext_ram_write_dbi.BCM88202=0
+ext_ram_read_dbi.BCM88202=0
+
+## Enable write/read CRC (DDR4 does not support read CRC). Default: 0x0.
+#ext_ram_write_crc=.BCM882021
+#ext_ram_read_crc=.BCM882021
+
+## Command parity latency. Valid values: 0 - Enable, 1 - Disable. Default: 0x0.
+ext_ram_cmd_par_latency.BCM88202=6
+
+## DRAM ClamShell (interface swap its HW PIN pairs during init.)
+# Note: Only one of DRAMs can have its PIN swapped). Valid values: 0/1.
+dram1_clamshell_enable_0.BCM88202=1
+dram1_clamshell_enable_1.BCM88202=1
+dram1_clamshell_enable_2.BCM88202=1
+dram1_clamshell_enable_3.BCM88202=1
+
+## Dram DQ Swap.
+## Format: ext_ram_dq_swap_dramX_byteY_bitZ=M. Means, In dram X, Byte Y swap DQ Z and M. Default: No swapping.
+#ext_ram_dq_swap_dram1_byte2_bit3.BCM88202=4
+#ext_ram_dq_swap_dram4_byte3_bit2.BCM88202=1
+
+### Dram Tuning (Shmoo)
+ddr3_auto_tune.BCM88202=2
+
+### Enable BIST
+# Run Dram BIST on initialization, if BIST fail the initialization will fail. Default: 1.
+bist_enable_dram.BCM88202=1
+
+### Fabric
+## Enable fabric links
+serdes_qrtt_active_0.BCM88202=1
+serdes_qrtt_active_1.BCM88202=1
+serdes_qrtt_active_2.BCM88202=1
+serdes_qrtt_active_3.BCM88202=1
+
+## Firmware Load Method
+load_firmware.BCM88202=2
+
+#SFI speed rate
+port_init_speed_sfi.BCM88202=11500
+
+#LC PLL in. Default: 156.25MHz.
+#xgxs_lcpll_xtal_refclk=125
+
+#########################################
+##cfg for BCM88640_A0 - Petra
+#########################################
+
+force_clk_m_n_divisors_zero_nif0.BCM88640_A0=0
+force_clk_m_n_divisors_zero_fabric0.BCM88640_A0=1
+force_clk_m_n_divisors_zero_comb0.BCM88640_A0=0
+
+combo_ref_clock.BCM88640=312500
+
+nif_ref_clock.BCM88640_A0=312500
+
+# Use variable cell size
+system_cell_format.BCM88640_A0=VCS128
+
+# Core clock speed (MHz)
+core_clock_speed.BCM88640_A0=300
+
+# Map bcm local port to CPU/NIF interfaces
+ucode_port_0.BCM88640_A0=CPU.0
+ucode_port_73.BCM88640_A0=CPU.1
+ucode_port_74.BCM88640_A0=CPU.2
+ucode_port_75.BCM88640_A0=CPU.3
+ucode_port_76.BCM88640_A0=CPU.4
+ucode_port_77.BCM88640_A0=CPU.5
+ucode_port_78.BCM88640_A0=CPU.6
+
+# Interlaken ports basic configuration (temporary).
+# This configuration replaces the above XAUI/RXAUI ports config
+# The following PB design constraint is not enforced in SW, so must be taken
+# care of here, when mapping ports to interfaces:
+#   If using ilkn0, port 1 (if used) must be mapped to ilkn0
+#   If using ilkn1, port 2 (if used) must be mapped to ilkn1
+#   Note that in our default mapping, port 2 is mapped to RXAUI 6, thus won't
+#   work. If one wants to use front panel port 2 with ilkn1, he should be map
+#   RAXUI6 to a port != 2.
+#ilkn_num_lanes_0.BCM88640_A0=12
+#ucode_port_1.BCM88640_A0=ILKN0.0
+#ucode_port_2.BCM88640_A0=ILKN0.1
+#ucode_port_3.BCM88640_A0=ILKN0.2
+#ilkn_num_lanes_1.BCM88640_A0=12
+#ucode_port_4.BCM88640_A0=RXAUI6
+#ucode_port_5.BCM88640_A0=ILKN1.0
+#ucode_port_6.BCM88640_A0=ILKN1.1
+#ucode_port_7.BCM88640_A0=ILKN1.2
+
+# Default header type is derived from fap_device_mode: If fap_device_mode is
+# PP, default header type is ETH. Otherwise, defualt header type is TM.
+# Header type per port can be overriden.
+# All options: ETH/RAW/TM/PROG/CPU/STACKING/TDM/TDM_RAW/INJECTED
+
+# Set CPU to work with TM header (ITMH)
+#tm_port_header_type_0.BCM88640_A0=TM
+tm_port_header_type_in_0.BCM88640_A0=TM
+tm_port_header_type_out_0.BCM88640_A0=CPU
+tm_port_header_type_73.BCM88640_A0=TM
+tm_port_header_type_74.BCM88640_A0=TM
+tm_port_header_type_75.BCM88640_A0=TM
+tm_port_header_type_76.BCM88640_A0=TM
+tm_port_header_type_77.BCM88640_A0=TM
+tm_port_header_type_78.BCM88640_A0=TM
+# recycling port
+tm_port_header_type_40.BCM88640_A0=RAW
+ucode_port_40.BCM88640_A0=RCY.0
+
+# Enable ERP and OLP ports
+num_erp_tm_ports.BCM88640_A0=1
+num_olp_tm_ports.BCM88640_A0=1
+num_recycle_tm_ports.BCM88640_A0=1
+
+# Dram configuration
+# 600 Mhz
+ext_ram_pll_r.BCM88640_A0=4
+ext_ram_pll_f.BCM88640_A0=47
+ext_ram_pll_q.BCM88640_A0=1
+ext_ram_freq.BCM88640_A0=600
+
+# Dbuff size
+# Allowed values: 256/512/1024/2048.
+ext_ram_dbuff_size.BCM88640_A0=1024
+
+# Number of external DRAMs.
+# Allowed values for 88x4x: 0/2/3/4/6.
+# Allowed values for 88650: 0/2/3/4/6/8.
+# ext_ram_total_size below assumed this value is 6 for 88x4x and 8 for
+ext_ram_present.BCM88640_A0=6
+
+# Dram type: Select ONLY ONE of the following DRAM types, to configure all dram
+# related parameteres per type.
+# Dram Type for Pb:
+#dram_type_DDR3_MICRON_MT41J64M16_15E.BCM88640_A0=1
+#dram_type_DDR2_MICRON_K4T51163QE_ZC_LF7.BCM88640_A0=1
+#dram_type_DDR3_SAMSUNG_K4B1G1646E_HCK0_1333.BCM88640_A0=1
+#dram_type_DDR3_SAMSUNG_K4B1G1646E_HCK0_1600.BCM88640_A0=1
+#dram_type_GDDR3_SAMSUNG_K4J52324QE.BCM88640_A0=1
+dram_type_DDR3_MICRON_MT41J128M16HA_15E_2G.BCM88640_A0=1
+
+# QDR configuration
+# Parity. Allowed values: PARITY/ECC.
+ext_qdr_protection_type.BCM88640_A0=PARITY
+ext_qdr_size_mbit.BCM88640_A0=72
+#QDR type: QDR/QDR2P/QDR3/NONE.
+ext_qdr_type.BCM88640_A0=QDR
+
+# QDR can use the core clock, or using it's own pll. Current example is for 250MHz pll (if used).
+# QDR using own pll configuration
+#ext_qdr_use_core_clock_freq.BCM88640_A0=0
+#ext_qdr_pll_m.BCM88640_A0=4
+#ext_qdr_pll_n.BCM88640_A0=4
+#ext_qdr_pll_p.BCM88640_A0=0
+
+# QDR using core clock
+ext_qdr_use_core_clock_freq.BCM88640_A0=1
+
+#Configure MDIO. If parameter is not defined, MDIO is disabled.
+mdio_clock_freq_khz.BCM88640_A0=1000
+
+# Streaming interface configuration
+streaming_if_enable_timeoutcnt.BCM88640_A0=1
+streaming_if_timeout_prd.BCM88640_A0=70
+streaming_if_quiet_mode.BCM88640_A0=0
+streaming_if_discard_bad_parity.BCM88640_A0=0
+
+# maximum packet size for WRED tests. 0 - means ignore max packet size.
+discard_mtu_size.BCM88640_A0=0
+
+# multicast egress vlan membership range. By default: 0-4095.
+egress_multicast_direct_bitmap_max.BCM88640_A0=4095
+
+# configure flow mapping base to 0
+flow_mapping_queue_base.BCM88640_A0=0
+
+dtm_flow_mapping_mode_region_25.BCM88640_A0=0
+dtm_flow_mapping_mode_region_26.BCM88640_A0=0
+dtm_flow_mapping_mode_region_27.BCM88640_A0=0
+dtm_flow_mapping_mode_region_28.BCM88640_A0=0
+dtm_flow_mapping_mode_region_29.BCM88640_A0=0
+dtm_flow_mapping_mode_region_30.BCM88640_A0=0
+dtm_flow_mapping_mode_region_31.BCM88640_A0=0
+dtm_flow_mapping_mode_region_32.BCM88640_A0=0
+dtm_flow_mapping_mode_region_33.BCM88640_A0=1
+dtm_flow_mapping_mode_region_34.BCM88640_A0=1
+dtm_flow_mapping_mode_region_35.BCM88640_A0=1
+dtm_flow_mapping_mode_region_36.BCM88640_A0=1
+dtm_flow_mapping_mode_region_37.BCM88640_A0=1
+dtm_flow_mapping_mode_region_38.BCM88640_A0=1
+dtm_flow_mapping_mode_region_39.BCM88640_A0=1
+dtm_flow_mapping_mode_region_40.BCM88640_A0=1
+dtm_flow_mapping_mode_region_41.BCM88640_A0=1
+dtm_flow_mapping_mode_region_42.BCM88640_A0=2
+dtm_flow_mapping_mode_region_43.BCM88640_A0=2
+dtm_flow_mapping_mode_region_44.BCM88640_A0=2
+dtm_flow_mapping_mode_region_45.BCM88640_A0=2
+dtm_flow_mapping_mode_region_46.BCM88640_A0=2
+dtm_flow_mapping_mode_region_47.BCM88640_A0=2
+dtm_flow_mapping_mode_region_48.BCM88640_A0=2
+dtm_flow_mapping_mode_region_49.BCM88640_A0=2
+dtm_flow_mapping_mode_region_50.BCM88640_A0=2
+dtm_flow_mapping_mode_region_51.BCM88640_A0=2
+dtm_flow_mapping_mode_region_52.BCM88640_A0=2
+dtm_flow_mapping_mode_region_53.BCM88640_A0=2
+dtm_flow_mapping_mode_region_54.BCM88640_A0=2
+dtm_flow_mapping_mode_region_55.BCM88640_A0=2
+
+# Power up state (DOWN/UP/UP_AND_RELOCK). Can be configured per lane.
+pb_serdes_lane_power_state.BCM88640_A0=UP_AND_RELOCK
+
+# SeDes media type: Pre-configuration for tx params, according to
+# media type.
+# Allowed values: SHORT_BACKPLANE/LONG_BACKPLANE/CHIP2CHIP
+pb_serdes_lane_tx_phys_media_type.BCM88640_A0=SHORT_BACKPLANE
+pb_serdes_lane_tx_phys_media_type_28.BCM88640_A0=CHIP2CHIP
+pb_serdes_lane_tx_phys_media_type_29.BCM88640_A0=CHIP2CHIP
+pb_serdes_lane_tx_phys_media_type_30.BCM88640_A0=CHIP2CHIP
+pb_serdes_lane_tx_phys_media_type_31.BCM88640_A0=CHIP2CHIP
+
+system_is_fe1600_in_system.BCM88640_A0=0
+
+# Counter engine configuration
+counter_engine_source_1.BCM88640_A0=0
+counter_engine_statistics_1.BCM88640_A0=4
+counter_engine_source_2.BCM88640_A0=1
+counter_engine_statistics_2.BCM88640_A0=4
+
+# Statistic Reporting
+stat_if_enable=0
+
+# Clock Phases: 0/90/180/270
+stat_if_phase=0
+
+# Rate in nm
+stat_if_sync_rate=0
+
+# TRUE/FALSE
+stat_if_parity_enable=FALSE
+
+# BILLING/FAP20V
+stat_if_report_mode=BILLING
+
+# Billing Mode
+# EGR_Q_NB/CUD/VSI_VLAN/BOTH_LIFS
+stat_if_report_billing_mode=VSI_VLAN
+
+# Fap20V Mode
+# QUEUE/PACKET
+stat_if_report_fap20v_mode=QUEUE
+
+# QUEUE_NUM/MC_ID (only valid in Fap20V PACKET mode)
+stat_if_report_fap20v_fabric_mc=QUEUE_NUM
+stat_if_report_fap20v_ing_mc=QUEUE_NUM
+
+# TRUE/FALSE (only valid in Fap20V PACKET mode)
+stat_if_report_fap20v_cnm_report=FALSE
+
+# TRUE/FALSE
+stat_if_report_fap20v_count_snoop=FALSE
+stat_if_report_original_pkt_size=FALSE
+stat_if_report_fap20v_single_copy_reported=FALSE
+
+schan_timeout_usec.BCM88640_A0=300000
+
+
+polled_irq_mode.BCM88640_A0=0
+polled_irq_delay.BCM88640_A0=1000
+
+# Set the FTMH Load-Balancing Key extension mode
+# Options for 88650: ENABLED
+# Options for 88640 compatible:
+# DISABLED / 8B_LB_KEY_8B_STACKING_ROUTE_HISTORY / 16B_STACKING_ROUTE_HISTORY
+# Default: DISABLED
+system_ftmh_load_balancing_ext_mode.BCM88640=DISABLED
+
+#########################################
+##cfg for BCM88750 (FE1600)
+#########################################
+
+fabric_device_mode.BCM88750=SINGLE_STAGE_FE2
+
+is_dual_mode.BCM88750=0
+system_is_vcs_128_in_system.BCM88750=0
+
+system_is_dual_mode_in_system.BCM88750=0
+system_is_single_mode_in_system.BCM88750=1
+
+system_is_fe600_in_system.BCM88750=0
+
+system_ref_core_clock_khz.BCM88750=1200000
+
+fabric_merge_cells.BCM88750=0
+fabric_multicast_mode.BCM88750=DIRECT
+fabric_load_balancing_mode.BCM88750=NORMAL_LOAD_BALANCE
+fabric_tdm_fragment.BCM88750=0x180
+##Allows single pipe device to send TDM traffic over the fabric primary pipe - available for Fe1600_B0 only
+#change  vcs128_unicast_priority to be lower than 2 - when enabling
+fabric_tdm_over_primary_pipe.BCM88750=0
+fabric_optimize_partial_links.BCM88750=0
+vcs128_unicast_priority.BCM88750=2
+
+polled_irq_mode.BCM88750=0
+polled_irq_delay.BCM88750=1000
+
+#Selects if to run MBIST (Memory Built In Self Test) of internal memory (tables) during startup.
+#Supported values: 0=don't run, 1=run, 2=run with extra logs
+#bist_enable.BCM88650=1
+bist_enable.BCM88750=1
+bist_enable.BCM88470=0
+#High voltage driver strap. If 0, connected to 1.4V supply; if 1, connected to 1V mode.
+#for specific quad use srd_tx_drv_hv_disable_quad_X where X is (FSRD num * 4 + internal quad)
+srd_tx_drv_hv_disable.BCM88750=0
+load_firmware.BCM88750=2
+
+#0-LFEC 1-8b\10b 2-FEC 3-BEC
+backplane_serdes_encoding.BCM88750=2
+
+#enable\disable CL72
+port_init_cl72.BCM88750=1
+#Avaliable speeds for BCM88750: 5750, 6250, 10312, 11500, 12500
+port_init_speed.BCM88750=10312
+#LC PLL in\out 0=125MHz 1=156.25MHz
+serdes_fabric_clk_freq_in.BCM88750=1
+serdes_fabric_clk_freq_out.BCM88750=1
+serdes_mixed_rate_enable.BCM88750_B0=0
+
+# VSC128 or VSC256
+fabric_cell_format.BCM88750=VSC256
+
+# Core clock speed (MHz)
+core_clock_speed_khz.BCM88750=533333
+
+## CMIC interrupts:
+# Enable: Use interrupts completion instead of polling completion for the following operations.
+#         Options: 1 - Enable, 0 - Disable. Default: 0.
+# Timeout: delay in Microsecond between the polling,
+# SCHAN:
+schan_intr_enable.BCM88750=0
+schan_timeout_usec.BCM88750=300000
+# TDMA
+tdma_intr_enable.BCM88750=0
+tdma_timeout_usec.BCM88750=5000000
+# TSLAM
+tslam_intr_enable.BCM88750=0
+tslam_timeout_usec.BCM88750=5000000
+# MIIM
+miim_intr_enable.BCM88750=0
+miim_timeout_usec.BCM88750=300000
+
+#########################################
+##cfg for BCM88950 (FE3200)
+#########################################
+#Device  operation
+fabric_device_mode.BCM88950=SINGLE_STAGE_FE2
+fabric_load_balancing_mode.BCM88950=NORMAL_LOAD_BALANCE
+
+#Cell format
+system_is_vcs_128_in_system.BCM88950=0
+
+#Fabric pipe configuration
+
+fabric_num_pipes.BCM88950=1
+fabric_pipe_map.BCM88950=0
+system_contains_multiple_pipe_device.BCM88950=0
+
+#multicast table mode
+fabric_multicast_mode.BCM88950=DIRECT
+fe_mc_id_range.BCM88950=128K_HALF
+
+#Core clock and system reference clock (KHz)
+system_ref_core_clock_khz.BCM88950=1200000
+core_clock_speed_khz.BCM88950=720000
+
+#LC PLL in\out 0=125MHz 1=156.25MHz
+serdes_fabric_clk_freq_in.BCM88950=0
+serdes_fabric_clk_freq_out.BCM88950=1
+
+#TODO
+polled_irq_mode.BCM88950=1
+polled_irq_delay.BCM88950=1000
+
+#Memory Bist
+bist_enable.BCM88950=0
+
+#High voltage driver strap. If 0, connected to 1.25V supply; 
+#if 1, connected to 1V mode (For unused Falcon Quads that are connected to 1.0V).
+#for specific quad use srd_tx_drv_hv_disable_quad_X where X is (FSRD num * 4 + internal quad)
+srd_tx_drv_hv_disable.BCM88950=0
+load_firmware.BCM88950=0x102
+
+
+##Per port properties
+#Possible values - KR_FEC, 64_66, RS_FEC, LL_RS_FEC
+backplane_serdes_encoding.BCM88950=RS_FEC
+
+#enable\disable CL72
+port_init_cl72.BCM88950=1
+
+#link speed
+port_init_speed.BCM88950=25000
+
+#Link connected to a reapter
+#Values: 0/1. Default: 0
+#repeater_link_enable_<port>.BCM88950=0
+
+##Fabric cell FIFO DMA
+fabric_cell_fifo_dma_enable.BCM88950=1
+
+## CMIC interrupts:
+# Enable: Use interrupts completion instead of polling completion for the following operations.
+#         Options: 1 - Enable, 0 - Disable. Default: 0.
+# Timeout: delay in Microsecond between the polling,
+# SCHAN:
+schan_intr_enable.BCM88950=0
+schan_timeout_usec.BCM88950=300000
+# TDMA
+tdma_intr_enable.BCM88950=0
+tdma_timeout_usec.BCM88950=5000000
+# TSLAM
+tslam_intr_enable.BCM88950=0
+tslam_timeout_usec.BCM88950=5000000
+# MIIM
+miim_intr_enable.BCM88950=0
+miim_timeout_usec.BCM88950=300000
+
+##############################
+# Configuration for devices run in emulation
+##############################
+#diag_emulator_partial_init.BCM88470=2
+#phy_simul.BCM88470=1
+#system_ref_core_clock_khz.BCM88470=250000
+#system_ref_core_clock_khz.BCM88470=600000
+#phy_simul.BCM88270=1
+
+polled_irq_mode.BCM88470=1
+polled_irq_mode.BCM88270=1
+
+schan_intr_enable.BCM88470=0
+schan_intr_enable.BCM88270=0
+
+# For emulation use:
+#schan_timeout_usec.BCM88470=600000000
+schan_timeout_usec.BCM88470=300000
+schan_timeout_usec.BCM88270=200000
+
+# TDMA
+tdma_intr_enable.BCM88470=0
+#tdma_intr_enable.BCM88270=0
+
+# For emulation use:
+#tdma_timeout_usec.BCM88470=600000000
+tdma_timeout_usec.BCM88470=60000000
+tdma_timeout_usec.BCM88270=500000
+
+# TSLAM
+tslam_intr_enable.BCM88470=0
+tslam_intr_enable.BCM88270=0
+
+# For emulation use:
+#tslam_timeout_usec.BCM88470=600000000
+tslam_timeout_usec.BCM88470=60000000
+tslam_timeout_usec.BCM88270=500000
+
+#otm_base_q_pair.BCM88470=2
+
+##############################
+# Config variable below are only accessed from dune.soc, and are used to
+# configure BSP / example application / group of formal config variables.
+##############################
+
+# Support (and configure on init) packet processing features.
+# If not defined - only traffic management capabilities are enabled.
+packet_processing=1
+
+## PCP (Petra Co-Processor) features
+#pcp_elk.BCM88640_A0=1
+#pcp_oam.BCM88640_A0=1
+#pcp_dma.BCM88640_A0=1
+
+## Set/Override TDM related config variables
+#tdm.BCM88640_A0=1
+
+# If set, always configures synthesizers, even if the configured rate is
+# equal to
+# their nominal rate. Can be disabled to speedup bringup time
+# (keep in mind that if disabled, changing a synt to a non-nominal freq and
+# than back to nominal will not work
+#synt_over.BCM88640_A0=1
+
+# Local variables for board synthesizers freq. Fabric, combo and nif also configure
+# the *_ref_clock soc properties for these frequencies. core, ddr and phy only
+# configures the synthesizer
+synt_core.BCM88640_A0=100000000
+synt_ddr.BCM88640_A0=125000000
+synt_phy.BCM88640_A0=156250000
+
+
+############################
+### Warmboot & SW State ####
+############################
+#
+#HW journal working mode. Allowed values: 0-2.
+#   0 : Disabled
+#   1 : Commit After Each Api
+#   2 : Commit Upon User Request
+ha_hw_journal_mode=0
+
+ha_hw_journal_size=15728640
+ha_sw_journal_size=15728640
+ha_crash_recovery=1
+
+
+# stable_size - a strict bound on the application's external storage size
+stable_size.BCM88950=200000
+stable_size.BCM88750=200000
+stable_size.BCM88650=281000000
+stable_size.BCM88675=500000000
+stable_size.BCM88680=500000000
+stable_size.BCM88690=500000000
+stable_size.BCM88470=350000000
+stable_size.BCM88270=650000000
+stable_size=420000000
+
+# determine the memory size pre-allocated for the SDK's SW State
+sw_state_max_size.BCM88650=210000000
+sw_state_max_size.BCM88675=350000000
+sw_state_max_size.BCM88680=350000000
+sw_state_max_size.BCM88470=300000000
+sw_state_max_size.BCM88270=210000000
+sw_state_max_size=350000000
+
+# stable location
+## part of scache initialization for warmboot persistent storage.
+## values: 1-2:Not Valid for dnx 3: Store in a file  4: Use Shared Mem.
+# 4 is the preffered option, using 3 for Arad and FE in order to regress both modes.
+stable_location.BCM88950=3
+stable_location.BCM88750=3
+stable_location.BCM88650=3
+stable_location.BCM88660=3
+stable_location.BCM88675=3
+stable_location=3
+
+# stable_filename - the warmboot file name (if stored on a file) 
+stable_filename=/tmp/warmboot_data
+
+# emulation file name
+stable_filename.BCM88470=/tmp/warmboot_data
+
+
+# create the file in memory for a faster warmboot debug
+#stable_filename=/dev/shm/warmboot_data
+
+# stable_flags - not in use
+stable_flags=0
+
+############################
+############################
+
+
+# Bridge default logical interfaces allocation IDS
+logical_port_l2_bridge.BCM88640=1
+logical_port_drop.BCM88640=-1
+
+#logical_port_mim_in.BCM88640=2
+#logical_port_mim_out.BCM88640=3
+
+## IPV6 tunnel
+bcm886xx_ipv6_tunnel_enable=1
+
+## Inlif Profile Management Mode - QoS L3 L2 marking mode
+#
+# BCM88660 ONLY
+#
+# QoS L3 L2 marking allows changing the DSCP and/or EXP values
+# of IP and/or MPLS packets according to the incoming port
+# (or inlif), and the Traffic Class/Drop Precedence.
+#
+# The inlif profile is used to control the DSCP/EXP marking.
+# This SOC property controls which mode is used for the inlif profile:
+# 1: Basic mode (1 bit of the inlif profile is reserved and is used for the DSCP/EXP marking).
+# 0: Advanced mode (the user controls which inlif profile values perform DSCP/EXP marking directly).
+#bcm886xx_qos_l3_l2_marking=1
+
+## Unicast RPF mode per RIF
+#
+# This SOC property allows the user to set the unicast RPF mode - loose, strict or disabled - per RIF.
+# If disabled, the unicast RPF mode of a RIF is set globally.
+# Options: 0 / 1
+
+##Jericho only, number of inrif mac termination combinations. Legal values 0 - 16, default value 16 */
+#Note: Two sets of identical mac termination combinations with different RPF modes (loose and strict) 
+#will consume two termination combinations resources.
+#Two sets of identical mac termination combinations with and without loose RPF will consume only one resource.
+number_of_inrif_mac_termination_combinations=8
+
+##Jericho only, ipmc_l3mcastl2_mode SOC allows a per RIF program selection in the case of ipv4 MC with IPMC disable 
+#instead of the global bcmSwitchL3McastL2 switch control selection.
+#Legal values:
+#0: bcmSwitchL3McastL2 switch control.
+#1: PER In-RIF selection.
+#Note that enabling this SOC will reduce the number of In-RIF mac termination combinations bits by one to a maximum of 3 bits 
+#so it can't be enabled with number_of_inrif_mac_termination_combinations larger than 8.
+ipmc_l3mcastl2_mode = 1
+
+# The bcm_ipmc_add adds bridge or route entries according to the BCM_IPMC_L2 flag.
+# Setting custom_feature_ipmc_set_entry_type_by_rif=1 will use the related IN-RIF IPMC state (enable/disable) 
+# to select the bcm_ipmc_add entry type (bridge/route).
+#custom_feature_ipmc_set_entry_type_by_rif=0
+
+# bcm886xx_l3_ingress_urpf_enable=1
+
+## BOS handling mode
+# BCM8866X ONLY
+#
+# There are two ways to handle BOS, controlled by bcm886xx_mpls_termination_mode:
+# 0 - Use BOS as key in lookup.
+# 1 - Don't use it (except for reserved labels).
+#
+#bcm886xx_mpls_termination_key_mode=0
+
+# Color resolution mode allows the user to have more detailed metering color information.
+# BCM88660 ONLY
+#
+# Options: 0-2
+# 0: A red result from both Ethernet policer and meter implies DP=3.
+# 1: A red result from meter implies that DP=2, while a red result from rate (Ethernet policer) implies DP=3.
+#policer_color_resolution_mode=1
+
+## Inlif Profile Management Mode - Disable Same Interface Filter
+# BCM8866X ONLY
+#
+# Controls which mode is used for the inlif profile management.
+# 1: Basic mode (1 bit of the inlif profile is reserved and is used for the same-interface filter).
+# 0: Advanced mode (the user controls which inlif profile values have the same-interface filter disabled for them).
+#bcm886xx_logical_interface_bridge_filter_enable=1
+
+## Default Block Forwarding Strength
+#
+# Configure the default forwarding strength of blocks.
+#
+# SOC Properties:
+#block_trap_strength_vtt - VTT block forwarding strength
+#block_trap_strength_flp - FLP block forwarding strength
+#block_trap_strength_hash - SLB block forwarding strength (BCM8866X ONLY)
+#block_trap_strength_pmf_0 - PMF 1st lookup forwarding strength
+#block_trap_strength_pmf_1 - PMF 2nd lookup forwarding strength
+#
+# Options: 0-7
+
+## Stateful Load Balancing
+# BCM8866X ONLY
+#
+# Stateful Load Balancing (SLB) allows the load balancing of ECMP and LAG
+# groups to become stateful.
+# In standard load balancing, removing a member from the ECMP/LAG
+# group may affect the selected member, since the formula
+# depends on group size.
+# In stateful load balancing the member is selected once and saved.
+# Later, the member is always retrieved, and does not depend on
+# the size of the LAG/ECMP group.
+#
+# resilient_hash_enable - Enable/disable SLB. Values:
+# 1 - Enable SLB.
+# 0 - Disable SLB.
+#resilient_hash_enable=1
+
+# When this flag is set (and speculative parsing is used) it is possible for a packet of L4oIPv4/6oMPLS(1-3 labels)oETH
+# with MPLS forwarding to use the L4 header, otherwise the IPv4/6 is the last known header.
+#Note: setting this flag can cause unexpected behavior when BOS is used in the scenario above.
+#custom_feature_speculative_L4_support=0
+
+#Make Arad SOC properties work for Arad+, by mapping the BCM88660 suffix to BCM88650
+soc_family.BCM88660=BCM88650
+#Make Arad SOC properties work for Jericho, by mapping the BCM88675 suffix to BCM88650
+soc_family.BCM88675=BCM88650
+#Make Arad SOC properties work for QMX, by mapping the BCM88375 suffix to BCM88650
+soc_family.BCM88375=BCM88650
+#Make Arad SOC properties work for Ardon, by mapping the BCM88202 suffix to BCM88650
+soc_family.BCM88202=BCM88650
+#Make FE3200 SOC properties work for FE3200 SKU 8952, by mapping the BCM88952 suffix to BCM88950
+soc_family.BCM88952=BCM88950
+#Make FE1600 SOC properties work for FE1600 SKU 8753, by mapping the BCM88753 suffix to BCM88750
+soc_family.BCM88753=BCM88750
+#Make FE1600 SOC properties work for FE1600 SKU 8752, by mapping the BCM88752 suffix to BCM88750
+soc_family.BCM88752=BCM88750
+#Make Arad SOC properties work for QAX, by mapping the BCM88470 suffix to BCM88650
+soc_family.BCM88470=BCM88650
+
+#Make Arad SOC properties work for QUX, by mapping the BCM88270 suffix to BCM88650
+soc_family.BCM88270=BCM88650
+#Make Arad SOC properties work for FLAIR, by mapping the BCM8206 suffix to BCM88650
+soc_family.BCM8206=BCM88650
+#Make Arad SOC properties work for JERICHO_PLUS, by mapping the BCM88470 suffix to BCM88650
+soc_family.BCM88680=BCM88650
+
+# Use different mymac addresses for ipv4 and ipv6 when using vrrp for mymac termination.
+#l3_vrrp_ipv6_distinct=1
+
+# Enable multiple mymac termination mode.
+# In order to enable it, also set l3_vrrp_ipv6_distinct=0 and l3_vrrp_max_vid=0 since vrrp and
+# multiple mymac mode can't co exist.
+#l3_multiple_mymac_termination_enable=1
+
+# Distinguish between ipv4 and all other l3 protocols when multiple mymac terminating
+#l3_multiple_mymac_termination_mode=1
+
+# Usually the final DP given by the meter (or the In-DP) is unchanged, and can be from 0-3.
+# When this SOC property is set to 1, when the final INGRESS DP is 2,
+# it is mapped to 1 instead, and thus only the values 0-1 and 3 can be output.
+# This has no effect when policer_color_resolution_mode=1.
+#custom_feature_always_map_result_dp_2_to_1=1
+
+# Dynamic port feature
+#custom_feature_dynamic_port=1
+
+# low power nif mac
+#low_power_nif_mac=0
+
+# allow modifications during traffic
+#custom_feature_allow_modifications_during_traffic=1
+
+# mem_cache_enable property
+# Cache memory mode - enable memory caching during init.
+# Note: The user MUST add the property name with suffix '_specific' before providing the list of the cached memories.
+# Possible options (suffixes):
+# _all        - enable all tables (excluding read-only/write-only/dynamic/signal)
+# _predefined - enable predefined list of tables
+# _parity     - enable tables protected by parity field
+# _ecc        - enable tables protected by ecc field
+# _specific   - enable specific tables - MUST add this suffix if specific tables should be cached
+# _specific_X - enable caching for memory X, where X is memory name. Note: will not work without the previous suffix
+# Example: (this example will enable caching of the IHP_RECYCLE_COMMAND table)
+# mem_cache_enable_specific.BCM88650=1 #(MUST be added in case specific tables should be cached)
+# mem_cache_enable_specific_IHP_RECYCLE_COMMAND.BCM88650=1
+# mem_cache_enable_specific.BCM88675=1
+# mem_cache_enable_specific_IPS_QUEUE_PRIORITY_TABLE.BCM88675=1
+
+mem_cache_enable_parity.BCM88650=1
+mem_cache_enable_parity.BCM88675=1
+mem_cache_enable_parity.BCM88202=1
+mem_cache_enable_parity.BCM88750=1
+mem_cache_enable_parity.BCM88950=1
+mem_cache_enable_ecc=0
+
+# mem_nocache property
+# Cache memory mode - disable memory caching for specific table during init.
+# Note: the user MUST add the default property name before providing the list of the uncached memories.
+# Possible options (suffixes):
+# specific_X - disable caching for memory X, where X is memory name. Note: will not work without the previous suffix
+# Example: (this example will enable caching of the IHP_TERMINATION_PROFILE_TABLE table)
+# mem_nocache.BCM88660=1 #(MUST be added in case there are uncached memories)
+# mem_nocache_IHP_TERMINATION_PROFILE_TABLE.BCM88660=1
+#mem_nocache.BCM88680=1
+#mem_nocache_PPDB_B_LIF_TABLE_LABEL_PROTOCOL_OR_LSP.BCM88680=1
+#mem_nocache_PPDB_B_LIF_TABLE.BCM88680=1
+
+
+custom_feature_no_backdoor=1
+
+# Jericho split horizon mode
+# 0 - Use 0-1 range for lif orientation.
+# 1 (default) - Use 0-1 range for lif orientation in AC lifs and 0-3 range for orientation in other lif types.
+split_horizon_forwarding_groups_mode.BCM88675=1
+split_horizon_forwarding_groups_mode.BCM88470=1
+split_horizon_forwarding_groups_mode.BCM88680=1
+
+
+# Entries capacities for public and private IP forwarding tables
+private_ip_frwrd_table_size=500000
+public_ip_frwrd_table_size=500000
+
+
+#Enable KAPS ARM and Descriptor-DMA
+dma_desc_aggregator_chain_length_max=500
+dma_desc_aggregator_buff_size_kb=100
+dma_desc_aggregator_timeout_usec=1000
+dma_desc_aggregator_enable_specific_KAPS=1
+
+#In Jericho the KAPS ARM DMA already consumes 64KB of buffer memory
+dma_desc_aggregator_buff_size_kb.BCM88675=40
+
+# Entries capacities for direct access tables in KAPS (8K granularity)
+#pmf_kaps_large_db_size=8096
+
+#enable expose of HW id instead of SW id in Traps.
+bcm886xx_rx_use_hw_trap_id.BCM88675=1
+
+# Jericho - maximum RIF Id ( valid range is 0 to 32*1024-1)
+#rif_id_max=20000
+
+#If set, never add the PPH learn extension (unless explictly required in FP action).
+#bcm886xx_pph_learn_extension_disable.BCM88650=0
+#bcm886xx_pph_learn_extension_disable.BCM88660=0
+#bcm886xx_pph_learn_extension_disable.BCM88675=0
+
+# Jericho - field_ip_first_fragment_parsed
+#field_ip_first_fragment_parsed=0
+
+# learning_fifo_dma_buffer_size in bytes (host memory size). Valid range is 20-327680
+learning_fifo_dma_buffer_size=200000
+# learning_fifo_dma_timeout in microseconds. Valid range is 0-65535. 0 means no timeout.
+learning_fifo_dma_timeout=32767
+# learning_fifo_dma_threshold valid range is 1-16384 (0x4000)
+learning_fifo_dma_threshold=4
+
+###################################
+########### OAM and BFD ###########
+###################################
+
+# OAM / BFD initialization
+# To enable OAM set oam_enable to 1
+# To enable BFD set bfd_enable to 1
+# Be aware that OAM requires more settings (Configuring OAMP and Recycle port)
+
+# oam_enable=1
+# bfd_enable=1
+
+# Set OAMP port
+num_oamp_ports.BCM88650=0
+
+# If BFD is used, runtime_performance_optimize_enable_sched_allocation should be set to 0
+# to prevent high memory consumption
+
+# Disable the following:
+# bcm886xx_next_hop_mac_extension_enable
+# bcm886xx_ipv6_tunnel_enable
+
+# To use IEEE 1588, configure DPLL clock
+
+# Configure recycle port (assuming ucode_port_40=RCY.0)
+
+#oam_rcy_port.BCM88650=40
+#tm_port_header_type_in_40.BCM88650=TM
+#tm_port_header_type_out_40.BCM88650=ETH
+#ucode_port_40.0=RCY.0:core_0.40
+
+# MPLS-TP channel types for OAM/BFD - If MPLS-TP used, channel should be specified
+# Available types: mplstp_bfd_control_channel_type
+#               mplstp_pw_ach_channel_type
+#               mplstp_dlm_channel_type
+#               mplstp_ilm_channel_type
+#               mplstp_dm_channel_type
+#               mplstp_ipv4_channel_type
+#               mplstp_cc_channel_type
+#               mplstp_cv_channel_type
+#               mplstp_on_demand_cv_channel_type
+#               mplstp_pwe_oam_channel_type
+#               mplstp_ipv6_channel_type
+#               mplstp_fault_oam_channel_type
+#               mplstp_g8113_channel_type
+#mplstp_g8113_channel_type=0x8902
+#mplstp_fault_oam_channel_type=0x5678
+
+# Use BFD MPLS TP
+#bfd_encapsulation_mode=1
+
+# Use 1711 protocol
+#custom_feature_y1711_enabled=1
+
+# OAM DMA threshold
+#oamp_fifo_dma_event_interface_enable=1
+#oamp_fifo_dma_event_interface_timeout=0
+#oamp_fifo_dma_event_interface_buffer_size=0x1000
+#oamp_fifo_dma_event_interface_threshold=10
+
+# PORT BASED PWE TERMINATION
+#pwe_termination_port_mode_enable =1
+
+# Walk around for Inlif data Errata, for GAL packets, lookup mpls table with valid mpls label
+# it's not offical solution, just for some dedicated customer.
+# offical solution will be PMF. please refer the relevant doc.
+#custom_feature_gal_lookup_exactly=1
+
+custom_feature_cmodel_loopback=1
+
+#for IPv6UC: use Tcam instead of KAPS
+#custom_feature_l3_ipv6_uc_use_tcam=0
+# ipv6_mc need KPB library
+custom_feature_ipv6_mc_forwarding_disable = 1
+vlan_match_criteria_mode=PON_PCP_ETHERTYPE
+
diff --git a/bal_release/3rdparty/bcm-sdk/rc/qax/dnx.soc b/bal_release/3rdparty/bcm-sdk/rc/qax/dnx.soc
new file mode 100644
index 0000000..eb90675
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/rc/qax/dnx.soc
@@ -0,0 +1,192 @@
+#
+# $Id: jer.soc,v 1.90 2013/08/14 08:32:00 ninash Exp $
+#
+# $Copyright: (c) 2011 Broadcom Corporation
+# All Rights Reserved.$
+#
+
+debug info
+debug appl rcload warn
+debug appl symtab warn
+debug bcm rx,tx,link,attach warn
+debug soc tests warn
+debug soc rx,phy,schan,reg,socmem,dma,mem,miim,mii,intr,counter,ddr warn
+debug soc common err
+debug sys verinet warn
+debug soc physim warn
+
+if $?QMX_A0 || $?BCM88370_A0 || $?BCM88371_A0 || $?BCM88371M_A0 || $?BCM88375_A0 || $?BCM88376_A0 || $?BCM88376M_A0 || $?BCM88377_A0 || $?BCM88378_A0 || $?BCM88379_A0 || \
+   $?QMX_A1 || $?BCM88370_A1 || $?BCM88371_A1 || $?BCM88371M_A1 || $?BCM88375_A1 || $?BCM88376_A1 || $?BCM88376M_A1 || $?BCM88377_A1 || $?BCM88378_A1 || $?BCM88379_A1 ||\
+   $?QMX_B0 || $?BCM88370_B0 || $?BCM88371_B0 || $?BCM88371M_B0 || $?BCM88375_B0 || $?BCM88376_B0 || $?BCM88376M_B0 || $?BCM88377_B0 || $?BCM88378_B0 || $?BCM88379_B0  \
+   'local QMX 1'
+if $?JERICHO_A0 || $?BCM88670_A0 || $?BCM88671_A0 || $?BCM88671M_A0 || $?BCM88672_A0 || $?BCM88673_A0 || $?BCM88674_A0 || $?BCM88675_A0 || $?BCM88675M_A0 || $?BCM88676_A0 || $?BCM88676M_A0 || $?BCM88678_A0 || $?BCM88679_A0 || \
+   $?JERICHO_A1 || $?BCM88670_A1 || $?BCM88671_A1 || $?BCM88671M_A1 || $?BCM88672_A1 || $?BCM88673_A1 || $?BCM88674_A1 || $?BCM88675_A1 || $?BCM88675M_A1 || $?BCM88676_A1 || $?BCM88676M_A1 || $?BCM88678_A1 || $?BCM88679_A1 || \
+   $?JERICHO_B0 || $?BCM88670_B0 || $?BCM88671_B0 || $?BCM88671M_B0 || $?BCM88672_B0 || $?BCM88673_B0 || $?BCM88674_B0 || $?BCM88675_B0 || $?BCM88675M_B0 || $?BCM88676_B0 || $?BCM88676M_B0 || $?BCM88678_B0 || $?BCM88679_B0 \
+   'local JERICHO 1'
+if $?BCM88680_A0 ||  $?BCM88681_A0 ||  $?BCM88682_A0 || $?BCM88683_A0 ||  $?BCM88380_A0 ||  $?BCM88381_A0 \
+   'local JERPLUS 1'
+
+if $?BCM88690_A0 \
+   'local JERTWO 1'
+
+if $?QMX \
+    'rcload bcm88375_board.soc'
+if $?JERICHO \
+    'rcload bcm88675_board.soc'
+
+if $?JERPLUS \
+    'rcload bcm88680_board.soc'
+
+#
+# For Jericho-2:
+# This will have to change when we have bcm88690_board.soc
+#
+if $?JERTWO \
+    'rcload bcm88680_board.soc'
+
+# Load DRAM tuning properties from local File. RcLoad will not fail if file not found, and will not show errors of missing file.
+set RCError=off
+debug appl shell warn
+if $?QMX \
+    'rcload /home/negev/bcm88375_dram_tune.soc'
+
+if $?JERICHO \
+    'rcload /home/negev/bcm88675_dram_tune.soc'
+
+debug appl shell =
+set RCError=on
+
+set RCError=off
+rcload combo28_dram.soc
+set RCError=on
+
+#Set fabric connect mode as FE for multi FAP system
+if $?diag_chassis " \
+   config add fabric_connect_mode.BCM88675=FE"
+
+# Set modid:
+# If diag_chassis is enabled (two line cards), and 'slot' is defined (slot is defined only when
+# working without a management card - set modid to be 'slot'
+# Otherwise (single line card, or management card), set modid to be 0 for unit 0, and 1 for unit != 0
+if $?diag_chassis && $?slot "\
+  local modid $slot" \
+else "\
+  local modid $unit"
+expr $modid==1; if $? "local modid 2"
+
+if $?module_id " \
+  local modid $module_id"
+
+echo "$unit: modid=$modid"
+
+# Set base_modid:
+# Id base_module_id is set, then set base_modid to have base_module_id value.
+# Otherwise, set base_modid to be 0.
+if $?base_module_id " \
+  local base_modid $base_module_id" \
+else " \
+  local base_modid 0"
+
+expr $base_modid > 0
+if $? " \
+  echo '$unit: base_modid=$base_modid'"
+
+if $?diag_chassis " \
+  local nof_devices 2" \
+else "\
+  local nof_devices 1"
+
+if $?n_devices " \
+  local nof_devices $n_devices"
+
+expr $nof_devices > 1
+if $? " \
+  echo '$unit: nof_devices=$nof_devices'"
+
+if $?mng_cpu " \
+  echo '$unit:management card - polling is set on'; \
+  config add polled_irq_mode.BCM88675=1; \
+  config add schan_intr_enable.BCM88675=0; \
+  config add tdma_intr_enable.BCM88675=0; \
+  config add tslam_intr_enable.BCM88675=0; \
+  config add miim_intr_enable.BCM88675=0; "
+
+#Counters unavailable in cmodel
+if $?cmodel " \
+  config add counter_engine_sampling_interval=0;"
+
+#default values in a case which these parameters are not exist
+if !$?diag_cosq_disable "\
+  local diag_cosq_disable 0"
+if !$?warmboot "\
+  local warmboot 0"
+if !$?diag_disable "\
+  local diag_disable 0"
+if !$?diag_no_itmh_prog_mode "\
+  local diag_no_itmh_prog_mode 0"
+if !$?l2_mode "\
+  local l2_mode 0"
+
+if $?JERPLUS "\
+  local diag_disable 0"
+local init_others NoLinkscan=0
+if $?JERPLUS "\
+  local init_others 'NoIntr=1 NoLinkscan=1 NoApplStk=0'"
+
+#Disable interrupts in cmodel
+if $?cmodel "\
+  local no_intr 1" \
+else "\
+  local no_intr 0"
+
+#
+# For Jericho-2, we TEMPORARILY disable some components to quickly enable
+# a working PCID version.
+# 
+if $?JERTWO "\
+  local no_soc 0"
+
+if $?JERTWO "\
+  local no_intr 1"
+
+
+#INIT_DNX ModID=$modid NofDevices=$nof_devices CosqDisable=$diag_cosq_disable NoAppl=$diag_disable Warmboot=$warmboot NoRxLos=1 $init_others NoItmhProgMode=$diag_no_itmh_prog_mode L2Mode=$l2_mode NoIntr=$no_intr NoSoc=$no_soc
+
+INIT_DNX
+
+#LED support section start
+#Program of LED0
+local ledcode_0 '02 05 67 2D 02 01 67 2D 02 11 67 2D 02 09 67 2D\
+ 02 15 67 2D 02 0D 67 2D 86 E0 3A 06 28 32 00 32\
+ 01 B7 97 75 3E 16 E0 CA 06 70 3E 77 3A 67 33 75\
+ 3A 77 1C 12 A0 F8 15 1A 00 57 32 0E 87 57 32 0F\
+ 87 57' #sdk88670.hex
+
+#Program of LED1
+local ledcode_1 '02 1D 67 2D 02 2D 67 2D 02 05 67 2D 02 0D 67 2D\
+ 02 09 67 2D 02 01 67 2D 86 E0 3A 06 28 32 00 32\
+ 01 B7 97 75 3E 16 E0 CA 06 70 3E 77 3A 67 33 75\
+ 3A 77 1C 12 A0 F8 15 1A 00 57 32 0E 87 57 32 0F\
+ 87 57' #sdk88670.hex
+
+
+#Program of LED2
+local ledcode_2 '02 01 67 2D 02 09 67 2D 02 0D 67 2D 02 05 67 2D\
+ 02 2D 67 2D 02 1D 67 2D 86 E0 3A 06 28 32 00 32\
+ 01 B7 97 75 3E 16 E0 CA 06 70 3E 77 3A 67 33 75\
+ 3A 77 1C 12 A0 F8 15 1A 00 57 32 0E 87 57 32 0F\
+ 87 57' #sdk88670.hex
+
+# Download LED code into LED processors and enable (if applicable).
+if $?feature_led_proc && !$?simulator \
+    "led 0 prog $ledcode_0; \
+     led 1 prog $ledcode_1; \
+     led 2 prog $ledcode_2; \
+     led auto on; \
+     led 0 start; \
+     led 1 start; \
+     led 2 start"
+
+
+echo "dnx.soc: Done............................."
+
diff --git a/bal_release/3rdparty/bcm-sdk/rc/qax/dune.soc b/bal_release/3rdparty/bcm-sdk/rc/qax/dune.soc
new file mode 100644
index 0000000..57f24ea
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/rc/qax/dune.soc
@@ -0,0 +1,1080 @@
+#
+# $Id: dune.soc,v 1.5 2011/12/20 10:53:28 yaronm Exp $
+#
+# $Copyright: (c) 2011 Broadcom Corporation
+# All Rights Reserved.$
+#
+# Configure fap device mode (TM/PP/TDM_OPTIMIZED/TDM_STANDARD)
+# and ftmh outlif extension depending on config variables 'packet_processing' and 'tdm' variables
+if $?tdm "\
+  echo '*** TDM MODE ***'; \
+  config add diag_cosq_disable=1; \
+  if !$?fap_device_mode 'config add fap_device_mode=TDM_STANDARD'; \
+  config add fabric_ftmh_outlif_extension=ALWAYS; \
+  config ext_qdr_type=NONE; \
+  config ext_ram_present=0"
+if !$?tdm && $?packet_processing "\
+  echo '*** PACKET PROCESSING MODE ***'; \
+  config add fabric_ftmh_outlif_extension=ALWAYS; \
+  config add fap_device_mode=PP; \
+  config add egress_encap_ip_tunnel_range_min=4095; \
+  config add egress_encap_ip_tunnel_range_max=4095; \
+  config add mpls_tunnel_term_label_range_min_0=1000; \
+  config add mpls_tunnel_term_label_range_max_0=1001; \
+  config add mpls_tunnel_term_label_range_min_1=1002; \
+  config add mpls_tunnel_term_label_range_max_1=1003; \
+  config add mpls_tunnel_term_label_range_min_2=1004; \
+  config add mpls_tunnel_term_label_range_max_2=1005; \
+  if !$?diag_cosq_disable 'config add diag_cosq_disable=0';"
+if !$?tdm && !$?packet_processing "\
+  echo '*** TM ONLY MODE ***'; \
+  config add fap_device_mode=TM; \
+  config add fabric_ftmh_outlif_extension=IF_MC; \
+  if !$?diag_cosq_disable 'config add diag_cosq_disable=0'"
+
+# When more than a single device, set connect mode to FE and modid
+# to the slot id. For a single device, set connect mode to SINGLE_FAP
+# and modid to 0. Note that when using single_fap, all fabric-facing serdes
+# lanes are set in loopback, for fabric multicast to work.
+# All options for fabric_connect_mode are FE/BACK2BACK/MESH/MULTI_STAGE_FE/SINGLE_FAP
+
+if !$?diag_cosq_disable "config add diag_cosq_disable=0"
+if !$?slot || !$?diag_chassis "local slot 0"
+if !$?board_type_GFA_BI "local board_type_GFA_BI 1"
+if !$?board_type_GFA_BI_2 "local board_type_GFA_BI_2 0"
+
+if $?diag_chassis " \
+  local nof_devices 2; \
+  config add fabric_connect_mode=FE" \
+else "\
+  local nof_devices 1; \
+  if !$?fabric_connect_mode 'config add fabric_connect_mode=SINGLE_FAP'"
+   
+#Enable all quartets. Can be done per quartet using _N suffix
+config add pb_serdes_qrtt_active=1
+
+local lane_rate_nif 6250000
+local lane_rate_com_a 6250000
+if $board_type_GFA_BI "\
+    local lane_rate_fbr 5000000; \
+    local lane_rate_com_b 3125000; \
+    config add fabric_ref_clock=250000; \
+    config add combo_nif_0=1; \
+    config add combo_nif_1=1" \
+else '\
+    local lane_rate_fbr 6250000; \
+    local lane_rate_com_b 6250000; \
+    config add fabric_ref_clock=312500; \
+    config add combo_nif_0=0; \
+    config add combo_nif_1=0; \
+    for i=32,59 \'config add pb_serdes_lane_tx_phys_media_type_$i=CHIP2CHIP\''
+
+# Nif serdes quartets
+for i=0,2 'config add pb_serdes_qrtt_max_expected_rate_$i=$lane_rate_nif'
+for i=4,6 'config add pb_serdes_qrtt_max_expected_rate_$i=$lane_rate_nif'
+
+# Nif serdes quartet (combo-a)
+config add pb_serdes_qrtt_max_expected_rate_3=$lane_rate_com_a
+
+# Nif serdes quartet (combo-b)
+config add pb_serdes_qrtt_max_expected_rate_7=$lane_rate_com_b
+
+# Fabric serdes quartets
+for i=8,14 'config add pb_serdes_qrtt_max_expected_rate_$i=$lane_rate_fbr'
+
+# set default rate to nif rate. Override fabric lanes.
+config add pb_serdes_lane_rate=$lane_rate_nif
+for i=12,15 'config add pb_serdes_lane_rate_$i=$lane_rate_com_a'
+for i=28,31 'config add pb_serdes_lane_rate_$i=$lane_rate_com_b'
+for i=32,59 'config add pb_serdes_lane_rate_$i=$lane_rate_fbr'
+
+# Board Type configuration.
+
+if $board_type_GFA_BI "\
+    echo Configure GFA_BI Port/Interfcae/Nif/SerDes parameters; \
+    config add ucode_port_1=RXAUI7; \
+    config add ucode_port_2=RXAUI6; \
+    config add ucode_port_3=XAUI7; \
+    config add ucode_port_4=RXAUI0; \
+    config add ucode_port_5=RXAUI2; \
+    config add ucode_port_6=RXAUI4; \
+    config add ucode_port_7=RXAUI12; \
+    config add ucode_port_8=RXAUI10; \
+    config add ucode_port_9=RXAUI8; \
+    config add pb_serdes_lane_swap_polarity_tx_9=1; \
+    config add pb_serdes_lane_swap_polarity_tx_29=1; \
+    config add pb_serdes_lane_swap_polarity_rx_13=1; \
+    config add pb_serdes_lane_swap_polarity_rx_18=1; \
+    config add pb_serdes_lane_swap_polarity_rx_22=1; \
+    config add pb_serdes_lane_swap_polarity_rx_30=1; \
+    config add pb_serdes_lane_swap_polarity_rx_31=1; \
+    config add pb_serdes_lane_rx_phys_zcnt=23; \
+    config add pb_serdes_lane_rx_phys_z1cnt=1; \
+    config add pb_serdes_lane_rx_phys_dfelth=20; \
+    config add pb_serdes_lane_rx_phys_tlth=20; \
+    config add pb_serdes_lane_rx_phys_g1cnt=1; \
+    config add pb_serdes_lane_tx_phys_amp_12=30; \
+    config add pb_serdes_lane_tx_phys_main_12=18; \
+    config add pb_serdes_lane_tx_phys_pre_12=3; \
+    config add pb_serdes_lane_tx_phys_post_12=13; \
+    config add pb_serdes_lane_tx_phys_amp_13=30; \
+    config add pb_serdes_lane_tx_phys_main_13=18; \
+    config add pb_serdes_lane_tx_phys_pre_13=3; \
+    config add pb_serdes_lane_tx_phys_post_13=13; \
+    config add pb_serdes_lane_tx_phys_amp_14=30; \
+    config add pb_serdes_lane_tx_phys_main_14=18; \
+    config add pb_serdes_lane_tx_phys_pre_14=3; \
+    config add pb_serdes_lane_tx_phys_post_14=13; \
+    config add pb_serdes_lane_tx_phys_amp_15=30; \
+    config add pb_serdes_lane_tx_phys_main_15=18; \
+    config add pb_serdes_lane_tx_phys_pre_15=3; \
+    config add pb_serdes_lane_tx_phys_post_15=13;"
+    
+if $board_type_GFA_BI "\
+    config add pb_serdes_lane_rx_phys_zcnt_3=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_3=1;  \
+    config add pb_serdes_lane_rx_phys_dfelth_3=15;  \
+    config add pb_serdes_lane_rx_phys_tlth_3=18;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_3=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_12=21;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_12=1;  \
+    config add pb_serdes_lane_rx_phys_dfelth_12=1;  \
+    config add pb_serdes_lane_rx_phys_tlth_12=8;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_12=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_13=18;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_13=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_13=0;  \
+    config add pb_serdes_lane_rx_phys_tlth_13=4;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_13=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_14=17;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_14=1;  \
+    config add pb_serdes_lane_rx_phys_dfelth_14=2;  \
+    config add pb_serdes_lane_rx_phys_tlth_14=4;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_14=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_15=19;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_15=1;  \
+    config add pb_serdes_lane_rx_phys_dfelth_15=0;  \
+    config add pb_serdes_lane_rx_phys_tlth_15=0;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_15=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_28=12;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_28=0;  \
+    config add pb_serdes_lane_rx_phys_dfelth_28=0;  \
+    config add pb_serdes_lane_rx_phys_tlth_28=0;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_28=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_29=12;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_29=0;  \
+    config add pb_serdes_lane_rx_phys_dfelth_29=0;  \
+    config add pb_serdes_lane_rx_phys_tlth_29=0;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_29=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_30=12;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_30=0;  \
+    config add pb_serdes_lane_rx_phys_dfelth_30=0;  \
+    config add pb_serdes_lane_rx_phys_tlth_30=0;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_30=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_31=12;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_31=0;  \
+    config add pb_serdes_lane_rx_phys_dfelth_31=0;  \
+    config add pb_serdes_lane_rx_phys_tlth_31=0;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_31=1;"
+    
+# TX params for fabric rate of 5000 mbps (Negev system).
+# Overrides media type configuration.
+if $board_type_GFA_BI "\
+    config add pb_serdes_lane_tx_phys_amp_32=31; \
+    config add pb_serdes_lane_tx_phys_main_32=24; \
+    config add pb_serdes_lane_tx_phys_pre_32=0; \
+    config add pb_serdes_lane_tx_phys_post_32=0; \
+    config add pb_serdes_lane_tx_phys_amp_33=31; \
+    config add pb_serdes_lane_tx_phys_main_33=24; \
+    config add pb_serdes_lane_tx_phys_pre_33=0; \
+    config add pb_serdes_lane_tx_phys_post_33=0; \
+    config add pb_serdes_lane_tx_phys_amp_34=31; \
+    config add pb_serdes_lane_tx_phys_main_34=24; \
+    config add pb_serdes_lane_tx_phys_pre_34=0; \
+    config add pb_serdes_lane_tx_phys_post_34=0; \
+    config add pb_serdes_lane_tx_phys_amp_35=31; \
+    config add pb_serdes_lane_tx_phys_main_35=24; \
+    config add pb_serdes_lane_tx_phys_pre_35=0; \
+    config add pb_serdes_lane_tx_phys_post_35=0; \
+    config add pb_serdes_lane_tx_phys_amp_36=31; \
+    config add pb_serdes_lane_tx_phys_main_36=24; \
+    config add pb_serdes_lane_tx_phys_pre_36=0; \
+    config add pb_serdes_lane_tx_phys_post_36=0; \
+    config add pb_serdes_lane_tx_phys_amp_37=31; \
+    config add pb_serdes_lane_tx_phys_main_37=24; \
+    config add pb_serdes_lane_tx_phys_pre_37=0; \
+    config add pb_serdes_lane_tx_phys_post_37=0; \
+    config add pb_serdes_lane_tx_phys_amp_38=31; \
+    config add pb_serdes_lane_tx_phys_main_38=24; \
+    config add pb_serdes_lane_tx_phys_pre_38=0; \
+    config add pb_serdes_lane_tx_phys_post_38=0; \
+    config add pb_serdes_lane_tx_phys_amp_39=31; \
+    config add pb_serdes_lane_tx_phys_main_39=24; \
+    config add pb_serdes_lane_tx_phys_pre_39=0; \
+    config add pb_serdes_lane_tx_phys_post_39=0; \
+    config add pb_serdes_lane_tx_phys_amp_40=31; \
+    config add pb_serdes_lane_tx_phys_main_40=24; \
+    config add pb_serdes_lane_tx_phys_pre_40=0; \
+    config add pb_serdes_lane_tx_phys_post_40=0; \
+    config add pb_serdes_lane_tx_phys_amp_41=31; \
+    config add pb_serdes_lane_tx_phys_main_41=24; \
+    config add pb_serdes_lane_tx_phys_pre_41=0; \
+    config add pb_serdes_lane_tx_phys_post_41=0; \
+    config add pb_serdes_lane_tx_phys_amp_42=31; \
+    config add pb_serdes_lane_tx_phys_main_42=24; \
+    config add pb_serdes_lane_tx_phys_pre_42=0; \
+    config add pb_serdes_lane_tx_phys_post_42=0"
+if $board_type_GFA_BI "\
+    config add pb_serdes_lane_tx_phys_amp_43=31; \
+    config add pb_serdes_lane_tx_phys_main_43=24; \
+    config add pb_serdes_lane_tx_phys_pre_43=0; \
+    config add pb_serdes_lane_tx_phys_post_43=0; \
+    config add pb_serdes_lane_tx_phys_amp_44=31; \
+    config add pb_serdes_lane_tx_phys_main_44=24; \
+    config add pb_serdes_lane_tx_phys_pre_44=0; \
+    config add pb_serdes_lane_tx_phys_post_44=0; \
+    config add pb_serdes_lane_tx_phys_amp_45=31; \
+    config add pb_serdes_lane_tx_phys_main_45=24; \
+    config add pb_serdes_lane_tx_phys_pre_45=0; \
+    config add pb_serdes_lane_tx_phys_post_45=0; \
+    config add pb_serdes_lane_tx_phys_amp_46=31; \
+    config add pb_serdes_lane_tx_phys_main_46=24; \
+    config add pb_serdes_lane_tx_phys_pre_46=0; \
+    config add pb_serdes_lane_tx_phys_post_46=0; \
+    config add pb_serdes_lane_tx_phys_amp_47=31; \
+    config add pb_serdes_lane_tx_phys_main_47=24; \
+    config add pb_serdes_lane_tx_phys_pre_47=0; \
+    config add pb_serdes_lane_tx_phys_post_47=0; \
+    config add pb_serdes_lane_tx_phys_amp_48=31; \
+    config add pb_serdes_lane_tx_phys_main_48=24; \
+    config add pb_serdes_lane_tx_phys_pre_48=0; \
+    config add pb_serdes_lane_tx_phys_post_48=0; \
+    config add pb_serdes_lane_tx_phys_amp_49=31; \
+    config add pb_serdes_lane_tx_phys_main_49=24; \
+    config add pb_serdes_lane_tx_phys_pre_49=0; \
+    config add pb_serdes_lane_tx_phys_post_49=0; \
+    config add pb_serdes_lane_tx_phys_amp_50=31; \
+    config add pb_serdes_lane_tx_phys_main_50=24; \
+    config add pb_serdes_lane_tx_phys_pre_50=0; \
+    config add pb_serdes_lane_tx_phys_post_50=0; \
+    config add pb_serdes_lane_tx_phys_amp_51=31; \
+    config add pb_serdes_lane_tx_phys_main_51=24; \
+    config add pb_serdes_lane_tx_phys_pre_51=0; \
+    config add pb_serdes_lane_tx_phys_post_51=0; \
+    config add pb_serdes_lane_tx_phys_amp_52=31; \
+    config add pb_serdes_lane_tx_phys_main_52=24; \
+    config add pb_serdes_lane_tx_phys_pre_52=0; \
+    config add pb_serdes_lane_tx_phys_post_52=0; \
+    config add pb_serdes_lane_tx_phys_amp_53=31; \
+    config add pb_serdes_lane_tx_phys_main_53=24; \
+    config add pb_serdes_lane_tx_phys_pre_53=0; \
+    config add pb_serdes_lane_tx_phys_post_53=0; \
+    config add pb_serdes_lane_tx_phys_amp_54=31; \
+    config add pb_serdes_lane_tx_phys_main_54=24; \
+    config add pb_serdes_lane_tx_phys_pre_54=0; \
+    config add pb_serdes_lane_tx_phys_post_54=0; \
+    config add pb_serdes_lane_tx_phys_amp_55=31; \
+    config add pb_serdes_lane_tx_phys_main_55=24; \
+    config add pb_serdes_lane_tx_phys_pre_55=0; \
+    config add pb_serdes_lane_tx_phys_post_55=0; \
+    config add pb_serdes_lane_tx_phys_amp_56=31; \
+    config add pb_serdes_lane_tx_phys_main_56=24; \
+    config add pb_serdes_lane_tx_phys_pre_56=0; \
+    config add pb_serdes_lane_tx_phys_post_56=0; \
+    config add pb_serdes_lane_tx_phys_amp_57=31; \
+    config add pb_serdes_lane_tx_phys_main_57=24; \
+    config add pb_serdes_lane_tx_phys_pre_57=0; \
+    config add pb_serdes_lane_tx_phys_post_57=0; \
+    config add pb_serdes_lane_tx_phys_amp_58=31; \
+    config add pb_serdes_lane_tx_phys_main_58=24; \
+    config add pb_serdes_lane_tx_phys_pre_58=0; \
+    config add pb_serdes_lane_tx_phys_post_58=0; \
+    config add pb_serdes_lane_tx_phys_amp_59=31; \
+    config add pb_serdes_lane_tx_phys_main_59=24; \
+    config add pb_serdes_lane_tx_phys_pre_59=0; \
+    config add pb_serdes_lane_tx_phys_post_59=0;"
+
+# RX params for fabric rate of 5000 mbps (Negev system)
+if $board_type_GFA_BI "\
+    config add pb_serdes_lane_rx_phys_zcnt_32=24; \
+    config add pb_serdes_lane_rx_phys_z1cnt_32=2; \
+    config add pb_serdes_lane_rx_phys_dfelth_32=21; \
+    config add pb_serdes_lane_rx_phys_tlth_32=35; \
+    config add pb_serdes_lane_rx_phys_g1cnt_32=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_33=24; \
+    config add pb_serdes_lane_rx_phys_z1cnt_33=1; \
+    config add pb_serdes_lane_rx_phys_dfelth_33=28; \
+    config add pb_serdes_lane_rx_phys_tlth_33=16; \
+    config add pb_serdes_lane_rx_phys_g1cnt_33=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_34=24; \
+    config add pb_serdes_lane_rx_phys_z1cnt_34=1; \
+    config add pb_serdes_lane_rx_phys_dfelth_34=18; \
+    config add pb_serdes_lane_rx_phys_tlth_34=26; \
+    config add pb_serdes_lane_rx_phys_g1cnt_34=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_35=23; \
+    config add pb_serdes_lane_rx_phys_z1cnt_35=2; \
+    config add pb_serdes_lane_rx_phys_dfelth_35=23; \
+    config add pb_serdes_lane_rx_phys_tlth_35=14; \
+    config add pb_serdes_lane_rx_phys_g1cnt_35=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_36=22; \
+    config add pb_serdes_lane_rx_phys_z1cnt_36=1; \
+    config add pb_serdes_lane_rx_phys_dfelth_36=22; \
+    config add pb_serdes_lane_rx_phys_tlth_36=30; \
+    config add pb_serdes_lane_rx_phys_g1cnt_36=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_37=23; \
+    config add pb_serdes_lane_rx_phys_z1cnt_37=1; \
+    config add pb_serdes_lane_rx_phys_dfelth_37=20; \
+    config add pb_serdes_lane_rx_phys_tlth_37=14; \
+    config add pb_serdes_lane_rx_phys_g1cnt_37=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_38=24; \
+    config add pb_serdes_lane_rx_phys_z1cnt_38=1; \
+    config add pb_serdes_lane_rx_phys_dfelth_38=23; \
+    config add pb_serdes_lane_rx_phys_tlth_38=29; \
+    config add pb_serdes_lane_rx_phys_g1cnt_38=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_39=24; \
+    config add pb_serdes_lane_rx_phys_z1cnt_39=1; \
+    config add pb_serdes_lane_rx_phys_dfelth_39=24; \
+    config add pb_serdes_lane_rx_phys_tlth_39=30; \
+    config add pb_serdes_lane_rx_phys_g1cnt_39=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_40=24; \
+    config add pb_serdes_lane_rx_phys_z1cnt_40=1; \
+    config add pb_serdes_lane_rx_phys_dfelth_40=21; \
+    config add pb_serdes_lane_rx_phys_tlth_40=33; \
+    config add pb_serdes_lane_rx_phys_g1cnt_40=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_41=24; \
+    config add pb_serdes_lane_rx_phys_z1cnt_41=1; \
+    config add pb_serdes_lane_rx_phys_dfelth_41=20; \
+    config add pb_serdes_lane_rx_phys_tlth_41=6; \
+    config add pb_serdes_lane_rx_phys_g1cnt_41=1;"
+if $board_type_GFA_BI "\
+    config add pb_serdes_lane_rx_phys_zcnt_42=20; \
+    config add pb_serdes_lane_rx_phys_z1cnt_42=3; \
+    config add pb_serdes_lane_rx_phys_dfelth_42=18; \
+    config add pb_serdes_lane_rx_phys_tlth_42=33; \
+    config add pb_serdes_lane_rx_phys_g1cnt_42=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_43=24; \
+    config add pb_serdes_lane_rx_phys_z1cnt_43=1; \
+    config add pb_serdes_lane_rx_phys_dfelth_43=26; \
+    config add pb_serdes_lane_rx_phys_tlth_43=33; \
+    config add pb_serdes_lane_rx_phys_g1cnt_43=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_44=23; \
+    config add pb_serdes_lane_rx_phys_z1cnt_44=1; \
+    config add pb_serdes_lane_rx_phys_dfelth_44=22; \
+    config add pb_serdes_lane_rx_phys_tlth_44=34; \
+    config add pb_serdes_lane_rx_phys_g1cnt_44=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_45=22; \
+    config add pb_serdes_lane_rx_phys_z1cnt_45=1; \
+    config add pb_serdes_lane_rx_phys_dfelth_45=18; \
+    config add pb_serdes_lane_rx_phys_tlth_45=16; \
+    config add pb_serdes_lane_rx_phys_g1cnt_45=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_46=23; \
+    config add pb_serdes_lane_rx_phys_z1cnt_46=1; \
+    config add pb_serdes_lane_rx_phys_dfelth_46=21; \
+    config add pb_serdes_lane_rx_phys_tlth_46=28; \
+    config add pb_serdes_lane_rx_phys_g1cnt_46=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_47=20; \
+    config add pb_serdes_lane_rx_phys_z1cnt_47=2; \
+    config add pb_serdes_lane_rx_phys_dfelth_47=16; \
+    config add pb_serdes_lane_rx_phys_tlth_47=9; \
+    config add pb_serdes_lane_rx_phys_g1cnt_47=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_48=24; \
+    config add pb_serdes_lane_rx_phys_z1cnt_48=1; \
+    config add pb_serdes_lane_rx_phys_dfelth_48=23; \
+    config add pb_serdes_lane_rx_phys_tlth_48=33; \
+    config add pb_serdes_lane_rx_phys_g1cnt_48=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_49=23; \
+    config add pb_serdes_lane_rx_phys_z1cnt_49=1; \
+    config add pb_serdes_lane_rx_phys_dfelth_49=28; \
+    config add pb_serdes_lane_rx_phys_tlth_49=12; \
+    config add pb_serdes_lane_rx_phys_g1cnt_49=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_50=23; \
+    config add pb_serdes_lane_rx_phys_z1cnt_50=1; \
+    config add pb_serdes_lane_rx_phys_dfelth_50=24;"
+if $board_type_GFA_BI "\
+    config add pb_serdes_lane_rx_phys_tlth_50=19; \
+    config add pb_serdes_lane_rx_phys_g1cnt_50=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_51=24; \
+    config add pb_serdes_lane_rx_phys_z1cnt_51=1; \
+    config add pb_serdes_lane_rx_phys_dfelth_51=22; \
+    config add pb_serdes_lane_rx_phys_tlth_51=20; \
+    config add pb_serdes_lane_rx_phys_g1cnt_51=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_52=23; \
+    config add pb_serdes_lane_rx_phys_z1cnt_52=1; \
+    config add pb_serdes_lane_rx_phys_dfelth_52=24; \
+    config add pb_serdes_lane_rx_phys_tlth_52=33; \
+    config add pb_serdes_lane_rx_phys_g1cnt_52=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_53=20; \
+    config add pb_serdes_lane_rx_phys_z1cnt_53=4; \
+    config add pb_serdes_lane_rx_phys_dfelth_53=10; \
+    config add pb_serdes_lane_rx_phys_tlth_53=5; \
+    config add pb_serdes_lane_rx_phys_g1cnt_53=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_54=24; \
+    config add pb_serdes_lane_rx_phys_z1cnt_54=1; \
+    config add pb_serdes_lane_rx_phys_dfelth_54=29; \
+    config add pb_serdes_lane_rx_phys_tlth_54=25; \
+    config add pb_serdes_lane_rx_phys_g1cnt_54=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_55=24; \
+    config add pb_serdes_lane_rx_phys_z1cnt_55=1; \
+    config add pb_serdes_lane_rx_phys_dfelth_55=24; \
+    config add pb_serdes_lane_rx_phys_tlth_55=22; \
+    config add pb_serdes_lane_rx_phys_g1cnt_55=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_56=24; \
+    config add pb_serdes_lane_rx_phys_z1cnt_56=1; \
+    config add pb_serdes_lane_rx_phys_dfelth_56=22; \
+    config add pb_serdes_lane_rx_phys_tlth_56=31; \
+    config add pb_serdes_lane_rx_phys_g1cnt_56=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_57=24; \
+    config add pb_serdes_lane_rx_phys_z1cnt_57=1; \
+    config add pb_serdes_lane_rx_phys_dfelth_57=22; \
+    config add pb_serdes_lane_rx_phys_tlth_57=25; \
+    config add pb_serdes_lane_rx_phys_g1cnt_57=1;"
+
+if $board_type_GFA_BI "\
+    config add pb_serdes_lane_rx_phys_zcnt_58=23; \
+    config add pb_serdes_lane_rx_phys_z1cnt_58=1; \
+    config add pb_serdes_lane_rx_phys_dfelth_58=23; \
+    config add pb_serdes_lane_rx_phys_tlth_58=26; \
+    config add pb_serdes_lane_rx_phys_g1cnt_58=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_59=23; \
+    config add pb_serdes_lane_rx_phys_z1cnt_59=2; \
+    config add pb_serdes_lane_rx_phys_dfelth_59=21; \
+    config add pb_serdes_lane_rx_phys_tlth_59=25; \
+    config add pb_serdes_lane_rx_phys_g1cnt_59=1;"
+
+if $board_type_GFA_BI_2 "\
+    echo Configure GFA_BI_2 Port/Interfcae/Nif/SerDes parameters; \
+    config add ucode_port_1=RXAUI3; \
+    config add ucode_port_2=RXAUI2; \
+    config add ucode_port_3=RXAUI1; \
+    config add ucode_port_4=RXAUI0; \
+    config add ucode_port_5=RXAUI8; \
+    config add ucode_port_6=RXAUI9; \
+    config add ucode_port_7=RXAUI5; \
+    config add ucode_port_8=RXAUI4; \
+    config add ucode_port_9=RXAUI12; \
+    config add ucode_port_10=RXAUI13; \
+    config add ucode_port_11=RXAUI10; \
+    config add ucode_port_12=RXAUI11; \
+    config add lanes_swap_6=1; \
+    config add lanes_swap_10=1; \
+    config add lanes_swap_11=1; \
+    config add lanes_swap_12=1; \
+    config add pb_serdes_lane_swap_polarity_tx_12=1; \
+    config add pb_serdes_lane_swap_polarity_tx_14=1; \
+    config add pb_serdes_lane_swap_polarity_tx_28=1; \
+    config add pb_serdes_lane_swap_polarity_tx_31=1; \
+    config add pb_serdes_lane_swap_polarity_tx_32=1; \
+    config add pb_serdes_lane_swap_polarity_tx_34=1; \
+    config add pb_serdes_lane_swap_polarity_tx_41=1; \
+    config add pb_serdes_lane_swap_polarity_rx_48=1; \
+    config add pb_serdes_lane_swap_polarity_rx_50=1; \
+    config add pb_serdes_lane_swap_polarity_rx_52=1; \
+    config add pb_serdes_lane_swap_polarity_rx_55=1; \
+    config add pb_serdes_lane_swap_polarity_rx_56=1; \
+    config add pb_serdes_lane_swap_polarity_rx_58=1;"
+    
+if $board_type_GFA_BI_2 && !$system_is_fe600_in_system "\
+    config add pb_serdes_lane_rx_phys_zcnt=21; \
+    config add pb_serdes_lane_rx_phys_z1cnt=1; \
+    config add pb_serdes_lane_rx_phys_dfelth=1; \
+    config add pb_serdes_lane_rx_phys_tlth=8; \
+    config add pb_serdes_lane_rx_phys_g1cnt=1; \
+    config add pb_serdes_lane_tx_phys_amp=30;  \
+    config add pb_serdes_lane_tx_phys_main=18;  \
+    config add pb_serdes_lane_tx_phys_pre=3;  \
+    config add pb_serdes_lane_tx_phys_post=13;"
+
+#GFA-BI2, with fe600, slot 0
+if $board_type_GFA_BI_2 && $system_is_fe600_in_system && !$slot "\
+    config add pb_serdes_lane_rx_phys_zcnt_12=23;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_12=1;  \
+    config add pb_serdes_lane_rx_phys_dfelth_12=11;  \
+    config add pb_serdes_lane_rx_phys_tlth_12=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_12=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_13=23;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_13=3;  \
+    config add pb_serdes_lane_rx_phys_dfelth_13=17;  \
+    config add pb_serdes_lane_rx_phys_tlth_13=7;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_13=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_14=18;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_14=3;  \
+    config add pb_serdes_lane_rx_phys_dfelth_14=7;  \
+    config add pb_serdes_lane_rx_phys_tlth_14=4;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_14=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_15=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_15=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_15=21;  \
+    config add pb_serdes_lane_rx_phys_tlth_15=21;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_15=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_28=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_28=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_28=18;  \
+    config add pb_serdes_lane_rx_phys_tlth_28=8;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_28=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_29=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_29=1;  \
+    config add pb_serdes_lane_rx_phys_dfelth_29=9;  \
+    config add pb_serdes_lane_rx_phys_tlth_29=2;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_29=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_30=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_30=3;  \
+    config add pb_serdes_lane_rx_phys_dfelth_30=18;  \
+    config add pb_serdes_lane_rx_phys_tlth_30=12;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_30=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_31=21;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_31=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_31=10;  \
+    config add pb_serdes_lane_rx_phys_tlth_31=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_31=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_32=23;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_32=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_32=22;  \
+    config add pb_serdes_lane_rx_phys_tlth_32=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_32=1"
+if $board_type_GFA_BI_2 && $system_is_fe600_in_system && !$slot "\
+    config add pb_serdes_lane_rx_phys_zcnt_33=23;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_33=1;  \
+    config add pb_serdes_lane_rx_phys_dfelth_33=13;  \
+    config add pb_serdes_lane_rx_phys_tlth_33=4;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_33=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_34=23;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_34=3;  \
+    config add pb_serdes_lane_rx_phys_dfelth_34=20;  \
+    config add pb_serdes_lane_rx_phys_tlth_34=30;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_34=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_35=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_35=1;  \
+    config add pb_serdes_lane_rx_phys_dfelth_35=11;  \
+    config add pb_serdes_lane_rx_phys_tlth_35=5;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_35=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_36=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_36=0;  \
+    config add pb_serdes_lane_rx_phys_dfelth_36=11;  \
+    config add pb_serdes_lane_rx_phys_tlth_36=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_36=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_37=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_37=1;  \
+    config add pb_serdes_lane_rx_phys_dfelth_37=10;  \
+    config add pb_serdes_lane_rx_phys_tlth_37=2;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_37=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_38=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_38=3;  \
+    config add pb_serdes_lane_rx_phys_dfelth_38=20;  \
+    config add pb_serdes_lane_rx_phys_tlth_38=11;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_38=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_39=22;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_39=1;  \
+    config add pb_serdes_lane_rx_phys_dfelth_39=9;  \
+    config add pb_serdes_lane_rx_phys_tlth_39=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_39=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_40=23;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_40=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_40=24;  \
+    config add pb_serdes_lane_rx_phys_tlth_40=2;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_40=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_41=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_41=1;  \
+    config add pb_serdes_lane_rx_phys_dfelth_41=9;  \
+    config add pb_serdes_lane_rx_phys_tlth_41=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_41=1"
+if $board_type_GFA_BI_2 && $system_is_fe600_in_system && !$slot "\
+    config add pb_serdes_lane_rx_phys_zcnt_42=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_42=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_42=10;  \
+    config add pb_serdes_lane_rx_phys_tlth_42=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_42=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_43=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_43=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_43=25;  \
+    config add pb_serdes_lane_rx_phys_tlth_43=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_43=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_44=23;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_44=1;  \
+    config add pb_serdes_lane_rx_phys_dfelth_44=9;  \
+    config add pb_serdes_lane_rx_phys_tlth_44=2;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_44=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_45=22;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_45=1;  \
+    config add pb_serdes_lane_rx_phys_dfelth_45=18;  \
+    config add pb_serdes_lane_rx_phys_tlth_45=16;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_45=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_46=21;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_46=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_46=9;  \
+    config add pb_serdes_lane_rx_phys_tlth_46=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_46=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_47=21;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_47=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_47=11;  \
+    config add pb_serdes_lane_rx_phys_tlth_47=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_47=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_48=21;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_48=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_48=8;  \
+    config add pb_serdes_lane_rx_phys_tlth_48=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_48=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_49=21;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_49=3;  \
+    config add pb_serdes_lane_rx_phys_dfelth_49=15;  \
+    config add pb_serdes_lane_rx_phys_tlth_49=13;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_49=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_50=23;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_50=3;  \
+    config add pb_serdes_lane_rx_phys_dfelth_50=17;  \
+    config add pb_serdes_lane_rx_phys_tlth_50=3;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_50=1"
+if $board_type_GFA_BI_2 && $system_is_fe600_in_system && !$slot "\
+    config add pb_serdes_lane_rx_phys_zcnt_51=22;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_51=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_51=8;  \
+    config add pb_serdes_lane_rx_phys_tlth_51=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_51=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_52=17;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_52=3;  \
+    config add pb_serdes_lane_rx_phys_dfelth_52=6;  \
+    config add pb_serdes_lane_rx_phys_tlth_52=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_52=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_53=22;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_53=1;  \
+    config add pb_serdes_lane_rx_phys_dfelth_53=11;  \
+    config add pb_serdes_lane_rx_phys_tlth_53=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_53=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_54=21;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_54=3;  \
+    config add pb_serdes_lane_rx_phys_dfelth_54=5;  \
+    config add pb_serdes_lane_rx_phys_tlth_54=2;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_54=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_55=23;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_55=1;  \
+    config add pb_serdes_lane_rx_phys_dfelth_55=14;  \
+    config add pb_serdes_lane_rx_phys_tlth_55=4;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_55=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_56=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_56=3;  \
+    config add pb_serdes_lane_rx_phys_dfelth_56=20;  \
+    config add pb_serdes_lane_rx_phys_tlth_56=21;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_56=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_57=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_57=1;  \
+    config add pb_serdes_lane_rx_phys_dfelth_57=14;  \
+    config add pb_serdes_lane_rx_phys_tlth_57=7;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_57=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_58=19;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_58=1;  \
+    config add pb_serdes_lane_rx_phys_dfelth_58=11;  \
+    config add pb_serdes_lane_rx_phys_tlth_58=2;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_58=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_59=22;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_59=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_59=12;  \
+    config add pb_serdes_lane_rx_phys_tlth_59=3;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_59=1"
+
+#GFA-BI2, with fe600, slot 1
+if $board_type_GFA_BI_2 && $system_is_fe600_in_system && $slot "\
+    config add pb_serdes_lane_rx_phys_zcnt_12=23;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_12=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_12=9;  \
+    config add pb_serdes_lane_rx_phys_tlth_12=2;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_12=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_13=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_13=4;  \
+    config add pb_serdes_lane_rx_phys_dfelth_13=20;  \
+    config add pb_serdes_lane_rx_phys_tlth_13=2;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_13=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_14=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_14=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_14=9;  \
+    config add pb_serdes_lane_rx_phys_tlth_14=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_14=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_15=23;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_15=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_15=10;  \
+    config add pb_serdes_lane_rx_phys_tlth_15=9;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_15=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_28=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_28=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_28=14;  \
+    config add pb_serdes_lane_rx_phys_tlth_28=4;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_28=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_29=23;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_29=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_29=9;  \
+    config add pb_serdes_lane_rx_phys_tlth_29=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_29=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_30=22;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_30=3;  \
+    config add pb_serdes_lane_rx_phys_dfelth_30=6;  \
+    config add pb_serdes_lane_rx_phys_tlth_30=4;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_30=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_31=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_31=1;  \
+    config add pb_serdes_lane_rx_phys_dfelth_31=14;  \
+    config add pb_serdes_lane_rx_phys_tlth_31=8;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_31=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_32=22;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_32=3;  \
+    config add pb_serdes_lane_rx_phys_dfelth_32=19;  \
+    config add pb_serdes_lane_rx_phys_tlth_32=4;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_32=1"
+if $board_type_GFA_BI_2 && $system_is_fe600_in_system && $slot "\
+    config add pb_serdes_lane_rx_phys_zcnt_33=22;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_33=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_33=11;  \
+    config add pb_serdes_lane_rx_phys_tlth_33=10;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_33=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_34=22;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_34=3;  \
+    config add pb_serdes_lane_rx_phys_dfelth_34=17;  \
+    config add pb_serdes_lane_rx_phys_tlth_34=20;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_34=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_35=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_35=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_35=12;  \
+    config add pb_serdes_lane_rx_phys_tlth_35=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_35=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_36=22;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_36=1;  \
+    config add pb_serdes_lane_rx_phys_dfelth_36=10;  \
+    config add pb_serdes_lane_rx_phys_tlth_36=4;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_36=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_37=22;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_37=1;  \
+    config add pb_serdes_lane_rx_phys_dfelth_37=10;  \
+    config add pb_serdes_lane_rx_phys_tlth_37=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_37=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_38=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_38=3;  \
+    config add pb_serdes_lane_rx_phys_dfelth_38=20;  \
+    config add pb_serdes_lane_rx_phys_tlth_38=14;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_38=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_39=23;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_39=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_39=11;  \
+    config add pb_serdes_lane_rx_phys_tlth_39=2;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_39=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_40=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_40=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_40=24;  \
+    config add pb_serdes_lane_rx_phys_tlth_40=18;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_40=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_41=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_41=3;  \
+    config add pb_serdes_lane_rx_phys_dfelth_41=11;  \
+    config add pb_serdes_lane_rx_phys_tlth_41=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_41=1"
+if $board_type_GFA_BI_2 && $system_is_fe600_in_system && $slot "\
+    config add pb_serdes_lane_rx_phys_zcnt_42=21;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_42=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_42=10;  \
+    config add pb_serdes_lane_rx_phys_tlth_42=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_42=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_43=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_43=4;  \
+    config add pb_serdes_lane_rx_phys_dfelth_43=22;  \
+    config add pb_serdes_lane_rx_phys_tlth_43=4;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_43=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_44=23;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_44=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_44=7;  \
+    config add pb_serdes_lane_rx_phys_tlth_44=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_44=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_45=22;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_45=1;  \
+    config add pb_serdes_lane_rx_phys_dfelth_45=18;  \
+    config add pb_serdes_lane_rx_phys_tlth_45=16;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_45=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_46=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_46=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_46=9;  \
+    config add pb_serdes_lane_rx_phys_tlth_46=3;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_46=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_47=22;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_47=1;  \
+    config add pb_serdes_lane_rx_phys_dfelth_47=9;  \
+    config add pb_serdes_lane_rx_phys_tlth_47=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_47=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_48=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_48=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_48=8;  \
+    config add pb_serdes_lane_rx_phys_tlth_48=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_48=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_49=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_49=3;  \
+    config add pb_serdes_lane_rx_phys_dfelth_49=12;  \
+    config add pb_serdes_lane_rx_phys_tlth_49=2;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_49=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_50=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_50=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_50=18;  \
+    config add pb_serdes_lane_rx_phys_tlth_50=11;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_50=1"
+if $board_type_GFA_BI_2 && $system_is_fe600_in_system && $slot "\
+    config add pb_serdes_lane_rx_phys_zcnt_51=23;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_51=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_51=7;  \
+    config add pb_serdes_lane_rx_phys_tlth_51=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_51=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_52=21;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_52=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_52=8;  \
+    config add pb_serdes_lane_rx_phys_tlth_52=2;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_52=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_53=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_53=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_53=12;  \
+    config add pb_serdes_lane_rx_phys_tlth_53=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_53=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_54=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_54=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_54=7;  \
+    config add pb_serdes_lane_rx_phys_tlth_54=3;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_54=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_55=23;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_55=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_55=12;  \
+    config add pb_serdes_lane_rx_phys_tlth_55=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_55=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_56=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_56=3;  \
+    config add pb_serdes_lane_rx_phys_dfelth_56=21;  \
+    config add pb_serdes_lane_rx_phys_tlth_56=16;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_56=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_57=23;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_57=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_57=8;  \
+    config add pb_serdes_lane_rx_phys_tlth_57=4;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_57=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_58=17;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_58=3;  \
+    config add pb_serdes_lane_rx_phys_dfelth_58=8;  \
+    config add pb_serdes_lane_rx_phys_tlth_58=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_58=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_59=21;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_59=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_59=14;  \
+    config add pb_serdes_lane_rx_phys_tlth_59=12;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_59=1"
+ 
+# DRAM pre-configurations according to config variables which defines
+# the dram type.
+
+#DDR3
+if $?dram_type_DDR3_SAMSUNG_K4B1G1646E_HCK0_1333 || \
+   $?dram_type_DDR3_SAMSUNG_K4B1G1646E_HCK0_1600 || \
+   $?dram_type_DDR3_MICRON_MT41J64M16_15E || \
+   $?dram_type_DDR3_MICRON_MT41J128M16HA_15E_2G "\
+    config add ext_ram_type=DDR3; \
+    config add ext_ram_columns=1024; \
+    config add ext_ram_banks=8" 
+if $?dram_type_DDR3_MICRON_MT41J128M16HA_15E_2G "\
+  config add ext_ram_total_size=3072"
+if $?dram_type_DDR3_SAMSUNG_K4B1G1646E_HCK0_1333 || \
+   $?dram_type_DDR3_SAMSUNG_K4B1G1646E_HCK0_1600 || \
+   $?dram_type_DDR3_MICRON_MT41J64M16_15E "\
+    config add ext_ram_total_size=1536"
+
+#GDDR3
+if $?dram_type_GDDR3_SAMSUNG_K4J52324QE \
+  "config add ext_ram_type=GDDR3" \
+  "config add ext_ram_columns=512" \
+  "config add ext_ram_banks=8" \
+  "config add ext_ram_total_size=384"
+
+#DDR2
+if $?dram_type_DDR2_MICRON_K4T51163QE_ZC_LF7 \
+  "config add ext_ram_type=DDR2" \
+  "config add ext_ram_columns=1024" \
+  "config add ext_ram_banks=4" \
+  "config add ext_ram_total_size=768"
+   
+if $?dram_type_DDR3_SAMSUNG_K4B1G1646E_HCK0_1600 \
+  "config add ext_ram_ap_bit_pos=10" \
+  "config add ext_ram_burst_size=32" \
+  "config add ext_ram_c_cas_latency=11" \
+  "config add ext_ram_c_wr_latency=8" \
+  "config add ext_ram_t_rc=48750" \
+  "config add ext_ram_t_rfc=110000" \
+  "config add ext_ram_t_ras=35000" \
+  "config add ext_ram_t_faw=40000" \
+  "config add ext_ram_t_rcd_rd=13750" \
+  "config add ext_ram_t_rcd_wr=13750" \
+  "config add ext_ram_t_rrd=7500" \
+  "config add ext_ram_t_ref=3900" \
+  "config add ext_ram_t_rp=13750" \
+  "config add ext_ram_t_wr=15000" \
+  "config add ext_ram_t_wtr=7500" \
+  "config add ext_ram_t_rtp=7500"
+
+if $?dram_type_DDR3_SAMSUNG_K4B1G1646E_HCK0_1333 \
+  "config add ext_ram_ap_bit_pos=10" \
+  "config add ext_ram_burst_size=32" \
+  "config add ext_ram_c_cas_latency=9" \
+  "config add ext_ram_c_wr_latency=8" \
+  "config add ext_ram_t_rc=50000" \
+  "config add ext_ram_t_rfc=110000" \
+  "config add ext_ram_t_ras=36666" \
+  "config add ext_ram_t_faw=45000" \
+  "config add ext_ram_t_rcd_rd=15000" \
+  "config add ext_ram_t_rcd_wr=15000" \
+  "config add ext_ram_t_rrd=8333" \
+  "config add ext_ram_t_ref=3900" \
+  "config add ext_ram_t_rp=15000" \
+  "config add ext_ram_t_wr=15000" \
+  "config add ext_ram_t_wtr=8333" \
+  "config add ext_ram_t_rtp=6666"
+
+if $?dram_type_DDR3_MICRON_MT41J64M16_15E || $?dram_type_DDR3_MICRON_MT41J128M16HA_15E_2G \
+  "config add ext_ram_ap_bit_pos=10" \
+  "config add ext_ram_burst_size=32" \
+  "config add ext_ram_c_cas_latency=9" \
+  "config add ext_ram_c_wr_latency=7" \
+  "config add ext_ram_t_rc=49500" \
+  "config add ext_ram_t_rfc=110000" \
+  "config add ext_ram_t_ras=36000" \
+  "config add ext_ram_t_faw=50000" \
+  "config add ext_ram_t_rcd_rd=13500" \
+  "config add ext_ram_t_rcd_wr=13500" \
+  "config add ext_ram_t_rrd=7500" \
+  "config add ext_ram_t_ref=3900c" \
+  "config add ext_ram_t_rp=13500" \
+  "config add ext_ram_t_wr=15000" \
+  "config add ext_ram_t_wtr=7500" \
+  "config add ext_ram_t_rtp=7500"
+
+# Samsung (K4J52324QE)
+# The following parameters correspond to BC-16 dash, and were tested in
+# dune's lab with BC-14 dash dram working in frequency of 533MHz.
+if $?dram_type_GDDR3_SAMSUNG_K4J52324QE \
+  "config add ext_ram_ap_bit_pos=8" \
+  "config add ext_ram_burst_size=16" \
+  "config add ext_ram_gddr3_mrs0_wr1=0x00000312" \
+  "config add ext_ram_gddr3_emr0_wr1=0x0000109d" \
+  "config add ext_ram_c_cas_latency=9" \
+  "config add ext_ram_c_wr_latency=1" \
+  "config add ext_ram_t_rc_clk=24" \
+  "config add ext_ram_t_rfc_clk=29" \
+  "config add ext_ram_t_ras_clk=16" \
+  "config add ext_ram_t_faw_clk=5" \
+  "config add ext_ram_t_rcd_rd_clk=9" \
+  "config add ext_ram_t_rcd_wr_clk=6" \
+  "config add ext_ram_t_rrd_clk=7" \
+  "config add ext_ram_t_ref=1450" \
+  "config add ext_ram_t_rp_clk=8" \
+  "config add ext_ram_t_wr_clk=8" \
+  "config add ext_ram_t_wtr_clk=4" \
+  "config add ext_ram_t_rtp_clk=4"
+
+if $?dram_type_DDR2_MICRON_K4T51163QE_ZC_LF7 \
+  "config add ext_ram_ap_bit_pos=10" \
+  "config add ext_ram_burst_size=16" \
+  "config add ext_ram_auto_mode=TRUE" \
+  "config add ext_ram_c_cas_latency=6" \
+  "config add ext_ram_c_wr_latency=5" \
+  "config add ext_ram_t_rc=60000" \
+  "config add ext_ram_t_rfc=105000" \
+  "config add ext_ram_t_ras=45000" \
+  "config add ext_ram_t_faw=45000" \
+  "config add ext_ram_t_rcd_rd=15000" \
+  "config add ext_ram_t_rcd_wr=15000" \
+  "config add ext_ram_t_rrd=10000" \
+  "config add ext_ram_t_ref=3900)" \
+  "config add ext_ram_t_rp=15000" \
+  "config add ext_ram_t_wr=15000" \
+  "config add ext_ram_t_wtr=7500" \
+  "config add ext_ram_t_rtp=7500"
+
+
+# If using elk, override relevant parameters:
+if $?pcp_elk "\
+  echo *** OVERRIDING DEFAULT CONFIG WITH ELK CONFIG ***; \
+  config combo_ref_clock=125000; \
+  config pb_serdes_qrtt_max_expected_rate_7=3750000; \
+  config pb_serdes_lane_rate_28=3750000; \
+  config pb_serdes_lane_rate_29=3750000; \
+  config pb_serdes_lane_rate_30=3750000; \
+  config pb_serdes_lane_rate_31=3750000; \
+  config add external_lookup_mal=14; \
+  config add spaui_ipg_dic_mode=MIN; \
+  config add spaui_ipg_size=1; \
+  config add spaui_crc_mode=32b; \
+  config add spaui_preamble_size=0; \
+  config add spaui_preamble_skip_sop=1; \
+  config add spaui_is_double_size_sop_even_only=1; \
+  config add spaui_link_partner_double_size_bus=1"
+
+if $?pcp_elk || $?pcp_oam || $?pcp_dma "\
+  config add streaming_if_multi_port_mode=1; \
+  config add streaming_if_discard_pkt_streaming=0; \
+  config add fabric_ftmh_outlif_extension=IF_MC" \
+else "\
+  config add streaming_if_multi_port_mode=0; \
+  config add streaming_if_discard_pkt_streaming=1;"
+
+# Run sweep pcp on real HW
+if !$?plisim && !$?warmboot "   \
+  sweep pcp"
+  
+# Set synts according to reference clocks
+expr $nif_ref_clock*1000; local synt_nif $?
+expr $combo_ref_clock*1000; local synt_combo $?
+expr $fabric_ref_clock*1000; local synt_fabric $?
+
+# Real HW: Take petra out of reset
+if !$?plisim && !$?warmboot " \
+  gfa_bi utils petra_reset 1; \
+  echo Configure synthesizers:; \
+  echo Fabric: $synt_fabric; gfa_bi utils synt_set 1 $synt_fabric $synt_over; \
+  echo Combo:  $synt_combo;  gfa_bi utils synt_set 2 $synt_combo $synt_over; \
+  echo Nif:    $synt_nif;    gfa_bi utils synt_set 3 $synt_nif $synt_over; \
+  echo Core:   $synt_core;   gfa_bi utils synt_set 4 $synt_core $synt_over; \
+  echo DDR:    $synt_ddr;    gfa_bi utils synt_set 5 $synt_ddr $synt_over; \
+  echo Phy:    $synt_phy;    gfa_bi utils synt_set 10 $synt_phy $synt_over; \
+  gfa_bi utils petra_reset 0"
+  
+dbm soc error
+dbm bcm error
+
+echo "$unit:init soc"
+init soc
+echo "$unit:init soc - Done"
+
+echo "$unit:init bcm"
+init bcm
+
+echo "$unit:init bcm - Done"
+
+if $?warmboot "\
+  echo 'Warmboot: init done'; \
+  echo 'dune.soc: Done.'; \
+  exit"
+
+# Real HW + non using sweep: Init phys
+if !$?plisim " \
+  gfa_bi utils phys"
+
+if !$?no_bcm && !$?diag_disable "\
+  init appl_dpp $slot $nof_devices $diag_cosq_disable;" \
+else "\
+  echo 'Skipping diag_init. In order to run traffic, extra configuration must be performed.'"
+
+# If running BCM library:
+# Start linkscan task and set port linkscan mode.
+if !$?no_bcm && !$?pcp_elk "\
+  linkscan 250000; \
+  linkscan spbm=xe"
+     
+# If using elk, configure  bsp:
+if $?pcp_elk "\
+  echo *** BSP ELK CONFIGURATIONS ***; \
+  gfa_bi elk_init;"
+  
+# If using pcp dma then init dma
+if !$?plisim && $?pcp_dma " \
+  echo *** PCP DMA CONFIGURATIONS ***; \
+  gfa_bi dma_init"
+
+#if $?diag_chassis && !$slot "rcload rc/negev_rpc_master.soc.assi" # Master on slot 0
+#if $?diag_chassis && $slot "rcload rc/negev_rpc_slave.soc.assi"   # Slave on slot 1
+
+echo "dune.soc: Done."
diff --git a/bal_release/3rdparty/bcm-sdk/rc/qax/init.sh b/bal_release/3rdparty/bcm-sdk/rc/qax/init.sh
new file mode 100755
index 0000000..f5b62bf
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/rc/qax/init.sh
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+echo "I am here 4"
+
diff --git a/bal_release/3rdparty/bcm-sdk/rc/qax/qax.soc b/bal_release/3rdparty/bcm-sdk/rc/qax/qax.soc
new file mode 100755
index 0000000..895ae81
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/rc/qax/qax.soc
@@ -0,0 +1,128 @@
+#
+# $Id: qax.soc,v 1.90 2013/08/14 08:32:00 ninash Exp $
+#
+# $Copyright: (c) 2011 Broadcom Corporation
+# All Rights Reserved.$
+#
+
+# Load DRAM tuning properties from local File. RcLoad will not fail if file not found, and will not show errors of missing file.
+#der 0x40 4
+#exit
+
+debug info
+debug appl rcload warn
+debug appl symtab warn
+debug bcm rx,tx,link,attach warn
+debug soc tests warn
+debug soc rx,phy,schan,reg,socmem,dma,mem,miim,mii,intr,counter,ddr warn
+debug soc common err
+debug sys verinet warn
+debug soc physim warn
+
+if $?QAX \
+    'rcload bcm88470_board.soc'
+
+if $?QUX \
+    'rcload bcm88270_board.soc'
+
+# Load DRAM tuning properties from local File. RcLoad will not fail if file not found, and will not show errors of missing file.
+set RCError=off
+debug appl shell warn
+if $?QAX \
+    'rcload /home/negev/bcm88470_dram_tune.soc'
+if $?QUX \
+    'rcload /home/negev/bcm88270_dram_tune.soc'
+
+debug appl shell =
+set RCError=on
+
+set RCError=off
+rcload combo28_dram.soc
+set RCError=on
+
+#Set fabric connect mode as FE for multi FAP system
+if $?diag_chassis " \
+   config add fabric_connect_mode.BCM88470=FE"
+
+# Set modid:
+# If diag_chassis is enabled (two line cards), and 'slot' is defined (slot is defined only when
+# working without a management card - set modid to be 'slot'
+# Otherwise (single line card, or management card), set modid to be 0 for unit 0, and 1 for unit != 0
+if $?diag_chassis && $?slot "\
+  local modid $slot" \
+else "\
+  local modid $unit"
+expr $modid==1; if $? "local modid 2"
+
+if $?module_id " \
+  local modid $module_id"
+
+echo "$unit: modid=$modid"
+
+# Set base_modid:
+# Id base_module_id is set, then set base_modid to have base_module_id value.
+# Otherwise, set base_modid to be 0.
+if $?base_module_id " \
+  local base_modid $base_module_id" \
+else " \
+  local base_modid 0"
+
+expr $base_modid > 0
+if $? " \
+  echo '$unit: base_modid=$base_modid'"
+
+if $?diag_chassis " \
+  local nof_devices 2" \
+else "\
+  local nof_devices 1"
+
+if $?n_devices " \
+  local nof_devices $n_devices"
+
+expr $nof_devices > 1
+if $? " \
+  echo '$unit: nof_devices=$nof_devices'"
+
+if $?mng_cpu " \
+  echo '$unit:management card - polling is set on'; \
+  config add polled_irq_mode.BCM88675=1; \
+  config add schan_intr_enable.BCM88675=0; \
+  config add tdma_intr_enable.BCM88675=0; \
+  config add tslam_intr_enable.BCM88675=0; \
+  config add miim_intr_enable.BCM88675=0; "
+
+#Counters unavailable in cmodel
+if $?cmodel " \
+  config add counter_engine_sampling_interval=0;"
+
+#default values in a case which these parameters are not exist
+if !$?diag_cosq_disable "\
+  local diag_cosq_disable 0"
+if !$?warmboot "\
+  local warmboot 0"
+if !$?diag_disable "\
+  local diag_disable 0"
+if !$?diag_no_itmh_prog_mode "\
+  local diag_no_itmh_prog_mode 0"
+if !$?l2_mode "\
+  local l2_mode 0"
+
+#Disable interrupts in cmodel
+if $?cmodel "\
+  local no_intr 1" \
+else "\
+  local no_intr 0"
+
+if $?QUX "\
+    local no_elk 1" \
+else "\
+    local no_elk 0"
+
+INIT_DNX ModID=$modid NofDevices=$nof_devices CosqDisable=$diag_cosq_disable NoAppl=$diag_disable Warmboot=$warmboot NoRxLos=1 NoLinkscan=0 NoElkDevice=$no_elk NoElkAppl=0 NoItmhProgMode=$diag_no_itmh_prog_mode L2Mode=$l2_mode NoIntr=$no_intr
+
+#echo "performing force forward to sysport 1"
+#mod IHP_PINFO_LLR 0 256 DEFAULT_CPU_TRAP_CODE=200 DEFAULT_ACTION_PROFILE_FWD=7
+#mod IHB_FWD_ACT_PROFILE 200 1 FWD_ACT_DESTINATION=0x10001 FWD_ACT_DESTINATION_OVERWRITE=1
+#echo "performing credit flush from NIF to EGQ"
+#m NBIH_TX_EGRESS_CREDITS_DEBUG_PM TX_FLUSH_EGRESS_PORT_0_MLF_0_QMLF_N=1 TX_FLUSH_EGRESS_PORT_0_MLF_1_QMLF_N=1 TX_FLUSH_EGRESS_PORT_0_MLF_2_QMLF_N=1 TX_FLUSH_EGRESS_PORT_0_MLF_3_QMLF_N=1
+echo "qax.soc: Done."
diff --git a/bal_release/3rdparty/bcm-sdk/rc/qax/rc.soc b/bal_release/3rdparty/bcm-sdk/rc/qax/rc.soc
new file mode 100755
index 0000000..e766e99
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/rc/qax/rc.soc
@@ -0,0 +1,1792 @@
+# $Id: rc.soc,v 1.192 2013/07/17 22:13:43 dkelley Exp $
+# $Copyright: (c) 1998-2001 Broadcom Corp.
+# All Rights Reserved.$
+#
+# Initialization RC (run commands) file
+#
+#       These are default commands that are read and executed by default
+#       when BCM boots up.  Typically this file is called rc.soc and resides
+#       in the flash filesystem, NVRAM, or disk.
+#
+# Board Configuration Setting
+#
+#       This file uses configuration properties to know on which board
+#       it is running.  Currently one of following settings must be made:
+#
+#       BCM95670K8          config add herc8=1
+#       BCM95690K24         config add draco_b2b=1
+#       BCM95690K24S        config add draco_stk=1
+#       BCM95690R24         config add galahad=1
+#       BCM95690R24S        config add merlin=1
+#       BCM95690R48S        config add lancelot=1
+#       BCM95691K12         config add draco_k12=1
+#       White Knight        config add white_knight=1 (not shipping)
+#       Black Knight        config add black_knight=1 (not shipping)
+#       BCM95673K2S         config add twolynx=1
+#       BCM95673R8          config add herculynx=1
+#       BCM95673R24S        config add lynxalittle=1
+#       BCM95673R48S        config add lynxalot=1
+#       BCM95695P24SX_10    config add guenevere=1
+#       BCM95650K24         config add magnum=1 (automatic for 5650L)
+#       BCM95675            config add herc8_15=1
+#       BCM95650R24         config add tuc24_ref=1
+#       BCM95695P48LM       config add lm48p=1
+#       BCM95695P48LM-10    config add lm48p_B=1
+#       BCM956504P48LM-10   config add lm48p_C=1
+#       BCM956504P48LM-20   config add lm48p_C=1
+#       BCM956504P48LM-50   config add lm48p_D=1
+#       BCM956504P48POEREF  config add fbpoe=1
+#       BCM956504P24REF P0  config add fb24=1
+#       BCM956504P24    P0  config add fb24=1
+#       BCM956102P48        config add felix48=1
+#       BCM953300P24REF     config add mirage24=1
+#       BCM956800K20C       config add bradley_1g=1
+#       BCM956700K16        config add humv=1
+#       BCM956800K20        config add bradley=1
+#       BCM956580K16        config add goldwing=1
+#       BCM956314P24REF     config add bcm56314p24ref=1
+#       BCM956024P48REF     config add BCM956024P48REF=1
+#       BCM956224P48REF     config add BCM956224P48REF=1
+#       BCM956224R50T       config add BCM956224R50T=1
+#       BCM956024R50T       config add BCM956024R50T=1
+#       BCM56820K24XG       config add BCM56820K24XG=1
+#       BCM953314R24GS      config add BCM953314R24GS=1
+#       BCM953314K24        config add BCM953314K24=1
+#       BCM956820R24XG      config add BCM956820R24XG=1
+#       BCM956160R          config add bcm956160r=1
+
+if $?BCM56146_A0 \
+    'local BCM56146 1'
+
+if $?BCM56147_A0 \
+    'local BCM56147 1'
+
+
+if $?1 "echo rc: arguments not supported; exit"
+if !$?unit "echo rc: no current unit; exit"
+
+echo "rc: unit $unit device $devname"
+local quiet no
+local echo echo
+local rcdone \$rc$unit
+if !"expr $rcdone + 0" "local echo noecho; local quiet yes"
+
+# Set convenience local variables
+
+# simulation related
+#if $?plisim \
+#       "local no_bcm 1"
+if $?quickturn || $?plisim \
+	"local simulator 1"
+
+if $?simulator \
+    'echo -n "Chip init starts at: ";date'
+
+# board related
+if $?galahad \
+	"local draco_b2b 1"
+if $?black_knight || $?white_knight || $?merlin \
+	"local draco_herc4 1"
+
+#if $?QUX_A0 \
+#    'echo blablabla;der 0x40 4 ; exit'
+
+if $?FLAIR_A0 \
+    'echo blablabla;der 0x40 4 ; exit'
+
+if $?BCM88750_A0 || $?BCM88750_B0 || $?BCM88753_A0 || $?BCM88753_B0 || $?BCM88752_A0 || $?BCM88752_B0 ||  $?BCM88755_B0 || $?BCM88754_A0 || $?BCM88770_A1 || $?BCM88773_A1 || $?BCM88774_A1 || $?BCM88775_A1 || $?BCM88776_A1 || $?BCM88777_A1 || $?BCM88950_A0 || $?BCM88950_A1 || $?BCM88953_A1 || $?BCM88954_A1 || $?BCM88955_A1 || $?BCM88956_A1 || $?BCM88952_A0 || $?BCM88952_A1 || $?BCM88772_A1 \
+    'rcload dfe.soc ; exit'
+
+if $?BCM88790_A0 \
+    'rcload dnxf.soc ; exit'
+
+if $?ARAD_A0 || $?ARAD_B0 || $?ARAD_B1 || $?ARADPLUS_A0 || $?BCM88650_A0 || $?BCM88650_B0 || $?BCM88650_B1 || $?BCM88652_A0 || $?BCM88652_B0 || $?BCM88350_B1 || $?BCM88351_B1 || \
+   $?BCM88450_B1 || $?BCM88451_B1 || $?BCM88550_B1 || $?BCM88551_B1 || $?BCM88552_B1 || $?BCM88651_B1 || $?BCM88654_B1 || $?BCM88660_A0 || $?BCM88360_A0 || $?BCM88361_A0 || $?BCM88363_A0 ||\
+   $?BCM88460_A0 || $?BCM88461_A0 || $?BCM88560_A0 || $?BCM88561_A0 || $?BCM88562_A0 || $?BCM88661_A0 || $?BCM88664_A0  \
+    'rcload arad.soc ; exit'
+
+if $?BCM83207_A0 \
+    'rcload samar.soc ; exit'
+if $?BCM83208_A0 \
+    'rcload sinai.soc ; exit'
+
+if $?QAX_A0 || $?BCM88470_A0 || $?BCM88471_A0 || $?BCM88473_A0 || $?BCM88474_A0 || $?BCM88474H_A0 || $?BCM88476_A0 || $?BCM88477_A0 || \
+   $?QAX_B0 || $?BCM88470_B0 || $?BCM88471_B0 || $?BCM88473_B0 || $?BCM88474_B0 || $?BCM88474H_B0 || $?BCM88476_B0 || $?BCM88477_B0 \
+    'setenv QAX 1'
+    
+if $?QUX_A0 || $?BCM88270_A0 \
+    'setenv QUX 1'
+
+if $?JERICHO_A0 ||  $?BCM88670_A0 || $?BCM88671_A0 || $?BCM88671M_A0 || $?BCM88672_A0 || $?BCM88673_A0 || $?BCM88674_A0 || $?BCM88675_A0 || $?BCM88675M_A0 || $?BCM88676_A0 || $?BCM88676M_A0 || $?BCM88677_A0 || $?BCM88678_A0 || $?BCM88679_A0 || \
+   $?JERICHO_A1 ||  $?BCM88670_A1 || $?BCM88671_A1 || $?BCM88671M_A1 || $?BCM88672_A1 || $?BCM88673_A1 || $?BCM88674_A1 || $?BCM88675_A1 || $?BCM88675M_A1 || $?BCM88676_A1 || $?BCM88676M_A1 || $?BCM88677_A1 || $?BCM88678_A1 || $?BCM88679_A1 || \
+   $?QMX_A0     ||  $?BCM88370_A0 || $?BCM88371_A0 || $?BCM88371M_A0 || $?BCM88375_A0 || $?BCM88376_A0 || $?BCM88376M_A0 || $?BCM88377_A0 || $?BCM88378_A0 || $?BCM88379_A0 || \
+   $?QMX_A1     ||  $?BCM88370_A1 || $?BCM88371_A1 || $?BCM88371M_A1 || $?BCM88375_A1 || $?BCM88376_A1 || $?BCM88376M_A1 || $?BCM88377_A1 || $?BCM88378_A1 || $?BCM88379_A1 || \
+   $?JERICHO_B0 ||  $?BCM88670_B0 || $?BCM88671_B0 || $?BCM88671M_B0 || $?BCM88672_B0 || $?BCM88673_B0 || $?BCM88674_B0 || $?BCM88675_B0 || $?BCM88675M_B0 || $?BCM88676_B0 || $?BCM88676M_B0 || $?BCM88677_B0 || $?BCM88678_B0 || $?BCM88679_B0 || $?BCM88680_A0 || \
+   $?QMX_B0     ||  $?BCM88370_B0 || $?BCM88371_B0 || $?BCM88371M_B0 || $?BCM88375_B0 || $?BCM88376_B0 || $?BCM88376M_B0 || $?BCM88377_B0 || $?BCM88378_B0 || $?BCM88379_B0 || $?BCM88379_A1 || \
+   $?JERPLUS    ||  $?BCM88680_A0 ||  $?BCM88681_A0 ||  $?BCM88682_A0 || $?BCM88683_A0 ||  $?BCM88380_A0 ||  $?BCM88381_A0 \
+    'rcload jer.soc ; exit'
+
+if $?BCM88690_A0  \
+    'rcload dnx.soc ; exit'
+
+if $?QAX || $?QUX\
+    'rcload qax.soc ; rcload rpc.soc ;  exit'
+
+
+if $?BCM88202_A0 || $?ARDON_A0 || $?BCM88202_A1 || $?ARDON_A1 || $?BCM88202_A2 || $?ARDON_A2\
+    'rcload atmf.soc ; exit'
+
+if $?ACP \
+    'exit'
+
+if $?BCM88690_A0\
+    'exit'
+      
+if !"expr $pcidev + 0 == 0x5650" \
+	"local magnum 1"
+if $?drac || $?drac15 \
+	"local drac_any 1"
+if $?lynx || $?lynx15 \
+	"local lynx_any 1"
+if $?tucana || $?magnum \
+	"local tucana_any 1"
+if $?herc || $?herc15 \
+	"local herc_any 1"
+if $?firebolt || $?firebolt2 || $?helix || \
+   $?felix || $?helix15 || $?felix15 || $?raptor || $?raven || $?hawkeye\
+	"local firebolt_any 1"
+if !"expr $pcidev + 0 == 0xb501" \
+	"local firebolt_10x4 1"
+if $?easyrider \
+	"local easyrider_any 1"
+if !"expr $pcidev + 0 == 0xb602" \
+	"local easyrider_1x1 1"
+if $?bradley || $?humv || $?goldwing \
+	"local bradley_any 1"
+if $?drac_any || $?lynx_any || $?tucana_any \
+	"local xgs12_switch 1"
+if $?firebolt_any || $?easyrider_any || $?bradley_any \
+	"local xgs3_switch 1"
+if $?xgs12_switch || $?xgs3_switch \
+	"local xgs_switch 1"
+if $?herc_any \
+	"local xgs_fabric 1"
+if $?xgs_fabric || $?xgs_switch \
+	"local xgs 1"
+if !$?xgs \
+	"local strata 1"
+if $?strata && !$?gsl \
+	"local PBMP_ALL 0x0bffffff"
+if $?strata && $?gsl \
+	"local PBMP_ALL 0x080000ff"
+if $?BCM56214_A0 || $?BCM56014_A0 || $?BCM56215_A0 || \
+   $?BCM56214_A1 || $?BCM56014_A1 || $?BCM56215_A1 && \
+   !$?BCM956024P48REF \
+	"local rap24_ref 1"
+
+if $?BCM5655_A0 || $?BCM5655_B0 \
+        "local tucana_nohg 1"
+
+if $?BCM956024P48REF || $?BCM956224P48REF || $?BCM956024R50T || \
+   $?BCM956224R50T \
+        "local raven_eb_48p 1"
+
+if $?BCM953314R24GS \
+        "local hawkeye_p24 1"
+
+if $?BCM953314K24 \
+        "local hawkeye_k24 1"
+
+if $?firebolt_any && $?lm48p || $?lm48p_D \
+        "config add lmfb48=1"
+
+# Set software's wait for S-Channel response to 3 seconds for QuickTurn
+# (Recommend at least 10 seconds if the ARL is 100% busy with inserts.)
+if $?quickturn	"stimeout 3000000"
+if $?plisim	"stimeout 60000000"
+
+# Direct phy led programming: 5464 activity led becomes link/activity
+if $?drac_any && $?lancelot || $?lynxalot || $?guenevere \
+	"config add phy_led_ctrl=0x18"
+
+# Shutdown threads if system is already running
+if $?triumph3 \
+	"ibodSync off"
+counter off
+linkscan off
+if $?feature_arl_hashed && !$?simulator \
+        "l2mode off"
+if $?feature_ces && $?BCM56440_A0 \
+        "ces off"
+
+# Test on-chip memory before initializing
+#if !$?simulator "init soc; bist l3 arl cbp"
+init soc
+
+# Initialize miscellaneous chip registers
+init misc
+
+# Initialize external TCAM if necessary
+# NOTE : tcam is initialized during "init misc" unless 
+#        tcam_reset_toggle = 1 is configured
+if "expr $rcdone + 0" && !"expr $tcam_reset_toggle + 0" \
+        "dispatch attach 0 esw 0"
+if !"expr $tcam_reset_toggle + 0" "muxsel 0; muxsel 0x80"
+if !"expr $tcam_reset_toggle + 0" "init tcam; $echo rc: TCAM initialized"
+
+# Initialize the StrataSwitch MMU registers
+init mmu
+if $?katana2 \
+   kt2config.soc
+
+
+# Uncomment to turn off Single-Bit Error reporting on 5670
+#if $?herc "m mmu_intcntl pp_sbe_en=0"
+
+# Initialize Cell Free Address Pool
+# NOTE: this should NOT be done unless chip is known to have bad CFAP
+# memory entries that need to be mapped out.
+if $?cfap_tests "$echo rc: Initializing CFAP; cfapinit"
+
+$echo rc: MMU initialized
+
+#
+# Load uKernel
+#
+
+# Pick default FW names if not set already by config
+if !$?fw_core_0 \
+    'local fw_core_0 ${fw_prefix}_0_bfd_bhh.srec; \
+     if $?greyhound || $?hurricane2 || $?hurricane3 "local fw_core_0 ${fw_prefix}_0_ptpfull.srec"; \
+     if $?caladan3 "local fw_core_0 ${fw_prefix}_0.srec"; \
+     if $?helix4 && !$?feature_bhh "local fw_core_0 ${fw_prefix}_0_bfd.srec"; \
+     if $?helix4 && $?feature_bhh "local fw_core_0 ${fw_prefix}_0_bfd_bhh.srec"; \
+     if $?tomahawk && !$?feature_bhh "local fw_core_0 ${fw_prefix}_0_bfd.srec"; \
+     if $?tomahawk_plus && !$?feature_bhh "local fw_core_0 ${fw_prefix}_0_bfd.srec"; \
+     if $?trident2plus && !$?feature_bhh "local fw_core_0 ${fw_prefix}_0_bfd.srec"; \
+    '
+
+if !$?fw_core_1 \
+   'local fw_core_1 ${fw_prefix}_1_ptpfull.srec; \
+    if $?caladan3 "local fw_core_1 ${fw_prefix}_1_bs.srec"; \
+   '
+
+if !$?fw_core_2 \
+   "local fw_core_2 ${fw_prefix}_2_eth_lmdm.srec"
+
+# Load the firmwares
+if $?feature_cmicm && !$?rcpu_only && !$ihost_mode && !$?feature_iproc \
+    "mcsload 0 ${fw_core_0} InitMCS=true; \
+     mcsload 1 ${fw_core_1};"
+
+if $?hurricane2 \
+   "mcsload 0 ${fw_core_0} InitMCS=true;"
+
+if $?feature_iproc && !$?hurricane2 && !$?hurricane3 && !$?rcpu_only && !$?feature_uc_mhost && !$ihost_mode\
+    "mcsload 0 ${fw_core_0} InitMCS=true TwoStage=true TwoStageAddr=0x60000000;\
+     mcsload 1 ${fw_core_1} TwoStage=true TwoStageAddr=0x6002c000;"
+
+if $?feature_iproc && !$?rcpu_only && $?feature_uc_mhost && $?num_ucs\
+    'if !"expr $num_ucs > 0" "mcsload 0 ${fw_core_0} InitMCS=true"; \
+     if !"expr $num_ucs > 1" "mcsload 1 ${fw_core_1}"; \
+     if !"expr $num_ucs > 2" "mcsload 2 ${fw_core_2}";'
+
+#
+# Init CLI and BCM API
+#
+# This must be done after the raw register writes to avoid having state
+# clobbered.  NOTE: Tables are cleared by "init bcm" below.  If
+# table modifications are required, put them after "init bcm".  Some
+# registers might also be affected.
+#
+
+if !$?no_bcm \
+	"init bcm; \
+	 $echo rc: BCM driver initialized"
+
+if $?no_bcm \
+	"$echo rc: *** NOT initializing BCM driver ***"
+
+if $?no_bcm && $?strata \
+    'write vtable 0 1 VLAN_TAG=0,PORT_BITMAP=0,UT_PORT_BITMAP=0; \
+     insert vtable VLAN_TAG=1,PORT_BITMAP=$PBMP_ALL,UT_PORT_BITMAP=$PBMP_ALL; \
+     local pv \
+         VLAN_TAG=1,SP_ST=3,PORT_BITMAP=$PBMP_ALL,UT_PORT_BITMAP=$PBMP_ALL; \
+	 write ptable 0 32 PTYPE=0; \
+	 if !$?gsl "write ptable 0 24 $pv,PTYPE=1"; \
+	 if !$?gsl "write ptable 24 2 $pv,PTYPE=2"; \
+	 if $?gsl  "write ptable 0 8 $pv,PTYPE=2"; \
+	 write ptable 27 1 $pv,PTYPE=3; \
+     local pv'
+
+# Turn on mirroring of hardware ARL operations into software ARL table.
+if $?feature_arl_sorted \
+	"arlmode intr_dma; \
+	 $echo rc: ARL DMA shadowing enabled"
+
+if $?feature_arl_hashed && !$?simulator && !$?rcpu_only \
+	"l2mode interval=3000000; \
+	 $echo rc: L2 Table shadowing enabled"
+
+# If running BCM library, start linkscan task and set port modes
+
+if !$?no_bcm && !$?rcpu_only \
+	"linkscan 250000; \
+	 port fe,ge linkscan=on autoneg=on \
+		speed=0 fullduplex=true txpause=true rxpause=true; \
+	 port st linkscan=on txpause=false rxpause=false; \
+         port xe,ce linkscan=on autoneg=off \
+                speed=0 fullduplex=true txpause=true rxpause=true; \
+         port hg linkscan=on fullduplex=true txpause=false rxpause=false; \
+	 $echo rc: Port modes initialized"
+
+if !$?no_bcm && $?rcpu_only \
+	"linkscan 250000; \
+	 port e linkscan=on; \
+	 port st linkscan=on; \
+     port xe linkscan=on; \
+	 $echo rc: Port modes initialized"
+
+if !$?no_bcm && $?shadow \
+     "port il linkscan=on; \
+	  $echo rc: Interlaken Port mode initialized"
+
+# Selectively re-enable Auto Negotiation based on config port_force_an_list.
+#if $?port_force_an_list \
+#    "port $port_force_an_list autoneg=on"
+
+# No spanning tree is running, so put ports all in the forwarding state
+# stp support not available for shadow device.
+
+if !$?no_bcm && !$?shadow \
+	"stg stp 1 all forward"
+
+# Start counter task unless already started by "init bcm" above.
+if $?plisim "local dma false"
+if !$?plisim "local dma true"
+if $?device_eb_vli "local dma false"
+if $?no_bcm && !$?rcpu_only\
+	"counter Interval=1000 Pbm=all Dma=$dma; \
+	 $echo rc: Counter collection enabled"
+if $?rcpu_only \
+	"counter Interval=2000000 Pbm=all Dma=false; \
+	 $echo rc: Counter collection enabled"
+
+# Resynchronize the saved values kept by the 'show counter' command.
+if !$?simulator \
+    "counter sync"
+
+# By default, dump data of packets that go to CPU.
+if !$?testinit \
+	"pw report +raw"
+
+# Default LED processor program for various SDKs and reference designs.
+# Source code can be found in $SDK/led/examples.
+
+if !$?p48 "local ledcode '\
+ E0 28 60 7F 67 2F 67 6B 06 7F 80 D2 1A 74 01 12 \
+ 7E 85 05 D2 0F 71 19 52 00 12 7D 85 05 D2 1F 71 \
+ 23 52 00 12 7C 85 05 D2 05 71 2D 52 00 3A 68 32 \
+ 00 97 75 3B 12 A0 FE 7F 02 0A 50 32 01 97 75 47 \
+ 12 BA FE 7F 02 0A 50 12 BA FE 7F 95 75 59 85 12 \
+ A0 FE 7F 95 75 A8 85 77 9A 12 A0 FE 7F 95 75 63 \
+ 85 77 A1 16 7C DA 02 71 A1 77 A8 32 05 97 71 76 \
+ 06 7D D2 01 71 9A 06 7F 67 93 75 9A 32 02 97 71 \
+ 9A 32 03 97 71 A8 32 04 97 75 A1 06 7E D2 07 71 \
+ A1 77 A8 12 80 F8 15 1A 00 57 32 0E 87 32 0E 87 \
+ 57 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 57'"		# sdk5605.hex
+
+if $?p48 "local ledcode '\
+ E0 28 60 7F 67 43 67 3C 67 35 67 2F 06 7F 80 D2 \
+ 18 74 01 28 60 7F 67 9B 67 89 67 BF 67 83 67 3C \
+ 67 73 67 68 67 5D 06 7F 80 D2 1A 74 13 3A 70 67 \
+ AD 71 C3 77 BF 32 03 97 71 C3 77 BF 32 05 97 71 \
+ C3 77 BF 12 BA FE 7F 32 01 97 75 4F 02 06 50 32 \
+ 00 97 75 57 02 06 50 95 75 C3 85 77 BF 67 AD 75 \
+ BF 32 04 97 71 C3 77 BF 67 AD 75 BF 32 03 97 71 \
+ C3 77 BF 67 AD 75 BF 32 03 97 71 BF 32 04 97 71 \
+ BF 77 C3 67 B6 71 C3 77 BF 12 A0 FE 7F 32 00 97 \
+ 75 95 02 06 50 95 75 C3 85 77 BF 12 BA FE 7F 32 \
+ 01 97 75 A7 02 06 50 95 75 C3 85 77 BF 06 7F 12 \
+ 80 F8 15 1A 00 57 06 7F 12 80 F8 15 1A 07 57 32 \
+ 0F 87 57 32 0E 87 57'"					# p48.hex
+
+if $?herc && !$?black_knight "local ledcode '\
+ 02 01 67 36 29 32 08 D7 87 32 07 D7 87 32 01 D7 \
+ 87 32 00 D7 87 80 D2 09 74 02 86 7F 06 7F C2 07 \
+ 74 24 86 7E 16 7E CA 07 E0 17 0D 12 08 98 27 D7 \
+ 87 91 74 2D 3A 28 10 DA 07 75 3E FA 02 57 EA 06 \
+ 57'"							# sdk5670.hex
+
+if $?herc && $?black_knight "local ledcode '\
+ 2A 03 32 08 D7 87 32 07 D7 87 32 01 D7 87 32 00 \
+ D7 87 2A 06 32 08 D7 87 32 07 D7 87 32 01 D7 87 \
+ 32 00 D7 87 3A 08'"					# knigget.hex
+
+if $?drac_any "local ledcode '\
+ E0 28 60 C3 67 4E 67 8A 06 C3 80 D2 0C 74 01 28 \
+ 60 C3 32 00 D7 87 32 01 D7 87 32 07 D7 87 32 08 \
+ D7 87 32 0F 87 32 0F 87 32 0F 87 32 0F 87 12 C2 \
+ 85 05 D2 0F 71 38 52 00 12 C1 85 05 D2 1F 71 42 \
+ 52 00 12 C0 85 05 D2 05 71 4C 52 00 3A 38 32 00 \
+ 97 75 5A 12 A0 FE C3 02 0A 50 32 01 97 75 66 12 \
+ AD FE C3 02 0A 50 12 AD FE C3 95 75 78 85 12 A0 \
+ FE C3 95 75 C0 85 77 B9 12 A0 FE C3 95 75 82 85 \
+ 77 C7 16 C0 DA 02 71 C7 77 C0 32 05 97 71 9A 32 \
+ 02 97 71 B9 06 C1 D2 01 71 B9 06 C3 67 B2 75 B9 \
+ 32 03 97 71 C0 32 04 97 75 C7 06 C2 D2 07 71 C7 \
+ 77 C0 12 80 F8 15 1A 00 57 32 0E 87 32 0E 87 57 \
+ 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 57'"		# sdk5690.hex
+
+if $?draco_k12 "local ledcode '\
+ 02 0B A2 01 28 A2 01 60 C3 67 32 67 6E 06 C3 90 \
+ 75 02 12 C2 85 05 D2 0F 71 1C 52 00 12 C1 85 05 \
+ D2 1F 71 26 52 00 12 C0 85 05 D2 05 71 30 52 00 \
+ 3A 30 32 00 97 75 3E 12 A0 FE C3 02 0A 50 32 01 \
+ 97 75 4A 12 AC FE C3 02 0A 50 12 AC FE C3 95 75 \
+ 5C 85 12 A0 FE C3 95 75 A6 85 77 9F 12 A0 FE C3 \
+ 95 75 66 85 77 AD 16 C0 DA 02 71 AD 77 A6 32 05 \
+ 97 71 7E 32 02 97 71 9F 06 C1 D2 01 71 9F 06 C3 \
+ 67 96 75 9F 32 03 97 71 A6 32 04 97 75 AD 06 C2 \
+ D2 07 71 AD 77 A6 12 80 A2 01 F8 15 1A 00 57 32 \
+ 0E 87 32 0E 87 57 32 0E 87 32 0F 87 57 32 0F 87 \
+ 32 0E 87 57'"						# k12-5690.hex
+
+if $?herc && $?white_knight "local ledcode '\
+ 2A 03 67 0A 2A 06 67 0A 3A 08 32 08 D7 87 32 07 \
+ D7 87 32 01 D7 87 32 00 D7 87 57'"			# wk5670.hex
+
+if $?herc && $?merlin "local ledcode '\
+ 2A 03 67 0A 2A 06 67 0A 3A 08 32 08 D7 87 32 00 \
+ D7 87 32 01 D7 87 32 07 D7 87 57'"			# merlin5670.hex
+
+if $?herc && $?lancelot "local ledcode '\
+ 2A 05 67 12 2A 06 67 12 2A 03 67 12 2A 04 67 12 \
+ 3A 10 32 08 D7 87 32 00 D7 87 32 01 D7 87 32 07 \
+ D7 87 57'"						# lancelot.hex
+
+if $?xgs_fabric && $?guenevere "local ledcode '\
+ 2A 04 67 0A 2A 05 67 0A 3A 04 32 07 D7 87 32 00 \
+ 32 01 B7 D7 87 57'"                                    # guenevere5670.hex
+
+if $?drac_any && $?white_knight "local ledcode '\
+ E0 28 60 C3 67 2f 67 6B 06 C3 80 D2 0C 74 01 12 \
+ C2 85 05 D2 0F 71 19 52 00 12 C1 85 05 D2 1F 71 \
+ 23 52 00 12 C0 85 05 D2 05 71 2D 52 00 3A 30 32 \
+ 00 97 75 3B 12 A0 FE C3 02 0A 50 32 01 97 75 47 \
+ 12 AC FE C3 02 0A 50 12 AC FE C3 95 75 59 85 12 \
+ A0 FE C3 95 75 A8 85 77 9A 12 A0 FE C3 95 75 63 \
+ 85 77 A1 16 C0 DA 02 71 A1 77 A8 32 05 97 71 7B \
+ 32 02 97 71 9A 06 C1 D2 01 71 9A 06 C3 67 93 75 \
+ 9A 32 03 97 71 A8 32 04 97 75 A1 06 C2 D2 07 71 \
+ A1 77 A8 12 80 F8 15 1A 00 57 32 0E 87 32 0E 87 \
+ 57 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 57'"		# wk5690.hex
+
+if $?drac_any && $?merlin "local ledcode '\
+ E0 28 60 C3 67 2F 67 6B 06 C3 80 D2 0C 74 01 12 \
+ C2 85 05 D2 0F 71 19 52 00 12 C1 85 05 D2 1F 71 \
+ 23 52 00 12 C0 85 05 D2 05 71 2D 52 00 3A 30 32 \
+ 00 97 75 3B 12 A0 FE C3 02 0A 50 32 01 97 75 47 \
+ 12 AC FE C3 02 0A 50 12 AC FE C3 95 75 59 85 12 \
+ A0 FE C3 95 75 A8 85 77 9A 12 A0 FE C3 95 75 63 \
+ 85 77 A1 16 C0 DA 02 71 A1 77 A8 32 05 97 71 7B \
+ 32 02 97 71 9A 06 C1 D2 01 71 9A 06 C3 67 93 75 \
+ 9A 32 03 97 71 A8 32 04 97 75 A1 06 C2 D2 07 71 \
+ A1 77 A8 12 80 F8 15 1A 00 57 32 0E 87 32 0E 87 \
+ 57 32 0F 87 32 0E 87 57 32 0E 87 32 0F 87 57'"		# merlin5690.hex
+
+if $?drac_any && $?galahad "local ledcode '\
+ E0 28 60 C3 67 2F 67 6B 06 C3 80 D2 0C 74 01 12 \
+ C2 85 05 D2 0F 71 19 52 00 12 C1 85 05 D2 1F 71 \
+ 23 52 00 12 C0 85 05 D2 05 71 2D 52 00 3A 30 32 \
+ 00 97 75 3B 12 A0 FE C3 02 0A 50 32 01 97 75 47 \
+ 12 AC FE C3 02 0A 50 12 AC FE C3 95 75 59 85 12 \
+ A0 FE C3 95 75 A8 85 77 9A 12 A0 FE C3 95 75 63 \
+ 85 77 A1 16 C0 DA 02 71 A1 77 A8 32 05 97 71 7B \
+ 32 02 97 71 9A 06 C1 D2 01 71 9A 06 C3 67 93 75 \
+ 9A 32 03 97 71 A8 32 04 97 75 A1 06 C2 D2 07 71 \
+ A1 77 A8 12 80 F8 15 1A 00 57 32 0E 87 32 0E 87 \
+ 57 32 0F 87 32 0E 87 57 32 0E 87 32 0F 87 57'"		# galahad.hex
+
+if $?drac_any && $?lm "local ledcode '\
+E0 28 60 C3 67 2D 06 C3 80 D2 0C 74 01 12 C2 85 \
+05 D2 0F 71 17 52 00 12 C1 85 05 D2 1F 71 21 52 \
+00 12 C0 85 05 D2 05 71 2B 52 00 3A 18 32 00 97 \
+75 39 12 A0 FE C3 02 0A 50 32 01 97 75 45 12 AC \
+FE C3 02 0A 50 12 AC FE C3 95 75 5F 85 12 A0 FE \
+C3 95 71 5C 16 C0 DA 02 71 A6 77 B4 85 77 77 12 \
+A0 FE C3 95 75 6F 85 16 C0 DA 02 71 A6 77 AD 16 \
+C0 DA 02 71 AD 77 B4 32 05 97 71 82 06 C1 D2 01 \
+71 A6 06 C3 67 9F 75 A6 32 02 97 71 A6 32 03 97 \
+71 B4 32 04 97 75 AD 06 C2 D2 07 71 AD 77 B4 12 \
+80 F8 15 1A 00 57 32 0E 87 32 0E 87 57 32 0E 87 \
+32 0F 87 57 32 0F 87 32 0E 87 57'"      # lm5690.hex
+
+if $?twolynx "local ledcode '\
+ 2A 01 67 0A 2A 00 67 0A 3A 08 32 08 D7 87 32 00 \
+ D7 87 32 01 D7 87 32 07 D7 87 57'"                 # twolynx.hex
+
+if $?lynx_any && $?herculynx || $?lynxalot || $?lm || $?guenevere \
+	"local ledcode '\
+12 C0 85 05 D2 03 71 0A 52 00 2A 00 67 10 3A 04 \
+32 08 D7 87 06 C0 D2 01 71 22 32 0F 87 32 0F 87 \
+77 2A 32 00 D7 87 32 01 D7 87 32 07 D7 87 57'"      # herculynx.hex
+
+if $?tucana && !$?magnum "local ledcode '\
+ E0 67 23 D2 18 74 01 02 20 67 23 D2 38 74 09 02 \
+ 18 67 23 D2 1C 74 11 E9 02 80 45 80 81 DA 0D 74 \
+ 1A 3A 68 28 60 E3 67 4A 67 36 06 E4 30 87 06 E5 \
+ 30 87 06 E3 80 57 32 00 97 71 45 32 01 97 71 45 \
+ 02 0F 60 E5 57 02 0E 60 E5 57 06 E3 12 A0 F8 15 \
+ 1A 00 75 59 02 0E 60 E4 57 02 0F 60 E4 57'"        # sdk5665.hex
+
+if $?magnum && !$?tuc24_ref && !$?BCM5650_C0 "local ledcode '\
+ E0 28 60 FC 67 5A 67 9C 06 FA 67 DA 06 FB 67 DA \
+ 06 FC 80 D2 1C 74 01 12 FD 85 05 D2 0F 71 21 52 \
+ 00 12 FE 85 05 D2 1F 71 2B 52 00 12 FF 85 05 D2 \
+ 05 71 35 52 00 E9 05 98 98 98 98 C2 0F 60 F9 05 \
+ 88 88 88 88 C2 F0 B6 F9 50 81 DA 0C 74 36 E9 02 \
+ 80 45 80 81 DA 0E 74 51 3A 70 32 00 97 75 66 12 \
+ C0 FE FC 02 0A 50 32 01 97 75 72 12 DC FE FC 02 \
+ 0A 50 12 DC FE FC 95 75 86 85 12 C0 FE FC 95 02 \
+ FA 75 D7 85 77 D1 12 C0 FE FC 95 75 92 85 02 FA \
+ 77 D4 16 FF DA 02 02 FA 71 D4 77 D7 32 05 97 71 \
+ A9 06 FE D2 01 02 FB 71 D1 06 FC 67 CA 02 FB 75 \
+ D1 32 02 97 71 D1 32 03 97 71 D7 32 04 97 75 D4 \
+ 06 FD D2 07 02 FB 71 D4 77 D7 12 A0 F8 15 1A 00 \
+ 57 42 00 57 42 01 57 42 02 57 D2 02 74 E3 32 0F \
+ 87 77 E6 32 0E 87 D2 01 74 EE 32 0F 87 57 32 0E \
+ 87 57'"                                            # sdk5665.hex
+
+if $?magnum && !$?tuc24_ref && $?BCM5650_C0 "local ledcode '\
+ E0 60 FB D2 18 75 09 A2 01 60 FC 28 67 37 67 73 \
+ 06 FB 80 D2 1C 74 01 12 FD 85 05 D2 0F 71 21 52 \
+ 00 12 FE 85 05 D2 1F 71 2B 52 00 12 FF 85 05 D2 \
+ 05 71 35 52 00 3A 70 32 00 97 75 43 12 C0 FE FC \
+ 02 0A 50 32 01 97 75 4F 12 DC FE FC 02 0A 50 12 \
+ DC FE FC 95 75 61 85 12 C0 FE FC 95 75 B0 85 77 \
+ A2 12 C0 FE FC 95 75 6B 85 77 A9 16 FF DA 02 71 \
+ A9 77 B0 32 05 97 71 7E 06 FE D2 01 71 A2 06 FC \
+ 67 9B 75 A2 32 02 97 71 A2 32 03 97 71 B0 32 04 \
+ 97 75 A9 06 FD D2 07 71 A9 77 B0 12 A0 F8 15 1A \
+ 00 57 32 0F 87 32 0F 87 57 32 0E 87 32 0F 87 57 \
+ 32 0F 87 32 0E 87 57'"                            # magnum_sdk.hex
+
+if $?tuc24_ref && $?BCM5650_C0 "local ledcode '\
+ E0 60 FB D2 18 71 10 60 FC 28 67 D0 67 C0 77 19 \
+ A2 01 60 FC 28 67 40 67 7C 06 FB 80 D2 1C 74 01 \
+ 12 FD 85 05 D2 0F 71 2A 52 00 12 FE 85 05 D2 1F \
+ 71 34 52 00 12 FF 85 05 D2 05 71 3E 52 00 3A 68 \
+ 32 00 97 75 4C 12 C0 FE FC 02 0A 50 32 01 97 75 \
+ 58 12 DC FE FC 02 0A 50 12 DC FE FC 95 75 6A 85 \
+ 12 C0 FE FC 95 75 B9 85 77 AB 12 C0 FE FC 95 75 \
+ 74 85 77 B2 16 FF DA 02 71 B2 77 B9 32 05 97 71 \
+ 87 06 FE D2 01 71 AB 06 FC 67 A4 75 AB 32 02 97 \
+ 71 AB 32 03 97 71 B9 32 04 97 75 B2 06 FD D2 07 \
+ 71 B2 77 B9 12 A0 F8 15 1A 00 57 32 0F 87 32 0F \
+ 87 57 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 57 \
+ 02 0E 32 00 97 71 CD 32 01 97 71 CD 80 30 87 57 \
+ 06 FC 12 A0 F8 15 1A 00 02 0F 75 DD 90 30 87 57'"  # magnum.hex
+
+if $?tuc24_ref && !$?BCM5650_C0 "local ledcode '\
+ E0 28 60 FC D2 18 71 0E 67 E9 67 D9 77 1A 67 5A \
+ 67 9C 06 FA 67 D0 06 FB 67 D0 06 FC 80 D2 1C 74 \
+ 01 12 FE 85 05 D2 1F 71 2B 52 00 12 FF 85 05 D2 \
+ 05 71 35 52 00 E9 05 98 98 98 98 C2 0F 60 F9 05 \
+ 88 88 88 88 C2 F0 B6 F9 50 81 DA 0C 74 36 E9 02 \
+ 80 45 80 81 DA 0D 74 51 3A 68 32 00 97 75 66 12 \
+ C0 FE FC 02 0A 50 32 01 97 75 72 12 DC FE FC 02 \
+ 0A 50 12 DC FE FC 95 75 86 85 12 C0 FE FC 95 02 \
+ FA 75 CD 85 77 C7 12 C0 FE FC 95 75 92 85 02 FA \
+ 77 CA 16 FF DA 02 02 FA 71 CA 77 CD 32 05 97 71 \
+ A9 06 FE D2 01 02 FB 71 C7 06 FC 67 C0 02 FB 75 \
+ C7 32 02 97 71 C7 32 03 97 71 CD 32 04 97 75 CA \
+ 12 A0 F8 15 1A 00 57 42 FF 57 42 FE 57 42 EF 57 \
+ 30 87 98 98 98 98 30 87 57 02 0E 32 00 97 71 E6 \
+ 32 01 97 71 E6 80 30 87 57 06 FC 12 A0 F8 15 1A \
+ 00 02 0F 75 F6 90 30 87 57'"                       # tuc24_ref.hex
+
+if $?herc8_15 "local ledcode '\
+ 02 01 28 32 08 D7 87 32 07 D7 87 32 01 D7 87 32 \
+ 00 D7 87 80 D2 09 74 02 86 7F 06 7F C2 07 74 22 \
+ 86 7E 16 7E CA 07 E0 17 0D 12 08 98 27 D7 87 91 \
+ 74 2B 3A 28'"                                      # sdk5675.hex
+
+if $?drac_any && $?lm "local ledcode '\
+ E0 28 60 C3 67 2D 06 C3 80 D2 0C 74 01 12 C2 85 \
+ 05 D2 0F 71 17 52 00 12 C1 85 05 D2 1F 71 21 52 \
+ 00 12 C0 85 05 D2 05 71 2B 52 00 3A 18 32 00 97 \
+ 75 39 12 A0 FE C3 02 0A 50 32 01 97 75 45 12 AC \
+ FE C3 02 0A 50 12 AC FE C3 95 75 5F 85 12 A0 FE \
+ C3 95 71 5C 16 C0 DA 02 71 A6 77 B4 85 77 77 12 \
+ A0 FE C3 95 75 6F 85 16 C0 DA 02 71 A6 77 AD 16 \
+ C0 DA 02 71 AD 77 B4 32 05 97 71 82 06 C1 D2 01 \
+ 71 A6 06 C3 67 9F 75 A6 32 02 97 71 A6 32 03 97 \
+ 71 B4 32 04 97 75 AD 06 C2 D2 07 71 AD 77 B4 12 \
+ 80 F8 15 1A 00 57 32 0E 87 32 0E 87 57 32 0E 87 \
+ 32 0F 87 57 32 0F 87 32 0E 87 57 00 00 00 00 00'"  # lm5690.hex
+
+if $?drac_any && $?lm48p "local ledcode '\
+ E0 28 60 C3 67 7C 06 C3 80 28 60 C3 67 7C 67 40 \
+ 06 C3 90 28 60 C3 67 40 06 C3 80 80 D2 0C 74 01 \
+ 12 C2 85 05 D2 0F 71 2A 52 00 12 C1 85 05 D2 1F \
+ 71 34 52 00 12 C0 85 05 D2 05 71 3E 52 00 3A 30 \
+ 32 00 97 75 4C 12 A0 FE C3 02 0A 50 32 01 97 75 \
+ 58 12 AC FE C3 02 0A 50 12 AC FE C3 95 75 6A 85 \
+ 12 A0 FE C3 95 75 B9 85 77 AB 12 A0 FE C3 95 75 \
+ 74 85 77 B2 16 C0 DA 02 71 B2 77 B9 32 05 97 71 \
+ 8C 32 02 97 71 AB 06 C1 D2 01 71 AB 06 C3 67 A4 \
+ 75 AB 32 03 97 71 B9 32 04 97 75 B2 06 C2 D2 07 \
+ 71 B2 77 B9 12 80 F8 15 1A 00 57 32 0E 87 32 0E \
+ 87 57 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 57'"  # lm48p5695.hex
+
+if $?drac_any && $?lm48p_B "local ledcode '\
+ E0 28 60 C3 67 79 06 C3 67 3D 06 C3 80 28 60 C3 \
+ 67 3D 06 C3 67 79 06 C3 80 D2 0C 74 01 12 C2 85 \
+ 05 D2 0F 71 27 52 00 12 C1 85 05 D2 1F 71 31 52 \
+ 00 12 C0 85 05 D2 05 71 3B 52 00 3A 30 32 00 97 \
+ 75 49 12 A0 FE C3 02 0A 50 32 01 97 75 55 12 AC \
+ FE C3 02 0A 50 12 AC FE C3 95 75 67 85 12 A0 FE \
+ C3 95 75 B6 85 77 A8 12 A0 FE C3 95 75 71 85 77 \
+ AF 16 C0 DA 02 71 AF 77 B6 32 05 97 71 89 32 02 \
+ 97 71 A8 06 C1 D2 01 71 A8 06 C3 67 A1 75 A8 32 \
+ 03 97 71 B6 32 04 97 75 AF 06 C2 D2 07 71 AF 77 \
+ B6 12 80 F8 15 1A 00 57 32 0E 87 32 0E 87 57 32 \
+ 0E 87 32 0F 87 57 32 0F 87 32 0E 87 57'"  # lm48p5695_10.hex
+
+if $?firebolt_any "local ledcode '\
+ E0 28 60 E3 67 55 67 91 06 E3 80 28 60 E3 67 91 \
+ 67 55 06 E3 80 D2 18 74 01 28 60 E3 67 B9 75 26 \
+ 67 CE 67 55 77 2E 32 0E 87 32 08 87 67 C0 06 E3 \
+ 80 D2 1C 74 19 12 E2 85 05 D2 0F 71 3F 52 00 12 \
+ E1 85 05 D2 1F 71 49 52 00 12 E0 85 05 D2 05 71 \
+ 53 52 00 3A 70 32 00 97 75 61 12 A0 FE E3 02 0A \
+ 50 32 01 97 75 6D 12 BC FE E3 02 0A 50 12 BC FE \
+ E3 95 75 7F 85 12 A0 FE E3 95 75 CE 85 77 C0 12 \
+ A0 FE E3 95 75 89 85 77 C7 16 E0 DA 02 71 C7 77 \
+ CE 32 05 97 71 A1 32 02 97 71 C0 06 E1 D2 01 71 \
+ C0 06 E3 67 B9 75 C0 32 03 97 71 CE 32 04 97 75 \
+ C7 06 E2 D2 07 71 C7 77 CE 12 80 F8 15 1A 00 57 \
+ 32 0E 87 32 0E 87 57 32 0E 87 32 0F 87 57 32 0F \
+ 87 32 0E 87 57'"  # sdk56504.hex
+
+#Led program for new rev of FB SDK and Ref design
+if $?firebolt_any && !$?fb24 "local ledcode '\
+ E0 28 60 E3 67 4B 67 87 06 E3 80 D2 18 74 01 28 \
+ 60 E3 67 AF 75 1C 67 C4 67 4B 77 24 32 0E 87 32 \
+ 08 87 67 B6 06 E3 80 D2 1C 74 0F 12 E2 85 05 D2 \
+ 0F 71 35 52 00 12 E1 85 05 D2 1F 71 3F 52 00 12 \
+ E0 85 05 D2 05 71 49 52 00 3A 70 32 00 97 75 57 \
+ 12 A0 FE E3 02 0A 50 32 01 97 75 63 12 BC FE E3 \
+ 02 0A 50 12 BC FE E3 95 75 75 85 12 A0 FE E3 95 \
+ 75 C4 85 77 B6 12 A0 FE E3 95 75 7F 85 77 BD 16 \
+ E0 DA 02 71 BD 77 C4 32 05 97 71 97 32 02 97 71 \
+ B6 06 E1 D2 01 71 B6 06 E3 67 AF 75 B6 32 03 97 \
+ 71 C4 32 04 97 75 BD 06 E2 D2 07 71 BD 77 C4 12 \
+ 80 F8 15 1A 00 57 32 0E 87 32 0E 87 57 32 0E 87 \
+ 32 0F 87 57 32 0F 87 32 0E 87 57'" # sdk56504ref.hex
+
+#Override Default Firebolt LED program for Line Module
+if $?lm && $?firebolt_any "local ledcode '\
+ E0 28 60 E3 67 79 06 E3 67 3D 06 E3 80 28 60 E3 \
+ 67 3D 06 E3 67 79 06 E3 80 D2 18 74 01 12 E2 85 \
+ 05 D2 0F 71 27 52 00 12 E1 85 05 D2 1F 71 31 52 \
+ 00 12 E0 85 05 D2 05 71 3B 52 00 3A 60 32 00 97 \
+ 75 49 12 A0 FE E3 02 0A 50 32 01 97 75 55 12 BC \
+ FE E3 02 0A 50 12 BC FE E3 95 75 67 85 12 A0 FE \
+ E3 95 75 B6 85 77 A8 12 A0 FE E3 95 75 71 85 77 \
+ AF 16 E0 DA 02 71 AF 77 B6 32 05 97 71 89 32 02 \
+ 97 71 A8 06 E1 D2 01 71 A8 06 E3 67 A1 75 A8 32 \
+ 03 97 71 B6 32 04 97 75 AF 06 E2 D2 07 71 AF 77 \
+ B6 12 80 F8 15 1A 00 57 32 0E 87 32 0E 87 57 32 \
+ 0E 87 32 0F 87 57 32 0F 87 32 0E 87 57'" # lm48p56504.hex
+
+#Override Default Firebolt LED program for Line Module -50 version
+if $?lm && $?lm48p_D && $?firebolt_any "local ledcode '\
+ E0 28 60 E3 67 6D 06 E3 67 31 06 E3 80 D2 18 74 \
+ 01 12 E2 85 05 D2 0F 71 1B 52 00 12 E1 85 05 D2 \
+ 1F 71 25 52 00 12 E0 85 05 D2 05 71 2F 52 00 3A \
+ 60 32 00 97 75 3D 12 A0 FE E3 02 0A 50 32 01 97 \
+ 75 49 12 BC FE E3 02 0A 50 12 BC FE E3 95 75 5B \
+ 85 12 A0 FE E3 95 75 AA 85 77 9C 12 A0 FE E3 95 \
+ 75 65 85 77 A3 16 E0 DA 02 71 A3 77 AA 32 05 97 \
+ 71 7D 32 02 97 71 9C 06 E1 D2 01 71 9C 06 E3 67 \
+ 95 75 9C 32 03 97 71 AA 32 04 97 75 A3 06 E2 D2 \
+ 07 71 A3 77 AA 12 80 F8 15 1A 00 57 32 0E 87 32 \
+ 0E 87 57 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 \
+ 57'" # lm48p56504_50.hex
+
+if $?lm && $?firebolt_10x4 "local ledcode '\
+ 02 18 28 32 07 67 1E 75 0A D7 87 32 01 D7 87 32 \
+ 00 D7 87 32 08 D7 87 80 D2 1C 74 02 3A 0C 12 80 \
+ F8 15 1A 00 57 '" # lm12pcx456501.hex
+
+if $?fbpoe && $?firebolt_any "local ledcode '\
+ E0 28 60 E3 67 85 67 49 06 E3 80 D2 18 74 01 28 \
+ 60 E3 67 AD 75 1A 67 C2 77 20 32 0E 87 32 08 87 \
+ 67 49 06 E3 80 D2 1A 74 0F 12 E2 85 05 D2 0F 71 \
+ 33 52 00 12 E1 85 05 D2 1F 71 3D 52 00 12 E0 85 \
+ 05 D2 05 71 47 52 00 3A 68 32 00 97 75 55 12 A0 \
+ FE E3 02 0A 50 32 01 97 75 61 12 BA FE E3 02 0A \
+ 50 12 BA FE E3 95 75 73 85 12 A0 FE E3 95 75 C2 \
+ 85 77 B4 12 A0 FE E3 95 75 7D 85 77 BB 16 E0 DA \
+ 02 71 BB 77 C2 32 05 97 71 95 32 02 97 71 B4 06 \
+ E1 D2 01 71 B4 06 E3 67 AD 75 B4 32 03 97 71 C2 \
+ 32 04 97 75 BB 06 E2 D2 07 71 BB 77 C2 12 80 F8 \
+ 15 1A 00 57 32 0E 87 32 0E 87 57 32 0E 87 32 0F \
+ 87 57 32 0F 87 32 0E 87 57'" # poe48p56504.hex
+
+#Override Default Firebolt LED program for felix
+if $?felix || $?felix15 "local ledcode '\
+ E0 28 60 E3 67 6B 67 A7 06 E3 80 D2 18 74 01 02 \
+ 18 28 60 E3 67 49 02 19 28 60 E3 67 49 32 0E 87 \
+ 32 0E 87 32 0E 87 32 0E 87 12 E2 85 05 D2 0F 71 \
+ 33 52 00 12 E1 85 05 D2 1F 71 3D 52 00 12 E0 85 \
+ 05 D2 05 71 47 52 00 3A 68 67 CF 75 52 32 0E 87 \
+ 77 55 32 0F 87 32 00 97 75 5E 32 0E 87 57 32 01 \
+ 97 75 67 32 0E 87 57 32 0F 87 57 32 00 97 75 77 \
+ 12 A0 FE E3 02 0A 50 32 01 97 75 83 12 BC FE E3 \
+ 02 0A 50 12 BC FE E3 95 75 95 85 12 A0 FE E3 95 \
+ 75 E4 85 77 D6 12 A0 FE E3 95 75 9F 85 77 DD 16 \
+ E0 DA 02 71 DD 77 E4 32 05 97 71 B7 32 02 97 71 \
+ D6 06 E1 D2 01 71 D6 06 E3 67 CF 75 D6 32 03 97 \
+ 71 E4 32 04 97 75 DD 06 E2 D2 07 71 DD 77 E4 12 \
+ 80 F8 15 1A 00 57 32 0E 87 32 0E 87 57 32 0E 87 \
+ 32 0F 87 57 32 0E 87 32 0F 87 57'"  # sdk56102.hex
+
+#Override Default Felix LED program for felix48
+if $?felix48 && $?felix || $?felix15 "local ledcode '\
+ E0 28 60 E3 67 6B 67 A7 06 E3 80 D2 18 74 01 02 \
+ 18 28 60 E3 67 49 02 19 28 60 E3 67 49 32 0E 87 \
+ 32 0E 87 32 0E 87 32 0E 87 12 E2 85 05 D2 0F 71 \
+ 33 52 00 12 E1 85 05 D2 1F 71 3D 52 00 12 E0 85 \
+ 05 D2 05 71 47 52 00 3A 68 67 CF 75 52 32 0E 87 \
+ 77 55 32 0F 87 32 00 97 75 5E 32 0E 87 57 32 01 \
+ 97 75 67 32 0E 87 57 32 0F 87 57 32 00 97 75 77 \
+ 12 A0 FE E3 02 0A 50 32 01 97 75 83 12 BC FE E3 \
+ 02 0A 50 12 BC FE E3 95 75 95 85 12 A0 FE E3 95 \
+ 75 E4 85 77 D6 12 A0 FE E3 95 75 9F 85 77 DD 16 \
+ E0 DA 02 71 DD 77 E4 32 05 97 71 B7 32 02 97 71 \
+ D6 06 E1 D2 01 71 D6 06 E3 67 CF 75 D6 32 03 97 \
+ 71 E4 32 04 97 75 DD 06 E2 D2 07 71 DD 77 E4 12 \
+ 80 F8 15 1A 00 57 32 0E 87 32 0E 87 57 32 0E 87 \
+ 32 0F 87 57 32 0F 87 32 0E 87 57'"  # felix48.hex
+
+if $?easyrider_any "local ledcode '\
+ E0 28 60 E3 67 59 67 95 06 E3 80 28 60 E3 67 95 \
+ 67 59 06 E3 80 D2 0C 74 01 28 60 E3 67 BD 75 26 \
+ 67 D2 67 59 77 2E 32 0E 87 32 08 87 67 C4 06 E3 \
+ 80 D2 0D 74 19 12 E2 85 05 D2 0F 71 3F 52 00 12 \
+ E1 85 05 D2 1F 71 49 52 00 12 E0 85 05 D2 05 71 \
+ 53 52 00 67 C4 67 C4 3A 38 32 00 97 75 65 12 A0 \
+ FE E3 02 0A 50 32 01 97 75 71 12 AD FE E3 02 0A \
+ 50 12 AD FE E3 95 75 83 85 12 A0 FE E3 95 75 D2 \
+ 85 77 C4 12 A0 FE E3 95 75 8D 85 77 CB 16 E0 DA \
+ 02 71 CB 77 D2 32 05 97 71 A5 32 02 97 71 C4 06 \
+ E1 D2 01 71 C4 06 E3 67 BD 75 C4 32 03 97 71 D2 \
+ 32 04 97 75 CB 06 E2 D2 07 71 CB 77 D2 12 80 F8 \
+ 15 1A 00 57 32 0E 87 32 0E 87 57 32 0E 87 32 0F \
+ 87 57 32 0F 87 32 0E 87 57'"   # sdk56601.hex
+
+#Override Default Easyrider LED program for 56602
+if $?easyrider_1x1 "local ledcode '\
+ E0 60 E1 67 7C 67 7C 06 E1 80 D2 0C 74 01 02 0C \
+ 28 60 E1 67 75 75 1D 67 8A 67 39 77 25 32 0E 87 \
+ 32 08 87 67 7C 06 E1 D2 00 02 00 74 10 12 E0 85 \
+ 05 D2 05 71 37 52 00 3A 38 32 00 97 75 45 12 A0 \
+ FE E1 02 0A 50 32 01 97 75 51 12 AD FE E1 02 0A \
+ 50 12 AD FE E1 95 75 63 85 12 A0 FE E1 95 75 8A \
+ 85 77 7C 12 A0 FE E1 95 75 6D 85 77 83 16 E0 DA \
+ 02 71 83 77 8A 12 80 F8 15 1A 00 57 32 0E 87 32 \
+ 0E 87 57 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 \
+ 57'"   # sdk56602.hex
+
+#Override Default  LED program for 53300
+if $?mirage24 "local ledcode '\
+ E0 28 60 E3 67 6B 67 2F 06 E3 80 D2 18 74 01 12 \
+ E2 85 05 D2 0F 71 19 52 00 12 E1 85 05 D2 1F 71 \
+ 23 52 00 12 E0 85 05 D2 05 71 2D 52 00 3A 30 32 \
+ 00 97 75 3B 12 A0 FE E3 02 0A 50 32 01 97 75 47 \
+ 12 BC FE E3 02 0A 50 12 BC FE E3 95 75 59 85 12 \
+ A0 FE E3 95 75 A2 85 77 9A 12 A0 FE E3 95 75 63 \
+ 85 77 9E 16 E0 DA 02 71 9E 77 A2 32 05 97 71 7B \
+ 32 02 97 71 9A 06 E1 D2 01 71 9A 06 E3 67 93 75 \
+ 9A 32 03 97 71 A2 32 04 97 75 9E 06 E2 D2 07 71 \
+ 9E 77 A2 12 80 F8 15 1A 00 57 32 0F 87 57 32 0E \
+ 87 57 32 0E 87 57'"  # sdk53300.hex
+
+#Override Default LED program for 56314
+if $?bcm56314p24ref "local ledcode '\
+ E0 28 60 E3 67 79 67 3D 06 E3 80 D2 18 74 01 28 \
+ 60 E3 67 79 67 A8 06 E3 80 D2 1C 74 0F 12 E2 85 \
+ 05 D2 0F 71 27 52 00 12 E1 85 05 D2 1F 71 31 52 \
+ 00 12 E0 85 05 D2 05 71 3B 52 00 3A 38 32 00 97 \
+ 75 49 12 A0 FE E3 02 0A 50 32 01 97 75 55 12 BC \
+ FE E3 02 0A 50 12 BC FE E3 95 75 67 85 12 A0 FE \
+ E3 95 75 B0 85 77 A8 12 A0 FE E3 95 75 71 85 77 \
+ AC 16 E0 DA 02 71 AC 77 B0 32 05 97 71 89 32 02 \
+ 97 71 A8 06 E1 D2 01 71 A8 06 E3 67 A1 75 A8 32 \
+ 03 97 71 B0 32 04 97 75 AC 06 E2 D2 07 71 AC 77 \
+ B0 12 80 F8 15 1A 00 57 32 0F 87 57 32 0E 87 57 \
+ 32 0E 87 57'"  # bcm956314p24ref.hex
+
+if $?bradley "local ledcode '\
+ E0 28 60 F2 67 1B 06 F2 80 D2 14 74 01 86 F3 12 \
+ F0 85 05 D2 05 71 19 52 00 3A 28 32 00 97 75 27 \
+ 12 A8 FE F2 02 0A 50 32 01 97 75 33 12 BC FE F2 \
+ 02 0A 50 12 BC FE F2 95 75 45 85 12 A8 FE F2 95 \
+ 75 91 85 77 57 12 A8 FE F2 95 75 4F 85 77 8A 16 \
+ F0 DA 02 71 8A 77 91 06 F2 12 94 F8 15 02 02 C1 \
+ 74 6E 02 04 C1 74 6E 02 08 C1 74 6E 77 74 C6 F3 \
+ 74 91 77 8A 06 F2 67 7C 75 83 77 91 12 80 F8 15 \
+ 1A 00 57 32 0E 87 32 0E 87 57 32 0E 87 32 0F 87 \
+ 57 32 0F 87 32 0E 87 57'"     # sdk56800.hex
+
+if $?humv "local ledcode '\
+ E0 28 60 F2 67 21 06 F2 80 D2 08 74 0F F2 02 D2 \
+ 12 74 01 86 F3 12 F0 85 05 D2 05 71 1F 52 00 3A \
+ 20 32 00 97 75 2D 12 A8 FE F2 02 0A 50 32 01 97 \
+ 75 39 12 BA FE F2 02 0A 50 12 BA FE F2 95 75 4B \
+ 85 12 A8 FE F2 95 75 97 85 77 5D 12 A8 FE F2 95 \
+ 75 55 85 77 90 16 F0 DA 02 71 90 77 97 06 F2 12 \
+ 94 F8 15 02 02 C1 74 74 02 04 C1 74 74 02 08 C1 \
+ 74 74 77 7A C6 F3 74 97 77 90 06 F2 67 82 75 89 \
+ 77 97 12 80 F8 15 1A 00 57 32 0E 87 32 0E 87 57 \
+ 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 57'" # sdk56700.hex
+
+if $?bradley_1g "local ledcode '\
+ E0 28 60 E3 67 2F 67 6B 06 E3 80 D2 14 74 01 12 \
+ E2 85 05 D2 0F 71 19 52 00 12 E1 85 05 D2 1F 71 \
+ 23 52 00 12 E0 85 05 D2 05 71 2D 52 00 3A 50 32 \
+ 00 97 75 3B 12 A0 FE E3 02 0A 50 32 01 97 75 47 \
+ 12 B4 FE E3 02 0A 50 12 B4 FE E3 95 75 59 85 12 \
+ A0 FE E3 95 75 A8 85 77 9A 12 A0 FE E3 95 75 63 \
+ 85 77 A1 16 E0 DA 02 71 A1 77 A8 32 05 97 71 7B \
+ 32 02 97 71 9A 06 E1 D2 01 71 9A 06 E3 67 93 75 \
+ 9A 32 03 97 71 A8 32 04 97 75 A1 06 E2 D2 07 71 \
+ A1 77 A8 12 80 F8 15 1A 00 57 32 0E 87 32 0E 87 \
+ 57 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 57 '"  # sdk56800c.hex
+
+if $?goldwing "local ledcode '\
+ E0 28 60 F3 D2 10 75 0E 67 3B 67 94 77 12 67 94 \
+ 67 3B 06 F3 80 D2 14 74 01 86 F4 12 F2 85 05 D2 \
+ 0F 71 25 52 00 12 F1 85 05 D2 1F 71 2F 52 00 12 \
+ F0 85 05 D2 05 71 39 52 00 3A 50 32 00 97 75 47 \
+ 12 A8 FE F3 02 0A 50 32 01 97 75 53 12 BC FE F3 \
+ 02 0A 50 12 BC FE F3 95 75 65 85 12 A8 FE F3 95 \
+ 75 C0 85 77 77 12 A8 FE F3 95 75 6F 85 77 B9 16 \
+ F0 DA 02 71 B9 77 C0 06 F3 12 94 F8 15 02 02 C1 \
+ 74 8E 02 04 C1 74 8E 02 08 C1 74 8E 77 B2 C6 F4 \
+ 74 C0 77 B9 06 F3 67 AB 75 B2 32 04 75 B2 32 03 \
+ 97 71 C0 06 F2 D2 07 71 B9 77 C0 12 80 F8 15 1A \
+ 00 57 32 0E 87 32 0E 87 57 32 0E 87 32 0F 87 57 \
+ 32 0F 87 32 0E 87 57 '"                          # sdk56580.hex
+
+if $?humv && $?lm "local ledcode '\
+ 02 04 28 D2 08 74 0A F2 02 28 32 07 67 29 75 11 \
+ D7 87 60 E4 67 30 06 E4 60 E4 67 4C 06 E4 32 08 \
+ D7 87 80 D2 12 74 02 3A 30 12 80 F8 15 1A 00 57 \
+ 06 E4 12 94 F8 15 02 10 C1 70 42 12 D2 FE E4 02 \
+ 0A 50 12 D2 FE E4 95 75 6D 85 77 68 06 E4 12 94 \
+ F8 15 02 20 C1 70 5E 12 C0 FE E4 02 0A 50 12 C0 \
+ FE E4 95 75 6D 85 77 68 32 0E D7 87 57 32 0F D7 \
+ 87 57 '"                                         # lm12p56802.hex
+
+
+if $?raptor "local ledcode '\
+ 02 06 28 60 FF 67 64 67 93 06 FF 80 D2 36 74 02 \
+ 02 04 28 60 FF 67 BB 75 1E 32 0E 87 77 21 32 0F \
+ 87 67 7D 06 FF 80 D2 06 74 12 02 01 28 60 FF 67 \
+ BB 75 38 32 0E 87 77 3B 32 0F 87 67 7D 06 FF 80 \
+ D2 03 74 2C 12 FE 85 05 D2 0F 71 4E 52 00 12 FD \
+ 85 05 D2 1F 71 58 52 00 12 FC 85 05 D2 05 71 62 \
+ 52 00 3A C8 32 01 97 75 76 32 00 97 75 C9 16 FC \
+ DA 02 71 C9 77 D0 32 00 97 75 C2 77 D0 32 00 97 \
+ 75 86 32 0E 87 57 32 01 97 75 8F 32 0E 87 57 32 \
+ 0F 87 57 32 05 97 71 A3 32 02 97 71 C2 06 FD D2 \
+ 01 71 C2 06 FF 67 BB 75 C2 32 03 97 71 D0 32 04 \
+ 97 75 C9 06 FE D2 07 71 C9 77 D0 12 A0 F8 15 1A \
+ 00 57 32 0E 87 32 0E 87 57 32 0E 87 32 0F 87 57 \
+ 32 0F 87 32 0E 87 57 00 00 00 00 00 00 00 00 00'" # sdk56018.hex
+
+if $?raptor && $?rap24_ref "local ledcode '\
+ 02 06 60 E1 67 48 67 31 06 E1 80 D2 1E 71 02 02 \
+ 05 60 E1 67 48 67 31 06 E1 90 D2 03 74 11 02 02 \
+ 60 E1 67 48 67 31 06 E1 90 D2 00 74 20 86 E0 3A \
+ 38 06 E1 67 50 75 57 28 32 00 32 01 B7 97 75 57 \
+ 16 E0 CA 05 74 5B 77 57 06 E1 67 50 75 57 77 5B \
+ 12 A0 F8 15 1A 00 57 32 0F 87 57 32 0E 87 57 00'" # sdk56214.hex
+
+if $?raven_eb_48p "local ledcode '\
+ 02 06 28 60 C3 67 30 67 6C 06 C3 80 D2 1E 74 02 \
+ 12 C2 85 05 D2 0F 71 1A 52 00 12 C1 85 05 D2 1F \
+ 71 24 52 00 12 C0 85 05 D2 05 71 2E 52 00 3A 60 \
+ 32 00 97 75 3C 12 C0 FE C3 02 0A 50 32 01 97 75 \
+ 48 12 E0 FE C3 02 0A 50 12 E0 FE C3 95 75 5A 85 \
+ 12 C0 FE C3 95 75 A9 85 77 9B 12 C0 FE C3 95 75 \
+ 64 85 77 A2 16 C0 DA 02 71 A2 77 A9 32 05 97 71 \
+ 7C 32 02 97 71 9B 06 C1 D2 01 71 9B 06 C3 67 94 \
+ 75 9B 32 03 97 71 A9 32 04 97 75 A2 06 C2 D2 07 \
+ 71 A2 77 A9 12 A0 F8 15 1A 00 57 32 0E 87 32 0E \
+ 87 57 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 57'" #bcm956024p48ref.hex
+
+if $?BCM956024R50T "local ledcode '\
+ 02 06 28 60 C3 67 30 67 6C 06 C3 80 D2 1E 74 02 \
+ 12 C2 85 05 D2 0F 71 1A 52 00 12 C1 85 05 D2 1F \
+ 71 24 52 00 12 C0 85 05 D2 05 71 2E 52 00 3A 60 \
+ 32 00 97 75 3C 12 C0 FE C3 02 0A 50 32 01 97 75 \
+ 48 12 E0 FE C3 02 0A 50 12 E0 FE C3 95 75 5A 85 \
+ 12 C0 FE C3 95 75 A9 85 77 9B 12 C0 FE C3 95 75 \
+ 64 85 77 A2 16 C0 DA 02 71 A2 77 A9 32 05 97 75 \
+ 7C 32 02 97 71 9B 06 C1 D2 01 71 9B 06 C3 67 94 \
+ 75 9B 32 03 97 71 A9 32 04 97 75 A2 06 C2 D2 07 \
+ 71 A2 77 A9 12 A0 F8 15 1A 00 57 32 0E 87 32 0E \
+ 87 57 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 57'" #bcm956024r50t.hex
+
+if $?scorpion || $?conqueror "local ledcode '\
+ 02 18 28 60 E1 67 12 06 E1 90 D2 00 74 02 86 E0 \
+ 3A 18 67 2D 75 34 28 32 00 32 01 B7 97 75 38 16 \
+ E0 CA 05 74 38 77 34 67 2D 75 34 77 38 12 A0 F8 \
+ 15 1A 00 57 32 0F 87 57 32 0E 87 57 00 00 00 00 \
+ 00 00 00'" #sdk56820.hex
+
+if $?scorpion && $?BCM956820R24XG "local ledcode '\
+ 02 01 28 67 D0 02 02 28 67 D6 67 D0 02 01 28 67 \
+ D6 02 04 28 67 D0 02 03 28 67 D6 67 D0 02 04 28 \
+ 67 D6 02 05 28 67 D0 02 06 28 67 D6 67 D0 02 05 \
+ 28 67 D6 02 07 28 67 D0 02 08 28 67 D6 67 D0 02 \
+ 07 28 67 D6 02 09 28 67 D0 02 0A 28 67 D6 67 D0 \
+ 02 09 28 67 D6 02 0C 28 67 D0 02 0B 28 67 D6 67 \
+ D0 02 0C 28 67 D6 02 0D 28 67 D0 02 0E 28 67 D6 \
+ 67 D0 02 0D 28 67 D6 02 0F 28 67 D0 02 10 28 67 \
+ D6 67 D0 02 0F 28 67 D6 02 11 28 67 D0 02 12 28 \
+ 67 D6 67 D0 02 11 28 67 D6 02 14 28 67 D0 02 13 \
+ 28 67 D6 67 D0 02 14 28 67 D6 02 15 28 67 D0 02 \
+ 16 28 67 D6 67 D0 02 15 28 67 D6 02 17 28 67 D0 \
+ 02 18 28 67 D6 67 D0 02 17 28 67 D6 86 E0 3A 30 \
+ 67 F1 75 F8 77 FC 67 F1 75 F8 28 32 00 32 01 B7 \
+ 97 75 F8 16 E0 CA 05 74 FC 77 F8 67 F1 75 F8 77 \
+ FC 12 A0 F8 15 1A 00 57 32 0F 87 57 32 0E 87 57 \
+ '" #bcm956820r24xg.hex
+
+if $?valkyrie "local ledcode '\
+ 02 02 67 A9 67 94 02 03 67 A9 67 94 02 05 67 A9 \
+ 67 94 02 04 67 A9 67 94 02 06 67 A9 67 94 02 07 \
+ 67 A9 67 94 02 12 67 A9 67 94 02 13 67 A9 67 94 \
+ 02 0E 67 A9 67 94 02 0F 67 A9 67 94 02 11 67 A9 \
+ 67 94 02 10 67 A9 67 94 02 1A 67 A9 67 94 02 20 \
+ 67 A9 67 94 02 21 67 A9 67 94 02 22 67 A9 67 94 \
+ 02 23 67 A9 67 94 02 24 67 A9 67 94 02 2F 67 A9 \
+ 67 94 02 2E 67 A9 67 94 02 1B 67 A9 67 94 02 2B \
+ 67 A9 67 94 02 2C 67 A9 67 94 02 2D 67 A9 67 94 \
+ 86 E0 3A 30 67 AF 75 B6 28 32 00 32 01 B7 97 75 \
+ B6 16 E0 CA 05 74 BA 77 B6 67 AF 75 B6 77 BA 12 \
+ A0 F8 15 1A 00 57 32 0F 87 57 32 0E 87 57 00 00 \
+ 00'" #sdk56680.hex
+
+if $?valkyrie2 "local ledcode '\
+ 02 1E 67 A9 67 94 02 1F 67 A9 67 94 02 21 67 A9 \
+ 67 94 02 20 67 A9 67 94 02 22 67 A9 67 94 02 23 \
+ 67 A9 67 94 02 24 67 A9 67 94 02 25 67 A9 67 94 \
+ 02 26 67 A9 67 94 02 27 67 A9 67 94 02 29 67 A9 \
+ 67 94 02 28 67 A9 67 94 02 2A 67 A9 67 94 02 2B \
+ 67 A9 67 94 02 2C 67 A9 67 94 02 2D 67 A9 67 94 \
+ 02 2E 67 A9 67 94 02 2F 67 A9 67 94 02 31 67 A9 \
+ 67 94 02 30 67 A9 67 94 02 32 67 A9 67 94 02 33 \
+ 67 A9 67 94 02 34 67 A9 67 94 02 35 67 A9 67 94 \
+ 86 E0 3A 30 67 AF 75 B6 28 32 00 32 01 B7 97 75 \
+ B6 16 E0 CA 05 74 BA 77 B6 67 AF 75 B6 77 BA 12 \
+ A0 F8 15 1A 00 57 32 0F 87 57 32 0E 87 57 00 00 \
+ 00'" #sdk56685.hex
+
+if $?hawkeye_p24 "local ledcode '\
+ 02 01 28 60 E3 67 43 67 1C 06 E3 80 D2 19 74 02 \
+ 12 E0 85 05 D2 03 71 1A 52 00 3A 60 32 00 32 01 \
+ B7 97 75 2B 12 E4 FE E3 02 01 50 12 E4 FE E3 95 \
+ 75 3B 85 06 E3 67 55 75 6A 77 5C 16 E0 DA 01 71 \
+ 6A 77 5C 06 E3 67 55 75 6A 32 03 97 71 5C 32 04 \
+ 97 75 6A 77 63 12 A0 F8 15 1A 00 57 32 0E 87 32 \
+ 0F 87 57 32 0F 87 32 0E 87 57 32 0F 87 32 0F 87 \
+ 57'"  #bcm953314p24ref.hex
+
+if $?hawkeye_k24 "local ledcode '\
+ 02 01 28 60 E1 67 3D 67 1C 06 E1 80 D2 19 74 02 \
+ 12 E0 85 05 D2 05 71 1A 52 00 3A 30 32 00 32 01 \
+ B7 97 75 2B 12 E2 FE E1 02 0A 50 12 E2 FE E1 95 \
+ 75 35 85 77 50 16 E0 DA 02 71 4C 77 50 06 E1 67 \
+ 45 75 50 77 4C 12 A0 F8 15 1A 00 57 32 0E 87 57 \
+ 32 0F 87 57 00 00 00 00 00 00 00 00 00 00 00 00'" #bcm953314k24.hex
+
+if !"expr $pcidev + 0 == 0xb624" "local ledcode '\
+ 02 1C 28 67 18 02 1D 28 67 18 02 1E 28 67 18 02 \
+ 1F 28 67 18 86 E0 3A 08 67 3B 75 20 67 46 77 24 \
+ 67 42 77 42 28 32 00 32 01 B7 97 75 42 16 E0 CA \
+ 05 74 46 77 42 67 3B 75 42 77 46 12 A0 F8 15 1A \
+ 00 57 32 0F 87 57 32 0E 87 57 00 00 00 00 00 00'" #sdk56624.hex
+
+if !"expr $pcidev + 0 == 0xb626" "local ledcode '\
+ 02 1A 28 67 22 02 1B 28 67 22 02 1C 28 67 22 02 \
+ 1D 28 67 22 02 1E 28 67 22 02 1F 28 67 22 86 E0 \
+ 3A 08 67 3D 75 44 28 32 00 32 01 B7 97 75 48 16 \
+ E0 CA 05 74 48 77 44 67 3D 75 44 77 48 12 A0 F8 \
+ 15 1A 00 57 32 0F 87 57 32 0E 87 57 00 00 00 00'" #sdk56626.hex
+
+if !"expr $pcidev + 0 == 0xb628" "local ledcode '\
+ 02 02 28 67 2C 02 0E 28 67 2C 02 1A 28 67 2C 02 \
+ 1B 28 67 2C 02 1C 28 67 2C 02 1D 28 67 2C 02 1E \
+ 28 67 2C 02 1F 28 67 2C 86 E0 3A 08 67 47 75 4E \
+ 28 32 00 32 01 B7 97 75 52 16 E0 CA 05 74 52 77 \
+ 4E 67 47 75 4E 77 52 12 A0 F8 15 1A 00 57 32 0F \
+ 87 57 32 0E 87 57 00 00 00 00 00 00 00 00 00 00'" #sdk56628.hex
+
+if !"expr $pcidev + 0 == 0xb629" "local ledcode '\
+ 02 02 28 67 2C 02 0E 28 67 2C 02 1A 28 67 2C 02 \
+ 1B 28 67 2C 02 1C 28 67 2C 02 1D 28 67 2C 02 1E \
+ 28 67 2C 02 1F 28 67 2C 86 E0 3A 08 67 47 75 4E \
+ 28 32 00 32 01 B7 97 75 52 16 E0 CA 05 74 52 77 \
+ 4E 67 47 75 4E 77 52 12 A0 F8 15 1A 00 57 32 0F \
+ 87 57 32 0E 87 57 00 00 00 00 00 00 00 00 00 00'" #sdk56629.hex
+
+if !"expr $pcidev + 0 == 0xb634" "local ledcode '\
+ 02 1A 28 67 18 02 1B 28 67 18 02 1C 28 67 18 02 \
+ 1D 28 67 18 86 E0 3A 08 67 3B 75 20 67 46 77 24 \
+ 67 42 77 42 28 32 00 32 01 B7 97 75 42 16 E0 CA \
+ 05 74 46 77 42 67 3B 75 42 77 46 12 A0 F8 15 1A \
+ 00 57 32 0F 87 57 32 0E 87 57 00 00 00 00 00 00'" #sdk56634.hex
+
+if !"expr $pcidev + 0 == 0xb630" "local ledcode '\
+ 02 1A 28 67 18 02 1B 28 67 18 02 1C 28 67 18 02 \
+ 1D 28 67 18 86 E0 3A 08 67 3B 75 20 67 46 77 24 \
+ 67 42 77 42 28 32 00 32 01 B7 97 75 42 16 E0 CA \
+ 05 74 46 77 42 67 3B 75 42 77 46 12 A0 F8 15 1A \
+ 00 57 32 0F 87 57 32 0E 87 57 00 00 00 00 00 00'" #sdk56634.hex
+
+if !"expr $pcidev + 0 == 0xb636" "local ledcode '\
+ 02 2A 28 67 22 02 32 28 67 22 02 1A 28 67 22 02 \
+ 1B 28 67 22 02 1C 28 67 22 02 1D 28 67 22 86 E0 \
+ 3A 08 67 3D 75 44 28 32 00 32 01 B7 97 75 48 16 \
+ E0 CA 05 74 48 77 44 67 3D 75 44 77 48 12 A0 F8 \
+ 15 1A 00 57 32 0F 87 57 32 0E 87 57 00 00 00 00'" #sdk56636.hex
+
+if !"expr $pcidev + 0 == 0xb638" "local ledcode '\
+ 02 1E 28 67 2C 02 26 28 67 2C 02 2A 28 67 2C 02 \
+ 32 28 67 2C 02 1A 28 67 2C 02 1B 28 67 2C 02 1C \
+ 28 67 2C 02 1D 28 67 2C 86 E0 3A 08 67 47 75 4E \
+ 28 32 00 32 01 B7 97 75 52 16 E0 CA 05 74 52 77 \
+ 4E 67 47 75 4E 77 52 12 A0 F8 15 1A 00 57 32 0F \
+ 87 57 32 0E 87 57 00 00 00 00 00 00 00 00 00 00'" #sdk56638.hex
+
+if !"expr $pcidev + 0 == 0xb639" "local ledcode '\
+ 02 1E 28 67 2C 02 26 28 67 2C 02 2A 28 67 2C 02 \
+ 32 28 67 2C 02 1A 28 67 2C 02 1B 28 67 2C 02 1C \
+ 28 67 2C 02 1D 28 67 2C 86 E0 3A 08 67 47 75 4E \
+ 28 32 00 32 01 B7 97 75 52 16 E0 CA 05 74 52 77 \
+ 4E 67 47 75 4E 77 52 12 A0 F8 15 1A 00 57 32 0F \
+ 87 57 32 0E 87 57 00 00 00 00 00 00 00 00 00 00'" #sdk56639.hex
+
+if !"expr $pcidev + 0 == 0xb334" "local ledcode '\
+ 02 02 28 60 E1 67 3D 67 1C 06 E1 80 D2 1E 74 02 \
+ 12 E0 85 05 D2 05 71 1A 52 00 3A 38 32 00 32 01 \
+ B7 97 75 2B 12 E2 FE E1 02 0A 50 12 E2 FE E1 95 \
+ 75 35 85 77 4C 16 E0 DA 02 71 50 77 4C 06 E1 67 \
+ 45 75 4C 77 50 12 A0 F8 15 1A 00 57 32 0F 87 57 \
+ 32 0E 87 57 00 00 00 00 00 00 00 00 00 00 00 00'" #sdk56334.hex
+
+if $?apollo "local ledcode '\
+ 02 1E 28 60 E0 67 58 67 73 06 E0 80 28 60 E0 67 \
+ 73 67 58 06 E0 80 D2 36 74 02 02 1A 28 60 E0 67 \
+ 9B 75 29 67 B0 67 58 77 31 32 0E 87 32 08 87 67 \
+ A2 06 E0 80 D2 1E 74 1C 12 E2 85 05 D2 0F 71 42 \
+ 52 00 12 E1 85 05 D2 1F 71 4C 52 00 12 E3 85 05 \
+ D2 05 71 56 52 00 3A 70 32 00 97 75 64 32 01 97 \
+ 71 6B 77 B0 32 01 97 71 A9 77 A2 16 E3 DA 02 71 \
+ A9 77 B0 32 05 97 75 83 32 02 97 71 A2 06 E1 D2 \
+ 01 71 A2 06 E0 67 9B 75 A2 32 03 97 71 B0 32 04 \
+ 97 75 A9 06 E2 D2 07 71 A9 77 B0 12 A0 F8 15 1A \
+ 00 57 32 0E 87 32 0E 87 57 32 0E 87 32 0F 87 57 \
+ 32 0F 87 32 0E 87 57 00 00 00 00 00 00 00 00 00'" #sdk56524.hex
+
+if $?tomahawk || $?tomahawk_plus "local ledcode '\
+ 02 00 28 60 E1 67 25 67 14 06 E1 80 D2 40 74 02 \
+ 86 E0 3A FC 28 32 00 32 01 B7 97 75 37 16 E0 CA \
+ 05 74 3E 77 37 67 2B 75 37 77 45 12 A0 F8 15 1A \
+ 00 57 28 32 07 97 57 32 0E 87 32 0E 87 57 32 0F \
+ 87 32 0E 87 57 32 0E 87 32 0F 87 57 00 00 00 00'" #sdk56960.hex
+
+if $?trident2plus "local ledcode '\
+ 02 01 28 60 E1 67 31 67 20 06 E1 80 D2 31 74 02 \
+ 86 E0 3A C0 67 37 75 1C 67 51 77 20 67 43 77 43 \
+ 28 32 00 32 01 B7 97 75 43 16 E0 CA 05 74 4A 77 \
+ 43 67 37 75 43 77 51 12 A0 F8 15 1A 00 57 28 32 \
+ 07 97 57 32 0E 87 32 0E 87 57 32 0F 87 32 0E 87 \
+ 57 32 0E 87 32 0F 87 57 00 00 00 00 00 00 00 00'" #sdk56860.hex
+
+if $?apache "local ledcode '\
+ 02 00 67 24 67 0F 80 D2 24 74 02 86 E0 3A F8 67 \
+ 34 75 16 77 1D 57 67 3C 75 62 77 44 57 67 3C 75 \
+ 4E 77 58 57 67 2C 75 62 77 70 07 57 07 12 A0 F8 \
+ 15 1A 00 57 07 12 A0 F8 15 1A 04 57 07 12 A0 F8 \
+ 15 1A 05 57 16 E0 CA 1E 74 69 77 62 07 57 16 E0 \
+ CA 1E 74 70 77 62 07 57 16 E0 CA 1E 74 69 77 70 \
+ 07 57 32 0E 87 32 0E 87 57 32 0F 87 32 0E 87 57 \
+ 32 0E 87 32 0F 87 57 00 00 00 00 00 00 00 00 00'" #sdk56560.hex
+
+if $?generic8led "local ledcode '\
+ 06 E1 D2 40 71 11 E0 60 E1 16 E3 DA 01 71 15 60 \
+ E3 67 5D 75 2B 12 01 61 E3 67 71 28 67 32 86 E0 \
+ 16 E2 81 61 E2 DA 1E 75 2B 3A 08 E9 61 E2 86 E1 \
+ 77 00 67 5D 75 38 77 3C 67 64 77 64 67 41 67 4F \
+ 57 28 32 01 97 75 64 16 E0 CA 05 74 68 77 64 28 \
+ 32 00 97 75 64 16 E0 CA 05 74 68 77 64 12 A0 F8 \
+ 15 1A 00 57 32 0F 87 57 32 0E 87 57 09 75 64 77 \
+ 68 12 05 67 6C 12 04 67 6C 12 03 67 6C 12 02 67 \
+ 6C 12 01 67 6C 12 00 67 6C 57 00 00 00 00 00 00'" #generic8led.hex
+
+# Download LED code into LED processor and enable (if applicable).
+
+if $?feature_led_proc && $?ledcode && !$?simulator \
+	"led prog $ledcode; \
+	 led auto on; led start"
+
+# Setup Greyhound LED processor
+if $?greyhound \
+    "rcload gh_ledup.soc"
+
+# Setup Hurricane3 LED processor
+if $?hurricane3 \
+    "rcload hr3_led.soc"
+
+# Setup Tomahawk LED processor
+if $?tomahawk && !$?simulator \
+    "led 1 prog $ledcode; \
+     led 1 auto on; led 1 start; \
+     led 2 prog $ledcode; \
+     led 2 auto on; led 2 start"
+
+# Setup Tomahawk+ LED processor
+if $?tomahawk_plus && !$?simulator \
+    "led 1 prog $ledcode; \
+     led 1 auto on; led 1 start; \
+     led 2 prog $ledcode; \
+     led 2 auto on; led 2 start"
+
+# If loading multiple rc.soc, upon loading the last unit, restart
+# all LED processors so any common blinking is in sync.
+
+if !"expr $?feature_led_proc && !$?simulator && $unit == $units - 1" \
+	"*:led stop; *:led start"
+
+# Run counter DMA task 4 times per second to achieve better
+# ctr_xaui_activity.
+if $?bradley_any \
+        "ctr interval=250000"
+
+# Initialize Hercules UC modid 0 entry to point to the CPU
+if $?herc_any \
+	"w uc 0 1 1"
+
+# Additional configuration for 48-port in Stacking mode.
+# On the 48-port platform, rc.soc is run twice; once on unit 0 and
+# then once on unit 1.  The turbo port on unit N is geN.
+# All turbo port traffic must be tagged; see vlan add below.
+# See $SDK/doc/48-port.txt for more information including how
+# to configure IPG values for line rate operation.
+
+if $?p48 && $?unit0 \
+	"local turbo_port 0; local my_modid 1;"
+
+if $?p48 && $?unit1 \
+	"local turbo_port 1; local my_modid 2;"
+
+if $?p48 \
+	"m config st_is_mirr=0 st_module=1 st_mcnt=1 st_simplex=0 st_link=0; \
+	 m config.g$turbo_port st_link=1; \
+	 m gmacc2.ge$turbo_port ipgt=8 mclkfq=1; \
+	 m fe_maxf maxfr=1560; \
+	 m maxfr maxfr=1568; \
+	 m config2 my_modid=$my_modid; \
+	 port ge$turbo_port speed=2500; \
+	 vlan add 1 pbm=ge$turbo_port ubm=none"
+
+if !$?no_bcm && $?drac_any \
+   "m modport_7_0 port_for_mod1=0xc"
+if !$?no_bcm && $?lynx_any \
+   "m modport_7_0 port_for_mod1=0x1"
+if !$?no_bcm && $?tucana \
+   "stkmode modid=0;"
+if !$?no_bcm && $?tucana && !$?magnum && !$?tucana_nohg \
+   "m modport_7_0 port_for_mod2=0x38; \
+    m imodport_7_0 port_for_mod0=0 port_for_mod1=0 port_for_mod2=0x38; \
+    stkmode modid=0"
+if !$?no_bcm && $?xgs_switch && !$?rcpu_only\
+   "stkmode modid=0; \
+    s CMIC_COS_CTRL_RX CH0_COS_BMP=0,CH1_COS_BMP=0xff, \
+        CH2_COS_BMP=0,CH3_COS_BMP=0"
+
+# Back-to-back Draco setup.
+
+# Draco chips must run at 127MHz. Some older versions
+# are not set to this frequency.
+
+if $?draco_stk && $?unit0 \
+    "i2c probe quiet; bb clock Ref125 127"
+
+# Applies to SDK Baseboard with either internal or external Higigs,
+# as well as the Galahad reference design.
+
+if $?draco_b2b && $?unit0 \
+    "stkmode modid=0; \
+     m modport_7_0 port_for_mod0=0 port_for_mod1=12; \
+     m imodport_7_0 port_for_mod0=0 port_for_mod1=12"
+
+if !$?simulator && $?draco_b2b && $?unit0 \
+     "i2c probe quiet; bb clock Ref125 127"
+
+if $?draco_b2b && $?unit1 \
+    "stkmode modid=1; \
+     m modport_7_0 port_for_mod0=12 port_for_mod1=0; \
+     m imodport_7_0 port_for_mod0=12 port_for_mod1=0"
+
+# Merlin, White Knight, Black Knight setup.
+#	Draco unit 1 is on Herc port 8
+#	Draco unit 2 is on Herc port 1
+
+if $?draco_herc4 && $?unit0 \
+    "w uc.hpic7 0 1 0x0; \
+     w uc.hpic7 1 1 0x2; \
+     w uc.hpic0 0 1 0x100; \
+     w uc.hpic0 1 1 0x0"
+
+if !$?simulator && $?draco_herc4 && $?unit0 \
+     "i2c probe quiet; bb clock Ref125 127"
+
+if $?draco_herc4 && $?unit1 \
+    "stkmode modid=0; \
+     m modport_7_0 port_for_mod0=0 port_for_mod1=12; \
+     m imodport_7_0 port_for_mod0=0 port_for_mod1=12"
+
+if $?draco_herc4 && $?unit2 \
+    "stkmode modid=1; \
+     m modport_7_0 port_for_mod0=12 port_for_mod1=0; \
+     m imodport_7_0 port_for_mod0=12 port_for_mod1=0"
+
+# Lancelot setup
+# (enabled by adding the property "lancelot=1")
+# Notes:
+#	Draco unit 1 is on Herc port 7
+#	Draco unit 2 is on Herc port 8
+#	Draco unit 3 is on Herc port 1
+#	Draco unit 4 is on Herc port 2
+
+if $?lancelot && $?unit0 \
+    "w uc.hpic6 0 1 0x0; \
+     w uc.hpic6 1 1 0x100; \
+     w uc.hpic6 2 1 0x2; \
+     w uc.hpic6 3 1 0x4; \
+     w uc.hpic7 0 1 0x80; \
+     w uc.hpic7 1 1 0x0; \
+     w uc.hpic7 2 1 0x2; \
+     w uc.hpic7 3 1 0x4; \
+     w uc.hpic0 0 1 0x80; \
+     w uc.hpic0 1 1 0x100; \
+     w uc.hpic0 2 1 0x0; \
+     w uc.hpic0 3 1 0x4; \
+     w uc.hpic1 0 1 0x80; \
+     w uc.hpic1 1 1 0x100; \
+     w uc.hpic1 2 1 0x2; \
+     w uc.hpic1 3 1 0x0"
+
+if !$?simulator && $?lancelot && $?unit0 \
+     "i2c probe quiet; bb clock Draco_Core 127"
+
+if $?lancelot && $?unit1 \
+    "stkmode modid=0; \
+     m modport_7_0 port_for_mod0=0 port_for_mod1=12 \
+     port_for_mod2=12 port_for_mod3=12; \
+     m imodport_7_0 port_for_mod0=0 port_for_mod1=12 \
+     port_for_mod2=12 port_for_mod3=12"
+
+if $?lancelot && $?unit2 \
+    "stkmode modid=1; \
+     m modport_7_0 port_for_mod0=12 port_for_mod1=0 \
+     port_for_mod2=12 port_for_mod3=12; \
+     m imodport_7_0 port_for_mod0=12 port_for_mod1=0 \
+     port_for_mod2=12 port_for_mod3=12"
+
+if $?lancelot && $?unit3 \
+    "stkmode modid=2; \
+     m modport_7_0 port_for_mod0=12 port_for_mod1=12 \
+     port_for_mod2=0 port_for_mod3=12; \
+     m imodport_7_0 port_for_mod0=12 port_for_mod1=12 \
+     port_for_mod2=0 port_for_mod3=12"
+
+if $?lancelot && $?unit4 \
+    "stkmode modid=3; \
+     m modport_7_0 port_for_mod0=12 port_for_mod1=12 \
+     port_for_mod2=12 port_for_mod3=0; \
+     m imodport_7_0 port_for_mod0=12 port_for_mod1=12 \
+     port_for_mod2=12 port_for_mod3=0"
+
+# Lynx SDK (TwoLynx) setup
+# (enabled by adding the property "twolynx=1")
+
+if $?twolynx && $?unit0 \
+    "stkmode modid=0; \
+     m modport_7_0 port_for_mod0=0 port_for_mod1=1; \
+     m imodport_7_0 port_for_mod0=0 port_for_mod1=1; \
+     "
+
+if $?twolynx && $?unit1 \
+    "stkmode modid=1; \
+     m modport_7_0 port_for_mod0=1 port_for_mod1=0; \
+     m imodport_7_0 port_for_mod0=1 port_for_mod1=0; \
+     "
+# HercuLynx setup
+# (enabled by adding the property "herculynx=1")
+# Notes:
+#	Lynx unit 1 is on Herc port 1
+#	Lynx unit 2 is on Herc port 2
+#	Lynx unit 3 is on Herc port 3
+#	Lynx unit 4 is on Herc port 4
+#	Lynx unit 5 is on Herc port 5
+#	Lynx unit 6 is on Herc port 6
+#	Lynx unit 7 is on Herc port 7
+#	Lynx unit 8 is on Herc port 8
+
+if $?herculynx && $?unit0 \
+    " \
+     w uc.hpic0 0 1 0x002; \
+     w uc.hpic0 1 1 0x004; \
+     w uc.hpic0 2 1 0x008; \
+     w uc.hpic0 3 1 0x010; \
+     w uc.hpic0 4 1 0x020; \
+     w uc.hpic0 5 1 0x040; \
+     w uc.hpic0 6 1 0x080; \
+     w uc.hpic0 7 1 0x100; \
+                         ; \
+     w uc.hpic1 0 1 0x002; \
+     w uc.hpic1 1 1 0x004; \
+     w uc.hpic1 2 1 0x008; \
+     w uc.hpic1 3 1 0x010; \
+     w uc.hpic1 4 1 0x020; \
+     w uc.hpic1 5 1 0x040; \
+     w uc.hpic1 6 1 0x080; \
+     w uc.hpic1 7 1 0x100; \
+                         ; \
+     w uc.hpic2 0 1 0x002; \
+     w uc.hpic2 1 1 0x004; \
+     w uc.hpic2 2 1 0x008; \
+     w uc.hpic2 3 1 0x010; \
+     w uc.hpic2 4 1 0x020; \
+     w uc.hpic2 5 1 0x040; \
+     w uc.hpic2 6 1 0x080; \
+     w uc.hpic2 7 1 0x100; \
+                         ; \
+     w uc.hpic3 0 1 0x002; \
+     w uc.hpic3 1 1 0x004; \
+     w uc.hpic3 2 1 0x008; \
+     w uc.hpic3 3 1 0x010; \
+     w uc.hpic3 4 1 0x020; \
+     w uc.hpic3 5 1 0x040; \
+     w uc.hpic3 6 1 0x080; \
+     w uc.hpic3 7 1 0x100; \
+                         ; \
+     w uc.hpic4 0 1 0x002; \
+     w uc.hpic4 1 1 0x004; \
+     w uc.hpic4 2 1 0x008; \
+     w uc.hpic4 3 1 0x010; \
+     w uc.hpic4 4 1 0x020; \
+     w uc.hpic4 5 1 0x040; \
+     w uc.hpic4 6 1 0x080; \
+     w uc.hpic4 7 1 0x100; \
+                         ; \
+     w uc.hpic5 0 1 0x002; \
+     w uc.hpic5 1 1 0x004; \
+     w uc.hpic5 2 1 0x008; \
+     w uc.hpic5 3 1 0x010; \
+     w uc.hpic5 4 1 0x020; \
+     w uc.hpic5 5 1 0x040; \
+     w uc.hpic5 6 1 0x080; \
+     w uc.hpic5 7 1 0x100; \
+                         ; \
+     w uc.hpic6 0 1 0x002; \
+     w uc.hpic6 1 1 0x004; \
+     w uc.hpic6 2 1 0x008; \
+     w uc.hpic6 3 1 0x010; \
+     w uc.hpic6 4 1 0x020; \
+     w uc.hpic6 5 1 0x040; \
+     w uc.hpic6 6 1 0x080; \
+     w uc.hpic6 7 1 0x100; \
+                         ; \
+     w uc.hpic7 0 1 0x002; \
+     w uc.hpic7 1 1 0x004; \
+     w uc.hpic7 2 1 0x008; \
+     w uc.hpic7 3 1 0x010; \
+     w uc.hpic7 4 1 0x020; \
+     w uc.hpic7 5 1 0x040; \
+     w uc.hpic7 6 1 0x080; \
+     w uc.hpic7 7 1 0x100; \
+                         ; \
+     "
+
+if $?herculynx && $?lynx_any \
+     "m modport_7_0 \
+     port_for_mod0=1 port_for_mod1=1 \
+     port_for_mod2=1 port_for_mod3=1 \
+     port_for_mod4=1 port_for_mod5=1 \
+     port_for_mod6=1 port_for_mod7=1; \
+     m imodport_7_0 \
+     port_for_mod0=1 port_for_mod1=1 \
+     port_for_mod2=1 port_for_mod3=1 \
+     port_for_mod4=1 port_for_mod5=1 \
+     port_for_mod6=1 port_for_mod7=1; \
+     "
+
+if $?herculynx && $?unit1 \
+    "stkmode modid=0"
+
+if $?herculynx && $?unit2 \
+    "stkmode modid=1"
+
+if $?herculynx && $?unit3 \
+    "stkmode modid=2"
+
+if $?herculynx && $?unit4 \
+    "stkmode modid=3"
+
+if $?herculynx && $?unit5 \
+    "stkmode modid=4"
+
+if $?herculynx && $?unit6 \
+    "stkmode modid=5"
+
+if $?herculynx && $?unit7 \
+    "stkmode modid=6"
+
+if $?herculynx && $?unit8 \
+    "stkmode modid=7"
+
+# LynxaLot setup
+# (enabled by adding the property "lynxalot=1")
+# Notes:
+#	Lynx unit 0 is on Herc port 3 (hg2/hpic2) (mod 0)
+#	Lynx unit 1 is on Herc port 4 (hg3/hpic3) (mod 1)
+#	Higig conn 0 is on Herc port 5 (hg4/hpic4)
+#	Higig conn 1 is on Herc port 6 (hg5/hpic5)
+#	Draco unit 3 is on Herc port 7 (hg6/hpic6) (mod 2)
+#	Draco unit 4 is on Herc port 8 (hg7/hpic7) (mod 3)
+#	Draco unit 5 is on Herc port 1 (hg0/hpic0) (mod 4)
+#	Draco unit 6 is on Herc port 2 (hg1/hpic1) (mod 5)
+
+if $?lynxalot && $?unit2 \
+    " \
+     w uc.hpic0 0 1 0x008; \
+     w uc.hpic0 1 1 0x010; \
+     w uc.hpic0 2 1 0x080; \
+     w uc.hpic0 3 1 0x100; \
+     w uc.hpic0 4 1 0x002; \
+     w uc.hpic0 5 1 0x004; \
+                         ; \
+     w uc.hpic1 0 1 0x008; \
+     w uc.hpic1 1 1 0x010; \
+     w uc.hpic1 2 1 0x080; \
+     w uc.hpic1 3 1 0x100; \
+     w uc.hpic1 4 1 0x002; \
+     w uc.hpic1 5 1 0x004; \
+                         ; \
+     w uc.hpic2 0 1 0x008; \
+     w uc.hpic2 1 1 0x010; \
+     w uc.hpic2 2 1 0x080; \
+     w uc.hpic2 3 1 0x100; \
+     w uc.hpic2 4 1 0x002; \
+     w uc.hpic2 5 1 0x004; \
+                         ; \
+     w uc.hpic3 0 1 0x008; \
+     w uc.hpic3 1 1 0x010; \
+     w uc.hpic3 2 1 0x080; \
+     w uc.hpic3 3 1 0x100; \
+     w uc.hpic3 4 1 0x002; \
+     w uc.hpic3 5 1 0x004; \
+                         ; \
+     w uc.hpic6 0 1 0x008; \
+     w uc.hpic6 1 1 0x010; \
+     w uc.hpic6 2 1 0x080; \
+     w uc.hpic6 3 1 0x100; \
+     w uc.hpic6 4 1 0x002; \
+     w uc.hpic6 5 1 0x004; \
+                         ; \
+     w uc.hpic7 0 1 0x008; \
+     w uc.hpic7 1 1 0x010; \
+     w uc.hpic7 2 1 0x080; \
+     w uc.hpic7 3 1 0x100; \
+     w uc.hpic7 4 1 0x002; \
+     w uc.hpic7 5 1 0x004; \
+                         ; \
+     "
+
+if $?lynxalot && $?lynx_any \
+     "m modport_7_0 \
+     port_for_mod0=1 port_for_mod1=1 \
+     port_for_mod2=1 port_for_mod3=1 \
+     port_for_mod4=1 port_for_mod5=1 \
+     port_for_mod6=1 port_for_mod7=1; \
+     m imodport_7_0 \
+     port_for_mod0=1 port_for_mod1=1 \
+     port_for_mod2=1 port_for_mod3=1 \
+     port_for_mod4=1 port_for_mod5=1 \
+     port_for_mod6=1 port_for_mod7=1; \
+     "
+
+if $?lynxalot && $?drac_any \
+    "m modport_7_0 port_for_mod0=12 port_for_mod1=12 \
+     port_for_mod2=12 port_for_mod3=12 \
+     port_for_mod4=12 port_for_mod5=12 \
+     port_for_mod6=12 port_for_mod7=12; \
+     m imodport_7_0 port_for_mod0=12 port_for_mod1=12 \
+     port_for_mod2=12 port_for_mod3=12 \
+     port_for_mod4=12 port_for_mod5=12 \
+     port_for_mod6=12 port_for_mod7=12; \
+     "
+
+if $?lynxalot && $?unit0 \
+    "stkmode modid=0"
+     
+if $?lynxalot && $?unit1 \
+    "stkmode modid=1"
+
+if $?lynxalot && $?unit3 \
+    "stkmode modid=2"
+
+if $?lynxalot && $?unit4 \
+    "stkmode modid=3"
+
+if $?lynxalot && $?unit5 \
+    "stkmode modid=4"
+
+if $?lynxalot && $?unit6 \
+    "stkmode modid=5"
+
+# guenevere setup
+# (enabled by adding the property "guenevere=1")
+# Notes:
+#       hgX mapping based on pbmp_valid.0=0x1b7
+#	Draco unit 1 is on Herc port 1 (hg0/hpic0) (mod 0)
+#	Draco unit 2 is on Herc port 2 (hg1/hpic1) (mod 1)
+#	Lynx unit 3 is on Herc port 8 (hg5/hpic7) (mod 2)
+#	Lynx unit 4 is on Herc port 7 (hg4/hpic6) (mod 3)
+#	Higig conn 0 is on Herc port 4 (hg2/hpic3)
+#	Higig conn 1 is on Herc port 5 (hg3/hpic4)
+#       Herc port 3 - Unused (hpic2)
+#       Herc port 6 - Unused (hpic5)
+if $?guenevere && $?unit0 \
+    " \
+     w uc.hpic0 0 1 0x002; \
+     w uc.hpic0 1 1 0x004; \
+     w uc.hpic0 2 1 0x100; \
+     w uc.hpic0 3 1 0x080; \
+                         ; \
+     w uc.hpic1 0 1 0x002; \
+     w uc.hpic1 1 1 0x004; \
+     w uc.hpic1 2 1 0x100; \
+     w uc.hpic1 3 1 0x080; \
+                         ; \
+     w uc.hpic7 0 1 0x002; \
+     w uc.hpic7 1 1 0x004; \
+     w uc.hpic7 2 1 0x100; \
+     w uc.hpic7 3 1 0x080; \
+                         ; \
+     w uc.hpic6 0 1 0x002; \
+     w uc.hpic6 1 1 0x004; \
+     w uc.hpic6 2 1 0x100; \
+     w uc.hpic6 3 1 0x080; \
+                         ; \
+     "
+
+if $?guenevere && $?lynx_any \
+     "m modport_7_0 \
+     port_for_mod0=1 port_for_mod1=1 \
+     port_for_mod2=1 port_for_mod3=1 \
+     port_for_mod4=1 port_for_mod5=1 \
+     port_for_mod6=1 port_for_mod7=1; \
+     m imodport_7_0 \
+     port_for_mod0=1 port_for_mod1=1 \
+     port_for_mod2=1 port_for_mod3=1 \
+     port_for_mod4=1 port_for_mod5=1 \
+     port_for_mod6=1 port_for_mod7=1; \
+     "
+
+if $?guenevere && $?drac_any \
+    "m modport_7_0 port_for_mod0=12 port_for_mod1=12 \
+     port_for_mod2=12 port_for_mod3=12 \
+     port_for_mod4=12 port_for_mod5=12 \
+     port_for_mod6=12 port_for_mod7=12; \
+     m imodport_7_0 port_for_mod0=12 port_for_mod1=12 \
+     port_for_mod2=12 port_for_mod3=12 \
+     port_for_mod4=12 port_for_mod5=12 \
+     port_for_mod6=12 port_for_mod7=12; \
+     "
+
+if $?guenevere && $?unit1 \
+    "stkmode modid=0"
+     
+if $?guenevere && $?unit2 \
+    "stkmode modid=1"
+
+if $?guenevere && $?unit3 \
+    "stkmode modid=2"
+
+if $?guenevere && $?unit4 \
+    "stkmode modid=3"
+     
+# felix48 setup
+# (enabled by adding the property "felix48=1")
+# Notes:
+#       BCM56102 unit-0 higig port (port 26) is connected
+#       to BCM56102 Unit-1 higig port (port 26)
+#
+
+if $?felix48 && $?unit0 \
+    "stkmode modid=0 ; \
+     m IEGR_PORT MY_MODID=0; \
+     m XPORT_CONFIG MY_MODID=0; \
+     w MODPORT_MAP 1 1 HIGIG_PORT_BITMAP=0x4 ; \
+     "
+
+if $?felix48 && $?unit1 \
+    "stkmode modid=1 ; \
+     m IEGR_PORT MY_MODID=1; \
+     m XPORT_CONFIG MY_MODID=1; \
+     w MODPORT_MAP 0 1 HIGIG_PORT_BITMAP=0x4 ; \
+     "
+# fbpoe setup
+# (enabled by adding the property "fbpoe=1")
+# Notes:
+#       BCM56504 unit-0 higig port (port 27,28) is connected
+#       to BCM56504 Unit-1 higig port (port 27,28)
+#
+
+if $?unit0 && $?firebolt_any && $?fbpoe     \
+  "stkmode modid=0;           \
+   w modport_map 1 1 HIGIG_PORT_BITMAP=0x4; \
+   m HIGIG_TRUNK_GROUP HIGIG_TRUNK_RTAG1=3 \
+                       HIGIG_TRUNK_ID1_PORT0=2 \
+                       HIGIG_TRUNK_ID1_PORT1=3 \
+                       HIGIG_TRUNK_ID1_PORT2=2 \
+                       HIGIG_TRUNK_ID1_PORT3=3; \
+   m HIGIG_TRUNK_CONTROL HIGIG_TRUNK_ID2=1 \
+                         HIGIG_TRUNK2=1 \
+                         HIGIG_TRUNK_ID3=1 \
+                         HIGIG_TRUNK3=1 \
+                         HIGIG_TRUNK_BITMAP1=0xc \
+                         ACTIVE_PORT_BITMAP=0xf"
+
+if $?unit1 && $?firebolt_any && $?fbpoe \
+  "stkmode modid=1; \
+   w modport_map 0 1 HIGIG_PORT_BITMAP=0x4; \
+   m HIGIG_TRUNK_GROUP HIGIG_TRUNK_RTAG1=3 \
+                       HIGIG_TRUNK_ID1_PORT0=2 \
+                       HIGIG_TRUNK_ID1_PORT1=3 \
+                       HIGIG_TRUNK_ID1_PORT2=2 \
+                       HIGIG_TRUNK_ID1_PORT3=3; \
+   m HIGIG_TRUNK_CONTROL HIGIG_TRUNK_ID2=1 \
+                         HIGIG_TRUNK2=1 \
+                         HIGIG_TRUNK_ID3=1 \
+                         HIGIG_TRUNK3=1 \
+                         HIGIG_TRUNK_BITMAP1=0xc \
+                         ACTIVE_PORT_BITMAP=0xf"
+
+# Dual Raptor/Raven boards
+if $?raven_eb_48p || $?rap24_ref \
+    "local rcpu_system 1"
+if $?unit0 && $?rcpu_system \
+   "stkmode modid=0"
+if $?unit1 && $?rcpu_system \
+   "stkmode modid=1"
+
+# LM fb48 platform setup
+# (enabled by adding the property "lm48p=1")
+#
+if $?unit0 && $?firebolt_any && $?lm48p || $?lm48p_D \
+   "stkmode modid=0"
+
+if $?unit1 && $?firebolt_any && $?lm48p || $?lm48p_D \
+   "stkmode modid=1"
+
+# Set Firebolt POE power level 170(total) - 110(switch) = 60
+if $?fbpoe \
+        "local poepower 60"
+
+# Set Draco15 POE power level 170(total) - 80(switch) = 90
+if $?drac15\
+        "local poepower 90"
+
+# Hurricane3 BCM956160R setup
+# Notes:
+#       BCM56160 unit-0 higig port (port 29,30) is connected
+#       to BCM56160 Unit-1 higig port (port 26,27)
+#
+
+if $?bcm956160r && $?unit0  \
+  "stkmode modid=0; \
+   w modport_map 1 1 HIGIG_PORT_BITMAP=0x60000000; \
+   trunk add id=128 r=3 pbm=hg0-hg1"
+
+if $?bcm956160r && $?unit1  \
+  "stkmode modid=1; \
+   w modport_map 0 1 HIGIG_PORT_BITMAP=0xc000000; \
+   trunk add id=128 r=3 pbm=hg0-hg1"
+
+# if enable_poe is set, then enable the POE processor for
+# either Firebolt or Draco15 platform
+if $?unit0 && $?enable_poe && $?fbpoe || $?drac15 \
+        "$echo rc: Enabling POE ...; \
+         poesel reset; \
+         i2c probe quiet; \
+         xpoe verbose off; \
+         xpoe power $poepower; \
+         xpoe verbose on; \
+         poesel enable"
+
+# mark this unit so that subsequent rc runs are quiet
+setenv rc$unit 1
+
+if $?macsec '\
+    macsec sync; \
+    $echo "rc: MACSEC CLI Enabled"'
+
+# cache a copy of rc.soc in memory
+rccache addq rc.soc
+
+# setup chassis if requested
+if !"expr $?autochassis2 && $unit == $units - 1" \
+    "setenv chassis2_no_rc 1; \
+     rcload c2switch.soc; \
+     setenv chassis2_no_rc; \
+    "
+
+# start stacking if requested
+if !"expr $?autostack && $unit == $units - 1" \
+	"rcload stk.soc"
+
+if !"expr $?aedev + 0" && !"expr $unit == $units - 1" \
+       "aedev init"
+
+# hurricane 48p FE platform LED setup for 56146_A0 and 56147_A0 board
+# (enabled by adding the property "fe_hu_48p=1")
+#
+if $?fe_hu_48p && $?BCM56146 || $?BCM56147 \
+    "phy fe0 0x1f 0x008b; \
+     phy fe0 0x1a 0x3f09;\
+     phy fe8 0x1f 0x008b; \
+     phy fe8 0x1a 0x3f09; \
+     phy fe16 0x1f 0x008b; \
+     phy fe16 0x1a 0x3f09"
+
+# enable LED matrix mode for PHY54292 on BCM953411K/R
+if $?bcm953411 \
+    "rcload gh_bcm953411x.soc"
+
+if $?simulator \
+    'echo -n "Chip init finishes at: ";date'
+    
+    
diff --git a/bal_release/3rdparty/bcm-sdk/rc/qax/readme.txt b/bal_release/3rdparty/bcm-sdk/rc/qax/readme.txt
new file mode 100644
index 0000000..93b40db
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/rc/qax/readme.txt
@@ -0,0 +1,19 @@
+This directory contains bcm files that are needed in the QAX svk file system to bring up 
+the BCM Diag Shell.
+User should also copy the bcm.user linux-kernel-bde.ko and linux-user-bde.ko
+from the Jenkins BAL WRX build or private bcm_sdk build to the same QAX svk file system.
+!!!
+   Do not forget to change the IP in rpc.soc to point it to the BAL_CORE
+!!!
+The currently supported bcm_sdk version is 6.5.4
+.
+|-- bcm88470_board.soc
+|-- combo28_dram.soc
+|-- config.bcm
+|-- init.sh
+|-- qax.soc
+|-- rc.soc
+`-- rpc.soc
+ 
+  
+
diff --git a/bal_release/3rdparty/bcm-sdk/rc/qax/reload.soc b/bal_release/3rdparty/bcm-sdk/rc/qax/reload.soc
new file mode 100644
index 0000000..f48a50e
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/rc/qax/reload.soc
@@ -0,0 +1,8 @@
+#
+# $Id: reload-dune.soc,v 1.1 2011/12/13 15:37:13 assaf Exp $
+#
+# $Copyright: (c) 2006 Broadcom Corp.
+# All Rights Reserved.$
+
+setenv warmboot 1
+rcload rc.soc
diff --git a/bal_release/3rdparty/bcm-sdk/rc/qax/rpc.soc b/bal_release/3rdparty/bcm-sdk/rc/qax/rpc.soc
new file mode 100644
index 0000000..b20b75c
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/rc/qax/rpc.soc
@@ -0,0 +1,35 @@
+cpudb newdb
+
+cpudb add key=0x1
+
+cpudb add key=0x2 local=t
+
+cts atp trans sock server start
+
+cts atp cos=0 vlan=1
+
+cte reg mode=atp
+
+# NOTE: You must un-comment the line below and replace the IP address (10.10.10.10) with
+#       the value that matches your system.  The IP address must be the address of the linux
+#       instance where you run your bcm_bal or bcm_sdn_agent
+#
+#cts atp trans sock inst dk=0x1 dip=10.10.10.10
+
+rpc nonexthop
+
+rpc start
+
+# NOTE: To enable CPU packet send and receive (i.e. PacketOut and PacketIn for SDN),
+#       you must un-comment the lines below and replace the IP address (10.10.10.10) and port with
+#       the values that match your system.  The IP address must be the address of the linux
+#       instance where you run your bcm_bal or bcm_sdn_agent, and the port must match the values used
+#       in your bal_config.ini file
+#       (i.e. The trap_target port number here must match trap_udp_port in bal_config.ini, and the 
+#        trap_receive port here must match pkt_send_svr_listen_port in bal_config.ini)
+
+#
+#bal trap_target 10.10.10.10:50001
+
+#bal trap_receive 10.10.10.10:50002
+
diff --git a/bal_release/3rdparty/bcm-sdk/rc/svk4/bcm88470_board.soc b/bal_release/3rdparty/bcm-sdk/rc/svk4/bcm88470_board.soc
new file mode 100644
index 0000000..b944270
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/rc/svk4/bcm88470_board.soc
@@ -0,0 +1,211 @@
+# $Id:
+# $Copyright: (c) 1998-2001 Broadcom Corp.
+# All Rights Reserved.$
+#
+
+# Dram dq swaps for BCM88470
+
+#Dram HW properties
+
+#RX polarity
+config add phy_rx_polarity_flip.BCM88470=0
+
+
+#TX polarity
+config add phy_tx_polarity_flip.BCM88470=0
+
+#rx lane swap
+config add phy_rx_lane_map.BCM88470=0x3210
+config add phy_rx_lane_map_quad0.BCM88470=0x3210
+config add phy_rx_lane_map_quad1.BCM88470=0x3210
+config add phy_rx_lane_map_quad2.BCM88470=0x3210
+config add phy_rx_lane_map_quad3.BCM88470=0x3210
+config add phy_rx_lane_map_quad4.BCM88470=0x3210
+config add phy_rx_lane_map_quad5.BCM88470=0x3210
+config add phy_rx_lane_map_quad6.BCM88470=0x3210
+config add phy_rx_lane_map_quad7.BCM88470=0x3210
+config add phy_rx_lane_map_quad8.BCM88470=0x3210
+config add phy_rx_lane_map_quad9.BCM88470=0x3210
+config add phy_rx_lane_map_quad10.BCM88470=0x3120
+config add phy_rx_lane_map_quad11.BCM88470=0x3210
+
+
+#tx lane swap
+config add phy_tx_lane_map.BCM88470=0x3210
+config add phy_tx_lane_map_quad0.BCM88470=0x3210
+config add phy_tx_lane_map_quad1.BCM88470=0x3210
+config add phy_tx_lane_map_quad2.BCM88470=0x3210
+config add phy_tx_lane_map_quad3.BCM88470=0x3210
+config add phy_tx_lane_map_quad4.BCM88470=0x3210
+config add phy_tx_lane_map_quad5.BCM88470=0x3210
+config add phy_tx_lane_map_quad6.BCM88470=0x3210
+config add phy_tx_lane_map_quad7.BCM88470=0x3210
+config add phy_tx_lane_map_quad8.BCM88470=0x3210
+config add phy_tx_lane_map_quad9.BCM88470=0x3210
+config add phy_tx_lane_map_quad10.BCM88470=0x3120
+config add phy_tx_lane_map_quad11.BCM88470=0x3210
+
+# Dram dq swaps for BCM88470
+config add ext_ram_dq_swap_dram0_byte0_bit0.BCM88470=1
+config add ext_ram_dq_swap_dram0_byte0_bit1.BCM88470=0
+config add ext_ram_dq_swap_dram0_byte0_bit2.BCM88470=5
+config add ext_ram_dq_swap_dram0_byte0_bit3.BCM88470=4
+config add ext_ram_dq_swap_dram0_byte0_bit4.BCM88470=3
+config add ext_ram_dq_swap_dram0_byte0_bit5.BCM88470=2
+config add ext_ram_dq_swap_dram0_byte0_bit6.BCM88470=6
+config add ext_ram_dq_swap_dram0_byte0_bit7.BCM88470=7
+config add ext_ram_dq_swap_dram0_byte1_bit0.BCM88470=7
+config add ext_ram_dq_swap_dram0_byte1_bit1.BCM88470=3
+config add ext_ram_dq_swap_dram0_byte1_bit2.BCM88470=5
+config add ext_ram_dq_swap_dram0_byte1_bit3.BCM88470=1
+config add ext_ram_dq_swap_dram0_byte1_bit4.BCM88470=4
+config add ext_ram_dq_swap_dram0_byte1_bit5.BCM88470=0
+config add ext_ram_dq_swap_dram0_byte1_bit6.BCM88470=6
+config add ext_ram_dq_swap_dram0_byte1_bit7.BCM88470=2
+config add ext_ram_dq_swap_dram0_byte2_bit0.BCM88470=5
+config add ext_ram_dq_swap_dram0_byte2_bit1.BCM88470=1
+config add ext_ram_dq_swap_dram0_byte2_bit2.BCM88470=7
+config add ext_ram_dq_swap_dram0_byte2_bit3.BCM88470=3
+config add ext_ram_dq_swap_dram0_byte2_bit4.BCM88470=4
+config add ext_ram_dq_swap_dram0_byte2_bit5.BCM88470=2
+config add ext_ram_dq_swap_dram0_byte2_bit6.BCM88470=0
+config add ext_ram_dq_swap_dram0_byte2_bit7.BCM88470=6
+config add ext_ram_dq_swap_dram0_byte3_bit0.BCM88470=3
+config add ext_ram_dq_swap_dram0_byte3_bit1.BCM88470=2
+config add ext_ram_dq_swap_dram0_byte3_bit2.BCM88470=5
+config add ext_ram_dq_swap_dram0_byte3_bit3.BCM88470=7
+config add ext_ram_dq_swap_dram0_byte3_bit4.BCM88470=6
+config add ext_ram_dq_swap_dram0_byte3_bit5.BCM88470=1
+config add ext_ram_dq_swap_dram0_byte3_bit6.BCM88470=4
+config add ext_ram_dq_swap_dram0_byte3_bit7.BCM88470=0
+config add ext_ram_dq_swap_dram1_byte0_bit0.BCM88470=6
+config add ext_ram_dq_swap_dram1_byte0_bit1.BCM88470=7
+config add ext_ram_dq_swap_dram1_byte0_bit2.BCM88470=5
+config add ext_ram_dq_swap_dram1_byte0_bit3.BCM88470=3
+config add ext_ram_dq_swap_dram1_byte0_bit4.BCM88470=1
+config add ext_ram_dq_swap_dram1_byte0_bit5.BCM88470=0
+config add ext_ram_dq_swap_dram1_byte0_bit6.BCM88470=4
+config add ext_ram_dq_swap_dram1_byte0_bit7.BCM88470=2
+config add ext_ram_dq_swap_dram1_byte1_bit0.BCM88470=3
+config add ext_ram_dq_swap_dram1_byte1_bit1.BCM88470=1
+config add ext_ram_dq_swap_dram1_byte1_bit2.BCM88470=5
+config add ext_ram_dq_swap_dram1_byte1_bit3.BCM88470=6
+config add ext_ram_dq_swap_dram1_byte1_bit4.BCM88470=0
+config add ext_ram_dq_swap_dram1_byte1_bit5.BCM88470=2
+config add ext_ram_dq_swap_dram1_byte1_bit6.BCM88470=7
+config add ext_ram_dq_swap_dram1_byte1_bit7.BCM88470=4
+config add ext_ram_dq_swap_dram1_byte2_bit0.BCM88470=0
+config add ext_ram_dq_swap_dram1_byte2_bit1.BCM88470=3
+config add ext_ram_dq_swap_dram1_byte2_bit2.BCM88470=1
+config add ext_ram_dq_swap_dram1_byte2_bit3.BCM88470=4
+config add ext_ram_dq_swap_dram1_byte2_bit4.BCM88470=6
+config add ext_ram_dq_swap_dram1_byte2_bit5.BCM88470=5
+config add ext_ram_dq_swap_dram1_byte2_bit6.BCM88470=7
+config add ext_ram_dq_swap_dram1_byte2_bit7.BCM88470=2
+config add ext_ram_dq_swap_dram1_byte3_bit0.BCM88470=2
+config add ext_ram_dq_swap_dram1_byte3_bit1.BCM88470=6
+config add ext_ram_dq_swap_dram1_byte3_bit2.BCM88470=1
+config add ext_ram_dq_swap_dram1_byte3_bit3.BCM88470=7
+config add ext_ram_dq_swap_dram1_byte3_bit4.BCM88470=4
+config add ext_ram_dq_swap_dram1_byte3_bit5.BCM88470=0
+config add ext_ram_dq_swap_dram1_byte3_bit6.BCM88470=5
+config add ext_ram_dq_swap_dram1_byte3_bit7.BCM88470=3
+config add ext_ram_dq_swap_dram2_byte0_bit0.BCM88470=7
+config add ext_ram_dq_swap_dram2_byte0_bit1.BCM88470=4
+config add ext_ram_dq_swap_dram2_byte0_bit2.BCM88470=0
+config add ext_ram_dq_swap_dram2_byte0_bit3.BCM88470=2
+config add ext_ram_dq_swap_dram2_byte0_bit4.BCM88470=3
+config add ext_ram_dq_swap_dram2_byte0_bit5.BCM88470=1
+config add ext_ram_dq_swap_dram2_byte0_bit6.BCM88470=6
+config add ext_ram_dq_swap_dram2_byte0_bit7.BCM88470=5
+config add ext_ram_dq_swap_dram2_byte1_bit0.BCM88470=2
+config add ext_ram_dq_swap_dram2_byte1_bit1.BCM88470=4
+config add ext_ram_dq_swap_dram2_byte1_bit2.BCM88470=0
+config add ext_ram_dq_swap_dram2_byte1_bit3.BCM88470=6
+config add ext_ram_dq_swap_dram2_byte1_bit4.BCM88470=5
+config add ext_ram_dq_swap_dram2_byte1_bit5.BCM88470=3
+config add ext_ram_dq_swap_dram2_byte1_bit6.BCM88470=1
+config add ext_ram_dq_swap_dram2_byte1_bit7.BCM88470=7
+config add ext_ram_dq_swap_dram2_byte2_bit0.BCM88470=1
+config add ext_ram_dq_swap_dram2_byte2_bit1.BCM88470=7
+config add ext_ram_dq_swap_dram2_byte2_bit2.BCM88470=3
+config add ext_ram_dq_swap_dram2_byte2_bit3.BCM88470=6
+config add ext_ram_dq_swap_dram2_byte2_bit4.BCM88470=5
+config add ext_ram_dq_swap_dram2_byte2_bit5.BCM88470=0
+config add ext_ram_dq_swap_dram2_byte2_bit6.BCM88470=2
+config add ext_ram_dq_swap_dram2_byte2_bit7.BCM88470=4
+config add ext_ram_dq_swap_dram2_byte3_bit0.BCM88470=0
+config add ext_ram_dq_swap_dram2_byte3_bit1.BCM88470=7
+config add ext_ram_dq_swap_dram2_byte3_bit2.BCM88470=4
+config add ext_ram_dq_swap_dram2_byte3_bit3.BCM88470=6
+config add ext_ram_dq_swap_dram2_byte3_bit4.BCM88470=2
+config add ext_ram_dq_swap_dram2_byte3_bit5.BCM88470=5
+config add ext_ram_dq_swap_dram2_byte3_bit6.BCM88470=3
+config add ext_ram_dq_swap_dram2_byte3_bit7.BCM88470=1
+
+# Dram bank addr swaps for BCM88470
+config add ext_ram_addr_bank_swap_dram0_bit7.BCM88470=4
+config add ext_ram_addr_bank_swap_dram0_bit11.BCM88470=5
+config add ext_ram_addr_bank_swap_dram0_bit13.BCM88470=15
+config add ext_ram_addr_bank_swap_dram0_bit14.BCM88470=17
+config add ext_ram_addr_bank_swap_dram0_bit5.BCM88470=6
+config add ext_ram_addr_bank_swap_dram0_bit0.BCM88470=7
+config add ext_ram_addr_bank_swap_dram0_bit8.BCM88470=8
+config add ext_ram_addr_bank_swap_dram0_bit1.BCM88470=9
+config add ext_ram_addr_bank_swap_dram0_bit4.BCM88470=10
+config add ext_ram_addr_bank_swap_dram0_bit16.BCM88470=11
+config add ext_ram_addr_bank_swap_dram0_bit15.BCM88470=12
+config add ext_ram_addr_bank_swap_dram0_bit12.BCM88470=13
+config add ext_ram_addr_bank_swap_dram0_bit6.BCM88470=0
+config add ext_ram_addr_bank_swap_dram0_bit2.BCM88470=1
+config add ext_ram_addr_bank_swap_dram0_bit9.BCM88470=2
+config add ext_ram_addr_bank_swap_dram0_bit10.BCM88470=14
+config add ext_ram_addr_bank_swap_dram0_bit17.BCM88470=16
+config add ext_ram_addr_bank_swap_dram1_bit10.BCM88470=4
+config add ext_ram_addr_bank_swap_dram1_bit14.BCM88470=5
+config add ext_ram_addr_bank_swap_dram1_bit7.BCM88470=15
+config add ext_ram_addr_bank_swap_dram1_bit12.BCM88470=17
+config add ext_ram_addr_bank_swap_dram1_bit4.BCM88470=6
+config add ext_ram_addr_bank_swap_dram1_bit6.BCM88470=7
+config add ext_ram_addr_bank_swap_dram1_bit9.BCM88470=8
+config add ext_ram_addr_bank_swap_dram1_bit1.BCM88470=9
+config add ext_ram_addr_bank_swap_dram1_bit5.BCM88470=10
+config add ext_ram_addr_bank_swap_dram1_bit11.BCM88470=11
+config add ext_ram_addr_bank_swap_dram1_bit8.BCM88470=12
+config add ext_ram_addr_bank_swap_dram1_bit13.BCM88470=13
+config add ext_ram_addr_bank_swap_dram1_bit0.BCM88470=0
+config add ext_ram_addr_bank_swap_dram1_bit15.BCM88470=1
+config add ext_ram_addr_bank_swap_dram1_bit2.BCM88470=2
+config add ext_ram_addr_bank_swap_dram1_bit17.BCM88470=14
+config add ext_ram_addr_bank_swap_dram1_bit16.BCM88470=16
+config add ext_ram_addr_bank_swap_dram2_bit15.BCM88470=4
+config add ext_ram_addr_bank_swap_dram2_bit5.BCM88470=5
+config add ext_ram_addr_bank_swap_dram2_bit11.BCM88470=15
+config add ext_ram_addr_bank_swap_dram2_bit7.BCM88470=17
+config add ext_ram_addr_bank_swap_dram2_bit17.BCM88470=6
+config add ext_ram_addr_bank_swap_dram2_bit0.BCM88470=7
+config add ext_ram_addr_bank_swap_dram2_bit16.BCM88470=8
+config add ext_ram_addr_bank_swap_dram2_bit2.BCM88470=9
+config add ext_ram_addr_bank_swap_dram2_bit13.BCM88470=10
+config add ext_ram_addr_bank_swap_dram2_bit9.BCM88470=11
+config add ext_ram_addr_bank_swap_dram2_bit12.BCM88470=12
+config add ext_ram_addr_bank_swap_dram2_bit6.BCM88470=13
+config add ext_ram_addr_bank_swap_dram2_bit14.BCM88470=0
+config add ext_ram_addr_bank_swap_dram2_bit8.BCM88470=1
+config add ext_ram_addr_bank_swap_dram2_bit1.BCM88470=2
+config add ext_ram_addr_bank_swap_dram2_bit4.BCM88470=14
+config add ext_ram_addr_bank_swap_dram2_bit10.BCM88470=16
+
+##Dram HW properties
+config add ext_ram_present.BCM88470=3
+config add dram_type_DDR4_MICRON_Y4016AABG_JD_F_4GBIT=1
+config add ext_ram_freq.BCM88470=1600
+config add ext_ram_abi.BCM88470=0
+config add ext_ram_write_dbi.BCM88470=0
+config add ext_ram_read_dbi.BCM88470=0
+config add ext_ram_write_crc.BCM88470=0
+config add ext_ram_read_crc.BCM88470=0
+config add ext_ram_cmd_par_latency.BCM88470=6
+config add ext_ram_type.BCM88470=DDR4
+config add ext_ram_total_size.BCM88470=3000
+
diff --git a/bal_release/3rdparty/bcm-sdk/rc/svk4/combo28_dram.soc b/bal_release/3rdparty/bcm-sdk/rc/svk4/combo28_dram.soc
new file mode 100644
index 0000000..d47c1f5
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/rc/svk4/combo28_dram.soc
@@ -0,0 +1,560 @@
+#
+# $Id: combo28_dram.soc,v 1.0 2014/04/28 15:50:00 nhefetz Exp $
+#
+# $Copyright: (c) 2014 Broadcom Corporation
+# All Rights Reserved.$
+#
+
+#################### General Notes ########################
+# Our controller support both DDR4 and GDDR5, we need to "modify" ext_ram_columns in the following way:
+#   For DDR4, need to use column number as in DRAM Data Sheet, meaning 1024 in drams supported.
+#   For GDDR5, need to multiply number in Data Sheet by 8 (representing the 3 address bits, which are constant 000 in DDR4.), meaning 512 in drams supported.
+
+
+if $?dram_type_DDR4_SAMSUNG_K4A4G165WD_4GBIT "\
+  config add ext_ram_type=DDR4; \
+  config add ext_ram_t_rfc=260000;\
+  config add ext_ram_t_rc=45320;\
+  config add ext_ram_t_rcd_wr=13320;\
+  config add ext_ram_t_rcd_rd=13320;\
+  config add ext_ram_t_rrd_l=8c;\
+  config add ext_ram_t_rrd_s=7c;\
+  config add ext_ram_t_ras=32000;\
+  config add ext_ram_t_rp=13320;\
+  config add ext_ram_t_wr=15000;\
+  config add ext_ram_t_faw=30000;\
+  config add ext_ram_t_rtp_s=10c;\
+  config add ext_ram_t_rtp_l=10c;\
+  config add ext_ram_t_wtr_s=4c;\\
+  config add ext_ram_t_wtr_l=10c;\\
+  config add ext_ram_t_ccd_l=6c;\\
+  config add ext_ram_t_ccd_s=4c;\
+  config add ext_ram_t_zqcs=128c;\
+  config add ext_ram_t_crc_alert=13000;\
+  config add ext_ram_t_rst=500000000;\
+  config add ext_ram_t_ref=3900000;\
+  config add ext_ram_c_wr_latency=12c;\
+  config add ext_ram_c_cas_latency=17c;\
+  config add ext_ram_t_al=0;\
+  config add ext_ram_columns=1024; \
+  config add ext_ram_rows=32768; \
+  config add ext_ram_banks=8;"
+
+if $?dram_type_DDR4_MICRON_EDY4016AABG_DRFR_4GBIT "\
+  config add ext_ram_type=DDR4; \
+  config add ext_ram_t_rfc=260000;\
+  config add ext_ram_t_rc=45320;\
+  config add ext_ram_t_rcd_wr=13320;\
+  config add ext_ram_t_rcd_rd=13320;\
+  config add ext_ram_t_rrd_l=8c;\
+  config add ext_ram_t_rrd_s=7c;\
+  config add ext_ram_t_ras=32000;\
+  config add ext_ram_t_rp=13320;\
+  config add ext_ram_t_wr=15000;\
+  config add ext_ram_t_faw=30000;\
+  config add ext_ram_t_rtp_s=10c;\
+  config add ext_ram_t_rtp_l=10c;\
+  config add ext_ram_t_wtr_s=4c;\\
+  config add ext_ram_t_wtr_l=10c;\\
+  config add ext_ram_t_ccd_l=6c;\\
+  config add ext_ram_t_ccd_s=4c;\
+  config add ext_ram_t_zqcs=128c;\
+  config add ext_ram_t_crc_alert=13000;\
+  config add ext_ram_t_rst=500000000;\
+  config add ext_ram_t_ref=3900000;\
+  config add ext_ram_c_wr_latency=12c;\
+  config add ext_ram_c_cas_latency=16c;\
+  config add ext_ram_t_al=0;\
+  config add ext_ram_columns=1024; \
+  config add ext_ram_rows=32768; \
+  config add ext_ram_banks=8;"
+
+########################################################################
+# Note: Not for new design not recommended to be used and not supported
+########################################################################
+if $?dram_type_DDR4_MICRON_MT40A256M16HA_083EA_4GBIT "\
+  config add ext_ram_type=DDR4; \
+  config add ext_ram_t_rfc=260000;\
+  config add ext_ram_t_rc=47000;\
+  config add ext_ram_t_rcd_wr=15000;\
+  config add ext_ram_t_rcd_rd=15000;\
+  config add ext_ram_t_rrd_l=11c;\
+  config add ext_ram_t_rrd_s=9c;\
+  config add ext_ram_t_ras=32000;\
+  config add ext_ram_t_rp=15000;\
+  config add ext_ram_t_wr=14900;\
+  config add ext_ram_t_faw=30000;\
+  config add ext_ram_t_rtp_s=12c;\
+  config add ext_ram_t_rtp_l=12c;\
+  config add ext_ram_t_wtr_s=4c;\\
+  config add ext_ram_t_wtr_l=12c;\\
+  config add ext_ram_t_ccd_l=8c;\\
+  config add ext_ram_t_ccd_s=4c;\
+  config add ext_ram_t_zqcs=170c;\
+  config add ext_ram_t_crc_alert=13000;\
+  config add ext_ram_t_rst=500000000;\
+  config add ext_ram_t_ref=3900000;\
+  config add ext_ram_c_wr_latency=18c;\
+  config add ext_ram_c_cas_latency=24c;\
+  config add ext_ram_t_al=0;\
+  config add ext_ram_columns=1024; \
+  config add ext_ram_rows=32768; \
+  config add ext_ram_banks=8;"
+
+########################################################################
+# Note: Not for new design not recommended to be used and not supported
+########################################################################
+if $?dram_type_DDR4_MICRON_MT40A512M16_8GBIT "\
+    config add ext_ram_type=DDR4; \
+    config add ext_ram_t_rfc=350000;\
+    config add ext_ram_t_rc=45320;\
+    config add ext_ram_t_rcd_wr=13320;\
+    config add ext_ram_t_rcd_rd=13320;\
+    config add ext_ram_t_rrd_l=8c;\
+    config add ext_ram_t_rrd_s=7c;\
+    config add ext_ram_t_ras=32000;\
+    config add ext_ram_t_wr=15000;\
+    config add ext_ram_t_faw=30000;\
+    config add ext_ram_t_rtp_s=10c;\
+    config add ext_ram_t_rtp_l=10c;\
+    config add ext_ram_t_wtr_s=4c;\\
+    config add ext_ram_t_wtr_l=10c;\
+    config add ext_ram_t_ccd_l=8c;\
+    config add ext_ram_t_ccd_s=4c;\
+    config add ext_ram_t_zqcs=128c;\
+    config add ext_ram_t_crc_alert=13000;\
+    config add ext_ram_t_rst=500000000;\
+    config add ext_ram_t_ref=3900000;\
+    config add ext_ram_c_wr_latency=12c;\
+    config add ext_ram_c_cas_latency=16c;\
+    config add ext_ram_t_al=0;\
+    config add ext_ram_columns=1024; \
+    config add ext_ram_rows=65536; \
+    config add ext_ram_t_rp=13320;\
+    config add ext_ram_banks=8;"
+
+if $?dram_type_DDR4_HYNIX_H5AN4G6NMFR_VJC_4GBIT "\
+  config add ext_ram_type=DDR4; \
+  config add ext_ram_t_rfc=260000;\
+  config add ext_ram_t_rc=45320;\
+  config add ext_ram_t_rcd_wr=13320;\
+  config add ext_ram_t_rcd_rd=13320;\
+  config add ext_ram_t_rrd_l=8c;\
+  config add ext_ram_t_rrd_s=4c;\
+  config add ext_ram_t_ras=32000;\
+  config add ext_ram_t_rp=13320;\
+  config add ext_ram_t_wr=15000;\
+  config add ext_ram_t_faw=30000;\
+  config add ext_ram_t_rtp_s=7500;\
+  config add ext_ram_t_rtp_l=7500;\
+  config add ext_ram_t_wtr_s=2500;\
+  config add ext_ram_t_wtr_l=7500;\
+  config add ext_ram_t_ccd_l=8c;\
+  config add ext_ram_t_ccd_s=4c;\
+  config add ext_ram_t_zqcs=128c;\
+  config add ext_ram_t_crc_alert=13000;\
+  config add ext_ram_t_crc_wr_latency=12c;\
+  config add ext_ram_t_rst=500000000;\
+  config add ext_ram_t_ref=3900000;\
+  config add ext_ram_c_wr_latency=16c;\
+  config add ext_ram_c_cas_latency=20c;\
+  config add ext_ram_t_al=0;\
+  config add ext_ram_columns=1024; \
+  config add ext_ram_rows=32768; \
+  config add ext_ram_banks=8;"
+
+if $?dram_type_DDR4_MICRON_Y4016AABG_JD_F_4GBIT "\
+  config add ext_ram_type=DDR4; \
+  config add ext_ram_t_rfc=260000;\
+  config add ext_ram_t_rc=47000;\
+  config add ext_ram_t_rcd_wr=15000;\
+  config add ext_ram_t_rcd_rd=15000;\
+  config add ext_ram_t_rrd_l=11c;\
+  config add ext_ram_t_rrd_s=9c;\
+  config add ext_ram_t_ras=32000;\
+  config add ext_ram_t_rp=15000;\
+  config add ext_ram_t_wr=14900;\
+  config add ext_ram_t_faw=30000;\
+  config add ext_ram_t_rtp_s=12c;\
+  config add ext_ram_t_rtp_l=12c;\
+  config add ext_ram_t_wtr_s=4c;\\
+  config add ext_ram_t_wtr_l=12c;\\
+  config add ext_ram_t_ccd_l=8c;\\
+  config add ext_ram_t_ccd_s=4c;\
+  config add ext_ram_t_zqcs=170c;\
+  config add ext_ram_t_crc_alert=13000;\
+  config add ext_ram_t_rst=500000000;\
+  config add ext_ram_t_ref=3900000;\
+  config add ext_ram_c_wr_latency=16c;\
+  config add ext_ram_c_cas_latency=24c;\
+  config add ext_ram_t_al=0;\
+  config add ext_ram_columns=1024; \
+  config add ext_ram_rows=32768; \
+  config add ext_ram_banks=8;"
+
+if $?dram_type_GDDR5_SAMSUNG_K4G20325FD_2GBIT "\
+  config add ext_ram_type=GDDR5; \
+  config add ext_ram_t_rfc=78000;\
+  config add ext_ram_t_rc=48000;\
+  config add ext_ram_t_rcd_wr=15000;\
+  config add ext_ram_t_rcd_rd=16000;\
+  config add ext_ram_t_rrd_l=6000;\
+  config add ext_ram_t_rrd_s=6000;\
+  config add ext_ram_t_ras=34000;\
+  config add ext_ram_t_rp=14000;\
+  config add ext_ram_t_wr=16000;\
+  config add ext_ram_t_faw=24000;\
+  config add ext_ram_t_32aw=192000;\
+  config add ext_ram_t_rtp_s=2c;\
+  config add ext_ram_t_rtp_l=4c;\
+  config add ext_ram_t_wtr_s=8c;\
+  config add ext_ram_t_wtr_l=10c;\
+  config add ext_ram_t_ccd_l=3c;\
+  config add ext_ram_t_ccd_s=2c;\
+  config add ext_ram_t_ref=1900000;\
+  config add ext_ram_c_wr_latency=3c;\
+  config add ext_ram_c_cas_latency=20c;\
+  config add ext_ram_t_crc_rd_latency=3c;\
+  config add ext_ram_t_crc_wr_latency=14c;\
+  config add ext_ram_t_rst=200000000;\
+  config add ext_ram_t_al=1c;\
+  config add ext_ram_columns=512; \
+  config add ext_ram_rows=8192; \
+  config add ext_ram_banks=16;"
+
+########################################################################
+# Note: Not for new design not recommended to be used and not supported
+########################################################################
+if $?dram_type_GDDR5_SAMSUNG_K4G41325FC_4GBIT "\
+  config add ext_ram_type=GDDR5; \
+  config add ext_ram_t_rfc=110000;\
+  config add ext_ram_t_rc=48000;\
+  config add ext_ram_t_rcd_wr=15000;\
+  config add ext_ram_t_rcd_rd=16000;\
+  config add ext_ram_t_rrd_l=6000;\
+  config add ext_ram_t_rrd_s=6000;\
+  config add ext_ram_t_ras=34000;\
+  config add ext_ram_t_rp=14000;\
+  config add ext_ram_t_wr=16000;\
+  config add ext_ram_t_faw=24000;\
+  config add ext_ram_t_32aw=192000;\
+  config add ext_ram_t_rtp_s=2c;\
+  config add ext_ram_t_rtp_l=4c;\
+  config add ext_ram_t_wtr_s=8c;\
+  config add ext_ram_t_wtr_l=10c;\
+  config add ext_ram_t_ccd_l=3c;\
+  config add ext_ram_t_ccd_s=2c;\
+  config add ext_ram_t_ref=1900000;\
+  config add ext_ram_c_wr_latency=3c;\
+  config add ext_ram_c_cas_latency=20c;\
+  config add ext_ram_t_crc_rd_latency=3c;\
+  config add ext_ram_t_crc_wr_latency=14c;\
+  config add ext_ram_t_rst=200000000;\
+  config add ext_ram_t_al=1c;\
+  config add ext_ram_columns=512; \
+  config add ext_ram_rows=16384; \
+  config add ext_ram_banks=16;"
+
+#if $?dram_type_GDDR5_HYNIX_H5GQ2H24AFR_R0C_2GBIT "\
+#  config add ext_ram_type=GDDR5; \
+#  config add ext_ram_t_rfc=120000;\
+#  config add ext_ram_t_rc=48000;\
+#  config add ext_ram_t_rcd_wr=14000;\
+#  config add ext_ram_t_rcd_rd=18000;\
+#  config add ext_ram_t_rrd_l=9c;\
+#  config add ext_ram_t_rrd_s=9c;\
+#  config add ext_ram_t_ras=32000;\
+#  config add ext_ram_t_rp=16000;\
+#  config add ext_ram_t_wr=16000;\
+#  config add ext_ram_t_faw=30000;\
+#  config add ext_ram_t_32aw=245000;\
+#  config add ext_ram_t_rtp_s=2c;\
+#  config add ext_ram_t_rtp_l=2c;\
+#  config add ext_ram_t_wtr_s=8c;\
+#  config add ext_ram_t_wtr_l=8c;\
+#  config add ext_ram_t_ccd_l=3c;\
+#  config add ext_ram_t_ccd_s=2c;\
+#  config add ext_ram_t_ref=3900000;\
+#  config add ext_ram_c_wr_latency=3c;\
+#  config add ext_ram_c_cas_latency=16c;\
+#  config add ext_ram_t_crc_rd_latency=2c;\
+#  config add ext_ram_t_crc_wr_latency=11c;\
+#  config add ext_ram_t_rst=200000000;\
+#  config add ext_ram_t_al=1c;\
+#  config add ext_ram_columns=512; \
+#  config add ext_ram_rows=8192; \
+#  config add ext_ram_banks=16;"
+#
+
+###################################################
+#     ELPIDA GDDR5
+###################################################
+if $?dram_type_GDDR5_MICRON_EDW4032CABG_4GBIT "\
+  config add ext_ram_type=GDDR5; \
+  config add ext_ram_t_rfc=90000;\
+  config add ext_ram_t_rc=44000;\
+  config add ext_ram_t_rcd_wr=13000;\
+  config add ext_ram_t_rcd_rd=17000;\
+  config add ext_ram_t_rrd_l=5000;\
+  config add ext_ram_t_rrd_s=5000;\
+  config add ext_ram_t_ras=27000;\
+  config add ext_ram_t_rp=17000;\
+  config add ext_ram_t_wr=18000;\
+  config add ext_ram_t_faw=20000;\
+  config add ext_ram_t_32aw=160000;\
+  config add ext_ram_t_rtp_s=2c;\
+  config add ext_ram_t_rtp_l=2c;\
+  config add ext_ram_t_wtr_s=7c;\
+  config add ext_ram_t_wtr_l=7c;\
+  config add ext_ram_t_ccd_l=3c;\
+  config add ext_ram_t_ccd_s=2c;\
+  config add ext_ram_t_ref=1900000;\
+  config add ext_ram_c_wr_latency=4c;\
+  config add ext_ram_c_cas_latency=18c;\
+  config add ext_ram_t_crc_rd_latency=3c;\
+  config add ext_ram_t_crc_wr_latency=11c;\
+  config add ext_ram_t_rst=200000000;\
+  config add ext_ram_t_al=2c;\
+  config add ext_ram_columns=512; \
+  config add ext_ram_rows=16384; \
+  config add ext_ram_banks=16;"
+
+if $?dram_type_GDDR5_HYNIX_H5GC4H24MFR_T2C_4GBIT "\
+  config add ext_ram_type=GDDR5; \
+  config add ext_ram_t_rfc=120000;\
+  config add ext_ram_t_rc=48000;\
+  config add ext_ram_t_rcd_wr=14000;\
+  config add ext_ram_t_rcd_rd=18000;\
+  config add ext_ram_t_rrd_l=9c;\
+  config add ext_ram_t_rrd_s=9c;\
+  config add ext_ram_t_ras=32000;\
+  config add ext_ram_t_rp=16000;\
+  config add ext_ram_t_wr=16000;\
+  config add ext_ram_t_faw=30000;\
+  config add ext_ram_t_32aw=245000;\
+  config add ext_ram_t_rtp_s=2c;\
+  config add ext_ram_t_rtp_l=2c;\
+  config add ext_ram_t_wtr_s=8c;\
+  config add ext_ram_t_wtr_l=8c;\
+  config add ext_ram_t_ccd_l=3c;\
+  config add ext_ram_t_ccd_s=2c;\
+  config add ext_ram_t_ref=1900000;\
+  config add ext_ram_c_wr_latency=4c;\
+  config add ext_ram_c_cas_latency=18c;\
+  config add ext_ram_t_crc_rd_latency=2c;\
+  config add ext_ram_t_crc_wr_latency=13c;\
+  config add ext_ram_t_rst=200000000;\
+  config add ext_ram_t_al=1c;\
+  config add ext_ram_columns=512; \
+  config add ext_ram_rows=16384; \
+  config add ext_ram_banks=16;"
+
+###############################################################################################
+# Note: For extended devices for example Micron dram_type_DDR4_MICRON_MT40A256M16HA_083E
+#       please use none extended parameters for example dram_type_DDR4_MICRON_MT40A256M16HA_083
+###############################################################################################
+if $?dram_type_DDR4_MICRON_MT40A256M16HA_083_4GBIT "\
+  config add ext_ram_type=DDR4;\
+  config add ext_ram_freq=1200;\
+  config add ext_ram_t_rfc=260000;\
+  config add ext_ram_t_rc=46160;\
+  config add ext_ram_t_rcd_wr=14160;\
+  config add ext_ram_t_rcd_rd=14160;\
+  config add ext_ram_t_rrd_l=8c;\
+  config add ext_ram_t_rrd_s=7c;\
+  config add ext_ram_t_ras=32000;\
+  config add ext_ram_t_rp=14160;\
+  config add ext_ram_t_wr=15000;\
+  config add ext_ram_t_faw=30000;\
+  config add ext_ram_t_rtp_s=10c;\
+  config add ext_ram_t_rtp_l=10c;\
+  config add ext_ram_t_wtr_s=4c;\
+  config add ext_ram_t_wtr_l=10c;\
+  config add ext_ram_t_ccd_l=6c;\
+  config add ext_ram_t_ccd_s=4c;\
+  config add ext_ram_t_zqcs=128c;\
+  config add ext_ram_t_crc_alert=13000;\
+  config add ext_ram_t_rst=500000000;\
+  config add ext_ram_t_ref=3900000;\
+  config add ext_ram_c_wr_latency=12c;\
+  config add ext_ram_t_al=0;\
+  config add ext_ram_columns=1024;\
+  config add ext_ram_rows=32768;\
+  config add ext_ram_banks=8;\
+  config delete ext_ram_cmd_par_latency*;\
+  config add ext_ram_cmd_par_latency=5;\
+  config add ext_ram_c_cas_latency=17c;"
+expr $ext_ram_write_dbi+0 == 1
+if $? && $?dram_type_DDR4_MICRON_MT40A256M16HA_083_4GBIT "\
+  config add ext_ram_c_cas_latency=20c;"
+
+if $?dram_type_DDR4_MICRON_MT40A512M16HA_083_8GBIT "\
+  config add ext_ram_type=DDR4;\
+  config add ext_ram_freq=1200;\
+  config add ext_ram_t_rfc=350000;\
+  config add ext_ram_t_rc=46160;\
+  config add ext_ram_t_rcd_wr=14160;\
+  config add ext_ram_t_rcd_rd=14160;\
+  config add ext_ram_t_rrd_l=8c;\
+  config add ext_ram_t_rrd_s=7c;\
+  config add ext_ram_t_ras=32000;\
+  config add ext_ram_t_rp=14160;\
+  config add ext_ram_t_wr=15000;\
+  config add ext_ram_t_faw=30000;\
+  config add ext_ram_t_rtp_s=10c;\
+  config add ext_ram_t_rtp_l=10c;\
+  config add ext_ram_t_wtr_s=4c;\
+  config add ext_ram_t_wtr_l=10c;\
+  config add ext_ram_t_ccd_l=6c;\
+  config add ext_ram_t_ccd_s=4c;\
+  config add ext_ram_t_zqcs=128c;\
+  config add ext_ram_t_crc_alert=13000;\
+  config add ext_ram_t_rst=500000000;\
+  config add ext_ram_t_ref=3900000;\
+  config add ext_ram_c_wr_latency=12c;\
+  config add ext_ram_t_al=0;\
+  config add ext_ram_columns=1024;\
+  config add ext_ram_rows=65536;\
+  config add ext_ram_banks=8;\
+  config delete ext_ram_cmd_par_latency*;\
+  config add ext_ram_cmd_par_latency=5;\
+  config add ext_ram_c_cas_latency=17c;"
+expr $ext_ram_write_dbi+0 == 1
+if $? && $?dram_type_DDR4_MICRON_MT40A512M16HA_083_8GBIT "\
+  config add ext_ram_c_cas_latency=20c;"
+
+if $?dram_type_DDR4_MICRON_MT40A256M16GE_062_4GBIT "\
+  config add ext_ram_type=DDR4;\
+  config add ext_ram_freq=1600;\
+  config add ext_ram_t_rfc=260000;\
+  config add ext_ram_t_rc=47000;\
+  config add ext_ram_t_rcd_wr=15000;\
+  config add ext_ram_t_rcd_rd=15000;\
+  config add ext_ram_t_rrd_l=11c;\
+  config add ext_ram_t_rrd_s=9c;\
+  config add ext_ram_t_ras=32000;\
+  config add ext_ram_t_rp=15000;\
+  config add ext_ram_t_wr=14900;\
+  config add ext_ram_t_faw=30000;\
+  config add ext_ram_t_rtp_s=12c;\
+  config add ext_ram_t_rtp_l=12c;\
+  config add ext_ram_t_wtr_s=4c;\
+  config add ext_ram_t_wtr_l=12c;\
+  config add ext_ram_t_ccd_l=8c;\
+  config add ext_ram_t_ccd_s=4c;\
+  config add ext_ram_t_zqcs=170c;\
+  config add ext_ram_t_crc_alert=13000;\
+  config add ext_ram_t_rst=500000000;\
+  config add ext_ram_t_ref=3900000;\
+  config add ext_ram_c_wr_latency=16c;\
+  config add ext_ram_t_al=0;\
+  config add ext_ram_columns=1024;\
+  config add ext_ram_rows=32768;\
+  config add ext_ram_banks=8;\
+  config delete ext_ram_cmd_par_latency*;\
+  config add ext_ram_cmd_par_latency=8;\
+  config add ext_ram_c_cas_latency=24c;"
+expr $ext_ram_write_dbi+0 == 1
+if $? && $?dram_type_DDR4_MICRON_MT40A256M16GE_062_4GBIT "\
+  config add ext_ram_c_cas_latency=28c;"
+
+if $?dram_type_DDR4_SAMSUNG_K4A4G165WE_4GBIT "\
+  config add ext_ram_type=DDR4;\
+  config add ext_ram_freq=1200;\
+  config add ext_ram_t_rfc=260000;\
+  config add ext_ram_t_rc=46160;\
+  config add ext_ram_t_rcd_wr=14160;\
+  config add ext_ram_t_rcd_rd=14160;\
+  config add ext_ram_t_rrd_l=8c;\
+  config add ext_ram_t_rrd_s=7c;\
+  config add ext_ram_t_ras=32000;\
+  config add ext_ram_t_rp=14160;\
+  config add ext_ram_t_wr=15000;\
+  config add ext_ram_t_faw=30000;\
+  config add ext_ram_t_rtp_s=10c;\
+  config add ext_ram_t_rtp_l=10c;\
+  config add ext_ram_t_wtr_s=4c;\
+  config add ext_ram_t_wtr_l=10c;\
+  config add ext_ram_t_ccd_l=6c;\
+  config add ext_ram_t_ccd_s=4c;\
+  config add ext_ram_t_zqcs=128c;\
+  config add ext_ram_t_crc_alert=13000;\
+  config add ext_ram_t_rst=500000000;\
+  config add ext_ram_t_ref=3900000;\
+  config add ext_ram_c_wr_latency=12c ;\
+  config add ext_ram_t_al=0;\
+  config add ext_ram_columns=1024;\
+  config add ext_ram_rows=32768;\
+  config add ext_ram_banks=8;\
+  config delete ext_ram_cmd_par_latency*;\
+  config add ext_ram_cmd_par_latency=5;\
+  config add ext_ram_c_cas_latency=17c;"
+expr $ext_ram_write_dbi+0 == 1
+if $? && $?dram_type_DDR4_SAMSUNG_K4A4G165WE_4GBIT "\
+  config add ext_ram_c_cas_latency=20c;"
+
+if $?dram_type_GDDR5_MICRON_MT51K256M32HF_50_8GBIT "\
+  config add ext_ram_type=GDDR5;\
+  config add ext_ram_t_rfc=110000;\
+  config add ext_ram_t_rc=44000;\
+  config add ext_ram_t_rcd_wr=12000;\
+  config add ext_ram_t_rcd_rd=17000;\
+  config add ext_ram_t_rrd_l=5000;\
+  config add ext_ram_t_rrd_s=5000;\
+  config add ext_ram_t_ras=27000;\
+  config add ext_ram_t_rp=17000;\
+  config add ext_ram_t_wr=18000;\
+  config add ext_ram_t_faw=20000;\
+  config add ext_ram_t_32aw=160000;\
+  config add ext_ram_t_rtp_s=2c;\
+  config add ext_ram_t_rtp_l=2c;\
+  config add ext_ram_t_wtr_s=6c;\
+  config add ext_ram_t_wtr_l=6c;\
+  config add ext_ram_t_ccd_l=2c;\
+  config add ext_ram_t_ccd_s=2c;\
+  config add ext_ram_t_ref=1900000;\
+  config add ext_ram_c_wr_latency=4c;\
+  config add ext_ram_t_crc_rd_latency=3c;\
+  config add ext_ram_t_crc_wr_latency=11c;\
+  config add ext_ram_t_rst=200000000;\
+  config add ext_ram_t_al=2c;\
+  config add ext_ram_columns=1024;\
+  config add ext_ram_rows=16384;\
+  config add ext_ram_banks=16;\
+  config add ext_ram_c_cas_latency=16c;"
+expr $ext_ram_write_dbi==1
+if $? && $?dram_type_GDDR5_MICRON_MT51K256M32HF_50_8GBIT "\
+  config add ext_ram_c_cas_latency=16c;"
+
+if $?dram_type_GDDR5_SAMSUNG_K4G41325FE_HC28_4GBIT "\
+  config add ext_ram_type=GDDR5;\
+  config add ext_ram_t_rfc=110000;\
+  config add ext_ram_t_rc=48000;\
+  config add ext_ram_t_rcd_wr=15000;\
+  config add ext_ram_t_rcd_rd=16000;\
+  config add ext_ram_t_rrd_l=6000;\
+  config add ext_ram_t_rrd_s=6000;\
+  config add ext_ram_t_ras=34000;\
+  config add ext_ram_t_rp=14000;\
+  config add ext_ram_t_wr=16000;\
+  config add ext_ram_t_faw=24000;\
+  config add ext_ram_t_32aw=192000;\
+  config add ext_ram_t_rtp_s=2c;\
+  config add ext_ram_t_rtp_l=4c;\
+  config add ext_ram_t_wtr_s=3c;\
+  config add ext_ram_t_wtr_l=8c;\
+  config add ext_ram_t_ccd_l=3c;\
+  config add ext_ram_t_ccd_s=2c;\
+  config add ext_ram_t_ref=1900000;\
+  config add ext_ram_c_wr_latency=3c;\
+  config add ext_ram_t_crc_rd_latency=3c;\
+  config add ext_ram_t_crc_wr_latency=14c;\
+  config add ext_ram_t_rst=200000000;\
+  config add ext_ram_t_al=1c;\
+  config add ext_ram_columns=512;\
+  config add ext_ram_rows=16384;\
+  config add ext_ram_banks=16;\
+  config add ext_ram_c_cas_latency=18c;"
+expr $ext_ram_write_dbi+0 == 1
+if $? && $?dram_type_GDDR5_SAMSUNG_K4G41325FE_HC28_4GBIT "\
+  config add ext_ram_c_cas_latency=19c;"
diff --git a/bal_release/3rdparty/bcm-sdk/rc/svk4/config.bcm b/bal_release/3rdparty/bcm-sdk/rc/svk4/config.bcm
new file mode 100644
index 0000000..4878c2d
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/rc/svk4/config.bcm
@@ -0,0 +1,2912 @@
+#
+# $Id: config-sand.bcm,v 1.140 2013/09/22 14:29:47 tomerma Exp $
+#
+# $Copyright: (c) 2011 Broadcom Corporation
+# All Rights Reserved.$
+
+#pci_override_dev.0=0x8375
+
+# Note: comment size is restricted to 128 charecters per line.
+
+#########################################
+##cfg for BCM88640 (PetraB), BCM88650 (Arad) and BCM88202 (Ardon)
+#########################################
+
+## temporary suppressing unknown soc properties warnings - till adding them unknown to property.h/propgen
+## (need to be the first soc property in the file).
+suppress_unknown_prop_warnings=1
+
+
+## Multi device system (Negev): 2 devices, fabric mode is FE, mod id is slot id
+## (Top line card is 0, button is 1).
+#diag_chassis=1
+
+## Disable diag init application. Should be used if one wants to run his own
+## application instead of the diag init example
+#diag_disable=1
+
+## Skip cosq configuration in diag_init
+#diag_cosq_disable=1
+#
+
+stack_enable.BCM88680=1
+tdma_timeout_usec.BCM88680=3000000
+tslam_timeout_usec.BCM88680=3000000
+diag_emulator_partial_init.BCM88680=0
+phy_simul.BCM88680=0
+
+
+## Skip l2 configuration in diag_init
+#diag_l2_disable=1
+
+## L2 mode to load 0=DEFAULT, 1=INGRESS_DIST, 2=INGRESS_CENT, 3=EGRESS_DIST, 4=EGRESS_CENT, 5=EGRESS_INDEPENDENT
+#                  6=(INGRESS_CENT + LEARN_CPU), 7=(EGRESS_CENT + LEARN_CPU)
+#l2_mode=0
+
+## Skip stk configuration in diag_init
+#diag_no_appl_stk=1
+
+## Skip itmh programmable mode configuration in diag_init
+#diag_no_itmh_prog_mode=1
+
+# Ingress PMF key allocation optimization
+field_key_allocation_msb_balance_enable=1
+
+## Set modid value. Should be used when running multi-fap system.
+## Each fap should have it's unique modid value. Default is described in diag_chassis.
+#module_id=<modid>
+
+## Set base_modid value. Default is 0.
+#base_module_id=<base_modid>
+
+## Set nof_devices value. Should be set when working on multi-faps system.
+## Default is 1 when diag_chassis is not enabled, or 2 when diag_chassis is enabled.
+#n_devices=<nof_devices>
+
+#########################################
+##cfg for BCM88650 - Arad
+#########################################
+
+### Device configuration ###
+
+## Activate Emulation partial init. Values: 0 - Normal, 1 - Emulation .Default: 0x0.
+diag_emulator_partial_init.BCM88650=0
+#diag_emulator_partial_init.BCM88270=1
+#diag_emulator_partial_init.BCM88680=1
+#diag_emulator_partial_init.BCM88675=2
+
+#real phy isn't connected - remove on silicon arrival
+#phy_simul.BCM88675=1
+
+## General
+# Set the FAP Device mode
+# Options: PP / TM / TDM_OPTIMIZED / TDM_STANDARD
+fap_device_mode.BCM88650=PP
+#
+# FIXME: SDK-91833
+# PP Fixed Followed SDK-91662
+#
+
+# Options: SYMMETRIC / ASYMMETRIC / SINGLE_CORE
+# For faster emulation, use SINGLE_CORE
+device_core_mode.BCM88675=SYMMETRIC
+device_core_mode.BCM88680=SYMMETRIC
+## Credit worth size (Bytes)
+credit_size.BCM88650=1024
+
+## KBP recovery - allow for recovery sequence to run during init and soft reset (only if necessary)
+custom_feature_kbp_recovery_enable=0
+
+## Clock configurations
+# Core clock speed (MHz). Default- BCM88650: 600 MHz, BCM88675: 720 MHz
+core_clock_speed_khz.BCM88650=600000
+core_clock_speed_khz.BCM88675=720000
+core_clock_speed_khz.BCM88470=600000
+core_clock_speed_khz.BCM88680=837500
+core_clock_speed_khz.BCM88270=250000
+
+# System reference clock (MHz). Default- BCM88650: 600 MHz, BCM88675: 800 MHz
+system_ref_core_clock_khz.BCM88650=1200000
+
+#fabric pcp
+fabric_pcp_enable.BCM88675=1
+
+#Using Tcam instead of the KAPS for the IPv4 MC and IPV6 MC
+# 0 - Don't use TACM
+# 1 - Use TCAM for IPV4/6 MC
+# 2 - Use TACM for IPV4/6 MC but don't use the VRF field as a qualifier for IPV4 MC entries
+#custom_feature_l3_mc_use_tcam=0
+
+#for IPv6UC: use Tcam instead of KAPS
+#Note that if this property is enabled the IPV6-UC RPF will be disabled
+#custom_feature_l3_ipv6_uc_use_tcam=0
+
+
+#ams pll override value (only for Jericho A0/A1)- possible values: 0x19, 0x1e, 0x1f. Default value 0x1f
+#custom_feature_ams_pll_override.BCM88675=0x1f
+
+### Network Interface configuration ###
+## Use of the ucode_port_<Local-Port-Id>=<Interface-type>[<Interface-Id>][.<Channel-Id>]
+## Local port range: 0 - 255.
+## Interface types: XAUI/RXAUI/SGMII/ILKN/10GBase-R/XLGE/CGE/CPU/IGNORE
+
+# Map bcm local port to CPU[.channel] interfaces
+ucode_port_0.BCM88650=CPU.0
+
+# Map bcm local port to Network-Interface[.channel] interfaces - TBD
+ucode_port_128.BCM88650=10GBase-R36
+ucode_port_129.BCM88650=10GBase-R37
+ucode_port_130.BCM88650=10GBase-R32
+ucode_port_131.BCM88650=10GBase-R33
+ucode_port_132.BCM88650=10GBase-R34
+ucode_port_133.BCM88650=10GBase-R35
+ucode_port_134.BCM88650=10GBase-R16
+ucode_port_135.BCM88650=10GBase-R17
+ucode_port_136.BCM88650=10GBase-R18
+ucode_port_137.BCM88650=10GBase-R19
+
+ucode_port_1.BCM88650=10GBase-R22
+ucode_port_2.BCM88650=10GBase-R21
+ucode_port_3.BCM88650=10GBase-R42
+ucode_port_4.BCM88650=10GBase-R41
+
+custom_feature_nif_recovery_enable.BCM88650=1
+custom_feature_nif_recovery_iter.BCM88650=7
+custom_feature_skip_before_traffic_validation.BCM88675=0
+#custom_feature_mac_fifo_start_tx_thrs.BCM88675=9
+
+#redirect packets that are destined to invalid queues
+invalid_queue_redirect=0
+
+#CLP0
+#ucode_port_1.BCM88675=XE0:core_0.1
+#ucode_port_2.BCM88675=XE1:core_0.2
+#ucode_port_3.BCM88675=XE2:core_0.3
+#ucode_port_4.BCM88675=XE3:core_0.4
+#CLP1
+#ucode_port_5.BCM88675=XE4:core_0.5
+#ucode_port_6.BCM88675=XE5:core_0.6
+#ucode_port_7.BCM88675=XE6:core_0.7
+#ucode_port_8.BCM88675=XE7:core_0.8
+#CLP2
+#ucode_port_9.BCM88675=XE8:core_0.9
+#ucode_port_10.BCM88675=XE9:core_0.10
+#ucode_port_11.BCM88675=XE10:core_0.11
+#ucode_port_12.BCM88675=XE11:core_0.12
+#CLP3
+#ucode_port_13.BCM88675=XE12:core_0.13
+#ucode_port_14.BCM88675=XE13:core_0.14
+#ucode_port_15.BCM88675=XE14:core_0.15
+#ucode_port_16.BCM88675=XE15:core_0.16
+#CLP4
+#ucode_port_17.BCM88675=XE16:core_0.17
+#ucode_port_18.BCM88675=XE17:core_0.18
+#ucode_port_19.BCM88675=XE18:core_0.19
+#ucode_port_20.BCM88675=XE19:core_0.20
+#CLP5
+#ucode_port_21.BCM88675=XE20:core_0.21
+#ucode_port_22.BCM88675=XE21:core_0.22
+#ucode_port_23.BCM88675=XE22:core_0.23
+#ucode_port_24.BCM88675=XE23:core_0.24
+#XLP0
+#ucode_port_25.BCM88675=XE24:core_0.25
+#ucode_port_26.BCM88675=XE25:core_0.26
+#ucode_port_27.BCM88675=XE26:core_0.27
+#ucode_port_28.BCM88675=XE27:core_0.28
+#XLP1
+#ucode_port_29.BCM88675=XE28:core_0.29
+#ucode_port_30.BCM88675=XE29:core_0.30
+#ucode_port_31.BCM88675=XE30:core_0.31
+#ucode_port_32.BCM88675=XE31:core_0.32
+#XLP2
+#ucode_port_33.BCM88675=XE32:core_0.33
+#ucode_port_34.BCM88675=XE33:core_0.34
+#ucode_port_35.BCM88675=XE34:core_0.35
+#ucode_port_36.BCM88675=XE35:core_0.36
+#XLP3
+#ucode_port_37.BCM88675=XE36:core_0.37
+#ucode_port_38.BCM88675=XE37:core_0.38
+#ucode_port_39.BCM88675=XE38:core_0.39
+#ucode_port_40.BCM88675=XE39:core_0.40
+#XLP4 (not as PMQ0)
+#ucode_port_41.BCM88675=XE40:core_0.41
+#ucode_port_42.BCM88675=XE41:core_0.42
+#ucode_port_43.BCM88675=XE42:core_0.43
+#ucode_port_44.BCM88675=XE43:core_0.44
+#XLP5 (not as PMQ1)
+#ucode_port_45.BCM88675=XE44:core_0.45
+#ucode_port_46.BCM88675=XE45:core_0.46
+#ucode_port_47.BCM88675=XE46:core_0.47
+#ucode_port_48.BCM88675=XE47:core_0.48
+#XLP9
+#ucode_port_49.BCM88675=XE60:core_0.49
+#ucode_port_50.BCM88675=XE61:core_0.50
+#ucode_port_51.BCM88675=XE62:core_0.51
+#ucode_port_52.BCM88675=XE63:core_0.52
+#XLP10
+#ucode_port_53.BCM88675=XE64:core_0.53
+#ucode_port_54.BCM88675=XE65:core_0.54
+#ucode_port_55.BCM88675=XE66:core_0.55
+#ucode_port_56.BCM88675=XE67:core_0.56
+#XLP11 (not as PMQ3)
+#ucode_port_57.BCM88675=XE68:core_0.57
+#ucode_port_58.BCM88675=XE69:core_0.58
+#ucode_port_59.BCM88675=XE70:core_0.59
+#ucode_port_60.BCM88675=XE71:core_0.60
+
+
+ucode_port_0.BCM88675=CPU.0:core_0.0
+ucode_port_0.BCM88680=CPU.0:core_0.0
+ucode_port_200.BCM88675=CPU.8:core_1.200
+ucode_port_200.BCM88680=CPU.8:core_1.200
+ucode_port_201.BCM88675=CPU.16:core_0.201
+ucode_port_201.BCM88680=CPU.16:core_0.201
+ucode_port_202.BCM88675=CPU.24:core_1.202
+ucode_port_202.BCM88680=CPU.24:core_1.202
+ucode_port_203.BCM88675=CPU.32:core_0.203
+ucode_port_203.BCM88680=CPU.32:core_0.203
+
+#default ports for Jericho and QMX
+ucode_port_1.BCM88675=CGE0:core_0.1
+ucode_port_2.BCM88675=ILKN1:core_0.2
+ilkn_lanes_1.BCM88675=0xfff000
+ucode_port_3.BCM88675=ILKN2:core_0.3
+ilkn_lanes_2.BCM88675=0xfff
+ucode_port_17.BCM88675=CGE1:core_1.17
+
+#default ports for Jericho
+ucode_port_13.BCM88675=10GBase-R64:core_0.13
+ucode_port_14.BCM88675=10GBase-R65:core_0.14
+ucode_port_15.BCM88675=10GBase-R68:core_1.15
+ucode_port_16.BCM88675=10GBase-R69:core_1.16
+
+#default ports for Jericho Plus
+ucode_port_13.BCM88680=10GBase-R40:core_0.13
+ucode_port_14.BCM88680=10GBase-R43:core_0.14
+ucode_port_15.BCM88680=10GBase-R44:core_1.15
+ucode_port_16.BCM88680=10GBase-R46:core_1.16
+
+#default ports for QMX
+ucode_port_13.BCM88375_A0=10GBase-R64:core_0.13
+ucode_port_14.BCM88375_A0=10GBase-R66:core_0.14
+ucode_port_15.BCM88375_A0=10GBase-R69:core_1.15
+ucode_port_16.BCM88375_A0=10GBase-R71:core_1.16
+ 
+
+ucode_port_13.BCM88375_B0=10GBase-R64:core_0.13
+ucode_port_14.BCM88375_B0=10GBase-R66:core_0.14
+ucode_port_15.BCM88375_B0=10GBase-R69:core_1.15
+ucode_port_16.BCM88375_B0=10GBase-R71:core_1.16
+ 
+ 
+#default ports for QAX
+ucode_port_0.BCM88470=CPU.0:core_0.0
+
+ucode_port_200.BCM88470=CPU.8:core_0.200
+
+ucode_port_201.BCM88470=CPU.16:core_0.201
+
+ucode_port_202.BCM88470=CPU.24:core_0.202
+
+ucode_port_203.BCM88470=CPU.32:core_0.203
+
+tm_port_header_type_in_0.BCM88470=INJECTED_2_PP
+tm_port_header_type_out_0.BCM88470=CPU
+
+ucode_port_1.BCM88470=XE22:core_0.1
+ucode_port_2.BCM88470=XE21:core_0.2
+ucode_port_3.BCM88470=XE41:core_0.3
+ucode_port_4.BCM88470=XE42:core_0.4
+
+pon_application_support_enabled_1.BCM88470=TRUE
+pon_application_support_enabled_2.BCM88470=TRUE
+pon_application_support_enabled_3.BCM88470=TRUE
+pon_application_support_enabled_4.BCM88470=TRUE
+
+ucode_port_128.BCM88470=XE36:core_0.128
+ucode_port_129.BCM88470=XE37:core_0.129
+ucode_port_130.BCM88470=XE32:core_0.130
+ucode_port_131.BCM88470=XE33:core_0.131
+ucode_port_132.BCM88470=XE34:core_0.132
+ucode_port_133.BCM88470=XE35:core_0.133
+ucode_port_134.BCM88470=XE16:core_0.134
+ucode_port_135.BCM88470=XE17:core_0.135
+ucode_port_136.BCM88470=XE18:core_0.136
+ucode_port_137.BCM88470=XE19:core_0.137
+
+bcm886xx_rx_use_hw_trap_id.BCM88470=0
+
+stable_filename.BCM88270=/tmp/warmboot_data
+fap_device_mode.BCM88270=PP
+#default ports for QUX
+ucode_port_0.BCM88270=CPU.0:core_0.0
+ucode_port_200.BCM88270=CPU.8:core_0.100
+ucode_port_201.BCM88270=CPU.16:core_0.101
+ucode_port_202.BCM88270=CPU.24:core_0.102
+ucode_port_203.BCM88270=CPU.32:core_0.103
+ucode_port_1.BCM88270=XE0:core_0.1
+ucode_port_2.BCM88270=XE1:core_0.2
+ucode_port_3.BCM88270=XE2:core_0.3
+ucode_port_13.BCM88270=GE12:core_0.13
+ucode_port_14.BCM88270=GE13:core_0.14
+ucode_port_15.BCM88270=GE14:core_0.15
+ucode_port_16.BCM88270=GE15:core_0.16
+ucode_port_17.BCM88270=GE16:core_0.17
+
+
+#Firmware mode:
+#(Documantation relevant for BCM886xx and BCM887xx)
+# 0=DEFAULT
+# 1=SFP_OPT_SR4     - optical short range
+# 2=SFP_DAC         - direct attach copper
+# 3=XLAUI           - 40G XLAUI mode
+# 4=FORCE_OSDFE     - force over sample digital feedback equalization
+# 5=FORCE_BRDFE     - force baud rate digital feedback equalization
+# 6=SW_CL72         - software cl72 with AN on
+# 7=CL72_WITHOUT_AN - cl72 without AN
+#For Negev2 chassis enable DFE is recommended
+serdes_firmware_mode.BCM88650=2
+serdes_firmware_mode_il.BCM88650=4
+serdes_firmware_mode_sfi.BCM88650=0
+serdes_firmware_mode_sfi.BCM88675=4
+serdes_firmware_mode_sfi.BCM88470=4
+serdes_firmware_mode_sfi.BCM88270=4
+serdes_firmware_mode_sfi.BCM88680=4
+
+
+#ucode_port_1.BCM88650=10GBase-R0
+#ucode_port_2.BCM88650=10GBase-R1
+#ucode_port_3.BCM88650=10GBase-R2
+#ucode_port_4.BCM88650=10GBase-R3
+#ucode_port_5.BCM88650=10GBase-R4
+#ucode_port_6.BCM88650=10GBase-R5
+#ucode_port_7.BCM88650=10GBase-R6
+#ucode_port_8.BCM88650=10GBase-R7
+#ucode_port_9.BCM88650=10GBase-R8
+#ucode_port_10.BCM88650=10GBase-R9
+#ucode_port_11.BCM88650=10GBase-R10
+#ucode_port_12.BCM88650=10GBase-R11
+#ucode_port_13.BCM88650=10GBase-R12
+#ucode_port_14.BCM88650=10GBase-R13
+#ucode_port_15.BCM88650=10GBase-R14
+#ucode_port_16.BCM88650=10GBase-R15
+#ucode_port_17.BCM88650=10GBase-R16
+#ucode_port_18.BCM88650=10GBase-R17
+#ucode_port_19.BCM88650=10GBase-R18
+#ucode_port_20.BCM88650=10GBase-R19
+ucode_port_200.BCM88650=CPU.8
+ucode_port_201.BCM88650=CPU.16
+ucode_port_202.BCM88650=CPU.24
+ucode_port_203.BCM88650=CPU.32
+
+#40G
+#ucode_port_1.BCM88650=XLGE0
+#ucode_port_2.BCM88650=XLGE1
+#ucode_port_3.BCM88650=XLGE2
+#ucode_port_4.BCM88650=XLGE3
+#ucode_port_5.BCM88650=XLGE4
+#ucode_port_6.BCM88650=XLGE5
+#ucode_port_7.BCM88650=XLGE6
+
+#ILKN configuration - basic config
+#ucode_port_31.BCM88650=ILKN0
+#ucode_port_32.BCM88650=ILKN1
+#ucode_port_32.BCM88675=ILKN1:core_0.32
+#ilkn_num_lanes_0.BCM88650=12
+#ilkn_num_lanes_1.BCM88650=12
+#port_init_speed_il.BCM88650=10312
+
+
+#ILKN per port channel stat
+#ilkn_counters_mode.BCM88650=PACKET_PER_CHANNEL
+
+#ILKN configuration - advanced
+#ilkn_metaframe_sync_period=2048
+#ILKN burst configuration - ILKN max burst suppored values: 128, 256
+#ILKN burst short should be lesser or equal to burst max /2
+#ilkn_burst_max.BCM88675=256
+#ilkn_burst_min.BCM88675=32
+# Enable\Disable ILKN status message sent through an out-of-band interface.
+# ilkn_interface_status_oob_ignore.BCM88650=1
+
+# ilkn_is_burst_interleaving<ilkn_id>
+# 1 - The channelized interface functions in burst interleaving mode (default). 0 - in full packet mode.
+#ilkn_is_burst_interleaving_1.BCM88675=0
+
+##ILKN retransmit
+#ilkn_retransmit_enable_rx.BCM88650=1
+#ilkn_retransmit_enable_tx.BCM88650=1
+#ilkn_retransmit_buffer_size.BCM88650=250
+#ilkn_retransmit_num_requests_resent.BCM88650=15
+#ilkn_retransmit_num_sn_repetitions_tx.BCM88650=1
+#ilkn_retransmit_num_sn_repetitions_rx.BCM88650=1
+#ilkn_retransmit_rx_timeout_words.BCM88650=3800
+#ilkn_retransmit_rx_timeout_sn.BCM88650=250
+#ilkn_retransmit_rx_ignore.BCM88650=80
+#ilkn_retransmit_rx_reset_when_error_enable.BCM88650=1
+#ilkn_retransmit_rx_watchdog.BCM88650=0
+#ilkn_retransmit_rx_reset_when_alligned_error_enable.BCM88650=1
+#ilkn_retransmit_rx_reset_when_retry_error_enable.BCM88650=1
+#ilkn_retransmit_rx_reset_when_wrap_after_disc_error_enable.BCM88650=1
+#ilkn_retransmit_rx_reset_when_wrap_before_disc_error_enable.BCM88650=0
+#ilkn_retransmit_rx_reset_when_timout_error_enable.BCM88650=0
+#ilkn_retransmit_tx_wait_for_seq_num_change_enable.BCM88650=1
+#ilkn_retransmit_tx_ignore_requests_when_fifo_almost_empty.BCM88650=1
+
+#ucode_port_40.BCM88650=RCY.0
+#ucode_port_41.BCM88650=RCY.1
+#ucode_port_42.BCM88650=RCY.2
+
+## CAUI Configuration
+#ucode_port_41.BCM88650=CGE0
+#ucode_port_42.BCM88650=CGE1
+caui_num_lanes_0.BCM88650=10
+caui_num_lanes_1.BCM88650=10
+#Required for working IXIA 100G port:
+mld_lane_swap_lane20_ce.BCM88650=0
+mld_lane_swap_lane21_ce.BCM88650=1
+mld_lane_swap_lane0_ce.BCM88650=20
+mld_lane_swap_lane1_ce.BCM88650=21
+
+# This configures the lane polarity
+pb_serdes_lane_swap_polarity_tx_phy1.BCM88650=1
+pb_serdes_lane_swap_polarity_tx_phy2.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy3.BCM88650=1
+pb_serdes_lane_swap_polarity_tx_phy4.BCM88650=1
+pb_serdes_lane_swap_polarity_tx_phy5.BCM88650=1
+pb_serdes_lane_swap_polarity_tx_phy6.BCM88650=1
+pb_serdes_lane_swap_polarity_tx_phy7.BCM88650=1
+pb_serdes_lane_swap_polarity_tx_phy8.BCM88650=1
+pb_serdes_lane_swap_polarity_tx_phy9.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy10.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy11.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy12.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy13.BCM88650=1
+pb_serdes_lane_swap_polarity_tx_phy14.BCM88650=1
+pb_serdes_lane_swap_polarity_tx_phy15.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy16.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy17.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy18.BCM88650=1
+pb_serdes_lane_swap_polarity_tx_phy19.BCM88650=1
+pb_serdes_lane_swap_polarity_tx_phy20.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy21.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy22.BCM88650=1
+pb_serdes_lane_swap_polarity_tx_phy23.BCM88650=1
+pb_serdes_lane_swap_polarity_tx_phy24.BCM88650=1
+pb_serdes_lane_swap_polarity_tx_phy25.BCM88650=1
+pb_serdes_lane_swap_polarity_tx_phy26.BCM88650=0
+pb_serdes_lane_swap_polarity_tx_phy27.BCM88650=1
+pb_serdes_lane_swap_polarity_tx_phy28.BCM88650=1
+
+pb_serdes_lane_swap_polarity_rx_phy1.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy2.BCM88650=1
+pb_serdes_lane_swap_polarity_rx_phy3.BCM88650=1
+pb_serdes_lane_swap_polarity_rx_phy4.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy5.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy6.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy7.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy8.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy9.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy10.BCM88650=1
+pb_serdes_lane_swap_polarity_rx_phy11.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy12.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy13.BCM88650=1
+pb_serdes_lane_swap_polarity_rx_phy14.BCM88650=1
+pb_serdes_lane_swap_polarity_rx_phy15.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy16.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy17.BCM88650=1
+pb_serdes_lane_swap_polarity_rx_phy18.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy19.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy20.BCM88650=1
+pb_serdes_lane_swap_polarity_rx_phy21.BCM88650=1
+pb_serdes_lane_swap_polarity_rx_phy22.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy23.BCM88650=1
+pb_serdes_lane_swap_polarity_rx_phy24.BCM88650=1
+pb_serdes_lane_swap_polarity_rx_phy25.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy26.BCM88650=0
+pb_serdes_lane_swap_polarity_rx_phy27.BCM88650=1
+pb_serdes_lane_swap_polarity_rx_phy28.BCM88650=1
+
+xgxs_tx_lane_map_quad0.BCM88650=0x1032
+xgxs_tx_lane_map_quad1.BCM88650=0x2310
+xgxs_tx_lane_map_quad2.BCM88650=0x3210
+xgxs_tx_lane_map_quad3.BCM88650=0x3210
+xgxs_tx_lane_map_quad4.BCM88650=0x1230
+xgxs_tx_lane_map_quad5.BCM88650=0x3201
+xgxs_tx_lane_map_quad6.BCM88650=0x2103
+xgxs_tx_lane_map_quad7.BCM88650=0x0123
+
+xgxs_rx_lane_map_quad0.BCM88650=0x3012
+xgxs_rx_lane_map_quad1.BCM88650=0x0132
+xgxs_rx_lane_map_quad2.BCM88650=0x1230
+xgxs_rx_lane_map_quad3.BCM88650=0x0123
+xgxs_rx_lane_map_quad4.BCM88650=0x3012
+xgxs_rx_lane_map_quad5.BCM88650=0x2013
+xgxs_rx_lane_map_quad6.BCM88650=0x2103
+
+
+#High voltage driver strap. If 0, connected to 1.4V supply; if 1, connected to 1V mode.
+#for specific quad use srd_tx_drv_hv_disable_quad_X where X is (FSRD num * 4 + internal quad)
+srd_tx_drv_hv_disable.BCM88650=1
+
+#Port init mode
+#port_init_duplex=0
+#port_init_adv=0
+#port_init_autoneg=0
+
+
+# This disables serdes initialization
+# phy_null.BCM88650=1
+
+##  Number of Internal ports
+# Enable the ERP port. Values: 0 / 1.
+num_erp_tm_ports.BCM88650=1
+# Enable the OLP port. Values: 0 / 1.
+num_olp_tm_ports.BCM88650=1
+
+## Firmware Load Method
+load_firmware.BCM88650=0x102
+load_firmware.BCM88675=0x102
+load_firmware_fabric.BCM88675=0x102
+load_firmware_fabric.BCM88680=0x102
+
+### Headers configuration ###
+
+## Use of the tm_port_header_type_<Local-Port-Id>=<Header-type>
+## Default header type is derived from fap_device_mode: If fap_device_mode is
+## PP, default header type is ETH. Otherwise, defualt header type is TM.
+## Header type per port can be overriden.
+## All options: ETH/RAW/TM/PROG/CPU/STACKING/TDM/TDM_RAW/UDH_ETH
+## Injected header types: if PTCH, INJECTED (local Port of type TM) or INJECTED_PP (PP)
+##                        if PTCH-2, INJECTED_2 (local Port of type TM) or INJECTED_2_PP (PP)
+
+# Set CPU to work with TM header (ITMH)
+#tm_port_header_type_0.BCM88650=TM
+
+tm_port_header_type_in_0.BCM88650=INJECTED_2
+tm_port_header_type_out_0.BCM88650=TM
+
+tm_port_header_type_in_200.BCM88650=INJECTED_2_PP
+tm_port_header_type_out_200.BCM88650=ETH
+tm_port_header_type_in_201.BCM88650=INJECTED_2_PP
+tm_port_header_type_out_201.BCM88650=ETH
+tm_port_header_type_in_202.BCM88650=INJECTED_2_PP
+tm_port_header_type_out_202.BCM88650=ETH
+tm_port_header_type_in_203.BCM88650=INJECTED_2_PP
+tm_port_header_type_out_203.BCM88650=ETH
+
+
+### Parser Configuration ###
+# Parser has 4 custom macros that are allocated dynamically and
+# configured according to the following features and soc properties:
+# Trill (1 macro) - trill_mode
+# FCoE (2 macros) - bcm886xx_fcoe_switch_mode
+# VxLAN (1 macro) - bcm886xx_vxlan_enable
+# IPv6-Extension-header (2 macros) - bcm886xx_ipv6_ext_hdr_enable
+# UDP (1 macro) - UDP parsing is enabled by default, and can be
+#  disabled with soc property custom_feature_udp_parse_disable
+#  When disabling UDP parsing VxLAN and 1588oUDP are affected
+
+
+# In FCoE NPV switch, if set to 1, 
+# packets that ingress from the N_PORT are treated as bridge
+# and packets that ingress from the NP_PORT are treated as router
+#fcoe_npv_bridge_mode=1
+# Enable IPv6 Extension Header, 0 - disable (default), 1 - enable
+#bcm886xx_ipv6_ext_hdr_enable=1
+
+# Disable UDP parsing, 0 - enable (default), 1 - disable
+#custom_feature_udp_parse_disable=1
+
+#OAMP/SAT port
+#tm_port_header_type_out_232.BCM88650=CPU
+tm_port_header_type_out_232.BCM88675=CPU
+
+### SAT
+## Enable SAT Interface. 0 - Disable, 1 - Enable (Default) 
+sat_enable=1
+
+# Set the recycling port processing to be raw (static forwarding)
+tm_port_header_type_rcy.BCM88650=RAW
+
+### RCPU
+# Valid CPU local ports on which RCPU packets can be received by slave device.
+#rcpu_rx_pbmp=0xf00000000000000000000000000000000000000000000000001
+
+#tm_port_header_type_514.BCM88650=RAW
+
+## Header extensions
+# Set if an FTMH Out-LIF extension is present to Unicast and Multicast packets
+# Options: NEVER / IF_MC (only Multicast packets) / ALWAYS
+fabric_ftmh_outlif_extension.BCM88650=IF_MC
+
+# Set the FTMH Load-Balancing Key extension mode
+# Options for 88660: ENABLED, FULL_HASH
+# Options for 88650: ENABLED
+# Options for 88640 compatible: DISABLED / 8B_LB_KEY_8B_STACKING_ROUTE_HISTORY
+# / 16B_STACKING_ROUTE_HISTORY / STANDBY_MC_LB (available only for AradPlus)
+# Default: DISABLED
+system_ftmh_load_balancing_ext_mode.BCM88650=DISABLED
+
+# Set if an OTMH Out-LIF (CUD) Extension is present to Unicast and Multicast packets
+# Options: NEVER / IF_MC (only Multicast packets) / ALWAYS / DOUBLE_TAG (two hop scheduling) / EXTENDED: Extended 24 bit CUD
+# Default: NEVER
+# tm_port_otmh_outlif_ext_mode_13.BCM88650=NEVER
+
+# Set if an OTMH Source-System-Port Extension is present.
+# Option: 0/1
+# Default: 0
+# tm_port_otmh_src_ext_enable_13.BCM88650=0
+
+#Trunk hash format, relevant only for AradPlus. Possible values: NORMAL (default) / INVERTED / DUPLICATED.
+#trunk_hash_format=NORMAL
+
+## Stacking Application
+#stacking_enable.BCM88650=1
+
+## Determine if FTMH Destination System Port Extension is added to all Ethernet packets.
+#ftmh_dsp_extension_add=1
+
+## Determine if FTMH Destination System Port Extension of mirrored/snooped packets is stamped with the original destination.
+#mirror_stamp_sys_on_dsp_ext=1
+
+## System RED
+# Set System-Red functionality.
+#system_red_enable.BCM88650=1
+
+# Indicate the size (Bytes) of a first header to skip
+# before the major header at ingress (e.g. Ethernet, ITMH)
+# It can be set per port also
+first_header_size.BCM88650=0
+
+# Indicate the size (Bytes) of the PMF Extension Headers
+# to remove for TM header type ports (expecting ITMH)
+# Set per port
+#post_headers_size_0.BCM88650=4
+
+# Indicate the size (Bytes) of the User-Headers: configurable
+# headers located in the fabric between internal headers and
+# Ethernet. Their values are set by Ingress FP, and can be used
+# by Egress FP or Egress Editor.
+# units: bits. 4 values can be set:
+# 0 - size of the 1st User-Header, for the Egress PMF. 0b / 8b / 16b
+# 1 - size of the 2nd User-Header, for the Egress PMF. 0b / 8b / 16b
+# The sum of these 2 values should be under 16b
+# 2, 3 - size of the 1st/2nd User-Header, for the Egress Editor.
+# 0b / 8b / 16b / 24b / 32b
+# Each of the global User-Header size must be under 32 bits, but not 24 bits.
+# The Egress FP field is always at the MSB of the User-Header
+# Not available for 88650-A0.
+#field_class_id_size_0.BCM88650=8
+#field_class_id_size_1.BCM88650=0
+#field_class_id_size_2.BCM88650=24
+#field_class_id_size_3.BCM88650=0
+
+
+### Trunk - LAG configuration ###
+# Set the number of LAGs: 1024, 512, 256, 128 or 64
+number_of_trunks.BCM88650=256
+# Using the lb-key's MSB in trunk resolutions.
+# 0 = use LSB (default)
+# 1 = use MSB
+trunk_resolve_use_lb_key_msb_stack = 0
+trunk_resolve_use_lb_key_msb_smooth_division = 0
+
+### SYNCE configuration ###
+## Synchronous Ethernet Signal Mode.
+## Options: TWO_DIFF_CLK, TWO_CLK_AND_VALID. Default: TWO_CLK_AND_VALID
+#sync_eth_mode.BCM88650=TWO_CLK_AND_VALID
+
+## Clock Source (single SerDes) lane in the specified NIF port.
+## Usage: sync_eth_clk_to_nif_id_clk_<clk_number>=<serdes_number>
+#sync_eth_clk_to_nif_id_clk_0.BCM88650=1
+#sync_eth_clk_to_nif_id_clk_1.BCM88650=1
+
+## Clock Divider for the selected recovered clock. Valid values: 1/2/4. Default: 1.
+## Usage: sync_eth_clk_divider_clk_<clk_number>=<1/2/4>
+#sync_eth_clk_divider_clk_0.BCM88650=1
+#sync_eth_clk_divider_clk_1.BCM88650=1
+
+## Usage: sync_eth_clk_to_port_id_clk_<clk_number>=<serdes_number>
+#sync_eth_clk_to_port_id_clk_0.BCM88675=13
+#sync_eth_clk_to_port_id_clk_1.BCM88675=13
+
+## Clock frequency selector for the selected recovered clock. Valid values: <125MHz-0/156.25MHz-1/25MHz-2>. Default: 1.
+## Usage: sync_eth_clk_divider_clk<clk_id>=<0-125MHz/1-156.25MHz/2-25MHz>
+#sync_eth_clk_divider_clk0.BCM88675=1
+#sync_eth_clk_divider_clk1.BCM88675=1
+
+## Enable the automatic squelch function for the recovered clock. Valid values: 0/1. Default: 0.
+## Usage: sync_eth_clk_squelch_enable_clk_<clk_number>=<0/1>
+#sync_eth_clk_squelch_enable_clk_0.BCM88650=0
+#sync_eth_clk_squelch_enable_clk_1.BCM88650=0
+
+### ELK configuration ###
+## External lookup (TCAM) Device type select, Indicate the External lookup Device type.
+# Value Options: NONE/NL88650. Default: NONE.
+#ext_tcam_dev_type=NL88650
+
+
+##External lookup (elk) ILKN lanes swap. If set, reverse the lanes numbering order on elk device side. DNX system default is 1.
+#ext_ilkn_reverse=0
+
+## Set ELK FWD table Size.
+# format: ext_xxx_fwd_table_size.
+# where xxx replaced by FWD options: ip4_uc_rpf/ip4_mc/ip6_uc_rpf/ip6/ip6_mc/trill_uc/trill_mc/mpls/coup_mpls
+# Value Options: (0) - External table disabled, >0: number of entries. Default: 0.
+#ext_ip4_uc_rpf_fwd_table_size=8192
+#ext_ip4_mc_fwd_table_size=8192
+
+#External TCAM result size, allows to modify each external tcam result size. 
+#The total size of the external result for NL12K = 120bit .
+#The size of each segment updates the corresponding qualifier bcmFieldQualifyExternalValue. 
+#Default values according to the device property.
+#in-case of double capacity use the following values: 48,48,24,24 and ext_tcam_result_size_segment_pad_3=24
+
+#ext_tcam_result_size_segment_0=48
+#ext_tcam_result_size_segment_1=32
+#ext_tcam_result_size_segment_2=24
+#ext_tcam_result_size_segment_3=16
+#ext_tcam_result_size_segment_4=32
+#ext_tcam_result_size_segment_5=32
+
+## Set ELK IP FWD use NetRoute  ALG.
+# Value Options: ALG_LPM_LPM/ALG_LPM_NETROUTE/ALG_LPM_TCAM. Default: ALG_LPM_TCAM.
+#ext_fwd_algorithm_lpm=ALG_LPM_TCAM
+
+## Set ELK interface mode.
+# Change ELK interface configuration to support CAUI port.
+# Value Options: 0/1. 0 - Normal mode, 1  2 CAUI port + ELK mode. Default: 0.
+#ext_interface_mode=0
+
+### Configure MDIO interface
+# External MDIO clock rate divisor . Default: 0x24.
+#rate_ext_mdio_divisor=0x36
+# External MDIO clock rate divisor. Default: 0x1.
+#rate_ext_mdio_dividend=1
+
+### TDM - OTN configuration ###
+# Options: 0 / TDM_OPTIMIZED / TDM_STANDARD
+fap_tdm_bypass.BCM88650=0
+
+### TDM - RAW/PACKET configuration ###
+# if fap_tdm_packet config to be true, enable specific ports on the device to configure for tdm packet mode traffic.
+fap_tdm_packet.BCM88650=0
+
+# Indicate if a Petra-B device is connected to the actual device
+# For TDM/OTN applications,
+# system_is_petra_b_in_system.BCM88650=0
+##Indicate if TDM can arrive throgh primary pipe.
+#Should be 1 for a System with PetraB that connected to fabric over primary pipe.
+fabric_tdm_over_primary_pipe.BCM88650=0
+
+### Fabric configuration ###
+#0-LFEC 1-8b\10b 2-FEC 3-BEC
+backplane_serdes_encoding.BCM88650=2
+#Possible values - KR_FEC, 64_66, RS_FEC, LL_RS_FEC
+backplane_serdes_encoding.BCM88675=RS_FEC
+backplane_serdes_encoding.BCM88470=RS_FEC
+backplane_serdes_encoding.BCM88270=RS_FEC
+backplane_serdes_encoding.BCM88680=RS_FEC
+
+#SFI speed rate
+port_init_speed_sfi.BCM88650=10312
+port_init_speed_sfi.BCM88675=25000
+port_init_speed_sfi.BCM88470=25000
+port_init_speed_sfi.BCM88270=25000
+port_init_speed_sfi.BCM88680=25000
+
+#CL72
+port_init_cl72_sfi.BCM88650=1
+port_init_cl72_sfi.BCM88675=1
+fabric_segmentation_enable.BCM88650=1
+
+## Fabric transmission mode
+# Set the Connect mode to the Fabric
+# Options: FE - presence of a Fabric device (single stage) / MULT_STAGE_FE -  Multi-stage /
+# SINGLE_FAP - stand-alone device / MESH - mesh / BACK2BACK - 2 devices in Mesh
+#fabric_connect_mode.BCM88650=SINGLE_FAP
+fabric_connect_mode.BCM88650=FE
+# The Jericho configuration below will be overriden in jer.soc for multi device configurations
+fabric_connect_mode.BCM88675=SINGLE_FAP
+fabric_connect_mode.BCM88470=SINGLE_FAP
+fabric_connect_mode.BCM88270=SINGLE_FAP
+fabric_connect_mode.BCM88680=SINGLE_FAP
+
+
+## Cell format configuration
+# Indicate if the traffic can be sent in dual pipe
+is_dual_mode.BCM88650=0
+# Indicate on the existance of dual pipe device mode in system
+system_is_dual_mode_in_system.BCM88650=0
+
+# Indicate the format of the cell:
+# A VCS128 cell is used if system_is_vcs_128_in_system or system_is_fe600_in_system is TRUE
+system_is_vcs_128_in_system.BCM88650=0
+system_is_fe600_in_system.BCM88650=0
+
+### WRED ###
+
+# Set the maximum packet size for WRED tests. 0 - means ignore max packet size.
+discard_mtu_size.BCM88650=0
+
+### OCB (On-Chip Buffer) configuration ###
+# Enable the OCB
+# Enable MODES:
+#   0/FALSE        -->  OCB_DISABLED     --> No OCB use
+#   1/TRUE         -->  OCB_ENABLED      --> Like in Arad-A0/B0. Some packets may use both DRAM and OCB resources
+#   ONE_WAY_BYPASS -->  Depends on number of present drams (available only for AradPlus):
+#                      0 drams:   - OCB_ONLY
+#                      1 drams:   - OCB_ONLY_1_DRAM     -->  : OCB-only with 1 DRAM for the free pointers
+#                      2-8 drams: - OCB_DRAM_SEPARATE   -->  : OCB and DRAM coexist separately
+#   Default: TRUE.
+bcm886xx_ocb_enable.BCM88650=1
+
+## OCB (On-Chip Buffer) configuration
+# OCB modes:
+#   0 - Disabled
+#   1 - Enabled (Default).
+bcm886xx_ocb_enable.BCM88675=1
+
+# OCB Data Buffer size. Possible values: 128/256/512/1024. Default: 256.
+bcm886xx_ocb_databuffer_size.BCM88650=256
+# OCB Data Buffer size. Jericho allowed values: 256/512. Default: 256.
+bcm886xx_ocb_databuffer_size.BCM88675=256
+# Repartition between Unicast and Full Multicast buffers.
+# 0: 80% Unicast and 20% Multicast, 1: Unicast-Only
+bcm886xx_ocb_repartition.BCM88650=0
+
+
+### PDM configuration ###
+# Set the PDM Mode.
+# 0: simple (default), 1: extended (mandatory for LLFC-VSQ, PFC-VSQ, or ST-VSQ)
+bcm886xx_pdm_mode.BCM88650=0
+
+### Multicast Number of DBuff mode ###
+# Set IQM FMC buffers-replication sizes
+# Options for 88650: ARAD_INIT_FMC_4K_REP_64K_DBUFF_MODE/ARAD_INIT_FMC_64_REP_128K_DBUFF_MODE
+# Default: ARAD_INIT_FMC_4K_REP_64K_DBUFF_MODE
+multicast_nbr_full_dbuff.BCM88650=ARAD_INIT_FMC_4K_REP_64K_DBUFF_MODE
+
+### Multicast Number of DBuff mode ###
+# Set FMC buffers-replication sizes
+# Options for 88675:
+#    JERICHO_INIT_FMC_64_REP_512K_DBUFF_MODE
+#    JERICHO_INIT_FMC_4K_REP_256K_DBUFF_MODE (Default)
+#    JERICHO_INIT_FMC_NO_REP_DBUFF_MODE
+multicast_nbr_full_dbuff.BCM88675=JERICHO_INIT_FMC_4K_REP_256K_DBUFF_MODE
+multicast_nbr_full_dbuff.BCM88470=JERICHO_INIT_FMC_NO_REP_DBUFF_MODE
+multicast_nbr_full_dbuff.BCM88270=JERICHO_INIT_FMC_NO_REP_DBUFF_MODE
+multicast_nbr_full_dbuff.BCM88680=JERICHO_INIT_FMC_4K_REP_256K_DBUFF_MODE
+
+
+### Multicast configuration ###
+# Multicast egress vlan membership range. By default: 0-4095.
+egress_multicast_direct_bitmap_max.BCM88650=4095
+
+#### Jericho configuration of the number of ingress/egress multicast groups
+# Ingress max MCID can be up to 131070, Egress max MCID in Mesh or single FAP modes is up to 65535,
+# or otherwise is up to 131071.
+#multicast_ingress_group_id_range_max.BCM88675=32768
+#multicast_egress_group_id_range_max.BCM88675=60000
+
+### VOQ - Flow configuration ###
+
+# Set the VOQ mapping mode:
+# DIRECT: More than 4K System Ports are supported. System-level WRED is not supported.
+# INDIRECT: similar to Petra-B. Up to 4K System Ports.
+voq_mapping_mode.BCM88650=INDIRECT
+
+#Enable/disable HQOS support - mapping of many system ports to single modport
+hqos_mapping_enable.BCM88650=0
+
+# Set the Base Queue to be added to the packet flow-id
+# when the Flow-Id is set explicitely either by the ITMH
+# or by the Destination resolution in the Packet processing
+flow_mapping_queue_base.BCM88650=0
+
+
+# The allocation of the total per core resources between source and
+# queue based reservation depends on one of two guarantee modes: strict and loose.
+#ingress_congestion_management_guarantee_mode={STRICT,LOOSE} default: STRICT
+ingress_congestion_management_guarantee_mode=LOOSE
+# Each DP has its own thresholds for source based (dynamic) and for queue based (pools 0,1 and headroom).
+#  ingress_congestion_management_{source,queue,all}_threshold_percentage_color_[0-3]=[0-100] default: 100,85,75,0
+#  ingress_congestion_management_{ocb_only,dram_mix}_{pool_{0,1},headroom}=size default: 0
+#  ingress_congestion_management_min_resource_percentage_dynamic=[0-80] default: 20
+
+# Configure maximum IDs of ST-VSQs, maximum IDs of TM-ports, and enabling/disabling header compensation. 
+ingress_congestion_management_stag_max_id.BCM88675=0
+ingress_congestion_management_tm_port_max_id.BCM88675=255
+ingress_congestion_management_pkt_header_compensation_enable.BCM88675=0
+
+# The number of packet buffers used for the allocation of DMA memory at BCM RX task
+# The pool size determined by nof_pkts (256) * 16K.
+#rx_pool_nof_pkts.BCM88675=256
+
+
+# Set the number of priorities supported at egress per Port
+# Options: 1 / 2 / 8
+port_priorities.BCM88650=8
+port_priorities.BCM88675=2
+port_priorities.BCM88470=2
+port_priorities.BCM88270=2
+port_priorities.BCM88680=2
+
+
+# Set the shared multicast resource mode: Strict / Discrete
+egress_shared_resources_mode.BCM88650=Strict
+
+# Define outgoing port rate mode in data rate or packet rate.
+# Options: DATA / PACKET
+otm_port_packet_rate.BCM88650=DATA
+
+# Set Port egress recycling scheduler configuration.
+# 0: Strict Priority Scheduler, 1: Round Robin Scheduler
+port_egress_recycling_scheduler_configuration.BCM88650=0
+
+# Set statically the region mode per region id
+# 0: queue connectors only (InterDigitated = FALSE, OddEven = TRUE)
+# 1: queue connectors, SE (InterDigitated =TRUE, OddEven = TRUE)
+# 2: queue connectors, SE (InterDigitated =TRUE, OddEven = FALSE)
+dtm_flow_mapping_mode_region_65.BCM88650=0
+dtm_flow_mapping_mode_region_66.BCM88650=0
+dtm_flow_mapping_mode_region_67.BCM88650=0
+dtm_flow_mapping_mode_region_68.BCM88650=0
+dtm_flow_mapping_mode_region_69.BCM88650=0
+dtm_flow_mapping_mode_region_70.BCM88650=0
+dtm_flow_mapping_mode_region_71.BCM88650=0
+dtm_flow_mapping_mode_region_72.BCM88650=0
+dtm_flow_mapping_mode_region_73.BCM88650=0
+dtm_flow_mapping_mode_region_74.BCM88650=0
+dtm_flow_mapping_mode_region_75.BCM88650=0
+dtm_flow_mapping_mode_region_76.BCM88650=0
+dtm_flow_mapping_mode_region_77.BCM88650=0
+dtm_flow_mapping_mode_region_78.BCM88650=0
+dtm_flow_mapping_mode_region_79.BCM88650=0
+dtm_flow_mapping_mode_region_80.BCM88650=0
+dtm_flow_mapping_mode_region_81.BCM88650=1
+dtm_flow_mapping_mode_region_82.BCM88650=1
+dtm_flow_mapping_mode_region_83.BCM88650=1
+dtm_flow_mapping_mode_region_84.BCM88650=1
+dtm_flow_mapping_mode_region_85.BCM88650=1
+dtm_flow_mapping_mode_region_86.BCM88650=1
+dtm_flow_mapping_mode_region_87.BCM88650=1
+dtm_flow_mapping_mode_region_88.BCM88650=1
+dtm_flow_mapping_mode_region_89.BCM88650=1
+dtm_flow_mapping_mode_region_90.BCM88650=1
+dtm_flow_mapping_mode_region_91.BCM88650=1
+dtm_flow_mapping_mode_region_92.BCM88650=1
+dtm_flow_mapping_mode_region_93.BCM88650=1
+dtm_flow_mapping_mode_region_94.BCM88650=1
+dtm_flow_mapping_mode_region_95.BCM88650=1
+dtm_flow_mapping_mode_region_96.BCM88650=1
+dtm_flow_mapping_mode_region_97.BCM88650=1
+dtm_flow_mapping_mode_region_98.BCM88650=1
+dtm_flow_mapping_mode_region_99.BCM88650=2
+dtm_flow_mapping_mode_region_100.BCM88650=2
+dtm_flow_mapping_mode_region_101.BCM88650=2
+dtm_flow_mapping_mode_region_102.BCM88650=2
+dtm_flow_mapping_mode_region_103.BCM88650=2
+dtm_flow_mapping_mode_region_104.BCM88650=2
+dtm_flow_mapping_mode_region_105.BCM88650=2
+dtm_flow_mapping_mode_region_106.BCM88650=2
+dtm_flow_mapping_mode_region_107.BCM88650=2
+dtm_flow_mapping_mode_region_108.BCM88650=2
+dtm_flow_mapping_mode_region_109.BCM88650=2
+dtm_flow_mapping_mode_region_110.BCM88650=2
+dtm_flow_mapping_mode_region_111.BCM88650=2
+dtm_flow_mapping_mode_region_112.BCM88650=2
+dtm_flow_mapping_mode_region_113.BCM88650=2
+dtm_flow_mapping_mode_region_114.BCM88650=2
+dtm_flow_mapping_mode_region_115.BCM88650=2
+dtm_flow_mapping_mode_region_116.BCM88650=2
+dtm_flow_mapping_mode_region_117.BCM88650=2
+dtm_flow_mapping_mode_region_118.BCM88650=2
+dtm_flow_mapping_mode_region_119.BCM88650=2
+dtm_flow_mapping_mode_region_120.BCM88650=2
+dtm_flow_mapping_mode_region_121.BCM88650=2
+dtm_flow_mapping_mode_region_122.BCM88650=2
+dtm_flow_mapping_mode_region_123.BCM88650=2
+dtm_flow_mapping_mode_region_124.BCM88650=2
+dtm_flow_mapping_mode_region_125.BCM88650=2
+dtm_flow_mapping_mode_region_126.BCM88650=2
+dtm_flow_mapping_mode_region_127.BCM88650=2
+dtm_flow_mapping_mode_region_128.BCM88650=2
+
+## Configure number of symmetric cores each region supports ##
+dtm_flow_nof_remote_cores_region_1.BCM88650=2
+dtm_flow_nof_remote_cores_region_2.BCM88650=2
+dtm_flow_nof_remote_cores_region_3.BCM88650=2
+dtm_flow_nof_remote_cores_region_4.BCM88650=2
+dtm_flow_nof_remote_cores_region_5.BCM88650=2
+dtm_flow_nof_remote_cores_region_6.BCM88650=2
+dtm_flow_nof_remote_cores_region_7.BCM88650=2
+dtm_flow_nof_remote_cores_region_8.BCM88650=2
+dtm_flow_nof_remote_cores_region_9.BCM88650=2
+dtm_flow_nof_remote_cores_region_10.BCM88650=2
+dtm_flow_nof_remote_cores_region_11.BCM88650=2
+dtm_flow_nof_remote_cores_region_12.BCM88650=2
+dtm_flow_nof_remote_cores_region_13.BCM88650=2
+dtm_flow_nof_remote_cores_region_14.BCM88650=2
+dtm_flow_nof_remote_cores_region_15.BCM88650=2
+dtm_flow_nof_remote_cores_region_16.BCM88650=2
+dtm_flow_nof_remote_cores_region_17.BCM88650=2
+dtm_flow_nof_remote_cores_region_18.BCM88650=2
+dtm_flow_nof_remote_cores_region_19.BCM88650=2
+dtm_flow_nof_remote_cores_region_20.BCM88650=2
+dtm_flow_nof_remote_cores_region_21.BCM88650=2
+dtm_flow_nof_remote_cores_region_22.BCM88650=2
+dtm_flow_nof_remote_cores_region_23.BCM88650=2
+dtm_flow_nof_remote_cores_region_24.BCM88650=2
+dtm_flow_nof_remote_cores_region_25.BCM88650=2
+dtm_flow_nof_remote_cores_region_26.BCM88650=2
+dtm_flow_nof_remote_cores_region_27.BCM88650=2
+dtm_flow_nof_remote_cores_region_28.BCM88650=2
+dtm_flow_nof_remote_cores_region_29.BCM88650=2
+dtm_flow_nof_remote_cores_region_30.BCM88650=2
+dtm_flow_nof_remote_cores_region_31.BCM88650=2
+dtm_flow_nof_remote_cores_region_32.BCM88650=2
+dtm_flow_nof_remote_cores_region_33.BCM88650=2
+dtm_flow_nof_remote_cores_region_34.BCM88650=2
+dtm_flow_nof_remote_cores_region_35.BCM88650=2
+dtm_flow_nof_remote_cores_region_36.BCM88650=2
+dtm_flow_nof_remote_cores_region_37.BCM88650=2
+dtm_flow_nof_remote_cores_region_38.BCM88650=2
+dtm_flow_nof_remote_cores_region_39.BCM88650=2
+dtm_flow_nof_remote_cores_region_40.BCM88650=2
+dtm_flow_nof_remote_cores_region_41.BCM88650=2
+dtm_flow_nof_remote_cores_region_42.BCM88650=2
+dtm_flow_nof_remote_cores_region_43.BCM88650=2
+dtm_flow_nof_remote_cores_region_44.BCM88650=2
+dtm_flow_nof_remote_cores_region_45.BCM88650=2
+dtm_flow_nof_remote_cores_region_46.BCM88650=2
+dtm_flow_nof_remote_cores_region_47.BCM88650=2
+dtm_flow_nof_remote_cores_region_48.BCM88650=2
+dtm_flow_nof_remote_cores_region_49.BCM88650=2
+dtm_flow_nof_remote_cores_region_50.BCM88650=2
+dtm_flow_nof_remote_cores_region_51.BCM88650=2
+dtm_flow_nof_remote_cores_region_52.BCM88650=2
+dtm_flow_nof_remote_cores_region_53.BCM88650=2
+dtm_flow_nof_remote_cores_region_54.BCM88650=2
+dtm_flow_nof_remote_cores_region_55.BCM88650=2
+dtm_flow_nof_remote_cores_region_56.BCM88650=2
+dtm_flow_nof_remote_cores_region_57.BCM88650=2
+dtm_flow_nof_remote_cores_region_58.BCM88650=2
+dtm_flow_nof_remote_cores_region_59.BCM88650=2
+dtm_flow_nof_remote_cores_region_60.BCM88650=2
+#dtm_flow_nof_remote_cores_region_core0_2.BCM88675=2
+
+
+# Configure number of symmetric cores each region supports ##
+#device_core_mode.BCM88470=SINGLE_CORE
+# IL region has offset of 63, i.e. region_1 here will show as region 64 in code
+## Configure number of symmetric cores each region supports ##
+dtm_flow_nof_remote_cores_region_1.BCM88470=2
+dtm_flow_nof_remote_cores_region_2.BCM88470=2
+dtm_flow_nof_remote_cores_region_3.BCM88470=1
+dtm_flow_nof_remote_cores_region_4.BCM88470=1
+dtm_flow_nof_remote_cores_region_5.BCM88470=2
+dtm_flow_nof_remote_cores_region_6.BCM88470=1
+dtm_flow_nof_remote_cores_region_7.BCM88470=2
+dtm_flow_nof_remote_cores_region_8.BCM88470=2
+dtm_flow_nof_remote_cores_region_9.BCM88470=1
+dtm_flow_nof_remote_cores_region_10.BCM88470=1
+dtm_flow_nof_remote_cores_region_11.BCM88470=1
+dtm_flow_nof_remote_cores_region_12.BCM88470=1
+dtm_flow_nof_remote_cores_region_13.BCM88470=1
+dtm_flow_nof_remote_cores_region_14.BCM88470=1
+dtm_flow_nof_remote_cores_region_15.BCM88470=1
+dtm_flow_nof_remote_cores_region_16.BCM88470=1
+dtm_flow_nof_remote_cores_region_17.BCM88470=1
+dtm_flow_nof_remote_cores_region_18.BCM88470=2
+dtm_flow_nof_remote_cores_region_19.BCM88470=1
+dtm_flow_nof_remote_cores_region_20.BCM88470=1
+dtm_flow_nof_remote_cores_region_21.BCM88470=1
+dtm_flow_nof_remote_cores_region_22.BCM88470=1
+dtm_flow_nof_remote_cores_region_23.BCM88470=1
+dtm_flow_nof_remote_cores_region_24.BCM88470=1
+dtm_flow_nof_remote_cores_region_25.BCM88470=1
+dtm_flow_nof_remote_cores_region_26.BCM88470=1
+dtm_flow_nof_remote_cores_region_27.BCM88470=1
+dtm_flow_nof_remote_cores_region_28.BCM88470=1
+dtm_flow_nof_remote_cores_region_29.BCM88470=1
+dtm_flow_nof_remote_cores_region_30.BCM88470=1
+dtm_flow_nof_remote_cores_region_31.BCM88470=1
+dtm_flow_nof_remote_cores_region_32.BCM88470=1
+dtm_flow_nof_remote_cores_region_33.BCM88470=1
+dtm_flow_nof_remote_cores_region_34.BCM88470=1
+dtm_flow_nof_remote_cores_region_35.BCM88470=1
+dtm_flow_nof_remote_cores_region_36.BCM88470=1
+
+dtm_flow_nof_remote_cores_region_37.BCM88470=1
+dtm_flow_nof_remote_cores_region_38.BCM88470=1
+dtm_flow_nof_remote_cores_region_39.BCM88470=1
+dtm_flow_nof_remote_cores_region_40.BCM88470=1
+dtm_flow_nof_remote_cores_region_41.BCM88470=1
+dtm_flow_nof_remote_cores_region_42.BCM88470=1
+dtm_flow_nof_remote_cores_region_43.BCM88470=1
+dtm_flow_nof_remote_cores_region_44.BCM88470=1
+dtm_flow_nof_remote_cores_region_45.BCM88470=1
+dtm_flow_nof_remote_cores_region_46.BCM88470=1
+dtm_flow_nof_remote_cores_region_47.BCM88470=1
+dtm_flow_nof_remote_cores_region_48.BCM88470=1
+dtm_flow_nof_remote_cores_region_49.BCM88470=1
+dtm_flow_nof_remote_cores_region_50.BCM88470=1
+dtm_flow_nof_remote_cores_region_51.BCM88470=1
+dtm_flow_nof_remote_cores_region_52.BCM88470=1
+dtm_flow_nof_remote_cores_region_53.BCM88470=1
+dtm_flow_nof_remote_cores_region_54.BCM88470=1
+dtm_flow_nof_remote_cores_region_55.BCM88470=1
+dtm_flow_nof_remote_cores_region_56.BCM88470=1
+dtm_flow_nof_remote_cores_region_57.BCM88470=1
+dtm_flow_nof_remote_cores_region_58.BCM88470=1
+dtm_flow_nof_remote_cores_region_59.BCM88470=1
+dtm_flow_nof_remote_cores_region_60.BCM88470=1
+
+dtm_flow_mapping_mode_region_33.BCM88470=0
+dtm_flow_mapping_mode_region_34.BCM88470=0
+dtm_flow_mapping_mode_region_35.BCM88470=0
+dtm_flow_mapping_mode_region_36.BCM88470=0
+dtm_flow_mapping_mode_region_37.BCM88470=0
+dtm_flow_mapping_mode_region_38.BCM88470=0
+dtm_flow_mapping_mode_region_39.BCM88470=0
+dtm_flow_mapping_mode_region_40.BCM88470=0
+
+## Configure number of symmetric cores each region supports ##
+dtm_flow_nof_remote_cores_region_1.BCM88270=2
+dtm_flow_nof_remote_cores_region_2.BCM88270=2
+dtm_flow_nof_remote_cores_region_3.BCM88270=2
+dtm_flow_nof_remote_cores_region_4.BCM88270=2
+dtm_flow_nof_remote_cores_region_5.BCM88270=2
+dtm_flow_nof_remote_cores_region_6.BCM88270=2
+dtm_flow_nof_remote_cores_region_7.BCM88270=2
+dtm_flow_nof_remote_cores_region_8.BCM88270=2
+dtm_flow_nof_remote_cores_region_9.BCM88270=2
+dtm_flow_nof_remote_cores_region_10.BCM88270=2
+dtm_flow_nof_remote_cores_region_11.BCM88270=2
+dtm_flow_nof_remote_cores_region_12.BCM88270=2
+dtm_flow_nof_remote_cores_region_13.BCM88270=2
+dtm_flow_nof_remote_cores_region_14.BCM88270=2
+dtm_flow_nof_remote_cores_region_15.BCM88270=2
+dtm_flow_nof_remote_cores_region_16.BCM88270=2
+dtm_flow_nof_remote_cores_region_17.BCM88270=2
+dtm_flow_nof_remote_cores_region_18.BCM88270=2
+dtm_flow_nof_remote_cores_region_19.BCM88270=1
+dtm_flow_nof_remote_cores_region_20.BCM88270=1
+dtm_flow_nof_remote_cores_region_21.BCM88270=1
+dtm_flow_nof_remote_cores_region_22.BCM88270=1
+dtm_flow_nof_remote_cores_region_23.BCM88270=1
+dtm_flow_nof_remote_cores_region_24.BCM88270=1
+dtm_flow_nof_remote_cores_region_25.BCM88270=1
+dtm_flow_nof_remote_cores_region_26.BCM88270=1
+dtm_flow_nof_remote_cores_region_27.BCM88270=1
+dtm_flow_nof_remote_cores_region_28.BCM88270=1
+dtm_flow_nof_remote_cores_region_29.BCM88270=1
+dtm_flow_nof_remote_cores_region_30.BCM88270=1
+dtm_flow_nof_remote_cores_region_31.BCM88270=1
+dtm_flow_nof_remote_cores_region_32.BCM88270=1
+
+dtm_flow_mapping_mode_region_17.BCM88270=0
+dtm_flow_mapping_mode_region_18.BCM88270=0
+dtm_flow_mapping_mode_region_19.BCM88270=0
+dtm_flow_mapping_mode_region_20.BCM88270=0
+
+### Flow Control configuration ###
+# Set the Flow control type per Port.
+# Options: LL (Link-level) / CB2 (Class-Based - 2 classes) /
+# CB8 (Class-Based - 8 classes)
+# flow_control_type.BCM88650=LL
+
+## Out-Of-Band Flow control configuration
+#spn_FC_OOB_TYPE, spn_FC_OOB_MODE, spn_FC_OOB_CALENDER_LENGTH, spn_FC_OOB_CALENDER_REP_COUNT,
+
+## Set voltage mode for oob interfaces
+#HSTL_1.5V
+#3.3V
+#HSTL_1.5V_VDDO_DIV_2
+ext_voltage_mode_oob=3.3V
+
+## Inband Interlaken configuration
+# spn_FC_INBAND_INTLKN_MODE, spn_FC_INBAND_INTLKN_CALENDER_LENGTH, spn_FC_INBAND_INTLKN_CALENDER_REP_COUNT
+# spn_FC_INBAND_INTLKN_CALENDER_LLFC_MODE, spn_FC_INBAND_INTLKN_LLFC_MUB_ENABLE_MASK
+
+### Meter engine configuration ###
+
+# Specify meter operation mode
+# 32 - Two meters per packet (32k total)
+# 64 - One meter per packet (64k total) or two meter per packet in dual core device configured as SINGLE_CORE (128K total)
+# 128 - One meter per packet in dual core device configured as SINGLE_CORE (128K total)
+# Options: 0, 32, 64, 128
+policer_ingress_count.BCM88650=32
+policer_ingress_count.BCM88470=32
+policer_ingress_count.BCM88270=32
+policer_ingress_count.BCM88680=32
+
+
+# For meters in double 32k/64K mode, determine the sharing mode
+# Options:
+# 0 - NONE - For 64k or 128K (one meter per packet)
+# 1 - SERIAL - 32k mode only (two meters per packet)
+# 2 - PARALLEL - For 32k or 64k (two meter per packet)
+policer_ingress_sharing_mode.BCM88650=1
+policer_ingress_sharing_mode.BCM88470=1
+policer_ingress_sharing_mode.BCM88270=1
+policer_ingress_sharing_mode.BCM88680=1
+
+
+# Applies only to Arad+ (88660)
+# For meters in parallel mode, determine the mapping
+# Options: BEST, WORST
+# policer_result_parallel_color_map.BCM88650=WORST
+
+# Applies only to Arad+ (88660)
+# For meters in parallel mode, determine how the buckets are changed
+# Options: CONSTANT, TRANSPARENT, DEFERRED
+# policer_result_parallel_bucket_update.BCM88650=CONSTANT
+
+# Applies only to Arad+ (88660)
+# Set the Ethernet policer to work in color blind mode
+# rate_color_blind.BCM88650=1
+
+# L2 learn limit mode
+# Options: VLAN, VLAN_PORT, TUNNEL or the numeric equivalent 0-2.
+# Default: VLAN
+# l2_learn_limit_mode = VLAN_PORT
+
+# Applies only to Arad+ (88660)
+# Determines the L2 learn limit ranges when l2_learn_limit_mode is set to VLAN_PORT
+# Two range bases can be selected, each of 16K size.
+# Options: 0, 16K, 32K, 48K.
+# Default: 0 & 16K
+# l2_learn_lif_range_base_0 = 0
+# l2_learn_lif_range_base_1 = 16K
+
+# SW shadow mode for exact match tables. Required for SER support and DBAL diagnostics.
+#   0 - Disabled (Default)
+#   1 - Enabled
+#   2 - Disabled for LEM, enabled for other exact match tables
+exact_match_tables_shadow_enable.BCM88650 = 1
+exact_match_tables_shadow_enable.BCM88675 = 2
+
+# determine how many cmcs connected to the CPU. 
+# default value = 1
+# applies only to jericho and above. 
+pci_cmcs_num.88675 = 3
+pci_cmcs_num.88470 = 3
+
+### Counter engine configuration ###
+
+# Set the Counter source
+# Options: INGRESS_FIELD / INGRESS_VOQ / INGRESS_VSQ / INGRESS_CNM / 
+# INGRESS_LATENCY / EGRESS_FIELD / EGRESS_VSI / EGRESS_OUT_LIF / EGRESS_TM (per queue) / EGRESS_TM_PORT (per port)
+# EGRESS_RECEIVE_VSI / EGRESS_RECEIVE_OUT_LIF / EGRESS_RECEIVE_TM (per queue) / EGRESS_RECEIVE_TM_PORT (per port)
+# INGRESS_OAM / EGRESS_OAM
+# 2 Counter-Pointers can be set (with _0 and _1) for
+# INGRESS_FIELD / EGRESS_FIELD / EGRESS_VSI / EGRESS_OUT_LIF / EGRESS_TM / EGRESS_TM_PORT
+# Range extension can be set (with _LSB and _MSB) for
+# INGRESS_FIELD / EGRESS_VSI / EGRESS_OUT_LIF / EGRESS_TM / EGRESS_TM_PORT /EGRESS_RECEIVE_VSI /
+# EGRESS_RECEIVE_OUT_LIF / EGRESS_RECEIVE_TM / EGRESS_RECEIVE_TM_PORT
+counter_engine_source_0.BCM88650=INGRESS_FIELD_0
+counter_engine_source_1.BCM88650=INGRESS_FIELD_1
+counter_engine_source_2.BCM88650=INGRESS_VOQ
+counter_engine_source_3.BCM88650=EGRESS_FIELD
+
+# Configure the statistic interface egress transmit PP source and the ingress received PP source
+# Options for egress: EGRESS_VSI / EGRESS_OUT_LIF / EGRESS_TM / EGRESS_TM_PORT (the default is TM)
+# Options for ingress: INGRESS_VSI / INGRESS_IN_LIF / INGRESS_TM (the default is TM)
+# valid just when there is no conflict with the other counter engines
+#counter_engine_source_egress_pp_stat0.BCM88650=EGRESS_TM
+#counter_engine_source_egress_pp_stat1.BCM88650=EGRESS_VSI
+#counter_engine_source_ingress_pp_stat0.BCM88650=INGRESS_IN_LIF
+#counter_engine_source_ingress_pp_stat1.BCM88650=INGRESS_TM
+
+
+# Set the Counter engine resolution
+# SIMPLE_COLOR = green, not green
+# SIMPLE_COLOR_FWD = fwd green, fwd not green (BCM88660_A0 only)
+# SIMPLE_COLOR_DROP = drop green, drop not green (BCM88660_A0 only)
+# FWD_DROP = forwarded, dropped
+# GREEN_NOT_GREEN = fwd grn, drop grn, fwd not grn, drop not grn
+# FULL_COLOR = fwd grn, drop grn, fwd not grn, drop yel, drop red
+# ALL = received
+# FWD = forwarded, DROP = droped (not supported by ARAD_A0)
+# CONFIGURABLE = defined by counter_engine_map_ SOC properties (BCM88660_A0 only)
+counter_engine_statistics_0.BCM88650=FULL_COLOR
+counter_engine_statistics_1.BCM88650=FULL_COLOR
+counter_engine_statistics_2.BCM88650=FULL_COLOR
+counter_engine_statistics_3.BCM88650=FULL_COLOR
+
+# Set the Counter format
+# Options: PACKETS_AND_BYTES / PACKETS / BYTES
+# / MAX_QUEUE_SIZE / LATENCY / PACKETS_AND_PACKETS(supported just in FWD_DROP statistic in BCM88660_A0)
+# If not PACKETS_AND_BYTES or PACKETS_AND_PACKETS, the HW Counter width is 59 bits, thus
+# no background SW operation is performed
+counter_engine_format_0.BCM88650=PACKETS_AND_BYTES
+counter_engine_format_1.BCM88650=PACKETS_AND_BYTES
+counter_engine_format_2.BCM88650=PACKETS_AND_BYTES
+counter_engine_format_3.BCM88650=PACKETS_AND_BYTES
+
+# #enable/disable counter processor background thread (default:1-enable)
+# counter_engine_sampling_interval=1
+
+
+### Configurable mode configuration (BCM88660_A0 only)###
+# counter_engine_statistics_0.BCM88660_A0=CONFIGURABLE
+# counter_engine_map_enable_0.BCM88660_A0=1
+# counter_engine_map_size_0.BCM88660_A0=4
+# counter_engine_map_fwd_green_offset_0.BCM88660_A0=0
+# counter_engine_map_fwd_yellow_offset_0.BCM88660_A0=1
+# counter_engine_map_fwd_red_offset_0.BCM88660_A0=1
+# counter_engine_map_fwd_black_offset_0.BCM88660_A0=2
+# counter_engine_map_drop_green_offset_0.BCM88660_A0=3
+# counter_engine_map_drop_yellow_offset_0.BCM88660_A0=3
+# counter_engine_map_drop_red_offset_0.BCM88660_A0=3
+# counter_engine_map_drop_black_offset_0.BCM88660_A0=3
+
+### Statistic-Report configuration ###
+# Enable the Statistic-Interface configuration
+# stat_if_enable_<port> - not supported by ARAD_A0
+# stat_if_enable.BCM88650=1
+
+# ## Statistic-Report Properties
+# # Set Statistic-Report interface rate in Mbps
+# # If Value is '0' the statistics port rate will be used. Default: 0.
+# stat_if_rate.BCM88650=0
+# # Set the Statistic-Report mode
+# # Options: BILLING / BILLING_QUEUE_NUMBER (not supported by ARAD_A0)/ QSIZE
+# stat_if_report_mode.BCM88650=QSIZE
+# #Indicate if idle reports must be sent
+# #when the Statistic-report rate is too low
+# stat_if_idle_reports_present.BCM88650=0
+# # Indicate if the reported packet size is the original packet size
+# stat_if_report_original_pkt_size.BCM88650=1
+# #If set then a single ingress-billing report will be generated
+# #for the whole set of the multicast copies
+# stat_if_report_multicast_single_copy=1
+# ## Statistic Packet configurations
+# # Set the Statistic Packet size (Bytes)
+# # Valid values: 65B/126B/248B/492B (Queue-Size), 64B/128B/256B/512B/1024B (Billing).
+# stat_if_pkt_size=64B
+#
+# ## Scrubber configuration
+# # Set the range of VOQs to scrub. Range: 0 - 96K-1.
+# stat_if_scrubber_queue_min.BCM88650=0
+# stat_if_scrubber_queue_max.BCM88650=0
+#
+# # Set the scrubber rate range
+# # If set to 0 (default), the scrubber is disabled. Units: nanoseconds
+# stat_if_scrubber_rate_min.BCM88650=0
+# stat_if_scrubber_rate_max.BCM88650=0
+#
+# # Set the thresholds (thresh_id 0 - 15) defining
+# # occupancy range per resource type:
+# # DRAM Buffers, Buffer descriptors, Buffer descriptors buffers
+# stat_if_scrubber_bdb_th.BCM88650=0
+# stat_if_scrubber_buffer_descr_th.BCM88650=0
+# stat_if_uc_dram_buffer_descr_th.BCM88650=0
+#
+# #Relective report for queue size mode - not supported by ARAD_A0
+# #Reports will be created for queue num range (stat_if_selective_report_queue_min -stat_if_selective_report_queue_max)
+# #Default - all range
+# stat_if_selective_report_queue_min.BCM88650_B0=0
+# stat_if_selective_report_queue_max.BCM88650_B0=98303
+
+### Transaction - DMA configuration ###
+# Time to wait for SCHAN channel response (from CMIC). Units: microseconds.
+
+
+### Counter threads ###
+# # set port bitmap on which statistics collection will be enabled (default all ports)
+# bcm_stat_pbmp.BCM88675=0xfffffffff000000000000000000000000000000000000000000000000000000000003e002
+#
+# # set statistics collection interval in microseconds (default is 1000000)
+# bcm_stat_interval.BCM88675=1000000
+
+### Control optimization of cosq port initializations: speed for memory ###
+runtime_performance_optimize_enable_sched_allocation.BCM88650=1
+runtime_performance_optimize_enable_sched_allocation.BCM88675=1
+
+### static tables initiation (Supported for Jericho) ###
+# Options: 1 - initiating static tables, 0 - doesn't initiate tables (Default Value for PCID/emulation)
+#custom_feature_static_tbl_full_init.BCM88675=1
+#custom_feature_dynamic_tbl_full_init.BCM88675=1
+
+### Interrupts ###
+## Set interrupts global parameters.
+# Options: 1 - Polling interrupt mode, 0 - Line/MSI interrupt mode. Default: 1.
+polled_irq_mode.BCM88650=0
+polled_irq_mode.BCM88675=0
+#  Set the delay in microsecond between the polling, relevant only to Polling mode.  Default: 0x0.
+polled_irq_delay.BCM88650=50000
+
+## CMIC interrupts:
+# Enable: Use interrupts completion instead of polling completion for the following operations.
+#         Options: 1 - Enable, 0 - Disable. Default: 0.
+# Timeout: delay in Microsecond between the polling, relevant only to Polling completion mode.
+# SCHAN:
+#schan_intr_enable.0=1
+schan_timeout_usec.BCM88650=300000
+# TDMA
+tdma_intr_enable.BCM88650=1
+tdma_intr_enable.BCM88675=0
+tdma_timeout_usec.BCM88650=5000000
+tdma_timeout_usec.BCM88675=560000000
+# TSLAM
+tslam_intr_enable.BCM88650=1
+tslam_intr_enable.BCM88675=0
+tslam_timeout_usec.BCM88650=5000000
+tslam_timeout_usec.BCM88675=560000000
+# MIIM
+#miim_intr_enable.0=1
+miim_timeout_usec.0=300000
+
+### DRAM configuration ###
+
+# DRAM buffer (Dbuff) size
+# Allowed values: 256/512/1024/2048.
+ext_ram_dbuff_size.BCM88650=1024
+ext_ram_dbuff_size.BCM88470=4096
+ext_ram_dbuff_size.BCM88270=4096
+
+# Number of external DRAMs.
+# Allowed values for 88650: 0/2/3/4/6/8.
+# Allowed values for 88660: 0/1/2/3/4/6/8. A value of 1 is permitted only in ONE WAY BYPASS ocb mode.
+# Allowed values for 88675: 0/2/3/41/42/6/8. '41' - configure 4 drams in Single Side mode (A, B, C, D).
+#                                            '42' - configure 4 drams in symmetric mode (A, C, F, H).
+# Value of 0 disables the DRAM.
+ext_ram_present.BCM88650=8
+## this soc is configured in per board soc file (bcm88x7x_board.soc)
+ext_ram_present.BCM88470=3
+ext_ram_present.BCM88270=1
+
+### Dram Tuning (Shmoo)
+# 3 = Skip Dram Tuning (Shmoo).
+# 2 = Use Dram saved config Parameters, if no Parameters Perform Shmoo on init. Default option.
+# 1 = Perform Shmoo on init.
+# 0 = Use Dram saved config Parameters, if no Parameters do nothing.
+ddr3_auto_tune.BCM88650=2
+ddr3_auto_tune.BCM88270=2
+ddr3_auto_tune.BCM88470=2
+
+##### DDR Tuning parameters for IL SVK4
+combo28_tune_dq_wr_min_vdl_byte3_ci1.0=0x00000004,0x00000003,0x00000007,0x00000003,0x00000002,0x00000000,0x00000006,0x00000004,
+combo28_tune_dq_rd_min_vdl_byte1_ci2.0=0x00000017,0x00000014,0x00000016,0x00000014,0x00000017,0x00000018,0x00000017,0x00000017,
+combo28_tune_common_macro_reserved_reg_ci0.0=0x00000000,
+combo28_tune_control_regs_reserved_reg_ci1.0=0x00000003,
+combo28_tune_control_regs_read_clock_config_ci0.0=0x00000002,
+combo28_tune_dq_rd_min_vdl_byte2_ci0.0=0x00000018,0x00000017,0x00000017,0x00000018,0x00000017,0x00000014,0x00000015,0x00000017,
+combo28_tune_dq_read_max_vdl_fsm_ci1.0=0x0000004c,0x0000004c,0x0000004c,0x0000004c,
+combo28_tune_aq_u_max_vdl_ctrl_ci1.0=0x00000214,
+combo28_tune_dq_rd_max_vdl_dqsn_ci1.0=0x00000017,0x00000019,0x0000002d,0x0000002d,
+combo28_tune_dq_ren_fifo_config_ci0.0=0x00000090,0x00000090,0x00000090,0x00000090,
+combo28_tune_dq_wr_min_vdl_dbi_ci1.0=0x00000001,0x00000004,0x00000002,0x00000003,
+combo28_tune_aq_u_macro_reserved_reg_ci0.0=0x00000000,
+combo28_tune_dq_rd_min_vdl_edc_ci1.0=0x00000016,0x00000016,0x00000017,0x0000001a,
+combo28_tune_aq_l_max_vdl_addr_ci1.0=0x00000214,
+combo28_tune_dq_wr_max_vdl_data_ci2.0=0x00000238,0x00000406,0x00000247,0x00000416,
+combo28_tune_dq_wr_min_vdl_byte3_ci2.0=0x00000000,0x00000003,0x00000000,0x00000000,0x00000000,0x00000003,0x00000001,0x00000001,
+combo28_tune_common_macro_reserved_reg_ci1.0=0x00000000,
+combo28_tune_control_regs_reserved_reg_ci2.0=0x00000003,
+combo28_tune_control_regs_read_clock_config_ci1.0=0x00000002,
+combo28_tune_dq_rd_min_vdl_byte2_ci1.0=0x00000015,0x00000015,0x00000019,0x00000017,0x00000014,0x00000016,0x00000018,0x00000016,
+combo28_tune_dq_read_max_vdl_fsm_ci2.0=0x0000004d,0x0000004d,0x0000004d,0x0000004d,
+combo28_tune_aq_u_max_vdl_ctrl_ci2.0=0x00000048,
+combo28_tune_dq_rd_max_vdl_dqsn_ci2.0=0x00000023,0x00000022,0x0000002c,0x00000020,
+combo28_tune_dq_ren_fifo_config_ci1.0=0x00000090,0x00000090,0x00000090,0x00000090,
+combo28_tune_dq_wr_min_vdl_dbi_ci2.0=0x00000002,0x00000001,0x00000003,0x00000001,
+combo28_tune_aq_u_macro_reserved_reg_ci1.0=0x00000000,
+combo28_tune_dq_rd_min_vdl_edc_ci2.0=0x00000016,0x00000017,0x00000016,0x00000017,
+combo28_tune_aq_l_max_vdl_addr_ci2.0=0x00000048,
+combo28_tune_control_regs_ren_fifo_central_initializer_ci0.0=0x0000000f,
+combo28_tune_common_macro_reserved_reg_ci2.0=0x00000000,
+combo28_tune_control_regs_read_clock_config_ci2.0=0x00000002,
+combo28_tune_dq_rd_min_vdl_byte2_ci2.0=0x00000018,0x00000016,0x00000015,0x00000014,0x00000015,0x00000015,0x00000014,0x00000015,
+combo28_tune_dq_wr_min_vdl_byte0_ci0.0=0x00000001,0x00000002,0x00000000,0x00000002,0x00000002,0x00000003,0x00000004,0x00000001,
+combo28_tune_dq_ren_fifo_config_ci2.0=0x00000090,0x00000090,0x00000090,0x00000090,
+combo28_tune_dq_rd_min_vdl_byte3_ci0.0=0x00000019,0x00000017,0x0000001a,0x0000001c,0x00000017,0x00000018,0x00000014,0x00000014,
+combo28_tune_aq_u_macro_reserved_reg_ci2.0=0x00000000,
+combo28_tune_control_regs_ren_fifo_central_initializer_ci1.0=0x0000000f,
+combo28_tune_aq_l_max_vdl_ctrl_ci0.0=0x00000201,
+combo28_tune_control_regs_input_shift_ctrl_ci0.0=0x00000070,
+combo28_tune_dq_wr_min_vdl_byte0_ci1.0=0x00000005,0x00000001,0x00000000,0x00000000,0x00000001,0x00000000,0x00000000,0x00000003,
+combo28_tune_dq_rd_min_vdl_byte3_ci1.0=0x00000018,0x00000017,0x0000001c,0x0000001d,0x00000014,0x00000017,0x0000001e,0x0000001d,
+combo28_tune_control_regs_ren_fifo_central_initializer_ci2.0=0x0000000f,
+combo28_tune_dq_rd_max_vdl_dqsp_ci0.0=0x00000018,0x00000019,0x00000025,0x0000002b,
+combo28_tune_aq_l_max_vdl_ctrl_ci1.0=0x00000214,
+combo28_tune_control_regs_input_shift_ctrl_ci1.0=0x00000070,
+combo28_tune_dq_wr_min_vdl_byte0_ci2.0=0x00000000,0x00000005,0x00000003,0x00000003,0x00000003,0x00000003,0x00000003,0x00000002,
+combo28_tune_dq_wr_min_vdl_edc_ci0.0=0x00000000,0x00000000,0x00000000,0x00000000,
+combo28_tune_dq_rd_min_vdl_byte3_ci2.0=0x00000015,0x00000017,0x00000014,0x00000015,0x00000016,0x00000018,0x00000018,0x00000019,
+combo28_tune_dq_wr_min_vdl_byte1_ci0.0=0x00000002,0x00000002,0x00000002,0x00000003,0x00000002,0x00000001,0x00000002,0x00000000,
+combo28_tune_control_regs_edcen_fifo_central_init_ci0.0=0x00000000,
+combo28_tune_dq_macro_reserved_reg_ci0.0=0x00000026,0x00000026,0x00000025,0x00000026,
+combo28_tune_dq_rd_max_vdl_dqsp_ci1.0=0x00000017,0x00000019,0x0000002d,0x0000002d,
+combo28_tune_aq_l_max_vdl_ctrl_ci2.0=0x00000048,
+combo28_tune_control_regs_input_shift_ctrl_ci2.0=0x00000070,
+combo28_tune_dq_rd_min_vdl_dbi_ci0.0=0x00000016,0x00000017,0x00000017,0x00000018,
+combo28_tune_dq_wr_min_vdl_edc_ci1.0=0x00000000,0x00000000,0x00000000,0x00000000,
+combo28_tune_dq_wr_min_vdl_byte1_ci1.0=0x00000006,0x00000007,0x00000005,0x00000005,0x00000000,0x00000001,0x00000007,0x00000005,
+combo28_tune_dq_edcen_fifo_config_ci0.0=0x00000080,0x00000080,0x00000080,0x00000080,
+combo28_tune_control_regs_edcen_fifo_central_init_ci1.0=0x00000000,
+combo28_tune_dq_vref_dac_config_ci0.0=0x00760000,0x00740000,0x00800000,0x007c0000,
+combo28_tune_dq_macro_reserved_reg_ci1.0=0x00000026,0x0000002a,0x00000028,0x00000029,
+combo28_tune_dq_rd_max_vdl_dqsp_ci2.0=0x00000023,0x00000022,0x0000002c,0x00000020,
+combo28_tune_dq_rd_min_vdl_byte0_ci0.0=0x00000016,0x00000014,0x00000014,0x00000016,0x00000015,0x00000015,0x00000016,0x00000016,
+combo28_tune_dq_rd_min_vdl_dbi_ci1.0=0x00000016,0x00000016,0x00000017,0x0000001a,
+combo28_tune_aq_u_max_vdl_addr_ci0.0=0x00000201,
+combo28_tune_dq_wr_max_vdl_dqs_ci0.0=0x00000440,0x0000044a,0x00000422,0x00000430,
+combo28_tune_dq_wr_min_vdl_edc_ci2.0=0x00000000,0x00000000,0x00000000,0x00000000,
+combo28_tune_dq_wr_min_vdl_byte1_ci2.0=0x00000003,0x00000000,0x00000002,0x00000001,0x00000002,0x00000001,0x00000004,0x00000001,
+combo28_tune_dq_edcen_fifo_config_ci1.0=0x00000080,0x00000080,0x00000080,0x00000080,
+combo28_tune_control_regs_edcen_fifo_central_init_ci2.0=0x00000000,
+combo28_tune_dq_vref_dac_config_ci1.0=0x007e0000,0x007a0000,0x00820000,0x00820000,
+combo28_tune_dq_macro_reserved_reg_ci2.0=0x00000028,0x00000028,0x0000002a,0x0000002b,
+combo28_tune_dq_wr_min_vdl_byte2_ci0.0=0x00000001,0x00000000,0x00000003,0x00000002,0x00000005,0x00000005,0x00000003,0x00000005,
+combo28_tune_dq_rd_min_vdl_byte0_ci1.0=0x00000015,0x00000017,0x00000017,0x00000017,0x00000017,0x00000015,0x00000014,0x00000015,
+combo28_tune_dq_rd_min_vdl_dbi_ci2.0=0x00000016,0x00000017,0x00000016,0x00000017,
+combo28_tune_control_regs_shared_vref_dac_config_ci0.0=0x00920000,
+combo28_tune_aq_u_max_vdl_addr_ci1.0=0x00000214,
+combo28_tune_dq_wr_max_vdl_dqs_ci1.0=0x00000440,0x00000446,0x0000042d,0x00000434,
+combo28_tune_dq_edcen_fifo_config_ci2.0=0x00000080,0x00000080,0x00000080,0x00000080,
+combo28_tune_aq_l_macro_reserved_reg_ci0.0=0x00000000,
+combo28_tune_dq_vref_dac_config_ci2.0=0x00840000,0x007e0000,0x008a0000,0x00820000,
+combo28_tune_dq_wr_min_vdl_byte2_ci1.0=0x00000000,0x00000001,0x00000002,0x00000004,0x00000003,0x00000000,0x00000004,0x00000007,
+combo28_tune_dq_rd_min_vdl_byte0_ci2.0=0x00000014,0x00000015,0x00000015,0x00000014,0x00000016,0x00000017,0x00000015,0x00000016,
+combo28_tune_control_regs_shared_vref_dac_config_ci1.0=0x00920000,
+combo28_tune_aq_u_max_vdl_addr_ci2.0=0x00000048,
+combo28_tune_dq_wr_max_vdl_dqs_ci2.0=0x00000424,0x00000435,0x0000043c,0x00000444,
+combo28_tune_dq_rd_min_vdl_byte1_ci0.0=0x00000017,0x00000017,0x00000018,0x00000018,0x00000014,0x00000015,0x00000015,0x00000015,
+combo28_tune_aq_l_macro_reserved_reg_ci1.0=0x00000000,
+combo28_tune_dq_wr_min_vdl_byte2_ci2.0=0x00000004,0x00000000,0x00000004,0x00000005,0x00000002,0x00000003,0x00000004,0x00000004,
+combo28_tune_dq_wr_max_vdl_data_ci0.0=0x00000416,0x00000428,0x00000232,0x00000241,
+combo28_tune_control_regs_shared_vref_dac_config_ci2.0=0x00920000,
+combo28_tune_dq_wr_min_vdl_byte3_ci0.0=0x00000005,0x00000005,0x00000005,0x00000004,0x00000003,0x00000003,0x00000003,0x00000000,
+combo28_tune_dq_rd_min_vdl_byte1_ci1.0=0x00000018,0x00000018,0x00000018,0x00000014,0x00000014,0x00000014,0x00000018,0x00000014,
+combo28_tune_aq_l_macro_reserved_reg_ci2.0=0x00000000,
+combo28_tune_control_regs_reserved_reg_ci0.0=0x00000003,
+combo28_tune_dq_read_max_vdl_fsm_ci0.0=0x0000004b,0x0000004b,0x0000004b,0x0000004b,
+combo28_tune_aq_u_max_vdl_ctrl_ci0.0=0x00000201,
+combo28_tune_dq_rd_max_vdl_dqsn_ci0.0=0x00000018,0x00000019,0x00000025,0x0000002b,
+combo28_tune_dq_wr_min_vdl_dbi_ci0.0=0x00000001,0x00000001,0x00000003,0x00000003,
+combo28_tune_dq_rd_min_vdl_edc_ci0.0=0x00000016,0x00000017,0x00000017,0x00000018,
+combo28_tune_aq_l_max_vdl_addr_ci0.0=0x00000201,
+combo28_tune_dq_wr_max_vdl_data_ci1.0=0x00000414,0x0000041e,0x00000234,0x00000245,
+
+### Enable BIST
+# Run Dram BIST on initialization, if BIST fail the initialization will fail. Defult: 1.
+# bist_enable_dram.BCM88650=1
+bist_enable_dram.BCM88270=1
+bist_enable_dram.BCM88470=1
+
+### Example for Dram Saved config Parameters.
+## This example is for ci=14 (Dram=7).
+#ddr3_tune_addrc_ci14=0x000000ae
+#ddr3_tune_wr_dq_wl1_ci14=0x92929292,0x92929292,0x92929292,0x92929292
+#ddr3_tune_wr_dq_wl0_ci14=0x93939393,0x93939393,0x92929292,0x92929292
+#ddr3_tune_wr_dq_ci14=0x80808080
+#ddr3_tune_vref_ci14=0x000007df
+#ddr3_tune_rd_dqs_ci14=0x96969191,0x90909191
+#ddr3_tune_rd_dq_wl1_rn_ci14=0x82828282,0x82828282,0x82828282,0x82828282
+#ddr3_tune_rd_dq_wl0_rn_ci14=0x82828282,0x82828282,0x89898989,0x89898989
+#ddr3_tune_rd_dq_wl1_rp_ci14=0x82828282,0x82828282,0x82828282,0x82828282
+#ddr3_tune_rd_dq_wl0_rp_ci14=0x82828282,0x82828282,0x89898989,0x89898989
+#ddr3_tune_rd_en_ci14=0x009d9e9d,0x00a2a3a1
+#ddr3_tune_rd_data_dly_ci14=0x00000505
+
+
+### Dram type: Select ONLY ONE of the following DRAM types, to configure all dram related parameteres per type.
+
+# Dram Type for Arad:
+#dram_type_DDR3_HYNIX_H5TQ2G63BFR_TEC_1066=1
+#dram_type_DDR3_HYNIX_H5TQ2G63BFR_TEC_933=1
+#dram_type_DDR3_HYNIX_H5TQ2G63BFR_TEC_800=1
+#dram_type_DDR3_MICRON_MT41J256M16_4GBIT_1066=1
+#dram_type_DDR3_MICRON_MT41J128M16HA_125_1066=1
+#dram_type_DDR3_MICRON_MT41J128M16HA_125_933=1
+#dram_type_DDR3_MICRON_MT41J128M16HA_125_800=1
+#dram_type_DDR3_MICRON_MT42J64M16LA_15E_667=1
+#dram_type_DDR3_SAMSUNG_K4B4G1646B_4GBIT_1066=1
+#dram_type_DDR3_SAMSUNG_K4B1G1646G_933=1
+#dram_type_DDR3_SAMSUNG_K4B1G1646G_800=1
+
+# Dram Type for Jericho:
+## this soc is configured in per board soc file (bcm88x7x_board.soc)
+#dram_type_DDR4_MICRON_Y4016AABG_JD_F_4GBIT=1
+dram_type_DDR4_MICRON_MT40A256M16HA_083EA_4GBIT=1
+#dram_type_DDR4_HYNIX_H5AN4G6NMFR_VJC_4GBIT=1
+#dram_type_GDDR5_SAMSUNG_K4G20325FD_2GBIT=1
+#dram_type_GDDR5_SAMSUNG_K4G41325FC_4GBIT=1
+#dram_type_GDDR5_MICRON_EDW4032CABG_4GBIT=1
+#dram_type_GDDR5_HYNIX_H5GC4H24MFR_T2C_4GBIT=1
+
+# Dram Type for Ardon:
+#dram_type_DDR4_MICRON_EDY4016AABG_DRFR_4GBIT=1
+
+# DRAM frequency
+ext_ram_freq.BCM88675=1600
+
+### Setting dram_type_DDR3_HYNIX_H5TQ2G63BFR_TEC_1066 Parameters as Default:
+## All other dram types parameter resides in arad.soc. choosing another Dram Type will override the following parameters.
+ext_ram_t_rrd=6000
+ext_ram_columns=1024
+ext_ram_banks=8
+ext_ram_ap_bit_pos=10
+ext_ram_burst_size=32
+ext_ram_t_ref=3900000
+ext_ram_t_wr=15000
+ext_ram_t_wtr=7500
+ext_ram_t_rtp=7500
+ext_ram_freq=1066
+ext_ram_rows=16384
+ext_ram_jedec=29
+ext_ram_t_rc=46090
+ext_ram_t_rcd_rd=13090
+ext_ram_t_rcd_wr=13090
+ext_ram_t_rp=13090
+ext_ram_t_rfc=160000
+ext_ram_t_ras=33000
+ext_ram_c_wr_latency=10
+ext_ram_t_faw=35000
+ext_ram_c_cas_latency=14
+ddr3_mem_grade=0x141414
+
+## address or bank address swap example
+#swaps are found in bcm88xxx_board.soc
+#ext_ram_addr_bank_swap_dramX_bitY=M
+
+## dq swap example
+#swaps are found in bcm88xxx_board.soc
+#bit swap example:
+#ext_ram_dq_swap_dramX_byteY_bitZ=M
+#byte swap example:
+#ext_ram_dq_swap_dramX_byteY=M
+
+## Dram Gear down mode. Valid values: 0 - Enable, 1 - Disable. Default: 0x0.
+ext_ram_gear_down_mode.BCM88675=0
+
+## Alert_n de-assertion period above which error is considered parity error
+#ext_ram_alert_n_period_thrs.BCM88675=20
+
+## Dram Address bus inversion. Valid values: 0 - Enable, 1 - Disable. Default: 0x0.
+## this soc is configured in per board soc file (bcm88x7x_board.soc)
+#ext_ram_abi.BCM88675=0
+
+## Data bus inversion on write/read direction. Valid values: 0 - Disable, 1 - Enable. Default: 0x0.
+## those socs are configured in per board soc file (bcm88x7x_board.soc)
+#ext_ram_write_dbi.BCM88675=0
+#ext_ram_read_dbi.BCM88675=0
+
+## Enable write/read CRC (DDR4 does not support read CRC). Default: 0x0.
+## those socs are configured in per board soc file (bcm88x7x_board.soc)
+#ext_ram_write_crc.BCM88675=1
+#ext_ram_read_crc.BCM88675=0
+
+## Command parity latency. Valid values: 0 - Disable, 4,5 or 6 - Valid values. Default: 0x0.
+## this soc is configured in per board soc file (bcm88x7x_board.soc)
+#ext_ram_cmd_par_latency.BCM88675=6
+
+# DRAM pre-configurations according to config variables which defines
+# Dram Type. BCM88650 supports only DDR3.
+# Dram Type. BCM88675 supports DDR4 and GDDR5.
+ext_ram_type.BCM88650=DDR3
+## this soc is configured in per board soc file (bcm88x7x_board.soc)
+#ext_ram_type.BCM88675=DDR4
+
+# Total Dram Size (MBytes)
+# For 8 drams interfaces, 2 channel each, Each channel 2Gbit Dram. the total DRAM size is 32GBits=4000MBytes.
+ext_ram_total_size.BCM88650=4000
+## this soc is configured in per board soc file (bcm88x7x_board.soc)
+#ext_ram_total_size.BCM88675=8000
+
+# Total buffer size allocated for User buffer. Units: Mbytes. Default: '0x0'.
+# Supported suffix:
+#       dram - the buffer size will be subtracted from the DRAM size available for packet memory.
+#user_buffer_size=0
+#user_buffer_size_dram=50
+
+# DRAM ClamShell (interface swap its HW PIN pairs during init.)
+# Note: Only one of DRAMs can have its PIN swapped
+# Valid values: 0/1
+#dram0_clamshell_enable.BCM88650=1
+#dram1_clamshell_enable.BCM88650=1
+
+# DRAM maximum number of crc error per buffer, buffer deleted by interrupt application.
+#dram_crc_del_buffer_max_reclaims=0
+
+##############################
+# Config variable below are only accessed from dune.soc, and are used to
+# configure BSP / example application / group of formal config variables.
+##############################
+
+## If set, always configures synthesizers, even if the configured rate is equal to
+## their nominal rate. Can be disabled to speedup bringup time (keep in mind that if
+## disabled, changing a synt to a non-nominal freq and than back to nominal will not
+## work
+#synt_over.BCM88650=1
+
+# Local variables for board synthesizers freq. Fabric, combo and nif also configure
+# the *_ref_clock soc properties for these frequencies. core, ddr and phy only
+# configures the synthesizer
+synt_core.BCM88650=100000000
+synt_ddr.BCM88650=125000000
+synt_phy.BCM88650=156250000
+# in Jericho, this freq is used only for the core synth
+synth_dram_freq.BCM88650=25
+
+#Configure the reference clock frequencies for NIF and Fabric SerDes
+# Options:  0 - 125MHz, 1 - 156.25MHz, -1 - Disable
+serdes_nif_clk_freq.BCM88650=1
+serdes_fabric_clk_freq.BCM88650=1
+#serdes_nif_clk_freq.BCM88270=-1
+#serdes_fabric_clk_freq.BCM88270=-1
+serdes_nif_clk_freq.BCM8206=-1
+serdes_fabric_clk_freq.BCM8206=-1
+#serdes_nif_clk_freq_out0.BCM88675=1
+#serdes_nif_clk_freq_out1.BCM88675=1
+#serdes_nif_clk_freq_out2.BCM88675=1
+#serdes_nif_clk_freq_in0.BCM88675=1
+#serdes_nif_clk_freq_in1.BCM88675=1
+#serdes_nif_clk_freq_in2.BCM88675=1
+#serdes_fabric_clk_freq_out0.BCM88675=1
+#serdes_fabric_clk_freq_out1.BCM88675=1
+#serdes_fabric_clk_freq_in0.BCM88675=1
+#serdes_fabric_clk_freq_in1.BCM88675=1
+
+
+# IEEE 1588 / Broadsync -
+# configure clock :
+#  DPLL mode/lock: 0 - eci ts pll clk disabled, 1 - configure eci ts pll clk
+#  DPLL phase/freq. Default initial: lo = 0x40000000, hi = 0x10000000.
+#phy_1588_dpll_frequency_lock.BCM88650=1
+#phy_1588_dpll_phase_initial_lo.BCM88650=0x40000000
+#phy_1588_dpll_phase_initial_hi.BCM88650=0x10000000
+# IEEE 1588 -
+# port external MAC
+#  indication whether external MAC exists or not.
+#  0: 1588 external MAC does not exist
+#  1: 1588 external MAC exists
+#  the external MAC substracts the RX time from the correction field
+#  and adds the TX time to the correction field.
+#ext_1588_mac_enable_14.BCM88650=1
+#  If set, 48 bits stamping is used for 1588 packets. otherwise 32 bit stamping is used
+#  0: 1588 32b stamping (Default)
+#  1: 1588 48b stamping
+#bcm88660_1588_48b_stamping_enable.BCM88660=1
+
+## Trill configurations
+# Trill mode: 0 (disabled) / 1 (coarse-grained) / 2 (fine-grained)
+#trill_mode.BCM88650=1
+
+# Trill multicast prunning mode:
+# 0: no prunning - vsi is not part of the key
+# 1: VSI prunning: Key is dist-tree,esadit-bit,VSI.
+trill_mc_prune_mode.BCM88650=0
+
+# Enable SA authentication
+#sa_auth_enabled=1
+
+# Bridge default logical interfaces allocation IDS
+logical_port_l2_bridge.BCM88650=0
+logical_port_drop.BCM88650=1
+
+#logical_port_mim_in.BCM88650=2
+#logical_port_mim_out.BCM88650=4096
+
+# Enable EVB application
+#evb_enable=1
+
+# Enable Flexible QinQ application
+#vlan_translation_match_ipv4=1
+
+# Enable presel mgmt advance mode
+#field_presel_mgmt_advanced_mode=1
+
+# Enable ITMH programmable mode
+# ITMH processing fully programmable (not fixed) by using the FP APIs. 
+# In this mode ITMH processing uses the TCAM/direct table for TM programs lookup, in same manner as Ethernet frames.
+itmh_programmable_mode_enable.BCM88675=1
+itmh_programmable_mode_enable.BCM88470=1
+itmh_programmable_mode_enable.BCM88270=1
+itmh_programmable_mode_enable.BCM88680=1
+
+
+
+# Prepend tag to be 4 bytes or 8 bytes. Default: 4B.
+# Applicable only from ARAD+
+#prepend_tag_bytes=4B
+
+# The Prepend Tag is located at (12 + 2*offset) bytes from the start of the packet.
+# Range: 0-7. Default: 0
+#prepend_tag_offset=0
+
+# Enable ARP (next hop mac extension) feature
+bcm886xx_next_hop_mac_extension_enable.BCM88650=1
+
+# Set VLAN translate mode.
+# 0: normal
+# 1: advanced mode. Enable vlan edit settings with enhanced user control
+#bcm886xx_vlan_translate_mode=0
+
+# Set MPLS termination database mode
+# Set MPLS databases location for each MPLS namespace (L1,L2,L3)
+#bcm886xx_mpls_termination_database_mode=0
+
+# Enable , Disable MPLS indexed.
+# MPLS termination with known label stack location.
+# Must be enabled in case device supports more than 2 MPLS label terminations (L1,L2,L3)
+#mpls_termination_label_index_enable=1
+
+# Enable FastReRoute labels in device.
+#fast_reroute_labels_enable=0
+
+# Enable MPLS Context specific. Upstream label assignment in device.
+#mpls_context_specific_label_enable=0
+
+# MPLS context.
+# Can be global, per port , per interface or per port,interface.
+#mpls_context=global
+
+# MPLS TP MC reserved mac address (01-00-5E-90-00-00).
+# If set device will support My-MAC termination of reserved MC Ethernet
+#mpls_tp_mymac_reserved_address=0
+
+# MPLS ELI enable disable
+mpls_entropy_label_indicator_enable=0
+
+#########################################
+##cfg for BCM88202 - Ardon
+#########################################
+
+#Core clock and system reference clock (KHz)
+core_clock_speed_khz.BCM88202=450000
+system_ref_core_clock_khz.BCM88202=1200000
+
+## Set TM as device mode
+fap_device_mode.BCM88202=TM
+
+## Set CPU ports header type
+tm_port_header_type_in_0.BCM88202=TM
+tm_port_header_type_out_0.BCM88202=TM
+tm_port_header_type_in_200.BCM88202=TM
+tm_port_header_type_out_200.BCM88202=TM
+tm_port_header_type_in_201.BCM88202=TM
+tm_port_header_type_out_201.BCM88202=TM
+tm_port_header_type_in_202.BCM88202=TM
+tm_port_header_type_out_202.BCM88202=TM
+tm_port_header_type_in_203.BCM88202=TM
+tm_port_header_type_out_203.BCM88202=TM
+
+##### Application configuration
+### Default SDK Application
+ucode_port_1.BCM88202=TM_INTERNAL_PKT.0
+ucode_port_13.BCM88202=TM_INTERNAL_PKT.1
+ucode_port_14.BCM88202=TM_INTERNAL_PKT.2
+ucode_port_15.BCM88202=TM_INTERNAL_PKT.3
+ucode_port_16.BCM88202=TM_INTERNAL_PKT.4
+ucode_port_17.BCM88202=TM_INTERNAL_PKT.5
+
+### PortOpriority (additonal ports can be added)
+#diag_cosq_disable.BCM88202=1
+#ucode_port_1.BCM88202=IGNORE
+#ucode_port_13.BCM88202=IGNORE
+#ucode_port_14.BCM88202=IGNORE
+#ucode_port_15.BCM88202=IGNORE
+#ucode_port_16.BCM88202=IGNORE
+#ucode_port_17.BCM88202=IGNORE
+#ucode_port_1.BCM88202=TM_INTERNAL_PKT.0
+#ucode_port_2.BCM88202=TM_INTERNAL_PKT.1
+#ucode_port_3.BCM88202=TM_INTERNAL_PKT.2
+#ucode_port_4.BCM88202=TM_INTERNAL_PKT.3
+#ucode_port_5.BCM88202=TM_INTERNAL_PKT.4
+#ucode_port_6.BCM88202=TM_INTERNAL_PKT.5
+#ucode_port_7.BCM88202=TM_INTERNAL_PKT.6
+#ucode_port_8.BCM88202=TM_INTERNAL_PKT.7
+#ucode_port_9.BCM88202=TM_INTERNAL_PKT.8
+#ucode_port_10.BCM88202=TM_INTERNAL_PKT.9
+#ucode_port_11.BCM88202=TM_INTERNAL_PKT.10
+#ucode_port_12.BCM88202=TM_INTERNAL_PKT.11
+#ucode_port_13.BCM88202=TM_INTERNAL_PKT.12
+#ucode_port_14.BCM88202=TM_INTERNAL_PKT.13
+#ucode_port_15.BCM88202=TM_INTERNAL_PKT.14
+#ucode_port_16.BCM88202=TM_INTERNAL_PKT.15
+#ucode_port_17.BCM88202=TM_INTERNAL_PKT.16
+#ucode_port_18.BCM88202=TM_INTERNAL_PKT.17
+#ucode_port_19.BCM88202=TM_INTERNAL_PKT.18
+#ucode_port_20.BCM88202=TM_INTERNAL_PKT.19
+#ucode_port_21.BCM88202=TM_INTERNAL_PKT.20
+#ucode_port_22.BCM88202=TM_INTERNAL_PKT.21
+#ucode_port_23.BCM88202=TM_INTERNAL_PKT.22
+#ucode_port_24.BCM88202=TM_INTERNAL_PKT.23
+#ucode_port_25.BCM88202=TM_INTERNAL_PKT.24
+
+#dtm_flow_nof_remote_cores_region_1.BCM88202=1
+#dtm_flow_nof_remote_cores_region_2.BCM88202=1
+#dtm_flow_nof_remote_cores_region_3.BCM88202=1
+#dtm_flow_nof_remote_cores_region_4.BCM88202=1
+#dtm_flow_nof_remote_cores_region_5.BCM88202=1
+#dtm_flow_nof_remote_cores_region_6.BCM88202=1
+#dtm_flow_nof_remote_cores_region_7.BCM88202=1
+#dtm_flow_nof_remote_cores_region_8.BCM88202=1
+#dtm_flow_nof_remote_cores_region_9.BCM88202=1
+#dtm_flow_nof_remote_cores_region_10.BCM88202=1
+
+### PriorityOPort
+#diag_cosq_disable.BCM88202=1
+#stack_enable.BCM88202=0
+#ucode_port_17.BCM88202=IGNORE
+#ucode_port_16.BCM88202=IGNORE
+#ucode_port_15.BCM88202=IGNORE
+#ucode_port_14.BCM88202=IGNORE
+#ucode_port_13.BCM88202=IGNORE
+#ucode_port_1.BCM88202=TM_INTERNAL_PKT.0
+
+## Credit worth resolution (Fix the Interface rate)
+credit_worth_resolution.BCM88202=medium
+
+### Interrupts
+polled_irq_mode.BCM88202=1
+
+## To use MC-ID in the range of < 255
+egress_multicast_direct_bitmap_max.BCM88202=255
+
+### Flow Control
+## Enable Flow Control to CL SCH. Relevant only to Priority Over Port application
+## Valid values: 1 - Enable, 0 - Disable. Default: 0x0.
+custom_feature_cl_scheduler_fc.BCM88202=1
+
+## Valid values: 1 - Enable, 0 - Disable. Default: 0x0.
+#custom_feature_high_vsi_fp.BCM88660=0
+
+## Use lower CL. Ardon FC is mapped to CL 0-255.
+dtm_flow_mapping_mode_region_65.BCM88202=1
+dtm_flow_mapping_mode_region_66.BCM88202=1
+
+### Statistic-Report Properties
+stat_if_enable.BCM88202=1
+stat_if_rate.BCM88202=10000
+stat_if_pkt_size.BCM88202=126B
+## Set the Statistic-Report mode
+stat_if_report_mode.BCM88202=QSIZE
+## Enable statistics reports on EnQueue. Valid valued: 0/1. Default: '1'.
+stat_if_report_enqueue_enable.BCM88202=1
+## Enable statistics reports on DeQueue. Valid valued: 0/1. Default: '1'.
+stat_if_report_dequeue_enable.BCM88202=1
+
+## Disable removed features
+phy_1588_dpll_frequency_lock.BCM88202=0
+low_power_nif_mac.BCM88202=0
+low_power_fabric_mac.BCM88202=0
+custom_feature_nif_recovery_enable.BCM88202=0
+phy_null.BCM88202=0
+
+## Disable counter thread
+bcm_stat_interval.BCM88202=0
+#bcm_stat_sync_timeout.BCM88202=0xfffffff
+
+### EMUL changes
+#diag_emulator_partial_init.BCM88202=1
+#schan_timeout_usec.BCM88202=0x7fffffff
+#tdma_timeout_usec.BCM88202=0x7fffffff
+#tslam_timeout_usec.BCM88202=0x7fffffff
+#phy_null.BCM88202=0
+
+### Disable DMA
+#tdma_timeout_usec.BCM88202=0
+#tslam_timeout_usec.BCM88202=0
+#table_dma_enable.BCM88202=0
+#tslam_dma_enable.BCM88202=0
+
+### Dram setup
+# Number of external DRAMs.
+# Allowed values for 88202: 0 / 1 (Dram D) / 2 (Dram's C, D) / 3 (Dram's B, C, D) / 4 (Dram's A, B, C, D) /
+ext_ram_present.BCM88202=0
+
+### Total size of ram
+ext_ram_total_size.BCM88202=2000
+
+### OCB
+bcm886xx_ocb_databuffer_size.BCM88202=1024
+
+# DRAM frequency (DQ/2)
+ext_ram_freq.BCM88202=1200
+
+# Dram Type. Ardon supports only DDR4.
+ext_ram_type.BCM88202=DDR4
+
+### Dram Features
+
+## Dram Gear down mode. Valid values: 0 - Enable, 1 - Disable. Default: 0x0.
+#ext_ram_gear_down_mode.BCM88202=1
+
+## Alert_n de-assertion period above which error is considered parity error
+#ext_ram_alert_n_period_thrs.BCM88202=0
+
+## Dram Address bus inversion. Valid values: 0 - Enable, 1 - Disable. Default: 0x0.
+ext_ram_abi.BCM88202=0
+
+## Data bus inversion on write/read direction. Valid values: 0 - Disable, 1 - Enable. Default: 0x0.
+ext_ram_write_dbi.BCM88202=0
+ext_ram_read_dbi.BCM88202=0
+
+## Enable write/read CRC (DDR4 does not support read CRC). Default: 0x0.
+#ext_ram_write_crc=.BCM882021
+#ext_ram_read_crc=.BCM882021
+
+## Command parity latency. Valid values: 0 - Enable, 1 - Disable. Default: 0x0.
+ext_ram_cmd_par_latency.BCM88202=6
+
+## DRAM ClamShell (interface swap its HW PIN pairs during init.)
+# Note: Only one of DRAMs can have its PIN swapped). Valid values: 0/1.
+dram1_clamshell_enable_0.BCM88202=1
+dram1_clamshell_enable_1.BCM88202=1
+dram1_clamshell_enable_2.BCM88202=1
+dram1_clamshell_enable_3.BCM88202=1
+
+## Dram DQ Swap.
+## Format: ext_ram_dq_swap_dramX_byteY_bitZ=M. Means, In dram X, Byte Y swap DQ Z and M. Default: No swapping.
+#ext_ram_dq_swap_dram1_byte2_bit3.BCM88202=4
+#ext_ram_dq_swap_dram4_byte3_bit2.BCM88202=1
+
+### Dram Tuning (Shmoo)
+ddr3_auto_tune.BCM88202=2
+
+### Enable BIST
+# Run Dram BIST on initialization, if BIST fail the initialization will fail. Default: 1.
+bist_enable_dram.BCM88202=1
+
+### Fabric
+## Enable fabric links
+serdes_qrtt_active_0.BCM88202=1
+serdes_qrtt_active_1.BCM88202=1
+serdes_qrtt_active_2.BCM88202=1
+serdes_qrtt_active_3.BCM88202=1
+
+## Firmware Load Method
+load_firmware.BCM88202=2
+
+#SFI speed rate
+port_init_speed_sfi.BCM88202=11500
+
+#LC PLL in. Default: 156.25MHz.
+#xgxs_lcpll_xtal_refclk=125
+
+#########################################
+##cfg for BCM88640_A0 - Petra
+#########################################
+
+force_clk_m_n_divisors_zero_nif0.BCM88640_A0=0
+force_clk_m_n_divisors_zero_fabric0.BCM88640_A0=1
+force_clk_m_n_divisors_zero_comb0.BCM88640_A0=0
+
+combo_ref_clock.BCM88640=312500
+
+nif_ref_clock.BCM88640_A0=312500
+
+# Use variable cell size
+system_cell_format.BCM88640_A0=VCS128
+
+# Core clock speed (MHz)
+core_clock_speed.BCM88640_A0=300
+
+# Map bcm local port to CPU/NIF interfaces
+ucode_port_0.BCM88640_A0=CPU.0
+ucode_port_73.BCM88640_A0=CPU.1
+ucode_port_74.BCM88640_A0=CPU.2
+ucode_port_75.BCM88640_A0=CPU.3
+ucode_port_76.BCM88640_A0=CPU.4
+ucode_port_77.BCM88640_A0=CPU.5
+ucode_port_78.BCM88640_A0=CPU.6
+
+# Interlaken ports basic configuration (temporary).
+# This configuration replaces the above XAUI/RXAUI ports config
+# The following PB design constraint is not enforced in SW, so must be taken
+# care of here, when mapping ports to interfaces:
+#   If using ilkn0, port 1 (if used) must be mapped to ilkn0
+#   If using ilkn1, port 2 (if used) must be mapped to ilkn1
+#   Note that in our default mapping, port 2 is mapped to RXAUI 6, thus won't
+#   work. If one wants to use front panel port 2 with ilkn1, he should be map
+#   RAXUI6 to a port != 2.
+#ilkn_num_lanes_0.BCM88640_A0=12
+#ucode_port_1.BCM88640_A0=ILKN0.0
+#ucode_port_2.BCM88640_A0=ILKN0.1
+#ucode_port_3.BCM88640_A0=ILKN0.2
+#ilkn_num_lanes_1.BCM88640_A0=12
+#ucode_port_4.BCM88640_A0=RXAUI6
+#ucode_port_5.BCM88640_A0=ILKN1.0
+#ucode_port_6.BCM88640_A0=ILKN1.1
+#ucode_port_7.BCM88640_A0=ILKN1.2
+
+# Default header type is derived from fap_device_mode: If fap_device_mode is
+# PP, default header type is ETH. Otherwise, defualt header type is TM.
+# Header type per port can be overriden.
+# All options: ETH/RAW/TM/PROG/CPU/STACKING/TDM/TDM_RAW/INJECTED
+
+# Set CPU to work with TM header (ITMH)
+#tm_port_header_type_0.BCM88640_A0=TM
+tm_port_header_type_in_0.BCM88640_A0=TM
+tm_port_header_type_out_0.BCM88640_A0=CPU
+tm_port_header_type_73.BCM88640_A0=TM
+tm_port_header_type_74.BCM88640_A0=TM
+tm_port_header_type_75.BCM88640_A0=TM
+tm_port_header_type_76.BCM88640_A0=TM
+tm_port_header_type_77.BCM88640_A0=TM
+tm_port_header_type_78.BCM88640_A0=TM
+# recycling port
+tm_port_header_type_40.BCM88640_A0=RAW
+ucode_port_40.BCM88640_A0=RCY.0
+
+# Enable ERP and OLP ports
+num_erp_tm_ports.BCM88640_A0=1
+num_olp_tm_ports.BCM88640_A0=1
+num_recycle_tm_ports.BCM88640_A0=1
+
+# Dram configuration
+# 600 Mhz
+ext_ram_pll_r.BCM88640_A0=4
+ext_ram_pll_f.BCM88640_A0=47
+ext_ram_pll_q.BCM88640_A0=1
+ext_ram_freq.BCM88640_A0=600
+
+# Dbuff size
+# Allowed values: 256/512/1024/2048.
+ext_ram_dbuff_size.BCM88640_A0=1024
+
+# Number of external DRAMs.
+# Allowed values for 88x4x: 0/2/3/4/6.
+# Allowed values for 88650: 0/2/3/4/6/8.
+# ext_ram_total_size below assumed this value is 6 for 88x4x and 8 for
+ext_ram_present.BCM88640_A0=6
+
+# Dram type: Select ONLY ONE of the following DRAM types, to configure all dram
+# related parameteres per type.
+# Dram Type for Pb:
+#dram_type_DDR3_MICRON_MT41J64M16_15E.BCM88640_A0=1
+#dram_type_DDR2_MICRON_K4T51163QE_ZC_LF7.BCM88640_A0=1
+#dram_type_DDR3_SAMSUNG_K4B1G1646E_HCK0_1333.BCM88640_A0=1
+#dram_type_DDR3_SAMSUNG_K4B1G1646E_HCK0_1600.BCM88640_A0=1
+#dram_type_GDDR3_SAMSUNG_K4J52324QE.BCM88640_A0=1
+dram_type_DDR3_MICRON_MT41J128M16HA_15E_2G.BCM88640_A0=1
+
+# QDR configuration
+# Parity. Allowed values: PARITY/ECC.
+ext_qdr_protection_type.BCM88640_A0=PARITY
+ext_qdr_size_mbit.BCM88640_A0=72
+#QDR type: QDR/QDR2P/QDR3/NONE.
+ext_qdr_type.BCM88640_A0=QDR
+
+# QDR can use the core clock, or using it's own pll. Current example is for 250MHz pll (if used).
+# QDR using own pll configuration
+#ext_qdr_use_core_clock_freq.BCM88640_A0=0
+#ext_qdr_pll_m.BCM88640_A0=4
+#ext_qdr_pll_n.BCM88640_A0=4
+#ext_qdr_pll_p.BCM88640_A0=0
+
+# QDR using core clock
+ext_qdr_use_core_clock_freq.BCM88640_A0=1
+
+#Configure MDIO. If parameter is not defined, MDIO is disabled.
+mdio_clock_freq_khz.BCM88640_A0=1000
+
+# Streaming interface configuration
+streaming_if_enable_timeoutcnt.BCM88640_A0=1
+streaming_if_timeout_prd.BCM88640_A0=70
+streaming_if_quiet_mode.BCM88640_A0=0
+streaming_if_discard_bad_parity.BCM88640_A0=0
+
+# maximum packet size for WRED tests. 0 - means ignore max packet size.
+discard_mtu_size.BCM88640_A0=0
+
+# multicast egress vlan membership range. By default: 0-4095.
+egress_multicast_direct_bitmap_max.BCM88640_A0=4095
+
+# configure flow mapping base to 0
+flow_mapping_queue_base.BCM88640_A0=0
+
+dtm_flow_mapping_mode_region_25.BCM88640_A0=0
+dtm_flow_mapping_mode_region_26.BCM88640_A0=0
+dtm_flow_mapping_mode_region_27.BCM88640_A0=0
+dtm_flow_mapping_mode_region_28.BCM88640_A0=0
+dtm_flow_mapping_mode_region_29.BCM88640_A0=0
+dtm_flow_mapping_mode_region_30.BCM88640_A0=0
+dtm_flow_mapping_mode_region_31.BCM88640_A0=0
+dtm_flow_mapping_mode_region_32.BCM88640_A0=0
+dtm_flow_mapping_mode_region_33.BCM88640_A0=1
+dtm_flow_mapping_mode_region_34.BCM88640_A0=1
+dtm_flow_mapping_mode_region_35.BCM88640_A0=1
+dtm_flow_mapping_mode_region_36.BCM88640_A0=1
+dtm_flow_mapping_mode_region_37.BCM88640_A0=1
+dtm_flow_mapping_mode_region_38.BCM88640_A0=1
+dtm_flow_mapping_mode_region_39.BCM88640_A0=1
+dtm_flow_mapping_mode_region_40.BCM88640_A0=1
+dtm_flow_mapping_mode_region_41.BCM88640_A0=1
+dtm_flow_mapping_mode_region_42.BCM88640_A0=2
+dtm_flow_mapping_mode_region_43.BCM88640_A0=2
+dtm_flow_mapping_mode_region_44.BCM88640_A0=2
+dtm_flow_mapping_mode_region_45.BCM88640_A0=2
+dtm_flow_mapping_mode_region_46.BCM88640_A0=2
+dtm_flow_mapping_mode_region_47.BCM88640_A0=2
+dtm_flow_mapping_mode_region_48.BCM88640_A0=2
+dtm_flow_mapping_mode_region_49.BCM88640_A0=2
+dtm_flow_mapping_mode_region_50.BCM88640_A0=2
+dtm_flow_mapping_mode_region_51.BCM88640_A0=2
+dtm_flow_mapping_mode_region_52.BCM88640_A0=2
+dtm_flow_mapping_mode_region_53.BCM88640_A0=2
+dtm_flow_mapping_mode_region_54.BCM88640_A0=2
+dtm_flow_mapping_mode_region_55.BCM88640_A0=2
+
+# Power up state (DOWN/UP/UP_AND_RELOCK). Can be configured per lane.
+pb_serdes_lane_power_state.BCM88640_A0=UP_AND_RELOCK
+
+# SeDes media type: Pre-configuration for tx params, according to
+# media type.
+# Allowed values: SHORT_BACKPLANE/LONG_BACKPLANE/CHIP2CHIP
+pb_serdes_lane_tx_phys_media_type.BCM88640_A0=SHORT_BACKPLANE
+pb_serdes_lane_tx_phys_media_type_28.BCM88640_A0=CHIP2CHIP
+pb_serdes_lane_tx_phys_media_type_29.BCM88640_A0=CHIP2CHIP
+pb_serdes_lane_tx_phys_media_type_30.BCM88640_A0=CHIP2CHIP
+pb_serdes_lane_tx_phys_media_type_31.BCM88640_A0=CHIP2CHIP
+
+system_is_fe1600_in_system.BCM88640_A0=0
+
+# Counter engine configuration
+counter_engine_source_1.BCM88640_A0=0
+counter_engine_statistics_1.BCM88640_A0=4
+counter_engine_source_2.BCM88640_A0=1
+counter_engine_statistics_2.BCM88640_A0=4
+
+# Statistic Reporting
+stat_if_enable=0
+
+# Clock Phases: 0/90/180/270
+stat_if_phase=0
+
+# Rate in nm
+stat_if_sync_rate=0
+
+# TRUE/FALSE
+stat_if_parity_enable=FALSE
+
+# BILLING/FAP20V
+stat_if_report_mode=BILLING
+
+# Billing Mode
+# EGR_Q_NB/CUD/VSI_VLAN/BOTH_LIFS
+stat_if_report_billing_mode=VSI_VLAN
+
+# Fap20V Mode
+# QUEUE/PACKET
+stat_if_report_fap20v_mode=QUEUE
+
+# QUEUE_NUM/MC_ID (only valid in Fap20V PACKET mode)
+stat_if_report_fap20v_fabric_mc=QUEUE_NUM
+stat_if_report_fap20v_ing_mc=QUEUE_NUM
+
+# TRUE/FALSE (only valid in Fap20V PACKET mode)
+stat_if_report_fap20v_cnm_report=FALSE
+
+# TRUE/FALSE
+stat_if_report_fap20v_count_snoop=FALSE
+stat_if_report_original_pkt_size=FALSE
+stat_if_report_fap20v_single_copy_reported=FALSE
+
+schan_timeout_usec.BCM88640_A0=300000
+
+
+polled_irq_mode.BCM88640_A0=0
+polled_irq_delay.BCM88640_A0=1000
+
+# Set the FTMH Load-Balancing Key extension mode
+# Options for 88650: ENABLED
+# Options for 88640 compatible:
+# DISABLED / 8B_LB_KEY_8B_STACKING_ROUTE_HISTORY / 16B_STACKING_ROUTE_HISTORY
+# Default: DISABLED
+system_ftmh_load_balancing_ext_mode.BCM88640=DISABLED
+
+#########################################
+##cfg for BCM88750 (FE1600)
+#########################################
+
+fabric_device_mode.BCM88750=SINGLE_STAGE_FE2
+
+is_dual_mode.BCM88750=0
+system_is_vcs_128_in_system.BCM88750=0
+
+system_is_dual_mode_in_system.BCM88750=0
+system_is_single_mode_in_system.BCM88750=1
+
+system_is_fe600_in_system.BCM88750=0
+
+system_ref_core_clock_khz.BCM88750=1200000
+
+fabric_merge_cells.BCM88750=0
+fabric_multicast_mode.BCM88750=DIRECT
+fabric_load_balancing_mode.BCM88750=NORMAL_LOAD_BALANCE
+fabric_tdm_fragment.BCM88750=0x180
+##Allows single pipe device to send TDM traffic over the fabric primary pipe - available for Fe1600_B0 only
+#change  vcs128_unicast_priority to be lower than 2 - when enabling
+fabric_tdm_over_primary_pipe.BCM88750=0
+fabric_optimize_partial_links.BCM88750=0
+vcs128_unicast_priority.BCM88750=2
+
+polled_irq_mode.BCM88750=0
+polled_irq_delay.BCM88750=1000
+
+#Selects if to run MBIST (Memory Built In Self Test) of internal memory (tables) during startup.
+#Supported values: 0=don't run, 1=run, 2=run with extra logs
+#bist_enable.BCM88650=1
+bist_enable.BCM88750=1
+bist_enable.BCM88470=0
+#High voltage driver strap. If 0, connected to 1.4V supply; if 1, connected to 1V mode.
+#for specific quad use srd_tx_drv_hv_disable_quad_X where X is (FSRD num * 4 + internal quad)
+srd_tx_drv_hv_disable.BCM88750=0
+load_firmware.BCM88750=2
+
+#0-LFEC 1-8b\10b 2-FEC 3-BEC
+backplane_serdes_encoding.BCM88750=2
+
+#enable\disable CL72
+port_init_cl72.BCM88750=1
+#Avaliable speeds for BCM88750: 5750, 6250, 10312, 11500, 12500
+port_init_speed.BCM88750=10312
+#LC PLL in\out 0=125MHz 1=156.25MHz
+serdes_fabric_clk_freq_in.BCM88750=1
+serdes_fabric_clk_freq_out.BCM88750=1
+serdes_mixed_rate_enable.BCM88750_B0=0
+
+# VSC128 or VSC256
+fabric_cell_format.BCM88750=VSC256
+
+# Core clock speed (MHz)
+core_clock_speed_khz.BCM88750=533333
+
+## CMIC interrupts:
+# Enable: Use interrupts completion instead of polling completion for the following operations.
+#         Options: 1 - Enable, 0 - Disable. Default: 0.
+# Timeout: delay in Microsecond between the polling,
+# SCHAN:
+schan_intr_enable.BCM88750=0
+schan_timeout_usec.BCM88750=300000
+# TDMA
+tdma_intr_enable.BCM88750=0
+tdma_timeout_usec.BCM88750=5000000
+# TSLAM
+tslam_intr_enable.BCM88750=0
+tslam_timeout_usec.BCM88750=5000000
+# MIIM
+miim_intr_enable.BCM88750=0
+miim_timeout_usec.BCM88750=300000
+
+#########################################
+##cfg for BCM88950 (FE3200)
+#########################################
+#Device  operation
+fabric_device_mode.BCM88950=SINGLE_STAGE_FE2
+fabric_load_balancing_mode.BCM88950=NORMAL_LOAD_BALANCE
+
+#Cell format
+system_is_vcs_128_in_system.BCM88950=0
+
+#Fabric pipe configuration
+
+fabric_num_pipes.BCM88950=1
+fabric_pipe_map.BCM88950=0
+system_contains_multiple_pipe_device.BCM88950=0
+
+#multicast table mode
+fabric_multicast_mode.BCM88950=DIRECT
+fe_mc_id_range.BCM88950=128K_HALF
+
+#Core clock and system reference clock (KHz)
+system_ref_core_clock_khz.BCM88950=1200000
+core_clock_speed_khz.BCM88950=720000
+
+#LC PLL in\out 0=125MHz 1=156.25MHz
+serdes_fabric_clk_freq_in.BCM88950=0
+serdes_fabric_clk_freq_out.BCM88950=1
+
+#TODO
+polled_irq_mode.BCM88950=1
+polled_irq_delay.BCM88950=1000
+
+#Memory Bist
+bist_enable.BCM88950=0
+
+#High voltage driver strap. If 0, connected to 1.25V supply; 
+#if 1, connected to 1V mode (For unused Falcon Quads that are connected to 1.0V).
+#for specific quad use srd_tx_drv_hv_disable_quad_X where X is (FSRD num * 4 + internal quad)
+srd_tx_drv_hv_disable.BCM88950=0
+load_firmware.BCM88950=0x102
+
+
+##Per port properties
+#Possible values - KR_FEC, 64_66, RS_FEC, LL_RS_FEC
+backplane_serdes_encoding.BCM88950=RS_FEC
+
+#enable\disable CL72
+port_init_cl72.BCM88950=1
+
+#link speed
+port_init_speed.BCM88950=25000
+
+#Link connected to a reapter
+#Values: 0/1. Default: 0
+#repeater_link_enable_<port>.BCM88950=0
+
+##Fabric cell FIFO DMA
+fabric_cell_fifo_dma_enable.BCM88950=1
+
+## CMIC interrupts:
+# Enable: Use interrupts completion instead of polling completion for the following operations.
+#         Options: 1 - Enable, 0 - Disable. Default: 0.
+# Timeout: delay in Microsecond between the polling,
+# SCHAN:
+schan_intr_enable.BCM88950=0
+schan_timeout_usec.BCM88950=300000
+# TDMA
+tdma_intr_enable.BCM88950=0
+tdma_timeout_usec.BCM88950=5000000
+# TSLAM
+tslam_intr_enable.BCM88950=0
+tslam_timeout_usec.BCM88950=5000000
+# MIIM
+miim_intr_enable.BCM88950=0
+miim_timeout_usec.BCM88950=300000
+
+##############################
+# Configuration for devices run in emulation
+##############################
+#diag_emulator_partial_init.BCM88470=2
+#phy_simul.BCM88470=1
+#system_ref_core_clock_khz.BCM88470=250000
+#system_ref_core_clock_khz.BCM88470=600000
+#phy_simul.BCM88270=1
+
+polled_irq_mode.BCM88470=1
+polled_irq_mode.BCM88270=1
+
+schan_intr_enable.BCM88470=0
+schan_intr_enable.BCM88270=0
+
+# For emulation use:
+#schan_timeout_usec.BCM88470=600000000
+schan_timeout_usec.BCM88470=300000
+schan_timeout_usec.BCM88270=200000
+
+# TDMA
+tdma_intr_enable.BCM88470=0
+#tdma_intr_enable.BCM88270=0
+
+# For emulation use:
+#tdma_timeout_usec.BCM88470=600000000
+tdma_timeout_usec.BCM88470=60000000
+tdma_timeout_usec.BCM88270=500000
+
+# TSLAM
+tslam_intr_enable.BCM88470=0
+tslam_intr_enable.BCM88270=0
+
+# For emulation use:
+#tslam_timeout_usec.BCM88470=600000000
+tslam_timeout_usec.BCM88470=60000000
+tslam_timeout_usec.BCM88270=500000
+
+#otm_base_q_pair.BCM88470=2
+
+##############################
+# Config variable below are only accessed from dune.soc, and are used to
+# configure BSP / example application / group of formal config variables.
+##############################
+
+# Support (and configure on init) packet processing features.
+# If not defined - only traffic management capabilities are enabled.
+packet_processing=1
+
+## PCP (Petra Co-Processor) features
+#pcp_elk.BCM88640_A0=1
+#pcp_oam.BCM88640_A0=1
+#pcp_dma.BCM88640_A0=1
+
+## Set/Override TDM related config variables
+#tdm.BCM88640_A0=1
+
+# If set, always configures synthesizers, even if the configured rate is
+# equal to
+# their nominal rate. Can be disabled to speedup bringup time
+# (keep in mind that if disabled, changing a synt to a non-nominal freq and
+# than back to nominal will not work
+#synt_over.BCM88640_A0=1
+
+# Local variables for board synthesizers freq. Fabric, combo and nif also configure
+# the *_ref_clock soc properties for these frequencies. core, ddr and phy only
+# configures the synthesizer
+synt_core.BCM88640_A0=100000000
+synt_ddr.BCM88640_A0=125000000
+synt_phy.BCM88640_A0=156250000
+
+
+############################
+### Warmboot & SW State ####
+############################
+#
+#HW journal working mode. Allowed values: 0-2.
+#   0 : Disabled
+#   1 : Commit After Each Api
+#   2 : Commit Upon User Request
+ha_hw_journal_mode=0
+
+ha_hw_journal_size=15728640
+ha_sw_journal_size=15728640
+ha_crash_recovery=1
+
+
+# stable_size - a strict bound on the application's external storage size
+stable_size.BCM88950=200000
+stable_size.BCM88750=200000
+stable_size.BCM88650=281000000
+stable_size.BCM88675=500000000
+stable_size.BCM88680=500000000
+stable_size.BCM88690=500000000
+stable_size.BCM88470=350000000
+stable_size.BCM88270=650000000
+stable_size=420000000
+
+# determine the memory size pre-allocated for the SDK's SW State
+sw_state_max_size.BCM88650=210000000
+sw_state_max_size.BCM88675=350000000
+sw_state_max_size.BCM88680=350000000
+sw_state_max_size.BCM88470=300000000
+sw_state_max_size.BCM88270=210000000
+sw_state_max_size=350000000
+
+# stable location
+## part of scache initialization for warmboot persistent storage.
+## values: 1-2:Not Valid for dnx 3: Store in a file  4: Use Shared Mem.
+# 4 is the preffered option, using 3 for Arad and FE in order to regress both modes.
+stable_location.BCM88950=3
+stable_location.BCM88750=3
+stable_location.BCM88650=3
+stable_location.BCM88660=3
+stable_location.BCM88675=3
+stable_location=3
+
+# stable_filename - the warmboot file name (if stored on a file) 
+stable_filename=/tmp/warmboot_data
+
+# emulation file name
+stable_filename.BCM88470=/tmp/warmboot_data
+
+
+# create the file in memory for a faster warmboot debug
+#stable_filename=/dev/shm/warmboot_data
+
+# stable_flags - not in use
+stable_flags=0
+
+############################
+############################
+
+
+# Bridge default logical interfaces allocation IDS
+logical_port_l2_bridge.BCM88640=1
+logical_port_drop.BCM88640=-1
+
+#logical_port_mim_in.BCM88640=2
+#logical_port_mim_out.BCM88640=3
+
+## IPV6 tunnel
+bcm886xx_ipv6_tunnel_enable=1
+
+## Inlif Profile Management Mode - QoS L3 L2 marking mode
+#
+# BCM88660 ONLY
+#
+# QoS L3 L2 marking allows changing the DSCP and/or EXP values
+# of IP and/or MPLS packets according to the incoming port
+# (or inlif), and the Traffic Class/Drop Precedence.
+#
+# The inlif profile is used to control the DSCP/EXP marking.
+# This SOC property controls which mode is used for the inlif profile:
+# 1: Basic mode (1 bit of the inlif profile is reserved and is used for the DSCP/EXP marking).
+# 0: Advanced mode (the user controls which inlif profile values perform DSCP/EXP marking directly).
+#bcm886xx_qos_l3_l2_marking=1
+
+## Unicast RPF mode per RIF
+#
+# This SOC property allows the user to set the unicast RPF mode - loose, strict or disabled - per RIF.
+# If disabled, the unicast RPF mode of a RIF is set globally.
+# Options: 0 / 1
+
+##Jericho only, number of inrif mac termination combinations. Legal values 0 - 16, default value 16 */
+#Note: Two sets of identical mac termination combinations with different RPF modes (loose and strict) 
+#will consume two termination combinations resources.
+#Two sets of identical mac termination combinations with and without loose RPF will consume only one resource.
+number_of_inrif_mac_termination_combinations=8
+
+##Jericho only, ipmc_l3mcastl2_mode SOC allows a per RIF program selection in the case of ipv4 MC with IPMC disable 
+#instead of the global bcmSwitchL3McastL2 switch control selection.
+#Legal values:
+#0: bcmSwitchL3McastL2 switch control.
+#1: PER In-RIF selection.
+#Note that enabling this SOC will reduce the number of In-RIF mac termination combinations bits by one to a maximum of 3 bits 
+#so it can't be enabled with number_of_inrif_mac_termination_combinations larger than 8.
+ipmc_l3mcastl2_mode = 1
+
+# The bcm_ipmc_add adds bridge or route entries according to the BCM_IPMC_L2 flag.
+# Setting custom_feature_ipmc_set_entry_type_by_rif=1 will use the related IN-RIF IPMC state (enable/disable) 
+# to select the bcm_ipmc_add entry type (bridge/route).
+#custom_feature_ipmc_set_entry_type_by_rif=0
+
+# bcm886xx_l3_ingress_urpf_enable=1
+
+## BOS handling mode
+# BCM8866X ONLY
+#
+# There are two ways to handle BOS, controlled by bcm886xx_mpls_termination_mode:
+# 0 - Use BOS as key in lookup.
+# 1 - Don't use it (except for reserved labels).
+#
+#bcm886xx_mpls_termination_key_mode=0
+
+# Color resolution mode allows the user to have more detailed metering color information.
+# BCM88660 ONLY
+#
+# Options: 0-2
+# 0: A red result from both Ethernet policer and meter implies DP=3.
+# 1: A red result from meter implies that DP=2, while a red result from rate (Ethernet policer) implies DP=3.
+#policer_color_resolution_mode=1
+
+## Inlif Profile Management Mode - Disable Same Interface Filter
+# BCM8866X ONLY
+#
+# Controls which mode is used for the inlif profile management.
+# 1: Basic mode (1 bit of the inlif profile is reserved and is used for the same-interface filter).
+# 0: Advanced mode (the user controls which inlif profile values have the same-interface filter disabled for them).
+#bcm886xx_logical_interface_bridge_filter_enable=1
+
+## Default Block Forwarding Strength
+#
+# Configure the default forwarding strength of blocks.
+#
+# SOC Properties:
+#block_trap_strength_vtt - VTT block forwarding strength
+#block_trap_strength_flp - FLP block forwarding strength
+#block_trap_strength_hash - SLB block forwarding strength (BCM8866X ONLY)
+#block_trap_strength_pmf_0 - PMF 1st lookup forwarding strength
+#block_trap_strength_pmf_1 - PMF 2nd lookup forwarding strength
+#
+# Options: 0-7
+
+## Stateful Load Balancing
+# BCM8866X ONLY
+#
+# Stateful Load Balancing (SLB) allows the load balancing of ECMP and LAG
+# groups to become stateful.
+# In standard load balancing, removing a member from the ECMP/LAG
+# group may affect the selected member, since the formula
+# depends on group size.
+# In stateful load balancing the member is selected once and saved.
+# Later, the member is always retrieved, and does not depend on
+# the size of the LAG/ECMP group.
+#
+# resilient_hash_enable - Enable/disable SLB. Values:
+# 1 - Enable SLB.
+# 0 - Disable SLB.
+#resilient_hash_enable=1
+
+# When this flag is set (and speculative parsing is used) it is possible for a packet of L4oIPv4/6oMPLS(1-3 labels)oETH
+# with MPLS forwarding to use the L4 header, otherwise the IPv4/6 is the last known header.
+#Note: setting this flag can cause unexpected behavior when BOS is used in the scenario above.
+#custom_feature_speculative_L4_support=0
+
+#Make Arad SOC properties work for Arad+, by mapping the BCM88660 suffix to BCM88650
+soc_family.BCM88660=BCM88650
+#Make Arad SOC properties work for Jericho, by mapping the BCM88675 suffix to BCM88650
+soc_family.BCM88675=BCM88650
+#Make Arad SOC properties work for QMX, by mapping the BCM88375 suffix to BCM88650
+soc_family.BCM88375=BCM88650
+#Make Arad SOC properties work for Ardon, by mapping the BCM88202 suffix to BCM88650
+soc_family.BCM88202=BCM88650
+#Make FE3200 SOC properties work for FE3200 SKU 8952, by mapping the BCM88952 suffix to BCM88950
+soc_family.BCM88952=BCM88950
+#Make FE1600 SOC properties work for FE1600 SKU 8753, by mapping the BCM88753 suffix to BCM88750
+soc_family.BCM88753=BCM88750
+#Make FE1600 SOC properties work for FE1600 SKU 8752, by mapping the BCM88752 suffix to BCM88750
+soc_family.BCM88752=BCM88750
+#Make Arad SOC properties work for QAX, by mapping the BCM88470 suffix to BCM88650
+soc_family.BCM88470=BCM88650
+
+#Make Arad SOC properties work for QUX, by mapping the BCM88270 suffix to BCM88650
+soc_family.BCM88270=BCM88650
+#Make Arad SOC properties work for FLAIR, by mapping the BCM8206 suffix to BCM88650
+soc_family.BCM8206=BCM88650
+#Make Arad SOC properties work for JERICHO_PLUS, by mapping the BCM88470 suffix to BCM88650
+soc_family.BCM88680=BCM88650
+
+# Use different mymac addresses for ipv4 and ipv6 when using vrrp for mymac termination.
+#l3_vrrp_ipv6_distinct=1
+
+# Enable multiple mymac termination mode.
+# In order to enable it, also set l3_vrrp_ipv6_distinct=0 and l3_vrrp_max_vid=0 since vrrp and
+# multiple mymac mode can't co exist.
+#l3_multiple_mymac_termination_enable=1
+
+# Distinguish between ipv4 and all other l3 protocols when multiple mymac terminating
+#l3_multiple_mymac_termination_mode=1
+
+# Usually the final DP given by the meter (or the In-DP) is unchanged, and can be from 0-3.
+# When this SOC property is set to 1, when the final INGRESS DP is 2,
+# it is mapped to 1 instead, and thus only the values 0-1 and 3 can be output.
+# This has no effect when policer_color_resolution_mode=1.
+#custom_feature_always_map_result_dp_2_to_1=1
+
+# Dynamic port feature
+#custom_feature_dynamic_port=1
+
+# low power nif mac
+#low_power_nif_mac=0
+
+# allow modifications during traffic
+#custom_feature_allow_modifications_during_traffic=1
+
+# mem_cache_enable property
+# Cache memory mode - enable memory caching during init.
+# Note: The user MUST add the property name with suffix '_specific' before providing the list of the cached memories.
+# Possible options (suffixes):
+# _all        - enable all tables (excluding read-only/write-only/dynamic/signal)
+# _predefined - enable predefined list of tables
+# _parity     - enable tables protected by parity field
+# _ecc        - enable tables protected by ecc field
+# _specific   - enable specific tables - MUST add this suffix if specific tables should be cached
+# _specific_X - enable caching for memory X, where X is memory name. Note: will not work without the previous suffix
+# Example: (this example will enable caching of the IHP_RECYCLE_COMMAND table)
+# mem_cache_enable_specific.BCM88650=1 #(MUST be added in case specific tables should be cached)
+# mem_cache_enable_specific_IHP_RECYCLE_COMMAND.BCM88650=1
+# mem_cache_enable_specific.BCM88675=1
+# mem_cache_enable_specific_IPS_QUEUE_PRIORITY_TABLE.BCM88675=1
+
+mem_cache_enable_parity.BCM88650=1
+mem_cache_enable_parity.BCM88675=1
+mem_cache_enable_parity.BCM88202=1
+mem_cache_enable_parity.BCM88750=1
+mem_cache_enable_parity.BCM88950=1
+mem_cache_enable_ecc=0
+
+# mem_nocache property
+# Cache memory mode - disable memory caching for specific table during init.
+# Note: the user MUST add the default property name before providing the list of the uncached memories.
+# Possible options (suffixes):
+# specific_X - disable caching for memory X, where X is memory name. Note: will not work without the previous suffix
+# Example: (this example will enable caching of the IHP_TERMINATION_PROFILE_TABLE table)
+# mem_nocache.BCM88660=1 #(MUST be added in case there are uncached memories)
+# mem_nocache_IHP_TERMINATION_PROFILE_TABLE.BCM88660=1
+#mem_nocache.BCM88680=1
+#mem_nocache_PPDB_B_LIF_TABLE_LABEL_PROTOCOL_OR_LSP.BCM88680=1
+#mem_nocache_PPDB_B_LIF_TABLE.BCM88680=1
+
+
+custom_feature_no_backdoor=1
+
+# Jericho split horizon mode
+# 0 - Use 0-1 range for lif orientation.
+# 1 (default) - Use 0-1 range for lif orientation in AC lifs and 0-3 range for orientation in other lif types.
+split_horizon_forwarding_groups_mode.BCM88675=1
+split_horizon_forwarding_groups_mode.BCM88470=1
+split_horizon_forwarding_groups_mode.BCM88680=1
+
+
+# Entries capacities for public and private IP forwarding tables
+private_ip_frwrd_table_size=500000
+public_ip_frwrd_table_size=500000
+
+
+#Enable KAPS ARM and Descriptor-DMA
+dma_desc_aggregator_chain_length_max=500
+dma_desc_aggregator_buff_size_kb=100
+dma_desc_aggregator_timeout_usec=1000
+dma_desc_aggregator_enable_specific_KAPS=1
+
+#In Jericho the KAPS ARM DMA already consumes 64KB of buffer memory
+dma_desc_aggregator_buff_size_kb.BCM88675=40
+
+# Entries capacities for direct access tables in KAPS (8K granularity)
+#pmf_kaps_large_db_size=8096
+
+#enable expose of HW id instead of SW id in Traps.
+bcm886xx_rx_use_hw_trap_id.BCM88650=1
+bcm886xx_rx_use_hw_trap_id.BCM88675=1
+
+# Jericho - maximum RIF Id ( valid range is 0 to 32*1024-1)
+#rif_id_max=20000
+
+#If set, never add the PPH learn extension (unless explictly required in FP action).
+#bcm886xx_pph_learn_extension_disable.BCM88650=0
+#bcm886xx_pph_learn_extension_disable.BCM88660=0
+#bcm886xx_pph_learn_extension_disable.BCM88675=0
+
+# Jericho - field_ip_first_fragment_parsed
+#field_ip_first_fragment_parsed=0
+
+# learning_fifo_dma_buffer_size in bytes (host memory size). Valid range is 20-327680
+learning_fifo_dma_buffer_size=200000
+# learning_fifo_dma_timeout in microseconds. Valid range is 0-65535. 0 means no timeout.
+learning_fifo_dma_timeout=32767
+# learning_fifo_dma_threshold valid range is 1-16384 (0x4000)
+learning_fifo_dma_threshold=4
+
+###################################
+########### OAM and BFD ###########
+###################################
+
+# OAM / BFD initialization
+# To enable OAM set oam_enable to 1
+# To enable BFD set bfd_enable to 1
+# Be aware that OAM requires more settings (Configuring OAMP and Recycle port)
+
+# oam_enable=1
+# bfd_enable=1
+
+# Set OAMP port
+num_oamp_ports.BCM88650=0
+
+# If BFD is used, runtime_performance_optimize_enable_sched_allocation should be set to 0
+# to prevent high memory consumption
+
+# Disable the following:
+# bcm886xx_next_hop_mac_extension_enable
+# bcm886xx_ipv6_tunnel_enable
+
+# To use IEEE 1588, configure DPLL clock
+
+# Configure recycle port (assuming ucode_port_40=RCY.0)
+
+#oam_rcy_port.BCM88650=40
+#tm_port_header_type_in_40.BCM88650=TM
+#tm_port_header_type_out_40.BCM88650=ETH
+#ucode_port_40.0=RCY.0:core_0.40
+
+# MPLS-TP channel types for OAM/BFD - If MPLS-TP used, channel should be specified
+# Available types: mplstp_bfd_control_channel_type
+#               mplstp_pw_ach_channel_type
+#               mplstp_dlm_channel_type
+#               mplstp_ilm_channel_type
+#               mplstp_dm_channel_type
+#               mplstp_ipv4_channel_type
+#               mplstp_cc_channel_type
+#               mplstp_cv_channel_type
+#               mplstp_on_demand_cv_channel_type
+#               mplstp_pwe_oam_channel_type
+#               mplstp_ipv6_channel_type
+#               mplstp_fault_oam_channel_type
+#               mplstp_g8113_channel_type
+#mplstp_g8113_channel_type=0x8902
+#mplstp_fault_oam_channel_type=0x5678
+
+# Use BFD MPLS TP
+#bfd_encapsulation_mode=1
+
+# Use 1711 protocol
+#custom_feature_y1711_enabled=1
+
+# OAM DMA threshold
+#oamp_fifo_dma_event_interface_enable=1
+#oamp_fifo_dma_event_interface_timeout=0
+#oamp_fifo_dma_event_interface_buffer_size=0x1000
+#oamp_fifo_dma_event_interface_threshold=10
+
+# PORT BASED PWE TERMINATION
+#pwe_termination_port_mode_enable =1
+
+# Walk around for Inlif data Errata, for GAL packets, lookup mpls table with valid mpls label
+# it's not offical solution, just for some dedicated customer.
+# offical solution will be PMF. please refer the relevant doc.
+#custom_feature_gal_lookup_exactly=1
+
+custom_feature_cmodel_loopback=1
+
+#for IPv6UC: use Tcam instead of KAPS
+#custom_feature_l3_ipv6_uc_use_tcam=0
+# ipv6_mc need KPB library
+custom_feature_ipv6_mc_forwarding_disable = 1
+vlan_match_criteria_mode=PON_PCP_ETHERTYPE
+
diff --git a/bal_release/3rdparty/bcm-sdk/rc/svk4/dnx.soc b/bal_release/3rdparty/bcm-sdk/rc/svk4/dnx.soc
new file mode 100644
index 0000000..eb90675
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/rc/svk4/dnx.soc
@@ -0,0 +1,192 @@
+#
+# $Id: jer.soc,v 1.90 2013/08/14 08:32:00 ninash Exp $
+#
+# $Copyright: (c) 2011 Broadcom Corporation
+# All Rights Reserved.$
+#
+
+debug info
+debug appl rcload warn
+debug appl symtab warn
+debug bcm rx,tx,link,attach warn
+debug soc tests warn
+debug soc rx,phy,schan,reg,socmem,dma,mem,miim,mii,intr,counter,ddr warn
+debug soc common err
+debug sys verinet warn
+debug soc physim warn
+
+if $?QMX_A0 || $?BCM88370_A0 || $?BCM88371_A0 || $?BCM88371M_A0 || $?BCM88375_A0 || $?BCM88376_A0 || $?BCM88376M_A0 || $?BCM88377_A0 || $?BCM88378_A0 || $?BCM88379_A0 || \
+   $?QMX_A1 || $?BCM88370_A1 || $?BCM88371_A1 || $?BCM88371M_A1 || $?BCM88375_A1 || $?BCM88376_A1 || $?BCM88376M_A1 || $?BCM88377_A1 || $?BCM88378_A1 || $?BCM88379_A1 ||\
+   $?QMX_B0 || $?BCM88370_B0 || $?BCM88371_B0 || $?BCM88371M_B0 || $?BCM88375_B0 || $?BCM88376_B0 || $?BCM88376M_B0 || $?BCM88377_B0 || $?BCM88378_B0 || $?BCM88379_B0  \
+   'local QMX 1'
+if $?JERICHO_A0 || $?BCM88670_A0 || $?BCM88671_A0 || $?BCM88671M_A0 || $?BCM88672_A0 || $?BCM88673_A0 || $?BCM88674_A0 || $?BCM88675_A0 || $?BCM88675M_A0 || $?BCM88676_A0 || $?BCM88676M_A0 || $?BCM88678_A0 || $?BCM88679_A0 || \
+   $?JERICHO_A1 || $?BCM88670_A1 || $?BCM88671_A1 || $?BCM88671M_A1 || $?BCM88672_A1 || $?BCM88673_A1 || $?BCM88674_A1 || $?BCM88675_A1 || $?BCM88675M_A1 || $?BCM88676_A1 || $?BCM88676M_A1 || $?BCM88678_A1 || $?BCM88679_A1 || \
+   $?JERICHO_B0 || $?BCM88670_B0 || $?BCM88671_B0 || $?BCM88671M_B0 || $?BCM88672_B0 || $?BCM88673_B0 || $?BCM88674_B0 || $?BCM88675_B0 || $?BCM88675M_B0 || $?BCM88676_B0 || $?BCM88676M_B0 || $?BCM88678_B0 || $?BCM88679_B0 \
+   'local JERICHO 1'
+if $?BCM88680_A0 ||  $?BCM88681_A0 ||  $?BCM88682_A0 || $?BCM88683_A0 ||  $?BCM88380_A0 ||  $?BCM88381_A0 \
+   'local JERPLUS 1'
+
+if $?BCM88690_A0 \
+   'local JERTWO 1'
+
+if $?QMX \
+    'rcload bcm88375_board.soc'
+if $?JERICHO \
+    'rcload bcm88675_board.soc'
+
+if $?JERPLUS \
+    'rcload bcm88680_board.soc'
+
+#
+# For Jericho-2:
+# This will have to change when we have bcm88690_board.soc
+#
+if $?JERTWO \
+    'rcload bcm88680_board.soc'
+
+# Load DRAM tuning properties from local File. RcLoad will not fail if file not found, and will not show errors of missing file.
+set RCError=off
+debug appl shell warn
+if $?QMX \
+    'rcload /home/negev/bcm88375_dram_tune.soc'
+
+if $?JERICHO \
+    'rcload /home/negev/bcm88675_dram_tune.soc'
+
+debug appl shell =
+set RCError=on
+
+set RCError=off
+rcload combo28_dram.soc
+set RCError=on
+
+#Set fabric connect mode as FE for multi FAP system
+if $?diag_chassis " \
+   config add fabric_connect_mode.BCM88675=FE"
+
+# Set modid:
+# If diag_chassis is enabled (two line cards), and 'slot' is defined (slot is defined only when
+# working without a management card - set modid to be 'slot'
+# Otherwise (single line card, or management card), set modid to be 0 for unit 0, and 1 for unit != 0
+if $?diag_chassis && $?slot "\
+  local modid $slot" \
+else "\
+  local modid $unit"
+expr $modid==1; if $? "local modid 2"
+
+if $?module_id " \
+  local modid $module_id"
+
+echo "$unit: modid=$modid"
+
+# Set base_modid:
+# Id base_module_id is set, then set base_modid to have base_module_id value.
+# Otherwise, set base_modid to be 0.
+if $?base_module_id " \
+  local base_modid $base_module_id" \
+else " \
+  local base_modid 0"
+
+expr $base_modid > 0
+if $? " \
+  echo '$unit: base_modid=$base_modid'"
+
+if $?diag_chassis " \
+  local nof_devices 2" \
+else "\
+  local nof_devices 1"
+
+if $?n_devices " \
+  local nof_devices $n_devices"
+
+expr $nof_devices > 1
+if $? " \
+  echo '$unit: nof_devices=$nof_devices'"
+
+if $?mng_cpu " \
+  echo '$unit:management card - polling is set on'; \
+  config add polled_irq_mode.BCM88675=1; \
+  config add schan_intr_enable.BCM88675=0; \
+  config add tdma_intr_enable.BCM88675=0; \
+  config add tslam_intr_enable.BCM88675=0; \
+  config add miim_intr_enable.BCM88675=0; "
+
+#Counters unavailable in cmodel
+if $?cmodel " \
+  config add counter_engine_sampling_interval=0;"
+
+#default values in a case which these parameters are not exist
+if !$?diag_cosq_disable "\
+  local diag_cosq_disable 0"
+if !$?warmboot "\
+  local warmboot 0"
+if !$?diag_disable "\
+  local diag_disable 0"
+if !$?diag_no_itmh_prog_mode "\
+  local diag_no_itmh_prog_mode 0"
+if !$?l2_mode "\
+  local l2_mode 0"
+
+if $?JERPLUS "\
+  local diag_disable 0"
+local init_others NoLinkscan=0
+if $?JERPLUS "\
+  local init_others 'NoIntr=1 NoLinkscan=1 NoApplStk=0'"
+
+#Disable interrupts in cmodel
+if $?cmodel "\
+  local no_intr 1" \
+else "\
+  local no_intr 0"
+
+#
+# For Jericho-2, we TEMPORARILY disable some components to quickly enable
+# a working PCID version.
+# 
+if $?JERTWO "\
+  local no_soc 0"
+
+if $?JERTWO "\
+  local no_intr 1"
+
+
+#INIT_DNX ModID=$modid NofDevices=$nof_devices CosqDisable=$diag_cosq_disable NoAppl=$diag_disable Warmboot=$warmboot NoRxLos=1 $init_others NoItmhProgMode=$diag_no_itmh_prog_mode L2Mode=$l2_mode NoIntr=$no_intr NoSoc=$no_soc
+
+INIT_DNX
+
+#LED support section start
+#Program of LED0
+local ledcode_0 '02 05 67 2D 02 01 67 2D 02 11 67 2D 02 09 67 2D\
+ 02 15 67 2D 02 0D 67 2D 86 E0 3A 06 28 32 00 32\
+ 01 B7 97 75 3E 16 E0 CA 06 70 3E 77 3A 67 33 75\
+ 3A 77 1C 12 A0 F8 15 1A 00 57 32 0E 87 57 32 0F\
+ 87 57' #sdk88670.hex
+
+#Program of LED1
+local ledcode_1 '02 1D 67 2D 02 2D 67 2D 02 05 67 2D 02 0D 67 2D\
+ 02 09 67 2D 02 01 67 2D 86 E0 3A 06 28 32 00 32\
+ 01 B7 97 75 3E 16 E0 CA 06 70 3E 77 3A 67 33 75\
+ 3A 77 1C 12 A0 F8 15 1A 00 57 32 0E 87 57 32 0F\
+ 87 57' #sdk88670.hex
+
+
+#Program of LED2
+local ledcode_2 '02 01 67 2D 02 09 67 2D 02 0D 67 2D 02 05 67 2D\
+ 02 2D 67 2D 02 1D 67 2D 86 E0 3A 06 28 32 00 32\
+ 01 B7 97 75 3E 16 E0 CA 06 70 3E 77 3A 67 33 75\
+ 3A 77 1C 12 A0 F8 15 1A 00 57 32 0E 87 57 32 0F\
+ 87 57' #sdk88670.hex
+
+# Download LED code into LED processors and enable (if applicable).
+if $?feature_led_proc && !$?simulator \
+    "led 0 prog $ledcode_0; \
+     led 1 prog $ledcode_1; \
+     led 2 prog $ledcode_2; \
+     led auto on; \
+     led 0 start; \
+     led 1 start; \
+     led 2 start"
+
+
+echo "dnx.soc: Done............................."
+
diff --git a/bal_release/3rdparty/bcm-sdk/rc/svk4/dune.soc b/bal_release/3rdparty/bcm-sdk/rc/svk4/dune.soc
new file mode 100644
index 0000000..57f24ea
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/rc/svk4/dune.soc
@@ -0,0 +1,1080 @@
+#
+# $Id: dune.soc,v 1.5 2011/12/20 10:53:28 yaronm Exp $
+#
+# $Copyright: (c) 2011 Broadcom Corporation
+# All Rights Reserved.$
+#
+# Configure fap device mode (TM/PP/TDM_OPTIMIZED/TDM_STANDARD)
+# and ftmh outlif extension depending on config variables 'packet_processing' and 'tdm' variables
+if $?tdm "\
+  echo '*** TDM MODE ***'; \
+  config add diag_cosq_disable=1; \
+  if !$?fap_device_mode 'config add fap_device_mode=TDM_STANDARD'; \
+  config add fabric_ftmh_outlif_extension=ALWAYS; \
+  config ext_qdr_type=NONE; \
+  config ext_ram_present=0"
+if !$?tdm && $?packet_processing "\
+  echo '*** PACKET PROCESSING MODE ***'; \
+  config add fabric_ftmh_outlif_extension=ALWAYS; \
+  config add fap_device_mode=PP; \
+  config add egress_encap_ip_tunnel_range_min=4095; \
+  config add egress_encap_ip_tunnel_range_max=4095; \
+  config add mpls_tunnel_term_label_range_min_0=1000; \
+  config add mpls_tunnel_term_label_range_max_0=1001; \
+  config add mpls_tunnel_term_label_range_min_1=1002; \
+  config add mpls_tunnel_term_label_range_max_1=1003; \
+  config add mpls_tunnel_term_label_range_min_2=1004; \
+  config add mpls_tunnel_term_label_range_max_2=1005; \
+  if !$?diag_cosq_disable 'config add diag_cosq_disable=0';"
+if !$?tdm && !$?packet_processing "\
+  echo '*** TM ONLY MODE ***'; \
+  config add fap_device_mode=TM; \
+  config add fabric_ftmh_outlif_extension=IF_MC; \
+  if !$?diag_cosq_disable 'config add diag_cosq_disable=0'"
+
+# When more than a single device, set connect mode to FE and modid
+# to the slot id. For a single device, set connect mode to SINGLE_FAP
+# and modid to 0. Note that when using single_fap, all fabric-facing serdes
+# lanes are set in loopback, for fabric multicast to work.
+# All options for fabric_connect_mode are FE/BACK2BACK/MESH/MULTI_STAGE_FE/SINGLE_FAP
+
+if !$?diag_cosq_disable "config add diag_cosq_disable=0"
+if !$?slot || !$?diag_chassis "local slot 0"
+if !$?board_type_GFA_BI "local board_type_GFA_BI 1"
+if !$?board_type_GFA_BI_2 "local board_type_GFA_BI_2 0"
+
+if $?diag_chassis " \
+  local nof_devices 2; \
+  config add fabric_connect_mode=FE" \
+else "\
+  local nof_devices 1; \
+  if !$?fabric_connect_mode 'config add fabric_connect_mode=SINGLE_FAP'"
+   
+#Enable all quartets. Can be done per quartet using _N suffix
+config add pb_serdes_qrtt_active=1
+
+local lane_rate_nif 6250000
+local lane_rate_com_a 6250000
+if $board_type_GFA_BI "\
+    local lane_rate_fbr 5000000; \
+    local lane_rate_com_b 3125000; \
+    config add fabric_ref_clock=250000; \
+    config add combo_nif_0=1; \
+    config add combo_nif_1=1" \
+else '\
+    local lane_rate_fbr 6250000; \
+    local lane_rate_com_b 6250000; \
+    config add fabric_ref_clock=312500; \
+    config add combo_nif_0=0; \
+    config add combo_nif_1=0; \
+    for i=32,59 \'config add pb_serdes_lane_tx_phys_media_type_$i=CHIP2CHIP\''
+
+# Nif serdes quartets
+for i=0,2 'config add pb_serdes_qrtt_max_expected_rate_$i=$lane_rate_nif'
+for i=4,6 'config add pb_serdes_qrtt_max_expected_rate_$i=$lane_rate_nif'
+
+# Nif serdes quartet (combo-a)
+config add pb_serdes_qrtt_max_expected_rate_3=$lane_rate_com_a
+
+# Nif serdes quartet (combo-b)
+config add pb_serdes_qrtt_max_expected_rate_7=$lane_rate_com_b
+
+# Fabric serdes quartets
+for i=8,14 'config add pb_serdes_qrtt_max_expected_rate_$i=$lane_rate_fbr'
+
+# set default rate to nif rate. Override fabric lanes.
+config add pb_serdes_lane_rate=$lane_rate_nif
+for i=12,15 'config add pb_serdes_lane_rate_$i=$lane_rate_com_a'
+for i=28,31 'config add pb_serdes_lane_rate_$i=$lane_rate_com_b'
+for i=32,59 'config add pb_serdes_lane_rate_$i=$lane_rate_fbr'
+
+# Board Type configuration.
+
+if $board_type_GFA_BI "\
+    echo Configure GFA_BI Port/Interfcae/Nif/SerDes parameters; \
+    config add ucode_port_1=RXAUI7; \
+    config add ucode_port_2=RXAUI6; \
+    config add ucode_port_3=XAUI7; \
+    config add ucode_port_4=RXAUI0; \
+    config add ucode_port_5=RXAUI2; \
+    config add ucode_port_6=RXAUI4; \
+    config add ucode_port_7=RXAUI12; \
+    config add ucode_port_8=RXAUI10; \
+    config add ucode_port_9=RXAUI8; \
+    config add pb_serdes_lane_swap_polarity_tx_9=1; \
+    config add pb_serdes_lane_swap_polarity_tx_29=1; \
+    config add pb_serdes_lane_swap_polarity_rx_13=1; \
+    config add pb_serdes_lane_swap_polarity_rx_18=1; \
+    config add pb_serdes_lane_swap_polarity_rx_22=1; \
+    config add pb_serdes_lane_swap_polarity_rx_30=1; \
+    config add pb_serdes_lane_swap_polarity_rx_31=1; \
+    config add pb_serdes_lane_rx_phys_zcnt=23; \
+    config add pb_serdes_lane_rx_phys_z1cnt=1; \
+    config add pb_serdes_lane_rx_phys_dfelth=20; \
+    config add pb_serdes_lane_rx_phys_tlth=20; \
+    config add pb_serdes_lane_rx_phys_g1cnt=1; \
+    config add pb_serdes_lane_tx_phys_amp_12=30; \
+    config add pb_serdes_lane_tx_phys_main_12=18; \
+    config add pb_serdes_lane_tx_phys_pre_12=3; \
+    config add pb_serdes_lane_tx_phys_post_12=13; \
+    config add pb_serdes_lane_tx_phys_amp_13=30; \
+    config add pb_serdes_lane_tx_phys_main_13=18; \
+    config add pb_serdes_lane_tx_phys_pre_13=3; \
+    config add pb_serdes_lane_tx_phys_post_13=13; \
+    config add pb_serdes_lane_tx_phys_amp_14=30; \
+    config add pb_serdes_lane_tx_phys_main_14=18; \
+    config add pb_serdes_lane_tx_phys_pre_14=3; \
+    config add pb_serdes_lane_tx_phys_post_14=13; \
+    config add pb_serdes_lane_tx_phys_amp_15=30; \
+    config add pb_serdes_lane_tx_phys_main_15=18; \
+    config add pb_serdes_lane_tx_phys_pre_15=3; \
+    config add pb_serdes_lane_tx_phys_post_15=13;"
+    
+if $board_type_GFA_BI "\
+    config add pb_serdes_lane_rx_phys_zcnt_3=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_3=1;  \
+    config add pb_serdes_lane_rx_phys_dfelth_3=15;  \
+    config add pb_serdes_lane_rx_phys_tlth_3=18;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_3=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_12=21;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_12=1;  \
+    config add pb_serdes_lane_rx_phys_dfelth_12=1;  \
+    config add pb_serdes_lane_rx_phys_tlth_12=8;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_12=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_13=18;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_13=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_13=0;  \
+    config add pb_serdes_lane_rx_phys_tlth_13=4;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_13=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_14=17;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_14=1;  \
+    config add pb_serdes_lane_rx_phys_dfelth_14=2;  \
+    config add pb_serdes_lane_rx_phys_tlth_14=4;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_14=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_15=19;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_15=1;  \
+    config add pb_serdes_lane_rx_phys_dfelth_15=0;  \
+    config add pb_serdes_lane_rx_phys_tlth_15=0;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_15=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_28=12;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_28=0;  \
+    config add pb_serdes_lane_rx_phys_dfelth_28=0;  \
+    config add pb_serdes_lane_rx_phys_tlth_28=0;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_28=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_29=12;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_29=0;  \
+    config add pb_serdes_lane_rx_phys_dfelth_29=0;  \
+    config add pb_serdes_lane_rx_phys_tlth_29=0;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_29=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_30=12;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_30=0;  \
+    config add pb_serdes_lane_rx_phys_dfelth_30=0;  \
+    config add pb_serdes_lane_rx_phys_tlth_30=0;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_30=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_31=12;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_31=0;  \
+    config add pb_serdes_lane_rx_phys_dfelth_31=0;  \
+    config add pb_serdes_lane_rx_phys_tlth_31=0;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_31=1;"
+    
+# TX params for fabric rate of 5000 mbps (Negev system).
+# Overrides media type configuration.
+if $board_type_GFA_BI "\
+    config add pb_serdes_lane_tx_phys_amp_32=31; \
+    config add pb_serdes_lane_tx_phys_main_32=24; \
+    config add pb_serdes_lane_tx_phys_pre_32=0; \
+    config add pb_serdes_lane_tx_phys_post_32=0; \
+    config add pb_serdes_lane_tx_phys_amp_33=31; \
+    config add pb_serdes_lane_tx_phys_main_33=24; \
+    config add pb_serdes_lane_tx_phys_pre_33=0; \
+    config add pb_serdes_lane_tx_phys_post_33=0; \
+    config add pb_serdes_lane_tx_phys_amp_34=31; \
+    config add pb_serdes_lane_tx_phys_main_34=24; \
+    config add pb_serdes_lane_tx_phys_pre_34=0; \
+    config add pb_serdes_lane_tx_phys_post_34=0; \
+    config add pb_serdes_lane_tx_phys_amp_35=31; \
+    config add pb_serdes_lane_tx_phys_main_35=24; \
+    config add pb_serdes_lane_tx_phys_pre_35=0; \
+    config add pb_serdes_lane_tx_phys_post_35=0; \
+    config add pb_serdes_lane_tx_phys_amp_36=31; \
+    config add pb_serdes_lane_tx_phys_main_36=24; \
+    config add pb_serdes_lane_tx_phys_pre_36=0; \
+    config add pb_serdes_lane_tx_phys_post_36=0; \
+    config add pb_serdes_lane_tx_phys_amp_37=31; \
+    config add pb_serdes_lane_tx_phys_main_37=24; \
+    config add pb_serdes_lane_tx_phys_pre_37=0; \
+    config add pb_serdes_lane_tx_phys_post_37=0; \
+    config add pb_serdes_lane_tx_phys_amp_38=31; \
+    config add pb_serdes_lane_tx_phys_main_38=24; \
+    config add pb_serdes_lane_tx_phys_pre_38=0; \
+    config add pb_serdes_lane_tx_phys_post_38=0; \
+    config add pb_serdes_lane_tx_phys_amp_39=31; \
+    config add pb_serdes_lane_tx_phys_main_39=24; \
+    config add pb_serdes_lane_tx_phys_pre_39=0; \
+    config add pb_serdes_lane_tx_phys_post_39=0; \
+    config add pb_serdes_lane_tx_phys_amp_40=31; \
+    config add pb_serdes_lane_tx_phys_main_40=24; \
+    config add pb_serdes_lane_tx_phys_pre_40=0; \
+    config add pb_serdes_lane_tx_phys_post_40=0; \
+    config add pb_serdes_lane_tx_phys_amp_41=31; \
+    config add pb_serdes_lane_tx_phys_main_41=24; \
+    config add pb_serdes_lane_tx_phys_pre_41=0; \
+    config add pb_serdes_lane_tx_phys_post_41=0; \
+    config add pb_serdes_lane_tx_phys_amp_42=31; \
+    config add pb_serdes_lane_tx_phys_main_42=24; \
+    config add pb_serdes_lane_tx_phys_pre_42=0; \
+    config add pb_serdes_lane_tx_phys_post_42=0"
+if $board_type_GFA_BI "\
+    config add pb_serdes_lane_tx_phys_amp_43=31; \
+    config add pb_serdes_lane_tx_phys_main_43=24; \
+    config add pb_serdes_lane_tx_phys_pre_43=0; \
+    config add pb_serdes_lane_tx_phys_post_43=0; \
+    config add pb_serdes_lane_tx_phys_amp_44=31; \
+    config add pb_serdes_lane_tx_phys_main_44=24; \
+    config add pb_serdes_lane_tx_phys_pre_44=0; \
+    config add pb_serdes_lane_tx_phys_post_44=0; \
+    config add pb_serdes_lane_tx_phys_amp_45=31; \
+    config add pb_serdes_lane_tx_phys_main_45=24; \
+    config add pb_serdes_lane_tx_phys_pre_45=0; \
+    config add pb_serdes_lane_tx_phys_post_45=0; \
+    config add pb_serdes_lane_tx_phys_amp_46=31; \
+    config add pb_serdes_lane_tx_phys_main_46=24; \
+    config add pb_serdes_lane_tx_phys_pre_46=0; \
+    config add pb_serdes_lane_tx_phys_post_46=0; \
+    config add pb_serdes_lane_tx_phys_amp_47=31; \
+    config add pb_serdes_lane_tx_phys_main_47=24; \
+    config add pb_serdes_lane_tx_phys_pre_47=0; \
+    config add pb_serdes_lane_tx_phys_post_47=0; \
+    config add pb_serdes_lane_tx_phys_amp_48=31; \
+    config add pb_serdes_lane_tx_phys_main_48=24; \
+    config add pb_serdes_lane_tx_phys_pre_48=0; \
+    config add pb_serdes_lane_tx_phys_post_48=0; \
+    config add pb_serdes_lane_tx_phys_amp_49=31; \
+    config add pb_serdes_lane_tx_phys_main_49=24; \
+    config add pb_serdes_lane_tx_phys_pre_49=0; \
+    config add pb_serdes_lane_tx_phys_post_49=0; \
+    config add pb_serdes_lane_tx_phys_amp_50=31; \
+    config add pb_serdes_lane_tx_phys_main_50=24; \
+    config add pb_serdes_lane_tx_phys_pre_50=0; \
+    config add pb_serdes_lane_tx_phys_post_50=0; \
+    config add pb_serdes_lane_tx_phys_amp_51=31; \
+    config add pb_serdes_lane_tx_phys_main_51=24; \
+    config add pb_serdes_lane_tx_phys_pre_51=0; \
+    config add pb_serdes_lane_tx_phys_post_51=0; \
+    config add pb_serdes_lane_tx_phys_amp_52=31; \
+    config add pb_serdes_lane_tx_phys_main_52=24; \
+    config add pb_serdes_lane_tx_phys_pre_52=0; \
+    config add pb_serdes_lane_tx_phys_post_52=0; \
+    config add pb_serdes_lane_tx_phys_amp_53=31; \
+    config add pb_serdes_lane_tx_phys_main_53=24; \
+    config add pb_serdes_lane_tx_phys_pre_53=0; \
+    config add pb_serdes_lane_tx_phys_post_53=0; \
+    config add pb_serdes_lane_tx_phys_amp_54=31; \
+    config add pb_serdes_lane_tx_phys_main_54=24; \
+    config add pb_serdes_lane_tx_phys_pre_54=0; \
+    config add pb_serdes_lane_tx_phys_post_54=0; \
+    config add pb_serdes_lane_tx_phys_amp_55=31; \
+    config add pb_serdes_lane_tx_phys_main_55=24; \
+    config add pb_serdes_lane_tx_phys_pre_55=0; \
+    config add pb_serdes_lane_tx_phys_post_55=0; \
+    config add pb_serdes_lane_tx_phys_amp_56=31; \
+    config add pb_serdes_lane_tx_phys_main_56=24; \
+    config add pb_serdes_lane_tx_phys_pre_56=0; \
+    config add pb_serdes_lane_tx_phys_post_56=0; \
+    config add pb_serdes_lane_tx_phys_amp_57=31; \
+    config add pb_serdes_lane_tx_phys_main_57=24; \
+    config add pb_serdes_lane_tx_phys_pre_57=0; \
+    config add pb_serdes_lane_tx_phys_post_57=0; \
+    config add pb_serdes_lane_tx_phys_amp_58=31; \
+    config add pb_serdes_lane_tx_phys_main_58=24; \
+    config add pb_serdes_lane_tx_phys_pre_58=0; \
+    config add pb_serdes_lane_tx_phys_post_58=0; \
+    config add pb_serdes_lane_tx_phys_amp_59=31; \
+    config add pb_serdes_lane_tx_phys_main_59=24; \
+    config add pb_serdes_lane_tx_phys_pre_59=0; \
+    config add pb_serdes_lane_tx_phys_post_59=0;"
+
+# RX params for fabric rate of 5000 mbps (Negev system)
+if $board_type_GFA_BI "\
+    config add pb_serdes_lane_rx_phys_zcnt_32=24; \
+    config add pb_serdes_lane_rx_phys_z1cnt_32=2; \
+    config add pb_serdes_lane_rx_phys_dfelth_32=21; \
+    config add pb_serdes_lane_rx_phys_tlth_32=35; \
+    config add pb_serdes_lane_rx_phys_g1cnt_32=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_33=24; \
+    config add pb_serdes_lane_rx_phys_z1cnt_33=1; \
+    config add pb_serdes_lane_rx_phys_dfelth_33=28; \
+    config add pb_serdes_lane_rx_phys_tlth_33=16; \
+    config add pb_serdes_lane_rx_phys_g1cnt_33=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_34=24; \
+    config add pb_serdes_lane_rx_phys_z1cnt_34=1; \
+    config add pb_serdes_lane_rx_phys_dfelth_34=18; \
+    config add pb_serdes_lane_rx_phys_tlth_34=26; \
+    config add pb_serdes_lane_rx_phys_g1cnt_34=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_35=23; \
+    config add pb_serdes_lane_rx_phys_z1cnt_35=2; \
+    config add pb_serdes_lane_rx_phys_dfelth_35=23; \
+    config add pb_serdes_lane_rx_phys_tlth_35=14; \
+    config add pb_serdes_lane_rx_phys_g1cnt_35=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_36=22; \
+    config add pb_serdes_lane_rx_phys_z1cnt_36=1; \
+    config add pb_serdes_lane_rx_phys_dfelth_36=22; \
+    config add pb_serdes_lane_rx_phys_tlth_36=30; \
+    config add pb_serdes_lane_rx_phys_g1cnt_36=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_37=23; \
+    config add pb_serdes_lane_rx_phys_z1cnt_37=1; \
+    config add pb_serdes_lane_rx_phys_dfelth_37=20; \
+    config add pb_serdes_lane_rx_phys_tlth_37=14; \
+    config add pb_serdes_lane_rx_phys_g1cnt_37=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_38=24; \
+    config add pb_serdes_lane_rx_phys_z1cnt_38=1; \
+    config add pb_serdes_lane_rx_phys_dfelth_38=23; \
+    config add pb_serdes_lane_rx_phys_tlth_38=29; \
+    config add pb_serdes_lane_rx_phys_g1cnt_38=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_39=24; \
+    config add pb_serdes_lane_rx_phys_z1cnt_39=1; \
+    config add pb_serdes_lane_rx_phys_dfelth_39=24; \
+    config add pb_serdes_lane_rx_phys_tlth_39=30; \
+    config add pb_serdes_lane_rx_phys_g1cnt_39=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_40=24; \
+    config add pb_serdes_lane_rx_phys_z1cnt_40=1; \
+    config add pb_serdes_lane_rx_phys_dfelth_40=21; \
+    config add pb_serdes_lane_rx_phys_tlth_40=33; \
+    config add pb_serdes_lane_rx_phys_g1cnt_40=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_41=24; \
+    config add pb_serdes_lane_rx_phys_z1cnt_41=1; \
+    config add pb_serdes_lane_rx_phys_dfelth_41=20; \
+    config add pb_serdes_lane_rx_phys_tlth_41=6; \
+    config add pb_serdes_lane_rx_phys_g1cnt_41=1;"
+if $board_type_GFA_BI "\
+    config add pb_serdes_lane_rx_phys_zcnt_42=20; \
+    config add pb_serdes_lane_rx_phys_z1cnt_42=3; \
+    config add pb_serdes_lane_rx_phys_dfelth_42=18; \
+    config add pb_serdes_lane_rx_phys_tlth_42=33; \
+    config add pb_serdes_lane_rx_phys_g1cnt_42=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_43=24; \
+    config add pb_serdes_lane_rx_phys_z1cnt_43=1; \
+    config add pb_serdes_lane_rx_phys_dfelth_43=26; \
+    config add pb_serdes_lane_rx_phys_tlth_43=33; \
+    config add pb_serdes_lane_rx_phys_g1cnt_43=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_44=23; \
+    config add pb_serdes_lane_rx_phys_z1cnt_44=1; \
+    config add pb_serdes_lane_rx_phys_dfelth_44=22; \
+    config add pb_serdes_lane_rx_phys_tlth_44=34; \
+    config add pb_serdes_lane_rx_phys_g1cnt_44=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_45=22; \
+    config add pb_serdes_lane_rx_phys_z1cnt_45=1; \
+    config add pb_serdes_lane_rx_phys_dfelth_45=18; \
+    config add pb_serdes_lane_rx_phys_tlth_45=16; \
+    config add pb_serdes_lane_rx_phys_g1cnt_45=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_46=23; \
+    config add pb_serdes_lane_rx_phys_z1cnt_46=1; \
+    config add pb_serdes_lane_rx_phys_dfelth_46=21; \
+    config add pb_serdes_lane_rx_phys_tlth_46=28; \
+    config add pb_serdes_lane_rx_phys_g1cnt_46=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_47=20; \
+    config add pb_serdes_lane_rx_phys_z1cnt_47=2; \
+    config add pb_serdes_lane_rx_phys_dfelth_47=16; \
+    config add pb_serdes_lane_rx_phys_tlth_47=9; \
+    config add pb_serdes_lane_rx_phys_g1cnt_47=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_48=24; \
+    config add pb_serdes_lane_rx_phys_z1cnt_48=1; \
+    config add pb_serdes_lane_rx_phys_dfelth_48=23; \
+    config add pb_serdes_lane_rx_phys_tlth_48=33; \
+    config add pb_serdes_lane_rx_phys_g1cnt_48=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_49=23; \
+    config add pb_serdes_lane_rx_phys_z1cnt_49=1; \
+    config add pb_serdes_lane_rx_phys_dfelth_49=28; \
+    config add pb_serdes_lane_rx_phys_tlth_49=12; \
+    config add pb_serdes_lane_rx_phys_g1cnt_49=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_50=23; \
+    config add pb_serdes_lane_rx_phys_z1cnt_50=1; \
+    config add pb_serdes_lane_rx_phys_dfelth_50=24;"
+if $board_type_GFA_BI "\
+    config add pb_serdes_lane_rx_phys_tlth_50=19; \
+    config add pb_serdes_lane_rx_phys_g1cnt_50=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_51=24; \
+    config add pb_serdes_lane_rx_phys_z1cnt_51=1; \
+    config add pb_serdes_lane_rx_phys_dfelth_51=22; \
+    config add pb_serdes_lane_rx_phys_tlth_51=20; \
+    config add pb_serdes_lane_rx_phys_g1cnt_51=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_52=23; \
+    config add pb_serdes_lane_rx_phys_z1cnt_52=1; \
+    config add pb_serdes_lane_rx_phys_dfelth_52=24; \
+    config add pb_serdes_lane_rx_phys_tlth_52=33; \
+    config add pb_serdes_lane_rx_phys_g1cnt_52=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_53=20; \
+    config add pb_serdes_lane_rx_phys_z1cnt_53=4; \
+    config add pb_serdes_lane_rx_phys_dfelth_53=10; \
+    config add pb_serdes_lane_rx_phys_tlth_53=5; \
+    config add pb_serdes_lane_rx_phys_g1cnt_53=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_54=24; \
+    config add pb_serdes_lane_rx_phys_z1cnt_54=1; \
+    config add pb_serdes_lane_rx_phys_dfelth_54=29; \
+    config add pb_serdes_lane_rx_phys_tlth_54=25; \
+    config add pb_serdes_lane_rx_phys_g1cnt_54=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_55=24; \
+    config add pb_serdes_lane_rx_phys_z1cnt_55=1; \
+    config add pb_serdes_lane_rx_phys_dfelth_55=24; \
+    config add pb_serdes_lane_rx_phys_tlth_55=22; \
+    config add pb_serdes_lane_rx_phys_g1cnt_55=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_56=24; \
+    config add pb_serdes_lane_rx_phys_z1cnt_56=1; \
+    config add pb_serdes_lane_rx_phys_dfelth_56=22; \
+    config add pb_serdes_lane_rx_phys_tlth_56=31; \
+    config add pb_serdes_lane_rx_phys_g1cnt_56=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_57=24; \
+    config add pb_serdes_lane_rx_phys_z1cnt_57=1; \
+    config add pb_serdes_lane_rx_phys_dfelth_57=22; \
+    config add pb_serdes_lane_rx_phys_tlth_57=25; \
+    config add pb_serdes_lane_rx_phys_g1cnt_57=1;"
+
+if $board_type_GFA_BI "\
+    config add pb_serdes_lane_rx_phys_zcnt_58=23; \
+    config add pb_serdes_lane_rx_phys_z1cnt_58=1; \
+    config add pb_serdes_lane_rx_phys_dfelth_58=23; \
+    config add pb_serdes_lane_rx_phys_tlth_58=26; \
+    config add pb_serdes_lane_rx_phys_g1cnt_58=1; \
+    config add pb_serdes_lane_rx_phys_zcnt_59=23; \
+    config add pb_serdes_lane_rx_phys_z1cnt_59=2; \
+    config add pb_serdes_lane_rx_phys_dfelth_59=21; \
+    config add pb_serdes_lane_rx_phys_tlth_59=25; \
+    config add pb_serdes_lane_rx_phys_g1cnt_59=1;"
+
+if $board_type_GFA_BI_2 "\
+    echo Configure GFA_BI_2 Port/Interfcae/Nif/SerDes parameters; \
+    config add ucode_port_1=RXAUI3; \
+    config add ucode_port_2=RXAUI2; \
+    config add ucode_port_3=RXAUI1; \
+    config add ucode_port_4=RXAUI0; \
+    config add ucode_port_5=RXAUI8; \
+    config add ucode_port_6=RXAUI9; \
+    config add ucode_port_7=RXAUI5; \
+    config add ucode_port_8=RXAUI4; \
+    config add ucode_port_9=RXAUI12; \
+    config add ucode_port_10=RXAUI13; \
+    config add ucode_port_11=RXAUI10; \
+    config add ucode_port_12=RXAUI11; \
+    config add lanes_swap_6=1; \
+    config add lanes_swap_10=1; \
+    config add lanes_swap_11=1; \
+    config add lanes_swap_12=1; \
+    config add pb_serdes_lane_swap_polarity_tx_12=1; \
+    config add pb_serdes_lane_swap_polarity_tx_14=1; \
+    config add pb_serdes_lane_swap_polarity_tx_28=1; \
+    config add pb_serdes_lane_swap_polarity_tx_31=1; \
+    config add pb_serdes_lane_swap_polarity_tx_32=1; \
+    config add pb_serdes_lane_swap_polarity_tx_34=1; \
+    config add pb_serdes_lane_swap_polarity_tx_41=1; \
+    config add pb_serdes_lane_swap_polarity_rx_48=1; \
+    config add pb_serdes_lane_swap_polarity_rx_50=1; \
+    config add pb_serdes_lane_swap_polarity_rx_52=1; \
+    config add pb_serdes_lane_swap_polarity_rx_55=1; \
+    config add pb_serdes_lane_swap_polarity_rx_56=1; \
+    config add pb_serdes_lane_swap_polarity_rx_58=1;"
+    
+if $board_type_GFA_BI_2 && !$system_is_fe600_in_system "\
+    config add pb_serdes_lane_rx_phys_zcnt=21; \
+    config add pb_serdes_lane_rx_phys_z1cnt=1; \
+    config add pb_serdes_lane_rx_phys_dfelth=1; \
+    config add pb_serdes_lane_rx_phys_tlth=8; \
+    config add pb_serdes_lane_rx_phys_g1cnt=1; \
+    config add pb_serdes_lane_tx_phys_amp=30;  \
+    config add pb_serdes_lane_tx_phys_main=18;  \
+    config add pb_serdes_lane_tx_phys_pre=3;  \
+    config add pb_serdes_lane_tx_phys_post=13;"
+
+#GFA-BI2, with fe600, slot 0
+if $board_type_GFA_BI_2 && $system_is_fe600_in_system && !$slot "\
+    config add pb_serdes_lane_rx_phys_zcnt_12=23;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_12=1;  \
+    config add pb_serdes_lane_rx_phys_dfelth_12=11;  \
+    config add pb_serdes_lane_rx_phys_tlth_12=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_12=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_13=23;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_13=3;  \
+    config add pb_serdes_lane_rx_phys_dfelth_13=17;  \
+    config add pb_serdes_lane_rx_phys_tlth_13=7;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_13=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_14=18;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_14=3;  \
+    config add pb_serdes_lane_rx_phys_dfelth_14=7;  \
+    config add pb_serdes_lane_rx_phys_tlth_14=4;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_14=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_15=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_15=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_15=21;  \
+    config add pb_serdes_lane_rx_phys_tlth_15=21;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_15=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_28=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_28=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_28=18;  \
+    config add pb_serdes_lane_rx_phys_tlth_28=8;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_28=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_29=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_29=1;  \
+    config add pb_serdes_lane_rx_phys_dfelth_29=9;  \
+    config add pb_serdes_lane_rx_phys_tlth_29=2;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_29=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_30=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_30=3;  \
+    config add pb_serdes_lane_rx_phys_dfelth_30=18;  \
+    config add pb_serdes_lane_rx_phys_tlth_30=12;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_30=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_31=21;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_31=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_31=10;  \
+    config add pb_serdes_lane_rx_phys_tlth_31=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_31=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_32=23;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_32=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_32=22;  \
+    config add pb_serdes_lane_rx_phys_tlth_32=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_32=1"
+if $board_type_GFA_BI_2 && $system_is_fe600_in_system && !$slot "\
+    config add pb_serdes_lane_rx_phys_zcnt_33=23;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_33=1;  \
+    config add pb_serdes_lane_rx_phys_dfelth_33=13;  \
+    config add pb_serdes_lane_rx_phys_tlth_33=4;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_33=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_34=23;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_34=3;  \
+    config add pb_serdes_lane_rx_phys_dfelth_34=20;  \
+    config add pb_serdes_lane_rx_phys_tlth_34=30;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_34=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_35=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_35=1;  \
+    config add pb_serdes_lane_rx_phys_dfelth_35=11;  \
+    config add pb_serdes_lane_rx_phys_tlth_35=5;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_35=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_36=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_36=0;  \
+    config add pb_serdes_lane_rx_phys_dfelth_36=11;  \
+    config add pb_serdes_lane_rx_phys_tlth_36=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_36=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_37=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_37=1;  \
+    config add pb_serdes_lane_rx_phys_dfelth_37=10;  \
+    config add pb_serdes_lane_rx_phys_tlth_37=2;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_37=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_38=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_38=3;  \
+    config add pb_serdes_lane_rx_phys_dfelth_38=20;  \
+    config add pb_serdes_lane_rx_phys_tlth_38=11;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_38=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_39=22;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_39=1;  \
+    config add pb_serdes_lane_rx_phys_dfelth_39=9;  \
+    config add pb_serdes_lane_rx_phys_tlth_39=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_39=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_40=23;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_40=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_40=24;  \
+    config add pb_serdes_lane_rx_phys_tlth_40=2;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_40=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_41=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_41=1;  \
+    config add pb_serdes_lane_rx_phys_dfelth_41=9;  \
+    config add pb_serdes_lane_rx_phys_tlth_41=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_41=1"
+if $board_type_GFA_BI_2 && $system_is_fe600_in_system && !$slot "\
+    config add pb_serdes_lane_rx_phys_zcnt_42=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_42=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_42=10;  \
+    config add pb_serdes_lane_rx_phys_tlth_42=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_42=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_43=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_43=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_43=25;  \
+    config add pb_serdes_lane_rx_phys_tlth_43=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_43=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_44=23;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_44=1;  \
+    config add pb_serdes_lane_rx_phys_dfelth_44=9;  \
+    config add pb_serdes_lane_rx_phys_tlth_44=2;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_44=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_45=22;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_45=1;  \
+    config add pb_serdes_lane_rx_phys_dfelth_45=18;  \
+    config add pb_serdes_lane_rx_phys_tlth_45=16;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_45=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_46=21;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_46=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_46=9;  \
+    config add pb_serdes_lane_rx_phys_tlth_46=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_46=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_47=21;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_47=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_47=11;  \
+    config add pb_serdes_lane_rx_phys_tlth_47=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_47=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_48=21;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_48=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_48=8;  \
+    config add pb_serdes_lane_rx_phys_tlth_48=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_48=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_49=21;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_49=3;  \
+    config add pb_serdes_lane_rx_phys_dfelth_49=15;  \
+    config add pb_serdes_lane_rx_phys_tlth_49=13;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_49=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_50=23;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_50=3;  \
+    config add pb_serdes_lane_rx_phys_dfelth_50=17;  \
+    config add pb_serdes_lane_rx_phys_tlth_50=3;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_50=1"
+if $board_type_GFA_BI_2 && $system_is_fe600_in_system && !$slot "\
+    config add pb_serdes_lane_rx_phys_zcnt_51=22;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_51=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_51=8;  \
+    config add pb_serdes_lane_rx_phys_tlth_51=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_51=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_52=17;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_52=3;  \
+    config add pb_serdes_lane_rx_phys_dfelth_52=6;  \
+    config add pb_serdes_lane_rx_phys_tlth_52=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_52=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_53=22;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_53=1;  \
+    config add pb_serdes_lane_rx_phys_dfelth_53=11;  \
+    config add pb_serdes_lane_rx_phys_tlth_53=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_53=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_54=21;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_54=3;  \
+    config add pb_serdes_lane_rx_phys_dfelth_54=5;  \
+    config add pb_serdes_lane_rx_phys_tlth_54=2;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_54=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_55=23;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_55=1;  \
+    config add pb_serdes_lane_rx_phys_dfelth_55=14;  \
+    config add pb_serdes_lane_rx_phys_tlth_55=4;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_55=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_56=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_56=3;  \
+    config add pb_serdes_lane_rx_phys_dfelth_56=20;  \
+    config add pb_serdes_lane_rx_phys_tlth_56=21;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_56=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_57=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_57=1;  \
+    config add pb_serdes_lane_rx_phys_dfelth_57=14;  \
+    config add pb_serdes_lane_rx_phys_tlth_57=7;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_57=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_58=19;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_58=1;  \
+    config add pb_serdes_lane_rx_phys_dfelth_58=11;  \
+    config add pb_serdes_lane_rx_phys_tlth_58=2;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_58=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_59=22;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_59=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_59=12;  \
+    config add pb_serdes_lane_rx_phys_tlth_59=3;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_59=1"
+
+#GFA-BI2, with fe600, slot 1
+if $board_type_GFA_BI_2 && $system_is_fe600_in_system && $slot "\
+    config add pb_serdes_lane_rx_phys_zcnt_12=23;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_12=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_12=9;  \
+    config add pb_serdes_lane_rx_phys_tlth_12=2;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_12=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_13=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_13=4;  \
+    config add pb_serdes_lane_rx_phys_dfelth_13=20;  \
+    config add pb_serdes_lane_rx_phys_tlth_13=2;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_13=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_14=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_14=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_14=9;  \
+    config add pb_serdes_lane_rx_phys_tlth_14=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_14=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_15=23;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_15=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_15=10;  \
+    config add pb_serdes_lane_rx_phys_tlth_15=9;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_15=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_28=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_28=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_28=14;  \
+    config add pb_serdes_lane_rx_phys_tlth_28=4;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_28=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_29=23;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_29=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_29=9;  \
+    config add pb_serdes_lane_rx_phys_tlth_29=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_29=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_30=22;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_30=3;  \
+    config add pb_serdes_lane_rx_phys_dfelth_30=6;  \
+    config add pb_serdes_lane_rx_phys_tlth_30=4;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_30=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_31=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_31=1;  \
+    config add pb_serdes_lane_rx_phys_dfelth_31=14;  \
+    config add pb_serdes_lane_rx_phys_tlth_31=8;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_31=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_32=22;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_32=3;  \
+    config add pb_serdes_lane_rx_phys_dfelth_32=19;  \
+    config add pb_serdes_lane_rx_phys_tlth_32=4;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_32=1"
+if $board_type_GFA_BI_2 && $system_is_fe600_in_system && $slot "\
+    config add pb_serdes_lane_rx_phys_zcnt_33=22;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_33=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_33=11;  \
+    config add pb_serdes_lane_rx_phys_tlth_33=10;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_33=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_34=22;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_34=3;  \
+    config add pb_serdes_lane_rx_phys_dfelth_34=17;  \
+    config add pb_serdes_lane_rx_phys_tlth_34=20;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_34=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_35=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_35=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_35=12;  \
+    config add pb_serdes_lane_rx_phys_tlth_35=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_35=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_36=22;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_36=1;  \
+    config add pb_serdes_lane_rx_phys_dfelth_36=10;  \
+    config add pb_serdes_lane_rx_phys_tlth_36=4;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_36=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_37=22;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_37=1;  \
+    config add pb_serdes_lane_rx_phys_dfelth_37=10;  \
+    config add pb_serdes_lane_rx_phys_tlth_37=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_37=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_38=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_38=3;  \
+    config add pb_serdes_lane_rx_phys_dfelth_38=20;  \
+    config add pb_serdes_lane_rx_phys_tlth_38=14;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_38=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_39=23;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_39=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_39=11;  \
+    config add pb_serdes_lane_rx_phys_tlth_39=2;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_39=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_40=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_40=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_40=24;  \
+    config add pb_serdes_lane_rx_phys_tlth_40=18;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_40=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_41=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_41=3;  \
+    config add pb_serdes_lane_rx_phys_dfelth_41=11;  \
+    config add pb_serdes_lane_rx_phys_tlth_41=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_41=1"
+if $board_type_GFA_BI_2 && $system_is_fe600_in_system && $slot "\
+    config add pb_serdes_lane_rx_phys_zcnt_42=21;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_42=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_42=10;  \
+    config add pb_serdes_lane_rx_phys_tlth_42=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_42=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_43=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_43=4;  \
+    config add pb_serdes_lane_rx_phys_dfelth_43=22;  \
+    config add pb_serdes_lane_rx_phys_tlth_43=4;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_43=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_44=23;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_44=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_44=7;  \
+    config add pb_serdes_lane_rx_phys_tlth_44=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_44=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_45=22;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_45=1;  \
+    config add pb_serdes_lane_rx_phys_dfelth_45=18;  \
+    config add pb_serdes_lane_rx_phys_tlth_45=16;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_45=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_46=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_46=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_46=9;  \
+    config add pb_serdes_lane_rx_phys_tlth_46=3;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_46=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_47=22;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_47=1;  \
+    config add pb_serdes_lane_rx_phys_dfelth_47=9;  \
+    config add pb_serdes_lane_rx_phys_tlth_47=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_47=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_48=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_48=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_48=8;  \
+    config add pb_serdes_lane_rx_phys_tlth_48=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_48=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_49=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_49=3;  \
+    config add pb_serdes_lane_rx_phys_dfelth_49=12;  \
+    config add pb_serdes_lane_rx_phys_tlth_49=2;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_49=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_50=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_50=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_50=18;  \
+    config add pb_serdes_lane_rx_phys_tlth_50=11;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_50=1"
+if $board_type_GFA_BI_2 && $system_is_fe600_in_system && $slot "\
+    config add pb_serdes_lane_rx_phys_zcnt_51=23;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_51=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_51=7;  \
+    config add pb_serdes_lane_rx_phys_tlth_51=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_51=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_52=21;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_52=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_52=8;  \
+    config add pb_serdes_lane_rx_phys_tlth_52=2;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_52=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_53=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_53=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_53=12;  \
+    config add pb_serdes_lane_rx_phys_tlth_53=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_53=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_54=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_54=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_54=7;  \
+    config add pb_serdes_lane_rx_phys_tlth_54=3;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_54=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_55=23;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_55=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_55=12;  \
+    config add pb_serdes_lane_rx_phys_tlth_55=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_55=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_56=24;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_56=3;  \
+    config add pb_serdes_lane_rx_phys_dfelth_56=21;  \
+    config add pb_serdes_lane_rx_phys_tlth_56=16;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_56=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_57=23;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_57=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_57=8;  \
+    config add pb_serdes_lane_rx_phys_tlth_57=4;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_57=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_58=17;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_58=3;  \
+    config add pb_serdes_lane_rx_phys_dfelth_58=8;  \
+    config add pb_serdes_lane_rx_phys_tlth_58=1;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_58=1;  \
+    config add pb_serdes_lane_rx_phys_zcnt_59=21;  \
+    config add pb_serdes_lane_rx_phys_z1cnt_59=2;  \
+    config add pb_serdes_lane_rx_phys_dfelth_59=14;  \
+    config add pb_serdes_lane_rx_phys_tlth_59=12;  \
+    config add pb_serdes_lane_rx_phys_g1cnt_59=1"
+ 
+# DRAM pre-configurations according to config variables which defines
+# the dram type.
+
+#DDR3
+if $?dram_type_DDR3_SAMSUNG_K4B1G1646E_HCK0_1333 || \
+   $?dram_type_DDR3_SAMSUNG_K4B1G1646E_HCK0_1600 || \
+   $?dram_type_DDR3_MICRON_MT41J64M16_15E || \
+   $?dram_type_DDR3_MICRON_MT41J128M16HA_15E_2G "\
+    config add ext_ram_type=DDR3; \
+    config add ext_ram_columns=1024; \
+    config add ext_ram_banks=8" 
+if $?dram_type_DDR3_MICRON_MT41J128M16HA_15E_2G "\
+  config add ext_ram_total_size=3072"
+if $?dram_type_DDR3_SAMSUNG_K4B1G1646E_HCK0_1333 || \
+   $?dram_type_DDR3_SAMSUNG_K4B1G1646E_HCK0_1600 || \
+   $?dram_type_DDR3_MICRON_MT41J64M16_15E "\
+    config add ext_ram_total_size=1536"
+
+#GDDR3
+if $?dram_type_GDDR3_SAMSUNG_K4J52324QE \
+  "config add ext_ram_type=GDDR3" \
+  "config add ext_ram_columns=512" \
+  "config add ext_ram_banks=8" \
+  "config add ext_ram_total_size=384"
+
+#DDR2
+if $?dram_type_DDR2_MICRON_K4T51163QE_ZC_LF7 \
+  "config add ext_ram_type=DDR2" \
+  "config add ext_ram_columns=1024" \
+  "config add ext_ram_banks=4" \
+  "config add ext_ram_total_size=768"
+   
+if $?dram_type_DDR3_SAMSUNG_K4B1G1646E_HCK0_1600 \
+  "config add ext_ram_ap_bit_pos=10" \
+  "config add ext_ram_burst_size=32" \
+  "config add ext_ram_c_cas_latency=11" \
+  "config add ext_ram_c_wr_latency=8" \
+  "config add ext_ram_t_rc=48750" \
+  "config add ext_ram_t_rfc=110000" \
+  "config add ext_ram_t_ras=35000" \
+  "config add ext_ram_t_faw=40000" \
+  "config add ext_ram_t_rcd_rd=13750" \
+  "config add ext_ram_t_rcd_wr=13750" \
+  "config add ext_ram_t_rrd=7500" \
+  "config add ext_ram_t_ref=3900" \
+  "config add ext_ram_t_rp=13750" \
+  "config add ext_ram_t_wr=15000" \
+  "config add ext_ram_t_wtr=7500" \
+  "config add ext_ram_t_rtp=7500"
+
+if $?dram_type_DDR3_SAMSUNG_K4B1G1646E_HCK0_1333 \
+  "config add ext_ram_ap_bit_pos=10" \
+  "config add ext_ram_burst_size=32" \
+  "config add ext_ram_c_cas_latency=9" \
+  "config add ext_ram_c_wr_latency=8" \
+  "config add ext_ram_t_rc=50000" \
+  "config add ext_ram_t_rfc=110000" \
+  "config add ext_ram_t_ras=36666" \
+  "config add ext_ram_t_faw=45000" \
+  "config add ext_ram_t_rcd_rd=15000" \
+  "config add ext_ram_t_rcd_wr=15000" \
+  "config add ext_ram_t_rrd=8333" \
+  "config add ext_ram_t_ref=3900" \
+  "config add ext_ram_t_rp=15000" \
+  "config add ext_ram_t_wr=15000" \
+  "config add ext_ram_t_wtr=8333" \
+  "config add ext_ram_t_rtp=6666"
+
+if $?dram_type_DDR3_MICRON_MT41J64M16_15E || $?dram_type_DDR3_MICRON_MT41J128M16HA_15E_2G \
+  "config add ext_ram_ap_bit_pos=10" \
+  "config add ext_ram_burst_size=32" \
+  "config add ext_ram_c_cas_latency=9" \
+  "config add ext_ram_c_wr_latency=7" \
+  "config add ext_ram_t_rc=49500" \
+  "config add ext_ram_t_rfc=110000" \
+  "config add ext_ram_t_ras=36000" \
+  "config add ext_ram_t_faw=50000" \
+  "config add ext_ram_t_rcd_rd=13500" \
+  "config add ext_ram_t_rcd_wr=13500" \
+  "config add ext_ram_t_rrd=7500" \
+  "config add ext_ram_t_ref=3900c" \
+  "config add ext_ram_t_rp=13500" \
+  "config add ext_ram_t_wr=15000" \
+  "config add ext_ram_t_wtr=7500" \
+  "config add ext_ram_t_rtp=7500"
+
+# Samsung (K4J52324QE)
+# The following parameters correspond to BC-16 dash, and were tested in
+# dune's lab with BC-14 dash dram working in frequency of 533MHz.
+if $?dram_type_GDDR3_SAMSUNG_K4J52324QE \
+  "config add ext_ram_ap_bit_pos=8" \
+  "config add ext_ram_burst_size=16" \
+  "config add ext_ram_gddr3_mrs0_wr1=0x00000312" \
+  "config add ext_ram_gddr3_emr0_wr1=0x0000109d" \
+  "config add ext_ram_c_cas_latency=9" \
+  "config add ext_ram_c_wr_latency=1" \
+  "config add ext_ram_t_rc_clk=24" \
+  "config add ext_ram_t_rfc_clk=29" \
+  "config add ext_ram_t_ras_clk=16" \
+  "config add ext_ram_t_faw_clk=5" \
+  "config add ext_ram_t_rcd_rd_clk=9" \
+  "config add ext_ram_t_rcd_wr_clk=6" \
+  "config add ext_ram_t_rrd_clk=7" \
+  "config add ext_ram_t_ref=1450" \
+  "config add ext_ram_t_rp_clk=8" \
+  "config add ext_ram_t_wr_clk=8" \
+  "config add ext_ram_t_wtr_clk=4" \
+  "config add ext_ram_t_rtp_clk=4"
+
+if $?dram_type_DDR2_MICRON_K4T51163QE_ZC_LF7 \
+  "config add ext_ram_ap_bit_pos=10" \
+  "config add ext_ram_burst_size=16" \
+  "config add ext_ram_auto_mode=TRUE" \
+  "config add ext_ram_c_cas_latency=6" \
+  "config add ext_ram_c_wr_latency=5" \
+  "config add ext_ram_t_rc=60000" \
+  "config add ext_ram_t_rfc=105000" \
+  "config add ext_ram_t_ras=45000" \
+  "config add ext_ram_t_faw=45000" \
+  "config add ext_ram_t_rcd_rd=15000" \
+  "config add ext_ram_t_rcd_wr=15000" \
+  "config add ext_ram_t_rrd=10000" \
+  "config add ext_ram_t_ref=3900)" \
+  "config add ext_ram_t_rp=15000" \
+  "config add ext_ram_t_wr=15000" \
+  "config add ext_ram_t_wtr=7500" \
+  "config add ext_ram_t_rtp=7500"
+
+
+# If using elk, override relevant parameters:
+if $?pcp_elk "\
+  echo *** OVERRIDING DEFAULT CONFIG WITH ELK CONFIG ***; \
+  config combo_ref_clock=125000; \
+  config pb_serdes_qrtt_max_expected_rate_7=3750000; \
+  config pb_serdes_lane_rate_28=3750000; \
+  config pb_serdes_lane_rate_29=3750000; \
+  config pb_serdes_lane_rate_30=3750000; \
+  config pb_serdes_lane_rate_31=3750000; \
+  config add external_lookup_mal=14; \
+  config add spaui_ipg_dic_mode=MIN; \
+  config add spaui_ipg_size=1; \
+  config add spaui_crc_mode=32b; \
+  config add spaui_preamble_size=0; \
+  config add spaui_preamble_skip_sop=1; \
+  config add spaui_is_double_size_sop_even_only=1; \
+  config add spaui_link_partner_double_size_bus=1"
+
+if $?pcp_elk || $?pcp_oam || $?pcp_dma "\
+  config add streaming_if_multi_port_mode=1; \
+  config add streaming_if_discard_pkt_streaming=0; \
+  config add fabric_ftmh_outlif_extension=IF_MC" \
+else "\
+  config add streaming_if_multi_port_mode=0; \
+  config add streaming_if_discard_pkt_streaming=1;"
+
+# Run sweep pcp on real HW
+if !$?plisim && !$?warmboot "   \
+  sweep pcp"
+  
+# Set synts according to reference clocks
+expr $nif_ref_clock*1000; local synt_nif $?
+expr $combo_ref_clock*1000; local synt_combo $?
+expr $fabric_ref_clock*1000; local synt_fabric $?
+
+# Real HW: Take petra out of reset
+if !$?plisim && !$?warmboot " \
+  gfa_bi utils petra_reset 1; \
+  echo Configure synthesizers:; \
+  echo Fabric: $synt_fabric; gfa_bi utils synt_set 1 $synt_fabric $synt_over; \
+  echo Combo:  $synt_combo;  gfa_bi utils synt_set 2 $synt_combo $synt_over; \
+  echo Nif:    $synt_nif;    gfa_bi utils synt_set 3 $synt_nif $synt_over; \
+  echo Core:   $synt_core;   gfa_bi utils synt_set 4 $synt_core $synt_over; \
+  echo DDR:    $synt_ddr;    gfa_bi utils synt_set 5 $synt_ddr $synt_over; \
+  echo Phy:    $synt_phy;    gfa_bi utils synt_set 10 $synt_phy $synt_over; \
+  gfa_bi utils petra_reset 0"
+  
+dbm soc error
+dbm bcm error
+
+echo "$unit:init soc"
+init soc
+echo "$unit:init soc - Done"
+
+echo "$unit:init bcm"
+init bcm
+
+echo "$unit:init bcm - Done"
+
+if $?warmboot "\
+  echo 'Warmboot: init done'; \
+  echo 'dune.soc: Done.'; \
+  exit"
+
+# Real HW + non using sweep: Init phys
+if !$?plisim " \
+  gfa_bi utils phys"
+
+if !$?no_bcm && !$?diag_disable "\
+  init appl_dpp $slot $nof_devices $diag_cosq_disable;" \
+else "\
+  echo 'Skipping diag_init. In order to run traffic, extra configuration must be performed.'"
+
+# If running BCM library:
+# Start linkscan task and set port linkscan mode.
+if !$?no_bcm && !$?pcp_elk "\
+  linkscan 250000; \
+  linkscan spbm=xe"
+     
+# If using elk, configure  bsp:
+if $?pcp_elk "\
+  echo *** BSP ELK CONFIGURATIONS ***; \
+  gfa_bi elk_init;"
+  
+# If using pcp dma then init dma
+if !$?plisim && $?pcp_dma " \
+  echo *** PCP DMA CONFIGURATIONS ***; \
+  gfa_bi dma_init"
+
+#if $?diag_chassis && !$slot "rcload rc/negev_rpc_master.soc.assi" # Master on slot 0
+#if $?diag_chassis && $slot "rcload rc/negev_rpc_slave.soc.assi"   # Slave on slot 1
+
+echo "dune.soc: Done."
diff --git a/bal_release/3rdparty/bcm-sdk/rc/svk4/mk_bcm_node.sh b/bal_release/3rdparty/bcm-sdk/rc/svk4/mk_bcm_node.sh
new file mode 100755
index 0000000..80ce413
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/rc/svk4/mk_bcm_node.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+mknod /dev/linux-user-bde c 126 0
+mknod /dev/linux-kernel-bde c 127 0
+mknod /dev/linux-uk-proxy c 125 0
+  
diff --git a/bal_release/3rdparty/bcm-sdk/rc/svk4/qax.soc b/bal_release/3rdparty/bcm-sdk/rc/svk4/qax.soc
new file mode 100644
index 0000000..895ae81
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/rc/svk4/qax.soc
@@ -0,0 +1,128 @@
+#
+# $Id: qax.soc,v 1.90 2013/08/14 08:32:00 ninash Exp $
+#
+# $Copyright: (c) 2011 Broadcom Corporation
+# All Rights Reserved.$
+#
+
+# Load DRAM tuning properties from local File. RcLoad will not fail if file not found, and will not show errors of missing file.
+#der 0x40 4
+#exit
+
+debug info
+debug appl rcload warn
+debug appl symtab warn
+debug bcm rx,tx,link,attach warn
+debug soc tests warn
+debug soc rx,phy,schan,reg,socmem,dma,mem,miim,mii,intr,counter,ddr warn
+debug soc common err
+debug sys verinet warn
+debug soc physim warn
+
+if $?QAX \
+    'rcload bcm88470_board.soc'
+
+if $?QUX \
+    'rcload bcm88270_board.soc'
+
+# Load DRAM tuning properties from local File. RcLoad will not fail if file not found, and will not show errors of missing file.
+set RCError=off
+debug appl shell warn
+if $?QAX \
+    'rcload /home/negev/bcm88470_dram_tune.soc'
+if $?QUX \
+    'rcload /home/negev/bcm88270_dram_tune.soc'
+
+debug appl shell =
+set RCError=on
+
+set RCError=off
+rcload combo28_dram.soc
+set RCError=on
+
+#Set fabric connect mode as FE for multi FAP system
+if $?diag_chassis " \
+   config add fabric_connect_mode.BCM88470=FE"
+
+# Set modid:
+# If diag_chassis is enabled (two line cards), and 'slot' is defined (slot is defined only when
+# working without a management card - set modid to be 'slot'
+# Otherwise (single line card, or management card), set modid to be 0 for unit 0, and 1 for unit != 0
+if $?diag_chassis && $?slot "\
+  local modid $slot" \
+else "\
+  local modid $unit"
+expr $modid==1; if $? "local modid 2"
+
+if $?module_id " \
+  local modid $module_id"
+
+echo "$unit: modid=$modid"
+
+# Set base_modid:
+# Id base_module_id is set, then set base_modid to have base_module_id value.
+# Otherwise, set base_modid to be 0.
+if $?base_module_id " \
+  local base_modid $base_module_id" \
+else " \
+  local base_modid 0"
+
+expr $base_modid > 0
+if $? " \
+  echo '$unit: base_modid=$base_modid'"
+
+if $?diag_chassis " \
+  local nof_devices 2" \
+else "\
+  local nof_devices 1"
+
+if $?n_devices " \
+  local nof_devices $n_devices"
+
+expr $nof_devices > 1
+if $? " \
+  echo '$unit: nof_devices=$nof_devices'"
+
+if $?mng_cpu " \
+  echo '$unit:management card - polling is set on'; \
+  config add polled_irq_mode.BCM88675=1; \
+  config add schan_intr_enable.BCM88675=0; \
+  config add tdma_intr_enable.BCM88675=0; \
+  config add tslam_intr_enable.BCM88675=0; \
+  config add miim_intr_enable.BCM88675=0; "
+
+#Counters unavailable in cmodel
+if $?cmodel " \
+  config add counter_engine_sampling_interval=0;"
+
+#default values in a case which these parameters are not exist
+if !$?diag_cosq_disable "\
+  local diag_cosq_disable 0"
+if !$?warmboot "\
+  local warmboot 0"
+if !$?diag_disable "\
+  local diag_disable 0"
+if !$?diag_no_itmh_prog_mode "\
+  local diag_no_itmh_prog_mode 0"
+if !$?l2_mode "\
+  local l2_mode 0"
+
+#Disable interrupts in cmodel
+if $?cmodel "\
+  local no_intr 1" \
+else "\
+  local no_intr 0"
+
+if $?QUX "\
+    local no_elk 1" \
+else "\
+    local no_elk 0"
+
+INIT_DNX ModID=$modid NofDevices=$nof_devices CosqDisable=$diag_cosq_disable NoAppl=$diag_disable Warmboot=$warmboot NoRxLos=1 NoLinkscan=0 NoElkDevice=$no_elk NoElkAppl=0 NoItmhProgMode=$diag_no_itmh_prog_mode L2Mode=$l2_mode NoIntr=$no_intr
+
+#echo "performing force forward to sysport 1"
+#mod IHP_PINFO_LLR 0 256 DEFAULT_CPU_TRAP_CODE=200 DEFAULT_ACTION_PROFILE_FWD=7
+#mod IHB_FWD_ACT_PROFILE 200 1 FWD_ACT_DESTINATION=0x10001 FWD_ACT_DESTINATION_OVERWRITE=1
+#echo "performing credit flush from NIF to EGQ"
+#m NBIH_TX_EGRESS_CREDITS_DEBUG_PM TX_FLUSH_EGRESS_PORT_0_MLF_0_QMLF_N=1 TX_FLUSH_EGRESS_PORT_0_MLF_1_QMLF_N=1 TX_FLUSH_EGRESS_PORT_0_MLF_2_QMLF_N=1 TX_FLUSH_EGRESS_PORT_0_MLF_3_QMLF_N=1
+echo "qax.soc: Done."
diff --git a/bal_release/3rdparty/bcm-sdk/rc/svk4/rc.soc b/bal_release/3rdparty/bcm-sdk/rc/svk4/rc.soc
new file mode 100644
index 0000000..b38ed6f
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/rc/svk4/rc.soc
@@ -0,0 +1,1790 @@
+# $Id: rc.soc,v 1.192 2013/07/17 22:13:43 dkelley Exp $
+# $Copyright: (c) 1998-2001 Broadcom Corp.
+# All Rights Reserved.$
+#
+# Initialization RC (run commands) file
+#
+#       These are default commands that are read and executed by default
+#       when BCM boots up.  Typically this file is called rc.soc and resides
+#       in the flash filesystem, NVRAM, or disk.
+#
+# Board Configuration Setting
+#
+#       This file uses configuration properties to know on which board
+#       it is running.  Currently one of following settings must be made:
+#
+#       BCM95670K8          config add herc8=1
+#       BCM95690K24         config add draco_b2b=1
+#       BCM95690K24S        config add draco_stk=1
+#       BCM95690R24         config add galahad=1
+#       BCM95690R24S        config add merlin=1
+#       BCM95690R48S        config add lancelot=1
+#       BCM95691K12         config add draco_k12=1
+#       White Knight        config add white_knight=1 (not shipping)
+#       Black Knight        config add black_knight=1 (not shipping)
+#       BCM95673K2S         config add twolynx=1
+#       BCM95673R8          config add herculynx=1
+#       BCM95673R24S        config add lynxalittle=1
+#       BCM95673R48S        config add lynxalot=1
+#       BCM95695P24SX_10    config add guenevere=1
+#       BCM95650K24         config add magnum=1 (automatic for 5650L)
+#       BCM95675            config add herc8_15=1
+#       BCM95650R24         config add tuc24_ref=1
+#       BCM95695P48LM       config add lm48p=1
+#       BCM95695P48LM-10    config add lm48p_B=1
+#       BCM956504P48LM-10   config add lm48p_C=1
+#       BCM956504P48LM-20   config add lm48p_C=1
+#       BCM956504P48LM-50   config add lm48p_D=1
+#       BCM956504P48POEREF  config add fbpoe=1
+#       BCM956504P24REF P0  config add fb24=1
+#       BCM956504P24    P0  config add fb24=1
+#       BCM956102P48        config add felix48=1
+#       BCM953300P24REF     config add mirage24=1
+#       BCM956800K20C       config add bradley_1g=1
+#       BCM956700K16        config add humv=1
+#       BCM956800K20        config add bradley=1
+#       BCM956580K16        config add goldwing=1
+#       BCM956314P24REF     config add bcm56314p24ref=1
+#       BCM956024P48REF     config add BCM956024P48REF=1
+#       BCM956224P48REF     config add BCM956224P48REF=1
+#       BCM956224R50T       config add BCM956224R50T=1
+#       BCM956024R50T       config add BCM956024R50T=1
+#       BCM56820K24XG       config add BCM56820K24XG=1
+#       BCM953314R24GS      config add BCM953314R24GS=1
+#       BCM953314K24        config add BCM953314K24=1
+#       BCM956820R24XG      config add BCM956820R24XG=1
+#       BCM956160R          config add bcm956160r=1
+
+if $?BCM56146_A0 \
+    'local BCM56146 1'
+
+if $?BCM56147_A0 \
+    'local BCM56147 1'
+
+
+if $?1 "echo rc: arguments not supported; exit"
+if !$?unit "echo rc: no current unit; exit"
+
+echo "rc: unit $unit device $devname"
+local quiet no
+local echo echo
+local rcdone \$rc$unit
+if !"expr $rcdone + 0" "local echo noecho; local quiet yes"
+
+# Set convenience local variables
+
+# simulation related
+#if $?plisim \
+#       "local no_bcm 1"
+if $?quickturn || $?plisim \
+	"local simulator 1"
+
+if $?simulator \
+    'echo -n "Chip init starts at: ";date'
+
+# board related
+if $?galahad \
+	"local draco_b2b 1"
+if $?black_knight || $?white_knight || $?merlin \
+	"local draco_herc4 1"
+
+#if $?QUX_A0 \
+#    'echo blablabla;der 0x40 4 ; exit'
+
+if $?FLAIR_A0 \
+    'echo blablabla;der 0x40 4 ; exit'
+
+if $?BCM88750_A0 || $?BCM88750_B0 || $?BCM88753_A0 || $?BCM88753_B0 || $?BCM88752_A0 || $?BCM88752_B0 ||  $?BCM88755_B0 || $?BCM88754_A0 || $?BCM88770_A1 || $?BCM88773_A1 || $?BCM88774_A1 || $?BCM88775_A1 || $?BCM88776_A1 || $?BCM88777_A1 || $?BCM88950_A0 || $?BCM88950_A1 || $?BCM88953_A1 || $?BCM88954_A1 || $?BCM88955_A1 || $?BCM88956_A1 || $?BCM88952_A0 || $?BCM88952_A1 || $?BCM88772_A1 \
+    'rcload dfe.soc ; exit'
+
+if $?BCM88790_A0 \
+    'rcload dnxf.soc ; exit'
+
+if $?ARAD_A0 || $?ARAD_B0 || $?ARAD_B1 || $?ARADPLUS_A0 || $?BCM88650_A0 || $?BCM88650_B0 || $?BCM88650_B1 || $?BCM88652_A0 || $?BCM88652_B0 || $?BCM88350_B1 || $?BCM88351_B1 || \
+   $?BCM88450_B1 || $?BCM88451_B1 || $?BCM88550_B1 || $?BCM88551_B1 || $?BCM88552_B1 || $?BCM88651_B1 || $?BCM88654_B1 || $?BCM88660_A0 || $?BCM88360_A0 || $?BCM88361_A0 || $?BCM88363_A0 ||\
+   $?BCM88460_A0 || $?BCM88461_A0 || $?BCM88560_A0 || $?BCM88561_A0 || $?BCM88562_A0 || $?BCM88661_A0 || $?BCM88664_A0  \
+    'rcload arad.soc ; exit'
+
+if $?BCM83207_A0 \
+    'rcload samar.soc ; exit'
+if $?BCM83208_A0 \
+    'rcload sinai.soc ; exit'
+
+if $?QAX_A0 || $?BCM88470_A0 || $?BCM88471_A0 || $?BCM88473_A0 || $?BCM88474_A0 || $?BCM88474H_A0 || $?BCM88476_A0 || $?BCM88477_A0 || \
+   $?QAX_B0 || $?BCM88470_B0 || $?BCM88471_B0 || $?BCM88473_B0 || $?BCM88474_B0 || $?BCM88474H_B0 || $?BCM88476_B0 || $?BCM88477_B0 \
+    'setenv QAX 1'
+    
+if $?QUX_A0 || $?BCM88270_A0 \
+    'setenv QUX 1'
+
+if $?JERICHO_A0 ||  $?BCM88670_A0 || $?BCM88671_A0 || $?BCM88671M_A0 || $?BCM88672_A0 || $?BCM88673_A0 || $?BCM88674_A0 || $?BCM88675_A0 || $?BCM88675M_A0 || $?BCM88676_A0 || $?BCM88676M_A0 || $?BCM88677_A0 || $?BCM88678_A0 || $?BCM88679_A0 || \
+   $?JERICHO_A1 ||  $?BCM88670_A1 || $?BCM88671_A1 || $?BCM88671M_A1 || $?BCM88672_A1 || $?BCM88673_A1 || $?BCM88674_A1 || $?BCM88675_A1 || $?BCM88675M_A1 || $?BCM88676_A1 || $?BCM88676M_A1 || $?BCM88677_A1 || $?BCM88678_A1 || $?BCM88679_A1 || \
+   $?QMX_A0     ||  $?BCM88370_A0 || $?BCM88371_A0 || $?BCM88371M_A0 || $?BCM88375_A0 || $?BCM88376_A0 || $?BCM88376M_A0 || $?BCM88377_A0 || $?BCM88378_A0 || $?BCM88379_A0 || \
+   $?QMX_A1     ||  $?BCM88370_A1 || $?BCM88371_A1 || $?BCM88371M_A1 || $?BCM88375_A1 || $?BCM88376_A1 || $?BCM88376M_A1 || $?BCM88377_A1 || $?BCM88378_A1 || $?BCM88379_A1 || \
+   $?JERICHO_B0 ||  $?BCM88670_B0 || $?BCM88671_B0 || $?BCM88671M_B0 || $?BCM88672_B0 || $?BCM88673_B0 || $?BCM88674_B0 || $?BCM88675_B0 || $?BCM88675M_B0 || $?BCM88676_B0 || $?BCM88676M_B0 || $?BCM88677_B0 || $?BCM88678_B0 || $?BCM88679_B0 || $?BCM88680_A0 || \
+   $?QMX_B0     ||  $?BCM88370_B0 || $?BCM88371_B0 || $?BCM88371M_B0 || $?BCM88375_B0 || $?BCM88376_B0 || $?BCM88376M_B0 || $?BCM88377_B0 || $?BCM88378_B0 || $?BCM88379_B0 || $?BCM88379_A1 || \
+   $?JERPLUS    ||  $?BCM88680_A0 ||  $?BCM88681_A0 ||  $?BCM88682_A0 || $?BCM88683_A0 ||  $?BCM88380_A0 ||  $?BCM88381_A0 \
+    'rcload jer.soc ; exit'
+
+if $?BCM88690_A0  \
+    'rcload dnx.soc ; exit'
+
+if $?QAX || $?QUX\
+    'rcload qax.soc ;  exit'
+
+
+if $?BCM88202_A0 || $?ARDON_A0 || $?BCM88202_A1 || $?ARDON_A1 || $?BCM88202_A2 || $?ARDON_A2\
+    'rcload atmf.soc ; exit'
+
+if $?ACP \
+    'exit'
+
+if $?BCM88690_A0\
+    'exit'
+      
+if !"expr $pcidev + 0 == 0x5650" \
+	"local magnum 1"
+if $?drac || $?drac15 \
+	"local drac_any 1"
+if $?lynx || $?lynx15 \
+	"local lynx_any 1"
+if $?tucana || $?magnum \
+	"local tucana_any 1"
+if $?herc || $?herc15 \
+	"local herc_any 1"
+if $?firebolt || $?firebolt2 || $?helix || \
+   $?felix || $?helix15 || $?felix15 || $?raptor || $?raven || $?hawkeye\
+	"local firebolt_any 1"
+if !"expr $pcidev + 0 == 0xb501" \
+	"local firebolt_10x4 1"
+if $?easyrider \
+	"local easyrider_any 1"
+if !"expr $pcidev + 0 == 0xb602" \
+	"local easyrider_1x1 1"
+if $?bradley || $?humv || $?goldwing \
+	"local bradley_any 1"
+if $?drac_any || $?lynx_any || $?tucana_any \
+	"local xgs12_switch 1"
+if $?firebolt_any || $?easyrider_any || $?bradley_any \
+	"local xgs3_switch 1"
+if $?xgs12_switch || $?xgs3_switch \
+	"local xgs_switch 1"
+if $?herc_any \
+	"local xgs_fabric 1"
+if $?xgs_fabric || $?xgs_switch \
+	"local xgs 1"
+if !$?xgs \
+	"local strata 1"
+if $?strata && !$?gsl \
+	"local PBMP_ALL 0x0bffffff"
+if $?strata && $?gsl \
+	"local PBMP_ALL 0x080000ff"
+if $?BCM56214_A0 || $?BCM56014_A0 || $?BCM56215_A0 || \
+   $?BCM56214_A1 || $?BCM56014_A1 || $?BCM56215_A1 && \
+   !$?BCM956024P48REF \
+	"local rap24_ref 1"
+
+if $?BCM5655_A0 || $?BCM5655_B0 \
+        "local tucana_nohg 1"
+
+if $?BCM956024P48REF || $?BCM956224P48REF || $?BCM956024R50T || \
+   $?BCM956224R50T \
+        "local raven_eb_48p 1"
+
+if $?BCM953314R24GS \
+        "local hawkeye_p24 1"
+
+if $?BCM953314K24 \
+        "local hawkeye_k24 1"
+
+if $?firebolt_any && $?lm48p || $?lm48p_D \
+        "config add lmfb48=1"
+
+# Set software's wait for S-Channel response to 3 seconds for QuickTurn
+# (Recommend at least 10 seconds if the ARL is 100% busy with inserts.)
+if $?quickturn	"stimeout 3000000"
+if $?plisim	"stimeout 60000000"
+
+# Direct phy led programming: 5464 activity led becomes link/activity
+if $?drac_any && $?lancelot || $?lynxalot || $?guenevere \
+	"config add phy_led_ctrl=0x18"
+
+# Shutdown threads if system is already running
+if $?triumph3 \
+	"ibodSync off"
+counter off
+linkscan off
+if $?feature_arl_hashed && !$?simulator \
+        "l2mode off"
+if $?feature_ces && $?BCM56440_A0 \
+        "ces off"
+
+# Test on-chip memory before initializing
+#if !$?simulator "init soc; bist l3 arl cbp"
+init soc
+
+# Initialize miscellaneous chip registers
+init misc
+
+# Initialize external TCAM if necessary
+# NOTE : tcam is initialized during "init misc" unless 
+#        tcam_reset_toggle = 1 is configured
+if "expr $rcdone + 0" && !"expr $tcam_reset_toggle + 0" \
+        "dispatch attach 0 esw 0"
+if !"expr $tcam_reset_toggle + 0" "muxsel 0; muxsel 0x80"
+if !"expr $tcam_reset_toggle + 0" "init tcam; $echo rc: TCAM initialized"
+
+# Initialize the StrataSwitch MMU registers
+init mmu
+if $?katana2 \
+   kt2config.soc
+
+
+# Uncomment to turn off Single-Bit Error reporting on 5670
+#if $?herc "m mmu_intcntl pp_sbe_en=0"
+
+# Initialize Cell Free Address Pool
+# NOTE: this should NOT be done unless chip is known to have bad CFAP
+# memory entries that need to be mapped out.
+if $?cfap_tests "$echo rc: Initializing CFAP; cfapinit"
+
+$echo rc: MMU initialized
+
+#
+# Load uKernel
+#
+
+# Pick default FW names if not set already by config
+if !$?fw_core_0 \
+    'local fw_core_0 ${fw_prefix}_0_bfd_bhh.srec; \
+     if $?greyhound || $?hurricane2 || $?hurricane3 "local fw_core_0 ${fw_prefix}_0_ptpfull.srec"; \
+     if $?caladan3 "local fw_core_0 ${fw_prefix}_0.srec"; \
+     if $?helix4 && !$?feature_bhh "local fw_core_0 ${fw_prefix}_0_bfd.srec"; \
+     if $?helix4 && $?feature_bhh "local fw_core_0 ${fw_prefix}_0_bfd_bhh.srec"; \
+     if $?tomahawk && !$?feature_bhh "local fw_core_0 ${fw_prefix}_0_bfd.srec"; \
+     if $?tomahawk_plus && !$?feature_bhh "local fw_core_0 ${fw_prefix}_0_bfd.srec"; \
+     if $?trident2plus && !$?feature_bhh "local fw_core_0 ${fw_prefix}_0_bfd.srec"; \
+    '
+
+if !$?fw_core_1 \
+   'local fw_core_1 ${fw_prefix}_1_ptpfull.srec; \
+    if $?caladan3 "local fw_core_1 ${fw_prefix}_1_bs.srec"; \
+   '
+
+if !$?fw_core_2 \
+   "local fw_core_2 ${fw_prefix}_2_eth_lmdm.srec"
+
+# Load the firmwares
+if $?feature_cmicm && !$?rcpu_only && !$ihost_mode && !$?feature_iproc \
+    "mcsload 0 ${fw_core_0} InitMCS=true; \
+     mcsload 1 ${fw_core_1};"
+
+if $?hurricane2 \
+   "mcsload 0 ${fw_core_0} InitMCS=true;"
+
+if $?feature_iproc && !$?hurricane2 && !$?hurricane3 && !$?rcpu_only && !$?feature_uc_mhost && !$ihost_mode\
+    "mcsload 0 ${fw_core_0} InitMCS=true TwoStage=true TwoStageAddr=0x60000000;\
+     mcsload 1 ${fw_core_1} TwoStage=true TwoStageAddr=0x6002c000;"
+
+if $?feature_iproc && !$?rcpu_only && $?feature_uc_mhost && $?num_ucs\
+    'if !"expr $num_ucs > 0" "mcsload 0 ${fw_core_0} InitMCS=true"; \
+     if !"expr $num_ucs > 1" "mcsload 1 ${fw_core_1}"; \
+     if !"expr $num_ucs > 2" "mcsload 2 ${fw_core_2}";'
+
+#
+# Init CLI and BCM API
+#
+# This must be done after the raw register writes to avoid having state
+# clobbered.  NOTE: Tables are cleared by "init bcm" below.  If
+# table modifications are required, put them after "init bcm".  Some
+# registers might also be affected.
+#
+
+if !$?no_bcm \
+	"init bcm; \
+	 $echo rc: BCM driver initialized"
+
+if $?no_bcm \
+	"$echo rc: *** NOT initializing BCM driver ***"
+
+if $?no_bcm && $?strata \
+    'write vtable 0 1 VLAN_TAG=0,PORT_BITMAP=0,UT_PORT_BITMAP=0; \
+     insert vtable VLAN_TAG=1,PORT_BITMAP=$PBMP_ALL,UT_PORT_BITMAP=$PBMP_ALL; \
+     local pv \
+         VLAN_TAG=1,SP_ST=3,PORT_BITMAP=$PBMP_ALL,UT_PORT_BITMAP=$PBMP_ALL; \
+	 write ptable 0 32 PTYPE=0; \
+	 if !$?gsl "write ptable 0 24 $pv,PTYPE=1"; \
+	 if !$?gsl "write ptable 24 2 $pv,PTYPE=2"; \
+	 if $?gsl  "write ptable 0 8 $pv,PTYPE=2"; \
+	 write ptable 27 1 $pv,PTYPE=3; \
+     local pv'
+
+# Turn on mirroring of hardware ARL operations into software ARL table.
+if $?feature_arl_sorted \
+	"arlmode intr_dma; \
+	 $echo rc: ARL DMA shadowing enabled"
+
+if $?feature_arl_hashed && !$?simulator && !$?rcpu_only \
+	"l2mode interval=3000000; \
+	 $echo rc: L2 Table shadowing enabled"
+
+# If running BCM library, start linkscan task and set port modes
+
+if !$?no_bcm && !$?rcpu_only \
+	"linkscan 250000; \
+	 port fe,ge linkscan=on autoneg=on \
+		speed=0 fullduplex=true txpause=true rxpause=true; \
+	 port st linkscan=on txpause=false rxpause=false; \
+         port xe,ce linkscan=on autoneg=off \
+                speed=0 fullduplex=true txpause=true rxpause=true; \
+         port hg linkscan=on fullduplex=true txpause=false rxpause=false; \
+	 $echo rc: Port modes initialized"
+
+if !$?no_bcm && $?rcpu_only \
+	"linkscan 250000; \
+	 port e linkscan=on; \
+	 port st linkscan=on; \
+     port xe linkscan=on; \
+	 $echo rc: Port modes initialized"
+
+if !$?no_bcm && $?shadow \
+     "port il linkscan=on; \
+	  $echo rc: Interlaken Port mode initialized"
+
+# Selectively re-enable Auto Negotiation based on config port_force_an_list.
+#if $?port_force_an_list \
+#    "port $port_force_an_list autoneg=on"
+
+# No spanning tree is running, so put ports all in the forwarding state
+# stp support not available for shadow device.
+
+if !$?no_bcm && !$?shadow \
+	"stg stp 1 all forward"
+
+# Start counter task unless already started by "init bcm" above.
+if $?plisim "local dma false"
+if !$?plisim "local dma true"
+if $?device_eb_vli "local dma false"
+if $?no_bcm && !$?rcpu_only\
+	"counter Interval=1000 Pbm=all Dma=$dma; \
+	 $echo rc: Counter collection enabled"
+if $?rcpu_only \
+	"counter Interval=2000000 Pbm=all Dma=false; \
+	 $echo rc: Counter collection enabled"
+
+# Resynchronize the saved values kept by the 'show counter' command.
+if !$?simulator \
+    "counter sync"
+
+# By default, dump data of packets that go to CPU.
+if !$?testinit \
+	"pw report +raw"
+
+# Default LED processor program for various SDKs and reference designs.
+# Source code can be found in $SDK/led/examples.
+
+if !$?p48 "local ledcode '\
+ E0 28 60 7F 67 2F 67 6B 06 7F 80 D2 1A 74 01 12 \
+ 7E 85 05 D2 0F 71 19 52 00 12 7D 85 05 D2 1F 71 \
+ 23 52 00 12 7C 85 05 D2 05 71 2D 52 00 3A 68 32 \
+ 00 97 75 3B 12 A0 FE 7F 02 0A 50 32 01 97 75 47 \
+ 12 BA FE 7F 02 0A 50 12 BA FE 7F 95 75 59 85 12 \
+ A0 FE 7F 95 75 A8 85 77 9A 12 A0 FE 7F 95 75 63 \
+ 85 77 A1 16 7C DA 02 71 A1 77 A8 32 05 97 71 76 \
+ 06 7D D2 01 71 9A 06 7F 67 93 75 9A 32 02 97 71 \
+ 9A 32 03 97 71 A8 32 04 97 75 A1 06 7E D2 07 71 \
+ A1 77 A8 12 80 F8 15 1A 00 57 32 0E 87 32 0E 87 \
+ 57 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 57'"		# sdk5605.hex
+
+if $?p48 "local ledcode '\
+ E0 28 60 7F 67 43 67 3C 67 35 67 2F 06 7F 80 D2 \
+ 18 74 01 28 60 7F 67 9B 67 89 67 BF 67 83 67 3C \
+ 67 73 67 68 67 5D 06 7F 80 D2 1A 74 13 3A 70 67 \
+ AD 71 C3 77 BF 32 03 97 71 C3 77 BF 32 05 97 71 \
+ C3 77 BF 12 BA FE 7F 32 01 97 75 4F 02 06 50 32 \
+ 00 97 75 57 02 06 50 95 75 C3 85 77 BF 67 AD 75 \
+ BF 32 04 97 71 C3 77 BF 67 AD 75 BF 32 03 97 71 \
+ C3 77 BF 67 AD 75 BF 32 03 97 71 BF 32 04 97 71 \
+ BF 77 C3 67 B6 71 C3 77 BF 12 A0 FE 7F 32 00 97 \
+ 75 95 02 06 50 95 75 C3 85 77 BF 12 BA FE 7F 32 \
+ 01 97 75 A7 02 06 50 95 75 C3 85 77 BF 06 7F 12 \
+ 80 F8 15 1A 00 57 06 7F 12 80 F8 15 1A 07 57 32 \
+ 0F 87 57 32 0E 87 57'"					# p48.hex
+
+if $?herc && !$?black_knight "local ledcode '\
+ 02 01 67 36 29 32 08 D7 87 32 07 D7 87 32 01 D7 \
+ 87 32 00 D7 87 80 D2 09 74 02 86 7F 06 7F C2 07 \
+ 74 24 86 7E 16 7E CA 07 E0 17 0D 12 08 98 27 D7 \
+ 87 91 74 2D 3A 28 10 DA 07 75 3E FA 02 57 EA 06 \
+ 57'"							# sdk5670.hex
+
+if $?herc && $?black_knight "local ledcode '\
+ 2A 03 32 08 D7 87 32 07 D7 87 32 01 D7 87 32 00 \
+ D7 87 2A 06 32 08 D7 87 32 07 D7 87 32 01 D7 87 \
+ 32 00 D7 87 3A 08'"					# knigget.hex
+
+if $?drac_any "local ledcode '\
+ E0 28 60 C3 67 4E 67 8A 06 C3 80 D2 0C 74 01 28 \
+ 60 C3 32 00 D7 87 32 01 D7 87 32 07 D7 87 32 08 \
+ D7 87 32 0F 87 32 0F 87 32 0F 87 32 0F 87 12 C2 \
+ 85 05 D2 0F 71 38 52 00 12 C1 85 05 D2 1F 71 42 \
+ 52 00 12 C0 85 05 D2 05 71 4C 52 00 3A 38 32 00 \
+ 97 75 5A 12 A0 FE C3 02 0A 50 32 01 97 75 66 12 \
+ AD FE C3 02 0A 50 12 AD FE C3 95 75 78 85 12 A0 \
+ FE C3 95 75 C0 85 77 B9 12 A0 FE C3 95 75 82 85 \
+ 77 C7 16 C0 DA 02 71 C7 77 C0 32 05 97 71 9A 32 \
+ 02 97 71 B9 06 C1 D2 01 71 B9 06 C3 67 B2 75 B9 \
+ 32 03 97 71 C0 32 04 97 75 C7 06 C2 D2 07 71 C7 \
+ 77 C0 12 80 F8 15 1A 00 57 32 0E 87 32 0E 87 57 \
+ 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 57'"		# sdk5690.hex
+
+if $?draco_k12 "local ledcode '\
+ 02 0B A2 01 28 A2 01 60 C3 67 32 67 6E 06 C3 90 \
+ 75 02 12 C2 85 05 D2 0F 71 1C 52 00 12 C1 85 05 \
+ D2 1F 71 26 52 00 12 C0 85 05 D2 05 71 30 52 00 \
+ 3A 30 32 00 97 75 3E 12 A0 FE C3 02 0A 50 32 01 \
+ 97 75 4A 12 AC FE C3 02 0A 50 12 AC FE C3 95 75 \
+ 5C 85 12 A0 FE C3 95 75 A6 85 77 9F 12 A0 FE C3 \
+ 95 75 66 85 77 AD 16 C0 DA 02 71 AD 77 A6 32 05 \
+ 97 71 7E 32 02 97 71 9F 06 C1 D2 01 71 9F 06 C3 \
+ 67 96 75 9F 32 03 97 71 A6 32 04 97 75 AD 06 C2 \
+ D2 07 71 AD 77 A6 12 80 A2 01 F8 15 1A 00 57 32 \
+ 0E 87 32 0E 87 57 32 0E 87 32 0F 87 57 32 0F 87 \
+ 32 0E 87 57'"						# k12-5690.hex
+
+if $?herc && $?white_knight "local ledcode '\
+ 2A 03 67 0A 2A 06 67 0A 3A 08 32 08 D7 87 32 07 \
+ D7 87 32 01 D7 87 32 00 D7 87 57'"			# wk5670.hex
+
+if $?herc && $?merlin "local ledcode '\
+ 2A 03 67 0A 2A 06 67 0A 3A 08 32 08 D7 87 32 00 \
+ D7 87 32 01 D7 87 32 07 D7 87 57'"			# merlin5670.hex
+
+if $?herc && $?lancelot "local ledcode '\
+ 2A 05 67 12 2A 06 67 12 2A 03 67 12 2A 04 67 12 \
+ 3A 10 32 08 D7 87 32 00 D7 87 32 01 D7 87 32 07 \
+ D7 87 57'"						# lancelot.hex
+
+if $?xgs_fabric && $?guenevere "local ledcode '\
+ 2A 04 67 0A 2A 05 67 0A 3A 04 32 07 D7 87 32 00 \
+ 32 01 B7 D7 87 57'"                                    # guenevere5670.hex
+
+if $?drac_any && $?white_knight "local ledcode '\
+ E0 28 60 C3 67 2f 67 6B 06 C3 80 D2 0C 74 01 12 \
+ C2 85 05 D2 0F 71 19 52 00 12 C1 85 05 D2 1F 71 \
+ 23 52 00 12 C0 85 05 D2 05 71 2D 52 00 3A 30 32 \
+ 00 97 75 3B 12 A0 FE C3 02 0A 50 32 01 97 75 47 \
+ 12 AC FE C3 02 0A 50 12 AC FE C3 95 75 59 85 12 \
+ A0 FE C3 95 75 A8 85 77 9A 12 A0 FE C3 95 75 63 \
+ 85 77 A1 16 C0 DA 02 71 A1 77 A8 32 05 97 71 7B \
+ 32 02 97 71 9A 06 C1 D2 01 71 9A 06 C3 67 93 75 \
+ 9A 32 03 97 71 A8 32 04 97 75 A1 06 C2 D2 07 71 \
+ A1 77 A8 12 80 F8 15 1A 00 57 32 0E 87 32 0E 87 \
+ 57 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 57'"		# wk5690.hex
+
+if $?drac_any && $?merlin "local ledcode '\
+ E0 28 60 C3 67 2F 67 6B 06 C3 80 D2 0C 74 01 12 \
+ C2 85 05 D2 0F 71 19 52 00 12 C1 85 05 D2 1F 71 \
+ 23 52 00 12 C0 85 05 D2 05 71 2D 52 00 3A 30 32 \
+ 00 97 75 3B 12 A0 FE C3 02 0A 50 32 01 97 75 47 \
+ 12 AC FE C3 02 0A 50 12 AC FE C3 95 75 59 85 12 \
+ A0 FE C3 95 75 A8 85 77 9A 12 A0 FE C3 95 75 63 \
+ 85 77 A1 16 C0 DA 02 71 A1 77 A8 32 05 97 71 7B \
+ 32 02 97 71 9A 06 C1 D2 01 71 9A 06 C3 67 93 75 \
+ 9A 32 03 97 71 A8 32 04 97 75 A1 06 C2 D2 07 71 \
+ A1 77 A8 12 80 F8 15 1A 00 57 32 0E 87 32 0E 87 \
+ 57 32 0F 87 32 0E 87 57 32 0E 87 32 0F 87 57'"		# merlin5690.hex
+
+if $?drac_any && $?galahad "local ledcode '\
+ E0 28 60 C3 67 2F 67 6B 06 C3 80 D2 0C 74 01 12 \
+ C2 85 05 D2 0F 71 19 52 00 12 C1 85 05 D2 1F 71 \
+ 23 52 00 12 C0 85 05 D2 05 71 2D 52 00 3A 30 32 \
+ 00 97 75 3B 12 A0 FE C3 02 0A 50 32 01 97 75 47 \
+ 12 AC FE C3 02 0A 50 12 AC FE C3 95 75 59 85 12 \
+ A0 FE C3 95 75 A8 85 77 9A 12 A0 FE C3 95 75 63 \
+ 85 77 A1 16 C0 DA 02 71 A1 77 A8 32 05 97 71 7B \
+ 32 02 97 71 9A 06 C1 D2 01 71 9A 06 C3 67 93 75 \
+ 9A 32 03 97 71 A8 32 04 97 75 A1 06 C2 D2 07 71 \
+ A1 77 A8 12 80 F8 15 1A 00 57 32 0E 87 32 0E 87 \
+ 57 32 0F 87 32 0E 87 57 32 0E 87 32 0F 87 57'"		# galahad.hex
+
+if $?drac_any && $?lm "local ledcode '\
+E0 28 60 C3 67 2D 06 C3 80 D2 0C 74 01 12 C2 85 \
+05 D2 0F 71 17 52 00 12 C1 85 05 D2 1F 71 21 52 \
+00 12 C0 85 05 D2 05 71 2B 52 00 3A 18 32 00 97 \
+75 39 12 A0 FE C3 02 0A 50 32 01 97 75 45 12 AC \
+FE C3 02 0A 50 12 AC FE C3 95 75 5F 85 12 A0 FE \
+C3 95 71 5C 16 C0 DA 02 71 A6 77 B4 85 77 77 12 \
+A0 FE C3 95 75 6F 85 16 C0 DA 02 71 A6 77 AD 16 \
+C0 DA 02 71 AD 77 B4 32 05 97 71 82 06 C1 D2 01 \
+71 A6 06 C3 67 9F 75 A6 32 02 97 71 A6 32 03 97 \
+71 B4 32 04 97 75 AD 06 C2 D2 07 71 AD 77 B4 12 \
+80 F8 15 1A 00 57 32 0E 87 32 0E 87 57 32 0E 87 \
+32 0F 87 57 32 0F 87 32 0E 87 57'"      # lm5690.hex
+
+if $?twolynx "local ledcode '\
+ 2A 01 67 0A 2A 00 67 0A 3A 08 32 08 D7 87 32 00 \
+ D7 87 32 01 D7 87 32 07 D7 87 57'"                 # twolynx.hex
+
+if $?lynx_any && $?herculynx || $?lynxalot || $?lm || $?guenevere \
+	"local ledcode '\
+12 C0 85 05 D2 03 71 0A 52 00 2A 00 67 10 3A 04 \
+32 08 D7 87 06 C0 D2 01 71 22 32 0F 87 32 0F 87 \
+77 2A 32 00 D7 87 32 01 D7 87 32 07 D7 87 57'"      # herculynx.hex
+
+if $?tucana && !$?magnum "local ledcode '\
+ E0 67 23 D2 18 74 01 02 20 67 23 D2 38 74 09 02 \
+ 18 67 23 D2 1C 74 11 E9 02 80 45 80 81 DA 0D 74 \
+ 1A 3A 68 28 60 E3 67 4A 67 36 06 E4 30 87 06 E5 \
+ 30 87 06 E3 80 57 32 00 97 71 45 32 01 97 71 45 \
+ 02 0F 60 E5 57 02 0E 60 E5 57 06 E3 12 A0 F8 15 \
+ 1A 00 75 59 02 0E 60 E4 57 02 0F 60 E4 57'"        # sdk5665.hex
+
+if $?magnum && !$?tuc24_ref && !$?BCM5650_C0 "local ledcode '\
+ E0 28 60 FC 67 5A 67 9C 06 FA 67 DA 06 FB 67 DA \
+ 06 FC 80 D2 1C 74 01 12 FD 85 05 D2 0F 71 21 52 \
+ 00 12 FE 85 05 D2 1F 71 2B 52 00 12 FF 85 05 D2 \
+ 05 71 35 52 00 E9 05 98 98 98 98 C2 0F 60 F9 05 \
+ 88 88 88 88 C2 F0 B6 F9 50 81 DA 0C 74 36 E9 02 \
+ 80 45 80 81 DA 0E 74 51 3A 70 32 00 97 75 66 12 \
+ C0 FE FC 02 0A 50 32 01 97 75 72 12 DC FE FC 02 \
+ 0A 50 12 DC FE FC 95 75 86 85 12 C0 FE FC 95 02 \
+ FA 75 D7 85 77 D1 12 C0 FE FC 95 75 92 85 02 FA \
+ 77 D4 16 FF DA 02 02 FA 71 D4 77 D7 32 05 97 71 \
+ A9 06 FE D2 01 02 FB 71 D1 06 FC 67 CA 02 FB 75 \
+ D1 32 02 97 71 D1 32 03 97 71 D7 32 04 97 75 D4 \
+ 06 FD D2 07 02 FB 71 D4 77 D7 12 A0 F8 15 1A 00 \
+ 57 42 00 57 42 01 57 42 02 57 D2 02 74 E3 32 0F \
+ 87 77 E6 32 0E 87 D2 01 74 EE 32 0F 87 57 32 0E \
+ 87 57'"                                            # sdk5665.hex
+
+if $?magnum && !$?tuc24_ref && $?BCM5650_C0 "local ledcode '\
+ E0 60 FB D2 18 75 09 A2 01 60 FC 28 67 37 67 73 \
+ 06 FB 80 D2 1C 74 01 12 FD 85 05 D2 0F 71 21 52 \
+ 00 12 FE 85 05 D2 1F 71 2B 52 00 12 FF 85 05 D2 \
+ 05 71 35 52 00 3A 70 32 00 97 75 43 12 C0 FE FC \
+ 02 0A 50 32 01 97 75 4F 12 DC FE FC 02 0A 50 12 \
+ DC FE FC 95 75 61 85 12 C0 FE FC 95 75 B0 85 77 \
+ A2 12 C0 FE FC 95 75 6B 85 77 A9 16 FF DA 02 71 \
+ A9 77 B0 32 05 97 71 7E 06 FE D2 01 71 A2 06 FC \
+ 67 9B 75 A2 32 02 97 71 A2 32 03 97 71 B0 32 04 \
+ 97 75 A9 06 FD D2 07 71 A9 77 B0 12 A0 F8 15 1A \
+ 00 57 32 0F 87 32 0F 87 57 32 0E 87 32 0F 87 57 \
+ 32 0F 87 32 0E 87 57'"                            # magnum_sdk.hex
+
+if $?tuc24_ref && $?BCM5650_C0 "local ledcode '\
+ E0 60 FB D2 18 71 10 60 FC 28 67 D0 67 C0 77 19 \
+ A2 01 60 FC 28 67 40 67 7C 06 FB 80 D2 1C 74 01 \
+ 12 FD 85 05 D2 0F 71 2A 52 00 12 FE 85 05 D2 1F \
+ 71 34 52 00 12 FF 85 05 D2 05 71 3E 52 00 3A 68 \
+ 32 00 97 75 4C 12 C0 FE FC 02 0A 50 32 01 97 75 \
+ 58 12 DC FE FC 02 0A 50 12 DC FE FC 95 75 6A 85 \
+ 12 C0 FE FC 95 75 B9 85 77 AB 12 C0 FE FC 95 75 \
+ 74 85 77 B2 16 FF DA 02 71 B2 77 B9 32 05 97 71 \
+ 87 06 FE D2 01 71 AB 06 FC 67 A4 75 AB 32 02 97 \
+ 71 AB 32 03 97 71 B9 32 04 97 75 B2 06 FD D2 07 \
+ 71 B2 77 B9 12 A0 F8 15 1A 00 57 32 0F 87 32 0F \
+ 87 57 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 57 \
+ 02 0E 32 00 97 71 CD 32 01 97 71 CD 80 30 87 57 \
+ 06 FC 12 A0 F8 15 1A 00 02 0F 75 DD 90 30 87 57'"  # magnum.hex
+
+if $?tuc24_ref && !$?BCM5650_C0 "local ledcode '\
+ E0 28 60 FC D2 18 71 0E 67 E9 67 D9 77 1A 67 5A \
+ 67 9C 06 FA 67 D0 06 FB 67 D0 06 FC 80 D2 1C 74 \
+ 01 12 FE 85 05 D2 1F 71 2B 52 00 12 FF 85 05 D2 \
+ 05 71 35 52 00 E9 05 98 98 98 98 C2 0F 60 F9 05 \
+ 88 88 88 88 C2 F0 B6 F9 50 81 DA 0C 74 36 E9 02 \
+ 80 45 80 81 DA 0D 74 51 3A 68 32 00 97 75 66 12 \
+ C0 FE FC 02 0A 50 32 01 97 75 72 12 DC FE FC 02 \
+ 0A 50 12 DC FE FC 95 75 86 85 12 C0 FE FC 95 02 \
+ FA 75 CD 85 77 C7 12 C0 FE FC 95 75 92 85 02 FA \
+ 77 CA 16 FF DA 02 02 FA 71 CA 77 CD 32 05 97 71 \
+ A9 06 FE D2 01 02 FB 71 C7 06 FC 67 C0 02 FB 75 \
+ C7 32 02 97 71 C7 32 03 97 71 CD 32 04 97 75 CA \
+ 12 A0 F8 15 1A 00 57 42 FF 57 42 FE 57 42 EF 57 \
+ 30 87 98 98 98 98 30 87 57 02 0E 32 00 97 71 E6 \
+ 32 01 97 71 E6 80 30 87 57 06 FC 12 A0 F8 15 1A \
+ 00 02 0F 75 F6 90 30 87 57'"                       # tuc24_ref.hex
+
+if $?herc8_15 "local ledcode '\
+ 02 01 28 32 08 D7 87 32 07 D7 87 32 01 D7 87 32 \
+ 00 D7 87 80 D2 09 74 02 86 7F 06 7F C2 07 74 22 \
+ 86 7E 16 7E CA 07 E0 17 0D 12 08 98 27 D7 87 91 \
+ 74 2B 3A 28'"                                      # sdk5675.hex
+
+if $?drac_any && $?lm "local ledcode '\
+ E0 28 60 C3 67 2D 06 C3 80 D2 0C 74 01 12 C2 85 \
+ 05 D2 0F 71 17 52 00 12 C1 85 05 D2 1F 71 21 52 \
+ 00 12 C0 85 05 D2 05 71 2B 52 00 3A 18 32 00 97 \
+ 75 39 12 A0 FE C3 02 0A 50 32 01 97 75 45 12 AC \
+ FE C3 02 0A 50 12 AC FE C3 95 75 5F 85 12 A0 FE \
+ C3 95 71 5C 16 C0 DA 02 71 A6 77 B4 85 77 77 12 \
+ A0 FE C3 95 75 6F 85 16 C0 DA 02 71 A6 77 AD 16 \
+ C0 DA 02 71 AD 77 B4 32 05 97 71 82 06 C1 D2 01 \
+ 71 A6 06 C3 67 9F 75 A6 32 02 97 71 A6 32 03 97 \
+ 71 B4 32 04 97 75 AD 06 C2 D2 07 71 AD 77 B4 12 \
+ 80 F8 15 1A 00 57 32 0E 87 32 0E 87 57 32 0E 87 \
+ 32 0F 87 57 32 0F 87 32 0E 87 57 00 00 00 00 00'"  # lm5690.hex
+
+if $?drac_any && $?lm48p "local ledcode '\
+ E0 28 60 C3 67 7C 06 C3 80 28 60 C3 67 7C 67 40 \
+ 06 C3 90 28 60 C3 67 40 06 C3 80 80 D2 0C 74 01 \
+ 12 C2 85 05 D2 0F 71 2A 52 00 12 C1 85 05 D2 1F \
+ 71 34 52 00 12 C0 85 05 D2 05 71 3E 52 00 3A 30 \
+ 32 00 97 75 4C 12 A0 FE C3 02 0A 50 32 01 97 75 \
+ 58 12 AC FE C3 02 0A 50 12 AC FE C3 95 75 6A 85 \
+ 12 A0 FE C3 95 75 B9 85 77 AB 12 A0 FE C3 95 75 \
+ 74 85 77 B2 16 C0 DA 02 71 B2 77 B9 32 05 97 71 \
+ 8C 32 02 97 71 AB 06 C1 D2 01 71 AB 06 C3 67 A4 \
+ 75 AB 32 03 97 71 B9 32 04 97 75 B2 06 C2 D2 07 \
+ 71 B2 77 B9 12 80 F8 15 1A 00 57 32 0E 87 32 0E \
+ 87 57 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 57'"  # lm48p5695.hex
+
+if $?drac_any && $?lm48p_B "local ledcode '\
+ E0 28 60 C3 67 79 06 C3 67 3D 06 C3 80 28 60 C3 \
+ 67 3D 06 C3 67 79 06 C3 80 D2 0C 74 01 12 C2 85 \
+ 05 D2 0F 71 27 52 00 12 C1 85 05 D2 1F 71 31 52 \
+ 00 12 C0 85 05 D2 05 71 3B 52 00 3A 30 32 00 97 \
+ 75 49 12 A0 FE C3 02 0A 50 32 01 97 75 55 12 AC \
+ FE C3 02 0A 50 12 AC FE C3 95 75 67 85 12 A0 FE \
+ C3 95 75 B6 85 77 A8 12 A0 FE C3 95 75 71 85 77 \
+ AF 16 C0 DA 02 71 AF 77 B6 32 05 97 71 89 32 02 \
+ 97 71 A8 06 C1 D2 01 71 A8 06 C3 67 A1 75 A8 32 \
+ 03 97 71 B6 32 04 97 75 AF 06 C2 D2 07 71 AF 77 \
+ B6 12 80 F8 15 1A 00 57 32 0E 87 32 0E 87 57 32 \
+ 0E 87 32 0F 87 57 32 0F 87 32 0E 87 57'"  # lm48p5695_10.hex
+
+if $?firebolt_any "local ledcode '\
+ E0 28 60 E3 67 55 67 91 06 E3 80 28 60 E3 67 91 \
+ 67 55 06 E3 80 D2 18 74 01 28 60 E3 67 B9 75 26 \
+ 67 CE 67 55 77 2E 32 0E 87 32 08 87 67 C0 06 E3 \
+ 80 D2 1C 74 19 12 E2 85 05 D2 0F 71 3F 52 00 12 \
+ E1 85 05 D2 1F 71 49 52 00 12 E0 85 05 D2 05 71 \
+ 53 52 00 3A 70 32 00 97 75 61 12 A0 FE E3 02 0A \
+ 50 32 01 97 75 6D 12 BC FE E3 02 0A 50 12 BC FE \
+ E3 95 75 7F 85 12 A0 FE E3 95 75 CE 85 77 C0 12 \
+ A0 FE E3 95 75 89 85 77 C7 16 E0 DA 02 71 C7 77 \
+ CE 32 05 97 71 A1 32 02 97 71 C0 06 E1 D2 01 71 \
+ C0 06 E3 67 B9 75 C0 32 03 97 71 CE 32 04 97 75 \
+ C7 06 E2 D2 07 71 C7 77 CE 12 80 F8 15 1A 00 57 \
+ 32 0E 87 32 0E 87 57 32 0E 87 32 0F 87 57 32 0F \
+ 87 32 0E 87 57'"  # sdk56504.hex
+
+#Led program for new rev of FB SDK and Ref design
+if $?firebolt_any && !$?fb24 "local ledcode '\
+ E0 28 60 E3 67 4B 67 87 06 E3 80 D2 18 74 01 28 \
+ 60 E3 67 AF 75 1C 67 C4 67 4B 77 24 32 0E 87 32 \
+ 08 87 67 B6 06 E3 80 D2 1C 74 0F 12 E2 85 05 D2 \
+ 0F 71 35 52 00 12 E1 85 05 D2 1F 71 3F 52 00 12 \
+ E0 85 05 D2 05 71 49 52 00 3A 70 32 00 97 75 57 \
+ 12 A0 FE E3 02 0A 50 32 01 97 75 63 12 BC FE E3 \
+ 02 0A 50 12 BC FE E3 95 75 75 85 12 A0 FE E3 95 \
+ 75 C4 85 77 B6 12 A0 FE E3 95 75 7F 85 77 BD 16 \
+ E0 DA 02 71 BD 77 C4 32 05 97 71 97 32 02 97 71 \
+ B6 06 E1 D2 01 71 B6 06 E3 67 AF 75 B6 32 03 97 \
+ 71 C4 32 04 97 75 BD 06 E2 D2 07 71 BD 77 C4 12 \
+ 80 F8 15 1A 00 57 32 0E 87 32 0E 87 57 32 0E 87 \
+ 32 0F 87 57 32 0F 87 32 0E 87 57'" # sdk56504ref.hex
+
+#Override Default Firebolt LED program for Line Module
+if $?lm && $?firebolt_any "local ledcode '\
+ E0 28 60 E3 67 79 06 E3 67 3D 06 E3 80 28 60 E3 \
+ 67 3D 06 E3 67 79 06 E3 80 D2 18 74 01 12 E2 85 \
+ 05 D2 0F 71 27 52 00 12 E1 85 05 D2 1F 71 31 52 \
+ 00 12 E0 85 05 D2 05 71 3B 52 00 3A 60 32 00 97 \
+ 75 49 12 A0 FE E3 02 0A 50 32 01 97 75 55 12 BC \
+ FE E3 02 0A 50 12 BC FE E3 95 75 67 85 12 A0 FE \
+ E3 95 75 B6 85 77 A8 12 A0 FE E3 95 75 71 85 77 \
+ AF 16 E0 DA 02 71 AF 77 B6 32 05 97 71 89 32 02 \
+ 97 71 A8 06 E1 D2 01 71 A8 06 E3 67 A1 75 A8 32 \
+ 03 97 71 B6 32 04 97 75 AF 06 E2 D2 07 71 AF 77 \
+ B6 12 80 F8 15 1A 00 57 32 0E 87 32 0E 87 57 32 \
+ 0E 87 32 0F 87 57 32 0F 87 32 0E 87 57'" # lm48p56504.hex
+
+#Override Default Firebolt LED program for Line Module -50 version
+if $?lm && $?lm48p_D && $?firebolt_any "local ledcode '\
+ E0 28 60 E3 67 6D 06 E3 67 31 06 E3 80 D2 18 74 \
+ 01 12 E2 85 05 D2 0F 71 1B 52 00 12 E1 85 05 D2 \
+ 1F 71 25 52 00 12 E0 85 05 D2 05 71 2F 52 00 3A \
+ 60 32 00 97 75 3D 12 A0 FE E3 02 0A 50 32 01 97 \
+ 75 49 12 BC FE E3 02 0A 50 12 BC FE E3 95 75 5B \
+ 85 12 A0 FE E3 95 75 AA 85 77 9C 12 A0 FE E3 95 \
+ 75 65 85 77 A3 16 E0 DA 02 71 A3 77 AA 32 05 97 \
+ 71 7D 32 02 97 71 9C 06 E1 D2 01 71 9C 06 E3 67 \
+ 95 75 9C 32 03 97 71 AA 32 04 97 75 A3 06 E2 D2 \
+ 07 71 A3 77 AA 12 80 F8 15 1A 00 57 32 0E 87 32 \
+ 0E 87 57 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 \
+ 57'" # lm48p56504_50.hex
+
+if $?lm && $?firebolt_10x4 "local ledcode '\
+ 02 18 28 32 07 67 1E 75 0A D7 87 32 01 D7 87 32 \
+ 00 D7 87 32 08 D7 87 80 D2 1C 74 02 3A 0C 12 80 \
+ F8 15 1A 00 57 '" # lm12pcx456501.hex
+
+if $?fbpoe && $?firebolt_any "local ledcode '\
+ E0 28 60 E3 67 85 67 49 06 E3 80 D2 18 74 01 28 \
+ 60 E3 67 AD 75 1A 67 C2 77 20 32 0E 87 32 08 87 \
+ 67 49 06 E3 80 D2 1A 74 0F 12 E2 85 05 D2 0F 71 \
+ 33 52 00 12 E1 85 05 D2 1F 71 3D 52 00 12 E0 85 \
+ 05 D2 05 71 47 52 00 3A 68 32 00 97 75 55 12 A0 \
+ FE E3 02 0A 50 32 01 97 75 61 12 BA FE E3 02 0A \
+ 50 12 BA FE E3 95 75 73 85 12 A0 FE E3 95 75 C2 \
+ 85 77 B4 12 A0 FE E3 95 75 7D 85 77 BB 16 E0 DA \
+ 02 71 BB 77 C2 32 05 97 71 95 32 02 97 71 B4 06 \
+ E1 D2 01 71 B4 06 E3 67 AD 75 B4 32 03 97 71 C2 \
+ 32 04 97 75 BB 06 E2 D2 07 71 BB 77 C2 12 80 F8 \
+ 15 1A 00 57 32 0E 87 32 0E 87 57 32 0E 87 32 0F \
+ 87 57 32 0F 87 32 0E 87 57'" # poe48p56504.hex
+
+#Override Default Firebolt LED program for felix
+if $?felix || $?felix15 "local ledcode '\
+ E0 28 60 E3 67 6B 67 A7 06 E3 80 D2 18 74 01 02 \
+ 18 28 60 E3 67 49 02 19 28 60 E3 67 49 32 0E 87 \
+ 32 0E 87 32 0E 87 32 0E 87 12 E2 85 05 D2 0F 71 \
+ 33 52 00 12 E1 85 05 D2 1F 71 3D 52 00 12 E0 85 \
+ 05 D2 05 71 47 52 00 3A 68 67 CF 75 52 32 0E 87 \
+ 77 55 32 0F 87 32 00 97 75 5E 32 0E 87 57 32 01 \
+ 97 75 67 32 0E 87 57 32 0F 87 57 32 00 97 75 77 \
+ 12 A0 FE E3 02 0A 50 32 01 97 75 83 12 BC FE E3 \
+ 02 0A 50 12 BC FE E3 95 75 95 85 12 A0 FE E3 95 \
+ 75 E4 85 77 D6 12 A0 FE E3 95 75 9F 85 77 DD 16 \
+ E0 DA 02 71 DD 77 E4 32 05 97 71 B7 32 02 97 71 \
+ D6 06 E1 D2 01 71 D6 06 E3 67 CF 75 D6 32 03 97 \
+ 71 E4 32 04 97 75 DD 06 E2 D2 07 71 DD 77 E4 12 \
+ 80 F8 15 1A 00 57 32 0E 87 32 0E 87 57 32 0E 87 \
+ 32 0F 87 57 32 0E 87 32 0F 87 57'"  # sdk56102.hex
+
+#Override Default Felix LED program for felix48
+if $?felix48 && $?felix || $?felix15 "local ledcode '\
+ E0 28 60 E3 67 6B 67 A7 06 E3 80 D2 18 74 01 02 \
+ 18 28 60 E3 67 49 02 19 28 60 E3 67 49 32 0E 87 \
+ 32 0E 87 32 0E 87 32 0E 87 12 E2 85 05 D2 0F 71 \
+ 33 52 00 12 E1 85 05 D2 1F 71 3D 52 00 12 E0 85 \
+ 05 D2 05 71 47 52 00 3A 68 67 CF 75 52 32 0E 87 \
+ 77 55 32 0F 87 32 00 97 75 5E 32 0E 87 57 32 01 \
+ 97 75 67 32 0E 87 57 32 0F 87 57 32 00 97 75 77 \
+ 12 A0 FE E3 02 0A 50 32 01 97 75 83 12 BC FE E3 \
+ 02 0A 50 12 BC FE E3 95 75 95 85 12 A0 FE E3 95 \
+ 75 E4 85 77 D6 12 A0 FE E3 95 75 9F 85 77 DD 16 \
+ E0 DA 02 71 DD 77 E4 32 05 97 71 B7 32 02 97 71 \
+ D6 06 E1 D2 01 71 D6 06 E3 67 CF 75 D6 32 03 97 \
+ 71 E4 32 04 97 75 DD 06 E2 D2 07 71 DD 77 E4 12 \
+ 80 F8 15 1A 00 57 32 0E 87 32 0E 87 57 32 0E 87 \
+ 32 0F 87 57 32 0F 87 32 0E 87 57'"  # felix48.hex
+
+if $?easyrider_any "local ledcode '\
+ E0 28 60 E3 67 59 67 95 06 E3 80 28 60 E3 67 95 \
+ 67 59 06 E3 80 D2 0C 74 01 28 60 E3 67 BD 75 26 \
+ 67 D2 67 59 77 2E 32 0E 87 32 08 87 67 C4 06 E3 \
+ 80 D2 0D 74 19 12 E2 85 05 D2 0F 71 3F 52 00 12 \
+ E1 85 05 D2 1F 71 49 52 00 12 E0 85 05 D2 05 71 \
+ 53 52 00 67 C4 67 C4 3A 38 32 00 97 75 65 12 A0 \
+ FE E3 02 0A 50 32 01 97 75 71 12 AD FE E3 02 0A \
+ 50 12 AD FE E3 95 75 83 85 12 A0 FE E3 95 75 D2 \
+ 85 77 C4 12 A0 FE E3 95 75 8D 85 77 CB 16 E0 DA \
+ 02 71 CB 77 D2 32 05 97 71 A5 32 02 97 71 C4 06 \
+ E1 D2 01 71 C4 06 E3 67 BD 75 C4 32 03 97 71 D2 \
+ 32 04 97 75 CB 06 E2 D2 07 71 CB 77 D2 12 80 F8 \
+ 15 1A 00 57 32 0E 87 32 0E 87 57 32 0E 87 32 0F \
+ 87 57 32 0F 87 32 0E 87 57'"   # sdk56601.hex
+
+#Override Default Easyrider LED program for 56602
+if $?easyrider_1x1 "local ledcode '\
+ E0 60 E1 67 7C 67 7C 06 E1 80 D2 0C 74 01 02 0C \
+ 28 60 E1 67 75 75 1D 67 8A 67 39 77 25 32 0E 87 \
+ 32 08 87 67 7C 06 E1 D2 00 02 00 74 10 12 E0 85 \
+ 05 D2 05 71 37 52 00 3A 38 32 00 97 75 45 12 A0 \
+ FE E1 02 0A 50 32 01 97 75 51 12 AD FE E1 02 0A \
+ 50 12 AD FE E1 95 75 63 85 12 A0 FE E1 95 75 8A \
+ 85 77 7C 12 A0 FE E1 95 75 6D 85 77 83 16 E0 DA \
+ 02 71 83 77 8A 12 80 F8 15 1A 00 57 32 0E 87 32 \
+ 0E 87 57 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 \
+ 57'"   # sdk56602.hex
+
+#Override Default  LED program for 53300
+if $?mirage24 "local ledcode '\
+ E0 28 60 E3 67 6B 67 2F 06 E3 80 D2 18 74 01 12 \
+ E2 85 05 D2 0F 71 19 52 00 12 E1 85 05 D2 1F 71 \
+ 23 52 00 12 E0 85 05 D2 05 71 2D 52 00 3A 30 32 \
+ 00 97 75 3B 12 A0 FE E3 02 0A 50 32 01 97 75 47 \
+ 12 BC FE E3 02 0A 50 12 BC FE E3 95 75 59 85 12 \
+ A0 FE E3 95 75 A2 85 77 9A 12 A0 FE E3 95 75 63 \
+ 85 77 9E 16 E0 DA 02 71 9E 77 A2 32 05 97 71 7B \
+ 32 02 97 71 9A 06 E1 D2 01 71 9A 06 E3 67 93 75 \
+ 9A 32 03 97 71 A2 32 04 97 75 9E 06 E2 D2 07 71 \
+ 9E 77 A2 12 80 F8 15 1A 00 57 32 0F 87 57 32 0E \
+ 87 57 32 0E 87 57'"  # sdk53300.hex
+
+#Override Default LED program for 56314
+if $?bcm56314p24ref "local ledcode '\
+ E0 28 60 E3 67 79 67 3D 06 E3 80 D2 18 74 01 28 \
+ 60 E3 67 79 67 A8 06 E3 80 D2 1C 74 0F 12 E2 85 \
+ 05 D2 0F 71 27 52 00 12 E1 85 05 D2 1F 71 31 52 \
+ 00 12 E0 85 05 D2 05 71 3B 52 00 3A 38 32 00 97 \
+ 75 49 12 A0 FE E3 02 0A 50 32 01 97 75 55 12 BC \
+ FE E3 02 0A 50 12 BC FE E3 95 75 67 85 12 A0 FE \
+ E3 95 75 B0 85 77 A8 12 A0 FE E3 95 75 71 85 77 \
+ AC 16 E0 DA 02 71 AC 77 B0 32 05 97 71 89 32 02 \
+ 97 71 A8 06 E1 D2 01 71 A8 06 E3 67 A1 75 A8 32 \
+ 03 97 71 B0 32 04 97 75 AC 06 E2 D2 07 71 AC 77 \
+ B0 12 80 F8 15 1A 00 57 32 0F 87 57 32 0E 87 57 \
+ 32 0E 87 57'"  # bcm956314p24ref.hex
+
+if $?bradley "local ledcode '\
+ E0 28 60 F2 67 1B 06 F2 80 D2 14 74 01 86 F3 12 \
+ F0 85 05 D2 05 71 19 52 00 3A 28 32 00 97 75 27 \
+ 12 A8 FE F2 02 0A 50 32 01 97 75 33 12 BC FE F2 \
+ 02 0A 50 12 BC FE F2 95 75 45 85 12 A8 FE F2 95 \
+ 75 91 85 77 57 12 A8 FE F2 95 75 4F 85 77 8A 16 \
+ F0 DA 02 71 8A 77 91 06 F2 12 94 F8 15 02 02 C1 \
+ 74 6E 02 04 C1 74 6E 02 08 C1 74 6E 77 74 C6 F3 \
+ 74 91 77 8A 06 F2 67 7C 75 83 77 91 12 80 F8 15 \
+ 1A 00 57 32 0E 87 32 0E 87 57 32 0E 87 32 0F 87 \
+ 57 32 0F 87 32 0E 87 57'"     # sdk56800.hex
+
+if $?humv "local ledcode '\
+ E0 28 60 F2 67 21 06 F2 80 D2 08 74 0F F2 02 D2 \
+ 12 74 01 86 F3 12 F0 85 05 D2 05 71 1F 52 00 3A \
+ 20 32 00 97 75 2D 12 A8 FE F2 02 0A 50 32 01 97 \
+ 75 39 12 BA FE F2 02 0A 50 12 BA FE F2 95 75 4B \
+ 85 12 A8 FE F2 95 75 97 85 77 5D 12 A8 FE F2 95 \
+ 75 55 85 77 90 16 F0 DA 02 71 90 77 97 06 F2 12 \
+ 94 F8 15 02 02 C1 74 74 02 04 C1 74 74 02 08 C1 \
+ 74 74 77 7A C6 F3 74 97 77 90 06 F2 67 82 75 89 \
+ 77 97 12 80 F8 15 1A 00 57 32 0E 87 32 0E 87 57 \
+ 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 57'" # sdk56700.hex
+
+if $?bradley_1g "local ledcode '\
+ E0 28 60 E3 67 2F 67 6B 06 E3 80 D2 14 74 01 12 \
+ E2 85 05 D2 0F 71 19 52 00 12 E1 85 05 D2 1F 71 \
+ 23 52 00 12 E0 85 05 D2 05 71 2D 52 00 3A 50 32 \
+ 00 97 75 3B 12 A0 FE E3 02 0A 50 32 01 97 75 47 \
+ 12 B4 FE E3 02 0A 50 12 B4 FE E3 95 75 59 85 12 \
+ A0 FE E3 95 75 A8 85 77 9A 12 A0 FE E3 95 75 63 \
+ 85 77 A1 16 E0 DA 02 71 A1 77 A8 32 05 97 71 7B \
+ 32 02 97 71 9A 06 E1 D2 01 71 9A 06 E3 67 93 75 \
+ 9A 32 03 97 71 A8 32 04 97 75 A1 06 E2 D2 07 71 \
+ A1 77 A8 12 80 F8 15 1A 00 57 32 0E 87 32 0E 87 \
+ 57 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 57 '"  # sdk56800c.hex
+
+if $?goldwing "local ledcode '\
+ E0 28 60 F3 D2 10 75 0E 67 3B 67 94 77 12 67 94 \
+ 67 3B 06 F3 80 D2 14 74 01 86 F4 12 F2 85 05 D2 \
+ 0F 71 25 52 00 12 F1 85 05 D2 1F 71 2F 52 00 12 \
+ F0 85 05 D2 05 71 39 52 00 3A 50 32 00 97 75 47 \
+ 12 A8 FE F3 02 0A 50 32 01 97 75 53 12 BC FE F3 \
+ 02 0A 50 12 BC FE F3 95 75 65 85 12 A8 FE F3 95 \
+ 75 C0 85 77 77 12 A8 FE F3 95 75 6F 85 77 B9 16 \
+ F0 DA 02 71 B9 77 C0 06 F3 12 94 F8 15 02 02 C1 \
+ 74 8E 02 04 C1 74 8E 02 08 C1 74 8E 77 B2 C6 F4 \
+ 74 C0 77 B9 06 F3 67 AB 75 B2 32 04 75 B2 32 03 \
+ 97 71 C0 06 F2 D2 07 71 B9 77 C0 12 80 F8 15 1A \
+ 00 57 32 0E 87 32 0E 87 57 32 0E 87 32 0F 87 57 \
+ 32 0F 87 32 0E 87 57 '"                          # sdk56580.hex
+
+if $?humv && $?lm "local ledcode '\
+ 02 04 28 D2 08 74 0A F2 02 28 32 07 67 29 75 11 \
+ D7 87 60 E4 67 30 06 E4 60 E4 67 4C 06 E4 32 08 \
+ D7 87 80 D2 12 74 02 3A 30 12 80 F8 15 1A 00 57 \
+ 06 E4 12 94 F8 15 02 10 C1 70 42 12 D2 FE E4 02 \
+ 0A 50 12 D2 FE E4 95 75 6D 85 77 68 06 E4 12 94 \
+ F8 15 02 20 C1 70 5E 12 C0 FE E4 02 0A 50 12 C0 \
+ FE E4 95 75 6D 85 77 68 32 0E D7 87 57 32 0F D7 \
+ 87 57 '"                                         # lm12p56802.hex
+
+
+if $?raptor "local ledcode '\
+ 02 06 28 60 FF 67 64 67 93 06 FF 80 D2 36 74 02 \
+ 02 04 28 60 FF 67 BB 75 1E 32 0E 87 77 21 32 0F \
+ 87 67 7D 06 FF 80 D2 06 74 12 02 01 28 60 FF 67 \
+ BB 75 38 32 0E 87 77 3B 32 0F 87 67 7D 06 FF 80 \
+ D2 03 74 2C 12 FE 85 05 D2 0F 71 4E 52 00 12 FD \
+ 85 05 D2 1F 71 58 52 00 12 FC 85 05 D2 05 71 62 \
+ 52 00 3A C8 32 01 97 75 76 32 00 97 75 C9 16 FC \
+ DA 02 71 C9 77 D0 32 00 97 75 C2 77 D0 32 00 97 \
+ 75 86 32 0E 87 57 32 01 97 75 8F 32 0E 87 57 32 \
+ 0F 87 57 32 05 97 71 A3 32 02 97 71 C2 06 FD D2 \
+ 01 71 C2 06 FF 67 BB 75 C2 32 03 97 71 D0 32 04 \
+ 97 75 C9 06 FE D2 07 71 C9 77 D0 12 A0 F8 15 1A \
+ 00 57 32 0E 87 32 0E 87 57 32 0E 87 32 0F 87 57 \
+ 32 0F 87 32 0E 87 57 00 00 00 00 00 00 00 00 00'" # sdk56018.hex
+
+if $?raptor && $?rap24_ref "local ledcode '\
+ 02 06 60 E1 67 48 67 31 06 E1 80 D2 1E 71 02 02 \
+ 05 60 E1 67 48 67 31 06 E1 90 D2 03 74 11 02 02 \
+ 60 E1 67 48 67 31 06 E1 90 D2 00 74 20 86 E0 3A \
+ 38 06 E1 67 50 75 57 28 32 00 32 01 B7 97 75 57 \
+ 16 E0 CA 05 74 5B 77 57 06 E1 67 50 75 57 77 5B \
+ 12 A0 F8 15 1A 00 57 32 0F 87 57 32 0E 87 57 00'" # sdk56214.hex
+
+if $?raven_eb_48p "local ledcode '\
+ 02 06 28 60 C3 67 30 67 6C 06 C3 80 D2 1E 74 02 \
+ 12 C2 85 05 D2 0F 71 1A 52 00 12 C1 85 05 D2 1F \
+ 71 24 52 00 12 C0 85 05 D2 05 71 2E 52 00 3A 60 \
+ 32 00 97 75 3C 12 C0 FE C3 02 0A 50 32 01 97 75 \
+ 48 12 E0 FE C3 02 0A 50 12 E0 FE C3 95 75 5A 85 \
+ 12 C0 FE C3 95 75 A9 85 77 9B 12 C0 FE C3 95 75 \
+ 64 85 77 A2 16 C0 DA 02 71 A2 77 A9 32 05 97 71 \
+ 7C 32 02 97 71 9B 06 C1 D2 01 71 9B 06 C3 67 94 \
+ 75 9B 32 03 97 71 A9 32 04 97 75 A2 06 C2 D2 07 \
+ 71 A2 77 A9 12 A0 F8 15 1A 00 57 32 0E 87 32 0E \
+ 87 57 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 57'" #bcm956024p48ref.hex
+
+if $?BCM956024R50T "local ledcode '\
+ 02 06 28 60 C3 67 30 67 6C 06 C3 80 D2 1E 74 02 \
+ 12 C2 85 05 D2 0F 71 1A 52 00 12 C1 85 05 D2 1F \
+ 71 24 52 00 12 C0 85 05 D2 05 71 2E 52 00 3A 60 \
+ 32 00 97 75 3C 12 C0 FE C3 02 0A 50 32 01 97 75 \
+ 48 12 E0 FE C3 02 0A 50 12 E0 FE C3 95 75 5A 85 \
+ 12 C0 FE C3 95 75 A9 85 77 9B 12 C0 FE C3 95 75 \
+ 64 85 77 A2 16 C0 DA 02 71 A2 77 A9 32 05 97 75 \
+ 7C 32 02 97 71 9B 06 C1 D2 01 71 9B 06 C3 67 94 \
+ 75 9B 32 03 97 71 A9 32 04 97 75 A2 06 C2 D2 07 \
+ 71 A2 77 A9 12 A0 F8 15 1A 00 57 32 0E 87 32 0E \
+ 87 57 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 57'" #bcm956024r50t.hex
+
+if $?scorpion || $?conqueror "local ledcode '\
+ 02 18 28 60 E1 67 12 06 E1 90 D2 00 74 02 86 E0 \
+ 3A 18 67 2D 75 34 28 32 00 32 01 B7 97 75 38 16 \
+ E0 CA 05 74 38 77 34 67 2D 75 34 77 38 12 A0 F8 \
+ 15 1A 00 57 32 0F 87 57 32 0E 87 57 00 00 00 00 \
+ 00 00 00'" #sdk56820.hex
+
+if $?scorpion && $?BCM956820R24XG "local ledcode '\
+ 02 01 28 67 D0 02 02 28 67 D6 67 D0 02 01 28 67 \
+ D6 02 04 28 67 D0 02 03 28 67 D6 67 D0 02 04 28 \
+ 67 D6 02 05 28 67 D0 02 06 28 67 D6 67 D0 02 05 \
+ 28 67 D6 02 07 28 67 D0 02 08 28 67 D6 67 D0 02 \
+ 07 28 67 D6 02 09 28 67 D0 02 0A 28 67 D6 67 D0 \
+ 02 09 28 67 D6 02 0C 28 67 D0 02 0B 28 67 D6 67 \
+ D0 02 0C 28 67 D6 02 0D 28 67 D0 02 0E 28 67 D6 \
+ 67 D0 02 0D 28 67 D6 02 0F 28 67 D0 02 10 28 67 \
+ D6 67 D0 02 0F 28 67 D6 02 11 28 67 D0 02 12 28 \
+ 67 D6 67 D0 02 11 28 67 D6 02 14 28 67 D0 02 13 \
+ 28 67 D6 67 D0 02 14 28 67 D6 02 15 28 67 D0 02 \
+ 16 28 67 D6 67 D0 02 15 28 67 D6 02 17 28 67 D0 \
+ 02 18 28 67 D6 67 D0 02 17 28 67 D6 86 E0 3A 30 \
+ 67 F1 75 F8 77 FC 67 F1 75 F8 28 32 00 32 01 B7 \
+ 97 75 F8 16 E0 CA 05 74 FC 77 F8 67 F1 75 F8 77 \
+ FC 12 A0 F8 15 1A 00 57 32 0F 87 57 32 0E 87 57 \
+ '" #bcm956820r24xg.hex
+
+if $?valkyrie "local ledcode '\
+ 02 02 67 A9 67 94 02 03 67 A9 67 94 02 05 67 A9 \
+ 67 94 02 04 67 A9 67 94 02 06 67 A9 67 94 02 07 \
+ 67 A9 67 94 02 12 67 A9 67 94 02 13 67 A9 67 94 \
+ 02 0E 67 A9 67 94 02 0F 67 A9 67 94 02 11 67 A9 \
+ 67 94 02 10 67 A9 67 94 02 1A 67 A9 67 94 02 20 \
+ 67 A9 67 94 02 21 67 A9 67 94 02 22 67 A9 67 94 \
+ 02 23 67 A9 67 94 02 24 67 A9 67 94 02 2F 67 A9 \
+ 67 94 02 2E 67 A9 67 94 02 1B 67 A9 67 94 02 2B \
+ 67 A9 67 94 02 2C 67 A9 67 94 02 2D 67 A9 67 94 \
+ 86 E0 3A 30 67 AF 75 B6 28 32 00 32 01 B7 97 75 \
+ B6 16 E0 CA 05 74 BA 77 B6 67 AF 75 B6 77 BA 12 \
+ A0 F8 15 1A 00 57 32 0F 87 57 32 0E 87 57 00 00 \
+ 00'" #sdk56680.hex
+
+if $?valkyrie2 "local ledcode '\
+ 02 1E 67 A9 67 94 02 1F 67 A9 67 94 02 21 67 A9 \
+ 67 94 02 20 67 A9 67 94 02 22 67 A9 67 94 02 23 \
+ 67 A9 67 94 02 24 67 A9 67 94 02 25 67 A9 67 94 \
+ 02 26 67 A9 67 94 02 27 67 A9 67 94 02 29 67 A9 \
+ 67 94 02 28 67 A9 67 94 02 2A 67 A9 67 94 02 2B \
+ 67 A9 67 94 02 2C 67 A9 67 94 02 2D 67 A9 67 94 \
+ 02 2E 67 A9 67 94 02 2F 67 A9 67 94 02 31 67 A9 \
+ 67 94 02 30 67 A9 67 94 02 32 67 A9 67 94 02 33 \
+ 67 A9 67 94 02 34 67 A9 67 94 02 35 67 A9 67 94 \
+ 86 E0 3A 30 67 AF 75 B6 28 32 00 32 01 B7 97 75 \
+ B6 16 E0 CA 05 74 BA 77 B6 67 AF 75 B6 77 BA 12 \
+ A0 F8 15 1A 00 57 32 0F 87 57 32 0E 87 57 00 00 \
+ 00'" #sdk56685.hex
+
+if $?hawkeye_p24 "local ledcode '\
+ 02 01 28 60 E3 67 43 67 1C 06 E3 80 D2 19 74 02 \
+ 12 E0 85 05 D2 03 71 1A 52 00 3A 60 32 00 32 01 \
+ B7 97 75 2B 12 E4 FE E3 02 01 50 12 E4 FE E3 95 \
+ 75 3B 85 06 E3 67 55 75 6A 77 5C 16 E0 DA 01 71 \
+ 6A 77 5C 06 E3 67 55 75 6A 32 03 97 71 5C 32 04 \
+ 97 75 6A 77 63 12 A0 F8 15 1A 00 57 32 0E 87 32 \
+ 0F 87 57 32 0F 87 32 0E 87 57 32 0F 87 32 0F 87 \
+ 57'"  #bcm953314p24ref.hex
+
+if $?hawkeye_k24 "local ledcode '\
+ 02 01 28 60 E1 67 3D 67 1C 06 E1 80 D2 19 74 02 \
+ 12 E0 85 05 D2 05 71 1A 52 00 3A 30 32 00 32 01 \
+ B7 97 75 2B 12 E2 FE E1 02 0A 50 12 E2 FE E1 95 \
+ 75 35 85 77 50 16 E0 DA 02 71 4C 77 50 06 E1 67 \
+ 45 75 50 77 4C 12 A0 F8 15 1A 00 57 32 0E 87 57 \
+ 32 0F 87 57 00 00 00 00 00 00 00 00 00 00 00 00'" #bcm953314k24.hex
+
+if !"expr $pcidev + 0 == 0xb624" "local ledcode '\
+ 02 1C 28 67 18 02 1D 28 67 18 02 1E 28 67 18 02 \
+ 1F 28 67 18 86 E0 3A 08 67 3B 75 20 67 46 77 24 \
+ 67 42 77 42 28 32 00 32 01 B7 97 75 42 16 E0 CA \
+ 05 74 46 77 42 67 3B 75 42 77 46 12 A0 F8 15 1A \
+ 00 57 32 0F 87 57 32 0E 87 57 00 00 00 00 00 00'" #sdk56624.hex
+
+if !"expr $pcidev + 0 == 0xb626" "local ledcode '\
+ 02 1A 28 67 22 02 1B 28 67 22 02 1C 28 67 22 02 \
+ 1D 28 67 22 02 1E 28 67 22 02 1F 28 67 22 86 E0 \
+ 3A 08 67 3D 75 44 28 32 00 32 01 B7 97 75 48 16 \
+ E0 CA 05 74 48 77 44 67 3D 75 44 77 48 12 A0 F8 \
+ 15 1A 00 57 32 0F 87 57 32 0E 87 57 00 00 00 00'" #sdk56626.hex
+
+if !"expr $pcidev + 0 == 0xb628" "local ledcode '\
+ 02 02 28 67 2C 02 0E 28 67 2C 02 1A 28 67 2C 02 \
+ 1B 28 67 2C 02 1C 28 67 2C 02 1D 28 67 2C 02 1E \
+ 28 67 2C 02 1F 28 67 2C 86 E0 3A 08 67 47 75 4E \
+ 28 32 00 32 01 B7 97 75 52 16 E0 CA 05 74 52 77 \
+ 4E 67 47 75 4E 77 52 12 A0 F8 15 1A 00 57 32 0F \
+ 87 57 32 0E 87 57 00 00 00 00 00 00 00 00 00 00'" #sdk56628.hex
+
+if !"expr $pcidev + 0 == 0xb629" "local ledcode '\
+ 02 02 28 67 2C 02 0E 28 67 2C 02 1A 28 67 2C 02 \
+ 1B 28 67 2C 02 1C 28 67 2C 02 1D 28 67 2C 02 1E \
+ 28 67 2C 02 1F 28 67 2C 86 E0 3A 08 67 47 75 4E \
+ 28 32 00 32 01 B7 97 75 52 16 E0 CA 05 74 52 77 \
+ 4E 67 47 75 4E 77 52 12 A0 F8 15 1A 00 57 32 0F \
+ 87 57 32 0E 87 57 00 00 00 00 00 00 00 00 00 00'" #sdk56629.hex
+
+if !"expr $pcidev + 0 == 0xb634" "local ledcode '\
+ 02 1A 28 67 18 02 1B 28 67 18 02 1C 28 67 18 02 \
+ 1D 28 67 18 86 E0 3A 08 67 3B 75 20 67 46 77 24 \
+ 67 42 77 42 28 32 00 32 01 B7 97 75 42 16 E0 CA \
+ 05 74 46 77 42 67 3B 75 42 77 46 12 A0 F8 15 1A \
+ 00 57 32 0F 87 57 32 0E 87 57 00 00 00 00 00 00'" #sdk56634.hex
+
+if !"expr $pcidev + 0 == 0xb630" "local ledcode '\
+ 02 1A 28 67 18 02 1B 28 67 18 02 1C 28 67 18 02 \
+ 1D 28 67 18 86 E0 3A 08 67 3B 75 20 67 46 77 24 \
+ 67 42 77 42 28 32 00 32 01 B7 97 75 42 16 E0 CA \
+ 05 74 46 77 42 67 3B 75 42 77 46 12 A0 F8 15 1A \
+ 00 57 32 0F 87 57 32 0E 87 57 00 00 00 00 00 00'" #sdk56634.hex
+
+if !"expr $pcidev + 0 == 0xb636" "local ledcode '\
+ 02 2A 28 67 22 02 32 28 67 22 02 1A 28 67 22 02 \
+ 1B 28 67 22 02 1C 28 67 22 02 1D 28 67 22 86 E0 \
+ 3A 08 67 3D 75 44 28 32 00 32 01 B7 97 75 48 16 \
+ E0 CA 05 74 48 77 44 67 3D 75 44 77 48 12 A0 F8 \
+ 15 1A 00 57 32 0F 87 57 32 0E 87 57 00 00 00 00'" #sdk56636.hex
+
+if !"expr $pcidev + 0 == 0xb638" "local ledcode '\
+ 02 1E 28 67 2C 02 26 28 67 2C 02 2A 28 67 2C 02 \
+ 32 28 67 2C 02 1A 28 67 2C 02 1B 28 67 2C 02 1C \
+ 28 67 2C 02 1D 28 67 2C 86 E0 3A 08 67 47 75 4E \
+ 28 32 00 32 01 B7 97 75 52 16 E0 CA 05 74 52 77 \
+ 4E 67 47 75 4E 77 52 12 A0 F8 15 1A 00 57 32 0F \
+ 87 57 32 0E 87 57 00 00 00 00 00 00 00 00 00 00'" #sdk56638.hex
+
+if !"expr $pcidev + 0 == 0xb639" "local ledcode '\
+ 02 1E 28 67 2C 02 26 28 67 2C 02 2A 28 67 2C 02 \
+ 32 28 67 2C 02 1A 28 67 2C 02 1B 28 67 2C 02 1C \
+ 28 67 2C 02 1D 28 67 2C 86 E0 3A 08 67 47 75 4E \
+ 28 32 00 32 01 B7 97 75 52 16 E0 CA 05 74 52 77 \
+ 4E 67 47 75 4E 77 52 12 A0 F8 15 1A 00 57 32 0F \
+ 87 57 32 0E 87 57 00 00 00 00 00 00 00 00 00 00'" #sdk56639.hex
+
+if !"expr $pcidev + 0 == 0xb334" "local ledcode '\
+ 02 02 28 60 E1 67 3D 67 1C 06 E1 80 D2 1E 74 02 \
+ 12 E0 85 05 D2 05 71 1A 52 00 3A 38 32 00 32 01 \
+ B7 97 75 2B 12 E2 FE E1 02 0A 50 12 E2 FE E1 95 \
+ 75 35 85 77 4C 16 E0 DA 02 71 50 77 4C 06 E1 67 \
+ 45 75 4C 77 50 12 A0 F8 15 1A 00 57 32 0F 87 57 \
+ 32 0E 87 57 00 00 00 00 00 00 00 00 00 00 00 00'" #sdk56334.hex
+
+if $?apollo "local ledcode '\
+ 02 1E 28 60 E0 67 58 67 73 06 E0 80 28 60 E0 67 \
+ 73 67 58 06 E0 80 D2 36 74 02 02 1A 28 60 E0 67 \
+ 9B 75 29 67 B0 67 58 77 31 32 0E 87 32 08 87 67 \
+ A2 06 E0 80 D2 1E 74 1C 12 E2 85 05 D2 0F 71 42 \
+ 52 00 12 E1 85 05 D2 1F 71 4C 52 00 12 E3 85 05 \
+ D2 05 71 56 52 00 3A 70 32 00 97 75 64 32 01 97 \
+ 71 6B 77 B0 32 01 97 71 A9 77 A2 16 E3 DA 02 71 \
+ A9 77 B0 32 05 97 75 83 32 02 97 71 A2 06 E1 D2 \
+ 01 71 A2 06 E0 67 9B 75 A2 32 03 97 71 B0 32 04 \
+ 97 75 A9 06 E2 D2 07 71 A9 77 B0 12 A0 F8 15 1A \
+ 00 57 32 0E 87 32 0E 87 57 32 0E 87 32 0F 87 57 \
+ 32 0F 87 32 0E 87 57 00 00 00 00 00 00 00 00 00'" #sdk56524.hex
+
+if $?tomahawk || $?tomahawk_plus "local ledcode '\
+ 02 00 28 60 E1 67 25 67 14 06 E1 80 D2 40 74 02 \
+ 86 E0 3A FC 28 32 00 32 01 B7 97 75 37 16 E0 CA \
+ 05 74 3E 77 37 67 2B 75 37 77 45 12 A0 F8 15 1A \
+ 00 57 28 32 07 97 57 32 0E 87 32 0E 87 57 32 0F \
+ 87 32 0E 87 57 32 0E 87 32 0F 87 57 00 00 00 00'" #sdk56960.hex
+
+if $?trident2plus "local ledcode '\
+ 02 01 28 60 E1 67 31 67 20 06 E1 80 D2 31 74 02 \
+ 86 E0 3A C0 67 37 75 1C 67 51 77 20 67 43 77 43 \
+ 28 32 00 32 01 B7 97 75 43 16 E0 CA 05 74 4A 77 \
+ 43 67 37 75 43 77 51 12 A0 F8 15 1A 00 57 28 32 \
+ 07 97 57 32 0E 87 32 0E 87 57 32 0F 87 32 0E 87 \
+ 57 32 0E 87 32 0F 87 57 00 00 00 00 00 00 00 00'" #sdk56860.hex
+
+if $?apache "local ledcode '\
+ 02 00 67 24 67 0F 80 D2 24 74 02 86 E0 3A F8 67 \
+ 34 75 16 77 1D 57 67 3C 75 62 77 44 57 67 3C 75 \
+ 4E 77 58 57 67 2C 75 62 77 70 07 57 07 12 A0 F8 \
+ 15 1A 00 57 07 12 A0 F8 15 1A 04 57 07 12 A0 F8 \
+ 15 1A 05 57 16 E0 CA 1E 74 69 77 62 07 57 16 E0 \
+ CA 1E 74 70 77 62 07 57 16 E0 CA 1E 74 69 77 70 \
+ 07 57 32 0E 87 32 0E 87 57 32 0F 87 32 0E 87 57 \
+ 32 0E 87 32 0F 87 57 00 00 00 00 00 00 00 00 00'" #sdk56560.hex
+
+if $?generic8led "local ledcode '\
+ 06 E1 D2 40 71 11 E0 60 E1 16 E3 DA 01 71 15 60 \
+ E3 67 5D 75 2B 12 01 61 E3 67 71 28 67 32 86 E0 \
+ 16 E2 81 61 E2 DA 1E 75 2B 3A 08 E9 61 E2 86 E1 \
+ 77 00 67 5D 75 38 77 3C 67 64 77 64 67 41 67 4F \
+ 57 28 32 01 97 75 64 16 E0 CA 05 74 68 77 64 28 \
+ 32 00 97 75 64 16 E0 CA 05 74 68 77 64 12 A0 F8 \
+ 15 1A 00 57 32 0F 87 57 32 0E 87 57 09 75 64 77 \
+ 68 12 05 67 6C 12 04 67 6C 12 03 67 6C 12 02 67 \
+ 6C 12 01 67 6C 12 00 67 6C 57 00 00 00 00 00 00'" #generic8led.hex
+
+# Download LED code into LED processor and enable (if applicable).
+
+if $?feature_led_proc && $?ledcode && !$?simulator \
+	"led prog $ledcode; \
+	 led auto on; led start"
+
+# Setup Greyhound LED processor
+if $?greyhound \
+    "rcload gh_ledup.soc"
+
+# Setup Hurricane3 LED processor
+if $?hurricane3 \
+    "rcload hr3_led.soc"
+
+# Setup Tomahawk LED processor
+if $?tomahawk && !$?simulator \
+    "led 1 prog $ledcode; \
+     led 1 auto on; led 1 start; \
+     led 2 prog $ledcode; \
+     led 2 auto on; led 2 start"
+
+# Setup Tomahawk+ LED processor
+if $?tomahawk_plus && !$?simulator \
+    "led 1 prog $ledcode; \
+     led 1 auto on; led 1 start; \
+     led 2 prog $ledcode; \
+     led 2 auto on; led 2 start"
+
+# If loading multiple rc.soc, upon loading the last unit, restart
+# all LED processors so any common blinking is in sync.
+
+if !"expr $?feature_led_proc && !$?simulator && $unit == $units - 1" \
+	"*:led stop; *:led start"
+
+# Run counter DMA task 4 times per second to achieve better
+# ctr_xaui_activity.
+if $?bradley_any \
+        "ctr interval=250000"
+
+# Initialize Hercules UC modid 0 entry to point to the CPU
+if $?herc_any \
+	"w uc 0 1 1"
+
+# Additional configuration for 48-port in Stacking mode.
+# On the 48-port platform, rc.soc is run twice; once on unit 0 and
+# then once on unit 1.  The turbo port on unit N is geN.
+# All turbo port traffic must be tagged; see vlan add below.
+# See $SDK/doc/48-port.txt for more information including how
+# to configure IPG values for line rate operation.
+
+if $?p48 && $?unit0 \
+	"local turbo_port 0; local my_modid 1;"
+
+if $?p48 && $?unit1 \
+	"local turbo_port 1; local my_modid 2;"
+
+if $?p48 \
+	"m config st_is_mirr=0 st_module=1 st_mcnt=1 st_simplex=0 st_link=0; \
+	 m config.g$turbo_port st_link=1; \
+	 m gmacc2.ge$turbo_port ipgt=8 mclkfq=1; \
+	 m fe_maxf maxfr=1560; \
+	 m maxfr maxfr=1568; \
+	 m config2 my_modid=$my_modid; \
+	 port ge$turbo_port speed=2500; \
+	 vlan add 1 pbm=ge$turbo_port ubm=none"
+
+if !$?no_bcm && $?drac_any \
+   "m modport_7_0 port_for_mod1=0xc"
+if !$?no_bcm && $?lynx_any \
+   "m modport_7_0 port_for_mod1=0x1"
+if !$?no_bcm && $?tucana \
+   "stkmode modid=0;"
+if !$?no_bcm && $?tucana && !$?magnum && !$?tucana_nohg \
+   "m modport_7_0 port_for_mod2=0x38; \
+    m imodport_7_0 port_for_mod0=0 port_for_mod1=0 port_for_mod2=0x38; \
+    stkmode modid=0"
+if !$?no_bcm && $?xgs_switch && !$?rcpu_only\
+   "stkmode modid=0; \
+    s CMIC_COS_CTRL_RX CH0_COS_BMP=0,CH1_COS_BMP=0xff, \
+        CH2_COS_BMP=0,CH3_COS_BMP=0"
+
+# Back-to-back Draco setup.
+
+# Draco chips must run at 127MHz. Some older versions
+# are not set to this frequency.
+
+if $?draco_stk && $?unit0 \
+    "i2c probe quiet; bb clock Ref125 127"
+
+# Applies to SDK Baseboard with either internal or external Higigs,
+# as well as the Galahad reference design.
+
+if $?draco_b2b && $?unit0 \
+    "stkmode modid=0; \
+     m modport_7_0 port_for_mod0=0 port_for_mod1=12; \
+     m imodport_7_0 port_for_mod0=0 port_for_mod1=12"
+
+if !$?simulator && $?draco_b2b && $?unit0 \
+     "i2c probe quiet; bb clock Ref125 127"
+
+if $?draco_b2b && $?unit1 \
+    "stkmode modid=1; \
+     m modport_7_0 port_for_mod0=12 port_for_mod1=0; \
+     m imodport_7_0 port_for_mod0=12 port_for_mod1=0"
+
+# Merlin, White Knight, Black Knight setup.
+#	Draco unit 1 is on Herc port 8
+#	Draco unit 2 is on Herc port 1
+
+if $?draco_herc4 && $?unit0 \
+    "w uc.hpic7 0 1 0x0; \
+     w uc.hpic7 1 1 0x2; \
+     w uc.hpic0 0 1 0x100; \
+     w uc.hpic0 1 1 0x0"
+
+if !$?simulator && $?draco_herc4 && $?unit0 \
+     "i2c probe quiet; bb clock Ref125 127"
+
+if $?draco_herc4 && $?unit1 \
+    "stkmode modid=0; \
+     m modport_7_0 port_for_mod0=0 port_for_mod1=12; \
+     m imodport_7_0 port_for_mod0=0 port_for_mod1=12"
+
+if $?draco_herc4 && $?unit2 \
+    "stkmode modid=1; \
+     m modport_7_0 port_for_mod0=12 port_for_mod1=0; \
+     m imodport_7_0 port_for_mod0=12 port_for_mod1=0"
+
+# Lancelot setup
+# (enabled by adding the property "lancelot=1")
+# Notes:
+#	Draco unit 1 is on Herc port 7
+#	Draco unit 2 is on Herc port 8
+#	Draco unit 3 is on Herc port 1
+#	Draco unit 4 is on Herc port 2
+
+if $?lancelot && $?unit0 \
+    "w uc.hpic6 0 1 0x0; \
+     w uc.hpic6 1 1 0x100; \
+     w uc.hpic6 2 1 0x2; \
+     w uc.hpic6 3 1 0x4; \
+     w uc.hpic7 0 1 0x80; \
+     w uc.hpic7 1 1 0x0; \
+     w uc.hpic7 2 1 0x2; \
+     w uc.hpic7 3 1 0x4; \
+     w uc.hpic0 0 1 0x80; \
+     w uc.hpic0 1 1 0x100; \
+     w uc.hpic0 2 1 0x0; \
+     w uc.hpic0 3 1 0x4; \
+     w uc.hpic1 0 1 0x80; \
+     w uc.hpic1 1 1 0x100; \
+     w uc.hpic1 2 1 0x2; \
+     w uc.hpic1 3 1 0x0"
+
+if !$?simulator && $?lancelot && $?unit0 \
+     "i2c probe quiet; bb clock Draco_Core 127"
+
+if $?lancelot && $?unit1 \
+    "stkmode modid=0; \
+     m modport_7_0 port_for_mod0=0 port_for_mod1=12 \
+     port_for_mod2=12 port_for_mod3=12; \
+     m imodport_7_0 port_for_mod0=0 port_for_mod1=12 \
+     port_for_mod2=12 port_for_mod3=12"
+
+if $?lancelot && $?unit2 \
+    "stkmode modid=1; \
+     m modport_7_0 port_for_mod0=12 port_for_mod1=0 \
+     port_for_mod2=12 port_for_mod3=12; \
+     m imodport_7_0 port_for_mod0=12 port_for_mod1=0 \
+     port_for_mod2=12 port_for_mod3=12"
+
+if $?lancelot && $?unit3 \
+    "stkmode modid=2; \
+     m modport_7_0 port_for_mod0=12 port_for_mod1=12 \
+     port_for_mod2=0 port_for_mod3=12; \
+     m imodport_7_0 port_for_mod0=12 port_for_mod1=12 \
+     port_for_mod2=0 port_for_mod3=12"
+
+if $?lancelot && $?unit4 \
+    "stkmode modid=3; \
+     m modport_7_0 port_for_mod0=12 port_for_mod1=12 \
+     port_for_mod2=12 port_for_mod3=0; \
+     m imodport_7_0 port_for_mod0=12 port_for_mod1=12 \
+     port_for_mod2=12 port_for_mod3=0"
+
+# Lynx SDK (TwoLynx) setup
+# (enabled by adding the property "twolynx=1")
+
+if $?twolynx && $?unit0 \
+    "stkmode modid=0; \
+     m modport_7_0 port_for_mod0=0 port_for_mod1=1; \
+     m imodport_7_0 port_for_mod0=0 port_for_mod1=1; \
+     "
+
+if $?twolynx && $?unit1 \
+    "stkmode modid=1; \
+     m modport_7_0 port_for_mod0=1 port_for_mod1=0; \
+     m imodport_7_0 port_for_mod0=1 port_for_mod1=0; \
+     "
+# HercuLynx setup
+# (enabled by adding the property "herculynx=1")
+# Notes:
+#	Lynx unit 1 is on Herc port 1
+#	Lynx unit 2 is on Herc port 2
+#	Lynx unit 3 is on Herc port 3
+#	Lynx unit 4 is on Herc port 4
+#	Lynx unit 5 is on Herc port 5
+#	Lynx unit 6 is on Herc port 6
+#	Lynx unit 7 is on Herc port 7
+#	Lynx unit 8 is on Herc port 8
+
+if $?herculynx && $?unit0 \
+    " \
+     w uc.hpic0 0 1 0x002; \
+     w uc.hpic0 1 1 0x004; \
+     w uc.hpic0 2 1 0x008; \
+     w uc.hpic0 3 1 0x010; \
+     w uc.hpic0 4 1 0x020; \
+     w uc.hpic0 5 1 0x040; \
+     w uc.hpic0 6 1 0x080; \
+     w uc.hpic0 7 1 0x100; \
+                         ; \
+     w uc.hpic1 0 1 0x002; \
+     w uc.hpic1 1 1 0x004; \
+     w uc.hpic1 2 1 0x008; \
+     w uc.hpic1 3 1 0x010; \
+     w uc.hpic1 4 1 0x020; \
+     w uc.hpic1 5 1 0x040; \
+     w uc.hpic1 6 1 0x080; \
+     w uc.hpic1 7 1 0x100; \
+                         ; \
+     w uc.hpic2 0 1 0x002; \
+     w uc.hpic2 1 1 0x004; \
+     w uc.hpic2 2 1 0x008; \
+     w uc.hpic2 3 1 0x010; \
+     w uc.hpic2 4 1 0x020; \
+     w uc.hpic2 5 1 0x040; \
+     w uc.hpic2 6 1 0x080; \
+     w uc.hpic2 7 1 0x100; \
+                         ; \
+     w uc.hpic3 0 1 0x002; \
+     w uc.hpic3 1 1 0x004; \
+     w uc.hpic3 2 1 0x008; \
+     w uc.hpic3 3 1 0x010; \
+     w uc.hpic3 4 1 0x020; \
+     w uc.hpic3 5 1 0x040; \
+     w uc.hpic3 6 1 0x080; \
+     w uc.hpic3 7 1 0x100; \
+                         ; \
+     w uc.hpic4 0 1 0x002; \
+     w uc.hpic4 1 1 0x004; \
+     w uc.hpic4 2 1 0x008; \
+     w uc.hpic4 3 1 0x010; \
+     w uc.hpic4 4 1 0x020; \
+     w uc.hpic4 5 1 0x040; \
+     w uc.hpic4 6 1 0x080; \
+     w uc.hpic4 7 1 0x100; \
+                         ; \
+     w uc.hpic5 0 1 0x002; \
+     w uc.hpic5 1 1 0x004; \
+     w uc.hpic5 2 1 0x008; \
+     w uc.hpic5 3 1 0x010; \
+     w uc.hpic5 4 1 0x020; \
+     w uc.hpic5 5 1 0x040; \
+     w uc.hpic5 6 1 0x080; \
+     w uc.hpic5 7 1 0x100; \
+                         ; \
+     w uc.hpic6 0 1 0x002; \
+     w uc.hpic6 1 1 0x004; \
+     w uc.hpic6 2 1 0x008; \
+     w uc.hpic6 3 1 0x010; \
+     w uc.hpic6 4 1 0x020; \
+     w uc.hpic6 5 1 0x040; \
+     w uc.hpic6 6 1 0x080; \
+     w uc.hpic6 7 1 0x100; \
+                         ; \
+     w uc.hpic7 0 1 0x002; \
+     w uc.hpic7 1 1 0x004; \
+     w uc.hpic7 2 1 0x008; \
+     w uc.hpic7 3 1 0x010; \
+     w uc.hpic7 4 1 0x020; \
+     w uc.hpic7 5 1 0x040; \
+     w uc.hpic7 6 1 0x080; \
+     w uc.hpic7 7 1 0x100; \
+                         ; \
+     "
+
+if $?herculynx && $?lynx_any \
+     "m modport_7_0 \
+     port_for_mod0=1 port_for_mod1=1 \
+     port_for_mod2=1 port_for_mod3=1 \
+     port_for_mod4=1 port_for_mod5=1 \
+     port_for_mod6=1 port_for_mod7=1; \
+     m imodport_7_0 \
+     port_for_mod0=1 port_for_mod1=1 \
+     port_for_mod2=1 port_for_mod3=1 \
+     port_for_mod4=1 port_for_mod5=1 \
+     port_for_mod6=1 port_for_mod7=1; \
+     "
+
+if $?herculynx && $?unit1 \
+    "stkmode modid=0"
+
+if $?herculynx && $?unit2 \
+    "stkmode modid=1"
+
+if $?herculynx && $?unit3 \
+    "stkmode modid=2"
+
+if $?herculynx && $?unit4 \
+    "stkmode modid=3"
+
+if $?herculynx && $?unit5 \
+    "stkmode modid=4"
+
+if $?herculynx && $?unit6 \
+    "stkmode modid=5"
+
+if $?herculynx && $?unit7 \
+    "stkmode modid=6"
+
+if $?herculynx && $?unit8 \
+    "stkmode modid=7"
+
+# LynxaLot setup
+# (enabled by adding the property "lynxalot=1")
+# Notes:
+#	Lynx unit 0 is on Herc port 3 (hg2/hpic2) (mod 0)
+#	Lynx unit 1 is on Herc port 4 (hg3/hpic3) (mod 1)
+#	Higig conn 0 is on Herc port 5 (hg4/hpic4)
+#	Higig conn 1 is on Herc port 6 (hg5/hpic5)
+#	Draco unit 3 is on Herc port 7 (hg6/hpic6) (mod 2)
+#	Draco unit 4 is on Herc port 8 (hg7/hpic7) (mod 3)
+#	Draco unit 5 is on Herc port 1 (hg0/hpic0) (mod 4)
+#	Draco unit 6 is on Herc port 2 (hg1/hpic1) (mod 5)
+
+if $?lynxalot && $?unit2 \
+    " \
+     w uc.hpic0 0 1 0x008; \
+     w uc.hpic0 1 1 0x010; \
+     w uc.hpic0 2 1 0x080; \
+     w uc.hpic0 3 1 0x100; \
+     w uc.hpic0 4 1 0x002; \
+     w uc.hpic0 5 1 0x004; \
+                         ; \
+     w uc.hpic1 0 1 0x008; \
+     w uc.hpic1 1 1 0x010; \
+     w uc.hpic1 2 1 0x080; \
+     w uc.hpic1 3 1 0x100; \
+     w uc.hpic1 4 1 0x002; \
+     w uc.hpic1 5 1 0x004; \
+                         ; \
+     w uc.hpic2 0 1 0x008; \
+     w uc.hpic2 1 1 0x010; \
+     w uc.hpic2 2 1 0x080; \
+     w uc.hpic2 3 1 0x100; \
+     w uc.hpic2 4 1 0x002; \
+     w uc.hpic2 5 1 0x004; \
+                         ; \
+     w uc.hpic3 0 1 0x008; \
+     w uc.hpic3 1 1 0x010; \
+     w uc.hpic3 2 1 0x080; \
+     w uc.hpic3 3 1 0x100; \
+     w uc.hpic3 4 1 0x002; \
+     w uc.hpic3 5 1 0x004; \
+                         ; \
+     w uc.hpic6 0 1 0x008; \
+     w uc.hpic6 1 1 0x010; \
+     w uc.hpic6 2 1 0x080; \
+     w uc.hpic6 3 1 0x100; \
+     w uc.hpic6 4 1 0x002; \
+     w uc.hpic6 5 1 0x004; \
+                         ; \
+     w uc.hpic7 0 1 0x008; \
+     w uc.hpic7 1 1 0x010; \
+     w uc.hpic7 2 1 0x080; \
+     w uc.hpic7 3 1 0x100; \
+     w uc.hpic7 4 1 0x002; \
+     w uc.hpic7 5 1 0x004; \
+                         ; \
+     "
+
+if $?lynxalot && $?lynx_any \
+     "m modport_7_0 \
+     port_for_mod0=1 port_for_mod1=1 \
+     port_for_mod2=1 port_for_mod3=1 \
+     port_for_mod4=1 port_for_mod5=1 \
+     port_for_mod6=1 port_for_mod7=1; \
+     m imodport_7_0 \
+     port_for_mod0=1 port_for_mod1=1 \
+     port_for_mod2=1 port_for_mod3=1 \
+     port_for_mod4=1 port_for_mod5=1 \
+     port_for_mod6=1 port_for_mod7=1; \
+     "
+
+if $?lynxalot && $?drac_any \
+    "m modport_7_0 port_for_mod0=12 port_for_mod1=12 \
+     port_for_mod2=12 port_for_mod3=12 \
+     port_for_mod4=12 port_for_mod5=12 \
+     port_for_mod6=12 port_for_mod7=12; \
+     m imodport_7_0 port_for_mod0=12 port_for_mod1=12 \
+     port_for_mod2=12 port_for_mod3=12 \
+     port_for_mod4=12 port_for_mod5=12 \
+     port_for_mod6=12 port_for_mod7=12; \
+     "
+
+if $?lynxalot && $?unit0 \
+    "stkmode modid=0"
+     
+if $?lynxalot && $?unit1 \
+    "stkmode modid=1"
+
+if $?lynxalot && $?unit3 \
+    "stkmode modid=2"
+
+if $?lynxalot && $?unit4 \
+    "stkmode modid=3"
+
+if $?lynxalot && $?unit5 \
+    "stkmode modid=4"
+
+if $?lynxalot && $?unit6 \
+    "stkmode modid=5"
+
+# guenevere setup
+# (enabled by adding the property "guenevere=1")
+# Notes:
+#       hgX mapping based on pbmp_valid.0=0x1b7
+#	Draco unit 1 is on Herc port 1 (hg0/hpic0) (mod 0)
+#	Draco unit 2 is on Herc port 2 (hg1/hpic1) (mod 1)
+#	Lynx unit 3 is on Herc port 8 (hg5/hpic7) (mod 2)
+#	Lynx unit 4 is on Herc port 7 (hg4/hpic6) (mod 3)
+#	Higig conn 0 is on Herc port 4 (hg2/hpic3)
+#	Higig conn 1 is on Herc port 5 (hg3/hpic4)
+#       Herc port 3 - Unused (hpic2)
+#       Herc port 6 - Unused (hpic5)
+if $?guenevere && $?unit0 \
+    " \
+     w uc.hpic0 0 1 0x002; \
+     w uc.hpic0 1 1 0x004; \
+     w uc.hpic0 2 1 0x100; \
+     w uc.hpic0 3 1 0x080; \
+                         ; \
+     w uc.hpic1 0 1 0x002; \
+     w uc.hpic1 1 1 0x004; \
+     w uc.hpic1 2 1 0x100; \
+     w uc.hpic1 3 1 0x080; \
+                         ; \
+     w uc.hpic7 0 1 0x002; \
+     w uc.hpic7 1 1 0x004; \
+     w uc.hpic7 2 1 0x100; \
+     w uc.hpic7 3 1 0x080; \
+                         ; \
+     w uc.hpic6 0 1 0x002; \
+     w uc.hpic6 1 1 0x004; \
+     w uc.hpic6 2 1 0x100; \
+     w uc.hpic6 3 1 0x080; \
+                         ; \
+     "
+
+if $?guenevere && $?lynx_any \
+     "m modport_7_0 \
+     port_for_mod0=1 port_for_mod1=1 \
+     port_for_mod2=1 port_for_mod3=1 \
+     port_for_mod4=1 port_for_mod5=1 \
+     port_for_mod6=1 port_for_mod7=1; \
+     m imodport_7_0 \
+     port_for_mod0=1 port_for_mod1=1 \
+     port_for_mod2=1 port_for_mod3=1 \
+     port_for_mod4=1 port_for_mod5=1 \
+     port_for_mod6=1 port_for_mod7=1; \
+     "
+
+if $?guenevere && $?drac_any \
+    "m modport_7_0 port_for_mod0=12 port_for_mod1=12 \
+     port_for_mod2=12 port_for_mod3=12 \
+     port_for_mod4=12 port_for_mod5=12 \
+     port_for_mod6=12 port_for_mod7=12; \
+     m imodport_7_0 port_for_mod0=12 port_for_mod1=12 \
+     port_for_mod2=12 port_for_mod3=12 \
+     port_for_mod4=12 port_for_mod5=12 \
+     port_for_mod6=12 port_for_mod7=12; \
+     "
+
+if $?guenevere && $?unit1 \
+    "stkmode modid=0"
+     
+if $?guenevere && $?unit2 \
+    "stkmode modid=1"
+
+if $?guenevere && $?unit3 \
+    "stkmode modid=2"
+
+if $?guenevere && $?unit4 \
+    "stkmode modid=3"
+     
+# felix48 setup
+# (enabled by adding the property "felix48=1")
+# Notes:
+#       BCM56102 unit-0 higig port (port 26) is connected
+#       to BCM56102 Unit-1 higig port (port 26)
+#
+
+if $?felix48 && $?unit0 \
+    "stkmode modid=0 ; \
+     m IEGR_PORT MY_MODID=0; \
+     m XPORT_CONFIG MY_MODID=0; \
+     w MODPORT_MAP 1 1 HIGIG_PORT_BITMAP=0x4 ; \
+     "
+
+if $?felix48 && $?unit1 \
+    "stkmode modid=1 ; \
+     m IEGR_PORT MY_MODID=1; \
+     m XPORT_CONFIG MY_MODID=1; \
+     w MODPORT_MAP 0 1 HIGIG_PORT_BITMAP=0x4 ; \
+     "
+# fbpoe setup
+# (enabled by adding the property "fbpoe=1")
+# Notes:
+#       BCM56504 unit-0 higig port (port 27,28) is connected
+#       to BCM56504 Unit-1 higig port (port 27,28)
+#
+
+if $?unit0 && $?firebolt_any && $?fbpoe     \
+  "stkmode modid=0;           \
+   w modport_map 1 1 HIGIG_PORT_BITMAP=0x4; \
+   m HIGIG_TRUNK_GROUP HIGIG_TRUNK_RTAG1=3 \
+                       HIGIG_TRUNK_ID1_PORT0=2 \
+                       HIGIG_TRUNK_ID1_PORT1=3 \
+                       HIGIG_TRUNK_ID1_PORT2=2 \
+                       HIGIG_TRUNK_ID1_PORT3=3; \
+   m HIGIG_TRUNK_CONTROL HIGIG_TRUNK_ID2=1 \
+                         HIGIG_TRUNK2=1 \
+                         HIGIG_TRUNK_ID3=1 \
+                         HIGIG_TRUNK3=1 \
+                         HIGIG_TRUNK_BITMAP1=0xc \
+                         ACTIVE_PORT_BITMAP=0xf"
+
+if $?unit1 && $?firebolt_any && $?fbpoe \
+  "stkmode modid=1; \
+   w modport_map 0 1 HIGIG_PORT_BITMAP=0x4; \
+   m HIGIG_TRUNK_GROUP HIGIG_TRUNK_RTAG1=3 \
+                       HIGIG_TRUNK_ID1_PORT0=2 \
+                       HIGIG_TRUNK_ID1_PORT1=3 \
+                       HIGIG_TRUNK_ID1_PORT2=2 \
+                       HIGIG_TRUNK_ID1_PORT3=3; \
+   m HIGIG_TRUNK_CONTROL HIGIG_TRUNK_ID2=1 \
+                         HIGIG_TRUNK2=1 \
+                         HIGIG_TRUNK_ID3=1 \
+                         HIGIG_TRUNK3=1 \
+                         HIGIG_TRUNK_BITMAP1=0xc \
+                         ACTIVE_PORT_BITMAP=0xf"
+
+# Dual Raptor/Raven boards
+if $?raven_eb_48p || $?rap24_ref \
+    "local rcpu_system 1"
+if $?unit0 && $?rcpu_system \
+   "stkmode modid=0"
+if $?unit1 && $?rcpu_system \
+   "stkmode modid=1"
+
+# LM fb48 platform setup
+# (enabled by adding the property "lm48p=1")
+#
+if $?unit0 && $?firebolt_any && $?lm48p || $?lm48p_D \
+   "stkmode modid=0"
+
+if $?unit1 && $?firebolt_any && $?lm48p || $?lm48p_D \
+   "stkmode modid=1"
+
+# Set Firebolt POE power level 170(total) - 110(switch) = 60
+if $?fbpoe \
+        "local poepower 60"
+
+# Set Draco15 POE power level 170(total) - 80(switch) = 90
+if $?drac15\
+        "local poepower 90"
+
+# Hurricane3 BCM956160R setup
+# Notes:
+#       BCM56160 unit-0 higig port (port 29,30) is connected
+#       to BCM56160 Unit-1 higig port (port 26,27)
+#
+
+if $?bcm956160r && $?unit0  \
+  "stkmode modid=0; \
+   w modport_map 1 1 HIGIG_PORT_BITMAP=0x60000000; \
+   trunk add id=128 r=3 pbm=hg0-hg1"
+
+if $?bcm956160r && $?unit1  \
+  "stkmode modid=1; \
+   w modport_map 0 1 HIGIG_PORT_BITMAP=0xc000000; \
+   trunk add id=128 r=3 pbm=hg0-hg1"
+
+# if enable_poe is set, then enable the POE processor for
+# either Firebolt or Draco15 platform
+if $?unit0 && $?enable_poe && $?fbpoe || $?drac15 \
+        "$echo rc: Enabling POE ...; \
+         poesel reset; \
+         i2c probe quiet; \
+         xpoe verbose off; \
+         xpoe power $poepower; \
+         xpoe verbose on; \
+         poesel enable"
+
+# mark this unit so that subsequent rc runs are quiet
+setenv rc$unit 1
+
+if $?macsec '\
+    macsec sync; \
+    $echo "rc: MACSEC CLI Enabled"'
+
+# cache a copy of rc.soc in memory
+rccache addq rc.soc
+
+# setup chassis if requested
+if !"expr $?autochassis2 && $unit == $units - 1" \
+    "setenv chassis2_no_rc 1; \
+     rcload c2switch.soc; \
+     setenv chassis2_no_rc; \
+    "
+
+# start stacking if requested
+if !"expr $?autostack && $unit == $units - 1" \
+	"rcload stk.soc"
+
+if !"expr $?aedev + 0" && !"expr $unit == $units - 1" \
+       "aedev init"
+
+# hurricane 48p FE platform LED setup for 56146_A0 and 56147_A0 board
+# (enabled by adding the property "fe_hu_48p=1")
+#
+if $?fe_hu_48p && $?BCM56146 || $?BCM56147 \
+    "phy fe0 0x1f 0x008b; \
+     phy fe0 0x1a 0x3f09;\
+     phy fe8 0x1f 0x008b; \
+     phy fe8 0x1a 0x3f09; \
+     phy fe16 0x1f 0x008b; \
+     phy fe16 0x1a 0x3f09"
+
+# enable LED matrix mode for PHY54292 on BCM953411K/R
+if $?bcm953411 \
+    "rcload gh_bcm953411x.soc"
+
+if $?simulator \
+    'echo -n "Chip init finishes at: ";date'
diff --git a/bal_release/3rdparty/bcm-sdk/rc/svk4/reload.soc b/bal_release/3rdparty/bcm-sdk/rc/svk4/reload.soc
new file mode 100644
index 0000000..f48a50e
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/rc/svk4/reload.soc
@@ -0,0 +1,8 @@
+#
+# $Id: reload-dune.soc,v 1.1 2011/12/13 15:37:13 assaf Exp $
+#
+# $Copyright: (c) 2006 Broadcom Corp.
+# All Rights Reserved.$
+
+setenv warmboot 1
+rcload rc.soc
diff --git a/bal_release/3rdparty/bcm-sdk/rc/svk4/start_ing.sh b/bal_release/3rdparty/bcm-sdk/rc/svk4/start_ing.sh
new file mode 100755
index 0000000..6f79fb3
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/rc/svk4/start_ing.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+/broadcom/mk_bcm_node.sh
+/broadcom/bcm.user
+
diff --git a/bal_release/3rdparty/bcm-sdk/sdk-bal-6.5.7.patch b/bal_release/3rdparty/bcm-sdk/sdk-bal-6.5.7.patch
new file mode 100644
index 0000000..43f8f01
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/sdk-bal-6.5.7.patch
@@ -0,0 +1,1394 @@
+diff -Naur /projects/NTSW_SW_PRJS/ExternalReleases/BCM/6.5.7/ga/sdk-all-6.5.7/include/appl/diag/bal_cmd.h sdk-all-6.5.7/include/appl/diag/bal_cmd.h
+--- /projects/NTSW_SW_PRJS/ExternalReleases/BCM/6.5.7/ga/sdk-all-6.5.7/include/appl/diag/bal_cmd.h	1970-01-01 02:00:00.000000000 +0200
++++ sdk-all-6.5.7/include/appl/diag/bal_cmd.h	2017-01-26 11:24:18.251278489 +0200
+@@ -0,0 +1,22 @@
++/******************************************************************************
++ *  
++ *  Copyright 2016 - Broadcom Corporation
++ *    
++ ******************************************************************************/  
++
++#ifndef BAL_CMD_H
++#define BAL_CMD_H
++
++#include <appl/diag/shell.h>
++ 
++static char cmd_bal_usage[] = 
++    "bal [cmd]\n\t"
++    "Commands:\n\t"
++    "  trap_target <target_ip:port>  - Set a remote ip and port to receive local cpu trapped packets\n\t"
++    "  trap_receive <sender_ip:port> - Set a local port to receive remote sender_ip messages \n\t"
++    "\n\t"
++    "When called with no parameters, initialize the BAL BCM Api and enter the bal sub-shell.\n";
++
++cmd_result_t cmd_bal(int unit, args_t *args);
++
++#endif    
+diff -Naur /projects/NTSW_SW_PRJS/ExternalReleases/BCM/6.5.7/ga/sdk-all-6.5.7/include/bcm/rx.h sdk-all-6.5.7/include/bcm/rx.h
+--- /projects/NTSW_SW_PRJS/ExternalReleases/BCM/6.5.7/ga/sdk-all-6.5.7/include/bcm/rx.h	2016-12-01 05:15:05.000000000 +0200
++++ sdk-all-6.5.7/include/bcm/rx.h	2017-01-26 11:30:12.960122166 +0200
+@@ -1789,5 +1789,18 @@
+     bcm_rx_cosq_mapping_t *rx_cosq_mapping);
+ 
+ #endif /* BCM_HIDE_DISPATCHABLE */
++ 
++/*
++ * BAL patch to allow RPC register packet receive callback
++ */
++typedef void (*dpp_rx_cb_f) (
++        int unit,
++        int port,
++        int reason,
++        unsigned char *pkt,
++        int pkt_len);
++
++extern
++void dpp_dft_tx_cb(int unit, int port, int reason, unsigned char *payload, int payload_len);
+ 
+ #endif /* __BCM_RX_H__ */
+diff -Naur /projects/NTSW_SW_PRJS/ExternalReleases/BCM/6.5.7/ga/sdk-all-6.5.7/make/Make.config sdk-all-6.5.7/make/Make.config
+--- /projects/NTSW_SW_PRJS/ExternalReleases/BCM/6.5.7/ga/sdk-all-6.5.7/make/Make.config	2016-12-01 05:16:16.000000000 +0200
++++ sdk-all-6.5.7/make/Make.config	2017-01-26 11:34:39.553494599 +0200
+@@ -32,6 +32,13 @@
+ # }
+ endif
+ 
++ifeq (${BUILD_ING_AS_LIB},1)
++CFGFLAGS += -DBUILD_ING_AS_LIB -DNO_CTRL_C
++endif
++ifeq (${CONFIG_SWITCH_RPC},y)
++CFGFLAGS += -DCONFIG_SWITCH_RPC
++endif
++
+ #
+ # Set a default target if one is not set. If override-target is set,
+ # then the target will become override-target and a warning is printed
+diff -Naur /projects/NTSW_SW_PRJS/ExternalReleases/BCM/6.5.7/ga/sdk-all-6.5.7/make/Make.local.bal sdk-all-6.5.7/make/Make.local.bal
+--- /projects/NTSW_SW_PRJS/ExternalReleases/BCM/6.5.7/ga/sdk-all-6.5.7/make/Make.local.bal	1970-01-01 02:00:00.000000000 +0200
++++ sdk-all-6.5.7/make/Make.local.bal	2017-01-26 11:36:43.722735752 +0200
+@@ -0,0 +1,30 @@
++#FEATURE_LIST := CINT L3 I2C MEM_SCAN EDITLINE TEST BCM_SAL_PROFILE CUSTOMER CHASSIS RCPU ATPTRANS_SOCKET DUNE_UI INTR APIMODE PTP KBP
++FEATURE_LIST := CINT L3 I2C MEM_SCAN EDITLINE TEST BCM_SAL_PROFILE CHASSIS RCPU ATPTRANS_SOCKET DUNE_UI INTR APIMODE PTP 
++
++DEBUG_CFLAGS=-Wdeclaration-after-statement
++
++BCM_PTL_SPT=1
++
++ALL_DPP_CHIPS = 1
++ALL_DFE_CHIPS = 1
++
++# Includes XML library and enables use of "diag pp dump" utility for PP import/export facilities 
++DATAIO_SUPPORT = 1
++KERN_VER=3.7.10
++
++CFGFLAGS += -DSTATIC=static
++CFGFLAGS += -DBCM_WARM_BOOT_SUPPORT
++CFGFLAGS += -DBCM_WARM_BOOT_SUPPORT_SW_DUMP
++CFGFLAGS += -DBCM_EASY_RELOAD_WB_COMPAT_SUPPORT
++CFGFLAGS += -DBCM_CONTROL_API_TRACKING
++CFGFLAGS += -D__DUNE_LINUX_BCM_CPU_PCIE__
++CFGFLAGS += -DPHYS_ADDRS_ARE_64BITS -DSAL_BDE_32BIT_USER_64BIT_KERNEL
++CFGFLAGS += -D_SIMPLE_MEMORY_ALLOCATION_=0 -DUSE_LINUX_BDE_MMAP=1
++CFGFLAGS += -DSCACHE_CRC_CHECK
++
++CFGFLAGS += -DBROADCOM_SVK
++
++#KBP_DEVICE := KBP_ALG
++
++VENDOR_LIST=CUSTOMER78 BROADCOM DNX
++
+diff -Naur /projects/NTSW_SW_PRJS/ExternalReleases/BCM/6.5.7/ga/sdk-all-6.5.7/make/Makefile.unix-linux sdk-all-6.5.7/make/Makefile.unix-linux
+--- /projects/NTSW_SW_PRJS/ExternalReleases/BCM/6.5.7/ga/sdk-all-6.5.7/make/Makefile.unix-linux	2016-12-01 05:16:17.000000000 +0200
++++ sdk-all-6.5.7/make/Makefile.unix-linux	2017-01-26 13:16:35.035828648 +0200
+@@ -47,7 +47,7 @@
+ 
+ 
+ # Linux
+-LIBS= -lnsl -lpthread -lm -lrt
++LIBS= -lnsl -pthread -lm -lrt
+ CFGFLAGS += -DBCM_PLATFORM_STRING=\"unix-linux\"
+ 
+ # For GCC 4.2.x, add -Wno-address
+diff -Naur /projects/NTSW_SW_PRJS/ExternalReleases/BCM/6.5.7/ga/sdk-all-6.5.7/make/Makefile.unix-linux-64 sdk-all-6.5.7/make/Makefile.unix-linux-64
+--- /projects/NTSW_SW_PRJS/ExternalReleases/BCM/6.5.7/ga/sdk-all-6.5.7/make/Makefile.unix-linux-64	2016-12-01 05:16:17.000000000 +0200
++++ sdk-all-6.5.7/make/Makefile.unix-linux-64	2017-01-26 13:17:35.959446054 +0200
+@@ -48,7 +48,7 @@
+ FEATURE_EXCLUDE_LIST = $(sort $(_FEATURE_EXCLUDE_LIST))
+ 
+ # Linux
+-LIBS= -lnsl -lpthread -lm -lrt
++LIBS= -lnsl -pthread -lm -lrt
+ 
+ CFGFLAGS += -DBCM_PLATFORM_STRING=\"unix-linux-64\"
+ 
+diff -Naur /projects/NTSW_SW_PRJS/ExternalReleases/BCM/6.5.7/ga/sdk-all-6.5.7/make/Makefile.unix-linux~ sdk-all-6.5.7/make/Makefile.unix-linux~
+--- /projects/NTSW_SW_PRJS/ExternalReleases/BCM/6.5.7/ga/sdk-all-6.5.7/make/Makefile.unix-linux~	1970-01-01 02:00:00.000000000 +0200
++++ sdk-all-6.5.7/make/Makefile.unix-linux~	2017-01-26 13:16:34.973829038 +0200
+@@ -0,0 +1,60 @@
++# $Id: Makefile.unix-linux,v 1.11 Broadcom SDK $
++# $Copyright: (c) 2016 Broadcom.
++# Broadcom Proprietary and Confidential. All rights reserved.$
++#
++# Build rules for Linux/x86 (Little Endian) with PLI support
++
++include ${SDK}/make/Makefile.unix-common
++
++# When using GDB on Linux, you may want to use "setenv GDB 1" to disable
++# editline.  For best results put "set environment GDB 1" in your .gdbinit.
++
++# Linux-specific Configuration Flags
++
++ENDIAN_DEF = -DLE_HOST=1
++
++# Notes on AMD Athlon 64-bit
++#
++# Compiles on x86_64 default to 32-bit emulation unless 64-bit mode
++# is specifically requested in Make.local by uncommenting the two defines
++# for PTRS_ARE_64BITS and LONGS_ARE_64BITS.
++#
++# Note that the code base will compile in 64-bit mode, but will not run
++# correctly because malloc() can return values >32 bits and the PLISIM
++# protocol only supports 32-bit addresses.
++
++ifeq ($(shell uname -m),x86_64)
++ ifeq (,$(findstring -DPTRS_ARE_64BITS,$(CFGFLAGS)))
++  CC = ${HCC} -m32
++  CXX = g++ -m32
++ else
++  CC = ${HCC}
++  CXX = g++
++ endif
++endif
++
++LD	= ld
++AR	= ar
++ARFLAGS	= -rc
++STRIP	= strip
++RANLIB  = ranlib
++
++# Filter out features that cannot or should not be supported in Linux
++ifdef ESW_CHIPS
++_FEATURE_EXCLUDE_LIST += OOB_RCPU
++endif
++FEATURE_EXCLUDE_LIST = $(sort $(_FEATURE_EXCLUDE_LIST))
++
++
++# Linux
++LIBS= -lnsl -lpthread -lm -lrt
++CFGFLAGS += -DBCM_PLATFORM_STRING=\"unix-linux\"
++
++# For GCC 4.2.x, add -Wno-address
++GCC_MAJOR_VER  = $(shell echo |$(CC) -dM -E -| grep __GNUC__ | cut -d' ' -f3)
++GCC_MINOR_VER  = $(shell echo |$(CC) -dM -E -| grep __GNUC_MINOR__ | cut -d' ' -f3)
++ifeq (${GCC_MAJOR_VER}, 4)
++ifeq (${GCC_MINOR_VER}, 2)
++BCM_EXTRA_CC_CFLAGS   = -Wno-address
++endif
++endif
+diff -Naur /projects/NTSW_SW_PRJS/ExternalReleases/BCM/6.5.7/ga/sdk-all-6.5.7/make/Makefile.unix-netbsd sdk-all-6.5.7/make/Makefile.unix-netbsd
+--- /projects/NTSW_SW_PRJS/ExternalReleases/BCM/6.5.7/ga/sdk-all-6.5.7/make/Makefile.unix-netbsd	2016-12-01 05:16:17.000000000 +0200
++++ sdk-all-6.5.7/make/Makefile.unix-netbsd	2017-01-26 13:13:03.884156251 +0200
+@@ -27,7 +27,7 @@
+ FEATURE_EXCLUDE_LIST = $(sort $(_FEATURE_EXCLUDE_LIST))
+ 
+ # NetBSD
+-LIBS= -lpthread -lm -lsem
+++LIBS= -pthread -lm -lsem
+ 
+ CFGFLAGS += -DBCM_PLATFORM_STRING=\"unix-netbsd\"
+ 
+diff -Naur /projects/NTSW_SW_PRJS/ExternalReleases/BCM/6.5.7/ga/sdk-all-6.5.7/make/Makefile.unix-user sdk-all-6.5.7/make/Makefile.unix-user
+--- /projects/NTSW_SW_PRJS/ExternalReleases/BCM/6.5.7/ga/sdk-all-6.5.7/make/Makefile.unix-user	2016-12-01 05:16:17.000000000 +0200
++++ sdk-all-6.5.7/make/Makefile.unix-user	2017-01-26 13:14:29.289618967 +0200
+@@ -42,7 +42,7 @@
+ OSTYPE = LINUX
+ 
+ # Linux
+-LIBS= -lnsl -lpthread -lm -lrt
++LIBS= -lnsl -pthread -lm -lrt
+ 
+ #
+ # ORIGIN is used to Optionally select different CFLAGS. It is used to import
+diff -Naur /projects/NTSW_SW_PRJS/ExternalReleases/BCM/6.5.7/ga/sdk-all-6.5.7/src/appl/diag/bal_cmd.c sdk-all-6.5.7/src/appl/diag/bal_cmd.c
+--- /projects/NTSW_SW_PRJS/ExternalReleases/BCM/6.5.7/ga/sdk-all-6.5.7/src/appl/diag/bal_cmd.c	1970-01-01 02:00:00.000000000 +0200
++++ sdk-all-6.5.7/src/appl/diag/bal_cmd.c	2017-01-26 11:38:20.574144410 +0200
+@@ -0,0 +1,837 @@
++/******************************************************************************
++ * 
++ * Copyright 2015- Broadcom Corporation
++ * This program is the proprietary software of Broadcom Corporation
++ * and/or its licensors, and may only be used, duplicated, modified or
++ * distributed pursuant to the terms and conditions of a separate,
++ * written license agreement executed between you and Broadcom (an
++ * "Authorized License").  Except as set forth in an Authorized License,
++ * Broadcom grants no license (express or implied), right to use, or
++ * waiver of any kind with respect to the Software, and Broadcom
++ * expressly reserves all rights in and to the Software and all
++ * intellectual property rights therein.  IF YOU HAVE NO AUTHORIZED
++ * LICENSE, THEN YOU HAVE NO RIGHT TO USE THIS SOFTWARE IN ANY WAY, AND
++ * SHOULD IMMEDIATELY NOTIFY BROADCOM AND DISCONTINUE ALL USE OF THE
++ * SOFTWARE.
++ *   
++ * Except as expressly set forth in the Authorized License,
++ *   
++ * 1.  This program, including its structure, sequence and organization,
++ * constitutes the valuable trade secrets of Broadcom, and you shall use
++ * all reasonable efforts to protect the confidentiality thereof, and to
++ * use this information only in connection with your use of Broadcom
++ * integrated circuit products.
++ *    
++ * 2.  TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED
++ * "AS IS" AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES,
++ * REPRESENTATIONS OR WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR
++ * OTHERWISE, WITH RESPECT TO THE SOFTWARE.  BROADCOM SPECIFICALLY
++ * DISCLAIMS ANY AND ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY,
++ * NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES,
++ * ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR
++ * CORRESPONDENCE TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING OUT
++ * OF USE OR PERFORMANCE OF THE SOFTWARE.
++ *   
++ * 3.  TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM
++ * OR ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL, INCIDENTAL, SPECIAL,
++ * INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER ARISING OUT OF OR IN ANY WAY
++ * RELATING TO YOUR USE OF OR INABILITY TO USE THE SOFTWARE EVEN IF
++ * BROADCOM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES; OR (ii)
++ * ANY AMOUNT IN EXCESS OF THE AMOUNT ACTUALLY PAID FOR THE SOFTWARE
++ * ITSELF OR U.S. $1, WHICHEVER IS GREATER. THESE LIMITATIONS SHALL APPLY
++ * NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY LIMITED
++ * REMEDY.
++ *   
++ ******************************************************************************/
++ 
++/**
++ * @file bal_cmd.c_
++ * @brief BAL ING CLI commands support SDK access that is not supported by regular CLI
++ * The BAL CLI command line interface is implemented by the CLI
++ * module. The CLI module can be used as the configuration and management
++ * interface for the BAL Switch Util. BAL Switch Util configuration can be specified
++ * using a series of BAL CLI commands. The main purpose of the CLI is to provide
++ * ING API access that are not normally available through public API, such as RPC
++ * access to ING features that are deep in SDK stack.
++ * 
++ **/
++
++ /*@{*/
++ 
++/* --- system includes --- */
++
++#include <unistd.h>
++#include <stdio.h>
++#include <string.h>
++#include <ctype.h>
++#include <stdlib.h>
++#include <appl/diag/shell.h>
++#include <appl/diag/parse.h>
++#include <sal/appl/sal.h>
++#include <sal/appl/editline/editline.h>
++#include <errno.h>
++#include <sys/types.h>
++#include <sys/socket.h>
++#include <netinet/in.h>
++#include <arpa/inet.h>
++#include <bcm/rx.h>
++#include <bcm/error.h>
++#include <bcm/stack.h>
++
++#define BAL_CLI_VERSION  "1.0"
++
++/* --- project includes --- */
++extern int start_trap_service(char *ip_port);
++extern int start_host_listener(char *ip_port);
++
++/* --- local static constants ---*/
++#define BAL_SWITCH_CLI_IP_LEN 128
++typedef struct bal_switch_cli_cfg_t
++{
++   char trap_target[BAL_SWITCH_CLI_IP_LEN];           /* remote ip:port address where the trapped packet sent */
++   char trap_receive[BAL_SWITCH_CLI_IP_LEN];          /* remote ip where the local port receive message  */
++}bal_switch_cli_cfg_t;
++
++static bal_switch_cli_cfg_t g_cur_ctx;
++
++static bal_switch_cli_cfg_t *gp_cur_ctx = &g_cur_ctx;
++
++enum
++{
++    BAL_REASON_SEND_TO_NNI = 1,
++    BAL_REASON_SEND_TO_PON
++};
++      
++/**
++ *  * @brief Maximum number of arguments supported by the 'bal' CLI command
++ *   */
++#define MAX_ARGS 10
++
++/**
++ ** @brief BAL CLI help text
++ **/
++#define HELP                                                           \
++"exit          - Exit the BAL sub-shell\n"                             \
++"show          - Show current settings\n"                              \
++"trap_target   - register callback and send CPU trapped packets to remote IP:PORT\n"              \
++"trap_receive  - Start a receiving thread to listen on PORT for messages from remote IP \n"       \
++
++
++/**
++ ** @brief BAL Switch App help text specific to 'show' commands
++ **/
++#define SHOW_HELP                                               \
++"show config   - Display the BAL CLI configuration\n"           \
++"show version  - Display the BAL BCM SDK version\n"             \
++
++
++/**
++ *  @brief CLI prompt string
++ * */
++static char g_bal_cli_prompt[8];
++
++
++/*
++ * @brief BAL Switch App help text
++ *
++ * @return char*  A string containing the prompt to display
++ **/
++static char *bal_set_prompt()
++{
++    sprintf(g_bal_cli_prompt, "bal>");
++    return g_bal_cli_prompt;
++}
++
++/**
++ *  @brief Parse a line of input into a POSIX-like argument list
++ * 
++ ** @param parsed_input  Unparsed line of CLI input
++ ** @param argc         Pointer to the number of arguments in the list
++ ** @param argv         Pointer to the argument list
++ ** @return int         Number of argument that has been successfully parsed
++ **/
++int bal_parse_input (char *parsed_input, int *argc, char **argv)
++{
++    char *s;
++    int largc;
++
++    largc = 0;
++    s = parsed_input;
++    while ((largc < MAX_ARGS) && (s != NULL) && (*s != 0))
++    {
++        /* Skip leading whitespace */
++        s += strspn (s, " \t");
++
++        /* Non-whitespace found */
++        if (*s != 0)
++        { 
++            /* Add the string to the argument list */
++            argv[largc++] = s;
++
++            /* Find the trailing whitespace (if any...) */
++            s = strpbrk (s, " \t");
++            if (s != NULL)
++            { 
++                /* Found some white space, null out the first white
++                   space character. */ 
++                if (largc < MAX_ARGS)
++                {
++                    *s++ = 0;
++                }
++
++                /* Otherwise, don't null the last param, to pass it on
++                 * command to parse themselves 
++                 */
++            }
++        }
++    }
++
++    *argc = largc;
++
++    return largc;
++}
++
++ /* BAL packet_in function and definitions */
++ typedef struct
++  {
++      int socket;
++      struct sockaddr_in addr;
++  }trap_target_t;
++  static trap_target_t s_target_device;
++  static int target_init = 0;
++  #define DEFAULT_SOP_ADJ    2 
++  #define DEFAULT_REASON_ADJ 4 
++
++  bcm_rx_t trap_service_cb(int unit, bcm_pkt_t *pkt, void *cookie)
++  {
++
++    uint8 *p_payload;
++    int dpp_hdr_len, payload_len, n_sent;
++    trap_target_t *p_target_device = (trap_target_t *)cookie;
++    uint16 *p_src_port, def_sop;
++    uint32 *p_reason, def_reason;
++    /* skip the dpp header - 19 bytes */
++    p_payload = pkt->_pkt_data.data;
++    dpp_hdr_len = pkt->tot_len - pkt->pkt_len + 0;
++    payload_len = pkt->tot_len - dpp_hdr_len;
++    p_payload += dpp_hdr_len;
++
++    /*
++     * replace SOP_ADJ bytes with source port info before send
++     * assuming DEFAULT_SOP_ADJ is always 2 bytes
++     * replace SOP_REASON bytes with trap reason - TBD
++     */
++     p_src_port = (uint16 *)(p_payload - DEFAULT_SOP_ADJ);
++     /* save the original info */
++     def_sop = *(p_src_port);
++     /* replace 2 bytes with ingress port info */
++     *p_src_port = htons(pkt->src_port & 0xff); /* pkt->src_port is 1 byte long */
++
++     p_reason = (uint32 *)(p_payload - DEFAULT_SOP_ADJ - DEFAULT_REASON_ADJ);
++     /* save the original info */
++     def_reason = *(p_reason);
++     /* replace 4 bytes with reason code */
++     *p_reason = htonl(pkt->rx_trap_data);
++
++     n_sent = sendto(p_target_device->socket,
++                     p_payload-DEFAULT_SOP_ADJ-DEFAULT_REASON_ADJ,
++                     payload_len+DEFAULT_SOP_ADJ+DEFAULT_REASON_ADJ, 0,
++                     (struct sockaddr *) &(p_target_device->addr),
++                     sizeof(struct sockaddr_in));
++
++     /* put back the original values */
++     *p_src_port = def_sop;
++     *p_reason   = def_reason;
++
++     if (n_sent > 0)
++         return BCM_RX_HANDLED;
++     else
++         return BCM_RX_NOT_HANDLED;
++  }
++
++ int start_trap_service( char *ip_port) 
++  {
++      int ret, port;
++      char ip[80], *col;
++
++      if(target_init == 0)
++      {
++          if((s_target_device.socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0)
++          {
++              return -1;
++          }
++          target_init = 1;
++      }
++      /* fill in traget device info - ip_port has the format of ip:port, so look for ":" for separation */
++      col = strstr(ip_port, ":");
++      port = atoi(col+1);
++      /* terminate the string at the end of IP address */
++      *col = 0;
++      strcpy(ip, ip_port);
++
++      s_target_device.addr.sin_family = AF_INET;
++      s_target_device.addr.sin_port = htons(port);
++      s_target_device.addr.sin_addr.s_addr = inet_addr(ip);
++
++      ret = bcm_rx_register(0, "Cpu Traps", trap_service_cb, 50, (void *)&s_target_device, BCM_RCO_F_ALL_COS);
++      return ret;
++  }
++
++/**
++ ** @brief CLI parser and handler for 'trap_target' commands
++ **
++ ** This routine handles the 'bal trap_target [args]' CLI app configuration
++ ** commands.
++ **
++ ** @param argc  Pointer to the number of arguments in the list
++ ** @param argv  Pointer to the argument list
++ * */
++void bal_bcm_cli_trap_target(int argc, char **argv)
++{
++
++    if (argc != 1)
++    {
++        printf("Invalid arguments\n");
++        return;
++    }
++
++    {
++        strcpy(gp_cur_ctx->trap_target, argv[0]);
++        /* Configure the trap target with the specified setting. */
++        if (start_trap_service(argv[0]) != 0)
++        {
++            printf("Error, failed to start trap service on '%s'\n", 
++                   argv[0]);
++        }
++    }
++}
++
++typedef struct
++{
++      int udp_port;
++      sal_thread_t threadid;
++      dpp_rx_cb_f callback;
++}trap_context_t;
++
++  static trap_context_t trap_ctx = {0};
++  static int listener_init = 0;
++
++#define MAX_RX_PACKET_SIZE (2000)
++
++static void host_receive(void *p_user_data)
++{
++    int rc;
++    int sUDPSocket;
++    unsigned char cBuffer[MAX_RX_PACKET_SIZE];
++    int nBytesRecv = 0;
++    int nBufSize = MAX_RX_PACKET_SIZE;
++    socklen_t nReceiveAddrSize = 0;
++    int maxfd;
++    fd_set read_fds;
++    struct timeval tv;
++    uint16 *p_dst_port, dst_port;
++    trap_context_t *p_trap_ctx = (trap_context_t *)p_user_data;
++    uint32 *p_reason, reason;
++    struct sockaddr_in sReceiveFromAddr;
++
++    /* Create a connectionless socket */
++    sUDPSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
++    /* Check to see if we have a valid socket */
++    if(sUDPSocket < 0)
++    {
++        printf(" host_receive:create socket failed\n");
++        return;
++    }
++
++    /* Setup a bind on the socket, telling us what port and
++     * adapter to receive datagrams on.
++     * NOTE: we accept UDP packets from any sender as long
++     * as they arrive on the specified port.
++     */
++     memset(&sReceiveFromAddr, 0, sizeof(struct sockaddr_in));
++
++     sReceiveFromAddr.sin_family = AF_INET;
++     sReceiveFromAddr.sin_port = htons(p_trap_ctx->udp_port);
++     sReceiveFromAddr.sin_addr.s_addr = htonl(INADDR_ANY);
++
++     rc = bind(sUDPSocket, (struct sockaddr *)&sReceiveFromAddr,
++                            sizeof(struct sockaddr_in));
++     if (rc < 0)
++     {
++          printf("host_receive:bind failed\n");
++          return;
++     }
++
++     // Receive a datagram from another device
++     while(1)
++     {
++         FD_ZERO(&read_fds);
++         FD_SET(sUDPSocket, &read_fds);
++         maxfd = sUDPSocket;
++         /* Set the timeout */
++         tv.tv_sec  = 1;
++         tv.tv_usec = 0;  /*  1 seconds */
++         rc = select(maxfd + 1, &read_fds, NULL, NULL, &tv);
++
++         if (rc < 0)
++         {
++             printf(" host_receive:select failed err = %d\n", rc);
++             break;
++         }
++         if (rc == 0)
++         {
++             fflush(stdout);
++             continue;
++         }
++         // Get the datagram
++                                                                                                                                          nBytesRecv = recvfrom(sUDPSocket, cBuffer, nBufSize, 0,
++                               (struct sockaddr *) &sReceiveFromAddr,
++                               &nReceiveAddrSize);
++                                                                                                                                          printf("Got %d bytes message \n", nBytesRecv);
++                                                                                                                                          /* the first 4 bytes are reason */
++         p_reason = (uint32 *)(cBuffer);
++         reason = ntohl(*p_reason);
++
++         /* the next 2 bytes are destination port */
++         p_dst_port = (uint16 *)(cBuffer + DEFAULT_REASON_ADJ);
++         dst_port = ntohs(*p_dst_port);
++
++         /* call the register callback here - set unit to 0 as it is don't care */
++         if(p_trap_ctx->callback)
++         {
++             p_trap_ctx->callback(0,
++                                  dst_port,
++                                  reason,
++                                  cBuffer+DEFAULT_SOP_ADJ+DEFAULT_REASON_ADJ,
++                                  nBytesRecv-DEFAULT_SOP_ADJ-DEFAULT_REASON_ADJ);
++         }
++       }
++       close(sUDPSocket);
++
++       return;
++}
++
++
++void dpp_dft_tx_cb(int unit, int dst_port, int reason, unsigned char *payload, int payload_len)
++{
++
++    int i;
++    bcm_pkt_t *tx_pkt;
++    uint8_t tx_pkt_dune_header[6];
++    uint32_t tx_pkt_offset = 0;
++    bcm_gport_t sys_gport;
++    bcm_gport_t local_gport;
++    bcm_port_t sysport = 0;
++    bcm_gport_t local_cpu_port = 0;
++    int sdk_rc;
++
++    printf("Msg from core:\n");
++    printf(" dst port:%d, rcv reason: 0x%x, ", dst_port, reason);
++
++    /* dump out first  32 bytes */
++    printf("payload (first 12 bytes): ");
++    for(i=0; i<12; i++)
++    {
++      if(i%6 == 0 && i) printf(" ");
++      printf("%02x", payload[i]);
++    }
++    printf("\n");
++
++
++    /* Map the local port number to a CPU "system" port. */
++    local_gport = dst_port;
++    sdk_rc = bcm_stk_gport_sysport_get(unit, local_gport, &sys_gport);
++    if (sdk_rc != BCM_E_NONE)
++    {
++      /* Error */
++      printf("%s(): [PacketOut] bcm_stk_gport_sysport_get returned with failure code '%s'\n",
++             __FUNCTION__, bcm_errmsg(sdk_rc));
++      return;
++    }
++
++    sysport = sys_gport & 0xff;
++
++       /* Get the local CPU port */
++    sdk_rc = bcm_port_local_get(unit, BCM_GPORT_LOCAL_CPU, &local_cpu_port);
++    if (sdk_rc != BCM_E_NONE)
++    {
++      /* Error */
++      printf("%s(): [PacketOut] bcm_port_local_get returned with failure code '%s'\n",
++             __FUNCTION__, bcm_errmsg(sdk_rc));
++      return;
++    }
++
++    /* Allocate a packet structure */
++    sdk_rc = bcm_pkt_alloc(unit, payload_len+sizeof(tx_pkt_dune_header), 0, &tx_pkt);
++
++    if (sdk_rc != BCM_E_NONE)
++    {
++      /* Error */
++      printf("%s(): [PacketOut] bcm_pkt_alloc returned with failure code '%s'\n",
++             __FUNCTION__, bcm_errmsg(sdk_rc));
++      return;
++    }
++
++    /* Set up the packet for a single block */
++    tx_pkt->call_back = 0;
++    tx_pkt->blk_count = 1;
++    tx_pkt->unit = unit;
++
++    /* Dune TM header */
++    tx_pkt->_dpp_hdr[3] = 0x00; /* channel num */
++    tx_pkt->_dpp_hdr[2] = 0x00;
++    tx_pkt->_dpp_hdr[1] = 0x00;
++    tx_pkt->_dpp_hdr[0] = 0x00;
++
++    tx_pkt->_dpp_hdr_type = 1;  /* DPP_HDR_itmh_base */
++
++    /* PTCH */
++    tx_pkt_dune_header[0] = 0x50;
++    tx_pkt_dune_header[1] = local_cpu_port;
++
++    /* ITMH */
++    tx_pkt_dune_header[2] = 0x01;
++    tx_pkt_dune_header[3] = 0x00;
++    tx_pkt_dune_header[4] = (sysport & 0xff); /* Destination port */
++    tx_pkt_dune_header[5] = 0x00;
++
++   /* Insert the DUNE header into the packet */
++    bcm_pkt_memcpy (tx_pkt, tx_pkt_offset, tx_pkt_dune_header, sizeof(tx_pkt_dune_header));
++    tx_pkt_offset += sizeof(tx_pkt_dune_header);
++
++    /* Insert the payload into the packet */
++    bcm_pkt_memcpy (tx_pkt, tx_pkt_offset, payload, payload_len);
++    tx_pkt_offset += payload_len;
++
++    printf("%s(): [PacketOut] transmitting a %d length packet, "
++           "sys_gport:0x%X, sysport: %d\n",
++           __FUNCTION__,
++           payload_len,
++           sys_gport,
++           sysport);
++
++    /* Transmit the packet */
++    sdk_rc = bcm_tx(unit, tx_pkt, NULL);
++    if (sdk_rc != BCM_E_NONE)
++    {
++      /* Error */
++      printf( "%s():  bcm_tx returned with failure code '%s'\n",
++              __FUNCTION__, bcm_errmsg(sdk_rc));
++    }
++
++    /* Cleanup */
++    bcm_pkt_free(unit, tx_pkt);
++
++    return;
++}
++
++void dpp_dft_msg_cb(int unit, int dst_port, int reason, unsigned char *payload, int payload_len)
++{
++
++    int i, len;  
++
++    printf("Msg from core:\n");
++    printf(" dst port:%d, rcv reason: 0x%x, ", dst_port, reason);
++
++    len = (payload_len > 32)? 32: payload_len;
++    
++    /* dump out first  32 bytes */
++    printf("payload (first %d bytes): ", len);
++    for(i=0; i<len; i++)
++    {
++      if(i%8 == 0 && i) printf(" ");
++      printf("%02x", payload[i]);
++    }
++    printf("\n");
++    
++    return;
++}
++
++void dpp_dft_host_cb(int unit, int dst_port, int reason, unsigned char *payload, int payload_len)
++{
++    switch(reason)
++    {
++        case BAL_REASON_SEND_TO_NNI:
++        case BAL_REASON_SEND_TO_PON:
++            dpp_dft_tx_cb(unit, dst_port, reason, payload, payload_len);
++        break;
++        default:
++            dpp_dft_msg_cb(unit, dst_port, reason, payload, payload_len);
++        break;
++    }
++    return;
++}
++
++
++
++
++
++
++
++
++
++
++/*
++ * This is the function that is called to start a thread to listen for
++ * packets sent from BAL to bcm.user for injection into the switch.
++ *  
++ * This happens when the user includes the trap_receive identifier in 
++ * the rpc.soc file that is co-resident with the bcm.user executable.
++ * 
++ ** An example line in the rpc.soc file might be:
++ *
++ *  dune "sand trap_receive 10.3.2.2:50003"
++ * 
++ *  This line specifies to listen on port 50003 and that messages will
++ *  arrive from IP 10.3.2.2 (although the IP address is not respected
++ *  in this code).
++ * 
++ *  */
++int start_host_listener(char *ip_port)
++  {
++
++    char *col;
++
++    if(listener_init != 0)
++      {
++          return 0;
++      }
++
++      /* fill in host listener info - ip_port has the format of ip:port, so look for ":" for separation */
++      col = strstr(ip_port, ":");
++      trap_ctx.udp_port = atoi(col+1);
++
++      /* register a default handler */
++      trap_ctx.callback = dpp_dft_host_cb;
++
++      /* spawn a thread to listen to socket */
++      trap_ctx.threadid = sal_thread_create("trap_rx", 8192, 50, host_receive, &trap_ctx);
++
++      if (trap_ctx.threadid == SAL_THREAD_ERROR)
++      {
++          return -2;
++      }
++
++      listener_init = 1;
++      return 0;
++  }
++                       
++/**
++ ** @brief CLI parser and handler for 'trap_receive' commands
++ **
++ ** This routine handles the 'bal trap_receive [args]' CLI app configuration
++ ** commands.
++ **
++ ** @param argc  Pointer to the number of arguments in the list
++ ** @param argv  Pointer to the argument list
++ * */
++void bal_bcm_cli_trap_receive(int argc, char **argv)
++{
++
++    if (argc != 1)
++    {
++        printf("Invalid arguments\n");
++        return;
++    }
++
++    {
++        strcpy(gp_cur_ctx->trap_receive, argv[0]);
++        /* Configure the msg receiver  with the specified setting. */
++        if (start_host_listener(argv[0]) != 0)
++        {
++            printf("Error, failed to start trap listener on '%s'\n", 
++                   argv[0]);
++        }
++    }
++}
++
++/**
++ ** @brief Handler for the 'bal show version' command
++ **
++ ** This routine handles the 'bal show version' CLI command 
++ ** and show version information on the console.
++ **
++ **/
++void bal_bcm_show_version(void)
++{
++
++    /* Print out the software revision information */
++    printf("Broadcom Software, Broadband Abstraction Layer, CLI Version %s \n", 
++           BAL_CLI_VERSION); 
++}
++
++
++/**
++ ** @brief CLI parser and handler for 'show' commands
++ **
++ ** This routine handles the 'bal show [args]' CLI app commands.
++ **
++ ** @param argc  Pointer to the number of arguments in the list
++ ** @param argv  Pointer to the argument list
++ **/
++void bal_bcm_cli_show(int argc, char **argv)
++{
++    char *show_cmd;
++       
++    show_cmd = argv[0];
++
++    if (argc == 0)
++    {
++        printf("Error: missing show sub-command.\n");
++        printf("%s", SHOW_HELP);
++        return;
++    }
++    
++    show_cmd = argv[0];
++
++    if (sal_strcasecmp(show_cmd, "config") == 0)
++    {
++        printf("BAL BCM App Configuration:\n");
++        printf("--------------------------------\n");
++        printf("trap_target ip_port  = %s\n",   gp_cur_ctx->trap_target);
++        printf("trap_receive ip_port = %s\n",   gp_cur_ctx->trap_receive);
++    }
++    else if (sal_strcasecmp(show_cmd, "version") == 0)
++    {
++        bal_bcm_show_version();
++    }
++    else if (sal_strcasecmp(show_cmd, "help") == 0 ||
++             sal_strcasecmp(show_cmd, "?") == 0)
++    {
++        printf("%s", SHOW_HELP);
++    }
++    else
++    {
++        printf("Error: unknown show command '%s'.\n", show_cmd);
++    }
++}
++
++/**
++ ** @brief Executes a command as specified by a single line of CLI input
++ **
++ ** @param argc  Pointer to the number of arguments in the list
++ ** @param argv  Pointer to the argument list
++ **/
++void DoCmd(int argc, char **argv)
++{
++    char *cmd;
++
++    if (argc == 0 || argv[0] == NULL)
++    {
++        return;
++    }
++
++    cmd = argv[0];
++
++    printf("CLI executing command '%s'\n", cmd);
++
++    if (sal_strcasecmp(cmd, "trap_target") == 0)
++    {
++       bal_bcm_cli_trap_target(argc-1, &argv[1]);
++    }
++    else if (sal_strcasecmp(cmd, "trap_receive") == 0)
++    {
++       bal_bcm_cli_trap_receive(argc-1, &argv[1]);
++    }   
++    else if (sal_strcasecmp(cmd, "show") == 0)
++    {
++        bal_bcm_cli_show(argc-1, &argv[1]);
++    }
++    else if (sal_strcasecmp(cmd, "help") == 0 ||
++             sal_strcasecmp(cmd, "?") == 0)
++    {
++        /* Display help */
++        printf("%s", HELP);
++    }
++    else if (sal_strcasecmp(cmd, "exit") == 0)
++    {
++        return;
++    }
++    else
++    {
++        printf("Unknown command '%s'\n", cmd);
++    }
++}
++
++/**
++ *  * @brief Main processing loop for the CLI
++ *   *
++ *    * @param args  Pointer to an BCM SDK formatted argument list
++ *     */
++void bal_cli_shell(args_t *args)
++{
++    char *cmd;
++    int argc = 0;
++    char *argv[MAX_ARGS];
++    static int initialized = 0;
++ 
++    if (initialized == 0)
++    {
++        bal_set_prompt();
++        initialized = 1;
++    }
++
++    if (args->a_argc > 1)
++    {
++
++        DoCmd(args->a_argc-1, &args->a_argv[1]);
++    }
++    else
++    {
++
++        printf("CLI running in interactive mode\n");
++
++        for (;;)
++        {
++            /* use ING editline library, DONT free pointer "cmd" as Linux man readline
++               suggested, it will cause a crash */            
++            cmd = readline(g_bal_cli_prompt);
++            if (*cmd != '\0')
++            {
++                add_history(cmd);
++            }
++            else
++            {
++                continue;
++            }
++            
++            if ((sal_strcasecmp(cmd, "exit") == 0) || (sal_strcasecmp(cmd, "quit") == 0))
++            {
++                printf ("exiting bal shell.\n");
++                break;
++            }
++            
++            bal_parse_input(cmd, &argc, argv);
++            
++            DoCmd(argc, argv);
++            
++        }
++    }
++
++    /* "Consume" all of the command line arguments so the bcm.user shell
++     * does not complain.
++     */
++    args->a_arg = args->a_argc;
++}
++
++/**
++ *   @brief The cmdlist hook for the BAL BCM App CLI command
++ *   
++ *   This file contains the function to "hook" into the main bcm.user
++ *   CLI.
++ *  
++ *  @param unit  SDK unit number
++ *  @param args  Pointer to an BCM SDK formatted argument list
++ *   
++ *  @return cmd_result_t
++ *  
++ * */
++cmd_result_t cmd_bal(int unit, args_t *args)
++{
++   /*  char *subcmd = ARG_GET(args); */
++
++    bal_cli_shell(args);
++
++    return CMD_OK;
++}
++/*@}*/
+diff -Naur /projects/NTSW_SW_PRJS/ExternalReleases/BCM/6.5.7/ga/sdk-all-6.5.7/src/appl/diag/cmdlist.c sdk-all-6.5.7/src/appl/diag/cmdlist.c
+--- /projects/NTSW_SW_PRJS/ExternalReleases/BCM/6.5.7/ga/sdk-all-6.5.7/src/appl/diag/cmdlist.c	2016-12-01 05:16:25.000000000 +0200
++++ sdk-all-6.5.7/src/appl/diag/cmdlist.c	2017-01-26 12:04:04.992722758 +0200
+@@ -57,6 +57,7 @@
+ 
+ #include <appl/diag/diag.h>
+ #include <appl/diag/cmdlist.h>
++#include <appl/diag/bal_cmd.h>
+ 
+ cmd_t *cur_cmd_list[SOC_MAX_NUM_DEVICES];
+ int cur_cmd_cnt[SOC_MAX_NUM_DEVICES];
+@@ -98,6 +99,9 @@
+      "Attach SOC device(s)" },
+     {"BackGround",      sh_bg,                 sh_bg_usage,
+      "Execute a command in the background."},
++   /* BAL ING API support */
++    {"BAL",             cmd_bal,              cmd_bal_usage,
++     "Run a BAL ING Api command."},
+ #if defined(INCLUDE_BCMX_DIAG)
+     {"BCM",             cmd_mode_bcm,            shell_bcm_usage,
+      "Set shell mode to BCM."},
+diff -Naur /projects/NTSW_SW_PRJS/ExternalReleases/BCM/6.5.7/ga/sdk-all-6.5.7/src/appl/diag/ctrans.c sdk-all-6.5.7/src/appl/diag/ctrans.c
+--- /projects/NTSW_SW_PRJS/ExternalReleases/BCM/6.5.7/ga/sdk-all-6.5.7/src/appl/diag/ctrans.c	2016-12-01 05:16:25.000000000 +0200
++++ sdk-all-6.5.7/src/appl/diag/ctrans.c	2017-01-26 12:23:48.883393220 +0200
+@@ -1016,6 +1016,7 @@
+     return rv;
+ }
+ 
++#define BAL_CMD_LEN 128
+ 
+ bcm_rx_t
+ ab_echo_cb(cpudb_key_t src_key,
+@@ -1033,6 +1034,8 @@
+     int mode;
+     int len;
+     CallbackOptions *options = (CallbackOptions *)cookie;
++    char bal_cmd[BAL_CMD_LEN];
++    int  bal_cmd_len;
+ 
+     if (payload == NULL) {  /* Just use first segment for string */
+         if (pkt == NULL) {
+@@ -1085,6 +1088,9 @@
+         _send_echo_pkt(client_id, payload, len, depth - 1,
+                        pkt_flags, mode, options->verbose, src_key, NULL);
+     }
++    bal_cmd_len = ((len-offset) >= BAL_CMD_LEN)? BAL_CMD_LEN-1: len-offset;
++    memcpy(bal_cmd, &payload[offset], bal_cmd_len);
++    bal_cmd[bal_cmd_len] = 0;
+ 
+     if (async_free) {
+         rv = BCM_RX_HANDLED_OWNED;
+@@ -1093,6 +1099,13 @@
+         rv = BCM_RX_HANDLED;
+     }
+ 
++    /** if string has special cli prefix !>, execute the cli command */
++    if(bal_cmd[0] == '!' && bal_cmd[1] == '>')
++    {
++        cli_out("Execute BAL CLI cmd -> %s\n", &bal_cmd[2]);
++        sh_process_command(0, &bal_cmd[2]);
++    }
++
+     return rv;
+ }
+ 
+diff -Naur /projects/NTSW_SW_PRJS/ExternalReleases/BCM/6.5.7/ga/sdk-all-6.5.7/src/appl/diag/shell.c sdk-all-6.5.7/src/appl/diag/shell.c
+--- /projects/NTSW_SW_PRJS/ExternalReleases/BCM/6.5.7/ga/sdk-all-6.5.7/src/appl/diag/shell.c	2016-12-01 05:16:25.000000000 +0200
++++ sdk-all-6.5.7/src/appl/diag/shell.c	2017-01-26 12:31:49.873427400 +0200
+@@ -214,10 +214,15 @@
+         var_unset("ihost_mode", FALSE, TRUE, FALSE);
+         var_unset("num_ucs", FALSE, TRUE, FALSE);
+     }
++    
++#ifdef CONFIG_SWITCH_RPC
++    cli_out("Running with remote hardware, skip setting unit variable\n");
++    return;
++#endif
+ 
+     if (new_unit >= 0) {
+-	    uint16 dev_id;
+-	    uint8 rev_id;
++        uint16 dev_id;
++        uint8 rev_id;
+         char *chip_string;
+         uint16 dev_id_driver;
+         uint8 rev_id_driver;
+@@ -466,7 +471,9 @@
+         /* Not attached, print out error */
+         if (override_unit)
+             return TRUE;
++#ifndef BUILD_ING_AS_LIB
+         cli_out("%s: Error: Unit %d not attached\n", pfx, u);
++#endif
+         return(FALSE);
+     }
+     return(TRUE);
+diff -Naur /projects/NTSW_SW_PRJS/ExternalReleases/BCM/6.5.7/ga/sdk-all-6.5.7/src/appl/diag/system.c sdk-all-6.5.7/src/appl/diag/system.c
+--- /projects/NTSW_SW_PRJS/ExternalReleases/BCM/6.5.7/ga/sdk-all-6.5.7/src/appl/diag/system.c	2016-12-01 05:16:25.000000000 +0200
++++ sdk-all-6.5.7/src/appl/diag/system.c	2017-01-26 12:35:45.001982454 +0200
+@@ -2379,7 +2379,13 @@
+     DISPLAY_MEM_PRINTF(("%s(): Just before BCM shell\r\n",__FUNCTION__)) ;
+ 
+     while (1) {
++      
++#ifndef BUILD_ING_AS_LIB
+     sh_process(-1, "BCM", TRUE);
++#else
++  return;
++#endif
++
+ #ifdef NO_SAL_APPL
+     return;
+ #else
+diff -Naur /projects/NTSW_SW_PRJS/ExternalReleases/BCM/6.5.7/ga/sdk-all-6.5.7/src/bcm/dpp/alloc_mngr_cosq.c sdk-all-6.5.7/src/bcm/dpp/alloc_mngr_cosq.c
+--- /projects/NTSW_SW_PRJS/ExternalReleases/BCM/6.5.7/ga/sdk-all-6.5.7/src/bcm/dpp/alloc_mngr_cosq.c	2016-12-01 05:16:47.000000000 +0200
++++ sdk-all-6.5.7/src/bcm/dpp/alloc_mngr_cosq.c	2017-01-26 12:43:50.511008400 +0200
+@@ -3644,6 +3644,7 @@
+         if (flow_type == SOC_TMC_AM_SCH_FLOW_TYPE_CONNECTOR) {
+             region =  _BCM_DPP_AM_COSQ_GET_REGION_INDEX_FROM_FLOW_INDEX(*flow_id);
+             if (nof_remote_cores != SOC_DPP_CONFIG(unit)->arad->region_nof_remote_cores[core][region]) {
++	        printf(" nof_remote_cores %d != %d at core %d region %d\n", nof_remote_cores, SOC_DPP_CONFIG(unit)->arad->region_nof_remote_cores[core][region], core, region);
+                 BCMDNX_ERR_EXIT_MSG(BCM_E_PARAM,(_BSL_BCM_MSG("Requested region doesn't support requested number of remote cores")));
+             }
+         }
+diff -Naur /projects/NTSW_SW_PRJS/ExternalReleases/BCM/6.5.7/ga/sdk-all-6.5.7/src/bcm/rpc/pack.c sdk-all-6.5.7/src/bcm/rpc/pack.c
+--- /projects/NTSW_SW_PRJS/ExternalReleases/BCM/6.5.7/ga/sdk-all-6.5.7/src/bcm/rpc/pack.c	2016-12-01 05:17:00.000000000 +0200
++++ sdk-all-6.5.7/src/bcm/rpc/pack.c	2017-01-26 12:52:51.016711143 +0200
+@@ -9975,6 +9975,9 @@
+ uint8 *
+ _bcm_pack_rx_trap_config(uint8 *buf, bcm_rx_trap_config_t *var)
+ {
++	uint8  zero_8  = 0;
++	uint32 zero_32 = 0;
++	
+ 	BCM_PACK_U32(buf, var->flags);
+ 	BCM_PACK_U32(buf, var->dest_port);
+ 	BCM_PACK_U32(buf, var->dest_group);
+@@ -9989,12 +9992,32 @@
+ 	BCM_PACK_U32(buf, var->forwarding_type);
+ 	BCM_PACK_U32(buf, var->forwarding_header);
+ 	BCM_PACK_U32(buf, var->encap_id);
+-	BCM_PACK_U32(buf, var->mirror_cmd->flags);
+-	BCM_PACK_U8(buf, var->mirror_cmd->forward_strength);
+-	BCM_PACK_U8(buf, var->mirror_cmd->copy_strength);
+-	BCM_PACK_U32(buf, var->mirror_cmd->recycle_cmd);
+-	BCM_PACK_U32(buf, var->core_config_arr->dest_port);
+-	BCM_PACK_U32(buf, var->core_config_arr->encap_id);
++	
++        if(var->mirror_cmd)
++        {
++        BCM_PACK_U32(buf, var->mirror_cmd->flags);
++        BCM_PACK_U8(buf, var->mirror_cmd->forward_strength);
++        BCM_PACK_U8(buf, var->mirror_cmd->copy_strength);
++        BCM_PACK_U32(buf, var->mirror_cmd->recycle_cmd);
++        }
++        else
++        {
++        BCM_PACK_U32(buf, zero_32);
++        BCM_PACK_U8(buf, zero_8);
++        BCM_PACK_U8(buf, zero_8);
++        BCM_PACK_U32(buf, zero_32);
++        }
++        if(var->core_config_arr)
++        {
++        BCM_PACK_U32(buf, var->core_config_arr->dest_port);
++        BCM_PACK_U32(buf, var->core_config_arr->encap_id);
++        }
++        else
++        {
++        BCM_PACK_U32(buf, zero_32);
++        BCM_PACK_U32(buf, zero_32);
++        }
++	
+ 	BCM_PACK_U32(buf, var->core_config_arr_len);
+ 	BCM_PACK_U32(buf, var->qos_map_id);
+ 	BCM_PACK_U32(buf, var->tunnel_termination_trap_strength);
+@@ -10005,6 +10028,9 @@
+ uint8 *
+ _bcm_unpack_rx_trap_config(uint8 *buf, bcm_rx_trap_config_t *var)
+ {
++	uint8  var_8, temp;
++	uint32 var_32;
++	
+ 	BCM_UNPACK_U32(buf, var->flags);
+ 	BCM_UNPACK_U32(buf, var->dest_port);
+ 	BCM_UNPACK_U32(buf, var->dest_group);
+@@ -10019,12 +10045,40 @@
+ 	BCM_UNPACK_U32(buf, var->forwarding_type);
+ 	BCM_UNPACK_U32(buf, var->forwarding_header);
+ 	BCM_UNPACK_U32(buf, var->encap_id);
+-	BCM_UNPACK_U32(buf, var->mirror_cmd->flags);
+-	BCM_UNPACK_U8(buf, var->mirror_cmd->forward_strength);
+-	BCM_UNPACK_U8(buf, var->mirror_cmd->copy_strength);
+-	BCM_UNPACK_U32(buf, var->mirror_cmd->recycle_cmd);
+-	BCM_UNPACK_U32(buf, var->core_config_arr->dest_port);
+-	BCM_UNPACK_U32(buf, var->core_config_arr->encap_id);
++	
++        if(var->mirror_cmd)
++        {
++        BCM_UNPACK_U32(buf, var->mirror_cmd->flags);
++        BCM_UNPACK_U8(buf, var->mirror_cmd->forward_strength);
++        BCM_UNPACK_U8(buf, var->mirror_cmd->copy_strength);
++        BCM_UNPACK_U32(buf, var->mirror_cmd->recycle_cmd);
++        }
++        else
++        {
++        BCM_UNPACK_U32(buf, var_32);
++        BCM_UNPACK_U8(buf, var_8);
++        BCM_UNPACK_U8(buf, var_8);
++        BCM_UNPACK_U32(buf, var_32);
++        /* make compiler happy : unsed-but-set */
++        temp = var_8;
++        var_8 = var_32;
++        var_32 = temp;
++        }
++        if(var->core_config_arr)
++        {
++        BCM_UNPACK_U32(buf, var->core_config_arr->dest_port);
++        BCM_UNPACK_U32(buf, var->core_config_arr->encap_id);
++        }
++        else
++        {
++        BCM_UNPACK_U32(buf, var_32);
++        BCM_UNPACK_U32(buf, var_32);
++        /* make compiler happy : unsed-but-set */
++        temp = var_8;
++        var_8 = var_32;
++        var_32 = temp;
++        }
++	
+ 	BCM_UNPACK_U32(buf, var->core_config_arr_len);
+ 	BCM_UNPACK_U32(buf, var->qos_map_id);
+ 	BCM_UNPACK_U32(buf, var->tunnel_termination_trap_strength);
+diff -Naur /projects/NTSW_SW_PRJS/ExternalReleases/BCM/6.5.7/ga/sdk-all-6.5.7/src/bcm/rpc/server.c sdk-all-6.5.7/src/bcm/rpc/server.c
+--- /projects/NTSW_SW_PRJS/ExternalReleases/BCM/6.5.7/ga/sdk-all-6.5.7/src/bcm/rpc/server.c	2016-12-01 05:17:00.000000000 +0200
++++ sdk-all-6.5.7/src/bcm/rpc/server.c	2017-01-26 12:59:00.779462885 +0200
+@@ -111294,11 +111294,19 @@
+ 		r_p_config = NULL;
+ 	} else {
+ 		r_p_config = &config;
++			 bcm_rx_trap_config_t_init(r_p_config);
+ 		(void) _bcm_unpack_rx_trap_config(r_pp, r_p_config);
+ 	}
+ 	bcm_rpc_free(r_pkt, r_cookie);
+ 
+-	r_ret = bcm_rx_trap_set(unit, trap_id, r_p_config);
++	if(r_p_config)
++        {
++	  r_ret = bcm_rx_trap_set(unit, trap_id, r_p_config);
++        }
++        else
++        {
++	  r_ret = BCM_E_EMPTY;
++        }
+ 
+ 	r_pkt = bcm_rpc_setup('S', (uint32 *)0, 4, r_seq, r_ret);
+ 	r_pp = r_pkt + BCM_RPC_HLEN+4;
+diff -Naur /projects/NTSW_SW_PRJS/ExternalReleases/BCM/6.5.7/ga/sdk-all-6.5.7/systems/linux/user/common/socdiag.c sdk-all-6.5.7/systems/linux/user/common/socdiag.c
+--- /projects/NTSW_SW_PRJS/ExternalReleases/BCM/6.5.7/ga/sdk-all-6.5.7/systems/linux/user/common/socdiag.c	2016-12-01 05:18:40.000000000 +0200
++++ sdk-all-6.5.7/systems/linux/user/common/socdiag.c	2017-01-26 13:02:16.000246446 +0200
+@@ -177,7 +177,11 @@
+ /*
+  * Main loop.
+  */
+-int main(int argc, char *argv[])
++#ifndef BUILD_ING_AS_LIB
++ int main(int argc, char *argv[])
++#else
++ int socdiag_main(int argc, char *argv[])
++#endif
+ {
+     int i, len;
+     char *envstr;
+@@ -260,8 +264,10 @@
+ #endif
+ 
+     diag_shell();
+-
++    
++#ifndef BUILD_ING_AS_LIB
+     linux_bde_destroy(bde);
++#endif
+ #ifdef MEMLOG_SUPPORT
+     if (memlog_lock) {
+         sal_mutex_destroy(memlog_lock);
+diff -Naur /projects/NTSW_SW_PRJS/ExternalReleases/BCM/6.5.7/ga/sdk-all-6.5.7/systems/sim/socdiag.c sdk-all-6.5.7/systems/sim/socdiag.c
+--- /projects/NTSW_SW_PRJS/ExternalReleases/BCM/6.5.7/ga/sdk-all-6.5.7/systems/sim/socdiag.c	2016-12-01 05:18:41.000000000 +0200
++++ sdk-all-6.5.7/systems/sim/socdiag.c	2017-01-26 13:09:21.033560205 +0200
+@@ -31,11 +31,16 @@
+ /*
+  * Main loop.
+  */
+-int main(int argc, char *argv[])
++#ifndef BUILD_ING_AS_LIB
++ int main(int argc, char *argv[])
++#else
++ int socdiag_main(int argc, char *argv[])
++#endif
+ {
+     char *socrc = SOC_INIT_RC;
+     char *config_file = NULL, *config_temp = NULL;
+     int len = 0;
++    FILE *fp;
+ 
+     if ((config_file = getenv("BCM_CONFIG_FILE")) != NULL) {
+         len = sal_strlen(config_file);
+@@ -56,6 +61,12 @@
+ 	exit(1);
+     }
+ 
++    if ((fp = sal_fopen("rc.soc", "r")) != NULL)
++    {
++        setenv("SOC_BOOT_SCRIPT", "rc.soc", 0);
++        sal_fclose(fp);
++    }
++
+ #ifdef DEBUG_STARTUP
+     debugk_select(DEBUG_STARTUP);
+ #endif
+
+diff -Naur /projects/NTSW_SW_PRJS/ExternalReleases/BCM/6.5.7/ga/sdk-all-6.5.7/src/bcm/rpc/rpc.c sdk-all-6.5.7/src/bcm/rpc/rpc.c
+--- /projects/NTSW_SW_PRJS/ExternalReleases/BCM/6.5.7/ga/sdk-all-6.5.7/src/bcm/rpc/rpc.c	2016-11-30 22:17:00.000000000 -0500
++++ sdk-all-6.5.7/src/bcm/rpc/rpc.c	2017-01-27 08:27:37.656186371 -0500
+@@ -268,7 +268,7 @@
+ 
+     bp = buf;
+     BCM_PACK_U32(bp, seq);
+-
++/*************** IL 2017-01-26  WHY ADD these check?? not in 6.5.6 *********
+     if (!BCM_UNIT_VALID(unit) || (BCM_CONTROL(unit)->drv_control == NULL)) {
+         _bcm_rpc_unlink_request(req);
+         sal_sem_destroy(req->sem);
+@@ -276,7 +276,7 @@
+         sal_free((void *)req);
+         return BCM_E_MEMORY;
+     }
+-
++**************************************************************************/
+     cpu = *(cpudb_key_t *)BCM_CONTROL(unit)->drv_control;
+ #ifdef BCM_RPC_ATP_TX_CALLBACK
+     /*
+
diff --git a/bal_release/3rdparty/bcm-sdk/sh/bal_switch_app.sh b/bal_release/3rdparty/bcm-sdk/sh/bal_switch_app.sh
new file mode 100755
index 0000000..e1461c7
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/sh/bal_switch_app.sh
@@ -0,0 +1,49 @@
+#!/bin/sh
+
+while [[ $# > 1 ]]
+do
+key="$1"
+
+case $key in
+    -Ca)
+    CORE_IPUDP="$2"
+    shift # past argument
+    ;;
+    -S)
+    SWITCH_IPUDP="$2"
+    shift # past argument
+    ;;
+    *)
+            # unknown option
+    echo "Unknown Options - ${key}"
+    ;;
+esac
+shift # past argument or value
+done
+
+
+CORE_IP=${CORE_IPUDP%%:*}
+CORE_UDP=${CORE_IPUDP##*:}
+SWITCH_IP=${SWITCH_IPUDP%%:*}
+SWITCH_UDP=${SWITCH_IPUDP##*:}
+
+cd /opt/bcm56450
+
+if [ ! -z "${SWITCH_IP}" ]; then
+sed -i "s/.*app.ip.*/bal set app.ip ${SWITCH_IP}/" ./bal.soc
+fi
+
+if [ ! -z "${SWITCH_UDP}" ]; then
+sed -i "s/.*app.udp_port.*/bal set app.udp_port ${SWITCH_UDP}/" ./bal.soc
+fi
+
+if [ ! -z "${CORE_IP}" ]; then
+sed -i "s/.*app.peer_ip.*/bal set app.peer_ip ${CORE_IP}/" ./bal.soc
+fi
+
+if [ ! -z "${CORE_UDP}" ]; then
+sed -i "s/.*app.peer_port.*/bal set app.peer_port ${CORE_UDP}/" ./bal.soc
+fi
+
+./kt2_init.sh
+
diff --git a/bal_release/3rdparty/bcm-sdk/sh/kt2_init.sh.svk3 b/bal_release/3rdparty/bcm-sdk/sh/kt2_init.sh.svk3
new file mode 100644
index 0000000..bb0ef4c
--- /dev/null
+++ b/bal_release/3rdparty/bcm-sdk/sh/kt2_init.sh.svk3
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+PCI_KT2_BUS=0000:05:00.0
+
+mknod /dev/linux-user-bde c 126 0
+sleep 1
+
+if [ "$1" == "--setup_only" ]; then
+    exit
+fi
+
+echo "Waiting for KT2 out of reset"
+
+while [ ! -d /sys/bus/pci/devices/$PCI_KT2_BUS ]
+do
+     sleep 1
+done
+
+sleep 1
+
+echo "Start bcm.user ..."
+./bcm.user
diff --git a/bal_release/3rdparty/linenoise b/bal_release/3rdparty/linenoise
new file mode 120000
index 0000000..7b1d087
--- /dev/null
+++ b/bal_release/3rdparty/linenoise
@@ -0,0 +1 @@
+maple/sdk/host_reference/linenoise
\ No newline at end of file
diff --git a/bal_release/3rdparty/maple/Makefile b/bal_release/3rdparty/maple/Makefile
new file mode 100644
index 0000000..4715e92
--- /dev/null
+++ b/bal_release/3rdparty/maple/Makefile
@@ -0,0 +1,45 @@
+# This dummy Makefile doesn't build anything.
+# It just adds paths to Maple SDK header files and libraries
+#
+MOD_NAME = maple_sdk
+MOD_TYPE = lib
+
+MOD_INC_DIRS  = $(SRC_DIR)/sdk/host_driver/api
+MOD_INC_DIRS += $(SRC_DIR)/sdk/host_driver/host_api
+
+ifeq ("$(ENABLE_CLI)", "y")
+   MOD_INC_DIRS += $(SRC_DIR)/sdk/host_customized/embedded_cli
+   MOD_INC_DIRS += $(SRC_DIR)/sdk/host_customized/os_abstraction/os_cli
+endif
+
+ifneq ("$(BOARD)", "")
+   MOD_INC_DIRS += $(SRC_DIR)/sdk/host_customized/board/$(BOARD)
+endif
+
+MOD_INC_DIRS += $(SRC_DIR)/sdk/host_driver/transport
+MOD_INC_DIRS += $(SRC_DIR)/sdk/host_driver/model
+MOD_INC_DIRS += $(SRC_DIR)/sdk/host_driver/common_gpon
+MOD_INC_DIRS += $(SRC_DIR)/sdk/host_driver/sw_version
+
+MOD_LIBS  = -L$(SRC_DIR)/sdk/build/output
+MOD_LIBS += -lmodel
+MOD_LIBS += -lcommon_api
+MOD_LIBS += -ltransport
+MOD_LIBS += -ldevice_selector
+ifneq ("$(BOARD)", "")
+   MOD_LIBS += -lbcm_board
+endif
+
+ifeq ("$(SIMULATION_BUILD)", "y")
+    MOD_LIBS += -ltr_plugin_udp
+else
+    MOD_LIBS += -ltr_plugin_mux -ltr_plugin_raw -ltr_plugin_raw_ud
+endif
+
+ifeq ("$(ENABLE_CLI)", "y")
+    MOD_INC_DIRS += $(SRC_DIR)/sdk/host_reference/api_dev_log
+    MOD_INC_DIRS += $(SRC_DIR)/sdk/host_reference/api_cli
+    MOD_INC_DIRS += $(SRC_DIR)/sdk/host_reference/device_selector
+    MOD_LIBS += -lapi_cli
+    MOD_LIBS += -lapi_dev_log
+endif
diff --git a/bal_release/3rdparty/maple/cur b/bal_release/3rdparty/maple/cur
new file mode 120000
index 0000000..04c86ce
--- /dev/null
+++ b/bal_release/3rdparty/maple/cur
@@ -0,0 +1 @@
+../../../bcm68620_release
\ No newline at end of file
diff --git a/bal_release/COPYRIGHT b/bal_release/COPYRIGHT
new file mode 100644
index 0000000..98c99f9
--- /dev/null
+++ b/bal_release/COPYRIGHT
@@ -0,0 +1,26 @@
+<:copyright-BRCM:2017:DUAL/GPL:standard
+
+   Copyright (c) 2017 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
diff --git a/bal_release/Makefile b/bal_release/Makefile
new file mode 100644
index 0000000..5fa6488
--- /dev/null
+++ b/bal_release/Makefile
@@ -0,0 +1,425 @@
+###############################################################################
+#
+#  <:copyright-BRCM:2016:proprietary:standard
+#   
+#     Broadcom Ltd. Proprietary and Confidential.(c) 2016 Broadcom Ltd.
+#     All Rights Reserved
+#   
+#  This program is the proprietary software of Broadcom Ltd. and/or its
+#  licensors, and may only be used, duplicated, modified or distributed pursuant
+#  to the terms and conditions of a separate, written license agreement executed
+#  between you and Broadcom Ltd. (an "Authorized License").  Except as set forth in
+#  an Authorized License, Broadcom Ltd. grants no license (express or implied), right
+#  to use, or waiver of any kind with respect to the Software, and Broadcom Ltd.
+#  expressly reserves all rights in and to the Software and all intellectual
+#  property rights therein.  IF YOU HAVE NO AUTHORIZED LICENSE, THEN YOU HAVE
+#  NO RIGHT TO USE THIS SOFTWARE IN ANY WAY, AND SHOULD IMMEDIATELY NOTIFY
+#  BROADCOM LTD AND DISCONTINUE ALL USE OF THE SOFTWARE.
+#   
+#  Except as expressly set forth in the Authorized License,
+#   
+#  1. This program, including its structure, sequence and organization,
+#      constitutes the valuable trade secrets of Broadcom Ltd., and you shall use
+#      all reasonable efforts to protect the confidentiality thereof, and to
+#      use this information only in connection with your use of Broadcom Ltd.
+#      integrated circuit products.
+#   
+#  2. TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
+#      AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES, REPRESENTATIONS OR
+#      WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH
+#      RESPECT TO THE SOFTWARE.  BROADCOM SPECIFICALLY DISCLAIMS ANY AND
+#      ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY, NONINFRINGEMENT,
+#      FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES, ACCURACY OR
+#      COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR CORRESPONDENCE
+#      TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING OUT OF USE OR
+#      PERFORMANCE OF THE SOFTWARE.
+#   
+#  3. TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM OR
+#      ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL, INCIDENTAL, SPECIAL,
+#      INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER ARISING OUT OF OR IN ANY
+#      WAY RELATING TO YOUR USE OF OR INABILITY TO USE THE SOFTWARE EVEN
+#      IF BROADCOM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES;
+#      OR (ii) ANY AMOUNT IN EXCESS OF THE AMOUNT ACTUALLY PAID FOR THE
+#      SOFTWARE ITSELF OR U.S. $1, WHICHEVER IS GREATER. THESE LIMITATIONS
+#      SHALL APPLY NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY
+#      LIMITED REMEDY.
+#  :>
+#
+###############################################################################
+# Central Makefile
+#
+
+# Identify whether it is customer or development build
+ifneq ("$(wildcard .release_build)","")
+    RELEASE_BUILD=y
+    export RELEASE_BUILD
+endif
+
+DOCS_SUBSYSTEM := core
+ifeq ("$(BUILD_OF_AGENT)", "y")
+    ifneq ("$(findstring core,$(MAKECMDGOALS))", "")
+        $(error Setting BUILD_OF_AGENT=$(BUILD_OF_AGENT) in incompatible with one of make targets "$(MAKECMDGOALS)"")
+    endif
+    # Backward compatibility
+    ifeq ("$(MAKECMDGOALS)", "clean")
+        OVEERIDE_GOAL = clean_agent
+    endif
+    ifeq ("$(MAKECMDGOALS)", "")
+        OVEERIDE_GOAL = sdn_agent
+    endif
+    DOCS_SUBSYSTEM := agent
+endif
+ifeq ("$(BUILD_OF_AGENT)", "n")
+    ifneq ("$(findstring agent,$(MAKECMDGOALS))", "")
+        $(error Setting BUILD_OF_AGENT=$(BUILD_OF_AGENT) in incompatible with one of make targets "$(MAKECMDGOALS)"")
+    endif
+    # Backward compatibility
+    ifeq ("$(MAKECMDGOALS)", "clean")
+        OVEERIDE_GOAL = clean_core
+    endif
+    ifeq ("$(MAKECMDGOALS)", "")
+        OVEERIDE_GOAL = core
+    endif
+endif
+ifneq ("$(findstring agent,$(MAKECMDGOALS))", "")
+    BUILD_OF_AGENT = y
+endif
+
+BUILD_NC_AGENT ?= y
+
+export BUILD_OF_AGENT
+export BUILD_NC_AGENT
+
+PLATFORM ?= maple
+TOP_DIR=$(shell pwd)
+export PLATFORM
+export TOP_DIR
+
+MAKE_DIR=$(TOP_DIR)/mk
+MAKE_DEVICE_DIR=$(MAKE_DIR)/$(DEVICE)
+export MAKE_DIR
+export MAKE_DEVICE_DIR
+
+TOP_SRC_DIR=$(TOP_DIR)/src
+export TOP_SRC_DIR
+
+include $(MAKE_DIR)/Makefile.initial_config
+include $(TOP_DIR)/branch.info
+
+OUT_DIR          ?= $(TOP_DIR)/build
+OUT_DOCS_DIR	 ?= $(OUT_DIR)/doc
+
+export OUT_DIR
+export OUT_DOCS_DIR
+
+# List of all modules, all library modules and all application modules
+export ALL_MODULES
+export ALL_LIB_MODULES
+export ALL_APP_MODULES
+
+# Current board
+export BOARD
+ifneq ("$(BOARD)", "")
+    BOARD_DIR ?= $(TOP_DIR)/3rdparty/maple/boards/cur/$(BOARD)
+    export BOARD_DIR
+endif
+
+# Location of Maple SDK dir
+MAPLE_SDK_DIR ?= $(TOP_DIR)/3rdparty/maple/cur
+
+LOCAL_MAPLE_SDK_DIR = 3rdparty/maple/sdk
+export MAPLE_SDK_DIR
+export LOCAL_MAPLE_SDK_DIR
+MAPLE_BOARD ?= $(BOARD)
+ifneq ("$(MAPLE_BOARD)", "")
+    MAPLE_BOARD_DIR ?= $(MAPLE_SDK_DIR)/../boards/cur/$(MAPLE_BOARD)
+else    
+    MAPLE_BOARD_DIR = $(shell cat $(TOP_DIR)/$(LOCAL_MAPLE_SDK_DIR)/build/.maple_board_dir 2> /dev/null)
+    tmp = $(shell ; rm -f $(OUT_DIR)/.maple_board_dir)
+endif
+
+ING_SDK_VER ?= 6.5.7
+ING_SDK ?= sdk-all-$(ING_SDK_VER)
+ING_SDK_PATCH ?=sdk-bal-$(ING_SDK_VER).patch
+ING_SDK_TOP_DIR ?= $(TOP_DIR)/3rdparty/bcm-sdk
+ifeq ("$(BOARD)", "")
+	ING_SDK_DEFAULT_DIR := $(ING_SDK_TOP_DIR)/build/$(ING_SDK)
+else
+	ING_SDK_DEFAULT_DIR := $(ING_SDK_TOP_DIR)/build-$(BOARD)/$(ING_SDK)
+endif
+ING_SDK_DIR ?= $(ING_SDK_DEFAULT_DIR)
+export ING_SDK_VER
+export ING_SDK
+export ING_SDK_PATCH
+export ING_SDK_TOP_DIR 
+export ING_SDK_DIR 
+
+SWITCH ?= qax
+export SWITCH
+
+TMP_BAL_VERSION_H=${MAKE_DIR}/bal_version.tmp
+BAL_VERSION_H:=${TOP_DIR}/src/common/include/bal_version.h
+
+# NOTE: BUILD_INFO is set and exported by Jenkins when built by that tool
+export JENKINS_BUILD
+ifeq ("$(JENKINS_BUILD)", "y")
+    PERFORCE_REVISION:=$(P4_CHANGELIST)
+else ifneq ("$(RELEASE_BUILD), "y") 
+    PERFORCE_REVISION:=$(shell p4 changes -m 1 //$(DEPOT)/$(BRANCH)/...\#have | cut -d " " -f 2)
+    BUILD_INFO="Developer build \("${USER}"@"${PWD}"\)"
+    export BUILD_INFO
+else
+    BUILD_INFO="Customer Release Build \("${USER}"@"${PWD}"\)"
+    export BUILD_INFO
+endif
+
+
+RELEASE_TYPE:=${RELEASE_TYPE}
+BUILD_USER:=${USER}
+BUILD_TOPDIR:=${TOP_DIR}
+BUILD_PERFORCE_REVISION:=$(PERFORCE_REVISION)
+BUILD_VERSION_PREFIX:=$(RELEASE_TYPE)$(MAJOR).$(MINOR).$(PATCH)
+BUILD_VERSION:=$(BUILD_VERSION_PREFIX).${BUILD_PERFORCE_REVISION}
+BUILD_DATE:=`date +%m-%d-%Y-%H%M%S`
+export BUILD_VERSION
+export BUILD_PERFORCE_REVISION
+export SRC_RELEASE_FILE_PREFIX ?= release.src.$(BUILD_VERSION_PREFIX)
+export INCLUDE_MAPLE_SDK_RELEASE ?= y
+
+V ?= 0
+ifeq (x"$(V)", x"0")
+	SILENT = -s
+	export SILENT
+	SILENT_BUILD=@
+endif
+
+# Include board support file
+# It exports variables such as CROSS_COMPILE
+ifneq ("$(BOARD)", "")
+   -include mk/boards/$(BOARD)/board.config
+endif
+
+ifneq ("$(OVEERIDE_GOAL)", "")
+all: $(OVEERIDE_GOAL)
+else
+all: print_maple_dir core sdn_agent
+endif
+
+clean: clean_core clean_agent clean_ocs_omci
+	$(SILENT_BUILD)rm -fr $(OUT_DIR)
+
+help_general:
+	@echo "make parameters:"
+	@echo "   BOARD             - board to build for"
+	@echo "   BOARD_DIR         - board directory"
+	@echo "   V=<output_level>  - =1-verbose command output, =2-makefile debug output"
+	@echo "   EXTRA_TYPES       - Low-level option. Space-delimited list of extra types without bcmolt_ prefix"
+	@echo "   ENABLE_CLI        - =n-exclude CLI support. Included by default"
+	@echo "make targets:"
+	@echo "   all               - build all subsystems. This is the default target"
+	@echo "   core              - build core subsystem (BAL standalone)"
+	@echo "   sdn_agent         - build agent subsystem (BAL SDN agent)"
+	@echo "   maple_sdk_dir     - create 3rdparty/maple/sdk"
+	@echo "   maple_sdk         - build maple sdk. Please set BOARD=<board> parameter"
+	@echo "   maple_sdk_clean   - clean maple sdk"
+	@echo "   ing_sdk_dir       - create 3rdparty/bcm-sdk/build"
+	@echo "   ing_sdk           - build 3rdparty/bcm-sdk/build"
+	@echo "   ing_sdk_clean     - clean 3rdparty/bcm-sdk/build"
+	@echo "   ing_bcm_user      - build the bcm_user binary (toolchains paths must be set correctly first)"
+	@echo "   clean             - clean everything"
+	@echo "   clean_core        - clean core subsystem"
+	@echo "   clean_sdn_agent   - clean SDN agent"
+	@echo "   clean_ocs_omci    - clean OCS OMCI stack"
+	@echo "   clean_bcm_omci    - clean Broadcom OMCI stack"
+	@echo "   docs              - generate reference document in html format"
+	@echo "   docs_pdf          - generate reference document in pdf format"
+	@echo "   docs_clean        - clean documents"
+	@echo "   version_file      - builds BAL version file"
+	@echo "   bin_release_core      - create BAL core binary release archive"
+	@echo "   bin_release_sdn_agent - create BAL SDN agent binary release archive"
+	@echo "   bin_release           - create BAL core and SDN agent binary release archives"
+	@echo "   src_release       - create all BAL source release archives"
+	@echo ""
+	@echo "Optional make arguments:"
+	@echo ""
+	@echo "   BUILD_NC_AGENT=n          - do NOT build NETCONF agent into bcm_sdn_agent. Used with make target \"sdn_agent\""
+	@echo "   TEST_SW_UTIL_LOOPBACK=y   - stub out the switch utils"
+	@echo ""
+
+
+help: help_general help_core
+
+.PHONY: version_file
+
+version_file:
+	@echo "  Generating $@"
+	@echo "/*************************************************************" > $(TMP_BAL_VERSION_H)
+	@echo " * DO NOT EDIT! THIS FILE WAS AUTO GENERATED. DO NOT EDIT!   *" >> $(TMP_BAL_VERSION_H)
+	@echo " *************************************************************/" >> $(TMP_BAL_VERSION_H)
+	@echo "  wrote header..."
+	@$(BUILD_TOPDIR)/tools/copyright_tools/insert_copyright.pl -t c -l $(BUILD_TOPDIR)/COPYRIGHT >> $(TMP_BAL_VERSION_H)
+	@echo "#if !defined(BAL_VERSION_H)" >> $(TMP_BAL_VERSION_H)
+	@echo "#define BAL_VERSION_H" >> $(TMP_BAL_VERSION_H)
+	@echo "" >> $(TMP_BAL_VERSION_H)
+	@echo "#define BAL_VERSION          \"${BUILD_VERSION}\"" >> $(TMP_BAL_VERSION_H)
+	@echo "#define BAL_VERSION_STR_LEN  (`echo ${BUILD_VERSION} | wc -c`)" >> $(TMP_BAL_VERSION_H)
+	@echo "" >> $(TMP_BAL_VERSION_H)
+	@echo "#define BAL_BUILD_DATE \"`date`\"" >> $(TMP_BAL_VERSION_H)
+	@echo "#define BAL_BUILD_INFO       \"${BUILD_INFO}\"" >> $(TMP_BAL_VERSION_H)
+	@echo "" >> $(TMP_BAL_VERSION_H)
+	@echo "#endif  /* BAL_VERSION_H */" >> $(TMP_BAL_VERSION_H)
+	@diff $(TMP_BAL_VERSION_H) $(BAL_VERSION_H) > /dev/null; \
+	if [ $$? -ne 0 ]; then                                    \
+	    mv -f $(TMP_BAL_VERSION_H) $(BAL_VERSION_H);          \
+	fi
+
+.PHONY: overlay_bal_maple_scripts
+
+overlay_bal_maple_scripts:
+	@echo "Creating and Overlaying BAL-specific svk_init.sh and trx_init.sh onto maple fs"
+	@echo "(in $(LOCAL_MAPLE_SDK_DIR)/build/fs/)"
+	@cp -f $(LOCAL_MAPLE_SDK_DIR)/host_customized/board/wrx/fs/svk_init.sh ~/svk_init.sh
+	@cat ~/svk_init.sh | sed s/".\/bcm_user_appl"/'.\/bcm_user_appl < trx_init.sh \&\& .\/bcm_user_appl'/g > ~/svk_init_for_bal.sh
+	@cat ~/svk_init.sh | sed s/".\/bcm_user_appl"/'.\/bcm_user_appl < trx_init.sh'/g > ~/svk_init_for_bal_startup.sh
+	@mkdir -p $(LOCAL_MAPLE_SDK_DIR)/build/fs/
+	@mv -f ~/svk_init_for_bal.sh $(LOCAL_MAPLE_SDK_DIR)/build/fs/svk_init.sh
+	@mv -f ~/svk_init_for_bal_startup.sh $(LOCAL_MAPLE_SDK_DIR)/build/fs/svk_init_startup.sh
+	@chmod 755 $(LOCAL_MAPLE_SDK_DIR)/build/fs/svk_init.sh
+	@chmod 755 $(LOCAL_MAPLE_SDK_DIR)/build/fs/svk_init_startup.sh
+	@cp -f $(TOP_DIR)/scripts/trx_init.sh $(LOCAL_MAPLE_SDK_DIR)/build/fs/.
+	@rm ~/svk_init.sh
+
+.PHONY:
+
+.PHONY: sdn_agent
+sdn_agent: version_file build_sdn_agent
+
+.PHONY: build_sdn_agent
+build_sdn_agent: build_agent
+	$(SILENT_BUILD)mv $(TOP_DIR)/build/agent/3rdparty/indigo/ofpal_of_agent $(TOP_DIR)/build/agent/bcm_sdn_agent
+	$(SILENT_BUILD)mk/create_artifacts.sh
+
+.PHONY: ing_bcm_user
+
+ing_bcm_user:
+	@echo "Building ING bcm.user"
+	@pushd 3rdparty/bcm-sdk/build/sdk-all-6.4.4/systems/linux/user/gto-2_6 && make && popd
+
+
+# The following variables are only set if they have not been set
+# previously or passed in.
+
+.PHONY: docs
+docs: docs_$(DOCS_SUBSYSTEM)
+
+docs_pdf: docs_$(DOCS_SUBSYSTEM)
+	$(SILENT_BUILD)$(MAKE) -C $(OUT_DOCS_DIR)/latex
+
+docs_clean:
+	$(SILENT_BUILD)$(BOLD_PRINT) "Cleaning docs"
+	$(SILENT_BUILD)rm -fr $(OUT_DOCS_DIR)
+
+clobber: clean docs_clean
+
+.PHONY: print_maple_dir
+
+print_maple_dir:
+	@echo "Using MAPLE from $(MAPLE_SDK_DIR) copied to $(LOCAL_MAPLE_SDK_DIR)"
+
+core: version_file build_core
+	$(SILENT_BUILD)export BUILD_NC_AGENT=n;\
+	export BUILD_OF_AGENT=n;\
+	mk/create_artifacts.sh
+
+%_core:
+	$(SILENT_BUILD)$(MAKE) $(SILENT) SUBSYSTEM=core -f $(MAKE_DIR)/Makefile.main BUILD_NC_AGENT=n $@
+
+agent: version_file build_agent
+
+%_agent:
+	$(SILENT_BUILD)$(MAKE) $(SILENT) SUBSYSTEM=agent -f $(MAKE_DIR)/Makefile.main $@
+
+.PHONY: bin_release_sdn_agent
+bin_release_sdn_agent: bin_release_agent
+
+.PHONY: bin_release
+bin_release: bin_release_core bin_release_agent
+
+.PHONY: maple_sdk_devel_to_release
+
+maple_sdk_devel_to_release:
+ifneq ("$(RELEASE_BUILD)", "y")
+	$(SILENT_BUILD)if [ ! -f $(MAPLE_SDK_DIR)/build/maple/host/fs/bcm68620_boot.bin ]; then \
+	   echo !!! Build maple first;\
+	   echo make -C $(MAPLE_SDK_DIR) BOARD=wrx;\
+	   exit -1;\
+	fi
+	$(SILENT_BUILD)cd $(MAPLE_SDK_DIR) && rm -fr release && scripts/rel_delivery.sh $(MAPLE_REL_DELIVERY_PREFIX)
+	$(SILENT_BUILD)rm -fr $(LOCAL_MAPLE_SDK_DIR)
+endif
+	$(SILENT_BUILD)mkdir -p $(LOCAL_MAPLE_SDK_DIR)
+	$(SILENT_BUILD)cp -ar $(MAPLE_SDK_DIR)/release/* $(LOCAL_MAPLE_SDK_DIR)/
+ifneq ("$(RELEASE_BUILD)", "y")
+	$(SILENT_BUILD)cp $(MAPLE_SDK_DIR)/make/bcm68620/lint.sh $(LOCAL_MAPLE_SDK_DIR)/make/bcm68620/
+endif
+
+.PHONY: maple_sdk_dir
+maple_sdk_dir: maple_sdk_devel_to_release
+	$(SILENT_BUILD)if [ ! -f $(LOCAL_MAPLE_SDK_DIR)/embedded_binaries/bcm68620_boot.bin ]; then \
+	   echo !!! $(LOCAL_MAPLE_SDK_DIR)/embedded_binaries/bcm68620_boot.bin is absent;\
+	   echo !!! Please copy BCM68620 SDK release to $(LOCAL_MAPLE_SDK_DIR);\
+	   exit -1;\
+	fi
+	$(SILENT_BUILD)mkdir -p src/common/os_abstraction
+	$(SILENT_BUILD)rm -fr src/common/os_abstraction/*
+	$(SILENT_BUILD)cd src/common/os_abstraction && ln -s ../../../$(LOCAL_MAPLE_SDK_DIR)/host_customized/os_abstraction/* .
+	$(SILENT_BUILD)rm -f src/common/os_abstraction/bcmos_platform.h
+
+src_release:
+	$(SILENT_BUILD)$(MAKE_DIR)/src_release.sh
+
+.PHONY: maple_sdk
+maple_sdk: maple_sdk_build overlay_bal_maple_scripts
+
+maple_sdk_build:
+	$(SILENT_BUILD)rm -fr $(TOP_DIR)/$(LOCAL_MAPLE_SDK_DIR)/build/output/*
+	$(SILENT_BUILD)cd $(LOCAL_MAPLE_SDK_DIR) && \
+       unset OUT_DIR && \
+       BOARD=$(MAPLE_BOARD) BOARD_DIR=$(MAPLE_BOARD_DIR) $(MAKE) $(SILENT) 
+ifeq ("$(BOARD)", "")
+	$(SILENT_BUILD)mkdir -p $(TOP_DIR)/$(LOCAL_MAPLE_SDK_DIR)/build/output/
+	$(SILENT_BUILD)find $(TOP_DIR)/$(LOCAL_MAPLE_SDK_DIR) -name 'lib*.a' -exec ln -s \{\} $(TOP_DIR)/$(LOCAL_MAPLE_SDK_DIR)/build/output/ 2> /dev/null \;
+	$(SILENT_BUILD)rm -f $(TOP_DIR)/$(LOCAL_MAPLE_SDK_DIR)/build/.maple_board_dir
+else
+	$(SILENT_BUILD)echo $(MAPLE_BOARD_DIR) > $(TOP_DIR)/$(LOCAL_MAPLE_SDK_DIR)/build/.maple_board_dir
+endif       
+
+maple_sdk_clean:
+	$(SILENT_BUILD)OUT_DIR=$(TOP_DIR)/$(LOCAL_MAPLE_SDK_DIR)/build OUT_DIR_BASE=$(TOP_DIR)/$(LOCAL_MAPLE_SDK_DIR)/build \
+	   BOARD_DIR=$(MAPLE_BOARD_DIR) $(MAKE) $(SILENT) -C $(LOCAL_MAPLE_SDK_DIR) TOP_DIR=$(TOP_DIR)/3rdparty/maple/sdk \
+	   BOARD=$(MAPLE_BOARD) clean
+
+ing_sdk_dir:
+	$(SILENT_BUILD)$(ING_SDK_TOP_DIR)/make_ing_dir.sh
+
+ing_sdk:
+	$(SILENT_BUILD)$(MAKE) -C $(ING_SDK_TOP_DIR) -f Makefile.sdk sdk
+
+ing_sdk_clean:
+ifeq ($(ING_SDK_DEFAULT_DIR), $(ING_SDK_DIR))
+	$(SILENT_BUILD)rm -fr $(ING_SDK_DIR)
+else	
+	$(SILENT_BUILD)$(MAKE) -C $(ING_SDK_DIR) clean
+endif	
+
+clean_ocs_omci:
+	$(SILENT_BUILD)$(MAKE) -C $(TOP_DIR)/3rdparty/ocs_omci clean
+
+#clean_bcm_omci:
+#	$(SILENT_BUILD)$(MAKE) -C $(TOP_DIR)/3rdparty/ocs_omci clean
+
+.PHONY: clean_sdn_agent 	
+clean_sdn_agent: clean_agent
+
+print-% : ; @echo $* = $($*)
+
diff --git a/bal_release/README_HOW_TO_BUILD_BAL b/bal_release/README_HOW_TO_BUILD_BAL
new file mode 100644
index 0000000..d93ecf2
--- /dev/null
+++ b/bal_release/README_HOW_TO_BUILD_BAL
@@ -0,0 +1,39 @@
+This file contains instructions of how to extract BAL source release package and compile it.
+It is assumed that switch (Qumran) SDK is obtained from its relevant repository and it is not part of BAL source release package.
+
+Here are the steps needed to extract and compile the source code:
+
+1. Create a directory into which you want to extract the package. In the following steps we use /tmp/bal_src_release as an example.
+
+   mkdir -p /tmp/bal_src_release
+
+2. Unzip (extract) the combined Maple SDK and BAL package into the location you selected:
+
+   unzip <path_to_release_zip>/SW-BCM68620_<revision>.zip -d /tmp/bal_src_release 
+
+3. Obtain switch (Qumran) SDK from its repository.
+
+4. Copy switch (Qumran) SDK to /tmp/bal_src_release/bal_release/3rdparty/bcm-sdk.
+
+   cp /<path_to_switch_sdk>/sdk-all-<revision>.tar.gz /tmp/bal_src_release/bal_release/3rdparty/bcm-sdk
+
+5. Change directory to the selected location.
+
+   cd /tmp/bal_src_release/bal_release
+
+6. Compile Maple SDK
+
+   make maple_sdk_dir
+   make maple_sdk
+
+7. Compile switch (Qumran) SDK
+
+   make ing_sdk_dir
+   make ing_sdk
+
+8. Compile BAL:
+
+   make core
+
+9. When the build ends successfully, bal_core executable (build/core/src/core/main/bal_core) should be created.
+
diff --git a/bal_release/README_HOW_TO_BUILD_SDN_PAL b/bal_release/README_HOW_TO_BUILD_SDN_PAL
new file mode 100644
index 0000000..08bf6dd
--- /dev/null
+++ b/bal_release/README_HOW_TO_BUILD_SDN_PAL
@@ -0,0 +1,47 @@
+This file contains instructions of how to extract BAL/SDN-PAL source release packages and compile them.
+It is assumed that switch (Qumran) SDK is obtained from its relevant repository and it is not part of SDN-PAL source release package.
+
+Here are the steps needed to extract and compile the source code:
+
+1. Create a directory into which you want to extract the package. In the following steps we use /tmp/bal_src_release as an example.
+
+   mkdir -p /tmp/bal_src_release
+
+2. Unzip (extract) the combined Maple SDK and BAL package into the location you selected:
+
+   unzip <path_to_release_zip>/SW-BCM68620_<revision>.zip -d /tmp/bal_src_release 
+
+3. Extract SDN-PAL:
+
+   tar --strip-components=1 -C /tmp/bal_src_release/bal_release -xvzf <path_to_sdn_pal_tarball>/sdn_pal.<suffix>.tar.gz
+
+4. In case OMCI is also required, you should extract OMCI:
+
+   tar --strip-components=1 -C /tmp/bal_src_release/bal_release -xvzf <path_to_omci_tarball>/omci.<suffix>.tar.gz
+
+5. Obtain switch (Qumran) SDK from its repository.
+
+6. Copy switch (Qumran) SDK to /tmp/bal_src_release/bal_release/3rdparty/bcm-sdk.
+
+   cp /<path_to_switch_sdk>/sdk-all-<revision>.tar.gz /tmp/bal_src_release/bal_release/3rdparty/bcm-sdk
+
+7. Change directory to the selected location.
+
+   cd /tmp/bal_src_release/bal_release
+
+8. Compile Maple SDK
+
+   make maple_sdk_dir
+   make maple_sdk
+
+9. Compile switch (Qumran) SDK
+
+   make ing_sdk_dir
+   make ing_sdk
+
+10. Compile SDN-PAL:
+
+   make sdn_agent
+
+11. When the build ends successfully, bal_core executable (build/core/src/core/main/bal_core) and SDN agent executable (build/agent/bcm_sdn_agent) should be created.
+
diff --git a/bal_release/branch.info b/bal_release/branch.info
new file mode 100644
index 0000000..49e8f18
--- /dev/null
+++ b/bal_release/branch.info
@@ -0,0 +1,58 @@
+###############################################################################
+#
+#  Copyright 2008-2017 Broadcom Corporation
+#  
+#  This program is the proprietary software of Broadcom Corporation
+#  and/or its licensors, and may only be used, duplicated, modified or
+#  distributed pursuant to the terms and conditions of a separate,
+#  written license agreement executed between you and Broadcom (an
+#  "Authorized License").  Except as set forth in an Authorized License,
+#  Broadcom grants no license (express or implied), right to use, or
+#  waiver of any kind with respect to the Software, and Broadcom
+#  expressly reserves all rights in and to the Software and all
+#  intellectual property rights therein.  IF YOU HAVE NO AUTHORIZED
+#  LICENSE, THEN YOU HAVE NO RIGHT TO USE THIS SOFTWARE IN ANY WAY, AND
+#  SHOULD IMMEDIATELY NOTIFY BROADCOM AND DISCONTINUE ALL USE OF THE
+#  SOFTWARE.
+#  
+#  Except as expressly set forth in the Authorized License,
+#  
+#  1.  This program, including its structure, sequence and organization,
+#  constitutes the valuable trade secrets of Broadcom, and you shall use
+#  all reasonable efforts to protect the confidentiality thereof, and to
+#  use this information only in connection with your use of Broadcom
+#  integrated circuit products.
+#   
+#  2.  TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED
+#  "AS IS" AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES,
+#  REPRESENTATIONS OR WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR
+#  OTHERWISE, WITH RESPECT TO THE SOFTWARE.  BROADCOM SPECIFICALLY
+#  DISCLAIMS ANY AND ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY,
+#  NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES,
+#  ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR
+#  CORRESPONDENCE TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING OUT
+#  OF USE OR PERFORMANCE OF THE SOFTWARE.
+#  
+#  3.  TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM
+#  OR ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL, INCIDENTAL, SPECIAL,
+#  INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER ARISING OUT OF OR IN ANY WAY
+#  RELATING TO YOUR USE OF OR INABILITY TO USE THE SOFTWARE EVEN IF
+#  BROADCOM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES; OR (ii)
+#  ANY AMOUNT IN EXCESS OF THE AMOUNT ACTUALLY PAID FOR THE SOFTWARE
+#  ITSELF OR U.S. $1, WHICHEVER IS GREATER. THESE LIMITATIONS SHALL APPLY
+#  NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY LIMITED
+#  REMEDY.
+#
+###############################################################################
+#
+#  This is the release information for "current" branch. 
+#
+###############################################################################
+
+DEPOT=xpon_co
+BRANCH=bal/cur
+RELEASE_TYPE=R
+MAJOR=02
+MINOR=02
+PATCH=01
+PERFORCE_REVISION=139177
diff --git a/bal_release/doxygen/DoxygenLayout.xml b/bal_release/doxygen/DoxygenLayout.xml
new file mode 100644
index 0000000..a4ad5bb
--- /dev/null
+++ b/bal_release/doxygen/DoxygenLayout.xml
@@ -0,0 +1,188 @@
+<doxygenlayout version="1.0">
+  <!-- Generated by doxygen 1.8.6 -->
+  <!-- Navigation index tabs for HTML output -->
+  <navindex>
+    <tab type="mainpage" visible="yes" title=""/>
+    <tab type="pages" visible="yes" title="" intro=""/>
+    <tab type="modules" visible="yes" title="API Reference" intro=""/>
+    <tab type="namespaces" visible="yes" title="">
+      <tab type="namespacelist" visible="yes" title="" intro=""/>
+      <tab type="namespacemembers" visible="yes" title="" intro=""/>
+    </tab>
+    <tab type="classes" visible="no" title="">
+      <tab type="classlist" visible="no" title="" intro=""/>
+      <tab type="classindex" visible="no" title=""/>
+      <tab type="hierarchy" visible="no" title="" intro=""/>
+      <tab type="classmembers" visible="no" title="" intro=""/>
+    </tab>
+    <tab type="files" visible="no" title="">
+      <tab type="filelist" visible="yes" title="" intro=""/>
+      <tab type="globals" visible="yes" title="" intro=""/>
+    </tab>
+    <tab type="examples" visible="yes" title="" intro=""/>
+  </navindex>
+
+  <!-- Layout definition for a class page -->
+  <class>
+    <briefdescription visible="yes"/>
+    <detaileddescription title=""/>
+    <includes visible="$SHOW_INCLUDE_FILES"/>
+    <inheritancegraph visible="$CLASS_GRAPH"/>
+    <collaborationgraph visible="$COLLABORATION_GRAPH"/>
+    <memberdecl>
+      <nestedclasses visible="yes" title=""/>
+      <publictypes title=""/>
+      <publicslots title=""/>
+      <signals title=""/>
+      <publicmethods title=""/>
+      <publicstaticmethods title=""/>
+      <publicattributes title=""/>
+      <publicstaticattributes title=""/>
+      <protectedtypes title=""/>
+      <protectedslots title=""/>
+      <protectedmethods title=""/>
+      <protectedstaticmethods title=""/>
+      <protectedattributes title=""/>
+      <protectedstaticattributes title=""/>
+      <packagetypes title=""/>
+      <packagemethods title=""/>
+      <packagestaticmethods title=""/>
+      <packageattributes title=""/>
+      <packagestaticattributes title=""/>
+      <properties title=""/>
+      <events title=""/>
+      <privatetypes title=""/>
+      <privateslots title=""/>
+      <privatemethods title=""/>
+      <privatestaticmethods title=""/>
+      <privateattributes title=""/>
+      <privatestaticattributes title=""/>
+      <friends title=""/>
+      <related title="" subtitle=""/>
+      <membergroups visible="yes"/>
+    </memberdecl>
+    <memberdef>
+      <inlineclasses title=""/>
+      <functions title=""/>
+      <typedefs title=""/>
+      <enums title=""/>
+      <constructors title=""/>
+      <related title=""/>
+      <variables title=""/>
+      <properties title=""/>
+      <events title=""/>
+    </memberdef>
+    <allmemberslink visible="no"/>
+    <usedfiles visible="$SHOW_USED_FILES"/>
+    <authorsection visible="yes"/>
+  </class>
+
+  <!-- Layout definition for a namespace page -->
+  <namespace>
+    <briefdescription visible="yes"/>
+    <detaileddescription title=""/>
+    <memberdecl>
+      <nestednamespaces visible="yes" title=""/>
+      <functions title=""/>
+      <classes visible="yes" title=""/>
+      <typedefs title=""/>
+      <enums title=""/>
+      <variables title=""/>
+      <membergroups visible="yes"/>
+    </memberdecl>
+    <memberdef>
+      <inlineclasses title=""/>
+      <functions title=""/>
+      <typedefs title=""/>
+      <enums title=""/>
+      <variables title=""/>
+    </memberdef>
+    <authorsection visible="yes"/>
+  </namespace>
+
+  <!-- Layout definition for a file page -->
+  <file>
+    <briefdescription visible="yes"/>
+    <detaileddescription title=""/>
+    <includes visible="$SHOW_INCLUDE_FILES"/>
+    <includegraph visible="$INCLUDE_GRAPH"/>
+    <includedbygraph visible="$INCLUDED_BY_GRAPH"/>
+    <sourcelink visible="yes"/>
+    <memberdecl>
+      <functions title=""/>
+      <classes visible="yes" title=""/>
+      <namespaces visible="yes" title=""/>
+      <defines title=""/>
+      <typedefs title=""/>
+      <enums title=""/>
+      <variables title=""/>
+      <membergroups visible="yes"/>
+    </memberdecl>
+    <memberdef>
+      <inlineclasses title=""/>
+      <functions title=""/>
+      <defines title=""/>
+      <typedefs title=""/>
+      <enums title=""/>
+      <variables title=""/>
+    </memberdef>
+    <authorsection/>
+  </file>
+
+  <!-- Layout definition for a group page -->
+  <group>
+    <briefdescription visible="yes"/>
+    <detaileddescription title=""/>
+    <groupgraph visible="$GROUP_GRAPHS"/>
+    <memberdecl>
+      <nestedgroups visible="yes" title=""/>
+      <functions title=""/>
+      <dirs visible="yes" title=""/>
+      <files visible="yes" title=""/>
+      <namespaces visible="yes" title=""/>
+      <classes visible="yes" title=""/>
+      <defines title=""/>
+      <typedefs title=""/>
+      <enums title=""/>
+      <enumvalues title=""/>
+      <variables title=""/>
+      <signals title=""/>
+      <publicslots title=""/>
+      <protectedslots title=""/>
+      <privateslots title=""/>
+      <events title=""/>
+      <properties title=""/>
+      <friends title=""/>
+      <membergroups visible="yes"/>
+    </memberdecl>
+    <memberdef>
+      <pagedocs/>
+      <functions title=""/>
+      <inlineclasses title=""/>
+      <defines title=""/>
+      <typedefs title=""/>
+      <enums title=""/>
+      <enumvalues title=""/>
+      <variables title=""/>
+      <signals title=""/>
+      <publicslots title=""/>
+      <protectedslots title=""/>
+      <privateslots title=""/>
+      <events title=""/>
+      <properties title=""/>
+      <friends title=""/>
+    </memberdef>
+    <authorsection visible="yes"/>
+  </group>
+
+  <!-- Layout definition for a directory page -->
+  <directory>
+    <briefdescription visible="yes"/>
+    <detaileddescription title=""/>
+    <directorygraph visible="yes"/>
+    <memberdecl>
+      <dirs visible="yes"/>
+      <files visible="yes"/>
+    </memberdecl>
+  </directory>
+</doxygenlayout>
diff --git a/bal_release/doxygen/Makefile b/bal_release/doxygen/Makefile
new file mode 100644
index 0000000..0ef21da
--- /dev/null
+++ b/bal_release/doxygen/Makefile
@@ -0,0 +1,94 @@
+###############################################################################
+#
+#  <:copyright-BRCM:2016:proprietary:standard
+#   
+#     Broadcom Ltd. Proprietary and Confidential.(c) 2016 Broadcom Ltd.
+#     All Rights Reserved
+#   
+#  This program is the proprietary software of Broadcom Ltd. and/or its
+#  licensors, and may only be used, duplicated, modified or distributed pursuant
+#  to the terms and conditions of a separate, written license agreement executed
+#  between you and Broadcom Ltd. (an "Authorized License").  Except as set forth in
+#  an Authorized License, Broadcom Ltd. grants no license (express or implied), right
+#  to use, or waiver of any kind with respect to the Software, and Broadcom Ltd.
+#  expressly reserves all rights in and to the Software and all intellectual
+#  property rights therein.  IF YOU HAVE NO AUTHORIZED LICENSE, THEN YOU HAVE
+#  NO RIGHT TO USE THIS SOFTWARE IN ANY WAY, AND SHOULD IMMEDIATELY NOTIFY
+#  BROADCOM LTD AND DISCONTINUE ALL USE OF THE SOFTWARE.
+#   
+#  Except as expressly set forth in the Authorized License,
+#   
+#  1. This program, including its structure, sequence and organization,
+#      constitutes the valuable trade secrets of Broadcom Ltd., and you shall use
+#      all reasonable efforts to protect the confidentiality thereof, and to
+#      use this information only in connection with your use of Broadcom Ltd.
+#      integrated circuit products.
+#   
+#  2. TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
+#      AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES, REPRESENTATIONS OR
+#      WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH
+#      RESPECT TO THE SOFTWARE.  BROADCOM SPECIFICALLY DISCLAIMS ANY AND
+#      ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY, NONINFRINGEMENT,
+#      FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES, ACCURACY OR
+#      COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR CORRESPONDENCE
+#      TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING OUT OF USE OR
+#      PERFORMANCE OF THE SOFTWARE.
+#   
+#  3. TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM OR
+#      ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL, INCIDENTAL, SPECIAL,
+#      INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER ARISING OUT OF OR IN ANY
+#      WAY RELATING TO YOUR USE OF OR INABILITY TO USE THE SOFTWARE EVEN
+#      IF BROADCOM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES;
+#      OR (ii) ANY AMOUNT IN EXCESS OF THE AMOUNT ACTUALLY PAID FOR THE
+#      SOFTWARE ITSELF OR U.S. $1, WHICHEVER IS GREATER. THESE LIMITATIONS
+#      SHALL APPLY NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY
+#      LIMITED REMEDY.
+#  :>
+#
+###############################################################################
+#
+#  Makefile for building doxygen for bal source code
+#
+###############################################################################
+
+PROJECT_NUMBER=$(shell ./genProjectNumber.sh)
+TMP_FILE=cfg.tmp
+OUTPUT_FILE=doxygen_output.txt
+WARNINGS_FILE=doxygen_warnings.txt
+
+GEN_GRAPHS ?= NO
+
+.PHONY: docs
+docs:
+	@if [ "$(GEN_GRAPHS)" != "YES" ]; then \
+		echo "#####################################################################" ; \
+		echo "# Graphs will NOT be generated                                      #" ; \
+		echo "# Type 'make GEN_GRAPHS=YES' to instruct doxygen to generate graphs #" ; \
+		echo "#####################################################################" ; \
+		sleep 3 ; \
+	fi
+	$(call gen_doc_cmd,$(OUT_DOCS_DIR)/bal_internal,bal.doxy)
+	$(call gen_doc_cmd,$(OUT_DOCS_DIR)/bal_public,bal_public.doxy)
+	$(call gen_doc_cmd,$(OUT_DOCS_DIR)/sdn_pal,sdn_pal.doxy)
+	$(call gen_doc_cmd,$(OUT_DOCS_DIR)/omcisvc,omcisvc.doxy)
+
+define gen_doc_cmd
+	rm -fr $1
+	mkdir -p $1
+	sed -e 's@%OUT_DOCS_DIR@$1@g' \
+		-e 's@%SRC_DIR@$(TOP_SRC_DIR)@g' \
+		-e 's@%PROJECT_NUMBER@$(PROJECT_NUMBER)@g' \
+		-e 's@%HAVE_DOT@$(GEN_GRAPHS)@g' \
+		-e 's@%MODEL_DIR@$(OUT_DIR_BASE)/src/common/include@g' \
+		-e 's@%OMCI_MODEL_DIR@$(OUT_DIR_BASE)/src/lib/libomcisvc@g' \
+		$2 > $1/Doxyfile
+	rm -fr $1/$(OUTPUT_FILE) $1/$(WARNINGS_FILE)
+	cd $1 && doxygen 2>$1/$(WARNINGS_FILE) | tee $1/$(OUTPUT_FILE)
+	@echo ""
+	@echo "############################################"
+	@echo "#  Checking doxygen output for warnings... #"
+	@echo "############################################"
+	@cat $1/$(WARNINGS_FILE)
+	@test -s $1/$(WARNINGS_FILE) && echo -ne "\n!!! WARNINGS WERE FOUND!!!\n\nPlease see warnings listed above and check $1/$(WARNINGS_FILE) for more information\n\n" && exit -1 || echo "Done."
+	rm -fr $1/$(OUTPUT_FILE) $1/$(WARNINGS_FILE) $1/Doxyfile
+endef
diff --git a/bal_release/doxygen/bal.doxy b/bal_release/doxygen/bal.doxy
new file mode 100644
index 0000000..7b4e8ca
--- /dev/null
+++ b/bal_release/doxygen/bal.doxy
@@ -0,0 +1,1841 @@
+# Doxyfile 1.8.2
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project.
+#
+# All text after a hash (#) is considered a comment and will be ignored.
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ").
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the
+# iconv built into libc) for the transcoding. See
+# http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+DOXYFILE_ENCODING      = UTF-8
+
+# The PROJECT_NAME tag is a single word (or sequence of words) that should
+# identify the project. Note that if you do not use Doxywizard you need
+# to put quotes around the project name if it contains spaces.
+
+PROJECT_NAME           = "Broadband Adaption Layer"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER         = %PROJECT_NUMBER
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer
+# a quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF          =
+
+# With the PROJECT_LOGO tag one can specify an logo or icon that is
+# included in the documentation. The maximum height of the logo should not
+# exceed 55 pixels and the maximum width should not exceed 200 pixels.
+# Doxygen will copy the logo to the output directory.
+
+PROJECT_LOGO           = "%SRC_DIR/../doxygen/broadcom.png"
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = %OUT_DOCS_DIR
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 4096 sub-directories (in 2 levels) under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of
+# source files, where putting all generated files in the same directory would
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS         = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
+# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak,
+# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
+
+OUTPUT_LANGUAGE        = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is
+# used as the annotated text. Otherwise, the brief description is used as-is.
+# If left blank, the following values are used ("$name" is automatically
+# replaced with the name of the entity): "The $name class" "The $name widget"
+# "The $name file" "is" "provides" "specifies" "contains"
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF       =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES        = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
+# path to strip. Note that you specify absolute paths here, but also
+# relative paths, which will be relative from the directory where doxygen is
+# started.
+
+STRIP_FROM_PATH        =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH    =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful if your file system
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like regular Qt-style comments
+# (thus requiring an explicit @brief command for a brief description.)
+
+JAVADOC_AUTOBRIEF      = YES
+
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
+# interpret the first line (until the first dot) of a Qt-style
+# comment as the brief description. If set to NO, the comments
+# will behave just like regular Qt-style comments (thus requiring
+# an explicit \brief command for a brief description.)
+
+QT_AUTOBRIEF           = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# re-implements.
+
+INHERIT_DOCS           = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
+# a new page for each member. If set to NO, the documentation of a member will
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES  = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE               = 4
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES                = "TABLE_HDR2{2}=<tr><th>\1</th><th>\2</th></tr>" \
+                         "TABLE_ROW2{2}=<tr><td>\1</td><td>\2</td></tr>" \
+                         "TABLE_HDR3{3}=<tr><th>\1</th><th>\2</th><th>\3</th></tr>" \
+                         "TABLE_ROW3{3}=<tr><td>\1</td><td>\2</td><td>\3</td></tr>" \
+                         "TABLE_HDR4{4}=<tr><th>\1</th><th>\2</th><th>\3</th><th>\4</th></tr>" \
+                         "TABLE_ROW4{4}=<tr><td>\1</td><td>\2</td><td>\3</td><td>\4</td></tr>" \
+                         "TABLE_HDR5{5}=<tr><th>\1</th><th>\2</th><th>\3</th><th>\4</th><th>\5</th></tr>" \
+                         "TABLE_ROW5{5}=<tr><td>\1</td><td>\2</td><td>\3</td><td>\4</td><td>\5</td></tr>" \
+                         "TABLE_HDR6{6}=<tr><th>\1</th><th>\2</th><th>\3</th><th>\4</th><th>\5</th><th>\6</th></tr>" \
+                         "TABLE_ROW6{6}=<tr><td>\1</td><td>\2</td><td>\3</td><td>\4</td><td>\5</td><td>\6</td></tr>" \
+                         "TABLE_HDR7{7}=<tr><th>\1</th><th>\2</th><th>\3</th><th>\4</th><th>\5</th><th>\6</th><th>\7</th></tr>" \
+                         "TABLE_ROW7{7}=<tr><td>\1</td><td>\2</td><td>\3</td><td>\4</td><td>\5</td><td>\6</td><td>\7</td></tr>"
+
+# This tag can be used to specify a number of word-keyword mappings (TCL only).
+# A mapping has the form "name=value". For example adding
+# "class=itcl::class" will allow you to use the command class in the
+# itcl::class meaning.
+
+TCL_SUBST              =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
+# sources only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C  = YES
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
+# sources only. Doxygen will then generate output that is more tailored for
+# Java. For instance, namespaces will be presented as packages, qualified
+# scopes will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources only. Doxygen will then generate output that is more tailored for
+# Fortran.
+
+OPTIMIZE_FOR_FORTRAN   = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for
+# VHDL.
+
+OPTIMIZE_OUTPUT_VHDL   = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given
+# extension. Doxygen has a built-in mapping, but you can override or extend it
+# using this tag. The format is ext=language, where ext is a file extension,
+# and language is one of the parsers supported by doxygen: IDL, Java,
+# Javascript, CSharp, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL, C,
+# C++. For instance to make doxygen treat .inc files as Fortran files (default
+# is PHP), and .f files as C (default is Fortran), use: inc=Fortran f=C. Note
+# that for custom extensions you also need to set FILE_PATTERNS otherwise the
+# files are not read by doxygen.
+
+EXTENSION_MAPPING      =
+
+# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all
+# comments according to the Markdown format, which allows for more readable
+# documentation. See http://daringfireball.net/projects/markdown/ for details.
+# The output of markdown processing is further processed by doxygen, so you
+# can mix doxygen, HTML, and XML commands with Markdown formatting.
+# Disable only in case of backward compatibilities issues.
+
+MARKDOWN_SUPPORT       = YES
+
+# When enabled doxygen tries to link words that correspond to documented classes,
+# or namespaces to their corresponding documentation. Such a link can be
+# prevented in individual cases by by putting a % sign in front of the word or
+# globally by setting AUTOLINK_SUPPORT to NO.
+
+AUTOLINK_SUPPORT       = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should
+# set this tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
+# func(std::string) {}). This also makes the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT    = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+
+CPP_CLI_SUPPORT        = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
+# Doxygen will parse them like normal C++ but will assume all classes use public
+# instead of private inheritance when no explicit protection keyword is present.
+
+SIP_SUPPORT            = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate getter and setter methods for a property. Setting this option to YES (the default) will make doxygen replace the get and set methods by a property in the documentation. This will only work if the methods are indeed getting or setting a simple type. If this is not the case, or you want to show the methods anyway, you should set this option to NO.
+
+IDL_PROPERTY_SUPPORT   = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING            = YES
+
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and
+# unions are shown inside the group in which they are included (e.g. using
+# @ingroup) instead of on a separate page (for HTML and Man pages) or
+# section (for LaTeX and RTF).
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and
+# unions with only public data fields will be shown inline in the documentation
+# of the scope in which they are defined (i.e. file, namespace, or group
+# documentation), provided this scope is documented. If set to NO (the default),
+# structs, classes, and unions are shown on a separate page (for HTML and Man
+# pages) or section (for LaTeX and RTF).
+
+INLINE_SIMPLE_STRUCTS  = NO
+
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
+# is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically
+# be useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+
+TYPEDEF_HIDES_STRUCT   = NO
+
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
+# determine which symbols to keep in memory and which to flush to disk.
+# When the cache is full, less often used symbols will be written to disk.
+# For small to medium size projects (<1000 input files) the default value is
+# probably good enough. For larger projects a too small cache size can cause
+# doxygen to be busy swapping symbols to and from disk most of the time
+# causing a significant performance penalty.
+# If the system has enough physical memory increasing the cache will improve the
+# performance by keeping more symbols in memory. Note that the value works on
+# a logarithmic scale so increasing the size by one will roughly double the
+# memory usage. The cache size is given by this formula:
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols.
+
+#SYMBOL_CACHE_SIZE      = 0
+
+# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be
+# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given
+# their name and scope. Since this can be an expensive process and often the
+# same symbol appear multiple times in the code, doxygen keeps a cache of
+# pre-resolved symbols. If the cache is too small doxygen will become slower.
+# If the cache is too large, memory is wasted. The cache size is given by this
+# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols.
+
+LOOKUP_CACHE_SIZE      = 1
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL            = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE        = YES
+
+# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
+# scope will be included in the documentation.
+
+EXTRACT_PACKAGE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC         = YES
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base
+# name of the file that contains the anonymous namespace. By default
+# anonymous namespaces are hidden.
+
+EXTRACT_ANON_NSPACES   = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES       = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen
+# will list include files with double quotes in the documentation
+# rather than with sharp brackets.
+
+FORCE_LOCAL_INCLUDES   = NO
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS       = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
+# declaration order.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen
+# will sort the (brief and detailed) documentation of class members so that
+# constructors and destructors are listed first. If set to NO (the default)
+# the constructors will appear in the respective orders defined by
+# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.
+# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO
+# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
+# hierarchy of group names into alphabetical order. If set to NO (the default)
+# the group names will appear in their defined order.
+
+SORT_GROUP_NAMES       = YES
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
+# sorted by fully-qualified names, including namespaces. If set to
+# NO (the default), the class list will be sorted only by class name,
+# not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME     = NO
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to
+# do proper type resolution of all parameters of a function it will reject a
+# match between the prototype and the implementation of a member function even
+# if there is only one candidate or it is obvious which candidate to choose
+# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen
+# will still accept a match between prototype and implementation in such cases.
+
+STRICT_PROTO_MATCHING  = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS       =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or macro consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and macros in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES        = YES
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
+# This will remove the Files entry from the Quick Index and from the
+# Folder Tree View (if specified). The default is YES.
+
+SHOW_FILES             = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the
+# Namespaces page.
+# This will remove the Namespaces entry from the Quick Index
+# and from the Folder Tree View (if specified). The default is YES.
+
+SHOW_NAMESPACES        = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command <command> <input-file>, where <command> is the value of
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
+# provided by doxygen. Whatever the program writes to standard output
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER    =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. To create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option.
+# You can optionally specify a file name after the option, if omitted
+# DoxygenLayout.xml will be used as the name of the layout file.
+
+LAYOUT_FILE            = %SRC_DIR/../doxygen/DoxygenLayout.xml
+
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files
+# containing the references data. This must be a list of .bib files. The
+# .bib extension is automatically appended if omitted. Using this command
+# requires the bibtex tool to be installed. See also
+# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style
+# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this
+# feature you need bibtex and perl available in the search path.
+
+CITE_BIB_FILES         =
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS               = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED   = NO
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR      = YES
+
+# The WARN_NO_PARAMDOC option can be enabled to get warnings for
+# functions that are documented, but have no documentation for their parameters
+# or return value. If set to NO (the default) doxygen will only warn about
+# wrong or incomplete parameter documentation, but not about the absence of
+# documentation.
+
+WARN_NO_PARAMDOC       = YES
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text. Optionally the format may contain
+# $version, which will be replaced by the version of the file (if it could
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE           =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT                  = %SRC_DIR/lib/libbalapi/bal_api.dox \
+                         %MODEL_DIR/model.dox \
+                         %SRC_DIR/lib/libbalapi/bal_api.h \
+                         %SRC_DIR/lib/libbalapi/bal_api.c \
+                         %MODEL_DIR/bal_model_ids.h \
+                         %MODEL_DIR/bal_model_types.h \
+                         %SRC_DIR
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
+# also the default input encoding. Doxygen uses libiconv (or the iconv built
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
+# the list of possible encodings.
+
+INPUT_ENCODING         = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh
+# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py
+# *.f90 *.f *.for *.vhd *.vhdl
+
+FILE_PATTERNS          = *.c *.h *.cpp
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE              = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should be
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+# Note that relative paths are relative to the directory from which doxygen is
+# run.
+
+EXCLUDE                = %SRC_DIR/common/os_abstraction \
+                         %SRC_DIR/common/db_engine \
+                         %SRC_DIR/common/cli \
+                         %SRC_DIR/common/dev_log \
+                         %SRC_DIR/common/utils \
+                         %SRC_DIR/common/config \
+                         %SRC_DIR/core/util/oam/epon_oam_cli \
+                         %SRC_DIR/core/util/oam/epon_oam \
+                         %SRC_DIR/core/util/oam/common_epon_oam \
+                         %SRC_DIR/core/util/oam/eon \
+                         %SRC_DIR/common/model \
+                         %SRC_DIR/lib/libomcisvc \
+                         %SRC_DIR/lib/libomcistack \
+                         %SRC_DIR/ofpal/loci
+
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
+# from the input.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories. Note that the wildcards are matched
+# against the file with absolute path, so to exclude all test directories
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS       = */test/* \
+                         *Examples*
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS        =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH           =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS       =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH             =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output.
+# If FILTER_PATTERNS is specified, this tag will be
+# ignored.
+
+INPUT_FILTER           =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis.
+# Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match.
+# The filters are a list of the form:
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
+# info on how filters are used. If FILTER_PATTERNS is empty or if
+# non of the patterns match the file name, INPUT_FILTER is applied.
+
+FILTER_PATTERNS        =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES    = NO
+
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any)
+# and it is also possible to disable source filtering for a specific pattern
+# using *.ext= (so without naming a filter). This option only has effect when
+# FILTER_SOURCE_FILES is enabled.
+
+FILTER_SOURCE_PATTERNS =
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER         = YES
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C, C++ and Fortran comments will always remain visible.
+
+STRIP_CODE_COMMENTS    = NO
+
+# If the REFERENCED_BY_RELATION tag is set to YES
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = NO
+
+# If the REFERENCES_RELATION tag is set to YES
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION    = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
+# link to the source code.
+# Otherwise they will link to the documentation.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code
+# will point to the HTML generated by the htags(1) tool instead of doxygen
+# built-in source browser. The htags tool is part of GNU's global source
+# tagging system (see http://www.gnu.org/software/global/global.html). You
+# will need version 4.8.6 or higher.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS       = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX     = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX          =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header. Note that when using a custom header you are responsible
+#  for the proper inclusion of any scripts and style sheets that doxygen
+# needs, which is dependent on the configuration options used.
+# It is advised to generate a default header using "doxygen -w html
+# header.html footer.html stylesheet.css YourConfigFile" and then modify
+# that header. Note that the header is subject to change so you typically
+# have to redo this when upgrading to a newer version of doxygen or when
+# changing the value of configuration settings such as GENERATE_TREEVIEW!
+
+HTML_HEADER            = %SRC_DIR/../doxygen/header.html
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER            = %SRC_DIR/../doxygen/footer.html
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If left blank doxygen will
+# generate a default style sheet. Note that it is recommended to use
+# HTML_EXTRA_STYLESHEET instead of this one, as it is more robust and this
+# tag will in the future become obsolete.
+
+HTML_STYLESHEET        =
+
+# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional
+# user-defined cascading style sheet that is included after the standard
+# style sheets created by doxygen. Using this option one can overrule
+# certain style aspects. This is preferred over using HTML_STYLESHEET
+# since it does not replace the standard style sheet and is therefor more
+# robust against future updates. Doxygen will copy the style sheet file to
+# the output directory.
+
+HTML_EXTRA_STYLESHEET  =
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the HTML output directory. Note
+# that these files will be copied to the base HTML output directory. Use the
+# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that
+# the files will be copied as-is; there are no commands or markers available.
+
+HTML_EXTRA_FILES       =
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
+# Doxygen will adjust the colors in the style sheet and background images
+# according to this color. Hue is specified as an angle on a colorwheel,
+# see http://en.wikipedia.org/wiki/Hue for more information.
+# For instance the value 0 represents red, 60 is yellow, 120 is green,
+# 180 is cyan, 240 is blue, 300 purple, and 360 is red again.
+# The allowed range is 0 to 359.
+
+HTML_COLORSTYLE_HUE    = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of
+# the colors in the HTML output. For a value of 0 the output will use
+# grayscales only. A value of 255 will produce the most vivid colors.
+
+HTML_COLORSTYLE_SAT    = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to
+# the luminance component of the colors in the HTML output. Values below
+# 100 gradually make the output lighter, whereas values above 100 make
+# the output darker. The value divided by 100 is the actual gamma applied,
+# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,
+# and 100 does not change the gamma.
+
+HTML_COLORSTYLE_GAMMA  = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting
+# this to NO can help when comparing the output of multiple runs.
+
+HTML_TIMESTAMP         = YES
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded.
+
+HTML_DYNAMIC_SECTIONS  = NO
+
+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of
+# entries shown in the various tree structured indices initially; the user
+# can expand and collapse entries dynamically later on. Doxygen will expand
+# the tree to such a level that at most the specified number of entries are
+# visible (unless a fully collapsed tree already exceeds this amount).
+# So setting the number of entries 1 will produce a full collapsed tree by
+# default. 0 is a special value representing an infinite number of entries
+# and will result in a full expanded tree by default.
+
+HTML_INDEX_NUM_ENTRIES = 100
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files
+# will be generated that can be used as input for Apple's Xcode 3
+# integrated development environment, introduced with OSX 10.5 (Leopard).
+# To create a documentation set, doxygen will generate a Makefile in the
+# HTML output directory. Running make will produce the docset in that
+# directory and running "make install" will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
+# it at startup.
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# for more information.
+
+GENERATE_DOCSET        = NO
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
+# feed. A documentation feed provides an umbrella under which multiple
+# documentation sets from a single provider (such as a company or product suite)
+# can be grouped.
+
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
+# should uniquely identify the documentation set bundle. This should be a
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
+# will append .docset to the name.
+
+DOCSET_BUNDLE_ID       = www.broadcom.com
+
+# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely
+# identify the documentation publisher. This should be a reverse domain-name
+# style string, e.g. com.mycompany.MyDocSet.documentation.
+
+DOCSET_PUBLISHER_ID    = www.broadcom.com
+
+# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
+
+DOCSET_PUBLISHER_NAME  = Broadcom Limited
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP      = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output directory.
+
+CHM_FILE               =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION           =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI           = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file
+# content.
+
+CHM_INDEX_ENCODING     =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND             = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated
+# that can be used as input for Qt's qhelpgenerator to generate a
+# Qt Compressed Help (.qch) of the generated HTML documentation.
+
+GENERATE_QHP           = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can
+# be used to specify the file name of the resulting .qch file.
+# The path specified is relative to the HTML output folder.
+
+QCH_FILE               =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#namespace
+
+QHP_NAMESPACE          = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#virtual-folders
+
+QHP_VIRTUAL_FOLDER     = doc
+
+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to
+# add. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#custom-filters
+
+QHP_CUST_FILTER_NAME   =
+
+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see
+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">
+# Qt Help Project / Custom Filters</a>.
+
+QHP_CUST_FILTER_ATTRS  =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's
+# filter section matches.
+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">
+# Qt Help Project / Filter Attributes</a>.
+
+QHP_SECT_FILTER_ATTRS  =
+
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
+# be used to specify the location of Qt's qhelpgenerator.
+# If non-empty doxygen will try to run qhelpgenerator on the generated
+# .qhp file.
+
+QHG_LOCATION           =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files
+#  will be generated, which together with the HTML files, form an Eclipse help
+# plugin. To install this plugin and make it available under the help contents
+# menu in Eclipse, the contents of the directory containing the HTML and XML
+# files needs to be copied into the plugins directory of eclipse. The name of
+# the directory within the plugins directory should be the same as
+# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before
+# the help appears.
+
+GENERATE_ECLIPSEHELP   = NO
+
+# A unique identifier for the eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have
+# this name.
+
+ECLIPSE_DOC_ID         = org.doxygen.Project
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs)
+# at top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it. Since the tabs have the same information as the
+# navigation tree you can set this option to NO if you already set
+# GENERATE_TREEVIEW to YES.
+
+DISABLE_INDEX          = YES
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information.
+# If the tag value is set to YES, a side panel will be generated
+# containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
+# Windows users are probably better off using the HTML help feature.
+# Since the tree basically has the same information as the tab index you
+# could consider to set DISABLE_INDEX to NO when enabling this option.
+
+GENERATE_TREEVIEW      = YES
+
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values
+# (range [0,1..20]) that doxygen will group on one line in the generated HTML
+# documentation. Note that a value of 0 will completely suppress the enum
+# values from appearing in the overview section.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH         = 250
+
+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open
+# links to external symbols imported via tag files in a separate window.
+
+EXT_LINKS_IN_WINDOW    = NO
+
+# Use this tag to change the font size of Latex formulas included
+# as images in the HTML documentation. The default is 10. Note that
+# when you change the font size after a successful doxygen run you need
+# to manually remove any form_*.png images from the HTML output directory
+# to force them to be regenerated.
+
+FORMULA_FONTSIZE       = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are
+# not supported properly for IE 6.0, but are supported on all modern browsers.
+# Note that when changing this option you need to delete any form_*.png files
+# in the HTML output before the changes have effect.
+
+FORMULA_TRANSPARENT    = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax
+# (see http://www.mathjax.org) which uses client side Javascript for the
+# rendering instead of using prerendered bitmaps. Use this if you do not
+# have LaTeX installed or if you want to formulas look prettier in the HTML
+# output. When enabled you may also need to install MathJax separately and
+# configure the path to it using the MATHJAX_RELPATH option.
+
+USE_MATHJAX            = NO
+
+# When MathJax is enabled you need to specify the location relative to the
+# HTML output directory using the MATHJAX_RELPATH option. The destination
+# directory should contain the MathJax.js script. For instance, if the mathjax
+# directory is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to
+# the MathJax Content Delivery Network so you can quickly see the result without
+# installing MathJax.
+# However, it is strongly recommended to install a local
+# copy of MathJax from http://www.mathjax.org before deployment.
+
+MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension
+# names that should be enabled during MathJax rendering.
+
+MATHJAX_EXTENSIONS     =
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box
+# for the HTML output. The underlying search engine uses javascript
+# and DHTML and should work on any modern browser. Note that when using
+# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets
+# (GENERATE_DOCSET) there is already a search function so this one should
+# typically be disabled. For large projects the javascript based search engine
+# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
+
+SEARCHENGINE           = YES
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a PHP enabled web server instead of at the web client
+# using Javascript. Doxygen will generate the search PHP script and index
+# file to put on the web server. The advantage of the server
+# based approach is that it scales better to large projects and allows
+# full text search. The disadvantages are that it is more difficult to setup
+# and does not have live searching capabilities.
+
+SERVER_BASED_SEARCH    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX         = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+# Note that when enabling USE_PDFLATEX this option is only used for
+# generating bitmaps for formulas in the HTML output, but not in the
+# Makefile that is written to the output directory.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE             = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES         =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER           =
+
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for
+# the generated latex document. The footer should contain everything after
+# the last chapter. If it is left blank doxygen will generate a
+# standard footer. Notice: only use this tag if you know what you are doing!
+
+LATEX_FOOTER           =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS         = NO
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX           = NO
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE        = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES     = NO
+
+# If LATEX_SOURCE_CODE is set to YES then doxygen will include
+# source code with syntax highlighting in the LaTeX output.
+# Note that which sources are shown also depends on other settings
+# such as SOURCE_BROWSER.
+
+LATEX_SOURCE_CODE      = NO
+
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
+# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See
+# http://en.wikipedia.org/wiki/BibTeX for more info.
+
+LATEX_BIB_STYLE        = plain
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimized for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS         = NO
+
+# Load style sheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE    =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE    =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION          = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT             = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+#XML_SCHEMA             =
+
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+#XML_DTD                =
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
+# dump the program listings (including syntax highlighting
+# and cross-referencing information) to the XML output. Note that
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader.
+# This is useful
+# if you want to understand what is going on.
+# On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION        = YES
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF     = YES
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# pointed to by INCLUDE_PATH will be searched when a #include is found.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH           =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS  =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed. To prevent a macro definition from being
+# undefined via #undef or recursively expanded use the := operator
+# instead of the = operator.
+
+PREDEFINED             = __attribute__(x)= \
+                         __cplusplus
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition that
+# overrules the definition found in the source code.
+
+EXPAND_AS_DEFINED      =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all references to function-like macros
+# that are alone on a line, have an all uppercase name, and do not end with a
+# semicolon, because these will confuse the parser if not removed.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles. For each
+# tag file the location of the external documentation should be added. The
+# format of a tag file without this location is as follows:
+#
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+#
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths
+# or URLs. Note that each tag file must have a unique name (where the name does
+# NOT include the path). If a tag file is not located in the directory in which
+# doxygen is run, you must also specify the path to the tagfile here.
+
+TAGFILES               =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE       =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS        = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
+# or super classes. Setting the tag to NO turns the diagrams off. Note that
+# this option also works with HAVE_DOT disabled, but it is recommended to
+# install and use dot, since it yields more powerful graphs.
+
+CLASS_DIAGRAMS         = YES
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH            =
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT               = %HAVE_DOT
+
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is
+# allowed to run in parallel. When set to 0 (the default) doxygen will
+# base this on the number of processors available in the system. You can set it
+# explicitly to a value larger than 0 to get control over the balance
+# between CPU load and processing speed.
+
+DOT_NUM_THREADS        = 0
+
+# By default doxygen will use the Helvetica font for all dot files that
+# doxygen generates. When you want a differently looking font you can specify
+# the font name using DOT_FONTNAME. You need to make sure dot is able to find
+# the font, which can be done by putting it in a standard location or by setting
+# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the
+# directory containing the font.
+
+DOT_FONTNAME           = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
+# The default size is 10pt.
+
+DOT_FONTSIZE           = 10
+
+# By default doxygen will tell dot to use the Helvetica font.
+# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to
+# set the path where dot can find it.
+
+DOT_FONTPATH           =
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH    = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS           = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK               = NO
+
+# If the UML_LOOK tag is enabled, the fields and methods are shown inside
+# the class node. If there are many fields or methods and many nodes the
+# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS
+# threshold limits the number of items for each type to make the size more
+# managable. Set this to 0 for no limit. Note that the threshold may be
+# exceeded by 50% before the limit is enforced.
+
+UML_LIMIT_NUM_FIELDS   = 10
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS     = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH          = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then
+# doxygen will generate a call dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable call graphs
+# for selected functions only using the \callgraph command.
+
+CALL_GRAPH             = NO
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
+# doxygen will generate a caller dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable caller
+# graphs for selected functions only using the \callergraph command.
+
+CALLER_GRAPH           = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will generate a graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES
+# then doxygen will show the dependencies a directory has on other directories
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH        = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are svg, png, jpg, or gif.
+# If left blank png will be used. If you choose svg you need to set
+# HTML_FILE_EXTENSION to xhtml in order to make the SVG files
+# visible in IE 9+ (other browsers do not have this requirement).
+
+DOT_IMAGE_FORMAT       = png
+
+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
+# enable generation of interactive SVG images that allow zooming and panning.
+# Note that this requires a modern browser other than Internet Explorer.
+# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you
+# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files
+# visible. Older versions of IE do not have SVG support.
+
+INTERACTIVE_SVG        = NO
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH               =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS           =
+
+# The MSCFILE_DIRS tag can be used to specify one or more directories that
+# contain msc files that are included in the documentation (see the
+# \mscfile command).
+
+MSCFILE_DIRS           =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
+# nodes that will be shown in the graph. If the number of nodes in a graph
+# becomes larger than this value, doxygen will truncate the graph, which is
+# visualized by representing a node as a red box. Note that doxygen if the
+# number of direct children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+
+DOT_GRAPH_MAX_NODES    = 200
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
+# graphs generated by dot. A depth value of 3 means that only nodes reachable
+# from the root by following a path via at most 3 edges will be shown. Nodes
+# that lay further from the root node will be omitted. Note that setting this
+# option to 1 or 2 may greatly reduce the computation time needed for large
+# code bases. Also note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+
+MAX_DOT_GRAPH_DEPTH    = 2
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not
+# seem to support this out of the box. Warning: Depending on the platform used,
+# enabling this option may lead to badly anti-aliased labels on the edges of
+# a graph (i.e. they become hard to read).
+
+DOT_TRANSPARENT        = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10)
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS      = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP            = YES
diff --git a/bal_release/doxygen/bal_public.doxy b/bal_release/doxygen/bal_public.doxy
new file mode 100644
index 0000000..8fbe34e
--- /dev/null
+++ b/bal_release/doxygen/bal_public.doxy
@@ -0,0 +1,1828 @@
+# Doxyfile 1.8.2
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project.
+#
+# All text after a hash (#) is considered a comment and will be ignored.
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ").
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the
+# iconv built into libc) for the transcoding. See
+# http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+DOXYFILE_ENCODING      = UTF-8
+
+# The PROJECT_NAME tag is a single word (or sequence of words) that should
+# identify the project. Note that if you do not use Doxywizard you need
+# to put quotes around the project name if it contains spaces.
+
+PROJECT_NAME           = "Broadband Adaption Layer"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER         = %PROJECT_NUMBER
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer
+# a quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF          =
+
+# With the PROJECT_LOGO tag one can specify an logo or icon that is
+# included in the documentation. The maximum height of the logo should not
+# exceed 55 pixels and the maximum width should not exceed 200 pixels.
+# Doxygen will copy the logo to the output directory.
+
+PROJECT_LOGO           = "%SRC_DIR/../doxygen/broadcom.png"
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = %OUT_DOCS_DIR
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 4096 sub-directories (in 2 levels) under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of
+# source files, where putting all generated files in the same directory would
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS         = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
+# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak,
+# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
+
+OUTPUT_LANGUAGE        = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is
+# used as the annotated text. Otherwise, the brief description is used as-is.
+# If left blank, the following values are used ("$name" is automatically
+# replaced with the name of the entity): "The $name class" "The $name widget"
+# "The $name file" "is" "provides" "specifies" "contains"
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF       =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES        = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
+# path to strip. Note that you specify absolute paths here, but also
+# relative paths, which will be relative from the directory where doxygen is
+# started.
+
+STRIP_FROM_PATH        =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH    =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful if your file system
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like regular Qt-style comments
+# (thus requiring an explicit @brief command for a brief description.)
+
+JAVADOC_AUTOBRIEF      = YES
+
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
+# interpret the first line (until the first dot) of a Qt-style
+# comment as the brief description. If set to NO, the comments
+# will behave just like regular Qt-style comments (thus requiring
+# an explicit \brief command for a brief description.)
+
+QT_AUTOBRIEF           = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# re-implements.
+
+INHERIT_DOCS           = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
+# a new page for each member. If set to NO, the documentation of a member will
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES  = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE               = 4
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES                = "TABLE_HDR2{2}=<tr><th>\1</th><th>\2</th></tr>" \
+                         "TABLE_ROW2{2}=<tr><td>\1</td><td>\2</td></tr>" \
+                         "TABLE_HDR3{3}=<tr><th>\1</th><th>\2</th><th>\3</th></tr>" \
+                         "TABLE_ROW3{3}=<tr><td>\1</td><td>\2</td><td>\3</td></tr>" \
+                         "TABLE_HDR4{4}=<tr><th>\1</th><th>\2</th><th>\3</th><th>\4</th></tr>" \
+                         "TABLE_ROW4{4}=<tr><td>\1</td><td>\2</td><td>\3</td><td>\4</td></tr>" \
+                         "TABLE_HDR5{5}=<tr><th>\1</th><th>\2</th><th>\3</th><th>\4</th><th>\5</th></tr>" \
+                         "TABLE_ROW5{5}=<tr><td>\1</td><td>\2</td><td>\3</td><td>\4</td><td>\5</td></tr>" \
+                         "TABLE_HDR6{6}=<tr><th>\1</th><th>\2</th><th>\3</th><th>\4</th><th>\5</th><th>\6</th></tr>" \
+                         "TABLE_ROW6{6}=<tr><td>\1</td><td>\2</td><td>\3</td><td>\4</td><td>\5</td><td>\6</td></tr>" \
+                         "TABLE_HDR7{7}=<tr><th>\1</th><th>\2</th><th>\3</th><th>\4</th><th>\5</th><th>\6</th><th>\7</th></tr>" \
+                         "TABLE_ROW7{7}=<tr><td>\1</td><td>\2</td><td>\3</td><td>\4</td><td>\5</td><td>\6</td><td>\7</td></tr>"
+
+# This tag can be used to specify a number of word-keyword mappings (TCL only).
+# A mapping has the form "name=value". For example adding
+# "class=itcl::class" will allow you to use the command class in the
+# itcl::class meaning.
+
+TCL_SUBST              =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
+# sources only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C  = YES
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
+# sources only. Doxygen will then generate output that is more tailored for
+# Java. For instance, namespaces will be presented as packages, qualified
+# scopes will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources only. Doxygen will then generate output that is more tailored for
+# Fortran.
+
+OPTIMIZE_FOR_FORTRAN   = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for
+# VHDL.
+
+OPTIMIZE_OUTPUT_VHDL   = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given
+# extension. Doxygen has a built-in mapping, but you can override or extend it
+# using this tag. The format is ext=language, where ext is a file extension,
+# and language is one of the parsers supported by doxygen: IDL, Java,
+# Javascript, CSharp, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL, C,
+# C++. For instance to make doxygen treat .inc files as Fortran files (default
+# is PHP), and .f files as C (default is Fortran), use: inc=Fortran f=C. Note
+# that for custom extensions you also need to set FILE_PATTERNS otherwise the
+# files are not read by doxygen.
+
+EXTENSION_MAPPING      =
+
+# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all
+# comments according to the Markdown format, which allows for more readable
+# documentation. See http://daringfireball.net/projects/markdown/ for details.
+# The output of markdown processing is further processed by doxygen, so you
+# can mix doxygen, HTML, and XML commands with Markdown formatting.
+# Disable only in case of backward compatibilities issues.
+
+MARKDOWN_SUPPORT       = YES
+
+# When enabled doxygen tries to link words that correspond to documented classes,
+# or namespaces to their corresponding documentation. Such a link can be
+# prevented in individual cases by by putting a % sign in front of the word or
+# globally by setting AUTOLINK_SUPPORT to NO.
+
+AUTOLINK_SUPPORT       = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should
+# set this tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
+# func(std::string) {}). This also makes the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT    = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+
+CPP_CLI_SUPPORT        = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
+# Doxygen will parse them like normal C++ but will assume all classes use public
+# instead of private inheritance when no explicit protection keyword is present.
+
+SIP_SUPPORT            = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate getter and setter methods for a property. Setting this option to YES (the default) will make doxygen replace the get and set methods by a property in the documentation. This will only work if the methods are indeed getting or setting a simple type. If this is not the case, or you want to show the methods anyway, you should set this option to NO.
+
+IDL_PROPERTY_SUPPORT   = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING            = YES
+
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and
+# unions are shown inside the group in which they are included (e.g. using
+# @ingroup) instead of on a separate page (for HTML and Man pages) or
+# section (for LaTeX and RTF).
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and
+# unions with only public data fields will be shown inline in the documentation
+# of the scope in which they are defined (i.e. file, namespace, or group
+# documentation), provided this scope is documented. If set to NO (the default),
+# structs, classes, and unions are shown on a separate page (for HTML and Man
+# pages) or section (for LaTeX and RTF).
+
+INLINE_SIMPLE_STRUCTS  = NO
+
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
+# is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically
+# be useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+
+TYPEDEF_HIDES_STRUCT   = NO
+
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
+# determine which symbols to keep in memory and which to flush to disk.
+# When the cache is full, less often used symbols will be written to disk.
+# For small to medium size projects (<1000 input files) the default value is
+# probably good enough. For larger projects a too small cache size can cause
+# doxygen to be busy swapping symbols to and from disk most of the time
+# causing a significant performance penalty.
+# If the system has enough physical memory increasing the cache will improve the
+# performance by keeping more symbols in memory. Note that the value works on
+# a logarithmic scale so increasing the size by one will roughly double the
+# memory usage. The cache size is given by this formula:
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols.
+
+#SYMBOL_CACHE_SIZE      = 0
+
+# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be
+# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given
+# their name and scope. Since this can be an expensive process and often the
+# same symbol appear multiple times in the code, doxygen keeps a cache of
+# pre-resolved symbols. If the cache is too small doxygen will become slower.
+# If the cache is too large, memory is wasted. The cache size is given by this
+# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols.
+
+LOOKUP_CACHE_SIZE      = 1
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL            = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE        = NO
+
+# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
+# scope will be included in the documentation.
+
+EXTRACT_PACKAGE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC         = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES  = NO
+
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base
+# name of the file that contains the anonymous namespace. By default
+# anonymous namespaces are hidden.
+
+EXTRACT_ANON_NSPACES   = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS     = YES
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES     = YES
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES       = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen
+# will list include files with double quotes in the documentation
+# rather than with sharp brackets.
+
+FORCE_LOCAL_INCLUDES   = NO
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS       = NO
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
+# declaration order.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen
+# will sort the (brief and detailed) documentation of class members so that
+# constructors and destructors are listed first. If set to NO (the default)
+# the constructors will appear in the respective orders defined by
+# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.
+# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO
+# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
+# hierarchy of group names into alphabetical order. If set to NO (the default)
+# the group names will appear in their defined order.
+
+SORT_GROUP_NAMES       = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
+# sorted by fully-qualified names, including namespaces. If set to
+# NO (the default), the class list will be sorted only by class name,
+# not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME     = NO
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to
+# do proper type resolution of all parameters of a function it will reject a
+# match between the prototype and the implementation of a member function even
+# if there is only one candidate or it is obvious which candidate to choose
+# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen
+# will still accept a match between prototype and implementation in such cases.
+
+STRICT_PROTO_MATCHING  = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST      = NO
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST      = NO
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS       =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or macro consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and macros in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES        = NO
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
+# This will remove the Files entry from the Quick Index and from the
+# Folder Tree View (if specified). The default is YES.
+
+SHOW_FILES             = NO
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the
+# Namespaces page.
+# This will remove the Namespaces entry from the Quick Index
+# and from the Folder Tree View (if specified). The default is YES.
+
+SHOW_NAMESPACES        = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command <command> <input-file>, where <command> is the value of
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
+# provided by doxygen. Whatever the program writes to standard output
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER    =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. To create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option.
+# You can optionally specify a file name after the option, if omitted
+# DoxygenLayout.xml will be used as the name of the layout file.
+
+LAYOUT_FILE            = %SRC_DIR/../doxygen/DoxygenLayout.xml
+
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files
+# containing the references data. This must be a list of .bib files. The
+# .bib extension is automatically appended if omitted. Using this command
+# requires the bibtex tool to be installed. See also
+# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style
+# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this
+# feature you need bibtex and perl available in the search path.
+
+CITE_BIB_FILES         =
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS               = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED   = NO
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR      = YES
+
+# The WARN_NO_PARAMDOC option can be enabled to get warnings for
+# functions that are documented, but have no documentation for their parameters
+# or return value. If set to NO (the default) doxygen will only warn about
+# wrong or incomplete parameter documentation, but not about the absence of
+# documentation.
+
+WARN_NO_PARAMDOC       = YES
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text. Optionally the format may contain
+# $version, which will be replaced by the version of the file (if it could
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE           =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT                  = %SRC_DIR/lib/libbalapi/bal_api.dox \
+                         %SRC_DIR/lib/libbalapi/bal_api.h \
+                         %MODEL_DIR/model.dox \
+                         %SRC_DIR/common/include/bal_obj.h \
+                         %SRC_DIR/common/include/bal_objs.h \
+                         %MODEL_DIR/bal_model_ids.h \
+                         %MODEL_DIR/bal_model_types.h
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
+# also the default input encoding. Doxygen uses libiconv (or the iconv built
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
+# the list of possible encodings.
+
+INPUT_ENCODING         = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh
+# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py
+# *.f90 *.f *.for *.vhd *.vhdl
+
+FILE_PATTERNS          = *.c *.h *.cpp
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE              = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should be
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+# Note that relative paths are relative to the directory from which doxygen is
+# run.
+
+EXCLUDE                =
+
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
+# from the input.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories. Note that the wildcards are matched
+# against the file with absolute path, so to exclude all test directories
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS       = */test/* \
+                         *Examples*
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS        =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH           =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS       =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH             =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output.
+# If FILTER_PATTERNS is specified, this tag will be
+# ignored.
+
+INPUT_FILTER           =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis.
+# Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match.
+# The filters are a list of the form:
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
+# info on how filters are used. If FILTER_PATTERNS is empty or if
+# non of the patterns match the file name, INPUT_FILTER is applied.
+
+FILTER_PATTERNS        =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES    = NO
+
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any)
+# and it is also possible to disable source filtering for a specific pattern
+# using *.ext= (so without naming a filter). This option only has effect when
+# FILTER_SOURCE_FILES is enabled.
+
+FILTER_SOURCE_PATTERNS =
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER         = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C, C++ and Fortran comments will always remain visible.
+
+STRIP_CODE_COMMENTS    = NO
+
+# If the REFERENCED_BY_RELATION tag is set to YES
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = NO
+
+# If the REFERENCES_RELATION tag is set to YES
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION    = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
+# link to the source code.
+# Otherwise they will link to the documentation.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code
+# will point to the HTML generated by the htags(1) tool instead of doxygen
+# built-in source browser. The htags tool is part of GNU's global source
+# tagging system (see http://www.gnu.org/software/global/global.html). You
+# will need version 4.8.6 or higher.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS       = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX     = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX          =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header. Note that when using a custom header you are responsible
+#  for the proper inclusion of any scripts and style sheets that doxygen
+# needs, which is dependent on the configuration options used.
+# It is advised to generate a default header using "doxygen -w html
+# header.html footer.html stylesheet.css YourConfigFile" and then modify
+# that header. Note that the header is subject to change so you typically
+# have to redo this when upgrading to a newer version of doxygen or when
+# changing the value of configuration settings such as GENERATE_TREEVIEW!
+
+HTML_HEADER            = %SRC_DIR/../doxygen/header.html
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER            = %SRC_DIR/../doxygen/footer.html
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If left blank doxygen will
+# generate a default style sheet. Note that it is recommended to use
+# HTML_EXTRA_STYLESHEET instead of this one, as it is more robust and this
+# tag will in the future become obsolete.
+
+HTML_STYLESHEET        =
+
+# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional
+# user-defined cascading style sheet that is included after the standard
+# style sheets created by doxygen. Using this option one can overrule
+# certain style aspects. This is preferred over using HTML_STYLESHEET
+# since it does not replace the standard style sheet and is therefor more
+# robust against future updates. Doxygen will copy the style sheet file to
+# the output directory.
+
+HTML_EXTRA_STYLESHEET  =
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the HTML output directory. Note
+# that these files will be copied to the base HTML output directory. Use the
+# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that
+# the files will be copied as-is; there are no commands or markers available.
+
+HTML_EXTRA_FILES       =
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
+# Doxygen will adjust the colors in the style sheet and background images
+# according to this color. Hue is specified as an angle on a colorwheel,
+# see http://en.wikipedia.org/wiki/Hue for more information.
+# For instance the value 0 represents red, 60 is yellow, 120 is green,
+# 180 is cyan, 240 is blue, 300 purple, and 360 is red again.
+# The allowed range is 0 to 359.
+
+HTML_COLORSTYLE_HUE    = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of
+# the colors in the HTML output. For a value of 0 the output will use
+# grayscales only. A value of 255 will produce the most vivid colors.
+
+HTML_COLORSTYLE_SAT    = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to
+# the luminance component of the colors in the HTML output. Values below
+# 100 gradually make the output lighter, whereas values above 100 make
+# the output darker. The value divided by 100 is the actual gamma applied,
+# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,
+# and 100 does not change the gamma.
+
+HTML_COLORSTYLE_GAMMA  = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting
+# this to NO can help when comparing the output of multiple runs.
+
+HTML_TIMESTAMP         = YES
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded.
+
+HTML_DYNAMIC_SECTIONS  = NO
+
+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of
+# entries shown in the various tree structured indices initially; the user
+# can expand and collapse entries dynamically later on. Doxygen will expand
+# the tree to such a level that at most the specified number of entries are
+# visible (unless a fully collapsed tree already exceeds this amount).
+# So setting the number of entries 1 will produce a full collapsed tree by
+# default. 0 is a special value representing an infinite number of entries
+# and will result in a full expanded tree by default.
+
+HTML_INDEX_NUM_ENTRIES = 100
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files
+# will be generated that can be used as input for Apple's Xcode 3
+# integrated development environment, introduced with OSX 10.5 (Leopard).
+# To create a documentation set, doxygen will generate a Makefile in the
+# HTML output directory. Running make will produce the docset in that
+# directory and running "make install" will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
+# it at startup.
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# for more information.
+
+GENERATE_DOCSET        = NO
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
+# feed. A documentation feed provides an umbrella under which multiple
+# documentation sets from a single provider (such as a company or product suite)
+# can be grouped.
+
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
+# should uniquely identify the documentation set bundle. This should be a
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
+# will append .docset to the name.
+
+DOCSET_BUNDLE_ID       = www.broadcom.com
+
+# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely
+# identify the documentation publisher. This should be a reverse domain-name
+# style string, e.g. com.mycompany.MyDocSet.documentation.
+
+DOCSET_PUBLISHER_ID    = www.broadcom.com
+
+# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
+
+DOCSET_PUBLISHER_NAME  = Broadcom Limited
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP      = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output directory.
+
+CHM_FILE               =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION           =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI           = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file
+# content.
+
+CHM_INDEX_ENCODING     =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND             = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated
+# that can be used as input for Qt's qhelpgenerator to generate a
+# Qt Compressed Help (.qch) of the generated HTML documentation.
+
+GENERATE_QHP           = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can
+# be used to specify the file name of the resulting .qch file.
+# The path specified is relative to the HTML output folder.
+
+QCH_FILE               =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#namespace
+
+QHP_NAMESPACE          = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#virtual-folders
+
+QHP_VIRTUAL_FOLDER     = doc
+
+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to
+# add. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#custom-filters
+
+QHP_CUST_FILTER_NAME   =
+
+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see
+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">
+# Qt Help Project / Custom Filters</a>.
+
+QHP_CUST_FILTER_ATTRS  =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's
+# filter section matches.
+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">
+# Qt Help Project / Filter Attributes</a>.
+
+QHP_SECT_FILTER_ATTRS  =
+
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
+# be used to specify the location of Qt's qhelpgenerator.
+# If non-empty doxygen will try to run qhelpgenerator on the generated
+# .qhp file.
+
+QHG_LOCATION           =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files
+#  will be generated, which together with the HTML files, form an Eclipse help
+# plugin. To install this plugin and make it available under the help contents
+# menu in Eclipse, the contents of the directory containing the HTML and XML
+# files needs to be copied into the plugins directory of eclipse. The name of
+# the directory within the plugins directory should be the same as
+# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before
+# the help appears.
+
+GENERATE_ECLIPSEHELP   = NO
+
+# A unique identifier for the eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have
+# this name.
+
+ECLIPSE_DOC_ID         = org.doxygen.Project
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs)
+# at top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it. Since the tabs have the same information as the
+# navigation tree you can set this option to NO if you already set
+# GENERATE_TREEVIEW to YES.
+
+DISABLE_INDEX          = YES
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information.
+# If the tag value is set to YES, a side panel will be generated
+# containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
+# Windows users are probably better off using the HTML help feature.
+# Since the tree basically has the same information as the tab index you
+# could consider to set DISABLE_INDEX to NO when enabling this option.
+
+GENERATE_TREEVIEW      = YES
+
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values
+# (range [0,1..20]) that doxygen will group on one line in the generated HTML
+# documentation. Note that a value of 0 will completely suppress the enum
+# values from appearing in the overview section.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH         = 250
+
+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open
+# links to external symbols imported via tag files in a separate window.
+
+EXT_LINKS_IN_WINDOW    = NO
+
+# Use this tag to change the font size of Latex formulas included
+# as images in the HTML documentation. The default is 10. Note that
+# when you change the font size after a successful doxygen run you need
+# to manually remove any form_*.png images from the HTML output directory
+# to force them to be regenerated.
+
+FORMULA_FONTSIZE       = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are
+# not supported properly for IE 6.0, but are supported on all modern browsers.
+# Note that when changing this option you need to delete any form_*.png files
+# in the HTML output before the changes have effect.
+
+FORMULA_TRANSPARENT    = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax
+# (see http://www.mathjax.org) which uses client side Javascript for the
+# rendering instead of using prerendered bitmaps. Use this if you do not
+# have LaTeX installed or if you want to formulas look prettier in the HTML
+# output. When enabled you may also need to install MathJax separately and
+# configure the path to it using the MATHJAX_RELPATH option.
+
+USE_MATHJAX            = NO
+
+# When MathJax is enabled you need to specify the location relative to the
+# HTML output directory using the MATHJAX_RELPATH option. The destination
+# directory should contain the MathJax.js script. For instance, if the mathjax
+# directory is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to
+# the MathJax Content Delivery Network so you can quickly see the result without
+# installing MathJax.
+# However, it is strongly recommended to install a local
+# copy of MathJax from http://www.mathjax.org before deployment.
+
+MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension
+# names that should be enabled during MathJax rendering.
+
+MATHJAX_EXTENSIONS     =
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box
+# for the HTML output. The underlying search engine uses javascript
+# and DHTML and should work on any modern browser. Note that when using
+# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets
+# (GENERATE_DOCSET) there is already a search function so this one should
+# typically be disabled. For large projects the javascript based search engine
+# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
+
+SEARCHENGINE           = YES
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a PHP enabled web server instead of at the web client
+# using Javascript. Doxygen will generate the search PHP script and index
+# file to put on the web server. The advantage of the server
+# based approach is that it scales better to large projects and allows
+# full text search. The disadvantages are that it is more difficult to setup
+# and does not have live searching capabilities.
+
+SERVER_BASED_SEARCH    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX         = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+# Note that when enabling USE_PDFLATEX this option is only used for
+# generating bitmaps for formulas in the HTML output, but not in the
+# Makefile that is written to the output directory.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE             = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES         =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER           =
+
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for
+# the generated latex document. The footer should contain everything after
+# the last chapter. If it is left blank doxygen will generate a
+# standard footer. Notice: only use this tag if you know what you are doing!
+
+LATEX_FOOTER           =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS         = NO
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX           = NO
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE        = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES     = NO
+
+# If LATEX_SOURCE_CODE is set to YES then doxygen will include
+# source code with syntax highlighting in the LaTeX output.
+# Note that which sources are shown also depends on other settings
+# such as SOURCE_BROWSER.
+
+LATEX_SOURCE_CODE      = NO
+
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
+# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See
+# http://en.wikipedia.org/wiki/BibTeX for more info.
+
+LATEX_BIB_STYLE        = plain
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimized for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS         = NO
+
+# Load style sheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE    =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE    =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION          = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT             = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+#XML_SCHEMA             =
+
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+#XML_DTD                =
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
+# dump the program listings (including syntax highlighting
+# and cross-referencing information) to the XML output. Note that
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader.
+# This is useful
+# if you want to understand what is going on.
+# On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION        = YES
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF     = YES
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# pointed to by INCLUDE_PATH will be searched when a #include is found.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH           =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS  =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed. To prevent a macro definition from being
+# undefined via #undef or recursively expanded use the := operator
+# instead of the = operator.
+
+PREDEFINED             = __attribute__(x)= \
+                         __cplusplus
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition that
+# overrules the definition found in the source code.
+
+EXPAND_AS_DEFINED      =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all references to function-like macros
+# that are alone on a line, have an all uppercase name, and do not end with a
+# semicolon, because these will confuse the parser if not removed.
+
+SKIP_FUNCTION_MACROS   = NO
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles. For each
+# tag file the location of the external documentation should be added. The
+# format of a tag file without this location is as follows:
+#
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+#
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths
+# or URLs. Note that each tag file must have a unique name (where the name does
+# NOT include the path). If a tag file is not located in the directory in which
+# doxygen is run, you must also specify the path to the tagfile here.
+
+TAGFILES               =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE       =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS        = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
+# or super classes. Setting the tag to NO turns the diagrams off. Note that
+# this option also works with HAVE_DOT disabled, but it is recommended to
+# install and use dot, since it yields more powerful graphs.
+
+CLASS_DIAGRAMS         = YES
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH            =
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT               = %HAVE_DOT
+
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is
+# allowed to run in parallel. When set to 0 (the default) doxygen will
+# base this on the number of processors available in the system. You can set it
+# explicitly to a value larger than 0 to get control over the balance
+# between CPU load and processing speed.
+
+DOT_NUM_THREADS        = 0
+
+# By default doxygen will use the Helvetica font for all dot files that
+# doxygen generates. When you want a differently looking font you can specify
+# the font name using DOT_FONTNAME. You need to make sure dot is able to find
+# the font, which can be done by putting it in a standard location or by setting
+# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the
+# directory containing the font.
+
+DOT_FONTNAME           = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
+# The default size is 10pt.
+
+DOT_FONTSIZE           = 10
+
+# By default doxygen will tell dot to use the Helvetica font.
+# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to
+# set the path where dot can find it.
+
+DOT_FONTPATH           =
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH    = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS           = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK               = NO
+
+# If the UML_LOOK tag is enabled, the fields and methods are shown inside
+# the class node. If there are many fields or methods and many nodes the
+# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS
+# threshold limits the number of items for each type to make the size more
+# managable. Set this to 0 for no limit. Note that the threshold may be
+# exceeded by 50% before the limit is enforced.
+
+UML_LIMIT_NUM_FIELDS   = 10
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS     = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH          = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then
+# doxygen will generate a call dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable call graphs
+# for selected functions only using the \callgraph command.
+
+CALL_GRAPH             = NO
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
+# doxygen will generate a caller dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable caller
+# graphs for selected functions only using the \callergraph command.
+
+CALLER_GRAPH           = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will generate a graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES
+# then doxygen will show the dependencies a directory has on other directories
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH        = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are svg, png, jpg, or gif.
+# If left blank png will be used. If you choose svg you need to set
+# HTML_FILE_EXTENSION to xhtml in order to make the SVG files
+# visible in IE 9+ (other browsers do not have this requirement).
+
+DOT_IMAGE_FORMAT       = png
+
+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
+# enable generation of interactive SVG images that allow zooming and panning.
+# Note that this requires a modern browser other than Internet Explorer.
+# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you
+# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files
+# visible. Older versions of IE do not have SVG support.
+
+INTERACTIVE_SVG        = NO
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH               =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS           =
+
+# The MSCFILE_DIRS tag can be used to specify one or more directories that
+# contain msc files that are included in the documentation (see the
+# \mscfile command).
+
+MSCFILE_DIRS           =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
+# nodes that will be shown in the graph. If the number of nodes in a graph
+# becomes larger than this value, doxygen will truncate the graph, which is
+# visualized by representing a node as a red box. Note that doxygen if the
+# number of direct children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+
+DOT_GRAPH_MAX_NODES    = 200
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
+# graphs generated by dot. A depth value of 3 means that only nodes reachable
+# from the root by following a path via at most 3 edges will be shown. Nodes
+# that lay further from the root node will be omitted. Note that setting this
+# option to 1 or 2 may greatly reduce the computation time needed for large
+# code bases. Also note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+
+MAX_DOT_GRAPH_DEPTH    = 2
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not
+# seem to support this out of the box. Warning: Depending on the platform used,
+# enabling this option may lead to badly anti-aliased labels on the edges of
+# a graph (i.e. they become hard to read).
+
+DOT_TRANSPARENT        = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10)
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS      = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP            = YES
diff --git a/bal_release/doxygen/broadcom.png b/bal_release/doxygen/broadcom.png
new file mode 100644
index 0000000..1c7480c
--- /dev/null
+++ b/bal_release/doxygen/broadcom.png
Binary files differ
diff --git a/bal_release/doxygen/footer.html b/bal_release/doxygen/footer.html
new file mode 100644
index 0000000..c01529b
--- /dev/null
+++ b/bal_release/doxygen/footer.html
@@ -0,0 +1,21 @@
+<!-- HTML footer for doxygen 1.8.3.1-->
+<!-- start footer part -->
+<!--BEGIN GENERATE_TREEVIEW-->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    $navpath
+    <li class="footer">
+    <a href="http://www.broadcom.com">
+    <img class="footer" alt="BAL: Broadcom Adaptation Layer"/></a> $projectnumber </li>
+  </ul>
+</div>
+<!--END GENERATE_TREEVIEW-->
+<!--BEGIN !GENERATE_TREEVIEW-->
+<hr class="footer"/><address class="footer"><small>
+$generatedby &#160;<a href="http://www.broadcom.com">
+<img class="footer" alt="BAL Object Model"/>
+</a> $projectnumber
+</small></address>
+<!--END !GENERATE_TREEVIEW-->
+</body>
+</html>
diff --git a/bal_release/doxygen/genProjectNumber.sh b/bal_release/doxygen/genProjectNumber.sh
new file mode 100755
index 0000000..93b24ce
--- /dev/null
+++ b/bal_release/doxygen/genProjectNumber.sh
@@ -0,0 +1,67 @@
+#!/bin/bash
+###############################################################################
+#
+#  <:copyright-BRCM:2016:proprietary:standard
+#   
+#     Broadcom Ltd. Proprietary and Confidential.(c) 2016 Broadcom Ltd.
+#     All Rights Reserved
+#   
+#  This program is the proprietary software of Broadcom Ltd. and/or its
+#  licensors, and may only be used, duplicated, modified or distributed pursuant
+#  to the terms and conditions of a separate, written license agreement executed
+#  between you and Broadcom Ltd. (an "Authorized License").  Except as set forth in
+#  an Authorized License, Broadcom Ltd. grants no license (express or implied), right
+#  to use, or waiver of any kind with respect to the Software, and Broadcom Ltd.
+#  expressly reserves all rights in and to the Software and all intellectual
+#  property rights therein.  IF YOU HAVE NO AUTHORIZED LICENSE, THEN YOU HAVE
+#  NO RIGHT TO USE THIS SOFTWARE IN ANY WAY, AND SHOULD IMMEDIATELY NOTIFY
+#  BROADCOM LTD AND DISCONTINUE ALL USE OF THE SOFTWARE.
+#   
+#  Except as expressly set forth in the Authorized License,
+#   
+#  1. This program, including its structure, sequence and organization,
+#      constitutes the valuable trade secrets of Broadcom Ltd., and you shall use
+#      all reasonable efforts to protect the confidentiality thereof, and to
+#      use this information only in connection with your use of Broadcom Ltd.
+#      integrated circuit products.
+#   
+#  2. TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
+#      AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES, REPRESENTATIONS OR
+#      WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH
+#      RESPECT TO THE SOFTWARE.  BROADCOM SPECIFICALLY DISCLAIMS ANY AND
+#      ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY, NONINFRINGEMENT,
+#      FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES, ACCURACY OR
+#      COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR CORRESPONDENCE
+#      TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING OUT OF USE OR
+#      PERFORMANCE OF THE SOFTWARE.
+#   
+#  3. TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM OR
+#      ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL, INCIDENTAL, SPECIAL,
+#      INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER ARISING OUT OF OR IN ANY
+#      WAY RELATING TO YOUR USE OF OR INABILITY TO USE THE SOFTWARE EVEN
+#      IF BROADCOM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES;
+#      OR (ii) ANY AMOUNT IN EXCESS OF THE AMOUNT ACTUALLY PAID FOR THE
+#      SOFTWARE ITSELF OR U.S. $1, WHICHEVER IS GREATER. THESE LIMITATIONS
+#      SHALL APPLY NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY
+#      LIMITED REMEDY.
+#  :>
+#
+###############################################################################
+
+#Get the absolute path of version file.
+#
+#!!! This script MUST be put in bal/cur/doxygen directory !!!
+#
+PROJROOT=$PWD/..
+BRANCH_INFO=${PROJROOT}/branch.info
+if [ ! -f ${BRANCH_INFO} ]; then
+    echo "Unknown"
+    exit
+fi
+
+RELEASE_TYPE=`cat ${BRANCH_INFO} | grep RELEASE_TYPE | sed 's%.*=%%'`
+MAJOR=`cat ${BRANCH_INFO} | grep MAJOR | sed 's%.*=%%'`
+MINOR=`cat ${BRANCH_INFO} | grep MINOR | sed 's%.*=%%'`
+PATCH=`cat ${BRANCH_INFO} | grep PATCH | sed 's%.*=%%'`
+
+echo ${RELEASE_TYPE}${MAJOR}.${MINOR}.${PATCH}
diff --git a/bal_release/doxygen/header.html b/bal_release/doxygen/header.html
new file mode 100644
index 0000000..2d397b5
--- /dev/null
+++ b/bal_release/doxygen/header.html
@@ -0,0 +1,55 @@
+<!-- HTML header for doxygen 1.8.3.1-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Broadcom Limited"/>
+<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->
+<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
+<link href="$relpath^tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="$relpath^jquery.js"></script>
+<script type="text/javascript" src="$relpath^dynsections.js"></script>
+$treeview
+$search
+$mathjax
+<link href="$relpath^$stylesheet" rel="stylesheet" type="text/css" />
+$extrastylesheet
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+
+<!--BEGIN TITLEAREA-->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <!--BEGIN PROJECT_LOGO-->
+  <td id="projectlogo"><img alt="Logo" src="$relpath^$projectlogo"/></td>
+  <!--END PROJECT_LOGO-->
+  <!--BEGIN PROJECT_NAME-->
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">$projectname
+   <!--BEGIN PROJECT_NUMBER-->&#160;<span id="projectnumber">$projectnumber</span><!--END PROJECT_NUMBER-->
+   </div>
+   <!--BEGIN PROJECT_BRIEF--><div id="projectbrief">$projectbrief</div><!--END PROJECT_BRIEF-->
+  </td>
+  <!--END PROJECT_NAME-->
+  <!--BEGIN !PROJECT_NAME-->
+   <!--BEGIN PROJECT_BRIEF-->
+    <td style="padding-left: 0.5em;">
+    <div id="projectbrief">$projectbrief</div>
+    </td>
+   <!--END PROJECT_BRIEF-->
+  <!--END !PROJECT_NAME-->
+  <!--BEGIN DISABLE_INDEX-->
+   <!--BEGIN SEARCHENGINE-->
+   <td>$searchbox</td>
+   <!--END SEARCHENGINE-->
+  <!--END DISABLE_INDEX-->
+ </tr>
+ </tbody>
+</table>
+</div>
+<!--END TITLEAREA-->
+<!-- end header part -->
diff --git a/bal_release/doxygen/omcisvc.doxy b/bal_release/doxygen/omcisvc.doxy
new file mode 100644
index 0000000..7e0eeb1
--- /dev/null
+++ b/bal_release/doxygen/omcisvc.doxy
@@ -0,0 +1,1839 @@
+# Doxyfile 1.8.2
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project.
+#
+# All text after a hash (#) is considered a comment and will be ignored.
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ").
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the
+# iconv built into libc) for the transcoding. See
+# http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+DOXYFILE_ENCODING      = UTF-8
+
+# The PROJECT_NAME tag is a single word (or sequence of words) that should
+# identify the project. Note that if you do not use Doxywizard you need
+# to put quotes around the project name if it contains spaces.
+
+PROJECT_NAME           = "Broadcom OMCI Service Layer"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER         = %PROJECT_NUMBER
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer
+# a quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF          =
+
+# With the PROJECT_LOGO tag one can specify an logo or icon that is
+# included in the documentation. The maximum height of the logo should not
+# exceed 55 pixels and the maximum width should not exceed 200 pixels.
+# Doxygen will copy the logo to the output directory.
+
+PROJECT_LOGO           = "%SRC_DIR/../doxygen/broadcom.png"
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = %OUT_DOCS_DIR
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 4096 sub-directories (in 2 levels) under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of
+# source files, where putting all generated files in the same directory would
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS         = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
+# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak,
+# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
+
+OUTPUT_LANGUAGE        = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is
+# used as the annotated text. Otherwise, the brief description is used as-is.
+# If left blank, the following values are used ("$name" is automatically
+# replaced with the name of the entity): "The $name class" "The $name widget"
+# "The $name file" "is" "provides" "specifies" "contains"
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF       =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES        = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
+# path to strip. Note that you specify absolute paths here, but also
+# relative paths, which will be relative from the directory where doxygen is
+# started.
+
+STRIP_FROM_PATH        =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH    =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful if your file system
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like regular Qt-style comments
+# (thus requiring an explicit @brief command for a brief description.)
+
+JAVADOC_AUTOBRIEF      = YES
+
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
+# interpret the first line (until the first dot) of a Qt-style
+# comment as the brief description. If set to NO, the comments
+# will behave just like regular Qt-style comments (thus requiring
+# an explicit \brief command for a brief description.)
+
+QT_AUTOBRIEF           = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# re-implements.
+
+INHERIT_DOCS           = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
+# a new page for each member. If set to NO, the documentation of a member will
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES  = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE               = 4
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES                = "TABLE_HDR2{2}=<tr><th>\1</th><th>\2</th></tr>" \
+                         "TABLE_ROW2{2}=<tr><td>\1</td><td>\2</td></tr>" \
+                         "TABLE_HDR3{3}=<tr><th>\1</th><th>\2</th><th>\3</th></tr>" \
+                         "TABLE_ROW3{3}=<tr><td>\1</td><td>\2</td><td>\3</td></tr>" \
+                         "TABLE_HDR4{4}=<tr><th>\1</th><th>\2</th><th>\3</th><th>\4</th></tr>" \
+                         "TABLE_ROW4{4}=<tr><td>\1</td><td>\2</td><td>\3</td><td>\4</td></tr>" \
+                         "TABLE_HDR5{5}=<tr><th>\1</th><th>\2</th><th>\3</th><th>\4</th><th>\5</th></tr>" \
+                         "TABLE_ROW5{5}=<tr><td>\1</td><td>\2</td><td>\3</td><td>\4</td><td>\5</td></tr>" \
+                         "TABLE_HDR6{6}=<tr><th>\1</th><th>\2</th><th>\3</th><th>\4</th><th>\5</th><th>\6</th></tr>" \
+                         "TABLE_ROW6{6}=<tr><td>\1</td><td>\2</td><td>\3</td><td>\4</td><td>\5</td><td>\6</td></tr>" \
+                         "TABLE_HDR7{7}=<tr><th>\1</th><th>\2</th><th>\3</th><th>\4</th><th>\5</th><th>\6</th><th>\7</th></tr>" \
+                         "TABLE_ROW7{7}=<tr><td>\1</td><td>\2</td><td>\3</td><td>\4</td><td>\5</td><td>\6</td><td>\7</td></tr>"
+
+# This tag can be used to specify a number of word-keyword mappings (TCL only).
+# A mapping has the form "name=value". For example adding
+# "class=itcl::class" will allow you to use the command class in the
+# itcl::class meaning.
+
+TCL_SUBST              =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
+# sources only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C  = YES
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
+# sources only. Doxygen will then generate output that is more tailored for
+# Java. For instance, namespaces will be presented as packages, qualified
+# scopes will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources only. Doxygen will then generate output that is more tailored for
+# Fortran.
+
+OPTIMIZE_FOR_FORTRAN   = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for
+# VHDL.
+
+OPTIMIZE_OUTPUT_VHDL   = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given
+# extension. Doxygen has a built-in mapping, but you can override or extend it
+# using this tag. The format is ext=language, where ext is a file extension,
+# and language is one of the parsers supported by doxygen: IDL, Java,
+# Javascript, CSharp, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL, C,
+# C++. For instance to make doxygen treat .inc files as Fortran files (default
+# is PHP), and .f files as C (default is Fortran), use: inc=Fortran f=C. Note
+# that for custom extensions you also need to set FILE_PATTERNS otherwise the
+# files are not read by doxygen.
+
+EXTENSION_MAPPING      =
+
+# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all
+# comments according to the Markdown format, which allows for more readable
+# documentation. See http://daringfireball.net/projects/markdown/ for details.
+# The output of markdown processing is further processed by doxygen, so you
+# can mix doxygen, HTML, and XML commands with Markdown formatting.
+# Disable only in case of backward compatibilities issues.
+
+MARKDOWN_SUPPORT       = YES
+
+# When enabled doxygen tries to link words that correspond to documented classes,
+# or namespaces to their corresponding documentation. Such a link can be
+# prevented in individual cases by by putting a % sign in front of the word or
+# globally by setting AUTOLINK_SUPPORT to NO.
+
+AUTOLINK_SUPPORT       = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should
+# set this tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
+# func(std::string) {}). This also makes the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT    = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+
+CPP_CLI_SUPPORT        = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
+# Doxygen will parse them like normal C++ but will assume all classes use public
+# instead of private inheritance when no explicit protection keyword is present.
+
+SIP_SUPPORT            = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate getter and setter methods for a property. Setting this option to YES (the default) will make doxygen replace the get and set methods by a property in the documentation. This will only work if the methods are indeed getting or setting a simple type. If this is not the case, or you want to show the methods anyway, you should set this option to NO.
+
+IDL_PROPERTY_SUPPORT   = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING            = YES
+
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and
+# unions are shown inside the group in which they are included (e.g. using
+# @ingroup) instead of on a separate page (for HTML and Man pages) or
+# section (for LaTeX and RTF).
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and
+# unions with only public data fields will be shown inline in the documentation
+# of the scope in which they are defined (i.e. file, namespace, or group
+# documentation), provided this scope is documented. If set to NO (the default),
+# structs, classes, and unions are shown on a separate page (for HTML and Man
+# pages) or section (for LaTeX and RTF).
+
+INLINE_SIMPLE_STRUCTS  = NO
+
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
+# is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically
+# be useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+
+TYPEDEF_HIDES_STRUCT   = NO
+
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
+# determine which symbols to keep in memory and which to flush to disk.
+# When the cache is full, less often used symbols will be written to disk.
+# For small to medium size projects (<1000 input files) the default value is
+# probably good enough. For larger projects a too small cache size can cause
+# doxygen to be busy swapping symbols to and from disk most of the time
+# causing a significant performance penalty.
+# If the system has enough physical memory increasing the cache will improve the
+# performance by keeping more symbols in memory. Note that the value works on
+# a logarithmic scale so increasing the size by one will roughly double the
+# memory usage. The cache size is given by this formula:
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols.
+
+#SYMBOL_CACHE_SIZE      = 0
+
+# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be
+# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given
+# their name and scope. Since this can be an expensive process and often the
+# same symbol appear multiple times in the code, doxygen keeps a cache of
+# pre-resolved symbols. If the cache is too small doxygen will become slower.
+# If the cache is too large, memory is wasted. The cache size is given by this
+# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols.
+
+LOOKUP_CACHE_SIZE      = 1
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL            = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE        = YES
+
+# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
+# scope will be included in the documentation.
+
+EXTRACT_PACKAGE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC         = YES
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base
+# name of the file that contains the anonymous namespace. By default
+# anonymous namespaces are hidden.
+
+EXTRACT_ANON_NSPACES   = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES       = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen
+# will list include files with double quotes in the documentation
+# rather than with sharp brackets.
+
+FORCE_LOCAL_INCLUDES   = NO
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS       = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
+# declaration order.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen
+# will sort the (brief and detailed) documentation of class members so that
+# constructors and destructors are listed first. If set to NO (the default)
+# the constructors will appear in the respective orders defined by
+# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.
+# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO
+# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
+# hierarchy of group names into alphabetical order. If set to NO (the default)
+# the group names will appear in their defined order.
+
+SORT_GROUP_NAMES       = YES
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
+# sorted by fully-qualified names, including namespaces. If set to
+# NO (the default), the class list will be sorted only by class name,
+# not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME     = NO
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to
+# do proper type resolution of all parameters of a function it will reject a
+# match between the prototype and the implementation of a member function even
+# if there is only one candidate or it is obvious which candidate to choose
+# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen
+# will still accept a match between prototype and implementation in such cases.
+
+STRICT_PROTO_MATCHING  = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS       =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or macro consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and macros in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES        = YES
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
+# This will remove the Files entry from the Quick Index and from the
+# Folder Tree View (if specified). The default is YES.
+
+SHOW_FILES             = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the
+# Namespaces page.
+# This will remove the Namespaces entry from the Quick Index
+# and from the Folder Tree View (if specified). The default is YES.
+
+SHOW_NAMESPACES        = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command <command> <input-file>, where <command> is the value of
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
+# provided by doxygen. Whatever the program writes to standard output
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER    =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. To create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option.
+# You can optionally specify a file name after the option, if omitted
+# DoxygenLayout.xml will be used as the name of the layout file.
+
+LAYOUT_FILE            = %SRC_DIR/../doxygen/DoxygenLayout.xml
+
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files
+# containing the references data. This must be a list of .bib files. The
+# .bib extension is automatically appended if omitted. Using this command
+# requires the bibtex tool to be installed. See also
+# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style
+# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this
+# feature you need bibtex and perl available in the search path.
+
+CITE_BIB_FILES         =
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS               = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED   = NO
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR      = YES
+
+# The WARN_NO_PARAMDOC option can be enabled to get warnings for
+# functions that are documented, but have no documentation for their parameters
+# or return value. If set to NO (the default) doxygen will only warn about
+# wrong or incomplete parameter documentation, but not about the absence of
+# documentation.
+
+WARN_NO_PARAMDOC       = YES
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text. Optionally the format may contain
+# $version, which will be replaced by the version of the file (if it could
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE           =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT                  = %SRC_DIR/lib/libomcisvc/omci_svc_api.dox \
+                         %OMCI_MODEL_DIR/omci_model.dox \
+                         %SRC_DIR/lib/libomcisvc/omci_svc.h \
+                         %SRC_DIR/lib/libomcisvc/omci_svc_sub_term.h \
+                         %SRC_DIR/lib/libomcisvc/omci_svc_flow.h \
+                         %OMCI_MODEL_DIR/omci_model_ids.h \
+                         %OMCI_MODEL_DIR/omci_model_types.h
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
+# also the default input encoding. Doxygen uses libiconv (or the iconv built
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
+# the list of possible encodings.
+
+INPUT_ENCODING         = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh
+# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py
+# *.f90 *.f *.for *.vhd *.vhdl
+
+FILE_PATTERNS          = *.c *.h *.cpp
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE              = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should be
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+# Note that relative paths are relative to the directory from which doxygen is
+# run.
+
+EXCLUDE                = %SRC_DIR/common/os_abstraction \
+                         %SRC_DIR/common/db_engine \
+                         %SRC_DIR/common/cli \
+                         %SRC_DIR/common/dev_log \
+                         %SRC_DIR/common/utils \
+                         %SRC_DIR/common/config \
+                         %SRC_DIR/core/util/oam/epon_oam_cli \
+                         %SRC_DIR/core/util/oam/epon_oam \
+                         %SRC_DIR/core/util/oam/common_epon_oam \
+                         %SRC_DIR/core/util/oam/eon \
+                         %SRC_DIR/common/model \
+                         %SRC_DIR/ofpal/loci
+
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
+# from the input.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories. Note that the wildcards are matched
+# against the file with absolute path, so to exclude all test directories
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS       = */test/* \
+                         *Examples*
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS        =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH           =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS       =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH             =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output.
+# If FILTER_PATTERNS is specified, this tag will be
+# ignored.
+
+INPUT_FILTER           =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis.
+# Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match.
+# The filters are a list of the form:
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
+# info on how filters are used. If FILTER_PATTERNS is empty or if
+# non of the patterns match the file name, INPUT_FILTER is applied.
+
+FILTER_PATTERNS        =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES    = NO
+
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any)
+# and it is also possible to disable source filtering for a specific pattern
+# using *.ext= (so without naming a filter). This option only has effect when
+# FILTER_SOURCE_FILES is enabled.
+
+FILTER_SOURCE_PATTERNS =
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER         = YES
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C, C++ and Fortran comments will always remain visible.
+
+STRIP_CODE_COMMENTS    = NO
+
+# If the REFERENCED_BY_RELATION tag is set to YES
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = NO
+
+# If the REFERENCES_RELATION tag is set to YES
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION    = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
+# link to the source code.
+# Otherwise they will link to the documentation.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code
+# will point to the HTML generated by the htags(1) tool instead of doxygen
+# built-in source browser. The htags tool is part of GNU's global source
+# tagging system (see http://www.gnu.org/software/global/global.html). You
+# will need version 4.8.6 or higher.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS       = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX     = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX          =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header. Note that when using a custom header you are responsible
+#  for the proper inclusion of any scripts and style sheets that doxygen
+# needs, which is dependent on the configuration options used.
+# It is advised to generate a default header using "doxygen -w html
+# header.html footer.html stylesheet.css YourConfigFile" and then modify
+# that header. Note that the header is subject to change so you typically
+# have to redo this when upgrading to a newer version of doxygen or when
+# changing the value of configuration settings such as GENERATE_TREEVIEW!
+
+HTML_HEADER            = %SRC_DIR/../doxygen/header.html
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER            = %SRC_DIR/../doxygen/footer.html
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If left blank doxygen will
+# generate a default style sheet. Note that it is recommended to use
+# HTML_EXTRA_STYLESHEET instead of this one, as it is more robust and this
+# tag will in the future become obsolete.
+
+HTML_STYLESHEET        =
+
+# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional
+# user-defined cascading style sheet that is included after the standard
+# style sheets created by doxygen. Using this option one can overrule
+# certain style aspects. This is preferred over using HTML_STYLESHEET
+# since it does not replace the standard style sheet and is therefor more
+# robust against future updates. Doxygen will copy the style sheet file to
+# the output directory.
+
+HTML_EXTRA_STYLESHEET  =
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the HTML output directory. Note
+# that these files will be copied to the base HTML output directory. Use the
+# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that
+# the files will be copied as-is; there are no commands or markers available.
+
+HTML_EXTRA_FILES       =
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
+# Doxygen will adjust the colors in the style sheet and background images
+# according to this color. Hue is specified as an angle on a colorwheel,
+# see http://en.wikipedia.org/wiki/Hue for more information.
+# For instance the value 0 represents red, 60 is yellow, 120 is green,
+# 180 is cyan, 240 is blue, 300 purple, and 360 is red again.
+# The allowed range is 0 to 359.
+
+HTML_COLORSTYLE_HUE    = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of
+# the colors in the HTML output. For a value of 0 the output will use
+# grayscales only. A value of 255 will produce the most vivid colors.
+
+HTML_COLORSTYLE_SAT    = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to
+# the luminance component of the colors in the HTML output. Values below
+# 100 gradually make the output lighter, whereas values above 100 make
+# the output darker. The value divided by 100 is the actual gamma applied,
+# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,
+# and 100 does not change the gamma.
+
+HTML_COLORSTYLE_GAMMA  = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting
+# this to NO can help when comparing the output of multiple runs.
+
+HTML_TIMESTAMP         = YES
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded.
+
+HTML_DYNAMIC_SECTIONS  = NO
+
+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of
+# entries shown in the various tree structured indices initially; the user
+# can expand and collapse entries dynamically later on. Doxygen will expand
+# the tree to such a level that at most the specified number of entries are
+# visible (unless a fully collapsed tree already exceeds this amount).
+# So setting the number of entries 1 will produce a full collapsed tree by
+# default. 0 is a special value representing an infinite number of entries
+# and will result in a full expanded tree by default.
+
+HTML_INDEX_NUM_ENTRIES = 100
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files
+# will be generated that can be used as input for Apple's Xcode 3
+# integrated development environment, introduced with OSX 10.5 (Leopard).
+# To create a documentation set, doxygen will generate a Makefile in the
+# HTML output directory. Running make will produce the docset in that
+# directory and running "make install" will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
+# it at startup.
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# for more information.
+
+GENERATE_DOCSET        = NO
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
+# feed. A documentation feed provides an umbrella under which multiple
+# documentation sets from a single provider (such as a company or product suite)
+# can be grouped.
+
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
+# should uniquely identify the documentation set bundle. This should be a
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
+# will append .docset to the name.
+
+DOCSET_BUNDLE_ID       = www.broadcom.com
+
+# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely
+# identify the documentation publisher. This should be a reverse domain-name
+# style string, e.g. com.mycompany.MyDocSet.documentation.
+
+DOCSET_PUBLISHER_ID    = www.broadcom.com
+
+# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
+
+DOCSET_PUBLISHER_NAME  = Broadcom Limited
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP      = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output directory.
+
+CHM_FILE               =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION           =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI           = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file
+# content.
+
+CHM_INDEX_ENCODING     =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND             = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated
+# that can be used as input for Qt's qhelpgenerator to generate a
+# Qt Compressed Help (.qch) of the generated HTML documentation.
+
+GENERATE_QHP           = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can
+# be used to specify the file name of the resulting .qch file.
+# The path specified is relative to the HTML output folder.
+
+QCH_FILE               =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#namespace
+
+QHP_NAMESPACE          = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#virtual-folders
+
+QHP_VIRTUAL_FOLDER     = doc
+
+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to
+# add. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#custom-filters
+
+QHP_CUST_FILTER_NAME   =
+
+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see
+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">
+# Qt Help Project / Custom Filters</a>.
+
+QHP_CUST_FILTER_ATTRS  =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's
+# filter section matches.
+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">
+# Qt Help Project / Filter Attributes</a>.
+
+QHP_SECT_FILTER_ATTRS  =
+
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
+# be used to specify the location of Qt's qhelpgenerator.
+# If non-empty doxygen will try to run qhelpgenerator on the generated
+# .qhp file.
+
+QHG_LOCATION           =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files
+#  will be generated, which together with the HTML files, form an Eclipse help
+# plugin. To install this plugin and make it available under the help contents
+# menu in Eclipse, the contents of the directory containing the HTML and XML
+# files needs to be copied into the plugins directory of eclipse. The name of
+# the directory within the plugins directory should be the same as
+# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before
+# the help appears.
+
+GENERATE_ECLIPSEHELP   = NO
+
+# A unique identifier for the eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have
+# this name.
+
+ECLIPSE_DOC_ID         = org.doxygen.Project
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs)
+# at top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it. Since the tabs have the same information as the
+# navigation tree you can set this option to NO if you already set
+# GENERATE_TREEVIEW to YES.
+
+DISABLE_INDEX          = YES
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information.
+# If the tag value is set to YES, a side panel will be generated
+# containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
+# Windows users are probably better off using the HTML help feature.
+# Since the tree basically has the same information as the tab index you
+# could consider to set DISABLE_INDEX to NO when enabling this option.
+
+GENERATE_TREEVIEW      = YES
+
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values
+# (range [0,1..20]) that doxygen will group on one line in the generated HTML
+# documentation. Note that a value of 0 will completely suppress the enum
+# values from appearing in the overview section.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH         = 250
+
+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open
+# links to external symbols imported via tag files in a separate window.
+
+EXT_LINKS_IN_WINDOW    = NO
+
+# Use this tag to change the font size of Latex formulas included
+# as images in the HTML documentation. The default is 10. Note that
+# when you change the font size after a successful doxygen run you need
+# to manually remove any form_*.png images from the HTML output directory
+# to force them to be regenerated.
+
+FORMULA_FONTSIZE       = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are
+# not supported properly for IE 6.0, but are supported on all modern browsers.
+# Note that when changing this option you need to delete any form_*.png files
+# in the HTML output before the changes have effect.
+
+FORMULA_TRANSPARENT    = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax
+# (see http://www.mathjax.org) which uses client side Javascript for the
+# rendering instead of using prerendered bitmaps. Use this if you do not
+# have LaTeX installed or if you want to formulas look prettier in the HTML
+# output. When enabled you may also need to install MathJax separately and
+# configure the path to it using the MATHJAX_RELPATH option.
+
+USE_MATHJAX            = NO
+
+# When MathJax is enabled you need to specify the location relative to the
+# HTML output directory using the MATHJAX_RELPATH option. The destination
+# directory should contain the MathJax.js script. For instance, if the mathjax
+# directory is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to
+# the MathJax Content Delivery Network so you can quickly see the result without
+# installing MathJax.
+# However, it is strongly recommended to install a local
+# copy of MathJax from http://www.mathjax.org before deployment.
+
+MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension
+# names that should be enabled during MathJax rendering.
+
+MATHJAX_EXTENSIONS     =
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box
+# for the HTML output. The underlying search engine uses javascript
+# and DHTML and should work on any modern browser. Note that when using
+# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets
+# (GENERATE_DOCSET) there is already a search function so this one should
+# typically be disabled. For large projects the javascript based search engine
+# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
+
+SEARCHENGINE           = YES
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a PHP enabled web server instead of at the web client
+# using Javascript. Doxygen will generate the search PHP script and index
+# file to put on the web server. The advantage of the server
+# based approach is that it scales better to large projects and allows
+# full text search. The disadvantages are that it is more difficult to setup
+# and does not have live searching capabilities.
+
+SERVER_BASED_SEARCH    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX         = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+# Note that when enabling USE_PDFLATEX this option is only used for
+# generating bitmaps for formulas in the HTML output, but not in the
+# Makefile that is written to the output directory.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE             = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES         =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER           =
+
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for
+# the generated latex document. The footer should contain everything after
+# the last chapter. If it is left blank doxygen will generate a
+# standard footer. Notice: only use this tag if you know what you are doing!
+
+LATEX_FOOTER           =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS         = NO
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX           = NO
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE        = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES     = NO
+
+# If LATEX_SOURCE_CODE is set to YES then doxygen will include
+# source code with syntax highlighting in the LaTeX output.
+# Note that which sources are shown also depends on other settings
+# such as SOURCE_BROWSER.
+
+LATEX_SOURCE_CODE      = NO
+
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
+# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See
+# http://en.wikipedia.org/wiki/BibTeX for more info.
+
+LATEX_BIB_STYLE        = plain
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimized for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS         = NO
+
+# Load style sheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE    =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE    =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION          = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT             = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+#XML_SCHEMA             =
+
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+#XML_DTD                =
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
+# dump the program listings (including syntax highlighting
+# and cross-referencing information) to the XML output. Note that
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader.
+# This is useful
+# if you want to understand what is going on.
+# On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION        = YES
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF     = YES
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# pointed to by INCLUDE_PATH will be searched when a #include is found.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH           =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS  =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed. To prevent a macro definition from being
+# undefined via #undef or recursively expanded use the := operator
+# instead of the = operator.
+
+PREDEFINED             = __attribute__(x)= \
+                         __cplusplus
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition that
+# overrules the definition found in the source code.
+
+EXPAND_AS_DEFINED      =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all references to function-like macros
+# that are alone on a line, have an all uppercase name, and do not end with a
+# semicolon, because these will confuse the parser if not removed.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles. For each
+# tag file the location of the external documentation should be added. The
+# format of a tag file without this location is as follows:
+#
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+#
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths
+# or URLs. Note that each tag file must have a unique name (where the name does
+# NOT include the path). If a tag file is not located in the directory in which
+# doxygen is run, you must also specify the path to the tagfile here.
+
+TAGFILES               =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE       =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS        = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
+# or super classes. Setting the tag to NO turns the diagrams off. Note that
+# this option also works with HAVE_DOT disabled, but it is recommended to
+# install and use dot, since it yields more powerful graphs.
+
+CLASS_DIAGRAMS         = YES
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH            =
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT               = %HAVE_DOT
+
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is
+# allowed to run in parallel. When set to 0 (the default) doxygen will
+# base this on the number of processors available in the system. You can set it
+# explicitly to a value larger than 0 to get control over the balance
+# between CPU load and processing speed.
+
+DOT_NUM_THREADS        = 0
+
+# By default doxygen will use the Helvetica font for all dot files that
+# doxygen generates. When you want a differently looking font you can specify
+# the font name using DOT_FONTNAME. You need to make sure dot is able to find
+# the font, which can be done by putting it in a standard location or by setting
+# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the
+# directory containing the font.
+
+DOT_FONTNAME           = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
+# The default size is 10pt.
+
+DOT_FONTSIZE           = 10
+
+# By default doxygen will tell dot to use the Helvetica font.
+# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to
+# set the path where dot can find it.
+
+DOT_FONTPATH           =
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH    = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS           = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK               = NO
+
+# If the UML_LOOK tag is enabled, the fields and methods are shown inside
+# the class node. If there are many fields or methods and many nodes the
+# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS
+# threshold limits the number of items for each type to make the size more
+# managable. Set this to 0 for no limit. Note that the threshold may be
+# exceeded by 50% before the limit is enforced.
+
+UML_LIMIT_NUM_FIELDS   = 10
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS     = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH          = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then
+# doxygen will generate a call dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable call graphs
+# for selected functions only using the \callgraph command.
+
+CALL_GRAPH             = NO
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
+# doxygen will generate a caller dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable caller
+# graphs for selected functions only using the \callergraph command.
+
+CALLER_GRAPH           = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will generate a graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES
+# then doxygen will show the dependencies a directory has on other directories
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH        = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are svg, png, jpg, or gif.
+# If left blank png will be used. If you choose svg you need to set
+# HTML_FILE_EXTENSION to xhtml in order to make the SVG files
+# visible in IE 9+ (other browsers do not have this requirement).
+
+DOT_IMAGE_FORMAT       = png
+
+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
+# enable generation of interactive SVG images that allow zooming and panning.
+# Note that this requires a modern browser other than Internet Explorer.
+# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you
+# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files
+# visible. Older versions of IE do not have SVG support.
+
+INTERACTIVE_SVG        = NO
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH               =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS           =
+
+# The MSCFILE_DIRS tag can be used to specify one or more directories that
+# contain msc files that are included in the documentation (see the
+# \mscfile command).
+
+MSCFILE_DIRS           =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
+# nodes that will be shown in the graph. If the number of nodes in a graph
+# becomes larger than this value, doxygen will truncate the graph, which is
+# visualized by representing a node as a red box. Note that doxygen if the
+# number of direct children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+
+DOT_GRAPH_MAX_NODES    = 200
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
+# graphs generated by dot. A depth value of 3 means that only nodes reachable
+# from the root by following a path via at most 3 edges will be shown. Nodes
+# that lay further from the root node will be omitted. Note that setting this
+# option to 1 or 2 may greatly reduce the computation time needed for large
+# code bases. Also note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+
+MAX_DOT_GRAPH_DEPTH    = 2
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not
+# seem to support this out of the box. Warning: Depending on the platform used,
+# enabling this option may lead to badly anti-aliased labels on the edges of
+# a graph (i.e. they become hard to read).
+
+DOT_TRANSPARENT        = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10)
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS      = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP            = YES
diff --git a/bal_release/doxygen/omcisvc/omcisvc.dox b/bal_release/doxygen/omcisvc/omcisvc.dox
new file mode 100644
index 0000000..7e28611
--- /dev/null
+++ b/bal_release/doxygen/omcisvc/omcisvc.dox
@@ -0,0 +1,17 @@
+/*
+ * OLayer Software Developer's Guide - main page
+ */
+
+/** \mainpage OMCI Service Layer Software Deveoper's Guide
+
+\section intro Introduction
+OMCI Service Layer and OMCI atack is BAL / SDN-PAL add-on package. It is designed for managing xPON ONUs using service-oriented requests.
+OMCI Service Layer performs the following functions:
+- Converts service oriented requests into OMCI ME requests
+- Applies OMCI MEs in the correct order using built-in FSMs
+- Handles ONU activation and MIB upload. Identifies ONU type based on the OMCI MIB upload results
+*/
+
+/** \page omcisvc_api OMCI Service Layer API
+  See \ref omcisvc_api in API Reference chapter
+*/
diff --git a/bal_release/doxygen/sdn_pal.doxy b/bal_release/doxygen/sdn_pal.doxy
new file mode 100644
index 0000000..d31e25d
--- /dev/null
+++ b/bal_release/doxygen/sdn_pal.doxy
@@ -0,0 +1,1833 @@
+# Doxyfile 1.8.2
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project.
+#
+# All text after a hash (#) is considered a comment and will be ignored.
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ").
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the
+# iconv built into libc) for the transcoding. See
+# http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+DOXYFILE_ENCODING      = UTF-8
+
+# The PROJECT_NAME tag is a single word (or sequence of words) that should
+# identify the project. Note that if you do not use Doxywizard you need
+# to put quotes around the project name if it contains spaces.
+
+PROJECT_NAME           = "SDN PAL - SDN PON Adaptation Layer"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER         = %PROJECT_NUMBER
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer
+# a quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF          =
+
+# With the PROJECT_LOGO tag one can specify an logo or icon that is
+# included in the documentation. The maximum height of the logo should not
+# exceed 55 pixels and the maximum width should not exceed 200 pixels.
+# Doxygen will copy the logo to the output directory.
+
+PROJECT_LOGO           = "%SRC_DIR/../doxygen/broadcom.png"
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = %OUT_DOCS_DIR
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 4096 sub-directories (in 2 levels) under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of
+# source files, where putting all generated files in the same directory would
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS         = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
+# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak,
+# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
+
+OUTPUT_LANGUAGE        = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is
+# used as the annotated text. Otherwise, the brief description is used as-is.
+# If left blank, the following values are used ("$name" is automatically
+# replaced with the name of the entity): "The $name class" "The $name widget"
+# "The $name file" "is" "provides" "specifies" "contains"
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF       =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES        = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
+# path to strip. Note that you specify absolute paths here, but also
+# relative paths, which will be relative from the directory where doxygen is
+# started.
+
+STRIP_FROM_PATH        =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH    =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful if your file system
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like regular Qt-style comments
+# (thus requiring an explicit @brief command for a brief description.)
+
+JAVADOC_AUTOBRIEF      = YES
+
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
+# interpret the first line (until the first dot) of a Qt-style
+# comment as the brief description. If set to NO, the comments
+# will behave just like regular Qt-style comments (thus requiring
+# an explicit \brief command for a brief description.)
+
+QT_AUTOBRIEF           = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# re-implements.
+
+INHERIT_DOCS           = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
+# a new page for each member. If set to NO, the documentation of a member will
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES  = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE               = 4
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES                = "TABLE_HDR2{2}=<tr><th>\1</th><th>\2</th></tr>" \
+                         "TABLE_ROW2{2}=<tr><td>\1</td><td>\2</td></tr>" \
+                         "TABLE_HDR3{3}=<tr><th>\1</th><th>\2</th><th>\3</th></tr>" \
+                         "TABLE_ROW3{3}=<tr><td>\1</td><td>\2</td><td>\3</td></tr>" \
+                         "TABLE_HDR4{4}=<tr><th>\1</th><th>\2</th><th>\3</th><th>\4</th></tr>" \
+                         "TABLE_ROW4{4}=<tr><td>\1</td><td>\2</td><td>\3</td><td>\4</td></tr>" \
+                         "TABLE_HDR5{5}=<tr><th>\1</th><th>\2</th><th>\3</th><th>\4</th><th>\5</th></tr>" \
+                         "TABLE_ROW5{5}=<tr><td>\1</td><td>\2</td><td>\3</td><td>\4</td><td>\5</td></tr>" \
+                         "TABLE_HDR6{6}=<tr><th>\1</th><th>\2</th><th>\3</th><th>\4</th><th>\5</th><th>\6</th></tr>" \
+                         "TABLE_ROW6{6}=<tr><td>\1</td><td>\2</td><td>\3</td><td>\4</td><td>\5</td><td>\6</td></tr>" \
+                         "TABLE_HDR7{7}=<tr><th>\1</th><th>\2</th><th>\3</th><th>\4</th><th>\5</th><th>\6</th><th>\7</th></tr>" \
+                         "TABLE_ROW7{7}=<tr><td>\1</td><td>\2</td><td>\3</td><td>\4</td><td>\5</td><td>\6</td><td>\7</td></tr>"
+
+# This tag can be used to specify a number of word-keyword mappings (TCL only).
+# A mapping has the form "name=value". For example adding
+# "class=itcl::class" will allow you to use the command class in the
+# itcl::class meaning.
+
+TCL_SUBST              =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
+# sources only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C  = YES
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
+# sources only. Doxygen will then generate output that is more tailored for
+# Java. For instance, namespaces will be presented as packages, qualified
+# scopes will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources only. Doxygen will then generate output that is more tailored for
+# Fortran.
+
+OPTIMIZE_FOR_FORTRAN   = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for
+# VHDL.
+
+OPTIMIZE_OUTPUT_VHDL   = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given
+# extension. Doxygen has a built-in mapping, but you can override or extend it
+# using this tag. The format is ext=language, where ext is a file extension,
+# and language is one of the parsers supported by doxygen: IDL, Java,
+# Javascript, CSharp, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL, C,
+# C++. For instance to make doxygen treat .inc files as Fortran files (default
+# is PHP), and .f files as C (default is Fortran), use: inc=Fortran f=C. Note
+# that for custom extensions you also need to set FILE_PATTERNS otherwise the
+# files are not read by doxygen.
+
+EXTENSION_MAPPING      =
+
+# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all
+# comments according to the Markdown format, which allows for more readable
+# documentation. See http://daringfireball.net/projects/markdown/ for details.
+# The output of markdown processing is further processed by doxygen, so you
+# can mix doxygen, HTML, and XML commands with Markdown formatting.
+# Disable only in case of backward compatibilities issues.
+
+MARKDOWN_SUPPORT       = YES
+
+# When enabled doxygen tries to link words that correspond to documented classes,
+# or namespaces to their corresponding documentation. Such a link can be
+# prevented in individual cases by by putting a % sign in front of the word or
+# globally by setting AUTOLINK_SUPPORT to NO.
+
+AUTOLINK_SUPPORT       = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should
+# set this tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
+# func(std::string) {}). This also makes the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT    = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+
+CPP_CLI_SUPPORT        = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
+# Doxygen will parse them like normal C++ but will assume all classes use public
+# instead of private inheritance when no explicit protection keyword is present.
+
+SIP_SUPPORT            = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate getter and setter methods for a property. Setting this option to YES (the default) will make doxygen replace the get and set methods by a property in the documentation. This will only work if the methods are indeed getting or setting a simple type. If this is not the case, or you want to show the methods anyway, you should set this option to NO.
+
+IDL_PROPERTY_SUPPORT   = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING            = YES
+
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and
+# unions are shown inside the group in which they are included (e.g. using
+# @ingroup) instead of on a separate page (for HTML and Man pages) or
+# section (for LaTeX and RTF).
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and
+# unions with only public data fields will be shown inline in the documentation
+# of the scope in which they are defined (i.e. file, namespace, or group
+# documentation), provided this scope is documented. If set to NO (the default),
+# structs, classes, and unions are shown on a separate page (for HTML and Man
+# pages) or section (for LaTeX and RTF).
+
+INLINE_SIMPLE_STRUCTS  = NO
+
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
+# is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically
+# be useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+
+TYPEDEF_HIDES_STRUCT   = NO
+
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
+# determine which symbols to keep in memory and which to flush to disk.
+# When the cache is full, less often used symbols will be written to disk.
+# For small to medium size projects (<1000 input files) the default value is
+# probably good enough. For larger projects a too small cache size can cause
+# doxygen to be busy swapping symbols to and from disk most of the time
+# causing a significant performance penalty.
+# If the system has enough physical memory increasing the cache will improve the
+# performance by keeping more symbols in memory. Note that the value works on
+# a logarithmic scale so increasing the size by one will roughly double the
+# memory usage. The cache size is given by this formula:
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols.
+
+#SYMBOL_CACHE_SIZE      = 0
+
+# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be
+# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given
+# their name and scope. Since this can be an expensive process and often the
+# same symbol appear multiple times in the code, doxygen keeps a cache of
+# pre-resolved symbols. If the cache is too small doxygen will become slower.
+# If the cache is too large, memory is wasted. The cache size is given by this
+# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols.
+
+LOOKUP_CACHE_SIZE      = 1
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL            = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE        = NO
+
+# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
+# scope will be included in the documentation.
+
+EXTRACT_PACKAGE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC         = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES  = NO
+
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base
+# name of the file that contains the anonymous namespace. By default
+# anonymous namespaces are hidden.
+
+EXTRACT_ANON_NSPACES   = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES       = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen
+# will list include files with double quotes in the documentation
+# rather than with sharp brackets.
+
+FORCE_LOCAL_INCLUDES   = NO
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS       = NO
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
+# declaration order.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen
+# will sort the (brief and detailed) documentation of class members so that
+# constructors and destructors are listed first. If set to NO (the default)
+# the constructors will appear in the respective orders defined by
+# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.
+# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO
+# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
+# hierarchy of group names into alphabetical order. If set to NO (the default)
+# the group names will appear in their defined order.
+
+SORT_GROUP_NAMES       = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
+# sorted by fully-qualified names, including namespaces. If set to
+# NO (the default), the class list will be sorted only by class name,
+# not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME     = NO
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to
+# do proper type resolution of all parameters of a function it will reject a
+# match between the prototype and the implementation of a member function even
+# if there is only one candidate or it is obvious which candidate to choose
+# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen
+# will still accept a match between prototype and implementation in such cases.
+
+STRICT_PROTO_MATCHING  = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST      = NO
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS       =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or macro consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and macros in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES        = NO
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
+# This will remove the Files entry from the Quick Index and from the
+# Folder Tree View (if specified). The default is YES.
+
+SHOW_FILES             = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the
+# Namespaces page.
+# This will remove the Namespaces entry from the Quick Index
+# and from the Folder Tree View (if specified). The default is YES.
+
+SHOW_NAMESPACES        = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command <command> <input-file>, where <command> is the value of
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
+# provided by doxygen. Whatever the program writes to standard output
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER    =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. To create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option.
+# You can optionally specify a file name after the option, if omitted
+# DoxygenLayout.xml will be used as the name of the layout file.
+
+LAYOUT_FILE            = %SRC_DIR/../doxygen/DoxygenLayout.xml
+
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files
+# containing the references data. This must be a list of .bib files. The
+# .bib extension is automatically appended if omitted. Using this command
+# requires the bibtex tool to be installed. See also
+# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style
+# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this
+# feature you need bibtex and perl available in the search path.
+
+CITE_BIB_FILES         =
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS               = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED   = NO
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR      = YES
+
+# The WARN_NO_PARAMDOC option can be enabled to get warnings for
+# functions that are documented, but have no documentation for their parameters
+# or return value. If set to NO (the default) doxygen will only warn about
+# wrong or incomplete parameter documentation, but not about the absence of
+# documentation.
+
+WARN_NO_PARAMDOC       = YES
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text. Optionally the format may contain
+# $version, which will be replaced by the version of the file (if it could
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE           =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT                  = %SRC_DIR/../doxygen/sdn_pal/sdn_pal.dox \
+                         %SRC_DIR/ofpal/ofpal.h \
+                         %SRC_DIR/ofpal/ofpal_constants.h \
+                         %SRC_DIR/ofpal/ofpal_table.h \
+                         %SRC_DIR/ofpal/ofpal_flow.h \
+                         %SRC_DIR/ofpal/ofpal_group.h \
+                         %SRC_DIR/ofpal/ofpal_packet.h \
+                         %SRC_DIR/ofpal/ofpal_meter.h \
+                         %SRC_DIR/ofpal/ofpal_port.h \
+                         %SRC_DIR/ofpal/ofpal_barrier.h \
+                         %SRC_DIR/ofpal/ofpal_custom.h \
+                         %SRC_DIR/ofpal/ofpal_netconf.h
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
+# also the default input encoding. Doxygen uses libiconv (or the iconv built
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
+# the list of possible encodings.
+
+INPUT_ENCODING         = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh
+# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py
+# *.f90 *.f *.for *.vhd *.vhdl
+
+FILE_PATTERNS          = *.c *.h *.cpp
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE              = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should be
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+# Note that relative paths are relative to the directory from which doxygen is
+# run.
+
+EXCLUDE                =
+
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
+# from the input.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories. Note that the wildcards are matched
+# against the file with absolute path, so to exclude all test directories
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS       = */test/* \
+                         *Examples*
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS        =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH           =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS       =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH             = %SRC_DIR/../doxygen/sdn_pal
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output.
+# If FILTER_PATTERNS is specified, this tag will be
+# ignored.
+
+INPUT_FILTER           =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis.
+# Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match.
+# The filters are a list of the form:
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
+# info on how filters are used. If FILTER_PATTERNS is empty or if
+# non of the patterns match the file name, INPUT_FILTER is applied.
+
+FILTER_PATTERNS        =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES    = NO
+
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any)
+# and it is also possible to disable source filtering for a specific pattern
+# using *.ext= (so without naming a filter). This option only has effect when
+# FILTER_SOURCE_FILES is enabled.
+
+FILTER_SOURCE_PATTERNS =
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER         = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C, C++ and Fortran comments will always remain visible.
+
+STRIP_CODE_COMMENTS    = NO
+
+# If the REFERENCED_BY_RELATION tag is set to YES
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = NO
+
+# If the REFERENCES_RELATION tag is set to YES
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION    = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
+# link to the source code.
+# Otherwise they will link to the documentation.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code
+# will point to the HTML generated by the htags(1) tool instead of doxygen
+# built-in source browser. The htags tool is part of GNU's global source
+# tagging system (see http://www.gnu.org/software/global/global.html). You
+# will need version 4.8.6 or higher.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS       = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX     = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX          =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header. Note that when using a custom header you are responsible
+#  for the proper inclusion of any scripts and style sheets that doxygen
+# needs, which is dependent on the configuration options used.
+# It is advised to generate a default header using "doxygen -w html
+# header.html footer.html stylesheet.css YourConfigFile" and then modify
+# that header. Note that the header is subject to change so you typically
+# have to redo this when upgrading to a newer version of doxygen or when
+# changing the value of configuration settings such as GENERATE_TREEVIEW!
+
+HTML_HEADER            = %SRC_DIR/../doxygen/header.html
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER            = %SRC_DIR/../doxygen/footer.html
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If left blank doxygen will
+# generate a default style sheet. Note that it is recommended to use
+# HTML_EXTRA_STYLESHEET instead of this one, as it is more robust and this
+# tag will in the future become obsolete.
+
+HTML_STYLESHEET        =
+
+# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional
+# user-defined cascading style sheet that is included after the standard
+# style sheets created by doxygen. Using this option one can overrule
+# certain style aspects. This is preferred over using HTML_STYLESHEET
+# since it does not replace the standard style sheet and is therefor more
+# robust against future updates. Doxygen will copy the style sheet file to
+# the output directory.
+
+HTML_EXTRA_STYLESHEET  =
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the HTML output directory. Note
+# that these files will be copied to the base HTML output directory. Use the
+# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that
+# the files will be copied as-is; there are no commands or markers available.
+
+HTML_EXTRA_FILES       =
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
+# Doxygen will adjust the colors in the style sheet and background images
+# according to this color. Hue is specified as an angle on a colorwheel,
+# see http://en.wikipedia.org/wiki/Hue for more information.
+# For instance the value 0 represents red, 60 is yellow, 120 is green,
+# 180 is cyan, 240 is blue, 300 purple, and 360 is red again.
+# The allowed range is 0 to 359.
+
+HTML_COLORSTYLE_HUE    = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of
+# the colors in the HTML output. For a value of 0 the output will use
+# grayscales only. A value of 255 will produce the most vivid colors.
+
+HTML_COLORSTYLE_SAT    = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to
+# the luminance component of the colors in the HTML output. Values below
+# 100 gradually make the output lighter, whereas values above 100 make
+# the output darker. The value divided by 100 is the actual gamma applied,
+# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,
+# and 100 does not change the gamma.
+
+HTML_COLORSTYLE_GAMMA  = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting
+# this to NO can help when comparing the output of multiple runs.
+
+HTML_TIMESTAMP         = YES
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded.
+
+HTML_DYNAMIC_SECTIONS  = NO
+
+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of
+# entries shown in the various tree structured indices initially; the user
+# can expand and collapse entries dynamically later on. Doxygen will expand
+# the tree to such a level that at most the specified number of entries are
+# visible (unless a fully collapsed tree already exceeds this amount).
+# So setting the number of entries 1 will produce a full collapsed tree by
+# default. 0 is a special value representing an infinite number of entries
+# and will result in a full expanded tree by default.
+
+HTML_INDEX_NUM_ENTRIES = 100
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files
+# will be generated that can be used as input for Apple's Xcode 3
+# integrated development environment, introduced with OSX 10.5 (Leopard).
+# To create a documentation set, doxygen will generate a Makefile in the
+# HTML output directory. Running make will produce the docset in that
+# directory and running "make install" will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
+# it at startup.
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# for more information.
+
+GENERATE_DOCSET        = NO
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
+# feed. A documentation feed provides an umbrella under which multiple
+# documentation sets from a single provider (such as a company or product suite)
+# can be grouped.
+
+DOCSET_FEEDNAME        = "SDN PAL Software Developer's Guide"
+
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
+# should uniquely identify the documentation set bundle. This should be a
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
+# will append .docset to the name.
+
+DOCSET_BUNDLE_ID       = www.broadcom.com
+
+# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely
+# identify the documentation publisher. This should be a reverse domain-name
+# style string, e.g. com.mycompany.MyDocSet.documentation.
+
+DOCSET_PUBLISHER_ID    = www.broadcom.com
+
+# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
+
+DOCSET_PUBLISHER_NAME  = Broadcom Limited
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP      = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output directory.
+
+CHM_FILE               =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION           =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI           = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file
+# content.
+
+CHM_INDEX_ENCODING     =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND             = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated
+# that can be used as input for Qt's qhelpgenerator to generate a
+# Qt Compressed Help (.qch) of the generated HTML documentation.
+
+GENERATE_QHP           = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can
+# be used to specify the file name of the resulting .qch file.
+# The path specified is relative to the HTML output folder.
+
+QCH_FILE               =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#namespace
+
+QHP_NAMESPACE          = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#virtual-folders
+
+QHP_VIRTUAL_FOLDER     = doc
+
+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to
+# add. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#custom-filters
+
+QHP_CUST_FILTER_NAME   =
+
+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see
+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">
+# Qt Help Project / Custom Filters</a>.
+
+QHP_CUST_FILTER_ATTRS  =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's
+# filter section matches.
+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">
+# Qt Help Project / Filter Attributes</a>.
+
+QHP_SECT_FILTER_ATTRS  =
+
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
+# be used to specify the location of Qt's qhelpgenerator.
+# If non-empty doxygen will try to run qhelpgenerator on the generated
+# .qhp file.
+
+QHG_LOCATION           =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files
+#  will be generated, which together with the HTML files, form an Eclipse help
+# plugin. To install this plugin and make it available under the help contents
+# menu in Eclipse, the contents of the directory containing the HTML and XML
+# files needs to be copied into the plugins directory of eclipse. The name of
+# the directory within the plugins directory should be the same as
+# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before
+# the help appears.
+
+GENERATE_ECLIPSEHELP   = NO
+
+# A unique identifier for the eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have
+# this name.
+
+ECLIPSE_DOC_ID         = org.doxygen.Project
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs)
+# at top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it. Since the tabs have the same information as the
+# navigation tree you can set this option to NO if you already set
+# GENERATE_TREEVIEW to YES.
+
+DISABLE_INDEX          = YES
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information.
+# If the tag value is set to YES, a side panel will be generated
+# containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
+# Windows users are probably better off using the HTML help feature.
+# Since the tree basically has the same information as the tab index you
+# could consider to set DISABLE_INDEX to NO when enabling this option.
+
+GENERATE_TREEVIEW      = YES
+
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values
+# (range [0,1..20]) that doxygen will group on one line in the generated HTML
+# documentation. Note that a value of 0 will completely suppress the enum
+# values from appearing in the overview section.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH         = 250
+
+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open
+# links to external symbols imported via tag files in a separate window.
+
+EXT_LINKS_IN_WINDOW    = NO
+
+# Use this tag to change the font size of Latex formulas included
+# as images in the HTML documentation. The default is 10. Note that
+# when you change the font size after a successful doxygen run you need
+# to manually remove any form_*.png images from the HTML output directory
+# to force them to be regenerated.
+
+FORMULA_FONTSIZE       = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are
+# not supported properly for IE 6.0, but are supported on all modern browsers.
+# Note that when changing this option you need to delete any form_*.png files
+# in the HTML output before the changes have effect.
+
+FORMULA_TRANSPARENT    = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax
+# (see http://www.mathjax.org) which uses client side Javascript for the
+# rendering instead of using prerendered bitmaps. Use this if you do not
+# have LaTeX installed or if you want to formulas look prettier in the HTML
+# output. When enabled you may also need to install MathJax separately and
+# configure the path to it using the MATHJAX_RELPATH option.
+
+USE_MATHJAX            = NO
+
+# When MathJax is enabled you need to specify the location relative to the
+# HTML output directory using the MATHJAX_RELPATH option. The destination
+# directory should contain the MathJax.js script. For instance, if the mathjax
+# directory is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to
+# the MathJax Content Delivery Network so you can quickly see the result without
+# installing MathJax.
+# However, it is strongly recommended to install a local
+# copy of MathJax from http://www.mathjax.org before deployment.
+
+MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension
+# names that should be enabled during MathJax rendering.
+
+MATHJAX_EXTENSIONS     =
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box
+# for the HTML output. The underlying search engine uses javascript
+# and DHTML and should work on any modern browser. Note that when using
+# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets
+# (GENERATE_DOCSET) there is already a search function so this one should
+# typically be disabled. For large projects the javascript based search engine
+# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
+
+SEARCHENGINE           = YES
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a PHP enabled web server instead of at the web client
+# using Javascript. Doxygen will generate the search PHP script and index
+# file to put on the web server. The advantage of the server
+# based approach is that it scales better to large projects and allows
+# full text search. The disadvantages are that it is more difficult to setup
+# and does not have live searching capabilities.
+
+SERVER_BASED_SEARCH    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX         = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+# Note that when enabling USE_PDFLATEX this option is only used for
+# generating bitmaps for formulas in the HTML output, but not in the
+# Makefile that is written to the output directory.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE             = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES         =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER           =
+
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for
+# the generated latex document. The footer should contain everything after
+# the last chapter. If it is left blank doxygen will generate a
+# standard footer. Notice: only use this tag if you know what you are doing!
+
+LATEX_FOOTER           =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS         = NO
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX           = NO
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE        = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES     = NO
+
+# If LATEX_SOURCE_CODE is set to YES then doxygen will include
+# source code with syntax highlighting in the LaTeX output.
+# Note that which sources are shown also depends on other settings
+# such as SOURCE_BROWSER.
+
+LATEX_SOURCE_CODE      = NO
+
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
+# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See
+# http://en.wikipedia.org/wiki/BibTeX for more info.
+
+LATEX_BIB_STYLE        = plain
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimized for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS         = NO
+
+# Load style sheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE    =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE    =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION          = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT             = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+#XML_SCHEMA             =
+
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+#XML_DTD                =
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
+# dump the program listings (including syntax highlighting
+# and cross-referencing information) to the XML output. Note that
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader.
+# This is useful
+# if you want to understand what is going on.
+# On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION        = YES
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF     = YES
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# pointed to by INCLUDE_PATH will be searched when a #include is found.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH           =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS  =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed. To prevent a macro definition from being
+# undefined via #undef or recursively expanded use the := operator
+# instead of the = operator.
+
+PREDEFINED             = __attribute__(x)= \
+                         __cplusplus
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition that
+# overrules the definition found in the source code.
+
+EXPAND_AS_DEFINED      =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all references to function-like macros
+# that are alone on a line, have an all uppercase name, and do not end with a
+# semicolon, because these will confuse the parser if not removed.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles. For each
+# tag file the location of the external documentation should be added. The
+# format of a tag file without this location is as follows:
+#
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+#
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths
+# or URLs. Note that each tag file must have a unique name (where the name does
+# NOT include the path). If a tag file is not located in the directory in which
+# doxygen is run, you must also specify the path to the tagfile here.
+
+TAGFILES               =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE       =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS        = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
+# or super classes. Setting the tag to NO turns the diagrams off. Note that
+# this option also works with HAVE_DOT disabled, but it is recommended to
+# install and use dot, since it yields more powerful graphs.
+
+CLASS_DIAGRAMS         = YES
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH            =
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT               = %HAVE_DOT
+
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is
+# allowed to run in parallel. When set to 0 (the default) doxygen will
+# base this on the number of processors available in the system. You can set it
+# explicitly to a value larger than 0 to get control over the balance
+# between CPU load and processing speed.
+
+DOT_NUM_THREADS        = 0
+
+# By default doxygen will use the Helvetica font for all dot files that
+# doxygen generates. When you want a differently looking font you can specify
+# the font name using DOT_FONTNAME. You need to make sure dot is able to find
+# the font, which can be done by putting it in a standard location or by setting
+# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the
+# directory containing the font.
+
+DOT_FONTNAME           = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
+# The default size is 10pt.
+
+DOT_FONTSIZE           = 10
+
+# By default doxygen will tell dot to use the Helvetica font.
+# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to
+# set the path where dot can find it.
+
+DOT_FONTPATH           =
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH    = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS           = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK               = NO
+
+# If the UML_LOOK tag is enabled, the fields and methods are shown inside
+# the class node. If there are many fields or methods and many nodes the
+# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS
+# threshold limits the number of items for each type to make the size more
+# managable. Set this to 0 for no limit. Note that the threshold may be
+# exceeded by 50% before the limit is enforced.
+
+UML_LIMIT_NUM_FIELDS   = 10
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS     = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH          = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then
+# doxygen will generate a call dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable call graphs
+# for selected functions only using the \callgraph command.
+
+CALL_GRAPH             = NO
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
+# doxygen will generate a caller dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable caller
+# graphs for selected functions only using the \callergraph command.
+
+CALLER_GRAPH           = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will generate a graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES
+# then doxygen will show the dependencies a directory has on other directories
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH        = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are svg, png, jpg, or gif.
+# If left blank png will be used. If you choose svg you need to set
+# HTML_FILE_EXTENSION to xhtml in order to make the SVG files
+# visible in IE 9+ (other browsers do not have this requirement).
+
+DOT_IMAGE_FORMAT       = png
+
+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
+# enable generation of interactive SVG images that allow zooming and panning.
+# Note that this requires a modern browser other than Internet Explorer.
+# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you
+# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files
+# visible. Older versions of IE do not have SVG support.
+
+INTERACTIVE_SVG        = NO
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH               =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS           =
+
+# The MSCFILE_DIRS tag can be used to specify one or more directories that
+# contain msc files that are included in the documentation (see the
+# \mscfile command).
+
+MSCFILE_DIRS           =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
+# nodes that will be shown in the graph. If the number of nodes in a graph
+# becomes larger than this value, doxygen will truncate the graph, which is
+# visualized by representing a node as a red box. Note that doxygen if the
+# number of direct children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+
+DOT_GRAPH_MAX_NODES    = 200
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
+# graphs generated by dot. A depth value of 3 means that only nodes reachable
+# from the root by following a path via at most 3 edges will be shown. Nodes
+# that lay further from the root node will be omitted. Note that setting this
+# option to 1 or 2 may greatly reduce the computation time needed for large
+# code bases. Also note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+
+MAX_DOT_GRAPH_DEPTH    = 2
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not
+# seem to support this out of the box. Warning: Depending on the platform used,
+# enabling this option may lead to badly anti-aliased labels on the edges of
+# a graph (i.e. they become hard to read).
+
+DOT_TRANSPARENT        = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10)
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS      = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP            = YES
diff --git a/bal_release/doxygen/sdn_pal/sdn_pal.dox b/bal_release/doxygen/sdn_pal/sdn_pal.dox
new file mode 100644
index 0000000..1fb72ba
--- /dev/null
+++ b/bal_release/doxygen/sdn_pal/sdn_pal.dox
@@ -0,0 +1,29 @@
+/*
+ * SDN-PAL Software Developer's Guide - main page
+ */
+
+/** \mainpage SDN-PAL Software Deveoper's Guide
+
+\section intro Introduction
+SDN PAL is BAL add-on package. It is designed for managing xPON OLT virtual switch (xPON vOLT) using OpenFlow and/or NETCONF protocols.
+The xPON vOLT consists of xPON line card and subtending ONUs.
+SDN PAL acts as an intermediate layer between OpenFlow and NETCONF agents and the
+s/w stacks managing the line card and ONUs.
+    - xPON line card is managed by BAL
+    - xPON ONUs are managed by OMCI Service Layer
+
+SDN-PAL consists of 2 main components:
+    - OF-PAL    - OpenFlow PON Adaptation Layer. It is an SDK intended for integration with OpenFlow agent.
+        - SDN-PAL SDK uses data types generated by loxygen code generator for C (loci). See https://github.com/floodlight/loxigen for details.
+        - SDN-PAL SDK includes a reference integration with indogo OF agent. See http://www.projectfloodlight.org/indigo for details.
+    - xpon-volt.yang model - Yang model for managing xPON vOLT using NETCONF protocol.
+        - This module is implemented as a plugin for open-source libnetconf SDK. See https://github.com/CESNET/libnetconf for details.
+*/
+
+/** \page ofpal_api OF-PAL Public API
+  See \ref ofpal_api in API Reference chapter
+*/
+
+/** \page xpon_volt_yang xpon-volt Yang Model
+  \image html xpon-volt.png
+*/
diff --git a/bal_release/doxygen/sdn_pal/xpon-volt.png b/bal_release/doxygen/sdn_pal/xpon-volt.png
new file mode 100644
index 0000000..2decb53
--- /dev/null
+++ b/bal_release/doxygen/sdn_pal/xpon-volt.png
Binary files differ
diff --git a/bal_release/mk/Makefile.config b/bal_release/mk/Makefile.config
new file mode 100644
index 0000000..169a649
--- /dev/null
+++ b/bal_release/mk/Makefile.config
@@ -0,0 +1,439 @@
+# Common Makefile configuration
+#
+
+# The following variables must be set
+# MOD_NAME - module name. Depending on MOD_TYPE can be encapsulated (e.g., MOD_NAME=os --> libos.a)
+# MOD_TYPE - module type. Supported types currently are "lib", "app", "linux_module", "linux_lib", "shared_lib"
+#			 Note: 
+#				For library module it is possible to specify "unitest" target in 
+#				mk/$(SUBSYSTEM)/modules.core / .apps
+#				In this case unitest.c is compiled and linked with its module library.
+#				However, MOD_TYPE remains a "lib".  
+#
+# The following variables are optional
+# srcs     - list of .c source files relative to SRC_DIR
+# as_srcs  - list of .s (lower case s)   source files relative to SRC_DIR
+# AS_srcs  - list of .S (upper case .S) source files relative to SRC_DIR 
+# gen_bal_srcs - list of .c that have to be generated as part of the build from bal.objset
+# gen_bal_hdrs - list of .h that have to be generated as part of the build from bal.objset
+# gen_omci_srcs - list of .c that have to be generated as part of the build from omci.objset
+# gen_omci_hdrs - list of .h that have to be generated as part of the build from omci.objset
+# gen_omci_stack_srcs - list of .c that have to be generated as part of the build from omci_me_datamodel.csv
+# gen_omci_stack_hdrs - list of .h that have to be generated as part of the build from omci_me_datamodel.csv
+# MOD_DEPS - list of modules the "current" module depends on. OS abstraction layer dependency
+#			 (module "os") is always present implicitly. For example, api_cli module's Makefile 
+#			 includes the following line:
+#			 MOD_DEPS = cli api utils model
+# MOD_DEPS_OPT - similar to MOD_DEPS, but dependencies are optional and might not be present in the source tree.
+# MOD_INC_DIRS - used when module exports includes in directory(s) other than the module directory 
+# MOD_DEFS - additional defines, including -D. the defines are added when compiling "this" module
+#			 and all modules depending on it
+# MOD_LIBS - additional libraries required by the module, including -l and -L
+# MOD_CUSTOM - if set "y", default rule for building the module is NOT provided.
+#			 In this case the rule for building $(MOD_TARGET) must be provided in module's Makefile
+# MOD_POST_BUILD - optional commands that should be executed after successful module build
+# 
+# The following variables are not required in most cases, but supported nonetheless
+# EXTRA_CFLAGS - extra CFLAGS the module requires for compilation
+# EXTRA_INCLUDES - extra include directories the module requires for compilation (with -I)
+# EXTRA_LIBS_PATH - additional library search paths
+# EXTRA_LIBS additional libraries to link with
+#
+# The following variables are pre-set and can be used in module-specific Makefile
+# TOP_DIR - fully qualified top directory
+# MOD_DIR - module directory relative to the top directory
+# OUT_DIR_BASE - output directory base
+# ALL_MODULES - list of all modules in the current subsystem (core/apps)
+# ALL_LIB_MODULES - list of all lib modules in the current subsystem (core/apps)
+# ALL_APP_MODULES - list of all app modules in the current subsystem (core/apps)
+# SIMULATION_BUILD - set "y" for simulation build (CROSS_COMPILE is empty) 
+# OS - OS
+# ENABLE_EPON - set "y" if EPON mode is included
+# ENABLE_GPON - set "y" if GPON mode is included
+# ENABLE_XGPON - set "y" if XGPON mode is included
+# ENABLE_GPON_OR_XGPON - set "y" if GPON or XGPON mode is included
+# ENABLE_CLI - set "n" if CLI support is not required
+# ENABLE_LOG - set "n" if logger support is not required
+#
+# USE_CLANG - set "y" to enable CLANG code pass for improved diagnostic
+#
+# The following variables are pre-set and can be used and/or overwritten in module-specific Makefile
+# SRC_DIR - fully-qualified source directory
+# OUT_DIR - module output directory
+# TARGET_LIB - library name for "lib" or "shared_lib" module. By default it is $(MOD_NAME)
+# TARGET_LIB_FNAME - module library file name including path. 
+#		By default it is $(OUT_DIR)/lib$(TARGET_LIB).a for "lib" module and 
+#		$(OUT_DIR)/lib$(TARGET_LIB).so for "shared_lib"
+# MOD_TARGET - module target name, including path. By default it is 
+#	$(OUT_DIR)/$(MOD_NAME) for "app" modules
+#	$(TARGET_LIB_FNAME) for "lib" and "shared_lib" modules
+# CODEGEN_OUTPUT_DIR - output directory containing generated files
+
+TOOLCHAIN    ?= gcc
+OS           ?= posix
+DEBUG        ?= y
+BLD_DEP      ?= gcc
+USE_CLANG 	 ?= n
+
+export SHELL := /bin/bash
+
+export BOARD
+export TOOLCHAIN
+export OS
+export DEBUG
+export BLD_DEP
+export OS_KERNEL
+
+V ?= 0
+ifeq (x"$(V)", x"0")
+    SILENT_BUILD = @
+endif
+
+SRC_DIR		     = $(TOP_DIR)/$(MOD_DIR)
+OUT_DIR_BASE 	?= $(TOP_DIR)/build/$(SUBSYSTEM)
+OUT_DIR      	:= $(OUT_DIR_BASE)/$(MOD_DIR)
+
+#
+# Compiler warning configuration
+# Some extra warnings are always enabled. Others must be opted in on the module level
+#
+ENABLE_EXTRA_WARNINGS ?= y
+export ENABLE_EXTRA_WARNINGS
+
+ifneq ("$(BUILD_NC_AGENT)", "y")
+    override NC_AGENT := none
+endif
+
+# Include optional subsystem-specific configuration
+-include mk/$(SUBSYSTEM)/Makefile.$(SUBSYSTEM).config
+
+ENABLE_EPON	 ?= y
+ENABLE_GPON	 ?= y
+ENABLE_XGPON ?= y
+
+ENABLE_GPON_OR_XGPON = n
+ifeq ("$(ENABLE_GPON)", "y")
+    ENABLE_GPON_OR_XGPON = y
+endif
+ifeq ("$(ENABLE_XGPON)", "y")
+    ENABLE_GPON_OR_XGPON = y
+endif
+export ENABLE_EPON
+export ENABLE_GPON
+export ENABLE_XGPON
+export ENABLE_GPON_OR_XGPON
+
+CONFIG_DIR      = src/common/config
+OS_PLATFORM_DIR = src/$(SUBSYSTEM)/platform
+
+# CLI and logger support
+ENABLE_CLI ?= y
+ENABLE_LOG ?= y
+BAL_MONOLITHIC ?= y
+
+export ENABLE_CLI
+export ENABLE_LOG
+export BAL_MONOLITHIC
+
+#
+### Include module Makefile
+# For MOD_CUSTOM only will be included in Makefile.rules second time for propagate custom rules 
+#
+include $(SRC_DIR)/Makefile
+
+# Code-generator - related parameters
+CODEGEN_INPUT_DIR	 = $(SRC_DIR)/codegen_templates
+CODEGEN_OUTPUT_DIR	 = $(OUT_DIR)
+CODEGEN_DIR			 = $(TOP_DIR)/src/datamodel/bin/codegen
+CODEGEN_EXE          = $(CODEGEN_DIR)/Teknovus.MetaStructure.CodeGenerator.exe
+
+OMCI_STACK_CODEGEN_INPUT_DIR = $(SRC_DIR)/me_codegen
+OMCI_STACK_CODEGEN_EXE = $(OUT_DIR)/omci_me_codegen
+
+BAL_MODEL_FILE		 = $(TOP_DIR)/src/datamodel/bal.objset
+OMCI_MODEL_FILE		 = $(TOP_DIR)/src/datamodel/omci.objset
+OMCI_STACK_MODEL_FILE = $(TOP_DIR)/src/datamodel/omci_me_datamodel.csv
+MONO_VER            ?= 4.3.2.467
+MONO_PATH           ?= /opt/mono-$(MONO_VER)/bin/mono
+
+export SRC_DIR
+export OUT_DIR_BASE
+export OUT_DIR
+export MODEL_OUT_DIR
+
+ifeq ("$(wildcard $(MONO_PATH))", "")
+    # If we can't find Mono installed in the correct path, default to the current PATH version.
+    # In the future, we should always use Mono from a common tools directory.
+    # TODO: change this once the compiler/toolchain paths are better defined.
+    MONO_PATH        = mono
+endif
+
+# Treat "yes" and "y" the same
+ifeq ("$(USE_CLANG)", "yes")
+    USE_CLANG := y
+endif
+ifeq ("$(USE_CLANG)", "y")
+    include $(MAKE_DIR)/clang.opts
+endif
+
+# Disable code generation in release build
+ifeq ("$(RELEASE_BUILD)", "y")
+    srcs := $(srcs) $(gen_bal_srcs) $(gen_omci_srcs)
+    gen_bal_hdrs := 
+    gen_bal_srcs := 
+    gen_omci_hdrs := 
+    gen_omci_srcs := 
+    # Disable LINT and CLANG
+    USE_LINT = n
+    USE_CLANG = n
+endif
+
+SRCS = $(strip $(srcs:%=$(SRC_DIR)/%))
+
+# In COMPILE_ALL_IN_ONE_GO mode all .c files of a module are compiled in 
+# a single invocation of BLD_CC compiler. In result, objects files are created
+# in OUT_DIR even if module's .c files are spread in sub-directories
+ifeq ("$(COMPILE_ALL_IN_ONE_GO)", "y")
+    srcs_no_dir = $(notdir $(srcs))  
+    _OBJS = $(srcs_no_dir:%.c=$(OUT_DIR)/%.o)
+else
+    _OBJS = $(srcs:%.c=$(OUT_DIR)/%.o)
+endif
+
+as_SRCS = $(strip $(as_srcs:%=$(SRC_DIR)/%))
+as_OBJS = $(as_srcs:%.s=$(OUT_DIR)/%.o)
+_OBJS  += $(as_OBJS)
+
+AS_SRCS = $(strip $(AS_srcs:%=$(SRC_DIR)/%))
+AS_OBJS = $(AS_srcs:%.S=$(OUT_DIR)/%.o)
+_OBJS  += $(AS_OBJS)
+
+ifneq ("$(gen_bal_srcs)", "")
+    GEN_BAL_SRCS = $(strip $(gen_bal_srcs:%=$(CODEGEN_OUTPUT_DIR)/%))
+    _OBJS += $(GEN_BAL_SRCS:%.c=%.o)
+endif
+ifneq ("$(gen_bal_hdrs)", "")
+    GEN_BAL_HDRS = $(strip $(gen_bal_hdrs:%=$(CODEGEN_OUTPUT_DIR)/%))
+endif
+
+ifneq ("$(gen_omci_srcs)", "")
+    GEN_OMCI_SRCS = $(strip $(gen_omci_srcs:%=$(CODEGEN_OUTPUT_DIR)/%))
+    _OBJS += $(GEN_OMCI_SRCS:%.c=%.o)
+endif
+ifneq ("$(gen_omci_hdrs)", "")
+    GEN_OMCI_HDRS = $(strip $(gen_omci_hdrs:%=$(CODEGEN_OUTPUT_DIR)/%))
+endif
+
+ifneq ("$(gen_omci_stack_srcs)", "")
+    GEN_OMCI_STACK_SRCS = $(strip $(gen_omci_stack_srcs:%=$(CODEGEN_OUTPUT_DIR)/%))
+    _OBJS += $(GEN_OMCI_STACK_SRCS:%.c=%.o)
+endif
+ifneq ("$(gen_omci_stack_hdrs)", "")
+    GEN_OMCI_STACK_HDRS = $(strip $(gen_omci_stack_hdrs:%=$(CODEGEN_OUTPUT_DIR)/%))
+endif
+
+OBJS = $(strip $(_OBJS))
+
+GEN_SRCS = $(GEN_BAL_SRCS) $(GEN_OMCI_SRCS) $(GEN_OMCI_STACK_SRCS)
+GEN_HDRS = $(GEN_BAL_HDRS) $(GEN_OMCI_HDRS) $(GEN_OMCI_STACK_HDRS)
+
+# Add default dependency on OS abstraction
+ifeq ("$(MOD_NAME)", "")
+    ifneq (x"$(V)", x"0")
+        $(info MOD_NAME is not set for $(SRC_DIR)/Makefile. Skipping..)
+    endif
+    MOD_TYPE = _skip_
+endif
+
+# Add default dependency on OS abstraction
+ifneq ("$(MOD_SUPPRESS_OS_DEP), "y)
+    ifeq ("$(MOD_TYPE)", "linux_module")
+        _kernel = y
+    endif
+    ifeq ("$(MOD_TYPE)", "linux_lib")
+        _kernel = y
+    endif
+    ifeq ("$(_kernel)", "y")
+         MOD_DEPS := os_linux $(MOD_DEPS)
+    else    
+         MOD_DEPS := os $(MOD_DEPS)
+    endif
+endif
+
+# Extra types filter
+ifneq ("$(EXTRA_TYPES)", "")
+    EXTRA_TYPES := $(shell echo -n $(EXTRA_TYPES) | sed -e 's/ /\\|/g')
+    GEN_EXTRA_TYPES := -typeNameFilter=\^\($(EXTRA_TYPES)\)\$$ 
+endif
+
+OS_KERNEL ?= $(OS)
+UC_PLATFORM = $(shell echo $(PLATFORM) | tr a-z A-Z)
+UC_SUBSYSTEM = $(shell echo $(SUBSYSTEM) | tr a-z A-Z)
+UC_OS = $(shell echo $(OS) | tr a-z A-Z)
+UC_OS_KERNEL = $(shell echo $(OS_KERNEL) | tr a-z A-Z)
+
+EXTRA_DEFINES   += -DBCM_SUBSYSTEM_$(UC_SUBSYSTEM) -DBCM_PLATFORM_$(UC_PLATFORM) -DBCM_OS_$(UC_OS)
+EXTRA_DEFINES   += -DBCM_SUBSYSTEM_HOST
+EXTRA_DEFINES   += -D$(UC_OS_KERNEL)_KERNEL_SPACE
+ifeq ("$(ENABLE_EPON)", "y")
+    EXTRA_DEFINES	+= -DBCM_EPON
+endif
+ifeq ("$(ENABLE_GPON)", "y")
+    EXTRA_DEFINES	+= -DBCM_GPON
+endif
+ifeq ("$(ENABLE_XGPON)", "y")
+    EXTRA_DEFINES	+= -DBCM_XGPON
+endif
+
+ifneq ("$(CONFIG_MAC_RPC)", "n")
+EXTRA_DEFINES += -DCONFIG_MAC_RPC
+endif
+
+ifneq ("$(CONFIG_SWITCH_RPC)", "n")
+EXTRA_DEFINES += -DCONFIG_SWITCH_RPC
+endif
+
+ifneq ("$(BOARD)", "")
+EXTRA_DEFINES	+= -DBOARD=$(BOARD)
+endif
+
+ifeq ("$(BOARD)", "wrx")
+EXTRA_DEFINES	+= -DWRX_BUILD
+endif
+
+ifeq ("$(BUILD_OF_AGENT)", "y")
+EXTRA_DEFINES   += -DBUILD_OF_AGENT
+endif
+
+ifeq ("$(FORCE_PKTIN_SND)", "y")
+EXTRA_DEFINES   += -DFORCE_PKTIN_SND
+endif
+
+# Build unitests for simulation and from Jenkins jobs
+UNITEST ?= n
+
+ifeq ("$(SIMULATION_BUILD)", "y")
+	EXTRA_DEFINES += -DSIMULATION_BUILD
+	UNITEST = y
+endif
+
+ifeq ("$(JENKINS_BUILD)", "y")
+	UNITEST = y
+endif
+
+ifeq ("$(BAL_MONOLITHIC)", "y")
+    EXTRA_DEFINES += -DBAL_MONOLITHIC
+endif
+
+EXTRA_INCLUDES  += -I$(SRC_DIR)
+EXTRA_INCLUDES  += -I$(TOP_SRC_DIR)/common/include -I$(OUT_DIR_BASE)/src/common/include
+
+OPT_DISABLE_$(UC_SUBSYSTEM) ?=n
+OPT_DISABLE := $(OPT_DISABLE_$(UC_SUBSYSTEM))
+
+ARCH_CFLAGS = $(ARCH_FLAGS)
+ifeq ("$(OPT_DISABLE)", "y")
+    ARCH_CFLAGS		+= $(DEBUG_O_CFLAGS)
+	EXTRA_LFLAGS	+= $(DEBUG_O_LFLAGS)
+    EXTRA_ASFLAGS   += $(DEBUG_O_ASFLAGS)
+    EXTRA_asFLAGS   += $(DEBUG_O_asLAGS)
+else
+    ARCH_CFLAGS     += $(RELEASE_O_CFLAGS)
+	EXTRA_LFLAGS	+= $(RELEASE_O_LFLAGS)
+    EXTRA_ASFLAGS   += $(RELEASE_O_ASFLAGS)
+    EXTRA_asFLAGS   += $(RELEASE_O_asFLAGS)
+endif
+
+# 3rd party packages install location
+INSTALL_DIR ?= $(OUT_DIR_BASE)
+export INSTALL_DIR
+EXTRA_INCLUDES += -I$(INSTALL_DIR)/include
+
+PATH := $(INSTALL_DIR)/bin:$(PATH)
+export PATH
+
+# Shared library location
+SHARED_LIB_DIR ?= $(INSTALL_DIR)/lib
+export SHARED_LIB_DIR
+
+# Treat lib as shared lib if BUILD_SHARED_LIBS is y
+ifeq  ("$(BUILD_SHARED_LIBS)", "y")
+   export BUILD_SHARED_LIBS
+   ifeq  ("$(MOD_TYPE)", "lib")
+      MOD_TYPE = shared_lib
+   endif
+   EXTRA_LIBS_PATH += -L$(TOP_DIR)/$(LOCAL_MAPLE_SDK_DIR)/build/shared_libs
+endif
+EXTRA_LIBS_PATH += -L$(SHARED_LIB_DIR)
+
+# Calculate MOD_TARGET based on MOD_TYPE
+ifeq  ("$(MOD_TYPE)", "lib")
+	ifneq ("$(OBJS)", "")
+		TARGET_LIB ?= $(MOD_NAME)
+		TARGET_LIB_FNAME ?= $(OUT_DIR)/lib$(TARGET_LIB).a
+	endif
+	MOD_TARGET ?= $(TARGET_LIB_FNAME)
+else ifeq  ("$(MOD_TYPE)", "shared_lib")
+	ifneq ("$(OBJS)", "")
+		TARGET_LIB ?= $(MOD_NAME)
+		TARGET_LIB_FNAME ?= $(OUT_DIR)/lib$(TARGET_LIB).so
+	endif
+	MOD_TARGET ?= $(TARGET_LIB_FNAME)
+else ifeq  ("$(MOD_TYPE)", "app")
+	MOD_TARGET ?= $(OUT_DIR)/$(MOD_NAME)
+else ifeq  ("$(MOD_TYPE)", "linux_module")
+    ifeq ("$(KERNELDIR)", "")
+        $(error KERNELDIR must be set in board profile)
+    endif
+    ifeq ("$(KERNEL_ARCH)", "")
+        $(error KERNEL_ARCH must be set in board profile)
+    endif
+    ifeq ("$(KERNEL_OUTDIR)", "")
+        KERNEL_OUTDIR := $(KERNELDIR)
+    endif
+	MOD_TARGET ?= $(SRC_DIR)/$(MOD_NAME).ko
+else ifeq ("$(MOD_TYPE)", "linux_lib") 
+    MOD_TARGET ?= $(OUT_DIR_BASE)/$(MOD_NAME).linuxlib
+else ifeq ("$(MOD_TYPE)", "_skip_")
+    MOD_TARGET = .dummy
+else        	
+    $(error MOD_TYPE $(MOD_TYPE) is incorrect for module $(MOD_NAME). Must be lib or app)
+endif
+
+ifeq ("$(MOD_TARGET)", "")
+   MOD_TARGET = $(MOD_NAME)
+endif
+
+ifeq ("$(OS)", "posix")
+	EXTRA_DEFINES += -D_XOPEN_SOURCE=600
+    LIBS   = -lrt -lpthread -lm
+endif
+
+# Make sure that paths in EXTRA_INCLUDES are absolute
+ifneq ("$(EXTRA_INCLUDES)", "")
+    # Make sure that each directory is an absolute path
+    EXTRA_INCS = $(addprefix -I, $(abspath $(subst -I,,$(subst $(TOP_DIR)/,,$(EXTRA_INCLUDES)))))
+endif
+ifneq ("$(EXTRA_ASINCLUDES)", "")
+    # Make sure that each directory is an absolute path
+    EXTRA_ASINCS = $(addprefix -I, $(abspath $(subst -I,,$(subst $(TOP_DIR)/,,$(EXTRA_ASINCLUDES)))))
+endif
+ifneq ("$(EXTRA_asINCLUDES)", "")
+    # Make sure that each directory is an absolute path
+    EXTRA_asINCS = $(addprefix -I, $(abspath $(subst -I,,$(subst $(TOP_DIR)/,,$(EXTRA_asINCLUDES)))))
+endif
+ifeq ("$(USE_LINT)", "y")
+    USE_LINT := yes
+endif    
+ifeq ("$(USE_LINT)", "yes")
+    EXTRA_DEFINES += -DUSE_LINT
+endif
+
+EXTRA_DEFINES += $(USER_EXTRA_DEFINES) $(USER_EXTRA_$(UC_SUBSYSTEM)_DEFINES)
+EXTRA_CFLAGS += $(USER_EXTRA_CFLAGS) $(USER_EXTRA_$(UC_SUBSYSTEM)_CFLAGS)
+CFLAGS  += $(ARCH_CFLAGS) $(EXTRA_CFLAGS)  $(EXTRA_INCS) $(EXTRA_DEFINES)
+ASFLAGS += $(ARCH_FLAGS) $(EXTRA_ASFLAGS) $(EXTRA_ASINCS) $(EXTRA_ASDEFINES)
+asFLAGS += $(ARCH_FLAGS) $(EXTRA_asFLAGS) $(EXTRA_asINCS) $(EXTRA_asDEFINES)
+LFLAGS  += $(ARCH_FLAGS) $(EXTRA_LFLAGS)
+DEP_FLAGS += $(EXTRA_CFLAGS) $(EXTRA_INCS) $(EXTRA_DEFINES)
+CLANG_FLAGS += $(EXTRA_CFLAGS) $(EXTRA_INCS) $(EXTRA_DEFINES) $(CLANG_OPTS)
diff --git a/bal_release/mk/Makefile.initial_config b/bal_release/mk/Makefile.initial_config
new file mode 100644
index 0000000..541ec84
--- /dev/null
+++ b/bal_release/mk/Makefile.initial_config
@@ -0,0 +1,6 @@
+ifeq ("$(TERM)", "dumb")
+        BOLD_PRINT := printf "\n---- %s --------------------------------------------------\n"
+else
+        BOLD_PRINT?=printf "%s\n"
+endif
+export BOLD_PRINT
diff --git a/bal_release/mk/Makefile.main b/bal_release/mk/Makefile.main
new file mode 100644
index 0000000..3818766
--- /dev/null
+++ b/bal_release/mk/Makefile.main
@@ -0,0 +1,180 @@
+# It is included from the central Makefile once for each subsystem (e.g., "core" and "agent")
+# PARAMATER: SUBSYSTEM
+
+UC_SUBSYSTEM = $(shell echo $(SUBSYSTEM) | tr a-z A-Z)
+export BUILD_TARGET = $(SUBSYSTEM)
+export BIN_RELEASE_FILE_PREFIX ?= release.bin.$(SUBSYSTEM).$(BUILD_VERSION_PREFIX)
+export OUT_$(UC_SUBSYSTEM)_DIR 	 ?= $(OUT_DIR)/$(SUBSYSTEM)
+
+# Combine modules.$(SUBSYSTEM).bal, modules.$(SUBSYSTEM).sdn_pal and modules.$(SUBSYSTEM).omci into a single file in the subsystem directory
+define combine_modules
+	mkdir -p $(OUT_$(UC_SUBSYSTEM)_DIR); \
+	rm -rf $1; \
+    touch $1; \
+	for mod_file in $2; do cat $$mod_file >> $1; done;
+endef
+
+# Create $(SUBSYSTEM)/modules.$(SUBSYSTEM).omci and $(SUBSYSTEM)/modules.$(SUBSYSTEM).sdn_pal if they doesn't exist, as empty files.
+# This is relevant when compiling from source release package extraction.
+$(MAKE_DIR)/$(SUBSYSTEM)/modules.$(SUBSYSTEM).omci: | phonytarget
+	touch $@
+$(MAKE_DIR)/$(SUBSYSTEM)/modules.$(SUBSYSTEM).sdn_pal: | phonytarget
+	touch $@
+
+phonytarget:
+
+# ORDER IS IMPORTANT - OMCI should come before BAL
+$(OUT_$(UC_SUBSYSTEM)_DIR)/modules.core: $(MAKE_DIR)/$(SUBSYSTEM)/modules.$(SUBSYSTEM).omci $(MAKE_DIR)/$(SUBSYSTEM)/modules.$(SUBSYSTEM).bal
+	$(call combine_modules,$(OUT_$(UC_SUBSYSTEM)_DIR)/modules.core,$^)
+
+# ORDER IS IMPORTANT - SDN_PAL should come after BAL
+$(OUT_$(UC_SUBSYSTEM)_DIR)/modules.agent: $(MAKE_DIR)/$(SUBSYSTEM)/modules.$(SUBSYSTEM).bal $(MAKE_DIR)/$(SUBSYSTEM)/modules.$(SUBSYSTEM).omci $(MAKE_DIR)/$(SUBSYSTEM)/modules.$(SUBSYSTEM).sdn_pal
+	$(call combine_modules,$(OUT_$(UC_SUBSYSTEM)_DIR)/modules.agent,$^)
+
+$(OUT_$(UC_SUBSYSTEM)_DIR)/.deps_$(SUBSYSTEM)_list_$(BOARD): $(OUT_$(UC_SUBSYSTEM)_DIR)/modules.$(SUBSYSTEM) \
+        $(MAKE_DIR)/Makefile.config $(MAKE_DIR)/Makefile.rules $(MAKE_DIR)/Makefile.template $(MAKE_DIR)/Makefile.main
+	@if ! test -f $(OUT_$(UC_SUBSYSTEM)_DIR)/.deps_$(SUBSYSTEM)_list_$(BOARD); then\
+	    if ls $(OUT_$(UC_SUBSYSTEM)_DIR)/.deps_$(SUBSYSTEM)_list_* 2>/dev/null >/dev/null; then\
+	    	olddeps=`ls $(OUT_$(UC_SUBSYSTEM)_DIR)/.deps_$(SUBSYSTEM)_list_*` ; \
+	    	old_board=`echo $$olddeps | sed 's@$(OUT_$(UC_SUBSYSTEM)_DIR)/.deps_$(SUBSYSTEM)_list_@@'` ; \
+			$(BOLD_PRINT) "Previous build was for different board $$old_board. cleaning up..";\
+			$(MAKE) -s BOARD=$$old_board V=0 clean_$(SUBSYSTEM); \
+			rm -fr $(OUT_$(UC_SUBSYSTEM)_DIR)/build/output/*; \
+		fi;\
+	fi
+	@$(BOLD_PRINT) "Generating list of $(SUBSYSTEM) modules for $(BUILD_TARGET)"
+	@rm -fr $(OUT_$(UC_SUBSYSTEM)_DIR)/.deps_$(SUBSYSTEM)_list_*
+	@rm -fr $(OUT_$(UC_SUBSYSTEM)_DIR)/all_modules.$(SUBSYSTEM)
+	@rm -fr $(OUT_$(UC_SUBSYSTEM)_DIR)/all_lib_modules.$(SUBSYSTEM)
+	@rm -fr $(OUT_$(UC_SUBSYSTEM)_DIR)/all_app_modules.$(SUBSYSTEM)
+	@mkdir -p $(OUT_$(UC_SUBSYSTEM)_DIR)
+	@touch $(OUT_$(UC_SUBSYSTEM)_DIR)/all_modules.$(SUBSYSTEM)
+	@touch $(OUT_$(UC_SUBSYSTEM)_DIR)/all_lib_modules.$(SUBSYSTEM)
+	@touch $(OUT_$(UC_SUBSYSTEM)_DIR)/all_app_modules.$(SUBSYSTEM)
+	@for mod_dir in `awk '{print $$1}' $(OUT_$(UC_SUBSYSTEM)_DIR)/modules.$(SUBSYSTEM)`; do\
+		if test "$$mod_dir" = "" ; then continue; fi; \
+		mod_name=`$(MAKE) -s V=0 SUBSYSTEM=$(SUBSYSTEM) MOD_DIR=$$mod_dir SKIP_DEPS=yes -f $(MAKE_DIR)/Makefile.template module_name`;\
+		if test "$$mod_name" = "" ; then continue; fi; \
+		mod_name=$${mod_name}_$(SUBSYSTEM);\
+		mod_type=`grep -e '^[[:space:]]*MOD_TYPE[[:space:]]*=' $$mod_dir/Makefile | awk -F= '{sub(/\r/,""); print $$2}' | sed -e 's/^[ \t]*//'`; \
+		echo -n "$$mod_name " >> $(OUT_$(UC_SUBSYSTEM)_DIR)/all_modules.$(SUBSYSTEM); \
+		if test "`echo -n $$mod_type | sed -e 's/linux_lib lib/lib/' | sed -e 's/lib linux_lib/lib/'`" = "lib" ; then\
+			echo -n "$$mod_name " >> $(OUT_$(UC_SUBSYSTEM)_DIR)/all_lib_modules.$(SUBSYSTEM); \
+		fi;\
+		if test "$$mod_type" = "app" ; then\
+			echo -n "$$mod_name " >> $(OUT_$(UC_SUBSYSTEM)_DIR)/all_app_modules.$(SUBSYSTEM); \
+		fi;\
+	done
+	@touch $(OUT_$(UC_SUBSYSTEM)_DIR)/.deps_$(SUBSYSTEM)_list_$(BOARD)
+
+$(OUT_$(UC_SUBSYSTEM)_DIR)/.deps_$(SUBSYSTEM)_$(BOARD): $(OUT_$(UC_SUBSYSTEM)_DIR)/.deps_$(SUBSYSTEM)_list_$(BOARD)
+	@$(BOLD_PRINT) "Building $(BOARD) board environment for $(BUILD_TARGET)"
+	$(MAKE) SUBSYSTEM=$(SUBSYSTEM) MOD_DIR=$$mod_dir OUT_DIR_BASE=$(OUT_$(UC_SUBSYSTEM)_DIR) SKIP_DEPS=yes \
+            ALL_MODULES="`cat $(OUT_$(UC_SUBSYSTEM)_DIR)/all_modules.$(SUBSYSTEM)`" \
+            ALL_LIB_MODULES="`cat $(OUT_$(UC_SUBSYSTEM)_DIR)/all_lib_modules.$(SUBSYSTEM)`" \
+            ALL_APP_MODULES="`cat $(OUT_$(UC_SUBSYSTEM)_DIR)/all_app_modules.$(SUBSYSTEM)`" \
+            -f $(MAKE_DIR)/Makefile.template board_env
+	@$(BOLD_PRINT) "Generating $(SUBSYSTEM) dependencies for $(BUILD_TARGET)"
+	@for mod_dir in `awk '{print $$1}' $(OUT_$(UC_SUBSYSTEM)_DIR)/modules.$(SUBSYSTEM)`; do\
+		if test "$$mod_dir" = "" ; then continue; fi; \
+		mod_name=`$(MAKE) -s V=0 SUBSYSTEM=$(SUBSYSTEM) MOD_DIR=$$mod_dir SKIP_DEPS=yes -f $(MAKE_DIR)/Makefile.template module_name`;\
+		if test "$$mod_name" = "" ; then continue; fi; \
+		if ! $(MAKE) $(SILENT) SUBSYSTEM=$(SUBSYSTEM) MOD_DIR=$$mod_dir OUT_DIR_BASE=$(OUT_$(UC_SUBSYSTEM)_DIR) SKIP_DEPS=yes \
+			ALL_MODULES="`cat $(OUT_$(UC_SUBSYSTEM)_DIR)/all_modules.$(SUBSYSTEM)`" \
+			ALL_LIB_MODULES="`cat $(OUT_$(UC_SUBSYSTEM)_DIR)/all_lib_modules.$(SUBSYSTEM)`" \
+			ALL_APP_MODULES="`cat $(OUT_$(UC_SUBSYSTEM)_DIR)/all_app_modules.$(SUBSYSTEM)`" \
+			-f $(MAKE_DIR)/Makefile.template moddep; then exit 1;\
+		fi;\
+	done
+	@touch $(OUT_$(UC_SUBSYSTEM)_DIR)/.deps_$(SUBSYSTEM)_$(BOARD)
+	@echo "$(BOARD_DIR)" > $(OUT_$(UC_SUBSYSTEM)_DIR)/.board_dir
+
+.PHONY:
+
+# Make sure that none of module Makefiles changed.
+# If there is a change - we need to regenerate dependencies
+_deps_$(SUBSYSTEM)_: $(OUT_$(UC_SUBSYSTEM)_DIR)/.deps_$(SUBSYSTEM)_$(BOARD) .PHONY
+	@cat $(OUT_$(UC_SUBSYSTEM)_DIR)/modules.$(SUBSYSTEM) | while read -r mod_dir_targ; do\
+			mod_dir=`echo $$mod_dir_targ | awk '{print $$1}'`;\
+			if test "$$mod_dir" = "" ; then continue; fi; \
+			if test $(OUT_$(UC_SUBSYSTEM)_DIR)/.deps_$(SUBSYSTEM)_list_$(BOARD) -ot $$mod_dir/Makefile; then\
+				echo $$mod_dir/Makefile changed, must regenerate dependencies.;\
+				echo PLEASE RE-RUN make;\
+				rm -f $(OUT_$(UC_SUBSYSTEM)_DIR)/.deps_$(SUBSYSTEM)_list_$(BOARD);\
+				exit -1;\
+			fi;\
+		done
+
+build_$(SUBSYSTEM): _deps_$(SUBSYSTEM)_
+	@$(BOLD_PRINT) "Building $(SUBSYSTEM) image for $(BUILD_TARGET)"
+	@cat $(OUT_$(UC_SUBSYSTEM)_DIR)/modules.$(SUBSYSTEM) | while read -r mod_dir_targ; do\
+		mod_dir=`echo $$mod_dir_targ | awk '{print $$1}'`;\
+		if test "$$mod_dir" = "" ; then continue; fi; \
+		mod_targets=`echo $$mod_dir_targ | awk '{print $$2 $$3 $$4 $$5}'`;\
+		if ! $(MAKE) $(SILENT) SUBSYSTEM=$(SUBSYSTEM) MOD_DIR=$$mod_dir OUT_DIR_BASE=$(OUT_$(UC_SUBSYSTEM)_DIR) \
+			ALL_MODULES="`cat $(OUT_$(UC_SUBSYSTEM)_DIR)/all_modules.$(SUBSYSTEM)`" \
+			ALL_LIB_MODULES="`cat $(OUT_$(UC_SUBSYSTEM)_DIR)/all_lib_modules.$(SUBSYSTEM)`" \
+			ALL_APP_MODULES="`cat $(OUT_$(UC_SUBSYSTEM)_DIR)/all_app_modules.$(SUBSYSTEM)`" \
+			-f $(MAKE_DIR)/Makefile.template $$mod_targets; then exit 1;\
+		fi;\
+	done
+	@$(BOLD_PRINT) "Finished building $(SUBSYSTEM) image for $(BUILD_TARGET)"
+
+clean_$(SUBSYSTEM): BOARD=$(shell ls $(OUT_$(UC_SUBSYSTEM)_DIR)/.deps_$(SUBSYSTEM)_list_* 2>/dev/null | sed 's@$(OUT_$(UC_SUBSYSTEM)_DIR)/.deps_$(SUBSYSTEM)_list_@@')
+
+clean_$(SUBSYSTEM): $(OUT_$(UC_SUBSYSTEM)_DIR)/modules.$(SUBSYSTEM)
+	@$(BOLD_PRINT) "Clean $(PLATFORM) $(SUBSYSTEM) BOARD=$(BOARD)"
+	@for mod_dir in `awk '{print $$1}' $(OUT_$(UC_SUBSYSTEM)_DIR)/modules.$(SUBSYSTEM)`; do\
+		if test "$$mod_dir" = "" ; then continue; fi; \
+		$(MAKE) $(SILENT) SUBSYSTEM=$(SUBSYSTEM) MOD_DIR=$$mod_dir OUT_DIR_BASE=$(OUT_$(UC_SUBSYSTEM)_DIR) SKIP_DEPS=yes \
+			-f $(MAKE_DIR)/Makefile.template clean_module;\
+	done
+	$(SILENT_BUILD)rm -fr $(OUT_$(UC_SUBSYSTEM)_DIR)
+	$(SILENT_BUILD)find $(SUBSYSTEM) -name '*~' -print0 2>/dev/null | xargs -0 rm -rf
+	$(SILENT_BUILD)find $(SUBSYSTEM) -name '*.ko' -print0 2>/dev/null | xargs -0 rm -rf
+	$(SILENT_BUILD)find $(SUBSYSTEM) -name '.*.cmd' -print0 2>/dev/null | xargs -0 rm -rf
+	$(SILENT_BUILD)find $(SUBSYSTEM) -name '*.o' -print0 2>/dev/null | xargs -0 rm -rf
+	$(SILENT_BUILD)find $(SUBSYSTEM) -name '*.mod.c' -print0 2>/dev/null | xargs -0 rm -rf
+	$(SILENT_BUILD)find $(SUBSYSTEM) -name modules.order -print0 2>/dev/null | xargs -0 rm -rf
+	$(SILENT_BUILD)find $(SUBSYSTEM) -name Module.symvers -print0 2>/dev/null| xargs -0 rm -rf
+	$(SILENT_BUILD)find $(SUBSYSTEM) -name .tmp_versions -print0 2>/dev/null | xargs -0 rm -rf
+ 
+help_$(SUBSYSTEM):
+	@echo "$$PLATFORM $(SUBSYSTEM) modules:"
+	@cat $(OUT_$(UC_SUBSYSTEM)_DIR)/modules.$(SUBSYSTEM) | while read -r mod_dir_targ; do\
+		mod_dir=`echo $$mod_dir_targ | awk '{print $$1}'`;\
+		if test "$$mod_dir" = "" ; then continue; fi; \
+		mod_name=`$(MAKE) -s V=0 SUBSYSTEM=$(SUBSYSTEM) MOD_DIR=$$mod_dir SKIP_DEPS=yes -f $(MAKE_DIR)/Makefile.template module_name`;\
+		if test "$$mod_name" = "" ; then continue; fi; \
+		echo "  " $${mod_name}_$(SUBSYSTEM);\
+	done
+
+# Targets for building individual $(SUBSYSTEM) module
+%_$(SUBSYSTEM):: _deps_$(SUBSYSTEM)_
+	@while read -r mod_dir_targ; do\
+		mod_dir=`echo $$mod_dir_targ | awk '{print $$1}'`;\
+		if test "$$mod_dir" = "" ; then continue; fi; \
+		mod_name=`$(MAKE) -s V=0 SUBSYSTEM=$(SUBSYSTEM) MOD_DIR=$$mod_dir SKIP_DEPS=yes -f $(MAKE_DIR)/Makefile.template module_name`;\
+		if test "$$mod_name" = "" ; then continue; fi; \
+		mod_name=$${mod_name}_$(SUBSYSTEM);\
+		mod_targets=`echo $$mod_dir_targ | awk '{print $$2 $$3 $$4 $$5}'`;\
+		if test "$$mod_name" = "$@" ; then\
+			target_found=y;\
+			$(MAKE) $(SILENT) SUBSYSTEM=$(SUBSYSTEM) MOD_DIR=$$mod_dir OUT_DIR_BASE=$(OUT_$(UC_SUBSYSTEM)_DIR) \
+			ALL_MODULES="`cat $(OUT_$(UC_SUBSYSTEM)_DIR)/all_modules.$(SUBSYSTEM)`" \
+			ALL_LIB_MODULES="`cat $(OUT_$(UC_SUBSYSTEM)_DIR)/all_lib_modules.$(SUBSYSTEM)`" \
+			ALL_APP_MODULES="`cat $(OUT_$(UC_SUBSYSTEM)_DIR)/all_app_modules.$(SUBSYSTEM)`" \
+				-f $(MAKE_DIR)/Makefile.template $$mod_targets || exit 1;\
+		fi;\
+	done < $(OUT_$(UC_SUBSYSTEM)_DIR)/modules.$(SUBSYSTEM);\
+	if test "$$target_found" != "y" ; then\
+		echo No rule to make target $@;\
+		exit 1;\
+	fi
+
+docs_$(SUBSYSTEM): _deps_$(SUBSYSTEM)_
+	mkdir -p $(OUT_DOCS_DIR)
+	$(SILENT_BUILD)$(MAKE) -C doxygen OUT_DIR_BASE=$(OUT_$(UC_SUBSYSTEM)_DIR)
+
+bin_release_$(SUBSYSTEM): build_$(SUBSYSTEM)
+	$(SILENT_BUILD)$(MAKE_DIR)/bin_release.sh
diff --git a/bal_release/mk/Makefile.rules b/bal_release/mk/Makefile.rules
new file mode 100644
index 0000000..886b22f
--- /dev/null
+++ b/bal_release/mk/Makefile.rules
@@ -0,0 +1,494 @@
+# Common Makefile rules
+#
+
+# For linux_lib we don't build anything. Object files are just added
+# when compiling modules depending on the libs
+
+ifeq  ("$(MOD_TYPE)", "linux_lib")
+	# Skip libraries that might have crept in dependencies
+    SKIP_LIB_MODULES = y
+    export SKIP_LIB_MODULES
+endif    
+
+ifeq  ("$(MOD_TYPE)", "linux_module")
+	# Skip libraries that might have crept in dependencies
+    SKIP_LIB_MODULES = y
+    export SKIP_LIB_MODULES
+endif    
+
+ifeq ("$(MOD_TYPE)", "lib")
+    MODULE_IS_A_LIBRARY = y
+else ifeq ("$(MOD_TYPE)", "shared_lib")
+    MODULE_IS_A_LIBRARY = y
+else
+    MODULE_IS_A_LIBRARY = n
+endif
+
+# Include module's own auto-generated Makefile.config.$(MODULE) file if any
+# It in turn includes all dependencies
+ifeq (x"$(V)", x"2")
+    $(info !!!MOD_NAME=$(MOD_NAME) MOD_TYPE=$(MOD_TYPE) MOD_TARGET=$(MOD_TARGET))
+    $(info !!!Including own dependency file: $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME))
+endif
+-include $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
+ifeq (x"$(V)", x"2")
+    $(info !!!After include of $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME))
+endif
+
+ifeq (x"$(V)", x"2")
+    $(info !!! Building $(MOD_TYPE) module $(MOD_NAME): depends on $(MOD_DEPS_FILES) SKIP_LIBS=$(SKIP_LIB_MODULES))
+endif
+
+# Skip default rules for custom module
+ifneq  ("$(MOD_CUSTOM)", "y")
+ 
+# Default lib rule
+ifeq  ("$(MOD_TYPE)", "lib")
+
+ifeq ("$(SKIP_LIB_MODULES)", "y")
+
+$(MOD_TARGET): 
+
+# of ifneq  ("$(SKIP_LIB_MODULES)", "y")
+else
+
+# Create library if there are any objects 
+$(MOD_TARGET): $(OBJS)
+ifneq ("$(OBJS)", "")
+	$(SILENT_BUILD)$(BLD_AR) $(ARFLAGS) $@ $(OBJS)
+ifeq ("$(MOD_POST_BUILD)", "")
+	@$(BOLD_PRINT) "done: $@"
+endif	
+endif
+ifneq ("$(MOD_POST_BUILD)", "")
+	$(SILENT_BUILD)$(MOD_POST_BUILD)
+	@$(BOLD_PRINT) "done: $@"
+endif	
+	$(SILENT_BUILD)touch $(OUT_DIR_BASE)/.$(MOD_NAME)
+
+# end of ifeq ("$(SKIP_LIB_MODULES)", "y")
+endif
+
+# end of ifeq  ("$(MOD_TYPE)", "lib")
+endif
+ 
+# Default shared_lib rule
+ifeq  ("$(MOD_TYPE)", "shared_lib")
+
+EXTRA_CFLAGS += -fPIC
+
+# Create library if there are any objects 
+$(MOD_TARGET): $(OBJS)
+ifneq ("$(OBJS)", "")
+	$(SILENT_BUILD)$(BLD_CC) -shared -o $@ $(OBJS) $(LFLAGS)
+	$(SILENT_BUILD)mkdir -p $(SHARED_LIB_DIR)
+	$(SILENT_BUILD)cp $@ $(SHARED_LIB_DIR)/
+ifeq ("$(MOD_POST_BUILD)", "")
+	@$(BOLD_PRINT) "done: $@"
+endif	
+endif
+ifneq ("$(MOD_POST_BUILD)", "")
+	$(SILENT_BUILD)$(MOD_POST_BUILD)
+	@$(BOLD_PRINT) "done: $@"
+endif	
+	$(SILENT_BUILD)touch $(OUT_DIR_BASE)/.$(MOD_NAME)
+
+# end of ifeq  ("$(MOD_TYPE)", "shared_lib")
+endif
+
+# Default app rule
+ifeq  ("$(MOD_TYPE)", "app")
+
+$(MOD_TARGET): $(OBJS) $(MOD_DEPS_FILES)
+	$(SILENT_BUILD)$(BLD_CC) -o $@ $(OBJS) $(LFLAGS) $(EXTRA_LIBS_PATH) $(EXTRA_LIBS_NOREC_BEFORE) $(LIBS_START_MARKER) $(EXTRA_LIBS) $(LIBS_END_MARKER) $(EXTRA_LIBS_NOREC_AFTER) $(LIBS)
+ifneq ("$(MOD_POST_BUILD)", "")
+	$(SILENT_BUILD)$(MOD_POST_BUILD)
+endif	
+	$(SILENT_BUILD)touch $(OUT_DIR_BASE)/.$(MOD_NAME)
+	@$(BOLD_PRINT) "done: $(OUT_DIR)/$(MOD_NAME)"
+
+# endif of ifeq  ("$(MOD_TYPE)", "app")
+endif
+
+# For linux_lib we don't build anything. Object files are just added
+# when compiling modules depending on the libs
+ifeq  ("$(MOD_TYPE)", "linux_lib")
+    LINUX_LIB_OBJECTS := $(srcs:%.c=$(SRC_DIR)/%.o)
+
+$(MOD_TARGET): $(SRCS) $(GEN_SRCS) $(MOD_DEPS_FILES)
+	$(SILENT_BUILD)touch $(MOD_TARGET)
+	$(SILENT_BUILD)touch $(OUT_DIR_BASE)/.$(MOD_NAME)
+
+endif
+
+# Default linux_module$(srcs:%=$(SRC_DIR)/%)
+ifeq  ("$(MOD_TYPE)", "linux_module")
+    obj-m    += $(MOD_NAME).o
+    $(MOD_NAME)-objs := $(srcs:%.c=%.o)
+    LIB_OBJS_REL_PATH = $(foreach oo,$(ALL_LIB_OBJS),$(shell python -c "import os.path; print os.path.relpath('$(oo)', '$(SRC_DIR)')"))
+
+    _KERNEL_MAKEPARMS = -C $(KERNELDIR) M=$(SRC_DIR) KBUILD_EXTRA_SYMBOLS="$(KBUILD_EXTRA_SYMBOLS)" \
+    	O=$(KERNEL_OUTDIR) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(CROSS_COMPILE) V=$(V) EXTRA_CFLAGS="$(EXTRA_CFLAGS)" \
+    	obj-m=$(obj-m) $(MOD_NAME)-objs="$($(MOD_NAME)-objs) $(LIB_OBJS_REL_PATH)"
+    KERNEL_MAKEPARMS = $(_KERNEL_MAKEPARMS:%os_abstraction/posix=%os_abstraction/linux)
+
+	# Prevent parallel build    
+.NOTPARALLEL:
+
+    # Only build linux module if not already being built by another make thread.
+    # Otherwise, linux build system get confused
+    # Also, remove -s flag using MAKEFLAGS. Otherwise, linux build system will not print names of the files
+    # being compiled
+$(MOD_TARGET): $(SRCS) $(MOD_DEPS_FILES)
+ifneq  ("$(SRC_DIR)", "$(TOP_DIR)/$(MOD_DIR)")
+	@cp -f $(TOP_DIR)/$(MOD_DIR)/Makefile $(SRC_DIR)
+endif
+	$(SILENT_BUILD)if [ ! -f $(SRC_DIR)/.$(MOD_NAME)_in_progress ]; then \
+		touch $(SRC_DIR)/.$(MOD_NAME)_in_progress; \
+		MAKEFLAGS= $(MAKE) $(KERNEL_MAKEPARMS) ;\
+		if [[ "$$?" != "0" ]]; then \
+			rm -f $(SRC_DIR)/.$(MOD_NAME)_in_progress;\
+			exit -2;\
+		fi; \
+		mkdir -p $(OUT_DIR_BASE)/linux_modules ;\
+		touch -c $(MOD_TARGET) ;\
+		cp $(SRC_DIR)/$(MOD_NAME).ko $(OUT_DIR_BASE)/linux_modules/ ;\
+		touch $(OUT_DIR_BASE)/.$(MOD_NAME) ;\
+		$(BOLD_PRINT) "done: $(MOD_TARGET)" ;\
+		rm -f $(SRC_DIR)/.$(MOD_NAME)_in_progress ;\
+	fi
+
+# Take care of compiling generated code for linux kernel
+ifneq  ("$(SRC_DIR)", "$(TOP_DIR)/$(MOD_DIR)")
+
+$(SRC_DIR)/%.c : $(CODEGEN_OUTPUT_DIR)/../%.c
+	$(SILENT_BUILD)cp -f $(CODEGEN_OUTPUT_DIR)/../*.[c,h] $(SRC_DIR)/
+
+$(SRC_DIR)/%.h : $(CODEGEN_OUTPUT_DIR)/../%.h
+	$(SILENT_BUILD)cp -f $(CODEGEN_OUTPUT_DIR)/../*.[c,h] $(SRC_DIR)/
+
+endif
+
+# End of MOD_TYPE==linux_module
+endif
+
+# else of ifneq  ("$(MOD_CUSTOM)", "y")
+else
+
+# only for MOD_CUSTOM include Module Makefile second time for propagate  
+# custom rules, first time included in Makefile.config for all modules 
+include $(SRC_DIR)/Makefile
+
+# End of ifneq ($(MOD_CUSTOM), y)
+endif
+
+$(OUT_DIR)/%.o: $(SRC_DIR)/%.c $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
+ifeq (x"$(V)", x"0")
+	@echo "CC $<"
+endif
+	$(SILENT_BUILD)mkdir -p $(dir $@)
+	$(SILENT_BUILD)$(BLD_CC) $(CFLAGS) -D__BASENAME__=`basename $<` -c -o $@ $<
+ifeq (x"$(USE_LINT)", x"yes")
+ifeq (x"$(V)", x"0")
+	@echo "LINT $<"
+endif
+	$(SILENT_BUILD)FORCE_LINT=$(FORCE_LINT) $(MAKE_DEVICE_DIR)/lint.sh $(LINT_FLAGS) $(filter -I% -D%, $(CFLAGS)) $< || { rm $@; false; }
+endif
+ifeq (x"$(USE_CLANG)", x"y")
+ifeq (x"$(V)", x"0")
+	_fn=`basename "$<" .c` ;\
+	eval "_disable_fn_set=\$${DISABLE_CLANG_$$_fn}"; \
+	if test "$$_disable_fn_set" != "y" ; then echo "CLANG $<"; else echo "CLANG $< ... skipped"; fi
+endif
+	_fn=`basename "$<" .c` ;\
+	eval "_disable_fn_set=\$${DISABLE_CLANG_$$_fn}"; \
+	if test "$$_disable_fn_set" != "y" ; then  $(CLANG) $(CLANG_FLAGS) -c $< -o $@.clang && rm -f $@.clang; fi
+# end of ifeq (x"$(USE_CLANG)", x"y")	
+endif	
+
+$(OUT_DIR)/%.o: $(SRC_DIR)/%.s $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
+ifeq (x"$(V)", x"0")
+	@echo "AS $<"
+endif
+	$(SILENT_BUILD)mkdir -p $(dir $@)
+	$(SILENT_BUILD)$(BLD_AS) $(asFLAGS) -o $@ $<
+
+$(OUT_DIR)/%.o: $(SRC_DIR)/%.S $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
+ifeq (x"$(V)", x"0")
+	@echo "AS $<"
+endif
+	$(SILENT_BUILD)mkdir -p $(dir $@)
+	$(SILENT_BUILD)$(BLD_CC) $(ASFLAGS) -o $@ $<
+
+
+$(OUT_DIR)/%.d: $(SRC_DIR)/%.c $(SRC_DIR)/Makefile
+ifneq ("$(BUILD_DEPS_IN_CC)", "y")
+ifeq (x"$(V)", x"0")
+	@echo "DP $<"
+endif
+	$(SILENT_BUILD)mkdir -p $(dir $@)
+	$(SILENT_BUILD)$(BLD_DEP) -MM -MT $(@:.d=.o) $(DEP_FLAGS) $<  > $@ && sed 's,\($*\.o\)[ :]*,\1 $@ : ,g' -i $@
+endif
+
+$(CODEGEN_OUTPUT_DIR)/%.o: $(CODEGEN_OUTPUT_DIR)/%.c $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
+ifeq (x"$(V)", x"0")
+	@echo "CC $<"
+endif
+	$(SILENT_BUILD)mkdir -p $(dir $@)
+	$(SILENT_BUILD)$(BLD_CC) $(CFLAGS) -D__BASENAME__=`basename $<` -c -o $@ $<
+
+$(CODEGEN_OUTPUT_DIR)/%.d: $(CODEGEN_OUTPUT_DIR)/%.c $(SRC_DIR)/Makefile
+ifneq ("$(BUILD_DEPS_IN_CC)", "y")
+ifeq (x"$(V)", x"0")
+	@echo "DP $<"
+endif
+	$(SILENT_BUILD)mkdir -p $(dir $@)
+	$(SILENT_BUILD)$(BLD_DEP) -MM -MT $(@:.d=.o) $(DEP_FLAGS) $<  > $@ && sed 's,\($*\.o\)[ :]*,\1 $@ : ,g' -i $@
+endif
+
+ifneq ("$(SKIP_DEPS)", "yes")
+ifneq  ("$(MOD_TYPE)", "linux_module")
+ifneq  ("$(MOD_TYPE)", "linux_lib")
+-include $(OBJS:.o=.d)
+endif
+endif
+endif
+
+BUILD_UNITEST = $(UNITEST)
+ifeq  ("$(OBJS)", "")
+    BUILD_UNITEST = n
+endif    
+
+# Only build unitest if library objects are included
+ifeq  ("$(BUILD_UNITEST)", "y")
+
+unitest: $(OUT_DIR)/unitest
+
+$(OUT_DIR)/unitest: $(OUT_DIR)/unitest.o $(TARGET_LIB_FNAME) $(MOD_DEPS_FILES)
+	$(SILENT_BUILD)$(BLD_CC) -o $@ $(OUT_DIR)/unitest.o $(LFLAGS) $(EXTRA_LIBS_PATH) $(LIBS_START_MARKER) $(EXTRA_LIBS) $(LIBS_END_MARKER) $(LIBS)
+	$(SILENT_BUILD)touch $(OUT_DIR_BASE)/.$(MOD_NAME)
+	@$(BOLD_PRINT) "done: $@"
+
+# else of ifneq  ("$(BUILD_UNITEST)", "y")
+else 
+
+unitest: $(TARGET_LIB_FNAME) $(MOD_DEPS_FILES)
+	
+# endif of ifneq  ("$(BUILD_UNITEST)", "y")
+endif
+
+# Generate sources if necessary
+ifneq  ("$(GEN_SRCS)$(GEN_HDRS)$(GEN_OMCI_SRCS)$(GEN_OMCI_HDRS)$(GEN_OMCI_STACK_SRCS)$(GEN_OMCI_STACK_HDRS)", "")
+
+$(GEN_BAL_SRCS) $(GEN_BAL_HDRS): $(OUT_DIR)/.$(MOD_NAME)_generated_bal
+$(GEN_OMCI_SRCS) $(GEN_OMCI_HDRS): $(OUT_DIR)/.$(MOD_NAME)_generated_omci
+$(GEN_OMCI_STACK_SRCS) $(GEN_OMCI_STACK_HDRS): $(OUT_DIR)/.$(MOD_NAME)_generated_omci_stack
+
+$(OUT_DIR)/.$(MOD_NAME)_generated_bal: $(BAL_MODEL_FILE) $(wildcard $(CODEGEN_DIR)/*) $(wildcard $(CODEGEN_INPUT_DIR)/*)
+	$(call gen_cmd,$(GEN_BAL_SRCS),$(GEN_BAL_HDRS),$(BAL_MODEL_FILE),"bcmbal")
+
+$(OUT_DIR)/.$(MOD_NAME)_generated_omci: $(OMCI_MODEL_FILE) $(wildcard $(CODEGEN_DIR)/*) $(wildcard $(CODEGEN_INPUT_DIR)/*)
+	$(call gen_cmd,$(GEN_OMCI_SRCS),$(GEN_OMCI_HDRS),$(OMCI_MODEL_FILE),"bcmomci")
+
+$(OMCI_STACK_CODEGEN_EXE): $(OMCI_STACK_CODEGEN_INPUT_DIR)/omci_me_codegen.c
+	mkdir -p $(OUT_DIR)
+	$(BLD_CC_HOST) $(EXTRA_CFLAGS) -gdwarf-3 -o $@ $< -I$(TOP_DIR)/src/common/os_abstraction -I$(TOP_DIR)/src/common/os_abstraction/posix -I$(TOP_DIR)/src/common/config -I$(TOP_DIR)/src/core/platform -I$(TOP_DIR)/src/common/include
+
+$(OUT_DIR)/.$(MOD_NAME)_generated_omci_stack: $(OMCI_STACK_MODEL_FILE) $(wildcard $(CODEGEN_DIR)/*) $(wildcard $(CODEGEN_INPUT_DIR)/*) $(OMCI_STACK_CODEGEN_EXE)
+	$(call gen_omci_stack_cmd,$(GEN_OMCI_STACK_SRCS),$(GEN_OMCI_STACK_HDRS),$(OMCI_STACK_MODEL_FILE),"bcm_omci")
+
+define gen_cmd
+	mkdir -p $(CODEGEN_OUTPUT_DIR)
+	echo "Generating code from model: $(notdir $1 $2)"
+	$(MONO_PATH) $(CODEGEN_EXE) --genobjmodel -objset="$3" -style=bal -prefix=$4 \
+   	-templatedir="$(CODEGEN_INPUT_DIR)" -outdir="$(CODEGEN_OUTPUT_DIR)"
+	touch $@ 
+	echo "Code generation complete!"
+endef
+
+define gen_omci_stack_cmd
+	echo "Generating code from model: $(notdir $1 $2)"
+    $(OMCI_STACK_CODEGEN_EXE) $4 $(OUT_DIR) $3 $(addprefix $(OMCI_STACK_CODEGEN_INPUT_DIR)/, $(addsuffix .tmpl, $(notdir $1 $2)))
+    for file in $(GEN_OMCI_STACK_HDRS) $(GEN_OMCI_STACK_SRCS); do \
+        $(TOP_DIR)/tools/copyright_tools/insert_copyright.pl -t c -l $(TOP_DIR)/COPYRIGHT $$file > $$file.tmp; \
+        mv $$file.tmp $$file; \
+    done
+	touch $@ 
+	echo "Code generation complete!"
+endef
+
+# end of ifneq  ("$(GEN_SRCS)$(GEN_HDRS)$(GEN_OMCI_SRCS)$(GEN_OMCI_HDRS)$(GEN_OMCI_STACK_SRCS)$(GEN_OMCI_STACK_HDRS)", "")
+endif
+
+#
+# Dependency rules generation: --> Makefile.config.$(MOD_NAME)
+# 
+
+MOD_CONFIG_FILE = $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
+MOD_CONFIG_DEF  = $(MOD_NAME)_DEP_DEFINED
+ifneq ("$(MOD_INC_DIRS)", "")
+    # Make sure that each directory is an absolute path
+    MOD_INCS = $(addprefix -I, $(abspath $(subst -I,,$(subst $(TOP_DIR)/,,$(MOD_INC_DIRS)))))
+else
+	MOD_INCS = -I$(SRC_DIR)
+    ifneq ("$(GEN_HDRS)", "")
+        MOD_INCS += -I$(CODEGEN_OUTPUT_DIR)
+	endif
+endif
+
+# 
+# Generate Makefile.config.$(MODULE) capable of re-creating the module
+#
+moddep: $(GEN_SRCS) $(GEN_HDRS)
+ifeq (x"$(V)", x"3")
+	@echo "!!!!!  moddep for  MOD_NAME=$(MOD_NAME) MOD_TYPE=$(MOD_TYPE) MOD_CUSTOM=$(MOD_CUSTOM)!!!"
+endif
+	$(SILENT_BUILD)mkdir -p $(OUT_DIR_BASE)
+	@rm -fr $(MOD_CONFIG_FILE)
+	@rm -fr $(OBJS:.o=.d)
+
+	@echo "ifeq (x\"$$""(V)\", x\"2\")"  >> $(MOD_CONFIG_FILE)
+	@echo "    $$""(info !!! MODULE=$$""(MOD_NAME) --> $(MOD_CONFIG_FILE): $(MOD_CONFIG_DEF)=$$""($(MOD_CONFIG_DEF)), DEPS=$(MOD_DEPS))" >> $(MOD_CONFIG_FILE)
+	@echo "endif"  >> $(MOD_CONFIG_FILE)
+
+    # Prevent double inclusion 
+	@echo "ifneq (\"$$""($(MOD_CONFIG_DEF))\", \"y\")" >> $(MOD_CONFIG_FILE)
+	@echo "" >> $(MOD_CONFIG_FILE)
+	@echo "$(MOD_CONFIG_DEF) := y" >> $(MOD_CONFIG_FILE)
+	@echo "export $(MOD_NAME)_DIR := $(SRC_DIR)" >> $(MOD_CONFIG_FILE)
+	@echo "export $(MOD_NAME)_OUT_DIR := $(OUT_DIR)" >> $(MOD_CONFIG_FILE)
+
+    ifeq  ("$(MODULE_IS_A_LIBRARY)", "y")
+		@echo "_skip_it := y" >> $(MOD_CONFIG_FILE)
+    else
+		@echo "_skip_it := n" >> $(MOD_CONFIG_FILE)
+    endif
+	@echo "ifneq (\"$$""(SKIP_LIB_MODULES)\", \"y\")" >> $(MOD_CONFIG_FILE)
+	@echo "    _skip_it := n" >> $(MOD_CONFIG_FILE)
+	@echo "endif" >> $(MOD_CONFIG_FILE)
+
+	@echo "ifneq (\"$$""(_skip_it)\", \"y\")"  >> $(MOD_CONFIG_FILE)
+
+    ifeq  ("$(MODULE_IS_A_LIBRARY)", "y")
+        ifneq ("$(OBJS)", "")
+			@echo "EXTRA_LIBS += $(LIBS_MARKER)$(TARGET_LIB)" >> $(MOD_CONFIG_FILE)
+			@echo "EXTRA_LIBS_PATH += $(LIBS_PATH_MARKER)$(OUT_DIR)" >> $(MOD_CONFIG_FILE)
+        endif
+        ifneq ("$(MOD_LIBS)", "")
+			@echo "EXTRA_LIBS += $(MOD_LIBS)" >> $(MOD_CONFIG_FILE)
+        endif
+        ifneq ("$(MOD_LIBS_NOREC_BEFORE)", "")
+			@echo "EXTRA_LIBS_NOREC_BEFORE += $(MOD_LIBS_NOREC_BEFORE)" >> $(MOD_CONFIG_FILE)
+        endif
+        ifneq ("$(MOD_LIBS_NOREC_AFTER)", "")
+			@echo "EXTRA_LIBS_NOREC_AFTER += $(MOD_LIBS_NOREC_AFTER)" >> $(MOD_CONFIG_FILE)
+        endif
+		@echo "ifneq (x\"$$""(MOD_NAME)\", x\"$(MOD_NAME)\")"  >> $(MOD_CONFIG_FILE)
+		@echo "   MOD_DEPS_FILES += $(OUT_DIR_BASE)/.$(MOD_NAME)"  >> $(MOD_CONFIG_FILE)
+		@echo "endif"  >> $(MOD_CONFIG_FILE)
+    endif
+
+    ifeq  ("$(MOD_TYPE)", "linux_lib")
+        ifneq ("$(OBJS)", "")
+			@echo "ALL_LIB_OBJS += $(LINUX_LIB_OBJECTS)"  >> $(MOD_CONFIG_FILE)
+        endif
+		@echo "ifneq (x\"$$""(MOD_NAME)\", x\"$(MOD_NAME)\")"  >> $(MOD_CONFIG_FILE)
+		@echo "   MOD_DEPS_FILES += $(OUT_DIR_BASE)/.$(MOD_NAME)"  >> $(MOD_CONFIG_FILE)
+		@echo "endif"  >> $(MOD_CONFIG_FILE)
+    endif
+
+    ifeq  ("$(MOD_TYPE)", "linux_module")
+		@echo "ifneq (x\"$$""(MOD_NAME)\", x\"$(MOD_NAME)\")"  >> $(MOD_CONFIG_FILE)
+			@echo "   KBUILD_EXTRA_SYMBOLS += $(SRC_DIR)/Module.symvers" >> $(MOD_CONFIG_FILE)
+			@echo "   MOD_DEPS_FILES += $(OUT_DIR_BASE)/.$(MOD_NAME)"  >> $(MOD_CONFIG_FILE)
+		@echo "endif"  >> $(MOD_CONFIG_FILE)
+    endif
+
+    # Module creation rules
+	@echo "$(MOD_NAME)_$(SUBSYSTEM): $(OUT_DIR_BASE)/.$(MOD_NAME)"  >> $(MOD_CONFIG_FILE)
+	@echo ""  >> $(MOD_CONFIG_FILE)
+	@echo "$(OUT_DIR_BASE)/.$(MOD_NAME): .FORCE"   >> $(MOD_CONFIG_FILE)
+    ifeq  ("$(MOD_CUSTOM)", "y")
+		@echo "		$$""(MAKE) MOD_DIR=$(MOD_DIR) -f $(MAKE_DIR)/Makefile.template $(MOD_TARGET)" >> $(MOD_CONFIG_FILE)
+    else
+    ifneq  ("$(OBJS)", "")
+		@echo "		$$""(MAKE) MOD_DIR=$(MOD_DIR) -f $(MAKE_DIR)/Makefile.template $(MOD_TARGET)" >> $(MOD_CONFIG_FILE)
+    endif
+    ifeq  ("$(OBJS)", "")
+		@echo "		if [ ! -f $(OUT_DIR_BASE)/.$(MOD_NAME) ]; then touch $(OUT_DIR_BASE)/.$(MOD_NAME); fi" >> $(MOD_CONFIG_FILE)
+    endif
+    endif
+	@echo ""  >> $(MOD_CONFIG_FILE)
+	@echo ".FORCE:"   >> $(MOD_CONFIG_FILE)
+	@echo ""  >> $(MOD_CONFIG_FILE)
+
+    ifneq ("$(MOD_DEFS)", "")
+		@echo "EXTRA_CFLAGS += $(MOD_DEFS)" >> $(MOD_CONFIG_FILE)
+    endif
+	
+	@echo "endif"  >> $(MOD_CONFIG_FILE)
+
+    # If it is a library and this file is included as someone's dependency - extend MOD_DEP_FULL_NAMES
+    # and generate a rule to rebuilt the library
+    ifneq ("$(MOD_DEPS)$(MOD_DEPS_OPT)", "")
+		@echo "ifeq (x\"$$""(V)\", x\"2\")"  >> $(MOD_CONFIG_FILE)
+		@echo "   $$""(info !!! Now include dependencies $(MOD_DEPS) $(MOD_DEPS_OPT)" >> $(MOD_CONFIG_FILE)
+		@echo "endif"  >> $(MOD_CONFIG_FILE)
+        ifneq ("$(MOD_DEPS)", "")
+		@echo "$(MOD_NAME)_MOD_DEPS = $(MOD_DEPS)" >> $(MOD_CONFIG_FILE)
+		@echo "ifneq (x\"$$""(SKIP_DEPS)\", x\"yes\")"  >> $(MOD_CONFIG_FILE)
+		@echo "include $$""($(MOD_NAME)_MOD_DEPS:%=$(OUT_DIR_BASE)/Makefile.config.%)" >> $(MOD_CONFIG_FILE)
+		@echo "endif"  >> $(MOD_CONFIG_FILE)
+        endif
+        ifneq ("$(MOD_DEPS_OPT)", "")
+		@echo "$(MOD_NAME)_MOD_DEPS_OPT = $(MOD_DEPS_OPT)" >> $(MOD_CONFIG_FILE)
+		@echo "ifneq (x\"$$""(SKIP_DEPS)\", x\"yes\")"  >> $(MOD_CONFIG_FILE)
+		@echo "-include $$""($(MOD_NAME)_MOD_DEPS_OPT:%=$(OUT_DIR_BASE)/Makefile.config.%)" >> $(MOD_CONFIG_FILE)
+		@echo "endif"  >> $(MOD_CONFIG_FILE)
+        endif
+	@echo "ifeq (x\"$$""(V)\", x\"2\")"  >> $(MOD_CONFIG_FILE)
+	@echo "   $$""(info !!! $(MOD_NAME) finished including dependencies)" >> $(MOD_CONFIG_FILE)
+	@echo "endif"  >> $(MOD_CONFIG_FILE)
+    endif
+
+	@echo "EXTRA_CFLAGS += $(MOD_INCS)" >> $(MOD_CONFIG_FILE)
+	@echo "" >> $(MOD_CONFIG_FILE)
+	@echo "endif" >> $(MOD_CONFIG_FILE)
+# 
+# end of moddep: target
+#
+
+clean_module::
+ifeq  ("$(MOD_TYPE)", "linux_module")
+	$(SILENT_BUILD)-test -f $(SRC_DIR)/Makefile && $(MAKE) $(KERNEL_MAKEPARMS) clean
+	$(SILENT_BUILD)cd $(SRC_DIR) && rm -fr $($(MOD_NAME)-objs) $($(MOD_NAME)-objs:../%=../.%.cmd)
+	$(SILENT_BUILD)rm -fr $(OUT_DIR_BASE)/linux_modules/$(MOD_NAME).ko
+endif
+ifeq  ("$(MOD_TYPE)", "linux_lib")
+	$(SILENT_BUILD)rm -fr $(LINUX_LIB_OBJECTS)
+endif	
+	$(SILENT_BUILD)cd $(SRC_DIR) && rm -fr $(patsubst %.c,.%.o.cmd,$(srcs))
+	$(SILENT_BUILD)[ ! -d $(OUT_DIR) ] || find $(OUT_DIR) -name '*.[o,d,a]' -print0 | xargs -0 rm -rf
+	$(SILENT_BUILD)[ ! -d $(OUT_DIR) ] || find $(OUT_DIR) -name '*~'        -print0 | xargs -0 rm -rf
+	$(SILENT_BUILD)[ ! -d $(OUT_DIR) ] || find $(OUT_DIR) -name '*.ko'      -print0 | xargs -0 rm -rf
+	$(SILENT_BUILD)[ ! -d $(OUT_DIR) ] || find $(OUT_DIR) -name '.*.cmd'    -print0 | xargs -0 rm -rf
+	$(SILENT_BUILD)rm -fr $(SRC_DIR)/*.mod.c $(SRC_DIR)/modules.order $(SRC_DIR)/Module.symvers $(SRC_DIR)/.tmp_versions
+	$(SILENT_BUILD)rm -fr $(MOD_TARGET) $(OUT_DIR)/$(TARGET) $(OUT_DIR)/unitest $(TARGET_LIB_FNAME)
+	$(SILENT_BUILD)rm -fr $(ALL_LIB_OBJS)
+	$(SILENT_BUILD)rm -fr $(GEN_SRCS) $(GEN_HDRS) $(OUT_DIR)/.$(MOD_NAME)_generated_*
+ifneq ("$(MOD_NAME)", "")
+	$(SILENT_BUILD)rm -fr $(OUT_DIR_BASE)/.$(MOD_NAME)
+	$(SILENT_BUILD)rm -fr $(SRC_DIR)/.$(MOD_NAME)_in_progress
+endif	
+    
+clobber: clean_module
+	$(SILENT_BUILD)rm -fr $(OUT_DIR)
+
+# Optional subsystem-specific rules
+-include mk/$(SUBSYSTEM)/Makefile.$(SUBSYSTEM).rules
+
+# Generate board-specific environment if any
+board_env: $(BOARD_ENV_RULE)
+
+module_name:
+	$(info $(MOD_NAME))
diff --git a/bal_release/mk/Makefile.template b/bal_release/mk/Makefile.template
new file mode 100644
index 0000000..633e962
--- /dev/null
+++ b/bal_release/mk/Makefile.template
@@ -0,0 +1,12 @@
+# Central Makefile template
+# Builds specific module
+# Input parameters:
+# MOD_DIR
+# TOP_DIR
+
+ifeq (x"$(V)", x"1")
+    $(info Building module $(MOD_DIR))
+endif
+
+include $(MAKE_DIR)/Makefile.config
+include $(MAKE_DIR)/Makefile.rules
diff --git a/bal_release/mk/agent/modules.agent.bal b/bal_release/mk/agent/modules.agent.bal
new file mode 100644
index 0000000..5dca4f6
--- /dev/null
+++ b/bal_release/mk/agent/modules.agent.bal
@@ -0,0 +1,24 @@
+3rdparty/bcm-sdk
+3rdparty/linenoise
+src/common/bal_app_utils
+src/common/cli
+src/common/dev_log
+src/common/include
+3rdparty/maple
+src/common/os_abstraction
+src/common/os_abstraction/os_cli
+src/common/utils
+src/core/main
+src/core/util/mac
+src/core/util/switch
+src/core/util/switch/dpp
+src/core/util/switch/esw
+src/lib/libbalapi
+src/lib/libbalapicli
+src/lib/libobjmsg
+src/lib/libomcisvc
+src/lib/librscmgr
+src/lib/libtopology
+src/lib/libutils
+src/lib/libcmdline
+
diff --git a/bal_release/mk/bin_release.sh b/bal_release/mk/bin_release.sh
new file mode 100755
index 0000000..8bd0294
--- /dev/null
+++ b/bal_release/mk/bin_release.sh
@@ -0,0 +1,94 @@
+#!/bin/bash
+###############################################################################
+#
+#  <:copyright-BRCM:2016:proprietary:standard
+#   
+#     Broadcom Ltd. Proprietary and Confidential.(c) 2016 Broadcom Ltd.
+#     All Rights Reserved
+#   
+#  This program is the proprietary software of Broadcom Ltd. and/or its
+#  licensors, and may only be used, duplicated, modified or distributed pursuant
+#  to the terms and conditions of a separate, written license agreement executed
+#  between you and Broadcom Ltd. (an "Authorized License").  Except as set forth in
+#  an Authorized License, Broadcom Ltd. grants no license (express or implied), right
+#  to use, or waiver of any kind with respect to the Software, and Broadcom Ltd.
+#  expressly reserves all rights in and to the Software and all intellectual
+#  property rights therein.  IF YOU HAVE NO AUTHORIZED LICENSE, THEN YOU HAVE
+#  NO RIGHT TO USE THIS SOFTWARE IN ANY WAY, AND SHOULD IMMEDIATELY NOTIFY
+#  BROADCOM LTD AND DISCONTINUE ALL USE OF THE SOFTWARE.
+#   
+#  Except as expressly set forth in the Authorized License,
+#   
+#  1. This program, including its structure, sequence and organization,
+#      constitutes the valuable trade secrets of Broadcom Ltd., and you shall use
+#      all reasonable efforts to protect the confidentiality thereof, and to
+#      use this information only in connection with your use of Broadcom Ltd.
+#      integrated circuit products.
+#   
+#  2. TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
+#      AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES, REPRESENTATIONS OR
+#      WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH
+#      RESPECT TO THE SOFTWARE.  BROADCOM SPECIFICALLY DISCLAIMS ANY AND
+#      ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY, NONINFRINGEMENT,
+#      FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES, ACCURACY OR
+#      COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR CORRESPONDENCE
+#      TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING OUT OF USE OR
+#      PERFORMANCE OF THE SOFTWARE.
+#   
+#  3. TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM OR
+#      ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL, INCIDENTAL, SPECIAL,
+#      INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER ARISING OUT OF OR IN ANY
+#      WAY RELATING TO YOUR USE OF OR INABILITY TO USE THE SOFTWARE EVEN
+#      IF BROADCOM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES;
+#      OR (ii) ANY AMOUNT IN EXCESS OF THE AMOUNT ACTUALLY PAID FOR THE
+#      SOFTWARE ITSELF OR U.S. $1, WHICHEVER IS GREATER. THESE LIMITATIONS
+#      SHALL APPLY NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY
+#      LIMITED REMEDY.
+#  :>
+#
+###############################################################################
+
+# This script is called from the main Makefile.
+# Prerequisites:
+# 1. BAL standalone or ofpal_of_agent binaries are built.
+# 2. Environment variables defined:
+#    - BUILD_TARGET : bal_of_agent / bal_core
+#    - BIN_RELEASE_FILE_PREFIX  : binary release file prefix
+
+if [[ "$BIN_RELEASE_FILE_PREFIX" == "" ]]; then
+   echo BIN_RELEASE_FILE_PREFIX variable must be set
+   exit -1
+fi
+
+TMP_DIR=/tmp/bal_bin_release/`date +%d_%m_%Y_%H_%M_%S`
+BIN_RELEASE_FILE=$BIN_RELEASE_FILE_PREFIX.tar.gz
+BIN_RELEASE_DIR=$TMP_DIR/$BIN_RELEASE_FILE_PREFIX
+
+mkdir -p $BIN_RELEASE_DIR
+
+if [[ "$BUILD_TARGET" == "core" ]]; then
+    echo Generating BAL Release Archive $BIN_RELEASE_FILE
+    cp build/core/src/core/main/bal_core $BIN_RELEASE_DIR/
+elif [[ "$BUILD_TARGET" == "agent" ]]; then
+    echo Generating OF Agent Release Archive $BIN_RELEASE_FILE
+    cp build/agent/3rdparty/indigo/ofpal_of_agent $BIN_RELEASE_DIR/bcm_sdn_agent
+# The following are relevant only when BUILD_NC_AGENT=y, so they might not exist
+    if test -e build/agent/start_sdn_agent.sh; then cp build/agent/start_sdn_agent.sh $BIN_RELEASE_DIR; fi
+    if test -e build/agent/lib; then cp -ar build/agent/lib $BIN_RELEASE_DIR; fi
+    if test -e build/agent/bin; then cp -ar build/agent/bin $BIN_RELEASE_DIR; fi
+    if test -e build/agent/modules; then cp -ar build/agent/modules $BIN_RELEASE_DIR; fi
+    if test -e /usr/lib/libssl.so.10; then cp -ar /usr/lib/libssl.so.10 $BIN_RELEASE_DIR; fi
+    if test -e /usr/lib/libcrypto.so.10; then cp -ar /usr/lib/libcrypto.so.10 $BIN_RELEASE_DIR; fi
+else
+    echo BUILD_TARGET has unexpected value \"$BUILD_TARGET\". Must be \"core\" or \"agent\"
+    exit -1
+fi
+
+cp scripts/bal_autostart.ini $BIN_RELEASE_DIR/
+cp scripts/bal_config.ini $BIN_RELEASE_DIR/
+cp 3rdparty/bcm-sdk/rc/bal/rpc.soc.template $BIN_RELEASE_DIR
+
+cd $TMP_DIR
+tar -czf $BIN_RELEASE_FILE $BIN_RELEASE_FILE_PREFIX
+echo ./$BIN_RELEASE_FILE created
+
diff --git a/bal_release/mk/boards/wrx/board.config b/bal_release/mk/boards/wrx/board.config
new file mode 100644
index 0000000..9ca4ae0
--- /dev/null
+++ b/bal_release/mk/boards/wrx/board.config
@@ -0,0 +1,49 @@
+# WRX board
+#
+
+export CONFIG_MAC_RPC ?= n
+export CONFIG_SWITCH_RPC ?= n
+
+# Kernel tree and toolchain
+BOARD_DIR       ?= $(TOP_DIR)/../boards/cur/$(BOARD)
+KERNEL_BRCM_VER = 3.0.2-m1.01
+TOOLCHAIN_PATH  ?= /opt/toolchains/maple/toolchains_bin/mipscross/linux/bin
+CROSS_COMPILE   = $(TOOLCHAIN_PATH)/mips64-nlm-linux-
+CROSS_LIB_PATH  = $(TOOLCHAIN_PATH)/../mips64-nlm-linux/lib64
+CONFIGURE_TARGET  = mips64-nlm-linux
+export TOOLCHAIN_PATH
+export CROSS_COMPILE
+export CONFIGURE_TARGET
+
+# In the moment we don't plan to build any kernel modules
+# if/when we do set OD_KERNEL=linux
+export OS_KERNEL= posix
+
+# OS for user space 
+OS              = posix
+
+# The following group is only needed if we decide that do need linux kernel modules
+# In this case OS_KERNEL above must be set =linux and a few additions are needed in the source tree   
+KERNELDIR       = $(BOARD_DIR)/linux/$(KERNEL_BRCM_VER)/linux
+KERNEL_OUTDIR  ?= $(KERNELDIR)
+export KERNELDIR
+export KERNEL_OUTDIR
+KERNEL_ARCH     = mips
+ARCH_FLAGS      += -EB -mabi=64
+LD_ARCH_FLAGS += -melf64btsmip
+HOST_BIG_ENDIAN ?= y
+
+export KERNEL_ARCH
+export ARCH_FLAGS
+
+export KERNEL_TAR_NAME  = wrx_linux-sdk.tar.bz2
+export LIBS_TAR_NAME    = libraries.tar.bz2
+
+
+ifeq ("$(SUBSYSTEM)", "core")
+	# Core-specific stuff
+endif	
+
+ifeq ("$(SUBSYSTEM)", "apps")
+    # Apps-specific stuff
+endif
diff --git a/bal_release/mk/clang.opts b/bal_release/mk/clang.opts
new file mode 100644
index 0000000..1b383ef
--- /dev/null
+++ b/bal_release/mk/clang.opts
@@ -0,0 +1,6 @@
+# CLANG options
+
+# CLANG tool
+export CLANG ?= clang
+export CLANG_OPTS = -Wno-unused-function
+export LLVMVER ?= 3.6
diff --git a/bal_release/mk/config.lnt b/bal_release/mk/config.lnt
new file mode 100644
index 0000000..1540792
--- /dev/null
+++ b/bal_release/mk/config.lnt
@@ -0,0 +1,104 @@
+-i/tools/arm/DS-5_5.18.0/Linux-64/include 
+-wlib(0) // no complaints for libs 
+-b 
+-u 
+-v 
+-A(C99)
+-cgnu
+-d__GNUC__
+-d__FUNCTION__="FUNC"
+-fhs
++dBCMOS_TRUE=((bcmos_bool)1)
++dBCMOS_FALSE=((bcmos_bool)0)
+-strong(AzcXJzc)
+-strong(AXJb,bcmos_bool)
+-strong(, uint64_t)
+-strong(, uint32_t)
+-strong(, uint16_t)
+-strong(, uint8_t)
+-strong(, int64_t)
+-strong(, int32_t)
+-strong(, int16_t)
+-strong(, int8_t)
+-strong(, ULONG)
+-strong(, size_t)
+-sem( bcmos_fastlock_lock, thread_lock )
+-sem( bcmos_fastlock_unlock, thread_unlock )
+-sem( bcmos_sem_wait, thread_lock )
+-sem( bcmos_sem_post, thread_unlock )
+-sem( bcmos_mutex_lock, thread_lock )
+-sem( bcmos_mutex_unlock, thread_unlock )
+-function( free, bcmos_blk_pool_free )
+-function( malloc(0), bcmos_blk_pool_alloc(0) )
+-function( calloc(0), bcmos_blk_pool_calloc(0) )
+-function( malloc(0), bcmos_byte_pool_alloc(0) )
+-function( malloc(1), bcmos_byte_pool_alloc(2) )
+-function( free, bcmos_byte_pool_free )
+-function( malloc(r), bcmos_blk_pool_alloc(r) )
+-function( calloc(r), bcmos_blk_pool_calloc(r) )
+-function( malloc(r), bcmos_byte_pool_alloc(r) )
+-function( malloc, bcmos_alloc )
+-function( calloc, bcmos_calloc )
+-function( free, bcmos_free )
+-function( malloc(0), bcmdb_set_lock_read(0) )
+-function( free(0), bcmdb_set_unlock_read(0) )
+-function( malloc(0), bcmdb_set_lock_modify(0) )
+-function( free(0), bcmdb_set_unlock_modify(0) )
+-function( malloc(0), bcmdb_record_getraw_read(0) )
+-function( free(0), bcmdb_record_unlock_read(0) )
+-function( malloc(0), bcmdb_record_getraw_write(0) )
+-function( free(0), bcmdb_record_unlock_write(0) )
+-e*
++e64
++e408 
++e413 
++e414 
++e415 
++e416 
++e419 
++e420 
++e423 
++e424 
++e428 
++e429 
++e433 
++e438 
++e449 
++e454 
++e455 
++e530 
++e547 
++e549 
++e587 
++e588 
++e589 
++e590 
++e603 
++e604 
++e632 
++e633 
++e634 
++e635 
++e636 
++e637 
++e638 
++e639 
++e640 
++e644 
++e652 
++e674 
++e684 
++e685 
++e727 
++e733 
++e789 
++e810 
++e957
+
++doffsetof(__typ,__id)=((size_t)&(((__typ*)0)->__id))
++d__attribute__(...)=
+
+// this is repeated because each invocation doubles the size of macro storage
++macros +macros +macros +macros
++macros +macros +macros +macros
+-passes(2)
diff --git a/bal_release/mk/core/Makefile.core.config b/bal_release/mk/core/Makefile.core.config
new file mode 100644
index 0000000..8ac4117
--- /dev/null
+++ b/bal_release/mk/core/Makefile.core.config
@@ -0,0 +1,19 @@
+# BAL core configuration
+#
+# Set environment, extra flags, etc.
+# In particular, set CROSS_COMPILE
+# For linux environment make sure to set also OS_KERNEL=linux, KERNELDIR, KERNEL_OUTDIR and KERNEL_ARCH
+ifneq ("$(BOARD)", "")
+    include mk/boards/$(BOARD)/board.config
+	-include mk/boards/$(BOARD)/$(TOOLCHAIN).opts
+endif
+
+include mk/$(TOOLCHAIN).opts
+
+export KERNELDIR
+export KERNEL_OUTDIR
+export KERNEL_ARCH
+export OS_KERNEL
+
+BUILD_OF_AGENT := n
+BUILD_NC_AGENT := n
diff --git a/bal_release/mk/core/Makefile.core.rules b/bal_release/mk/core/Makefile.core.rules
new file mode 100644
index 0000000..c00678b
--- /dev/null
+++ b/bal_release/mk/core/Makefile.core.rules
@@ -0,0 +1,7 @@
+# BAL core-specific rules
+#
+# Platform/board-specific rules
+# In particular, set BOARD_ENV_RULE if there is anything board-specific to be done
+ifneq ("$(BOARD)", "")
+    -include mk/boards/$(BOARD)/board.rules
+endif
diff --git a/bal_release/mk/core/modules.core.bal b/bal_release/mk/core/modules.core.bal
new file mode 100644
index 0000000..44b64c3
--- /dev/null
+++ b/bal_release/mk/core/modules.core.bal
@@ -0,0 +1,23 @@
+3rdparty/bcm-sdk
+3rdparty/linenoise
+src/common/bal_app_utils
+src/common/cli
+src/common/dev_log
+src/common/include
+3rdparty/maple
+src/common/os_abstraction
+src/common/os_abstraction/os_cli
+src/common/utils
+src/core/main
+src/core/util/mac
+src/core/util/switch
+src/core/util/switch/dpp
+src/core/util/switch/esw
+src/lib/libbalapi
+src/lib/libbalapicli
+src/lib/libobjmsg
+src/lib/librscmgr
+src/lib/libtopology
+src/lib/libutils
+src/lib/libcmdline
+src/apps/bal_cli
diff --git a/bal_release/mk/create_artifacts.sh b/bal_release/mk/create_artifacts.sh
new file mode 100755
index 0000000..193f1dc
--- /dev/null
+++ b/bal_release/mk/create_artifacts.sh
@@ -0,0 +1,100 @@
+#!/bin/bash
+#set -x
+
+# Copy config script. Look in the BAL directory first. If not found, take from the scripts
+function copy_config_script {
+	if test -n "$2"; then
+		template_dir=$2
+	else
+		template_dir=$bal_dir/scripts
+	fi
+	if [ -f $bal_dir/$1 ]; then
+	   cp -a $bal_dir/$1 $target_dir/
+	else
+	   cp -a $template_dir/$1 $target_dir/
+	fi
+}
+
+bal_dir=`pwd`
+
+# Copy and strip bcm_sdn_agent
+if [ "$BUILD_OF_AGENT" = "y" ]; then
+	target_dir=bcm_sdn_agent_artifacts
+	target_exec=bcm_sdn_agent
+	target_name=bcm_sdn_agent
+	build_dir=build/agent
+else
+	target_dir=bcm_bal_artifacts
+	target_name=bal_cli
+	target_exec=src/apps/bal_cli/bal_cli
+	build_dir=build/core
+fi
+
+cd $build_dir
+echo "Creating $target_name build artifacts in `pwd`/$target_dir"
+rm -fr $target_dir
+mkdir -p $target_dir
+
+echo "Stripping $target_name and extracting debug symbols"
+${CROSS_COMPILE}objcopy --strip-debug --strip-unneeded $target_exec $target_dir/$target_name
+${CROSS_COMPILE}objcopy --only-keep-debug $target_exec $target_name.debug
+${CROSS_COMPILE}objcopy --add-gnu-debuglink=$target_name.debug $target_dir/$target_name
+echo "Stripping complete"
+
+if [ "$JENKINS_BUILD" == "y" ]; then
+	cp $bal_dir/../../../build_info.log build_info.log
+	tar -czf $target_name.debug.tar.gz $target_name.debug build_info.log
+	rm build_info.log
+else
+	tar -czf $target_name.debug.tar.gz $target_name.debug
+fi
+
+# Copy init scripts. Look in the BAL directory first. If not found, take from the scripts
+copy_config_script bal_config.ini
+copy_config_script bal_autostart.ini
+copy_config_script bal_topology.ini
+# Rename the bal_topology.ini file to avoid bringup issues
+mv $target_dir/bal_topology.ini $target_dir/bal_topology.ini.sample
+copy_config_script rpc.soc.template $bal_dir/3rdparty/bcm-sdk/rc/bal
+cp -ar ../../3rdparty/bcm-sdk/rc $target_dir/switch_rc
+rm -fr $target_dir/switch_rc/arad $target_dir/switch_rc/kt2
+
+if [ "$BUILD_NC_AGENT" = "y" ]; then
+    cp -ar lib $target_dir/
+    # for SDN-PAL running on x86, copy the libssl and libcrypto
+    if [ "$BOARD" = "" ]; then
+        echo "Copying libcrypto and libssl for x86 target"
+        cp /usr/lib/libssl.so.10 /usr/lib/libcrypto.so.10 $target_dir/lib/
+    fi
+    cp -ar modules $target_dir/
+    cp -a start_sdn_agent.sh $target_dir/
+    cp -a start_netopeer_cli.sh $target_dir/
+    cp -a bin/netopeer-cli $target_dir/
+fi
+
+if [ "$BOARD" = "wrx" ]; then
+    echo "Copying SVK4 specific scripts and files"
+    copy_config_script bal_setup_svk4.sh
+    echo 'if [ "${PWD}" != "/broadcom" ]; then echo "ERROR: Your archive file must be expanded into /broadcom before running this script"; else if [ -d /etc/rcS.d ]; then echo "Installing bal startup script in /etc/rcS.d" && pushd /etc/rcS.d >/dev/null && rm -f S99balsetup && ln -s /broadcom/bal_setup_svk4.sh S99balsetup && popd >/dev/null && echo "Installing svk4 scripts" && cp -f switch_rc/svk4/* . && touch /etc/svk4 && cat bal_config.ini | sed s/"of_devs=1"/"of_devs=2"/g > bal_config.ini.svk4_devs && cat bal_config.ini.svk4_devs | sed s/"num_nni_ports=1"/"num_nni_ports=6"/g > bal_config.ini.svk4_devs_nni && cat bal_config.ini.svk4_devs_nni | sed s/"maptable=3"/"maptable=4"/g > bal_config.ini && rm -f bal_config.ini.svk4_devs && rm -f bal_config.ini.svk4_devs_nni; fi; fi' > svk4_install.sh
+    chmod 755 svk4_install.sh
+    cp svk4_install.sh $target_dir
+    echo "Please run svk4_install.sh (only on SVK4 hardware!)" > README.svk4
+    cp ../../3rdparty/maple/sdk/build/fs/svk_init_startup.sh $target_dir/
+    if [ "$JENKINS_BUILD" == "y" ]; then
+        cp ../../3rdparty/bcm-sdk/build-wrx/sdk-all-*/build/projects/xPON_OLT/jenkins/jobs/Bal.Synced.bcm-sdk-*.Wrx/workspace/bal/cur/3rdparty/bcm-sdk/linux-*-bde.ko $target_dir/
+    fi
+    cp README.svk4 $target_dir/ && rm README.svk4
+fi
+
+if [ "$JENKINS_BUILD" == "y" ]; then
+    echo "Including build_info.log in the archive"
+    cp $bal_dir/../../../build_info.log $target_dir/
+fi
+
+archive=$target_dir.tar.gz
+echo "Archiving artifacts in `pwd`/$archive"
+tar -czf $archive $target_dir
+echo "Archive contains:"
+tar tzvf $archive
+
+
diff --git a/bal_release/mk/gcc.opts b/bal_release/mk/gcc.opts
new file mode 100644
index 0000000..ccdcf32
--- /dev/null
+++ b/bal_release/mk/gcc.opts
@@ -0,0 +1,56 @@
+EXTRA_CFLAGS    += -Wall -Werror
+ARFLAGS = r
+
+BLD_CC_HOST = $(CCACHE) gcc
+BLD_CC = $(CCACHE) $(CROSS_COMPILE)gcc
+BLD_AS = $(CCACHE) $(CROSS_COMPILE)gcc
+BLD_AR = $(CROSS_COMPILE)ar
+BLD_DEP = $(BLD_CC)
+
+# Maple SDK requires C99
+CFLAGS    += -std=c99
+ifeq ("$(ENABLE_EXTRA_WARNINGS)", "y")
+    CFLAGS    += -Wextra -Wbad-function-cast -Wcast-align -Wcast-qual -Wchar-subscripts
+    CFLAGS    += -Wmissing-prototypes -Wnested-externs -Wpointer-arith -Wredundant-decls
+    CFLAGS    += -Wstrict-prototypes -Wparentheses -Wswitch -Wswitch-default -Wunused -Wuninitialized -Wunused-but-set-variable
+    CFLAGS    += -Wno-unused-parameter -Wno-missing-field-initializers -Wno-sign-compare
+    CFLAGS    += -Wshadow -Wno-inline
+endif
+
+BUILD_DEPS_IN_CC    ?= y
+export BUILD_DEPS_IN_CC
+
+ifeq ("$(BUILD_DEPS_IN_CC)", "y")
+    CFLAGS += -MMD -MP
+endif
+
+ifeq ("$(CROSS_COMPILE)", "")
+    ARCH_FLAGS += -m32 -march=i386
+    LD_ARCH_FLAGS += -m elf_i386 --oformat=elf32-i386
+    SIMULATION_BUILD ?= y
+    export SIMULATION_BUILD
+    GCCVER ?= 4.8.1
+    export GCCVER
+    # Temporary, until bad cast in bcm_dev_log_task.c is fixed (SWMAPLE-2123)
+    CFLAGS += -Wno-strict-aliasing
+    CONFIGURE_TARGET ?= i586-linux-gnu
+endif
+
+ifeq ("$(EXPORT_DYNAMIC_SYMBOLS)", "y")
+    ARCH_FLAGS += -Wl,-export-dynamic
+endif
+
+ifneq ("$(SIMULATION_BUILD)", "y")
+    EXTRA_CFLAGS    += -Wframe-larger-than=16384
+endif
+
+LIBS_MARKER =-l
+LIBS_PATH_MARKER =-L
+LIBS_START_MARKER = -Wl,--start-group
+LIBS_END_MARKER = -Wl,--end-group
+
+# Debug and release optimization options. Can be overwritten in Makefile.config.$(PLATFORM)
+DEBUG_O_CFLAGS      ?= -g -gdwarf-3 -O0
+DEBUG_O_LFLAGS      ?= -g
+RELEASE_O_CFLAGS    ?= -g -gdwarf-3 -O0
+RELEASE_O_LFLAGS    ?= -g
diff --git a/bal_release/mk/lint.sh b/bal_release/mk/lint.sh
new file mode 100755
index 0000000..9b89478
--- /dev/null
+++ b/bal_release/mk/lint.sh
@@ -0,0 +1,59 @@
+#!/bin/bash
+###############################################################################
+#
+#  <:copyright-BRCM:2016:proprietary:standard
+#   
+#     Broadcom Ltd. Proprietary and Confidential.(c) 2016 Broadcom Ltd.
+#     All Rights Reserved
+#   
+#  This program is the proprietary software of Broadcom Ltd. and/or its
+#  licensors, and may only be used, duplicated, modified or distributed pursuant
+#  to the terms and conditions of a separate, written license agreement executed
+#  between you and Broadcom Ltd. (an "Authorized License").  Except as set forth in
+#  an Authorized License, Broadcom Ltd. grants no license (express or implied), right
+#  to use, or waiver of any kind with respect to the Software, and Broadcom Ltd.
+#  expressly reserves all rights in and to the Software and all intellectual
+#  property rights therein.  IF YOU HAVE NO AUTHORIZED LICENSE, THEN YOU HAVE
+#  NO RIGHT TO USE THIS SOFTWARE IN ANY WAY, AND SHOULD IMMEDIATELY NOTIFY
+#  BROADCOM LTD AND DISCONTINUE ALL USE OF THE SOFTWARE.
+#   
+#  Except as expressly set forth in the Authorized License,
+#   
+#  1. This program, including its structure, sequence and organization,
+#      constitutes the valuable trade secrets of Broadcom Ltd., and you shall use
+#      all reasonable efforts to protect the confidentiality thereof, and to
+#      use this information only in connection with your use of Broadcom Ltd.
+#      integrated circuit products.
+#   
+#  2. TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
+#      AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES, REPRESENTATIONS OR
+#      WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH
+#      RESPECT TO THE SOFTWARE.  BROADCOM SPECIFICALLY DISCLAIMS ANY AND
+#      ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY, NONINFRINGEMENT,
+#      FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES, ACCURACY OR
+#      COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR CORRESPONDENCE
+#      TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING OUT OF USE OR
+#      PERFORMANCE OF THE SOFTWARE.
+#   
+#  3. TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM OR
+#      ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL, INCIDENTAL, SPECIAL,
+#      INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER ARISING OUT OF OR IN ANY
+#      WAY RELATING TO YOUR USE OF OR INABILITY TO USE THE SOFTWARE EVEN
+#      IF BROADCOM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES;
+#      OR (ii) ANY AMOUNT IN EXCESS OF THE AMOUNT ACTUALLY PAID FOR THE
+#      SOFTWARE ITSELF OR U.S. $1, WHICHEVER IS GREATER. THESE LIMITATIONS
+#      SHALL APPLY NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY
+#      LIMITED REMEDY.
+#  :>
+#
+###############################################################################
+LINT=/projects/xpon_co_lint/bin/flint
+if [ -e $LINT ]; then 
+if [ -w "${@: -1}" ]; then 
+	$LINT $*
+else
+	echo "Skipping non-writable file ${@: -1}"
+fi
+else
+	echo "ERROR: lint executable $LINT doesn't exist"
+fi
diff --git a/bal_release/mk/src_release.sh b/bal_release/mk/src_release.sh
new file mode 100755
index 0000000..0db73d8
--- /dev/null
+++ b/bal_release/mk/src_release.sh
@@ -0,0 +1,296 @@
+#!/bin/bash
+###############################################################################
+#
+#  <:copyright-BRCM:2016:proprietary:standard
+#
+#     Broadcom Ltd. Proprietary and Confidential.(c) 2016 Broadcom Ltd.
+#     All Rights Reserved
+#
+#  This program is the proprietary software of Broadcom Ltd. and/or its
+#  licensors, and may only be used, duplicated, modified or distributed pursuant
+#  to the terms and conditions of a separate, written license agreement executed
+#  between you and Broadcom Ltd. (an "Authorized License").  Except as set forth in
+#  an Authorized License, Broadcom Ltd. grants no license (express or implied), right
+#  to use, or waiver of any kind with respect to the Software, and Broadcom Ltd.
+#  expressly reserves all rights in and to the Software and all intellectual
+#  property rights therein.  IF YOU HAVE NO AUTHORIZED LICENSE, THEN YOU HAVE
+#  NO RIGHT TO USE THIS SOFTWARE IN ANY WAY, AND SHOULD IMMEDIATELY NOTIFY
+#  BROADCOM LTD AND DISCONTINUE ALL USE OF THE SOFTWARE.
+#
+#  Except as expressly set forth in the Authorized License,
+#
+#  1. This program, including its structure, sequence and organization,
+#      constitutes the valuable trade secrets of Broadcom Ltd., and you shall use
+#      all reasonable efforts to protect the confidentiality thereof, and to
+#      use this information only in connection with your use of Broadcom Ltd.
+#      integrated circuit products.
+#
+#  2. TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
+#      AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES, REPRESENTATIONS OR
+#      WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH
+#      RESPECT TO THE SOFTWARE.  BROADCOM SPECIFICALLY DISCLAIMS ANY AND
+#      ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY, NONINFRINGEMENT,
+#      FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES, ACCURACY OR
+#      COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR CORRESPONDENCE
+#      TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING OUT OF USE OR
+#      PERFORMANCE OF THE SOFTWARE.
+#
+#  3. TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM OR
+#      ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL, INCIDENTAL, SPECIAL,
+#      INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER ARISING OUT OF OR IN ANY
+#      WAY RELATING TO YOUR USE OF OR INABILITY TO USE THE SOFTWARE EVEN
+#      IF BROADCOM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES;
+#      OR (ii) ANY AMOUNT IN EXCESS OF THE AMOUNT ACTUALLY PAID FOR THE
+#      SOFTWARE ITSELF OR U.S. $1, WHICHEVER IS GREATER. THESE LIMITATIONS
+#      SHALL APPLY NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY
+#      LIMITED REMEDY.
+#  :>
+#
+###############################################################################
+
+# This script is called from the main Makefile.
+# Prerequisites:
+# 1. BAL standalone or ofpal_of_agent binaries are built.
+# 2. Environment variables defined:
+#    - SRC_RELEASE_FILE_PREFIX : source release file prefix (string)
+#    - INCLUDE_MAPLE_SDK_RELEASE : include maple SDK release (if set, then Maple SDK release is included, and its zip actually contains BAL's code, without OMCI and SDN-PAL).
+
+if [[ "$SRC_RELEASE_FILE_PREFIX" == "" ]]; then
+   echo SRC_RELEASE_FILE_PREFIX variable must be set
+   exit -1
+fi
+
+TMP_DIR=/tmp/bal_src_release/`date +%d_%m_%Y_%H_%M_%S`
+
+BAL_RELEASE_PREFIX=bal.$SRC_RELEASE_FILE_PREFIX
+SDN_PAL_RELEASE_PREFIX=sdn_pal.$SRC_RELEASE_FILE_PREFIX
+OMCI_RELEASE_PREFIX=omci.$SRC_RELEASE_FILE_PREFIX
+
+BAL_RELEASE_DIR=$TMP_DIR/bal/$SRC_RELEASE_FILE_PREFIX
+SDN_PAL_RELEASE_DIR=$TMP_DIR/sdn_pal/$SRC_RELEASE_FILE_PREFIX
+OMCI_RELEASE_DIR=$TMP_DIR/omci/$SRC_RELEASE_FILE_PREFIX
+
+BAL_SRC_RELEASE_FILE=$BAL_RELEASE_PREFIX.tar.gz
+SDN_PAL_SRC_RELEASE_FILE=$SDN_PAL_RELEASE_PREFIX.tar.gz
+OMCI_SRC_RELEASE_FILE=$OMCI_RELEASE_PREFIX.tar.gz
+
+CP="cp -R --parents"
+
+if [ -d build/core ]; then
+    SUBSYSTEM=core
+elif [ -d build/agent ]; then
+    SUBSYSTEM=agent
+else
+   echo Neither build/core nor build/agent subdirectories exist
+   exit -1
+fi
+
+if [ ! -f build/$SUBSYSTEM/src/common/include/bal_model_ids.h ]; then
+    echo Generated BAL header files are missing. Build BAL first
+    exit -1
+fi
+
+if [ ! -f build/$SUBSYSTEM/src/lib/libomcisvc/omci_model_ids.h ]; then
+    echo Generated OMCI SVC header files are missing. Build OMCI SVC first
+    exit -1
+fi
+
+mkdir -p $BAL_RELEASE_DIR
+mkdir -p $SDN_PAL_RELEASE_DIR
+mkdir -p $OMCI_RELEASE_DIR
+
+# Copy auto-generated files first, as we will need to do "make clean" afterwards (because some 3rdparty libraries have binaries in the source directories and we need to clean those).
+# 1. BAL
+mkdir -p $BAL_RELEASE_DIR/src/common/include
+cp \
+    build/$SUBSYSTEM/src/common/include/bal_model_ids.h \
+    build/$SUBSYSTEM/src/common/include/bal_model_types.h \
+    $BAL_RELEASE_DIR/src/common/include
+
+mkdir -p $BAL_RELEASE_DIR/src/lib/libobjmsg
+cp  \
+    build/$SUBSYSTEM/src/lib/libobjmsg/bal_model_funcs.c \
+    build/$SUBSYSTEM/src/lib/libobjmsg/bal_obj_msg_pack_unpack.c \
+    build/$SUBSYSTEM/src/lib/libobjmsg/bal_model_funcs.h \
+    build/$SUBSYSTEM/src/lib/libobjmsg/bal_obj_msg_pack_unpack.h \
+    $BAL_RELEASE_DIR/src/lib/libobjmsg
+
+mkdir -p $BAL_RELEASE_DIR/src/lib/libbalapicli
+cp \
+    build/$SUBSYSTEM/src/lib/libbalapicli/bal_api_cli_helpers.h \
+    build/$SUBSYSTEM/src/lib/libbalapicli/bal_api_cli_helpers.c \
+    build/$SUBSYSTEM/src/lib/libbalapicli/bal_api_cli_handlers.c \
+    $BAL_RELEASE_DIR/src/lib/libbalapicli
+
+# 2. OMCI
+# Copy auto-generated files to the sources directory
+mkdir -p $OMCI_RELEASE_DIR/src/lib/libomcisvc
+cp \
+    build/$SUBSYSTEM/src/lib/libomcisvc/omci_model_ids.h \
+    build/$SUBSYSTEM/src/lib/libomcisvc/omci_model_types.h \
+    build/$SUBSYSTEM/src/lib/libomcisvc/omci_model_funcs.h \
+    build/$SUBSYSTEM/src/lib/libomcisvc/omci_model_funcs.c \
+    build/$SUBSYSTEM/src/lib/libomcisvc/omci_cli_handlers.c \
+    build/$SUBSYSTEM/src/lib/libomcisvc/omci_cli_helpers.h \
+    build/$SUBSYSTEM/src/lib/libomcisvc/omci_cli_helpers.c \
+    $OMCI_RELEASE_DIR/src/lib/libomcisvc
+
+# Clean
+make clean
+make clean BUILD_NC_AGENT=y
+
+# Now recreate the subsystem directory (wiped out by the make clean), because the archive artifacts from the build will go there
+mkdir -p build/$SUBSYSTEM
+
+# Now main copy
+
+# 1. BAL
+
+# Copy only relevant sources.
+for file in `find mk -maxdepth 1 -type f`; do cp -L --parents $file $BAL_RELEASE_DIR; done
+$CP 3rdparty/bcm-sdk/make $BAL_RELEASE_DIR/
+$CP 3rdparty/bcm-sdk/Makefile $BAL_RELEASE_DIR/
+$CP 3rdparty/bcm-sdk/Makefile.sdk $BAL_RELEASE_DIR/
+$CP 3rdparty/bcm-sdk/make_ing_dir.sh $BAL_RELEASE_DIR/
+$CP 3rdparty/bcm-sdk/rc $BAL_RELEASE_DIR/
+$CP 3rdparty/bcm-sdk/*.patch $BAL_RELEASE_DIR/
+$CP 3rdparty/bcm-sdk/sh $BAL_RELEASE_DIR/
+$CP 3rdparty/linenoise $BAL_RELEASE_DIR/
+$CP 3rdparty/maple/Makefile $BAL_RELEASE_DIR/
+$CP branch.info $BAL_RELEASE_DIR/
+chmod +w $BAL_RELEASE_DIR/branch.info
+echo PERFORCE_REVISION=$BUILD_PERFORCE_REVISION >> $BAL_RELEASE_DIR/branch.info
+$CP COPYRIGHT $BAL_RELEASE_DIR/
+$CP doxygen $BAL_RELEASE_DIR/
+$CP Makefile $BAL_RELEASE_DIR/
+$CP README* $BAL_RELEASE_DIR/
+$CP mk/boards $BAL_RELEASE_DIR/
+$CP mk/core/Makefile* $BAL_RELEASE_DIR/
+$CP mk/core/modules.core.bal $BAL_RELEASE_DIR/
+$CP mk/agent/modules.agent.bal $BAL_RELEASE_DIR/
+$CP scripts $BAL_RELEASE_DIR/
+$CP src/common $BAL_RELEASE_DIR/
+$CP src/core $BAL_RELEASE_DIR/
+$CP src/apps/bal_cli $BAL_RELEASE_DIR/
+$CP src/datamodel/bal.objset $BAL_RELEASE_DIR/
+$CP src/lib/common $BAL_RELEASE_DIR/
+$CP src/lib/libbalapi $BAL_RELEASE_DIR/
+$CP src/lib/libbalapicli $BAL_RELEASE_DIR/
+$CP src/lib/libobjmsg $BAL_RELEASE_DIR/
+$CP src/lib/librscmgr $BAL_RELEASE_DIR/
+$CP src/lib/libtopology $BAL_RELEASE_DIR/
+$CP src/lib/libutils $BAL_RELEASE_DIR/
+$CP src/lib/libcmdline $BAL_RELEASE_DIR/
+$CP tools $BAL_RELEASE_DIR/
+
+# The following file will indicate a release build
+touch $BAL_RELEASE_DIR/.release_build
+
+# Add write permission to all the copied files
+find $BAL_RELEASE_DIR -type f | xargs -d '\n' chmod +w
+
+# Remove codegen_templates and .ccache
+find $BAL_RELEASE_DIR -name codegen_templates | xargs rm -rf
+find $BAL_RELEASE_DIR -name .ccache | xargs rm -rf
+
+cd $BAL_RELEASE_DIR/..
+tar -czf $BAL_SRC_RELEASE_FILE $SRC_RELEASE_FILE_PREFIX
+cd - > /dev/null
+mv $TMP_DIR/bal/$BAL_SRC_RELEASE_FILE .
+echo ./$BAL_SRC_RELEASE_FILE created
+
+# 2. SDN-PAL
+
+# Copy only relevant sources.
+for file in `find mk -maxdepth 1 -type f`; do cp --parents $file $SDN_PAL_RELEASE_DIR; done
+$CP 3rdparty/loci $SDN_PAL_RELEASE_DIR/
+$CP 3rdparty/libxml2 $SDN_PAL_RELEASE_DIR/
+$CP 3rdparty/libxslt $SDN_PAL_RELEASE_DIR/
+$CP 3rdparty/libgpg-error $SDN_PAL_RELEASE_DIR/
+$CP 3rdparty/libgcrypt $SDN_PAL_RELEASE_DIR/
+$CP 3rdparty/libssh $SDN_PAL_RELEASE_DIR/
+$CP 3rdparty/libcurl $SDN_PAL_RELEASE_DIR/
+$CP 3rdparty/libnetconf $SDN_PAL_RELEASE_DIR/
+$CP 3rdparty/indigo $SDN_PAL_RELEASE_DIR/
+$CP 3rdparty/openyuma $SDN_PAL_RELEASE_DIR/
+$CP 3rdparty/yang/BBF $SDN_PAL_RELEASE_DIR/
+$CP 3rdparty/yang/IANA $SDN_PAL_RELEASE_DIR/
+$CP 3rdparty/yang/IETF $SDN_PAL_RELEASE_DIR/
+$CP 3rdparty/pyang $SDN_PAL_RELEASE_DIR/
+$CP 3rdparty/netopeer $SDN_PAL_RELEASE_DIR/
+$CP mk/agent/Makefile* $SDN_PAL_RELEASE_DIR/
+$CP mk/agent/modules.agent.sdn_pal $SDN_PAL_RELEASE_DIR/
+$CP src/agent $SDN_PAL_RELEASE_DIR/
+$CP src/netconf $SDN_PAL_RELEASE_DIR/
+$CP src/ofpal $SDN_PAL_RELEASE_DIR/
+
+# Add write permission to all the copied files
+find $SDN_PAL_RELEASE_DIR -type f | xargs -d '\n' chmod +w
+
+# Remove .ccache
+find $SDN_PAL_RELEASE_DIR -name .ccache | xargs rm -rf
+
+cd $SDN_PAL_RELEASE_DIR/..
+tar -czf $SDN_PAL_SRC_RELEASE_FILE $SRC_RELEASE_FILE_PREFIX
+cd - > /dev/null
+mv $TMP_DIR/sdn_pal/$SDN_PAL_SRC_RELEASE_FILE .
+echo ./$SDN_PAL_SRC_RELEASE_FILE created
+
+# 3. OMCI
+
+# Copy only relevant sources.
+$CP mk/core/modules.core.omci $OMCI_RELEASE_DIR/
+$CP mk/agent/modules.agent.omci $OMCI_RELEASE_DIR/
+$CP src/datamodel/omci* $OMCI_RELEASE_DIR/
+$CP src/lib/libomcistack $OMCI_RELEASE_DIR/
+$CP src/lib/libomcisvc $OMCI_RELEASE_DIR/
+
+# Remove OCS OMCI stack from modules.*.omci
+sed -i '/3rdparty\/ocs_omci/d' $OMCI_RELEASE_DIR/mk/core/modules.core.omci
+sed -i '/3rdparty\/ocs_omci/d' $OMCI_RELEASE_DIR/mk/agent/modules.agent.omci
+
+# Add write permission to all the copied files
+find $OMCI_RELEASE_DIR -type f | xargs -d '\n' chmod +w
+
+# Remove codegen_templates and .ccache
+find $OMCI_RELEASE_DIR -name codegen_templates | xargs rm -rf
+find $OMCI_RELEASE_DIR -name .ccache | xargs rm -rf
+
+# Add a flag to OMCI SVC's Makefile, so that when OMCI package is extracted, builds will include real OMCI SVC, not stubs.
+echo "USE_BCM_OMCI_SVC_IN_RELEASE=y" >> $OMCI_RELEASE_DIR/src/lib/libomcisvc/Makefile.config.omci
+
+cd $OMCI_RELEASE_DIR/..
+tar -czf $OMCI_SRC_RELEASE_FILE $SRC_RELEASE_FILE_PREFIX
+cd - > /dev/null
+mv $TMP_DIR/omci/$OMCI_SRC_RELEASE_FILE .
+echo ./$OMCI_SRC_RELEASE_FILE created
+
+# If INCLUDE_MAPLE_SDK_RELEASE is defined, then we create a maple release that will wrap the BAL release.
+if [[ "$INCLUDE_MAPLE_SDK_RELEASE" != "" ]]; then
+    OLD_DIR=`pwd`
+    BAL_MAPLE_RELEASE_DIR=$TMP_DIR/bal_maple_release
+    ./3rdparty/maple/cur/scripts/rel_delivery.sh $MAPLE_REL_DELIVERY_PREFIX
+    BCM68620_ZIP_FILE=`ls ./3rdparty/maple/cur/SW-BCM68620*.zip`
+    mkdir -p $BAL_MAPLE_RELEASE_DIR/bcm68620_release
+    unzip $BCM68620_ZIP_FILE -d $BAL_MAPLE_RELEASE_DIR/bcm68620_release
+    
+    cd $BAL_MAPLE_RELEASE_DIR
+    ln -s bcm68620_release/release/docs docs
+
+    mkdir -p bal_release
+    cd $BAL_RELEASE_DIR
+    $CP . $BAL_MAPLE_RELEASE_DIR/bal_release/
+    cd $BAL_MAPLE_RELEASE_DIR/bal_release/3rdparty/maple
+    ln -s ../../../bcm68620_release cur
+
+    cd $BAL_MAPLE_RELEASE_DIR
+    zip -y -r `basename $BCM68620_ZIP_FILE` ./*
+    cd $OLD_DIR
+    mv $BAL_MAPLE_RELEASE_DIR/`basename $BCM68620_ZIP_FILE` .
+    echo `basename ./$BCM68620_ZIP_FILE` created
+fi
+
+echo Instructions of how to extract and compile source release packages exist in `ls README*` files
+
+rm -rf $TMP_DIR
+
diff --git a/bal_release/scripts/bal_autostart.ini b/bal_release/scripts/bal_autostart.ini
new file mode 100644
index 0000000..129eb49
--- /dev/null
+++ b/bal_release/scripts/bal_autostart.ini
@@ -0,0 +1,117 @@
+# ========================================================================
+#
+# This is a sample bal_autostart.ini file.  If used, it must reside in 
+# the same directory as the bcm_sdn_agent executable.  
+#
+# Examples for EPON ,GPON, XGPON1, and XGSPON systems are given below.  You cannot mix
+# EPON / GPON / XGPON1 / XGSPON entries in this file.  Systems are assumed to be either
+# EPON or GPON or XGPON1 or XGSPON (as determined by the entry for topology.pon_mode in
+# the bal_config.ini file).  NGPON2 systems are not supported by the autostart feature
+# or BAL code at this time.
+#
+# ========================================================================
+# This is a sample autostart script for a MAPLE EPON system, 
+# where ONUs are identified by their MAC address
+#
+# NOTE: This script is only useable on an SDN version
+# of BAL, that is, with the bcm_sdn_agent.  
+#
+# On startup, the bcm_sdn_agent code reads this autostart file,
+# then:
+# - brings up the access-terminal
+# - brings up each interface specified in the entry list
+# - brings up a subscriber-terminal for each ONU entry
+#
+# ONU IDs can overlap on different PON interfaces
+#
+# Entry format for an EPON system is:
+# onu=ONU ID, int=PON INTERFACE ID, mac=MAC ADDRESS OF THE ONU
+# e.g.
+# onu=3, int=2, mac=00:33:23:33:33:98
+# ========================================================================
+# 
+# Uncomment-out entries below and modify them for your EPON system
+#
+#onu=1, int=0, mac=00:10:18:ad:69:d0
+#onu=6, int=0, mac=00:10:18:ad:63:38
+#onu=3, int=2, mac=00:10:18:ad:66:74
+#onu=12, int=0, mac=00:10:18:ad:29:32
+#onu=3, int=1, mac=00:10:18:ad:59:22
+#onu=3, int=0, mac=00:10:18:ad:68:44
+
+
+
+# ========================================================================
+# This is a sample autostart script for a MAPLE GPON system, 
+# where ONUs are identified by their password and serial number
+#
+# NOTE: This script is only useable on an SDN version
+# of BAL, that is, with the bcm_sdn_agent  
+#
+# On startup, the bcm_sdn_agent code reads this autostart file,
+# then:
+# - brings up the access-terminal
+# - brings up each interface specified in the entry list
+# - brings up a subscriber-terminal for each ONU entry
+#
+# ONU IDs can overlap on different PON interfaces
+#
+# Entry format for an GPON system is:
+# onu=ONU ID, int=PON INTERFACE ID, vend=VENDOR ID, pass=PASSWORD
+# e.g.
+# onu=3, int=2, vend=VENDOR ID FROM ONU LABEL, pass=ONU PASSWORD
+#
+# NOTE: If bcm_sdn_agent is started in autonoumous ONU activation mode (-O or --auto_activate command line option),
+# vend and pass parameters should be set as 0. In this case, the system does not bring the
+# subscriber terminal up. The subscriber terminal will be activated automatically when discovered. 
+# Note that ONU entries with with vend & pass equal and not-equal 0 can be mixed. In this case,
+# some subscriber terminals will be pre-configured, before they are discovered 
+# ===================================================================
+#
+# Uncomment-out entries below and modify them for your GPON system
+#
+#onu=1, int=0, vend=4252434d01946121, pass=31323334353637383930
+#onu=6, int=0, vend=4252434d01946132, pass=31323334353637383930
+#
+# Uncomment the entry below if bcm_sdn_agent is started in autonomous ONU 
+# activation mode (-O or --auto_activate). The entry below will cause PON 
+# interface 2 to be enabled. ONUs will be activated automatically when discovered
+#
+#onu=1, int=2, vend=00, pass=00
+
+
+# ========================================================================
+# This is a sample autostart script for a MAPLE XGPON1 or XGSPON system, 
+# where ONUs are identified by their password and registration ID
+#
+# NOTE: This script is only useable on an SDN version
+# of BAL, that is, with the bcm_sdn_agent  
+#
+# On startup, the bcm_sdn_agent code reads this autostart file,
+# then:
+# - brings up the access-terminal
+# - brings up each interface specified in the entry list
+# - brings up a subscriber-terminal for each ONU entry
+#
+# ONU IDs can overlap on different PON interfaces
+#
+# Entry format for an XGPON1 or XGSPON system is:
+# onu=ONU ID, int=PON INTERFACE ID, vend=VENDOR ID, registration_id=REGISTRATION_ID
+# e.g.
+# onu=3, int=2, vend=VENDOR ID FROM ONU LABEL, registration_id=REGISTRATION_ID
+# 
+# As in case with GPON, bcm_sdn_agent controlling XGPON1 or XGSPON system can be started in autonomous
+# ONU activation mode. In this case vend and registration_id should be set 0.
+# The ONU will be activated automatically when discovered 
+# ===================================================================
+#
+# Uncomment-out entries below and modify them for your XGPON1 or XGSPON system
+#
+#onu=1, int=0, vend=4252434d01946121, registration_id=202020202020202020202020202020202020202020202020202020202020202020202020
+#onu=6, int=0, vend=4252434d01946132, registration_id=202020202020202020202020202020202020202020202020202020202020202020202020
+#
+# Uncomment the entry below if bcm_sdn_agent is started in autonomous ONU 
+# activation mode (-O or --auto_activate). The entry below will cause PON 
+# interface 2 to be enabled. ONUs will be activated automatically when discovered
+#
+#onu=1, int=2, vend=00, registration_id=00
diff --git a/bal_release/scripts/bal_config.ini b/bal_release/scripts/bal_config.ini
new file mode 100644
index 0000000..a48ab23
--- /dev/null
+++ b/bal_release/scripts/bal_config.ini
@@ -0,0 +1,24 @@
+iwf_mode=direct
+# Mapping table between Qumran and Maple: 3-separate QaX/Maple SVKs, 4-SVK4
+intf_maptable=3
+num_nni_ports=1
+# UDP port where bcm.user listens for pkt_send messages from core (needed for remote bcm.user only!)
+pkt_send_svr_listen_port=50002
+# UDP port where the core listens for pkt_rcv message from bcm.user (needed for remote bcm.user only!)
+trap_udp_port=50001
+
+# The following topology configuration (currently commented out) is an alternative for bal_topology.ini.
+# In case both exist, bal_topology.ini takes precedence over this configuration.
+topology.num_of_devs=1
+topology.num_of_pons_per_dev=2
+# Allowed pon modes are: gpon|xgpon|xgs|ngpon2|epon_tdma|epon_1g|epon_10g
+topology.pon_mode=xgs
+
+#enable (y) or disable (n) loopback mode in MAC (does not need access to Maple HW if enabled)
+#mac_loopback=y
+
+# Enable NNI auto-negotiation on NNI port <n>.
+# It is known to work on NNI0 with some 1G transceivers, however
+# this mode wasn't tested on NNI interfaces other than 0 and/or with different transceivers.
+# Use at your own risk
+# autoneg_nni<n>=y
diff --git a/bal_release/scripts/bal_setup_svk4.sh b/bal_release/scripts/bal_setup_svk4.sh
new file mode 100755
index 0000000..ceb1cc2
--- /dev/null
+++ b/bal_release/scripts/bal_setup_svk4.sh
@@ -0,0 +1,23 @@
+#!/bin/sh
+#
+# Start bal devices
+#
+
+case "$1" in
+    start)
+	echo -n "Starting bal devices: "
+        /broadcom/mk_bcm_node.sh
+        /broadcom/svk_init_startup.sh
+	echo "OK"
+	;;
+    stop)
+	echo "OK"
+	;;
+    restart|reload)
+	;;
+    *)
+	echo "Usage: $0 {start|stop|restart}"
+	exit 1
+esac
+
+exit $?
diff --git a/bal_release/scripts/bal_topology.ini b/bal_release/scripts/bal_topology.ini
new file mode 100644
index 0000000..4cf96ec
--- /dev/null
+++ b/bal_release/scripts/bal_topology.ini
@@ -0,0 +1,18 @@
+# Logical PON ID, PON Mode (gpon|xgpon|epon_10g|xgs|ngpon2), Physical Device ID, Physical PON ID
+# Comments below contain gpon configuration example
+#0, gpon, 0, 0
+#1, gpon, 0, 1
+#2, gpon, 0, 2
+#3, gpon, 0, 3
+#4, gpon, 0, 4
+#5, gpon, 0, 5
+#6, gpon, 0, 6
+#7, gpon, 0, 7
+#8, gpon, 0, 8
+#9, gpon, 0, 9
+#10, gpon, 0, 10
+#11, gpon, 0, 11
+#12, gpon, 0, 12
+#13, gpon, 0, 13
+#14, gpon, 0, 14
+#15, gpon, 0, 15
diff --git a/bal_release/scripts/bcm_user_start_stop b/bal_release/scripts/bcm_user_start_stop
new file mode 100755
index 0000000..0e3985c
--- /dev/null
+++ b/bal_release/scripts/bcm_user_start_stop
@@ -0,0 +1,72 @@
+#!/bin/bash
+#
+# Start/Stop BCM.USER
+#
+
+# 
+# Set the directory path to bcm.user, or 
+# allow the user to specify the path to bcm.user as the second argument when calling this script 
+# (the first argument must be one of: [ start, stop ]
+#
+if [ -z $2 ]; then
+
+# Look for bcm.user, set the starting directory appropriately, or
+# simple exit if not found
+#
+if [ -f /mnt/bcm.user ]; then
+BCM_USER_BIN_DIR=/mnt/
+elif [ -f /broadcom/bcm.user ]; then
+BCM_USER_BIN_DIR=/broadcom
+elif [ -f /opt/bcm56450/bcm.user ]; then
+BCM_USER_BIN_DIR=/opt/bcm56450
+elif [ -f ./bcm.user ]; then
+BCM_USER_BIN_DIR=.
+else
+echo "cannot find bcm.user, exiting"
+exit 1
+fi
+
+else # the user may choose the starting directory directly using the second argment 
+BCM_USER_BIN_DIR=$2
+fi   
+
+case "$1" in
+  start)
+  	echo -n "Starting bcm.user: "
+	cd ${BCM_USER_BIN_DIR}
+        lsmod | grep -q linux_user_bde > /dev/null
+        if [ "$?" == "0" ]; then
+            rmmod linux_user_bde
+            echo -n "(-user)"
+        fi
+
+        lsmod | grep -q linux_kernel_bde > /dev/null
+        if [ "$?" == "0" ]; then
+            rmmod linux_kernel_bde
+            echo -n "(-kernel)"
+        fi
+
+#
+# The linux_kernel_bde and linux_user_bde modules are loaded by the bcm.user executable
+#
+
+# Create the linux device file, if it does not already exist
+        if [ ! -c /dev/linux-user-bde ]; then
+            mknod /dev/linux-user-bde c 126 0
+        fi
+        ./bcm.user
+	echo "OK"
+	;;
+  stop)
+	echo -n "Stopping bcm.user: "
+	pkill -f bcm.user
+	echo "OK"
+	;;
+  restart|reload)
+	;;
+  *)
+	echo "Usage: $0 {start|stop|restart}"
+	exit 1
+esac
+
+exit $?
diff --git a/bal_release/scripts/maple_start_stop b/bal_release/scripts/maple_start_stop
new file mode 100755
index 0000000..bd81d75
--- /dev/null
+++ b/bal_release/scripts/maple_start_stop
@@ -0,0 +1,57 @@
+#!/bin/sh
+#
+# Start/Stop Maple
+#
+case "$1" in
+  start)
+  	echo -e  "Checking if svk_init.sh calls trx_init.sh\n"
+  	cd /opt/bcm68620
+  	if [ ! -e trx_init.sh ]; then
+  	    echo "trx_init.sh not present" && cd - && exit 1
+  	fi
+  	if [ -z "`grep "./bcm_user_appl < trx_init.sh" svk_init.sh`" ]; then
+  	    echo "svk_init.sh does not call trx_init.sh" && cd - && exit 1
+  	elif [[ ! -z "`grep "./bcm_user_appl < trx_init.sh" svk_init.sh | grep "^\s*#\s*"`" ]]; then
+  	    echo "call to trx_init.sh is commented out in svk_init.sh" && cd - && exit 1
+  	fi
+
+        echo -n "Starting MAPLE: "
+        cd /opt/bcm68620 && ./svk_init.sh --proxy 40000
+ 	;;
+  stop)
+        echo -n "Stopping Maple: "
+        pkill -f bcm_user_appl
+        if [ ! -z "`lsmod | grep -m 1 coop_dba_linux`" ]; then
+	    rmmod coop_dba_linux
+        fi
+        if [ ! -z "`lsmod | grep -m 1 bcm_dev_ctrl_linux`" ]; then
+	    rmmod bcm_dev_ctrl_linux
+        fi
+        if [ ! -z "`lsmod | grep -m 1 i2c_devs`" ]; then
+	    rmmod i2c_devs.ko
+        fi
+        if [ ! -z "`lsmod | grep -m 1 os_linux`" ]; then
+	    rmmod os_linux.ko
+        fi
+        if [ ! -z "`lsmod | grep -m 1 ll_pcie`" ]; then
+	    rmmod ll_pcie.ko
+        fi
+        if [ -e /dev/maple_dev_ctrl ]; then
+	    rm /dev/maple_dev_ctrl
+        fi
+        LOCK_DIR_INIT=/tmp/bcm68620_svk_init
+        LOCK_DIR_KERNEL_LOG_OWNED=/tmp/bcm68620_kernel_log_owned
+        rm -fr $LOCK_DIR_INIT
+        rm -fr $LOCK_DIR_KERNEL_LOG_OWNED
+        echo "OK"
+	;;
+  restart|reload)
+        "$0" stop
+        "$0" start
+	;;
+  *)
+	echo "Usage: $0 {start|stop|restart}"
+	exit 1
+esac
+
+exit $?
diff --git a/bal_release/scripts/ryu/PON_topology_100_flow_add_then_delete_all.py b/bal_release/scripts/ryu/PON_topology_100_flow_add_then_delete_all.py
new file mode 100644
index 0000000..16e3b1f
--- /dev/null
+++ b/bal_release/scripts/ryu/PON_topology_100_flow_add_then_delete_all.py
@@ -0,0 +1,112 @@
+# Copyright (C) 2011 Nippon Telegraph and Telephone Corporation.

+#

+# Licensed under the Apache License, Version 2.0 (the "License");

+# you may not use this file except in compliance with the License.

+# You may obtain a copy of the License at

+#

+#    http://www.apache.org/licenses/LICENSE-2.0

+#

+# Unless required by applicable law or agreed to in writing, software

+# distributed under the License is distributed on an "AS IS" BASIS,

+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or

+# implied.

+# See the License for the specific language governing permissions and

+# limitations under the License.

+import logging

+

+from ryu.base import app_manager

+from time import sleep

+from ryu.controller import ofp_event

+from ryu.controller.handler import CONFIG_DISPATCHER, MAIN_DISPATCHER

+from ryu.controller.handler import set_ev_cls

+from ryu.ofproto import ofproto_v1_3

+from ryu.lib.packet import packet

+from ryu.lib.packet import ethernet

+from ryu.lib import addrconv

+

+LOG = logging.getLogger('ryu.app.pon_topology')

+

+class PonTopology13(app_manager.RyuApp):

+    OFP_VERSIONS = [ofproto_v1_3.OFP_VERSION]

+

+    def __init__(self, *args, **kwargs):

+        super(PonTopology13, self).__init__(*args, **kwargs)

+        self.mac_to_port = {}

+

+    @set_ev_cls(ofp_event.EventOFPSwitchFeatures, CONFIG_DISPATCHER)

+    def switch_features_handler(self, ev):

+        datapath = ev.msg.datapath

+

+        # This does nothing if flows have not been previously configured in the OF agent

+        self.del_all_flows(datapath)

+

+        # Configure the flows (VID 100)

+        #

+        # Ports 1-128 are implicitly mapped to UNI-0 on ONU 1->128

+        # Ports 129 and above are implicitly mapped to OLT NNI-0 and above

+        self.add_vid_flow(datapath,10000, 1, 129, 100, 0)

+        self.add_vid_flow(datapath,10001, 129, 1, 100, 0)

+

+        sleep(1)

+        self.send_barrier(datapath)

+

+        sleep(5)

+        

+        self.del_all_flows(datapath)

+

+    @set_ev_cls(ofp_event.EventOFPPortStatus, MAIN_DISPATCHER)

+    def port_status_handler(self, ev):

+        LOG.debug('port_status_handler port id: %d', ev.msg.desc.port_no)

+

+    def add_meter(self, datapath, meter_id, rate):

+        ofproto = datapath.ofproto

+        parser = datapath.ofproto_parser

+        band = parser.OFPMeterBandDrop(burst_size=0, rate=rate)

+        mod = parser.OFPMeterMod(datapath=datapath,command=ofproto.OFPMC_ADD, flags=ofproto.OFPMF_KBPS, meter_id=meter_id, bands=[band])

+        LOG.info("add_meter: meter_id=%d, rate=%d KBPS")

+        datapath.send_msg(mod)

+

+    def add_vid_flow(self, datapath, cookie, src_port, dst_port, vid, meter_id):

+        ofproto = datapath.ofproto

+        parser = datapath.ofproto_parser

+        actions = [parser.OFPActionOutput(dst_port)]

+        if meter_id != 0:

+            inst = [parser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS,actions), parser.OFPInstructionMeter(meter_id)]

+        else:

+            inst = [parser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS,actions)]

+

+        # NOTE: 0x1000 is OR'd into the vid to set the OFPVID_PRESENT flag in the OpenFlow FLOW_MOD (OFPFC_ADD) 

+        # message match field.

+        match = parser.OFPMatch(in_port=src_port, vlan_vid=(vid | 0x1000))

+        mod = parser.OFPFlowMod(datapath=datapath,

+                                cookie=cookie, 

+                                cookie_mask=32767, 

+                                priority=0, 

+                                match=match, 

+                                instructions=inst)

+        LOG.info("add_vid_flow: src_port=%d dst_port=%d vid=%d meter=%d cookie=%d", 

+                 src_port, dst_port, vid, meter_id, cookie)

+        datapath.send_msg(mod)

+

+    def del_flow(self, datapath, cookie):

+        LOG.info("del_flow: cookie=%d", cookie)

+        self._del_flow(datapath, cookie, 32767)

+

+    def del_all_flows(self, datapath):

+        LOG.info("del_all_flows")

+        # Cookie 0 (argument 2) tells the OF agent to delete all configured flows

+        self._del_flow(datapath, 0, 0)

+

+    def _del_flow(self, datapath, cookie, mask):

+        ofproto = datapath.ofproto

+        parser = datapath.ofproto_parser

+ 

+        mod = parser.OFPFlowMod(

+            datapath=datapath, match=None, cookie=cookie, cookie_mask=mask,

+            command=ofproto.OFPFC_DELETE)

+        datapath.send_msg(mod)

+

+    def send_barrier(self, datapath):

+        LOG.info("send_barrier")

+        datapath.send_barrier()

+                   

diff --git a/bal_release/scripts/ryu/PON_topology_100_flow_add_then_delete_all_loop.py b/bal_release/scripts/ryu/PON_topology_100_flow_add_then_delete_all_loop.py
new file mode 100644
index 0000000..ad87847
--- /dev/null
+++ b/bal_release/scripts/ryu/PON_topology_100_flow_add_then_delete_all_loop.py
@@ -0,0 +1,120 @@
+# Copyright (C) 2011 Nippon Telegraph and Telephone Corporation.

+#

+# Licensed under the Apache License, Version 2.0 (the "License");

+# you may not use this file except in compliance with the License.

+# You may obtain a copy of the License at

+#

+#    http://www.apache.org/licenses/LICENSE-2.0

+#

+# Unless required by applicable law or agreed to in writing, software

+# distributed under the License is distributed on an "AS IS" BASIS,

+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or

+# implied.

+# See the License for the specific language governing permissions and

+# limitations under the License.

+import logging

+

+from ryu.base import app_manager

+from time import sleep

+from ryu.controller import ofp_event

+from ryu.controller.handler import CONFIG_DISPATCHER, MAIN_DISPATCHER

+from ryu.controller.handler import set_ev_cls

+from ryu.ofproto import ofproto_v1_3

+from ryu.lib.packet import packet

+from ryu.lib.packet import ethernet

+from ryu.lib import addrconv

+

+LOG = logging.getLogger('ryu.app.pon_topology')

+

+class PonTopology13(app_manager.RyuApp):

+    OFP_VERSIONS = [ofproto_v1_3.OFP_VERSION]

+

+    def __init__(self, *args, **kwargs):

+        super(PonTopology13, self).__init__(*args, **kwargs)

+        self.mac_to_port = {}

+

+    @set_ev_cls(ofp_event.EventOFPSwitchFeatures, CONFIG_DISPATCHER)

+    def switch_features_handler(self, ev):

+        datapath = ev.msg.datapath

+

+        # Add/Del upstream/downstream flows (VID 100) in a loop to test for leaks in the OF agent

+        #

+        # (NOTE: The first del_all_flows does nothing if flows have not been previously 

+        # configured in the OF agent)

+        while 1:

+            self.del_all_flows(datapath)

+

+            self.add_vid_flow(datapath,10000, 1, 129, 100, 0)

+            self.add_vid_flow(datapath,10001, 129, 1, 100, 0)

+

+            sleep(1)

+            self.send_barrier(datapath)

+          

+            sleep(5)

+        

+ 

+    @set_ev_cls(ofp_event.EventOFPPortStatus, MAIN_DISPATCHER)

+    def port_status_handler(self, ev):

+        LOG.debug('port_status_handler port id: %d', ev.msg.desc.port_no)

+

+    def add_meter(self, datapath, meter_id, rate):

+        ofproto = datapath.ofproto

+        parser = datapath.ofproto_parser

+        band = parser.OFPMeterBandDrop(burst_size=0, rate=rate)

+        mod = parser.OFPMeterMod(datapath=datapath,

+                                 command=ofproto.OFPMC_ADD, 

+                                 flags=ofproto.OFPMF_KBPS, 

+                                 meter_id=meter_id, 

+                                 bands=[band])

+        LOG.info("add_meter: meter_id=%d, rate=%d KBPS")

+        datapath.send_msg(mod)

+

+    def add_vid_flow(self, datapath, cookie, src_port, dst_port, vid, meter_id):

+        ofproto = datapath.ofproto

+        parser = datapath.ofproto_parser

+        actions = [parser.OFPActionOutput(dst_port)]

+        if meter_id != 0:

+            inst = [parser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS,actions), 

+                    parser.OFPInstructionMeter(meter_id)]

+        else:

+            inst = [parser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS,actions)]

+

+        # NOTE: 0x1000 is OR'd into the vid to set the OFPVID_PRESENT flag in the OpenFlow FLOW_MOD (OFPFC_ADD) 

+        # message match field.

+        match = parser.OFPMatch(in_port=src_port, vlan_vid=(vid | 0x1000))

+        mod = parser.OFPFlowMod(datapath=datapath,

+                                cookie=cookie, 

+                                cookie_mask=32767, 

+                                priority=0, 

+                                match=match, 

+                                instructions=inst)

+        LOG.info("add_vid_flow: src_port=%d dst_port=%d vid=%d meter=%d cookie=%d", 

+                 src_port, dst_port, vid, meter_id, cookie)

+        datapath.send_msg(mod)

+

+    def del_flow(self, datapath, cookie):

+        LOG.info("del_flow: cookie=%d", cookie)

+        self._del_flow(datapath, cookie, 32767)

+

+    def del_all_flows(self, datapath):

+        LOG.info("del_all_flows")

+        # Cookie 0 (argument 2) tells the OF agent to delete all configured flows

+        self._del_flow(datapath, 0, 0)

+

+    def _del_flow(self, datapath, cookie, mask):

+        ofproto = datapath.ofproto

+        parser = datapath.ofproto_parser

+ 

+        mod = parser.OFPFlowMod(

+            datapath=datapath, match=None, cookie=cookie, cookie_mask=mask,

+            command=ofproto.OFPFC_DELETE)

+        datapath.send_msg(mod)

+    

+    def send_barrier(self, datapath):

+        LOG.info("send_barrier")

+        datapath.send_barrier()

+                   

+

+

+

+                   

diff --git a/bal_release/scripts/ryu/PON_topology_100_flow_add_then_delete_ds_then_us.py b/bal_release/scripts/ryu/PON_topology_100_flow_add_then_delete_ds_then_us.py
new file mode 100644
index 0000000..377903f
--- /dev/null
+++ b/bal_release/scripts/ryu/PON_topology_100_flow_add_then_delete_ds_then_us.py
@@ -0,0 +1,123 @@
+# Copyright (C) 2011 Nippon Telegraph and Telephone Corporation.

+#

+# Licensed under the Apache License, Version 2.0 (the "License");

+# you may not use this file except in compliance with the License.

+# You may obtain a copy of the License at

+#

+#    http://www.apache.org/licenses/LICENSE-2.0

+#

+# Unless required by applicable law or agreed to in writing, software

+# distributed under the License is distributed on an "AS IS" BASIS,

+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or

+# implied.

+# See the License for the specific language governing permissions and

+# limitations under the License.

+import logging

+

+from ryu.base import app_manager

+from time import sleep

+from ryu.controller import ofp_event

+from ryu.controller.handler import CONFIG_DISPATCHER, MAIN_DISPATCHER

+from ryu.controller.handler import set_ev_cls

+from ryu.ofproto import ofproto_v1_3

+from ryu.lib.packet import packet

+from ryu.lib.packet import ethernet

+from ryu.lib import addrconv

+

+LOG = logging.getLogger('ryu.app.pon_topology')

+

+class PonTopology13(app_manager.RyuApp):

+    OFP_VERSIONS = [ofproto_v1_3.OFP_VERSION]

+

+    def __init__(self, *args, **kwargs):

+        super(PonTopology13, self).__init__(*args, **kwargs)

+        self.mac_to_port = {}

+

+    @set_ev_cls(ofp_event.EventOFPSwitchFeatures, CONFIG_DISPATCHER)

+    def switch_features_handler(self, ev):

+        datapath = ev.msg.datapath

+

+        # This does nothing if flows have not been previously configured in the OF agent

+        self.del_all_flows(datapath)

+

+        # Configure the flows (VID 100)

+        #

+        # Ports 1-128 are implicitly mapped to UNI-0 on ONU 1-12

+        # Ports 129 and above are implicitly mapped to OLT NNI-0 and above

+        self.add_vid_flow(datapath,10000, 1, 129, 100, 0)

+        self.add_vid_flow(datapath,10001, 129, 1, 100, 0)

+

+        sleep(1)

+        self.send_barrier(datapath)

+

+        sleep(5)

+        

+        # Delete the downstream flow

+        self.del_flow(datapath, 10001)

+        # Then delete the upstream flow

+        self.del_flow(datapath, 10000)

+

+    @set_ev_cls(ofp_event.EventOFPPortStatus, MAIN_DISPATCHER)

+    def port_status_handler(self, ev):

+        LOG.debug('port_status_handler port id: %d', ev.msg.desc.port_no)

+

+    def add_meter(self, datapath, meter_id, rate):

+        ofproto = datapath.ofproto

+        parser = datapath.ofproto_parser

+        band = parser.OFPMeterBandDrop(burst_size=0, rate=rate)

+        mod = parser.OFPMeterMod(datapath=datapath,

+                                 command=ofproto.OFPMC_ADD, 

+                                 flags=ofproto.OFPMF_KBPS, 

+                                 meter_id=meter_id, 

+                                 bands=[band])

+        LOG.info("add_meter: meter_id=%d, rate=%d KBPS")

+        datapath.send_msg(mod)

+

+    def add_vid_flow(self, datapath, cookie, src_port, dst_port, vid, meter_id):

+        ofproto = datapath.ofproto

+        parser = datapath.ofproto_parser

+        actions = [parser.OFPActionOutput(dst_port)]

+        if meter_id != 0:

+            inst = [parser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS,actions), 

+                    parser.OFPInstructionMeter(meter_id)]

+        else:

+            inst = [parser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS,actions)]

+

+        # NOTE: 0x1000 is OR'd into the vid to set the OFPVID_PRESENT flag in the OpenFlow FLOW_MOD (OFPFC_ADD) 

+        # message match field.

+        match = parser.OFPMatch(in_port=src_port, vlan_vid=(vid | 0x1000))

+        mod = parser.OFPFlowMod(datapath=datapath,

+                                cookie=cookie, 

+                                cookie_mask=32767, 

+                                priority=0, 

+                                match=match, 

+                                instructions=inst)

+        LOG.info("add_vid_flow: src_port=%d dst_port=%d vid=%d meter=%d cookie=%d", 

+                 src_port, dst_port, vid, meter_id, cookie)

+        datapath.send_msg(mod)

+

+    def del_flow(self, datapath, cookie):

+        LOG.info("del_flow: cookie=%d", cookie)

+        self._del_flow(datapath, cookie, 32767)

+

+    def del_all_flows(self, datapath):

+        LOG.info("del_all_flows")

+

+        # Cookie 0 (argument 2) tells the OF agent to delete all configured flows

+        self._del_flow(datapath, 0, 0)

+

+    def _del_flow(self, datapath, cookie, mask):

+        ofproto = datapath.ofproto

+        parser = datapath.ofproto_parser

+ 

+        mod = parser.OFPFlowMod(datapath=datapath, 

+                                match=None, 

+                                cookie=cookie, 

+                                cookie_mask=mask,

+                                command=ofproto.OFPFC_DELETE)

+        datapath.send_msg(mod)

+

+    def send_barrier(self, datapath):

+        LOG.info("send_barrier")

+        datapath.send_barrier()

+                   

diff --git a/bal_release/scripts/ryu/PON_topology_100_flow_add_then_delete_us_then_ds.py b/bal_release/scripts/ryu/PON_topology_100_flow_add_then_delete_us_then_ds.py
new file mode 100644
index 0000000..188208f
--- /dev/null
+++ b/bal_release/scripts/ryu/PON_topology_100_flow_add_then_delete_us_then_ds.py
@@ -0,0 +1,119 @@
+# Copyright (C) 2011 Nippon Telegraph and Telephone Corporation.

+#

+# Licensed under the Apache License, Version 2.0 (the "License");

+# you may not use this file except in compliance with the License.

+# You may obtain a copy of the License at

+#

+#    http://www.apache.org/licenses/LICENSE-2.0

+#

+# Unless required by applicable law or agreed to in writing, software

+# distributed under the License is distributed on an "AS IS" BASIS,

+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or

+# implied.

+# See the License for the specific language governing permissions and

+# limitations under the License.

+import logging

+

+from ryu.base import app_manager

+from time import sleep

+from ryu.controller import ofp_event

+from ryu.controller.handler import CONFIG_DISPATCHER, MAIN_DISPATCHER

+from ryu.controller.handler import set_ev_cls

+from ryu.ofproto import ofproto_v1_3

+from ryu.lib.packet import packet

+from ryu.lib.packet import ethernet

+from ryu.lib import addrconv

+

+LOG = logging.getLogger('ryu.app.pon_topology')

+

+class PonTopology13(app_manager.RyuApp):

+    OFP_VERSIONS = [ofproto_v1_3.OFP_VERSION]

+

+    def __init__(self, *args, **kwargs):

+        super(PonTopology13, self).__init__(*args, **kwargs)

+        self.mac_to_port = {}

+

+    @set_ev_cls(ofp_event.EventOFPSwitchFeatures, CONFIG_DISPATCHER)

+    def switch_features_handler(self, ev):

+        datapath = ev.msg.datapath

+

+        # This does nothing if flows have not been previously configured in the OF agent

+        self.del_all_flows(datapath)

+

+        # Configure the flows (VID 100)

+        #

+        # Ports 1-128 are implicitly mapped to UNI-0 on ONU 1->128

+        # Ports 129 and above are implicitly mapped to OLT NNI-0 and above

+        self.add_vid_flow(datapath,10000, 1, 129, 100, 0)

+        self.add_vid_flow(datapath,10001, 129, 1, 100, 0)

+

+        sleep(1)

+        self.send_barrier(datapath)

+

+        sleep(5)

+        

+        # Delete the upstream flow

+        self.del_flow(datapath, 10000)

+        # Then delete the downstream flow

+        self.del_flow(datapath, 10001)

+

+    @set_ev_cls(ofp_event.EventOFPPortStatus, MAIN_DISPATCHER)

+    def port_status_handler(self, ev):

+        LOG.debug('port_status_handler port id: %d', ev.msg.desc.port_no)

+

+    def add_meter(self, datapath, meter_id, rate):

+        ofproto = datapath.ofproto

+        parser = datapath.ofproto_parser

+        band = parser.OFPMeterBandDrop(burst_size=0, rate=rate)

+        mod = parser.OFPMeterMod(datapath=datapath,

+                                 command=ofproto.OFPMC_ADD, 

+                                 flags=ofproto.OFPMF_KBPS, 

+                                 meter_id=meter_id, 

+                                 bands=[band])

+        LOG.info("add_meter: meter_id=%d, rate=%d KBPS")

+        datapath.send_msg(mod)

+

+    def add_vid_flow(self, datapath, cookie, src_port, dst_port, vid, meter_id):

+        ofproto = datapath.ofproto

+        parser = datapath.ofproto_parser

+        actions = [parser.OFPActionOutput(dst_port)]

+        if meter_id != 0:

+            inst = [parser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS,actions), parser.OFPInstructionMeter(meter_id)]

+        else:

+            inst = [parser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS,actions)]

+

+        # NOTE: 0x1000 is OR'd into the vid to set the OFPVID_PRESENT flag in the OpenFlow FLOW_MOD (OFPFC_ADD) 

+        # message match field.

+        match = parser.OFPMatch(in_port=src_port, vlan_vid=(vid | 0x1000))

+        mod = parser.OFPFlowMod(datapath=datapath,

+                                cookie=cookie, 

+                                cookie_mask=32767, 

+                                priority=0, 

+                                match=match, 

+                                instructions=inst)

+        LOG.info("add_vid_flow: src_port=%d dst_port=%d vid=%d meter=%d cookie=%d", 

+                 src_port, dst_port, vid, meter_id, cookie)

+        datapath.send_msg(mod)

+

+    def del_flow(self, datapath, cookie):

+        LOG.info("del_flow: cookie=%d", cookie)

+        self._del_flow(datapath, cookie, 32767)

+

+    def del_all_flows(self, datapath):

+        LOG.info("del_all_flows")

+        # Cookie 0 (argument 2) tells the OF agent to delete all configured flows

+        self._del_flow(datapath, 0, 0)

+

+    def _del_flow(self, datapath, cookie, mask):

+        ofproto = datapath.ofproto

+        parser = datapath.ofproto_parser

+ 

+        mod = parser.OFPFlowMod(

+            datapath=datapath, match=None, cookie=cookie, cookie_mask=mask,

+            command=ofproto.OFPFC_DELETE)

+        datapath.send_msg(mod)

+

+    def send_barrier(self, datapath):

+        LOG.info("send_barrier")

+        datapath.send_barrier()

+                   

diff --git a/bal_release/scripts/ryu/PON_topology_100_flow_add_with_ds_meter.py b/bal_release/scripts/ryu/PON_topology_100_flow_add_with_ds_meter.py
new file mode 100644
index 0000000..6b73d17
--- /dev/null
+++ b/bal_release/scripts/ryu/PON_topology_100_flow_add_with_ds_meter.py
@@ -0,0 +1,125 @@
+# Copyright (C) 2011 Nippon Telegraph and Telephone Corporation.

+#

+# Licensed under the Apache License, Version 2.0 (the "License");

+# you may not use this file except in compliance with the License.

+# You may obtain a copy of the License at

+#

+#    http://www.apache.org/licenses/LICENSE-2.0

+#

+# Unless required by applicable law or agreed to in writing, software

+# distributed under the License is distributed on an "AS IS" BASIS,

+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or

+# implied.

+# See the License for the specific language governing permissions and

+# limitations under the License.

+import logging

+

+from ryu.base import app_manager

+from time import sleep

+from ryu.controller import ofp_event

+from ryu.controller.handler import CONFIG_DISPATCHER, MAIN_DISPATCHER

+from ryu.controller.handler import set_ev_cls

+from ryu.ofproto import ofproto_v1_3

+from ryu.lib.packet import packet

+from ryu.lib.packet import ethernet

+from ryu.lib import addrconv

+

+LOG = logging.getLogger('ryu.app.pon_topology')

+

+class PonTopology13(app_manager.RyuApp):

+    OFP_VERSIONS = [ofproto_v1_3.OFP_VERSION]

+

+    def __init__(self, *args, **kwargs):

+        super(PonTopology13, self).__init__(*args, **kwargs)

+        self.mac_to_port = {}

+

+    @set_ev_cls(ofp_event.EventOFPSwitchFeatures, CONFIG_DISPATCHER)

+    def switch_features_handler(self, ev):

+        datapath = ev.msg.datapath

+        

+        # This does nothing if flows have not been previously configured in the OF agent

+        self.del_all_flows(datapath)

+        

+        # Add a meter (500 Kbps rate limit) with an ID of 11

+        self.add_meter(datapath, 11, 500)

+ 

+        # Configure the flows  (VID 100) 

+        # Note: the downstream flow has a meter ID reference

+        #

+        # Ports 1-128 are implicitly mapped to UNI-0 on ONUs 1->128

+        # Ports 129 and above are implicitly mapped to OLT NNI-0 and above

+        self.add_vid_flow(datapath,10000, 1, 129, 100, 0)

+        self.add_vid_flow(datapath,10001, 129, 1, 100, 11)

+

+        sleep(1)

+        self.send_barrier(datapath)

+

+

+    @set_ev_cls(ofp_event.EventOFPPortStatus, MAIN_DISPATCHER)

+    def port_status_handler(self, ev):

+        LOG.debug('port_status_handler port id: %d', ev.msg.desc.port_no)

+

+    def add_meter(self, datapath, meter_id, rate):

+        ofproto = datapath.ofproto

+        parser = datapath.ofproto_parser

+        band = parser.OFPMeterBandDrop(burst_size=0, rate=rate)

+        mod = parser.OFPMeterMod(datapath=datapath,command=ofproto.OFPMC_ADD, flags=ofproto.OFPMF_KBPS, meter_id=meter_id, bands=[band])

+        LOG.info("add_meter: meter_id=%d, rate=%d KBPS")

+        datapath.send_msg(mod)

+

+    def add_vid_flow(self, datapath, cookie, src_port, dst_port, vid, meter_id):

+        ofproto = datapath.ofproto

+        parser = datapath.ofproto_parser

+        actions = [parser.OFPActionOutput(dst_port)]

+        if meter_id != 0:

+            inst = [parser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS,actions), parser.OFPInstructionMeter(meter_id)]

+        else:

+            inst = [parser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS,actions)]

+

+        # NOTE: 0x1000 is OR'd into the vid to set the OFPVID_PRESENT flag in the OpenFlow FLOW_MOD (OFPFC_ADD) 

+        # message match field.

+        match = parser.OFPMatch(in_port=src_port, vlan_vid=(vid | 0x1000))

+        mod = parser.OFPFlowMod(datapath=datapath,

+                                cookie=cookie, 

+                                cookie_mask=32767, 

+                                priority=0, 

+                                match=match, 

+                                instructions=inst)

+        LOG.info("add_vid_flow: src_port=%d dst_port=%d vid=%d meter=%d cookie=%d", 

+                 src_port, dst_port, vid, meter_id, cookie)

+        datapath.send_msg(mod)

+

+    def del_flow(self, datapath, cookie):

+        ofproto = datapath.ofproto

+        parser = datapath.ofproto_parser

+ 

+        mod = parser.OFPFlowMod(

+            datapath=datapath, match=None, cookie=cookie, cookie_mask=32767,

+            command=ofproto.OFPFC_DELETE)

+        LOG.info("del_flow: cookie=%d", cookie)

+        datapath.send_msg(mod)

+

+    def del_all_flows(self, datapath):

+        LOG.info("del_all_flows")

+        # Cookie 0 (argument 2) tells the OF agent to delete all configured flows

+        self._del_flow(datapath, 0, 0)

+

+    def _del_flow(self, datapath, cookie, mask):

+        ofproto = datapath.ofproto

+        parser = datapath.ofproto_parser

+ 

+        mod = parser.OFPFlowMod(datapath=datapath, 

+                                match=None, 

+                                cookie=cookie, 

+                                cookie_mask=mask,

+                                command=ofproto.OFPFC_DELETE)

+        datapath.send_msg(mod)

+

+    def send_barrier(self, datapath):

+        LOG.info("send_barrier")

+        datapath.send_barrier()

+                   

+

+

+

+                   

diff --git a/bal_release/scripts/trx_init.sh b/bal_release/scripts/trx_init.sh
new file mode 100644
index 0000000..880bff6
--- /dev/null
+++ b/bal_release/scripts/trx_init.sh
@@ -0,0 +1,67 @@
+###############################################################################
+#
+#  <:copyright-BRCM:2016:proprietary:standard
+#   
+#     Broadcom Ltd. Proprietary and Confidential.(c) 2016 Broadcom Ltd.
+#     All Rights Reserved
+#   
+#  This program is the proprietary software of Broadcom Ltd. and/or its
+#  licensors, and may only be used, duplicated, modified or distributed pursuant
+#  to the terms and conditions of a separate, written license agreement executed
+#  between you and Broadcom Ltd. (an "Authorized License").  Except as set forth in
+#  an Authorized License, Broadcom Ltd. grants no license (express or implied), right
+#  to use, or waiver of any kind with respect to the Software, and Broadcom Ltd.
+#  expressly reserves all rights in and to the Software and all intellectual
+#  property rights therein.  IF YOU HAVE NO AUTHORIZED LICENSE, THEN YOU HAVE
+#  NO RIGHT TO USE THIS SOFTWARE IN ANY WAY, AND SHOULD IMMEDIATELY NOTIFY
+#  BROADCOM LTD AND DISCONTINUE ALL USE OF THE SOFTWARE.
+#   
+#  Except as expressly set forth in the Authorized License,
+#   
+#  1. This program, including its structure, sequence and organization,
+#      constitutes the valuable trade secrets of Broadcom Ltd., and you shall use
+#      all reasonable efforts to protect the confidentiality thereof, and to
+#      use this information only in connection with your use of Broadcom Ltd.
+#      integrated circuit products.
+#   
+#  2. TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
+#      AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES, REPRESENTATIONS OR
+#      WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH
+#      RESPECT TO THE SOFTWARE.  BROADCOM SPECIFICALLY DISCLAIMS ANY AND
+#      ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY, NONINFRINGEMENT,
+#      FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES, ACCURACY OR
+#      COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR CORRESPONDENCE
+#      TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING OUT OF USE OR
+#      PERFORMANCE OF THE SOFTWARE.
+#   
+#  3. TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM OR
+#      ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL, INCIDENTAL, SPECIAL,
+#      INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER ARISING OUT OF OR IN ANY
+#      WAY RELATING TO YOUR USE OF OR INABILITY TO USE THE SOFTWARE EVEN
+#      IF BROADCOM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES;
+#      OR (ii) ANY AMOUNT IN EXCESS OF THE AMOUNT ACTUALLY PAID FOR THE
+#      SOFTWARE ITSELF OR U.S. $1, WHICHEVER IS GREATER. THESE LIMITATIONS
+#      SHALL APPLY NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY
+#      LIMITED REMEDY.
+#  :>
+#
+###############################################################################
+ 
+# Commands required to enable all 16 PON ports on the MAPLE device
+
+/board/trx_enable pon_id=0
+/board/trx_enable pon_id=1
+/board/trx_enable pon_id=2
+/board/trx_enable pon_id=3
+/board/trx_enable pon_id=4
+/board/trx_enable pon_id=5
+/board/trx_enable pon_id=6
+/board/trx_enable pon_id=7
+/board/trx_enable pon_id=8
+/board/trx_enable pon_id=9
+/board/trx_enable pon_id=10
+/board/trx_enable pon_id=11
+/board/trx_enable pon_id=12
+/board/trx_enable pon_id=13
+/board/trx_enable pon_id=14
+/board/trx_enable pon_id=15
diff --git a/bal_release/scripts/upgrade_bal_qumran.sh b/bal_release/scripts/upgrade_bal_qumran.sh
new file mode 100755
index 0000000..8b8b61d
--- /dev/null
+++ b/bal_release/scripts/upgrade_bal_qumran.sh
@@ -0,0 +1,96 @@
+#!/bin/bash 
+
+# Define all BAL apps to be upgraded here
+FILELIST=('bcm.user' 'linux-kernel-bde.ko' 'linux-user-bde.ko' 'bcm88470_board.soc' 'combo28_dram.soc' 'config.bcm' 'init.sh' 'qax.soc' 'rc.soc')
+#JENKINSSERVER='jenkins-tlva-06.il.broadcom.com'
+JENKINSSERVER='10.187.130.172'
+ING_SDK_VER='6.5.6'
+
+mkdir -p old
+
+JENKINSPATH1="http://${JENKINSSERVER}/job/Bal.Synced.bcm-sdk-${ING_SDK_VER}/lastSuccessfulBuild/artifact/bal/cur/"
+JENKINSFILE1=(
+		'3rdparty/bcm-sdk/build/sdk-all-'${ING_SDK_VER}'/build/linux/user/wrx-3_7/bcm.user'
+        	'3rdparty/bcm-sdk/build/sdk-all-'${ING_SDK_VER}'/build/linux/user/wrx-3_7/linux-kernel-bde.ko'
+        	'3rdparty/bcm-sdk/build/sdk-all-'${ING_SDK_VER}'/build/linux/user/wrx-3_7/linux-user-bde.ko'
+        	'3rdparty/bcm-sdk/rc/qax/bcm88470_board.soc'
+		'3rdparty/bcm-sdk/rc/qax/combo28_dram.soc'
+		'3rdparty/bcm-sdk/rc/qax/config.bcm'
+		'3rdparty/bcm-sdk/rc/qax/init.sh'
+		'3rdparty/bcm-sdk/rc/qax/qax.soc'
+		'3rdparty/bcm-sdk/rc/qax/rc.soc'
+)
+
+
+function coloredEcho(){
+    local exp=$1;
+    local color=$2;
+    if ! [[ $color =~ '^[0-9]$' ]] ; then
+       case $(echo $color | tr '[:upper:]' '[:lower:]') in
+        black) color=0 ;;
+        red) color=1 ;;
+        green) color=2 ;;
+        yellow) color=3 ;;
+        blue) color=4 ;;
+        magenta) color=5 ;;
+        cyan) color=6 ;;
+        white|*) color=7 ;; # white or invalid color
+       esac
+    fi
+    tput setaf $color;
+    echo $exp;
+    tput sgr0;
+}
+
+function check_return(){
+	echo -n "$1...	"
+	$($2)
+	if [ $? -eq 0 ]; then
+		coloredEcho '[ OK ]' green
+	else
+		coloredEcho '[ ERROR ]' red
+	fi
+}
+
+# Checking connectivity to Jenkins Server
+echo -n "Verifing Connectivity to Jenkins...	"
+ping -c 1 ${JENKINSSERVER} &> /dev/null
+if [ $? -eq 0 ]; then
+		coloredEcho '[ OK ]' green
+	else
+		coloredEcho '[ ERROR ]' red
+		echo 'Aborting Upgrade!'
+		exit 0
+	fi
+
+# delete any old versions
+echo 'Deleting older versions...'
+for FILE in ${FILELIST[@]}
+	do
+		check_return "Deleting ${FILE}.old" "rm -f old/${FILE}.old"
+	done
+
+# rename the existing versions
+echo 'Renaming last version x.old ...'
+for FILE in ${FILELIST[@]}
+	do
+		check_return "Moving ${FILE} to ${FILE}.old" "mv ${FILE} old/${FILE}.old"
+	done
+
+# Get the new versions
+echo 'Downloading ING version '${ING_SDK_VER}'...'
+for FILE in ${JENKINSFILE1[@]}
+	do
+		COMMAND="wget -q ${JENKINSPATH1}${FILE}"
+		SHORTFILE=$(echo ${FILE} | sed 's:.*/::')
+		check_return "Getting Latest ${SHORTFILE}" "${COMMAND}"
+	done
+
+# Changing permissions to executable
+echo 'Changing permissions to executable...'
+for FILE in ${FILELIST[@]}
+	do
+		check_return "Makiing ${FILE} executable" "chmod 755 ${FILE}"
+	done
+
+echo 'Upgrade Complete'
diff --git a/bal_release/src/apps/bal_cli/Makefile b/bal_release/src/apps/bal_cli/Makefile
new file mode 100644
index 0000000..52c885f
--- /dev/null
+++ b/bal_release/src/apps/bal_cli/Makefile
@@ -0,0 +1,39 @@
+###############################################################################
+#
+#  <:copyright-BRCM:2016:DUAL/GPL:standard
+#  
+#     Copyright (c) 2016 Broadcom
+#     All Rights Reserved
+#  
+#  Unless you and Broadcom execute a separate written software license
+#  agreement governing use of this software, this software is licensed
+#  to you under the terms of the GNU General Public License version 2
+#  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+#  with the following added to such license:
+#  
+#     As a special exception, the copyright holders of this software give
+#     you permission to link this software with independent modules, and
+#     to copy and distribute the resulting executable under terms of your
+#     choice, provided that you also meet, for each linked independent
+#     module, the terms and conditions of the license of that module.
+#     An independent module is a module which is not derived from this
+#     software.  The special exception does not apply to any modifications
+#     of the software.
+#  
+#  Not withstanding the above, under no circumstances may you combine
+#  this software in any way with any other Broadcom software provided
+#  under a license other than the GPL, without Broadcom's express prior
+#  written consent.
+#  
+#  :>
+#
+###############################################################################
+#
+# BAL core CLI application
+#
+MOD_NAME = bal_cli
+MOD_DEPS = bal_core dev_log cli os_cli bal_api_cli topology cmdline
+MOD_DEPS_OPT = omcisvc
+MOD_TYPE = app
+
+srcs = bal_cli_app.c
diff --git a/bal_release/src/apps/bal_cli/bal_cli_app.c b/bal_release/src/apps/bal_cli/bal_cli_app.c
new file mode 100644
index 0000000..40a6229
--- /dev/null
+++ b/bal_release/src/apps/bal_cli/bal_cli_app.c
@@ -0,0 +1,101 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *
+ *  :>
+ *
+ *****************************************************************************/
+
+/**
+ * @file bal_cli_app.c
+ * @brief BAL CLI application
+ * @addtogroup ctrlr
+ */
+
+/*@{*/
+
+#include <bcmos_system.h>
+#include <bal_core.h>
+#include <bal_cli.h>
+
+#ifdef OMCI_SVC
+#include <omci_svc.h>
+#include <omci_svc_cli.h>
+#endif
+
+
+/*****************************************************************************/
+/**
+ * @brief The main entry point for the Bal Core
+ *
+ *  A function to initialize and start the Bal Core. The user
+ *  supplied command line arguments are processed, the internal CLI is
+ *  initialized, as are all of the components in the Core.  User input to
+ *  the CLI is then processed.  This function does not return until the
+ *  user quits the CLI, at which time the BAL core terminates operation.
+ *
+ *  Errors encountered during the execution of this function are considered
+ *  to be fatal.
+ *
+ * @param argc command line argument count
+ *
+ * @param argv pointer to command line argument list
+ *
+ * @returns 0 on success, or -EINVAL when an error is encountered
+ *
+ *****************************************************************************/
+int main(int argc, char *argv[])
+{
+    bcmos_errno ret;
+
+    do
+    {
+        /* Init BAL components */
+        ret = bcmbal_init_all(argc, argv, NULL);
+        if (BCM_ERR_OK != ret)
+            break;
+
+        /* Execute init script if any */
+        ret = bcmbal_cli_exec_init_script();
+        if (BCM_ERR_OK != ret)
+            break;
+
+        /* Let everything run until CLI terminates */
+        while (!bcmbal_cli_is_terminated())
+            bcmos_usleep(1000000);
+    }
+    while (0);
+
+    /* Cleanup */
+    bcmbal_cli_finish();
+    bcmbal_finish();
+    bcmos_exit();
+
+    return (BCM_ERR_OK == ret) ? 0 : -1;
+}
+
+
+/*@}*/
diff --git a/bal_release/src/common/bal_app_utils/Makefile b/bal_release/src/common/bal_app_utils/Makefile
new file mode 100644
index 0000000..2551bf6
--- /dev/null
+++ b/bal_release/src/common/bal_app_utils/Makefile
@@ -0,0 +1,36 @@
+###############################################################################
+#
+#  <:copyright-BRCM:2016:DUAL/GPL:standard
+#  
+#     Copyright (c) 2016 Broadcom
+#     All Rights Reserved
+#  
+#  Unless you and Broadcom execute a separate written software license
+#  agreement governing use of this software, this software is licensed
+#  to you under the terms of the GNU General Public License version 2
+#  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+#  with the following added to such license:
+#  
+#     As a special exception, the copyright holders of this software give
+#     you permission to link this software with independent modules, and
+#     to copy and distribute the resulting executable under terms of your
+#     choice, provided that you also meet, for each linked independent
+#     module, the terms and conditions of the license of that module.
+#     An independent module is a module which is not derived from this
+#     software.  The special exception does not apply to any modifications
+#     of the software.
+#  
+#  Not withstanding the above, under no circumstances may you combine
+#  this software in any way with any other Broadcom software provided
+#  under a license other than the GPL, without Broadcom's express prior
+#  written consent.
+#  
+#  :>
+#
+###############################################################################
+# Common utilities
+#
+MOD_NAME = bal_app_utils
+MOD_TYPE = lib
+MOD_DEPS = dev_log maple_sdk
+srcs = bal_app_common_utils.c
diff --git a/bal_release/src/common/bal_app_utils/bal_app_common_utils.c b/bal_release/src/common/bal_app_utils/bal_app_common_utils.c
new file mode 100755
index 0000000..83894d6
--- /dev/null
+++ b/bal_release/src/common/bal_app_utils/bal_app_common_utils.c
@@ -0,0 +1,81 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file bal_app_common_utils.c
+ * @brief BAL app common Utilities functionality
+ *
+ * @addtogroup util
+ */
+
+/*@{*/
+
+#include "bal_app_common_utils.h"
+
+/*****************************************************************************/
+/**
+* @brief app_util_parse_ip_port
+*
+* This routine is used to parse the user supplied IP address and port of the
+* remote MAC device.
+*
+* @param ip_port     A string containing the IP:port to parse
+*
+* @param ip          The IP address that results from the parsing function
+*
+* @param port        The port that results from the parsing function
+*
+* @return bcmos_errno
+*/
+/*****************************************************************************/
+bcmos_errno app_util_parse_ip_port(const char *ip_port, uint32_t *ip, uint16_t *port)
+{
+    int n;
+    uint32_t ip1, ip2, ip3, ip4, pp;
+
+    if (!ip_port)
+    {
+        bcmos_printf("ERR: ip_port is not set\n");
+        return BCM_ERR_PARM;
+    }
+    n = sscanf(ip_port, "%u.%u.%u.%u:%u", &ip1, &ip2, &ip3, &ip4, &pp);
+    if (n != 5 || ip1 > 0xff || ip2 > 0xff || ip3 > 0xff || ip4 > 0xff || pp > 0xffff)
+    {
+        bcmos_printf("ERR: Can't parse %s. Must be ip_address:port\n", ip_port);
+        return BCM_ERR_PARM;
+    }
+    *ip = (ip1 << 24) | (ip2 << 16) | (ip3 << 8) | ip4;
+    *port = pp;
+    return BCM_ERR_OK;
+}
+
+/*@}*/
+
diff --git a/bal_release/src/common/bal_app_utils/bal_app_common_utils.h b/bal_release/src/common/bal_app_utils/bal_app_common_utils.h
new file mode 100755
index 0000000..1db1b9f
--- /dev/null
+++ b/bal_release/src/common/bal_app_utils/bal_app_common_utils.h
@@ -0,0 +1,56 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file bal_app_common_utils.h
+ * @brief BAL Utilities include file
+ *
+ * @defgroup util Bal App Util Routines
+ * @ingroup lib
+ */
+
+#ifndef _BAL_COMMON_UTILS_H
+#define _BAL_COMMON_UTILS_H
+
+/*@{*/
+
+#include <bcmos_system.h>
+#include <bcm_dev_log.h>
+#include <bal_msg.h>
+#include <bal_utils_msg.h>
+#include <bal_msg_type.h>
+#include <bal_objs.h>
+
+bcmos_errno app_util_parse_ip_port(const char *ip_port, uint32_t *ip, uint16_t *port);
+
+/*@}*/
+
+#endif /* _BAL_COMMON_UTILS_H*/
diff --git a/bal_release/src/common/cli b/bal_release/src/common/cli
new file mode 120000
index 0000000..8573c77
--- /dev/null
+++ b/bal_release/src/common/cli
@@ -0,0 +1 @@
+../../3rdparty/maple/sdk/host_reference/cli
\ No newline at end of file
diff --git a/bal_release/src/common/config/bcm_config.h b/bal_release/src/common/config/bcm_config.h
new file mode 100644
index 0000000..9221c1a
--- /dev/null
+++ b/bal_release/src/common/config/bcm_config.h
@@ -0,0 +1,45 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+#ifndef BCMOLT_CONFIG_H_
+#define BCMOLT_CONFIG_H_
+
+/** \defgroup config Configuration Constants
+ * Configuration constants that must be revised by customer
+ * @{
+ */
+
+#define BCMTR_MAX_OLTS             1      /**< Max number of OLTs */
+
+/** @} */
+
+
+#endif /* BCMOLT_CONFIG_H_ */
diff --git a/bal_release/src/common/db_engine/Makefile b/bal_release/src/common/db_engine/Makefile
new file mode 100644
index 0000000..23b64f6
--- /dev/null
+++ b/bal_release/src/common/db_engine/Makefile
@@ -0,0 +1,36 @@
+###############################################################################
+#
+#  <:copyright-BRCM:2016:DUAL/GPL:standard
+#  
+#     Copyright (c) 2016 Broadcom
+#     All Rights Reserved
+#  
+#  Unless you and Broadcom execute a separate written software license
+#  agreement governing use of this software, this software is licensed
+#  to you under the terms of the GNU General Public License version 2
+#  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+#  with the following added to such license:
+#  
+#     As a special exception, the copyright holders of this software give
+#     you permission to link this software with independent modules, and
+#     to copy and distribute the resulting executable under terms of your
+#     choice, provided that you also meet, for each linked independent
+#     module, the terms and conditions of the license of that module.
+#     An independent module is a module which is not derived from this
+#     software.  The special exception does not apply to any modifications
+#     of the software.
+#  
+#  Not withstanding the above, under no circumstances may you combine
+#  this software in any way with any other Broadcom software provided
+#  under a license other than the GPL, without Broadcom's express prior
+#  written consent.
+#  
+#  :>
+#
+###############################################################################
+# Data Base engine
+#
+MOD_NAME = db
+MOD_TYPE = lib
+
+srcs = bcm_db_engine.c
diff --git a/bal_release/src/common/db_engine/bcm_db_engine.c b/bal_release/src/common/db_engine/bcm_db_engine.c
new file mode 100644
index 0000000..dc4f19a
--- /dev/null
+++ b/bal_release/src/common/db_engine/bcm_db_engine.c
@@ -0,0 +1,1606 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/*
+ * Data Base Engine
+ *
+ * Proprietary and confidential.
+ */
+#include <bcmos_system.h>
+#include <bcm_db_engine.h>
+
+/* DB trace level */
+bcmos_trace_level bcmdb_trace_level = BCMOS_TRACE_LEVEL_ERROR;
+
+#define BCMDB_TRACE(level, fmt, args...)        \
+    do {                                        \
+        if (level <= bcmdb_trace_level)     \
+             bcmos_trace(level, "%s#%d> " fmt, __FUNCTION__, __LINE__, ## args);    \
+    } while (0)
+
+/* Print error trace conditionally, depending on the current trace level */
+#define BCMDB_TRACE_ERROR(fmt, args...)        \
+    BCMDB_TRACE(BCMOS_TRACE_LEVEL_ERROR, "DB ERR: %s#%d> " fmt, __FUNCTION__, __LINE__, ## args)
+
+/* Print warning trace conditionally, depending on the current trace level */
+#define BCMDB_TRACE_WARNING(fmt, args...)        \
+    BCMDB_TRACE(BCMOS_TRACE_LEVEL_WARNING, "DB WARN: %s#%d> " fmt, __FUNCTION__, __LINE__, ## args)
+
+/* Print info trace conditionally, depending on the current trace level */
+#define BCMDB_TRACE_INFO(fmt, args...)        \
+    BCMDB_TRACE(BCMOS_TRACE_LEVEL_INFO, "DB INFO: %s#%d> " fmt, __FUNCTION__, __LINE__, ## args)
+
+/* Enable debug prints */
+#define BCMDB_DEBUG
+
+#ifdef BCMDB_DEBUG
+
+/* Print debug trace conditionally, depending on the current trace level */
+#define BCMDB_TRACE_DEBUG(fmt, args...)        \
+    BCMDB_TRACE(BCMOS_TRACE_LEVEL_DEBUG, "DB DBG: %s#%d> " fmt, __FUNCTION__, __LINE__, ## args)
+
+#else
+
+#define BCMDB_TRACE_DEBUG(fmt, args...)
+
+#endif
+
+
+
+/** Data base entry
+ * \ingroup bcmdb
+ */
+struct bcmdb_entry
+{
+    void *data;       /* Set or record */
+    uint8_t flags;
+#define BCMDB_FLAG_VALID    0x01  /**< Entry is valid */
+#define BCMDB_FLAG_RECORD   0x02  /**< Record */
+#define BCMDB_FLAG_SOS      0x10  /**< Set of sets */
+    uint8_t read_count;
+    uint8_t write_pending;
+    uint8_t ffu;
+};
+
+/** Set/Record change notification
+ * \ingroup bcmdb
+ */
+typedef struct bcmdb_notify
+{
+    struct bcmdb_notify *next;
+    bcmdb_notify_cb cb;
+    long cb_priv;
+} bcmdb_notify;
+
+/** Data Base Set control block
+ * \ingroup bcmdb
+ */
+struct bcmdb_set
+{
+    bcmdb_entry entry;        /**< Common fields for set and record */
+    char *name;                 /**< Set name */
+    bcmdb_set *parent;        /**< Set parent */
+    bcmdb_key my_key;         /**< Key in the parent set */
+    int max_entries;            /**< Max number of elements in the set. -1=inlimited */
+    int num_entries;            /**< Current number of elements in the set */
+    int entry_size;             /**< Set entry size. */
+    int magic;                  /**< Magic number */
+#define BCMDB_MAGIC_ACTIVE_SET         (('a'<<24) | ('s'<<16) | ('e'<<8) | 't')
+#define BCMDB_MAGIC_FREE_SET           (('f'<<24) | ('s'<<16) | ('e'<<8) | 't')
+
+    /** Get next element */
+    bcmdb_key (*entry_get_next)(const bcmdb_set *this, bcmdb_key cur);
+
+    /** Add new entry. returns 0 if ok */
+    int (*entry_new)(bcmdb_set *this, bcmdb_key key, const void *data);
+
+    /** Delete entry */
+    int (*entry_delete)(bcmdb_set *this, bcmdb_entry *entry);
+
+    /*
+     * Handle – key mapping
+     */
+
+    /** Convert entry handle to entry key */
+    bcmdb_key (*handle_to_key)(const bcmdb_set *this, const bcmdb_entry *entry);
+
+    /** Convert entry key to entry handle */
+    bcmdb_entry *(*key_to_handle)(const bcmdb_set *this, bcmdb_key key);
+
+    /*
+     * Set/Record locking
+     * entry is handle of the set or record to be locked/unlocked
+     */
+
+    /** Lock the whole set for reading */
+    void (*lock_set_read)(bcmdb_set *set);
+
+    /** Unlock set locked for reading */
+    void (*unlock_set_read)(bcmdb_set *set);
+
+    /** Lock the whole set for update */
+    long (*lock_set_modify)(bcmdb_set *set);
+
+    /** Unlock set locked for update */
+    void (*unlock_set_modify)(bcmdb_set *set, long fastlock_flags);
+
+    /** Lock the set recursively for update (SoS only) */
+    void (*lock_set_recursively_modify)(bcmdb_set *set);
+
+    /** Unlock recursively set locked for update (SoS only)  */
+    void (*unlock_set_recursively_modify)(bcmdb_set *set);
+
+    /** Lock record for reading */
+    void *(*lock_record_read)(bcmdb_set *set, bcmdb_key key);
+
+    /** Release read lock */
+    void (*unlock_record_read)(bcmdb_set *set, bcmdb_key key);
+
+    /** Lock record for modification. */
+    void *(*lock_record_write)(bcmdb_set *set, bcmdb_key key, int is_deletion);
+
+    /** Release modify lock */
+    void (*unlock_record_write)(bcmdb_set *set, int is_deletion, int is_cancellation);
+
+    /** Format function that converts record data to human-readable form */
+    bcmdb_format_cb format;
+
+    /** Update notification mechanism.\n
+     * Note that notification functions are called before the actual update of the data base, so that
+     * there is an option to abort the update if needed.
+     */
+    bcmdb_notify *notify_list_head;
+
+    /** Shadow data record */
+    void *shadow_data;
+
+    /** holds the pointer to a write-locked entry */
+    bcmdb_entry *write_locked_entry ;
+
+    /** mutex that prevents multiple simultaneous updates */
+    bcmos_mutex mutex_update;
+
+    /** semaphore that holds update while there are unfinished reads */
+    bcmos_sem sem_wait_read_to_finish;
+
+    /** fastlock */
+    bcmos_fastlock fastlock;
+};
+
+
+/**< Data base record
+ * \ingroup bcmdb
+ */
+struct bcmdb_record
+{
+    struct bcmdb_entry e;       /**< Entry - common part for set and record */
+};
+
+/*
+ * DB backend callbacks
+ */
+
+/*
+ * Array-based backend
+ */
+
+/** Get next element */
+static bcmdb_key _bcmdb_array_entry_get_next(const bcmdb_set *this, bcmdb_key key)
+{
+    BUG_ON(!this->entry.data);
+
+    if (key < 0)
+        key = 0;
+    else
+        ++key;
+
+    while((unsigned)key<this->max_entries)
+    {
+        bcmdb_entry *entry = (bcmdb_entry *)this->entry.data + key;
+        if ((entry->flags & BCMDB_FLAG_VALID))
+            break;
+        ++key;
+    }
+
+    if ((unsigned)key >= this->max_entries)
+        return BCMDB_KEY_NO_MORE;  /* no more */
+
+    return key;
+}
+
+/*
+ * Handle – key mapping
+ */
+
+/** Convert entry handle to entry key */
+static inline bcmdb_key _bcmdb_array_handle_to_key(const bcmdb_set *this, const bcmdb_entry *entry)
+{
+    bcmdb_key key;
+
+    BUG_ON(!this);
+    BUG_ON(!entry);
+    BUG_ON(!this->magic == BCMDB_MAGIC_ACTIVE_SET);
+    BUG_ON(!this->entry.data);
+
+    key = entry - (bcmdb_entry *)this->entry.data;
+    if ((unsigned)key >= this->max_entries)
+        return BCMDB_KEY_INVAL;
+
+    return key;
+}
+
+
+/** Convert entry key to entry handle */
+static inline bcmdb_entry *_bcmdb_array_key_to_handle(const bcmdb_set *this, bcmdb_key key)
+{
+    BUG_ON(!this);
+    BUG_ON(!this->magic == BCMDB_MAGIC_ACTIVE_SET);
+    BUG_ON(!this->entry.data);
+
+    if ((unsigned long)key >= this->max_entries)
+        return NULL;
+
+    return (bcmdb_entry *)this->entry.data + key;
+}
+
+
+/** sem-based set read-lock */
+static void bcmdb_set_lock_read_sem(bcmdb_set *set)
+{
+    bcmos_mutex_lock(&set->mutex_update, BCMOS_WAIT_FOREVER);
+}
+
+
+/** sem-based set read-unlock */
+static void bcmdb_set_unlock_read_sem(bcmdb_set *set)
+{
+    bcmos_mutex_unlock(&set->mutex_update);
+}
+
+
+/** sem-based set modify-lock */
+static long bcmdb_set_lock_modify_sem(bcmdb_set *set)
+{
+    bcmos_mutex_lock(&set->mutex_update, BCMOS_WAIT_FOREVER);
+    return 0;
+}
+
+
+/** sem-based set modify-unlock */
+static void bcmdb_set_unlock_modify_sem(bcmdb_set *set, long fastlock_flags)
+{
+    bcmos_mutex_unlock(&set->mutex_update);
+}
+
+
+/** helper function which recursively locks all subsets of SoS
+ *  for modify */
+static void bcmdb_recursive_subsets_lock_modify(bcmdb_set *sos)
+{
+    int key;
+    int left_entries = sos->num_entries;
+    bcmdb_entry *entry;
+    bcmdb_set *subset;
+
+    BUG_ON(!(sos->entry.flags & BCMDB_FLAG_SOS));
+
+    for (key = 0; key < sos->max_entries; ++key)
+    {
+        entry = sos->key_to_handle(sos, key);
+
+        if ((entry->flags & BCMDB_FLAG_VALID))
+        {
+            subset = (bcmdb_set *)entry->data;
+            subset->lock_set_recursively_modify(subset);
+
+            --left_entries;
+            /* if we handled all subsets we can break the "for" */
+            if (left_entries==0)
+            {
+                break;
+            }
+        }
+    }
+}
+
+
+/** helper function which recursively unlocks all subsets of SoS
+ *  for modify */
+static void bcmdb_recursive_subsets_unlock_modify(bcmdb_set *sos)
+{
+    int key;
+    int left_entries = sos->num_entries;
+    bcmdb_entry *entry;
+    bcmdb_set *subset;
+
+    BUG_ON(!(sos->entry.flags & BCMDB_FLAG_SOS));
+
+    for (key = 0; key < sos->max_entries; ++key)
+    {
+        entry = sos->key_to_handle(sos, key);
+
+        if ((entry->flags & BCMDB_FLAG_VALID))
+        {
+            subset = (bcmdb_set *)entry->data;
+            subset->unlock_set_recursively_modify(subset);
+
+            --left_entries;
+            /* if we handled all subsets we can break the "for" */
+            if (left_entries==0)
+            {
+                break;
+            }
+        }
+    }
+}
+
+
+/** sem-based set modify-lock recursively */
+static void bcmdb_set_lock_recursively_modify_sem(bcmdb_set *set)
+{
+    BCMDB_TRACE_DEBUG("lock set modify recursively: %s\n", set->name);
+    bcmos_mutex_lock(&set->mutex_update, BCMOS_WAIT_FOREVER);
+    BCMDB_TRACE_DEBUG("mutex was locked\n");
+
+    if ((set->entry.flags & BCMDB_FLAG_SOS))
+    {
+        BCMDB_TRACE_DEBUG("going to lock the subsets\n");
+        bcmdb_recursive_subsets_lock_modify(set);
+    }
+}
+
+
+/** sem-based set modify-unlock recursively */
+static void bcmdb_set_unlock_recursively_modify_sem(bcmdb_set *set)
+{
+    BCMDB_TRACE_DEBUG("unlock set modify recursively: %s\n", set->name);
+
+    if ((set->entry.flags & BCMDB_FLAG_SOS))
+    {
+        BCMDB_TRACE_DEBUG("going to unlock the subsets\n");
+        bcmdb_recursive_subsets_unlock_modify(set);
+    }
+
+    bcmos_mutex_unlock(&set->mutex_update);
+    BCMDB_TRACE_DEBUG("mutex was unlocked\n");
+}
+
+
+/** NB-read-sem-write policy: set read lock */
+static void bcmdb_set_lock_read__nb_read_sem_write(bcmdb_set *set)
+{
+    long flags;
+
+    BCMDB_TRACE_DEBUG("lock set read: %s\n", set->name);
+    flags = bcmos_fastlock_lock(&set->fastlock);
+    ++set->entry.read_count;
+    BCMDB_TRACE_DEBUG("read_count is now: %u\n", set->entry.read_count);
+    bcmos_fastlock_unlock(&set->fastlock, flags);
+}
+
+
+/** NB-read-sem-write policy: set read unlock */
+static void bcmdb_set_unlock_read__nb_read_sem_write(bcmdb_set *set)
+{
+    long flags;
+
+    BCMDB_TRACE_DEBUG("unlock set read: %s\n", set->name);
+
+    flags = bcmos_fastlock_lock(&set->fastlock);
+    BUG_ON(!set->entry.read_count);
+    if (!(--set->entry.read_count) &&
+        set->entry.write_pending)
+    {
+        BCMDB_TRACE_DEBUG("going to wake pending writer\n");
+
+        set->entry.write_pending = 0;
+        bcmos_fastlock_unlock(&set->fastlock, flags);
+        bcmos_sem_post(&set->sem_wait_read_to_finish);
+    }
+    else
+    {
+        bcmos_fastlock_unlock(&set->fastlock, flags);
+    }
+}
+
+
+/** NB-read-sem-write policy: set modify lock */
+static long bcmdb_set_lock_modify__nb_read_sem_write(bcmdb_set *set)
+{
+    long flags;
+
+    BCMDB_TRACE_DEBUG("lock set modify: %s\n", set->name);
+    bcmos_mutex_lock(&set->mutex_update, BCMOS_WAIT_FOREVER);
+    BCMDB_TRACE_DEBUG("mutex was locked\n");
+
+    while(1)
+    {
+        flags = bcmos_fastlock_lock(&set->fastlock);
+        if (!set->entry.read_count)
+            break;
+        /* Wait until read is completed */
+        set->entry.write_pending = 1;
+        bcmos_fastlock_unlock(&set->fastlock, flags);
+        bcmos_sem_wait(&set->sem_wait_read_to_finish, BCMOS_WAIT_FOREVER);
+    }
+    /* At this point fastlock is taken and there are no pending reads */
+
+    BCMDB_TRACE_DEBUG("fastlock is taken, no active reads\n");
+
+    return flags;
+}
+
+
+/** NB-read-sem-write policy: set modify unlock */
+static void bcmdb_set_unlock_modify__nb_read_sem_write(bcmdb_set *set, long fastlock_flags)
+{
+    BCMDB_TRACE_DEBUG("unlock set modify: %s\n", set->name);
+    bcmos_fastlock_unlock(&set->fastlock, fastlock_flags);
+    bcmos_mutex_unlock(&set->mutex_update);
+    BCMDB_TRACE_DEBUG("mutex was unlocked\n");
+}
+
+
+/** sem-read/sem-write policy: lock entry */
+static void *bcmdb_sem_read_sem_write_lock(bcmdb_set *set, bcmdb_key key, int is_deletion)
+{
+    bcmdb_entry *entry;
+    bcmos_mutex_lock(&set->mutex_update, BCMOS_WAIT_FOREVER);
+
+    if (is_deletion)
+    {
+        /* there is nothing to return in deletion case */
+        return NULL;
+    }
+
+    entry = set->key_to_handle(set, key);
+    if (!entry || !(entry->flags & BCMDB_FLAG_VALID))
+    {
+        bcmos_mutex_unlock(&set->mutex_update);
+        return NULL;
+    }
+    return entry->data;
+}
+
+/** sem-read/sem-write policy: unlock entry */
+static void bcmdb_sem_read_sem_write_unlock(bcmdb_set *set)
+{
+    bcmos_mutex_unlock(&set->mutex_update);
+}
+
+/** sem-read/sem-write policy: lock entry for reading */
+static void *bcmdb_sem_read_sem_write_lock_read(bcmdb_set *set, bcmdb_key key)
+{
+    return bcmdb_sem_read_sem_write_lock(set, key, 0) ;
+}
+
+/** sem-read/sem-write policy: unlock entry for reading */
+static void bcmdb_sem_read_sem_write_unlock_read(bcmdb_set *set, bcmdb_key key)
+{
+    bcmdb_sem_read_sem_write_unlock(set);
+}
+
+/** sem-read/sem-write policy: lock entry for writing */
+static void *bcmdb_sem_read_sem_write_lock_write(bcmdb_set *set, bcmdb_key key, int is_deletion)
+{
+    return bcmdb_sem_read_sem_write_lock(set, key, is_deletion) ;
+}
+
+/** sem-read/sem-write policy: unlock entry for writing */
+static void bcmdb_sem_read_sem_write_unlock_write(bcmdb_set *set, int is_deletion, int is_cancellation)
+{
+    bcmdb_sem_read_sem_write_unlock(set);
+}
+
+/** non-blocking-read/shadow write policy: Lock entry for reading */
+static void *bcmdb_nb_read_shadow_write_lock_read(bcmdb_set *set, bcmdb_key key)
+{
+    bcmdb_entry *entry;
+    long flags;
+
+    flags = bcmos_fastlock_lock(&set->fastlock);
+    entry = set->key_to_handle(set, key);
+    if (!entry || !(entry->flags & BCMDB_FLAG_VALID))
+    {
+        bcmos_fastlock_unlock(&set->fastlock, flags);
+        return NULL;
+    }
+    ++entry->read_count;
+
+    BCMDB_TRACE_DEBUG("lock record read: %s, key=%d new_read_count=%d\n", set->name, key, entry->read_count);
+
+    bcmos_fastlock_unlock(&set->fastlock, flags);
+    return entry->data;
+}
+
+
+/** non-blocking-read/shadow write policy: Unlock entry for reading */
+static void bcmdb_nb_read_shadow_write_unlock_read(bcmdb_set *set, bcmdb_key key)
+{
+    bcmdb_entry *entry=set->key_to_handle(set, key);
+    long flags;
+    BUG_ON(!entry);
+
+    BCMDB_TRACE_DEBUG("unlock record read: %s, key=%d\n", set->name, key);
+
+    flags = bcmos_fastlock_lock(&set->fastlock);
+    /* If write is pending - finish it and release write lock */
+    BUG_ON(!entry->read_count);
+    if (!(--entry->read_count) && set->entry.write_pending)
+    {
+        BCMDB_TRACE_DEBUG("going to wake pending writer\n");
+
+        /* Write was pending. Release write task */
+        set->entry.write_pending = 0;
+        bcmos_fastlock_unlock(&set->fastlock, flags);
+        bcmos_sem_post(&set->sem_wait_read_to_finish);
+    }
+    else
+    {
+        BCMDB_TRACE_DEBUG("read_count is now: %u\n", entry->read_count);
+        bcmos_fastlock_unlock(&set->fastlock, flags);
+    }
+}
+
+/** non-blocking-read/shadow write policy: Lock entry for
+ *  writing/deletion.
+ *  returned value of NULL means error only in case that
+ *  is_deletion is 0 */
+static void *bcmdb_nb_read_shadow_write_lock_write(bcmdb_set *set, bcmdb_key key, int is_deletion)
+{
+    bcmdb_entry *entry;
+
+    BCMDB_TRACE_DEBUG("lock record write: %s, key=%d\n", set->name, key);
+
+    bcmos_mutex_lock(&set->mutex_update, BCMOS_WAIT_FOREVER);
+    BCMDB_TRACE_DEBUG("mutex was locked\n");
+
+    if (is_deletion)
+    {
+        /* there is nothing to return in deletion case */
+        return NULL;
+    }
+
+    /* this check is needed since mutex_update is task-aware.
+       it is not allowed for a task to lock for writing a 2nd record before unlocking the first one. */
+    if (set->write_locked_entry)
+    {
+        BCMDB_TRACE_ERROR("there is already an entry locked for writing\n");
+        bcmos_mutex_unlock(&set->mutex_update);
+        return NULL;
+    }
+
+    entry = set->key_to_handle(set, key);
+    if (!entry || !(entry->flags & BCMDB_FLAG_VALID))
+    {
+        bcmos_mutex_unlock(&set->mutex_update);
+        return NULL;
+    }
+    /* Copy data to shadow entry */
+    memcpy(set->shadow_data, entry->data, set->entry_size);
+    set->write_locked_entry = entry;
+    return set->shadow_data;
+}
+
+/** non-blocking-read/shadow write policy: Unlock entry for
+ *  writing/deletion */
+static void bcmdb_nb_read_shadow_write_unlock_write(bcmdb_set *set, int is_deletion, int is_cancellation)
+{
+    bcmdb_entry *entry = set->write_locked_entry;
+    long flags;
+    void *old_data;
+
+    /* no entry is locked */
+    BUG_ON(!entry);
+
+    BCMDB_TRACE_DEBUG("unlock record write: %s\n", set->name);
+
+    /* cancellation: no need to update the entry from the shadow (or to delete the entry in case of deletion). */
+    if (is_cancellation)
+    {
+        set->write_locked_entry = NULL;
+        bcmos_mutex_unlock(&set->mutex_update);
+        return;
+    }
+
+    while(1)
+    {
+        flags = bcmos_fastlock_lock(&set->fastlock);
+        /* Wait until neither record nor set are locked for reading */
+        if (!entry->read_count && !set->entry.read_count)
+            break;
+
+        /* Read lock is active. wait */
+
+        BCMDB_TRACE_DEBUG("read lock is active. going to sleep.\n");
+
+        set->entry.write_pending = 1;
+        bcmos_fastlock_unlock(&set->fastlock, flags);
+        bcmos_sem_wait(&set->sem_wait_read_to_finish, BCMOS_WAIT_FOREVER);
+    }
+
+    /* At this point there is no read lock and fastlock is taken. */
+
+    BCMDB_TRACE_DEBUG("fastlock is taken, no active reads\n");
+
+    if (is_deletion)
+    {
+        /* delete the entry */
+        set->entry_delete(set, entry);
+    }
+    else
+    {
+        /* Exchange record data with shadow and release all locks. */
+        old_data = entry->data;
+        entry->data = set->shadow_data;
+        set->shadow_data = old_data;
+        set->write_locked_entry = NULL;
+    }
+
+    bcmos_fastlock_unlock(&set->fastlock, flags);
+    bcmos_mutex_unlock(&set->mutex_update);
+    BCMDB_TRACE_DEBUG("mutex was unlocked\n");
+}
+
+/** none policy: set read-lock */
+static inline void bcmdb_set_lock_read_dummy(bcmdb_set *set)
+{
+}
+
+/** none policy: set read-unlock */
+static inline void bcmdb_set_unlock_read_dummy(bcmdb_set *set)
+{
+}
+
+/** none policy: set modify-lock */
+static inline long bcmdb_set_lock_modify_dummy(bcmdb_set *set)
+{
+    return 0;
+}
+
+/** none policy: set modify-unlock */
+static inline void bcmdb_set_unlock_modify_dummy(bcmdb_set *set, long fastlock_flags)
+{
+}
+
+/** none policy: set modify-lock recursively  */
+static void bcmdb_set_lock_recursively_modify_dummy(bcmdb_set *set)
+{
+}
+
+/** none policy: set modify-unlock recursively  */
+static void bcmdb_set_unlock_recursively_modify_dummy(bcmdb_set *set)
+{
+}
+
+/** none policy: record lock */
+static inline void *bcmdb_dummy_lock(bcmdb_set *set, bcmdb_key key, int is_deletion)
+{
+    bcmdb_entry *entry;
+
+    /* there is nothing to return in deletion case */
+    if (is_deletion)
+        return NULL;
+
+    entry = set->key_to_handle(set, key);
+    if (!entry || !(entry->flags & BCMDB_FLAG_VALID))
+        return NULL;
+    return entry->data;
+}
+
+/** none policy: record unlock */
+static inline void bcmdb_dummy_unlock(bcmdb_set *set)
+{
+}
+
+/** none policy: record lock for reading */
+static inline void *bcmdb_dummy_lock_read(bcmdb_set *set, bcmdb_key key)
+{
+    return bcmdb_dummy_lock(set, key, 0);
+}
+
+/** none policy: record unlock for reading */
+static inline void bcmdb_dummy_unlock_read(bcmdb_set *set, bcmdb_key key)
+{
+    bcmdb_dummy_unlock(set);
+}
+
+/** none policy: record lock for writing */
+static inline void *bcmdb_dummy_lock_write(bcmdb_set *set, bcmdb_key key, int is_deletion)
+{
+    return bcmdb_dummy_lock(set, key, is_deletion);
+}
+
+/** none policy: record unlock for writing */
+static inline void bcmdb_dummy_unlock_write(bcmdb_set *set, int is_deletion, int is_cancellation)
+{
+    bcmdb_dummy_unlock(set);
+}
+
+
+
+/** Add new sub-set. returns 0 if ok
+ * data contains new set handle
+ */
+static int bcmdb_set_new(bcmdb_set *this, bcmdb_key key, const void *data)
+{
+    /* Although this callback takes "const void *" parameter,
+     * it is just for compatibility fith SoR->new_entry interface.
+     * For SoS this parameter is not constant on application level
+     * (see bcmdb_set_add())
+     */
+    bcmdb_entry *entry = this->key_to_handle(this, key);
+    bcmdb_set *new_set = (bcmdb_set *)(long)data;
+
+    if (!entry)
+        return BCM_ERR_PARM;
+    if ((entry->flags & BCMDB_FLAG_VALID))
+        return BCM_ERR_ALREADY;
+    ++this->num_entries;
+    entry->data = (void *)(long)data;
+    entry->flags |= BCMDB_FLAG_VALID;
+    new_set->my_key = key;
+    new_set->parent = this;
+    return 0;
+}
+
+/** Add new record. returns 0 if ok
+ * data contains record data pointer
+ */
+static int bcmdb_record_new(bcmdb_set *this, bcmdb_key key, const void *data)
+{
+    bcmdb_record *record = (bcmdb_record *)this->key_to_handle(this, key);
+    if (!record || !record->e.data)
+        return BCM_ERR_PARM;
+    if ((record->e.flags & BCMDB_FLAG_VALID))
+        return BCM_ERR_ALREADY;
+    ++this->num_entries;
+    memcpy(record->e.data, data, this->entry_size);
+    record->e.flags |= BCMDB_FLAG_VALID;
+    return 0;
+}
+
+/** Delete entry */
+static int bcmdb_entry_delete(bcmdb_set *this, bcmdb_entry *entry)
+{
+    if (!entry)
+        return BCM_ERR_PARM;
+    if (!(entry->flags & BCMDB_FLAG_VALID))
+        return BCM_ERR_ALREADY;
+    entry->flags &= ~BCMDB_FLAG_VALID;
+    --this->num_entries;
+    return 0;
+}
+
+
+/*
+ * External APIs
+ */
+
+
+/** Initialize data base engine
+ *
+ * \return
+ *      0   - OK\n
+ *      <0  - error code
+ * \ingroup bcmdb
+ */
+int bcmdb_module_init(void)
+{
+    return 0;
+}
+
+
+/** Make set-of-sets control block.
+ *
+ * Helper function that creates a set of sets with reasonable defaults for all callbacks and fields.
+ * Once created, the set control block can be tuned before adding the new set to its parent set.
+ * \param[in]   init            set parameters
+ * \param[out]  new_set         set control block
+ * \return
+ *      0   - OK\n
+ *      <0  - error code
+ */
+int bcmdb_make_set_of_sets(const bcmdb_sos_init *init, bcmdb_set **new_set)
+{
+    bcmdb_set *sos;
+    bcmdb_entry *entries;
+    int rc;
+
+    /* Parameter check */
+    if (!init || !init->name || !new_set)
+        return BCM_ERR_PARM;
+    if ((init->backend_type == BCMDB_BACKEND_ARRAY) && !init->max_entries)
+        return BCM_ERR_PARM;
+
+    /* Allocate set control block and set records */
+    sos = bcmos_calloc(sizeof(bcmdb_set) + strlen(init->name) + 1);
+    if (!sos)
+        return BCM_ERR_NOMEM;
+    sos->name = (char *)(sos + 1);
+    strcpy(sos->name, init->name);
+    sos->entry_size = sizeof(bcmdb_set);
+    sos->max_entries = init->max_entries;
+    sos->my_key = BCMDB_KEY_INVAL;
+    sos->entry.flags = BCMDB_FLAG_SOS;
+    sos->magic = BCMDB_MAGIC_ACTIVE_SET;
+
+    /* Set backend callbacks */
+    switch(init->backend_type)
+    {
+        case BCMDB_BACKEND_ARRAY:
+            entries = bcmos_calloc(sizeof(bcmdb_set)*init->max_entries);
+            if (!entries)
+            {
+                bcmos_free(sos);
+                return BCM_ERR_NOMEM;
+            }
+            sos->entry.data = entries;
+            sos->entry_get_next = _bcmdb_array_entry_get_next;
+            sos->handle_to_key = _bcmdb_array_handle_to_key;
+            sos->key_to_handle = _bcmdb_array_key_to_handle;
+            sos->entry_new = bcmdb_set_new;
+            sos->entry_delete = bcmdb_entry_delete;
+            break;
+
+        default:
+            printf("Only array-based DB backend is supported\n");
+            bcmos_free(sos);
+            return BCM_ERR_NOT_SUPPORTED;
+    }
+
+    /* Set locking callbacks. SoS locking policy is always SEMAPHORE */
+
+    /* in SoS, locking for read is same as for write (and is done recursively). */
+    sos->lock_set_read = bcmdb_set_lock_recursively_modify_sem;
+    sos->unlock_set_read = bcmdb_set_unlock_recursively_modify_sem;
+    sos->lock_set_modify = bcmdb_set_lock_modify_sem;
+    sos->unlock_set_modify = bcmdb_set_unlock_modify_sem;
+    sos->lock_set_recursively_modify = bcmdb_set_lock_recursively_modify_sem ;
+    sos->unlock_set_recursively_modify = bcmdb_set_unlock_recursively_modify_sem ;
+
+    /* create mutex_update */
+    rc = bcmos_mutex_create(&sos->mutex_update, init->os_flags);
+    if (rc)
+    {
+        bcmos_free(entries);
+        bcmos_free(sos);
+        return BCM_ERR_NOMEM;
+    }
+
+    bcmos_fastlock_init(&sos->fastlock, init->os_flags);
+
+    *new_set = sos;
+
+    return 0;
+}
+
+
+
+
+/** Make set-of-records control block.
+ *
+ * Helper function that creates a set of records with reasonable defaults for all callbacks and fields.
+ * Once created, the set control block can be tuned before adding the new set to its parent set.
+ * \param[in]   init            set parameters
+ * \param[in]   alloc_records   true (1) - allocate memory for all records.
+ * \param[out]  new_set         set control block
+ * \return
+ *      0   - OK\n
+ *      <0  - error code
+ */
+int bcmdb_make_set_of_records(const bcmdb_sor_init *init, int alloc_records, bcmdb_set **new_set)
+{
+    bcmdb_set *sor;
+    bcmdb_entry *entries = NULL;
+    void *data = NULL;
+    int i;
+    int rc ;
+
+    /* Parameter check */
+    if (!init || !init->name)
+        return BCM_ERR_PARM;
+    if ((init->backend_type == BCMDB_BACKEND_ARRAY) && !init->max_entries)
+        return BCM_ERR_PARM;
+    if (!init->record_size)
+        return BCM_ERR_PARM;
+
+    /* Allocate set control block and set records */
+    sor = bcmos_calloc(sizeof(bcmdb_set) + strlen(init->name) + 1);
+    if (!sor)
+        return BCM_ERR_NOMEM;
+    sor->name = (char *)(sor + 1);
+    strcpy(sor->name, init->name);
+    sor->entry_size = init->record_size;
+    sor->max_entries = init->max_entries;
+    sor->my_key = BCMDB_KEY_INVAL;
+    sor->magic = BCMDB_MAGIC_ACTIVE_SET;
+    sor->format = init->format;
+
+    /* Set backend callbacks */
+    switch(init->backend_type)
+    {
+        case BCMDB_BACKEND_ARRAY:
+            entries = bcmos_calloc(sizeof(bcmdb_entry)*init->max_entries);
+            if (!entries)
+            {
+                bcmos_free(sor);
+                return BCM_ERR_NOMEM;
+            }
+            sor->entry.data = entries;
+            sor->entry_get_next = _bcmdb_array_entry_get_next;
+            sor->handle_to_key = _bcmdb_array_handle_to_key;
+            sor->key_to_handle = _bcmdb_array_key_to_handle;
+            sor->entry_new = bcmdb_record_new;
+            sor->entry_delete = bcmdb_entry_delete;
+
+            /* Preallocate data */
+            if (alloc_records)
+            {
+                int size = init->max_entries * init->record_size;
+                if (init->lock_policy == BCMDB_LOCK_NB_READ_SHADOW_WRITE)
+                    size += init->record_size; /* room for shadow entry */
+                /* Allocate data + 1 extra for shadow area */
+                data = bcmos_calloc(size);
+                if (!data)
+                {
+                    bcmos_free(entries);
+                    bcmos_free(sor);
+                    return BCM_ERR_NOMEM;
+                }
+                for(i=0; i<init->max_entries; i++)
+                {
+                    bcmdb_entry *entry = (bcmdb_entry *)sor->entry.data + i;
+                    entry->data = (void *)((long)data + i * init->record_size);
+                }
+                if (init->lock_policy == BCMDB_LOCK_NB_READ_SHADOW_WRITE)
+                {
+                    sor->shadow_data = (void *)((long)data + i * init->record_size);
+                }
+            }
+
+            /* Initialize records */
+            for(i=0; i<init->max_entries; i++)
+            {
+                bcmdb_entry *entry = (bcmdb_entry *)sor->entry.data + i;
+                entry->flags = BCMDB_FLAG_RECORD;
+            }
+            break;
+
+        default:
+            printf("Only array-based DB backend is supported\n");
+            bcmos_free(sor);
+            return BCM_ERR_NOT_SUPPORTED;
+    }
+
+    /* Set locking callbacks based on locking policy */
+    switch(init->lock_policy)
+    {
+        case BCMDB_LOCK_SEM_READ_SEM_WRITE:
+            sor->lock_record_write = bcmdb_sem_read_sem_write_lock_write;
+            sor->lock_record_read = bcmdb_sem_read_sem_write_lock_read;
+            sor->unlock_record_write = bcmdb_sem_read_sem_write_unlock_write;
+            sor->unlock_record_read = bcmdb_sem_read_sem_write_unlock_read;
+            sor->lock_set_read = bcmdb_set_lock_read_sem;
+            sor->unlock_set_read = bcmdb_set_unlock_read_sem;
+            sor->lock_set_modify = bcmdb_set_lock_modify_sem;
+            sor->unlock_set_modify = bcmdb_set_unlock_modify_sem;
+            sor->lock_set_recursively_modify = bcmdb_set_lock_recursively_modify_sem ;
+            sor->unlock_set_recursively_modify = bcmdb_set_unlock_recursively_modify_sem ;
+            break;
+
+        case BCMDB_LOCK_NONE:
+        case BCMDB_LOCK_OTHER:
+            sor->lock_record_write = bcmdb_dummy_lock_write;
+            sor->lock_record_read = bcmdb_dummy_lock_read;
+            sor->unlock_record_write = bcmdb_dummy_unlock_write;
+            sor->unlock_record_read = bcmdb_dummy_unlock_read;
+            sor->lock_set_read = bcmdb_set_lock_read_dummy;
+            sor->unlock_set_read = bcmdb_set_unlock_read_dummy;
+            sor->lock_set_modify = bcmdb_set_lock_modify_dummy;
+            sor->unlock_set_modify = bcmdb_set_unlock_modify_dummy;
+            sor->lock_set_recursively_modify = bcmdb_set_lock_recursively_modify_dummy ;
+            sor->unlock_set_recursively_modify = bcmdb_set_unlock_recursively_modify_dummy ;
+            break;
+
+        case BCMDB_LOCK_NB_READ_SHADOW_WRITE:
+            sor->lock_record_write = bcmdb_nb_read_shadow_write_lock_write;
+            sor->lock_record_read = bcmdb_nb_read_shadow_write_lock_read;
+            sor->unlock_record_write = bcmdb_nb_read_shadow_write_unlock_write;
+            sor->unlock_record_read = bcmdb_nb_read_shadow_write_unlock_read;
+            sor->lock_set_read = bcmdb_set_lock_read__nb_read_sem_write;
+            sor->unlock_set_read = bcmdb_set_unlock_read__nb_read_sem_write;
+            sor->lock_set_modify = bcmdb_set_lock_modify__nb_read_sem_write;
+            sor->unlock_set_modify = bcmdb_set_unlock_modify__nb_read_sem_write;
+            sor->lock_set_recursively_modify = bcmdb_set_lock_recursively_modify_sem ;
+            sor->unlock_set_recursively_modify = bcmdb_set_unlock_recursively_modify_sem ;
+            break;
+
+        default:
+            printf("Lock policy %d is not supported\n", init->lock_policy);
+            if (data)
+                bcmos_free(data);
+            if (entries)
+                bcmos_free(entries);
+            bcmos_free(sor);
+            return BCM_ERR_NOT_SUPPORTED;
+    }
+
+    /* create mutex_update */
+    rc = bcmos_mutex_create(&sor->mutex_update, init->os_flags);
+    if (rc)
+    {
+        if (data)
+            bcmos_free(data);
+        if (entries)
+            bcmos_free(entries);
+        bcmos_free(sor);
+        return BCM_ERR_NOMEM;
+    }
+
+    /* create sem_wait_read_to_finish. it is initialized to be taken */
+    rc = bcmos_sem_create(&sor->sem_wait_read_to_finish, 0, init->os_flags);
+    if (rc)
+    {
+        /* no point to check here the error code of bcmos_mutex_destroy */
+        bcmos_mutex_destroy(&sor->mutex_update);
+        if (data)
+            bcmos_free(data);
+        if (entries)
+            bcmos_free(entries);
+        bcmos_free(sor);
+        return BCM_ERR_NOMEM;
+    }
+
+    bcmos_fastlock_init(&sor->fastlock, init->os_flags);
+
+    *new_set = sor;
+
+    return 0;
+}
+
+
+/** Lock data set for reading. When set is locked - it can't be
+ *  modified.
+ *
+ * \param[in]   set             data base set to be locked
+ *
+ * \ingroup bcmdb
+ */
+void bcmdb_set_lock_read(bcmdb_set *set)
+{
+    BUG_ON(!set);
+    BUG_ON(!set->magic == BCMDB_MAGIC_ACTIVE_SET);
+    BUG_ON(!set->lock_set_read);
+    set->lock_set_read(set);
+}
+
+
+/** Release data set lock
+ *
+ * Unlock set locked by \ref bcmdb_set_lock_read
+ *
+ * \param[in]   set             data base set to be unlocked
+ *
+ * \ingroup bcmdb
+ */
+void bcmdb_set_unlock_read(bcmdb_set *set)
+{
+    BUG_ON(!set);
+    BUG_ON(!set->magic == BCMDB_MAGIC_ACTIVE_SET);
+    BUG_ON(!set->unlock_set_read);
+    set->unlock_set_read(set);
+}
+
+
+/** Lock data set for modify. If the set is SoS, the locking
+ *  will be recursive.
+ *
+ * \param[in]   set             data base set to be locked
+ *
+ * \ingroup bcmdb
+ */
+void bcmdb_set_lock_modify(bcmdb_set *set)
+{
+    BUG_ON(!set);
+    BUG_ON(!set->magic == BCMDB_MAGIC_ACTIVE_SET);
+    BUG_ON(!set->lock_set_recursively_modify);
+    set->lock_set_recursively_modify(set);
+}
+
+
+/** Release data set lock
+ *
+ * Unlock set locked by \ref bcmdb_set_lock_modify
+ *
+ * \param[in]   set             data base set to be unlocked
+ *
+ * \ingroup bcmdb
+ */
+void bcmdb_set_unlock_modify(bcmdb_set *set)
+{
+    BUG_ON(!set);
+    BUG_ON(!set->magic == BCMDB_MAGIC_ACTIVE_SET);
+    BUG_ON(!set->unlock_set_recursively_modify);
+    set->unlock_set_recursively_modify(set);
+}
+
+
+/** Add set to the parent set with specific key.
+ *
+ * The function adds set to the parent set creating data base hierarchy.
+ * The function automatically acquires modify lock and releases it
+ * in the end of operation.
+ * \param[in]   sos             parent set of sets
+ * \param[in]   key             key to add new set at
+ * \param[in]   new_set         set control block
+ * \return
+ *      =0  - OK\n
+ *      <0  - error code
+ * \ingroup bcmdb
+ */
+int bcmdb_set_add(bcmdb_set *sos, bcmdb_key key, bcmdb_set *new_set)
+{
+    int rc;
+    long fastlock_flags;
+    BUG_ON(!sos);
+    BUG_ON(!sos->magic == BCMDB_MAGIC_ACTIVE_SET);
+    BUG_ON(!(sos->entry.flags & BCMDB_FLAG_SOS));
+    BUG_ON(!new_set);
+    BUG_ON(!new_set->magic == BCMDB_MAGIC_ACTIVE_SET);
+    BUG_ON(!new_set->my_key == BCMDB_KEY_INVAL);
+    fastlock_flags = sos->lock_set_modify(sos);
+    rc = sos->entry_new(sos, key, new_set);
+    sos->unlock_set_modify(sos, fastlock_flags);
+    return rc;
+}
+
+
+/** Get set handle given its key.
+ *
+ * \param[in]   sos             parent set of sets
+ * \param[in]   key             set key.
+ * \return
+ *      !=0 - set handle
+ *      NULL- doesn't exist
+ * \ingroup bcmdb
+ */
+bcmdb_set *bcmdb_set_handle(const bcmdb_set *sos, bcmdb_key key)
+{
+    bcmdb_entry *entry;
+    BUG_ON(!sos);
+    BUG_ON(!sos->magic == BCMDB_MAGIC_ACTIVE_SET);
+    BUG_ON(!(sos->entry.flags & BCMDB_FLAG_SOS));
+    entry = sos->key_to_handle(sos, key);
+    if (!entry || !(entry->flags & BCMDB_FLAG_VALID))
+        return NULL;
+    return (bcmdb_set *)entry->data;
+}
+
+
+/** Get set key given its handle.
+ *
+ * \param[in]   set             set handle
+ * \param[in]   key             set key.
+ * \return
+ *      !=BCMDB_KEY_INVAL - set key
+ *      BCMDB_KEY_INVAL - error
+ * \ingroup bcmdb
+ */
+bcmdb_key bcmdb_set_key(const bcmdb_set *set)
+{
+    BUG_ON(!set);
+    BUG_ON(!set->magic == BCMDB_MAGIC_ACTIVE_SET);
+    return set->my_key;
+}
+
+
+/** Get set name
+ *
+ * \param[in]   set             set handle
+ * \return set name
+ * \ingroup bcmdb
+ */
+const char *bcmdb_set_name(const bcmdb_set *set)
+{
+    BUG_ON(!set);
+    BUG_ON(!set->magic == BCMDB_MAGIC_ACTIVE_SET);
+    return set->name;
+}
+
+
+/** Get number of records in the set.
+ *
+ * \param[in]   set             set handle
+ * \return number of active records in the set
+ * \ingroup bcmdb
+ */
+int bcmdb_set_num_records(const bcmdb_set *set)
+{
+    BUG_ON(!set);
+    BUG_ON(!set->magic == BCMDB_MAGIC_ACTIVE_SET);
+    return set->num_entries;
+}
+
+
+/** Get entry size
+ *
+ * \param[in]   set             set handle
+ * \return set entry size
+ * \ingroup bcmdb
+ */
+int bcmdb_set_entry_size(const bcmdb_set *set)
+{
+    BUG_ON(!set);
+    BUG_ON(!set->magic == BCMDB_MAGIC_ACTIVE_SET);
+    return set->entry_size;
+}
+
+
+/** Add record to the parent set with specific key.
+ *
+ * The function creates a new record and adds it to the parent set with specific key.
+ * The function automatically acquires modify lock and releases it
+ * in the end of operation.
+ * \param[in]   sor             parent set of records
+ * \param[in]   key             key to add new set at
+ * \param[in]   data            record data. Data size is defined at parent SOR registration time.
+ * \param[out]  p_record        new record handle
+ * \return
+ *      =0  - OK\n
+ *      <0  - error code
+ * \ingroup bcmdb
+ */
+int bcmdb_record_add(bcmdb_set *sor, bcmdb_key key, const void *data)
+{
+    int rc;
+    long fastlock_flags;
+
+    BUG_ON(!sor);
+    BUG_ON(!data);
+    BUG_ON(!sor->magic == BCMDB_MAGIC_ACTIVE_SET);
+    BUG_ON(!(sor->entry.flags & BCMDB_FLAG_SOS)==0);
+
+    fastlock_flags = sor->lock_set_modify(sor);
+    rc=sor->entry_new(sor, key, data);
+    sor->unlock_set_modify(sor, fastlock_flags);
+    return rc;
+}
+
+
+/** Delete record from the parent SoR given the record key.
+ *
+ * The function automatically acquires modify lock and releases it
+ * in the end of operation.
+ *
+ * \param[in]   sor             parent set of records
+ * \param[in]   key             record key.
+ */
+void bcmdb_record_delete(bcmdb_set *sor, bcmdb_key key)
+{
+    BUG_ON(!sor);
+    BUG_ON(!sor->magic == BCMDB_MAGIC_ACTIVE_SET);
+    BUG_ON(!(sor->entry.flags & BCMDB_FLAG_SOS)==0);
+
+    sor->lock_record_write(sor, key, 1);
+    sor->unlock_record_write(sor, 1, 0);
+}
+
+
+/** Get record data pointer without locking.
+ *
+ * The function returns pointer to data structure stored in data base record.\n
+ * Attention! The caller is required to aquire read or write lock - as appropriate
+ * before calling this function and release the lock when processing is finished.
+ *
+ * \param[in]   sor             parent set of records
+ * \param[in]   key             record key
+ * \return
+ *      data pointer. NULL if there is no record matching the key.
+ * \ingroup bcmdb
+ */
+void *bcmdb_record_getraw_nolock(bcmdb_set *sor, bcmdb_key key)
+{
+    bcmdb_entry *entry;
+    BUG_ON(!sor);
+    BUG_ON(!sor->magic == BCMDB_MAGIC_ACTIVE_SET);
+    BUG_ON(!(sor->entry.flags & BCMDB_FLAG_SOS)==0);
+    entry = sor->key_to_handle(sor, key);
+    if (!entry || !(entry->flags & BCMDB_FLAG_VALID))
+        return NULL;
+    return entry->data;
+}
+
+
+/** Lock record for reading and return record data pointer.
+ *
+ * The function aquires read-lock and returns pointer to data structure stored in data base record.\n
+ * read-lock must be released separately when the pointer is no longer in use.
+ * Note that the default record-read lock is non-blocking and counting.
+ * That means that multiple processes cam read-lock the same record without blocking.
+ * The function is low-level. It is recommended to use macro \ref bcmdb_record_get_read instead.
+ *
+ * \param[in]   sor             parent set of records
+ * \param[in]   key             record key
+ * \return
+ *      data pointer. NULL if there is no record matching the key.
+ * \ingroup bcmdb
+ */
+const void *bcmdb_record_getraw_read(bcmdb_set *sor, bcmdb_key key)
+{
+    BUG_ON(!sor);
+    BUG_ON(!sor->magic == BCMDB_MAGIC_ACTIVE_SET);
+    BUG_ON(!(sor->entry.flags & BCMDB_FLAG_SOS)==0);
+    return sor->lock_record_read(sor, key);
+}
+
+
+/** Unlock record locked for reading.
+ *
+ * \param[in]   sor             parent set of records
+ * \param[in]   key             record key
+ *
+ * \ingroup bcmdb
+ */
+void bcmdb_record_unlock_read(bcmdb_set *sor, bcmdb_key key)
+{
+    BUG_ON(!sor);
+    BUG_ON(!sor->magic == BCMDB_MAGIC_ACTIVE_SET);
+    BUG_ON(!(sor->entry.flags & BCMDB_FLAG_SOS)==0);
+    sor->unlock_record_read(sor, key);
+}
+
+
+/** Read record data into user area.
+ *
+ * The function aquires read-lock, reads data into user area and releases read-lock.
+ *
+ * \param[in]   sor             parent set of records
+ * \param[in]   key             record key
+ * \param[in]   offset          offset in data record
+ * \param[in]   size            data size. Note that offset+size must be <= record_size
+ * \param[in]   data            data pointer.
+ * \return
+ *      =0-OK\n
+ *      <0-error code
+ * \ingroup bcmdb
+ */
+int bcmdb_record_read(bcmdb_set *sor, bcmdb_key key, int offset, int size, void *data)
+{
+    const void *d = bcmdb_record_getraw_read(sor, key);
+    if (!d)
+        return BCM_ERR_PARM;
+    if ((unsigned)offset + (unsigned)size > sor->entry_size)
+    {
+        bcmdb_record_unlock_read(sor, key);
+        return BCM_ERR_PARM;
+    }
+    memcpy(data, (const char *)d+(unsigned)offset, (unsigned)size);
+    bcmdb_record_unlock_read(sor, key);
+    return 0;
+}
+
+
+/** Lock record for writing and return record data pointer.
+ *
+ * The function aquires write-lock and returns pointer to data structure stored in data base record.\n
+ * write-lock must be released separately when the pointer is no longer in use.
+ * The function is low-level. It is recommended to use macro \ref bcmdb_record_get_write instead.
+ *
+ * \param[in]   sor             parent set of records
+ * \param[in]   key             record key
+ * \return
+ *      data pointer. NULL if there is no record matching the key.
+ * \ingroup bcmdb
+ */
+void *bcmdb_record_getraw_write(bcmdb_set *sor, bcmdb_key key)
+{
+    BUG_ON(!sor);
+    BUG_ON(!sor->magic == BCMDB_MAGIC_ACTIVE_SET);
+    BUG_ON(!(sor->entry.flags & BCMDB_FLAG_SOS)==0);
+    return sor->lock_record_write(sor, key, 0);
+}
+
+
+/** Unlock record locked for writing.
+ *
+ * \param[in]   sor             parent set of records
+ * \param[in]   is_cancellation TRUE=cancel transaction
+ *
+ * \ingroup bcmdb
+ */
+void bcmdb_record_unlock_write(bcmdb_set *sor, int is_cancellation)
+{
+    BUG_ON(!sor);
+    BUG_ON(!sor->magic == BCMDB_MAGIC_ACTIVE_SET);
+    BUG_ON(!(sor->entry.flags & BCMDB_FLAG_SOS)==0);
+    sor->unlock_record_write(sor, 0, is_cancellation);
+}
+
+
+/** Write record data.
+ *
+ * The function aquires modify-lock, replaces data stored in data base record
+ * and releses the lock.
+ *
+ * \param[in]   sor             parent set of records
+ * \param[in]   key             record key
+ * \param[in]   offset          offset in data record
+ * \param[in]   size            data size. Note that offset+size must be <= record_size
+ * \param[in]   data            data pointer.
+ * \return
+ *      =0-OK\n
+ *      <0-error code
+ * \ingroup bcmdb
+ */
+int bcmdb_record_write(bcmdb_set *sor, bcmdb_key key, int offset, int size, const void *data)
+{
+    void *d=bcmdb_record_getraw_write(sor, key);
+    if (!d)
+        return BCM_ERR_PARM;
+    if ((unsigned)offset + (unsigned)size > sor->entry_size)
+    {
+        bcmdb_record_unlock_write(sor, 0);
+        return BCM_ERR_PARM;
+    }
+    memcpy((char *)d+(unsigned)offset, data, (unsigned)size);
+    bcmdb_record_unlock_write(sor, 0);
+    return 0;
+}
+
+
+/** Register notification function to get informed
+ * when data base set is modified.
+ *
+ * \param[in]   sor             parent set of records
+ * \param[in]   cb              callback function pointer
+ * \param[in]   cb_priv         private data that should be passed to the callback
+ * \return
+ *      =0  - OK\n
+ *      <0  - error code
+ * \ingroup bcmdb
+ */
+int bcmdb_set_notify_register(bcmdb_set *sor, bcmdb_notify_cb cb, long cb_priv)
+{
+    bcmdb_notify *nf_new, *nf, *nf_prev = NULL;
+
+    BUG_ON(!sor);
+    BUG_ON(!sor->magic == BCMDB_MAGIC_ACTIVE_SET);
+    BUG_ON(!cb);
+
+    nf_new = bcmos_calloc(sizeof(bcmdb_notify));
+    if (!nf_new)
+        return BCM_ERR_NOMEM;
+    nf_new->cb = cb;
+    nf_new->cb_priv = cb_priv;
+
+    /* Add to set's notification list */
+    nf = sor->notify_list_head;
+    while(nf)
+    {
+        nf_prev = nf;
+        nf = nf->next;
+    }
+    if (nf_prev)
+        nf_prev->next = nf_new;
+    else
+        sor->notify_list_head = nf_new;
+
+    return 0;
+}
+
+
+/** Data base iterator
+ *
+ * \param[in]   set             data base set
+ * \param[in]   prev            last entry. BCMDB_KEY_ANY=start from the beginning
+ * \return  data base entry key following prev or BCMDB_KEY_NO_MORE if end is reached.\n
+ *          BCMDB_KEY_INVAL is reqturned if prev key is invalid
+ * \ingroup bcmdb
+ */
+bcmdb_key bcmdb_set_iterate(const bcmdb_set *set, bcmdb_key prev)
+{
+    BUG_ON(!set);
+    BUG_ON(!set->magic == BCMDB_MAGIC_ACTIVE_SET);
+    return set->entry_get_next(set, prev);
+}
+
+
+/* Print database structure */
+static void _bcmdb_print_structure(const bcmdb_set *set, int level)
+{
+    int i;
+
+    if (!set)
+        return;
+
+    /* Indentation */
+    for(i=0; i<level; i++)
+        printf("\t");
+
+    if ((set->entry.flags & BCMDB_FLAG_SOS))
+    {
+        bcmdb_key key = bcmdb_set_iterate(set, BCMDB_KEY_ANY);
+        printf("%-16s SoS max_entries=%d entries=%d\n", set->name, set->max_entries, set->num_entries);
+        while(key >= 0)
+        {
+            _bcmdb_print_structure(bcmdb_set_handle(set, key), level+1);
+            key = bcmdb_set_iterate(set, key);
+        }
+    }
+    else
+    {
+        printf("%-16s SoR max_entries=%d entries=%d record_size=%d total_size=%d\n",
+               set->name, set->max_entries, set->num_entries, set->entry_size,
+               set->entry_size*set->max_entries);
+    }
+}
+
+
+/** Print database structure.
+ *
+ * \param[in]   set             root set
+ * \ingroup bcmdb
+ */
+void bcmdb_set_print_structure(const bcmdb_set *set)
+{
+    _bcmdb_print_structure(set, 0);
+}
+
+
+/** Format record for printing.
+ *
+ * The function converts record data to human-readible format.
+ *
+ * \param[in]   sor             parent set of records
+ * \param[in]   key             record key
+ * \param[out]  buffer          output buffer
+ * \param[in]   size            buffer size
+ * \return
+ *      >=0-amount of data placed in the buffer\n
+ *      <0-error code
+ */
+int bcmdb_record_read_formatted(bcmdb_set *sor, bcmdb_key key, char *buffer, int size)
+{
+    const void *data;
+    int len;
+    if (!buffer || !size)
+        return BCM_ERR_PARM;
+    if (!sor->format)
+        return BCM_ERR_NOT_SUPPORTED;
+    *buffer=0;
+    data = bcmdb_record_getraw_read(sor, key);
+    if (!data)
+        return 0;
+    len = sor->format(data, buffer, size);
+    bcmdb_record_unlock_read(sor, key);
+    return len;
+}
diff --git a/bal_release/src/common/db_engine/bcm_db_engine.h b/bal_release/src/common/db_engine/bcm_db_engine.h
new file mode 100644
index 0000000..8d77022
--- /dev/null
+++ b/bal_release/src/common/db_engine/bcm_db_engine.h
@@ -0,0 +1,622 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/*
+ * bcm_db_engine.c
+ *
+ * Data base engine
+ */
+#ifndef BCMDB_ENGINE_H
+
+#define BCMDB_ENGINE_H
+
+/**  \defgroup bcmdb_e Data Base Engine Module
+Hierarchical data base is built from 3 types of objects:
+- set: consists of control info and dynamic array of other sets OR of records of the same kind.
+    - Mixing subsets and records in the same set is not supported.
+    - Sets are objects that perform operations like access, locking, adding or removing elements,
+      etc., via methods that can differ for every set.
+    - Set elements are addressed using a single key.
+    - Most sets are internally organized as arrays. However, other organizations (e.g., lists, hash tables)
+      are also possible because each set can have different set of methods for element access.
+- record: is a container for storing information.
+    - Record consists of control info and a structure containing fields.
+    - Record is the smallest DB element that has a handle and can be individually locked.
+    - Record size is fixed at time when the set containing records is created.
+- field: is a convenience element.
+    - DB API includes field access macros for convenience and traceability.
+      Apart from that, record layout is transparent to the DB engine.
+    - DB user has an option of accessing record fields directly (as C structure fields), without using DB API
+ @{
+*/
+
+#define bcmdb_error_print(rc,format,args...)       BCMOS_TRACE_ERR("status:%s :" format, bcmos_strerror(rc), ##args)
+
+/** Data base backend type
+ */
+typedef enum
+{
+    BCMDB_BACKEND_ARRAY,    /**< Array-based backend */
+    BCMDB_BACKEND_HASH,     /**< Hash-based backend */
+    BCMDB_BACKEND_OTHER     /**< User-defined backend */
+} bcmdb_backend_type;
+
+
+/** Data locking policy
+ */
+typedef enum
+{
+    BCMDB_LOCK_NONE,                /**< No record-level locking. Can be used for records containing independent fields */
+    BCMDB_LOCK_NB_READ_SHADOW_WRITE,/**< Non-blocking read, write using shadow area (default) */
+    BCMDB_LOCK_SEM_READ_SEM_WRITE,  /**< Strong locking. Both read and write locks use semaphores */
+    BCMDB_LOCK_OTHER                /**< User-defined locking policy */
+} bcmdb_lock_policy;
+
+
+/** Data base key
+ * Valid values >= 0
+ */
+typedef int bcmdb_key;
+
+
+/** Any key
+ */
+#define BCMDB_KEY_ANY       (-1)
+
+/** Invalid key
+ */
+#define BCMDB_KEY_INVAL     (-2)
+
+/** No more records
+ */
+#define BCMDB_KEY_NO_MORE   (-3)
+
+
+ /** Data Base Set control block */
+typedef struct bcmdb_set bcmdb_set;
+
+/** Data Base Record control block */
+typedef struct bcmdb_record bcmdb_record;
+
+/** Data Base Set or Record */
+typedef struct bcmdb_entry bcmdb_entry;
+
+
+/** Data base operations for notifications.
+ */
+typedef enum
+{
+    BCMDB_OPER_ADD,         /**< Entry has been added */
+    BCMDB_OPER_DELETE,      /**< Entry has been deleted */
+    BCMDB_OPER_UPDATE       /**< Entry has been modified */
+} bcmdb_oper_t;
+
+
+/** Data base update notification callback.
+ */
+typedef void (*bcmdb_notify_cb)(bcmdb_set *set, bcmdb_key key, bcmdb_oper_t oper, void *new_data);
+
+
+/** Format callback. Used by bcmdb_record_read_formatted to convert record data to human-readible format */
+typedef int (*bcmdb_format_cb)(const void *data, char *buffer, int buffer_size);
+
+
+/** Set-of-Sets init structure.
+ */
+typedef struct bcmdb_sos_init
+{
+    const char *name;                   /**< Set name */
+    bcmdb_backend_type backend_type;    /**< Backend type */
+    uint32_t max_entries;               /**< Max number of entries. 0=unlimited (not supported for array backend) */
+    uint32_t os_flags;                  /**< OS flags. Control whether set can be accessed by multiple cores. See bcmos_mutex_create() */
+} bcmdb_sos_init;
+
+
+/** Set-of-Records init structure.
+ */
+typedef struct bcmdb_sor_init
+{
+    const char *name;                   /**< Set name */
+    bcmdb_backend_type backend_type;    /**< Backend type */
+    bcmdb_lock_policy lock_policy;      /**< Set locking policy */
+    uint32_t max_entries;               /**< Max number of entries. 0=unlimited (not supported for array backend) */
+    uint32_t record_size;               /**< Record size > 0 */
+    bcmdb_format_cb format;             /**< callback that converts record data to human-readable form */
+    uint32_t os_flags;                  /**< OS flags. Control whether set can be accessed by multiple cores. See bcmos_mutex_create() */
+} bcmdb_sor_init;
+
+
+/** Initialize data base engine
+ * 
+ * \return
+ *      0   - OK\n
+ *      <0  - error code
+ */
+int bcmdb_module_init(void);
+
+
+/** Make set-of-sets control block.
+ * 
+ * Helper function that creates a set of sets with reasonable defaults for all callbacks and fields.
+ * Once created, the set control block can be tuned before adding the new set to its parent set.
+ * \param[in]   init            set parameters
+ * \param[out]  new_set         set control block
+ * \return
+ *      0   - OK\n
+ *      <0  - error code
+ */ 
+int bcmdb_make_set_of_sets(const bcmdb_sos_init *init, bcmdb_set **new_set);
+
+
+/** Make set-of-sets control block macro.
+ *
+ * Calls \ref bcmdb_make_set_of_sets.
+ * Prints error message and jumps to error_label in case of failure.
+ * For parameter description see \ref bcmdb_make_set_of_sets
+ */
+#define BCMDB_MAKE_SOS(_name,_backend,_max_entries,_p_handle,_rc,_error_label) \
+({\
+    bcmdb_sos_init _init = { .name=_name, .max_entries=_max_entries, .backend_type=_backend};\
+    _rc = bcmdb_make_set_of_sets(&_init, _p_handle);\
+    if (_rc)\
+    {\
+        bcmdb_error_print(_rc, "failed to create set %s.\n", _name);\
+        goto _error_label;\
+    }\
+})
+
+
+/** Make set-of-records control block.
+ *
+ * Helper function that creates a set of records with reasonable defaults for all callbacks and fields.
+ * Once created, the set control block can be tuned before adding the new set to its parent set.
+ * \param[in]   init            set parameters
+ * \param[in]   alloc_records   true (1) - allocate memory for all records.
+ * \param[out]  new_set         set control block
+ * \return
+ *      0   - OK\n
+ *      <0  - error code
+ */ 
+int bcmdb_make_set_of_records(const bcmdb_sor_init *init, int alloc_records, bcmdb_set **new_set);
+
+
+/** Make set-of-records control block macro.
+ *
+ * Calls \ref bcmdb_make_set_of_records.
+ * Prints error message and jumps to error_label in case of failure.
+ * For parameter description see \ref bcmdb_make_set_of_records
+ */
+#define BCMDB_MAKE_SOR(_name,_backend,_lock,_max_entries,_rec_size,_is_alloc,_format,_p_handle,_rc,_error_label) \
+({\
+    bcmdb_sor_init _init = { .name=_name, .max_entries=_max_entries, .backend_type=_backend,\
+                               .lock_policy=_lock, .record_size=_rec_size,.format=_format};\
+    _rc = bcmdb_make_set_of_records(&_init,_is_alloc,_p_handle);\
+    if (_rc)\
+    {\
+        bcmdb_error_print(_rc, "failed to create record set %s.\n", _name);\
+        goto _error_label;\
+    }\
+})
+
+
+/** Lock data set. When set is locked - it can't be modified.
+ * 
+ * \param[in]   set             data base set to be locked
+ * 
+ */
+void bcmdb_set_lock_read(bcmdb_set *set);
+
+
+/** Release data set lock
+ *
+ * Unlock set locked by \ref bcmdb_set_lock_read
+ *
+ * \param[in]   set             data base set to be unlocked
+ */
+void bcmdb_set_unlock_read(bcmdb_set *set);
+
+
+/** Lock data set for modify. If the set is SoS, the locking
+ *  will be recursive.
+ *
+ * \param[in]   set             data base set to be locked
+ *
+ * \ingroup bcmdb
+ */
+void bcmdb_set_lock_modify(bcmdb_set *set);
+
+
+/** Release data set lock
+ *
+ * Unlock set locked by \ref bcmdb_set_lock_modify
+ *
+ * \param[in]   set             data base set to be unlocked
+ *
+ * \ingroup bcmdb
+ */
+void bcmdb_set_unlock_modify(bcmdb_set *set);
+
+
+/** Add set to the parent set.
+ *
+ * The function adds set to the parent set creating data base hierarchy.
+ * The function automatically acquires modify lock and releases it
+ * in the end of operation.
+ * \param[in]   sos             parent set of sets
+ * \param[in]   key             key to add new set at
+ * \param[in]   new_set         set control block
+ * \return
+ *      =0  - OK\n
+ *      <0  - error code
+ */
+int bcmdb_set_add(bcmdb_set *sos, bcmdb_key key, bcmdb_set *new_set);
+
+
+/** Add set to the parent set with specific key macro.
+ *
+ * Calls \ref bcmdb_set_add.
+ * Prints error message and jumps to error_label in case of failure.
+ * For parameter description see \ref bcmdb_set_add
+ */
+#define BCMDB_SET_ADD(_parent,_key,_set,_rc,_error_label) \
+({\
+    _rc = bcmdb_set_add(_parent,_key,_set);\
+    if (_rc)\
+    {\
+        bcmdb_error_print(_rc, "failed to add set %s to %s.\n", bcmdb_set_name(_set), bcmdb_set_name(_parent));\
+        goto _error_label;\
+    }\
+})
+
+
+/** Get set handle given its key.
+ *
+ * \param[in]   sos             parent set of sets
+ * \param[in]   key             set key.
+ * \return
+ *      !=0 - set handle
+ *      NULL- doesn't exist
+ */
+bcmdb_set *bcmdb_set_handle(const bcmdb_set *sos, bcmdb_key key);
+
+
+/** Get set key given its handle.
+ *
+ * \param[in]   set             set handle
+ * \return
+ *      !=BCMDB_KEY_INVAL - set key\n
+ *      BCMDB_KEY_INVAL - error
+ */
+bcmdb_key bcmdb_set_key(const bcmdb_set *set);
+
+
+/** Get set name
+ * 
+ * \param[in]   set             set handle
+ * \return set name
+ */
+const char *bcmdb_set_name(const bcmdb_set *set);
+
+
+/** Get number of records in the set.
+ *
+ * \param[in]   set             set handle
+ * \return number of active records in the set
+ */
+int bcmdb_set_num_records(const bcmdb_set *set);
+
+
+/** Get entry size
+ *
+ * \param[in]   set             set handle
+ * \return set entry size
+ */
+int bcmdb_set_entry_size(const bcmdb_set *set);
+
+
+/** Add record to the parent set.
+ *
+ * The function creates a new record and adds it to the parent set with specific key.
+ * The function automatically acquires modify lock and releases it
+ * in the end of operation.
+ * \param[in]   sor             parent set of records
+ * \param[in]   key             record key
+ * \param[in]   data            record data. Data size is defined at parent SOR registration time.
+ * \return
+ *      =0  - OK\n
+ *      <0  - error code
+ */
+int bcmdb_record_add(bcmdb_set *sor, bcmdb_key key, const void *data);
+
+
+/** Delete record from the parent SoR given the record key.
+ * 
+ * The function automatically acquires modify lock and releases it
+ * in the end of operation.
+ *
+ * \param[in]   sor             parent set of records
+ * \param[in]   key             record key.
+ */
+void bcmdb_record_delete(bcmdb_set *sor, bcmdb_key key);
+
+
+/** Get record data pointer without locking.
+ *
+ * The function returns pointer to data structure stored in data base record.\n
+ * Attention! The caller is required to aquire read or write lock - as appropriate
+ * before calling this function and release the lock when processing is finished.
+ * The function is low-level. It is recommended to use \ref bcmdb_record_get_nolock instead.
+ *
+ * \param[in]   sor             parent set of records
+ * \param[in]   key             record key
+ * \return
+ *      data pointer. NULL if there is no record matching the key.
+ */
+void *bcmdb_record_getraw_nolock(bcmdb_set *sor, bcmdb_key key);
+
+
+/** Get record data pointer without locking.
+ *
+ * The function returns pointer to data structure stored in data base record.\n
+ * Attention! The caller is required to aquire read or write lock - as appropriate
+ * before calling this function and release the lock when processing is finished.
+ *
+ * \param[in]   _sor            parent set of records
+ * \param[in]   _key            record key
+ * \param[in]   _record_type    underlying data type.
+ * \return
+ *      data pointer casted to the underlying data type\n
+ *      NULL if there is no record matching the key.
+ */
+#define bcmdb_record_get_nolock(_sor, _key, _record_type)      \
+    ({ \
+        assert(sizeof(_record_type)==bcmdb_set_entry_size(_sor)); \
+        (_record_type *)bcmdb_record_getraw_nolock(_sor, _key); \
+     })
+
+
+/** Lock record for reading and return record data pointer.
+ *
+ * The function aquires read-lock and returns pointer to data structure stored in data base record.\n
+ * read-lock must be released separately when the pointer is no longer in use.
+ * Note that the default record-read lock is non-blocking and counting.
+ * That means that multiple processes can read-lock the same record without blocking.
+ * The function is low-level. It is recommended to use macro \ref bcmdb_record_get_read instead.
+ *
+ * \param[in]   sor             parent set of records
+ * \param[in]   key             record key
+ * \return
+ *      data pointer. NULL if there is no record matching the key.
+ */
+const void *bcmdb_record_getraw_read(bcmdb_set *sor, bcmdb_key key);
+
+
+/** Lock record for reading and return record data pointer.
+ *
+ * The macro returns pointer to data structure stored in data base record.\n
+ * The read-lock must be released separately when the pointer is no longer in use.
+ * Note that the default record-read lock is non-blocking and counting.
+ * That means that multiple processes can read-lock the same record without blocking.
+ *
+ * \param[in]   _sor            parent set of records
+ * \param[in]   _key            record key
+ * \param[in]   _record_type    underlying data type.
+ * \return
+ *      data pointer casted to the underlying data type
+ */
+#define bcmdb_record_get_read(_sor, _key, _record_type) \
+    ({ \
+        assert(sizeof(_record_type)==bcmdb_set_entry_size(_sor));  \
+        (const _record_type *)bcmdb_record_getraw_read(_sor, _key);\
+     })
+
+
+/** Unlock record locked for reading.
+ *
+ * This function must be called after \ref bcmdb_record_get_read or
+ * \ref bcmdb_record_getraw_read. Following bcmdb_record_read_unlock
+ * call pointer returned by \ref bcmdb_record_get_read becomes invalid.
+ * 
+ * \param[in]   sor             parent set of records
+ * \param[in]   key             record key
+ * 
+ */
+void bcmdb_record_unlock_read(bcmdb_set *sor, bcmdb_key key);
+
+
+/** Read record data into user area.
+ *
+ * The function aquires read-lock, reads data into user area and releases read-lock.
+ *
+ * \param[in]   sor             parent set of records
+ * \param[in]   key             record key
+ * \param[in]   offset          offset in data record
+ * \param[in]   size            data size. Note that offset+size must be <= record_size
+ * \param[in]   data            data pointer.
+ * \return
+ *      =0-OK\n
+ *      <0-error code
+ */
+int bcmdb_record_read(bcmdb_set *sor, bcmdb_key key, int offset, int size, void *data);
+
+
+/** Get record field.
+ *
+ * The macro returns record field value.
+ *
+ * \param[in]   _sor            parent set of records
+ * \param[in]   _key            record key
+ * \param[in]   _record_type    type of the underlying data structure.
+ * \param[in]   _field_name     data structure field name
+ * \param[out]  _p_field_value  pointer of variable where data structure field value should be returned
+ * \return
+ *      =0-OK\n
+ *      <0-error code
+ */
+#define bcmdb_record_read_field(_sor, _key, _record_type, _field_name, _p_field_value) \
+    bcmdb_record_read(_sor, _key, offsetof(_record_type, _field_name), \
+                        sizeof(*(_p_field_value)), _p_field_value);
+
+
+/** Lock record for writing and return record data pointer.
+ *
+ * The function aquires write-lock and returns pointer to data structure stored in data base record.\n
+ * write-lock must be released separately when the pointer is no longer in use.
+ * The function is low-level. It is recommended to use macro \ref bcmdb_record_get_write instead.
+ *
+ * \param[in]   sor             parent set of records
+ * \param[in]   key             record key
+ * \return
+ *      data pointer. NULL if there is no record matching the key.
+ */
+void *bcmdb_record_getraw_write(bcmdb_set *sor, bcmdb_key key);
+
+
+/** Lock record for writing and return record data pointer.
+ *
+ * The function aquires write-lock and returns pointer to data structure stored in data base record.\n
+ * write-lock must be released separately when the pointer is no longer in use.
+ *
+ * \param[in]   _sor            parent set of records
+ * \param[in]   _key            record key
+ * \param[in]   _record_type    underlying data type.
+ * \return
+ *      data pointer casted to the underlying data type
+ */
+#define bcmdb_record_get_write(_sor, _key, _record_type)      \
+    ({ \
+        assert(sizeof(_record_type)==bcmdb_set_entry_size(_sor));   \
+        (_record_type *)bcmdb_record_getraw_write(_sor, _key);\
+     })
+
+
+/** Unlock record locked for writing.
+ *
+ * This function must be called after \ref bcmdb_record_get_write or
+ * \ref bcmdb_record_getraw_write. Following bcmdb_record_unlock_write
+ * call pointer returned by \ref bcmdb_record_get_write becomes invalid.
+ *
+ * \param[in]   sor             parent set of records
+ * \param[in]   is_cancellation TRUE=cancel transaction
+ *
+ */
+void bcmdb_record_unlock_write(bcmdb_set *sor, int is_cancellation);
+
+
+
+/** Write record data.
+ *
+ * The function aquires modify-lock, replaces data stored in data base record
+ * and releses the lock.
+ *
+ * \param[in]   sor             parent set of records
+ * \param[in]   key             record key
+ * \param[in]   offset          offset in data record
+ * \param[in]   size            data size. Note that offset+size must be <= record_size
+ * \param[in]   data            data pointer.
+ * \return
+ *      =0-OK\n
+ *      <0-error code
+ */
+int bcmdb_record_write(bcmdb_set *sor, bcmdb_key key, int offset, int size, const void *data);
+
+
+/** Write record field.
+ *
+ * The macro updates record field value.\n
+ * The macro aquires and releases record-modify lock.
+ *
+ * \param[in]   _sor            parent set of records
+ * \param[in]   _key            record key
+ * \param[in]   _record_type    type of the underlying data structure.
+ * \param[in]   _field_name     data structure field name
+ * \param[in]   _field_value    field value
+ * \return
+ *      =0-OK\n
+ *      <0-error code
+ */
+#define bcmdb_record_write_field(_sor, _key, _record_type, _field_name, _field_value) \
+    ({ \
+        typeof(((_record_type *)0)->_field_name) _f = _field_value;\
+        bcmdb_record_write(_sor, _key, offsetof(_record_type, _field_name), sizeof(_f), &_f);\
+    });
+
+
+/** Register notification function to get informed
+ * when data base set is modified.
+ *
+ * \param[in]   sor             parent set of records
+ * \param[in]   cb              callback function pointer
+ * \param[in]   cb_priv         private data that should be passed to the callback
+ * \return
+ *      =0  - OK\n
+ *      <0  - error code
+ */
+int bcmdb_set_notify_register(bcmdb_set *sor, bcmdb_notify_cb cb, long cb_priv);
+
+
+/** Data base iterator
+ *
+ * \param[in]   set             data base set
+ * \param[in]   prev            last entry. BCMDB_KEY_ANY=start from the beginning
+ * \return  data base entry key following prev or BCMDB_KEY_NO_MORE if end is reached.\n
+ *          BCMDB_KEY_INVAL is reqturned if prev key is invalid
+ */
+bcmdb_key bcmdb_set_iterate(const bcmdb_set *set, bcmdb_key prev);
+
+
+/** Print database structure.
+ *
+ * \param[in]   set             root set
+ */
+void bcmdb_set_print_structure(const bcmdb_set *set);
+
+
+/** Format record for printing.
+ *
+ * The function converts record data to human-readable format.
+ *
+ * \param[in]   sor             parent set of records
+ * \param[in]   key             record key
+ * \param[out]  buffer          output buffer
+ * \param[in]   size            buffer size
+ * \return
+ *      >=0-amount of data placed in the buffer\n
+ *      <0-error code
+ */
+int bcmdb_record_read_formatted(bcmdb_set *sor, bcmdb_key key, char *buffer, int size);
+
+
+/** @} end of bcmdb_e group */
+
+
+#endif /* #ifndef BCMDB_ENGINE_H */
+
diff --git a/bal_release/src/common/db_engine/unitest.c b/bal_release/src/common/db_engine/unitest.c
new file mode 100644
index 0000000..ca638ce
--- /dev/null
+++ b/bal_release/src/common/db_engine/unitest.c
@@ -0,0 +1,490 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/*
+ * unitest.c
+ *
+ *  Created on: 2013-12-10
+ *      Author: swallace
+ */
+
+#include "bcmos_system.h"
+#include "bcm_db_engine.h"
+
+/* EPON LLID data structure subset */
+typedef enum 
+    {
+    /* Free entry in the LLID management table, available for assignment on an
+       MPCP register request. */
+    unassigned_llid,
+    /* Locked out waiting on a timer to release the LLID */
+    not_registered_llid,
+    /* Waiting for permission to register from host */
+    ignored_llid,
+    /* LLID has been assigned to an ONU MAC but not registered. Intermediate 
+       state before the ONU returns a registration ack. */
+    wait_reg_ack_llid,
+    /* OLT link is in-service; user traffic is allowed */
+    inservice_llid,
+    wait_no_reports_llid,
+    /* The following state only applies to multicast/flood links */
+    in_service_mcast_llid,
+    /* We want a "Reserved" state for things like Optical monitoring */
+    reserved_llid,
+    /* We have detected a rogue ONU on this LLID - don't use it! */
+    quarantined_llid,
+    llid_state_count,
+    } epon_olt_llid_state;
+
+static char *get_llid_state_string(epon_olt_llid_state llid_state)
+{
+    static char *llid_state_strings[]= {
+        "unassigned",
+        "not_registered",
+        "ignored",
+        "wait_reg_ack",
+        "inservice",
+        "wait_no_reports",
+        "in_service_mcast",
+        "reserved",
+        "quarantined"
+        };
+
+    return llid_state_strings[(uint16_t)(llid_state)];
+}
+
+#define MAX_LINKS_PER_PORT  512
+#define MAX_PORTS_PER_HALF_CHIP 8 
+#define MAX_LINKS_PER_HALF_CHIP ((MAX_LINKS_PER_PORT)*(MAX_PORTS_PER_HALF_CHIP))
+
+typedef uint8_t core_epon;
+typedef uint16_t hw_link_index;
+
+typedef struct epon_db_olt_llid_rec
+    {
+    epon_olt_llid_state state;
+    core_epon epon;
+    hw_link_index index;
+    } epon_db_olt_llid_rec;
+
+
+typedef struct epon_msg_olt_llid_rec
+{
+    uint16_t index;
+    epon_db_olt_llid_rec llid_rec;
+} epon_msg_olt_llid_rec;
+
+typedef enum
+    {
+    enabled,
+    disabled,
+    } epon_olt_port_state;
+
+static char *get_port_state_string(epon_olt_port_state port_state)
+{
+    static char *port_state_strings[]= {
+        "enabled",
+        "disabled",
+        };
+
+    return port_state_strings[(uint16_t)(port_state)];
+}
+
+
+typedef struct epon_db_olt_port_rec
+    {
+    epon_olt_port_state state;
+    } epon_db_olt_port_rec;
+
+typedef struct epon_msg_olt_port_rec
+{
+    uint16_t index;
+    epon_db_olt_port_rec port_rec;
+} epon_msg_olt_port_rec;
+
+typedef enum
+{
+    epon_olt_link_record,
+    epon_olt_port_record,
+    num_db_tables,
+} db_tables;
+
+
+/*  Master database handle  */
+static bcmdb_set *db_sos_set;
+
+static bcmdb_set* epon_get_db_handle(void)
+{
+    return db_sos_set;
+}
+
+#define LINK_REC_DB() bcmdb_set *db_set = bcmdb_set_handle(epon_get_db_handle(), epon_olt_link_record)
+
+#define PORT_REC_DB bcmdb_set *db_set = bcmdb_set_handle(epon_get_db_handle(), epon_olt_port_record)
+
+/* Database test messages -   */
+typedef enum 
+    {
+    update_link_db = 20,
+    update_port_db = 21,
+    dump_db   = 30,
+    } dbtest_msgid;
+
+static inline const epon_db_olt_llid_rec *epon_olt_get_llid_rec_read(uint16_t index)
+    { 
+    LINK_REC_DB();
+    return bcmdb_record_get_read(db_set, index, epon_db_olt_llid_rec);
+    };
+
+static inline void epon_db_olt_unlock_llid_rec(uint16_t index)
+    {
+    LINK_REC_DB();
+    bcmdb_record_unlock_read(db_set, index);
+    }
+
+
+#define OltGetLlidRecWrite(index) \
+    ({ \
+    LINK_REC_DB();                                                  \
+    bcmdb_record_get_write(db_set, index, epon_db_olt_llid_rec);\
+     })
+
+#define OltCommitLlidRec(index) \
+    ({ \
+    LINK_REC_DB();                                  \
+    bcmdb_record_unlock_write(db_set, BCMOS_FALSE);\
+     })
+
+
+static void ut_dump_db(void)
+{
+    uint16_t index;
+    bcmdb_set *db_set;
+
+    db_set = bcmdb_set_handle(epon_get_db_handle(), epon_olt_port_record);
+    for (index = 0; index < MAX_PORTS_PER_HALF_CHIP; index++)
+    {
+        const epon_db_olt_port_rec *port_rec;
+        port_rec = bcmdb_record_get_read(db_set, index, epon_db_olt_port_rec);
+        BCMOS_TRACE(BCMOS_TRACE_LEVEL_INFO, 
+                    "Record %d, state %s\n", index, 
+                    get_port_state_string(port_rec->state));
+        bcmdb_record_unlock_read(db_set, index);
+    }
+
+    for (index = 0; index < MAX_LINKS_PER_HALF_CHIP; index++)
+    {
+        const epon_db_olt_llid_rec *llid_rec;
+        llid_rec = epon_olt_get_llid_rec_read(index);
+        if (llid_rec->state != unassigned_llid)
+        {
+            BCMOS_TRACE(BCMOS_TRACE_LEVEL_INFO, 
+                    "Record %d, port %d, state %s\n", llid_rec->index, 
+                    llid_rec->epon, get_llid_state_string(llid_rec->state));
+        }
+        epon_db_olt_unlock_llid_rec(index);
+    }
+
+
+}
+
+static void ut_update_link_db(epon_msg_olt_llid_rec *rec)
+{
+    epon_db_olt_llid_rec *llid_rec;
+    llid_rec=OltGetLlidRecWrite(rec->index);
+    llid_rec->state=rec->llid_rec.state;
+
+    OltCommitLlidRec(index);
+}
+
+static void ut_update_port_db(epon_msg_olt_port_rec *rec)
+{
+    bcmdb_set *db_set;
+    epon_db_olt_port_rec *port_rec;
+
+    db_set = bcmdb_set_handle(epon_get_db_handle(), epon_olt_port_record);
+    port_rec = bcmdb_record_get_write(db_set, rec->index, epon_db_olt_port_rec);
+
+    port_rec->state=rec->port_rec.state;
+
+    bcmdb_record_unlock_write(db_set, BCMOS_FALSE);
+}
+
+
+static void ut_msg_handler(dbtest_msgid id, void *data)
+    {
+    switch (id)
+        {
+        case update_link_db:
+            ut_update_link_db((epon_msg_olt_llid_rec*)data);
+            break;
+
+        case update_port_db:
+            ut_update_port_db((epon_msg_olt_port_rec*)data);
+            break;
+
+        case dump_db:
+            ut_dump_db();
+            break;
+
+        default:
+            break;
+        }
+
+    }
+
+/* Database engine unit test functions */
+static uint16_t epon_db_data_init(void)
+   {
+    uint16_t index;
+    bcmdb_set *db_set;
+    int rc = 0;
+
+    db_set = bcmdb_set_handle(epon_get_db_handle(), epon_olt_link_record);
+    for ( index = 0; 
+         (index < MAX_LINKS_PER_HALF_CHIP) && (rc >= 0) && (db_set != NULL) ; 
+          index++)
+        {
+        epon_db_olt_llid_rec llid_rec;
+
+        llid_rec.state = unassigned_llid;
+        llid_rec.epon = index/MAX_LINKS_PER_PORT;
+        llid_rec.index = index;
+        rc = bcmdb_record_add(db_set, index, (void *)&llid_rec);
+        }
+
+    db_set = bcmdb_set_handle(epon_get_db_handle(), epon_olt_port_record);
+    for ( index = 0;
+         (index < MAX_PORTS_PER_HALF_CHIP) && (rc >= 0) && (db_set != NULL) ; 
+          index++)
+        {
+        epon_db_olt_port_rec port_rec;
+        port_rec.state = disabled;
+        rc = bcmdb_record_add(db_set, index, (void *)&port_rec);
+        }
+    return rc;
+    }
+
+static int epon_db_instance_init(void)
+    {
+    bcmdb_sos_init db_sos_inst;
+    bcmdb_sor_init db_sor_inst;
+    const char* db_name = "EPON STACK";
+    const char* db_llid_name = "EPON LINK REC";
+    const char* db_eport_name = "EPON PORT REC";
+    bcmdb_set *db_sor_set;
+    int rc;
+
+    db_sos_inst.name = db_name;
+    db_sos_inst.backend_type = BCMDB_BACKEND_ARRAY;
+    db_sos_inst.max_entries = num_db_tables; 
+    rc = bcmdb_make_set_of_sets(&db_sos_inst, &db_sos_set);
+
+    if (rc >= 0)
+        {
+        db_sor_inst.name = db_llid_name;
+        db_sor_inst.backend_type = BCMDB_BACKEND_ARRAY;
+        db_sor_inst.lock_policy = BCMDB_LOCK_NB_READ_SHADOW_WRITE;
+        db_sor_inst.max_entries = MAX_LINKS_PER_HALF_CHIP; 
+        db_sor_inst.record_size = sizeof(epon_db_olt_llid_rec);
+        db_sor_inst.format = NULL;
+        bcmdb_make_set_of_records(&db_sor_inst, BCMOS_TRUE, &db_sor_set);
+        
+        rc = bcmdb_set_add(epon_get_db_handle(), 
+                           epon_olt_link_record, db_sor_set);
+        }
+    if (rc >= 0)
+        {
+        db_sor_inst.name = db_eport_name;
+        db_sor_inst.backend_type = BCMDB_BACKEND_ARRAY;
+        db_sor_inst.lock_policy = BCMDB_LOCK_NB_READ_SHADOW_WRITE;
+        db_sor_inst.max_entries = MAX_PORTS_PER_HALF_CHIP; 
+        db_sor_inst.record_size = sizeof(epon_db_olt_port_rec);
+        db_sor_inst.format = NULL;
+        rc = bcmdb_make_set_of_records(&db_sor_inst, BCMOS_TRUE, &db_sor_set);
+        }
+
+    rc = bcmdb_set_add(epon_get_db_handle(), epon_olt_port_record, db_sor_set);
+
+    BCMOS_TRACE(BCMOS_TRACE_LEVEL_INFO, "database creation returnd %d\n", rc);
+
+    if (rc >= 0)
+        {
+        rc = epon_db_data_init();
+        }
+    return rc;
+    }
+
+/* Thread handlers - so that the DB accesses can be tested across multiple
+   threads. */
+static int task1_handler(long data)
+{
+    bcmos_msg_queue *q = (bcmos_msg_queue *)data;
+    bcmos_msg *msg;
+
+    BCMOS_TRACE(BCMOS_TRACE_LEVEL_INFO, "traditional task handler\n");
+
+    while (1)
+    {
+        BCMOS_TRACE(BCMOS_TRACE_LEVEL_INFO, "Waiting for message\n");
+
+        bcmos_msg_recv(q, BCMOS_WAIT_FOREVER, &msg);
+        BCMOS_TRACE(BCMOS_TRACE_LEVEL_INFO, 
+                    "Received message ID %d, data %p\n",
+                    msg->type, msg->data);
+    
+        ut_msg_handler(msg->type, msg->data);
+        bcmos_usleep(100000);
+    }
+
+    return 0;
+}
+
+
+static bcmos_errno mod1_init(long data)
+{
+    BCMOS_TRACE(BCMOS_TRACE_LEVEL_INFO, "%ld\n", data);
+    return BCM_ERR_OK;
+}
+
+static void mod_msg_handler(bcmos_module_id module_id, bcmos_msg *msg)
+{
+    BCMOS_TRACE(BCMOS_TRACE_LEVEL_INFO, "module %d  msg %d  data %p\n", 
+                module_id, msg->type, msg->data);
+
+    ut_msg_handler(msg->type, msg->data);
+}
+
+
+
+/* Unit test function -  */
+int main(int argc, char *argv[])
+{
+    bcmos_task_parm tp = {};
+    bcmos_msg_queue_parm qp = {};
+    bcmos_module_parm mp = {};
+    bcmos_msg msg1 = {};
+    bcmos_msg msg2 = {};
+
+    bcmos_task t1;
+    bcmos_task t2;
+    bcmos_msg_queue q1;
+    bcmos_errno rc;
+    epon_msg_olt_llid_rec link_rec1, link_rec2;
+    epon_msg_olt_port_rec port_msg1, port_msg2;
+
+    bcmos_init();
+    bcmos_trace_level_set(BCMOS_TRACE_LEVEL_DEBUG);
+
+    if (epon_db_instance_init() < 0)
+        {
+        BCMOS_TRACE(BCMOS_TRACE_LEVEL_ERROR,
+                    "Could not instantiate a Database\n");
+        return BCM_ERR_NOMEM;
+        }
+    
+    BCMOS_TRACE(BCMOS_TRACE_LEVEL_INFO, "Database set %p\n", 
+                bcmdb_set_handle(db_sos_set, epon_olt_link_record));
+
+    /* Create message queue */
+    qp.name = "msg queue1";
+    qp.size = 16;
+    qp.high_wm = 14;
+    qp.low_wm = 12;
+    rc = bcmos_msg_queue_create(&q1, &qp);
+
+    /* Create a couple of threads */
+    tp.name = "task1";
+    tp.handler = task1_handler;
+    tp.data = (long)&q1;
+    rc = bcmos_task_create(&t1, &tp);
+
+    tp.name = "task2";
+    tp.handler = NULL;
+    tp.data = 0;
+    rc = bcmos_task_create(&t2, &tp);
+
+    /* Register a module */
+    mp.qparm.name = "module1";
+    mp.qparm.size = 16;
+    mp.init = mod1_init;
+    bcmos_module_create(BCMOS_MODULE_ID_TEST1, &t2, &mp);
+    
+    /* Wait some */
+    bcmos_usleep(2000000);
+
+    /*  Send a message to update the DB - enable a port*/
+    port_msg1.index=5;
+    port_msg1.port_rec.state=enabled;
+    msg1.type = update_port_db;
+    msg1.data = &port_msg1;
+    bcmos_msg_send(&q1, &msg1, BCMOS_MSG_SEND_NO_FREE_ON_ERROR);
+
+    /*  Send a message to update the DB - enable a port*/
+    port_msg2.index=3;
+    port_msg2.port_rec.state=enabled;
+    msg2.type = update_port_db;
+    msg2.data = &port_msg2;
+    bcmos_msg_send(&q1, &msg2, BCMOS_MSG_SEND_NO_FREE_ON_ERROR);
+
+    /* Wait some */
+    bcmos_usleep(2000000);
+
+    /*  Send a message to update the DB - put a link In Service*/
+    link_rec1.index=14;
+    link_rec1.llid_rec.state=inservice_llid;
+    msg1.type = update_link_db;
+    msg1.data = &link_rec1;
+    bcmos_msg_send(&q1, &msg1, BCMOS_MSG_SEND_NO_FREE_ON_ERROR);
+
+    /*  Send a message to update the DB - quarantine a link */
+    link_rec2.index=22;
+    link_rec2.llid_rec.state=quarantined_llid;
+    msg2.type = update_link_db;
+    msg2.data = &link_rec2;
+    msg2.handler = mod_msg_handler;
+    bcmos_msg_send_to_module(BCMOS_MODULE_ID_TEST1, &msg2, BCMOS_MSG_SEND_NO_FREE_ON_ERROR);
+
+    /* Wait some */
+    bcmos_usleep(2000000);
+
+    /* Send a message to dump the DB */
+    msg1.type = dump_db;
+    msg1.handler = mod_msg_handler;
+    msg1.data = NULL;
+    bcmos_msg_send_to_module(BCMOS_MODULE_ID_TEST1, &msg1, BCMOS_MSG_SEND_NO_FREE_ON_ERROR);
+
+
+    /* Wait some */
+    bcmos_usleep(2000000);
+
+    return rc;
+}
diff --git a/bal_release/src/common/debug/ipc_ping/Makefile b/bal_release/src/common/debug/ipc_ping/Makefile
new file mode 100644
index 0000000..07c2b85
--- /dev/null
+++ b/bal_release/src/common/debug/ipc_ping/Makefile
@@ -0,0 +1,36 @@
+###############################################################################
+#
+#  <:copyright-BRCM:2016:DUAL/GPL:standard
+#  
+#     Copyright (c) 2016 Broadcom
+#     All Rights Reserved
+#  
+#  Unless you and Broadcom execute a separate written software license
+#  agreement governing use of this software, this software is licensed
+#  to you under the terms of the GNU General Public License version 2
+#  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+#  with the following added to such license:
+#  
+#     As a special exception, the copyright holders of this software give
+#     you permission to link this software with independent modules, and
+#     to copy and distribute the resulting executable under terms of your
+#     choice, provided that you also meet, for each linked independent
+#     module, the terms and conditions of the license of that module.
+#     An independent module is a module which is not derived from this
+#     software.  The special exception does not apply to any modifications
+#     of the software.
+#  
+#  Not withstanding the above, under no circumstances may you combine
+#  this software in any way with any other Broadcom software provided
+#  under a license other than the GPL, without Broadcom's express prior
+#  written consent.
+#  
+#  :>
+#
+###############################################################################
+# IPC ping debug utility
+#
+MOD_NAME = ipc_ping
+MOD_TYPE = lib
+MOD_DEPS = cli
+srcs = bal_ipc_ping.c
diff --git a/bal_release/src/common/dev_log b/bal_release/src/common/dev_log
new file mode 120000
index 0000000..0c2e71e
--- /dev/null
+++ b/bal_release/src/common/dev_log
@@ -0,0 +1 @@
+../../3rdparty/maple/sdk/host_reference/dev_log
\ No newline at end of file
diff --git a/bal_release/src/common/include/Makefile b/bal_release/src/common/include/Makefile
new file mode 100644
index 0000000..46650aa
--- /dev/null
+++ b/bal_release/src/common/include/Makefile
@@ -0,0 +1,38 @@
+###############################################################################
+#
+#  <:copyright-BRCM:2016:DUAL/GPL:standard
+#  
+#     Copyright (c) 2016 Broadcom
+#     All Rights Reserved
+#  
+#  Unless you and Broadcom execute a separate written software license
+#  agreement governing use of this software, this software is licensed
+#  to you under the terms of the GNU General Public License version 2
+#  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+#  with the following added to such license:
+#  
+#     As a special exception, the copyright holders of this software give
+#     you permission to link this software with independent modules, and
+#     to copy and distribute the resulting executable under terms of your
+#     choice, provided that you also meet, for each linked independent
+#     module, the terms and conditions of the license of that module.
+#     An independent module is a module which is not derived from this
+#     software.  The special exception does not apply to any modifications
+#     of the software.
+#  
+#  Not withstanding the above, under no circumstances may you combine
+#  this software in any way with any other Broadcom software provided
+#  under a license other than the GPL, without Broadcom's express prior
+#  written consent.
+#  
+#  :>
+#
+###############################################################################
+###############################################################################
+# Common headers
+#
+MOD_NAME = common_include
+MOD_TYPE = lib
+MOD_DEPS =  
+gen_bal_hdrs = bal_model_ids.h bal_model_types.h
+
diff --git a/bal_release/src/common/include/bal_buf.h b/bal_release/src/common/include/bal_buf.h
new file mode 100644
index 0000000..c5e06f7
--- /dev/null
+++ b/bal_release/src/common/include/bal_buf.h
@@ -0,0 +1,43 @@
+#ifndef BAL_BUF
+#define BAL_BUF
+
+#include "bcmolt_buf.h"
+
+typedef bcmolt_buf bcmbal_buf;
+
+#define bcmbal_buf_init(buf, size, start)  bcmolt_buf_init(buf, size, start, BCMOLT_BUF_ENDIAN_FIXED)
+#define bcmbal_buf_alloc(buf, size)        bcmolt_buf_alloc(buf, size, BCMOLT_BUF_ENDIAN_FIXED)
+#define bcmbal_buf_free                    bcmolt_buf_free
+#define bcmbal_buf_skip                    bcmolt_buf_skip
+#define bcmbal_buf_set_pos                 bcmolt_buf_set_pos
+#define bcmbal_buf_get_used                bcmolt_buf_get_used
+#define bcmbal_buf_get_remaining_size      bcmolt_buf_get_remaining_size
+#define bcmbal_buf_write                   bcmolt_buf_write
+#define bcmbal_buf_read                    bcmolt_buf_read
+#define bcmbal_buf_rewind                  bcmolt_buf_rewind
+#define bcmbal_buf_write_u8                bcmolt_buf_write_u8
+#define bcmbal_buf_read_u8                 bcmolt_buf_read_u8
+#define bcmbal_buf_write_u16               bcmolt_buf_write_u16
+#define bcmbal_buf_read_u16                bcmolt_buf_read_u16
+#define bcmbal_buf_write_s16               bcmolt_buf_write_s16
+#define bcmbal_buf_read_s16                bcmolt_buf_read_s16
+#define bcmbal_buf_write_u24               bcmolt_buf_write_u24
+#define bcmbal_buf_read_u24                bcmolt_buf_read_u24
+#define bcmbal_buf_write_u32               bcmolt_buf_write_u32
+#define bcmbal_buf_read_u32                bcmolt_buf_read_u32
+#define bcmbal_buf_write_s32               bcmolt_buf_write_s32
+#define bcmbal_buf_read_s32                bcmolt_buf_read_s32
+#define bcmbal_buf_write_u64               bcmolt_buf_write_u64
+#define bcmbal_buf_read_u64                bcmolt_buf_read_u64
+#define bcmbal_buf_write_bool              bcmolt_buf_write_bool
+#define bcmbal_buf_read_bool               bcmolt_buf_read_bool
+#define bcmbal_buf_write_mac_address       bcmolt_buf_write_mac_address
+#define bcmbal_buf_read_mac_address        bcmolt_buf_read_mac_address
+#define bcmbal_buf_write_ipv4_address      bcmolt_buf_write_ipv4_address
+#define bcmbal_buf_read_ipv4_address       bcmolt_buf_read_ipv4_address
+#define bcmbal_buf_write_ipv6_address      bcmolt_buf_write_ipv6_address
+#define bcmbal_buf_read_ipv6_address       bcmolt_buf_read_ipv6_address
+#define bcmbal_buf_write_vlan_tag          bcmolt_buf_write_vlan_tag
+#define bcmbal_buf_read_vlan_tag           bcmolt_buf_read_vlan_tag
+
+#endif /* BAL_BUF */
diff --git a/bal_release/src/common/include/bal_common.h b/bal_release/src/common/include/bal_common.h
new file mode 100644
index 0000000..c5a2558
--- /dev/null
+++ b/bal_release/src/common/include/bal_common.h
@@ -0,0 +1,317 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file bal_common.h
+ *
+ * @brief Common include files and miscellaneous macros for the BAL source code.
+ *
+ */
+
+#ifndef	BALCOMMON_H
+#define	BALCOMMON_H
+
+/*@{*/
+
+/* --- system includes ---*/
+#include <bcmos_system.h>
+
+/* --- project includes ---*/
+
+/**
+ * @brief OUI Identifier
+ *  
+ */  
+typedef uint8_t oui_val_t[3];
+
+/*
+ * A max/min function
+ */
+#define max(a,b) ((a > b) ? a : b)
+#define min(a,b) ((a > b) ? b : a)
+
+/**
+ *  @brief Maximum value for a VLAN ID
+ */
+#define MAX_VLAN_ID 4094
+
+/**
+ *  @brief Minimum value for an 802.1ah I-SID
+ *
+ *  Notes from IEEE:
+ *      0      - Reserved for use by future amendments to the standard.
+ *      1      - Default value, unassigned ISID.
+ *      2..FF  - Reserved for use by future amendments to the standard.
+ */
+#define MIN_8021AH_ISID 0x00000100
+
+/**
+ *  @brief Maximum value for an 802.1ah I-SID
+ *
+ *  Notes from IEEE:
+ *      FFFFFF is reserved by IEEE
+ */
+#define MAX_8021AH_ISID 0x00FFFFFE
+
+/**
+ * @brief VLAN TPID definitions
+ */
+typedef enum vlan_tpid_type
+{
+    VLAN_TPID_TYPE_DEFAULT = 0x0000,     /**< Simple Bridge - i.e. VID 0, no tagging */
+    VLAN_TPID_TYPE_8021Q   = 0x8100,     /**< C-VLAN */
+    VLAN_TPID_TYPE_8021AD  = 0x88A8,     /**< S-VLAN */
+    VLAN_TPID_TYPE_9100    = 0x9100,     /**< Legacy TPID */
+    VLAN_TPID_TYPE_9200    = 0x9200,     /**< Legacy TPID */
+    VLAN_TPID_TYPE_9300    = 0x9300,     /**< Legacy TPID */
+    VLAN_TPID_TYPE_8021AH_ITAG = 0x88E7  /**< 802.1ah I-Tag TPID */
+} vlan_tpid_type;
+
+/**
+ * @brief VLAN type definitions
+ */
+typedef enum vlan_mode_type
+{
+    VLAN_MODE_NONE,       /**< Neither Shared or L2VPN */
+    VLAN_MODE_SHARED,     /**< IP-based shared vlan */
+    VLAN_MODE_8021AD_EN,  /**< DPoE 802.1ad (or .1q) encapsulation mode */
+    VLAN_MODE_8021AD_TP,  /**< DPoE 802.1ad (or .1q) transport mode */
+    VLAN_MODE_8021AH_EN,  /**< DPoE 802.1ah encapsulation mode */
+    VLAN_MODE_8021AH_TP,  /**< DPoE 802.1ah transport mode */
+    VLAN_MODE_DAC         /**< DPoE DEMARC Auto Configuration */
+} vlan_mode;
+
+/**
+ * @brief Macro to test if a VLAN is 802.1ad
+ */
+#define VLAN_IS_8021AD(_vlan_) (((_vlan_)->type == VLAN_MODE_8021AD_EN) || ((_vlan_)->type == VLAN_MODE_8021AD_TP))
+
+/**
+ * @brief Macro to test if a VLAN is 802.1ah
+ */
+#define VLAN_IS_8021AH(_vlan_) (((_vlan_)->type == VLAN_MODE_8021AH_EN) || ((_vlan_)->type == VLAN_MODE_8021AH_TP))
+
+/**
+ * @brief Macro to test if a VLAN is L2VPN (as opposed to 'None' or "Shared')
+ */
+#define VLAN_IS_L2VPN(_vlan_) (VLAN_IS_8021AD(_vlan_) || VLAN_IS_8021AH(_vlan_))
+
+/**
+ * @brief Macro to test if a VLAN is DPoE IP-HSD
+ */
+#define VLAN_IS_DPOE_IPHSD(_vlan_) (((_vlan_)->type == VlanType_None) && ((_vlan_)->dpoeIp.svid != 0) && ((_vlan_)->dpoeIp.cvid != 0))
+
+/**
+ * @brief Macro to test if a VLAN is Legacy IP-HSD
+ */
+#define VLAN_IS_LEGACY_IPHSD(_vlan_) (((_vlan_)->type == VlanType_None) && ((_vlan_)->dpoeIp.svid == 0))
+
+/**
+ * @brief Macro to test if a VLAN is DPoE IP-HSD with PON-NNI style tagging
+ */
+#define VLAN_IS_DPOE_IPHSD_PON_NNI(_vlan_) (VLAN_IS_DPOE_IPHSD(_vlan_) && ((_vlan_)->dot1ad[VLAN_TAG_OUTER].nniTpid != 0))
+
+/**
+ * @brief Macro to test if a VLAN is Shared
+ */
+#define VLAN_IS_SHARED(_vlan_) ((_vlan_)->type == VLAN_MODE_SHARED)
+
+/**
+ * @brief 802.1ad VLAN Tag index
+ *
+ * This enum is used in the VlanT structure to address the outer vs. the inner
+ * 802.1ad tag.
+ */
+typedef enum vlan_tag_index
+{
+    VLAN_TAG_INDEX_OUTER = 0,  /**< Outer tag, typically the S-VLAN tag */
+    VLAN_TAG_INDEX_INNER = 1,  /**< Inner tag, typically the C-VLAN tag */
+    VLAN_TAG_INDEX_MAX   = 2
+} vlan_tag_index;
+
+/**
+ * @brief VlanT structure
+ */
+typedef struct bcmbal_vlan
+{
+    vlan_mode    type;     /**< Type of VLAN */
+
+    /** Intra-Chassis Tagging */
+    struct
+    {
+        uint16_t tpid;          /**< ICT TPID */
+        uint16_t vid;           /**< ICT VLAN ID */
+    } ict;
+
+    /** DPoE IP HSD Tagging */
+    struct
+    {
+        uint16_t svid;          /**< S-TAG VID */
+        uint16_t cvid;          /**< C-TAG VID */
+    } dpoe_ip;
+
+    /** 802.1ad (and 802.1q) tagging */
+    struct
+    {
+        uint16_t nni_tpid;       /**< VLAN Tag TPID used on the NNI */
+        uint16_t uni_tpid;       /**< VLAN Tag TPID used on the UNI */
+        uint8_t  cos;           /**< CoS bits used in this VLAN Tag */
+        uint16_t vid;           /**< VLAN ID */
+    } dot_1ad[VLAN_TAG_INDEX_MAX];
+
+    /** 802.1ah encapsulation info */
+    struct
+    {
+        /** 802.1ah B-MACs */
+        bcmos_mac_address bda;   /**< 802.1ah Destination B-MAC */
+        bcmos_mac_address bsa;   /**< 802.1ah Source B-MAC */
+
+        /** 802.1ah B-Tag */
+        struct
+        {
+            uint16_t nni_tpid;   /**< B-Tag TPID used on the NNI */
+            uint16_t uni_tpid;   /**< B-Tag TPID used on the UNI */
+            uint16_t vid;       /**< B-Tag VLAN ID */
+        } btag;
+
+        /** 802.1ah I-Tag */
+        struct
+        {
+            uint16_t nni_tpid;   /**< I-Tag TPID used on the NNI */
+            uint16_t uni_tpid;   /**< I-Tag TPID used on the UNI */
+            uint32_t isid;      /**< I-Tag Service ID */
+        } itag;
+    } dot_1ah;
+
+    /** L2VPN specific VLAN configuration */
+    uint32_t         vpn_idx; /**< Index of L2VPN that link is associated with. */
+} bcmbal_vlan;
+
+/**
+ * @brief MAC Address key structure.
+ *
+ * This structure effectively adds a length field to the MacAddressT structure
+ * which helps when handling GetNext requests that don't contain a full MAC
+ * Address.
+ */
+typedef struct mac_address_key
+{
+    bcmos_mac_address mac_addr;  /**< The MAC address */
+    uint16_t         len;        /**< The length of the MAC address in the field above */
+} mac_address_key;
+
+/**
+ * @brief MAC Address length
+ */
+#define MAC_ADDRESS_LEN 6
+
+/**
+ * @brief Converts a MacAddressT structure into a MacAddressKeyT structure.
+ */
+#define MAC_ADDR_TO_KEY(A, K, L) {              \
+        (K)->mac_addr = *(A);                    \
+        (K)->len = (L);                         \
+    }
+
+/**
+ *  @brief Compares the 802.1ad (or q) fields of two VlanT objects
+ *
+ *  This macro returns '1' if all fields match, and '0' otherwise.
+ *
+ *  Note, this macro looks at the nniTpid only. This macro is used to determine
+ *  whether or not an OLT Domain already exists for a given VLAN (which prevents
+ *  configuring duplicate/overlapping OLT domain selectors).
+ *
+ */
+#define VLANS_MATCH_AD(_vlan1_, _vlan2_) (((_vlan1_)->dot1ad[VLAN_TAG_OUTER].vid     == (_vlan2_)->dot1ad[VLAN_TAG_OUTER].vid) && \
+                                          ((_vlan1_)->dot1ad[VLAN_TAG_OUTER].nniTpid == (_vlan2_)->dot1ad[VLAN_TAG_OUTER].nniTpid) && \
+                                          ((_vlan1_)->dot1ad[VLAN_TAG_INNER].vid     == (_vlan2_)->dot1ad[VLAN_TAG_INNER].vid) && \
+                                          ((_vlan1_)->dot1ad[VLAN_TAG_INNER].nniTpid == (_vlan2_)->dot1ad[VLAN_TAG_INNER].nniTpid))
+
+/**
+ *  @brief Compares the 802.1ah (mac-in-mac) fields of two VlanT objects
+ *
+ *  This macro returns '1' if all fields match, and '0' otherwise.
+ *
+ *  Note, this macro looks at the nniTpid's only. This macro is used to
+ *  determine whether or not an OLT Domain already exists for a given VLAN
+ *  (which prevents configuring duplicate/overlapping OLT domain selectors).
+ *
+ */
+#define VLANS_MATCH_AH(_vlan1_, _vlan2_) (((_vlan1_)->dot1ah.btag.nniTpid == (_vlan2_)->dot1ah.btag.nniTpid) && \
+                                          ((_vlan1_)->dot1ah.btag.vid == (_vlan2_)->dot1ah.btag.vid) && \
+                                          ((_vlan1_)->dot1ah.itag.nniTpid == (_vlan2_)->dot1ah.itag.nniTpid) && \
+                                          ((_vlan1_)->dot1ah.itag.isid == (_vlan2_)->dot1ah.itag.isid))
+
+/**
+ *  @brief Compares the ICT fields of two VlanT objects
+ *
+ *  This macro returns '1' if all fields match, and '0' otherwise.
+ *
+ *  Note, this macro looks at the ICT fields only. This macro is
+ *  used to determine whether or not an OLT Domain already
+ *  exists for a given VLAN (which prevents configuring
+ *  duplicate/overlapping OLT domain selectors).
+ *
+ */
+#define VLANS_MATCH_ICT(_vlan1_, _vlan2_) (((_vlan1_)->ict.tpid == (_vlan2_)->ict.tpid) && \
+                                           ((_vlan1_)->ict.vid == (_vlan2_)->ict.vid))
+/**
+ *  @brief Compares the 802.1ad (or q) and 802.1ah (mac-in-mac)
+ *         fields of two VlanT objects
+ *
+ *  This macro returns '1' if all fields match, and '0' otherwise.
+ *
+ */
+#define VLANS_MATCH(_vlan1_, _vlan2_) (VLANS_MATCH_AD(_vlan1_, _vlan2_) && VLANS_MATCH_AH(_vlan1_, _vlan2_))
+
+/**
+ *  @brief Macros for setting/clearing bits inside of an integer
+ */
+#define SET_BIT(x,n)    ((x) |= (1L << (n)))
+#define CLR_BIT(x,n)    ((x) &= (~(1L << (n))))
+#define BIT_IS_SET(x,n) (((x) >> (n)) & 1)
+
+
+
+/**
+ *  Static compile time assert used to ensure that enums and associated
+ *  character arrays are equal.
+ *
+ *  Use the BAL_STATIC_ASSERT function in your code to check array sizes
+ */
+#define _BAL_STATIC_ASSERT_HELPER(expr, msg) (sizeof (struct {unsigned int STATIC_ASSERT__##msg: (expr) ? 1 : -1;} ))
+
+#define BAL_STATIC_ASSERT(expr, msg) extern int (*assert_function__##msg(void)) [_BAL_STATIC_ASSERT_HELPER(expr, msg) ]
+
+/*@}*/
+
+#endif /* #ifndef BALCOMMON_H */
diff --git a/bal_release/src/common/include/bal_ids.h b/bal_release/src/common/include/bal_ids.h
new file mode 100644
index 0000000..e4239e6
--- /dev/null
+++ b/bal_release/src/common/include/bal_ids.h
@@ -0,0 +1,46 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file bal_ids.h
+ * @brief BAL IDs used in the system
+ *
+ * This file contains all of the  BAL IDs used in the system
+ *
+ */
+#ifndef	BALIDS_H
+#define	BALIDS_H
+
+/*@{*/
+
+/*@}*/
+
+#endif /* #ifndef BALIDS_H */
diff --git a/bal_release/src/common/include/bal_model_ids.h b/bal_release/src/common/include/bal_model_ids.h
new file mode 100644
index 0000000..218b74e
--- /dev/null
+++ b/bal_release/src/common/include/bal_model_ids.h
@@ -0,0 +1,714 @@
+#ifndef BAL_MODEL_IDS_H_
+#define BAL_MODEL_IDS_H_
+
+/** \ingroup object_model_data_types
+ * \defgroup object_model_enums BAL Object Model Enumerations
+ */
+
+/** \addtogroup object_model_enums
+ * @{
+ */
+#include <bcmos_system.h>
+
+/** Identifiers for all properties contained in the access_terminal_cfg group. 
+ */
+typedef enum bcmbal_access_terminal_cfg_id
+{
+    BCMBAL_ACCESS_TERMINAL_CFG_ID_ADMIN_STATE   = 0,    /**< Administrative state. */
+    BCMBAL_ACCESS_TERMINAL_CFG_ID_OPER_STATUS   = 1,    /**< Operational status. */
+    BCMBAL_ACCESS_TERMINAL_CFG_ID_IWF_MODE      = 2,    /**< Interworking function mode. */
+    BCMBAL_ACCESS_TERMINAL_CFG_ID__NUM_OF               /**< Number of enum entries, not an entry itself. */
+} bcmbal_access_terminal_cfg_id;
+
+/** Identifiers for all properties contained in the access_terminal_ind group. 
+ */
+typedef enum bcmbal_access_terminal_ind_id
+{
+    BCMBAL_ACCESS_TERMINAL_IND_ID_ADMIN_STATE   = 0,    /**< Administrative state. */
+    BCMBAL_ACCESS_TERMINAL_IND_ID_OPER_STATUS   = 1,    /**< Operational status. */
+    BCMBAL_ACCESS_TERMINAL_IND_ID_IWF_MODE      = 2,    /**< Interworking function mode. */
+    BCMBAL_ACCESS_TERMINAL_IND_ID__NUM_OF               /**< Number of enum entries, not an entry itself. */
+} bcmbal_access_terminal_ind_id;
+
+/** Identifiers for all properties contained in the access_terminal_key group. 
+ */
+typedef enum bcmbal_access_terminal_key_id
+{
+    BCMBAL_ACCESS_TERMINAL_KEY_ID_ACCESS_TERM_ID= 0,    /**< access_term_id. */
+    BCMBAL_ACCESS_TERMINAL_KEY_ID__NUM_OF               /**< Number of enum entries, not an entry itself. */
+} bcmbal_access_terminal_key_id;
+
+/** Identifiers for all properties contained in the flow_cfg group. 
+ */
+typedef enum bcmbal_flow_cfg_id
+{
+    BCMBAL_FLOW_CFG_ID_ADMIN_STATE              = 0,    /**< Administrative state. */
+    BCMBAL_FLOW_CFG_ID_OPER_STATUS              = 1,    /**< Operational status. */
+    BCMBAL_FLOW_CFG_ID_ACCESS_INT_ID            = 2,    /**< Access Interface ID. */
+    BCMBAL_FLOW_CFG_ID_NETWORK_INT_ID           = 3,    /**< Network Interface ID. */
+    BCMBAL_FLOW_CFG_ID_SUB_TERM_ID              = 4,    /**< Subscriber Terminal ID. */
+    BCMBAL_FLOW_CFG_ID_SUB_TERM_UNI_IDX         = 5,    /**< Subscriber Terminal uni port index. */
+    BCMBAL_FLOW_CFG_ID_SVC_PORT_ID              = 6,    /**< Service Port ID. */
+    BCMBAL_FLOW_CFG_ID_AGG_PORT_ID              = 7,    /**< Aggregate port ID. */
+    BCMBAL_FLOW_CFG_ID_RESOLVE_MAC              = 8,    /**< Resolve mac. */
+    BCMBAL_FLOW_CFG_ID_CLASSIFIER               = 9,    /**< Classifier. */
+    BCMBAL_FLOW_CFG_ID_ACTION                   = 10,   /**< Action. */
+    BCMBAL_FLOW_CFG_ID_SLA                      = 11,   /**< SLA. */
+    BCMBAL_FLOW_CFG_ID_COOKIE                   = 12,   /**< Cookie. */
+    BCMBAL_FLOW_CFG_ID_PRIORITY                 = 13,   /**< Priority. */
+    BCMBAL_FLOW_CFG_ID_GROUP_ID                 = 14,   /**< Group ID. */
+    BCMBAL_FLOW_CFG_ID_QUEUE                    = 15,   /**< Egress queue. */
+    BCMBAL_FLOW_CFG_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmbal_flow_cfg_id;
+
+/** Identifiers for all properties contained in the flow_ind group. 
+ */
+typedef enum bcmbal_flow_ind_id
+{
+    BCMBAL_FLOW_IND_ID_ADMIN_STATE              = 0,    /**< Administrative state. */
+    BCMBAL_FLOW_IND_ID_OPER_STATUS              = 1,    /**< Operational status. */
+    BCMBAL_FLOW_IND_ID_ACCESS_INT_ID            = 2,    /**< Access interface ID. */
+    BCMBAL_FLOW_IND_ID_NETWORK_INT_ID           = 3,    /**< Network Interface ID. */
+    BCMBAL_FLOW_IND_ID_SUB_TERM_ID              = 4,    /**< Subscriber terminal ID. */
+    BCMBAL_FLOW_IND_ID_SVC_PORT_ID              = 5,    /**< Service port ID. */
+    BCMBAL_FLOW_IND_ID_AGG_PORT_ID              = 6,    /**< Aggregate port ID. */
+    BCMBAL_FLOW_IND_ID_RESOLVE_MAC              = 7,    /**< Resolve mac. */
+    BCMBAL_FLOW_IND_ID_BASE_TC_ID               = 8,    /**< Base TCONT ID. */
+    BCMBAL_FLOW_IND_ID_CLASSIFIER               = 9,    /**< Classifier. */
+    BCMBAL_FLOW_IND_ID_ACTION                   = 10,   /**< Action. */
+    BCMBAL_FLOW_IND_ID_SLA                      = 11,   /**< SLA. */
+    BCMBAL_FLOW_IND_ID_COOKIE                   = 12,   /**< Cookie. */
+    BCMBAL_FLOW_IND_ID_PRIORITY                 = 13,   /**< Priority. */
+    BCMBAL_FLOW_IND_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmbal_flow_ind_id;
+
+/** Identifiers for all properties contained in the flow_key group. 
+ */
+typedef enum bcmbal_flow_key_id
+{
+    BCMBAL_FLOW_KEY_ID_FLOW_ID                  = 0,    /**< Flow ID. */
+    BCMBAL_FLOW_KEY_ID_FLOW_TYPE                = 1,    /**< Flow type. */
+    BCMBAL_FLOW_KEY_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmbal_flow_key_id;
+
+/** Identifiers for all properties contained in the flow_stat group. 
+ */
+typedef enum bcmbal_flow_stat_id
+{
+    BCMBAL_FLOW_STAT_ID_RX_PACKETS              = 0,    /**< Received packets. */
+    BCMBAL_FLOW_STAT_ID_RX_BYTES                = 1,    /**< Received bytes. */
+    BCMBAL_FLOW_STAT_ID_TX_PACKETS              = 2,    /**< Transmitted packets. */
+    BCMBAL_FLOW_STAT_ID_TX_BYTES                = 3,    /**< Transmitted bytes. */
+    BCMBAL_FLOW_STAT_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmbal_flow_stat_id;
+
+/** Identifiers for all properties contained in the group_cfg group. 
+ */
+typedef enum bcmbal_group_cfg_id
+{
+    BCMBAL_GROUP_CFG_ID_MEMBERS_CMD             = 0,    /**< Membership operation commands. */
+    BCMBAL_GROUP_CFG_ID_MEMBERS                 = 1,    /**< Member. */
+    BCMBAL_GROUP_CFG_ID_COOKIE                  = 2,    /**< Application cookie. */
+    BCMBAL_GROUP_CFG_ID_FLOWS                   = 3,    /**< List of flows associated with the group . */
+    BCMBAL_GROUP_CFG_ID_OWNER                   = 4,    /**< Owner of the group. */
+    BCMBAL_GROUP_CFG_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmbal_group_cfg_id;
+
+/** Identifiers for all properties contained in the group_key group. 
+ */
+typedef enum bcmbal_group_key_id
+{
+    BCMBAL_GROUP_KEY_ID_GROUP_ID                = 0,    /**< Group ID. */
+    BCMBAL_GROUP_KEY_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmbal_group_key_id;
+
+/** Identifiers for all properties contained in the interface_cfg group. 
+ */
+typedef enum bcmbal_interface_cfg_id
+{
+    BCMBAL_INTERFACE_CFG_ID_ADMIN_STATE         = 0,            /**< Administrative state. */
+    BCMBAL_INTERFACE_CFG_ID_OPER_STATUS         = 1,            /**< Operational status. */
+    BCMBAL_INTERFACE_CFG_ID_MIN_DATA_AGG_PORT_ID= 2,            /**< Minimum aggregate port ID. */
+    BCMBAL_INTERFACE_CFG_ID_MIN_DATA_SVC_PORT_ID= 3,            /**< Minimum service port ID. */
+    BCMBAL_INTERFACE_CFG_ID_TRANSCEIVER_TYPE    = 4,            /**< Transceiver type. */
+    BCMBAL_INTERFACE_CFG_ID_DS_MISS_MODE        = 5,            /**< Downstream unknown packet action. */
+    BCMBAL_INTERFACE_CFG_ID_MTU                 = 6,            /**< MTU. */
+    BCMBAL_INTERFACE_CFG_ID_FLOW_CONTROL        = 7,            /**< Flow control. */
+    BCMBAL_INTERFACE_CFG_ID_DS_TM               = 8,            /**< Downstream scheduler and shaper. */
+    BCMBAL_INTERFACE_CFG_ID_US_TM               = 9,            /**< Upstream scheduler and shaper. */
+    BCMBAL_INTERFACE_CFG_ID_SUB_TERM_ID_LIST    = 10,           /**< Sub-term id list. */
+    BCMBAL_INTERFACE_CFG_ID__NUM_OF                             /**< Number of enum entries, not an entry itself. */
+} bcmbal_interface_cfg_id;
+
+/** Identifiers for all properties contained in the interface_ind group. 
+ */
+typedef enum bcmbal_interface_ind_id
+{
+    BCMBAL_INTERFACE_IND_ID_ADMIN_STATE         = 0,            /**< Administrative state. */
+    BCMBAL_INTERFACE_IND_ID_OPER_STATUS         = 1,            /**< Operational status. */
+    BCMBAL_INTERFACE_IND_ID_MIN_DATA_AGG_PORT_ID= 2,            /**< Minimum aggregate port ID. */
+    BCMBAL_INTERFACE_IND_ID_MIN_DATA_SVC_PORT_ID= 3,            /**< Minimum service port ID. */
+    BCMBAL_INTERFACE_IND_ID_TRANSCEIVER_TYPE    = 4,            /**< Transceiver type. */
+    BCMBAL_INTERFACE_IND_ID_DS_MISS_MODE        = 5,            /**< Downstream unknown packet action. */
+    BCMBAL_INTERFACE_IND_ID_MTU                 = 6,            /**< MTU. */
+    BCMBAL_INTERFACE_IND_ID_FLOW_CONTROL        = 7,            /**< Flow control. */
+    BCMBAL_INTERFACE_IND_ID_DS_TM               = 8,            /**< Downstream scheduler and shaper. */
+    BCMBAL_INTERFACE_IND_ID_US_TM               = 9,            /**< Upstream scheduler and shaper. */
+    BCMBAL_INTERFACE_IND_ID__NUM_OF                             /**< Number of enum entries, not an entry itself. */
+} bcmbal_interface_ind_id;
+
+/** Identifiers for all properties contained in the interface_key group. 
+ */
+typedef enum bcmbal_interface_key_id
+{
+    BCMBAL_INTERFACE_KEY_ID_INTF_ID             = 0,            /**< intf_id. */
+    BCMBAL_INTERFACE_KEY_ID_INTF_TYPE           = 1,            /**< intf_type. */
+    BCMBAL_INTERFACE_KEY_ID__NUM_OF                             /**< Number of enum entries, not an entry itself. */
+} bcmbal_interface_key_id;
+
+/** Identifiers for all properties contained in the interface_stat group. 
+ */
+typedef enum bcmbal_interface_stat_id
+{
+    BCMBAL_INTERFACE_STAT_ID_RX_PACKETS         = 0,            /**< Recieved packets. */
+    BCMBAL_INTERFACE_STAT_ID_RX_BYTES           = 1,            /**< Received bytes. */
+    BCMBAL_INTERFACE_STAT_ID_TX_PACKETS         = 2,            /**< Transmitted packets. */
+    BCMBAL_INTERFACE_STAT_ID_TX_BYTES           = 3,            /**< Transmitted bytes. */
+    BCMBAL_INTERFACE_STAT_ID__NUM_OF                            /**< Number of enum entries, not an entry itself. */
+} bcmbal_interface_stat_id;
+
+/** Identifiers for all properties contained in the packet_cfg group. 
+ */
+typedef enum bcmbal_packet_cfg_id
+{
+    BCMBAL_PACKET_CFG_ID_FLOW_ID                = 0,            /**< Flow Id. */
+    BCMBAL_PACKET_CFG_ID_FLOW_TYPE              = 1,            /**< Flow Type. */
+    BCMBAL_PACKET_CFG_ID_INTF_ID                = 2,            /**< Interface ID. */
+    BCMBAL_PACKET_CFG_ID_INTF_TYPE              = 3,            /**< Interface Type. */
+    BCMBAL_PACKET_CFG_ID_SVC_PORT               = 4,            /**< Service Port. */
+    BCMBAL_PACKET_CFG_ID_FLOW_COOKIE            = 5,            /**< Flow Cookie. */
+    BCMBAL_PACKET_CFG_ID_PKT                    = 6,            /**< Packet Data. */
+    BCMBAL_PACKET_CFG_ID__NUM_OF                                /**< Number of enum entries, not an entry itself. */
+} bcmbal_packet_cfg_id;
+
+/** Identifiers for all properties contained in the packet_ind group. 
+ */
+typedef enum bcmbal_packet_ind_id
+{
+    BCMBAL_PACKET_IND_ID_FLOW_ID                = 0,            /**< Flow Id. */
+    BCMBAL_PACKET_IND_ID_FLOW_TYPE              = 1,            /**< Flow Type. */
+    BCMBAL_PACKET_IND_ID_INTF_ID                = 2,            /**< Interface ID. */
+    BCMBAL_PACKET_IND_ID_INTF_TYPE              = 3,            /**< Interface Type. */
+    BCMBAL_PACKET_IND_ID_SVC_PORT               = 4,            /**< Service Port. */
+    BCMBAL_PACKET_IND_ID_FLOW_COOKIE            = 5,            /**< Flow Cookie. */
+    BCMBAL_PACKET_IND_ID_PKT                    = 6,            /**< Packet Data. */
+    BCMBAL_PACKET_IND_ID__NUM_OF                                /**< Number of enum entries, not an entry itself. */
+} bcmbal_packet_ind_id;
+
+/** Identifiers for all properties contained in the packet_key group. 
+ */
+typedef enum bcmbal_packet_key_id
+{
+    BCMBAL_PACKET_KEY_ID_RESERVED               = 0,            /**< Reserved key field. */
+    BCMBAL_PACKET_KEY_ID_PACKET_SEND_DEST       = 1,            /**< Packet destination. */
+    BCMBAL_PACKET_KEY_ID__NUM_OF                                /**< Number of enum entries, not an entry itself. */
+} bcmbal_packet_key_id;
+
+/** Identifiers for all properties contained in the subscriber_terminal_cfg 
+ * group. 
+ */
+typedef enum bcmbal_subscriber_terminal_cfg_id
+{
+    BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_ADMIN_STATE       = 0,    /**< Administrative state. */
+    BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_OPER_STATUS       = 1,    /**< Operational status. */
+    BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SERIAL_NUMBER     = 2,    /**< Serial number. */
+    BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_PASSWORD          = 3,    /**< Password. */
+    BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_REGISTRATION_ID   = 4,    /**< Registration id. */
+    BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SVC_PORT_ID       = 5,    /**< Service port ID. */
+    BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_MAC_ADDRESS       = 6,    /**< MAC address. */
+    BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_DS_TM             = 7,    /**< Downstream scheduler and shaper. */
+    BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_US_TM             = 8,    /**< Upstream scheduler and shaper. */
+    BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SVC_PORT_ID_LIST  = 9,    /**< svc_port_id list. */
+    BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_AGG_PORT_ID_LIST  = 10,   /**< agg_port_id list. */
+    BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID__NUM_OF                   /**< Number of enum entries, not an entry itself. */
+} bcmbal_subscriber_terminal_cfg_id;
+
+/** Identifiers for all properties contained in the subscriber_terminal_ind 
+ * group. 
+ */
+typedef enum bcmbal_subscriber_terminal_ind_id
+{
+    BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_ADMIN_STATE       = 0,    /**< Administrative state. */
+    BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_OPER_STATUS       = 1,    /**< Operational status. */
+    BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_SERIAL_NUMBER     = 2,    /**< Serial number. */
+    BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_PASSWORD          = 3,    /**< Password. */
+    BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_REGISTRATION_ID   = 4,    /**< Registration id. */
+    BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_SVC_PORT_ID       = 5,    /**< Service port ID. */
+    BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_MAC_ADDRESS       = 6,    /**< MAC address. */
+    BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_DS_TM             = 7,    /**< Downstream scheduler and shaper. */
+    BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_US_TM             = 8,    /**< Upstream scheduler and shaper. */
+    BCMBAL_SUBSCRIBER_TERMINAL_IND_ID__NUM_OF                   /**< Number of enum entries, not an entry itself. */
+} bcmbal_subscriber_terminal_ind_id;
+
+/** Identifiers for all properties contained in the subscriber_terminal_key 
+ * group. 
+ */
+typedef enum bcmbal_subscriber_terminal_key_id
+{
+    BCMBAL_SUBSCRIBER_TERMINAL_KEY_ID_SUB_TERM_ID       = 0,    /**< sub_term_id. */
+    BCMBAL_SUBSCRIBER_TERMINAL_KEY_ID_INTF_ID           = 1,    /**< intf_id. */
+    BCMBAL_SUBSCRIBER_TERMINAL_KEY_ID__NUM_OF                   /**< Number of enum entries, not an entry itself. */
+} bcmbal_subscriber_terminal_key_id;
+
+/** Identifiers for all properties contained in the subscriber_terminal_stat 
+ * group. 
+ */
+typedef enum bcmbal_subscriber_terminal_stat_id
+{
+    BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_RX_PACKETS       = 0,    /**< Received  packets. */
+    BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_RX_BYTES         = 1,    /**< Received bytes. */
+    BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_TX_PACKETS       = 2,    /**< Transmitted packets. */
+    BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_TX_BYTES         = 3,    /**< Transmitted bytes. */
+    BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID__NUM_OF                  /**< Number of enum entries, not an entry itself. */
+} bcmbal_subscriber_terminal_stat_id;
+
+/** Identifiers for all properties contained in the tm_queue_cfg group. 
+ */
+typedef enum bcmbal_tm_queue_cfg_id
+{
+    BCMBAL_TM_QUEUE_CFG_ID_PRIORITY                     = 0,    /**< priority. */
+    BCMBAL_TM_QUEUE_CFG_ID_WEIGHT                       = 1,    /**< weight. */
+    BCMBAL_TM_QUEUE_CFG_ID_RATE                         = 2,    /**< rate. */
+    BCMBAL_TM_QUEUE_CFG_ID_BAC                          = 3,    /**< bac. */
+    BCMBAL_TM_QUEUE_CFG_ID_CREATION_MODE                = 4,    /**< creation_mode. */
+    BCMBAL_TM_QUEUE_CFG_ID_REF_COUNT                    = 5,    /**< ref_count. */
+    BCMBAL_TM_QUEUE_CFG_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmbal_tm_queue_cfg_id;
+
+/** Identifiers for all properties contained in the tm_queue_ind group. 
+ */
+typedef enum bcmbal_tm_queue_ind_id
+{
+    BCMBAL_TM_QUEUE_IND_ID_RET                          = 0,    /**< ret. */
+    BCMBAL_TM_QUEUE_IND_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmbal_tm_queue_ind_id;
+
+/** Identifiers for all properties contained in the tm_queue_key group. 
+ */
+typedef enum bcmbal_tm_queue_key_id
+{
+    BCMBAL_TM_QUEUE_KEY_ID_SCHED_ID                     = 0,    /**< sched_id. */
+    BCMBAL_TM_QUEUE_KEY_ID_SCHED_DIR                    = 1,    /**< sched dir. */
+    BCMBAL_TM_QUEUE_KEY_ID_ID                           = 2,    /**< id. */
+    BCMBAL_TM_QUEUE_KEY_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmbal_tm_queue_key_id;
+
+/** Identifiers for all properties contained in the tm_queue_stat group. 
+ */
+typedef enum bcmbal_tm_queue_stat_id
+{
+    BCMBAL_TM_QUEUE_STAT_ID_PACKETS_OK                  = 0,    /**< packets_ok. */
+    BCMBAL_TM_QUEUE_STAT_ID_BYTES_OK                    = 1,    /**< bytes_ok. */
+    BCMBAL_TM_QUEUE_STAT_ID_PACKETS_DISCARDED           = 2,    /**< packets_discarded. */
+    BCMBAL_TM_QUEUE_STAT_ID_BYTES_DISCARDED             = 3,    /**< bytes_discarded. */
+    BCMBAL_TM_QUEUE_STAT_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmbal_tm_queue_stat_id;
+
+/** Identifiers for all properties contained in the tm_sched_cfg group. 
+ */
+typedef enum bcmbal_tm_sched_cfg_id
+{
+    BCMBAL_TM_SCHED_CFG_ID_OWNER                        = 0,    /**< owner. */
+    BCMBAL_TM_SCHED_CFG_ID_SCHED_TYPE                   = 1,    /**< type. */
+    BCMBAL_TM_SCHED_CFG_ID_SCHED_PARENT                 = 2,    /**< parent. */
+    BCMBAL_TM_SCHED_CFG_ID_SCHED_CHILD_TYPE             = 3,    /**< child_type. */
+    BCMBAL_TM_SCHED_CFG_ID_RATE                         = 4,    /**< rate. */
+    BCMBAL_TM_SCHED_CFG_ID_TCONT_SLA                    = 5,    /**< tcont_sla. */
+    BCMBAL_TM_SCHED_CFG_ID_CREATION_MODE                = 6,    /**< creation_mode. */
+    BCMBAL_TM_SCHED_CFG_ID_QUEUES                       = 7,    /**< queues. */
+    BCMBAL_TM_SCHED_CFG_ID_SUB_SCHEDS                   = 8,    /**< sub_scheds. */
+    BCMBAL_TM_SCHED_CFG_ID_NUM_PRIORITIES               = 9,    /**< num_priorities. */
+    BCMBAL_TM_SCHED_CFG_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmbal_tm_sched_cfg_id;
+
+/** Identifiers for all properties contained in the tm_sched_ind group. 
+ */
+typedef enum bcmbal_tm_sched_ind_id
+{
+    BCMBAL_TM_SCHED_IND_ID_RET                          = 0,    /**< ret. */
+    BCMBAL_TM_SCHED_IND_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmbal_tm_sched_ind_id;
+
+/** Identifiers for all properties contained in the tm_sched_key group. 
+ */
+typedef enum bcmbal_tm_sched_key_id
+{
+    BCMBAL_TM_SCHED_KEY_ID_DIR                          = 0,    /**< dir. */
+    BCMBAL_TM_SCHED_KEY_ID_ID                           = 1,    /**< id. */
+    BCMBAL_TM_SCHED_KEY_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmbal_tm_sched_key_id;
+
+/** All object tags for all objects in the system. 
+ */
+typedef enum bcmbal_obj_tag
+{
+    BCMBAL_OBJ_TAG__NUM_OF          /**< Number of enum entries, not an entry itself. */
+} bcmbal_obj_tag;
+
+/** Identifiers for all objects in the system. 
+ */
+typedef enum bcmbal_obj_id
+{
+    BCMBAL_OBJ_ID__BEGIN,
+    BCMBAL_OBJ_ID_ACCESS_TERMINAL                       = 0,    /**< BAL Access Terminal */
+    BCMBAL_OBJ_ID_FLOW                                  = 1,    /**< BAL Flow */
+    BCMBAL_OBJ_ID_GROUP                                 = 2,    /**< BAL Group */
+    BCMBAL_OBJ_ID_INTERFACE                             = 3,    /**< BAL Interface */
+    BCMBAL_OBJ_ID_PACKET                                = 4,    /**< packet */
+    BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL                   = 5,    /**< BAL Subscriber Terminal */
+    BCMBAL_OBJ_ID_TM_QUEUE                              = 6,    /**< tm_queue */
+    BCMBAL_OBJ_ID_TM_SCHED                              = 7,    /**< tm_sched */
+    BCMBAL_OBJ_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmbal_obj_id;
+
+/** Identifiers for all possible groups under all objects in the system. 
+ */
+typedef enum bcmbal_obj_group_id
+{
+    BCMBAL_OBJ_GROUP_ID__BEGIN,
+    BCMBAL_OBJ_GROUP_ID_ACCESS_TERMINAL_KEY             = 0,    /**< BAL Access Terminal - key */
+    BCMBAL_OBJ_GROUP_ID_ACCESS_TERMINAL_CFG             = 1,    /**< BAL Access Terminal - cfg */
+    BCMBAL_OBJ_GROUP_ID_ACCESS_TERMINAL_IND             = 2,    /**< BAL Access Terminal - Access Terminal Indication */
+    BCMBAL_OBJ_GROUP_ID_FLOW_KEY                        = 3,    /**< BAL Flow - key */
+    BCMBAL_OBJ_GROUP_ID_FLOW_CFG                        = 4,    /**< BAL Flow - cfg */
+    BCMBAL_OBJ_GROUP_ID_FLOW_STAT                       = 5,    /**< BAL Flow - stat */
+    BCMBAL_OBJ_GROUP_ID_FLOW_IND                        = 6,    /**< BAL Flow - Flow Indication */
+    BCMBAL_OBJ_GROUP_ID_GROUP_KEY                       = 7,    /**< BAL Group - key */
+    BCMBAL_OBJ_GROUP_ID_GROUP_CFG                       = 8,    /**< BAL Group - cfg */
+    BCMBAL_OBJ_GROUP_ID_INTERFACE_KEY                   = 9,    /**< BAL Interface - key */
+    BCMBAL_OBJ_GROUP_ID_INTERFACE_CFG                   = 10,   /**< BAL Interface - cfg */
+    BCMBAL_OBJ_GROUP_ID_INTERFACE_STAT                  = 11,   /**< BAL Interface - stat */
+    BCMBAL_OBJ_GROUP_ID_INTERFACE_IND                   = 12,   /**< BAL Interface - Interface Indication */
+    BCMBAL_OBJ_GROUP_ID_PACKET_KEY                      = 13,   /**< packet - key */
+    BCMBAL_OBJ_GROUP_ID_PACKET_CFG                      = 14,   /**< packet - cfg */
+    BCMBAL_OBJ_GROUP_ID_PACKET_IND                      = 15,   /**< packet - Packet indication */
+    BCMBAL_OBJ_GROUP_ID_SUBSCRIBER_TERMINAL_KEY         = 16,   /**< BAL Subscriber Terminal - key */
+    BCMBAL_OBJ_GROUP_ID_SUBSCRIBER_TERMINAL_CFG         = 17,   /**< BAL Subscriber Terminal - cfg */
+    BCMBAL_OBJ_GROUP_ID_SUBSCRIBER_TERMINAL_STAT        = 18,   /**< BAL Subscriber Terminal - stat */
+    BCMBAL_OBJ_GROUP_ID_SUBSCRIBER_TERMINAL_IND         = 19,   /**< BAL Subscriber Terminal - Subscriber Terminal Indication */
+    BCMBAL_OBJ_GROUP_ID_TM_QUEUE_KEY                    = 20,   /**< tm_queue - key */
+    BCMBAL_OBJ_GROUP_ID_TM_QUEUE_CFG                    = 21,   /**< tm_queue - cfg */
+    BCMBAL_OBJ_GROUP_ID_TM_QUEUE_STAT                   = 22,   /**< tm_queue - stat */
+    BCMBAL_OBJ_GROUP_ID_TM_QUEUE_IND                    = 23,   /**< tm_queue - Tm Queue Indication */
+    BCMBAL_OBJ_GROUP_ID_TM_SCHED_KEY                    = 24,   /**< tm_sched - key */
+    BCMBAL_OBJ_GROUP_ID_TM_SCHED_CFG                    = 25,   /**< tm_sched - cfg */
+    BCMBAL_OBJ_GROUP_ID_TM_SCHED_IND                    = 26,   /**< tm_sched - Tm Sched Indication */
+    BCMBAL_OBJ_GROUP_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmbal_obj_group_id;
+
+/** List of all access_terminal groups of type auto. 
+ */
+typedef enum bcmbal_access_terminal_auto_id
+{
+    BCMBAL_ACCESS_TERMINAL_AUTO_ID__BEGIN,
+    BCMBAL_ACCESS_TERMINAL_AUTO_ID_IND                  = 0,    /**< Access Terminal Indication. */
+    BCMBAL_ACCESS_TERMINAL_AUTO_ID__NUM_OF                      /**< Number of enum entries, not an entry itself. */
+} bcmbal_access_terminal_auto_id;
+
+/** List of all flow groups of type auto. 
+ */
+typedef enum bcmbal_flow_auto_id
+{
+    BCMBAL_FLOW_AUTO_ID__BEGIN,
+    BCMBAL_FLOW_AUTO_ID_IND                             = 0,    /**< Flow Indication. */
+    BCMBAL_FLOW_AUTO_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmbal_flow_auto_id;
+
+/** List of all interface groups of type auto. 
+ */
+typedef enum bcmbal_interface_auto_id
+{
+    BCMBAL_INTERFACE_AUTO_ID__BEGIN,
+    BCMBAL_INTERFACE_AUTO_ID_IND                        = 0,    /**< Interface Indication. */
+    BCMBAL_INTERFACE_AUTO_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmbal_interface_auto_id;
+
+/** List of all packet groups of type auto. 
+ */
+typedef enum bcmbal_packet_auto_id
+{
+    BCMBAL_PACKET_AUTO_ID__BEGIN,
+    BCMBAL_PACKET_AUTO_ID_IND                           = 0,    /**< Packet indication. */
+    BCMBAL_PACKET_AUTO_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmbal_packet_auto_id;
+
+/** List of all subscriber_terminal groups of type auto. 
+ */
+typedef enum bcmbal_subscriber_terminal_auto_id
+{
+    BCMBAL_SUBSCRIBER_TERMINAL_AUTO_ID__BEGIN,
+    BCMBAL_SUBSCRIBER_TERMINAL_AUTO_ID_IND              = 0,    /**< Subscriber Terminal Indication. */
+    BCMBAL_SUBSCRIBER_TERMINAL_AUTO_ID__NUM_OF                  /**< Number of enum entries, not an entry itself. */
+} bcmbal_subscriber_terminal_auto_id;
+
+/** List of all tm_queue groups of type auto. 
+ */
+typedef enum bcmbal_tm_queue_auto_id
+{
+    BCMBAL_TM_QUEUE_AUTO_ID__BEGIN,
+    BCMBAL_TM_QUEUE_AUTO_ID_IND                         = 0,    /**< Tm Queue Indication. */
+    BCMBAL_TM_QUEUE_AUTO_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmbal_tm_queue_auto_id;
+
+/** List of all tm_sched groups of type auto. 
+ */
+typedef enum bcmbal_tm_sched_auto_id
+{
+    BCMBAL_TM_SCHED_AUTO_ID__BEGIN,
+    BCMBAL_TM_SCHED_AUTO_ID_IND                         = 0,    /**< Tm Sched Indication. */
+    BCMBAL_TM_SCHED_AUTO_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmbal_tm_sched_auto_id;
+
+#define bcmbal_access_terminal_key_id_all_properties        BCMBAL_ACCESS_TERMINAL_KEY_ID__NUM_OF
+#define bcmbal_access_terminal_cfg_id_all_properties        BCMBAL_ACCESS_TERMINAL_CFG_ID__NUM_OF
+#define bcmbal_access_terminal_ind_id_all_properties        BCMBAL_ACCESS_TERMINAL_IND_ID__NUM_OF
+#define bcmbal_flow_cfg_id_all_properties                   BCMBAL_FLOW_CFG_ID__NUM_OF
+#define bcmbal_flow_key_id_all_properties                   BCMBAL_FLOW_KEY_ID__NUM_OF
+#define bcmbal_flow_stat_id_all_properties                  BCMBAL_FLOW_STAT_ID__NUM_OF
+#define bcmbal_flow_ind_id_all_properties                   BCMBAL_FLOW_IND_ID__NUM_OF
+#define bcmbal_group_cfg_id_all_properties                  BCMBAL_GROUP_CFG_ID__NUM_OF
+#define bcmbal_group_key_id_all_properties                  BCMBAL_GROUP_KEY_ID__NUM_OF
+#define bcmbal_interface_key_id_all_properties              BCMBAL_INTERFACE_KEY_ID__NUM_OF
+#define bcmbal_interface_cfg_id_all_properties              BCMBAL_INTERFACE_CFG_ID__NUM_OF
+#define bcmbal_interface_stat_id_all_properties             BCMBAL_INTERFACE_STAT_ID__NUM_OF
+#define bcmbal_interface_ind_id_all_properties              BCMBAL_INTERFACE_IND_ID__NUM_OF
+#define bcmbal_packet_cfg_id_all_properties                 BCMBAL_PACKET_CFG_ID__NUM_OF
+#define bcmbal_packet_key_id_all_properties                 BCMBAL_PACKET_KEY_ID__NUM_OF
+#define bcmbal_packet_ind_id_all_properties                 BCMBAL_PACKET_IND_ID__NUM_OF
+#define bcmbal_subscriber_terminal_key_id_all_properties    BCMBAL_SUBSCRIBER_TERMINAL_KEY_ID__NUM_OF
+#define bcmbal_subscriber_terminal_cfg_id_all_properties    BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID__NUM_OF
+#define bcmbal_subscriber_terminal_stat_id_all_properties   BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID__NUM_OF
+#define bcmbal_subscriber_terminal_ind_id_all_properties    BCMBAL_SUBSCRIBER_TERMINAL_IND_ID__NUM_OF
+#define bcmbal_tm_queue_key_id_all_properties               BCMBAL_TM_QUEUE_KEY_ID__NUM_OF
+#define bcmbal_tm_queue_cfg_id_all_properties               BCMBAL_TM_QUEUE_CFG_ID__NUM_OF
+#define bcmbal_tm_queue_stat_id_all_properties              BCMBAL_TM_QUEUE_STAT_ID__NUM_OF
+#define bcmbal_tm_queue_ind_id_all_properties               BCMBAL_TM_QUEUE_IND_ID__NUM_OF
+#define bcmbal_tm_sched_key_id_all_properties               BCMBAL_TM_SCHED_KEY_ID__NUM_OF
+#define bcmbal_tm_sched_cfg_id_all_properties               BCMBAL_TM_SCHED_CFG_ID__NUM_OF
+#define bcmbal_tm_sched_ind_id_all_properties               BCMBAL_TM_SCHED_IND_ID__NUM_OF
+
+/* The following are required for the API Init/Set/etc macros */
+#define bcmbal_obj_id__begin                                BCMBAL_OBJ_ID__BEGIN
+#define bcmbal_obj_id_access_terminal                       BCMBAL_OBJ_ID_ACCESS_TERMINAL
+#define bcmbal_obj_id_flow                                  BCMBAL_OBJ_ID_FLOW
+#define bcmbal_obj_id_group                                 BCMBAL_OBJ_ID_GROUP
+#define bcmbal_obj_id_interface                             BCMBAL_OBJ_ID_INTERFACE
+#define bcmbal_obj_id_packet                                BCMBAL_OBJ_ID_PACKET
+#define bcmbal_obj_id_subscriber_terminal                   BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL
+#define bcmbal_obj_id_tm_queue                              BCMBAL_OBJ_ID_TM_QUEUE
+#define bcmbal_obj_id_tm_sched                              BCMBAL_OBJ_ID_TM_SCHED
+#define bcmbal_obj_id__num_of                               BCMBAL_OBJ_ID__NUM_OF
+#define bcmbal_access_terminal_auto_id__begin               BCMBAL_ACCESS_TERMINAL_AUTO_ID__BEGIN
+#define bcmbal_access_terminal_auto_id_ind                  BCMBAL_ACCESS_TERMINAL_AUTO_ID_IND
+#define bcmbal_access_terminal_auto_id__num_of              BCMBAL_ACCESS_TERMINAL_AUTO_ID__NUM_OF
+#define bcmbal_flow_auto_id__begin                          BCMBAL_FLOW_AUTO_ID__BEGIN
+#define bcmbal_flow_auto_id_ind                             BCMBAL_FLOW_AUTO_ID_IND
+#define bcmbal_flow_auto_id__num_of                         BCMBAL_FLOW_AUTO_ID__NUM_OF
+#define bcmbal_interface_auto_id__begin                     BCMBAL_INTERFACE_AUTO_ID__BEGIN
+#define bcmbal_interface_auto_id_ind                        BCMBAL_INTERFACE_AUTO_ID_IND
+#define bcmbal_interface_auto_id__num_of                    BCMBAL_INTERFACE_AUTO_ID__NUM_OF
+#define bcmbal_packet_auto_id__begin                        BCMBAL_PACKET_AUTO_ID__BEGIN
+#define bcmbal_packet_auto_id_ind                           BCMBAL_PACKET_AUTO_ID_IND
+#define bcmbal_packet_auto_id__num_of                       BCMBAL_PACKET_AUTO_ID__NUM_OF
+#define bcmbal_subscriber_terminal_auto_id__begin           BCMBAL_SUBSCRIBER_TERMINAL_AUTO_ID__BEGIN
+#define bcmbal_subscriber_terminal_auto_id_ind              BCMBAL_SUBSCRIBER_TERMINAL_AUTO_ID_IND
+#define bcmbal_subscriber_terminal_auto_id__num_of          BCMBAL_SUBSCRIBER_TERMINAL_AUTO_ID__NUM_OF
+#define bcmbal_tm_queue_auto_id__begin                      BCMBAL_TM_QUEUE_AUTO_ID__BEGIN
+#define bcmbal_tm_queue_auto_id_ind                         BCMBAL_TM_QUEUE_AUTO_ID_IND
+#define bcmbal_tm_queue_auto_id__num_of                     BCMBAL_TM_QUEUE_AUTO_ID__NUM_OF
+#define bcmbal_tm_sched_auto_id__begin                      BCMBAL_TM_SCHED_AUTO_ID__BEGIN
+#define bcmbal_tm_sched_auto_id_ind                         BCMBAL_TM_SCHED_AUTO_ID_IND
+#define bcmbal_tm_sched_auto_id__num_of                     BCMBAL_TM_SCHED_AUTO_ID__NUM_OF
+#define bcmbal_access_terminal_key_id_access_term_id        BCMBAL_ACCESS_TERMINAL_KEY_ID_ACCESS_TERM_ID
+#define bcmbal_access_terminal_key_id__num_of               BCMBAL_ACCESS_TERMINAL_KEY_ID__NUM_OF
+#define bcmbal_access_terminal_cfg_id_admin_state           BCMBAL_ACCESS_TERMINAL_CFG_ID_ADMIN_STATE
+#define bcmbal_access_terminal_cfg_id_oper_status           BCMBAL_ACCESS_TERMINAL_CFG_ID_OPER_STATUS
+#define bcmbal_access_terminal_cfg_id_iwf_mode              BCMBAL_ACCESS_TERMINAL_CFG_ID_IWF_MODE
+#define bcmbal_access_terminal_cfg_id__num_of               BCMBAL_ACCESS_TERMINAL_CFG_ID__NUM_OF
+#define bcmbal_access_terminal_ind_id_admin_state           BCMBAL_ACCESS_TERMINAL_IND_ID_ADMIN_STATE
+#define bcmbal_access_terminal_ind_id_oper_status           BCMBAL_ACCESS_TERMINAL_IND_ID_OPER_STATUS
+#define bcmbal_access_terminal_ind_id_iwf_mode              BCMBAL_ACCESS_TERMINAL_IND_ID_IWF_MODE
+#define bcmbal_access_terminal_ind_id__num_of               BCMBAL_ACCESS_TERMINAL_IND_ID__NUM_OF
+#define bcmbal_flow_key_id_flow_id                          BCMBAL_FLOW_KEY_ID_FLOW_ID
+#define bcmbal_flow_key_id_flow_type                        BCMBAL_FLOW_KEY_ID_FLOW_TYPE
+#define bcmbal_flow_key_id__num_of                          BCMBAL_FLOW_KEY_ID__NUM_OF
+#define bcmbal_flow_cfg_id_admin_state                      BCMBAL_FLOW_CFG_ID_ADMIN_STATE
+#define bcmbal_flow_cfg_id_oper_status                      BCMBAL_FLOW_CFG_ID_OPER_STATUS
+#define bcmbal_flow_cfg_id_access_int_id                    BCMBAL_FLOW_CFG_ID_ACCESS_INT_ID
+#define bcmbal_flow_cfg_id_network_int_id                   BCMBAL_FLOW_CFG_ID_NETWORK_INT_ID
+#define bcmbal_flow_cfg_id_sub_term_id                      BCMBAL_FLOW_CFG_ID_SUB_TERM_ID
+#define bcmbal_flow_cfg_id_sub_term_uni_idx                 BCMBAL_FLOW_CFG_ID_SUB_TERM_UNI_IDX
+#define bcmbal_flow_cfg_id_svc_port_id                      BCMBAL_FLOW_CFG_ID_SVC_PORT_ID
+#define bcmbal_flow_cfg_id_agg_port_id                      BCMBAL_FLOW_CFG_ID_AGG_PORT_ID
+#define bcmbal_flow_cfg_id_resolve_mac                      BCMBAL_FLOW_CFG_ID_RESOLVE_MAC
+#define bcmbal_flow_cfg_id_classifier                       BCMBAL_FLOW_CFG_ID_CLASSIFIER
+#define bcmbal_flow_cfg_id_action                           BCMBAL_FLOW_CFG_ID_ACTION
+#define bcmbal_flow_cfg_id_sla                              BCMBAL_FLOW_CFG_ID_SLA
+#define bcmbal_flow_cfg_id_cookie                           BCMBAL_FLOW_CFG_ID_COOKIE
+#define bcmbal_flow_cfg_id_priority                         BCMBAL_FLOW_CFG_ID_PRIORITY
+#define bcmbal_flow_cfg_id_group_id                         BCMBAL_FLOW_CFG_ID_GROUP_ID
+#define bcmbal_flow_cfg_id_queue                            BCMBAL_FLOW_CFG_ID_QUEUE
+#define bcmbal_flow_cfg_id__num_of                          BCMBAL_FLOW_CFG_ID__NUM_OF
+#define bcmbal_flow_stat_id_rx_packets                      BCMBAL_FLOW_STAT_ID_RX_PACKETS
+#define bcmbal_flow_stat_id_rx_bytes                        BCMBAL_FLOW_STAT_ID_RX_BYTES
+#define bcmbal_flow_stat_id_tx_packets                      BCMBAL_FLOW_STAT_ID_TX_PACKETS
+#define bcmbal_flow_stat_id_tx_bytes                        BCMBAL_FLOW_STAT_ID_TX_BYTES
+#define bcmbal_flow_stat_id__num_of                         BCMBAL_FLOW_STAT_ID__NUM_OF
+#define bcmbal_flow_ind_id_admin_state                      BCMBAL_FLOW_IND_ID_ADMIN_STATE
+#define bcmbal_flow_ind_id_oper_status                      BCMBAL_FLOW_IND_ID_OPER_STATUS
+#define bcmbal_flow_ind_id_access_int_id                    BCMBAL_FLOW_IND_ID_ACCESS_INT_ID
+#define bcmbal_flow_ind_id_network_int_id                   BCMBAL_FLOW_IND_ID_NETWORK_INT_ID
+#define bcmbal_flow_ind_id_sub_term_id                      BCMBAL_FLOW_IND_ID_SUB_TERM_ID
+#define bcmbal_flow_ind_id_svc_port_id                      BCMBAL_FLOW_IND_ID_SVC_PORT_ID
+#define bcmbal_flow_ind_id_agg_port_id                      BCMBAL_FLOW_IND_ID_AGG_PORT_ID
+#define bcmbal_flow_ind_id_resolve_mac                      BCMBAL_FLOW_IND_ID_RESOLVE_MAC
+#define bcmbal_flow_ind_id_base_tc_id                       BCMBAL_FLOW_IND_ID_BASE_TC_ID
+#define bcmbal_flow_ind_id_classifier                       BCMBAL_FLOW_IND_ID_CLASSIFIER
+#define bcmbal_flow_ind_id_action                           BCMBAL_FLOW_IND_ID_ACTION
+#define bcmbal_flow_ind_id_sla                              BCMBAL_FLOW_IND_ID_SLA
+#define bcmbal_flow_ind_id_cookie                           BCMBAL_FLOW_IND_ID_COOKIE
+#define bcmbal_flow_ind_id_priority                         BCMBAL_FLOW_IND_ID_PRIORITY
+#define bcmbal_flow_ind_id__num_of                          BCMBAL_FLOW_IND_ID__NUM_OF
+#define bcmbal_group_key_id_group_id                        BCMBAL_GROUP_KEY_ID_GROUP_ID
+#define bcmbal_group_key_id__num_of                         BCMBAL_GROUP_KEY_ID__NUM_OF
+#define bcmbal_group_cfg_id_members_cmd                     BCMBAL_GROUP_CFG_ID_MEMBERS_CMD
+#define bcmbal_group_cfg_id_members                         BCMBAL_GROUP_CFG_ID_MEMBERS
+#define bcmbal_group_cfg_id_cookie                          BCMBAL_GROUP_CFG_ID_COOKIE
+#define bcmbal_group_cfg_id_flows                           BCMBAL_GROUP_CFG_ID_FLOWS
+#define bcmbal_group_cfg_id_owner                           BCMBAL_GROUP_CFG_ID_OWNER
+#define bcmbal_group_cfg_id__num_of                         BCMBAL_GROUP_CFG_ID__NUM_OF
+#define bcmbal_interface_key_id_intf_id                     BCMBAL_INTERFACE_KEY_ID_INTF_ID
+#define bcmbal_interface_key_id_intf_type                   BCMBAL_INTERFACE_KEY_ID_INTF_TYPE
+#define bcmbal_interface_key_id__num_of                     BCMBAL_INTERFACE_KEY_ID__NUM_OF
+#define bcmbal_interface_cfg_id_admin_state                 BCMBAL_INTERFACE_CFG_ID_ADMIN_STATE
+#define bcmbal_interface_cfg_id_oper_status                 BCMBAL_INTERFACE_CFG_ID_OPER_STATUS
+#define bcmbal_interface_cfg_id_min_data_agg_port_id        BCMBAL_INTERFACE_CFG_ID_MIN_DATA_AGG_PORT_ID
+#define bcmbal_interface_cfg_id_min_data_svc_port_id        BCMBAL_INTERFACE_CFG_ID_MIN_DATA_SVC_PORT_ID
+#define bcmbal_interface_cfg_id_transceiver_type            BCMBAL_INTERFACE_CFG_ID_TRANSCEIVER_TYPE
+#define bcmbal_interface_cfg_id_ds_miss_mode                BCMBAL_INTERFACE_CFG_ID_DS_MISS_MODE
+#define bcmbal_interface_cfg_id_mtu                         BCMBAL_INTERFACE_CFG_ID_MTU
+#define bcmbal_interface_cfg_id_flow_control                BCMBAL_INTERFACE_CFG_ID_FLOW_CONTROL
+#define bcmbal_interface_cfg_id_ds_tm                       BCMBAL_INTERFACE_CFG_ID_DS_TM
+#define bcmbal_interface_cfg_id_us_tm                       BCMBAL_INTERFACE_CFG_ID_US_TM
+#define bcmbal_interface_cfg_id_sub_term_id_list            BCMBAL_INTERFACE_CFG_ID_SUB_TERM_ID_LIST
+#define bcmbal_interface_cfg_id__num_of                     BCMBAL_INTERFACE_CFG_ID__NUM_OF
+#define bcmbal_interface_stat_id_rx_packets                 BCMBAL_INTERFACE_STAT_ID_RX_PACKETS
+#define bcmbal_interface_stat_id_rx_bytes                   BCMBAL_INTERFACE_STAT_ID_RX_BYTES
+#define bcmbal_interface_stat_id_tx_packets                 BCMBAL_INTERFACE_STAT_ID_TX_PACKETS
+#define bcmbal_interface_stat_id_tx_bytes                   BCMBAL_INTERFACE_STAT_ID_TX_BYTES
+#define bcmbal_interface_stat_id__num_of                    BCMBAL_INTERFACE_STAT_ID__NUM_OF
+#define bcmbal_interface_ind_id_admin_state                 BCMBAL_INTERFACE_IND_ID_ADMIN_STATE
+#define bcmbal_interface_ind_id_oper_status                 BCMBAL_INTERFACE_IND_ID_OPER_STATUS
+#define bcmbal_interface_ind_id_min_data_agg_port_id        BCMBAL_INTERFACE_IND_ID_MIN_DATA_AGG_PORT_ID
+#define bcmbal_interface_ind_id_min_data_svc_port_id        BCMBAL_INTERFACE_IND_ID_MIN_DATA_SVC_PORT_ID
+#define bcmbal_interface_ind_id_transceiver_type            BCMBAL_INTERFACE_IND_ID_TRANSCEIVER_TYPE
+#define bcmbal_interface_ind_id_ds_miss_mode                BCMBAL_INTERFACE_IND_ID_DS_MISS_MODE
+#define bcmbal_interface_ind_id_mtu                         BCMBAL_INTERFACE_IND_ID_MTU
+#define bcmbal_interface_ind_id_flow_control                BCMBAL_INTERFACE_IND_ID_FLOW_CONTROL
+#define bcmbal_interface_ind_id_ds_tm                       BCMBAL_INTERFACE_IND_ID_DS_TM
+#define bcmbal_interface_ind_id_us_tm                       BCMBAL_INTERFACE_IND_ID_US_TM
+#define bcmbal_interface_ind_id__num_of                     BCMBAL_INTERFACE_IND_ID__NUM_OF
+#define bcmbal_packet_key_id_reserved                       BCMBAL_PACKET_KEY_ID_RESERVED
+#define bcmbal_packet_key_id_packet_send_dest               BCMBAL_PACKET_KEY_ID_PACKET_SEND_DEST
+#define bcmbal_packet_key_id__num_of                        BCMBAL_PACKET_KEY_ID__NUM_OF
+#define bcmbal_packet_cfg_id_flow_id                        BCMBAL_PACKET_CFG_ID_FLOW_ID
+#define bcmbal_packet_cfg_id_flow_type                      BCMBAL_PACKET_CFG_ID_FLOW_TYPE
+#define bcmbal_packet_cfg_id_intf_id                        BCMBAL_PACKET_CFG_ID_INTF_ID
+#define bcmbal_packet_cfg_id_intf_type                      BCMBAL_PACKET_CFG_ID_INTF_TYPE
+#define bcmbal_packet_cfg_id_svc_port                       BCMBAL_PACKET_CFG_ID_SVC_PORT
+#define bcmbal_packet_cfg_id_flow_cookie                    BCMBAL_PACKET_CFG_ID_FLOW_COOKIE
+#define bcmbal_packet_cfg_id_pkt                            BCMBAL_PACKET_CFG_ID_PKT
+#define bcmbal_packet_cfg_id__num_of                        BCMBAL_PACKET_CFG_ID__NUM_OF
+#define bcmbal_packet_ind_id_flow_id                        BCMBAL_PACKET_IND_ID_FLOW_ID
+#define bcmbal_packet_ind_id_flow_type                      BCMBAL_PACKET_IND_ID_FLOW_TYPE
+#define bcmbal_packet_ind_id_intf_id                        BCMBAL_PACKET_IND_ID_INTF_ID
+#define bcmbal_packet_ind_id_intf_type                      BCMBAL_PACKET_IND_ID_INTF_TYPE
+#define bcmbal_packet_ind_id_svc_port                       BCMBAL_PACKET_IND_ID_SVC_PORT
+#define bcmbal_packet_ind_id_flow_cookie                    BCMBAL_PACKET_IND_ID_FLOW_COOKIE
+#define bcmbal_packet_ind_id_pkt                            BCMBAL_PACKET_IND_ID_PKT
+#define bcmbal_packet_ind_id__num_of                        BCMBAL_PACKET_IND_ID__NUM_OF
+#define bcmbal_subscriber_terminal_key_id_sub_term_id       BCMBAL_SUBSCRIBER_TERMINAL_KEY_ID_SUB_TERM_ID
+#define bcmbal_subscriber_terminal_key_id_intf_id           BCMBAL_SUBSCRIBER_TERMINAL_KEY_ID_INTF_ID
+#define bcmbal_subscriber_terminal_key_id__num_of           BCMBAL_SUBSCRIBER_TERMINAL_KEY_ID__NUM_OF
+#define bcmbal_subscriber_terminal_cfg_id_admin_state       BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_ADMIN_STATE
+#define bcmbal_subscriber_terminal_cfg_id_oper_status       BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_OPER_STATUS
+#define bcmbal_subscriber_terminal_cfg_id_serial_number     BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SERIAL_NUMBER
+#define bcmbal_subscriber_terminal_cfg_id_password          BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_PASSWORD
+#define bcmbal_subscriber_terminal_cfg_id_registration_id   BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_REGISTRATION_ID
+#define bcmbal_subscriber_terminal_cfg_id_svc_port_id       BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SVC_PORT_ID
+#define bcmbal_subscriber_terminal_cfg_id_mac_address       BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_MAC_ADDRESS
+#define bcmbal_subscriber_terminal_cfg_id_ds_tm             BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_DS_TM
+#define bcmbal_subscriber_terminal_cfg_id_us_tm             BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_US_TM
+#define bcmbal_subscriber_terminal_cfg_id_svc_port_id_list  BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SVC_PORT_ID_LIST
+#define bcmbal_subscriber_terminal_cfg_id_agg_port_id_list  BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_AGG_PORT_ID_LIST
+#define bcmbal_subscriber_terminal_cfg_id__num_of           BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID__NUM_OF
+#define bcmbal_subscriber_terminal_stat_id_rx_packets       BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_RX_PACKETS
+#define bcmbal_subscriber_terminal_stat_id_rx_bytes         BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_RX_BYTES
+#define bcmbal_subscriber_terminal_stat_id_tx_packets       BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_TX_PACKETS
+#define bcmbal_subscriber_terminal_stat_id_tx_bytes         BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_TX_BYTES
+#define bcmbal_subscriber_terminal_stat_id__num_of          BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID__NUM_OF
+#define bcmbal_subscriber_terminal_ind_id_admin_state       BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_ADMIN_STATE
+#define bcmbal_subscriber_terminal_ind_id_oper_status       BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_OPER_STATUS
+#define bcmbal_subscriber_terminal_ind_id_serial_number     BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_SERIAL_NUMBER
+#define bcmbal_subscriber_terminal_ind_id_password          BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_PASSWORD
+#define bcmbal_subscriber_terminal_ind_id_registration_id   BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_REGISTRATION_ID
+#define bcmbal_subscriber_terminal_ind_id_svc_port_id       BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_SVC_PORT_ID
+#define bcmbal_subscriber_terminal_ind_id_mac_address       BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_MAC_ADDRESS
+#define bcmbal_subscriber_terminal_ind_id_ds_tm             BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_DS_TM
+#define bcmbal_subscriber_terminal_ind_id_us_tm             BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_US_TM
+#define bcmbal_subscriber_terminal_ind_id__num_of           BCMBAL_SUBSCRIBER_TERMINAL_IND_ID__NUM_OF
+#define bcmbal_tm_queue_key_id_sched_id                     BCMBAL_TM_QUEUE_KEY_ID_SCHED_ID
+#define bcmbal_tm_queue_key_id_sched_dir                    BCMBAL_TM_QUEUE_KEY_ID_SCHED_DIR
+#define bcmbal_tm_queue_key_id_id                           BCMBAL_TM_QUEUE_KEY_ID_ID
+#define bcmbal_tm_queue_key_id__num_of                      BCMBAL_TM_QUEUE_KEY_ID__NUM_OF
+#define bcmbal_tm_queue_cfg_id_priority                     BCMBAL_TM_QUEUE_CFG_ID_PRIORITY
+#define bcmbal_tm_queue_cfg_id_weight                       BCMBAL_TM_QUEUE_CFG_ID_WEIGHT
+#define bcmbal_tm_queue_cfg_id_rate                         BCMBAL_TM_QUEUE_CFG_ID_RATE
+#define bcmbal_tm_queue_cfg_id_bac                          BCMBAL_TM_QUEUE_CFG_ID_BAC
+#define bcmbal_tm_queue_cfg_id_creation_mode                BCMBAL_TM_QUEUE_CFG_ID_CREATION_MODE
+#define bcmbal_tm_queue_cfg_id_ref_count                    BCMBAL_TM_QUEUE_CFG_ID_REF_COUNT
+#define bcmbal_tm_queue_cfg_id__num_of                      BCMBAL_TM_QUEUE_CFG_ID__NUM_OF
+#define bcmbal_tm_queue_stat_id_packets_ok                  BCMBAL_TM_QUEUE_STAT_ID_PACKETS_OK
+#define bcmbal_tm_queue_stat_id_bytes_ok                    BCMBAL_TM_QUEUE_STAT_ID_BYTES_OK
+#define bcmbal_tm_queue_stat_id_packets_discarded           BCMBAL_TM_QUEUE_STAT_ID_PACKETS_DISCARDED
+#define bcmbal_tm_queue_stat_id_bytes_discarded             BCMBAL_TM_QUEUE_STAT_ID_BYTES_DISCARDED
+#define bcmbal_tm_queue_stat_id__num_of                     BCMBAL_TM_QUEUE_STAT_ID__NUM_OF
+#define bcmbal_tm_queue_ind_id_ret                          BCMBAL_TM_QUEUE_IND_ID_RET
+#define bcmbal_tm_queue_ind_id__num_of                      BCMBAL_TM_QUEUE_IND_ID__NUM_OF
+#define bcmbal_tm_sched_key_id_dir                          BCMBAL_TM_SCHED_KEY_ID_DIR
+#define bcmbal_tm_sched_key_id_id                           BCMBAL_TM_SCHED_KEY_ID_ID
+#define bcmbal_tm_sched_key_id__num_of                      BCMBAL_TM_SCHED_KEY_ID__NUM_OF
+#define bcmbal_tm_sched_cfg_id_owner                        BCMBAL_TM_SCHED_CFG_ID_OWNER
+#define bcmbal_tm_sched_cfg_id_sched_type                   BCMBAL_TM_SCHED_CFG_ID_SCHED_TYPE
+#define bcmbal_tm_sched_cfg_id_sched_parent                 BCMBAL_TM_SCHED_CFG_ID_SCHED_PARENT
+#define bcmbal_tm_sched_cfg_id_sched_child_type             BCMBAL_TM_SCHED_CFG_ID_SCHED_CHILD_TYPE
+#define bcmbal_tm_sched_cfg_id_rate                         BCMBAL_TM_SCHED_CFG_ID_RATE
+#define bcmbal_tm_sched_cfg_id_tcont_sla                    BCMBAL_TM_SCHED_CFG_ID_TCONT_SLA
+#define bcmbal_tm_sched_cfg_id_creation_mode                BCMBAL_TM_SCHED_CFG_ID_CREATION_MODE
+#define bcmbal_tm_sched_cfg_id_queues                       BCMBAL_TM_SCHED_CFG_ID_QUEUES
+#define bcmbal_tm_sched_cfg_id_sub_scheds                   BCMBAL_TM_SCHED_CFG_ID_SUB_SCHEDS
+#define bcmbal_tm_sched_cfg_id_num_priorities               BCMBAL_TM_SCHED_CFG_ID_NUM_PRIORITIES
+#define bcmbal_tm_sched_cfg_id__num_of                      BCMBAL_TM_SCHED_CFG_ID__NUM_OF
+#define bcmbal_tm_sched_ind_id_ret                          BCMBAL_TM_SCHED_IND_ID_RET
+#define bcmbal_tm_sched_ind_id__num_of                      BCMBAL_TM_SCHED_IND_ID__NUM_OF
+
+/** Checks whether the given object type has the given tag. 
+ *
+ * \return true if the given object has the given tag, false otherwise 
+ */
+bcmos_bool bcmbal_obj_has_tag(bcmbal_obj_id obj, bcmbal_obj_tag tag);
+
+#define BCMBAL_OBJ_ID_ANY   ((bcmbal_obj_id) UINT16_MAX)
+
+/** @} */
+#endif /* BAL_MODEL_IDS_H_ */
diff --git a/bal_release/src/common/include/bal_model_types.h b/bal_release/src/common/include/bal_model_types.h
new file mode 100644
index 0000000..af683fc
--- /dev/null
+++ b/bal_release/src/common/include/bal_model_types.h
@@ -0,0 +1,1154 @@
+#ifndef BAL_MODEL_TYPES
+#define BAL_MODEL_TYPES
+
+#include <bcmos_system.h>
+#include "bal_obj.h"
+
+/** \defgroup object_model_data_types BAL Object Model Data Types
+ * @{
+ */
+typedef uint32_t bcmbal_access_id;                      /**< bcmbal_access_id: typed alias for a 32-bit unsigned integer. */
+typedef uint16_t bcmbal_aggregation_port_id;            /**< bcmbal_aggregation_port_id: typed alias for a 16-bit unsigned integer. */
+typedef uint64_t bcmbal_cookie;                         /**< bcmbal_cookie: typed alias for a 64-bit unsigned integer. */
+typedef uint32_t bcmbal_intf_id;                        /**< bcmbal_intf_id: typed alias for a 32-bit unsigned integer. */
+typedef uint32_t bcmbal_sub_id;                         /**< bcmbal_sub_id: typed alias for a 32-bit unsigned integer. */
+#define BCMBAL_SUB_ID_UNKNOWN   ((bcmbal_sub_id) 65535UL)
+typedef uint32_t bcmbal_flow_id;                        /**< bcmbal_flow_id: typed alias for a 32-bit unsigned integer. */
+typedef uint32_t bcmbal_group_id;                       /**< bcmbal_group_id: typed alias for a 32-bit unsigned integer. */
+typedef uint16_t bcmbal_service_port_id;                /**< bcmbal_service_port_id: typed alias for a 16-bit unsigned integer. */
+typedef uint32_t bcmbal_tm_sched_id;                    /**< bcmbal_tm_sched_id: typed alias for a 32-bit unsigned integer. */
+#define BCMBAL_TM_SCHED_ID_UNKNOWN  ((bcmbal_tm_sched_id) 65535UL)
+typedef uint8_t bcmbal_tm_queue_id;                     /**< bcmbal_tm_queue_id: typed alias for a 8-bit unsigned integer. */
+typedef uint8_t bcmbal_percent;                         /**< bcmbal_percent: typed alias for a 8-bit unsigned integer. */
+typedef uint8_t bcmbal_tm_priority;                     /**< bcmbal_tm_priority: typed alias for a 8-bit unsigned integer. */
+typedef uint16_t bcmbal_tm_sched_id_index;              /**< bcmbal_tm_sched_id_index: typed alias for a 16-bit unsigned integer. */
+typedef uint8_t bcmbal_tm_weight;                       /**< bcmbal_tm_weight: typed alias for a 8-bit unsigned integer. */
+
+/** action ID. 
+ */
+typedef enum bcmbal_action_id
+{
+    BCMBAL_ACTION_ID_NONE           = 0,
+    BCMBAL_ACTION_ID_CMDS_BITMASK   = 0x0001,           /**< Commands bitmask. */
+    BCMBAL_ACTION_ID_O_VID          = 0x0002,           /**< Outer vid. */
+    BCMBAL_ACTION_ID_O_PBITS        = 0x0004,           /**< Outer pbits. */
+    BCMBAL_ACTION_ID_O_TPID         = 0x0008,           /**< Outer tpid. */
+    BCMBAL_ACTION_ID_I_VID          = 0x0010,           /**< Inner vid. */
+    BCMBAL_ACTION_ID_I_PBITS        = 0x0020,           /**< Inner pbits. */
+    BCMBAL_ACTION_ID_I_TPID         = 0x0040,           /**< Inner tpid. */
+    BCMBAL_ACTION_ID_ALL            = 0x007F            /**< All fields */
+} bcmbal_action_id;
+
+/** action_cmd_id. 
+ */
+typedef enum bcmbal_action_cmd_id
+{
+    BCMBAL_ACTION_CMD_ID_NONE               = 0,
+    BCMBAL_ACTION_CMD_ID_ADD_OUTER_TAG      = 0x0001,   /**< Add outer tag. */
+    BCMBAL_ACTION_CMD_ID_REMOVE_OUTER_TAG   = 0x0002,   /**< Remove outer tag. */
+    BCMBAL_ACTION_CMD_ID_XLATE_OUTER_TAG    = 0x0004,   /**< Translate outer tag. */
+    BCMBAL_ACTION_CMD_ID_XLATE_TWO_TAGS     = 0x0008,   /**< Translate two tags. */
+    BCMBAL_ACTION_CMD_ID_DISCARD_DS_BCAST   = 0x0010,   /**< Used to satisfy TR-156 Issue 3 R-111 */
+    BCMBAL_ACTION_CMD_ID_DISCARD_DS_UNKNOWN = 0x0020,   /**< Used to satisfy TR-156 Issue 3 R-109 */
+    BCMBAL_ACTION_CMD_ID_ADD_TWO_TAGS       = 0x0040,   /**< Add two tags. */
+    BCMBAL_ACTION_CMD_ID_REMOVE_TWO_TAGS    = 0x0080,   /**< Remove two tags. */
+    BCMBAL_ACTION_CMD_ID_REMARK_PBITS       = 0x0100,   /**< Set the outer tag pbits */
+    BCMBAL_ACTION_CMD_ID_COPY_PBITS         = 0x0200,   /**< Copy the inner pbits to outer pbits */
+    BCMBAL_ACTION_CMD_ID_REVERSE_COPY_PBITS = 0x0400,   /**< Copy the outer pbits to inner pbits */
+    BCMBAL_ACTION_CMD_ID_DSCP_TO_PBITS      = 0x0800,   /**< Copy the L4 DSCP to outer pbits */
+    BCMBAL_ACTION_CMD_ID_TRAP_TO_HOST       = 0x1000    /**< Not a valid action for a group object member */
+} bcmbal_action_cmd_id;
+
+/** classifier ID. 
+ */
+typedef enum bcmbal_classifier_id
+{
+    BCMBAL_CLASSIFIER_ID_NONE               = 0,
+    BCMBAL_CLASSIFIER_ID_O_TPID             = 0x0001,   /**< Outer TPID of the packet to be classified */
+    BCMBAL_CLASSIFIER_ID_O_VID              = 0x0002,   /**< Outer VID of the packet to be classified */
+    BCMBAL_CLASSIFIER_ID_I_TPID             = 0x0004,   /**< Inner TPID of the packet to be classified */
+    BCMBAL_CLASSIFIER_ID_I_VID              = 0x0008,   /**< Inner VID of the packet to be classified */
+    BCMBAL_CLASSIFIER_ID_O_PBITS            = 0x0010,   /**< Outer PBITS of the packet to be classified */
+    BCMBAL_CLASSIFIER_ID_I_PBITS            = 0x0020,   /**< Inner PBITS of the packet to be classified */
+    BCMBAL_CLASSIFIER_ID_ETHER_TYPE         = 0x0040,   /**< Ethertype of the packet to be classified */
+    BCMBAL_CLASSIFIER_ID_DST_MAC            = 0x0080,   /**< Destination MAC address of the packet to be classified */
+    BCMBAL_CLASSIFIER_ID_SRC_MAC            = 0x0100,   /**< Source MAC address of the packet to be classified */
+    BCMBAL_CLASSIFIER_ID_IP_PROTO           = 0x0200,   /**< IP protocol of the packet to be classified */
+    BCMBAL_CLASSIFIER_ID_DST_IP             = 0x0400,   /**< Destination IP address of the packet to be classified */
+    BCMBAL_CLASSIFIER_ID_SRC_IP             = 0x0800,   /**< Source IP address of the packet to be classified */
+    BCMBAL_CLASSIFIER_ID_SRC_PORT           = 0x1000,   /**< Source port of the packet to be classified */
+    BCMBAL_CLASSIFIER_ID_DST_PORT           = 0x2000,   /**< Destination port of the packet to be classified */
+    BCMBAL_CLASSIFIER_ID_PKT_TAG_TYPE       = 0x4000,   /**< The tag type of the ingress packets */
+    BCMBAL_CLASSIFIER_ID_ALL                = 0x7FFF    /**< All fields */
+} bcmbal_classifier_id;
+
+/** Packet tag type. 
+ */
+typedef enum bcmbal_pkt_tag_type
+{
+    BCMBAL_PKT_TAG_TYPE_NONE                = 0,
+    BCMBAL_PKT_TAG_TYPE_UNTAGGED            = 0x0001,   /**< Untagged. */
+    BCMBAL_PKT_TAG_TYPE_SINGLE_TAG          = 0x0002,   /**< Single tag. */
+    BCMBAL_PKT_TAG_TYPE_DOUBLE_TAG          = 0x0004    /**< Double tag. */
+} bcmbal_pkt_tag_type;
+
+/** Generic enable/disable enumeration 
+ */
+typedef enum bcmbal_control
+{
+    BCMBAL_CONTROL_DISABLE                  = 0,        /**< disable. */
+    BCMBAL_CONTROL_ENABLE                   = 1,        /**< enable. */
+    BCMBAL_CONTROL__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmbal_control;
+
+/** Destination type. 
+ */
+typedef enum bcmbal_dest_type
+{
+    BCMBAL_DEST_TYPE_NNI                    = 1,        /**< for packets being sent to the NNI */
+    BCMBAL_DEST_TYPE_SUB_TERM               = 2,        /**< for packets being sent to a subscriber terminal */
+    BCMBAL_DEST_TYPE_HOST                   = 3         /**<  for packet indications received from NNI or SUB_TERM and being sent to the host */
+} bcmbal_dest_type;
+
+/** Downstrean action for unknown packets. 
+ */
+typedef enum bcmbal_ds_miss_mode
+{
+    BCMBAL_DS_MISS_MODE_DISCARD             = 0,        /**< Discard. */
+    BCMBAL_DS_MISS_MODE_BROADCAST           = 1,        /**< Broadcast. */
+    BCMBAL_DS_MISS_MODE_VID                 = 2,        /**< Vid. */
+    BCMBAL_DS_MISS_MODE__NUM_OF                         /**< Number of enum entries, not an entry itself. */
+} bcmbal_ds_miss_mode;
+
+/** Extra BW Eligibility Type 
+ */
+typedef enum bcmbal_extra_bw_eligibility_type
+{
+    BCMBAL_EXTRA_BW_ELIGIBILITY_TYPE_NONE       = 0,    /**< None */
+    BCMBAL_EXTRA_BW_ELIGIBILITY_TYPE_NOT_ASSURED= 1,    /**< Not assured */
+    BCMBAL_EXTRA_BW_ELIGIBILITY_TYPE_BEST_EFFORT= 2,    /**< Best effort */
+    BCMBAL_EXTRA_BW_ELIGIBILITY_TYPE__NUM_OF            /**< Number of enum entries, not an entry itself. */
+} bcmbal_extra_bw_eligibility_type;
+
+/** Flow Type. 
+ */
+typedef enum bcmbal_flow_type
+{
+    BCMBAL_FLOW_TYPE_UPSTREAM                   = 1,    /**< Upstream flow */
+    BCMBAL_FLOW_TYPE_DOWNSTREAM                 = 2,    /**< Downstream Flow */
+    BCMBAL_FLOW_TYPE_BROADCAST                  = 3,    /**< Broadcast Flow */
+    BCMBAL_FLOW_TYPE_MULTICAST                  = 4     /**< Multicast Flow */
+} bcmbal_flow_type;
+
+/** Member operation type. 
+ */
+typedef enum bcmbal_group_member_cmd
+{
+    BCMBAL_GROUP_MEMBER_CMD_ADD_MEMBERS         = 1,    /**< Add new members. */
+    BCMBAL_GROUP_MEMBER_CMD_REM_MEMBERS         = 2,    /**< Remove existing members. */
+    BCMBAL_GROUP_MEMBER_CMD_SET_MEMBERS         = 3     /**< Replace members with new set. */
+} bcmbal_group_member_cmd;
+
+/** owner of the group 
+ */
+typedef enum bcmbal_group_owner
+{
+    BCMBAL_GROUP_OWNER_NONE                     = 0,    /**< no owner */
+    BCMBAL_GROUP_OWNER_MULTICAST                = 1,    /**< used as multicast group */
+    BCMBAL_GROUP_OWNER_UNICAST                  = 2,    /**< used as unicast group */
+    BCMBAL_GROUP_OWNER__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmbal_group_owner;
+
+/** Interface type. 
+ */
+typedef enum bcmbal_intf_type
+{
+    BCMBAL_INTF_TYPE_NNI                        = 0,    /**< NNI Interface. */
+    BCMBAL_INTF_TYPE_PON                        = 1,    /**< POIN Interface. */
+    BCMBAL_INTF_TYPE__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmbal_intf_type;
+
+/** Interworking Function Mode. 
+ */
+typedef enum bcmbal_iwf_mode
+{
+    BCMBAL_IWF_MODE_DIRECT_MAPPING              = 0,    /**< Direct mapping. */
+    BCMBAL_IWF_MODE_PER_FLOW                    = 1,    /**< Per flow . */
+    BCMBAL_IWF_MODE__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmbal_iwf_mode;
+
+/** SLA ID. 
+ */
+typedef enum bcmbal_sla_id
+{
+    BCMBAL_SLA_ID_NONE                          = 0,
+    BCMBAL_SLA_ID_MIN_RATE                      = 0x0001,   /**< The minimal rate for this flow, in kilobits per second (optional) */
+    BCMBAL_SLA_ID_MAX_RATE                      = 0x0002,   /**< The maximum rate for this flow, in kilobits per second (optional) */
+    BCMBAL_SLA_ID_ALL                           = 0x0003    /**< All fields */
+} bcmbal_sla_id;
+
+/** Admin state values for access terminal object 
+ */
+typedef enum bcmbal_state
+{
+    BCMBAL_STATE_UP                             = 1,        /**< Admin state up */
+    BCMBAL_STATE_DOWN                           = 2,        /**< Admin state down */
+    BCMBAL_STATE_TESTING                        = 3         /**< Admin state testing */
+} bcmbal_state;
+
+/** Oper status values 
+ */
+typedef enum bcmbal_status
+{
+    BCMBAL_STATUS_UP                            = 1,        /**< Oper status up */
+    BCMBAL_STATUS_DOWN                          = 2,        /**< Oper status down */
+    BCMBAL_STATUS_TESTING                       = 3,        /**< Oper status testing */
+    BCMBAL_STATUS_NOT_PRESENT                   = 4,        /**< Oper status not present */
+    BCMBAL_STATUS_LOWER_LAYER_DOWN              = 5,        /**< Oper status lower layer down */
+    BCMBAL_STATUS_UNKNOWN                       = 6         /**< Oper status unknown */
+} bcmbal_status;
+
+/** Buffer Admission Control Type 
+ */
+typedef enum bcmbal_tm_bac_type
+{
+    BCMBAL_TM_BAC_TYPE_TAILDROP                 = 0,        /**< Taildrop  */
+    BCMBAL_TM_BAC_TYPE_WTAILDROP                = 1,        /**< Weighted taildrop */
+    BCMBAL_TM_BAC_TYPE_RED                      = 2,        /**< Random Early Discard */
+    BCMBAL_TM_BAC_TYPE_WRED                     = 3,        /**< Weighted Random Early Discard */
+    BCMBAL_TM_BAC_TYPE__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmbal_tm_bac_type;
+
+/** TM Creation Mode 
+ */
+typedef enum bcmbal_tm_creation_mode
+{
+    BCMBAL_TM_CREATION_MODE_MANUAL              = 0,            /**< tm object created manually */
+    BCMBAL_TM_CREATION_MODE_AUTO                = 1,            /**< tm object created automatically */
+    BCMBAL_TM_CREATION_MODE__NUM_OF                             /**< Number of enum entries, not an entry itself. */
+} bcmbal_tm_creation_mode;
+
+/** Scheduling Level for the Children TM  
+ */
+typedef enum bcmbal_tm_sched_child_type
+{
+    BCMBAL_TM_SCHED_CHILD_TYPE_QUEUE            = 0,            /**< Queue-level scheduler */
+    BCMBAL_TM_SCHED_CHILD_TYPE_SCHED            = 1,            /**< Scheduler-level scheduler */
+    BCMBAL_TM_SCHED_CHILD_TYPE__NUM_OF                          /**< Number of enum entries, not an entry itself. */
+} bcmbal_tm_sched_child_type;
+
+/** Traffic Direction 
+ */
+typedef enum bcmbal_tm_sched_dir
+{
+    BCMBAL_TM_SCHED_DIR_US                      = 1,            /**< Upstream */
+    BCMBAL_TM_SCHED_DIR_DS                      = 2             /**< Downstream */
+} bcmbal_tm_sched_dir;
+
+/** TM Scheduler Owner Type 
+ */
+typedef enum bcmbal_tm_sched_owner_type
+{
+    BCMBAL_TM_SCHED_OWNER_TYPE_UNDEFINED        = 0,            /**< Undefined */
+    BCMBAL_TM_SCHED_OWNER_TYPE_INTERFACE        = 1,            /**< Interface */
+    BCMBAL_TM_SCHED_OWNER_TYPE_SUB_TERM         = 2,            /**< Subscriber terminal */
+    BCMBAL_TM_SCHED_OWNER_TYPE_AGG_PORT         = 3,            /**< TM scheduler is owned by aggregation port */
+    BCMBAL_TM_SCHED_OWNER_TYPE_UNI              = 4,            /**< TM scheduler is owned by UNI port */
+    BCMBAL_TM_SCHED_OWNER_TYPE_VIRTUAL          = 5,            /**< Other unspecified owner */
+    BCMBAL_TM_SCHED_OWNER_TYPE__NUM_OF                          /**< Number of enum entries, not an entry itself. */
+} bcmbal_tm_sched_owner_type;
+
+/** tm_sched_owner agg_port ID. 
+ */
+typedef enum bcmbal_tm_sched_owner_agg_port_id
+{
+    BCMBAL_TM_SCHED_OWNER_AGG_PORT_ID_NONE          = 0,
+    BCMBAL_TM_SCHED_OWNER_AGG_PORT_ID_INTF_ID       = 0x0001,   /**< PON interface id */
+    BCMBAL_TM_SCHED_OWNER_AGG_PORT_ID_SUB_TERM_ID   = 0x0002,   /**< Subscriber terminal id */
+    BCMBAL_TM_SCHED_OWNER_AGG_PORT_ID_AGG_PORT_ID   = 0x0004,   /**< Aggregation port id */
+    BCMBAL_TM_SCHED_OWNER_AGG_PORT_ID_ALL           = 0x0007    /**< All fields */
+} bcmbal_tm_sched_owner_agg_port_id;
+
+/** tm_sched_parent ID. 
+ */
+typedef enum bcmbal_tm_sched_parent_id
+{
+    BCMBAL_TM_SCHED_PARENT_ID_NONE                  = 0,
+    BCMBAL_TM_SCHED_PARENT_ID_SCHED_ID              = 0x0001,   /**< Parent scheduler id */
+    BCMBAL_TM_SCHED_PARENT_ID_PRIORITY              = 0x0002,   /**< Priority */
+    BCMBAL_TM_SCHED_PARENT_ID_WEIGHT                = 0x0004,   /**< Weight */
+    BCMBAL_TM_SCHED_PARENT_ID_ALL                   = 0x0007    /**< All fields */
+} bcmbal_tm_sched_parent_id;
+
+/** Scheduler Type 
+ */
+typedef enum bcmbal_tm_sched_type
+{
+    BCMBAL_TM_SCHED_TYPE_NONE                       = 0,        /**< NO scheduling */
+    BCMBAL_TM_SCHED_TYPE_WFQ                        = 1,        /**< Weighted Fair Queue */
+    BCMBAL_TM_SCHED_TYPE_SP                         = 2,        /**< Strict Priority */
+    BCMBAL_TM_SCHED_TYPE_SP_WFQ                     = 3,        /**< Hybrid SP + WFQ */
+    BCMBAL_TM_SCHED_TYPE__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmbal_tm_sched_type;
+
+/** tm_shaping ID. 
+ */
+typedef enum bcmbal_tm_shaping_id
+{
+    BCMBAL_TM_SHAPING_ID_NONE                       = 0,
+    BCMBAL_TM_SHAPING_ID_SBR                        = 0x0001,   /**< Sustained Bit Rate (kbps) */
+    BCMBAL_TM_SHAPING_ID_PBR                        = 0x0002,   /**< Peak Bit Rate (kbps) */
+    BCMBAL_TM_SHAPING_ID_BURST                      = 0x0004,   /**< Max Burst Bytes at Peak Bit Rate */
+    BCMBAL_TM_SHAPING_ID_ALL                        = 0x0007    /**< All fields */
+} bcmbal_tm_shaping_id;
+
+/** tm_tcont_sla ID. 
+ */
+typedef enum bcmbal_tm_tcont_sla_id
+{
+    BCMBAL_TM_TCONT_SLA_ID_NONE                     = 0,
+    BCMBAL_TM_TCONT_SLA_ID_EXTRA_BW_ELIG            = 0x0001,   /**< Extra BW eligibility type */
+    BCMBAL_TM_TCONT_SLA_ID_NRT_CBR                  = 0x0002,   /**< NRT CBR */
+    BCMBAL_TM_TCONT_SLA_ID_RT_CBR                   = 0x0004,   /**< RT_CBR */
+    BCMBAL_TM_TCONT_SLA_ID_RT_PROFILE               = 0x0008,   /**< RT Profile */
+    BCMBAL_TM_TCONT_SLA_ID_NRT_PROFILE              = 0x0010,   /**< NRT Profile */
+    BCMBAL_TM_TCONT_SLA_ID_ALL                      = 0x001F    /**< All fields */
+} bcmbal_tm_tcont_sla_id;
+
+/** Transceiver types 
+ */
+typedef enum bcmbal_trx_type
+{
+    BCMBAL_TRX_TYPE_GPON_SPS_43_48                  = 0,        /**< gpon_sps_43_48. */
+    BCMBAL_TRX_TYPE_GPON_SPS_SOG_4321               = 1,        /**< gpon_sps_sog_4321. */
+    BCMBAL_TRX_TYPE_GPON_LTE_3680_M                 = 2,        /**< gpon_lte_3680_m. */
+    BCMBAL_TRX_TYPE_GPON_SOURCE_PHOTONICS           = 3,        /**< gpon_source_photonics. */
+    BCMBAL_TRX_TYPE_GPON_LTE_3680_P                 = 4,        /**< gpon_lte_3680_p. */
+    BCMBAL_TRX_TYPE_XGPON_LTH_7222_PC               = 5,        /**< xgpon_lth_7222_pc. */
+    BCMBAL_TRX_TYPE_XGPON_LTH_7226_PC               = 6,        /**< xgpon_lth_7226_pc. */
+    BCMBAL_TRX_TYPE_XGPON_LTH_5302_PC               = 7,        /**< xgpon_lth_5302_pc. */
+    BCMBAL_TRX_TYPE__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmbal_trx_type;
+
+#define bcmbal_action_id_none                           BCMBAL_ACTION_ID_NONE
+#define bcmbal_action_id_cmds_bitmask                   BCMBAL_ACTION_ID_CMDS_BITMASK
+#define bcmbal_action_id_o_vid                          BCMBAL_ACTION_ID_O_VID
+#define bcmbal_action_id_o_pbits                        BCMBAL_ACTION_ID_O_PBITS
+#define bcmbal_action_id_o_tpid                         BCMBAL_ACTION_ID_O_TPID
+#define bcmbal_action_id_i_vid                          BCMBAL_ACTION_ID_I_VID
+#define bcmbal_action_id_i_pbits                        BCMBAL_ACTION_ID_I_PBITS
+#define bcmbal_action_id_i_tpid                         BCMBAL_ACTION_ID_I_TPID
+#define bcmbal_action_id_all                            BCMBAL_ACTION_ID_ALL
+#define bcmbal_classifier_id_none                       BCMBAL_CLASSIFIER_ID_NONE
+#define bcmbal_classifier_id_o_tpid                     BCMBAL_CLASSIFIER_ID_O_TPID
+#define bcmbal_classifier_id_o_vid                      BCMBAL_CLASSIFIER_ID_O_VID
+#define bcmbal_classifier_id_i_tpid                     BCMBAL_CLASSIFIER_ID_I_TPID
+#define bcmbal_classifier_id_i_vid                      BCMBAL_CLASSIFIER_ID_I_VID
+#define bcmbal_classifier_id_o_pbits                    BCMBAL_CLASSIFIER_ID_O_PBITS
+#define bcmbal_classifier_id_i_pbits                    BCMBAL_CLASSIFIER_ID_I_PBITS
+#define bcmbal_classifier_id_ether_type                 BCMBAL_CLASSIFIER_ID_ETHER_TYPE
+#define bcmbal_classifier_id_dst_mac                    BCMBAL_CLASSIFIER_ID_DST_MAC
+#define bcmbal_classifier_id_src_mac                    BCMBAL_CLASSIFIER_ID_SRC_MAC
+#define bcmbal_classifier_id_ip_proto                   BCMBAL_CLASSIFIER_ID_IP_PROTO
+#define bcmbal_classifier_id_dst_ip                     BCMBAL_CLASSIFIER_ID_DST_IP
+#define bcmbal_classifier_id_src_ip                     BCMBAL_CLASSIFIER_ID_SRC_IP
+#define bcmbal_classifier_id_src_port                   BCMBAL_CLASSIFIER_ID_SRC_PORT
+#define bcmbal_classifier_id_dst_port                   BCMBAL_CLASSIFIER_ID_DST_PORT
+#define bcmbal_classifier_id_pkt_tag_type               BCMBAL_CLASSIFIER_ID_PKT_TAG_TYPE
+#define bcmbal_classifier_id_all                        BCMBAL_CLASSIFIER_ID_ALL
+#define bcmbal_sla_id_none                              BCMBAL_SLA_ID_NONE
+#define bcmbal_sla_id_min_rate                          BCMBAL_SLA_ID_MIN_RATE
+#define bcmbal_sla_id_max_rate                          BCMBAL_SLA_ID_MAX_RATE
+#define bcmbal_sla_id_all                               BCMBAL_SLA_ID_ALL
+#define bcmbal_tm_sched_owner_agg_port_id_none          BCMBAL_TM_SCHED_OWNER_AGG_PORT_ID_NONE
+#define bcmbal_tm_sched_owner_agg_port_id_intf_id       BCMBAL_TM_SCHED_OWNER_AGG_PORT_ID_INTF_ID
+#define bcmbal_tm_sched_owner_agg_port_id_sub_term_id   BCMBAL_TM_SCHED_OWNER_AGG_PORT_ID_SUB_TERM_ID
+#define bcmbal_tm_sched_owner_agg_port_id_agg_port_id   BCMBAL_TM_SCHED_OWNER_AGG_PORT_ID_AGG_PORT_ID
+#define bcmbal_tm_sched_owner_agg_port_id_all           BCMBAL_TM_SCHED_OWNER_AGG_PORT_ID_ALL
+#define bcmbal_tm_sched_parent_id_none                  BCMBAL_TM_SCHED_PARENT_ID_NONE
+#define bcmbal_tm_sched_parent_id_sched_id              BCMBAL_TM_SCHED_PARENT_ID_SCHED_ID
+#define bcmbal_tm_sched_parent_id_priority              BCMBAL_TM_SCHED_PARENT_ID_PRIORITY
+#define bcmbal_tm_sched_parent_id_weight                BCMBAL_TM_SCHED_PARENT_ID_WEIGHT
+#define bcmbal_tm_sched_parent_id_all                   BCMBAL_TM_SCHED_PARENT_ID_ALL
+#define bcmbal_tm_shaping_id_none                       BCMBAL_TM_SHAPING_ID_NONE
+#define bcmbal_tm_shaping_id_sbr                        BCMBAL_TM_SHAPING_ID_SBR
+#define bcmbal_tm_shaping_id_pbr                        BCMBAL_TM_SHAPING_ID_PBR
+#define bcmbal_tm_shaping_id_burst                      BCMBAL_TM_SHAPING_ID_BURST
+#define bcmbal_tm_shaping_id_all                        BCMBAL_TM_SHAPING_ID_ALL
+#define bcmbal_tm_tcont_sla_id_none                     BCMBAL_TM_TCONT_SLA_ID_NONE
+#define bcmbal_tm_tcont_sla_id_extra_bw_elig            BCMBAL_TM_TCONT_SLA_ID_EXTRA_BW_ELIG
+#define bcmbal_tm_tcont_sla_id_nrt_cbr                  BCMBAL_TM_TCONT_SLA_ID_NRT_CBR
+#define bcmbal_tm_tcont_sla_id_rt_cbr                   BCMBAL_TM_TCONT_SLA_ID_RT_CBR
+#define bcmbal_tm_tcont_sla_id_rt_profile               BCMBAL_TM_TCONT_SLA_ID_RT_PROFILE
+#define bcmbal_tm_tcont_sla_id_nrt_profile              BCMBAL_TM_TCONT_SLA_ID_NRT_PROFILE
+#define bcmbal_tm_tcont_sla_id_all                      BCMBAL_TM_TCONT_SLA_ID_ALL
+
+/** action. 
+ */
+typedef struct bcmbal_action
+{
+    bcmbal_action_id presence_mask;     /**< Presence Mask. */
+    bcmbal_action_cmd_id cmds_bitmask;  /**< Commands bitmask. */
+    uint16_t o_vid;                     /**< Outer vid. */
+    uint8_t o_pbits;                    /**< Outer pbits. */
+    uint16_t o_tpid;                    /**< Outer tpid. */
+    uint16_t i_vid;                     /**< Inner vid. */
+    uint8_t i_pbits;                    /**< Inner pbits. */
+    uint16_t i_tpid;                    /**< Inner tpid. */
+} bcmbal_action;
+
+/** Variable-length list of aggregation_port_id. 
+ */
+typedef struct bcmbal_aggregation_port_id_list_u8
+{
+    uint8_t len;                        /**< List length. */
+    bcmbal_aggregation_port_id *val;    /**< List contents. */
+} bcmbal_aggregation_port_id_list_u8;
+
+/** classifier. 
+ */
+typedef struct bcmbal_classifier
+{
+    bcmbal_classifier_id presence_mask; /**< Presence Mask. */
+    uint16_t o_tpid;                    /**< Outer TPID of the packet to be classified */
+    uint16_t o_vid;                     /**< Outer VID of the packet to be classified */
+    uint16_t i_tpid;                    /**< Inner TPID of the packet to be classified */
+    uint16_t i_vid;                     /**< Inner VID of the packet to be classified */
+    uint8_t o_pbits;                    /**< Outer PBITS of the packet to be classified */
+    uint8_t i_pbits;                    /**< Inner PBITS of the packet to be classified */
+    uint16_t ether_type;                /**< Ethertype of the packet to be classified */
+    bcmos_mac_address dst_mac;          /**< Destination MAC address of the packet to be classified */
+    bcmos_mac_address src_mac;          /**< Source MAC address of the packet to be classified */
+    uint8_t ip_proto;                   /**< IP protocol of the packet to be classified */
+    bcmos_ipv4_address dst_ip;          /**< Destination IP address of the packet to be classified */
+    bcmos_ipv4_address src_ip;          /**< Source IP address of the packet to be classified */
+    uint16_t src_port;                  /**< Source port of the packet to be classified */
+    uint16_t dst_port;                  /**< Destination port of the packet to be classified */
+    bcmbal_pkt_tag_type pkt_tag_type;   /**< The tag type of the ingress packets */
+} bcmbal_classifier;
+
+/** Packet destination. 
+ */
+typedef struct bcmbal_dest
+{
+    bcmbal_dest_type type;              /**< packet destination. */
+    union
+    {
+        struct
+        {
+            bcmbal_intf_id int_id;      /**< Interface ID. */
+        } nni;
+
+        struct
+        {
+            bcmbal_sub_id sub_term_id;  /**< Subscriber terminal ID. */
+            uint16_t sub_term_uni;      /**< Subscriber terminal UNI. */
+            uint16_t int_id;            /**< Interface ID. */
+        } sub_term;
+    } u;
+} bcmbal_dest;
+
+/** Variable-length list of flow_id. 
+ */
+typedef struct bcmbal_flow_id_list_u32
+{
+    uint32_t len;           /**< List length. */
+    bcmbal_flow_id *val;    /**< List contents. */
+} bcmbal_flow_id_list_u32;
+
+/** Queue Reference 
+ */
+typedef struct bcmbal_tm_queue_ref
+{
+    bcmbal_tm_sched_id sched_id;    /**< Scheduler (tm_sched) ID */
+    bcmbal_tm_queue_id queue_id;    /**< Queue ID */
+} bcmbal_tm_queue_ref;
+
+/** Group Member Info. 
+ */
+typedef struct bcmbal_group_member_info
+{
+    bcmbal_intf_id intf_id;             /**< Access interface id for this member */
+    bcmbal_service_port_id svc_port_id; /**< The multicast "GEM" for this member */
+    bcmbal_action action;               /**< VLAN actions */
+    bcmbal_tm_queue_ref queue;          /**< Egress queue */
+} bcmbal_group_member_info;
+
+/** Variable-length list of group_member_info. 
+ */
+typedef struct bcmbal_group_member_info_list_u16
+{
+    uint16_t len;                   /**< List length. */
+    bcmbal_group_member_info *val;  /**< List contents. */
+} bcmbal_group_member_info_list_u16;
+
+/** Password. 
+ */
+typedef struct bcmbal_password
+{
+    uint8_t arr[10];    /**< Array. */
+} bcmbal_password;
+
+/** Registration id. 
+ */
+typedef struct bcmbal_registration_id
+{
+    uint8_t arr[36];    /**< ONU registration ID */
+} bcmbal_registration_id;
+
+/** Serial number. 
+ */
+typedef struct bcmbal_serial_number
+{
+    uint8_t vendor_id[4];       /**< vendor id. */
+    uint8_t vendor_specific[4]; /**< vendor specific. */
+} bcmbal_serial_number;
+
+/** Variable-length list of service_port_id. 
+ */
+typedef struct bcmbal_service_port_id_list_u8
+{
+    uint8_t len;                    /**< List length. */
+    bcmbal_service_port_id *val;    /**< List contents. */
+} bcmbal_service_port_id_list_u8;
+
+/** SLA. 
+ */
+typedef struct bcmbal_sla
+{
+    bcmbal_sla_id presence_mask;    /**< Presence Mask. */
+    uint32_t min_rate;              /**< The minimal rate for this flow, in kilobits per second (optional) */
+    uint32_t max_rate;              /**< The maximum rate for this flow, in kilobits per second (optional) */
+} bcmbal_sla;
+
+/** Variable-length list of sub_id. 
+ */
+typedef struct bcmbal_sub_id_list_u16
+{
+    uint16_t len;       /**< List length. */
+    bcmbal_sub_id *val; /**< List contents. */
+} bcmbal_sub_id_list_u16;
+
+/** Random Early Discard Configuration 
+ */
+typedef struct bcmbal_tm_red
+{
+    bcmbal_percent min_threshold;   /**< Min threshold in percent of max queue size */
+    bcmbal_percent max_threshold;   /**< Max threshold in percent of max queue size */
+    bcmbal_percent max_probability; /**< Discard probability for occupancy between min_threshold and max_threshold */
+} bcmbal_tm_red;
+
+/** Queue Buffer Admission Control 
+ */
+typedef struct bcmbal_tm_bac
+{
+    bcmbal_tm_bac_type type;        /**< Buffer Admission Control Type */
+    union
+    {
+        struct
+        {
+            uint32_t max_size;      /**< max number of packets in the queue */
+        } taildrop;
+
+        struct
+        {
+            bcmbal_tm_red red;      /**< Random Early Discard configuration */
+        } red;
+
+        struct
+        {
+            bcmbal_tm_red green;    /**< Green Random Early Discard Configuration */
+            bcmbal_tm_red yellow;   /**< Yellow Random Early Discard Configuration */
+            bcmbal_tm_red red;      /**< Red Random Early Discard Configuration */
+        } wred;
+    } u;
+} bcmbal_tm_bac;
+
+/** Variable-length list of tm_queue_id. 
+ */
+typedef struct bcmbal_tm_queue_id_list_u8
+{
+    uint8_t len;                /**< List length. */
+    bcmbal_tm_queue_id *val;    /**< List contents. */
+} bcmbal_tm_queue_id_list_u8;
+
+/** Variable-length list of tm_sched_id. 
+ */
+typedef struct bcmbal_tm_sched_id_list_u8
+{
+    uint8_t len;                /**< List length. */
+    bcmbal_tm_sched_id *val;    /**< List contents. */
+} bcmbal_tm_sched_id_list_u8;
+
+/** TM Scheduler Owner 
+ */
+typedef struct bcmbal_tm_sched_owner
+{
+    bcmbal_tm_sched_owner_type type;    /**< Owner type */
+    union
+    {
+        struct
+        {
+            bcmbal_intf_type intf_type; /**< Interface Type */
+            bcmbal_intf_id intf_id;     /**< Interface ID */
+        } interface;
+
+        struct
+        {
+            bcmbal_intf_id intf_id;     /**< PON interface id */
+            bcmbal_sub_id sub_term_id;  /**< Subscriber terminal ID */
+        } sub_term;
+
+        struct
+        {
+            bcmbal_tm_sched_owner_agg_port_id presence_mask;    /**< Presence Mask. */
+            uint8_t intf_id;                        /**< PON interface id */
+            bcmbal_sub_id sub_term_id;              /**< Subscriber terminal id */
+            bcmbal_aggregation_port_id agg_port_id; /**< Aggregation port id */
+        } agg_port;
+
+        struct
+        {
+            uint8_t intf_id;                        /**< PON interface id */
+            bcmbal_sub_id sub_term_id;              /**< Subscriber terminal id */
+            uint8_t idx;    /**< Index at subscriber terminal */
+        } uni;
+
+        struct
+        {
+            uint32_t idx;   /**< Owner index */
+        } virtual;
+    } u;
+} bcmbal_tm_sched_owner;
+
+/** Scheduling Parent Connect Point 
+ */
+typedef struct bcmbal_tm_sched_parent
+{
+    bcmbal_tm_sched_parent_id presence_mask;    /**< Presence Mask. */
+    bcmbal_tm_sched_id sched_id;                /**< Parent scheduler id */
+    bcmbal_tm_priority priority;                /**< Priority */
+    bcmbal_tm_weight weight;                    /**< Weight */
+} bcmbal_tm_sched_parent;
+
+/** Shaping Parameters 
+ */
+typedef struct bcmbal_tm_shaping
+{
+    bcmbal_tm_shaping_id presence_mask; /**< Presence Mask. */
+    uint32_t sbr;                       /**< Sustained Bit Rate (kbps) */
+    uint32_t pbr;                       /**< Peak Bit Rate (kbps) */
+    uint32_t burst;                     /**< Max Burst Bytes at Peak Bit Rate */
+} bcmbal_tm_shaping;
+
+/** ITU-PON Extended SLA Parameters 
+ */
+typedef struct bcmbal_tm_tcont_sla
+{
+    bcmbal_tm_tcont_sla_id presence_mask;           /**< Presence Mask. */
+    bcmbal_extra_bw_eligibility_type extra_bw_elig; /**< Extra BW eligibility type */
+    uint8_t nrt_cbr;        /**< NRT CBR */
+    uint8_t rt_cbr;         /**< RT_CBR */
+    uint8_t rt_profile;     /**< RT Profile */
+    uint8_t nrt_profile;    /**< NRT Profile */
+} bcmbal_tm_tcont_sla;
+
+/** Variable-length list of U8. 
+ */
+typedef struct bcmbal_u8_list_u32
+{
+    uint32_t len;   /**< List length. */
+    uint8_t *val;   /**< List contents. */
+} bcmbal_u8_list_u32;
+
+/** Structure definition for the "key" group of the "access_terminal" object. 
+ */
+typedef struct bcmbal_access_terminal_key
+{
+    bcmbal_access_id access_term_id;    /**< Reserved (set to 0) */
+} bcmbal_access_terminal_key;
+
+/** Structure definition for the "cfg" group of the "access_terminal" object. 
+ */
+typedef struct bcmbal_access_terminal_cfg_data
+{
+    bcmbal_state admin_state;   /**< Administrative state */
+    bcmbal_status oper_status;  /**< Operational status */
+    bcmbal_iwf_mode iwf_mode;   /**< The interworking mode */
+} bcmbal_access_terminal_cfg_data;
+
+/** Transport message definition for "cfg" group of "access_terminal" object. 
+ */
+typedef struct bcmbal_access_terminal_cfg
+{
+    bcmbal_cfg hdr;                 /**< Transport header. */
+    bcmbal_access_terminal_key key; /**< Object key. */
+    bcmbal_access_terminal_cfg_data data;   /**< All properties that must be set by the user. */
+} bcmbal_access_terminal_cfg;
+
+/** Structure definition for the "ind" group of the "access_terminal" object. 
+ */
+typedef struct bcmbal_access_terminal_ind_data
+{
+    bcmbal_state admin_state;   /**< Current administrative state */
+    bcmbal_status oper_status;  /**< Current operational status */
+    bcmbal_iwf_mode iwf_mode;   /**< The interworking mode */
+} bcmbal_access_terminal_ind_data;
+
+/** Transport message definition for "ind" group of "access_terminal" object. 
+ */
+typedef struct bcmbal_access_terminal_ind
+{
+    bcmbal_auto hdr;                        /**< Transport header. */
+    bcmbal_access_terminal_key key;         /**< Object key. */
+    bcmbal_access_terminal_ind_data data;   /**< All properties that must be set by the user. */
+} bcmbal_access_terminal_ind;
+
+/** Structure definition for the "key" group of the "flow" object. 
+ */
+typedef struct bcmbal_flow_key
+{
+    bcmbal_flow_id flow_id;     /**< The ID of the flow object instance being referenced */
+    bcmbal_flow_type flow_type; /**< The type of the flow, Upstream, Downstream, Broadcast or Multicast */
+} bcmbal_flow_key;
+
+/** Structure definition for the "cfg" group of the "flow" object. 
+ */
+typedef struct bcmbal_flow_cfg_data
+{
+    bcmbal_state admin_state;               /**< Administrative state */
+    bcmbal_status oper_status;              /**< Operational status */
+    bcmbal_intf_id access_int_id;           /**< The ID of the subscriber side interface; i.e. PON */
+    bcmbal_intf_id network_int_id;          /**< The ID of the network side interface; i.e. NNI */
+    bcmbal_sub_id sub_term_id;              /**< The ID of the subsccriber terminal device */
+    uint8_t sub_term_uni_idx;               /**< The index of the subsccriber terminal uni port the flow is related to */
+    bcmbal_service_port_id svc_port_id;     /**< The ID of the service port (for GPON/XGPON - GEM ID) */
+    bcmbal_aggregation_port_id agg_port_id; /**< The ID of the aggregate port (for GPON/XGPON - ALLOC ID) */
+    bcmos_bool resolve_mac;                 /**< A flag indicating if the MAC address table should be used in DS GEM resolution */
+    bcmbal_classifier classifier;           /**< The classifier for this flow */
+    bcmbal_action action;                   /**< The action associated with the flow */
+    bcmbal_sla sla;             /**< SLA parameters for this flow */
+    bcmbal_cookie cookie;       /**< Application cookie */
+    uint16_t priority;          /**< Priority for this flow in case of multiple match. */
+    bcmbal_group_id group_id;   /**< RW - The multicast group associated with this flow, valid for type MULTICAST only */
+    bcmbal_tm_queue_ref queue;  /**< Egress queue */
+} bcmbal_flow_cfg_data;
+
+/** Transport message definition for "cfg" group of "flow" object. 
+ */
+typedef struct bcmbal_flow_cfg
+{
+    bcmbal_cfg hdr;             /**< Transport header. */
+    bcmbal_flow_key key;        /**< Object key. */
+    bcmbal_flow_cfg_data data;  /**< All properties that must be set by the user. */
+} bcmbal_flow_cfg;
+
+/** Structure definition for the "stat" group of the "flow" object. 
+ */
+typedef struct bcmbal_flow_stat_data
+{
+    uint64_t rx_packets;    /**< Received packets. */
+    uint64_t rx_bytes;      /**< Received bytes. */
+    uint64_t tx_packets;    /**< Transmitted packets. */
+    uint64_t tx_bytes;      /**< Transmitted bytes. */
+} bcmbal_flow_stat_data;
+
+/** Transport message definition for "stat" group of "flow" object. 
+ */
+typedef struct bcmbal_flow_stat
+{
+    bcmbal_stat hdr;            /**< Transport header. */
+    bcmbal_flow_key key;        /**< Object key. */
+    bcmbal_flow_stat_data data; /**< All properties that must be set by the user. */
+} bcmbal_flow_stat;
+
+/** Structure definition for the "ind" group of the "flow" object. 
+ */
+typedef struct bcmbal_flow_ind_data
+{
+    bcmbal_state admin_state;       /**< Administrative state */
+    bcmbal_status oper_status;      /**< Operational Status */
+    uint16_t access_int_id;         /**< The ID of the subscriber side interface; i.e. PON */
+    uint16_t network_int_id;        /**< The ID of the network side interface; i.e. NNI */
+    uint32_t sub_term_id;           /**< The ID of the subsccriber terminal device */
+    uint16_t svc_port_id;           /**< The ID of the service port (for GPON/XGPON - GEM ID) */
+    uint16_t agg_port_id;           /**< The ID of the aggregate port (for GPON/XGPON - ALLOC ID) */
+    bcmos_bool resolve_mac;         /**< A flag indicating if the MAC address table should be used in DS GEM resolution */
+    uint16_t base_tc_id;            /**< The base index of the TC object(s) to be used for this flow */
+    bcmbal_classifier classifier;   /**< The classifier for this flow */
+    bcmbal_action action;           /**< The action associated with the flow */
+    bcmbal_sla sla;                 /**< SLA parameters for this flow */
+    uint32_t cookie;                /**< Application cookie */
+    uint16_t priority;              /**< Priority for this flow in case of multiple match. */
+} bcmbal_flow_ind_data;
+
+/** Transport message definition for "ind" group of "flow" object. 
+ */
+typedef struct bcmbal_flow_ind
+{
+    bcmbal_auto hdr;            /**< Transport header. */
+    bcmbal_flow_key key;        /**< Object key. */
+    bcmbal_flow_ind_data data;  /**< All properties that must be set by the user. */
+} bcmbal_flow_ind;
+
+/** Structure definition for the "key" group of the "group" object. 
+ */
+typedef struct bcmbal_group_key
+{
+    bcmbal_group_id group_id;   /**< The ID of the group object instance being referenced */
+} bcmbal_group_key;
+
+/** Structure definition for the "cfg" group of the "group" object. 
+ */
+typedef struct bcmbal_group_cfg_data
+{
+    bcmbal_group_member_cmd members_cmd;        /**< Membership operation commands. */
+    bcmbal_group_member_info_list_u16 members;  /**< The list of members associated with this group */
+    bcmbal_cookie cookie;                       /**< Application cookie */
+    bcmbal_flow_id_list_u32 flows;              /**< List of flows associated with this group */
+    bcmbal_group_owner owner;                   /**< Owner of the group. */
+} bcmbal_group_cfg_data;
+
+/** Transport message definition for "cfg" group of "group" object. 
+ */
+typedef struct bcmbal_group_cfg
+{
+    bcmbal_cfg hdr;             /**< Transport header. */
+    bcmbal_group_key key;       /**< Object key. */
+    bcmbal_group_cfg_data data; /**< All properties that must be set by the user. */
+} bcmbal_group_cfg;
+
+/** Structure definition for the "key" group of the "interface" object. 
+ */
+typedef struct bcmbal_interface_key
+{
+    uint32_t intf_id;           /**< intf_id. */
+    bcmbal_intf_type intf_type; /**< intf_type. */
+} bcmbal_interface_key;
+
+/** Structure definition for the "cfg" group of the "interface" object. 
+ */
+typedef struct bcmbal_interface_cfg_data
+{
+    bcmbal_state admin_state;   /**< Administrative state */
+    bcmbal_status oper_status;  /**< Operational status */
+    bcmbal_aggregation_port_id min_data_agg_port_id;    /**< The minimum agg_port_id that is allowed in the system */
+    bcmbal_service_port_id min_data_svc_port_id;        /**< The minimum svc_port_id that is allowed in the system */
+    bcmbal_trx_type transceiver_type;                   /**< The transceiver type used on an interface */
+    bcmbal_ds_miss_mode ds_miss_mode;                   /**< Defines the action to take for unknown downstream packets */
+    uint16_t mtu;                   /**< The MTU for an interface */
+    bcmbal_control flow_control;    /**< Flow control enable or disable */
+    bcmbal_tm_sched_id ds_tm;       /**< Downstream scheduler and shaper */
+    bcmbal_tm_sched_id us_tm;       /**< Upstream scheduler and shaper */
+    bcmbal_sub_id_list_u16 sub_term_id_list;    /**< A list of subscriber terminal ids configured on this interface */
+} bcmbal_interface_cfg_data;
+
+/** Transport message definition for "cfg" group of "interface" object. 
+ */
+typedef struct bcmbal_interface_cfg
+{
+    bcmbal_cfg hdr;                 /**< Transport header. */
+    bcmbal_interface_key key;       /**< Object key. */
+    bcmbal_interface_cfg_data data; /**< All properties that must be set by the user. */
+} bcmbal_interface_cfg;
+
+/** Structure definition for the "stat" group of the "interface" object. 
+ */
+typedef struct bcmbal_interface_stat_data
+{
+    uint64_t rx_packets;    /**< Recieved packets. */
+    uint64_t rx_bytes;      /**< Received bytes. */
+    uint64_t tx_packets;    /**< Transmitted packets. */
+    uint64_t tx_bytes;      /**< Transmitted bytes. */
+} bcmbal_interface_stat_data;
+
+/** Transport message definition for "stat" group of "interface" object. 
+ */
+typedef struct bcmbal_interface_stat
+{
+    bcmbal_stat hdr;                    /**< Transport header. */
+    bcmbal_interface_key key;           /**< Object key. */
+    bcmbal_interface_stat_data data;    /**< All properties that must be set by the user. */
+} bcmbal_interface_stat;
+
+/** Structure definition for the "ind" group of the "interface" object. 
+ */
+typedef struct bcmbal_interface_ind_data
+{
+    bcmbal_state admin_state;           /**< Current administrative state */
+    bcmbal_status oper_status;          /**< Current operational state */
+    uint16_t min_data_agg_port_id;      /**< The minimum agg_port_id that is allowed in the system */
+    uint16_t min_data_svc_port_id;      /**< The minimum svc_port_id that is allowed in the system */
+    bcmbal_trx_type transceiver_type;   /**< The transceiver type used on an interface */
+    bcmbal_ds_miss_mode ds_miss_mode;   /**< Defines the action to take for DS unknown packets */
+    uint16_t mtu;                       /**< The MTU for an interface */
+    bcmbal_control flow_control;        /**< Flow control enable or disable */
+    bcmbal_tm_sched_id ds_tm;           /**< Downstream scheduler and shaper */
+    bcmbal_tm_sched_id us_tm;           /**< Upstream scheduler and shaper */
+} bcmbal_interface_ind_data;
+
+/** Transport message definition for "ind" group of "interface" object. 
+ */
+typedef struct bcmbal_interface_ind
+{
+    bcmbal_auto hdr;                /**< Transport header. */
+    bcmbal_interface_key key;       /**< Object key. */
+    bcmbal_interface_ind_data data; /**< All properties that must be set by the user. */
+} bcmbal_interface_ind;
+
+/** Structure definition for the "key" group of the "packet" object. 
+ */
+typedef struct bcmbal_packet_key
+{
+    uint32_t reserved;              /**< Reserved key field. */
+    bcmbal_dest packet_send_dest;   /**< Packet destination. */
+} bcmbal_packet_key;
+
+/** Structure definition for the "cfg" group of the "packet" object. 
+ */
+typedef struct bcmbal_packet_cfg_data
+{
+    bcmbal_flow_id flow_id;             /**< N/A for sending a packet */
+    bcmbal_flow_type flow_type;         /**< Flow Type. */
+    bcmbal_intf_id intf_id;             /**< Interface ID. */
+    bcmbal_intf_type intf_type;         /**< Interface Type. */
+    bcmbal_service_port_id svc_port;    /**< N/A for sending a packet */
+    bcmbal_cookie flow_cookie;          /**< N/A for sending a packet */
+    bcmbal_u8_list_u32 pkt;             /**< Packet Data. */
+} bcmbal_packet_cfg_data;
+
+/** Transport message definition for "cfg" group of "packet" object. 
+ */
+typedef struct bcmbal_packet_cfg
+{
+    bcmbal_cfg hdr;                 /**< Transport header. */
+    bcmbal_packet_key key;          /**< Object key. */
+    bcmbal_packet_cfg_data data;    /**< All properties that must be set by the user. */
+} bcmbal_packet_cfg;
+
+/** Structure definition for the "ind" group of the "packet" object. 
+ */
+typedef struct bcmbal_packet_ind_data
+{
+    bcmbal_flow_id flow_id;             /**< N/A for sending a packet */
+    bcmbal_flow_type flow_type;         /**< Flow Type. */
+    bcmbal_intf_id intf_id;             /**< Interface ID. */
+    bcmbal_intf_type intf_type;         /**< Interface Type. */
+    bcmbal_service_port_id svc_port;    /**< N/A for sending a packet */
+    bcmbal_cookie flow_cookie;          /**< N/A for sending a packet */
+    bcmbal_u8_list_u32 pkt;             /**< Packet Data. */
+} bcmbal_packet_ind_data;
+
+/** Transport message definition for "ind" group of "packet" object. 
+ */
+typedef struct bcmbal_packet_ind
+{
+    bcmbal_auto hdr;                /**< Transport header. */
+    bcmbal_packet_key key;          /**< Object key. */
+    bcmbal_packet_ind_data data;    /**< All properties that must be set by the user. */
+} bcmbal_packet_ind;
+
+/** Structure definition for the "key" group of the "subscriber_terminal" 
+ * object. 
+ */
+typedef struct bcmbal_subscriber_terminal_key
+{
+    bcmbal_sub_id sub_term_id;  /**< sub_term_id. */
+    bcmbal_intf_id intf_id;     /**< intf_id. */
+} bcmbal_subscriber_terminal_key;
+
+/** Structure definition for the "cfg" group of the "subscriber_terminal" 
+ * object. 
+ */
+typedef struct bcmbal_subscriber_terminal_cfg_data
+{
+    bcmbal_state admin_state;           /**< Administrative state */
+    bcmbal_status oper_status;          /**< Operational status */
+    bcmbal_serial_number serial_number; /**< The serial number of an  ITU PON (GPON/XG-PON1/XGS-PON/NG-PON2) subscriber terminal */
+    bcmbal_password password;           /**< The password of a GPON subscriber terminal */
+    bcmbal_registration_id registration_id;                 /**< ONU registration ID of an  ITU PON (XG-PON1/XGS-PON/NG-PON2) subscriber terminal */
+    bcmbal_service_port_id svc_port_id;                     /**< The management service port ID (for PON, the ONU ID) */
+    bcmos_mac_address mac_address;                          /**< The Ethernet MAC address of an EPON subscriber terminal */
+    bcmbal_tm_sched_id ds_tm;                               /**< Downstream scheduler and shaper */
+    bcmbal_tm_sched_id us_tm;                               /**< Upstream scheduler and shaper */
+    bcmbal_service_port_id_list_u8 svc_port_id_list;        /**< A list of bearer traffic svc_port_ids associated with this subscriber terminal */
+    bcmbal_aggregation_port_id_list_u8 agg_port_id_list;    /**< A list of aggr_port_ids associated with this subscriber terminal */
+} bcmbal_subscriber_terminal_cfg_data;
+
+/** Transport message definition for "cfg" group of "subscriber_terminal" 
+ * object. 
+ */
+typedef struct bcmbal_subscriber_terminal_cfg
+{
+    bcmbal_cfg hdr;                     /**< Transport header. */
+    bcmbal_subscriber_terminal_key key; /**< Object key. */
+    bcmbal_subscriber_terminal_cfg_data data;   /**< All properties that must be set by the user. */
+} bcmbal_subscriber_terminal_cfg;
+
+/** Structure definition for the "stat" group of the "subscriber_terminal" 
+ * object. 
+ */
+typedef struct bcmbal_subscriber_terminal_stat_data
+{
+    uint64_t rx_packets;    /**< Received packets on specified object */
+    uint64_t rx_bytes;      /**< Received bytes on specified object */
+    uint64_t tx_packets;    /**< Transmitted packets on specified object */
+    uint64_t tx_bytes;      /**< Transmittted bytes on specified object */
+} bcmbal_subscriber_terminal_stat_data;
+
+/** Transport message definition for "stat" group of "subscriber_terminal" 
+ * object. 
+ */
+typedef struct bcmbal_subscriber_terminal_stat
+{
+    bcmbal_stat hdr;                    /**< Transport header. */
+    bcmbal_subscriber_terminal_key key; /**< Object key. */
+    bcmbal_subscriber_terminal_stat_data data;  /**< All properties that must be set by the user. */
+} bcmbal_subscriber_terminal_stat;
+
+/** Structure definition for the "ind" group of the "subscriber_terminal" 
+ * object. 
+ */
+typedef struct bcmbal_subscriber_terminal_ind_data
+{
+    bcmbal_state admin_state;               /**< Current administrative state */
+    bcmbal_status oper_status;              /**< Current operational status */
+    bcmbal_serial_number serial_number;     /**< The serial number of an  ITU PON (GPON/XG-PON1/XGS-PON/NG-PON2) subscriber terminal */
+    bcmbal_password password;               /**< The password of a GPON subscriber terminal */
+    bcmbal_registration_id registration_id; /**< ONU registration ID of an  ITU PON (XG-PON1/XGS-PON/NG-PON2) subscriber terminal */
+    uint16_t svc_port_id;                   /**< The service port ID (for PON, the ONU ID) */
+    bcmos_mac_address mac_address;          /**< The Ethernet MAC address of an epon subscriber terminal */
+    bcmbal_tm_sched_id ds_tm;               /**< Downstream scheduler and shaper */
+    bcmbal_tm_sched_id us_tm;               /**< Upstream scheduler and shaper */
+} bcmbal_subscriber_terminal_ind_data;
+
+/** Transport message definition for "ind" group of "subscriber_terminal" 
+ * object. 
+ */
+typedef struct bcmbal_subscriber_terminal_ind
+{
+    bcmbal_auto hdr;                    /**< Transport header. */
+    bcmbal_subscriber_terminal_key key; /**< Object key. */
+    bcmbal_subscriber_terminal_ind_data data;   /**< All properties that must be set by the user. */
+} bcmbal_subscriber_terminal_ind;
+
+/** Structure definition for the "key" group of the "tm_queue" object. 
+ */
+typedef struct bcmbal_tm_queue_key
+{
+    bcmbal_tm_sched_id sched_id;    /**< Scheduler that owns the queue */
+    bcmbal_tm_sched_dir sched_dir;  /**< sched dir. */
+    bcmbal_tm_queue_id id;          /**< Queue id */
+} bcmbal_tm_queue_key;
+
+/** Structure definition for the "cfg" group of the "tm_queue" object. 
+ */
+typedef struct bcmbal_tm_queue_cfg_data
+{
+    bcmbal_tm_priority priority;            /**< Scheduling priority */
+    bcmbal_tm_weight weight;                /**< Scheduling weight */
+    bcmbal_tm_shaping rate;                 /**< Rate shaping parameters */
+    bcmbal_tm_bac bac;                      /**< Buffer admission control */
+    bcmbal_tm_creation_mode creation_mode;  /**< Creation mode */
+    uint8_t ref_count;                      /**< reference count (flows) */
+} bcmbal_tm_queue_cfg_data;
+
+/** Transport message definition for "cfg" group of "tm_queue" object. 
+ */
+typedef struct bcmbal_tm_queue_cfg
+{
+    bcmbal_cfg hdr;                 /**< Transport header. */
+    bcmbal_tm_queue_key key;        /**< Object key. */
+    bcmbal_tm_queue_cfg_data data;  /**< All properties that must be set by the user. */
+} bcmbal_tm_queue_cfg;
+
+/** Structure definition for the "stat" group of the "tm_queue" object. 
+ */
+typedef struct bcmbal_tm_queue_stat_data
+{
+    uint64_t packets_ok;        /**< Packets transmitted succewssfully */
+    uint64_t bytes_ok;          /**< Bytes transmitted successfully */
+    uint64_t packets_discarded; /**< Packets discarded */
+    uint64_t bytes_discarded;   /**< Bytes discarded */
+} bcmbal_tm_queue_stat_data;
+
+/** Transport message definition for "stat" group of "tm_queue" object. 
+ */
+typedef struct bcmbal_tm_queue_stat
+{
+    bcmbal_stat hdr;                /**< Transport header. */
+    bcmbal_tm_queue_key key;        /**< Object key. */
+    bcmbal_tm_queue_stat_data data; /**< All properties that must be set by the user. */
+} bcmbal_tm_queue_stat;
+
+/** Structure definition for the "ind" group of the "tm_queue" object. 
+ *
+ * Tm Queue Indication 
+ */
+typedef struct bcmbal_tm_queue_ind_data
+{
+    uint32_t ret;   /**< ret */
+} bcmbal_tm_queue_ind_data;
+
+/** Transport message definition for "ind" group of "tm_queue" object. 
+ */
+typedef struct bcmbal_tm_queue_ind
+{
+    bcmbal_auto hdr;                /**< Transport header. */
+    bcmbal_tm_queue_key key;        /**< Object key. */
+    bcmbal_tm_queue_ind_data data;  /**< All properties that must be set by the user. */
+} bcmbal_tm_queue_ind;
+
+/** Structure definition for the "key" group of the "tm_sched" object. 
+ */
+typedef struct bcmbal_tm_sched_key
+{
+    bcmbal_tm_sched_dir dir;    /**< Traffic direction */
+    bcmbal_tm_sched_id id;      /**< ID */
+} bcmbal_tm_sched_key;
+
+/** Structure definition for the "cfg" group of the "tm_sched" object. 
+ */
+typedef struct bcmbal_tm_sched_cfg_data
+{
+    bcmbal_tm_sched_owner owner;        /**< owner. */
+    bcmbal_tm_sched_type sched_type;    /**< Scheduler type */
+    bcmbal_tm_sched_parent sched_parent;            /**< Scheduling parameters for parent scheduler */
+    bcmbal_tm_sched_child_type sched_child_type;    /**< Scheduling level for children tm  */
+    bcmbal_tm_shaping rate;                 /**< Rate shaping parameters */
+    bcmbal_tm_tcont_sla tcont_sla;          /**< Additional SLA parameters for agg_port owner */
+    bcmbal_tm_creation_mode creation_mode;  /**< Creation mode */
+    bcmbal_tm_queue_id_list_u8 queues;      /**< Subsidiary queues */
+    bcmbal_tm_sched_id_list_u8 sub_scheds;  /**< Subsidiary schedulers */
+    uint8_t num_priorities;                 /**< Max number of strict priority scheduling elements */
+} bcmbal_tm_sched_cfg_data;
+
+/** Transport message definition for "cfg" group of "tm_sched" object. 
+ */
+typedef struct bcmbal_tm_sched_cfg
+{
+    bcmbal_cfg hdr;                 /**< Transport header. */
+    bcmbal_tm_sched_key key;        /**< Object key. */
+    bcmbal_tm_sched_cfg_data data;  /**< All properties that must be set by the user. */
+} bcmbal_tm_sched_cfg;
+
+/** Structure definition for the "ind" group of the "tm_sched" object. 
+ *
+ * Tm Sched Indication 
+ */
+typedef struct bcmbal_tm_sched_ind_data
+{
+    uint32_t ret;   /**< ret */
+} bcmbal_tm_sched_ind_data;
+
+/** Transport message definition for "ind" group of "tm_sched" object. 
+ */
+typedef struct bcmbal_tm_sched_ind
+{
+    bcmbal_auto hdr;                /**< Transport header. */
+    bcmbal_tm_sched_key key;        /**< Object key. */
+    bcmbal_tm_sched_ind_data data;  /**< All properties that must be set by the user. */
+} bcmbal_tm_sched_ind;
+
+/** @} */
+#endif /* BAL_MODEL_TYPES */
diff --git a/bal_release/src/common/include/bal_msg.h b/bal_release/src/common/include/bal_msg.h
new file mode 100644
index 0000000..4ea85c5
--- /dev/null
+++ b/bal_release/src/common/include/bal_msg.h
@@ -0,0 +1,349 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/* Define the top level Doxygen groups. */
+
+/**
+ * @defgroup core  BAL Core Engine
+ *
+ * @defgroup apps  BAL Utils
+ *
+ * @defgroup lib   BAL Libraries
+ *
+ */
+
+/**
+ * @file bal_msg.h
+ *
+ * @brief Include files and miscellaneous macros for the BAL messaging
+ *
+ */
+
+#ifndef	BALMSG_H
+#define	BALMSG_H
+
+#include <bal_objs.h>
+#include <bal_msg_type.h>
+
+
+/*******************************************************************
+ **
+ ** BAL message header helpers
+ **
+ *******************************************************************
+ */
+
+/*
+ * Underlying msg_send timeout units in uS (micro seconds)
+ */
+#define BCMBAL_MSG_TIMEOUT_1_SEC  (1000000)
+
+/*
+ * Get a pointer to the message payload given the bcmos_msg pointer
+ */
+static inline void *bcmbal_payload_ptr_get(bal_comm_msg_hdr *_m)
+{
+    /* payload starts from BAL communication header */
+    return (void *)_m;
+}
+
+/*
+ * Get a pointer to the BAL header given the message payload pointer
+ */
+static inline bal_comm_msg_hdr *bcmbal_bal_hdr_get(void *_msg_payload_ptr)
+{
+    /* payload starts from BAL communication header */
+    return (bal_comm_msg_hdr *)_msg_payload_ptr;
+}
+
+/*
+ * Get a pointer to the BAL header given the bcmos header pointer
+ */
+static inline bal_comm_msg_hdr *bcmbal_bal_hdr_get_by_bcmos_hdr(bcmos_msg *m)
+{
+    return container_of(m, bal_comm_msg_hdr, m);
+}
+
+/*
+ * Get a pointer to the BCMOS header given the message payload pointer
+ */
+static inline bcmos_msg *bcmbal_bcmos_hdr_get(void *_msg_payload_ptr)
+{
+    return &(bcmbal_bal_hdr_get(_msg_payload_ptr)->m);
+}
+
+/*
+ * Set the BAL header parameters given the message payload pointer
+ */
+static inline void bcmbal_msg_hdr_set(void *_msg_payload_ptr,
+                                      bcmos_msg_id _type_major,
+                                      bcmbal_msg_type  _type_minor,
+                                      bal_subsystem _sender_subsys,
+                                      bcmbal_obj_id _msg_id_obj,
+                                      uint16_t _msg_id_oper,
+                                      uint32_t _ex_id)
+{
+    bcmos_msg *os_msg = bcmbal_bcmos_hdr_get(_msg_payload_ptr);
+    bal_comm_msg_hdr *bal_hdr = bcmbal_bal_hdr_get(_msg_payload_ptr);
+
+    /*
+     * set up the bcmos_msg header fields
+     */
+    os_msg->data = (void *)((char *)(bcmbal_bcmos_hdr_get(_msg_payload_ptr)) + sizeof(bcmos_msg));
+    os_msg->start = os_msg->data;
+    os_msg->type = _type_major;
+    os_msg->instance = 0;
+    os_msg->sender = BCMOS_MODULE_ID_NONE; /* doesn't matter */
+
+    /*
+     * set up the bal msg header fields
+     */
+    bal_hdr->version_major = BAL_HDR_VERSION_MAJOR;
+    bal_hdr->version_minor = BAL_HDR_VERSION_MINOR;
+    bal_hdr->msg_type = _type_minor;
+    bal_hdr->msg_id = ((bal_hdr->msg_id & 0x0000FFFF) |  ((_msg_id_oper & 0x0000FFFF) << 16));
+    bal_hdr->msg_id = ((bal_hdr->msg_id & 0xFFFF0000) |  (_msg_id_obj & 0x0000FFFF));
+    bal_hdr->ex_id = _ex_id;
+    bal_hdr->sender = _sender_subsys;
+    bal_hdr->timestamp = bcmos_timestamp();
+}
+
+/*
+ * Get the sender field in the BAL header given the message pointer
+ */
+static inline bal_subsystem bcmbal_sender_get(void *_msg_payload_ptr)
+{
+    return bcmbal_bal_hdr_get(_msg_payload_ptr)->sender;
+}
+
+/*
+ * Set the sender field in the BAL header given the message pointer
+ */
+static inline void bcmbal_sender_set(void *_msg_payload_ptr, bal_subsystem _sender_subsys)
+{
+    bcmbal_bal_hdr_get(_msg_payload_ptr)->sender = _sender_subsys;
+}
+
+/*
+ * Get the top level type field in the BAL header given the message pointer
+ */
+static inline bcmos_msg_id bcmbal_type_major_get(void *_msg_payload_ptr)
+{
+    return bcmbal_bcmos_hdr_get(_msg_payload_ptr)->type;
+}
+
+/*
+ * Set the top level type field in the BAL header given the message pointer
+ */
+static inline void bcmbal_type_major_set(void *_msg_payload_ptr, bcmos_msg_id _type_major)
+{
+    bcmbal_bcmos_hdr_get(_msg_payload_ptr)->type = _type_major;
+}
+
+/*
+ * Get the inner type field in the BAL header given the message pointer
+ */
+static inline bcmbal_msg_type bcmbal_type_minor_get(void *_msg_payload_ptr)
+{
+    return bcmbal_bal_hdr_get(_msg_payload_ptr)->msg_type;
+}
+
+/*
+ * Set the inner type field in the BAL header given the message pointer
+ */
+static inline void bcmbal_type_minor_set(void *_msg_payload_ptr, bcmbal_msg_type _type_minor)
+{
+    bcmbal_bal_hdr_get(_msg_payload_ptr)->msg_type = _type_minor;
+}
+
+
+/*
+ * Get the msg_id_oper field in the BAL header given the message pointer
+ */
+static inline uint16_t bcmbal_msg_id_oper_get(void *_msg_payload_ptr)
+{
+    return ((bcmbal_bal_hdr_get(_msg_payload_ptr)->msg_id & 0xFFFF0000) >> 16);
+}
+
+/*
+ * Set the msg_id_oper field in the BAL header given the message pointer
+ */
+static inline void bcmbal_msg_id_oper_set(void *_msg_payload_ptr, uint16_t _msg_id_oper)
+{
+    bcmbal_bal_hdr_get(_msg_payload_ptr)->msg_id =
+        ((bcmbal_bal_hdr_get(_msg_payload_ptr)->msg_id & 0x0000FFFF) |   ((_msg_id_oper & 0x0000FFFF) << 16));
+}
+
+/*
+ * Get the msg_id_obj field in the BAL header given the message pointer
+ */
+static inline bcmbal_obj_id bcmbal_msg_id_obj_get(void *_msg_payload_ptr)
+{
+    return (bcmbal_bal_hdr_get(_msg_payload_ptr)->msg_id & 0x0000FFFF );
+}
+
+/*
+ * Set the msg_id_obj field in the BAL header given the message pointer
+ */
+static inline void bcmbal_msg_id_obj_set(void *_msg_payload_ptr, bcmbal_obj_id _msg_id_obj)
+{
+    bcmbal_bal_hdr_get(_msg_payload_ptr)->msg_id =
+        ((bcmbal_bal_hdr_get(_msg_payload_ptr)->msg_id & 0xFFFF0000) | (_msg_id_obj & 0x0000FFFF));
+}
+
+/*
+ * Get the ex_id field in the BAL header given the message pointer
+ */
+static inline uint32_t bcmbal_ex_id_get(void *_msg_payload_ptr)
+{
+    return bcmbal_bal_hdr_get(_msg_payload_ptr)->ex_id;
+}
+
+/*
+ * Set the ex_id field in the BAL header given the message pointer
+ */
+static inline void bcmbal_ex_id_set(void *_msg_payload_ptr, uint32_t _ex_id)
+{
+    bcmbal_bal_hdr_get(_msg_payload_ptr)->ex_id = _ex_id;
+}
+
+/*
+ * Get the major version field in the BAL header given the message pointer
+ */
+static inline uint16_t bcmbal_major_version_get(void *_msg_payload_ptr)
+{
+    return bcmbal_bal_hdr_get(_msg_payload_ptr)->version_major;
+}
+
+/*
+ * Set the major version field in the BAL header given the message pointer
+ */
+static inline void  bcmbal_major_version_set(void *_msg_payload_ptr, uint16_t _version_major)
+{
+    bcmbal_bal_hdr_get(_msg_payload_ptr)->version_major = _version_major;
+}
+
+/*
+ * Get the minor version field in the BAL header given the message pointer
+ */
+static inline uint16_t bcmbal_minor_version_get(void *_msg_payload_ptr)
+{
+    return bcmbal_bal_hdr_get(_msg_payload_ptr)->version_minor;
+}
+
+/*
+ * Set the minor version field in the BAL header given the message pointer
+ */
+static inline void bcmbal_minor_version_set(void *_msg_payload_ptr, uint16_t _version_major)
+{
+    bcmbal_bal_hdr_get(_msg_payload_ptr)->version_major = _version_major;
+}
+
+/*
+ * Get the scratchpad field in the BAL header given the message pointer
+ */
+static inline void *bcmbal_scratchpad_get(void *_msg_payload_ptr)
+{
+    return bcmbal_bal_hdr_get(_msg_payload_ptr)->scratchpad;
+}
+
+/*
+ * Set the scratchpad field in the BAL header given the message pointer
+ */
+static inline void bcmbal_scratchpad_set(void *_msg_payload_ptr, void *_scratchpad)
+{
+    bcmbal_bal_hdr_get(_msg_payload_ptr)->scratchpad = _scratchpad;
+}
+
+/*
+ * Allocate a BAL message given the payload pointer
+ */
+static inline void *bcmbal_msg_calloc(uint32_t _msg_payload_size)
+{
+    /* Payload includes comm header */
+    bal_comm_msg_hdr *m = bcmos_calloc(_msg_payload_size);
+    if (NULL == m)
+        return NULL;
+    return bcmbal_payload_ptr_get(m);
+}
+
+/*
+ * Free a BAL message given the payload pointer
+ */
+static inline void bcmbal_msg_free(void *msg)
+{
+    return bcmos_msg_free(bcmbal_bcmos_hdr_get(msg));
+}
+
+/*
+ * External functions implemented in bal_msg.c
+ */
+
+/*
+ * Clone BAL message
+ * Returns payload_ptr of the clone
+ */
+void *bcmbal_msg_clone(void *bal_obj);
+
+/*
+ * Send a BAL message given the payload pointer
+ */
+bcmos_errno bcmbal_msg_send(bcmos_msg_queue *queue, void *msg_payload, bcmos_msg_send_flags flags);
+
+/*
+ * Call callback in the context of the target module and pass it the BAL message pointer
+ */
+bcmos_errno bcmbal_msg_call(void *msg_payload, bcmos_module_id module, F_bcmos_msg_handler cb, bcmos_msg_send_flags flags);
+
+/*
+ * Receive a BAL message given the payload pointer
+ *
+ * NOTE: The timeout argument is in units of uS (micro seconds).  Use the #defined timeout values above.
+ *
+ */
+bcmos_errno bcmbal_msg_recv(bcmos_msg_queue *queue, uint32_t timeout, void **msg_payload);
+
+/** Get packed bal_comm_msg_hdr length */
+int32_t bcmbal_bal_msg_hdr_get_packed_length(void);
+
+/** Pack a BAL message header to a byte stream */
+bcmos_errno bcmbal_bal_msg_hdr_pack(const bal_comm_msg_hdr *msg, bcmbal_buf *buf);
+
+/** Unpack a BAL message header from a byte stream */
+bcmos_errno bcmbal_bal_msg_hdr_unpack(bal_comm_msg_hdr *msg, bcmbal_buf *buf);
+
+/** Peek exchange_id in the received message without unpacking */
+bcmos_errno bcmbal_bal_msg_peek_ex_id(bcmos_msg *msg, uint32_t *ex_id);
+
+#endif /* #ifndef BALMSG_H */
+
+
+
diff --git a/bal_release/src/common/include/bal_msg_type.h b/bal_release/src/common/include/bal_msg_type.h
new file mode 100644
index 0000000..38e98c6
--- /dev/null
+++ b/bal_release/src/common/include/bal_msg_type.h
@@ -0,0 +1,57 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+#ifndef _BAL_MSG_TYPE_H_
+#define _BAL_MSG_TYPE_H_
+
+/*
+ *  * The BAL message subtype
+ *   */
+typedef enum
+{
+    BAL_MSG_TYPE_REQ,
+    BAL_MSG_TYPE_RSP,
+    BAL_MSG_TYPE_ACK,
+    BAL_MSG_TYPE_IND,      /**< An INDication message generated as a part of a protocol exchange  */
+    BAL_MSG_TYPE_AUTO_IND, /**< An asynchronous autonomous INDication message  */
+} bcmbal_msg_type;
+
+static __attribute__ ((unused)) char *bcmbal_msg_t_str[] = 
+{
+    "BAL_MSG_REQ",
+    "BAL_MSG_RSP",
+    "BAL_MSG_ACK",
+    "BAL_MSG_IND",         /**< An INDication message generated as a part of a protocol exchange  */
+    "BAL_MSG_AUTO_IND"     /**< An asynchronous autonomous INDication message  */
+};
+
+
+#endif
diff --git a/bal_release/src/common/include/bal_obj.h b/bal_release/src/common/include/bal_obj.h
new file mode 100644
index 0000000..24e8ec2
--- /dev/null
+++ b/bal_release/src/common/include/bal_obj.h
@@ -0,0 +1,205 @@
+#ifndef BAL_OBJ
+#define BAL_OBJ
+
+#include <bcmos_system.h>
+#include <bcmos_errno.h>
+#include "bal_model_ids.h"
+#include "bal_buf.h"
+#include "bal_msg_type.h"
+
+/*
+ * The current BAL header version
+ */
+#define BAL_HDR_VERSION_MAJOR    (1)
+#define BAL_HDR_VERSION_MINOR    (1)
+
+/*
+ * The BAL common message header
+ */
+typedef struct bal_comm_msg_hdr
+{
+    bcmos_msg        m;               /**< bcmos message header */
+    uint16_t         version_major;   /**< Header Major version number */
+    uint16_t         version_minor;   /**< Header Minor version number */
+    bcmbal_msg_type  msg_type;        /**< Request / Response / Ack / Indication */
+    uint32_t         msg_id;          /**< Message ID – the ID of the message (subID under the message type) */
+    uint32_t         ex_id;           /**< Exchange ID for message tracking between endpoints */
+    bal_subsystem    sender;          /**< Sender subsystem - used for additional validation */
+    uint32_t         timestamp;       /**< Timestamp when the message was sent */
+    bcmos_sem        sem;             /**< Semaphore used for inter-thread communication */
+    void*            scratchpad;      /**< Scratchpad used for inter-thread communication */
+    uint8_t          payload[];       /**< Payload follows the header */
+} bal_comm_msg_hdr;
+
+/** Version of Object definitions */
+#define BCMBAL_OBJ_VERSION     2                 /**< The current version number */
+typedef uint32_t bcmbal_object_ver;              /**< The attribute type in the object info structure */
+
+/** Bitmask of object attributes that are specified in an object (1 = specified, 0 = not specified) */
+typedef uint64_t bcmbal_presence_mask;
+
+/** Presence mask indicating all fields present */
+#define BCMBAL_PRESENCE_MASK_ALL ((bcmbal_presence_mask)0xFFFFFFFFFFFFFFFF)
+
+/** Helper type to determine what the data format of a message should look like */
+typedef enum bcmbal_mgt_group
+{
+    BCMBAL_MGT_GROUP_KEY,               /**< Key that uniquely identifies object instance */
+    BCMBAL_MGT_GROUP_CFG,               /**< Configuration (get/set/clear) */
+    BCMBAL_MGT_GROUP_STAT,              /**< Statistics */
+    BCMBAL_MGT_GROUP_AUTO,              /**< Autonomous indications */
+    BCMBAL_MGT_GROUP_AUTO_CFG,          /**< Autonomous indication configuration */
+    BCMBAL_MGT_GROUP__NUM_OF
+} bcmbal_mgt_group;
+
+/** Object message type. Can be a combination of flags. */
+typedef enum bcmbal_obj_msg_type
+{
+    BCMBAL_OBJ_MSG_TYPE_GET   = 0x01,   /**< Get configuration parameters */
+    BCMBAL_OBJ_MSG_TYPE_SET   = 0x02,   /**< Set configuration parameters */
+    BCMBAL_OBJ_MSG_TYPE_CLEAR = 0x04,   /**< Clear configuration parameters */
+} bcmbal_obj_msg_type;
+
+/** Object message direction - request or response. */
+typedef enum bcmbal_obj_msg_dir
+{
+    BCMBAL_OBJ_MSG_DIR_REQUEST,
+    BCMBAL_OBJ_MSG_DIR_RESPONSE
+} bcmbal_obj_msg_dir;
+
+#define BCMBAL_OBJ_INIT_VAL  0xdeadbeef /**< The value of the obj_init_val after macro initialization */
+
+/** Information common to all BAL objects */
+typedef struct bcmbal_obj
+{
+    bal_comm_msg_hdr     comm_hdr;      /**< Communication header */
+    bcmbal_object_ver    version;       /**< Version of the Object definition/structure */
+    bcmbal_obj_id        obj_type;      /**< An enumerated ID associated with the object being specified */
+    bcmbal_mgt_group     group;         /**< Management group */
+    uint16_t             subgroup;      /**< Subgroup for indications */
+    bcmbal_obj_msg_type  type;          /**< Type (e.g. get / set / clear)  */
+    bcmbal_obj_msg_dir   dir;           /**< Direction - request / response */
+    bcmos_errno		     status;        /**< BAL status code (BCM_ERR_OK–success, error code otherwise) */
+    bcmbal_presence_mask presence_mask; /**< Indicates which attribute parameters are present */
+
+    /* The following fields are internal. They are not sent on the line */
+    bcmos_bool           is_inprogress; /**< RO - When set to TRUE: Object is changing state internally */
+    void                *list_buf;      /**< Memory buffer in which to store variable-sized lists when unpacking */
+    uint32_t             list_buf_size; /**< Number of bytes in the variable-sized list buffer */
+    uint32_t             obj_init_val;  /**< An field that is set on INIT macro call, and checked by the API */
+} bcmbal_obj;
+
+/** Information structure for use with BAL configuration API (get/set/clear) */
+typedef struct bcmbal_cfg
+{
+    bcmbal_obj hdr;
+} bcmbal_cfg;
+
+/** Information structure for BAL statistics API */
+typedef struct bcmbal_stat
+{
+    bcmbal_obj hdr;
+} bcmbal_stat;
+
+/** Information structure for BAL indications */
+typedef struct bcmbal_auto
+{
+    bcmbal_obj hdr;
+} bcmbal_auto;
+
+/** Information structure for BAL indication configuration API */
+typedef struct bcmbal_auto_cfg
+{
+    bcmbal_obj hdr;
+} bcmbal_auto_cfg;
+
+/** Whether we pack the entire structure of a message */
+static inline bcmos_bool bcmbal_obj_msg_should_pack_data(const bcmbal_obj *msg)
+{
+    switch (msg->group)
+    {
+        case BCMBAL_MGT_GROUP_CFG:
+        case BCMBAL_MGT_GROUP_STAT:
+        case BCMBAL_MGT_GROUP_AUTO_CFG:
+            if ((msg->type & BCMBAL_OBJ_MSG_TYPE_GET))
+            {
+                return (msg->dir == BCMBAL_OBJ_MSG_DIR_RESPONSE);
+            }
+            else if ((msg->type & BCMBAL_OBJ_MSG_TYPE_SET))
+            {
+                return (msg->dir == BCMBAL_OBJ_MSG_DIR_REQUEST);
+            }
+            else
+            {
+                return BCMOS_FALSE;
+            }
+
+        default:
+            return BCMOS_TRUE;
+    }
+}
+
+/** Get the packed length of the header portion of an object message */
+static inline int32_t bcmbal_obj_msg_hdr_get_packed_length(void)
+{
+    return 24;
+}
+
+/** Pack a message header to a byte stream */
+static inline bcmos_errno bcmbal_obj_msg_hdr_pack(const bcmbal_obj *msg, bcmbal_buf *buf)
+{
+    bcmos_bool ret;
+
+    ret =        bcmbal_buf_write_u32(buf, (uint32_t)msg->version);
+    ret = ret && bcmbal_buf_write_u8(buf, (uint32_t)msg->obj_type);
+    ret = ret && bcmbal_buf_write_u8(buf, (uint8_t)msg->group);
+    ret = ret && bcmbal_buf_write_u16(buf, msg->subgroup);
+    ret = ret && bcmbal_buf_write_u8(buf, (uint8_t)msg->type);
+    ret = ret && bcmbal_buf_write_u8(buf, (uint8_t)msg->dir);
+    ret = ret && bcmbal_buf_write_s16(buf, (int16_t)msg->status);
+    ret = ret && bcmbal_buf_write_u32(buf, (int32_t)msg->is_inprogress);    
+    ret = ret && bcmbal_buf_write_u64(buf, (uint64_t)msg->presence_mask);
+
+    return ret ? BCM_ERR_OK : BCM_ERR_OVERFLOW;
+}
+
+/** Unpack a message header from a byte stream */
+static inline bcmos_errno bcmbal_obj_msg_hdr_unpack(bcmbal_obj *msg, bcmbal_buf *buf)
+{
+    uint32_t   version;
+    uint8_t    obj_type;
+    uint8_t    group;
+    uint16_t   subgroup;
+    uint8_t    type;
+    uint8_t    dir;
+    int16_t    status;
+    uint32_t   is_inprogress;
+    uint64_t   presence_mask;
+    bcmos_bool ret;
+
+    ret =        bcmbal_buf_read_u32(buf, &version);
+    ret = ret && bcmbal_buf_read_u8(buf, &obj_type);
+    ret = ret && bcmbal_buf_read_u8(buf, &group);
+    ret = ret && bcmbal_buf_read_u16(buf, &subgroup);
+    ret = ret && bcmbal_buf_read_u8(buf, &type);
+    ret = ret && bcmbal_buf_read_u8(buf, &dir);
+    ret = ret && bcmbal_buf_read_s16(buf, &status);
+    ret = ret && bcmbal_buf_read_u32(buf, &is_inprogress);    
+    ret = ret && bcmbal_buf_read_u64(buf, &presence_mask);
+    if (ret)
+    {
+        msg->version = (bcmbal_object_ver)version;
+        msg->obj_type = (bcmbal_obj_id)obj_type;
+        msg->group = (bcmbal_mgt_group)group;
+        msg->subgroup = subgroup;
+        msg->type = (bcmbal_obj_msg_type)type;
+        msg->dir = (bcmbal_obj_msg_dir)dir;
+        msg->status = (bcmos_errno)status;
+        msg->is_inprogress = (bcmos_bool)is_inprogress;
+        msg->presence_mask = (bcmbal_presence_mask)presence_mask;
+    }
+
+    return ret ? BCM_ERR_OK : BCM_ERR_OVERFLOW;
+}
+
+#endif /* BAL_OBJ */
diff --git a/bal_release/src/common/include/bal_objs.h b/bal_release/src/common/include/bal_objs.h
new file mode 100644
index 0000000..6a13cce
--- /dev/null
+++ b/bal_release/src/common/include/bal_objs.h
@@ -0,0 +1,985 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *
+ *  :>
+ *
+ *****************************************************************************/
+
+/**
+ * @file bal_objs.h
+ * @brief The file provides an enumeration of all BAL objects
+ *
+ */
+#ifndef BALOBJS_H
+#define BALOBJS_H
+
+#include <bcmolt_host_api.h>
+#include "bal_common.h"
+#include "bal_model_ids.h"
+#include "bal_model_types.h"
+
+/** \ingroup api
+ * @{
+ */
+
+static char *bal_obj_str[] =
+{
+    [bcmbal_obj_id_access_terminal] =     "access_terminal object",
+    [bcmbal_obj_id_interface] =           "interface object",
+    [bcmbal_obj_id_subscriber_terminal] = "subscriber_terminal object",
+    [bcmbal_obj_id_flow] =                "flow object",
+    [bcmbal_obj_id_packet] =              "packet object",
+    [bcmbal_obj_id_group] =               "group object",
+    [bcmbal_obj_id_tm_sched] =            "scheduler object",
+    [bcmbal_obj_id_tm_queue] =            "queue object",
+};
+
+/* Ensure that the name array size matches the associated enum */
+BAL_STATIC_ASSERT (BCMBAL_OBJ_ID__NUM_OF == (sizeof (bal_obj_str) / sizeof (char *)), bcmbal_obj_id);
+
+static inline char *bcmbal_objtype_str(bcmbal_obj_id obj)
+{
+    return (BCMBAL_OBJ_ID__NUM_OF >= obj) ? bal_obj_str[obj] : "unknown";
+}
+
+#define BCMBAL_FLOW_PRIORITY_MAX      65535
+#define BCMBAL_FLOW_PRIORITY_MIN      0
+#define BAL_FLOW_DEFAULT_PRIORITY     10
+
+/*
+ * ------------------------------------------------------------------
+ *
+ * Internal BCMBAL macros used to manipulate the BAL object elements
+ *
+ * ------------------------------------------------------------------
+ */
+
+/* Initialize request. Internal macro
+ * \ingroup api
+ * \param[in]   _h      Message header
+ * \param[in]   _obj    Object name (i.e. flow)
+ * \param[in]   _grp    message type
+ * \param[in]   _subgrp message subgroup
+ */
+#define _BCMBAL_REQ_INIT(_h, _obj, _grp, _subgrp) \
+    (_h)->obj_init_val = BCMBAL_OBJ_INIT_VAL; \
+    (_h)->version = BCMBAL_OBJ_VERSION; \
+    (_h)->status = BCM_ERR_OK; \
+    (_h)->presence_mask = 0; \
+    (_h)->obj_type = bcmbal_obj_id_ ## _obj; \
+    (_h)->group = _grp; \
+    (_h)->subgroup = _subgrp;
+
+/** Initialize set structure
+ * \ingroup api
+ * \param[in]   _s      Set structure
+ * \param[in]   _obj    Object name (i.e. flow)
+ * \param[in]   _key    Object key
+ */
+#define BCMBAL_CFG_INIT(_s, _obj, _key) \
+    do { \
+        bcmbal_ ## _obj ## _cfg *_x_ = _s; \
+        memset(_x_, 0, sizeof(*_x_)); \
+        _BCMBAL_REQ_INIT(&((_x_)->hdr.hdr), _obj, BCMBAL_MGT_GROUP_CFG, 0); \
+        (_x_)->key = _key; \
+    } while (0)
+
+/** Initialize statistics structure
+ * \ingroup api
+ * \param[in]   _s      Statistics structure
+ * \param[in]   _obj    Object name (i.e. flow)
+ * \param[in]   _key    Object key
+ */
+#define BCMBAL_STAT_INIT(_s, _obj, _key) \
+    do { \
+        bcmbal_ ## _obj ## _stat *_x_ = _s; \
+        memset(_x_, 0, sizeof(*_x_)); \
+        _BCMBAL_REQ_INIT(&((_x_)->hdr.hdr), _obj, BCMBAL_MGT_GROUP_STAT, 0); \
+        (_x_)->key = _key; \
+    } while (0)
+
+/** Set the memory buffer to use for variable-sized lists within a cfg get
+ * \ingroup api
+ * \param[in]   _s      Configuration structure
+ * \param[in]   _obj    Object type
+ * \param[in]   _buf    Pointer to a location in memory in which to store the lists
+ * \param[in]   _len    Length of the buffer pointed to by _buf
+ */
+#define BCMBAL_CFG_LIST_BUF_SET(_s, _obj, _buf, _len) \
+    do { \
+        bcmbal_ ## _obj ## _cfg *_x_ = _s; \
+        _x_->hdr.hdr.list_buf = _buf; \
+        _x_->hdr.hdr.list_buf_size = _len; \
+    } while (0)
+
+/* Set the object progress state
+ * \ingroup api
+ * \param[in]   _s      Object structure
+ * \param[in]   _p      New object in-progress state: BCMOS_TRUE, or BCMOS_FALSE
+ */
+#define BCMBAL_OBJ_IN_PROGRESS_SET(_s, _p) ((_s)->hdr.hdr.is_inprogress = _p )
+
+/* Return the object progress state
+ * \ingroup api
+ * \param[in]   _s      Object structure
+ */
+#define BCMBAL_OBJ_IN_PROGRESS_GET(_s) ((_s)->hdr.hdr.is_inprogress)
+
+/* Internal macro: Get a bitmask given a property ID enum */
+#define BCMBAL_PROP_MASK_GET(_obj, _grp, _p) \
+    (bcmbal_ ## _obj ## _grp ## _id_ ## _p == bcmbal_  ## _obj ## _grp ## _id_all_properties ? \
+        ((1ULL << (uint64_t)bcmbal_  ## _obj ## _grp ## _id_ ## _p) - 1) : \
+        (1ULL << (uint64_t)bcmbal_  ## _obj ## _grp ## _id_ ## _p))
+
+
+/* Macro: Indicate that configuration property is present - USE WITH CAUTION */
+#define BCMBAL_PROP_SET_PRESENT(_m, _obj, _grp, _p) \
+    do { \
+        (_m)->hdr.hdr.presence_mask |= BCMBAL_PROP_MASK_GET(_obj, _grp, _p); \
+    } while (0)
+
+/* Internal macro: Indicate that configuration property is not present */
+#define BCMBAL_PROP_CLEAR_PRESENT(_m, _obj, _grp, _p)                   \
+    do {                                                                \
+        (_m)->hdr.hdr.presence_mask &= ~(BCMBAL_PROP_MASK_GET(_obj, _grp, _p));\
+    } while (0)
+
+/* Internal macro: check if property is present */
+#define _BCMBAL_PROP_IS_PRESENT(_m, _obj, _grp, _p) \
+    (((_m)->hdr.hdr.presence_mask & BCMBAL_PROP_MASK_GET(_obj, _grp, _p)) ? \
+        BCMOS_TRUE : BCMOS_FALSE)
+
+/** Set configuration property in message structure
+ * \ingroup api
+ * \param[in]   _m      Configuration structure
+ * \param[in]   _obj    Object type
+ * \param[in]   _p      Property name
+ * \param[in]   _v      Property value
+ */
+#define BCMBAL_CFG_PROP_SET(_m, _obj, _p, _v) \
+   do { \
+       BCMBAL_PROP_SET_PRESENT(_m, _obj, _cfg, _p);\
+       (_m)->data._p = (_v);\
+   } while (0)
+
+/** Indicate that configuration property should be read
+ * \ingroup api
+ * \param[in]   _m      Configuration structure
+ * \param[in]   _obj    Object type
+ * \param[in]   _p      Property name
+ */
+#define BCMBAL_CFG_PROP_GET(_m, _obj, _p) BCMBAL_PROP_SET_PRESENT(_m, _obj, _cfg, _p)
+
+/** clear object property in message structure
+ * \ingroup api
+ * \param[in]   _m      Object structure pointer
+ * \param[in]   _obj    Object name (i.e. flow)
+ * \param[in]   _p      Attribute name (i.e. admin_state)
+ */
+#define BCMBAL_CFG_PROP_CLEAR(_m, _obj, _p)         \
+    do { \
+        BCMBAL_PROP_CLEAR_PRESENT(_m, _obj, _cfg, _p);        \
+        memset(&((_m)->data._p), 0, sizeof((_m)->data._p));    \
+    } while (0)
+
+/** Check if configuration property is set in message structure
+ * \ingroup api
+ * \param[in]   _m      Configuration structure
+ * \param[in]   _obj    Object type
+ * \param[in]   _p      Property name
+ */
+#define BCMBAL_CFG_PROP_IS_SET(_m, _obj, _p) _BCMBAL_PROP_IS_PRESENT(_m, _obj, _cfg, _p)
+
+/** Indicate that statistic property should be read
+ * \ingroup api
+ * \param[in]   _m      Configuration structure
+ * \param[in]   _obj    Object type
+ * \param[in]   _p      Property name
+ */
+#define BCMBAL_STAT_PROP_GET(_m, _obj, _p) BCMBAL_PROP_SET_PRESENT(_m, _obj, _stat, _p)
+
+/** Check if statistic property is set in message structure
+ * \ingroup api
+ * \param[in]   _m      Statistic structure
+ * \param[in]   _obj    Object type
+ * \param[in]   _p      Property name
+ */
+#define BCMBAL_STAT_PROP_IS_SET(_m, _obj, _p) _BCMBAL_PROP_IS_PRESENT(_m, _obj, _stat, _p)
+
+
+/***********************************************************************************
+ **
+ ** Macros for setting attribute values where an attribute supports a presence_mask
+ **
+ ***********************************************************************************
+ **/
+
+/* Internal macro: Get a bitmask given a attribute element property ID enum */
+#define BCMBAL_ATTRIBUTE_PROP_MASK_GET(_attr, _p) bcmbal_ ## _attr ## _id_ ## _p
+
+/* Internal macro: Indicate that configuration property is present */
+#define _BCMBAL_ATTRIBUTE_PROP_SET_PRESENT(p_attr, _attr,_p)            \
+    do {                                                                \
+        (p_attr)->presence_mask |= BCMBAL_ATTRIBUTE_PROP_MASK_GET(_attr, _p); \
+    } while (0)
+
+/* Internal macro: Indicate that configuration property is not present */
+#define _BCMBAL_ATTRIBUTE_PROP_CLEAR_PRESENT(p_attr, _attr,_p)            \
+    do {                                                                \
+        (p_attr)->presence_mask &= ~(BCMBAL_ATTRIBUTE_PROP_MASK_GET(_attr, _p)); \
+    } while (0)
+
+/** Set attribute element property in message structure
+ * \param[in]   _p_attr Attribute structure pointer
+ * \param[in]   _attr   Attribute name
+ * \param[in]   _p      Element name (i.e. o_tpid)
+ * \param[in]   _v      Element value
+ */
+#define BCMBAL_ATTRIBUTE_PROP_SET(_p_attr, _attr, _p, _v)    \
+    do { \
+        _BCMBAL_ATTRIBUTE_PROP_SET_PRESENT(_p_attr, _attr, _p);   \
+        (_p_attr)->_p = (_v);                                    \
+    } while (0)
+
+/** Clear attribute element property in message structure
+ * \param[in]   _p_attr Attribute structure pointer
+ * \param[in]   _attr   Attribute name
+ * \param[in]   _p      Element name (i.e. o_tpid)
+ */
+#define BCMBAL_ATTRIBUTE_PROP_CLEAR(_p_attr, _attr, _p)    \
+    do { \
+        _BCMBAL_ATTRIBUTE_PROP_CLEAR_PRESENT(_p_attr, _attr, _p);   \
+        memset(&((_p_attr)->_p), 0, sizeof((_p_attr)->_p));   \
+    } while (0)
+
+
+/* Internal macro: check if an attribute element is present */
+#define _BCMBAL_ATTRIBUTE_PROP_IS_PRESENT(_p_attr, _attr, _p)              \
+    (((_p_attr)->presence_mask & BCMBAL_ATTRIBUTE_PROP_MASK_GET(_attr, _p)) ? \
+         BCMOS_TRUE : BCMOS_FALSE)
+
+/** Check if attribute element property is set in message structure
+ * \param[in]   _p_attr Attribute structure pointer
+ * \param[in]   _attr   Attribute name
+ * \param[in]   _p      Element name (i.e. o_tpid)
+ */
+#define BCMBAL_ATTRIBUTE_PROP_IS_SET(_p_attr, _attr, _p)    _BCMBAL_ATTRIBUTE_PROP_IS_PRESENT(_p_attr, _attr, _p)
+
+
+/*
+ * ------------------------------------------------------------------
+ *
+ * Internal BCMBAL macros used to manipulate cmds_bitmask of action parameters
+ *
+ * ------------------------------------------------------------------
+ */
+
+/** Check if action cmd id is set in action structure
+ * \param[in]   _m      Object structure pointer
+ * \param[in]   _b      cmd Id bitmask
+ */
+#define BCMBAL_ACTION_CMD_ID_IS_SET(_m, _b) \
+    (((_m)->cmds_bitmask & (_b)) ? \
+        BCMOS_TRUE : BCMOS_FALSE)
+
+/** Set action cmd id in action structure
+ * \param[in]   _m      Object structure pointer
+ * \param[in]   _b      cmd Id bitmask
+ */
+#define BCMBAL_ACTION_CMD_ID_SET(_m, _b) \
+    do {                                                                \
+        (_m)->cmds_bitmask |= (_b);\
+    } while (0)
+
+
+/** Clear action cmd id in action structure
+ * \param[in]   _m      Object structure pointer
+ * \param[in]   _b      cmd Id bitmask
+ */
+#define BCMBAL_ACTION_CMD_ID_CLEAR(_m, _b) \
+    do {                                                                \
+        (_m)->cmds_bitmask &= ~(_b);\
+    } while (0)
+
+
+
+static inline void bcmbal_flow_object_overlay_w_src_priority(bcmbal_flow_cfg *dstobj, bcmbal_flow_cfg *srcobj)
+{
+    BUG_ON(NULL == dstobj);
+    BUG_ON(NULL == srcobj);
+
+    bcmbal_presence_mask dest_presence_mask;
+
+    /* First, copy the common object and keys in their entirety, except for preserving the presence_mask */
+    dest_presence_mask = dstobj->hdr.hdr.presence_mask;
+    dstobj->hdr = srcobj->hdr;
+    dstobj->key = srcobj->key;
+    dstobj->hdr.hdr.presence_mask = dest_presence_mask;
+
+    /* Now copy only the fields that have been specified in the source object */
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, flow, admin_state))
+    {
+        BCMBAL_CFG_PROP_SET(dstobj, flow, admin_state, srcobj->data.admin_state);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, flow, access_int_id))
+    {
+        BCMBAL_CFG_PROP_SET(dstobj, flow, access_int_id, srcobj->data.access_int_id);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, flow, network_int_id))
+    {
+        BCMBAL_CFG_PROP_SET(dstobj, flow, network_int_id, srcobj->data.network_int_id);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, flow, sub_term_id))
+    {
+        BCMBAL_CFG_PROP_SET(dstobj, flow, sub_term_id, srcobj->data.sub_term_id);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, flow, svc_port_id))
+    {
+        BCMBAL_CFG_PROP_SET(dstobj, flow, svc_port_id, srcobj->data.svc_port_id);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, flow, agg_port_id))
+    {
+        BCMBAL_CFG_PROP_SET(dstobj, flow, agg_port_id, srcobj->data.agg_port_id);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, flow, resolve_mac))
+    {
+        BCMBAL_CFG_PROP_SET(dstobj, flow, resolve_mac, srcobj->data.resolve_mac);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, flow, queue))
+    {
+        BCMBAL_CFG_PROP_SET(dstobj, flow, queue, srcobj->data.queue);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, flow, action))
+    {
+        BCMBAL_CFG_PROP_SET(dstobj, flow, action, srcobj->data.action);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, flow, classifier))
+    {
+        BCMBAL_CFG_PROP_SET(dstobj, flow, classifier, srcobj->data.classifier);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, flow, sla))
+    {
+        BCMBAL_CFG_PROP_SET(dstobj, flow, sla, srcobj->data.sla);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, flow, group_id))
+    {
+        BCMBAL_CFG_PROP_SET(dstobj, flow, group_id, srcobj->data.group_id);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, flow, cookie))
+    {
+        BCMBAL_CFG_PROP_SET(dstobj, flow, cookie, srcobj->data.cookie);
+    }
+}
+
+static inline void bcmbal_flow_object_overlay_w_dst_priority(bcmbal_flow_cfg *dstobj, bcmbal_flow_cfg *srcobj)
+{
+    BUG_ON(NULL == dstobj);
+    BUG_ON(NULL == srcobj);
+
+    bcmbal_presence_mask dest_presence_mask;
+
+    /* First, copy the common object and keys in their entirety,
+     * except for preserving the presence_mask */
+    dest_presence_mask = dstobj->hdr.hdr.presence_mask;
+    dstobj->hdr = srcobj->hdr;
+    dstobj->key = srcobj->key;
+    dstobj->hdr.hdr.presence_mask = dest_presence_mask;
+
+    /* Now copy only the fields that have been specified in the source and are not already set in the dst object */
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, flow, admin_state))
+    {
+        if(!BCMBAL_CFG_PROP_IS_SET(dstobj, flow, admin_state))
+            BCMBAL_CFG_PROP_SET(dstobj, flow, admin_state, srcobj->data.admin_state);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, flow, access_int_id))
+    {
+        if(!BCMBAL_CFG_PROP_IS_SET(dstobj, flow, access_int_id))
+            BCMBAL_CFG_PROP_SET(dstobj, flow, access_int_id, srcobj->data.access_int_id);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, flow, network_int_id))
+    {
+        if(!BCMBAL_CFG_PROP_IS_SET(dstobj, flow, network_int_id))
+            BCMBAL_CFG_PROP_SET(dstobj, flow, network_int_id, srcobj->data.network_int_id);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, flow, sub_term_id))
+    {
+        if(!BCMBAL_CFG_PROP_IS_SET(dstobj, flow, sub_term_id))
+            BCMBAL_CFG_PROP_SET(dstobj, flow, sub_term_id, srcobj->data.sub_term_id);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, flow, svc_port_id))
+    {
+        if(!BCMBAL_CFG_PROP_IS_SET(dstobj, flow, svc_port_id))
+            BCMBAL_CFG_PROP_SET(dstobj, flow, svc_port_id, srcobj->data.svc_port_id);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, flow, agg_port_id))
+    {
+        if(!BCMBAL_CFG_PROP_IS_SET(dstobj, flow, agg_port_id))
+            BCMBAL_CFG_PROP_SET(dstobj, flow, agg_port_id, srcobj->data.agg_port_id);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, flow, resolve_mac))
+    {
+        if(!BCMBAL_CFG_PROP_IS_SET(dstobj, flow, resolve_mac))
+            BCMBAL_CFG_PROP_SET(dstobj, flow, resolve_mac, srcobj->data.resolve_mac);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, flow, queue))
+    {
+        if(!BCMBAL_CFG_PROP_IS_SET(dstobj, flow, queue))
+            BCMBAL_CFG_PROP_SET(dstobj, flow, queue, srcobj->data.queue);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, flow, action))
+    {
+        if(!BCMBAL_CFG_PROP_IS_SET(dstobj, flow, action))
+            BCMBAL_CFG_PROP_SET(dstobj, flow, action, srcobj->data.action);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, flow, classifier))
+    {
+        if(!BCMBAL_CFG_PROP_IS_SET(dstobj, flow, classifier))
+            BCMBAL_CFG_PROP_SET(dstobj, flow, classifier, srcobj->data.classifier);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, flow, sla))
+    {
+        if(!BCMBAL_CFG_PROP_IS_SET(dstobj, flow, sla))
+            BCMBAL_CFG_PROP_SET(dstobj, flow, sla, srcobj->data.sla);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, flow, group_id))
+    {
+        if(!BCMBAL_CFG_PROP_IS_SET(dstobj, flow, group_id))
+            BCMBAL_CFG_PROP_SET(dstobj, flow, group_id, srcobj->data.group_id);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, flow, cookie))
+    {
+        if(!BCMBAL_CFG_PROP_IS_SET(dstobj, flow, cookie))
+            BCMBAL_CFG_PROP_SET(dstobj, flow, cookie, srcobj->data.cookie);
+    }
+}
+
+static inline void bcmbal_sub_term_object_overlay_w_src_priority(bcmbal_subscriber_terminal_cfg *dstobj,
+                                                                 bcmbal_subscriber_terminal_cfg *srcobj)
+{
+    BUG_ON(NULL == dstobj);
+    BUG_ON(NULL == srcobj);
+
+    bcmbal_presence_mask dest_presence_mask;
+
+    /* First, copy the common object and keys in their entirety, except for preserving the presence_mask */
+    dest_presence_mask = dstobj->hdr.hdr.presence_mask;
+    dstobj->hdr = srcobj->hdr;
+    dstobj->key = srcobj->key;
+    dstobj->hdr.hdr.presence_mask = dest_presence_mask;
+
+    /* Now copy only the fields that have been specified in the source object */
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, subscriber_terminal, admin_state))
+    {
+        BCMBAL_CFG_PROP_SET(dstobj, subscriber_terminal, admin_state, srcobj->data.admin_state);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, subscriber_terminal, serial_number))
+    {
+        BCMBAL_CFG_PROP_SET(dstobj, subscriber_terminal, serial_number, srcobj->data.serial_number);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, subscriber_terminal, password))
+    {
+        BCMBAL_CFG_PROP_SET(dstobj, subscriber_terminal, password, srcobj->data.password);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, subscriber_terminal, registration_id))
+    {
+        BCMBAL_CFG_PROP_SET(dstobj, subscriber_terminal, registration_id, srcobj->data.registration_id);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, subscriber_terminal, svc_port_id))
+    {
+        BCMBAL_CFG_PROP_SET(dstobj, subscriber_terminal, svc_port_id, srcobj->data.svc_port_id);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, subscriber_terminal, ds_tm))
+    {
+        BCMBAL_CFG_PROP_SET(dstobj, subscriber_terminal, ds_tm, srcobj->data.ds_tm);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, subscriber_terminal, us_tm))
+    {
+        BCMBAL_CFG_PROP_SET(dstobj, subscriber_terminal, us_tm, srcobj->data.us_tm);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, subscriber_terminal, mac_address))
+    {
+        BCMBAL_CFG_PROP_SET(dstobj, subscriber_terminal, mac_address, srcobj->data.mac_address);
+    }
+}
+
+static inline void bcmbal_sub_term_object_overlay_w_dst_priority(bcmbal_subscriber_terminal_cfg *dstobj,
+                                                                 bcmbal_subscriber_terminal_cfg *srcobj)
+{
+    BUG_ON(NULL == dstobj);
+    BUG_ON(NULL == srcobj);
+
+    bcmbal_presence_mask dest_presence_mask;
+
+    /* First, copy the common object and keys in their entirety, except for preserving the presence_mask */
+    dest_presence_mask = dstobj->hdr.hdr.presence_mask;
+    dstobj->hdr = srcobj->hdr;
+    dstobj->key = srcobj->key;
+    dstobj->hdr.hdr.presence_mask = dest_presence_mask;
+
+    /* Now copy only the fields that have been specified in the source object */
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, subscriber_terminal, admin_state))
+    {
+        if(!BCMBAL_CFG_PROP_IS_SET(dstobj, subscriber_terminal, admin_state))
+            BCMBAL_CFG_PROP_SET(dstobj, subscriber_terminal, admin_state, srcobj->data.admin_state);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, subscriber_terminal, serial_number))
+    {
+        if(!BCMBAL_CFG_PROP_IS_SET(dstobj, subscriber_terminal, serial_number))
+            BCMBAL_CFG_PROP_SET(dstobj, subscriber_terminal, serial_number, srcobj->data.serial_number);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, subscriber_terminal, password))
+    {
+        if(!BCMBAL_CFG_PROP_IS_SET(dstobj, subscriber_terminal, password))
+            BCMBAL_CFG_PROP_SET(dstobj, subscriber_terminal, password, srcobj->data.password);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, subscriber_terminal, registration_id))
+    {
+        if(!BCMBAL_CFG_PROP_IS_SET(dstobj, subscriber_terminal, registration_id))
+            BCMBAL_CFG_PROP_SET(dstobj, subscriber_terminal, registration_id, srcobj->data.registration_id);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, subscriber_terminal, svc_port_id))
+    {
+        if(!BCMBAL_CFG_PROP_IS_SET(dstobj, subscriber_terminal, svc_port_id))
+            BCMBAL_CFG_PROP_SET(dstobj, subscriber_terminal, svc_port_id, srcobj->data.svc_port_id);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, subscriber_terminal, ds_tm))
+    {
+        if(!BCMBAL_CFG_PROP_IS_SET(dstobj, subscriber_terminal, ds_tm))
+            BCMBAL_CFG_PROP_SET(dstobj, subscriber_terminal, ds_tm, srcobj->data.ds_tm);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, subscriber_terminal, us_tm))
+    {
+        if(!BCMBAL_CFG_PROP_IS_SET(dstobj, subscriber_terminal, us_tm))
+            BCMBAL_CFG_PROP_SET(dstobj, subscriber_terminal, us_tm, srcobj->data.us_tm);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, subscriber_terminal, mac_address))
+    {
+        if(!BCMBAL_CFG_PROP_IS_SET(dstobj, subscriber_terminal, mac_address))
+            BCMBAL_CFG_PROP_SET(dstobj, subscriber_terminal, mac_address, srcobj->data.mac_address);
+    }
+}
+
+static inline void bcmbal_tm_sched_object_overlay_w_src_priority(bcmbal_tm_sched_cfg *dstobj, bcmbal_tm_sched_cfg *srcobj)
+{
+    BUG_ON(NULL == dstobj);
+    BUG_ON(NULL == srcobj);
+
+    bcmbal_presence_mask dest_presence_mask;
+
+    /* First, copy the common object and keys in their entirety, except for preserving the presence_mask */
+    dest_presence_mask = dstobj->hdr.hdr.presence_mask;
+    dstobj->hdr = srcobj->hdr;
+    dstobj->key = srcobj->key;
+    dstobj->hdr.hdr.presence_mask = dest_presence_mask;
+
+    /* Now copy only the fields that have been specified in the source object */
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, tm_sched, owner))
+    {
+        BCMBAL_CFG_PROP_SET(dstobj, tm_sched, owner, srcobj->data.owner);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, tm_sched, sched_type))
+    {
+        BCMBAL_CFG_PROP_SET(dstobj, tm_sched, sched_type, srcobj->data.sched_type);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, tm_sched, sched_parent))
+    {
+        BCMBAL_CFG_PROP_SET(dstobj, tm_sched, sched_parent, srcobj->data.sched_parent);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, tm_sched, sched_child_type))
+    {
+        BCMBAL_CFG_PROP_SET(dstobj, tm_sched, sched_child_type, srcobj->data.sched_child_type);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, tm_sched, rate))
+    {
+        BCMBAL_CFG_PROP_SET(dstobj, tm_sched, rate, srcobj->data.rate);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, tm_sched, tcont_sla))
+    {
+        BCMBAL_CFG_PROP_SET(dstobj, tm_sched, tcont_sla, srcobj->data.tcont_sla);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, tm_sched, creation_mode))
+    {
+        BCMBAL_CFG_PROP_SET(dstobj, tm_sched, creation_mode, srcobj->data.creation_mode);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, tm_sched, num_priorities))
+    {
+        BCMBAL_CFG_PROP_SET(dstobj, tm_sched, num_priorities, srcobj->data.num_priorities);
+    }
+
+}
+
+
+
+static inline void bcmbal_tm_sched_object_overlay_w_dst_priority(bcmbal_tm_sched_cfg *dstobj, bcmbal_tm_sched_cfg *srcobj)
+{
+    BUG_ON(NULL == dstobj);
+    BUG_ON(NULL == srcobj);
+
+    bcmbal_presence_mask dest_presence_mask;
+
+    /* First, copy the common object and keys in their entirety,
+     * except for preserving the presence_mask */
+    dest_presence_mask = dstobj->hdr.hdr.presence_mask;
+    dstobj->hdr = srcobj->hdr;
+    dstobj->key = srcobj->key;
+    dstobj->hdr.hdr.presence_mask = dest_presence_mask;
+
+    /* Now copy only the fields that have been specified in the source and are not already set in the dst object */
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, tm_sched, owner))
+    {
+        if(!BCMBAL_CFG_PROP_IS_SET(dstobj, tm_sched, owner))
+            BCMBAL_CFG_PROP_SET(dstobj, tm_sched, owner, srcobj->data.owner);
+    }
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, tm_sched, sched_type))
+    {
+        if(!BCMBAL_CFG_PROP_IS_SET(dstobj, tm_sched, sched_type))
+            BCMBAL_CFG_PROP_SET(dstobj, tm_sched, sched_type, srcobj->data.sched_type);
+    }
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, tm_sched, sched_parent))
+    {
+        if(!BCMBAL_CFG_PROP_IS_SET(dstobj, tm_sched, sched_parent))
+            BCMBAL_CFG_PROP_SET(dstobj, tm_sched, sched_parent, srcobj->data.sched_parent);
+    }
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, tm_sched, sched_child_type))
+    {
+        if(!BCMBAL_CFG_PROP_IS_SET(dstobj, tm_sched, sched_child_type))
+            BCMBAL_CFG_PROP_SET(dstobj, tm_sched, sched_child_type, srcobj->data.sched_child_type);
+    }
+    
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, tm_sched, rate))
+    {
+        if(!BCMBAL_CFG_PROP_IS_SET(dstobj, tm_sched, rate))
+            BCMBAL_CFG_PROP_SET(dstobj, tm_sched, rate, srcobj->data.rate);
+    }
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, tm_sched, tcont_sla))
+    {
+        if(!BCMBAL_CFG_PROP_IS_SET(dstobj, tm_sched, tcont_sla))
+            BCMBAL_CFG_PROP_SET(dstobj, tm_sched, tcont_sla, srcobj->data.tcont_sla);
+    }
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, tm_sched, creation_mode))
+    {
+        if(!BCMBAL_CFG_PROP_IS_SET(dstobj, tm_sched, creation_mode))
+            BCMBAL_CFG_PROP_SET(dstobj, tm_sched, creation_mode, srcobj->data.creation_mode);
+    }					
+
+}
+
+
+static inline void bcmbal_tm_queue_object_overlay(bcmbal_tm_queue_cfg *dstobj, bcmbal_tm_queue_cfg *srcobj)
+{
+    BUG_ON(NULL == dstobj);
+    BUG_ON(NULL == srcobj);
+
+    bcmbal_presence_mask dest_presence_mask;
+
+    /* First, copy the common object and keys in their entirety, except for preserving the presence_mask */
+    dest_presence_mask = dstobj->hdr.hdr.presence_mask;
+    dstobj->hdr = srcobj->hdr;
+    dstobj->key = srcobj->key;
+    dstobj->hdr.hdr.presence_mask = dest_presence_mask;
+
+    /* Now copy only the fields that have been specified in the source object */
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, tm_queue, priority))
+    {
+        BCMBAL_CFG_PROP_SET(dstobj, tm_queue, priority, srcobj->data.priority);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, tm_queue, weight))
+    {
+        BCMBAL_CFG_PROP_SET(dstobj, tm_queue, weight, srcobj->data.weight);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, tm_queue, rate))
+    {
+        BCMBAL_CFG_PROP_SET(dstobj, tm_queue, rate, srcobj->data.rate);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, tm_queue, bac))
+    {
+        BCMBAL_CFG_PROP_SET(dstobj, tm_queue, bac, srcobj->data.bac);
+    }
+}
+
+static inline bcmos_errno bal_obj_key_str_get(bcmbal_obj *obj, char *p_obj_key_str)
+{
+    BUG_ON(NULL == p_obj_key_str);
+
+    bcmos_errno ret = BCM_ERR_OK;
+
+    switch (obj->obj_type)
+    {
+
+        case (BCMBAL_OBJ_ID_ACCESS_TERMINAL):
+        {
+            sprintf(p_obj_key_str, "unit:%d", 
+                    ((bcmbal_access_terminal_cfg *)obj)->key.access_term_id);
+            break;
+        }
+        
+        case (BCMBAL_OBJ_ID_INTERFACE):
+        {
+            sprintf(p_obj_key_str, "intf_id:%d, type:%s",
+                    ((bcmbal_interface_cfg *)obj)->key.intf_id,
+                    ((bcmbal_interface_cfg *)obj)->key.intf_type == BCMBAL_INTF_TYPE_NNI ? "NNI" :
+                    ((bcmbal_interface_cfg *)obj)->key.intf_type == BCMBAL_INTF_TYPE_PON ? "PON" :
+                    "???"
+                    );
+            break;
+        }
+
+        case (BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL):
+        {
+            sprintf(p_obj_key_str, "sub_term_id:%d, intf_id:%d",
+                    ((bcmbal_subscriber_terminal_cfg *)obj)->key.sub_term_id,
+                    ((bcmbal_subscriber_terminal_cfg *)obj)->key.intf_id);
+            break;
+        }
+            
+        case (BCMBAL_OBJ_ID_FLOW):
+        {
+            sprintf(p_obj_key_str, "flow_id:%d, type:%s",
+                    ((bcmbal_flow_cfg *)obj)->key.flow_id,
+                    ((bcmbal_flow_cfg *)obj)->key.flow_type == BCMBAL_FLOW_TYPE_UPSTREAM ? "upstream" :
+                    ((bcmbal_flow_cfg *)obj)->key.flow_type == BCMBAL_FLOW_TYPE_DOWNSTREAM ? "downstream" :
+                    ((bcmbal_flow_cfg *)obj)->key.flow_type == BCMBAL_FLOW_TYPE_BROADCAST ? "broadcast" :
+                    ((bcmbal_flow_cfg *)obj)->key.flow_type == BCMBAL_FLOW_TYPE_MULTICAST ? "multicast" :
+                    "???"
+                    );
+            break;
+        }
+
+        case (BCMBAL_OBJ_ID_GROUP):
+        {
+            sprintf(p_obj_key_str, "group_id:%d",
+                    ((bcmbal_group_cfg *)obj)->key.group_id);
+            break;
+        }
+
+        case (BCMBAL_OBJ_ID_TM_SCHED):
+        {
+            sprintf(p_obj_key_str, "dir:%s, id:%d",
+                    ((bcmbal_tm_sched_cfg *)obj)->key.dir == BCMBAL_TM_SCHED_DIR_US ? "upstream" :
+                    ((bcmbal_tm_sched_cfg *)obj)->key.dir == BCMBAL_TM_SCHED_DIR_DS ? "downstream" :
+                    "???",
+                    ((bcmbal_tm_sched_cfg *)obj)->key.id
+                    );
+            break;
+        } 
+
+        case (BCMBAL_OBJ_ID_TM_QUEUE):
+        {
+            sprintf(p_obj_key_str, "sched_id:%d, sched_dir:%s, id:%d",                   
+                    ((bcmbal_tm_queue_cfg *)obj)->key.sched_id,
+                    ((bcmbal_tm_queue_cfg *)obj)->key.sched_dir == BCMBAL_TM_SCHED_DIR_US ? "upstream" :
+                    ((bcmbal_tm_queue_cfg *)obj)->key.sched_dir == BCMBAL_TM_SCHED_DIR_DS ? "downstream" :
+                    "???",
+                    ((bcmbal_tm_queue_cfg *)obj)->key.id
+                    );
+            break;
+        } 
+                    
+        case (BCMBAL_OBJ_ID_PACKET):
+        {
+            sprintf(p_obj_key_str, " ");
+            break;
+        }
+
+        default:
+            sprintf(p_obj_key_str, " ");
+            ret = BCM_ERR_PARM;
+            break;
+    }
+
+    return ret;
+}
+
+static inline void bcmbal_interface_object_overlay_w_dst_priority(bcmbal_interface_cfg *dstobj, bcmbal_interface_cfg *srcobj)
+{
+    BUG_ON(NULL == dstobj);
+    BUG_ON(NULL == srcobj);
+    
+    bcmbal_presence_mask dest_presence_mask;
+    
+    /* First, copy the common object and keys in their entirety,
+    * except for preserving the presence_mask */
+    dest_presence_mask = dstobj->hdr.hdr.presence_mask;
+    dstobj->hdr = srcobj->hdr;
+    dstobj->key = srcobj->key;
+    dstobj->hdr.hdr.presence_mask = dest_presence_mask;
+    
+    /* Now copy only the fields that have been specified in the source and are not already set in the dst object */
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, interface, admin_state))
+    {
+        if(!BCMBAL_CFG_PROP_IS_SET(dstobj, interface, admin_state))
+            BCMBAL_CFG_PROP_SET(dstobj, interface, admin_state, srcobj->data.admin_state);
+    }
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, interface, min_data_agg_port_id))
+    {
+        if(!BCMBAL_CFG_PROP_IS_SET(dstobj, interface, min_data_agg_port_id))
+            BCMBAL_CFG_PROP_SET(dstobj, interface, min_data_agg_port_id, srcobj->data.min_data_agg_port_id);
+    }   
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, interface, min_data_svc_port_id))
+    {
+        if(!BCMBAL_CFG_PROP_IS_SET(dstobj, interface, min_data_svc_port_id))
+            BCMBAL_CFG_PROP_SET(dstobj, interface, min_data_svc_port_id, srcobj->data.min_data_svc_port_id);
+    }    
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, interface, transceiver_type))
+    {
+        if(!BCMBAL_CFG_PROP_IS_SET(dstobj, interface, transceiver_type))
+            BCMBAL_CFG_PROP_SET(dstobj, interface, transceiver_type, srcobj->data.transceiver_type);
+    }    
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, interface, ds_miss_mode))
+    {
+        if(!BCMBAL_CFG_PROP_IS_SET(dstobj, interface, ds_miss_mode))
+            BCMBAL_CFG_PROP_SET(dstobj, interface, ds_miss_mode, srcobj->data.ds_miss_mode);
+    }  
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, interface, mtu))
+    {
+        if(!BCMBAL_CFG_PROP_IS_SET(dstobj, interface, mtu))
+            BCMBAL_CFG_PROP_SET(dstobj, interface, mtu, srcobj->data.mtu);
+    }		
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, interface, flow_control))
+    {
+        if(!BCMBAL_CFG_PROP_IS_SET(dstobj, interface, flow_control))
+            BCMBAL_CFG_PROP_SET(dstobj, interface, flow_control, srcobj->data.flow_control);
+    }
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, interface, ds_tm))
+    {
+        if(!BCMBAL_CFG_PROP_IS_SET(dstobj, interface, ds_tm))
+            BCMBAL_CFG_PROP_SET(dstobj, interface, ds_tm, srcobj->data.ds_tm);
+    }
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, interface, us_tm))
+    {
+        if(!BCMBAL_CFG_PROP_IS_SET(dstobj, interface, us_tm))
+            BCMBAL_CFG_PROP_SET(dstobj, interface, us_tm, srcobj->data.us_tm);
+    }
+}
+
+
+static inline void bcmbal_interface_object_overlay_w_src_priority(bcmbal_interface_cfg *dstobj,
+                                                                 bcmbal_interface_cfg  *srcobj)
+{
+    BUG_ON(NULL == dstobj);
+    BUG_ON(NULL == srcobj);
+    
+    bcmbal_presence_mask dest_presence_mask;
+    
+    /* First, copy the common object and keys in their entirety, except for preserving the presence_mask */
+    dest_presence_mask = dstobj->hdr.hdr.presence_mask;
+    dstobj->hdr = srcobj->hdr;
+    dstobj->key = srcobj->key;
+    dstobj->hdr.hdr.presence_mask = dest_presence_mask;
+    
+    /* Now copy only the fields that have been specified in the source object */
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, interface, admin_state))
+    {
+        BCMBAL_CFG_PROP_SET(dstobj, interface, admin_state, srcobj->data.admin_state);
+    }
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, interface, min_data_agg_port_id))
+    {
+        BCMBAL_CFG_PROP_SET(dstobj, interface, min_data_agg_port_id, srcobj->data.min_data_agg_port_id);
+    }
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, interface, min_data_svc_port_id))
+    {
+        BCMBAL_CFG_PROP_SET(dstobj, interface, min_data_svc_port_id, srcobj->data.min_data_svc_port_id);
+    }    
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, interface, transceiver_type))
+    {
+        BCMBAL_CFG_PROP_SET(dstobj, interface, transceiver_type, srcobj->data.transceiver_type);
+    }
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, interface, ds_miss_mode))
+    {
+        BCMBAL_CFG_PROP_SET(dstobj, interface, ds_miss_mode, srcobj->data.ds_miss_mode);
+    }
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, interface, mtu))
+    {
+        BCMBAL_CFG_PROP_SET(dstobj, interface, mtu, srcobj->data.mtu);
+    }
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, interface, flow_control))
+    {
+        BCMBAL_CFG_PROP_SET(dstobj, interface, flow_control, srcobj->data.flow_control);
+    }    
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, interface, ds_tm))
+    {
+        BCMBAL_CFG_PROP_SET(dstobj, interface, ds_tm, srcobj->data.ds_tm);
+    }
+    if(BCMBAL_CFG_PROP_IS_SET(srcobj, interface, us_tm))
+    {
+        BCMBAL_CFG_PROP_SET(dstobj, interface, us_tm, srcobj->data.us_tm);
+    }
+
+}
+/*@}*/
+
+
+#endif /* BALOBJS_H */
diff --git a/bal_release/src/common/include/bal_osmsg.h b/bal_release/src/common/include/bal_osmsg.h
new file mode 100644
index 0000000..e5caf85
--- /dev/null
+++ b/bal_release/src/common/include/bal_osmsg.h
@@ -0,0 +1,104 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file bal_osmsg.h
+ * @brief BAL Message data structure definitions
+ *
+ */
+#ifndef BAL_OSMSG_H_
+#define BAL_OSMSG_H_
+/*
+ * Message structures.
+ * Going to be generated from object model and moved elsewhere
+ */
+
+/* BAL subsystem */
+typedef enum
+{
+    BAL_SUBSYSTEM_CORE,
+    BAL_SUBSYSTEM_MAC_UTIL,
+    BAL_SUBSYSTEM_SWITCH_UTIL,
+    BAL_SUBSYSTEM_PUBLIC_API,
+
+    BAL_SUBSYSTEM__NUM_OF
+} bal_subsystem;
+
+
+__attribute__ ((unused)) static const char *subsystem_str[] =
+{
+    "BAL Core",
+    "BAL Mac Util",
+    "BAL Switch Util",
+    "BAL Public API"
+};
+
+/** BAL OS message
+ * \ingroup system_msg
+ */
+typedef enum
+{
+    BCMOS_MSG_ID__BEGIN,
+
+    /* Messages used internally by OS abstraction. Do not touch */
+    BCMOS_MSG_ID_INTERNAL_TIMER,            /**< Internal "timer message" type */
+    BCMOS_MSG_ID_INTERNAL_EVENT,            /**< Internal "event message" type */
+    BCMOS_MSG_ID_INTERNAL_IPC,
+
+    /* Application messages */
+    BCMOS_MSG_ID_IPC_PING,                  /*** Inter-process communication ping */
+
+    /* Core/Switch util messages */
+    BCMBAL_SWITCH_UTIL_MSG,
+
+    /* Core/Mac util messages */
+    BCMBAL_MAC_UTIL_MSG,
+
+    /* Core<->Public API messages */
+    BCMBAL_MGMT_MSG,
+
+    /* Core->Public API indication messages (both auto and "normal") */
+    BCMBAL_MGMT_API_IND_MSG,
+
+    BCMOS_MSG_ID_EON_PROXY_RX,
+    BCMOS_MSG_ID_EON_DESTROY_STATE,
+
+    BCMOS_MSG_ID_EPON_OAM_PROXY_RX,
+    BCMOS_MSG_ID_EPON_OAM_TIMEOUT,
+
+	BCMOS_MSG_ID_OMCI_TRANSPORT_SEND,
+
+    BCMOS_MSG_ID__END,
+    BCMOS_MSG_ID__FORCE16 = 0x7fff
+} bcmos_msg_id;
+
+
+#endif /* BAL_OSMSG_H_ */
diff --git a/bal_release/src/common/include/bal_utils_msg.h b/bal_release/src/common/include/bal_utils_msg.h
new file mode 100644
index 0000000..d6721fc
--- /dev/null
+++ b/bal_release/src/common/include/bal_utils_msg.h
@@ -0,0 +1,180 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/******************************************************************************
+The message format will look like the following
+
+  -----------------------------------------------------------------------------------
+ |             BAL Header           |                  | Payload Data               |
+  ----------------------------------|------------------------------------------------
+ | *bcmos_header |                  |  App Header      |                            |
+  -----------------------------------------------------------------------------------
+ |               |                  |  version         |                            |
+ |   type        |   msg_type       |  obj_key         | bal_util_ind_flow_t        |
+ |               |   msg_id         |  status          |                            |
+  -----------------------------------------------------------------------------------
+
+ *The bcmos Header is actually the first field of BAL Header structure (bal_comm_msg_hdr_t)
+ 
+ type can be: 
+             BCMBAL_SWITCH_UTIL_MSG
+             BCMBAL_MAC_UTIL_MSG
+              
+ msg_type can be:
+             BAL_MSG_IND,
+             BAL_MSG_AUTO_IND
+             
+ msg_id is module specific, but contains two 16 bits fields (OBJECT_ID, OPERATION_ID)
+ see  bal_objs.h for OBJECT_ID details
+ The OPERATION_ID should be unique within the OBJECT - see example below
+ bal_msg.h
+ 
+ status is for indication message to show general results. The value is bcmos_errno.
+
+*********************************************************************************/
+ 
+/**
+ * @file bal_utils_msg.h
+ *
+ * @brief Common header for messages sent between Utils and Core
+ *
+ * @ingroup apps
+ */
+
+#ifndef  _BAL_UTIL_MSG_H_
+#define  _BAL_UTIL_MSG_H_
+
+/*@{*/
+
+#include <bal_msg.h>
+#include <stdint.h>
+
+#define BAL_UTIL_MSG_VERSION  1
+
+/* access terminal request list,
+ */  
+typedef enum
+{
+   BAL_UTIL_OPER_ACC_TERM_CONNECT,
+   BAL_UTIL_OPER_ACC_TERM_DISCONNECT
+} bal_util_oper_acc_term;
+
+/* subscriber terminal request list,
+ */  
+typedef enum
+{
+   BAL_UTIL_OPER_SUB_TERM_ADD,
+   BAL_UTIL_OPER_SUB_TERM_REMOVE,
+   BAL_UTIL_OPER_SUB_TERM_CLEAR,
+   BAL_UTIL_OPER_SUB_TERM_DISCOVERY
+} bal_util_oper_sub_term;
+
+/* interface request list,
+ */  
+typedef enum
+{
+   BAL_UTIL_OPER_IF_UP,
+   BAL_UTIL_OPER_IF_DOWN
+} bal_util_oper_if;
+
+/* flow request list,
+ */  
+typedef enum
+{
+   BAL_UTIL_OPER_FLOW_ADD,        
+   BAL_UTIL_OPER_FLOW_REMOVE,
+   BAL_UTIL_OPER_FLOW_CLEAR
+} bal_util_oper_flow;
+
+typedef enum
+{
+   BAL_UTIL_FLOW_IND_SEND_NONE,        
+   BAL_UTIL_FLOW_IND_SEND_SUCCESS,
+   BAL_UTIL_FLOW_IND_SEND_FAIL
+} bal_util_flow_ind;
+
+/* group request list,
+ */  
+typedef enum
+{
+   BAL_UTIL_OPER_GROUP_CREATE,
+   BAL_UTIL_OPER_GROUP_ADD,        
+   BAL_UTIL_OPER_GROUP_REMOVE,
+   BAL_UTIL_OPER_GROUP_SET,
+   BAL_UTIL_OPER_GROUP_DESTROY
+} bal_util_oper_group;
+
+typedef enum
+{
+   BAL_UTIL_OPER_AGG_PORT_ADD,
+   BAL_UTIL_OPER_AGG_PORT_REMOVE,
+   BAL_UTIL_OPER_AGG_PORT_CLEAR
+} bal_util_oper_agg_port;
+
+/* Macro to retrieve the name string of the GROUP oper */
+#define BCMBAL_UTIL_GROUP_OPER_STR_GET(__op_type__)               \
+        ( BAL_UTIL_OPER_GROUP_CREATE  == __op_type__ ) ? "create" :   \
+        ( BAL_UTIL_OPER_GROUP_ADD     == __op_type__ ) ? "add" :      \
+        ( BAL_UTIL_OPER_GROUP_REMOVE  == __op_type__ ) ? "remove" :   \
+        ( BAL_UTIL_OPER_GROUP_SET     == __op_type__ ) ? "set" :      \
+        ( BAL_UTIL_OPER_GROUP_DESTROY == __op_type__ ) ? "destroy" :  \
+        "unknown"                                               
+
+/* bal_app_msg_obj_key_t allow applications to id which instance of object
+ * this message should be processed
+ */
+typedef union bal_util_msg_obj_key
+{
+    bcmbal_access_terminal_key acc_term_key;
+    bcmbal_interface_key if_key;
+    bcmbal_subscriber_terminal_key sub_term_key;
+    bcmbal_flow_key flow_key;
+    bcmbal_group_key group_key;
+    bcmbal_tm_sched_key tm_sched_key;
+} bal_util_msg_obj_key;
+
+#define  BCMBAL_INVALID_TUNNEL_ID 0xffffffff
+ 
+ /* indication message header */
+ typedef struct bal_util_msg_ind
+ {  
+     bal_comm_msg_hdr  comm_hdr; /* Communication header */
+     uint32_t          version;  /* version of the app message format */
+     bal_util_msg_obj_key obj_key;
+     int32_t           status;   /* bcmos_errno */
+     /* Optional custom BAL MAC/SWITCH UTIL indication data follows */
+     char              data[0];
+ } bal_util_msg_ind;
+ 
+ /* auto indication message header */
+ typedef bal_util_msg_ind bal_util_msg_auto_ind;
+
+#endif  /* _BAL_UTIL_MSG_H */
diff --git a/bal_release/src/common/include/bal_version.h b/bal_release/src/common/include/bal_version.h
new file mode 100644
index 0000000..533ff6b
--- /dev/null
+++ b/bal_release/src/common/include/bal_version.h
@@ -0,0 +1,44 @@
+/*************************************************************
+ * DO NOT EDIT! THIS FILE WAS AUTO GENERATED. DO NOT EDIT!   *
+ *************************************************************/
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2017:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2017 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+#if !defined(BAL_VERSION_H)
+#define BAL_VERSION_H
+
+#define BAL_VERSION          "R02.02.01.139177"
+#define BAL_VERSION_STR_LEN  (17)
+
+#define BAL_BUILD_DATE "Thu Mar 30 18:15:35 IDT 2017"
+#define BAL_BUILD_INFO       ""
+
+#endif  /* BAL_VERSION_H */
diff --git a/bal_release/src/common/os_abstraction/Makefile b/bal_release/src/common/os_abstraction/Makefile
new file mode 120000
index 0000000..823d78c
--- /dev/null
+++ b/bal_release/src/common/os_abstraction/Makefile
@@ -0,0 +1 @@
+../../../3rdparty/maple/sdk/host_customized/os_abstraction/Makefile
\ No newline at end of file
diff --git a/bal_release/src/common/os_abstraction/bcmos_common.c b/bal_release/src/common/os_abstraction/bcmos_common.c
new file mode 120000
index 0000000..eccb2aa
--- /dev/null
+++ b/bal_release/src/common/os_abstraction/bcmos_common.c
@@ -0,0 +1 @@
+../../../3rdparty/maple/sdk/host_customized/os_abstraction/bcmos_common.c
\ No newline at end of file
diff --git a/bal_release/src/common/os_abstraction/bcmos_common.h b/bal_release/src/common/os_abstraction/bcmos_common.h
new file mode 120000
index 0000000..a31747a
--- /dev/null
+++ b/bal_release/src/common/os_abstraction/bcmos_common.h
@@ -0,0 +1 @@
+../../../3rdparty/maple/sdk/host_customized/os_abstraction/bcmos_common.h
\ No newline at end of file
diff --git a/bal_release/src/common/os_abstraction/bcmos_common2.h b/bal_release/src/common/os_abstraction/bcmos_common2.h
new file mode 120000
index 0000000..b5d6f8f
--- /dev/null
+++ b/bal_release/src/common/os_abstraction/bcmos_common2.h
@@ -0,0 +1 @@
+../../../3rdparty/maple/sdk/host_customized/os_abstraction/bcmos_common2.h
\ No newline at end of file
diff --git a/bal_release/src/common/os_abstraction/bcmos_endian.h b/bal_release/src/common/os_abstraction/bcmos_endian.h
new file mode 120000
index 0000000..3c1036d
--- /dev/null
+++ b/bal_release/src/common/os_abstraction/bcmos_endian.h
@@ -0,0 +1 @@
+../../../3rdparty/maple/sdk/host_customized/os_abstraction/bcmos_endian.h
\ No newline at end of file
diff --git a/bal_release/src/common/os_abstraction/bcmos_errno.c b/bal_release/src/common/os_abstraction/bcmos_errno.c
new file mode 120000
index 0000000..240256f
--- /dev/null
+++ b/bal_release/src/common/os_abstraction/bcmos_errno.c
@@ -0,0 +1 @@
+../../../3rdparty/maple/sdk/host_customized/os_abstraction/bcmos_errno.c
\ No newline at end of file
diff --git a/bal_release/src/common/os_abstraction/bcmos_errno.h b/bal_release/src/common/os_abstraction/bcmos_errno.h
new file mode 120000
index 0000000..9bac886
--- /dev/null
+++ b/bal_release/src/common/os_abstraction/bcmos_errno.h
@@ -0,0 +1 @@
+../../../3rdparty/maple/sdk/host_customized/os_abstraction/bcmos_errno.h
\ No newline at end of file
diff --git a/bal_release/src/common/os_abstraction/bcmos_hash_table.c b/bal_release/src/common/os_abstraction/bcmos_hash_table.c
new file mode 120000
index 0000000..81cb3c0
--- /dev/null
+++ b/bal_release/src/common/os_abstraction/bcmos_hash_table.c
@@ -0,0 +1 @@
+../../../3rdparty/maple/sdk/host_customized/os_abstraction/bcmos_hash_table.c
\ No newline at end of file
diff --git a/bal_release/src/common/os_abstraction/bcmos_hash_table.h b/bal_release/src/common/os_abstraction/bcmos_hash_table.h
new file mode 120000
index 0000000..c0111be
--- /dev/null
+++ b/bal_release/src/common/os_abstraction/bcmos_hash_table.h
@@ -0,0 +1 @@
+../../../3rdparty/maple/sdk/host_customized/os_abstraction/bcmos_hash_table.h
\ No newline at end of file
diff --git a/bal_release/src/common/os_abstraction/bcmos_pack.h b/bal_release/src/common/os_abstraction/bcmos_pack.h
new file mode 120000
index 0000000..7582ed1
--- /dev/null
+++ b/bal_release/src/common/os_abstraction/bcmos_pack.h
@@ -0,0 +1 @@
+../../../3rdparty/maple/sdk/host_customized/os_abstraction/bcmos_pack.h
\ No newline at end of file
diff --git a/bal_release/src/common/os_abstraction/bcmos_queue.h b/bal_release/src/common/os_abstraction/bcmos_queue.h
new file mode 120000
index 0000000..cf2d81d
--- /dev/null
+++ b/bal_release/src/common/os_abstraction/bcmos_queue.h
@@ -0,0 +1 @@
+../../../3rdparty/maple/sdk/host_customized/os_abstraction/bcmos_queue.h
\ No newline at end of file
diff --git a/bal_release/src/common/os_abstraction/bcmos_rw_lock.c b/bal_release/src/common/os_abstraction/bcmos_rw_lock.c
new file mode 120000
index 0000000..bee8c23
--- /dev/null
+++ b/bal_release/src/common/os_abstraction/bcmos_rw_lock.c
@@ -0,0 +1 @@
+../../../3rdparty/maple/sdk/host_customized/os_abstraction/bcmos_rw_lock.c
\ No newline at end of file
diff --git a/bal_release/src/common/os_abstraction/bcmos_rw_lock.h b/bal_release/src/common/os_abstraction/bcmos_rw_lock.h
new file mode 120000
index 0000000..cd9e84d
--- /dev/null
+++ b/bal_release/src/common/os_abstraction/bcmos_rw_lock.h
@@ -0,0 +1 @@
+../../../3rdparty/maple/sdk/host_customized/os_abstraction/bcmos_rw_lock.h
\ No newline at end of file
diff --git a/bal_release/src/common/os_abstraction/bcmos_sysif.h b/bal_release/src/common/os_abstraction/bcmos_sysif.h
new file mode 120000
index 0000000..a9c8db8
--- /dev/null
+++ b/bal_release/src/common/os_abstraction/bcmos_sysif.h
@@ -0,0 +1 @@
+../../../3rdparty/maple/sdk/host_customized/os_abstraction/bcmos_sysif.h
\ No newline at end of file
diff --git a/bal_release/src/common/os_abstraction/bcmos_tree.h b/bal_release/src/common/os_abstraction/bcmos_tree.h
new file mode 120000
index 0000000..62433e7
--- /dev/null
+++ b/bal_release/src/common/os_abstraction/bcmos_tree.h
@@ -0,0 +1 @@
+../../../3rdparty/maple/sdk/host_customized/os_abstraction/bcmos_tree.h
\ No newline at end of file
diff --git a/bal_release/src/common/os_abstraction/bcmos_types.h b/bal_release/src/common/os_abstraction/bcmos_types.h
new file mode 120000
index 0000000..5e43582
--- /dev/null
+++ b/bal_release/src/common/os_abstraction/bcmos_types.h
@@ -0,0 +1 @@
+../../../3rdparty/maple/sdk/host_customized/os_abstraction/bcmos_types.h
\ No newline at end of file
diff --git a/bal_release/src/common/os_abstraction/cfe b/bal_release/src/common/os_abstraction/cfe
new file mode 120000
index 0000000..5dba27e
--- /dev/null
+++ b/bal_release/src/common/os_abstraction/cfe
@@ -0,0 +1 @@
+../../../3rdparty/maple/sdk/host_customized/os_abstraction/cfe
\ No newline at end of file
diff --git a/bal_release/src/common/os_abstraction/linux b/bal_release/src/common/os_abstraction/linux
new file mode 120000
index 0000000..ee2249d
--- /dev/null
+++ b/bal_release/src/common/os_abstraction/linux
@@ -0,0 +1 @@
+../../../3rdparty/maple/sdk/host_customized/os_abstraction/linux
\ No newline at end of file
diff --git a/bal_release/src/common/os_abstraction/os_cli b/bal_release/src/common/os_abstraction/os_cli
new file mode 120000
index 0000000..075f9b4
--- /dev/null
+++ b/bal_release/src/common/os_abstraction/os_cli
@@ -0,0 +1 @@
+../../../3rdparty/maple/sdk/host_customized/os_abstraction/os_cli
\ No newline at end of file
diff --git a/bal_release/src/common/os_abstraction/posix b/bal_release/src/common/os_abstraction/posix
new file mode 120000
index 0000000..9f04fee
--- /dev/null
+++ b/bal_release/src/common/os_abstraction/posix
@@ -0,0 +1 @@
+../../../3rdparty/maple/sdk/host_customized/os_abstraction/posix
\ No newline at end of file
diff --git a/bal_release/src/common/os_abstraction/vxworks55 b/bal_release/src/common/os_abstraction/vxworks55
new file mode 120000
index 0000000..5a3b0c5
--- /dev/null
+++ b/bal_release/src/common/os_abstraction/vxworks55
@@ -0,0 +1 @@
+../../../3rdparty/maple/sdk/host_customized/os_abstraction/vxworks55
\ No newline at end of file
diff --git a/bal_release/src/common/utils b/bal_release/src/common/utils
new file mode 120000
index 0000000..1d7a58c
--- /dev/null
+++ b/bal_release/src/common/utils
@@ -0,0 +1 @@
+../../3rdparty/maple/sdk/host_driver/utils
\ No newline at end of file
diff --git a/bal_release/src/core/main/Makefile b/bal_release/src/core/main/Makefile
new file mode 100644
index 0000000..d0a6e02
--- /dev/null
+++ b/bal_release/src/core/main/Makefile
@@ -0,0 +1,39 @@
+###############################################################################
+#
+#  <:copyright-BRCM:2016:DUAL/GPL:standard
+#  
+#     Copyright (c) 2016 Broadcom
+#     All Rights Reserved
+#  
+#  Unless you and Broadcom execute a separate written software license
+#  agreement governing use of this software, this software is licensed
+#  to you under the terms of the GNU General Public License version 2
+#  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+#  with the following added to such license:
+#  
+#     As a special exception, the copyright holders of this software give
+#     you permission to link this software with independent modules, and
+#     to copy and distribute the resulting executable under terms of your
+#     choice, provided that you also meet, for each linked independent
+#     module, the terms and conditions of the license of that module.
+#     An independent module is a module which is not derived from this
+#     software.  The special exception does not apply to any modifications
+#     of the software.
+#  
+#  Not withstanding the above, under no circumstances may you combine
+#  this software in any way with any other Broadcom software provided
+#  under a license other than the GPL, without Broadcom's express prior
+#  written consent.
+#  
+#  :>
+#
+###############################################################################
+# BAL core CLI application
+#
+MOD_NAME = bal_core
+MOD_DEPS = common_include dev_log cli os_cli bal_api bal_api_cli bal_mac_util bal_switch_util bal_app_utils rscmgr balobjmsg topology cmdline
+MOD_DEPS_OPT = omcisvc
+
+MOD_TYPE = lib
+
+srcs = bal_core.c bal_cli.c bal_worker.c acc_term_fsm.c sub_term_fsm.c flow_fsm.c fsm_common.c group_fsm.c tm_sched_fsm.c tm_queue_fsm.c
diff --git a/bal_release/src/core/main/acc_term_fsm.c b/bal_release/src/core/main/acc_term_fsm.c
new file mode 100644
index 0000000..c4635b9
--- /dev/null
+++ b/bal_release/src/core/main/acc_term_fsm.c
@@ -0,0 +1,2431 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *
+ *  :>
+ *
+ *****************************************************************************/
+
+/**
+ * @file acc_term_fsm.c
+ * @brief Code to support the BAL access terminal FSM
+ *
+ * @addtogroup access_terminal
+ */
+
+/*@{*/
+
+#define BAL_DBG_PRINT
+
+/*--- project includes ---*/
+#include <bcmos_system.h>
+#include <acc_term_fsm.h>
+#include <bal_msg.h>
+#include <bal_api.h>
+#include "bal_worker.h"
+#include "bal_mac_util.h"
+#include "bal_switch_util.h"
+#include <bal_osmsg.h>
+#include <fsm_common.h>
+#include <rsc_mgr.h>
+#include <bal_core.h>
+
+#ifdef ENABLE_LOG
+#include <bcm_dev_log.h>
+
+/*
+ * @brief The logging device ids for the access-terminal and interface
+ */
+static dev_log_id log_id_access_terminal;
+static dev_log_id log_id_interface;
+#endif
+
+
+/*--- local function declarations  ---*/
+static bcmos_errno acc_term_fsm_acc_term_admin_up_ok(acc_term_inst *p_acc_term_inst,
+                                                     void *msg,
+                                                     acc_term_fsm_event *p_event);
+
+static bcmos_errno acc_term_fsm_acc_term_admin_dn_start(acc_term_inst *p_acc_term_inst,
+                                                        void *msg,
+                                                        acc_term_fsm_event *p_event);
+
+static bcmos_errno acc_term_fsm_acc_term_admin_dn_ok(acc_term_inst *p_acc_term_inst,
+                                                     void *msg,
+                                                     acc_term_fsm_event *p_event);
+
+static bcmos_errno acc_term_fsm_ignore_msg(acc_term_inst *p_acc_term_inst,
+                                           void *msg,
+                                           acc_term_fsm_event *p_event);
+
+static bcmos_errno acc_term_fsm_acc_term_admin_up_pending(acc_term_inst *p_acc_term_inst,
+                                                          void *msg,
+                                                          acc_term_fsm_event *p_event);
+
+static bcmos_errno acc_term_fsm_acc_term_admin_dn_pending(acc_term_inst *p_acc_term_inst,
+                                                          void *msg,
+                                                          acc_term_fsm_event *p_event);
+
+static bcmos_errno acc_term_fsm_adding_process_util_msg(acc_term_inst *p_acc_term_inst,
+                                                       void *msg,
+                                                       acc_term_fsm_event *p_event);
+
+static bcmos_errno acc_term_fsm_removing_process_util_msg(acc_term_inst *p_acc_term_inst,
+                                                         void *msg,
+                                                         acc_term_fsm_event *p_event);
+
+static bcmos_errno acc_term_fsm_process_util_auto_msg(acc_term_inst *p_acc_term_inst,
+                                                     void *msg,
+                                                     acc_term_fsm_event *p_event);
+
+static bcmos_errno acc_term_fsm_process_adding_timeout(acc_term_inst *p_acc_term_inst,
+                                                       void *msg,
+                                                       acc_term_fsm_event *p_event);
+
+static bcmos_errno acc_term_fsm_process_removing_timeout(acc_term_inst *p_acc_term_inst,
+                                                         void *msg,
+                                                         acc_term_fsm_event *p_event);
+
+static bcmos_errno acc_term_fsm_acc_term_admin_up_start(acc_term_inst *p_acc_term_inst,
+                                                        void *msg,
+                                                        acc_term_fsm_event *p_event);
+
+static bcmos_errno interface_admin_up_start(acc_term_interface *p_interface,
+                                            void *msg);
+
+static bcmos_errno interface_admin_dn_start(acc_term_interface *p_interface,
+                                            void *msg);
+
+static bcmos_timer_rc acc_term_fsm_timer_expiry(bcmos_timer *timer, long pUser);
+
+static bcmos_errno access_terminal_fsm_exec(acc_term_inst *p_acc_term_inst, acc_term_fsm_event *p_event);
+
+
+/**
+ * access-terminal FSM helper functions
+ */
+static bcmos_errno acc_term_fsm_state_err(acc_term_inst *p_acc_term_inst,
+                                          void *msg,
+                                          acc_term_fsm_event *p_event);
+
+static void initialize_access_terminal_instance_config(acc_term_inst *p_acc_term_inst);
+
+static bcmos_errno sub_term_id_list_fill(uint32_t interface_index,
+                                         bcmbal_sub_id_list_u16 *sub_term_id_list);
+
+
+static acc_term_inst *access_terminal_get(void);
+static char *interface_type_str_get(bcmbal_intf_type intf_type);
+
+static bcmos_errno interface_tm_sched_set(bcmbal_interface_cfg *p_interface_info);
+static acc_term_interface * bcmbal_interface_get(bcmbal_interface_key key);
+
+#define ACC_TERM_FSM_STATE_ADDING_TIMEOUT           (45) /* Seconds */
+
+/*
+ * @brief The definition of an access terminal FSM state processing function
+ */
+typedef bcmos_errno (* acc_term_fsm_state_processor)(acc_term_inst *, void *, acc_term_fsm_event *);
+
+extern bcmbal_config_params bal_config_params;
+
+
+/**
+ * @brief API to get oper status from admin state of an interface
+ */
+bcmbal_status bcmbal_get_intf_oper_status_from_admin_state (bcmbal_state intf_admin_state)
+{
+    switch (intf_admin_state)
+    {
+        case BCMBAL_STATE_UP:
+            return BCMBAL_STATUS_UP;
+            break;
+
+        case BCMBAL_STATE_DOWN:
+            return BCMBAL_STATUS_DOWN;
+            break;
+
+        case BCMBAL_STATE_TESTING:
+            return BCMBAL_STATUS_TESTING;
+            break;
+
+        default:
+            return BCMBAL_STATUS_UP;  /* default keep oper status as UP */
+            break;
+    }
+
+    return BCMBAL_STATUS_UP;  /* default keep oper status as UP */
+}
+
+
+/**
+ * @brief API to convert port type and id from CLI/Mgmt interface to the internal
+ * index of interface array database.
+ */
+uint32_t bcmbal_port_type_and_id_to_interface_index (bcmbal_intf_type intf_type, bcmbal_intf_id intf_id)
+{
+    switch (intf_type)
+    {
+        case BCMBAL_INTF_TYPE_PON:
+            if (intf_id < NUM_SUPPORTED_SUBSCRIBER_INTERFACES)
+            {
+                return intf_id; /* zero offset for the PON ports */
+            }
+            break;
+
+        case BCMBAL_INTF_TYPE_NNI:
+            if (intf_id < bal_config_params.num_nni_ports)
+            {
+                return (NUM_SUPPORTED_SUBSCRIBER_INTERFACES + intf_id); /* offset-ed for the NNI ports */
+            }
+            break;
+
+        default:
+            break;
+    }
+
+    return INVALID_INTERFACE_INDEX;
+
+}
+
+
+/*
+ * @brief The Access terminal FSM state processing array
+ */
+static acc_term_fsm_state_processor access_term_states[ACC_TERM_FSM_STATE__NUM_OF][ACC_TERM_FSM_EVENT_TYPE__NUM_OF] =
+{
+
+    [ACC_TERM_FSM_STATE_NULL] =
+    {
+        /*
+         * Next state: ADDING
+         */
+        [ACC_TERM_FSM_EVENT_TYPE_ADMIN_UP]     = acc_term_fsm_acc_term_admin_up_start,
+
+        /*
+         * Next state: NULL
+         */
+        [ACC_TERM_FSM_EVENT_TYPE_ADMIN_DN]     = acc_term_fsm_acc_term_admin_dn_ok,
+
+        /*
+         * Next state: NULL
+         */
+        [ACC_TERM_FSM_EVENT_TYPE_UTIL_MSG]               = acc_term_fsm_ignore_msg,
+
+        /*
+         * Next state: NULL
+         */
+        [ACC_TERM_FSM_EVENT_TYPE_UTIL_AUTO_MSG]          = acc_term_fsm_process_util_auto_msg,
+    },
+
+    [ACC_TERM_FSM_STATE_ADDING] =
+    {
+        /*
+         * Next state: ADDING
+         */
+        [ACC_TERM_FSM_EVENT_TYPE_ADMIN_UP]     = acc_term_fsm_acc_term_admin_up_pending,
+
+        /*
+         * Next state: ADDING | ADDED
+         */
+        [ACC_TERM_FSM_EVENT_TYPE_UTIL_MSG]               = acc_term_fsm_adding_process_util_msg,
+
+        /*
+         * Next state: ADDING
+         */
+        [ACC_TERM_FSM_EVENT_TYPE_UTIL_AUTO_MSG]          = acc_term_fsm_process_util_auto_msg,
+
+        /*
+         * Next state: NULL
+         */
+        [ACC_TERM_FSM_EVENT_TYPE_TIMEOUT]               = acc_term_fsm_process_adding_timeout,
+
+    },
+
+    [ACC_TERM_FSM_STATE_ADDED] =
+    {
+        /*
+         * Next state: ADDED
+         */
+        [ACC_TERM_FSM_EVENT_TYPE_ADMIN_UP]     = acc_term_fsm_acc_term_admin_up_ok,
+
+        /*
+         * Next state: REMOVING
+         */
+        [ACC_TERM_FSM_EVENT_TYPE_ADMIN_DN]     = acc_term_fsm_acc_term_admin_dn_start,
+
+        /*
+         * Next state: ADDING | ADDED
+         */
+        [ACC_TERM_FSM_EVENT_TYPE_UTIL_MSG]               = acc_term_fsm_ignore_msg,
+
+        /*
+         * Next state: ADDED
+         */
+        [ACC_TERM_FSM_EVENT_TYPE_UTIL_AUTO_MSG]          = acc_term_fsm_process_util_auto_msg,
+
+    },
+
+    [ACC_TERM_FSM_STATE_REMOVING] =
+    {
+        /*
+         * Next state: REMOVING
+         */
+        [ACC_TERM_FSM_EVENT_TYPE_ADMIN_DN]     = acc_term_fsm_acc_term_admin_dn_pending,
+
+         /*
+         * Next state: REMOVING | NULL
+         */
+        [ACC_TERM_FSM_EVENT_TYPE_UTIL_MSG]               = acc_term_fsm_removing_process_util_msg,
+
+        /*
+         * Next state: REMOVING
+         */
+        [ACC_TERM_FSM_EVENT_TYPE_UTIL_AUTO_MSG]          = acc_term_fsm_process_util_auto_msg,
+
+        /*
+         * Next state: NULL
+         */
+        [ACC_TERM_FSM_EVENT_TYPE_TIMEOUT]               = acc_term_fsm_process_removing_timeout,
+    },
+
+};
+
+static char *state_name_str[] =
+{
+    "ACC_TERM_NULL",
+    "ACC_TERM_ADDING",
+    "ACC_TERM_ADDED",
+    "ACC_TERM_REMOVING",
+};
+
+/* Ensure that the name array size matches the associated enum */
+BAL_STATIC_ASSERT (ACC_TERM_FSM_STATE__LAST == (sizeof (state_name_str) / sizeof (char *)), acc_term_fsm_state);
+
+static char *acc_term_state_name_get(acc_term_fsm_state state)
+{
+    if(state < ACC_TERM_FSM_STATE__LAST)
+    {
+        return state_name_str[state];
+    }
+    else
+    {
+        return "ACC_TERM_UNKNOWN";
+    }
+}
+
+static char *event_name_str[] =
+{
+    "ACC_TERM_FSM_ACC_TERM_ADMIN_UP_EVENT",
+    "ACC_TERM_FSM_ACC_TERM_ADMIN_DN_EVENT",
+    "ACC_TERM_FSM_INT_ADMIN_UP_EVENT",
+    "ACC_TERM_FSM_INT_ADMIN_DN_EVENT",
+    "ACC_TERM_FSM_UTIL_MSG_EVENT",
+    "ACC_TERM_FSM_UTIL_AUTO_MSG_EVENT",
+    "ACC_TERM_FSM_TIMEOUT_EVENT"
+};
+
+/* Ensure that the name array size matches the associated enum */
+BAL_STATIC_ASSERT (ACC_TERM_FSM_EVENT_TYPE__LAST == (sizeof (event_name_str) / sizeof (char *)), acc_term_fsm_event_type);
+
+static char *acc_term_event_name_get(acc_term_fsm_event_type event)
+{
+    if(event < ACC_TERM_FSM_EVENT_TYPE__LAST)
+    {
+        return event_name_str[event];
+    }
+    else
+    {
+        return "ACC_TERM_EVT_UNKNOWN";
+    }
+}
+
+static acc_term_inst single_access_terminal_instance;
+
+/*****************************************************************************/
+/**
+ * @brief A function called to initialize the access-terminal FSM
+ *        infrastructure.
+ *
+ *        NOTE: This is called once on startup and NOT for each FSM instance.
+ *
+ * @returns void
+ *****************************************************************************/
+void access_terminal_fsm_init(void)
+{
+
+#ifdef ENABLE_LOG
+    /* Register the log ids for this FSM */
+    log_id_access_terminal = bcm_dev_log_id_register("ACC_TERM", DEV_LOG_LEVEL_INFO, DEV_LOG_ID_TYPE_BOTH);
+    BUG_ON(log_id_access_terminal == DEV_LOG_INVALID_ID);
+
+    log_id_interface = bcm_dev_log_id_register("INTF", DEV_LOG_LEVEL_INFO, DEV_LOG_ID_TYPE_BOTH);
+    BUG_ON(log_id_interface == DEV_LOG_INVALID_ID);
+#endif
+
+    /*
+     * Initialize the access terminal instance structures
+     */
+    initialize_access_terminal_instance_config(&single_access_terminal_instance);
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Access terminal FSM state processing executive function
+ *
+ * @param p_acc_term_inst  Pointer to an access terminal instance
+ * @param p_event          Pointer to an access terminal event structure
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+static bcmos_errno access_terminal_fsm_exec(acc_term_inst *p_acc_term_inst,
+                                            acc_term_fsm_event *p_event)
+{
+
+    bcmos_errno ret = BCM_ERR_OK;
+    acc_term_fsm_state pre_state;
+    acc_term_fsm_state_processor acc_term_state_processor;
+
+    /* Parameter checks */
+    BUG_ON(NULL == p_acc_term_inst);
+    BUG_ON(NULL == p_event);
+
+    /* Record the present state before transitioning
+     */
+    pre_state = p_acc_term_inst->fsm_state;
+
+    /*
+     * Get the state processing function
+     */
+    acc_term_state_processor = access_term_states[p_acc_term_inst->fsm_state][p_event->event_type];
+
+    /*
+     * If there's a state processing function for this event and state, execute it.
+     * Otherwise, process a generic error.
+     */
+    if (acc_term_state_processor)
+    {
+        ret = acc_term_state_processor(p_acc_term_inst, p_event->msg, p_event);
+    } else
+    {
+        acc_term_fsm_state_err(p_acc_term_inst, p_event->msg, p_event);
+    }
+
+    BCM_LOG(DEBUG, log_id_access_terminal, "*** FSM exec: Event %s, State: %s --> %s\n",
+           acc_term_event_name_get(p_event->event_type),
+           acc_term_state_name_get(pre_state),
+           acc_term_state_name_get(p_acc_term_inst->fsm_state));
+
+    return ret;
+}
+
+bcmos_errno process_access_terminal_util_msg(void *msg_payload)
+{
+    acc_term_inst *p_access_terminal_inst;
+
+    BCM_LOG(INFO, log_id_access_terminal, "ACCESS_TERMINAL indication received from util\n");
+
+    /* Find the specified access terminal instance */
+    p_access_terminal_inst = access_terminal_get();
+
+    if (NULL != p_access_terminal_inst)
+    {
+        acc_term_fsm_event event;
+
+        event.event_type = ACC_TERM_FSM_EVENT_TYPE_UTIL_MSG;
+        event.msg = msg_payload;
+
+        access_terminal_fsm_exec(p_access_terminal_inst, &event);
+    }
+    else
+    {
+        BCM_LOG(ERROR, log_id_interface, "Could not find the ACTIVE access-terminal\n");
+    }
+
+    return BCM_ERR_OK;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Access terminal FSM state processing for an access-terminal
+ *        admin-up command received from the BAL Public API when the specified
+ *        access-terminal instance is in the admin-down state (i.e. when
+ *        the access-terminal instance FSM is in the NULL state).
+ *
+ * @param p_acc_term_inst  Pointer to an access terminal instance
+ * @param msg              Pointer to a BAL message received from the BAL Public API
+ * @param p_event          Pointer to an access terminal event structure
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+static bcmos_errno acc_term_fsm_acc_term_admin_up_start(acc_term_inst *p_acc_term_inst,
+                                                        void *msg,
+                                                        acc_term_fsm_event *p_event)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    acc_term_fsm_state old_state = p_acc_term_inst->fsm_state;
+
+    BCM_LOG(INFO, log_id_access_terminal,
+                "Received an admin UP request from BAL API - bringing access terminal up\n");
+
+    do
+    {
+        /* change access terminal state to ADDING */
+        p_acc_term_inst->fsm_state = ACC_TERM_FSM_STATE_ADDING;
+
+        /* start the timeout timer for the ADDING state */
+        fsm_timer_start(&p_acc_term_inst->timer_info,
+            p_acc_term_inst,
+            acc_term_fsm_timer_expiry,
+            TIMER_DURATION_IN_SEC(ACC_TERM_FSM_STATE_ADDING_TIMEOUT),
+            log_id_access_terminal);
+
+        /* Validate that the OLT SW version that the Bal was compiled against matches
+         * the SW version of the actual OLT that the Bal works with. We assume that
+         * Device Id 0 has the same version as all other OLT devices */
+        if (!bcmbal_is_mac_in_loopback() &&
+            (BCM_ERR_OK != (ret = mac_util_access_terminal_sw_version_validate((bcmolt_devid) 0))))
+        {
+        	BCM_LOG(ERROR, log_id_access_terminal, "mac_util_access_terminal_sw_version_validate(() failed. rc=%s\n", bcmos_strerror(ret));
+        	break;
+        }
+
+        /* Core calls Mac Utils to set the access-terminal parameters using the applicable SDK calls */
+        if(BCM_ERR_OK != (ret = mac_util_access_terminal_set(p_acc_term_inst, BAL_UTIL_OPER_ACC_TERM_CONNECT)))
+        {
+            BCM_LOG(ERROR, log_id_access_terminal, "mac_util_access_terminal_set(() failed. rc=%s\n", bcmos_strerror(ret));
+            break;
+        }
+
+    }while(0);
+
+    if(BCM_ERR_OK == ret)
+    {
+    	/*
+    	* The access-terminal object command has succeeded.  The current object info
+    	* becomes the commanded object info, except for the oper_status.  This should
+    	* be done atomically
+    	*/
+    	memcpy(&p_acc_term_inst->current_acc_term_obj_info,
+    		&p_acc_term_inst->api_req_acc_term_obj_info,
+    		sizeof(p_acc_term_inst->api_req_acc_term_obj_info));
+
+    	BCMBAL_OBJ_IN_PROGRESS_SET(&(p_acc_term_inst->current_acc_term_obj_info), BCMOS_TRUE);
+
+    	BCMBAL_CFG_PROP_SET(&p_acc_term_inst->current_acc_term_obj_info,
+    		access_terminal,
+    		oper_status,
+    		BCMBAL_STATUS_DOWN);
+    }
+    else
+    {
+    	fsm_timer_stop(&p_acc_term_inst->timer_info);
+    	p_acc_term_inst->fsm_state = old_state;
+   	    mgmt_msg_send_balapi_ind(ret, msg, log_id_access_terminal);
+    }
+
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Access terminal FSM state processing for an  access-terminal
+ *        admin-up command from the BAL Public API when the specified
+ *        access-terminal is already admin-up (i.e. when the specified
+ *        access-terminal instance FSM is in the ADDED state).
+ *
+ * @param p_acc_term_inst  Pointer to an access terminal instance
+ * @param msg              Pointer to a BAL message received from the BAL Public API
+ * @param p_event          Pointer to an access terminal event structure
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+static bcmos_errno acc_term_fsm_acc_term_admin_up_ok(acc_term_inst *p_acc_term_inst,
+                                                     void *msg,
+                                                     acc_term_fsm_event *p_event)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+
+    BCM_LOG(DEBUG, log_id_access_terminal,
+            "Received an admin UP request from BAL API - returning OK to the API"
+            " - no further function\n");
+
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Access terminal FSM state processing for an access-terminal
+ *        admin-down command received from the BAL Public API when the specified
+ *        access-terminal is admin-up (i.e when the specified access-terminal
+ *        instance FSM is in the ADDED state).
+ *
+ * @param p_acc_term_inst  Pointer to an access terminal instance
+ * @param msg              Pointer to a BAL message received from the BAL Public API
+ * @param p_event          Pointer to an access terminal event structure
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+static bcmos_errno acc_term_fsm_acc_term_admin_dn_start(acc_term_inst *p_acc_term_inst,
+                                                        void *msg,
+                                                        acc_term_fsm_event *p_event)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+
+    BCM_LOG(DEBUG, log_id_access_terminal,
+            "Received an admin DOWN request from BAL API - removing the access terminal\n");
+
+    /*
+     * @todo - complete the DOWN implementation - until then, return an error
+     */
+    ret = BCM_ERR_NOT_SUPPORTED;
+
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Access terminal FSM state processing for access-terminal
+ *        admin-down command from the BAL Public API when the specified
+ *        access-terminal is already admin-down.
+ *
+ * @param p_acc_term_inst  Pointer to an access terminal instance
+ * @param msg              Pointer to a BAL message received from the BAL Public API
+ * @param p_event          Pointer to an access terminal event structure
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+static bcmos_errno acc_term_fsm_acc_term_admin_dn_ok(acc_term_inst *p_acc_term_inst,
+                                                     void *msg,
+                                                     acc_term_fsm_event *p_event)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+
+    BCM_LOG(DEBUG, log_id_access_terminal,
+            "Received an admin DOWN request from BAL API - returning OK to the API"
+            " - no further function\n");
+
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Access terminal FSM state processing function to ignore a
+ *        received message.
+ *
+ * @param p_acc_term_inst  Pointer to an access terminal instance
+ * @param msg              Pointer to a BAL message received from the BAL Public API
+ * @param p_event          Pointer to an access terminal event structure
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+static bcmos_errno acc_term_fsm_ignore_msg(acc_term_inst *p_acc_term_inst,
+                                           void *msg,
+                                           acc_term_fsm_event *p_event)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+
+    BCM_LOG(DEBUG, log_id_access_terminal, "Ignoring message from BAL API \n");
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Access terminal FSM state processing function to process an
+ *        access-terminal admin-up command from the BAL Public API when the
+ *        specified access-terminal is in the REMOVING state.
+ *
+ * @param p_acc_term_inst  Pointer to an access terminal instance
+ * @param msg              Pointer to a BAL message received from the BAL Public API
+ * @param p_event          Pointer to an access terminal event structure
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+static bcmos_errno acc_term_fsm_acc_term_admin_up_pending(acc_term_inst *p_acc_term_inst,
+                                                          void *msg,
+                                                          acc_term_fsm_event *p_event)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+
+    BCM_LOG(DEBUG, log_id_access_terminal,
+            " Received an admin UP request from BAL API - returning UP_PENDING to the API"
+            " - no further function\n");
+
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Access terminal FSM state processing function to process an
+ *        access-terminal admin-down command from the BAL Public API when the
+ *        specified access-terminal FSM is in the REMOVING state.
+ *
+ * @param p_acc_term_inst  Pointer to an access terminal instance
+ * @param msg              Pointer to a BAL message received from the BAL Public API
+ * @param p_event          Pointer to an access terminal event structure
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+static bcmos_errno acc_term_fsm_acc_term_admin_dn_pending(acc_term_inst *p_acc_term_inst,
+                                                          void *msg,
+                                                          acc_term_fsm_event *p_event)
+{
+    bcmos_errno ret = BCM_ERR_IN_PROGRESS;
+
+    BCM_LOG(DEBUG, log_id_access_terminal,
+            " Received an admin DOWN request from BAL API"
+            " - returning IN_PROGRESS to the API - no further function\n");
+
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Access terminal FSM state processing function to process a
+ *        message from one of the BAL apps when the specified access-terminal
+ *        instance FSM is in the ADDING state.
+ *
+ * @param p_acc_term_inst  Pointer to an access terminal instance
+ * @param msg              Pointer to a BAL message received from one of
+ *                         the BAL apps.
+ * @param p_event          Pointer to an access terminal event structure
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+static bcmos_errno acc_term_fsm_adding_process_util_msg(acc_term_inst *p_acc_term_inst,
+                                                       void *msg,
+                                                       acc_term_fsm_event *p_event)
+{
+    flow_fsm_state next_state = ACC_TERM_FSM_STATE_NULL;
+    bcmos_errno ret;
+    bal_util_msg_ind *ind_msg;
+
+    /* Parameter checks */
+    BUG_ON(NULL == p_acc_term_inst);
+    BUG_ON(NULL == msg);
+    BUG_ON(NULL == p_event);
+
+    ind_msg = (bal_util_msg_ind *)msg;
+
+    ret = ind_msg->status;
+
+    /*
+     * NOTE: AUTO_IND messages are not processed in this function,
+     * so there is no need to consider them in this logic.
+     */
+    if(BCM_ERR_OK != ret)
+    {
+        BCM_LOG(ERROR, log_id_access_terminal,
+                "Received an IND message from BAL UTIL (%s) during ADDING state with status %s\n",
+                subsystem_str[bcmbal_sender_get(msg)],
+                bcmos_strerror(ret)
+                );
+    }
+
+   /*
+    * Stop the indication timer
+    */
+   fsm_timer_stop(&p_acc_term_inst->timer_info);
+
+   if(BCM_ERR_OK == ret)
+   {
+       /* Core calls Switch Utils to set the access-terminal parameters using the applicable SDK calls */
+       ret = sw_util_access_terminal_set(p_acc_term_inst, BAL_UTIL_OPER_ACC_TERM_CONNECT);
+       if (ret)
+       {
+           BCM_LOG(INFO, log_id_access_terminal,
+                   "sw_util_access_terminal_set(() failed. rc=%s\n", bcmos_strerror(ret));
+       }
+
+       if(BCM_ERR_OK == ret)
+       {
+           uint32_t logical_pon;
+
+           BCMBAL_CFG_PROP_SET(&p_acc_term_inst->current_acc_term_obj_info,
+                           access_terminal,
+                           oper_status,
+                           BCMBAL_STATUS_UP);
+
+           /*
+            * Initialize the resource manager only if at least of the PONs on the device is a GPON/XGPON/XGS/NGPON2 PON
+            */
+           BCM_TOPO_DEV_FOR_EACH_PON(0, logical_pon)
+           {
+               bcm_topo_pon_family pon_family = bcm_topo_pon_get_pon_family(logical_pon);
+
+               if (pon_family == BCM_TOPO_PON_FAMILY_GPON)
+               {
+                   rsc_mgr_mac_init();
+                   break;
+               }
+           }
+
+           /*
+            * Go to the ADDED state upon success
+            */
+           next_state = ACC_TERM_FSM_STATE_ADDED;
+
+
+       }
+       else
+       {
+           /* Error */
+           BCM_LOG(ERROR, log_id_access_terminal,
+                   " Failed in state %s;%s\n",
+                   acc_term_state_name_get(p_acc_term_inst->fsm_state),
+                   bcmos_strerror(ret));
+
+           /*
+            * Automatically return to the NULL state if an error occurs
+            */
+       }
+
+       BCMBAL_OBJ_IN_PROGRESS_SET(&(p_acc_term_inst->current_acc_term_obj_info), BCMOS_FALSE);
+
+       /*
+        * Send the indication back to the BAL public API here
+        */
+       mgmt_msg_send_balapi_ind(ret,
+                                (void *)&p_acc_term_inst->current_acc_term_obj_info.hdr,
+                                log_id_access_terminal);
+
+
+
+   }
+
+   p_acc_term_inst->fsm_state = next_state;
+
+   return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Access terminal FSM state processing function to process a
+ *        message from one of the BAL apps received when the specified
+ *        access-terminal instance FSM is in the REMOVING state.
+ *
+ * @param p_acc_term_inst  Pointer to an access terminal instance
+ * @param msg              Pointer to a BAL message received from one of
+ *                         the BAL apps.
+ * @param p_event          Pointer to an access terminal event structure
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+static bcmos_errno acc_term_fsm_removing_process_util_msg(acc_term_inst *p_acc_term_inst,
+                                                         void *msg,
+                                                         acc_term_fsm_event *p_event)
+{
+    bcmos_errno ret;
+    bal_util_msg_ind *ind_msg;
+
+    /* Parameter checks */
+    BUG_ON(NULL == p_acc_term_inst);
+    BUG_ON(NULL == msg);
+    BUG_ON(NULL == p_event);
+
+    ind_msg = (bal_util_msg_ind *)msg;
+
+    ret = ind_msg->status;
+
+    /*
+     * NOTE: AUTO_IND messages are not processed in this function,
+     * so there is no need to consider them in this logic.
+     */
+
+    if(BCM_ERR_OK != ret)
+    {
+        BCM_LOG(ERROR, log_id_access_terminal,
+                " Received an IND message from BAL UTIL (%s) during REMOVING state\n",
+                subsystem_str[bcmbal_sender_get(msg)]);
+    }
+
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Access terminal FSM state processing function to process an
+ *        AUTO IND message from one of the BAL apps.
+ *
+ * @param p_acc_term_inst  Pointer to an access terminal instance
+ * @param msg              Pointer to a BAL message received from one of
+ *                         the BAL apps.
+ * @param p_event          Pointer to an access terminal event structure
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+static bcmos_errno acc_term_fsm_process_util_auto_msg(acc_term_inst *p_acc_term_inst,
+                                                     void *msg,
+                                                     acc_term_fsm_event *p_event)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+
+    /* Parameter checks */
+    BUG_ON(NULL == p_acc_term_inst);
+    BUG_ON(NULL == msg);
+    BUG_ON(NULL == p_event);
+
+    BCM_LOG(INFO, log_id_access_terminal,
+            " Received an AUTO IND message from BAL UTIL ()\n");
+
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief Interface admin-up command received from the BAL Public API when
+ *        the specified interface instance is in the admin-up state.
+ *
+ * @note  This handler gets called for both PON and NNI type interfaces
+ *
+ * @param p_interface_inst Pointer to an interface instance
+ * @param msg              Pointer to a BAL message received from the BAL Public API
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+static bcmos_errno interface_admin_up_start(acc_term_interface *p_interface_inst,
+                                            void *msg)
+{
+		bcmos_errno ret = BCM_ERR_OK;
+		bcmbal_interface_key *key = &(p_interface_inst->api_req_int_obj_info.key);
+
+		BCM_LOG(INFO, log_id_interface,
+			" Received an INTERFACE admin UP request from BAL API"
+			" - bringing interface (%s%d) UP \n",
+			interface_type_str_get(key->intf_type),
+			key->intf_id);
+
+		do
+		{
+			bcmbal_state old_admin_state = p_interface_inst->current_int_obj_info.data.admin_state;
+
+			/*
+			* Create a pointer to the interface instance specified by the user
+			*/
+
+			/*
+			* If the user has set the min_data_agg_port_id attribute for the interface, then program the resource manager
+			* with this value.	It will also be sent to the MAC device for any required programming there.
+			*/
+			if ((BCMBAL_INTF_TYPE_PON == key->intf_type) &&
+				(BCMOS_TRUE == BCMBAL_CFG_PROP_IS_SET(&p_interface_inst->api_req_int_obj_info,
+				interface,
+				min_data_agg_port_id)) &&
+				(BCM_ERR_OK != rsc_mgr_access_int_base_alloc_id_set(key->intf_id,
+				p_interface_inst->api_req_int_obj_info.data.min_data_agg_port_id)))
+				{
+					BCM_LOG(ERROR, log_id_access_terminal, "Error while setting base agg_port_id (%d) in the resource manager\n",
+						p_interface_inst->api_req_int_obj_info.data.min_data_agg_port_id);
+
+					ret = BCM_ERR_INTERNAL;
+					break;
+				}
+
+			/* Change the interface admin state of the "current" interface object to up (this is for reporting) */
+			BCMBAL_CFG_PROP_SET(&p_interface_inst->current_int_obj_info,
+				interface,
+				admin_state,
+				BCMBAL_STATE_UP);
+
+			/* Core calls Mac Utils to set the interface parameters using the applicable SDK calls */
+			ret = mac_util_interface_set(p_interface_inst, BAL_UTIL_OPER_IF_UP);
+
+			if (BCM_ERR_OK != ret)
+			{
+				BCMBAL_CFG_PROP_SET(&p_interface_inst->current_int_obj_info,
+					interface,
+					admin_state,
+					old_admin_state);
+
+				BCM_LOG(ERROR, log_id_interface,
+					"Error detected by mac_util_interface_set (%s)\n",
+					bcmos_strerror(ret));
+
+				break;
+			}
+		} while (0);
+
+		if (BCM_ERR_OK != ret)
+		{
+			/* report this error to the API */
+			mgmt_msg_send_balapi_ind(ret,
+				msg,
+				log_id_interface);
+		}
+		else
+		{
+			BCMBAL_OBJ_IN_PROGRESS_SET(&(p_interface_inst->current_int_obj_info), BCMOS_TRUE);
+		}
+
+		return ret;
+	}
+
+/*****************************************************************************/
+/**
+ * @brief Interface admin-up command received from the BAL Public API when
+ *        the specified interface instance is in the admin-down state.
+ *
+ * @note  This handler gets called for both PON and NNI type interfaces
+ *
+ * @param p_interface_inst Pointer to an interface instance
+ * @param msg              Pointer to a BAL message received from the BAL Public API
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+static bcmos_errno interface_admin_dn_start(acc_term_interface *p_interface_inst,
+                                            void *msg)
+{
+
+    bcmos_errno ret = BCM_ERR_OK;
+    bcmbal_interface_key *key = &(p_interface_inst->api_req_int_obj_info.key);
+
+    BCM_LOG(INFO, log_id_interface,
+            " Received an INTERFACE admin DOWN request from BAL API"
+            " - bringing interface (%s%d) DOWN \n",
+            interface_type_str_get(key->intf_type),
+            key->intf_id);
+
+    do
+    {
+        bcmbal_state old_admin_state = p_interface_inst->current_int_obj_info.data.admin_state;
+
+        /*
+         * Create a pointer to the interface instance specified by the user
+         */
+
+       /* Core calls Mac Utils to set the interface parameters using the applicable SDK calls */
+        ret = mac_util_interface_set(p_interface_inst, BAL_UTIL_OPER_IF_DOWN);
+
+        if (BCM_ERR_OK != ret)
+        {
+
+            BCMBAL_CFG_PROP_SET(&p_interface_inst->current_int_obj_info,
+                            interface,
+                            admin_state,
+                            old_admin_state);
+
+            BCM_LOG(ERROR, log_id_interface,
+                    "Error detected by mac_util_interface_set (%s)\n",
+                    bcmos_strerror(ret));
+
+            break;
+        }
+		
+    } while (0);
+
+    /* Change the interface admin state of the current interface info to down */
+    BCMBAL_CFG_PROP_SET(&p_interface_inst->current_int_obj_info,
+                        interface,
+                        admin_state,
+                        BCMBAL_STATE_DOWN);
+
+    /* Check for any error and send an indication immediately in that case */
+    if (BCM_ERR_OK != ret)
+    {
+        /* report this error to the API */
+        mgmt_msg_send_balapi_ind(ret,
+                                 msg,
+                                 log_id_interface);
+
+    }
+    else
+    {
+        BCMBAL_OBJ_IN_PROGRESS_SET(&(p_interface_inst->current_int_obj_info), BCMOS_TRUE);
+    }
+
+    return ret;
+
+}
+
+/*****************************************************************************/
+/**
+ * @brief The function to process a timer expiry for either the ADDING
+ *        states.  This function executes an
+ *        ACC_TERM_FSM_TIMEOUT_EVENT in the FSM state machine.
+ *
+ * @param timer - A pointer to the timer instance
+ * @param pUser - An opaque pointer to an access terminal instance
+ *
+ * @returns bcmos_timer_rc == BCMOS_TIMER_OK
+ */
+static bcmos_timer_rc acc_term_fsm_timer_expiry(bcmos_timer *timer, long pUser)
+{
+    acc_term_fsm_event acc_term_event;
+
+   /*
+    * Stop the indication timer
+    */
+    fsm_timer_stop(timer);
+
+    BCM_LOG(INFO, log_id_access_terminal,
+            "timer expiry\n");
+
+    /*
+     * A message pointer is always passed inside the event structure. In this case, it is unused
+     */
+    acc_term_event.msg = NULL;
+    acc_term_event.event_type = ACC_TERM_FSM_EVENT_TYPE_TIMEOUT;
+
+    /* Declare this no longer in-progress */
+    BCMBAL_OBJ_IN_PROGRESS_SET(&(((acc_term_inst *)pUser)->current_acc_term_obj_info), BCMOS_FALSE);
+
+    /*
+     * Run the access terminal FSM to process this event
+     */
+    access_terminal_fsm_exec((acc_term_inst *)pUser, &acc_term_event);
+
+    return BCMOS_TIMER_OK;
+
+}
+
+
+/*****************************************************************************/
+/**
+ * @brief The Access terminal FSM state processing a timeout that occurs
+ *        when the FSM is in the ADDING state. In this case, the FSM should
+ *        just go back to the NULL state.
+ *
+ * @param p_acc_term_inst  Pointer to an access terminal instance
+ * @param msg              Pointer to a BAL message received from the BAL Public API
+ * @param p_event          Pointer to an access terminal event structure
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+static bcmos_errno acc_term_fsm_process_adding_timeout(acc_term_inst *p_acc_term_inst,
+                                                       void *msg,
+                                                       acc_term_fsm_event *p_event)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+
+    BCM_LOG(ERROR, log_id_access_terminal,
+            "Error: Received a timeout while in the %s state.\n",
+            acc_term_state_name_get(p_acc_term_inst->fsm_state));
+
+
+    /*
+     * Send the indication back to the BAL public API here
+     */
+    mgmt_msg_send_balapi_ind(BCM_ERR_TIMEOUT,
+                             (void *)&(p_acc_term_inst->current_acc_term_obj_info.hdr.hdr),
+                             log_id_access_terminal);
+
+    /*
+     * Go back to the previous state
+     */
+    p_acc_term_inst->fsm_state = ACC_TERM_FSM_STATE_NULL;
+    BCMBAL_OBJ_IN_PROGRESS_SET(&(p_acc_term_inst->current_acc_term_obj_info), BCMOS_FALSE);
+
+    return ret;
+
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Access terminal FSM state processing a timeout that occurs
+ *        when the FSM is in the REMOVING state. In this case, the FSM should
+ *        just go back to the ADDED state.
+ *
+ * @param p_acc_term_inst  Pointer to an access terminal instance
+ * @param msg              Pointer to a BAL message received from the BAL Public API
+ * @param p_event          Pointer to an access terminal event structure
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+static bcmos_errno acc_term_fsm_process_removing_timeout(acc_term_inst *p_acc_term_inst,
+                                                         void *msg,
+                                                         acc_term_fsm_event *p_event)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+
+    BCM_LOG(INFO, log_id_access_terminal,
+            "Received a timeout while in the %s state.  Going back to the ADDED state\n",
+             acc_term_state_name_get(p_acc_term_inst->fsm_state));
+
+    /*
+     * Go back to the previous state
+     */
+    p_acc_term_inst->fsm_state = ACC_TERM_FSM_STATE_ADDED;
+
+    return ret;
+
+}
+
+/*****************************************************************************/
+/**
+ * @brief The function to process a
+ *        message from one of the BAL apps for the specified interface
+ *
+ * @param msg              Pointer to a BAL message received from one of
+ *                         the BAL apps.
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+bcmos_errno process_interface_util_msg(void *msg)
+{
+    bcmos_errno   ret = BCM_ERR_OK;
+    uint32_t interface_index = INVALID_INTERFACE_INDEX;
+    bal_util_msg_ind *ind_msg;
+    acc_term_interface *p_interface_inst;
+
+    /* Parameter checks */
+    BUG_ON(NULL == msg);
+
+    ind_msg = (bal_util_msg_ind *)msg;
+
+    /*
+     * NOTE: AUTO_IND messages are not processed in this function,
+     * so there is no need to consider them in this logic.
+     */
+    BCM_LOG(DEBUG, log_id_access_terminal,
+            " Received an interface IND message from BAL UTIL (%s)\n",
+            subsystem_str[bcmbal_sender_get(msg)]);
+
+    if (BCM_ERR_OK == ind_msg->status)
+    {
+        /* first get the index to the interface array from port id/type */
+        interface_index = bcmbal_port_type_and_id_to_interface_index(ind_msg->obj_key.if_key.intf_type,
+                                                                     ind_msg->obj_key.if_key.intf_id);
+
+        if (interface_index >= INVALID_INTERFACE_INDEX)
+        {
+            BCM_LOG(ERROR, log_id_interface,
+                    "INVALID port type/id (%s/%d) to interface index (%d)\n",
+                    interface_type_str_get(ind_msg->obj_key.if_key.intf_type),
+                    ind_msg->obj_key.if_key.intf_id,
+                    interface_index);
+
+            ret = BCM_ERR_PARM;
+        }
+
+        p_interface_inst = &(access_terminal_get()->intf_info.interface[interface_index]);
+
+        if(BCM_ERR_OK == ret)
+        {
+            /* Core calls Switch Utils to set the interface parameters using the applicable SDK call
+             * If a PON port is being set, then the corresponding direct connect switch port is also
+             * set along with it
+             */
+            ret = sw_util_interface_set(p_interface_inst,
+                                        (p_interface_inst->api_req_int_obj_info.data.admin_state == BCMBAL_STATE_DOWN ?
+                                         BAL_UTIL_OPER_IF_DOWN : BAL_UTIL_OPER_IF_UP));
+
+            if (ret)
+            {
+                BCM_LOG(ERROR, log_id_access_terminal,
+                        "sw_util_interface_set(() failed. rc=%s\n", bcmos_strerror(ret));
+
+            }
+        }
+        else
+        {
+            /* Error */
+            BCM_LOG(ERROR, log_id_interface,
+                    "Bad interface index: interface type/id (%s/%d) (status: %s)\n",
+                    interface_type_str_get(ind_msg->obj_key.if_key.intf_type),
+                    ind_msg->obj_key.if_key.intf_id,
+                    bcmos_strerror(ind_msg->status));
+        }
+
+
+
+        if(BCM_ERR_OK == ret)
+        {
+            BCM_LOG(DEBUG, log_id_interface,
+                    "Setting interface (%d) to %s\n",
+                    interface_index,
+                    (BCMBAL_STATE_UP == p_interface_inst->api_req_int_obj_info.data.admin_state) ?
+                    "UP" : "DOWN");
+
+
+            /*
+             * Interface SET function succeeded, so copy the API request into the
+             * current interface object.
+             */
+             
+			bcmbal_interface_object_overlay_w_src_priority(&(p_interface_inst->current_int_obj_info),&(p_interface_inst->api_req_int_obj_info));
+
+            /* Set the status of the current interface that we just configured to the requested state (UP or DOWN) */
+            BCMBAL_CFG_PROP_SET(&p_interface_inst->current_int_obj_info,
+                                interface,
+                                oper_status,
+                                bcmbal_get_intf_oper_status_from_admin_state(p_interface_inst->api_req_int_obj_info.data.admin_state));
+
+        }
+        else
+        {
+            /* Error */
+            BCM_LOG(ERROR, log_id_interface,
+                    "Bad response from switch: Interface type/Id: %s/%d (status:%s) \n",
+                    interface_type_str_get(ind_msg->obj_key.if_key.intf_type),
+                    ind_msg->obj_key.if_key.intf_id,
+                    bcmos_strerror(ind_msg->status));
+
+        }
+    }
+    else
+    {
+        /* Error */
+        BCM_LOG(ERROR, log_id_interface,
+                "Bad interface indication from MAC (status:%s)\n",
+                bcmos_strerror(ind_msg->status));
+    }
+
+    BCMBAL_OBJ_IN_PROGRESS_SET(&(p_interface_inst->current_int_obj_info), BCMOS_FALSE);
+
+    /*
+     * Send the indication back to the BAL public API here
+     */
+    mgmt_msg_send_balapi_ind(ret,
+                             (void *)&(p_interface_inst->current_int_obj_info.hdr),
+                             log_id_interface);
+
+    return ret;
+
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Access terminal FSM function which is executed when an error
+ *        is encountered during FSM processing.
+ *
+ * @param p_acc_term_inst  Pointer to an access terminal instance
+ * @param msg              Pointer to a BAL message (MAY BE NULL!)
+ * @param p_event          Pointer to an access terminal event structure
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+static bcmos_errno acc_term_fsm_state_err(acc_term_inst *p_acc_term_inst,
+                                          void *msg,
+                                          acc_term_fsm_event *p_event)
+{
+    bcmos_errno ret = BCM_ERR_INVALID_OP;
+
+    BCM_LOG(ERROR, log_id_access_terminal,
+            "Error encountered processing FSM - BAD EVENT   event:%s, state:%s\n",
+            acc_term_event_name_get(p_event->event_type),
+            acc_term_state_name_get(p_acc_term_inst->fsm_state));
+
+    return ret;
+}
+
+
+/*****************************************************************************/
+/**
+ * @brief A function called by the core worker thread to process an
+ *        access-terminal object message (SET, GET, CLEAR, STATS) received
+ *        from the BAL Public API.
+ *
+ * @param msg_payload      Pointer to a BAL message received from the
+ *                         BAL Public API.
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+bcmos_errno process_access_terminal_object(void *msg_payload)
+{
+
+    bcmos_errno ret = BCM_ERR_OK, rsp_ret = BCM_ERR_OK;
+    acc_term_inst *p_access_terminal_inst;
+    acc_term_fsm_event acc_term_event;
+    bcmbal_obj_msg_type oper_type;
+
+    /* Parameter checks */
+    BUG_ON(NULL == msg_payload);
+
+    BCM_LOG(DEBUG, log_id_access_terminal,
+            "Processing an access-terminal object\n");
+
+    do
+    {
+        /*
+         * Find or create the specified access terminal instance
+         */
+        p_access_terminal_inst = access_terminal_get();
+
+        oper_type = ((bcmbal_access_terminal_cfg *)msg_payload)->hdr.hdr.type;
+
+        /* If the state of the access-terminal is in flux, then reject the SET request */
+        if(BCMBAL_OBJ_MSG_TYPE_SET == oper_type &&
+           BCMOS_TRUE == BCMBAL_OBJ_IN_PROGRESS_GET(&(p_access_terminal_inst->current_acc_term_obj_info)))
+        {
+              BCM_LOG(ERROR, log_id_access_terminal,
+                        "The access-terminal is in-progress, SETs are not allowed\n");
+              ret = BCM_ERR_IN_PROGRESS;
+            break;
+        }
+
+        /* Copy the object in the message into local storage */
+        memcpy(&p_access_terminal_inst->api_req_acc_term_obj_info,
+               msg_payload,
+               sizeof(p_access_terminal_inst->api_req_acc_term_obj_info));
+
+        BCM_LOG(DEBUG, log_id_access_terminal,
+                "access_terminal admin state is: %s\n",
+                (BCMBAL_STATE_UP == p_access_terminal_inst->api_req_acc_term_obj_info.data.admin_state) ?
+                "UP" : "DOWN");
+
+        /*
+         * A message pointer is always passed inside the event structure.
+         */
+        acc_term_event.msg = msg_payload;
+
+        /* SET or GET or ...? */
+        switch (oper_type)
+        {
+            case (BCMBAL_OBJ_MSG_TYPE_SET):
+            {
+
+                BCM_LOG(DEBUG, log_id_access_terminal,
+                        "Processing a access-terminal SET REQ mgmt message\n");
+
+                /*
+                 * Check if the mandatory access-terminal attributes have been set
+                 */
+
+                do
+                {
+
+                    /* The admin state attribute is mandatory */
+                    if(BCMOS_FALSE == BCMBAL_CFG_PROP_IS_SET(&p_access_terminal_inst->api_req_acc_term_obj_info,
+                                                         access_terminal,
+                                                         admin_state))
+                    {
+                        ret = BCM_ERR_MANDATORY_PARM_IS_MISSING;
+                        break;
+                    }
+
+                    /*set iwf_mode from the global config parameters*/
+                    BCMBAL_CFG_PROP_SET(&p_access_terminal_inst->api_req_acc_term_obj_info,
+                                    access_terminal,
+                                    iwf_mode,
+                                    bcmbal_config_get()->iwf_mode);
+
+                    /*
+                     * Perform the validation check(s) that the utils require
+                     */
+                    if(BCM_ERR_OK !=
+                       (ret = mac_util_access_terminal_info_validate(&p_access_terminal_inst->api_req_acc_term_obj_info)))
+                    {
+                        break;
+                    }
+                }
+                while(0);
+
+                /* We respond to the BAL public API backend with a result. We always
+                 * send a complete msg_payload back to the API, but the data portion
+                 * of the object is only relevant when a GET or GET-STATS has been requested.
+                 */
+                rsp_ret = mgmt_msg_send_balapi_rsp(ret,
+                                                   msg_payload,
+                                                   oper_type,
+                                                   log_id_access_terminal);
+
+                if(BCM_ERR_OK != rsp_ret || BCM_ERR_OK != ret)
+                {
+                    /* the mgmt_msg_send_balapi_rsp function above logs any errors that occur there */
+                    ret = (BCM_ERR_OK != rsp_ret) ? rsp_ret : ret;
+                    break;
+                }
+
+                /* Reflect the admin state of the access-terminal according to the commanded admin state */
+                BCMBAL_CFG_PROP_SET(&p_access_terminal_inst->current_acc_term_obj_info,
+                                access_terminal,
+                                admin_state,
+                                p_access_terminal_inst->api_req_acc_term_obj_info.data.admin_state);
+
+                if(BCMBAL_STATE_UP == p_access_terminal_inst->api_req_acc_term_obj_info.data.admin_state)
+                {
+
+                    acc_term_event.event_type = ACC_TERM_FSM_EVENT_TYPE_ADMIN_UP;
+                }
+                else
+                {
+                    acc_term_event.event_type = ACC_TERM_FSM_EVENT_TYPE_ADMIN_DN;
+                }
+
+                /*
+                 * Run the access terminal FSM to process this event
+                 */
+                ret = access_terminal_fsm_exec(p_access_terminal_inst, &acc_term_event);
+                break;
+
+            }
+            case (BCMBAL_OBJ_MSG_TYPE_GET):
+            {
+
+                BCM_LOG(DEBUG, log_id_access_terminal,
+                        "Processing a access-terminal GET REQ mgmt message\n");
+
+                p_access_terminal_inst->current_acc_term_obj_info.hdr.hdr.comm_hdr = ((bcmbal_obj *)msg_payload)->comm_hdr;
+                *((bcmbal_access_terminal_cfg *)msg_payload) = p_access_terminal_inst->current_acc_term_obj_info;
+
+                mgmt_msg_send_balapi_rsp(ret,
+                                         msg_payload,
+                                         oper_type,
+                                         log_id_access_terminal);
+                break;
+
+            }
+            default:
+            {
+                BCM_LOG(ERROR, log_id_access_terminal,
+                        "Unsupported operation on access-terminal object (%d)\n",
+                        bcmbal_msg_id_oper_get(msg_payload));
+
+                ret = BCM_ERR_NOT_SUPPORTED;
+
+                /* We respond to the BAL public API backend with a result. We always
+                 * send a complete msg_payload back to the API, but the data portion
+                 * of the object is only relevant when a GET or GET-STATS has been requested.
+                 */
+                mgmt_msg_send_balapi_rsp(ret, msg_payload, oper_type, log_id_access_terminal);
+
+                break;
+            }
+        }
+    }while(0);
+
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief A function to retrieve an access-terminal instance
+ *
+ * @returns acc_term_inst_t*  A pointer to the found access-terminal instance,
+ *                            or NULL if one is not found.
+ *****************************************************************************/
+static acc_term_inst *access_terminal_get(void)
+{
+    acc_term_inst *p_acc_term = (acc_term_inst *)NULL;
+
+    p_acc_term = &single_access_terminal_instance;
+
+    return p_acc_term;
+}
+
+/*****************************************************************************/
+/**
+ * @brief A function to retrieve the status of the access-terminal
+ *
+ *
+ * @returns bcmbal_status
+ *****************************************************************************/
+bcmbal_status acc_term_status_get(void)
+{
+    acc_term_inst *p_acc_term_inst;
+
+    p_acc_term_inst = access_terminal_get();
+
+    return p_acc_term_inst->current_acc_term_obj_info.data.oper_status;
+
+}
+
+static bcmos_errno interface_tm_sched_set(bcmbal_interface_cfg *p_interface_info)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    tm_sched_inst *p_tm_sched_inst;
+    bcmbal_tm_sched_key tm_key;
+    switch(p_interface_info->key.intf_type)
+    {
+        case BCMBAL_INTF_TYPE_PON:
+        {
+            /*for active pon interface:
+                       ds_tm should be define, - if it is set, validate sched exist and match direction (ds)
+                    if not set - will create auto created tm            */
+            if(BCMBAL_CFG_PROP_IS_SET(p_interface_info,interface,ds_tm))
+            {
+                tm_key.dir = BCMBAL_TM_SCHED_DIR_DS;
+                tm_key.id = p_interface_info->data.ds_tm;
+                p_tm_sched_inst = tm_sched_inst_get(tm_key, TM_SCHED_FLAG_ACTIVE);
+                if (NULL == p_tm_sched_inst)
+                {
+                    BCM_LOG(ERROR, log_id_interface, "there is no ds tm sched with id %d", tm_key.id);
+                    ret = BCM_ERR_NOENT;
+                    break;
+                }
+				ret = bcmbal_tm_sched_set_interface_owner(p_interface_info->key, p_tm_sched_inst);
+				if(BCM_ERR_OK != ret)
+				{
+					BCM_LOG(ERROR, log_id_interface, "could not set interface %d as owner of tm sched %d",
+                           p_interface_info->key.intf_id, tm_key.id);
+					break;
+				}
+            }
+            else /*auto created sched was removed and no other default sched was set*/
+            {
+                BCM_LOG(ERROR, log_id_interface, "default tm node must be set! ");
+                ret = BCM_ERR_MANDATORY_PARM_IS_MISSING;
+                break; 				
+            }			
+			/* us_tm is optional - if it is set, validate sched exist and match direction (us)*/
+		    if(BCMBAL_CFG_PROP_IS_SET(p_interface_info, interface, us_tm))
+            {
+                tm_key.dir = BCMBAL_TM_SCHED_DIR_US;
+                tm_key.id = p_interface_info->data.us_tm;
+                p_tm_sched_inst = tm_sched_inst_get(tm_key, TM_SCHED_FLAG_ACTIVE);
+                if (NULL == p_tm_sched_inst)
+                {
+                    BCM_LOG(ERROR, log_id_interface, "there is no us tm sched with id %d", tm_key.id);
+                    ret = BCM_ERR_NOENT;
+                    break;
+                }
+				ret = bcmbal_tm_sched_set_interface_owner(p_interface_info->key, p_tm_sched_inst);
+				if(BCM_ERR_OK != ret)
+				{
+					BCM_LOG(ERROR, log_id_interface, "could not set interface %d as owner of tm sched %d",
+                           p_interface_info->key.intf_id, tm_key.id);
+					break;
+				}
+            }
+
+        }
+        break;
+
+        case BCMBAL_INTF_TYPE_NNI:
+        {
+            /*for active nni interface:
+            us_tm should be define, -
+            if it is set, validate sched exist and match direction (us)
+            if not set - will create auto created tm
+            */
+            if(BCMBAL_CFG_PROP_IS_SET(p_interface_info, interface, us_tm))
+            {
+                tm_key.dir = BCMBAL_TM_SCHED_DIR_US;
+                tm_key.id = p_interface_info->data.us_tm;
+                p_tm_sched_inst = tm_sched_inst_get(tm_key, TM_SCHED_FLAG_ACTIVE);
+                if (NULL == p_tm_sched_inst)
+                {
+                    BCM_LOG(ERROR, log_id_interface, "there is no us tm sched with id %d", tm_key.id);
+                    ret = BCM_ERR_NOENT;
+                    break;
+                }
+
+				ret = bcmbal_tm_sched_set_interface_owner(p_interface_info->key, p_tm_sched_inst);
+				if(BCM_ERR_OK != ret)
+				{
+					BCM_LOG(ERROR, log_id_interface, "could not set interface %d as owner of tm sched %d",
+                           p_interface_info->key.intf_id, tm_key.id);
+					break;
+				}
+            }
+            else /*auto created sched was removed and no other default sched was set*/
+            {
+                BCM_LOG(ERROR, log_id_interface, "default tm node must be set! ");
+                break;	
+            }			
+ 			/* ds_tm is optional - if it is set, validate sched exist and match direction (ds)*/
+            if(BCMBAL_CFG_PROP_IS_SET(p_interface_info, interface, ds_tm))
+            {
+                tm_key.dir = BCMBAL_TM_SCHED_DIR_DS;
+                tm_key.id = p_interface_info->data.ds_tm;
+                p_tm_sched_inst = tm_sched_inst_get(tm_key, TM_SCHED_FLAG_ACTIVE);
+                if (NULL == p_tm_sched_inst)
+                {
+                    BCM_LOG(ERROR, log_id_interface, "there is no ds tm sched with id %d", tm_key.id);
+                    ret = BCM_ERR_NOENT;
+                    break;
+                }
+
+                ret = bcmbal_tm_sched_set_interface_owner(p_interface_info->key, p_tm_sched_inst);
+                if(BCM_ERR_OK != ret)
+                {
+                    BCM_LOG(ERROR, log_id_interface, "could not set interface %d as owner of tm sched %d",
+                           p_interface_info->key.intf_id, tm_key.id);
+                    break;
+				}
+            }
+        }
+        break;
+
+        default:
+            BCM_LOG(ERROR, log_id_interface, "Invalid intf type (%d) in interface key\n",
+                   p_interface_info->key.intf_type);
+            ret = BCM_ERR_PARM;
+    }
+    return ret;
+}
+
+bcmos_errno interface_tm_sched_unset(bcmbal_interface_key intf_key, bcmbal_tm_sched_key sched_key)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    acc_term_interface *p_acc_term_interface =  bcmbal_interface_get(intf_key);
+    do
+    {
+        if(NULL == p_acc_term_interface)
+        {
+            BCM_LOG(ERROR, log_id_interface, "no such interface (id = %d dir = %s ) \n",
+                intf_key.intf_id, interface_type_str_get(intf_key.intf_type));
+            ret = BCM_ERR_INTERNAL;
+		    break;
+        }
+        if (BCMBAL_TM_SCHED_DIR_US == sched_key.dir)
+        {
+            BCMBAL_CFG_PROP_CLEAR(&(p_acc_term_interface->current_int_obj_info), interface, us_tm);
+        }
+        else
+        {
+            BCMBAL_CFG_PROP_CLEAR(&(p_acc_term_interface->current_int_obj_info), interface, ds_tm);
+        }
+    }while(0);
+    return ret;
+}
+
+
+/*****************************************************************************/
+/**
+ * @brief A function to process an interface object message
+ *        (SET, GET, CLEAR, STATS) received from the BAL Public API.
+ *
+ * @param msg_payload      Pointer to a BAL message received from the
+ *                         BAL Public API.
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+bcmos_errno process_interface_object(void *msg_payload)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+
+    bcmbal_interface_cfg *p_intf_cfg = (bcmbal_interface_cfg *)msg_payload;
+    bcmbal_interface_key *p_intf_key;
+    acc_term_inst *p_access_terminal_inst;
+
+    bcmbal_interface_cfg *p_api_req_interface_info;
+    bcmbal_interface_cfg *p_current_interface_info;
+    uint32_t interface_index = INVALID_INTERFACE_INDEX;
+    bcmbal_obj_msg_type oper_type;
+
+    BCM_LOG(DEBUG, log_id_interface,
+            "Processing an interface object\n");
+
+    do
+    {
+        do
+        {
+            oper_type = p_intf_cfg->hdr.hdr.type;
+
+            /*
+             * See if the access terminal is active
+             */
+            p_access_terminal_inst = access_terminal_get();
+
+            if(NULL == p_access_terminal_inst)
+            {
+                BCM_LOG(ERROR, log_id_access_terminal,
+                        "the access-terminal is not active\n");
+
+                ret = BCM_ERR_NOENT;
+                break;
+            }
+
+            /* If the state of the access-terminal is in flux, then reject the SET request */
+            if(BCMBAL_OBJ_MSG_TYPE_SET == oper_type &&
+               BCMOS_TRUE == BCMBAL_OBJ_IN_PROGRESS_GET(&(p_access_terminal_inst->current_acc_term_obj_info)))
+            {
+                BCM_LOG(ERROR, log_id_access_terminal,
+                        "The access-terminal is in-progress, SETs to an interface are not allowed\n");
+
+                ret = BCM_ERR_IN_PROGRESS;
+                break;
+            }
+
+            /*
+             * Get the interface key from the message
+             */
+            p_intf_key = &p_intf_cfg->key;
+
+            if (p_intf_key->intf_type == BCMBAL_INTF_TYPE_PON)
+            {
+                if(p_intf_key->intf_id > NUM_SUPPORTED_SUBSCRIBER_INTERFACES)
+                {
+                    BCM_LOG(ERROR, log_id_interface,
+                            "out of range value (%d) detected in interface key for PON\n", p_intf_key->intf_id);
+
+                    ret = BCM_ERR_RANGE;
+                    break;
+                }
+            }
+            /** @todo check the lower limit also */
+            else if (p_intf_key->intf_type == BCMBAL_INTF_TYPE_NNI)
+            {
+                if( BCMOS_FALSE == bcm_topo_nni_is_valid(p_intf_key->intf_id))
+                {
+                    BCM_LOG(ERROR, log_id_interface,
+                            "out of range value (%d) detected in interface key for NNI\n", p_intf_key->intf_id);
+
+                    ret = BCM_ERR_RANGE;
+                    break;
+                }
+            }
+            else
+            {
+                BCM_LOG(ERROR, log_id_interface,
+                        "Invalid intf type (%d) in interface key\n", p_intf_key->intf_type);
+
+                ret = BCM_ERR_PARM;
+                break;
+            }
+
+            /*
+             * Don't accept interface object references when the associated access-terminal is down
+             *
+             * Interfaces are not even instantiated internally until the access-terminal object to which
+             * they belong is instantiated.
+             */
+            if(BCMBAL_STATE_DOWN == p_access_terminal_inst->current_acc_term_obj_info.data.admin_state)
+            {
+                BCM_LOG(INFO, log_id_interface,
+                        "access terminal admin-state is DOWN\n");
+
+                ret = BCM_ERR_INVALID_OP;
+                break;
+            }
+
+            /* Get the index to the interface array from port id/type */
+            interface_index = bcmbal_port_type_and_id_to_interface_index (p_intf_key->intf_type, p_intf_key->intf_id);
+            if (interface_index >= INVALID_INTERFACE_INDEX)
+            {
+                BCM_LOG(ERROR, log_id_access_terminal,
+                        "INVALID port type/id (%s/%d) to interface index (%d) for access terminal\n",
+                        interface_type_str_get(p_intf_key->intf_type), p_intf_key->intf_id, interface_index);
+
+                ret = BCM_ERR_PARM;
+                break;
+            }
+
+            /*
+             * This is a pointer to the "API interface" structure
+             */
+            p_api_req_interface_info =
+                &(p_access_terminal_inst->intf_info.interface[interface_index].api_req_int_obj_info);
+
+            /*
+             * This is a pointer to the "current interface" structure
+             */
+            p_current_interface_info =
+                &(p_access_terminal_inst->intf_info.interface[interface_index].current_int_obj_info);
+
+            /* If the state of the interface is in flux, then reject the SET request */
+            if(BCMBAL_OBJ_MSG_TYPE_SET == oper_type &&
+               (BCMOS_TRUE == BCMBAL_OBJ_IN_PROGRESS_GET(p_current_interface_info)))
+            {
+                BCM_LOG(ERROR, log_id_access_terminal,
+                        "The interface is in-progress, SETs are not allowed\n");
+                ret = BCM_ERR_IN_PROGRESS;
+                break;
+            }
+
+        }while(0);
+
+        if(BCM_ERR_OK != ret)
+        {
+            /* We respond to the BAL public API backend with a result. We always
+             * send a complete msg_payload back to the API, but the data portion
+             * of the object is only relevant when a GET or GET-STATS has been requested.
+             */
+            mgmt_msg_send_balapi_rsp(ret, msg_payload, oper_type, log_id_interface);
+            break;
+        }
+
+        /*
+         * Fill in the interface info SET data structure
+         */
+        *p_api_req_interface_info = *p_intf_cfg;
+
+        BCM_LOG(DEBUG, log_id_interface,
+                " interface object state from API message is: %d, intf_type: %s intf_id: %d\n",
+                p_api_req_interface_info->data.admin_state,
+                interface_type_str_get(p_api_req_interface_info->key.intf_type),
+                p_api_req_interface_info->key.intf_id);
+
+
+        /* SET or GET or ...? */
+        switch (oper_type)
+        {
+
+            case (BCMBAL_OBJ_MSG_TYPE_SET):
+            {
+                BCM_LOG(DEBUG, log_id_interface,
+                        "Processing an interface SET REQ mgmt message\n");
+                /*if sched is already set, can not change sched setting using set command, should first delete current sched*/
+                if(BCMBAL_CFG_PROP_IS_SET(p_current_interface_info,interface,ds_tm)
+                   && BCMBAL_CFG_PROP_IS_SET(p_api_req_interface_info,interface,ds_tm))
+                {
+                    BCM_LOG(ERROR, log_id_interface,
+                            "ds_tm %d is already set at interface, it should be first cleared in order to be replaced \n",
+                            p_current_interface_info->data.ds_tm);
+					ret = BCM_ERR_ALREADY;
+					break;
+                }
+                if(BCMBAL_CFG_PROP_IS_SET(p_current_interface_info,interface,us_tm)
+                   && BCMBAL_CFG_PROP_IS_SET(p_api_req_interface_info,interface,us_tm))
+                {
+                    BCM_LOG(ERROR, log_id_interface,
+                            "us_tm %d is already set at interface, it should be first cleared in order to be replaced \n",
+                            p_current_interface_info->data.us_tm);
+                    ret = BCM_ERR_ALREADY;
+                    break;
+                }	
+                /* We respond to the BAL public API backend with a result. We always
+                 * send a complete msg_payload back to the API, but the data portion
+                 * of the object is only relevant when a GET or GET-STATS has been requested.
+                 */
+                ret = mgmt_msg_send_balapi_rsp(ret, msg_payload, oper_type, log_id_interface);
+
+                if(BCM_ERR_OK != ret)
+                {
+                    break;
+                }
+
+                /* If this interface is already up, then just return OK */
+                if(BCMBAL_STATE_UP == p_api_req_interface_info->data.admin_state)
+                {
+                    if(BCMBAL_STATUS_UP == p_current_interface_info->data.oper_status)
+                    {
+                        BCM_LOG(DEBUG, log_id_interface,
+                                "=====> Received an interface UP for an already UP interface, returning OK\n");
+                        break;
+                    }
+
+                    /*validate and set the interface' tm sched*/
+                    bcmbal_interface_object_overlay_w_dst_priority(p_api_req_interface_info,p_current_interface_info);
+                    ret = interface_tm_sched_set(p_api_req_interface_info);					
+                    if(BCM_ERR_OK != ret)
+                    {
+                        BCM_LOG(ERROR, log_id_interface,"Could not set the interface tm sched\n");
+                        break;
+                    }
+                    interface_admin_up_start(&(p_access_terminal_inst->intf_info.interface[interface_index]),
+                                                msg_payload);
+                }
+                else
+                {
+                    if(BCMBAL_STATUS_DOWN == p_current_interface_info->data.oper_status)
+                    {
+                        BCM_LOG(DEBUG, log_id_interface,
+                                "=====> Received an interface DOWN for an already DOWN interface, returning OK\n");
+
+                        break;
+                    }
+
+                    interface_admin_dn_start(&(p_access_terminal_inst->intf_info.interface[interface_index]),
+                                             msg_payload);
+
+                }
+
+                break;
+
+            }
+            case (BCMBAL_OBJ_MSG_TYPE_GET):
+            {
+
+                BCM_LOG(DEBUG, log_id_interface,
+                        "Processing a interface GET REQ mgmt message\n");
+
+                /* We respond to the BAL public API backend with a result. We always
+                 * send a complete msg_payload back to the API, but the data portion
+                 * of the object is only relevant when a GET or GET-STATS has been requested.
+                 */
+                p_current_interface_info->hdr.hdr.comm_hdr = ((bcmbal_obj *)msg_payload)->comm_hdr;
+
+                bcmbal_sub_id_list_u16 sub_term_id_list = {};
+
+                BCMBAL_CFG_PROP_CLEAR(p_current_interface_info,
+                                      interface,
+                                      sub_term_id_list);
+
+                /* If the user requested the list of sub_term_ids for this interface,
+                 * and this is a PON interface, then return the list.
+                 */
+                if(BCMBAL_CFG_PROP_IS_SET(p_api_req_interface_info,
+                                          interface,
+                                          sub_term_id_list))
+                {
+                    if(BCMBAL_INTF_TYPE_PON == p_current_interface_info->key.intf_type)
+                    {
+
+                        sub_term_id_list_fill(interface_index, &sub_term_id_list);
+
+                        /* NOTE: The returned list may be empty */
+                        BCMBAL_CFG_PROP_SET(p_current_interface_info,
+                                            interface,
+                                            sub_term_id_list,
+                                            sub_term_id_list);
+
+                    }
+                }
+
+                *((bcmbal_interface_cfg *)msg_payload) = *p_current_interface_info;
+
+                mgmt_msg_send_balapi_rsp(ret, msg_payload, oper_type, log_id_interface);
+
+                /* Free the temporary list if it was used */
+                if(sub_term_id_list.val)
+                {
+                    bcmos_free(sub_term_id_list.val);
+                }
+
+                break;
+            }
+            default:
+            {
+                BCM_LOG(ERROR, log_id_interface,
+                        "Unsupported operation on interface object (%d)\n",
+                        bcmbal_msg_id_oper_get(msg_payload));
+
+                ret = BCM_ERR_NOT_SUPPORTED;
+
+                /* We respond to the BAL public API backend with a result. We always
+                 * send a complete msg_payload back to the API, but the data portion
+                 * of the object is only relevant when a GET or GET-STATS has been requested.
+                 */
+                mgmt_msg_send_balapi_rsp(ret, msg_payload, oper_type, log_id_interface);
+                break;
+            }
+
+        }
+
+    }while (0);
+
+    return ret;
+}
+
+
+/*****************************************************************************/
+/**
+ * @brief A function called to initialize a single access-terminal instance.
+ *        NOTE: This is called once on startup and NOT for each FSM instance.
+ *
+ * @param p_acc_term_inst  Pointer to an access terminal instance
+ *
+ * @returns void
+ *****************************************************************************/
+static void initialize_access_terminal_instance_config(acc_term_inst *p_acc_term_inst)
+{
+    int ii;
+    int intf_id;
+    bcmos_errno ret;
+	
+    BUG_ON(NULL == p_acc_term_inst);
+
+    p_acc_term_inst->current_acc_term_obj_info.key.access_term_id = 0;
+
+    BCMBAL_CFG_INIT(&p_acc_term_inst->current_acc_term_obj_info,
+                    access_terminal,
+                    p_acc_term_inst->current_acc_term_obj_info.key);
+
+    BCMBAL_CFG_PROP_SET(&p_acc_term_inst->current_acc_term_obj_info,
+                        access_terminal,
+                        admin_state,
+                        BCMBAL_STATE_DOWN);
+
+    BCMBAL_CFG_PROP_SET(&p_acc_term_inst->current_acc_term_obj_info,
+                        access_terminal,
+                        oper_status,
+                        BCMBAL_STATUS_DOWN);
+
+    BCMBAL_PROP_SET_PRESENT(&p_acc_term_inst->current_acc_term_obj_info,
+                            access_terminal,
+                            _cfg,
+                            iwf_mode);
+
+    BCMBAL_OBJ_IN_PROGRESS_SET(&(p_acc_term_inst->current_acc_term_obj_info), BCMOS_FALSE);
+
+    {
+        bcmbal_interface_key key;
+
+        intf_id = 0;    /* reset the port id to the starting id value for the PON interfaces */
+
+        key.intf_type = BCMBAL_INTF_TYPE_PON;
+
+        for(ii=0; ii<NUM_SUPPORTED_SUBSCRIBER_INTERFACES; ii++)
+        {
+
+            key.intf_id = intf_id;
+
+            p_acc_term_inst->intf_info.interface[ii].num_sub_terms_on_int = 0;
+            TAILQ_INIT(&p_acc_term_inst->intf_info.interface[ii].sub_term_id_list);
+
+            BCMBAL_CFG_INIT(&p_acc_term_inst->intf_info.interface[ii].current_int_obj_info,
+                            interface,
+                            key);
+
+            BCMBAL_CFG_PROP_SET(&p_acc_term_inst->intf_info.interface[ii].current_int_obj_info,
+                            interface,
+                            admin_state,
+                            BCMBAL_STATE_DOWN);
+
+            BCMBAL_CFG_PROP_SET(&p_acc_term_inst->intf_info.interface[ii].current_int_obj_info,
+                            interface,
+                            oper_status,
+                            BCMBAL_STATUS_DOWN);
+			
+            ret = bcmbal_tm_sched_interface_tm_auto_create(&p_acc_term_inst->intf_info.interface[ii].current_int_obj_info);
+            if(BCM_ERR_OK != ret)
+            {
+                BCM_LOG(ERROR, log_id_interface, "could not set an auto - create a tm sched for pon if %d", intf_id);
+				break;
+            } 
+
+            BCMBAL_OBJ_IN_PROGRESS_SET(&(p_acc_term_inst->intf_info.interface[ii].current_int_obj_info), BCMOS_FALSE);
+
+            intf_id++;
+        }
+
+        intf_id = 0;    /* reset the port id to the starting id value for the NNI interfaces */
+
+        key.intf_type = BCMBAL_INTF_TYPE_NNI;
+
+        for(ii=NUM_SUPPORTED_SUBSCRIBER_INTERFACES; ii<(NUM_SUPPORTED_SUBSCRIBER_INTERFACES + bal_config_params.num_nni_ports); ii++)
+        {
+
+            key.intf_id = intf_id;
+
+            BCMBAL_CFG_INIT(&p_acc_term_inst->intf_info.interface[ii].current_int_obj_info,
+                            interface,
+                            key);
+
+            BCMBAL_CFG_PROP_SET(&p_acc_term_inst->intf_info.interface[ii].current_int_obj_info,
+                            interface,
+                            admin_state,
+                            BCMBAL_STATE_UP);
+
+            BCMBAL_CFG_PROP_SET(&p_acc_term_inst->intf_info.interface[ii].current_int_obj_info,
+                            interface,
+                            oper_status,
+                            BCMBAL_STATUS_UP);
+
+			
+            ret = bcmbal_tm_sched_interface_tm_auto_create(&p_acc_term_inst->intf_info.interface[ii].current_int_obj_info);
+            if(BCM_ERR_OK != ret)
+            {
+                BCM_LOG(ERROR, log_id_interface, "could not set an auto - create a tm sched for nni if %d", intf_id); 
+                break;
+            }
+
+            BCMBAL_OBJ_IN_PROGRESS_SET(&(p_acc_term_inst->intf_info.interface[ii].current_int_obj_info), BCMOS_FALSE);
+
+            intf_id++;
+        }
+    }
+}
+
+bcmos_errno bcmbal_interface_sub_term_list_entry_add(bcmbal_subscriber_terminal_key sub_term_key)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    acc_term_inst *p_access_terminal_inst;
+    sub_term_id_entry *current_entry;
+    acc_term_interface *p_interface;
+
+    p_access_terminal_inst = access_terminal_get();
+
+    do
+    {
+        /*
+         * If the specified access terminal is not active then it's interfaces are down.
+         */
+        if(NULL == p_access_terminal_inst)
+        {
+            BCM_LOG(ERROR, log_id_access_terminal,
+                    "no such ACTIVE access terminal\n");
+            ret = BCM_ERR_STATE;
+            break;
+        }
+
+        p_interface = &p_access_terminal_inst->intf_info.interface[sub_term_key.intf_id];
+
+        /* Check if the id is already on the list before adding it */
+        TAILQ_FOREACH(current_entry,
+                      &p_interface->sub_term_id_list,
+                      next)
+        {
+            if(current_entry->sub_term_id == sub_term_key.sub_term_id)
+            {
+                return BCM_ERR_ALREADY;
+            }
+        }
+
+        /* Get a new entry and configure it */
+        current_entry = bcmos_calloc(sizeof(sub_term_id_entry));
+
+        if (NULL == current_entry)
+        {
+            BCM_LOG(ERROR, log_id_access_terminal,
+                    "No memory available\n");
+            ret = BCM_ERR_NOMEM;
+            break;
+        }
+
+        current_entry->sub_term_id = sub_term_key.sub_term_id;
+
+        BCM_LOG(INFO, log_id_access_terminal,
+                "adding sub_term id %u to interface %u\n", sub_term_key.sub_term_id, sub_term_key.intf_id);
+
+        /* Save the entry on the list of subscriber-terminal ids on this interface */
+        TAILQ_INSERT_TAIL(&p_interface->sub_term_id_list,
+                          current_entry, next);
+
+        (p_interface->num_sub_terms_on_int)++;
+
+    } while (0);
+
+    return ret;
+}
+
+bcmos_errno bcmbal_interface_sub_term_list_entry_remove(bcmbal_subscriber_terminal_key sub_term_key)
+{
+    bcmos_errno ret = BCM_ERR_NOENT;
+    acc_term_inst *p_access_terminal_inst;
+    acc_term_interface *p_interface;
+    sub_term_id_entry *current_entry, *p_temp_entry;
+
+    do
+    {
+        p_access_terminal_inst = access_terminal_get();
+
+        /*
+         * If the specified access terminal is not active then it's interfaces are down.
+         */
+        if(NULL == p_access_terminal_inst)
+        {
+            BCM_LOG(ERROR, log_id_access_terminal,
+                    "no such ACTIVE access terminal\n");
+            ret = BCM_ERR_STATE;
+            break;
+        }
+
+        p_interface = &p_access_terminal_inst->intf_info.interface[sub_term_key.intf_id];
+
+        /* Check if the id is on the list */
+        TAILQ_FOREACH_SAFE(current_entry,
+                           &p_interface->sub_term_id_list,
+                           next,
+                           p_temp_entry)
+        {
+            if(current_entry->sub_term_id == sub_term_key.sub_term_id)
+            {
+                /* Remove it from the list of subscriber-terminal ids on this interface */
+                TAILQ_REMOVE(&p_interface->sub_term_id_list,
+                             current_entry, next);
+
+                bcmos_free(current_entry);
+
+                (p_interface->num_sub_terms_on_int)--;
+
+                ret = BCM_ERR_OK;
+                break;
+
+            }
+        }
+    } while (0);
+
+    return ret;
+}
+
+static bcmos_errno sub_term_id_list_fill(uint32_t interface_index,
+                                         bcmbal_sub_id_list_u16 *sub_term_id_list)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    acc_term_inst *p_acc_term_inst;
+    sub_term_id_entry *current_entry = NULL;
+    int ii = 0;
+
+    do
+    {
+        /*
+         * See if the access-terminal is active
+         */
+        p_acc_term_inst = access_terminal_get();
+
+        /*
+         * If the specified access terminal is not active then it's interfaces are down.
+         */
+        if(NULL == p_acc_term_inst)
+        {
+            BCM_LOG(ERROR, log_id_access_terminal,
+                    "no such ACTIVE access terminal\n");
+            ret = BCM_ERR_NOENT;
+            break;
+        }
+
+        /* Traverse the list of sub_term_ids recorded and fill in the list to be returned */
+        sub_term_id_list->len = p_acc_term_inst->intf_info.interface[interface_index].num_sub_terms_on_int;
+        sub_term_id_list->val = bcmos_calloc(sizeof(bcmbal_sub_id) * sub_term_id_list->len);
+
+        if (NULL == sub_term_id_list->val)
+        {
+            BCM_LOG(ERROR, log_id_access_terminal,
+                    "No memory available\n");
+            ret = BCM_ERR_NOMEM;
+            break;
+        }
+
+       TAILQ_FOREACH(current_entry,
+                      &p_acc_term_inst->intf_info.interface[interface_index].sub_term_id_list,
+                      next)
+        {
+            BCM_LOG(DEBUG, log_id_access_terminal,
+                    "adding sub_term_id %u to response at array location %u\n",
+                    current_entry->sub_term_id,
+                    ii);
+            sub_term_id_list->val[ii++] = current_entry->sub_term_id;
+        }
+
+    } while (0);
+
+    return ret;
+}
+
+bcmos_errno bcmbal_interface_tm_get(bcmbal_interface_key key, bcmbal_tm_sched_id *id)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    acc_term_inst *p_acc_term_inst;
+    uint32_t interface_index = INVALID_INTERFACE_INDEX;
+
+    do
+    {
+        /* See if the access-terminal is active */
+        p_acc_term_inst = access_terminal_get();
+
+        /* If the specified access terminal is not active then it's interfaces are down. */
+        if(NULL == p_acc_term_inst)
+        {
+            BCM_LOG(ERROR, log_id_access_terminal,"no such ACTIVE access terminal\n");
+			ret = BCM_ERR_NOT_CONNECTED;
+            break;
+        }
+
+        /* If the specified access terminal is down, then it's interfaces are down. */
+        if(BCMBAL_STATE_UP != p_acc_term_inst->current_acc_term_obj_info.data.admin_state)
+        {
+            ret = BCM_ERR_NOT_CONNECTED;
+            break;
+        }
+
+        /* first get the index to the interface array from port id/type */
+        interface_index = bcmbal_port_type_and_id_to_interface_index (key.intf_type, key.intf_id);
+        if (interface_index >= INVALID_INTERFACE_INDEX)
+        {
+            BCM_LOG(ERROR, log_id_access_terminal,"INVALID port type/id (%s/%d) to interface index (%d)\n",
+                interface_type_str_get(key.intf_type), key.intf_id, interface_index);
+			ret = BCM_ERR_INTERNAL;
+            break;
+        }
+        /* Retrieve the relevany default tm sched of the interface */
+		if (BCMBAL_INTF_TYPE_NNI == key.intf_type)
+        {
+            *id = p_acc_term_inst->intf_info.interface[interface_index].current_int_obj_info.data.us_tm;
+        }
+        else /*BCMBAL_INTF_TYPE_PON */
+        {
+            *id = p_acc_term_inst->intf_info.interface[interface_index].current_int_obj_info.data.ds_tm;
+        }
+    }while(0);
+
+    return ret;
+}
+
+
+/*****************************************************************************/
+/**
+ * @brief A function that returns the status of the specified interface object
+ *
+ * @param key       An interface instance key
+ *
+ * @returns bcmbal_state
+ *****************************************************************************/
+bcmbal_status bcmbal_interface_status_get(bcmbal_interface_key key)
+{
+    bcmbal_state intf_status = BCMBAL_STATUS_DOWN;
+    acc_term_interface *p_acc_term_interface = bcmbal_interface_get(key);
+
+    if(NULL == p_acc_term_interface)
+    {
+        BCM_LOG(ERROR, log_id_access_terminal,"no such interface\n");
+    }
+    else
+    {
+        intf_status =  p_acc_term_interface->current_int_obj_info.data.oper_status;
+    }
+    return intf_status;
+}
+/*****************************************************************************/
+/**
+ * @brief A function that returns the interface object
+ *
+ * @param key       An interface instance key
+ *
+ * @returns acc_term_interface  *p_acc_term_interface  a pointer to the interface object
+ *****************************************************************************/
+static acc_term_interface * bcmbal_interface_get(bcmbal_interface_key key)
+{
+    acc_term_inst *p_acc_term_inst = NULL;
+    acc_term_interface *p_acc_term_interface = NULL;
+    uint32_t interface_index = INVALID_INTERFACE_INDEX;
+
+    do
+    {
+        /*
+         * See if the access-terminal is active
+         */
+        p_acc_term_inst = access_terminal_get();
+
+
+        /*
+         * If the specified access terminal is not active then it's interfaces are down.
+         */
+        if(NULL == p_acc_term_inst)
+        {
+            BCM_LOG(ERROR, log_id_access_terminal,
+                    "no such ACTIVE access terminal\n");
+            break;
+        }
+
+        /*
+         * Retrieve the interface
+         */
+        /* first get the index to the interface array from port id/type */
+        interface_index = bcmbal_port_type_and_id_to_interface_index (key.intf_type, key.intf_id);
+        if (interface_index >= INVALID_INTERFACE_INDEX)
+        {
+            BCM_LOG(ERROR, log_id_access_terminal,
+                    "INVALID port type/id (%s/%d) to interface index (%d)\n",
+                    interface_type_str_get(key.intf_type), key.intf_id, interface_index);
+            break;
+        }
+        p_acc_term_interface =  &(p_acc_term_inst->intf_info.interface[interface_index]);
+
+    }while(0);
+
+
+    return p_acc_term_interface;
+}
+
+static char *interface_type_str_get(bcmbal_intf_type intf_type)
+{
+    return intf_type == BCMBAL_INTF_TYPE_NNI ? "NNI" :
+        intf_type == BCMBAL_INTF_TYPE_PON ? "PON" : "UNKNOWN TYPE";
+}
+/*@}*/
diff --git a/bal_release/src/core/main/acc_term_fsm.h b/bal_release/src/core/main/acc_term_fsm.h
new file mode 100644
index 0000000..c2337ae
--- /dev/null
+++ b/bal_release/src/core/main/acc_term_fsm.h
@@ -0,0 +1,199 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file acc_term_fsm.h
+ * @brief Code to support the BAL Access Terminal FSM
+ *
+ * @defgroup access_terminal Access Terminal
+ * @ingroup core
+ */
+
+
+#ifndef ACC_TERM_FSM_H
+#define ACC_TERM_FSM_H
+
+/*@{*/
+
+#include <bcm_topo.h>
+#include <bal_api.h>
+#include <sub_term_fsm.h>
+#include <tm_sched_fsm.h>
+
+
+/** An enumeration of the access-terminal FSM events.
+ */
+typedef enum
+{
+  ACC_TERM_FSM_EVENT_TYPE_NONE                 = -1,
+  ACC_TERM_FSM_EVENT_TYPE_ADMIN_UP        ,
+  ACC_TERM_FSM_EVENT_TYPE_ADMIN_DN        ,
+  ACC_TERM_FSM_EVENT_TYPE_INT_ADMIN_UP    ,
+  ACC_TERM_FSM_EVENT_TYPE_INT_ADMIN_DN    ,
+  ACC_TERM_FSM_EVENT_TYPE_UTIL_MSG        ,
+  ACC_TERM_FSM_EVENT_TYPE_UTIL_AUTO_MSG   ,
+  ACC_TERM_FSM_EVENT_TYPE_TIMEOUT         ,
+
+
+  ACC_TERM_FSM_EVENT_TYPE__LAST,
+  ACC_TERM_FSM_EVENT_TYPE__NUM_OF
+} acc_term_fsm_event_type;
+
+
+/** An enumeration of the access-terminal FSM states.
+ */
+typedef enum
+{
+  ACC_TERM_FSM_STATE_NONE     = -1,
+  ACC_TERM_FSM_STATE_NULL         ,
+  ACC_TERM_FSM_STATE_ADDING       ,
+  ACC_TERM_FSM_STATE_ADDED        ,
+  ACC_TERM_FSM_STATE_REMOVING     ,
+
+  ACC_TERM_FSM_STATE__LAST,
+  ACC_TERM_FSM_STATE__NUM_OF
+} acc_term_fsm_state;
+
+/**
+ * A structure that defines the information associated with an
+ * access-terminal FSM event
+ */
+typedef struct acc_term_fsm_event
+{
+  acc_term_fsm_event_type  event_type; /**< An FSM event */
+  void                  *msg;       /**< A pointer to the message being processed by the FSM during an event */
+} acc_term_fsm_event;
+
+/**
+ * @brief A temporary set of definitions to support access-terminal interfaces.
+ * This should be replaced by a more generic mapping method.
+ * @note The max PON interface of 16 is a practical limit that access term will support for now. 
+ */
+#define NUM_SUPPORTED_SUBSCRIBER_INTERFACES     (16)
+#define NUM_SUPPORTED_NNI_INTERFACES            (BCM_TOPO_MAX_NNI_PORTS)
+#define NUM_SUPPORTED_INTERFACES                (NUM_SUPPORTED_SUBSCRIBER_INTERFACES + NUM_SUPPORTED_NNI_INTERFACES)
+/** invalid interface index - used for any error in mapping port type/id to interface index */
+#define INVALID_INTERFACE_INDEX                 (NUM_SUPPORTED_INTERFACES)
+
+#define BAL_ACC_TERM_MAX_FLOWS_PER_PON          (1024)
+#define BAL_ACC_TERM_MAX_FLOWS                  (NUM_SUPPORTED_SUBSCRIBER_INTERFACES * BAL_ACC_TERM_MAX_FLOWS_PER_PON)
+
+typedef struct sub_term_id_entry
+{
+    bcmbal_sub_id sub_term_id;
+    TAILQ_ENTRY(sub_term_id_entry) next; /**< TAILQ link */    
+}sub_term_id_entry;
+
+/**
+ * Two interface objects associated with the access-terminal. 
+ * One stores the API requests, and one records the current
+ * state of the object.
+ */
+typedef struct acc_term_interface
+{
+    bcmbal_interface_cfg current_int_obj_info;   /**< The current information for this interface (used for GET) */
+    bcmbal_interface_cfg api_req_int_obj_info;   /**< The last interface object info received from the Public API */
+    uint16_t             num_sub_terms_on_int;   /**< The number of subscriber terminals on this interface */
+    TAILQ_HEAD(sub_term_id_list_head, sub_term_id_entry) sub_term_id_list;
+} acc_term_interface;
+
+/**
+ * The interface key of the instance being manipulated, and an array of interface objects associated
+ * with an access terminal instance.
+ */
+typedef struct acc_term_interface_info
+{ 
+    acc_term_interface   interface[NUM_SUPPORTED_INTERFACES]; /**< All interface instances */
+
+}acc_term_interface_info;
+
+
+/**
+ * An structure defining an access terminal instance and its associated interfaces
+ */
+typedef struct acc_term_inst
+{
+  /**< The current information for this access-terminal (used for GET)  */
+  bcmbal_access_terminal_cfg   current_acc_term_obj_info;
+  
+  /**< The last access-terminal object info received from the Public API */ 
+  bcmbal_access_terminal_cfg   api_req_acc_term_obj_info; 
+
+  acc_term_fsm_state            fsm_state;      /**< The access-terminal FSM state */
+  acc_term_interface_info       intf_info;      /**< The access-terminal interfaces */
+  bcmos_timer                   timer_info;     /**< A structure used for the state machine timeout timer */
+  
+} acc_term_inst;
+
+
+/*--- external function declarations ---*/
+extern bcmos_errno process_access_terminal_object(void *msg_payload);
+
+extern bcmos_errno process_access_terminal_util_msg(void *msg_payload);
+
+extern bcmos_errno process_interface_object(void *msg_payload);
+
+extern bcmos_errno process_interface_util_msg(void *msg_payload);
+
+extern bcmos_errno bcmbal_interface_sub_term_list_add(bcmbal_subscriber_terminal_key sub_term_key);
+
+extern bcmos_errno bcmbal_interface_sub_term_list_remove(bcmbal_subscriber_terminal_key sub_term_key);
+
+extern void access_terminal_fsm_init(void);
+
+extern bcmbal_status bcmbal_interface_status_get(bcmbal_interface_key key);
+
+extern bcmbal_status bcmbal_get_intf_oper_status_from_admin_state (bcmbal_state intf_admin_state);
+
+extern uint32_t bcmbal_port_type_and_id_to_interface_index(bcmbal_intf_type intf_type, 
+                                                           bcmbal_intf_id intf_id);
+extern bcmbal_status acc_term_status_get(void);
+
+extern bcmos_errno bcmbal_interface_sub_term_list_entry_add(bcmbal_subscriber_terminal_key sub_term_key);
+
+extern bcmos_errno bcmbal_interface_sub_term_list_entry_remove(bcmbal_subscriber_terminal_key sub_term_key);
+
+extern bcmos_errno bcmbal_interface_tm_get(bcmbal_interface_key key, bcmbal_tm_sched_id *id);
+
+extern bcmos_errno interface_tm_sched_unset(bcmbal_interface_key intf_key, bcmbal_tm_sched_key sched_key);
+
+extern bcmos_errno bcmbal_tm_sched_interface_tm_auto_create(bcmbal_interface_cfg *p_interface_info);
+
+extern bcmos_errno bcmbal_tm_sched_set_interface_owner(bcmbal_interface_key interface_key, tm_sched_inst *p_tm_sched_inst);
+
+extern bcmos_errno bcmbal_tm_sched_set_sub_term_owner(	bcmbal_tm_sched_key tm_sched_key, const bcmbal_subscriber_terminal_cfg *p_sub_term_cfg);
+
+
+/*@}*/
+
+#endif /*ACC_TERM_FSM_H */
+
+
diff --git a/bal_release/src/core/main/bal_cli.c b/bal_release/src/core/main/bal_cli.c
new file mode 100644
index 0000000..cd2c389
--- /dev/null
+++ b/bal_release/src/core/main/bal_cli.c
@@ -0,0 +1,423 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *
+ *  :>
+ *
+ *****************************************************************************/
+
+/**
+ * @file bal_cli.c
+ * @brief Sample CLI which is used to exercise the BAL Public API
+ *
+ */
+
+/*@{*/
+
+#include <bcmos_system.h>
+
+#include <bal_common.h>
+
+#include <bal_core.h>
+#include <bal_api.h>
+#include <bal_api_cli.h>
+#include <bcmos_cli.h>
+#include <rsc_mgr_cli.h>
+#include <bal_switch_acc_term.h>
+#include <bal_mac_util.h>
+#include <bal_switch_util.h>
+#include "bal_cli.h"
+
+#ifdef OMCI_SVC
+#include <omci_svc.h>
+#include <omci_svc_cli.h>
+#endif
+
+#ifdef ENABLE_LOG
+#include <bcm_dev_log.h>
+/*
+ * CLI logging device ids
+ */
+dev_log_id log_id_cli;
+
+/* CLI logging for ONU discovery */
+dev_log_id log_id_cli_disc;
+#endif
+bcmcli_session *current_session;
+
+/* user_exit_cb is only supported when BAL is built with a user application
+ * and run as a set of threads in that application (i.e. when bcmbal_init is
+ * called) */
+static bcmbal_exit_cb user_exit_cb;
+static bcmos_task bal_cli_thread;
+
+static const char *bal_iwf_mode_to_str(bcmbal_iwf_mode iwf_mode)
+{
+    static const char *str_table[BCMBAL_IWF_MODE__NUM_OF] =
+    {
+        [BCMBAL_IWF_MODE_DIRECT_MAPPING]      = "direct_mapping",
+        [BCMBAL_IWF_MODE_PER_FLOW]            = "per_flow",
+    };
+    return (iwf_mode >= BCMBAL_IWF_MODE__NUM_OF) ? "<unknown>" : str_table[iwf_mode];
+}
+
+static const char *bal_intf_maptable_to_str(bal_swapp_port_map_indx intf_maptable)
+{
+    static const char *str_table[BAL_SWAPP_PORT_MAP__NUM_OF] =
+    {
+        [BAL_SWAPP_PORT_MAP_GPON]   = "gpon",
+        [BAL_SWAPP_PORT_MAP_GPON_V3] = "gpon v3",
+        [BAL_SWAPP_PORT_MAP_EXP] = "exp",
+        [BAL_SWAPP_PORT_MAP_EXP2] = "exp 2",
+        [BAL_SWAPP_PORT_MAP_SVK4] = "svk4",
+        [BAL_SWAPP_PORT_MAP_EPON_TDMA] = "epon_tdma",
+        [BAL_SWAPP_PORT_MAP_EPON_1G] = "epon_1g",
+        [BAL_SWAPP_PORT_MAP_EPON_10G] = "epon_10g",
+    };
+    return (intf_maptable >= BAL_SWAPP_PORT_MAP__NUM_OF) ? "<unknown>" : str_table[intf_maptable];
+}
+
+/*
+ * show_confif CLI command handler
+ */
+static bcmos_errno bal_show_config_cmd(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nParms)
+{
+    const bcmbal_config_params *bal_config = bcmbal_config_get();
+    bcmolt_devid device_id;
+
+    bcmcli_session_print(session, "interworking mode is : %s\n", bal_iwf_mode_to_str(bal_config->iwf_mode));
+    bcmcli_session_print(session, "switch interface mapping table is : %s\n", bal_intf_maptable_to_str(bal_config->intf_maptable));
+    bcmcli_session_print(session, "mac is %s loopback mode \n", bcmbal_is_mac_in_loopback() ? "IN" : "NOT IN");
+    bcmcli_session_print(session, "number of nni ports is : %d \n", bal_config->num_nni_ports);
+    bcmcli_session_print(session, "port for trapped packets is : %d \n", bal_config->trap_udp_port);
+
+    BCM_TOPO_FOR_EACH_DEV(device_id)
+    {
+        bcmcli_session_print(session, "pon mode of device %d is %s , number of pons is %d\n", device_id,
+            bcm_topo_dev_get_pon_mode_str(device_id),bcm_topo_dev_get_max_pon(device_id));
+    }
+
+    return BCM_ERR_OK;
+}
+
+/* "quit" CLI command handler */
+static int _cmd_quit(bcmcli_session *sess, const bcmcli_cmd_parm parm[], uint16_t nParms)
+{
+    bcmcli_stop(sess);
+    bcmcli_session_print(sess, "BAL core CLI terminated by 'Quit' command\n");
+    return 0;
+}
+
+/* "sleep" CLI command handler */
+static bcmos_errno _cmd_sleep(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nParms)
+{
+    bcmos_usleep(parm[0].value.unumber);
+    return BCM_ERR_OK;
+}
+
+/*****************************************************************************/
+/**
+ * @brief A function to initialize the BAL core debug CLI
+ *
+ * @returns BCM_ERR_OK
+ *
+ *****************************************************************************/
+static bcmos_errno bal_debug_init(void)
+{
+    bcmcli_entry *dir;
+
+    dir = bcmcli_dir_add(NULL, "debug", "BAL core debug CLI", BCMCLI_ACCESS_ADMIN, NULL);
+
+    /* Add the resource manager debug CLI */
+    rsc_mgr_cli_init(dir);
+    mac_util_cli_init(dir);
+
+    /* Add the switch util debug CLI */
+    sw_util_cli_init(dir);
+
+#ifdef OMCI_SVC
+    if (!omci_svc_is_loopback())
+        omci_svc_cli_init(dir);
+#endif
+
+    BCMCLI_MAKE_CMD(dir, "sleep", "Sleep for a specified number of usec", _cmd_sleep,
+        BCMCLI_MAKE_PARM("time to sleep (microseconds)", "time to sleep (microseconds)", BCMCLI_PARM_UDECIMAL, 0));
+
+    BCMCLI_MAKE_CMD_NOPARM(dir, "show_config", "show bal configuration", bal_show_config_cmd);
+
+    /* Add os CLI */
+    bcmos_cli_init(dir);
+
+    return BCM_ERR_OK;
+}
+
+/** BAL Indication callback handler */
+static void api_ind_cb_handler(bcmbal_obj *obj)
+{
+
+    if((BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL == obj->obj_type) &&
+       (BCMBAL_SUB_ID_UNKNOWN == ((bcmbal_subscriber_terminal_cfg *)obj)->key.sub_term_id))
+    {
+        bcmbal_serial_number *p_serial_number =
+            &(((bcmbal_subscriber_terminal_cfg *)obj)->data.serial_number);
+
+        BCM_LOG(DEBUG, log_id_cli_disc, "Discovered ONU serial number "
+                "%2X%2X%2X%2X%1X%1X%1X%1X%1X%1X%1X%1X "
+                "on PON %d\n",
+                p_serial_number->vendor_id[0],
+                p_serial_number->vendor_id[1],
+                p_serial_number->vendor_id[2],
+                p_serial_number->vendor_id[3],
+                p_serial_number->vendor_specific[0]>>4 & 0x0f,
+                p_serial_number->vendor_specific[0] & 0x0f,
+                p_serial_number->vendor_specific[1]>>4 & 0x0f,
+                p_serial_number->vendor_specific[1] & 0x0f,
+                p_serial_number->vendor_specific[2]>>4 & 0x0f,
+                p_serial_number->vendor_specific[2] & 0x0f,
+                p_serial_number->vendor_specific[3]>>4 & 0x0f,
+                p_serial_number->vendor_specific[3] & 0x0f,
+
+                ((bcmbal_subscriber_terminal_cfg *)obj)->key.intf_id);
+    }
+    else
+    {
+        char obj_key_str[256];
+
+        bal_obj_key_str_get(obj, obj_key_str);
+
+        BCM_LOG(INFO, log_id_cli,
+                "Processing CLI API \'%s\' IND callback (status is %s), (key is %s)\n",
+                bcmbal_objtype_str(obj->obj_type),
+                bcmos_strerror(obj->status),
+                obj_key_str);
+    }
+
+    return;
+}
+
+/* Execute CLI script */
+bcmos_errno bcmbal_cli_exec_script(const char *filename)
+{
+    char buf[1024];
+    FILE *f;
+
+    f = fopen(filename, "r");
+    if (!f)
+    {
+        printf("Can't open file %s for reading\n", filename);
+        return BCM_ERR_PARM;
+    }
+    while (!bcmcli_is_stopped(current_session) && !feof(f) &&
+        fgets(buf, sizeof(buf)-1, f))
+    {
+        bcmcli_print(current_session, "%s", buf);
+        bcmcli_parse(current_session, buf);
+    }
+    fclose(f);
+    return BCM_ERR_OK;
+}
+
+/* Execute init CLI script if any */
+bcmos_errno bcmbal_cli_exec_init_script(void)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    const char *init_script = bcmbal_config_get()->init_script;
+
+    if (init_script)
+        ret = bcmbal_cli_exec_script(init_script);
+
+    return ret;
+}
+
+/* CLI thread handler */
+static int _bal_cli_thread_handler(long data)
+{
+    char init_string[]="\n";
+    bcmcli_session *sess = current_session;
+
+    /* Switch to interactive mode if not stopped in the init script */
+    if (!bcmcli_is_stopped(sess))
+    {
+        /* Force a CLI command prompt
+         *
+         * The string passed into the parse function
+         * must be modifiable, so a string constant like
+         * bcmcli_parse(current_session, "\n") will not
+         * work.
+         */
+        bcmcli_parse(sess, init_string);
+
+        /* Process user input until EOF or quit command */
+        bcmcli_driver(sess);
+    };
+    BCM_LOG(INFO, log_id_core, "BAL CLI terminated\n");
+
+    /* call the user's exit callback, if any */
+    if(user_exit_cb) (*user_exit_cb)();
+
+    current_session = NULL;
+    bcmcli_session_close(sess);
+
+    return 0;
+}
+
+/*****************************************************************************/
+/**
+ * @brief This function initializes the BAL CLI
+ *
+ * @returns BCM_ERR_OK on success, other bcmos_errno codes otherwise
+ *
+ *****************************************************************************/
+bcmos_errno bcmbal_cli_init(bcmbal_exit_cb exit_cb)
+{
+    const bcmbal_config_params *bal_config = bcmbal_config_get();
+    bcmcli_session_parm mon_session_parm = {};
+    bcmos_task_parm bal_cli_task_p = {};
+    bcmcli_entry *dir;
+    bcmos_errno ret;
+    bcmbal_cb_cfg cb_cfg = {};
+
+    mon_session_parm.access_right = bal_config->access;
+    mon_session_parm.line_edit_mode = bal_config->edit_mode;
+
+#ifdef ENABLE_LOG
+    /*
+     * Initialize the logging context
+     */
+    log_id_cli = bcm_dev_log_id_register("CLI", DEV_LOG_LEVEL_INFO, DEV_LOG_ID_TYPE_BOTH);
+    BUG_ON(log_id_cli == DEV_LOG_INVALID_ID);
+
+    log_id_cli_disc = bcm_dev_log_id_register("CLI_DISC", DEV_LOG_LEVEL_INFO, DEV_LOG_ID_TYPE_BOTH);
+    BUG_ON(log_id_cli_disc == DEV_LOG_INVALID_ID);
+#endif
+
+    do
+    {
+        ret = bcmcli_session_open(&mon_session_parm, &current_session);
+        if(BCM_ERR_OK != ret)
+        {
+            BCM_LOG(ERROR, log_id_cli, "Can't open CLI session\n");
+            break;
+        }
+
+        {
+            cb_cfg.obj_type = BCMBAL_OBJ_ID_ANY;
+            cb_cfg.ind_cb_hdlr = (f_bcmbal_ind_handler )api_ind_cb_handler;
+
+            bcmbal_subscribe_ind(&cb_cfg);
+        }
+
+        /* Initialize the bal api cli UI */
+        if(NULL == (dir = bcmcli_dir_add(NULL, "bal", "BAL API access", BCMCLI_ACCESS_ADMIN, NULL)))
+        {
+            BCM_LOG(ERROR, log_id_cli, "Could not initialize the BAL API CLI hierarchy\n");
+            break;
+        }
+
+        ret = bcmbal_apicli_add_commands(current_session, dir);
+        if (ret != BCM_ERR_OK)
+        {
+            BCM_LOG(ERROR, log_id_cli, "Could not initialize the BAL CLI: %s\n", bcmos_strerror(ret));
+            break;
+        }
+
+        /* Initialize the bal "debug" CLI */
+        ret = bal_debug_init();
+        if(BCM_ERR_OK != ret)
+        {
+            BCM_LOG(ERROR, log_id_core, "Error initializing the bal debug cli\n");
+            break;
+        }
+
+#ifdef ENABLE_LOG
+        /* Add logger CLI */
+        bcm_dev_log_cli_init(NULL);
+#endif
+
+        /* Add "quit" command at the top level */
+        BCMCLI_MAKE_CMD_NOPARM(NULL, "quit", "Quit", _cmd_quit);
+
+
+        /* Record the user's choice of callback function on our exit (may be NULL!) */
+        user_exit_cb = exit_cb;
+
+        /* Create BAL CLI thread */
+        bal_cli_task_p.name = "bal_cli_thread";
+        bal_cli_task_p.handler = _bal_cli_thread_handler;
+        bal_cli_task_p.priority = TASK_PRIORITY_CLI;
+
+        ret = bcmos_task_create(&bal_cli_thread, &bal_cli_task_p);
+        if (BCM_ERR_OK != ret)
+        {
+            bcmos_printf("Couldn't create BAL CLI thread\n");
+            return ret;
+        }
+
+    } while(0);
+
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief This function un-initializes the BAL CLI
+ *
+ * @returns BCM_ERR_OK
+ *
+ *****************************************************************************/
+bcmos_errno bcmbal_cli_finish(void)
+{
+    if (!current_session)
+        return BCM_ERR_OK;
+
+    bcmbal_cli_stop();
+
+    bcmos_task_destroy(&bal_cli_thread);
+
+    bcmbal_api_finish();
+
+    return BCM_ERR_OK;
+}
+
+
+/* Stop CLI */
+void bcmbal_cli_stop(void)
+{
+    if (current_session)
+    {
+        bcmcli_stop(current_session);
+        while (current_session)
+            bcmos_usleep(10000);
+    }
+}
+
+/* Is CLI terminated? */
+bcmos_bool  bcmbal_cli_is_terminated(void)
+{
+    return (current_session == NULL) || bcmcli_is_stopped(current_session);
+}
+
+/*@}*/
diff --git a/bal_release/src/core/main/bal_cli.h b/bal_release/src/core/main/bal_cli.h
new file mode 100644
index 0000000..c4f19b6
--- /dev/null
+++ b/bal_release/src/core/main/bal_cli.h
@@ -0,0 +1,59 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *
+ *  :>
+ *
+ *****************************************************************************/
+
+/**
+ * @file bal_cli.h
+ * @brief All functions and definitions supplied by the Sample CLI
+ *
+ */
+
+
+#ifndef BAL_CLI_H
+#define BAL_CLI_H
+
+#include <bcmcli.h>
+#include <bcmos_cli.h>
+#include <bal_core.h>
+/*@{*/
+
+extern bcmos_errno bcmbal_cli_init(bcmbal_exit_cb exit_cb);
+extern void bcmbal_cli_stop(void);
+extern bcmos_errno bcmbal_cli_finish(void);
+extern bcmos_errno bcmbal_cli_exec_init_script(void);
+extern bcmos_errno bcmbal_cli_exec_script(const char *filename);
+extern bcmos_bool  bcmbal_cli_is_terminated(void);
+extern bcmcli_session *current_session;
+
+
+/*@}*/
+
+#endif /* BAL_CLI_H */
+
diff --git a/bal_release/src/core/main/bal_core.c b/bal_release/src/core/main/bal_core.c
new file mode 100644
index 0000000..fcc1573
--- /dev/null
+++ b/bal_release/src/core/main/bal_core.c
@@ -0,0 +1,1018 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *
+ *  :>
+ *
+ *****************************************************************************/
+
+/**
+ * @file bal_core.c
+ * @brief The code that comprises the main entry point and initialization
+ *        code for the BAL Core.
+ *
+ * @addtogroup ctrlr
+ */
+
+/*@{*/
+
+#include <bcmos_system.h>
+#include <bcmcli.h>
+#include <bal_switch_util.h>
+#include <bal_mac_util.h>
+#include <bal_version.h>
+#include <cmdline.h>
+#include <bal_core.h>
+#include <bal_cli.h>
+
+#include "rsc_mgr.h"
+#include "bal_worker.h"
+#include "bal_switch_acc_term.h"
+
+#ifdef ENABLE_LOG
+#include <bcm_dev_log.h>
+#endif
+
+#ifdef OMCI_SVC
+#include <omci_svc.h>
+#endif
+
+#if defined(CONFIG_MAC_RPC)
+#define CONFIG_MAC_UTIL_IP_PORT
+#endif
+
+#ifdef ENABLE_LOG
+/*
+ * @brief The Logging device id for the BAL core
+ */
+dev_log_id log_id_core;
+#endif
+
+
+/*--- local function declarations  ---*/
+static void welcome_to_bal(void);
+static bcmos_errno bal_core_init(void);
+static void bal_core_finish(void);
+static void bal_parse_config(struct bcmbal_config_params *p_params);
+static bcmos_errno bal_rpc_soc_gen(void);
+
+/*
+ * Worker thread and RX thread(s) data structures
+ */
+static bcmos_task core_worker_thread;
+
+static bcmos_errno _usage(const char *cmd);
+
+#define BAL_CHECK_IP_ARGUMENT(_i, _argc, _option) \
+    do { \
+        if (_i == _argc - 1) \
+        { \
+            printf("Error: IP:port is expected after %s option\n", _option); \
+            return _usage(argv[0]);\
+        }\
+    } while (0)
+
+
+#define CORE_MGMT_IP_PORT_CMDLINE_OPT   "-C"
+#define BAL_API_IP_PORT_CMDLINE_OPT     "-A"
+#define BAL_MAC_IP_PORT_CMDLINE_OPT     "-M"
+#define BAL_SW_IP_CMDLINE_OPT           "-S"
+#define BAL_INIT_SCRIPT_OPT             "-f"
+#define BAL_LOG_FILE_OPT                "-F"
+#define BAL_HELP_OPT                    "-h"
+#define BAL_LONG_HELP_OPT               "--help"
+#define BAL_LEVEL_OPT                   "-L"
+#define BAL_NO_LOG_OPT                  "-nl"
+#define BAL_LOG_SYSLOG_OPT              "-syslog"
+#define BAL_NO_LINEEDIT_OPT             "-ne"
+
+
+/* Command line arguments */
+static cl_argument supported_cl_args[] =
+{
+#ifdef CONFIG_MAC_UTIL_IP_PORT
+    { .short_name = BAL_MAC_IP_PORT_CMDLINE_OPT,
+      .extra_arg = "mac_device_ip:port",
+      .description = "IP address:UDP port where the MAC device listens for RPC messages",
+      .flags = CL_ARGUMENT_FLAG_MANDATORY,
+      .owner = "BAL"
+    },
+#endif
+#ifdef CONFIG_SWITCH_RPC
+    { .short_name = BAL_SW_IP_CMDLINE_OPT,
+      .extra_arg = "switch_ip",
+      .description = "Switch IP address for RPC messages",
+      .flags = CL_ARGUMENT_FLAG_MANDATORY,
+    },
+#endif
+    { .short_name = CORE_MGMT_IP_PORT_CMDLINE_OPT,
+      .extra_arg = "core_mgmt_ip:port",
+      .description = "IP address:UDP port where the core listens for messages from the BAL Public API",
+    },
+    { .short_name = BAL_API_IP_PORT_CMDLINE_OPT,
+      .extra_arg =   "al_api_mgmt ip:port",
+      .description = "IP address:UDP port where BAL Public API listens for responses from the core",
+    },
+    { .short_name = BAL_LEVEL_OPT,
+      .extra_arg =   "level",
+      .description = "CLI level: guest | admin | debug",
+    },
+    { .short_name = BAL_NO_LINEEDIT_OPT,
+      .description = "Disable line editing",
+    },
+    { .short_name = BAL_INIT_SCRIPT_OPT,
+      .extra_arg = "script_file_name",
+      .description = "Script containing BAL CLI commands",
+    },
+#ifdef ENABLE_LOG
+    { .short_name = BAL_LOG_FILE_OPT,
+      .extra_arg = "log_file_name",
+      .description = "Log into file",
+    },
+    { .long_name = BAL_LOG_SYSLOG_OPT,
+      .description = "Log to syslog",
+    },
+    { .short_name = BAL_NO_LOG_OPT,
+      .description = "Disable logger",
+    },
+#endif
+#ifndef BUILD_OF_AGENT
+    { .short_name = BAL_HELP_OPT,
+      .long_name = BAL_LONG_HELP_OPT,
+      .description = "This help",
+    },
+#endif
+};
+
+/*
+ * The BAL core config file definitions
+ */
+
+#define TOPOLOGY_FILE_NAME "bal_topology.ini"
+#define CONFIG_FILE_NAME "bal_config.ini"
+#define MAX_CONFIG_FILE_LINE_LEN 256
+#define MAX_CONFIG_PARAM_NAME_LEN 64
+#define MAX_CONFIG_PARAM_VALUE_LEN 64
+
+bcmbal_config_params bal_config_params =
+{
+    .iwf_mode = BCMBAL_IWF_MODE_PER_FLOW,
+    .intf_maptable = 2,
+    .num_nni_ports = BCM_TOPO_MAX_NNI_PORTS,
+    /* The interface mapping table default value is set in the switch utilities */
+    .topo_params.pon_mode = BCM_TOPO_PON_MODE_INVALID,
+    /* Default CLI session parameters */
+    .access = BCMCLI_ACCESS_ADMIN,
+    .edit_mode = BCMCLI_LINE_EDIT_DEFAULT,
+};
+static bcmos_bool bal_initialized;
+
+#define RPC_SOC_TEMPLATE_FILE_NAME "rpc.soc.template"
+#define RPC_SOC_FILE_NAME "rpc.soc"
+#define MAX_CMD_LINE_LEN 256
+
+ /*
+ * An enumeration of the possible iwf modes
+ */
+static bcmcli_enum_val iwf_mode_enum[] = {
+    { .name="direct",      .val=BCMBAL_IWF_MODE_DIRECT_MAPPING},
+    { .name="per_flow",    .val=BCMBAL_IWF_MODE_PER_FLOW},
+    BCMCLI_ENUM_LAST
+};
+
+/**
+ * @brief The Broadcom Ltd logo.
+ */
+static const char *g_p_company_logo =
+"\n\n"
+"             *\n"
+"            * *\n"
+"           *   *\n"
+"           *   *\n"
+"          *     *\n"
+"          *     *\n"
+"          *     *\n"
+"   * *   *       *   * *\n"
+" *      *         *      *\n\n"
+"Copyright (c) 2017 Broadcom Ltd\n\n";
+
+
+#ifdef ENABLE_LOG
+/* Create log_id for the core */
+static void bal_core_log_init(void)
+{
+    /* Register the core logging context */
+    log_id_core = bcm_dev_log_id_register("CORE_CTRLR", DEV_LOG_LEVEL_INFO, DEV_LOG_ID_TYPE_BOTH);
+    BUG_ON(log_id_core == DEV_LOG_INVALID_ID);
+
+    bcm_dev_log_level_set_style(DEV_LOG_LEVEL_FATAL, BCM_DEV_LOG_STYLE_BOLD);
+    bcm_dev_log_level_set_style(DEV_LOG_LEVEL_ERROR, BCM_DEV_LOG_STYLE_BOLD);
+
+    BCM_LOG(DEBUG, log_id_core, "BAL Core is starting\n");
+}
+
+/* Initialize logger */
+static int bal_dev_log_time_to_str_cb(uint32_t bal_time, char *time_str, int time_str_size)
+{
+    /* Round timestamp to the nearest ms */
+    uint32_t time_ms = (bal_time + 500) / 1000;
+    return snprintf(time_str, time_str_size, "%05u.%03u", time_ms / 1000, time_ms % 1000);
+}
+#endif
+
+/*****************************************************************************/
+/**
+ * @brief A function to initialize the system logging subsystem
+ *
+ * This function is executed at system startup time
+ *
+ *****************************************************************************/
+bcmos_errno bcmbal_log_init(void)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+
+#ifdef ENABLE_LOG
+    const char *log_file_name = bal_config_params.log_file_name;
+    if (bal_config_params.disable_log)
+        return BCM_ERR_OK;
+    do
+    {
+        if (NULL == log_file_name && !bal_config_params.log_syslog)
+        {
+#define DEV_LOG_SIZE1 1<<20
+#define DEV_LOG_QUEUE_SIZE 1000
+            static uint8_t logger_buf1[DEV_LOG_SIZE1];
+            void *addresses[DEV_LOG_MAX_FILES] = {logger_buf1};
+            uint32_t sizes[DEV_LOG_MAX_FILES] = {sizeof(logger_buf1)};
+            uint32_t flags[DEV_LOG_MAX_FILES] = {BCM_DEV_LOG_FILE_FLAG_WRAP_AROUND};
+            /* Initialize the system logger for the core threads */
+            ret = bcm_dev_log_init_default_logger(addresses,
+                                                  sizes,
+                                                  flags,
+                                                  BCM_SIZEOFARRAY(addresses),
+                                                  0x4000,
+                                                  TASK_PRIORITY_DEV_LOG,
+                                                  DEV_LOG_QUEUE_SIZE);
+        }
+        else
+        {
+            bcm_dev_log_parm dev_log_parm = {};
+            int nfiles = 0;
+            if (NULL != log_file_name)
+            {
+                dev_log_parm.log_file[nfiles].type = BCM_DEV_LOG_FILE_REGULAR;
+                dev_log_parm.log_file[nfiles].udef_parms = (char *)(long)log_file_name;
+                dev_log_parm.log_file[nfiles].flags = BCM_DEV_LOG_FILE_FLAG_VALID;
+                ++nfiles;
+            };
+            if (bal_config_params.log_syslog)
+            {
+                dev_log_parm.log_file[nfiles].type = BCM_DEV_LOG_FILE_SYSLOG;
+                dev_log_parm.log_file[nfiles].udef_parms = "BAL";
+                dev_log_parm.log_file[nfiles].flags = BCM_DEV_LOG_FILE_FLAG_VALID;
+                ++nfiles;
+            };
+            ret = bcm_dev_log_init_default_logger_ext(&dev_log_parm,
+                nfiles, /* Log into file and/or syslog */
+                0x4000,
+                TASK_PRIORITY_DEV_LOG,
+                DEV_LOG_QUEUE_SIZE);
+        }
+
+        if(BCM_ERR_OK != ret)
+        {
+            printf("Error initializing logger default values (%s)\n", bcmos_strerror(ret));
+            break;
+        }
+
+        bcm_dev_log_set_time_to_str_cb(bal_dev_log_time_to_str_cb);
+    }
+    while(0);
+#endif /* #ifdef ENABLE_LOG */
+
+    return ret;
+}
+
+
+/* Parse command line parameters */
+bcmos_errno bcmbal_cmdline_parse(int argc, char *argv[])
+{
+    int i;
+
+    if (cl_validate(argc, argv, supported_cl_args, BCM_SIZEOFARRAY(supported_cl_args)) != BCM_ERR_OK)
+        return _usage(argv[0]);
+
+    /*
+     * Parse all optional arguments
+     */
+    for (i = 1; i < argc; i++)
+    {
+        if (!strcmp(argv[i], CORE_MGMT_IP_PORT_CMDLINE_OPT))
+        {
+            BAL_CHECK_IP_ARGUMENT(i, argc, CORE_MGMT_IP_PORT_CMDLINE_OPT);
+            bal_config_params.core_mgmt_ip_port = argv[++i];
+        }
+        else if (!strcmp(argv[i], BAL_API_IP_PORT_CMDLINE_OPT))
+        {
+            BAL_CHECK_IP_ARGUMENT(i, argc, BAL_API_IP_PORT_CMDLINE_OPT);
+            bal_config_params.balapi_mgmt_ip_port = argv[++i];
+        }
+#ifdef CONFIG_MAC_UTIL_IP_PORT
+        else if (!strcmp(argv[i], BAL_MAC_IP_PORT_CMDLINE_OPT))
+        {
+            /* When we build for x86, this is a necessary argument, because the MAC device is
+             * remote from the BAL core.  When we build for WRX, this argument isn't required
+             * because the MAC device is local and the mac_rpc_ip_port value is not used.
+             */
+            BAL_CHECK_IP_ARGUMENT(i, argc, BAL_MAC_IP_PORT_CMDLINE_OPT);
+            bal_config_params.mac_rpc_ip_port = argv[++i];
+        }
+#endif
+#ifdef CONFIG_SWITCH_RPC
+        else if (!strcmp(argv[i], BAL_SW_IP_CMDLINE_OPT))
+        {
+            BAL_CHECK_IP_ARGUMENT(i, argc, BAL_SW_IP_CMDLINE_OPT);
+            bal_config_params.sw_rpc_ip = argv[++i];
+        }
+#endif
+        else if (!strcmp(argv[i], BAL_LEVEL_OPT))
+        {
+            ++i;
+            if (!strcmp(argv[i], "admin"))
+                bal_config_params.access = BCMCLI_ACCESS_ADMIN;
+            else if (!strcmp(argv[i], "guest"))
+                bal_config_params.access = BCMCLI_ACCESS_GUEST;
+            else if (!strcmp(argv[i], "debug"))
+                bal_config_params.access = BCMCLI_ACCESS_DEBUG;
+            else
+                return _usage(argv[0]);
+        }
+        else if (!strcmp(argv[i], BAL_NO_LINEEDIT_OPT))
+        {
+            bal_config_params.edit_mode = BCMCLI_LINE_EDIT_DISABLE;
+        }
+#ifdef ENABLE_LOG
+        else if (!strcmp(argv[i], BAL_NO_LOG_OPT))
+        {
+            bal_config_params.disable_log = BCMOS_TRUE;
+        }
+        else if (!strcmp(argv[i], BAL_LOG_SYSLOG_OPT))
+        {
+            bal_config_params.log_syslog = BCMOS_TRUE;
+        }
+        else if (!strcmp(argv[i], BAL_LOG_FILE_OPT))
+        {
+            if (i == argc - 1)
+            {
+                bcmos_printf("Log file name is expected after %s option\n", BAL_LOG_FILE_OPT);
+                return _usage(argv[0]);
+            }
+            bal_config_params.log_file_name = argv[++i];
+        }
+#endif
+        else if (!strcmp(argv[i], BAL_INIT_SCRIPT_OPT))
+        {
+            if (i == argc - 1)
+            {
+                bcmos_printf("Script file name is expected after %s option\n", BAL_INIT_SCRIPT_OPT);
+                return _usage(argv[0]);
+            }
+            bal_config_params.init_script = argv[++i];
+        }
+        else if (!strcmp(argv[i], BAL_HELP_OPT) || !strcmp(argv[i], BAL_LONG_HELP_OPT))
+        {
+            return _usage(argv[0]);
+        }
+        else
+        {
+            /* We have encountered a non-mandatory command line option
+             * that we don't recognize.  This is a fatal error.  Print
+             * the proper command line invocation.
+             */
+            printf("Error: unrecognized cmdline option specified (%s)\n", argv[i]);
+            return _usage(argv[0]);
+        }
+    }
+
+    /*
+     * The user MUST specify the mac and switch IP:port for IPC
+     */
+    if (BCMOS_FALSE
+#ifndef BAL_MONOLITHIC
+        || (NULL == bal_config_params.core_mgmt_ip_port) || (NULL == bal_config_params.balapi_mgmt_ip_port)
+#endif
+#ifdef CONFIG_MAC_UTIL_IP_PORT
+        || ((BCMOS_TRUE != bcmbal_is_mac_in_loopback()) && (NULL == bal_config_params.mac_rpc_ip_port))
+#endif
+#ifdef CONFIG_SWITCH_RPC
+        || (NULL == bal_config_params.sw_rpc_ip)
+#endif
+      )
+    {
+        printf("Error: you must enter ALL mandatory cmdline options\n");
+        return _usage(argv[0]);
+    }
+
+    return BCM_ERR_OK;
+}
+
+/* This is BAL initialization function that is called when BAL is compiled
+ * as a library rather than stand-alone application.
+ * \param[in]   argc    Number of command line parameters
+ * \param[in]   argv    Command line parameter array
+ * \returns BCM_ERR_OK (0) if successful or error<0 in case of failure
+ */
+bcmos_errno bcmbal_init(void)
+{
+    bcmos_errno ret;
+
+    /* Read the bal config file (bal_config.ini) parameters, if the config file is present */
+    bal_parse_config(&bal_config_params);
+
+    /* Now initialize the system topology */
+    ret = bcm_topo_init((bal_config_params.topo_params.num_of_devs &&
+                         bal_config_params.topo_params.num_of_pons_per_dev &&
+                         bal_config_params.topo_params.pon_mode != BCM_TOPO_PON_MODE_INVALID) ?
+                        &bal_config_params.topo_params : NULL, TOPOLOGY_FILE_NAME);
+
+    if(BCM_ERR_OK != ret)
+    {
+        bcmos_printf("Error initializing the system topology\n");
+        return ret;
+    }
+
+#ifdef ENABLE_LOG
+    bal_core_log_init();
+#endif
+
+    /* Generate rpc.soc from rpc.soc.template */
+    if (BCM_ERR_OK != (ret = bal_rpc_soc_gen()))
+        return ret;
+
+    do
+    {
+
+        /* Initialize the BAL core itself
+         * NOTE: It is assumed that logging has been successfully
+         * initialized before this call is made
+         */
+        ret = bal_core_init();
+        if(BCM_ERR_OK != ret)
+        {
+            BCM_LOG(ERROR, log_id_core, "Error initializing the bal core\n");
+            break;
+        }
+
+        /* Initialize the switch utilities */
+        ret = sw_util_init();
+        if(BCM_ERR_OK != ret)
+        {
+            BCM_LOG(ERROR, log_id_core, "Error initializing the bal switch utilities\n");
+            break;
+        }
+
+        /* Initialize the mac utilities */
+        ret = mac_util_init(bal_config_params.mac_rpc_ip_port);
+        if(BCM_ERR_OK != ret)
+        {
+            BCM_LOG(ERROR, log_id_core, "Error initializing the bal mac utilities\n");
+            break;
+        }
+
+        /* Initialize the bal public api */
+        ret = bcmbal_api_init(bal_config_params.balapi_mgmt_ip_port, bal_config_params.core_mgmt_ip_port);
+        if(BCM_ERR_OK != ret)
+        {
+            BCM_LOG(ERROR, log_id_core, "Could not initialize the BAL Public API\n");
+            break;
+        }
+
+        bal_initialized = BCMOS_TRUE;
+
+        /* Print out the welcome banner */
+        welcome_to_bal();
+    }
+    while(0);
+
+    return ret;
+}
+
+void bcmbal_finish(void)
+{
+    bcmbal_cli_finish();
+    if (bal_initialized)
+        bal_core_finish();
+}
+
+/* Top-level init sequence */
+bcmos_errno bcmbal_init_all(int argc, char *argv[], bcmbal_exit_cb exit_cb)
+{
+    bcmos_errno err;
+    err = bcmbal_cmdline_parse(argc, argv);
+    err = (err != BCM_ERR_OK) ? err : bcmos_init();
+    err = (err != BCM_ERR_OK) ? err : bcmbal_log_init();
+    err = (err != BCM_ERR_OK) ? err : bcmbal_init();
+    err = (err != BCM_ERR_OK) ? err : bcmbal_cli_init(exit_cb);
+    return err;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The BAL core command line usage function
+ *
+ *  A function to display the proper bal_core command line format
+ *
+ * @param cmd A pointer to the command line string that the user entered to
+ *            start the BAL core.
+ *
+ * @returns BCM_ERR_PARM - This function is always run as a result of the user
+ *                    entering an invalid value on the command line.
+ *
+ *****************************************************************************/
+static bcmos_errno _usage(const char *cmd)
+{
+#ifndef BUILD_OF_AGENT
+    /* For SDN_AGENT all parm usage info is printed in the agent's main */
+    cl_print_usage(cmd, NULL, supported_cl_args, BCM_SIZEOFARRAY(supported_cl_args), CL_ARGUMENT_USAGE_FLAG_NONE);
+#endif
+    return BCM_ERR_PARM;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The BAL core initialization function
+ *
+ *  A function to initialize the BAL core and all its associated threads.
+ *
+ * @returns BCM_ERR_OK, or the return value from first function called
+ *          that fails.
+ *
+ *****************************************************************************/
+static bcmos_errno bal_core_init(void)
+{
+    bcmos_task_parm task_p = {};
+    bcmos_module_parm module_p = {};
+    bcmos_errno ret = BCM_ERR_OK;
+    mgmt_queue_addr_ports mgmt_queue_info;
+
+    do
+    {
+        /* Create message queues */
+        mgmt_queue_info.core_mgmt_ip_port = bal_config_params.core_mgmt_ip_port;
+        mgmt_queue_info.balapi_mgmt_ip_port = bal_config_params.balapi_mgmt_ip_port;
+        ret = core_msg_queue_init(&mgmt_queue_info);
+        if (BCM_ERR_OK != ret)
+        {
+            BCM_LOG(ERROR, log_id_core, "Couldn't create message queues\n");
+            break;
+        }
+
+        /* Create worker thread & modules for mgmt messages */
+        task_p.name = "core_worker";
+        task_p.priority = TASK_PRIORITY_WORKER;
+
+        ret = bcmos_task_create(&core_worker_thread, &task_p);
+        if (BCM_ERR_OK != ret)
+        {
+            BCM_LOG(ERROR, log_id_core, "Couldn't create worker thread\n");
+            break;
+        }
+
+        /*
+         * Initialize the worker thread that was just spawned
+         */
+        core_worker_thread_init();
+
+        /*
+         * Now create the module for the worker thread
+         */
+        module_p.qparm.name = "core_worker_mgmt_module";
+        module_p.init = _bal_worker_mgmt_module_init;
+        ret = bcmos_module_create(BCMOS_MODULE_ID_WORKER_MGMT, &core_worker_thread, &module_p);
+        if (ret)
+        {
+            BCM_LOG(ERROR, log_id_core, "Couldn't create mgmt worker module\n");
+            break;
+        }
+
+#ifdef CONFIG_SWITCH_RPC
+        ret = sw_util_pkt_send_init(bal_config_params.sw_rpc_ip, bal_config_params.pkt_send_svr_listen_port);
+        if (BCM_ERR_OK != ret)
+        {
+            BCM_LOG(ERROR, log_id_core, "Couldn't initialize the packet send interface ret = %d\n", ret);
+            break;
+        }
+        else
+        {
+            BCM_LOG(DEBUG, log_id_core,
+                "\"Packet send\" interface is initialized"
+                " to use server at %s:%d\n",
+                bal_config_params.sw_rpc_ip, bal_config_params.pkt_send_svr_listen_port );
+        }
+#endif
+    }
+    while(0);
+
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The BAL core finish function
+ *
+ *  A function to clean up the BAL core and all its associated threads on
+ *  exit.
+ *
+ * @returns BCM_ERR_OK
+ *
+ *****************************************************************************/
+static void bal_core_finish(void)
+{
+    rsc_mgr_uninit();
+    mac_util_finish();
+    sw_util_finish();
+
+    core_worker_thread_finish();
+
+    bcmos_module_destroy(BCMOS_MODULE_ID_WORKER_MGMT);
+
+    bcmos_task_destroy(&core_worker_thread);
+
+    /* Let logger task have enough time to drain its message queue. */
+#ifdef ENABLE_LOG
+    bcmos_usleep(1000000);
+    bcm_dev_log_destroy();
+#endif
+}
+
+
+/*****************************************************************************/
+/**
+ * @brief A function to print the welcome banner for BAL
+ *
+ * This function is executed at system startup time
+ *
+ *****************************************************************************/
+static void welcome_to_bal(void)
+{
+    time_t tm = time(NULL);
+
+    /* @todo Don't print the welcome banner when running as a daemon */
+
+    printf("%s", g_p_company_logo);
+
+    BCM_LOG(INFO, log_id_core, "*** Welcome to BAL %s version %s (Built: %s)\n",
+#ifndef BUILD_OF_AGENT
+           "",
+#else
+           "OF-Agent",
+#endif
+        BAL_VERSION, BAL_BUILD_DATE);
+    BCM_LOG(INFO, log_id_core, "%s\n", BAL_BUILD_INFO);
+
+    BCM_LOG(INFO, log_id_core, "Time is: %s", asctime(localtime(&tm)));
+
+#ifdef TEST_SW_UTIL_LOOPBACK
+    BCM_LOG(INFO, log_id_core, "----BUILT WITH TEST_SW_UTIL_LOOPBACK\n");
+#endif
+
+    if (BCMOS_TRUE == bcmbal_is_mac_in_loopback())
+    {
+        BCM_LOG(INFO, log_id_core, "----CONFIGURED WITH MAC UTIL LOOPBACK\n");
+    }
+}
+
+/*****************************************************************************/
+/**
+ * @brief A trim helper function
+ *
+ *  This function is used to get rid of trailing and leading whitespace
+ *  including the "\n" from fgets()
+ *
+ * @param s   A pointer to the string that is to be trimmed
+ *
+ * @returns -char *, the trimmed sting
+ *
+ */
+static char *trim (char * s)
+{
+    /* Initialize start, end pointers */
+    int len = strlen(s);
+    char *s1 = s, *s2 = &s[len - 1];
+
+    /* Trim and delimit right side */
+    while ( (isspace (*s2)) && (s2 >= s1) )
+    {
+        s2--;
+        len--;
+    }
+
+    *(s2+1) = '\0';
+
+    /* Trim left side */
+    while ( (isspace (*s1)) && (s1 < s2) )
+    {
+        s1++;
+        len--;
+    }
+
+    /* Copy finished string. Use memmove, as it is guaranteed to correctly handle overlapping strings. */
+    memmove (s, s1, len + 1);
+    return s;
+}
+
+/* A helper function for finding an enum array entry value, given it's name*/
+static long find_val_by_enum_name(bcmcli_enum_val *p_enum_array, const char * name)
+{
+    long val = -1;
+     int ii;
+
+
+    for(ii=0; p_enum_array[ii].name != NULL; ii++)
+    {
+        if(0 == strcmp(name, p_enum_array[ii].name))
+        {
+            val = p_enum_array[ii].val;
+        }
+    }
+
+    return val;
+}
+
+/*****************************************************************************/
+/**
+ * @brief A function that reads bal config file
+ *
+ * This function is used to read the bal config file into the
+ * bcmbal_config_params structure.
+ *
+ * The config file is defined to be named "bal_config.ini" and is
+ * of the format:
+ * param_name=param_value
+ *
+ * @param p_params A pointer to the core configuration parameters
+ *
+ * @returns void
+ *
+ */
+static void bal_parse_config(bcmbal_config_params *p_params)
+{
+    char *s, buff[MAX_CONFIG_FILE_LINE_LEN];
+    char name[MAX_CONFIG_PARAM_NAME_LEN], value[MAX_CONFIG_PARAM_VALUE_LEN];
+    FILE *fp = fopen (CONFIG_FILE_NAME, "r");
+
+    if (fp == NULL)
+    {
+        printf("No config file (%s) found\n", CONFIG_FILE_NAME);
+        return;
+    }
+
+    printf("BAL configuration params as read from %s:\n", CONFIG_FILE_NAME);
+
+    /* Read next line */
+    while ((s = fgets (buff, sizeof buff, fp)) != NULL)
+    {
+        /* Skip blank lines and comments */
+        if (buff[0] == '\n' || buff[0] == '#')
+            continue;
+
+        /* Parse name/value pair from line */
+        s = strtok (buff, "=");
+        if (s==NULL)
+        {
+            continue;
+        }
+        else
+        {
+            strncpy (name, s, MAX_CONFIG_PARAM_NAME_LEN);
+        }
+
+        s = strtok (NULL, "=");
+
+        if (s==NULL)
+        {
+            continue;
+        }
+        else
+        {
+            strncpy (value, s, MAX_CONFIG_PARAM_VALUE_LEN);
+        }
+
+        trim (value);
+
+        printf("%s=%s\n", name, value);
+
+        /* Copy into correct entry in parameters struct */
+        if(strcmp(name, "iwf_mode")==0)
+        {
+            p_params->iwf_mode = find_val_by_enum_name(iwf_mode_enum, value);
+        }
+        else if(strcmp(name, "intf_maptable")==0)
+        {
+            uint32_t intf_map_tbl_idx;
+
+            intf_map_tbl_idx = atoi(value);
+
+            if(BCM_ERR_OK != bal_bcm_intf_maptable_set(intf_map_tbl_idx))
+            {
+                printf("error: value (%u) is not a valid index, ignored", intf_map_tbl_idx);
+            }
+            else
+            {
+                p_params->intf_maptable = atoi(value);
+            }
+        }
+        else if(strcmp(name, "trap_udp_port")==0)
+        {
+            uint32_t udp_port;
+
+            udp_port = atoi(value);
+
+            if(BCM_ERR_OK != bal_bcm_trap_rcv_port_set(udp_port))
+            {
+                printf("error: value (%u) is not a valid port, ignored", udp_port);
+            }
+            else
+            {
+                p_params->trap_udp_port = udp_port;
+            }
+        }
+        else if(strcmp(name, "ds_sched_mode")==0)
+        {
+            uint32_t sched_mode;
+
+            sched_mode = atoi(value);
+
+            if(BCM_ERR_OK != bal_bcm_ds_sched_mode_set(sched_mode))
+            {
+                printf("error: value (%u) is not a valid sched mode, ignored", sched_mode);
+            }
+            else
+            {
+                p_params->ds_sched_mode = sched_mode;
+            }
+        }
+        else if(strcmp(name, "num_nni_ports")==0)
+        {
+
+            p_params->num_nni_ports = atoi(value);
+            bcm_topo_dev_set_max_nni(0, p_params->num_nni_ports);
+
+        }
+        else if(strcmp(name, "pkt_send_svr_listen_port")==0)
+        {
+
+            p_params->pkt_send_svr_listen_port = atoi(value);
+
+        }
+        else if(strcmp(name, "topology.num_of_devs")==0)
+        {
+            p_params->topo_params.num_of_devs = atoi(value);
+        }
+        else if(strcmp(name, "topology.num_of_pons_per_dev")==0)
+        {
+            p_params->topo_params.num_of_pons_per_dev = atoi(value);
+        }
+        else if(strcmp(name, "topology.pon_mode")==0)
+        {
+            if(strcmp(value, "gpon")==0)
+                p_params->topo_params.pon_mode = BCM_TOPO_PON_MODE_GPON;
+            else if(strcmp(value, "xgpon")==0)
+                p_params->topo_params.pon_mode = BCM_TOPO_PON_MODE_XGPON;
+            else if(strcmp(value, "xgs")==0)
+                p_params->topo_params.pon_mode = BCM_TOPO_PON_MODE_XGS;
+            else if(strcmp(value, "epon_tdma")==0)
+                p_params->topo_params.pon_mode = BCM_TOPO_PON_MODE_EPON_TDMA;
+            else if(strcmp(value, "epon_1g")==0)
+                p_params->topo_params.pon_mode = BCM_TOPO_PON_MODE_EPON_1G;
+            else if(strcmp(value, "epon_10g")==0)
+                p_params->topo_params.pon_mode = BCM_TOPO_PON_MODE_EPON_10G;
+        }
+        else if(strcmp(name, "mac_loopback")==0)
+        {
+            if(strcmp(value, "y")==0)
+            {
+                p_params->loopback_modes_bit_mask |= BIT_FIELD_MAC_IN_LOOPBACK;
+            }
+        }
+#ifdef OMCI_SVC
+        else if(strcmp(name, "omci_loopback")==0)
+        {
+            if(strcmp(value, "y")==0)
+            {
+                omci_svc_set_loopback(BCMOS_TRUE);
+            }
+        }
+#endif
+        else if(strncmp(name, "autoneg_nni", 11)==0)
+        {
+            int intf_id = atoi(name+11);
+            if ((unsigned)intf_id >= BAL_API_MAX_INTF_ID)
+            {
+                printf("error: %s: NNI %d is invalid, ignored", name, intf_id);
+                continue;
+            }
+            if(strcmp(value, "y")==0)
+            {
+                p_params->nni_autoneg_bit_mask |= (1 << intf_id);
+            }
+        }
+
+        else
+        {
+            printf("%s/%s: Unknown name/value config file pair!\n",name, value);
+        }
+    }//while
+
+    printf("\n");
+
+    /* Close file */
+    fclose (fp);
+}
+
+static bcmos_errno bal_rpc_soc_gen(void)
+{
+#ifndef TEST_SW_UTIL_LOOPBACK
+#ifdef CONFIG_SWITCH_RPC
+    char cmd[MAX_CMD_LINE_LEN];
+    FILE *fp = fopen (RPC_SOC_TEMPLATE_FILE_NAME, "r");
+    int rc;
+
+    if (fp == NULL)
+    {
+        printf("%s not found\n", RPC_SOC_TEMPLATE_FILE_NAME);
+        return BCM_ERR_NOENT;
+    }
+    fclose (fp);
+
+    snprintf(cmd, MAX_CMD_LINE_LEN, "sed -e \"s/\\\\\\$DIP\\\\$/%s/\" %s > %s",
+        bal_config_params.sw_rpc_ip, RPC_SOC_TEMPLATE_FILE_NAME, RPC_SOC_FILE_NAME);
+    rc = system(cmd);
+    if (rc || WEXITSTATUS(rc))
+    {
+        printf("Failed to generate %s from %s\n", RPC_SOC_FILE_NAME, RPC_SOC_TEMPLATE_FILE_NAME);
+        return BCM_ERR_INTERNAL;
+    }
+#endif
+#endif
+    return BCM_ERR_OK;
+}
+
+
+uint16_t bcmbal_num_nni_ports_get(void)
+{
+    return bal_config_params.num_nni_ports;
+}
+
+bcmos_bool bcmbal_is_mac_in_loopback(void)
+{
+    return IS_MAC_IN_LOOPBACK(bal_config_params.loopback_modes_bit_mask);
+}
+
+bcmos_bool bcmbal_is_nni_autoneg_on(bcmbal_intf_id intf_id)
+{
+    return IS_NNI_INTF_AUTONEG_ON(bal_config_params.nni_autoneg_bit_mask, intf_id);
+}
+
+/* Get supported command line argument list */
+int bcmbal_supported_args_get(cl_argument supported_args[], int size)
+{
+    int i;
+    for (i=0; i<BCM_SIZEOFARRAY(supported_cl_args); i++)
+    {
+        if (i < size)
+            supported_args[i] = supported_cl_args[i];
+    }
+    return i;
+}
+
+/* Get BAL configuration */
+const bcmbal_config_params *bcmbal_config_get(void)
+{
+    return &bal_config_params;
+}
+
+/*@}*/
diff --git a/bal_release/src/core/main/bal_core.h b/bal_release/src/core/main/bal_core.h
new file mode 100644
index 0000000..4410c47
--- /dev/null
+++ b/bal_release/src/core/main/bal_core.h
@@ -0,0 +1,117 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *
+ *  :>
+ *
+ *****************************************************************************/
+
+/**
+ * @file bal_core.h
+ * @brief The include files common to all core files
+ *
+ * @addtogroup ctrlr
+ */
+
+
+#ifndef	COREMAIN_H
+#define	COREMAIN_H
+
+/*@{*/
+#include <bcmos_system.h>
+#include <bal_objs.h>
+#ifdef ENABLE_LOG
+#include <bcm_dev_log.h>
+#endif
+#include <bcm_topo.h>
+#include <cmdline.h>
+
+extern dev_log_id log_id_core;
+
+
+#define BIT_FIELD_MAC_IN_LOOPBACK       0x01
+#define BIT_FIELD_SWITCH_IN_LOOPBACK    0x02
+#define IS_MAC_IN_LOOPBACK(config)      ((config) & BIT_FIELD_MAC_IN_LOOPBACK)
+#define IS_NNI_INTF_AUTONEG_ON(config, intf)      (config & (1 << intf))
+
+typedef struct bcmbal_config_params
+{
+    bcmbal_iwf_mode iwf_mode;
+    uint32_t        intf_maptable;
+    uint32_t        trap_udp_port;
+    uint16_t        num_nni_ports;
+    uint32_t        ds_sched_mode;
+    uint32_t        pkt_send_svr_listen_port;  /* The port number where the bcm.user process listens for packet send messages from the core */
+    uint8_t         loopback_modes_bit_mask;   /* mac | switch | something else  in loopback mode */
+    bcm_topo_params topo_params;
+    uint32_t        nni_autoneg_bit_mask;      /* NNI autoneg is ON */
+
+    /*
+     * IP:Port strings specifying IP:Port assignments of the queues
+     * required for IPC between BAL components
+     */
+    const char *core_mgmt_ip_port;
+    const char *balapi_mgmt_ip_port;
+    const char *mac_rpc_ip_port;
+    const char *sw_rpc_ip;
+
+    /* CLI session configuration */
+    bcmcli_access_right access;
+    bcmcli_line_edit_mode edit_mode;
+    const char *init_script;
+
+    /* Logger parameters */
+    bcmos_bool disable_log;
+    const char *log_file_name;
+    bcmos_bool log_syslog;
+} bcmbal_config_params;
+
+extern bcmos_errno bcmbal_init(void);
+extern void bcmbal_finish(void);
+extern int bcmbal_supported_args_get(cl_argument supported_args[], int size);
+extern bcmos_errno bcmbal_cmdline_parse(int argc, char *argv[]);
+extern bcmos_errno bcmbal_log_init(void);
+extern const bcmbal_config_params *bcmbal_config_get(void);
+
+typedef void (* bcmbal_exit_cb)(void);
+
+/* Top-level initialization sequence
+ * - parse commend line
+ * - initialize OS abstraction
+ * - initialize logger
+ * - initialize BAL core and utils
+ * - initialize BAL CLI
+ */
+extern bcmos_errno bcmbal_init_all(int argc, char *argv[], bcmbal_exit_cb exit_cb);
+
+extern bcmos_bool bcmbal_is_mac_in_loopback(void);
+
+extern bcmos_bool bcmbal_is_nni_autoneg_on(bcmbal_intf_id intf_id);
+
+/*@}*/
+
+#endif /*COREMAIN_H*/
+
diff --git a/bal_release/src/core/main/bal_worker.c b/bal_release/src/core/main/bal_worker.c
new file mode 100644
index 0000000..98f50be
--- /dev/null
+++ b/bal_release/src/core/main/bal_worker.c
@@ -0,0 +1,793 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file bal_worker.c
+ * @brief Initialization and message handler functions for the BAL Core
+ *        worker thread including all core FSM initialization.
+ *
+ * @addtogroup ctrlr
+ */
+
+/*@{*/
+
+/* Project includes */
+#include <bcmos_system.h>
+#include <bal_api.h>
+#include <bal_msg.h>
+#include <bal_osmsg.h>
+#include "bal_worker.h"
+#include "acc_term_fsm.h"
+#include "flow_fsm.h"
+#include "group_fsm.h"
+#include "sub_term_fsm.h"
+#include "tm_sched_fsm.h"
+#include "tm_queue_fsm.h"
+#include "fsm_common.h"
+#include "bal_api_worker.h"
+#include "bal_obj_msg_pack_unpack.h"
+
+#include "bal_dpp_acc_term.h"
+#include "rsc_mgr.h"
+
+#include <arpa/inet.h>
+
+#ifdef ENABLE_LOG
+#include <bcm_dev_log.h>
+/*
+ * @brief The logging device id for the core
+ */
+extern dev_log_id log_id_core;
+#endif
+
+/* Local function declarations */
+static void core_mgmt_msg_handler(bcmos_module_id module_id, bcmos_msg *msg);
+static bcmos_errno process_mgmt_msg(void *msg_payload);
+static bcmos_errno process_util_msg(void *msg_payload);
+
+static int _bal_mgmt_rx_handler(long data);
+
+static bcmos_errno process_packet_object(void *msg_payload);
+
+/*
+ * @brief The BAL core management queue.  These are the queues through which the core 
+ * converses with the Public API. The remote endpoint of these queues are the 
+ * BAL API backend.
+ */
+static bcmos_msg_queue core_mgmt_queue;
+static bcmos_msg_queue core_api_queue;
+static bcmos_msg_queue core_api_ind_queue;
+bcmos_msg_queue *p_bal_core_queue;
+bcmos_msg_queue *p_bal_core_to_api_queue;
+bcmos_msg_queue *p_bal_core_to_api_ind_queue;
+
+/*
+ * @brief The rx thread for management message reception
+ */
+static bcmos_task rx_mgmt_thread;
+
+/*****************************************************************************/
+/**
+ * @brief Initialize the worker thread
+ *
+ * A Worker module function that initializes all of the data structures and
+ * FSMs associated with the BAL core.  This function called from bal_core_init
+ * during BAL core startup. 
+ *
+ *****************************************************************************/
+void core_worker_thread_init(void)
+{
+    /* 
+     * Initialize all of the worker thread hosted FSMs and the resource manager
+     */
+     
+    rsc_mgr_init();
+
+    tm_queue_fsm_init();
+		
+    tm_sched_fsm_init();
+
+    access_terminal_fsm_init();
+
+    flow_fsm_init();
+
+    sub_term_fsm_init();
+    
+    group_fsm_init();
+
+
+    return;
+}
+
+/*****************************************************************************/
+/**
+ * @brief Finish the worker thread
+ *
+ * A Worker module function that un-initializes all of the data structures and
+ * FSMs associated with the BAL core.  This function called from bal_core_init
+ * during BAL core cleanup on exit. 
+ *
+ *****************************************************************************/
+void core_worker_thread_finish(void)
+{
+    /*
+     * Un-initialize the worker thread owned data structures. etc.
+     */
+    bcmos_msg_unregister(BCMBAL_MGMT_MSG, 0, BCMOS_MODULE_ID_WORKER_MGMT);
+
+    bcmos_msg_unregister(BCMBAL_MAC_UTIL_MSG, 0, BCMOS_MODULE_ID_WORKER_MGMT);
+
+    bcmos_task_destroy(&rx_mgmt_thread);
+
+    sub_term_fsm_finish();
+
+    flow_fsm_finish();
+
+    group_fsm_finish();
+
+    tm_sched_fsm_finish();
+
+    tm_queue_fsm_finish();
+	
+    bcmos_msg_queue_destroy(&core_mgmt_queue);
+
+    if (p_bal_core_to_api_queue == &core_api_queue)
+        bcmos_msg_queue_destroy(p_bal_core_to_api_queue);
+
+    if (p_bal_core_to_api_ind_queue == &core_api_ind_queue)
+        bcmos_msg_queue_destroy(p_bal_core_to_api_ind_queue);
+ 
+    return;
+}
+
+
+/*****************************************************************************/
+/**
+ * @brief The BAL core management message queue init
+ *
+ * A initialization function for the worker module.
+ * It creates message queues for communication with API layer and UTILS
+ *
+ * @param mgmt_queue_info A pointer to the ip:port addresses required for the msg queues.
+ *             The ip:port addresses can be NULL in BAL_MONOLITHIC mode. In this case
+ *             inter-thread queues will be used for communication.
+ *
+ * @returns bcmos_errno
+ *
+ *****************************************************************************/
+bcmos_errno core_msg_queue_init(mgmt_queue_addr_ports *mgmt_queue_info)
+{
+    bcmos_msg_queue_parm msg_q_p = {};
+    bcmos_errno ret;
+
+    do
+    {
+        /* Create core queue. BAL core listens on this queue
+         * for public API calls and indications from the UTils
+         */
+        msg_q_p.name = "mgmt_rx_q";
+        if (NULL != mgmt_queue_info->core_mgmt_ip_port)
+        {
+            /* The queue allows sending from core_mgmt_ip_port and receiving at core_mgmt_ip_port */
+            msg_q_p.local_ep_address = mgmt_queue_info->core_mgmt_ip_port;
+            msg_q_p.remote_ep_address = mgmt_queue_info->core_mgmt_ip_port;
+            msg_q_p.ep_type = BCMOS_MSG_QUEUE_EP_UDP_SOCKET;
+        }
+        else
+        {
+            msg_q_p.ep_type = BCMOS_MSG_QUEUE_EP_LOCAL;
+        }
+        ret = bcmos_msg_queue_create(&core_mgmt_queue, &msg_q_p);
+        if (BCM_ERR_OK != ret)
+        {
+            BCM_LOG(ERROR, log_id_core, "Couldn't create rx mgmt queue\n");
+            break;
+        }
+        p_bal_core_queue = &core_mgmt_queue;
+#ifdef BAL_MONOLITHIC
+        if (NULL == mgmt_queue_info->core_mgmt_ip_port)
+            p_balapi_to_core_queue = p_bal_core_queue;
+#endif
+
+        /* Now create a TX queue for sending replies from the core to API.
+         * Only do it if using socket transport. In case of inter-thread queues
+         * it will be created by API layer
+         */
+        if (NULL != mgmt_queue_info->balapi_mgmt_ip_port)
+        {
+            uint16_t portnum;
+            char *p_portnum_str;
+            char balapi_ind_port_str[256];
+
+            msg_q_p.name = "mgmt_to_api_q";
+            msg_q_p.local_ep_address = NULL;
+            msg_q_p.remote_ep_address = mgmt_queue_info->balapi_mgmt_ip_port;
+            msg_q_p.ep_type = BCMOS_MSG_QUEUE_EP_UDP_SOCKET;
+            ret = bcmos_msg_queue_create(&core_api_queue, &msg_q_p);
+            if (BCM_ERR_OK != ret)
+            {
+                BCM_LOG(ERROR, log_id_core, "Couldn't create tx mgmt queue\n");
+                break;
+            }
+            p_bal_core_to_api_queue = &core_api_queue;
+
+            /*
+             * make a copy of the user chosen bal api mgmt port
+             */
+            strcpy(balapi_ind_port_str, mgmt_queue_info->balapi_mgmt_ip_port);
+
+            /* Find the port number */
+            p_portnum_str = strchr(balapi_ind_port_str, ':') + 1;
+
+            /* convert to an integer and increment it by one */
+            portnum = atoi(p_portnum_str) + 1;
+
+            /* create the new string defining the BAL API indication port */
+            sprintf(p_portnum_str,"%d", portnum);
+
+            /* Create core->API indication queue
+             */
+            msg_q_p.name = "mgmt_ind_q";
+
+            /* Set up the management IP:port access parameters to allow the core to send indications to
+             * the BAL public API - this is a TX queue only!. 
+             */
+            msg_q_p.local_ep_address = NULL;
+            msg_q_p.remote_ep_address = balapi_ind_port_str;
+            msg_q_p.ep_type = BCMOS_MSG_QUEUE_EP_UDP_SOCKET;
+
+            ret = bcmos_msg_queue_create(&core_api_ind_queue, &msg_q_p);
+            if (BCM_ERR_OK != ret)
+            {
+                BCM_LOG(ERROR, log_id_core, "Couldn't create the core tx indication queue\n");
+                break;
+            }
+
+            BCM_LOG(DEBUG, log_id_core, "Created the core tx indication queue\n");
+
+            p_bal_core_to_api_ind_queue = &core_api_ind_queue;
+        }
+    } while (0);
+
+    return ret;
+}
+
+
+/*****************************************************************************/
+/**
+ * @brief The BAL core management worker module init
+ *
+ * A initialization function for the worker module.
+ * It registers for messages that this module is expected to process.
+ *
+ * @returns bcmos_errno
+ *
+ *****************************************************************************/
+bcmos_errno _bal_worker_mgmt_module_init(long data)
+{
+
+    bcmos_task_parm task_p = {};
+    bcmos_errno ret = BCM_ERR_OK;
+
+    do
+    {
+
+        /* Create Mgmt RX thread */
+        task_p.name = "mgmt_mgmt_rx";
+        task_p.priority = TASK_PRIORITY_IPC_RX;
+        task_p.handler = _bal_mgmt_rx_handler;
+        task_p.data = (long)p_bal_core_queue;
+
+        ret = bcmos_task_create(&rx_mgmt_thread, &task_p);
+        if (ret)
+        {
+            BCM_LOG(ERROR, log_id_core, "Couldn't create Mgmt RX thread\n");
+            break;
+        }
+
+        /* Register the message types to be handled by the mgmt module
+         */
+        bcmos_msg_register(BCMBAL_MGMT_MSG, 0, BCMOS_MODULE_ID_WORKER_MGMT, core_mgmt_msg_handler);
+        bcmos_msg_register(BCMBAL_MAC_UTIL_MSG, 0, BCMOS_MODULE_ID_WORKER_MGMT, core_util_msg_handler);
+    }
+    while(0);
+
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief Mgmt RX handler
+ *
+ * This handler is executed in the context of an RX thread.  It's purpose 
+ * is to dispatch the message received here to the module that has registered
+ * to process this message.  The message is then processed in the context 
+ * of the thread to which that module is attached.
+ *
+ * @param data A pointer to the received message
+ *
+ * @returns 0 on success, -EINVAL on failure
+ *
+ *****************************************************************************/
+static int _bal_mgmt_rx_handler(long data)
+{
+    bcmos_msg_queue *rxq = (bcmos_msg_queue *)data;
+    bcmos_task *my_task = bcmos_task_current();
+    void *payload;
+    bcmos_msg *msg;
+    bcmos_errno ret = BCM_ERR_OK;
+
+    while (!my_task->destroy_request)
+    {
+        payload = NULL;
+        ret = bcmbal_msg_recv(rxq, BCMOS_WAIT_FOREVER, &payload);
+        if (ret)
+        {
+            /* Unexpected failure */
+            BCM_LOG(ERROR, log_id_core, "bcmbal_msg_recv() -> %s\n", bcmos_strerror(ret));
+            continue;
+        }
+
+        /* Message received */
+        BCM_LOG(DEBUG, log_id_core, "bcmbal_msg_recv(%p) -> %s\n", payload, bcmos_strerror(ret));
+
+       /* 
+         * Got a message, so now dispatch it.  This will result in one
+         * of the modules (registered for the message being processed)
+         * executing its message callback handler.
+         *
+         */
+        msg = bcmbal_bcmos_hdr_get(payload);
+        ret = bcmos_msg_dispatch(msg, BCMOS_MSG_SEND_AUTO_FREE);
+        if (ret)
+        {
+            BCM_LOG(ERROR, log_id_core, 
+                    "Couldn't dispatch message %d:%d\n", 
+                    (int)msg->type, (int)msg->instance);
+        }
+    }
+
+    my_task->destroyed = BCMOS_TRUE;
+
+    return (BCM_ERR_OK == ret) ? 0 : -EINVAL;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The BAL core management message handler
+ *
+ * A function that handlers messages received from the
+ * BAL public API via an RX thread.
+ *
+ * This function executes in the context of the worker thread.
+ *
+ * @param module_id  The index of the module that this message handler
+ *                   is associated with.
+ *
+ * @param msg        A pointer to the received message to be processed
+ *
+ *****************************************************************************/
+static void core_mgmt_msg_handler(bcmos_module_id module_id, bcmos_msg *msg)
+{
+
+    void *msg_payload;
+
+    /* Parameter checks */
+    BUG_ON(NULL == msg);
+
+    /*
+     * @to-do 
+     * validate the message major and minor version is correct
+     */
+
+    /*
+     * Point to the message payload for further processing
+     */
+    msg_payload = bcmbal_payload_ptr_get(bcmbal_bal_hdr_get_by_bcmos_hdr(msg));
+
+    /*
+     * These are messages from the BAL Public API or the UTILS
+     *
+     * - call into appropriate FSM
+     *    
+     */
+    BCM_LOG(DEBUG, log_id_core, "Received a mgmt message (payload at %p)\n", msg_payload);
+
+
+    if(BCMBAL_MGMT_MSG == bcmbal_type_major_get(msg_payload) && 
+       BAL_SUBSYSTEM_PUBLIC_API == bcmbal_sender_get(msg_payload))
+    {
+        /* Process the message */
+        process_mgmt_msg(msg_payload);
+    }
+    else
+    {
+        BCM_LOG(FATAL, log_id_core, "message received with wrong major type/subsystem combination (%d/\%d)\n", 
+                bcmbal_type_major_get(msg_payload),
+                bcmbal_sender_get(msg_payload));
+
+        BUG_ON(BCMOS_TRUE);
+    }
+
+}
+
+/*****************************************************************************/
+/**
+ * @brief The BAL core management message processing function
+ *
+ * A Worker module function that handles messages received from the
+ * BAL public API or UTILs via an RX thread.
+ *
+ * This function executes in the context of the worker thread
+ *
+ * @param msg_payload A pointer to the message to be processed
+ *
+ * @returns bcmos_errno
+ *
+ *****************************************************************************/
+static bcmos_errno process_mgmt_msg(void *msg_payload)
+{
+
+    bcmos_errno ret = BCM_ERR_OK;
+    bcmbal_obj_id objtype;
+
+    BCM_LOG(DEBUG, log_id_core, "Processing a management message\n");
+
+    objtype = bcmbal_msg_id_obj_get(msg_payload);
+
+    /*
+     * Process the message based on the type of BAL object and sender
+     * in the message.
+     */
+    switch(objtype)
+    {
+        case BCMBAL_OBJ_ID_FLOW:
+        {
+            ret = process_flow_object(msg_payload);
+            break;                
+        }
+        
+        case BCMBAL_OBJ_ID_GROUP:
+        {
+            ret = process_group_object(msg_payload);
+            break;                
+        }
+
+        case BCMBAL_OBJ_ID_ACCESS_TERMINAL:
+        {
+            ret = process_access_terminal_object(msg_payload);
+            break;
+        }
+
+        case BCMBAL_OBJ_ID_INTERFACE:
+        {
+            ret = process_interface_object(msg_payload);
+            break;
+        }
+
+        case BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL:
+        {
+            ret = process_subscriber_terminal_object(msg_payload);
+            break;
+        }
+
+        case BCMBAL_OBJ_ID_PACKET:
+        {
+
+            ret = process_packet_object(msg_payload);
+
+            /* We respond to the BAL public API backend with a result. We always 
+             * send a complete msg_payload back to the API, but the data portion 
+             * of the object is only relevant when a GET or GET-STATS has been requested.
+             */
+            mgmt_msg_send_balapi_rsp(ret, msg_payload, ((bcmbal_obj *)msg_payload)->type, log_id_core);
+    
+            break;
+ 
+        }
+
+        case BCMBAL_OBJ_ID_TM_SCHED:
+        {
+            ret = process_tm_sched_object(msg_payload);
+            break;				 
+        }
+		
+        case BCMBAL_OBJ_ID_TM_QUEUE:
+        {
+            ret = process_tm_queue_object(msg_payload);
+            break;				 
+        }
+
+        default:
+        {
+            BCM_LOG(ERROR, log_id_core, 
+                    "Unsupported object detected in management message\n");
+            ret = BCM_ERR_NOT_SUPPORTED;
+
+            /* We respond to the BAL public API backend with a result. We always 
+             * send a complete msg_payload back to the API, but the data portion 
+             * of the object is only relevant when a GET or GET-STATS has been requested.
+             */
+            mgmt_msg_send_balapi_rsp(ret, msg_payload, ((bcmbal_obj *)msg_payload)->type, log_id_core);
+    
+            break;
+        }
+    }
+    bcmbal_msg_free(msg_payload);
+
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The BAL core util message handler
+ *
+ * A function that handlers messages received from the
+ * BAL utils via an RX thread.
+ *
+ * This function executes in the context of the worker thread.
+ *
+ * @param module_id  The index of the module that this message handler
+ *                   is associated with.
+ *
+ * @param msg        A pointer to the received message to be processed
+ *
+ *****************************************************************************/
+void core_util_msg_handler(bcmos_module_id module_id, bcmos_msg *msg)
+{
+
+    void *msg_payload;
+
+    /* Parameter checks */
+    BUG_ON(NULL == msg);
+
+    /*
+     * @to-do 
+     * validate the message major and minor version is correct
+     */
+
+    /*
+     * Point to the message payload for further processing
+     */
+    msg_payload = bcmbal_payload_ptr_get(bcmbal_bal_hdr_get_by_bcmos_hdr(msg));
+
+    /*
+     * These are messages from the BAL Utils
+     *
+     * - call into appropriate FSM
+     *    
+     */
+    BCM_LOG(DEBUG, log_id_core, "Received a Util message (payload at %p)\n", msg_payload);
+
+    if(BCMBAL_MAC_UTIL_MSG == bcmbal_type_major_get(msg_payload) &&
+       BAL_SUBSYSTEM_MAC_UTIL == bcmbal_sender_get(msg_payload))
+    {           
+        /* Process the message */
+        process_util_msg(msg_payload);
+
+    }
+    else
+    {
+        BCM_LOG(FATAL, log_id_core, "message received with wrong major type/subsystem combination (%d/\%d)\n", 
+                bcmbal_type_major_get(msg_payload),
+                bcmbal_sender_get(msg_payload));
+
+        BUG_ON(BCMOS_TRUE);
+    }
+}
+
+/*****************************************************************************/
+/**
+ * @brief The BAL core util message processing function
+ *
+ * A Worker module function that handles messages received from the
+ * BAL utils via an RX thread.
+ *
+ * This function executes in the context of the worker thread
+ *
+ * @param msg_payload A pointer to the message to be processed
+ *
+ * @returns bcmos_errno
+ *
+ *****************************************************************************/
+static bcmos_errno process_util_msg(void *msg_payload)
+{
+
+    bcmos_errno ret = BCM_ERR_OK;
+    bcmbal_obj_id objtype;
+
+    BCM_LOG(DEBUG, log_id_core, "Processing a util message\n");
+
+    objtype = bcmbal_msg_id_obj_get(msg_payload);
+
+    /*
+     * Process the util message based on the type of BAL object
+     * in the message.
+     */
+    switch(objtype)
+    {
+        case BCMBAL_OBJ_ID_FLOW:
+        {
+            ret = process_flow_util_msg(msg_payload);
+            break;                
+        }
+        
+        case BCMBAL_OBJ_ID_GROUP:
+        {
+            ret = process_group_util_msg(msg_payload);
+            break;                
+        }
+
+
+        case BCMBAL_OBJ_ID_ACCESS_TERMINAL:
+        {
+            ret = process_access_terminal_util_msg(msg_payload);
+            break;
+        }
+
+        case BCMBAL_OBJ_ID_INTERFACE:
+        {
+            ret = process_interface_util_msg(msg_payload);
+            break;
+        }
+
+        case BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL:
+        {
+            ret = process_subscriber_terminal_util_msg(msg_payload);
+            break;
+        }
+
+        case BCMBAL_OBJ_ID_TM_SCHED:
+        {
+            ret = process_tm_sched_util_msg(msg_payload);
+            break;
+        }
+
+        default:
+        {
+            BCM_LOG(ERROR, log_id_core, 
+                    "Unsupported object detected in message received from util\n");
+            ret = BCM_ERR_NOT_SUPPORTED;
+
+            break;
+        }
+    }
+    /*
+     * Free the message after processing
+     */
+    bcmbal_msg_free(msg_payload);
+
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The BAL core "packet send" message processing function
+ *
+ * A Worker module function that handles packet send messages received from the
+ * BAL public API via an RX thread.
+ *
+ * This function executes in the context of the worker thread
+ *
+ * @param msg_payload A pointer to the message to be processed
+ *
+ * @returns bcmos_errno
+ *
+ *****************************************************************************/
+static bcmos_errno process_packet_object(void *msg_payload)
+{
+
+    bcmos_errno ret = BCM_ERR_OK;
+    uint8_t *p_user_pkt;
+    uint16_t user_pkt_len;
+    uint8_t dst_port_id;
+    bcmos_bool b_port_id_is_nni;
+    bcmbal_packet_cfg *p_packet_obj;
+    uint16_t tunnel_tag_vlan_id = 0;
+ 
+    BCM_LOG(DEBUG, log_id_core, "Processing a \"Packet send\" message\n");
+
+    p_packet_obj = (bcmbal_packet_cfg *)msg_payload;
+    
+    /* Extract the length of the user packet to be proxied */
+    user_pkt_len = p_packet_obj->data.pkt.len;
+
+    /* Derive a pointer to the user packet */
+    p_user_pkt = p_packet_obj->data.pkt.val;
+
+    BCM_LOG(DEBUG, log_id_core, "user packet first 12 bytes %02X%02X%02X%02X%02X%02X %02X%02X%02X%02X%02X%02X\n",
+            p_user_pkt[0], p_user_pkt[1], p_user_pkt[2], p_user_pkt[3], p_user_pkt[4], p_user_pkt[5], 
+            p_user_pkt[6], p_user_pkt[7], p_user_pkt[8], p_user_pkt[9], p_user_pkt[10], p_user_pkt[11]);
+
+    /* Is this packet destined to an NNI or PON port? */
+    b_port_id_is_nni = (BCMBAL_DEST_TYPE_NNI == p_packet_obj->key.packet_send_dest.type) ?
+        BCMOS_TRUE : BCMOS_FALSE;
+
+    /*
+     * Process the message based on the type of BAL object
+     * in the message.
+     */
+    switch(p_packet_obj->hdr.hdr.obj_type)
+    {
+        case BCMBAL_OBJ_ID_PACKET:
+        {
+            
+            dst_port_id = (BCMOS_TRUE == b_port_id_is_nni) ? 
+                          (p_packet_obj->key.packet_send_dest.u.nni.int_id) :
+                          (p_packet_obj->key.packet_send_dest.u.sub_term.int_id);
+            if(BCMOS_FALSE == b_port_id_is_nni)
+            {
+                 /*
+                 * Packets destined to a PON interface require a tunnel tag
+                 *
+                 * Get the svc_port_id for the first flow on the subscriber terminal (if there is one)
+                 */
+                if(BCM_ERR_OK != svc_port_id_for_sub_term_ds_flow_get(p_packet_obj->key.packet_send_dest.u.sub_term.int_id,
+                                                                      p_packet_obj->key.packet_send_dest.u.sub_term.sub_term_id,
+                                                                      p_packet_obj->key.packet_send_dest.u.sub_term.sub_term_uni,
+                                                                      &tunnel_tag_vlan_id))
+                {
+                    BCM_LOG(ERROR, 
+                            log_id_core, 
+                            "Packet send could not find any downstream FLOW to send packet for sub_term_id %d (PON %d)\n",
+                            p_packet_obj->key.packet_send_dest.u.sub_term.sub_term_id,
+                            p_packet_obj->key.packet_send_dest.u.sub_term.int_id);                   
+                    ret = BCM_ERR_NOENT;
+                    break;
+                }    
+              
+            }
+            
+            ret = sw_util_pkt_send(dst_port_id, 
+                                  (b_port_id_is_nni ? REASON_SEND_TO_NNI : REASON_SEND_TO_PON),
+                                   p_user_pkt, 
+                                   user_pkt_len,
+                                   (int)tunnel_tag_vlan_id);       
+        }
+        break;                
+            
+        default:
+        {
+            BCM_LOG(ERROR, log_id_core, 
+                    "Unsupported object detected in \"packet send\" message\n");
+            ret = BCM_ERR_NOT_SUPPORTED;
+        }
+        break;
+
+    }
+    /*
+     * NOTE: DO NOT free the message after processing here.  It is freed in the calling function
+     */
+ 
+    return ret;
+}
+
+/*@}*/
diff --git a/bal_release/src/core/main/bal_worker.h b/bal_release/src/core/main/bal_worker.h
new file mode 100644
index 0000000..a0df6ae
--- /dev/null
+++ b/bal_release/src/core/main/bal_worker.h
@@ -0,0 +1,72 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file bal_worker.h
+ * 
+ * @brief Bal worker thread include file
+ * 
+ * Module contains the data structures and functions used to support the 
+ * BAL core worker thread.
+ *
+ * @defgroup ctrlr Core Controller
+ * @ingroup core
+ *
+ */
+
+#ifndef	BALWORKER_H
+#define	BALWORKER_H
+
+/*@{*/
+
+#include <bcmos_errno.h>
+#include <bal_api.h>
+
+/* Transmit Queues to and from BAL core */
+extern bcmos_msg_queue *p_bal_core_to_api_queue;
+extern bcmos_msg_queue *p_bal_core_to_api_ind_queue;
+
+/*
+ * Function declarations
+ */
+extern bcmos_errno _bal_worker_mgmt_module_init(long data);
+extern bcmos_errno _bal_worker_util_module_init(long data);
+
+extern bcmos_errno core_msg_queue_init(mgmt_queue_addr_ports *msg_queue_info);
+extern void core_worker_thread_init(void);
+extern void core_worker_thread_finish(void);
+
+extern void core_util_msg_handler(bcmos_module_id module_id, bcmos_msg *msg);
+
+
+/*@}*/
+
+#endif /* BALWORKER_H */
diff --git a/bal_release/src/core/main/flow_fsm.c b/bal_release/src/core/main/flow_fsm.c
new file mode 100644
index 0000000..f7ee71a
--- /dev/null
+++ b/bal_release/src/core/main/flow_fsm.c
@@ -0,0 +1,2556 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file flow_fsm.c
+ * @brief Code to support the BAL flow FSM
+ *
+ * @addtogroup flow
+ *
+ */
+
+/*@{*/
+
+#include <bcmos_system.h>
+#include <flow_fsm.h>
+#include <tm_sched_fsm.h>
+#include <tm_queue_fsm.h>
+
+
+#include <bal_msg.h>
+#include <bal_osmsg.h>
+#include "bal_worker.h"
+#include "bal_mac_util.h"
+#include "bal_switch_util.h"
+#include "rsc_mgr.h"
+
+#include <bal_objs.h>
+#include <fsm_common.h>
+#include <bal_switch_flow.h>
+
+#ifdef ENABLE_LOG
+#include <bcm_dev_log.h>
+
+ /*
+ * @brief The logging device id for flow
+ */
+static dev_log_id log_id_flow;
+#endif
+
+/* local function declarations */
+static bcmos_errno flow_fsm_admin_up_start(flow_inst *p_flow_inst, 
+                                           void *msg, 
+                                           flow_fsm_event *p_event);
+
+static bcmos_errno flow_fsm_admin_up_error(flow_inst *p_flow_inst, 
+                                           void *msg, 
+                                           flow_fsm_event *p_event);
+
+static bcmos_errno flow_fsm_admin_dn_start(flow_inst *p_flow_inst, 
+                                           void *msg, 
+                                           flow_fsm_event *p_event);
+
+static bcmos_errno flow_fsm_admin_dn_ok(flow_inst *p_flow_inst, 
+                                        void *msg, 
+                                        flow_fsm_event *p_event);
+
+static bcmos_errno flow_fsm_admin_dn_error(flow_inst *p_flow_inst, 
+                                           void *msg, 
+                                           flow_fsm_event *p_event);
+
+static bcmos_errno flow_fsm_ignore_util_msg(flow_inst *p_flow_inst, 
+                                           void *msg, 
+                                           flow_fsm_event *p_event);
+
+static bcmos_errno flow_fsm_removing_process_util_msg(flow_inst *p_flow_inst, 
+                                                     void *msg, 
+                                                     flow_fsm_event *p_event);
+
+static bcmos_errno flow_fsm_removing_process_util_auto_msg(flow_inst *p_flow_inst, 
+                                                          void *msg, 
+                                                          flow_fsm_event *p_event);
+
+static bcmos_errno flow_fsm_null_process_util_auto_msg(flow_inst *p_flow_inst, 
+                                                      void *msg, 
+                                                      flow_fsm_event *p_event);
+
+static bcmos_errno flow_fsm_process_util_msg(flow_inst *p_flow_inst, 
+                                                        void *msg, 
+                                                        flow_fsm_event *p_event);
+
+static bcmos_errno flow_fsm_process_util_auto_msg(flow_inst *p_flow_inst, 
+                                                             void *msg, 
+                                                             flow_fsm_event *p_event);
+
+static bcmos_errno flow_fsm_clear_start(flow_inst *p_flow_inst, 
+                                                             void *msg, 
+                                                             flow_fsm_event *p_event);
+
+
+static bcmos_errno flow_fsm_state_err(flow_inst *p_flow_inst, 
+                                      void *msg, 
+                                      flow_fsm_event *p_event);
+
+static bcmos_errno flow_fsm_exec(flow_inst *p_flow_inst, flow_fsm_event *p_event);
+
+static flow_inst *flow_inst_get(bcmbal_flow_key *key, flow_flag search_flag, bcmos_bool *is_new_flow);
+
+
+#ifdef FREE_FLOW_BY_KEY_SUPPORTED
+static bcmos_errno flow_free_by_key(bcmbal_flow_key *key);
+#endif
+static bcmos_errno flow_free_by_entry(flow_inst *p_entry);
+
+static bcmos_errno flow_tm_get(bcmbal_flow_cfg *p_flow_info, tm_sched_inst **p_tm_sched_inst);
+static bcmos_errno flow_queue_validate(bcmbal_flow_cfg *p_flow_cfg, tm_queue_inst **p_tm_queue_inst);
+
+
+/*
+ * @brief The Global flow fsm context data structure
+ */
+static flow_fsm_ctx g_flow_fsm_flow_list_ctx;
+
+/*
+ * Macros for flow ctx access
+ */
+#define FLOW_FSM_FLOW_LIST_CTX      (g_flow_fsm_flow_list_ctx)
+#define FLOW_FSM_FLOW_LIST_CTX_PTR  (&g_flow_fsm_flow_list_ctx)
+
+/*
+ *  @brief The definition of a flow FSM state processing function
+ */
+typedef bcmos_errno (* flow_fsm_state_processor)(flow_inst *, void *, flow_fsm_event *);
+
+/*
+ *  @brief The Flow FSM state processing array
+ */
+static flow_fsm_state_processor flow_states[FLOW_FSM_STATE__NUM_OF][FLOW_FSM_EVENT_TYPE__NUM_OF] =
+{
+ 
+    [FLOW_FSM_STATE_NULL] = 
+    {        
+        /*
+         * Next state: CONFIGURING
+         */ 
+        [FLOW_FSM_EVENT_TYPE_ADMIN_UP]     = flow_fsm_admin_up_start,   
+
+        /* 
+         * Next state: NULL 
+         */   
+        [FLOW_FSM_EVENT_TYPE_ADMIN_DN]     = flow_fsm_admin_dn_ok,
+
+        /* 
+         * Next state: NULL 
+         */
+        [FLOW_FSM_EVENT_TYPE_UTIL_MSG]      = flow_fsm_ignore_util_msg,
+
+        /* 
+         * Next state: NULL 
+         */
+        [FLOW_FSM_EVENT_TYPE_UTIL_AUTO_MSG] = flow_fsm_null_process_util_auto_msg,
+    },
+    [FLOW_FSM_STATE_CONFIGURING] =                                        
+    {   
+        /*
+         * Next state: CONFIGURING
+         */ 
+        [FLOW_FSM_EVENT_TYPE_ADMIN_UP]     = flow_fsm_admin_up_start,   
+
+        /* 
+         * Next state: CONFIGURING 
+         */   
+        [FLOW_FSM_EVENT_TYPE_ADMIN_DN]     = flow_fsm_admin_dn_start,
+
+        /* 
+         * Next state: CONFIGURING | CONFIGURED 
+         */
+        [FLOW_FSM_EVENT_TYPE_UTIL_MSG]      = flow_fsm_process_util_msg,
+
+        /* 
+         * Next state: REMOVING
+         */
+        [FLOW_FSM_EVENT_TYPE_REMOVE]     = flow_fsm_clear_start,
+
+        /* 
+         * Next state: CONFIGURING 
+         */
+        [FLOW_FSM_EVENT_TYPE_UTIL_AUTO_MSG] = flow_fsm_process_util_auto_msg,
+
+    },
+
+    [FLOW_FSM_STATE_CONFIGURED] =                                         
+    {     
+        /*
+         * Next state: CONFIGURED
+         */ 
+        [FLOW_FSM_EVENT_TYPE_ADMIN_UP]     = flow_fsm_admin_up_start,   
+
+        /* 
+         * Next state: CONFIGURING
+         */   
+        [FLOW_FSM_EVENT_TYPE_ADMIN_DN]     = flow_fsm_admin_dn_start,
+
+        /* 
+         * Next state: REMOVING
+         */
+        [FLOW_FSM_EVENT_TYPE_REMOVE]     = flow_fsm_clear_start,
+
+        /* 
+         * Next state: CONFIGURING
+         */
+        [FLOW_FSM_EVENT_TYPE_UTIL_MSG]      = flow_fsm_process_util_msg,
+
+        /* 
+         * Next state: CONFIGURED
+         */
+        [FLOW_FSM_EVENT_TYPE_UTIL_AUTO_MSG] = flow_fsm_process_util_auto_msg,
+
+    },
+
+    [FLOW_FSM_STATE_REMOVING] =                                      
+    {        
+        /*
+         * Next state: REMOVING 
+         */ 
+        [FLOW_FSM_EVENT_TYPE_ADMIN_UP]     = flow_fsm_admin_up_error,   
+
+        /* 
+         * Next state: REMOVING 
+         */   
+        [FLOW_FSM_EVENT_TYPE_ADMIN_DN]     = flow_fsm_admin_dn_error,
+
+         /* 
+         * Next state: REMOVING | NULL
+         */
+        [FLOW_FSM_EVENT_TYPE_UTIL_MSG]      = flow_fsm_removing_process_util_msg,
+
+        /* 
+         * Next state: REMOVING 
+         */
+        [FLOW_FSM_EVENT_TYPE_UTIL_AUTO_MSG] = flow_fsm_removing_process_util_auto_msg,
+    },
+
+};
+
+static char *state_name_str[] = 
+{
+    "FLOW_FSM_STATE_NULL",
+    "FLOW_FSM_STATE_CONFIGURING",
+    "FLOW_FSM_STATE_CONFIGURED",
+    "FLOW_FSM_STATE_REMOVING",
+};
+
+/* Ensure that the name array size matches the associated enum */
+BAL_STATIC_ASSERT (FLOW_FSM_STATE__LAST == (sizeof (state_name_str) / sizeof (char *)), flow_fsm_state);
+
+static char *flow_state_name_get(flow_fsm_state state)
+{
+    if(state < FLOW_FSM_STATE__LAST)
+    {
+        return state_name_str[state];
+    }
+    else
+    {
+        return "FLOW_UNKNOWN";
+    }
+}
+
+static char *event_name_str[] = 
+{
+    "FLOW_FSM_ADMIN_UP_EVENT",
+    "FLOW_FSM_ADMIN_DN_EVENT",
+    "FLOW_FSM_REMOVE_EVENT",
+    "FLOW_FSM_UTIL_MSG_EVENT",
+    "FLOW_FSM_UTIL_AUTO_MSG_EVENT",
+};
+
+/* Ensure that the name array size matches the associated enum */
+BAL_STATIC_ASSERT (FLOW_FSM_EVENT_TYPE__LAST == (sizeof (event_name_str) / sizeof (char *)), flow_fsm_event_type);
+
+static char *flow_event_name_get(flow_fsm_event_type event)
+{
+    if(event < FLOW_FSM_EVENT_TYPE__LAST)
+    {
+        return event_name_str[event];
+    }
+    else
+    {
+        return "FLOW_EVT_UNKNOWN";
+    }
+}
+
+/*****************************************************************************/
+/**
+ * @brief A function to initialize the current_flow_info object of the 
+ *        supplied entry.
+ *
+ * @param p_entry A pointer to the entry to be initialized
+ *
+ *
+ * @returns void
+ *****************************************************************************/
+static void flow_inst_entry_obj_init(flow_inst *p_entry)
+{
+    /* The actual key content is irrelevant for free flows */
+    bcmbal_flow_key key = { .flow_id = 0, .flow_type = BCMBAL_FLOW_TYPE_DOWNSTREAM };
+
+    BCMBAL_CFG_INIT(&p_entry->current_flow_info,
+                    flow,
+                    key);
+        
+    BCMBAL_CFG_PROP_SET(&p_entry->current_flow_info,
+                    flow,
+                    admin_state,
+                    BCMBAL_STATE_DOWN);
+
+    BCMBAL_CFG_PROP_SET(&p_entry->current_flow_info,
+                        flow,
+                        oper_status,
+                        BCMBAL_STATUS_DOWN);
+            
+    BCMBAL_OBJ_IN_PROGRESS_SET(&(p_entry->current_flow_info), BCMOS_FALSE);
+
+}
+
+/*****************************************************************************/
+/**
+ * @brief A function to initialize the Flow FSM infrastructure.
+ *  
+ *        NOTE: This is called once on startup and NOT for each FSM instance.
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+bcmos_errno flow_fsm_init(void)
+{
+    int ii;
+    flow_inst *new_entry;
+    bcmos_errno ret = BCM_ERR_OK;
+
+#ifdef ENABLE_LOG
+    log_id_flow = bcm_dev_log_id_register("FLOW", DEV_LOG_LEVEL_INFO, DEV_LOG_ID_TYPE_BOTH);
+    BUG_ON(log_id_flow == DEV_LOG_INVALID_ID);
+#endif
+
+    /* Initialize all of the flow queues */
+    TAILQ_INIT(&FLOW_FSM_FLOW_LIST_CTX_PTR->free_flow_list);
+    TAILQ_INIT(&FLOW_FSM_FLOW_LIST_CTX_PTR->active_flow_list);
+
+    /* Populate the free list with it's initial set of flows
+     */
+    for(ii=0; ii<FLOW_ALLOCATION_BLOCK_SIZE; ii++)
+    {
+        
+        new_entry = bcmos_calloc(sizeof(flow_inst));
+
+        if (NULL == new_entry)
+        {
+            BCM_LOG(FATAL, log_id_flow,  "Failed to initialize the flow free list - FATAL\n");
+            ret = BCM_ERR_NOMEM;
+            break;
+        }
+
+       flow_free_by_entry(new_entry);
+    }
+
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief A function to un-initialize the Flow FSM infrastructure.
+ *  
+ *        NOTE: This is called once on shutdown and NOT for each FSM instance.
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+bcmos_errno flow_fsm_finish(void)
+{
+
+    flow_inst *current_entry, *p_temp_entry;
+
+    /* Free all the entries on the active list */
+    TAILQ_FOREACH_SAFE(current_entry, 
+                       &FLOW_FSM_FLOW_LIST_CTX_PTR->active_flow_list, 
+                       flow_inst_next,
+                       p_temp_entry)
+    {
+        /* Remove it from the active list */
+        TAILQ_REMOVE(&FLOW_FSM_FLOW_LIST_CTX_PTR->active_flow_list, current_entry, flow_inst_next);
+
+        bcmos_free(current_entry);
+
+    }
+
+    /* Free all the entries on the free list */
+    TAILQ_FOREACH_SAFE(current_entry, 
+                       &FLOW_FSM_FLOW_LIST_CTX_PTR->free_flow_list, 
+                       flow_inst_next,
+                       p_temp_entry)
+    {
+        /* Remove it from the active list */
+        TAILQ_REMOVE(&FLOW_FSM_FLOW_LIST_CTX_PTR->free_flow_list, current_entry, flow_inst_next);
+
+        bcmos_free(current_entry);
+    }
+     
+    return BCM_ERR_OK;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Flow FSM state processing executive function
+ *
+ * @param p_flow_inst  Pointer to a flow instance
+ * @param p_event      Pointer to a flow event structure
+ * 
+ * @returns bcmos_errno 
+ *****************************************************************************/
+static bcmos_errno flow_fsm_exec(flow_inst *p_flow_inst, flow_fsm_event *p_event)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    flow_fsm_state pre_state; 
+    flow_fsm_state_processor flow_state_processor;     
+
+    /* Parameter checks */
+    BUG_ON(NULL == p_flow_inst);
+    BUG_ON(NULL == p_event);
+
+    /* Record the present state for debug printing
+     */
+    pre_state = p_flow_inst->fsm_state;
+
+    /*
+     * Get the state processing function 
+     */
+    flow_state_processor = flow_states[p_flow_inst->fsm_state][p_event->event_type];
+
+    /*
+     * If there's a state processing function for this event and state, execute it.
+     * Otherwise, process a generic error.
+     */
+    if (flow_state_processor)
+    {
+        ret = flow_state_processor(p_flow_inst, p_event->msg, p_event);
+    } else        
+    {
+        flow_fsm_state_err(p_flow_inst, p_event->msg, p_event);
+    }
+    
+    if(BCM_ERR_OK != ret)
+    {
+        BCM_LOG(ERROR, log_id_flow, "*** Error detected during state processing\n");
+        p_flow_inst->fsm_state = pre_state;
+    }
+
+    BCM_LOG(DEBUG, log_id_flow,  "*** Event %s, State: %s --> %s\n\n",
+            flow_event_name_get(p_event->event_type),
+            flow_state_name_get(pre_state), 
+            flow_state_name_get(p_flow_inst->fsm_state)); 
+
+    return ret;
+}
+
+
+
+
+/*****************************************************************************/
+/**
+ * @brief The Flow FSM state processing for a flow admin-up command received 
+ *        from the BAL Public API when the specified flow instance is in the 
+ *        admin-down state (i.e. when the flow instance FSM is in the NULL state).
+ *
+ * @param p_flow_inst      Pointer to an flow instance
+ * @param msg              Pointer to a BAL message received from the BAL Public API
+ * @param p_event          Pointer to an flow event structure
+ * 
+ * @returns bcmos_errno 
+ *****************************************************************************/
+static bcmos_errno flow_fsm_admin_up_start(flow_inst *p_flow_inst, 
+                                           void *msg, 
+                                           flow_fsm_event *p_event)
+{
+
+    bcmos_errno ret = BCM_ERR_OK;
+    bcmos_bool is_ds_flow_to_host, is_ds_n_to_1;
+
+
+    BCM_LOG(INFO, log_id_flow,  "Got admin UP request from BAL API - bringing up FLOW\n");
+
+    do
+    {
+        /* change Flow state to CONFIGURING */
+        p_flow_inst->fsm_state = FLOW_FSM_STATE_CONFIGURING;
+
+        /*– Core calls Switch Utils to add applicable CMDs */
+        if(BCM_ERR_OK != (ret = sw_util_flow_set(p_flow_inst, BAL_UTIL_OPER_FLOW_ADD)))
+        {
+            BCM_LOG(ERROR, log_id_flow,  "error %s detected by switch util while adding flow\n", bcmos_strerror(ret));
+            break;
+        }
+
+        /*– Core calls Mac Utils add applicable CMDs */
+        if(BCM_ERR_OK != (ret = mac_util_flow_set(p_flow_inst, BAL_UTIL_OPER_FLOW_ADD)))
+        {
+            BCM_LOG(ERROR, log_id_flow,  "error %s detected by mac util\n", bcmos_strerror(ret));
+
+            /* Remove the (just added) flow from the switch otherwise the switch utils 
+             * will remember it and complain when this flow is added later.  There's not
+             * much we can do about it if removing this flow fails.
+             */
+            if(BCM_ERR_OK != sw_util_flow_set(p_flow_inst, BAL_UTIL_OPER_FLOW_CLEAR))
+            {
+                BCM_LOG(ERROR, log_id_flow,  
+                        "error detected by switch util while removing flow\n");
+            }
+
+            break;
+        }
+
+        /* The hardware has properly accepted the object info, so the request object becomes
+         * the current state.
+         */
+        bcmbal_flow_object_overlay_w_src_priority(&p_flow_inst->current_flow_info,
+                                                  &p_flow_inst->api_req_flow_info);
+ 
+        is_ds_flow_to_host = (BCMBAL_FLOW_TYPE_DOWNSTREAM == p_flow_inst->api_req_flow_info.key.flow_type &&
+                             (BCMOS_TRUE == BCMBAL_CFG_PROP_IS_SET(&p_flow_inst->api_req_flow_info, flow, action) && 
+                             (p_flow_inst->api_req_flow_info.data.action.cmds_bitmask & 
+                              BCMBAL_ACTION_CMD_ID_TRAP_TO_HOST)));
+                              
+        is_ds_n_to_1 = ((BCMBAL_FLOW_TYPE_DOWNSTREAM == p_flow_inst->api_req_flow_info.key.flow_type) && 
+                        (BCMBAL_CFG_PROP_IS_SET(&p_flow_inst->api_req_flow_info, flow, group_id)  ));
+
+
+        /* Add the svc_port_id record to the sub_term record for upstream flows, 
+         * or for downstream flows that are not destined to the host
+         */
+        if(BCMBAL_FLOW_TYPE_UPSTREAM   == p_flow_inst->api_req_flow_info.key.flow_type  ||
+           (BCMBAL_FLOW_TYPE_DOWNSTREAM == p_flow_inst->api_req_flow_info.key.flow_type &&
+            !(is_ds_flow_to_host) && !(is_ds_n_to_1)))
+    
+        {
+            bcmbal_sub_term_svc_port_id_list_entry_add(p_flow_inst->p_sub_term_inst,
+                                                       p_flow_inst->api_req_flow_info.data.svc_port_id);
+        }
+ 
+        /* Add the agg_port_id to the sub_term record (only for upstream flows) */
+        if(BCMBAL_FLOW_TYPE_UPSTREAM == p_flow_inst->api_req_flow_info.key.flow_type)
+        {
+            bcmbal_sub_term_agg_port_id_list_entry_add(p_flow_inst->p_sub_term_inst,
+                                                       p_flow_inst->api_req_flow_info.data.agg_port_id);
+        }
+ 
+        BCMBAL_OBJ_IN_PROGRESS_SET(&(p_flow_inst->current_flow_info), BCMOS_TRUE);
+
+    }while(0);
+
+    /* If there were errors during processing, then report the error to the API and free the flow */
+    if(BCM_ERR_OK != ret)
+    {
+        mgmt_msg_send_balapi_ind(ret,
+                                 msg, 
+                                 log_id_flow);
+
+        flow_free_by_entry(p_flow_inst);
+    }
+
+    return ret;
+
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Flow FSM state processing for a flow admin-up command received 
+ *        from the BAL Public API when the specified flow FSM is already 
+ *        in the REMOVING state.
+ *
+ * @param p_flow_inst      Pointer to a flow instance
+ * @param msg              Pointer to a BAL message received from the BAL Public API
+ * @param p_event          Pointer to an flow event structure
+ * 
+ * @returns bcmos_errno 
+ *****************************************************************************/
+static bcmos_errno flow_fsm_admin_up_error(flow_inst *p_flow_inst, 
+                                           void *msg, 
+                                           flow_fsm_event *p_event)
+{
+    bcmos_errno ret = BCM_ERR_STATE;
+
+    BCM_LOG(DEBUG, log_id_flow,  
+            "Received an admin UP request from BAL API"
+            " - returning ERROR to the API - no further function\n");
+
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Flow FSM state processing for a flow admin-down command 
+ *        received from the BAL Public API when the specified flow is
+ *        admin-up (i.e when the specified flow instance FSM is in the
+ *        CONFIGURED state).
+ *
+ * @param p_flow_inst      Pointer to a flow instance
+ * @param msg              Pointer to a BAL message received from the BAL Public API
+ * @param p_event          Pointer to a flow event structure
+ * 
+ * @returns bcmos_errno 
+ *****************************************************************************/
+static bcmos_errno flow_fsm_admin_dn_start(flow_inst *p_flow_inst, 
+                                           void *msg,
+                                           flow_fsm_event *p_event)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+
+    BCM_LOG(INFO, log_id_flow,
+            "Got admin DOWN request from BAL API - bringing down FLOW\n");
+
+    /* change Flow state to CONFIGURING */
+    p_flow_inst->fsm_state = FLOW_FSM_STATE_CONFIGURING;
+
+    do
+    {
+        /*– Core calls Switch Utils to remove applicable CMDs */
+        if(BCM_ERR_OK != (ret = sw_util_flow_set(p_flow_inst, BAL_UTIL_OPER_FLOW_REMOVE)))
+        {
+            BCM_LOG(ERROR, log_id_flow,  "error %s detected by switch util\n", bcmos_strerror(ret));
+            break;
+        }
+
+        /*– Core calls Mac Utils remove applicable CMDs */
+        if(BCM_ERR_OK != (ret = mac_util_flow_set(p_flow_inst, BAL_UTIL_OPER_FLOW_REMOVE)))
+        {
+            BCM_LOG(ERROR, log_id_flow,  "error %s detected by mac util\n", bcmos_strerror(ret));
+            break;
+        }
+
+        /* The hardware has properly accepted the object info but we do
+         * not overwrite the current flow data as there is nothing in the request
+         * that is relevant besides the admin_state
+         */
+        BCMBAL_OBJ_IN_PROGRESS_SET(&(p_flow_inst->current_flow_info), BCMOS_TRUE);
+
+    }while(0);
+    /* Report any error found to the API immediately */
+    if(BCM_ERR_OK != ret)
+    {
+        mgmt_msg_send_balapi_ind(ret,
+                                 msg, 
+                                 log_id_flow);
+    }
+
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Flow FSM state processing for a flow clear command 
+ *        received from the BAL Public API. 
+ *
+ * @param p_flow_inst      Pointer to a flow instance
+ * @param msg              Pointer to a BAL message received from the BAL Public API
+ * @param p_event          Pointer to a flow event structure
+ * 
+ * @returns bcmos_errno 
+ *****************************************************************************/
+static bcmos_errno flow_fsm_clear_start(flow_inst *p_flow_inst, 
+                                           void *msg,
+                                           flow_fsm_event *p_event)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    tm_sched_inst *p_tm_sched_inst;
+    uint32_t alloc_ref_count;
+    bcmos_bool b_flow_is_destined_to_host;
+	tm_queue_inst *p_tm_queue_inst = NULL;
+    
+    BCM_LOG(INFO, log_id_flow,
+    "Got CLEAR request from BAL API - removing FLOW\n");
+    
+    /* change Flow state to REMOVING */
+    p_flow_inst->fsm_state = FLOW_FSM_STATE_REMOVING;
+
+	
+	b_flow_is_destined_to_host = ((BCMBAL_CFG_PROP_IS_SET(&(p_flow_inst->api_req_flow_info), flow, action) && 
+								   (p_flow_inst->api_req_flow_info.data.action.cmds_bitmask & 
+									BCMBAL_ACTION_CMD_ID_TRAP_TO_HOST)) ? BCMOS_TRUE : BCMOS_FALSE);
+    do
+    {
+        /*Core calls Switch Utils to clear applicable CMDs */
+        if(BCM_ERR_OK != (ret = sw_util_flow_set(p_flow_inst, BAL_UTIL_OPER_FLOW_CLEAR)))
+        {
+            BCM_LOG(ERROR, log_id_flow,  "error %s detected by switch util\n", bcmos_strerror(ret));
+            break;
+        }
+        
+        /*Core calls Mac Utils clear applicable CMDs */
+        if(BCM_ERR_OK != (ret = mac_util_flow_set(p_flow_inst, BAL_UTIL_OPER_FLOW_CLEAR)))
+        {
+            /* if entry does not exist for a clear, that is fine, since anyway that would have been the end goal */
+            if (BCM_ERR_NOENT != ret)
+            {
+                BCM_LOG(ERROR, log_id_flow,  "error %s detected by mac util\n", bcmos_strerror(ret));
+                break;
+            }
+        }
+        
+        if(BCMBAL_FLOW_TYPE_UPSTREAM == p_flow_inst->api_req_flow_info.key.flow_type)
+        {
+            /*handle the alloc id and alloc - tm sched*/
+            if(BCM_ERR_OK != rsc_mgr_alloc_id_free(p_flow_inst->api_req_flow_info.data.access_int_id,
+                                                   p_flow_inst->api_req_flow_info.data.agg_port_id, p_flow_inst))
+            {
+                BCM_LOG(ERROR, log_id_flow, 
+                    " error encountered during release of flow resources (agg_port_id: %d, intf_id:%d\n",
+                    p_flow_inst->api_req_flow_info.data.access_int_id,
+                    p_flow_inst->api_req_flow_info.data.agg_port_id);
+            }
+            /*check if tm sched should be removed - ref count = 1 and tm sched is auto created*/
+            if(BCM_ERR_OK != (ret = flow_tm_get(&(p_flow_inst->api_req_flow_info), &p_tm_sched_inst)))
+            {
+            
+                BCM_LOG(ERROR, log_id_flow, 
+                    " could not find tm sched for agg_port_id: %d, intf_id:%d\n",
+                    p_flow_inst->api_req_flow_info.data.access_int_id,
+                    p_flow_inst->api_req_flow_info.data.agg_port_id);
+                break;
+            }
+            ret = rsc_mgr_alloc_id_get_ref_count(p_flow_inst->api_req_flow_info.data.access_int_id,p_flow_inst->api_req_flow_info.data.agg_port_id, &alloc_ref_count);
+            
+            if(BCM_ERR_OK == ret
+                && BCMBAL_TM_CREATION_MODE_AUTO == p_tm_sched_inst->req_tm_sched_info.data.creation_mode
+                && 1 == alloc_ref_count)
+            {
+                ret = bcmbal_tm_sched_fsm_active_destroy(p_tm_sched_inst);
+            }
+        }
+
+        /*if the flow is not a cpu flow (to host), should handle it sched/queue setting*/
+        if(!b_flow_is_destined_to_host)
+        {
+            /*remove the flow from the the tm queue list*/			 
+            /*find tm queue instance*/
+            ret = flow_queue_validate(&p_flow_inst->api_req_flow_info, &p_tm_queue_inst); 
+        
+            if (ret != BCM_ERR_OK)
+            {
+                ret =  BCM_ERR_NOENT;
+                break;
+            }
+        
+            ret = bcmbal_tm_queue_use_set(p_tm_queue_inst, BCMOS_FALSE);
+            if (ret != BCM_ERR_OK)
+            {
+                ret = BCM_ERR_INTERNAL;
+                break;
+            }
+       	}
+        
+        /* The hardware has properly accepted the object info, so the request object becomes
+        * the current state, except for the oper_status.
+        */
+        bcmbal_flow_object_overlay_w_src_priority(&p_flow_inst->current_flow_info,
+                                                  &p_flow_inst->api_req_flow_info);
+        
+        BCMBAL_OBJ_IN_PROGRESS_SET(&(p_flow_inst->current_flow_info), BCMOS_TRUE);
+        
+    }while(0);
+    
+    /* Report any error found to the API immediately */
+    if(BCM_ERR_OK != ret)
+    {
+        mgmt_msg_send_balapi_ind(ret,
+                                 msg, 
+                                 log_id_flow);
+    }
+    
+    return ret;
+
+}
+
+
+/*****************************************************************************/
+/**
+ * @brief The Flow FSM state processing for a flow admin-down command 
+ *        from the BAL Public API when the specified flow is already 
+ *        admin-down.
+ *
+ * @param p_flow_inst      Pointer to a flow instance
+ * @param msg              Pointer to a BAL message received from the BAL Public API
+ * @param p_event          Pointer to an flow event structure
+ * 
+ * @returns bcmos_errno 
+ *****************************************************************************/
+static bcmos_errno flow_fsm_admin_dn_ok(flow_inst *p_flow_inst, 
+                                        void *msg, 
+                                        flow_fsm_event *p_event)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+
+    BCM_LOG(DEBUG, log_id_flow,  
+            "Received an admin DOWN request from BAL API"
+            " - returning OK to the API - no further function\n");
+
+    mgmt_msg_send_balapi_ind(ret,
+                             msg, 
+                             log_id_flow);
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Flow FSM state processing for a flow admin-down command 
+ *        received from the BAL Public API when the specified flow FSM 
+ *        is in the CONFIGURING state.
+ *
+ * @param p_flow_inst      Pointer to a flow instance
+ * @param msg              Pointer to a BAL message received from the BAL Public API
+ * @param p_event          Pointer to a flow event structure
+ * 
+ * @returns bcmos_errno 
+ *****************************************************************************/
+static bcmos_errno flow_fsm_admin_dn_error(flow_inst *p_flow_inst, 
+                                           void *msg, 
+                                           flow_fsm_event *p_event)
+{
+    bcmos_errno ret = BCM_ERR_STATE;
+
+    BCM_LOG(DEBUG, log_id_flow,  
+            "Received an admin DOWN request from BAL API"
+            " - returning ERROR to the API - no further function\n");
+
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Flow FSM state processing function to ignore a received message.
+ *
+ * @param p_flow_inst      Pointer to an flow instance
+ * @param msg              Pointer to a BAL message received from the BAL utils
+ * @param p_event          Pointer to an flow event structure
+ * 
+ * @returns bcmos_errno 
+ *****************************************************************************/
+static bcmos_errno flow_fsm_ignore_util_msg(flow_inst *p_flow_inst, 
+                                           void *msg, 
+                                           flow_fsm_event *p_event)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+
+    BCM_LOG(DEBUG, log_id_flow,  "Ignoring message from BAL utils\n");
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Flow FSM state processing function to process an  AUTO IND 
+ *        message from one of the BAL apps.
+ *
+ * @param p_flow_inst      Pointer to a flow instance
+ * @param msg              Pointer to a BAL message received from one of
+ *                         the BAL apps.
+ * @param p_event          Pointer to a flow event structure
+ * 
+ * @returns bcmos_errno 
+ *****************************************************************************/
+static bcmos_errno flow_fsm_null_process_util_auto_msg(flow_inst *p_flow_inst, 
+                                                      void *msg, 
+                                                      flow_fsm_event *p_event)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+
+    /* Parameter checks */
+    BUG_ON(NULL == p_flow_inst);
+    BUG_ON(NULL == msg);
+    BUG_ON(NULL == p_event);
+
+    BCM_LOG(DEBUG, log_id_flow,  "Received an AUTO IND in the NULL state\n");
+
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Flow FSM state processing function to process a message from 
+ *        one of the BAL apps received when the specified flow instance FSM 
+ *        is in the CONFIGURING state.
+ *
+ * @param p_flow_inst      Pointer to a flow instance
+ * @param msg              Pointer to a BAL message received from one of
+ *                         the BAL apps.
+ * @param p_event          Pointer to an access terminal event structure
+ * 
+ * @returns bcmos_errno 
+ *****************************************************************************/
+static bcmos_errno flow_fsm_process_util_msg(flow_inst *p_flow_inst, 
+                                                        void *msg, 
+                                                        flow_fsm_event *p_event)
+{
+    bcmos_errno ret;
+    bal_util_msg_ind *ind_msg;
+
+    /* Parameter checks */
+    BUG_ON(NULL == p_flow_inst);
+    BUG_ON(NULL == msg);
+    BUG_ON(NULL == p_event);
+
+    ind_msg = (bal_util_msg_ind *)msg;
+
+    /*
+     * NOTE: AUTO_IND messages are not processed in this function,
+     * so there is no need to consider them in this logic.
+     */
+
+    BCM_LOG(DEBUG, log_id_flow, 
+            " Received an IND message from BAL UTIL (%s) during %s state\n",
+            subsystem_str[bcmbal_sender_get(msg)],flow_state_name_get(p_flow_inst->fsm_state));
+
+    BCM_LOG(DEBUG, log_id_flow, 
+            "%s, thread %s, module %d\n", __FUNCTION__, bcmos_task_current()->name, bcmos_module_current());
+
+    /* Handle indication */
+    ret = ind_msg->status;
+
+    /* Reflect the execution status in the object being returned in the indication
+     */
+    if(BCM_ERR_OK == ret)
+    {
+        p_flow_inst->current_flow_info.data.oper_status =
+            p_flow_inst->api_req_flow_info.data.oper_status;
+		
+        /*
+         * The flow has been successfully configured
+         */
+        p_flow_inst->fsm_state = FLOW_FSM_STATE_CONFIGURED;
+    }
+    else
+    {
+        /* Error */
+        BCM_LOG(ERROR, log_id_flow,  "Flow %d: Failed in state %s. Error %s\n",
+                p_flow_inst->api_req_flow_info.key.flow_id,
+                flow_state_name_get(p_flow_inst->fsm_state),
+                bcmos_strerror(ret));
+    }
+
+    BCMBAL_OBJ_IN_PROGRESS_SET(&(p_flow_inst->current_flow_info), BCMOS_FALSE);
+    p_flow_inst->current_flow_info.hdr.hdr.status = ret;
+
+    /*
+     * Send the indication back to the BAL public API here
+     */
+    mgmt_msg_send_balapi_ind(ret,
+                             &p_flow_inst->current_flow_info.hdr, 
+                             log_id_flow);
+
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Flow FSM state processing function to process a message from 
+ *        one of the BAL apps received 
+ *
+ * @param p_flow_inst      Pointer to a flow instance
+ * @param msg              Pointer to a BAL message received from one of
+ *                         the BAL apps.
+ * @param p_event          Pointer to an access terminal event structure
+ * 
+ * @returns bcmos_errno 
+ *****************************************************************************/
+static bcmos_errno flow_fsm_process_util_auto_msg(flow_inst *p_flow_inst, 
+                                                            void *msg, 
+                                                            flow_fsm_event *p_event)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    bal_util_msg_auto_ind *ind_msg;
+    
+    
+    /* Parameter checks */
+    BUG_ON(NULL == p_flow_inst);
+    BUG_ON(NULL == msg);
+    BUG_ON(NULL == p_event);
+    
+    BCM_LOG(DEBUG, log_id_flow,  
+            "Received an AUTO IND message in the %s state\n",
+            flow_state_name_get(p_flow_inst->fsm_state));
+    
+    ind_msg = (bal_util_msg_auto_ind *)msg;
+    
+    /* Handle indication */
+    ret = ind_msg->status;
+    
+    if(BCM_ERR_OK == ret)
+    {
+	    /* data reflects the new oper_status in the object being indicated */
+        memcpy(&p_flow_inst->current_flow_info.data.oper_status, ind_msg->data, sizeof(bcmbal_status));
+        
+        /* 
+        * Send the indication back to the BAL public API here
+        */
+        mgmt_msg_send_balapi_ind(ret,
+            &p_flow_inst->current_flow_info.hdr, 
+            log_id_flow);
+
+		
+        p_flow_inst->fsm_state = FLOW_FSM_STATE_CONFIGURED;
+		
+    }
+    
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Flow FSM state processing function to process a
+ *        message from one of the BAL apps received when the specified 
+ *        flow instance FSM is in the REMOVING state.
+ *
+ * @param p_flow_inst      Pointer to an flow instance
+ * @param msg              Pointer to a BAL message received from one of
+ *                         the BAL apps.
+ * @param p_event          Pointer to an flow event structure
+ * 
+ * @returns bcmos_errno 
+ *****************************************************************************/
+static bcmos_errno flow_fsm_removing_process_util_msg(flow_inst *p_flow_inst, 
+                                                     void *msg, 
+                                                     flow_fsm_event *p_event)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    bal_util_msg_ind *ind_msg;
+    bcmos_bool is_ds_flow_to_host;
+    /* Parameter checks */
+    BUG_ON(NULL == p_flow_inst);
+    BUG_ON(NULL == msg);
+    BUG_ON(NULL == p_event);
+
+    ind_msg = (bal_util_msg_ind *)msg;
+
+    /*
+     * NOTE: AUTO_IND messages are not processed in this function,
+     * so there is no need to consider them in this logic.
+     */
+
+    BCM_LOG(DEBUG, log_id_flow, 
+            " Received an IND message from BAL UTIL (%s) during REMOVING state\n",
+            subsystem_str[bcmbal_sender_get(msg)]);
+
+    do{
+
+        /* Handle indication */
+        ret = ind_msg->status;
+    
+        /* Reflect the execution status in the object being returned in the indication
+         */
+        if(BCM_ERR_OK == ret)
+        {
+            if(BCMBAL_FLOW_TYPE_UPSTREAM == p_flow_inst->api_req_flow_info.key.flow_type ||
+               BCMBAL_FLOW_TYPE_DOWNSTREAM == p_flow_inst->api_req_flow_info.key.flow_type)
+            {
+                is_ds_flow_to_host = (BCMBAL_FLOW_TYPE_DOWNSTREAM == p_flow_inst->api_req_flow_info.key.flow_type &&
+                                     (BCMOS_TRUE == BCMBAL_CFG_PROP_IS_SET(&p_flow_inst->api_req_flow_info, flow, action) && 
+                                      (p_flow_inst->api_req_flow_info.data.action.cmds_bitmask & 
+                                       BCMBAL_ACTION_CMD_ID_TRAP_TO_HOST)));
+    
+                if (bcm_topo_pon_get_pon_family(p_flow_inst->api_req_flow_info.data.access_int_id) == BCM_TOPO_PON_FAMILY_GPON)
+                {
+    
+                    /* Don't attempt to release a GEM for a downstream flow that is TRAP_TO_HOST, because there
+                     * is no subscriber terminal involved in this flow (there was no GEM allocated for this flow).
+                     */
+                    if(BCMOS_FALSE == is_ds_flow_to_host)
+                    {
+                        if(BCM_ERR_OK != rsc_mgr_gem_free(p_flow_inst->api_req_flow_info.data.access_int_id,
+                                                          p_flow_inst->api_req_flow_info.data.svc_port_id, p_flow_inst))
+                        {
+                            BCM_LOG(ERROR, log_id_flow, 
+                                    " error encountered during release of flow resources (svc_port_id: %d, intf_id:%d\n",
+                                    p_flow_inst->api_req_flow_info.data.svc_port_id,
+                                    p_flow_inst->api_req_flow_info.data.access_int_id);
+                        }   
+                    }               
+    
+    
+                }
+         
+                /* Remove the svc_port_id record from the sub_term record for upstream flows, 
+                 * or for downstream flows that are not destined to the host
+                 */
+                if((BCMBAL_FLOW_TYPE_UPSTREAM == p_flow_inst->api_req_flow_info.key.flow_type) ||
+                   ((BCMBAL_FLOW_TYPE_DOWNSTREAM == p_flow_inst->api_req_flow_info.key.flow_type) &&
+                    !(is_ds_flow_to_host)))
+                {
+                    bcmbal_sub_term_svc_port_id_list_entry_remove(p_flow_inst->p_sub_term_inst,
+                                                                  p_flow_inst->current_flow_info.data.svc_port_id);
+                }
+    
+			    /* Remove the agg_port_id from the sub_term record (only for upstream flows) */
+    			if(BCMBAL_FLOW_TYPE_UPSTREAM == p_flow_inst->api_req_flow_info.key.flow_type)
+                {
+    
+                    bcmbal_sub_term_agg_port_id_list_entry_remove(p_flow_inst->p_sub_term_inst,
+                                                                  p_flow_inst->current_flow_info.data.agg_port_id);
+                }
+            }
+            
+            p_flow_inst->current_flow_info.hdr.hdr.status = ret;
+    
+            /* This is the proper state and status for the indication about to be sent */
+            p_flow_inst->current_flow_info.data.admin_state = BCMBAL_STATE_DOWN;
+            p_flow_inst->current_flow_info.data.oper_status = BCMBAL_STATUS_DOWN;
+            
+            BCMBAL_OBJ_IN_PROGRESS_SET(&(p_flow_inst->current_flow_info), BCMOS_FALSE);
+    
+            /*
+         * Send the success indication back to the BAL public API here
+             */
+            mgmt_msg_send_balapi_ind(ret,
+                                     &p_flow_inst->current_flow_info.hdr, 
+                                     log_id_flow);
+    
+            /* Return the flow to the free pool regardless of the errors encountered above */
+            flow_free_by_entry(p_flow_inst);
+        }
+        else
+        {
+        /*
+         * Send the failure indication back to the BAL public API here
+         */
+            mgmt_msg_send_balapi_ind(ret,
+                                     &p_flow_inst->current_flow_info.hdr, 
+                                     log_id_flow);
+        }
+    }while(0);
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Flow FSM state processing function to process a
+ *        AUTO IND message from one of the BAL apps received when the specified 
+ *        flow instance FSM is in the REMOVING state.
+ *
+ * @param p_flow_inst      Pointer to an flow instance
+ * @param msg              Pointer to a BAL message received from one of
+ *                         the BAL apps.
+ * @param p_event          Pointer to an flow event structure
+ * 
+ * @returns bcmos_errno 
+  *****************************************************************************/
+static bcmos_errno flow_fsm_removing_process_util_auto_msg(flow_inst *p_flow_inst, 
+                                                          void *msg, 
+                                                          flow_fsm_event *p_event)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+
+    /* Parameter checks */
+    BUG_ON(NULL == p_flow_inst);
+    BUG_ON(NULL == msg);
+    BUG_ON(NULL == p_event);
+
+    BCM_LOG(DEBUG, log_id_flow,  
+            "Received an AUTO IND in the removing state"
+            " - no further function\n");
+
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Flow FSM function which is executed when an error 
+ *        is encountered during FSM processing.
+ *
+ * @param p_flow_inst      Pointer to an flow instance
+ * @param msg              Pointer to a BAL message received from one of
+ *                         the BAL apps.
+ * @param p_event          Pointer to an flow event structure
+ * 
+ * @returns bcmos_errno 
+ *****************************************************************************/
+static bcmos_errno flow_fsm_state_err(flow_inst *p_flow_inst, 
+                                      void *msg, 
+                                      flow_fsm_event *p_event)
+{
+    bcmos_errno ret = BCM_ERR_INVALID_OP;
+
+    BCM_LOG(DEBUG, log_id_flow,  
+            "Error encountered processing FLOW FSM"
+            " - BAD EVENT ()\n");
+
+    return ret;
+}
+static bcmos_errno flow_queue_validate(bcmbal_flow_cfg *p_flow_cfg, tm_queue_inst **p_tm_queue_inst)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    bcmbal_interface_key intf_key;
+    bcmbal_tm_sched_key tm_key;
+    tm_sched_inst *p_tm_sched;
+    bcmbal_tm_queue_key queue_key;
+    bcmbal_tm_queue_ref queue_ref;
+    bcmos_bool is_auto_set = BCMOS_TRUE;
+    
+    do
+    {
+        if (BCMBAL_FLOW_TYPE_UPSTREAM == p_flow_cfg->key.flow_type)
+        {
+            intf_key.intf_type = BCMBAL_INTF_TYPE_NNI;
+            tm_key.dir = BCMBAL_TM_SCHED_DIR_US;
+            intf_key.intf_id = p_flow_cfg->data.network_int_id;
+        }       
+        else /*BCMBAL_FLOW_TYPE_DOWNSTREM or BCMBAL_FLOW_TYPE_MULTICAST */
+        {
+            intf_key.intf_type = BCMBAL_INTF_TYPE_PON;
+            tm_key.dir = BCMBAL_TM_SCHED_DIR_DS;
+            intf_key.intf_id = p_flow_cfg->data.access_int_id;
+        }
+        
+        if (BCMBAL_CFG_PROP_IS_SET(p_flow_cfg, flow, queue))
+        {
+            queue_ref = p_flow_cfg->data.queue;
+            is_auto_set = BCMOS_FALSE;
+        }
+        else
+        {        
+            /*look for the auto created tm sched and queue*/
+            ret = bcmbal_interface_tm_get(intf_key, &tm_key.id);
+            if (BCM_ERR_OK != ret)
+            {
+                BCM_LOG(ERROR, log_id_flow, 
+                        "could not get interface instance"
+                        " to set flow queue reference intf_key.intf_type = %d,"
+                        " intf_key.intf_id = %d\n",
+				    intf_key.intf_type, intf_key.intf_id);
+                break;
+            }
+            p_tm_sched = tm_sched_inst_get(tm_key, TM_SCHED_FLAG_ACTIVE);
+            if (NULL == p_tm_sched)
+            {
+                BCM_LOG(ERROR, log_id_flow, 
+                        "could not get tm sched instance to "
+                        "set flow queue reference intf_key.intf_type = %d,"
+                        " intf_key.intf_id = %d tm_key.dir = %s\n"
+				    ,intf_key.intf_type, intf_key.intf_id, TM_SCHED_DIR_TO_STR(tm_key.dir));
+                ret = BCM_ERR_NOENT;
+                break;
+            }
+
+            if(BCMBAL_TM_CREATION_MODE_AUTO != p_tm_sched->current_tm_sched_info.data.creation_mode)
+            {
+                BCM_LOG(ERROR, log_id_flow, 
+                        "can not set flow queue reference if the "
+                        "interface tm sched is not auto created. "
+                        "intf_key.intf_type = %d, intf_key.intf_id = %d tm_key.dir = %s\n",
+				    intf_key.intf_type, intf_key.intf_id, TM_SCHED_DIR_TO_STR(tm_key.dir));
+                ret = BCM_ERR_PARM;
+                break;
+            }
+            
+            /*if the tm sched exist and it is auto created, queue 0 should be there as well*/
+            queue_ref.sched_id = tm_key.id;
+            queue_ref.queue_id = 0;
+            BCM_LOG(INFO, log_id_flow, 
+                    "flow will be assign to queue: node id=%d "
+                    "node dir=%s queue id = %d\n",
+                    tm_key.id, TM_SCHED_DIR_TO_STR(tm_key.dir), queue_ref.queue_id);     
+            
+            BCMBAL_CFG_PROP_SET(p_flow_cfg, flow, queue, queue_ref);
+        }
+        
+        queue_key.id = queue_ref.queue_id;
+        queue_key.sched_id = queue_ref.sched_id;
+        queue_key.sched_dir = tm_key.dir;
+        
+        /*validate a given tm queue exist and match flow type*/
+        *p_tm_queue_inst = tm_queue_inst_get(queue_key, TM_QUEUE_FLAG_ACTIVE);
+        if (NULL == *p_tm_queue_inst)
+        {
+            BCM_LOG(ERROR, log_id_flow,
+                    "could not find the queue to assign the flow to "
+                    ":tm sched dir = %s tm sched id = %d queue id = %d\n",
+			    TM_SCHED_DIR_TO_STR(queue_key.sched_dir), queue_key.sched_id,queue_key.id);
+            ret = BCM_ERR_NOENT;
+            break;
+        }
+        if (BCMOS_FALSE == is_auto_set)
+        {
+            /*should validate queue is related to the flow intf/sub_term/sub_term_uni*/
+            tm_key.dir = queue_key.sched_dir;
+            tm_key.id =  queue_key.sched_id;
+            
+            p_tm_sched = tm_sched_inst_get(tm_key, TM_SCHED_FLAG_ACTIVE);
+            if (NULL == p_tm_sched)
+            {
+                BCM_LOG(ERROR, log_id_flow, 
+                        "could not get tm sched instance to set flow queue "
+                        "reference intf_key.intf_type = %d, intf_key.intf_id = %d tm_key.dir  = %s\n",
+    			    intf_key.intf_type, intf_key.intf_id, TM_SCHED_DIR_TO_STR(tm_key.dir));
+                ret = BCM_ERR_NOENT;
+                break;
+            }
+            
+            if(BCMBAL_CFG_PROP_IS_SET(&p_tm_sched->req_tm_sched_info,tm_sched,owner))
+            {
+            switch(p_tm_sched->req_tm_sched_info.data.owner.type)
+            {
+                case BCMBAL_TM_SCHED_OWNER_TYPE_INTERFACE:
+                {
+                }
+                break;
+                case BCMBAL_TM_SCHED_OWNER_TYPE_SUB_TERM:
+                {
+                    if (p_tm_sched->req_tm_sched_info.data.owner.u.sub_term.intf_id != p_flow_cfg->data.access_int_id
+                        || p_tm_sched->req_tm_sched_info.data.owner.u.sub_term.sub_term_id!= p_flow_cfg->data.sub_term_id)
+                    {                
+                        BCM_LOG(ERROR, log_id_flow, 
+                                "queue referenced by flow, attached to tm sched instance that is owned by "
+                                "sub term intf_id = %d sub_term_id = %d while flow is related to sub term"
+                                " intf_id = %d sub_term_id = %d therefor cannot be set as flow queue\n",
+                            p_tm_sched->req_tm_sched_info.data.owner.u.sub_term.intf_id,
+                            p_tm_sched->req_tm_sched_info.data.owner.u.sub_term.sub_term_id,
+                            p_flow_cfg->data.access_int_id,
+                            p_flow_cfg->data.sub_term_uni_idx);
+                        ret = BCM_ERR_PARM;
+                        break;
+                    }
+                }
+                break;
+                case BCMBAL_TM_SCHED_OWNER_TYPE_UNI:
+                {            
+                    if (p_tm_sched->req_tm_sched_info.data.owner.u.uni.intf_id != p_flow_cfg->data.access_int_id
+                        || p_tm_sched->req_tm_sched_info.data.owner.u.uni.sub_term_id!= p_flow_cfg->data.sub_term_id
+                        || p_tm_sched->req_tm_sched_info.data.owner.u.uni.idx != p_flow_cfg->data.sub_term_uni_idx)
+                    {
+                        BCM_LOG(ERROR, log_id_flow, 
+                                "queue referenced by flow , attached to tm sched "
+                                "instance that is owned by sub term uni intf_id = %d "
+                                "sub_term_id = %d uni = %d while flow is related to uni sub "
+                                "term intf_id = %d sub_term_id = %d uni = %d therefor cannot be "
+                                "set as flow queue\n",
+                            p_tm_sched->req_tm_sched_info.data.owner.u.uni.intf_id,
+                            p_tm_sched->req_tm_sched_info.data.owner.u.uni.sub_term_id,
+                            p_tm_sched->req_tm_sched_info.data.owner.u.uni.idx,
+                            p_flow_cfg->data.access_int_id,
+                            p_flow_cfg->data.sub_term_id,
+                            p_flow_cfg->data.sub_term_uni_idx);
+                        ret = BCM_ERR_PARM;
+                    }
+                }
+                break;
+                default:
+                    BCM_LOG(ERROR, log_id_flow, 
+                            "tm sched instance is owned by %d therefor "
+                            "cannot be set as flow queue\n",
+			            p_tm_sched->req_tm_sched_info.data.owner.type);
+                    ret = BCM_ERR_PARM;
+                break;        
+            }
+        }
+        else
+        {
+            BCM_LOG(ERROR, log_id_flow, 
+                    "tm sched instance is not set with an owner therefor "
+                    "cannot be set as flow queue intf_key.intf_type = %d, "
+                    "intf_key.intf_id = %d tm_key.dir = %s\n",
+			    intf_key.intf_type, intf_key.intf_id, TM_SCHED_DIR_TO_STR(tm_key.dir));
+            ret = BCM_ERR_PARM;
+            break;
+        }    
+        }
+    }while (0);
+    return ret;
+
+}
+            
+
+/*****************************************************************************/
+/**
+ * @brief A function called by the core worker thread to process an 
+ *        flow object message (SET, GET, CLEAR, STATS) received 
+ *        from the BAL Public API.
+ *
+ * @param msg_payload      Pointer to a BAL message received from the 
+ *                         BAL Public API.
+ *                         
+ * @returns bcmos_errno 
+ *****************************************************************************/
+bcmos_errno process_flow_object(void *msg_payload)
+{
+    bcmos_errno ret = BCM_ERR_OK, rsp_ret = BCM_ERR_OK;
+    bcmbal_flow_cfg *p_flow_cfg = (bcmbal_flow_cfg *)msg_payload;
+    flow_inst *p_flow_inst = NULL;
+    flow_fsm_event fsm_event;
+    bcmbal_flow_key *p_flow_key;
+    bcmbal_state admin_state_req;
+    bcmos_bool b_flow_is_destined_to_host;
+    bcmbal_obj_msg_type oper_type;
+    bcmbal_subscriber_terminal_key sub_term_key;
+    sub_term_inst *p_sub_term_inst = NULL;
+    bcmos_bool is_multicast = BCMOS_FALSE;
+    bcmos_bool is_unicast = BCMOS_FALSE;
+    
+    bcmos_bool is_us_n_to_1 = BCMOS_FALSE;
+    bcmos_bool is_ds_n_to_1 = BCMOS_FALSE;
+    
+    tm_queue_inst *p_tm_queue_inst = NULL;    
+	
+    BUG_ON(NULL == msg_payload);
+
+    BCM_LOG(DEBUG, log_id_flow,  "Processing a flow object\n");
+
+    p_flow_key = &p_flow_cfg->key;
+
+    oper_type = p_flow_cfg->hdr.hdr.type;
+
+    is_multicast = (BCMBAL_FLOW_TYPE_MULTICAST == p_flow_key->flow_type);
+
+    is_unicast   = ((BCMBAL_FLOW_TYPE_UPSTREAM == p_flow_key->flow_type) || 
+                    (BCMBAL_FLOW_TYPE_DOWNSTREAM == p_flow_key->flow_type));                
+
+    is_us_n_to_1 = ((BCMBAL_FLOW_TYPE_UPSTREAM == p_flow_key->flow_type) && 
+                    (BCMBAL_CFG_PROP_IS_SET(p_flow_cfg, flow, group_id)));
+
+    is_ds_n_to_1 = ((BCMBAL_FLOW_TYPE_DOWNSTREAM == p_flow_key->flow_type) && 
+                    (BCMBAL_CFG_PROP_IS_SET(p_flow_cfg, flow, group_id)  ));
+
+
+    /*
+     * A message pointer may be passed inside the event structure.
+     */
+    fsm_event.msg = msg_payload;
+
+    /* SET or GET or CLEAR...? */
+    switch (oper_type)
+    {
+        case (BCMBAL_OBJ_MSG_TYPE_SET):
+        {
+            bcmos_bool b_generate_event = BCMOS_FALSE;
+            bcmos_bool found_new_flow = BCMOS_FALSE;
+
+            BCM_LOG(DEBUG, log_id_flow, 
+                    "Processing a flow SET REQ mgmt message\n");
+            
+            do
+            {
+                if(BCMBAL_STATUS_UP != acc_term_status_get())
+                {
+                    BCM_LOG(ERROR, log_id_flow,  
+                            "ERROR - Access-terminal is not UP.  No further processing\n");
+                    ret = BCM_ERR_STATE;
+                    break;
+                }
+
+                b_flow_is_destined_to_host = ((BCMBAL_CFG_PROP_IS_SET(p_flow_cfg, flow, action) && 
+                                               (p_flow_cfg->data.action.cmds_bitmask & 
+                                                BCMBAL_ACTION_CMD_ID_TRAP_TO_HOST)) ? BCMOS_TRUE : BCMOS_FALSE);
+
+                admin_state_req = p_flow_cfg->data.admin_state;
+
+                BCM_LOG(INFO, log_id_flow,  
+                        "flow %d:%s request - admin state requested is %s\n",
+                        p_flow_key->flow_id,
+                        CORE_FSM_FLOW_TYPE_GET_STR(p_flow_key->flow_type),
+                        (BCMBAL_STATE_UP == admin_state_req) ? "UP" : "DOWN");
+
+                /*
+                 * Find or create the specified flow instance
+                 */
+                p_flow_inst = flow_inst_get(p_flow_key, FLOW_FLAG_ANY, &found_new_flow);
+                if(NULL == p_flow_inst)
+                {
+                    /* This is a fatal error condition
+                     */
+                    BCM_LOG(ERROR, log_id_flow,  
+                            "ERROR - Flow not found.  No further processing\n");
+                    ret = BCM_ERR_NOMEM;
+                    break;
+                }
+
+                /*
+                 * Fill in the local flow info data structure
+                 */
+                p_flow_inst->api_req_flow_info = *p_flow_cfg;
+
+                /* For flows that have already been configured, merge the
+                 * requested flow data with the current flow data, and this results in the new request.
+                 */
+                if((BCMOS_FALSE == found_new_flow) && 
+                   (p_flow_inst->api_req_flow_info.data.oper_status != p_flow_inst->current_flow_info.data.oper_status))
+                {
+                    bcmbal_flow_object_overlay_w_dst_priority(&p_flow_inst->api_req_flow_info,
+                                                              &p_flow_inst->current_flow_info);                     
+                } 
+
+                BCM_LOG(INFO, log_id_flow,  
+                        "flow access_int_id: %d, sub_term_id: %d\n",
+                        p_flow_inst->api_req_flow_info.data.access_int_id, 
+                        p_flow_inst->api_req_flow_info.data.sub_term_id);
+
+                /* Next, find sub term instance, if is flow UP */
+                if (BCMBAL_STATE_UP == admin_state_req)
+                {
+                    sub_term_key.intf_id = p_flow_inst->api_req_flow_info.data.access_int_id;
+                    sub_term_key.sub_term_id = p_flow_inst->api_req_flow_info.data.sub_term_id;
+
+                    p_sub_term_inst = sub_term_inst_get(&sub_term_key, SUB_TERM_FLAG_ACTIVE);
+
+                    if (!p_sub_term_inst && !is_multicast && !is_ds_n_to_1 && !b_flow_is_destined_to_host)
+                    {
+                        BCM_LOG(ERROR, log_id_flow, 
+                            "No active subscriber terminal with id=%u, and for flow type %s \n", 
+                            sub_term_key.sub_term_id,
+                            CORE_FSM_FLOW_TYPE_GET_STR(p_flow_key->flow_type));
+
+                        ret = BCM_ERR_NOENT;
+                        break;
+                    }
+
+                    /*if the flow is not a cpu flow (to host), then we should validate/use the sched/queue setting*/
+                    if(!b_flow_is_destined_to_host)
+                    {
+                        /*find tm queue instance*/
+                        ret = flow_queue_validate(&(p_flow_inst->api_req_flow_info), &p_tm_queue_inst); 
+                        if (ret != BCM_ERR_OK)
+                        {
+                            ret = BCM_ERR_NOENT;
+                            break;
+                        }
+                        ret = bcmbal_tm_queue_use_set(p_tm_queue_inst, BCMOS_TRUE);
+                        if (ret != BCM_ERR_OK)
+                        {
+                            ret = BCM_ERR_PARM;
+                            break;
+                        }
+                    }
+                }
+
+                p_flow_inst->p_sub_term_inst = p_sub_term_inst;
+                                                
+                /*
+                 * Process the request
+                 */
+                if(((BCMBAL_STATE_UP == admin_state_req) || found_new_flow)
+                   && (BCMBAL_STATE_UP != p_flow_inst->current_flow_info.data.admin_state))
+                {
+                    bcmbal_service_port_id            svc_port_id = 0;
+                    flow_inst                         *p_peer_flow;
+                    uint8_t                           svc_port_id_range;
+
+                    do
+                    {
+                        if (bcm_topo_pon_get_pon_family(p_flow_inst->api_req_flow_info.data.access_int_id) == BCM_TOPO_PON_FAMILY_GPON)
+                        {
+                            /* There's no need to do anything with the MAC in downstream flows that 
+                             * that are destined to the host CPU (i.e. NNI->CPU)
+                             */
+                            if((BCMBAL_FLOW_TYPE_UPSTREAM == p_flow_inst->api_req_flow_info.key.flow_type) ||
+                               !(b_flow_is_destined_to_host))
+                            {
+
+                                /*
+                                 * GEM resolution does not rely on the pbits in a packet, however, 
+                                 * we currently only support allocate a svc_port_id range of 1.
+                                 */
+                                svc_port_id_range = 1;
+                        
+                                /* Is there a peer flow configured already? (only upstream and downstream flows 
+                                 * can have a peer flow) 
+                                 * If not, look in the active list for a match.  NOTE: It might not be there.
+                                 */
+                                if( is_unicast && NULL == p_flow_inst->p_peer_flow_inst)
+                                {
+                                    /*
+                                     * See if we can find a peer flow (a peer flow is a flow that has
+                                     * the same flow ID as this flow does, but has the opposite direction 
+                                     * in the key).
+                                     */
+                            
+                                    /* Look for an active flow, but ignore the direction (BEWARE: we might
+                                     * find ourself!!)
+                                     */
+                                    p_peer_flow  = flow_inst_get(p_flow_key, 
+                                                                 FLOW_FLAG_ACTIVE | FLOW_FLAG_IGNORE_DIR, 
+                                                                 NULL);
+                            
+                                    /* If the flow that we found isn't us, then link it to our flow
+                                     */
+                                    if(p_peer_flow->api_req_flow_info.key.flow_type != 
+                                       p_flow_inst->api_req_flow_info.key.flow_type)
+                                    {
+                                        p_flow_inst->p_peer_flow_inst = p_peer_flow;
+                                    }
+                                }
+                        
+                                /* If a peer flow exists, copy the GEM ID from the peer flow into this flow
+                                 */
+                                if(NULL != p_flow_inst->p_peer_flow_inst)
+                                {
+                                    svc_port_id = 
+                                        p_flow_inst->p_peer_flow_inst->current_flow_info.data.svc_port_id;
+
+                                    BCM_LOG(DEBUG, log_id_flow,  
+                                            "Using GEM ID from peer flow (%d) on access_id %d\n", 
+                                            svc_port_id,
+                                            p_flow_inst->api_req_flow_info.data.access_int_id);
+                            
+                                    /* even though we have gem Id, get it allocated by rsrc mgr so that it can 
+                                     * manage ref counts.
+                                     */
+                                    ret = rsc_mgr_gem_alloc_unicast(
+                                           p_flow_inst->api_req_flow_info.data.access_int_id,
+                                           &svc_port_id,
+                                           svc_port_id_range,
+                                           p_flow_inst); /* A multicast flow cannot have a peer flow. So this means this is definitely not a multicast. */
+                                    if (BCM_ERR_OK != ret)
+                                    {
+                                        /* 
+                                         * An error has occurred trying to get mandatory data
+                                         */
+                                
+                                        BCM_LOG(ERROR, log_id_flow,  "Failed to get base GEM from resource manager\n");
+                                
+                                        /*
+                                         * @todo If the flow instance (that we got) is not active, then return it to the 
+                                         * free pool.
+                                         */
+                                
+                                        break;      
+                                    }
+                                }
+                                else /* A peer flow does not exist */
+                                {
+                                    /* needs single GEM for flows which is not multicast and not downstream N:1 service.
+                                       In another words, all upstream flows and downstream flows which is not N:1 service needs one GEM */
+                                    if(!is_multicast && !is_ds_n_to_1)
+                                    {
+                                        if(BCMOS_TRUE == BCMBAL_CFG_PROP_IS_SET(&p_flow_inst->api_req_flow_info,
+                                                                                flow,
+                                                                                svc_port_id))
+                                        {
+                                            svc_port_id = p_flow_inst->api_req_flow_info.data.svc_port_id;
+
+
+                                            BCM_LOG(DEBUG, log_id_flow,  
+                                                    "Using the base GEM ID supplied by the user (%d) on access_id %d\n", 
+                                                    svc_port_id,
+                                                    p_flow_inst->api_req_flow_info.data.access_int_id);
+                                         }
+                                        else
+                                        {
+                                            BCM_LOG(DEBUG, log_id_flow,  
+                                                    "Getting a new base GEM ID on access_id %d from resource manager\n",
+                                                    p_flow_inst->api_req_flow_info.data.access_int_id);
+                                            svc_port_id = 0; /* 0 is a magic number telling the resource manager that it should provide
+                                                              * the initial allocation of the base GEM */
+                                        }
+                            
+                                        ret = rsc_mgr_gem_alloc_unicast(p_flow_inst->api_req_flow_info.data.access_int_id,
+                                                                &svc_port_id,
+                                                                svc_port_id_range,
+                                                                p_flow_inst);
+
+                                        if (BCM_ERR_OK != ret)
+                                        {
+                                            /* 
+                                             * An error has occurred trying to get mandatory data
+                                             */
+                                    
+                                            BCM_LOG(ERROR, log_id_flow,  "Failed to get base GEM from resource manager\n");
+                                    
+                                            /*
+                                             * @todo If the flow instance (that we got) is not active, then return it to the 
+                                             * free pool.
+                                             */
+                                    
+                                            break;      
+                                        }
+                                    }
+                                    /* make sure the all members in the group assoficated with the flow has a GEM */
+                                    if(BCMBAL_CFG_PROP_IS_SET(&p_flow_inst->api_req_flow_info, flow, group_id))
+                                    {
+                                        bcmbal_group_key group_key;
+                                        bcmbal_group_owner group_owner;
+                                        
+                                        group_key.group_id = p_flow_inst->api_req_flow_info.data.group_id;
+                                        if(is_ds_n_to_1 || is_us_n_to_1 )
+                                        {
+                                            group_owner = BCMBAL_GROUP_OWNER_UNICAST;
+                                        }
+                                        else
+                                        {
+                                            group_owner = BCMBAL_GROUP_OWNER_MULTICAST;
+                                        }
+                                        
+                                        ret = group_owner_set(group_key, group_owner);
+                                        
+                                        if(BCM_ERR_OK != ret)
+                                        {
+                                            BCM_LOG(ERROR, log_id_flow,  
+                                                           "error %s while updating group owner\n", bcmos_strerror(ret));
+                                            break;
+                                        }                                        
+                                    } 
+                                }
+                                /* 
+                                 * Set the GEM ID into the object being processed
+                                 */
+                                if(svc_port_id)
+                                {
+                                    BCMBAL_CFG_PROP_SET(&p_flow_inst->api_req_flow_info, flow, svc_port_id,svc_port_id);
+                                    BCM_LOG(DEBUG, log_id_flow,  "GEM %d being used\n", svc_port_id);
+                                }
+                                /*
+                                 * alloc ID is only required on an UPSTREAM FLOW
+                                 */
+                                if(BCMBAL_FLOW_TYPE_UPSTREAM == p_flow_inst->api_req_flow_info.key.flow_type)
+                                {
+									tm_sched_inst * dummy_p_tm_sched_inst;
+									ret = flow_tm_get(&p_flow_inst->api_req_flow_info, &dummy_p_tm_sched_inst);
+									
+									if (BCM_ERR_OK != ret)
+									{
+										/* An error has occurred trying to get mandatory data  */
+										BCM_LOG(ERROR, log_id_flow,  "Failed to get required tm sched for agg port id\n");
+										break;		
+									}
+									ret = rsc_mgr_alloc_id_alloc( p_flow_inst->api_req_flow_info.data.access_int_id, 
+									&p_flow_inst->api_req_flow_info.data.agg_port_id, 1, p_flow_inst);
+									if (BCM_ERR_OK != ret)
+									{
+										BCM_LOG(ERROR, log_id_flow,  "Failed to get ALLOC ID from resource manager\n");
+										break;		
+									}
+
+                                    BCM_LOG(DEBUG, log_id_flow,  "ALLOC ID %d being used\n", p_flow_inst->api_req_flow_info.data.agg_port_id);
+                                }
+
+                                /*
+                                 * Perform the validation check(s) that the utils require
+                                 */
+                                if(BCM_ERR_OK != (ret = mac_util_flow_info_validate(&p_flow_inst->api_req_flow_info)))
+                                {
+                                    BCM_LOG(ERROR, log_id_flow, "Failed mac validation\n");
+                                    break;
+                                }
+                            }
+                        }
+                        else if (bcm_topo_pon_get_pon_family(p_flow_inst->api_req_flow_info.data.access_int_id) == BCM_TOPO_PON_FAMILY_EPON)
+                        {
+                            /* There's no need to do anything with the MAC in downstream flows that 
+                             * that are destined to the host CPU (i.e. NNI->CPU)
+                             */
+                            if((BCMBAL_FLOW_TYPE_UPSTREAM == p_flow_inst->api_req_flow_info.key.flow_type) ||
+                               !(b_flow_is_destined_to_host))
+                            {
+
+                                sub_term_key.intf_id = p_flow_inst->api_req_flow_info.data.access_int_id;
+                                sub_term_key.sub_term_id = p_flow_inst->api_req_flow_info.data.sub_term_id;
+
+                                p_sub_term_inst = sub_term_inst_get(&sub_term_key, SUB_TERM_FLAG_ACTIVE);
+
+                                if (!p_sub_term_inst)
+                                {
+                                    BCM_LOG(ERROR, log_id_flow, 
+                                            "Failed to get subscriber terminal with id=%u\n", 
+                                            sub_term_key.sub_term_id);
+                                    ret = BCM_ERR_NOENT;
+                                    break;
+                                }
+                                /*
+                                 * set svc_port to the subtunnel id.
+                                 */
+                                BCMBAL_CFG_PROP_SET(&p_flow_inst->api_req_flow_info, flow, 
+                                                    svc_port_id,p_sub_term_inst->current_sub_term_info.data.svc_port_id);
+
+                                /*
+                                 * Perform the validation check(s) that the utils require
+                                 */
+                                if(BCM_ERR_OK != (ret = mac_util_flow_info_validate(&p_flow_inst->api_req_flow_info)))
+                                {
+                                    BCM_LOG(ERROR, log_id_flow, "Failed mac validation\n");
+                                    break;
+                                }
+                            }
+                        }
+
+                        /* No need to do anything in the switch for upstream flows that 
+                         * that are destined to the host CPU (i.e. PON->CPU), so no switch
+                         * validation is necessary.
+                         */
+                        if(!((BCMBAL_FLOW_TYPE_UPSTREAM == p_flow_inst->api_req_flow_info.key.flow_type) &&
+                             b_flow_is_destined_to_host))
+                        {
+                            if(BCM_ERR_OK != (ret = sw_util_flow_info_validate(&p_flow_inst->api_req_flow_info)))
+                            {
+                                BCM_LOG(ERROR, log_id_flow, "Failed switch validation\n");
+                                break;
+                            }
+                        }
+
+                        p_flow_inst->current_flow_info.data.admin_state = BCMBAL_STATE_UP;
+                    
+                        /* Set the expected state of the oper_status upon success */
+                        p_flow_inst->api_req_flow_info.data.oper_status = BCMBAL_STATUS_UP;
+                    
+                        fsm_event.event_type = FLOW_FSM_EVENT_TYPE_ADMIN_UP;
+                        b_generate_event = BCMOS_TRUE;
+
+                    } while(0);
+
+                    if(BCM_ERR_OK != ret)
+                    {
+                        flow_free_by_entry(p_flow_inst);
+                        break;
+                    }
+                }
+                /*
+                 * NOTE: This is not a complete implementation of the admin down processing.
+                 *
+                 * @todo - complete admin down processing 
+                 */
+                else if(((BCMBAL_STATE_DOWN == admin_state_req) || found_new_flow)
+                        && (BCMBAL_STATE_DOWN != p_flow_inst->current_flow_info.data.admin_state))
+                {
+                    p_flow_inst->current_flow_info.data.admin_state = BCMBAL_STATE_DOWN;
+
+                    /* Set the expected state of the oper_status upon success */
+                    p_flow_inst->api_req_flow_info.data.oper_status = BCMBAL_STATUS_DOWN;
+
+                    fsm_event.event_type = FLOW_FSM_EVENT_TYPE_ADMIN_DN;
+                    b_generate_event = BCMOS_TRUE;
+                }
+                else
+                {
+                    /* @todo implement a MODIFY here */
+
+                    break;   /* no state change detected - do nothing for now */
+                }
+
+            }while(0);
+
+            /* We respond to the BAL public API backend with a result. We always 
+             * send a complete msg_payload back to the API, but the data portion 
+             * of the object is only relevant when a GET or GET-STATS has been requested.
+             */
+            rsp_ret = mgmt_msg_send_balapi_rsp(ret, msg_payload, oper_type, log_id_flow);
+
+            if(BCM_ERR_OK != rsp_ret || BCM_ERR_OK != ret)
+            {
+                /* the mgmt_msg_send_balapi_rsp function above logs any errors that occur there */
+                ret = (BCM_ERR_OK != rsp_ret) ? rsp_ret : ret;
+                break;
+            }
+
+             /* If there was an event generated, call the state machine exec */
+            if(BCMOS_TRUE == b_generate_event)
+            {
+                /*
+                 * Run the flow FSM to process this event
+                 */
+				ret = flow_fsm_exec(p_flow_inst, &fsm_event);
+            }
+            break;
+        }
+
+        case (BCMBAL_OBJ_MSG_TYPE_GET):
+        {
+
+            BCM_LOG(DEBUG, log_id_flow,  "Processing a flow GET REQ mgmt message\n");
+
+            do
+            {
+                if(BCMBAL_STATUS_UP != acc_term_status_get())
+                {
+                    BCM_LOG(ERROR, log_id_flow,  
+                            "ERROR - Access-terminal is not UP.  No further processing\n");
+                    ret = BCM_ERR_STATE;
+                }
+                else
+                {
+                    /*
+                     * Find the specified flow instance
+                     */
+                    p_flow_inst = flow_inst_get(p_flow_key, FLOW_FLAG_ACTIVE, NULL);
+                }
+
+                if(NULL == p_flow_inst)
+                {
+                    if(BCM_ERR_STATE != ret)
+                    {
+                        /* This is not a fatal error condition
+                         */
+                        BCM_LOG(ERROR, log_id_flow,  "ERROR - Specified flow (%d:%s) not found\n",
+                                p_flow_key->flow_id,
+                                CORE_FSM_FLOW_TYPE_GET_STR(p_flow_key->flow_type));
+                        ret =  BCM_ERR_NOENT;
+                    }
+ 
+                    break;
+                }
+
+                /* We respond to the BAL public API backend with a result. We always 
+                 * send a complete msg_payload back to the API, but the data portion 
+                 * of the object is only relevant when a GET or GET-STATS has been requested.
+                 */
+                p_flow_inst->current_flow_info.hdr.hdr.comm_hdr = ((bcmbal_obj *)msg_payload)->comm_hdr;
+                *((bcmbal_flow_cfg *)msg_payload) = p_flow_inst->current_flow_info;
+
+            } while (0);
+
+            mgmt_msg_send_balapi_rsp(ret, msg_payload, oper_type, log_id_flow);
+
+        }
+        break;            
+
+        case (BCMBAL_OBJ_MSG_TYPE_CLEAR):
+        {
+            BCM_LOG(DEBUG, log_id_flow,  "Processing a flow CLEAR REQ mgmt message\n");
+ 
+            do
+            {
+                if(BCMBAL_STATUS_UP != acc_term_status_get())
+                {
+                    BCM_LOG(ERROR, log_id_flow,  
+                            "ERROR - Access-terminal is not UP.  No further processing\n");
+                    ret = BCM_ERR_STATE;
+                    break;
+                }
+
+                /*
+                 * Find the specified flow instance
+                 */
+                p_flow_inst = flow_inst_get(p_flow_key, FLOW_FLAG_ACTIVE, NULL);
+
+                if(NULL == p_flow_inst)
+                {
+                    /* This is a fatal error condition
+                     */
+                    BCM_LOG(ERROR, log_id_flow,  "ERROR - Specified flow (%d:%s) not found\n",
+                            p_flow_key->flow_id,
+                            CORE_FSM_FLOW_TYPE_GET_STR(p_flow_key->flow_type));
+                    ret = BCM_ERR_NOENT;
+                    break;
+                }
+            } while(0);
+
+            /* We respond to the BAL public API backend with a result. We always 
+             * send a complete msg_payload back to the API, but the data portion 
+             * of the object is only relevant when a GET or GET-STATS has been requested.
+             */
+            rsp_ret = mgmt_msg_send_balapi_rsp(ret, msg_payload, oper_type, log_id_flow);
+
+            if(BCM_ERR_OK != rsp_ret || BCM_ERR_OK != ret)
+            {
+                /* the mgmt_msg_send_balapi_rsp function above logs any errors that occur there */
+                ret = (BCM_ERR_OK != rsp_ret) ? rsp_ret : ret;
+                break;
+            }
+
+            /* Merge the requested flow data with the current flow data, 
+             * and this is the new request.
+             */
+            bcmbal_flow_object_overlay_w_dst_priority(&p_flow_inst->api_req_flow_info,
+                                                      &p_flow_inst->current_flow_info);                     
+            /*
+             * Run the flow FSM to process this event
+             */
+            if(BCM_ERR_OK == ret)
+            {
+                fsm_event.event_type = FLOW_FSM_EVENT_TYPE_REMOVE;
+            
+                ret = flow_fsm_exec(p_flow_inst, &fsm_event);
+            }
+
+            break;
+        }
+
+        default:
+        {
+            BCM_LOG(ERROR, log_id_flow,  "Unsupported operation on flow object (%d)\n",
+                    oper_type );
+            ret = BCM_ERR_NOT_SUPPORTED;
+
+            /* We respond to the BAL public API backend with a result. We always 
+             * send a complete msg_payload back to the API, but the data portion 
+             * of the object is only relevant when a GET or GET-STATS has been requested.
+             */
+            mgmt_msg_send_balapi_rsp(ret, msg_payload, oper_type, log_id_flow);
+
+            break;
+        }
+    }
+
+    BCM_LOG(DEBUG, log_id_flow, "%s returns : %s\n", __FUNCTION__, bcmos_strerror(ret));
+
+    return ret;
+}
+
+
+/*****************************************************************************/
+/**
+ * @brief A function to process a flow object event received
+ *        from one of the BAL apps.
+ *
+ * @param msg_payload  A pointer to the util message
+ *                         
+ * @returns bcmos_errno 
+ *****************************************************************************/
+bcmos_errno process_flow_util_msg(void *msg_payload)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    flow_inst *p_flow_inst;
+    flow_fsm_event fsm_event;
+    bcmbal_msg_type type;
+    bcmbal_flow_key key;
+
+    type = bcmbal_type_minor_get(msg_payload);
+
+    BCM_LOG(DEBUG, log_id_flow,  "processing a flow %s util message from %s\n",
+            bcmbal_msg_t_str[type],
+            subsystem_str[bcmbal_sender_get(msg_payload)]);
+
+    /* recover the key from the message */
+    key = ((bal_util_msg_ind *)msg_payload)->obj_key.flow_key;
+
+    do
+    {
+        BCM_LOG(DEBUG, log_id_flow,  "Got flow key id from util message (%d)\n", key.flow_id);
+
+        /*
+         * Get the flow instance that's being referenced
+         */
+        if(NULL == (p_flow_inst = flow_inst_get(&key, FLOW_FLAG_ACTIVE, NULL)))
+        {  
+            BCM_LOG(ERROR, log_id_flow,  "invalid flow (%d, %s) found while processing a util message from %s\n",
+                    key.flow_id,
+                    CORE_FSM_FLOW_TYPE_GET_STR(key.flow_type),
+                    subsystem_str[bcmbal_sender_get(msg_payload)]);
+
+            ret = BCM_ERR_INTERNAL;
+
+            break;
+        }
+
+        /*
+         * Record the msg for further processing access
+         */
+        fsm_event.msg = msg_payload;
+
+        if (BAL_MSG_TYPE_IND == type)
+        {
+            fsm_event.event_type = FLOW_FSM_EVENT_TYPE_UTIL_MSG;
+        }
+        else if (BAL_MSG_TYPE_AUTO_IND == type)
+        {
+            fsm_event.event_type = FLOW_FSM_EVENT_TYPE_UTIL_AUTO_MSG;
+        }
+        else
+        {
+            ret = BCM_ERR_NOT_SUPPORTED;
+            BCM_LOG(ERROR, log_id_flow,  
+                    "Unknown message type received from the UTIL"
+                    " (not one of IND:AUTO_IND) (type:%d)\n",
+                    type);
+            break;
+        }
+
+        /*
+         * Run the Flow FSM to process this event
+         */
+        if(BCM_ERR_OK == ret)
+        {
+            ret = flow_fsm_exec(p_flow_inst, &fsm_event);
+        }
+    }
+    while(0);
+
+    return ret;
+}
+
+/*
+ * Helper functions
+ */
+
+/*****************************************************************************/
+/**
+ * @brief A function to retrieve a flow instance of the specified
+ *        class.
+ *
+ * @param key            A pointer to the key of the flow being 
+ *                       referenced
+ * @param search_flag    A flag specifying the type of flow
+ *                       instance to be retrieved
+ *
+ * @param is_new_flow    A returned value signifying whether a found flow was on the free list
+ *                         
+ * @returns flow_inst_t* A pointer to the found flow instance,
+ *                       or NULL if one is not found
+ *
+ *****************************************************************************/
+static flow_inst *flow_inst_get(bcmbal_flow_key *key, flow_flag search_flag, bcmos_bool *is_new_flow)
+{
+    flow_inst *current_entry = NULL;
+
+    if(NULL != is_new_flow)
+    {
+        *is_new_flow = BCMOS_FALSE;
+    }
+
+    /*
+     * First, check the active list if the caller has chosen to do so
+     */
+    if(FLOW_FLAG_ACTIVE & search_flag)
+    {
+        TAILQ_FOREACH(current_entry, 
+                      &FLOW_FSM_FLOW_LIST_CTX_PTR->active_flow_list, 
+                      flow_inst_next)
+        {
+ 
+            if((current_entry->api_req_flow_info.key.flow_id == key->flow_id) 
+               && 
+               ((FLOW_FLAG_IGNORE_DIR & search_flag) ? 
+                1:(current_entry->api_req_flow_info.key.flow_type == key->flow_type)))
+            {              
+                BCM_LOG(DEBUG, log_id_flow,  "Found active flow\n");
+                /* The flow instance pointer is in current_entry */
+                break;
+            }
+        }
+    } 
+        
+    /*
+     * Next, check the free list if the caller has chosen to do so
+     */
+    if((FLOW_FLAG_FREE & search_flag) && (NULL == current_entry))
+    {
+        /* Now check the free list */
+        if(!TAILQ_EMPTY(&FLOW_FSM_FLOW_LIST_CTX_PTR->free_flow_list))
+        {
+            /* Just grab the first entry */
+            current_entry = TAILQ_FIRST(&FLOW_FSM_FLOW_LIST_CTX_PTR->free_flow_list);
+
+            /* Remove it from the free list */
+            TAILQ_REMOVE(&FLOW_FSM_FLOW_LIST_CTX_PTR->free_flow_list, current_entry, flow_inst_next);
+
+            /* And add it to the active list */
+            TAILQ_INSERT_TAIL(&FLOW_FSM_FLOW_LIST_CTX_PTR->active_flow_list, current_entry, flow_inst_next);
+
+            /*
+             * Initialize the fsm state and some of the fields
+             */
+            current_entry->fsm_state = FLOW_FSM_STATE_NULL;
+            current_entry->p_peer_flow_inst = NULL;
+
+            if(NULL != is_new_flow)
+            {
+                *is_new_flow = BCMOS_TRUE;
+            }
+
+            BCM_LOG(DEBUG, log_id_flow,  "Using new flow\n");
+
+        }
+    }
+
+    if((FLOW_FLAG_ANY & search_flag) && (NULL == current_entry))
+    {
+        /*A flow was not found on either list */
+        BCM_LOG(DEBUG, log_id_flow,  "************** ERROR: no flow found\n");
+    }
+    
+    return current_entry;
+}
+
+
+/*****************************************************************************/
+/**
+ * @brief A function to retrieve a flow instance by access_if_id and svc_port_id
+ *
+ * @param access_if_id   access interface id of the flow being searched
+ * @param type           flow type (direction)
+ * @param svc_port_id    svc_port_id of the flow being searched
+ *
+ * @returns flow_inst_t* A pointer to the found flow instance,
+ *                       or NULL if one is not found
+ *****************************************************************************/
+flow_inst *flow_get_by_svc_id(uint16_t access_if_id, bcmbal_flow_type type, bcmbal_service_port_id svc_port_id)
+{
+    flow_inst *current_entry = NULL;
+
+    /*
+     * First, check the active list if the caller has chosen to do so
+     */
+    TAILQ_FOREACH(current_entry,
+        &FLOW_FSM_FLOW_LIST_CTX_PTR->active_flow_list,
+        flow_inst_next)
+    {
+
+        if((current_entry->api_req_flow_info.data.access_int_id == access_if_id)
+           &&
+           (current_entry->api_req_flow_info.key.flow_type == type)
+           &&
+           (current_entry->api_req_flow_info.data.svc_port_id == svc_port_id))
+        {
+            /* The flow instance pointer is in current_entry */
+            break;
+        }
+    }
+
+    return current_entry;
+}
+
+/*****************************************************************************/
+/**
+ * @brief A function to retrieve the current flow info for the specified 
+ *        flow instance.
+ *
+ * @param key    A flow key 
+ *
+ * @returns bcmbal_flow_cfg* A pointer to the current flow info for the
+ *                           specified flow, or NULL if the flow is not found
+ *****************************************************************************/
+bcmbal_flow_cfg *flow_get_current_info_by_key(bcmbal_flow_key key)
+{
+    flow_inst *current_entry = NULL;
+
+    /*
+     * Check the active list 
+     */
+    TAILQ_FOREACH(current_entry,
+        &FLOW_FSM_FLOW_LIST_CTX_PTR->active_flow_list,
+        flow_inst_next)
+    {
+
+        if((current_entry->current_flow_info.key.flow_id == key.flow_id)
+           &&
+           (current_entry->current_flow_info.key.flow_type == key.flow_type))
+        {
+            /* The flow instance pointer is in current_entry */
+            break;
+        }
+    }
+    
+    if(current_entry)
+    {
+        return &(current_entry->current_flow_info);
+    }
+    else
+    { 
+        return NULL;
+    }
+}
+
+/*****************************************************************************/
+/**
+ * @brief A function to retrieve a flow instance by access_if_id and agg_port_id
+ *
+ * @param access_if_id   access interface id of the flow being searched
+ * @param agg_port_id    svc_port_id of the flow being searched
+ *
+ * @returns flow_inst_t* A pointer to the found flow instance,
+ *                       or NULL if one is not found
+ *****************************************************************************/
+flow_inst *flow_get_by_agg_id(uint16_t access_if_id, bcmbal_aggregation_port_id agg_port_id)
+{
+    flow_inst *current_entry = NULL;
+
+    /*
+     * First, check the active list if the caller has chosen to do so
+     */
+    TAILQ_FOREACH(current_entry,
+        &FLOW_FSM_FLOW_LIST_CTX_PTR->active_flow_list,
+        flow_inst_next)
+    {
+
+        if((current_entry->current_flow_info.data.access_int_id == access_if_id)
+           &&
+           (current_entry->current_flow_info.key.flow_type == BCMBAL_FLOW_TYPE_UPSTREAM)
+           &&
+           (current_entry->current_flow_info.data.agg_port_id == agg_port_id))
+        {
+            /* The flow instance pointer is in current_entry */
+            break;
+        }
+    }
+
+    return current_entry;
+}
+
+
+/*****************************************************************************/
+/**
+ * @brief A function to retrieve the first flow instance associated with
+ *        a subscriber terminal
+ *
+ * @param access_if_id   access interface id of the flow being searched
+ * @param type           flow type (direction)
+ * @param sub_term_id    the subscriber terminal associated with the flow being
+ *                       searched 
+ * @param sub_term_uni   uni port on ONU
+ *
+ * @returns flow_inst_t* A pointer to the found flow instance,
+ *                       or NULL if one is not found
+ *****************************************************************************/
+static flow_inst *flow_get_first_by_sub_term(uint16_t access_if_id, 
+                                               bcmbal_flow_type type, 
+                                               uint16_t sub_term_id,
+                                               uint16_t sub_term_uni)
+{
+    flow_inst *current_entry = NULL;
+    flow_inst *matched_entry = NULL;
+
+    /*
+     * First, check the active list if the caller has chosen to do so
+     */
+    TAILQ_FOREACH(current_entry,
+        &FLOW_FSM_FLOW_LIST_CTX_PTR->active_flow_list,
+        flow_inst_next)
+    {
+
+        if((current_entry->current_flow_info.data.access_int_id == access_if_id)
+           &&
+           (current_entry->current_flow_info.key.flow_type == type)
+           &&
+           (current_entry->current_flow_info.data.sub_term_id == sub_term_id)
+           &&
+           (current_entry->current_flow_info.data.sub_term_uni_idx == sub_term_uni))
+        {
+            /* The flow instance pointer is in current_entry */
+            matched_entry = current_entry;
+            break;
+        }
+        else if((current_entry->current_flow_info.data.access_int_id == access_if_id)
+                &&
+                (current_entry->current_flow_info.key.flow_type == type)
+                &&
+                (current_entry->current_flow_info.data.sub_term_id == sub_term_id))
+        {
+            if(NULL == matched_entry)
+                matched_entry = current_entry; /* store the first matched entry irrespective of uni port match */
+        }
+    }
+
+    return matched_entry;
+}
+
+
+bcmos_errno svc_port_id_for_sub_term_ds_flow_get(uint16_t access_if_id, 
+                                                 uint16_t sub_term_id,
+                                                 uint16_t sub_term_uni,
+                                                 uint16_t *svc_port_id)
+{
+    flow_inst *p_flow_inst;
+    bcmos_errno ret = BCM_ERR_OK;
+
+    if(NULL == (p_flow_inst = flow_get_first_by_sub_term(access_if_id, 
+                                                         BCMBAL_FLOW_TYPE_DOWNSTREAM, 
+                                                         sub_term_id,
+                                                         sub_term_uni)))
+    {
+        ret = BCM_ERR_NOENT;
+    }
+    else
+    {
+        *svc_port_id = p_flow_inst->current_flow_info.data.svc_port_id;
+    }
+
+    return ret;
+
+}
+
+#ifdef FREE_FLOW_BY_KEY_SUPPORTED
+/*****************************************************************************/
+/**
+ * @brief A function to free a flow instance specified by a supplied key.
+ *
+ *
+ * @param key A pointer to the key of the subscriber terminal instance to be freed
+ *               
+ *                        
+ * @returns bcmos_errno 
+ *****************************************************************************/
+static bcmos_errno flow_free_by_key(bcmbal_flow_key *key)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    flow_inst *current_entry;
+    flow_inst *p_temp_entry;
+
+    BUG_ON(NULL == key);
+
+    /*
+     * First, check the active list (an active flow can be in the adding or removing state)
+     */
+    TAILQ_FOREACH_SAFE(current_entry, 
+                       &FLOW_FSM_FLOW_LIST_CTX_PTR->active_flow_list, 
+                       flow_inst_next,
+                       p_temp_entry)
+    {
+        if((current_entry->api_req_flow_info.key.flow_id == key->flow_id) &&
+           (current_entry->api_req_flow_info.key.flow_type == key->flow_type))
+        {
+
+            /* Remove it from the active list */
+            TAILQ_REMOVE(&FLOW_FSM_FLOW_LIST_CTX_PTR->active_flow_list, current_entry, flow_inst_next);
+
+            /* And add it to the free list */
+            current_entry->fsm_state = FLOW_FSM_STATE_NULL;
+            current_entry->p_sub_term_fsm = NULL;
+            TAILQ_INSERT_TAIL(&FLOW_FSM_FLOW_LIST_CTX_PTR->free_flow_list, current_entry, flow_inst_next);
+            break;
+        }
+    }
+
+    return ret;
+}
+#endif
+
+/*****************************************************************************/
+/**
+ * @brief A function to free a flow instance specified by a the supplied 
+ *        entry pointer.
+ *
+ * @param p_entry A pointer to the entry to be freed
+ *               
+ *                         
+ * @returns bcmos_errno 
+ *****************************************************************************/
+static bcmos_errno flow_free_by_entry(flow_inst *p_entry)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    flow_inst *current_entry;
+    flow_inst *p_temp_entry;
+
+    /*
+     * First, check the active list (an active flow can be in the adding or removing state)
+     */
+    TAILQ_FOREACH_SAFE(current_entry, 
+                       &FLOW_FSM_FLOW_LIST_CTX_PTR->active_flow_list, 
+                       flow_inst_next,
+                       p_temp_entry)
+    {
+        if(current_entry == p_entry)
+        {
+           /* Remove it from the active list */
+            TAILQ_REMOVE(&FLOW_FSM_FLOW_LIST_CTX_PTR->active_flow_list, current_entry, flow_inst_next);
+            break;
+        }
+    }
+        
+    /* And add it to the free list */
+    p_entry->fsm_state = FLOW_FSM_STATE_NULL;
+            
+    /* And initialize the current object in the flow instance */
+    flow_inst_entry_obj_init(p_entry);
+
+    TAILQ_INSERT_TAIL(&FLOW_FSM_FLOW_LIST_CTX_PTR->free_flow_list, p_entry, flow_inst_next);
+
+    return ret;
+}
+
+static bcmos_errno flow_tm_auto_create(bcmbal_flow_cfg *p_flow_info, tm_sched_inst **p_tm_sched_inst)
+{
+  	bcmos_errno ret = BCM_ERR_OK;
+  	bcmbal_tm_sched_cfg tm_sched_default_cfg;
+    bcmbal_tm_sched_owner owner;	
+    bcmbal_tm_sched_key tm_sched_key;
+    do
+    {
+        tm_sched_key.dir = BCMBAL_TM_SCHED_DIR_US;
+        BCMBAL_CFG_INIT(&tm_sched_default_cfg, tm_sched, tm_sched_key);
+        owner.type = BCMBAL_TM_SCHED_OWNER_TYPE_AGG_PORT;
+        owner.u.agg_port.intf_id = p_flow_info->data.access_int_id;
+        owner.u.agg_port.sub_term_id = p_flow_info->data.sub_term_id;
+        BCMBAL_CFG_PROP_SET(&tm_sched_default_cfg, tm_sched, owner, owner);
+        BCMBAL_CFG_PROP_SET(&tm_sched_default_cfg, tm_sched, creation_mode, BCMBAL_TM_CREATION_MODE_AUTO);
+        if(BCMBAL_CFG_PROP_IS_SET(p_flow_info,flow,sla))
+        {    
+            BCMBAL_ATTRIBUTE_PROP_SET(&(tm_sched_default_cfg.data.rate),tm_shaping, sbr, p_flow_info->data.sla.min_rate);
+            BCMBAL_ATTRIBUTE_PROP_SET(&(tm_sched_default_cfg.data.rate),tm_shaping, pbr, p_flow_info->data.sla.max_rate);
+        }
+        if (BCM_ERR_OK != (ret = bcmbal_tm_sched_auto_create(tm_sched_default_cfg, p_tm_sched_inst)))
+        {
+            BCM_LOG(ERROR, log_id_flow, "Could not create the auto tm sched\n");
+            break;
+        }
+    }while(0);
+    return ret;
+}
+
+static bcmos_errno flow_tm_get(bcmbal_flow_cfg *p_flow_info, tm_sched_inst **p_tm_sched_inst)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    do
+    {
+        if(BCMOS_TRUE == BCMBAL_CFG_PROP_IS_SET(p_flow_info,
+                                                flow,
+                                                agg_port_id))
+        {
+            BCM_LOG(DEBUG, log_id_flow,  
+                    "Using ALLOC ID supplied by the user (%d)\n",
+                    p_flow_info->data.agg_port_id );
+		
+            *p_tm_sched_inst = tm_sched_find_agg_port_node(p_flow_info->data.access_int_id, p_flow_info->data.agg_port_id);
+            if(NULL == *p_tm_sched_inst)
+            {
+                BCM_LOG(ERROR, log_id_flow,  
+                        "agg port %d (intf id %d sub term id %d ) has no tm sched\n",
+                        p_flow_info->data.agg_port_id, p_flow_info->data.access_int_id, p_flow_info->data.sub_term_id);
+                ret = BCM_ERR_PARM;
+                break;
+            }
+            if(p_flow_info->data.sub_term_id != (*p_tm_sched_inst)->req_tm_sched_info.data.owner.u.agg_port.sub_term_id)
+            {
+                BCM_LOG(ERROR, log_id_flow,  
+                        "agg port %d (intf id %d) is already assign to sub term %d (not %d) \n",
+                        p_flow_info->data.agg_port_id, p_flow_info->data.access_int_id, 
+                        (*p_tm_sched_inst)->req_tm_sched_info.data.owner.u.agg_port.sub_term_id, 
+                        p_flow_info->data.sub_term_id);
+                ret = BCM_ERR_PARM;
+	            break;
+            }
+    	}
+        else
+    	{
+            BCM_LOG(DEBUG, log_id_flow,  "Getting a new ALLOC ID from resource manager\n");
+            /*create a new agg port tm and allocate a new agg port id */  
+            ret = flow_tm_auto_create(p_flow_info, p_tm_sched_inst);
+            if(BCM_ERR_OK != ret)
+            {
+                BCM_LOG(ERROR, log_id_flow,  
+                        "could not create the auto tm sched for agg port %d (intf id %d)\n",
+                        p_flow_info->data.agg_port_id, p_flow_info->data.access_int_id);				
+     			break;
+            }
+            BCMBAL_CFG_PROP_SET(p_flow_info, flow, agg_port_id, 
+                                (*p_tm_sched_inst)->req_tm_sched_info.data.owner.u.agg_port.agg_port_id);
+        }
+    }while(0);
+    return ret;
+}
+/*@}*/
diff --git a/bal_release/src/core/main/flow_fsm.h b/bal_release/src/core/main/flow_fsm.h
new file mode 100755
index 0000000..c6bb3a0
--- /dev/null
+++ b/bal_release/src/core/main/flow_fsm.h
@@ -0,0 +1,170 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file flow_fsm.h
+ * @brief Code to support the BAL Flow FSM
+ *
+ * @defgroup flow Flow
+ * @ingroup core
+ */
+
+#ifndef FLOW_FSM_H
+#define FLOW_FSM_H
+
+/*@{*/
+
+#include <bcmos_system.h>
+#include <bal_api.h>
+
+#define FLOW_ALLOCATION_BLOCK_SIZE  (16384)
+
+#define CORE_FSM_FLOW_TYPE_GET_STR(_fsm_flow_type)   (BCMBAL_FLOW_TYPE_MULTICAST == (_fsm_flow_type) ? "Multicast":\
+                                             BCMBAL_FLOW_TYPE_BROADCAST == (_fsm_flow_type) ? "Broadcast":\
+                                             BCMBAL_FLOW_TYPE_DOWNSTREAM == (_fsm_flow_type) ? "Downstream":\
+                                             BCMBAL_FLOW_TYPE_UPSTREAM == (_fsm_flow_type) ? "Upstream":"Invalid")
+
+
+typedef enum
+{
+    FLOW_FSM_EVENT_TYPE_NONE                 = -1,
+    FLOW_FSM_EVENT_TYPE_ADMIN_UP                 ,
+    FLOW_FSM_EVENT_TYPE_ADMIN_DN                 ,
+    FLOW_FSM_EVENT_TYPE_REMOVE                   ,
+    FLOW_FSM_EVENT_TYPE_UTIL_MSG                 ,
+    FLOW_FSM_EVENT_TYPE_UTIL_AUTO_MSG            ,
+
+
+    FLOW_FSM_EVENT_TYPE__LAST,
+    FLOW_FSM_EVENT_TYPE__NUM_OF
+} flow_fsm_event_type;
+
+
+
+typedef enum
+{
+    FLOW_FSM_STATE_NONE =     -1,
+    FLOW_FSM_STATE_NULL         ,
+    FLOW_FSM_STATE_CONFIGURING  ,
+    FLOW_FSM_STATE_CONFIGURED   ,
+    FLOW_FSM_STATE_REMOVING     ,
+ 
+
+    FLOW_FSM_STATE__LAST,
+    FLOW_FSM_STATE__NUM_OF
+} flow_fsm_state;
+
+
+typedef enum
+{
+    FLOW_FLAG_ACTIVE =     1<<0,    /**< A flow is on the active list */
+    FLOW_FLAG_FREE =       1<<1,    /**< A flow is on the free list */
+    FLOW_FLAG_ANY =        (FLOW_FLAG_ACTIVE | FLOW_FLAG_FREE),    /**< A flow is on either the active or free list */
+    FLOW_FLAG_IGNORE_DIR = 1<<2     /**< Ignore direction during operation */
+} flow_flag;
+
+
+typedef struct flow_fsm_event_t
+{
+    flow_fsm_event_type event_type;   /**< The flow fsm events */
+    void             *msg;
+
+    /* other necessary information */
+} flow_fsm_event;
+
+
+/* Flow state in MAC plugin */
+typedef enum
+{
+    FLOW_MAC_STATE_NONE  =  0x00,    /**< Neither svc_id nor agg_id configured */
+    FLOW_MAC_STATE_SVC   =  1<<0,    /**< SVC is configured */
+    FLOW_MAC_STATE_AGG   =  1<<1,    /**< AGG is configured */
+    FLOW_MAC_STATE_READY = (FLOW_MAC_STATE_SVC | FLOW_MAC_STATE_AGG)
+} flow_mac_state;
+
+typedef struct flow_inst flow_inst;
+struct flow_inst
+{
+    bcmbal_flow_cfg    current_flow_info;    /**< The current information for this flow (used for GET) */
+    bcmbal_flow_cfg    api_req_flow_info;    /**< The last flow object info received from the Public API */
+    flow_fsm_state      fsm_state;           /**< The Flow FSM state */
+    flow_mac_state      mac_state;           /**< Flow state from MAC point of view */
+    struct flow_inst      *p_peer_flow_inst; /**< Pointer to the linked flow in the opposite direction (if any) */
+    struct sub_term_inst  *p_sub_term_inst;  /**< Pointer to subscriber terminal instance associated with this flow */
+    bcmos_timer           timer_info;        /**< A structure used for the state machine timeout timer */
+    TAILQ_ENTRY(flow_inst) flow_inst_next ;  /**< TAILQ link */
+    TAILQ_ENTRY(flow_inst) rsc_mgr_list_next ;  /**< TAILQ link used for storing in Resource mgr list */
+};
+
+
+/* 
+ * Flow FSM data structures
+ */
+typedef struct flow_fsm_ctx
+{
+    /* Lists of free flow entries and active flow entries
+     */
+    TAILQ_HEAD(free_flow_list_head, flow_inst) free_flow_list;
+
+    TAILQ_HEAD(active_flow_list_head, flow_inst) active_flow_list;
+
+} flow_fsm_ctx;
+
+
+/* 
+ * Function declarations 
+ */
+extern bcmos_errno flow_fsm_init(void);
+extern bcmos_errno flow_fsm_finish(void);
+
+extern bcmos_errno process_flow_object(void *msg_payload);
+
+extern bcmos_errno process_flow_util_msg(void *msg_payload);
+
+extern flow_inst *flow_get_by_svc_id(uint16_t access_if_id, 
+                                       bcmbal_flow_type type,
+                                       bcmbal_service_port_id svc_port_id);
+
+extern flow_inst *flow_get_by_agg_id(uint16_t access_if_id, 
+                                       bcmbal_aggregation_port_id agg_port_id);
+
+extern bcmos_errno svc_port_id_for_sub_term_ds_flow_get(uint16_t access_if_id, 
+                                                        uint16_t sub_term_id,
+                                                        uint16_t sub_term_uni,
+                                                        uint16_t *svc_port_id);
+
+extern bcmbal_flow_cfg *flow_get_current_info_by_key(bcmbal_flow_key key);
+
+
+/*@}*/
+
+#endif /*FLOW_FSM_H */
+
diff --git a/bal_release/src/core/main/fsm_common.c b/bal_release/src/core/main/fsm_common.c
new file mode 100644
index 0000000..0e1a8e5
--- /dev/null
+++ b/bal_release/src/core/main/fsm_common.c
@@ -0,0 +1,358 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file fsm_common.c
+ * @brief Common code to support the BAL access terminal FSMs
+ *
+ * @addtogroup core
+ */
+
+/*@{*/
+
+/*--- project includes ---*/
+#include <bcmos_system.h>
+#include <acc_term_fsm.h>
+#include <bal_msg.h>
+#include <bal_api.h>
+#include "bal_worker.h"
+#include "bal_mac_util.h"
+#include "bal_switch_util.h"
+#include <bal_osmsg.h>
+#include <fsm_common.h>
+
+#ifdef ENABLE_LOG
+#include <bcm_dev_log.h>
+#endif
+
+
+/*****************************************************************************/
+/**
+ * @brief Send a management message response
+ *
+ * A Worker module function that sends the specified message to the
+ * BAL Public API.
+ *
+ * @param cmd_status  The results of the command associated with the message
+ *
+ * @param msg_payload A pointer to the message to be sent
+ *
+ * @param oper_type The operation type of the object in this response
+ *
+ * @param log_id The log id of the calling component
+ *
+ * @returns bcmos_errno
+ *
+ *****************************************************************************/
+bcmos_errno mgmt_msg_send_balapi_rsp(bcmos_errno cmd_status, 
+                                     void *msg_payload,
+                                     bcmbal_obj_msg_type oper_type,
+                                     dev_log_id log_id)
+{
+
+    bcmos_errno ret = BCM_ERR_OK;
+
+    /* Parameter checks */
+    BUG_ON(NULL == msg_payload);
+
+    BCM_LOG(DEBUG, log_id, "sending rsp message to the public api (payload at %p)\n",
+            msg_payload);
+
+    /*
+     * Send the response back to the BAL Public API backend
+     */
+    bcmbal_msg_hdr_set(msg_payload,
+                       bcmbal_type_major_get(msg_payload),
+                       BAL_MSG_TYPE_RSP,
+                       BAL_SUBSYSTEM_CORE,
+                       bcmbal_msg_id_obj_get(msg_payload),
+                       bcmbal_msg_id_oper_get(msg_payload),
+                       bcmbal_ex_id_get(msg_payload));
+
+    /* Return the command status to the Public API backend */
+    ((bcmbal_obj *)(msg_payload))->status = cmd_status;
+
+    ((bcmbal_obj *)(msg_payload))->dir = BCMBAL_OBJ_MSG_DIR_RESPONSE;
+
+    ((bcmbal_obj *)(msg_payload))->type = oper_type;
+ 
+    if(BCM_ERR_OK != cmd_status)
+    {
+        ((bcmbal_obj *)(msg_payload))->presence_mask = 0;
+    }
+ 
+    /* Send message, but don't free it. It is still being used by FSM */
+    if(BCM_ERR_OK != (ret = bcmbal_msg_send(p_bal_core_to_api_queue, msg_payload, BCMOS_MSG_SEND_NO_FREE_ON_ERROR)))
+    {
+        BCM_LOG(ERROR, log_id, "msg_send failed to send rsp to core (error:%s)\n",
+                bcmos_strerror(ret));
+    }
+    else
+    {
+        BCM_LOG(DEBUG, log_id, "RSP message sent to the public api with status=%s\n",
+                bcmos_strerror(cmd_status));
+    }
+    
+    return ret;
+
+}
+
+
+/*****************************************************************************/
+/**
+ * @brief Send a management message indication
+ *
+ * A Worker module function that sends the specified message to the
+ * BAL Public API.
+ *
+ * @param cmd_status  The results of the command associated with the message
+ *
+ * @param is_auto_ind Set to BCMOS_TRUE if the indication to be sent is an AUTO IND
+ *
+ * @param msg_payload A pointer to the message to be sent (a BAL object!) (may be NULL)
+ *
+ * @param log_id The log id of the calling component
+ *
+ * @returns bcmos_errno
+ *
+ *****************************************************************************/
+static bcmos_errno _mgmt_msg_send_balapi_ind(bcmos_errno cmd_status,
+                                             bcmos_bool is_auto_ind,
+                                             void *msg_payload, /* If this is NULL, there is no message body */
+                                             dev_log_id log_id)
+{
+
+    bcmos_errno ret = BCM_ERR_OK;
+    uint16_t payload_size;
+    void *p_ind_msg;
+    bcmbal_obj_id obj_type;
+
+    if(NULL == msg_payload)
+    {
+        obj_type = BCMBAL_OBJ_ID_ANY;
+        payload_size = sizeof(bcmbal_obj);
+    }
+    else
+    {
+        switch(((bcmbal_obj *)msg_payload)->obj_type)
+        {
+            case (BCMBAL_OBJ_ID_FLOW):
+            {
+                payload_size = sizeof(bcmbal_flow_cfg);
+                break;
+            }
+            
+            case (BCMBAL_OBJ_ID_ACCESS_TERMINAL):
+            {
+                payload_size = sizeof(bcmbal_access_terminal_cfg);
+                break;
+            }
+            
+            case (BCMBAL_OBJ_ID_INTERFACE):
+            {
+                payload_size = sizeof(bcmbal_interface_cfg);
+                break;
+            }
+
+            case (BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL):
+            {
+                payload_size = sizeof(bcmbal_subscriber_terminal_cfg);
+                break;
+            }
+
+            case (BCMBAL_OBJ_ID_GROUP):
+            {
+                payload_size = sizeof(bcmbal_group_cfg);
+                break;
+            }
+
+            case (BCMBAL_OBJ_ID_TM_SCHED):
+            {
+                payload_size = sizeof(bcmbal_tm_sched_cfg);
+                break;
+            }
+
+            case (BCMBAL_OBJ_ID_TM_QUEUE):
+            {
+                payload_size = sizeof(bcmbal_tm_queue_cfg);
+                break;
+            }
+
+            default:
+            {
+                BCM_LOG(ERROR, log_id, "indication for object (%d) not supported\n", 
+                        ((bcmbal_obj *)msg_payload)->obj_type);
+                ret = BCM_ERR_PARM;
+                goto out;
+            }
+        }
+            
+    }
+
+    p_ind_msg = bcmbal_msg_calloc(payload_size);
+
+    if(NULL == msg_payload)
+    {
+        ((bcmbal_obj *)p_ind_msg)->obj_type = obj_type;
+    }
+    else
+    {
+        memcpy(p_ind_msg, msg_payload, payload_size);
+    }
+    
+    /*
+     * Send the indication back to the BAL Public API backend
+     */
+    bcmbal_msg_hdr_set(p_ind_msg,
+                       BCMBAL_MGMT_API_IND_MSG,
+                       (BCMOS_TRUE == is_auto_ind) ? BAL_MSG_TYPE_AUTO_IND : BAL_MSG_TYPE_IND,
+                       BAL_SUBSYSTEM_CORE,
+                       ((bcmbal_obj *)p_ind_msg)->obj_type,
+                       0,
+                       0);
+
+    /* Return the command status to the Public API backend */
+    ((bcmbal_obj *)(p_ind_msg))->status = cmd_status;
+
+    ((bcmbal_obj *)(p_ind_msg))->type = BCMBAL_OBJ_MSG_TYPE_GET;
+    ((bcmbal_obj *)(p_ind_msg))->dir = BCMBAL_OBJ_MSG_DIR_RESPONSE;
+
+    BCM_LOG(DEBUG, log_id, "sending IND message to the public api (payload at %p)\n", p_ind_msg);
+
+    if(BCM_ERR_OK != (ret = bcmbal_msg_send(p_bal_core_to_api_ind_queue, p_ind_msg, BCMOS_MSG_SEND_AUTO_FREE)))
+    {
+        BCM_LOG(ERROR, log_id, "msg_send failed to send IND to public API (%s)\n", bcmos_strerror(ret));
+    }
+    else
+    {
+        BCM_LOG(DEBUG, log_id, "IND message sent to the public api with status=%s\n",
+                bcmos_strerror(cmd_status));
+    }
+    
+  out:
+    return ret;
+
+}
+
+bcmos_errno mgmt_msg_send_balapi_ind(bcmos_errno cmd_status,
+                                     void *msg_payload, /* If this is NULL, there is no message body */
+                                     dev_log_id log_id)
+{
+
+    return _mgmt_msg_send_balapi_ind(cmd_status,
+                                     BCMOS_FALSE,
+                                     msg_payload, 
+                                     log_id);
+}
+
+bcmos_errno mgmt_msg_send_balapi_auto_ind(bcmos_errno cmd_status,
+                                          void *msg_payload, /* If this is NULL, there is no message body */
+                                          dev_log_id log_id)
+{
+
+    return _mgmt_msg_send_balapi_ind(cmd_status,
+                                     BCMOS_TRUE,
+                                     msg_payload,
+                                     log_id);
+}
+
+/*****************************************************************************/
+/**
+ * @brief Create and Start the FSM timer 
+ *
+ * @param p_timer_inst   A pointer to an instance of a timer data structure
+ *
+ * @param p_inst    An opaque pointer to an FSM instance to be passed to the timer
+ *                  expiry handler
+ *
+ * @param p_timer_expiry_handler   A timer expiry handler function
+ *
+ * @param delay   The delay interval (in mS) for this timer to run before the
+ *                expiry handler is called
+ *
+ * @param log_id   The log_id to use when logging errors encountered in this 
+ *                 function
+ *
+ * @returns bcmos_errno
+ */
+bcmos_errno fsm_timer_start(bcmos_timer *p_timer_inst,
+                            void *p_inst,
+                            F_bcmos_timer_handler p_timer_expiry_handler,
+                            uint32_t delay,  /* delay is in mS */
+                            dev_log_id log_id)
+{
+
+    bcmos_errno ret = BCM_ERR_OK;
+    bcmos_timer_parm timer_spec;
+
+    /* Parameter checks */
+    BUG_ON(p_inst == NULL);    
+    BUG_ON(p_timer_expiry_handler == NULL);    
+    BUG_ON(p_timer_inst == NULL);    
+
+
+    /* Create bcm_os timer */
+    timer_spec.owner = BCMOS_MODULE_ID_WORKER_MGMT; 
+    timer_spec.handler = p_timer_expiry_handler;
+    timer_spec.data = (long) p_inst;
+    timer_spec.periodic = BCMOS_FALSE;
+
+    if (BCM_ERR_OK != bcmos_timer_create(p_timer_inst, &timer_spec))
+    {
+        BCM_LOG(ERROR, log_id, "Can't create timer for FSM\n");
+        ret = BCM_ERR_NORES;
+    }
+    else
+    {
+        /* Start the timer.  Timer resolution is in uS*/
+        bcmos_timer_start(p_timer_inst, delay*1000);
+    }
+
+    return ret;
+
+}
+
+/*****************************************************************************/
+/**
+ * @brief Stop and delete the specified FSM timer 
+ *
+ * @param p_timer_inst   A pointer to an instance of a timer data structure
+ *
+ */
+void fsm_timer_stop(bcmos_timer *p_timer_inst)
+{        
+    /* Parameter checks */
+    BUG_ON(p_timer_inst == NULL);    
+
+    bcmos_timer_destroy(p_timer_inst);
+}
+
+/*@}*/
diff --git a/bal_release/src/core/main/fsm_common.h b/bal_release/src/core/main/fsm_common.h
new file mode 100644
index 0000000..0e5b803
--- /dev/null
+++ b/bal_release/src/core/main/fsm_common.h
@@ -0,0 +1,73 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file fsm_common.h
+ * @brief Common code to support the BAL Access Terminal FSMs
+ *
+ * @ingroup core
+ */
+#ifndef FSM_COMMON_H
+#define FSM_COMMON_H
+
+/*@{*/
+
+#include <bal_common.h>
+#include <bal_obj.h>
+
+#define TIMER_DURATION_1_SEC                      (1000)
+#define TIMER_DURATION_IN_SEC(time_in_seconds)    (TIMER_DURATION_1_SEC*time_in_seconds)
+
+
+extern bcmos_errno mgmt_msg_send_balapi_rsp(bcmos_errno cmd_status, 
+                                            void *msg_payload,
+                                            bcmbal_obj_msg_type oper_type, 
+                                            dev_log_id log_id);
+
+extern bcmos_errno mgmt_msg_send_balapi_ind(bcmos_errno cmd_status,
+                                            void *msg_payload, /* If this is NULL, there is no message body */
+                                            dev_log_id log_id);
+
+extern bcmos_errno mgmt_msg_send_balapi_auto_ind(bcmos_errno cmd_status,
+                                                 void *msg_payload, /* If this is NULL, there is no message body */
+                                                 dev_log_id log_id);
+
+extern bcmos_errno fsm_timer_start(bcmos_timer *p_timer_inst,
+                                   void *p_inst,
+                                   F_bcmos_timer_handler p_timer_expiry_handler,
+                                   uint32_t delay,  /* delay is in mS */
+                                   dev_log_id log_id);
+
+extern void fsm_timer_stop(bcmos_timer *p_timer_inst);
+
+/*@}*/
+
+#endif /*FSM_COMMON_H */
diff --git a/bal_release/src/core/main/group_fsm.c b/bal_release/src/core/main/group_fsm.c
new file mode 100644
index 0000000..97b0a45
--- /dev/null
+++ b/bal_release/src/core/main/group_fsm.c
@@ -0,0 +1,2162 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file group_fsm.c
+ * @brief Code to support the BAL group FSM
+ *
+ *
+ */
+
+/*@{*/
+
+#include <bcmos_system.h>
+#include <group_fsm.h>
+#include <bal_msg.h>
+#include <bal_osmsg.h>
+#include "bal_worker.h"
+#include "bal_mac_util.h"
+#include "bal_switch_util.h"
+#include "rsc_mgr.h"
+
+#include <bal_objs.h>
+#include <fsm_common.h>
+
+#ifdef ENABLE_LOG
+#include <bcm_dev_log.h>
+
+ /*
+ * @brief The logging device id for group
+ */
+static dev_log_id log_id_group;
+#endif
+
+/* local function declarations */
+static bcmos_errno group_fsm_create(group_inst *p_group_inst,
+                                   void *msg,
+                                   group_fsm_event *p_event);
+
+static bcmos_errno group_fsm_destroy(group_inst *p_group_inst,
+                                     void *msg,
+                                     group_fsm_event *p_event);
+
+static bcmos_errno group_fsm_add(group_inst *p_group_inst,
+                                 void *msg,
+                                 group_fsm_event *p_event);
+
+static bcmos_errno group_fsm_remove(group_inst *p_group_inst,
+                                    void *msg,
+                                    group_fsm_event *p_event);
+
+static bcmos_errno group_fsm_set(group_inst *p_group_inst,
+                                 void *msg,
+                                 group_fsm_event *p_event);
+
+static bcmos_errno group_fsm_configuring_util_msg(group_inst *p_group_inst,
+                                                  void *msg,
+                                                  group_fsm_event *p_event);
+
+static bcmos_errno group_fsm_deleting_util_msg(group_inst *p_group_inst,
+                                                  void *msg,
+                                                  group_fsm_event *p_event);
+
+static bcmos_errno group_fsm_ignore_api_msg(group_inst *p_group_inst,
+                                            void *msg,
+                                            group_fsm_event *p_event);
+
+static bcmos_errno group_fsm_state_err(group_inst *p_group_inst,
+                                      void *msg,
+                                      group_fsm_event *p_event);
+
+static bcmos_errno group_fsm_exec(group_inst *p_group_inst, group_fsm_event *p_event);
+
+static group_inst *group_inst_get(bcmbal_group_key *key, group_flag search_flag);
+
+static bcmos_errno group_free_by_entry(group_inst *p_entry);
+
+static bcmos_errno bcmbal_group_object_member_remove(bcmbal_group_cfg *p_req_group,
+                                                     bcmbal_group_cfg *p_cur_group);
+
+static bcmos_errno bcmbal_group_object_member_add(bcmbal_group_cfg *p_req_group,
+                                                  bcmbal_group_cfg *p_cur_group);
+
+static bcmos_errno bcmbal_group_object_member_replace(bcmbal_group_cfg *p_req_group,
+                                                      bcmbal_group_cfg *p_cur_group);
+
+static bcmos_errno bcmbal_group_object_overlay(bcmbal_group_cfg *p_req_group,
+                                               bcmbal_group_cfg *p_cur_group);
+                                                      /*
+ * @brief The Global group fsm context data structure
+ */
+static group_fsm_ctx g_group_fsm_group_list_ctx;
+
+/*
+ * Macros for group ctx access
+ */
+#define GROUP_FSM_GROUP_LIST_CTX      (g_group_fsm_group_list_ctx)
+#define GROUP_FSM_GROUP_LIST_CTX_PTR  (&g_group_fsm_group_list_ctx)
+
+/*
+ *  @brief The definition of a group FSM state processing function
+ */
+typedef bcmos_errno (* group_fsm_state_processor)(group_inst *, void *, group_fsm_event *);
+
+/*
+ *  @brief The Group FSM state processing array
+ */
+static group_fsm_state_processor group_states[GROUP_FSM_STATE__NUM_OF][GROUP_FSM_EVENT_TYPE__NUM_OF] =
+{
+
+    [GROUP_FSM_STATE_NULL] =
+    {
+        /*
+         * Next state: COMFIGURING
+         */
+        [GROUP_FSM_EVENT_TYPE_CREATE]  = group_fsm_create,
+
+        /*
+         * Next state: NULL
+         */
+        [GROUP_FSM_EVENT_TYPE_DESTROY] = group_fsm_ignore_api_msg,
+
+        /*
+         * Next state: CONFIGURING
+         */
+        [GROUP_FSM_EVENT_TYPE_ADD]     = group_fsm_add,
+
+        /*
+         * Next state: NULL
+         */
+        [GROUP_FSM_EVENT_TYPE_REMOVE] = group_fsm_ignore_api_msg,
+
+        /*
+         * Next state: CONFIGURING
+         */
+        [GROUP_FSM_EVENT_TYPE_SET] = group_fsm_set,
+
+    },
+    [GROUP_FSM_STATE_CONFIGURING] =
+    {
+        /*
+         * Next state: COMFIGURING
+         */
+        [GROUP_FSM_EVENT_TYPE_CREATE]  = group_fsm_ignore_api_msg,
+
+        /*
+         * Next state: COMFIGURING
+         */
+        [GROUP_FSM_EVENT_TYPE_DESTROY] = group_fsm_ignore_api_msg,
+
+        /*
+         * Next state: CONFIGURING
+         */
+        [GROUP_FSM_EVENT_TYPE_ADD]     = group_fsm_ignore_api_msg,
+
+        /*
+         * Next state: CONFIGURING
+         */
+        [GROUP_FSM_EVENT_TYPE_REMOVE] = group_fsm_ignore_api_msg,
+
+        /*
+         * Next state: CONFIGURING
+         */
+        [GROUP_FSM_EVENT_TYPE_SET] = group_fsm_ignore_api_msg,
+
+        /*
+         * Next state: CONFIGURED
+         */
+        [GROUP_FSM_EVENT_TYPE_UTIL_MSG]  = group_fsm_configuring_util_msg,
+
+    },
+
+    [GROUP_FSM_STATE_CONFIGURED] =
+    {
+        /*
+         * Next state: COMFIGURING
+         */
+        [GROUP_FSM_EVENT_TYPE_CREATE]  = group_fsm_ignore_api_msg,
+
+        /*
+         * Next state: DELETING
+         */
+        [GROUP_FSM_EVENT_TYPE_DESTROY] = group_fsm_destroy,
+
+        /*
+         * Next state: CONFIGURING
+         */
+        [GROUP_FSM_EVENT_TYPE_ADD]     = group_fsm_add,
+
+        /*
+         * Next state: CONFIGURING
+         */
+        [GROUP_FSM_EVENT_TYPE_REMOVE] = group_fsm_remove,
+
+        /*
+         * Next state: CONFIGURING
+         */
+        [GROUP_FSM_EVENT_TYPE_SET] = group_fsm_set,
+
+    },
+
+    [GROUP_FSM_STATE_DELETING] =
+    {
+       /*
+         * Next state: DELETING
+         */
+        [GROUP_FSM_EVENT_TYPE_CREATE]  = group_fsm_ignore_api_msg,
+
+        /*
+         * Next state: DELETING
+         */
+        [GROUP_FSM_EVENT_TYPE_DESTROY] = group_fsm_ignore_api_msg,
+
+        /*
+         * Next state: DELETING
+         */
+        [GROUP_FSM_EVENT_TYPE_ADD]     = group_fsm_ignore_api_msg,
+
+        /*
+         * Next state: DELETING
+         */
+        [GROUP_FSM_EVENT_TYPE_REMOVE] = group_fsm_ignore_api_msg,
+
+        /*
+         * Next state: DELETING
+         */
+        [GROUP_FSM_EVENT_TYPE_SET] = group_fsm_ignore_api_msg,
+
+        /*
+         * Next state: NULL
+         */
+        [GROUP_FSM_EVENT_TYPE_UTIL_MSG]  = group_fsm_deleting_util_msg,
+
+    },
+
+};
+
+static char *state_name_str[] =
+{
+    "GROUP_FSM_STATE_NULL",
+    "GROUP_FSM_STATE_CONFIGURING",
+    "GROUP_FSM_STATE_CONFIGURED",
+    "GROUP_FSM_STATE_DELETING",
+};
+
+/* Ensure that the name array size matches the associated enum */
+BAL_STATIC_ASSERT (GROUP_FSM_STATE__LAST == (sizeof (state_name_str) / sizeof (char *)), group_fsm_state);
+
+static char *group_state_name_get(group_fsm_state state)
+{
+    if(state < GROUP_FSM_STATE__LAST)
+    {
+        return state_name_str[state];
+    }
+    else
+    {
+        return "GROUP_UNKNOWN";
+    }
+}
+
+static char *event_name_str[] =
+{
+    "GROUP_FSM_CREATE_EVENT",
+    "GROUP_FSM_DESTROY_EVENT",
+    "GROUP_FSM_ADD_EVENT",
+    "GROUP_FSM_REMOVE_EVENT",
+    "GROUP_FSM_SET_EVENT",
+    "GROUP_FSM_UTIL_MSG_EVENT",
+};
+
+/* Ensure that the name array size matches the associated enum */
+BAL_STATIC_ASSERT (GROUP_FSM_EVENT_TYPE__LAST == (sizeof (event_name_str) / sizeof (char *)), group_fsm_event_type);
+
+static char *group_event_name_get(group_fsm_event_type event)
+{
+    if(event < GROUP_FSM_EVENT_TYPE__LAST)
+    {
+        return event_name_str[event];
+    }
+    else
+    {
+        return "GROUP_EVT_UNKNOWN";
+    }
+}
+
+/*****************************************************************************/
+/**
+ * @brief A function to initialize the current_group_info object of the 
+ *        supplied entry.
+ *
+ * @param p_entry A pointer to the entry to be initialized
+ *
+ *
+ * @returns void
+ *****************************************************************************/
+static void group_inst_entry_obj_init(group_inst *p_entry)
+{
+    /* The actual key content is irrelevant for free groups */
+    bcmbal_group_key key = { .group_id = 0 };
+
+    BCMBAL_CFG_INIT(&p_entry->current_group_info,
+                    group,
+                    key);
+
+    BCMBAL_OBJ_IN_PROGRESS_SET(&(p_entry->current_group_info), BCMOS_FALSE);
+}
+
+/*****************************************************************************/
+/**
+ * @brief A function to initialize the Group FSM infrastructure.
+ *
+ *        NOTE: This is called once on startup and NOT for each FSM instance.
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+bcmos_errno group_fsm_init(void)
+{
+    int ii;
+    group_inst *new_entry;
+    bcmos_errno ret = BCM_ERR_OK;
+
+#ifdef ENABLE_LOG
+    log_id_group = bcm_dev_log_id_register("GROUP", DEV_LOG_LEVEL_INFO, DEV_LOG_ID_TYPE_BOTH);
+    BUG_ON(log_id_group == DEV_LOG_INVALID_ID);
+#endif
+
+    /* Initialize all of the group queues */
+    TAILQ_INIT(&GROUP_FSM_GROUP_LIST_CTX_PTR->free_group_list);
+    TAILQ_INIT(&GROUP_FSM_GROUP_LIST_CTX_PTR->active_group_list);
+
+    /* Populate the free list with it's initial set of groups
+     */
+    for(ii=0; ii<GROUP_ALLOCATION_BLOCK_SIZE; ii++)
+    {
+
+        new_entry = bcmos_calloc(sizeof(group_inst));
+
+        if (NULL == new_entry)
+        {
+            BCM_LOG(FATAL, log_id_group,  "Failed to initialize the group free list - FATAL\n");
+            ret = BCM_ERR_NOMEM;
+            break;
+        }
+
+       group_free_by_entry(new_entry);
+    }
+
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief A function to un-initialize the Group FSM infrastructure.
+ *
+ *        NOTE: This is called once on shutdown and NOT for each FSM instance.
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+bcmos_errno group_fsm_finish(void)
+{
+
+    group_inst *current_entry, *p_temp_entry;
+
+    /* Free all the entries on the active list */
+    TAILQ_FOREACH_SAFE(current_entry,
+                       &GROUP_FSM_GROUP_LIST_CTX_PTR->active_group_list,
+                       group_inst_next,
+                       p_temp_entry)
+    {
+        /* free up the internal allocated member info */
+        if(current_entry->current_group_info.data.members.val)
+        {
+            bcmos_free(current_entry->current_group_info.data.members.val);
+        }
+        /* Remove it from the active list */
+        TAILQ_REMOVE(&GROUP_FSM_GROUP_LIST_CTX_PTR->active_group_list, current_entry, group_inst_next);
+
+        bcmos_free(current_entry);
+
+    }
+
+    /* Free all the entries on the free list */
+    TAILQ_FOREACH_SAFE(current_entry,
+                       &GROUP_FSM_GROUP_LIST_CTX_PTR->free_group_list,
+                       group_inst_next,
+                       p_temp_entry)
+    {
+        /* Remove it from the active list */
+        TAILQ_REMOVE(&GROUP_FSM_GROUP_LIST_CTX_PTR->free_group_list, current_entry, group_inst_next);
+
+        bcmos_free(current_entry);
+    }
+
+    return BCM_ERR_OK;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Group FSM state processing executive function
+ *
+ * @param p_group_inst  Pointer to a group instance
+ * @param p_event      Pointer to a group event structure
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+static bcmos_errno group_fsm_exec(group_inst *p_group_inst, group_fsm_event *p_event)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    group_fsm_state pre_state;
+    group_fsm_state_processor group_state_processor;
+
+    /* Parameter checks */
+    BUG_ON(NULL == p_group_inst);
+    BUG_ON(NULL == p_event);
+
+    /* Record the present state for debug printing
+     */
+    pre_state = p_group_inst->fsm_state;
+
+    /*
+     * Get the state processing function
+     */
+    group_state_processor = group_states[p_group_inst->fsm_state][p_event->event_type];
+
+    /*
+     * If there's a state processing function for this event and state, execute it.
+     * Otherwise, process a generic error.
+     */
+    if (group_state_processor)
+    {
+        ret = group_state_processor(p_group_inst, p_event->msg, p_event);
+    } else
+    {
+        group_fsm_state_err(p_group_inst, p_event->msg, p_event);
+    }
+
+    if(BCM_ERR_OK != ret)
+    {
+        BCM_LOG(ERROR, log_id_group, "*** Error detected during state processing\n");
+        p_group_inst->fsm_state = pre_state;
+    }
+
+    BCM_LOG(DEBUG, log_id_group,  "*** Event %s, State: %s --> %s\n\n",
+            group_event_name_get(p_event->event_type),
+            group_state_name_get(pre_state),
+            group_state_name_get(p_group_inst->fsm_state));
+
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Group FSM state processing for a group create command received
+ *        from the BAL Public API.
+ *
+ * @param p_group_inst      Pointer to a group instance
+ * @param msg              Pointer to a BAL message received from the BAL Public API
+ * @param p_event          Pointer to a group event structure
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+static bcmos_errno group_fsm_create(group_inst *p_group_inst,
+                                    void *msg,
+                                    group_fsm_event *p_event)
+{
+
+    bcmos_errno ret = BCM_ERR_OK;
+    group_fsm_state pre_fsm_state;
+
+    BCM_LOG(INFO, log_id_group,  "Got SET request from BAL API - create group \n");
+
+    do
+    {
+        /* save the current state */
+        pre_fsm_state = p_group_inst->fsm_state;
+        /* change Group state to CONFIGURING */
+        p_group_inst->fsm_state = GROUP_FSM_STATE_CONFIGURING;
+
+        /*– Core calls Switch Utils to add applicable CMDs */
+        if(BCM_ERR_OK != (ret = sw_util_group_set(p_group_inst, BAL_UTIL_OPER_GROUP_CREATE)))
+        {
+            BCM_LOG(ERROR, log_id_group,  "error %s detected by switch util while create group\n", bcmos_strerror(ret));
+            break;
+        }
+
+        /*– Core calls Mac Utils create applicable CMDs */
+        if(BCM_ERR_OK != (ret = mac_util_group_set(p_group_inst, BAL_UTIL_OPER_GROUP_CREATE, BCMOS_TRUE)))
+        {
+            BCM_LOG(ERROR, log_id_group,  "error %s detected by mac util\n", bcmos_strerror(ret));
+
+            /* Reverse the (just create) group in the switch, otherwise the switch utils
+             * will be out of sync with Core and Mac.  There's not
+             * much we can do about it if reversing this group fails.
+             */
+            if(BCM_ERR_OK != sw_util_group_set(p_group_inst, BAL_UTIL_OPER_GROUP_DESTROY))
+            {
+                BCM_LOG(ERROR, log_id_group,
+                        "error detected by switch util while reversing create group\n");
+            }
+            else
+            {
+                /* restore the original state */
+                p_group_inst->fsm_state = pre_fsm_state;
+            }
+
+            break;
+        }
+
+        /* The hardware has properly accepted the object info, so copy object to
+         * the current state.
+         */
+        bcmbal_group_object_overlay(&p_group_inst->api_req_group_info,
+                                    &p_group_inst->current_group_info);
+
+        BCMBAL_OBJ_IN_PROGRESS_SET(&(p_group_inst->current_group_info), BCMOS_TRUE);
+
+    }while(0);
+
+    /* If there were errors during processing, then report the error to the API */
+    if(BCM_ERR_OK != ret)
+    {
+        mgmt_msg_send_balapi_ind(ret,
+                                 msg,
+                                 log_id_group);
+    }
+
+    return ret;
+
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Group FSM state processing for a group destroy command received
+ *        from the BAL Public API.
+ *
+ * @param p_group_inst      Pointer to a group instance
+ * @param msg              Pointer to a BAL message received from the BAL Public API
+ * @param p_event          Pointer to a group event structure
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+static bcmos_errno group_fsm_destroy(group_inst *p_group_inst,
+                                    void *msg,
+                                    group_fsm_event *p_event)
+{
+
+    bcmos_errno ret = BCM_ERR_OK;
+    group_fsm_state sav_state = p_group_inst->fsm_state;
+    bcmbal_group_cfg *p_group_cfg;
+    int i;
+    
+    BCM_LOG(INFO, log_id_group,  "Got CLEAR request from BAL API - destroy group \n");
+
+    do
+    {
+        /* change Group state to CONFIGURING */
+        p_group_inst->fsm_state = GROUP_FSM_STATE_DELETING;
+
+        /* Destroy operation is best effort, as it is unlikely to fail */
+        /*– Core calls Switch Utils to add applicable CMDs */
+        if(BCM_ERR_OK != (ret = sw_util_group_set(p_group_inst, BAL_UTIL_OPER_GROUP_DESTROY)))
+        {
+            BCM_LOG(ERROR, log_id_group,  "error %s detected by switch util while destroy group\n", bcmos_strerror(ret));
+            /* if the group is busy, some flow still reference this group, skip the MAC and return error
+               no member has been clean up */
+            if(ret == BCM_ERR_INVALID_OP)
+            {
+                BCMBAL_OBJ_IN_PROGRESS_SET(&(p_group_inst->current_group_info), BCMOS_TRUE);
+                p_group_inst->fsm_state = sav_state;
+                mgmt_msg_send_balapi_ind(ret, msg, log_id_group);
+                return ret;                
+            }
+            break;
+        }
+
+        /*– Core calls Mac Utils create applicable CMDs */
+        if(BCM_ERR_OK != (ret = mac_util_group_set(p_group_inst, BAL_UTIL_OPER_GROUP_DESTROY, BCMOS_TRUE)))
+        {
+            BCM_LOG(ERROR, log_id_group,  "error %s detected by mac util\n", bcmos_strerror(ret));
+            break;
+        }
+
+        /* The hardware has properly accepted the object info, so copy object to
+         * the current state.
+         */
+
+        BCMBAL_OBJ_IN_PROGRESS_SET(&(p_group_inst->current_group_info), BCMOS_TRUE);
+
+    }while(0);
+    
+    /* If there were errors during processing, then report the error to the API  */
+    if(BCM_ERR_OK != ret)
+    {
+        mgmt_msg_send_balapi_ind(ret,
+                                 msg, 
+                                 log_id_group); 
+        /* TBD, need logic to perform error recovery if SwitchUtil success and MacUtil failed */                                  
+    }
+    else
+    {          
+       /* update resource manager on svc_port_id usage - keep going as the Mac and Switch already clean up */
+        p_group_cfg = &p_group_inst->current_group_info;
+        for(i=0; i<p_group_cfg->data.members.len; i++)
+        {
+            if(BCM_ERR_OK != rsc_mgr_gem_free(p_group_cfg->data.members.val[i].intf_id,
+                                              p_group_cfg->data.members.val[i].svc_port_id,
+                                              NULL) )
+            {
+                BCM_LOG(ERROR, log_id_group,
+                        " error encountered during destroy of group resources (gem_id: %d, intf_id:%d\n",
+                        p_group_cfg->data.members.val[i].svc_port_id,
+                        p_group_cfg->data.members.val[i].intf_id);
+            }                        
+        } 
+    }
+
+    return ret;
+
+}
+/*****************************************************************************/
+/**
+ * @brief The Group FSM state processing for a group set command received
+ *        from the BAL Public API.
+ *
+ * @param p_group_inst      Pointer to a group instance
+ * @param msg              Pointer to a BAL message received from the BAL Public API
+ * @param p_event          Pointer to a group event structure
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+static bcmos_errno group_fsm_set(group_inst *p_group_inst,
+                                 void *msg,
+                                 group_fsm_event *p_event)
+{
+
+    bcmos_errno ret = BCM_ERR_OK;
+    group_inst group_inst_rvt;
+    bcmbal_group_cfg *p_group_cfg;
+    int i;
+
+    BCM_LOG(INFO, log_id_group,  "Got SET request from BAL API - replace group members\n");
+
+    do
+    {
+        /* save the current state */
+        group_inst_rvt.fsm_state = p_group_inst->fsm_state;
+        /* change Group state to CONFIGURING */
+        p_group_inst->fsm_state = GROUP_FSM_STATE_CONFIGURING;
+
+        /*– Core calls Switch Utils to add applicable CMDs */
+        if(BCM_ERR_OK != (ret = sw_util_group_set(p_group_inst, BAL_UTIL_OPER_GROUP_SET)))
+        {
+            BCM_LOG(ERROR, log_id_group,  "error %s detected by switch util while set group members\n", bcmos_strerror(ret));
+            break;
+        }
+
+        /*– Core calls Mac Utils add applicable CMDs */
+        if(BCM_ERR_OK != (ret = mac_util_group_set(p_group_inst, BAL_UTIL_OPER_GROUP_SET, BCMOS_TRUE)))
+        {
+            BCM_LOG(ERROR, log_id_group,  "error %s detected by mac util\n", bcmos_strerror(ret));
+
+            group_inst_rvt.current_group_info = p_group_inst->api_req_group_info;
+            group_inst_rvt.api_req_group_info = p_group_inst->current_group_info;
+            /* Reverse the (just set) group from the switch otherwise the switch utils
+             * will be out of sync with Core and Mac.  There's not
+             * much we can do about it if reversing this group fails.
+             */
+            if(BCM_ERR_OK != sw_util_group_set(&group_inst_rvt, BAL_UTIL_OPER_GROUP_SET))
+            {
+                BCM_LOG(ERROR, log_id_group,
+                        "error detected by switch util while reversing group\n");
+            }
+            else
+            {
+                /* restore the original state */
+                p_group_inst->fsm_state = group_inst_rvt.fsm_state;
+            }
+
+            break;
+        }
+        /* update resource manager on svc_port_id usage - free the gem on old members */
+        p_group_cfg = &p_group_inst->current_group_info;
+        for(i=0; i<p_group_cfg->data.members.len; i++)
+        {
+            if(BCM_ERR_OK != rsc_mgr_gem_free(p_group_cfg->data.members.val[i].intf_id,
+                                              p_group_cfg->data.members.val[i].svc_port_id,
+                                              NULL) )
+            {
+                BCM_LOG(ERROR, log_id_group,
+                        " error encountered during release of group resources (gem_id: %d, intf_id:%d\n",
+                        p_group_cfg->data.members.val[i].svc_port_id,
+                        p_group_cfg->data.members.val[i].intf_id);
+            }
+        }
+
+       /* set operation can be made without CREATE, so fill in the non-member info */
+        bcmbal_group_object_overlay(&p_group_inst->api_req_group_info,
+                                    &p_group_inst->current_group_info);
+
+        /* The hardware has properly accepted the object info, so the request object becomes
+         * the current state.
+         */
+        bcmbal_group_object_member_replace(&p_group_inst->api_req_group_info,
+                                           &p_group_inst->current_group_info);
+
+        BCMBAL_OBJ_IN_PROGRESS_SET(&(p_group_inst->current_group_info), BCMOS_TRUE);
+
+    }while(0);
+
+    /* If there were errors during processing, then report the error to the API */
+    if(BCM_ERR_OK != ret)
+    {
+        mgmt_msg_send_balapi_ind(ret,
+                                 msg,
+                                 log_id_group);
+    }
+
+    return ret;
+
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Group FSM state processing for a group add command received
+ *        from the BAL Public API.
+ *
+ * @param p_group_inst      Pointer to a group instance
+ * @param msg              Pointer to a BAL message received from the BAL Public API
+ * @param p_event          Pointer to a group event structure
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+static bcmos_errno group_fsm_add(group_inst *p_group_inst,
+                                 void *msg,
+                                 group_fsm_event *p_event)
+{
+
+    bcmos_errno ret = BCM_ERR_OK;
+    group_fsm_state pre_fsm_state;
+
+    BCM_LOG(INFO, log_id_group,  "Got SET request from BAL API - add group members\n");
+
+    do
+    {
+        /* save the current state */
+        pre_fsm_state = p_group_inst->fsm_state;
+        /* change Group state to CONFIGURING */
+        p_group_inst->fsm_state = GROUP_FSM_STATE_CONFIGURING;
+
+        /*– Core calls Switch Utils to add applicable CMDs */
+        if(BCM_ERR_OK != (ret = sw_util_group_set(p_group_inst, BAL_UTIL_OPER_GROUP_ADD)))
+        {
+            BCM_LOG(ERROR, log_id_group,  "error %s detected by switch util while add group members\n", bcmos_strerror(ret));
+            break;
+        }
+
+        /*– Core calls Mac Utils add applicable CMDs */
+        if(BCM_ERR_OK != (ret = mac_util_group_set(p_group_inst, BAL_UTIL_OPER_GROUP_ADD, BCMOS_TRUE)))
+        {
+            BCM_LOG(ERROR, log_id_group,  "error %s detected by mac util\n", bcmos_strerror(ret));
+
+            /* Reverse the (just add) group member from the switch, otherwise the switch utils
+             * will be out of sync with Core and Mac.  There's not
+             * much we can do about it if reversing this group fails.
+             */
+            if(BCM_ERR_OK != sw_util_group_set(p_group_inst, BAL_UTIL_OPER_GROUP_REMOVE))
+            {
+                BCM_LOG(ERROR, log_id_group,
+                        "error detected by switch util while reversing add group\n");
+            }
+            else
+            {
+                /* restore the original state */
+                p_group_inst->fsm_state = pre_fsm_state;
+            }
+
+            break;
+        }
+
+        /* add operation can be made without CREATE, so fill in the non-member info */
+        bcmbal_group_object_overlay(&p_group_inst->api_req_group_info,
+                                    &p_group_inst->current_group_info);
+
+        /* The hardware has properly accepted the object info, so add object members to
+         * the current state.
+         */
+        bcmbal_group_object_member_add(&p_group_inst->api_req_group_info,
+                                       &p_group_inst->current_group_info);
+
+        BCMBAL_OBJ_IN_PROGRESS_SET(&(p_group_inst->current_group_info), BCMOS_TRUE);
+
+    }while(0);
+
+    /* If there were errors during processing, then report the error to the API */
+    if(BCM_ERR_OK != ret)
+    {
+        mgmt_msg_send_balapi_ind(ret,
+                                 msg,
+                                 log_id_group);
+    }
+
+    return ret;
+
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Group FSM state processing for a group remove command received
+ *        from the BAL Public API.
+ *
+ * @param p_group_inst      Pointer to a group instance
+ * @param msg              Pointer to a BAL message received from the BAL Public API
+ * @param p_event          Pointer to a group event structure
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+static bcmos_errno group_fsm_remove(group_inst *p_group_inst,
+                                    void *msg,
+                                    group_fsm_event *p_event)
+{
+
+    bcmos_errno ret = BCM_ERR_OK;
+    group_fsm_state pre_fsm_state;
+    bcmbal_group_cfg *p_group_cfg;
+    int i;
+
+    BCM_LOG(INFO, log_id_group,  "Got SET request from BAL API - remove group members\n");
+
+    do
+    {
+        /* save the current state */
+        pre_fsm_state = p_group_inst->fsm_state;
+        /* change Group state to CONFIGURING */
+        p_group_inst->fsm_state = GROUP_FSM_STATE_CONFIGURING;
+
+        /*– Core calls Switch Utils to add applicable CMDs */
+        if(BCM_ERR_OK != (ret = sw_util_group_set(p_group_inst, BAL_UTIL_OPER_GROUP_REMOVE)))
+        {
+            BCM_LOG(ERROR, log_id_group,  "error %s detected by switch util while remove group members\n", bcmos_strerror(ret));
+            break;
+        }
+
+        /*– Core calls Mac Utils add applicable CMDs */
+        if(BCM_ERR_OK != (ret = mac_util_group_set(p_group_inst, BAL_UTIL_OPER_GROUP_REMOVE, BCMOS_TRUE)))
+        {
+            BCM_LOG(ERROR, log_id_group,  "error %s detected by mac util\n", bcmos_strerror(ret));
+
+            /* Reverse the (just remove) group member from the switch, otherwise the switch utils
+             * will be out of sync with Core and Mac.  There's not
+             * much we can do about it if reversing this group fails.
+             */
+            if(BCM_ERR_OK != sw_util_group_set(p_group_inst, BAL_UTIL_OPER_GROUP_ADD))
+            {
+                BCM_LOG(ERROR, log_id_group,
+                        "error detected by switch util while reversing remove group\n");
+            }
+            else
+            {
+                /* restore the original state */
+                p_group_inst->fsm_state = pre_fsm_state;
+            }
+
+            break;
+        }
+
+        /* update resource manager on svc_port_id usage */
+        p_group_cfg = &p_group_inst->api_req_group_info;
+        for(i=0; i<p_group_cfg->data.members.len; i++)
+        {
+            /* if interface is not a member (e.g. already removed), skip it */
+            if(p_group_cfg->data.members.val[i].svc_port_id == 0)
+            {
+                continue;
+            } 
+            if(BCM_ERR_OK != rsc_mgr_gem_free(p_group_cfg->data.members.val[i].intf_id,
+                                              p_group_cfg->data.members.val[i].svc_port_id,
+                                              NULL) )
+            {
+                BCM_LOG(ERROR, log_id_group,
+                        " error encountered during release of group resources (gem_id: %d, intf_id:%d\n",
+                        p_group_cfg->data.members.val[i].svc_port_id,
+                        p_group_cfg->data.members.val[i].intf_id);
+            }
+        }
+
+        /* The hardware has properly accepted the object info, so remove object members from
+         * the current state.
+         */
+        bcmbal_group_object_member_remove(&p_group_inst->api_req_group_info,
+                                          &p_group_inst->current_group_info);
+
+        BCMBAL_OBJ_IN_PROGRESS_SET(&(p_group_inst->current_group_info), BCMOS_TRUE);
+
+    }while(0);
+
+    /* If there were errors during processing, then report the error to the API */
+    if(BCM_ERR_OK != ret)
+    {
+        mgmt_msg_send_balapi_ind(ret,
+                                 msg,
+                                 log_id_group);
+
+    }
+
+    return ret;
+
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Group FSM state processing function to ignore a received message.
+ *
+ * @param p_group_inst     Pointer to a group instance
+ * @param msg              Pointer to a BAL message received from the BAL Public API
+ * @param p_event          Pointer to a group event structure
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+static bcmos_errno group_fsm_ignore_api_msg(group_inst *p_group_inst,
+                                           void *msg,
+                                           group_fsm_event *p_event)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+
+    BCM_LOG(WARNING, log_id_group,  "Ignoring message from BAL API when in %s state \n", group_state_name_get(p_group_inst->fsm_state));
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Group FSM state processing function to process a message from
+ *        one of the BAL apps received when the specified group instance FSM
+ *        is in the CONFIGURING state.
+ *
+ * @param p_group_inst     Pointer to a group instance
+ * @param msg              Pointer to a BAL message received from one of
+ *                         the BAL apps.
+ * @param p_event          Pointer to a group event structure
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+static bcmos_errno group_fsm_configuring_util_msg(group_inst *p_group_inst,
+                                                  void *msg,
+                                                  group_fsm_event *p_event)
+{
+    bcmos_errno ret;
+    bal_util_msg_ind *ind_msg;
+
+    /* Parameter checks */
+    BUG_ON(NULL == p_group_inst);
+    BUG_ON(NULL == msg);
+    BUG_ON(NULL == p_event);
+
+    ind_msg = (bal_util_msg_ind *)msg;
+
+    BCM_LOG(DEBUG, log_id_group,
+            " Received an IND message from BAL UTIL (%s) during CONFIGURING state\n",
+            subsystem_str[bcmbal_sender_get(msg)]);
+
+    BCM_LOG(DEBUG, log_id_group,
+            "%s, thread %s, module %d\n", __FUNCTION__, bcmos_task_current()->name, bcmos_module_current());
+
+    /* Handle indication */
+    ret = ind_msg->status;
+
+    /* Reflect the execution status in the object being returned in the indication
+     */
+    if(BCM_ERR_OK == ret)
+    {
+        /*
+         * The group has been successfully configured
+         */
+        p_group_inst->fsm_state = GROUP_FSM_STATE_CONFIGURED;
+
+    }
+    else
+    {
+        /* Error */
+        BCM_LOG(ERROR, log_id_group,  "Group %d: Failed in state %s. Error %s\n\n",
+                p_group_inst->api_req_group_info.key.group_id,
+                group_state_name_get(p_group_inst->fsm_state),
+                bcmos_strerror(ret));
+    }
+
+    BCMBAL_OBJ_IN_PROGRESS_SET(&(p_group_inst->current_group_info), BCMOS_FALSE);
+    p_group_inst->current_group_info.hdr.hdr.status = ret;
+
+    /*
+     * Send the indication back to the BAL public API here
+     */
+    mgmt_msg_send_balapi_ind(ret,
+                             &p_group_inst->current_group_info.hdr,
+                             log_id_group);
+
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Group FSM state processing function to process a
+ *        message from one of the BAL apps received when the specified
+ *        group instance FSM is in the DELETING state.
+ *
+ * @param p_group_inst     Pointer to an group instance
+ * @param msg              Pointer to a BAL message received from one of
+ *                         the BAL apps.
+ * @param p_event          Pointer to a group event structure
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+static bcmos_errno group_fsm_deleting_util_msg(group_inst *p_group_inst,
+                                               void *msg,
+                                               group_fsm_event *p_event)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    bal_util_msg_ind *ind_msg;
+
+    /* Parameter checks */
+    BUG_ON(NULL == p_group_inst);
+    BUG_ON(NULL == msg);
+    BUG_ON(NULL == p_event);
+
+    ind_msg = (bal_util_msg_ind *)msg;
+
+    BCM_LOG(DEBUG, log_id_group,
+            " Received an IND message from BAL UTIL (%s) during DELETING state\n",
+            subsystem_str[bcmbal_sender_get(msg)]);
+
+
+    /* Handle indication */
+    ret = ind_msg->status;
+
+    /* Reflect the execution status in the object being returned in the indication
+     */
+    if(BCM_ERR_OK == ret)
+    {
+        p_group_inst->current_group_info.hdr.hdr.status = ret;
+
+        /*
+         * The group has been successfully destroy
+         */
+        p_group_inst->fsm_state = GROUP_FSM_STATE_NULL;
+
+        BCMBAL_OBJ_IN_PROGRESS_SET(&(p_group_inst->current_group_info), BCMOS_FALSE);
+        /*
+         * Send the indication back to the BAL public API
+         */
+        mgmt_msg_send_balapi_ind(ret,
+                                 &p_group_inst->current_group_info.hdr,
+                                 log_id_group);
+        
+        /* free up the member memory */
+        if( p_group_inst->current_group_info.data.members.val)
+        {
+            bcmos_free(p_group_inst->current_group_info.data.members.val);
+            p_group_inst->current_group_info.data.members.val = NULL;
+            p_group_inst->current_group_info.data.members.len = 0;
+        }
+               
+        /* Return the group to the free pool */
+        group_free_by_entry(p_group_inst);
+
+    }
+    else
+    {
+        /* Error */
+        BCM_LOG(ERROR, log_id_group,  "Group %d: Failed in state %s. Error %s\n\n",
+                p_group_inst->current_group_info.key.group_id,
+                group_state_name_get(p_group_inst->fsm_state),
+                bcmos_strerror(ret));
+         p_group_inst->fsm_state = GROUP_FSM_STATE_CONFIGURED;
+
+    }
+
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Group FSM function which is executed when an error
+ *        is encountered during FSM processing.
+ *
+ * @param p_group_inst     Pointer to a group instance
+ * @param msg              Pointer to a BAL message received from one of
+ *                         the BAL apps.
+ * @param p_event          Pointer to a group event structure
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+static bcmos_errno group_fsm_state_err(group_inst *p_group_inst,
+                                      void *msg,
+                                      group_fsm_event *p_event)
+{
+    bcmos_errno ret = BCM_ERR_INVALID_OP;
+
+    BCM_LOG(DEBUG, log_id_group,
+            "Error encountered processing GROUP FSM"
+            " - BAD EVENT ()\n");
+
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief A function called by the core worker thread to process an
+ *        group object message (SET, GET, CLEAR, STATS) received
+ *        from the BAL Public API.
+ *
+ * @param msg_payload      Pointer to a BAL message received from the
+ *                         BAL Public API.
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+bcmos_errno process_group_object(void *msg_payload)
+{
+    bcmos_errno ret = BCM_ERR_OK, rsp_ret = BCM_ERR_OK;
+    bcmbal_group_cfg *p_group_cfg = (bcmbal_group_cfg *)msg_payload;
+    group_inst *p_group_inst = NULL;
+    group_fsm_event fsm_event;
+    bcmbal_group_key *p_group_key;
+    bcmbal_obj_msg_type oper_type;
+    int i, j, num_svc_port_allocated = 0;
+
+    BUG_ON(NULL == msg_payload);
+
+    BCM_LOG(DEBUG, log_id_group,  "Processing a group object\n");
+
+    p_group_key = &p_group_cfg->key;
+
+    oper_type = p_group_cfg->hdr.hdr.type;
+
+    /*
+     * A message pointer may be passed inside the event structure.
+     */
+    fsm_event.msg = msg_payload;
+
+    /* SET or GET or CLEAR...? */
+    switch (oper_type)
+    {
+        case (BCMBAL_OBJ_MSG_TYPE_SET):
+        {
+            bcmos_bool b_generate_event = BCMOS_FALSE;
+
+            BCM_LOG(DEBUG, log_id_group,
+                    "Processing a group SET REQ mgmt message\n");
+
+            do
+            {
+                if(BCMBAL_STATUS_UP != acc_term_status_get())
+                {
+                    BCM_LOG(ERROR, log_id_group,
+                            "ERROR - Access-terminal is not UP.  No further processing\n");
+                    ret = BCM_ERR_STATE;
+                    break;
+                }
+                /*
+                 * Find or create the specified group instance
+                 */
+                p_group_inst = group_inst_get(p_group_key, GROUP_FLAG_ANY);
+                if(NULL == p_group_inst)
+                {
+                    /* This is a fatal error condition
+                     */
+                    BCM_LOG(ERROR, log_id_group,
+                            "ERROR - Group not found.  No further processing\n");
+                    ret = BCM_ERR_NOMEM;
+                    break;
+                }
+
+                 /* If the state of this group is in flux, then reject the SET request */
+                if(BCMOS_TRUE == BCMBAL_OBJ_IN_PROGRESS_GET(&(p_group_inst->current_group_info)))
+                {
+                    ret = BCM_ERR_IN_PROGRESS;
+                    break;
+                }
+
+                /* if needed, request/validate svc_port_id from resource manager - before validation */
+                if (BCMBAL_CFG_PROP_IS_SET(p_group_cfg, group, members_cmd) )
+                {
+                    if(p_group_cfg->data.members_cmd == BCMBAL_GROUP_MEMBER_CMD_REM_MEMBERS)
+                    {
+                        /* if service id is not specified, filled in with current config info */
+                        for(i=0; i<p_group_cfg->data.members.len; i++)
+                        {
+                            int req_intf = p_group_cfg->data.members.val[i].intf_id;
+                            if(p_group_cfg->data.members.val[i].svc_port_id == 0)
+                            {
+                                for(j=0; j<p_group_inst->current_group_info.data.members.len; j++)
+                                {
+                                    int cur_intf = p_group_inst->current_group_info.data.members.val[j].intf_id;
+                                    if( cur_intf == req_intf)
+                                    {
+                                        p_group_cfg->data.members.val[i].svc_port_id = p_group_inst->current_group_info.data.members.val[j].svc_port_id;
+                                        break;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                    else
+                    { 
+                        /* if the group already has owner, alloc the svc_port for addition or replacement members */
+                        if(BCMBAL_GROUP_OWNER_NONE != p_group_inst->current_group_info.data.owner )
+                        {  
+                            /* copy the owner to the request */
+                            BCMBAL_CFG_PROP_SET(p_group_cfg, group, owner, p_group_inst->current_group_info.data.owner);
+                            /* allocate GEM */                            
+                            for(i=0; i<p_group_cfg->data.members.len; i++)
+                            {
+                                if (BCMBAL_GROUP_OWNER_MULTICAST != p_group_inst->current_group_info.data.owner)
+                                {
+                                    ret = rsc_mgr_gem_alloc_multicast(p_group_cfg->data.members.val[i].intf_id,
+                                                        &p_group_cfg->data.members.val[i].svc_port_id,
+                                                        1,           /* request gem range */
+                                                        NULL);
+                                }
+                                else if (BCMBAL_GROUP_OWNER_UNICAST != p_group_inst->current_group_info.data.owner)
+                                {
+                                    ret = rsc_mgr_gem_alloc_broadcast(p_group_cfg->data.members.val[i].intf_id,
+                                                        &p_group_cfg->data.members.val[i].svc_port_id,
+                                                        1,           /* request gem range */
+                                                        NULL);
+                                }
+                                else
+                                {
+                                    ret = BCM_ERR_PARM;
+                                }
+                                if(BCM_ERR_OK != ret)
+                                {
+                                    break;
+                                }
+                            }
+                            /* remember how many service port request been made to resource manager */
+                            num_svc_port_allocated = i;
+                            if(BCM_ERR_OK != ret)
+                            {
+                                BCM_LOG(ERROR, log_id_group,
+                                " error encountered during allocate of group resources (intf_id:%d)\n",
+                                p_group_cfg->data.members.val[i].intf_id);
+                                break;
+                            }
+                        }
+ 
+                    }
+                }
+                
+                /*
+                 * Fill in the local group info data structure
+                 * Notice that any memory allocated in the request message will be free in
+                 * process_mgmt_msg() of worker thread. If needed, GROUP FSM need to clone any
+                 * request info into p_group_inst->current_group_info before return                
+                 */
+                p_group_inst->api_req_group_info = *p_group_cfg;
+
+                /*
+                 * Process the request
+                 */
+
+                /*
+                 * Perform the validation check(s) that the utils require
+                 */
+                if(BCM_ERR_OK != (ret = mac_util_group_info_validate(&p_group_inst->api_req_group_info)))
+                {
+                    BCM_LOG(ERROR, log_id_group, "Failed GROUP mac validation\n");
+                    break;
+                }
+
+                if(BCM_ERR_OK != (ret = sw_util_group_info_validate(&p_group_inst->api_req_group_info)))
+                {
+                    BCM_LOG(ERROR, log_id_group, "Failed switch group validation\n");
+                    break;
+                }
+
+               /* set the event based on request command */
+               b_generate_event = BCMOS_TRUE;
+               if ( BCMOS_TRUE == BCMBAL_CFG_PROP_IS_SET(&p_group_inst->api_req_group_info, group, members_cmd) )
+               {
+                   switch(p_group_inst->api_req_group_info.data.members_cmd)
+                   {
+                        case BCMBAL_GROUP_MEMBER_CMD_ADD_MEMBERS:
+                            fsm_event.event_type = GROUP_FSM_EVENT_TYPE_ADD;
+                            break;
+                        case BCMBAL_GROUP_MEMBER_CMD_REM_MEMBERS:
+                            fsm_event.event_type = GROUP_FSM_EVENT_TYPE_REMOVE;
+                            break;
+                        case BCMBAL_GROUP_MEMBER_CMD_SET_MEMBERS:
+                            fsm_event.event_type = GROUP_FSM_EVENT_TYPE_SET;
+                            break;
+                        default:
+                            fsm_event.event_type = GROUP_FSM_EVENT_TYPE_NONE;
+                            b_generate_event = BCMOS_FALSE;
+                            break;
+                   }
+               }
+               else
+               {
+                   fsm_event.event_type = GROUP_FSM_EVENT_TYPE_CREATE;
+               }
+
+            }while(0);
+
+            /* if anything go wrong, inform resource manager to free up the service port */
+            if (BCM_ERR_OK != ret &&
+                BCMBAL_CFG_PROP_IS_SET(p_group_cfg, group, members_cmd) &&
+                p_group_cfg->data.members_cmd != BCMBAL_GROUP_MEMBER_CMD_REM_MEMBERS)
+            {
+                for(i=0; i<num_svc_port_allocated; i++)
+                {
+                    rsp_ret = rsc_mgr_gem_free(p_group_cfg->data.members.val[i].intf_id,
+                                               p_group_cfg->data.members.val[i].svc_port_id, 
+                                               NULL);
+
+                    /* best effort to free up */
+                    if(BCM_ERR_OK != rsp_ret)
+                    {
+                        BCM_LOG(ERROR, log_id_group,
+                        " error encountered during allocate of group resources (intf_id:%d)\n",
+                        p_group_cfg->data.members.val[i].intf_id);
+                    }
+                }
+            }
+            /* We respond to the BAL public API backend with a result. We always
+             * send a complete msg_payload back to the API, but the data portion
+             * of the object is only relevant when a GET or GET-STATS has been requested.
+             */
+            rsp_ret = mgmt_msg_send_balapi_rsp(ret, msg_payload, oper_type, log_id_group);
+
+            if(BCM_ERR_OK != rsp_ret || BCM_ERR_OK != ret)
+            {
+                /* the mgmt_msg_send_balapi_rsp function above logs any errors that occur there */
+                ret = (BCM_ERR_OK != rsp_ret) ? rsp_ret : ret;
+                break;
+            }
+
+             /* If there was an event generated, call the state machine exec */
+            if(BCMOS_TRUE == b_generate_event)
+            {
+                /*
+                 * Run the group FSM to process this event
+                 */
+                ret = group_fsm_exec(p_group_inst, &fsm_event);
+            }
+            break;
+        }
+
+        case (BCMBAL_OBJ_MSG_TYPE_GET):
+        {
+
+            BCM_LOG(DEBUG, log_id_group,  "Processing a group GET REQ mgmt message\n");
+
+            do
+            {
+                if(BCMBAL_STATUS_UP != acc_term_status_get())
+                {
+                    BCM_LOG(ERROR, log_id_group,
+                            "ERROR - Access-terminal is not UP.  No further processing\n");
+                    ret = BCM_ERR_STATE;
+                }
+                else
+                {
+                    /*
+                     * Find the specified group instance
+                     */
+                    p_group_inst = group_inst_get(p_group_key, GROUP_FLAG_ACTIVE);
+                }
+
+                if(NULL == p_group_inst)
+                {
+                    if(BCM_ERR_STATE != ret)
+                    {
+                        /* This is not a fatal error condition
+                         */
+                        BCM_LOG(ERROR, log_id_group,  "ERROR - Specified group (%d) not found\n",
+                                p_group_key->group_id);
+
+                        ret =  BCM_ERR_NOENT;
+                    }
+
+                    break;
+                }
+
+                /* We respond to the BAL public API backend with a result. We always
+                 * send a complete msg_payload back to the API, but the data portion
+                 * of the object is only relevant when a GET or GET-STATS has been requested.
+                 */
+                p_group_inst->current_group_info.hdr.hdr.comm_hdr = ((bcmbal_obj *)msg_payload)->comm_hdr;
+                *((bcmbal_group_cfg *)msg_payload) = p_group_inst->current_group_info;
+
+            } while (0);
+
+            mgmt_msg_send_balapi_rsp(ret, msg_payload, oper_type, log_id_group);
+
+        }
+        break;
+
+        case (BCMBAL_OBJ_MSG_TYPE_CLEAR):
+        {
+            BCM_LOG(DEBUG, log_id_group,  "Processing a group CLEAR REQ mgmt message\n");
+
+            do
+            {
+                if(BCMBAL_STATUS_UP != acc_term_status_get())
+                {
+                    BCM_LOG(ERROR, log_id_group,
+                            "ERROR - Access-terminal is not UP.  No further processing\n");
+                    ret = BCM_ERR_STATE;
+                    break;
+                }
+
+                /*
+                 * Find the specified group instance
+                 */
+                p_group_inst = group_inst_get(p_group_key, GROUP_FLAG_ACTIVE);
+
+                if(NULL == p_group_inst)
+                {
+                    /* This is a fatal error condition
+                     */
+                    BCM_LOG(ERROR, log_id_group,  "ERROR - Specified group (%d: not found\n",
+                            p_group_key->group_id);
+                    ret = BCM_ERR_NOENT;
+                    break;
+                }
+            } while(0);
+
+            /* We respond to the BAL public API backend with a result. We always
+             * send a complete msg_payload back to the API, but the data portion
+             * of the object is only relevant when a GET or GET-STATS has been requested.
+             */
+            rsp_ret = mgmt_msg_send_balapi_rsp(ret, msg_payload, oper_type, log_id_group);
+
+            if(BCM_ERR_OK != rsp_ret || BCM_ERR_OK != ret)
+            {
+                /* the mgmt_msg_send_balapi_rsp function above logs any errors that occur there */
+                ret = (BCM_ERR_OK != rsp_ret) ? rsp_ret : ret;
+                break;
+            }
+
+            /*
+             * Run the group FSM to process this event
+             */
+            if(BCM_ERR_OK == ret)
+            {
+                fsm_event.event_type = GROUP_FSM_EVENT_TYPE_DESTROY;
+
+                ret = group_fsm_exec(p_group_inst, &fsm_event);
+            }
+
+            break;
+        }
+
+        default:
+        {
+            BCM_LOG(ERROR, log_id_group,  "Unsupported operation on group object (%d)\n",
+                    oper_type );
+            ret = BCM_ERR_NOT_SUPPORTED;
+
+            /* We respond to the BAL public API backend with a result. We always
+             * send a complete msg_payload back to the API, but the data portion
+             * of the object is only relevant when a GET or GET-STATS has been requested.
+             */
+            mgmt_msg_send_balapi_rsp(ret, msg_payload, oper_type, log_id_group);
+
+            break;
+        }
+    }
+
+    BCM_LOG(DEBUG, log_id_group, "%s returns\n", __FUNCTION__);
+
+    return ret;
+}
+
+
+/*****************************************************************************/
+/**
+ * @brief A function to process a group object event received
+ *        from one of the BAL apps.
+ *
+ * @param msg_payload  A pointer to the util message
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+bcmos_errno process_group_util_msg(void *msg_payload)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    group_inst *p_group_inst;
+    group_fsm_event fsm_event;
+    bcmbal_msg_type type;
+    bcmbal_group_key key;
+
+    type = bcmbal_type_minor_get(msg_payload);
+
+    BCM_LOG(DEBUG, log_id_group,  "processing a group %s util message from %s\n",
+            bcmbal_msg_t_str[type],
+            subsystem_str[bcmbal_sender_get(msg_payload)]);
+
+    /* recover the key from the message */
+    key = ((bal_util_msg_ind *)msg_payload)->obj_key.group_key;
+
+    do
+    {
+        BCM_LOG(DEBUG, log_id_group,  "Got group key id (%d) from util message\n", key.group_id);
+
+        /*
+         * Get the group instance that's being referenced
+         */
+        if(NULL == (p_group_inst = group_inst_get(&key, GROUP_FLAG_ACTIVE)))
+        {
+            BCM_LOG(ERROR, log_id_group,  "invalid group (%d) found while processing a util message from %s\n",
+                    key.group_id,
+                    subsystem_str[bcmbal_sender_get(msg_payload)]);
+
+            ret = BCM_ERR_INTERNAL;
+
+            break;
+        }
+
+        /*
+         * Record the msg for further processing access
+         */
+        fsm_event.msg = msg_payload;
+
+        if (BAL_MSG_TYPE_IND == type)
+        {
+            fsm_event.event_type = GROUP_FSM_EVENT_TYPE_UTIL_MSG;
+        }
+        else
+        {
+            ret = BCM_ERR_NOT_SUPPORTED;
+            BCM_LOG(ERROR, log_id_group,
+                    "Unknown message type received from the UTIL"
+                    " (not IND) (type:%d)\n",
+                    type);
+            break;
+        }
+
+        /*
+         * Run the Group FSM to process this event
+         */
+        if(BCM_ERR_OK == ret)
+        {
+            ret = group_fsm_exec(p_group_inst, &fsm_event);
+        }
+    }
+    while(0);
+
+    return ret;
+}
+
+/*
+ * Helper functions
+ */
+
+/*****************************************************************************/
+/**
+ * @brief A function to retrieve a group instance of the specified
+ *        class.
+ *
+ * @param key            A pointer to the key of the group being
+ *                       referenced
+ * @param search_flag    A flag specifying the type of group
+ *                       instance to be retrieved
+ *
+ * @returns group_inst_t* A pointer to the found group instance,
+ *                       or NULL if one is not found
+ *****************************************************************************/
+static group_inst *group_inst_get(bcmbal_group_key *key, group_flag search_flag)
+{
+    group_inst *current_entry = NULL;
+
+    /*
+     * First, check the active list if the caller has chosen to do so
+     */
+    if(GROUP_FLAG_ACTIVE & search_flag)
+    {
+        TAILQ_FOREACH(current_entry,
+                      &GROUP_FSM_GROUP_LIST_CTX_PTR->active_group_list,
+                      group_inst_next)
+        {
+
+            if(current_entry->api_req_group_info.key.group_id == key->group_id)
+            {
+                BCM_LOG(DEBUG, log_id_group,  "Found active group\n");
+                /* The group instance pointer is in current_entry */
+                break;
+            }
+        }
+    }
+
+    /*
+     * Next, check the free list if the caller has chosen to do so
+     */
+    if((GROUP_FLAG_FREE & search_flag) && (NULL == current_entry))
+    {
+        /* Now check the free list */
+        if(!TAILQ_EMPTY(&GROUP_FSM_GROUP_LIST_CTX_PTR->free_group_list))
+        {
+            /* Just grab the first entry */
+            current_entry = TAILQ_FIRST(&GROUP_FSM_GROUP_LIST_CTX_PTR->free_group_list);
+
+            /* Remove it from the free list */
+            TAILQ_REMOVE(&GROUP_FSM_GROUP_LIST_CTX_PTR->free_group_list, current_entry, group_inst_next);
+
+            /* And add it to the active list */
+            TAILQ_INSERT_TAIL(&GROUP_FSM_GROUP_LIST_CTX_PTR->active_group_list, current_entry, group_inst_next);
+
+            /*
+             * Initialize the fsm state
+             */
+            current_entry->fsm_state = GROUP_FSM_STATE_NULL;
+
+            BCM_LOG(DEBUG, log_id_group,  "Using new group\n");
+
+        }
+    }
+
+    if((GROUP_FLAG_ANY & search_flag) && (NULL == current_entry))
+    {
+        /*A group was not found on either list*/
+
+        BCM_LOG(DEBUG, log_id_group,  "************** ERROR: no group found\n");
+    }
+
+    return current_entry;
+}
+
+
+#ifdef GET_GROUP_CFG_BY_KEY_SUPPORTED
+/*****************************************************************************/
+/**
+ * @brief A function to retrieve the current group info for the specified
+ *        group instance.
+ *
+ * @param key    A group key
+ *
+ * @returns bcmbal_group_cfg* A pointer to the current group info for the
+ *                           specified group, or NULL if the group is not found
+ *****************************************************************************/
+static bcmbal_group_cfg *group_get_current_info_by_key(bcmbal_group_key key)
+{
+    group_inst *current_entry = NULL;
+
+    /*
+     * Check the active list
+     */
+    TAILQ_FOREACH(current_entry,
+        &GROUP_FSM_GROUP_LIST_CTX_PTR->active_group_list,
+        group_inst_next)
+    {
+
+        if(current_entry->current_group_info.key.group_id == key.group_id)
+        {
+            /* The group instance pointer is in current_entry */
+            break;
+        }
+    }
+
+    if(current_entry)
+    {
+        return &(current_entry->current_group_info);
+    }
+    else
+    {
+        return NULL;
+    }
+}
+#endif
+
+/*****************************************************************************/
+/**
+ * @brief A function to free a group instance specified by a the supplied
+ *        entry pointer.
+ *
+ * @param p_entry A pointer to the entry to be freed
+ *
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+static bcmos_errno group_free_by_entry(group_inst *p_entry)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    group_inst *current_entry;
+    group_inst *p_temp_entry;
+
+    /*
+     * First, check the active list (an active group can be in the adding or removing state)
+     */
+    TAILQ_FOREACH_SAFE(current_entry,
+                       &GROUP_FSM_GROUP_LIST_CTX_PTR->active_group_list,
+                       group_inst_next,
+                       p_temp_entry)
+    {
+        if(current_entry == p_entry)
+        {
+           /* Remove it from the active list */
+            TAILQ_REMOVE(&GROUP_FSM_GROUP_LIST_CTX_PTR->active_group_list, current_entry, group_inst_next);
+            break;
+        }
+    }
+
+    /* And add it to the free list */
+    p_entry->fsm_state = GROUP_FSM_STATE_NULL;
+
+    /* And initialize the current object in the group instance */
+    group_inst_entry_obj_init(p_entry);
+
+    TAILQ_INSERT_TAIL(&GROUP_FSM_GROUP_LIST_CTX_PTR->free_group_list, p_entry, group_inst_next);
+
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief A function to remove group members specified in a requested group
+ *        from a target group
+ *
+ * @param p_req_group    A pointer to the group config that holds the members to be removed
+ * @param p_cur_group    A pointer to the group config that holds the current members
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+static bcmos_errno bcmbal_group_object_member_remove(bcmbal_group_cfg *p_req_group,
+                                                     bcmbal_group_cfg *p_cur_group)
+{
+    int i, j, k, num_members, member_match;
+    bcmbal_group_member_info  *p_new_member_info;
+    bcmbal_group_member_info_list_u16  new_members;
+
+    num_members = 0;
+    /* first calculate the final number of members */
+    for(i = 0; i < p_cur_group->data.members.len; i++)
+    {
+        member_match = 0;
+        /* check if it is in the remove list */
+        for(j = 0; j < p_req_group->data.members.len; j++)
+        {
+            if( p_cur_group->data.members.val[i].intf_id == p_req_group->data.members.val[j].intf_id)
+            {
+                member_match = 1;
+                break;
+            }
+        }
+        /* no match, we need to keep it */
+        if(!member_match)
+        {
+            num_members++;
+        }
+    }
+    /* if all requested members already been removed, no change, just return */
+    if( num_members == p_cur_group->data.members.len)
+    {
+        return BCM_ERR_OK;
+    }
+    /* if no member left, just clean up and leave */
+    if(num_members == 0)
+    {
+        bcmos_free(p_cur_group->data.members.val);
+        BCMBAL_CFG_PROP_CLEAR(p_cur_group, group, members);
+        return BCM_ERR_OK;
+    }
+
+    /* alloc memory for new list */
+    p_new_member_info = bcmos_calloc( num_members * sizeof(bcmbal_group_member_info));
+    if(p_new_member_info == NULL)
+    {
+        BCM_LOG(ERROR, log_id_group,  "calloc failed when remove members from group object\n");
+        return BCM_ERR_NORES;
+    }
+
+    /* fill in the new list */
+    k=0;
+    for(i = 0; i < p_cur_group->data.members.len; i++)
+    {
+        member_match = 0;
+        /* check if it is in the remove list */
+        for(j = 0; j < p_req_group->data.members.len; j++)
+        {
+            if( p_cur_group->data.members.val[i].intf_id == p_req_group->data.members.val[j].intf_id)
+            {
+                member_match = 1;
+                break;
+            }
+        }
+        /* no match, we need to keep it */
+        if(!member_match)
+        {
+            p_new_member_info[k++] = p_cur_group->data.members.val[i];
+        }
+    }
+
+    /* free up the old list */
+    bcmos_free(p_cur_group->data.members.val);
+
+    /* assign new list */
+    new_members.val = p_new_member_info;
+    new_members.len = num_members;
+    BCMBAL_CFG_PROP_SET(p_cur_group, group, members, new_members);
+
+    return BCM_ERR_OK;
+}
+
+/*****************************************************************************/
+/**
+ * @brief A function to add group members specified in a requested group
+ *        to a target group
+ *
+ * @param p_req_group    A pointer to the group config that holds the members to be added
+ * @param p_cur_group    A pointer to the group config that holds the current members
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+static bcmos_errno bcmbal_group_object_member_add(bcmbal_group_cfg *p_req_group,
+                                                  bcmbal_group_cfg *p_cur_group)
+{
+    int i, j, k, num_members, member_match;
+    bcmbal_group_member_info  *p_new_member_info;
+    bcmbal_group_member_info_list_u16  new_members;
+
+    num_members = 0;
+    /* first calculate the final number of members */
+    for(i = 0; i < p_req_group->data.members.len; i++)
+    {
+        member_match = 0;
+        /* check if it is in the current list */
+        for(j = 0; j < p_cur_group->data.members.len; j++)
+        {
+            if( p_req_group->data.members.val[i].intf_id == p_cur_group->data.members.val[j].intf_id)
+            {
+                member_match = 1;
+                break;
+            }
+        }
+        /* no match, we need to add it */
+        if(!member_match)
+        {
+            num_members++;
+        }
+    }
+    /* if all requested members already in the list, no change, just return */
+    if( num_members == 0)
+    {
+        return BCM_ERR_OK;
+    }
+    /* alloc memory for new list */
+    p_new_member_info = bcmos_calloc( (num_members + p_cur_group->data.members.len) * sizeof(bcmbal_group_member_info) );
+    if(p_new_member_info == NULL)
+    {
+        BCM_LOG(ERROR, log_id_group,  "calloc failed when add members to group object\n");
+        return BCM_ERR_NORES;
+    }
+
+    /* fill in the new list */
+    k=0;
+    for(j = 0; j < p_cur_group->data.members.len; j++)
+    {
+        p_new_member_info[k++] = p_cur_group->data.members.val[j];
+    }
+
+    for(i = 0; i < p_req_group->data.members.len; i++)
+    {
+        member_match = 0;
+        /* check if it is in the current list */
+        for(j = 0; j < p_cur_group->data.members.len; j++)
+        {
+            if( p_req_group->data.members.val[i].intf_id == p_cur_group->data.members.val[j].intf_id)
+            {
+                member_match = 1;
+                break;
+            }
+        }
+        /* no match, we need to add it */
+        if(!member_match)
+        {
+            p_new_member_info[k++] = p_req_group->data.members.val[i];
+        }
+    }
+
+    /* free up the old list */
+    bcmos_free(p_cur_group->data.members.val);
+
+    /* assign new list */
+    new_members.val = p_new_member_info;
+    new_members.len = k;
+    BCMBAL_CFG_PROP_SET(p_cur_group, group, members, new_members);
+
+    return BCM_ERR_OK;
+}
+
+/*****************************************************************************/
+/**
+ * @brief A function to replace group members specified in a targeted group
+ *        with a requested group
+ *
+ * @param p_req_group    A pointer to the group config that holds the members to be replaced
+ * @param p_cur_group    A pointer to the group config that holds the current members
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+static bcmos_errno bcmbal_group_object_member_replace(bcmbal_group_cfg *p_req_group,
+                                                      bcmbal_group_cfg *p_cur_group)
+{
+    int j, k;
+    bcmbal_group_member_info  *p_new_member_info;
+    bcmbal_group_member_info_list_u16  new_members;
+
+    /* alloc memory for new list */
+    p_new_member_info = bcmos_calloc( p_req_group->data.members.len * sizeof(bcmbal_group_member_info) );
+    if(p_new_member_info == NULL)
+    {
+        BCM_LOG(ERROR, log_id_group,  "calloc failed when replace members to group object\n");
+        return BCM_ERR_NORES;
+    }
+
+    /* fill in the new list */
+    k=0;
+    for(j = 0; j < p_req_group->data.members.len; j++)
+    {
+        p_new_member_info[k++] = p_req_group->data.members.val[j];
+    }
+
+    /* free up the old list */
+    bcmos_free(p_cur_group->data.members.val);
+
+    /* assign new list */
+    new_members.val = p_new_member_info;
+    new_members.len = k;
+    BCMBAL_CFG_PROP_SET(p_cur_group, group, members, new_members);
+
+    return BCM_ERR_OK;
+}
+
+/*****************************************************************************/
+/**
+ * @brief A function to overlay group info specified in a requested group
+ *        to a target group ( exclude the member info as it will be managed by
+          bcmbal_group_object_member_xxx functions)
+ *
+ * @param p_req_group    A pointer to the requested group config
+ * @param p_cur_group    A pointer to the group config that to be overlay
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+static bcmos_errno bcmbal_group_object_overlay(bcmbal_group_cfg *p_req_group,
+                                               bcmbal_group_cfg *p_cur_group)
+{
+    BUG_ON(NULL == p_cur_group);
+    BUG_ON(NULL == p_req_group);
+
+    bcmbal_presence_mask cur_presence_mask;
+
+    /* First, copy the common object and keys in their entirety, except for preserving the presence_mask */
+    cur_presence_mask = p_cur_group->hdr.hdr.presence_mask;
+    p_cur_group->hdr = p_req_group->hdr;
+    p_cur_group->key = p_req_group->key;
+    p_cur_group->hdr.hdr.presence_mask = cur_presence_mask;
+
+    /* Now copy only the fields that have been specified in the request object */
+    if(BCMBAL_CFG_PROP_IS_SET(p_req_group, group, members_cmd))
+    {
+        BCMBAL_CFG_PROP_SET(p_cur_group, group, members_cmd, p_req_group->data.members_cmd);
+    }
+
+    if(BCMBAL_CFG_PROP_IS_SET(p_req_group, group, cookie))
+    {
+        BCMBAL_CFG_PROP_SET(p_cur_group, group, cookie, p_req_group->data.cookie);
+    }
+   
+    if(BCMBAL_CFG_PROP_IS_SET(p_req_group, group, owner))
+    {
+        BCMBAL_CFG_PROP_SET(p_cur_group, group, owner, p_req_group->data.owner);
+    }
+    return BCM_ERR_OK;
+}
+
+/*****************************************************************************/
+/**
+ * @brief A function to test if the specified group is active
+ *
+ * @param p_group_key    A pointer to the group key to be tested
+ *
+ * @returns bcmos_bool   BCMOS_TRUE if specified group is active
+ *****************************************************************************/
+bcmos_bool group_is_active(bcmbal_group_key *p_group_key)
+{                                            
+    return (NULL == group_inst_get(p_group_key, GROUP_FLAG_ACTIVE)) ? BCMOS_FALSE : BCMOS_TRUE;
+}
+
+/*****************************************************************************/
+/**
+ * @brief A function to retrive the group owner
+ *
+ * @param group_key      the group key 
+ * @param p_group_owner  A pointer to store the retrieve owner
+ *
+ * @returns bcmos_errno 
+ *****************************************************************************/
+bcmos_errno group_owner_get(bcmbal_group_key group_key, bcmbal_group_owner *p_group_owner)
+{ 
+     group_inst *p_group;
+     
+     p_group = group_inst_get(&group_key, GROUP_FLAG_ACTIVE);
+     if (p_group)
+     {
+        *p_group_owner = p_group->current_group_info.data.owner;
+        return BCM_ERR_OK;        
+     }
+     else
+     {
+         return BCM_ERR_NOENT;
+     }
+}
+
+/*****************************************************************************/
+/**
+ * @brief A function to set the group owner
+ *        When the owner is set, the service port of the member is also allocated
+ *
+ * @param group_key      group key 
+ * @param grp_owner      owner
+ *
+ * @returns bcmos_errno 
+ *****************************************************************************/
+bcmos_errno group_owner_set(bcmbal_group_key group_key, bcmbal_group_owner grp_owner)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    
+    /* if group has no owner, set the GROUP owner and allocate the GEM for each GROUP member 
+     
+      1. flip the current info with request info
+      2. allocate GEM for each group member
+      3. Call switch_util to update the group (SET with new GEM info)
+      4. Call mac_util to update the group (SET with new GEM info)
+      5. flip back the current info
+      else
+          do nothing and let util validate the group owner
+      end-if
+      later, follow the regular FLOW fsm to SET FLOW in switch_util and Mac_util
+   */  
+   
+    group_inst *p_group;
+    
+    p_group = group_inst_get(&group_key, GROUP_FLAG_ACTIVE);
+    
+    if (p_group == NULL)
+    {
+        BCM_LOG(ERROR, log_id_group,  "Failed to get group instance, group_id %d\n", group_key.group_id);
+        return BCM_ERR_INTERNAL;  
+    }                                          
+    if ( BCMBAL_GROUP_OWNER_NONE == p_group->current_group_info.data.owner)
+    {
+        int i;
+        bcmbal_group_cfg *p_group_req = &(p_group->api_req_group_info);
+        bcmbal_group_cfg *p_group_cur = &(p_group->current_group_info);
+            
+        do
+        {                                                                                           
+            /* step 1 */
+            BCMBAL_CFG_PROP_SET(p_group_req, group, owner, grp_owner);
+            BCMBAL_CFG_PROP_SET(p_group_req, group, members_cmd, BAL_UTIL_OPER_GROUP_SET);
+            p_group_req->data.members.len =  p_group_cur->data.members.len;
+            p_group_req->data.members.val =  p_group_cur->data.members.val; 
+            
+            p_group_cur->data.members.len = 0;
+            p_group_cur->data.members.val = NULL;                                            
+            
+            /* step 2 */
+            for(i=0; i<p_group_req->data.members.len; i++)
+            {
+                if(grp_owner == BCMBAL_GROUP_OWNER_UNICAST )
+                {
+                    ret = rsc_mgr_gem_alloc_broadcast(p_group_req->data.members.val[i].intf_id,
+                                        &p_group_req->data.members.val[i].svc_port_id,
+                                        1,           /* request gem range */
+                                        NULL);
+                }
+                else if (grp_owner == BCMBAL_GROUP_OWNER_MULTICAST)
+                {
+                    ret = rsc_mgr_gem_alloc_multicast(p_group_req->data.members.val[i].intf_id,
+                                        &p_group_req->data.members.val[i].svc_port_id,
+                                        1,           /* request gem range */
+                                        NULL);
+                }
+                else
+                {
+                    ret = BCM_ERR_PARM;
+                }
+                if(BCM_ERR_OK != ret)
+                {
+                    break;
+                }
+            }
+            if(BCM_ERR_OK != ret)
+            {
+                BCM_LOG(ERROR, log_id_group,  "Failed to alloc group GEM, interface=%d\n", p_group_req->data.members.val[i].intf_id);
+                break;  
+            } 
+            /* step 3 */
+            if(BCM_ERR_OK != (ret = sw_util_group_set(p_group, BAL_UTIL_OPER_GROUP_SET)))
+            {
+                BCM_LOG(ERROR, log_id_group,
+                               "error %s while updating group GEM in switch\n", bcmos_strerror(ret));
+                break;
+            }
+            /* step 4 - request no indicaiton send back */ 
+            if(BCM_ERR_OK != (ret = mac_util_group_set(p_group, BAL_UTIL_OPER_GROUP_SET, BCMOS_FALSE)))
+            {
+                BCM_LOG(ERROR, log_id_group,  
+                               "error %s while updating group GEM in mac \n", bcmos_strerror(ret));
+                break;
+            } 
+            /* step 5 - flip back */
+            BCMBAL_CFG_PROP_SET(p_group_cur, group, owner, grp_owner);
+            BCMBAL_CFG_PROP_SET(p_group_cur, group, members_cmd, BAL_UTIL_OPER_GROUP_SET);
+            p_group_cur->data.members.len =  p_group_req->data.members.len;
+            p_group_cur->data.members.val =  p_group_req->data.members.val; 
+            
+            p_group_req->data.members.len = 0;
+            p_group_req->data.members.val = NULL;       
+             
+        }while(0);                                            
+    }
+    else 
+    {
+        /* if GROUP already has owner , make sure it is the same type */
+        if ( grp_owner != p_group->current_group_info.data.owner)
+        {
+            BCM_LOG(ERROR, log_id_group,  
+                               " group already has owner %d, can not reassign to %d \n", p_group->current_group_info.data.owner, grp_owner); 
+            ret = BCM_ERR_INTERNAL;                   
+        }
+    }
+  
+    return ret;                                  
+}
+/*@}*/
diff --git a/bal_release/src/core/main/group_fsm.h b/bal_release/src/core/main/group_fsm.h
new file mode 100644
index 0000000..f7ebe57
--- /dev/null
+++ b/bal_release/src/core/main/group_fsm.h
@@ -0,0 +1,133 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file group_fsm.h
+ * @brief Code to support the BAL Group FSM
+ *
+ */
+
+#ifndef GROUP_FSM_H
+#define GROUP_FSM_H
+
+/*@{*/
+
+#include <bcmos_system.h>
+#include <bal_api.h>
+
+/* set the total number of available group to 4k */
+#define GROUP_ALLOCATION_BLOCK_SIZE  (4095)
+
+typedef enum
+{
+    GROUP_FSM_EVENT_TYPE_NONE       = -1,
+    GROUP_FSM_EVENT_TYPE_CREATE     ,
+    GROUP_FSM_EVENT_TYPE_DESTROY    ,
+    GROUP_FSM_EVENT_TYPE_ADD        ,
+    GROUP_FSM_EVENT_TYPE_REMOVE     ,
+    GROUP_FSM_EVENT_TYPE_SET        ,
+    GROUP_FSM_EVENT_TYPE_UTIL_MSG   ,
+
+    GROUP_FSM_EVENT_TYPE__LAST,
+    GROUP_FSM_EVENT_TYPE__NUM_OF
+} group_fsm_event_type;
+
+
+
+typedef enum
+{
+    GROUP_FSM_STATE_NONE =     -1,
+    GROUP_FSM_STATE_NULL         ,
+    GROUP_FSM_STATE_CONFIGURING  ,
+    GROUP_FSM_STATE_CONFIGURED   ,
+    GROUP_FSM_STATE_DELETING     ,
+ 
+    GROUP_FSM_STATE__LAST,
+    GROUP_FSM_STATE__NUM_OF
+} group_fsm_state;
+
+
+typedef enum
+{
+    GROUP_FLAG_ACTIVE =     1<<0,    /**< A group is on the active list */
+    GROUP_FLAG_FREE =       1<<1,    /**< A group is on the free list */
+    GROUP_FLAG_ANY =        (GROUP_FLAG_ACTIVE | GROUP_FLAG_FREE),    /**< A group is on either the active or free list */
+} group_flag;
+
+
+typedef struct group_fsm_event_t
+{
+    group_fsm_event_type event_type;   /**< The group fsm events */
+    void             *msg;
+
+    /* other necessary information */
+} group_fsm_event;
+
+
+typedef struct group_inst group_inst;
+struct group_inst
+{
+    bcmbal_group_cfg    current_group_info;   /**< The current information for this group (used for GET) */
+    bcmbal_group_cfg    api_req_group_info;   /**< The last group object info received from the Public API */
+    group_fsm_state     fsm_state;          /**< The group FSM state */
+    bcmos_timer         timer_info;       /**< A structure used for the state machine timeout timer */
+    TAILQ_ENTRY(group_inst) group_inst_next ; /**< TAILQ link */
+};
+
+
+/* 
+ * Group FSM data structures
+ */
+typedef struct group_fsm_ctx
+{
+    /* Lists of free group entries and active group entries
+     */
+    TAILQ_HEAD(free_group_list_head, group_inst) free_group_list;
+
+    TAILQ_HEAD(active_group_list_head, group_inst) active_group_list;
+
+} group_fsm_ctx;
+
+
+/* Function declarations */
+
+extern bcmos_errno group_fsm_init(void);
+extern bcmos_errno group_fsm_finish(void);
+extern bcmos_errno process_group_util_msg(void *msg_payload);
+extern bcmos_errno process_group_object(void *msg_payload);
+extern bcmos_bool  group_is_active(bcmbal_group_key *p_group_key);
+extern bcmos_errno group_owner_set(bcmbal_group_key group_key, bcmbal_group_owner group_owner);
+extern bcmos_errno group_owner_get(bcmbal_group_key group_key, bcmbal_group_owner *p_group_owner);
+
+/*@}*/
+
+#endif /*GROUP_FSM_H */
+
diff --git a/bal_release/src/core/main/sub_term_fsm.c b/bal_release/src/core/main/sub_term_fsm.c
new file mode 100644
index 0000000..c632a28
--- /dev/null
+++ b/bal_release/src/core/main/sub_term_fsm.c
@@ -0,0 +1,2182 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file sub_term_fsm.c
+ * @brief Code to support the BAL subscriber-terminal FSM
+ *
+ * @addtogroup sub_terminal
+ *
+ */
+
+/*@{*/
+
+#include <bcmos_system.h>
+#include <bal_msg.h>
+#include <bal_osmsg.h>
+#include "bal_worker.h"
+#include "bal_mac_util.h"
+#include "bal_switch_util.h"
+#include "sub_term_fsm.h"
+#include "tm_sched_fsm.h"
+
+#include <bal_objs.h>
+#include <fsm_common.h>
+
+#ifdef ENABLE_LOG
+#include <bcm_dev_log.h>
+
+/*
+ * @brief Logging device id for the subscriber-terminal
+ */
+static dev_log_id log_id_sub_term;
+#endif
+
+/* local function declarations */
+
+static bcmos_errno sub_term_fsm_admin_up_start(sub_term_inst *p_sub_term_inst, 
+                                               void *msg, 
+                                               sub_term_fsm_event *p_event);
+
+static bcmos_errno sub_term_fsm_admin_up_error(sub_term_inst *p_sub_term_inst, 
+                                               void *msg, 
+                                               sub_term_fsm_event *p_event);
+
+static bcmos_errno sub_term_fsm_admin_dn_start(sub_term_inst *p_sub_term_inst, 
+                                               void *msg, 
+                                               sub_term_fsm_event *p_event);
+
+static bcmos_errno sub_term_fsm_admin_dn_ok(sub_term_inst *p_sub_term_inst, 
+                                            void *msg, 
+                                            sub_term_fsm_event *p_event);
+
+static bcmos_errno sub_term_fsm_admin_dn_error(sub_term_inst *p_sub_term_inst, 
+                                               void *msg, 
+                                               sub_term_fsm_event *p_event);
+
+static bcmos_errno sub_term_fsm_removing_start(sub_term_inst *p_sub_term_inst, 
+                                               void *msg, 
+                                               sub_term_fsm_event *p_event);
+
+static bcmos_errno sub_term_fsm_ignore_util_msg(sub_term_inst *p_sub_term_inst, 
+                                                void *msg, 
+                                                sub_term_fsm_event *p_event);
+
+
+static bcmos_errno sub_term_fsm_removing_process_util_msg(sub_term_inst *p_sub_term_inst, 
+                                                          void *msg, 
+                                                          sub_term_fsm_event *p_event);
+
+static bcmos_errno sub_term_fsm_removing_process_util_auto_msg(sub_term_inst *p_sub_term_inst, 
+                                                              void *msg, 
+                                                              sub_term_fsm_event *p_event);
+
+static bcmos_errno sub_term_fsm_configuring_process_util_msg(sub_term_inst *p_sub_term_inst, 
+                                                             void *msg, 
+                                                             sub_term_fsm_event *p_event);
+
+static bcmos_errno sub_term_fsm_null_process_util_auto_msg(sub_term_inst *p_sub_term_inst, 
+                                                           void *msg, 
+                                                           sub_term_fsm_event *p_event);
+
+static bcmos_errno sub_term_fsm_configured_process_util_msg(sub_term_inst *p_sub_term_inst, 
+                                                            void *msg, 
+                                                            sub_term_fsm_event *p_event);
+
+static bcmos_errno sub_term_fsm_configuring_process_util_auto_msg(sub_term_inst *p_sub_term_inst, 
+                                                                  void *msg, 
+                                                                  sub_term_fsm_event *p_event);
+
+static bcmos_errno sub_term_fsm_state_err(sub_term_inst *p_sub_term_inst, 
+                                          void *msg, 
+                                          sub_term_fsm_event *p_event);
+
+static bcmos_errno sub_term_fsm_exec(sub_term_inst *p_sub_term_inst, sub_term_fsm_event *p_event);
+
+static bcmos_errno sub_term_free_by_entry(sub_term_inst *p_entry);
+
+
+static bcmos_errno agg_port_id_list_fill(sub_term_inst *p_sub_term_inst, 
+                                         bcmbal_aggregation_port_id_list_u8 *agg_port_id_list);
+
+static bcmos_errno svc_port_id_list_fill(sub_term_inst *p_sub_term_inst, 
+                                         bcmbal_service_port_id_list_u8 *svc_port_id_list);
+
+static bcmos_errno bcmbal_sub_term_tm_scheds_set(const bcmbal_subscriber_terminal_cfg *p_sub_term_cfg);
+
+/*
+ *@brief  Global sub_term fsm context data structure
+ */
+static sub_term_fsm_ctx g_sub_term_fsm_sub_term_list_ctx;
+
+/*
+ * Macros for sub_term ctx access
+ */
+#define SUB_TERM_FSM_SUB_TERM_LIST_CTX      (g_sub_term_fsm_sub_term_list_ctx)
+#define SUB_TERM_FSM_SUB_TERM_LIST_CTX_PTR  (&g_sub_term_fsm_sub_term_list_ctx)
+
+/*
+ * @brief The definition of a sub_term state processing function
+ */
+typedef bcmos_errno (* sub_term_fsm_state_processor)(sub_term_inst *, void *, sub_term_fsm_event *);
+
+/*
+ * @brief The Subscriber Terminal FSM state processing array
+ */
+static sub_term_fsm_state_processor sub_term_states[SUB_TERM_FSM_STATE__NUM_OF][SUB_TERM_FSM_EVENT_TYPE__NUM_OF] =
+{
+ 
+    [SUB_TERM_FSM_STATE_NULL] = 
+    {        
+        /*
+         * Next state: CONFIGURING
+         */ 
+        [SUB_TERM_FSM_EVENT_TYPE_ADMIN_UP]     = sub_term_fsm_admin_up_start,   
+
+        /* 
+         * Next state: NULL 
+         */   
+        [SUB_TERM_FSM_EVENT_TYPE_ADMIN_DN]     = sub_term_fsm_admin_dn_ok,
+
+        /* 
+         * Next state: NULL 
+         */
+        [SUB_TERM_FSM_EVENT_TYPE_UTIL_MSG]      = sub_term_fsm_ignore_util_msg,
+
+        /* 
+         * Next state: NULL 
+         */
+        [SUB_TERM_FSM_EVENT_TYPE_UTIL_AUTO_MSG] = sub_term_fsm_null_process_util_auto_msg,
+    },
+
+    [SUB_TERM_FSM_STATE_CONFIGURING] =                                        
+    {   
+        /*
+         * Next state: CONFIGURING
+         */ 
+        [SUB_TERM_FSM_EVENT_TYPE_ADMIN_UP]     = sub_term_fsm_admin_up_error,   
+
+        /* 
+         * Next state: CONFIGURING 
+         */   
+        [SUB_TERM_FSM_EVENT_TYPE_ADMIN_DN]     = sub_term_fsm_admin_dn_error,
+
+        /* 
+         * Next state: REMOVING
+         */
+        [SUB_TERM_FSM_EVENT_TYPE_REMOVE]       = sub_term_fsm_removing_start,
+
+        /* 
+         * Next state: CONFIGURING | CONFIGURED 
+         */
+        [SUB_TERM_FSM_EVENT_TYPE_UTIL_MSG]      = sub_term_fsm_configuring_process_util_msg,
+
+        /* 
+         * Next state: CONFIGURING 
+         */
+        [SUB_TERM_FSM_EVENT_TYPE_UTIL_AUTO_MSG] = sub_term_fsm_configuring_process_util_auto_msg,
+
+    },
+
+    [SUB_TERM_FSM_STATE_CONFIGURED] =                                         
+    {     
+        /*
+         * Next state: CONFIGURED
+         */ 
+        [SUB_TERM_FSM_EVENT_TYPE_ADMIN_UP]     = sub_term_fsm_admin_up_start,   
+
+        /* 
+         * Next state: CONFIGURING
+         */   
+        [SUB_TERM_FSM_EVENT_TYPE_ADMIN_DN]     = sub_term_fsm_admin_dn_start,
+
+        /* 
+         * Next state: REMOVING
+         */
+        [SUB_TERM_FSM_EVENT_TYPE_REMOVE]       = sub_term_fsm_removing_start,
+
+        /* 
+         * Next state: CONFIGURING
+         */
+        [SUB_TERM_FSM_EVENT_TYPE_UTIL_MSG]     = sub_term_fsm_configured_process_util_msg,
+
+        /* 
+         * Next state: CONFIGURED
+         */
+        [SUB_TERM_FSM_EVENT_TYPE_UTIL_AUTO_MSG] = sub_term_fsm_ignore_util_msg,
+
+    },
+
+    [SUB_TERM_FSM_STATE_REMOVING] =                                      
+    {        
+        /*
+         * Next state: REMOVING 
+         */ 
+        [SUB_TERM_FSM_EVENT_TYPE_ADMIN_UP]     = sub_term_fsm_admin_up_error,   
+
+        /* 
+         * Next state: REMOVING 
+         */   
+        [SUB_TERM_FSM_EVENT_TYPE_ADMIN_DN]     = sub_term_fsm_admin_dn_error,
+
+         /* 
+         * Next state: REMOVING | NULL 
+         */
+        [SUB_TERM_FSM_EVENT_TYPE_UTIL_MSG]      = sub_term_fsm_removing_process_util_msg,
+
+        /* 
+         * Next state: REMOVING 
+         */
+        [SUB_TERM_FSM_EVENT_TYPE_UTIL_AUTO_MSG] = sub_term_fsm_removing_process_util_auto_msg,
+    },
+};
+
+static char *state_name_str[] = 
+{
+    "SUB_TERM_FSM_STATE_NULL",
+    "SUB_TERM_FSM_STATE_CONFIGURING",
+    "SUB_TERM_FSM_STATE_CONFIGURED",
+    "SUB_TERM_FSM_STATE_REMOVING",
+};
+
+/* Ensure that the name array size matches the associated enum */
+BAL_STATIC_ASSERT (SUB_TERM_FSM_STATE__LAST == (sizeof (state_name_str) / sizeof (char *)), sub_term_fsm_state);
+
+static char *sub_term_state_name_get(sub_term_fsm_state state)
+{
+    if(state < SUB_TERM_FSM_STATE__LAST)
+    {
+        return state_name_str[state];
+    }
+    else
+    {
+        return "SUB_TERM_UNKNOWN";
+    }
+}
+
+static char *event_name_str[] = 
+{
+    "SUB_TERM_FSM_ADMIN_UP_EVENT",
+    "SUB_TERM_FSM_ADMIN_DN_EVENT",
+    "SUB_TERM_FSM_REMOVE_EVENT",
+    "SUB_TERM_FSM_UTIL_MSG_EVENT",
+    "SUB_TERM_FSM_UTIL_AUTO_IND_EVENT",
+};
+
+/* Ensure that the name array size matches the associated enum */
+BAL_STATIC_ASSERT (SUB_TERM_FSM_EVENT_TYPE__LAST == (sizeof (event_name_str) / sizeof (char *)), sub_term_fsm_event_type);
+
+static char *sub_term_event_name_get(sub_term_fsm_event_type event)
+{
+    if(event < SUB_TERM_FSM_EVENT_TYPE__LAST)
+    {
+        return event_name_str[event];
+    }
+    else
+    {
+        return "SUB_TERM_EVT_UNKNOWN";
+    }
+}
+
+/*****************************************************************************/
+/**
+ * @brief A function to initialize the current sub_term_info object of the 
+ *        supplied entry.
+ *
+ * @param p_entry A pointer to the entry to be initialized
+ *
+ *
+ * @returns void
+ *****************************************************************************/
+static void sub_term_inst_entry_obj_init(sub_term_inst *p_entry)
+{
+    bcmbal_subscriber_terminal_key key = { .sub_term_id = 0, .intf_id = 0 };
+    BCMBAL_CFG_INIT(&p_entry->current_sub_term_info,
+                    subscriber_terminal,
+                    key);
+
+    BCMBAL_CFG_PROP_SET(&p_entry->current_sub_term_info, 
+                    subscriber_terminal, admin_state, BCMBAL_STATE_DOWN);
+
+    BCMBAL_CFG_PROP_SET(&p_entry->current_sub_term_info, 
+                    subscriber_terminal, oper_status, BCMBAL_STATUS_NOT_PRESENT);
+    
+    BCMBAL_OBJ_IN_PROGRESS_SET(&(p_entry->current_sub_term_info), BCMOS_FALSE);
+
+}
+
+/*****************************************************************************/
+/**
+ * @brief A function called to initialize the subscriber-terminal FSM 
+ *        infrastructure. 
+ *
+ *        NOTE: This is called once on startup and NOT for each FSM instance.
+ *
+ * @returns void
+ *****************************************************************************/
+bcmos_errno sub_term_fsm_init(void)
+{
+    int ii;
+    sub_term_inst *new_entry;
+    bcmos_errno ret = BCM_ERR_OK;
+
+#ifdef ENABLE_LOG
+    log_id_sub_term = bcm_dev_log_id_register("SUB_TERM", DEV_LOG_LEVEL_INFO, DEV_LOG_ID_TYPE_BOTH);
+    BUG_ON(log_id_sub_term == DEV_LOG_INVALID_ID);
+#endif
+
+    /* Initialize all of the sub_term queues */
+    TAILQ_INIT(&SUB_TERM_FSM_SUB_TERM_LIST_CTX_PTR->free_sub_term_list);
+    TAILQ_INIT(&SUB_TERM_FSM_SUB_TERM_LIST_CTX_PTR->active_sub_term_list);
+
+    /* Populate the free list with it's set of sub_term instance entries */ 
+    for(ii=0; ii<NUM_SUPPORTED_SUB_TERMS; ii++)
+    {
+        
+        new_entry = bcmos_calloc(sizeof(sub_term_inst));
+
+        if (NULL == new_entry)
+        {
+            BCM_LOG(FATAL, log_id_sub_term,
+                    "Failed to initialize the sub_term free list - FATAL\n");
+            ret = BCM_ERR_NOMEM;
+            break;
+        }
+        
+        /* And add it to the free list */
+        sub_term_free_by_entry(new_entry);
+
+    }
+
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief A function to un-initialize the subscriber-terminal FSM infrastructure.
+ *  
+ *        NOTE: This is called once on shutdown and NOT for each FSM instance.
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+bcmos_errno sub_term_fsm_finish(void)
+{
+
+    sub_term_inst *current_entry, *p_temp_entry;
+    agg_port_id_entry *agg_port_entry;
+    svc_port_id_entry *svc_port_entry;
+
+    /* Free all the entries on the active list */
+    TAILQ_FOREACH_SAFE(current_entry, 
+                       &SUB_TERM_FSM_SUB_TERM_LIST_CTX_PTR->active_sub_term_list, 
+                       sub_term_inst_next,
+                       p_temp_entry)
+    {
+        /* free the aggregation port list */ 
+        TAILQ_FOREACH(agg_port_entry, 
+                      &current_entry->agg_port_id_list, 
+                      next)
+        {
+           
+             bcmos_free(agg_port_entry); 
+        } 
+
+        /* free the service port list */
+        TAILQ_FOREACH(svc_port_entry, 
+                      &current_entry->svc_port_id_list, 
+                      next)
+        {
+             bcmos_free(svc_port_entry); 
+        }
+
+        /* Remove it from the active list */
+        TAILQ_REMOVE(&SUB_TERM_FSM_SUB_TERM_LIST_CTX_PTR->active_sub_term_list, 
+                     current_entry, sub_term_inst_next);
+
+        bcmos_free(current_entry);
+
+    }
+
+    /* Free all the entries on the free list */
+    TAILQ_FOREACH_SAFE(current_entry, 
+                       &SUB_TERM_FSM_SUB_TERM_LIST_CTX_PTR->free_sub_term_list, 
+                       sub_term_inst_next,
+                       p_temp_entry)
+    {
+        /* Remove it from the active list */
+        TAILQ_REMOVE(&SUB_TERM_FSM_SUB_TERM_LIST_CTX_PTR->free_sub_term_list, 
+                     current_entry, sub_term_inst_next);
+
+        bcmos_free(current_entry);
+
+    }
+     
+    return BCM_ERR_OK;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Subscriber terminal FSM state processing executive function
+ *
+ * @param p_sub_term_inst  Pointer to an subscriber terminal instance
+ * @param p_event          Pointer to an subscriber terminal event structure
+ * 
+ * @returns bcmos_errno 
+ *****************************************************************************/
+static bcmos_errno sub_term_fsm_exec(sub_term_inst *p_sub_term_inst, sub_term_fsm_event *p_event)
+{
+
+    bcmos_errno ret = BCM_ERR_OK;
+    sub_term_fsm_state pre_state; 
+    sub_term_fsm_state fsm_state; 
+    sub_term_fsm_state_processor sub_term_state_processor;     
+
+    /* Parameter checks */
+    BUG_ON(NULL == p_event);
+
+    /* Record the present state for debug printing
+     */
+    pre_state = (NULL == p_sub_term_inst) ? SUB_TERM_FSM_STATE_NULL : p_sub_term_inst->fsm_state;
+
+    /*
+     * Get the state processing function 
+     */
+    sub_term_state_processor = sub_term_states[pre_state][p_event->event_type];
+
+    /*
+     * If there's a state processing function for this event and state, execute it.
+     * Otherwise, process a generic error.
+     */
+    if (sub_term_state_processor)
+    {
+        ret = sub_term_state_processor(p_sub_term_inst, p_event->msg, p_event);
+    } else        
+    {
+        sub_term_fsm_state_err(p_sub_term_inst, p_event->msg, p_event);
+    }
+    
+    /* And get the new state for debug printing */
+    fsm_state = (NULL == p_sub_term_inst) ? SUB_TERM_FSM_STATE_NULL : p_sub_term_inst->fsm_state;
+
+    BCM_LOG(DEBUG, log_id_sub_term, 
+            "*** Event %s, State: %s --> %s\n", 
+            sub_term_event_name_get(p_event->event_type),
+            sub_term_state_name_get(pre_state), sub_term_state_name_get(fsm_state));
+
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief A function called by the core worker thread to process an 
+ *        subscriber-terminal object message (SET, GET, CLEAR, STATS) received 
+ *        from the BAL Public API.
+ *
+ * @param msg_payload      Pointer to a BAL message received from the 
+ *                         BAL Public API.
+ *                         
+ * @returns bcmos_errno 
+ *****************************************************************************/
+bcmos_errno process_subscriber_terminal_object(void *msg_payload)
+{
+
+    bcmos_errno ret = BCM_ERR_OK;
+    
+    bcmbal_subscriber_terminal_cfg *p_sub_term_cfg = (bcmbal_subscriber_terminal_cfg *)msg_payload;
+    sub_term_inst *p_sub_term_inst;
+    sub_term_fsm_event fsm_event;
+    bcmbal_subscriber_terminal_key *sub_term_key;
+    bcmbal_obj_msg_type oper_type;
+          
+     /* Parameter checks */
+    BUG_ON(NULL == msg_payload);
+
+    BCM_LOG(DEBUG, log_id_sub_term, "Processing a sub_term object\n");
+
+    sub_term_key = &p_sub_term_cfg->key;
+
+    oper_type = p_sub_term_cfg->hdr.hdr.type;
+        
+    /*
+     * A message pointer may be passed inside the event structure.
+     */
+    fsm_event.msg = msg_payload;
+
+    /* SET or GET or CLEAR ? */
+    switch (oper_type)
+    {
+        case (BCMBAL_OBJ_MSG_TYPE_SET):
+        {
+            bcmos_bool b_generate_event = BCMOS_FALSE;
+
+            BCM_LOG(DEBUG, log_id_sub_term, "Processing a sub_term SET REQ mgmt message\n");
+
+            /*
+             * Find or create the specified sub_term instance
+             */
+            p_sub_term_inst = sub_term_inst_get(sub_term_key, SUB_TERM_FLAG_ANY);
+
+            do
+            {
+
+                if(NULL == p_sub_term_inst)
+                {
+                    /* This is a fatal error condition
+                     */
+                    BCM_LOG(ERROR, log_id_sub_term, 
+                            "Specified sub_term not found.  No further processing\n");
+                    ret = BCM_ERR_NOMEM;
+                    break;
+                }
+
+                 /* If the state of this sub_term is in flux, then reject the SET request */
+                if(BCMOS_TRUE == BCMBAL_OBJ_IN_PROGRESS_GET(&(p_sub_term_inst->current_sub_term_info)))
+                {
+                    BCM_LOG(ERROR, log_id_sub_term,
+                            "The subscriber_terminal is in-progress, SETs are not allowed\n");
+                    ret = BCM_ERR_IN_PROGRESS;
+                    break;
+                }
+
+				if(BCM_ERR_OK != (ret = bcmbal_sub_term_tm_scheds_set(p_sub_term_cfg)))
+                {
+                    BCM_LOG(ERROR, log_id_sub_term,
+                            "could not set subscriber terminal as owner of specified tm scheds\n");
+                    ret = BCM_ERR_PARM;
+                                
+                }
+
+                /*
+                 * Fill in the local sub_term instance API request data structure
+                 */
+                p_sub_term_inst->api_req_sub_term_info = *p_sub_term_cfg;
+
+                BCM_LOG(DEBUG, log_id_sub_term,
+                        "sub_term admin state is: %s\n",
+                        (BCMBAL_STATE_UP == p_sub_term_inst->api_req_sub_term_info.data.admin_state) ? "UP" : "DOWN");
+
+ 
+                 /* If there's no state change, then we're done */
+                if(p_sub_term_inst->current_sub_term_info.data.admin_state == 
+                   p_sub_term_inst->api_req_sub_term_info.data.admin_state)
+                {
+                    break;
+                }
+
+               /* For subscriber terminals that have already been configured and then made dormant, merge the
+                 * requested data with the current data, and this is the new request.
+                 */
+                if(BCMBAL_STATUS_DOWN == p_sub_term_inst->current_sub_term_info.data.oper_status)
+                {
+
+                    bcmbal_sub_term_object_overlay_w_dst_priority(&p_sub_term_inst->api_req_sub_term_info,
+                                                                  &p_sub_term_inst->current_sub_term_info);                   
+                }
+
+                /*
+                 * Check if the mandatory subscriber terminal  attributes have been set, and range check where
+                 * applicable.
+                 */
+
+
+                /* The admin state attribute is mandatory */
+                if(BCMOS_FALSE == BCMBAL_CFG_PROP_IS_SET(&p_sub_term_inst->api_req_sub_term_info, 
+                                                     subscriber_terminal, 
+                                                     admin_state))
+                {
+                    ret = BCM_ERR_MANDATORY_PARM_IS_MISSING;
+                    break;
+                }
+
+                /*
+                 * Perform the validation check(s) that the utils require
+                 */
+                if(BCM_ERR_OK != 
+                   (ret = mac_util_subscriber_terminal_info_validate(&p_sub_term_inst->api_req_sub_term_info)))
+                {
+                    break;
+                }
+
+            }
+            while(0);
+
+            /* We respond to the BAL public API backend with a result. We always 
+             * send a complete msg_payload back to the API, but the data portion 
+             * of the object is only relevant when a GET or GET-STATS has been requested.
+             */
+            mgmt_msg_send_balapi_rsp(ret, msg_payload, oper_type, log_id_sub_term);
+
+            if(BCM_ERR_OK != ret)
+            {
+                break;
+            }
+
+            /*
+             * Initial checks complete.  Process the request
+             */
+
+            if((BCMBAL_STATE_UP == p_sub_term_inst->api_req_sub_term_info.data.admin_state)
+               && (BCMBAL_STATE_UP != p_sub_term_inst->current_sub_term_info.data.admin_state))
+            { 
+                BCMBAL_CFG_PROP_SET(&p_sub_term_inst->api_req_sub_term_info, 
+                                subscriber_terminal, 
+                                svc_port_id, 
+                                sub_term_key->sub_term_id);
+
+                p_sub_term_inst->api_req_sub_term_info.data.admin_state = BCMBAL_STATE_UP;
+
+                /* Set the expected state of the oper_status upon success */
+                p_sub_term_inst->api_req_sub_term_info.data.oper_status = BCMBAL_STATUS_UP;
+
+                fsm_event.event_type = SUB_TERM_FSM_EVENT_TYPE_ADMIN_UP;
+                b_generate_event = BCMOS_TRUE;
+
+                BCM_LOG(INFO, log_id_sub_term, 
+                        "***Using GEM %d for subscriber terminal OMCI channel\n",
+                        p_sub_term_inst->api_req_sub_term_info.data.svc_port_id);
+
+            }
+            else if((BCMBAL_STATE_DOWN == p_sub_term_inst->api_req_sub_term_info.data.admin_state)
+                    && (BCMBAL_STATE_DOWN != p_sub_term_inst->current_sub_term_info.data.admin_state))
+            {
+                p_sub_term_inst->current_sub_term_info.data.admin_state = BCMBAL_STATE_DOWN;
+ 
+                /* Set the expected state of the oper_status upon success */
+                p_sub_term_inst->api_req_sub_term_info.data.oper_status = BCMBAL_STATUS_DOWN;
+
+                fsm_event.event_type = SUB_TERM_FSM_EVENT_TYPE_ADMIN_DN;
+                b_generate_event = BCMOS_TRUE;
+            }
+            else
+            {
+                /* @todo implement a MODIFY here */
+                BCM_LOG(INFO, log_id_sub_term, "no state change...done\n");
+                break;   /* no state change detected - do nothing for now */
+            }
+
+            /* If there was an event generated, call the state machine exec */
+            if(BCMOS_TRUE == b_generate_event)
+            {
+                /*
+                 * Run the sub_term FSM to process this event
+                 */
+                ret = sub_term_fsm_exec(p_sub_term_inst, &fsm_event);
+            }
+            break;
+        }
+
+        case (BCMBAL_OBJ_MSG_TYPE_GET):
+        {
+
+            bcmbal_aggregation_port_id_list_u8 agg_port_id_list = {};
+            bcmbal_service_port_id_list_u8 svc_port_id_list = {};
+
+            BCM_LOG(DEBUG, log_id_sub_term, "Processing a sub_term GET REQ mgmt message\n");
+
+            /* 
+             * Just return the sub_term data info that we have on record for 
+             * this sub_term instance
+             */
+
+            /*
+             * Find the specified sub_term instance
+             */
+            p_sub_term_inst = sub_term_inst_get(sub_term_key, SUB_TERM_FLAG_ACTIVE);
+
+            if(NULL == p_sub_term_inst)
+            {
+                /* This is not a fatal error condition
+                 */
+                BCM_LOG(ERROR, log_id_sub_term, "Specified sub_term not found on GET\n");
+                ret = BCM_ERR_NOENT;
+            }
+            else
+            {
+                do
+                {
+                    /* Return the agg_port_id list if requested */
+                    BCMBAL_CFG_PROP_CLEAR(&p_sub_term_inst->current_sub_term_info,
+                                          subscriber_terminal,
+                                          agg_port_id_list);
+
+ 
+                    /* If the user requested the list of agg_port_ids for this subscriber terminal
+                     * then return the list.
+                     */
+                    if(BCMBAL_CFG_PROP_IS_SET(p_sub_term_cfg,
+                                              subscriber_terminal, 
+                                              agg_port_id_list))
+                    {
+ 
+                        if(BCM_ERR_OK == agg_port_id_list_fill(p_sub_term_inst, &agg_port_id_list))
+                        {
+                            /* NOTE: The returned list may be empty */
+                            BCMBAL_CFG_PROP_SET(&p_sub_term_inst->current_sub_term_info,
+                                                subscriber_terminal,
+                                                agg_port_id_list,
+                                                agg_port_id_list);
+                        }
+                        else
+                        {
+                            BCM_LOG(ERROR, log_id_sub_term, "Error trying to fill agg_port list to return\n");
+                            ret = BCM_ERR_INTERNAL;
+                            break;
+                        
+                        }
+                    }
+
+                    /* Return the svc_port_id list if requested */
+                    BCMBAL_CFG_PROP_CLEAR(&p_sub_term_inst->current_sub_term_info,
+                                          subscriber_terminal,
+                                          svc_port_id_list);
+
+                    /* If the user requested the list of sub_term_ids for this subscriber terminal,
+                     * then return the list.
+                     */
+                    if(BCMBAL_CFG_PROP_IS_SET(p_sub_term_cfg,
+                                              subscriber_terminal, 
+                                              svc_port_id_list))
+                    {
+
+                        if(BCM_ERR_OK == svc_port_id_list_fill(p_sub_term_inst, &svc_port_id_list))
+                        {
+                            /* NOTE: The returned list may be empty */
+                            BCMBAL_CFG_PROP_SET(&p_sub_term_inst->current_sub_term_info,
+                                                subscriber_terminal,
+                                                svc_port_id_list,
+                                                svc_port_id_list);
+                        }
+                        else
+                        {
+                            BCM_LOG(ERROR, log_id_sub_term, "Error trying to fill svc_port list to return\n");
+                            ret = BCM_ERR_INTERNAL;
+                            break;
+                        
+                        }
+                    }
+                }while (0);
+
+                /* We respond to the BAL public API backend with a result. We always 
+                 * send a complete msg_payload back to the API, but the data portion 
+                 * of the object is only relevant when a GET or GET-STATS has been requested.
+                 */
+ 
+                p_sub_term_inst->current_sub_term_info.hdr.hdr.comm_hdr = ((bcmbal_obj *)msg_payload)->comm_hdr;
+                *((bcmbal_subscriber_terminal_cfg *)msg_payload) = p_sub_term_inst->current_sub_term_info;
+            }
+
+            mgmt_msg_send_balapi_rsp(ret, msg_payload, oper_type, log_id_sub_term);
+
+            /* Free the temporary lists if they were used */
+            if(svc_port_id_list.val)
+            {
+                bcmos_free(svc_port_id_list.val);
+            }
+
+            if(agg_port_id_list.val)
+            {
+                bcmos_free(agg_port_id_list.val);
+            }
+            
+            break;
+        }          
+
+        case (BCMBAL_OBJ_MSG_TYPE_CLEAR):
+        {            
+            /*
+             * Find the specified sub_term instance
+             */
+            p_sub_term_inst = sub_term_inst_get(sub_term_key, SUB_TERM_FLAG_ACTIVE);
+
+            if(NULL == p_sub_term_inst)
+            {
+                /* This is not a fatal error condition
+                 */
+                BCM_LOG(ERROR, log_id_sub_term, "Specified sub_term not found on CLEAR\n");
+                ret = BCM_ERR_NOENT;
+            }
+            else
+            {
+                /*
+                 * Fill in the local sub_term instance API request data structure
+                 */
+                p_sub_term_inst->api_req_sub_term_info = *p_sub_term_cfg;
+            }
+
+           /* We respond to the BAL public API backend with a result.
+             */
+            mgmt_msg_send_balapi_rsp(ret, msg_payload, oper_type, log_id_sub_term);
+
+            if(BCM_ERR_OK == ret)
+            {
+                fsm_event.event_type = SUB_TERM_FSM_EVENT_TYPE_REMOVE;
+
+                /* Run the sub_term FSM to process this event */
+                ret = sub_term_fsm_exec(p_sub_term_inst, &fsm_event);
+            }
+
+            break;            
+        }
+
+        default:
+        {
+            BCM_LOG(ERROR, log_id_sub_term, 
+                    "Unsupported operation on sub_term object (%d)\n",
+                    bcmbal_msg_id_oper_get(msg_payload) );
+
+            ret = BCM_ERR_NOT_SUPPORTED;
+
+            /* We respond to the BAL public API backend with a result. We always 
+             * send a complete msg_payload back to the API, but the data portion 
+             * of the object is only relevant when a GET or GET-STATS has been requested.
+             */
+            mgmt_msg_send_balapi_rsp(ret, msg_payload, oper_type, log_id_sub_term);
+            break;
+        }
+    }
+ 
+    return ret;
+}
+
+
+bcmos_errno process_subscriber_terminal_util_msg(void *msg_payload)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    sub_term_inst *p_sub_term_inst = NULL;
+    bcmbal_msg_type type;
+    sub_term_fsm_event sub_term_event;
+    bcmbal_subscriber_terminal_key key;
+
+    BUG_ON(NULL == msg_payload);
+
+    type = bcmbal_type_minor_get(msg_payload);
+
+    BCM_LOG(DEBUG, log_id_sub_term,
+            "Processing a sub_term %s util message from %s\n",
+            bcmbal_msg_t_str[type],
+            subsystem_str[bcmbal_sender_get(msg_payload)]);
+
+    /* recover the key from the message */
+    key = ((bal_util_msg_ind *)msg_payload)->obj_key.sub_term_key;
+
+    do
+    {
+        BCM_LOG(DEBUG, log_id_sub_term, "Got sub_term key id from util (ID%d, PON %d)\n",
+                key.sub_term_id, key.intf_id);
+
+        /* Don't bother to look up the sub_term instance for DISCOVERY messages from the 
+         * mac util where the sub_term_id is unknown.  This is a new ONU, so it will not
+         * be found in the ACTIVE table.
+         */
+        if((BAL_MSG_TYPE_AUTO_IND != (bcmbal_msg_type)type) || 
+           (BAL_MSG_TYPE_AUTO_IND == (bcmbal_msg_type)type && BCMBAL_SUB_ID_UNKNOWN != key.sub_term_id))
+        {
+            /*
+             * Get the sub_term instance that's being referenced
+             */
+            p_sub_term_inst = sub_term_inst_get(&key, SUB_TERM_FLAG_ACTIVE);
+            if(NULL == p_sub_term_inst)
+            {  
+                BCM_LOG(ERROR, log_id_sub_term, 
+                        "invalid sub_term (ID%d, PON%d) found while processing a util message type %s from %s\n",
+                        key.sub_term_id,
+                        key.intf_id,
+                        bcmbal_msg_t_str[type],
+                        subsystem_str[bcmbal_sender_get(msg_payload)]);
+
+                ret = BCM_ERR_INTERNAL;
+
+                break;
+            }
+        }
+
+        /*
+         * Record the msg for further processing access
+         */
+        sub_term_event.msg = msg_payload;
+
+        if (BAL_MSG_TYPE_IND == type)
+        {
+            sub_term_event.event_type = SUB_TERM_FSM_EVENT_TYPE_UTIL_MSG;
+        }
+        else if (BAL_MSG_TYPE_AUTO_IND == type)
+        {
+            sub_term_event.event_type = SUB_TERM_FSM_EVENT_TYPE_UTIL_AUTO_MSG;
+        }
+        else
+        {
+            ret = BCM_ERR_NOT_SUPPORTED;
+            BCM_LOG(ERROR, log_id_sub_term, 
+                    "Unknown message type received from the APP (not one of RSP:ACK:IND:AUTO_IND) (type:%d)\n",
+                    type);
+        }
+
+        if (p_sub_term_inst)
+        {
+            BCM_LOG(DEBUG, log_id_sub_term, "p_sub_term_inst->fsm_state=%d , sub_term_event.event_type = %d\n",
+                     p_sub_term_inst->fsm_state, sub_term_event.event_type);
+        }
+        else
+        {
+            if (BAL_MSG_TYPE_IND == type)
+            {
+                BCM_LOG(WARNING, log_id_sub_term, "p_sub_term_inst is NULL\n");
+            }
+        }
+        /*
+         * Run the Sub_Term FSM to process this event
+         */
+        if(BCM_ERR_OK == ret)
+        {
+            ret = sub_term_fsm_exec(p_sub_term_inst, &sub_term_event);
+        }
+    }
+    while(0);
+
+    return ret;
+}
+
+/************************************************************************************/
+/**
+ * @brief The Subscriber terminal FSM state processing for a subscriber-terminal 
+ *        admin-up command received from the BAL Public API when the specified
+ *        subscriber-terminal instance is in the admin-down state (i.e. when
+ *        the subscriber-terminal instance FSM is in the NULL or REMOVED state).
+ *
+ * @param p_sub_term_inst  Pointer to an subscriber terminal instance
+ * @param msg              Pointer to a BAL message received from the BAL Public API
+ * @param p_event          Pointer to an subscriber terminal event structure
+ * 
+ * @returns bcmos_errno 
+ ***********************************************************************************/
+static bcmos_errno sub_term_fsm_admin_up_start(sub_term_inst *p_sub_term_inst, 
+                                               void *msg, 
+                                               sub_term_fsm_event *p_event)
+{
+
+    bcmos_errno ret = BCM_ERR_OK;
+
+    BCM_LOG(INFO, log_id_sub_term, 
+            "Received a admin UP request from BAL API - bringing up SUB_TERM\n");
+
+    /* change subscriber terminal state to CONFIGURING */
+    p_sub_term_inst->fsm_state = SUB_TERM_FSM_STATE_CONFIGURING;
+
+    /*– Core calls Mac Utils to set the subscriber-terminal parameters using the applicable SDK calls   */
+    ret = mac_util_subscriber_terminal_set(p_sub_term_inst, BAL_UTIL_OPER_SUB_TERM_ADD, BCMOS_FALSE);
+
+    do
+    {
+
+        /* check for object in wrong state, this is not an actual error */
+        if(BCM_ERR_STATE == ret)
+        {
+            BCM_LOG(INFO, log_id_sub_term, 
+                    "mac_util_subscriber_terminal_set() subscriber_terminal could not be activated at this time\n");
+    
+        }
+        /* check for errors */
+        else if(BCM_ERR_OK != ret)
+        {
+            BCM_LOG(ERROR, log_id_sub_term, 
+                    "Error detected in mac_util_subscriber_terminal_set(): %s\n",
+                    bcmos_strerror(ret));
+            break;
+    
+        }
+   
+        /* The hardware has properly accepted the object info, so the request object becomes
+         * the current state, except for the oper_status.
+         */
+        bcmbal_sub_term_object_overlay_w_src_priority(&p_sub_term_inst->current_sub_term_info,
+                                                      &p_sub_term_inst->api_req_sub_term_info);
+        
+        /* Add this subscriber_terminal to the list of subscriber_terminals associated with it's interface */
+        bcmbal_interface_sub_term_list_entry_add(p_sub_term_inst->current_sub_term_info.key);
+
+        /* Record that this object is in progress */
+        BCMBAL_OBJ_IN_PROGRESS_SET(&(p_sub_term_inst->current_sub_term_info), BCMOS_TRUE);
+
+    } while(0);
+
+    /* If there were errors during processing, then report the error to the API */
+    if(BCM_ERR_OK != ret)
+    {
+        mgmt_msg_send_balapi_ind(ret,
+                                 msg, 
+                                 log_id_sub_term);
+    }
+
+    return ret;
+
+}
+
+/*****************************************************************************/
+/**
+ * @brief The subscriber terminal FSM state processing for a subscriber terminal
+ *        admin-up command received from the BAL Public API when the specified
+ *        subscriber terminal FSM is already in the REMOVING state.
+ *
+ * @param p_sub_term_inst  Pointer to a subscriber terminal instance
+ * @param msg              Pointer to a BAL message received from the BAL Public API
+ * @param p_event          Pointer to an subscriber terminal event structure
+ * 
+ * @returns bcmos_errno 
+ *****************************************************************************/
+static bcmos_errno sub_term_fsm_admin_up_error(sub_term_inst *p_sub_term_inst,
+                                               void *msg, 
+                                               sub_term_fsm_event *p_event)
+{
+    bcmos_errno ret = BCM_ERR_STATE;
+
+    BCM_LOG(DEBUG, log_id_sub_term, 
+            "Received a admin UP request from BAL API - returning ERROR to the API"
+            " - no further function\n");
+
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Subscriber terminal FSM state processing for an subscriber-terminal 
+ *        admin-down command received from the BAL Public API when the specified
+ *        subscriber-terminal is admin-up (i.e when the specified subscriber-terminal
+ *        instance FSM is in the CONFIGURED state).
+ *
+ * @param p_sub_term_inst  Pointer to an subscriber terminal instance
+ * @param msg              Pointer to a BAL message received from the BAL Public API
+ * @param p_event          Pointer to an subscriber terminal event structure
+ * 
+ * @returns bcmos_errno 
+ *****************************************************************************/
+static bcmos_errno sub_term_fsm_admin_dn_start(sub_term_inst *p_sub_term_inst, 
+                                               void *msg, 
+                                               sub_term_fsm_event *p_event)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+
+    BCM_LOG(INFO, log_id_sub_term, 
+            "Received a admin DOWN request from BAL API - bringing down SUB_TERM\n");
+
+    /* change subscriber terminal state to CONFIGURING */
+    p_sub_term_inst->fsm_state = SUB_TERM_FSM_STATE_CONFIGURING;
+
+    /*– Core calls Mac Utils to set the subscriber-terminal parameters using the applicable SDK calls   */
+    ret = mac_util_subscriber_terminal_set(p_sub_term_inst, BAL_UTIL_OPER_SUB_TERM_REMOVE, BCMOS_FALSE);
+
+    /* check for errors */
+    if(BCM_ERR_OK != ret)
+    {
+        BCM_LOG(ERROR, log_id_sub_term, 
+                "Error detected in mac_util_subscriber_terminal_set(): %s\n",
+                bcmos_strerror(ret));
+
+        /* report the status to the API */
+        mgmt_msg_send_balapi_ind(ret,
+                                 msg, 
+                                 log_id_sub_term);
+ 
+    
+    }
+    else
+    {
+        /* NOTE: The hardware has properly accepted the object info but we do
+         * not overwrite the current subscriber terminal data as there is nothing in the request
+         * that is relevant besides the admin_state.  We merely set the object to in_progress.
+         */
+        BCMBAL_OBJ_IN_PROGRESS_SET(&(p_sub_term_inst->current_sub_term_info), BCMOS_TRUE);
+    }
+
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Subscriber terminal FSM state processing for an subscriber-terminal 
+ *        clear command received from the BAL Public API
+ *
+ * @param p_sub_term_inst  Pointer to an subscriber terminal instance
+ * @param msg              Pointer to a BAL message received from the BAL Public API
+ * @param p_event          Pointer to an subscriber terminal event structure
+ * 
+ * @returns bcmos_errno 
+ *****************************************************************************/
+static bcmos_errno sub_term_fsm_removing_start(sub_term_inst *p_sub_term_inst, 
+                                               void *msg, 
+                                               sub_term_fsm_event *p_event)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+
+    BCM_LOG(INFO, log_id_sub_term, 
+            "Received a REMOVE request from BAL API - removing SUB_TERM\n");
+
+    /* change subscriber terminal state to REMOVING */
+    p_sub_term_inst->fsm_state = SUB_TERM_FSM_STATE_REMOVING;
+
+    /*– Core calls Mac Utils to set the subscriber-terminal parameters using the applicable SDK calls   */
+    ret = mac_util_subscriber_terminal_set(p_sub_term_inst, BAL_UTIL_OPER_SUB_TERM_CLEAR, BCMOS_FALSE);
+
+    /* check for errors */
+    if(BCM_ERR_OK != ret)
+    {
+        BCM_LOG(ERROR, log_id_sub_term, 
+                "Error detected in mac_util_subscriber_terminal_set(): %s\n",
+                bcmos_strerror(ret));
+    
+        /* report the error to the API */
+        mgmt_msg_send_balapi_ind(ret,
+                                 msg, 
+                                 log_id_sub_term);
+    }
+    else
+    {
+        /* The hardware has properly accepted the object info, so the request object becomes
+         * the current state, except for the oper_status.
+         */
+        bcmbal_sub_term_object_overlay_w_src_priority(&p_sub_term_inst->current_sub_term_info,
+                                                      &p_sub_term_inst->api_req_sub_term_info);
+
+        BCMBAL_OBJ_IN_PROGRESS_SET(&(p_sub_term_inst->current_sub_term_info), BCMOS_TRUE);
+    }
+
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Subscriber terminal FSM state processing for subscriber-terminal
+ *        admin-down command from the BAL Public API when the specified
+ *        subscriber-terminal is already admin-down.
+ *
+ * @param p_sub_term_inst  Pointer to an subscriber terminal instance
+ * @param msg              Pointer to a BAL message received from the BAL Public API
+ * @param p_event          Pointer to an subscriber terminal event structure
+ * 
+ * @returns bcmos_errno 
+ *****************************************************************************/
+static bcmos_errno sub_term_fsm_admin_dn_ok(sub_term_inst *p_sub_term_inst, 
+                                            void *msg, 
+                                            sub_term_fsm_event *p_event)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+
+    BCM_LOG(DEBUG, log_id_sub_term, 
+            "Received a admin DOWN request from BAL API - returning OK to the API"
+            " - no further function\n");
+
+    mgmt_msg_send_balapi_ind(ret,
+                             msg, 
+                             log_id_sub_term);
+
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The subscriber terminal FSM state processing for a subscriber terminal
+ *        admin-down command received from the BAL Public API when the specified
+ *        subscriber terminal FSM is already in the REMOVING state.
+ *
+ * @param p_sub_term_inst  Pointer to a subscriber terminal instance
+ * @param msg              Pointer to a BAL message received from the BAL Public API
+ * @param p_event          Pointer to an subscriber terminal event structure
+ * 
+ * @returns bcmos_errno 
+ *****************************************************************************/
+static bcmos_errno sub_term_fsm_admin_dn_error(sub_term_inst *p_sub_term_inst,
+                                               void *msg, 
+                                               sub_term_fsm_event *p_event)
+{
+    bcmos_errno ret = BCM_ERR_STATE;
+
+    BCM_LOG(DEBUG, log_id_sub_term, 
+            "Received a admin DOWN request from BAL API - returning ERROR to the API"
+            " - no further function\n");
+
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Subscriber terminal FSM state processing function to ignore a 
+ *        received message.
+ *
+ * @param p_sub_term_inst  Pointer to an subscriber terminal instance
+ * @param msg              Pointer to a BAL message received from the BAL Public API
+ * @param p_event          Pointer to an subscriber terminal event structure
+ * 
+ * @returns bcmos_errno 
+ *****************************************************************************/
+static bcmos_errno sub_term_fsm_ignore_util_msg(sub_term_inst *p_sub_term_inst, 
+                                                void *msg, 
+                                                sub_term_fsm_event *p_event)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+
+    BCM_LOG(DEBUG, log_id_sub_term,  "Ignoring message from BAL utils\n");
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Subscriber terminal FSM state processing function to process an
+ *        AUTO IND message from one of the BAL apps while in the NULL state.
+ *
+ * @param p_sub_term_inst  Pointer to an subscriber terminal instance
+ * @param msg              Pointer to a BAL message received from one of
+ *                         the BAL apps.
+ * @param p_event          Pointer to an subscriber terminal event structure
+ * 
+ * @returns bcmos_errno 
+ *****************************************************************************/
+static bcmos_errno sub_term_fsm_null_process_util_auto_msg(sub_term_inst *p_sub_term_inst, 
+                                                           void *msg, 
+                                                           sub_term_fsm_event *p_event)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    bcmbal_subscriber_terminal_cfg          subscriber_terminal_obj;
+    bcmbal_serial_number serial = {};
+    bal_util_msg_ind *ind_msg;
+
+    /* Process checks */
+    BUG_ON(NULL == msg);
+    BUG_ON(NULL == p_event);
+
+    ind_msg = (bal_util_msg_ind *)msg;
+
+    BCM_LOG(DEBUG, log_id_sub_term, "Received a AUTO IND in the null state\n");
+    
+    /*
+     * Set the key in the subscriber_terminal object
+     */
+    BCMBAL_CFG_INIT(&subscriber_terminal_obj, subscriber_terminal, ind_msg->obj_key.sub_term_key);
+    
+     /*
+     * Set the serial number in the subscriber_terminal object
+     */
+    memcpy(&serial, ind_msg->data, sizeof(bcmbal_serial_number));
+    BCMBAL_CFG_PROP_SET(&subscriber_terminal_obj, subscriber_terminal, serial_number, serial);
+
+    /* And mark it's status as DOWN */
+    BCMBAL_CFG_PROP_SET(&subscriber_terminal_obj, subscriber_terminal, oper_status, BCMBAL_STATUS_DOWN);
+
+    /*
+     * Send the indication back to the BAL public API here
+     */
+    mgmt_msg_send_balapi_ind(ret,
+                             (void *)&subscriber_terminal_obj.hdr,
+                             log_id_sub_term);
+   
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Subscriber terminal FSM state processing function to process an
+ *        AUTO IND message from one of the BAL apps while in the CONFIGURING state.
+ *
+ * @param p_sub_term_inst  Pointer to an subscriber terminal instance
+ * @param msg              Pointer to a BAL message received from one of
+ *                         the BAL apps.
+ * @param p_event          Pointer to an subscriber terminal event structure
+ * 
+ * @returns bcmos_errno 
+ *****************************************************************************/
+static bcmos_errno sub_term_fsm_configuring_process_util_msg(sub_term_inst *p_sub_term_inst, 
+                                                             void *msg, 
+                                                             sub_term_fsm_event *p_event)
+{
+    bcmos_errno ret;
+    bal_util_msg_ind *ind_msg;
+
+    /* Parameter checks */
+    BUG_ON(NULL == p_sub_term_inst);
+    BUG_ON(NULL == msg);
+    BUG_ON(NULL == p_event);
+
+    ind_msg = (bal_util_msg_ind *)msg;
+
+    /*
+     * NOTE: AUTO_IND messages are not processed in this function,
+     * so there is no need to consider them in this logic.
+     */
+
+    BCM_LOG(DEBUG, log_id_sub_term, 
+            " Received a IND message from BAL UTIL (%s) during CONFIGURING state\n",
+             subsystem_str[bcmbal_sender_get(msg)]);
+
+    /* Handle response */
+    ret = ind_msg->status;
+    
+    if(BCM_ERR_OK == ret)
+    {
+
+        /* If this indication is for a subscriber terminal that has been ADDED and is ADMIN_UP,
+         * OR for a subscriber terminal that has been REMOVED and is ADMIN_DOWN 
+         * then complete the state transition.
+         */
+ 
+        if((BAL_UTIL_OPER_SUB_TERM_ADD == bcmbal_msg_id_oper_get(msg) && 
+            BCMBAL_STATE_UP == p_sub_term_inst->current_sub_term_info.data.admin_state) ||
+            (BAL_UTIL_OPER_SUB_TERM_REMOVE == bcmbal_msg_id_oper_get(msg) &&
+             BCMBAL_STATE_DOWN == p_sub_term_inst->current_sub_term_info.data.admin_state))
+        {
+
+            if (bcm_topo_pon_get_pon_family(p_sub_term_inst->current_sub_term_info.key.intf_id) == BCM_TOPO_PON_FAMILY_EPON)
+            {
+                uint16_t tunnel_id;
+
+                /* Recover the tunnel_id from the indication message */
+                memcpy(&tunnel_id, ind_msg->data, sizeof(tunnel_id));
+
+                /* And store it in the sub_term instance, to be used by the switch */
+                p_sub_term_inst->current_sub_term_info.data.svc_port_id = tunnel_id;
+            }
+        
+            p_sub_term_inst->current_sub_term_info.data.oper_status =
+                p_sub_term_inst->api_req_sub_term_info.data.oper_status;
+
+            /*
+             * The subscriber terminal has been successfully configured
+             */
+            p_sub_term_inst->fsm_state = SUB_TERM_FSM_STATE_CONFIGURED;
+
+        }
+
+    }
+    else
+    {
+        /* Error */
+        BCM_LOG(ERROR, log_id_sub_term, 
+                "Failed in state %s;%s\n",
+                sub_term_state_name_get(p_sub_term_inst->fsm_state),
+                bcmos_strerror(ret));
+    }
+
+    BCMBAL_OBJ_IN_PROGRESS_SET(&(p_sub_term_inst->current_sub_term_info), BCMOS_FALSE);
+
+    /*
+     * Send the indication back to the BAL public API here
+     */
+    mgmt_msg_send_balapi_ind(ret,
+                             (void *)&p_sub_term_inst->current_sub_term_info.hdr,
+                             log_id_sub_term);
+
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Subscriber terminal FSM state processing function to process an
+ *        IND message from one of the BAL apps while in the CONFIGURED state.
+ *
+ * @param p_sub_term_inst  Pointer to an subscriber terminal instance
+ * @param msg              Pointer to a BAL message received from one of
+ *                         the BAL apps.
+ * @param p_event          Pointer to an subscriber terminal event structure
+ * 
+ * @returns bcmos_errno 
+ *****************************************************************************/
+static bcmos_errno sub_term_fsm_configured_process_util_msg(sub_term_inst *p_sub_term_inst, 
+                                                            void *msg, 
+                                                            sub_term_fsm_event *p_event)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+
+    /* Process checks */
+    BUG_ON(NULL == p_sub_term_inst);
+    BUG_ON(NULL == msg);
+    BUG_ON(NULL == p_event);
+
+    BCM_LOG(DEBUG, log_id_sub_term, 
+            " Received a IND message from BAL UTIL (%s) during CONFIGURED state\n",
+             subsystem_str[bcmbal_sender_get(msg)]);
+
+    if((BAL_UTIL_OPER_SUB_TERM_REMOVE != bcmbal_msg_id_oper_get(msg)) &&
+       (BAL_UTIL_OPER_SUB_TERM_CLEAR != bcmbal_msg_id_oper_get(msg)))
+    {
+        BCM_LOG(ERROR, log_id_sub_term, 
+                "Received an unrecognized IND (%u) received in the configured state"
+                "- no further function\n", bcmbal_msg_id_oper_get(msg));
+    }
+    else
+    {
+
+
+        /* change subscriber terminal state to CONFIGURING */
+        p_sub_term_inst->fsm_state = SUB_TERM_FSM_STATE_CONFIGURING;
+ 
+        /* Set the oper_status upon success */
+        p_sub_term_inst->current_sub_term_info.data.oper_status = BCMBAL_STATUS_NOT_PRESENT;
+
+        /*
+         * Send the indication back to the BAL public API here
+         */
+        mgmt_msg_send_balapi_ind(ret,
+                                 &p_sub_term_inst->current_sub_term_info.hdr, 
+                                 log_id_sub_term);
+    }
+ 
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Subscriber terminal FSM state processing function to process an
+ *        AUTO IND message from one of the BAL apps while in the CONFIGURED state.
+ *
+ * @param p_sub_term_inst  Pointer to an subscriber terminal instance
+ * @param msg              Pointer to a BAL message received from one of
+ *                         the BAL apps.
+ * @param p_event          Pointer to an subscriber terminal event structure
+ * 
+ * @returns bcmos_errno 
+ *****************************************************************************/
+static bcmos_errno sub_term_fsm_configuring_process_util_auto_msg(sub_term_inst *p_sub_term_inst, 
+                                                                  void *msg, 
+                                                                  sub_term_fsm_event *p_event)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+
+    /* Process checks */
+    BUG_ON(NULL == p_sub_term_inst);
+    BUG_ON(NULL == msg);
+    BUG_ON(NULL == p_event);
+
+    BCM_LOG(DEBUG, log_id_sub_term, 
+            " Received a AUTO IND message from BAL UTIL (%s) during CONFIGURING state\n",
+             subsystem_str[bcmbal_sender_get(msg)]);
+
+    if(BAL_UTIL_OPER_SUB_TERM_DISCOVERY != bcmbal_msg_id_oper_get(msg))
+    {
+        BCM_LOG(ERROR, log_id_sub_term, 
+                "Received an unrecognized AUTO IND in the configuring state"
+                "- no further function\n");
+    }
+    else
+    {
+        /*– Core calls Mac Utils to set the subscriber-terminal parameters using the applicable SDK calls   */
+        /* send TRUE in last argument to indicate the request is after a ONU Discovery */
+        ret = mac_util_subscriber_terminal_set(p_sub_term_inst, BAL_UTIL_OPER_SUB_TERM_ADD, BCMOS_TRUE);
+    }
+    
+    /* If there were errors during processing, then report the error to the API */
+    if(BCM_ERR_OK != ret)
+    {
+
+        mgmt_msg_send_balapi_ind(ret,
+                                 (void *)&p_sub_term_inst->current_sub_term_info.hdr, 
+                                 log_id_sub_term);
+    }
+    
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Subscriber terminal FSM state processing function to process a
+ *        message from one of the BAL apps while in the REMOVING state.
+ *
+ * @param p_sub_term_inst  Pointer to an subscriber terminal instance
+ * @param msg              Pointer to a BAL message received from one of
+ *                         the BAL apps.
+ * @param p_event          Pointer to an subscriber terminal event structure
+ * 
+ * @returns bcmos_errno 
+ *****************************************************************************/
+static bcmos_errno sub_term_fsm_removing_process_util_msg(sub_term_inst *p_sub_term_inst, 
+                                                          void *msg, 
+                                                          sub_term_fsm_event *p_event)
+{
+    bcmos_errno ret;
+    bal_util_msg_ind *ind_msg;
+
+    /* Parameter checks */
+    BUG_ON(NULL == p_sub_term_inst);
+    BUG_ON(NULL == msg);
+    BUG_ON(NULL == p_event);
+
+    ind_msg = (bal_util_msg_ind *)msg;
+
+    /*
+     * NOTE: AUTO_IND messages are not processed in this function,
+     * so there is no need to consider them in this logic.
+     */
+
+    /* Handle indication */
+    ret = ind_msg->status;
+
+    BCM_LOG(INFO, log_id_sub_term, 
+            "Received a %s message from BAL APP (%s) during REMOVING state\n",
+            (BAL_MSG_TYPE_IND == bcmbal_type_minor_get(msg)) ? "IND" : "RSP",
+            subsystem_str[bcmbal_sender_get(msg)]);
+
+    if(BCM_ERR_OK == ret)
+    {
+        /* Set the admin_state and oper_status to be DOWN and NOT_PRESENT respectively, 
+         * since we are clearing this object anyway.  These parameters are set in the free function,
+         * but they need to be set here for the indication below to be correct */
+        p_sub_term_inst->current_sub_term_info.data.admin_state = BCMBAL_STATE_DOWN;
+        p_sub_term_inst->current_sub_term_info.data.oper_status = BCMBAL_STATUS_NOT_PRESENT;
+    }
+
+    if(BCM_ERR_OK == ret)
+    {
+
+        /* Remove this subscriber_terminal from the list of subscriber_terminals associated with it's interface */
+        bcmbal_interface_sub_term_list_entry_remove(p_sub_term_inst->current_sub_term_info.key);
+
+        /*
+         * Send the success indication back to the BAL public API here
+         */
+        mgmt_msg_send_balapi_ind(ret,
+                                 &p_sub_term_inst->current_sub_term_info.hdr, 
+                                 log_id_sub_term);
+
+        /* Return the subscriber terminal to the free pool */
+        sub_term_free_by_entry(p_sub_term_inst);
+
+        BCM_LOG(DEBUG, log_id_sub_term, "sub term freed\n");
+
+    }
+    else
+    {
+        p_sub_term_inst->fsm_state = SUB_TERM_FSM_STATE_CONFIGURED;
+
+        /*
+         * Send the failure indication back to the BAL public API here
+         */
+        mgmt_msg_send_balapi_ind(ret,
+                                 &p_sub_term_inst->current_sub_term_info.hdr, 
+                                 log_id_sub_term);
+
+        BCM_LOG(ERROR, log_id_sub_term, 
+                "Error encountered in REMOVING state (status is %s)\n",
+                bcmos_strerror(ret));      
+    }
+
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Subscriber terminal FSM state processing function to process an
+ *        AUTO IND message from one of the BAL apps while in the REMOVING state.
+ *
+ * @param p_sub_term_inst  Pointer to an subscriber terminal instance
+ * @param msg              Pointer to a BAL message received from one of
+ *                         the BAL apps.
+ * @param p_event          Pointer to an subscriber terminal event structure
+ * 
+ * @returns bcmos_errno 
+ *****************************************************************************/
+static bcmos_errno sub_term_fsm_removing_process_util_auto_msg(sub_term_inst *p_sub_term_inst, 
+                                                              void *msg, 
+                                                              sub_term_fsm_event *p_event)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+
+    /* Parameter checks */
+    BUG_ON(NULL == p_sub_term_inst);
+    BUG_ON(NULL == msg);
+    BUG_ON(NULL == p_event);
+
+    BCM_LOG(DEBUG, log_id_sub_term, 
+            "Received a AUTO IND in the removing state"
+            " - no further function\n");
+
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Subscriber terminal FSM function which is executed when an error 
+ *        is encountered during FSM processing.
+ *
+ * @param p_sub_term_inst  Pointer to an subscriber terminal instance
+ * @param msg              Pointer to a BAL message received from one of
+ *                         the BAL apps
+ * @param p_event          Pointer to an subscriber terminal event structure
+ * 
+ * @returns bcmos_errno 
+ *****************************************************************************/
+static bcmos_errno sub_term_fsm_state_err(sub_term_inst *p_sub_term_inst, 
+                                          void *msg, 
+                                          sub_term_fsm_event *p_event)
+{
+    bcmos_errno ret = BCM_ERR_INVALID_OP;
+
+    BCM_LOG(ERROR, log_id_sub_term, 
+            "Error encountered processing SUB_TERM FSM - BAD EVENT ()\n");
+
+    return ret;
+}
+
+
+/*
+ * Helper functions
+ */
+
+/*****************************************************************************/
+/**
+ * @brief A function to retrieve a subscriber-terminal instance of the specified
+ *        class.
+ *
+ * @param key            A pointer to the key of the subscriber-terminal being 
+ *                       referenced
+ * @param search_flag    A flag specifying the type of subscriber-terminal
+ *                       instance to be retrieved
+ *                         
+ * @returns sub_term_inst_t*  A pointer to the found subscriber-terminal instance,
+ *                            or NULL if one is not found
+ *****************************************************************************/
+sub_term_inst *sub_term_inst_get(bcmbal_subscriber_terminal_key *key, 
+                                 sub_term_flag search_flag)
+{
+    sub_term_inst *current_entry = NULL;
+    sub_term_inst *p_temp_entry;
+
+    /*
+     * First, check the active list
+     */
+    TAILQ_FOREACH(current_entry, 
+                  &SUB_TERM_FSM_SUB_TERM_LIST_CTX_PTR->active_sub_term_list, 
+                  sub_term_inst_next)
+    {
+        if((current_entry->api_req_sub_term_info.key.sub_term_id == key->sub_term_id) &&
+           (current_entry->api_req_sub_term_info.key.intf_id == key->intf_id))
+        {
+            /* The sub_term instance pointer is in current_entry */
+            break;
+        }
+    }
+ 
+
+    if((SUB_TERM_FLAG_ANY == search_flag) && (NULL == current_entry))
+    {
+        /* Now check the free list */
+        TAILQ_FOREACH_SAFE(current_entry, 
+                           &SUB_TERM_FSM_SUB_TERM_LIST_CTX_PTR->free_sub_term_list, 
+                           sub_term_inst_next,
+                           p_temp_entry)
+        {
+            /* Remove it from the free list */
+            TAILQ_REMOVE(&SUB_TERM_FSM_SUB_TERM_LIST_CTX_PTR->free_sub_term_list,
+                         current_entry, sub_term_inst_next);
+
+            /* And add it to the active list */
+            TAILQ_INSERT_TAIL(&SUB_TERM_FSM_SUB_TERM_LIST_CTX_PTR->active_sub_term_list, 
+                              current_entry, sub_term_inst_next);
+ 
+            /*
+             * Initialize the sub_term data
+             */
+            current_entry->fsm_state = SUB_TERM_FSM_STATE_NULL;
+  
+            break;
+        }
+    }
+
+    if(NULL == current_entry)
+    {
+        /*
+         * A sub_term was not found on either list*/
+
+        BCM_LOG(DEBUG, log_id_sub_term, "no sub_term found\n");
+    }
+    
+    return current_entry;
+}
+
+bcmos_errno sub_term_svc_port_id_get(bcmbal_sub_id sub_term_id, 
+                                     uint16_t access_int_id, 
+                                     bcmbal_service_port_id *p_svc_port_id)
+{
+    sub_term_inst *p_sub_term_inst;
+    bcmbal_subscriber_terminal_key sub_term_key;
+    bcmos_errno ret = BCM_ERR_OK;
+
+    BUG_ON(NULL == p_svc_port_id);
+
+    /* Create the key to find the subscriber terminal instance being referenced */
+    sub_term_key.sub_term_id = sub_term_id;
+    sub_term_key.intf_id = access_int_id;
+
+    if(NULL == (p_sub_term_inst = sub_term_inst_get(&sub_term_key, SUB_TERM_FLAG_ACTIVE)))
+    {
+        BCM_LOG(ERROR, log_id_sub_term, "Specified sub_term (sub:%d on int:%d) not found\n",
+                sub_term_id, access_int_id);
+        ret = BCM_ERR_NOENT;
+    }
+    else
+    {
+        *p_svc_port_id = p_sub_term_inst->current_sub_term_info.data.svc_port_id;
+    }
+        
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief A function to free a subscriber terminal instance specified
+ *        by a the supplied entry pointer.
+ *
+ * @param p_entry A pointer to the entry to be freed
+ *               
+ *                         
+ * @returns bcmos_errno 
+ *****************************************************************************/
+static bcmos_errno sub_term_free_by_entry(sub_term_inst *p_entry)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    sub_term_inst *current_entry;
+    sub_term_inst *p_temp_entry;
+
+    BUG_ON(NULL == p_entry);
+
+    /*
+     * First, check the active list (an active sub_term can be in the adding or removing state)
+     */
+    TAILQ_FOREACH_SAFE(current_entry, 
+                       &SUB_TERM_FSM_SUB_TERM_LIST_CTX_PTR->active_sub_term_list, 
+                       sub_term_inst_next,
+                       p_temp_entry)
+    {
+        if(current_entry == p_entry)
+        {
+            /* Remove it from the active list */
+            TAILQ_REMOVE(&SUB_TERM_FSM_SUB_TERM_LIST_CTX_PTR->active_sub_term_list, 
+                         current_entry, sub_term_inst_next);
+        }
+    }
+
+    /* Initialize the svc_port_id and agg_port_id lists */
+    p_entry->num_svc_port_ids = 0;
+    TAILQ_INIT(&p_entry->svc_port_id_list);
+     
+    p_entry->num_agg_port_ids = 0;
+    TAILQ_INIT(&p_entry->agg_port_id_list);
+
+    /* And add the entry to the free list */
+    p_entry->fsm_state = SUB_TERM_FSM_STATE_NULL;
+
+    /* And initialize the current object in the sub_term instance */
+    sub_term_inst_entry_obj_init(p_entry);
+    
+    TAILQ_INSERT_TAIL(&SUB_TERM_FSM_SUB_TERM_LIST_CTX_PTR->free_sub_term_list, 
+                      p_entry, sub_term_inst_next);
+
+    return ret;
+}
+
+bcmos_errno bcmbal_sub_term_svc_port_id_list_entry_add(sub_term_inst *p_sub_term_inst,
+                                                       bcmbal_service_port_id svc_port_id)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    svc_port_id_entry *current_entry;
+
+    do
+    {
+        if(NULL == p_sub_term_inst)
+        {
+            BCM_LOG(ERROR, log_id_sub_term, 
+                    "attempting to add a svc_port_id (%u) entry "
+                    "to NULL subscriber terminal\n",
+                    svc_port_id);
+
+            ret = BCM_ERR_NOENT;
+            break;
+        }
+
+        /* Check if the id is already on the list before adding it */
+        TAILQ_FOREACH(current_entry, 
+                      &p_sub_term_inst->svc_port_id_list, 
+                      next)
+        {
+            if(current_entry->svc_port_id == svc_port_id)
+            {
+                ret = BCM_ERR_ALREADY;
+                break;
+            }       
+        }
+
+        if(BCM_ERR_OK == ret)
+        {
+            /* Get a new entry and configure it */
+            current_entry = bcmos_calloc(sizeof(svc_port_id_entry));
+ 
+            if (NULL == current_entry)
+            {
+                BCM_LOG(ERROR, log_id_sub_term,
+                        "No memory available\n");
+                ret = BCM_ERR_NOMEM;
+                break;
+            }
+ 
+            current_entry->svc_port_id = svc_port_id;
+ 
+            /* Save the entry on the list of subscriber-terminal ids on this interface */
+            TAILQ_INSERT_TAIL(&p_sub_term_inst->svc_port_id_list, 
+                              current_entry, next);
+
+            (p_sub_term_inst->num_svc_port_ids)++;
+        }
+  
+        current_entry->ref_count++;
+
+    } while (0);
+
+    return ret;
+
+}
+
+bcmos_errno bcmbal_sub_term_svc_port_id_list_entry_remove(sub_term_inst *p_sub_term_inst,
+                                                          bcmbal_service_port_id svc_port_id)
+{
+    bcmos_errno ret = BCM_ERR_NOENT;
+    svc_port_id_entry *current_entry, *p_temp_entry;
+     
+    do
+    {
+        if(NULL == p_sub_term_inst)
+        {
+            BCM_LOG(ERROR, log_id_sub_term, 
+                    "attempting to remove a svc_port_id (%u) entry "
+                    "from a NULL subscriber terminal\n",
+                    svc_port_id);
+
+            ret = BCM_ERR_NOENT;
+            break;
+        }
+
+        /* Check if the id is on the list */
+        TAILQ_FOREACH_SAFE(current_entry, 
+                           &p_sub_term_inst->svc_port_id_list, 
+                           next,
+                           p_temp_entry)
+        {
+            if(current_entry->svc_port_id == svc_port_id)
+            {
+                if(0 == --current_entry->ref_count)
+                {
+                    /* Remove it from the list of agg_port_ids on this subscriber terminal */
+                    TAILQ_REMOVE(&p_sub_term_inst->svc_port_id_list, 
+                                 current_entry, next);
+
+                    bcmos_free(current_entry);
+
+                    (p_sub_term_inst->num_svc_port_ids)--;
+                }
+
+                ret = BCM_ERR_OK;
+                break;
+            }       
+        }
+    } while (0);
+ 
+    return ret;
+}
+
+bcmos_errno bcmbal_sub_term_agg_port_id_list_entry_add( sub_term_inst *p_sub_term_inst,
+                                                       bcmbal_aggregation_port_id agg_port_id)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    agg_port_id_entry *current_entry;
+
+    do
+    {
+        if(NULL == p_sub_term_inst)
+        {
+            BCM_LOG(ERROR, log_id_sub_term, 
+                    "attempting to add a svc_port_id (%u) entry "
+                    "to a NULL subscriber terminal\n",
+                    agg_port_id);
+
+            ret = BCM_ERR_NOENT;
+            break;
+        }
+
+        /* Check if the id is already on the list before adding it */
+        TAILQ_FOREACH(current_entry, 
+                      &p_sub_term_inst->agg_port_id_list, 
+                      next)
+        {
+            if(current_entry->agg_port_id == agg_port_id)
+            {
+                ret =  BCM_ERR_ALREADY;
+                break;
+            }       
+        }
+
+        if(BCM_ERR_OK == ret)
+        {
+            /* Get a new entry and configure it */
+            current_entry = bcmos_calloc(sizeof(agg_port_id_entry));
+
+            if (NULL == current_entry)
+            {
+                BCM_LOG(ERROR, log_id_sub_term,
+                        "No memory available\n");
+                ret = BCM_ERR_NOMEM;
+                break;
+            }
+
+            current_entry->agg_port_id = agg_port_id;
+ 
+            /* Save the entry on the list of subscriber-terminal ids on this interface */
+            TAILQ_INSERT_TAIL(&p_sub_term_inst->agg_port_id_list, 
+                              current_entry, next);
+
+            (p_sub_term_inst->num_agg_port_ids)++;
+        }
+
+        (current_entry->ref_count)++;
+
+    } while (0);
+
+    return ret;
+
+}
+
+bcmos_errno bcmbal_sub_term_agg_port_id_list_entry_remove(sub_term_inst *p_sub_term_inst,
+                                                          bcmbal_aggregation_port_id agg_port_id)
+{
+    bcmos_errno ret = BCM_ERR_NOENT;
+    agg_port_id_entry *current_entry, *p_temp_entry;
+
+    do
+    {
+        if(NULL == p_sub_term_inst)
+        {
+            BCM_LOG(ERROR, log_id_sub_term, 
+                    "attempting to remove a agg_port_id (%u) entry "
+                    "from a NULL subscriber terminal\n",
+                    agg_port_id);
+
+            ret = BCM_ERR_NOENT;
+            break;
+        }
+
+        /* Check if the id is on the list */
+        TAILQ_FOREACH_SAFE(current_entry, 
+                           &p_sub_term_inst->agg_port_id_list, 
+                           next,
+                           p_temp_entry)
+        {
+            if(current_entry->agg_port_id == agg_port_id)
+            {
+                if(0 == --current_entry->ref_count)
+                {
+                    /* Remove it from the list of agg_port_ids on this subscriber terminal */
+                    TAILQ_REMOVE(&p_sub_term_inst->agg_port_id_list, 
+                                 current_entry, next);
+
+                    bcmos_free(current_entry);
+
+                    (p_sub_term_inst->num_agg_port_ids)--;
+                }
+
+                ret = BCM_ERR_OK;
+                break;
+            }       
+        }
+    } while (0);
+ 
+    return ret;
+}
+
+static bcmos_errno svc_port_id_list_fill(sub_term_inst *p_sub_term_inst, 
+                                         bcmbal_service_port_id_list_u8 *svc_port_id_list)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    svc_port_id_entry *current_entry = NULL;
+    int ii = 0; 
+
+    do
+    {
+        /* Traverse the list of svc_port_ids recorded and fill in the list to be returned */
+        svc_port_id_list->len = p_sub_term_inst->num_svc_port_ids;
+        svc_port_id_list->val = bcmos_calloc(sizeof(bcmbal_service_port_id) * svc_port_id_list->len);
+
+        if (NULL == svc_port_id_list->val)
+        {
+            BCM_LOG(ERROR, log_id_sub_term,
+                    "No memory available\n");
+            ret = BCM_ERR_NOMEM;
+            break;
+        }
+
+        TAILQ_FOREACH(current_entry, 
+                      &p_sub_term_inst->svc_port_id_list, 
+                      next)
+        {
+            svc_port_id_list->val[ii++] = current_entry->svc_port_id;
+        }
+
+    } while (0);
+
+    return ret;
+}
+
+static bcmos_errno agg_port_id_list_fill(sub_term_inst *p_sub_term_inst, 
+                                         bcmbal_aggregation_port_id_list_u8 *agg_port_id_list)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    agg_port_id_entry *current_entry = NULL;
+    int ii = 0; 
+
+    do
+    {
+        /* Traverse the list of svc_port_ids recorded and fill in the list to be returned */
+        agg_port_id_list->len = p_sub_term_inst->num_agg_port_ids;
+        agg_port_id_list->val = bcmos_calloc(sizeof(bcmbal_aggregation_port_id) * agg_port_id_list->len);
+
+        if (NULL == agg_port_id_list->val)
+        {
+            BCM_LOG(ERROR, log_id_sub_term,
+                    "No memory available\n");
+            ret = BCM_ERR_NOMEM;
+            break;
+        }
+
+        TAILQ_FOREACH(current_entry, 
+                      &p_sub_term_inst->agg_port_id_list, 
+                      next)
+        {
+            agg_port_id_list->val[ii++] = current_entry->agg_port_id;
+        }
+
+    } while (0);
+
+    return ret;
+}
+
+bcmos_errno bcmbal_sub_term_check_svc_port_in_use(sub_term_inst *p_sub_term_inst,
+                                                  bcmbal_service_port_id svc_port_id)
+{
+    bcmos_errno ret = BCM_ERR_NOENT;
+    svc_port_id_entry *current_entry = NULL;
+    
+    do
+    {
+        if(NULL == p_sub_term_inst)
+        {
+            BCM_LOG(ERROR, log_id_sub_term, 
+                    "NULL subscriber terminal\n");
+
+            break;
+        }
+
+        /* Check if the id is on the list */
+        TAILQ_FOREACH(current_entry, 
+                      &p_sub_term_inst->svc_port_id_list, 
+                      next)
+        {
+            if(current_entry->svc_port_id == svc_port_id)
+            {
+                ret = BCM_ERR_OK;
+                break;
+            }
+        }
+    } while (0);
+
+    return ret;
+}
+   
+bcmos_errno bcmbal_sub_term_check_agg_port_in_use(sub_term_inst *p_sub_term_inst,
+                                                  bcmbal_aggregation_port_id agg_port_id)
+{
+    bcmos_errno ret = BCM_ERR_NOENT;
+    agg_port_id_entry *current_entry = NULL;
+    
+    do
+    {
+        if(NULL == p_sub_term_inst)
+        {
+            BCM_LOG(ERROR, log_id_sub_term, 
+                    "NULL subscriber terminal\n");
+
+            break;
+        }
+
+        /* Check if the id is on the list */
+        TAILQ_FOREACH(current_entry, 
+                      &p_sub_term_inst->agg_port_id_list, 
+                      next)
+        {
+            if(current_entry->agg_port_id == agg_port_id)
+            {
+                ret = BCM_ERR_OK;
+                break;
+            }
+        }
+    } while (0);
+
+    return ret;
+}
+    
+
+
+static bcmos_errno bcmbal_sub_term_tm_scheds_set(const bcmbal_subscriber_terminal_cfg *p_sub_term_cfg)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    bcmbal_tm_sched_key tm_sched_key;
+    
+    do
+    {
+        if(BCMBAL_CFG_PROP_IS_SET(p_sub_term_cfg, subscriber_terminal, us_tm))
+        {
+            tm_sched_key.dir = BCMBAL_TM_SCHED_DIR_US;
+            tm_sched_key.id = p_sub_term_cfg->data.us_tm;
+            if(BCM_ERR_OK!= (ret = bcmbal_tm_sched_set_sub_term_owner(tm_sched_key, p_sub_term_cfg)))
+            {
+                BCM_LOG(ERROR, log_id_sub_term, 
+                    "failed to set sub term us_tm, ret = %s", bcmos_strerror(ret));
+                break;
+            }
+        }
+        if(BCMBAL_CFG_PROP_IS_SET(p_sub_term_cfg, subscriber_terminal, ds_tm))
+        {		
+            tm_sched_key.dir = BCMBAL_TM_SCHED_DIR_DS;
+            tm_sched_key.id = p_sub_term_cfg->data.ds_tm;
+            
+            if(BCM_ERR_OK!= (ret = bcmbal_tm_sched_set_sub_term_owner(tm_sched_key, p_sub_term_cfg)))
+            {
+                BCM_LOG(ERROR, log_id_sub_term, 
+                    "failed to set sub term ds_tm, ret = %s", bcmos_strerror(ret));
+                break;    
+            }
+        }
+    }while(0);
+    return ret;
+}
+
+/*@}*/
diff --git a/bal_release/src/core/main/sub_term_fsm.h b/bal_release/src/core/main/sub_term_fsm.h
new file mode 100755
index 0000000..3d7cf72
--- /dev/null
+++ b/bal_release/src/core/main/sub_term_fsm.h
@@ -0,0 +1,182 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file sub_term_fsm.h
+ * @brief Code to support the BAL Subscriber Terminal FSM
+ *
+ * @defgroup sub_terminal Subscriber Terminal
+ * @ingroup core
+ */
+
+
+#ifndef SUB_TERM_FSM_H
+#define SUB_TERM_FSM_H
+
+/*@{*/
+
+#include <bal_api.h>
+
+/* The current implementation supports a global pool of
+ * ONU instances.
+ */
+#define NUM_SUPPORTED_SUB_TERMS (4096)
+
+typedef enum
+{
+    SUB_TERM_FSM_EVENT_TYPE_NONE                 = -1,
+    SUB_TERM_FSM_EVENT_TYPE_ADMIN_UP                 ,
+    SUB_TERM_FSM_EVENT_TYPE_ADMIN_DN                 ,
+    SUB_TERM_FSM_EVENT_TYPE_REMOVE                   ,
+    SUB_TERM_FSM_EVENT_TYPE_UTIL_MSG                 ,
+    SUB_TERM_FSM_EVENT_TYPE_UTIL_AUTO_MSG            ,
+
+
+    SUB_TERM_FSM_EVENT_TYPE__LAST,
+    SUB_TERM_FSM_EVENT_TYPE__NUM_OF
+} sub_term_fsm_event_type;
+
+
+
+typedef enum
+{
+    SUB_TERM_FSM_STATE_NONE     = -1,
+    SUB_TERM_FSM_STATE_NULL         ,
+    SUB_TERM_FSM_STATE_CONFIGURING  ,
+    SUB_TERM_FSM_STATE_CONFIGURED   ,
+    SUB_TERM_FSM_STATE_REMOVING     ,
+ 
+
+    SUB_TERM_FSM_STATE__LAST,
+    SUB_TERM_FSM_STATE__NUM_OF
+} sub_term_fsm_state;
+
+
+typedef enum
+{
+    SUB_TERM_FLAG_ANY  = 1,            /**< ONLY USED in the sub_term get argument */
+    SUB_TERM_FLAG_ACTIVE  ,            /**< A sub_term is on the active list */
+    SUB_TERM_FLAG_FREE                 /**< A sub_term is on the free list */
+} sub_term_flag;
+
+
+typedef struct sub_term_fsm_event
+{
+    sub_term_fsm_event_type event_type;   /**< The sub_term FSM event */
+    void             *msg;
+} sub_term_fsm_event;
+
+
+typedef struct svc_port_id_entry
+{
+    bcmbal_service_port_id svc_port_id;
+    uint8_t ref_count;                    /**< A count of the number of re-uses of this svc_port_id on this subscriber terminal */
+    TAILQ_ENTRY(svc_port_id_entry) next ; /**< TAILQ link */    
+}svc_port_id_entry;
+
+typedef struct agg_port_id_entry
+{
+    bcmbal_aggregation_port_id agg_port_id;
+    uint8_t ref_count;                    /**< A count of the number of re-uses of this agg_port_id on this subscriber terminal */
+    TAILQ_ENTRY(agg_port_id_entry) next ; /**< TAILQ link */    
+}agg_port_id_entry;
+
+typedef struct sub_term_inst sub_term_inst;
+struct sub_term_inst
+{
+    bcmbal_subscriber_terminal_cfg  current_sub_term_info;  /**< The current information for this sub_term (used for GET) */
+    bcmbal_subscriber_terminal_cfg  api_req_sub_term_info;  /**< The last sub_term object info received from the Public API */
+    sub_term_fsm_state              fsm_state;              /**< The sub_term instance FSM state */
+    uint16_t                        num_svc_port_ids;       /**< The number of bearer traffic GEMs on this subscriber terminal */
+    TAILQ_HEAD(svc_port_id_list_head, svc_port_id_entry) svc_port_id_list; /* A list of svc_port_ids on this subscriber terminal */
+    uint16_t                        num_agg_port_ids;       /**< The number of alloc ids on this subscriber terminal */
+    TAILQ_HEAD(agg_port_id_list_head, agg_port_id_entry) agg_port_id_list; /* A list of svc_port_ids on this subscriber terminal */
+    TAILQ_ENTRY(sub_term_inst)      sub_term_inst_next ;    /**< TAILQ link for active list and free list management */
+};
+
+
+/* 
+ * Sub_Term FSM data structures
+ */
+typedef struct sub_term_fsm_ctx
+{
+    /* Lists of free sub_term entries and active sub_term entries
+     */
+    TAILQ_HEAD(free_sub_term_list_head, sub_term_inst) free_sub_term_list;  
+
+    TAILQ_HEAD(active_sub_term_list_head, sub_term_inst) active_sub_term_list;  
+
+} sub_term_fsm_ctx;
+
+
+/* 
+ * Function declarations 
+ */
+extern bcmos_errno sub_term_fsm_init(void);
+
+extern bcmos_errno sub_term_fsm_finish(void);
+
+extern bcmos_errno process_subscriber_terminal_object(void *msg_payload);
+
+extern bcmos_errno process_subscriber_terminal_util_msg(void *msg_payload);
+
+extern sub_term_inst *sub_term_inst_get(bcmbal_subscriber_terminal_key *key, 
+                                          sub_term_flag sub_term_flag);
+
+extern bcmos_errno sub_term_svc_port_id_get(bcmbal_sub_id sub_term_id, 
+                                            uint16_t access_int_id, 
+                                            bcmbal_service_port_id *p_svc_port_id);
+
+extern bcmos_errno bcmbal_sub_term_svc_port_id_list_entry_add(sub_term_inst *p_sub_term_inst,
+                                                              bcmbal_service_port_id svc_port_id);
+
+extern bcmos_errno bcmbal_sub_term_svc_port_id_list_entry_remove(sub_term_inst *p_sub_term_inst,
+                                                                 bcmbal_service_port_id svc_port_id);
+
+bcmos_errno bcmbal_sub_term_agg_port_id_list_entry_add(sub_term_inst *p_sub_term_inst,
+                                                       bcmbal_aggregation_port_id agg_port_id);
+
+bcmos_errno bcmbal_sub_term_agg_port_id_list_entry_remove(sub_term_inst *p_sub_term_inst,
+                                                          bcmbal_aggregation_port_id agg_port_id);
+
+bcmos_errno bcmbal_sub_term_check_agg_port_in_use(sub_term_inst *p_sub_term_inst,
+                                                  bcmbal_aggregation_port_id agg_port_id);
+
+bcmos_errno bcmbal_sub_term_check_svc_port_in_use(sub_term_inst *p_sub_term_inst,
+                                                  bcmbal_service_port_id svc_port_id);
+
+
+
+/*@}*/
+
+#endif /*SUB_TERM_FSM_H */
+
+
diff --git a/bal_release/src/core/main/tm_queue_fsm.c b/bal_release/src/core/main/tm_queue_fsm.c
new file mode 100755
index 0000000..a9999cb
--- /dev/null
+++ b/bal_release/src/core/main/tm_queue_fsm.c
@@ -0,0 +1,981 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file tm_queue_fsm.c
+ * @brief Code to support the BAL tm_queue FSM
+ *
+ *
+ */
+
+/*@{*/
+
+#include <bcmos_system.h>
+#include <tm_queue_fsm.h>
+#include <bal_msg.h>
+#include <bal_osmsg.h>
+#include "bal_worker.h"
+#include "bal_mac_util.h"
+#include "bal_switch_util.h"
+#include "rsc_mgr.h"
+
+#include <bal_objs.h>
+#include <fsm_common.h>
+
+#ifdef ENABLE_LOG
+#include <bcm_dev_log.h>
+
+ /*
+ * @brief The logging device id for tm queue
+ */
+static dev_log_id log_id_tm_queue;
+#endif
+
+/* local function declarations */
+
+static bcmos_errno tm_queue_free_by_entry(tm_queue_inst *p_entry);
+static bcmos_errno tm_queue_fsm_state_err(tm_queue_inst *p_tm_queue_inst, void *msg, tm_queue_fsm_event *p_event);
+static void tm_queue_inst_entry_obj_init(tm_queue_inst *p_entry);
+
+/*
+ * @brief The Global tm_queue fsm context data structure
+ */
+static tm_queue_fsm_ctx g_tm_queue_fsm_tm_queue_list_ctx;
+
+/*
+ * Macros for tm_queue ctx access
+ */
+#define TM_QUEUE_FSM_TM_QUEUE_LIST_CTX      (g_tm_queue_fsm_tm_queue_list_ctx)
+#define TM_QUEUE_FSM_TM_QUEUE_LIST_CTX_PTR  (&g_tm_queue_fsm_tm_queue_list_ctx)
+
+
+/*
+ *  @brief The definition of a tm_queue FSM state processing function
+ */
+typedef bcmos_errno (* tm_queue_fsm_state_processor)(tm_queue_inst *, void *, tm_queue_fsm_event *);
+static bcmos_errno bcmbal_tm_queue_create(tm_queue_inst *p_tm_queue_inst, 
+										   void *msg, 
+										   tm_queue_fsm_event *p_event);
+
+static bcmos_errno bcmbal_tm_queue_active_destroy (tm_queue_inst *p_tm_queue_inst, 
+										   void *msg, 
+										   tm_queue_fsm_event *p_event);
+static bcmos_errno bcmbal_tm_queue_inactive_destroy(tm_queue_inst *p_tm_queue_inst, 
+										   void *msg, 
+										   tm_queue_fsm_event *p_event);
+
+
+static tm_queue_fsm_state_processor tm_queue_states[TM_QUEUE_FSM_STATE__NUM_OF][TM_QUEUE_FSM_EVENT_TYPE__NUM_OF] = 
+{
+    [TM_QUEUE_FSM_STATE_NULL] = 
+    {
+        [TM_QUEUE_FSM_EVENT_TYPE_CREATE] = bcmbal_tm_queue_create,
+    },
+    [TM_QUEUE_FSM_STATE_INACTIVE] = 
+    {
+        [TM_QUEUE_FSM_EVENT_TYPE_DESTROY] = bcmbal_tm_queue_inactive_destroy,
+    },
+    [TM_QUEUE_FSM_STATE_ACTIVE] = 
+    {
+        [TM_QUEUE_FSM_EVENT_TYPE_DESTROY] = bcmbal_tm_queue_active_destroy,
+    },
+
+};
+
+static char *state_name_str[] =
+{
+    "TM_QUEUE_FSM_STATE_NULL",
+    "TM_QUEUE_FSM_STATE_INACTIVE",	
+    "TM_QUEUE_FSM_STATE_ACTIVE",
+    "TM_QUEUE_FSM_STATE_IN_USE",
+    "TM_QUEUE_FSM_STATE_DELETING",
+};
+
+/* Ensure that the name array size matches the associated enum */
+BAL_STATIC_ASSERT(TM_QUEUE_FSM_STATE__LAST == (sizeof (state_name_str) / sizeof (char *)), tm_queue_fsm_state);
+
+static char *tm_queue_state_name_get(tm_queue_fsm_state state)
+{
+    if(state < TM_QUEUE_FSM_STATE__LAST)
+    {
+        return state_name_str[state];
+    }
+    else
+    {
+        return "TM_QUEUE_UNKNOWN";
+    }
+}
+
+static char *event_name_str[] =
+{
+    "TM_QUEUE_FSM_CREATE_EVENT",
+    "TM_QUEUE_FSM_DESTROY_EVENT",
+    "FLOW_FSM_UTIL_MSG_EVENT",
+};
+
+/* Ensure that the name array size matches the associated enum */
+BAL_STATIC_ASSERT(TM_QUEUE_FSM_EVENT_TYPE__LAST == (sizeof (event_name_str) / sizeof (char *)), tm_queue_fsm_event_type);
+
+static char *tm_queue_event_name_get(tm_queue_fsm_event_type event)
+{
+    if(event < TM_QUEUE_FSM_EVENT_TYPE__LAST)
+    {
+        return event_name_str[event];
+    }
+    else
+    {
+        return "TM_QUEUE_EVT_UNKNOWN";
+    }
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Tm queue FSM function which is executed when an error
+ *        is encountered during FSM processing.
+ *
+ * @param p_tm_queue_inst     Pointer to a tm_queue instance
+ * @param msg              Pointer to a BAL message received from one of
+ *                         the BAL apps.
+ * @param p_event          Pointer to a tm_queue event structure
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+static bcmos_errno tm_queue_fsm_state_err(tm_queue_inst *p_tm_queue_inst,
+                                      void *msg,
+                                      tm_queue_fsm_event *p_event)
+{
+    bcmos_errno ret = BCM_ERR_INVALID_OP;
+
+    BCM_LOG(DEBUG, log_id_tm_queue,
+            "Error encountered processing TM_queue FSM"
+            " - BAD EVENT ()\n");
+
+    return ret;
+}
+
+
+/*****************************************************************************/
+/**
+ * @brief A function to initialize the Tm Queue FSM infrastructure.
+ *
+ *        NOTE: This is called once on startup and NOT for each FSM instance.
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+bcmos_errno tm_queue_fsm_init(void)
+{
+    int ii;
+    tm_queue_inst *new_entry;
+    bcmos_errno ret = BCM_ERR_OK;
+
+#ifdef ENABLE_LOG
+    log_id_tm_queue = bcm_dev_log_id_register("TM_QUEUE", DEV_LOG_LEVEL_INFO, DEV_LOG_ID_TYPE_BOTH);
+    BUG_ON(log_id_tm_queue == DEV_LOG_INVALID_ID);
+#endif
+
+    /* Initialize all of the tm_queue queues */
+    TAILQ_INIT(&TM_QUEUE_FSM_TM_QUEUE_LIST_CTX_PTR->free_tm_queue_list);
+    TAILQ_INIT(&TM_QUEUE_FSM_TM_QUEUE_LIST_CTX_PTR->active_tm_queue_list);
+
+    /* Populate the free list with it's initial set of tm_queues
+     */
+    for(ii=0; ii<TM_QUEUE_ALLOCATION_BLOCK_SIZE; ii++)
+    {
+        new_entry = bcmos_calloc(sizeof(tm_queue_inst));
+        if(NULL == new_entry)
+        {
+            BCM_LOG(FATAL, log_id_tm_queue,  "Failed to initialize the tm_queue free list - FATAL\n");
+            ret = BCM_ERR_NOMEM;
+            break;
+        }
+       tm_queue_free_by_entry(new_entry);
+    }
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief A function to un-initialize the Tm Queue FSM infrastructure.
+ *
+ *        NOTE: This is called once on shutdown and NOT for each FSM instance.
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+bcmos_errno tm_queue_fsm_finish(void)
+{
+
+    tm_queue_inst *current_entry, *p_temp_entry;
+
+    /* Free all the entries on the active list */
+    TAILQ_FOREACH_SAFE(current_entry,
+                       &TM_QUEUE_FSM_TM_QUEUE_LIST_CTX_PTR->active_tm_queue_list,
+                       tm_queue_inst_next,
+                       p_temp_entry)
+    {
+        /* Remove it from the active list */
+        TAILQ_REMOVE(&TM_QUEUE_FSM_TM_QUEUE_LIST_CTX_PTR->active_tm_queue_list, current_entry, tm_queue_inst_next);
+
+        bcmos_free(current_entry);
+
+    }
+
+    /* Free all the entries on the free list */
+    TAILQ_FOREACH_SAFE(current_entry,
+                       &TM_QUEUE_FSM_TM_QUEUE_LIST_CTX_PTR->free_tm_queue_list,
+                       tm_queue_inst_next,
+                       p_temp_entry)
+    {
+        /* Remove it from the active list */
+        TAILQ_REMOVE(&TM_QUEUE_FSM_TM_QUEUE_LIST_CTX_PTR->free_tm_queue_list, current_entry, tm_queue_inst_next);
+
+        bcmos_free(current_entry);
+    }
+
+    return BCM_ERR_OK;
+}
+
+static void tm_queue_inst_entry_obj_init(tm_queue_inst *p_entry)
+{
+    /* The actual key content is irrelevant for free tm_queues */
+    bcmbal_tm_queue_key key = { .id = 0, .sched_id = 0, .sched_dir = BCMBAL_TM_SCHED_DIR_US};
+
+    /* And add it to the free list */
+    p_entry->fsm_state = TM_QUEUE_FSM_STATE_NULL;
+
+    BCMBAL_CFG_INIT(&p_entry->current_tm_queue_info,
+                    tm_queue,
+                    key);
+
+    BCMBAL_OBJ_IN_PROGRESS_SET(&(p_entry->current_tm_queue_info), BCMOS_FALSE);
+}
+/*****************************************************************************/
+/**
+ * @brief A function to free a tm_queue instance specified by a the supplied
+ *        entry pointer.
+ *
+ * @param p_entry A pointer to the entry to be freed
+ *
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+static bcmos_errno tm_queue_free_by_entry(tm_queue_inst *p_entry)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    tm_queue_inst *current_entry;
+    tm_queue_inst *p_temp_entry;
+
+    /*
+     * First, check the active list (an active tm_queue can be in the adding or removing state)
+     */
+    TAILQ_FOREACH_SAFE(current_entry,
+                       &TM_QUEUE_FSM_TM_QUEUE_LIST_CTX_PTR->active_tm_queue_list,
+                       tm_queue_inst_next,
+                       p_temp_entry)
+    {
+        if(current_entry == p_entry)
+        {
+           /* Remove it from the active list */
+            TAILQ_REMOVE(&TM_QUEUE_FSM_TM_QUEUE_LIST_CTX_PTR->active_tm_queue_list, current_entry, tm_queue_inst_next);
+            break;
+        }
+    }
+	tm_queue_inst_entry_obj_init(p_entry);
+    TAILQ_INSERT_TAIL(&TM_QUEUE_FSM_TM_QUEUE_LIST_CTX_PTR->free_tm_queue_list, p_entry, tm_queue_inst_next);
+
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The Tm queue FSM state processing executive function
+ * @param p_tm_queue_inst  Pointer to a tm_queu instance
+ * @param p_event      Pointer to a tm_Queue event structure
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+static bcmos_errno tm_queue_fsm_exec(tm_queue_inst *p_tm_queue_inst, tm_queue_fsm_event *p_event)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    tm_queue_fsm_state pre_state;
+    tm_queue_fsm_state_processor tm_queue_state_processor;
+
+    /* Parameter checks */
+    BUG_ON(NULL == p_tm_queue_inst);
+    BUG_ON(NULL == p_event);
+
+    /* Record the present state for debug printing
+     */
+    pre_state = p_tm_queue_inst->fsm_state;
+
+    /*
+     * Get the state processing function
+     */
+    tm_queue_state_processor = tm_queue_states[p_tm_queue_inst->fsm_state][p_event->event_type];
+
+    /*
+     * If there's a state processing function for this event and state, execute it.
+     * Otherwise, process a generic error.
+     */
+    if(tm_queue_state_processor)
+    {
+        ret = tm_queue_state_processor(p_tm_queue_inst, p_event->msg, p_event);
+    } 
+	else
+    {
+        tm_queue_fsm_state_err(p_tm_queue_inst, p_event->msg, p_event);
+    }
+
+    if(BCM_ERR_OK != ret)
+    {
+        BCM_LOG(ERROR, log_id_tm_queue, "*** Error detected during state processing\n");
+        p_tm_queue_inst->fsm_state = pre_state;
+    }
+
+    BCM_LOG(DEBUG, log_id_tm_queue,  "*** Event %s, State: %s --> %s\n\n",
+            tm_queue_event_name_get(p_event->event_type),
+            tm_queue_state_name_get(pre_state),
+            tm_queue_state_name_get(p_tm_queue_inst->fsm_state));
+
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief A function to retrieve a tm_queue instance of the specified class.
+ *
+ * @param key            A pointer to the key of the tm_queue being referenced
+ * @param search_flag    A flag specifying the type of tm_queue
+ *                       instance to be retrieved
+ *
+ * @returns tm_queue_inst_t* A pointer to the found tm_queue instance,
+ *                       or NULL if one is not found
+ *****************************************************************************/
+tm_queue_inst *tm_queue_inst_get(bcmbal_tm_queue_key key, tm_queue_flag search_flag)
+{
+    tm_queue_inst *current_entry = NULL;
+
+    /*
+     * First, check the active list if the caller has chosen to do so
+     */
+    if(TM_QUEUE_FLAG_ACTIVE & search_flag)
+    {
+        TAILQ_FOREACH(current_entry,
+                      &TM_QUEUE_FSM_TM_QUEUE_LIST_CTX_PTR->active_tm_queue_list,
+                      tm_queue_inst_next)
+        {
+
+            if(current_entry->api_req_tm_queue_info.key.id == key.id
+				&& current_entry->api_req_tm_queue_info.key.sched_id == key.sched_id
+                && current_entry->api_req_tm_queue_info.key.sched_dir == key.sched_dir)
+            {
+                BCM_LOG(DEBUG, log_id_tm_queue,  "Found active tm_queue\n");
+                /* The tm_queue instance pointer is in current_entry */
+                break;
+            }
+        }
+    }
+    /*
+     * Next, check the free list if the caller has chosen to do so
+     */
+    if((TM_QUEUE_FLAG_FREE & search_flag) && (NULL == current_entry))
+    {
+        /* Now check the free list */
+        if(!TAILQ_EMPTY(&TM_QUEUE_FSM_TM_QUEUE_LIST_CTX_PTR->free_tm_queue_list))
+        {
+            /* Just grab the first entry */
+            current_entry = TAILQ_FIRST(&TM_QUEUE_FSM_TM_QUEUE_LIST_CTX_PTR->free_tm_queue_list);
+
+            /* Remove it from the free list */
+            TAILQ_REMOVE(&TM_QUEUE_FSM_TM_QUEUE_LIST_CTX_PTR->free_tm_queue_list, current_entry, tm_queue_inst_next);
+
+            /* And add it to the active list */
+            TAILQ_INSERT_TAIL(&TM_QUEUE_FSM_TM_QUEUE_LIST_CTX_PTR->active_tm_queue_list, current_entry, tm_queue_inst_next);
+
+            /*
+             * Initialize the fsm state
+             */
+            current_entry->fsm_state = TM_QUEUE_FSM_STATE_NULL;
+
+            BCM_LOG(DEBUG, log_id_tm_queue,  "Using new tm_queue\n");
+        }
+    }
+
+    if((TM_QUEUE_FLAG_ANY & search_flag) && (NULL == current_entry))
+    {
+        /*A tm_queue was not found on either list*/
+
+        BCM_LOG(DEBUG, log_id_tm_queue,  "************** ERROR: no tm_queue found\n");
+    }
+
+    return current_entry;
+}
+
+static bcmos_errno bcmbal_tm_queue_validate(bcmbal_tm_queue_cfg *p_tm_queue_cfg)
+{
+    bcmos_errno  ret = BCM_ERR_OK;
+    bcmbal_tm_sched_key tm_sched_key = {.id = p_tm_queue_cfg->key.sched_id, .dir = p_tm_queue_cfg->key.sched_dir};
+    tm_sched_inst *p_tm_sched_inst = NULL;
+    do
+    {
+        /*get the tm sched instance*/
+        p_tm_sched_inst = tm_sched_inst_get(tm_sched_key, TM_SCHED_FLAG_ACTIVE);
+        if(NULL == p_tm_sched_inst)
+        {
+            BCM_LOG(ERROR, log_id_tm_queue,  "ERROR: no related tm_sched found (id = %d dir = %s)\n",
+                                               tm_sched_key.id, TM_SCHED_DIR_TO_STR(tm_sched_key.dir));
+            ret = BCM_ERR_NOENT;
+            break;
+        }
+        /*check it is not an agg port tm sched - as there are no queues to such node*/      
+        if(BCMBAL_CFG_PROP_IS_SET(&p_tm_sched_inst->req_tm_sched_info, tm_sched, owner))
+		{
+            if(BCMBAL_TM_SCHED_OWNER_TYPE_AGG_PORT == p_tm_sched_inst->req_tm_sched_info.data.owner.type)
+            {
+                BCM_LOG(ERROR, log_id_tm_queue,  "ERROR: should not attach queue to node which is owned by agg port (id = %d dir = %s)\n",
+                                                   tm_sched_key.id, TM_SCHED_DIR_TO_STR(tm_sched_key.dir));
+                ret = BCM_ERR_PARM;
+                break;
+            }				
+		}
+
+        /*sched level should be 'queue'*/
+        if(BCMBAL_TM_SCHED_CHILD_TYPE_QUEUE != p_tm_sched_inst->req_tm_sched_info.data.sched_child_type)		
+        {
+            BCM_LOG(ERROR, log_id_tm_queue,  "ERROR: tm sched sched level is invalid (%d), should be BCMBAL_TM_SCHED_CHILD_TYPE_QUEUE\n",
+                    p_tm_sched_inst->req_tm_sched_info.data.sched_child_type);
+            ret = BCM_ERR_PARM;
+            break;
+        }
+
+        /*based on sched type, check priority / weight is set and is valid */
+        if(BCMBAL_TM_SCHED_TYPE_SP == p_tm_sched_inst->req_tm_sched_info.data.sched_type)
+        {
+            if(!BCMBAL_CFG_PROP_IS_SET(p_tm_queue_cfg, tm_queue, priority))
+            {
+                BCM_LOG(ERROR, log_id_tm_queue, "Queue must be set with a priority, as its scheduler' sched_type is sp\n");
+                ret = BCM_ERR_PARM;
+                break;
+            }
+            if(BCMBAL_CFG_PROP_IS_SET(p_tm_queue_cfg, tm_queue, weight))
+            {
+                BCM_LOG(ERROR, log_id_tm_queue, "Queue can not be set with a weight, as its scheduler' sched_type is sp\n");
+                ret = BCM_ERR_PARM;
+                break;
+            }
+            if(p_tm_queue_cfg->data.priority >= p_tm_sched_inst->req_tm_sched_info.data.num_priorities)
+            {
+                BCM_LOG(ERROR, log_id_tm_queue, "Queue priority (%d) is higher than the allowed at parent scheduler (id = %d dir = %s num of priorities = %d )\n",
+                        p_tm_queue_cfg->data.priority , tm_sched_key.id, TM_SCHED_DIR_TO_STR(tm_sched_key.dir),
+                        p_tm_sched_inst->req_tm_sched_info.data.num_priorities);
+                
+                ret = BCM_ERR_PARM;
+                break;
+            }
+        }     
+        else
+            if(BCMBAL_TM_SCHED_TYPE_WFQ == p_tm_sched_inst->req_tm_sched_info.data.sched_type)
+            {
+                if(!BCMBAL_CFG_PROP_IS_SET(p_tm_queue_cfg, tm_queue, weight))
+                {
+                    BCM_LOG(ERROR, log_id_tm_queue, "Queue must be set with a weight, as its scheduler' sched_type sched_type is wfq\n");
+                    ret = BCM_ERR_PARM;
+                    break;
+                }
+                if(BCMBAL_CFG_PROP_IS_SET(p_tm_queue_cfg, tm_queue, priority))
+                {
+                    BCM_LOG(ERROR, log_id_tm_queue, "Queue can not be set with a priority, as its scheduler' sched_type sched_type is wfq \n");
+                    ret = BCM_ERR_PARM;
+                    break;
+                }
+            }
+        else
+            if(BCMBAL_TM_SCHED_TYPE_SP_WFQ == p_tm_sched_inst->req_tm_sched_info.data.sched_type)
+            {
+                if(BCMBAL_CFG_PROP_IS_SET(p_tm_queue_cfg, tm_queue, priority)
+                    && BCMBAL_CFG_PROP_IS_SET(p_tm_queue_cfg, tm_queue, weight))
+                {
+                    BCM_LOG(ERROR, log_id_tm_queue, "Queue must be set with either weight or priority, not both. as its scheduler' sched_type is sp_wfq\n");
+                    ret = BCM_ERR_PARM;
+                    break;
+                }        
+                if(!BCMBAL_CFG_PROP_IS_SET(p_tm_queue_cfg, tm_queue, priority)
+                    && !BCMBAL_CFG_PROP_IS_SET(p_tm_queue_cfg, tm_queue, weight))
+                {
+                    BCM_LOG(ERROR, log_id_tm_queue, "Queue must be set with either weight or priority, as its scheduler' sched_type is sp_wfq\n");
+                    ret = BCM_ERR_PARM;
+                    break;
+                }
+            }
+        }while(0);
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief A function called by the core worker thread to process an
+ *        tm_queue object message (SET, GET, CLEAR, STATS) received
+ *        from the BAL Public API.
+ *
+ * @param msg_payload      Pointer to a BAL message received from the
+ *                         BAL Public API.
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+bcmos_errno process_tm_queue_object(void *msg_payload)
+{
+    bcmos_errno ret = BCM_ERR_OK;	
+    bcmbal_tm_queue_cfg *p_tm_queue_cfg = (bcmbal_tm_queue_cfg *)msg_payload;
+    tm_queue_inst *p_tm_queue_inst = NULL;
+    tm_queue_fsm_event fsm_event;
+    bcmbal_tm_queue_key tm_queue_key;
+    bcmbal_obj_msg_type oper_type;
+    bcmbal_tm_sched_key tm_sched_key;    
+    tm_sched_inst *p_tm_sched_inst = NULL;
+    bcmbal_interface_key intf_key;
+    bcmbal_tm_sched_owner owner;
+	
+    BUG_ON(NULL == msg_payload);
+    
+    BCM_LOG(DEBUG, log_id_tm_queue,  "Processing a tm queue object\n");
+    
+    tm_queue_key = p_tm_queue_cfg->key;   
+    oper_type = p_tm_queue_cfg->hdr.hdr.type;
+    
+    /*
+    * A message pointer may be passed inside the event structure.
+    */
+    fsm_event.msg = msg_payload;
+    
+    /* SET or GET or CLEAR...? */
+    switch(oper_type)
+    {
+        case(BCMBAL_OBJ_MSG_TYPE_SET):
+        {
+            do
+            {
+                BCM_LOG(DEBUG, log_id_tm_queue,  "Processing a tm queue SET REQ mgmt message\n");
+                if(BCMBAL_STATUS_UP != acc_term_status_get())
+                {
+                    BCM_LOG(ERROR, log_id_tm_queue, "ERROR - Access-terminal is not UP. No further processing\n");
+                    ret = BCM_ERR_STATE;
+                    break;
+                }
+
+                /*Find the specified tm_queue instance is already created */
+                p_tm_queue_inst = tm_queue_inst_get(tm_queue_key, TM_QUEUE_FLAG_ACTIVE);
+				
+                if(NULL != p_tm_queue_inst)
+                {
+                    /* This is a fatal error condition */
+                    BCM_LOG(ERROR, log_id_tm_queue,
+                        "ERROR - tm queue found.  Set after create is currently not supported. No further processing\n");
+                    ret = BCM_ERR_NOT_SUPPORTED;
+                    break;
+                }
+				
+                p_tm_queue_inst = tm_queue_inst_get(tm_queue_key, TM_QUEUE_FLAG_FREE);
+                if(NULL == p_tm_queue_inst )
+                {
+                    /* This is a fatal error condition */
+                    BCM_LOG(ERROR, log_id_tm_queue,
+                        "ERROR - tm queue not found.  No further processing\n");
+                    ret = BCM_ERR_NOMEM;
+                    break;
+                }
+				if(BCM_ERR_OK != (ret = bcmbal_tm_queue_validate(p_tm_queue_cfg)))
+								  {
+									  BCM_LOG(ERROR, log_id_tm_queue, "tm_queue fsm validation Failed (%d)\n", ret);
+									  tm_queue_free_by_entry(p_tm_queue_inst);
+									  break;
+								  }
+								  
+								  
+								  /* Perform the validation check(s) that the utils require */
+								  if(BCM_ERR_OK != (ret = sw_util_tm_queue_validate(p_tm_queue_cfg)))
+								  {
+									  BCM_LOG(ERROR, log_id_tm_queue, "tm_queue switch validation Failed (%d)\n", ret);
+									  tm_queue_free_by_entry(p_tm_queue_inst);
+									  break;
+								  }
+
+				
+
+				BCM_LOG(DEBUG, log_id_tm_queue,
+					"Creating a new tm queue\n");
+			
+            }while(0);
+			
+            ret = mgmt_msg_send_balapi_rsp(ret, msg_payload, oper_type, log_id_tm_queue);
+            
+            if(BCM_ERR_OK != ret )
+            {
+                break;
+            }
+			
+            BCMBAL_CFG_PROP_SET(p_tm_queue_cfg, tm_queue, creation_mode, BCMBAL_TM_CREATION_MODE_MANUAL);
+            
+            bcmbal_tm_queue_object_overlay(&p_tm_queue_inst->api_req_tm_queue_info, p_tm_queue_cfg);
+            
+            fsm_event.event_type = TM_QUEUE_FSM_EVENT_TYPE_CREATE;
+            fsm_event.msg = msg_payload;
+            ret = tm_queue_fsm_exec(p_tm_queue_inst,&fsm_event);
+        }
+        break;
+		
+        case(BCMBAL_OBJ_MSG_TYPE_GET):
+        {        
+            BCM_LOG(DEBUG, log_id_tm_queue,  "Processing a tm queue GET REQ mgmt message\n");
+            if(BCMBAL_STATUS_UP != acc_term_status_get())
+            {
+                BCM_LOG(ERROR, log_id_tm_queue, "ERROR - Access-terminal is not UP.  No further processing\n");
+                ret = BCM_ERR_STATE;
+            }
+            else
+            {
+            /* Find the specified tm_queue instance */
+                p_tm_queue_inst = tm_queue_inst_get(tm_queue_key, TM_QUEUE_FLAG_ACTIVE);
+            }
+            
+            if(NULL == p_tm_queue_inst)
+            {
+                BCM_LOG(ERROR, log_id_tm_queue,  "ERROR - Specified tm_queue (%d) not found\n", tm_queue_key.id);
+                ret =  BCM_ERR_NOENT;
+                
+           	}
+            else
+            {
+                /* We respond to the BAL public API backend with a result. We always
+                            * send a complete msg_payload back to the API, but the data portion
+                            * of the object is only relevant when a GET or GET-STATS has been requested */
+                p_tm_queue_inst->api_req_tm_queue_info.hdr.hdr.comm_hdr = ((bcmbal_obj *)msg_payload)->comm_hdr;
+                *((bcmbal_tm_queue_cfg *)msg_payload) = p_tm_queue_inst->api_req_tm_queue_info;
+            }            
+            mgmt_msg_send_balapi_rsp(ret, msg_payload, oper_type, log_id_tm_queue);
+        }
+        break;
+        
+        case(BCMBAL_OBJ_MSG_TYPE_CLEAR):
+        {
+            do
+            {
+                BCM_LOG(DEBUG, log_id_tm_queue,  "Processing a tm queue CLEAR REQ mgmt message\n");
+                if(BCMBAL_STATUS_UP != acc_term_status_get())
+                {
+                    BCM_LOG(ERROR, log_id_tm_queue, "ERROR - Access-terminal is not UP.  No further processing\n");
+                    ret = BCM_ERR_STATE;
+                    break;
+                }
+                /*
+                * Find the specified tm_queue instance
+                */
+                p_tm_queue_inst = tm_queue_inst_get(tm_queue_key, TM_QUEUE_FLAG_ACTIVE);
+                
+                if(NULL == p_tm_queue_inst)
+                {
+                    BCM_LOG(ERROR, log_id_tm_queue, "Specified tm_queue not found on CLEAR\n");
+                    ret = BCM_ERR_NOENT;
+                    break;                
+                }
+				
+
+                if(TM_QUEUE_FSM_STATE_IN_USE == p_tm_queue_inst->fsm_state)
+                {
+                    BCM_LOG(ERROR, log_id_tm_queue, "Specified tm_queue is in use and can not be removed\n");
+                    ret = BCM_ERR_PARM;
+                    break;
+                }
+
+				/*TM_QUEUEs (either auto or manually created) that are associated with a TM_NODE with owner interface 
+				may only be deleted when the associated interface is in the ADMIN-DOWN state*/
+			    tm_sched_key.id = tm_queue_key.sched_id;
+				tm_sched_key.dir = tm_queue_key.sched_dir;
+				
+				p_tm_sched_inst = tm_sched_inst_get(tm_sched_key, TM_SCHED_FLAG_ACTIVE);
+				if(NULL == p_tm_sched_inst)
+                {
+					BCM_LOG(ERROR, log_id_tm_queue,  "ERROR: no related tm_sched found (id = %d dir = %s)\n",
+													   tm_sched_key.id, TM_SCHED_DIR_TO_STR(tm_sched_key.dir));
+					ret = BCM_ERR_NOENT;
+                    break;
+                }
+				if(BCMBAL_CFG_PROP_IS_SET(&(p_tm_sched_inst->req_tm_sched_info), tm_sched, owner))
+				{
+					owner = p_tm_sched_inst->req_tm_sched_info.data.owner;
+					switch(owner.type)
+					{
+                        case BCMBAL_TM_SCHED_OWNER_TYPE_INTERFACE:
+                        {
+							intf_key.intf_type = owner.u.interface.intf_type;
+							intf_key.intf_id = owner.u.interface.intf_id;
+							if(BCMBAL_STATUS_DOWN != bcmbal_interface_status_get(intf_key))
+							{
+								BCM_LOG(ERROR, log_id_tm_queue, "Specified tm_queue is attached to sched that is owned by interface that is not admin down, and can be removed only when the associated interface is in the ADMIN-DOWN state\n");
+								ret = BCM_ERR_PARM;
+								break;	   
+							}		
+                       	}
+						break;
+
+						default:
+							break;
+					}
+				}
+
+                /*generate destroy event*/
+                
+                fsm_event.event_type = TM_QUEUE_FSM_EVENT_TYPE_DESTROY;
+                fsm_event.msg = msg_payload;
+                ret = tm_queue_fsm_exec(p_tm_queue_inst,&fsm_event);
+                
+            }while(0);
+            mgmt_msg_send_balapi_rsp(ret, msg_payload, oper_type, log_id_tm_queue);			
+        }
+        break;
+
+        default:
+        {
+            BCM_LOG(ERROR, log_id_tm_queue,  "Unsupported operation on tm queue object (%d)\n", oper_type );
+            ret = BCM_ERR_NOT_SUPPORTED;
+            
+            /* We respond to the BAL public API backend with a result. We always
+            * send a complete msg_payload back to the API, but the data portion
+            * of the object is only relevant when a GET or GET-STATS has been requested.
+            */
+            mgmt_msg_send_balapi_rsp(ret, msg_payload, oper_type, log_id_tm_queue);
+        }
+    }
+    
+    BCM_LOG(DEBUG, log_id_tm_queue, "%s returns\n", __FUNCTION__);
+    return ret;
+
+}
+
+bcmos_errno bcmbal_tm_queue_auto_create(bcmbal_tm_queue_cfg cfg)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    tm_queue_inst *p_tm_queue_inst = NULL;
+    do
+    {
+        /*Find a free tm_queue instance */
+        p_tm_queue_inst = tm_queue_inst_get(cfg.key, TM_QUEUE_FLAG_FREE);
+        if(NULL == p_tm_queue_inst)
+        {
+            /* This is a fatal error condition*/
+            BCM_LOG(ERROR, log_id_tm_queue,"ERROR - tm queue not found.  No further processing\n");
+            ret = BCM_ERR_NOMEM;
+            break;
+        }
+        p_tm_queue_inst->api_req_tm_queue_info = cfg;
+        ret = bcmbal_tm_queue_create(p_tm_queue_inst,NULL, NULL);
+    }while(0);
+    return ret;
+}
+
+bcmos_errno bcmbal_tm_queue_activate(tm_queue_inst *p_tm_queue_inst)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    do
+    {
+
+        ret = sw_util_tm_queue_set(p_tm_queue_inst);
+        if(BCM_ERR_OK != ret)
+        {
+            BCM_LOG(ERROR, log_id_tm_queue, "queue	could not be set by switch\n");
+            break;
+        }
+
+        p_tm_queue_inst->fsm_state = TM_QUEUE_FSM_STATE_ACTIVE; 
+        /* The hardware has properly accepted the object info, so the request object becomes
+        * the current state.
+        */
+        bcmbal_tm_queue_object_overlay(&p_tm_queue_inst->current_tm_queue_info,
+            &p_tm_queue_inst->api_req_tm_queue_info);
+    
+    }while(0);
+    return ret;
+
+}
+
+bcmos_errno bcmbal_tm_queue_deactivate(tm_queue_inst *p_tm_queue_inst)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    
+    BUG_ON(NULL == p_tm_queue_inst);
+    
+    do
+    {
+        ret = sw_util_tm_queue_clear(p_tm_queue_inst);
+        if(BCM_ERR_OK != ret)
+        {
+            BCM_LOG(ERROR, log_id_tm_queue, "queue	could not be set by switch\n");
+            break;
+        }
+        p_tm_queue_inst->fsm_state = TM_QUEUE_FSM_STATE_INACTIVE;     
+    }while(0);
+    return ret;
+
+}
+static bcmos_errno bcmbal_tm_queue_create(tm_queue_inst *p_tm_queue_inst, 
+										   void *msg, 
+										   tm_queue_fsm_event *p_event)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    do
+    {
+        p_tm_queue_inst->fsm_state = TM_QUEUE_FSM_STATE_INACTIVE;
+
+        /*referenced tm sched exist for sure as it was already validated*/
+        ret = bcmbal_tm_sched_set_queue(p_tm_queue_inst);        
+        if(BCM_ERR_OK != ret)
+        {
+            BCM_LOG(ERROR, log_id_tm_queue, "queue  could not be attched to node \n");
+            break;
+        }
+    }while(0);
+    return ret;
+
+}
+
+bcmos_errno bcmbal_tm_queue_set_owner(bcmbal_tm_queue_key key)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    tm_queue_inst *p_tm_queue_inst;
+    do
+    {
+        p_tm_queue_inst = tm_queue_inst_get(key,TM_QUEUE_FLAG_ACTIVE);
+        if(NULL == p_tm_queue_inst)
+        {
+            BCM_LOG(ERROR, log_id_tm_queue,"ERROR - tm queue not found.  No further processing\n");
+            ret = BCM_ERR_NOENT;
+            break;
+        }
+        ret = bcmbal_tm_queue_activate(p_tm_queue_inst);
+    }while(0);
+    return ret;
+}
+
+bcmos_errno bcmbal_tm_queue_unset_owner(bcmbal_tm_queue_key key)
+{
+    bcmos_errno ret = BCM_ERR_OK;    
+    tm_queue_inst *p_tm_queue_inst;
+    do
+    {
+        p_tm_queue_inst = tm_queue_inst_get(key,TM_QUEUE_FLAG_ACTIVE);
+        if(NULL == p_tm_queue_inst)
+        {
+            BCM_LOG(ERROR, log_id_tm_queue,"ERROR - tm queue not found.  No further processing\n");
+            ret = BCM_ERR_NOENT;
+            break;
+        }
+        ret = bcmbal_tm_queue_deactivate(p_tm_queue_inst);
+    
+    }while(0);
+    
+    return ret;
+}
+
+bcmos_errno bcmbal_tm_queue_use_set(tm_queue_inst *p_tm_queue_inst, bcmos_bool is_in_use)
+{
+    bcmos_errno  ret = BCM_ERR_OK;
+    
+    BUG_ON(NULL == p_tm_queue_inst);
+    if(is_in_use)
+    {
+        /*queue might already in requested state*/
+        p_tm_queue_inst->fsm_state = TM_QUEUE_FSM_STATE_IN_USE;
+        p_tm_queue_inst->api_req_tm_queue_info.data.ref_count++;
+    }    
+    else
+    {
+        if(p_tm_queue_inst->api_req_tm_queue_info.data.ref_count)
+        {
+            p_tm_queue_inst->api_req_tm_queue_info.data.ref_count--;
+            
+            if(0 == p_tm_queue_inst->api_req_tm_queue_info.data.ref_count)
+            {
+                p_tm_queue_inst->fsm_state = TM_QUEUE_FSM_STATE_ACTIVE;		
+            }
+        }
+        else
+        {
+            BCM_LOG(ERROR, log_id_tm_queue, "queue (sched.id = %d sched.dir = %s queue.id = %d) could not be unset as no flows assign to it \n", p_tm_queue_inst->api_req_tm_queue_info.key.sched_id, TM_SCHED_DIR_TO_STR(p_tm_queue_inst->api_req_tm_queue_info.key.sched_dir), p_tm_queue_inst->api_req_tm_queue_info.key.id);
+            ret = BCM_ERR_INTERNAL;
+        }
+    }
+    return ret;
+}
+
+bcmos_errno bcmbal_tm_queue_destroy(tm_queue_inst *p_tm_queue_inst, bcmos_bool remove_from_node)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    do
+    {
+        p_tm_queue_inst->fsm_state = TM_QUEUE_FSM_STATE_DELETING;
+        if(remove_from_node)
+        {
+            ret = bcmbal_tm_sched_remove_queue(p_tm_queue_inst);
+            if(BCM_ERR_OK != ret)
+            {
+                BCM_LOG(ERROR, log_id_tm_queue, "queue could not be cleaared from its tm sched\n");
+            break;
+            }
+        }	
+        ret = tm_queue_free_by_entry(p_tm_queue_inst);
+    }while(0);
+    return ret;
+}
+
+static bcmos_errno bcmbal_tm_queue_inactive_destroy(tm_queue_inst *p_tm_queue_inst, 
+										   void *msg, 
+										   tm_queue_fsm_event *p_event)
+{
+    return bcmbal_tm_queue_destroy(p_tm_queue_inst, BCMOS_TRUE);
+}
+
+static bcmos_errno bcmbal_tm_queue_active_destroy(tm_queue_inst *p_tm_queue_inst, 
+										   void *msg, 
+										   tm_queue_fsm_event *p_event)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    do
+    {
+        p_tm_queue_inst->fsm_state = TM_QUEUE_FSM_STATE_DELETING;
+        ret = sw_util_tm_queue_clear(p_tm_queue_inst);
+        if(BCM_ERR_OK != ret)
+        {
+            BCM_LOG(ERROR, log_id_tm_queue, "queue could not be cleaared from the switch\n");
+            break;
+        }
+        ret = bcmbal_tm_queue_inactive_destroy(p_tm_queue_inst, msg, p_event);
+    }while(0);
+    return ret;
+}
+/*@}*/
diff --git a/bal_release/src/core/main/tm_queue_fsm.h b/bal_release/src/core/main/tm_queue_fsm.h
new file mode 100755
index 0000000..1240cf1
--- /dev/null
+++ b/bal_release/src/core/main/tm_queue_fsm.h
@@ -0,0 +1,139 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file tm_queue_fsm.h
+ * @brief Code to support the BAL tm_queue FSM
+ *
+ */
+
+#ifndef TM_QUEUE_FSM_H
+#define TM_QUEUE_FSM_H
+
+/*@{*/
+
+#include <bcmos_system.h>
+#include <bal_api.h>
+
+/* set the total pool size of available tm queue to 4k */
+#define TM_QUEUE_ALLOCATION_BLOCK_SIZE  (4096)
+
+typedef enum
+{
+    TM_QUEUE_FSM_EVENT_TYPE_NONE       = -1,
+    TM_QUEUE_FSM_EVENT_TYPE_CREATE     ,
+    TM_QUEUE_FSM_EVENT_TYPE_DESTROY    ,
+    TM_QUEUE_FSM_EVENT_TYPE_UTIL_MSG   ,
+
+    TM_QUEUE_FSM_EVENT_TYPE__LAST,
+    TM_QUEUE_FSM_EVENT_TYPE__NUM_OF
+} tm_queue_fsm_event_type;
+
+
+
+typedef enum
+{
+    TM_QUEUE_FSM_STATE_NONE =     -1,
+    TM_QUEUE_FSM_STATE_NULL         ,
+    TM_QUEUE_FSM_STATE_INACTIVE     ,
+    TM_QUEUE_FSM_STATE_ACTIVE       ,
+    TM_QUEUE_FSM_STATE_IN_USE       ,
+    TM_QUEUE_FSM_STATE_DELETING     ,
+ 
+    TM_QUEUE_FSM_STATE__LAST,
+    TM_QUEUE_FSM_STATE__NUM_OF
+} tm_queue_fsm_state;
+
+
+typedef enum
+{
+    TM_QUEUE_FLAG_ACTIVE =     1<<0,    /**< A tm_queue is on the active list */
+    TM_QUEUE_FLAG_FREE =       1<<1,    /**< A tm_queue is on the free list */
+    TM_QUEUE_FLAG_ANY =        (TM_QUEUE_FLAG_ACTIVE | TM_QUEUE_FLAG_FREE),    /**< A tm_queue is on either the active or free list */
+} tm_queue_flag;
+
+
+typedef struct tm_queue_fsm_event_t
+{
+    tm_queue_fsm_event_type event_type;   /**< The tm_queue fsm events */
+    void             *msg;
+
+    /* other necessary information */
+} tm_queue_fsm_event;
+
+
+typedef struct tm_queue_inst tm_queue_inst;
+struct tm_queue_inst
+{
+    bcmbal_tm_queue_cfg    current_tm_queue_info;   /**< The current information for this tm queue (used for GET) */
+    bcmbal_tm_queue_cfg    api_req_tm_queue_info;   /**< The tm queue  object info received from the Public API */
+    tm_queue_fsm_state     fsm_state;          /**< The tm queue FSM state */
+
+    TAILQ_ENTRY(tm_queue_inst) tm_queue_inst_next; /**< TAILQ link */
+};
+
+
+/* 
+ * tm_queue FSM data structures
+ */
+typedef struct tm_queue_fsm_ctx
+{
+    /* Lists of free tm_queue entries and active tm_queue entries
+     */
+    TAILQ_HEAD(free_tm_queue_list_head, tm_queue_inst) free_tm_queue_list;
+
+    TAILQ_HEAD(active_tm_queue_list_head, tm_queue_inst) active_tm_queue_list;
+
+} tm_queue_fsm_ctx;
+
+
+/* Function declarations */
+
+extern bcmos_errno tm_queue_fsm_init(void);
+extern bcmos_errno tm_queue_fsm_finish(void);
+extern bcmos_errno process_tm_queue_object(void *msg_payload);
+
+extern tm_queue_inst *tm_queue_inst_get(bcmbal_tm_queue_key key, tm_queue_flag search_flag);
+extern bcmos_errno bcmbal_tm_queue_auto_create(bcmbal_tm_queue_cfg tm_queue_default_cfg);
+extern bcmos_errno bcmbal_tm_queue_set_owner(bcmbal_tm_queue_key key);
+extern bcmos_errno bcmbal_tm_queue_unset_owner(bcmbal_tm_queue_key key);
+
+extern bcmos_errno bcmbal_tm_queue_activate(tm_queue_inst *p_tm_queue_inst);
+extern bcmos_errno bcmbal_tm_queue_deactivate(tm_queue_inst *p_tm_queue_inst);
+extern bcmos_errno bcmbal_tm_queue_use_set(tm_queue_inst *p_tm_queue_inst, bcmos_bool is_in_use);
+extern bcmos_errno bcmbal_tm_queue_destroy(tm_queue_inst *p_tm_queue_inst, bcmos_bool remove_from_node);
+
+
+
+/*@}*/
+
+#endif /*TM_QUEUE_FSM_H */
+
diff --git a/bal_release/src/core/main/tm_sched_fsm.c b/bal_release/src/core/main/tm_sched_fsm.c
new file mode 100644
index 0000000..50424cb
--- /dev/null
+++ b/bal_release/src/core/main/tm_sched_fsm.c
@@ -0,0 +1,2229 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file tm_sched_fsm.c
+ * @brief Code to support the BAL tm_sched FSM
+ *
+ *
+ */
+
+/*@{*/
+
+#include <bcmos_system.h>
+#include <tm_sched_fsm.h>
+#include <bal_msg.h>
+#include <bal_osmsg.h>
+#include "bal_worker.h"
+#include "bal_mac_util.h"
+#include "bal_switch_util.h"
+#include <bal_api.h>
+//#include <bal_mac_util_common_itu_pon.h>
+
+
+#include <bal_objs.h>
+#include <fsm_common.h>
+
+#ifdef ENABLE_LOG
+#include <bcm_dev_log.h>
+
+ /*
+ * @brief The logging device id for tm sched
+ */
+static dev_log_id log_id_tm_sched;
+#endif
+
+/* local function declarations */
+
+static bcmos_errno tm_sched_fsm_create(tm_sched_inst *p_tm_sched_inst,
+                                    void *msg,
+                                    tm_sched_fsm_event *p_event);
+
+static bcmos_errno tm_sched_free_by_entry(tm_sched_inst *p_entry);
+static void tm_sched_inst_entry_obj_init(tm_sched_inst *p_entry);
+static bcmos_errno queues_list_fill(tm_sched_inst *p_tm_sched_inst,
+                                         bcmbal_tm_queue_id_list_u8 *queues_list);
+
+
+static bcmos_errno tm_sched_fsm_state_err(tm_sched_inst *p_tm_sched_inst,
+                                      void *msg,
+                                      tm_sched_fsm_event *p_event);
+static bcmos_errno tm_sched_fsm_assigned_process_util_msg(tm_sched_inst *p_tm_sched_inst,
+                                      void *msg,
+                                      tm_sched_fsm_event *p_event);
+static bcmos_errno tm_sched_fsm_deleting_process_util_msg(tm_sched_inst *p_tm_sched_inst,
+                                      void *msg,
+                                      tm_sched_fsm_event *p_event);
+
+static bcmos_errno tm_sched_fsm_inactive_destroy(tm_sched_inst *p_tm_sched_inst,
+                                      void *msg,
+                                      tm_sched_fsm_event *p_event);
+
+static bcmos_errno tm_sched_fsm_active_destroy(tm_sched_inst *p_tm_sched_inst,
+                                      void *msg,
+                                      tm_sched_fsm_event *p_event);
+
+static bcmos_errno tm_sched_fsm_assigned_destroy(tm_sched_inst *p_tm_sched_inst,
+                                      void *msg,
+                                      tm_sched_fsm_event *p_event);
+
+static bcmos_errno tm_sched_fsm_destroy(tm_sched_inst *p_tm_sched_inst);
+
+static bcmos_errno tm_sched_fsm_exec(tm_sched_inst *p_tm_sched_inst, tm_sched_fsm_event *p_event);
+
+static tm_sched_inst* tm_sched_find_by_owner(bcmbal_tm_sched_owner owner);
+
+static bcmos_errno bcmbal_tm_sched_sub_scheds_list_entry_add(tm_sched_inst *p_tm_sched_inst, bcmbal_tm_sched_id sched_id);
+static bcmos_errno bcmbal_tm_sched_sub_scheds_list_entry_remove(tm_sched_inst *p_tm_sched_inst, bcmbal_tm_sched_id sched_id);
+
+static bcmos_errno sub_scheds_list_fill(tm_sched_inst *p_tm_sched_inst, bcmbal_tm_sched_id_list_u8 *sub_scheds_list);
+/*
+ * @brief The Global tm_sched fsm context data structure
+ */
+static tm_sched_fsm_ctx g_tm_sched_fsm_tm_sched_list_ctx;
+
+/*
+ * Macros for tm_sched ctx access
+ */
+#define TM_SCHED_FSM_TM_SCHED_LIST_CTX      (g_tm_sched_fsm_tm_sched_list_ctx)
+#define TM_SCHED_FSM_TM_SCHED_LIST_CTX_PTR  (&g_tm_sched_fsm_tm_sched_list_ctx)
+
+
+/*
+ *  @brief The definition of a tm_sched FSM state processing function
+ */
+typedef bcmos_errno (* tm_sched_fsm_state_processor)(tm_sched_inst *, void *, tm_sched_fsm_event *);
+/*
+ *  @brief The tm sched FSM state processing array
+ */
+static tm_sched_fsm_state_processor tm_sched_states[TM_SCHED_FSM_STATE__NUM_OF][TM_SCHED_FSM_EVENT_TYPE__NUM_OF] =
+{
+
+    [TM_SCHED_FSM_STATE_NULL] =
+    {
+        [TM_SCHED_FSM_EVENT_TYPE_CREATE]  = tm_sched_fsm_create,
+        [TM_SCHED_FSM_EVENT_TYPE_DESTROY] = tm_sched_fsm_state_err,
+        [TM_SCHED_FSM_EVENT_TYPE_ASSIGN] = tm_sched_fsm_state_err,
+        [TM_SCHED_FSM_EVENT_TYPE_UTIL_MSG]  = tm_sched_fsm_state_err,
+
+    },
+    [TM_SCHED_FSM_STATE_INACTIVE] =
+    {
+        [TM_SCHED_FSM_EVENT_TYPE_CREATE]  = tm_sched_fsm_state_err,
+        [TM_SCHED_FSM_EVENT_TYPE_DESTROY] = tm_sched_fsm_inactive_destroy,
+        [TM_SCHED_FSM_EVENT_TYPE_ASSIGN] = tm_sched_fsm_state_err,
+        [TM_SCHED_FSM_EVENT_TYPE_UTIL_MSG]  = tm_sched_fsm_state_err,
+    },
+    [TM_SCHED_FSM_STATE_ASSIGNED] =
+    {
+        [TM_SCHED_FSM_EVENT_TYPE_CREATE]  = tm_sched_fsm_state_err,
+        [TM_SCHED_FSM_EVENT_TYPE_DESTROY] = tm_sched_fsm_assigned_destroy,
+        [TM_SCHED_FSM_EVENT_TYPE_ASSIGN] = tm_sched_fsm_state_err,
+        [TM_SCHED_FSM_EVENT_TYPE_UTIL_MSG]  = tm_sched_fsm_assigned_process_util_msg,
+    },
+	[TM_SCHED_FSM_STATE_ACTIVE] =
+	{
+		[TM_SCHED_FSM_EVENT_TYPE_CREATE]  = tm_sched_fsm_state_err,
+		[TM_SCHED_FSM_EVENT_TYPE_DESTROY] = tm_sched_fsm_active_destroy,
+		[TM_SCHED_FSM_EVENT_TYPE_ASSIGN] = tm_sched_fsm_state_err,
+		[TM_SCHED_FSM_EVENT_TYPE_UTIL_MSG]  = tm_sched_fsm_state_err,
+	},
+
+    [TM_SCHED_FSM_STATE_DELETING] =
+    {
+        [TM_SCHED_FSM_EVENT_TYPE_CREATE]  = tm_sched_fsm_state_err,
+        [TM_SCHED_FSM_EVENT_TYPE_DESTROY] = tm_sched_fsm_state_err,
+        [TM_SCHED_FSM_EVENT_TYPE_ASSIGN] = tm_sched_fsm_state_err,
+        [TM_SCHED_FSM_EVENT_TYPE_UTIL_MSG]  = tm_sched_fsm_deleting_process_util_msg,
+
+    },
+
+};
+
+static char *state_name_str[] =
+{
+    "TM_SCHED_FSM_STATE_NULL",
+    "TM_SCHED_FSM_STATE_INACTIVE",		
+    "TM_SCHED_FSM_STATE_ASSIGNED",
+    "TM_SCHED_FSM_STATE_ACTIVE",
+    "TM_SCHED_FSM_STATE_DELETING",
+};
+
+/* Ensure that the name array size matches the associated enum */
+BAL_STATIC_ASSERT(TM_SCHED_FSM_STATE__LAST == (sizeof (state_name_str) / sizeof (char *)), tm_sched_fsm_state);
+
+static char *tm_sched_state_name_get(tm_sched_fsm_state state)
+{
+    if(state < TM_SCHED_FSM_STATE__LAST)
+    {
+        return state_name_str[state];
+    }
+    else
+    {
+        return "TM_SCHED_UNKNOWN";
+    }
+}
+
+static char *event_name_str[] =
+{
+    "TM_SCHED_FSM_CREATE_EVENT",
+    "TM_SCHED_FSM_DESTROY_EVENT",
+    "TM_SCHED_FSM_ASSIGN_EVENT",
+    "FLOW_FSM_UTIL_MSG_EVENT",
+};
+
+/* Ensure that the name array size matches the associated enum */
+BAL_STATIC_ASSERT(TM_SCHED_FSM_EVENT_TYPE__LAST == (sizeof (event_name_str) / sizeof (char *)), tm_sched_fsm_event_type);
+
+static char *tm_sched_event_name_get(tm_sched_fsm_event_type event)
+{
+    if(event < TM_SCHED_FSM_EVENT_TYPE__LAST)
+    {
+        return event_name_str[event];
+    }
+    else
+    {
+        return "TM_SCHED_EVT_UNKNOWN";
+    }
+}
+
+
+
+
+/*****************************************************************************/
+/**
+ * @brief A function to initialize the tm sched FSM infrastructure.
+ *
+ *        NOTE: This is called once on startup and NOT for each FSM instance.
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+bcmos_errno tm_sched_fsm_init(void)
+{
+    int ii;
+    tm_sched_inst *new_entry;
+    bcmos_errno ret = BCM_ERR_OK;
+
+#ifdef ENABLE_LOG
+    log_id_tm_sched = bcm_dev_log_id_register("TM_SCHED", DEV_LOG_LEVEL_INFO, DEV_LOG_ID_TYPE_BOTH);
+    BUG_ON(log_id_tm_sched == DEV_LOG_INVALID_ID);
+#endif
+
+    /* Initialize all of the tm_sched queues */
+    TAILQ_INIT(&TM_SCHED_FSM_TM_SCHED_LIST_CTX_PTR->free_tm_sched_list);
+    TAILQ_INIT(&TM_SCHED_FSM_TM_SCHED_LIST_CTX_PTR->active_tm_sched_list);
+
+    /* Populate the free list with it's initial set of tm_scheds */
+    for(ii=0; ii<TM_SCHED_ALLOCATION_BLOCK_SIZE; ii++)
+    {
+
+        new_entry = bcmos_calloc(sizeof(tm_sched_inst));
+
+        if(NULL == new_entry)
+        {
+            BCM_LOG(FATAL, log_id_tm_sched,  "Failed to initialize the tm_sched free list - FATAL\n");
+            ret = BCM_ERR_NOMEM;
+            break;
+        }
+
+       tm_sched_free_by_entry(new_entry);
+    }
+
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief A function to un-initialize the tm sched FSM infrastructure.
+ *
+ *        NOTE: This is called once on shutdown and NOT for each FSM instance.
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+bcmos_errno tm_sched_fsm_finish(void)
+{
+
+    tm_sched_inst *current_entry, *p_temp_entry;
+
+    /* Free all the entries on the active list */
+    TAILQ_FOREACH_SAFE(current_entry,
+                       &TM_SCHED_FSM_TM_SCHED_LIST_CTX_PTR->active_tm_sched_list,
+                       tm_sched_inst_next,
+                       p_temp_entry)
+    {
+        /* Remove it from the active list */
+        TAILQ_REMOVE(&TM_SCHED_FSM_TM_SCHED_LIST_CTX_PTR->active_tm_sched_list, current_entry, tm_sched_inst_next);
+
+        bcmos_free(current_entry);
+
+    }
+
+    /* Free all the entries on the free list */
+    TAILQ_FOREACH_SAFE(current_entry,
+                       &TM_SCHED_FSM_TM_SCHED_LIST_CTX_PTR->free_tm_sched_list,
+                       tm_sched_inst_next,
+                       p_temp_entry)
+    {
+        /* Remove it from the active list */
+        TAILQ_REMOVE(&TM_SCHED_FSM_TM_SCHED_LIST_CTX_PTR->free_tm_sched_list, current_entry, tm_sched_inst_next);
+
+        bcmos_free(current_entry);
+    }
+
+    return BCM_ERR_OK;
+}
+
+/*****************************************************************************/
+/**
+ * @brief A function to retrieve a tm_sched instance of the specified class.
+ *
+ * @param key            A pointer to the key of the tm_sched being referenced
+ * @param search_flag    A flag specifying the type of tm_sched
+ *                       instance to be retrieved
+ *
+ * @returns tm_sched_inst_t* A pointer to the found tm_sched instance,
+ *                       or NULL if one is not found
+ *****************************************************************************/
+tm_sched_inst *tm_sched_inst_get(bcmbal_tm_sched_key key, tm_sched_flag search_flag)
+{
+    tm_sched_inst *current_entry = NULL;
+
+    /*
+     * First, check the active list if the caller has chosen to do so
+     */
+    if(TM_SCHED_FLAG_ACTIVE & search_flag)
+    {
+        TAILQ_FOREACH(current_entry,
+                      &TM_SCHED_FSM_TM_SCHED_LIST_CTX_PTR->active_tm_sched_list,
+                      tm_sched_inst_next)
+        {
+
+            if(current_entry->req_tm_sched_info.key.id == key.id
+				&& current_entry->req_tm_sched_info.key.dir == key.dir)
+            {
+                BCM_LOG(DEBUG, log_id_tm_sched,  "Found active tm_sched\n");
+                /* The tm_sched instance pointer is in current_entry */
+                break;
+            }
+        }
+    }
+
+    /*
+     * Next, check the free list if the caller has chosen to do so
+     */
+    if((TM_SCHED_FLAG_FREE & search_flag) && (NULL == current_entry))
+    {
+        /* Now check the free list */
+        if(!TAILQ_EMPTY(&TM_SCHED_FSM_TM_SCHED_LIST_CTX_PTR->free_tm_sched_list))
+        {
+            /* Just grab the first entry */
+            current_entry = TAILQ_FIRST(&TM_SCHED_FSM_TM_SCHED_LIST_CTX_PTR->free_tm_sched_list);
+
+            /* Remove it from the free list */
+            TAILQ_REMOVE(&TM_SCHED_FSM_TM_SCHED_LIST_CTX_PTR->free_tm_sched_list, current_entry, tm_sched_inst_next);
+
+            /* And add it to the active list */
+            TAILQ_INSERT_TAIL(&TM_SCHED_FSM_TM_SCHED_LIST_CTX_PTR->active_tm_sched_list, current_entry, tm_sched_inst_next);
+
+            /*
+             * Initialize the fsm state
+             */
+            current_entry->fsm_state = TM_SCHED_FSM_STATE_NULL;
+
+            BCM_LOG(DEBUG, log_id_tm_sched,  "Using new tm_sched\n");
+
+        }
+    }
+
+    if((TM_SCHED_FLAG_ANY & search_flag) && (NULL == current_entry))
+    {
+        /*A tm_sched was not found on either list */
+
+        BCM_LOG(DEBUG, log_id_tm_sched,  "************** ERROR: no tm_sched found\n");
+    }
+
+    return current_entry;
+}
+
+static bcmos_errno bcmbal_tm_sched_validate_sched_parent(const bcmbal_tm_sched_cfg *p_tm_sched_cfg, tm_sched_inst **p_parent_tm_sched_inst)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    bcmbal_tm_sched_key tm_sched_key;
+    tm_sched_key.dir = p_tm_sched_cfg->key.dir;
+    tm_sched_key.id = p_tm_sched_cfg->data.sched_parent.sched_id;
+
+    do
+    {
+        (*p_parent_tm_sched_inst) = tm_sched_inst_get(tm_sched_key, TM_SCHED_FLAG_ACTIVE);
+        if(NULL == (*p_parent_tm_sched_inst))
+        {
+            BCM_LOG(ERROR, log_id_tm_sched, "Sched parent dir = %s id = %d does not exist and therefor can not be set at the tm sched parent\n",
+            TM_SCHED_DIR_TO_STR(tm_sched_key.dir), tm_sched_key.id);
+            ret = BCM_ERR_NOENT;
+            break;
+        }
+
+        /*check weight/priority setting based on parent sched_type*/
+        if(BCMBAL_TM_SCHED_TYPE_SP == (*p_parent_tm_sched_inst)->req_tm_sched_info.data.sched_type)
+        {
+            if(!BCMBAL_ATTRIBUTE_PROP_IS_SET(&(p_tm_sched_cfg->data.sched_parent), tm_sched_parent, priority))
+            {
+                BCM_LOG(ERROR, log_id_tm_sched, "Sched parent must be set with a priority, as its sched_parent' sched_type is sp\n");
+                ret = BCM_ERR_PARM;
+                break;
+            }
+            if(BCMBAL_ATTRIBUTE_PROP_IS_SET(&(p_tm_sched_cfg->data.sched_parent), tm_sched_parent, weight))
+            {
+                BCM_LOG(ERROR, log_id_tm_sched, "Sched parent can not be set with a weight, as its sched_parent' sched_type is sp\n");
+                ret = BCM_ERR_PARM;
+                break;
+            }
+            if(p_tm_sched_cfg->data.sched_parent.priority >= (*p_parent_tm_sched_inst)->req_tm_sched_info.data.num_priorities)
+            {
+                BCM_LOG(ERROR, log_id_tm_sched,  "sched priority (%d) is higher than the allowed at parent sched (id = %d dir = %s num of priorities = %d )\n",
+                        p_tm_sched_cfg->data.sched_parent.priority , tm_sched_key.id, TM_SCHED_DIR_TO_STR(tm_sched_key.dir),
+                        (*p_parent_tm_sched_inst)->req_tm_sched_info.data.num_priorities);
+                
+                ret = BCM_ERR_PARM;
+                break;
+            }
+        }     
+        else
+            if(BCMBAL_TM_SCHED_TYPE_WFQ == (*p_parent_tm_sched_inst)->req_tm_sched_info.data.sched_type)
+            {
+                if(!BCMBAL_ATTRIBUTE_PROP_IS_SET(&(p_tm_sched_cfg->data.sched_parent), tm_sched_parent, weight))
+                {
+                    BCM_LOG(ERROR, log_id_tm_sched, "Sched parent must be set with a weight, as its sched_parent' sched_type is wrr\n");
+                    ret = BCM_ERR_PARM;
+                    break;
+                }
+                if(BCMBAL_ATTRIBUTE_PROP_IS_SET(&(p_tm_sched_cfg->data.sched_parent), tm_sched_parent, priority))
+                {
+                    BCM_LOG(ERROR, log_id_tm_sched, "Sched parent can not be set with a priority, as its sched_parent' sched_type is wrr \n");
+                    ret = BCM_ERR_PARM;
+                    break;
+                }
+            }
+        else
+            if(BCMBAL_TM_SCHED_TYPE_SP_WFQ == (*p_parent_tm_sched_inst)->req_tm_sched_info.data.sched_type)
+            {
+                if(BCMBAL_ATTRIBUTE_PROP_IS_SET(&(p_tm_sched_cfg->data.sched_parent), tm_sched_parent, priority)
+                    && BCMBAL_ATTRIBUTE_PROP_IS_SET(&(p_tm_sched_cfg->data.sched_parent), tm_sched_parent, weight))
+                {
+                    BCM_LOG(ERROR, log_id_tm_sched, "Sched parent must be set with either weight or priority, not both. as its sched_parent' sched_type is sp_wrr\n");
+                    ret = BCM_ERR_PARM;
+                    break;
+                }        
+                if(!BCMBAL_ATTRIBUTE_PROP_IS_SET(&(p_tm_sched_cfg->data.sched_parent), tm_sched_parent, priority)
+                    && !BCMBAL_ATTRIBUTE_PROP_IS_SET(&(p_tm_sched_cfg->data.sched_parent), tm_sched_parent, weight))
+                {
+                    BCM_LOG(ERROR, log_id_tm_sched, "Sched parent must be set with either weight or priority, as its sched_parent' sched_type is sp_wrr\n");
+                    ret = BCM_ERR_PARM;
+                    break;
+                }
+            }
+    }while(0);
+	
+    return ret;
+
+}
+
+/*****************************************************************************/
+/**
+ * @brief tm_sched_fsm_info_validate
+ *
+ * This routine is used to validate all input attributes required for a tm_sched
+ * settings
+ *
+ * @param p_tm_sched_cfg     A pointer to a tm sched object
+ *
+ * @return bcmos_errno
+ */
+/*****************************************************************************/
+static bcmos_errno tm_sched_fsm_info_validate(const bcmbal_tm_sched_cfg *p_tm_sched_cfg)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    bcmbal_tm_sched_owner owner = p_tm_sched_cfg->data.owner;
+    bcmbal_interface_key intf_key;
+    bcmbal_subscriber_terminal_key sub_term_key;
+    sub_term_inst *p_sub_term_inst = NULL;
+    tm_sched_inst *p_tm_sched_inst;
+    bcmos_bool is_sched_type_and_level_mandatory = BCMOS_TRUE;
+
+    do
+    {
+        if(!_rsc_mgr_tm_sched_id_validate(p_tm_sched_cfg->key.id))
+        {
+            BCM_LOG(ERROR, log_id_tm_sched,
+                   "Illegal tm sched id (reserved for auto created) \n");
+            ret = BCM_ERR_PARM;
+            break;
+        }
+        
+        if(BCMBAL_CFG_PROP_IS_SET(p_tm_sched_cfg, tm_sched, owner))
+        {
+            switch(owner.type)
+            {
+                case BCMBAL_TM_SCHED_OWNER_TYPE_AGG_PORT:
+                {
+                    /*tm sched owned by agg port is  the only case sched type might be unset*/
+                    is_sched_type_and_level_mandatory = BCMOS_FALSE;
+					
+                    if(BCMBAL_TM_SCHED_DIR_US != p_tm_sched_cfg->key.dir)
+                    {
+                        BCM_LOG(ERROR, log_id_tm_sched,
+                               "tm sched owned by agg port must be of US direction, while tm sched id = %d is not\n", p_tm_sched_cfg->key.dir);
+                        return BCM_ERR_PARM;
+                    }
+                    /*agg port owned tm sched can not be part of hqos, therefor can not have sched parent set*/
+                    if(BCMBAL_CFG_PROP_IS_SET(p_tm_sched_cfg, tm_sched, sched_parent))					
+                    {
+                        BCM_LOG(ERROR, log_id_tm_sched,
+                               "tm sched owned by agg port is a tsand alone and can not have sched_parent set to it");
+                        return BCM_ERR_PARM;
+                    }
+                    /*validate all required parameters are set*/
+                    if((owner.u.agg_port.intf_id == BAL_API_MAX_INTF_ID)
+                    || (owner.u.agg_port.sub_term_id == BCMBAL_SUB_ID_UNKNOWN))
+                    {
+                        BCM_LOG(ERROR, log_id_tm_sched,
+                               "Illegal owner agg port settings intf_id = %d sub_id = %d \n",
+                        owner.u.agg_port.intf_id, owner.u.agg_port.sub_term_id);
+                        return BCM_ERR_PARM;
+                    }
+                    
+                    /*validate interface is up*/
+                    intf_key.intf_id = owner.u.agg_port.intf_id;
+                    intf_key.intf_type = BCMBAL_INTF_TYPE_PON;
+                    
+                    if(bcmbal_interface_status_get(intf_key)!= BCMBAL_STATUS_UP)
+                    {
+                        BCM_LOG(ERROR, log_id_tm_sched,
+                               "intf = %d is not UP\n",
+                        intf_key.intf_id);
+                        return BCM_ERR_NOT_CONNECTED;
+                    }
+                    
+                    /*validate sub terminal exist*/
+                    sub_term_key.intf_id = owner.u.agg_port.intf_id;
+                    sub_term_key.sub_term_id = owner.u.agg_port.sub_term_id;
+                    
+                    p_sub_term_inst = sub_term_inst_get(&sub_term_key, SUB_TERM_FLAG_ACTIVE);
+                    
+                    if(!p_sub_term_inst)
+                    {
+                        BCM_LOG(ERROR, log_id_tm_sched,
+                               "Failed to get subscriber terminal with intf = %d id = %u\n",
+                        sub_term_key.intf_id, sub_term_key.sub_term_id);
+                        return BCM_ERR_NOENT;
+                    }
+                }
+                break;
+				
+                case BCMBAL_TM_SCHED_OWNER_TYPE_UNI:
+                {
+                    /*validate sub terminal exist*/
+                    sub_term_key.intf_id = owner.u.uni.intf_id;
+                    sub_term_key.sub_term_id = owner.u.uni.sub_term_id;
+
+                    p_sub_term_inst = sub_term_inst_get(&sub_term_key, SUB_TERM_FLAG_ACTIVE);
+                    
+                    if(!p_sub_term_inst)
+                    {
+                        BCM_LOG(ERROR, log_id_tm_sched,
+                               "Failed to get subscriber terminal with intf = %d id = %u\n",
+                        sub_term_key.intf_id, sub_term_key.sub_term_id);
+                        return BCM_ERR_NOENT;
+                    }
+                    
+                }
+                break;
+                
+                default:
+                break;
+            }
+        }
+		
+        if(BCMOS_TRUE == is_sched_type_and_level_mandatory)
+        {
+            if(!BCMBAL_CFG_PROP_IS_SET(p_tm_sched_cfg, tm_sched, sched_type))
+            {
+                BCM_LOG(ERROR, log_id_tm_sched, "Sched type is a mandatory parameter for setting tm sched\n");
+                ret = BCM_ERR_MANDATORY_PARM_IS_MISSING;
+                break;
+            }
+            /*if sched type is sp or wrr_sp, num_of_priorities is a mandatory parameter*/
+            if(BCMBAL_TM_SCHED_TYPE_SP == p_tm_sched_cfg->data.sched_type
+              || BCMBAL_TM_SCHED_TYPE_SP_WFQ == p_tm_sched_cfg->data.sched_type)
+            {
+                if(!BCMBAL_CFG_PROP_IS_SET(p_tm_sched_cfg, tm_sched, num_priorities))
+                {
+                    BCM_LOG(ERROR, log_id_tm_sched, "num_priorities is a mandatory parameter for setting tm sched with sched type %s\n",
+                            BCMBAL_TM_SCHED_TYPE_SP == p_tm_sched_cfg->data.sched_type ? "sp" : "sp_wrr");
+                    ret = BCM_ERR_MANDATORY_PARM_IS_MISSING;
+                    break;
+                }
+            }
+            if(!BCMBAL_CFG_PROP_IS_SET(p_tm_sched_cfg, tm_sched, sched_child_type))
+            {
+                BCM_LOG(ERROR, log_id_tm_sched, "Sched child type is a mandatory parameter for setting tm sched\n");
+                ret = BCM_ERR_MANDATORY_PARM_IS_MISSING;
+                break;
+            }
+        }
+
+        if(BCMBAL_CFG_PROP_IS_SET(p_tm_sched_cfg, tm_sched, sched_parent))
+        {
+            if(BCM_ERR_OK == (ret = bcmbal_tm_sched_validate_sched_parent(p_tm_sched_cfg, &p_tm_sched_inst)))
+            {
+                if(BCM_ERR_OK != (ret = bcmbal_tm_sched_sub_scheds_list_entry_add(p_tm_sched_inst, p_tm_sched_cfg->key.id)))
+                {
+                    BCM_LOG(ERROR, log_id_tm_sched,	"could not set scheduler dir = %s id = %d as parent of sched dir = %s id = %d (err= %s)\n",
+                        TM_SCHED_DIR_TO_STR(p_tm_sched_inst->req_tm_sched_info.key.dir), p_tm_sched_cfg->data.sched_parent.sched_id,
+                        TM_SCHED_DIR_TO_STR(p_tm_sched_cfg->key.dir), p_tm_sched_cfg->key.id, bcmos_strerror(ret));
+                    break;
+                }              
+            }
+            else
+            {
+            
+                BCM_LOG(ERROR, log_id_tm_sched,	"could not validate scheduler dir = %s id = %d as parent of sched dir = %s id = %d (err= %s)\n",
+                TM_SCHED_DIR_TO_STR(p_tm_sched_cfg->key.dir), p_tm_sched_cfg->data.sched_parent.sched_id,
+                TM_SCHED_DIR_TO_STR(p_tm_sched_cfg->key.dir), p_tm_sched_cfg->key.id, bcmos_strerror(ret));
+                break;
+            }   
+        }
+
+    }while(0);
+
+    return ret;
+
+}
+/*****************************************************************************/
+/**
+ * @brief A function called by the core worker thread to process an
+ *        tm_sched object message (SET, GET, CLEAR, STATS) received
+ *        from the BAL Public API.
+ *
+ * @param msg_payload      Pointer to a BAL message received from the
+ *                         BAL Public API.
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+bcmos_errno process_tm_sched_object(void *msg_payload)
+{
+    bcmos_errno ret = BCM_ERR_OK, rsp_ret = BCM_ERR_OK;	
+    bcmbal_tm_sched_cfg *p_tm_sched_cfg = (bcmbal_tm_sched_cfg *)msg_payload;
+    tm_sched_inst *p_tm_sched_inst = NULL;
+    tm_sched_fsm_event fsm_event;
+    bcmbal_tm_sched_key tm_sched_key;
+    bcmbal_obj_msg_type oper_type;
+    bcmbal_tm_sched_owner owner;
+    uint32_t ref_count; 
+    queue_entry *current_queue_entry;
+    bcmbal_tm_queue_key current_queue_key;
+    tm_queue_inst *current_queue_inst;
+    bcmbal_interface_key intf_key;
+	
+    do
+    {
+        BUG_ON(NULL == msg_payload);
+        
+        BCM_LOG(DEBUG, log_id_tm_sched,  "Processing a tm sched object\n");
+        
+        tm_sched_key = p_tm_sched_cfg->key;
+        oper_type = p_tm_sched_cfg->hdr.hdr.type;
+        
+        /*
+        * A message pointer may be passed inside the event structure.
+        */
+        fsm_event.msg = msg_payload;
+        
+        /* SET or GET or CLEAR...? */
+        switch(oper_type)
+        {
+            case(BCMBAL_OBJ_MSG_TYPE_SET):
+            {
+                BCM_LOG(DEBUG, log_id_tm_sched,  "Processing a tm sched SET REQ mgmt message\n");
+                do
+                {
+                    if(BCMBAL_STATUS_UP != acc_term_status_get())
+                    {
+                        BCM_LOG(ERROR, log_id_tm_sched,  
+                            "ERROR - Access-terminal is not UP.  No further processing\n");
+                        ret = BCM_ERR_STATE;
+                        break;
+                    }
+                    
+                    /*Find the specified tm_sched instance is already created */
+                    p_tm_sched_inst = tm_sched_inst_get(tm_sched_key, TM_SCHED_FLAG_ACTIVE);
+					
+                    if(NULL != p_tm_sched_inst)
+                    {
+                        /* This is a fatal error condition */
+                        BCM_LOG(ERROR, log_id_tm_sched,
+                            "ERROR - tm sched found.  Set after create is currently not supported. No further processing\n");
+                        ret = BCM_ERR_NOT_SUPPORTED;
+                        break;
+                    }
+					
+                    p_tm_sched_inst = tm_sched_inst_get(tm_sched_key, TM_SCHED_FLAG_FREE);
+                    if(NULL == p_tm_sched_inst)
+                    {
+                        /* This is a fatal error condition */
+                        BCM_LOG(ERROR, log_id_tm_sched,
+                            "ERROR - tm sched not found.  No further processing\n");
+                        ret = BCM_ERR_NOMEM;
+                        break;
+                    }
+
+					BCM_LOG(DEBUG, log_id_tm_sched,
+						"Creating a new tm sched\n");
+					
+                    BCMBAL_CFG_PROP_SET(p_tm_sched_cfg, tm_sched, creation_mode, BCMBAL_TM_CREATION_MODE_MANUAL);
+
+                    /* Fill in given cfg with current tm sched instance API request data structure and validate it*/
+                    bcmbal_tm_sched_object_overlay_w_src_priority(&p_tm_sched_inst->req_tm_sched_info, p_tm_sched_cfg);
+					
+                    /* Check if the mandatory tm sched attributes have been set, and range check where applicable */
+                    if(BCM_ERR_OK != (ret = tm_sched_fsm_info_validate(p_tm_sched_cfg)))
+                    {
+                        BCM_LOG(ERROR, log_id_tm_sched, "tm_sched fsm validation Failed (%d)\n", ret);
+						tm_sched_free_by_entry(p_tm_sched_inst);
+                        break;
+                    }
+                    
+                    
+                    /* Perform the validation check(s) that the utils require */
+                    if(BCM_ERR_OK != (ret = sw_util_tm_sched_validate(p_tm_sched_cfg)))
+                    {
+                        BCM_LOG(ERROR, log_id_tm_sched, "tm_sched switch validation Failed (%d)\n", ret);
+                        tm_sched_free_by_entry(p_tm_sched_inst);
+                        break;
+                    }
+                    
+                }while(0);
+                /* We respond to the BAL public API backend with a result. We always
+                * send a complete msg_payload back to the API, but the data portion
+                * of the object is only relevant when a GET or GET-STATS has been requested.
+                */
+                rsp_ret = mgmt_msg_send_balapi_rsp(ret, msg_payload, oper_type, log_id_tm_sched);
+                if(BCM_ERR_OK != rsp_ret || BCM_ERR_OK != ret)
+                {
+                    break;
+                }
+                
+                /*
+                * Initial checks complete.	Process the request
+                */
+                fsm_event.event_type = TM_SCHED_FSM_EVENT_TYPE_CREATE;
+                /*
+                * Run the tm sched FSM to process this event
+                */
+                ret = tm_sched_fsm_exec(p_tm_sched_inst, &fsm_event);       
+            
+            }//SET
+            break;
+			
+            case(BCMBAL_OBJ_MSG_TYPE_GET):
+            {        
+                bcmbal_tm_queue_id_list_u8 queues_list = {};
+                bcmbal_tm_sched_id_list_u8 sub_scheds_list = {};
+                
+                BCM_LOG(DEBUG, log_id_tm_sched,	"Processing a tm sched GET REQ mgmt message\n");
+                
+                /* Just return the tm sched data info that we have on record for tm sched instance */
+                /*Find the specified tm sched  instance       */
+                p_tm_sched_inst = tm_sched_inst_get(tm_sched_key, TM_SCHED_FLAG_ACTIVE);
+                
+                if(NULL == p_tm_sched_inst)
+                {
+                    BCM_LOG(ERROR, log_id_tm_sched, "Specified tm_sched not found on GET\n");
+                    ret = BCM_ERR_NOENT;
+                }
+                else
+                {
+                    /* Return the queues list if requested */
+                    BCMBAL_CFG_PROP_CLEAR(&p_tm_sched_inst->req_tm_sched_info,
+                        tm_sched,
+                        queues);
+						
+                    /* If the user requested the list of queues for this tm sched then return the list.*/
+                    if(BCMBAL_CFG_PROP_IS_SET(p_tm_sched_cfg,
+                        tm_sched, 
+                        queues))
+                    {
+                
+                        if(BCM_ERR_OK == queues_list_fill(p_tm_sched_inst, &queues_list))
+                        {
+                            /* NOTE: The returned list may be empty */
+                            BCMBAL_CFG_PROP_SET(&p_tm_sched_inst->req_tm_sched_info,
+                                tm_sched,
+                                queues,
+                                queues_list);
+                        }
+                        else
+                        {
+                            BCM_LOG(ERROR, log_id_tm_sched, "Error trying to fill queues list to return\n");
+                            ret = BCM_ERR_INTERNAL;
+                            break;    
+                        }
+                    }
+                
+                    /* Return the sub scheds list if requested */
+                    BCMBAL_CFG_PROP_CLEAR(&p_tm_sched_inst->req_tm_sched_info,
+                        tm_sched,
+                        sub_scheds);
+						
+                    /* If the user requested the list of sub scheds for this tm sched then return the list.*/
+                    if(BCMBAL_CFG_PROP_IS_SET(p_tm_sched_cfg,
+                        tm_sched, 
+                        sub_scheds))
+                    {
+                
+                        if(BCM_ERR_OK == sub_scheds_list_fill(p_tm_sched_inst, &sub_scheds_list))
+                        {
+                            /* NOTE: The returned list may be empty */
+                            BCMBAL_CFG_PROP_SET(&p_tm_sched_inst->req_tm_sched_info,
+                                tm_sched,
+                                sub_scheds,
+                                sub_scheds_list);
+                        }
+                        else
+                        {
+                            BCM_LOG(ERROR, log_id_tm_sched, "Error trying to fill sub_scheds list to return\n");
+                            ret = BCM_ERR_INTERNAL;
+                            break;    
+                        }
+                    }
+                /* We respond to the BAL public API backend with a result. We always 
+                    * send a complete msg_payload back to the API, but the data portion 
+                    * of the object is only relevant when a GET or GET-STATS has been requested.
+                    */
+                    
+                    p_tm_sched_inst->req_tm_sched_info.hdr.hdr.comm_hdr = ((bcmbal_obj *)msg_payload)->comm_hdr;
+                    *((bcmbal_tm_sched_cfg *)msg_payload) = p_tm_sched_inst->req_tm_sched_info;
+                    
+                }
+                
+				mgmt_msg_send_balapi_rsp(ret, msg_payload, oper_type, log_id_tm_sched);
+                
+                /* Free the temporary lists if they were used */
+                if(queues_list.val)
+                {
+                    bcmos_free(queues_list.val);
+                }
+            }//GET
+            break;
+            
+            case(BCMBAL_OBJ_MSG_TYPE_CLEAR):
+            {
+                do
+                {
+                    BCM_LOG(DEBUG, log_id_tm_sched,  "Processing a tm sched CLEAR REQ mgmt message\n");
+                    /*Find the specified tm sched  instance       */
+                    p_tm_sched_inst = tm_sched_inst_get(tm_sched_key, TM_SCHED_FLAG_ACTIVE);
+                    
+                    if(NULL == p_tm_sched_inst)
+                    {
+                        BCM_LOG(ERROR, log_id_tm_sched, "Specified tm_sched not found on Clear\n");
+                        ret = BCM_ERR_NOENT;
+                        break;
+                    }
+					
+                    /*user can not clear auto created sched owned by agg port*/
+                    if(BCMBAL_CFG_PROP_IS_SET(&p_tm_sched_inst->req_tm_sched_info, tm_sched, owner))
+                    {
+                        owner = p_tm_sched_inst->req_tm_sched_info.data.owner;
+                        if(BCMBAL_TM_SCHED_OWNER_TYPE_AGG_PORT == owner.type
+                           && BCMBAL_TM_CREATION_MODE_AUTO == p_tm_sched_inst->req_tm_sched_info.data.creation_mode)
+                        {
+                            BCM_LOG(ERROR, log_id_tm_sched, "Specified tm_sched is auto created, therefor can not be manually deleted\n");
+                            ret = BCM_ERR_PARM;
+                            break;
+                        }
+
+                    /*check that a tm is not active, 
+                     if that tm owned by interface, it is active if any of its queue is active.
+                     if it is owned by agg port, it is active if the agg port id has ref count > 1 */
+                    switch(owner.type)
+                    {
+                        case BCMBAL_TM_SCHED_OWNER_TYPE_AGG_PORT:
+                        {
+                            rsc_mgr_alloc_id_get_ref_count(owner.u.agg_port.intf_id,owner.u.agg_port.agg_port_id,&ref_count);
+                            if(ref_count > 1)
+                            {
+                                BCM_LOG(ERROR, log_id_tm_sched, "Specified tm_sched is active and therefor can not be deleted (if = %d agg id = %d, ref count = %d \n",
+                                    owner.u.agg_port.intf_id,owner.u.agg_port.agg_port_id, ref_count);
+                                ret = BCM_ERR_PARM;
+                            }
+                            break;
+                        }//BCMBAL_TM_SCHED_OWNER_TYPE_AGG_PORT
+						
+                        case BCMBAL_TM_SCHED_OWNER_TYPE_INTERFACE:
+                        {
+                            TAILQ_FOREACH(current_queue_entry,
+                                &p_tm_sched_inst->queues_list,
+                                next)
+                            {
+                                if(NULL != current_queue_entry)
+                                {
+                                    current_queue_key.sched_id = p_tm_sched_inst->req_tm_sched_info.key.id;
+                                    current_queue_key.sched_dir = p_tm_sched_inst->req_tm_sched_info.key.dir;
+                                    current_queue_key.id = current_queue_entry->queue_id;
+                                    current_queue_inst = tm_queue_inst_get(current_queue_key, TM_QUEUE_FLAG_ACTIVE);
+                                    if(NULL == current_queue_inst)
+                                    {
+                                        ret = BCM_ERR_INTERNAL;
+                                        break;
+                                    }
+                                    if(TM_QUEUE_FSM_STATE_IN_USE == current_queue_inst->fsm_state)
+                                    {
+                                        BCM_LOG(ERROR, log_id_tm_sched, "Specified tm_sched is active (has an in use queue) and therefor can not be deleted (queue id = %d \n",
+                                                                        current_queue_key.id);
+                                        ret = BCM_ERR_PARM;
+                                        break;        
+                                    }
+                                }                    
+                            }//TAILQ_FOREACH
+                            if(BCM_ERR_OK == ret)
+                            {
+                                /*TM_SCHEDs  (either auto or manually created) with owner interface may only be deleted there are no attached TM_QUEUEs, and only when the associated interface is in the ADMIN-DOWN state*/
+     							intf_key.intf_type = owner.u.interface.intf_type;
+	    						intf_key.intf_id = owner.u.interface.intf_id;
+                                if(BCMBAL_STATUS_DOWN != bcmbal_interface_status_get(intf_key))
+                                {
+                                    BCM_LOG(ERROR, log_id_tm_sched, "Specified tm_sched is owned by interface that is not admin down, and can be removed only when the associated interface is in the ADMIN-DOWN state\n");
+                                    ret = BCM_ERR_PARM;
+                                    break; 	   
+	                            }
+                            }
+                        }//BCMBAL_TM_SCHED_OWNER_TYPE_INTERFACE
+                        break;
+			            
+                        default:
+                        break;
+                    }//switch owner.type
+				}//owner is set
+                /*generate destroy event*/
+                if(BCM_ERR_OK == ret)
+                {
+                    fsm_event.event_type = TM_SCHED_FSM_EVENT_TYPE_DESTROY;
+                    fsm_event.msg = msg_payload;
+                    ret = tm_sched_fsm_exec(p_tm_sched_inst,&fsm_event);
+                }
+            }while(0);
+                
+                mgmt_msg_send_balapi_rsp(ret, msg_payload, oper_type, log_id_tm_sched);			                
+            }//CLEAR
+            break;
+            
+            default:
+            {
+                BCM_LOG(ERROR, log_id_tm_sched,  "Unsupported operation on tm sched object (%d)\n",
+                oper_type);
+                ret = BCM_ERR_NOT_SUPPORTED;         
+            }
+        }
+    }while(0);
+    BCM_LOG(DEBUG, log_id_tm_sched, "%s returns\n", __FUNCTION__);
+	
+    return ret;
+}
+
+
+static void tm_sched_inst_entry_obj_init(tm_sched_inst *p_entry)
+{
+    /* The actual key content is irrelevant for free tm_scheds */
+    bcmbal_tm_sched_key key = { .id = 0, .dir = BCMBAL_TM_SCHED_DIR_DS};
+
+    BCMBAL_CFG_INIT(&p_entry->current_tm_sched_info,
+                    tm_sched,
+                    key);
+    p_entry->fsm_state = TM_SCHED_FSM_STATE_NULL;	
+    /* Initialize the queues and suc scheds lists */
+    p_entry->num_queues_on_node = 0;
+    TAILQ_INIT(&p_entry->queues_list);
+     
+    p_entry->num_sub_scheds_on_node = 0;
+    TAILQ_INIT(&p_entry->sub_scheds_list);
+
+    BCMBAL_OBJ_IN_PROGRESS_SET(&(p_entry->current_tm_sched_info), BCMOS_FALSE);
+}
+/*****************************************************************************/
+/**
+ * @brief A function to free a tm_sched instance specified by a the supplied
+ *        entry pointer.
+ *
+ * @param p_entry A pointer to the entry to be freed
+ *
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+static bcmos_errno tm_sched_free_by_entry(tm_sched_inst *p_entry)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    tm_sched_inst *current_entry;
+    tm_sched_inst *p_temp_entry;
+    /*
+     * First, check the active list (an active tm_sched can be in the adding or removing state)
+     */
+    TAILQ_FOREACH_SAFE(current_entry,
+                       &TM_SCHED_FSM_TM_SCHED_LIST_CTX_PTR->active_tm_sched_list,
+                       tm_sched_inst_next,
+                       p_temp_entry)
+    {
+        if(current_entry == p_entry)
+        {
+           /* Remove it from the active list */
+            TAILQ_REMOVE(&TM_SCHED_FSM_TM_SCHED_LIST_CTX_PTR->active_tm_sched_list, current_entry, tm_sched_inst_next);
+            break;
+        }
+    }
+    tm_sched_inst_entry_obj_init(p_entry);
+
+    /* And add it to the free list */
+    TAILQ_INSERT_TAIL(&TM_SCHED_FSM_TM_SCHED_LIST_CTX_PTR->free_tm_sched_list, p_entry, tm_sched_inst_next);
+
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The tm sched FSM state processing executive function
+ *
+ * @param p_tm_sched_inst  Pointer to a tm_sched instance
+ * @param p_event      Pointer to a tm_sched event structure
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+static bcmos_errno tm_sched_fsm_exec(tm_sched_inst *p_tm_sched_inst, tm_sched_fsm_event *p_event)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    tm_sched_fsm_state pre_state;
+    tm_sched_fsm_state_processor tm_sched_state_processor;
+
+    /* Parameter checks */
+    BUG_ON(NULL == p_tm_sched_inst);
+    BUG_ON(NULL == p_event);
+
+    /* Record the present state for debug printing
+     */
+    pre_state = p_tm_sched_inst->fsm_state;
+
+    /*
+     * Get the state processing function
+     */
+    tm_sched_state_processor = tm_sched_states[p_tm_sched_inst->fsm_state][p_event->event_type];
+
+    /*
+     * If there's a state processing function for this event and state, execute it.
+     * Otherwise, process a generic error.
+     */
+    if(tm_sched_state_processor)
+    {
+        ret = tm_sched_state_processor(p_tm_sched_inst, p_event->msg, p_event);
+    } 
+	else
+    {
+        tm_sched_fsm_state_err(p_tm_sched_inst, p_event->msg, p_event);
+    }
+
+    if(BCM_ERR_OK != ret)
+    {
+        BCM_LOG(ERROR, log_id_tm_sched, "*** Error detected during state processing\n");
+        p_tm_sched_inst->fsm_state = pre_state;
+    }
+
+    BCM_LOG(DEBUG, log_id_tm_sched,  "*** Event %s, State: %s --> %s\n\n",
+            tm_sched_event_name_get(p_event->event_type),
+            tm_sched_state_name_get(pre_state),
+            tm_sched_state_name_get(p_tm_sched_inst->fsm_state));
+
+    return ret;
+}
+
+
+
+/*****************************************************************************/
+/**
+ * @brief The tm sched FSM function which is executed when an error
+ *        is encountered during FSM processing.
+ *
+ * @param p_tm_sched_inst     Pointer to a tm_sched instance
+ * @param msg              Pointer to a BAL message received from one of
+ *                         the BAL apps.
+ * @param p_event          Pointer to a tm_sched event structure
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+static bcmos_errno tm_sched_fsm_state_err(tm_sched_inst *p_tm_sched_inst,
+                                      void *msg,
+                                      tm_sched_fsm_event *p_event)
+{
+    bcmos_errno ret = BCM_ERR_INVALID_OP;
+
+    BCM_LOG(DEBUG, log_id_tm_sched,
+            "Error encountered processing TM_SCHED FSM"
+            " - BAD EVENT ()\n");
+
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief A function to process a tm sched object event received
+ *        from one of the BAL apps.
+ *
+ * @param msg_payload  A pointer to the util message
+ *                         
+ * @returns bcmos_errno 
+ *****************************************************************************/
+bcmos_errno process_tm_sched_util_msg(void *msg_payload)
+{
+
+
+    bcmos_errno ret = BCM_ERR_OK;
+    bcmbal_msg_type type;
+    bcmbal_tm_sched_key key;
+	tm_sched_inst *p_tm_sched_inst;
+    tm_sched_fsm_event tm_sched_event;
+
+
+    BUG_ON(NULL == msg_payload);
+    do
+    {
+        type = bcmbal_type_minor_get(msg_payload);	
+    
+	    BCM_LOG(DEBUG, log_id_tm_sched,
+                "Processing a tm sched %s util message from %s\n",
+                bcmbal_msg_t_str[type],
+                subsystem_str[bcmbal_sender_get(msg_payload)]);
+    
+        if(BAL_MSG_TYPE_IND == type)
+    	{
+	    
+        /* recover the key from the message */
+        key = ((bal_util_msg_ind *)msg_payload)->obj_key.tm_sched_key;
+    
+	    
+    	/*
+	     * Get the sub_term instance that's being referenced
+    	 */
+	    p_tm_sched_inst = tm_sched_inst_get(key, TM_SCHED_FLAG_ACTIVE);
+    
+	    if(NULL == p_tm_sched_inst)
+    	{  
+		    BCM_LOG(ERROR, log_id_tm_sched, 
+				    "invalid tm sched (dir %s id %d) found while processing a util message type %s from %s\n",
+    				TM_SCHED_DIR_TO_STR(key.dir),
+				    key.id,
+    				bcmbal_msg_t_str[type],
+				    subsystem_str[bcmbal_sender_get(msg_payload)]);
+		    ret = BCM_ERR_INTERNAL;
+    		break;
+	    }
+    	tm_sched_event.msg = msg_payload;	
+	    
+		    tm_sched_event.event_type = TM_SCHED_FSM_EVENT_TYPE_UTIL_MSG;
+    		
+                BCM_LOG(DEBUG, log_id_tm_sched, "p_tm_sched_inst->fsm_state=%d, tm_sched_event.event_type = %d\n",
+                         p_tm_sched_inst->fsm_state,  tm_sched_event.event_type);
+		            /*Run the tm sched FSM to process this event */
+            if(BCM_ERR_OK == ret)
+            {
+                ret = tm_sched_fsm_exec(p_tm_sched_inst, &tm_sched_event);
+            }
+	    }
+    	
+	    else
+    	{
+		    ret = BCM_ERR_NOT_SUPPORTED;
+    		BCM_LOG(ERROR, log_id_tm_sched, 
+				    "Unknown message type received from the APP (not one of RSP:ACK:IND:AUTO_IND) (type:%d)\n",
+    				type);
+	    }
+    }while(0);	
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief The tm sched  FSM state processing for a tm sched create command received
+ *        from the BAL Public API.
+ *
+ * @param p_tm_sched_inst      Pointer to a tm sched instance
+ * @param msg              Pointer to a BAL message received from the BAL Public API
+ * @param p_event          Pointer to a tm sched event structure
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+static bcmos_errno tm_sched_fsm_create(tm_sched_inst *p_tm_sched_inst,
+                                    void *msg,
+                                    tm_sched_fsm_event *p_event)
+{
+
+    bcmos_errno ret = BCM_ERR_OK;
+    p_tm_sched_inst->fsm_state = TM_SCHED_FSM_STATE_INACTIVE;
+
+    if(BCMBAL_CFG_PROP_IS_SET(&p_tm_sched_inst->req_tm_sched_info, tm_sched,owner))
+    {
+        ret = bcmbal_tm_sched_set_owner(p_tm_sched_inst);
+    }
+
+    return ret;
+}
+
+bcmos_errno bcmbal_tm_sched_set_owner(tm_sched_inst *p_tm_sched_inst)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+	bcmbal_tm_sched_owner owner;
+    bcmbal_tm_queue_key tm_queue_key; 	
+    bcmbal_tm_sched_key tm_sched_key = p_tm_sched_inst->req_tm_sched_info.key;
+    queue_entry *current_queue_entry;
+
+
+    BUG_ON(NULL == p_tm_sched_inst);
+    do
+    {
+        if(	BCMBAL_CFG_PROP_IS_SET(&p_tm_sched_inst->req_tm_sched_info, tm_sched,owner))
+        {
+            p_tm_sched_inst->fsm_state = TM_SCHED_FSM_STATE_ASSIGNED;
+            owner = p_tm_sched_inst->req_tm_sched_info.data.owner;
+            switch(owner.type)
+            {    
+                case BCMBAL_TM_SCHED_OWNER_TYPE_INTERFACE:
+                case BCMBAL_TM_SCHED_OWNER_TYPE_SUB_TERM:
+                case BCMBAL_TM_SCHED_OWNER_TYPE_UNI:
+                {
+                    /*no need to validate owner attributes as these are read only and set by VALID internal objects*/
+                    if(BCM_ERR_OK != (ret = sw_util_tm_sched_set(p_tm_sched_inst)))
+                    {
+                        BCM_LOG(ERROR, log_id_tm_sched,  "error %s detected by switch util while adding tm sched\n", bcmos_strerror(ret));
+                        break;
+                    }
+                    /* The hardware has properly accepted the object info, so the request object becomes  the current state. */
+                    bcmbal_tm_sched_object_overlay_w_src_priority(&p_tm_sched_inst->current_tm_sched_info,
+                                                                 &p_tm_sched_inst->req_tm_sched_info);
+                    p_tm_sched_inst->fsm_state = TM_SCHED_FSM_STATE_ACTIVE;
+                    /*configure all assigned queues*/
+                    
+                    TAILQ_FOREACH(current_queue_entry,
+                        &p_tm_sched_inst->queues_list,
+                        next)
+                    {
+                        tm_queue_key.id = current_queue_entry->queue_id;
+                        tm_queue_key.sched_id = tm_sched_key.id;
+                        tm_queue_key.sched_dir = tm_sched_key.dir;
+                        if(BCM_ERR_OK != (ret = bcmbal_tm_queue_set_owner(tm_queue_key)))
+                        {
+                            BCM_LOG(ERROR, log_id_tm_sched, "Could not set queue sched id = %d sched dir = %s queue id = %d of the tm sched (%s)\n", 
+                                    tm_queue_key.sched_id, TM_SCHED_DIR_TO_STR(tm_queue_key.sched_dir), tm_queue_key.id, bcmos_strerror(ret));
+                            break;
+                        }
+                    }
+                    BCMBAL_OBJ_IN_PROGRESS_SET(&(p_tm_sched_inst->current_tm_sched_info), BCMOS_FALSE);
+                    p_tm_sched_inst->current_tm_sched_info.hdr.hdr.status = ret;
+                    
+                }
+                break;
+			
+                case BCMBAL_TM_SCHED_OWNER_TYPE_AGG_PORT:
+                {
+                    bcmbal_interface_key intf_key = {.intf_type = BCMBAL_INTF_TYPE_PON, .intf_id = owner.u.agg_port.intf_id};
+                    bcmbal_subscriber_terminal_key sub_key = {.sub_term_id = owner.u.agg_port.sub_term_id, .intf_id = intf_key.intf_id};
+                    /*for agg port, should validate intf and sub term validity*/
+                    if(NULL == sub_term_inst_get(&sub_key, SUB_TERM_FLAG_ACTIVE))
+                    {
+                        BCM_LOG(ERROR, log_id_tm_sched,	"Can not set an agg port for onu (if-%d id-%d) which does not exist\n", intf_key.intf_id, sub_key.sub_term_id);
+                        ret = BCM_ERR_PARM;
+                        break;
+                    }
+                    
+                    BCM_LOG(DEBUG, log_id_tm_sched,	"Getting a new ALLOC ID from resource manager\n");	
+                    
+                    owner.u.agg_port.agg_port_id = 0; /* 0 is a magic number telling the resource manager that it should provide the initial allocation of the ALLOC ID */
+                    ret = rsc_mgr_alloc_id_alloc(intf_key.intf_id, &owner.u.agg_port.agg_port_id, 1, NULL);
+                    
+                    if(BCM_ERR_OK != ret)
+                    {
+                        /* An error has occurred trying to get mandatory data */
+                        BCM_LOG(ERROR, log_id_tm_sched,	"Failed to get ALLOC ID from resource manager\n");
+                        ret = BCM_ERR_NORES;
+                        break;		
+                    }
+					/*set the agg port id into the inst*/
+					BCMBAL_CFG_PROP_SET(&p_tm_sched_inst->req_tm_sched_info, tm_sched, owner, owner);
+					
+                    ret = mac_util_agg_port_set(p_tm_sched_inst, BAL_UTIL_OPER_AGG_PORT_ADD);	
+                    if(BCM_ERR_OK != ret)
+                    {
+                        /* An error has occurred trying to configure mac*/
+                        BCM_LOG(ERROR, log_id_tm_sched,	"Failed to configure ALLOC ID at mac (%s)\n",bcmos_strerror(ret));
+                        break;		
+                    }
+                }
+                break;
+            
+                case BCMBAL_TM_SCHED_OWNER_TYPE_VIRTUAL:
+                default:
+                    BCM_LOG(ERROR, log_id_tm_sched, "nothing to do with owner type %d \n", p_tm_sched_inst->current_tm_sched_info.data.owner.type);
+                    return BCM_ERR_PARM;
+                break;
+            }
+        }
+    }while(0);
+
+    return ret;
+}
+
+
+bcmos_errno bcmbal_tm_sched_unset_owner(tm_sched_inst *p_tm_sched_inst)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    bcmbal_tm_sched_owner *owner;
+    bcmbal_tm_queue_key tm_queue_key;	
+    queue_entry *current_queue_entry;
+	tm_sched_inst *p_parent_tm_sched_inst;
+	
+    BUG_ON(NULL == p_tm_sched_inst);
+
+    tm_queue_key.sched_id = p_tm_sched_inst->req_tm_sched_info.key.id;
+    tm_queue_key.sched_dir = p_tm_sched_inst->req_tm_sched_info.key.dir;
+
+    do
+    {
+        if( BCMBAL_CFG_PROP_IS_SET(&p_tm_sched_inst->req_tm_sched_info, tm_sched, owner))
+        {
+            owner = &(p_tm_sched_inst->req_tm_sched_info.data.owner);
+            switch(owner->type)
+            {	 
+                case BCMBAL_TM_SCHED_OWNER_TYPE_INTERFACE:
+                {
+                    /*remove all assigned queues*/
+                    TAILQ_FOREACH(current_queue_entry,
+                        &p_tm_sched_inst->queues_list,
+                        next)
+                    {
+                        tm_queue_key.id = current_queue_entry->queue_id;
+                        if(BCM_ERR_OK != (ret = bcmbal_tm_queue_unset_owner(tm_queue_key)))
+                        {
+                            BCM_LOG(ERROR, log_id_tm_sched,	"Could not unset queue sched id = %d sched dir = %s queue id = %d of the tm sched (%s) \n", 
+                                tm_queue_key.sched_id, TM_SCHED_DIR_TO_STR(tm_queue_key.sched_dir), tm_queue_key.id, bcmos_strerror(ret));                        
+                            break;
+                        }
+                    }
+                    /*unset from parent scheduler*/
+                    if(BCMBAL_CFG_PROP_IS_SET(&(p_tm_sched_inst->req_tm_sched_info), tm_sched, sched_parent))					
+                    {
+                        if(BCM_ERR_OK == (ret = bcmbal_tm_sched_validate_sched_parent(&(p_tm_sched_inst->req_tm_sched_info), &p_parent_tm_sched_inst)))
+                        {
+                            if(BCM_ERR_OK == (ret = bcmbal_tm_sched_sub_scheds_list_entry_remove(p_parent_tm_sched_inst, p_tm_sched_inst->req_tm_sched_info.key.id)))
+                            {
+                                BCM_LOG(ERROR, log_id_tm_sched,	"could not remove scheduler dir = %s id = %d as parent of sched dir = %s id = %d (err= %s)\n",
+                                        TM_SCHED_DIR_TO_STR(p_tm_sched_inst->req_tm_sched_info.key.dir), p_tm_sched_inst->req_tm_sched_info.data.sched_parent.sched_id,
+                                        TM_SCHED_DIR_TO_STR(p_tm_sched_inst->req_tm_sched_info.key.dir), p_tm_sched_inst->req_tm_sched_info.key.id, bcmos_strerror(ret));
+                            }
+                        }
+                        else
+                        {
+                            BCM_LOG(ERROR, log_id_tm_sched,	"could not validate scheduler dir = %s id = %d as parent of sched dir = %s id = %d (err= %s)\n",
+                                    TM_SCHED_DIR_TO_STR(p_tm_sched_inst->req_tm_sched_info.key.dir), p_tm_sched_inst->req_tm_sched_info.data.sched_parent.sched_id,
+                                    TM_SCHED_DIR_TO_STR(p_tm_sched_inst->req_tm_sched_info.key.dir), p_tm_sched_inst->req_tm_sched_info.key.id, bcmos_strerror(ret));
+                        }
+                    }
+					
+                    /*no need to validate owner attributes as these are read only and set by VALID internal objects*/
+                    if(BCM_ERR_OK != (ret = sw_util_tm_sched_clear(p_tm_sched_inst)))
+                    {
+                        BCM_LOG(ERROR, log_id_tm_sched,	"error %s detected by switch util while clearing tm sched\n", bcmos_strerror(ret));
+                        break;
+                    }
+                    p_tm_sched_inst->fsm_state = TM_SCHED_FSM_STATE_INACTIVE;
+                
+                }
+                break;
+
+                case BCMBAL_TM_SCHED_OWNER_TYPE_AGG_PORT:
+                case BCMBAL_TM_SCHED_OWNER_TYPE_SUB_TERM:
+                case BCMBAL_TM_SCHED_OWNER_TYPE_UNI:
+                case BCMBAL_TM_SCHED_OWNER_TYPE_VIRTUAL:
+                default:
+				{
+                    BCM_LOG(ERROR, log_id_tm_sched, "nothing to do with unsetting owner type %d \n", 
+                           p_tm_sched_inst->current_tm_sched_info.data.owner.type);
+                    ret = BCM_ERR_PARM;
+				}
+                break;
+            }
+        }
+    }while(0);
+    return ret;
+
+}
+
+/*for the auto create, only key dir is set, id will be allocated from rsc mgr*/
+bcmos_errno bcmbal_tm_sched_auto_create(bcmbal_tm_sched_cfg cfg, tm_sched_inst **p_tm_sched_inst)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    do
+    {
+        cfg.key.id = 0;  /* 0 is a magic number telling the resource manager that it should provide the initial allocation of the  tm sched id*/
+        if(BCM_ERR_OK != (ret = _rsc_mgr_tm_sched_auto_id_alloc(&cfg.key.id)))
+        {    
+            BCM_LOG(ERROR, log_id_tm_sched,"Could not allocate a tm sched auto id \n");
+            break;
+        }
+        *p_tm_sched_inst = tm_sched_inst_get(cfg.key, TM_SCHED_FLAG_FREE);
+        if(NULL == p_tm_sched_inst)
+        {
+            /* This is a fatal error condition */
+            BCM_LOG(ERROR, log_id_tm_sched,
+                "ERROR - could not allocate tm sched No further processing\n");
+            ret = BCM_ERR_NOMEM;
+            break;
+        }
+        BCM_LOG(DEBUG, log_id_tm_sched,
+            "\n Tm Sched id %d dir %s was created \n", cfg.key.id, TM_SCHED_DIR_TO_STR(cfg.key.dir));
+        
+        (*p_tm_sched_inst)->req_tm_sched_info = cfg;
+        ret = tm_sched_fsm_create(*p_tm_sched_inst, NULL,NULL);	
+    }while(0);
+    return ret;
+}
+
+static bcmos_errno bcmbal_tm_sched_queues_list_entry_add(tm_sched_inst *p_tm_sched_inst, bcmbal_tm_queue_key queue_key)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    queue_entry *current_entry;
+
+    do
+    {
+        /* Check if the id is already on the list before adding it */
+        TAILQ_FOREACH(current_entry,
+                      &p_tm_sched_inst->queues_list,
+                      next)
+        {
+            if(current_entry->queue_id == queue_key.id)
+            {
+                return BCM_ERR_ALREADY;
+            }
+        }
+
+        /* Get a new entry and configure it */
+        current_entry = bcmos_calloc(sizeof(queue_entry));
+
+        if(NULL == current_entry)
+        {
+            BCM_LOG(ERROR, log_id_tm_sched,
+                    "No memory available to add queue\n");
+            ret = BCM_ERR_NOMEM;
+            break;
+        }
+
+        current_entry->queue_id  = queue_key.id;
+
+        BCM_LOG(DEBUG, log_id_tm_sched,
+                "adding queue id %u to tm sched %u\n", queue_key.id, p_tm_sched_inst->req_tm_sched_info.key.id);
+
+        /* Save the entry on the list of queues ids on this sched*/
+        TAILQ_INSERT_TAIL(&p_tm_sched_inst->queues_list,
+                          current_entry, next);
+        (p_tm_sched_inst->num_queues_on_node)++;
+    } while(0);
+    return ret;
+}
+
+static bcmos_errno bcmbal_tm_sched_queues_list_entry_remove(tm_sched_inst *p_tm_sched_inst, bcmbal_tm_queue_key queue_key)
+{
+    bcmos_errno ret = BCM_ERR_NOENT;
+    queue_entry *current_entry, *p_temp_entry;
+
+    do
+    {
+
+        /* Check if the id is on the list */
+        TAILQ_FOREACH_SAFE(current_entry,
+                           &p_tm_sched_inst->queues_list,
+                           next,
+                           p_temp_entry)
+        {
+            if(current_entry->queue_id == queue_key.id)
+            {
+                /* Remove it from the list of queues ids on this sched*/
+                TAILQ_REMOVE(&p_tm_sched_inst->queues_list,
+                             current_entry, next);
+
+                bcmos_free(current_entry);
+
+                (p_tm_sched_inst->num_queues_on_node)--;
+                ret = BCM_ERR_OK;
+                break;
+
+            }
+        }
+    } while(0);
+
+    return ret;
+}
+
+static bcmos_errno queues_list_fill(tm_sched_inst *p_tm_sched_inst,
+                                         bcmbal_tm_queue_id_list_u8 *queues_list)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    queue_entry *current_entry = NULL;
+    int ii = 0;
+
+    do
+    {
+     
+        /* Traverse the list of queues recorded and fill in the list to be returned */
+        queues_list->len = p_tm_sched_inst->num_queues_on_node;
+        queues_list->val = bcmos_calloc(sizeof(bcmbal_tm_queue_id) * queues_list->len);
+
+        if(NULL == queues_list->val)
+        {
+            BCM_LOG(ERROR, log_id_tm_sched,
+                    "No memory available\n");
+            ret = BCM_ERR_NOMEM;
+            break;
+        }
+
+       TAILQ_FOREACH(current_entry,
+                      &p_tm_sched_inst->queues_list,
+                      next)
+        {
+            BCM_LOG(DEBUG, log_id_tm_sched,
+                    "adding queue %d to response at array location %d\n",
+                    current_entry->queue_id,
+                    ii);
+            queues_list->val[ii++] = current_entry->queue_id;
+        }
+    } while(0);
+    return ret;
+}
+
+static bcmos_errno bcmbal_tm_sched_sub_scheds_list_entry_add(tm_sched_inst *p_tm_sched_inst, bcmbal_tm_sched_id sched_id)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    sub_sched_entry *current_entry;
+
+	BUG_ON(NULL == p_tm_sched_inst);
+
+    do
+    {
+        /* Check if the id is already on the list before adding it */
+        TAILQ_FOREACH(current_entry,
+                      &p_tm_sched_inst->sub_scheds_list,
+                      next)
+        {
+            if(current_entry->sched_id == sched_id)
+            {
+                return BCM_ERR_ALREADY;
+            }
+        }
+
+        /* Get a new entry and configure it */
+        current_entry = bcmos_calloc(sizeof(sub_sched_entry));
+
+        if(NULL == current_entry)
+        {
+            BCM_LOG(ERROR, log_id_tm_sched,
+                    "No memory available to add sub sched\n");
+            ret = BCM_ERR_NOMEM;
+            break;
+        }
+
+        current_entry->sched_id = sched_id;
+
+        BCM_LOG(DEBUG, log_id_tm_sched,
+                "adding sub sched id %u to tm sched dir = %s id = %u\n", 
+                sched_id, TM_SCHED_DIR_TO_STR(p_tm_sched_inst->req_tm_sched_info.key.dir), p_tm_sched_inst->req_tm_sched_info.key.id);
+
+        /* Save the entry on the list of sub_scheds on that tm sched */
+        TAILQ_INSERT_TAIL(&p_tm_sched_inst->sub_scheds_list,
+                          current_entry, next);
+        (p_tm_sched_inst->num_sub_scheds_on_node)++;
+		
+    } while(0);
+    return ret;
+}
+
+static bcmos_errno bcmbal_tm_sched_sub_scheds_list_entry_remove(tm_sched_inst *p_tm_sched_inst, bcmbal_tm_sched_id sched_id)
+{
+    bcmos_errno ret = BCM_ERR_NOENT;
+    sub_sched_entry *current_entry, *p_temp_entry;
+
+    do
+    {
+
+        /* Check if the id is on the list */
+        TAILQ_FOREACH_SAFE(current_entry,
+                           &p_tm_sched_inst->sub_scheds_list,
+                           next,
+                           p_temp_entry)
+        {
+            if(current_entry->sched_id == sched_id)
+            {
+                /* Remove it from the list of sub_scheds ids on this sched*/
+                TAILQ_REMOVE(&p_tm_sched_inst->sub_scheds_list,
+                             current_entry, next);
+
+                bcmos_free(current_entry);
+
+                (p_tm_sched_inst->num_sub_scheds_on_node)--;
+                ret = BCM_ERR_OK;
+                break;
+
+            }
+        }
+    } while(0);
+
+    return ret;
+}
+
+static bcmos_errno sub_scheds_list_fill(tm_sched_inst *p_tm_sched_inst,
+                                         bcmbal_tm_sched_id_list_u8 *sub_scheds_list)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    sub_sched_entry *current_entry = NULL;
+    int ii = 0;
+
+    do
+    {
+     
+        /* Traverse the list of sub_scheds_ids recorded and fill in the list to be returned */
+        sub_scheds_list->len = p_tm_sched_inst->num_sub_scheds_on_node;
+        sub_scheds_list->val = bcmos_calloc(sizeof(bcmbal_tm_sched_id) * sub_scheds_list->len);
+
+        if(NULL == sub_scheds_list->val)
+        {
+            BCM_LOG(ERROR, log_id_tm_sched,
+                    "No memory available\n");
+            ret = BCM_ERR_NOMEM;
+            break;
+        }
+
+       TAILQ_FOREACH(current_entry,
+                      &p_tm_sched_inst->sub_scheds_list,
+                      next)
+        {
+            BCM_LOG(DEBUG, log_id_tm_sched,
+                    "adding sub sched %d to response at array location %d\n",
+                    current_entry->sched_id,
+                    ii);
+            sub_scheds_list->val[ii++] = current_entry->sched_id;
+        }
+
+    } while(0);
+
+    return ret;
+}
+
+bcmos_errno bcmbal_tm_sched_set_queue(tm_queue_inst *p_tm_queue_inst)
+{
+	bcmos_errno  ret = BCM_ERR_OK;
+	tm_sched_inst *p_tm_sched_inst = NULL;
+	bcmbal_tm_sched_key tm_sched_key;
+	BUG_ON(NULL == p_tm_queue_inst);
+	do
+    {
+        tm_sched_key.id = p_tm_queue_inst->api_req_tm_queue_info.key.sched_id;
+        tm_sched_key.dir= p_tm_queue_inst->api_req_tm_queue_info.key.sched_dir;
+        p_tm_sched_inst = tm_sched_inst_get(tm_sched_key, TM_SCHED_FLAG_ACTIVE);
+		
+        if(NULL == p_tm_sched_inst)
+        {
+            BCM_LOG(ERROR, log_id_tm_sched,
+                    "ERROR - could not find an active tm sched (dir = %s id = %d) to attach the queue (id = %d)\n",
+                    TM_SCHED_DIR_TO_STR(tm_sched_key.dir), tm_sched_key.id,p_tm_queue_inst->api_req_tm_queue_info.key.id);
+            ret = BCM_ERR_NOENT;
+            break;
+        }
+        ret = bcmbal_tm_sched_queues_list_entry_add(p_tm_sched_inst, p_tm_queue_inst->api_req_tm_queue_info.key);
+        if(BCM_ERR_OK != ret)
+       	{
+            BCM_LOG(ERROR, log_id_tm_sched,
+                    "ERROR - could not add the queue entry to the sched\n");
+            break;
+        }
+        if(TM_SCHED_FSM_STATE_ACTIVE == p_tm_sched_inst->fsm_state)
+        {
+            if(BCM_ERR_OK != (ret = bcmbal_tm_queue_activate(p_tm_queue_inst)))
+            {
+                BCM_LOG(ERROR, log_id_tm_sched,
+                        "ERROR - could not activate the newly added queue \n");
+                break;
+            }
+        }
+    }while(0);
+    return ret;
+}
+
+bcmos_errno bcmbal_tm_sched_remove_queue(tm_queue_inst *p_tm_queue_inst)
+{
+    bcmos_errno  ret = BCM_ERR_OK;
+    tm_sched_inst *p_tm_sched_inst = NULL;
+    bcmbal_tm_sched_key tm_sched_key;
+    BUG_ON(NULL == p_tm_queue_inst);
+    do
+    {
+        tm_sched_key.id = p_tm_queue_inst->api_req_tm_queue_info.key.sched_id;
+        tm_sched_key.dir= p_tm_queue_inst->api_req_tm_queue_info.key.sched_dir;
+        p_tm_sched_inst = tm_sched_inst_get(tm_sched_key, TM_SCHED_FLAG_ACTIVE);
+        
+        if(NULL == p_tm_sched_inst)
+        {
+            BCM_LOG(ERROR, log_id_tm_sched,
+                    "ERROR - could not find an active tm sched (dir = %s id = %d) to attach the queue (id = %d)\n",
+                    TM_SCHED_DIR_TO_STR(tm_sched_key.dir), tm_sched_key.id,p_tm_queue_inst->api_req_tm_queue_info.key.id);
+            ret = BCM_ERR_NOENT;
+            break;
+        }
+        if(BCM_ERR_OK != (ret = bcmbal_tm_sched_queues_list_entry_remove(p_tm_sched_inst, p_tm_queue_inst->api_req_tm_queue_info.key)))
+        {
+            BCM_LOG(ERROR, log_id_tm_sched,
+                "ERROR - could not remove the queue entry from the sched\n");
+            break;
+        }
+    
+    }while(0);
+    return ret;
+}
+
+/*tm_sched_find_by_owner - currently might be called for agg port and uni port only*/
+static tm_sched_inst* tm_sched_find_by_owner(bcmbal_tm_sched_owner owner)
+{
+    tm_sched_inst *current_entry = NULL;
+    
+    TAILQ_FOREACH(current_entry,
+        &TM_SCHED_FSM_TM_SCHED_LIST_CTX_PTR->active_tm_sched_list,
+        tm_sched_inst_next)
+    {    
+        if(BCMBAL_CFG_PROP_IS_SET(&current_entry->req_tm_sched_info, tm_sched,owner))
+        {
+            switch(current_entry->req_tm_sched_info.data.owner.type)
+            {
+                case BCMBAL_TM_SCHED_OWNER_TYPE_AGG_PORT:
+                {
+                    if((owner.u.agg_port.intf_id == current_entry->req_tm_sched_info.data.owner.u.agg_port.intf_id)
+                        && (owner.u.agg_port.agg_port_id == current_entry->req_tm_sched_info.data.owner.u.agg_port.agg_port_id))
+                    {            
+                        BCM_LOG(DEBUG, log_id_tm_sched,  "Found active tm_sched dir = us id= %d for agg_port_id %d intf_id %d\n",
+                            current_entry->req_tm_sched_info.key.id, owner.u.agg_port.agg_port_id, owner.u.agg_port.intf_id);
+				        return current_entry;
+                    }
+                }
+                break;
+                
+        		case BCMBAL_TM_SCHED_OWNER_TYPE_UNI:
+                {
+                    if((owner.u.uni.intf_id == current_entry->req_tm_sched_info.data.owner.u.uni.intf_id)
+                        && (owner.u.uni.sub_term_id == current_entry->req_tm_sched_info.data.owner.u.uni.sub_term_id)
+                        && (owner.u.uni.idx == current_entry->req_tm_sched_info.data.owner.u.uni.idx))
+                    {    
+                        BCM_LOG(DEBUG, log_id_tm_sched, "Found active tm_sched id = %d for uni intf_id = %d sub_id = %d uni_id = %d\n",
+                            current_entry->req_tm_sched_info.key.id, owner.u.uni.intf_id, owner.u.uni.sub_term_id, owner.u.uni.idx);
+                        return current_entry;
+                    }				
+                }
+        		
+                default:
+                break;
+            }
+        }
+    }
+    return current_entry;
+}
+
+tm_sched_inst* tm_sched_find_agg_port_node(uint8_t intf_id, bcmbal_aggregation_port_id agg_port_id)
+{
+    bcmbal_tm_sched_owner owner;
+	owner.type = BCMBAL_TM_SCHED_OWNER_TYPE_AGG_PORT;
+	owner.u.agg_port.intf_id = intf_id;
+	owner.u.agg_port.agg_port_id = agg_port_id;
+
+	return tm_sched_find_by_owner(owner);
+}
+
+
+
+static bcmos_errno tm_sched_fsm_assigned_process_util_msg(tm_sched_inst *p_tm_sched_inst, void *msg, tm_sched_fsm_event *p_event)
+{
+
+    bcmos_errno ret;
+    bal_util_msg_ind *ind_msg;
+
+    /* Parameter checks */
+    BUG_ON(NULL == p_tm_sched_inst);
+    BUG_ON(NULL == msg);
+    BUG_ON(NULL == p_event);
+
+    ind_msg = (bal_util_msg_ind *)msg;
+	
+    BCM_LOG(DEBUG, log_id_tm_sched, 
+            " Received a IND message from BAL UTIL (%s) during %s state\n",
+             subsystem_str[bcmbal_sender_get(msg)],
+      tm_sched_state_name_get(p_tm_sched_inst->fsm_state));
+
+    /* Handle response */
+    ret = ind_msg->status;
+    
+    if(BCM_ERR_OK == ret)
+    {
+        p_tm_sched_inst->fsm_state = TM_SCHED_FSM_STATE_ACTIVE;
+        bcmbal_tm_sched_object_overlay_w_src_priority(&p_tm_sched_inst->current_tm_sched_info,
+									  &p_tm_sched_inst->req_tm_sched_info);
+   	}
+    else
+    {
+        /* Error */
+        BCM_LOG(ERROR, log_id_tm_sched, 
+                "Failed in state %s;%s\n",
+                tm_sched_state_name_get(p_tm_sched_inst->fsm_state),
+                bcmos_strerror(ret));
+    }
+
+    mgmt_msg_send_balapi_ind(ret,
+                             (void *)&p_tm_sched_inst->current_tm_sched_info.hdr,
+                             log_id_tm_sched);
+
+    return ret;
+}
+
+/*currently handling util msg of alloc id setting complete only for agg port tm sched only*/
+static bcmos_errno tm_sched_fsm_deleting_process_util_msg(tm_sched_inst *p_tm_sched_inst,
+                                      void *msg,
+                                      tm_sched_fsm_event *p_event)
+{
+    bcmos_errno ret;
+    bal_util_msg_ind *ind_msg;
+    
+    /* Parameter checks */
+    BUG_ON(NULL == p_tm_sched_inst);
+    BUG_ON(NULL == msg);
+    BUG_ON(NULL == p_event);
+    
+    do
+    {
+        ind_msg = (bal_util_msg_ind *)msg;
+		
+        BCM_LOG(DEBUG, log_id_tm_sched, 
+                    " Received a IND message from BAL UTIL (%s) during %s state\n",
+                    subsystem_str[bcmbal_sender_get(msg)],
+                    tm_sched_state_name_get(p_tm_sched_inst->fsm_state));
+        
+        /* Handle response */
+        ret = ind_msg->status;
+        
+        if(BCM_ERR_OK == ret)
+        {
+             ret = tm_sched_fsm_destroy(p_tm_sched_inst);   
+        }
+        else
+        {
+            /* Error */
+            BCM_LOG(ERROR, log_id_tm_sched, 
+                    "Failed in state %s;%s\n",
+                    tm_sched_state_name_get(p_tm_sched_inst->fsm_state),
+                    bcmos_strerror(ret));
+        }    
+    }while(0);		
+    return ret;
+}
+
+static bcmos_errno tm_sched_fsm_destroy(tm_sched_inst *p_tm_sched_inst)
+{
+    queue_entry *current_entry = NULL;
+    bcmos_errno ret = BCM_ERR_OK;
+    bcmbal_tm_queue_key tm_queue_key; 	
+    tm_queue_inst *p_tm_queue_inst;
+    int i=0;	
+    bcmbal_tm_sched_owner owner;
+	
+    do
+    {
+        switch(p_tm_sched_inst->req_tm_sched_info.data.owner.type)
+        {
+            case BCMBAL_TM_SCHED_OWNER_TYPE_AGG_PORT:
+            {
+                p_tm_sched_inst->fsm_state = TM_SCHED_FSM_STATE_NULL;
+                owner = p_tm_sched_inst->req_tm_sched_info.data.owner;
+            
+                ret = rsc_mgr_alloc_id_free(owner.u.agg_port.intf_id, owner.u.agg_port.agg_port_id, NULL);
+                if(BCM_ERR_OK != ret)
+                {
+                    BCM_LOG(ERROR, log_id_tm_sched, 
+                            "Failed to free alloc id if=%d id=%d at resource manager", 
+                            owner.u.agg_port.intf_id, owner.u.agg_port.agg_port_id);
+                    break;
+                }
+                ret = tm_sched_fsm_destroy(p_tm_sched_inst);
+                if(BCM_ERR_OK != ret)
+                {
+                    BCM_LOG(ERROR, log_id_tm_sched, 
+                            "Failed to free auto created tm sched id,  id=%d at resource manager", 
+                            p_tm_sched_inst->req_tm_sched_info.key.id);
+                    break;
+                }
+                break;
+            }
+            case BCMBAL_TM_SCHED_OWNER_TYPE_INTERFACE:
+            {            
+                tm_queue_key.sched_id = p_tm_sched_inst->req_tm_sched_info.key.id;
+                tm_queue_key.sched_dir = p_tm_sched_inst->req_tm_sched_info.key.dir;
+            
+			/*delete all attached queues*/
+                TAILQ_FOREACH(current_entry,
+                    &p_tm_sched_inst->queues_list,
+                    next)
+                {
+                    
+                    BCM_LOG(DEBUG, log_id_tm_sched,
+                        "deleting queue %u (location %u)\n",
+                        current_entry->queue_id,
+                        i);
+                    tm_queue_key.id = current_entry->queue_id;
+                    
+                    p_tm_queue_inst = tm_queue_inst_get(tm_queue_key, TM_QUEUE_FLAG_ACTIVE);
+                    if(NULL == p_tm_queue_inst)
+                    {
+                        BCM_LOG(ERROR, log_id_tm_sched,"ERROR - tm queue not found.  No further processing\n");
+                        ret = BCM_ERR_NOENT;
+                        break;
+                    }
+                
+                    ret = bcmbal_tm_queue_destroy(p_tm_queue_inst, BCMOS_FALSE);
+                    if(BCM_ERR_OK != ret)
+                    {
+                        BCM_LOG(ERROR, log_id_tm_sched,"ERROR - could not destroy tm queue %d  .No further processing\n",
+							    tm_queue_key.id);
+                        ret = BCM_ERR_NOENT;
+                        break;
+                    }
+                
+                    bcmos_free(current_entry); 
+                    i++;                    
+                }
+            }
+            break;
+			
+            default:
+            break;
+        }
+        if(p_tm_sched_inst->req_tm_sched_info.data.creation_mode == BCMBAL_TM_CREATION_MODE_AUTO)
+        {
+            ret = _rsc_mgr_tm_sched_auto_id_free(p_tm_sched_inst->req_tm_sched_info.key.id);
+            if(BCM_ERR_OK != ret)
+            {
+                BCM_LOG(ERROR, log_id_tm_sched, 
+                       "Failed to free auto created tm sched id, id=%d at resource manager ",
+                       p_tm_sched_inst->req_tm_sched_info.key.id);
+                break;
+            }
+        }
+		
+        mgmt_msg_send_balapi_ind(ret,
+            (void *)&p_tm_sched_inst->req_tm_sched_info.hdr,
+            log_id_tm_sched);
+        
+        ret = tm_sched_free_by_entry(p_tm_sched_inst);
+        if(BCM_ERR_OK != ret)
+        {
+            BCM_LOG(ERROR, log_id_tm_sched, 
+                "Failed to free tm sched id=%d dir = %s",p_tm_sched_inst->req_tm_sched_info.key.id,
+                TM_SCHED_DIR_TO_STR(p_tm_sched_inst->req_tm_sched_info.key.dir));
+            break;
+        }
+    }while(0);
+    return ret;
+
+}
+	
+static bcmos_errno tm_sched_fsm_inactive_destroy(tm_sched_inst *p_tm_sched_inst, void *msg, tm_sched_fsm_event *p_event)
+{
+    return tm_sched_fsm_destroy(p_tm_sched_inst);
+}
+
+static bcmos_errno tm_sched_fsm_active_destroy(tm_sched_inst *p_tm_sched_inst, void *msg, tm_sched_fsm_event *p_event)
+{
+    return bcmbal_tm_sched_fsm_active_destroy(p_tm_sched_inst);
+}
+
+static bcmos_errno tm_sched_fsm_assigned_destroy(tm_sched_inst *p_tm_sched_inst, void *msg, tm_sched_fsm_event *p_event)
+{
+	bcmos_errno ret = bcmbal_tm_sched_fsm_active_destroy(p_tm_sched_inst);
+	if (BCM_ERR_OK == ret)
+		ret = tm_sched_fsm_destroy(p_tm_sched_inst);
+
+    return ret;
+	
+}
+bcmos_errno bcmbal_tm_sched_fsm_active_destroy(tm_sched_inst *p_tm_sched_inst)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    bcmbal_tm_sched_owner owner = p_tm_sched_inst->req_tm_sched_info.data.owner;
+    bcmbal_interface_key intf_key;
+
+		
+    switch(owner.type)
+    {
+        case BCMBAL_TM_SCHED_OWNER_TYPE_AGG_PORT:
+        {
+            uint32_t ref_count;
+            ret = rsc_mgr_alloc_id_get_ref_count(p_tm_sched_inst->req_tm_sched_info.data.owner.u.agg_port.intf_id,
+                                                 p_tm_sched_inst->req_tm_sched_info.data.owner.u.agg_port.agg_port_id, &ref_count);
+            if(1!= ref_count)
+            {
+                BCM_LOG(ERROR, log_id_tm_sched, "Cant destroy tm sched owned by agg port (if %d id %d) "
+					                           "with reference count %d (greated than 1)\n",
+                                               p_tm_sched_inst->req_tm_sched_info.data.owner.u.agg_port.intf_id,
+                                               p_tm_sched_inst->req_tm_sched_info.data.owner.u.agg_port.agg_port_id, ref_count);
+				ret = BCM_ERR_INTERNAL;
+                break;		
+            
+            }
+            ret = mac_util_agg_port_set(p_tm_sched_inst, BAL_UTIL_OPER_AGG_PORT_REMOVE);	
+            if(BCM_ERR_OK != ret)
+            {
+                /* An error has occurred trying to configure mac*/
+                BCM_LOG(ERROR, log_id_tm_sched,	"Failed to remove ALLOC ID at mac (%s)\n",bcmos_strerror(ret));
+                break;		
+            }
+            else
+            {
+                p_tm_sched_inst->fsm_state = TM_SCHED_FSM_STATE_DELETING;
+            }
+            break;
+        }
+        case BCMBAL_TM_SCHED_OWNER_TYPE_INTERFACE:
+        {
+            /*remove the setting of the sched from the owner configuration*/
+            intf_key.intf_type = owner.u.interface.intf_type;
+            intf_key.intf_id = owner.u.interface.intf_id;
+            ret = interface_tm_sched_unset(intf_key, p_tm_sched_inst->req_tm_sched_info.key);
+            tm_sched_fsm_destroy(p_tm_sched_inst);
+            break;
+        }
+
+        default:
+        break;
+    }	
+    return ret;
+
+}
+
+/*****************************************************************************/
+/**
+ * @brief A function to set an interface as a tm sched owner
+ *
+ * @param interface_key  the interface to become the owner
+ * @param p_tm_sched_inst          the tm sched instance to be set
+ *
+ * @returns bcmos_errno
+ *****************************************************************************/
+bcmos_errno bcmbal_tm_sched_set_interface_owner(bcmbal_interface_key interface_key, tm_sched_inst *p_tm_sched_inst)
+{
+    BUG_ON(NULL == p_tm_sched_inst);
+    
+    bcmos_errno ret = BCM_ERR_OK;
+    bcmbal_tm_sched_owner owner;
+    do
+    {
+        if(BCMBAL_CFG_PROP_IS_SET(&p_tm_sched_inst->req_tm_sched_info, tm_sched, owner))
+        {
+            owner = p_tm_sched_inst->req_tm_sched_info.data.owner;
+            if (BCMBAL_TM_SCHED_OWNER_TYPE_INTERFACE!= owner.type )
+            {    
+                BCM_LOG(ERROR, log_id_tm_sched, "tm sched %s%d is already assigned with an owner of type %d", 				
+                    p_tm_sched_inst->current_tm_sched_info.key.dir == BCMBAL_TM_SCHED_DIR_US ? "us" : "ds",
+                    p_tm_sched_inst->current_tm_sched_info.key.id,	owner.type );
+                break;
+            }
+            if(owner.u.interface.intf_type != interface_key.intf_type
+               || owner.u.interface.intf_id != interface_key.intf_id)
+            {
+                BCM_LOG(ERROR, log_id_tm_sched, "tm sched %s%d is already assigned with an interface owner", 
+                    p_tm_sched_inst->current_tm_sched_info.key.dir == BCMBAL_TM_SCHED_DIR_US ? "us" : "ds",
+                    p_tm_sched_inst->current_tm_sched_info.key.id);
+                
+                ret = BCM_ERR_ALREADY;		
+                break;
+            }
+        }
+        else
+        {
+            owner.type = BCMBAL_TM_SCHED_OWNER_TYPE_INTERFACE;
+            owner.u.interface.intf_type = interface_key.intf_type;
+            owner.u.interface.intf_id = interface_key.intf_id;
+            BCMBAL_CFG_PROP_SET(&p_tm_sched_inst->req_tm_sched_info, tm_sched, owner, owner);
+            ret = bcmbal_tm_sched_set_owner(p_tm_sched_inst);
+        }
+    }while(0);
+    return ret;
+}
+
+#define BCMBAL_INTERFACE_DEFAULT_NUM_OF_TM_QUEUES 4
+#define BCMBAL_INTERFACE_DEFAULT_SCHED_TYPE BCMBAL_TM_SCHED_TYPE_SP_WFQ
+#define BCMBAL_INTERFACE_DEFAULT_SCHED_CHILD_TYPE BCMBAL_TM_SCHED_CHILD_TYPE_QUEUE
+
+#define BCMBAL_TM_QUEUE_AUTO_DEFAULT_SIZE 128
+#define BCMBAL_TM_QUEUE_AUTO_DEFAULT_SBR 128
+#define BCMBAL_TM_QUEUE_AUTO_DEFAULT_PBR 128
+#define BCMBAL_TM_QUEUE_AUTO_DEFAULT_BURST_SIZE 128
+
+bcmos_errno bcmbal_tm_sched_interface_tm_auto_create(bcmbal_interface_cfg *p_interface_info)
+{
+
+    bcmos_errno ret = BCM_ERR_OK;
+    tm_sched_inst *p_tm_sched_inst = NULL;
+    bcmbal_tm_sched_cfg tm_sched_default_cfg;
+    bcmbal_tm_queue_cfg tm_queue_default_cfg;
+    bcmbal_tm_shaping default_shaping;
+    bcmbal_tm_sched_key tm_sched_key;
+    bcmbal_tm_queue_key tm_queue_key;
+    int i;
+
+     do
+    {
+	    /*create the auto tm sched*/
+    	tm_sched_key.dir = p_interface_info->key.intf_type == BCMBAL_INTF_TYPE_PON ? BCMBAL_TM_SCHED_DIR_DS : BCMBAL_TM_SCHED_DIR_US;
+	    BCMBAL_CFG_INIT(&tm_sched_default_cfg, tm_sched, tm_sched_key);
+    	BCMBAL_CFG_PROP_SET(&tm_sched_default_cfg, tm_sched, sched_type, BCMBAL_INTERFACE_DEFAULT_SCHED_TYPE);
+	    BCMBAL_CFG_PROP_SET(&tm_sched_default_cfg, tm_sched, sched_child_type, BCMBAL_INTERFACE_DEFAULT_SCHED_CHILD_TYPE);
+    	BCMBAL_CFG_PROP_SET(&tm_sched_default_cfg, tm_sched, num_priorities, BCMBAL_INTERFACE_DEFAULT_NUM_OF_TM_QUEUES);
+	    BCMBAL_CFG_PROP_SET(&tm_sched_default_cfg, tm_sched, creation_mode, BCMBAL_TM_CREATION_MODE_AUTO);
+
+	    if (BCM_ERR_OK != (ret = bcmbal_tm_sched_auto_create(tm_sched_default_cfg, &p_tm_sched_inst)))
+    	{
+		    BCM_LOG(ERROR, log_id_tm_sched,"Could not create the auto tm sched \n");
+    		break;
+	    }
+	    if (tm_sched_key.dir == BCMBAL_TM_SCHED_DIR_US)
+    	{
+		    BCMBAL_CFG_PROP_SET(p_interface_info, interface, us_tm, p_tm_sched_inst->req_tm_sched_info.key.id);
+	    }
+    	else
+	    {
+		    BCMBAL_CFG_PROP_SET(p_interface_info, interface, ds_tm, p_tm_sched_inst->req_tm_sched_info.key.id);
+	    }
+
+	    /*SET THE DEFAULT ATTRIBUTES FOR AUTO CREATED QUEUE*/
+    	tm_queue_key.sched_id = p_tm_sched_inst->req_tm_sched_info.key.id;
+	    tm_queue_key.sched_dir = p_tm_sched_inst->req_tm_sched_info.key.dir;
+		default_shaping.sbr = (uint8_t)BCMBAL_TM_QUEUE_AUTO_DEFAULT_SBR;
+		default_shaping.pbr = (uint8_t)BCMBAL_TM_QUEUE_AUTO_DEFAULT_PBR;
+		default_shaping.burst = (uint8_t)BCMBAL_TM_QUEUE_AUTO_DEFAULT_BURST_SIZE;
+	    BCMBAL_CFG_PROP_SET(&tm_queue_default_cfg, tm_queue, rate, default_shaping);
+    	BCMBAL_CFG_PROP_SET(&tm_sched_default_cfg, tm_queue, creation_mode, BCMBAL_TM_CREATION_MODE_AUTO);
+
+    	/*create its queues*/
+	    for(i=0; i<BCMBAL_INTERFACE_DEFAULT_NUM_OF_TM_QUEUES; i++)
+        {
+		    tm_queue_key.id = i;
+    		BCMBAL_CFG_INIT(&tm_queue_default_cfg, tm_queue, tm_queue_key);
+
+    		BCMBAL_CFG_PROP_SET(&tm_queue_default_cfg, tm_queue, priority, i);
+		    BCMBAL_CFG_PROP_SET(&tm_queue_default_cfg, tm_queue, rate, default_shaping);
+            if (BCM_ERR_OK != (ret = bcmbal_tm_queue_auto_create(tm_queue_default_cfg)))
+            {
+                BCM_LOG(ERROR, log_id_tm_sched,"Could not create the %d tm queue\n", i);
+                break;
+            }
+        }
+
+        ret = bcmbal_tm_sched_set_interface_owner(p_interface_info->key, p_tm_sched_inst);
+
+    }while(0);
+
+    return ret;
+}
+
+bcmos_errno bcmbal_tm_sched_set_sub_term_owner(	bcmbal_tm_sched_key tm_sched_key, const bcmbal_subscriber_terminal_cfg *p_sub_term_cfg)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    tm_sched_inst *p_tm_sched_inst;
+    bcmbal_tm_sched_owner owner;
+    
+    do
+    {
+        p_tm_sched_inst = tm_sched_inst_get(tm_sched_key, TM_SCHED_FLAG_ACTIVE);
+        if (NULL == p_tm_sched_inst)
+        {
+            BCM_LOG(ERROR, log_id_tm_sched, 
+                "tm sched dir = %s id = %d which is set as the subscriber tm does not exist \n",
+                TM_SCHED_DIR_TO_STR(tm_sched_key.dir), tm_sched_key.id);
+            ret = BCM_ERR_NOENT;
+            break;			
+        }
+        if(BCMBAL_CFG_PROP_IS_SET(&p_tm_sched_inst->req_tm_sched_info, tm_sched, owner))
+        {
+            /*check if it is already owned by that sub term*/
+            owner = p_tm_sched_inst->req_tm_sched_info.data.owner;
+            if (owner.type != BCMBAL_TM_SCHED_OWNER_TYPE_SUB_TERM)
+            {
+                BCM_LOG(ERROR, log_id_tm_sched, 
+                    "tm sched dir = %s id = %d which is set as the subscriber tm already owned with owner type %d\n",
+                    TM_SCHED_DIR_TO_STR(tm_sched_key.dir), tm_sched_key.id, owner.type);
+                ret =  BCM_ERR_PARM;
+                break;			
+            
+            }
+            if (owner.u.sub_term.intf_id != p_sub_term_cfg->key.intf_id
+                || owner.u.sub_term.sub_term_id != p_sub_term_cfg->key.sub_term_id)
+            {	
+                BCM_LOG(ERROR, log_id_tm_sched, 
+                    "tm sched dir = %s id = %d which is set as the subscriber tm already owned by sub_term intf_id = %d sub_term_id = %d\n",
+                    TM_SCHED_DIR_TO_STR(tm_sched_key.dir), tm_sched_key.id, owner.u.sub_term.intf_id, owner.u.sub_term.sub_term_id);
+                ret =  BCM_ERR_PARM;
+                break;			
+            }
+        }
+        else
+        {
+            owner.type = BCMBAL_TM_SCHED_OWNER_TYPE_SUB_TERM;
+            owner.u.sub_term.intf_id = p_sub_term_cfg->key.intf_id;
+            owner.u.sub_term.sub_term_id = p_sub_term_cfg->key.sub_term_id;
+            BCMBAL_CFG_PROP_SET(&p_tm_sched_inst->req_tm_sched_info, tm_sched, owner, owner);
+			
+            if (BCM_ERR_OK!= (ret = bcmbal_tm_sched_set_owner(p_tm_sched_inst)))
+            {            
+                BCM_LOG(ERROR, log_id_tm_sched, 
+                    "could not set sub term intf_id = %d sub_term_id = %d as the owner of tm sched dir = %s id = %d which is set as the subscriber tm \n",
+                    owner.u.sub_term.intf_id, owner.u.sub_term.sub_term_id, TM_SCHED_DIR_TO_STR(tm_sched_key.dir), tm_sched_key.id);
+                break;			
+            }
+        }        
+    }while (0);
+    return ret;
+}
+
+/*@}*/
diff --git a/bal_release/src/core/main/tm_sched_fsm.h b/bal_release/src/core/main/tm_sched_fsm.h
new file mode 100644
index 0000000..ea39a4f
--- /dev/null
+++ b/bal_release/src/core/main/tm_sched_fsm.h
@@ -0,0 +1,156 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file tm_sched_fsm.h
+ * @brief Code to support the BAL TM Sched FSM
+ *
+ */
+
+#ifndef TM_SCHED_FSM_H
+#define TM_SCHED_FSM_H
+
+/*@{*/
+
+#include <bcmos_system.h>
+#include <bal_api.h>
+#include <tm_queue_fsm.h>
+
+/* set the total pool size of available tm sched instances to 4k */
+#define TM_SCHED_ALLOCATION_BLOCK_SIZE  (4096)
+
+typedef enum
+{
+    TM_SCHED_FSM_EVENT_TYPE_NONE       = -1,
+    TM_SCHED_FSM_EVENT_TYPE_CREATE     ,
+    TM_SCHED_FSM_EVENT_TYPE_DESTROY    ,
+    TM_SCHED_FSM_EVENT_TYPE_ASSIGN        ,
+    TM_SCHED_FSM_EVENT_TYPE_UTIL_MSG   ,
+
+    TM_SCHED_FSM_EVENT_TYPE__LAST,
+    TM_SCHED_FSM_EVENT_TYPE__NUM_OF
+} tm_sched_fsm_event_type;
+
+
+
+typedef enum
+{
+    TM_SCHED_FSM_STATE_NONE =     -1,
+    TM_SCHED_FSM_STATE_NULL         ,
+    TM_SCHED_FSM_STATE_INACTIVE   ,
+    TM_SCHED_FSM_STATE_ASSIGNED   ,
+    TM_SCHED_FSM_STATE_ACTIVE   ,
+    TM_SCHED_FSM_STATE_DELETING     ,
+ 
+    TM_SCHED_FSM_STATE__LAST,
+    TM_SCHED_FSM_STATE__NUM_OF
+} tm_sched_fsm_state;
+
+
+typedef enum
+{
+    TM_SCHED_FLAG_ACTIVE =     1<<0,    /**< A tm_sched is on the active list */
+    TM_SCHED_FLAG_FREE =       1<<1,    /**< A tm_sched is on the free list */
+    TM_SCHED_FLAG_ANY =        (TM_SCHED_FLAG_ACTIVE | TM_SCHED_FLAG_FREE),    /**< A tm_sched is on either the active or free list */
+} tm_sched_flag;
+
+
+typedef struct tm_sched_fsm_event_t
+{
+    tm_sched_fsm_event_type event_type;   /**< The tm_sched fsm events */
+    void             *msg;
+
+    /* other necessary information */
+} tm_sched_fsm_event;
+
+typedef struct queue_entry
+{
+    bcmbal_tm_queue_id queue_id;
+    TAILQ_ENTRY(queue_entry) next; /**< TAILQ link */    
+}queue_entry;
+
+typedef struct sub_sched_entry
+{
+    bcmbal_tm_sched_id sched_id;
+    TAILQ_ENTRY(sub_sched_entry) next; /**< TAILQ link */    
+}sub_sched_entry;
+
+typedef struct tm_sched_inst tm_sched_inst;
+struct tm_sched_inst
+{
+    bcmbal_tm_sched_cfg    current_tm_sched_info;   /**< The current information for this tm_sched (used for GET) */
+    bcmbal_tm_sched_cfg    req_tm_sched_info;   /**< The last tm_sched object info received from the Public API */	
+    uint16_t             num_queues_on_node;   /**< The number of queues attached to this node */
+    TAILQ_HEAD(queues_list_head, queue_entry) queues_list;	
+    uint16_t             num_sub_scheds_on_node;   /**< The number of sub schedulers for this tm sched */
+    TAILQ_HEAD(sub_scheds_list_head, sub_sched_entry) sub_scheds_list;
+    tm_sched_fsm_state     fsm_state;          /**< The tm_sched FSM state */
+    TAILQ_ENTRY(tm_sched_inst) tm_sched_inst_next; /**< TAILQ link */
+};
+
+
+/* 
+ * Group FSM data structures
+ */
+typedef struct tm_sched_fsm_ctx
+{
+    /* Lists of free tm_sched entries and active tm_sched entries
+     */
+    TAILQ_HEAD(free_tm_sched_list_head, tm_sched_inst) free_tm_sched_list;
+
+    TAILQ_HEAD(active_tm_sched_list_head, tm_sched_inst) active_tm_sched_list;
+
+} tm_sched_fsm_ctx;
+
+
+/* Function declarations */
+
+extern bcmos_errno tm_sched_fsm_init(void);
+extern bcmos_errno tm_sched_fsm_finish(void);
+extern bcmos_errno process_tm_sched_util_msg(void *msg_payload);
+extern bcmos_errno process_tm_sched_object(void *msg_payload);
+
+tm_sched_inst *tm_sched_inst_get(bcmbal_tm_sched_key key, tm_sched_flag search_flag);
+bcmos_errno bcmbal_tm_sched_auto_create(bcmbal_tm_sched_cfg cfg, tm_sched_inst **p_tm_sched_inst);
+bcmos_errno bcmbal_tm_sched_set_owner(tm_sched_inst *p_tm_sched_inst);
+bcmos_errno bcmbal_tm_sched_unset_owner(tm_sched_inst *p_tm_sched_inst);
+bcmos_errno bcmbal_tm_sched_set_queue(tm_queue_inst *p_tm_queue_inst);
+bcmos_errno bcmbal_tm_sched_remove_queue(tm_queue_inst *p_tm_queue_inst);
+tm_sched_inst * tm_sched_find_agg_port_node(uint8_t intf_id, bcmbal_aggregation_port_id agg_port_id);
+bcmos_errno bcmbal_tm_sched_fsm_active_destroy(tm_sched_inst *p_tm_sched_inst);
+
+
+
+#define TM_SCHED_DIR_TO_STR(dir) ((dir) == BCMBAL_TM_SCHED_DIR_DS ? "ds" : "us")
+/*@}*/
+
+#endif /*TM_SCHED_FSM_H */
+
diff --git a/bal_release/src/core/platform/bcmos_platform.h b/bal_release/src/core/platform/bcmos_platform.h
new file mode 100644
index 0000000..a2e95b4
--- /dev/null
+++ b/bal_release/src/core/platform/bcmos_platform.h
@@ -0,0 +1,99 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+#ifndef BCMOS_PLATFORM_H_
+#define BCMOS_PLATFORM_H_
+
+#ifndef BCMOS_SYSTEM_H_
+#error Please do not include bcmos_platform.h directly. Include bcmos_system.h
+#endif
+
+#include <bal_osmsg.h>
+
+/** BAL CORE CPU core
+ * \ingroup system_task */
+typedef enum
+{
+    BCMOS_CPU_CORE_ANY,                         /**< Any core */
+
+    BCMOS_CPU_CORE__NUM_OF = 1,                 /**< Number of cores */
+} bcmos_core;
+
+/*
+ * BAL CORE modules
+ *
+ * \ingroup system_module
+ */
+typedef enum
+{
+    BCMOS_MODULE_ID_NONE,                       /**< no module */
+
+    BCMOS_MODULE_ID_WORKER_MGMT,                /** worker module for MGMT message handling */
+    BCMOS_MODULE_ID_WORKER_API_IND,             /** worker module for BAL API INDICATION message handling */
+    BCMOS_MODULE_ID_WORKER_BAL_CORE_FOR_AGENT,  /** worker module for the BAL CORE when running as an OF agent */
+    BCMOS_MODULE_ID_USER_APPL_EON,              /** EON module */
+    BCMOS_MODULE_ID_USER_APPL_EPON_OAM,         /** EPON OAM module */
+    BCMOS_MODULE_ID_OFPAL,                      /** OF-PAL module */
+	BCMOS_MODULE_ID_OMCI_TRANSPORT,         /** OMCI Transport module */
+
+    BCMOS_MODULE_ID__NUM_OF,                    /**< Number of modules */
+    BCMOS_MODULE_ID_INVALID = BCMOS_MODULE_ID_NONE
+} bcmos_module_id;
+
+/*
+ * BAL CORE event group. Each group supports up to 32 events.
+ *
+ * \ingroup system_event
+ */
+typedef enum
+{
+    BCMOS_EVENT_FIRST,
+
+    BCMOS_EVENT_ID__NUM_OF,                     /**< Number of event groups */
+} bcmos_event_id;
+
+/** Message hash size
+ * \ingroup system_msg
+ */
+#define BCMOS_MSG_HASH_SIZE     512
+
+/*
+ * Task priorities
+ */
+#define TASK_PRIORITY_IPC_RX            	BCMOS_TASK_PRIORITY_3
+#define TASK_PRIORITY_CLI              		BCMOS_TASK_PRIORITY_15
+#define TASK_PRIORITY_WORKER            	BCMOS_TASK_PRIORITY_16
+#define TASK_PRIORITY_USER_APPL_EON     	BCMOS_TASK_PRIORITY_17
+#define TASK_PRIORITY_OFPAL            		BCMOS_TASK_PRIORITY_18
+#define TASK_PRIORITY_OMCI_TRANSPORT        BCMOS_TASK_PRIORITY_20
+#define TASK_PRIORITY_DEV_LOG           	BCMOS_TASK_PRIORITY_30
+
+#endif /* BCMOS_PLATFORM_H_ */
diff --git a/bal_release/src/core/util/mac/Makefile b/bal_release/src/core/util/mac/Makefile
new file mode 100644
index 0000000..8594d20
--- /dev/null
+++ b/bal_release/src/core/util/mac/Makefile
@@ -0,0 +1,43 @@
+###############################################################################
+#
+#  <:copyright-BRCM:2016:DUAL/GPL:standard
+#
+#     Copyright (c) 2016 Broadcom
+#     All Rights Reserved
+#
+#  Unless you and Broadcom execute a separate written software license
+#  agreement governing use of this software, this software is licensed
+#  to you under the terms of the GNU General Public License version 2
+#  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+#  with the following added to such license:
+#
+#     As a special exception, the copyright holders of this software give
+#     you permission to link this software with independent modules, and
+#     to copy and distribute the resulting executable under terms of your
+#     choice, provided that you also meet, for each linked independent
+#     module, the terms and conditions of the license of that module.
+#     An independent module is a module which is not derived from this
+#     software.  The special exception does not apply to any modifications
+#     of the software.
+#
+#  Not withstanding the above, under no circumstances may you combine
+#  this software in any way with any other Broadcom software provided
+#  under a license other than the GPL, without Broadcom's express prior
+#  written consent.
+#
+#  :>
+#
+###############################################################################
+# BAL core CLI application
+#
+MOD_NAME = bal_mac_util
+MOD_TYPE = lib
+MOD_DEPS = dev_log utils maple_sdk os_cli bal_api bal_app_utils balutils topology
+EXTRA_CFLAGS += -I$(SRC_DIR)/../../main
+
+srcs = bal_mac_util.c bal_mac_util_gpon.c bal_mac_util_xgpon.c bal_mac_util_common_itu_pon.c bal_mac_util_db_apis.c bal_mac_util_loopback.c bal_mac_util_epon.c
+
+ifeq ("$(SWITCH)", "qax")
+       MOD_DEFS += -DQAX_SWITCH
+endif
+
diff --git a/bal_release/src/core/util/mac/bal_mac_util.c b/bal_release/src/core/util/mac/bal_mac_util.c
new file mode 100644
index 0000000..3824996
--- /dev/null
+++ b/bal_release/src/core/util/mac/bal_mac_util.c
@@ -0,0 +1,2467 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *
+ *  :>
+ *
+ *****************************************************************************/
+
+/**
+ * @file bal_mac_util.c
+ *
+ * @brief mac util interfaces definition used by Bal Core
+ *
+ * This file expose the APIs to the core to configure the mac
+ * with regarding to the operation of access terminal, interface, subscriber terminal and flow.
+ *
+ * @addtogroup mac_util
+ */
+
+/*@{*/
+
+#include <bal_mac_util.h>
+#include <bal_mac_util_common_itu_pon.h>
+#include <bal_mac_util_epon.h>
+
+#include <bal_worker.h>
+#include <bal_core.h>
+#include <bal_cli.h>
+
+#ifdef BOARD
+#include <bcmolt_board.h>
+#include <bcmolt_board_cli.h>
+#endif
+#include <bcm_api_cli.h>
+#include <bcmolt_dev_selector.h>
+#include <bcmolt_host_sw_version.h>
+#include <bcmolt_model_revision.h>
+
+#ifdef ENABLE_LOG
+
+#define INBOLD_BAD(a) "\033[31m"a"\033[0m"
+/*
+ * mac util logging for generic logging, as well as on per PON basis
+ */
+dev_log_id   log_id_mac_util;
+dev_log_id   log_id_mac_util_pon_if[NUM_SUPPORTED_SUBSCRIBER_INTERFACES];
+
+/** @def size of log Id string */
+#define MAC_UTIL_LOG_STR_SZ 64
+
+/** @def to make a log string for a PON interface, to register with logging module during initialization */
+#define MAC_UTIL_MAKE_LOG_STR_FOR_PON_IF(_pon_if_id, _buf, _buf_sz) \
+    do                                                              \
+    {                                                               \
+        int n = 0;                                                  \
+        n = snprintf((_buf), (_buf_sz), "MAC_UTIL_PON_%d", (_pon_if_id));     \
+        BUG_ON((0 > n) || ((_buf_sz) <= n));                        \
+    } while (0);                                                    \
+
+static bcmos_errno mac_util_register_logging_per_pon (void);
+#endif  //ENABLE_LOG
+
+/* This is not exposed in the object model, so we can use BCMOLT_SYSTEM_MODE__NUM_OF as a special value for loopback. */
+#define BCMOLT_SYSTEM_MODE_LOOPBACK BCMOLT_SYSTEM_MODE__NUM_OF
+#define BCM_TOPO_PON_MODE_LOOPBACK BCM_TOPO_PON_MODE__NUM_OF
+
+static bcmos_errno mac_util_indication_handle_for_device (bcmolt_devid device_id, bcmolt_msg *p_msg);
+static bcmos_errno mac_util_system_mode_get(bcmolt_devid device_id);
+
+/* Maple CLI directory */
+static bcmcli_entry *maple_dir;
+
+/** @brief array stores the list of device related auto indications from Maple to subscribe */
+static mac_util_ind_obj_and_handlers mac_util_device_ind_handlers[] =
+{
+    {BCMOLT_OBJ_ID_DEVICE,          "BCMOLT_OBJ_ID_DEVICE", mac_util_indication_handle_for_device}
+};
+
+
+
+#if !defined(WRX_BUILD)
+/* external structures to be used with bcmos_tr
+ * specifying IP:Port assignments of the remote mac device */
+extern uint32_t bcmtr_olt_ip[BCMTR_MAX_OLTS];
+extern uint16_t bcmtr_olt_udp_port[BCMTR_MAX_OLTS];
+extern uint16_t bcmtr_host_udp_port;
+#endif
+
+
+
+/**
+ * @brief BAL request handlers for system mode specific set & validate
+ **/
+static mac_util_bal_req_handlers_for_system_mode_t mac_util_bal_req_handlers_for_system_mode[] =
+{
+    [BCMOLT_SYSTEM_MODE_GPON__16_X] =
+    {
+        .acc_term_set = mac_util_access_terminal_set_for_gpon_16,
+        .acc_term_post_indication_set = mac_util_access_terminal_post_indication_set_for_gpon
+    },
+    [BCMOLT_SYSTEM_MODE_GPON__8_X] =
+    {
+        .acc_term_set = mac_util_access_terminal_set_for_gpon_8,
+        .acc_term_post_indication_set = mac_util_access_terminal_post_indication_set_for_gpon
+    },
+    [BCMOLT_SYSTEM_MODE_XGPON_1__8_X] =
+    {
+        .acc_term_set = mac_util_access_terminal_set_for_xgpon_8,
+        .acc_term_post_indication_set = mac_util_access_terminal_post_indication_set_for_xgpon_xgs
+    },
+    [BCMOLT_SYSTEM_MODE_XGS__2_X_10_G] =
+    {
+        .acc_term_set = mac_util_access_terminal_set_for_xgs,
+        .acc_term_post_indication_set = mac_util_access_terminal_post_indication_set_for_xgpon_xgs
+    },
+    [BCMOLT_SYSTEM_MODE_EPON__8_X_COEXISTENCE_TDMA] =
+    {
+        .acc_term_set = mac_util_access_terminal_set_for_epon_8_tdma,
+        .acc_term_post_indication_set = NULL
+    },
+    [BCMOLT_SYSTEM_MODE_EPON__4_X_COEXISTENCE_TDMA] =
+    {
+        .acc_term_set = mac_util_access_terminal_set_for_epon_4_tdma,
+        .acc_term_post_indication_set = NULL
+    },
+    [BCMOLT_SYSTEM_MODE_EPON__16_X] =
+    {
+        .acc_term_set = mac_util_access_terminal_set_for_epon_16_1g,
+        .acc_term_post_indication_set = NULL
+    },
+    [BCMOLT_SYSTEM_MODE_EPON__8_X] =
+    {
+        .acc_term_set = mac_util_access_terminal_set_for_epon_8_1g,
+        .acc_term_post_indication_set = NULL
+    },
+    [BCMOLT_SYSTEM_MODE_EPON__4_X] =
+    {
+        .acc_term_set = mac_util_access_terminal_set_for_epon_4_1g,
+        .acc_term_post_indication_set = NULL
+    },
+    [BCMOLT_SYSTEM_MODE_EPON__8_X_10_G] =
+    {
+        .acc_term_set = mac_util_access_terminal_set_for_epon_8_10g,
+        .acc_term_post_indication_set = NULL
+    },
+    [BCMOLT_SYSTEM_MODE_EPON__4_X_10_G] =
+    {
+        .acc_term_set = mac_util_access_terminal_set_for_epon_4_10g,
+        .acc_term_post_indication_set = NULL
+    },
+    [BCMOLT_SYSTEM_MODE_EPON__2_X_10_G] =
+    {
+        .acc_term_set = mac_util_access_terminal_set_for_epon_2_10g,
+        .acc_term_post_indication_set = NULL
+    },
+    [BCMOLT_SYSTEM_MODE_LOOPBACK] =
+    {
+        .acc_term_set = mac_util_access_terminal_set_for_loopback,
+        .acc_term_post_indication_set = NULL
+    }
+};
+
+/**
+ * @brief BAL request handlers for PON protocol specific set & validate
+ *
+ * @note The handling would be like object-oriented programming. The common
+ * handling would be done in the top level call. And then based on protocol,
+ * the mac specific handling will be done in the corresponding mac specific
+ * handler functions.
+ **/
+mac_util_handlers_per_pon_mode_t mac_util_bal_req_handlers_for_pon_mode [BCM_TOPO_PON_MODE__NUM_OF + 1] =
+{
+    [BCM_TOPO_PON_MODE_GPON] =
+    {
+        .if_validate = NULL,
+        .if_set = mac_util_interface_set_for_gpon,
+        .sub_term_validate = mac_util_validate_subscriber_terminal_info_for_gpon,
+        .sub_term_set = mac_util_subscriber_terminal_set_for_gpon,
+        .flow_validate = mac_util_validate_flow_info_for_gpon,
+        .flow_set = mac_util_flow_set_for_gpon,
+        .group_validate = NULL,
+        .group_set = mac_util_group_set_for_gpon,
+        .sla_us_rate_factor = 1
+    },
+    [BCM_TOPO_PON_MODE_XGPON] =
+    {
+        .if_validate = NULL,
+        .if_set = mac_util_interface_set_for_xgpon,
+        .sub_term_validate = mac_util_validate_subscriber_terminal_info_for_xgpon,
+        .sub_term_set = mac_util_subscriber_terminal_set_for_xgpon,
+        .flow_validate = mac_util_validate_flow_info_for_xgpon,
+        .flow_set = mac_util_flow_set_for_xgpon,
+        .group_validate = NULL,
+        .group_set = mac_util_group_set_for_xgpon,
+        .sla_us_rate_factor = 2
+    },
+    [BCM_TOPO_PON_MODE_XGS] =
+    {
+        .if_validate = NULL,
+        .if_set = mac_util_interface_set_for_xgpon,
+        .sub_term_validate = mac_util_validate_subscriber_terminal_info_for_xgpon,
+        .sub_term_set = mac_util_subscriber_terminal_set_for_xgpon,
+        .flow_validate = mac_util_validate_flow_info_for_xgpon,
+        .flow_set = mac_util_flow_set_for_xgpon,
+        .group_validate = NULL,
+        .group_set = mac_util_group_set_for_xgpon,
+        .sla_us_rate_factor = 8
+    },
+    [BCM_TOPO_PON_MODE_EPON_TDMA] =
+    {
+        .if_validate = NULL,
+        .if_set = mac_util_interface_set_for_epon,
+        .sub_term_validate = NULL,
+        .sub_term_set = NULL,
+        .flow_validate = NULL,
+        .flow_set = NULL,
+        .group_validate = NULL,
+        .group_set = NULL,
+        .sla_us_rate_factor = 0
+    },
+    [BCM_TOPO_PON_MODE_EPON_1G] =
+    {
+        .if_validate = NULL,
+        .if_set = mac_util_interface_set_for_epon,
+        .sub_term_validate = NULL,
+        .sub_term_set = NULL,
+        .flow_validate = NULL,
+        .flow_set = NULL,
+        .group_validate = NULL,
+        .group_set = NULL,
+        .sla_us_rate_factor = 0
+    },
+    [BCM_TOPO_PON_MODE_EPON_10G] =
+    {
+        .if_validate = NULL,
+        .if_set = mac_util_interface_set_for_epon,
+        .sub_term_validate = NULL,
+        .sub_term_set = NULL,
+        .flow_validate = NULL,
+        .flow_set = NULL,
+        .group_validate = NULL,
+        .group_set = NULL,
+        .sla_us_rate_factor = 0
+    },
+    [BCM_TOPO_PON_MODE_LOOPBACK] =
+    {
+        .if_validate = NULL,
+        .if_set = mac_util_interface_set_for_loopback,
+        .sub_term_validate = NULL,
+        .sub_term_set = mac_util_subscriber_terminal_set_for_loopback,
+        .flow_validate = NULL,
+        .flow_set = mac_util_flow_set_for_loopback,
+        .group_validate = NULL,
+        .group_set = NULL,
+        .sla_us_rate_factor = 1
+    }
+};
+
+static f_bcmolt_msg_handler g_indication_handler;
+
+static bcm_topo_pon_mode mac_util_get_pon_mode(uint32_t logical_intf_id)
+{
+    bcm_topo_pon_mode mode;
+    if (bcmbal_is_mac_in_loopback())
+        mode = BCM_TOPO_PON_MODE_LOOPBACK;
+    else
+        mode = bcm_topo_pon_get_pon_mode(logical_intf_id);
+    return mode;
+}
+
+static uint16_t oper_status_from_pon_state_get(uint32_t logical_intf_id, uint16_t state)
+{
+    uint16_t oper_status;
+    bcm_topo_pon_family pon_family;
+
+    pon_family = bcm_topo_pon_get_pon_family(logical_intf_id);
+
+    switch (pon_family)
+    {
+        case BCM_TOPO_PON_FAMILY_EPON:
+            oper_status = (((bcmolt_epon_ni_en_state)state == BCMOLT_EPON_NI_EN_STATE_ENABLED) ?
+                           BAL_UTIL_OPER_IF_UP : BAL_UTIL_OPER_IF_DOWN);
+            break;
+
+        case BCM_TOPO_PON_FAMILY_GPON:
+            oper_status = (((bcmolt_pon_state)state == BCMOLT_PON_STATE_ACTIVE_WORKING) ?
+                           BAL_UTIL_OPER_IF_UP : BAL_UTIL_OPER_IF_DOWN);
+            break;
+
+        case BCM_TOPO_PON_FAMILY_INVALID:
+        default:
+            BCMOS_TRACE_ERR("Unknown PON family on intf %u: %d\n", logical_intf_id, pon_family);
+            oper_status = BAL_UTIL_OPER_IF_DOWN;
+            break;
+    }
+
+    return oper_status;
+}
+
+/*****************************************************************************/
+/**
+ * @brief Function to send a util indication message to the core
+ *
+ * @param msg_payload A pointer to a well formed MAC util indication message
+ *
+ * @returns bcmos_errno == BCM_ERR_OK
+ *
+ *****************************************************************************/
+static bcmos_errno mac_util_ind_send(bal_util_msg_ind *msg_payload)
+{
+    bcmos_errno rc;
+
+    rc = bcmos_msg_dispatch(bcmbal_bcmos_hdr_get(msg_payload), BCMOS_MSG_SEND_AUTO_FREE);
+
+    if (rc)
+    {
+        BCM_LOG(ERROR, log_id_mac_util,
+                "Couldn't dispatch indication message from MAC util (%d:%d)\n",
+                (int)(bcmbal_bcmos_hdr_get(msg_payload))->type,
+                (int)(bcmbal_bcmos_hdr_get(msg_payload))->instance);
+    }
+
+    return rc;
+}
+
+/*****************************************************************************/
+/**
+ * @brief Function to send a util auto indication message to the core
+ *
+ * @param msg_payload A pointer to a well formed MAC util indication message
+ *
+ * @returns bcmos_errno == BCM_ERR_OK
+ *
+ *****************************************************************************/
+static bcmos_errno mac_util_auto_ind_send(bal_util_msg_auto_ind *msg_payload)
+{
+    bcmos_errno rc;
+
+    rc = bcmos_msg_dispatch(bcmbal_bcmos_hdr_get(msg_payload), BCMOS_MSG_SEND_AUTO_FREE);
+
+    if (rc)
+    {
+        BCM_LOG(ERROR, log_id_mac_util,
+                "Couldn't dispatch auto indication message from MAC util (%d:%d)\n",
+                (int)(bcmbal_bcmos_hdr_get(msg_payload))->type,
+                (int)(bcmbal_bcmos_hdr_get(msg_payload))->instance);
+    }
+
+    return rc;
+}
+
+/* Report acc_term event */
+void mac_util_report_acc_term_event(uint16_t event)
+{
+    bal_util_msg_ind *p_bal_util_ind_msg;
+
+    if(NULL != (p_bal_util_ind_msg = bcmbal_msg_calloc(sizeof(bal_util_msg_ind))))
+    {
+        p_bal_util_ind_msg->version = BAL_UTIL_MSG_VERSION;
+
+        /* device connect */
+        if (BCMOLT_DEVICE_AUTO_ID_CONNECTION_COMPLETE == event)
+        {
+            p_bal_util_ind_msg->status = BCM_ERR_OK;
+        }
+        else
+        {
+            p_bal_util_ind_msg->status = BCM_ERR_PARM;
+        }
+
+        bcmbal_msg_hdr_set(p_bal_util_ind_msg,
+                           BCMBAL_MAC_UTIL_MSG,
+                           BAL_MSG_TYPE_IND,
+                           BAL_SUBSYSTEM_MAC_UTIL,
+                           BCMBAL_OBJ_ID_ACCESS_TERMINAL,
+                           BAL_UTIL_OPER_ACC_TERM_CONNECT,
+                           0);
+
+        BCM_LOG(INFO, log_id_mac_util, "Reporting to Core: BAL_UTIL_OPER_ACC_TERM_CONNECT indication. Status=%s\n",
+                bcmos_strerror(p_bal_util_ind_msg->status));
+
+        mac_util_ind_send(p_bal_util_ind_msg);
+
+    }
+    else
+    {
+        BCM_LOG(ERROR, log_id_mac_util, "Could not allocate memory for access-terminal IND message\n");
+    }
+}
+
+
+/**
+ * @brief Report interface event
+ * @note we consider both err and result for reporting the status to Core
+ * */
+void mac_util_report_if_event(bcmbal_intf_id intf_id,
+                              bcmbal_intf_type intf_type,
+                              bcmos_errno err,
+                              bcmolt_result result,
+                              bcmolt_pon_state new_state)
+{
+    bal_util_msg_ind *p_bal_util_ind_msg;
+
+    if(NULL != (p_bal_util_ind_msg = bcmbal_msg_calloc(sizeof(bal_util_msg_ind))))
+    {
+
+        /** @todo validate inf_id is within range based on intf_type */
+        p_bal_util_ind_msg->version = BAL_UTIL_MSG_VERSION;
+        p_bal_util_ind_msg->obj_key.if_key.intf_id = intf_id;
+        p_bal_util_ind_msg->obj_key.if_key.intf_type = intf_type;
+
+        if ((BCM_ERR_OK == err) && (BCMOLT_RESULT_SUCCESS != result))
+        {
+            err = BCM_ERR_INTERNAL;
+        }
+        p_bal_util_ind_msg->status = err;
+
+        bcmbal_msg_hdr_set(p_bal_util_ind_msg,
+                           BCMBAL_MAC_UTIL_MSG,
+                           BAL_MSG_TYPE_IND,
+                           BAL_SUBSYSTEM_MAC_UTIL,
+                           BCMBAL_OBJ_ID_INTERFACE,
+                           oper_status_from_pon_state_get(intf_id, new_state),
+                           0);
+
+        BCM_LOG(DEBUG, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(intf_id), "Reporting to Core: interface id %d %s indication: %s\n",
+                intf_id,
+                (BAL_UTIL_OPER_IF_UP == oper_status_from_pon_state_get(intf_id, new_state)) ? "UP" : "DOWN",
+                bcmos_strerror(p_bal_util_ind_msg->status));
+
+
+        mac_util_ind_send(p_bal_util_ind_msg);
+
+    }
+    else
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(intf_id),
+                "Could not allocate memory for interface IND message\n");
+    }
+}
+
+/* Report subscriber terminal event */
+
+/**
+ * @note p_serial_number may be NULL and is only valid when an ONU
+ * is being reported as DISCOVERED
+ * @note result is config status reported by Maple, whereas err is messaging status
+ * between the MAC util & Maple
+ * */
+void mac_util_report_sub_term_event(bcmbal_intf_id pon_ni,
+                                    bcmbal_sub_id onu_id,
+                                    bcmolt_serial_number *p_serial_number,
+                                    bal_util_oper_sub_term oper,
+                                    bcmos_errno err,
+                                    bcmolt_result result,
+                                    bcmolt_activation_fail_reason fail_reason,
+                                    bcmolt_epon_tunnel_id tunnel_id)
+{
+    bal_util_msg_ind *p_bal_util_ind_msg;
+    uint16_t total_msglen;
+    bcm_topo_pon_family pon_family;
+
+    total_msglen = sizeof(bal_util_msg_ind);
+
+    pon_family = bcm_topo_pon_get_pon_family(pon_ni);
+    /**
+     * @note if pon mode is invalid then this error should have been caught in the validation stage itself.
+     *    However, still checking here to make sure and report an error if needed.
+     */
+    if (pon_family == BCM_TOPO_PON_FAMILY_INVALID)
+    {
+        result = BCMOLT_RESULT_FAIL;
+    }
+
+    if (pon_family == BCM_TOPO_PON_FAMILY_EPON)
+    {
+        total_msglen += sizeof(bcmolt_epon_tunnel_id);
+    }
+    else if(NULL != p_serial_number)
+    {
+        total_msglen += sizeof(bcmbal_serial_number);
+    }
+
+
+    /* consolidate "err" and "result" into one report status */
+    if ((BCM_ERR_OK == err) && (BCMOLT_RESULT_SUCCESS != result))
+    {
+        err = BCM_ERR_INTERNAL;
+    }
+
+
+    if(NULL != (p_bal_util_ind_msg = bcmbal_msg_calloc(total_msglen)))
+    {
+        /* set the object key */
+        p_bal_util_ind_msg->obj_key.sub_term_key.intf_id = pon_ni;
+        p_bal_util_ind_msg->obj_key.sub_term_key.sub_term_id = onu_id;
+
+        /* set bal util msg version */
+        p_bal_util_ind_msg->version = BAL_UTIL_MSG_VERSION;
+
+        bcmbal_msg_hdr_set(p_bal_util_ind_msg,
+                           BCMBAL_MAC_UTIL_MSG,
+                           (BAL_UTIL_OPER_SUB_TERM_DISCOVERY == oper) ? BAL_MSG_TYPE_AUTO_IND : BAL_MSG_TYPE_IND,
+                           BAL_SUBSYSTEM_MAC_UTIL,
+                           BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL,
+                           oper,
+                           0);
+
+        /*
+         * Set all the message header parameters
+         */
+        if ((BCM_ERR_OK == err) &&
+                (((BAL_UTIL_OPER_SUB_TERM_ADD == oper) && (fail_reason == BCMOLT_ACTIVATION_FAIL_REASON_NONE)) ||
+                 ((BAL_UTIL_OPER_SUB_TERM_ADD != oper) && (fail_reason == MAC_UTIL_DEACTIVATION_FAIL_REASON_NONE))) )
+        {
+            BCM_LOG(DEBUG, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(pon_ni),
+                    "Reporting to Core: %s "
+                    "indication from mac util: Success\n",
+                    (BAL_UTIL_OPER_SUB_TERM_ADD == oper) ? "BAL_UTIL_OPER_SUB_TERM_ADD" :
+                    (BAL_UTIL_OPER_SUB_TERM_REMOVE == oper) ? "BAL_UTIL_OPER_SUB_TERM_REMOVE" :
+                    "BAL_UTIL_OPER_SUB_TERM_DISCOVERY");
+
+            p_bal_util_ind_msg->status = BCM_ERR_OK;
+
+            if (pon_family == BCM_TOPO_PON_FAMILY_EPON)
+            {
+                memcpy(&p_bal_util_ind_msg->data, &tunnel_id, sizeof(bcmolt_epon_tunnel_id));
+            }
+            else if (NULL != p_serial_number)
+            {
+                /* This assumes an identical definition of serial number between BAL and MAPLE */
+                memcpy(&p_bal_util_ind_msg->data, p_serial_number, sizeof(bcmbal_serial_number));
+            }
+
+        }
+        else
+        {
+            p_bal_util_ind_msg->status = err;
+
+            BCM_LOG(DEBUG, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(pon_ni),
+                    "Reporting to Core: %s Indication from mac util: Failure, with status = %s, fail_reason = %d\n",
+                    ((BAL_UTIL_OPER_SUB_TERM_ADD == oper) ? "BAL_UTIL_OPER_SUB_TERM_ADD" :
+                    (BAL_UTIL_OPER_SUB_TERM_REMOVE == oper) ? "BAL_UTIL_OPER_SUB_TERM_REMOVE" :
+                    "BAL_UTIL_OPER_SUB_TERM_DISCOVERY"),
+                    bcmos_strerror(err), fail_reason);
+        }
+
+        mac_util_ind_send(p_bal_util_ind_msg);
+
+    }
+    else
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(pon_ni),
+                "Could not allocate memory for subscriber-terminal IND message\n");
+    }
+}
+
+
+/**
+ * Notify core flow FSM that flow add/modify/remove was success or failed
+ *
+ * @param  flow_key
+ * @param  pon_if   pon interface
+ * @param  op_type  ADD, REMOVE, MODIFY
+ * @param  err      error code to be sent up
+ *
+ **/
+static void _mac_util_report_flow_set_indication(bcmbal_flow_key flow_key, uint32_t pon_if, bal_util_oper_flow op_type, bcmos_errno err)
+{
+    bal_util_msg_ind *p_bal_util_ind_msg;
+
+    if(NULL != (p_bal_util_ind_msg = bcmbal_msg_calloc(sizeof(bal_util_msg_ind))))
+    {
+
+        BCM_LOG(INFO, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(pon_if), "Reporting to Core: flow %d, %s %s, result=%s\n",
+                flow_key.flow_id,
+                (BCMBAL_FLOW_TYPE_UPSTREAM == flow_key.flow_type ? "upstream" :
+                 BCMBAL_FLOW_TYPE_DOWNSTREAM == flow_key.flow_type ? "downstream" :
+                 BCMBAL_FLOW_TYPE_MULTICAST == flow_key.flow_type ? "multicast" :"broadcast"),
+                (BAL_UTIL_OPER_FLOW_ADD == op_type ? "FLOW ADD":
+                 (BAL_UTIL_OPER_FLOW_REMOVE == op_type ? "FLOW REMOVE" : "FLOW_CLEAR")),
+                bcmos_strerror(err));
+
+
+        /* set bal app p_msg version */
+        p_bal_util_ind_msg->version = BAL_UTIL_MSG_VERSION;
+        p_bal_util_ind_msg->obj_key.flow_key = flow_key;
+        p_bal_util_ind_msg->status = err; /* set the error code */
+
+        bcmbal_msg_hdr_set(p_bal_util_ind_msg,
+                           BCMBAL_MAC_UTIL_MSG,
+                           BAL_MSG_TYPE_IND,
+                           BAL_SUBSYSTEM_MAC_UTIL,
+                           BCMBAL_OBJ_ID_FLOW,
+                           op_type,
+                           0);
+
+
+        mac_util_ind_send(p_bal_util_ind_msg);
+    }
+    else
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(pon_if), "Could not allocate memory for flow IND message\n");
+    }
+}
+
+void mac_util_report_tm_sched_set_indication(bcmbal_tm_sched_key tm_sched_key, bcmos_errno err, bcmolt_result ind_result)
+{
+    bal_util_msg_ind *p_bal_util_ind_msg;
+
+    if ((BCM_ERR_OK == err) && (BCMOLT_RESULT_SUCCESS != ind_result))
+    {
+        err = BCM_ERR_INTERNAL;
+    }
+
+    if(NULL != (p_bal_util_ind_msg = bcmbal_msg_calloc(sizeof(bal_util_msg_ind))))
+    {
+
+        BCM_LOG(INFO, log_id_mac_util, "Reporting to Core: tm sched %d, %s, result=%s\n",
+                tm_sched_key.id,
+                (BCMBAL_TM_SCHED_DIR_US == tm_sched_key.dir ? "upstream" :"downstream"),
+                bcmos_strerror(err));
+
+
+        /* set bal app p_msg version */
+        p_bal_util_ind_msg->version = BAL_UTIL_MSG_VERSION;
+        p_bal_util_ind_msg->obj_key.tm_sched_key = tm_sched_key;
+        p_bal_util_ind_msg->status = err; /* set the error code */
+
+        bcmbal_msg_hdr_set(p_bal_util_ind_msg,
+                           BCMBAL_MAC_UTIL_MSG,
+                           BAL_MSG_TYPE_IND,
+                           BAL_SUBSYSTEM_MAC_UTIL,
+                           BCMBAL_OBJ_ID_TM_SCHED,
+                           BAL_UTIL_OPER_AGG_PORT_ADD,
+                           0);
+
+
+        mac_util_ind_send(p_bal_util_ind_msg);
+    }
+    else
+    {
+        BCM_LOG(ERROR, log_id_mac_util, "Could not allocate memory for tm sched IND message\n");
+    }
+}
+
+/**
+ * Notify core group FSM that group set request was success or failed
+ *
+ * @param  group_key
+ * @param  op_type  ADD, REMOVE, SET, CREATE, DESTROY
+ * @param  err      error code to be sent up
+ *
+ **/
+static void _mac_util_report_group_set_indication (bcmbal_group_key group_key, bal_util_oper_group op_type, bcmos_errno err)
+{
+    bal_util_msg_ind *p_bal_util_ind_msg;
+
+    if(NULL != (p_bal_util_ind_msg = bcmbal_msg_calloc(sizeof(bal_util_msg_ind))))
+    {
+
+        BCM_LOG(INFO, log_id_mac_util, "Reporting to Core: group %d, %s, result=%s\n",
+                group_key.group_id,
+                BCMBAL_UTIL_GROUP_OPER_STR_GET(op_type),
+                bcmos_strerror(err));
+
+
+        /* set bal app p_msg version */
+        p_bal_util_ind_msg->version = BAL_UTIL_MSG_VERSION;
+        p_bal_util_ind_msg->obj_key.group_key = group_key;
+        p_bal_util_ind_msg->status = err; /* set the error code */
+
+        bcmbal_msg_hdr_set(p_bal_util_ind_msg,
+                           BCMBAL_MAC_UTIL_MSG,
+                           BAL_MSG_TYPE_IND,
+                           BAL_SUBSYSTEM_MAC_UTIL,
+                           BCMBAL_OBJ_ID_GROUP,
+                           op_type,
+                           0);
+
+
+        mac_util_ind_send(p_bal_util_ind_msg);
+    }
+    else
+    {
+        BCM_LOG(ERROR, log_id_mac_util, "Could not allocate memory for group IND message\n");
+    }
+}
+
+/**
+ * Notify core flow FSM that flow operational state was changed
+ *
+ * @param  pon_if - the flow interface
+ * @param  flow_key
+ * @param  op_type - relevant flow latest operation
+ * @param  ind - success/fail represent current flow state is up/down
+ *
+ **/
+
+void mac_util_report_flow_auto_ind (uint32_t pon_if, bcmbal_flow_key  flow_key ,bal_util_oper_flow op_type, bal_util_flow_ind ind)
+{
+    bal_util_msg_auto_ind *p_bal_util_auto_ind_msg;
+
+    if(NULL != (p_bal_util_auto_ind_msg = bcmbal_msg_calloc(sizeof(bal_util_msg_auto_ind) + sizeof(bcmbal_status))))
+    {
+        BCM_LOG(INFO, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(pon_if), "Reporting to Core: flow %d, %s %s, change to %s\n",
+            flow_key.flow_id,
+            (BCMBAL_FLOW_TYPE_UPSTREAM == flow_key.flow_type ? "upstream" :
+            BCMBAL_FLOW_TYPE_DOWNSTREAM == flow_key.flow_type ? "downstream" :
+            BCMBAL_FLOW_TYPE_MULTICAST == flow_key.flow_type ? "multicast" :"broadcast"),
+            (BAL_UTIL_OPER_FLOW_ADD == op_type ? "FLOW ADD":
+            (BAL_UTIL_OPER_FLOW_REMOVE == op_type ? "FLOW REMOVE" : "FLOW_CLEAR")),
+            ind == BAL_UTIL_FLOW_IND_SEND_FAIL ? "fail" : "success");
+
+        /* set bal app p_msg version */
+        p_bal_util_auto_ind_msg->version = BAL_UTIL_MSG_VERSION;
+        p_bal_util_auto_ind_msg->obj_key.flow_key = flow_key;
+
+        /*data will indicate the new operational state*/
+        *(p_bal_util_auto_ind_msg->data) = ((ind == BAL_UTIL_FLOW_IND_SEND_FAIL) ? BCMBAL_STATUS_DOWN : BCMBAL_STATUS_UP);
+        p_bal_util_auto_ind_msg->status = BCM_ERR_OK;
+
+        bcmbal_msg_hdr_set(p_bal_util_auto_ind_msg,
+            BCMBAL_MAC_UTIL_MSG,
+            BAL_MSG_TYPE_AUTO_IND,
+            BAL_SUBSYSTEM_MAC_UTIL,
+            BCMBAL_OBJ_ID_FLOW,
+            op_type,
+            0);
+
+        mac_util_auto_ind_send(p_bal_util_auto_ind_msg);
+    }
+}
+
+
+/** @brief Wrapper routine to Notify core flow FSM that flow ADD Success */
+void mac_util_report_flow_add_success(bcmbal_flow_key flow_key, uint32_t pon_if)
+{
+    _mac_util_report_flow_set_indication(flow_key, pon_if, BAL_UTIL_OPER_FLOW_ADD, BCM_ERR_OK);
+}
+
+/** @brief Wrapper routine to Notify core flow FSM that flow Add failed, based on result in indication msg from Maple */
+void mac_util_report_flow_add_failed(bcmbal_flow_key flow_key, uint32_t pon_if, bcmos_errno err)
+{
+    _mac_util_report_flow_set_indication(flow_key, pon_if, BAL_UTIL_OPER_FLOW_ADD, err);
+}
+
+/** @brief Wrapper routine to Notify core flow FSM that flow REMOVE is Success */
+void mac_util_report_flow_remove_success(bcmbal_flow_key flow_key, uint32_t pon_if, bal_util_oper_flow op_type)
+{
+    _mac_util_report_flow_set_indication(flow_key, pon_if, op_type, BCM_ERR_OK);
+}
+
+/** @brief Wrapper routine to Notify core flow FSM that flow Remove failed, based on result in indication msg from Maple */
+void mac_util_report_flow_remove_failed(bcmbal_flow_key flow_key, uint32_t pon_if, bal_util_oper_flow op_type, bcmos_errno err)
+{
+    _mac_util_report_flow_set_indication(flow_key, pon_if, op_type, err);
+}
+
+/*****************************************************************************/
+/**
+ * @brief mac_util_access_terminal_info_validate
+ *
+ * This routine is used to validate all input attributes required for an acc term
+ * setting received from the core.
+ *
+ * @param p_acc_term_req         the acc term request info
+ *
+ * @return bcmos_errno
+ */
+/*****************************************************************************/
+bcmos_errno mac_util_access_terminal_info_validate(const bcmbal_access_terminal_cfg *p_acc_term_req)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+
+    if (BCMOS_TRUE != BCMBAL_CFG_PROP_IS_SET(p_acc_term_req, access_terminal, iwf_mode))
+    {
+        /*
+         * This is an error because the iwf mode is implicitly set by the core, based
+         * either on a parameter in the bal_config.txt file, or it is assigned a
+         * default value. Either way, this property must be set when this code
+         * executes.
+         */
+        rc = BCM_ERR_PARM;
+    }
+
+    return rc;
+}
+
+
+/*****************************************************************************/
+/**
+ * @brief check_send_flow_bal_ind_msg
+ * the routine checks the indication status of a specific given flow, which its entry was just updated
+ * As flows may be 'waiting' for a single of few maple gem port configuration complete indications
+ * before an indication of complete flow setup can be indicated to bal_core
+ *
+ * @note this send routine is called multiple times for the scenario multiple flows per GEM/Alloc Id.
+ *
+ * @todo this routine currently assumes just flow add. This should handle a flow Remove case too
+ *
+ * @param p_flow      - flow instance pointer from mac util DB
+ * @param err         - remote error in msg from Maple
+ * @param ind_result  - the status(BCMOLT_RESULT_SUCCESS/BCMOLT_RESULT_FAIL) of indication from Maple
+ *
+ * @return bcmos_errno
+ */
+/*****************************************************************************/
+bcmos_errno check_send_flow_bal_ind_msg (flow_list_entry *p_flow, bcmos_errno err, bcmolt_result ind_result)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcmos_bool send_ind = BCMOS_TRUE;
+
+    /* for a ds flow, indication should be sent only if all constraints fulfilled:
+       indication was not sent yet
+       flow configuration completed - all related gem ports were configured to maple
+       all related gem ports configuration complete indication were received from device
+       */
+    if (NULL == p_flow)
+    {
+        BCM_LOG(ERROR, log_id_mac_util, "%s: NULL flow passed in: flow\n", __FUNCTION__);
+
+        return BCM_ERR_NOENT;
+    }
+    else
+    {
+        if (BCMOS_FALSE == p_flow->is_configuration_completed
+            || BCMOS_TRUE == p_flow->is_waiting_for_svc_port_active
+            || BAL_UTIL_FLOW_IND_SEND_NONE != p_flow->ind_sent)
+        {
+             send_ind = BCMOS_FALSE;
+        }
+        //else all conditions satisfied for sending an indication up to Core.
+    }
+
+    if ((BCM_ERR_OK == err) && (BCMOLT_RESULT_SUCCESS != ind_result))
+    {
+        err = BCM_ERR_INTERNAL;
+    }
+
+    if (BCMOS_TRUE == send_ind)
+    {
+        switch (p_flow->op_type)
+        {
+            case BAL_UTIL_OPER_FLOW_ADD:
+                if (BCM_ERR_OK != err)
+                {
+                    /* report flow failed to Core; It is upto the core to cleanup the flows */
+
+                    p_flow->ind_sent = BAL_UTIL_FLOW_IND_SEND_FAIL;
+                    mac_util_report_flow_add_failed(p_flow->bal_flow_key, p_flow->if_id, err);
+                }
+                else
+                {
+
+                    p_flow->ind_sent = BAL_UTIL_FLOW_IND_SEND_SUCCESS;
+                    mac_util_report_flow_add_success(p_flow->bal_flow_key, p_flow->if_id);
+                }
+
+                break;
+
+            case BAL_UTIL_OPER_FLOW_REMOVE:
+            case BAL_UTIL_OPER_FLOW_CLEAR:
+                if (BCM_ERR_OK != err)
+                {
+                    /* report flow failed to Core; It is upto the core to cleanup the flows */
+
+                    p_flow->ind_sent = BAL_UTIL_FLOW_IND_SEND_FAIL;
+                    mac_util_report_flow_remove_failed(p_flow->bal_flow_key, p_flow->if_id, p_flow->op_type, err);
+                }
+                else
+                {
+
+                    p_flow->ind_sent = BAL_UTIL_FLOW_IND_SEND_SUCCESS;
+                    mac_util_report_flow_remove_success(p_flow->bal_flow_key, p_flow->if_id, p_flow->op_type);
+                }
+
+                /* One more step for Flow Remove: remove from DB & Free the flow */
+                _mac_util_db_flow_remove (p_flow->if_id, p_flow);
+                _mac_util_db_flow_free (p_flow->if_id, p_flow);
+
+                break;
+
+            default:
+                rc = BCM_ERR_INTERNAL;
+                break;
+        }
+    }
+
+    return rc;
+}
+
+
+/**
+ * @brief mac_util_indication_cb
+ * this routine is the callback function that is registered by mac_util_indication_handler_register()
+ * to handle any indications coming from maple device
+ * this is the entry point for the device towards mac_util/bal
+ *
+ * @param device_id the maple device id generating the current indication
+ * @param p_msg pointer to the maple indication message
+ *
+ * @return void
+ *
+ * @todo  Note that the pon interface in Auto Indication msgs from Maple is a physical interface
+ * on a device. The PON interface that is used by Core in it's requests to MAC Util,
+ * and stored in local DBs will be logical interface.
+ * So the rule of thumb would be anything coming from Maple side, translate (device + physical Interface)
+ * to Logical interface and use for logging, internal DB access etc.
+ */
+void mac_util_indication_cb(bcmolt_devid device_id, bcmolt_msg *p_msg)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+
+    switch (p_msg->obj_type)
+    {
+        case BCMOLT_OBJ_ID_DEVICE:
+            {
+                rc = mac_util_indication_handle_for_device (device_id, p_msg);
+            }
+            break;
+
+        case BCMOLT_OBJ_ID_GPON_NI:
+        case BCMOLT_OBJ_ID_GPON_ONU:
+        case BCMOLT_OBJ_ID_GPON_ALLOC:
+        case BCMOLT_OBJ_ID_GPON_GEM_PORT:
+            {
+                rc = mac_util_handle_all_olt_ind_for_gpon (device_id, p_msg);
+            }
+            break;
+
+        case BCMOLT_OBJ_ID_XGPON_NI:
+        case BCMOLT_OBJ_ID_XGPON_ONU:
+        case BCMOLT_OBJ_ID_XGPON_ALLOC:
+        {
+            rc = mac_util_handle_all_olt_ind_for_xgpon (device_id, p_msg);
+        }
+        break;
+
+        default:
+            BCM_LOG(DEBUG, log_id_mac_util, "Unhandled message indication for obj type %d\n",
+                p_msg->obj_type);
+
+            rc = BCM_ERR_INTERNAL;
+            break;
+    }
+
+    if (BCM_ERR_OK != rc)
+    {
+        BCM_LOG(ERROR, log_id_mac_util, "Error handling Auto Indication from Maple for obj type %d\n", p_msg->obj_type);
+    }
+
+    return;
+}
+
+
+
+/**
+ * @brief get string for the indication object type for device
+ */
+static char *mac_util_indication_get_obj_type_str_for_device (bcmolt_obj_id obj_type)
+{
+    int i = 0;
+    for (i=0; i < BCM_SIZEOFARRAY(mac_util_device_ind_handlers); i++)
+    {
+        if (obj_type == mac_util_device_ind_handlers[i].obj_type)
+        {
+            return mac_util_device_ind_handlers[i].obj_type_str;
+        }
+    }
+
+    return "Unhandled";
+}
+
+/**
+ * @brief check if mac util should report access terminal connect event to core.
+ * event will be sent only when all devices are connected successfully
+  *
+ * @return bcmos_bool
+ */
+
+static bcmos_bool mac_util_check_acc_term_report_event (void)
+{
+
+    bcmolt_devid device_id;
+
+    BCM_TOPO_FOR_EACH_DEV(device_id)
+    {
+        if (!acc_term_connectivity.devices[device_id].is_connected)
+        {
+            return BCMOS_FALSE;
+        }
+    }
+    return BCMOS_TRUE;
+}
+
+/**
+ * @brief Handler function for Maple auto indications for a OLT Device
+ *
+ * @param device_id the maple device id generating the current indication
+ * @param p_msg pointer to the maple indication message
+ *
+ * @return bcmos_errno
+ */
+static bcmos_errno mac_util_indication_handle_for_device (bcmolt_devid device_id, bcmolt_msg *p_msg)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+
+    BCM_LOG(DEBUG, log_id_mac_util,
+        "mac_util_indication_cb received indication obj=%d/%s group=%d subgroup=%d\n",
+        p_msg->obj_type, mac_util_indication_get_obj_type_str_for_device(p_msg->obj_type),
+        p_msg->group, p_msg->subgroup);
+
+    if (BCMOLT_DEVICE_AUTO_ID_CONNECTION_COMPLETE == p_msg->subgroup)
+    {
+        BCM_LOG(INFO, log_id_mac_util, "Device %u is ready.\n", device_id);
+
+        acc_term_connectivity.devices[device_id].is_connected = BCMOS_TRUE;
+
+        if (mac_util_check_acc_term_report_event())
+        {
+                mac_util_report_acc_term_event(p_msg->subgroup);
+        }
+
+        if (mac_util_bal_req_handlers_for_system_mode[acc_term_connectivity.devices[device_id].system_mode].acc_term_post_indication_set)
+        {
+            rc = mac_util_bal_req_handlers_for_system_mode[acc_term_connectivity.devices[device_id].system_mode].acc_term_post_indication_set(device_id);
+            if (BCM_ERR_OK != rc)
+            {
+                BCM_LOG(ERROR, log_id_mac_util, "%s: post indication set FAILED: rc = %s (%d)\n",
+                        __FUNCTION__, bcmos_strerror(rc), rc);
+            }
+        }
+    }
+    else if (BCMOLT_DEVICE_AUTO_ID_CONNECTION_FAILURE == p_msg->subgroup)
+    {
+        BCM_LOG(INFO, log_id_mac_util, "Device %u connection failed.\n", device_id);
+        if(!acc_term_connectivity.fail_reported)
+        {
+            mac_util_report_acc_term_event(p_msg->subgroup);
+        }
+        acc_term_connectivity.fail_reported = BCMOS_TRUE;
+    }
+
+    return rc;
+}
+
+
+/**
+ * @brief  Common routine to get string of indication object
+ *
+ * @param obj_type                      obj type to get string for
+ * @param obj_types_and_handlers        obj types array
+ * @param num_obj_types                 num obj types
+ *
+ * @return char*
+ */
+char *_mac_util_get_obj_type_str_for_indications ( bcmolt_obj_id obj_type,
+                                                   mac_util_ind_obj_and_handlers obj_types_and_handlers[], uint16_t num_obj_types)
+{
+    int i;
+
+    for (i = 0; i < num_obj_types; i++)
+    {
+        if (obj_type == obj_types_and_handlers[i].obj_type)
+        {
+            return obj_types_and_handlers[i].obj_type_str;
+        }
+    }
+
+    return "Unhandled";
+}
+
+
+/**
+ * @brief  Common routine to register for Maple auto indications
+ *
+ * @param p_rx_cfg                      handler config structure
+ * @param obj_types_and_handlers        obj types to subscribe
+ * @param num_obj_types                 num obj types
+ * @param device_id                         specific device id (for multiple devices support)
+ *
+ * @return bcmos_errno
+ *
+ * @todo with multiple devices in future this needs to be done on per device basis and based on epon or gpon mode
+ */
+bcmos_errno _mac_util_register_for_auto_indications (struct bcmolt_rx_cfg *p_rx_cfg,
+                                                    mac_util_ind_obj_and_handlers obj_types_and_handlers[], uint16_t num_obj_types,
+                                                    bcmolt_devid device_id)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    int i;
+
+    for (i = 0; i < num_obj_types; i++)
+    {
+        /* set to specific auto indication object type */
+        p_rx_cfg->obj_type = obj_types_and_handlers[i].obj_type;
+        rc = bcmolt_auto_rx_cb_set(device_id, p_rx_cfg);
+        if (BCM_ERR_OK != rc)
+        {
+            return rc;
+        }
+    }
+
+    return BCM_ERR_OK;
+}
+
+
+/**
+ * @brief  Maple auto indication register for specific device based indications
+ *
+ * @param p_rx_cfg           handler config structure
+  *@param  device_id                         specific device id (for multiple devices support)
+ *
+ * @return bcmos_errno
+ */
+bcmos_errno mac_util_register_for_device_auto_indications (struct bcmolt_rx_cfg *p_rx_cfg, bcmolt_devid device_id)
+{
+    return _mac_util_register_for_auto_indications (p_rx_cfg, mac_util_device_ind_handlers, BCM_SIZEOFARRAY(mac_util_device_ind_handlers),device_id);
+}
+
+
+/**
+ * @brief mac_util_indication_handler_register
+ * this local routine registers the local function 'mac_util_indication_cb'
+ * as the callback for any indications coming from maple device
+ *
+  *@param  device_id                         specific device id (for multiple devices support)
+  *
+ * @return bcmos_errno
+ */
+static bcmos_errno mac_util_indication_handler_register(bcmolt_devid device_id)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+
+    struct bcmolt_rx_cfg rx_cfg =
+    {
+        .obj_type = BCMOLT_OBJECT_ANY,
+        .rx_cb = g_indication_handler,
+        .flags = BCMOLT_AUTO_FLAGS_DISPATCH,
+        .module = BCMOS_MODULE_ID_WORKER_MGMT,
+        .pon_ni_mask = 0  /** Bitmask of pon_ni interfaces the registration applies to.  0=all interfaces. */
+    };
+
+
+    rc =  mac_util_register_for_device_auto_indications(&rx_cfg, device_id);
+    if (BCM_ERR_OK != rc)
+    {
+        return rc;
+    }
+
+    rc =  mac_util_register_for_gpon_auto_indications(&rx_cfg, device_id);
+    if (BCM_ERR_OK != rc)
+    {
+        return rc;
+    }
+
+    rc =  mac_util_register_for_xgpon_auto_indications(&rx_cfg, device_id);
+    if (BCM_ERR_OK != rc)
+    {
+        return rc;
+    }
+
+    return BCM_ERR_OK;
+}
+
+
+/**
+ * @brief reset mac_util access terminal internal db
+ * all devices marked as disconnected
+ */
+
+static void mac_util_access_terminal_reset (void)
+{
+    bcmolt_devid device_id;
+
+    BCM_TOPO_FOR_EACH_DEV(device_id)
+    {
+        acc_term_connectivity.devices[device_id].is_connected = BCMOS_FALSE;
+    }
+
+    acc_term_connectivity.fail_reported = BCMOS_FALSE;
+}
+
+/**
+ * @brief reset a single maple device
+ *
+ * @param device_id the maple device id to be reset
+ *
+ * @return bcmos_errno
+ */
+
+static bcmos_errno reset_device(bcmolt_devid device_id)
+{
+
+    bcmolt_device_key key = {};
+    bcmolt_device_reset oper;
+
+    BCMOLT_OPER_INIT(&oper, device, reset, key);
+    BCMOLT_OPER_PROP_SET(&oper, device, reset, mode, BCMOLT_DEVICE_RESET_MODE_DEVICE);
+
+    return bcmolt_oper_submit(device_id , &oper.hdr);
+}
+
+/**
+  * @brief  common config across mac modes during access terminal set.
+  * currently only the admin up case is supported (op_type is ignored))
+  * @note   this is called from individual mac handler files rather than calling upfront here in this file
+  *         in access_terminal_set(), because this is not to be called for loopback mode.
+  *
+  *
+  * @return bcmos_errno
+  */
+
+bcmos_errno maple_access_terminal_set_common (acc_term_inst *p_acc_term, bal_util_oper_acc_term op_type, bcmolt_devid device_id)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+
+
+    rc = reset_device(device_id);
+    if (rc != BCM_ERR_OK)
+    {
+        BCM_LOG(ERROR, log_id_mac_util, "Failed to reset device %d (%s)\n", device_id, bcmos_strerror(rc));
+        return rc;
+    }
+    /* Because there is no indication coming from Maple that device reset is complete, we should sleep here. 1 second should be enough. */
+    bcmos_usleep(1000000);
+
+    /* register for maple indications - doing it after reset to avoid catching stale indications */
+    rc = mac_util_indication_handler_register(device_id);
+    if (rc != BCM_ERR_OK)
+    {
+        BCM_LOG(ERROR, log_id_mac_util, "Failed to register for device %d indications (%s)\n", device_id, bcmos_strerror(rc));
+        return rc;
+    }
+    /* using 1 second delay between the indication registration and configuration setup
+       to let the maple proxy queue get empty */
+    bcmos_usleep(1000000);
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno maple_access_terminal_connect_common (bcmolt_devid device_id)
+{
+    bcmos_errno rc;
+    bcmolt_device_connect dev_connect_oper;
+    bcmolt_device_key key = {};
+
+    /* invoking the connect operation */
+    BCMOLT_OPER_INIT(&dev_connect_oper, device, connect, key);
+
+    rc = bcmolt_oper_submit(device_id, &dev_connect_oper.hdr);
+    if (rc != BCM_ERR_OK)
+    {
+        BCM_LOG(ERROR, log_id_mac_util, "Failed to submit connect operation for device %d (%s), err_text = %s\n",
+            device_id, bcmos_strerror(rc), dev_connect_oper.hdr.hdr.err_text);
+    }
+
+    return rc;
+}
+
+/* Derive a specific device system mode from topology and store it at the internal db*/
+static bcmos_errno mac_util_system_mode_get(bcmolt_devid device_id)
+{
+    uint32_t logical_pon;
+    uint32_t pon_mode2max_physical_pons[BCM_TOPO_PON_MODE__NUM_OF] = {};
+
+    BCM_TOPO_DEV_FOR_EACH_PON(device_id, logical_pon)
+    {
+        uint32_t physical_pon;
+        bcm_topo_pon_mode pon_mode;
+
+        pon_mode = bcm_topo_pon_get_pon_mode(logical_pon);
+        bcm_topo_pon_get_logical2physical(logical_pon, &device_id, &physical_pon);
+        /* Get the number of physical PONs mapped.
+         * For example, if the user mapped only 4 physical PONs out of 16 in GPON mode, and the maximum physical PON mapped was 11, then the system mode should be GPONx16, not GPONx8. */
+        pon_mode2max_physical_pons[pon_mode] = MAX(pon_mode2max_physical_pons[pon_mode], physical_pon + 1);
+
+    }
+
+    if (bcmbal_is_mac_in_loopback())
+        acc_term_connectivity.devices[device_id].system_mode = BCMOLT_SYSTEM_MODE_LOOPBACK;
+    else if (pon_mode2max_physical_pons[BCM_TOPO_PON_MODE_GPON])
+    {
+        if (pon_mode2max_physical_pons[BCM_TOPO_PON_MODE_GPON] <= 8)
+            acc_term_connectivity.devices[device_id].system_mode = BCMOLT_SYSTEM_MODE_GPON__8_X;
+        else
+            acc_term_connectivity.devices[device_id].system_mode = BCMOLT_SYSTEM_MODE_GPON__16_X;
+    }
+    else if (pon_mode2max_physical_pons[BCM_TOPO_PON_MODE_XGPON])
+        acc_term_connectivity.devices[device_id].system_mode = BCMOLT_SYSTEM_MODE_XGPON_1__8_X;
+    else if (pon_mode2max_physical_pons[BCM_TOPO_PON_MODE_XGS])
+        acc_term_connectivity.devices[device_id].system_mode = BCMOLT_SYSTEM_MODE_XGS__2_X_10_G;
+    else if (pon_mode2max_physical_pons[BCM_TOPO_PON_MODE_EPON_TDMA])
+    {
+        if (pon_mode2max_physical_pons[BCM_TOPO_PON_MODE_EPON_TDMA] <= 4)
+            acc_term_connectivity.devices[device_id].system_mode = BCMOLT_SYSTEM_MODE_EPON__4_X_COEXISTENCE_TDMA;
+        else
+            acc_term_connectivity.devices[device_id].system_mode = BCMOLT_SYSTEM_MODE_EPON__8_X_COEXISTENCE_TDMA;
+    }
+    else if (pon_mode2max_physical_pons[BCM_TOPO_PON_MODE_EPON_1G])
+    {
+        if (pon_mode2max_physical_pons[BCM_TOPO_PON_MODE_EPON_1G] <= 4)
+            acc_term_connectivity.devices[device_id].system_mode = BCMOLT_SYSTEM_MODE_EPON__4_X;
+        else if (pon_mode2max_physical_pons[BCM_TOPO_PON_MODE_EPON_1G] <= 8)
+            acc_term_connectivity.devices[device_id].system_mode = BCMOLT_SYSTEM_MODE_EPON__8_X;
+        else
+            acc_term_connectivity.devices[device_id].system_mode = BCMOLT_SYSTEM_MODE_EPON__16_X;
+    }
+    else if (pon_mode2max_physical_pons[BCM_TOPO_PON_MODE_EPON_10G])
+    {
+        if (pon_mode2max_physical_pons[BCM_TOPO_PON_MODE_EPON_10G] <= 2)
+            acc_term_connectivity.devices[device_id].system_mode = BCMOLT_SYSTEM_MODE_EPON__2_X_10_G;
+        else if (pon_mode2max_physical_pons[BCM_TOPO_PON_MODE_EPON_10G] <= 4)
+            acc_term_connectivity.devices[device_id].system_mode = BCMOLT_SYSTEM_MODE_EPON__4_X_10_G;
+        else
+            acc_term_connectivity.devices[device_id].system_mode = BCMOLT_SYSTEM_MODE_EPON__8_X_10_G;
+    }
+    else if (pon_mode2max_physical_pons[BCM_TOPO_PON_MODE_LOOPBACK])
+        acc_term_connectivity.devices[device_id].system_mode = BCMOLT_SYSTEM_MODE_LOOPBACK;
+    else
+    {
+        BCM_LOG(ERROR, log_id_mac_util, "Cannot determine system mode from topology\n");
+        return BCM_ERR_PARM;
+    }
+
+    return BCM_ERR_OK;
+}
+
+/**
+ * @brief Command Set setup routine for access terminal connect to the mac devices
+ *
+ * This routine is called by acc_term_fsm in the BAL core, at an admin up operation
+ * and will result in setting and connecting all the access terminal devices
+ *
+ * @param p_acc_term   Pointer to access terminal instance
+ * @param op_type     Operation type on access terminal instance
+ *
+ * @return bcmos_errno
+ *
+ * @todo this code will change with multiple devices
+ */
+bcmos_errno mac_util_access_terminal_set(acc_term_inst *p_acc_term, bal_util_oper_acc_term op_type)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcmolt_devid device_id;
+    bcmos_bool is_wait_for_report = BCMOS_FALSE;
+
+    BCM_TOPO_FOR_EACH_DEV(device_id)
+    {
+        /*will reset and connect, in case the device is not already connected*/
+        if (!acc_term_connectivity.devices[device_id].is_connected)
+        {
+            /* Add timeout between bringing up maple devices.
+             * Otherwise, maple APIs can time out
+             */
+            if (is_wait_for_report)
+                bcmos_usleep(10000000);
+            is_wait_for_report = BCMOS_TRUE;
+            /* mac mode specific acc term set */
+            if (mac_util_bal_req_handlers_for_system_mode[acc_term_connectivity.devices[device_id].system_mode].acc_term_set)
+            {
+                rc = mac_util_bal_req_handlers_for_system_mode[acc_term_connectivity.devices[device_id].system_mode].acc_term_set(p_acc_term, op_type, device_id);
+            }
+
+            if (BCM_ERR_OK != rc)
+            {
+                BCM_LOG(ERROR, log_id_mac_util, "%s: FAILED: rc = %s (%d)\n",
+                    __FUNCTION__, bcmos_strerror(rc), rc);
+                return rc;
+            }
+        }
+    }
+    if (!is_wait_for_report)
+    {
+        mac_util_report_acc_term_event(BCMOLT_DEVICE_AUTO_ID_CONNECTION_COMPLETE);
+    }
+
+    return rc;
+}
+
+/*---------------------------------------------------------------------------------------------*/
+/*----------------------------------interface set handling-------------------------------------------*/
+
+/**
+ * @brief Command Set setup routine for interface up to mac application
+ *
+ * This routine is called by if_fsm in the BAL core to initialize the command
+ * set to up the interface of the mac application. The cmdset actually
+ * consists of two commands, one is to send the if up request message to the mac
+ * App and handle the relevant response, the other is to handle the indication message
+ * from the mac APP when the operation is completed.
+ *
+ * @param p_interface_inst    Pointer to interface instance
+ * @param op_type    Operation type on interface instance
+ *
+ * @return bcmos_errno
+ *
+ * @todo  system mode to identify handler function is global across olt now.
+ *        This should be queried for per pon interface and used to identify the protocol
+ *        and the corresponding handler.
+ */
+bcmos_errno mac_util_interface_set(acc_term_interface *p_interface_inst, bal_util_oper_if op_type)
+{
+    /* Parameter checks */
+    BUG_ON(NULL == p_interface_inst);
+
+    bcmos_errno rc = BCM_ERR_OK;
+    bcmbal_interface_key intf_key = p_interface_inst->api_req_int_obj_info.key;
+    bcm_topo_pon_mode pon_mode;
+
+     /* First check if it is for PON interface. If not (i.e. NNI), then just return a success without
+     * forwarding anything to MAC hardware.
+     */
+    if (BCMBAL_INTF_TYPE_PON != intf_key.intf_type)
+    {
+        mac_util_report_if_event(intf_key.intf_id,
+                intf_key.intf_type,
+                BCM_ERR_OK, BCMOLT_RESULT_SUCCESS,
+                ((BAL_UTIL_OPER_IF_UP == op_type) ? BCMOLT_PON_STATE_ACTIVE_WORKING : BCMOLT_PON_STATE_INACTIVE));
+
+        return BCM_ERR_OK;
+    }
+
+    BCM_LOG(DEBUG, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(intf_key.intf_id),
+            "SET if %s , intf_type: %s, intf_id: %d\n",
+            (BAL_UTIL_OPER_IF_UP == op_type ? "UP" : "DOWN"),
+            (BCMBAL_INTF_TYPE_PON == intf_key.intf_type ? "PON":"NNI"),
+            intf_key.intf_id);
+
+    /* query PON mode */
+    pon_mode = mac_util_get_pon_mode(intf_key.intf_id);
+    if (pon_mode == BCM_TOPO_PON_MODE_INVALID)
+        rc = BCM_ERR_INTERNAL;
+
+    /* system mode specific interface set */
+    if ((BCM_ERR_OK == rc) && mac_util_bal_req_handlers_for_pon_mode[pon_mode].if_set)
+    {
+        rc = mac_util_bal_req_handlers_for_pon_mode[pon_mode].if_set(p_interface_inst, op_type);
+    }
+
+    if (BCM_ERR_OK != rc)
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(intf_key.intf_id),
+                "Failed INTERFACE-%s operation for IF %d\n",
+                (BAL_UTIL_OPER_IF_UP == op_type) ? "UP" : "DOWN", intf_key.intf_id);
+    }
+
+    return rc;
+}
+
+
+
+/*****************************************************************************/
+/**
+ * @brief mac_util_subscriber_terminal_info_validate
+ *
+ * This routine is used to validate all input attributes required for a sub term setting
+ * received from core
+ *
+ * @param p_sub_term_req       A pointer to a subscriber terminal object
+ *
+ * @return bcmos_errno
+ */
+/*****************************************************************************/
+bcmos_errno mac_util_subscriber_terminal_info_validate(const bcmbal_subscriber_terminal_cfg *p_sub_term_req)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcm_topo_pon_mode pon_mode;
+
+    /* query system mode */
+    pon_mode = mac_util_get_pon_mode(p_sub_term_req->key.intf_id);
+    if (pon_mode == BCM_TOPO_PON_MODE_INVALID)
+        rc = BCM_ERR_INTERNAL;
+
+    /* validate system mode specific things */
+    if ((BCM_ERR_OK == rc) && mac_util_bal_req_handlers_for_pon_mode[pon_mode].sub_term_validate)
+    {
+        rc = mac_util_bal_req_handlers_for_pon_mode[pon_mode].sub_term_validate(p_sub_term_req);
+    }
+
+    return rc;
+}
+
+
+/*----------------------------------subscriber terminal set handling-----------------------------------*/
+
+/**
+ * @brief Command Set setup routine for subscriber terminal connect to mac application
+ *
+ * This routine is called by sub_term_fsm in the BAL core to initialize the command
+ * set to connect the subscriber terminal of the mac application. The cmdset actually
+ * consists of two commands, one is to send the sub_term request message to the mac
+ * App and handle the relevant response, the other is to handle the indication message
+ * from the mac APP when the operation is completed.
+ *
+ * @param p_sub_term_inst   A pointer to a subscriber terminal instance
+ * @param op_type          Type of operation being performed on the subscriber terminal instance
+ * @param is_post_discovery Used for ADD, indicates if this request is after a ONU Discovery
+ *
+ * @return bcmos_errno
+ */
+
+bcmos_errno mac_util_subscriber_terminal_set(sub_term_inst *p_sub_term_inst, bal_util_oper_sub_term op_type, bcmos_bool is_post_discovery)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcmbal_subscriber_terminal_cfg *p_sub_term_req = &p_sub_term_inst->api_req_sub_term_info;
+    bcm_topo_pon_mode pon_mode;
+
+    BCM_LOG(DEBUG, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_sub_term_req->key.intf_id),
+            "IN : %s pon_id = %d onu_id= %d "
+            "omci_gem_port = %d\n",
+            __FUNCTION__,
+            p_sub_term_req->key.intf_id,
+            p_sub_term_req->key.sub_term_id, p_sub_term_req->data.svc_port_id);
+
+    if ((BAL_UTIL_OPER_SUB_TERM_ADD != op_type)
+        && (BAL_UTIL_OPER_SUB_TERM_REMOVE != op_type)
+        && (BAL_UTIL_OPER_SUB_TERM_CLEAR != op_type))
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_sub_term_req->key.intf_id),
+                "Unsupported operation %d for sub_term %u\n",
+                op_type, p_sub_term_req->key.sub_term_id);
+        return BCM_ERR_NOT_SUPPORTED;
+    }
+
+
+    /* query system mode */
+    pon_mode = mac_util_get_pon_mode(p_sub_term_req->key.intf_id);
+    if (pon_mode == BCM_TOPO_PON_MODE_INVALID)
+        rc = BCM_ERR_INTERNAL;
+
+    /* system mode specific sub term set */
+    if ((BCM_ERR_OK == rc) && mac_util_bal_req_handlers_for_pon_mode[pon_mode].sub_term_set)
+    {
+        rc = mac_util_bal_req_handlers_for_pon_mode[pon_mode].sub_term_set(p_sub_term_inst, op_type, is_post_discovery);
+    }
+
+
+    if (BCM_ERR_OK != rc)
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_sub_term_req->key.intf_id),
+                "%s: Failed: rc = %s (%d)\n",
+                __FUNCTION__, bcmos_strerror(rc), rc);
+    }
+
+    return rc;
+}
+
+
+
+
+/*---------------------------------------------------------------------------------------------*/
+/*------------------group set handling GROUP routines and helper functions-------------------*/
+/*---------------------------------------------------------------------------------------------*/
+
+/*****************************************************************************/
+/**
+ * @brief mac_util_group_info_validate
+ *
+ * This routine is used to validate all input attributes required for a group
+ * setting received from core
+ *
+ * @param p_group_req     A pointer to a group object
+ *
+ * @return bcmos_errno
+ */
+/*****************************************************************************/
+bcmos_errno mac_util_group_info_validate(const bcmbal_group_cfg *p_group_req)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    int i;
+
+    do
+    {
+        /* if the group has no owner, no need to check as service port will not be assigned */
+        if (p_group_req->data.owner == BCMBAL_GROUP_OWNER_NONE)
+        {
+            break;
+        }
+        /* if group member command is set, there has to be member info,
+           for remove, service port is an option
+         */
+        if (BCMBAL_CFG_PROP_IS_SET(p_group_req, group, members_cmd))
+        {
+            if(p_group_req->data.members.len)
+            {
+                for(i=0; i< p_group_req->data.members.len; i++)
+                {
+                    /* all members should have the service port as non-zero */
+                    if (!p_group_req->data.members.val[i].svc_port_id)
+                    {
+                        BCM_LOG(ERROR, log_id_mac_util,
+                            "svc_port_id is a mandatory parameter for a group member, and it can not set to zero\n");
+                        rc = BCM_ERR_MANDATORY_PARM_IS_MISSING;
+                        break;
+                    }
+                }
+            }
+        }
+
+    }while(0);
+
+    return rc;
+}
+
+/**
+ * @brief Core interface: setup routine for group
+ *
+ * This routine is called by group_fsm in the BAL core to
+ * add/remove/set group in the mac application. Unlike flow request,
+ * the mac driver does not send indication messages back upon completion.
+ * This routine needs to fake an indication message to core to trigger the group_fsm.
+ *
+ * @param p_grp_inst  Pointer to group instance
+ * @param op_type     Operation type on group instance
+ * @param send_ind    TRUE - send indication, FALSE - don't send indication
+ *
+ * @return bcmos_errno
+ */
+bcmos_errno mac_util_group_set(group_inst *p_grp_inst, bal_util_oper_group op_type, bcmos_bool send_ind)
+{
+    bcmbal_group_cfg *p_group_req = &p_grp_inst->api_req_group_info;
+    bcmos_errno rc = BCM_ERR_OK;
+    bcmbal_group_cfg *p_group_lookup_info = NULL;
+    bcm_topo_pon_mode pon_mode;
+
+    do
+    {
+        /* if the group has no owner, no need to access the HW as service port will not be set */
+        if (p_group_req->data.owner == BCMBAL_GROUP_OWNER_NONE)
+        {
+            break;
+        }
+
+        /*
+         * When we are doing a GROUP_ADD, the API request has the information we need,
+         * When we are doing a GROUP_DESTROY, the current group info has this information (because
+         * the GROUP_DESTROY request only has the group key populated. The current flow info has
+         * all of the attributes used when create the group.
+         */
+        p_group_lookup_info = (BAL_UTIL_OPER_GROUP_DESTROY == op_type) ? &p_grp_inst->current_group_info : p_group_req;
+
+        BCM_LOG(INFO,  log_id_mac_util, "%s group_id = %d with oper type %s\n ",
+                __FUNCTION__,
+                p_group_lookup_info->key.group_id,
+                BCMBAL_UTIL_GROUP_OPER_STR_GET(op_type)
+                );
+
+        /* mac only need to response to set member when op_type is ADD/REMOVE/SET - configure multicast service ports */
+        if ((BAL_UTIL_OPER_GROUP_ADD     == op_type ||
+             BAL_UTIL_OPER_GROUP_REMOVE  == op_type ||
+             BAL_UTIL_OPER_GROUP_SET     == op_type   ) &&
+             BCMBAL_CFG_PROP_IS_SET(p_group_req, group, members))
+        {
+            /* assume all members are of same mode */
+            /* query system mode */
+            pon_mode = mac_util_get_pon_mode(p_group_req->data.members.val[0].intf_id);
+            if (pon_mode == BCM_TOPO_PON_MODE_INVALID)
+            {
+                rc = BCM_ERR_INTERNAL;
+            }
+            /* system mode specific group set */
+            else if ( mac_util_bal_req_handlers_for_pon_mode[pon_mode].group_set)
+            {
+                rc = mac_util_bal_req_handlers_for_pon_mode[pon_mode].group_set(p_group_req, op_type, p_grp_inst);
+            }
+
+        }
+
+        /* special case - destroy with valid members, then need to remove all members */
+        else if ((BAL_UTIL_OPER_GROUP_DESTROY  == op_type &&  p_group_lookup_info->data.members.len != 0))
+        {
+            /* query system mode - use first member as default */
+            pon_mode = mac_util_get_pon_mode(p_group_lookup_info->data.members.val[0].intf_id);
+            if (pon_mode == BCM_TOPO_PON_MODE_INVALID)
+            {
+                rc = BCM_ERR_INTERNAL;
+            }
+            /* system mode specific group set */
+            else if ( mac_util_bal_req_handlers_for_pon_mode[pon_mode].group_set)
+            {
+                rc = mac_util_bal_req_handlers_for_pon_mode[pon_mode].group_set(p_group_lookup_info, BAL_UTIL_OPER_GROUP_REMOVE, p_grp_inst);
+            }
+        }
+    }while(0);
+
+    /* return an indication message to core */
+    if(send_ind)
+    {
+        _mac_util_report_group_set_indication(p_group_req->key, op_type, rc);
+    }
+
+    if (BCM_ERR_OK != rc)
+    {
+        BCM_LOG(ERROR, log_id_mac_util,
+                "%s Failed: rc = %s (%d)\n",
+                __FUNCTION__,
+                bcmos_strerror(rc), rc);
+    }
+
+    return rc;
+}
+
+
+/*---------------------------------------------------------------------------------------------*/
+/*------------------flow set handling Interface routines and helper functions-------------------*/
+/*---------------------------------------------------------------------------------------------*/
+
+
+
+/*****************************************************************************/
+/**
+ * @brief mac_util_flow_info_validate
+ *
+ * This routine is used to validate all input attributes required for a flow
+ * setting received from core
+ *
+ * @param p_flow_req     A pointer to a flow object
+ *
+ * @return bcmos_errno
+ */
+/*****************************************************************************/
+bcmos_errno mac_util_flow_info_validate(const bcmbal_flow_cfg *p_flow_req)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcm_topo_pon_mode pon_mode;
+
+    do
+    {
+        if (p_flow_req->key.flow_type == BCMBAL_FLOW_TYPE_MULTICAST)
+        {
+            /* nothing to do in multicast FLOW - validate in GROUP*/
+            break;
+        }
+        if (p_flow_req->key.flow_type == BCMBAL_FLOW_TYPE_DOWNSTREAM &&
+            BCMBAL_CFG_PROP_IS_SET(p_flow_req, flow, group_id)        )
+        {
+            /* nothing to do in DS N:1 FLOW - validate in GROUP */
+            break;
+        }
+
+        if (!BCMBAL_CFG_PROP_IS_SET(p_flow_req, flow, access_int_id))
+        {
+            BCM_LOG(ERROR, log_id_mac_util,
+                    "access if id is a mandatory parameter for a flow, and it is not set\n");
+            rc = BCM_ERR_MANDATORY_PARM_IS_MISSING;
+
+            break; /* if interface id not set then skip rest of the checks */
+        }
+
+        if (p_flow_req->key.flow_type != BCMBAL_FLOW_TYPE_BROADCAST)
+        {
+            if (!BCMBAL_CFG_PROP_IS_SET(p_flow_req, flow, sub_term_id))
+            {
+                BCM_LOG(ERROR,  MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow_req->data.access_int_id),
+                        "sub term id is a mandatory parameter for a flow, and it is not set\n");
+                rc = BCM_ERR_MANDATORY_PARM_IS_MISSING;
+            }
+        }
+
+        if (!BCMBAL_CFG_PROP_IS_SET(p_flow_req, flow, svc_port_id))
+        {
+            BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow_req->data.access_int_id),
+                    "svc_port_id is a mandatory parameter for a flow, and it is not set\n");
+            rc = BCM_ERR_MANDATORY_PARM_IS_MISSING;
+        }
+
+        /* validate flow id */
+        if (BCMOS_FALSE == MAC_UTIL_FLOW_DB_FLOW_ID_IS_VALID(p_flow_req->key.flow_id))
+        {
+            BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow_req->data.access_int_id),
+                    "flow Id from user is not within range: %d <= flow id <= %d\n",
+                    MAC_UTIL_FLOW_DB_FLOW_ID_START_VAL, MAC_UTIL_FLOW_DB_FLOW_ID_MAX_VAL);
+            rc = BCM_ERR_PARM;
+        }
+
+
+
+        /* query system mode */
+        pon_mode = mac_util_get_pon_mode(p_flow_req->data.access_int_id);
+        if (pon_mode == BCM_TOPO_PON_MODE_INVALID)
+        {
+            rc = BCM_ERR_INTERNAL;
+
+            if (BCM_ERR_OK != rc)
+            {
+                BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow_req->data.access_int_id),
+                        "could not get system mode for pon interface\n");
+            }
+        }
+
+        /* system mode specific validation */
+        if ((BCM_ERR_OK == rc) && mac_util_bal_req_handlers_for_pon_mode[pon_mode].flow_validate)
+        {
+            rc = mac_util_bal_req_handlers_for_pon_mode[pon_mode].flow_validate(p_flow_req);
+            /* the called function will log any protocol specific validation errors */
+        }
+
+    } while (0);
+
+    return rc;
+}
+
+/**
+ * @brief Core interface: setup routine for flow
+ *
+ * This routine is called by flow_fsm in the BAL core to initialize the command
+ * to add flow to the mac application. The cmdset actually
+ * consists of two commands, one is to send the flow request message to the mac
+ * App and handle the relevant response, the other is to handle the indication message
+ * from the mac APP when the operation is completed.
+ *
+ * @param p_flow_core   Pointer to flow instance from core fsm
+ * @param op_type       Operation type on flow instance
+ *
+ * @return bcmos_errno
+ */
+bcmos_errno mac_util_flow_set(flow_inst *p_flow_core, bal_util_oper_flow op_type)
+{
+    bcmbal_flow_cfg *p_flow_req = &p_flow_core->api_req_flow_info;
+    bcmos_errno rc = BCM_ERR_OK;
+
+    bcmbal_flow_cfg *p_flow_lookup_info = NULL;
+    bcm_topo_pon_mode pon_mode;
+
+    /*
+     * When we are doing a FLOW_ADD, the API request has the information we need,
+     * When we are doing a FLOW_REMOVE, the current flow info has this information (because
+     * the FLOW_REMOVE request only has the flow key populated. The current flow info has
+     * all of the attributes used to create the flow in the first place.
+     */
+    p_flow_lookup_info = (BAL_UTIL_OPER_FLOW_ADD == op_type) ? p_flow_req : &p_flow_core->current_flow_info;
+
+    bcmos_bool flow_is_destined_to_host = BAL_UTIL_OPER_FLOW_ADD == op_type ?
+
+        ((BCMBAL_CFG_PROP_IS_SET(&p_flow_core->api_req_flow_info, flow, action) &&
+          (p_flow_core->api_req_flow_info.data.action.cmds_bitmask &
+           BCMBAL_ACTION_CMD_ID_TRAP_TO_HOST)) ? BCMOS_TRUE : BCMOS_FALSE) :
+
+        ((BCMBAL_CFG_PROP_IS_SET(&p_flow_core->current_flow_info, flow, action) &&
+          (p_flow_core->current_flow_info.data.action.cmds_bitmask &
+           BCMBAL_ACTION_CMD_ID_TRAP_TO_HOST)) ? BCMOS_TRUE : BCMOS_FALSE);
+
+    /* There's no need to do anything with the MAC in downstream flows that
+     * that are destined to the host CPU (i.e. NNI->CPU)
+     */
+    if(((BCMBAL_FLOW_TYPE_DOWNSTREAM == p_flow_req->key.flow_type) &&
+         flow_is_destined_to_host))
+    {
+        /* When the flow is downstream and destined to the host (i.e. NNI->CPU), then there
+         * is nothing to do in the MAC, so just return an indication to allow the FSM to continue on.
+         */
+        if (BAL_UTIL_OPER_FLOW_ADD == op_type)
+        {
+            mac_util_report_flow_add_success(p_flow_req->key, p_flow_req->data.access_int_id);
+        }
+        else if ((BAL_UTIL_OPER_FLOW_REMOVE == op_type) || (BAL_UTIL_OPER_FLOW_CLEAR == op_type))
+        {
+            mac_util_report_flow_remove_success(p_flow_req->key, p_flow_req->data.access_int_id, op_type);
+        }
+    }
+    /* for multicast flow all works are done in GROUP object, simply send the indication to Core */
+    else if (BCMBAL_FLOW_TYPE_MULTICAST == p_flow_req->key.flow_type)
+    {
+        /* there is no access_int_id for multicast flow, pass 0 as parameter.
+           The interface number is just used for logging purpose in the indication API */
+         _mac_util_report_flow_set_indication(p_flow_req->key, 0, op_type, rc);
+    }
+    /* for downstream n:1 flow all works are done in GROUP object, simply send the indication to Core */
+    else if (BCMBAL_FLOW_TYPE_DOWNSTREAM == p_flow_req->key.flow_type       &&
+             (BCMBAL_CFG_PROP_IS_SET(p_flow_req, flow, group_id))             )
+    {
+        /* there is no access_int_id for DS N:1 flow, pass 0 as parameter.
+           The interface number is just used for logging purpose in the indication API */
+         _mac_util_report_flow_set_indication(p_flow_req->key, 0, op_type, rc);
+    }
+    else
+    {
+
+        BCM_LOG(INFO,  MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow_req->data.access_int_id),
+                "%s flow_id = %d dir = %s, pon_id = %d "
+                "onu_id= %d alloc_id = %d gem_port = %d, op_type = %s\n",
+                __FUNCTION__,
+                p_flow_lookup_info->key.flow_id,
+                p_flow_lookup_info->key.flow_type == BCMBAL_FLOW_TYPE_UPSTREAM ? "up":"down",
+                p_flow_lookup_info->data.access_int_id,
+                p_flow_lookup_info->data.sub_term_id,
+                p_flow_lookup_info->data.agg_port_id,
+                p_flow_lookup_info->data.svc_port_id,
+                (BAL_UTIL_OPER_FLOW_ADD == op_type ? "FLOW_ADD":
+                 (BAL_UTIL_OPER_FLOW_REMOVE == op_type ? "FLOW_REMOVE" : "FLOW_CLEAR")));
+
+        /* query system mode */
+        pon_mode = mac_util_get_pon_mode(p_flow_req->data.access_int_id);
+        if (pon_mode == BCM_TOPO_PON_MODE_INVALID)
+            rc = BCM_ERR_INTERNAL;
+
+        /* system mode specific flow set */
+        if ((BCM_ERR_OK == rc) && mac_util_bal_req_handlers_for_pon_mode[pon_mode].flow_set)
+        {
+            rc = mac_util_bal_req_handlers_for_pon_mode[pon_mode].flow_set(p_flow_lookup_info, op_type, p_flow_core);
+        }
+    }
+
+
+    if (BCM_ERR_OK != rc)
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow_req->data.access_int_id),
+                "%s Failed: rc = %s (%d)\n",
+                __FUNCTION__,
+                bcmos_strerror(rc), rc);
+    }
+
+    return rc;
+}
+
+/*****************************************************************************/
+/**
+ * @brief mac_util_tm sched_info_validate
+ *
+ * This routine is used to validate all input attributes required for a tm sched
+ * setting received from core
+ *
+ * @param p_tm_sched_req     A pointer to a tm sched object
+ *
+ * @return bcmos_errno
+ */
+/*****************************************************************************/
+bcmos_errno mac_util_tm_sched_info_validate(const bcmbal_tm_sched_cfg *p_tm_sched_req)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcm_topo_pon_mode pon_mode;
+    do
+    {
+        if (!BCMBAL_CFG_PROP_IS_SET(p_tm_sched_req, tm_sched, owner))
+        {
+            /* nothing to do in MAC */
+            break;
+        }
+        
+        if (p_tm_sched_req->data.owner.type != BCMBAL_TM_SCHED_OWNER_TYPE_AGG_PORT)
+        {
+            /* nothing to do in MAC */
+            break;
+        }
+        
+        /* query system mode */
+        pon_mode = mac_util_get_pon_mode(p_tm_sched_req->data.owner.u.agg_port.intf_id);
+        if (pon_mode == BCM_TOPO_PON_MODE_INVALID)
+            rc = BCM_ERR_INTERNAL;
+        
+        if (BCM_ERR_OK != rc)
+        {
+            BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_tm_sched_req->data.owner.u.agg_port.intf_id),
+                    "could not get system mode for pon interface\n");
+        }
+    } while (0);	
+    return rc;
+}
+
+bcmos_errno mac_util_agg_port_set(tm_sched_inst *p_tm_sched, bal_util_oper_agg_port op_type)
+{
+    bcmbal_tm_sched_cfg *p_agg_port_req = &p_tm_sched->req_tm_sched_info;
+    bcmos_errno rc = BCM_ERR_OK;
+
+
+    bcm_topo_pon_mode pon_mode;
+    do
+    {
+
+        /* query system mode */
+        pon_mode = mac_util_get_pon_mode(p_agg_port_req->data.owner.u.agg_port.intf_id);
+        if (pon_mode == BCM_TOPO_PON_MODE_INVALID)
+        {
+            rc = BCM_ERR_INTERNAL;
+            break;
+        }
+        rc = maple_mac_util_agg_port_set(p_agg_port_req, op_type, p_tm_sched);
+
+    }while(0);
+    return rc;
+}
+
+#if !defined(WRX_BUILD)
+/* Internal function that finds UDP port to bind to */
+static bcmos_errno _mac_util_find_free_udp_port(uint16_t *p_port)
+{
+#define MAX_UDP_PORT_TRY_ITER   100 /* Try 100 times, then give up */
+#define MAX_UDP_PORT            60000
+#define MIN_UDP_PORT            (MAX_UDP_PORT / 2)
+    uint16_t port;
+    struct sockaddr_in sa;
+    int sock;
+    int bind_rc;
+    int i = 0;
+
+    /* Open UDP socket */
+    sock = socket(AF_INET, SOCK_DGRAM, 0);
+    if (sock < 0)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_PARM, "Can't create UDP socket. error %s\n", strerror(errno));
+    }
+
+    memset(&sa, 0, sizeof(sa));
+    sa.sin_family = AF_INET;
+    sa.sin_addr.s_addr = INADDR_ANY;
+
+    do
+    {
+        port = rand() % MAX_UDP_PORT;
+        if (port < MIN_UDP_PORT)
+            port += MIN_UDP_PORT;
+        sa.sin_port = htons(port);
+        bind_rc = bind(sock, (struct sockaddr *)&sa, sizeof(sa));
+    } while (bind_rc < 0 && ++i < MAX_UDP_PORT_TRY_ITER);
+
+    /* Yes, yes. There is a possible race condition that someone will take the port we've just found
+     * before we had a chance to bind it again.
+     * In this unlikely case BAL application will fail on startup and will have to be restarted.
+     */
+    close(sock);
+
+    if (bind_rc < 0)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_NORES, "Couldn't find unused UDP port after %d tries. Giving up.\n", i);
+    }
+
+    *p_port = port;
+
+    return BCM_ERR_OK;
+}
+#endif
+
+static void bal_indication_cb(bcmolt_devid olt, bcmolt_msg *p_msg)
+{
+    mac_util_indication_cb(olt, p_msg);
+
+    bcmolt_msg_free(p_msg);
+}
+
+#ifdef ENABLE_LOG
+/**
+ * @brief routine to register per pon log strings with logger
+ *
+ * @param system_mode  -OLT system mode
+ *
+ * @return  bcmos_errno
+ */
+static bcmos_errno mac_util_register_logging_per_pon (void)
+{
+    char log_str_buf[MAC_UTIL_LOG_STR_SZ] = {0};
+    bcmolt_devid device_id;
+    uint32_t logical_pon;
+
+    /** @note if by any chance the system mode is set multiple times, then we want to avoid
+     * re-registering already registered pon interfaces, because there is currently no way
+     * to de-register those interfaces first. We will just register the not-registered ones.
+     */
+    /* register log Ids for each PON interface, that is not already registered */
+    BCM_TOPO_FOR_EACH_PON(device_id, logical_pon)
+    {
+        if (0 != log_id_mac_util_pon_if[logical_pon])
+        {
+            continue;
+        }
+
+        /* make a log id string */
+        MAC_UTIL_MAKE_LOG_STR_FOR_PON_IF(logical_pon, log_str_buf, sizeof(log_str_buf));
+        /* register log id string for pon interface */
+        log_id_mac_util_pon_if[logical_pon] = bcm_dev_log_id_register(log_str_buf, DEV_LOG_LEVEL_INFO, DEV_LOG_ID_TYPE_BOTH);
+        BUG_ON(log_id_mac_util_pon_if[logical_pon] == DEV_LOG_INVALID_ID);
+    }
+
+    return BCM_ERR_OK;
+}
+#endif
+
+
+
+/**
+ * @brief get ip & port for MAC/Maple
+ */
+bcmos_errno mac_util_init_parse_mac_ip_and_port (const char *maple_address)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+
+#if !defined(WRX_BUILD)
+    rc = app_util_parse_ip_port(maple_address, &bcmtr_olt_ip[0], &bcmtr_olt_udp_port[0]);
+    if (rc)
+    {
+        return rc;
+    }
+
+    srand(bcmos_timestamp());
+    rc = _mac_util_find_free_udp_port(&bcmtr_host_udp_port);
+#endif
+
+    return rc;
+}
+
+
+/**
+ * @brief mac_util_init  routine for mac application
+ * @param maple_address  - pointer to maple device instance
+ * @return bcmos_errno
+ */
+bcmos_errno mac_util_init(const char *maple_address)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcmolt_devid device_id;
+
+    do
+    {
+#ifdef ENABLE_LOG
+        /* register a generic MAC util log Id too, for use other than PON If related logs */
+        log_id_mac_util = bcm_dev_log_id_register("MAC_UTIL", DEV_LOG_LEVEL_INFO, DEV_LOG_ID_TYPE_BOTH);
+        BUG_ON(log_id_mac_util == DEV_LOG_INVALID_ID);
+#endif
+
+        if (!bcmbal_is_mac_in_loopback())
+        {
+            rc = mac_util_init_parse_mac_ip_and_port (maple_address);
+            if (BCM_ERR_OK != rc)
+                break;
+        }
+
+        g_indication_handler = bal_indication_cb;
+
+        BCM_TOPO_FOR_EACH_DEV(device_id)
+        {
+            rc = mac_util_system_mode_get(device_id);
+            if (BCM_ERR_OK != rc)
+            {
+                BCM_LOG(ERROR, log_id_mac_util, "%s: system mode get for device %d FAILED: rc = %s (%d)\n",
+                    __FUNCTION__, device_id, bcmos_strerror(rc), rc);
+                break;
+            }
+        }
+
+#ifdef ENABLE_LOG
+        /* register logging for each PON based on mac mode*/
+        mac_util_register_logging_per_pon();
+#endif
+
+        mac_util_access_terminal_reset();
+
+    } while(0);
+
+    return rc;
+}
+
+
+/*****************************************************************************/
+/**
+ * @brief This function is the helper for the mac app print_flows CLI command backend
+ *        which print the full internal flows list
+ *
+ * @param sess   Pointer to the current cli session
+ * @param parm   An array of parameters from the CLI command, which will be empty on that no parameters command case
+ * @param nParms The number of elements in the parm array (above) that have
+ *               valid data, which will be 0 on that case.
+ *
+ * @returns BCM_ERR_OK on success, other bcmos_errno codes otherwise
+ *
+ *****************************************************************************/
+static bcmos_errno _cmd_flows_print(bcmcli_session *sess, const bcmcli_cmd_parm parm[], uint16_t nParms)
+{
+    flow_list_entry *p_current_entry = NULL;
+    flow_list_entry *p_next_entry = NULL;
+    uint32_t if_id = 0;
+
+    printf("Flow DB: starting flow id=%d, max flow id=%d\n",
+            MAC_UTIL_FLOW_DB_FLOW_ID_START_VAL, MAC_UTIL_FLOW_DB_FLOW_ID_MAX_VAL);
+
+    for (if_id=0; if_id < NUM_SUPPORTED_SUBSCRIBER_INTERFACES; if_id++)
+    {
+        /* before every db segment, NULL the current entry */
+        p_current_entry = NULL;
+        p_next_entry = NULL;
+
+        /* get first */
+        p_current_entry = _mac_util_db_flow_get_next_w_flow_key (if_id, p_current_entry, &p_next_entry);
+        while (NULL != p_current_entry)
+        {
+            printf("\n------------------------------\n");
+            printf ("\nflow_id = %d flow_type = %d\n", p_current_entry->bal_flow_key.flow_id, p_current_entry->bal_flow_key.flow_type);
+            printf ("\n if_id = %d sub_term_id = %d svc_port_id = %d agg_id = %d vlan_id = %d\n",
+                p_current_entry->if_id, p_current_entry->sub_term_id, p_current_entry->svc_port_id, p_current_entry->agg_id, p_current_entry->vlan_id);
+            printf("\n is_waiting_for_svc_port_active = %s is_configuration_completed=%s ind_sent = %d\n",
+                p_current_entry->is_waiting_for_svc_port_active==BCMOS_TRUE ? "true" : "false",
+                p_current_entry->is_configuration_completed==BCMOS_TRUE ? "true" : "false",
+                p_current_entry->ind_sent);
+            printf("\n------------------------------\n");
+
+            /* get next */
+            p_current_entry = _mac_util_db_flow_get_next_w_flow_key (if_id, p_current_entry, &p_next_entry);
+        }
+    }
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno _cmd_flows_print_for_gem(bcmcli_session *sess, const bcmcli_cmd_parm parm[], uint16_t nParms)
+{
+    flow_list_entry *p_current_entry = NULL;
+    void *p_rsc_mgr_curr_entry = NULL;
+    void *p_rsc_mgr_next_entry = NULL;
+
+    uint32_t if_id = 0;
+
+    printf("Flow DB for a GEM port [%ld]: starting flow id=%d, max flow id=%d\n",
+            parm[0].value.unumber, MAC_UTIL_FLOW_DB_FLOW_ID_START_VAL, MAC_UTIL_FLOW_DB_FLOW_ID_MAX_VAL);
+
+    for (if_id=0; if_id < NUM_SUPPORTED_SUBSCRIBER_INTERFACES; if_id++)
+    {
+        /* before every db segment, NULL the current entry */
+        p_current_entry = NULL;
+
+        /* get first */
+        p_current_entry = _mac_util_db_flow_get_next_w_gem (if_id, parm[0].value.unumber, &p_rsc_mgr_curr_entry, &p_rsc_mgr_next_entry);
+        while (NULL != p_current_entry)
+        {
+            printf("\n------------------------------\n");
+            printf ("\nflow_id = %d flow_type = %d\n", p_current_entry->bal_flow_key.flow_id, p_current_entry->bal_flow_key.flow_type);
+            printf ("\n if_id = %d sub_term_id = %d svc_port_id = %d agg_id = %d vlan_id = %d\n",
+                p_current_entry->if_id, p_current_entry->sub_term_id, p_current_entry->svc_port_id, p_current_entry->agg_id, p_current_entry->vlan_id);
+            printf("\n is_waiting_for_svc_port_active = %s is_configuration_completed=%s ind_sent = %d\n",
+                p_current_entry->is_waiting_for_svc_port_active==BCMOS_TRUE ? "true" : "false",
+                p_current_entry->is_configuration_completed==BCMOS_TRUE ? "true" : "false",
+                p_current_entry->ind_sent);
+            printf("\n------------------------------\n");
+
+            /* get next */
+            p_current_entry = _mac_util_db_flow_get_next_w_gem (if_id, parm[0].value.unumber, &p_rsc_mgr_curr_entry, &p_rsc_mgr_next_entry);
+        }
+    }
+
+    return BCM_ERR_OK;
+}
+
+
+static bcmos_errno _cmd_flows_print_for_alloc_id(bcmcli_session *sess, const bcmcli_cmd_parm parm[], uint16_t nParms)
+{
+    flow_list_entry *p_current_entry = NULL;
+    void *p_rsc_mgr_curr_entry = NULL;
+    void *p_rsc_mgr_next_entry = NULL;
+
+    uint32_t if_id = 0;
+
+    printf("Flow DB for a Alloc Id [%ld]: starting flow id=%d, max flow id=%d\n",
+            parm[0].value.unumber, MAC_UTIL_FLOW_DB_FLOW_ID_START_VAL, MAC_UTIL_FLOW_DB_FLOW_ID_MAX_VAL);
+
+    for (if_id=0; if_id < NUM_SUPPORTED_SUBSCRIBER_INTERFACES; if_id++)
+    {
+        /* before every db segment, NULL the current entry */
+        p_current_entry = NULL;
+
+        /* get first */
+        p_current_entry = _mac_util_db_flow_get_next_w_alloc_id (if_id, parm[0].value.unumber, &p_rsc_mgr_curr_entry, &p_rsc_mgr_next_entry);
+        while (NULL != p_current_entry)
+        {
+            printf("\n------------------------------\n");
+            printf ("\nflow_id = %d flow_type = %d\n", p_current_entry->bal_flow_key.flow_id, p_current_entry->bal_flow_key.flow_type);
+            printf ("\n if_id = %d sub_term_id = %d svc_port_id = %d agg_id = %d vlan_id = %d\n",
+                p_current_entry->if_id, p_current_entry->sub_term_id, p_current_entry->svc_port_id, p_current_entry->agg_id, p_current_entry->vlan_id);
+            printf("\n is_waiting_for_svc_port_active = %s is_configuration_completed=%s ind_sent = %d\n",
+                p_current_entry->is_waiting_for_svc_port_active==BCMOS_TRUE ? "true" : "false",
+                p_current_entry->is_configuration_completed==BCMOS_TRUE ? "true" : "false",
+                p_current_entry->ind_sent);
+            printf("\n------------------------------\n");
+
+            /* get next */
+            p_current_entry = _mac_util_db_flow_get_next_w_alloc_id (if_id, parm[0].value.unumber, &p_rsc_mgr_curr_entry, &p_rsc_mgr_next_entry);
+        }
+    }
+
+    return BCM_ERR_OK;
+}
+
+
+/* Update CLI based on the system mode */
+static void handle_system_mode_change(bcmolt_devid dev)
+{
+    if (dev == current_device)
+    {
+        bcmcli_entry *cur_dir = bcmcli_dir_get(current_session);
+        char old_dir_name[32] = "";
+
+        if (cur_dir)
+            strncpy(old_dir_name, bcmcli_token_name(cur_dir), sizeof(old_dir_name) - 1);
+
+        bcmcli_dir_set(current_session, maple_dir);
+        api_cli_set_commands(current_session);
+
+        /* Restore current CLI directory */
+        cur_dir = bcmcli_dir_find(NULL, old_dir_name);
+        bcmcli_dir_set(current_session, cur_dir);
+    }
+}
+
+
+/*****************************************************************************/
+/**
+ * @brief mac_util_cli_init
+ *
+ * This routine is called from main to initialize the mac_app cli,
+ *that is used for internal unit testing.
+ *
+ * @param cli_dir - a pointer to the cli directory to init that cli in
+ * @return bcmos_errno
+ */
+/*****************************************************************************/
+bcmos_errno mac_util_cli_init(bcmcli_entry *cli_dir)
+{
+    bcmcli_entry *p_cli_dir;
+    bcmos_errno rc = BCM_ERR_OK;
+
+    do
+    {
+        p_cli_dir = bcmcli_dir_add(cli_dir, "Mac_Util", "Mac Util (debug)", BCMCLI_ACCESS_ADMIN, NULL);
+
+        BCMCLI_MAKE_CMD_NOPARM(p_cli_dir, "print_flows", "print mac app flows list", _cmd_flows_print);
+        BCMCLI_MAKE_CMD(p_cli_dir, "print_flows_for_gem", "print mac flows sharing a GEM port", _cmd_flows_print_for_gem,
+                BCMCLI_MAKE_PARM("gem_port_id", "GEM Port Id", BCMCLI_PARM_UNUMBER, 0));
+        BCMCLI_MAKE_CMD(p_cli_dir, "print_flows_for_alloc_id", "print mac flows sharing an Alloc Id", _cmd_flows_print_for_alloc_id,
+                BCMCLI_MAKE_PARM("alloc_id", "Alloc Id", BCMCLI_PARM_UNUMBER, 0));
+
+        /* Initialize the bal api cli UI */
+        maple_dir = bcmcli_dir_add(NULL, "maple", "Maple API access", BCMCLI_ACCESS_ADMIN, NULL);
+
+        sm_change_cb = handle_system_mode_change;
+
+        /* Init device selector */
+        rc = bcmolt_dev_sel_init(maple_dir);
+
+        /* Add Maple API commands */
+        rc = rc ? rc : api_cli_init(maple_dir, current_session);
+
+#ifdef BOARD
+        rc = rc ? rc : bcm_board_init();
+        rc = rc ? rc : bcm_board_cli_init(NULL);
+#endif
+        rc = rc ? rc : bcmtr_init();
+        rc = rc ? rc : bcmtr_cld_cli_init();
+        rc = rc ? rc : bcmtr_cli_init();
+
+    } while(0);
+
+    return rc;
+
+    return BCM_ERR_OK;
+}
+
+/*****************************************************************************/
+/**
+ * @brief Un-initialize the mac util internal data structures
+ *
+ * @returns bcmos_errno == BCM_ERR_OK
+ *
+ * @note this routine does not seem to be used currently
+ *****************************************************************************/
+bcmos_errno mac_util_finish(void)
+{
+    flow_list_entry *p_current_entry = NULL, *p_next_entry = NULL;
+    uint32_t if_id = 0;
+
+    for (if_id=0; if_id < NUM_SUPPORTED_SUBSCRIBER_INTERFACES; if_id++)
+    {
+        /* before every db segment, NULL the current entry */
+        p_current_entry = NULL;
+        p_next_entry = NULL;
+
+        /* Free all the entries on the flows list */
+        /* get first */
+        p_current_entry = _mac_util_db_flow_get_next_w_flow_key (if_id, p_current_entry, &p_next_entry);
+        while (NULL != p_current_entry)
+        {
+            /* Remove it from the list, and free memory */
+            _mac_util_db_flow_remove (if_id, p_current_entry);
+            _mac_util_db_flow_free (if_id, p_current_entry);
+
+            /* get next */
+            p_current_entry = _mac_util_db_flow_get_next_w_flow_key (if_id, p_current_entry, &p_next_entry);
+        }
+    }
+
+    return BCM_ERR_OK;
+}
+
+
+bcmos_errno mac_util_access_terminal_sw_version_validate(bcmolt_devid device)
+{
+	bcmolt_device_cfg cfg = {};
+	bcmolt_device_key key = {};
+	bcmos_errno rc;
+
+	BCMOLT_CFG_INIT(&cfg, device, key);
+	BCMOLT_CFG_PROP_GET(&cfg, device, host_sw_version);
+	rc = bcmolt_cfg_get(device, &cfg.hdr);
+	if (rc != BCM_ERR_OK)
+	{
+		BCM_LOG(ERROR, log_id_mac_util, "Unable to get OLT SW version\n");
+		return rc;
+	}
+
+    BCM_LOG(INFO, log_id_mac_util,
+        "Actual OLT SW version %d.%d.%X (Object model revision %d)\n",
+		cfg.data.host_sw_version.major,
+		cfg.data.host_sw_version.minor,
+		cfg.data.host_sw_version.revision,
+		cfg.data.host_sw_version.model);
+
+    BCM_LOG(INFO, log_id_mac_util,
+        "BAL OLT SW version %d.%d.%X (Object model revision %d)\n",
+        BCMOLT_HOST_MAJOR_VER,
+        BCMOLT_HOST_MINOR_VER,
+        BCMOLT_HOST_REVISION_VER,
+        BCMOLT_MODEL_REVISION);
+
+    /* Check for versions mismatch */
+    if (cfg.data.host_sw_version.major != BCMOLT_HOST_MAJOR_VER ||
+    	cfg.data.host_sw_version.minor != BCMOLT_HOST_MINOR_VER ||
+		cfg.data.host_sw_version.revision != BCMOLT_HOST_REVISION_VER ||
+		cfg.data.host_sw_version.model != BCMOLT_MODEL_REVISION)
+    {
+        BCM_LOG(ERROR, log_id_mac_util, INBOLD_BAD(
+        "SW versions mismatch: BAL was complied with OTL SW version %d.%d.%X (Object model revision %d), "
+        "while actual OLT SW version is %d.%d.%X (Object model revision %d)\n"),
+        BCMOLT_HOST_MAJOR_VER,
+        BCMOLT_HOST_MINOR_VER,
+        BCMOLT_HOST_REVISION_VER,
+        BCMOLT_MODEL_REVISION,
+		cfg.data.host_sw_version.major,
+		cfg.data.host_sw_version.minor,
+		cfg.data.host_sw_version.revision,
+		cfg.data.host_sw_version.model);
+        return BCM_ERR_STATE;
+    }
+    return BCM_ERR_OK;
+}
+
+
+/*@}*/
diff --git a/bal_release/src/core/util/mac/bal_mac_util.h b/bal_release/src/core/util/mac/bal_mac_util.h
new file mode 100755
index 0000000..e0bf5b9
--- /dev/null
+++ b/bal_release/src/core/util/mac/bal_mac_util.h
@@ -0,0 +1,295 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *
+ *  :>
+ *
+ *****************************************************************************/
+
+/**
+ * @file bal_mac_util.h
+ *
+ * @brief Mac util interfaces header file
+ *
+ * This file expose the APIs to the core to configure the mac
+ * with regarding to the operation of access terminal, interface, subscriber terminal and flow.
+ *
+ * @defgroup mac_util Mac Util
+ * @ingroup core
+ */
+
+#ifndef BAL_MAC_UTIL_H
+#define BAL_MAC_UTIL_H
+
+/****************************************/
+
+#include <bcmolt_host_api.h>
+#include <acc_term_fsm.h>
+#include <sub_term_fsm.h>
+#include <flow_fsm.h>
+#include <group_fsm.h>
+#include <tm_sched_fsm.h>
+#include <bal_utils_msg.h>
+
+#include <bal_common.h>
+#include <bal_mac_util.h>
+#include <rsc_mgr.h>
+#include <bal_app_common_utils.h>
+#include <bal_utils.h>
+#include <bal_worker.h>
+#include <bal_msg.h>
+#include <bcm_topo.h>
+
+#ifdef ENABLE_LOG
+#include <bcm_dev_log.h>
+#include <bcmtr_debug_cli.h>
+#endif //ENABLE_LOG
+
+
+/*@{*/
+
+/** @brief none fail reason for sub term deactivation. Defined locally, since Maple SDK does not define this. */
+#define MAC_UTIL_DEACTIVATION_FAIL_REASON_NONE                      BCMOLT_ACTIVATION_FAIL_REASON_NONE
+
+/**
+ * @brief The following macros define the max and min user flow Id values and the check for a valid flow Id.
+ */
+extern uint32_t mac_util_flow_id_start_val;
+#define MAC_UTIL_FLOW_DB_FLOW_ID_START_VAL                          (mac_util_flow_id_start_val)
+#define MAC_UTIL_FLOW_DB_FLOW_ID_MAX_VAL                            (MAC_UTIL_FLOW_DB_FLOW_ID_START_VAL+BAL_ACC_TERM_MAX_FLOWS-1)
+
+#define MAC_UTIL_FLOW_DB_FLOW_ID_START_VAL_CONFIG(_start_val)       (mac_util_flow_id_start_val = (_start_val))
+
+#define MAC_UTIL_FLOW_DB_FLOW_ID_IS_VALID(_flow_id)                 \
+        (((_flow_id) >= MAC_UTIL_FLOW_DB_FLOW_ID_START_VAL) &&      \
+              ((_flow_id) <= MAC_UTIL_FLOW_DB_FLOW_ID_MAX_VAL))
+
+typedef struct mac_util_sla mac_util_sla;
+struct mac_util_sla
+{
+    uint64_t min_rate; /* min_rate (this is a uint64_t as the units are bytes per second) */
+    uint64_t max_rate; /* max_rate (this is a uint64_t as the units are bytes per second) */
+};
+
+/* flow entry structure */
+typedef struct flow_list_entry flow_list_entry;
+struct flow_list_entry
+{
+    TAILQ_ENTRY(flow_list_entry) next;
+    bcmbal_flow_key bal_flow_key;           /* bal flow key */
+    uint32_t if_id;                         /* pon_ni id */
+    uint32_t sub_term_id;                   /* onu_id */
+    uint16_t svc_port_id;                   /* the flow related gem port id */
+    uint16_t agg_id;                        /* the flow related alloc-id */
+    uint16_t vlan_id;
+    bcmos_bool is_waiting_for_svc_port_active; /* indicates whether waiting for a gem port to become active */
+    bcmos_bool is_configuration_completed;
+    bal_util_flow_ind  ind_sent;    /* indicates whether an indication was sent to core none/success/fail */
+    mac_util_sla sla;               /* it saves a converted value for the SLAs; we may retain this in mac util */
+    bal_util_oper_flow  op_type;    /* Operation type: FLOW_ADD or FLOW_REMOVE */
+};
+
+#define RSRC_MGR_KEEPS_FLOW_LIST_PER_GEM    BCMOS_FALSE
+
+extern dev_log_id   log_id_mac_util;
+extern dev_log_id   log_id_mac_util_pon_if[];
+/** @def get log Id for pon interface */
+#define MAC_UTIL_GET_LOG_ID_FOR_PON_IF(_pon_if_id)   (log_id_mac_util_pon_if[(_pon_if_id)])
+
+
+/** @def system default transceiver type */
+#define BCMBAL_MAC_UTIL_TRX_TYPE_DEFAULT_GPON BCMBAL_TRX_TYPE_GPON_LTE_3680_M
+#define BCMBAL_MAC_UTIL_TRX_TYPE_DEFAULT_XGPON BCMBAL_TRX_TYPE_XGPON_LTH_7222_PC
+#define BCMBAL_MAC_UTIL_TRX_TYPE_DEFAULT_XGS BCMBAL_TRX_TYPE_XGPON_LTH_5302_PC
+
+
+/**
+ * @brief is valid pon interface id
+ * @todo see if it is feasible to tie it up with system mode. However
+ * keep in mind that this check would be called for every db api call.
+ */
+#define IS_VALID_PON_IF(_pon_if)   (NUM_SUPPORTED_SUBSCRIBER_INTERFACES > (_pon_if))
+
+
+/* Function Prototypes for external */
+bcmos_errno mac_util_access_terminal_sw_version_validate(bcmolt_devid device);
+bcmos_errno mac_util_access_terminal_set(acc_term_inst *p_acc_term, bal_util_oper_acc_term op_type);
+bcmos_errno mac_util_access_terminal_info_validate(const bcmbal_access_terminal_cfg *p_acc_term_req);
+
+bcmos_errno mac_util_subscriber_terminal_set(sub_term_inst *p_sub_term, bal_util_oper_sub_term op_type, bcmos_bool is_post_discovery);
+bcmos_errno mac_util_subscriber_terminal_info_validate(const bcmbal_subscriber_terminal_cfg *p_sub_term_req);
+
+bcmos_errno mac_util_interface_set(acc_term_interface *p_interface_inst, bal_util_oper_if op_type);
+
+bcmos_errno mac_util_flow_set(flow_inst *p_flow_core, bal_util_oper_flow op_type);
+bcmos_errno mac_util_flow_info_validate(const bcmbal_flow_cfg *p_flow_req);
+
+bcmos_errno mac_util_group_set(group_inst *p_flow, bal_util_oper_group op_type, bcmos_bool send_ind);
+bcmos_errno mac_util_group_info_validate(const bcmbal_group_cfg *p_group_req);
+
+bcmos_errno mac_util_tm_sched_info_validate(const bcmbal_tm_sched_cfg *p_tm_sched_req);
+bcmos_errno mac_util_agg_port_set(tm_sched_inst *p_tm_sched, bal_util_oper_agg_port op_type);
+
+
+bcmos_errno mac_util_init(const char *maple_address);
+
+bcmos_errno mac_util_cli_init(bcmcli_entry *p_cli_dir);
+
+void mac_util_indication_cb(bcmolt_devid device_id, bcmolt_msg *p_msg);
+
+bcmos_errno mac_util_finish(void);
+
+/* reporting functions to core */
+void mac_util_report_flow_add_success(bcmbal_flow_key flow_key, uint32_t pon_if);
+void mac_util_report_flow_add_failed(bcmbal_flow_key flow_key, uint32_t pon_if, bcmos_errno err);
+void mac_util_report_flow_remove_success(bcmbal_flow_key flow_key, uint32_t pon_if, bal_util_oper_flow op_type);
+void mac_util_report_flow_remove_failed(bcmbal_flow_key flow_key, uint32_t pon_if, bal_util_oper_flow op_type, bcmos_errno err);
+
+void mac_util_report_tm_sched_set_indication (bcmbal_tm_sched_key tm_sched_key, bcmos_errno err, bcmolt_result ind_result);
+
+/** @brief handler routine type for maple indication handlers */
+typedef bcmos_errno (mac_util_olt_ind_handler)(bcmolt_devid device_id, bcmolt_msg *p_msg);
+
+/** @brief generic struct for maple indication object types and handlers that would be be handled in mac util */
+typedef struct mac_util_olt_ind_obj_and_handlers
+{
+    bcmolt_obj_id obj_type;
+    char          obj_type_str[50];
+    mac_util_olt_ind_handler *ind_handler;
+} mac_util_ind_obj_and_handlers;
+
+
+char *_mac_util_get_obj_type_str_for_indications ( bcmolt_obj_id obj_type,
+                                                   mac_util_ind_obj_and_handlers obj_types_and_handlers[], uint16_t num_obj_types);
+
+/* maple indication handlers */
+bcmos_errno mac_util_handle_all_olt_ind_for_gpon (bcmolt_devid device_id, bcmolt_msg *p_msg);
+bcmos_errno mac_util_handle_all_olt_ind_for_xgpon (bcmolt_devid device_id, bcmolt_msg *p_msg);
+
+
+/* flow mgmt wrapper functions */
+flow_list_entry *_mac_util_db_flow_alloc (void);
+bcmos_errno _mac_util_db_flow_free (uint32_t pon_if, flow_list_entry *p_entry);
+
+bcmos_errno _mac_util_db_flow_add (uint32_t pon_if, flow_list_entry *p_entry);
+bcmos_errno _mac_util_db_flow_remove (uint32_t pon_if, flow_list_entry *p_entry);
+
+flow_list_entry *_mac_util_db_flow_get_w_flow_key (uint32_t pon_if, bcmbal_flow_key *p_flow_key);
+flow_list_entry *_mac_util_db_flow_get_next_w_flow_key (uint32_t pon_if, flow_list_entry *p_curr_entry, flow_list_entry **pp_next_entry);
+
+
+flow_list_entry *_mac_util_db_flow_get_next_w_sub_term_id (uint32_t pon_if, uint32_t sub_term_id,
+                                                       flow_list_entry *p_curr_entry, flow_list_entry **pp_next_entry);
+
+
+bcmos_errno _mac_util_db_flow_count_w_gem (uint32_t pon_if, uint16_t gem_port_id, uint32_t *p_count);
+flow_list_entry *_mac_util_db_flow_get_next_w_gem (uint32_t pon_if, uint16_t gem_port_id,
+                                                   void **pp_rsc_mgr_curr_entry, void **pp_rsc_mgr_next_entry);
+
+bcmos_errno _mac_util_db_flow_count_w_alloc_id (uint32_t pon_if, uint16_t alloc_id, uint32_t *p_count);
+flow_list_entry *_mac_util_db_flow_get_next_w_alloc_id (uint32_t pon_if, uint16_t alloc_id,
+                                                        void **pp_rsc_mgr_curr_entry, void **pp_rsc_mgr_next_entry);
+
+/* interface set */
+bcmos_errno mac_util_interface_set_for_gpon(acc_term_interface *p_interface_inst, bal_util_oper_if op_type);
+bcmos_errno mac_util_interface_set_for_xgpon(acc_term_interface *p_interface_inst, bal_util_oper_if op_type);
+bcmos_errno mac_util_interface_set_for_loopback(acc_term_interface *p_interface_inst, bal_util_oper_if op_type);
+
+/* sub term validate */
+bcmos_errno mac_util_validate_subscriber_terminal_info_for_gpon(const bcmbal_subscriber_terminal_cfg *p_sub_term_req);
+bcmos_errno mac_util_validate_subscriber_terminal_info_for_xgpon(const bcmbal_subscriber_terminal_cfg *p_sub_term_req);
+
+/* sub term set */
+bcmos_errno mac_util_subscriber_terminal_set_for_gpon(sub_term_inst *p_sub_term_inst, bal_util_oper_sub_term op_type, bcmos_bool is_post_discovery);
+bcmos_errno mac_util_subscriber_terminal_set_for_xgpon(sub_term_inst *p_sub_term_inst, bal_util_oper_sub_term op_type, bcmos_bool is_post_discovery);
+bcmos_errno mac_util_subscriber_terminal_set_for_loopback(sub_term_inst *p_sub_term_inst, bal_util_oper_sub_term op_type, bcmos_bool is_post_discovery);
+
+/* flow validates */
+bcmos_errno mac_util_validate_flow_info_for_gpon(const bcmbal_flow_cfg *p_flow_req);
+bcmos_errno mac_util_validate_flow_info_for_xgpon(const bcmbal_flow_cfg *p_flow_req);
+
+
+/* flow sets */
+bcmos_errno mac_util_flow_set_for_gpon (bcmbal_flow_cfg *p_flow_req, bal_util_oper_flow op_type, flow_inst *p_flow_core);
+bcmos_errno mac_util_flow_set_for_xgpon (bcmbal_flow_cfg *p_flow_req, bal_util_oper_flow op_type, flow_inst *p_flow_core);
+bcmos_errno mac_util_flow_set_for_loopback(bcmbal_flow_cfg *p_flow_req, bal_util_oper_flow op_type, flow_inst *p_flow_core);
+
+/* group sets */
+bcmos_errno mac_util_group_set_for_gpon (bcmbal_group_cfg *p_group_req, bal_util_oper_group op_type, group_inst *p_group_context);
+bcmos_errno mac_util_group_set_for_xgpon (bcmbal_group_cfg *p_group_req, bal_util_oper_group op_type, group_inst *p_group_context);
+
+bcmos_errno maple_access_terminal_set_common (acc_term_inst *p_acc_term, bal_util_oper_acc_term op_type, bcmolt_devid device_id);
+bcmos_errno maple_access_terminal_connect_common (bcmolt_devid device_id);
+bcmos_errno mac_util_init_parse_mac_ip_and_port (const char *maple_address);
+
+
+/* Report events to core */
+void mac_util_report_acc_term_event(uint16_t event);
+void mac_util_report_if_event(bcmbal_intf_id intf_id,
+                              bcmbal_intf_type intf_type,
+                              bcmos_errno err,
+                              bcmolt_result result,
+                              bcmolt_pon_state new_state);
+bcmos_errno check_send_flow_bal_ind_msg(flow_list_entry *p_flow,
+                                        bcmos_errno err,
+                                        bcmolt_result ind_result);
+
+void mac_util_report_sub_term_event(bcmbal_intf_id pon_ni,
+                                    bcmbal_sub_id onu_id,
+                                    bcmolt_serial_number *p_serial_number,
+                                    bal_util_oper_sub_term oper,
+                                    bcmos_errno err,
+                                    bcmolt_result result,
+                                    bcmolt_activation_fail_reason fail_reason,
+                                    bcmolt_epon_tunnel_id tunnel_id);
+
+
+
+void mac_util_report_flow_auto_ind (uint32_t pon_if,
+    bcmbal_flow_key  flow_key ,bal_util_oper_flow  op_type, bal_util_flow_ind ind);
+
+
+#define MAC_UTIL_DUMMY_ONU_ID_FOR_MULTICAST_GEM BCMOLT_GPON_ONU_ID_ANY
+
+#define GET_DEVICE_ID_AND_PHYSICAL_ID_FROM_IF_ID(_if_id, _device_id, _physical_if_id) \
+    do \
+    { \
+       rc = bcm_topo_pon_get_logical2physical(_if_id, &(_device_id), &(_physical_if_id)); \
+       if (BCM_ERR_OK != rc) \
+       { \
+           BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(_if_id), \
+                   "Failed to get physical if from logical if (%s)\n", bcmos_strerror(rc)); \
+           return rc; \
+       } \
+    } \
+    while (0)
+
+
+/*@}*/
+#endif /* BAL_MAC_UTIL_H */
+
+
+
diff --git a/bal_release/src/core/util/mac/bal_mac_util_common_itu_pon.c b/bal_release/src/core/util/mac/bal_mac_util_common_itu_pon.c
new file mode 100644
index 0000000..e44a574
--- /dev/null
+++ b/bal_release/src/core/util/mac/bal_mac_util_common_itu_pon.c
@@ -0,0 +1,1336 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file bal_mac_util_common_itu_pon.c
+ *
+ * @brief mac util interfaces definition used by Bal Core, for ITU PON flavors : GPON, XG-PON1, XGS-PON , NG-PON2
+ *
+ * This file expose the APIs to the core to configure the mac 
+ * with regarding to the operation of access terminal, interface, subscriber terminal and flow.
+ *
+ * @addtogroup mac_util
+ */
+
+/*@{*/
+
+#include <bal_mac_util.h>
+#include <bal_mac_util_common_itu_pon.h>
+#include <bcm_topo.h>
+
+
+
+/**
+ * @brief get string for the indication object type
+ */
+char *mac_util_indication_get_obj_type_str(bcmolt_obj_id obj_type, mac_util_ind_obj_and_handlers handlers[], size_t handlers_size)
+{
+    return _mac_util_get_obj_type_str_for_indications(obj_type, handlers, handlers_size);
+}
+
+
+/**
+ * @brief handle indications for any PON ITU flavor.
+ */
+bcmos_errno mac_util_handle_indication(bcmolt_devid device_id, bcmolt_msg *p_msg, mac_util_ind_obj_and_handlers handlers[], size_t handlers_size)
+{
+    int i = 0;
+    for(i=0; i < handlers_size; i++)
+    {
+       if(p_msg->obj_type == handlers[i].obj_type)
+       {
+           if(NULL != handlers[i].ind_handler)
+           {
+               return handlers[i].ind_handler(device_id, p_msg);
+           }
+       }
+    }
+    /* log an error if unhandled */
+    return BCM_ERR_INTERNAL;
+}
+
+
+
+/**
+ * @brief checks if a gem port is configured in OLT already for the same PON If and ONU
+ *
+ * @param svc_port_id   gem port
+ * @param if_id         PON NI
+ * @param onu_id        ONU Id
+ * @param is_config_required TRUE/FALSE
+ * @param is_wait_for_indication TRUE/FALSE
+ *
+ * @return bcmos_errno
+ *
+ * @todo with multi-thread support in future, the code from checking the maple object
+ * to the actual config will need to be atomic(i.e. using mutex). This, to avoid closely parallel threads
+ * from getting a state of gem slightly before a new config another thread would make on the same gem,
+ * before this thread could configure it. This applies to both gem and alloc id checks.
+ *
+ */
+static bcmos_errno maple_mac_check_gem_port_id_config(uint16_t svc_port_id, uint32_t if_id, uint32_t onu_id,
+                                                        bcmos_bool *is_config_required, bcmos_bool *is_wait_for_indication)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+	bcm_topo_pon_sub_family pon_sub_family;
+    bcmos_bool is_configured = BCMOS_FALSE, is_activated = BCMOS_FALSE;
+
+    /* assume config is not required, if there is an error */
+    *is_config_required = BCMOS_FALSE;
+    *is_wait_for_indication = BCMOS_FALSE;
+
+    pon_sub_family = bcm_topo_pon_get_pon_sub_family(if_id);
+    switch(pon_sub_family)
+    {
+        case BCM_TOPO_PON_SUB_FAMILY_GPON:
+        {
+            rc = maple_gpon_mac_check_gem_port_id(if_id, onu_id, svc_port_id, &is_configured, &is_activated);
+        }
+        break;
+
+	    case BCM_TOPO_PON_SUB_FAMILY_XGPON:
+        {
+            rc = maple_xgpon_mac_check_gem_port_id(if_id, onu_id, svc_port_id, &is_configured, &is_activated);
+        }
+        break;
+
+        default:
+        {
+            rc = BCM_ERR_NOT_SUPPORTED;
+        }
+    }
+
+    if(BCM_ERR_OK != rc)
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(if_id), "%s failed with error %s\n",__FUNCTION__, bcmos_strerror(rc));
+        return rc;
+    }
+	*is_config_required = !is_configured;
+	*is_wait_for_indication = !is_activated;
+
+    if(BCMOS_FALSE == *is_config_required)
+    {
+        BCM_LOG(INFO, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(if_id),
+                "%s: gem port id is already configured: if_id = %d onu_id = %d svc_port_id = %d  is_wait_for_indication = %s\n",
+                __FUNCTION__,
+                if_id, onu_id,svc_port_id,
+               (*is_wait_for_indication == BCMOS_TRUE ? "TRUE":"FALSE"));
+    }
+
+    return rc;
+}
+
+
+/**
+ * @brief Checks if a gem port needs to be actually deconfigured.
+ *          This would be used during flow remove.
+ *
+ * @param svc_port_id   gem port
+ * @param if_id         PON NI
+ * @param onu_id        ONU Id
+ * @param is_deconfig_required TRUE/FALSE
+ * @param is_wait_for_indication TRUE/FALSE
+ *
+ * @return bcmos_errno
+ */
+static bcmos_errno maple_mac_check_gem_port_id_deconfig(uint16_t svc_port_id, uint32_t if_id, uint32_t onu_id,
+                                                        bcmos_bool *is_deconfig_required, bcmos_bool *is_wait_for_indication)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    uint32_t ref_count = 0;
+    bcm_topo_pon_mode pon_mode;
+    bcmos_bool is_configured = BCMOS_FALSE, is_activated = BCMOS_FALSE;
+
+    /* assume De-config not required, in case of an error */
+    *is_deconfig_required = BCMOS_FALSE;
+    *is_wait_for_indication = BCMOS_FALSE;
+
+    pon_mode = bcm_topo_pon_get_pon_mode(if_id);
+    if(pon_mode == BCM_TOPO_PON_MODE_GPON)
+    {
+        rc = maple_gpon_mac_check_gem_port_id(if_id, onu_id, svc_port_id, &is_configured, &is_activated);
+    }
+    else if(BCM_TOPO_PON_SUB_FAMILY_XGPON == bcm_topo_pon_get_pon_sub_family(if_id))
+    {
+        rc = maple_xgpon_mac_check_gem_port_id(if_id, onu_id, svc_port_id, &is_configured, &is_activated);
+    }
+    else
+    {
+        rc = BCM_ERR_NOT_SUPPORTED;
+    }
+
+    if(BCM_ERR_OK != rc)
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(if_id), "%s failed with error %s\n",__FUNCTION__, bcmos_strerror(rc));
+        return rc;
+    }
+
+	if(!is_configured)
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(if_id),
+            "%s error in gpon gem port state: svc_port_id = %d if_id = %d onu_id = %d, gem state: NOT_CONFIGURED\n",
+            __FUNCTION__,
+            svc_port_id, if_id, onu_id);
+
+        return BCM_ERR_INTERNAL;
+    }
+    
+
+    /** First: Check if gem deconfig is required:
+     * gem deconfig is not needed if other flows are still using the same gem, or it is already being deconfigured.
+     */
+#if RSRC_MGR_KEEPS_FLOW_LIST_PER_GEM
+    /** @todo the rsrc mgr ref count will not work for now since core fsm keeps the flow with admin down,
+     * though mac util does a clear on the gem.
+     */
+    /* get the ref count for the gem from rsc mgr */
+    rc = rsc_mgr_gem_lookup(if_id, svc_port_id, &ref_count);
+    if(BCM_ERR_OK != rc)
+    {
+        return BCM_ERR_PARM;
+    }
+#else
+    rc = _mac_util_db_flow_count_w_gem(if_id, svc_port_id, &ref_count);
+    if(BCM_ERR_OK != rc)
+    {
+        return rc;
+    }
+#endif
+
+    /* if more than 1 flow is using the gem in whatever state, skip deconfig */
+    if(1 < ref_count)
+    {
+        *is_deconfig_required = BCMOS_FALSE;
+    }
+    else
+    {
+        *is_deconfig_required = BCMOS_TRUE;
+    }
+
+    /* Gem port configuration indications are available on GPON only */
+    if(pon_mode == BCM_TOPO_PON_MODE_GPON)
+    {
+        /** Next: Check if need to wait for indication */
+        if(BCMOS_TRUE == *is_deconfig_required)
+        {
+            if(!is_activated)
+            {
+               *is_wait_for_indication = BCMOS_FALSE;
+            }
+            else
+            {
+                *is_wait_for_indication = BCMOS_TRUE;
+            }
+        }
+        else
+        {
+            *is_wait_for_indication = BCMOS_FALSE;
+
+        }
+    }
+    else
+    {
+        *is_wait_for_indication = BCMOS_FALSE;
+    }
+
+
+    if(BCMOS_FALSE == *is_deconfig_required)
+    {
+        BCM_LOG(INFO, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(if_id),
+                "Skip gem port deconfig: is_deconfig_required = %s, is_wait_for_indication = %s, svc_port_id = %d if_id = %d onu_id = %d, [ref_count=%d, gem_is configured=%d, gem_is_activated=%d]\n",
+               (*is_deconfig_required == BCMOS_TRUE ? "TRUE":"FALSE"),
+               (*is_wait_for_indication == BCMOS_TRUE ? "TRUE":"FALSE"),
+                svc_port_id, if_id, onu_id,
+                ref_count, is_configured, is_activated);
+    }
+
+    return rc;
+}
+
+
+/**
+ * @brief maple_gem_port_id_add
+ *
+ * This routine is used for configuring at maple a specific gem port id on a given pon interface
+ * and assign it to a given onu id
+ * currently all sla properties are hard coded
+ *
+ * @param svc_port_id       the gem port id
+ * @param if_id                   the interface id
+ * @param onu_id               the onu id it will assign to
+ *
+ * @return bcmos_errno
+ */
+static bcmos_errno maple_gem_port_id_add(uint16_t svc_port_id, uint32_t if_id, uint32_t onu_id)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcmolt_gem_port_configuration configuration = {};
+    bcm_topo_pon_mode pon_mode;
+
+    if(onu_id < MAC_UTIL_DUMMY_ONU_ID_FOR_MULTICAST_GEM)
+    {
+        configuration.direction = BCMOLT_GEM_PORT_DIRECTION_BIDIRECTIONAL;
+        configuration.type = BCMOLT_GEM_PORT_TYPE_UNICAST;
+    }
+    else
+    {
+        configuration.direction = BCMOLT_GEM_PORT_DIRECTION_DOWNSTREAM;
+        configuration.type = BCMOLT_GEM_PORT_TYPE_MULTICAST;
+    }
+
+    pon_mode = bcm_topo_pon_get_pon_mode(if_id);
+    if(pon_mode == BCM_TOPO_PON_MODE_GPON)
+    {
+        rc = maple_gpon_gem_port_id_add(if_id, svc_port_id, onu_id, &configuration);
+    }
+    else if(BCM_TOPO_PON_SUB_FAMILY_XGPON == bcm_topo_pon_get_pon_sub_family(if_id))
+    {
+        rc = maple_xgpon_gem_port_id_add(if_id, svc_port_id, onu_id, &configuration);
+    }
+    else
+    {
+        rc = BCM_ERR_NOT_SUPPORTED;
+    }
+
+    if(BCM_ERR_OK != rc)
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(if_id), "%s failed with error %s\n",__FUNCTION__, bcmos_strerror(rc));
+    }
+
+    return rc;
+}
+
+
+/**
+ * @brief maple_gem_port_id_remove
+ *
+ * This routine is used Clear a specific gem port id config in OLT on a given pon interface.
+ *
+ * @param svc_port_id       the gem port id
+ * @param if_id             the interface id
+ *
+ * @return bcmos_errno
+ *
+ * @todo do we need to fill in all parameters to disable GEM or just the gem key ?
+ */
+static bcmos_errno maple_gem_port_id_remove(uint16_t svc_port_id, uint32_t if_id)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcm_topo_pon_mode pon_mode;
+
+    pon_mode = bcm_topo_pon_get_pon_mode(if_id);
+    if(pon_mode == BCM_TOPO_PON_MODE_GPON)
+    {
+        rc = maple_gpon_gem_port_id_remove(if_id, svc_port_id);
+    }
+    else if(BCM_TOPO_PON_SUB_FAMILY_XGPON == bcm_topo_pon_get_pon_sub_family(if_id))
+    {
+        rc = maple_xgpon_gem_port_id_remove(if_id, svc_port_id);
+    }
+    else
+    {
+        rc = BCM_ERR_NOT_SUPPORTED;
+    }
+
+    if(BCM_ERR_OK != rc)
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(if_id),
+                  "Failed to clear gem port configuration(%s) in OLT\n",
+                  bcmos_strerror(rc));
+    }
+
+    return rc;
+}
+
+
+/**
+ * @brief checks if a alloc id is configured in OLT already for the same PON If and ONU
+ *
+ * @param agg_id        alloc id
+ * @param if_id         PON NI
+ * @param onu_id        ONU Id
+ * @param p_alloc_id_state alloc id current state
+ *
+ * @return bcmos_errno
+ */
+static bcmos_errno maple_mac_check_alloc_id_state(uint16_t agg_id, uint32_t if_id, uint32_t onu_id, bcmolt_alloc_state *p_alloc_id_state)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcm_topo_pon_mode pon_mode;
+		
+    pon_mode = bcm_topo_pon_get_pon_mode(if_id);
+    if(pon_mode == BCM_TOPO_PON_MODE_GPON)
+    {
+        rc = maple_gpon_mac_get_alloc_id_config(if_id, onu_id, agg_id, p_alloc_id_state);
+    }
+    else if(BCM_TOPO_PON_SUB_FAMILY_XGPON == bcm_topo_pon_get_pon_sub_family(if_id))
+    {
+        rc = maple_xgpon_mac_get_alloc_id_config(if_id, onu_id, agg_id, p_alloc_id_state);
+    }
+    else
+    {
+        rc = BCM_ERR_NOT_SUPPORTED;
+    }
+	
+    if(BCM_ERR_OK != rc)
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(if_id), "%s failed with error %s\n",__FUNCTION__, bcmos_strerror(rc));
+        return rc;
+    }
+	
+    return rc;
+}
+
+	
+
+static bcmos_errno maple_mac_check_alloc_id_config(uint16_t agg_id, uint32_t if_id, uint32_t onu_id)
+{
+    bcmos_errno rc;
+    bcmolt_alloc_state alloc_id_state;
+    
+    
+    rc = maple_mac_check_alloc_id_state(agg_id, if_id, onu_id, &alloc_id_state);
+    if(BCM_ERR_OK != rc)
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(if_id), "%s failed with error %s\n",
+                __FUNCTION__, bcmos_strerror(rc));
+        return rc;
+    }
+    if(BCMOLT_ALLOC_STATE_NOT_CONFIGURED != alloc_id_state)
+        rc = BCM_ERR_PARM;
+    return rc;
+}
+static bcmos_errno maple_mac_check_alloc_id_active(uint16_t agg_id, uint32_t if_id, uint32_t onu_id, bcmos_bool *is_alloc_id_wait_for_ind)
+{
+    bcmos_errno rc;
+    bcmolt_alloc_state alloc_id_state;
+    
+    rc = maple_mac_check_alloc_id_state(agg_id, if_id, onu_id, &alloc_id_state);
+    if(BCM_ERR_OK != rc)
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(if_id), "%s failed with error %s\n",__FUNCTION__, bcmos_strerror(rc));
+        return rc;
+    }
+    *is_alloc_id_wait_for_ind = BCMOLT_ALLOC_STATE_ACTIVE != alloc_id_state;
+    return rc;
+}
+
+/**
+ * @brief helper function to check flow with double tag and with action remove outer tag.
+ *  Used for validation as well as flow config.
+ *
+ * @param p_flow_req     A pointer to a flow object
+ *
+ * @return bcmos_errno
+ */
+bcmos_bool  mac_util_check_flow_is_double_tag_remove_o_tag(const bcmbal_flow_cfg *p_flow_req)
+{
+    if(NULL != p_flow_req)
+    {
+        if(BCMBAL_FLOW_TYPE_DOWNSTREAM == p_flow_req->key.flow_type &&
+            BCMOS_TRUE == BCMBAL_CFG_PROP_IS_SET(p_flow_req, flow, action) &&
+           (p_flow_req->data.action.cmds_bitmask & BCMBAL_ACTION_CMD_ID_REMOVE_OUTER_TAG) &&
+           (p_flow_req->data.classifier.pkt_tag_type == BCMBAL_PKT_TAG_TYPE_DOUBLE_TAG))
+        {
+            return BCMOS_TRUE;
+        }
+    }
+
+    return BCMOS_FALSE;
+}
+
+
+/**
+ * @brief maple_mac_unicast_flow_add
+ *
+ * This routine is used to configure a flow at the internal flows list to
+ * handle incoming and outgoing relevant indications.
+ * the flow svc_port is defined using a single gem port by a base_gem_port
+ * and single pbit(=0 in case of pbit is not available)
+ * it will also configure gem port and alloc id at the device if required.
+ *
+ * 
+ * @param if_id - the pon interface id 
+ * @param onu_id -  the onu id 
+ * @param agg_id -  the alloc id 
+ * @param sla -  the sla configuration of the alloc id
+ *
+ * @return bcmos_errno
+ */
+bcmos_errno  maple_mac_agg_port_add(uint32_t if_id, uint32_t onu_id, uint16_t agg_id, bcmolt_pon_alloc_sla sla)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcm_topo_pon_mode pon_mode;
+    do
+    {
+        rc = maple_mac_check_alloc_id_config(agg_id, if_id, onu_id);
+        
+        if(BCM_ERR_OK != rc)
+        {
+            BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(if_id),
+                "Failed to query alloc state\n");
+            break;
+        }
+		
+		pon_mode = bcm_topo_pon_get_pon_mode(if_id);
+		if(pon_mode == BCM_TOPO_PON_MODE_GPON)
+		{
+			rc = maple_gpon_us_alloc_id_add(if_id, onu_id, agg_id, sla);
+		}
+		else if(BCM_TOPO_PON_SUB_FAMILY_XGPON == bcm_topo_pon_get_pon_sub_family(if_id))
+		{
+			rc = maple_xgpon_us_alloc_id_add(if_id, onu_id, agg_id, sla);
+		}
+		else
+		{
+			rc = BCM_ERR_NOT_SUPPORTED;
+		}
+		
+		if(BCM_ERR_OK != rc)
+		{
+			BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(if_id), "%s failed with error %s\n",__FUNCTION__, bcmos_strerror(rc));
+		}  
+    }while(0);
+    return rc;
+}
+
+/**
+ * @brief maple_mac_agg_port_remove
+ *
+ * This routine is used for De-configuring at maple a  specific alloc_id on a given pon interface
+ *
+ * @param if_id - the pon interface id 
+ *
+ * @param agg_id -	the alloc id 
+ *
+ * @return bcmos_errno 
+ */
+bcmos_errno  maple_mac_agg_port_remove(uint32_t if_id, uint16_t agg_id)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcm_topo_pon_mode pon_mode;
+
+    pon_mode = bcm_topo_pon_get_pon_mode(if_id);
+    if(pon_mode == BCM_TOPO_PON_MODE_GPON)
+    {
+        rc = maple_gpon_us_alloc_id_remove(if_id, agg_id);
+    }
+    else if(BCM_TOPO_PON_SUB_FAMILY_XGPON == bcm_topo_pon_get_pon_sub_family(if_id))
+    {
+        rc = maple_xgpon_us_alloc_id_remove(if_id, agg_id);
+    }
+    else
+    {
+        rc = BCM_ERR_NOT_SUPPORTED;
+    }
+
+    if(BCM_ERR_OK != rc)
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(if_id), "%s failed with error %s\n",__FUNCTION__, bcmos_strerror(rc));
+    }
+
+    return rc;
+}
+
+bcmos_errno maple_mac_unicast_flow_add(bcmbal_flow_cfg *p_flow, uint16_t pbit, uint16_t per_flow_mode_vlan_id, bal_util_oper_flow op_type, 	
+                                        flow_list_entry **pp_mac_util_flow_entry)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcmos_bool is_gem_config_required = BCMOS_TRUE;
+    bcmos_bool is_gem_wait_for_ind = BCMOS_TRUE , is_alloc_id_wait_for_ind = BCMOS_TRUE;
+    flow_list_entry *p_new_flow_entry = NULL;
+
+
+    *pp_mac_util_flow_entry = NULL;
+    do
+    {
+        /* Allocate & add the new flow to the flow list to follow indications/gem reuse/alloc reuse */
+        p_new_flow_entry = _mac_util_db_flow_alloc();
+        if(NULL == p_new_flow_entry)
+        {
+            BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow->data.access_int_id),
+                    "Failed to allocate the flow entry\n");
+            rc = BCM_ERR_NOMEM;
+            break;
+        }
+
+        memcpy(&p_new_flow_entry->bal_flow_key, &p_flow->key,
+            sizeof(bcmbal_flow_key));
+        p_new_flow_entry->if_id = p_flow->data.access_int_id;
+        p_new_flow_entry->sub_term_id = p_flow->data.sub_term_id;
+        p_new_flow_entry->svc_port_id = p_flow->data.svc_port_id;
+        if(BCMBAL_FLOW_TYPE_UPSTREAM == p_flow->key.flow_type)
+        {
+            p_new_flow_entry->agg_id = p_flow->data.agg_port_id;
+        }
+        p_new_flow_entry->vlan_id = per_flow_mode_vlan_id;
+        p_new_flow_entry->is_waiting_for_svc_port_active = BCMOS_TRUE;
+        p_new_flow_entry->ind_sent  = BAL_UTIL_FLOW_IND_SEND_NONE;
+        p_new_flow_entry->is_configuration_completed = BCMOS_FALSE;
+
+
+        /* save the operation type so as to report back the right indication type to core on an indication from Maple */
+        p_new_flow_entry->op_type = op_type;
+
+        /* check if gem configuration is required or it was already configured,
+           could happen in case of us flow configured after a ds flow(with the same flow_id)
+           and vise versus, or if that is a case of different flow sharing the same gem port id */
+        if(BCMOS_TRUE == is_gem_config_required)
+        {
+            rc = maple_mac_check_gem_port_id_config(p_new_flow_entry->svc_port_id,
+                                                     p_new_flow_entry->if_id,
+                                                     p_new_flow_entry->sub_term_id,
+                                                     &is_gem_config_required,
+                                                     &is_gem_wait_for_ind);
+            if(BCM_ERR_OK != rc)
+            {
+                /* free the flow entry */
+                _mac_util_db_flow_free(p_flow->data.access_int_id, p_new_flow_entry);
+                rc = BCM_ERR_PARM;
+                break;
+            }
+            /* set wait for ind flag */
+            p_new_flow_entry->is_waiting_for_svc_port_active = is_gem_wait_for_ind;
+        }
+
+        /* if that's an us flow, check if alloc configuration is required or it was already configured */
+        if(p_new_flow_entry->bal_flow_key.flow_type == BCMBAL_FLOW_TYPE_UPSTREAM)
+        {
+            rc = maple_mac_check_alloc_id_active(p_new_flow_entry->agg_id,
+                                                  p_new_flow_entry->if_id,
+                                                  p_new_flow_entry->sub_term_id,
+                                                  &is_alloc_id_wait_for_ind);
+            if(BCM_ERR_OK != rc)
+            {
+                /* free the flow entry */
+                _mac_util_db_flow_free(p_flow->data.access_int_id, p_new_flow_entry);
+                rc = BCM_ERR_PARM;
+                break;
+            }
+        }
+		
+        /* add the new flow to the flow DB */
+        rc = _mac_util_db_flow_add(p_flow->data.access_int_id, p_new_flow_entry);
+        if(BCM_ERR_OK != rc)
+        {
+            /* free the flow entry */
+            _mac_util_db_flow_free(p_flow->data.access_int_id, p_new_flow_entry);
+            break;
+        }
+
+        /* configure the gem port id if required */
+        if(BCMOS_TRUE == is_gem_config_required)
+        {
+            rc = maple_gem_port_id_add(p_new_flow_entry->svc_port_id, p_new_flow_entry->if_id, p_new_flow_entry->sub_term_id);
+            if(BCM_ERR_OK != rc)
+            {
+                break;
+            }
+        }
+
+    } while(0);
+	
+    if(BCM_ERR_OK != rc)
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow->data.access_int_id),
+                "%s Failed: rc = %s(%d), flow Id/Type=%d/%d, pbit=%d, if_id=%d, sub_term_id=%d, "
+                "svc_port_id=%d, agg_id=%d, vlan_id=%d, op type=%s\n",
+                __FUNCTION__,
+                bcmos_strerror(rc), rc,
+                p_flow->key.flow_id, p_flow->key.flow_type,  pbit,
+                p_flow->data.access_int_id, p_flow->data.sub_term_id,
+                p_flow->data.svc_port_id, p_flow->data.agg_port_id, per_flow_mode_vlan_id,
+               (BAL_UTIL_OPER_FLOW_ADD == op_type ? "FLOW_ADD":"INVALID"));
+    }
+
+    /* set the arg to return the local flow entry to caller */
+    *pp_mac_util_flow_entry = p_new_flow_entry;
+
+    return rc;
+}
+
+
+/**
+ * @brief utility routine to correctly assign the SLAs  to new tm sched owned by agg port
+ *  This routine adjusts the BW values to be aligned with 8KBytes/sec boundary. It also
+ *  adjusts the difference between pbr & sbr to be at least 32KBytes/sec
+ *
+ * @param p_tm_sched_req        new tm sched instance
+ * @param p_agg_sla              pointer to the sla configuration
+ *
+ * @note For Maple to accept the sla config:
+ *     (1) the sbr and pbr values from BAL user should be in increments of 256 KBits/sec.
+ *     (2) Also, the sbr  should be at least 256 Kbits/sec less than the pbr.
+ *     (3) sbr value can be 0 or else at least 256 Kbits/sec
+ *     (4) pbr value can be 256 Kbits/sec or above
+ *
+ * @note  The SLA is used for the upstream alloc_id really, even though this is being called for downstream and upstream.
+ *
+ */
+void mac_util_assign_agg_port_sla(bcmbal_tm_sched_cfg *p_tm_sched_req, bcmolt_pon_alloc_sla *p_agg_sla)
+{
+
+    BUG_ON(NULL == p_tm_sched_req);
+
+    if(BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_tm_sched_req->data.rate,tm_shaping, sbr))
+    {
+        p_agg_sla->guaranteed_bw = KILOBITS_PER_SEC2BYTES_PER_SEC(p_tm_sched_req->data.rate.sbr);
+        /* Align the BW to 8KBytes granularity(always upward adjustment) */
+        p_agg_sla->guaranteed_bw = SLA_BW_NKBYTES_ALIGNED(p_agg_sla->guaranteed_bw, MAC_UTIL_PMDB(p_tm_sched_req->data.owner.u.agg_port.intf_id).sla_us_rate_factor);
+        if(BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_tm_sched_req->data.rate, tm_shaping, pbr))
+        {
+            p_agg_sla->maximum_bw = KILOBITS_PER_SEC2BYTES_PER_SEC(p_tm_sched_req->data.rate.pbr);
+            /* max rate should be bigger by 32KBytes/sec than guaranteed rate */
+            if(MAPLE_MIN_BYTES_PER_SEC_FOR_DEFAULT_ALLOC_ID >(p_agg_sla->maximum_bw - p_agg_sla->guaranteed_bw))
+            {
+                p_agg_sla->maximum_bw = p_agg_sla->guaranteed_bw + MAPLE_MIN_BYTES_PER_SEC_FOR_DEFAULT_ALLOC_ID;
+            }
+            else
+            {
+                /* Else, align the BW to 8KBytes granularity(always upward adjustment) */
+                p_agg_sla->maximum_bw = SLA_BW_NKBYTES_ALIGNED(p_agg_sla->maximum_bw, MAC_UTIL_PMDB(p_tm_sched_req->data.owner.u.agg_port.intf_id).sla_us_rate_factor);
+            }
+        }
+        else
+        {
+            /* max rate should be bigger by 32KBytes/sec than guaranteed rate */
+            p_agg_sla->maximum_bw = p_agg_sla->guaranteed_bw + MAPLE_MIN_BYTES_PER_SEC_FOR_DEFAULT_ALLOC_ID;
+        }
+    }
+    else if(BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_tm_sched_req->data.rate, tm_shaping, pbr))
+    {
+        p_agg_sla->maximum_bw = KILOBITS_PER_SEC2BYTES_PER_SEC(p_tm_sched_req->data.rate.pbr);
+
+        /* Align the BW to 8KBytes granularity(always upward adjustment) */
+        p_agg_sla->maximum_bw  = SLA_BW_NKBYTES_ALIGNED(p_agg_sla->maximum_bw , MAC_UTIL_PMDB(p_tm_sched_req->data.owner.u.agg_port.intf_id).sla_us_rate_factor);
+        /* since only max_rate was specified, it is best effort, so set the min rate = 0 */
+        p_agg_sla->guaranteed_bw = 0;
+    }
+    else
+    {
+
+        /* Nothing is set, so assign the defaults(that suits GPON) times the SLA US rate factor(GPON=1, XG-PON1=2, XGS-PON,NG-PON2=8) */
+        p_agg_sla->guaranteed_bw = SLA_GUARANTEED_BW_DEFAULT_BYTES_PER_SEC * MAC_UTIL_PMDB(p_tm_sched_req->data.owner.u.agg_port.intf_id).sla_us_rate_factor;
+        p_agg_sla->maximum_bw = SLA_MAX_BW_DEFAULT_BYTES_PER_SEC * MAC_UTIL_PMDB(p_tm_sched_req->data.owner.u.agg_port.intf_id).sla_us_rate_factor;
+    }
+    if(BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_tm_sched_req->data.tcont_sla, tm_tcont_sla, nrt_cbr))
+    {
+        /* Align the BW to 8KBytes granularity(always upward adjustment) */
+        p_agg_sla->cbr_nrt_bw = SLA_BW_NKBYTES_ALIGNED(p_tm_sched_req->data.tcont_sla.nrt_cbr, MAC_UTIL_PMDB(p_tm_sched_req->data.owner.u.agg_port.intf_id).sla_us_rate_factor);	
+    }
+    else
+    {
+        p_agg_sla->cbr_nrt_bw = 0;
+    }
+
+    if(BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_tm_sched_req->data.tcont_sla, tm_tcont_sla, rt_cbr))
+    {
+        /* Align the BW to 8KBytes granularity(always upward adjustment) */
+        p_agg_sla->cbr_rt_bw = SLA_BW_NKBYTES_ALIGNED(p_tm_sched_req->data.tcont_sla.rt_cbr, MAC_UTIL_PMDB(p_tm_sched_req->data.owner.u.agg_port.intf_id).sla_us_rate_factor);
+    }
+    else
+    {
+        p_agg_sla->cbr_rt_bw = 0;
+    }
+
+    if(BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_tm_sched_req->data.tcont_sla, tm_tcont_sla, extra_bw_elig))
+    {
+        p_agg_sla->additional_bw_eligibility = p_tm_sched_req->data.tcont_sla.extra_bw_elig;
+    }
+    else
+    {
+        p_agg_sla->additional_bw_eligibility = BCMOLT_ADDITIONAL_BW_ELIGIBILITY_BEST_EFFORT;
+    }
+    
+    if(BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_tm_sched_req->data.tcont_sla, tm_tcont_sla, rt_profile))
+    {
+        p_agg_sla->cbr_rt_ap_index = p_tm_sched_req->data.tcont_sla.rt_profile;
+    }
+    else
+    {
+        p_agg_sla->cbr_rt_ap_index = 0;
+    }
+    
+    if(BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_tm_sched_req->data.tcont_sla, tm_tcont_sla, nrt_profile))
+    {
+        p_agg_sla->cbr_nrt_ap_index = p_tm_sched_req->data.tcont_sla.nrt_profile;
+    }
+    else
+    {
+        p_agg_sla->cbr_nrt_ap_index = 0;
+    }
+    
+    p_agg_sla->alloc_type = BCMOLT_ALLOC_TYPE_NSR;
+    p_agg_sla->cbr_rt_compensation = BCMOS_FALSE;
+    p_agg_sla->weight = 0;
+    p_agg_sla->priority = 0;
+ 
+}
+
+
+/**
+ * @brief mark_flow_config_complete
+ *
+ * This routine is used to mark all related flow entries, that the flow configuration requests to device was completed,
+ * meaning now it is ready to be checked for configuration completion indication from device, and to be indicated to core.
+ *
+ * @param p_flow_entry  pointer to mac util flow instance
+ *
+ * @return void
+ */
+void mac_util_mark_flow_config_complete(flow_list_entry *p_flow_entry)
+{
+    if(NULL != p_flow_entry)
+    {
+        p_flow_entry->is_configuration_completed = BCMOS_TRUE;
+    }
+}
+
+
+/**
+ * @brief maple_mac_broadcast_flow_add
+ *
+ * This routine is used for setting required configuration for a new broadcast flow :
+ * gem port id, iwf ds flow and configure it as a miss fallback of its assigned interface.
+ * it will also create an entry for the new flow at the internal flows list to follow relevant indication
+ *
+ * @param p_flow       A pointer to a flow object
+ * @param per_flow_mode_vlan_id vlan id used for GEM port mapping in per flow mode
+ * @param op_type      flow "add" or "modify"
+ * @param pp_mac_util_flow_entry    addr of pointer to flow entry in mac util DB
+ *
+ * @return bcmos_errno
+ */
+bcmos_errno maple_mac_broadcast_flow_add(bcmbal_flow_cfg *p_flow, uint16_t per_flow_mode_vlan_id, bal_util_oper_flow op_type,
+                                        flow_list_entry **pp_mac_util_flow_entry)
+{
+    bcmos_errno rc = BCM_ERR_PARM;
+    flow_list_entry *p_new_flow_entry = NULL;
+    bcmolt_gpon_iwf_ds_ingress_flow_key in_key;
+    bcmolt_gpon_iwf_ds_ingress_flow_cfg in_cfg;
+    bcmolt_gpon_iwf_ds_egress_flow_key egr_key;
+    bcmolt_gpon_iwf_ds_egress_flow_cfg egr_cfg;
+    bcmolt_gpon_iwf_key iwf_key;
+    bcmolt_gpon_iwf_cfg get_iwf_cfg, set_iwf_cfg;
+    bcmolt_mac_table_configuration mac_table_configuration;
+    bcmos_bool is_gem_config_required = BCMOS_TRUE;
+    bcmos_bool is_gem_wait_for_ind = BCMOS_TRUE;
+    bcmolt_devid device_id;
+    uint32_t physical_if_id;
+    bcm_topo_pon_mode pon_mode;
+
+    *pp_mac_util_flow_entry = NULL;
+
+    /* add the new flow to the flow list */
+    p_new_flow_entry = _mac_util_db_flow_alloc();
+    if(NULL == p_new_flow_entry)
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow->data.access_int_id),
+                "Failed to allocate the flow entry\n");
+        return BCM_ERR_NOMEM;
+    }
+
+    memcpy(&p_new_flow_entry->bal_flow_key, &p_flow->key, sizeof(bcmbal_flow_key));
+    p_new_flow_entry->if_id = p_flow->data.access_int_id;
+    p_new_flow_entry->sub_term_id = p_flow->data.sub_term_id;
+    p_new_flow_entry->svc_port_id = p_flow->data.svc_port_id;
+    /* broadcast gem are active by default once they are set, no indications */
+    p_new_flow_entry->is_waiting_for_svc_port_active = BCMOS_FALSE;
+    p_new_flow_entry->ind_sent  = BAL_UTIL_FLOW_IND_SEND_NONE;
+    p_new_flow_entry->is_configuration_completed = BCMOS_FALSE;
+
+    /* make sure the broadcast gem port is not already configured / assigned to any onu on the if */
+    rc = maple_mac_check_gem_port_id_config(p_new_flow_entry->svc_port_id,
+                                             p_new_flow_entry->if_id,
+                                             p_new_flow_entry->sub_term_id,
+                                             &is_gem_config_required,
+                                             &is_gem_wait_for_ind);
+    if(BCM_ERR_OK != rc)
+    {
+        /* free the flow */
+        _mac_util_db_flow_free(p_flow->data.access_int_id, p_new_flow_entry);
+        return BCM_ERR_PARM;
+    }
+
+    if(BCMOS_FALSE == is_gem_config_required)
+    {
+        /* some error, can't have the broadcast flow already configured for the onu */
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow->data.access_int_id),
+                    "Gem %d is already configured on if %d(assigned to onu_id %d)\n",
+                    p_new_flow_entry->svc_port_id, p_new_flow_entry->if_id, p_new_flow_entry->sub_term_id);
+
+        /* free the flow */
+        _mac_util_db_flow_free(p_flow->data.access_int_id, p_new_flow_entry);
+        return BCM_ERR_PARM;
+    }
+
+    /* add the new flow to the local flows list */
+    rc = _mac_util_db_flow_add(p_flow->data.access_int_id, p_new_flow_entry);
+    if(BCM_ERR_OK != rc)
+    {
+        return rc;
+    }
+
+    /* a broadcast gem port is 'assigned' to the special MAC_UTIL_DUMMY_ONU_ID_FOR_MULTICAST_GEM onu id */
+    rc = maple_gem_port_id_add(p_new_flow_entry->svc_port_id, p_new_flow_entry->if_id, MAC_UTIL_DUMMY_ONU_ID_FOR_MULTICAST_GEM);
+    if(BCM_ERR_OK != rc)
+    {
+        return rc;
+    }
+
+    /* get physical interface from logical interface */
+    rc = bcm_topo_pon_get_logical2physical(p_flow->data.access_int_id, &device_id, &physical_if_id);
+    if(BCM_ERR_OK != rc)
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow->data.access_int_id),
+                "Failed to get physical if from logical if(%s)\n", bcmos_strerror(rc));
+        return rc;
+    }
+
+    /* Inter-working(IWF) stuff is relevant for GPON only */
+    pon_mode = bcm_topo_pon_get_pon_mode(p_flow->data.access_int_id);
+    if(pon_mode == BCM_TOPO_PON_MODE_GPON)
+    {
+        /* configure the ingress flow as default fallback ingress flow */
+        in_key.pon_ni = physical_if_id;
+        in_key.vlan_id = per_flow_mode_vlan_id;
+        BCMOLT_CFG_INIT(&in_cfg, gpon_iwf_ds_ingress_flow, in_key);
+        BCMOLT_CFG_PROP_SET(&in_cfg, gpon_iwf_ds_ingress_flow, mapping_method,
+            BCMOLT_VLAN_TO_FLOW_MAPPING_METHOD_MACPLUSVID);
+        BCMOLT_CFG_PROP_SET(&in_cfg, gpon_iwf_ds_ingress_flow, mapping_tag,
+            BCMOLT_MAPPING_TAG_METHOD_OUTER_VID);
+        BCMOLT_CFG_PROP_SET(&in_cfg, gpon_iwf_ds_ingress_flow, vlan_action, BCMOLT_DS_VLAN_ACTION_TRANSPARENT);
+
+
+        rc = bcmolt_cfg_set(device_id, &in_cfg.hdr);
+        if(BCM_ERR_OK != rc)
+        {
+            BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow->data.access_int_id),
+                    "Failed to configure ingress flow pon_ni = %d vlan_id = %d rc = %s(%d), err_text = %s\n",
+                    in_key.pon_ni, in_key.vlan_id, bcmos_strerror(rc), rc, in_cfg.hdr.hdr.err_text);
+            return rc;
+        }
+
+        /* configure the egress flow as default fallback egress flow */
+        egr_key.pon_ni = physical_if_id;
+        egr_key.flow_id = p_flow->data.svc_port_id;
+
+        /* Configure DS egress handling: flow -> GEM */
+        BCMOLT_CFG_INIT(&egr_cfg, gpon_iwf_ds_egress_flow, egr_key);
+        BCMOLT_CFG_PROP_SET(&egr_cfg, gpon_iwf_ds_egress_flow, gem_port, p_flow->data.svc_port_id);
+        BCMOLT_CFG_PROP_SET(&egr_cfg, gpon_iwf_ds_egress_flow, pbit_control, BCMOS_FALSE);
+
+        rc = bcmolt_cfg_set(device_id, &egr_cfg.hdr);
+        if(BCM_ERR_OK != rc)
+        {
+            BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow->data.access_int_id),
+                    "Failed to configure egress flow pon_ni = %d, rc = %s(%d), err_text = %s\n",
+                    egr_key.pon_ni, bcmos_strerror(rc), rc, egr_cfg.hdr.hdr.err_text);
+            return rc;
+        }
+
+        /* update the if miss fallback flow */
+        iwf_key.pon_ni = physical_if_id;
+        BCMOLT_CFG_INIT(&get_iwf_cfg, gpon_iwf, iwf_key);
+        BCMOLT_CFG_INIT(&set_iwf_cfg, gpon_iwf, iwf_key);
+
+        BCMOLT_CFG_PROP_GET(&get_iwf_cfg, gpon_iwf, all_properties);
+        rc = bcmolt_cfg_get(device_id, &get_iwf_cfg.hdr);
+        if(BCM_ERR_OK != rc)
+        {
+            return rc;
+        }
+
+        mac_table_configuration = get_iwf_cfg.data.mac_table_configuration;
+        mac_table_configuration.miss_fallback = BCMOLT_MAC_TABLE_MISS_FALLBACK_DEFAULT_FLOW;
+        mac_table_configuration.default_flow_id = egr_key.flow_id;
+        BCMOLT_CFG_PROP_SET(&set_iwf_cfg, gpon_iwf, mac_table_configuration, mac_table_configuration);
+
+        rc = bcmolt_cfg_set(device_id, &set_iwf_cfg.hdr);
+        if(BCM_ERR_OK != rc)
+        {
+            BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow->data.access_int_id),
+                    "Failed to configure iwf:  pon_ni = %d, rc = %s(%d), err_text = %s\n",
+                    iwf_key.pon_ni, bcmos_strerror(rc), rc, set_iwf_cfg.hdr.hdr.err_text);
+            return rc;
+        }
+    }
+
+    p_new_flow_entry->is_configuration_completed = BCMOS_TRUE;
+
+    if(BCM_ERR_OK != rc)
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow->data.access_int_id),
+                "%s Failed: rc = %s(%d), flow Id/Type=%d/%d, if_id=%d, sub_term_id=%d, "
+                "svc_port_id=%d, agg_id=%d, vlan_id=%d, op type=%s\n",
+                __FUNCTION__,
+                bcmos_strerror(rc), rc,
+                p_flow->key.flow_id, p_flow->key.flow_type,
+                p_flow->data.access_int_id, p_flow->data.sub_term_id,
+                p_flow->data.svc_port_id, p_flow->data.agg_port_id, per_flow_mode_vlan_id,
+               (BAL_UTIL_OPER_FLOW_ADD == op_type ? "FLOW_ADD": "INVALID"));
+    }
+
+    /* set the arg to return the local flow entry to caller */
+    *pp_mac_util_flow_entry = p_new_flow_entry;
+
+    return rc;
+}
+
+
+/**
+ * @brief maple_mac_broadcast_flow_remove
+ *
+ * This routine is removes a broadcast flow from Maple
+ *
+ * @param p_flow                    A pointer to a flow object
+ * @param per_flow_mode_vlan_id     vlan id for per flow mode
+ * @param op_type                   flow "remove" or "clear"
+ * @param p_mac_util_flow_entry     mac util flow entry
+ *
+ * @return bcmos_errno
+ */
+bcmos_errno maple_mac_broadcast_flow_remove(bcmbal_flow_cfg *p_flow, uint16_t per_flow_mode_vlan_id, bal_util_oper_flow op_type,
+                                        flow_list_entry *p_mac_util_flow_entry)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    flow_list_entry *p_target_flow_entry = NULL;
+    bcmolt_gpon_iwf_ds_ingress_flow_key in_key;
+    bcmolt_gpon_iwf_ds_ingress_flow_cfg in_cfg;
+    bcmolt_gpon_iwf_ds_egress_flow_key egr_key;
+    bcmolt_gpon_iwf_ds_egress_flow_cfg egr_cfg;
+    bcmolt_gpon_iwf_key iwf_key;
+    bcmolt_gpon_iwf_cfg set_iwf_cfg;
+    bcmolt_devid device_id;
+    uint32_t physical_if_id;
+    bcm_topo_pon_mode pon_mode;
+
+    /* First find the flow in local database */
+    p_target_flow_entry = _mac_util_db_flow_get_w_flow_key(p_flow->data.access_int_id, &(p_flow->key));
+
+    if(NULL == p_target_flow_entry)
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow->data.access_int_id),
+                "%s: Failed to find the flow entry: flow id: %d, flow_type: %s\n",
+                __FUNCTION__,
+                p_flow->key.flow_id,
+               (p_flow->key.flow_type == BCMBAL_FLOW_TYPE_BROADCAST ? "broadcast":"unicast/multicast"));
+
+        return BCM_ERR_NOENT;
+    }
+
+
+    /* broadcast gem are active by default once they are set, no indications */
+    p_target_flow_entry->is_waiting_for_svc_port_active = BCMOS_FALSE;
+    p_target_flow_entry->ind_sent  = BAL_UTIL_FLOW_IND_SEND_NONE;
+    p_target_flow_entry->is_configuration_completed = BCMOS_FALSE;
+
+
+
+    /* clear broadcast gem port */
+    rc = maple_gem_port_id_remove(p_target_flow_entry->svc_port_id, p_target_flow_entry->if_id);
+    if(BCM_ERR_OK != rc)
+    {
+        return rc;
+    }
+
+    /* get physical interface from logical interface */
+    rc = bcm_topo_pon_get_logical2physical(p_flow->data.access_int_id, &device_id, &physical_if_id);
+    if(BCM_ERR_OK != rc)
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow->data.access_int_id),
+                "Failed to get physical if from logical if(%s)\n", bcmos_strerror(rc));
+        return rc;
+    }
+
+    /* Inter-working(IWF) stuff is relevant for GPON only */
+    pon_mode = bcm_topo_pon_get_pon_mode(p_flow->data.access_int_id);
+    if(pon_mode == BCM_TOPO_PON_MODE_GPON)
+    {
+        /* clear the ingress flow as default fallback ingress flow */
+        in_key.pon_ni = physical_if_id;
+        in_key.vlan_id = per_flow_mode_vlan_id;
+        BCMOLT_CFG_INIT(&in_cfg, gpon_iwf_ds_ingress_flow, in_key);
+
+        rc = bcmolt_cfg_clear(device_id, &in_cfg.hdr);
+        if(BCM_ERR_OK != rc)
+        {
+            BCM_LOG(WARNING, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow->data.access_int_id),
+                    "Failed to clear ingress flow pon_ni = %d vlan_id = %d rc = %s(%d)\n",
+                    in_key.pon_ni, in_key.vlan_id, bcmos_strerror(rc), rc);
+
+            return rc;
+        }
+
+        /* clear the egress flow as default fallback egress flow */
+        egr_key.pon_ni = physical_if_id;
+        egr_key.flow_id = p_flow->data.svc_port_id;
+        /* Configure DS egress handling: flow -> GEM */
+        BCMOLT_CFG_INIT(&egr_cfg, gpon_iwf_ds_egress_flow, egr_key);
+
+        rc = bcmolt_cfg_clear(device_id, &egr_cfg.hdr);
+        if(BCM_ERR_OK != rc)
+        {
+            BCM_LOG(WARNING, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow->data.access_int_id),
+                    "Failed to clear egress flow pon_ni = %d gem port = %d rc = %s(%d)\n",
+                    egr_key.pon_ni, egr_key.flow_id, bcmos_strerror(rc), rc);
+
+            return rc;
+        }
+
+        /* update the if miss fallback flow */
+        iwf_key.pon_ni = physical_if_id;
+        BCMOLT_CFG_INIT(&set_iwf_cfg, gpon_iwf, iwf_key);
+
+        rc = bcmolt_cfg_clear(device_id, &set_iwf_cfg.hdr);
+        if(BCM_ERR_OK != rc)
+        {
+            BCM_LOG(WARNING, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow->data.access_int_id),
+                    "Failed to clear iwf flow pon_ni = %d rc = %s(%d)\n",
+                    iwf_key.pon_ni, bcmos_strerror(rc), rc);
+
+            return rc;
+        }
+    }
+
+    /* all De-config done */
+    p_target_flow_entry->is_configuration_completed = BCMOS_TRUE;
+
+    if(BCM_ERR_OK != rc)
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow->data.access_int_id),
+                "%s Failed: rc = %s(%d), flow Id/Type=%d/%d, if_id=%d, sub_term_id=%d, "
+                "svc_port_id=%d, agg_id=%d, vlan_id=%d, op type=%s\n",
+                __FUNCTION__,
+                bcmos_strerror(rc), rc,
+                p_flow->key.flow_id, p_flow->key.flow_type,
+                p_flow->data.access_int_id, p_flow->data.sub_term_id,
+                p_flow->data.svc_port_id, p_flow->data.agg_port_id, per_flow_mode_vlan_id,
+               (BAL_UTIL_OPER_FLOW_REMOVE == op_type ? "FLOW_REMOVE":(BAL_UTIL_OPER_FLOW_CLEAR == op_type ? "FLOW_CLEAR":"INVALID")));
+    }
+
+    return rc;
+}
+
+
+/**
+ * @brief maple_mac_unicast_flow_remove
+ *
+ * This routine is used to De-configure a flow at the internal flows list to
+ * handle incoming and outgoing relevant indications.
+ * It will also De-configure gem port and alloc id at the device if required.
+ *
+ * @param p_flow                Pointer to the flow info
+ * @param op_type               Flow operation type i.e. FLOW_REMOVE, FLOW_CLEAR
+ * @param p_mac_util_flow_entry Pointer to mac util flow entry
+ *
+ * @return bcmos_errno
+ */
+bcmos_errno maple_mac_unicast_flow_remove(bcmbal_flow_cfg *p_flow, bal_util_oper_flow op_type,
+                                        flow_list_entry *p_mac_util_flow_entry)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcmos_bool is_gem_deconfig_required = BCMOS_TRUE;
+    bcmos_bool is_gem_wait_for_ind = BCMOS_TRUE;
+    flow_list_entry *p_target_flow_entry = NULL;
+    
+    BUG_ON(NULL == p_mac_util_flow_entry);
+   
+    do
+    {
+        p_target_flow_entry = p_mac_util_flow_entry;       
+        p_target_flow_entry->is_waiting_for_svc_port_active = BCMOS_TRUE;
+        p_target_flow_entry->ind_sent  = BAL_UTIL_FLOW_IND_SEND_NONE;
+        p_target_flow_entry->is_configuration_completed = BCMOS_FALSE;
+        /* save the operation type so as to report back the right indication type to core on an indication from Maple */
+        p_target_flow_entry->op_type = op_type;
+        
+        /* check if gem configuration is used by other flows still.
+        could happen in case of us flow configured after a ds flow(with the same flow_id)
+        and vice versa, or if that is a case of different flow sharing the same gem port id */
+        if(BCMOS_TRUE == is_gem_deconfig_required)
+        {
+            rc = maple_mac_check_gem_port_id_deconfig(p_target_flow_entry->svc_port_id,
+                p_target_flow_entry->if_id,
+                p_target_flow_entry->sub_term_id,
+                &is_gem_deconfig_required,
+                &is_gem_wait_for_ind);
+            /* set wait for ind flag */
+            p_target_flow_entry->is_waiting_for_svc_port_active = is_gem_wait_for_ind;
+            
+            if(BCM_ERR_OK != rc)
+            {
+                rc = BCM_ERR_PARM;
+                break;
+            }
+        }
+        
+        /* do not remove the flow entry from local flows list yet; wait for indication before removing */        
+        /* De-configure the gem port id if required */
+        if(BCMOS_TRUE == is_gem_deconfig_required)
+        {
+            rc = maple_gem_port_id_remove(p_target_flow_entry->svc_port_id, p_target_flow_entry->if_id);
+            if(BCM_ERR_OK != rc)
+            {
+                break;
+            }
+        }
+    } while(0);
+    
+    if(BCM_ERR_OK != rc)
+    {
+        if(!((BCM_ERR_NOENT == rc) &&(BAL_UTIL_OPER_FLOW_CLEAR == op_type)))
+        {
+            BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow->data.access_int_id),
+                "%s Failed: rc = %s(%d), flow Id/Type=%d/%d, if_id=%d, sub_term_id=%d, "
+                "svc_port_id=%d, agg_id=%d, op type=%s\n",
+                __FUNCTION__,
+                bcmos_strerror(rc), rc,
+                p_flow->key.flow_id, p_flow->key.flow_type,
+                p_flow->data.access_int_id, p_flow->data.sub_term_id,
+                p_flow->data.svc_port_id, p_flow->data.agg_port_id,
+               (BAL_UTIL_OPER_FLOW_REMOVE == op_type ? "FLOW_REMOVE":(BAL_UTIL_OPER_FLOW_CLEAR == op_type ? "FLOW_CLEAR":"INVALID")));
+        }
+    }
+    
+    return rc;
+
+}
+bcmos_errno mac_util_update_flows_w_sub_term_update(uint32_t pon_if, uint32_t sub_term_id, maple_mac_check_gem_port_id check_gem_port_id_func, maple_mac_check_agg_port_id check_agg_port_id_func)
+{
+    flow_list_entry *p_current_entry = NULL;
+    flow_list_entry *p_next_entry = NULL;
+    bcmos_bool dummy;
+    bcmos_bool 	is_gem_activated;
+    bcmos_bool 	is_wait_for_gem_activated;
+    bcmolt_alloc_state alloc_id_state;
+    bcmos_errno rc = BCM_ERR_OK;
+
+    /*find all related flows, check their state and update if needed*/
+    do
+    {
+        p_current_entry = _mac_util_db_flow_get_next_w_sub_term_id(pon_if, sub_term_id, p_current_entry, &p_next_entry);
+        if(NULL == p_current_entry)
+            break;
+        
+        rc = check_gem_port_id_func(pon_if,sub_term_id, p_current_entry->svc_port_id, &dummy, &is_gem_activated);
+        if(BCM_ERR_OK != rc)
+        {
+            BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(pon_if), "%s failed with error %s\n",__FUNCTION__, bcmos_strerror(rc));
+            continue;
+        }
+        
+        is_wait_for_gem_activated = !is_gem_activated;
+        
+        if(p_current_entry->agg_id)
+        {
+            rc = check_agg_port_id_func(pon_if, sub_term_id, p_current_entry->agg_id, &alloc_id_state);
+            
+            if(BCM_ERR_OK != rc)
+            {
+                BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(pon_if), "%s failed with error %s\n",__FUNCTION__, bcmos_strerror(rc));
+                continue;            
+            }
+        }
+        
+        /*if something was changed.....*/
+        if(p_current_entry->is_waiting_for_svc_port_active != is_wait_for_gem_activated)
+        {
+            /*update current flow entry*/
+            p_current_entry->is_waiting_for_svc_port_active = is_wait_for_gem_activated;					
+            
+            /*check if a flow became up*/
+            if(p_current_entry->op_type == BAL_UTIL_OPER_FLOW_ADD
+                &&(is_wait_for_gem_activated)
+                && BAL_UTIL_FLOW_IND_SEND_FAIL != p_current_entry->ind_sent)
+            {
+                mac_util_report_flow_auto_ind(pon_if,p_current_entry->bal_flow_key,p_current_entry->op_type, BAL_UTIL_FLOW_IND_SEND_FAIL);
+                p_current_entry->ind_sent = BAL_UTIL_FLOW_IND_SEND_FAIL;
+            }
+            /*check if a flow became down*/
+            if(p_current_entry->op_type == BAL_UTIL_OPER_FLOW_ADD
+                &&(!is_wait_for_gem_activated)
+                &&(BAL_UTIL_FLOW_IND_SEND_SUCCESS != p_current_entry->ind_sent))				 
+            {
+                mac_util_report_flow_auto_ind(pon_if,p_current_entry->bal_flow_key,p_current_entry->op_type, BAL_UTIL_FLOW_IND_SEND_SUCCESS);
+                p_current_entry->ind_sent = BAL_UTIL_FLOW_IND_SEND_SUCCESS;
+            }
+        }
+		/* go through all flows(assigned with the given sub term) until break by 
+		   _mac_util_db_flow_get_next_w_sub_term_id returning NULL*/
+    }while(1);
+    
+    return rc;
+}
+
+/**
+ * @brief agg_port set 
+ * @param p_tm_sched_req  pointer to tm_sched request structure from core
+ * @param op_type      ADD, REMOVE or CLEAR
+ * @param p_tm_sched_inst pointer to the core tm sched Object instance
+ *
+ * @return errno    error
+ *
+ */
+bcmos_errno  maple_mac_util_agg_port_set(bcmbal_tm_sched_cfg *p_tm_sched_req, bal_util_oper_agg_port op_type, tm_sched_inst *p_tm_sched_inst)
+{
+	bcmos_errno  ret = BCM_ERR_OK;
+    do
+    {
+        /* Check the operation id */
+        if((BAL_UTIL_OPER_AGG_PORT_ADD != op_type)    &&
+           (BAL_UTIL_OPER_AGG_PORT_REMOVE != op_type) &&
+           (BAL_UTIL_OPER_AGG_PORT_REMOVE != op_type))
+        {
+            BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_tm_sched_req->data.owner.u.agg_port.intf_id),
+                "Unexpected mac_util agg port operation %d \n", op_type);
+            ret = BCM_ERR_PARM;
+            break;
+        }
+        
+        /* agg port Add or Modify */
+        if(BAL_UTIL_OPER_AGG_PORT_ADD == op_type)
+        {
+            bcmolt_pon_alloc_sla agg_sla;    
+            mac_util_assign_agg_port_sla(p_tm_sched_req, &agg_sla);
+            ret = maple_mac_agg_port_add(p_tm_sched_req->data.owner.u.agg_port.intf_id, p_tm_sched_req->data.owner.u.agg_port.sub_term_id, p_tm_sched_req->data.owner.u.agg_port.agg_port_id, agg_sla);
+        }
+        if(BAL_UTIL_OPER_AGG_PORT_REMOVE== op_type)
+        {
+            ret = maple_mac_agg_port_remove(p_tm_sched_req->data.owner.u.agg_port.intf_id, p_tm_sched_req->data.owner.u.agg_port.agg_port_id);
+        }
+    
+    }while(0);
+    return ret;
+
+}
+
+/*@}*/
diff --git a/bal_release/src/core/util/mac/bal_mac_util_common_itu_pon.h b/bal_release/src/core/util/mac/bal_mac_util_common_itu_pon.h
new file mode 100644
index 0000000..8f0f75f
--- /dev/null
+++ b/bal_release/src/core/util/mac/bal_mac_util_common_itu_pon.h
@@ -0,0 +1,200 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *
+ *  :>
+ *
+ *****************************************************************************/
+
+/**
+ * @file bal_mac_util_common_itu_pon.h
+ *
+ * @brief mac util interfaces definition used by Bal Core, for ITU PON: GPON, XG-PON1, XGS-PON
+ *
+ * This file expose the APIs to the core to configure the mac
+ * with regarding to the operation of access terminal, interface, subscriber terminal and flow.
+ *
+ * @addtogroup mac_util
+ */
+
+/*@{*/
+
+#include <bal_mac_util.h>
+
+/**
+ * @brief Maple SLA bandwidth config request is aligned to 8000 Bytes/sec
+ *
+ * @note similar macros are defined in bcm_common_gpon.h embedded code.
+ */
+#define MAPLE_BW_GRANULARITY_BYTES 8000
+#define MAPLE_BW_GRANULARITY_BYTES_10G 16000
+#define MAPLE_MIN_BYTES_PER_SEC_FOR_DEFAULT_ALLOC_ID 32000
+#define SLA_BW_NKBYTES_ALIGNED(_rate, _us_rate_factor)    \
+    (_us_rate_factor) == 8 ?                              \
+        ((((_rate) + MAPLE_BW_GRANULARITY_BYTES_10G-1) / MAPLE_BW_GRANULARITY_BYTES_10G) * MAPLE_BW_GRANULARITY_BYTES_10G) :                                                      \
+        ((((_rate) + MAPLE_BW_GRANULARITY_BYTES-1) / MAPLE_BW_GRANULARITY_BYTES) * MAPLE_BW_GRANULARITY_BYTES)
+
+/* The thumb-rule is GPON PON capacity (155520000 Bps) divided by the maximum number of ONUs (128), rounded by granularity constraint. */
+#define SLA_GUARANTEED_BW_DEFAULT_BYTES_PER_SEC 1208000
+/* Like the default guaranteed BW, but since we are going to configure best-effort class, additional BW must be bigger than guaranteed BW in at least 32000. */
+#define SLA_MAX_BW_DEFAULT_BYTES_PER_SEC (SLA_GUARANTEED_BW_DEFAULT_BYTES_PER_SEC + MAPLE_MIN_BYTES_PER_SEC_FOR_DEFAULT_ALLOC_ID)
+#define KILOBITS_PER_SEC2BYTES_PER_SEC(x) ((uint64_t)(x) * 1000 / 8)
+
+
+char *mac_util_indication_get_obj_type_str (bcmolt_obj_id obj_type, mac_util_ind_obj_and_handlers handlers[], size_t handlers_size);
+bcmos_errno mac_util_handle_indication (bcmolt_devid device_id, bcmolt_msg *p_msg, mac_util_ind_obj_and_handlers handlers[], size_t handlers_size);
+bcmos_bool  mac_util_check_flow_is_double_tag_remove_o_tag (const bcmbal_flow_cfg *p_flow_req);
+void mac_util_assign_agg_port_sla (bcmbal_tm_sched_cfg *p_tm_sched_req, bcmolt_pon_alloc_sla *p_agg_sla);
+
+bcmos_errno maple_mac_unicast_flow_add (bcmbal_flow_cfg *p_flow, uint16_t pbit, uint16_t per_flow_mode_vlan_id, bal_util_oper_flow op_type, flow_list_entry **pp_mac_util_flow_entry);
+bcmos_errno maple_mac_unicast_flow_remove (bcmbal_flow_cfg *p_flow, bal_util_oper_flow op_type, flow_list_entry *p_mac_util_flow_entry);
+bcmos_errno maple_mac_broadcast_flow_add (bcmbal_flow_cfg *p_flow, uint16_t per_flow_mode_vlan_id, bal_util_oper_flow op_type,
+                                            flow_list_entry **pp_mac_util_flow_entry);
+bcmos_errno maple_mac_broadcast_flow_remove (bcmbal_flow_cfg *p_flow, uint16_t per_flow_mode_vlan_id, bal_util_oper_flow op_type, flow_list_entry *p_mac_util_flow_entry);
+void mac_util_mark_flow_config_complete(flow_list_entry *p_flow_entry);
+bcmos_errno maple_gpon_mac_check_gem_port_id(uint32_t if_id, uint32_t onu_id, uint16_t svc_port_id,
+                                                       bcmos_bool *is_configured, bcmos_bool *is_activated);
+bcmos_errno maple_xgpon_mac_check_gem_port_id(uint32_t if_id, uint32_t onu_id, uint16_t svc_port_id,
+                                                         bcmos_bool *is_configured, bcmos_bool *is_activated);
+bcmos_errno maple_gpon_gem_port_id_add(uint32_t if_id, uint16_t svc_port_id, uint32_t onu_id, bcmolt_gem_port_configuration *configuration);
+bcmos_errno maple_xgpon_gem_port_id_add(uint32_t if_id, uint16_t svc_port_id, uint32_t onu_id, bcmolt_gem_port_configuration *configuration);
+bcmos_errno maple_gpon_gem_port_id_remove(uint32_t if_id, uint16_t svc_port_id);
+bcmos_errno maple_xgpon_gem_port_id_remove(uint32_t if_id, uint16_t svc_port_id);
+bcmos_errno maple_gpon_mac_get_alloc_id_config (uint32_t if_id, uint32_t onu_id, uint16_t agg_id, bcmolt_alloc_state *alloc_id_state);
+
+bcmos_errno maple_xgpon_mac_get_alloc_id_config (uint32_t if_id, uint32_t onu_id, uint16_t agg_id, bcmolt_alloc_state *alloc_id_state);
+
+
+bcmos_errno maple_gpon_us_alloc_id_add(uint32_t if_id, uint32_t onu_id, uint16_t agg_id, bcmolt_pon_alloc_sla agg_sla);
+bcmos_errno maple_xgpon_us_alloc_id_add(uint32_t if_id, uint32_t onu_id, uint16_t agg_id, bcmolt_pon_alloc_sla agg_sla);
+bcmos_errno maple_gpon_us_alloc_id_remove(uint32_t if_id, uint16_t agg_id);
+bcmos_errno maple_xgpon_us_alloc_id_remove(uint32_t if_id, uint16_t agg_id);
+
+bcmos_errno  maple_mac_agg_port_add(uint32_t if_id, uint32_t onu_id, uint16_t agg_id, bcmolt_pon_alloc_sla sla);
+bcmos_errno  maple_mac_agg_port_remove(uint32_t if_id, uint16_t agg_id);
+
+
+
+/* functions to register for specific auto indications from maple */
+bcmos_errno _mac_util_register_for_auto_indications (struct bcmolt_rx_cfg *p_rx_cfg,
+                                                 mac_util_ind_obj_and_handlers obj_types_and_handlers[], uint16_t num_obj_types, bcmolt_devid device_id);
+bcmos_errno mac_util_register_for_device_auto_indications (struct bcmolt_rx_cfg *p_rx_cfg, bcmolt_devid device_id);
+bcmos_errno mac_util_register_for_gpon_auto_indications (struct bcmolt_rx_cfg *p_rx_cfg, bcmolt_devid device_id);
+bcmos_errno mac_util_register_for_xgpon_auto_indications (struct bcmolt_rx_cfg *p_rx_cfg, bcmolt_devid device_id);
+
+
+/** @brief generic struct for object set/validate handlers based on mac protocols */
+typedef bcmos_errno (*mac_util_bal_group_validate_handler) (const bcmbal_group_cfg *p_group_req);
+typedef bcmos_errno (*mac_util_bal_group_set_handler) (bcmbal_group_cfg *p_group_req, bal_util_oper_group op_type, group_inst *p_group_context);
+typedef bcmos_errno (*mac_util_bal_flow_validate_handler) (const bcmbal_flow_cfg *p_flow_req);
+typedef bcmos_errno (*mac_util_bal_flow_set_handler) (bcmbal_flow_cfg *p_flow_req, bal_util_oper_flow op_type, flow_inst *p_flow_core);
+typedef bcmos_errno (*mac_util_bal_sub_term_validate_handler) (const bcmbal_subscriber_terminal_cfg *p_sub_term_req);
+typedef bcmos_errno (*mac_util_bal_sub_term_set_handler) (sub_term_inst *p_sub_term_inst, bal_util_oper_sub_term op_type, bcmos_bool is_post_discovery);
+typedef bcmos_errno (*mac_util_bal_if_validate_handler) (acc_term_inst *p_acc_term, bal_util_oper_if op_type);
+typedef bcmos_errno (*mac_util_bal_if_set_handler) (acc_term_interface *p_interface_inst, bal_util_oper_if op_type);
+typedef bcmos_errno (*mac_util_bal_acc_term_set_handler) (acc_term_inst *p_acc_term, bal_util_oper_acc_term op_type, bcmolt_devid device_id);
+typedef bcmos_errno (*mac_util_bal_acc_term_post_indication_set_handler) (bcmolt_devid device_id);
+
+
+/**
+ * Structure for handler routines for different pon modes and loopback mode
+ */
+typedef struct
+{
+    mac_util_bal_if_validate_handler        if_validate;
+    mac_util_bal_if_set_handler             if_set;
+
+    mac_util_bal_sub_term_validate_handler  sub_term_validate;
+    mac_util_bal_sub_term_set_handler       sub_term_set;
+
+    mac_util_bal_flow_validate_handler      flow_validate;
+    mac_util_bal_flow_set_handler           flow_set;
+
+    mac_util_bal_group_validate_handler     group_validate;
+    mac_util_bal_group_set_handler          group_set;
+
+    uint32_t                                sla_us_rate_factor;
+} mac_util_handlers_per_pon_mode_t;
+
+
+typedef bcmos_errno (* maple_mac_check_gem_port_id)(uint32_t if_id, uint32_t onu_id, uint16_t svc_port_id,
+                                                                 bcmos_bool *is_configured, bcmos_bool *is_activated);
+
+typedef bcmos_errno (* maple_mac_check_agg_port_id)(uint32_t if_id, uint32_t onu_id, uint16_t agg_id, bcmolt_alloc_state *alloc_id_state);
+
+
+
+/** access terminal set */
+bcmos_errno mac_util_access_terminal_set_for_gpon_16 (acc_term_inst *p_acc_term, bal_util_oper_acc_term op_type, bcmolt_devid device_id);
+bcmos_errno mac_util_access_terminal_set_for_gpon_8 (acc_term_inst *p_acc_term, bal_util_oper_acc_term op_type, bcmolt_devid device_id);
+bcmos_errno mac_util_access_terminal_set_for_xgpon_8 (acc_term_inst *p_acc_term, bal_util_oper_acc_term op_type, bcmolt_devid device_id);
+bcmos_errno mac_util_access_terminal_set_for_xgs (acc_term_inst *p_acc_term, bal_util_oper_acc_term op_type, bcmolt_devid device_id);
+bcmos_errno mac_util_access_terminal_set_for_10G_itu_pon (bcmolt_device_cfg dev_cfg, bcmolt_devid device_id);
+
+bcmos_errno mac_util_access_terminal_post_indication_set_for_gpon(bcmolt_devid device_id);
+bcmos_errno mac_util_access_terminal_post_indication_set_for_xgpon_xgs(bcmolt_devid device_id);
+
+bcmos_errno mac_util_access_terminal_set_for_loopback (acc_term_inst *p_acc_term, bal_util_oper_acc_term op_type, bcmolt_devid device_id);
+
+bcmos_errno mac_util_update_flows_w_sub_term_update(uint32_t pon_if, uint32_t sub_term_id, maple_mac_check_gem_port_id check_gem_port_id_func, maple_mac_check_agg_port_id check_agg_port_id_func);
+bcmos_errno  maple_mac_util_agg_port_set(bcmbal_tm_sched_cfg *p_tm_sched_req, bal_util_oper_agg_port op_type, tm_sched_inst *p_tm_sched_inst);
+
+
+
+/**
+ * Structure for handler routines for diffrent system modes and loopback mode
+ */
+typedef struct
+{
+    mac_util_bal_acc_term_set_handler       acc_term_set;
+    mac_util_bal_acc_term_post_indication_set_handler acc_term_post_indication_set;
+} mac_util_bal_req_handlers_for_system_mode_t;
+#define MAC_UTIL_PMDB(pon) mac_util_bal_req_handlers_for_pon_mode[bcm_topo_pon_get_pon_mode((pon))]
+
+typedef struct
+{
+    bcmolt_iwf_mode iwf_mode;
+} mac_util_topo_pon_context;
+
+
+
+typedef struct
+{
+    bcmolt_system_mode system_mode;
+    bcmos_bool is_connected;
+} mac_util_device_context;
+
+typedef struct
+{
+    mac_util_device_context devices[BCM_TOPO_MAX_NUM_OF_DEVS];
+    bcmos_bool fail_reported;   /*more that one device may fail to connect, we would like to send the fail event to core only once*/
+} mac_util_acc_term_connectivity;
+
+mac_util_acc_term_connectivity acc_term_connectivity;
+
+extern mac_util_handlers_per_pon_mode_t mac_util_bal_req_handlers_for_pon_mode[];
+
+/*@}*/
diff --git a/bal_release/src/core/util/mac/bal_mac_util_db_apis.c b/bal_release/src/core/util/mac/bal_mac_util_db_apis.c
new file mode 100644
index 0000000..2a84cd0
--- /dev/null
+++ b/bal_release/src/core/util/mac/bal_mac_util_db_apis.c
@@ -0,0 +1,545 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file bal_mac_util_db_apis.c
+ *
+ * @brief This file has the wrapper functions and the calls to database API functions. 
+ * These wrapper functions are called by mac util code for DB operations.
+ *
+ * @addtogroup mac_util
+ */
+
+/*@{*/
+
+#include <bal_mac_util.h>
+
+
+/** 
+ * @brief flow DB macros
+ * */
+/** @brief max number of flow types stored in the DB.
+ *  @details for now upstream & downstream unicast flows only are stored in the flow DB 
+ * */
+#define MAC_UTIL_FLOW_DB_MAX_FLOW_TYPES 2
+
+/** @brief check if flow type key is valid */
+#define MAC_UTIL_FLOW_DB_FLOW_TYPE_IS_VALID(_flow_type)                                        \
+    ((_flow_type) >= BCMBAL_FLOW_TYPE_UPSTREAM &&                                              \
+     (_flow_type) <= MAC_UTIL_FLOW_DB_MAX_FLOW_TYPES)                                          \
+
+
+/** 
+ * @brief maps {flow Id, flow_type} Key pair to an {Index, sub-Index} pair to access a flow entry in the Array DB.
+ * */
+#define MAC_UTIL_FLOW_DB_FLOW_ID_TYPE2ARR_INDEX_SUB_INDEX(_flow_id, _flow_type, _index, _sub_index)                         \
+    do                                                                                          \
+    {                                                                                           \
+        (_index) = (_sub_index) = 0;                                                            \
+        if(MAC_UTIL_FLOW_DB_FLOW_ID_IS_VALID(_flow_id))                                         \
+        {                                                                                       \
+            if(MAC_UTIL_FLOW_DB_FLOW_TYPE_IS_VALID(_flow_type))                                 \
+            {                                                                                   \
+                (_index) = (_flow_id) - mac_util_flow_id_start_val+1;                           \
+                (_sub_index) = (_flow_type) - 1;                                                \
+            }                                                                                   \
+        }                                                                                       \
+    } while (0);                                                                            
+
+
+/** @brief lookup an entry from the Array based on flow Id & type key pair */
+#define MAC_UTIL_FLOW_DB_ENTRY_GET(_flow_id, _flow_type, _flow_entry)                           \
+    do                                                                                          \
+    {                                                                                           \
+        (_flow_entry) = NULL;                                                                   \
+        uint32_t _index, _sub_index;                                                            \
+        MAC_UTIL_FLOW_DB_FLOW_ID_TYPE2ARR_INDEX_SUB_INDEX((_flow_id), (_flow_type), (_index), (_sub_index)); \
+        if (!_index)                                                                            \
+            break;                                                                              \
+        _flow_entry = mac_util_db_flows_list[_index][_sub_index];                               \
+    } while (0);                                                                               
+
+
+/** @brief Get First non-NULL flow entry from the Array */
+#define MAC_UTIL_FLOW_DB_ENTRY_GET_FIRST(_p_first)                                              \
+    do                                                                                          \
+    {                                                                                           \
+        int _i, _j;                                                                             \
+        for (_i=1; _i<=BAL_ACC_TERM_MAX_FLOWS; _i++)                                            \
+        {                                                                                       \
+            for (_j=0; _j<MAC_UTIL_FLOW_DB_MAX_FLOW_TYPES; _j++)                                 \
+            {                                                                                   \
+                (_p_first) = mac_util_db_flows_list[_i][_j];                                    \
+                if (_p_first)                                                                   \
+                    break;                                                                      \
+            }                                                                                   \
+            if (_p_first)                                                                   \
+                break;                                                                      \
+        }                                                                                       \
+    } while (0)                                                                                 
+
+
+/** @brief Get Next non-NULL flow entry from the Array */
+#define MAC_UTIL_FLOW_DB_ENTRY_GET_NEXT(_p_curr, _pp_next)                                      \
+    do                                                                                          \
+    {                                                                                           \
+        uint32_t _i, _j, _curr_i, _curr_j;                                                                                 \
+        *(_pp_next) = NULL;                                                                     \
+        if (_p_curr)                                                                            \
+        {                                                                                       \
+            MAC_UTIL_FLOW_DB_FLOW_ID_TYPE2ARR_INDEX_SUB_INDEX(_p_curr->bal_flow_key.flow_id, _p_curr->bal_flow_key.flow_type, _curr_i, _curr_j);\
+            for (_i = (_curr_j<MAC_UTIL_FLOW_DB_MAX_FLOW_TYPES-1 ?_curr_i : _curr_i+1);         \
+                     _i<=BAL_ACC_TERM_MAX_FLOWS;                                                \
+                     _i++)                                                                      \
+            {                                                                                   \
+                for (_j= (_curr_j<MAC_UTIL_FLOW_DB_MAX_FLOW_TYPES-1 ? _curr_j+1 : 0);           \
+                        _j<MAC_UTIL_FLOW_DB_MAX_FLOW_TYPES;                                     \
+                        _j++)                                                                   \
+                {                                                                               \
+                    *(_pp_next) = mac_util_db_flows_list[_i][_j];                               \
+                    if (*(_pp_next))                                                            \
+                        break;                                                                  \
+                }                                                                               \
+                if (*(_pp_next))                                                                   \
+                    break;                                                                      \
+            }                                                                                   \
+        }                                                                                       \
+        else                                                                                    \
+            break;                                                                              \
+    } while (0)                                                                                 
+
+
+/** @brief Set a flow entry in the Array */
+#define MAC_UTIL_FLOW_DB_ENTRY_SET(_flow_id, _flow_type, _flow_entry, _rc)                      \
+    do                                                                                          \
+    {                                                                                           \
+        uint32_t _index, _sub_index;                                                            \
+        MAC_UTIL_FLOW_DB_FLOW_ID_TYPE2ARR_INDEX_SUB_INDEX((_flow_id), (_flow_type), (_index), (_sub_index)); \
+        if (!_index)                                                                            \
+        {                                                                                       \
+            (_rc) = BCM_ERR_NULL;                                                               \
+            break;                                                                              \
+        }                                                                                       \
+        mac_util_db_flows_list[_index][_sub_index] = (_flow_entry);                             \
+    } while (0);                                                                                
+
+
+/** 
+ * @brief flow Id starting value that can used by SDN User application.
+ * @details By default the starting flow Id is assumed to be 1.
+ */
+uint32_t mac_util_flow_id_start_val = 1;
+
+/** 
+ * @brief flow DB Array
+ * @details This Array is for upstream & downstream flows and can store BAL_ACC_TERM_MAX_FLOWS flows.
+ *          This array is indexed by BAL flow Id.
+ *
+ * @note First entry starts at index 1; (0 is not used).
+ *
+ * @note Upstream & Downstream flow types of a pair may use the same Flow Id.Hence there is a sub-array
+ * of each of Flow Id entry. The sub array has upstream flow entry in index 0 and downstream at index 1.
+ * Hence, a flow entry is accessible by the key pair {flowId, flowtype}.
+ * */
+static flow_list_entry *mac_util_db_flows_list[BAL_ACC_TERM_MAX_FLOWS + 1][MAC_UTIL_FLOW_DB_MAX_FLOW_TYPES];
+
+
+/*****************************************************************************/
+/** Flow DB wrapper Functions */
+
+/** @todo in future with a new DB data structure, these wrapper functions would
+ * be migrated to call those DB apis.
+ */
+/*****************************************************************************/
+
+/**
+ * @brief Allocate a new flow 
+ *
+ * @return  flow_list_entry  pointer to a new flow entry
+ */
+flow_list_entry *_mac_util_db_flow_alloc (void)
+{
+    flow_list_entry *p_flow = NULL;
+
+    p_flow = bcmos_calloc(sizeof(flow_list_entry));
+    /* bcmos_calloc already initializes the memory to 0 */
+
+    return p_flow;
+}
+
+/**
+ * @brief Free a flow (free the memory or return it to free pool) 
+ *
+ * @param pon_if            pon interface id
+ * @param p_entry           pointer to a flow entry
+ *
+ * @returns bcmos_errno bcm errno
+ *
+ * @note it checks if the flow being freed is already removed from flow DB
+ */
+bcmos_errno _mac_util_db_flow_free (uint32_t pon_if, flow_list_entry *p_entry)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+
+    if (!IS_VALID_PON_IF(pon_if))
+    {
+        return BCM_ERR_PARM;
+    }
+
+    if (NULL == p_entry)
+    {
+        return BCM_ERR_PARM;
+    }
+
+    /* free the memory */
+    bcmos_free(p_entry);
+
+    return rc;
+}
+
+/**
+ * @brief Add an already allocated flow to flow DB 
+ *
+ * @param pon_if            pon interface id
+ * @param p_entry           pointer to a new flow entry
+ *
+ * @returns bcmos_errno bcm errno
+ *
+ * @todo in proper DB, it should check if the entry is already in the list or not
+ */
+bcmos_errno _mac_util_db_flow_add (uint32_t pon_if, flow_list_entry *p_entry)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+
+    if (!IS_VALID_PON_IF(pon_if))
+        return BCM_ERR_PARM;
+
+    if (!p_entry)
+        return BCM_ERR_PARM;
+
+    MAC_UTIL_FLOW_DB_ENTRY_SET(p_entry->bal_flow_key.flow_id, p_entry->bal_flow_key.flow_type, p_entry, rc);
+
+    return rc;
+}
+
+/**
+ * @brief Remove a flow entry from flow DB 
+ *
+ * @param pon_if            pon interface id
+ * @param p_entry           pointer to a flow entry
+ *
+ * @returns bcmos_errno bcm errno
+ *
+ * @todo this API will  be ported to different DB when we have one
+ */
+bcmos_errno _mac_util_db_flow_remove (uint32_t pon_if, flow_list_entry *p_entry)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+
+    if (!IS_VALID_PON_IF(pon_if))
+        return BCM_ERR_PARM;
+
+    if (!p_entry)
+        return BCM_ERR_PARM;
+
+    MAC_UTIL_FLOW_DB_ENTRY_SET(p_entry->bal_flow_key.flow_id, p_entry->bal_flow_key.flow_type, NULL, rc);
+
+    return rc;
+}
+
+/**
+ * @brief Lookup a flow based on a flow id and pon if
+ *
+ * @param pon_if                pon interface id
+ * @param p_flow_key            pointer to flow key
+ *
+ * @returns flow_list_entry     pointer a flow entry in list
+ */
+flow_list_entry *_mac_util_db_flow_get_w_flow_key (uint32_t pon_if, bcmbal_flow_key *p_flow_key)
+{
+    flow_list_entry *p_flow = NULL;
+
+    if (!IS_VALID_PON_IF(pon_if))
+    {
+        return NULL;
+    }
+
+    MAC_UTIL_FLOW_DB_ENTRY_GET(p_flow_key->flow_id, p_flow_key->flow_type, p_flow);
+
+    return p_flow;
+}
+
+/**
+ * @brief get next flow based on flow id and pon_if
+ *
+ * @param pon_if            pon interface id
+ * @param p_curr_entry   pointer to current flow entry
+ * @param pp_next_entry  double pointer to next flow entry
+ *
+ * @returns  flow_list_entry  pointer to next flow entry in DB
+ */
+flow_list_entry *_mac_util_db_flow_get_next_w_flow_key (uint32_t pon_if, flow_list_entry *p_curr_entry, flow_list_entry **pp_next_entry)
+{
+    flow_list_entry *p_tmp_entry = p_curr_entry;
+
+    if (!IS_VALID_PON_IF(pon_if))
+    {
+        BCM_LOG(ERROR,log_id_mac_util,"Invalid pon_if %d !", pon_if);
+        return NULL;
+    }
+
+    /** @note this while loop is to continue to iterate through the DB until an entry with matching pon If is found */
+    while (1)
+    {
+        if (NULL == p_tmp_entry)
+        {
+            /* get first flow */
+            MAC_UTIL_FLOW_DB_ENTRY_GET_FIRST(p_tmp_entry);
+            if (p_tmp_entry)
+            {
+                MAC_UTIL_FLOW_DB_ENTRY_GET_NEXT(p_tmp_entry, pp_next_entry);
+
+                if (p_tmp_entry && (pon_if == p_tmp_entry->if_id))
+                    return p_tmp_entry;
+            }
+            else
+                break;  /* at the end of list */
+        }
+        else
+        {
+            if (NULL != *pp_next_entry)
+            {
+                p_tmp_entry = *pp_next_entry;
+                MAC_UTIL_FLOW_DB_ENTRY_GET_NEXT(p_tmp_entry, pp_next_entry);
+
+                if (pon_if == p_tmp_entry->if_id)
+                    return p_tmp_entry;
+            }
+            else
+                break;  /* at the end of list */
+        }
+    }
+
+    return  NULL;
+}
+
+
+/**
+ * @brief get next flow based on sub terminal id
+ *
+ * @param pon_if            pon interface id
+ * @param sub_term_id       sub term id as the key
+ * @param p_curr_entry      pointer to current flow entry
+ * @param pp_next_entry     double pointer to next flow entry
+ *
+ * @returns  flow_list_entry  pointer to next flow entry  in DB
+ * 
+ */
+flow_list_entry *_mac_util_db_flow_get_next_w_sub_term_id (uint32_t pon_if, uint32_t sub_term_id, 
+													   flow_list_entry *p_curr_entry, flow_list_entry **pp_next_entry)
+{
+    flow_list_entry *p_tmp_entry = NULL;
+
+    if (!IS_VALID_PON_IF(pon_if))
+    {
+        BCM_LOG(ERROR,log_id_mac_util,"Invalid pon_if %d !", pon_if);
+        return NULL;
+    }
+
+    p_tmp_entry = _mac_util_db_flow_get_next_w_flow_key (pon_if, p_curr_entry, pp_next_entry);
+
+    while (NULL != p_tmp_entry)
+    {
+        if (sub_term_id == p_tmp_entry->sub_term_id)
+        {
+            /* found sub_term  match */
+            return p_tmp_entry;
+        }
+        /** @note passing tmp entry here because this is a getnext loop internal to this routine */
+        p_tmp_entry = _mac_util_db_flow_get_next_w_flow_key (pon_if, p_tmp_entry, pp_next_entry);
+    }
+
+    return  NULL;
+}
+
+/**
+ * @brief count of flows using a gem port and pon_if
+ *
+ * @param pon_if            pon interface id
+ * @param gem_port_id       gem port id as the key
+ * @param p_count           pointer to U32 to save count of flows using the same gem port
+ *
+ * @returns bcmos_errno bcm errno
+ *
+ */
+bcmos_errno _mac_util_db_flow_count_w_gem (uint32_t pon_if, uint16_t gem_port_id, uint32_t *p_count)
+{
+    uint32_t count = 0;
+    flow_list_entry *p_tmp_entry = NULL;
+    void *p_rsc_mgr_curr_entry = NULL;
+    void *p_rsc_mgr_next_entry = NULL;
+
+    BUG_ON(NULL == p_count);
+
+    if (!IS_VALID_PON_IF(pon_if))
+    {
+        BCM_LOG(ERROR,log_id_mac_util,"Invalid pon_if %d !", pon_if);
+        return BCM_ERR_PARM;
+    }
+
+    p_tmp_entry = _mac_util_db_flow_get_next_w_gem (pon_if, gem_port_id, &p_rsc_mgr_curr_entry, &p_rsc_mgr_next_entry);
+    while (NULL != p_tmp_entry)
+    {
+        count++;
+        p_tmp_entry = _mac_util_db_flow_get_next_w_gem (pon_if, gem_port_id, &p_rsc_mgr_curr_entry, &p_rsc_mgr_next_entry);
+    }
+
+    *p_count = count;
+    return BCM_ERR_OK;
+}
+
+
+/**
+ * @brief get next flow based on gem and pon if
+ *
+ * @param pon_if            pon interface id
+ * @param gem_port_id       gem port id as the key
+ * @param **pp_rsc_mgr_curr_entry   double pointer to current entry in Rsrc Mgr Database
+ * @param **pp_rsc_mgr_next_entry   double pointer to next entry in Rsrc Mgr Database
+ *
+ * @returns  flow_list_entry  pointer to next flow entry  in DB
+ *
+ * @note this queries resource mgr DB
+ */
+flow_list_entry *_mac_util_db_flow_get_next_w_gem (uint32_t pon_if, uint16_t gem_port_id, 
+                                                    void **pp_rsc_mgr_curr_entry, void **pp_rsc_mgr_next_entry)
+{
+    flow_inst *p_core_flow_entry = NULL;
+    flow_list_entry *p_flow_entry = NULL;
+
+    if (!IS_VALID_PON_IF(pon_if))
+    {
+        BCM_LOG(ERROR,log_id_mac_util,"Invalid pon_if %d !", pon_if);
+        return NULL;
+    }
+
+    p_core_flow_entry = rsc_mgr_gem_get_next_user_data (pon_if, gem_port_id, pp_rsc_mgr_curr_entry, pp_rsc_mgr_next_entry);
+
+    while (NULL != p_core_flow_entry)
+    {
+        p_flow_entry = _mac_util_db_flow_get_w_flow_key(pon_if, &p_core_flow_entry->current_flow_info.key);
+        if (p_flow_entry)
+        {
+            /* found gem match */
+            return p_flow_entry;
+        }
+        p_core_flow_entry = rsc_mgr_gem_get_next_user_data (pon_if, gem_port_id, pp_rsc_mgr_curr_entry, pp_rsc_mgr_next_entry);
+    }
+
+    return  NULL;
+}
+
+/**
+ * @brief count of flows using an alloc id and pon if
+ *
+ * @param pon_if            pon interface id
+ * @param alloc_id          alloc id as the key
+ * @param p_count           pointer to U32 that save the count of flows using the same alloc id
+ *
+ * @returns bcmos_errno bcm errno
+ */
+bcmos_errno _mac_util_db_flow_count_w_alloc_id (uint32_t pon_if, uint16_t alloc_id, uint32_t *p_count)
+{
+    uint32_t count = 0;
+    flow_list_entry *p_tmp_entry = NULL;
+    void *p_rsc_mgr_curr_entry = NULL;
+    void *p_rsc_mgr_next_entry = NULL;
+
+    BUG_ON( NULL == p_count);
+
+    if (!IS_VALID_PON_IF(pon_if))
+    {
+        BCM_LOG(ERROR,log_id_mac_util,"Invalid pon_if %d !", pon_if);
+        return BCM_ERR_PARM;
+    }
+
+    p_tmp_entry = _mac_util_db_flow_get_next_w_alloc_id (pon_if, alloc_id, &p_rsc_mgr_curr_entry, &p_rsc_mgr_next_entry);
+    while (NULL != p_tmp_entry)
+    {
+        count++;
+        p_tmp_entry = _mac_util_db_flow_get_next_w_alloc_id (pon_if, alloc_id, &p_rsc_mgr_curr_entry, &p_rsc_mgr_next_entry);
+    }
+
+    *p_count = count;
+    return BCM_ERR_OK;
+}
+
+/**
+ * @brief get next flow based on upstream alloc id and pon if
+ *
+ * @param pon_if            pon interface id
+ * @param alloc_id          alloc id as the key
+ * @param **pp_rsc_mgr_curr_entry   double pointer to current entry in Rsrc Mgr Database
+ * @param **pp_rsc_mgr_next_entry   double pointer to next entry in Rsrc Mgr Database
+ *
+ * @returns  flow_list_entry  pointer to next flow entry  in DB
+ *
+ * @note this queries resource mgr DB
+ */
+flow_list_entry *_mac_util_db_flow_get_next_w_alloc_id (uint32_t pon_if, uint16_t alloc_id,
+                                                        void **pp_rsc_mgr_curr_entry, void **pp_rsc_mgr_next_entry)
+{
+    flow_inst *p_core_flow_entry = NULL;
+    flow_list_entry *p_flow_entry = NULL;
+
+    if (!IS_VALID_PON_IF(pon_if))
+    {
+        BCM_LOG(ERROR,log_id_mac_util,"Invalid pon_if %d !", pon_if);
+        return NULL;
+    }
+
+    p_core_flow_entry = rsc_mgr_alloc_id_get_next_user_data(pon_if, alloc_id, pp_rsc_mgr_curr_entry, pp_rsc_mgr_next_entry);
+
+    while (NULL != p_core_flow_entry)
+    {
+        p_flow_entry = _mac_util_db_flow_get_w_flow_key(pon_if, &p_core_flow_entry->current_flow_info.key);
+        if (p_flow_entry)
+        {
+            /* found alloc id match */
+            return p_flow_entry;
+        }
+        p_core_flow_entry = rsc_mgr_alloc_id_get_next_user_data(pon_if, alloc_id, pp_rsc_mgr_curr_entry, pp_rsc_mgr_next_entry);
+    }
+
+    return  NULL;
+}
+
+/*@}*/
diff --git a/bal_release/src/core/util/mac/bal_mac_util_epon.c b/bal_release/src/core/util/mac/bal_mac_util_epon.c
new file mode 100644
index 0000000..cae8d26
--- /dev/null
+++ b/bal_release/src/core/util/mac/bal_mac_util_epon.c
@@ -0,0 +1,1067 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *
+ *  :>
+ *
+ *****************************************************************************/
+
+/**
+ * @file bal_mac_util_epon.c
+ *
+ * @brief mac util interfaces definition used by Bal Core for EPON
+ *
+ * This file expose the APIs to the core to configure the mac
+ * with regarding to the operation of access terminal, interface, subscriber terminal and flow.
+ *
+ * @addtogroup mac_util
+ */
+
+/*@{*/
+
+#include <bal_mac_util.h>
+#include <bal_mac_util_epon.h>
+
+#if BAL_EPON_EXCLUDE
+#include <bcmolt_user_appl_epon_oam.h>
+#include <bal_oam_util.h>
+#include <bcmolt_eon.h>
+
+static bcmos_errno mac_util_indication_handle_for_epon_link (bcmolt_devid device_id, bcmolt_msg *p_msg);
+static bcmos_errno mac_util_indication_handle_for_epon_ni (bcmolt_devid device_id, bcmolt_msg *p_msg);
+
+
+/** @brief array stores the list of EPON related auto indications from Maple to subscribe */
+static mac_util_ind_obj_and_handlers mac_util_epon_ind_handlers[] =
+{
+    {BCMOLT_OBJ_ID_EPON_LINK,       "BCMOLT_OBJ_ID_EPON_LINK",  mac_util_indication_handle_for_epon_link},
+    {BCMOLT_OBJ_ID_EPON_NI,         "BCMOLT_OBJ_ID_EPON_NI",    mac_util_indication_handle_for_epon_ni}
+};
+
+
+/* epon onu entry structure */
+typedef enum
+{
+    OAM_PROVISION_STATE_IDLE = 0,          /**< idle - did not start yet */
+    OAM_PROVISION_STATE_STARTED,            /**< started - waiting to configure traffic cb to send bal core flow up indication */
+    OAM_PROVISION_STATE_COMPLETED,  /**< completed successfully */
+    OAM_PROVISION_STATE_FAIL/**< failed to complete oam provision */
+} oam_provision_state;
+
+#define MAC_UTIL_MAX_WAITING_FLOWS_PER_MAC 16
+typedef struct epon_onu_list_entry epon_onu_list_entry;
+struct epon_onu_list_entry
+{
+    TAILQ_ENTRY(epon_onu_list_entry) next;
+    bcmbal_subscriber_terminal_key bal_onu_key;                   /* bal onu key */
+    bcmos_mac_address mac_address;
+    oam_provision_state oam_provision_state;
+    uint8_t waiting_flows_num;
+    bcmbal_flow_key flow_keys[MAC_UTIL_MAX_WAITING_FLOWS_PER_MAC];
+    uint32_t tunnel_id;
+};
+
+
+static TAILQ_HEAD(epon_onu_list_head_t, epon_onu_list_entry) epon_onu_list;
+
+
+/** @todo needs to be ported to the topology stub function */
+static bcmolt_devid maple_device_from_interface_get(uint16_t access_int_id)
+{
+    /* For now, all interfaces map to device 0 */
+    return (bcmolt_devid)0;
+
+}
+
+
+static void epon_onu_list_add(epon_onu_list_entry *epon_onu_entry);
+static epon_onu_list_entry *epon_onu_list_find_by_mac(const bcmos_mac_address *mac_address);
+static epon_onu_list_entry *epon_onu_list_find_by_key(bcmbal_subscriber_terminal_key *key);
+static void epon_onu_list_remove_by_key(bcmbal_subscriber_terminal_key *key);
+
+static void mac_util_configure_traffic_cb(void *context,
+    bcmolt_devid device_id,
+    bcmolt_epon_ni epon_ni,
+    const bcmos_mac_address *mac_address,
+    bcmos_errno result);
+
+static void mac_util_unconfigure_traffic_cb(void *context,
+    bcmolt_devid device_id,
+    bcmolt_epon_ni epon_ni,
+    const bcmos_mac_address *mac_address,
+    bcmos_errno result);
+
+
+#define _mac_addr_fmt_str "<%02x:%02x:%02x:%02x:%02x:%02x>"
+#define _mac_addr_data(mac) \
+    (mac).u8[0], \
+    (mac).u8[1], \
+    (mac).u8[2], \
+    (mac).u8[3], \
+    (mac).u8[4], \
+    (mac).u8[5]
+
+
+static void mac_util_oam_negotiation_cb(void *context, bcmolt_devid device_id, bcmolt_epon_ni epon_ni, const bcmos_mac_address *mac_address, bcmos_errno result)
+{
+
+    epon_onu_list_entry *p_onu_entry = context;
+    uint32_t logical_pon;
+    bcmos_errno rc;
+
+    do
+    {
+
+        rc = bcm_topo_pon_get_physical2logical(device_id, epon_ni, &logical_pon);
+        if (BCM_ERR_OK != rc)
+       {
+           BCM_LOG(ERROR, log_id_mac_util,
+                   "Failed to get logical if from physical if (device_id %d physical %d ) (%s)\n", device_id, epon_ni, bcmos_strerror(rc));
+           break;
+       }
+
+        BCM_LOG(INFO, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(epon_ni),
+                "device_id=%u, epon_ni=%u, mac_address=" _mac_addr_fmt_str " result='%s'\n",
+                device_id, epon_ni, _mac_addr_data(*mac_address), result == BCM_ERR_OK ? "success" : "fail");
+
+
+        mac_util_report_sub_term_event(logical_pon,
+                                       p_onu_entry->bal_onu_key.sub_term_id,
+                                       (bcmolt_serial_number *)NULL,
+                                       BAL_UTIL_OPER_SUB_TERM_ADD,
+                                       result,
+                                       result == BCM_ERR_OK ? BCMOLT_RESULT_SUCCESS : BCMOLT_RESULT_FAIL,
+                                       BCMOLT_ACTIVATION_FAIL_REASON_NONE,
+                                       result == BCM_ERR_OK ? p_onu_entry->tunnel_id : BCMBAL_INVALID_TUNNEL_ID);
+
+    }
+    while(0);
+
+}
+
+/**
+ * @brief get string for the indication object type for epon
+ */
+static char *mac_util_indication_get_obj_type_str_for_epon (bcmolt_obj_id obj_type)
+{
+    return _mac_util_get_obj_type_str_for_indications (obj_type, mac_util_epon_ind_handlers, BCM_SIZEOFARRAY(mac_util_epon_ind_handlers));
+}
+
+/**
+ * @brief all the maple indication handlers for epon
+ *
+ * @param device_id the maple device id generating the current indication
+ * @param p_msg pointer to the maple indication message
+ *
+ */
+bcmos_errno mac_util_handle_all_olt_ind_for_epon (bcmolt_devid device_id, bcmolt_msg *p_msg)
+{
+    int i = 0;
+
+    BCM_LOG(DEBUG, log_id_mac_util,
+        "mac_util_indication_cb received indication obj=%d/%s group=%d subgroup=%d\n",
+        p_msg->obj_type, mac_util_indication_get_obj_type_str_for_epon(p_msg->obj_type),
+        p_msg->group, p_msg->subgroup);
+
+    for (i=0; i < BCM_SIZEOFARRAY(mac_util_epon_ind_handlers); i++)
+    {
+        if (p_msg->obj_type == mac_util_epon_ind_handlers[i].obj_type)
+        {
+            return mac_util_epon_ind_handlers[i].ind_handler (device_id, p_msg);
+        }
+    }
+
+    /* log an error if unhandled */
+    return BCM_ERR_INTERNAL;
+}
+
+
+/**
+ * @brief Handler function for Maple auto indications for EPON Link
+ *
+ * @param device_id the maple device id generating the current indication
+ * @param p_msg pointer to the maple indication message
+ *
+ * @return bcmos_errno
+ */
+static bcmos_errno mac_util_indication_handle_for_epon_link (bcmolt_devid device_id, bcmolt_msg *p_msg)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    uint32_t logical_pon;
+
+    do
+    {
+        if (BCMOLT_EPON_LINK_AUTO_ID_MPCP_DISCOVERED == p_msg->subgroup)
+        {
+            epon_onu_list_entry *p_onu_entry;
+            bcmolt_epon_link_mpcp_discovered * p_ind = (bcmolt_epon_link_mpcp_discovered*)p_msg;
+
+            rc = bcm_topo_pon_get_physical2logical(device_id, p_ind->key.epon_ni, &logical_pon);
+            if (BCM_ERR_OK != rc)
+            {
+                BCM_LOG(ERROR, log_id_mac_util,
+                        "Failed to get logical if from physical if (device_id %d physical %d ) (%s)\n", device_id, p_ind->key.epon_ni, bcmos_strerror(rc));
+                break;
+            }
+
+            BCM_LOG(DEBUG, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(logical_pon),
+                    "llid indication received obj=%d group=%d subgroup=%d err=%d; "
+                    "link_status = %s (%d), llid = (0x%04x) tunnel_id = (0x%08x)\n",
+                    p_msg->obj_type, p_msg->group, p_msg->subgroup, p_msg->err,
+                    p_ind->data.link_info.link_status==BCMOLT_EPON_LINK_STATUS_DISCOVERED ? "Discovered" : "other",
+                    p_ind->data.link_info.link_status,
+                    p_ind->data.link_info.llid,
+                    p_ind->data.link_info.tunnel_id);
+
+
+
+            if(NULL == (p_onu_entry = epon_onu_list_find_by_mac(&(p_ind->key.mac_address))))
+            {
+                BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(logical_pon),
+                        "Failed to find epon onu related to received frame captured\n");
+                rc = BCM_ERR_INTERNAL;
+            }
+            else
+            {
+
+                p_onu_entry->tunnel_id = p_ind->data.link_info.tunnel_id;
+                bal_oam_start_oam_negotiation(device_id,
+                                              p_ind->key.epon_ni,
+                                              &p_ind->key.mac_address,
+                                              mac_util_oam_negotiation_cb,
+                                              p_onu_entry);
+            }
+        }
+    }
+    while(0);
+
+    return rc;
+}
+
+
+/**
+ * @brief Handler function for Maple auto indications for EPON NI
+ *
+ * @param device_id the maple device id generating the current indication
+ * @param p_msg pointer to the maple indication message
+ *
+ * @return bcmos_errno
+ */
+static bcmos_errno mac_util_indication_handle_for_epon_ni (bcmolt_devid device_id, bcmolt_msg *p_msg)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    uint32_t logical_pon;
+    do
+    {
+
+        if (BCMOLT_EPON_NI_AUTO_ID_STATE_CHANGE_COMPLETED == p_msg->subgroup)
+        {
+            bcmolt_epon_ni_state_change_completed * p_ind = (bcmolt_epon_ni_state_change_completed *)p_msg;
+            rc = bcm_topo_pon_get_physical2logical(device_id, p_ind->key.epon_ni, &logical_pon);
+            if (BCM_ERR_OK != rc)
+            {
+                BCM_LOG(ERROR, log_id_mac_util,
+                        "Failed to get logical if from physical if (device_id %d physical %d ) (%s)\n", device_id, p_ind->key.epon_ni, bcmos_strerror(rc));
+                break;
+            }
+
+            BCM_LOG(INFO, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(logical_pon), "Pon if %d is %s.\n", logical_pon,
+                    BCMOLT_EPON_NI_EN_STATE_ENABLED == p_ind->data.new_state ? "up" : "down");
+
+            mac_util_report_if_event(logical_pon, BCMBAL_INTF_TYPE_PON, p_msg->err,
+                BCMOLT_RESULT_SUCCESS, p_ind->data.new_state);
+        }
+        else
+        {
+            /* just get the pon key by typecasting to a dummy structure */
+            bcmolt_epon_ni_key *p_pon_key = &(((bcmolt_epon_ni_state_change_completed*)p_msg)->key);
+
+            rc = bcm_topo_pon_get_physical2logical(device_id, p_pon_key->epon_ni, &logical_pon);
+            if (BCM_ERR_OK != rc)
+            {
+                BCM_LOG(ERROR, log_id_mac_util,
+                        "Failed to get logical if from physical if (device_id %d physical %d ) (%s)\n", device_id, p_pon_key->epon_ni, bcmos_strerror(rc));
+                break;
+            }
+
+            BCM_LOG(DEBUG, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(logical_pon),
+                    "Unhandled message indication for obj Epon_NI group %d "
+                    "subgroup %d (Ignored)\n", p_msg->group, p_msg->subgroup);
+        }
+
+
+
+    }
+    while(0);
+    return rc;
+}
+
+
+/**
+ * @brief  Maple auto indication register for specific EPON based indications
+ *
+ * @param p_rx_cfg         handler config structure
+ * @param  device_id                         specific device id (for multiple devices support)
+ * @return bcmos_errno
+ */
+bcmos_errno mac_util_register_for_epon_auto_indications (struct bcmolt_rx_cfg *p_rx_cfg, bcmolt_devid device_id)
+{
+    return _mac_util_register_for_auto_indications (p_rx_cfg, mac_util_epon_ind_handlers, BCM_SIZEOFARRAY(mac_util_epon_ind_handlers), device_id);
+}
+#endif /* BAL_EPON_EXCLUDE */
+
+static bcmos_errno mac_util_epon_access_terminal_set(
+    acc_term_inst *p_acc_term,
+    bal_util_oper_acc_term op_type,
+    bcmolt_devid device_id,
+    bcmolt_system_mode system_mode,
+    bcmolt_nni_speed nni_speed)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcmolt_device_key key = {};
+    bcmolt_device_nni_speed nni_speed_cfg;
+    bcmolt_device_cfg dev_cfg;
+
+    rc = maple_access_terminal_set_common(p_acc_term, op_type, device_id);
+    if (rc != BCM_ERR_OK)
+        return rc;
+
+    BCMOLT_CFG_INIT(&dev_cfg, device, key);
+    BCMOLT_CFG_PROP_SET(&dev_cfg, device, system_mode, system_mode);
+
+    nni_speed_cfg.first_half = nni_speed;
+    nni_speed_cfg.second_half = nni_speed;
+    BCMOLT_CFG_PROP_SET(&dev_cfg, device, nni_speed, nni_speed_cfg);
+
+    /** @todo with multiple devices the mechanism to configure acces term  will change */
+    rc = bcmolt_cfg_set(device_id, &dev_cfg.hdr);
+    if (rc != BCM_ERR_OK)
+        return rc;
+
+    return maple_access_terminal_connect_common(device_id);
+}
+
+bcmos_errno mac_util_access_terminal_set_for_epon_8_tdma(
+    acc_term_inst *p_acc_term,
+    bal_util_oper_acc_term op_type,
+    bcmolt_devid device_id)
+{
+    return mac_util_epon_access_terminal_set(
+        p_acc_term,
+        op_type,
+        device_id,
+        BCMOLT_SYSTEM_MODE_EPON__8_X_COEXISTENCE_TDMA,
+        BCMOLT_NNI_SPEED_GBPS_12P5);
+}
+
+bcmos_errno mac_util_access_terminal_set_for_epon_4_tdma(
+    acc_term_inst *p_acc_term,
+    bal_util_oper_acc_term op_type,
+    bcmolt_devid device_id)
+{
+    return mac_util_epon_access_terminal_set(
+        p_acc_term,
+        op_type,
+        device_id,
+        BCMOLT_SYSTEM_MODE_EPON__4_X_COEXISTENCE_TDMA,
+        BCMOLT_NNI_SPEED_GBPS_12P5);
+}
+
+bcmos_errno mac_util_access_terminal_set_for_epon_16_1g(
+    acc_term_inst *p_acc_term,
+    bal_util_oper_acc_term op_type,
+    bcmolt_devid device_id)
+{
+    return mac_util_epon_access_terminal_set(
+        p_acc_term,
+        op_type,
+        device_id,
+        BCMOLT_SYSTEM_MODE_EPON__16_X,
+        BCMOLT_NNI_SPEED_GBPS_2P5);
+}
+
+bcmos_errno mac_util_access_terminal_set_for_epon_8_1g(
+    acc_term_inst *p_acc_term,
+    bal_util_oper_acc_term op_type,
+    bcmolt_devid device_id)
+{
+    return mac_util_epon_access_terminal_set(
+        p_acc_term,
+        op_type,
+        device_id,
+        BCMOLT_SYSTEM_MODE_EPON__8_X,
+        BCMOLT_NNI_SPEED_GBPS_2P5);
+}
+
+bcmos_errno mac_util_access_terminal_set_for_epon_4_1g(
+    acc_term_inst *p_acc_term,
+    bal_util_oper_acc_term op_type,
+    bcmolt_devid device_id)
+{
+    return mac_util_epon_access_terminal_set(
+        p_acc_term,
+        op_type,
+        device_id,
+        BCMOLT_SYSTEM_MODE_EPON__4_X,
+        BCMOLT_NNI_SPEED_GBPS_2P5);
+}
+
+bcmos_errno mac_util_access_terminal_set_for_epon_8_10g(
+    acc_term_inst *p_acc_term,
+    bal_util_oper_acc_term op_type,
+    bcmolt_devid device_id)
+{
+    return mac_util_epon_access_terminal_set(
+        p_acc_term,
+        op_type,
+        device_id,
+        BCMOLT_SYSTEM_MODE_EPON__8_X_10_G,
+        BCMOLT_NNI_SPEED_GBPS_12P5);
+}
+
+bcmos_errno mac_util_access_terminal_set_for_epon_4_10g(
+    acc_term_inst *p_acc_term,
+    bal_util_oper_acc_term op_type,
+    bcmolt_devid device_id)
+{
+    return mac_util_epon_access_terminal_set(
+        p_acc_term,
+        op_type,
+        device_id,
+        BCMOLT_SYSTEM_MODE_EPON__4_X_10_G,
+        BCMOLT_NNI_SPEED_GBPS_12P5);
+}
+
+bcmos_errno mac_util_access_terminal_set_for_epon_2_10g(
+    acc_term_inst *p_acc_term,
+    bal_util_oper_acc_term op_type,
+    bcmolt_devid device_id)
+{
+    return mac_util_epon_access_terminal_set(
+        p_acc_term,
+        op_type,
+        device_id,
+        BCMOLT_SYSTEM_MODE_EPON__2_X_10_G,
+        BCMOLT_NNI_SPEED_GBPS_12P5);
+}
+
+/**
+ * @brief Command Set setup routine for interface up to mac application for EPON
+ *
+ * This routine is called by if_fsm in the BAL core to initialize the command
+ * set to up the interface of the mac application. The cmdset actually
+ * consists of two commands, one is to send the if up request message to the mac
+ * App and handle the relevant response, the other is to handle the indication message
+ * from the mac APP when the operation is completed.
+ *
+ * @param p_interface_inst  Pointer to interface instance
+ * @param op_type           Operation type on access terminal/interface instance
+ *
+ * @return bcmos_errno
+ *
+ */
+bcmos_errno mac_util_interface_set_for_epon(acc_term_interface *p_interface_inst, bal_util_oper_if op_type)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcmbal_interface_key intf_key = p_interface_inst->api_req_int_obj_info.key;
+    bcmolt_devid device_id;
+    uint32_t physical_if_id;
+
+    /* get physical interface from logical interface */
+    rc = bcm_topo_pon_get_logical2physical(intf_key.intf_id, &device_id, &physical_if_id);
+    if (BCM_ERR_OK != rc)
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(intf_key.intf_id),
+                "Failed to get physical if from logical if (%s)\n", bcmos_strerror(rc));
+        return rc;
+    }
+
+    bcmolt_epon_ni_key key;
+    bcmolt_epon_ni_cfg cfg;
+    bcmolt_epon_ni_set_epon_ni_en_state oper;
+
+    key.epon_ni = physical_if_id;
+
+    BCMOLT_CFG_INIT(&cfg, epon_ni, key);
+
+    if (BAL_UTIL_OPER_IF_UP == op_type)
+    {
+        BCMOLT_CFG_PROP_SET(&cfg, epon_ni, registration_behavior, BCMOLT_REGISTRATION_BEHAVIOR_NOTIFY_UNKNOWN);
+
+        bcmolt_cfg_set(device_id, &cfg.hdr);
+        if (rc != BCM_ERR_OK)
+        {
+            BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(intf_key.intf_id),
+                    "Failed to %s (set) pon interface (%d) - %s, err_text=%s\n",
+                    (BAL_UTIL_OPER_IF_UP == op_type) ? "activate" : "deactivate",
+                    rc, bcmos_strerror(rc), cfg.hdr.hdr.err_text);
+            return rc;
+        }
+    }
+
+    BCMOLT_OPER_INIT(&oper, epon_ni, set_epon_ni_en_state, key);
+    BCMOLT_OPER_PROP_SET(&oper, epon_ni, set_epon_ni_en_state, new_state,
+        (BAL_UTIL_OPER_IF_UP == op_type ?
+        BCMOLT_EPON_NI_EN_STATE_ENABLED : BCMOLT_EPON_NI_EN_STATE_DISABLED));
+
+    rc = bcmolt_oper_submit(device_id, &oper.hdr);
+
+    if (rc != BCM_ERR_OK)
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(intf_key.intf_id),
+                "Failed to %s (submit) pon interface (%d) - %s, err_text=%s\n",
+                (BAL_UTIL_OPER_IF_UP == op_type) ? "activate" : "deactivate",
+                rc, bcmos_strerror(rc), oper.hdr.hdr.err_text);
+    }
+    else
+    {
+        BCM_LOG(DEBUG, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(intf_key.intf_id),
+                "Submitted INTERFACE-%s operation for IF %d\n",
+                (BAL_UTIL_OPER_IF_UP == op_type) ? "UP" : "DOWN", intf_key.intf_id);
+    }
+
+    return rc;
+}
+/*---------------------------------------------------------------------------------------------*/
+
+
+
+
+
+#if BAL_EPON_EXCLUDE
+/**
+ * @brief mac_util_validate_subscriber_terminal_info_for_epon
+ *
+ * This routine is used to validate all input attributes required for a sub term setting
+ * received from core for EPON
+ *
+ * @param p_sub_term_req       A pointer to a subscriber terminal object
+ *
+ * @return bcmos_errno
+ */
+/*****************************************************************************/
+bcmos_errno mac_util_validate_subscriber_terminal_info_for_epon(const bcmbal_subscriber_terminal_cfg *p_sub_term_req)
+{
+    if(BCMBAL_STATE_UP == p_sub_term_req->data.admin_state)
+    {
+        if (!BCMBAL_CFG_PROP_IS_SET(p_sub_term_req, subscriber_terminal, mac_address))
+        {
+            BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_sub_term_req->key.intf_id),
+                    "mac_address is a mandatory parameter for an epon subscriber terminal, and it is not set\n");
+            return BCM_ERR_MANDATORY_PARM_IS_MISSING;
+        }
+    }
+
+    return BCM_ERR_OK;
+}
+
+
+/**
+ * @brief Command Set setup routine for subscriber terminal connect to mac application for EPON
+ *
+ * This routine is called by sub_term_fsm in the BAL core to initialize the command
+ * set to connect the subscriber terminal of the mac application. The cmdset actually
+ * consists of two commands, one is to send the sub_term request message to the mac
+ * App and handle the relevant response, the other is to handle the indication message
+ * from the mac APP when the operation is completed.
+ *
+ * @param p_sub_term_inst   A pointer to a subscriber terminal instance
+ * @param op_type          Type of operation being performed on the subscriber terminal instance
+ * @param is_post_discovery This parameter is ignored for epon
+ *
+ * @return bcmos_errno
+ */
+bcmos_errno mac_util_subscriber_terminal_set_for_epon(sub_term_inst *p_sub_term_inst, bal_util_oper_sub_term op_type, bcmos_bool is_post_discovery)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+
+    bcmbal_subscriber_terminal_cfg *p_sub_term_req = &p_sub_term_inst->api_req_sub_term_info;
+
+
+    BCM_LOG(DEBUG, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_sub_term_req->key.intf_id),
+            "IN : %s pon_id = %d onu_id= %d "
+            "omci_gem_port = %d\n",
+            __FUNCTION__,
+            p_sub_term_req->key.intf_id,
+            p_sub_term_req->key.sub_term_id, p_sub_term_req->data.svc_port_id);
+
+    if ((BAL_UTIL_OPER_SUB_TERM_ADD != op_type)
+        && (BAL_UTIL_OPER_SUB_TERM_REMOVE != op_type)
+        && (BAL_UTIL_OPER_SUB_TERM_CLEAR != op_type))
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_sub_term_req->key.intf_id),
+                "Unsupported operation %d for sub_term %u\n",
+                op_type, p_sub_term_req->key.sub_term_id);
+        return BCM_ERR_NOT_SUPPORTED;
+    }
+
+    do
+    {
+        bcmolt_devid device_id;
+        uint32_t physical_if_id;
+
+        /* get physical interface from logical interface */
+        rc = bcm_topo_pon_get_logical2physical (p_sub_term_req->key.intf_id, &device_id, &physical_if_id);
+        if (BCM_ERR_OK != rc)
+        {
+            BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_sub_term_req->key.intf_id),
+                    "Failed to get physical if from logical if (%s)\n", bcmos_strerror(rc));
+            break;
+        }
+
+        epon_onu_list_entry * p_new_epon_onu_entry;
+        bcmolt_epon_ni_key key;
+        bcmolt_epon_ni_add_link oper;
+
+        key.epon_ni = physical_if_id;
+        BCMOLT_OPER_INIT(&oper, epon_ni, add_link, key);
+
+        if(BAL_UTIL_OPER_SUB_TERM_ADD == op_type)
+        {
+
+            BCMOLT_OPER_PROP_SET(&oper, epon_ni, add_link, mac_address, p_sub_term_req->data.mac_address);
+            BCMOLT_OPER_PROP_SET(&oper, epon_ni, add_link, rate, BCMOLT_EPON_LINK_RATE_TEN_TEN);
+            rc = bcmolt_oper_submit(device_id, &oper.hdr);
+
+            if (rc != BCM_ERR_OK)
+            {
+                BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_sub_term_req->key.intf_id),
+                        "Failed to register epon onu epon_ni = %d mac : "_mac_addr_fmt_str" rc = %d (%s), err_text=%s\n",
+                        key.epon_ni, _mac_addr_data(p_sub_term_req->data.mac_address), rc, bcmos_strerror(rc),
+                        oper.hdr.hdr.err_text);
+                break;
+            }
+            /* add the new epon onu to the epon onu list to follow indications and oam sending */
+            p_new_epon_onu_entry = bcmos_calloc(sizeof(epon_onu_list_entry));
+            if (NULL == p_new_epon_onu_entry)
+            {
+                BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_sub_term_req->key.intf_id),
+                        "Failed to allocate the epon onu entry\n");
+                rc = BCM_ERR_NOMEM;
+                break;
+            }
+
+            memcpy(&p_new_epon_onu_entry->bal_onu_key, &p_sub_term_req->key,
+                   sizeof(bcmbal_subscriber_terminal_key));
+            p_new_epon_onu_entry->mac_address = p_sub_term_req->data.mac_address;
+            p_new_epon_onu_entry->oam_provision_state = OAM_PROVISION_STATE_IDLE;
+            p_new_epon_onu_entry->waiting_flows_num = 0;
+
+            epon_onu_list_add(p_new_epon_onu_entry);
+        }
+        else
+        {
+            mac_util_report_sub_term_event(p_sub_term_req->key.intf_id,
+                                           p_sub_term_req->key.sub_term_id,
+                                           (bcmolt_serial_number *)NULL,
+                                           BAL_UTIL_OPER_SUB_TERM_REMOVE,
+                                           BCM_ERR_OK, BCMOLT_RESULT_SUCCESS,
+                                           MAC_UTIL_DEACTIVATION_FAIL_REASON_NONE, BCMBAL_INVALID_TUNNEL_ID);
+
+           epon_onu_list_remove_by_key(&p_sub_term_req->key);
+
+        }
+    } while (0);
+
+    BCM_LOG(DEBUG, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_sub_term_req->key.intf_id),
+            "OUT : going out of %s rc = %s (%d)\n",
+            __FUNCTION__,
+            bcmos_strerror(rc), rc);
+
+
+    return rc;
+}
+
+
+
+
+
+static bcmos_errno maple_us_sla_configure_epon(bcmbal_flow_cfg *flow_entry, bcmos_mac_address *mac)
+{
+    bcmolt_epon_link_key epon_link_key;
+    bcmolt_epon_link_cfg epon_link_cfg;
+    bcmolt_upstream_bandwidth_distribution us_bw_dist = {};
+
+    bcmolt_devid device_id;
+    uint32_t physical_if_id;
+    bcmos_errno rc = BCM_ERR_OK;
+
+    /* get physical interface from logical interface */
+    rc = bcm_topo_pon_get_logical2physical (flow_entry->data.access_int_id, &device_id, &physical_if_id);
+    if (BCM_ERR_OK != rc)
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(flow_entry->data.access_int_id),
+                    "Failed to get physical if from logical if (%s)\n", bcmos_strerror(rc));
+    }
+    else
+    {
+
+        epon_link_key.epon_ni = physical_if_id;
+        epon_link_key.mac_address = *mac;
+        BCMOLT_CFG_INIT(&epon_link_cfg, epon_link, epon_link_key);
+
+        us_bw_dist.polling_interval_us = BCMOLT_POLLING_INTERVAL_AUTOMATIC;
+        if (BCMBAL_ATTRIBUTE_PROP_IS_SET(&flow_entry->data.sla, sla, min_rate))
+        {
+            us_bw_dist.min_schedulershaper.bandwidth_Kbps = flow_entry->data.sla.min_rate;
+        }
+        if (BCMBAL_ATTRIBUTE_PROP_IS_SET(&flow_entry->data.sla, sla, max_rate))
+        {
+            us_bw_dist.max_schedulershaper.bandwidth_Kbps = flow_entry->data.sla.max_rate;
+        }
+        else
+        {
+            us_bw_dist.max_schedulershaper.bandwidth_Kbps = 10000000;
+        }
+        us_bw_dist.max_schedulershaper.priority = 7;
+
+        BCMOLT_CFG_PROP_SET(&epon_link_cfg, epon_link, upstream_bandwidth, us_bw_dist);
+        return bcmolt_cfg_set(device_id, &epon_link_cfg.hdr);
+    }
+
+    return rc;
+}
+
+
+
+
+
+
+/**
+ * @brief flow set for EPON
+ *
+ * @param p_flow_req    pointer to flow request structure from core
+ * @param op_type      ADD, REMOVE or CLEAR
+ * @param p_flow_core local DB flow context passed as a cookie
+ *
+ * @return errno    error
+ */
+bcmos_errno mac_util_flow_set_for_epon (bcmbal_flow_cfg *p_flow_req, bal_util_oper_flow op_type, flow_inst *p_flow_core)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+
+    epon_onu_list_entry *p_onu_entry;
+    bcmos_mac_address mac;
+    bcmbal_subscriber_terminal_key key;
+
+
+    key.intf_id = p_flow_req->data.access_int_id;
+    key.sub_term_id = p_flow_req->data.sub_term_id;
+
+    if(NULL != (p_onu_entry = epon_onu_list_find_by_key(&key)))
+    {
+            mac = p_onu_entry->mac_address;
+    }
+    else
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(key.intf_id),
+                "failed to configure flow, "
+                "subscriber terminal if=%d sub-term id = %d was not found - no such device\n",
+                p_flow_req->data.access_int_id, p_flow_req->data.sub_term_id);
+
+        return BCM_ERR_NOENT;
+    }
+
+
+
+    if (BAL_UTIL_OPER_FLOW_ADD == op_type)
+    {
+
+        BCM_LOG(DEBUG, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(key.intf_id), "add, context is %p\n", p_flow_context);
+
+        switch (p_onu_entry->oam_provision_state)
+        {
+            case OAM_PROVISION_STATE_IDLE:
+            {
+                p_onu_entry->flow_keys[p_onu_entry->waiting_flows_num++] = p_flow_req->key;
+
+                BCM_LOG(DEBUG, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(key.intf_id),
+                        "add p_onu_entry-> %p, waiting flows: %d context is %p\n",
+                        p_onu_entry, p_onu_entry->waiting_flows_num, p_flow_context);
+
+                rc = maple_us_sla_configure_epon(p_flow_req, &mac);
+                if (rc != BCM_ERR_OK)
+                {
+                    BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(key.intf_id),
+                            "Unable to configure EPON US SLA (%s)\n", bcmos_strerror(rc));
+
+                    break;
+                }
+
+                p_onu_entry->oam_provision_state = OAM_PROVISION_STATE_STARTED;
+
+                bal_oam_configure_traffic(maple_device_from_interface_get(p_flow_req->data.access_int_id),
+                                          p_flow_req->data.access_int_id,
+                                          &mac,
+                                          BCMOS_TRUE,
+                                          mac_util_configure_traffic_cb, p_flow_context);
+            }
+            break;
+
+
+            case OAM_PROVISION_STATE_STARTED:
+            {
+                if (p_onu_entry->waiting_flows_num < MAC_UTIL_MAX_WAITING_FLOWS_PER_MAC)
+                {
+                    p_onu_entry->flow_keys[p_onu_entry->waiting_flows_num++] = p_flow_req->key;
+                }
+                else
+                {
+                    BCM_LOG(INFO, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(key.intf_id),
+                            "failed to configure flow for that mac, "
+                            "too many flows already waiting for oam configuration\n");
+                    rc = BCM_ERR_INSUFFICIENT_LIST_MEM;
+                }
+            }
+            break;
+
+
+            case OAM_PROVISION_STATE_COMPLETED:
+            {
+                mac_util_report_flow_add_success(p_flow_req->key, p_flow_req->data.access_int_id);
+            }
+            break;
+
+
+            case OAM_PROVISION_STATE_FAIL:
+            default:
+            {
+                BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(key.intf_id),
+                        "failed to configure oam traffic for that mac,\n"); /* currently no failure indications */
+            }
+            break;
+        }
+    }
+    else /* REMOVE or CLEAR FLOW */
+    {
+
+        BCM_LOG(DEBUG, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(key.intf_id),
+                "delete p_onu_entry-> %p, waiting flows: %d, provisioned state is %d, context is %p\n",
+                p_onu_entry,
+                p_onu_entry->waiting_flows_num,
+                p_onu_entry->oam_provision_state,
+                p_flow_context);
+
+        switch (p_onu_entry->oam_provision_state)
+        {
+            case OAM_PROVISION_STATE_IDLE:
+            {
+                mac_util_report_flow_remove_success(p_flow_req->key, p_flow_req->data.access_int_id, op_type);
+            }
+            break;
+
+            case OAM_PROVISION_STATE_COMPLETED:
+            {
+                BCM_LOG(DEBUG, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(key.intf_id),
+                        "calling bal_oam_configure_traffic w/ \"Disable\" state\n");
+
+                bal_oam_configure_traffic(maple_device_from_interface_get(p_flow_req->data.access_int_id),
+                                          p_flow_req->data.access_int_id,
+                                          &mac,
+                                          BCMOS_FALSE,
+                                          mac_util_unconfigure_traffic_cb,
+                                          p_flow_context);
+            }
+            break;
+
+            case OAM_PROVISION_STATE_FAIL:
+            case OAM_PROVISION_STATE_STARTED:
+            default:
+            {
+                BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(key.intf_id),
+                        "failed to unconfigure oam traffic for that mac,\n"); /* currently no failure indications */
+            }
+            break;
+        }
+    }
+
+    return rc;
+}
+
+static void mac_util_configure_traffic_cb(void *context,
+    bcmolt_devid device_id,
+    bcmolt_epon_ni epon_ni,
+    const bcmos_mac_address *mac_address,
+    bcmos_errno result)
+{
+    epon_onu_list_entry *p_onu_entry;
+    int i;
+
+    BCM_LOG(INFO, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(epon_ni),
+        "configure device_id=%u, epon_ni=%u, mac_address=" _mac_addr_fmt_str " result='%s'\n",
+        device_id, epon_ni, _mac_addr_data(*mac_address), result == BCM_ERR_OK ? "success" : "fail");
+
+
+    if(NULL == (p_onu_entry = epon_onu_list_find_by_mac(mac_address)))
+    {
+        BCM_LOG(ERROR,  MAC_UTIL_GET_LOG_ID_FOR_PON_IF(epon_ni),
+                "FAIL - received configure traffic cb for mac that was not configured " _mac_addr_fmt_str "\n",
+                _mac_addr_data(*mac_address));
+        return;
+    }
+
+    if (OAM_PROVISION_STATE_STARTED != p_onu_entry->oam_provision_state)
+    {
+        BCM_LOG(ERROR,  MAC_UTIL_GET_LOG_ID_FOR_PON_IF(epon_ni),
+                "FAIL - received configure traffic cb for mac that is in the wrong state (%d)\n",
+                p_onu_entry->oam_provision_state);
+        return;
+    }
+
+    if (result == BCM_ERR_OK)
+    {
+        p_onu_entry->oam_provision_state = OAM_PROVISION_STATE_COMPLETED;
+
+        BCM_LOG(INFO,  MAC_UTIL_GET_LOG_ID_FOR_PON_IF(epon_ni), "Moved ONU to OAM COMPLETED state\n");
+
+        for (i=0; i<p_onu_entry->waiting_flows_num; i++)
+        {
+            mac_util_report_flow_add_success(p_onu_entry->flow_keys[i], epon_ni);
+        }
+    }
+    else
+    {
+        p_onu_entry->oam_provision_state = OAM_PROVISION_STATE_FAIL;
+    }
+
+    p_onu_entry->waiting_flows_num = 0; /* currently we dont send fail indication */
+}
+
+/** EPON specific traffic unconfigure; Not used for GPON mode */
+static void mac_util_unconfigure_traffic_cb(void *context,
+    bcmolt_devid device_id,
+    bcmolt_epon_ni epon_ni,
+    const bcmos_mac_address *mac_address,
+    bcmos_errno result)
+{
+    flow_inst *p_flow_core = (flow_inst *)(context);
+    epon_onu_list_entry *p_onu_entry;
+
+    BCM_LOG(INFO,  MAC_UTIL_GET_LOG_ID_FOR_PON_IF(epon_ni),
+            "unconfigure device_id=%u, epon_ni=%u, mac_address=" _mac_addr_fmt_str " result='%s'\n",
+            device_id,
+            epon_ni,
+            _mac_addr_data(*mac_address),
+            result == BCM_ERR_OK ? "success" : "fail");
+
+
+    /** @todo need to pass on the actual op type (REMOVE or CLEAR) */
+    mac_util_report_flow_remove_success(p_flow_core->current_flow_info.key, epon_ni, BAL_UTIL_OPER_FLOW_REMOVE);
+
+    if(NULL != (p_onu_entry = epon_onu_list_find_by_mac(mac_address)))
+    {
+        p_onu_entry->oam_provision_state = OAM_PROVISION_STATE_IDLE;
+    }
+}
+
+
+
+/**
+ * @brief used for epon oam message handling
+ *
+ * @param device_id   bcm dev id
+ * @param p_msg oam msg pointer
+ */
+void bal_proxy_rx_cb_for_epon (bcmolt_devid device_id, bcmolt_msg *p_msg)
+{
+    bcmolt_proxy_rx *proxy_rx = (bcmolt_proxy_rx *)p_msg;
+
+    bcmolt_user_appl_eon_process_rx(device_id, proxy_rx);
+    bcmolt_user_appl_epon_oam_handle_rx(device_id, proxy_rx, bal_oam_proxy_rx_cb);
+
+    /** @note the free of p_msg is done in caller function */
+}
+
+
+/**
+ * @brief init for epon oam and eon
+ *
+ */
+static void mac_util_init_oam_for_epon (void)
+{
+    bcmolt_user_appl_epon_oam_init();
+    bcmolt_user_appl_eon_init();
+}
+
+
+
+
+static void epon_onu_list_add(epon_onu_list_entry *epon_onu_entry)
+{
+    TAILQ_INSERT_HEAD(&epon_onu_list, epon_onu_entry, next);
+    return;
+}
+
+static void epon_onu_list_remove_by_key(bcmbal_subscriber_terminal_key *key)
+{
+    epon_onu_list_entry *p_onu_entry = NULL;
+
+    if(NULL != (p_onu_entry = epon_onu_list_find_by_key(key)))
+    {
+        TAILQ_REMOVE(&epon_onu_list, p_onu_entry, next);
+        bcmos_free(p_onu_entry);
+    }
+
+    return;
+}
+
+static epon_onu_list_entry *epon_onu_list_find_by_mac(const bcmos_mac_address *mac_address)
+{
+    epon_onu_list_entry *p_onu_entry = NULL;
+    epon_onu_list_entry *current_onu_entry;
+
+    TAILQ_FOREACH(current_onu_entry, &epon_onu_list, next)
+    {
+        if (memcmp(&current_onu_entry->mac_address, mac_address, sizeof(bcmos_mac_address))==0)
+        {
+            p_onu_entry = current_onu_entry;
+            break;
+        }
+    }
+
+    return p_onu_entry;
+}
+
+static epon_onu_list_entry *epon_onu_list_find_by_key(bcmbal_subscriber_terminal_key *key)
+{
+    epon_onu_list_entry *p_onu_entry = NULL;
+    epon_onu_list_entry *current_onu_entry;
+
+    TAILQ_FOREACH(current_onu_entry, &epon_onu_list, next)
+    {
+        if ((current_onu_entry->bal_onu_key.intf_id == key->intf_id) &&
+            (current_onu_entry->bal_onu_key.sub_term_id == key->sub_term_id))
+        {
+            p_onu_entry = current_onu_entry;
+            break;
+        }
+    }
+
+    return p_onu_entry;
+}
+#endif /* BAL_EPON_EXCLUDE */
+
+/*@}*/
diff --git a/bal_release/src/core/util/mac/bal_mac_util_epon.h b/bal_release/src/core/util/mac/bal_mac_util_epon.h
new file mode 100644
index 0000000..68da0df
--- /dev/null
+++ b/bal_release/src/core/util/mac/bal_mac_util_epon.h
@@ -0,0 +1,109 @@
+/******************************************************************************

+ *

+ *  <:copyright-BRCM:2016:DUAL/GPL:standard

+ *

+ *     Copyright (c) 2016 Broadcom

+ *     All Rights Reserved

+ *

+ *  Unless you and Broadcom execute a separate written software license

+ *  agreement governing use of this software, this software is licensed

+ *  to you under the terms of the GNU General Public License version 2

+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,

+ *  with the following added to such license:

+ *

+ *     As a special exception, the copyright holders of this software give

+ *     you permission to link this software with independent modules, and

+ *     to copy and distribute the resulting executable under terms of your

+ *     choice, provided that you also meet, for each linked independent

+ *     module, the terms and conditions of the license of that module.

+ *     An independent module is a module which is not derived from this

+ *     software.  The special exception does not apply to any modifications

+ *     of the software.

+ *

+ *  Not withstanding the above, under no circumstances may you combine

+ *  this software in any way with any other Broadcom software provided

+ *  under a license other than the GPL, without Broadcom's express prior

+ *  written consent.

+ *

+ *  :>

+ *

+ *****************************************************************************/

+

+/**

+ * @file bal_mac_util_epon.h

+ *

+ * @brief mac util interfaces definition used by Bal Core, for EPON

+ *

+ * This file expose the APIs to the core to configure the mac

+ * with regarding to the operation of access terminal, interface, subscriber terminal and flow.

+ *

+ * @addtogroup mac_util

+ */

+

+/*@{*/

+

+#include <bal_mac_util.h>

+

+/* Temporarily exclude some code to get this module compiling again - we should get rid of this ASAP */

+#define BAL_EPON_EXCLUDE 0

+

+#if BAL_EPON_EXCLUDE

+bcmos_errno mac_util_handle_all_olt_ind_for_epon (bcmolt_devid device_id, bcmolt_msg *p_msg);

+

+bcmos_errno mac_util_register_for_epon_auto_indications(struct bcmolt_rx_cfg *p_rx_cfg, bcmolt_devid device_id);

+#endif /* BAL_EPON_EXCLUDE */

+

+bcmos_errno mac_util_access_terminal_set_for_epon_8_tdma(

+    acc_term_inst *p_acc_term,

+    bal_util_oper_acc_term op_type,

+    bcmolt_devid device_id);

+

+bcmos_errno mac_util_access_terminal_set_for_epon_4_tdma(

+    acc_term_inst *p_acc_term,

+    bal_util_oper_acc_term op_type,

+    bcmolt_devid device_id);

+

+bcmos_errno mac_util_access_terminal_set_for_epon_16_1g(

+    acc_term_inst *p_acc_term,

+    bal_util_oper_acc_term op_type,

+    bcmolt_devid device_id);

+

+bcmos_errno mac_util_access_terminal_set_for_epon_8_1g(

+    acc_term_inst *p_acc_term,

+    bal_util_oper_acc_term op_type,

+    bcmolt_devid device_id);

+

+bcmos_errno mac_util_access_terminal_set_for_epon_4_1g(

+    acc_term_inst *p_acc_term,

+    bal_util_oper_acc_term op_type,

+    bcmolt_devid device_id);

+

+bcmos_errno mac_util_access_terminal_set_for_epon_8_10g(

+    acc_term_inst *p_acc_term,

+    bal_util_oper_acc_term op_type,

+    bcmolt_devid device_id);

+

+bcmos_errno mac_util_access_terminal_set_for_epon_4_10g(

+    acc_term_inst *p_acc_term,

+    bal_util_oper_acc_term op_type,

+    bcmolt_devid device_id);

+

+bcmos_errno mac_util_access_terminal_set_for_epon_2_10g(

+    acc_term_inst *p_acc_term,

+    bal_util_oper_acc_term op_type,

+    bcmolt_devid device_id);

+

+bcmos_errno mac_util_interface_set_for_epon(acc_term_interface *p_interface_inst, bal_util_oper_if op_type);

+

+#if BAL_EPON_EXCLUDE

+bcmos_errno mac_util_validate_subscriber_terminal_info_for_epon(const bcmbal_subscriber_terminal_cfg *p_sub_term_req);

+

+bcmos_errno mac_util_subscriber_terminal_set_for_epon(sub_term_inst *p_sub_term_inst, bal_util_oper_sub_term op_type, bcmos_bool is_post_discovery);

+

+bcmos_errno mac_util_flow_set_for_epon (bcmbal_flow_cfg *p_flow_req, bal_util_oper_flow op_type, flow_inst *p_flow_core);

+

+void bal_proxy_rx_cb_for_epon (bcmolt_devid device_id, bcmolt_msg *p_msg);

+#endif /* BAL_EPON_EXCLUDE */

+

+/*@}*/

+

diff --git a/bal_release/src/core/util/mac/bal_mac_util_gpon.c b/bal_release/src/core/util/mac/bal_mac_util_gpon.c
new file mode 100644
index 0000000..b08efd6
--- /dev/null
+++ b/bal_release/src/core/util/mac/bal_mac_util_gpon.c
@@ -0,0 +1,1961 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file bal_mac_util_gpon.c
+ *
+ * @brief mac util interfaces definition used by Bal Core, for GPON
+ *
+ * This file expose the APIs to the core to configure the mac 
+ * with regarding to the operation of access terminal, interface, subscriber terminal and flow.
+ *
+ * @addtogroup mac_util
+ */
+
+/*@{*/
+
+#include <bal_mac_util.h>
+#include <bal_mac_util_common_itu_pon.h>
+
+static bcmos_errno mac_util_indication_handle_for_gpon_ni (bcmolt_devid device_id, bcmolt_msg *p_msg);
+static bcmos_errno mac_util_indication_handle_for_gpon_onu (bcmolt_devid device_id, bcmolt_msg *p_msg);
+static bcmos_errno mac_util_indication_handle_for_gpon_alloc_id (bcmolt_devid device_id, bcmolt_msg *p_msg);
+static bcmos_errno mac_util_indication_handle_for_gpon_gem_port (bcmolt_devid device_id, bcmolt_msg *p_msg);
+
+/** @brief array stores the list of GPON related auto indications from Maple to subscribe */
+static mac_util_ind_obj_and_handlers mac_util_gpon_ind_handlers[] =
+{
+    {BCMOLT_OBJ_ID_GPON_NI,         "BCMOLT_OBJ_ID_GPON_NI",       mac_util_indication_handle_for_gpon_ni},
+    {BCMOLT_OBJ_ID_GPON_ONU,        "BCMOLT_OBJ_ID_GPON_ONU",      mac_util_indication_handle_for_gpon_onu},
+    {BCMOLT_OBJ_ID_GPON_ALLOC,      "BCMOLT_OBJ_ID_GPON_ALLOC",    mac_util_indication_handle_for_gpon_alloc_id},
+    {BCMOLT_OBJ_ID_GPON_GEM_PORT,   "BCMOLT_OBJ_ID_GPON_GEM_PORT", mac_util_indication_handle_for_gpon_gem_port}
+};
+
+
+/**
+ * @brief Map bal GPON transceiver type to bcm68620 transceiver type
+ */
+static bcmolt_trx_type mac_gpon_bal_trx_type2bcm68620_trx_type(bcmbal_trx_type bal_trx_type, bcmbal_intf_id intf_id)
+{
+    bcmolt_trx_type trx_type = BCMOLT_TRX_TYPE__NUM_OF;
+
+    switch (bal_trx_type)
+    {
+    case BCMBAL_TRX_TYPE_GPON_SPS_43_48:
+        trx_type = BCMOLT_TRX_TYPE_SPS_43_48_H_HP_CDE_SD_2013;
+        break;
+    case BCMBAL_TRX_TYPE_GPON_SPS_SOG_4321:
+        trx_type = BCMOLT_TRX_TYPE_SOG_4321_PSGB;
+        break;
+    case BCMBAL_TRX_TYPE_GPON_LTE_3680_M:
+        trx_type = BCMOLT_TRX_TYPE_LTE_3680_M;
+        break;
+    case BCMBAL_TRX_TYPE_GPON_SOURCE_PHOTONICS:
+        trx_type = BCMOLT_TRX_TYPE_SOURCE_PHOTONICS;
+        break;
+    case BCMBAL_TRX_TYPE_GPON_LTE_3680_P:
+        trx_type = BCMOLT_TRX_TYPE_LTE_3680_P_TYPE_C_PLUS;
+        break;
+    default:
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(intf_id), "Invalid trx_type %d\n", bal_trx_type);
+    }
+    return trx_type;
+}
+
+
+
+
+/**
+ * @brief all the maple indication handlers for gpon
+ *
+ * @param device_id the maple device id generating the current indication
+ * @param p_msg pointer to the maple indication message
+ *
+ */ 
+bcmos_errno mac_util_handle_all_olt_ind_for_gpon (bcmolt_devid device_id, bcmolt_msg *p_msg)
+{
+    BCM_LOG(DEBUG, log_id_mac_util,
+        "mac_util_indication_cb received indication obj=%d/%s group=%d subgroup=%d\n",
+        p_msg->obj_type, mac_util_indication_get_obj_type_str(p_msg->obj_type, mac_util_gpon_ind_handlers,  BCM_SIZEOFARRAY(mac_util_gpon_ind_handlers)),
+        p_msg->group, p_msg->subgroup);
+
+    return mac_util_handle_indication(device_id, p_msg, mac_util_gpon_ind_handlers, BCM_SIZEOFARRAY(mac_util_gpon_ind_handlers));
+}
+
+/**
+ * @brief Handler function for Maple auto indications for GPON NI
+ *
+ * @param device_id the maple device id generating the current indication
+ * @param p_msg pointer to the maple indication message
+ *
+ * @return bcmos_errno
+ */
+static bcmos_errno mac_util_indication_handle_for_gpon_ni (bcmolt_devid device_id, bcmolt_msg *p_msg)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+	uint32_t logical_pon;
+
+    do
+   	{
+
+        /* PON activation */
+        if (BCMOLT_GPON_NI_AUTO_ID_STATE_CHANGE_COMPLETED == p_msg->subgroup)
+        {
+            bcmolt_gpon_ni_state_change_completed * p_ind = (bcmolt_gpon_ni_state_change_completed*)p_msg;
+    
+		    rc = bcm_topo_pon_get_physical2logical(device_id, p_ind->key.pon_ni, &logical_pon);				
+    		if (BCM_ERR_OK != rc)
+		    {
+			    BCM_LOG(ERROR, log_id_mac_util,
+					    "Failed to get logical if from physical if (device_id %d physical %d ) (%s)\n", device_id, p_ind->key.pon_ni, bcmos_strerror(rc));
+			    break;
+		    }
+    		
+            BCM_LOG(INFO, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(logical_pon), "Pon if %d is %s.\n", logical_pon,
+                BCMOLT_PON_STATE_ACTIVE_WORKING == p_ind->data.new_state ? "up" : "down");
+    
+            /* if we got something from MAC HW, then it has to be PON interface */
+            mac_util_report_if_event(logical_pon, BCMBAL_INTF_TYPE_PON, p_msg->err,
+                p_ind->data.result, p_ind->data.new_state);
+
+        }
+        else if(BCMOLT_GPON_NI_AUTO_CFG_ID_ONU_DISCOVERED == p_msg->subgroup)
+        {
+            bcmolt_gpon_ni_onu_discovered *p_ind =
+                (bcmolt_gpon_ni_onu_discovered *)p_msg;
+    
+		    rc = bcm_topo_pon_get_physical2logical(device_id, p_ind->key.pon_ni, &logical_pon);				
+    		if (BCM_ERR_OK != rc)
+		    {
+			    BCM_LOG(ERROR, log_id_mac_util,
+					    "Failed to get logical if from physical if (device_id %d physical %d ) (%s)\n", device_id, p_ind->key.pon_ni, bcmos_strerror(rc));
+			    break;
+		    }
+    		
+            BCM_LOG(DEBUG, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(logical_pon),
+                    "Pon if %d (ONUID:%d) found ONU serial number "
+                    "%c%c%c%c%d%d%d%d%d%d%d%d\n",
+                    logical_pon,
+                    p_ind->data.onu_id,
+                    p_ind->data.serial_number.vendor_id[0],
+                    p_ind->data.serial_number.vendor_id[1],
+                    p_ind->data.serial_number.vendor_id[2],
+                    p_ind->data.serial_number.vendor_id[3],
+                    p_ind->data.serial_number.vendor_specific[0]>>4 & 0x0f,
+                    p_ind->data.serial_number.vendor_specific[0] & 0x0f,
+                    p_ind->data.serial_number.vendor_specific[1]>>4 & 0x0f,
+                    p_ind->data.serial_number.vendor_specific[1] & 0x0f,
+                    p_ind->data.serial_number.vendor_specific[2]>>4 & 0x0f,
+                    p_ind->data.serial_number.vendor_specific[2] & 0x0f,
+                    p_ind->data.serial_number.vendor_specific[3]>>4 & 0x0f,
+                    p_ind->data.serial_number.vendor_specific[3] & 0x0f
+                    );
+    
+            bcm_topo_pon_get_physical2logical(device_id, p_ind->key.pon_ni, &logical_pon);
+            mac_util_report_sub_term_event(logical_pon,
+                                           p_ind->data.onu_id,
+                                           &p_ind->data.serial_number,
+                                           BAL_UTIL_OPER_SUB_TERM_DISCOVERY,
+                                           p_msg->err, BCMOLT_RESULT_SUCCESS, 
+                                           BCMOLT_ACTIVATION_FAIL_REASON_NONE, BCMBAL_INVALID_TUNNEL_ID);
+        }
+        else
+        {
+            /* just get the pon key by typecasting to a dummy structure */
+            bcmolt_gpon_ni_key *p_pon_key = &(((bcmolt_gpon_ni_state_change_completed*)p_msg)->key);
+    
+		    rc = bcm_topo_pon_get_physical2logical(device_id, p_pon_key->pon_ni, &logical_pon);				
+    		if (BCM_ERR_OK != rc)
+		    {
+			    BCM_LOG(ERROR, log_id_mac_util,
+					    "Failed to get logical if from physical if (device_id %d physical %d ) (%s)\n", device_id, p_pon_key->pon_ni, bcmos_strerror(rc));
+			    break;
+		    }
+    
+            BCM_LOG(WARNING, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(logical_pon),
+                "Unhandled message indication for obj Gpon_NI group %d "
+                "subgroup %d (Ignored)\n", p_msg->group, p_msg->subgroup);
+        }
+       	
+   	}
+	while(0);
+    return rc;
+}
+
+
+
+/**
+ * @brief Handler function for Maple auto indications for GPON ONU
+ *
+ * @param device_id the maple device id generating the current indication
+ * @param p_msg pointer to the maple indication message
+ *
+ * @return bcmos_errno
+ */
+static bcmos_errno mac_util_indication_handle_for_gpon_onu (bcmolt_devid device_id, bcmolt_msg *p_msg)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+	uint32_t logical_pon;
+
+	/* just get the pon key by typecasting to a dummy structure */
+	bcmolt_gpon_onu_key *p_gpon_onu_key = &(((bcmolt_gpon_onu_onu_activation_completed*)p_msg)->key);
+
+    do
+    {		
+        if (BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_ACTIVATION_COMPLETED == p_msg->subgroup)
+	    {
+		    bcmolt_gpon_onu_onu_activation_completed *p_ind = (bcmolt_gpon_onu_onu_activation_completed*) p_msg;
+    	
+		    rc = bcm_topo_pon_get_physical2logical(device_id, p_ind->key.pon_ni, &logical_pon);				
+    		if (BCM_ERR_OK != rc)
+		    {
+			    BCM_LOG(ERROR, log_id_mac_util,
+					    "Failed to get logical if from physical if (device_id %d physical %d ) (%s)\n", device_id, p_ind->key.pon_ni, bcmos_strerror(rc));
+			    break;
+		    }
+    	
+		    BCM_LOG(INFO, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_ind->key.pon_ni),
+				    "sub_term %d (PON%d) activation indication (%s)\n",
+    				p_ind->key.onu_id,
+				    p_ind->key.pon_ni,
+				     bcmos_strerror(p_msg->err));
+    
+            mac_util_report_sub_term_event(logical_pon,
+                p_ind->key.onu_id,
+                (bcmolt_serial_number *)NULL,
+                BAL_UTIL_OPER_SUB_TERM_ADD,
+                p_msg->err, p_ind->data.status,
+                p_ind->data.fail_reason, BCMBAL_INVALID_TUNNEL_ID);
+
+	    }
+    	else if(BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_DEACTIVATION_COMPLETED == p_msg->subgroup)
+	    {
+		    bcmolt_gpon_onu_onu_deactivation_completed *p_ind = (bcmolt_gpon_onu_onu_deactivation_completed*) p_msg;
+    	
+		    rc = bcm_topo_pon_get_physical2logical(device_id, p_ind->key.pon_ni, &logical_pon);				
+    		if (BCM_ERR_OK != rc)
+		    {
+			    BCM_LOG(ERROR, log_id_mac_util,
+					    "Failed to get logical if from physical if (device_id %d physical %d ) (%s)\n", device_id, p_ind->key.pon_ni, bcmos_strerror(rc));
+			    break;
+		    }
+    	
+		    BCM_LOG(INFO, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(logical_pon),
+				    "sub_term %d (PON%d) deactivation indication (%s)\n",
+    				p_ind->key.onu_id,
+				    logical_pon,
+    				bcmos_strerror(p_msg->err));
+            mac_util_report_sub_term_event(logical_pon,
+                p_ind->key.onu_id,
+                (bcmolt_serial_number *)NULL,
+                BAL_UTIL_OPER_SUB_TERM_REMOVE,
+                p_msg->err, p_ind->data.status,
+                MAC_UTIL_DEACTIVATION_FAIL_REASON_NONE, BCMBAL_INVALID_TUNNEL_ID);
+	     }
+	    else
+    	{	    
+		    rc = bcm_topo_pon_get_physical2logical(device_id, p_gpon_onu_key->pon_ni, &logical_pon);				
+    		if (BCM_ERR_OK != rc)
+		    {
+			    BCM_LOG(ERROR, log_id_mac_util,
+					    "Failed to get logical if from physical if (device_id %d physical %d ) (%s)\n", device_id, p_gpon_onu_key->pon_ni, bcmos_strerror(rc));
+			    break;
+		    }
+    	
+		    BCM_LOG(DEBUG, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(logical_pon),
+				    "Unhandled message indication for obj GPON_ONU group %d "
+    				"subgroup %d (Ignored)\n", p_msg->group, p_msg->subgroup);
+			break;
+	    }
+
+		rc = mac_util_update_flows_w_sub_term_update(logical_pon, p_gpon_onu_key->onu_id, maple_gpon_mac_check_gem_port_id, maple_gpon_mac_get_alloc_id_config);
+		if (BCM_ERR_OK != rc)
+		{
+			BCM_LOG(ERROR, log_id_mac_util,
+					"Failed to update related flows pon_id = %d onu_id = %d (%s)\n", logical_pon, p_gpon_onu_key->onu_id, bcmos_strerror(rc));
+			break;
+		}
+        
+   	}
+    while(0);
+    return rc;
+}
+
+
+/**
+ * @brief Handler function for Maple auto indications for GPON Alloc Id
+ *
+ * @param device_id the maple device id generating the current indication
+ * @param p_msg pointer to the maple indication message
+ *
+ * @return bcmos_errno
+ */
+static bcmos_errno mac_util_indication_handle_for_gpon_alloc_id (bcmolt_devid device_id, bcmolt_msg *p_msg)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    uint32_t logical_pon;
+    tm_sched_inst* p_tm_sched_inst = NULL;	
+    do
+    {		
+        if (BCMOLT_GPON_ALLOC_AUTO_CFG_ID_CONFIGURATION_COMPLETED == p_msg->subgroup)
+        {
+            bcmolt_gpon_alloc_configuration_completed *p_ind = (bcmolt_gpon_alloc_configuration_completed*) p_msg;
+            
+            rc = bcm_topo_pon_get_physical2logical(device_id, p_ind->key.pon_ni, &logical_pon);
+            if (BCM_ERR_OK != rc)
+            {
+                BCM_LOG(ERROR, log_id_mac_util,
+                            "Failed to get logical if from physical if (device_id %d physical %d ) (%s)\n", device_id, p_ind->key.pon_ni, bcmos_strerror(rc));
+                break;
+            }
+            
+            /* Find tn_mode inst owned by that alloc_id and ni */
+            p_tm_sched_inst =  tm_sched_find_agg_port_node(logical_pon, p_ind->key.alloc_id);
+            if (NULL == p_tm_sched_inst )
+            {
+                BCM_LOG(ERROR, log_id_mac_util,
+                            "Failed to find tm sched owned by that agg port (intf %d id %d)\n", logical_pon,p_ind->key.alloc_id);
+                rc = BCM_ERR_NOENT;
+                break;            
+            }
+            /*the tm owned by that alloc found, update it with the ind*/
+            mac_util_report_tm_sched_set_indication(p_tm_sched_inst->req_tm_sched_info.key ,p_msg->err, p_ind->data.status);
+        }
+        else
+        {
+            /* just get the pon key by typecasting to a dummy structure */
+            bcmolt_gpon_alloc_key *p_pon_key = &(((bcmolt_gpon_alloc_configuration_completed*)p_msg)->key);
+            
+            rc = bcm_topo_pon_get_physical2logical(device_id, p_pon_key->pon_ni, &logical_pon);
+            if (BCM_ERR_OK != rc)
+            {
+                BCM_LOG(ERROR, log_id_mac_util,
+                        "Failed to get logical if from physical if (device_id %d physical %d ) (%s)\n", device_id, p_pon_key->pon_ni, bcmos_strerror(rc));
+                break;
+            }
+            BCM_LOG(DEBUG, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(logical_pon),
+                    "Unhandled message indication for obj GPON_ALLOC group %d "
+                    "subgroup %d (Ignored)\n", p_msg->group, p_msg->subgroup);
+        }
+    }while (0);
+    return rc;
+}
+	
+
+/**
+ * @brief Handler function for Maple auto indications for GPON GEM Port
+ *
+ * @param device_id the maple device id generating the current indication
+ * @param p_msg pointer to the maple indication message
+ *
+ * @return bcmos_errno
+ */
+static bcmos_errno mac_util_indication_handle_for_gpon_gem_port (bcmolt_devid device_id, bcmolt_msg *p_msg)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+	uint32_t logical_pon;
+    flow_list_entry *p_current_entry = NULL;
+    void *p_rsc_mgr_curr_entry = NULL;
+    void *p_rsc_mgr_next_entry = NULL;
+	
+    do
+   	{
+
+        if (BCMOLT_GPON_GEM_PORT_AUTO_CFG_ID_CONFIGURATION_COMPLETED == p_msg->subgroup)
+        {
+            bcmolt_gpon_gem_port_configuration_completed *p_ind =
+                (bcmolt_gpon_gem_port_configuration_completed *) p_msg;
+    
+
+		    rc = bcm_topo_pon_get_physical2logical(device_id, p_ind->key.pon_ni, &logical_pon);				
+    		if (BCM_ERR_OK != rc)
+		    {
+			    BCM_LOG(ERROR, log_id_mac_util,
+					    "Failed to get logical if from physical if (device_id %d physical %d ) (%s)\n", device_id, p_ind->key.pon_ni, bcmos_strerror(rc));
+			    break;
+		    }
+    
+            /* Find all entries in flows list matching the gem port id and pon ni */
+            /* use safe walk here because an entry can be removed from list during the walk */
+            /* get first */
+            p_current_entry = _mac_util_db_flow_get_next_w_gem (logical_pon, p_ind->key.gem_port_id, &p_rsc_mgr_curr_entry, &p_rsc_mgr_next_entry);
+            while (NULL != p_current_entry)
+            {
+                /** @note For now this assumes that there is only one op type (add or remove) ,
+                 * that all the flows in an onu are waiting for. We can not have flows waiting on same
+                 * gem for multiple op types, because Maple does not allow multiple configs with
+                 * different op types at the same time.
+                 */
+                /* update gem port complete configuration indication received */
+                p_current_entry->is_waiting_for_svc_port_active = BCMOS_FALSE;
+                /* check if should send flow configuration indication complete to bal core */
+                rc = check_send_flow_bal_ind_msg(p_current_entry, p_msg->err, p_ind->data.status);
+
+                /* any DB cleanup for error should be triggered by Core fsm
+                 * (mac util should not cleanup on its own)
+                 * */
+                if (BCM_ERR_OK != rc)
+                {
+                    BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(logical_pon),
+                            "Failed to send flow configured ind: Error %s, gem port id = %d, pon ni = %d\n",
+                            bcmos_strerror(rc), p_ind->key.gem_port_id, logical_pon);
+                    /* don't break, but continue to check if more flows use the same gem port id */
+                }
+    
+                /* get next */
+                p_current_entry = _mac_util_db_flow_get_next_w_gem (logical_pon, p_ind->key.gem_port_id, &p_rsc_mgr_curr_entry, &p_rsc_mgr_next_entry);
+            }
+        }
+        else
+        {
+            /* just get the pon key by typecasting to a dummy structure */
+            bcmolt_gpon_gem_port_key *p_pon_key = &(((bcmolt_gpon_gem_port_configuration_completed*)p_msg)->key);
+
+		    rc = bcm_topo_pon_get_physical2logical(device_id, p_pon_key->pon_ni, &logical_pon);				
+    		if (BCM_ERR_OK != rc)
+		    {
+			    BCM_LOG(ERROR, log_id_mac_util,
+					    "Failed to get logical if from physical if (device_id %d physical %d ) (%s)\n", device_id, p_pon_key->pon_ni, bcmos_strerror(rc));
+			    break;
+		    }
+    
+            BCM_LOG(DEBUG, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(logical_pon),
+                    "Unhandled message indication for obj GPON_GEM_PORT group %d "
+                    "subgroup %d (Ignored)\n", p_msg->group, p_msg->subgroup);
+        }
+       	
+   	}
+    while(0);	
+    return rc;
+}
+
+/**
+ * @brief  Maple auto indication register for specific GPON based indications
+ *
+ * @param p_rx_cfg         handler config structure
+ * @param  device_id                         specific device id (for multiple devices support)  
+ *
+ * @return bcmos_errno
+ */
+bcmos_errno mac_util_register_for_gpon_auto_indications (struct bcmolt_rx_cfg *p_rx_cfg, bcmolt_devid device_id)
+{
+    return _mac_util_register_for_auto_indications (p_rx_cfg, mac_util_gpon_ind_handlers, BCM_SIZEOFARRAY(mac_util_gpon_ind_handlers), device_id);
+}
+
+/*****************************************************************************/
+/**
+ * @brief Map iwf_mode to bcmolt_iwf_mode
+ *
+ * @param bal_iwf_mode     BAL iwfmode
+ * @return bcm68620 iwf mode
+ */
+static bcmolt_iwf_mode bal_iwf_mode2iwf_mode(bcmbal_iwf_mode bal_iwf_mode)
+{
+    bcmolt_iwf_mode iwf_mode = BCMOLT_IWF_MODE__NUM_OF;
+    switch (bal_iwf_mode)
+    {
+    case BCMBAL_IWF_MODE_DIRECT_MAPPING:
+        iwf_mode = BCMOLT_IWF_MODE_DIRECT_MAPPING_MODE;
+        break;
+    case BCMBAL_IWF_MODE_PER_FLOW:
+        iwf_mode = BCMOLT_IWF_MODE_PER_FLOW_MODE;
+        break;
+    default:
+        BCM_LOG(ERROR, log_id_mac_util, "Invalid iwf_mode %d\n", bal_iwf_mode);
+    }
+    return iwf_mode;
+}
+
+static bcmos_errno mac_util_access_terminal_set_for_gpon (acc_term_inst *p_acc_term, bal_util_oper_acc_term op_type, bcmolt_system_mode system_mode, bcmolt_devid device_id)
+{
+    bcmolt_device_key key = {};
+    bcmolt_device_nni_speed nni_speed_cfg;
+    bcmolt_device_cfg dev_cfg;
+    bcmolt_iwf_mode iwf_mode;
+    uint32_t logical_pon;
+
+    if (BCMOS_TRUE == BCMBAL_CFG_PROP_IS_SET(&(p_acc_term->api_req_acc_term_obj_info), access_terminal, iwf_mode))
+    {
+        iwf_mode = bal_iwf_mode2iwf_mode(p_acc_term->api_req_acc_term_obj_info.data.iwf_mode);
+    }
+    else
+    {
+        iwf_mode = BCMOLT_IWF_MODE_DIRECT_MAPPING_MODE;
+    }
+
+    BCM_TOPO_DEV_FOR_EACH_PON(device_id, logical_pon)
+    {
+        mac_util_topo_pon_context *topo_context, *old_topo_context;
+
+        old_topo_context = bcm_topo_pon_get_context(logical_pon, BCM_TOPO_PON_CONTEXT_ID_MAC_UTIL);
+        if (old_topo_context)
+            bcmos_free(old_topo_context);
+
+        topo_context = bcmos_calloc(sizeof(*topo_context));
+        topo_context->iwf_mode = iwf_mode;
+        bcm_topo_pon_set_context(logical_pon, BCM_TOPO_PON_CONTEXT_ID_MAC_UTIL, topo_context);
+    }
+
+    BCMOLT_CFG_INIT(&dev_cfg, device, key);
+    BCMOLT_CFG_PROP_SET(&dev_cfg, device, system_mode, acc_term_connectivity.devices[device_id].system_mode);
+
+#ifdef QAX_SWITCH
+    /* until speed is configurable through topology settings hardcode it based on switch type */ 
+    BCM_LOG(INFO, log_id_mac_util, "nni speed is: 10G\n");
+    nni_speed_cfg.first_half = BCMOLT_NNI_SPEED_GBPS_10;
+    nni_speed_cfg.second_half = BCMOLT_NNI_SPEED_GBPS_10;
+    BCMOLT_CFG_PROP_SET(&dev_cfg, device, nni_speed, nni_speed_cfg);
+#endif
+
+    return bcmolt_cfg_set(device_id, &dev_cfg.hdr);
+}
+
+/**
+ * @brief access terminal set for gpon_16
+ */
+bcmos_errno mac_util_access_terminal_set_for_gpon_16 (acc_term_inst *p_acc_term, bal_util_oper_acc_term op_type, bcmolt_devid device_id)
+{
+    bcmos_errno rc;
+    rc = maple_access_terminal_set_common(p_acc_term, op_type, device_id);
+    if (rc != BCM_ERR_OK)
+        return rc;
+    rc = mac_util_access_terminal_set_for_gpon(p_acc_term, op_type, BCMOLT_SYSTEM_MODE_GPON__16_X, device_id);
+    if (rc != BCM_ERR_OK)
+        return rc;
+    return maple_access_terminal_connect_common(device_id);
+	
+}
+
+/**
+ * @brief access terminal set for gpon_8
+ */
+bcmos_errno mac_util_access_terminal_set_for_gpon_8 (acc_term_inst *p_acc_term, bal_util_oper_acc_term op_type, bcmolt_devid device_id)
+{
+    bcmos_errno rc;
+    
+    rc = maple_access_terminal_set_common(p_acc_term, op_type, device_id);
+    if (rc != BCM_ERR_OK)
+        return rc;
+    rc = mac_util_access_terminal_set_for_gpon(p_acc_term, op_type, BCMOLT_SYSTEM_MODE_GPON__8_X, device_id);
+    if (rc != BCM_ERR_OK)
+        return rc;
+    return maple_access_terminal_connect_common(device_id);
+}
+
+/** 
+  * @brief post access terminal up configurations on Maple
+  */
+bcmos_errno mac_util_access_terminal_post_indication_set_for_gpon(bcmolt_devid device_id)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcmolt_devid dummy;
+    uint32_t physical_if_id;
+    uint32_t logical_pon = BCM_TOPO_PON_INVALID;
+    bcmolt_gpon_ni_key ni_key = {};
+    bcmolt_gpon_ni_cfg ni_cfg = {};
+    bcmolt_gpon_sn_acquisition sn_acquisition_cfg = {};
+    bcmolt_gpon_ni_auto_cfg gpon_ni_auto_cfg = {};  /* main auto cfg api struct */
+
+    /* configure one time settings for all the interfaces on this device */
+    BCM_TOPO_DEV_FOR_EACH_PON(device_id, logical_pon)
+    {
+        /* get physical interface from logical interface */
+        rc = bcm_topo_pon_get_logical2physical (logical_pon, &dummy, &physical_if_id);
+        if (BCM_ERR_OK != rc)
+        {
+            BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(logical_pon),
+                    "Failed to get physical if from logical if (%s)\n", bcmos_strerror(rc));
+            break;
+        }
+
+        ni_key.pon_ni = physical_if_id; 
+
+
+        /* Set the SN acquisition mode to enable */
+        BCMOLT_CFG_INIT(&ni_cfg, gpon_ni, ni_key);
+
+        sn_acquisition_cfg.control = BCMOLT_CONTROL_STATE_ENABLE;
+        sn_acquisition_cfg.interval = 5000;
+        sn_acquisition_cfg.onu_post_discovery_mode = BCMOLT_ONU_POST_DISCOVERY_MODE_NONE;
+        
+        BCMOLT_CFG_PROP_SET(&ni_cfg, gpon_ni, sn_acquisition, sn_acquisition_cfg);
+
+        rc = bcmolt_cfg_set(device_id, &ni_cfg.hdr);
+        if (rc != BCM_ERR_OK)
+        {
+            BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(logical_pon), 
+                    "Failed to set sn acquisition configuration (%s), err_text=%s)\n", 
+                    bcmos_strerror(rc), ni_cfg.hdr.hdr.err_text);
+            break;
+        }
+        
+
+        /* turn off the auto indication messages for gpon_ni.serial_number_acquisition_cycle_start  */
+        BCMOLT_AUTO_CFG_INIT(&gpon_ni_auto_cfg, gpon_ni, ni_key);
+        BCMOLT_AUTO_CFG_PROP_SET(&gpon_ni_auto_cfg, gpon_ni, serial_number_acquisition_cycle_start, BCMOS_FALSE);
+        rc = bcmolt_auto_cfg_set(device_id, &gpon_ni_auto_cfg.hdr);
+        if (rc != BCM_ERR_OK)
+        {
+            BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(logical_pon), 
+                    "bcmolt_auto_cfg_set for gpon_ni.serial_number_acquisition_cycle_start, Failed (%s), err_text=%s)\n", 
+                    bcmos_strerror(rc), gpon_ni_auto_cfg.hdr.hdr.err_text);
+
+            /* ignore any error, just continue anyway */
+        }
+    }
+
+    return rc;
+}
+
+/**
+ * @brief Command Set setup routine for interface up to mac application for GPON
+ * 
+ * This routine is called by if_fsm in the BAL core to initialize the command
+ * set to up the interface of the mac application. The cmdset actually 
+ * consists of two commands, one is to send the if up request message to the mac
+ * App and handle the relevant response, the other is to handle the indication message
+ * from the mac APP when the operation is completed. 
+ * 
+ * @param p_interface_inst  Pointer to interface instance
+ * @param op_type           Operation type on access terminal/interface instance
+ * 
+ * @return bcmos_errno 
+ *
+ */
+bcmos_errno mac_util_interface_set_for_gpon(acc_term_interface *p_interface_inst, bal_util_oper_if op_type)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+
+    bcmbal_interface_cfg *p_interface_req = &(p_interface_inst->api_req_int_obj_info);
+    bcmbal_interface_key intf_key = p_interface_req->key;
+    mac_util_topo_pon_context *topo_context;
+
+    do
+    {
+        bcmolt_devid device_id;
+        uint32_t physical_if_id;
+        /* get physical interface from logical interface */
+        rc = bcm_topo_pon_get_logical2physical (intf_key.intf_id, &device_id, &physical_if_id);
+        if (BCM_ERR_OK != rc)
+        {
+            BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(intf_key.intf_id), 
+                    "Failed to get physical if from logical if (%s)\n", bcmos_strerror(rc));
+            break;
+        }
+
+
+        bcmolt_gpon_ni_set_pon_state oper_ni;
+        bcmolt_gpon_ni_key ni_key = { .pon_ni = physical_if_id };
+        bcmolt_gpon_trx_cfg cfg = {};
+        bcmolt_gpon_trx_key trx_key = { .pon_ni = physical_if_id };
+        bcmolt_trx_type trx_type;
+        bcmolt_gpon_iwf_key iwf_key = { .pon_ni = physical_if_id };
+        bcmolt_gpon_iwf_cfg iwf_cfg = {};
+        bcmolt_mac_table_configuration mac_table_configuration = {};
+
+        if (BAL_UTIL_OPER_IF_UP == op_type)
+        {
+
+            /* set the pon_ni transceiver configuration */
+            BCMOLT_CFG_INIT(&cfg, gpon_trx, trx_key);
+
+            /* If the user didn't specify a transceiver, then use the default */
+            if (BCMOS_TRUE != BCMBAL_CFG_PROP_IS_SET(p_interface_req, interface, transceiver_type))
+            {
+                /* The user didn't choose a transceiver type, so override it here
+                 * with the default value for GPON
+                 */
+                BCMBAL_CFG_PROP_SET(p_interface_req, interface, transceiver_type, BCMBAL_MAC_UTIL_TRX_TYPE_DEFAULT_GPON);
+            }
+
+            /* Set the (default or chosen) transceiver configuration into the MAC device */
+            trx_type = mac_gpon_bal_trx_type2bcm68620_trx_type(p_interface_req->data.transceiver_type, intf_key.intf_id);
+            BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, transceiver_type, trx_type);
+
+            rc = bcmolt_cfg_set(device_id, &cfg.hdr);
+            if (rc != BCM_ERR_OK)
+            {
+                BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(intf_key.intf_id), 
+                        "Failed to set trx configuration (%s), err_text=%s\n", bcmos_strerror(rc), cfg.hdr.hdr.err_text);
+                break;
+            }
+
+
+            /* Configure pon_ni interworking and mac table configuration based on the system global interworking mode
+             *
+             * We only have to change the mode if the user has chosen per-flow, because direct mode is the default
+             * iwf mode in MAPLE
+             */
+            topo_context = bcm_topo_pon_get_context(intf_key.intf_id, BCM_TOPO_PON_CONTEXT_ID_MAC_UTIL);
+            if (BCMOLT_IWF_MODE_PER_FLOW_MODE == topo_context->iwf_mode)
+            {
+                /* set the iwf configuration */
+                BCMOLT_CFG_INIT(&iwf_cfg, gpon_iwf, iwf_key);
+                BCMOLT_CFG_PROP_SET(&iwf_cfg, gpon_iwf, iwf_mode, BCMOLT_IWF_MODE_PER_FLOW_MODE);
+                /* set the mac table configuration */
+                mac_table_configuration.aging_time = 10000;
+                mac_table_configuration.automatic_mac_move = BCMOLT_CONTROL_STATE_DISABLE;
+                mac_table_configuration.automatic_static_mode = BCMOLT_CONTROL_STATE_DISABLE;
+                mac_table_configuration.default_flow_id = 0;
+                mac_table_configuration.learning_mode = BCMOLT_MAC_TABLE_LEARNING_MODE_NORMAL;
+                mac_table_configuration.miss_fallback = BCMOLT_MAC_TABLE_MISS_FALLBACK_DROP;
+                mac_table_configuration.automatic_mac_learning = BCMOLT_CONTROL_STATE_ENABLE;
+                mac_table_configuration.automatic_mac_aging = BCMOLT_CONTROL_STATE_ENABLE;
+                BCMOLT_CFG_PROP_SET(&iwf_cfg, gpon_iwf, mac_table_configuration, mac_table_configuration);
+
+                rc = bcmolt_cfg_set(device_id, &iwf_cfg.hdr);
+                if (rc != BCM_ERR_OK)
+                {
+                    BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(intf_key.intf_id), 
+                            "Failed to set iwf / mac table configuration (%s), err_text=%s)\n", 
+                        bcmos_strerror(rc), iwf_cfg.hdr.hdr.err_text);
+                    break;
+                }
+            }
+        }
+
+
+        /* invoke the pon_ni state change to the requested state */
+        BCMOLT_OPER_INIT(&oper_ni, gpon_ni, set_pon_state, ni_key);
+        BCMOLT_OPER_PROP_SET(&oper_ni, gpon_ni, set_pon_state, pon_state,
+            (BAL_UTIL_OPER_IF_UP == op_type) ? 
+            BCMOLT_PON_OPERATION_ACTIVE_WORKING : BCMOLT_PON_OPERATION_INACTIVE);
+        rc = bcmolt_oper_submit(device_id, &oper_ni.hdr);
+        if (rc != BCM_ERR_OK)
+        {
+            BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(intf_key.intf_id), 
+                    "Failed to %s (submit) pon interface (%s), err_text=%s\n", 
+                    (BAL_UTIL_OPER_IF_UP == op_type) ? "activate" : "deactivate",
+                    bcmos_strerror(rc), oper_ni.hdr.hdr.err_text);
+        }
+
+    } while (0);
+
+    if (BCM_ERR_OK == rc)
+    {
+        BCM_LOG(DEBUG, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(intf_key.intf_id), 
+                "Submitted INTERFACE-%s operation for IF %d\n",
+                (BAL_UTIL_OPER_IF_UP == op_type) ? "UP" : "DOWN",
+                intf_key.intf_id);
+    }
+
+    return rc;
+}
+
+
+/**
+ * @brief maple_mac_ds_iwf_cfg
+ *
+ * This routine is used to configure the relevant downstream ingress and egress iwf at the device
+ *
+ * @param p_flow                   Pointer to the flow info
+ * @param per_flow_mode_vlan_id    vlan id for GEM port mapping in per flow mode
+ * @param is_pbit_enabled          Flag indicating whether or not to resolve pbits to GEM IDs
+ *
+ * @return bcmos_errno
+ */
+static bcmos_errno maple_mac_ds_iwf_cfg(bcmbal_flow_cfg *p_flow, uint16_t per_flow_mode_vlan_id, bcmos_bool is_pbit_enabled)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcmolt_gpon_iwf_ds_ingress_flow_key in_key = {};
+    bcmolt_gpon_iwf_ds_ingress_flow_cfg in_cfg = {};
+    bcmolt_gpon_iwf_ds_egress_flow_key egr_key = {};
+    bcmolt_gpon_iwf_ds_egress_flow_cfg egr_cfg = {};
+    bcmolt_devid device_id;
+    uint32_t physical_if_id;
+
+
+    do
+    {
+        /* get physical interface from logical interface */
+        rc = bcm_topo_pon_get_logical2physical (p_flow->data.access_int_id, &device_id, &physical_if_id);
+        if (BCM_ERR_OK != rc)
+        {
+            BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow->data.access_int_id),
+                    "Failed to get physical if from logical if (%s)\n", bcmos_strerror(rc));
+            break;
+        }
+
+        /* configure the new ds ingress flow */
+        in_key.pon_ni = physical_if_id;
+        in_key.vlan_id = per_flow_mode_vlan_id;
+        BCMOLT_CFG_INIT(&in_cfg, gpon_iwf_ds_ingress_flow, in_key);
+        if (BCMOS_TRUE == p_flow->data.resolve_mac)
+        {
+            /* mapping method */
+            BCMOLT_CFG_PROP_SET(&in_cfg, gpon_iwf_ds_ingress_flow, mapping_method,
+                BCMOLT_VLAN_TO_FLOW_MAPPING_METHOD_MACPLUSVID);
+        }
+        else
+        {
+            /* mapping method */
+            BCMOLT_CFG_PROP_SET(&in_cfg, gpon_iwf_ds_ingress_flow, mapping_method,
+                BCMOLT_VLAN_TO_FLOW_MAPPING_METHOD_VID);
+        }
+
+        /* mapping tag */
+        BCMOLT_CFG_PROP_SET(&in_cfg, gpon_iwf_ds_ingress_flow, mapping_tag,
+            BCMOLT_MAPPING_TAG_METHOD_OUTER_VID);
+        BCMOLT_CFG_PROP_SET(&in_cfg, gpon_iwf_ds_ingress_flow, vlan_action, BCMOLT_DS_VLAN_ACTION_TRANSPARENT);
+
+        rc = bcmolt_cfg_set(device_id, &in_cfg.hdr);
+        if (BCM_ERR_OK != rc)
+        {
+            BCM_LOG(INFO, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow->data.access_int_id),
+                "Failed to configure ingress flow pon_ni = %d vlan_id = %d rc = %s (%d), err_text=%s\n",
+                in_key.pon_ni,
+                in_key.vlan_id,
+                bcmos_strerror(rc),
+                rc,
+                in_cfg.hdr.hdr.err_text);
+            break;
+        }
+
+
+        /* configure the new ds egress flow */
+        egr_key.pon_ni = physical_if_id;
+        egr_key.flow_id = p_flow->data.svc_port_id;
+
+        /* Configure DS egress handling: flow -> GEM */
+        BCMOLT_CFG_INIT(&egr_cfg, gpon_iwf_ds_egress_flow, egr_key);
+        BCMOLT_CFG_PROP_SET(&egr_cfg, gpon_iwf_ds_egress_flow, gem_port, p_flow->data.svc_port_id);
+        BCMOLT_CFG_PROP_SET(&egr_cfg, gpon_iwf_ds_egress_flow, pbit_control, is_pbit_enabled);
+
+        rc = bcmolt_cfg_set(device_id, &egr_cfg.hdr);
+        if (BCM_ERR_OK != rc)
+        {
+            BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow->data.access_int_id),
+                "Failed to configure egress flow pon_ni = %d flow_id = %d rc = %s (%d), err_text=%s\n",
+                egr_key.pon_ni,
+                egr_key.flow_id,
+                bcmos_strerror(rc),
+                rc,
+                egr_cfg.hdr.hdr.err_text);
+        }
+
+    } while (0);
+
+    BCM_LOG(DEBUG, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow->data.access_int_id),
+            "going out of %s rc = %s (%d)\n",
+            __FUNCTION__,
+            bcmos_strerror(rc), rc);
+    return rc;
+}
+
+
+/**
+ * @brief maple_mac_ds_iwf_cfg_remove
+ *
+ * This routine is used to remove configuration from Maple of the relevant downstream ingress and egress iwf
+ *
+ * @param p_flow                   Pointer to the flow info
+ * @param per_flow_mode_vlan_id    vlan id for per flow mode
+ *
+ * @return bcmos_errno
+ */
+static bcmos_errno maple_mac_ds_iwf_cfg_remove(bcmbal_flow_cfg *p_flow, uint16_t per_flow_mode_vlan_id)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcmolt_gpon_iwf_ds_ingress_flow_key in_key = {};
+    bcmolt_gpon_iwf_ds_ingress_flow_cfg in_cfg = {};
+    bcmolt_gpon_iwf_ds_egress_flow_key egr_key = {};
+    bcmolt_gpon_iwf_ds_egress_flow_cfg egr_cfg = {};
+    bcmolt_devid device_id;
+    uint32_t physical_if_id;
+
+    do
+    {
+        /* config clear ds ingress flow */
+        rc = bcm_topo_pon_get_logical2physical (p_flow->data.access_int_id, &device_id, &physical_if_id);
+        if (BCM_ERR_OK != rc)
+        {
+            BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow->data.access_int_id),
+                    "Failed to get physical if from logical if (%s)\n", bcmos_strerror(rc));
+            break;
+        }
+
+        in_key.pon_ni = physical_if_id;
+        in_key.vlan_id = per_flow_mode_vlan_id;
+        BCMOLT_CFG_INIT(&in_cfg, gpon_iwf_ds_ingress_flow, in_key);
+
+        rc = bcmolt_cfg_clear(device_id, &in_cfg.hdr);
+        if (BCM_ERR_OK != rc)
+        {
+            BCM_LOG(INFO, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow->data.access_int_id),
+                "Failed to Clear ingress flow pon_ni = %d vlan_id = %d rc = %s (%d)\n",
+                in_key.pon_ni,
+                in_key.vlan_id,
+                bcmos_strerror(rc),
+                rc);
+            break;
+        }
+
+
+        /* config clear ds egress flow */
+        egr_key.pon_ni = physical_if_id;
+        egr_key.flow_id = p_flow->data.svc_port_id;
+
+        /* Configure DS egress handling: flow -> GEM */
+        BCMOLT_CFG_INIT(&egr_cfg, gpon_iwf_ds_egress_flow, egr_key);
+
+        rc = bcmolt_cfg_clear(device_id, &egr_cfg.hdr);
+        if (BCM_ERR_OK != rc)
+        {
+            BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow->data.access_int_id),
+                "Failed to Clear egress flow pon_ni = %d flow_id = %d rc = %s (%d)\n",
+                egr_key.pon_ni,
+                egr_key.flow_id,
+                bcmos_strerror(rc),
+                rc);
+        }
+
+    } while (0);
+
+    BCM_LOG(DEBUG, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow->data.access_int_id),
+            "%s: config clear: rc = %s (%d)\n",
+            __FUNCTION__,
+            bcmos_strerror(rc), rc);
+
+    return rc;
+}
+
+
+/**
+ * @brief maple_mac_us_iwf_cfg
+ *
+ * This routine is used to configure the relevant upstream iwf at the device
+ *
+ * @param p_flow       A pointer to a flow object
+ *
+ * @param pbit         A pbit value being configured for the specified flow
+ *
+ * @return bcmos_errno
+ */
+static bcmos_errno maple_mac_us_iwf_cfg(bcmbal_flow_cfg *p_flow, uint8_t pbit)
+{
+    bcmos_errno rc = BCM_ERR_PARM;
+    bcmolt_gpon_iwf_us_flow_key us_key = {};
+    bcmolt_gpon_iwf_us_flow_cfg us_cfg = {};
+    bcmolt_devid device_id;
+    uint32_t physical_if_id;
+
+    /* get physical interface from logical interface */
+    rc = bcm_topo_pon_get_logical2physical (p_flow->data.access_int_id, &device_id, &physical_if_id);
+    if (BCM_ERR_OK != rc)
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow->data.access_int_id),
+                "Failed to get physical if from logical if (%s)\n", bcmos_strerror(rc));
+    }
+    else
+    {
+        /* configure the related iwf us flow */
+        us_key.pon_ni = physical_if_id;
+        us_key.gem_port_id = p_flow->data.svc_port_id;
+        BCMOLT_CFG_INIT(&us_cfg, gpon_iwf_us_flow, us_key);
+        BCMOLT_CFG_PROP_SET(&us_cfg, gpon_iwf_us_flow, flow_id, p_flow->data.svc_port_id);
+        if (BCMOS_TRUE == p_flow->data.resolve_mac)
+        {
+            BCMOLT_CFG_PROP_SET(&us_cfg, gpon_iwf_us_flow, mac_learning, BCMOS_TRUE);
+        }
+        else
+        {
+            BCMOLT_CFG_PROP_SET(&us_cfg, gpon_iwf_us_flow, mac_learning, BCMOS_FALSE);
+        }
+        BCMOLT_CFG_PROP_SET(&us_cfg, gpon_iwf_us_flow, vlan_action, BCMOLT_US_VLAN_ACTION_TRANSPARENT);
+
+        rc = bcmolt_cfg_set(device_id, &us_cfg.hdr);
+    }
+
+    if(BCM_ERR_OK != rc)
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow->data.access_int_id),
+                "%s FAILED, rc = %s (%d), err_text = %s\n",
+                __FUNCTION__,
+                bcmos_strerror(rc), rc, us_cfg.hdr.hdr.err_text);
+    }
+    return rc;
+}
+
+
+/**
+ * @brief maple_mac_us_iwf_cfg_remove
+ *
+ * This routine is used to remove configuration from Maple of the relevant upstream iwf
+ *
+ * @param p_flow       A pointer to a flow object
+ *
+ * @return bcmos_errno
+ */
+static bcmos_errno maple_mac_us_iwf_cfg_remove(bcmbal_flow_cfg *p_flow)
+{
+    bcmos_errno rc = BCM_ERR_PARM;
+    bcmolt_gpon_iwf_us_flow_key us_key = {};
+    bcmolt_gpon_iwf_us_flow_cfg us_cfg = {};
+    bcmolt_devid device_id;
+    uint32_t physical_if_id;
+
+    /* configure the related iwf us flow */
+    rc = bcm_topo_pon_get_logical2physical (p_flow->data.access_int_id, &device_id, &physical_if_id);
+    if (BCM_ERR_OK != rc)
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow->data.access_int_id),
+            "Failed to get physical if from logical if (%s)\n", bcmos_strerror(rc));
+        return rc;
+    }
+
+    us_key.pon_ni = physical_if_id;
+    us_key.gem_port_id = p_flow->data.svc_port_id;
+    BCMOLT_CFG_INIT(&us_cfg, gpon_iwf_us_flow, us_key);
+
+    rc = bcmolt_cfg_clear(device_id, &us_cfg.hdr);
+    if(BCM_ERR_OK != rc)
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow->data.access_int_id),
+                "%s FAILED, rc = %s (%d)\n",
+                __FUNCTION__,
+                bcmos_strerror(rc), rc);
+    }
+
+    return rc;
+}
+
+
+/**
+ * @brief mac_util_validate_subscriber_terminal_info_for_gpon
+ *
+ * This routine is used to validate all input attributes required for a sub term setting
+ * received from core for GPON
+ *
+ * @param p_sub_term_req       A pointer to a subscriber terminal object
+ *
+ * @return bcmos_errno
+ */
+bcmos_errno mac_util_validate_subscriber_terminal_info_for_gpon(const bcmbal_subscriber_terminal_cfg *p_sub_term_req)
+{
+    if(BCMBAL_STATE_UP == p_sub_term_req->data.admin_state)
+    {
+        if (!BCMBAL_CFG_PROP_IS_SET (p_sub_term_req, subscriber_terminal, serial_number))
+        {
+            BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_sub_term_req->key.intf_id), 
+                    "Serial number is a mandatory parameter for a gpon subscriber terminal, and it is not set\n");
+            return BCM_ERR_MANDATORY_PARM_IS_MISSING;
+        }
+
+        if (!BCMBAL_CFG_PROP_IS_SET(p_sub_term_req, subscriber_terminal, password))
+        {
+            BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_sub_term_req->key.intf_id), 
+                    "Password is a mandatory parameter for a gpon subscriber terminal, and it is not set\n");
+            return BCM_ERR_MANDATORY_PARM_IS_MISSING;
+        }
+    }
+
+    return BCM_ERR_OK;
+}
+
+
+/**
+ * @brief Command Set setup routine for subscriber terminal connect to mac application for GPON
+ * 
+ * This routine is called by sub_term_fsm in the BAL core to initialize the command
+ * set to connect the subscriber terminal of the mac application. The cmdset actually 
+ * consists of two commands, one is to send the sub_term request message to the mac
+ * App and handle the relevant response, the other is to handle the indication message
+ * from the mac APP when the operation is completed. 
+ * 
+ * @param p_sub_term_inst   A pointer to a subscriber terminal instance
+ * @param op_type          Type of operation being performed on the subscriber terminal instance
+ * @param is_post_discovery  Used for ADD, indicates if this is a request after a ONU discovery
+ * 
+ * @return bcmos_errno 
+ *
+ * @note we configure Maple for ONU in 2 stages:
+ *  \li Stage 1: do cfg_set with the serial num, password, omci port, as part of first sub_term_set from Core
+ *  \li Stage 2: set the ONU state to ACTIVE using oper_submit, as part of second sub_term_set from Core (after 
+ *                  receiving a Discovery indication)
+ */
+bcmos_errno mac_util_subscriber_terminal_set_for_gpon(sub_term_inst *p_sub_term_inst, bal_util_oper_sub_term op_type, bcmos_bool is_post_discovery)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+
+    bcmbal_subscriber_terminal_cfg *p_sub_term_req = &p_sub_term_inst->api_req_sub_term_info;
+
+    do
+    { 
+        bcmolt_devid device_id;
+        uint32_t physical_if_id;
+        /* get physical interface from logical interface */
+        rc = bcm_topo_pon_get_logical2physical (p_sub_term_req->key.intf_id, &device_id, &physical_if_id);
+        if (BCM_ERR_OK != rc)
+        {
+            BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_sub_term_req->key.intf_id), 
+                    "Failed to get physical if from logical if (%s)\n", bcmos_strerror(rc));
+            break;
+        }
+
+        bcmolt_gpon_onu_cfg cfg = {};
+        bcmolt_gpon_onu_cfg onu_cfg_get = {};
+        bcmolt_gpon_onu_set_onu_state oper = {};
+        bcmolt_gpon_onu_key key = {};
+        bcmolt_onu_operation new_onu_state;
+        bcmolt_gpon_onu_auto_cfg gpon_onu_auto_cfg = {};  /* main auto cfg api struct */
+
+        /* set the onu key - set it to the physical if id */
+        key.pon_ni = physical_if_id;
+        key.onu_id = p_sub_term_req->key.sub_term_id;
+
+        /* set the onu key */
+        BCMOLT_CFG_INIT(&cfg, gpon_onu, key);
+
+       /* invoke onu state change operation to the new state */
+        BCMOLT_OPER_INIT(&oper, gpon_onu, set_onu_state, key);
+
+        if(BAL_UTIL_OPER_SUB_TERM_CLEAR == op_type)
+        {
+            /* Delete the configuration of the ONU */
+            rc = bcmolt_cfg_clear(device_id, &cfg.hdr);
+            if (BCM_ERR_OK != rc)
+            {
+                BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_sub_term_req->key.intf_id), 
+                        "Failed to clear onu configuration(%s)\n", 
+                        bcmos_strerror(rc));
+            }
+
+            /* No indication from Maple will result from the clear operation
+             * so fake it here
+             */
+            mac_util_report_sub_term_event(p_sub_term_req->key.intf_id,
+                                           p_sub_term_req->key.sub_term_id,
+                                           (bcmolt_serial_number *)NULL,
+                                           BAL_UTIL_OPER_SUB_TERM_CLEAR,
+                                           rc, rc,
+                                           MAC_UTIL_DEACTIVATION_FAIL_REASON_NONE, BCMBAL_INVALID_TUNNEL_ID);
+
+            /* No further processing is required for the CLEAR operation */
+            break;
+ 
+
+        }
+        else if(BAL_UTIL_OPER_SUB_TERM_ADD == op_type)
+        {
+            /* first do a get, to see if onu is in active state already */
+            BCMOLT_CFG_INIT(&onu_cfg_get, gpon_onu, key);
+            BCMOLT_CFG_PROP_GET(&onu_cfg_get, gpon_onu, onu_state);
+            rc = bcmolt_cfg_get(device_id, &onu_cfg_get.hdr);
+            if (rc != BCM_ERR_OK)
+            {
+                BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_sub_term_req->key.intf_id), 
+                        "Failed to get onu configuration(%s), err_text=%s, ... continue to configure\n", 
+                        bcmos_strerror(rc), onu_cfg_get.hdr.hdr.err_text);
+
+                /* don't break, but continue with the set anyways */
+            }
+            else
+            {
+                BCM_LOG(DEBUG, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_sub_term_req->key.intf_id), 
+                            "%s: ONU state = %d, [pon_ni=%d, onu_id=%d], BEFORE doing cfg_set on Maple\n", 
+                            __FUNCTION__, onu_cfg_get.data.onu_state, onu_cfg_get.key.pon_ni, onu_cfg_get.key.onu_id);
+            }
+
+
+            if ((BCM_ERR_OK == rc) && (BCMOLT_ONU_STATE_ACTIVE == onu_cfg_get.data.onu_state))
+            {
+                BCM_LOG(INFO, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_sub_term_req->key.intf_id), 
+                        "%s: ONU already in active state during ADD. Skipping further config\n", 
+                        __FUNCTION__);
+
+                mac_util_report_sub_term_event(p_sub_term_req->key.intf_id,
+                                       p_sub_term_req->key.sub_term_id,
+                                       (bcmolt_serial_number *)NULL,
+                                       BAL_UTIL_OPER_SUB_TERM_ADD,
+                                       rc, rc,
+                                       BCMOLT_ACTIVATION_FAIL_REASON_NONE, BCMBAL_INVALID_TUNNEL_ID);
+                break;
+            }
+
+
+            /* set the  sn & password only if it being configured for the first time */
+            if (BCMOS_FALSE == is_post_discovery)
+            {
+                BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, serial_number, 
+                                    *((bcmolt_serial_number *)&p_sub_term_req->data.serial_number));
+
+                BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, password, 
+                                    *((bcmolt_arr_u8_10 *)&p_sub_term_req->data.password));
+
+                /* set the onu configuration */
+                BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, auto_password_learning, BCMOS_TRUE);
+                BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, us_fec, BCMOS_FALSE);
+
+                /* set the onu management channel port */
+                BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, omci_port_id, p_sub_term_req->data.svc_port_id);
+ 
+
+                rc = bcmolt_cfg_set(device_id, &cfg.hdr);
+                if (rc != BCM_ERR_OK)
+                {
+                    BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_sub_term_req->key.intf_id), 
+                            "Failed to set onu configuration(%s), err_text=%s\n", 
+                            bcmos_strerror(rc), cfg.hdr.hdr.err_text);
+                    break;
+                }
+
+                /**
+                 * @note If this is first time set for ADD, then skip setting the ONU state for now. 
+                 * Wait until ONU Discovery is received.
+                 */
+                break;
+            }
+
+
+            /* turn off the auto indication messages for gpon_onu.rei */
+            BCMOLT_AUTO_CFG_INIT(&gpon_onu_auto_cfg, gpon_onu, key);
+            BCMOLT_AUTO_CFG_PROP_SET(&gpon_onu_auto_cfg, gpon_onu, rei, BCMOS_FALSE);
+            rc = bcmolt_auto_cfg_set(device_id, &gpon_onu_auto_cfg.hdr);
+            if (rc != BCM_ERR_OK)
+            {
+                BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_sub_term_req->key.intf_id), 
+                        "bcmolt_auto_cfg_set for gpon_onu.rei  Failed (%s), err_text=%s)\n", 
+                        bcmos_strerror(rc), gpon_onu_auto_cfg.hdr.hdr.err_text);
+
+                /* This is not fatal, so just continue anyway */
+            }
+
+            /*
+             * Set the new onu state for the ADD operation
+             */
+            BCM_LOG(DEBUG, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_sub_term_req->key.intf_id),
+                    "Setting ONU state to active\n");
+
+            new_onu_state = BCMOLT_ONU_OPERATION_ACTIVE; 
+        }
+        else if (BAL_UTIL_OPER_SUB_TERM_REMOVE == op_type)
+        {
+            /* If the ONU is not present, then it will never respond to the deactivate command
+             * with an indication, so just allow the FSM to continue as if it did.
+             */
+            if(BCMBAL_STATUS_NOT_PRESENT != p_sub_term_inst->current_sub_term_info.data.oper_status)
+            {
+                /*
+                 * Set the new onu state for the REMOVE operation
+                 */
+                BCM_LOG(DEBUG, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_sub_term_req->key.intf_id),
+                        "Setting ONU state to IN-active\n");
+
+                new_onu_state = BCMOLT_ONU_OPERATION_INACTIVE;
+            }
+        }
+        else /* This should never happen */
+        {
+            BCM_LOG(ERROR, log_id_mac_util, "Bad request from core\n"); 
+            rc = BCM_ERR_INTERNAL;
+            break;
+        }
+
+        /* Do oper_submit to set the ONU state */
+        BCMOLT_OPER_PROP_SET(&oper, gpon_onu, set_onu_state, onu_state, new_onu_state);
+        rc = bcmolt_oper_submit(device_id, &oper.hdr);
+        if (BCM_ERR_OK != rc)
+        {
+            BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_sub_term_req->key.intf_id), 
+                    "bcmolt_oper_submit Failed for onu state  Failed (%s), err_text=%s\n", 
+                    bcmos_strerror(rc), &(oper.hdr.hdr.err_text[0]));
+        }
+
+
+        /* If the ONU is not present, then it will never respond to the deactivate command
+         * with an indication, so just allow the FSM to continue as if it did.
+         */
+        if((BCMOLT_ONU_OPERATION_INACTIVE == new_onu_state) &&
+           (BCMBAL_STATUS_NOT_PRESENT == p_sub_term_inst->current_sub_term_info.data.oper_status))
+        {
+            mac_util_report_sub_term_event(p_sub_term_req->key.intf_id,
+                                           p_sub_term_req->key.sub_term_id,
+                                           (bcmolt_serial_number *)NULL,
+                                           BAL_UTIL_OPER_SUB_TERM_REMOVE,
+                                           rc, rc,
+                                           MAC_UTIL_DEACTIVATION_FAIL_REASON_NONE, BCMBAL_INVALID_TUNNEL_ID);
+        }
+
+    } while (0);
+
+
+
+    if (rc == BCM_ERR_STATE)
+    {
+        BCM_LOG(INFO, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_sub_term_req->key.intf_id), 
+                "%s failed to set state, possibly because interface is not configured yet, pon fiber disconnect, or onu disconnect: rc = %s (%d)\n",
+                __FUNCTION__,
+                bcmos_strerror(rc), rc);
+    }
+    else if (BCM_ERR_OK != rc)
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_sub_term_req->key.intf_id), 
+                "%s Failed: rc = %s (%d)\n",
+                __FUNCTION__,
+                bcmos_strerror(rc), rc);
+    }
+
+    return rc;
+}
+
+
+/**
+ * @brief validate_flow_info for gpon
+ *
+ * This routine is used to validate all input attributes required for a flow
+ * setting received from core for GPON
+ *
+ * @param p_flow_req     A pointer to a flow object
+ *
+ * @return bcmos_errno
+ */
+bcmos_errno mac_util_validate_flow_info_for_gpon (const bcmbal_flow_cfg *p_flow_req)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    mac_util_topo_pon_context *topo_context;
+
+    topo_context = bcm_topo_pon_get_context(p_flow_req->data.access_int_id, BCM_TOPO_PON_CONTEXT_ID_MAC_UTIL);
+    if ((BCM_ERR_OK == rc) && (BCMOLT_IWF_MODE_PER_FLOW_MODE == topo_context->iwf_mode))
+    {
+        if (BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&(p_flow_req->data.classifier), classifier, o_vid))
+        {
+            /* if the flow has an action to remove the outer tag from a double tagged OLT downstream packets,
+               the outer tag will be removed by the SWITCH in front of the MAC, the MAC should take the inner
+               tag vid for GEM decision.  Sep-28-2015 IL
+               */
+            if (BCMOS_TRUE == mac_util_check_flow_is_double_tag_remove_o_tag (p_flow_req))
+            {
+                if (BCMOS_TRUE != BCMBAL_ATTRIBUTE_PROP_IS_SET(&(p_flow_req->data.classifier), classifier, i_vid))
+                {
+                    BCM_LOG(INFO, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow_req->data.access_int_id),
+                            "classifier i_vid id is a mandatory downstream parameter for double tagged action, "
+                            "and it is not set\n");
+                    rc = BCM_ERR_MANDATORY_PARM_IS_MISSING;
+                } 
+            }
+        }
+        else
+        {
+            BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow_req->data.access_int_id), 
+                    "o_vid id is a mandatory parameter for a flow classifier, and it is not set\n");
+            rc = BCM_ERR_MANDATORY_PARM_IS_MISSING;
+        }
+    }
+
+    if (p_flow_req->key.flow_type == BCMBAL_FLOW_TYPE_UPSTREAM)
+    {
+        if (!BCMBAL_CFG_PROP_IS_SET(p_flow_req, flow, agg_port_id))
+        {
+            BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow_req->data.access_int_id), 
+                    "agg port id is a mandatory parameter for an US flow, and it is not set\n");
+            rc = BCM_ERR_MANDATORY_PARM_IS_MISSING;
+        }
+
+    }
+
+    return rc;
+}
+
+
+/**
+ * @brief flow set for GPON
+ *
+ * @param p_flow_req    pointer to flow request structure from core
+ * @param op_type       ADD, REMOVE or CLEAR
+ * @param p_flow_core   local DB flow context passed as a cookie
+ *
+ * @return errno    error
+ */
+bcmos_errno mac_util_flow_set_for_gpon (bcmbal_flow_cfg *p_flow_req, bal_util_oper_flow op_type, flow_inst *p_flow_core)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+
+    bcmos_bool is_pbit_enabled = BCMOS_FALSE;
+    uint16_t per_flow_mode_vlan_id = 0; /* hold the value of the vlan tag to use in per-flow mode */
+    uint8_t pbits_val = 0;
+    mac_util_topo_pon_context *topo_context;
+    flow_list_entry *p_mac_util_flow_entry = NULL;
+
+    topo_context = bcm_topo_pon_get_context(p_flow_req->data.access_int_id, BCM_TOPO_PON_CONTEXT_ID_MAC_UTIL);
+    if (BCMOLT_IWF_MODE_PER_FLOW_MODE == topo_context->iwf_mode)
+    {
+        per_flow_mode_vlan_id = 0; /* set to default */
+
+        if (BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&(p_flow_req->data.classifier), classifier, o_vid))
+        {
+            /* if the flow has an action to remove the outer tag from a double tagged OLT downstream packets,
+               the outer tag will be removed by the SWITCH in front of the MAC, the MAC should take the inner
+               tag vid for GEM decision.  Sep-28-2015 IL
+               */
+            if (BCMOS_TRUE == mac_util_check_flow_is_double_tag_remove_o_tag (p_flow_req))
+            {
+                if (BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&(p_flow_req->data.classifier), classifier, i_vid))
+                {
+                    per_flow_mode_vlan_id = p_flow_req->data.classifier.i_vid;
+                }
+                //else should not happen here really, since this was validated in a previous step
+            }
+            else
+            {
+                per_flow_mode_vlan_id = p_flow_req->data.classifier.o_vid;
+            }
+        }
+        //else should not happen here really, since this was validated in a previous step
+    }
+
+
+    /* Check the operation id */
+    if ((BAL_UTIL_OPER_FLOW_ADD != op_type)    && 
+        (BAL_UTIL_OPER_FLOW_REMOVE != op_type) && 
+        (BAL_UTIL_OPER_FLOW_CLEAR != op_type))
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow_req->data.access_int_id),
+                "Unexpected mac_util flow operation %d \n", op_type);
+        return BCM_ERR_PARM;
+    }
+
+    /* flow Add or Modify */
+    if (BAL_UTIL_OPER_FLOW_ADD == op_type)
+    {
+        switch (p_flow_req->key.flow_type)
+        {
+            /* unicast flows */
+            case BCMBAL_FLOW_TYPE_UPSTREAM:
+            case BCMBAL_FLOW_TYPE_DOWNSTREAM:
+            {
+                if (p_flow_req->data.classifier.o_pbits)
+                {
+                    /* o_pbits  can only take one p-bit value */
+                    pbits_val = p_flow_req->data.classifier.o_pbits;
+                    is_pbit_enabled = BCMOS_TRUE;
+                }
+                else
+                {
+                    pbits_val = 0;
+                    is_pbit_enabled = BCMOS_FALSE;
+                }
+
+                /* create a gem port id and relevant flow for a single pbit, or with no pbit */
+                /* pass on the op type also to specify if it is FLOW_ADD OR FLOW_MODIFY */
+                rc = maple_mac_unicast_flow_add(p_flow_req, pbits_val, per_flow_mode_vlan_id, op_type, &p_mac_util_flow_entry);
+                if ((BCM_ERR_OK != rc) || (NULL == p_mac_util_flow_entry))
+                {
+                    break;
+                }
+
+
+                /* configure iwf flows in case of per flow interworking mode */
+                if (BCMOLT_IWF_MODE_PER_FLOW_MODE == topo_context->iwf_mode)
+                {
+                    if (BCMBAL_FLOW_TYPE_DOWNSTREAM == p_flow_req->key.flow_type) 
+                    {
+                        rc = maple_mac_ds_iwf_cfg(p_flow_req, per_flow_mode_vlan_id, is_pbit_enabled);
+                    }
+                    else
+                        /* FLOW_TYPE_UPSTREAM */
+                    {
+                        rc = maple_mac_us_iwf_cfg(p_flow_req, pbits_val);
+                    }
+                    if (BCM_ERR_OK != rc)
+                    {
+                        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow_req->data.access_int_id), 
+                                "Failed to add iwf flows in per flow mode (%s))\n", 
+                                bcmos_strerror(rc));
+                        break;
+                    }
+                }
+
+                /* mark flow configuration to device completed */
+                mac_util_mark_flow_config_complete(p_mac_util_flow_entry);
+            }
+            break;
+
+            case BCMBAL_FLOW_TYPE_BROADCAST:
+            {
+                rc = maple_mac_broadcast_flow_add(p_flow_req, per_flow_mode_vlan_id, op_type, &p_mac_util_flow_entry);
+                if ((BCM_ERR_OK != rc) || (NULL == p_mac_util_flow_entry))
+                {
+                    break;
+                }
+
+            }
+            break;
+
+            default:
+                BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow_req->data.access_int_id), 
+                        "Unknown flow type %d\n",
+                        p_flow_req->key.flow_type);
+                rc = BCM_ERR_PARM;
+                break;
+        }
+    }
+    else if ((BAL_UTIL_OPER_FLOW_REMOVE == op_type) ||
+             (BAL_UTIL_OPER_FLOW_CLEAR == op_type))
+    {
+        /* find the flow */
+        p_mac_util_flow_entry = _mac_util_db_flow_get_w_flow_key(p_flow_req->data.access_int_id, &(p_flow_req->key));
+        if (NULL == p_mac_util_flow_entry)
+        {
+            rc = BCM_ERR_NOENT;
+            if (BAL_UTIL_OPER_FLOW_CLEAR != op_type)
+            {
+                BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow_req->data.access_int_id),
+                    "%s: NULL mac util flow entry to remove: flow id: %d, flow_type: %s\n",
+                    __FUNCTION__,
+                    p_flow_req->key.flow_id,
+                    (p_flow_req->key.flow_type == BCMBAL_FLOW_TYPE_UPSTREAM ? "up":"down"));
+            }
+
+            goto exit;
+        }
+
+        switch (p_flow_req->key.flow_type)
+        {
+            /* unicast flows */
+            case BCMBAL_FLOW_TYPE_UPSTREAM:
+            case BCMBAL_FLOW_TYPE_DOWNSTREAM:
+            {
+                /* First De-configure IWF flows in case of per flow interworking mode */
+                if (BCMOLT_IWF_MODE_PER_FLOW_MODE == topo_context->iwf_mode)
+                {
+                    if (BCMBAL_FLOW_TYPE_DOWNSTREAM == p_flow_req->key.flow_type) 
+                    {
+                        rc = maple_mac_ds_iwf_cfg_remove(p_flow_req, per_flow_mode_vlan_id);
+                    }
+                    else
+                    {
+                        rc = maple_mac_us_iwf_cfg_remove(p_flow_req);
+                    }
+                    if (BCM_ERR_OK != rc)
+                    {
+                        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow_req->data.access_int_id), 
+                                "Failed to remove iwf flows in per flow mode (%s))\n", 
+                                bcmos_strerror(rc));
+                        break;
+                    }
+                }
+
+
+                /** Then remove unicast GEM/Alloc Id from Maple and flow entry from local database */
+                rc = maple_mac_unicast_flow_remove(p_flow_req, op_type, p_mac_util_flow_entry);
+                if (BCM_ERR_OK != rc)
+                {
+                    break;
+                }
+
+                /* mark flow De-configuration to device completed */
+                mac_util_mark_flow_config_complete(p_mac_util_flow_entry);
+            }
+            break;
+
+            case BCMBAL_FLOW_TYPE_BROADCAST:
+            {
+                rc = maple_mac_broadcast_flow_remove(p_flow_req, per_flow_mode_vlan_id, op_type, p_mac_util_flow_entry);
+            }
+            break;
+
+            default:
+                BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow_req->data.access_int_id), 
+                        "Unknown flow type %d\n",
+                        p_flow_req->key.flow_type);
+                rc = BCM_ERR_PARM;
+                break;
+        }
+
+    } 
+    else
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow_req->data.access_int_id), 
+                "Unknown flow op type %d for flow id/type = %d/%d\n",
+                op_type, p_flow_req->key.flow_id, p_flow_req->key.flow_type);
+        rc = BCM_ERR_PARM;
+    }
+
+exit:
+    if (BCM_ERR_OK == rc)
+    {
+        /* 
+         * Check flow entry flags to see if an indication to Core should be triggered immediately:
+         *  (Special handling for flow configuration, for the case no device configuration is needed, 
+         *  and/or no indication from device is expected - could be the case of a single/multiple 
+         *  gem ports used for us and ds, and us was already configured.
+         *  - send the flow ind immediately 
+         */
+        check_send_flow_bal_ind_msg(p_mac_util_flow_entry, BCM_ERR_OK, BCMOLT_RESULT_SUCCESS);
+    }
+    else
+    {
+        if ((BCM_ERR_NOENT == rc) && (BAL_UTIL_OPER_FLOW_CLEAR == op_type))
+        {
+            /*
+             * For flow CLEAR, and if no flow entry is found, then fake an indication success to Core,
+             * for it to execute the flow state machine.
+             * The reasons for flow entry not found could be because the flow was already admin-ed Down.
+             * Admin-down of a flow causes mac util to clear flow config and flow instance from itself
+             * and the maple HW. However, Core FSM still keeps it's flow instance during admin down state.
+             */
+            mac_util_report_flow_remove_success (p_flow_req->key, p_flow_req->data.access_int_id, op_type);
+            rc = BCM_ERR_OK;
+        }
+    }
+    //else if there was an error during config, just return a failure; no need to send back indication for that.
+
+
+    return rc;
+}
+
+bcmos_errno maple_gpon_mac_check_gem_port_id(uint32_t if_id, uint32_t onu_id, uint16_t svc_port_id, 
+                                                                bcmos_bool *is_configured, bcmos_bool *is_activated)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcmolt_gpon_gem_port_key gem_key = {};
+    bcmolt_gpon_gem_port_cfg gem_cfg = {};
+    bcmolt_devid device_id;
+    uint32_t physical_if_id;
+    
+    GET_DEVICE_ID_AND_PHYSICAL_ID_FROM_IF_ID(if_id, device_id, physical_if_id);
+    
+    /* set the gem port object key */
+    gem_key.pon_ni = physical_if_id;
+    gem_key.gem_port_id = svc_port_id;
+    BCMOLT_CFG_INIT(&gem_cfg, gpon_gem_port, gem_key);
+    BCMOLT_CFG_PROP_GET(&gem_cfg, gpon_gem_port, all_properties);
+    
+    rc = bcmolt_cfg_get(device_id, &gem_cfg.hdr);
+    if(BCM_ERR_OK != rc)
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(if_id),
+            "%s FAILED in bcmolt_cfg_get: svc_port_id = %d if_id = %d onu_id = %d\n",
+            __FUNCTION__,
+            svc_port_id, if_id, onu_id);
+        
+        return rc;
+    }
+    
+    
+    /* may be configured; does gem belong to same onu ? */
+    if (BCMOLT_GPON_GEM_PORT_STATE_NOT_CONFIGURED != gem_cfg.data.gem_port_state && onu_id != gem_cfg.data.onu_id)
+    {	
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(if_id),
+            "%s FAILED, onu id mismatch: svc_port_id = %d if_id = %d is already assigned to onu_id = %d (not to onu id %d) \n",
+            __FUNCTION__,
+            svc_port_id, if_id, gem_cfg.data.onu_id, onu_id);
+        
+        return BCM_ERR_PARM;
+    }
+    *is_configured = BCMOLT_GPON_GEM_PORT_STATE_NOT_CONFIGURED != gem_cfg.data.gem_port_state;
+    *is_activated = BCMOLT_GPON_GEM_PORT_STATE_ACTIVE == gem_cfg.data.gem_port_state;
+    
+    return rc;
+}
+
+
+bcmos_errno maple_gpon_gem_port_id_add(uint32_t if_id, uint16_t svc_port_id, uint32_t onu_id, bcmolt_gem_port_configuration *configuration)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcmolt_gpon_gem_port_key gem_key = {};
+    bcmolt_gpon_gem_port_cfg gem_cfg = {};
+    bcmolt_devid device_id;
+    uint32_t physical_if_id;
+
+    GET_DEVICE_ID_AND_PHYSICAL_ID_FROM_IF_ID(if_id, device_id, physical_if_id);
+
+    /* set the gem port object key */
+    gem_key.pon_ni = physical_if_id;
+    gem_key.gem_port_id = svc_port_id;
+    BCMOLT_CFG_INIT(&gem_cfg, gpon_gem_port, gem_key);
+
+    /* set the gem port configuration */
+    if (onu_id < MAC_UTIL_DUMMY_ONU_ID_FOR_MULTICAST_GEM)
+    {
+        BCMOLT_CFG_PROP_SET(&gem_cfg, gpon_gem_port, onu_id, onu_id);
+        BCMOLT_CFG_PROP_SET(&gem_cfg, gpon_gem_port, upstream_destination_queue,
+            BCMOLT_US_GEM_PORT_DESTINATION_DATA);
+    }
+    BCMOLT_CFG_PROP_SET(&gem_cfg, gpon_gem_port, downstream_encryption_mode,
+        BCMOLT_CONTROL_STATE_DISABLE);
+    BCMOLT_CFG_PROP_SET(&gem_cfg, gpon_gem_port, configuration, *configuration);
+    BCMOLT_CFG_PROP_SET(&gem_cfg, gpon_gem_port, control, BCMOLT_CONTROL_STATE_ENABLE);
+
+    rc = bcmolt_cfg_set(device_id, &gem_cfg.hdr);
+    if(BCM_ERR_OK != rc)
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(if_id),
+                "%s FAILED: rc=%s (%d), svc_port_id = %d dev_id = %d if_id = %d onu_id = %d, err_text=%s\n",
+                __FUNCTION__,
+                bcmos_strerror(rc), rc, svc_port_id, device_id, if_id, onu_id, gem_cfg.hdr.hdr.err_text);
+    }
+
+    return rc;
+}
+
+
+bcmos_errno maple_gpon_gem_port_id_remove(uint32_t if_id, uint16_t svc_port_id)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcmolt_gpon_gem_port_key gem_key = {};
+    bcmolt_gpon_gem_port_cfg gem_cfg = {};
+    bcmolt_devid device_id;
+    uint32_t physical_if_id;
+
+    GET_DEVICE_ID_AND_PHYSICAL_ID_FROM_IF_ID(if_id, device_id, physical_if_id);
+
+    gem_key.pon_ni = physical_if_id;
+    gem_key.gem_port_id = svc_port_id;
+    BCMOLT_CFG_INIT(&gem_cfg, gpon_gem_port, gem_key);
+    rc = bcmolt_cfg_clear(device_id, &gem_cfg.hdr);
+    if (BCM_ERR_OK != rc)
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(if_id), "%s id=%d, gem=%d, failed with error %s\n",__FUNCTION__, if_id, svc_port_id, bcmos_strerror(rc));
+    }
+
+
+    return rc;
+}
+
+
+bcmos_errno maple_gpon_mac_get_alloc_id_config (uint32_t if_id, uint32_t onu_id, uint16_t agg_id, bcmolt_alloc_state *alloc_id_state)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcmolt_gpon_alloc_key alloc_key = {};
+    bcmolt_gpon_alloc_cfg alloc_cfg = {};
+    bcmolt_devid device_id;
+    uint32_t physical_if_id;
+
+    GET_DEVICE_ID_AND_PHYSICAL_ID_FROM_IF_ID(if_id, device_id, physical_if_id);
+
+    /* set the alloc-id key */
+    alloc_key.pon_ni = physical_if_id;
+    alloc_key.alloc_id = agg_id;
+    BCMOLT_CFG_INIT(&alloc_cfg, gpon_alloc, alloc_key);
+    BCMOLT_CFG_PROP_GET(&alloc_cfg, gpon_alloc, all_properties);
+
+    rc = bcmolt_cfg_get(device_id, &alloc_cfg.hdr);
+    if(BCM_ERR_OK != rc)
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(if_id),
+                "%s: FAILED in bcmolt_cfg_get rc = %s, agg_id = %d if_id = %d\n",
+                __FUNCTION__,
+                bcmos_strerror(rc), agg_id, if_id);
+
+        return rc;
+    }
+	
+    /* may be configured; does alloc id belong to the expected onu ? */
+    if (alloc_cfg.data.state != BCMOLT_ALLOC_STATE_NOT_CONFIGURED
+		&& alloc_cfg.data.onu_id != onu_id)
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(if_id),
+                "%s FAILED, onu id mismatch: agg_id = %d if_id = %d is set to onu %d NOT to onu_id = %d\n",
+                __FUNCTION__,
+                agg_id, if_id, alloc_cfg.data.onu_id, onu_id);
+
+        return BCM_ERR_PARM;
+    }
+
+    *alloc_id_state = alloc_cfg.data.state;
+
+    return BCM_ERR_OK;
+}
+
+
+bcmos_errno maple_gpon_us_alloc_id_add(uint32_t if_id, uint32_t onu_id, uint16_t agg_id, bcmolt_pon_alloc_sla agg_sla)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcmolt_gpon_alloc_key alloc_key = {};
+    bcmolt_gpon_alloc_cfg alloc_cfg = {};
+    bcmolt_devid device_id;
+    uint32_t physical_if_id;
+
+    GET_DEVICE_ID_AND_PHYSICAL_ID_FROM_IF_ID(if_id, device_id, physical_if_id);
+
+    /* set the alloc-id key */
+    alloc_key.pon_ni = physical_if_id;
+    alloc_key.alloc_id = agg_id;
+    BCMOLT_CFG_INIT(&alloc_cfg, gpon_alloc, alloc_key);
+    BCMOLT_CFG_PROP_SET(&alloc_cfg, gpon_alloc, sla, agg_sla);
+    /* set the alloc-id - onu assignment */
+    BCMOLT_CFG_PROP_SET(&alloc_cfg, gpon_alloc, onu_id, onu_id);
+
+    rc = bcmolt_cfg_set(device_id, &alloc_cfg.hdr);
+     if(BCM_ERR_OK != rc)
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(if_id),
+                "%s: rc = %s, agg_id = %d if_id = %d, err_text = %s \n",
+                __FUNCTION__,
+                bcmos_strerror(rc), agg_id, if_id, alloc_cfg.hdr.hdr.err_text);
+    }
+    return rc;
+
+}
+
+
+bcmos_errno maple_gpon_us_alloc_id_remove(uint32_t if_id, uint16_t agg_id)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcmolt_gpon_alloc_key alloc_key = {};
+    bcmolt_gpon_alloc_cfg alloc_cfg = {};
+    bcmolt_devid device_id;
+    uint32_t physical_if_id;
+
+    GET_DEVICE_ID_AND_PHYSICAL_ID_FROM_IF_ID(if_id, device_id, physical_if_id);
+
+    /* set the alloc-id key */
+    alloc_key.pon_ni = physical_if_id;
+    alloc_key.alloc_id = agg_id;
+    BCMOLT_CFG_INIT(&alloc_cfg, gpon_alloc, alloc_key);
+
+    rc = bcmolt_cfg_clear(device_id, &alloc_cfg.hdr);
+    if (BCM_ERR_OK != rc)
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(if_id), "%s failed with error %s\n",__FUNCTION__, bcmos_strerror(rc));
+    }
+
+    return rc;
+}
+
+/**
+ * @brief group set for gpon 
+ * @param p_group_req  pointer to group request structure from core
+ * @param op_type      ADD, REMOVE or SET
+ * @param p_group_inst pointer to the Core Group Object instance
+ *
+ * @return errno    error
+ *
+ * @todo shift this out to mac specific files
+ */
+bcmos_errno mac_util_group_set_for_gpon (bcmbal_group_cfg *p_group_req, bal_util_oper_group op_type, group_inst *p_group_inst)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    uint16_t svc_port_id;
+    uint32_t if_id, i, ref_count;
+    bcmolt_gem_port_configuration configuration = {0};
+
+    /* Check the operation id */
+    if ((BAL_UTIL_OPER_GROUP_ADD != op_type)    &&
+        (BAL_UTIL_OPER_GROUP_REMOVE != op_type) &&
+        (BAL_UTIL_OPER_GROUP_SET != op_type))
+    {
+        BCM_LOG(ERROR, log_id_mac_util,
+                "Unexpected mac_util gpon group operation %d \n", op_type);
+        return BCM_ERR_PARM;
+    }
+        
+    configuration.direction = BCMOLT_GEM_PORT_DIRECTION_DOWNSTREAM;
+    configuration.type = BCMOLT_GEM_PORT_TYPE_MULTICAST;
+        
+    /* for group SET operation, first remove the old multicast GEM */
+    if (BAL_UTIL_OPER_GROUP_SET == op_type)
+    {
+        bcmbal_group_cfg *p_group_rem_req;
+        /* use the Core DB for existing members - store in current_flow_info */
+        p_group_rem_req = &p_group_inst->current_group_info;
+        for(i=0; i< p_group_rem_req->data.members.len; i++)
+        {  
+            if_id = p_group_rem_req->data.members.val[i].intf_id;
+            svc_port_id = p_group_rem_req->data.members.val[i].svc_port_id;
+            /* svc_port_id can be 0 (not assigned) when group had no owner, no need to remove  */
+            if(svc_port_id)
+            { 
+                rc = rsc_mgr_gem_get_ref_count(if_id, svc_port_id, &ref_count);
+                if(BCM_ERR_OK != rc)
+                {
+                    BCM_LOG(ERROR, log_id_mac_util,
+                    "mac_util gpon group get reference count on interface %d (gem %d) failed \n", if_id, svc_port_id);
+                    return rc;
+                }
+                /* if other group is referencing the same GEM (ref_count > 1), do not call Mac API to remove it.
+                   The core will ask Resource Manger to decrease the counter if everything is good */
+                if ( ref_count == 1)
+                {  
+                    rc = maple_gpon_gem_port_id_remove(if_id, svc_port_id);
+                
+                    if(BCM_ERR_OK != rc)
+                    {
+                        BCM_LOG(ERROR, log_id_mac_util,
+                        "mac_util gpon group set operation SET on remove interface %d (gem %d) failed \n", if_id, svc_port_id);
+                        return rc;
+                    }
+                }
+                else if ( ref_count == 0)
+                {  
+                    BCM_LOG(WARNING, log_id_mac_util,
+                        "mac_util gpon group set operation SET on interface %d (gem %d) remove with 0 reference counter \n", if_id, svc_port_id);
+                }
+           }
+        }
+    }
+    
+    /* walk through every member interface */
+    for(i=0; i< p_group_req->data.members.len; i++)
+    {  
+        if_id = p_group_req->data.members.val[i].intf_id;
+        svc_port_id = p_group_req->data.members.val[i].svc_port_id;
+        /* group Add */
+        if (BAL_UTIL_OPER_GROUP_ADD == op_type || BAL_UTIL_OPER_GROUP_SET == op_type)
+        {
+            rc = maple_gpon_gem_port_id_add(if_id, svc_port_id, MAC_UTIL_DUMMY_ONU_ID_FOR_MULTICAST_GEM, &configuration);
+        }
+        else if (BAL_UTIL_OPER_GROUP_REMOVE == op_type)
+        {
+            rc = rsc_mgr_gem_get_ref_count(if_id, svc_port_id, &ref_count);
+            if(BCM_ERR_OK != rc)
+            {
+                BCM_LOG(ERROR, log_id_mac_util,
+                "mac_util gpon group operation REM on interface %d (gem %d) failed \n", if_id, svc_port_id);
+                break;    
+            }
+            /* if other group is referencing the same GEM (ref_count > 1), do not call Mac API to remove it.
+               The core will ask Resource Manger to decrease the counter if everything is good */
+            if ( ref_count == 1)
+            {
+                rc = maple_gpon_gem_port_id_remove(if_id, svc_port_id);
+            }
+            else if ( ref_count == 0)
+            {  
+                BCM_LOG(WARNING, log_id_mac_util,
+                    "mac_util gpon group operation REM on interface %d (gem %d) with 0 reference count \n", if_id, svc_port_id);
+            }
+        }
+ 
+        if(BCM_ERR_OK != rc)
+        {
+            BCM_LOG(ERROR, log_id_mac_util,
+            "mac_util gpon group set of operation %d on interface %d (gem %d) failed \n", op_type, if_id, svc_port_id);
+            break;
+        }
+    }
+
+    
+    return rc;
+}
+
+/*@}*/
diff --git a/bal_release/src/core/util/mac/bal_mac_util_loopback.c b/bal_release/src/core/util/mac/bal_mac_util_loopback.c
new file mode 100644
index 0000000..e94c282
--- /dev/null
+++ b/bal_release/src/core/util/mac/bal_mac_util_loopback.c
@@ -0,0 +1,149 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file bal_mac_util_loopback.c
+ *
+ * @brief mac util handling for MAC in loopback mode
+ *
+ * The loopback mode is handled like a mac protocol, with loopback specific handling 
+ *  done as sub-routine calls from the top level handler functions. 
+ *
+ * @addtogroup mac_util
+ */
+
+/*@{*/
+
+#include <bal_mac_util.h>
+#include <bal_mac_util_common_itu_pon.h>
+#include <bal_worker.h>
+
+
+/**
+ * @brief access terminal set for loopback
+ */
+bcmos_errno mac_util_access_terminal_set_for_loopback (acc_term_inst *p_acc_term, bal_util_oper_acc_term op_type, bcmolt_devid device_id)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+
+    bcmos_usleep(1000000);
+    mac_util_report_acc_term_event(BCMOLT_DEVICE_AUTO_ID_CONNECTION_COMPLETE);
+
+    return rc;
+}
+
+
+/**
+ * @brief set interface for loopback mode
+ * 
+ * @param p_interface_inst  Pointer to interface instance
+ * @param op_type           Operation type on access terminal/interface instance
+ * 
+ * @return bcmos_errno 
+ *
+ */
+bcmos_errno mac_util_interface_set_for_loopback(acc_term_interface *p_interface_inst, bal_util_oper_if op_type)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcmbal_interface_key intf_key = p_interface_inst->api_req_int_obj_info.key;
+    bcmbal_interface_cfg *p_interface_req = &(p_interface_inst->api_req_int_obj_info);
+
+    p_interface_req = &(p_interface_inst->api_req_int_obj_info);
+
+    /* If the user didn't specify a transceiver, then use the default */
+    if (BCMOS_FALSE == BCMBAL_CFG_PROP_IS_SET(p_interface_req, interface, transceiver_type))
+    {
+        BCMBAL_CFG_PROP_SET(p_interface_req, interface, transceiver_type, BCMBAL_MAC_UTIL_TRX_TYPE_DEFAULT_GPON);
+    }
+
+    mac_util_report_if_event(intf_key.intf_id, 
+            intf_key.intf_type,
+            BCM_ERR_OK, BCMOLT_RESULT_SUCCESS, 
+            ((BAL_UTIL_OPER_IF_UP == op_type) ? BCMOLT_PON_STATE_ACTIVE_WORKING : BCMOLT_PON_STATE_INACTIVE));
+
+
+    return rc;
+}
+
+
+/**
+ * @brief Set subscriber terminal for loopback mode
+ * 
+ * @param p_sub_term_inst   A pointer to a subscriber terminal instance
+ * @param op_type          Type of operation being performed on the subscriber terminal instance
+ * @param is_post_discovery Used for ADD, indicates if this request is after a ONU Discovery
+ *
+ * @return bcmos_errno 
+ */
+bcmos_errno mac_util_subscriber_terminal_set_for_loopback(sub_term_inst *p_sub_term_inst, bal_util_oper_sub_term op_type, bcmos_bool is_post_discovery)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcmbal_subscriber_terminal_cfg *p_sub_term_req = &p_sub_term_inst->api_req_sub_term_info;
+
+
+    mac_util_report_sub_term_event(p_sub_term_req->key.intf_id,
+        p_sub_term_req->key.sub_term_id, 
+        (bcmolt_serial_number *)NULL,
+        (BAL_UTIL_OPER_SUB_TERM_ADD == op_type ? BAL_UTIL_OPER_SUB_TERM_ADD : BAL_UTIL_OPER_SUB_TERM_REMOVE),
+        BCM_ERR_OK, BCMOLT_RESULT_SUCCESS,
+        (BAL_UTIL_OPER_SUB_TERM_ADD == op_type ? BCMOLT_ACTIVATION_FAIL_REASON_NONE : BCMOLT_RESULT_SUCCESS), BCMBAL_INVALID_TUNNEL_ID);
+
+    return rc;
+}
+
+
+/**
+ * @brief set flow for loopback mode
+ */
+bcmos_errno mac_util_flow_set_for_loopback(bcmbal_flow_cfg *p_flow_req, bal_util_oper_flow op_type, flow_inst *p_flow_core)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+
+    if (BAL_UTIL_OPER_FLOW_ADD == op_type)
+    {
+        mac_util_report_flow_add_success(p_flow_req->key, p_flow_req->data.access_int_id);
+    }
+    else if ((BAL_UTIL_OPER_FLOW_REMOVE == op_type) || (BAL_UTIL_OPER_FLOW_CLEAR == op_type))
+    {
+        mac_util_report_flow_remove_success(p_flow_req->key, p_flow_req->data.access_int_id, op_type);
+    }
+    else
+    {
+        rc = BCM_ERR_INVALID_OP;
+    }
+
+
+    return rc;
+}
+
+
+
+/*@}*/
diff --git a/bal_release/src/core/util/mac/bal_mac_util_xgpon.c b/bal_release/src/core/util/mac/bal_mac_util_xgpon.c
new file mode 100644
index 0000000..a49b3d7
--- /dev/null
+++ b/bal_release/src/core/util/mac/bal_mac_util_xgpon.c
@@ -0,0 +1,1493 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file bal_mac_util_xgpon.c
+ *
+ * @brief mac util interfaces definition used by Bal Core, for xgpon
+ *
+ * This file expose the APIs to the core to configure the mac 
+ * with regarding to the operation of access terminal, interface, subscriber terminal and flow.
+ *
+ * @addtogroup mac_util
+ */
+
+/*@{*/
+
+#include <bal_mac_util.h>
+#include <bal_mac_util_common_itu_pon.h>
+
+
+static bcmos_errno mac_util_indication_handle_for_xgpon_ni (bcmolt_devid device_id, bcmolt_msg *p_msg);
+static bcmos_errno mac_util_indication_handle_for_xgpon_onu (bcmolt_devid device_id, bcmolt_msg *p_msg);
+static bcmos_errno mac_util_indication_handle_for_xgpon_alloc_id (bcmolt_devid device_id, bcmolt_msg *p_msg);
+
+/* On XG-PON1 there is no indication such as GEM port configuration completed.
+ * GEM configuration at the ONU is taken care of completely by OMCI without any PLOAM sent from the OLT
+ * */
+
+/**
+ * @brief array stores the list of xgpon (XG-PON1) related auto indications from Maple to subscribe
+ */
+static mac_util_ind_obj_and_handlers mac_util_xgpon_ind_handlers[] =
+{
+    {BCMOLT_OBJ_ID_XGPON_NI,        "BCMOLT_OBJ_ID_XGPON_NI",    mac_util_indication_handle_for_xgpon_ni},
+    {BCMOLT_OBJ_ID_XGPON_ONU,       "BCMOLT_OBJ_ID_XGPON_ONU",   mac_util_indication_handle_for_xgpon_onu},
+    {BCMOLT_OBJ_ID_XGPON_ALLOC,     "BCMOLT_OBJ_ID_XGPON_ALLOC", mac_util_indication_handle_for_xgpon_alloc_id},
+};
+
+/**
+ * @brief Map bal XGPON transceiver type to bcm68620 transceiver type
+ */
+static bcmolt_xgpon_trx_type mac_xgpon_bal_trx_type2bcm68620_trx_type(bcmbal_trx_type bal_trx_type)
+{
+    bcmolt_xgpon_trx_type trx_type = BCMOLT_XGPON_TRX_TYPE__NUM_OF;
+
+    if (BCMBAL_TRX_TYPE_XGPON_LTH_7222_PC == bal_trx_type)
+    {
+        trx_type = BCMOLT_XGPON_TRX_TYPE_LTH_7222_PC;
+    }
+    else if (BCMBAL_TRX_TYPE_XGPON_LTH_7226_PC == bal_trx_type)
+    {
+        trx_type = BCMOLT_XGPON_TRX_TYPE_LTH_7226_PC;
+    }
+    else if (BCMBAL_TRX_TYPE_XGPON_LTH_5302_PC == bal_trx_type)
+    {
+        trx_type = BCMOLT_XGPON_TRX_TYPE_LTH_5302_PC;
+    }
+    else
+    {
+        trx_type = BCMOLT_XGPON_TRX_TYPE_USER_DEFINED;
+    }
+
+    return trx_type;
+}
+
+/**
+ * @brief all the maple indication handlers for xgpon
+ *
+ * @param device_id the maple device id generating the current indication
+ * @param p_msg pointer to the maple indication message
+ *
+ */
+bcmos_errno mac_util_handle_all_olt_ind_for_xgpon (bcmolt_devid device_id, bcmolt_msg *p_msg)
+{
+    BCM_LOG(DEBUG, log_id_mac_util,
+        "mac_util_indication_cb received indication obj=%d/%s group=%d subgroup=%d\n",
+        p_msg->obj_type, mac_util_indication_get_obj_type_str(p_msg->obj_type, mac_util_xgpon_ind_handlers, BCM_SIZEOFARRAY(mac_util_xgpon_ind_handlers)),
+        p_msg->group, p_msg->subgroup);
+
+    return mac_util_handle_indication(device_id, p_msg, mac_util_xgpon_ind_handlers, BCM_SIZEOFARRAY(mac_util_xgpon_ind_handlers));
+}
+
+
+/**
+ * @brief Handler function for Maple auto indications for xgpon (XG-PON1) NI
+ *
+ * @param device_id the maple device id generating the current indication
+ * @param p_msg pointer to the maple indication message
+ *
+ * @return bcmos_errno
+ */
+static bcmos_errno mac_util_indication_handle_for_xgpon_ni (bcmolt_devid device_id, bcmolt_msg *p_msg)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+	uint32_t logical_pon;
+
+    do
+   	{
+   
+     /* PON activation */
+        if (BCMOLT_XGPON_NI_AUTO_ID_STATE_CHANGE_COMPLETED == p_msg->subgroup)
+        {
+            bcmolt_xgpon_ni_state_change_completed * p_ind = (bcmolt_xgpon_ni_state_change_completed*)p_msg;
+
+		    rc = bcm_topo_pon_get_physical2logical(device_id, p_ind->key.pon_ni, &logical_pon);				
+    		if (BCM_ERR_OK != rc)
+		    {
+			    BCM_LOG(ERROR, log_id_mac_util,
+					    "Failed to get logical if from physical if (device_id %d physical %d ) (%s)\n", device_id, p_ind->key.pon_ni, bcmos_strerror(rc));
+			    break;
+		    }
+    
+            BCM_LOG(INFO, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(logical_pon), "Pon if %d is %s.\n", logical_pon,
+                BCMOLT_PON_STATE_ACTIVE_WORKING == p_ind->data.new_state ? "up" : "down");
+    
+            mac_util_report_if_event(logical_pon, BCMBAL_INTF_TYPE_PON, p_msg->err,
+                p_ind->data.result, p_ind->data.new_state);
+
+        }
+        else if(BCMOLT_XGPON_NI_AUTO_CFG_ID_ONU_DISCOVERED == p_msg->subgroup)
+        {
+            bcmolt_xgpon_ni_onu_discovered *p_ind =
+                (bcmolt_xgpon_ni_onu_discovered *)p_msg;
+
+		    rc = bcm_topo_pon_get_physical2logical(device_id, p_ind->key.pon_ni, &logical_pon);				
+    		if (BCM_ERR_OK != rc)
+		    {
+			    BCM_LOG(ERROR, log_id_mac_util,
+					    "Failed to get logical if from physical if (device_id %d physical %d ) (%s)\n", device_id, p_ind->key.pon_ni, bcmos_strerror(rc));
+			    break;
+		    }
+    
+    
+            BCM_LOG(DEBUG, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(logical_pon),
+                    "Pon if %d found ONU serial number "
+                    "%c%c%c%c%d%d%d%d%d%d%d%d\n",
+                    logical_pon,
+                    p_ind->data.serial_number.vendor_id[0],
+                    p_ind->data.serial_number.vendor_id[1],
+                    p_ind->data.serial_number.vendor_id[2],
+                    p_ind->data.serial_number.vendor_id[3],
+                    p_ind->data.serial_number.vendor_specific[0]>>4 & 0x0f,
+                    p_ind->data.serial_number.vendor_specific[0] & 0x0f,
+                    p_ind->data.serial_number.vendor_specific[1]>>4 & 0x0f,
+                    p_ind->data.serial_number.vendor_specific[1] & 0x0f,
+                    p_ind->data.serial_number.vendor_specific[2]>>4 & 0x0f,
+                    p_ind->data.serial_number.vendor_specific[2] & 0x0f,
+                    p_ind->data.serial_number.vendor_specific[3]>>4 & 0x0f,
+                    p_ind->data.serial_number.vendor_specific[3] & 0x0f
+                    );
+    
+            /* if we got something from MAC HW, then it has to be PON interface */
+            mac_util_report_sub_term_event(logical_pon,
+                                           p_ind->data.onu_id,
+                                           &p_ind->data.serial_number,
+                                           BAL_UTIL_OPER_SUB_TERM_DISCOVERY,
+                                           p_msg->err, BCM_ERR_OK,
+                                           BCMOLT_ACTIVATION_FAIL_REASON_NONE, BCMBAL_INVALID_TUNNEL_ID);
+        }
+
+        else
+        {
+            /* just get the pon key by typecasting to a dummy structure */
+            bcmolt_xgpon_ni_key *p_pon_key = &(((bcmolt_xgpon_ni_state_change_completed*)p_msg)->key);
+
+            rc = bcm_topo_pon_get_physical2logical(device_id, p_pon_key->pon_ni, &logical_pon);				
+    		if (BCM_ERR_OK != rc)
+		    {
+			    BCM_LOG(ERROR, log_id_mac_util,
+					    "Failed to get logical if from physical if (device_id %d physical %d ) (%s)\n", device_id, p_pon_key->pon_ni, bcmos_strerror(rc));
+			    break;
+		    }
+        
+            BCM_LOG(DEBUG, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(logical_pon),
+                "Unhandled message indication for obj XGPON_NI group %d "
+                "subgroup %d (Ignored)\n", p_msg->group, p_msg->subgroup);
+        }
+    }
+    while(0);	
+	
+    return rc;
+}
+
+
+/**
+ * @brief Handler function for Maple auto indications for xgpon (XG-PON1) ONU
+ *
+ * @param device_id the maple device id generating the current indication
+ * @param p_msg pointer to the maple indication message
+ *
+ * @return bcmos_errno
+ */
+static bcmos_errno mac_util_indication_handle_for_xgpon_onu (bcmolt_devid device_id, bcmolt_msg *p_msg)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    uint32_t logical_pon;
+    
+    /* just get the pon key by typecasting to a dummy structure */
+    bcmolt_xgpon_onu_key *p_xgpon_onu_key = &(((bcmolt_xgpon_onu_onu_activation_completed*)p_msg)->key);
+    do
+    {    
+        if (BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_ACTIVATION_COMPLETED == p_msg->subgroup)
+        {
+            bcmolt_xgpon_onu_onu_activation_completed *p_ind = (bcmolt_xgpon_onu_onu_activation_completed*) p_msg;
+            
+            rc = bcm_topo_pon_get_physical2logical(device_id, p_ind->key.pon_ni, &logical_pon);
+            if (BCM_ERR_OK != rc)
+            {
+                BCM_LOG(ERROR, log_id_mac_util,
+                    "Failed to get logical if from physical if (device_id %d physical %d ) (%s)\n", device_id, p_ind->key.pon_ni, bcmos_strerror(rc));
+                break;
+            }
+            
+            
+            BCM_LOG(INFO, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(logical_pon),
+                "sub_term %d (PON%d) activation indication (%s)\n",
+                p_ind->key.onu_id,
+                logical_pon,
+                bcmos_strerror(p_msg->err));
+            
+            mac_util_report_sub_term_event(logical_pon,
+                p_ind->key.onu_id,
+                (bcmolt_serial_number *)NULL,
+                BAL_UTIL_OPER_SUB_TERM_ADD,
+                p_msg->err, p_ind->data.status,
+                p_ind->data.fail_reason, BCMBAL_INVALID_TUNNEL_ID);
+            
+        }
+        else if(BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_DEACTIVATION_COMPLETED == p_msg->subgroup)
+        {
+            bcmolt_xgpon_onu_onu_deactivation_completed *p_ind = (bcmolt_xgpon_onu_onu_deactivation_completed*) p_msg;
+            rc = bcm_topo_pon_get_physical2logical(device_id, p_ind->key.pon_ni, &logical_pon);		
+            if (BCM_ERR_OK != rc)
+            {
+                BCM_LOG(ERROR, log_id_mac_util,
+                    "Failed to get logical if from physical if (device_id %d physical %d ) (%s)\n", device_id, p_ind->key.pon_ni, bcmos_strerror(rc));
+                break;
+            }      
+        
+            BCM_LOG(INFO, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(logical_pon),
+                "sub_term %d (PON%d) deactivation indication (%s)\n",
+                p_ind->key.onu_id,
+                p_ind->key.pon_ni,
+                bcmos_strerror(p_msg->err));
+        
+            mac_util_report_sub_term_event(logical_pon,
+                p_ind->key.onu_id,
+                (bcmolt_serial_number *)NULL,
+                BAL_UTIL_OPER_SUB_TERM_REMOVE,
+                p_msg->err, p_ind->data.status,
+                MAC_UTIL_DEACTIVATION_FAIL_REASON_NONE, BCMBAL_INVALID_TUNNEL_ID);
+        }
+        else
+        {
+            rc = bcm_topo_pon_get_physical2logical(device_id, p_xgpon_onu_key->pon_ni, &logical_pon);		
+            if (BCM_ERR_OK != rc)
+            {
+                BCM_LOG(ERROR, log_id_mac_util,
+                    "Failed to get logical if from physical if (device_id %d physical %d ) (%s)\n", device_id, p_xgpon_onu_key->pon_ni, bcmos_strerror(rc));
+                break;
+            }
+            
+            BCM_LOG(DEBUG, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(logical_pon),
+                "Unhandled message indication for obj XGPON_ONU group %d "
+                "subgroup %d (Ignored)\n", p_msg->group, p_msg->subgroup);
+            break;
+        }
+
+		rc = mac_util_update_flows_w_sub_term_update(logical_pon, p_xgpon_onu_key->onu_id, maple_xgpon_mac_check_gem_port_id, maple_xgpon_mac_get_alloc_id_config);
+		if (BCM_ERR_OK != rc)
+		{
+			BCM_LOG(ERROR, log_id_mac_util,
+					"Failed to update related flows pon_id = %d onu_id = %d (%s)\n", logical_pon, p_xgpon_onu_key->onu_id, bcmos_strerror(rc));
+			break;
+		}
+		
+    }while(0);
+    
+    return rc;
+}
+
+
+/**
+ * @brief Handler function for Maple auto indications for xgpon (XG-PON1) Alloc Id
+ *
+ * @param device_id the maple device id generating the current indication
+ * @param p_msg pointer to the maple indication message
+ *
+ * @return bcmos_errno
+ */
+static bcmos_errno mac_util_indication_handle_for_xgpon_alloc_id (bcmolt_devid device_id, bcmolt_msg *p_msg)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    uint32_t logical_pon;
+    tm_sched_inst* p_tm_sched_inst = NULL;	
+	do
+	{    	
+        if (BCMOLT_XGPON_ALLOC_AUTO_CFG_ID_CONFIGURATION_COMPLETED == p_msg->subgroup)
+        {
+            bcmolt_xgpon_alloc_configuration_completed *p_ind = (bcmolt_xgpon_alloc_configuration_completed*) p_msg;
+            rc = bcm_topo_pon_get_physical2logical(device_id, p_ind->key.pon_ni, &logical_pon);
+            if (BCM_ERR_OK != rc)
+            {
+                BCM_LOG(ERROR, log_id_mac_util,
+				    "Failed to get logical if from physical if (device_id %d physical %d ) (%s)\n", device_id, p_ind->key.pon_ni, bcmos_strerror(rc));
+
+                break;
+            }
+
+            /* Find tn_mode inst owned by that alloc_id and ni */
+            p_tm_sched_inst =  tm_sched_find_agg_port_node(logical_pon, p_ind->key.alloc_id);
+            if (NULL == p_tm_sched_inst )
+            {
+                BCM_LOG(ERROR, log_id_mac_util,
+				    "Failed to find tm sched owned by that agg port (intf %d id %d)\n", logical_pon,p_ind->key.alloc_id);
+				rc = BCM_ERR_NOENT;
+                break;
+            
+           	}
+
+            /*the tm owned by that alloc found, update it with the ind*/
+            mac_util_report_tm_sched_set_indication(p_tm_sched_inst->req_tm_sched_info.key ,p_msg->err, p_ind->data.status);
+
+        }
+        else
+        {
+            /* just get the pon key by typecasting to a dummy structure */
+            bcmolt_xgpon_alloc_key *p_pon_key = &(((bcmolt_xgpon_alloc_configuration_completed*)p_msg)->key);
+    
+            rc = bcm_topo_pon_get_physical2logical(device_id, p_pon_key->pon_ni, &logical_pon);
+            if (BCM_ERR_OK != rc)
+            {
+                BCM_LOG(ERROR, log_id_mac_util,
+                    "Failed to get logical if from physical if (device_id %d physical %d ) (%s)\n", device_id, p_pon_key->pon_ni, bcmos_strerror(rc));
+                break;
+            }
+            BCM_LOG(DEBUG, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(logical_pon),
+                    "Unhandled message indication for obj XGPON_ALLOC group %d "
+                    "subgroup %d (Ignored)\n", p_msg->group, p_msg->subgroup);
+        }
+
+	}
+	while (0);
+    return rc;
+}
+
+
+/**
+ * @brief  Maple auto indication register for specific xgpon (XG-PON1) based indications
+ *
+ * @param p_rx_cfg         handler config structure
+ * @param  device_id                         specific device id (for multiple devices support) 
+ *
+ * @return bcmos_errno
+ */
+bcmos_errno mac_util_register_for_xgpon_auto_indications (struct bcmolt_rx_cfg *p_rx_cfg, bcmolt_devid device_id)
+{
+    return _mac_util_register_for_auto_indications (p_rx_cfg, mac_util_xgpon_ind_handlers, BCM_SIZEOFARRAY(mac_util_xgpon_ind_handlers),device_id);
+}
+
+
+/**
+ * @brief common access terminal set for 10G pon if
+ */
+
+bcmos_errno mac_util_access_terminal_set_for_10G_itu_pon (bcmolt_device_cfg dev_cfg, bcmolt_devid device_id)
+{
+    bcmos_errno rc;
+    bcmolt_device_nni_speed nni_speed_cfg;
+
+#ifdef QAX_SWITCH
+		/* until speed is configurable through topology settings hardcode it based on switch type */ 
+		BCM_LOG(INFO, log_id_mac_util, "nni speed is: 10G\n");
+		nni_speed_cfg.first_half = BCMOLT_NNI_SPEED_GBPS_10;
+		nni_speed_cfg.second_half = BCMOLT_NNI_SPEED_GBPS_10;
+		BCMOLT_CFG_PROP_SET(&dev_cfg, device, nni_speed, nni_speed_cfg);
+#endif
+	
+		rc = bcmolt_cfg_set(device_id, &dev_cfg.hdr);
+
+		return rc;
+}
+
+
+/**
+ * @brief access terminal set for xgpon1_8
+ */
+bcmos_errno mac_util_access_terminal_set_for_xgpon_8 (acc_term_inst *p_acc_term, bal_util_oper_acc_term op_type, bcmolt_devid device_id)
+{
+    bcmos_errno rc;
+    bcmolt_device_key key = {};
+    bcmolt_device_cfg dev_cfg;
+
+    rc = maple_access_terminal_set_common(p_acc_term, op_type, device_id);
+    if (rc != BCM_ERR_OK)
+        return rc;
+
+    BCMOLT_CFG_INIT(&dev_cfg, device, key);
+    BCMOLT_CFG_PROP_SET(&dev_cfg, device, system_mode, BCMOLT_SYSTEM_MODE_XGPON_1__8_X);
+
+    rc = mac_util_access_terminal_set_for_10G_itu_pon(dev_cfg,device_id);
+    if (rc != BCM_ERR_OK)	
+        return rc;
+
+    return maple_access_terminal_connect_common(device_id);
+}
+
+
+/**
+ * @brief access terminal set for xgs_2_10
+ */
+bcmos_errno mac_util_access_terminal_set_for_xgs (acc_term_inst *p_acc_term, bal_util_oper_acc_term op_type, bcmolt_devid device_id)
+{
+    bcmos_errno rc;
+    bcmolt_device_key key = {};
+    bcmolt_device_cfg dev_cfg;
+
+    rc = maple_access_terminal_set_common(p_acc_term, op_type, device_id);
+    if (rc != BCM_ERR_OK)
+        return rc;
+
+    BCMOLT_CFG_INIT(&dev_cfg, device, key);
+    BCMOLT_CFG_PROP_SET(&dev_cfg, device, system_mode, BCMOLT_SYSTEM_MODE_XGS__2_X_10_G);
+
+    rc = mac_util_access_terminal_set_for_10G_itu_pon(dev_cfg, device_id);
+    if (rc != BCM_ERR_OK)	
+        return rc;
+
+    return maple_access_terminal_connect_common(device_id);
+}
+
+
+/** 
+  * @brief post access terminal up configurations on Maple
+  */
+bcmos_errno mac_util_access_terminal_post_indication_set_for_xgpon_xgs(bcmolt_devid device_id)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcmolt_devid dummy;
+    uint32_t physical_if_id;
+    uint32_t logical_pon = BCM_TOPO_PON_INVALID;
+    bcmolt_xgpon_ni_key ni_key = {};
+    bcmolt_xgpon_ni_cfg ni_cfg = {};
+    bcmolt_automatic_onu_deactivation automatic_onu_deactivation  = {};
+    bcmolt_xgpon_sn_acquisition sn_acquisition_cfg = {};
+    bcmolt_xgpon_ni_auto_cfg xgpon_ni_auto_cfg = {};  /* main auto cfg api struct */
+
+    /* configure one time settings for all the interfaces on this device */
+    BCM_TOPO_DEV_FOR_EACH_PON(device_id, logical_pon)
+    {
+        /* get physical interface from logical interface */
+        rc = bcm_topo_pon_get_logical2physical (logical_pon, &dummy, &physical_if_id);
+        if (BCM_ERR_OK != rc)
+        {
+            BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(logical_pon),
+                    "Failed to get physical if from logical if (%s)\n", bcmos_strerror(rc));
+            break;
+        }
+
+        ni_key.pon_ni = physical_if_id; 
+
+        /* Set the SN acquisition mode to enable */
+        BCMOLT_CFG_INIT(&ni_cfg, xgpon_ni, ni_key);
+
+        sn_acquisition_cfg.control = BCMOLT_CONTROL_STATE_ENABLE;
+        sn_acquisition_cfg.interval = 5000;
+        sn_acquisition_cfg.onu_post_discovery_mode = BCMOLT_ONU_POST_DISCOVERY_MODE_NONE;
+        sn_acquisition_cfg.burst_profile = 0;  /* Ranging burst profile - No FEC */
+        BCMOLT_CFG_PROP_SET(&ni_cfg, xgpon_ni, sn_acquisition, sn_acquisition_cfg);
+
+        /* Unlike GPON, the default behavior on Maple for XG-PON1 is not to deactivate the ONU in the below cases
+         * so here we specifically configure the Maple to behave on XG-PON1 as it does on GPON */
+        automatic_onu_deactivation.ack_timeout = BCMOS_TRUE;
+        automatic_onu_deactivation.loki = BCMOS_TRUE;
+        automatic_onu_deactivation.los = BCMOS_TRUE;
+        automatic_onu_deactivation.onu_alarms = BCMOS_TRUE;
+        automatic_onu_deactivation.sfi = BCMOS_TRUE;
+        automatic_onu_deactivation.tiwi = BCMOS_TRUE;
+        BCMOLT_CFG_PROP_SET(&ni_cfg, xgpon_ni, automatic_onu_deactivation, automatic_onu_deactivation);
+
+        rc = bcmolt_cfg_set(device_id, &ni_cfg.hdr);
+        if (rc != BCM_ERR_OK)
+        {
+            BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(logical_pon),
+                    "Failed to set sn acquisition and automatic onu deactivation configuration (%s),"
+                    " device_id=%d, ni_key.pon_ni=%d, err_text=%s)\n",
+                    bcmos_strerror(rc), device_id, ni_key.pon_ni, ni_cfg.hdr.hdr.err_text);
+            break;
+        }
+
+
+        /* turn off the auto indication messages for xgpon_ni.serial_number_acquisition_cycle_start  */
+        BCMOLT_AUTO_CFG_INIT(&xgpon_ni_auto_cfg, xgpon_ni, ni_key);
+        BCMOLT_AUTO_CFG_PROP_SET(&xgpon_ni_auto_cfg, xgpon_ni, serial_number_acquisition_cycle_start, BCMOS_FALSE);
+        rc = bcmolt_auto_cfg_set(device_id, &xgpon_ni_auto_cfg.hdr);
+        if (rc != BCM_ERR_OK)
+        {
+            BCM_LOG(WARNING, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(logical_pon),
+                    "bcmolt_auto_cfg_set for xgpon_ni.serial_number_acquisition_cycle_start, Failed (%s), err_text=%s)\n",
+                    bcmos_strerror(rc), xgpon_ni_auto_cfg.hdr.hdr.err_text);
+
+            /* ignore any error, just continue anyway */
+        }
+    }
+
+    return rc;
+}
+
+
+/**
+ * @brief Command Set setup routine for interface up to mac application for xgpon (XG-PON1)
+ *
+ * This routine is called by if_fsm in the BAL core to initialize the command
+ * set to up the interface of the mac application. The cmdset actually
+ * consists of two commands, one is to send the if up request message to the mac
+ * App and handle the relevant response, the other is to handle the indication message
+ * from the mac APP when the operation is completed.
+ *
+ * @param p_interface_inst  Pointer to interface instance
+ * @param op_type           Operation type on access terminal/interface instance
+ *
+ * @return bcmos_errno
+ *
+ */
+bcmos_errno mac_util_interface_set_for_xgpon(acc_term_interface *p_interface_inst, bal_util_oper_if op_type)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+
+    bcmbal_interface_cfg *p_interface_req = &(p_interface_inst->api_req_int_obj_info);
+    bcmbal_interface_key intf_key = p_interface_req->key;
+
+    do
+    {
+        bcmolt_devid device_id;
+        uint32_t physical_if_id;
+
+        /* get physical interface from logical interface */
+        rc = bcm_topo_pon_get_logical2physical (intf_key.intf_id, &device_id, &physical_if_id);
+        if (BCM_ERR_OK != rc)
+        {
+            BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(intf_key.intf_id),
+                    "Failed to get physical if from logical if (%s)\n", bcmos_strerror(rc));
+            break;
+        }
+
+        bcmolt_xgpon_ni_set_pon_state oper_ni;
+        bcmolt_xgpon_ni_key ni_key = { .pon_ni = physical_if_id };
+        bcmolt_xgpon_trx_cfg cfg = {};
+        bcmolt_xgpon_trx_key trx_key = { .pon_ni = physical_if_id };
+        bcmolt_xgpon_trx_type trx_type;
+
+        if (BAL_UTIL_OPER_IF_UP == op_type)
+        {
+
+            /* set the pon_ni transceiver configuration */
+            BCMOLT_CFG_INIT(&cfg, xgpon_trx, trx_key);
+
+            /* Get the current default burst profiles */
+            rc = bcmolt_cfg_get(device_id, &cfg.hdr);
+            if (rc != BCM_ERR_OK)
+            {
+                BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(intf_key.intf_id),
+                        "Failed to get trx configuration (%s), err_text=%s\n", bcmos_strerror(rc), cfg.hdr.hdr.err_text);
+                break;
+            }
+
+            /* If the user didn't specify a transceiver, then use the default */
+            if (BCMOS_TRUE != BCMBAL_CFG_PROP_IS_SET(p_interface_req, interface, transceiver_type))
+            {
+                if(BCM_TOPO_PON_MODE_XGPON == bcm_topo_pon_get_pon_mode(intf_key.intf_id))
+              	{
+                    /* The user didn't choose a transceiver type, so override it here
+                     * with the default value for XGPON
+                     */
+                    BCMBAL_CFG_PROP_SET(p_interface_req, interface, transceiver_type, BCMBAL_MAC_UTIL_TRX_TYPE_DEFAULT_XGPON);                                 
+               	}
+                else if (BCM_TOPO_PON_MODE_XGS == bcm_topo_pon_get_pon_mode(intf_key.intf_id))
+                {
+                    /* The user didn't choose a transceiver type, so override it here
+                     * with the default value for XGS
+                     */
+                    BCMBAL_CFG_PROP_SET(p_interface_req, interface, transceiver_type, BCMBAL_MAC_UTIL_TRX_TYPE_DEFAULT_XGS);                                                                         			
+                }
+            }
+
+            /* Set the (default or chosen) transceiver configuration into the MAC device */
+
+            trx_type = mac_xgpon_bal_trx_type2bcm68620_trx_type(p_interface_req->data.transceiver_type);
+
+            BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, transceiver_type, trx_type);
+
+            rc = bcmolt_cfg_set(device_id, &cfg.hdr);
+            if (rc != BCM_ERR_OK)
+            {
+                BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(intf_key.intf_id),
+                        "Failed to set trx configuration (%s), err_text=%s\n", bcmos_strerror(rc), cfg.hdr.hdr.err_text);
+                break;
+            }
+
+            /* No need to Configure pon_ni Inter-working on XG-PON1 as 
+             * direct mode is the only option available on this system mode 
+             */
+        }
+
+
+        /* invoke the pon_ni state change to the requested state */
+        BCMOLT_OPER_INIT(&oper_ni, xgpon_ni, set_pon_state, ni_key);
+        BCMOLT_OPER_PROP_SET(&oper_ni, xgpon_ni, set_pon_state, pon_state,
+            (BAL_UTIL_OPER_IF_UP == op_type) ?
+            BCMOLT_PON_OPERATION_ACTIVE_WORKING : BCMOLT_PON_OPERATION_INACTIVE);
+
+        rc = bcmolt_oper_submit(device_id, &oper_ni.hdr);
+        if (rc != BCM_ERR_OK)
+        {
+            BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(intf_key.intf_id),
+                    "Failed to %s (submit) pon interface (%s), err_text=%s\n",
+                    (BAL_UTIL_OPER_IF_UP == op_type) ? "activate" : "deactivate",
+                    bcmos_strerror(rc), oper_ni.hdr.hdr.err_text);
+        }
+
+    } while (0);
+
+    if (BCM_ERR_OK == rc)
+    {
+        BCM_LOG(DEBUG, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(intf_key.intf_id),
+                "Submitted INTERFACE-%s operation for IF %d\n",
+                (BAL_UTIL_OPER_IF_UP == op_type) ? "UP" : "DOWN",
+                intf_key.intf_id);
+    }
+
+    return rc;
+}
+
+
+/**
+ * @brief mac_util_validate_subscriber_terminal_info_for_xgpon (XG-PON1)
+ *
+ * This routine is used to validate all input attributes required for a sub term setting
+ * received from core for GPON
+ *
+ * @param p_sub_term_req       A pointer to a subscriber terminal object
+ *
+ * @return bcmos_errno
+ */
+bcmos_errno mac_util_validate_subscriber_terminal_info_for_xgpon(const bcmbal_subscriber_terminal_cfg *p_sub_term_req)
+{
+    if(BCMBAL_STATE_UP == p_sub_term_req->data.admin_state)
+    {
+        if (!BCMBAL_CFG_PROP_IS_SET (p_sub_term_req, subscriber_terminal, serial_number))
+        {
+            BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_sub_term_req->key.intf_id),
+                    "Serial number is a mandatory parameter for a xgpon subscriber terminal, and it is not set\n");
+            return BCM_ERR_MANDATORY_PARM_IS_MISSING;
+        }
+
+        if (!BCMBAL_CFG_PROP_IS_SET(p_sub_term_req, subscriber_terminal, registration_id))
+        {
+            BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_sub_term_req->key.intf_id),
+                    "Registration id is a mandatory parameter for a xgpon subscriber terminal, and it is not set\n");
+            return BCM_ERR_MANDATORY_PARM_IS_MISSING;
+        }
+    }
+
+    return BCM_ERR_OK;
+}
+
+
+/**
+ * @brief Command Set setup routine for subscriber terminal connect to mac application for xgpon (XG-PON1)
+ *
+ * This routine is called by sub_term_fsm in the BAL core to initialize the command
+ * set to connect the subscriber terminal of the mac application. The cmdset actually
+ * consists of two commands, one is to send the sub_term request message to the mac
+ * App and handle the relevant response, the other is to handle the indication message
+ * from the mac APP when the operation is completed.
+ *
+ * @param p_sub_term_inst   A pointer to a subscriber terminal instance
+ * @param op_type          Type of operation being performed on the subscriber terminal instance
+ * @param is_post_discovery  Used for ADD, indicates if this is a request after a ONU discovery
+ *
+ * @return bcmos_errno
+ *
+ * @note we configure Maple for ONU in 2 stages:
+ *  \li Stage 1: do cfg_set with the serial num, password, omci port, as part of first sub_term_set from Core
+ *  \li Stage 2: set the ONU state to ACTIVE using oper_submit, as part of second sub_term_set from Core (after
+ *                  receiving a Discovery indication)
+ */
+bcmos_errno mac_util_subscriber_terminal_set_for_xgpon(sub_term_inst *p_sub_term_inst, bal_util_oper_sub_term op_type, bcmos_bool is_post_discovery)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+
+    bcmbal_subscriber_terminal_cfg *p_sub_term_req = &p_sub_term_inst->api_req_sub_term_info;
+
+    do
+    {
+        bcmolt_devid device_id;
+        uint32_t physical_if_id;
+        /* get physical interface from logical interface */
+        rc = bcm_topo_pon_get_logical2physical (p_sub_term_req->key.intf_id, &device_id, &physical_if_id);
+        if (BCM_ERR_OK != rc)
+        {
+            BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_sub_term_req->key.intf_id),
+                    "Failed to get physical if from logical if (%s)\n", bcmos_strerror(rc));
+            break;
+        }
+
+        bcmolt_xgpon_onu_cfg cfg = {};
+        bcmolt_xgpon_onu_cfg onu_cfg_get = {};
+        bcmolt_xgpon_onu_set_onu_state oper = {};
+        bcmolt_xgpon_onu_key key = {};
+        bcmolt_onu_operation new_onu_state;
+
+        /* set the onu key - set it to the physical if id */
+        key.pon_ni = physical_if_id;
+        key.onu_id = p_sub_term_req->key.sub_term_id;
+
+        /* set the onu key */
+        BCMOLT_CFG_INIT(&cfg, xgpon_onu, key);
+
+       /* invoke onu state change operation to the new state */
+        BCMOLT_OPER_INIT(&oper, xgpon_onu, set_onu_state, key);
+
+        if(BAL_UTIL_OPER_SUB_TERM_CLEAR == op_type)
+        {
+            /* Delete the configuration of the ONU */
+            rc = bcmolt_cfg_clear(device_id, &cfg.hdr);
+            if (BCM_ERR_OK != rc)
+            {
+                BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_sub_term_req->key.intf_id),
+                        "Failed to clear onu configuration(%s)\n",
+                        bcmos_strerror(rc));
+            }
+
+            /* No indication from Maple will result from the clear operation
+             * so fake it here
+             */
+            mac_util_report_sub_term_event(p_sub_term_req->key.intf_id,
+                                           p_sub_term_req->key.sub_term_id,
+                                           (bcmolt_serial_number *)NULL,
+                                           BAL_UTIL_OPER_SUB_TERM_CLEAR,
+                                           rc, rc,
+                                           MAC_UTIL_DEACTIVATION_FAIL_REASON_NONE, BCMBAL_INVALID_TUNNEL_ID);
+
+            /* No further processing is required for the CLEAR operation */
+            break;
+
+
+        }
+        else if(BAL_UTIL_OPER_SUB_TERM_ADD == op_type)
+        {
+            /* first do a get, to see if onu is in active state already */
+            BCMOLT_CFG_INIT(&onu_cfg_get, xgpon_onu, key);
+            BCMOLT_CFG_PROP_GET(&onu_cfg_get, xgpon_onu, onu_state);
+            rc = bcmolt_cfg_get(device_id, &onu_cfg_get.hdr);
+            if (rc != BCM_ERR_OK)
+            {
+                BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_sub_term_req->key.intf_id),
+                        "Failed to get onu configuration(%s), err_text=%s, ... continue to configure\n",
+                        bcmos_strerror(rc), onu_cfg_get.hdr.hdr.err_text);
+
+                /* don't break, but continue with the set anyways */
+            }
+            else
+            {
+                BCM_LOG(DEBUG, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_sub_term_req->key.intf_id),
+                            "%s: ONU state = %d, [pon_ni=%d, onu_id=%d], BEFORE doing cfg_set on Maple\n",
+                            __FUNCTION__, onu_cfg_get.data.onu_state, onu_cfg_get.key.pon_ni, onu_cfg_get.key.onu_id);
+            }
+
+
+            if ((BCM_ERR_OK == rc) && (BCMOLT_ONU_STATE_ACTIVE == onu_cfg_get.data.onu_state))
+            {
+                BCM_LOG(INFO, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_sub_term_req->key.intf_id),
+                        "%s: ONU already in active state during ADD. Skipping further config\n",
+                        __FUNCTION__);
+
+                mac_util_report_sub_term_event(p_sub_term_req->key.intf_id,
+                                       p_sub_term_req->key.sub_term_id,
+                                       (bcmolt_serial_number *)NULL,
+                                       BAL_UTIL_OPER_SUB_TERM_ADD,
+                                       rc, rc,
+                                       BCMOLT_ACTIVATION_FAIL_REASON_NONE, BCMBAL_INVALID_TUNNEL_ID);
+                break;
+            }
+
+
+            /* set the SN & Registration ID only if it being configured for the first time */
+            if (BCMOS_FALSE == is_post_discovery)
+            {
+                BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, serial_number,
+                                    *((bcmolt_serial_number *)&p_sub_term_req->data.serial_number));
+
+                BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, registration_id,
+                                    *((bcmolt_arr_u8_36 *)&p_sub_term_req->data.registration_id));
+
+                BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, registration_id_auto_learning, BCMOS_TRUE);
+
+                /* Ranging burst profile - No FEC */
+                BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, ranging_burst_profile, 0);
+
+                /* Data burst profile - No FEC */
+                BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, data_burst_profile, 1);
+
+
+                /* XG-PON1 - No need to set US FEC - it is part of the burst profile */
+                /* XG-PON1 - No need to set ONU management channel port as it is identical to the ONU ID*/
+
+                rc = bcmolt_cfg_set(device_id, &cfg.hdr);
+                if (rc != BCM_ERR_OK)
+                {
+                    BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_sub_term_req->key.intf_id),
+                            "Failed to set onu configuration(%s), err_text=%s\n",
+                            bcmos_strerror(rc), cfg.hdr.hdr.err_text);
+                    break;
+                }
+
+                /**
+                 * @note If this is first time set for ADD, then skip setting the ONU state for now.
+                 * Wait until ONU Discovery is received.
+                 */
+                break;
+            }
+
+            /*
+             * Set the new onu state for the ADD operation
+             */
+            BCM_LOG(DEBUG, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_sub_term_req->key.intf_id),
+                    "Setting ONU state to active\n");
+
+            new_onu_state = BCMOLT_ONU_OPERATION_ACTIVE;
+        }
+        else if (BAL_UTIL_OPER_SUB_TERM_REMOVE == op_type)
+        {
+            /* If the ONU is not present, then it will never respond to the deactivate command
+             * with an indication, so just allow the FSM to continue as if it did.
+             */
+            if(BCMBAL_STATUS_NOT_PRESENT != p_sub_term_inst->current_sub_term_info.data.oper_status)
+            {
+                /*
+                 * Set the new onu state for the REMOVE operation
+                 */
+                BCM_LOG(INFO, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_sub_term_req->key.intf_id),
+                        "Setting ONU state to IN-active\n");
+
+                new_onu_state = BCMOLT_ONU_OPERATION_INACTIVE;
+            }
+        }
+        else /* This should never happen */
+        {
+            BCM_LOG(ERROR, log_id_mac_util, "Bad request from core\n");
+            rc = BCM_ERR_INTERNAL;
+            break;
+        }
+
+        /* Do oper_submit to set the ONU state */
+        BCMOLT_OPER_PROP_SET(&oper, xgpon_onu, set_onu_state, onu_state, new_onu_state);
+        rc = bcmolt_oper_submit(device_id, &oper.hdr);
+        if (BCM_ERR_OK != rc)
+        {
+            BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_sub_term_req->key.intf_id),
+                    "bcmolt_oper_submit Failed for onu state  Failed (%s), err_text=%s\n",
+                    bcmos_strerror(rc), &(oper.hdr.hdr.err_text[0]));
+        }
+
+
+        /* If the ONU is not present, then it will never respond to the deactivate command
+         * with an indication, so just allow the FSM to continue as if it did.
+         */
+        if((BCMOLT_ONU_OPERATION_INACTIVE == new_onu_state) &&
+           (BCMBAL_STATUS_NOT_PRESENT == p_sub_term_inst->current_sub_term_info.data.oper_status))
+        {
+            mac_util_report_sub_term_event(p_sub_term_req->key.intf_id,
+                                           p_sub_term_req->key.sub_term_id,
+                                           (bcmolt_serial_number *)NULL,
+                                           BAL_UTIL_OPER_SUB_TERM_REMOVE,
+                                           rc, rc,
+                                           MAC_UTIL_DEACTIVATION_FAIL_REASON_NONE, BCMBAL_INVALID_TUNNEL_ID);
+        }
+
+    } while (0);
+
+
+
+    if (rc == BCM_ERR_STATE)
+    {
+        BCM_LOG(INFO, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_sub_term_req->key.intf_id),
+                "%s failed to set state, possibly because interface is not configured yet, pon fiber disconnect, or onu disconnect: rc = %s (%d)\n",
+                __FUNCTION__,
+                bcmos_strerror(rc), rc);
+    }
+    else if (BCM_ERR_OK != rc)
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_sub_term_req->key.intf_id),
+                "%s Failed: rc = %s (%d)\n",
+                __FUNCTION__,
+                bcmos_strerror(rc), rc);
+    }
+
+    return rc;
+}
+
+
+/**
+ * @brief validate_flow_info for xgpon (XG-PON1)
+ *
+ * This routine is used to validate all input attributes required for a flow
+ * setting received from core for XG-PON1
+ *
+ * @param p_flow_req     A pointer to a flow object
+ *
+ * @return bcmos_errno
+ */
+bcmos_errno mac_util_validate_flow_info_for_xgpon (const bcmbal_flow_cfg *p_flow_req)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+
+    if (p_flow_req->key.flow_type == BCMBAL_FLOW_TYPE_UPSTREAM)
+    {
+        if (!BCMBAL_CFG_PROP_IS_SET(p_flow_req, flow, agg_port_id))
+        {
+            BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow_req->data.access_int_id),
+                    "agg port id is a mandatory parameter for an US flow, and it is not set\n");
+            rc = BCM_ERR_MANDATORY_PARM_IS_MISSING;
+        }
+
+    }
+
+    return rc;
+}
+/* As there is no indication on gem port configuration completion, for xgpon
+    we will have to initiate querying it right after configuring it and retrieve the gem port state.
+    we can not assume it is activated (for example if the onu is not present)
+*/
+static bcmos_errno maple_mac_xgpon_update_svc_port_ind_flag (bcmbal_flow_cfg *p_flow_req, flow_list_entry *p_mac_util_flow_entry)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcmolt_xgpon_gem_port_key gem_key = {};
+    bcmolt_xgpon_gem_port_cfg gem_cfg = {};
+    bcmolt_devid device_id;
+    uint32_t physical_if_id;
+    
+    GET_DEVICE_ID_AND_PHYSICAL_ID_FROM_IF_ID(p_flow_req->data.access_int_id, device_id, physical_if_id);
+    
+    /* set the gem port object key */
+    gem_key.pon_ni = physical_if_id;
+    gem_key.gem_port_id = p_flow_req->data.svc_port_id;
+    BCMOLT_CFG_INIT(&gem_cfg, xgpon_gem_port, gem_key);
+    BCMOLT_CFG_PROP_GET(&gem_cfg, xgpon_gem_port, all_properties);
+    
+    rc = bcmolt_cfg_get(device_id, &gem_cfg.hdr);
+    if(BCM_ERR_OK != rc)
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow_req->data.access_int_id),
+            "%s FAILED to gem xgpon_gem_port configuration : device_id = %d if_id = %d gem_port_id = %d \n",
+            __FUNCTION__,
+            device_id, p_flow_req->data.access_int_id, p_flow_req->data.svc_port_id);
+        
+        return rc;
+    }
+    
+    if ( BCMOLT_XGPON_GEM_PORT_STATE_ACTIVE == gem_cfg.data.gem_port_state)
+    {
+        p_mac_util_flow_entry->is_waiting_for_svc_port_active = BCMOS_FALSE;    
+    }
+    return rc;
+}
+
+/**
+ * @brief flow set for xgpon (XG-PON1)
+ * @param p_flow_req   pointer to flow request structure from core
+ * @param op_type      ADD, REMOVE or CLEAR
+ * @param p_flow_core  core FSM DB flow context passed as a cookie
+ *
+ * @return errno    error
+ *
+ * @todo shift this out to mac specific files
+ */
+bcmos_errno mac_util_flow_set_for_xgpon (bcmbal_flow_cfg *p_flow_req, bal_util_oper_flow op_type, flow_inst *p_flow_core)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    uint16_t per_flow_mode_vlan_id = 0; /* hold the value of the vlan tag to use in per-flow mode */
+    uint8_t pbits_val = 0;
+    flow_list_entry *p_mac_util_flow_entry = NULL;
+
+    /* Check the operation id */
+    if ((BAL_UTIL_OPER_FLOW_ADD != op_type)    &&
+        (BAL_UTIL_OPER_FLOW_REMOVE != op_type) &&
+        (BAL_UTIL_OPER_FLOW_CLEAR != op_type))
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow_req->data.access_int_id),
+                "Unexpected mac_util flow operation %d \n", op_type);
+        return BCM_ERR_PARM;
+    }
+
+    /* flow Add or Modify */
+    if (BAL_UTIL_OPER_FLOW_ADD == op_type)
+    {
+        switch (p_flow_req->key.flow_type)
+        {
+            /* unicast flows */
+            case BCMBAL_FLOW_TYPE_UPSTREAM:
+            case BCMBAL_FLOW_TYPE_DOWNSTREAM:
+            {
+                if (p_flow_req->data.classifier.o_pbits)
+                {
+                    /* o_pbits  can only take one p-bit value */
+                    pbits_val = p_flow_req->data.classifier.o_pbits;
+                }
+                else
+                {
+                    pbits_val = 0;
+                }
+
+                /* create a gem port id and relevant flow for a single pbit, or with no pbit */
+                /* pass on the op type also to specify if it is FLOW_ADD OR FLOW_MODIFY */
+                rc = maple_mac_unicast_flow_add(p_flow_req, pbits_val, per_flow_mode_vlan_id, op_type, &p_mac_util_flow_entry);
+                if ((BCM_ERR_OK != rc) || (NULL == p_mac_util_flow_entry))
+                {
+                    break;
+                }
+
+                /* mark flow configuration to device completed */
+                mac_util_mark_flow_config_complete(p_mac_util_flow_entry);
+                rc = maple_mac_xgpon_update_svc_port_ind_flag (p_flow_req, p_mac_util_flow_entry);
+				
+            }
+            break;
+
+            case BCMBAL_FLOW_TYPE_BROADCAST:
+            {
+                rc = maple_mac_broadcast_flow_add(p_flow_req, per_flow_mode_vlan_id, op_type, &p_mac_util_flow_entry);
+            }
+            break;
+
+            default:
+                BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow_req->data.access_int_id),
+                        "Unknown flow type %d\n",
+                        p_flow_req->key.flow_type);
+                rc = BCM_ERR_PARM;
+                break;
+        }
+    }
+    else if ((BAL_UTIL_OPER_FLOW_REMOVE == op_type) ||
+             (BAL_UTIL_OPER_FLOW_CLEAR == op_type))
+    {
+        /* find the flow */
+        p_mac_util_flow_entry = _mac_util_db_flow_get_w_flow_key(p_flow_req->data.access_int_id, &(p_flow_req->key));
+        if (NULL == p_mac_util_flow_entry)
+        {
+            rc = BCM_ERR_NOENT;
+            if (BAL_UTIL_OPER_FLOW_CLEAR != op_type)
+            {
+                BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow_req->data.access_int_id),
+                    "%s: NULL mac util flow entry to remove: flow id: %d, flow_type: %s\n",
+                    __FUNCTION__,
+                    p_flow_req->key.flow_id,
+                    (p_flow_req->key.flow_type == BCMBAL_FLOW_TYPE_UPSTREAM ? "up":"down"));
+            }
+
+            goto exit;
+        }
+
+        switch (p_flow_req->key.flow_type)
+        {
+            /* unicast flows */
+            case BCMBAL_FLOW_TYPE_UPSTREAM:
+            case BCMBAL_FLOW_TYPE_DOWNSTREAM:
+            {
+                /** Remove unicast GEM/Alloc Id from Maple and flow entry from local database */
+                rc = maple_mac_unicast_flow_remove(p_flow_req, op_type, p_mac_util_flow_entry);
+                if (BCM_ERR_OK != rc)
+                {
+                    break;
+                }
+
+                /* mark flow De-configuration to device completed */
+                mac_util_mark_flow_config_complete(p_mac_util_flow_entry);
+            }
+            break;
+
+            case BCMBAL_FLOW_TYPE_BROADCAST:
+            {
+                rc = maple_mac_broadcast_flow_remove(p_flow_req, per_flow_mode_vlan_id, op_type, p_mac_util_flow_entry);
+            }
+            break;
+
+            default:
+                BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow_req->data.access_int_id),
+                        "Unknown flow type %d\n",
+                        p_flow_req->key.flow_type);
+                rc = BCM_ERR_PARM;
+                break;
+        }
+
+    } /* Flow Remove */
+    else
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(p_flow_req->data.access_int_id),
+                "Unknown flow op type %d for flow id/type = %d/%d\n",
+                op_type, p_flow_req->key.flow_id, p_flow_req->key.flow_type);
+        rc = BCM_ERR_PARM;
+    }
+
+exit:
+    if (BCM_ERR_OK == rc)
+    {
+        /*
+         * Check flow entry flags to see if an indication to Core should be triggered immediately:
+         *  (Special handling for flow configuration, for the case no device configuration is needed,
+         *  and/or no indication from device is expected - could be the case of a single/multiple
+         *  gem ports used for us and ds, and us was already configured.
+         *  - send the flow ind immediately
+         */
+        check_send_flow_bal_ind_msg(p_mac_util_flow_entry, BCM_ERR_OK, BCMOLT_RESULT_SUCCESS);
+    }
+    else
+    {
+        if ((BCM_ERR_NOENT == rc) && (BAL_UTIL_OPER_FLOW_CLEAR == op_type))
+        {
+            /*
+             * For flow CLEAR, and if no flow entry is found, then fake an indication success to Core,
+             * for it to execute the flow state machine.
+             * The reasons for flow entry not found could be because the flow was already admin-ed Down.
+             * Admin-down of a flow causes mac util to clear flow config and flow instance from itself
+             * and the maple HW. However, Core FSM still keeps it's flow instance during admin down state.
+             */
+            mac_util_report_flow_remove_success (p_flow_req->key, p_flow_req->data.access_int_id, op_type);
+            rc = BCM_ERR_OK;
+        }
+    }
+    //else if there was an error during config, just return a failure; no need to send back indication for that.
+
+
+    return rc;
+}
+
+bcmos_errno maple_xgpon_mac_check_gem_port_id(uint32_t if_id, uint32_t onu_id, uint16_t svc_port_id, 
+                                                                 bcmos_bool *is_configured, bcmos_bool *is_activated)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcmolt_xgpon_gem_port_key gem_key = {};
+    bcmolt_xgpon_gem_port_cfg gem_cfg = {};
+    bcmolt_devid device_id;
+    uint32_t physical_if_id;
+    
+    GET_DEVICE_ID_AND_PHYSICAL_ID_FROM_IF_ID(if_id, device_id, physical_if_id);
+    
+    /* set the gem port object key */
+    gem_key.pon_ni = physical_if_id;
+    gem_key.gem_port_id = svc_port_id;
+    BCMOLT_CFG_INIT(&gem_cfg, xgpon_gem_port, gem_key);
+    BCMOLT_CFG_PROP_GET(&gem_cfg, xgpon_gem_port, all_properties);
+    
+    rc = bcmolt_cfg_get(device_id, &gem_cfg.hdr);
+    if(BCM_ERR_OK != rc)
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(if_id),
+                    "%s FAILED to gem xgpon_gem_port configuration : device_id = %d if_id = %d gem_port_id = %d \n",
+                    __FUNCTION__,
+                    device_id, if_id, svc_port_id);
+        return rc;
+    }
+    
+    /* may be configured; does gem belong to same onu ? */
+    if (BCMOLT_XGPON_GEM_PORT_STATE_NOT_CONFIGURED != gem_cfg.data.gem_port_state && onu_id != gem_cfg.data.onu_id)
+    {	
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(if_id),
+                    "%s FAILED, onu id mismatch: svc_port_id = %d if_id = %d is already assigned to onu_id = %d (not to onu id %d) \n",
+                    __FUNCTION__,
+                    svc_port_id, if_id, gem_cfg.data.onu_id, onu_id);    
+        return BCM_ERR_PARM;
+    }
+    *is_configured = BCMOLT_XGPON_GEM_PORT_STATE_NOT_CONFIGURED != gem_cfg.data.gem_port_state;
+    *is_activated = BCMOLT_XGPON_GEM_PORT_STATE_ACTIVE == gem_cfg.data.gem_port_state;
+    
+    return rc;
+}
+
+
+bcmos_errno maple_xgpon_gem_port_id_add(uint32_t if_id, uint16_t svc_port_id, uint32_t onu_id, bcmolt_gem_port_configuration *configuration)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcmolt_xgpon_gem_port_key gem_key = {};
+    bcmolt_xgpon_gem_port_cfg gem_cfg = {};
+    bcmolt_devid device_id;
+    uint32_t physical_if_id;
+
+    GET_DEVICE_ID_AND_PHYSICAL_ID_FROM_IF_ID(if_id, device_id, physical_if_id);
+
+    /* set the gem port object key */
+    gem_key.pon_ni = physical_if_id;
+    gem_key.gem_port_id = svc_port_id;
+    BCMOLT_CFG_INIT(&gem_cfg, xgpon_gem_port, gem_key);
+
+    /* set the gem port configuration */
+    if (onu_id < BCMOLT_XGPON_ONU_ID_ANY)
+    {
+        BCMOLT_CFG_PROP_SET(&gem_cfg, xgpon_gem_port, onu_id, onu_id);
+        BCMOLT_CFG_PROP_SET(&gem_cfg, xgpon_gem_port, upstream_destination_queue,
+            BCMOLT_US_GEM_PORT_DESTINATION_DATA);
+    }
+    BCMOLT_CFG_PROP_SET(&gem_cfg, xgpon_gem_port, encryption_mode,
+        BCMOLT_CONTROL_STATE_DISABLE);
+    BCMOLT_CFG_PROP_SET(&gem_cfg, xgpon_gem_port, configuration, *configuration);
+    BCMOLT_CFG_PROP_SET(&gem_cfg, xgpon_gem_port, control, BCMOLT_CONTROL_STATE_ENABLE);
+
+    rc = bcmolt_cfg_set(device_id, &gem_cfg.hdr);
+    if(BCM_ERR_OK != rc)
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(if_id),
+                "%s FAILED: rc=%s (%d), svc_port_id = %d if_id = %d onu_id = %d, err_text=%s\n",
+                __FUNCTION__,
+                bcmos_strerror(rc), rc, svc_port_id, if_id, onu_id, gem_cfg.hdr.hdr.err_text);
+    }
+
+    return rc;
+}
+
+
+bcmos_errno maple_xgpon_gem_port_id_remove(uint32_t if_id, uint16_t svc_port_id)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcmolt_xgpon_gem_port_key gem_key = {};
+    bcmolt_xgpon_gem_port_cfg gem_cfg = {};
+    bcmolt_devid device_id;
+    uint32_t physical_if_id;
+
+    GET_DEVICE_ID_AND_PHYSICAL_ID_FROM_IF_ID(if_id, device_id, physical_if_id);
+
+    gem_key.pon_ni = physical_if_id;
+    gem_key.gem_port_id = svc_port_id;
+    BCMOLT_CFG_INIT(&gem_cfg, xgpon_gem_port, gem_key);
+    rc = bcmolt_cfg_clear(device_id, &gem_cfg.hdr);
+    if (BCM_ERR_OK != rc)
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(if_id), "%s failed with error %s\n",__FUNCTION__, bcmos_strerror(rc));
+    }
+
+    return rc;
+}
+
+
+bcmos_errno maple_xgpon_mac_get_alloc_id_config (uint32_t if_id, uint32_t onu_id, uint16_t agg_id, bcmolt_alloc_state *alloc_id_state)
+	
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcmolt_xgpon_alloc_key alloc_key = {};
+    bcmolt_xgpon_alloc_cfg alloc_cfg = {};
+    bcmolt_devid device_id;
+    uint32_t physical_if_id;
+
+    GET_DEVICE_ID_AND_PHYSICAL_ID_FROM_IF_ID(if_id, device_id, physical_if_id);
+
+    /* set the alloc-id key */
+    alloc_key.pon_ni = physical_if_id;
+    alloc_key.alloc_id = agg_id;
+    BCMOLT_CFG_INIT(&alloc_cfg, xgpon_alloc, alloc_key);
+    BCMOLT_CFG_PROP_GET(&alloc_cfg, xgpon_alloc, all_properties);
+
+    rc = bcmolt_cfg_get(device_id, &alloc_cfg.hdr);
+    if(BCM_ERR_OK != rc)
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(if_id),
+                "%s: FAILED in bcmolt_cfg_get rc = %s, agg_id = %d if_id = %d\n",
+                __FUNCTION__,
+                bcmos_strerror(rc), agg_id, if_id);
+
+        return rc;
+    }
+	
+    /* may be configured; does alloc id belong to the expected onu ? */
+    if (alloc_cfg.data.state != BCMOLT_ALLOC_STATE_NOT_CONFIGURED
+		&& alloc_cfg.data.onu_id != onu_id)
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(if_id),
+                "%s FAILED, onu id mismatch: agg_id = %d if_id = %d is set to onu %d NOT to onu_id = %d\n",
+                __FUNCTION__,
+                agg_id, if_id, alloc_cfg.data.onu_id, onu_id);
+
+        return BCM_ERR_PARM;
+    }
+    *alloc_id_state = alloc_cfg.data.state;
+
+    return BCM_ERR_OK;
+}
+
+
+bcmos_errno maple_xgpon_us_alloc_id_add(uint32_t if_id, uint32_t onu_id, uint16_t agg_id, bcmolt_pon_alloc_sla agg_sla)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcmolt_xgpon_alloc_key alloc_key = {};
+    bcmolt_xgpon_alloc_cfg alloc_cfg = {};
+    bcmolt_devid device_id;
+    uint32_t physical_if_id;
+
+    GET_DEVICE_ID_AND_PHYSICAL_ID_FROM_IF_ID(if_id, device_id, physical_if_id);
+
+
+    /* set the alloc-id key */
+    alloc_key.pon_ni = physical_if_id;
+    alloc_key.alloc_id = agg_id;
+    BCMOLT_CFG_INIT(&alloc_cfg, xgpon_alloc, alloc_key);
+
+    BCMOLT_CFG_PROP_SET(&alloc_cfg, xgpon_alloc, sla, agg_sla);
+    /* set the alloc-id - onu assignment */
+    BCMOLT_CFG_PROP_SET(&alloc_cfg, xgpon_alloc, onu_id, onu_id);
+
+    rc = bcmolt_cfg_set(device_id, &alloc_cfg.hdr);
+    if(BCM_ERR_OK != rc)
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(if_id),
+                "%s: rc = %s, agg_id = %d if_id = %d, sla = {g bw: %d, max bw: %d, cb_nrt_bw: %d, cb_rt_bw: %d}\n",
+                __FUNCTION__,
+                bcmos_strerror(rc), agg_id, if_id, 
+                agg_sla.guaranteed_bw, agg_sla.maximum_bw, agg_sla.cbr_nrt_bw, agg_sla.cbr_rt_bw);
+
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(if_id),
+                "err_text = %s\n",
+                alloc_cfg.hdr.hdr.err_text);
+    }
+    return rc;
+}
+
+
+bcmos_errno maple_xgpon_us_alloc_id_remove(uint32_t if_id, uint16_t agg_id)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcmolt_xgpon_alloc_key alloc_key = {};
+    bcmolt_xgpon_alloc_cfg alloc_cfg = {};
+    bcmolt_devid device_id;
+    uint32_t physical_if_id;
+
+    GET_DEVICE_ID_AND_PHYSICAL_ID_FROM_IF_ID(if_id, device_id, physical_if_id);
+
+    /* set the alloc-id key */
+    alloc_key.pon_ni = physical_if_id;
+    alloc_key.alloc_id = agg_id;
+    BCMOLT_CFG_INIT(&alloc_cfg, xgpon_alloc, alloc_key);
+
+    rc = bcmolt_cfg_clear(device_id, &alloc_cfg.hdr);
+    if (BCM_ERR_OK != rc)
+    {
+        BCM_LOG(ERROR, MAC_UTIL_GET_LOG_ID_FOR_PON_IF(if_id), "%s failed with error %s\n",__FUNCTION__, bcmos_strerror(rc));
+    }
+    return rc;
+}
+
+/**
+ * @brief group set for xgpon (XG-PON1)
+ * @param p_group_req  pointer to group request structure from core
+ * @param op_type      ADD, REMOVE or SET
+ * @param p_group_inst pointer to the Core Group Object instance
+ *
+ * @return errno    error
+ *
+ * @todo shift this out to mac specific files
+ */
+bcmos_errno mac_util_group_set_for_xgpon (bcmbal_group_cfg *p_group_req, bal_util_oper_group op_type, group_inst *p_group_inst)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    uint16_t svc_port_id;
+    uint32_t if_id, i, ref_count;
+    bcmolt_gem_port_configuration configuration = {0};
+
+    /* Check the operation id */
+    if ((BAL_UTIL_OPER_GROUP_ADD != op_type)    &&
+        (BAL_UTIL_OPER_GROUP_REMOVE != op_type) &&
+        (BAL_UTIL_OPER_GROUP_SET != op_type))
+    {
+        BCM_LOG(ERROR, log_id_mac_util,
+                "Unexpected mac_util xgpon group operation %d \n", op_type);
+        return BCM_ERR_PARM;
+    }
+        
+    configuration.direction = BCMOLT_GEM_PORT_DIRECTION_DOWNSTREAM;
+    configuration.type = BCMOLT_GEM_PORT_TYPE_MULTICAST;
+        
+    /* for group SET operation, first remove the old multicast GEM */
+    if (BAL_UTIL_OPER_GROUP_SET == op_type)
+    {
+        bcmbal_group_cfg *p_group_rem_req;
+        /* use the Core DB for existing members - store in current_flow_info */
+        p_group_rem_req = &p_group_inst->current_group_info;
+        for(i=0; i< p_group_rem_req->data.members.len; i++)
+        {  
+            if_id = p_group_rem_req->data.members.val[i].intf_id;
+            svc_port_id = p_group_rem_req->data.members.val[i].svc_port_id;
+            /* svc_port_id may be 0 in the current info when the group had no owner.
+               skip the remove if that is the case */
+            if(svc_port_id)
+            { 
+                rc = rsc_mgr_gem_get_ref_count(if_id, svc_port_id, &ref_count);
+                if(BCM_ERR_OK != rc)
+                {
+                    BCM_LOG(ERROR, log_id_mac_util,
+                    "mac_util xgpon group get reference count on interface %d (gem %d) failed \n", if_id, svc_port_id);
+                    return rc;
+                }
+                /* if other group is referencing the same GEM (ref_count > 1), do not call Mac API to remove it.
+                   The core will ask Resource Manger to decrease the counter if everything is good */
+                if ( ref_count == 1)
+                {
+                    rc = maple_xgpon_gem_port_id_remove(if_id, svc_port_id);
+                
+                    if(BCM_ERR_OK != rc)
+                    {
+                        BCM_LOG(ERROR, log_id_mac_util,
+                        "mac_util xgpon group set operation SET on remove interface %d (gem %d) failed \n", if_id, svc_port_id);
+                        return rc;
+                    }
+                }
+                else if ( ref_count == 0)
+                {  
+                    BCM_LOG(WARNING, log_id_mac_util,
+                        "mac_util xgpon group operation SET on interface %d (gem %d) remove with 0 reference count \n", if_id, svc_port_id);
+                }
+            }
+        }
+    }
+    
+    /* walk through every member interface */
+    for(i=0; i< p_group_req->data.members.len; i++)
+    {  
+        if_id = p_group_req->data.members.val[i].intf_id;
+        svc_port_id = p_group_req->data.members.val[i].svc_port_id;
+        /* group Add */
+        if (BAL_UTIL_OPER_GROUP_ADD == op_type || BAL_UTIL_OPER_GROUP_SET == op_type)
+        {
+            rc = maple_xgpon_gem_port_id_add(if_id, svc_port_id, MAC_UTIL_DUMMY_ONU_ID_FOR_MULTICAST_GEM, &configuration);
+        }
+        else if (BAL_UTIL_OPER_GROUP_REMOVE == op_type)
+        {
+            rc = rsc_mgr_gem_get_ref_count(if_id, svc_port_id, &ref_count);
+            if(BCM_ERR_OK != rc)
+            {
+                BCM_LOG(ERROR, log_id_mac_util,
+                "mac_util xgpon group REM get reference count on interface %d (gem %d) failed \n", if_id, svc_port_id);
+                break;
+            }
+            /* if other group is referencing the same GEM (ref_count > 1), do not call Mac API to remove it.
+               The core will ask Resource Manger to decrease the counter if everything is good */
+            if ( ref_count == 1)
+            {
+                rc = maple_xgpon_gem_port_id_remove(if_id, svc_port_id);
+            }
+            else if ( ref_count == 0)
+            {  
+                BCM_LOG(WARNING, log_id_mac_util,
+                    "mac_util xgpon group operation REM on interface %d (gem %d) remove with 0 reference count \n", if_id, svc_port_id);
+            }
+        }
+ 
+        if(BCM_ERR_OK != rc)
+        {
+            BCM_LOG(ERROR, log_id_mac_util,
+            "mac_util xgpon group set of operation %d on interface %d (gem %d) failed \n", op_type, if_id, svc_port_id);
+            break;
+        }
+    }
+
+    return rc;
+}
+
+
+/*@}*/
diff --git a/bal_release/src/core/util/oam/Makefile b/bal_release/src/core/util/oam/Makefile
new file mode 100644
index 0000000..e87d3a4
--- /dev/null
+++ b/bal_release/src/core/util/oam/Makefile
@@ -0,0 +1,40 @@
+###############################################################################
+#
+#  <:copyright-BRCM:2016:DUAL/GPL:standard
+#  
+#     Copyright (c) 2016 Broadcom
+#     All Rights Reserved
+#  
+#  Unless you and Broadcom execute a separate written software license
+#  agreement governing use of this software, this software is licensed
+#  to you under the terms of the GNU General Public License version 2
+#  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+#  with the following added to such license:
+#  
+#     As a special exception, the copyright holders of this software give
+#     you permission to link this software with independent modules, and
+#     to copy and distribute the resulting executable under terms of your
+#     choice, provided that you also meet, for each linked independent
+#     module, the terms and conditions of the license of that module.
+#     An independent module is a module which is not derived from this
+#     software.  The special exception does not apply to any modifications
+#     of the software.
+#  
+#  Not withstanding the above, under no circumstances may you combine
+#  this software in any way with any other Broadcom software provided
+#  under a license other than the GPL, without Broadcom's express prior
+#  written consent.
+#  
+#  :>
+#
+###############################################################################
+# BAL core CLI application
+#
+MOD_NAME = bal_oam_util
+MOD_TYPE = lib
+MOD_DEPS = maple_sdk bcm_user_appl_epon_oam bcm_user_appl_eon
+
+srcs = bal_oam_util.c
+
+EXTRA_CFLAGS += -I$(SRC_DIR)/../../main
+
diff --git a/bal_release/src/core/util/oam/bal_oam_util.c b/bal_release/src/core/util/oam/bal_oam_util.c
new file mode 100644
index 0000000..fe051f9
--- /dev/null
+++ b/bal_release/src/core/util/oam/bal_oam_util.c
@@ -0,0 +1,459 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file bal_oam_util.c
+ *
+ * @brief OAM util interfaces definition used by Bal Core
+ *
+ * This file expose the APIs to the core to configure ONU via EPON OAM 
+ *
+ * @addtogroup oam_util
+ */
+
+/*@{*/
+
+#include "bal_oam_util.h"
+#include <bcmolt_user_appl_epon_oam.h>
+#include <bcmolt_eon.h>
+#include <bcmolt_eon_log.h>
+#include <bcmolt_epon_oam_types.h>
+
+#define BAL_OAM_TIMEOUT_US 1000000 /* 1 second */ 
+
+typedef enum
+{
+    BAL_OAM_STATE_IDLE,
+    BAL_OAM_STATE_SET_OAM_RATE,
+    BAL_OAM_STATE_CLEAR_INGRESS_RULES_NETWORK_PON,
+    BAL_OAM_STATE_CLEAR_INGRESS_RULES_USER_PORT,
+    BAL_OAM_STATE_SET_BASIC_QUEUE_CONFIG,
+    BAL_OAM_STATE_ADD_INGRESS_RULES_NETWORK_PON,
+    BAL_OAM_STATE_ADD_INGRESS_RULES_USER_PORT,
+    BAL_OAM_STATE_SET_REPORT_THRESHOLDS,
+    BAL_OAM_STATE_ENABLE_USER_TRAFFIC,
+    BAL_OAM_STATE_DISABLE_USER_TRAFFIC,
+    BAL_OAM_STATE__NUM_OF,
+} bal_oam_state;
+
+typedef enum
+{
+    BAL_OAM_EVENT_ACK,
+    BAL_OAM_EVENT_TIMEOUT,
+    BAL_OAM_EVENT__NUM_OF,
+} bal_oam_event;
+
+typedef struct bal_oam_context
+{
+    TAILQ_ENTRY(bal_oam_context) next;
+    bal_oam_cb cb;
+    void *context;
+    bcmolt_devid device_id;
+    bcmolt_epon_ni epon_ni;
+    bcmos_mac_address mac;
+    bcmos_timer timer;
+    bal_oam_state state;
+} bal_oam_context;
+
+typedef struct
+{
+    bcmos_msg m;
+    bcmolt_devid device_id;
+    bcmolt_epon_ni epon_ni;
+    bcmos_mac_address mac;
+} bal_oam_timeout_msg;
+
+typedef bcmos_errno (*bal_oam_sm_cb)(bal_oam_context *context);
+
+static TAILQ_HEAD(, bal_oam_context) bal_oam_contexts = TAILQ_HEAD_INITIALIZER(bal_oam_contexts);
+
+static bal_oam_context *bal_oam_get_context(bcmolt_devid device_id, bcmolt_epon_ni epon_ni, const bcmos_mac_address *mac)
+{
+    bal_oam_context *iter;
+
+    TAILQ_FOREACH(iter, &bal_oam_contexts, next)
+    {
+        if (device_id == iter->device_id && epon_ni == iter->epon_ni && !memcmp(mac, &iter->mac, sizeof(*mac)))
+            break;
+    }
+    return iter;
+}
+
+static void bal_oam_negotiation_result_cb(void *context, const eon_link_key_t *link_key, bcmos_errno result)
+{
+    bal_oam_context *_context = context;
+
+    _context->cb(_context->context, _context->device_id, _context->epon_ni, &_context->mac, result);
+
+    bcmos_free(_context);
+}
+
+bcmos_errno bal_oam_start_oam_negotiation(bcmolt_devid device_id, bcmolt_epon_ni epon_ni, bcmos_mac_address *mac, bal_oam_cb cb, void *context)
+{
+    eon_link_key_t link_key = {};
+    bal_oam_context *_context;
+
+    link_key.device_id = device_id;
+    link_key.epon_ni = epon_ni;
+    link_key.mac_address = *mac;
+
+    _context = bcmos_calloc(sizeof(*_context));
+    _context->cb = cb;
+    _context->context = context;
+    _context->device_id = device_id;
+    _context->epon_ni = epon_ni;
+    _context->mac = *mac;
+
+    return bcmolt_user_appl_eon_start(&link_key, eon_oam_set_id_dpoe, bal_oam_negotiation_result_cb, _context, BCMOS_TRUE);
+}
+
+static void bal_oam_configure_traffic_complete(bal_oam_context *context, bcmos_errno result)
+{
+    context->cb(context->context, context->device_id, context->epon_ni, &context->mac, result);
+
+    bcmos_timer_destroy(&context->timer);
+
+    TAILQ_REMOVE(&bal_oam_contexts, context, next);
+
+    /* No need to set context->state to BAL_OAM_STATE_IDLE - it is going to be destroyed here anyway. */
+    bcmos_free(context);
+}
+
+static void bal_oam_timeout_msg_cb(bcmos_module_id module_id, bcmos_msg *msg)
+{
+    bal_oam_timeout_msg *timeout_msg = (bal_oam_timeout_msg *)msg;
+    bal_oam_context *context = bal_oam_get_context(timeout_msg->device_id, timeout_msg->epon_ni, &timeout_msg->mac);
+
+    bal_oam_configure_traffic_complete(context, BCM_ERR_TIMEOUT);
+
+    bcmos_msg_free(msg);
+}
+
+static bcmos_errno bal_oam_state_any_event_timeout(bal_oam_context *context)
+{
+    bal_oam_timeout_msg *msg;
+
+    /* We should not directly call bal_oam_configure_traffic_complete() from within timer context, because in bal_oam_configure_traffic_complete() we free the memory in which the timer
+     * resides. To overcome this, we use a message - the timer will finish executing and only then the message handler will execute. */
+    msg = bcmos_calloc(sizeof(*msg)); 
+    msg->device_id = context->device_id;
+    msg->epon_ni = context->epon_ni;
+    msg->mac = context->mac;
+    msg->m.handler = bal_oam_timeout_msg_cb;
+    bcmos_msg_send_to_module(BCMOS_MODULE_ID_WORKER_MGMT, &msg->m, 0);
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno bal_oam_state_set_oam_rate_event_ack(bal_oam_context *context)
+{
+    bcmos_errno rc;
+
+    /* Clear EPON port ingress. */
+    rc = epon_oam_dpoe_clear_ingress_rules_network_pon(context->device_id, context->epon_ni, &context->mac);
+    if (rc != BCM_ERR_OK)
+    {
+        bal_oam_configure_traffic_complete(context, rc);
+        return rc;
+    }
+    
+    bcmos_timer_start(&context->timer, BAL_OAM_TIMEOUT_US);
+
+    context->state = BAL_OAM_STATE_CLEAR_INGRESS_RULES_NETWORK_PON;
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno bal_oam_state_clear_ingress_rules_network_pon_event_ack(bal_oam_context *context)
+{
+    bcmos_errno rc;
+
+    /* Clear UNI port ingress rules. */
+    rc = epon_oam_dpoe_clear_ingress_rules_user_port(context->device_id, context->epon_ni, &context->mac);
+    if (rc != BCM_ERR_OK)
+    {
+        bal_oam_configure_traffic_complete(context, rc);
+        return rc;
+    }
+
+    bcmos_timer_start(&context->timer, BAL_OAM_TIMEOUT_US);
+
+    context->state = BAL_OAM_STATE_CLEAR_INGRESS_RULES_USER_PORT;
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno bal_oam_state_clear_ingress_rules_user_port_event_ack(bal_oam_context *context)
+{
+    bcmos_errno rc;
+
+    /* Set ONU queue configuration. */
+    rc = epon_oam_dpoe_set_basic_queue_config(context->device_id, context->epon_ni, &context->mac, 255, 255);
+    if (rc != BCM_ERR_OK)
+    {
+        bal_oam_configure_traffic_complete(context, rc);
+        return rc;
+    }
+
+    bcmos_timer_start(&context->timer, BAL_OAM_TIMEOUT_US);
+
+    context->state = BAL_OAM_STATE_SET_BASIC_QUEUE_CONFIG;
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno bal_oam_state_set_basic_queue_config_event_ack(bal_oam_context *context)
+{
+    bcmos_errno rc;
+
+    /* Add EPON port ingress rules */
+    rc = epon_oam_dpoe_add_ingress_rules_network_pon(context->device_id, context->epon_ni, &context->mac, DPOE_RULE_VLAN_MODE_NONE, NULL);
+    if (rc != BCM_ERR_OK)
+    {
+        bal_oam_configure_traffic_complete(context, rc);
+        return rc;
+    }
+    
+    bcmos_timer_start(&context->timer, BAL_OAM_TIMEOUT_US);
+    
+    context->state = BAL_OAM_STATE_ADD_INGRESS_RULES_NETWORK_PON;
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno bal_oam_state_add_ingress_rules_network_pon_event_ack(bal_oam_context *context)
+{
+    bcmos_errno rc;
+
+    /* Add UNI port ingress rules. */
+    rc = epon_oam_dpoe_add_ingress_rules_user_port(context->device_id, context->epon_ni, &context->mac, DPOE_RULE_VLAN_MODE_NONE, NULL);
+    if (rc != BCM_ERR_OK)
+    {
+        bal_oam_configure_traffic_complete(context, rc);
+        return rc;
+    }
+    
+    bcmos_timer_start(&context->timer, BAL_OAM_TIMEOUT_US);
+
+    context->state = BAL_OAM_STATE_ADD_INGRESS_RULES_USER_PORT;
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno bal_oam_state_add_ingress_rules_user_port_event_ack(bal_oam_context *context)
+{
+    bcmos_errno rc;
+    bcmolt_epon_oam_queue_sets queue_sets =
+    {
+        [0] = {16256},
+        [1] = {32512},
+        [2] = {48768},
+        [3] = {65024},
+    };
+
+    /* Set ONU report thresholds. */
+    rc = epon_oam_dpoe_set_report_thresholds(context->device_id, context->epon_ni, &context->mac, 1, queue_sets, 4);
+    if (rc != BCM_ERR_OK)
+    {
+        bal_oam_configure_traffic_complete(context, rc);
+        return rc;
+    }
+    
+    bcmos_timer_start(&context->timer, BAL_OAM_TIMEOUT_US);
+
+    context->state = BAL_OAM_STATE_SET_REPORT_THRESHOLDS;
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno bal_oam_state_set_report_thresholds_event_ack(bal_oam_context *context)
+{
+    bcmos_errno rc;
+
+    /* Enable user traffic. */
+    rc = epon_oam_dpoe_enable_user_traffic(context->device_id, context->epon_ni, &context->mac);
+    if (rc != BCM_ERR_OK)
+    {
+        bal_oam_configure_traffic_complete(context, rc);
+        return rc;
+    }
+    
+    bcmos_timer_start(&context->timer, BAL_OAM_TIMEOUT_US);
+    
+    context->state = BAL_OAM_STATE_ENABLE_USER_TRAFFIC;
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno bal_oam_state_enable_user_traffic_event_ack(bal_oam_context *context)
+{
+    bal_oam_configure_traffic_complete(context, BCM_ERR_OK);
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno bal_oam_state_disable_user_traffic_event_ack(bal_oam_context *context)
+{
+    bal_oam_configure_traffic_complete(context,  BCM_ERR_OK);
+
+    return BCM_ERR_OK;
+}
+
+static bal_oam_sm_cb bal_oam_state_machine[BAL_OAM_STATE__NUM_OF][BAL_OAM_EVENT__NUM_OF] =
+{
+    [BAL_OAM_STATE_SET_OAM_RATE] =
+    {
+        [BAL_OAM_EVENT_TIMEOUT] = bal_oam_state_any_event_timeout,
+        [BAL_OAM_EVENT_ACK] = bal_oam_state_set_oam_rate_event_ack,
+    },
+    [BAL_OAM_STATE_CLEAR_INGRESS_RULES_NETWORK_PON] =
+    {
+        [BAL_OAM_EVENT_TIMEOUT] = bal_oam_state_any_event_timeout,
+        [BAL_OAM_EVENT_ACK] = bal_oam_state_clear_ingress_rules_network_pon_event_ack,
+    },
+    [BAL_OAM_STATE_CLEAR_INGRESS_RULES_USER_PORT] =
+    {
+        [BAL_OAM_EVENT_TIMEOUT] = bal_oam_state_any_event_timeout,
+        [BAL_OAM_EVENT_ACK] = bal_oam_state_clear_ingress_rules_user_port_event_ack,
+    },
+    [BAL_OAM_STATE_SET_BASIC_QUEUE_CONFIG] =
+    {
+        [BAL_OAM_EVENT_TIMEOUT] = bal_oam_state_any_event_timeout,
+        [BAL_OAM_EVENT_ACK] = bal_oam_state_set_basic_queue_config_event_ack,
+    },
+    [BAL_OAM_STATE_ADD_INGRESS_RULES_NETWORK_PON] =
+    {
+        [BAL_OAM_EVENT_TIMEOUT] = bal_oam_state_any_event_timeout,
+        [BAL_OAM_EVENT_ACK] = bal_oam_state_add_ingress_rules_network_pon_event_ack,
+    },
+    [BAL_OAM_STATE_ADD_INGRESS_RULES_USER_PORT] =
+    {
+        [BAL_OAM_EVENT_TIMEOUT] = bal_oam_state_any_event_timeout,
+        [BAL_OAM_EVENT_ACK] = bal_oam_state_add_ingress_rules_user_port_event_ack,
+    },
+    [BAL_OAM_STATE_SET_REPORT_THRESHOLDS] =
+    {
+        [BAL_OAM_EVENT_TIMEOUT] = bal_oam_state_any_event_timeout,
+        [BAL_OAM_EVENT_ACK] = bal_oam_state_set_report_thresholds_event_ack,
+    },
+    [BAL_OAM_STATE_ENABLE_USER_TRAFFIC] =
+    {
+        [BAL_OAM_EVENT_TIMEOUT] = bal_oam_state_any_event_timeout,
+        [BAL_OAM_EVENT_ACK] = bal_oam_state_enable_user_traffic_event_ack,
+    },
+    [BAL_OAM_STATE_DISABLE_USER_TRAFFIC] =
+    {
+        [BAL_OAM_EVENT_TIMEOUT] = bal_oam_state_any_event_timeout,
+        [BAL_OAM_EVENT_ACK] = bal_oam_state_disable_user_traffic_event_ack,
+    },
+};
+
+static void bal_oam_sm_run(bal_oam_context *context, bal_oam_event event)
+{
+    bal_oam_sm_cb cb = bal_oam_state_machine[context->state][event];
+
+    cb(context);
+}
+
+static bcmos_timer_rc bal_oam_timeout_cb(bcmos_timer *timer, long data)
+{
+    bal_oam_context *context = (bal_oam_context *)data;
+
+    bal_oam_sm_run(context, BAL_OAM_EVENT_TIMEOUT);
+
+    return BCMOS_TIMER_OK;
+}
+
+bcmos_errno bal_oam_configure_traffic(bcmolt_devid device_id, bcmolt_epon_ni epon_ni, bcmos_mac_address *mac, bcmos_bool is_enabled, bal_oam_cb cb, void *context)
+{
+    bcmos_errno rc;
+    bal_oam_context *_context;
+    bcmos_timer_parm timer_params =
+    {
+        .name = "bal_oam_timer",
+        .owner = BCMOS_MODULE_ID_WORKER_MGMT,
+        .handler = bal_oam_timeout_cb,
+    };
+
+    _context = bcmos_calloc(sizeof(*_context));
+    _context->cb = cb;
+    _context->context = context;
+    _context->device_id = device_id;
+    _context->epon_ni = epon_ni;
+    _context->mac = *mac;
+    TAILQ_INSERT_TAIL(&bal_oam_contexts, _context, next);
+
+    if (is_enabled)
+    {
+        /* Set OAM rate. */
+        rc = epon_oam_dpoe_set_oam_rate(device_id, epon_ni, mac, 10, 3);
+    }
+    else
+    {
+        /* Disable user traffic. */
+        rc = epon_oam_dpoe_disable_user_traffic(device_id, epon_ni, mac);
+    }
+    if (rc != BCM_ERR_OK)
+    {
+        bal_oam_configure_traffic_complete(_context, rc);
+        return rc;
+    }
+
+    timer_params.data = (long)_context;
+    bcmos_timer_create(&_context->timer, &timer_params);
+    bcmos_timer_start(&_context->timer, BAL_OAM_TIMEOUT_US);
+
+    if (is_enabled)
+        _context->state = BAL_OAM_STATE_SET_OAM_RATE;
+    else
+        _context->state = BAL_OAM_STATE_DISABLE_USER_TRAFFIC;
+
+    return BCM_ERR_OK;
+}
+
+/* TODO: Currently we ignore rc. But we may want to check it. */
+void bal_oam_proxy_rx_cb(bcmolt_devid device_id, bcmolt_epon_ni epon_ni, const bcmos_mac_address *mac, bcmolt_user_appl_epon_oam_rx_id id, bcmos_errno rc)
+{
+    bal_oam_context *context;
+
+    if (id != BCMOLT_USER_APPL_EPON_OAM_RX_ID_DPOE_SET_RESPONSE)
+        return;
+
+    /* If applying set command not from within bal_oam_configure_traffic() (for example, from BAL CLI), context might be NULL. */
+    context = bal_oam_get_context(device_id, epon_ni, mac);
+    if (!context)
+        return;
+
+    bal_oam_sm_run(context, BAL_OAM_EVENT_ACK);
+}
+
+/*@}*/
+
diff --git a/bal_release/src/core/util/oam/bal_oam_util.h b/bal_release/src/core/util/oam/bal_oam_util.h
new file mode 100644
index 0000000..69af195
--- /dev/null
+++ b/bal_release/src/core/util/oam/bal_oam_util.h
@@ -0,0 +1,101 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file bal_oam_util.h
+ *
+ * @brief OAM util interfaces header file
+ *
+ * This file expose the APIs to the core to configure ONU via EPON OAM
+ *
+ * @defgroup oam_util OAM Util
+ * @ingroup core
+ */
+ 
+#ifndef BAL_OAM_UTIL_H
+#define BAL_OAM_UTIL_H
+
+#include <bcmolt_host_api.h>
+#include <bcmolt_user_appl_epon_oam.h>
+
+typedef void (*bal_oam_cb)(void *context, bcmolt_devid device_id, bcmolt_epon_ni epon_ni, const bcmos_mac_address *mac_address, bcmos_errno result);
+
+/*****************************************************************************/
+/**
+ * @brief Start OAM negotiation for a given MAC address.
+ *
+ * @param device_id   Device ID for which we start OAM negotiation
+ * @param epon_ni     EPON NI for which we start OAM negotiation
+ * @param mac         MAC address for which we start OAM negotiation
+ * @param cb          Callback called upon completion, with success or failure
+ *                    code. If omitted, a default callback will be called and
+ *                    it will just log the return code
+ * @param context     context for the above callback                    
+ *
+ * @returns BCM_ERR_OK on success, other bcmos_errno codes otherwise
+ *
+ *****************************************************************************/
+bcmos_errno bal_oam_start_oam_negotiation(bcmolt_devid device_id, bcmolt_epon_ni epon_ni, bcmos_mac_address *mac, bal_oam_cb cb, void *context);
+
+/*****************************************************************************/
+/**
+ * @brief Enable traffic for a given MAC address.
+ *
+ * @param device_id   Device ID for which we enable/disable traffic
+ * @param epon_ni     EPON NI for which we enable/disable traffic 
+ * @param mac         MAC address for which we enable/disable traffic 
+ * @param is_enabled  Whether we should enable or disable traffic 
+ * @param cb          Callback called upon completion, with success or failure
+ *                    code. If omitted, a default callback will be called and
+ *                    it will just log the return code
+ * @param context     context for the above callback                    
+ *
+ * @returns BCM_ERR_OK on success, other bcmos_errno codes otherwise
+ *
+ *****************************************************************************/
+bcmos_errno bal_oam_configure_traffic(bcmolt_devid device_id, bcmolt_epon_ni epon_ni, bcmos_mac_address *mac, bcmos_bool is_enabled, bal_oam_cb cb, void *context);
+
+/*****************************************************************************/
+/**
+ * @brief Callback being called whenever an OAM message (proxy rx) arrives and
+ *        processed by bcmolt_user_appl_epon_oam_handle_proxy_rx().
+ *
+ * @param device_id   Device ID for which we got the message
+ * @param epon_ni     EPON NI for which we got the message
+ * @param mac         MAC address for which we got the message
+ * @param id          The type of message                    
+ * @param rc          OAM response success/fail code
+ *
+ *****************************************************************************/
+void bal_oam_proxy_rx_cb(bcmolt_devid device_id, bcmolt_epon_ni epon_ni, const bcmos_mac_address *mac, bcmolt_user_appl_epon_oam_rx_id id, bcmos_errno rc);
+
+#endif
+
diff --git a/bal_release/src/core/util/oam/common_epon_oam b/bal_release/src/core/util/oam/common_epon_oam
new file mode 120000
index 0000000..5376be7
--- /dev/null
+++ b/bal_release/src/core/util/oam/common_epon_oam
@@ -0,0 +1 @@
+../../../../3rdparty/maple/sdk/host_reference/common_epon_oam
\ No newline at end of file
diff --git a/bal_release/src/core/util/oam/eon/Makefile b/bal_release/src/core/util/oam/eon/Makefile
new file mode 100644
index 0000000..bc94abe
--- /dev/null
+++ b/bal_release/src/core/util/oam/eon/Makefile
@@ -0,0 +1,57 @@
+###############################################################################
+#
+#  <:copyright-BRCM:2016:DUAL/GPL:standard
+#  
+#     Copyright (c) 2016 Broadcom
+#     All Rights Reserved
+#  
+#  Unless you and Broadcom execute a separate written software license
+#  agreement governing use of this software, this software is licensed
+#  to you under the terms of the GNU General Public License version 2
+#  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+#  with the following added to such license:
+#  
+#     As a special exception, the copyright holders of this software give
+#     you permission to link this software with independent modules, and
+#     to copy and distribute the resulting executable under terms of your
+#     choice, provided that you also meet, for each linked independent
+#     module, the terms and conditions of the license of that module.
+#     An independent module is a module which is not derived from this
+#     software.  The special exception does not apply to any modifications
+#     of the software.
+#  
+#  Not withstanding the above, under no circumstances may you combine
+#  this software in any way with any other Broadcom software provided
+#  under a license other than the GPL, without Broadcom's express prior
+#  written consent.
+#  
+#  :>
+#
+###############################################################################
+# EPON OAM Negotiation user application
+
+ifeq ("$(ENABLE_CLI)", "y")
+
+	MOD_NAME = bcm_user_appl_eon
+	MOD_TYPE = lib
+	MOD_DEPS = bal_api common_epon_oam bcm_user_appl_epon_oam
+
+	ifeq ("$(OS_KERNEL)", "linux")
+		MOD_DEPS += dev_log_linux
+	endif
+
+	srcs = bcmolt_eon.c bcmolt_eon_log.c bcmolt_oam_heartbeat.c
+
+	ENABLE_DPOE_OAM ?= y
+	ifeq ("$(ENABLE_DPOE_OAM)", "y")
+		EXTRA_DEFINES += -DEON_OAM_SET_DPOE_SUPPORTED
+		srcs += oam_sets/dpoe/dpoe.c
+	endif # ENABLE_DPOE_OAM
+
+	ENABLE_BRCM_OAM ?= y
+	ifeq ("$(ENABLE_BRCM_OAM)", "y")
+		EXTRA_DEFINES += -DEON_OAM_SET_BRCM_SUPPORTED
+		srcs += oam_sets/brcm/brcm.c
+	endif # ENABLE_BRCM_OAM
+
+endif
diff --git a/bal_release/src/core/util/oam/eon/bcmolt_eon.c b/bal_release/src/core/util/oam/eon/bcmolt_eon.c
new file mode 120000
index 0000000..8f3003d
--- /dev/null
+++ b/bal_release/src/core/util/oam/eon/bcmolt_eon.c
@@ -0,0 +1 @@
+../../../../../3rdparty/maple/sdk/host_reference/user_appl/eon/bcmolt_eon.c
\ No newline at end of file
diff --git a/bal_release/src/core/util/oam/eon/bcmolt_eon.h b/bal_release/src/core/util/oam/eon/bcmolt_eon.h
new file mode 120000
index 0000000..d7f8504
--- /dev/null
+++ b/bal_release/src/core/util/oam/eon/bcmolt_eon.h
@@ -0,0 +1 @@
+../../../../../3rdparty/maple/sdk/host_reference/user_appl/eon/bcmolt_eon.h
\ No newline at end of file
diff --git a/bal_release/src/core/util/oam/eon/bcmolt_eon_log.c b/bal_release/src/core/util/oam/eon/bcmolt_eon_log.c
new file mode 120000
index 0000000..73c5c57
--- /dev/null
+++ b/bal_release/src/core/util/oam/eon/bcmolt_eon_log.c
@@ -0,0 +1 @@
+../../../../../3rdparty/maple/sdk/host_reference/user_appl/eon/bcmolt_eon_log.c
\ No newline at end of file
diff --git a/bal_release/src/core/util/oam/eon/bcmolt_eon_log.h b/bal_release/src/core/util/oam/eon/bcmolt_eon_log.h
new file mode 120000
index 0000000..164ba04
--- /dev/null
+++ b/bal_release/src/core/util/oam/eon/bcmolt_eon_log.h
@@ -0,0 +1 @@
+../../../../../3rdparty/maple/sdk/host_reference/user_appl/eon/bcmolt_eon_log.h
\ No newline at end of file
diff --git a/bal_release/src/core/util/oam/eon/bcmolt_eon_private.h b/bal_release/src/core/util/oam/eon/bcmolt_eon_private.h
new file mode 120000
index 0000000..3417ea1
--- /dev/null
+++ b/bal_release/src/core/util/oam/eon/bcmolt_eon_private.h
@@ -0,0 +1 @@
+../../../../../3rdparty/maple/sdk/host_reference/user_appl/eon/bcmolt_eon_private.h
\ No newline at end of file
diff --git a/bal_release/src/core/util/oam/eon/bcmolt_oam_heartbeat.c b/bal_release/src/core/util/oam/eon/bcmolt_oam_heartbeat.c
new file mode 120000
index 0000000..ee96fc5
--- /dev/null
+++ b/bal_release/src/core/util/oam/eon/bcmolt_oam_heartbeat.c
@@ -0,0 +1 @@
+../../../../../3rdparty/maple/sdk/host_reference/user_appl/eon/bcmolt_oam_heartbeat.c
\ No newline at end of file
diff --git a/bal_release/src/core/util/oam/eon/bcmolt_oam_heartbeat.h b/bal_release/src/core/util/oam/eon/bcmolt_oam_heartbeat.h
new file mode 120000
index 0000000..a45c1cd
--- /dev/null
+++ b/bal_release/src/core/util/oam/eon/bcmolt_oam_heartbeat.h
@@ -0,0 +1 @@
+../../../../../3rdparty/maple/sdk/host_reference/user_appl/eon/bcmolt_oam_heartbeat.h
\ No newline at end of file
diff --git a/bal_release/src/core/util/oam/eon/doc b/bal_release/src/core/util/oam/eon/doc
new file mode 120000
index 0000000..9a076c6
--- /dev/null
+++ b/bal_release/src/core/util/oam/eon/doc
@@ -0,0 +1 @@
+../../../../../3rdparty/maple/sdk/host_reference/user_appl/eon/doc
\ No newline at end of file
diff --git a/bal_release/src/core/util/oam/eon/oam_sets b/bal_release/src/core/util/oam/eon/oam_sets
new file mode 120000
index 0000000..a9926e8
--- /dev/null
+++ b/bal_release/src/core/util/oam/eon/oam_sets
@@ -0,0 +1 @@
+../../../../../3rdparty/maple/sdk/host_reference/user_appl/eon/oam_sets
\ No newline at end of file
diff --git a/bal_release/src/core/util/oam/epon_oam/Makefile b/bal_release/src/core/util/oam/epon_oam/Makefile
new file mode 100644
index 0000000..969352a
--- /dev/null
+++ b/bal_release/src/core/util/oam/epon_oam/Makefile
@@ -0,0 +1,42 @@
+###############################################################################
+#
+#  <:copyright-BRCM:2016:DUAL/GPL:standard
+#  
+#     Copyright (c) 2016 Broadcom
+#     All Rights Reserved
+#  
+#  Unless you and Broadcom execute a separate written software license
+#  agreement governing use of this software, this software is licensed
+#  to you under the terms of the GNU General Public License version 2
+#  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+#  with the following added to such license:
+#  
+#     As a special exception, the copyright holders of this software give
+#     you permission to link this software with independent modules, and
+#     to copy and distribute the resulting executable under terms of your
+#     choice, provided that you also meet, for each linked independent
+#     module, the terms and conditions of the license of that module.
+#     An independent module is a module which is not derived from this
+#     software.  The special exception does not apply to any modifications
+#     of the software.
+#  
+#  Not withstanding the above, under no circumstances may you combine
+#  this software in any way with any other Broadcom software provided
+#  under a license other than the GPL, without Broadcom's express prior
+#  written consent.
+#  
+#  :>
+#
+###############################################################################
+ifeq ("$(ENABLE_CLI)", "y")
+    MOD_NAME = bcm_user_appl_epon_oam
+    MOD_TYPE = lib
+	MOD_DEPS = utils dev_log common_epon_oam bal_api
+
+	srcs = bcmolt_user_appl_epon_oam.c
+
+    ifeq ("$(OS_KERNEL)", "linux")
+	MOD_DEPS += dev_log_linux
+    endif
+endif
+
diff --git a/bal_release/src/core/util/oam/epon_oam/bcmolt_user_appl_epon_oam.c b/bal_release/src/core/util/oam/epon_oam/bcmolt_user_appl_epon_oam.c
new file mode 120000
index 0000000..90fbfee
--- /dev/null
+++ b/bal_release/src/core/util/oam/epon_oam/bcmolt_user_appl_epon_oam.c
@@ -0,0 +1 @@
+../../../../../3rdparty/maple/sdk/host_reference/user_appl/epon_oam/bcmolt_user_appl_epon_oam.c
\ No newline at end of file
diff --git a/bal_release/src/core/util/oam/epon_oam/bcmolt_user_appl_epon_oam.h b/bal_release/src/core/util/oam/epon_oam/bcmolt_user_appl_epon_oam.h
new file mode 120000
index 0000000..ed97c3f
--- /dev/null
+++ b/bal_release/src/core/util/oam/epon_oam/bcmolt_user_appl_epon_oam.h
@@ -0,0 +1 @@
+../../../../../3rdparty/maple/sdk/host_reference/user_appl/epon_oam/bcmolt_user_appl_epon_oam.h
\ No newline at end of file
diff --git a/bal_release/src/core/util/oam/epon_oam_cli b/bal_release/src/core/util/oam/epon_oam_cli
new file mode 120000
index 0000000..f758382
--- /dev/null
+++ b/bal_release/src/core/util/oam/epon_oam_cli
@@ -0,0 +1 @@
+../../../../3rdparty/maple/sdk/host_reference/user_appl/epon_oam_cli
\ No newline at end of file
diff --git a/bal_release/src/core/util/switch/Makefile b/bal_release/src/core/util/switch/Makefile
new file mode 100644
index 0000000..d9f3aae
--- /dev/null
+++ b/bal_release/src/core/util/switch/Makefile
@@ -0,0 +1,46 @@
+###############################################################################
+#
+#  <:copyright-BRCM:2016:DUAL/GPL:standard
+#  
+#     Copyright (c) 2016 Broadcom
+#     All Rights Reserved
+#  
+#  Unless you and Broadcom execute a separate written software license
+#  agreement governing use of this software, this software is licensed
+#  to you under the terms of the GNU General Public License version 2
+#  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+#  with the following added to such license:
+#  
+#     As a special exception, the copyright holders of this software give
+#     you permission to link this software with independent modules, and
+#     to copy and distribute the resulting executable under terms of your
+#     choice, provided that you also meet, for each linked independent
+#     module, the terms and conditions of the license of that module.
+#     An independent module is a module which is not derived from this
+#     software.  The special exception does not apply to any modifications
+#     of the software.
+#  
+#  Not withstanding the above, under no circumstances may you combine
+#  this software in any way with any other Broadcom software provided
+#  under a license other than the GPL, without Broadcom's express prior
+#  written consent.
+#  
+#  :>
+#
+###############################################################################
+# BAL Switch Util  
+MOD_NAME = bal_switch_util
+MOD_TYPE = lib
+MOD_DEPS = dev_log utils bal_api bal_app_utils switch_util_dpp switch_util_esw 
+srcs = bal_switch_util.c bal_switch_acc_term.c bal_switch_flow.c bal_switch_cli.c bal_switch_interface.c bal_switch_group.c bal_switch_tm_sched.c bal_switch_tm_queue.c
+EXTRA_CFLAGS += -I$(SRC_DIR)/../../main
+
+ifeq ("$(TEST_SW_UTIL_LOOPBACK)", "y")
+	MOD_DEFS += -DTEST_SW_UTIL_LOOPBACK
+else	
+	MOD_DEPS +=  switch_sdk
+endif
+
+ifeq ("$(SWITCH)", "kt2")
+       MOD_DEFS += -DESW_SWITCH
+endif
diff --git a/bal_release/src/core/util/switch/bal_switch_acc_term.c b/bal_release/src/core/util/switch/bal_switch_acc_term.c
new file mode 100644
index 0000000..fb1be7b
--- /dev/null
+++ b/bal_release/src/core/util/switch/bal_switch_acc_term.c
@@ -0,0 +1,1071 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *
+ *  :>
+ *
+ *****************************************************************************/
+
+#include <bal_common.h>
+#include <bcm_dev_log.h>
+#include <bal_msg.h>
+#include "bal_switch_util.h"
+#include "bal_switch_acc_term.h"
+#include "bal_switch_flow.h"
+#include <bal_worker.h>
+/* declare ENV so that the bcm/rx.h in the bal_dpp_acc_term.h can create the correct bcm_pkt_t structure */
+#ifdef ESW_SWITCH
+#define BCM_ESW_SUPPORT 1
+#else
+#define BCM_DNX_SUPPORT  1
+#endif
+#include "esw/bal_esw_acc_term.h"
+#include "dpp/bal_dpp_acc_term.h"
+/* Below local functions are used for real logic only */
+#ifndef TEST_SW_UTIL_LOOPBACK
+#include <arpa/inet.h>
+#include <bcm/init.h>
+#include <bcm/types.h>
+#include <bcm/port.h>
+#include <appl/diag/shell.h>     /* for .soc loading */
+
+extern int socdiag_main(int argc, char *argv[]);
+
+/**
+ * @file bal_switch_acc_term.c
+ * @brief BAL Switch util functions that handle access terminal requests
+ * @addtogroup sw_util
+ *
+ */
+
+/*@{*/
+/* forward declaration */
+static void sw_util_bcm_rx_cb (int unit, int port, int reason, unsigned char *p_payload, int payload_len);
+
+/* define a customized dpp packetIn receive registration function.
+ * This function will be called when the HW trap a CPU bound packet
+ */
+static bcm_rx_t dpp_rx_cb_register(int unit, bcm_pkt_t *pkt, void *cookie)
+{
+    int src_port, reason_code, payload_len;
+    unsigned char *p_payload;
+
+    /* extract trap code, ingress port and payload info */
+    src_port    = pkt->src_port & 0xff;
+    reason_code = pkt->rx_trap_data;
+    p_payload = pkt->_pkt_data.data + (pkt->tot_len - pkt->pkt_len);
+    payload_len = pkt->pkt_len;
+
+    /* call sw_util_bcm_rx_cb to send packet to the BAL client */
+    sw_util_bcm_rx_cb(unit, src_port, reason_code, p_payload, payload_len);
+    return BCM_RX_HANDLED;
+}
+
+/* The default switch device the switch app is managed */
+#ifdef CONFIG_SWITCH_RPC
+static uint32_t g_dft_dev_id = 2;
+#else
+static uint32_t g_dft_dev_id = 0;
+#endif
+static uint32_t g_iwf_mode = 0;
+static uint32_t g_l2_age_time = 300;
+
+/* flag to determine if we need RPC for switch communication */
+#ifdef CONFIG_SWITCH_RPC
+static uint32_t g_use_rpc = 1;
+#else
+static uint32_t g_use_rpc = 0;
+#endif
+
+/* Socket to be connected to the switch driver msg receiving UDP port */
+bcmos_bool g_pkt_send_is_initialized = BCMOS_FALSE;
+
+static trap_target s_target_device;
+
+/* Index to determine which interface mapping table should be used.
+ * The mapping table is HW specific and depend on how physical wires are lay out
+ * Any customized board may need a different table entry to reflect the connections
+ */
+static bal_swapp_port_map_indx g_intf_maptable = BAL_SWAPP_PORT_MAP_GPON;
+
+ /* the logical interface to KT2 port mapping table
+    the tables is index by technology then logical interface number that used in the BAL CLI
+    the data is the switch port-bit-map number and device number
+*/
+
+/* table with gpon technology
+   based on KT2 port config option 4 - see page 22 on KT2 data sheet */
+/* gpon network interface mapping -
+ * KT2 is for Broadcom experiment purpose - not all function will work */
+bal_swapp_port net_inf_map_gpon[] = {
+         { 27,    /* xe0 */   0},
+         { 28,    /* xe1 */   0},
+         { 30,    /* xe2 */   0},
+         { 33,    /* xe3 */   0},
+         { 40,    /* ge24 */  0},
+         { -1,     /* end */   0}
+         };
+/* ARAD temp mapping xe128 - xe131 as nni ports */
+/* ARAD is for Broadcom experiment purpose - not all function will work */
+bal_swapp_port net_inf_map_exp[] = {
+         { 128,    /* xe128 */   0},
+         { 129,    /* xe129 */   0},
+         { 130,    /* xe130 */   0},
+         { 131,    /* xe131 */   0},
+         { -1,      /* end */   0}
+         };
+/* QAX temp mapping xe128-132 as nni ports 0-4 */
+bal_swapp_port net_inf_map_exp2[] = {
+         { 128,    /* xe128 */   0},
+         { 129,    /* xe129 */   0},
+         { 130,    /* xe130 */   0},
+         { 131,    /* xe131 */   0},
+         { 132,    /* xe132 */   0},
+         { -1,      /* end */   0}
+         };
+
+/* svk4 mapping xe128-133 as nni ports 0-5 */
+bal_swapp_port net_inf_map_svk4[] = {
+         { 128,    /* xe128 */   0},
+         { 129,    /* xe129 */   0},
+         { 130,    /* xe130 */   0},
+         { 131,    /* xe131 */   0},
+         { 132,    /* xe132 */   0},
+         { 133,    /* xe133 */   0},
+         { -1,      /* end */   0}
+         };
+
+/* epon 10g-capable mapping xe128-135 as nni ports 0-7 (best guess - needs to be tested) */
+bal_swapp_port net_inf_map_epon_tdma_10g[] = {
+    { 128,    /* xe128 */   0},
+    { 129,    /* xe129 */   0},
+    { 130,    /* xe130 */   0},
+    { 131,    /* xe131 */   0},
+    { 132,    /* xe132 */   0},
+    { 133,    /* xe133 */   0},
+    { 134,    /* xe134 */   0},
+    { 135,    /* xe135 */   0},
+    {  -1,    /* end */     0}
+};
+
+/* epon 1g only mapping - copied from gpon KT2 example above (best guess - needs to be tested) */
+bal_swapp_port net_inf_map_epon_1g[] = {
+    { 27,    /* xe0 */  0},
+    { 28,    /* xe1 */  0},
+    { 30,    /* xe2 */  0},
+    { 33,    /* xe3 */  0},
+    { 40,    /* ge24 */ 0},
+    { -1,    /* end */  0}
+};
+
+/* gpon pon interface mapping */
+bal_swapp_port pon_inf_map_gpon[] = {
+         { 5,    /* ge4 */   0},
+         { 6,    /* ge5 */   0},
+         { 2,    /* ge1 */   0},
+         { 1,    /* ge0 */   0},
+         { 8,    /* ge7 */   0},
+         { 7,    /* ge6 */   0},
+         { 4,    /* ge3 */   0},
+         { 3,    /* ge2 */   0},
+         { 12,   /* ge11 */  0},
+         { 19,   /* ge18 */  0},
+         { 10,   /* ge9 */   0},
+         { 15,   /* ge14 */  0},
+         { 11,   /* ge10 */  0},
+         { 17,   /* ge16 */  0},
+         { 9,    /* ge8 */   0},
+         { 13,   /* ge12 */  0},
+         { -1,    /* end */   0}
+         };
+bal_swapp_port pon_inf_map_gpon_v3[] = {
+         { 8,    /* ge7 */   0},
+         { 7,    /* ge6 */   0},
+         { 4,    /* ge3 */   0},
+         { 3,    /* ge2 */   0},
+         { 6,    /* ge5 */   0},
+         { 5,    /* ge4 */   0},
+         { 2,    /* ge1 */   0},
+         { 1,    /* ge0 */   0},
+         { 15,   /* ge14 */  0},
+         { 16,   /* ge15 */  0},
+         { 11,   /* ge10 */  0},
+         { 12,   /* ge11 */  0},
+         { 13,   /* ge12 */  0},
+         { 14,   /* ge13 */  0},
+         { 9,    /* ge8 */   0},
+         { 10,   /* ge9 */   0},
+         { -1,    /* end */   0}
+         };
+/* ARAD temp mapping xe0 - xe3 as PON ports */
+bal_swapp_port pon_inf_map_exp[] = {
+         { 0,    /* xe0 */   0},
+         { 1,    /* xe1 */   0},
+         { 2,    /* xe2 */   0},
+         { 3,    /* xe3 */   0},
+         { -1,    /* end */   0}
+         };
+/* QAX temp mapping xe1-6, as PON ports 0-5 */
+bal_swapp_port pon_inf_map_exp2[] = {
+         { 1,     /* xe1 */   0},
+         { 2,     /* xe2 */   0},
+         { 3,     /* xe3 */   0},
+         { 4,     /* xe4 */   0},
+         { 5,     /* xe5 */   0},
+         { 6,     /* xe6 */   0},
+         { -1,    /* end */   0}
+         };
+
+/* svk4 mapping xe1-4, as PON ports 0-3 */
+bal_swapp_port pon_inf_map_svk4[] = {
+         { 1,     /* xe1 */   0},
+         { 2,     /* xe2 */   0},
+         { 3,     /* xe3 */   0},
+         { 4,     /* xe4 */   0},
+         { -1,    /* end */   0}
+         };
+
+/* epon 10g-capable mapping xe1-8, as PON ports 0-7 (best guess - untested) */
+bal_swapp_port pon_inf_map_epon_tdma_10g[] = {
+    { 1,    /* xe1 */   0},
+    { 2,    /* xe2 */   0},
+    { 3,    /* xe3 */   0},
+    { 4,    /* xe4 */   0},
+    { 5,    /* xe5 */   0},
+    { 6,    /* xe6 */   0},
+    { 7,    /* xe7 */   0},
+    { 8,    /* xe8 */   0},
+    { -1,   /* end */   0}
+};
+
+/* epon 1g mapping xe1-16, as PON ports 0-15 (best guess - untested) */
+bal_swapp_port pon_inf_map_epon_1g[] = {
+    { 1,    /* xe1 */   0},
+    { 2,    /* xe2 */   0},
+    { 3,    /* xe3 */   0},
+    { 4,    /* xe4 */   0},
+    { 5,    /* xe5 */   0},
+    { 6,    /* xe6 */   0},
+    { 7,    /* xe7 */   0},
+    { 8,    /* xe8 */   0},
+    { 9,    /* xe9 */   0},
+    { 10,   /* xe10 */  0},
+    { 11,   /* xe11 */  0},
+    { 12,   /* xe12 */  0},
+    { 13,   /* xe13 */  0},
+    { 14,   /* xe14 */  0},
+    { 15,   /* xe15 */  0},
+    { 16,   /* xe16 */  0},
+    { -1,   /* end */   0}
+};
+
+/* network interface mapping table */
+bal_swapp_port *g_net_inf_map_table[BAL_SWAPP_PORT_MAP__NUM_OF] = {
+    net_inf_map_gpon,           /* BAL_SWAPP_PORT_MAP_GPON */
+    net_inf_map_gpon,           /* BAL_SWAPP_PORT_MAP_GPON_V3 */
+    net_inf_map_exp,            /* BAL_SWAPP_PORT_MAP_EXP */
+    net_inf_map_exp2,           /* BAL_SWAPP_PORT_MAP_EXP2 */
+    net_inf_map_svk4,           /* BAL_SWAPP_PORT_MAP_SVK4 */
+    net_inf_map_epon_tdma_10g,  /* BAL_SWAPP_PORT_MAP_EPON_TDMA */
+    net_inf_map_epon_1g,        /* BAL_SWAPP_PORT_MAP_EPON_1G */
+    net_inf_map_epon_tdma_10g,  /* BAL_SWAPP_PORT_MAP_EPON_10G */
+};
+/* pon interface mapping table */
+bal_swapp_port *g_pon_inf_map_table[BAL_SWAPP_PORT_MAP__NUM_OF] = {
+    pon_inf_map_gpon,           /* BAL_SWAPP_PORT_MAP_GPON */
+    pon_inf_map_gpon_v3,        /* BAL_SWAPP_PORT_MAP_GPON_V3 */
+    pon_inf_map_exp,            /* BAL_SWAPP_PORT_MAP_EXP */
+    pon_inf_map_exp2,           /* BAL_SWAPP_PORT_MAP_EXP2 */
+    pon_inf_map_svk4,           /* BAL_SWAPP_PORT_MAP_SVK4 */
+    pon_inf_map_epon_tdma_10g,  /* BAL_SWAPP_PORT_MAP_EPON_TDMA */
+    pon_inf_map_epon_1g,        /* BAL_SWAPP_PORT_MAP_EPON_1G */
+    pon_inf_map_epon_tdma_10g,  /* BAL_SWAPP_PORT_MAP_EPON_10G */
+};
+
+/* network interface mapping table size */
+int g_net_inf_map_table_size[BAL_SWAPP_PORT_MAP__NUM_OF] = {
+    sizeof(net_inf_map_gpon)/sizeof(net_inf_map_gpon[0]),                   /* BAL_SWAPP_PORT_MAP_GPON */
+    sizeof(net_inf_map_gpon)/sizeof(net_inf_map_gpon[0]),                   /* BAL_SWAPP_PORT_MAP_GPON_V3 */
+    sizeof(net_inf_map_exp)/sizeof(net_inf_map_exp[0]),                     /* BAL_SWAPP_PORT_MAP_EXP */
+    sizeof(net_inf_map_exp2)/sizeof(net_inf_map_exp2[0]),                   /* BAL_SWAPP_PORT_MAP_EXP2 */
+    sizeof(net_inf_map_svk4)/sizeof(net_inf_map_svk4[0]),                   /* BAL_SWAPP_PORT_MAP_SVK4 */
+    sizeof(net_inf_map_epon_tdma_10g)/sizeof(net_inf_map_epon_tdma_10g[0]), /* BAL_SWAPP_PORT_MAP_EPON_TDMA */
+    sizeof(net_inf_map_epon_1g)/sizeof(net_inf_map_epon_1g[0]),             /* BAL_SWAPP_PORT_MAP_EPON_1G */
+    sizeof(net_inf_map_epon_tdma_10g)/sizeof(net_inf_map_epon_tdma_10g[0]), /* BAL_SWAPP_PORT_MAP_EPON_10G */
+};
+/* pon interface mapping table size */
+int g_pon_inf_map_table_size[BAL_SWAPP_PORT_MAP__NUM_OF] = {
+    sizeof(pon_inf_map_gpon)/sizeof(pon_inf_map_gpon[0]),                   /* BAL_SWAPP_PORT_MAP_GPON */
+    sizeof(pon_inf_map_gpon_v3)/sizeof(pon_inf_map_gpon_v3[0]),             /* BAL_SWAPP_PORT_MAP_GPON_V3 */
+    sizeof(pon_inf_map_exp)/sizeof(pon_inf_map_exp[0]),                     /* BAL_SWAPP_PORT_MAP_EXP */
+    sizeof(pon_inf_map_exp2)/sizeof(pon_inf_map_exp2[0]),                   /* BAL_SWAPP_PORT_MAP_EXP2 */
+    sizeof(pon_inf_map_svk4)/sizeof(pon_inf_map_svk4[0]),                   /* BAL_SWAPP_PORT_MAP_SVK4 */
+    sizeof(pon_inf_map_epon_tdma_10g)/sizeof(pon_inf_map_epon_tdma_10g[0]), /* BAL_SWAPP_PORT_MAP_EPON_TDMA */
+    sizeof(pon_inf_map_epon_1g)/sizeof(pon_inf_map_epon_1g[0]),             /* BAL_SWAPP_PORT_MAP_EPON_1G */
+    sizeof(pon_inf_map_epon_tdma_10g)/sizeof(pon_inf_map_epon_tdma_10g[0]), /* BAL_SWAPP_PORT_MAP_EPON_10G */
+};
+
+/**
+  * @brief get the number of valid network interface
+  * @return num_nni  number of nni interfaces
+  */
+int bal_bcm_net_inf_map_size_get()
+{
+    return g_net_inf_map_table_size[g_intf_maptable];
+};
+
+ /**
+  * @brief get the number of valid pon interface
+  * @return num_nni  number of pon interfaces
+  */
+int bal_bcm_pon_inf_map_size_get()
+{
+    return g_pon_inf_map_table_size[g_intf_maptable];
+};
+
+/**
+  * @brief get KT2 PBM of a network interface from current mapping table
+  *
+  * @param net_inf_id   logical nni interface number from CLI
+  *
+  * @return pbm         PortBitMap that will be used in bcm api calls
+  */
+uint32_t bal_bcm_net_inf_pbm_get(uint32_t net_inf_id)
+{
+    bal_swapp_port *port = (g_net_inf_map_table[g_intf_maptable] + net_inf_id);
+    return port->pbm_id;
+};
+
+/**
+  * @brief get bal nni port number (index of the mapping table) of a physical nni interface
+  *
+  * @param nni_id   physical nni interface in the switch
+  *
+  * @return index   index to PortBitMap that contains the physical interface number
+  */
+int bal_bcm_net_inf_idx_get(uint32_t nni_id)
+{
+     int indx;
+     bal_swapp_port *port = g_net_inf_map_table[g_intf_maptable];
+     for( indx = 0; port->pbm_id != -1; indx++)
+     {
+         if (port->pbm_id == nni_id)
+         {
+             break;
+         }
+         port++;
+     }
+     if (port->pbm_id == -1)
+     {
+         return -1;
+     }
+     else
+     {
+         return indx;
+     }
+}
+
+/**
+  * @brief get KT2 device id of a network interface from current mapping table
+  *
+  * @param net_inf_id   logical nni interface number from CLI
+  *
+  * @return pbm         device number that will be used in bcm api calls
+  */
+int bal_bcm_net_inf_dev_get(uint32_t net_inf_id)
+{
+    if(net_inf_id > sizeof(g_net_inf_map_table))
+    {
+        return bal_bcm_dft_dev_get();
+    }
+    else
+    {
+        bal_swapp_port *port = (g_net_inf_map_table[g_intf_maptable] + net_inf_id);
+        return port->device_id;
+    }
+};
+
+/**
+  * @brief get KT2 PBM of a pon interface from current mapping table
+  *
+  * @param pon_inf_id   logical pon interface number from CLI
+  *
+  * @return pbm         PortBitMap that will be used in bcm api calls
+  */
+uint32_t bal_bcm_pon_inf_pbm_get(uint32_t pon_inf_id)
+{
+      bal_swapp_port *port = (g_pon_inf_map_table[g_intf_maptable] + pon_inf_id);
+      return port->pbm_id;
+};
+
+/**
+  * @brief get bal pon port number (index of the mapping table) of a physical pon interface
+  *
+  * @param pon_id   physical pon interface in the switch
+  *
+  * @return index   index to PortBitMap that contains the physical interface number
+  */
+int bal_bcm_pon_inf_idx_get(uint32_t pon_id)
+{
+     int indx;
+     bal_swapp_port *port = g_pon_inf_map_table[g_intf_maptable];
+     for( indx = 0; port->pbm_id != -1; indx++)
+     {
+         if (port->pbm_id == pon_id)
+         {
+             break;
+         }
+         port++;
+     }
+     if (port->pbm_id == -1)
+     {
+         return -1;
+     }
+     else
+     {
+         return indx;
+     }
+}
+
+/**
+  * @brief get KT2 device number of a pon interface from current mapping table
+  *
+  * @param pon_inf_id   logical pon interface number from CLI
+  *
+  * @return pbm         device number that will be used in bcm api calls
+  */
+int bal_bcm_pon_inf_dev_get(uint32_t pon_inf_id)
+{
+    if(pon_inf_id > sizeof(g_pon_inf_map_table))
+    {
+        return bal_bcm_dft_dev_get();
+    }
+    else
+    {
+        bal_swapp_port *port = (g_pon_inf_map_table[g_intf_maptable] + pon_inf_id);
+        return port->device_id;
+    }
+};
+
+/**
+  * @brief setting the local default device id
+  */
+void bal_bcm_dft_dev_set(uint32_t id)
+{
+    g_dft_dev_id = (int)id;
+}
+
+/**
+  * @brief getting the local default device id
+  */
+uint32_t bal_bcm_dft_dev_get()
+{
+    return g_dft_dev_id;
+}
+
+/**
+  * @brief setting the L2 table aging time (seconds)
+  */
+void bal_bcm_l2_age_time_set(uint32_t age_time)
+{
+    g_l2_age_time = age_time;
+}
+
+/**
+  * @brief getting current L2 table aging time value
+  */
+uint32_t bal_bcm_l2_age_time_get()
+{
+    return g_l2_age_time;
+}
+
+/**
+  * @brief getting the device type
+  */
+uint32_t bal_bcm_dev_type_get(uint32_t id)
+{
+    int rc;
+    bcm_info_t dev_info;
+
+    rc = bcm_info_get(id, &dev_info);
+    if (rc)
+    {
+         return 0;
+    }
+
+    return dev_info.device;
+}
+
+/**
+  * @brief getting the iwf mode of an access terminal
+  */
+uint32_t bal_bcm_iwf_mode_get()
+{
+    /* currently only support one access terminal */
+    BCM_LOG(DEBUG, log_id_sw_util, " Get iwf mode for acc_term\n");
+    return g_iwf_mode;
+}
+
+/**
+  * @brief setting the use of RPC (remote) or not (local)
+  */
+void bal_bcm_use_rpc_set(uint32_t use_rpc)
+{
+    g_use_rpc = (int)use_rpc;
+}
+
+/**
+  * @brief getting the use of RPC (remote) or not (local)
+  */
+bcmos_bool bal_bcm_use_rpc_get(void)
+{
+    if (g_use_rpc)
+    {
+        return BCMOS_TRUE;
+    }
+    else
+    {
+        return BCMOS_FALSE;
+    }
+}
+
+static void sw_util_bcm_rx_cb (int unit, int port, int reason, unsigned char *p_payload, int payload_len)
+{
+    int i, len, obj_len;
+    unsigned char *payload;
+    char bytestr[32];
+    char *p_bytestr = bytestr;
+
+    BCM_LOG(INFO, log_id_sw_util, "BAL: Captured packet from datapath (len: %d bytes)\n", payload_len);
+
+    BCM_LOG(DEBUG, log_id_sw_util, "     ingress port %d\n", port);
+    BCM_LOG(DEBUG, log_id_sw_util, "     rcv reason   0x%x\n", reason);
+
+    len =  (payload_len > 64)? 64 : payload_len;
+
+    /* dump out the captured packet */
+    payload = p_payload;
+    BCM_LOG(DEBUG, log_id_sw_util, "     payload: (first %d bytes shown)", len);
+    for(i=0; i<len; i++)
+    {
+        if ( i%8 == 0)
+        {
+            sprintf(p_bytestr, "\n");
+            BCM_LOG(DEBUG, log_id_sw_util, "%s", bytestr);
+            p_bytestr = bytestr;
+
+        }
+        sprintf(p_bytestr, " %02x", *payload++);
+        p_bytestr += 3;
+    }
+
+    /* Log the string being crafted when the loop terminated */
+    sprintf(p_bytestr, "\n");
+    BCM_LOG(DEBUG, log_id_sw_util, "%s", bytestr);
+
+    /* Send Auto Indication */
+    if ( p_bal_core_to_api_ind_queue )
+    {
+       bcmbal_packet_cfg *p_ind_msg = NULL;
+       bcmbal_packet_key key;
+       bal_sw_flow *p_flow_elm;
+       int tmp_port;
+
+       /* find the flow info corresponding to this trap REASON */
+       p_flow_elm = bal_sw_util_flow_list_get_by_trap_code(reason);
+       if(p_flow_elm == NULL)
+       {
+           BCM_LOG(WARNING, log_id_sw_util, " TrapCallBack: Can't match trap code 0x%x to element in flow list\n", reason);
+           return;
+       }
+
+       /* The packet indication object contains the bcmbal_packet_cfg structure plus the captured packet
+        * content
+        */
+       obj_len = payload_len + sizeof(bcmbal_packet_cfg);
+
+       p_ind_msg = bcmbal_msg_calloc(obj_len);
+
+       if(p_ind_msg == NULL)
+       {
+           BCM_LOG(ERROR, log_id_sw_util, " TrapCallBack: No memory to send indication\n");
+           return;
+       }
+
+       key.packet_send_dest.type = BCMBAL_DEST_TYPE_HOST;
+
+       BCMBAL_CFG_INIT(p_ind_msg, packet, key);
+
+       BCMBAL_CFG_PROP_SET(p_ind_msg, packet, flow_id, p_flow_elm->id);
+       BCMBAL_CFG_PROP_SET(p_ind_msg, packet, svc_port, p_flow_elm->svc_port);
+       BCMBAL_CFG_PROP_SET(p_ind_msg, packet, flow_cookie, p_flow_elm->flow_cookie);
+
+       /* first search the PON table */
+       tmp_port = bal_bcm_pon_inf_idx_get(port);
+       if( tmp_port != -1)
+       {
+           BCMBAL_CFG_PROP_SET(p_ind_msg, packet, flow_type, BCMBAL_FLOW_TYPE_UPSTREAM);
+           BCMBAL_CFG_PROP_SET(p_ind_msg, packet, intf_id, tmp_port);
+           BCMBAL_CFG_PROP_SET(p_ind_msg, packet, intf_type, BCMBAL_INTF_TYPE_PON);
+       }
+       else /* if failed, search for NNI table */
+       {
+           tmp_port = bal_bcm_net_inf_idx_get(port);
+           if( tmp_port != -1)
+           {
+               BCMBAL_CFG_PROP_SET(p_ind_msg, packet, flow_type, BCMBAL_FLOW_TYPE_DOWNSTREAM);
+               BCMBAL_CFG_PROP_SET(p_ind_msg, packet, intf_id, tmp_port);
+               BCMBAL_CFG_PROP_SET(p_ind_msg, packet, intf_type, BCMBAL_INTF_TYPE_NNI);
+           }
+       }
+       /* if both failed, return */
+       if(tmp_port == -1)
+       {
+           /* something went wrong, free up the message */
+           bcmbal_msg_free(p_ind_msg);
+           BCM_LOG(ERROR, log_id_sw_util, " TrapCallBack: can't match ingress port to bal port tables\n");
+           return;
+       }
+
+       ((bcmbal_obj *)p_ind_msg)->status = BCM_ERR_OK;
+       ((bcmbal_obj *)p_ind_msg)->obj_type = BCMBAL_OBJ_ID_PACKET;
+       ((bcmbal_obj *)p_ind_msg)->group = BCMBAL_MGT_GROUP_AUTO;
+
+       /* now copy the contents of the packet */
+       p_ind_msg->data.pkt.val = (uint8_t *)(p_ind_msg + 1);
+       memcpy(p_ind_msg->data.pkt.val, p_payload, payload_len);
+
+       /* and record the length of the captured packet */
+       p_ind_msg->data.pkt.len = payload_len;
+
+       BCMBAL_PROP_SET_PRESENT(p_ind_msg, packet, _cfg, pkt);
+
+       BCM_LOG(INFO, log_id_sw_util, " TrapCallBack: Flow id = %d, type=%d, Interface id = %d, type=%d, svc_port=%d\n",
+               p_ind_msg->data.flow_id, p_ind_msg->data.flow_type,
+               p_ind_msg->data.intf_id, p_ind_msg->data.intf_type,
+               p_ind_msg->data.svc_port);
+
+       /* Send this indication straight to the API client
+        */
+       bcmbal_msg_hdr_set(p_ind_msg,
+                          BCMBAL_MGMT_API_IND_MSG,
+                          BAL_MSG_TYPE_AUTO_IND,
+                          BAL_SUBSYSTEM_CORE,
+                          BCMBAL_OBJ_ID_PACKET,
+                          0,   /* operation code */
+                          0);  /* exchange id */
+
+       if(BCM_ERR_OK != bcmbal_msg_send(p_bal_core_to_api_ind_queue,
+                                        p_ind_msg,
+                                        BCMOS_MSG_SEND_AUTO_FREE))
+       {
+           BCM_LOG(ERROR, log_id_sw_util, " TrapCallBack: send auto indication failed\n");
+       }
+       else
+       {
+           BCM_LOG(DEBUG, log_id_sw_util, " TrapCallBack: auto indication sent\n");
+       }
+    }
+    else
+    {
+        BCM_LOG(ERROR, log_id_sw_util, " TrapCallBack: no auto indication queue\n");
+    }
+    return;
+}
+
+/**
+ * @brief Connect access terminal
+ *
+ * This routine is called by acc_term_fsm in the BAL core
+ * Upon receiving the request from the core, this function
+ * assign the device number that each logical nni or pon interface belong
+ * and restrict the egress ports of each interface. This mapping is highly
+ * topology dependent and should be customized according to the actual hardware
+ * layout.
+ * @param p_acc_term   Pointer to access terminal instance
+ *
+ * @return bcmos_errno
+ */
+static bcmos_errno sw_util_access_terminal_connect(acc_term_inst *p_acc_term)
+{
+     bcmos_errno ret = BCM_ERR_INTERNAL;
+     int rc;
+     bal_swapp_port *port;
+     char *argv[] = { "socdiag", NULL };
+     uint32_t dev_type;
+
+     BCM_LOG(INFO, log_id_sw_util, " Got a access terminal SET\n");
+
+     /* make sure the abstraction layer is initialized - no harm to initialize multiple time */
+     bcmos_init();
+
+     /* Initialize SDK */
+     rc = socdiag_main(1, argv);
+     if (rc)
+     {
+         BCM_LOG(ERROR, log_id_sw_util, " Init BCM SDK failed - %d\n", rc);
+         return BCM_ERR_INTERNAL;
+     }
+
+     BCM_LOG(INFO, log_id_sw_util, " %s RPC\n", (1 == g_use_rpc) ? "Using" : "Not using" );
+
+     /* use a soc script to establish rpc connection if switch is remotely located */
+     if (bal_bcm_use_rpc_get())
+     {
+          sleep(3); /* allow remote device to settle */
+
+          BCM_LOG(INFO, log_id_sw_util, " starting RPC connection\n");
+          rc = sh_rcload_file(-1, NULL, "rpc.soc", 0);
+          if (rc)
+          {
+              BCM_LOG(ERROR, log_id_sw_util, " start RPC connection failed\n");
+              return BCM_ERR_INTERNAL;
+          }
+
+     }
+
+     BCM_LOG(INFO, log_id_sw_util, " Using interface table: %d Device: %d\n", g_intf_maptable, g_dft_dev_id );
+
+     /* setup the device ID  - This is very hardware specific */
+     port = g_net_inf_map_table[g_intf_maptable];
+     /* -1 indicate end of table */
+     while(port->pbm_id != -1)
+     {
+         port->device_id = g_dft_dev_id;
+         port++;
+     }
+
+     port = g_pon_inf_map_table[g_intf_maptable];
+     while(port->pbm_id != -1)
+     {
+         port->device_id = g_dft_dev_id;
+         port++;
+     }
+     /* get the switch model from the chip */
+     dev_type = bal_bcm_dev_type_get(g_dft_dev_id);
+     if (dev_type == 0)
+     {
+         BCM_LOG(ERROR, log_id_sw_util, " Error retrieving device type on access-terminal connect: 0x%x\n", dev_type);
+         return BCM_ERR_INTERNAL;
+     }
+
+    /* set up the valid egress ports for net/pon facing ports */
+     if (dev_type == BCM_DEVICE_KT2)
+     {
+         ret = sw_util_esw_acc_term_connect(g_net_inf_map_table[g_intf_maptable], g_pon_inf_map_table[g_intf_maptable]);
+     }
+     else if (dev_type == BCM_DEVICE_ARAD || dev_type == BCM_DEVICE_ARAD_PLUS || dev_type == BCM_DEVICE_QAX)
+     {
+         /* for rpc case, dpp use a special api to register rx callback.
+            for non-rpc use case, use bcm_rx_register() to register the rx callback
+          */
+        if (bal_bcm_use_rpc_get())
+        {
+            /* if the trap receive udp port in bal_config.ini is not zero, start a receiving thread */
+            if(bal_bcm_trap_rcv_port_get())
+            {
+                sw_util_dpp_rx_cb_register(bal_bcm_dft_dev_get(), sw_util_bcm_rx_cb);
+            }
+            else
+            {
+                BCM_LOG(ERROR, log_id_sw_util, "Missing UDP port number for RPC packet In receiver \n");
+                return BCM_ERR_INTERNAL;
+            }
+        }
+        else
+        {
+            bcm_rx_register(bal_bcm_dft_dev_get(), "Bal Cpu Traps", dpp_rx_cb_register, 50, NULL, BCM_RCO_F_ALL_COS);
+        }
+
+        ret = sw_util_dpp_acc_term_connect(g_net_inf_map_table[g_intf_maptable], g_pon_inf_map_table[g_intf_maptable]);
+     }
+
+     BCM_LOG(INFO, log_id_sw_util, " Return access terminal connect request with %d on device 0x%x\n", ret, dev_type );
+
+     /* for now, only support one iwf */
+     g_iwf_mode = (uint32_t)p_acc_term->api_req_acc_term_obj_info.data.iwf_mode;
+
+     return ret;
+}
+
+/**
+  * @brief getting the interface mapping table that applied to the HW connections
+  */
+bal_swapp_port_map_indx bal_bcm_intf_maptable_get()
+{
+    return g_intf_maptable;
+}
+
+/**
+ * @brief SWITCH module: internal packet_send function
+ *
+ * This routine distribute the SEND function to supported switch family
+ *
+ * @param dst_port_id  Switch port id the packet is going to be sent out
+ * @param reason       REASON_SEND_TO_NNI or REASON_SEND_TO_PON
+ * @param payload      pointer to the data
+ * @param payload_len  the length of the data
+ * @param tunnel_id    pon port tunnel id if REASON_SEND_TO_PON
+ *
+ * @return bcmos_errno
+ */
+static bcmos_errno sw_util_pkt_send_intl(int dst_port_id,
+                                 int reason,
+                                 unsigned char *payload,
+                                 int payload_len,
+                                 int tunnel_id)
+{
+     uint32_t dev_type;
+     bcmos_errno ret = BCM_ERR_OK;
+
+    /* get the switch chip type from default device id
+       TBD - in the future, the device id should be obtained from port mapping table */
+     dev_type = bal_bcm_dev_type_get(g_dft_dev_id);
+     if (dev_type == 0)
+     {
+         BCM_LOG(ERROR, log_id_sw_util, " Error retrieving device type on pkt send: 0x%x\n", dev_type);
+         return BCM_ERR_INTERNAL;
+     }
+
+    /* set up the valid egress ports for net/pon facing ports */
+     if (dev_type == BCM_DEVICE_KT2)
+     {
+         return BCM_ERR_NOT_SUPPORTED;
+     }
+     else if (dev_type == BCM_DEVICE_ARAD || dev_type == BCM_DEVICE_ARAD_PLUS || dev_type == BCM_DEVICE_QAX)
+     {
+         ret =  sw_util_dpp_pkt_send(dst_port_id, reason, payload, payload_len, s_target_device, tunnel_id);
+     }
+     else
+     {
+         ret = BCM_ERR_NOT_SUPPORTED;
+     }
+
+     BCM_LOG(INFO, log_id_sw_util, " Return access terminal connect request with %d on device 0x%x\n", ret, dev_type );
+
+     return ret;
+}
+
+#endif /* #ifndef TEST_SW_UTIL_LOOPBACK */
+
+/* the listening UDP port that the switch will send the trapped messages */
+static uint32_t g_trap_rcv_port = 0;
+
+/**
+  * @brief set the receiving UDP port for trap packets - from config file
+  */
+uint32_t bal_bcm_trap_rcv_port_set(uint32_t udp_port)
+{
+    g_trap_rcv_port = udp_port;
+    return 0;
+}
+
+/**
+  * @brief getting the receiving UDP port for trap packets
+  */
+uint32_t bal_bcm_trap_rcv_port_get()
+{
+    return g_trap_rcv_port;
+}
+
+
+/* the global portChannel DownStream Max rate scheduling mode */
+static uint32_t g_ds_sched_mode = 0;  /* default to strict priority */
+
+/**
+  * @brief set the DS max rate scheduling mode - from config file
+  */
+uint32_t bal_bcm_ds_sched_mode_set(uint32_t sched_mode)
+{
+    g_ds_sched_mode = sched_mode;
+    return 0;
+}
+
+/**
+  * @brief getting the DS max rate scheduling mode
+  */
+uint32_t bal_bcm_ds_sched_mode_get()
+{
+    return g_ds_sched_mode;
+}
+
+/**
+ * @brief SWITCH module: access terminal SET handler
+ *
+ * This routine is called by acc_term_fsm in the BAL core upon
+ * SET request for acc_terminal object.
+ *
+ * @param p_acc_term   Pointer to access terminal instance
+ * @param opt_type     Operation type on access terminal instance
+ *
+ * @return bcmos_errno
+ */
+bcmos_errno sw_util_access_terminal_set(acc_term_inst *p_acc_term,
+                                        bal_util_oper_acc_term opt_type)
+{
+     bcmos_errno ret = BCM_ERR_OK;
+
+     if (opt_type != BAL_UTIL_OPER_ACC_TERM_CONNECT)
+     {
+         BCM_LOG(ERROR, log_id_sw_util, " Access terminal currently supports only CONNECT request\n");
+         return BCM_ERR_NOT_SUPPORTED;
+     }
+
+#ifndef TEST_SW_UTIL_LOOPBACK
+     ret = sw_util_access_terminal_connect(p_acc_term);
+#else
+     BCM_LOG(INFO, log_id_sw_util, " dummy SUCCESS\n");
+#endif
+
+     return ret;
+}
+
+/**
+  * @brief setting the interface mapping table that applied to the HW connections
+  */
+int bal_bcm_intf_maptable_set(uint32_t intf_maptable)
+{
+    int ret = 0;
+#ifndef TEST_SW_UTIL_LOOPBACK
+    switch(intf_maptable)
+    {
+        case 0:
+            g_intf_maptable =  BAL_SWAPP_PORT_MAP_GPON;
+        break;
+        case 1:
+            g_intf_maptable =  BAL_SWAPP_PORT_MAP_GPON_V3;
+        break;
+        case 2:
+            g_intf_maptable =  BAL_SWAPP_PORT_MAP_EXP;
+        break;
+        case 3:
+            g_intf_maptable =  BAL_SWAPP_PORT_MAP_EXP2;
+        break;
+        case 4:
+            g_intf_maptable =  BAL_SWAPP_PORT_MAP_SVK4;
+        break;
+        case 5:
+            g_intf_maptable =  BAL_SWAPP_PORT_MAP_EPON_TDMA;
+        break;
+        case 6:
+            g_intf_maptable =  BAL_SWAPP_PORT_MAP_EPON_1G;
+        break;
+        case 7:
+            g_intf_maptable =  BAL_SWAPP_PORT_MAP_EPON_10G;
+        break;
+        default:
+            BCM_LOG(ERROR, log_id_sw_util, " Mapping Table Id %d is not supported\n", intf_maptable);
+            ret = BCM_ERR_NOT_SUPPORTED;
+        break;
+    }
+#endif
+    return ret;
+}
+
+/**
+ * @brief SWITCH module: packet_send
+ *
+ * This routine is called by work thread in the BAL core upon
+ * user request to send a raw packet out of a switch port.
+ *
+ * @param dst_port_id  Switch port id the packet is going to be sent out
+ * @param reason       REASON_SEND_TO_NNI or REASON_SEND_TO_PON
+ * @param payload      pointer to the data
+ * @param payload_len  the length of the data
+ * @param tunnel_id    pon tunnel_id
+ *
+ * @return bcmos_errno
+ */
+bcmos_errno sw_util_pkt_send(int dst_port_id,
+                             int reason,
+                             unsigned char *payload,
+                             int payload_len,
+                             int tunnel_id)
+{
+     bcmos_errno ret = BCM_ERR_OK;
+
+     if ( reason != REASON_SEND_TO_NNI && reason != REASON_SEND_TO_PON)
+     {
+         BCM_LOG(ERROR, log_id_sw_util, " pkt_send currently  does not support reason %d\n", reason);
+         return BCM_ERR_NOT_SUPPORTED;
+     }
+
+     if ( reason == REASON_SEND_TO_NNI && BCMOS_FALSE == bcm_topo_nni_is_valid(dst_port_id))
+     {
+         BCM_LOG(ERROR, log_id_sw_util, " pkt_send to invalid nni port %d\n", dst_port_id);
+         return BCM_ERR_PARM;
+     }
+
+#ifndef TEST_SW_UTIL_LOOPBACK
+     ret = sw_util_pkt_send_intl(dst_port_id, reason, payload, payload_len, tunnel_id);
+#else
+     BCM_LOG(INFO, log_id_sw_util, " dummy SUCCESS\n");
+#endif
+
+     return ret;
+}
+
+/*
+ * Called from bal_core to set up the packet out server IP:port (i.e. the bcm_user process location)
+ * when Switch is on the same board where the core is run, there is no RPC and this init function should not be called
+ */
+bcmos_errno sw_util_pkt_send_init(const char *pkt_send_server_ip, uint16_t pkt_send_server_listen_port)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+
+#ifndef TEST_SW_UTIL_LOOPBACK
+
+    do
+    {
+        /* If the packet_out interface has already been initialized, just return OK */
+        if(g_pkt_send_is_initialized == BCMOS_FALSE)
+        {
+#ifdef CONFIG_SWITCH_RPC
+            /*
+             * Set up the socket to be used for sending "packet send" messages
+             * to the bcm.user server
+             */
+            if((s_target_device.socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0)
+            {
+                ret = BCM_ERR_NORES;
+                break;
+            }
+
+            s_target_device.addr.sin_family = AF_INET;
+            inet_pton(s_target_device.addr.sin_family, pkt_send_server_ip, &s_target_device.addr.sin_addr.s_addr);
+            s_target_device.addr.sin_port = htons(pkt_send_server_listen_port);
+#endif /* CONFIG_SWITCH_RPC */
+            g_pkt_send_is_initialized = BCMOS_TRUE;
+        }
+
+    }
+    while(0);
+
+#endif /*TEST_SW_UTIL_LOOPBACK*/
+
+    return ret;
+}
+/*@}*/
diff --git a/bal_release/src/core/util/switch/bal_switch_acc_term.h b/bal_release/src/core/util/switch/bal_switch_acc_term.h
new file mode 100644
index 0000000..e60b91b
--- /dev/null
+++ b/bal_release/src/core/util/switch/bal_switch_acc_term.h
@@ -0,0 +1,113 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *
+ *  :>
+ *
+ *****************************************************************************/
+
+/**
+ * @file bal_switch_acc_term.h
+ *
+ * @brief bal switch util access terminal service function header file
+ *
+ * @addtogroup sw_util
+ */
+
+#ifndef  _BAL_BCM_ACC_TERM_H_
+#define  _BAL_BCM_ACC_TERM_H_
+
+/*@{*/
+#include "bcmos_errno.h"
+
+#define BAL_BCM_MAX_INTF    32
+
+/* structure of each entry in the port mapping table */
+typedef struct bal_swapp_port_t
+{
+    uint32_t  pbm_id;
+    int       device_id;
+} bal_swapp_port;
+
+/* Index of different tables that map core interface number to physical ports on the device
+ * for example, GPON mapping table will be table[0], EPON mapping table will be table[2]
+ */
+typedef enum
+{
+    BAL_SWAPP_PORT_MAP_GPON,
+    BAL_SWAPP_PORT_MAP_GPON_V3,
+    BAL_SWAPP_PORT_MAP_EXP,
+    BAL_SWAPP_PORT_MAP_EXP2,
+    BAL_SWAPP_PORT_MAP_SVK4,
+    BAL_SWAPP_PORT_MAP_EPON_TDMA,
+    BAL_SWAPP_PORT_MAP_EPON_1G,
+    BAL_SWAPP_PORT_MAP_EPON_10G,
+    BAL_SWAPP_PORT_MAP__NUM_OF,
+} bal_swapp_port_map_indx;
+
+/*
+ * @brief Packet send structures and defines
+ */
+enum
+{
+    REASON_SEND_TO_NNI = 1,
+    REASON_SEND_TO_PON
+};
+
+typedef struct
+{
+    int socket;
+    struct sockaddr_in addr;
+} trap_target;
+
+extern bcmos_errno bal_bcm_acc_term_connect(void);
+extern void bal_bcm_dft_dev_set(uint32_t id);
+extern uint32_t bal_bcm_dft_dev_get(void);
+extern void bal_bcm_l2_age_time_set(uint32_t time);
+extern uint32_t bal_bcm_l2_age_time_get(void);
+extern uint32_t bal_bcm_dev_type_get(uint32_t id);
+extern void bal_bcm_use_rpc_set(uint32_t use_rpc);
+extern int bal_bcm_intf_maptable_set(uint32_t intf_maptable);
+extern uint32_t bal_bcm_net_inf_pbm_get(uint32_t net_inf_id);
+extern uint32_t bal_bcm_pon_inf_pbm_get(uint32_t pon_inf_id);
+extern int bal_bcm_net_inf_dev_get(uint32_t net_inf_id);
+extern int bal_bcm_pon_inf_dev_get(uint32_t pon_inf_id);
+extern uint32_t bal_bcm_iwf_mode_get(void);
+extern bcmos_bool bal_bcm_use_rpc_get(void);
+extern uint32_t bal_bcm_trap_rcv_port_get(void);
+extern uint32_t bal_bcm_trap_rcv_port_set(uint32_t udp_port);
+extern int bal_bcm_pon_inf_idx_get(uint32_t pon_id);
+extern int bal_bcm_net_inf_idx_get(uint32_t nni_id);
+extern bal_swapp_port_map_indx bal_bcm_intf_maptable_get(void);
+extern uint32_t bal_bcm_ds_sched_mode_get(void);
+extern uint32_t bal_bcm_ds_sched_mode_set(uint32_t sched_mode);
+extern bcmos_errno sw_util_pkt_send(int dst_port_id, int reason, unsigned char *payload, int payload_len, int tunnel_id);
+extern bcmos_errno sw_util_pkt_send_init(const char *pkt_send_server_ip, uint16_t pkt_send_server_listen_port);
+extern int bal_bcm_net_inf_map_size_get(void);
+extern int bal_bcm_pon_inf_map_size_get(void);
+/*@}*/
+
+#endif
diff --git a/bal_release/src/core/util/switch/bal_switch_cli.c b/bal_release/src/core/util/switch/bal_switch_cli.c
new file mode 100644
index 0000000..779f125
--- /dev/null
+++ b/bal_release/src/core/util/switch/bal_switch_cli.c
@@ -0,0 +1,172 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file bal_switch_cli.c
+ * @brief Sample CLI for switch integration module
+ *
+ */
+
+/*@{*/
+
+#include <bal_common.h>
+#include <bcm_dev_log.h>
+#include <bal_msg.h>
+#include "bal_switch_util.h"
+#include <bcmcli.h>
+
+/* Below local functions are used for real logic only */
+#ifndef TEST_SW_UTIL_LOOPBACK
+
+#include "bal_switch_acc_term.h"
+#include <bcm/types.h>
+#include <bcm/port.h>
+#include <appl/diag/shell.h>
+
+static bcmcli_entry *switch_cli_dir;
+
+/* Function declarations */
+
+/*
+ * CLI backend helper functions
+ */
+
+static bcmos_errno bal_switch_device(bcmcli_session *sess, const bcmcli_cmd_parm parm[], uint16_t nParms)
+{
+    bal_bcm_dft_dev_set(parm[0].value.number);
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno bal_switch_l2_age_time(bcmcli_session *sess, const bcmcli_cmd_parm parm[], uint16_t nParms)
+{
+    bal_bcm_l2_age_time_set(parm[0].value.number);
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno bal_switch_rpc_mode(bcmcli_session *sess, const bcmcli_cmd_parm parm[], uint16_t nParms)
+{
+    bal_bcm_use_rpc_set(parm[0].value.number);
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno bal_switch_intf_map(bcmcli_session *sess, const bcmcli_cmd_parm parm[], uint16_t nParms)
+{
+    bal_bcm_intf_maptable_set(parm[0].value.number);
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno bal_switch_trap_udp_port(bcmcli_session *sess, const bcmcli_cmd_parm parm[], uint16_t nParms)
+{
+    bal_bcm_trap_rcv_port_set(parm[0].value.number);
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno bal_switch_shell(bcmcli_session *sess, const bcmcli_cmd_parm parm[], uint16_t nParms)
+{
+    sh_process(-1, "BCM", TRUE);
+    return BCM_ERR_OK;
+}
+/* allow CLI to send a testing packet out of NNI interface, input is interface_number */
+static bcmos_errno bal_switch_pkt_out(bcmcli_session *sess, const bcmcli_cmd_parm parm[], uint16_t nParms)
+{
+    int out_port = parm[0].value.number;
+    unsigned char pkt_tagged_data[64] = {
+                     0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* DA */
+                     0x00, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, /* SA */
+                     0x81, 0x00, 0x00, 0x01, /* TPID + VID */
+                     0x08, 0x00, 0x45, 0x10, 0x00, 0x46, 0x00, 0x00, 0x00, 0x00, 0x32, 0x06,
+                     0x82, 0xab, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02,
+                     0x03, 0x04, 0x00, 0x04, 0x01, 0x00, 0x56, 0xf1, 0x39, 0x00, 0x00,
+                     0x11, 0x22, 0x33, 0x44, 0x55, 0x66};
+
+    sw_util_pkt_send(out_port, REASON_SEND_TO_NNI, pkt_tagged_data, 64, 0);
+    return BCM_ERR_OK;
+}
+
+/* allow CLI to send a testing packet out of PON interface, inputs are interface_number and tunnel_id */
+static bcmos_errno bal_switch_pon_out(bcmcli_session *sess, const bcmcli_cmd_parm parm[], uint16_t nParms)
+{
+    int out_port = parm[0].value.number;
+    int tunnel_id = parm[1].value.number;
+    unsigned char pkt_tagged_data[64] = {
+                     0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* DA */
+                     0x00, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, /* SA */
+                     0x81, 0x00, 0x00, 0x01, /* TPID + VID */
+                     0x08, 0x00, 0x45, 0x10, 0x00, 0x46, 0x00, 0x00, 0x00, 0x00, 0x32, 0x06,
+                     0x82, 0xab, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02,
+                     0x03, 0x04, 0x00, 0x04, 0x01, 0x00, 0x56, 0xf1, 0x39, 0x00, 0x00,
+                     0x11, 0x22, 0x33, 0x44, 0x55, 0x66};
+
+    sw_util_pkt_send(out_port, REASON_SEND_TO_PON, pkt_tagged_data, 64, tunnel_id);
+    return BCM_ERR_OK;
+}
+
+#endif
+
+/* Create CLI directory */
+bcmos_errno sw_util_cli_init(bcmcli_entry *top_dir)
+{
+#ifndef TEST_SW_UTIL_LOOPBACK
+    if (switch_cli_dir)
+    {
+        return BCM_ERR_ALREADY;
+    }
+    switch_cli_dir = bcmcli_dir_add(top_dir, "switch", "Switch CLI commands", BCMCLI_ACCESS_GUEST, NULL);
+    BCMOS_CHECK_RETURN_ERROR(!switch_cli_dir, BCM_ERR_INTERNAL);
+
+    BCMCLI_MAKE_CMD(switch_cli_dir, "device", "Set default device", bal_switch_device,
+        BCMCLI_MAKE_PARM("index", "Device index", BCMCLI_PARM_NUMBER, BCMCLI_PARM_FLAG_NONE));
+        
+    BCMCLI_MAKE_CMD(switch_cli_dir, "l2_agetime", "Set L2 table aging time", bal_switch_l2_age_time,
+        BCMCLI_MAKE_PARM("time", "L2 Aging Time", BCMCLI_PARM_NUMBER, BCMCLI_PARM_FLAG_NONE));
+
+    BCMCLI_MAKE_CMD(switch_cli_dir, "rpc_mode", "Set RPC mode", bal_switch_rpc_mode,
+        BCMCLI_MAKE_PARM_ENUM("enable", "Enable RPC mode", bcmcli_enum_bool_table, BCMCLI_PARM_FLAG_NONE));
+
+    BCMCLI_MAKE_CMD(switch_cli_dir, "intf_map_table", "Select interface mapping table", bal_switch_intf_map,
+        BCMCLI_MAKE_PARM("table", "Interface Mapping Table Number", BCMCLI_PARM_NUMBER, BCMCLI_PARM_FLAG_NONE));
+    
+    BCMCLI_MAKE_CMD(switch_cli_dir, "trap_udp_port", "Set trap packet receiving udp port", bal_switch_trap_udp_port,
+        BCMCLI_MAKE_PARM("port", "Receiving Port number", BCMCLI_PARM_NUMBER, BCMCLI_PARM_FLAG_NONE));
+
+    BCMCLI_MAKE_CMD(switch_cli_dir, "nni_packet_out", "Send example packet vid=1 to switch nni port", bal_switch_pkt_out,
+        BCMCLI_MAKE_PARM("port", "Sending Port number", BCMCLI_PARM_NUMBER, BCMCLI_PARM_FLAG_NONE));
+
+    BCMCLI_MAKE_CMD(switch_cli_dir, "pon_packet_out", "Send example packet vid=1 to switch pon port", bal_switch_pon_out,
+        BCMCLI_MAKE_PARM("port", "Sending Port number", BCMCLI_PARM_NUMBER, BCMCLI_PARM_FLAG_NONE),
+        BCMCLI_MAKE_PARM("tunnel", "Sending Tunnel Id", BCMCLI_PARM_NUMBER, BCMCLI_PARM_FLAG_NONE));
+
+    BCMCLI_MAKE_CMD_NOPARM(switch_cli_dir, "shell", "Switch SDK shell", bal_switch_shell);
+#endif
+    return BCM_ERR_OK;
+}
+
+/*@}*/
diff --git a/bal_release/src/core/util/switch/bal_switch_flow.c b/bal_release/src/core/util/switch/bal_switch_flow.c
new file mode 100644
index 0000000..acb85d3
--- /dev/null
+++ b/bal_release/src/core/util/switch/bal_switch_flow.c
@@ -0,0 +1,664 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file bal_switch_flow.c
+ * @brief BAL Switch util functions that handle flow requests
+ * @addtogroup sw_util
+ */
+ 
+ /*@{*/
+#include <bal_common.h>
+#include <bcm_dev_log.h>
+#include <bal_msg.h>
+#include "bal_switch_flow.h"
+#include "flow_fsm.h"
+#include "bcmos_errno.h"
+#include "bal_switch_util.h"
+
+#ifndef TEST_SW_UTIL_LOOPBACK
+#include <bcm/types.h>
+#include <sal/core/libc.h>
+#ifndef sal_memset
+#define sal_memset memset
+#endif
+#include <bcm/port.h>
+#include <bcm/vlan.h>
+#include <bcm/field.h>
+#include <bcm/error.h>
+#include <sal/core/libc.h>
+
+#include "bal_switch_acc_term.h"
+#include "esw/bal_esw_flow.h"
+#include "dpp/bal_dpp_flow.h"
+#include "dpp/bal_dpp_vswitch.h"
+
+#endif /* #ifndef TEST_SW_UTIL_LOOPBACK */
+
+/* A golbal link list to keep track of flows in the switch */
+TAILQ_HEAD(bal_sw_flow_list_head, bal_sw_flow) g_swutil_flow_list;
+
+static void sw_util_flow_dump_classifier(bcmbal_flow_cfg *p_flow)
+{
+    char dst_ip_str[16];
+
+    bcmos_inet_ntoa(&p_flow->data.classifier.dst_ip, dst_ip_str);
+
+    /* Do not use normal BCM_LOG() (but BCM_LOG_CALLER_FMT()), as IP address is a stack variable. */
+    BCM_LOG_CALLER_FMT(DEBUG, log_id_sw_util,   
+        " classifier -  otpid=0x%x itpid=0x%x ovid=0x%x ivid=0x%x opcp=0x%x, ipcp=0x%x "
+        "ether_type=0x%x dst_mac=%02x:%02x:%02x:%02x:%02x:%02x ip_proto=0x%x dst_ip=%s src_port=%u dst_port=%u attr_mask=0x%x\n", 
+        p_flow->data.classifier.o_tpid, p_flow->data.classifier.i_tpid,
+        p_flow->data.classifier.o_vid,  p_flow->data.classifier.i_vid,
+        p_flow->data.classifier.o_pbits,
+        p_flow->data.classifier.i_pbits,
+        p_flow->data.classifier.ether_type,
+        p_flow->data.classifier.dst_mac.u8[0], p_flow->data.classifier.dst_mac.u8[1], p_flow->data.classifier.dst_mac.u8[2],
+        p_flow->data.classifier.dst_mac.u8[3], p_flow->data.classifier.dst_mac.u8[4], p_flow->data.classifier.dst_mac.u8[5],
+        p_flow->data.classifier.ip_proto,
+        dst_ip_str,
+        p_flow->data.classifier.src_port,
+        p_flow->data.classifier.dst_port,
+        (unsigned int)p_flow->data.classifier.presence_mask);
+}
+
+static void sw_util_flow_dump_sla(bcmbal_flow_cfg *p_flow)
+{
+    BCM_LOG(DEBUG, log_id_sw_util, " sla - min_rate=%u max_rate=%u attr_mask=0x%x\n",
+        p_flow->data.sla.min_rate,
+        p_flow->data.sla.max_rate,
+        (unsigned int)p_flow->data.sla.presence_mask);
+}
+
+#define OUTER_VLAN_TAG_REQ_BITMASK (BCMBAL_ACTION_CMD_ID_REMOVE_OUTER_TAG | \
+                                    BCMBAL_ACTION_CMD_ID_XLATE_OUTER_TAG | \
+                                    BCMBAL_ACTION_CMD_ID_XLATE_TWO_TAGS | \
+                                    BCMBAL_ACTION_CMD_ID_REMOVE_TWO_TAGS | \
+                                    BCMBAL_ACTION_CMD_ID_REMARK_PBITS | \
+                                    BCMBAL_ACTION_CMD_ID_COPY_PBITS | \
+                                    BCMBAL_ACTION_CMD_ID_REVERSE_COPY_PBITS | \
+                                    BCMBAL_ACTION_CMD_ID_DSCP_TO_PBITS)
+
+#define NOT_WORKING_ACTION_BITMASK (BCMBAL_ACTION_CMD_ID_ADD_TWO_TAGS | \
+                                    BCMBAL_ACTION_CMD_ID_REMOVE_TWO_TAGS | \
+                                    BCMBAL_ACTION_CMD_ID_XLATE_TWO_TAGS | \
+                                    BCMBAL_ACTION_CMD_ID_DISCARD_DS_BCAST | \
+                                    BCMBAL_ACTION_CMD_ID_DISCARD_DS_UNKNOWN | \
+                                    BCMBAL_ACTION_CMD_ID_COPY_PBITS | \
+                                    BCMBAL_ACTION_CMD_ID_REVERSE_COPY_PBITS | \
+                                    BCMBAL_ACTION_CMD_ID_DSCP_TO_PBITS)
+
+/**
+ * @brief The flow check function validate the flow parameters from the core
+ * 
+ * @param p_msg    A pointer to the flow object to validate
+ * @return error code
+ */
+bcmos_errno sw_util_flow_info_validate(void *p_msg)
+{
+    bcmbal_flow_cfg *p_flow = (bcmbal_flow_cfg *)p_msg;
+    bcmos_errno ret = BCM_ERR_OK;
+
+    if (p_flow == NULL)
+    {
+        BCM_LOG(ERROR, log_id_sw_util,
+                           " No flow specified during validation\n" ); 
+        return BCM_ERR_PARM;                           
+    }
+    else
+    {
+        BCM_LOG(INFO, log_id_sw_util,
+                " Got a flow request - flow_id=%d sub_port=%d svc_id=%d, attr_mask=0x%x\n", 
+                p_flow->key.flow_id, p_flow->data.access_int_id,
+                p_flow->data.svc_port_id, (unsigned int)p_flow->hdr.hdr.presence_mask);
+
+        sw_util_flow_dump_classifier(p_flow);
+        if (p_flow->key.flow_type == BCMBAL_FLOW_TYPE_DOWNSTREAM)
+            sw_util_flow_dump_sla(p_flow);
+    }
+
+    /* validate the NNI range */
+    if((BCMOS_TRUE  == BCMBAL_CFG_PROP_IS_SET(p_flow, flow, network_int_id)) &&
+       (BCMOS_FALSE == bcm_topo_nni_is_valid(p_flow->data.network_int_id ))   )
+    {
+        uint32_t max_nni_ports = 0;
+
+#ifndef TEST_SW_UTIL_LOOPBACK           
+        bcm_topo_dev_get_max_nni(bal_bcm_net_inf_dev_get(p_flow->data.network_int_id), &max_nni_ports);
+#else
+        bcm_topo_dev_get_max_nni(0, &max_nni_ports);
+#endif
+        BCM_LOG(ERROR, log_id_sw_util, 
+                " Request  network interface %d is out of max range %d\n",p_flow->data.network_int_id, max_nni_ports );
+        return BCM_ERR_PARM;
+    }
+
+    /* return BCM_ERR_NOT_SUPPORTED for actions that has not yet implemented */
+    if((BCMOS_TRUE  == BCMBAL_CFG_PROP_IS_SET(p_flow, flow, action)) &&
+       (p_flow->data.action.cmds_bitmask & NOT_WORKING_ACTION_BITMASK))
+    {
+        BCM_LOG(ERROR, log_id_sw_util, 
+                " Request Action Command 0x%x not supported yet\n",p_flow->data.action.cmds_bitmask  );
+        return BCM_ERR_NOT_SUPPORTED;
+    }
+
+    if(BCMOS_FALSE == BCMBAL_CFG_PROP_IS_SET(p_flow, flow, classifier))
+    {
+        BCM_LOG(ERROR, log_id_sw_util, 
+                " a classifier must be specified in a flow\n" );
+        ret = BCM_ERR_PARM; 
+    }
+    else
+    {
+        /* ING SDK allows priority range from 0x7fffffff to 0 */
+        /* Need to check the configuration range if unit32_t is used for the attribute */
+
+        /* An outer vid is required in the classifier for all actions that operate on the outer vlan tag */
+        if(BCMOS_FALSE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, o_vid) &&
+           ((BCMOS_TRUE  == BCMBAL_CFG_PROP_IS_SET(p_flow, flow, action)) &&
+            (p_flow->data.action.cmds_bitmask & OUTER_VLAN_TAG_REQ_BITMASK)))
+        {
+            BCM_LOG(ERROR, log_id_sw_util, 
+                    " o_vid must be specified when actions requiring an outer vlan tag is specified\n" );
+            ret = BCM_ERR_PARM; 
+        }
+     
+        /*An outer vid must be specified when an inner vid is specified */
+        if((BCMOS_FALSE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, o_vid)) &&
+           (BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, i_vid)))
+        {
+            BCM_LOG(ERROR, log_id_sw_util, 
+                    " o_vid must be specified when i_vid is specified\n" );
+            ret = BCM_ERR_PARM; 
+        }
+
+        /* Check that user has specified pbits when the action is pbit remarking */
+        if((BCMOS_TRUE  == BCMBAL_CFG_PROP_IS_SET(p_flow, flow, action)) &&
+           (p_flow->data.action.cmds_bitmask & BCMBAL_ACTION_CMD_ID_REMARK_PBITS)   )
+        {
+            if((BCMOS_FALSE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, o_vid)) ||
+               (BCMOS_FALSE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.action, action, o_pbits))          )
+               {
+                
+                    BCM_LOG(ERROR, log_id_sw_util, 
+                        " o_vid in classifier and o_pibts in action must be specified when outer pbit remarking is specified\n" );
+                    ret = BCM_ERR_PARM; 
+               }    
+        }
+       
+        /* Check that the user has specified a valid packet tag type given the o_vid and i_vid choices (if any)*/
+        if(((BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, o_vid)) ||
+            (BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, i_vid))))
+        {
+            if((BCMOS_FALSE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, pkt_tag_type)) ||
+               ((BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, pkt_tag_type)) &&
+                (BCMBAL_PKT_TAG_TYPE_UNTAGGED == p_flow->data.classifier.pkt_tag_type)))   
+            {
+                BCM_LOG(ERROR, log_id_sw_util, 
+                        " pkt_tag_type must be either SINGLE or DOUBLE tagged when o_vid or i_vid are specified\n" );
+                ret = BCM_ERR_PARM; 
+            }
+        }
+        else 
+        {
+            /* If the pkt_tag_type is not specified OR the pkt_tag_type is not UNTAGGED (and it's not destined
+             * to the host CPU), then it's an error 
+             */
+            if(!(BCMOS_TRUE == BCMBAL_CFG_PROP_IS_SET(p_flow, flow, action) && 
+                 (p_flow->data.action.cmds_bitmask & BCMBAL_ACTION_CMD_ID_TRAP_TO_HOST)))
+            {               
+                if(BCMOS_FALSE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, pkt_tag_type) || 
+                   (!(BCMBAL_PKT_TAG_TYPE_UNTAGGED == p_flow->data.classifier.pkt_tag_type)))
+                {
+                    BCM_LOG(ERROR, log_id_sw_util, 
+                            " pkt_tag_type must be UNTAGGED when neither o_vid nor i_vid are specified\n" );
+                    ret = BCM_ERR_PARM;
+                }
+            }   
+        }
+
+        /* Now test the multicast flow cases */
+        if (BCMOS_TRUE == (BCMBAL_FLOW_TYPE_MULTICAST == p_flow->key.flow_type))
+        {
+            if(BCMOS_TRUE  == BCMBAL_CFG_PROP_IS_SET(p_flow, flow, action) && 
+               (p_flow->data.action.cmds_bitmask & BCMBAL_ACTION_CMD_ID_TRAP_TO_HOST))
+            {
+                BCM_LOG(ERROR, log_id_sw_util, " A multicast flow must not terminate in the host\n");
+                ret = BCM_ERR_PARM;
+            }
+
+            /* A Multicast flow must have a group_id that is valid (i.e. an active group) */
+            if(BCMOS_FALSE == BCMBAL_CFG_PROP_IS_SET(p_flow, flow, group_id))
+            {
+                BCM_LOG(ERROR, log_id_sw_util, " A multicast flow must have a specified group_id\n");
+                ret = BCM_ERR_PARM;
+            }
+            else
+            {
+                /* Now check that the referenced group is valid */   
+                bcmbal_group_key group_key = { .group_id = p_flow->data.group_id };
+                bcmbal_group_owner group_owner;
+                
+                 /* make sure the group owner is multicast */
+                 if(BCM_ERR_OK == group_owner_get(group_key, &group_owner))
+                 {
+                     if ( BCMBAL_GROUP_OWNER_MULTICAST != group_owner)
+                     {
+                        BCM_LOG(ERROR, log_id_sw_util, 
+                                " A multicast flow must have group owner of type Multicast, group_id:%d\n",
+                                group_key.group_id);
+                        ret = BCM_ERR_PARM;
+                     }                    
+                 }
+                 else
+                 {
+                     BCM_LOG(ERROR, log_id_sw_util, 
+                            " A multicast flow must have an valid group_id (Active group_id:%d not found)\n",
+                            group_key.group_id);
+                     ret = BCM_ERR_PARM;
+                 }
+            }
+        }
+        /* check N:1 service Group Owner to be UNICAST */
+        if(BCMOS_TRUE == BCMBAL_CFG_PROP_IS_SET(p_flow, flow, group_id) && 
+           (BCMBAL_FLOW_TYPE_DOWNSTREAM == p_flow->key.flow_type ||
+            BCMBAL_FLOW_TYPE_UPSTREAM == p_flow->key.flow_type    )
+          )
+        {
+            /* Now check that the referenced group is valid */   
+            bcmbal_group_key group_key = { .group_id = p_flow->data.group_id };
+            bcmbal_group_owner group_owner;
+            
+             /* make sure the group owner is unicast */
+             if(BCM_ERR_OK == group_owner_get(group_key, &group_owner))
+             {
+                 if ( BCMBAL_GROUP_OWNER_UNICAST != group_owner)
+                 {
+                    BCM_LOG(ERROR, log_id_sw_util, 
+                            " A N:1 flow must have group owner of type unicast, group_id:%d\n",
+                            group_key.group_id);
+                    ret = BCM_ERR_PARM;
+                 }                    
+             }
+             else
+             {
+                 BCM_LOG(ERROR, log_id_sw_util, 
+                        " A N:1 flow must have an valid group_id (Active group_id:%d not found)\n",
+                        group_key.group_id);
+                 ret = BCM_ERR_PARM;
+             }
+        } 
+    }
+
+    return ret;
+}
+
+/* Below local functions are used for real logic only */
+#ifndef TEST_SW_UTIL_LOOPBACK
+
+/**
+ * @brief The flow add function program the switch to forward packets that have
+ * specified attributes to the designated ports.
+ * The packets is modified before egress
+ * On the downstream, an access id (outer vlan tag) is added to the packets
+ * On the upstream, outer vlan tag (access id) is removed from the packets
+ *
+ * @param p_flow_inst A pointer to the flow instance being referenced
+ * @return error code
+ */
+static bcmos_errno bal_sw_util_flow_add(flow_inst *p_flow_inst)
+{
+    bcmbal_flow_cfg *p_flow = &p_flow_inst->api_req_flow_info;
+    bcmos_errno ret = BCM_ERR_OK;
+    int unit;
+    uint32_t dev_type;
+    bcmbal_iwf_mode iwf_mode;
+    
+    BCM_LOG(INFO, log_id_sw_util,
+            " Got a flow request - flow_id=%d  sub_port=%d svc_id=%d\n",
+            p_flow->key.flow_id, p_flow->data.access_int_id, p_flow->data.svc_port_id);
+  
+    unit = bal_bcm_pon_inf_dev_get(p_flow->data.access_int_id);
+    dev_type = bal_bcm_dev_type_get(unit);
+    iwf_mode = bal_bcm_iwf_mode_get();
+    
+     /* call the flow add function based on device type */
+     if (dev_type == BCM_DEVICE_KT2) 
+     {
+         ret = bal_sw_util_esw_flow_add(iwf_mode, p_flow);
+     }
+     else if (dev_type == BCM_DEVICE_ARAD || dev_type == BCM_DEVICE_ARAD_PLUS || dev_type == BCM_DEVICE_QAX)
+     {
+         ret = bal_sw_util_dpp_flow_add(iwf_mode, p_flow);  
+     }
+     else
+     {
+         BCM_LOG(ERROR, log_id_sw_util, " Unknown device type found on flow add: 0x%x\n", dev_type );
+         ret = BCM_ERR_INTERNAL;
+     }
+     
+     BCM_LOG(INFO, log_id_sw_util, " Return flow add request with %d on device 0x%x\n", ret, dev_type );  
+          
+     return ret;
+}
+
+/**
+ * @brief The flow remove function program switch to release resource that have
+ * been allocated during the flow add operation.
+ *
+ * @param p_flow_inst A pointer to the flow instance being referenced
+ * @return error code
+ */
+static bcmos_errno bal_sw_util_flow_remove(flow_inst *p_flow_inst)
+{
+    bcmbal_flow_cfg *p_flow = &p_flow_inst->api_req_flow_info;
+    bcmos_errno ret = BCM_ERR_OK;
+    int unit;
+    uint32_t dev_type;
+    bcmbal_iwf_mode iwf_mode;
+    
+    BCM_LOG(INFO, log_id_sw_util,
+            " Got a flow remove request - flow_id=%d  sub_port=%d svc_id=%d\n",
+            p_flow->key.flow_id, p_flow->data.access_int_id, p_flow->data.svc_port_id);
+  
+    unit = bal_bcm_pon_inf_dev_get(p_flow->data.access_int_id);
+    dev_type = bal_bcm_dev_type_get(unit);
+    iwf_mode = bal_bcm_iwf_mode_get();
+    
+     /* call the flow add function based on device type */
+     if (dev_type == BCM_DEVICE_KT2) 
+     {
+         ret = bal_sw_util_esw_flow_remove(iwf_mode, p_flow);
+     }
+     else if (dev_type == BCM_DEVICE_ARAD || dev_type == BCM_DEVICE_ARAD_PLUS || dev_type == BCM_DEVICE_QAX)
+     {
+         ret = bal_sw_util_dpp_flow_remove(iwf_mode, p_flow);  
+     }
+     else
+     {
+         BCM_LOG(ERROR, log_id_sw_util, " Unknown device type found on flow remove: 0x%x\n", dev_type );
+         ret = BCM_ERR_INTERNAL;
+     }
+     
+     BCM_LOG(INFO, log_id_sw_util, " Return flow remove request with %d on device 0x%x\n", ret, dev_type );  
+          
+     return ret;
+}
+
+/**
+ * @brief The flow list init function prepare a link list to keep track of flows in the switch util
+ * 
+ * @return error code
+ */
+static bcmos_errno bal_sw_util_flow_list_init(void)
+{
+    TAILQ_INIT(&g_swutil_flow_list);
+    return BCM_ERR_OK;
+}
+
+/**
+ * @brief The flow list finish function release all resources allocated in the flow list
+ * 
+ * @return error code
+ */
+static bcmos_errno bal_sw_util_flow_list_finish(void)
+{
+	bal_sw_flow *current_entry, *p_temp_entry;
+
+    /* Free all the entries in the list */
+    TAILQ_FOREACH_SAFE(current_entry,
+                       &g_swutil_flow_list,
+                       flow_next,
+                       p_temp_entry)
+    {
+        /* Remove it from the list */
+        TAILQ_REMOVE(&g_swutil_flow_list, current_entry, flow_next);
+
+        bcmos_free(current_entry);
+    }
+    return BCM_ERR_OK;
+}
+
+/**
+ * @brief The flow list search function by flow id
+ * 
+ * @param id Flow id that need to match the entry in the list
+ * @return pointer to an element in the list
+ */
+bal_sw_flow *bal_sw_util_flow_list_get_by_id(uint32_t id)
+{
+    bal_sw_flow *p_entry, *p_temp;
+    TAILQ_FOREACH_SAFE(p_entry, &g_swutil_flow_list, flow_next, p_temp)
+    {
+        if( p_entry->id == id)
+        {
+            break;
+        }
+    }
+    /* if reach the end of the list, TAILQ_FOREACH_SAFE set the p_entry to NULL */
+    return p_entry;
+}
+
+/**
+ * @brief The flow list search function by flow id
+ * 
+ * @param trap_code Trap id that need to match the entry in the list
+ * @return pointer to an element in the list
+ */
+bal_sw_flow *bal_sw_util_flow_list_get_by_trap_code(uint32_t trap_code)
+{
+    bal_sw_flow *p_entry, *p_temp;
+    
+    if (trap_code == 0)
+    {
+        BCM_LOG(WARNING, log_id_sw_util, "Invalid trap code %d in Flow list search by trap code\n", trap_code);
+        return NULL;
+    }
+    TAILQ_FOREACH_SAFE(p_entry, &g_swutil_flow_list, flow_next, p_temp)
+    {
+        if( p_entry->trap_code == trap_code)
+        {
+            break;
+        }
+    }
+    /* if reach the end of the list, TAILQ_FOREACH_SAFE set the p_entry to NULL */
+    return p_entry;
+}
+
+/*
+ * @brief The flow list insert function
+ * 
+ * @param entry  the element to be added in the link list
+ * @return error code
+*/
+bcmos_errno bal_sw_util_flow_list_insert(bal_sw_flow entry)
+{
+    bal_sw_flow *p_new_entry;
+    
+    p_new_entry = bcmos_calloc(sizeof(bal_sw_flow));
+    if(NULL == p_new_entry)
+    {
+        BCM_LOG(ERROR, log_id_sw_util, "Flow list insert out of memory\n");
+        return BCM_ERR_NOMEM;
+    }
+    *p_new_entry = entry;
+    TAILQ_INSERT_TAIL(&g_swutil_flow_list, p_new_entry, flow_next);
+    return BCM_ERR_OK;
+}
+
+/*
+ * @brief The flow list remove function
+ * 
+ * @param p_entry Pointer to the element in the link list result from one of the search functions
+ * @return error code
+*/
+bcmos_errno bal_sw_util_flow_list_remove(bal_sw_flow *p_entry)
+{
+    TAILQ_REMOVE(&g_swutil_flow_list, p_entry, flow_next);
+    bcmos_free(p_entry);
+    return BCM_ERR_OK;
+}
+
+
+/*
+ * @brief down Stream Flow classifier check to see if an ACL rule is needed for classification 
+ * 
+ *  In ING SDK, vswitch LIF is mostly used to classify VLAN and ingress port only.
+ *  Any packet classification more than that requires an ACL rule to filter the
+ *  traffics. This routine check if an ACL is needed.
+ *  If only VLAN ids are classify, return FALSE, otherwise return TRUE
+ *
+ * @param p_flow Pointer to the flow object that contains the classifier
+ * @return TRUE or FALSE
+*/
+bcmos_bool  bal_sw_util_flow_ds_acl_cls_chk(bcmbal_flow_cfg *p_flow)
+{
+   if(BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, ether_type) ||
+      BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, ip_proto)   ||
+      BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, src_port)   ||
+      BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, dst_port)   ||
+      BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, o_pbits)    ||
+      BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, i_pbits)    ||
+      BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, dst_mac)    ||
+      BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, src_mac)    ||
+      BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, src_ip)     ||
+      BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, dst_ip)     
+      )
+      return BCMOS_TRUE;
+    else
+      return BCMOS_FALSE;
+}
+
+/*
+ * @brief Up Stream Flow classifier check to see if an ACL rule is needed for classification 
+ * 
+ *  In ING SDK, vswitch LIF is mostly used to classify VLAN and ingress port only.
+ *  Any packet classification more than that requires an ACL rule to filter the
+ *  traffics. This routine check if an ACL is needed.
+ *  If only VLAN ids are classify, return FALSE, otherwise return TRUE
+ *
+ * @param p_flow Pointer to the flow object that contains the classifier
+ * @return TRUE or FALSE
+*/
+bcmos_bool  bal_sw_util_flow_us_acl_cls_chk(bcmbal_flow_cfg *p_flow)
+{
+   /* Up Stream Outer Pbits classification is done using PON LIF, no need to use ACL */
+   if(BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, ether_type) ||
+      BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, ip_proto)   ||
+      BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, src_port)   ||
+      BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, dst_port)   ||
+      BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, i_pbits)    ||
+      BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, dst_mac)    ||
+      BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, src_mac)    ||
+      BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, src_ip)     ||
+      BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, dst_ip)     
+      )
+      return BCMOS_TRUE;
+    else
+      return BCMOS_FALSE;
+}
+
+static uint32_t g_flow_inited = 0;
+
+#endif /* #ifndef TEST_SW_UTIL_LOOPBACK */
+/**
+ * @brief SWITCH module: flow SET handler
+ *
+ * This routine is called by flow_fsm in the BAL core upon
+ * SET request for flow object.
+ *
+ * @param p_flow       Pointer to flow instance
+ * @param opt_type     Operation type on flow instance
+ *
+ * @return bcmos_errno
+ */
+bcmos_errno sw_util_flow_set(flow_inst *p_flow, bal_util_oper_flow opt_type)
+{
+    bcmos_errno ret = BCM_ERR_OK;   
+   
+#ifndef TEST_SW_UTIL_LOOPBACK 
+    bal_sw_util_vsi_list_init();  
+    if (opt_type == BAL_UTIL_OPER_FLOW_ADD)
+    {
+        if (g_flow_inited == 0)
+        {
+            /* initialized the internal flow link list */
+            bal_sw_util_flow_list_init();
+            /* call flow_init in switch device */
+            bal_sw_util_dpp_flow_init();
+            g_flow_inited = 1;
+        }
+        ret = bal_sw_util_flow_add(p_flow);
+    }
+    else if( BAL_UTIL_OPER_FLOW_REMOVE == opt_type )
+    { 
+        ret = bal_sw_util_flow_remove(p_flow);
+    }
+    else if( BAL_UTIL_OPER_FLOW_CLEAR == opt_type )
+    { 
+        ret = bal_sw_util_flow_remove(p_flow);
+    }
+    else
+    {
+        BCM_LOG(ERROR, log_id_sw_util, "Only ADD/REMOVE/CLEAR request is supported for FLOW object\n");
+        return BCM_ERR_NOT_SUPPORTED;        
+    }
+#else
+    BCM_LOG(INFO, log_id_sw_util, "dummy flow %s SUCCESS\n", 
+            ( BAL_UTIL_OPER_FLOW_ADD == opt_type ) ? "flow add" : "flow remove");
+#endif
+
+    return ret;
+}
+
+/**
+ * @brief SWITCH module: flow clean up function
+ *
+ * This routine is called by bal_switch_util() when the BAL core issue finish request
+ *
+ * @return bcmos_errno
+ */
+bcmos_errno sw_util_flow_finish()
+{	
+    bcmos_errno ret = BCM_ERR_OK;   
+   
+#ifndef TEST_SW_UTIL_LOOPBACK   
+    if (g_flow_inited )
+    {
+        /* release the internal flow link list */
+        bal_sw_util_flow_list_finish();
+		
+        g_flow_inited = 0;
+    }
+#endif
+    return ret;
+}	
+/*@}*/
diff --git a/bal_release/src/core/util/switch/bal_switch_flow.h b/bal_release/src/core/util/switch/bal_switch_flow.h
new file mode 100644
index 0000000..e6d84eb
--- /dev/null
+++ b/bal_release/src/core/util/switch/bal_switch_flow.h
@@ -0,0 +1,97 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file bal_switch_flow.h
+ *
+ * @brief Switch flow interfaces header file
+ *
+ * This file expose the APIs to the core to configure the switches
+ * with regarding to the operation of a flow.
+ *
+ * @defgroup sw_util Switch Util
+ * @ingroup core
+ */
+
+#ifndef  _BAL_SWITCH_FLOW_H_
+#define  _BAL_SWITCH_FLOW_H_
+
+#include <bal_utils_msg.h>
+#include "bcmos_errno.h"
+#include "flow_fsm.h"
+
+/*@{*/ 
+
+/* Data structure to keep a link list of flow that has been programmed in the switch */
+/* reserve 16 pairs of uni-direction ports */
+#define MAX_PON_PORT  32  
+#define MAX_NET_PORT  32 
+#define MAX_FIELD_EID 64 
+
+#define BAL_SW_FLOW_TYPE_NONE            0
+#define BAL_SW_FLOW_TYPE_DOWNSTREAM     (1 << BCMBAL_FLOW_TYPE_DOWNSTREAM)
+#define BAL_SW_FLOW_TYPE_UPSTREAM       (1 << BCMBAL_FLOW_TYPE_UPSTREAM)
+#define BAL_SW_FLOW_TYPE_MULTICAST      (1 << BCMBAL_FLOW_TYPE_MULTICAST)
+ 
+typedef struct bal_sw_flow bal_sw_flow;
+struct bal_sw_flow
+{
+    uint32_t id;          /* flow id */
+    uint32_t type;        /* downstream or upstream */
+    uint32_t device;      /* device id, aka unit of the device */
+    uint32_t trap_code;   /* id for trap reason */
+    uint32_t trap_port;   /* trap gport */
+    uint32_t num_eid;     
+    uint32_t field_entry_id[MAX_FIELD_EID];  /* field entry for ACL rules */
+    void     *p_vsi_svc;  /* vswitch entry in the vsi list */
+    uint32_t vsi_svc_indx; /* index to the service within the vswitch this flow is using */
+    uint32_t svc_port;    /* LLId or GEMID */
+    uint32_t num_pon;
+    uint32_t pon_port[MAX_PON_PORT]; /* pon gport attached to vswitch */
+    uint32_t num_net;
+    uint32_t net_port[MAX_NET_PORT]; /* nni gport attached to vswitch */
+    bcmbal_cookie flow_cookie;
+    void     *p_service_cfg;
+    uint32_t group_id;
+    uint32_t valid;    
+    TAILQ_ENTRY(bal_sw_flow) flow_next;
+};
+
+extern bcmos_errno bal_sw_util_flow_list_insert(bal_sw_flow entry);
+extern bcmos_errno bal_sw_util_flow_list_remove(bal_sw_flow *p_entry);
+extern bal_sw_flow *bal_sw_util_flow_list_get_by_id(uint32_t id);
+extern bal_sw_flow *bal_sw_util_flow_list_get_by_trap_code(uint32_t trap_code);
+extern bcmos_bool  bal_sw_util_flow_ds_acl_cls_chk(bcmbal_flow_cfg *p_flow);
+extern bcmos_bool  bal_sw_util_flow_us_acl_cls_chk(bcmbal_flow_cfg *p_flow);
+
+/*@}*/
+
+#endif /* _BAL_SWITCH_FLOW_H_ */
diff --git a/bal_release/src/core/util/switch/bal_switch_group.c b/bal_release/src/core/util/switch/bal_switch_group.c
new file mode 100644
index 0000000..4fc020e
--- /dev/null
+++ b/bal_release/src/core/util/switch/bal_switch_group.c
@@ -0,0 +1,392 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file bal_switch_group.c
+ * @brief BAL Switch util functions that handle group requests
+ * @addtogroup sw_util
+ */
+ 
+ /*@{*/
+#include <bal_common.h>
+#include <bcm_dev_log.h>
+#include <bal_msg.h>
+#include "bcmos_errno.h"
+#include "bal_switch_util.h"  /* include bal_util.msg.h for bal_util_oper_group */
+#include "group_fsm.h"        /* for struct group_inst */
+
+
+#include "bal_dpp_group.h"
+#include "bal_switch_acc_term.h"
+
+#ifdef TEST_SW_UTIL_LOOPBACK
+/* nothing to check in loop back mode */
+bcmos_errno sw_util_group_info_validate(void *p_msg)
+{
+    return BCM_ERR_OK;    
+}
+
+#else
+/**
+ * @brief The group check function validate the group parameters from the core
+ * 
+ * @param p_msg    A pointer to the group object to validate
+ * @return error code
+ */
+bcmos_errno sw_util_group_info_validate(void *p_msg)
+{
+    bcmbal_group_cfg *p_grp = (bcmbal_group_cfg *)p_msg;
+    int i, num_of_pon;
+
+    if (p_grp == NULL)
+    {
+        BCM_LOG(ERROR, log_id_sw_util,
+                           " No group specified during validation\n" ); 
+        return BCM_ERR_PARM;                           
+    }
+    
+    /* if members field is set, make sure the PON interfaces are valid */
+    if (BCMBAL_CFG_PROP_IS_SET(p_grp, group, members))
+    {
+        num_of_pon = bal_bcm_pon_inf_map_size_get();
+        for(i=0; i<p_grp->data.members.len; i++)
+        {
+            bcmbal_group_member_info *p_member = &p_grp->data.members.val[i];
+              
+            if (p_member->intf_id >= num_of_pon)
+            {
+                BCM_LOG(ERROR, log_id_sw_util,
+                               " invalid group member with pon id = %d\n", p_member->intf_id ); 
+                return BCM_ERR_PARM;
+            }
+        }
+    }
+
+    /* member action is not supported yet */ 
+    return BCM_ERR_OK;    
+}
+
+/**
+ * @brief The group remove function program switch to release resource that have
+ * been allocated during the group add operation.
+ *
+ * @param p_group_inst A pointer to the group instance being referenced
+ * @return error code
+ */
+static bcmos_errno bal_sw_util_group_remove(group_inst *p_group_inst)
+{
+    bcmbal_group_cfg *p_group = &p_group_inst->api_req_group_info;
+    bcmos_errno ret = BCM_ERR_OK;
+    int unit;
+    uint32_t dev_type;
+    
+    BCM_LOG(INFO, log_id_sw_util,
+            " Got a group remove request - group_id=%d \n", p_group->key.group_id);
+    
+    /* remove must have at least one member */
+    if(p_group->data.members.len == 0)
+    {
+        BCM_LOG(ERROR, log_id_sw_util, "group remove request must have at least one member\n");
+        return BCM_ERR_PARM; 
+    }
+    
+    unit = bal_bcm_pon_inf_dev_get(p_group->data.members.val[0].intf_id);
+    dev_type = bal_bcm_dev_type_get(unit);
+    
+    /* call the group add function based on device type */
+     if (dev_type == BCM_DEVICE_ARAD || dev_type == BCM_DEVICE_ARAD_PLUS || dev_type == BCM_DEVICE_QAX)
+     {
+         ret = bal_sw_util_dpp_group_rem(unit, p_group);  
+     }
+     else
+     {
+         BCM_LOG(ERROR, log_id_sw_util, " Unknown device type found on group remove: 0x%x\n", dev_type );
+         ret = BCM_ERR_INTERNAL;
+     }
+     
+     BCM_LOG(INFO, log_id_sw_util, " Return group remove request with %d on device 0x%x\n", ret, dev_type );  
+          
+     return ret;
+}
+/**
+ * @brief The group add function program switch to add a member interface to the group
+ *
+ * @param p_group_inst A pointer to the group instance being referenced
+ * @return error code
+ */
+static bcmos_errno bal_sw_util_group_add(group_inst *p_group_inst)
+{
+    bcmbal_group_cfg *p_group = &p_group_inst->api_req_group_info;
+    bcmos_errno ret = BCM_ERR_OK;
+    int unit;
+    uint32_t dev_type;
+    
+    BCM_LOG(INFO, log_id_sw_util,
+            " Got a group add request - group_id=%d \n", p_group->key.group_id);
+    
+    /* add must have at least one member */
+    if(p_group->data.members.len == 0)
+    {
+        BCM_LOG(ERROR, log_id_sw_util, "group add request must have at least one member\n");
+        return BCM_ERR_PARM; 
+    }
+    
+    unit = bal_bcm_pon_inf_dev_get(p_group->data.members.val[0].intf_id);
+    dev_type = bal_bcm_dev_type_get(unit);
+    
+    /* call the group add function based on device type */
+     if (dev_type == BCM_DEVICE_ARAD || dev_type == BCM_DEVICE_ARAD_PLUS || dev_type == BCM_DEVICE_QAX)
+     {
+         ret = bal_sw_util_dpp_group_add(unit, p_group);  
+     }
+     else
+     {
+         BCM_LOG(ERROR, log_id_sw_util, " Unknown device type found on group add: 0x%x\n", dev_type );
+         ret = BCM_ERR_INTERNAL;
+     }
+     
+     BCM_LOG(INFO, log_id_sw_util, " Return group add request with %d on device 0x%x\n", ret, dev_type );  
+          
+     return ret;
+}
+
+/**
+ * @brief The group set function program switch to replace member interfaces of a group
+ *
+ * @param p_group_inst A pointer to the group instance being referenced
+ * @return error code
+ */
+static bcmos_errno bal_sw_util_group_set(group_inst *p_group_inst)
+{
+    bcmbal_group_cfg *p_group = &p_group_inst->api_req_group_info;
+    bcmos_errno ret = BCM_ERR_OK;
+    int unit;
+    uint32_t dev_type;
+    
+    BCM_LOG(INFO, log_id_sw_util,
+            " Got a group set request - group_id=%d \n", p_group->key.group_id);
+    
+    if(p_group->data.members.len == 0)
+    {
+        unit = bal_bcm_dft_dev_get();
+    }
+    else
+    {
+        unit = bal_bcm_pon_inf_dev_get(p_group->data.members.val[0].intf_id);
+    }
+    dev_type = bal_bcm_dev_type_get(unit);
+    
+    /* call the group set function based on device type */
+     if (dev_type == BCM_DEVICE_ARAD || dev_type == BCM_DEVICE_ARAD_PLUS || dev_type == BCM_DEVICE_QAX)
+     {
+         ret = bal_sw_util_dpp_group_set(unit, p_group);  
+     }
+     else
+     {
+         BCM_LOG(ERROR, log_id_sw_util, " Unknown device type found on group set: 0x%x\n", dev_type );
+         ret = BCM_ERR_INTERNAL;
+     }
+     
+     BCM_LOG(INFO, log_id_sw_util, " Return group set request with %d on device 0x%x\n", ret, dev_type );  
+          
+     return ret;
+}
+/**
+ * @brief The group create function program switch to create an empty group
+ *
+ * @param p_group_inst A pointer to the group instance being referenced
+ * @return error code
+ */
+static bcmos_errno bal_sw_util_group_create(group_inst *p_group_inst)
+{
+    bcmbal_group_cfg *p_group = &p_group_inst->api_req_group_info;
+    bcmos_errno ret = BCM_ERR_OK;
+    int unit;
+    uint32_t dev_type;
+    
+    BCM_LOG(INFO, log_id_sw_util,
+            " Got a group create request - group_id=%d \n", p_group->key.group_id);
+    
+
+    /* For now, only one switch device for a system. If multiple devices support is required,
+       need to loop through all devices to create the group */    
+    unit = bal_bcm_dft_dev_get();
+    dev_type = bal_bcm_dev_type_get(unit);
+    
+    /* call the group create function based on device type */
+     if (dev_type == BCM_DEVICE_ARAD || dev_type == BCM_DEVICE_ARAD_PLUS || dev_type == BCM_DEVICE_QAX)
+     {
+         if( NULL == bal_sw_util_dpp_group_create(unit, p_group))
+         {
+             BCM_LOG(ERROR, log_id_sw_util, " switch group create failed\n");
+             ret = BCM_ERR_INTERNAL;             
+         }             
+     }
+     else
+     {
+         BCM_LOG(ERROR, log_id_sw_util, " Unknown device type found on group create: 0x%x\n", dev_type );
+         ret = BCM_ERR_INTERNAL;
+     }
+     
+     BCM_LOG(INFO, log_id_sw_util, " Return group create request with %d on device 0x%x\n", ret, dev_type );  
+          
+     return ret;
+}
+/**
+ * @brief The group destroy function program switch to release all resource used in a group
+ *
+ * @param p_group_inst A pointer to the group instance being referenced
+ * @return error code
+ */
+static bcmos_errno bal_sw_util_group_destroy(group_inst *p_group_inst)
+{
+    bcmbal_group_cfg *p_group = &p_group_inst->current_group_info;
+    bcmos_errno ret = BCM_ERR_OK;
+    int unit;
+    uint32_t dev_type;
+    
+    BCM_LOG(INFO, log_id_sw_util,
+            " Got a group destroy request - group_id=%d \n", p_group->key.group_id);
+    
+
+    /* For now, only one switch device for a system. If multiple devices support is required,
+       need to loop through all devices to create the group */    
+    unit = bal_bcm_dft_dev_get();
+    dev_type = bal_bcm_dev_type_get(unit);
+    
+    /* call the group destroy function based on device type */
+     if (dev_type == BCM_DEVICE_ARAD || dev_type == BCM_DEVICE_ARAD_PLUS || dev_type == BCM_DEVICE_QAX)
+     {
+         ret = bal_sw_util_dpp_group_destroy(unit, p_group);  
+     }
+     else
+     {
+         BCM_LOG(ERROR, log_id_sw_util, " Unknown device type found on group destroy: 0x%x\n", dev_type );
+         ret = BCM_ERR_INTERNAL;
+     }
+     
+     BCM_LOG(INFO, log_id_sw_util, " Return group destroy request with %d on device 0x%x\n", ret, dev_type );  
+          
+     return ret;
+}
+
+static uint32_t g_group_inited = 0;
+
+#endif
+/**
+ * @brief SWITCH module: group SET handler
+ *
+ * This routine is called by group_fsm in the BAL core upon
+ * SET request for group object.
+ *
+ * @param p_group_inst      Pointer to group instance
+ * @param opt_type          Operation type on group instance
+ *
+ * @return bcmos_errno
+ */
+bcmos_errno sw_util_group_set(group_inst *p_group_inst, bal_util_oper_group opt_type)
+{
+    bcmos_errno ret = BCM_ERR_OK;   
+   
+#ifndef TEST_SW_UTIL_LOOPBACK  
+    bal_sw_util_vsi_list_init(); 
+    if (g_group_inited == 0)
+    {
+        /* initialized the internal group link list */
+        bal_sw_util_dpp_group_list_init();
+ 
+        g_group_inited = 1;
+    }
+    
+    if(p_group_inst == NULL)
+    {
+        BCM_LOG(ERROR, log_id_sw_util, "group set request with NULL pointer to the group instance\n");
+        return BCM_ERR_PARM;        
+    }
+    
+    if (opt_type == BAL_UTIL_OPER_GROUP_CREATE)
+    {
+        ret = bal_sw_util_group_create(p_group_inst);
+    }
+    else if (opt_type == BAL_UTIL_OPER_GROUP_ADD)
+    {
+        ret = bal_sw_util_group_add(p_group_inst);
+    }
+    else if( BAL_UTIL_OPER_GROUP_REMOVE == opt_type )
+    { 
+        ret = bal_sw_util_group_remove(p_group_inst);
+    }
+    else if( BAL_UTIL_OPER_GROUP_SET == opt_type )
+    { 
+        ret = bal_sw_util_group_set(p_group_inst);
+    }
+    else if( BAL_UTIL_OPER_GROUP_DESTROY == opt_type )
+    { 
+        ret = bal_sw_util_group_destroy(p_group_inst);
+    }
+    else
+    {
+        BCM_LOG(ERROR, log_id_sw_util, "Only CREATE/ADD/REMOVE/SET/DESTROY request is supported for GROUP object\n");
+        return BCM_ERR_NOT_SUPPORTED;        
+    }
+#else
+    BCM_LOG(INFO, log_id_sw_util, "dummy group %s SUCCESS\n", 
+            BCMBAL_UTIL_GROUP_OPER_STR_GET(opt_type));
+#endif
+
+    return ret;
+}
+
+/**
+ * @brief SWITCH module: group clean up function
+ *
+ * This routine is called from the bal_switch_util() when Core calls the finish function.
+ *
+ * @return bcmos_errno
+ */
+bcmos_errno sw_util_group_finish()
+{
+    bcmos_errno ret = BCM_ERR_OK;   
+   
+#ifndef TEST_SW_UTIL_LOOPBACK  
+    if (g_group_inited)
+    {
+        /* release the internal group link list */
+        bal_sw_util_dpp_group_list_finish();
+ 
+        g_group_inited = 0;
+    }
+#endif	
+	return ret;
+}
+/*@}*/
+
+ 
diff --git a/bal_release/src/core/util/switch/bal_switch_interface.c b/bal_release/src/core/util/switch/bal_switch_interface.c
new file mode 100644
index 0000000..cbd9f1b
--- /dev/null
+++ b/bal_release/src/core/util/switch/bal_switch_interface.c
@@ -0,0 +1,123 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+#include <bal_common.h>
+#include <bcm_dev_log.h>
+#include <bal_msg.h>
+#include "bal_switch_util.h"
+#include "bal_switch_acc_term.h"
+#include "bal_switch_interface.h"
+#include "dpp/bal_dpp_interface.h"
+
+#ifndef TEST_SW_UTIL_LOOPBACK
+#include <bcm/types.h>
+#include <bcm/port.h>
+
+/**
+ * @file bal_dpp_interface.c
+ * @brief BAL Switch util functions that handle interface requests on DUNE PACKET PROCESSOR 
+ * @addtogroup sw_util
+ *
+ */
+
+/*@{*/
+
+
+/**
+ * @brief Set up pon interface with DPP 
+ *
+ * This routine is called by sw_util_interface_set in the BAL core
+ * to execute DPP specific API for pon interface request
+ * 
+ * @param p_interface_inst   Pointer to interface instance
+ * @param opt_type           UP/DOWN/RESTART the interface 
+ * @return bcmos_errno
+ */
+bcmos_errno bal_sw_util_interface_set(acc_term_interface *p_interface_inst, bal_util_oper_if opt_type )
+{
+     bcmos_errno ret = BCM_ERR_OK;    
+     bcmbal_interface_key intf_key = p_interface_inst->api_req_int_obj_info.key;
+     int unit, intf_id;   
+     uint32_t dev_type;
+     
+     BCM_LOG(INFO, log_id_sw_util,
+            " Got a interface request - interface_id=%d \n", intf_key.intf_id);            
+   
+     unit = bal_bcm_pon_inf_dev_get(intf_key.intf_id);
+     intf_id = bal_bcm_pon_inf_pbm_get(intf_key.intf_id);
+     dev_type = bal_bcm_dev_type_get(unit);    
+
+     /* call the interface set function based on device type */
+     if (dev_type == BCM_DEVICE_KT2)
+     {
+         ret = BCM_ERR_OK;
+     }
+     else if (dev_type == BCM_DEVICE_ARAD || dev_type == BCM_DEVICE_ARAD_PLUS || dev_type == BCM_DEVICE_QAX)
+     {
+         ret = bal_sw_util_dpp_interface_set(p_interface_inst, opt_type);
+     }
+     else
+     {
+         BCM_LOG(ERROR, log_id_sw_util, " Unknown device type (0x%x)found on interface set\n", dev_type );
+         ret = BCM_ERR_INTERNAL;
+     }
+
+     BCM_LOG(DEBUG, log_id_sw_util, " Return interface set request with %d on %s 0x%x\n", ret, 
+             (intf_key.intf_type == BCMBAL_INTF_TYPE_PON ? "pon" : "nni"), intf_id);
+
+     return ret;
+}
+
+/*@}*/
+#endif /* #ifndef TEST_SW_UTIL_LOOPBACK */
+
+/**
+ * @brief SWITCH module: interface SET handler
+ *
+ * This routine is called by interface_fsm in the BAL core upon
+ * SET request for interface object.
+ *
+ * @param p_interface_inst   Pointer to interface instance
+ * @param opt_type           UP/DOWN/RESTART the interface 
+ * @return bcmos_errno
+ */
+bcmos_errno sw_util_interface_set(acc_term_interface *p_interface_inst, bal_util_oper_if opt_type)
+{
+    bcmos_errno ret = BCM_ERR_OK;  
+
+#ifndef TEST_SW_UTIL_LOOPBACK
+     ret = bal_sw_util_interface_set(p_interface_inst, opt_type);
+#else
+     BCM_LOG(INFO, log_id_sw_util, "dummy SUCCESS\n");
+#endif
+
+     return ret;
+}
diff --git a/bal_release/src/core/util/switch/bal_switch_interface.h b/bal_release/src/core/util/switch/bal_switch_interface.h
new file mode 100644
index 0000000..75d54b5
--- /dev/null
+++ b/bal_release/src/core/util/switch/bal_switch_interface.h
@@ -0,0 +1,52 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file bal_switch_interface.h
+ *
+ * @brief bal switch interface service function header file
+ *
+ * @addtogroup sw_util
+ */
+ 
+#ifndef  _BAL_BCM_INTERFACE_H_
+#define  _BAL_BCM_INTERFACE_H_
+
+/*@{*/
+#include "bcmos_errno.h"
+
+
+extern bcmos_errno bal_sw_util_interface_set(acc_term_interface *p_interface_inst, bal_util_oper_if opt_type);
+
+
+/*@}*/
+ 
+#endif
diff --git a/bal_release/src/core/util/switch/bal_switch_tm_queue.c b/bal_release/src/core/util/switch/bal_switch_tm_queue.c
new file mode 100755
index 0000000..5c4aa09
--- /dev/null
+++ b/bal_release/src/core/util/switch/bal_switch_tm_queue.c
@@ -0,0 +1,89 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file bal_switch_tm_queue.c
+ * @brief BAL Switch util functions that handle tm requests
+ * @addtogroup sw_util
+ */
+ 
+ /*@{*/
+#include <bal_common.h>
+#include <bcm_dev_log.h>
+#include <bal_msg.h>
+#include "bcmos_errno.h"
+#include "bal_switch_util.h"  
+#include "tm_sched_fsm.h" 
+
+
+/*  sw_util_tm_queue_validate() is called by the Core to validate the attributes of the tm_queue object
+*  p_msg  a pointer to the object bcmbal_tm_queue_cfg
+*/
+bcmos_errno sw_util_tm_queue_validate(void *p_msg)
+{
+    return BCM_ERR_OK;
+}
+
+/*  sw_util_tm_queue_set() is called by the Core to create an instance of TM Queue in the switch
+*  p_tm_queue_inst  a pointer to the data structure tm_queue_inst that used in the Core to manage
+*                   the received tm_queue configuration request from the BAL client
+*
+*  Required attributes
+*  Key              - key to unique identify the TM queue and the parent scheduler
+*  Max size         - queue size
+*  Priority         - SP priority, if parent scheduler is of type SP
+*  Weight           - WFQ weight, if parent scheduler is of type WFQ
+*
+*  Optional
+*  Rate             - for rate limit, if not specified default to FULL rate
+*/
+bcmos_errno sw_util_tm_queue_set(tm_queue_inst *p_tm_queue_inst)
+{
+    return BCM_ERR_OK;
+}
+
+/*  sw_util_tm_queue_clear() is called by the Core to remove an instance of TM queue in the switch
+*  p_tm_queue_inst  a pointer to the data structure tm_queue_inst that used in the Core to manage
+*                   the received tm_queue configuration request from the BAL client
+*
+*  Required attributes
+*  Key             - key to unique identify the TM queue
+*
+*  Note:  CLEAR request should be rejected if any flow is still referencing it
+*/
+bcmos_errno sw_util_tm_queue_clear(tm_queue_inst *p_tm_queue_inst)
+{
+    return BCM_ERR_OK;
+}
+
+/*@}*/
+
+ 
diff --git a/bal_release/src/core/util/switch/bal_switch_tm_sched.c b/bal_release/src/core/util/switch/bal_switch_tm_sched.c
new file mode 100644
index 0000000..3412f2e
--- /dev/null
+++ b/bal_release/src/core/util/switch/bal_switch_tm_sched.c
@@ -0,0 +1,88 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file bal_switch_tm_sched.c
+ * @brief BAL Switch util functions that handle tm requests
+ * @addtogroup sw_util
+ */
+ 
+ /*@{*/
+ 
+#include <bal_common.h>
+#include <bcm_dev_log.h>
+#include <bal_msg.h>
+#include "bcmos_errno.h"
+#include "bal_switch_util.h"
+
+#include "tm_sched_fsm.h" 
+
+
+ 
+/*  sw_util_tm_sched_validate() is called by the Core to validate the attributes of the tm_sched object
+ *  p_msg  a pointer to the object bcmbal_tm_sched_cfg
+ */
+bcmos_errno sw_util_tm_sched_validate(void *p_msg)
+{
+    return BCM_ERR_OK;
+}
+ 
+/*  sw_util_tm_sched_set() is called by the Core to create an instance of TM scheduler in the switch
+ *  p_tm_sched_inst  a pointer to the data structure tm_sched_inst that used in the Core to manage
+ *                   the received tm_sched configuration request from the BAL client
+ *
+ *  Required attributes
+ *  Key              - key to unique identify the TM sched
+ *  Owner types      - Interface, Subscriber_Terminal
+**  Owner id         - id of interface or subscriber terminal
+ *  Schedule types   - SP, WFQ, SP_WFQ
+**  Num_of_priority  - 1 - 16   
+* TM objects in the schedule_level this TM sched can support */
+bcmos_errno sw_util_tm_sched_set(tm_sched_inst *p_tm_sched_inst)
+{
+    return BCM_ERR_OK;
+}
+
+/*  sw_util_tm_sched_clear() is called by the Core to remove an instance of TM scheduler in the switch
+*  p_tm_sched_inst  a pointer to the data structure tm_sched_inst that used in the Core to manage
+*                   the received tm_sched configuration request from the BAL client
+*
+*  Required attributes
+*  Key             - key to unique identify the TM sched
+*/
+bcmos_errno sw_util_tm_sched_clear(tm_sched_inst *p_tm_sched_inst)
+{
+    return BCM_ERR_OK;
+}
+/*@}*/
+
+ 
+
diff --git a/bal_release/src/core/util/switch/bal_switch_util.c b/bal_release/src/core/util/switch/bal_switch_util.c
new file mode 100644
index 0000000..696295f
--- /dev/null
+++ b/bal_release/src/core/util/switch/bal_switch_util.c
@@ -0,0 +1,89 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file bal_switch_util.c
+ *
+ * @brief Switch App interfaces definition used by Bal Core
+ *
+ * This file provides CmdSet message handler functions with relevant  
+ * bal object operations of access terminal and flow.
+ * 
+ * @addtogroup sw_util
+ *
+ */
+
+/*@{*/
+
+#include <bcm_dev_log.h>
+#include <bal_common.h>
+#include <bal_msg.h>
+#include "bal_switch_util.h"
+
+/*
+ * Logging device id
+ */
+dev_log_id log_id_sw_util;
+
+/**
+* @brief sw_util_init  routine to initialize the switch util before any use 
+* @return bcmos_errno 
+*/
+bcmos_errno sw_util_init(void)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+
+    log_id_sw_util = bcm_dev_log_id_register("SW_UTIL", DEV_LOG_LEVEL_INFO, DEV_LOG_ID_TYPE_BOTH);
+    BUG_ON(log_id_sw_util== DEV_LOG_INVALID_ID);
+
+    return rc; 
+}
+
+/**
+* @brief sw_util_finish  routine to release any resource used by the switch util before exit 
+* @return bcmos_errno 
+*/
+bcmos_errno sw_util_finish(void)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+
+    /* release any internal allocated DB - best effort as we are exiting anyway */
+	/* flow */
+	sw_util_flow_finish();
+	 
+	/* group */
+	sw_util_group_finish(); 
+
+    return rc; 
+}
+
+/*@}*/
+
diff --git a/bal_release/src/core/util/switch/bal_switch_util.h b/bal_release/src/core/util/switch/bal_switch_util.h
new file mode 100644
index 0000000..a33a2ac
--- /dev/null
+++ b/bal_release/src/core/util/switch/bal_switch_util.h
@@ -0,0 +1,93 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file bal_switch_util.h
+ *
+ * @brief Switch App interfaces header file
+ *
+ * This file expose the APIs to the core to configure the switchs
+ * with regarding to the operation of access terminal and flow.
+ *
+ * @defgroup sw_util Switch Util
+ * @ingroup core
+ */
+
+#ifndef  _BAL_SWITCH_UTIL_H_
+#define  _BAL_SWITCH_UTIL_H_
+
+/*@{*/ 
+
+#include <acc_term_fsm.h>
+#include <flow_fsm.h>
+#include <group_fsm.h>
+#include <tm_sched_fsm.h>
+#include <tm_queue_fsm.h>
+
+
+#include <bcmcli.h>
+#include <bal_utils_msg.h>
+
+#define BCM_DEVICE_KT2       0xb450
+#define BCM_DEVICE_ARAD_PLUS 0x8660
+#define BCM_DEVICE_ARAD      0x8650
+#define BCM_DEVICE_QAX       0x8470
+
+/* Function Prototypes for external */
+bcmos_errno sw_util_access_terminal_set(acc_term_inst *p_acc_term, bal_util_oper_acc_term opt_type);
+bcmos_errno sw_util_flow_info_validate(void *p_msg);
+bcmos_errno sw_util_flow_set(flow_inst *p_flow, bal_util_oper_flow opt_type);
+bcmos_errno sw_util_flow_finish(void);
+bcmos_errno sw_util_interface_set(acc_term_interface *p_interface_inst, bal_util_oper_if opt_type);
+bcmos_errno sw_util_group_info_validate(void *p_msg);
+bcmos_errno sw_util_group_set(group_inst *p_group_inst, bal_util_oper_group opt_type);
+bcmos_errno sw_util_group_finish(void);
+bcmos_errno sw_util_init(void);
+bcmos_errno sw_util_cli_init(bcmcli_entry *top_dir);
+bcmos_errno sw_util_finish(void);
+
+
+bcmos_errno sw_util_tm_sched_validate(void *p_msg);
+bcmos_errno sw_util_tm_sched_set(tm_sched_inst *p_tm_sched_inst);
+bcmos_errno sw_util_tm_sched_clear(tm_sched_inst *p_tm_sched_inst);   
+
+bcmos_errno sw_util_tm_queue_validate(void *p_msg);
+bcmos_errno sw_util_tm_queue_set(tm_queue_inst *p_tm_queue_inst);
+bcmos_errno sw_util_tm_queue_clear(tm_queue_inst *p_tm_queue_inst);
+
+
+/* switch util log id */
+extern dev_log_id log_id_sw_util;
+
+/*@}*/
+
+#endif /* _BAL_SWITCH_UTIL_H_ */
+
diff --git a/bal_release/src/core/util/switch/dpp/Makefile b/bal_release/src/core/util/switch/dpp/Makefile
new file mode 100644
index 0000000..5da000b
--- /dev/null
+++ b/bal_release/src/core/util/switch/dpp/Makefile
@@ -0,0 +1,46 @@
+###############################################################################
+#
+#  <:copyright-BRCM:2016:DUAL/GPL:standard
+#  
+#     Copyright (c) 2016 Broadcom
+#     All Rights Reserved
+#  
+#  Unless you and Broadcom execute a separate written software license
+#  agreement governing use of this software, this software is licensed
+#  to you under the terms of the GNU General Public License version 2
+#  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+#  with the following added to such license:
+#  
+#     As a special exception, the copyright holders of this software give
+#     you permission to link this software with independent modules, and
+#     to copy and distribute the resulting executable under terms of your
+#     choice, provided that you also meet, for each linked independent
+#     module, the terms and conditions of the license of that module.
+#     An independent module is a module which is not derived from this
+#     software.  The special exception does not apply to any modifications
+#     of the software.
+#  
+#  Not withstanding the above, under no circumstances may you combine
+#  this software in any way with any other Broadcom software provided
+#  under a license other than the GPL, without Broadcom's express prior
+#  written consent.
+#  
+#  :>
+#
+###############################################################################
+# BAL Switch Util DPP  
+MOD_NAME = switch_util_dpp
+MOD_TYPE = lib
+MOD_DEPS = dev_log utils bal_api bal_app_utils
+srcs = bal_dpp_acc_term.c bal_dpp_flow.c bal_dpp_interface.c bal_dpp_qos.c bal_dpp_qos_map.c bal_dpp_vswitch.c bal_dpp_group.c
+EXTRA_CFLAGS += -I$(SRC_DIR)/../../../main -I$(SRC_DIR)/..
+
+ifeq ("$(TEST_SW_UTIL_LOOPBACK)", "y")
+	MOD_DEFS += -DTEST_SW_UTIL_LOOPBACK
+else	
+	MOD_DEPS += switch_sdk
+endif
+
+ifeq ("$(SWITCH)", "qax")
+       MOD_DEFS += -DQAX_SWITCH
+endif
diff --git a/bal_release/src/core/util/switch/dpp/bal_dpp_acc_term.c b/bal_release/src/core/util/switch/dpp/bal_dpp_acc_term.c
new file mode 100755
index 0000000..42a9e95
--- /dev/null
+++ b/bal_release/src/core/util/switch/dpp/bal_dpp_acc_term.c
@@ -0,0 +1,624 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+#ifndef TEST_SW_UTIL_LOOPBACK
+
+#include <bal_common.h>
+#include <bcm_dev_log.h>
+#include <bal_msg.h>
+#include "bal_switch_util.h"
+#include "bal_switch_acc_term.h"
+#include "bal_dpp_acc_term.h"
+#include "bal_dpp_qos.h"
+#include "bal_dpp_qos_map.h"
+
+#include <bcm/types.h>
+#include <bcm/port.h>
+#include <bcm/rx.h>   /* for dpp rpc rx register callback */
+#include <bcm/switch.h>
+#include <bcm/l2.h>
+
+/**
+ * @file bal_dpp_acc_term.c
+ * @brief BAL Switch util functions that handle access terminal requests on DUNE PACKET PROCESSOR 
+ * @addtogroup sw_util
+ *
+ */
+
+/*@{*/
+ 
+ /* @brief L2 Table Operation Control
+ *
+ * This routine set the HW L2 learning and aging 
+ * 
+ * @param unit    The device id
+ * @param flags   Operation flags
+ *                BCM_L2_LEARN_CPU    0x20
+ *                BCM_L2_INGRESS_DIST 0x02
+ *                BCM_L2_INGRESS_CENT 0x01 
+ * @param age_seconds   L2 entry age out time in seconds
+ * @return        BCM error code 
+ */    
+static int sw_util_dpp_l2_entry_control_set(int unit, int flags, int age_seconds)
+{
+    int rv = 0;
+
+    rv = bcm_switch_control_set(unit, bcmSwitchL2LearnMode, flags);
+    if (rv)
+    {
+        BCM_LOG(ERROR, log_id_sw_util, " bcm_switch_control_set failed ret = %d\n", rv);
+        return rv;
+    }
+
+    /* set aging time */
+    rv = bcm_l2_age_timer_set(unit, age_seconds);
+    if (rv)
+    {
+        BCM_LOG(ERROR, log_id_sw_util, " bcm_l2_age_timer_set failed ret = %d\n", rv);
+        return rv;
+    }
+    else
+    {
+        BCM_LOG(INFO, log_id_sw_util, " Set L2 table aging time to %d seconds\n", age_seconds); 
+    }
+
+    return rv;
+
+}
+
+
+/**
+ * @brief L2 Table event handler
+ *
+ * This routine is a callback triggered by HW L2 Table events 
+ * 
+ * @param unit        The device id
+ * @param p_l2addr    Pointer to the L2 entry where the event is happen 
+ * @param operation   The type of event
+ * @param userdata    Pointer to a user provided data when the handler is registered 
+ */
+static void sw_util_dpp_l2_entry_event_handler(int unit, bcm_l2_addr_t *p_l2addr, int operation, void *userdata)
+{
+
+    if (p_l2addr == NULL)
+    {
+        BCM_LOG(ERROR, log_id_sw_util, " L2 entry callback with NULL L2 address, op = %d\n", operation);
+        return;
+    }
+    if (operation == BCM_L2_CALLBACK_LEARN_EVENT)
+    {
+        BCM_LOG(DEBUG, log_id_sw_util, " BCM_L2_CALLBACK_LEARN_EVENT handler\n");
+    }
+    else if (operation == BCM_L2_CALLBACK_MOVE_EVENT)
+    {
+        BCM_LOG(DEBUG, log_id_sw_util, " BCM_L2_CALLBACK_MOVE_EVENT handler\n");
+    }
+    else if (operation == BCM_L2_CALLBACK_AGE_EVENT)
+    {
+        BCM_LOG(DEBUG, log_id_sw_util, " BCM_L2_CALLBACK_AGE_EVENT handler\n");
+    }
+    else 
+    {
+        BCM_LOG(DEBUG, log_id_sw_util, " BCM_L2_CALLBACK_OPERATION %d handler\n", operation);
+    }
+     
+    BCM_LOG(DEBUG, log_id_sw_util, "     MAC %02x:%02x:%02x:%02x:%02x:%02x\n",
+                                    (0xff & p_l2addr->mac[0]),
+                                    (0xff & p_l2addr->mac[1]),
+                                    (0xff & p_l2addr->mac[2]),
+                                    (0xff & p_l2addr->mac[3]),
+                                    (0xff & p_l2addr->mac[4]),
+                                    (0xff & p_l2addr->mac[5])  );
+                                  
+    if(!(p_l2addr->flags & BCM_L2_MCAST))
+    {
+        BCM_LOG(DEBUG, log_id_sw_util, "     UC VID=0x%x| PORT=0x%08x\n", p_l2addr->vid, p_l2addr->port);
+        /* print_gport_part - p_l2addr->port */
+        {
+            int a = -1, b = 0;
+            char* type = "";
+            if (a==-1){
+                a=BCM_GPORT_LOCAL_GET(p_l2addr->port);
+                type ="local";
+            }
+            if (a==-1){
+                a=BCM_GPORT_MODPORT_MODID_GET(p_l2addr->port);
+                b=BCM_GPORT_MODPORT_PORT_GET(p_l2addr->port);
+                type ="modport";
+            }
+            if (a==-1){
+                a=BCM_GPORT_TRUNK_GET(p_l2addr->port);
+                type ="trunk";
+            }
+            if (a==-1){
+                a=BCM_GPORT_MCAST_GET(p_l2addr->port);
+                type ="mact";
+            }
+            if (a==-1){
+                a=BCM_GPORT_MPLS_PORT_ID_GET(p_l2addr->port);
+                type ="mpls_port";
+            }
+            if (a==-1){
+                a=BCM_GPORT_VLAN_PORT_ID_GET(p_l2addr->port);
+                type ="vlan_port";
+            }
+            if (a==-1){
+                a=BCM_GPORT_SYSTEM_PORT_ID_GET(p_l2addr->port);
+                type ="sys_port";
+            }
+            if (a==-1){
+                a=BCM_GPORT_MIRROR_GET(p_l2addr->port);
+            }
+            BCM_LOG(DEBUG, log_id_sw_util, "     GPORT %s <0x%x,%d>\n", type, a, b);
+        }
+    }
+    else
+    {
+        BCM_LOG(DEBUG, log_id_sw_util, "     MC 0x%08x\n",p_l2addr->l2mc_group);
+    }
+    BCM_LOG(DEBUG, log_id_sw_util, "     static %d|\n", (p_l2addr->flags & BCM_L2_STATIC)!=0 );
+    
+}
+
+/**
+ * @brief Connect access terminal with DPP as part of the components
+ *
+ * This routine is called by sw_util_access_terminal_connect in the BAL core
+ * to execute DPP specific API for access_terminal_connect request
+ * 
+ * @param p_net_map    Pointer to the net ports mapping from logical numbrer to physical number
+ * @param p_pon_map    Pointer to the pon ports mapping from logical numbrer to physical number
+ * @return bcmos_errno
+ */
+bcmos_errno sw_util_dpp_acc_term_connect(bal_swapp_port *p_net_map, bal_swapp_port *p_pon_map )
+{
+     bcmos_errno ret = BCM_ERR_OK;
+     int      rc = 0; 
+     bal_swapp_port *port;
+     
+     BCM_LOG(INFO, log_id_sw_util, " DPP - Got a access terminal CONNECT\n");
+
+     do
+     {
+         /* setup the device ID  - This is very hardware specific */
+         port = p_net_map;
+         /* -1 indicate the end of table */
+         while(port->pbm_id != -1)
+         {        
+             
+             /* the default TPID is 0x8100, add 0x88a8 to the allow TPID */
+             
+             rc = bcm_port_tpid_delete_all(port->device_id, port->pbm_id);
+             if (rc)
+             {
+                BCM_LOG(ERROR, log_id_sw_util, " DPP - fail to clear the nni TPID list on interface %d\n", port->pbm_id);
+                ret = BCM_ERR_INTERNAL;      
+             }
+             rc = bcm_port_tpid_add(port->device_id, port->pbm_id, 0x8100, 0);
+             if (rc)
+             {
+                BCM_LOG(ERROR, log_id_sw_util, " DPP - fail to add 0x8100 to the nni TPID list on interface %d\n", port->pbm_id);
+                ret = BCM_ERR_INTERNAL;            
+             }
+             rc = bcm_port_tpid_add(port->device_id, port->pbm_id, 0x88a8, 0);
+             if (rc)
+             {
+                BCM_LOG(ERROR, log_id_sw_util, " DPP - fail to add 0x88a8 to the nni TPID list on interface %d\n", port->pbm_id);
+                ret = BCM_ERR_INTERNAL;            
+             }
+             
+             port++;         
+         }    
+     
+         port = p_pon_map;
+         while(port->pbm_id != -1)
+         {        
+
+             /* the default TPID is 0x8100, add 0x88a8 to the allow TPID */
+             
+             rc = bcm_port_tpid_delete_all(port->device_id, port->pbm_id);
+             if (rc)
+             {
+                BCM_LOG(ERROR, log_id_sw_util, " DPP - fail to clear the pon TPID list on interface %d\n", port->pbm_id);
+                ret = BCM_ERR_INTERNAL;      
+             }
+             rc = bcm_port_tpid_add(port->device_id, port->pbm_id, 0x8100, 0);
+             if (rc)
+             {
+                BCM_LOG(ERROR, log_id_sw_util, " DPP - fail to add 0x8100 to the pon TPID list on interface %d\n", port->pbm_id);
+                ret = BCM_ERR_INTERNAL;            
+             }
+             rc = bcm_port_tpid_add(port->device_id, port->pbm_id, 0x88a8, 0);
+             if (rc)
+             {
+                BCM_LOG(ERROR, log_id_sw_util, " DPP - fail to add 0x88a8 to the pon TPID list on interface %d\n", port->pbm_id); 
+                ret = BCM_ERR_INTERNAL;            
+             }
+             
+             port++;         
+         } 
+        
+         if(ret != BCM_ERR_OK)
+         {
+             /* exit if port init failed */
+             break;
+         }
+        
+         /* Remove all ports from VLAN 1, so the L2 broadcast won't send to CPU port by default */
+         bcm_vlan_gport_delete_all(bal_bcm_dft_dev_get(), 1);
+         
+        /* configure all qos map tables */
+         ret = bal_sw_dpp_pcp_remark_maps_init(bal_bcm_dft_dev_get());
+         if (ret)
+         {
+            BCM_LOG(WARNING, log_id_sw_util, " DPP - fail to init qos map tables\n");
+            break;            
+         }
+         
+         /* init the DS QOS hierarchical scheduling - ignore error if HW dos not support QOS */          
+         ret =bal_sw_dpp_qos_init(bal_bcm_dft_dev_get(), bal_bcm_intf_maptable_get());
+         if (ret)
+         {
+            BCM_LOG(WARNING, log_id_sw_util, " DPP - fail to init qos HR scheduler\n");
+            break;            
+         }
+             
+         rc = bcm_l2_addr_register(bal_bcm_dft_dev_get(), sw_util_dpp_l2_entry_event_handler, NULL);
+         if (rc)
+         {
+            BCM_LOG(WARNING, log_id_sw_util, " DPP - fail to register l2_addr callback \n");
+            ret = BCM_ERR_INTERNAL;
+            break;
+         }
+         
+         rc = sw_util_dpp_l2_entry_control_set(bal_bcm_dft_dev_get(), BCM_L2_LEARN_CPU|BCM_L2_INGRESS_DIST, bal_bcm_l2_age_time_get());
+         if (rc)
+         {
+            BCM_LOG(WARNING, log_id_sw_util, " DPP - fail to set l2_addr control \n");
+            ret = BCM_ERR_INTERNAL;
+            break;
+         }
+     }while(0);
+     return ret;
+}
+
+/* internal structure used by the trap receiving thread */
+typedef struct 
+{
+    int udp_port;
+    pthread_t threadid;
+    dpp_rx_cb_f callback;
+} trap_context;
+
+static trap_context g_trap_ctx = {0};
+
+/* the adjustment needed for ING trap packet header */ 
+#define DEFAULT_SOP_ADJ    2
+#define DEFAULT_REASON_ADJ 4
+/* compiler restirct the total local variables size < 16384 */
+#define DEFAULT_TRAP_BUF_SIZE (10 *1024) 
+/*
+   the listener thread that wait for the trap packet_in message from the switch
+*/   
+static void *trap_receive(void *p_user_data)
+{
+    int rc;
+    int sUDPSocket;
+    unsigned char cBuffer[DEFAULT_TRAP_BUF_SIZE];
+    int nBytesRecv = 0;
+    int nBufSize = DEFAULT_TRAP_BUF_SIZE;
+    socklen_t nReceiveAddrSize = 0;
+    int maxfd;
+    fd_set read_fds;
+    struct timeval tv;
+    uint16_t tmp_src_port, src_port;
+    trap_context *p_trap_ctx = (trap_context *)p_user_data; 
+    uint32_t tmp_reason, reason;
+    /* Create a connectionless socket */
+    sUDPSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
+    /* Check to see if we have a valid socket */
+    if(sUDPSocket < 0)
+    {
+        BCM_LOG(ERROR, log_id_sw_util, " DPP - trap_receive:create socket failed\n"); 
+        return NULL;
+    }
+
+     // Setup a bind on the socket, telling us what port and
+     // adapter to receive datagrams on. 
+     struct sockaddr_in sReceiveFromAddr;
+     memset(&sReceiveFromAddr, 0, sizeof(struct sockaddr_in));
+
+     sReceiveFromAddr.sin_family = AF_INET;
+     sReceiveFromAddr.sin_port = htons(p_trap_ctx->udp_port);
+     sReceiveFromAddr.sin_addr.s_addr = htonl(INADDR_ANY);
+
+     rc = bind(sUDPSocket, (struct sockaddr *)&sReceiveFromAddr,
+                            sizeof(struct sockaddr_in));
+     if (rc < 0)
+     { 
+          BCM_LOG(ERROR, log_id_sw_util, " DPP - trap_receive:bind failed\n");
+          return NULL;
+     }
+
+     BCM_LOG(INFO, log_id_sw_util, " DPP - trap_receive start listen at %d\n", p_trap_ctx->udp_port);
+     
+     // Receive a datagram from another device
+     while(1)
+     {
+          FD_ZERO(&read_fds);
+          FD_SET(sUDPSocket, &read_fds);
+          maxfd = sUDPSocket;
+          /* Set the timeout */
+          tv.tv_sec  = 3;
+          tv.tv_usec = 0;  /*  3 seconds */
+          rc = select(maxfd + 1, &read_fds, NULL, NULL, &tv);
+
+          if (rc < 0)
+          {
+              BCM_LOG(ERROR, log_id_sw_util, " DPP - trap_receive:select failed err = %d\n", rc);
+              break;
+          }
+          if (rc == 0) /* timeout */
+          { 
+              continue;
+          }
+          // Get the datagrama
+          nBytesRecv = recvfrom(sUDPSocket, cBuffer, nBufSize, 0,
+                                (struct sockaddr *) &sReceiveFromAddr,
+                                &nReceiveAddrSize);
+           BCM_LOG(INFO, log_id_sw_util, " DPP - Got %d bytes message \n", nBytesRecv);
+
+          /* the first 4 bytes are reason */ 
+          /* compiler  generate cast-align warning -> p_reason = (uint32_t *)(cBuffer); */
+          memcpy(&tmp_reason, cBuffer, sizeof(uint32_t) );
+          reason = ntohl(tmp_reason);
+          /* the next 2 bytes are srouce port */
+          /* compiler generate cast-align warning -> p_src_port = (uint16 *)(cBuffer + DEFAULT_REASON_ADJ); */
+          memcpy(&tmp_src_port, cBuffer + DEFAULT_REASON_ADJ, sizeof(uint16_t));        
+          src_port = ntohs(tmp_src_port);
+
+          /* call the register callback here - set unit to 0 as it is don't care */
+          if(p_trap_ctx->callback)
+          {
+              p_trap_ctx->callback(0, src_port, reason, cBuffer+DEFAULT_SOP_ADJ+DEFAULT_REASON_ADJ, nBytesRecv-DEFAULT_SOP_ADJ-DEFAULT_REASON_ADJ);
+          }
+       }
+       close(sUDPSocket);
+
+       return NULL; 
+}
+
+/**
+ * @brief Start a receiving thread and add the callbck to process CPU trapped packets  
+ *
+ * This routine is called by sw_util_access_terminal_connect in the BAL core
+ * to execute DPP specific API for process the trapping packets
+ * 
+ * @param unit   the switch device number the callback applied 
+ * @param cb_f   a callback function that process the trapped packets 
+ * @return bcmos_errno
+ */
+bcmos_errno sw_util_dpp_rx_cb_register(uint32_t unit, dpp_rx_cb_f cb_f)
+{
+    int ret;
+    
+    /* if the receiving thread already started, return error */
+    if (g_trap_ctx.threadid)
+    {
+        BCM_LOG(ERROR, log_id_sw_util, " DPP - There is an existing trap receiving thread\n"); 
+        return BCM_ERR_INTERNAL;          
+    }
+    
+    g_trap_ctx.udp_port = bal_bcm_trap_rcv_port_get();
+    g_trap_ctx.callback = cb_f;
+    
+    /* use default attribute to create the thread */
+    ret = pthread_create(&g_trap_ctx.threadid, NULL, &trap_receive, &g_trap_ctx);
+    
+    if(ret)
+    {
+        BCM_LOG(ERROR, log_id_sw_util, " DPP - fail to create trap receiving thread - %d\n", ret); 
+        return BCM_ERR_INTERNAL;     
+    }
+    
+    return BCM_ERR_OK;
+}
+
+/* To make compiler happy when build with ESW switch only */
+#ifdef ESW_SWITCH
+void dpp_dft_rx_cb(int unit, int dst_port, int reason, unsigned char *payload, int payload_len)
+{ 
+    return;
+}
+#else
+extern void dpp_dft_rx_cb(int unit, int dst_port, int reason, unsigned char *payload, int payload_len);
+#endif
+
+#define L2_HEADER_SIZE                   (12) /* bytes */
+
+#define TUNNEL_TAG_TPID_LEN              (2)  /* bytes - TPID (2 bytes) */
+#define TUNNEL_TAG_PBITS_CFI_VLAN_ID_LEN (2)  /* PBITS+CFI+VLAN ID (2 bytes) */
+#define TUNNEL_TAG_SIZE                  (TUNNEL_TAG_TPID_LEN + TUNNEL_TAG_PBITS_CFI_VLAN_ID_LEN) 
+
+bcmos_errno sw_util_dpp_pkt_send(int target_port_id,
+                                 int reason,
+                                 unsigned char *p_user_pkt,
+                                 int user_pkt_len,
+                                 trap_target target_device,
+                                 int target_tunnel_id)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    char *p_pktout_msg; 
+    uint8_t dst_port_id;
+    int dst_device_id;
+    char *p_pktout_ptr;
+    uint32_t total_msg_size;   
+    uint32_t uint32_num;
+    uint16_t uint16_num;    
+
+   /*
+    * Allocate a message to be sent to the bcm.user instance.  This will contain
+    * the packet to be sent out of the switch, as well has header metadata.
+    */
+    p_pktout_msg = bcmos_calloc(user_pkt_len +
+                                DEFAULT_SOP_ADJ +
+                                DEFAULT_REASON_ADJ +
+                                TUNNEL_TAG_SIZE);
+
+    if(NULL == p_pktout_msg)
+    {
+        return BCM_ERR_NOMEM;
+    }
+
+    /* translate the output port to the bcm.user's mapping */
+    switch(reason)
+    {   
+        case REASON_SEND_TO_NNI:
+            dst_port_id = bal_bcm_net_inf_pbm_get(target_port_id);
+            dst_device_id = bal_bcm_net_inf_dev_get(target_port_id);
+        break;
+        case REASON_SEND_TO_PON:
+            dst_port_id = bal_bcm_pon_inf_pbm_get(target_port_id);
+            dst_device_id = bal_bcm_pon_inf_dev_get(target_port_id);
+        break;
+        default:
+            return BCM_ERR_PARM;
+        break;          
+    }
+  
+    /* Format of the message to the bcm.user instance is:
+     *
+     * reason code: 4 bytes
+     * dst_port: 2 bytes
+     * user packet: pkt_size bytes
+     */
+
+    /* Insert the 4 bytes with reason code */
+    uint32_num = (htonl(reason));
+    memcpy(p_pktout_msg, &uint32_num, sizeof(uint32_num));
+
+    /* Replace 2 bytes with packet_out destination port info.  This is the bcm.user's
+     * mapping of output port (NNI or PON) to BCM SDK port mapping */
+    uint16_num = htons(dst_port_id & 0xff); /* dst_port contents is actually only 1 byte */
+    memcpy(&p_pktout_msg[DEFAULT_REASON_ADJ], &uint16_num, sizeof(uint16_num));
+
+    /* Copy in the user packet to send to the bcm.user for transmission out of the switch.
+     * Remember to insert the proper tunnel tag in the message for out_ports that are
+     * associated with the PON
+     */
+    p_pktout_ptr = p_pktout_msg + DEFAULT_REASON_ADJ + DEFAULT_SOP_ADJ;
+    total_msg_size = user_pkt_len + DEFAULT_REASON_ADJ + DEFAULT_SOP_ADJ;
+  
+    if(reason == REASON_SEND_TO_NNI)
+    {
+        /* Copy in the entire packet as-is */
+        memcpy(p_pktout_ptr, p_user_pkt, user_pkt_len);
+    }
+    else
+    {       
+        uint16_t pktout_offset = 0;
+
+        /* Copy in the L2 header (MAC DA/SA) */
+        memcpy(&p_pktout_ptr[pktout_offset], p_user_pkt, L2_HEADER_SIZE);
+
+        /* Point to the tunnel tag area in the outgoing message */
+        pktout_offset += L2_HEADER_SIZE;
+
+        /* Insert the TPID in the tag for the output destination */
+        uint16_num = htons(0x8100);
+        memcpy(&p_pktout_ptr[pktout_offset], &uint16_num, sizeof(uint16_num));
+
+        /* Point to the remainder of the outgoing message */
+        pktout_offset += TUNNEL_TAG_TPID_LEN;
+        /* Insert the tunnel tag vlan ID for the output destination */
+        uint16_num = htons(target_tunnel_id);
+        memcpy(&p_pktout_ptr[pktout_offset], &uint16_num, sizeof(uint16_num));
+
+        /* Point to the remainder of the outgoing message */
+        pktout_offset += TUNNEL_TAG_PBITS_CFI_VLAN_ID_LEN;
+
+        /* Copy in the rest of the message */
+        memcpy(&p_pktout_ptr[pktout_offset],
+               (p_user_pkt + L2_HEADER_SIZE),
+               (user_pkt_len - L2_HEADER_SIZE));
+
+        total_msg_size += TUNNEL_TAG_SIZE;
+    }
+
+
+    BCM_LOG(DEBUG, log_id_sw_util, "Packet send (user pkt_size:%d) destined for %s port %d\n",
+            user_pkt_len,
+            (reason == REASON_SEND_TO_PON) ? "PON" : "NNI",
+            dst_port_id);
+
+    if(reason == REASON_SEND_TO_PON)
+    {
+        BCM_LOG(DEBUG, log_id_sw_util, "Sending via GEM %d\n", target_tunnel_id);
+    }
+
+    if (bal_bcm_use_rpc_get()) 
+    {
+        /* On systems where BAL runs remotely from the switch hardware, we
+         * send the packet out message to the remote bcm.user process.  
+         * That process then sends the attached user packet to the specified switch port.
+         */
+
+        sendto(target_device.socket,
+               p_pktout_msg,
+               total_msg_size, 0,
+               (struct sockaddr *) &(target_device.addr),
+               sizeof(struct sockaddr_in));
+
+    }
+    else
+    {
+        /* On systems where BAL runs on the CPU co-located with the switch hardware,
+         * we send the attached user packet to the specified switch port directly.
+         */
+
+        total_msg_size = total_msg_size - ( DEFAULT_REASON_ADJ + DEFAULT_SOP_ADJ );
+        dpp_dft_tx_cb(dst_device_id,
+                      dst_port_id,
+                      reason,
+                      (unsigned char *)p_pktout_ptr,
+                      total_msg_size);
+    }
+
+    bcmos_free(p_pktout_msg);
+
+    BCM_LOG(INFO, log_id_sw_util, "CPU packet msg sent to bcm.user for packet with msg size of %d (payload size: %d)\n",
+            total_msg_size, user_pkt_len);
+  
+    return ret;
+}
+
+/*@}*/
+#endif /* #ifndef TEST_SW_UTIL_LOOPBACK */
diff --git a/bal_release/src/core/util/switch/dpp/bal_dpp_acc_term.h b/bal_release/src/core/util/switch/dpp/bal_dpp_acc_term.h
new file mode 100755
index 0000000..4f71549
--- /dev/null
+++ b/bal_release/src/core/util/switch/dpp/bal_dpp_acc_term.h
@@ -0,0 +1,63 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file bal_dpp_acc_term.h
+ *
+ * @brief bal switch util access terminal service function header file for DUNE PACKET PROCESSOR
+ *
+ * @addtogroup sw_util
+ */
+ 
+#ifndef  _BAL_DPP_ACC_TERM_H_
+#define  _BAL_DPP_ACC_TERM_H_
+
+/*@{*/
+#include "bcmos_errno.h"
+#include "bal_switch_util.h"
+#include "bal_switch_acc_term.h"
+
+extern bcmos_errno sw_util_dpp_acc_term_connect(bal_swapp_port *p_net_map, bal_swapp_port *p_pon_map);
+
+#ifndef TEST_SW_UTIL_LOOPBACK
+#include <bcm/rx.h>   /* for dpp rpc rx register callback */
+extern bcmos_errno sw_util_dpp_rx_cb_register(uint32_t unit, dpp_rx_cb_f cb_f);
+
+bcmos_errno sw_util_dpp_pkt_send(int dst_port_id,
+                                 int reason,
+                                 unsigned char *payload,
+                                 int payload_len,
+                                 trap_target target_device,
+                                 int target_tunnel_id);
+#endif /* TEST_SW_UTIL_LOOPBACK */
+/*@}*/
+ 
+#endif
diff --git a/bal_release/src/core/util/switch/dpp/bal_dpp_flow.c b/bal_release/src/core/util/switch/dpp/bal_dpp_flow.c
new file mode 100755
index 0000000..bf8067c
--- /dev/null
+++ b/bal_release/src/core/util/switch/dpp/bal_dpp_flow.c
@@ -0,0 +1,2618 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file bal_dpp_flow.c
+ * @brief BAL Switch util functions that handle flow requests
+ * @addtogroup sw_util
+ */
+ 
+ /*@{*/
+#include <bal_common.h>
+#include <bcm_dev_log.h>
+#include <bal_msg.h>
+#include <bal_utils_msg.h>
+#include "bal_switch_flow.h"
+#include "flow_fsm.h"
+#include "bcmos_errno.h"
+#include "bal_switch_util.h"
+#include "bal_dpp_qos_map.h"
+
+#ifndef TEST_SW_UTIL_LOOPBACK
+#define _SHR_PBMP_WIDTH 567  
+                             /* match the WIDTH size of bcm_field_group_config_t in bcm/field.h with ARAD */
+                             /* we build swich_util without #define created by the sdk make/Make.local */  
+#include <bcm/types.h>
+#include <sal/core/libc.h>
+#ifndef sal_memset
+#define sal_memset memset
+#endif
+#include <bcm/port.h>
+#include <bcm/vlan.h>
+#include <bcm/field.h>
+#include <bcm/error.h>
+#include <bcm/vswitch.h>
+#include <bcm/qos.h>
+#include <bcm/l2.h>
+
+#include "bal_switch_acc_term.h"
+#include "bal_dpp_flow.h"
+#include "bal_dpp_qos.h"
+#include "bal_dpp_vswitch.h"
+#include "bal_dpp_group.h"
+
+/** Local routines declarations */
+static bcmos_errno bal_sw_util_reverse_flow_create(bcmbal_flow_cfg *p_flow, bcmbal_flow_cfg *p_flow_rev);
+static bcmos_bool bal_sw_util_is_symmetry_flows(bcmbal_flow_cfg *p_flow, bcmbal_flow_cfg *p_ref_flow);
+
+/* perform initialization before any dpp flow function calls */
+void bal_sw_util_dpp_flow_init(void)
+{
+   /* nothing to do here yet, place holder */ 
+   return;
+}
+
+/**
+ * @brief The create trap gport function create a trap port that allow TRAP action to
+ *        associate with and perform packet trapping to the CPU port.
+ * 
+ * @param unit          the switch unit this trap port to be created
+ * @param p_trap_gport  a pointer that the created gport will be return  
+ * @param p_trap_code   a pointer that the created trap code will be return  
+ * @return bcm error code
+ */
+static int bal_sw_util_create_trap_gport(int unit, bcm_gport_t *p_trap_gport, uint32_t *p_trap_code)
+{
+    int ret, trap_id;
+    bcm_rx_trap_config_t trap_config;
+    
+    ret = bcm_rx_trap_type_create(unit, 0, bcmRxTrapUserDefine, &trap_id);
+    if(ret != BCM_E_NONE)
+    {
+        BCM_LOG(ERROR, log_id_sw_util, "create trap type return %d\n", ret);
+        return ret;
+    }
+    
+    bcm_rx_trap_config_t_init(&trap_config);
+    trap_config.flags = (BCM_RX_TRAP_UPDATE_DEST | BCM_RX_TRAP_TRAP | BCM_RX_TRAP_REPLACE);
+    trap_config.trap_strength = 0;
+    trap_config.dest_port = BCM_GPORT_LOCAL_CPU;
+    ret = bcm_rx_trap_set(unit, trap_id, &trap_config);
+    if(ret != BCM_E_NONE)
+    {
+        BCM_LOG(ERROR, log_id_sw_util, "set rx trap return %d\n", ret);
+        return ret;
+    }
+    BCM_GPORT_TRAP_SET(*p_trap_gport, trap_id, 7 /* trap_strength */, 0); 
+    *p_trap_code = trap_id;    
+    return ret;    
+}
+/* disable the field group (FG) source ip support to restrict the FG size */ 
+#define BAL_ACL_FG_SRC_IP_ENABLE 0
+/* create a default field group that used by all default ACL. 
+   When a FLOW is created,a LIF is created to direct the packets to a VSwitch.
+   The LIF can only match packet with ingress port and VID.
+   If a FLOW needs to be classified with more attributes, an ACL is created to override the LIF.
+   A default ACL has the same packet classification as the LIF but has lower priority than the overlapped ACL.
+   The default ACL dropped packets that match the LIF but do not match the ACL. This enforce the FLOW
+   to only forward packets with exact match */
+static bcm_field_group_t dpp_dft_group_id = 1;
+/* create a field group that used by all ACL */
+static bcm_field_group_t dpp_group_id = 0;
+/**
+ * @brief Create a field group in the switch ICAP, 
+ *        The field group allow flow classifier to create ACL rules
+ * 
+ * @param unit    the switch unit this rule is to be added
+ * @param p_group_id  a pointer to a variable that return the created group id  
+ * @return error code
+ */
+ static bcmos_errno bal_sw_util_dpp_fg_create(int unit, bcm_field_group_t *p_group_id)
+ {
+    bcm_field_group_status_t fg_status;    
+    bcm_field_group_config_t grp; 
+    int32_t ret = 0;
+    
+    /* VCAP - bcmFieldQualifyStageLookup, ICAP - bcmFieldQualifyStageIngress, ECAP - bcmFieldQualifyStageEgress */
+    /* The DPP resources allow only limit number of qset - indexed by dpp_group_id, create qset when necessary */
+    /* create one if not exist */
+    if (BCM_E_NOT_FOUND == bcm_field_group_status_get(unit, *p_group_id, &fg_status))
+    {      
+        bcm_field_group_config_t_init(&grp);
+        
+        BCM_FIELD_QSET_INIT(grp.qset);   
+                                                                      /* TCAM entry limit to 80 bits per slice, but up to 4 slices for a group
+                                                                         use ModeAuto to automatically adjust it */
+        BCM_FIELD_QSET_ADD(grp.qset, bcmFieldQualifyInPort);          /* 32 bits */
+        BCM_FIELD_QSET_ADD(grp.qset, bcmFieldQualifyDstMac);          /* 48 bits */
+        BCM_FIELD_QSET_ADD(grp.qset, bcmFieldQualifySrcMac);          /* 48 bits */
+        BCM_FIELD_QSET_ADD(grp.qset, bcmFieldQualifyDstIp);           /* 32 bits */
+#if (BAL_ACL_FG_SRC_IP_ENABLE == 1)       
+        /* save source IP space for other classifier, try to keep total size under 4 slices */ 
+        BCM_FIELD_QSET_ADD(grp.qset, bcmFieldQualifySrcIp);           /* 32 bits */
+#endif        
+        BCM_FIELD_QSET_ADD(grp.qset, bcmFieldQualifyEtherType);       /* 16 bits */
+        BCM_FIELD_QSET_ADD(grp.qset, bcmFieldQualifyIpProtocol);      /*  8 bits */
+        BCM_FIELD_QSET_ADD(grp.qset, bcmFieldQualifyL4DstPort);       /* 16 bits */
+        BCM_FIELD_QSET_ADD(grp.qset, bcmFieldQualifyL4SrcPort);       /* 16 bits */
+        BCM_FIELD_QSET_ADD(grp.qset, bcmFieldQualifyOuterVlanId);     /* 16 bits */
+        BCM_FIELD_QSET_ADD(grp.qset, bcmFieldQualifyOuterVlanPri);    /*  8 bits */
+        BCM_FIELD_QSET_ADD(grp.qset, bcmFieldQualifyInnerVlanId);     /* 16 bits */
+        BCM_FIELD_QSET_ADD(grp.qset, bcmFieldQualifyInnerVlanPri);    /*  8 bits */
+        BCM_FIELD_QSET_ADD(grp.qset, bcmFieldQualifyInVPort);         /* 32 bits */
+        BCM_FIELD_QSET_ADD(grp.qset, bcmFieldQualifyPacketRes);             
+        
+        BCM_FIELD_QSET_ADD(grp.qset, bcmFieldQualifyStageIngress);
+        
+        BCM_FIELD_ASET_INIT(grp.aset);
+        BCM_FIELD_ASET_ADD(grp.aset, bcmFieldActionTrap);
+        BCM_FIELD_ASET_ADD(grp.aset, bcmFieldActionDrop);
+        BCM_FIELD_ASET_ADD(grp.aset, bcmFieldActionRedirect);
+        BCM_FIELD_ASET_ADD(grp.aset, bcmFieldActionVportNew);
+        
+        grp.priority = 12; /* the higher the number the higher the priority */
+        grp.flags = (BCM_FIELD_GROUP_CREATE_WITH_MODE | BCM_FIELD_GROUP_CREATE_WITH_ASET);
+        grp.mode = bcmFieldGroupModeAuto;
+        
+        ret = bcm_field_group_config_create(unit, &grp);
+        
+        if (ret != BCM_E_NONE)
+        {
+             BCM_LOG(ERROR, log_id_sw_util, 
+                              " flow fail to create field - %d\n", ret );
+             return BCM_ERR_INTERNAL;
+        }
+                  
+        *p_group_id = grp.group;
+        BCM_LOG(INFO, log_id_sw_util, "Field Group %d created\n", *p_group_id);
+        return BCM_ERR_OK;
+    }
+    return BCM_ERR_ALREADY; 
+ }
+
+/**
+ * @brief Create a default field group in the switch ICAP, 
+ *        This field group allow flow classifier to create default ACL rules
+ * 
+ * @param unit    the switch unit this rule is to be added
+ * @param p_group_id  a pointer to a variable that return the created group id  
+ * @return error code
+ */
+ static bcmos_errno bal_sw_util_dpp_dft_fg_create(int unit, bcm_field_group_t *p_group_id)
+ {
+    bcm_field_group_status_t fg_status;    
+    bcm_field_group_config_t grp; 
+    int32_t ret = 0;
+    
+    /* VCAP - bcmFieldQualifyStageLookup, ICAP - bcmFieldQualifyStageIngress, ECAP - bcmFieldQualifyStageEgress */
+    /* The DPP resources allow only limit number of qset - indexed by dpp_group_id, create qset when necessary */
+    /* create one if not exist */
+    if (BCM_E_NOT_FOUND == bcm_field_group_status_get(unit, *p_group_id, &fg_status))
+    {      
+        bcm_field_group_config_t_init(&grp);
+        
+        BCM_FIELD_QSET_INIT(grp.qset);   
+                                                                      /* TCAM entry limit to 80 bits per slice, but up to 4 slices for a group
+                                                                         use ModeAuto to automatically adjust it */
+   
+        BCM_FIELD_QSET_ADD(grp.qset, bcmFieldQualifyInVPort);         /* 32 bits */            		 
+        BCM_FIELD_QSET_ADD(grp.qset, bcmFieldQualifyPacketRes); 
+        
+        BCM_FIELD_QSET_ADD(grp.qset, bcmFieldQualifyStageIngress); 
+        
+        BCM_FIELD_ASET_INIT(grp.aset);
+        BCM_FIELD_ASET_ADD(grp.aset, bcmFieldActionDrop);
+       
+        grp.priority = 10; /* the higher the number the higher the priority */
+        grp.flags = (BCM_FIELD_GROUP_CREATE_WITH_MODE | BCM_FIELD_GROUP_CREATE_WITH_ASET);
+        grp.mode = bcmFieldGroupModeAuto;
+        
+        ret = bcm_field_group_config_create(unit, &grp);
+        
+        if (ret != BCM_E_NONE)
+        {
+             BCM_LOG(ERROR, log_id_sw_util, 
+                              " flow fail to create default field - %d\n", ret );
+             return BCM_ERR_INTERNAL;
+        }
+                  
+        *p_group_id = grp.group;
+        BCM_LOG(INFO, log_id_sw_util, "Default Field Group %d created\n", *p_group_id);
+        return BCM_ERR_OK;
+    }
+    return BCM_ERR_ALREADY; 
+ } 
+ 
+/**
+ * @brief The acl add function add an Access Control Rule in the switch  VCAP/ICAP/ECAP
+ *        to perform action based on flow classifier
+ * 
+ * @param unit    the switch unit this rule is to be added
+ * @param p_flow  a pointer to the flow definition the created rule will be based on 
+ * @param p_flow_elm  a pointer to the switch internal flow list  
+ * @param in_gport  ingress virtual port (LIF) this acl applied 
+ * @param out_gport egress virtual port (LIF) this acl applied 
+ * @return error code
+ */
+static bcmos_errno bal_sw_util_dpp_acl_add(int unit, bcmbal_flow_cfg *p_flow, bal_sw_flow *p_flow_elm, uint32_t in_gport, uint32_t out_gport)
+{
+     int32_t ret = 0;
+     uint16_t udp_port, flow_pri;
+     bcm_field_entry_t eid;
+     bcm_gport_t trap_gport;            
+     bcm_mac_t dst_mac, src_mac;
+     bcm_mac_t mac_mask =  {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};    
+     uint32_t trap_code = 0;
+     bcmos_errno err;
+      
+    BCM_LOG(INFO, log_id_sw_util,
+                  " Add an ACL to a flow w type = %d\n", p_flow->key.flow_type);                  
+ 
+    if(p_flow_elm->num_eid >= MAX_FIELD_EID)
+    {
+        BCM_LOG(ERROR, log_id_sw_util, "Too many ACL rules in flow id %d\n", p_flow_elm->id);
+        return BCM_ERR_NORES;
+    } 
+	
+    err = bal_sw_util_dpp_fg_create(unit, &dpp_group_id);
+ 
+    if (BCM_ERR_ALREADY != err && BCM_ERR_OK != err)
+    {
+        BCM_LOG(ERROR, log_id_sw_util, "Field Group %d create failed\n", dpp_group_id);
+        return err;
+    }
+
+    /* fill in the match fields */
+    do
+    { 
+        ret = bcm_field_entry_create(unit, dpp_group_id, &eid);
+        if (ret)
+        {
+            BCM_LOG(ERROR, log_id_sw_util, "field_entry_create failed - %d\n", ret);
+            break;
+        }
+        /* if upstream, match ingress port */
+        if(p_flow->key.flow_type == BCMBAL_FLOW_TYPE_UPSTREAM &&  BCMBAL_CFG_PROP_IS_SET(p_flow, flow, access_int_id))
+        {            
+            ret = bcm_field_qualify_InPort(unit, eid, bal_bcm_pon_inf_pbm_get(p_flow->data.access_int_id), 0xffffffff);
+            if (BCM_E_NONE != ret)
+            {
+                BCM_LOG(ERROR, log_id_sw_util, "field_qualify_InPort failed - %d\n", ret);
+                break;
+            }
+            else
+            {
+                BCM_LOG(INFO, log_id_sw_util, "Add InPort %d to qualifier\n", bal_bcm_pon_inf_pbm_get(p_flow->data.access_int_id));
+            }
+ 
+        }
+        /* if downstream, match ingress nni port */
+        if(p_flow->key.flow_type == BCMBAL_FLOW_TYPE_DOWNSTREAM && BCMOS_TRUE == BCMBAL_CFG_PROP_IS_SET(p_flow, flow, network_int_id))
+        {            
+            ret = bcm_field_qualify_InPort(unit, eid, bal_bcm_net_inf_pbm_get(p_flow->data.network_int_id), 0xffffffff);
+            if (BCM_E_NONE != ret)
+            {
+                BCM_LOG(ERROR, log_id_sw_util, "field_qualify_InPort failed - %d\n", ret);
+                break;
+            }
+            else
+            {
+                BCM_LOG(INFO, log_id_sw_util, "Add network port %d to qualifier\n", bal_bcm_net_inf_pbm_get(p_flow->data.network_int_id));
+            }                
+        }
+        /* match ether type */
+        if(BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, ether_type))
+        {
+            ret = bcm_field_qualify_EtherType(unit, eid, p_flow->data.classifier.ether_type, 0xffff);
+            if (ret)
+            {
+                BCM_LOG(ERROR, log_id_sw_util, "field_qualify_EtherType failed - %d\n", ret);
+                break;
+            }
+            else
+            {
+                BCM_LOG(INFO, log_id_sw_util, "Add ether type 0x%x to qualifier\n", p_flow->data.classifier.ether_type );
+            }
+        }
+        /* add IP protocol to match rule */
+        if(BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, ip_proto))
+        {
+            ret = bcm_field_qualify_IpProtocol(unit, eid, p_flow->data.classifier.ip_proto, 0xff);
+            if (ret)
+            {
+                BCM_LOG(ERROR, log_id_sw_util, "field_qualify_IpProtocol failed - %d\n", ret);
+                break;
+            }
+            else
+            {
+                BCM_LOG(INFO, log_id_sw_util, "Add ip protocol 0x%x to qualifier\n", p_flow->data.classifier.ip_proto );
+            }
+        }
+        /* add L3 source port to match rule - Don't be confused by the API name */
+        if(BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, src_port))
+        {
+            udp_port = p_flow->data.classifier.src_port;
+            ret = bcm_field_qualify_L4SrcPort(unit, eid, udp_port, 0xffff);
+            if (ret)
+            {
+                BCM_LOG(ERROR, log_id_sw_util, "field_qualify_L4SrcPort failed - %d\n", ret);
+                break;
+            }
+            else
+            {
+                BCM_LOG(INFO, log_id_sw_util, "Add src port %d to qualifier\n", udp_port );
+            }
+        }
+        /* add L3 destination port to match rule */
+        if(BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, dst_port))
+        {
+            udp_port = p_flow->data.classifier.dst_port;
+            ret = bcm_field_qualify_L4DstPort(unit, eid, udp_port, 0xffff);
+            if (ret)
+            {
+                BCM_LOG(ERROR, log_id_sw_util, "field_qualify_L4DstPort failed - %d\n", ret);
+                break;
+            }
+            else
+            {
+                BCM_LOG(INFO, log_id_sw_util, "Add dst port %d to qualifier\n", udp_port );
+            }
+        }
+        /* add Outer vid to match rule */
+        if(BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, o_vid))
+        {
+            ret = bcm_field_qualify_OuterVlanId(unit, eid, p_flow->data.classifier.o_vid, 0x0fff);
+            if (ret)
+            {
+                BCM_LOG(ERROR, log_id_sw_util, "field_qualify_OuterVlanId failed - %d\n", ret);
+                break;
+            }
+            else
+            {
+                BCM_LOG(INFO, log_id_sw_util, "Add outer vid 0x%x to qualifier\n", p_flow->data.classifier.o_vid );
+            }
+        }
+        /* add Inner vid to match rule */
+        if(BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, i_vid))
+        {
+            ret = bcm_field_qualify_InnerVlanId(unit, eid, p_flow->data.classifier.i_vid, 0x0fff);
+            if (ret)
+            {
+                BCM_LOG(ERROR, log_id_sw_util, "field_qualify_InnerVlanId failed - %d\n", ret);
+                break;
+            }
+            else
+            {
+                BCM_LOG(INFO, log_id_sw_util, "Add Inner vid 0x%x to qualifier\n", p_flow->data.classifier.i_vid );
+            }
+        }
+        /* add Outer priority to match rule  - only accept 3 bits */
+        /* use ACL for downstream, upstream pbit classification will be done through PON LIF */
+        if(p_flow->key.flow_type == BCMBAL_FLOW_TYPE_DOWNSTREAM &&
+           BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, o_pbits))
+        {
+            ret = bcm_field_qualify_OuterVlanPri(unit, eid, p_flow->data.classifier.o_pbits, 0x7);
+            if (ret)
+            {
+                BCM_LOG(ERROR, log_id_sw_util, "field_qualify_OuterVlanPri failed - %d\n", ret);
+                break;
+            }
+            else
+            {
+                BCM_LOG(INFO, log_id_sw_util, "Add outer pri 0x%x to qualifier\n", p_flow->data.classifier.o_pbits );
+            }
+        }
+        /* add Inner priority to match rule  - only accept 3 bits */
+        if(BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, i_pbits))
+        {
+            ret = bcm_field_qualify_InnerVlanPri(unit, eid, p_flow->data.classifier.i_pbits, 0x7);
+            if (ret)
+            {
+                BCM_LOG(ERROR, log_id_sw_util, "field_qualify_InnerVlanPri failed - %d\n", ret);
+                break;
+            }
+            else
+            {
+                BCM_LOG(INFO, log_id_sw_util, "Add inner pri 0x%x to qualifier\n", p_flow->data.classifier.i_pbits );
+            }
+        }
+        /* add Dst Mac to match rule */
+        if(BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, dst_mac))
+        {
+            memcpy(&dst_mac, &(p_flow->data.classifier.dst_mac), sizeof(bcm_mac_t));
+            ret = bcm_field_qualify_DstMac(unit, eid, dst_mac, mac_mask);
+            if (ret)
+            {
+                BCM_LOG(ERROR, log_id_sw_util, "field_qualify_DstMac failed - %d\n", ret);
+                break;
+            }
+            else
+            {
+                BCM_LOG(INFO, log_id_sw_util, "Add DstMac %x:%x:%x:%x:%x:%x to qualifier\n",
+                                p_flow->data.classifier.dst_mac.u8[0],
+                                p_flow->data.classifier.dst_mac.u8[1],
+                                p_flow->data.classifier.dst_mac.u8[2],
+                                p_flow->data.classifier.dst_mac.u8[3],
+                                p_flow->data.classifier.dst_mac.u8[4],                              
+                                p_flow->data.classifier.dst_mac.u8[5] );
+            }
+        }
+        /* add Src Mac to match rule */
+        if(BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, src_mac))
+        {
+            memcpy(&src_mac, &(p_flow->data.classifier.src_mac), sizeof(bcm_mac_t));
+            ret = bcm_field_qualify_SrcMac(unit, eid, src_mac, mac_mask);
+            if (ret)
+            {
+                BCM_LOG(ERROR, log_id_sw_util, "field_qualify_SrcMac failed - %d\n", ret);
+                break;
+            }
+            else
+            {
+                BCM_LOG(INFO, log_id_sw_util, "Add SrcMac[5] 0x%x to qualifier\n", p_flow->data.classifier.src_mac.u8[5] );
+            }
+        }
+        /* add Dst IP to match rule */
+        if(BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, dst_ip))
+        {           
+            ret = bcm_field_qualify_DstIp(unit, eid, p_flow->data.classifier.dst_ip.u32, 0xffffffff);
+            if (ret)
+            {
+                BCM_LOG(ERROR, log_id_sw_util, "field_qualify_DstIp failed - %d\n", ret);
+                break;
+            }
+            else
+            {
+                BCM_LOG(INFO, log_id_sw_util, "Add DstIp 0x%x to qualifier\n", p_flow->data.classifier.dst_ip.u32 );
+            }
+        }
+      
+        /* add Src IP to match rule */        
+        if(BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, src_ip))
+        {           
+            ret = bcm_field_qualify_SrcIp(unit, eid, p_flow->data.classifier.src_ip.u32, 0xffffffff);
+            if (ret)
+            {
+                BCM_LOG(ERROR, log_id_sw_util, "field_qualify_SrcIp failed - %d\n", ret);
+                break;
+            }
+            else
+            {
+                BCM_LOG(INFO, log_id_sw_util, "Add SrcIp 0x%x to qualifier\n", p_flow->data.classifier.src_ip.u32 );
+            }
+        }        
+        /* set ACL priority */
+        if(BCMBAL_CFG_PROP_IS_SET(p_flow, flow, priority))
+        {
+            flow_pri = p_flow->data.priority;
+        }
+        else /* default to 10, valid range 0 - 65535 */
+        {
+            flow_pri = BAL_FLOW_DEFAULT_PRIORITY;
+            /* set the presence of priority bit in the flow to reflect insertion of DEFAULT_PRIORITY */
+            BCMBAL_CFG_PROP_SET(p_flow, flow, priority, flow_pri);                    
+        }
+        ret = bcm_field_entry_prio_set(unit, eid, flow_pri);
+        if (ret)
+        {
+            BCM_LOG(ERROR, log_id_sw_util, "field entry priority failed - %d\n", ret);
+            break;
+        }
+        else
+        {
+            BCM_LOG(INFO, log_id_sw_util, "field entry priority set to - %d\n", flow_pri);
+        }
+     
+    }while(0);
+        
+    if (BCM_E_NONE == ret) /* make sure the field qualifier settings are good */
+    {
+        if( BCMBAL_CFG_PROP_IS_SET(p_flow, flow, action)  &&
+            BCMBAL_ACTION_CMD_ID_IS_SET( &(p_flow->data.action), BCMBAL_ACTION_CMD_ID_TRAP_TO_HOST)    )                
+        {
+            BCM_LOG(INFO, log_id_sw_util,
+                  " Got a flow action cmd=0x%x \n", p_flow->data.action.cmds_bitmask);    
+            do
+            {      
+                ret = bal_sw_util_create_trap_gport(unit, &trap_gport, &trap_code);
+                if (ret)
+                {
+                    BCM_LOG(ERROR, log_id_sw_util, "create_trap_gport failed - %d\n", ret);
+                    break;
+                }
+                /* qualify with in LIF */
+                if(in_gport)
+                {
+                    /* add vPort to match rule */
+                    ret = bcm_field_qualify_InVPort32(unit, eid, in_gport, 0xffff);               
+                    if (ret)
+                    {
+                        BCM_LOG(ERROR, log_id_sw_util, "field_qualify_InVPort failed - %d\n", ret);
+                        break;
+                    } 
+                }
+                ret = bcm_field_action_add(unit, eid, bcmFieldActionTrap, trap_gport, 0);
+                if (ret)
+                {
+                    BCM_LOG(ERROR, log_id_sw_util, "field action add failed - %d\n", ret);
+                    break;
+                };
+                ret = bcm_field_entry_install(unit, eid);
+                if (ret)
+                {
+                    BCM_LOG(ERROR, log_id_sw_util, "field_entry_install %d failed - %d\n", eid, ret);
+                    break;
+                } 
+                else
+                {
+                    BCM_LOG(INFO, log_id_sw_util, "Add rule %d Success\n", eid);
+                }
+                
+            }while(0);
+        }
+        /* regular forwarding ACL */
+        else 
+        {     
+            do
+            {
+                /* redirect to the egress LIF */
+                ret = bcm_field_action_add(unit, eid, bcmFieldActionRedirect,  0,  out_gport);
+                if (ret)
+                {
+                    BCM_LOG(ERROR, log_id_sw_util, "field action add failed - %d\n", ret);
+                    break;
+                };
+                /* trigger vlan translation at the egress LIF */
+                ret = bcm_field_action_add(unit, eid, bcmFieldActionVportNew,  out_gport, 0);
+                if (ret)
+                {
+                    BCM_LOG(ERROR, log_id_sw_util, "field action add new vport failed - %d\n", ret);
+                    break;
+                };
+
+                ret = bcm_field_entry_install(unit, eid);
+                if (ret)
+                {
+                    BCM_LOG(ERROR, log_id_sw_util, "field_entry_install %d failed - %d\n", eid, ret);
+                    break;
+                } 
+                else
+                {
+                    BCM_LOG(INFO, log_id_sw_util, "Add rule %d to gport 0x%x Success\n", eid, out_gport);
+                }              
+            }while(0);
+        }
+    }  
+    
+    if (ret != BCM_E_NONE)
+    {
+         /* TBD - release the eid and trap port resource */
+         return BCM_ERR_INTERNAL;
+    }
+    else
+    {
+        /* add flow info into the internal link list */
+        p_flow_elm->trap_code = trap_code;
+        p_flow_elm->trap_port = trap_gport;
+        p_flow_elm->field_entry_id[p_flow_elm->num_eid] = eid; 
+        p_flow_elm->num_eid += 1;        
+        p_flow_elm->valid = 1;
+        return BCM_ERR_OK;
+    }
+}
+
+/**
+ * @brief The default acl add function add a DROP Access Control Rule on the ingress LIF
+ * 
+ * @param unit    the switch unit this rule is to be added
+ * @param p_flow  a pointer to the flow definition the created rule will be based on 
+ * @param p_flow_elm  a pointer to the switch internal flow list  
+ * @param in_gport  ingress virtual port (LIF) this acl applied  
+ * @return error code
+ */
+static bcmos_errno bal_sw_util_dpp_dft_acl_add(int unit, bcmbal_flow_cfg *p_flow, bal_sw_flow *p_flow_elm, uint32_t in_gport)
+{
+    bcmos_errno err;
+    bcm_field_entry_t dft_eid = 0;
+    int32_t ret = 0;
+  
+    if(p_flow_elm->num_eid >= MAX_FIELD_EID)
+    {
+        BCM_LOG(ERROR, log_id_sw_util, "Too many dft ACL rules in flow id %d\n", p_flow_elm->id);
+        return BCM_ERR_NORES;
+    }
+	
+    err = bal_sw_util_dpp_dft_fg_create(unit, &dpp_group_id);
+ 
+    if (BCM_ERR_ALREADY != err && BCM_ERR_OK != err)
+    {
+        BCM_LOG(ERROR, log_id_sw_util, "Field Default Group %d create failed\n", dpp_dft_group_id);
+        return err;
+    }
+    do
+    {
+         /* Install a default drop ACL at lowest priority(0). 
+           This will drop unmatch packets received on the same ingress LIF 
+         */   
+        
+        ret = bcm_field_entry_create(unit, dpp_group_id, &dft_eid);
+        if (ret)
+        {
+            BCM_LOG(ERROR, log_id_sw_util, "field_entry_create failed - %d\n", ret);
+            break;
+        }
+   
+        /* add vPort to match rule */
+        ret = bcm_field_qualify_InVPort32(unit, dft_eid, in_gport, 0xffff);               
+        if (ret)
+        {
+            BCM_LOG(ERROR, log_id_sw_util, "field_qualify_InVPort failed - %d\n", ret);
+            break;
+        } 
+
+		/* add Packet type to match rule, drop only unicast */
+        ret = bcm_field_qualify_PacketRes(unit, dft_eid, BCM_FIELD_PKT_RES_L2UC, 0);                        
+        if (ret)
+        {
+            BCM_LOG(ERROR, log_id_sw_util, "field_qualify_PacketRes failed - %d\n", ret);
+            break;
+        } 
+		
+        
+        /* set to lowest priority 0 */ 
+        ret = bcm_field_entry_prio_set(unit, dft_eid, 0);                
+        if (ret)
+        {
+            BCM_LOG(ERROR, log_id_sw_util, "field entry priority failed - %d\n", ret);
+            break;
+        };
+
+        /* Drop the packet */
+        ret = bcm_field_action_add(unit, dft_eid, bcmFieldActionDrop,  0,  0);
+        if (ret)
+        {
+            BCM_LOG(ERROR, log_id_sw_util, "field action add failed - %d\n", ret);
+            break;
+        };
+        ret = bcm_field_entry_install(unit, dft_eid);
+        if (ret)
+        {
+            BCM_LOG(ERROR, log_id_sw_util, "field_entry_install %d failed - %d\n", dft_eid, ret);
+            break;
+        } 
+        else
+        {
+            BCM_LOG(INFO, log_id_sw_util, "Add default rule %d Success\n", dft_eid);
+        }  
+    }while(0);  
+    if (ret != BCM_E_NONE)
+    {
+        return BCM_ERR_INTERNAL;
+    }
+    else
+    {
+        p_flow_elm->field_entry_id[p_flow_elm->num_eid] = dft_eid; 
+        p_flow_elm->num_eid += 1; 
+        return BCM_ERR_OK;
+    }    
+}
+
+/**
+ * @brief The ingress vlan translation function modified the packet VLAN tag 
+ *        before sending it out 
+ * 
+ * @param unit    the switch unit this rule is to be added
+ * @param p_flow  a pointer to the flow definition the created rule will be based on 
+ * @param ingport  the gport the translation will be applied 
+ * @return error code
+ */
+static bcmos_errno bal_sw_util_dpp_invlanx(int unit, bcmbal_flow_cfg *p_flow, uint32_t ingport)
+{
+    int rv = 0;
+    bcm_vlan_action_set_t action;
+    bcm_vlan_action_set_t_init(&action);
+    bcmos_errno ret;
+    
+    if(BCMBAL_ACTION_CMD_ID_IS_SET( &(p_flow->data.action), BCMBAL_ACTION_CMD_ID_REMARK_PBITS))       
+    {  
+        int qos_map_id, i_pri, o_pri;
+       
+        do
+        {
+            switch(p_flow->data.classifier.pkt_tag_type)
+            {
+                case BCMBAL_PKT_TAG_TYPE_DOUBLE_TAG: 
+                    /* should be                                           
+                       action.dt_outer_pkt_prio = bcmVlanActionReplace;
+                       action.new_outer_vlan = p_flow->data.classifier.o_vid;;
+                       action.dt_outer = bcmVlanActionReplace;
+                       but it does not seems to work. Using ot_outer seems to also work for double tagged packets 
+                    */   
+                    action.ot_outer_pkt_prio = bcmVlanActionReplace; 
+                    action.new_outer_vlan = p_flow->data.classifier.o_vid;
+                    action.ot_outer = bcmVlanActionReplace;                      
+                break;
+                case BCMBAL_PKT_TAG_TYPE_SINGLE_TAG:
+                    action.ot_outer_pkt_prio = bcmVlanActionReplace; 
+                    action.new_outer_vlan = p_flow->data.classifier.o_vid;
+                    action.ot_outer = bcmVlanActionReplace;  
+                                                      
+                break;
+                default:
+                    BCM_LOG(ERROR, log_id_sw_util,
+                            "Error, pbits translation on untagged packets\n"); 
+                    return BCM_ERR_NOT_SUPPORTED;                        
+                break;
+            }   
+             
+                 
+            /* perform o_pbits translation */
+            if(BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, o_pbits))
+            {
+                i_pri = p_flow->data.classifier.o_pbits;
+            }
+            else
+            {
+                /* mark the source pcp DONTCARE */
+                i_pri = -1;
+            }
+            /* flow validation already make sure the action.o_pbits is set for REMARK_PBITS */
+            o_pri = p_flow->data.action.o_pbits;        
+            
+            ret = bal_sw_dpp_pcp_remark_map_get(i_pri, o_pri, &qos_map_id);
+       
+            if (ret != BCM_ERR_OK)
+            {
+                BCM_LOG(ERROR, log_id_sw_util,
+                        "Error, faile to obtain pcp map id, ret = %d\n", ret);
+                rv = BCM_E_UNAVAIL;        
+                break;                        
+            }
+            
+            rv = bcm_qos_port_map_set(unit, ingport, qos_map_id, -1);     
+            if (rv != BCM_E_NONE)
+            {
+                BCM_LOG(ERROR, log_id_sw_util,
+                        "Error, pbits translation bcm_qos_port_map_set ret = %d\n", rv);
+                break;                        
+            }
+                        
+            /* set the action priority profile */
+            action.priority = qos_map_id;
+            action.new_inner_pkt_prio = qos_map_id;            
+        }while(0);
+    }
+    else
+    {
+        /* nothing to do, return OK */
+        return BCM_ERR_OK;
+    }
+    if(rv != BCM_E_NONE)
+    {
+        return BCM_ERR_INTERNAL;
+    }
+    
+    rv = bcm_vlan_translate_action_create(unit, ingport, bcmVlanTranslateKeyPortOuter, BCM_VLAN_INVALID, BCM_VLAN_NONE, &action);
+    if( rv )
+    {
+        return BCM_ERR_INTERNAL;
+    }
+    else
+    {
+        BCM_LOG(INFO, log_id_sw_util, "Perform ingress vlan translation w %s action on gport 0x%x\n",
+                (p_flow->data.classifier.pkt_tag_type == BCMBAL_PKT_TAG_TYPE_DOUBLE_TAG)? "DT": "ST",
+                ingport);
+        return BCM_ERR_OK;
+    }
+}
+/**
+ * @brief The egress vlan translation function modified the packet VLAN tag 
+ *        before sending it out 
+ * 
+ * @param unit    the switch unit this rule is to be added
+ * @param p_flow  a pointer to the flow definition the created rule will be based on 
+ * @param egport  the gport the translation will be applied 
+ * @return error code
+ */
+static bcmos_errno bal_sw_util_dpp_evlanx(int unit, bcmbal_flow_cfg *p_flow, uint32_t egport)
+{
+    int rv = 0;
+    bcm_vlan_action_set_t action;
+    bcm_vlan_action_set_t_init(&action);
+
+    if(BCMBAL_ACTION_CMD_ID_IS_SET( &(p_flow->data.action), BCMBAL_ACTION_CMD_ID_ADD_OUTER_TAG))   
+    {
+        action.new_outer_vlan = p_flow->data.action.o_vid;
+        action.priority = 0;
+        switch(p_flow->data.classifier.pkt_tag_type)
+        {
+            case BCMBAL_PKT_TAG_TYPE_UNTAGGED:
+                action.ut_outer = bcmVlanActionAdd;
+                action.ut_outer_pkt_prio = bcmVlanActionAdd;
+            break;
+            case BCMBAL_PKT_TAG_TYPE_SINGLE_TAG:
+                action.ot_outer = bcmVlanActionAdd;
+                action.ot_outer_pkt_prio = bcmVlanActionAdd;
+            break;
+            default:
+                action.new_outer_vlan = 0;
+                action.ot_outer = bcmVlanActionNone;
+            break;
+        }        
+        
+        if( p_flow->data.action.o_tpid )
+        {
+            action.outer_tpid_action = bcmVlanTpidActionModify;
+            action.outer_tpid = p_flow->data.action.o_tpid;
+        }
+		
+    }
+    else if(BCMBAL_ACTION_CMD_ID_IS_SET( &(p_flow->data.action), BCMBAL_ACTION_CMD_ID_REMOVE_OUTER_TAG))
+    {   
+        switch(p_flow->data.classifier.pkt_tag_type)
+        {
+            case BCMBAL_PKT_TAG_TYPE_DOUBLE_TAG:
+                /* should be action.dt_outer = bcmVlanActionDelete, 
+                   but it does not seems to work. Using ot_outer seems to also work for double tagged packets */ 
+                action.ot_outer = bcmVlanActionDelete;                        
+            break;
+            case BCMBAL_PKT_TAG_TYPE_SINGLE_TAG:
+                action.ot_outer = bcmVlanActionDelete;               
+            break;
+            default:
+                action.ut_outer = bcmVlanActionNone;
+            break;
+        }               
+    }
+    else if (BCMBAL_ACTION_CMD_ID_IS_SET( &(p_flow->data.action), BCMBAL_ACTION_CMD_ID_XLATE_OUTER_TAG))
+    {
+        action.new_outer_vlan = p_flow->data.action.o_vid;
+        switch(p_flow->data.classifier.pkt_tag_type)
+        {
+            case BCMBAL_PKT_TAG_TYPE_DOUBLE_TAG:
+                /* should be action.dt_outer = bcmVlanActionReplace, 
+                   but it does not seems to work. Using ot_outer seems to also work for double tagged packets */ 
+                action.ot_outer = bcmVlanActionReplace;                  
+            break;
+            case BCMBAL_PKT_TAG_TYPE_SINGLE_TAG:
+                action.ot_outer = bcmVlanActionReplace;               
+            break;
+            default:
+                action.ut_outer = bcmVlanActionNone;
+            break;
+        }       
+
+        /** @todo tpid is not translated for now */
+        /** @note the vid translated from is passed as a parameter to the api call */
+       
+    }
+    else
+    {
+        /* nothing to do, return OK */
+        return BCM_ERR_OK;
+    }
+
+    rv = bcm_vlan_translate_egress_action_add(unit, egport, BCM_VLAN_NONE, BCM_VLAN_NONE, &action);
+    if( rv )
+    {
+        BCM_LOG(ERROR, log_id_sw_util, "bcm_vlan_translate_egress_action_add failed %d on gport 0x%x\n", rv, egport);
+        return BCM_ERR_INTERNAL;
+    }
+    else
+    {
+        BCM_LOG(INFO, log_id_sw_util, "Perform egress vlan translation on gport 0x%x\n", egport);
+        return BCM_ERR_OK;
+    }
+}
+/**
+ * @brief Multicast flow add function forward the specified multicast packets to a multicast group.
+ *        The multicast group has to be created prio to the mc_flow add operation
+ * 
+ * @param p_flow  a pointer to the flow definition the created rule will be based on 
+ * @param service_type id this multicast flow is for multicast or downstream N:1 service
+ * @return error code
+ */
+static bcmos_errno bal_sw_util_dpp_mc_flow_add(bcmbal_flow_cfg *p_flow, uint32_t service_type)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    bcm_gport_t nni_gport;
+    int ii, unit, rv;      
+    int nni; 
+    bcm_vlan_t vsi;
+    bal_sw_flow *p_flow_elm;   
+    bal_sw_flow flow_elm;  
+    bal_sw_vsi_service *p_vsi_svc;
+    bal_sw_group_list *p_group_list;
+    uint32_t svc_tag_indx;
+    
+    /* get a pointer to the specified group instance */
+    p_group_list = bal_sw_util_dpp_group_list_get_by_id(p_flow->data.group_id);
+ 
+    if ( p_group_list == NULL)
+    {
+        BCM_LOG(ERROR, log_id_sw_util,
+                " ERROR: group %d not found\n", p_flow->data.group_id);
+        return BCM_ERR_INTERNAL;   
+    }
+    
+    unit = p_group_list->device; 
+
+    /* make sure this flow id does not already exist */
+    p_flow_elm = bal_sw_util_flow_list_get_by_id(p_flow->key.flow_id);
+    if (p_flow_elm)
+    {
+        BCM_LOG(ERROR, log_id_sw_util,
+                " ERROR: flow id %d type %d already exist\n",p_flow->key.flow_id, p_flow->key.flow_type); 
+        return BCM_ERR_INTERNAL;
+    }
+        
+    do 
+    {        
+        /* initialize link list flow element */         
+        memset(&flow_elm, 0, sizeof (bal_sw_flow));
+        /* fill in the basic info */
+        flow_elm.id = p_flow->key.flow_id;
+        flow_elm.device = unit;
+        flow_elm.group_id = p_flow->data.group_id;
+        flow_elm.flow_cookie = p_flow->data.cookie;        
+  
+        /* packet tag type are required fields when create NNI LIF */
+        /* Here make sure it is the supported type */        
+        if(p_flow->data.classifier.pkt_tag_type != BCMBAL_PKT_TAG_TYPE_UNTAGGED &&
+           p_flow->data.classifier.pkt_tag_type != BCMBAL_PKT_TAG_TYPE_SINGLE_TAG &&
+           p_flow->data.classifier.pkt_tag_type != BCMBAL_PKT_TAG_TYPE_DOUBLE_TAG)
+        {
+            BCM_LOG(ERROR, log_id_sw_util,
+                    " ERROR: MC classifier packet tag type 0x%x is invalid\n", p_flow->data.classifier.pkt_tag_type);
+            ret = BCM_ERR_PARM;
+            break;
+        }        
+ 
+        /* retrieve the vswitch instance */
+        p_vsi_svc = p_group_list->p_vsi;
+        if(p_vsi_svc == NULL)
+        {   
+            BCM_LOG(ERROR, log_id_sw_util, "Error, MC: vsi not created\n");         
+            ret = BCM_ERR_INTERNAL;
+            break;      
+        }
+        vsi = p_vsi_svc->vswitch;
+        
+        /* add flow to the vsi service tag list */
+        ret = bal_sw_util_dpp_vsi_service_tag_add(unit, p_vsi_svc, p_flow, &svc_tag_indx);
+        if (ret != BCM_ERR_OK)
+        {
+            BCM_LOG(ERROR, log_id_sw_util, "Error, fail to add flow to vsi service tag list\n");
+            break;                    
+        }
+        
+        ii = 0;  /* Start with the first NNI logical interface */
+        /* loop through all nni port, add them to vswitch, -1 indicate end of table */
+        /* Configure the switch nni LIF based on classifier in the flow. */           
+        while(-1 != (nni = bal_bcm_net_inf_pbm_get(ii)))
+        {
+            /* skip nni port that is not in the same device or not valid */
+            if ( bal_bcm_net_inf_dev_get(ii) != unit   ||
+                 BCMOS_FALSE == bcm_topo_nni_is_valid(ii))
+            {
+                ii++;
+                continue; 
+            }
+          
+            /* if nni port is specified in the flow, skip the other nni ports */
+            if ( BCMBAL_CFG_PROP_IS_SET(p_flow, flow, network_int_id) &&
+                 ii != p_flow->data.network_int_id
+               )
+            {
+                ii++;
+                continue;
+            }
+                
+            /* create gport based on nni physical port number */
+            ret = bal_sw_util_dpp_vsi_service_port_add(unit, p_vsi_svc, svc_tag_indx, nni, &nni_gport);
+            if (ret != BCM_ERR_OK)
+            {
+                BCM_LOG(ERROR, log_id_sw_util, "Error, fail to add nni %d to vsi\n", nni);
+                break;                    
+            }
+            
+            /* if DMAC is set, create a L2 entry, otherwise flood unknown to the group */
+            if(BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, dst_mac))
+            {
+                /* add static MC 01:00:5E:00:00:start_mc to the dowstream MC group */
+                bcm_l2_addr_t l2addr;
+                bcm_mac_t mc_mac;
+
+                /* Add mc mac address */
+                memcpy(&mc_mac, &(p_flow->data.classifier.dst_mac), sizeof(bcm_mac_t));
+               
+                bcm_l2_addr_t_init(&l2addr, mc_mac, vsi); 
+                l2addr.flags = BCM_L2_STATIC | BCM_L2_MCAST;
+                /* direct output to the MC group */
+                l2addr.l2mc_group = p_group_list->l2_grp_id; 
+
+                rv = bcm_l2_addr_add(unit, &l2addr);
+                if (rv != BCM_E_NONE)
+                {
+                    BCM_LOG(ERROR, log_id_sw_util,"Error: bcm_l2_addr_add MC returned %s \n",
+                           bcm_errmsg(rv));
+                    ret = BCM_ERR_INTERNAL;
+                    break;
+                }  
+            }
+            else
+            {
+                rv = bcm_port_control_set(unit, nni_gport, bcmPortControlFloodUnknownMcastGroup, BAL_DPP_MC_OFFSET);
+                if (rv != BCM_E_NONE)
+                {
+                    BCM_LOG(ERROR, log_id_sw_util, "Error, MC: bcm_port_control_set for nni failed %d\n", rv);         
+                    ret = BCM_ERR_INTERNAL;
+                    break;
+                }
+            }
+            
+            flow_elm.num_net++;
+            flow_elm.net_port[ii] = nni_gport;
+           
+            ii++; /* Next NNI */            
+        } 
+        /* skip the rest if anything goes wrong */        
+        if( ret != BCM_ERR_OK)
+        {
+            break;
+        }
+               /* perform vlan translation on nni port */ 
+        if (BCMOS_TRUE == BCMBAL_CFG_PROP_IS_SET(p_flow, flow, action)) 
+        { 
+            BCM_LOG(WARNING, log_id_sw_util, "Warning, action for multicast flow not supported\n");
+        }
+        
+    } while(0);
+
+    if( ret == BCM_ERR_OK)
+    {
+        /* increase the group reference count */
+        p_group_list->use_count++;
+        /* increase the vsi reference count */
+        p_vsi_svc->use_count++;
+        /* add the flow info to the flow link list */         
+        flow_elm.p_vsi_svc = p_vsi_svc;
+        flow_elm.num_pon = 0;
+        flow_elm.type = service_type;
+        /* nni ports are done in the nni loop */
+        flow_elm.valid = 1;
+        bal_sw_util_flow_list_insert(flow_elm);   
+       
+        BCM_LOG(INFO, log_id_sw_util, "Add flow_elm %d  type %d, vswitch 0x%x, group_id %d Success\n", flow_elm.id, flow_elm.type, p_vsi_svc->vswitch, flow_elm.group_id);        
+    }        
+    return ret;
+}
+
+/* HW limitation on max burst rate - bps */
+#define BAL_MAX_BURST_RATE (1 << 16)
+
+/**
+ * @brief The flow add function program DPP to forward packets that have
+ * specified attributes to the designated ports.
+ * The packets is modified before egress
+ * In case IWF is in DIRECT MODE, 
+ * On the downstream, a tunnel id (outer vlan tag) is added to the packets
+ * On the upstream, outer vlan tag (tunnel id) is removed from the packets
+ * In case IWF is in PER_FLOW_MODE, currently not supported
+ *
+ * @note a flow can be created which does VID translation between V & U (refer to TR156) interfaces.
+ *
+ * @note This routine adds flow for both upstream and downstream direction i.e. create PON & NNI LIFs
+ * for both directions in a same call to this routine - and all this as part of a single call to this function 
+ * from the application module or CLI. 
+ * It also programs the egress vlan translation modules for both upstream and downstream. 
+ *
+ * @note  The general sequence is:
+ *  \li create PON LIF with matching ingress tunnel id (and vlan id, if upstream pkts are vlan tagged)
+ *  \li next, configure egress vlan translation on PON side (for downstream pkts)
+ *  \li create NNI LIF with matching ingress vlan id (currently by default it assumes downstream packets are tagged)
+ *  \li next, configure egress vlan translation on NNI side (for upstream pkts)
+ *
+ * @param iwf_mode The InterWorking Function mode - DIRECT or PER-FLOW
+ * @param p_flow A pointer to the requested add flow info
+ * @return error code
+ */
+bcmos_errno bal_sw_util_dpp_flow_add(bcmbal_iwf_mode iwf_mode,  bcmbal_flow_cfg *p_flow)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    bcm_gport_t pon_gport, nni_gport;
+    bcm_vlan_t tunnel_id;    
+    int ii, unit, rv;      
+    bcm_vlan_port_t vp;
+    int pon, nni, sys_pon; 
+    bcm_vlan_t vsi;
+    int pon_encap_id;  
+    bal_sw_flow *p_flow_elm;
+    uint32_t flow_type, max_burst, svc_tag_indx;   
+    bal_sw_flow flow_elm;  
+    bal_sw_dpp_qos_service_cfg *p_service_cfg = NULL;   
+    bcmbal_flow_cfg flow_rev;  /* used for configuration in opposite direction */
+    bcmbal_flow_cfg *p_us_flow, *p_ds_flow;
+    bal_sw_vsi_service *p_vsi_svc;
+        
+    BCM_LOG(INFO, log_id_sw_util,
+            " Got an DPP flow request - iwf_mode=%d flow_id=%d flow_type=%d,  sub_port=%d svc_id=%d\n",
+            iwf_mode, 
+            p_flow->key.flow_id, p_flow->key.flow_type, p_flow->data.access_int_id, p_flow->data.svc_port_id);
+    BCM_LOG(DEBUG, log_id_sw_util,
+            " classifier - mask=0x%x otpid=%x itpid=%x ovid=%x ivid=%x\n",
+            p_flow->data.classifier.presence_mask,
+            p_flow->data.classifier.o_tpid, p_flow->data.classifier.i_tpid,
+            p_flow->data.classifier.o_vid, p_flow->data.classifier.i_vid);
+    
+    
+    if ( iwf_mode != BCMBAL_IWF_MODE_DIRECT_MAPPING)
+    {
+        BCM_LOG(ERROR, log_id_sw_util,
+                    " ERROR: not supported IWF mode - %d\n", iwf_mode); 
+        return BCM_ERR_NOT_SUPPORTED;
+    }
+
+    if (BCMOS_TRUE == BCMBAL_CFG_PROP_IS_SET(p_flow, flow, action)) 
+    {
+        BCM_LOG(DEBUG, log_id_sw_util,
+                " action.params: .cmds_bitmask=0x%x, .input_pkt_tag_type=0x%x\n", 
+                    p_flow->data.action.cmds_bitmask, 
+                    p_flow->data.classifier.pkt_tag_type);
+    }
+
+    if (p_flow->key.flow_type == BCMBAL_FLOW_TYPE_DOWNSTREAM &&
+        BCMOS_TRUE == BCMBAL_CFG_PROP_IS_SET(p_flow, flow, sla) &&
+        p_flow->data.sla.max_rate < p_flow->data.sla.min_rate)
+    {
+        BCM_LOG(ERROR, log_id_sw_util,
+                    " ERROR: Max rate %d kbps is not >= Min rate %d kbps\n", p_flow->data.sla.max_rate, p_flow->data.sla.min_rate ); 
+        return BCM_ERR_NOT_SUPPORTED;
+    }
+    
+    switch(p_flow->key.flow_type)
+    {
+        case BCMBAL_FLOW_TYPE_DOWNSTREAM:
+            flow_type = BAL_SW_FLOW_TYPE_DOWNSTREAM;
+            /* for downstream N:1 service, same flood settings as multicast flow */
+            if(BCMOS_TRUE == BCMBAL_CFG_PROP_IS_SET(p_flow, flow, group_id))
+            {
+                return  bal_sw_util_dpp_mc_flow_add(p_flow, BAL_SW_FLOW_TYPE_DOWNSTREAM); 
+            }
+            break;
+        case BCMBAL_FLOW_TYPE_UPSTREAM:
+            flow_type = BAL_SW_FLOW_TYPE_UPSTREAM;
+            break;
+        case BCMBAL_FLOW_TYPE_MULTICAST:
+            return  bal_sw_util_dpp_mc_flow_add(p_flow, BCMBAL_FLOW_TYPE_MULTICAST);       
+        default:
+            return BCM_ERR_NOT_SUPPORTED;            
+    }
+    
+    unit = bal_bcm_pon_inf_dev_get(p_flow->data.access_int_id); 
+    /* We program a flow with 3 switch components, inLIF, vSwitch and outLIF. 
+       LIF is always bi-directional operation, so for uni-directional flow we programmed an ingress or egress DROP
+       on PON based on the BAL flow direction. Later, when the BAL flow from the other direction is SET, we
+       remove the DROP from the PON.
+       This imply that two BAL flows with same id must have symmetry vlan manipulation operations.
+    */
+    p_flow_elm = bal_sw_util_flow_list_get_by_id(p_flow->key.flow_id);
+    if (p_flow_elm)
+    {
+        /* Check if flow with same id and type exist or not. 
+           If downstream exist, remove the DISCARD_INGRESS from PON port by set it to DISCARD_NONE.
+           If upstream exist,   remove the DISCARD_EGRESS from PON port by set it to DISCARD_NONE.            
+           Asymmetry operations need two flows with different ID - each flow in uni-direction */        
+        if(!(p_flow_elm->type & flow_type))
+        {  
+            bcmbal_flow_cfg *p_ref_flow = NULL;
+            bcmbal_flow_key key;
+            /* retrieve the classifier on the other flow direction */
+            key.flow_id = p_flow->key.flow_id;
+            key.flow_type = (p_flow->key.flow_type == BCMBAL_FLOW_TYPE_DOWNSTREAM)? BCMBAL_FLOW_TYPE_UPSTREAM : BCMBAL_FLOW_TYPE_DOWNSTREAM;
+            p_ref_flow = flow_get_current_info_by_key(key);
+            if(NULL == p_ref_flow)
+            {
+                BCM_LOG(ERROR, log_id_sw_util,
+                        " ERROR: Can't locate flow %d type %d info from main DB\n", key.flow_id, key.flow_type);
+                return BCM_ERR_INTERNAL;
+            }                
+            /* check the symmetrical properties between two flows */
+            if (BCMOS_FALSE == bal_sw_util_is_symmetry_flows(p_flow, p_ref_flow))
+            {
+                BCM_LOG(ERROR, log_id_sw_util,
+                        " ERROR: Flow %d does not have symmetry classifiers\n", key.flow_id);
+                return BCM_ERR_INTERNAL;
+            } 
+            
+            /* if there is SLA in downstream, remove the US flow ( LIFs & VSWITCH) and build a new bi-direction flow.
+               This is because LIF is always bi-directional and when the US flow is created the PON LIF has no downstream VOQ.
+               One needs to create a new PON LIF with VOQ for SLA. There is no easy way to add VOQ to an existing LIF. */
+            if( p_flow->key.flow_type == BCMBAL_FLOW_TYPE_DOWNSTREAM &&
+                BCMOS_TRUE == BCMBAL_CFG_PROP_IS_SET(p_flow, flow, sla)  )
+            {
+                /* remove the existing US flow */ 
+                ret = bal_sw_util_dpp_flow_remove_int(p_flow_elm);
+                if(ret != BCM_ERR_OK)
+                {
+                    BCM_LOG(ERROR, log_id_sw_util,
+                            " ERROR: fail to remove flow %d from the list\n", p_flow->key.flow_id); 
+                        
+                    return BCM_ERR_INTERNAL;
+                }           
+                flow_type = BAL_SW_FLOW_TYPE_DOWNSTREAM | BAL_SW_FLOW_TYPE_UPSTREAM;
+                /* goto regular path to create bi-directional flow */
+            }                
+             /* if no SLA and the classifier is more than just port + VLAN tags, add ACL rule to re-direct packet to egress port.
+               This bypass the ingress LIF as LIF check VID only. 
+               Upstream classification is expected to be done in ONU (onu add GEM based on classifiers for upstream), 
+               return success after complete as there is no other changes needed for existing flow.
+              */
+            else 
+            {
+                int i;
+                bcmos_bool is_nni_set = BCMBAL_CFG_PROP_IS_SET(p_flow, flow, network_int_id);
+                
+                if( p_flow->key.flow_type == BCMBAL_FLOW_TYPE_DOWNSTREAM  &&
+                    bal_sw_util_flow_ds_acl_cls_chk(p_flow) == BCMOS_TRUE     )
+                {   
+                    for(i=0;  i < p_flow_elm->num_pon; i++)
+                    {                        
+                        for(ii=0; ii < p_flow_elm->num_net; ii++)
+                        {
+                            /*first get the ING logical port from gport */
+                            bcm_vlan_port_t tmp_vp;
+                            bcm_vlan_port_t_init(&tmp_vp);
+                            tmp_vp.vlan_port_id = p_flow_elm->net_port[ii];
+                            ret = bcm_vlan_port_find(unit, &tmp_vp);
+                            if(ret != BCM_ERR_OK)
+                            {
+                                BCM_LOG(WARNING, log_id_sw_util,
+                                " Warning: fail to retrieve logical port from gport 0x%x\n", p_flow_elm->net_port[ii]); 
+                                continue;
+                            }           
+                            /* if nni port is specified in the flow, skip the other nni ports */
+                            if ( BCMOS_TRUE == is_nni_set &&  tmp_vp.port != bal_bcm_net_inf_pbm_get(p_flow->data.network_int_id))                               
+                            {
+                                ii++;
+                                /* if nni is set, it has to be in the nni list of the opposit FLOW */
+                                /* set the return to BCM_ERR_INTERNAL, in case it reach the end of for-loop. */ 
+                                ret = BCM_ERR_INTERNAL;
+                                continue;
+                            }
+                            /* Rule need to match the ingress port, otherwise, it will apply to all ports - nni and pon */
+                            if ( BCMOS_TRUE != is_nni_set)
+                            { 
+                                BCMBAL_CFG_PROP_SET(p_flow, flow, network_int_id, bal_bcm_net_inf_idx_get(tmp_vp.port));
+                            }
+                            ret = bal_sw_util_dpp_acl_add(unit, p_flow, p_flow_elm,  p_flow_elm->net_port[ii], p_flow_elm->pon_port[i]); 
+                            if ( BCMOS_TRUE != is_nni_set)
+                            {
+                                BCMBAL_CFG_PROP_CLEAR(p_flow, flow, network_int_id);
+                            }                    
+                            if (ret != BCM_ERR_OK)
+                            {
+                                BCM_LOG(ERROR, log_id_sw_util, "Error, fail to add forwarding acl on nni %d, ret = %d\n", ret, ii); 
+                                break;                    
+                            }
+                            /* add a dft drop rule (priority 0) on the LIF to drop packets that match VID but no match for other fields */
+                            ret = bal_sw_util_dpp_dft_acl_add(unit, p_flow, p_flow_elm, p_flow_elm->net_port[ii]);
+                            if (ret != BCM_ERR_OK)
+                            {
+                                BCM_LOG(ERROR, log_id_sw_util, "Error, fail to add default acl on nni=0x%x, ret = %d\n", p_flow_elm->net_port[ii], ret); 
+                                break;                    
+                            }    
+                        }
+                        if (ret != BCM_ERR_OK)
+                        {
+                            break;
+                        }
+                    } 
+                
+                    if(ret != BCM_ERR_OK)
+                    {
+                        BCM_LOG(ERROR, log_id_sw_util,
+                                " ERROR: fail to add DS ACL to nni_%d in flow id %d from the list\n", ii,p_flow->key.flow_id); 
+                            
+                        return BCM_ERR_INTERNAL;
+                    } 
+                } 
+                /* If the US and DS has asymmetrical nature, we only program common part (VID) when create the LIF
+                   We need an ACL rule to perform upstream specific classification and forwarding.
+                   In addition, ACL allow upstream flows to be prioritized based on priority field.*/
+                if( p_flow->key.flow_type == BCMBAL_FLOW_TYPE_UPSTREAM  &&
+                    bal_sw_util_flow_us_acl_cls_chk(p_flow) == BCMOS_TRUE  &&
+                   /* there are issues using traditional API for PON application when egress vlan translation and ingress ACL are both active.
+                       Enable the ACL only when there is no vlan action - TBD */
+                    BCMOS_FALSE == BCMBAL_CFG_PROP_IS_SET(p_flow, flow, action))
+                {   
+                    if ( BCMOS_FALSE == is_nni_set)
+                    {
+                        BCM_LOG(ERROR, log_id_sw_util,
+                                " ERROR: Upstream classifier in addition to VID without setting NNI is not supported\n");                             
+                        return BCM_ERR_INTERNAL;
+                    }
+					
+                    for(i=0;  i < p_flow_elm->num_pon; i++)
+                    {                           
+                        ret = bal_sw_util_dpp_acl_add(unit, p_flow, p_flow_elm,  p_flow_elm->pon_port[i], p_flow_elm->net_port[p_flow->data.network_int_id]); 
+				
+                        if (ret != BCM_ERR_OK)
+                        {
+                            BCM_LOG(ERROR, log_id_sw_util, "Error, fail to add forwarding acl on pon %d, ret = %d\n", ret, i); 
+                            break;                    
+                        }
+                        /* add a default drop rule (priority 0) on the LIF to drop packets that match VID but no match for other fields */
+                        ret = bal_sw_util_dpp_dft_acl_add(unit, p_flow, p_flow_elm, p_flow_elm->pon_port[i]);
+                        if (ret != BCM_ERR_OK)
+                        {
+                            BCM_LOG(ERROR, log_id_sw_util, "Error, fail to add default acl on pon=0x%x, ret = %d\n", p_flow_elm->pon_port[i], ret); 
+                            break;                    
+                        }    
+                    } 
+                
+                    if(ret != BCM_ERR_OK)
+                    {
+                        BCM_LOG(ERROR, log_id_sw_util,
+                                " ERROR: fail to add US ACL to pon_%d in flow id %d from the list\n", i, p_flow->key.flow_id);                             
+                        return BCM_ERR_INTERNAL;
+                    } 
+                } 				
+                      
+                BCM_LOG(INFO, log_id_sw_util,
+                        " remove packet discard function from PON in flow id %d \n",p_flow->key.flow_id);
+                /* remove the PON ports from DISCARD_XXX mode  */
+                for(ii=0; ii<p_flow_elm->num_pon; ii++)
+                {
+                    if(p_flow_elm->pon_port[ii] == 0)
+                    {
+                        /* if PON LIF is deleted, then continue to the next one */
+                        continue;
+                    }                    
+                    ret = bcm_port_discard_set(p_flow_elm->device, p_flow_elm->pon_port[ii], BCM_PORT_DISCARD_NONE);
+                    if (ret != BCM_ERR_OK)
+                    {
+                        break;
+                    }
+                }    
+                if(ret != BCM_ERR_OK)
+                {
+                    BCM_LOG(ERROR, log_id_sw_util,
+                            " ERROR: fail to remove packet discard from pon_%d in flow id %d from the list\n", ii,p_flow->key.flow_id); 
+                        
+                    ret = BCM_ERR_INTERNAL;
+                }           
+                else
+                {  
+                    /* add flow type to the exist list */
+                    p_flow_elm->type |= flow_type;         
+                    ret = BCM_ERR_OK;
+                }
+                return ret;
+            }
+        }
+        else /* same id and type is an error  - we do not check if contents are the same or not */
+        {
+            BCM_LOG(ERROR, log_id_sw_util,
+                    " ERROR: flow id %d type %d already exist\n",p_flow->key.flow_id, p_flow->key.flow_type); 
+            return BCM_ERR_INTERNAL;
+        }
+    }
+        
+    /* 
+     * First, validate that the specified PON has at least one NNI port on the same device.
+     * If not, return an error, as this is not supported.
+     */
+    ii = 0;
+    ret = BCM_ERR_NOT_SUPPORTED;
+    /* walk through the entire mapping table */
+    while(-1 != bal_bcm_net_inf_pbm_get(ii))
+    {
+        if(bal_bcm_net_inf_dev_get(ii) == unit)
+        {
+            ret = BCM_ERR_OK;
+            break;
+        }
+        ii++; /* Next NNI */
+    }
+
+    do 
+    {
+        /*
+         * Check return code from device check above.  Return if there was no local PON .
+         */
+        if(BCM_ERR_OK != ret)
+        {
+            BCM_LOG(ERROR, log_id_sw_util,
+                    " ERROR: no network port is on the same device as access port %d\n", p_flow->data.access_int_id);
+            break;
+        }
+        
+        /* initialize link list flow element */         
+        memset(&flow_elm, 0, sizeof (bal_sw_flow));
+        /* fill in the basic info */
+        flow_elm.id = p_flow->key.flow_id;
+        flow_elm.device = unit;
+        flow_elm.type = flow_type;
+        flow_elm.svc_port = p_flow->data.svc_port_id;
+        flow_elm.flow_cookie = p_flow->data.cookie;        
+ 
+        tunnel_id = (bcm_vlan_t)p_flow->data.svc_port_id;
+        pon = bal_bcm_pon_inf_pbm_get(p_flow->data.access_int_id);
+        
+        /* Map the tunnel ID to a PON channel OTM port */
+        rv = bcm_port_pon_tunnel_map_set(unit,
+                                         pon,
+                                         tunnel_id,
+                                         pon);
+        if (rv != BCM_E_NONE)
+        { 
+            BCM_LOG(ERROR, log_id_sw_util,
+                    "Error, bcm_port_pon_tunnel_map_set on pon %d failed %d"
+                    " (have you chosen the correct intf_maptable?)\n", pon, rv);
+            ret = BCM_ERR_INTERNAL;
+            break;
+        }        
+        
+        /* For TRAP to HOST action, it can be either upstream or downsteram,
+           There is no packet manipulation, just insert an ACL and return.
+           For flow action equal TRAP_TO_HOST, DS flow has to use different flow id even if the classifier is the same as the US.
+           This is to simplify the REMOVE/DELETE operation in the switch.
+        */   
+        if ((BCMOS_TRUE == BCMBAL_CFG_PROP_IS_SET(p_flow, flow, action))  &&            
+            (p_flow->data.action.cmds_bitmask & BCMBAL_ACTION_CMD_ID_TRAP_TO_HOST) 
+           )
+        {
+            /* For US, create an in LIF for matching, this allow trapping of different tunnel_id on the same PON.
+               Tunnel_id is stripped before packets are forwarding to the host */
+            if(p_flow->key.flow_type == BCMBAL_FLOW_TYPE_UPSTREAM)
+            {
+                if(BCMOS_FALSE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, pkt_tag_type))
+                {
+                    BCMBAL_ATTRIBUTE_PROP_SET(&p_flow->data.classifier, classifier, pkt_tag_type, BCMBAL_PKT_TAG_TYPE_UNTAGGED);
+                    BCM_LOG(WARNING, log_id_sw_util, "Tag Type for Upstream Packet Trapping is not set, default to UNTAGGED\n");         
+                }
+                
+                bcm_vlan_port_t_init(&vp);
+                
+                /* preserve any incoming packet vlan tags */
+                vp.flags =  BCM_VLAN_PORT_OUTER_VLAN_PRESERVE  | BCM_VLAN_PORT_INNER_VLAN_PRESERVE | BCM_VLAN_PORT_FORWARD_GROUP;        
+                                       
+                switch(p_flow->data.classifier.pkt_tag_type)
+                {
+                    case BCMBAL_PKT_TAG_TYPE_SINGLE_TAG:
+                        /* match both tunnel and outer tag on ingress PON  */
+                        vp.criteria = BCM_VLAN_PORT_MATCH_PORT_TUNNEL_VLAN;             
+                        break; 
+                    case BCMBAL_PKT_TAG_TYPE_DOUBLE_TAG:                                    
+                        /* match tunnel and both outer and inner tags on ingress PON  */
+                        vp.criteria = BCM_VLAN_PORT_MATCH_PORT_TUNNEL_VLAN_STACKED;                 
+                        break;                             
+                    case BCMBAL_PKT_TAG_TYPE_UNTAGGED: 
+                    default: /* just to make compiler happy */                    
+                        /* match tunnel tag on ingress PON  */
+                        vp.criteria = BCM_VLAN_PORT_MATCH_PORT_TUNNEL;
+                        break;             
+                }                           
+                                
+                vp.port = pon;        
+                vp.match_tunnel_value = tunnel_id;
+                vp.egress_tunnel_value = tunnel_id;
+                if(BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, o_vid))
+                {
+                    vp.match_vlan = p_flow->data.classifier.o_vid;       
+                }
+                if(BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, i_vid))
+                {
+                    vp.match_inner_vlan = p_flow->data.classifier.i_vid;  
+                } 
+                vp.vsi = 0; /* will be populated when the gport is added to service, using vswitch_port_add */
+               
+                /* Create the vlan port (i.e., PON LIF) */
+                rv = bcm_vlan_port_create(unit, &vp);
+                if (rv != BCM_E_NONE)
+                {
+                    BCM_LOG(ERROR, log_id_sw_util, "Error, bcm_vlan_port_create pon %d failed %d\n", pon, rv);         
+                    return BCM_ERR_INTERNAL;
+                }
+                ret = bal_sw_util_dpp_acl_add(unit, p_flow, &flow_elm, vp.vlan_port_id, 0);                
+            }
+            else
+            {
+                 ret = bal_sw_util_dpp_acl_add(unit, p_flow, &flow_elm, 0, 0);
+            }
+            
+            if(BCM_ERR_OK != ret)
+            {
+                BCM_LOG(ERROR, log_id_sw_util, " ERROR: fail to add %s acl rule on trap\n", (p_flow->key.flow_type == BCMBAL_FLOW_TYPE_UPSTREAM)? "US":"DS" );
+            }
+            else
+            {
+                ret = bal_sw_util_flow_list_insert(flow_elm);
+                BCM_LOG(INFO, log_id_sw_util, "Add flow_elm %d  type %d, trap_code 0x%x, eid=%d Success\n", flow_elm.id, flow_elm.type, flow_elm.trap_code, flow_elm.field_entry_id[0]);
+            }
+            return ret;
+        } /* endif TRAP_TO_HOST ACTION */         
+  
+        /* For TR-156 1:1, single tagged on V and R/S interface.
+           The vswitch will push a tunnel tag on the down stream packets.
+           The vswitch will pop the tunnel tag from the upstream packets.
+       
+           TBD For TR-156 1:1, double tagged on V interface and single tagged on R/S interface.           
+           The vswitch will replace the outer tag with tunnel tag on the down stream packets.
+           The vswitch will replace the tunnel tag with outer vid on upstream packets.           
+           
+           For TR-156 N:1, single tagged on V and R/S interface.
+           The vswitch will learn the upstream source MAC for downstream forwarding
+        */ 
+  
+        /* packet tag type and service port id are required fields when there is no action - checked in validation stage */
+        /* Here make sure it is the supported type */        
+        if(p_flow->data.classifier.pkt_tag_type != BCMBAL_PKT_TAG_TYPE_UNTAGGED &&
+           p_flow->data.classifier.pkt_tag_type != BCMBAL_PKT_TAG_TYPE_SINGLE_TAG &&
+           p_flow->data.classifier.pkt_tag_type != BCMBAL_PKT_TAG_TYPE_DOUBLE_TAG)
+        {
+            BCM_LOG(ERROR, log_id_sw_util,
+                    " ERROR: classifier packet tag type 0x%x is invalid\n", p_flow->data.classifier.pkt_tag_type);
+            ret = BCM_ERR_PARM;
+            break;
+        }         
+
+        /* create a local reverse flow for symmetry configurations */
+        ret = bal_sw_util_reverse_flow_create(p_flow, &flow_rev);
+        if (ret != BCM_ERR_OK)
+        {
+            BCM_LOG(ERROR, log_id_sw_util, "Error, (internal failure): fail to reverse flow\n"); 
+            ret = BCM_ERR_INTERNAL;
+            break;
+        }
+        
+        if(p_flow->key.flow_type == BCMBAL_FLOW_TYPE_UPSTREAM)
+        {
+            p_us_flow = p_flow;
+            p_ds_flow = &flow_rev;            
+        }
+        else 
+        {
+            p_us_flow = &flow_rev;
+            p_ds_flow = p_flow;
+        }           
+ 
+ 
+        /* create the vswitch */
+        /* if flow is associated with a GROUP, use the vswitch from the GROUP */
+        if(BCMOS_TRUE == BCMBAL_CFG_PROP_IS_SET(p_flow, flow, group_id))
+        {
+            bal_sw_group_list *p_group_list;
+            /* get a pointer to the specified group instance */
+            p_group_list = bal_sw_util_dpp_group_list_get_by_id(p_flow->data.group_id);
+ 
+            if ( p_group_list == NULL)
+            {
+                BCM_LOG(ERROR, log_id_sw_util,
+                        " ERROR: group %d not found\n", p_flow->data.group_id);
+                ret = BCM_ERR_INTERNAL;
+                break;   
+            }
+ 
+            /* retrieve the vswitch instance */
+            p_vsi_svc = p_group_list->p_vsi;
+            vsi = (p_group_list->p_vsi)->vswitch;
+            /* add flow to the vsi service tag list */
+            ret = bal_sw_util_dpp_vsi_service_tag_add(unit, p_vsi_svc, p_flow, &svc_tag_indx);
+            if (ret != BCM_ERR_OK)
+            {
+                BCM_LOG(ERROR, log_id_sw_util, "Error, flow fail to add service to vsi service tag list\n");
+                ret = BCM_ERR_INTERNAL;
+                break;                    
+            }
+            
+            /* set the mac learning distribution list */
+            if(BCMOS_TRUE == BCMBAL_CFG_PROP_IS_SET(p_flow, flow, resolve_mac) &&
+               BCMOS_TRUE == p_flow->data.resolve_mac)
+            {
+                bcm_l2_addr_distribute_t dist;
+    
+                bcm_l2_addr_distribute_t_init(&dist);
+                dist.vid = vsi;
+                dist.flags  = BCM_L2_ADDR_DIST_SET_CPU_DMA_DISTRIBUTER | BCM_L2_ADDR_DIST_SET_LEARN_DISTRIBUTER;
+                dist.flags |= BCM_L2_ADDR_DIST_LEARN_EVENT | BCM_L2_ADDR_DIST_AGED_OUT_EVENT | BCM_L2_ADDR_DIST_STATION_MOVE_EVENT;
+                rv = bcm_l2_addr_msg_distribute_set(unit, &dist);
+                if (rv != BCM_E_NONE)
+                {
+                    BCM_LOG(ERROR, log_id_sw_util, "Error, bcm_l2_addr_msg_distribute_set");         
+                    ret = BCM_ERR_INTERNAL;
+                    break;
+                }
+            }
+        }
+        else
+        {
+            /* vsi service needs down stream info for in LIF VLAN info */
+            p_vsi_svc = bal_sw_util_dpp_vsi_service_create(unit, p_ds_flow, &svc_tag_indx);
+            if(p_vsi_svc == NULL)
+            {   
+                BCM_LOG(ERROR, log_id_sw_util, "Error, vsi create failed\n");         
+                ret = BCM_ERR_INTERNAL;
+                break;      
+            }
+            vsi = p_vsi_svc->vswitch;
+        }
+        /* === create a PON LIF === */ 
+
+        /* if DS SLA is set, create a VOQ id, otherwise use local port id */
+        /** @note QoS from the Downstream flow config is taken to configure SLA in the switch. Upstream is done in MAC.
+         */        
+        if ((p_flow->key.flow_type == BCMBAL_FLOW_TYPE_DOWNSTREAM) && (BCMOS_TRUE == BCMBAL_CFG_PROP_IS_SET(p_flow, flow, sla)))
+        {
+            p_service_cfg = bcmos_calloc(sizeof(bal_sw_dpp_qos_service_cfg));
+            if (p_service_cfg == NULL)
+            {
+                BCM_LOG(ERROR, log_id_sw_util, "Error, fail to alloc a bal_sw_dpp_qos_service_cfg_t\n");         
+                ret = BCM_ERR_INTERNAL;
+                break;  
+            }
+            
+            p_service_cfg->service_type = BAL_BCM_SVC_TYPE_IP;
+            p_service_cfg->bal_flow_id = p_flow->key.flow_id;
+            p_service_cfg->pon_port = p_flow->data.access_int_id; 
+            p_service_cfg->tunnel_id = tunnel_id;
+            /* TBD - channelize port config */
+            p_service_cfg->ds_qos.pon_chan = 0;
+            p_service_cfg->ds_qos.min.rate = p_flow->data.sla.min_rate;
+            /* burst - set it to twice the rate */ 
+            max_burst = ( (2*p_service_cfg->ds_qos.min.rate) < BAL_MAX_BURST_RATE )? (2*p_service_cfg->ds_qos.min.rate): BAL_MAX_BURST_RATE;
+            p_service_cfg->ds_qos.min.burst = max_burst;
+            /* TBD priority */
+            p_service_cfg->ds_qos.min.traffic_priority = 2;
+            
+            p_service_cfg->ds_qos.max.rate = p_flow->data.sla.max_rate - p_flow->data.sla.min_rate;
+            /* burst - set it to twice the rate */
+            max_burst = ( (2*p_service_cfg->ds_qos.max.rate) < BAL_MAX_BURST_RATE )? (2*p_service_cfg->ds_qos.max.rate): BAL_MAX_BURST_RATE;            
+            p_service_cfg->ds_qos.max.burst = max_burst;
+            /* TBD priority */
+            p_service_cfg->ds_qos.max.traffic_priority = 2;
+            ret = bal_sw_dpp_llid_qos_config(unit, p_service_cfg);
+               /* Check for errors */
+            if (ret != BCM_ERR_OK)
+            {
+                /* Failure */
+                BCM_LOG(WARNING, log_id_sw_util,
+                            "Downstream QoS configuration failed for pon %u tid %u\n",
+                            p_flow->data.access_int_id, tunnel_id);                
+                break;                              
+            }
+            BCM_GPORT_UNICAST_QUEUE_GROUP_SET(pon, p_service_cfg->ds_qos.voq_flow_id);
+            sys_pon = p_service_cfg->ds_qos.voq_gport;
+            BCM_LOG(INFO, log_id_sw_util, " use voq_id 0x%x queue group 0x%x, voq_gport 0x%x to create PON LIFT\n", p_service_cfg->ds_qos.voq_flow_id, pon, sys_pon);
+            
+            /* clear the VOQ stats here */
+            bal_sw_dpp_qos_clear_voq_stats(unit, sys_pon);
+        }
+        else
+        {            
+            sys_pon = pon;
+            BCM_LOG(INFO, log_id_sw_util, " use pp port 0x%x to create PON LIFT\n", pon);
+        }
+         
+         /* Configure the switch pon LIF based on classifier in the flow.
+            The pon LIF filter the ingress packets from PON, so use the classifier in the US direction.
+            This means, if the original flow configuration is for Downstream, use the reverse flow that locally created  */ 
+        
+        bcm_vlan_port_t_init(&vp);
+        
+        /* preserve any incoming packet vlan tags, if vlan actions are required, do it using egress translation */
+        vp.flags =  BCM_VLAN_PORT_OUTER_VLAN_PRESERVE  | BCM_VLAN_PORT_INNER_VLAN_PRESERVE;        
+        /* It is required to set the FEC flag so that the egress redirection action from the DS classification can 
+           select the correct PON LIF to forward the packet */
+        vp.flags |= BCM_VLAN_PORT_FORWARD_GROUP;        
+      
+               
+        switch(p_us_flow->data.classifier.pkt_tag_type)
+        {
+            case BCMBAL_PKT_TAG_TYPE_SINGLE_TAG:
+                /* match both tunnel and outer tag on ingress PON  */
+                if(BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_us_flow->data.classifier, classifier, o_pbits))
+                {
+                    vp.criteria = BCM_VLAN_PORT_MATCH_PORT_TUNNEL_PCP_VLAN; 
+                    vp.match_pcp = p_us_flow->data.classifier.o_pbits;                    
+                }
+                else
+                {
+                    vp.criteria = BCM_VLAN_PORT_MATCH_PORT_TUNNEL_VLAN;
+                }                    
+                break; 
+            case BCMBAL_PKT_TAG_TYPE_DOUBLE_TAG:                                    
+                /* Otherwise match both tunnel and both outer and inner tags on ingress PON  */
+                if(BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_us_flow->data.classifier, classifier, o_pbits))
+                {
+                    vp.criteria = BCM_VLAN_PORT_MATCH_PORT_TUNNEL_PCP_VLAN_STACKED;
+                    vp.match_pcp = p_us_flow->data.classifier.o_pbits;                    
+                }
+                else
+                {
+                    vp.criteria = BCM_VLAN_PORT_MATCH_PORT_TUNNEL_VLAN_STACKED;
+                }                    
+                break;                             
+            case BCMBAL_PKT_TAG_TYPE_UNTAGGED:
+             /* Otherwise match tunnel tag on ingress PON  */
+                {
+                    vp.criteria = BCM_VLAN_PORT_MATCH_PORT_TUNNEL;
+                }
+               break; 
+            default:
+               /* should not reach here */
+              BCM_LOG(ERROR, log_id_sw_util, "Error, Unsupported packet type %d for pon LIF\n",p_us_flow->data.classifier.pkt_tag_type );
+              return BCM_ERR_INTERNAL;                    
+        }                           
+     
+        
+        vp.port = pon;        
+        vp.match_tunnel_value = tunnel_id;
+        vp.egress_tunnel_value = tunnel_id;
+        if(BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_us_flow->data.classifier, classifier, o_vid))
+        {
+            vp.match_vlan = p_us_flow->data.classifier.o_vid;       
+        }
+        if(BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_us_flow->data.classifier, classifier, i_vid))
+        {
+            vp.match_inner_vlan = p_us_flow->data.classifier.i_vid;  
+        } 
+        vp.vsi = 0; /* will be populated when the gport is added to service, using vswitch_port_add */
+       
+        /* Create the vlan port (i.e., PON LIF) */
+        rv = bcm_vlan_port_create(unit, &vp);
+        if (rv != BCM_E_NONE)
+        {
+            BCM_LOG(ERROR, log_id_sw_util, "Error, bcm_vlan_port_create pon %d failed %d\n", pon, rv);         
+            ret = BCM_ERR_INTERNAL;
+            break;  
+        }
+ 
+        pon_gport = vp.vlan_port_id;
+        /* set pon gport to first element of the array */
+        flow_elm.pon_port[0] = pon_gport;
+        
+        /* set PON port DISCARD mode to reflect the flow direction. When two BAL flows with same id  and different directions
+           are configured, the DISCARD mode will be set back to NONE */
+        if (flow_elm.type == BAL_SW_FLOW_TYPE_DOWNSTREAM)         
+        {
+            BCM_LOG(INFO, log_id_sw_util, "Info, bcm_port_discard_set pon 0x%x to DISCARD_INGRESS\n", pon_gport);  
+            rv = bcm_port_discard_set(unit, pon_gport, BCM_PORT_DISCARD_INGRESS);
+        }
+        else if (flow_elm.type == BAL_SW_FLOW_TYPE_UPSTREAM)
+        {
+            /* allow bi-direction for N:1 service */
+            if( BCMOS_TRUE == BCMBAL_CFG_PROP_IS_SET(p_us_flow, flow, group_id) &&
+                BCMOS_TRUE == BCMBAL_CFG_PROP_IS_SET(p_us_flow, flow, resolve_mac) &&
+                BCMOS_TRUE == p_us_flow->data.resolve_mac)
+               {
+                   rv = BCM_E_NONE;   
+               }
+               else
+               {
+                   BCM_LOG(INFO, log_id_sw_util, "Info, bcm_port_discard_set pon 0x%x to DISCARD_EGRESS\n", pon_gport); 
+                   rv = bcm_port_discard_set(unit, pon_gport, BCM_PORT_DISCARD_EGRESS);
+               }
+        }
+        else
+        {
+            rv = BCM_E_NONE;
+        }
+        
+        if (rv != BCM_E_NONE)
+        {
+             BCM_LOG(ERROR, log_id_sw_util, "Error, bcm_port_discard_set failed %d\n", rv);
+             /* ARAD does not support the DISCARD function as of 6.5.4 */             
+#ifdef QAX_SWITCH             
+             ret = BCM_ERR_INTERNAL;
+             break;
+#endif             
+        } 
+        
+        // add pon gport to vswitch
+        rv = bcm_vswitch_port_add(unit, vsi, pon_gport);
+        if (rv != BCM_E_NONE)
+        {
+             BCM_LOG(ERROR, log_id_sw_util, "Error, bcm_vswitch_port_add for pon 0x%x failed %d\n", pon, rv);         
+             ret = BCM_ERR_INTERNAL;
+             break;  
+        }
+        else
+        {
+            BCM_LOG(INFO, log_id_sw_util, "Info, bcm_vswitch_port_add for pon 0x%x, gport 0x%x\n", pon, pon_gport);   
+        }
+        
+        if(BCMOS_TRUE == BCMBAL_CFG_PROP_IS_SET(p_flow, flow, group_id)    &&
+           BCMOS_TRUE == BCMBAL_CFG_PROP_IS_SET(p_flow, flow, resolve_mac) &&
+           BCMOS_TRUE == p_flow->data.resolve_mac)
+        {
+            /* for flows that need to resolve mac, don't forward unknown traffics */
+            BCM_LOG(DEBUG, log_id_sw_util, "pon %d:0x%x bypass downstream MC group join\n", pon, pon_gport); 
+        }
+        else
+        {
+            // obtain encapsulation ID for legacy reason, used in ADD API  */
+            rv = bcm_multicast_vlan_encap_get(unit, p_vsi_svc->ds_flood_grp_id, sys_pon, pon_gport, &pon_encap_id);
+            if (rv != BCM_E_NONE)
+            {
+                 BCM_LOG(ERROR, log_id_sw_util, "Error, bcm_multicast_vlan_encap_get for pon failed %d\n", rv);         
+                 ret = BCM_ERR_INTERNAL;
+                 break; 
+             }
+            /* join the downstream multicast group as a member of replication list */ 
+            rv = bcm_multicast_ingress_add(unit, p_vsi_svc->ds_flood_grp_id, sys_pon, pon_encap_id);
+            if (rv != BCM_E_NONE)
+            {
+                 BCM_LOG(ERROR, log_id_sw_util, "Error, bcm_multicast_ingress_add for pon failed %d\n", rv);         
+                 ret = BCM_ERR_INTERNAL;
+                 break;
+            }
+            /* now set the type of packets that goes to the upstream flooding group (offset 0) */        
+            rv = bcm_port_control_set(unit, pon_gport, bcmPortControlFloodUnknownUcastGroup, BAL_DPP_US_FLOOD_OFFSET);
+            if (rv != BCM_E_NONE)
+            {
+                 BCM_LOG(ERROR, log_id_sw_util, "Error, bcm_port_control_set ucast for pon failed %d\n", rv);                      
+            }
+        }
+        rv = bcm_port_control_set(unit, pon_gport, bcmPortControlFloodUnknownMcastGroup, BAL_DPP_US_FLOOD_OFFSET);
+        if (rv != BCM_E_NONE)
+        {
+             BCM_LOG(ERROR, log_id_sw_util, "Error, bcm_port_control_set mcast for pon failed %d\n", rv);                      
+             break;
+        }
+        rv = bcm_port_control_set(unit, pon_gport, bcmPortControlFloodBroadcastGroup, BAL_DPP_US_FLOOD_OFFSET);
+        if (rv != BCM_E_NONE)
+        {
+             BCM_LOG(ERROR, log_id_sw_util, "Error, bcm_port_control_set bcast for pon failed %d\n", rv); 
+             break;             
+        }
+        /* perform vlan translation on pon port, pon egress info is in the Downstream configuration */ 
+        if (BCMOS_TRUE == BCMBAL_CFG_PROP_IS_SET(p_ds_flow, flow, action))
+        {
+            ret = bal_sw_util_dpp_invlanx(unit, p_us_flow, pon_gport); 
+            if (ret != BCM_ERR_OK)
+            {
+                BCM_LOG(ERROR, log_id_sw_util, "Error, fail to perform ingress vlan translation on pon %d\n", pon);
+                break;                    
+            }              
+            ret = bal_sw_util_dpp_evlanx(unit, p_ds_flow, pon_gport); 
+            if (ret != BCM_ERR_OK)
+            {
+                BCM_LOG(ERROR, log_id_sw_util, "Error, fail to perform egress vlan translation on pon %d\n", pon);
+                break;                    
+            }  
+        }    
+        /* === PON LIF created === */
+         
+        ii = 0;  /* Start with the first NNI logical interface */
+        /* loop through all nni port, add them to vswitch, -1 indicate end of table */
+        /* Configure the switch nni LIF based on classifier in the flow.
+           The nni LIF filter the ingress packets from Network, so use the classifier in the DS direction.
+           This means, if the original flow configuration is for Upstream, use the reverse flow that locally created  */ 
+        while(-1 != (nni = bal_bcm_net_inf_pbm_get(ii)))
+        {
+            /* skip nni port that is not in the same device or not valid */
+            if ( bal_bcm_net_inf_dev_get(ii) != unit   ||
+                 BCMOS_FALSE == bcm_topo_nni_is_valid(ii))
+            {
+                ii++;
+                continue; 
+            }
+          
+            /* if nni port is specified in the flow, skip the other nni ports */
+            if ( BCMBAL_CFG_PROP_IS_SET(p_ds_flow, flow, network_int_id) &&
+                 ii != p_ds_flow->data.network_int_id
+               )
+            {
+                ii++;
+                continue;
+            }
+                
+            /* create gport based on nni physical port number */
+
+            ret = bal_sw_util_dpp_vsi_service_port_add(unit, p_vsi_svc, svc_tag_indx, nni, &nni_gport);
+            if (ret != BCM_ERR_OK)
+            {
+                BCM_LOG(ERROR, log_id_sw_util, "Error, fail to add nni %d to vsi\n", nni);
+                break;                    
+            }
+            
+            flow_elm.net_port[flow_elm.num_net] = nni_gport;
+            flow_elm.num_net++;
+			
+            /* perform vlan translation on nni port, nni egress info is in the Upstream configuration */ 
+            if (BCMOS_TRUE == BCMBAL_CFG_PROP_IS_SET(p_us_flow, flow, action)) 
+            { 
+                rv = bcm_vlan_control_port_set(unit, nni_gport, bcmVlanPortTranslateKeyFirst, bcmVlanTranslateKeyPortOuter);      
+                if (rv != BCM_E_NONE)
+                {
+                    BCM_LOG(ERROR, log_id_sw_util, "Error, fail to perform vlan control port set on nni %d\n", nni);
+                    break;
+                }
+                ret = bal_sw_util_dpp_invlanx(unit, p_ds_flow, nni_gport); 
+                if (ret != BCM_ERR_OK)
+                {
+                    BCM_LOG(ERROR, log_id_sw_util, "Error, fail to perform ingress vlan translation on nni %d\n", nni);
+                    break;                    
+                }        
+        
+                ret = bal_sw_util_dpp_evlanx(unit, p_us_flow, nni_gport); 
+                if (ret != BCM_ERR_OK)
+                {
+                    BCM_LOG(ERROR, log_id_sw_util, "Error, fail to perfrom egress vlan translation on nni %d\n", nni);
+                    break;                    
+                }
+            }
+            /* if classifier is more than just port + VLAN tags, add ACL rule to re-direct packet to egress port.
+               This bypass the ingress LIF as LIF check VID only. 
+               Upstream classification is expected to be done in ONU (onu add GEM based on classifiers for upstream) */
+            if( p_flow->key.flow_type == BCMBAL_FLOW_TYPE_DOWNSTREAM  &&
+                bal_sw_util_flow_ds_acl_cls_chk(p_ds_flow) == BCMOS_TRUE )
+            {  
+                /* add re-direct rule */ 
+                if( BCMOS_TRUE == BCMBAL_CFG_PROP_IS_SET(p_ds_flow, flow, network_int_id))
+                {                    
+                    ret = bal_sw_util_dpp_acl_add(unit, p_ds_flow, &flow_elm,  nni_gport, pon_gport); 
+                }
+                else /* Rule need to match the network port, otherwise, it will apply to all ports - nni and pon */
+                { 
+                    BCMBAL_CFG_PROP_SET(p_ds_flow, flow, network_int_id, ii);
+                    ret = bal_sw_util_dpp_acl_add(unit, p_ds_flow, &flow_elm,  nni_gport, pon_gport); 
+                    BCMBAL_CFG_PROP_CLEAR(p_ds_flow, flow, network_int_id);
+                }                    
+                if (ret != BCM_ERR_OK)
+                {
+                    BCM_LOG(ERROR, log_id_sw_util, "Error, fail to add forwarding acl on nni %d, ret = %d\n", ret, ii); 
+                    break;                    
+                }
+                /* add a dft drop rule (priority 0) on the LIF to drop packets that match VID but no match for other fields */
+                ret = bal_sw_util_dpp_dft_acl_add(unit, p_ds_flow, &flow_elm, nni_gport);
+                if (ret != BCM_ERR_OK)
+                {
+                    BCM_LOG(ERROR, log_id_sw_util, "Error, fail to add default acl on nni=0x%x, ret = %d\n", nni_gport, ret); 
+                    break;                    
+                }                
+            }
+            /* If the user needs to perfrom upstream classification (in addition to VID),
+               Add an ACL rule to re-direct packets. The ACL also allow upstream flows to be prioritized based on priority field */ 
+            if( p_flow->key.flow_type == BCMBAL_FLOW_TYPE_UPSTREAM  &&
+                bal_sw_util_flow_us_acl_cls_chk(p_us_flow) == BCMOS_TRUE  &&
+                /* there are issues using traditional API for PON application when egress vlan translation and ingress ACL are both active.
+                   Enable the ACL only when there is no vlan action - TBD */
+                BCMOS_FALSE == BCMBAL_CFG_PROP_IS_SET(p_flow, flow, action))
+            {  
+                /* ACL requires an action, currently support trap or re-direct the flow.
+                   TRAP has been handle in other path, here we require user to specify which port to re-direct.
+                   Other options will be adding multiple ACL to cover all possible egress ports - TBD */ 
+                if( BCMOS_FALSE == BCMBAL_CFG_PROP_IS_SET(p_us_flow, flow, network_int_id))
+                {                    
+                    BCM_LOG(ERROR, log_id_sw_util, "Error, Upstream classifier in addition to VID without NNI port set is not suppotred\n"); 
+                    break; 
+                }
+                else 
+                { 
+                    ret = bal_sw_util_dpp_acl_add(unit, p_us_flow, &flow_elm,  pon_gport, nni_gport); 
+                }                    
+                if (ret != BCM_ERR_OK)
+                {
+                    BCM_LOG(ERROR, log_id_sw_util, "Error, fail to add forwarding acl on pon %d, ret = %d\n", ret, pon); 
+                    break;                    
+                }
+                /* add a default drop rule (priority 0) on the LIF to drop packets that match VID but no match for other fields */
+                ret = bal_sw_util_dpp_dft_acl_add(unit, p_us_flow, &flow_elm, pon_gport);
+                if (ret != BCM_ERR_OK)
+                {
+                    BCM_LOG(ERROR, log_id_sw_util, "Error, fail to add default acl on pon=0x%x, ret = %d\n", pon_gport, ret); 
+                    break;                    
+                }                
+            }
+           
+            ii++; /* Next NNI */            
+        } 
+        /* skip the rest if anything goes wrong */        
+        if( ret != BCM_ERR_OK)
+        {
+            break;
+        }
+        /* Configure PCP/Cos to Traffic Class mapping. This has to be done after the NNI LIFs are created */ 
+        if (p_flow->key.flow_type == BCMBAL_FLOW_TYPE_DOWNSTREAM && BCMOS_TRUE == BCMBAL_CFG_PROP_IS_SET(p_flow, flow, sla))
+        {
+            p_service_cfg->num_nni_gport = flow_elm.num_net;
+            for( ii = 0; ii < p_service_cfg->num_nni_gport; ii++)
+            {
+                p_service_cfg->nni_gport[ii] = flow_elm.net_port[ii];
+            }
+            ret = bal_sw_dpp_llid_set_qos_port_map(unit, p_service_cfg);
+            if (ret != BCM_ERR_OK)
+            {
+                BCM_LOG(ERROR, log_id_sw_util, "Error, fail to perfrom nni qos port map, ret = %d\n", ret);
+                break;                
+            }
+        }
+        
+    } while(0);
+
+    if( ret == BCM_ERR_OK)
+    {
+        /* add the flow info to the link list */         
+        flow_elm.p_vsi_svc = p_vsi_svc;
+        flow_elm.vsi_svc_indx = svc_tag_indx;
+        flow_elm.num_pon = 1;
+        flow_elm.p_service_cfg =  p_service_cfg;
+  
+        /* nni ports are done in the nni loop */
+        flow_elm.valid = 1;
+        bal_sw_util_flow_list_insert(flow_elm);   
+       
+        BCM_LOG(INFO, log_id_sw_util, "Add flow_elm %d  type %d, vswitch 0x%x, Success\n", flow_elm.id, flow_elm.type, p_vsi_svc->vswitch);        
+    }        
+    return ret;
+}
+
+
+/**
+ * @brief The internal flow remove function program DPP to release resource that
+ * were allocated during the ADD operation
+ *
+ * @param p_flow_elm  a pointer to the internal flow list
+ *
+ * @return error code
+ */
+bcmos_errno bal_sw_util_dpp_flow_remove_int(bal_sw_flow *p_flow_elm)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    int rv, i, flow_id;
+    bal_sw_vsi_service *p_vsi_svc;
+    bal_sw_group_list *p_group_list;
+    
+    if(p_flow_elm == NULL)
+    {
+        BCM_LOG(ERROR, log_id_sw_util, " invalid pointer to the internal flow list\n");
+        return BCM_ERR_INTERNAL;
+    }
+    p_vsi_svc = (bal_sw_vsi_service *) p_flow_elm->p_vsi_svc;   
+    /* if anything go wrong, log a warning and continue release resources */
+    for(i = 0; i <p_flow_elm->num_pon; i++)
+    {       
+        rv = bcm_vswitch_port_delete(p_flow_elm->device, p_vsi_svc->vswitch, p_flow_elm->pon_port[i]);
+        if(rv)
+        {
+            BCM_LOG(WARNING, log_id_sw_util, " vswitch pon port 0x%x delete failed %d\n", p_flow_elm->pon_port[i], rv);
+        }
+        rv = bcm_vlan_port_destroy(p_flow_elm->device, p_flow_elm->pon_port[i]); 
+        if(rv)
+        {
+            BCM_LOG(WARNING, log_id_sw_util, " vswitch pon port 0x%x destroy failed %d\n", p_flow_elm->pon_port[i], rv);
+        } 
+        p_flow_elm->pon_port[i] = 0;        
+    }
+    p_flow_elm->num_pon = 0;
+    
+    for(i = 0; i <p_flow_elm->num_net; i++)
+    {    
+        ret = bal_sw_util_dpp_vsi_service_port_rem(p_flow_elm->device, p_flow_elm->p_vsi_svc, p_flow_elm->vsi_svc_indx, p_flow_elm->net_port[i]);
+        if(ret != BCM_ERR_OK)
+        {
+            BCM_LOG(WARNING, log_id_sw_util, " vsi service port 0x%x remove failed %d\n", p_flow_elm->net_port[i], ret);
+        }
+         
+        p_flow_elm->net_port[i] = 0;        
+    }
+    p_flow_elm->num_net = 0;
+    
+    /* release vswitch */
+    if (p_vsi_svc)
+    {
+        /* remove the vsi if no more service, destroy function will do the counting */
+        ret = bal_sw_util_dpp_vsi_service_destroy(p_flow_elm->device, p_vsi_svc);
+        if(ret != BCM_ERR_OK)
+        {
+            BCM_LOG(WARNING, log_id_sw_util, " vsi service destroy failed %d\n", ret);
+        }           
+    }
+        /* decrement the group reference counter in the group list */
+    if (p_flow_elm->group_id)
+    {
+        p_group_list = bal_sw_util_dpp_group_list_get_by_id(p_flow_elm->group_id);
+        if ( p_group_list == NULL)
+        {
+            BCM_LOG(WARNING, log_id_sw_util,
+                    " WARNING: MC flow remove can't find the mc group %d in the list\n", p_flow_elm->group_id);            
+        }   
+        else
+        {
+            if(p_group_list->use_count)
+            {
+                p_group_list->use_count--;
+            }
+            else
+            {
+                BCM_LOG(WARNING, log_id_sw_util,
+                    " WARNING: MC flow remove find the mc group %d in the list has no use_count\n", p_flow_elm->group_id);  
+            }
+        } 
+    }
+    
+    /* relese trap */
+    if (p_flow_elm->trap_code)
+    {
+        rv = bcm_rx_trap_type_destroy(p_flow_elm->device, p_flow_elm->trap_code);
+        if(rv)
+        {
+            BCM_LOG(WARNING, log_id_sw_util, " rx trap %d destroy failed %d\n", p_flow_elm->trap_code, rv);
+        }
+        p_flow_elm->trap_code = 0;
+        p_flow_elm->trap_port = 0;
+    }
+    
+    /* release acl, if any */
+    for(i = 0; i <p_flow_elm->num_eid; i++)
+    {
+        if (p_flow_elm->field_entry_id[i])
+        {
+            rv = bcm_field_entry_remove(p_flow_elm->device, p_flow_elm->field_entry_id[i]);
+            if(rv)
+            {
+                BCM_LOG(WARNING, log_id_sw_util, " field entry %d remove failed %d\n", p_flow_elm->field_entry_id[i], rv);
+            }
+            rv = bcm_field_entry_destroy(p_flow_elm->device, p_flow_elm->field_entry_id[i]);
+            if(rv)
+            {
+                BCM_LOG(WARNING, log_id_sw_util, " field entry %d destroy failed %d\n", p_flow_elm->field_entry_id[i], rv);
+            }
+            p_flow_elm->field_entry_id[i] = 0;
+        }
+    }
+    p_flow_elm->num_eid = 0;
+   
+    /* release llid qos, if any */
+    if (p_flow_elm->p_service_cfg)
+    {
+        /* any error during cleanup will be reported, but continue anyway */
+        bal_sw_dpp_llid_qos_cleanup(p_flow_elm->device, (bal_sw_dpp_qos_service_cfg *)p_flow_elm->p_service_cfg); 
+        bcmos_free(p_flow_elm->p_service_cfg);
+        p_flow_elm->p_service_cfg = NULL;
+    }
+    
+    /* remove from the internal link list */
+    flow_id = p_flow_elm->id;
+    ret = bal_sw_util_flow_list_remove(p_flow_elm);
+    if(ret == BCM_ERR_OK)
+    {
+        BCM_LOG(INFO, log_id_sw_util, " flow %d is removed\n", flow_id);
+        ret = BCM_ERR_OK;
+    }
+    else
+    {
+        BCM_LOG(WARNING, log_id_sw_util, " fail to remove flow %d w ret = %d\n", flow_id, ret);
+        ret = BCM_ERR_INTERNAL;
+    }
+    return ret;
+}
+
+/**
+ * @brief The flow remove function program DPP to release resource that
+ * were allocated during the ADD operation
+ *
+ * @param iwf_mode The InterWorking Function mode - DIRECT or PER-FLOW
+ * @param p_flow A pointer to the requested add flow info
+ * @return error code
+ */
+bcmos_errno bal_sw_util_dpp_flow_remove(bcmbal_iwf_mode iwf_mode,  bcmbal_flow_cfg *p_flow)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    bal_sw_flow *p_flow_elm;
+    int ii, rv;
+    bcm_port_discard_t discard_type = BCM_PORT_DISCARD_NONE;
+ 
+    if(p_flow == NULL)
+    {
+        BCM_LOG(ERROR, log_id_sw_util, " invalid pointer to the bal flow\n");
+        return BCM_ERR_INTERNAL;
+    }   
+    
+    /* make sure the flow id is in the link list, if not return success anyway (probably clearing a DOWN flow) */
+    p_flow_elm = bal_sw_util_flow_list_get_by_id (p_flow->key.flow_id);
+    if(p_flow_elm == NULL)
+    {
+        BCM_LOG(WARNING, log_id_sw_util, " flow %d not exist the link list\n", p_flow->key.flow_id);
+        return BCM_ERR_OK;
+    }  
+
+    /* if flow_elm has the requested direction, set switch to discard packets from the requested direction. */       
+    if( (p_flow_elm->type & BAL_SW_FLOW_TYPE_DOWNSTREAM)        &&
+        (p_flow->key.flow_type == BCMBAL_FLOW_TYPE_DOWNSTREAM)
+      )        
+    {
+        discard_type = BCM_PORT_DISCARD_EGRESS;
+    } 
+    else if ((p_flow_elm->type & BAL_SW_FLOW_TYPE_UPSTREAM)      &&
+             (p_flow->key.flow_type == BCMBAL_FLOW_TYPE_UPSTREAM)   
+            )
+    {
+        discard_type = BCM_PORT_DISCARD_INGRESS;
+    }
+    else if (p_flow_elm->type & BAL_SW_FLOW_TYPE_MULTICAST)
+    {
+        /* clear rhe type so that it can remove the flow below */
+        p_flow_elm->type &= ~BAL_SW_FLOW_TYPE_MULTICAST;
+    }        
+    
+    if (discard_type != BCM_PORT_DISCARD_NONE)
+    {
+        for(ii=0; ii<p_flow_elm->num_pon; ii++)
+        {
+            if(p_flow_elm->pon_port[ii] == 0)
+            {
+                /* if PON LIF is deleted, then continue to the next pon */
+                continue;
+            }
+            rv = bcm_port_discard_set(p_flow_elm->device, p_flow_elm->pon_port[ii], discard_type);
+            if (rv != BCM_E_NONE)
+            {
+                /* mark an error, but continue */
+                BCM_LOG(ERROR, log_id_sw_util, "Error, bcm_port_discard_set failed %d on pon 0x%x\n", rv, p_flow_elm->pon_port[ii]);         
+                ret = BCM_ERR_INTERNAL;                      
+            }                 
+        }
+        if (BCM_ERR_OK == ret)
+        {
+            if( p_flow->key.flow_type == BCMBAL_FLOW_TYPE_DOWNSTREAM)
+            {
+                p_flow_elm->type &= ~BAL_SW_FLOW_TYPE_DOWNSTREAM;
+            }  
+            else if (p_flow->key.flow_type == BCMBAL_FLOW_TYPE_UPSTREAM)
+            {  
+                p_flow_elm->type &= ~BAL_SW_FLOW_TYPE_UPSTREAM;                    
+            }
+            BCM_LOG(INFO, log_id_sw_util, " Success remove flow %d with type %d\n", p_flow->key.flow_id, p_flow->key.flow_type);
+        }
+    }
+    /* remove the flow from the list if everything is cleanup */
+    if(BAL_SW_FLOW_TYPE_NONE == p_flow_elm->type) 
+    {
+        ret = bal_sw_util_dpp_flow_remove_int(p_flow_elm);
+    }
+   
+    return ret;
+}
+
+
+
+/*******************************
+ *  Helper routines below
+ *******************************/
+/**
+ * @brief Helper routine to reverse a flow i.e. an upstream flow is made a downstream flow
+ * and vice versa
+ *
+ * @param p_flow A pointer to the original flow
+ * @param p_flow_rev A pointer to the reversed flow
+ * @return error code
+ *
+ * @note for now it assumes an untagged or single tagged vlan flow with single vlan tag classificiation
+ */
+static bcmos_errno bal_sw_util_reverse_flow_create(bcmbal_flow_cfg *p_flow, bcmbal_flow_cfg *p_flow_rev)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+
+    if ((p_flow == NULL) || (p_flow_rev == NULL))
+    {
+        return BCM_ERR_INTERNAL;
+    }
+
+    /* reverse parameters in flow */
+    memcpy(p_flow_rev, p_flow, sizeof(bcmbal_flow_cfg));
+
+    p_flow_rev->key.flow_type = (p_flow->key.flow_type == BCMBAL_FLOW_TYPE_UPSTREAM ?
+        BCMBAL_FLOW_TYPE_DOWNSTREAM : BCMBAL_FLOW_TYPE_UPSTREAM);
+    
+    if(BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, dst_mac))
+    {
+        BCMBAL_ATTRIBUTE_PROP_SET(&p_flow_rev->data.classifier, classifier, src_mac, p_flow->data.classifier.dst_mac);        
+    }
+    else /* clear the src_mac presence mask in the reverse flow */
+    {
+        BCMBAL_ATTRIBUTE_PROP_CLEAR(&p_flow_rev->data.classifier, classifier, src_mac);
+    }
+    
+    if(BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, src_mac))
+    {
+        BCMBAL_ATTRIBUTE_PROP_SET(&p_flow_rev->data.classifier, classifier, dst_mac, p_flow->data.classifier.src_mac);        
+    }
+    else /* clear the dst_mac presence mask in the reverse flow */
+    {
+        BCMBAL_ATTRIBUTE_PROP_CLEAR(&p_flow_rev->data.classifier, classifier, dst_mac);
+    }
+
+    if(BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, dst_port))
+    {
+        BCMBAL_ATTRIBUTE_PROP_SET(&p_flow_rev->data.classifier, classifier, src_port, p_flow->data.classifier.dst_port);        
+    }
+    else /* clear the src_port presence mask in the reverse flow */
+    {
+        BCMBAL_ATTRIBUTE_PROP_CLEAR(&p_flow_rev->data.classifier, classifier, src_port);
+    }
+    
+    if(BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, src_port))
+    {
+        BCMBAL_ATTRIBUTE_PROP_SET(&p_flow_rev->data.classifier, classifier, dst_port, p_flow->data.classifier.src_port);        
+    } 
+    else /* clear the dst_port presence mask in the reverse flow */
+    {
+        BCMBAL_ATTRIBUTE_PROP_CLEAR(&p_flow_rev->data.classifier, classifier, dst_port);
+    }
+       
+    if(BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, dst_ip))
+    {
+        BCMBAL_ATTRIBUTE_PROP_SET(&p_flow_rev->data.classifier, classifier, src_ip, p_flow->data.classifier.dst_ip);        
+    }
+    else /* clear the src_ip presence mask in the reverse flow */
+    {
+        BCMBAL_ATTRIBUTE_PROP_CLEAR(&p_flow_rev->data.classifier, classifier, src_ip);
+    }
+    
+    if(BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, src_ip))
+    {
+        BCMBAL_ATTRIBUTE_PROP_SET(&p_flow_rev->data.classifier, classifier, dst_ip, p_flow->data.classifier.src_ip);        
+    }
+    else /* clear the dst_ip presence mask in the reverse flow */
+    {
+        BCMBAL_ATTRIBUTE_PROP_CLEAR(&p_flow_rev->data.classifier, classifier, dst_ip);
+    }
+        
+
+    if (BCMBAL_ACTION_CMD_ID_IS_SET(&(p_flow->data.action), BCMBAL_ACTION_CMD_ID_ADD_OUTER_TAG))
+    {
+        BCMBAL_ACTION_CMD_ID_CLEAR(&(p_flow_rev->data.action), BCMBAL_ACTION_CMD_ID_ADD_OUTER_TAG);
+        BCMBAL_ACTION_CMD_ID_SET(&(p_flow_rev->data.action),  BCMBAL_ACTION_CMD_ID_REMOVE_OUTER_TAG);
+
+        /* remove o_vid from action */       
+        BCMBAL_ATTRIBUTE_PROP_CLEAR(&p_flow_rev->data.action, action, o_vid);
+        
+        switch(p_flow->data.classifier.pkt_tag_type)
+        {
+            case BCMBAL_PKT_TAG_TYPE_UNTAGGED:
+                /* ADD on untagged packet result to single tagged on revert direction */
+                p_flow_rev->data.classifier.pkt_tag_type = BCMBAL_PKT_TAG_TYPE_SINGLE_TAG;
+                BCMBAL_ATTRIBUTE_PROP_SET(&p_flow_rev->data.classifier, classifier, o_vid, p_flow->data.action.o_vid);
+                break;
+            case BCMBAL_PKT_TAG_TYPE_SINGLE_TAG:
+                /* ADD on single tagged packet result to double tagged on revert direction */
+                p_flow_rev->data.classifier.pkt_tag_type = BCMBAL_PKT_TAG_TYPE_DOUBLE_TAG;
+                p_flow_rev->data.classifier.o_vid = p_flow->data.action.o_vid;
+                BCMBAL_ATTRIBUTE_PROP_SET(&p_flow_rev->data.classifier, classifier, i_vid, p_flow->data.classifier.o_vid);
+                break;
+            case BCMBAL_PKT_TAG_TYPE_DOUBLE_TAG:
+            default:
+                /* should not reach here */
+            break;                    
+        }                        
+    }
+    else if (BCMBAL_ACTION_CMD_ID_IS_SET(&(p_flow->data.action),  BCMBAL_ACTION_CMD_ID_REMOVE_OUTER_TAG)) 
+    {
+        BCMBAL_ACTION_CMD_ID_CLEAR(&(p_flow_rev->data.action), BCMBAL_ACTION_CMD_ID_REMOVE_OUTER_TAG);
+        BCMBAL_ACTION_CMD_ID_SET(&(p_flow_rev->data.action),  BCMBAL_ACTION_CMD_ID_ADD_OUTER_TAG);
+
+        /* add o_vid to action */        
+        BCMBAL_ATTRIBUTE_PROP_SET(&p_flow_rev->data.action, action, o_vid, p_flow->data.classifier.o_vid);
+        switch(p_flow->data.classifier.pkt_tag_type)
+        {
+            case BCMBAL_PKT_TAG_TYPE_DOUBLE_TAG:
+                /* REMOVE on double tagged packet result to single tagged on revert direction */
+                p_flow_rev->data.classifier.pkt_tag_type = BCMBAL_PKT_TAG_TYPE_SINGLE_TAG;
+                p_flow_rev->data.classifier.o_vid = p_flow->data.classifier.i_vid;
+                BCMBAL_ATTRIBUTE_PROP_CLEAR(&p_flow_rev->data.classifier, classifier, i_vid);                
+                break;
+            case BCMBAL_PKT_TAG_TYPE_SINGLE_TAG:
+                /* REMOVE on single tagged packet result to untagged on revert direction */
+                p_flow_rev->data.classifier.pkt_tag_type = BCMBAL_PKT_TAG_TYPE_UNTAGGED;
+                BCMBAL_ATTRIBUTE_PROP_CLEAR(&p_flow_rev->data.classifier, classifier, o_vid); 
+                break;
+            case BCMBAL_PKT_TAG_TYPE_UNTAGGED:
+            default:
+                /* should not reach here */
+            break;                    
+        }  
+        /* if the remove classifier has tpid attribute, set it when ADD in reverse direction */
+        if(BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, o_tpid))
+        {
+              BCMBAL_ATTRIBUTE_PROP_SET(&p_flow_rev->data.action, action, o_tpid, p_flow->data.classifier.o_tpid);
+              BCMBAL_ATTRIBUTE_PROP_CLEAR(&p_flow_rev->data.classifier, classifier, o_tpid);
+        }			
+    }
+    else if (BCMBAL_ACTION_CMD_ID_IS_SET(&(p_flow->data.action),  BCMBAL_ACTION_CMD_ID_XLATE_OUTER_TAG)) 
+    {
+        /* swap output vid and classifier parameters */
+        p_flow_rev->data.action.o_vid = p_flow->data.classifier.o_vid; 
+        p_flow_rev->data.classifier.o_vid = p_flow->data.action.o_vid;
+    }
+    
+    if (BCMBAL_ACTION_CMD_ID_IS_SET(&(p_flow->data.action), BCMBAL_ACTION_CMD_ID_REMARK_PBITS))
+    {
+        /* swap output pbits and classifier parameters */
+        if(BCMOS_TRUE == BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, o_pbits))
+        {             
+            BCMBAL_ATTRIBUTE_PROP_SET(&p_flow_rev->data.action, action, o_pbits, p_flow->data.classifier.o_pbits);
+        }
+        else
+        {
+            /* if the pbits remark is for packets with any o_pibts, then there is no clear REVERSE operation.
+               Set the reverse to NO pbits action. i.e pbits is a passthrough
+             */           
+            BCMBAL_ATTRIBUTE_PROP_CLEAR(&p_flow_rev->data.action, action, o_pbits); 
+            BCMBAL_ACTION_CMD_ID_CLEAR(&(p_flow_rev->data.action), BCMBAL_ACTION_CMD_ID_REMARK_PBITS);            
+        }
+        
+        BCMBAL_ATTRIBUTE_PROP_SET(&p_flow_rev->data.classifier, classifier, o_pbits, p_flow->data.action.o_pbits);        
+    }
+    //else tbd 
+
+
+    return ret;
+}
+
+/**
+ * @brief Helper routine to compare two flows for symmetry
+ *
+ * @param p_flow A pointer to the original flow
+ * @param p_ref_flow A pointer to the reference flow
+ * @return TRUE or FALSE 
+ */
+bcmos_bool bal_sw_util_is_symmetry_flows(bcmbal_flow_cfg *p_flow, bcmbal_flow_cfg *p_ref_flow)
+{
+    bcmos_bool ret = BCMOS_TRUE;
+ 
+    /* compare the access interface */
+    if( BCMBAL_CFG_PROP_IS_SET(p_flow, flow, access_int_id) !=
+        BCMBAL_CFG_PROP_IS_SET(p_ref_flow, flow, access_int_id)  )
+    { 
+        BCM_LOG(INFO, log_id_sw_util, " access interface SET not the same for flow %d\n", p_flow->key.flow_id);                
+        ret = BCMOS_FALSE;
+    }
+    else
+    {
+        if( (BCMBAL_CFG_PROP_IS_SET(p_flow, flow, access_int_id) || BCMBAL_CFG_PROP_IS_SET(p_ref_flow, flow, access_int_id))  &&
+            (p_flow->data.access_int_id != p_ref_flow->data.access_int_id)   )
+        {
+            BCM_LOG(INFO, log_id_sw_util, " flow %d downstream/upstream access interface %d != %d \n", 
+                          p_flow->key.flow_id, p_flow->data.access_int_id, p_ref_flow->data.access_int_id );                
+            ret = BCMOS_FALSE;
+        }
+    }
+    /* compare the network interface */
+    if( BCMBAL_CFG_PROP_IS_SET(p_flow, flow, network_int_id) !=
+        BCMBAL_CFG_PROP_IS_SET(p_ref_flow, flow, network_int_id)  )
+    { 
+        BCM_LOG(INFO, log_id_sw_util, " network interface SET not the same for flow %d\n", p_flow->key.flow_id);                
+        ret = BCMOS_FALSE;
+    }
+    else
+    {
+        if( (BCMBAL_CFG_PROP_IS_SET(p_flow, flow, network_int_id) ||BCMBAL_CFG_PROP_IS_SET(p_ref_flow, flow, network_int_id))  &&
+            (p_flow->data.network_int_id != p_ref_flow->data.network_int_id)   )
+        {
+            BCM_LOG(INFO, log_id_sw_util, " flow %d downstream/upstream access interface %d != %d \n", 
+                          p_flow->key.flow_id, p_flow->data.network_int_id, p_ref_flow->data.network_int_id );                
+            ret = BCMOS_FALSE;
+        }
+    } 
+  
+    /* if there is no action for the flow, packet type and VIDs should be the same */    
+    /* compare the IPv4 addresses */
+    if(BCMOS_FALSE == BCMBAL_CFG_PROP_IS_SET(p_flow, flow, action)   &&
+       BCMOS_FALSE == BCMBAL_CFG_PROP_IS_SET(p_ref_flow, flow, action)) 
+    {
+        /* check packet type */
+        if( BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, pkt_tag_type) !=
+            BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_ref_flow->data.classifier, classifier, pkt_tag_type)  )
+        { 
+            BCM_LOG(INFO, log_id_sw_util, " packet type SET not the same for flow %d\n", p_flow->key.flow_id);                
+            ret = BCMOS_FALSE;
+        }
+        else
+        {
+            if( BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, pkt_tag_type)   &&
+                (p_flow->data.classifier.pkt_tag_type != p_ref_flow->data.classifier.pkt_tag_type)   )
+            {
+                BCM_LOG(INFO, log_id_sw_util, " flow %d downstream/upstream packet type %d != %d \n", 
+                              p_flow->key.flow_id, p_flow->data.classifier.pkt_tag_type, p_ref_flow->data.classifier.pkt_tag_type );                
+                ret = BCMOS_FALSE;
+            }
+        }
+        
+        /* check the outer VID */        
+        if( BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, o_vid) !=
+            BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_ref_flow->data.classifier, classifier, o_vid)  )
+        { 
+            BCM_LOG(INFO, log_id_sw_util, " outer vid SET not the same for flow %d\n", p_flow->key.flow_id);                
+            ret = BCMOS_FALSE;
+        }
+        else
+        {
+            if( BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, o_vid)   &&
+                (p_flow->data.classifier.o_vid != p_ref_flow->data.classifier.o_vid)   )
+            {
+                BCM_LOG(INFO, log_id_sw_util, " flow %d downstream/upstream outer vid %d != %d \n", 
+                              p_flow->key.flow_id, p_flow->data.classifier.o_vid, p_ref_flow->data.classifier.o_vid );                
+                ret = BCMOS_FALSE;
+            }
+        } 
+        /* check the inner VID */        
+        if( BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, i_vid) !=
+            BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_ref_flow->data.classifier, classifier, i_vid)  )
+        { 
+            BCM_LOG(INFO, log_id_sw_util, " inner vid SET not the same for flow %d\n", p_flow->key.flow_id);                
+            ret = BCMOS_FALSE;
+        }
+        else
+        {
+            if( BCMBAL_ATTRIBUTE_PROP_IS_SET(&p_flow->data.classifier, classifier, i_vid)   &&
+                (p_flow->data.classifier.i_vid != p_ref_flow->data.classifier.i_vid)   )
+            {
+                BCM_LOG(INFO, log_id_sw_util, " flow %d downstream/upstream inner vid %d != %d \n", 
+                              p_flow->key.flow_id, p_flow->data.classifier.i_vid, p_ref_flow->data.classifier.i_vid );                
+                ret = BCMOS_FALSE;
+            }
+        }            
+        
+    }
+    else  /* if there is an action - action for VID must be symmetrical */
+    {
+        if(BCMOS_TRUE == BCMBAL_ACTION_CMD_ID_IS_SET(&(p_flow->data.action), BCMBAL_ACTION_CMD_ID_ADD_OUTER_TAG) && 
+           BCMOS_FALSE == BCMBAL_ACTION_CMD_ID_IS_SET(&(p_ref_flow->data.action), BCMBAL_ACTION_CMD_ID_REMOVE_OUTER_TAG) )
+        {
+            BCM_LOG(INFO, log_id_sw_util, " flow %d downstream/upstream outer vlan action not symmetrical \n", p_flow->key.flow_id );                
+            ret = BCMOS_FALSE; 
+        }
+        if(BCMOS_TRUE == BCMBAL_ACTION_CMD_ID_IS_SET(&(p_flow->data.action), BCMBAL_ACTION_CMD_ID_REMOVE_OUTER_TAG) && 
+           BCMOS_FALSE == BCMBAL_ACTION_CMD_ID_IS_SET(&(p_ref_flow->data.action), BCMBAL_ACTION_CMD_ID_ADD_OUTER_TAG))
+        {
+            BCM_LOG(INFO, log_id_sw_util, " flow %d upstream/downstream outer vlan action not symmetrical \n", p_flow->key.flow_id );                
+            ret = BCMOS_FALSE; 
+        }
+        if(BCMBAL_ACTION_CMD_ID_IS_SET(&(p_flow->data.action), BCMBAL_ACTION_CMD_ID_XLATE_OUTER_TAG) != 
+           BCMBAL_ACTION_CMD_ID_IS_SET(&(p_ref_flow->data.action), BCMBAL_ACTION_CMD_ID_XLATE_OUTER_TAG))
+        {
+            BCM_LOG(INFO, log_id_sw_util, " flow %d upstream/downstream outer vlan translation not symmetrical \n", p_flow->key.flow_id );                
+            ret = BCMOS_FALSE; 
+        }   
+        
+    }    
+    
+    return ret;
+}
+   
+#endif /* #ifndef TEST_SW_UTIL_LOOPBACK */
+
+/*@}*/
+
diff --git a/bal_release/src/core/util/switch/dpp/bal_dpp_flow.h b/bal_release/src/core/util/switch/dpp/bal_dpp_flow.h
new file mode 100755
index 0000000..09bd8e5
--- /dev/null
+++ b/bal_release/src/core/util/switch/dpp/bal_dpp_flow.h
@@ -0,0 +1,54 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file bal_dpp_flow.h
+ *
+ * @brief Function Prototype for switch app flow functions for DPP 
+ *
+ * @ingroup switch_app
+ */
+
+#ifndef  _BAL_DPP_FLOW_H_
+#define  _BAL_DPP_FLOW_H_
+
+#include "bal_switch_util.h"
+#include "bal_switch_flow.h"
+
+/*@{*/
+
+bcmos_errno bal_sw_util_dpp_flow_add(bcmbal_iwf_mode iwf_mode, bcmbal_flow_cfg *p_flow);
+bcmos_errno bal_sw_util_dpp_flow_remove(bcmbal_iwf_mode iwf_mode, bcmbal_flow_cfg *p_flow);
+bcmos_errno bal_sw_util_dpp_flow_remove_int(bal_sw_flow *p_flow_elm);
+void        bal_sw_util_dpp_flow_init(void); 
+/*@}*/
+ 
+#endif
diff --git a/bal_release/src/core/util/switch/dpp/bal_dpp_group.c b/bal_release/src/core/util/switch/dpp/bal_dpp_group.c
new file mode 100644
index 0000000..05894fd
--- /dev/null
+++ b/bal_release/src/core/util/switch/dpp/bal_dpp_group.c
@@ -0,0 +1,706 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+ /**
+ * @file bal_dpp_group.c
+ * @brief BAL Switch util helper functions that handle group requests
+ * @addtogroup sw_util
+ */
+
+/*@{*/
+#include <bal_common.h>
+#include <bcm_dev_log.h>
+#include <bal_msg.h>
+#include <bal_utils_msg.h>
+#include "bcmos_errno.h"
+
+#ifndef TEST_SW_UTIL_LOOPBACK
+#include <bcm/types.h>
+#include <sal/core/libc.h>
+#ifndef sal_memset
+#define sal_memset memset
+#endif
+#include <bcm/port.h>
+#include <bcm/vlan.h>
+#include <bcm/error.h>
+#include <bcm/multicast.h>
+
+#include "bal_dpp_group.h"
+#include "bal_switch_acc_term.h"

+#include "bal_dpp_vswitch.h"
+

+

+
+/* A local link list to keep track of group list */
+TAILQ_HEAD(bal_sw_group_list_head, bal_sw_group_list) g_swutil_group_list;
+
+/**
+ * @brief The group list init function prepare a link list to keep track of 
+ *        multicast group in the switch util
+ *
+ * @return error code
+ */
+bcmos_errno bal_sw_util_dpp_group_list_init(void)
+{
+    TAILQ_INIT(&g_swutil_group_list);
+    return BCM_ERR_OK;
+}
+
+/**
+ * @brief The group list finish function release all resources allocated in the list
+ *
+ * @return error code
+ */
+bcmos_errno bal_sw_util_dpp_group_list_finish(void)
+{
+	bal_sw_group_list *current_entry, *p_temp_entry;
+
+    /* Free all the entries in the list */
+    TAILQ_FOREACH_SAFE(current_entry,
+                       &g_swutil_group_list,
+                       next_grp,
+                       p_temp_entry)
+    {
+        /* Remove it from the list */
+        TAILQ_REMOVE(&g_swutil_group_list, current_entry, next_grp);
+
+        bcmos_free(current_entry);
+    }
+
+    return BCM_ERR_OK;
+}
+
+/**
+ * @brief The group list search function by BAL group id
+ *
+ * @param grp_id the group id that need to match the entry in the list
+ * @return pointer to an element in the list, NULL if search failed
+ */
+bal_sw_group_list *bal_sw_util_dpp_group_list_get_by_id(uint32_t grp_id)
+{
+    bal_sw_group_list *p_entry, *p_temp;
+    
+    TAILQ_FOREACH_SAFE(p_entry, &g_swutil_group_list, next_grp, p_temp)
+    {       
+        if( p_entry->bal_grp_id == grp_id)
+        {
+            break;
+        }
+    }
+    /* if reach the end of the list, TAILQ_FOREACH_SAFE set the p_entry to NULL */
+    return p_entry;
+   
+}
+
+/*
+ * @brief The group list insert function
+ *
+ * @param entry  the group element to be added in the link list
+ * @return pointer to the newly inserted group in the list, NULL if operation failed 
+*/
+static bal_sw_group_list *bal_sw_util_group_list_insert(bal_sw_group_list entry)
+{
+    bal_sw_group_list *p_new_entry;
+
+    p_new_entry = bcmos_calloc(sizeof(bal_sw_group_list));
+    if(NULL == p_new_entry)
+    {
+        BCM_LOG(ERROR, log_id_sw_util, "GROUP list insert out of memory\n");
+        return NULL;
+    }
+    *p_new_entry = entry;
+    TAILQ_INSERT_TAIL(&g_swutil_group_list, p_new_entry, next_grp);
+    return p_new_entry;
+}
+
+/*
+ * @brief The group list remove function
+ *
+ * @param p_entry Pointer to the group element in the link list result from the search functions
+ * @return error code
+*/
+static bcmos_errno bal_sw_util_group_list_remove(bal_sw_group_list *p_entry)
+{
+    TAILQ_REMOVE(&g_swutil_group_list, p_entry, next_grp);
+    bcmos_free(p_entry);
+    return BCM_ERR_OK;
+}
+
+/**
+ * @brief The group list membership check function by port
+ *        Validate if interface/svervice_port is already a member 
+ *
+ * @param p_grp_port the interface that need to be matched in the list
+ * @param p_entry pointer to an entry in the group list
+ * @return index to the port member, -1 if not found
+ */
+static int bal_sw_util_dpp_group_list_membership_check(bal_sw_group_list *p_entry, bal_sw_group_port *p_grp_port)
+{
+    int i;
+    
+    if(p_entry == NULL)
+    {
+        BCM_LOG(ERROR, log_id_sw_util, "group membership check with NULL parameter\n");
+        return BCMOS_FALSE;
+    }
+    
+    for(i=0; i<p_entry->num_port; i++)
+    {
+        if(p_entry->port[i].port == p_grp_port->port &&
+           p_entry->port[i].svc_port == p_grp_port->svc_port)
+        {
+            p_grp_port->gport = p_entry->port[i].gport;
+            return i;
+        }
+    }
+    return -1;
+}
+
+/**
+ * @brief The group list membership remove function by port
+ *        remove interface/svervice_port from the group membership 
+ *
+ * @param grp_port the interface that need to be matched in the list
+ * @param p_entry pointer to an entry in the group list
+ * @return boolen TRUE or FALSE
+ */
+static bcmos_bool bal_sw_util_dpp_group_list_membership_rem(bal_sw_group_list *p_entry, bal_sw_group_port grp_port)
+{
+    int i, rv;
+    
+    if(p_entry == NULL)
+    {
+        BCM_LOG(ERROR, log_id_sw_util, "group membership remove with NULL parameter\n");
+        return BCMOS_FALSE;
+    }
+    
+    for(i=0; i<p_entry->num_port; i++)
+    {
+        if(p_entry->port[i].port == grp_port.port &&
+           p_entry->port[i].svc_port == grp_port.svc_port)
+        {
+            /* destroy the vlan port (i.e., PON LIF) */
+            if(p_entry->port[i].gport)
+            {
+                rv = bcm_vlan_port_destroy(p_entry->device, p_entry->port[i].gport);
+                if (rv != BCM_E_NONE)
+                {
+                    BCM_LOG(WARNING, log_id_sw_util, "Warning, GROUP:bcm_vlan_port_destroy pon %d failed %d\n", p_entry->port[i].gport, rv);  
+                    /* Likely a bug in the 6.5.4 release, ignore for now                
+                    return BCMOS_FALSE;  
+                     */
+                }
+                p_entry->port[i].gport = 0;
+            }
+            break;
+        }
+    }
+    
+    /* if can't find the port, just return OK */
+    if(i != p_entry->num_port)
+    {
+        /* pack the list */
+        bal_sw_group_port null_port={0};       
+        for(; i<p_entry->num_port-1; i++)
+        {
+            p_entry->port[i] = p_entry->port[i+1];
+        }
+        p_entry->port[i] = null_port;
+        p_entry->num_port--;
+    }
+       
+    return BCMOS_TRUE;
+}
+
+
+/**
+ * @brief The group create function create a multicast group that contains egress LIF. 
+ *        This group can later connects to virtual switch in multiple FLOWs.  
+ *        
+ *        The pointer of the created group will be returned
+ *  
+ * @param unit       switch device id 
+ * @param p_grp      a pointer to the multicast group definition
+ * 
+ * @return pointer to the group list entry, NULL if operation failed
+ */
+
+bal_sw_group_list *bal_sw_util_dpp_group_create(int unit, bcmbal_group_cfg *p_grp)
+{
+    bal_sw_group_list *p_grp_list, grp_list_elm;
+    int32_t multicast_id;

+    uint32_t svc_indx;
+    int rv, flags;
+    bal_sw_vsi_service *p_vsi_service;

+    
+    if(p_grp == NULL)
+    {
+        BCM_LOG(ERROR, log_id_sw_util, "group create with NULL parameter\n");
+        return NULL;
+    }
+    /* check group list */
+    p_grp_list = bal_sw_util_dpp_group_list_get_by_id(p_grp->key.group_id);
+    if(p_grp_list)
+    {
+        BCM_LOG(ERROR, log_id_sw_util, "group create with group id %d already existed\n", p_grp->key.group_id);
+        return NULL;
+    }
+    /* alloc an entry in the group list*/
+    memset(&grp_list_elm, 0, sizeof(bal_sw_group_list));
+    grp_list_elm.device = unit;
+    grp_list_elm.bal_grp_id = p_grp->key.group_id;
+    p_grp_list = bal_sw_util_group_list_insert(grp_list_elm);
+    if(p_grp_list == NULL)
+    {
+        BCM_LOG(ERROR, log_id_sw_util, "group create failed insert to group list\n");
+        return NULL;
+    }
+

+    /* create a vswitch with empty service, we need vsi to create the MC flooding group for egress */

+    p_vsi_service = bal_sw_util_dpp_vsi_service_create(unit, NULL, &svc_indx);

+    if(NULL == p_vsi_service)

+    {

+        BCM_LOG(ERROR, log_id_sw_util, "create vsi service for group failed \n");

+        bal_sw_util_group_list_remove(p_grp_list);

+        return NULL;        

+    }

+    

+    p_grp_list->p_vsi = p_vsi_service;

+    

+    multicast_id = p_vsi_service->vswitch + BAL_DPP_MC_OFFSET;

+    
+    rv = bcm_multicast_group_is_free(unit, multicast_id);
+    if (rv == BCM_E_EXISTS)
+    {
+        rv = bcm_multicast_destroy(unit, multicast_id);
+        if (rv != BCM_E_NONE)
+        {
+            BCM_LOG(ERROR, log_id_sw_util, "MC: bcm_multicast_destroy 0x%x failed %d \n", multicast_id, rv);
+            bal_sw_util_group_list_remove(p_grp_list);
+            return NULL;                
+        }
+    }
+    flags = BCM_MULTICAST_INGRESS_GROUP | BCM_MULTICAST_WITH_ID | BCM_MULTICAST_TYPE_L2;
+    rv = bcm_multicast_create(unit, flags, &multicast_id);
+    if (rv != BCM_E_NONE)
+    {
+       BCM_LOG(ERROR, log_id_sw_util, "MC: in bcm_multicast_create 0x%x w ingress failed %d \n", multicast_id, rv);
+       bal_sw_util_group_list_remove(p_grp_list);
+       
+       return NULL;           
+    }
+    else
+    {
+        BCM_LOG(INFO, log_id_sw_util, "MC: vswitch flood group 0x%x created\n", multicast_id);
+    }
+    
+    /* update the group list info */
+    p_grp_list->l2_grp_id = multicast_id;
+    return p_grp_list;
+}
+
+/**
+ * @brief The group add function add members to the multicast group.
+ *        In this function, gourp members are PON interfaces  
+ *       
+ * @param unit       switch device id 
+ * @param p_grp      a pointer to the multicast group definition
+ * 
+ * @return error code
+ */
+
+bcmos_errno bal_sw_util_dpp_group_add(int unit, bcmbal_group_cfg *p_grp)
+{
+    bal_sw_group_list *p_grp_list;
+    int i, pon, rv, indx; 
+    bcm_gport_t pon_gport;
+    bcmos_errno ret;
+    int pon_encap_id;
+    bcm_vlan_port_t vp;
+    uint32_t flood_grp;
+    
+    if(p_grp == NULL)
+    {
+        BCM_LOG(ERROR, log_id_sw_util, "group add with NULL parameter\n");
+        return BCM_ERR_PARM;
+    }
+    /* check if L2 group has been created */
+    p_grp_list = bal_sw_util_dpp_group_list_get_by_id(p_grp->key.group_id);
+    if(!p_grp_list)
+    {
+        BCM_LOG(INFO, log_id_sw_util, "group add will alloc a L2 MC group, group id %d \n", p_grp->key.group_id);
+        p_grp_list = bal_sw_util_dpp_group_create(unit, p_grp);
+        if(p_grp_list == NULL)
+        {
+            BCM_LOG(ERROR, log_id_sw_util, "group add failed create L2 Mc group\n");
+            return BCM_ERR_NORES;
+        }
+    } 
+
+    
+    ret = BCM_ERR_OK;
+       
+    for(i=0; i<p_grp->data.members.len; i++)
+    {
+        bcmbal_group_member_info *p_member = &p_grp->data.members.val[i];
+        bal_sw_group_port port_member;
+        
+        /* find the L2 logical interface number */
+        pon = bal_bcm_pon_inf_pbm_get(p_member->intf_id);
+        
+        /* check if interface is already a member in the group list */
+        port_member.port     = pon;
+        port_member.svc_port = p_member->svc_port_id;
+        if( -1 != bal_sw_util_dpp_group_list_membership_check(p_grp_list, &port_member))
+        {
+           BCM_LOG(INFO, log_id_sw_util, "pon interface %d with service port %d already a member\n",p_member->intf_id, p_member->svc_port_id);
+           continue;
+        }
+       
+        /* check if interface already has an entry in the group list */
+        port_member.port     = pon;
+        port_member.svc_port = 0;
+        indx = bal_sw_util_dpp_group_list_membership_check(p_grp_list, &port_member);
+        if( -1 == indx)
+        {
+            /* make sure there is still room in the group list for new member */
+            if(p_grp_list->num_port >= MAX_PON_PORT)
+            {
+               BCM_LOG(ERROR, log_id_sw_util,
+                        "Error, GROUP: Reach maximum number of membership in the group list\n");                  
+                ret = BCM_ERR_NORES;
+                break;           
+            }
+        }
+        /* if group has a owner, create a LIF for each member */  
+        if(p_grp->data.owner != BCMBAL_GROUP_OWNER_NONE)
+        {       
+           /* Map the tunnel ID to a PON channel OTM port */
+            rv = bcm_port_pon_tunnel_map_set(unit,
+                                             pon,
+                                             p_member->svc_port_id,
+                                             pon);
+            if (rv != BCM_E_NONE)
+            { 
+                BCM_LOG(ERROR, log_id_sw_util,
+                        "Error, GROUP:bcm_port_pon_tunnel_map_set on pon %d failed %d"
+                        " (have you chosen the correct intf_maptable?)\n", pon, rv);
+                ret = BCM_ERR_INTERNAL;
+                break;
+            }
+            
+            /* Create the pon LIF to be DS only  */
+            bcm_vlan_port_t_init(&vp);
+            
+            /* preserve any incoming packet vlan tags, if vlan actions are required, do it using egress translation */
+            vp.flags =  BCM_VLAN_PORT_OUTER_VLAN_PRESERVE  | BCM_VLAN_PORT_INNER_VLAN_PRESERVE;        
+            /* It is required to set the FEC flag so that the egress redirection action from the DS classification can 
+               select the correct PON LIF to forward the packet */
+            vp.flags |= BCM_VLAN_PORT_FORWARD_GROUP; 
+            
+            vp.criteria = BCM_VLAN_PORT_MATCH_PORT_TUNNEL;
+      
+            vp.port = pon;        
+            vp.match_tunnel_value = p_member->svc_port_id;
+            vp.egress_tunnel_value = p_member->svc_port_id;
+      
+            vp.vsi = 0; /* will be populated when the gport is added to service, using vswitch_port_add */
+           
+            /* Create the vlan port (i.e., PON LIF) */
+            rv = bcm_vlan_port_create(unit, &vp);
+            if (rv != BCM_E_NONE)
+            {
+                BCM_LOG(ERROR, log_id_sw_util, "Error, GROUP:bcm_vlan_port_create pon %d failed %d\n", pon, rv);         
+                ret = BCM_ERR_INTERNAL;
+                break;  
+            }
+            else
+            {
+                BCM_LOG(INFO, log_id_sw_util, "Info, GROUP:bcm_vlan_port_create pon %d with tunnel %d success\n", pon, p_member->svc_port_id); 
+            }
+     
+            pon_gport = vp.vlan_port_id;
+            rv = bcm_port_discard_set(unit, pon_gport, BCM_PORT_DISCARD_INGRESS);
+            if (rv != BCM_E_NONE)
+            {
+                BCM_LOG(ERROR, log_id_sw_util, "Error, GROUP:bcm_port_discard_set on pon %d failed %d\n", pon, rv);         
+                ret = BCM_ERR_INTERNAL;
+                break;  
+            }
+            /* select the flooding group */
+            if(p_grp->data.owner == BCMBAL_GROUP_OWNER_MULTICAST)
+            {
+                flood_grp = p_grp_list->l2_grp_id;
+            }
+            else
+            {
+                flood_grp = (p_grp_list->p_vsi)->ds_flood_grp_id;
+            }
+            /* join the L2 multicast group */
+            rv = bcm_multicast_vlan_encap_get(unit, flood_grp, pon, pon_gport, &pon_encap_id);
+            if (rv != BCM_E_NONE)
+            {
+                BCM_LOG(ERROR, log_id_sw_util, "Error, GROUP:bcm_vlan_encap_get on pon %d failed %d\n", pon, rv);         
+                ret = BCM_ERR_INTERNAL;      
+                break;
+            }
+            rv = bcm_multicast_ingress_add(unit, flood_grp, pon, pon_encap_id);
+            if (rv != BCM_E_NONE)
+            {
+                BCM_LOG(ERROR, log_id_sw_util, "Error, GROUP:bcm_multicast_ingress_add on pon %d failed %d\n", pon, rv);         
+                ret = BCM_ERR_INTERNAL;          
+                break;
+            }
+            
+            BCM_LOG(INFO, log_id_sw_util, "Info, GROUP:pon %d join l2 mc group 0x%x success\n", pon, flood_grp); 
+            /* update the group list membership */
+            port_member.gport = pon_gport;
+        }
+        else
+        {
+            port_member.gport = 0;
+        }
+        p_grp_list->port[p_grp_list->num_port] = port_member;
+        p_grp_list->num_port++;
+        
+    }
+    
+   
+    return ret;     
+}
+
+
+/**
+ * @brief The group remove function remove members from the multicast group.
+ *        In this function, group members are PON interfaces  
+ *       
+ * @param unit       switch device id 
+ * @param p_grp      a pointer to the multicast group definition
+ * 
+ * @return error code
+ */
+
+bcmos_errno bal_sw_util_dpp_group_rem(int unit, bcmbal_group_cfg *p_grp)
+{
+    bal_sw_group_list *p_grp_list;
+    int i, pon, rv; 
+    bcmos_errno ret;
+    int pon_encap_id;
+    
+    if(p_grp == NULL)
+    {
+        BCM_LOG(ERROR, log_id_sw_util, "group remove with NULL parameter\n");
+        return BCM_ERR_PARM;
+    }
+    /* check if L2 group has been created */
+    p_grp_list = bal_sw_util_dpp_group_list_get_by_id(p_grp->key.group_id);
+    if(!p_grp_list)
+    {
+        BCM_LOG(ERROR, log_id_sw_util, "group remove can not find L2 Mc group %d\n", p_grp->key.group_id);
+        return BCM_ERR_INTERNAL;
+    } 
+
+    /* remove LIF for each member */  
+    ret = BCM_ERR_OK;
+    for(i=0; i<p_grp->data.members.len; i++)
+    {
+        bcmbal_group_member_info *p_member = &p_grp->data.members.val[i];
+        bal_sw_group_port port_member;
+        
+        /* find the L2 logical interface number */
+        pon = bal_bcm_pon_inf_pbm_get(p_member->intf_id);
+        
+        /* check if interface is already removed from the group list */
+        port_member.port     = pon;
+        port_member.svc_port = p_member->svc_port_id;
+        if( -1 == bal_sw_util_dpp_group_list_membership_check(p_grp_list, &port_member))
+        {
+            BCM_LOG(INFO, log_id_sw_util, "pon interface %d with service port %d is not a member\n",p_member->intf_id, p_member->svc_port_id);
+            continue;
+        }
+        
+        /* if the member has a LIF assigned, remove it from the switch multicast group */
+        if(port_member.gport)
+        {
+            /* leave the L2 multicast group */        
+             rv = bcm_multicast_vlan_encap_get(unit, p_grp_list->l2_grp_id, pon, port_member.gport, &pon_encap_id);
+            if (rv != BCM_E_NONE)
+            {
+                BCM_LOG(ERROR, log_id_sw_util, "Error, GROUP:bcm_vlan_encap_get on pon %d failed %d\n", pon, rv);         
+                ret = BCM_ERR_INTERNAL;      
+                break;
+            }
+            rv = bcm_multicast_ingress_delete(unit, p_grp_list->l2_grp_id, pon, pon_encap_id);
+            if (rv != BCM_E_NONE)
+            {
+                BCM_LOG(ERROR, log_id_sw_util, "Error, GROUP:bcm_multicast_ingress_delete on pon %d failed %d\n", pon, rv);         
+                ret = BCM_ERR_INTERNAL;          
+                break;
+            }
+        }
+        if( BCMOS_FALSE == bal_sw_util_dpp_group_list_membership_rem(p_grp_list, port_member))
+        {
+            BCM_LOG(INFO, log_id_sw_util, "pon interface %d with service port %d membership remove failed\n",p_member->intf_id, p_member->svc_port_id);
+            ret = BCM_ERR_INTERNAL;
+            break;  
+        }  
+    }
+  
+    return ret;     
+}
+
+/**
+ * @brief The group set function replace members from the multicast group.
+ *        In this function, group members are PON interfaces  
+ *       
+ * @param unit       switch device id 
+ * @param p_grp      a pointer to the multicast group definition
+ * 
+ * @return error code
+ */
+
+bcmos_errno bal_sw_util_dpp_group_set(int unit, bcmbal_group_cfg *p_grp)
+{
+    bal_sw_group_list *p_grp_list;
+    bcmos_errno ret = BCM_ERR_OK;
+    int pon_encap_id;
+    
+    if(p_grp == NULL)
+    {
+        BCM_LOG(ERROR, log_id_sw_util, "group replace with NULL parameter\n");
+        return BCM_ERR_PARM;
+    }
+    /* check if L2 group has been created */
+    p_grp_list = bal_sw_util_dpp_group_list_get_by_id(p_grp->key.group_id);
+    if(!p_grp_list)
+    {
+        /* mark it OK to create group at the end */
+        ret = BCM_ERR_OK;
+    } 
+    else if(p_grp_list->num_port)
+    {
+        /* remove all members from the group */
+        do
+        {
+            if( p_grp_list->port[0].gport)
+            {
+                        /* leave the L2 multicast group */        
+                if (BCM_E_NONE != bcm_multicast_vlan_encap_get(unit, p_grp_list->l2_grp_id, p_grp_list->port[0].port, p_grp_list->port[0].gport, &pon_encap_id))
+                {
+                    BCM_LOG(ERROR, log_id_sw_util, "Error, GROUP:bcm_vlan_encap_get on pon %d failed\n", p_grp_list->port[0].port);         
+                    ret = BCM_ERR_INTERNAL;      
+                    break;
+                }
+                if (BCM_E_NONE != bcm_multicast_ingress_delete(unit, p_grp_list->l2_grp_id, p_grp_list->port[0].port, pon_encap_id))
+                {
+                    BCM_LOG(ERROR, log_id_sw_util, "Error, GROUP:bcm_multicast_ingress_delete on pon %d failed\n", p_grp_list->port[0].port);         
+                    ret = BCM_ERR_INTERNAL;          
+                    break;
+                }
+            }
+            if( BCMOS_FALSE == bal_sw_util_dpp_group_list_membership_rem(p_grp_list, p_grp_list->port[0]))
+            {          
+                BCM_LOG(ERROR, log_id_sw_util, "group set fail to remove existing member interface %d\n",p_grp_list->port[0].port );
+                ret = BCM_ERR_INTERNAL;
+                break;                
+            }      
+        }while(p_grp_list->num_port);
+    }
+  
+    if(ret == BCM_ERR_OK)
+    {
+        /* create/add the group */
+        return bal_sw_util_dpp_group_add(unit, p_grp);
+    }
+    return ret;     
+}
+
+/**
+ * @brief The group destroy function free up a multicast group.
+ *        The group will be removed from the group list. 
+ *        All L2 resources accociated with the group will be free.         
+ *  
+ * @param unit       switch device id 
+ * @param p_grp      a pointer to the multicast group definition
+ * 
+ * @return error code
+ */
+
+bcmos_errno bal_sw_util_dpp_group_destroy(int unit, bcmbal_group_cfg *p_grp)
+{
+    bal_sw_group_list *p_grp_list;
+    int rv;
+    bcmos_errno ret;
+    
+    if(p_grp == NULL)
+    {
+        BCM_LOG(ERROR, log_id_sw_util, "group destroy with NULL parameter\n");
+        return BCM_ERR_PARM;
+    }
+    /* check group list */
+    p_grp_list = bal_sw_util_dpp_group_list_get_by_id(p_grp->key.group_id);
+    if(!p_grp_list)
+    {
+        BCM_LOG(INFO, log_id_sw_util, "group destroy with group id %d does not existed\n", p_grp->key.group_id);
+        return BCM_ERR_OK;
+    }
+    /* can't destroy if any flow is still reference it */
+    if(p_grp_list->use_count)
+    {
+        BCM_LOG(WARNING, log_id_sw_util, "group destroy with group id %d is busy\n", p_grp->key.group_id);
+        return BCM_ERR_INVALID_OP;
+    }
+    
+    /* Do our best to clean up */
+    /* free resources used by all members */
+    ret = bal_sw_util_dpp_group_rem(unit, p_grp);
+    if (ret != BCM_ERR_OK)
+    {
+       BCM_LOG(ERROR, log_id_sw_util, "MC:  destroy group 0x%x failed to free members \n", p_grp_list->l2_grp_id);
+    }
+    
+    /* free the L2 multicast group */
+    rv = bcm_multicast_destroy(unit, p_grp_list->l2_grp_id);
+    if (rv != BCM_E_NONE)
+    {
+       BCM_LOG(ERROR, log_id_sw_util, "MC: in bcm_multicast_destroy 0x%x failed %d \n", p_grp_list->l2_grp_id, rv);
+    }
+    
+    /* clean up the vsi */

+    bal_sw_util_dpp_vsi_service_destroy(unit, p_grp_list->p_vsi);

+    /* remove from the list */
+    bal_sw_util_group_list_remove(p_grp_list);
+  
+    return BCM_ERR_OK;
+}
+
+#endif /* LOOPBACK */
+/*@}*/
diff --git a/bal_release/src/core/util/switch/dpp/bal_dpp_group.h b/bal_release/src/core/util/switch/dpp/bal_dpp_group.h
new file mode 100644
index 0000000..9d557fe
--- /dev/null
+++ b/bal_release/src/core/util/switch/dpp/bal_dpp_group.h
@@ -0,0 +1,80 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+ /**
+ * @file bal_dpp_group.h
+ * @brief BAL Switch util helper functions prototype
+ * @addtogroup sw_util
+ */
+#ifndef _BAL_DPP_GROUP_H_
+#define _BAL_DPP_GROUP_H_
+
+#include "bal_dpp_vswitch.h"
+#include "bal_switch_util.h"
+
+/*@{*/
+#ifndef TEST_SW_UTIL_LOOPBACK
+
+typedef struct bal_sw_group_port bal_sw_group_port;
+struct bal_sw_group_port
+{
+    uint32_t port;        /* group member physical port number */
+    uint32_t gport;       /* group member gport id, i.e resource reference in the switch */
+    uint32_t svc_port;    /* group member GEM id, in the PON world */
+};
+
+
+typedef struct bal_sw_group_list bal_sw_group_list;
+struct bal_sw_group_list
+{
+    uint32_t device;                /* switch device id where the group applied */
+    uint32_t bal_grp_id;            /* id reference in BAL */
+    uint32_t num_port;              /* number of the member */
+    bal_sw_group_port port[MAX_PON_PORT];  /* member info structure */
+    uint32_t l2_grp_id;             /* multicast id in L2 table */
+    uint32_t use_count;             /* number of flows that reference this group */
+    bal_sw_vsi_service *p_vsi;      /* vswitch service used by this GROUP */
+    TAILQ_ENTRY(bal_sw_group_list) next_grp;
+};
+
+
+extern bcmos_errno bal_sw_util_dpp_group_list_init(void);
+extern bcmos_errno bal_sw_util_dpp_group_list_finish(void);
+extern bal_sw_group_list *bal_sw_util_dpp_group_list_get_by_id(uint32_t grp_id);
+extern bal_sw_group_list *bal_sw_util_dpp_group_create(int unit, bcmbal_group_cfg *p_grp);
+extern bcmos_errno bal_sw_util_dpp_group_destroy(int unit, bcmbal_group_cfg *p_grp);
+extern bcmos_errno bal_sw_util_dpp_group_set(int unit, bcmbal_group_cfg *p_grp);
+extern bcmos_errno bal_sw_util_dpp_group_rem(int unit, bcmbal_group_cfg *p_grp);
+extern bcmos_errno bal_sw_util_dpp_group_add(int unit, bcmbal_group_cfg *p_grp);
+
+#endif /* TEST_SW_UTIL_LOOPBACK */
+/*@}*/
+#endif
diff --git a/bal_release/src/core/util/switch/dpp/bal_dpp_interface.c b/bal_release/src/core/util/switch/dpp/bal_dpp_interface.c
new file mode 100644
index 0000000..f1433a3
--- /dev/null
+++ b/bal_release/src/core/util/switch/dpp/bal_dpp_interface.c
@@ -0,0 +1,127 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *
+ *  :>
+ *
+ *****************************************************************************/
+
+#ifndef TEST_SW_UTIL_LOOPBACK
+
+#include <bal_common.h>
+#include <bal_core.h>
+#include <bcm_dev_log.h>
+#include <bal_msg.h>
+#include "bal_switch_acc_term.h"
+#include "bal_switch_util.h"
+#include "bal_dpp_interface.h"
+
+#include <bcm/types.h>
+#include <bcm/port.h>
+
+/**
+ * @file bal_dpp_interface.c
+ * @brief BAL Switch util functions that handle interface requests on DUNE PACKET PROCESSOR
+ * @addtogroup sw_util
+ *
+ */
+
+/*@{*/
+
+
+/**
+ * @brief Set up pon interface with DPP
+ *
+ * This routine is called by sw_util_interface_set in the BAL core
+ * to execute DPP specific API for pon interface request
+ *
+ * @param p_interface_inst   Pointer to interface instance
+ * @param opt_type           UP/DOWN/RESTART the interface
+ * @return bcmos_errno
+ */
+bcmos_errno bal_sw_util_dpp_interface_set(acc_term_interface *p_interface_inst, bal_util_oper_if opt_type )
+{
+     bcmos_errno ret = BCM_ERR_OK;
+     int      rc = 0;
+     bcmbal_interface_key intf_key = p_interface_inst->api_req_int_obj_info.key;
+     int unit, port;
+
+     BCM_LOG(INFO, log_id_sw_util, " DPP - Got a interface SET: intf_type: %s, intf_id: %d, opt_type: %s\n",
+             (intf_key.intf_type == BCMBAL_INTF_TYPE_PON ? "PON":"NNI"),
+             intf_key.intf_id,
+             (opt_type == BAL_UTIL_OPER_IF_DOWN ? "DOWN":"UP"));
+
+     /* based on interface type get the device number and physical port number from associated table */
+     switch(intf_key.intf_type)
+     {
+         case BCMBAL_INTF_TYPE_PON:
+             unit = bal_bcm_pon_inf_dev_get(intf_key.intf_id);
+             port = bal_bcm_pon_inf_pbm_get(intf_key.intf_id);
+         break;
+         case BCMBAL_INTF_TYPE_NNI:
+             unit = bal_bcm_net_inf_dev_get(intf_key.intf_id);
+             port = bal_bcm_net_inf_pbm_get(intf_key.intf_id);
+         break;
+         default:
+             BCM_LOG(ERROR, log_id_sw_util, "Error, Unrecognized interface type %d\n", intf_key.intf_type);
+             return BCM_ERR_INTERNAL;
+         break;
+     }
+
+     switch (opt_type)
+     {
+         case BAL_UTIL_OPER_IF_DOWN:
+             rc = bcm_port_enable_set(unit, port, 0);
+         break;
+         case BAL_UTIL_OPER_IF_UP:
+         default:
+             /* disable */
+             rc = bcm_port_enable_set(unit, port, 0);
+             /* sleep 300 ms */
+             usleep(300000);
+             /* enable */
+             rc = bcm_port_enable_set(unit, port, 1);
+             /* Enable auto-negotiation if necessary */
+             if (intf_key.intf_type == BCMBAL_INTF_TYPE_NNI &&
+                 bcmbal_is_nni_autoneg_on(intf_key.intf_id))
+             {
+                 /* sleep 400 ms */
+                 usleep(400000);
+                 rc = rc ? rc : bcm_port_autoneg_set(unit, port, 1);
+                 BCM_LOG(INFO, log_id_sw_util, "Enabled autoneg on NNI unit:port %d:%d. rc=%d\n", unit, port, rc);
+             }
+         break;
+     }
+     if (rc)
+     {
+         BCM_LOG(ERROR, log_id_sw_util, "Error, bcm_port_enable_set for pon failed %d\n", rc);
+         ret = BCM_ERR_INTERNAL;
+     }
+     return ret;
+}
+
+/*@}*/
+#endif /* #ifndef TEST_SW_UTIL_LOOPBACK */
diff --git a/bal_release/src/core/util/switch/dpp/bal_dpp_interface.h b/bal_release/src/core/util/switch/dpp/bal_dpp_interface.h
new file mode 100644
index 0000000..36ae5f5
--- /dev/null
+++ b/bal_release/src/core/util/switch/dpp/bal_dpp_interface.h
@@ -0,0 +1,52 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file bal_dpp_interface.h
+ *
+ * @brief Function Prototype for switch app interface functions for DPP 
+ *
+ * @ingroup switch_app
+ */
+
+#ifndef  _BAL_DPP_INTERFACE_H_
+#define  _BAL_DPP_INTERFACE_H_
+
+#include "bal_switch_util.h"
+
+/*@{*/
+
+extern bcmos_errno bal_sw_util_dpp_interface_set(acc_term_interface *p_interface_inst, 
+                                                 bal_util_oper_if opt_type);
+ 
+/*@}*/
+ 
+#endif
diff --git a/bal_release/src/core/util/switch/dpp/bal_dpp_qos.c b/bal_release/src/core/util/switch/dpp/bal_dpp_qos.c
new file mode 100644
index 0000000..d667f2e
--- /dev/null
+++ b/bal_release/src/core/util/switch/dpp/bal_dpp_qos.c
@@ -0,0 +1,2390 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *
+ *  :>
+ *
+ *****************************************************************************/
+
+/**
+ * @file bal_dpp_qos.c
+ * @brief BAL Switch Util QoS configuration API
+ *
+ * This file contains the data structures and functions for
+ * configuring and managing Quality of Service (QoS) for services on
+ * DUNE Pack Processor (DPP).
+ *
+ * The scheduler setup is presented below. In addition to setting up
+ * the scheduling elements (SEs), the BAL_DPP_QOS configures an egress
+ * port shaper on each PON-side port, as well as a per-Access Link (GEMID/LLID)
+ * shaper to implement the downstream SLA for the subscriber service.
+ *
+ * Currently the BAL_DPP_QOS configures downstream QoS only (over the
+ * PON). Maple PON Link SLAs are used to implement upstream SLAs for
+ * the subscriber service in the BAL+Maple+DPP
+ * architecture. Additional upstream QoS for TM within DPP (over the
+ * NNIs) are considered an OEM System vendor responsibility. No
+ * implementation for upstream QoS is provided by the BAL_DPP_QOS.
+ *
+ *
+ * ********************************************************************************
+ *
+ */
+
+/*@{*/
+#ifndef TEST_SW_UTIL_LOOPBACK
+
+#define BCM_PETRA_SUPPORT 1    /* TBD - this should be define in the Makefile of the ~/dpp directory */
+#define LINK_ARAD_LIBRARIES 1  /* SDK Make.config - BCM_88650_A0 */
+#define LINK_PPD_LIBRARIES 1   /* SDK Make.config - BCM_88650_A0 */
+#define INCLUDE_L3 1           /* bcm/l3.h support */
+
+#include <stdint.h>            /* for compiler defined int64_t and uint64_t */
+
+#include "phymod_custom_config.h"  /* resolve PHYMOD_xxx in phymod_system.h */
+#include "bcm/debug.h"
+#include "bcm/error.h"
+#include "bcm/l2.h"
+#include "bcm/mpls.h"
+#include "bcm/qos.h"
+#include "bcm/vlan.h"
+#include "bcm/vswitch.h"
+#include <soc/mcm/allenum.h>
+#include "bcm/field.h"
+#include <bcm/cosq.h>
+#include <bcm/stack.h>
+#include <bcm_int/dpp/alloc_mngr.h>
+#include <bcm_int/dpp/qos.h>
+#include <bcm_int/dpp/error.h>
+#include <bcm_int/dpp/utils.h>
+#include <bcm_int/dpp/qos.h>
+#include <soc/dpp/PPD/ppd_api_eg_vlan_edit.h>
+
+#include "bcm_dev_log.h"
+#include "bcmos_errno.h"
+#include "bal_switch_acc_term.h"
+#include "bal_switch_flow.h"
+#include "bal_switch_util.h"
+#include "bal_dpp_qos.h"
+
+/** @brief A global QoS configuration context */
+bal_sw_qos_cfg g_bal_bcm_qos_cfg = {0};
+
+/** @brief Pointer to global QoS configuration context */
+bal_sw_qos_cfg *gp_bal_bcm_qos_cfg = &g_bal_bcm_qos_cfg;
+
+/**
+ *  @brief Number of traffic classes
+ */
+#define BAL_BCM_QOS_TC_NUM 8
+
+/**
+ *  @brief PCP/CoS mapping to internal Traffic Class (TC)
+ *
+ *  The mapping is as follows, where TC 0 maps to the lowest priority
+ *  and TC 3 maps to the highest priority.
+ *
+ *  PCP/DEI    TC
+ *  -------    --
+ *    0/0       0
+ *    0/1       0
+ *    1/0       0
+ *    1/1       0
+ *    2/0       1
+ *    2/1       1
+ *    3/0       1
+ *    3/1       1
+ *    4/0       2
+ *    4/1       2
+ *    5/0       2
+ *    5/1       2
+ *    6/0       3
+ *    6/1       3
+ *    7/0       3
+ *    7/1       3
+ *
+ *                                  PCP values:  0  1  2  3  4  5  6  7
+ */
+const int g_bal_bcm_qos_tc_map[BAL_BCM_QOS_TC_NUM] = {0, 0, 1, 1, 2, 2, 3, 3};
+
+/**************************************************************************/
+/**
+ // * @brief Initialize the QOS Flow/VOQ ID resource pool
+ *
+ * This function initializes the QOS Flow/VOQ ID resource pool, which
+ * consists of an attribute representing the next ID value to allocate
+ * and a table containing free voq ID values.
+ *
+ * The BAL_DPP_QOS assumes four queues are assigned to each access port (GEMID/LLID) in
+ * the downstream direction. Four queues per access port is the smallest
+ * value of queues per access port supported by the DPP device.
+ *
+ * Note, in the BAL_DPP_QOS, the qos Flow and VOQ ID are set to the
+ * same value.
+ *
+ * @param p_pool         Pointer to a voq ID pool
+ * @param init_value     The initial value to use during voq ID allocation
+ * @param max_value      The maximum value assigned by this pool
+ *
+ **************************************************************************/
+static void bal_sw_dpp_init_flow_id_pool(bal_sw_dpp_qos_flowid_pool *p_pool, uint32_t init_value, uint32_t max_value)
+{
+    /* Parameter checks */
+    BUG_ON(p_pool == NULL);
+
+    /* Initialize the data structure */
+    memset(p_pool, 0, sizeof(bal_sw_dpp_qos_flowid_pool));
+
+    /* Store the first value to be used as the voq ID */
+    p_pool->next_flow_id_value = init_value;
+
+    /* Store the maximum value assigned by the pool */
+    p_pool->max_value = max_value;
+
+    /* Initialize the free pool table */
+    TAILQ_INIT(&p_pool->free_table);
+}
+
+/**************************************************************************/
+/**
+ * @brief Clean up the qos Flow/VOQ ID resource pool
+ *
+ * This function cleans up the qos Flow/VOQ ID resource pool. It frees all
+ * of the memory used for bal_sw_dpp_qos_flowid_pool_entry_t's
+ *
+ * @param p_pool         Pointer to a voq ID pool
+ *
+ **************************************************************************/
+static void bal_sw_dpp_cleanup_flow_id_pool(bal_sw_dpp_qos_flowid_pool *p_pool)
+{
+    bal_sw_dpp_qos_flowid_pool_entry *p_pool_entry = NULL;
+
+    /* Parameter checks */
+    BUG_ON(p_pool == NULL);
+
+    while ((p_pool_entry = TAILQ_FIRST(&p_pool->free_table)) != NULL)
+    {
+        /* Remove the entry from the free pool table. */
+        TAILQ_REMOVE(&p_pool->free_table, p_pool_entry, entry);
+
+        /* Free the entry */
+        sal_free(p_pool_entry);
+    }
+}
+
+/**************************************************************************/
+/**
+ * @brief Allocate a qos Flow/VOQ ID from the pool
+ *
+ * This function allocates a Flow/VOQ ID from the resource pool. If
+ * there is a free voq ID entry in the free pool, the voq ID from
+ * the entry is used (i.e., returned to the caller) and the entry is
+ * freed. Otherwise, a new voq ID value is allocated and
+ * returned. This function returns an error if there are no voq IDs
+ * available.
+ *
+ * @param p_pool    Pointer to a voq ID pool
+ * @param p_flow_id  Pointer to the voq ID (value returned to caller)
+ *
+ * @return bcmos_errno
+ *
+ **************************************************************************/
+static bcmos_errno bal_sw_dpp_qos_alloc_flow_id(bal_sw_dpp_qos_flowid_pool *p_pool, int *p_flow_id)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bal_sw_dpp_qos_flowid_pool_entry *p_pool_entry = NULL;
+    uint32_t flow_id = 0;
+
+    /* Parameter checks */
+    BUG_ON(p_pool == NULL);
+    BUG_ON(p_flow_id == NULL);
+
+    /* Get an entry from the free pool */
+    p_pool_entry = TAILQ_FIRST(&p_pool->free_table);
+
+    /* If an entry exists from the free pool, use the voq ID from the
+     * entry.
+     */
+    if (p_pool_entry != NULL)
+    {
+        /* Remove the entry from the free pool. */
+        TAILQ_REMOVE(&p_pool->free_table, p_pool_entry, entry);
+
+        /* Use the voq ID from the entry */
+        flow_id = p_pool_entry->flow_id;
+
+        /* Free the entry */
+        sal_free(p_pool_entry);
+    }
+    else
+    {
+        /* Otherwise, use the next voq ID value (if available) */
+        if (p_pool->next_flow_id_value <= p_pool->max_value)
+        {
+            /* Use the next available voq ID value */
+            flow_id = p_pool->next_flow_id_value;
+
+            /* Increment the next_flow_id_value parameter */
+            p_pool->next_flow_id_value += BAL_BCM_QOS_QUEUES_PER_LLID;
+        }
+    }
+
+    /* Check to see if a voq ID value was available. */
+    if (flow_id == 0)
+    {
+        /* Error */
+        BCM_LOG(ERROR, log_id_sw_util, "%s(): No voq IDs available\n",
+                    __FUNCTION__);
+        *p_flow_id = 0;
+        rc = BCM_ERR_NORES;
+    }
+    else
+    {
+        *p_flow_id = flow_id;
+    }
+
+    return rc;
+}
+
+/**************************************************************************/
+/**
+ * @brief Free a qos Flow/VOQ ID and return it to the resource pool
+ *
+ * This function "frees" a Flow/VOQ ID and returns it to the free
+ * pool. The free pool consists of a linked list of voq ID values
+ * that are available for reuse. When a voq ID is freed, memory is
+ * allocated to store the free voq ID value, which is appended to the
+ * link list used to implement the free pool.
+ *
+ * @param p_pool    Pointer to a voq ID pool
+ * @param p_flow_id  Pointer to the voq ID to free
+ *
+ * @return bcmos_errno
+ *
+ **************************************************************************/
+static bcmos_errno bal_sw_dpp_qos_free_flow_id(bal_sw_dpp_qos_flowid_pool *p_pool, int *p_flow_id)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bal_sw_dpp_qos_flowid_pool_entry *p_pool_entry = NULL;
+
+    /* Parameter checks */
+    BUG_ON(p_pool == NULL);
+    BUG_ON(p_flow_id == NULL);
+
+    /* Make sure there is something to free */
+    if (*p_flow_id == 0)
+    {
+        /* Nothing to free - just return */
+        return BCM_ERR_OK;
+    }
+
+    /* Allocate memory for a free pool entry */
+    p_pool_entry = sal_alloc(sizeof(bal_sw_dpp_qos_flowid_pool_entry), "voq ID Free Pool Entry");
+    if (p_pool_entry == NULL)
+    {
+        /* Error */
+        BCM_LOG(ERROR, log_id_sw_util,
+                    "%s(): No memory for bal_sw_dpp_qos_flowid_pool_entry_t for voq ID %u\n",
+                    __FUNCTION__, *p_flow_id);
+
+        rc = BCM_ERR_NORES;
+    }
+    else
+    {
+        /* Initialize the entry */
+        memset(p_pool_entry, 0, sizeof(bal_sw_dpp_qos_flowid_pool_entry));
+
+        /* Store the voq ID */
+        p_pool_entry->flow_id = *p_flow_id;
+
+        /* Add the service entry to the table */
+        TAILQ_INSERT_TAIL(&p_pool->free_table, p_pool_entry, entry);
+
+        /* Clear the voq ID entry */
+        *p_flow_id = 0;
+    }
+
+    return rc;
+}
+
+/**************************************************************************/
+/**
+ * @brief Create the PCP and DEI to Traffic Class (TC) mapping
+ *
+ * This function creates the mapping from PCP/CoS and DEI bits in the
+ * frames received by DPP to the internal traffic class (TC) in
+ * DPP. The TC is used to determine the destination VOQ for the
+ * frame.
+ *
+ * Please see comments for @ref g_bal_bcm_qos_tc_map for a description of
+ * mapping.
+ *
+ * @param unit    SDK unit number
+ * @param p_tc_map  Pointer to PCP/DEI to TC map array
+ *
+ * @return bcmos_errno
+ *
+ **************************************************************************/
+static bcmos_errno bal_sw_dpp_qos_tc_map_create(int unit, const int *p_tc_map)
+{
+    bcm_error_t sdk_rc = BCM_E_NONE;
+    bcm_qos_map_t l2_in_map;
+    int pcp = 0;
+    int dei = 0;
+    int32_t qos_map_id;
+
+    /* Parameter checks */
+    BUG_ON(p_tc_map == NULL);
+
+    /* Create the TC map object */
+    sdk_rc = bcm_qos_map_create(unit, BCM_QOS_MAP_INGRESS, &qos_map_id);
+    if (sdk_rc != BCM_E_NONE)
+    {
+        /* Error */
+        BCM_LOG(ERROR, log_id_sw_util,
+                    "%s(): bcm_qos_map_create failed with %s\n",
+                    __FUNCTION__, bcm_errmsg(sdk_rc));
+
+        return BCM_ERR_INTERNAL;
+    }
+
+    /* Create a mapping for each PCP/CoS and DEI bit value. */
+    for (pcp = 0; pcp < BAL_BCM_QOS_TC_NUM; pcp++)
+    {
+        for (dei = 0; dei < 2; dei++)
+        {
+            bcm_qos_map_t_init(&l2_in_map);
+
+            /* Ingress PCP/CoS value */
+            l2_in_map.pkt_pri = pcp;
+
+            /* DEI Bit */
+            l2_in_map.pkt_cfi = dei;
+
+            /* Set internal priority for this ingress pri */
+            l2_in_map.int_pri = p_tc_map[pcp];
+
+            /* Set color for this ingress Priority  */
+            l2_in_map.color = bcmColorGreen;
+
+            sdk_rc = bcm_qos_map_add(unit, BCM_QOS_MAP_L2, &l2_in_map, qos_map_id);
+            if (sdk_rc != BCM_E_NONE)
+            {
+                /* Error */
+                BCM_LOG(ERROR, log_id_sw_util,
+                            "%s(): bcm_qos_map_add failed with %s, for pcp %d, dei %d\n",
+                            __FUNCTION__, bcm_errmsg(sdk_rc), pcp, dei);
+
+                return BCM_ERR_INTERNAL;
+            }
+        }
+    }
+
+    gp_bal_bcm_qos_cfg->qos_port_map_id = qos_map_id;
+
+    return BCM_ERR_OK;
+}
+
+/**************************************************************************/
+/**
+ * @brief Clean up the PCP and DEI to Traffic Class (TC) map
+ *
+ * @param unit  SDK unit number
+ *
+ **************************************************************************/
+static void bal_sw_dpp_qos_tc_map_cleanup(int unit)
+{
+    bcm_error_t sdk_rc = BCM_E_NONE;
+    bcm_qos_map_t l2_in_map;
+    int pcp = 0;
+    int dei = 0;
+
+    /* Delete all mapping entries */
+    for (pcp = 0; pcp < BAL_BCM_QOS_TC_NUM; pcp++)
+    {
+        for (dei = 0; dei < 2; dei++)
+        {
+            bcm_qos_map_t_init(&l2_in_map);
+
+            /* Ingress PCP/CoS value */
+            l2_in_map.pkt_pri = pcp;
+
+            /* DEI Bit */
+            l2_in_map.pkt_cfi = dei;
+
+            sdk_rc = bcm_qos_map_delete(unit, BCM_QOS_MAP_L2, &l2_in_map, gp_bal_bcm_qos_cfg->qos_port_map_id);
+            if (sdk_rc != BCM_E_NONE)
+            {
+                /* Error */
+                BCM_LOG(ERROR, log_id_sw_util,
+                            "%s(): bcm_qos_map_delete failed with %s, for pcp %d, dei %d\n",
+                            __FUNCTION__, bcm_errmsg(sdk_rc), pcp, dei);
+
+                /* Continue processing - don't halt because of errors during clearn up */
+            }
+        }
+    }
+
+    /* Delete the TC map object */
+    sdk_rc = bcm_qos_map_destroy(unit, gp_bal_bcm_qos_cfg->qos_port_map_id);
+    if (sdk_rc != BCM_E_NONE)
+    {
+        /* Error */
+        BCM_LOG(ERROR, log_id_sw_util,
+                    "%s(): bcm_qos_map_destroy failed with %s\n",
+                    __FUNCTION__, bcm_errmsg(sdk_rc));
+
+        /* Continue processing - don't halt because of errors during clearn up */
+    }
+}
+
+/**************************************************************************/
+/**
+ * @brief Initialize the BAL DPP QoS Module
+ *
+ * This function initializes the QoS module for the BAL BCM Switch Util.
+ * This function initializes the global QoS context, and
+ * sets up downstream scheduling hierarchy on each channelized
+ * PON-side port. Scheduling/QoS is applied to packets that egress the
+ * port.
+ *
+ * @param unit  SDK unit number
+ * @param pon_mode pon interface mode
+ *
+ * @return bcmos_errno
+ *
+ **************************************************************************/
+bcmos_errno bal_sw_dpp_qos_init(int unit, bal_swapp_port_map_indx pon_mode)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcm_error_t sdk_rc = BCM_E_NONE;
+    bal_sw_dpp_qos_sched_pon_chan pon_chan;
+    uint32_t port_rate, pri_channel_rate, sec_channel_rate;
+    int ii, port_num;
+
+    /* Initialization */
+    memset(gp_bal_bcm_qos_cfg, 0, sizeof(*gp_bal_bcm_qos_cfg));
+
+    do /* Exception Block Start */
+    {
+        rc = bal_sw_dpp_qos_tc_map_create(unit, g_bal_bcm_qos_tc_map);
+        if (rc != BCM_ERR_OK)
+        {
+            /* Error */
+            BCM_LOG(ERROR, log_id_sw_util,
+                        "Failed to create the default QoS TC map\n");
+
+            rc = BCM_ERR_INTERNAL;
+            break;
+        }
+
+        /* Get this module ID for this ARAD device. This is used by
+         * several of the bcm API calls during QoS setups.
+         */
+        sdk_rc = bcm_stk_modid_get(unit, &gp_bal_bcm_qos_cfg->mod_id);
+        if (sdk_rc != BCM_E_NONE)
+        {
+            /* Error */
+            BCM_LOG(ERROR, log_id_sw_util,
+                        "%s(): bcm_stk_modid_get failed with %s\n",
+                        __FUNCTION__, bcm_errmsg(sdk_rc));
+
+            rc = BCM_ERR_INTERNAL;
+            break;
+        }
+
+        /* set the port rate based on board type */
+        switch(pon_mode)
+        {
+            case BAL_SWAPP_PORT_MAP_GPON:
+            case BAL_SWAPP_PORT_MAP_GPON_V3:
+                port_rate = 2500000;  /* 2.5G */
+                pri_channel_rate = 2500000;  /* 2.5G */
+                sec_channel_rate = 0;
+                gp_bal_bcm_qos_cfg->num_channels_per_pon = 1;
+            break;
+            case BAL_SWAPP_PORT_MAP_EXP:
+            case BAL_SWAPP_PORT_MAP_EXP2:
+            case BAL_SWAPP_PORT_MAP_SVK4:
+                port_rate = 10000000;  /* 10G */
+                pri_channel_rate = 10000000;  /* 10G */
+                sec_channel_rate = 0;
+                gp_bal_bcm_qos_cfg->num_channels_per_pon = 1;
+            break;
+            case BAL_SWAPP_PORT_MAP_EPON_TDMA:
+                port_rate = BAL_BCM_QOS_DEFAULT_PORT_RATE;  /* 12.5G */
+                pri_channel_rate = BAL_BCM_QOS_DEFAULT_10G_CHAN_RATE;  /* 10.25G */
+                sec_channel_rate = BAL_BCM_QOS_DEFAULT_1G_CHAN_RATE; /* 2.25G */
+                gp_bal_bcm_qos_cfg->num_channels_per_pon = 2;
+            break;
+            case BAL_SWAPP_PORT_MAP_EPON_1G:
+                port_rate = 2500000;  /* 2.5G */
+                pri_channel_rate = BAL_BCM_QOS_DEFAULT_1G_CHAN_RATE;  /* 2.25G */
+                sec_channel_rate = 0;
+                gp_bal_bcm_qos_cfg->num_channels_per_pon = 1;
+            break;
+            case BAL_SWAPP_PORT_MAP_EPON_10G:
+                port_rate = BAL_BCM_QOS_DEFAULT_PORT_RATE;  /* 12.5G */
+                pri_channel_rate = BAL_BCM_QOS_DEFAULT_10G_CHAN_RATE;  /* 10.25G */
+                sec_channel_rate = 0;
+                gp_bal_bcm_qos_cfg->num_channels_per_pon = 1;
+            break;
+            default:
+                       /* Error */
+                BCM_LOG(ERROR, log_id_sw_util,
+                        "%s(): pon mode %d not supported\n",
+                        __FUNCTION__, pon_mode);
+
+                return BCM_ERR_INTERNAL;
+        }
+        /*
+         *  Initialize the egress scheduling for downstream QoS on each
+         *  PON-side port.
+         */
+        ii = 0;  /* Start with the first PON logical interface */
+        /* loop through all pon port, -1 indicate end of table */
+        while(-1 != (port_num = bal_bcm_pon_inf_pbm_get(ii)))
+        {
+            /*
+             * Default port settings
+             *
+             * Set the port shaper to rate based on physical layout on each board.
+             * On Epon, there are 2 channels on each port.
+             * The channel interface shapers are set to 10G and 2G for the 10G and 1G
+             * channels respectively. DPP will rely on flow control from
+             * Maple for back pressure.
+             */
+            bal_sw_dpp_qos_set_port_bandwidth(unit, port_num,
+                                      port_rate, BAL_BCM_QOS_DEFAULT_MAX_BURST);
+            bal_sw_dpp_qos_set_portchan_bandwidth(unit, port_num, BAL_BCM_SCHED_PON_CHAN_10G,
+                                      pri_channel_rate, BAL_BCM_QOS_DEFAULT_MAX_BURST);
+            if(gp_bal_bcm_qos_cfg->num_channels_per_pon > 1)
+            {
+                bal_sw_dpp_qos_set_portchan_bandwidth(unit, port_num, BAL_BCM_SCHED_PON_CHAN_1G,
+                                      sec_channel_rate, BAL_BCM_QOS_DEFAULT_MAX_BURST);
+            }
+            for (pon_chan = 0; pon_chan < gp_bal_bcm_qos_cfg->num_channels_per_pon; pon_chan++)
+            {
+                /* pass the logical port number - ii, to the port qos init function,
+                 *  the logical port number and the channel number will be mapped to
+                 *  packet process port number that used in qos configuration
+                 */
+                rc = bal_sw_dpp_port_qos_init(unit, ii, pon_chan);
+
+                if (rc != BCM_ERR_OK)
+                {
+                    /* Error */
+                    BCM_LOG(ERROR, log_id_sw_util,
+                                "QoS setup failed for port %u pon_chan %u\n",
+                                port_num, pon_chan);
+
+                    rc = BCM_ERR_INTERNAL;
+                    break;
+                }
+            }
+
+            /* Exception Block - check for errors from the previous loop */
+            if (rc != BCM_ERR_OK)
+            {
+                /* Error */
+                break;
+            }
+            ii++;
+        }
+
+        /* Check for errors */
+        if (rc != BCM_ERR_OK)
+        {
+            break;
+        }
+
+        /* Initialize the Flow/VOQ ID pools */
+        bal_sw_dpp_init_flow_id_pool(&gp_bal_bcm_qos_cfg->flow_id_pool_10g,
+                       DEFAULT_QOS_VOQ_BASE_10G,
+                       DEFAULT_QOS_VOQ_MAX_10G);
+
+        bal_sw_dpp_init_flow_id_pool(&gp_bal_bcm_qos_cfg->flow_id_pool_1g,
+                       DEFAULT_QOS_VOQ_BASE_1G,
+                       DEFAULT_QOS_VOQ_MAX_1G);
+
+    } while(0); /* Exception Block - End */
+
+    /* Check for errors */
+    if (rc != BCM_ERR_OK)
+    {
+        /* Failure */
+        BCM_LOG(ERROR, log_id_sw_util,
+                    "BAL BCM App not initialized, failed setting up the QoS module\n");
+
+        /* Cleanup */
+        bal_sw_dpp_qos_cleanup(unit);
+    }
+    else
+    {
+        /* Success */
+        BCM_LOG(INFO, log_id_sw_util,
+                    "Successfully initialized the QoS module\n");
+    }
+
+    return rc;
+}
+
+/**************************************************************************/
+/**
+ * @brief Cleanup the BAL BCM APP QoS Module
+ *
+ * @param unit  SDK unit number
+ *
+ **************************************************************************/
+void bal_sw_dpp_qos_cleanup(int unit)
+{
+    bcm_port_t port_num;
+    bal_sw_dpp_qos_sched_pon_chan pon_chan;
+    int ii;
+    /*
+     *  Cleanup the egress scheduling for downstream QoS on each
+     *  PON-side port.
+     */
+    ii = 0;  /* Start with the first PON logical interface */
+    /* loop through all pon port, -1 indicate end of table */
+    while(-1 != (port_num = bal_bcm_pon_inf_pbm_get(ii)))
+    {
+        /* Clean up each channelized port */
+        for (pon_chan = 0; pon_chan < gp_bal_bcm_qos_cfg->num_channels_per_pon; pon_chan++)
+        {
+            bal_sw_dpp_port_qos_cleanup(unit, ii, pon_chan);
+        }
+        ii++;
+    }
+
+    /* Clean up the TC map */
+    bal_sw_dpp_qos_tc_map_cleanup(unit);
+
+    /* Free memory that was used for the Flow/VOQ ID pools */
+    bal_sw_dpp_cleanup_flow_id_pool(&gp_bal_bcm_qos_cfg->flow_id_pool_10g);
+    bal_sw_dpp_cleanup_flow_id_pool(&gp_bal_bcm_qos_cfg->flow_id_pool_1g);
+}
+
+/**************************************************************************/
+/**
+ * @brief Configure the rate shaper for a PON port
+ *
+ * This function configures the rate shaper (i.e., rate limit) for a
+ * PON side port. The rate limit and maximum burst size is set to the
+ * value specified in the function call. The maximum burst size is
+ * only set for max_burst values greater than '0'.
+ *
+ * @param unit       SDK unit number
+ * @param pon_port   PON port number
+ * @param bandwidth  Shaper data rate in kbps
+ * @param max_burst   Shaper maximum burst size in bytes
+ *
+ * @return bcmos_errno
+ *
+ **************************************************************************/
+bcmos_errno bal_sw_dpp_qos_set_port_bandwidth(int unit, bcm_port_t pon_port,
+                                 uint32_t bandwidth, uint32_t max_burst)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcm_error_t sdk_rc = BCM_E_NONE;
+    bcm_gport_t e2e_pon_gport;
+    bcm_gport_t e2e_parent_gport;
+
+    /* Parameter checks */
+    BUG_ON(pon_port > BAL_BCM_MAX_PON_NUM);
+
+    /* Get the gport object for the E2E interface for the specified
+     * pon_port
+     */
+    BCM_COSQ_GPORT_E2E_PORT_SET(e2e_pon_gport, pon_port);
+
+    do /* Exception Block Start */
+    {
+        /*
+         * Get the gport for the E2E Interface
+         */
+        sdk_rc = bcm_fabric_port_get(unit,
+                                     e2e_pon_gport,
+                                     0,
+                                     &e2e_parent_gport);
+        if (sdk_rc != BCM_E_NONE)
+        {
+            /* Error */
+            BCM_LOG(ERROR, log_id_sw_util,
+                        "%s(): bcm_fabric_port_get for Egress Port failed with %s for pon %u\n",
+                        __FUNCTION__, bcm_errmsg(sdk_rc), pon_port);
+
+            rc = BCM_ERR_INTERNAL;
+            break;
+        }
+
+        /*
+         * Set rate on the E2E Interface
+         */
+        sdk_rc = bcm_cosq_gport_bandwidth_set(unit,
+                                              e2e_parent_gport,
+                                              0,
+                                              0,
+                                              bandwidth,
+                                              0);
+        if (sdk_rc != BCM_E_NONE)
+        {
+            /* Error */
+            BCM_LOG(ERROR, log_id_sw_util,
+                        "%s(): bcm_cosq_gport_bandwidth_set for Egress Port failed with %s for pon %u\n",
+                        __FUNCTION__, bcm_errmsg(sdk_rc), pon_port);
+
+            rc = BCM_ERR_INTERNAL;
+            break;
+        }
+
+        /*  Set the Burst */
+        if (max_burst > 0)
+        {
+            sdk_rc = bcm_cosq_control_set(unit,
+                                          e2e_parent_gport,
+                                          0,
+                                          bcmCosqControlBandwidthBurstMax,
+                                          max_burst);
+            if (sdk_rc != BCM_E_NONE)
+            {
+                /* Error */
+                BCM_LOG(ERROR, log_id_sw_util,
+                            "%s(): bcm_cosq_control_set for MaxBurst failed with %s for pon %u\n",
+                            __FUNCTION__, bcm_errmsg(sdk_rc), pon_port);
+
+                rc = BCM_ERR_INTERNAL;
+                break;
+            }
+        }
+
+    } while(0); /* Exception Block - End */
+
+    return rc;
+}
+
+/**************************************************************************/
+/**
+ * @brief Configure the rate shaper for a PON channel
+ *
+ * This function configures the rate shaper (i.e., rate limit) for a
+ * PON channel 10G. vs. 1G. The rate limit and maximum burst size is
+ * set to the value specified in the function call. The maximum burst
+ * size is only set for max_burst values greater than '0'.
+ *
+ * @param unit       SDK unit number
+ * @param pon_port   PON port number
+ * @param pon_chan    PON channel (10G vs. 1G)
+ * @param bandwidth  Shaper data rate in kbps
+ * @param max_burst   Shaper maximum burst size in bytes
+ *
+ * @return bcmos_errno
+ *
+ **************************************************************************/
+bcmos_errno bal_sw_dpp_qos_set_portchan_bandwidth(int unit, bcm_port_t pon_port,
+                                    bal_sw_dpp_qos_sched_pon_chan pon_chan,
+                                    uint32_t bandwidth, uint32_t max_burst)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcm_error_t sdk_rc = BCM_E_NONE;
+    bcm_port_t pp_port;
+    bcm_gport_t e2e_gport;
+    bcm_gport_t local_gport;
+    bcm_gport_t e2e_tc_gport;
+    bcm_gport_t local_tc_gport;
+    uint32_t adj_bandwidth;
+
+    /* Parameter checks */
+    BUG_ON(pon_port >  BAL_BCM_MAX_PON_NUM);
+    BUG_ON(pon_chan  >= BAL_BCM_SCHED_PON_CHAN_NUM);
+
+    /* Get the local port number for the specified device PON port number and channel */
+    pp_port = BAL_BCM_GET_PP_PORT(pon_port, pon_chan);
+
+    do /* Exception Block Start */
+    {
+        /* Apply a rate adjustment to the credit generator */
+        adj_bandwidth = bandwidth + ((uint32_t)(bandwidth * BAL_BCM_QOS_CREDIT_RATE_ADJ));
+
+        BCM_COSQ_GPORT_E2E_PORT_SET(e2e_gport, pp_port);
+        sdk_rc = bcm_cosq_gport_bandwidth_set(unit, e2e_gport, 0, 0, adj_bandwidth, 0);
+        if (sdk_rc != BCM_E_NONE)
+        {
+            /* Error */
+            BCM_LOG(ERROR, log_id_sw_util,
+                        "%s(): bcm_cosq_gport_bandwidth_set for e2e_gport failed with %s for pon %u chan %u pp_port %u\n",
+                        __FUNCTION__, bcm_errmsg(sdk_rc), pon_port, pon_chan, pp_port);
+
+            rc = BCM_ERR_INTERNAL;
+            break;
+        }
+
+        /* Apply a rate adjustment to the shaper */
+        adj_bandwidth = bandwidth + ((uint32_t)(bandwidth * BAL_BCM_QOS_SHAPER_RATE_ADJ));
+
+        BCM_GPORT_LOCAL_SET(local_gport, pp_port);
+        sdk_rc = bcm_cosq_gport_bandwidth_set(unit, local_gport, 0, 0, adj_bandwidth, 0);
+        if (sdk_rc != BCM_E_NONE)
+        {
+            /* Error */
+            BCM_LOG(ERROR, log_id_sw_util,
+                        "%s(): bcm_cosq_gport_bandwidth_set for local_gport failed with %s for pon %u chan %u pp_port %u\n",
+                        __FUNCTION__, bcm_errmsg(sdk_rc), pon_port, pon_chan, pp_port);
+
+            rc = BCM_ERR_INTERNAL;
+            break;
+        }
+
+        BCM_COSQ_GPORT_E2E_PORT_TC_SET(e2e_tc_gport, pp_port);
+        sdk_rc = bcm_cosq_gport_bandwidth_set(unit, e2e_tc_gport, 0, 0, bandwidth, 0);
+        if (sdk_rc != BCM_E_NONE)
+        {
+            /* Error */
+            BCM_LOG(ERROR, log_id_sw_util,
+                        "%s(): bcm_cosq_gport_bandwidth_set for e2e_tc_gport failed with %s for pon %u chan %u pp_port %u\n",
+                        __FUNCTION__, bcm_errmsg(sdk_rc), pon_port, pon_chan, pp_port);
+
+            rc = BCM_ERR_INTERNAL;
+            break;
+        }
+
+        BCM_COSQ_GPORT_PORT_TC_SET(local_tc_gport, pp_port);
+        sdk_rc = bcm_cosq_gport_bandwidth_set(unit, local_tc_gport, 0, 0, bandwidth, 0);
+        if (sdk_rc != BCM_E_NONE)
+        {
+            /* Error */
+            BCM_LOG(ERROR, log_id_sw_util,
+                        "%s(): bcm_cosq_gport_bandwidth_set for local_tc_gport failed with %s for pon %u chan %u pp_port %u\n",
+                        __FUNCTION__, bcm_errmsg(sdk_rc), pon_port, pon_chan, pp_port);
+
+            rc = BCM_ERR_INTERNAL;
+            break;
+        }
+
+    } while(0); /* Exception Block - End */
+
+    return rc;
+}
+
+/**************************************************************************/
+/**
+ * @brief Configure SP or WFQ scheduling for a PON channel
+ *
+ * This function configures scheduling for a PON channel (10G
+ * vs. 1G). If all of the specified weight values are non-zero, then
+ * WFQ is enabled on the PON channel. Otherwise, if one or more of the
+ * weight values is zero, strict priority (SP) scheduling will be used
+ * on this port.
+ *
+ * @param unit       SDK unit number
+ * @param pon_port   PON port number
+ * @param pon_chan    PON channel (10G vs. 1G)
+ * @param p_wfq_cfg    Pointer to the WFQ scheduler configuration
+ *
+ * @return bcmos_errno
+ *
+ **************************************************************************/
+bcmos_errno bal_sw_dpp_qos_set_ponchan_wfq_cfg(int unit, bcm_port_t pon_port,
+                                 bal_sw_dpp_qos_sched_pon_chan pon_chan, bal_sw_dpp_qos_wfq_cfg *p_wfq_cfg)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcm_error_t sdk_rc = BCM_E_NONE;
+    bal_sw_dpp_port_qos_cfg *p_port_qos = NULL;
+    uint8_t wfq_lvl;
+    uint32_t weight;
+
+    /* Parameter checks */
+    BUG_ON(pon_port >= BAL_BCM_QOS_NUM_PON_PORTS);
+    BUG_ON(pon_chan  >= BAL_BCM_SCHED_PON_CHAN_NUM);
+
+    /* Get the scheduler configuration for the port. */
+    p_port_qos = &gp_bal_bcm_qos_cfg->pon[pon_port][pon_chan];
+
+    /* Assume WFQ is used until a zero weight value is encountered. */
+    p_port_qos->sched_type = BAL_BCM_SCHED_TYPE_WFQ;
+    for (wfq_lvl=0; wfq_lvl<BAL_BCM_SCHED_WFQ_PRI_NUM; wfq_lvl++)
+    {
+        if (p_wfq_cfg->weights[wfq_lvl] == 0)
+        {
+            /* Use strict priority */
+            memset(&p_port_qos->pon_chan_weight_cfg, 0, sizeof(p_port_qos->pon_chan_weight_cfg));
+            p_port_qos->sched_type = BAL_BCM_SCHED_TYPE_SP;
+            break;
+        }
+        else
+        {
+            p_port_qos->pon_chan_weight_cfg[wfq_lvl] = p_wfq_cfg->weights[wfq_lvl];
+        }
+    }
+
+    /* If WFQ is being used, update the weight values in the PON
+     * channel's SE. Otherwise, the scheduling type is SP and there is
+     * nothing else to do.
+     */
+    if (p_port_qos->sched_type == BAL_BCM_SCHED_TYPE_WFQ)
+    {
+        /* Apply the weight configuration for each WFQ scheduling
+         * level to the hardware.
+         */
+        for (wfq_lvl=0; wfq_lvl<BAL_BCM_SCHED_WFQ_PRI_NUM; wfq_lvl++)
+        {
+            /* The weight cannot exceed 4K on ARAD */
+            weight = p_port_qos->pon_chan_weight_cfg[wfq_lvl];
+            if (weight > BAL_BCM_SCHED_WFQ_MAX_WEIGHT)
+            {
+                BCM_LOG(WARNING, log_id_sw_util,
+                            "Configured weight value %u is larger than the maximum supported by ARAD, capping value to %u, pon %u, chan %u, wfq_lvl %u\n",
+                            weight, BAL_BCM_SCHED_WFQ_MAX_WEIGHT, pon_port, pon_chan, wfq_lvl);
+
+                /* If the weight value exceeds max, cap that value at 4K. */
+                weight = BAL_BCM_SCHED_WFQ_MAX_WEIGHT;
+            }
+
+            /* Configure the hardware */
+            sdk_rc = bcm_cosq_gport_sched_set(unit,
+                                              p_port_qos->wfq_scheduler[wfq_lvl],
+                                              0,
+                                              BCM_COSQ_SP3,
+                                              weight);
+            if (sdk_rc != BCM_E_NONE)
+            {
+                /* Error */
+                BCM_LOG(ERROR, log_id_sw_util,
+                            "%s(): bcm_cosq_gport_sched_set for PON Channel WFQ SE failed with %s for pon %u, chan %u, wfq_lvl %u\n",
+                            __FUNCTION__, bcm_errmsg(sdk_rc), pon_port, pon_chan, wfq_lvl);
+
+                rc = BCM_ERR_INTERNAL;
+                break;
+            }
+        }
+    }
+
+    return rc;
+}
+
+/**************************************************************************/
+/**
+ * @brief Initialize downstream QoS for a channelized PON port
+ *
+ * This function initializes downstream QoS for a channelized PON
+ * port, where scheduling/QoS is applied to packets that egress the
+ * port. Please refer to the "SCHEDULER MODEL" diagram at the top of
+ * this file.
+ *
+ * This function configures the Port-related scheduling elements
+ * (SEs), including the PON channel (10G vs. 1G) High Resolution
+ * Diff-serve (HR) SE. CIR flows are attached directly to the channel
+ * HR. Strict Priority (SP) and Weighted-Fair Queue (WFQ) SEs are
+ * created to implement DOCSIS Traffic Priority for EIR flows. After
+ * creating the SEs, each SE is connected to the hierarchy as shown in
+ * the diagram.
+ *
+ * @param unit      SDK unit number
+ * @param log_pon   logical PON port number
+ * @param pon_chan   PON channel (10G vs. 1G)
+ *
+ * @return bcmos_errno
+ *
+ **************************************************************************/
+bcmos_errno bal_sw_dpp_port_qos_init(int unit, bcm_port_t log_pon, bal_sw_dpp_qos_sched_pon_chan pon_chan)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcm_error_t sdk_rc = BCM_E_NONE;
+    bal_sw_dpp_port_qos_cfg *p_port_qos = NULL;
+    bcm_gport_t mod_gport;
+    int flags = 0;
+    int wfq_lvl;
+    bcm_port_t pp_port, pon_port;
+
+    /* Parameter checks */
+    BUG_ON(log_pon >= BAL_BCM_QOS_NUM_PON_PORTS);
+    BUG_ON(pon_chan >= BAL_BCM_SCHED_PON_CHAN_NUM);
+
+    BCM_LOG(DEBUG, log_id_sw_util,
+                "%s(): initializing QoS on port %d, %s channel w sche mode %s\n",
+                __FUNCTION__, log_pon, (pon_chan == BAL_BCM_SCHED_PON_CHAN_10G) ? "10G" : "1G",
+                (bal_bcm_ds_sched_mode_get()) ? "WFQ" : "SP");
+
+    /* Retrieve the QoS configuration for the specified channel, index by logical pon number */
+    p_port_qos = &gp_bal_bcm_qos_cfg->pon[log_pon][pon_chan];
+
+    /* Get Max rate scheduling mode from global setting */
+    /* TBD - the scheduling mode can be different for each port */
+    p_port_qos->sched_type = bal_bcm_ds_sched_mode_get();
+
+    /* get the pp port from the device port number */
+    pon_port = bal_bcm_pon_inf_pbm_get(log_pon);
+    pp_port = BAL_BCM_GET_PP_PORT(pon_port, pon_chan);
+
+    /*
+     * Setup downstream scheduling this channelized port
+     */
+
+    do /* Exception Block Start */
+    {
+        /*
+         * Get the mod port for this channel.
+         */
+        BCM_GPORT_MODPORT_SET(mod_gport, gp_bal_bcm_qos_cfg->mod_id, pp_port);
+        p_port_qos->mod_gport = mod_gport;
+
+        /* Initialize the channel weights to defaults values.
+         *
+         * By default strict priority is used, so these weight values
+         * are not "active". However, we need to set the weights to
+         * something non-zero during initialization.
+         *
+         * The default channel weights are...
+         *   32, 64, 128, 256, 512, 1024, 2048, 4096
+         */
+        p_port_qos->pon_chan_weight_cfg[0] = 32;
+        for (wfq_lvl=1; wfq_lvl<BAL_BCM_SCHED_WFQ_PRI_NUM; wfq_lvl++)
+        {
+            p_port_qos->pon_chan_weight_cfg[wfq_lvl] = 2 * p_port_qos->pon_chan_weight_cfg[wfq_lvl-1];
+        }
+
+        /*
+         * Channel HR (level 1)
+         *
+         * Get the OTM port HR for this PON channel. The rest of
+         * the downstream scheduling hierarchy is attached to this
+         * HR.
+         *
+         * The 'BCM_COSQ_GPORT_REPLACE' flag is passed into the
+         * bcm_cosq_gport_add() function call, which changes the
+         * scheduling type from the default mode to a SINGLE_WFQ
+         * mode.
+         */
+        BCM_COSQ_GPORT_E2E_PORT_SET(p_port_qos->pon_chan_scheduler, pp_port);
+        flags = BCM_COSQ_GPORT_SCHEDULER | BCM_COSQ_GPORT_SCHEDULER_HR_SINGLE_WFQ | BCM_COSQ_GPORT_REPLACE;
+        sdk_rc = bcm_cosq_gport_add(unit, pp_port, 1, flags, &p_port_qos->pon_chan_scheduler);
+        if (sdk_rc != BCM_E_NONE)
+        {
+            /* Error */
+            BCM_LOG(ERROR, log_id_sw_util,
+                        "%s(): bcm_cosq_gport_add (with REPLACE) for PON Channel HR failed with %s for pon %u chan %u\n",
+                        __FUNCTION__, bcm_errmsg(sdk_rc), pon_port, pon_chan);
+
+            rc = BCM_ERR_INTERNAL;
+            break;
+        }
+        else
+        {
+
+            BCM_LOG(DEBUG, log_id_sw_util,
+                        "%s(): bcm_cosq_gport_add (with REPLACE) for PON Channel HR - gport 0x%x\n",
+                        __FUNCTION__, p_port_qos->pon_chan_scheduler);
+        }
+        /*
+         * Strict Priority HR (level 2)
+         *
+         * Set up a Strict Priority HR scheduler for EIR (MAX Rate)
+         * flows. This SE is only used when the PON channel is running
+         * in Strict Priority mode.
+         */
+
+        /* Create the scheduler object */
+        flags = BCM_COSQ_GPORT_SCHEDULER | BCM_COSQ_GPORT_SCHEDULER_HR_ENHANCED;
+        sdk_rc = bcm_cosq_gport_add(unit, 0, 1, flags, &p_port_qos->sp_scheduler);
+        if (sdk_rc != BCM_E_NONE)
+        {
+            /* Error */
+            BCM_LOG(ERROR, log_id_sw_util,
+                        "%s(): bcm_cosq_gport_add for MAX Rate SP HR failed with %s for pon %u chan %u\n",
+                        __FUNCTION__, bcm_errmsg(sdk_rc), pon_port, pon_chan);
+
+            rc = BCM_ERR_INTERNAL;
+            break;
+        }
+        else
+        {
+
+            BCM_LOG(DEBUG, log_id_sw_util,
+                        "%s(): bcm_cosq_gport_add for MAX Rate SP HR - gport 0x%x\n",
+                        __FUNCTION__, p_port_qos->sp_scheduler);
+        }
+
+        /* Configure the priority for this scheduler. The SP SE is
+         * attached at priority '2'.
+         */
+        sdk_rc = bcm_cosq_gport_sched_set(unit,
+                                          p_port_qos->sp_scheduler,
+                                          0,
+                                          BCM_COSQ_SP2,
+                                          0);
+        if (sdk_rc != BCM_E_NONE)
+        {
+            /* Error */
+            BCM_LOG(ERROR, log_id_sw_util,
+                        "%s(): bcm_cosq_gport_sched_set for MAX Rate SP HR failed with %s for pon %u chan %u\n",
+                        __FUNCTION__, bcm_errmsg(sdk_rc), pon_port, pon_chan);
+
+            rc = BCM_ERR_INTERNAL;
+            break;
+        }
+
+        /* Attach the SP scheduler to the Channel HR. */
+        sdk_rc = bcm_cosq_gport_attach(unit,
+                                       p_port_qos->pon_chan_scheduler,
+                                       p_port_qos->sp_scheduler,
+                                       0);
+        if (sdk_rc != BCM_E_NONE)
+        {
+            /* Error */
+            BCM_LOG(ERROR, log_id_sw_util,
+                        "%s(): bcm_cosq_gport_attach for MAX Rate SP HR failed with %s for pon %u chan %u\n",
+                        __FUNCTION__, bcm_errmsg(sdk_rc), pon_port, pon_chan);
+
+            rc = BCM_ERR_INTERNAL;
+            break;
+        }
+
+        /*
+         * WFQ (level 2)
+         *
+         * Create FQ scheduling elements and attach one to each
+         * WFQ level. This is used to schedule EIR (MAX Rate)
+         * flows when the PON channel is running in WFQ mode.
+         */
+
+        /* Create a FQ scheduler for each WFQ level */
+        for (wfq_lvl=0; wfq_lvl<BAL_BCM_SCHED_WFQ_PRI_NUM; wfq_lvl++)
+        {
+            /* Create the scheduler object */
+            flags = BCM_COSQ_GPORT_SCHEDULER | BCM_COSQ_GPORT_SCHEDULER_FQ;
+            sdk_rc = bcm_cosq_gport_add(unit, 0, 1, flags, &p_port_qos->wfq_scheduler[wfq_lvl]);
+            if (sdk_rc != BCM_E_NONE)
+            {
+                /* Error */
+                BCM_LOG(ERROR, log_id_sw_util,
+                            "%s(): bcm_cosq_gport_add for MAX Rate WFQ failed with %s for pon %u chan %u wfq_lvl %u\n",
+                            __FUNCTION__, bcm_errmsg(sdk_rc), pon_port, pon_chan, wfq_lvl);
+
+                rc = BCM_ERR_INTERNAL;
+                break;
+            }
+
+            /* Configure the priority for this SE. (WFQ is SP3 on
+             * the Channel HR.)
+             */
+            sdk_rc = bcm_cosq_gport_sched_set(unit,
+                                              p_port_qos->wfq_scheduler[wfq_lvl],
+                                              0,
+                                              BCM_COSQ_SP3,
+                                              p_port_qos->pon_chan_weight_cfg[wfq_lvl]);
+            if (sdk_rc != BCM_E_NONE)
+            {
+                /* Error */
+                BCM_LOG(ERROR, log_id_sw_util,
+                            "%s(): bcm_cosq_gport_sched_set for MAX Rate WFQ failed with %s for pon %u chan %u wfq_lvl %u\n",
+                            __FUNCTION__, bcm_errmsg(sdk_rc), pon_port, pon_chan, wfq_lvl);
+
+                rc = BCM_ERR_INTERNAL;
+                break;
+            }
+
+            /*  Attach the FQ scheduler the WFQ on the Channel HR. */
+            sdk_rc = bcm_cosq_gport_attach(unit,
+                                           p_port_qos->pon_chan_scheduler,
+                                           p_port_qos->wfq_scheduler[wfq_lvl],
+                                           0);
+            if (sdk_rc != BCM_E_NONE)
+            {
+                /* Error */
+                BCM_LOG(ERROR, log_id_sw_util,
+                            "%s(): bcm_cosq_gport_attach for MAX Rate WFQ failed with %s for pon %u chan %u wfq_lvl %u\n",
+                            __FUNCTION__, bcm_errmsg(sdk_rc), pon_port, pon_chan, wfq_lvl);
+
+                rc = BCM_ERR_INTERNAL;
+                break;
+            }
+        }
+
+    } while(0); /* Exception Block - End */
+
+    return rc;
+}
+
+/**************************************************************************/
+/**
+ * @brief Clean up QoS for a PON-side port
+ *
+ * Each SE must be disconnected from the hierarchy before freeing the
+ * SE.
+ *
+ * @param unit      SDK unit number
+ * @param pon_port  PON port number
+ * @param pon_chan   PON channel (10G vs. 1G)
+ *
+ **************************************************************************/
+void bal_sw_dpp_port_qos_cleanup(int unit, bcm_port_t pon_port, bal_sw_dpp_qos_sched_pon_chan pon_chan)
+{
+    bcm_error_t sdk_rc = BCM_E_NONE;
+    bal_sw_dpp_port_qos_cfg *p_port_qos = NULL;
+    int wfq_lvl;
+
+    /* Parameter checks */
+    BUG_ON(pon_port >= BAL_BCM_QOS_NUM_PON_PORTS);
+    BUG_ON(pon_chan  >= BAL_BCM_SCHED_PON_CHAN_NUM);
+
+    /* Retrieve the QoS configuration for the specified port */
+    p_port_qos = &gp_bal_bcm_qos_cfg->pon[pon_port][pon_chan];
+
+    /*
+     * Clean up WFQ
+     */
+    for (wfq_lvl=0; wfq_lvl<BAL_BCM_SCHED_WFQ_PRI_NUM; wfq_lvl++)
+    {
+        /* Disconnect the scheduler from the one above */
+        sdk_rc = bcm_cosq_gport_detach(unit,
+                                       p_port_qos->pon_chan_scheduler,
+                                       p_port_qos->wfq_scheduler[wfq_lvl],
+                                       0);
+        if (sdk_rc != BCM_E_NONE)
+        {
+            /* Error */
+            BCM_LOG(ERROR, log_id_sw_util,
+                        "%s(): bcm_cosq_gport_detach for MAX Rate WFQ failed with %s for pon %u pon_chan %u wfq_lvl %u\n",
+                        __FUNCTION__, bcm_errmsg(sdk_rc), pon_port, pon_chan, wfq_lvl);
+
+            /* Continue cleanup, don't halt processing because of this error */
+        }
+
+        sdk_rc = bcm_cosq_gport_delete(unit, p_port_qos->wfq_scheduler[wfq_lvl]);
+        if (sdk_rc != BCM_E_NONE)
+        {
+            /* Error */
+            BCM_LOG(ERROR, log_id_sw_util,
+                        "%s(): bcm_cosq_gport_delete for MAX Rate WFQ failed with %s for pon %u pon_chan %u wfq_lvl %u\n",
+                        __FUNCTION__, bcm_errmsg(sdk_rc), pon_port, pon_chan, wfq_lvl);
+
+            /* Continue cleanup, don't halt processing because of this error */
+        }
+    }
+
+    /*
+     * Clean up SP HR
+     */
+
+    /* Disconnect the scheduler from the one above */
+    sdk_rc = bcm_cosq_gport_detach(unit,
+                                   p_port_qos->pon_chan_scheduler,
+                                   p_port_qos->sp_scheduler,
+                                   0);
+    if (sdk_rc != BCM_E_NONE)
+    {
+        /* Error */
+        BCM_LOG(ERROR, log_id_sw_util,
+                    "%s(): bcm_cosq_gport_detach for MAX Rate SP HR failed with %s for pon %u pon_chan %u\n",
+                    __FUNCTION__, bcm_errmsg(sdk_rc), pon_port, pon_chan);
+
+        /* Continue cleanup, don't halt processing because of this error */
+    }
+
+    sdk_rc = bcm_cosq_gport_delete(unit, p_port_qos->sp_scheduler);
+    if (sdk_rc != BCM_E_NONE)
+    {
+        /* Error */
+        BCM_LOG(ERROR, log_id_sw_util,
+                    "%s(): bcm_cosq_gport_delete for MAX Rate SP HR failed with %s for pon %u pon_chan %u\n",
+                    __FUNCTION__, bcm_errmsg(sdk_rc), pon_port, pon_chan);
+
+        /* Continue cleanup, don't halt processing because of this error */
+    }
+
+}
+
+/**************************************************************************/
+/**
+ * @brief Configure a rate shaper and maximum burst size for a PON Link
+ *
+ * This function configures the rate and maximum burst size for the
+ * specified shaper (MIN Rate vs. MAX Rate) for a PON Link (LLID).
+ *
+ * @param unit         SDK unit number
+ * @param p_service_cfg  Pointer to the service configuration entry
+ * @param sla_type      Shaper type (MIN vs. MAX)
+ * @param bandwidth    Data rate in Kbps (i.e., token bucket fill rate)
+ * @param max_burst     Maximum burst size in bytes (i.e., token bucket size)
+ *
+ * @return bcmos_errno
+ *
+ **************************************************************************/
+bcmos_errno bal_sw_dpp_qos_set_llid_bandwidth(int unit, bal_sw_dpp_qos_service_cfg *p_service_cfg,
+                                 bal_sw_dpp_qos_sched_sla_type sla_type, uint32_t bandwidth, uint32_t max_burst)
+{
+    bcm_error_t sdk_rc = BCM_E_NONE;
+    bcm_gport_t scheduler_gport;
+
+    /* Parameter checks */
+    BUG_ON(p_service_cfg == NULL);
+
+    /* Get the scheduler gport that the VOQs are attached to (MIN vs. MAX) */
+    if (sla_type == BAL_BCM_SCHED_SLA_MIN_RATE)
+    {
+        scheduler_gport = p_service_cfg->ds_qos.min.scheduler_gport;
+    }
+    else
+    {
+        scheduler_gport = p_service_cfg->ds_qos.max.scheduler_gport;
+    }
+
+    /* Set the Rate - drain rate */
+    sdk_rc = bcm_cosq_gport_bandwidth_set(unit,
+                                          scheduler_gport,
+                                          0,
+                                          0,
+                                          bandwidth,
+                                          0);
+    if (sdk_rc != BCM_E_NONE)
+    {
+        /* Error */
+        BCM_LOG(ERROR, log_id_sw_util,
+                    "%s(): bcm_cosq_gport_bandwidth_set failed with %s for %s gport 0x%x\n",
+                    __FUNCTION__, bcm_errmsg(sdk_rc), (sla_type == BAL_BCM_SCHED_SLA_MIN_RATE)? "SLA_MIN_RATE":"SLA_MAX_RATE", scheduler_gport);
+
+        return BCM_ERR_INTERNAL;
+    }
+    else
+    {
+        BCM_LOG(INFO, log_id_sw_util,
+                    "%s() set gport 0x%x with %s of %d\n",
+                    __FUNCTION__, scheduler_gport,(sla_type == BAL_BCM_SCHED_SLA_MIN_RATE)? "SLA_MIN_RATE":"SLA_MAX_RATE", bandwidth);
+    }
+
+    /*  Set the Burst - bucket size that hold the incoming frames */
+    sdk_rc = bcm_cosq_control_set(unit,
+                                  scheduler_gport,
+                                  0,
+                                  bcmCosqControlBandwidthBurstMax,
+                                  max_burst);
+    if (sdk_rc != BCM_E_NONE)
+    {
+        /* Error */
+        BCM_LOG(ERROR, log_id_sw_util,
+                    "%s(): bcm_cosq_control_set for MaxBurst failed with %s for pon %u tid %u\n",
+                    __FUNCTION__, bcm_errmsg(sdk_rc), p_service_cfg->pon_port, p_service_cfg->tunnel_id);
+
+        return BCM_ERR_INTERNAL;
+    }
+
+    return BCM_ERR_OK;
+}
+
+/**************************************************************************/
+/**
+ * @brief Configure downstream QoS for a PON Link (LLID)
+ *
+ * This function configures downstream QoS for a PON Link (LLID),
+ * which is represented by a tunnel ID in ARAD. Please refer to the
+ * "SCHEDULER MODEL" diagram at the top of this file. This function
+ * configures the PON Link SE and queues (VOQ + VOQ Connector) for the
+ * Link. The PON Link scheduler processes queues using strict
+ * priority. This function configures four queues for the Link, which
+ * is the smallest number of queues per LLID supported by
+ * ARAD. However, the BAL BCM App currently only makes use of a single
+ * queue.
+ *
+ * This function configures MIN (CIR) and MAX (EIR) rate shapers. If
+ * the MIN rate is disabled (i.e., bandwidth configured with a value
+ * of '0' kbps), the shaper is not "connected" to the port's MIN Rate
+ * SE.
+ *
+ * @param unit         SDK unit number
+ * @param p_service_cfg  Pointer to the service configuration entry
+ *
+ * @return bcmos_errno
+ *
+ **************************************************************************/
+bcmos_errno bal_sw_dpp_llid_qos_config(int unit, bal_sw_dpp_qos_service_cfg *p_service_cfg)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcm_error_t sdk_rc = BCM_E_NONE;
+    bal_sw_dpp_port_qos_cfg *p_port_qos = NULL;
+    int flags = 0;
+    int cosq;
+    bcm_cosq_gport_connection_t connection;
+    bal_sw_dpp_qos_sched_pon_chan ds_pon_chan;
+    bcm_gport_t scheduler_gport;
+
+    /* Parameter checks */
+    BUG_ON(p_service_cfg == NULL);
+
+    /* Store the downstream PON rate, which will be used in several
+     * places throughout this function.
+     */
+    ds_pon_chan = p_service_cfg->ds_qos.pon_chan;
+
+    /* Retrieve the QoS configuration for the specified port */
+    p_port_qos = &gp_bal_bcm_qos_cfg->pon[p_service_cfg->pon_port][ds_pon_chan];
+
+    do /* Exception Block Start */
+    {
+        /* Allocate the voq ID from the free pool */
+        if (ds_pon_chan == BAL_BCM_SCHED_PON_CHAN_10G)
+        {
+            rc = bal_sw_dpp_qos_alloc_flow_id(&gp_bal_bcm_qos_cfg->flow_id_pool_10g, &p_service_cfg->ds_qos.voq_flow_id);
+        }
+        else
+        {
+            rc = bal_sw_dpp_qos_alloc_flow_id(&gp_bal_bcm_qos_cfg->flow_id_pool_1g, &p_service_cfg->ds_qos.voq_flow_id);
+        }
+        if (rc != BCM_ERR_OK)
+        {
+            /* Error */
+            BCM_LOG(ERROR, log_id_sw_util,
+                        "%s(): Unable to allocate voq ID for pon %u tid %u\n",
+                        __FUNCTION__, p_service_cfg->pon_port, p_service_cfg->tunnel_id);
+
+            rc = BCM_ERR_INTERNAL;
+            break;
+        }
+
+        /* In the BAL BCM App, the VOQ ID is equal to the voq ID */
+        p_service_cfg->ds_qos.voq_id = p_service_cfg->ds_qos.voq_flow_id;
+
+        /*
+         * PON Link scheduler (level 2)
+         */
+        if (p_service_cfg->ds_qos.min.rate > 0)
+        {
+            /* Create a composite, strict priority scheduler for this PON
+             * Link. This is used to schedule between the queues assigned to
+             * this PON Link.
+             */
+            flags = BCM_COSQ_GPORT_SCHEDULER | BCM_COSQ_GPORT_SCHEDULER_CLASS_MODE1_4SP | BCM_COSQ_GPORT_COMPOSITE;
+            sdk_rc = bcm_cosq_gport_add(unit,
+                                        0,
+                                        1,         /* Number of CoS levels */
+                                        flags,
+                                        &p_service_cfg->ds_qos.min.scheduler_gport);
+            if (sdk_rc != BCM_E_NONE)
+            {
+                /* Error */
+                BCM_LOG(ERROR, log_id_sw_util,
+                            "%s(): bcm_cosq_gport_add for PON Link SE failed with %s for pon %u tid %u\n",
+                            __FUNCTION__, bcm_errmsg(sdk_rc), p_service_cfg->pon_port, p_service_cfg->tunnel_id);
+
+                rc = BCM_ERR_INTERNAL;
+                break;
+            }
+
+            /* A single priority on the Channel HR handles all MIN Rates (CIRs).  */
+            sdk_rc = bcm_cosq_gport_sched_set(unit,
+                                              p_service_cfg->ds_qos.min.scheduler_gport,
+                                              0,
+                                              BCM_COSQ_SP1,
+                                              0);
+            if (sdk_rc != BCM_E_NONE)
+            {
+                /* Error */
+                BCM_LOG(ERROR, log_id_sw_util,
+                            "%s(): bcm_cosq_gport_sched_set for Min Rate SE failed with %s for pon %u tid %u\n",
+                            __FUNCTION__, bcm_errmsg(sdk_rc), p_service_cfg->pon_port, p_service_cfg->tunnel_id);
+
+                rc = BCM_ERR_INTERNAL;
+                break;
+            }
+
+            /* Attach the PON Link scheduler to the Channel HR. */
+            sdk_rc = bcm_cosq_gport_attach(unit,
+                                           p_port_qos->pon_chan_scheduler,
+                                           p_service_cfg->ds_qos.min.scheduler_gport,
+                                           0);
+            if (sdk_rc != BCM_E_NONE)
+            {
+                /* Error */
+                BCM_LOG(ERROR, log_id_sw_util,
+                            "%s(): bcm_cosq_gport_attach for Min Rate SE failed with %s for pon %u tid %u\n",
+                            __FUNCTION__, bcm_errmsg(sdk_rc), p_service_cfg->pon_port, p_service_cfg->tunnel_id);
+
+                rc = BCM_ERR_INTERNAL;
+                break;
+            }
+
+            /* Save the gport of the parent SE (used for cleanup) */
+            p_service_cfg->ds_qos.min.parent_gport = p_port_qos->pon_chan_scheduler;
+
+            /* Configure the MIN Rate shaper */
+            rc = bal_sw_dpp_qos_set_llid_bandwidth(unit,
+                                        p_service_cfg,
+                                        BAL_BCM_SCHED_SLA_MIN_RATE,
+                                        p_service_cfg->ds_qos.min.rate,
+                                        p_service_cfg->ds_qos.min.burst);
+            if (rc != BCM_ERR_OK)
+            {
+                /* Error */
+                BCM_LOG(ERROR, log_id_sw_util,
+                            "%s(): Set MIN Rate shaper failed for pon %u tid %u\n",
+                            __FUNCTION__, p_service_cfg->pon_port, p_service_cfg->tunnel_id);
+
+                rc = BCM_ERR_INTERNAL;
+                break;
+            }
+
+            /* Set the gport for the MAX Rate scheduler */
+            BCM_COSQ_GPORT_COMPOSITE_SF2_SET(p_service_cfg->ds_qos.max.scheduler_gport, p_service_cfg->ds_qos.min.scheduler_gport);
+
+            /* Set the scheduler gport that the VOQs are attached to */
+            scheduler_gport = p_service_cfg->ds_qos.min.scheduler_gport;
+        }
+        else
+        {
+            /*
+             *  MAX Rate only (level 2)
+             */
+            flags = BCM_COSQ_GPORT_SCHEDULER | BCM_COSQ_GPORT_SCHEDULER_CLASS_MODE1_4SP;
+            sdk_rc = bcm_cosq_gport_add(unit,
+                                        0,
+                                        1,         /* Number of CoS levels */
+                                        flags,
+                                        &p_service_cfg->ds_qos.max.scheduler_gport);
+            if (sdk_rc != BCM_E_NONE)
+            {
+                /* Error */
+                BCM_LOG(ERROR, log_id_sw_util,
+                            "%s(): bcm_cosq_gport_add for PON Link SE failed with %s for pon %u tid %u\n",
+                            __FUNCTION__, bcm_errmsg(sdk_rc), p_service_cfg->pon_port, p_service_cfg->tunnel_id);
+
+                rc = BCM_ERR_INTERNAL;
+                break;
+            }
+
+            /* Set the scheduler gport that the VOQs are attached to */
+            scheduler_gport = p_service_cfg->ds_qos.max.scheduler_gport;
+        }
+
+        /* The type of MAX Rate scheduling depends on what scheduling
+         * mode is configured on the PON channel (SP vs. WFQ).
+         */
+        if (p_port_qos->sched_type == BAL_BCM_SCHED_TYPE_SP)
+        {
+            /*
+             *  Strict Priority (SP) scheduling is being used
+             */
+
+            /* Set the priority used for the attachment to the SP HR */
+            sdk_rc = bcm_cosq_gport_sched_set(unit,
+                                              p_service_cfg->ds_qos.max.scheduler_gport,
+                                              0,
+                                              BCM_COSQ_SP0 + p_service_cfg->ds_qos.max.traffic_priority,
+                                              0);
+            if (sdk_rc != BCM_E_NONE)
+            {
+                /* Error */
+                BCM_LOG(ERROR, log_id_sw_util,
+                            "%s(): bcm_cosq_gport_sched_set for Max Rate SE failed with %s for pon %u tid %u\n",
+                            __FUNCTION__, bcm_errmsg(sdk_rc), p_service_cfg->pon_port, p_service_cfg->tunnel_id);
+
+                rc = BCM_ERR_INTERNAL;
+                break;
+            }
+
+            /* Attach the PON Link scheduler to the SP HR. */
+            sdk_rc = bcm_cosq_gport_attach(unit,
+                                           p_port_qos->sp_scheduler,
+                                           p_service_cfg->ds_qos.max.scheduler_gport,
+                                           0);
+            if (sdk_rc != BCM_E_NONE)
+            {
+                /* Error */
+                BCM_LOG(ERROR, log_id_sw_util,
+                            "%s(): bcm_cosq_gport_attach for Max Rate SE failed with %s for pon %u tid %u\n",
+                            __FUNCTION__, bcm_errmsg(sdk_rc), p_service_cfg->pon_port, p_service_cfg->tunnel_id);
+
+                rc = BCM_ERR_INTERNAL;
+                break;
+            }
+
+            /* Save the gport of the parent SE (used for cleanup) */
+            p_service_cfg->ds_qos.max.parent_gport = p_port_qos->sp_scheduler;
+        }
+        else
+        {
+            /*
+             *  Weighted Fair Queuing (WFQ) scheduling is being used
+             */
+
+            /* Set the priority used for the attachment to the FQ. */
+            sdk_rc = bcm_cosq_gport_sched_set(unit,
+                                              p_service_cfg->ds_qos.max.scheduler_gport,
+                                              0,
+                                              BCM_COSQ_SP0,
+                                              0);
+            if (sdk_rc != BCM_E_NONE)
+            {
+                /* Error */
+                BCM_LOG(ERROR, log_id_sw_util,
+                            "%s(): bcm_cosq_gport_sched_set for Max Rate SE failed with %s for pon %u tid %u\n",
+                            __FUNCTION__, bcm_errmsg(sdk_rc), p_service_cfg->pon_port, p_service_cfg->tunnel_id);
+
+                rc = BCM_ERR_INTERNAL;
+                break;
+            }
+
+            /* Attach the PON Link scheduler to the FQ. */
+            sdk_rc = bcm_cosq_gport_attach(unit,
+                                           p_port_qos->wfq_scheduler[p_service_cfg->ds_qos.max.traffic_priority],
+                                           p_service_cfg->ds_qos.max.scheduler_gport,
+                                           0);
+            if (sdk_rc != BCM_E_NONE)
+            {
+                /* Error */
+                BCM_LOG(ERROR, log_id_sw_util,
+                            "%s(): bcm_cosq_gport_attach for Max Rate SE failed with %s for pon %u tid %u\n",
+                            __FUNCTION__, bcm_errmsg(sdk_rc), p_service_cfg->pon_port, p_service_cfg->tunnel_id);
+
+                rc = BCM_ERR_INTERNAL;
+                break;
+            }
+
+            /* Save the gport of the parent SE (used for cleanup) */
+            p_service_cfg->ds_qos.max.parent_gport = p_port_qos->wfq_scheduler[p_service_cfg->ds_qos.max.traffic_priority];
+        }
+
+        /* Configure the MAX Rate shaper */
+        rc = bal_sw_dpp_qos_set_llid_bandwidth(unit,
+                                    p_service_cfg,
+                                    BAL_BCM_SCHED_SLA_MAX_RATE,
+                                    p_service_cfg->ds_qos.max.rate,
+                                    p_service_cfg->ds_qos.max.burst);
+        if (rc != BCM_ERR_OK)
+        {
+            /* Error */
+            BCM_LOG(ERROR, log_id_sw_util,
+                        "%s(): Set MAX Rate shaper failed for pon %u tid %u\n",
+                        __FUNCTION__, p_service_cfg->pon_port, p_service_cfg->tunnel_id);
+
+            break;
+        }
+
+        /*
+         *  Create a VOQ connector (level 3)
+         */
+
+        /* Create the VOQ connector object for a bundle of four queues */
+        flags = BCM_COSQ_GPORT_VOQ_CONNECTOR | BCM_COSQ_GPORT_WITH_ID;
+        BCM_COSQ_GPORT_VOQ_CONNECTOR_SET(p_service_cfg->ds_qos.voq_connector_gport, p_service_cfg->ds_qos.voq_flow_id);
+        sdk_rc = bcm_cosq_gport_add(unit,
+                                    p_port_qos->mod_gport,
+                                    BAL_BCM_QOS_QUEUES_PER_LLID,
+                                    flags,
+                                    &p_service_cfg->ds_qos.voq_connector_gport);
+        if (sdk_rc != BCM_E_NONE)
+        {
+            /* Error */
+            BCM_LOG(ERROR, log_id_sw_util,
+                        "%s(): bcm_cosq_gport_add for VOQ Connector failed with %s for pon %u tid %u voq ID %u\n",
+                        __FUNCTION__, bcm_errmsg(sdk_rc),
+                        p_service_cfg->pon_port,
+                        p_service_cfg->tunnel_id,
+                        p_service_cfg->ds_qos.voq_flow_id);
+
+            rc = BCM_ERR_INTERNAL;
+            break;
+        }
+
+        /* Set the traffic class for each queue and attach the VOQ
+         * connector to the PON Link scheduler.
+         */
+        for (cosq = 0; cosq < BAL_BCM_QOS_QUEUES_PER_LLID; cosq++)
+        {
+            /* Set the traffic class for the queue */
+            sdk_rc = bcm_cosq_gport_sched_set(unit,
+                                              p_service_cfg->ds_qos.voq_connector_gport,
+                                              cosq,
+                                              BCM_COSQ_SP3 - cosq,
+                                              0);
+            if (sdk_rc != BCM_E_NONE)
+            {
+                /* Error */
+                BCM_LOG(ERROR, log_id_sw_util,
+                            "%s(): bcm_cosq_gport_sched_set for VOQ Connector failed with %s for pon %u tid %u\n",
+                            __FUNCTION__, bcm_errmsg(sdk_rc), p_service_cfg->pon_port, p_service_cfg->tunnel_id);
+
+                rc = BCM_ERR_INTERNAL;
+                break;
+            }
+
+            /* Attach the connection for each queue to the PON Link
+             * scheduler, based on the traffic class.
+             */
+            sdk_rc = bcm_cosq_gport_attach(unit,
+                                           scheduler_gport,
+                                           p_service_cfg->ds_qos.voq_connector_gport,
+                                           cosq);
+            if (sdk_rc != BCM_E_NONE)
+            {
+                /* Error */
+                BCM_LOG(ERROR, log_id_sw_util,
+                            "%s(): bcm_cosq_gport_attach for VOQ Connector failed with %s for pon %u tid %u\n",
+                            __FUNCTION__, bcm_errmsg(sdk_rc), p_service_cfg->pon_port, p_service_cfg->tunnel_id);
+
+                rc = BCM_ERR_INTERNAL;
+                break;
+            }
+        }
+
+        /* Exception Block - check for errors from the previous loop */
+        if (rc != BCM_ERR_OK)
+        {
+            /* Error */
+            break;
+        }
+
+        /*
+         *  Create a VOQ (level 3)
+         */
+        flags = BCM_COSQ_GPORT_UCAST_QUEUE_GROUP | BCM_COSQ_GPORT_TM_FLOW_ID | BCM_COSQ_GPORT_WITH_ID;
+        BCM_GPORT_UNICAST_QUEUE_GROUP_SET(p_service_cfg->ds_qos.voq_gport, p_service_cfg->ds_qos.voq_id);
+        sdk_rc = bcm_cosq_gport_add(unit,
+                                    p_port_qos->mod_gport,
+                                    BAL_BCM_QOS_QUEUES_PER_LLID,
+                                    flags,
+                                    &p_service_cfg->ds_qos.voq_gport);
+        if (sdk_rc != BCM_E_NONE)
+        {
+            /* Error */
+            BCM_LOG(ERROR, log_id_sw_util,
+                        "%s(): bcm_cosq_gport_add for VOQ failed with %s for voq id %u, voq gport 0x%x, pon %u tid %u\n",
+                        __FUNCTION__, bcm_errmsg(sdk_rc), p_service_cfg->ds_qos.voq_id, p_service_cfg->ds_qos.voq_gport,
+                        p_service_cfg->pon_port, p_service_cfg->tunnel_id);
+
+            rc = BCM_ERR_INTERNAL;
+            break;
+        }
+        /* QAX not support per Queue compensation  */
+#ifndef QAX_SWITCH
+       /* Start - header adjust */
+       {
+        /*
+         * If necessary, adjust the packet header overhead to match
+         * the configured value.
+         */
+        int32_t val = 0;
+        int32_t cfg_dpp_hdr_size = 0;
+
+        /* Calculate the expected DPP header size, which depends on
+         * whether or not traffic is untagged, PB tagged, ICT
+         * tagged, or Shared Vlan tagged. If the traffic is tagged
+         * (either PB, ICT, or Shared Vlan), there are five fewer
+         * bytes in the DPP header.
+         */
+        cfg_dpp_hdr_size = DEFAULT_QOS_DPP_PKT_HDR_SIZE;
+        if (p_service_cfg->service_type != BAL_BCM_SVC_TYPE_IP)
+        {
+            cfg_dpp_hdr_size -= BAL_BCM_DPP_FLOWID_HDR_SIZE;
+        }
+
+        /* If the traffic is ICT stack mode or Shared Vlan tagged, we
+         * need to exclude the Vlan tag overhead from the bandwidth
+         * calculation (i.e., add four bytes of overhead).
+         */
+        if (((p_service_cfg->service_type == BAL_BCM_SVC_TYPE_ICT) /*&& (p_service_cfg->ictStkType != BAL_BCM_ICT_STACK_TYPE_NONE)*/)||
+            (p_service_cfg->service_type == BAL_BCM_SVC_TYPE_SHVLAN))
+        {
+            cfg_dpp_hdr_size += BAL_BCM_QOS_SINGLE_VLAN_TAG_HDR_SIZE;
+        }
+
+        /* Get the header length */
+        sdk_rc = bcm_cosq_control_get(unit,
+                                      p_service_cfg->ds_qos.voq_gport,
+                                      0,
+                                      bcmCosqControlPacketLengthAdjust,
+                                      &val);
+        if (sdk_rc != BCM_E_NONE)
+        {
+            /* Error */
+            BCM_LOG(ERROR, log_id_sw_util,
+                        "%s(): bcm_cosq_control_get for bcmCosqControlPacketLengthAdjust failed with %s for pon %u tid %u\n",
+                        __FUNCTION__, bcm_errmsg(sdk_rc), p_service_cfg->pon_port, p_service_cfg->tunnel_id);
+
+            rc = BCM_ERR_INTERNAL;
+            break;
+        }
+
+        /* If current length does not match the configured length,
+         * configure it now.
+         */
+        if (val != cfg_dpp_hdr_size)
+        {
+            /* Debug */
+            BCM_LOG(INFO, log_id_sw_util,
+                        "%s(): modifying value of bcmCosqControlPacketLengthAdjust from %u to %u for pon %u tid %u\n",
+                        __FUNCTION__,
+                        val,
+                        cfg_dpp_hdr_size,
+                        p_service_cfg->pon_port,
+                        p_service_cfg->tunnel_id);
+
+            /* Adjust the packet length calculated above. This has to
+             * be configured for each queue (cosq) in the voq
+             * group.
+             */
+            for (cosq = 0; cosq < BAL_BCM_QOS_QUEUES_PER_LLID; cosq++)
+            {
+                /* Adjust the packet length calculated above. */
+                sdk_rc = bcm_cosq_control_set(unit,
+                                              p_service_cfg->ds_qos.voq_gport,
+                                              cosq,
+                                              bcmCosqControlPacketLengthAdjust,
+                                              cfg_dpp_hdr_size);
+                if (sdk_rc != BCM_E_NONE)
+                {
+                    /* Error */
+                    BCM_LOG(ERROR, log_id_sw_util,
+                                "%s(): bcm_cosq_control_set for bcmCosqControlPacketLengthAdjust for cosq %d failed with %s for pon %u tid %u\n",
+                                __FUNCTION__, cosq, bcm_errmsg(sdk_rc), p_service_cfg->pon_port, p_service_cfg->tunnel_id);
+
+                    rc = BCM_ERR_INTERNAL;
+                    break;
+                }
+            }
+
+            /* Exception Block - check for errors from the previous loop */
+            if (rc != BCM_ERR_OK)
+            {
+                /* Error */
+                break;
+            }
+        }
+        } /* End - header adjustment */
+#endif
+        /*
+         *  Connect a VOQ to a VOQ connector
+         */
+
+        /* Connect VOQ to the VOQ connector for the ingress direction */
+        connection.flags = BCM_COSQ_GPORT_CONNECTION_INGRESS;
+        connection.remote_modid = gp_bal_bcm_qos_cfg->mod_id;
+        connection.voq = p_service_cfg->ds_qos.voq_gport;
+        connection.voq_connector = p_service_cfg->ds_qos.voq_connector_gport;
+
+        sdk_rc = bcm_cosq_gport_connection_set(unit, &connection);
+        if (sdk_rc != BCM_E_NONE)
+        {
+            /* Error */
+            BCM_LOG(ERROR, log_id_sw_util,
+                        "%s(): bcm_cosq_gport_connection_set for INGRESS failed with %s for pon %u tid %u\n",
+                        __FUNCTION__, bcm_errmsg(sdk_rc), p_service_cfg->pon_port, p_service_cfg->tunnel_id);
+
+            rc = BCM_ERR_INTERNAL;
+            break;
+        }
+
+        /* Connect VOQ to the VOQ connector for the egress direction */
+        connection.flags = BCM_COSQ_GPORT_CONNECTION_EGRESS;
+        connection.remote_modid = gp_bal_bcm_qos_cfg->mod_id;
+        connection.voq = p_service_cfg->ds_qos.voq_gport;
+        connection.voq_connector = p_service_cfg->ds_qos.voq_connector_gport;
+
+        sdk_rc = bcm_cosq_gport_connection_set(unit, &connection);
+        if (sdk_rc != BCM_E_NONE)
+        {
+            /* Error */
+            BCM_LOG(ERROR, log_id_sw_util,
+                        "%s(): bcm_cosq_gport_connection_set for EGRESS failed with %s for pon %u tid %u\n",
+                        __FUNCTION__, bcm_errmsg(sdk_rc), p_service_cfg->pon_port, p_service_cfg->tunnel_id);
+
+            rc = BCM_ERR_INTERNAL;
+            break;
+        }
+
+    } while(0); /* Exception Block - End */
+
+    /* Check for errors */
+    if (rc != BCM_ERR_OK)
+    {
+        /* Failure */
+        BCM_LOG(WARNING, log_id_sw_util,
+                    "Downstream QoS setup failed for pon %u tid %u\n",
+                    p_service_cfg->pon_port, p_service_cfg->tunnel_id);
+
+        /* Cleanup */
+        bal_sw_dpp_llid_qos_cleanup(unit, p_service_cfg);
+    }
+
+    return rc;
+}
+
+/**************************************************************************/
+/**
+ * @brief Configure downstream QoS Port Map for a PON Link (LLID)
+ *
+ * This function configures downstream QoS Port Map for a PON Link
+ * (LLID), which is represented by a tunnel ID in ARAD. This sets the
+ * default traffic class (TC) value for VLAN tags being inserted or
+ * modified.
+ *
+ * @param unit         SDK unit number
+ * @param p_service_cfg  Pointer to the service configuration entry
+ *
+ * @return bcmos_errno
+ *
+ **************************************************************************/
+bcmos_errno bal_sw_dpp_llid_set_qos_port_map(int unit, bal_sw_dpp_qos_service_cfg *p_service_cfg)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcm_error_t sdk_rc = BCM_E_NONE;
+    int i;
+    /* Parameter checks */
+    BUG_ON(p_service_cfg == NULL);
+
+    /* Set the QoS Port Map for the NNI LIF */
+    for(i = 0; i < p_service_cfg->num_nni_gport; i++)
+    {
+        sdk_rc = bcm_qos_port_map_set(unit, p_service_cfg->nni_gport[i], gp_bal_bcm_qos_cfg->qos_port_map_id, -1);
+        if (sdk_rc != BCM_E_NONE)
+        {
+            /* Error */
+            BCM_LOG(ERROR, log_id_sw_util,
+                        "%s():  bcm_qos_port_map_set for nni_index %d returned with failure code '%s'\n",
+                        __FUNCTION__, i, bcm_errmsg(sdk_rc));
+
+            rc = BCM_ERR_INTERNAL;
+        }
+    }
+
+    return rc;
+}
+
+/**************************************************************************/
+/**
+ * @brief Clean up QoS for a PON Link (LLID)
+ *
+ * Each SE and VOQ must be disconnected from the hierarchy before
+ * freeing the SE and VOQ objects.
+ *
+ * @param unit         SDK unit number
+ * @param p_service_cfg  Pointer to the service configuration entry
+ *
+ **************************************************************************/
+void bal_sw_dpp_llid_qos_cleanup(int unit, bal_sw_dpp_qos_service_cfg *p_service_cfg)
+{
+    bcm_error_t sdk_rc = BCM_E_NONE;
+    int cosq;
+    bcm_cosq_gport_connection_t connection;
+    bal_sw_dpp_qos_sched_pon_chan ds_pon_chan;
+    bcm_gport_t scheduler_gport;
+
+    /* Parameter checks */
+    BUG_ON(p_service_cfg == NULL);
+
+    /* Store the downstream PON rate, which will be used in several
+     * places throughout this function.
+     */
+    ds_pon_chan = p_service_cfg->ds_qos.pon_chan;
+
+    /* Get the scheduler gport that the VOQs are attached to */
+    if (p_service_cfg->ds_qos.min.rate > 0)
+    {
+        scheduler_gport = p_service_cfg->ds_qos.min.scheduler_gport;
+    }
+    else
+    {
+        scheduler_gport = p_service_cfg->ds_qos.max.scheduler_gport;
+    }
+
+    /* Disconnect VOQ from the VOQ connector for the egress direction */
+    connection.flags = BCM_COSQ_GPORT_CONNECTION_EGRESS | BCM_COSQ_GPORT_CONNECTION_INVALID;
+    connection.remote_modid = gp_bal_bcm_qos_cfg->mod_id;
+    connection.voq = p_service_cfg->ds_qos.voq_gport;
+    connection.voq_connector = p_service_cfg->ds_qos.voq_connector_gport;
+
+    sdk_rc = bcm_cosq_gport_connection_set(unit, &connection);
+    if (sdk_rc != BCM_E_NONE)
+    {
+        /* Error */
+        BCM_LOG(WARNING, log_id_sw_util,
+                    "%s(): bcm_cosq_gport_connection_set for DISCONNECT EGRESS failed with %s for pon %u tid %u\n",
+                    __FUNCTION__, bcm_errmsg(sdk_rc), p_service_cfg->pon_port, p_service_cfg->tunnel_id);
+
+        /* Continue cleanup, don't halt processing because of this error */
+    }
+
+    /* Disconnect VOQ from the VOQ connector for the ingress direction */
+    connection.flags = BCM_COSQ_GPORT_CONNECTION_INGRESS | BCM_COSQ_GPORT_CONNECTION_INVALID;
+    connection.remote_modid = gp_bal_bcm_qos_cfg->mod_id;
+    connection.voq = p_service_cfg->ds_qos.voq_gport;
+    connection.voq_connector = p_service_cfg->ds_qos.voq_connector_gport;
+
+    sdk_rc = bcm_cosq_gport_connection_set(unit, &connection);
+    if (sdk_rc != BCM_E_NONE)
+    {
+        /* Error */
+        BCM_LOG(WARNING, log_id_sw_util,
+                    "%s(): bcm_cosq_gport_connection_set for DISCONNECT INGRESS failed with %s for pon %u tid %u\n",
+                    __FUNCTION__, bcm_errmsg(sdk_rc), p_service_cfg->pon_port, p_service_cfg->tunnel_id);
+
+        /* Continue cleanup, don't halt processing because of this error */
+    }
+
+    /* Delete the VOQ */
+    sdk_rc = bcm_cosq_gport_delete(unit, p_service_cfg->ds_qos.voq_gport);
+    if (sdk_rc != BCM_E_NONE)
+    {
+        /* Error */
+        BCM_LOG(WARNING, log_id_sw_util,
+                    "%s(): bcm_cosq_gport_delete for VOQ failed with %s for pon %u tid %u\n",
+                    __FUNCTION__, bcm_errmsg(sdk_rc), p_service_cfg->pon_port, p_service_cfg->tunnel_id);
+
+        /* Continue cleanup, don't halt processing because of this error */
+    }
+
+    /* Disconnect the VOQ connector */
+    for (cosq = 0; cosq < BAL_BCM_QOS_QUEUES_PER_LLID; cosq++)
+    {
+        sdk_rc = bcm_cosq_gport_detach(unit,
+                                       scheduler_gport,
+                                       p_service_cfg->ds_qos.voq_connector_gport,
+                                       cosq);
+        if (sdk_rc != BCM_E_NONE)
+        {
+            /* Error */
+            BCM_LOG(WARNING, log_id_sw_util,
+                        "%s(): bcm_cosq_gport_detach for VOQ Connector failed with %s for pon %u tid %u\n",
+                        __FUNCTION__, bcm_errmsg(sdk_rc), p_service_cfg->pon_port, p_service_cfg->tunnel_id);
+
+            /* Continue cleanup, don't halt processing because of this error */
+        }
+    }
+
+    /* Delete the VOQ connector */
+    sdk_rc = bcm_cosq_gport_delete(unit, p_service_cfg->ds_qos.voq_connector_gport);
+    if (sdk_rc != BCM_E_NONE)
+    {
+        /* Error */
+        BCM_LOG(WARNING, log_id_sw_util,
+                    "%s(): bcm_cosq_gport_delete for VOQ Connector failed with %s for pon %u tid %u\n",
+                    __FUNCTION__, bcm_errmsg(sdk_rc), p_service_cfg->pon_port, p_service_cfg->tunnel_id);
+
+        /* Continue cleanup, don't halt processing because of this error */
+    }
+
+    /* If a MIN rate was configured for this PON Link, disconnect the
+     * PON Link scheduler from the MIN Rate scheduler.
+     */
+    if (p_service_cfg->ds_qos.min.rate > 0)
+    {
+        /* Detach from the parent SE */
+        sdk_rc = bcm_cosq_gport_detach(unit,
+                                       p_service_cfg->ds_qos.min.parent_gport,
+                                       p_service_cfg->ds_qos.min.scheduler_gport,
+                                       0);
+        if (sdk_rc != BCM_E_NONE)
+        {
+            /* Error */
+            BCM_LOG(WARNING, log_id_sw_util,
+                        "%s(): bcm_cosq_gport_detach for MIN Rate SE failed with %s for pon %u tid %u\n",
+                        __FUNCTION__, bcm_errmsg(sdk_rc), p_service_cfg->pon_port, p_service_cfg->tunnel_id);
+
+            /* Continue cleanup, don't halt processing because of this error */
+        }
+    }
+
+    /* Disconnect the PON Link scheduler from the MAX Rate scheduler. */
+    sdk_rc = bcm_cosq_gport_detach(unit,
+                                   p_service_cfg->ds_qos.max.parent_gport,
+                                   p_service_cfg->ds_qos.max.scheduler_gport,
+                                   0);
+    if (sdk_rc != BCM_E_NONE)
+    {
+        /* Error */
+        BCM_LOG(WARNING, log_id_sw_util,
+                    "%s(): bcm_cosq_gport_detach for MAX Rate SE failed with %s for pon %u tid %u\n",
+                    __FUNCTION__, bcm_errmsg(sdk_rc), p_service_cfg->pon_port, p_service_cfg->tunnel_id);
+
+        /* Continue cleanup, don't halt processing because of this error */
+    }
+
+    /* Delete the PON Link scheduler */
+    sdk_rc = bcm_cosq_gport_delete(unit, scheduler_gport);
+    if (sdk_rc != BCM_E_NONE)
+    {
+        /* Error */
+        BCM_LOG(WARNING, log_id_sw_util,
+                    "%s(): bcm_cosq_gport_delete for PON Link SE failed with %s for pon %u tid %u\n",
+                    __FUNCTION__, bcm_errmsg(sdk_rc), p_service_cfg->pon_port, p_service_cfg->tunnel_id);
+
+        /* Continue cleanup, don't halt processing because of this error */
+    }
+
+    /* Free the voq ID to the free pool */
+    if (ds_pon_chan == BAL_BCM_SCHED_PON_CHAN_10G)
+    {
+        bal_sw_dpp_qos_free_flow_id(&gp_bal_bcm_qos_cfg->flow_id_pool_10g, &p_service_cfg->ds_qos.voq_flow_id);
+    }
+    else
+    {
+        bal_sw_dpp_qos_free_flow_id(&gp_bal_bcm_qos_cfg->flow_id_pool_1g, &p_service_cfg->ds_qos.voq_flow_id);
+    }
+}
+
+/**
+ * @brief Clear statistics for a VOQ
+ *
+ * This function is used to clear VOQ counters
+ *
+ * @param unit       SDK unit number
+ * @param gport      VOQ gport PON port number
+ *
+ */
+void bal_sw_dpp_qos_clear_voq_stats(int unit, bcm_gport_t gport)
+{
+    int cosq;
+
+    /* Clear all VOQ counters for the VOQ group */
+    for (cosq = 0; cosq < BAL_BCM_QOS_QUEUES_PER_LLID; cosq++)
+    {
+        bcm_cosq_gport_stat_set(unit, gport, cosq, bcmCosqGportReceivedBytes, 0);
+        bcm_cosq_gport_stat_set(unit, gport, cosq, bcmCosqGportReceivedPkts, 0);
+        bcm_cosq_gport_stat_set(unit, gport, cosq, bcmCosqGportEnqueuedBytes, 0);
+        bcm_cosq_gport_stat_set(unit, gport, cosq, bcmCosqGportEnqueuedPkts, 0);
+        bcm_cosq_gport_stat_set(unit, gport, cosq, bcmCosqGportDroppedBytes, 0);
+        bcm_cosq_gport_stat_set(unit, gport, cosq, bcmCosqGportDroppedPkts, 0);
+    }
+}
+
+/**
+ * @brief Display the qos configuration for each on the console (stdout)
+ */
+void bal_sw_dpp_print_all_port_qos(int unit)
+{
+    bal_sw_dpp_port_qos_cfg *p_port_qos = NULL;
+    uint8_t port_num;
+    uint8_t pon_chan;
+    bcm_gport_t e2e_pon_gport;
+    bcm_gport_t e2e_parent_gport;
+    uint32_t min, flags;
+    uint32_t bandwidth;
+    int32_t max_burst;
+    int32_t mode;
+    int32_t weight;
+    uint8_t wfq_lvl;
+
+    /* Display header */
+    printf("Port\\Chan\tgport\t\tRate (kbps)\tMaxBurst (bytes)\tWeight\n");
+    printf("---------\t-----\t\t-----------\t----------------\t------\n");
+
+    for (port_num=BAL_PON_PORT_START; port_num<=BAL_PON_PORT_END; port_num++)
+    {
+        /* Display Port info */
+
+
+        BCM_COSQ_GPORT_E2E_PORT_SET(e2e_pon_gport, port_num);
+
+        if (BCM_E_NONE == bcm_fabric_port_get(unit,
+                                              e2e_pon_gport,
+                                              0,
+                                              &e2e_parent_gport))
+        {
+            bandwidth = 0;
+            max_burst = 0;
+            weight = 0;
+
+            bcm_cosq_gport_bandwidth_get(unit,
+                                         e2e_parent_gport,
+                                         0,
+                                         &min,
+                                         &bandwidth,
+                                         &flags);
+
+            printf("Port %u\t0x%08X\t%11u\t%16d\t%6d\n",
+                   port_num,
+                   0,
+                   bandwidth,
+                   0,
+                   0);
+
+        }
+
+        /* Display PON channel configuration */
+        for (pon_chan = 0; pon_chan < BAL_BCM_SCHED_PON_CHAN_NUM; pon_chan++)
+        {
+            p_port_qos = &gp_bal_bcm_qos_cfg->pon[port_num][pon_chan];
+
+            bandwidth = 0;
+            max_burst = 0;
+            weight = 0;
+
+            /* Bandwidth (rate) */
+            bcm_cosq_gport_bandwidth_get(unit,
+                                         p_port_qos->pon_chan_scheduler,
+                                         0,
+                                         0,
+                                         &bandwidth,
+                                         0);
+
+            /* Max Burst */
+            bcm_cosq_control_get(unit,
+                                 p_port_qos->pon_chan_scheduler,
+                                 0,
+                                 bcmCosqControlBandwidthBurstMax,
+                                 &max_burst);
+
+            printf("%9s\t0x%08X\t%11u\t%16d\t%6d\n",
+                   (pon_chan == BAL_BCM_SCHED_PON_CHAN_10G) ? "10G" : "1G",
+                   p_port_qos->pon_chan_scheduler,
+                   bandwidth,
+                   max_burst,
+                   weight);
+
+            printf("%9s\t0x%08X\t%11u\t%16d\t%6d\n",
+                   "MIN",
+                   p_port_qos->pon_chan_scheduler,
+                   0,
+                   0,
+                   0);
+
+            if (p_port_qos->sched_type == BAL_BCM_SCHED_TYPE_SP)
+            {
+                printf("%9s\t0x%08X\t%11u\t%16d\t%6d\n",
+                       "    MAX (SP)",
+                       p_port_qos->sp_scheduler,
+                       0,
+                       0,
+                       0);
+            }
+            else
+            {
+                printf("%9s\t0x%08X\t%11u\t%16d\t%6d\n",
+                       "    MAX (WFQ)",
+                       0,
+                       0,
+                       0,
+                       0);
+
+                printf("    WFQ weight [");
+                for (wfq_lvl=0; wfq_lvl<BAL_BCM_SCHED_WFQ_PRI_NUM; wfq_lvl++)
+                {
+                    bcm_cosq_gport_sched_get(unit,
+                                             p_port_qos->wfq_scheduler[wfq_lvl],
+                                             0,
+                                             &mode,
+                                             &weight);
+
+                    printf("w%u=%u(%u)", wfq_lvl, p_port_qos->pon_chan_weight_cfg[wfq_lvl], weight);
+
+                    if (wfq_lvl != BAL_BCM_SCHED_WFQ_PRI_NUM - 1)
+                    {
+                        printf(", ");
+                    }
+                }
+                printf("]\n");
+
+                printf("    WFQ gports [");
+                for (wfq_lvl=0; wfq_lvl<BAL_BCM_SCHED_WFQ_PRI_NUM; wfq_lvl++)
+                {
+                    printf("w%u=0x%08X", wfq_lvl, p_port_qos->wfq_scheduler[wfq_lvl]);
+
+                    if (wfq_lvl != BAL_BCM_SCHED_WFQ_PRI_NUM - 1)
+                    {
+                        printf(", ");
+                    }
+                }
+                printf("]\n");
+            }
+        }
+
+        printf("\n");
+    }
+}
+
+/**
+ * @brief Display the Flow/VOQ ID pool information
+ */
+void bal_sw_dpp_qos_print_flowid_pool(int unit)
+{
+    bal_sw_dpp_qos_flowid_pool_entry *p_pool_entry = NULL;
+    uint8_t count, free_count;
+    int sdkVal;
+
+    printf("\nvoq ID Information:\n");
+    printf("  Min 10G voq ID = %u\n", DEFAULT_QOS_VOQ_BASE_10G);
+    printf("  Max 10G voq ID = %u\n", DEFAULT_QOS_VOQ_MAX_10G);
+    printf("  Min 1G voq ID = %u\n", DEFAULT_QOS_VOQ_BASE_1G);
+    printf("  Max 1G voq ID = %u\n", DEFAULT_QOS_VOQ_MAX_1G);
+    bcm_fabric_control_get(unit, bcmFabricQueueMin, &sdkVal);
+    printf("  Min VOQ ID = %d\n", sdkVal);
+    bcm_fabric_control_get(unit ,bcmFabricQueueMax, &sdkVal);
+    printf("  Max VOQ ID = %d\n", sdkVal);
+
+    printf("\n10G voq ID Table Info:\n");
+    printf("  next_flow_id_value = %u\n", gp_bal_bcm_qos_cfg->flow_id_pool_10g.next_flow_id_value);
+    printf("  max_value = %u\n", gp_bal_bcm_qos_cfg->flow_id_pool_10g.max_value);
+    printf("  Free 10g voq IDs = ");
+
+    printf("  ");
+    count = 0;
+    free_count = 0;
+    TAILQ_FOREACH(p_pool_entry, &gp_bal_bcm_qos_cfg->flow_id_pool_10g.free_table, entry)
+    {
+        printf("%d, ", p_pool_entry->flow_id);
+
+        if (count < 15)
+        {
+            count++;
+        }
+        else
+        {
+            printf("\n  ");
+            count = 0;
+        }
+        free_count++;
+    }
+    printf("\n");
+    printf("  Number of Free 10g voq IDs = %d\n", free_count);
+
+    printf("\n1G voq ID Table Info:\n");
+    printf("  next_flow_id_value = %u\n", gp_bal_bcm_qos_cfg->flow_id_pool_1g.next_flow_id_value);
+    printf("  max_value = %u\n", gp_bal_bcm_qos_cfg->flow_id_pool_1g.max_value);
+    printf("  Free 1g voq IDs = ");
+
+    printf("  ");
+    count = 0;
+    free_count = 0;
+    TAILQ_FOREACH(p_pool_entry, &gp_bal_bcm_qos_cfg->flow_id_pool_1g.free_table, entry)
+    {
+        printf("%d, ", p_pool_entry->flow_id);
+
+        if (count < 15)
+        {
+            count++;
+        }
+        else
+        {
+            printf("\n  ");
+            count = 0;
+        }
+        free_count++;
+    }
+    printf("\n");
+    printf("  Number of Free 1g voq IDs = %d\n", free_count);
+}
+
+#endif  /* TEST_SW_UTIL_LOOPBACK */
+
+/*@}*/
diff --git a/bal_release/src/core/util/switch/dpp/bal_dpp_qos.h b/bal_release/src/core/util/switch/dpp/bal_dpp_qos.h
new file mode 100644
index 0000000..28c7e36
--- /dev/null
+++ b/bal_release/src/core/util/switch/dpp/bal_dpp_qos.h
@@ -0,0 +1,458 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file bal_dpp_qos.h
+ * @brief BAL Switch Util QoS configuration API
+ *
+ * This include file contains the data structures and API for
+ * configuring and managing Quality of Service (QoS) for services on
+ * DPP (DUNE Packet Processor).
+ *
+ *
+ */
+
+/*@{*/
+
+#ifndef	_BAL_DPP_QOS_H_
+#define	_BAL_DPP_QOS_H_
+
+/* --- project includes --- */
+
+#include "flow_fsm.h"
+
+/* --- local static constants ---*/
+
+/**
+ * @brief Value representing 10G in units of kbps
+ */
+#define BAL_BCM_QOS_10G_kbps 10000000
+
+/**
+ * @brief Value representing 2G (Turbo Mode) in units of kbps
+ */
+#define BAL_BCM_QOS_2G_kbps   2000000
+
+/**
+ * @brief Value representing 1G in units of kbps
+ */
+#define BAL_BCM_QOS_1G_kbps   1000000
+
+/**
+ * @brief Scheduler weight for 10G port scheduler
+ */
+#define BAL_BCM_SCHED_WEIGHT_10G 10
+
+/**
+ * @brief Scheduler weight for 1G port scheduler when Turbo Mode is enabled
+ */
+#define BAL_BCM_SCHED_WEIGHT_2G 2
+
+/**
+ * @brief Scheduler weight for 1G port scheduler (when Turbo Mode is disabled)
+ */
+#define BAL_BCM_SCHED_WEIGHT_1G 1
+
+/**
+ * @brief Scheduler weight used for MIN Rate schedulers
+ */
+#define BAL_BCM_SCHED_WEIGHT_MIN_RATE  1
+
+/**
+ * @brief Scheduler weight used for MAX Rate schedulers
+ */
+#define BAL_BCM_SCHED_WEIGHT_MAX_RATE  1
+
+/**
+ * @brief Number of PON port schedulers
+ */
+#define BAL_BCM_QOS_NUM_PON_PORTS 16
+
+/**
+ * @brief PON port Max value as defined in config.bcm
+ */
+#define BAL_BCM_MAX_PON_NUM 16
+
+/**
+ * @brief Number of queues per PON Link (LLID)
+ */
+#define BAL_BCM_QOS_QUEUES_PER_LLID 4
+
+/**
+ * @brief Default CoS level for untagged frames for 10G queues
+ */
+#define BAL_BCM_QOS_UNTAGGED_DEFAULT_COS_10G 0
+
+/**
+ * @brief Default CoS level for untagged frames for 1G queues
+ */
+#define BAL_BCM_QOS_UNTAGGED_DEFAULT_COS_1G 4
+
+/**
+ * @brief Size of ICT and Shared Vlan tag overhead (in bytes) 
+ */
+#define BAL_BCM_QOS_SINGLE_VLAN_TAG_HDR_SIZE 4
+
+/**
+ * @brief Base value for VOQ IDs assigned to the 1G channel
+ *
+ * All VOQ IDs configured on the 1G channel are configured with an
+ * ID value of 0x4000 (16384) and larger. 
+ */
+#define BAL_BCM_QOS_VOQ_ID_1G_BASE 0x4000
+
+/**
+ * @brief WFQ maximum value for a weight
+ */
+#define BAL_BCM_SCHED_WFQ_MAX_WEIGHT 4096
+
+/**
+ * @brief Number of WFQ scheduling priority levels
+ */
+#define BAL_BCM_SCHED_WFQ_PRI_NUM 8
+
+/**
+ * @brief Default rate for PON port shaper in kbps (12.5Gbps)
+ */
+#define BAL_BCM_QOS_DEFAULT_PORT_RATE 12500000
+
+/**
+ * @brief Default rate for 10G PON channel shaper in kbps (10.25Gbps)
+ *
+ * The extra 0.25 Gbps allows for some overhead (flow control frames, etc.)
+ */
+#define BAL_BCM_QOS_DEFAULT_10G_CHAN_RATE 10250000
+
+/**
+ * @brief Default rate for 1G PON channel shaper in kbps (2.25Gbps)
+ *
+ * This is set to 2G to allow for Turbo Mode configurations.
+ *
+ * The extra 0.25 Gbps allows for some overhead (flow control frames, etc.)
+ */
+#define BAL_BCM_QOS_DEFAULT_1G_CHAN_RATE 2250000
+
+/**
+ * @brief Credit adjustment to account for scheduler overhead (percentage)
+ *
+ * The adjustment is five percent based on the recommendation from the
+ * Dune team.
+ */
+#define BAL_BCM_QOS_CREDIT_RATE_ADJ 0.05
+
+/**
+ * @brief Shaper adjustment to account for scheduler overhead (percentage)
+ *
+ * The adjustment is one percent based on the recommendation from the
+ * Dune team.
+ */
+#define BAL_BCM_QOS_SHAPER_RATE_ADJ 0.01
+
+/**
+ * @brief Default maximum bust size for PON port shaper in bytes (0 = disabled)
+ */
+#define BAL_BCM_QOS_DEFAULT_MAX_BURST 0
+
+/**
+ * @brief PFC flow control priority value for the 10G channel
+ */
+#define BAL_BCM_QOS_10G_CHAN_PFC 0
+
+/**
+ * @brief PFC flow control priority value for the 1G channel
+ */
+#define BAL_BCM_QOS_1G_CHAN_PFC 1
+
+/**
+ * @brief First logical PON port number
+ */
+#define BAL_PON_PORT_START  0
+
+/**
+ * @brief Last logical PON port number
+ */
+#define BAL_PON_PORT_END    7
+
+/**
+ * @brief The total number of PON ports
+ */
+#define NUM_PON_PORTS  (BAL_PON_PORT_END - BAL_PON_PORT_START + 1)
+
+/**
+ * @brief Default DPP header size used by scheduler and rate
+ * calculations.
+ */
+#define DEFAULT_QOS_DPP_PKT_HDR_SIZE 19 /* bytes */
+
+/**
+ * @brief Size of the Dune PP header used to report the Flow ID (for
+ * QoS) in packets trapped to the CPU.
+ */
+#define BAL_BCM_DPP_FLOWID_HDR_SIZE 5
+
+/**
+ * @brief Size of ICT and Shared Vlan tag overhead (in bytes) 
+ */
+#define BAL_BCM_QOS_SINGLE_VLAN_TAG_HDR_SIZE 4
+
+
+/**
+ * @brief Default VOQ Identifier Base Value for 10G flows
+ *
+ * 10G VOQ/Flow IDs can range from 3000..16383. This means the blocks
+ * will be allocated in groups of four as follows.
+ *
+ *   blk 1 = 3000, 3001, 3002, 3003
+ *   blk 2 = 3004, 3005, 3006, 3007
+ *   ...
+ *   blk last = 16380, 16381, 16382, 16383
+ *
+ * This means that the last ID used to allocate a 10G VOQ group will
+ * be 16380.
+ *
+ * VOQ/flow IDs start at 3000 because the SDK assigns ID values
+ * between 0..2000+ to port queues.
+ */
+#define DEFAULT_QOS_VOQ_BASE_10G 3000
+
+/**
+ * @brief Default VOQ Identifier Maximum Value for 10G flows
+ *
+ * The last available value for 10G flows is 16384 - 4.
+ */
+#define DEFAULT_QOS_VOQ_MAX_10G 16380
+
+/**
+ * @brief Default VOQ Identifier Base Value for 1G flows
+ *
+ * 1G VOQ/Flow IDs can range from 16384..32767. This means the blocks
+ * will be allocated in groups of four as follows.
+ *
+ *   blk 1 = 16384, 16385, 16386, 16387
+ *   blk 2 = 16388, 16389, 16390, 16392
+ *   ...
+ *   blk last = 32764, 32765, 32766, 32767
+ *
+ * This means that the last ID used to allocate a 1G VOQ group will be
+ * 32764.
+ */
+#define DEFAULT_QOS_VOQ_BASE_1G 16384
+
+/**
+ * @brief Default VOQ Identifier Maximum Value for 1G flows
+ *
+ * The last available value for 1G flows is 32768 - 4.
+ */
+#define DEFAULT_QOS_VOQ_MAX_1G 32764
+
+/**
+ * @brief Get the PP port number for the specified PON port and
+ * channel (10G vs. 1G)
+ */
+#define BAL_BCM_GET_PP_PORT(pon, chan) ((pon) + (NUM_PON_PORTS * (chan)))
+
+/**
+ * @brief PON channel (a.k.a speed, 10G vs. 1G)
+ *
+ * The 1G PON channel value is also used to represent 2G Turbo Mode
+ * when enabled.
+ */
+typedef enum bal_sw_dpp_qos_sched_pon_chan
+{
+    BAL_BCM_SCHED_PON_CHAN_10G = 0, /**< 10G PON channel */
+    BAL_BCM_SCHED_PON_CHAN_1G  = 1, /**< 1G PON channel */
+    BAL_BCM_SCHED_PON_CHAN_NUM
+} bal_sw_dpp_qos_sched_pon_chan;
+
+/**
+ * @brief SLA Type (MIN vs. MAX)
+ */
+typedef enum bal_sw_dpp_qos_sched_sla_type
+{
+    BAL_BCM_SCHED_SLA_MIN_RATE = 0, /**< MIN Rate */
+    BAL_BCM_SCHED_SLA_MAX_RATE = 1, /**< MAX Rate */
+    BAL_BCM_SCHED_SLA_TYPE_NUM
+} bal_sw_dpp_qos_sched_sla_type;
+
+/**
+ * @brief Scheduling Type
+ */
+typedef enum bal_sw_dpp_qos_sched_type
+{
+    BAL_BCM_SCHED_TYPE_SP  = 0, /**< Strict priority scheduling */
+    BAL_BCM_SCHED_TYPE_WFQ = 1, /**< Weighted Fair Queuing */
+    BAL_BCM_SCHED_TYPE_NUM
+} bal_sw_dpp_qos_sched_type;
+
+/**
+ * @brief SLA scheduler configuration
+ */
+typedef struct bal_sw_dpp_qos_sched_sla
+{
+    bcm_gport_t scheduler_gport;  /**< Scheduler object gport*/
+    bcm_gport_t parent_gport;     /**< Parent scheduler gport */
+    uint32_t rate;                    /**< Rate (or bandwidth) in Kbps */
+    uint32_t burst;                   /**< Max burst in Kbits */
+    uint8_t traffic_priority;          /**< Traffic priority */
+} bal_sw_dpp_qos_sched_sla;
+
+/**
+ * @brief QoS configuration for a PON Link (LLID)
+ */
+typedef struct bal_sw_dpp_llid_qos
+{
+    bal_sw_dpp_qos_sched_pon_chan pon_chan; /**< PON Channel (or speed) the link is connected to */
+    bal_sw_dpp_qos_sched_sla min;   /**< MIN Rate configuration */
+    bal_sw_dpp_qos_sched_sla max;   /**< MAX Rate configuration */
+    bcm_gport_t voq_connector_gport; /**< VOQ Connector gport  */
+    bcm_gport_t voq_gport;  /**< VOQ gport  */
+    int voq_flow_id;         /**< VOQ Flow ID */
+    int voq_id;             /**< VOQ ID */
+} bal_sw_dpp_llid_qos;
+
+/**
+ * @brief QoS configuration for a channelized PON port
+ */
+typedef struct bal_sw_dpp_port_qos_cfg
+{
+    bcm_gport_t mod_gport;         /**< MOD port for a channelized PON interface */
+    bal_sw_dpp_qos_sched_type sched_type;   /**< Scheduling type used on the PON channel (SP vs. WFQ) */
+    bcm_gport_t pon_chan_scheduler; /**< PON channel scheduler */
+    bcm_gport_t sp_scheduler;      /**< Strict Priority scheduler for MAX rates (EIRs) */
+    bcm_gport_t wfq_scheduler[BAL_BCM_SCHED_WFQ_PRI_NUM]; /**< WFQ+FQ schedulers for MAX rates (EIRs) */
+    int32_t pon_chan_weight_cfg[BAL_BCM_SCHED_WFQ_PRI_NUM];     /**< Weight configuration for WFQ scheduler */
+} bal_sw_dpp_port_qos_cfg;
+
+/**
+ * @brief Flow/VOQ ID Pool Entry
+ */
+typedef struct bal_sw_dpp_qos_flowid_pool_entry
+{
+    uint32_t  flow_id;    /**< Flow/VOQ ID value */
+    TAILQ_ENTRY(bal_sw_dpp_qos_flowid_pool_entry) entry; /**< Link into the pool table */
+} bal_sw_dpp_qos_flowid_pool_entry;
+
+/**
+ * @brief Flow/VOQ ID resource pool
+ */
+typedef struct bal_sw_dpp_qos_flowid_pool
+{
+    uint32_t next_flow_id_value; /**< Next flow ID to be allocated */
+    uint32_t max_value;        /**< Maximum value for the flow IDs in this pool */
+    TAILQ_HEAD(bal_sw_dpp_qos_flowid_pool_free_head, bal_sw_dpp_qos_flowid_pool_entry) free_table; /**< Flow/VOQ ID free pool */
+} bal_sw_dpp_qos_flowid_pool;
+
+/**
+ * @brief DML BCM APP QoS configuration context definition
+ */
+typedef struct bal_sw_qos_cfg
+{
+    int32_t mod_id; /**< Module ID for this ARAD device */
+    int32_t qos_port_map_id; /**< QoS Port Map Identifier */
+    bal_sw_dpp_port_qos_cfg pon[BAL_BCM_QOS_NUM_PON_PORTS][BAL_BCM_SCHED_PON_CHAN_NUM];  /**< DS QoS configuration for channelized PON ports */
+    bal_sw_dpp_qos_flowid_pool flow_id_pool_10g; /**< Flow/VOQ ID resource pool for 10G flows */
+    bal_sw_dpp_qos_flowid_pool flow_id_pool_1g;  /**< Flow/VOQ ID resource pool for 1G flows */
+    int num_channels_per_pon; 
+} bal_sw_qos_cfg;
+
+/**
+ * @brief WFQ scheduling configuration
+ *
+ * This structure is used to configure weight values per scheduler
+ * level (i.e., DOCSIS Traffic Priority). The range of weight values
+ * is 0:4K, where values 1:4K are used for WFQ scheduling and a value
+ * of '0' is used for strict priority.
+ */
+typedef struct bal_sw_dpp_qos_wfq_cfg
+{
+    uint32_t weights[BAL_BCM_SCHED_WFQ_PRI_NUM];
+} bal_sw_dpp_qos_wfq_cfg;
+
+extern bal_sw_qos_cfg *gp_bal_bcm_qos_cfg;
+
+/**
+ * @brief Max Number of NNI ports
+ */
+#define BAL_BCM_QOS_NUM_NNI_PORTS 16
+
+/**
+ * @brief Service Configuration Entry Type
+ *
+ * The type of service configuration that the DmlBcmServiceCfgT entry
+ * represents.
+ */
+typedef enum bal_sw_service_type
+{
+    BAL_BCM_SVC_TYPE_NONE,  /**< None/uninitialized */
+    BAL_BCM_SVC_TYPE_ICT,   /**< Intra-chassis Tagged */
+    BAL_BCM_SVC_TYPE_IP,    /**< IP(HSD) */
+    BAL_BCM_SVC_TYPE_PB,    /**< MEF Provider Bridging (VLAN tagged) */
+    BAL_BCM_SVC_TYPE_SHVLAN,/**< Shared VLAN */
+    BAL_BCM_SVC_TYPE_LAST   /**< Number of bal_sw_service_type_t values */
+} bal_sw_service_type;
+
+/* --- forward declarations --- */
+
+typedef struct bal_sw_dpp_qos_service_cfg
+{
+    uint32_t bal_flow_id;
+    bcm_port_t pon_port;         /* logical port number from bal flow config */
+    uint32_t num_nni_gport;
+    bcm_gport_t nni_gport[BAL_BCM_QOS_NUM_NNI_PORTS];
+    uint32_t tunnel_id;
+    bal_sw_dpp_llid_qos ds_qos; 
+    bal_sw_service_type service_type;    
+} bal_sw_dpp_qos_service_cfg;
+
+
+/* --- function prototypes --- */
+
+bcmos_errno bal_sw_dpp_qos_init(int unit, bal_swapp_port_map_indx pon_mode);
+void        bal_sw_dpp_qos_cleanup(int unit);
+bcmos_errno bal_sw_dpp_port_qos_init(int unit, bcm_port_t pon_port, bal_sw_dpp_qos_sched_pon_chan pon_chan);
+void        bal_sw_dpp_port_qos_cleanup(int unit, bcm_port_t pon_port, bal_sw_dpp_qos_sched_pon_chan pon_chan);
+bcmos_errno bal_sw_dpp_qos_set_port_bandwidth(int unit, bcm_port_t pon_port, uint32_t bandwidth, uint32_t max_burst);
+bcmos_errno bal_sw_dpp_qos_set_portchan_bandwidth(int unit, bcm_port_t pon_port, bal_sw_dpp_qos_sched_pon_chan pon_chan, 
+                                    uint32_t bandwidth, uint32_t max_burst);
+bcmos_errno bal_sw_dpp_qos_set_ponchan_wfq_cfg(int unit, bcm_port_t pon_port,
+                                 bal_sw_dpp_qos_sched_pon_chan pon_chan, bal_sw_dpp_qos_wfq_cfg *p_wfq_cfg);
+bcmos_errno bal_sw_dpp_qos_set_llid_bandwidth(int unit, bal_sw_dpp_qos_service_cfg *p_service_cfg,
+                                 bal_sw_dpp_qos_sched_sla_type sla_type, uint32_t bandwidth, uint32_t max_burst);
+bcmos_errno bal_sw_dpp_llid_qos_config(int unit, bal_sw_dpp_qos_service_cfg *p_service_cfg_entry);
+bcmos_errno bal_sw_dpp_llid_set_qos_port_map(int unit, bal_sw_dpp_qos_service_cfg *p_service_cfg_entry);
+void        bal_sw_dpp_llid_qos_cleanup(int unit, bal_sw_dpp_qos_service_cfg *p_service_cfg_entry);
+void        bal_sw_dpp_qos_clear_voq_stats(int unit, bcm_gport_t gport);
+void        bal_sw_dpp_print_all_port_qos(int unit);
+void        bal_sw_dpp_qos_print_flowid_pool(int unit);
+
+#endif /* #ifndef _BAL_DPP_QOS_H_ */
+
+/*@}*/
diff --git a/bal_release/src/core/util/switch/dpp/bal_dpp_qos_map.c b/bal_release/src/core/util/switch/dpp/bal_dpp_qos_map.c
new file mode 100644
index 0000000..6614b7c
--- /dev/null
+++ b/bal_release/src/core/util/switch/dpp/bal_dpp_qos_map.c
@@ -0,0 +1,236 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file bal_dpp_qos_map.c
+ * @brief BAL Switch Util QoS map management API
+ *
+ * This file contains the data structures and functions for
+ * configuring and managing the pcp bits translation services for
+ * DUNE Pack Processor (DPP). 
+ *
+ * The pcp translation service is accomplished using ING ingress vlan translation API
+ * The API required a Qos map table for pcp translatin on a LIF.
+ * This file defines 15 pre-map tables for all known use cases.
+ *
+ * A set of utilities API are included for callers to determine which table to use
+ *
+ * ********************************************************************************
+ *
+ */
+
+/*@{*/
+#ifndef TEST_SW_UTIL_LOOPBACK
+
+#include <stdint.h> 
+
+#include "bcm_dev_log.h"
+#include "bcmos_errno.h"
+#include "bal_dpp_qos_map.h"
+
+#include "bal_switch_util.h"  /* for definition of log_id_sw_util */
+
+#include "bcm/error.h"
+#include "bcm/qos.h"
+
+#define BAL_BCM_PCP_MAP_NUM        15
+#define BAL_BCM_PCP_MAP_ENTRIES     8
+#define BAL_BCM_MAX_PCP_VALUE       7
+#define BAL_BCM_FIXED_PCP_MAP_NUM   8
+
+
+const int g_bal_bcm_qos_pcp_map[BAL_BCM_PCP_MAP_NUM][BAL_BCM_PCP_MAP_ENTRIES] =
+{
+    {0, 0, 0, 0, 0, 0, 0, 0},     /* 0-7 --> 0 */
+    {1, 1, 1, 1, 1, 1, 1, 1},     /* 0-7 --> 1 */
+    {2, 2, 2, 2, 2, 2, 2, 2},     /* 0-7 --> 2 */
+    {3, 3, 3, 3, 3, 3, 3, 3},     /* 0-7 --> 3 */
+    {4, 4, 4, 4, 4, 4, 4, 4},     /* 0-7 --> 4 */
+    {5, 5, 5, 5, 5, 5, 5, 5},     /* 0-7 --> 5 */
+    {6, 6, 6, 6, 6, 6, 6, 6},     /* 0-7 --> 6 */
+    {7, 7, 7, 7, 7, 7, 7, 7},     /* 0-7 --> 7 */
+    {1, 2, 3, 4, 5, 6, 7, 0},     /* 0-6 --> 1-7, 7  ->0    offset = 1 or -7 */
+    {2, 3, 4, 5, 6, 7, 0, 1},     /* 0-5 --> 2-7, 6-7->0-1  offset = 2 or -6 */
+    {3, 4, 5, 6, 7, 0, 1, 2},     /* 0-4 --> 3-7, 5-7->0-2  offset = 3 or -5 */
+    {4, 5, 6, 7, 0, 1, 2, 3},     /* 0-3 --> 4-7, 4-7->0-3  offset = 4 or -4 */
+    {5, 6, 7, 0, 1, 2, 3, 4},     /* 0-2 --> 5-7, 3-7->0-4  offset = 5 or -3 */
+    {6, 7, 0, 1, 2, 3, 4, 5},     /* 0-1 --> 6-7, 2-7->0-5  offset = 6 or -2 */
+    {7, 0, 1, 2, 3, 4, 5, 6},     /* 0   --> 7,   1-7->0-6  offset = 7 or -1 */  
+};
+
+static int g_bal_bcm_pcp_remark_map_id[BAL_BCM_PCP_MAP_NUM];
+
+/**************************************************************************/
+/**
+ * @brief Create the PCP remark mapping tables
+ *
+ * This function creates the mapping from PCP bits in the
+ * frames received by DPP to the internal priority in
+ * DPP. The created map id are used in the ingress vlan translation API
+ * to perform PCP bits replacement.
+ *
+ * 
+ * @param unit    SDK unit number
+ *
+ * @return bcmos_errno
+ *
+ **************************************************************************/                	
+bcmos_errno bal_sw_dpp_pcp_remark_maps_init(int unit)
+{
+    bcm_error_t sdk_rc = BCM_E_NONE;
+    bcm_qos_map_t l2_in_map;
+    int map_id, pcp;    
+    int32_t qos_map_id;
+
+  
+    for(map_id=0; map_id < BAL_BCM_PCP_MAP_NUM; map_id++)
+    {
+        /* in case anything goes wrong */
+        g_bal_bcm_pcp_remark_map_id[map_id] = BAL_BCM_INVALID_PCP_MAP_ID;
+        
+        /* Create a map object */
+        sdk_rc = bcm_qos_map_create(unit, BCM_QOS_MAP_INGRESS| BCM_QOS_MAP_L2_VLAN_PCP, &qos_map_id);
+        if (sdk_rc != BCM_E_NONE) 
+        {
+            /* Error */
+            BCM_LOG(ERROR, log_id_sw_util,
+                        "bcm_qos_map_create failed with %s\n",
+                         bcm_errmsg(sdk_rc));
+
+            return BCM_ERR_INTERNAL;
+        }
+
+        /* Create a mapping for each PCP bits value. */
+        for (pcp = 0; pcp < BAL_BCM_PCP_MAP_ENTRIES; pcp++) 
+        {         
+            bcm_qos_map_t_init(&l2_in_map);
+            
+            /* Ingress PCP/CoS value */
+            l2_in_map.pkt_pri = g_bal_bcm_qos_pcp_map[map_id][pcp];      
+ 
+            /* Set internal priority for this ingress pri */
+            l2_in_map.int_pri = pcp;
+            
+            /* Set color for this ingress Priority  */
+            l2_in_map.color = bcmColorGreen;
+            
+            sdk_rc = bcm_qos_map_add(unit, BCM_QOS_MAP_L2_OUTER_TAG|BCM_QOS_MAP_L2|BCM_QOS_MAP_L2_VLAN_PCP, &l2_in_map, qos_map_id);
+            if (sdk_rc != BCM_E_NONE) 
+            {
+                /* Error */
+                BCM_LOG(ERROR, log_id_sw_util,
+                            "bcm_qos_map_add failed with %s, for pcp %d\n",
+                             bcm_errmsg(sdk_rc), pcp);
+             
+                return BCM_ERR_INTERNAL;
+            }
+        
+        }
+
+        g_bal_bcm_pcp_remark_map_id[map_id] = qos_map_id;
+    }
+    return BCM_ERR_OK;
+}
+
+/**************************************************************************/
+/**
+ * @brief Retrieve PCP remark mapping table ID according to the translation
+ *
+ * This function retrieve the pre-created mapping table id associate with
+ * the translation.
+ * The created map id can be used in the ingress vlan translation API
+ * to perform PCP bits replacement.
+ *
+ * @param src_pcp    the pcp value that need to be translated, or -1 for DONTCARE
+ * @param dst_pcp    the translated pcp value
+ * @param p_map_id   pointer for the retrieved id
+ *
+ * @return bcmos_errno
+ *
+ **************************************************************************/
+bcmos_errno bal_sw_dpp_pcp_remark_map_get(int src_pcp, int dst_pcp, int *p_map_id)
+{
+    int offset;
+    unsigned int indx;
+    
+    if(dst_pcp < 0 || dst_pcp > BAL_BCM_MAX_PCP_VALUE)
+    {
+       BCM_LOG(ERROR, log_id_sw_util,
+            "%s(): invalid destination pcp = %d\n", __FUNCTION__, dst_pcp);
+        return BCM_ERR_PARM;
+    }
+    /* if source is DONTCARE, i.e map to a fixed PCP, use the first 8 map tables */
+    if(src_pcp == -1)
+    {
+        *p_map_id = g_bal_bcm_pcp_remark_map_id[dst_pcp];
+    }
+    else
+    {
+        if(src_pcp < 0 || src_pcp > BAL_BCM_MAX_PCP_VALUE)
+        {
+            BCM_LOG(ERROR, log_id_sw_util,
+                "%s(): invalid source pcp = %d\n", __FUNCTION__, src_pcp);
+            return BCM_ERR_PARM;
+        }
+        /* find out the offset between the src_pcp and dst_pcp */
+        offset = dst_pcp - src_pcp;
+        if (offset == 0)
+        {
+            BCM_LOG(ERROR, log_id_sw_util,
+                "%s(): source pcp %d == destination pcp %d\n", __FUNCTION__, src_pcp, dst_pcp);
+            return BCM_ERR_NOT_SUPPORTED;
+        }      
+        if (offset < 0)
+        {
+            /* see comments in the above map tables */
+            offset += BAL_BCM_PCP_MAP_ENTRIES;
+        }
+
+        indx = offset + BAL_BCM_FIXED_PCP_MAP_NUM - 1;
+        if(indx >= BAL_BCM_PCP_MAP_NUM)
+        {
+           BCM_LOG(ERROR, log_id_sw_util,
+                "%s(): something is wrong, invalid map index = %d\n", __FUNCTION__, indx);
+            return BCM_ERR_INTERNAL;
+        }
+        /* index is 0 based */
+        *p_map_id = g_bal_bcm_pcp_remark_map_id[indx];
+                    
+    }
+    
+    BCM_LOG(INFO, log_id_sw_util,
+            "%s(): pbits translate %d -> %d using bal qos map table %d, id 0x%x\n", __FUNCTION__, src_pcp, dst_pcp, indx, *p_map_id);
+    return BCM_ERR_OK;
+}
+
+#endif  /* TEST_SW_UTIL_LOOPBACK */
+
+/*@}*/
diff --git a/bal_release/src/core/util/switch/dpp/bal_dpp_qos_map.h b/bal_release/src/core/util/switch/dpp/bal_dpp_qos_map.h
new file mode 100644
index 0000000..a73e5b5
--- /dev/null
+++ b/bal_release/src/core/util/switch/dpp/bal_dpp_qos_map.h
@@ -0,0 +1,52 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file bal_dpp_qos_map.h
+ *
+ * @brief bal qos map service function header file for DUNE PACKET PROCESSOR
+ * 
+ */
+ 
+#ifndef  _BAL_DPP_QOS_MAP_H_
+#define  _BAL_DPP_QOS_MAP_H_
+/*@{*/
+
+#include "bcmos_errno.h"
+
+#define BAL_BCM_INVALID_PCP_MAP_ID   -1
+
+bcmos_errno bal_sw_dpp_pcp_remark_maps_init(int unit);
+bcmos_errno bal_sw_dpp_pcp_remark_map_get(int src_pcp, int dst_pcp, int *p_map_id);
+
+/*@}*/
+ 
+#endif /* _BAL_DPP_QOS_MAP_H */
diff --git a/bal_release/src/core/util/switch/dpp/bal_dpp_vswitch.c b/bal_release/src/core/util/switch/dpp/bal_dpp_vswitch.c
new file mode 100644
index 0000000..d281e1f
--- /dev/null
+++ b/bal_release/src/core/util/switch/dpp/bal_dpp_vswitch.c
@@ -0,0 +1,785 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+ /**
+ * @file bal_dpp_vswitch.c
+ * @brief BAL Switch util helper functions that handle vswitch service requests
+ * @addtogroup sw_util
+ */
+
+/*@{*/
+#include <bal_common.h>
+#include <bcm_dev_log.h>
+#include <bal_msg.h>
+#include <bal_utils_msg.h>
+#include "bcmos_errno.h"
+
+#ifndef TEST_SW_UTIL_LOOPBACK
+#include <bcm/types.h>
+#include <sal/core/libc.h>
+#ifndef sal_memset
+#define sal_memset memset
+#endif
+#include <bcm/port.h>
+#include <bcm/vlan.h>
+#include <bcm/error.h>
+#include <bcm/vswitch.h>
+
+#include "bal_switch_flow.h"
+#include "bal_dpp_vswitch.h"
+#include "bal_switch_util.h"
+
+/* A local link list to keep trak of virtual switch service */
+TAILQ_HEAD(bal_sw_vsi_list_head, bal_sw_vsi_service) g_swutil_vsi_list;
+
+/**
+ * @brief The vsi list init function prepare a link list to keep track of 
+ *        vsi service in the switch util
+ *
+ * @return error code
+ */
+bcmos_errno bal_sw_util_vsi_list_init(void)
+{
+    static uint32_t g_vsi_inited = 0;
+    if(g_vsi_inited == 0)
+    {
+        TAILQ_INIT(&g_swutil_vsi_list);
+        g_vsi_inited = 1;
+    }
+    return BCM_ERR_OK;
+}
+
+/**
+ * @brief The vsi list search function by LIF tag
+ *
+ * @param p_lif_tag a pointer to the packet tag that need to match the entry in the list
+ * @param p_svc_indx  a pointer to store the created service tag index within the vsi 
+ 
+ * @return pointer to an element in the list, NULL if failed
+ */
+static bal_sw_vsi_service *bal_sw_util_dpp_vsi_service_get_by_tag(bal_sw_lif_pkt_tag *p_lif_tag, uint32_t *p_svc_indx)
+{
+    bal_sw_vsi_service *p_entry, *p_temp;
+    int lif_match = 0, svc_idx;
+    
+    if(p_svc_indx == NULL)
+    { 
+        BCM_LOG(ERROR, log_id_sw_util, "call VSI service get tag with invalid parameter\n");
+        return NULL;
+    }
+    
+    /* clear the storage area */
+    *p_svc_indx = 0;
+    
+    TAILQ_FOREACH_SAFE(p_entry, &g_swutil_vsi_list, next_service, p_temp)
+    {  
+        for(svc_idx = 0; svc_idx < p_entry->num_tag; svc_idx++)
+        {            
+            if( p_entry->pkt_tag[svc_idx].type == p_lif_tag->type)
+            {
+                switch (p_lif_tag->type)
+                {
+                case BCMBAL_PKT_TAG_TYPE_SINGLE_TAG:
+                    if( p_lif_tag->o_vid == p_entry->pkt_tag[svc_idx].o_vid)
+                    {
+                        lif_match = 1;
+                    }   
+                    break;
+                case BCMBAL_PKT_TAG_TYPE_DOUBLE_TAG:
+                    if( p_lif_tag->o_vid == p_entry->pkt_tag[svc_idx].o_vid && p_lif_tag->i_vid == p_entry->pkt_tag[svc_idx].i_vid)
+                    {
+                        lif_match = 1;
+                    }   
+                    break;
+                case BCMBAL_PKT_TAG_TYPE_UNTAGGED:
+                    lif_match = 1;
+                    break;
+                default:
+                    BCM_LOG(ERROR, log_id_sw_util, "Unsupported packet type %d in LIF info\n", p_lif_tag->type);
+                    return NULL;            
+                }
+                if(lif_match)
+                {
+                    if(p_svc_indx)
+                    {
+                        *p_svc_indx = svc_idx;
+                    }
+                    return p_entry;
+                }
+            }
+        }
+    }
+
+    /* if reach the end of the list, TAILQ_FOREACH_SAFE set the p_entry to NULL */
+    return NULL;
+   
+}
+
+/*
+ * @brief The vsi list insert function
+ *
+ * @param entry  the vsi element to be added in the link list
+ * @return error code
+*/
+static bal_sw_vsi_service *bal_sw_util_vsi_list_insert(bal_sw_vsi_service  *p_entry)
+{
+    bal_sw_vsi_service *p_new_entry;
+
+    p_new_entry = bcmos_calloc(sizeof(bal_sw_vsi_service));
+    if(NULL == p_new_entry)
+    {
+        BCM_LOG(ERROR, log_id_sw_util, "VSI list insert out of memory\n");
+        return NULL;
+    }
+    *p_new_entry = *p_entry;
+    TAILQ_INSERT_TAIL(&g_swutil_vsi_list, p_new_entry, next_service);
+    return p_new_entry;
+}
+
+/*
+ * @brief The vsi list remove function
+ *
+ * @param p_entry Pointer to the vsi element in the link list result from the search functions
+ * @return error code
+*/
+static bcmos_errno bal_sw_util_vsi_list_remove(bal_sw_vsi_service *p_entry)
+{
+    TAILQ_REMOVE(&g_swutil_vsi_list, p_entry, next_service);
+    bcmos_free(p_entry);
+    return BCM_ERR_OK;
+}
+
+/**
+ * @brief The vsi create function create a virtual switch service that contains ingress LIF 
+ *        and virtual switch. This service can later be connected to multiple egress LIF of multiple FLOWs.  
+ *        The function use the source port and vid information in the bcmbal_flow_cfg as input
+ *        The pointer of the created vsi will be returned
+ *        Since a vsi can provide multiple srevices, the index to the created service tag is return here
+ *  
+ * @param unit        switch device id 
+ * @param p_flow      a pointer to the flow definition which the created service will be based on
+ * @param p_svc_indx  a pointer to store the created service tag index within the vsi  
+ * 
+ * @return pointer to the vsi service list entry, NULL if operation failed
+ */
+
+bal_sw_vsi_service *bal_sw_util_dpp_vsi_service_create(int unit, bcmbal_flow_cfg *p_flow, uint32_t *p_svc_indx)
+{
+    int rv;
+    bal_sw_lif_pkt_tag svc_pkt_tag = {0};
+    bal_sw_vsi_service *p_vsi_service, vsi_svc_elm;
+    bcm_vlan_t vsi;
+    int multicast_id, flags;
+    
+    /* p_flow can be NULL when create vswitch for multicast group, service tag will be added when multicast flow is created */
+    if (p_flow == NULL) 
+    {
+        BCM_LOG(INFO, log_id_sw_util, "create vsi service with no service tag \n");
+        p_vsi_service = NULL;
+    }
+    else
+    {
+        /* find out if the vsi service already exist */
+        svc_pkt_tag.type = p_flow->data.classifier.pkt_tag_type;
+        svc_pkt_tag.o_vid = p_flow->data.classifier.o_vid;
+        svc_pkt_tag.i_vid = p_flow->data.classifier.i_vid;
+        p_vsi_service = bal_sw_util_dpp_vsi_service_get_by_tag(&svc_pkt_tag, p_svc_indx);
+    }
+    
+    /* if no service, create one */
+    if(p_vsi_service == NULL)
+    {
+        /* initialize link list vsi element */
+        memset(&vsi_svc_elm, 0, sizeof (bal_sw_vsi_service));
+        /* if flow (service tag) is specified, fill in the basic info, since it is new, add it to the first tag */
+        if(p_flow)
+        {
+            vsi_svc_elm.pkt_tag[0] = svc_pkt_tag;
+            vsi_svc_elm.num_tag = 1;
+        }
+        
+        rv = bcm_vswitch_create(unit, &vsi);
+        if (rv != BCM_E_NONE)
+        {
+            BCM_LOG(ERROR, log_id_sw_util, "bcm_vswitch_create failed %d \n", rv);
+            return NULL;            
+        }
+        else
+        {
+            BCM_LOG(INFO, log_id_sw_util, " vswitch 0x%x created\n", vsi);
+        }
+        vsi_svc_elm.vswitch = vsi;
+        /* create two multicast groups (a.k.a. flooding group), one for upstream and one for downstream
+           clean up first, it is OK there is nothing to destroy */
+
+        /* Create the multicast group used for upstream flooding
+         * (PON-->NNI). For the upstream mcast group, the QAX hardware
+         * requires the ID to be set to a value equal to the VSI ID
+         * created above.
+         */
+        multicast_id = vsi + BAL_DPP_US_FLOOD_OFFSET;
+        rv = bcm_multicast_group_is_free(unit, multicast_id);
+        if (rv == BCM_E_EXISTS)
+        {
+            rv = bcm_multicast_destroy(unit, multicast_id);
+            if (rv != BCM_E_NONE)
+            {
+                BCM_LOG(ERROR, log_id_sw_util, "US: bcm_multicast_destroy 0x%x failed %d \n", multicast_id, rv);
+                bcm_vswitch_destroy(unit, vsi);
+                return NULL;                
+            }
+        }
+        /* flags = ingress replication + fixed id + L2 multicast */
+        flags = BCM_MULTICAST_INGRESS_GROUP | BCM_MULTICAST_WITH_ID | BCM_MULTICAST_TYPE_L2;
+        rv = bcm_multicast_create(unit, flags, &multicast_id);
+        if (rv != BCM_E_NONE)
+        {
+           BCM_LOG(ERROR, log_id_sw_util, "US: in bcm_multicast_create 0x%x w ingress failed %d \n", multicast_id, rv);
+           bcm_vswitch_destroy(unit, vsi);
+           return NULL;           
+        }
+        else
+        {
+            BCM_LOG(INFO, log_id_sw_util, "US: vswitch flood group 0x%x created\n", multicast_id);
+        }
+        vsi_svc_elm.us_flood_grp_id = multicast_id;
+
+        /* downstream flooding group */
+        multicast_id = vsi + BAL_DPP_DS_FLOOD_OFFSET;
+        rv = bcm_multicast_group_is_free(unit, multicast_id);
+        if (rv == BCM_E_EXISTS)
+        {
+            rv = bcm_multicast_destroy(unit, multicast_id);
+            if (rv != BCM_E_NONE)
+            {
+                BCM_LOG(ERROR, log_id_sw_util, "DS: bcm_multicast_destroy 0x%x failed %d \n", multicast_id, rv);
+                bcm_multicast_destroy(unit, vsi_svc_elm.us_flood_grp_id);
+                bcm_vswitch_destroy(unit, vsi);
+                return NULL;                
+            }
+        }
+        flags = BCM_MULTICAST_INGRESS_GROUP | BCM_MULTICAST_WITH_ID | BCM_MULTICAST_TYPE_L2;
+        rv = bcm_multicast_create(unit, flags, &multicast_id);
+        if (rv != BCM_E_NONE)
+        {
+           BCM_LOG(ERROR, log_id_sw_util, "DS: in bcm_multicast_create 0x%x w ingress 2 failed %d \n", multicast_id, rv);
+           bcm_multicast_destroy(unit, vsi_svc_elm.us_flood_grp_id);
+           bcm_vswitch_destroy(unit, vsi);
+           return NULL;           
+        }
+        else
+        {
+            BCM_LOG(INFO, log_id_sw_util, "DS: vswitch flood group 0x%x created\n", multicast_id);
+        }
+        vsi_svc_elm.ds_flood_grp_id = multicast_id;
+                
+        /* add vsi service to the vsi list */
+        p_vsi_service = bal_sw_util_vsi_list_insert(&vsi_svc_elm);
+        if (p_vsi_service == NULL)
+        {
+            BCM_LOG(ERROR, log_id_sw_util, "VSI: fail to insert new vsi to the service list\n");
+            bcm_multicast_destroy(unit, vsi_svc_elm.us_flood_grp_id);
+            bcm_multicast_destroy(unit, vsi_svc_elm.ds_flood_grp_id);
+            bcm_vswitch_destroy(unit, vsi_svc_elm.vswitch);   
+            return NULL; 
+        }
+         p_vsi_service->use_count = 1;
+    } 
+    else
+    {
+        p_vsi_service->use_count++;
+    }         
+
+    return p_vsi_service;
+}
+
+/**
+ * @brief The vsi destroy function free up Hardare resource of a virtual switch. 
+ *        It also remove the vsi fromt the service list
+ *
+ * @param unit        switch device id 
+ * @param p_vsi_svc   a pointer to the vsi service
+ * 
+ * @return error code
+ */
+
+bcmos_errno bal_sw_util_dpp_vsi_service_destroy(int unit, bal_sw_vsi_service *p_vsi_svc)
+{
+    int rv;
+    
+     /* input validation */
+    if (p_vsi_svc == NULL) 
+    {
+        BCM_LOG(ERROR, log_id_sw_util, "destroy vsi service with invalid parameters \n");
+        return BCM_ERR_PARM;
+    }
+    
+    /* only clean up when no more users */
+    if(p_vsi_svc->use_count > 1)
+    {
+        p_vsi_svc->use_count--;
+        return BCM_ERR_OK;   
+    }
+    
+    /* free up HW resource, continue even if any failed */
+    rv = bcm_multicast_destroy(unit, p_vsi_svc->us_flood_grp_id);
+    if (rv != BCM_E_NONE)
+    {
+        BCM_LOG(WARNING, log_id_sw_util, "bcm_multicast_destroy US 0x%x failed %d \n", p_vsi_svc->us_flood_grp_id, rv);
+    }
+    rv = bcm_multicast_destroy(unit, p_vsi_svc->ds_flood_grp_id);
+    if (rv != BCM_E_NONE)
+    {
+        BCM_LOG(WARNING, log_id_sw_util, "bcm_multicast_destroy DS 0x%x failed %d \n", p_vsi_svc->ds_flood_grp_id, rv);
+    }
+    rv = bcm_vswitch_destroy(unit, p_vsi_svc->vswitch);
+    if (rv != BCM_E_NONE)
+    {
+        BCM_LOG(WARNING, log_id_sw_util, "bcm_multicast_destroy vswitch 0x%x failed %d \n", p_vsi_svc->vswitch, rv);
+    }    
+    
+    /* remove from the service list */
+    rv = bal_sw_util_vsi_list_remove(p_vsi_svc);
+    if (rv != BCM_E_NONE)
+    {
+        BCM_LOG(WARNING, log_id_sw_util, "bcm_multicast_destroy VSI entry failed %d \n", rv);
+    }
+    
+    return BCM_ERR_OK;
+}
+
+
+/**
+ * @brief The vsi port_find function search a port from the port list of a vsi service entry. 
+ *
+ * @param p_vsi_svc   a pointer to the vsi service
+ * @param svc_tag_indx an index to the service within the vsi that a port need to be searched
+ * @param port        the ingress port that needs to be located
+ * @param idx         pointer to a storage where the array index of the found port will be return
+ * 
+ * @return           error code
+ */
+
+static bcmos_errno bal_sw_util_dpp_vsi_service_port_find(bal_sw_vsi_service *p_vsi_svc, uint32_t svc_tag_indx, uint32_t port, uint32_t *idx)
+{
+    int i;
+    
+    /* input validation */
+    if (p_vsi_svc == NULL) 
+    {
+        BCM_LOG(ERROR, log_id_sw_util, "vsi service port find function with invalid parameters \n");
+        return BCM_ERR_PARM;
+    }
+    /* loop through the list */
+    for( i=0; i<p_vsi_svc->pkt_tag[svc_tag_indx].num_port; i++)
+    {
+        if(p_vsi_svc->pkt_tag[svc_tag_indx].port[i].port == port)
+        {
+            break;
+        }
+    }
+    if (i == p_vsi_svc->pkt_tag[svc_tag_indx].num_port)
+    {
+        return BCM_ERR_NOENT;
+    }
+    *idx = i;
+    return BCM_ERR_OK;
+}
+
+/**
+ * @brief The vsi port_find function search a gport from the port list of a vsi service entry. 
+ *
+ * @param p_vsi_svc   a pointer to the vsi service
+ * @param svc_tag_indx an index to the service within the vsi that a gport need to be searched
+ * @param gport       the ingress gport that needs to be located
+ * @param idx         pointer to a storage where the array index of the found port will be return
+ * 
+ * @return           error code
+ */
+
+static bcmos_errno bal_sw_util_dpp_vsi_service_gport_find(bal_sw_vsi_service *p_vsi_svc, uint32_t svc_tag_indx, uint32_t gport, uint32_t *idx)
+{
+    int i;
+    
+    /* input validation */
+    if (p_vsi_svc == NULL) 
+    {
+        BCM_LOG(ERROR, log_id_sw_util, "vsi service port find function with invalid parameters \n");
+        return BCM_ERR_PARM;
+    }
+    /* loop through the list */
+    for( i=0; i<p_vsi_svc->pkt_tag[svc_tag_indx].num_port; i++)
+    {
+        if(p_vsi_svc->pkt_tag[svc_tag_indx].port[i].gport == gport)
+        {
+            break;
+        }
+    }
+    if (i == p_vsi_svc->pkt_tag[svc_tag_indx].num_port)
+    {
+        return BCM_ERR_NOENT;
+    }
+    *idx = i;
+    return BCM_ERR_OK;
+}
+
+/**
+ * @brief The vsi port_add function add an ingress port to the vsi service.
+          If the port is already in the vsi, just increase the counter
+          If the port is not in the vsi, create a gport and add it to the US flooding group.
+          This allows the US SPEAK_FIRST packets to be forwarded to the network.   
+ *
+ * @param unit        switch device id 
+ * @param p_vsi_svc   a pointer to the vsi service
+ * @param svc_tag_indx an index to the service within the vsi that a port need to be added
+ * @param port        the ingress port that needs to be added to the vsi service
+ * @param p_gport     a valid pointer where the created/existing gport will be returned.
+ *                    NULL, if caller don't care the gport  
+ * 
+ * @return error code
+ */
+
+bcmos_errno bal_sw_util_dpp_vsi_service_port_add(int unit, bal_sw_vsi_service *p_vsi_svc, uint32_t svc_tag_indx, uint32_t port, int32_t *p_gport)
+{
+    bcm_vlan_port_t vp;
+    uint32_t idx;
+    int ind, rv;
+    int32_t gport;
+    bcmos_errno ret;
+    int port_encap_id;
+
+    /* input validation */
+    if (p_vsi_svc == NULL) 
+    {
+        BCM_LOG(ERROR, log_id_sw_util, "vsi service port add function with invalid parameters \n");
+        return BCM_ERR_PARM;
+    }
+    /* check if the port already in the vsi */
+    ret = bal_sw_util_dpp_vsi_service_port_find(p_vsi_svc, svc_tag_indx, port, &idx);
+    /* if port already in the vsi, just increase the counter */
+    if(ret == BCM_ERR_OK)
+    {
+        if(p_gport)
+        {
+            *p_gport = p_vsi_svc->pkt_tag[svc_tag_indx].port[idx].gport;
+        }
+        (p_vsi_svc->pkt_tag[svc_tag_indx].port[idx].use_count)++;
+        return BCM_ERR_OK;
+    }
+    
+    /* create the LIF */
+    bcm_vlan_port_t_init(&vp);
+    vp.port = port;
+    /* configure frame match according to the service packet tags */
+    switch(p_vsi_svc->pkt_tag[svc_tag_indx].type)
+    {
+        case BCMBAL_PKT_TAG_TYPE_UNTAGGED:
+            vp.criteria = BCM_VLAN_PORT_MATCH_PORT;
+        break;
+        case BCMBAL_PKT_TAG_TYPE_SINGLE_TAG:
+            vp.criteria = BCM_VLAN_PORT_MATCH_PORT_VLAN;
+            vp.match_vlan = p_vsi_svc->pkt_tag[svc_tag_indx].o_vid;
+        break;
+        case BCMBAL_PKT_TAG_TYPE_DOUBLE_TAG:
+            vp.criteria = BCM_VLAN_PORT_MATCH_PORT_VLAN_STACKED;
+            vp.match_vlan = p_vsi_svc->pkt_tag[svc_tag_indx].o_vid;
+            vp.match_inner_vlan = p_vsi_svc->pkt_tag[svc_tag_indx].i_vid;
+        break;
+        default:
+            /* should not reach here */
+            BCM_LOG(ERROR, log_id_sw_util, "VSI: Unsupported packet type %d \n",p_vsi_svc->pkt_tag[svc_tag_indx].type );
+            return BCM_ERR_INTERNAL;
+        break;
+    }
+    
+    vp.vsi = 0; /* will be populated when the gport is added to service, using vswitch_port_add */      
+    vp.flags = BCM_VLAN_PORT_OUTER_VLAN_PRESERVE  | BCM_VLAN_PORT_INNER_VLAN_PRESERVE;
+
+    rv = bcm_vlan_port_create(unit, &vp);
+    if (rv != BCM_E_NONE)
+    {
+         BCM_LOG(ERROR, log_id_sw_util, "VSI: bcm_vlan_port_create port %d, failed %d\n", port, rv);
+         return BCM_ERR_INTERNAL;
+    }
+
+    gport = vp.vlan_port_id;
+
+    // add gport to vswitch
+    rv = bcm_vswitch_port_add(unit, p_vsi_svc->vswitch, gport);
+    if (rv != BCM_E_NONE)
+    {
+         BCM_LOG(ERROR, log_id_sw_util, "VSI, bcm_vswitch_port_add for port %d failed %d\n", port, rv);
+         bcm_vlan_port_destroy(unit, gport);         
+         return BCM_ERR_INTERNAL;        
+    }
+    else
+    {
+        BCM_LOG(INFO, log_id_sw_util, "VSI: bcm_vswitch_port_add for port %d, gport 0x%x\n", port, gport);
+    }
+    /* if caller requre for the gport info, return the gport */
+    if(p_gport)
+    {
+        *p_gport = gport;
+    }
+    /* record the gport into the vsi */
+    ind = p_vsi_svc->pkt_tag[svc_tag_indx].num_port;
+    if (ind == MAX_NET_PORT)
+    {
+        BCM_LOG(ERROR, log_id_sw_util, "VSI, reach max port allow\n");
+        bcm_vswitch_port_delete(unit, p_vsi_svc->vswitch, gport);
+        bcm_vlan_port_destroy(unit, gport);         
+        return BCM_ERR_NORES;          
+    }
+    p_vsi_svc->pkt_tag[svc_tag_indx].port[ind].port = port;
+    p_vsi_svc->pkt_tag[svc_tag_indx].port[ind].gport = gport;
+    p_vsi_svc->pkt_tag[svc_tag_indx].port[ind].use_count = 1;
+    p_vsi_svc->pkt_tag[svc_tag_indx].num_port = ++ind;
+
+    ret = BCM_ERR_OK;
+    do
+    {
+        // update flooding group with phy_port/gport as ingress port
+        rv = bcm_multicast_vlan_encap_get(unit, p_vsi_svc->us_flood_grp_id, port, gport, &port_encap_id);
+        if (rv != BCM_E_NONE)
+        {
+             BCM_LOG(ERROR, log_id_sw_util, "Error, bcm_multicast_vlan_encap_get for port failed %d\n", rv);
+             ret = BCM_ERR_NOENT;
+             break;             
+        }
+        /* be a member of the upstream flooding group */
+        rv = bcm_multicast_ingress_add(unit, p_vsi_svc->us_flood_grp_id, port, port_encap_id);
+        if (rv != BCM_E_NONE)
+        {
+             BCM_LOG(ERROR, log_id_sw_util, "Error, bcm_multicast_ingress_add for port failed %d\n", rv);     
+             ret = BCM_ERR_NOENT;
+             break;
+        }
+        
+        /* now set the type of packets that goes to the downstream flooding group */
+        /* forward unknown unicast */        
+        rv = bcm_port_control_set(unit, gport, bcmPortControlFloodUnknownUcastGroup, BAL_DPP_DS_FLOOD_OFFSET);
+        if (rv != BCM_E_NONE)
+        {
+             BCM_LOG(ERROR, log_id_sw_util, "Error, bcm_port_control_set ucast for nni failed %d\n", rv);
+             ret = BCM_ERR_INTERNAL;
+             break;
+        }
+        /* drop unknown multicast */
+        rv = bcm_port_control_set(unit, gport, bcmPortControlFloodUnknownMcastGroup, BCM_GPORT_BLACK_HOLE);
+        if (rv != BCM_E_NONE)
+        {
+             BCM_LOG(ERROR, log_id_sw_util, "Error, bcm_port_control_set mcast for nni failed %d\n", rv);
+             ret = BCM_ERR_INTERNAL;
+             break;
+        }
+        
+        /* forward broadcast */
+        rv = bcm_port_control_set(unit, gport, bcmPortControlFloodBroadcastGroup, BAL_DPP_DS_FLOOD_OFFSET);
+        if (rv != BCM_E_NONE)
+        {
+             BCM_LOG(ERROR, log_id_sw_util, "Error, bcm_port_control_set bcast for nni failed %d\n", rv);
+             ret = BCM_ERR_INTERNAL;
+             break;
+        }
+    }while(0);
+    
+    return ret;
+}
+
+/**
+ * @brief The vsi port_rem function remove an ingress port to the vsi service.
+ *
+ * @param unit        switch device id 
+ * @param p_vsi_svc   a pointer to the vsi service
+ * @param svc_tag_indx an index to the service within the vsi that a port need to be removed
+ * @param gport       the ingress gport that needs to be removed from the vsi service
+ *
+ * @return error code
+ */
+
+bcmos_errno bal_sw_util_dpp_vsi_service_port_rem(int unit, bal_sw_vsi_service *p_vsi_svc, uint32_t svc_tag_indx, uint32_t gport)
+{
+    uint32_t idx;;
+    int port_encap_id, rv, i;
+    bcmos_errno ret = BCM_ERR_OK;
+    int port;
+    /* input validation */
+    if (p_vsi_svc == NULL) 
+    {
+        BCM_LOG(ERROR, log_id_sw_util, "vsi service port rem function with invalid parameters \n");
+        return BCM_ERR_PARM;
+    }
+    /* check if the port in the vsi */
+    ret = bal_sw_util_dpp_vsi_service_gport_find(p_vsi_svc, svc_tag_indx, gport, &idx);
+    if(ret != BCM_ERR_OK)
+    {
+        BCM_LOG(ERROR, log_id_sw_util, "Error, vsi service port find for gport %d failed\n", gport);
+        return ret;
+    }
+    /* only remove from the array when no flow reference it */
+    if(p_vsi_svc->pkt_tag[svc_tag_indx].port[idx].use_count > 1)
+    { 
+        (p_vsi_svc->pkt_tag[svc_tag_indx].port[idx].use_count)--;
+        return BCM_ERR_OK;
+    }
+   
+    port = p_vsi_svc->pkt_tag[svc_tag_indx].port[idx].port;
+    
+    /* compact the port list */
+    for(i=idx; i<p_vsi_svc->pkt_tag[svc_tag_indx].num_port-1; i++)
+    {
+        p_vsi_svc->pkt_tag[svc_tag_indx].port[i] = p_vsi_svc->pkt_tag[svc_tag_indx].port[i+1];
+    }
+    memset(&p_vsi_svc->pkt_tag[svc_tag_indx].port[i], 0, sizeof (bal_sw_lif_port));
+    
+    (p_vsi_svc->pkt_tag[svc_tag_indx].num_port)--; 
+    
+    ret = BCM_ERR_OK;
+    do
+    {
+        /* find the encap_id */
+        rv = bcm_multicast_vlan_encap_get(unit, p_vsi_svc->us_flood_grp_id, port, gport, &port_encap_id);
+        if (rv != BCM_E_NONE)
+        {
+             BCM_LOG(ERROR, log_id_sw_util, "Error, bcm_multicast_vlan_encap_get for port %d failed %d\n", port, rv);
+             ret = BCM_ERR_NOENT;
+             break;             
+        }
+        /* remove from the upstream flooding group */
+        rv = bcm_multicast_ingress_delete(unit, p_vsi_svc->us_flood_grp_id, port, port_encap_id);
+        if (rv != BCM_E_NONE)
+        {
+             BCM_LOG(ERROR, log_id_sw_util, "Error, bcm_multicast_ingress_delete for port %d failed %d\n", port, rv);     
+             ret = BCM_ERR_NOENT;
+             break;
+        }
+        rv = bcm_vswitch_port_delete(unit, p_vsi_svc->vswitch, gport);
+        if (rv != BCM_E_NONE)
+        {
+             BCM_LOG(ERROR, log_id_sw_util, "Error, bcm_vswitch_port_delete for port %d failed %d\n", port, rv);
+             ret = BCM_ERR_NOENT;
+             break;             
+        }
+        rv = bcm_vlan_port_destroy(unit, gport);
+        if (rv != BCM_E_NONE)
+        {
+             BCM_LOG(WARNING, log_id_sw_util, "Error, bcm_vlan_port_destroy for port %d failed %d\n", port, rv);
+             /* Likely a bug in the 6.5.4 release, igore for now
+             ret = BCM_ERR_NOENT;
+             break;  
+             */             
+        }    
+    }while(0);
+    return  ret;
+}
+
+/**
+ * @brief The vsi_service_tag_add function add the service tag of a flow to a vsi target service.
+ *
+ * @param unit           switch device id 
+ * @param p_vsi_target   a pointer to the vsi service
+ * @param p_flow         a pointer to a flow that define the service tag need to be added
+ * @param p_svc_tag_indx a pointer to store the return service tag index that just added
+ *
+ * @return error code
+ */
+bcmos_errno bal_sw_util_dpp_vsi_service_tag_add(int unit, bal_sw_vsi_service *p_vsi_target, bcmbal_flow_cfg *p_flow, uint32_t *p_svc_tag_indx)
+{
+    bal_sw_lif_pkt_tag svc_pkt_tag = {0};
+    bal_sw_vsi_service *p_vsi_service;
+    
+    /* input parameters checking */
+    if (p_flow == NULL || p_vsi_target == NULL || p_svc_tag_indx == NULL) 
+    {
+        BCM_LOG(ERROR, log_id_sw_util, "invalid parameters when adding vsi service tag \n");
+        return BCM_ERR_PARM;
+    }    
+    
+    /* find out if the service tag already exist */
+    svc_pkt_tag.type = p_flow->data.classifier.pkt_tag_type;
+    svc_pkt_tag.o_vid = p_flow->data.classifier.o_vid;
+    svc_pkt_tag.i_vid = p_flow->data.classifier.i_vid;
+    p_vsi_service = bal_sw_util_dpp_vsi_service_get_by_tag(&svc_pkt_tag, p_svc_tag_indx);
+    if (p_vsi_service)
+    {
+        /* if the service tag already exist in the system, it has to be within the same vsi.
+           We don't allow same service tag to be serviced by more than one vsi
+         */
+        if(p_vsi_service != p_vsi_target)
+        {
+            return BCM_ERR_INTERNAL;
+        }
+        else
+        {
+            return BCM_ERR_OK;
+        }                      
+    }
+
+    /* now add the tag to the list */       
+    p_vsi_target->pkt_tag[p_vsi_target->num_tag] = svc_pkt_tag;
+    *p_svc_tag_indx = p_vsi_target->num_tag;
+    p_vsi_target->num_tag ++;
+    return BCM_ERR_OK;
+}
+
+/**
+ * @brief The vsi_service_tag_rem function remove the service tag index by svc_tag_indx from a vsi service.
+ *
+ * @param unit           switch device id 
+ * @param p_vsi_svc      a pointer to the vsi service
+ * @param svc_tag_indx   a service tag index point to the service tag list that need to be removed
+ *
+ * @return error code
+ */
+bcmos_errno bal_sw_util_dpp_vsi_service_tag_rem(int unit, bal_sw_vsi_service *p_vsi_svc, uint32_t svc_tag_indx)
+{
+    int i;
+       /* input parameters checking */
+    if (p_vsi_svc == NULL || p_vsi_svc->num_tag <= svc_tag_indx) 
+    {
+        BCM_LOG(ERROR, log_id_sw_util, "invalid parameters when removing vsi service tag \n");
+        return BCM_ERR_PARM;
+    } 
+    /* compact the tag list */
+    for(i=svc_tag_indx; i<p_vsi_svc->num_tag-1; i++)
+    {
+        p_vsi_svc->pkt_tag[i] = p_vsi_svc->pkt_tag[i+1];
+    }
+    memset(&p_vsi_svc->pkt_tag[i], 0, sizeof (bal_sw_lif_pkt_tag));
+    
+    (p_vsi_svc->num_tag)--;  
+    return BCM_ERR_OK;    
+}
+
+#endif /* #ifndef TEST_SW_UTIL_LOOPBACK */
+/*@}*/
+
+ 
diff --git a/bal_release/src/core/util/switch/dpp/bal_dpp_vswitch.h b/bal_release/src/core/util/switch/dpp/bal_dpp_vswitch.h
new file mode 100644
index 0000000..43ddd93
--- /dev/null
+++ b/bal_release/src/core/util/switch/dpp/bal_dpp_vswitch.h
@@ -0,0 +1,93 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+ /**
+ * @file bal_dpp_vswitch.h
+ * @brief BAL Switch util helper functions prototype
+ * @addtogroup sw_util
+ */
+#ifndef _BAL_DPP_VSWITCH_H_
+#define _BAL_DPP_VSWITCH_H_
+
+#include "bal_switch_flow.h"
+
+/* DPP multicast group offsets - use vsi as base */
+/* The mc group should not overlap, so the following setting limit system to 0x1000 vsi */ 
+#define  BAL_DPP_US_FLOOD_OFFSET  0x0
+#define  BAL_DPP_DS_FLOOD_OFFSET  0x1000
+#define  BAL_DPP_MC_OFFSET        0x2000
+
+#define  MAX_SVC_PER_VSI          8
+
+/*@{*/
+#ifndef TEST_SW_UTIL_LOOPBACK
+
+typedef struct bal_sw_lif_port bal_sw_lif_port;
+struct bal_sw_lif_port
+{
+    uint32_t port;
+    uint32_t gport;
+    int32_t  use_count;
+};
+
+typedef struct bal_sw_lif_pkt_tag bal_sw_lif_pkt_tag;
+struct bal_sw_lif_pkt_tag
+{
+    uint32_t type;
+    uint32_t o_vid;
+    uint32_t i_vid;
+    uint32_t num_port;
+    bal_sw_lif_port port[MAX_NET_PORT];
+};
+
+typedef struct bal_sw_vsi_service bal_sw_vsi_service;
+struct bal_sw_vsi_service
+{
+    uint32_t num_tag;
+    bal_sw_lif_pkt_tag pkt_tag[MAX_SVC_PER_VSI];  
+    uint32_t vswitch;
+    uint32_t us_flood_grp_id;
+    uint32_t ds_flood_grp_id;
+    int32_t  use_count;    
+    TAILQ_ENTRY(bal_sw_vsi_service) next_service;
+};
+
+extern bcmos_errno bal_sw_util_dpp_vsi_service_port_add(int unit, bal_sw_vsi_service *p_vsi_svc, uint32_t svc_tag_indx, uint32_t port, int32_t *p_gport);
+extern bcmos_errno bal_sw_util_dpp_vsi_service_port_rem(int unit, bal_sw_vsi_service *p_vsi_svc, uint32_t svc_tag_indx, uint32_t port);
+extern bcmos_errno bal_sw_util_dpp_vsi_service_tag_add(int unit, bal_sw_vsi_service *p_vsi_svc, bcmbal_flow_cfg *p_flow, uint32_t *p_svc_tag_indx);
+extern bcmos_errno bal_sw_util_dpp_vsi_service_tag_rem(int unit, bal_sw_vsi_service *p_vsi_svc, uint32_t svc_tag_indx);
+extern bal_sw_vsi_service *bal_sw_util_dpp_vsi_service_create(int unit, bcmbal_flow_cfg *p_flow, uint32_t *p_svc_tag_indx);
+extern bcmos_errno bal_sw_util_dpp_vsi_service_destroy(int unit, bal_sw_vsi_service *p_vsi_svc);
+extern bcmos_errno bal_sw_util_vsi_list_init(void);
+
+#endif /* TEST_SW_UTIL_LOOPBACK */
+/*@}*/
+#endif
diff --git a/bal_release/src/core/util/switch/esw/Makefile b/bal_release/src/core/util/switch/esw/Makefile
new file mode 100644
index 0000000..88473f7
--- /dev/null
+++ b/bal_release/src/core/util/switch/esw/Makefile
@@ -0,0 +1,43 @@
+###############################################################################
+#
+#  <:copyright-BRCM:2016:DUAL/GPL:standard
+#  
+#     Copyright (c) 2016 Broadcom
+#     All Rights Reserved
+#  
+#  Unless you and Broadcom execute a separate written software license
+#  agreement governing use of this software, this software is licensed
+#  to you under the terms of the GNU General Public License version 2
+#  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+#  with the following added to such license:
+#  
+#     As a special exception, the copyright holders of this software give
+#     you permission to link this software with independent modules, and
+#     to copy and distribute the resulting executable under terms of your
+#     choice, provided that you also meet, for each linked independent
+#     module, the terms and conditions of the license of that module.
+#     An independent module is a module which is not derived from this
+#     software.  The special exception does not apply to any modifications
+#     of the software.
+#  
+#  Not withstanding the above, under no circumstances may you combine
+#  this software in any way with any other Broadcom software provided
+#  under a license other than the GPL, without Broadcom's express prior
+#  written consent.
+#  
+#  :>
+#
+###############################################################################
+# BAL Switch Util ESW  
+MOD_NAME = switch_util_esw
+MOD_TYPE = lib
+MOD_DEPS = dev_log utils bal_api bal_app_utils
+srcs = bal_esw_acc_term.c bal_esw_flow.c 
+EXTRA_CFLAGS += -I$(SRC_DIR)/../../../main -I$(SRC_DIR)/..
+
+ifeq ("$(TEST_SW_UTIL_LOOPBACK)", "y")
+	MOD_DEFS += -DTEST_SW_UTIL_LOOPBACK
+else	
+	MOD_DEPS += switch_sdk
+endif
+
diff --git a/bal_release/src/core/util/switch/esw/bal_esw_acc_term.c b/bal_release/src/core/util/switch/esw/bal_esw_acc_term.c
new file mode 100755
index 0000000..ef9ded3
--- /dev/null
+++ b/bal_release/src/core/util/switch/esw/bal_esw_acc_term.c
@@ -0,0 +1,132 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+#ifndef TEST_SW_UTIL_LOOPBACK
+
+#include <bal_common.h>
+#include <bcm_dev_log.h>
+#include <bal_msg.h>
+#include "bal_switch_util.h"
+#include "bal_switch_acc_term.h"
+#include "bal_esw_acc_term.h"
+
+#include <bcm/types.h>
+#include <bcm/port.h>
+
+/**
+ * @file bal_esw_acc_term.c
+ * @brief BAL Switch util functions that handle access terminal requests on Enterprise SWitch 
+ * @addtogroup sw_util
+ *
+ */
+
+/*@{*/
+
+
+/**
+ * @brief Connect access terminal with ESW as part of the components
+ *
+ * This routine is called by sw_util_access_terminal_connect in the BAL core
+ * to execute ESW specific API for access_terminal_connect request
+ * 
+ * @param p_net_map    Pointer to the net ports mapping from logical numbrer to physical number
+ * @param p_pon_map    Pointer to the pon ports mapping from logical numbrer to physical number
+ * @return bcmos_errno
+ */
+bcmos_errno sw_util_esw_acc_term_connect(bal_swapp_port *p_net_map, bal_swapp_port *p_pon_map )
+{
+     bcmos_errno ret = BCM_ERR_OK;
+     int      rc = 0;
+     bal_swapp_port *port;
+     bcm_pbmp_t pon_pbmp, net_pbmp;   
+     
+     BCM_LOG(INFO, log_id_sw_util, " KT2 - Got a access terminal CONNECT\n");
+
+     BCM_PBMP_CLEAR(pon_pbmp);
+     BCM_PBMP_CLEAR(net_pbmp);
+ 
+     /* setup the device ID  - This is very hardware specific */
+     port = p_net_map;
+     /* -1 indicate the end of table */
+     while(port->pbm_id != -1)
+     {        
+         /* add port to the net list */
+         BCM_PBMP_PORT_ADD(net_pbmp, port->pbm_id);
+         port++;         
+     }    
+ 
+     port = p_pon_map;
+     while(port->pbm_id != -1)
+     {        
+         /* add port to the pon list */
+         BCM_PBMP_PORT_ADD(pon_pbmp, port->pbm_id);
+         port++;         
+     } 
+     
+    /* set up the valid egress ports for pon facing ports */
+     port = p_pon_map;
+     while(port->pbm_id != -1)
+     {     
+         rc = bcm_port_egress_set(port->device_id, port->pbm_id, 0, /* modid */ net_pbmp);
+         if (rc)
+         {
+             BCM_LOG(ERROR, log_id_sw_util, " ESW - Add port %d to pon interface failed\n", port->pbm_id );
+         }
+         port++;
+     }   
+    
+     /* set up the valid egress ports for net facing ports */
+     port = p_net_map;
+     while(port->pbm_id != -1)
+     {     
+         rc = bcm_port_egress_set(port->device_id, port->pbm_id, 0, /* modid */ pon_pbmp);
+         if (rc)
+         {
+             BCM_LOG(ERROR, log_id_sw_util,
+                 " ESW - Add port %d to net interface failed\n", port->pbm_id );
+         }
+         port++;
+     }
+             
+     /* translate ING error code to BAL error code */ 
+     if (rc)
+     {
+         ret = BCM_ERR_INTERNAL;
+     }
+     else
+     {
+         ret = BCM_ERR_OK;
+     }
+     return ret;
+}
+
+/*@}*/
+#endif /* #ifndef TEST_SW_UTIL_LOOPBACK */
diff --git a/bal_release/src/core/util/switch/esw/bal_esw_acc_term.h b/bal_release/src/core/util/switch/esw/bal_esw_acc_term.h
new file mode 100755
index 0000000..1343f68
--- /dev/null
+++ b/bal_release/src/core/util/switch/esw/bal_esw_acc_term.h
@@ -0,0 +1,52 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file bal_esw_acc_term.h
+ *
+ * @brief bal switch esw util access terminal service function header file
+ *
+ * @addtogroup sw_util
+ */
+ 
+#ifndef  _BAL_ESW_ACC_TERM_H_
+#define  _BAL_ESW_ACC_TERM_H_
+
+/*@{*/
+#include "bcmos_errno.h"
+#include "bal_switch_util.h"
+#include "bal_switch_acc_term.h"
+
+extern bcmos_errno sw_util_esw_acc_term_connect(bal_swapp_port *p_net_map, bal_swapp_port *p_pon_map);
+
+/*@}*/
+ 
+#endif
diff --git a/bal_release/src/core/util/switch/esw/bal_esw_flow.c b/bal_release/src/core/util/switch/esw/bal_esw_flow.c
new file mode 100755
index 0000000..27d33af
--- /dev/null
+++ b/bal_release/src/core/util/switch/esw/bal_esw_flow.c
@@ -0,0 +1,555 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file bal_esw_flow.c
+ * @brief BAL Switch util functions that handle flow requests
+ * @addtogroup sw_util
+ */
+ 
+ /*@{*/
+#include <bal_common.h>
+#include <bcm_dev_log.h>
+#include <bal_msg.h>
+#include "bal_switch_flow.h"
+#include "flow_fsm.h"
+#include "bcmos_errno.h"
+#include "bal_switch_util.h"
+
+#ifndef TEST_SW_UTIL_LOOPBACK
+#include <bcm/types.h>
+#include <sal/core/libc.h>
+#ifndef sal_memset
+#define sal_memset memset
+#endif
+#include <bcm/port.h>
+#include <bcm/vlan.h>
+#include <bcm/field.h>
+#include <bcm/error.h>
+#include <sal/core/libc.h>
+
+#include "bal_switch_acc_term.h"
+#include "bal_esw_flow.h"
+/**
+ * @brief The acl add function add an Access Control Rule in the switch  VCAP/ICAP/ECAP
+ *        to perform action based on flow classifier
+ * 
+ * @param unit    the switch unit this rule is to be added
+ * @param p_flow  a pointer to the flow definition the created rule will be based on  
+ * @return error code
+ */
+static bcm_field_group_t esw_group_id = 0;
+/* add an ingress ACL rule */
+static bcmos_errno bal_swapp_esw_acl_add(int unit, bcmbal_flow_cfg *p_flow)
+{
+     uint32_t ret, j; 
+     uint32_t nni_phy;
+     int vid;
+     bcm_field_qset_t qset;
+     bcm_field_entry_t eid;
+     bcm_mac_t bcast_mac = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
+     bcm_mac_t dst_mask =  {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
+   
+    do 
+    {        
+        vid = p_flow->data.classifier.o_vid;
+ 
+        /* VCAP - bcmFieldQualifyStageLookup, ICAP - bcmFieldQualifyStageIngress, ECAP - bcmFieldQualifyStageEgress */
+        /* The KT2 resources allow only limit number of qset - indexed by esw_group_id, create qset when necessary */
+        if (0 == esw_group_id)
+        {
+            BCM_FIELD_QSET_INIT(qset);
+            BCM_FIELD_QSET_ADD(qset, bcmFieldQualifyStageLookup);
+            BCM_FIELD_QSET_ADD(qset, bcmFieldQualifyOuterVlan);
+            BCM_FIELD_QSET_ADD(qset, bcmFieldQualifyInPort);
+            BCM_FIELD_QSET_ADD(qset, bcmFieldQualifyDstMac);
+            ret = bcm_field_group_create(unit, qset, BCM_FIELD_GROUP_PRIO_ANY, &esw_group_id);
+            if (ret != BCM_E_NONE)
+            {
+                 BCM_LOG(ERROR, log_id_sw_util, 
+                                  " flow fail to create field - %d\n", ret );
+                 break;
+            }
+        }
+
+        /* if action is to drop broadcast, add an ACL in nni VCAP to  drop it */
+        if ( p_flow->data.action.cmds_bitmask & BCMBAL_ACTION_CMD_ID_DISCARD_DS_BCAST)
+        {             
+            /* loop through all nni ports */
+            for(j=0; -1 != (nni_phy = bal_bcm_net_inf_pbm_get(j)); j++)
+            {
+                if ( bal_bcm_net_inf_dev_get(j) != unit)
+                {
+                    continue; 
+                }
+                  
+                ret = bcm_field_entry_create(unit, esw_group_id, &eid);
+                if (ret != BCM_E_NONE)
+                {
+                    BCM_LOG(ERROR, log_id_sw_util, 
+                            " flow fail to create field entry for port %d - ret = %d\n", nni_phy, ret );
+                    break;
+                }            
+               
+                ret = bcm_field_qualify_DstMac(unit, eid, bcast_mac, dst_mask);
+                if (ret != BCM_E_NONE)
+                {
+                    BCM_LOG(ERROR, log_id_sw_util,
+                            " flow fail to set field dst mac qualifier %d - ret = %d\n", nni_phy, ret );
+                    break;
+                }
+                    
+                ret = bcm_field_qualify_OuterVlanId(unit, eid, vid, 0xffff);
+                if (ret != BCM_E_NONE)
+                {
+                    BCM_LOG(ERROR, log_id_sw_util,
+                            " flow fail to set field outer vlan qualifier %d - ret = %d\n", nni_phy, ret );
+                    break;
+                }
+                ret = bcm_field_action_add(unit, eid, bcmFieldActionDrop, 0, 0);
+                if (ret != BCM_E_NONE)
+                {    
+                    BCM_LOG(ERROR, log_id_sw_util,
+                            " flow fail to add action to the field entry %d - ret = %d\n", nni_phy, ret );
+                    break;
+                }   
+                
+                ret = bcm_field_entry_install(unit, eid);
+                if (ret != BCM_E_NONE)
+                {
+                    BCM_LOG(ERROR, log_id_sw_util,
+                            " flow fail to install field entry %d - ret = %d\n", nni_phy, ret );
+                    break;
+                }      
+            } /* for loop */
+        } /* if drop bcast */
+    } while(0);
+   
+     
+     if (ret != BCM_E_NONE)
+     {
+         return BCM_ERR_INTERNAL;
+     }
+     
+     return BCM_ERR_OK;
+}
+
+/**
+ * @brief The ingress vlan translation function program switch to
+ *  translate packet vlan attributes before the switch vaidate the
+ *  vlan membership of the packets
+ * @param unit    the switch unit this translation is perfromed
+ * @param p_flow  a pointer to the flow that contains translation action  
+ * @return        error code
+ */
+static bcmos_errno bal_swapp_esw_ivlanx(int unit, bcmbal_flow_cfg *p_flow)
+{
+    bcmos_errno ret = BCM_ERR_OK;    
+    bcm_gport_t pon_gport;
+    uint32_t pon_phy_pbm;    
+    int bcm_rc;    
+ 
+    /* find out which PON this action is to be performed */
+    /* map pon logical port to physical port */
+    pon_phy_pbm = bal_bcm_pon_inf_pbm_get(p_flow->data.access_int_id);
+    /* create local gport based on pon physical port number */
+    BCM_GPORT_LOCAL_SET(pon_gport, pon_phy_pbm); 
+    
+    do 
+    {     
+        /* For TR-156 1:1 uptream single tagged packets,
+           S-tag add acton is performed in the INGRESS vlan translator.   
+        */
+       if (BCMBAL_FLOW_TYPE_UPSTREAM == p_flow->key.flow_type)
+       {
+           if ( p_flow->data.action.cmds_bitmask & BCMBAL_ACTION_CMD_ID_ADD_OUTER_TAG )
+           {
+               uint32_t u_ovid, u_ivid;
+               bcm_vlan_action_set_t u_action;
+               bcm_vlan_action_set_t_init(&u_action);
+              
+               /* set gpon ingress translaton to add outer tag on upstream packets */
+               u_action.new_outer_vlan = p_flow->data.action.o_vid;
+               u_action.priority       = p_flow->data.action.o_pbits;
+               
+               switch(p_flow->data.classifier.pkt_tag_type)
+               {
+                   case BCMBAL_PKT_TAG_TYPE_SINGLE_TAG:
+                        u_action.ot_outer          = bcmVlanActionAdd; 
+                        u_action.ot_outer_pkt_prio = bcmVlanActionReplace;
+                        u_ovid                     = p_flow->data.classifier.o_vid;
+                        u_ivid                     = BCM_VLAN_NONE;
+                       break;
+                   default: /* not supported, goto while(0) */
+                        u_ovid                     = BCM_VLAN_NONE;
+                        u_ivid                     = BCM_VLAN_NONE;
+                        ret = BCM_ERR_INTERNAL;
+                       continue;                                                    
+               }    
+               /* enable ingress vlan translation on specified port */                
+               bcm_rc = bcm_vlan_control_port_set(unit, pon_gport, bcmVlanTranslateIngressEnable, 1);
+               if (bcm_rc != BCM_E_NONE)
+               {
+                   BCM_LOG(ERROR, log_id_sw_util,
+                           " flow fail to enable ingress vlan translation on port %d - %d\n", 
+                           pon_phy_pbm, bcm_rc );               
+                   ret = BCM_ERR_INTERNAL;
+                   break;
+               } 
+               /* set the outer vlan id as lookup key - i.e. packet filtering key */
+               bcm_rc = bcm_vlan_control_port_set(unit, pon_gport, bcmVlanPortTranslateKeyFirst, bcmVlanTranslateKeyOuter);
+               if (bcm_rc != BCM_E_NONE)
+               {
+                   BCM_LOG(ERROR, log_id_sw_util,
+                           " flow fail to set upstream lookup key on port %d - %d\n", 
+                           pon_phy_pbm, bcm_rc );               
+                   ret = BCM_ERR_INTERNAL;
+                   break;
+               } 
+               /* install the action into ingress vlan translation table */
+               bcm_rc = bcm_vlan_translate_action_add(unit, pon_gport, bcmVlanTranslateKeyOuter, u_ovid, u_ivid, &u_action);
+               if (bcm_rc != BCM_E_NONE)
+               {
+                   BCM_LOG(ERROR, log_id_sw_util,
+                           " flow fail to set ingress action on port %d - %d\n", 
+                           pon_phy_pbm, bcm_rc );               
+                   ret = BCM_ERR_INTERNAL;
+                   break;
+               }     
+           }
+           else 
+           {
+               BCM_LOG(ERROR, log_id_sw_util,
+                       " flow upstream action 0x%x not supported\n", p_flow->data.action.cmds_bitmask);
+                                                   
+               ret = BCM_ERR_NOT_SUPPORTED;         
+           }   
+       }
+  
+    } while(0);
+     
+    return ret;
+}
+
+/**
+ * @brief The engress vlan translation function program switch to
+ *  translate packet vlan attributes before the packets were sent out
+ *  
+ * @param unit    the switch unit this translation is perfromed
+ * @param p_flow  a pointer to the flow that contains translation action  
+ * @return        error code
+ */
+static bcmos_errno bal_swapp_esw_evlanx(int unit, bcmbal_flow_cfg *p_flow)
+{
+    bcmos_errno ret = BCM_ERR_OK;    
+    bcm_gport_t pon_gport;
+    uint32_t pon_phy_pbm;    
+    int bcm_rc;    
+ 
+    /* find out which PON this action is to be performed */ 
+    /* map pon logical port to physical port */
+    pon_phy_pbm = bal_bcm_pon_inf_pbm_get(p_flow->data.access_int_id);
+    /* create local gport based on pon physical port number */
+    BCM_GPORT_LOCAL_SET(pon_gport, pon_phy_pbm); 
+    
+    do 
+    {     
+        /* For TR-156 1:1 downstream double tagged packets,
+           S-tag remove acton is performed in the EGRESS vlan translator.   
+        */
+        if (BCMBAL_FLOW_TYPE_DOWNSTREAM == p_flow->key.flow_type)
+        {
+                
+            if ( p_flow->data.action.cmds_bitmask & BCMBAL_ACTION_CMD_ID_REMOVE_OUTER_TAG )
+            {
+                /* set gpon egress translaton to drop outer tag of double tag downstream packets */
+                uint32_t d_ovid, d_ivid;
+                bcm_vlan_action_set_t d_action;
+                bcm_vlan_action_set_t_init(&d_action);
+                switch(p_flow->data.classifier.pkt_tag_type)
+                {
+                    case BCMBAL_PKT_TAG_TYPE_DOUBLE_TAG:
+                        d_action.dt_outer = bcmVlanActionDelete;
+                        d_ovid = p_flow->data.classifier.o_vid;
+                        d_ivid = p_flow->data.classifier.i_vid;
+                        break;
+                   
+                    default: /* not supported, goto while(0) */
+                        d_ovid   = BCM_VLAN_NONE;
+                        d_ivid   = BCM_VLAN_NONE;
+                        ret = BCM_ERR_INTERNAL;
+                        continue;                                                    
+                }    
+                /* enable egress vlan translation on specified port */                     
+                bcm_rc = bcm_vlan_control_port_set(unit, pon_gport, bcmVlanTranslateEgressEnable, 1);
+                if (bcm_rc != BCM_E_NONE)
+                {
+                    BCM_LOG(ERROR, log_id_sw_util,
+                            " flow fail to enable egress vlan translation on port %d - %d\n", 
+                            pon_phy_pbm, bcm_rc );               
+                    ret = BCM_ERR_INTERNAL;
+                    break;
+                }
+ 
+                /* install the action into egress vlan translation table */                    
+                bcm_rc = bcm_vlan_translate_egress_action_add(unit, pon_gport, d_ovid, d_ivid, &d_action);                              
+                if (bcm_rc != BCM_E_NONE)
+                {
+                    BCM_LOG(ERROR, log_id_sw_util,
+                            " flow fail to set egress action on port %d - %d\n", 
+                            pon_phy_pbm, bcm_rc );               
+                    ret = BCM_ERR_INTERNAL;
+                    break;
+                }         
+           }
+           else 
+           {
+               BCM_LOG(ERROR, log_id_sw_util,
+                       " flow downstream action 0x%x not supported\n", p_flow->data.action.cmds_bitmask);
+                                                   
+                   ret = BCM_ERR_NOT_SUPPORTED;         
+           }   
+        
+       }
+  
+    } while(0);
+     
+    return ret;
+}
+
+
+/**
+ * @brief The flow add function program KT2 to forward packets that have
+ * specified attributes to the designated ports.
+ * The packets is modified before egress
+ * On the downstream, an access id (outer vlan tag) is added to the packets
+ * On the upstream, outer vlan tag (access id) is removed from the packets
+ *
+ * @param iwf_mode The InterWorking Function mode - DIRECT or PER-FLOW
+ * @param p_flow A pointer to the requested add flow info
+ * @return error code
+ */
+bcmos_errno bal_sw_util_esw_flow_add(bcmbal_iwf_mode iwf_mode,  bcmbal_flow_cfg *p_flow)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    bcm_gport_t pon_gport;
+    uint32_t pon_phy_pbm;
+    bcm_vlan_t vlan_id;
+    bcm_gport_t nni_gport;
+    uint32_t nni_phy_pbm;
+    int ii;
+    int bcm_rc;
+    int unit = bal_bcm_pon_inf_dev_get(p_flow->data.access_int_id);
+
+    BCM_LOG(INFO, log_id_sw_util,
+            " Got an ESW flow request - iwf_mode=%d flow_id=%d  sub_port=%d svc_id=%d\n",
+            iwf_mode, 
+            p_flow->key.flow_id, p_flow->data.access_int_id, p_flow->data.svc_port_id);
+    BCM_LOG(DEBUG, log_id_sw_util,
+            " classifier - mask=0x%llx otpid=%x itpid=%x ovid=%x ivid=%x\n",
+            (unsigned long long)p_flow->data.classifier.presence_mask,
+            p_flow->data.classifier.o_tpid, p_flow->data.classifier.i_tpid,
+            p_flow->data.classifier.o_vid, p_flow->data.classifier.i_vid);
+
+    /* 
+     * First, validate that the specified PON has at least one NNI port on the same device.
+     * If not, return an error, as this is not supported.
+     */
+    ii = 0;
+    ret = BCM_ERR_NOT_SUPPORTED;
+    /* walk through the entire mapping table */
+    while(-1 != bal_bcm_net_inf_pbm_get(ii))
+    {
+        if(bal_bcm_net_inf_dev_get(ii) == unit)
+        {
+            ret = BCM_ERR_OK;
+            break;
+        }
+        ii++; /* Next NNI */
+    }
+
+    do 
+    {
+        /*
+         * Check return code from device check above.  Return if there was an error.
+         */
+        if(BCM_ERR_OK != ret)
+        {
+            BCM_LOG(ERROR, log_id_sw_util,
+                    " ERROR: no network port is on the same device as access port %d\n", p_flow->data.access_int_id);
+            break;
+        }
+
+        /* create vlan domain for this flow */        
+        vlan_id = (bcm_vlan_t)p_flow->data.classifier.o_vid;
+        bcm_rc = bcm_vlan_create(unit, vlan_id);
+
+        /* if OK or already existed, continue */
+        if (bcm_rc != BCM_E_NONE && bcm_rc != BCM_E_EXISTS)
+        {
+            BCM_LOG(ERROR, log_id_sw_util,
+                    " failed to create vlan %d on unit %d - bcm_rc:%d\n", vlan_id, unit, bcm_rc );
+            ret = BCM_ERR_INTERNAL;
+            break;
+        }
+        else
+        {
+            BCM_LOG(INFO, log_id_sw_util,
+                    " vlan %d %s on unit %d - bcm_rc:%d\n", 
+                    vlan_id, 
+                    (BCM_E_EXISTS == bcm_rc) ? "reused" : "created",
+                    unit, 
+                    bcm_rc );
+        }
+
+        /* map pon logical port to physical port */
+        pon_phy_pbm = bal_bcm_pon_inf_pbm_get(p_flow->data.access_int_id);
+
+        /* create gport based on pon physical port number */
+        BCM_GPORT_LOCAL_SET(pon_gport, pon_phy_pbm);
+                                                   
+        /* add the specified pon to vlan */
+        bcm_rc = bcm_vlan_gport_add(unit, vlan_id, pon_gport, BCM_VLAN_GPORT_ADD_VP_VLAN_MEMBERSHIP);
+
+        if (bcm_rc != BCM_E_NONE)
+        {
+            BCM_LOG(ERROR, log_id_sw_util,
+                    " flow fail to add pon %d (pbm %d, gport %d) into vlan %d - %d\n", 
+                    p_flow->data.access_int_id, pon_phy_pbm, pon_gport, vlan_id, bcm_rc );
+                
+            ret = BCM_ERR_INTERNAL;
+
+            break;
+        }
+
+        /* Add all the NNI ports that are on the same device to the vlan as well */
+
+        ii = 0;  /* Start with the first NNI logical interface */
+
+        /* map nni logical ports to physical ports */
+        while(-1 != (nni_phy_pbm = bal_bcm_net_inf_pbm_get(ii)))
+        {
+            if ( bal_bcm_net_inf_dev_get(ii) != unit)
+            {
+                continue; 
+            }
+            /* create gport based on nni physical port number */
+            BCM_GPORT_LOCAL_SET(nni_gport, nni_phy_pbm);
+                
+            bcm_rc = bcm_vlan_gport_add(unit, vlan_id, nni_gport, BCM_VLAN_GPORT_ADD_VP_VLAN_MEMBERSHIP);
+
+            if (bcm_rc != BCM_E_NONE)
+            {
+                BCM_LOG(ERROR, log_id_sw_util,
+                        " flow fail to add nni %d (pbm %d, gport %d) into vlan %d - %d\n", 
+                        ii, nni_phy_pbm, nni_gport, vlan_id, bcm_rc );
+                     
+                ret = BCM_ERR_INTERNAL;
+
+                break;
+            }
+
+            ii++; /* Next NNI */
+        }
+        
+        /* perform the ACTION */
+        if (BCMOS_TRUE == BCMBAL_CFG_PROP_IS_SET(p_flow, flow, action) 
+            /* && BCMOS_TRUE == BCMBAL_ATTRIBUTE_CFG_PROP_IS_SET(&p_flow->data.action, action, action_cmds_bitmask) */
+            )
+        {
+            BCM_LOG(INFO, log_id_sw_util,
+                    " Got a flow action - flow type = %d, cmd=%d in_ovid=%d, out_ovid=%d\n", 
+                    p_flow->key.flow_type, p_flow->data.action.cmds_bitmask,
+                    p_flow->data.classifier.i_vid, p_flow->data.classifier.o_vid);
+                           
+            /* enable vlan translation */
+            bcm_rc = bcm_vlan_control_set(unit, bcmVlanTranslate, 1);
+            if (bcm_rc != BCM_E_NONE)
+            {
+                BCM_LOG(ERROR, log_id_sw_util,
+                        " flow fail to enable vlan translation - %d\n", 
+                        bcm_rc );               
+                ret = BCM_ERR_INTERNAL;
+                break;
+            }            
+            /* For TR-156 1:1 downstream,
+               ACTIONs are performed on the EGRESS vlan translator.
+               For TR-156 1:1 upstream,
+               ACTIONs are perform on the INGRESS vlan translator. 
+               For TR-156 N:1 there is no actions for switch
+               The outer tag adding is per PON base, i.e. upstream packets with same
+               inner vid can add different outer vid based on receiving PON 
+            */
+            if (BCMBAL_FLOW_TYPE_UPSTREAM == p_flow->key.flow_type)
+            {
+                if ( p_flow->data.action.cmds_bitmask & BCMBAL_ACTION_CMD_ID_ADD_OUTER_TAG )
+                {
+                    ret = bal_swapp_esw_ivlanx(unit, p_flow); 
+                }    
+            }
+            else if (BCMBAL_FLOW_TYPE_DOWNSTREAM == p_flow->key.flow_type)/* downstream */
+            { 
+                if ( p_flow->data.action.cmds_bitmask & BCMBAL_ACTION_CMD_ID_REMOVE_OUTER_TAG )
+                {
+                    ret = bal_swapp_esw_evlanx(unit, p_flow);                
+                }    
+            }
+            else  /* broadcast */
+            {
+                if ( p_flow->data.action.cmds_bitmask & BCMBAL_ACTION_CMD_ID_DISCARD_DS_BCAST)
+                {
+                    ret = bal_swapp_esw_acl_add(unit, p_flow);
+                }   
+                
+            }   
+        } /* end if ACTION set */
+
+    } while(0);
+
+        
+    return ret;
+}
+
+/**
+ * @brief The flow remove function remove switch resource that were allocated during ADD
+ *
+ * @param iwf_mode The InterWorking Function mode - DIRECT or PER-FLOW
+ * @param p_flow A pointer to the requested add flow info
+ * @return error code
+ */
+bcmos_errno bal_sw_util_esw_flow_remove(bcmbal_iwf_mode iwf_mode,  bcmbal_flow_cfg *p_flow)
+{
+    return BCM_ERR_OK;
+}
+
+#endif /* #ifndef TEST_SW_UTIL_LOOPBACK */
+
+/*@}*/
diff --git a/bal_release/src/core/util/switch/esw/bal_esw_flow.h b/bal_release/src/core/util/switch/esw/bal_esw_flow.h
new file mode 100755
index 0000000..3146222
--- /dev/null
+++ b/bal_release/src/core/util/switch/esw/bal_esw_flow.h
@@ -0,0 +1,52 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file bal_esw_flow.h
+ *
+ * @brief Function Prototype for switch app flow functions for ESW 
+ *
+ * @ingroup switch_app
+ */
+
+#ifndef  _BAL_ESW_FLOW_H_
+#define  _BAL_ESW_FLOW_H_
+
+#include "bal_switch_util.h"
+
+/*@{*/
+
+bcmos_errno bal_sw_util_esw_flow_add(bcmbal_iwf_mode iwf_mode, bcmbal_flow_cfg *p_flow);
+bcmos_errno bal_sw_util_esw_flow_remove(bcmbal_iwf_mode iwf_mode, bcmbal_flow_cfg *p_flow);
+ 
+/*@}*/
+ 
+#endif
diff --git a/bal_release/src/datamodel/bal.objset b/bal_release/src/datamodel/bal.objset
new file mode 100644
index 0000000..e8801cf
--- /dev/null
+++ b/bal_release/src/datamodel/bal.objset
@@ -0,0 +1,3901 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ElementSet Version="2.1">
+ <KeyValuePairs>
+  <KeyValuePair>
+   <Key>SupportsAutoCfg</Key>
+   <Value>False</Value>
+  </KeyValuePair>
+ </KeyValuePairs>
+ <Label>
+  <ShortName>bal</ShortName>
+  <LongName>BAL</LongName>
+  <Description>BAL Object Model</Description>
+ </Label>
+ <CustomTypes>
+  <CustomType Type="CustomTypeAlias">
+   <Label>
+    <ShortName>access_id</ShortName>
+    <LongName>Access ID</LongName>
+   </Label>
+   <BaseType>
+    <Width>4</Width>
+    <Signed>False</Signed>
+   </BaseType>
+  </CustomType>
+  <CustomType Type="CustomTypeStructure">
+   <Label>
+    <ShortName>action</ShortName>
+    <LongName>action</LongName>
+   </Label>
+   <Options>PresenceMask</Options>
+   <Fields>
+    <Field>
+     <Label>
+      <ShortName>cmds_bitmask</ShortName>
+      <LongName>Commands bitmask</LongName>
+     </Label>
+     <FieldType Type="FieldTypeReference">
+      <ShortName>action_cmd_id</ShortName>
+     </FieldType>
+    </Field>
+    <Field>
+     <Label>
+      <ShortName>o_vid</ShortName>
+      <LongName>Outer vid</LongName>
+     </Label>
+     <FieldType Type="FieldTypeNumber">
+      <Width>2</Width>
+      <Signed>False</Signed>
+     </FieldType>
+    </Field>
+    <Field>
+     <Label>
+      <ShortName>o_pbits</ShortName>
+      <LongName>Outer pbits</LongName>
+     </Label>
+     <FieldType Type="FieldTypeNumber">
+      <Width>1</Width>
+      <Signed>False</Signed>
+     </FieldType>
+    </Field>
+    <Field>
+     <Label>
+      <ShortName>o_tpid</ShortName>
+      <LongName>Outer tpid</LongName>
+     </Label>
+     <FieldType Type="FieldTypeNumber">
+      <Width>2</Width>
+      <Signed>False</Signed>
+     </FieldType>
+    </Field>
+    <Field>
+     <Label>
+      <ShortName>i_vid</ShortName>
+      <LongName>Inner vid</LongName>
+     </Label>
+     <FieldType Type="FieldTypeNumber">
+      <Width>2</Width>
+      <Signed>False</Signed>
+     </FieldType>
+    </Field>
+    <Field>
+     <Label>
+      <ShortName>i_pbits</ShortName>
+      <LongName>Inner pbits</LongName>
+     </Label>
+     <FieldType Type="FieldTypeNumber">
+      <Width>1</Width>
+      <Signed>False</Signed>
+     </FieldType>
+    </Field>
+    <Field>
+     <Label>
+      <ShortName>i_tpid</ShortName>
+      <LongName>Inner tpid</LongName>
+     </Label>
+     <FieldType Type="FieldTypeNumber">
+      <Width>2</Width>
+      <Signed>False</Signed>
+     </FieldType>
+    </Field>
+   </Fields>
+  </CustomType>
+  <CustomType Type="CustomTypeEnum">
+   <Label>
+    <ShortName>action_cmd_id</ShortName>
+    <LongName>action_cmd_id</LongName>
+   </Label>
+   <Flags>True</Flags>
+   <BaseType>
+    <Width>4</Width>
+    <Signed>False</Signed>
+   </BaseType>
+   <Entries>
+    <EnumEntry>
+     <Label>
+      <ShortName>add_outer_tag</ShortName>
+      <LongName>Add outer tag</LongName>
+     </Label>
+     <Value>1</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>remove_outer_tag</ShortName>
+      <LongName>Remove outer tag</LongName>
+     </Label>
+     <Value>2</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>xlate_outer_tag</ShortName>
+      <LongName>Translate outer tag</LongName>
+     </Label>
+     <Value>4</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>xlate_two_tags</ShortName>
+      <LongName>Translate two tags</LongName>
+     </Label>
+     <Value>8</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>discard_ds_bcast</ShortName>
+      <LongName>Discard downstream broadcast</LongName>
+      <Description>Used to satisfy TR-156 Issue 3 R-111</Description>
+     </Label>
+     <Value>16</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>discard_ds_unknown</ShortName>
+      <LongName>Discard downstream unknown</LongName>
+      <Description>Used to satisfy TR-156 Issue 3 R-109</Description>
+     </Label>
+     <Value>32</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>add_two_tags</ShortName>
+      <LongName>Add two tags</LongName>
+     </Label>
+     <Value>64</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>remove_two_tags</ShortName>
+      <LongName>Remove two tags</LongName>
+     </Label>
+     <Value>128</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>remark_pbits</ShortName>
+      <LongName>Remark pbits</LongName>
+      <Description>Set the outer tag pbits</Description>
+     </Label>
+     <Value>256</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>copy_pbits</ShortName>
+      <LongName>Copy pbits</LongName>
+      <Description>Copy the inner pbits to outer pbits</Description>
+     </Label>
+     <Value>512</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>reverse_copy_pbits</ShortName>
+      <LongName>Reverse copy pbits</LongName>
+      <Description>Copy the outer pbits to inner pbits</Description>
+     </Label>
+     <Value>1024</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>dscp_to_pbits</ShortName>
+      <LongName>Dscp to pbits</LongName>
+      <Description>Copy the L4 DSCP to outer pbits</Description>
+     </Label>
+     <Value>2048</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>trap_to_host</ShortName>
+      <LongName>Trap to host</LongName>
+      <Description>Not a valid action for a group object member</Description>
+     </Label>
+     <Value>4096</Value>
+    </EnumEntry>
+   </Entries>
+  </CustomType>
+  <CustomType Type="CustomTypeAlias">
+   <Label>
+    <ShortName>aggregation_port_id</ShortName>
+    <LongName>Aggregation port id</LongName>
+   </Label>
+   <BaseType>
+    <Width>2</Width>
+    <Signed>False</Signed>
+   </BaseType>
+  </CustomType>
+  <CustomType Type="CustomTypeStructure">
+   <Label>
+    <ShortName>classifier</ShortName>
+    <LongName>classifier</LongName>
+   </Label>
+   <Options>PresenceMask</Options>
+   <Fields>
+    <Field>
+     <Label>
+      <ShortName>o_tpid</ShortName>
+      <LongName>Outer tpid</LongName>
+      <Description>Outer TPID of the packet to be classified</Description>
+     </Label>
+     <FieldType Type="FieldTypeNumber">
+      <Width>2</Width>
+      <Signed>False</Signed>
+     </FieldType>
+    </Field>
+    <Field>
+     <Label>
+      <ShortName>o_vid</ShortName>
+      <LongName>Outer vid</LongName>
+      <Description>Outer VID of the packet to be classified</Description>
+     </Label>
+     <FieldType Type="FieldTypeNumber">
+      <Width>2</Width>
+      <Signed>False</Signed>
+     </FieldType>
+    </Field>
+    <Field>
+     <Label>
+      <ShortName>i_tpid</ShortName>
+      <LongName>Inner tpid</LongName>
+      <Description>Inner TPID of the packet to be classified</Description>
+     </Label>
+     <FieldType Type="FieldTypeNumber">
+      <Width>2</Width>
+      <Signed>False</Signed>
+     </FieldType>
+    </Field>
+    <Field>
+     <Label>
+      <ShortName>i_vid</ShortName>
+      <LongName>Inner vid</LongName>
+      <Description>Inner VID of the packet to be classified</Description>
+     </Label>
+     <FieldType Type="FieldTypeNumber">
+      <Width>2</Width>
+      <Signed>False</Signed>
+     </FieldType>
+    </Field>
+    <Field>
+     <Label>
+      <ShortName>o_pbits</ShortName>
+      <LongName>Outer Pbits</LongName>
+      <Description>Outer PBITS of the packet to be classified</Description>
+     </Label>
+     <FieldType Type="FieldTypeNumber">
+      <Width>1</Width>
+      <Signed>False</Signed>
+     </FieldType>
+    </Field>
+    <Field>
+     <Label>
+      <ShortName>i_pbits</ShortName>
+      <LongName>Inner Pbits</LongName>
+      <Description>Inner PBITS of the packet to be classified</Description>
+     </Label>
+     <FieldType Type="FieldTypeNumber">
+      <Width>1</Width>
+      <Signed>False</Signed>
+     </FieldType>
+    </Field>
+    <Field>
+     <Label>
+      <ShortName>ether_type</ShortName>
+      <LongName>Ether type</LongName>
+      <Description>Ethertype of the packet to be classified</Description>
+     </Label>
+     <FieldType Type="FieldTypeNumber">
+      <Width>2</Width>
+      <Signed>False</Signed>
+     </FieldType>
+    </Field>
+    <Field>
+     <Label>
+      <ShortName>dst_mac</ShortName>
+      <LongName>Destination mac</LongName>
+      <Description>Destination MAC address of the packet to be classified</Description>
+     </Label>
+     <FieldType Type="FieldTypeWellKnown">
+      <WellKnownType>MacAddress</WellKnownType>
+     </FieldType>
+    </Field>
+    <Field>
+     <Label>
+      <ShortName>src_mac</ShortName>
+      <LongName>Source mac</LongName>
+      <Description>Source MAC address of the packet to be classified</Description>
+     </Label>
+     <FieldType Type="FieldTypeWellKnown">
+      <WellKnownType>MacAddress</WellKnownType>
+     </FieldType>
+    </Field>
+    <Field>
+     <Label>
+      <ShortName>ip_proto</ShortName>
+      <LongName>IP Protocol</LongName>
+      <Description>IP protocol of the packet to be classified</Description>
+     </Label>
+     <FieldType Type="FieldTypeNumber">
+      <Width>1</Width>
+      <Signed>False</Signed>
+     </FieldType>
+    </Field>
+    <Field>
+     <Label>
+      <ShortName>dst_ip</ShortName>
+      <LongName>Destination IP address</LongName>
+      <Description>Destination IP address of the packet to be classified</Description>
+     </Label>
+     <FieldType Type="FieldTypeWellKnown">
+      <WellKnownType>IPv4Address</WellKnownType>
+     </FieldType>
+    </Field>
+    <Field>
+     <Label>
+      <ShortName>src_ip</ShortName>
+      <LongName>Source IP address</LongName>
+      <Description>Source IP address of the packet to be classified</Description>
+     </Label>
+     <FieldType Type="FieldTypeWellKnown">
+      <WellKnownType>IPv4Address</WellKnownType>
+     </FieldType>
+    </Field>
+    <Field>
+     <Label>
+      <ShortName>src_port</ShortName>
+      <LongName>Source port</LongName>
+      <Description>Source port of the packet to be classified</Description>
+     </Label>
+     <FieldType Type="FieldTypeNumber">
+      <Width>2</Width>
+      <Signed>False</Signed>
+     </FieldType>
+    </Field>
+    <Field>
+     <Label>
+      <ShortName>dst_port</ShortName>
+      <LongName>Destination port</LongName>
+      <Description>Destination port of the packet to be classified</Description>
+     </Label>
+     <FieldType Type="FieldTypeNumber">
+      <Width>2</Width>
+      <Signed>False</Signed>
+     </FieldType>
+    </Field>
+    <Field>
+     <Label>
+      <ShortName>pkt_tag_type</ShortName>
+      <LongName>Packet tag type</LongName>
+      <Description>The tag type of the ingress packets</Description>
+     </Label>
+     <FieldType Type="FieldTypeReference">
+      <ShortName>pkt_tag_type</ShortName>
+     </FieldType>
+    </Field>
+   </Fields>
+  </CustomType>
+  <CustomType Type="CustomTypeEnum">
+   <Label>
+    <ShortName>control</ShortName>
+    <LongName>control</LongName>
+    <Description>Generic enable/disable enumeration</Description>
+   </Label>
+   <BaseType>
+    <Width>4</Width>
+    <Signed>False</Signed>
+   </BaseType>
+   <Entries>
+    <EnumEntry>
+     <Label>
+      <ShortName>disable</ShortName>
+      <LongName>disable</LongName>
+     </Label>
+     <Value>0</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>enable</ShortName>
+      <LongName>enable</LongName>
+     </Label>
+     <Value>1</Value>
+    </EnumEntry>
+   </Entries>
+  </CustomType>
+  <CustomType Type="CustomTypeAlias">
+   <Label>
+    <ShortName>cookie</ShortName>
+    <LongName>cookie</LongName>
+   </Label>
+   <BaseType>
+    <Width>8</Width>
+    <Signed>False</Signed>
+   </BaseType>
+  </CustomType>
+  <CustomType Type="CustomTypeClassifiedStructure">
+   <Label>
+    <ShortName>dest</ShortName>
+    <LongName>Packet destination</LongName>
+   </Label>
+   <Options>ValueType</Options>
+   <CommonFields>
+    <Field>
+     <Label>
+      <ShortName>type</ShortName>
+      <LongName>packet destination</LongName>
+     </Label>
+     <FieldType Type="FieldTypeReference">
+      <ShortName>dest_type</ShortName>
+     </FieldType>
+    </Field>
+   </CommonFields>
+   <ClassifierFieldName>type</ClassifierFieldName>
+   <ClassifiedStructures>
+    <ClassifiedStructure>
+     <ClassifierValue>nni</ClassifierValue>
+     <EmbeddedStructure>
+      <Label>
+       <ShortName></ShortName>
+       <LongName></LongName>
+      </Label>
+      <Options>ValueType</Options>
+      <Fields>
+       <Field>
+        <Label>
+         <ShortName>int_id</ShortName>
+         <LongName>Interface ID</LongName>
+        </Label>
+        <FieldType Type="FieldTypeReference">
+         <ShortName>intf_id</ShortName>
+        </FieldType>
+       </Field>
+      </Fields>
+     </EmbeddedStructure>
+    </ClassifiedStructure>
+    <ClassifiedStructure>
+     <ClassifierValue>sub_term</ClassifierValue>
+     <EmbeddedStructure>
+      <Label>
+       <ShortName></ShortName>
+       <LongName></LongName>
+      </Label>
+      <Options>ValueType</Options>
+      <Fields>
+       <Field>
+        <Label>
+         <ShortName>sub_term_id</ShortName>
+         <LongName>Subscriber terminal ID</LongName>
+        </Label>
+        <FieldType Type="FieldTypeReference">
+         <ShortName>sub_id</ShortName>
+        </FieldType>
+       </Field>
+       <Field>
+        <Label>
+         <ShortName>sub_term_uni</ShortName>
+         <LongName>Subscriber terminal UNI</LongName>
+        </Label>
+        <FieldType Type="FieldTypeNumber">
+         <Width>2</Width>
+         <Signed>False</Signed>
+        </FieldType>
+       </Field>
+       <Field>
+        <Label>
+         <ShortName>int_id</ShortName>
+         <LongName>Interface ID</LongName>
+        </Label>
+        <FieldType Type="FieldTypeNumber">
+         <Width>2</Width>
+         <Signed>False</Signed>
+        </FieldType>
+       </Field>
+      </Fields>
+     </EmbeddedStructure>
+    </ClassifiedStructure>
+    <ClassifiedStructure>
+     <ClassifierValue>host</ClassifierValue>
+     <EmbeddedStructure>
+      <Label>
+       <ShortName></ShortName>
+       <LongName></LongName>
+      </Label>
+      <Options>ValueType</Options>
+     </EmbeddedStructure>
+    </ClassifiedStructure>
+   </ClassifiedStructures>
+  </CustomType>
+  <CustomType Type="CustomTypeEnum">
+   <Label>
+    <ShortName>dest_type</ShortName>
+    <LongName>Destination type</LongName>
+   </Label>
+   <BaseType>
+    <Width>4</Width>
+    <Signed>False</Signed>
+   </BaseType>
+   <Entries>
+    <EnumEntry>
+     <Label>
+      <ShortName>nni</ShortName>
+      <LongName>nni</LongName>
+      <Description>for packets being sent to the NNI</Description>
+     </Label>
+     <Value>1</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>sub_term</ShortName>
+      <LongName>subscriber terminal</LongName>
+      <Description>for packets being sent to a subscriber terminal</Description>
+     </Label>
+     <Value>2</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>host</ShortName>
+      <LongName>host</LongName>
+      <Description> for packet indications received from NNI or SUB_TERM and being sent to the host</Description>
+     </Label>
+     <Value>3</Value>
+    </EnumEntry>
+   </Entries>
+  </CustomType>
+  <CustomType Type="CustomTypeEnum">
+   <Label>
+    <ShortName>ds_miss_mode</ShortName>
+    <LongName>Downstrean action for unknown packets</LongName>
+   </Label>
+   <BaseType>
+    <Width>4</Width>
+    <Signed>False</Signed>
+   </BaseType>
+   <Entries>
+    <EnumEntry>
+     <Label>
+      <ShortName>discard</ShortName>
+      <LongName>Discard</LongName>
+     </Label>
+     <Value>0</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>broadcast</ShortName>
+      <LongName>Broadcast</LongName>
+     </Label>
+     <Value>1</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>vid</ShortName>
+      <LongName>Vid</LongName>
+     </Label>
+     <Value>2</Value>
+    </EnumEntry>
+   </Entries>
+  </CustomType>
+  <CustomType Type="CustomTypeEnum">
+   <Label>
+    <ShortName>extra_bw_eligibility_type</ShortName>
+    <LongName>extra_bw_eligibility_type</LongName>
+    <Description>Extra BW Eligibility Type</Description>
+   </Label>
+   <BaseType>
+    <Width>1</Width>
+    <Signed>False</Signed>
+   </BaseType>
+   <Entries>
+    <EnumEntry>
+     <Label>
+      <ShortName>none</ShortName>
+      <LongName>none</LongName>
+      <Description>None</Description>
+     </Label>
+     <Value>0</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>not_assured</ShortName>
+      <LongName>not_assured</LongName>
+      <Description>Not assured</Description>
+     </Label>
+     <Value>1</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>best_effort</ShortName>
+      <LongName>best_effort</LongName>
+      <Description>Best effort</Description>
+     </Label>
+     <Value>2</Value>
+    </EnumEntry>
+   </Entries>
+  </CustomType>
+  <CustomType Type="CustomTypeAlias">
+   <Label>
+    <ShortName>flow_id</ShortName>
+    <LongName>flow id</LongName>
+   </Label>
+   <BaseType>
+    <Width>4</Width>
+    <Signed>False</Signed>
+   </BaseType>
+  </CustomType>
+  <CustomType Type="CustomTypeEnum">
+   <Label>
+    <ShortName>flow_type</ShortName>
+    <LongName>Flow Type</LongName>
+   </Label>
+   <BaseType>
+    <Width>4</Width>
+    <Signed>False</Signed>
+   </BaseType>
+   <Entries>
+    <EnumEntry>
+     <Label>
+      <ShortName>upstream</ShortName>
+      <LongName>Upstream flow</LongName>
+      <Description>Upstream flow</Description>
+     </Label>
+     <Value>1</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>downstream</ShortName>
+      <LongName>Downstream flow</LongName>
+      <Description>Downstream Flow</Description>
+     </Label>
+     <Value>2</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>broadcast</ShortName>
+      <LongName>Broadcast flow</LongName>
+      <Description>Broadcast Flow</Description>
+     </Label>
+     <Value>3</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>multicast</ShortName>
+      <LongName>Multicast flow</LongName>
+      <Description>Multicast Flow</Description>
+     </Label>
+     <Value>4</Value>
+    </EnumEntry>
+   </Entries>
+  </CustomType>
+  <CustomType Type="CustomTypeAlias">
+   <Label>
+    <ShortName>group_id</ShortName>
+    <LongName>group id</LongName>
+   </Label>
+   <BaseType>
+    <Width>4</Width>
+    <Signed>False</Signed>
+   </BaseType>
+  </CustomType>
+  <CustomType Type="CustomTypeEnum">
+   <Label>
+    <ShortName>group_member_cmd</ShortName>
+    <LongName>Member operation type</LongName>
+   </Label>
+   <BaseType>
+    <Width>4</Width>
+    <Signed>False</Signed>
+   </BaseType>
+   <Entries>
+    <EnumEntry>
+     <Label>
+      <ShortName>add_members</ShortName>
+      <LongName>Add new members</LongName>
+     </Label>
+     <Value>1</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>rem_members</ShortName>
+      <LongName>Remove existing members</LongName>
+     </Label>
+     <Value>2</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>set_members</ShortName>
+      <LongName>Replace members with new set</LongName>
+     </Label>
+     <Value>3</Value>
+    </EnumEntry>
+   </Entries>
+  </CustomType>
+  <CustomType Type="CustomTypeStructure">
+   <Label>
+    <ShortName>group_member_info</ShortName>
+    <LongName>Group Member Info</LongName>
+   </Label>
+   <Fields>
+    <Field>
+     <Label>
+      <ShortName>intf_id</ShortName>
+      <LongName>Access Interface ID</LongName>
+      <Description>Access interface id for this member</Description>
+     </Label>
+     <FieldType Type="FieldTypeReference">
+      <ShortName>intf_id</ShortName>
+     </FieldType>
+    </Field>
+    <Field>
+     <Label>
+      <ShortName>svc_port_id</ShortName>
+      <LongName>Service Port ID</LongName>
+      <Description>The multicast "GEM" for this member</Description>
+     </Label>
+     <FieldType Type="FieldTypeReference">
+      <ShortName>service_port_id</ShortName>
+     </FieldType>
+    </Field>
+    <Field>
+     <Label>
+      <ShortName>action</ShortName>
+      <LongName>VLAN Actions</LongName>
+      <Description>VLAN actions</Description>
+     </Label>
+     <FieldType Type="FieldTypeReference">
+      <ShortName>action</ShortName>
+     </FieldType>
+    </Field>
+    <Field>
+     <Label>
+      <ShortName>queue</ShortName>
+      <LongName>Egress queue</LongName>
+      <Description>Egress queue</Description>
+     </Label>
+     <FieldType Type="FieldTypeReference">
+      <ShortName>tm_queue_ref</ShortName>
+     </FieldType>
+    </Field>
+   </Fields>
+  </CustomType>
+  <CustomType Type="CustomTypeEnum">
+   <Label>
+    <ShortName>group_owner</ShortName>
+    <LongName>group_owner</LongName>
+    <Description>owner of the group</Description>
+   </Label>
+   <BaseType>
+    <Width>1</Width>
+    <Signed>False</Signed>
+   </BaseType>
+   <Entries>
+    <EnumEntry>
+     <Label>
+      <ShortName>none</ShortName>
+      <LongName>group_owner_none</LongName>
+      <Description>no owner</Description>
+     </Label>
+     <Value>0</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>multicast</ShortName>
+      <LongName>group_owner_multicast</LongName>
+      <Description>used as multicast group</Description>
+     </Label>
+     <Value>1</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>unicast</ShortName>
+      <LongName>group_owner_unicast</LongName>
+      <Description>used as unicast group</Description>
+     </Label>
+     <Value>2</Value>
+    </EnumEntry>
+   </Entries>
+  </CustomType>
+  <CustomType Type="CustomTypeAlias">
+   <Label>
+    <ShortName>intf_id</ShortName>
+    <LongName>Interface ID</LongName>
+   </Label>
+   <BaseType>
+    <Width>4</Width>
+    <Signed>False</Signed>
+   </BaseType>
+  </CustomType>
+  <CustomType Type="CustomTypeEnum">
+   <Label>
+    <ShortName>intf_type</ShortName>
+    <LongName>Interface type</LongName>
+   </Label>
+   <BaseType>
+    <Width>4</Width>
+    <Signed>False</Signed>
+   </BaseType>
+   <Entries>
+    <EnumEntry>
+     <Label>
+      <ShortName>nni</ShortName>
+      <LongName>NNI Interface</LongName>
+     </Label>
+     <Value>0</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>pon</ShortName>
+      <LongName>POIN Interface</LongName>
+     </Label>
+     <Value>1</Value>
+    </EnumEntry>
+   </Entries>
+  </CustomType>
+  <CustomType Type="CustomTypeEnum">
+   <Label>
+    <ShortName>iwf_mode</ShortName>
+    <LongName>Interworking Function Mode</LongName>
+   </Label>
+   <BaseType>
+    <Width>4</Width>
+    <Signed>False</Signed>
+   </BaseType>
+   <Entries>
+    <EnumEntry>
+     <Label>
+      <ShortName>direct_mapping</ShortName>
+      <LongName>Direct mapping</LongName>
+     </Label>
+     <Value>0</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>per_flow</ShortName>
+      <LongName>Per flow </LongName>
+     </Label>
+     <Value>1</Value>
+    </EnumEntry>
+   </Entries>
+  </CustomType>
+  <CustomType Type="CustomTypeStructure">
+   <Label>
+    <ShortName>password</ShortName>
+    <LongName>Password</LongName>
+   </Label>
+   <Fields>
+    <Field>
+     <Label>
+      <ShortName>arr</ShortName>
+      <LongName>Array</LongName>
+     </Label>
+     <FieldType Type="FieldTypeList">
+      <ElementType Type="FieldTypeNumber">
+       <Width>1</Width>
+       <Signed>False</Signed>
+      </ElementType>
+      <MinimumLength>10</MinimumLength>
+      <MaximumLength>10</MaximumLength>
+     </FieldType>
+    </Field>
+   </Fields>
+  </CustomType>
+  <CustomType Type="CustomTypeAlias">
+   <Label>
+    <ShortName>percent</ShortName>
+    <LongName>percent</LongName>
+    <Description>Percent</Description>
+   </Label>
+   <BaseType>
+    <Width>1</Width>
+    <Signed>False</Signed>
+   </BaseType>
+   <MinimumValue>0</MinimumValue>
+   <MaximumValue>100</MaximumValue>
+  </CustomType>
+  <CustomType Type="CustomTypeEnum">
+   <Label>
+    <ShortName>pkt_tag_type</ShortName>
+    <LongName>Packet tag type</LongName>
+   </Label>
+   <Flags>True</Flags>
+   <BaseType>
+    <Width>4</Width>
+    <Signed>False</Signed>
+   </BaseType>
+   <Entries>
+    <EnumEntry>
+     <Label>
+      <ShortName>untagged</ShortName>
+      <LongName>Untagged</LongName>
+     </Label>
+     <Value>1</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>single_tag</ShortName>
+      <LongName>Single tag</LongName>
+     </Label>
+     <Value>2</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>double_tag</ShortName>
+      <LongName>Double tag</LongName>
+     </Label>
+     <Value>4</Value>
+    </EnumEntry>
+   </Entries>
+  </CustomType>
+  <CustomType Type="CustomTypeStructure">
+   <Label>
+    <ShortName>registration_id</ShortName>
+    <LongName>Registration id</LongName>
+   </Label>
+   <Fields>
+    <Field>
+     <Label>
+      <ShortName>arr</ShortName>
+      <LongName>Array</LongName>
+      <Description>ONU registration ID</Description>
+     </Label>
+     <FieldType Type="FieldTypeList">
+      <ElementType Type="FieldTypeNumber">
+       <Width>1</Width>
+       <Signed>False</Signed>
+      </ElementType>
+      <MinimumLength>36</MinimumLength>
+      <MaximumLength>36</MaximumLength>
+     </FieldType>
+    </Field>
+   </Fields>
+  </CustomType>
+  <CustomType Type="CustomTypeStructure">
+   <Label>
+    <ShortName>serial_number</ShortName>
+    <LongName>Serial number</LongName>
+   </Label>
+   <Fields>
+    <Field>
+     <Label>
+      <ShortName>vendor_id</ShortName>
+      <LongName>vendor id</LongName>
+     </Label>
+     <FieldType Type="FieldTypeList">
+      <ElementType Type="FieldTypeNumber">
+       <Width>1</Width>
+       <Signed>False</Signed>
+      </ElementType>
+      <MinimumLength>4</MinimumLength>
+      <MaximumLength>4</MaximumLength>
+     </FieldType>
+    </Field>
+    <Field>
+     <Label>
+      <ShortName>vendor_specific</ShortName>
+      <LongName>vendor specific</LongName>
+     </Label>
+     <FieldType Type="FieldTypeList">
+      <ElementType Type="FieldTypeNumber">
+       <Width>1</Width>
+       <Signed>False</Signed>
+      </ElementType>
+      <MinimumLength>4</MinimumLength>
+      <MaximumLength>4</MaximumLength>
+     </FieldType>
+    </Field>
+   </Fields>
+  </CustomType>
+  <CustomType Type="CustomTypeAlias">
+   <Label>
+    <ShortName>service_port_id</ShortName>
+    <LongName>Service port id</LongName>
+   </Label>
+   <BaseType>
+    <Width>2</Width>
+    <Signed>False</Signed>
+   </BaseType>
+  </CustomType>
+  <CustomType Type="CustomTypeStructure">
+   <Label>
+    <ShortName>sla</ShortName>
+    <LongName>SLA</LongName>
+   </Label>
+   <Options>PresenceMask</Options>
+   <Fields>
+    <Field>
+     <Label>
+      <ShortName>min_rate</ShortName>
+      <LongName>Minimum rate</LongName>
+      <Description>The minimal rate for this flow, in kilobits per second (optional)</Description>
+     </Label>
+     <FieldType Type="FieldTypeNumber">
+      <Width>4</Width>
+      <Signed>False</Signed>
+     </FieldType>
+    </Field>
+    <Field>
+     <Label>
+      <ShortName>max_rate</ShortName>
+      <LongName>Maximum rate</LongName>
+      <Description>The maximum rate for this flow, in kilobits per second (optional)</Description>
+     </Label>
+     <FieldType Type="FieldTypeNumber">
+      <Width>4</Width>
+      <Signed>False</Signed>
+     </FieldType>
+    </Field>
+   </Fields>
+  </CustomType>
+  <CustomType Type="CustomTypeEnum">
+   <Label>
+    <ShortName>state</ShortName>
+    <LongName>state</LongName>
+    <Description>Admin state values for access terminal object</Description>
+   </Label>
+   <BaseType>
+    <Width>4</Width>
+    <Signed>False</Signed>
+   </BaseType>
+   <Entries>
+    <EnumEntry>
+     <Label>
+      <ShortName>up</ShortName>
+      <LongName>Up</LongName>
+      <Description>Admin state up</Description>
+     </Label>
+     <Value>1</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>down</ShortName>
+      <LongName>Down</LongName>
+      <Description>Admin state down</Description>
+     </Label>
+     <Value>2</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>testing</ShortName>
+      <LongName>Testing</LongName>
+      <Description>Admin state testing</Description>
+     </Label>
+     <Value>3</Value>
+    </EnumEntry>
+   </Entries>
+  </CustomType>
+  <CustomType Type="CustomTypeEnum">
+   <Label>
+    <ShortName>status</ShortName>
+    <LongName>status</LongName>
+    <Description>Oper status values</Description>
+   </Label>
+   <BaseType>
+    <Width>4</Width>
+    <Signed>False</Signed>
+   </BaseType>
+   <Entries>
+    <EnumEntry>
+     <Label>
+      <ShortName>up</ShortName>
+      <LongName>Up</LongName>
+      <Description>Oper status up</Description>
+     </Label>
+     <Value>1</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>down</ShortName>
+      <LongName>Down</LongName>
+      <Description>Oper status down</Description>
+     </Label>
+     <Value>2</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>testing</ShortName>
+      <LongName>Testing</LongName>
+      <Description>Oper status testing</Description>
+     </Label>
+     <Value>3</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>not_present</ShortName>
+      <LongName>Not present</LongName>
+      <Description>Oper status not present</Description>
+     </Label>
+     <Value>4</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>lower_layer_down</ShortName>
+      <LongName>Lower layer down</LongName>
+      <Description>Oper status lower layer down</Description>
+     </Label>
+     <Value>5</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>unknown</ShortName>
+      <LongName>Unknown</LongName>
+      <Description>Oper status unknown</Description>
+     </Label>
+     <Value>6</Value>
+    </EnumEntry>
+   </Entries>
+  </CustomType>
+  <CustomType Type="CustomTypeAlias">
+   <Label>
+    <ShortName>sub_id</ShortName>
+    <LongName>Subterminal Terminal ID</LongName>
+   </Label>
+   <BaseType>
+    <Width>4</Width>
+    <Signed>False</Signed>
+   </BaseType>
+   <Constants>
+    <AliasConstantEntry>
+     <Label>
+      <ShortName>unknown</ShortName>
+      <LongName>Unknown</LongName>
+     </Label>
+     <Value>0xFFFF</Value>
+    </AliasConstantEntry>
+   </Constants>
+  </CustomType>
+  <CustomType Type="CustomTypeClassifiedStructure">
+   <Label>
+    <ShortName>tm_bac</ShortName>
+    <LongName>tm_bac</LongName>
+    <Description>Queue Buffer Admission Control</Description>
+   </Label>
+   <CommonFields>
+    <Field>
+     <Label>
+      <ShortName>type</ShortName>
+      <LongName>type</LongName>
+      <Description>Buffer Admission Control Type</Description>
+     </Label>
+     <FieldType Type="FieldTypeReference">
+      <ShortName>tm_bac_type</ShortName>
+     </FieldType>
+    </Field>
+   </CommonFields>
+   <ClassifierFieldName>type</ClassifierFieldName>
+   <ClassifiedStructures>
+    <ClassifiedStructure>
+     <ClassifierValue>taildrop</ClassifierValue>
+     <EmbeddedStructure>
+      <Label>
+       <ShortName></ShortName>
+       <LongName></LongName>
+      </Label>
+      <Fields>
+       <Field>
+        <Label>
+         <ShortName>max_size</ShortName>
+         <LongName>max_size</LongName>
+         <Description>max number of packets in the queue</Description>
+        </Label>
+        <FieldType Type="FieldTypeNumber">
+         <Width>4</Width>
+         <Signed>False</Signed>
+        </FieldType>
+       </Field>
+      </Fields>
+     </EmbeddedStructure>
+    </ClassifiedStructure>
+    <ClassifiedStructure>
+     <ClassifierValue>red</ClassifierValue>
+     <EmbeddedStructure>
+      <Label>
+       <ShortName></ShortName>
+       <LongName></LongName>
+      </Label>
+      <Fields>
+       <Field>
+        <Label>
+         <ShortName>red</ShortName>
+         <LongName>red</LongName>
+         <Description>Random Early Discard configuration</Description>
+        </Label>
+        <FieldType Type="FieldTypeReference">
+         <ShortName>tm_red</ShortName>
+        </FieldType>
+       </Field>
+      </Fields>
+     </EmbeddedStructure>
+    </ClassifiedStructure>
+    <ClassifiedStructure>
+     <ClassifierValue>wred</ClassifierValue>
+     <EmbeddedStructure>
+      <Label>
+       <ShortName></ShortName>
+       <LongName></LongName>
+      </Label>
+      <Fields>
+       <Field>
+        <Label>
+         <ShortName>green</ShortName>
+         <LongName>green</LongName>
+         <Description>Green Random Early Discard Configuration</Description>
+        </Label>
+        <FieldType Type="FieldTypeReference">
+         <ShortName>tm_red</ShortName>
+        </FieldType>
+       </Field>
+       <Field>
+        <Label>
+         <ShortName>yellow</ShortName>
+         <LongName>yellow</LongName>
+         <Description>Yellow Random Early Discard Configuration</Description>
+        </Label>
+        <FieldType Type="FieldTypeReference">
+         <ShortName>tm_red</ShortName>
+        </FieldType>
+       </Field>
+       <Field>
+        <Label>
+         <ShortName>red</ShortName>
+         <LongName>red</LongName>
+         <Description>Red Random Early Discard Configuration</Description>
+        </Label>
+        <FieldType Type="FieldTypeReference">
+         <ShortName>tm_red</ShortName>
+        </FieldType>
+       </Field>
+      </Fields>
+     </EmbeddedStructure>
+    </ClassifiedStructure>
+   </ClassifiedStructures>
+  </CustomType>
+  <CustomType Type="CustomTypeEnum">
+   <Label>
+    <ShortName>tm_bac_type</ShortName>
+    <LongName>tm_bac_type</LongName>
+    <Description>Buffer Admission Control Type</Description>
+   </Label>
+   <BaseType>
+    <Width>1</Width>
+    <Signed>False</Signed>
+   </BaseType>
+   <Entries>
+    <EnumEntry>
+     <Label>
+      <ShortName>taildrop</ShortName>
+      <LongName>taildrop</LongName>
+      <Description>Taildrop </Description>
+     </Label>
+     <Value>0</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>wtaildrop</ShortName>
+      <LongName>wtaildrop</LongName>
+      <Description>Weighted taildrop</Description>
+     </Label>
+     <Value>1</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>red</ShortName>
+      <LongName>red</LongName>
+      <Description>Random Early Discard</Description>
+     </Label>
+     <Value>2</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>wred</ShortName>
+      <LongName>wred</LongName>
+      <Description>Weighted Random Early Discard</Description>
+     </Label>
+     <Value>3</Value>
+    </EnumEntry>
+   </Entries>
+  </CustomType>
+  <CustomType Type="CustomTypeEnum">
+   <Label>
+    <ShortName>tm_creation_mode</ShortName>
+    <LongName>tm_creation_mode</LongName>
+    <Description>TM Creation Mode</Description>
+   </Label>
+   <BaseType>
+    <Width>1</Width>
+    <Signed>False</Signed>
+   </BaseType>
+   <Entries>
+    <EnumEntry>
+     <Label>
+      <ShortName>manual</ShortName>
+      <LongName>manual</LongName>
+      <Description>tm object created manually</Description>
+     </Label>
+     <Value>0</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>auto</ShortName>
+      <LongName>auto</LongName>
+      <Description>tm object created automatically</Description>
+     </Label>
+     <Value>1</Value>
+    </EnumEntry>
+   </Entries>
+  </CustomType>
+  <CustomType Type="CustomTypeAlias">
+   <Label>
+    <ShortName>tm_priority</ShortName>
+    <LongName>tm_priority</LongName>
+    <Description>Scheduling Priority</Description>
+   </Label>
+   <BaseType>
+    <Width>1</Width>
+    <Signed>False</Signed>
+   </BaseType>
+  </CustomType>
+  <CustomType Type="CustomTypeAlias">
+   <Label>
+    <ShortName>tm_queue_id</ShortName>
+    <LongName>tm_queue_id</LongName>
+    <Description>Queue ID</Description>
+   </Label>
+   <BaseType>
+    <Width>1</Width>
+    <Signed>False</Signed>
+   </BaseType>
+  </CustomType>
+  <CustomType Type="CustomTypeStructure">
+   <Label>
+    <ShortName>tm_queue_ref</ShortName>
+    <LongName>tm_queue_ref</LongName>
+    <Description>Queue Reference</Description>
+   </Label>
+   <Fields>
+    <Field>
+     <Label>
+      <ShortName>sched_id</ShortName>
+      <LongName>Scheduler ID</LongName>
+      <Description>Scheduler (tm_sched) ID</Description>
+     </Label>
+     <FieldType Type="FieldTypeReference">
+      <ShortName>tm_sched_id</ShortName>
+     </FieldType>
+    </Field>
+    <Field>
+     <Label>
+      <ShortName>queue_id</ShortName>
+      <LongName>Queue ID</LongName>
+      <Description>Queue ID</Description>
+     </Label>
+     <FieldType Type="FieldTypeReference">
+      <ShortName>tm_queue_id</ShortName>
+     </FieldType>
+    </Field>
+   </Fields>
+  </CustomType>
+  <CustomType Type="CustomTypeStructure">
+   <Label>
+    <ShortName>tm_red</ShortName>
+    <LongName>tm_red</LongName>
+    <Description>Random Early Discard Configuration</Description>
+   </Label>
+   <Fields>
+    <Field>
+     <Label>
+      <ShortName>min_threshold</ShortName>
+      <LongName>min_threshold</LongName>
+      <Description>Min threshold in percent of max queue size</Description>
+     </Label>
+     <FieldType Type="FieldTypeReference">
+      <ShortName>percent</ShortName>
+     </FieldType>
+    </Field>
+    <Field>
+     <Label>
+      <ShortName>max_threshold</ShortName>
+      <LongName>max_threshold</LongName>
+      <Description>Max threshold in percent of max queue size</Description>
+     </Label>
+     <FieldType Type="FieldTypeReference">
+      <ShortName>percent</ShortName>
+     </FieldType>
+    </Field>
+    <Field>
+     <Label>
+      <ShortName>max_probability</ShortName>
+      <LongName>max_probability</LongName>
+      <Description>Discard probability for occupancy between min_threshold and max_threshold</Description>
+     </Label>
+     <FieldType Type="FieldTypeReference">
+      <ShortName>percent</ShortName>
+     </FieldType>
+    </Field>
+   </Fields>
+  </CustomType>
+  <CustomType Type="CustomTypeEnum">
+   <Label>
+    <ShortName>tm_sched_child_type</ShortName>
+    <LongName>tm_sched_child_type</LongName>
+    <Description>Scheduling Level for the Children TM </Description>
+   </Label>
+   <BaseType>
+    <Width>1</Width>
+    <Signed>False</Signed>
+   </BaseType>
+   <Entries>
+    <EnumEntry>
+     <Label>
+      <ShortName>queue</ShortName>
+      <LongName>queue</LongName>
+      <Description>Queue-level scheduler</Description>
+     </Label>
+     <Value>0</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>sched</ShortName>
+      <LongName>sched</LongName>
+      <Description>Scheduler-level scheduler</Description>
+     </Label>
+     <Value>1</Value>
+    </EnumEntry>
+   </Entries>
+  </CustomType>
+  <CustomType Type="CustomTypeEnum">
+   <Label>
+    <ShortName>tm_sched_dir</ShortName>
+    <LongName>tm_sched_dir</LongName>
+    <Description>Traffic Direction</Description>
+   </Label>
+   <BaseType>
+    <Width>1</Width>
+    <Signed>False</Signed>
+   </BaseType>
+   <Entries>
+    <EnumEntry>
+     <Label>
+      <ShortName>us</ShortName>
+      <LongName>upstream</LongName>
+      <Description>Upstream</Description>
+     </Label>
+     <Value>1</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>ds</ShortName>
+      <LongName>downstream</LongName>
+      <Description>Downstream</Description>
+     </Label>
+     <Value>2</Value>
+    </EnumEntry>
+   </Entries>
+  </CustomType>
+  <CustomType Type="CustomTypeAlias">
+   <Label>
+    <ShortName>tm_sched_id</ShortName>
+    <LongName>tm_sched_id</LongName>
+    <Description>TM Scheduler ID</Description>
+   </Label>
+   <BaseType>
+    <Width>4</Width>
+    <Signed>False</Signed>
+   </BaseType>
+   <Constants>
+    <AliasConstantEntry>
+     <Label>
+      <ShortName>unknown</ShortName>
+      <LongName>Unknown</LongName>
+     </Label>
+     <Value>65535</Value>
+    </AliasConstantEntry>
+   </Constants>
+  </CustomType>
+  <CustomType Type="CustomTypeAlias">
+   <Label>
+    <ShortName>tm_sched_id_index</ShortName>
+    <LongName>tm node id index</LongName>
+   </Label>
+   <BaseType>
+    <Width>2</Width>
+    <Signed>False</Signed>
+   </BaseType>
+   <MinimumValue>0</MinimumValue>
+   <MaximumValue>2048</MaximumValue>
+  </CustomType>
+  <CustomType Type="CustomTypeClassifiedStructure">
+   <Label>
+    <ShortName>tm_sched_owner</ShortName>
+    <LongName>tm_sched_owner</LongName>
+    <Description>TM Scheduler Owner</Description>
+   </Label>
+   <CommonFields>
+    <Field>
+     <Label>
+      <ShortName>type</ShortName>
+      <LongName>type</LongName>
+      <Description>Owner type</Description>
+     </Label>
+     <FieldType Type="FieldTypeReference">
+      <ShortName>tm_sched_owner_type</ShortName>
+     </FieldType>
+    </Field>
+   </CommonFields>
+   <ClassifierFieldName>type</ClassifierFieldName>
+   <ClassifiedStructures>
+    <ClassifiedStructure>
+     <ClassifierValue>interface</ClassifierValue>
+     <EmbeddedStructure>
+      <Label>
+       <ShortName></ShortName>
+       <LongName></LongName>
+      </Label>
+      <Fields>
+       <Field>
+        <Label>
+         <ShortName>intf_type</ShortName>
+         <LongName>intf_type</LongName>
+         <Description>Interface Type</Description>
+        </Label>
+        <FieldType Type="FieldTypeReference">
+         <ShortName>intf_type</ShortName>
+        </FieldType>
+       </Field>
+       <Field>
+        <Label>
+         <ShortName>intf_id</ShortName>
+         <LongName>intf_id</LongName>
+         <Description>Interface ID</Description>
+        </Label>
+        <FieldType Type="FieldTypeReference">
+         <ShortName>intf_id</ShortName>
+        </FieldType>
+       </Field>
+      </Fields>
+     </EmbeddedStructure>
+    </ClassifiedStructure>
+    <ClassifiedStructure>
+     <ClassifierValue>sub_term</ClassifierValue>
+     <EmbeddedStructure>
+      <Label>
+       <ShortName></ShortName>
+       <LongName></LongName>
+      </Label>
+      <Fields>
+       <Field>
+        <Label>
+         <ShortName>intf_id</ShortName>
+         <LongName>intf_id</LongName>
+         <Description>PON interface id</Description>
+        </Label>
+        <FieldType Type="FieldTypeReference">
+         <ShortName>intf_id</ShortName>
+        </FieldType>
+       </Field>
+       <Field>
+        <Label>
+         <ShortName>sub_term_id</ShortName>
+         <LongName>sub_term_id</LongName>
+         <Description>Subscriber terminal ID</Description>
+        </Label>
+        <FieldType Type="FieldTypeReference">
+         <ShortName>sub_id</ShortName>
+        </FieldType>
+       </Field>
+      </Fields>
+     </EmbeddedStructure>
+    </ClassifiedStructure>
+    <ClassifiedStructure>
+     <ClassifierValue>agg_port</ClassifierValue>
+     <EmbeddedStructure>
+      <Label>
+       <ShortName></ShortName>
+       <LongName></LongName>
+      </Label>
+      <Options>PresenceMask</Options>
+      <Fields>
+       <Field>
+        <Label>
+         <ShortName>intf_id</ShortName>
+         <LongName>intf_id</LongName>
+         <Description>PON interface id</Description>
+        </Label>
+        <FieldType Type="FieldTypeNumber">
+         <Width>1</Width>
+         <Signed>False</Signed>
+        </FieldType>
+       </Field>
+       <Field>
+        <Label>
+         <ShortName>sub_term_id</ShortName>
+         <LongName>sub_term_id</LongName>
+         <Description>Subscriber terminal id</Description>
+        </Label>
+        <FieldType Type="FieldTypeReference">
+         <ShortName>sub_id</ShortName>
+        </FieldType>
+       </Field>
+       <Field>
+        <Label>
+         <ShortName>agg_port_id</ShortName>
+         <LongName>agg_port_id</LongName>
+         <Description>Aggregation port id</Description>
+        </Label>
+        <FieldType Type="FieldTypeReference">
+         <ShortName>aggregation_port_id</ShortName>
+        </FieldType>
+        <Options>ReadOnly</Options>
+       </Field>
+      </Fields>
+     </EmbeddedStructure>
+    </ClassifiedStructure>
+    <ClassifiedStructure>
+     <ClassifierValue>uni</ClassifierValue>
+     <EmbeddedStructure>
+      <Label>
+       <ShortName></ShortName>
+       <LongName></LongName>
+      </Label>
+      <Fields>
+       <Field>
+        <Label>
+         <ShortName>intf_id</ShortName>
+         <LongName>intf_id</LongName>
+         <Description>PON interface id</Description>
+        </Label>
+        <FieldType Type="FieldTypeNumber">
+         <Width>1</Width>
+         <Signed>False</Signed>
+        </FieldType>
+       </Field>
+       <Field>
+        <Label>
+         <ShortName>sub_term_id</ShortName>
+         <LongName>sub_term_id</LongName>
+         <Description>Subscriber terminal id</Description>
+        </Label>
+        <FieldType Type="FieldTypeReference">
+         <ShortName>sub_id</ShortName>
+        </FieldType>
+       </Field>
+       <Field>
+        <Label>
+         <ShortName>index</ShortName>
+         <LongName>index</LongName>
+         <Description>Index at subscriber terminal</Description>
+        </Label>
+        <FieldType Type="FieldTypeNumber">
+         <Width>1</Width>
+         <Signed>False</Signed>
+        </FieldType>
+       </Field>
+      </Fields>
+     </EmbeddedStructure>
+    </ClassifiedStructure>
+    <ClassifiedStructure>
+     <ClassifierValue>virtual</ClassifierValue>
+     <EmbeddedStructure>
+      <Label>
+       <ShortName></ShortName>
+       <LongName></LongName>
+      </Label>
+      <Fields>
+       <Field>
+        <Label>
+         <ShortName>index</ShortName>
+         <LongName>index</LongName>
+         <Description>Owner index</Description>
+        </Label>
+        <FieldType Type="FieldTypeNumber">
+         <Width>4</Width>
+         <Signed>False</Signed>
+        </FieldType>
+       </Field>
+      </Fields>
+     </EmbeddedStructure>
+    </ClassifiedStructure>
+   </ClassifiedStructures>
+  </CustomType>
+  <CustomType Type="CustomTypeEnum">
+   <Label>
+    <ShortName>tm_sched_owner_type</ShortName>
+    <LongName>tm_scheduler_owner_type</LongName>
+    <Description>TM Scheduler Owner Type</Description>
+   </Label>
+   <BaseType>
+    <Width>1</Width>
+    <Signed>False</Signed>
+   </BaseType>
+   <Entries>
+    <EnumEntry>
+     <Label>
+      <ShortName>undefined</ShortName>
+      <LongName>undefined</LongName>
+      <Description>Undefined</Description>
+     </Label>
+     <Value>0</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>interface</ShortName>
+      <LongName>interface</LongName>
+      <Description>Interface</Description>
+     </Label>
+     <Value>1</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>sub_term</ShortName>
+      <LongName>subs_term</LongName>
+      <Description>Subscriber terminal</Description>
+     </Label>
+     <Value>2</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>agg_port</ShortName>
+      <LongName>agg_port</LongName>
+      <Description>TM scheduler is owned by aggregation port</Description>
+     </Label>
+     <Value>3</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>uni</ShortName>
+      <LongName>uni</LongName>
+      <Description>TM scheduler is owned by UNI port</Description>
+     </Label>
+     <Value>4</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>virtual</ShortName>
+      <LongName>virtual</LongName>
+      <Description>Other unspecified owner</Description>
+     </Label>
+     <Value>5</Value>
+    </EnumEntry>
+   </Entries>
+  </CustomType>
+  <CustomType Type="CustomTypeStructure">
+   <Label>
+    <ShortName>tm_sched_parent</ShortName>
+    <LongName>tm_sched_parent</LongName>
+    <Description>Scheduling Parent Connect Point</Description>
+   </Label>
+   <Options>PresenceMask</Options>
+   <Fields>
+    <Field>
+     <Label>
+      <ShortName>sched_id</ShortName>
+      <LongName>sched_id</LongName>
+      <Description>Parent scheduler id</Description>
+     </Label>
+     <FieldType Type="FieldTypeReference">
+      <ShortName>tm_sched_id</ShortName>
+     </FieldType>
+    </Field>
+    <Field>
+     <Label>
+      <ShortName>priority</ShortName>
+      <LongName>priority</LongName>
+      <Description>Priority</Description>
+     </Label>
+     <FieldType Type="FieldTypeReference">
+      <ShortName>tm_priority</ShortName>
+     </FieldType>
+    </Field>
+    <Field>
+     <Label>
+      <ShortName>weight</ShortName>
+      <LongName>weight</LongName>
+      <Description>Weight</Description>
+     </Label>
+     <FieldType Type="FieldTypeReference">
+      <ShortName>tm_weight</ShortName>
+     </FieldType>
+    </Field>
+   </Fields>
+  </CustomType>
+  <CustomType Type="CustomTypeEnum">
+   <Label>
+    <ShortName>tm_sched_type</ShortName>
+    <LongName>tm_sched_type</LongName>
+    <Description>Scheduler Type</Description>
+   </Label>
+   <BaseType>
+    <Width>1</Width>
+    <Signed>False</Signed>
+   </BaseType>
+   <Entries>
+    <EnumEntry>
+     <Label>
+      <ShortName>none</ShortName>
+      <LongName>none</LongName>
+      <Description>NO scheduling</Description>
+     </Label>
+     <Value>0</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>wfq</ShortName>
+      <LongName>wfq</LongName>
+      <Description>Weighted Fair Queue</Description>
+     </Label>
+     <Value>1</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>sp</ShortName>
+      <LongName>sp</LongName>
+      <Description>Strict Priority</Description>
+     </Label>
+     <Value>2</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>sp_wfq</ShortName>
+      <LongName>sp_wfq</LongName>
+      <Description>Hybrid SP + WFQ</Description>
+     </Label>
+     <Value>3</Value>
+    </EnumEntry>
+   </Entries>
+  </CustomType>
+  <CustomType Type="CustomTypeStructure">
+   <Label>
+    <ShortName>tm_shaping</ShortName>
+    <LongName>tm_shaping</LongName>
+    <Description>Shaping Parameters</Description>
+   </Label>
+   <Options>PresenceMask</Options>
+   <Fields>
+    <Field>
+     <Label>
+      <ShortName>sbr</ShortName>
+      <LongName>sbr</LongName>
+      <Description>Sustained Bit Rate (kbps)</Description>
+     </Label>
+     <FieldType Type="FieldTypeNumber">
+      <Width>4</Width>
+      <Signed>False</Signed>
+     </FieldType>
+    </Field>
+    <Field>
+     <Label>
+      <ShortName>pbr</ShortName>
+      <LongName>pbr</LongName>
+      <Description>Peak Bit Rate (kbps)</Description>
+     </Label>
+     <FieldType Type="FieldTypeNumber">
+      <Width>4</Width>
+      <Signed>False</Signed>
+     </FieldType>
+    </Field>
+    <Field>
+     <Label>
+      <ShortName>burst</ShortName>
+      <LongName>burst</LongName>
+      <Description>Max Burst Bytes at Peak Bit Rate</Description>
+     </Label>
+     <FieldType Type="FieldTypeNumber">
+      <Width>4</Width>
+      <Signed>False</Signed>
+     </FieldType>
+    </Field>
+   </Fields>
+  </CustomType>
+  <CustomType Type="CustomTypeStructure">
+   <Label>
+    <ShortName>tm_tcont_sla</ShortName>
+    <LongName>tm_tcont_sla</LongName>
+    <Description>ITU-PON Extended SLA Parameters</Description>
+   </Label>
+   <Options>PresenceMask</Options>
+   <Fields>
+    <Field>
+     <Label>
+      <ShortName>extra_bw_elig</ShortName>
+      <LongName>extra_bw_elig</LongName>
+      <Description>Extra BW eligibility type</Description>
+     </Label>
+     <FieldType Type="FieldTypeReference">
+      <ShortName>extra_bw_eligibility_type</ShortName>
+     </FieldType>
+    </Field>
+    <Field>
+     <Label>
+      <ShortName>nrt_cbr</ShortName>
+      <LongName>nrt_cbr</LongName>
+      <Description>NRT CBR</Description>
+     </Label>
+     <FieldType Type="FieldTypeNumber">
+      <Width>1</Width>
+      <Signed>False</Signed>
+     </FieldType>
+    </Field>
+    <Field>
+     <Label>
+      <ShortName>rt_cbr</ShortName>
+      <LongName>rt_cbr</LongName>
+      <Description>RT_CBR</Description>
+     </Label>
+     <FieldType Type="FieldTypeNumber">
+      <Width>1</Width>
+      <Signed>False</Signed>
+     </FieldType>
+    </Field>
+    <Field>
+     <Label>
+      <ShortName>rt_profile</ShortName>
+      <LongName>rt_profile</LongName>
+      <Description>RT Profile</Description>
+     </Label>
+     <FieldType Type="FieldTypeNumber">
+      <Width>1</Width>
+      <Signed>False</Signed>
+     </FieldType>
+    </Field>
+    <Field>
+     <Label>
+      <ShortName>nrt_profile</ShortName>
+      <LongName>key:</LongName>
+      <Description>NRT Profile</Description>
+     </Label>
+     <FieldType Type="FieldTypeNumber">
+      <Width>1</Width>
+      <Signed>False</Signed>
+     </FieldType>
+    </Field>
+   </Fields>
+  </CustomType>
+  <CustomType Type="CustomTypeAlias">
+   <Label>
+    <ShortName>tm_weight</ShortName>
+    <LongName>tm_weight</LongName>
+    <Description>Scheduling Weight</Description>
+   </Label>
+   <BaseType>
+    <Width>1</Width>
+    <Signed>False</Signed>
+   </BaseType>
+  </CustomType>
+  <CustomType Type="CustomTypeEnum">
+   <Label>
+    <ShortName>trx_type</ShortName>
+    <LongName>Transceiver types</LongName>
+    <Description>Transceiver types</Description>
+   </Label>
+   <BaseType>
+    <Width>4</Width>
+    <Signed>False</Signed>
+   </BaseType>
+   <Entries>
+    <EnumEntry>
+     <Label>
+      <ShortName>gpon_sps_43_48</ShortName>
+      <LongName>gpon_sps_43_48</LongName>
+     </Label>
+     <Value>0</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>gpon_sps_sog_4321</ShortName>
+      <LongName>gpon_sps_sog_4321</LongName>
+     </Label>
+     <Value>1</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>gpon_lte_3680_m</ShortName>
+      <LongName>gpon_lte_3680_m</LongName>
+     </Label>
+     <Value>2</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>gpon_source_photonics</ShortName>
+      <LongName>gpon_source_photonics</LongName>
+     </Label>
+     <Value>3</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>gpon_lte_3680_p</ShortName>
+      <LongName>gpon_lte_3680_p</LongName>
+     </Label>
+     <Value>4</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>xgpon_lth_7222_pc</ShortName>
+      <LongName>xgpon_lth_7222_pc</LongName>
+     </Label>
+     <Value>5</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>xgpon_lth_7226_pc</ShortName>
+      <LongName>xgpon_lth_7226_pc</LongName>
+     </Label>
+     <Value>6</Value>
+    </EnumEntry>
+    <EnumEntry>
+     <Label>
+      <ShortName>xgpon_lth_5302_pc</ShortName>
+      <LongName>xgpon_lth_5302_pc</LongName>
+     </Label>
+     <Value>7</Value>
+    </EnumEntry>
+   </Entries>
+  </CustomType>
+ </CustomTypes>
+ <OmObjects>
+  <ObjectModel.OmObject>
+   <Label>
+    <ShortName>access_terminal</ShortName>
+    <LongName>BAL Access Terminal</LongName>
+    <Description>BAL Access Terminal Object</Description>
+   </Label>
+   <Groups>
+    <ObjectModel.OmGroup>
+     <Label>
+      <ShortName>key</ShortName>
+      <LongName>key</LongName>
+     </Label>
+     <Fields>
+      <Field>
+       <Label>
+        <ShortName>access_term_id</ShortName>
+        <LongName>access_term_id</LongName>
+        <Description>Reserved (set to 0)</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>access_id</ShortName>
+       </FieldType>
+       <DefaultValue>1</DefaultValue>
+       <MinimumValue>1</MinimumValue>
+       <MaximumValue>1</MaximumValue>
+       <Options>Reserved, IsInstanceNumber</Options>
+      </Field>
+     </Fields>
+    </ObjectModel.OmGroup>
+    <ObjectModel.OmGroup>
+     <Label>
+      <ShortName>cfg</ShortName>
+      <LongName>cfg</LongName>
+     </Label>
+     <Type>Configuration</Type>
+     <Fields>
+      <Field>
+       <Label>
+        <ShortName>admin_state</ShortName>
+        <LongName>Administrative state</LongName>
+        <Description>Administrative state</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>state</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>oper_status</ShortName>
+        <LongName>Operational status</LongName>
+        <Description>Operational status</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>status</ShortName>
+       </FieldType>
+       <Options>ReadOnly</Options>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>iwf_mode</ShortName>
+        <LongName>Interworking function mode</LongName>
+        <Description>The interworking mode</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>iwf_mode</ShortName>
+       </FieldType>
+       <Options>ReadOnly</Options>
+      </Field>
+     </Fields>
+    </ObjectModel.OmGroup>
+    <ObjectModel.OmGroup>
+     <Label>
+      <ShortName>ind</ShortName>
+      <LongName>Access Terminal Indication</LongName>
+     </Label>
+     <Type>Indication</Type>
+     <Fields>
+      <Field>
+       <Label>
+        <ShortName>admin_state</ShortName>
+        <LongName>Administrative state</LongName>
+        <Description>Current administrative state</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>state</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>oper_status</ShortName>
+        <LongName>Operational status</LongName>
+        <Description>Current operational status</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>status</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>iwf_mode</ShortName>
+        <LongName>Interworking function mode</LongName>
+        <Description>The interworking mode</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>iwf_mode</ShortName>
+       </FieldType>
+      </Field>
+     </Fields>
+    </ObjectModel.OmGroup>
+   </Groups>
+  </ObjectModel.OmObject>
+  <ObjectModel.OmObject>
+   <Label>
+    <ShortName>flow</ShortName>
+    <LongName>BAL Flow</LongName>
+   </Label>
+   <Groups>
+    <ObjectModel.OmGroup>
+     <Label>
+      <ShortName>cfg</ShortName>
+      <LongName>cfg</LongName>
+     </Label>
+     <Type>Configuration</Type>
+     <Fields>
+      <Field>
+       <Label>
+        <ShortName>admin_state</ShortName>
+        <LongName>Administrative state</LongName>
+        <Description>Administrative state</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>state</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>oper_status</ShortName>
+        <LongName>Operational status</LongName>
+        <Description>Operational status</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>status</ShortName>
+       </FieldType>
+       <Options>ReadOnly</Options>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>access_int_id</ShortName>
+        <LongName>Access Interface ID</LongName>
+        <Description>The ID of the subscriber side interface; i.e. PON</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>intf_id</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>network_int_id</ShortName>
+        <LongName>Network Interface ID</LongName>
+        <Description>The ID of the network side interface; i.e. NNI</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>intf_id</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>sub_term_id</ShortName>
+        <LongName>Subscriber Terminal ID</LongName>
+        <Description>The ID of the subsccriber terminal device</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>sub_id</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>sub_term_uni_idx</ShortName>
+        <LongName>Subscriber Terminal uni port index</LongName>
+        <Description>The index of the subsccriber terminal uni port the flow is related to</Description>
+       </Label>
+       <FieldType Type="FieldTypeNumber">
+        <Width>1</Width>
+        <Signed>False</Signed>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>svc_port_id</ShortName>
+        <LongName>Service Port ID</LongName>
+        <Description>The ID of the service port (for GPON/XGPON - GEM ID)</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>service_port_id</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>agg_port_id</ShortName>
+        <LongName>Aggregate port ID</LongName>
+        <Description>The ID of the aggregate port (for GPON/XGPON - ALLOC ID)</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>aggregation_port_id</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>resolve_mac</ShortName>
+        <LongName>Resolve mac</LongName>
+        <Description>A flag indicating if the MAC address table should be used in DS GEM resolution</Description>
+       </Label>
+       <FieldType Type="FieldTypeBoolean" />
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>classifier</ShortName>
+        <LongName>Classifier</LongName>
+        <Description>The classifier for this flow</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>classifier</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>action</ShortName>
+        <LongName>Action</LongName>
+        <Description>The action associated with the flow</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>action</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>sla</ShortName>
+        <LongName>SLA</LongName>
+        <Description>SLA parameters for this flow</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>sla</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>cookie</ShortName>
+        <LongName>Cookie</LongName>
+        <Description>Application cookie</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>cookie</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>priority</ShortName>
+        <LongName>Priority</LongName>
+        <Description>Priority for this flow in case of multiple match.
+Higher value precednece over lower value.</Description>
+       </Label>
+       <FieldType Type="FieldTypeNumber">
+        <Width>2</Width>
+        <Signed>False</Signed>
+       </FieldType>
+       <MinimumValue>1</MinimumValue>
+       <MaximumValue>255</MaximumValue>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>group_id</ShortName>
+        <LongName>Group ID</LongName>
+        <Description>RW - The multicast group associated with this flow, valid for type MULTICAST only</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>group_id</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>queue</ShortName>
+        <LongName>Egress queue</LongName>
+        <Description>Egress queue</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>tm_queue_ref</ShortName>
+       </FieldType>
+      </Field>
+     </Fields>
+    </ObjectModel.OmGroup>
+    <ObjectModel.OmGroup>
+     <Label>
+      <ShortName>key</ShortName>
+      <LongName>key</LongName>
+     </Label>
+     <Fields>
+      <Field>
+       <Label>
+        <ShortName>flow_id</ShortName>
+        <LongName>Flow ID</LongName>
+        <Description>The ID of the flow object instance being referenced</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>flow_id</ShortName>
+       </FieldType>
+       <Options>IsInstanceNumber</Options>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>flow_type</ShortName>
+        <LongName>Flow type</LongName>
+        <Description>The type of the flow, Upstream, Downstream, Broadcast or Multicast</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>flow_type</ShortName>
+       </FieldType>
+      </Field>
+     </Fields>
+    </ObjectModel.OmGroup>
+    <ObjectModel.OmGroup>
+     <Label>
+      <ShortName>stat</ShortName>
+      <LongName>stat</LongName>
+     </Label>
+     <Type>Statistics</Type>
+     <Fields>
+      <Field>
+       <Label>
+        <ShortName>rx_packets</ShortName>
+        <LongName>Received packets</LongName>
+       </Label>
+       <FieldType Type="FieldTypeNumber">
+        <Width>8</Width>
+        <Signed>False</Signed>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>rx_bytes</ShortName>
+        <LongName>Received bytes</LongName>
+       </Label>
+       <FieldType Type="FieldTypeNumber">
+        <Width>8</Width>
+        <Signed>False</Signed>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>tx_packets</ShortName>
+        <LongName>Transmitted packets</LongName>
+       </Label>
+       <FieldType Type="FieldTypeNumber">
+        <Width>8</Width>
+        <Signed>False</Signed>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>tx_bytes</ShortName>
+        <LongName>Transmitted bytes</LongName>
+       </Label>
+       <FieldType Type="FieldTypeNumber">
+        <Width>8</Width>
+        <Signed>False</Signed>
+       </FieldType>
+      </Field>
+     </Fields>
+    </ObjectModel.OmGroup>
+    <ObjectModel.OmGroup>
+     <Label>
+      <ShortName>ind</ShortName>
+      <LongName>Flow Indication</LongName>
+     </Label>
+     <Type>Indication</Type>
+     <Fields>
+      <Field>
+       <Label>
+        <ShortName>admin_state</ShortName>
+        <LongName>Administrative state</LongName>
+        <Description>Administrative state</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>state</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>oper_status</ShortName>
+        <LongName>Operational status</LongName>
+        <Description>Operational Status</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>status</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>access_int_id</ShortName>
+        <LongName>Access interface ID</LongName>
+        <Description>The ID of the subscriber side interface; i.e. PON</Description>
+       </Label>
+       <FieldType Type="FieldTypeNumber">
+        <Width>2</Width>
+        <Signed>False</Signed>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>network_int_id</ShortName>
+        <LongName>Network Interface ID</LongName>
+        <Description>The ID of the network side interface; i.e. NNI</Description>
+       </Label>
+       <FieldType Type="FieldTypeNumber">
+        <Width>2</Width>
+        <Signed>False</Signed>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>sub_term_id</ShortName>
+        <LongName>Subscriber terminal ID</LongName>
+        <Description>The ID of the subsccriber terminal device</Description>
+       </Label>
+       <FieldType Type="FieldTypeNumber">
+        <Width>4</Width>
+        <Signed>False</Signed>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>svc_port_id</ShortName>
+        <LongName>Service port ID</LongName>
+        <Description>The ID of the service port (for GPON/XGPON - GEM ID)</Description>
+       </Label>
+       <FieldType Type="FieldTypeNumber">
+        <Width>2</Width>
+        <Signed>False</Signed>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>agg_port_id</ShortName>
+        <LongName>Aggregate port ID</LongName>
+        <Description>The ID of the aggregate port (for GPON/XGPON - ALLOC ID)</Description>
+       </Label>
+       <FieldType Type="FieldTypeNumber">
+        <Width>2</Width>
+        <Signed>False</Signed>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>resolve_mac</ShortName>
+        <LongName>Resolve mac</LongName>
+        <Description>A flag indicating if the MAC address table should be used in DS GEM resolution</Description>
+       </Label>
+       <FieldType Type="FieldTypeBoolean" />
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>base_tc_id</ShortName>
+        <LongName>Base TCONT ID</LongName>
+        <Description>The base index of the TC object(s) to be used for this flow</Description>
+       </Label>
+       <FieldType Type="FieldTypeNumber">
+        <Width>2</Width>
+        <Signed>False</Signed>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>classifier</ShortName>
+        <LongName>Classifier</LongName>
+        <Description>The classifier for this flow</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>classifier</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>action</ShortName>
+        <LongName>Action</LongName>
+        <Description>The action associated with the flow</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>action</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>sla</ShortName>
+        <LongName>SLA</LongName>
+        <Description>SLA parameters for this flow</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>sla</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>cookie</ShortName>
+        <LongName>Cookie</LongName>
+        <Description>Application cookie</Description>
+       </Label>
+       <FieldType Type="FieldTypeNumber">
+        <Width>4</Width>
+        <Signed>False</Signed>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>priority</ShortName>
+        <LongName>Priority</LongName>
+        <Description>Priority for this flow in case of multiple match.
+Higher value precednece over lower value.</Description>
+       </Label>
+       <FieldType Type="FieldTypeNumber">
+        <Width>2</Width>
+        <Signed>False</Signed>
+       </FieldType>
+       <MinimumValue>1</MinimumValue>
+       <MaximumValue>255</MaximumValue>
+      </Field>
+     </Fields>
+    </ObjectModel.OmGroup>
+   </Groups>
+  </ObjectModel.OmObject>
+  <ObjectModel.OmObject>
+   <Label>
+    <ShortName>group</ShortName>
+    <LongName>BAL Group</LongName>
+   </Label>
+   <Groups>
+    <ObjectModel.OmGroup>
+     <Label>
+      <ShortName>cfg</ShortName>
+      <LongName>cfg</LongName>
+     </Label>
+     <Type>Configuration</Type>
+     <Fields>
+      <Field>
+       <Label>
+        <ShortName>members_cmd</ShortName>
+        <LongName>Membership operation commands</LongName>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>group_member_cmd</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>members</ShortName>
+        <LongName>Member</LongName>
+        <Description>The list of members associated with this group</Description>
+       </Label>
+       <FieldType Type="FieldTypeList">
+        <ElementType Type="FieldTypeReference">
+         <ShortName>group_member_info</ShortName>
+        </ElementType>
+        <AutoCountFieldType>
+         <Width>2</Width>
+         <Signed>False</Signed>
+        </AutoCountFieldType>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>cookie</ShortName>
+        <LongName>Application cookie</LongName>
+        <Description>Application cookie</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>cookie</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>flows</ShortName>
+        <LongName>List of flows associated with the group </LongName>
+        <Description>List of flows associated with this group</Description>
+       </Label>
+       <FieldType Type="FieldTypeList">
+        <ElementType Type="FieldTypeReference">
+         <ShortName>flow_id</ShortName>
+        </ElementType>
+        <AutoCountFieldType>
+         <Width>4</Width>
+         <Signed>False</Signed>
+        </AutoCountFieldType>
+        <MinimumLength>0</MinimumLength>
+       </FieldType>
+       <Options>ReadOnly</Options>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>owner</ShortName>
+        <LongName>Owner of the group</LongName>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>group_owner</ShortName>
+       </FieldType>
+       <Options>ReadOnly</Options>
+      </Field>
+     </Fields>
+    </ObjectModel.OmGroup>
+    <ObjectModel.OmGroup>
+     <Label>
+      <ShortName>key</ShortName>
+      <LongName>key</LongName>
+     </Label>
+     <Fields>
+      <Field>
+       <Label>
+        <ShortName>group_id</ShortName>
+        <LongName>Group ID</LongName>
+        <Description>The ID of the group object instance being referenced</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>group_id</ShortName>
+       </FieldType>
+       <Options>IsInstanceNumber</Options>
+      </Field>
+     </Fields>
+    </ObjectModel.OmGroup>
+   </Groups>
+  </ObjectModel.OmObject>
+  <ObjectModel.OmObject>
+   <Label>
+    <ShortName>interface</ShortName>
+    <LongName>BAL Interface</LongName>
+    <Description>BAL interface object</Description>
+   </Label>
+   <Groups>
+    <ObjectModel.OmGroup>
+     <Label>
+      <ShortName>key</ShortName>
+      <LongName>key</LongName>
+     </Label>
+     <Fields>
+      <Field>
+       <Label>
+        <ShortName>intf_id</ShortName>
+        <LongName>intf_id</LongName>
+       </Label>
+       <FieldType Type="FieldTypeNumber">
+        <Width>4</Width>
+        <Signed>False</Signed>
+       </FieldType>
+       <Options>IsInstanceNumber</Options>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>intf_type</ShortName>
+        <LongName>intf_type</LongName>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>intf_type</ShortName>
+       </FieldType>
+      </Field>
+     </Fields>
+    </ObjectModel.OmGroup>
+    <ObjectModel.OmGroup>
+     <Label>
+      <ShortName>cfg</ShortName>
+      <LongName>cfg</LongName>
+     </Label>
+     <Type>Configuration</Type>
+     <Fields>
+      <Field>
+       <Label>
+        <ShortName>admin_state</ShortName>
+        <LongName>Administrative state</LongName>
+        <Description>Administrative state</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>state</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>oper_status</ShortName>
+        <LongName>Operational status</LongName>
+        <Description>Operational status</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>status</ShortName>
+       </FieldType>
+       <Options>ReadOnly</Options>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>min_data_agg_port_id</ShortName>
+        <LongName>Minimum aggregate port ID</LongName>
+        <Description>The minimum agg_port_id that is allowed in the system</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>aggregation_port_id</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>min_data_svc_port_id</ShortName>
+        <LongName>Minimum service port ID</LongName>
+        <Description>The minimum svc_port_id that is allowed in the system</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>service_port_id</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>transceiver_type</ShortName>
+        <LongName>Transceiver type</LongName>
+        <Description>The transceiver type used on an interface</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>trx_type</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>ds_miss_mode</ShortName>
+        <LongName>Downstream unknown packet action</LongName>
+        <Description>Defines the action to take for unknown downstream packets</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>ds_miss_mode</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>mtu</ShortName>
+        <LongName>MTU</LongName>
+        <Description>The MTU for an interface</Description>
+       </Label>
+       <FieldType Type="FieldTypeNumber">
+        <Width>2</Width>
+        <Signed>False</Signed>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>flow_control</ShortName>
+        <LongName>Flow control</LongName>
+        <Description>Flow control enable or disable</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>control</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>ds_tm</ShortName>
+        <LongName>Downstream scheduler and shaper</LongName>
+        <Description>Downstream scheduler and shaper</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>tm_sched_id</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>us_tm</ShortName>
+        <LongName>Upstream scheduler and shaper</LongName>
+        <Description>Upstream scheduler and shaper</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>tm_sched_id</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>sub_term_id_list</ShortName>
+        <LongName>Sub-term id list</LongName>
+        <Description>A list of subscriber terminal ids configured on this interface</Description>
+       </Label>
+       <FieldType Type="FieldTypeList">
+        <ElementType Type="FieldTypeReference">
+         <ShortName>sub_id</ShortName>
+        </ElementType>
+        <AutoCountFieldType>
+         <Width>2</Width>
+         <Signed>False</Signed>
+        </AutoCountFieldType>
+       </FieldType>
+       <Options>ReadOnly</Options>
+      </Field>
+     </Fields>
+    </ObjectModel.OmGroup>
+    <ObjectModel.OmGroup>
+     <Label>
+      <ShortName>stat</ShortName>
+      <LongName>stat</LongName>
+     </Label>
+     <Type>Statistics</Type>
+     <Fields>
+      <Field>
+       <Label>
+        <ShortName>rx_packets</ShortName>
+        <LongName>Recieved packets</LongName>
+       </Label>
+       <FieldType Type="FieldTypeNumber">
+        <Width>8</Width>
+        <Signed>False</Signed>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>rx_bytes</ShortName>
+        <LongName>Received bytes</LongName>
+       </Label>
+       <FieldType Type="FieldTypeNumber">
+        <Width>8</Width>
+        <Signed>False</Signed>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>tx_packets</ShortName>
+        <LongName>Transmitted packets</LongName>
+       </Label>
+       <FieldType Type="FieldTypeNumber">
+        <Width>8</Width>
+        <Signed>False</Signed>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>tx_bytes</ShortName>
+        <LongName>Transmitted bytes</LongName>
+       </Label>
+       <FieldType Type="FieldTypeNumber">
+        <Width>8</Width>
+        <Signed>False</Signed>
+       </FieldType>
+      </Field>
+     </Fields>
+    </ObjectModel.OmGroup>
+    <ObjectModel.OmGroup>
+     <Label>
+      <ShortName>ind</ShortName>
+      <LongName>Interface Indication</LongName>
+     </Label>
+     <Type>Indication</Type>
+     <Fields>
+      <Field>
+       <Label>
+        <ShortName>admin_state</ShortName>
+        <LongName>Administrative state</LongName>
+        <Description>Current administrative state</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>state</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>oper_status</ShortName>
+        <LongName>Operational status</LongName>
+        <Description>Current operational state</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>status</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>min_data_agg_port_id</ShortName>
+        <LongName>Minimum aggregate port ID</LongName>
+        <Description>The minimum agg_port_id that is allowed in the system</Description>
+       </Label>
+       <FieldType Type="FieldTypeNumber">
+        <Width>2</Width>
+        <Signed>False</Signed>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>min_data_svc_port_id</ShortName>
+        <LongName>Minimum service port ID</LongName>
+        <Description>The minimum svc_port_id that is allowed in the system</Description>
+       </Label>
+       <FieldType Type="FieldTypeNumber">
+        <Width>2</Width>
+        <Signed>False</Signed>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>transceiver_type</ShortName>
+        <LongName>Transceiver type</LongName>
+        <Description>The transceiver type used on an interface</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>trx_type</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>ds_miss_mode</ShortName>
+        <LongName>Downstream unknown packet action</LongName>
+        <Description>Defines the action to take for DS unknown packets</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>ds_miss_mode</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>mtu</ShortName>
+        <LongName>MTU</LongName>
+        <Description>The MTU for an interface</Description>
+       </Label>
+       <FieldType Type="FieldTypeNumber">
+        <Width>2</Width>
+        <Signed>False</Signed>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>flow_control</ShortName>
+        <LongName>Flow control</LongName>
+        <Description>Flow control enable or disable</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>control</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>ds_tm</ShortName>
+        <LongName>Downstream scheduler and shaper</LongName>
+        <Description>Downstream scheduler and shaper</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>tm_sched_id</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>us_tm</ShortName>
+        <LongName>Upstream scheduler and shaper</LongName>
+        <Description>Upstream scheduler and shaper</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>tm_sched_id</ShortName>
+       </FieldType>
+      </Field>
+     </Fields>
+    </ObjectModel.OmGroup>
+   </Groups>
+  </ObjectModel.OmObject>
+  <ObjectModel.OmObject>
+   <Label>
+    <ShortName>packet</ShortName>
+    <LongName>packet</LongName>
+    <Description>Packet that can be transmitted or received</Description>
+   </Label>
+   <Groups>
+    <ObjectModel.OmGroup>
+     <Label>
+      <ShortName>cfg</ShortName>
+      <LongName>cfg</LongName>
+     </Label>
+     <Type>Configuration</Type>
+     <Fields>
+      <Field>
+       <Label>
+        <ShortName>flow_id</ShortName>
+        <LongName>Flow Id</LongName>
+        <Description>N/A for sending a packet</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>flow_id</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>flow_type</ShortName>
+        <LongName>Flow Type</LongName>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>flow_type</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>intf_id</ShortName>
+        <LongName>Interface ID</LongName>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>intf_id</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>intf_type</ShortName>
+        <LongName>Interface Type</LongName>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>intf_type</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>svc_port</ShortName>
+        <LongName>Service Port</LongName>
+        <Description>N/A for sending a packet</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>service_port_id</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>flow_cookie</ShortName>
+        <LongName>Flow Cookie</LongName>
+        <Description>N/A for sending a packet</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>cookie</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>pkt</ShortName>
+        <LongName>Packet Data</LongName>
+       </Label>
+       <FieldType Type="FieldTypeList">
+        <ElementType Type="FieldTypeNumber">
+         <Width>1</Width>
+         <Signed>False</Signed>
+        </ElementType>
+        <AutoCountFieldType>
+         <Width>4</Width>
+         <Signed>False</Signed>
+        </AutoCountFieldType>
+       </FieldType>
+      </Field>
+     </Fields>
+    </ObjectModel.OmGroup>
+    <ObjectModel.OmGroup>
+     <Label>
+      <ShortName>key</ShortName>
+      <LongName>key</LongName>
+     </Label>
+     <Fields>
+      <Field>
+       <Label>
+        <ShortName>reserved</ShortName>
+        <LongName>Reserved key field</LongName>
+       </Label>
+       <FieldType Type="FieldTypeNumber">
+        <Width>4</Width>
+        <Signed>False</Signed>
+       </FieldType>
+       <Options>IsInstanceNumber</Options>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>packet_send_dest</ShortName>
+        <LongName>Packet destination</LongName>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>dest</ShortName>
+       </FieldType>
+      </Field>
+     </Fields>
+    </ObjectModel.OmGroup>
+    <ObjectModel.OmGroup>
+     <Label>
+      <ShortName>ind</ShortName>
+      <LongName>Packet indication</LongName>
+     </Label>
+     <Type>Indication</Type>
+     <Fields>
+      <Field>
+       <Label>
+        <ShortName>flow_id</ShortName>
+        <LongName>Flow Id</LongName>
+        <Description>N/A for sending a packet</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>flow_id</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>flow_type</ShortName>
+        <LongName>Flow Type</LongName>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>flow_type</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>intf_id</ShortName>
+        <LongName>Interface ID</LongName>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>intf_id</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>intf_type</ShortName>
+        <LongName>Interface Type</LongName>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>intf_type</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>svc_port</ShortName>
+        <LongName>Service Port</LongName>
+        <Description>N/A for sending a packet</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>service_port_id</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>flow_cookie</ShortName>
+        <LongName>Flow Cookie</LongName>
+        <Description>N/A for sending a packet</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>cookie</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>pkt</ShortName>
+        <LongName>Packet Data</LongName>
+       </Label>
+       <FieldType Type="FieldTypeList">
+        <ElementType Type="FieldTypeNumber">
+         <Width>1</Width>
+         <Signed>False</Signed>
+        </ElementType>
+        <AutoCountFieldType>
+         <Width>4</Width>
+         <Signed>False</Signed>
+        </AutoCountFieldType>
+       </FieldType>
+      </Field>
+     </Fields>
+    </ObjectModel.OmGroup>
+   </Groups>
+  </ObjectModel.OmObject>
+  <ObjectModel.OmObject>
+   <Label>
+    <ShortName>subscriber_terminal</ShortName>
+    <LongName>BAL Subscriber Terminal</LongName>
+   </Label>
+   <Groups>
+    <ObjectModel.OmGroup>
+     <Label>
+      <ShortName>key</ShortName>
+      <LongName>key</LongName>
+     </Label>
+     <Fields>
+      <Field>
+       <Label>
+        <ShortName>sub_term_id</ShortName>
+        <LongName>sub_term_id</LongName>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>sub_id</ShortName>
+       </FieldType>
+       <Options>IsInstanceNumber</Options>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>intf_id</ShortName>
+        <LongName>intf_id</LongName>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>intf_id</ShortName>
+       </FieldType>
+      </Field>
+     </Fields>
+    </ObjectModel.OmGroup>
+    <ObjectModel.OmGroup>
+     <Label>
+      <ShortName>cfg</ShortName>
+      <LongName>cfg</LongName>
+     </Label>
+     <Type>Configuration</Type>
+     <Fields>
+      <Field>
+       <Label>
+        <ShortName>admin_state</ShortName>
+        <LongName>Administrative state</LongName>
+        <Description>Administrative state</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>state</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>oper_status</ShortName>
+        <LongName>Operational status</LongName>
+        <Description>Operational status</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>status</ShortName>
+       </FieldType>
+       <Options>ReadOnly</Options>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>serial_number</ShortName>
+        <LongName>Serial number</LongName>
+        <Description>The serial number of an  ITU PON (GPON/XG-PON1/XGS-PON/NG-PON2) subscriber terminal</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>serial_number</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>password</ShortName>
+        <LongName>Password</LongName>
+        <Description>The password of a GPON subscriber terminal</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>password</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>registration_id</ShortName>
+        <LongName>Registration id</LongName>
+        <Description>ONU registration ID of an  ITU PON (XG-PON1/XGS-PON/NG-PON2) subscriber terminal</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>registration_id</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>svc_port_id</ShortName>
+        <LongName>Service port ID</LongName>
+        <Description>The management service port ID (for PON, the ONU ID)</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>service_port_id</ShortName>
+       </FieldType>
+       <Options>ReadOnly</Options>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>mac_address</ShortName>
+        <LongName>MAC address</LongName>
+        <Description>The Ethernet MAC address of an EPON subscriber terminal</Description>
+       </Label>
+       <FieldType Type="FieldTypeWellKnown">
+        <WellKnownType>MacAddress</WellKnownType>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>ds_tm</ShortName>
+        <LongName>Downstream scheduler and shaper</LongName>
+        <Description>Downstream scheduler and shaper</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>tm_sched_id</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>us_tm</ShortName>
+        <LongName>Upstream scheduler and shaper</LongName>
+        <Description>Upstream scheduler and shaper</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>tm_sched_id</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>svc_port_id_list</ShortName>
+        <LongName>svc_port_id list</LongName>
+        <Description>A list of bearer traffic svc_port_ids associated with this subscriber terminal</Description>
+       </Label>
+       <FieldType Type="FieldTypeList">
+        <ElementType Type="FieldTypeReference">
+         <ShortName>service_port_id</ShortName>
+        </ElementType>
+        <AutoCountFieldType>
+         <Width>1</Width>
+         <Signed>False</Signed>
+        </AutoCountFieldType>
+       </FieldType>
+       <Options>ReadOnly</Options>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>agg_port_id_list</ShortName>
+        <LongName>agg_port_id list</LongName>
+        <Description>A list of aggr_port_ids associated with this subscriber terminal</Description>
+       </Label>
+       <FieldType Type="FieldTypeList">
+        <ElementType Type="FieldTypeReference">
+         <ShortName>aggregation_port_id</ShortName>
+        </ElementType>
+        <AutoCountFieldType>
+         <Width>1</Width>
+         <Signed>False</Signed>
+        </AutoCountFieldType>
+       </FieldType>
+       <Options>ReadOnly</Options>
+      </Field>
+     </Fields>
+    </ObjectModel.OmGroup>
+    <ObjectModel.OmGroup>
+     <Label>
+      <ShortName>stat</ShortName>
+      <LongName>stat</LongName>
+     </Label>
+     <Type>Statistics</Type>
+     <Fields>
+      <Field>
+       <Label>
+        <ShortName>rx_packets</ShortName>
+        <LongName>Received  packets</LongName>
+        <Description>Received packets on specified object</Description>
+       </Label>
+       <FieldType Type="FieldTypeNumber">
+        <Width>8</Width>
+        <Signed>False</Signed>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>rx_bytes</ShortName>
+        <LongName>Received bytes</LongName>
+        <Description>Received bytes on specified object</Description>
+       </Label>
+       <FieldType Type="FieldTypeNumber">
+        <Width>8</Width>
+        <Signed>False</Signed>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>tx_packets</ShortName>
+        <LongName>Transmitted packets</LongName>
+        <Description>Transmitted packets on specified object</Description>
+       </Label>
+       <FieldType Type="FieldTypeNumber">
+        <Width>8</Width>
+        <Signed>False</Signed>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>tx_bytes</ShortName>
+        <LongName>Transmitted bytes</LongName>
+        <Description>Transmittted bytes on specified object</Description>
+       </Label>
+       <FieldType Type="FieldTypeNumber">
+        <Width>8</Width>
+        <Signed>False</Signed>
+       </FieldType>
+      </Field>
+     </Fields>
+    </ObjectModel.OmGroup>
+    <ObjectModel.OmGroup>
+     <Label>
+      <ShortName>ind</ShortName>
+      <LongName>Subscriber Terminal Indication</LongName>
+     </Label>
+     <Type>Indication</Type>
+     <Fields>
+      <Field>
+       <Label>
+        <ShortName>admin_state</ShortName>
+        <LongName>Administrative state</LongName>
+        <Description>Current administrative state</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>state</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>oper_status</ShortName>
+        <LongName>Operational status</LongName>
+        <Description>Current operational status</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>status</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>serial_number</ShortName>
+        <LongName>Serial number</LongName>
+        <Description>The serial number of an  ITU PON (GPON/XG-PON1/XGS-PON/NG-PON2) subscriber terminal</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>serial_number</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>password</ShortName>
+        <LongName>Password</LongName>
+        <Description>The password of a GPON subscriber terminal</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>password</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>registration_id</ShortName>
+        <LongName>Registration id</LongName>
+        <Description>ONU registration ID of an  ITU PON (XG-PON1/XGS-PON/NG-PON2) subscriber terminal</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>registration_id</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>svc_port_id</ShortName>
+        <LongName>Service port ID</LongName>
+        <Description>The service port ID (for PON, the ONU ID)</Description>
+       </Label>
+       <FieldType Type="FieldTypeNumber">
+        <Width>2</Width>
+        <Signed>False</Signed>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>mac_address</ShortName>
+        <LongName>MAC address</LongName>
+        <Description>The Ethernet MAC address of an epon subscriber terminal</Description>
+       </Label>
+       <FieldType Type="FieldTypeWellKnown">
+        <WellKnownType>MacAddress</WellKnownType>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>ds_tm</ShortName>
+        <LongName>Downstream scheduler and shaper</LongName>
+        <Description>Downstream scheduler and shaper</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>tm_sched_id</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>us_tm</ShortName>
+        <LongName>Upstream scheduler and shaper</LongName>
+        <Description>Upstream scheduler and shaper</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>tm_sched_id</ShortName>
+       </FieldType>
+      </Field>
+     </Fields>
+    </ObjectModel.OmGroup>
+   </Groups>
+  </ObjectModel.OmObject>
+  <ObjectModel.OmObject>
+   <Label>
+    <ShortName>tm_queue</ShortName>
+    <LongName>tm_queue</LongName>
+    <Description>Transmit queue</Description>
+   </Label>
+   <Groups>
+    <ObjectModel.OmGroup>
+     <Label>
+      <ShortName>key</ShortName>
+      <LongName>key</LongName>
+     </Label>
+     <Fields>
+      <Field>
+       <Label>
+        <ShortName>sched_id</ShortName>
+        <LongName>sched_id</LongName>
+        <Description>Scheduler that owns the queue</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>tm_sched_id</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>sched_dir</ShortName>
+        <LongName>sched dir</LongName>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>tm_sched_dir</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>id</ShortName>
+        <LongName>id</LongName>
+        <Description>Queue id</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>tm_queue_id</ShortName>
+       </FieldType>
+       <Options>IsInstanceNumber</Options>
+      </Field>
+     </Fields>
+    </ObjectModel.OmGroup>
+    <ObjectModel.OmGroup>
+     <Label>
+      <ShortName>cfg</ShortName>
+      <LongName>cfg</LongName>
+     </Label>
+     <Type>Configuration</Type>
+     <Fields>
+      <Field>
+       <Label>
+        <ShortName>priority</ShortName>
+        <LongName>priority</LongName>
+        <Description>Scheduling priority</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>tm_priority</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>weight</ShortName>
+        <LongName>weight</LongName>
+        <Description>Scheduling weight</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>tm_weight</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>rate</ShortName>
+        <LongName>rate</LongName>
+        <Description>Rate shaping parameters</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>tm_shaping</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>bac</ShortName>
+        <LongName>bac</LongName>
+        <Description>Buffer admission control</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>tm_bac</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>creation_mode</ShortName>
+        <LongName>creation_mode</LongName>
+        <Description>Creation mode</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>tm_creation_mode</ShortName>
+       </FieldType>
+       <Options>ReadOnly</Options>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>ref_count</ShortName>
+        <LongName>ref_count</LongName>
+        <Description>reference count (flows)</Description>
+       </Label>
+       <FieldType Type="FieldTypeNumber">
+        <Width>1</Width>
+        <Signed>False</Signed>
+       </FieldType>
+       <Options>ReadOnly</Options>
+      </Field>
+     </Fields>
+    </ObjectModel.OmGroup>
+    <ObjectModel.OmGroup>
+     <Label>
+      <ShortName>stat</ShortName>
+      <LongName>stat</LongName>
+     </Label>
+     <Type>Statistics</Type>
+     <Fields>
+      <Field>
+       <Label>
+        <ShortName>packets_ok</ShortName>
+        <LongName>packets_ok</LongName>
+        <Description>Packets transmitted succewssfully</Description>
+       </Label>
+       <FieldType Type="FieldTypeNumber">
+        <Width>8</Width>
+        <Signed>False</Signed>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>bytes_ok</ShortName>
+        <LongName>bytes_ok</LongName>
+        <Description>Bytes transmitted successfully</Description>
+       </Label>
+       <FieldType Type="FieldTypeNumber">
+        <Width>8</Width>
+        <Signed>False</Signed>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>packets_discarded</ShortName>
+        <LongName>packets_discarded</LongName>
+        <Description>Packets discarded</Description>
+       </Label>
+       <FieldType Type="FieldTypeNumber">
+        <Width>8</Width>
+        <Signed>False</Signed>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>bytes_discarded</ShortName>
+        <LongName>bytes_discarded</LongName>
+        <Description>Bytes discarded</Description>
+       </Label>
+       <FieldType Type="FieldTypeNumber">
+        <Width>8</Width>
+        <Signed>False</Signed>
+       </FieldType>
+      </Field>
+     </Fields>
+    </ObjectModel.OmGroup>
+    <ObjectModel.OmGroup>
+     <Label>
+      <ShortName>ind</ShortName>
+      <LongName>Tm Queue Indication</LongName>
+      <Description>Tm Queue Indication</Description>
+     </Label>
+     <Type>Indication</Type>
+     <Fields>
+      <Field>
+       <Label>
+        <ShortName>ret</ShortName>
+        <LongName>ret</LongName>
+        <Description>ret</Description>
+       </Label>
+       <FieldType Type="FieldTypeNumber">
+        <Width>4</Width>
+        <Signed>False</Signed>
+       </FieldType>
+      </Field>
+     </Fields>
+    </ObjectModel.OmGroup>
+   </Groups>
+  </ObjectModel.OmObject>
+  <ObjectModel.OmObject>
+   <Label>
+    <ShortName>tm_sched</ShortName>
+    <LongName>tm_sched</LongName>
+    <Description>Scheduling node</Description>
+   </Label>
+   <Groups>
+    <ObjectModel.OmGroup>
+     <Label>
+      <ShortName>key</ShortName>
+      <LongName>key</LongName>
+     </Label>
+     <Fields>
+      <Field>
+       <Label>
+        <ShortName>dir</ShortName>
+        <LongName>dir</LongName>
+        <Description>Traffic direction</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>tm_sched_dir</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>id</ShortName>
+        <LongName>id</LongName>
+        <Description>ID</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>tm_sched_id</ShortName>
+       </FieldType>
+       <Options>IsInstanceNumber</Options>
+      </Field>
+     </Fields>
+    </ObjectModel.OmGroup>
+    <ObjectModel.OmGroup>
+     <Label>
+      <ShortName>cfg</ShortName>
+      <LongName>cfg</LongName>
+     </Label>
+     <Type>Configuration</Type>
+     <Fields>
+      <Field>
+       <Label>
+        <ShortName>owner</ShortName>
+        <LongName>owner</LongName>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>tm_sched_owner</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>sched_type</ShortName>
+        <LongName>type</LongName>
+        <Description>Scheduler type</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>tm_sched_type</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>sched_parent</ShortName>
+        <LongName>parent</LongName>
+        <Description>Scheduling parameters for parent scheduler</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>tm_sched_parent</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>sched_child_type</ShortName>
+        <LongName>child_type</LongName>
+        <Description>Scheduling level for children tm </Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>tm_sched_child_type</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>rate</ShortName>
+        <LongName>rate</LongName>
+        <Description>Rate shaping parameters</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>tm_shaping</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>tcont_sla</ShortName>
+        <LongName>tcont_sla</LongName>
+        <Description>Additional SLA parameters for agg_port owner</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>tm_tcont_sla</ShortName>
+       </FieldType>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>creation_mode</ShortName>
+        <LongName>creation_mode</LongName>
+        <Description>Creation mode</Description>
+       </Label>
+       <FieldType Type="FieldTypeReference">
+        <ShortName>tm_creation_mode</ShortName>
+       </FieldType>
+       <Options>ReadOnly</Options>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>queues</ShortName>
+        <LongName>queues</LongName>
+        <Description>Subsidiary queues</Description>
+       </Label>
+       <FieldType Type="FieldTypeList">
+        <ElementType Type="FieldTypeReference">
+         <ShortName>tm_queue_id</ShortName>
+        </ElementType>
+        <AutoCountFieldType>
+         <Width>1</Width>
+         <Signed>False</Signed>
+        </AutoCountFieldType>
+       </FieldType>
+       <Options>ReadOnly</Options>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>sub_scheds</ShortName>
+        <LongName>sub_scheds</LongName>
+        <Description>Subsidiary schedulers</Description>
+       </Label>
+       <FieldType Type="FieldTypeList">
+        <ElementType Type="FieldTypeReference">
+         <ShortName>tm_sched_id</ShortName>
+        </ElementType>
+        <AutoCountFieldType>
+         <Width>1</Width>
+         <Signed>False</Signed>
+        </AutoCountFieldType>
+       </FieldType>
+       <Options>ReadOnly</Options>
+      </Field>
+      <Field>
+       <Label>
+        <ShortName>num_priorities</ShortName>
+        <LongName>num_priorities</LongName>
+        <Description>Max number of strict priority scheduling elements</Description>
+       </Label>
+       <FieldType Type="FieldTypeNumber">
+        <Width>1</Width>
+        <Signed>False</Signed>
+       </FieldType>
+      </Field>
+     </Fields>
+    </ObjectModel.OmGroup>
+    <ObjectModel.OmGroup>
+     <Label>
+      <ShortName>ind</ShortName>
+      <LongName>Tm Sched Indication</LongName>
+      <Description>Tm Sched Indication</Description>
+     </Label>
+     <Type>Indication</Type>
+     <Fields>
+      <Field>
+       <Label>
+        <ShortName>ret</ShortName>
+        <LongName>ret</LongName>
+        <Description>ret</Description>
+       </Label>
+       <FieldType Type="FieldTypeNumber">
+        <Width>4</Width>
+        <Signed>False</Signed>
+       </FieldType>
+      </Field>
+     </Fields>
+    </ObjectModel.OmGroup>
+   </Groups>
+  </ObjectModel.OmObject>
+ </OmObjects>
+</ElementSet>
\ No newline at end of file
diff --git a/bal_release/src/lib/common/placeholder b/bal_release/src/lib/common/placeholder
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/bal_release/src/lib/common/placeholder
diff --git a/bal_release/src/lib/libbalapi/Makefile b/bal_release/src/lib/libbalapi/Makefile
new file mode 100644
index 0000000..79fea84
--- /dev/null
+++ b/bal_release/src/lib/libbalapi/Makefile
@@ -0,0 +1,38 @@
+###############################################################################
+#
+#  <:copyright-BRCM:2016:DUAL/GPL:standard
+#  
+#     Copyright (c) 2016 Broadcom
+#     All Rights Reserved
+#  
+#  Unless you and Broadcom execute a separate written software license
+#  agreement governing use of this software, this software is licensed
+#  to you under the terms of the GNU General Public License version 2
+#  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+#  with the following added to such license:
+#  
+#     As a special exception, the copyright holders of this software give
+#     you permission to link this software with independent modules, and
+#     to copy and distribute the resulting executable under terms of your
+#     choice, provided that you also meet, for each linked independent
+#     module, the terms and conditions of the license of that module.
+#     An independent module is a module which is not derived from this
+#     software.  The special exception does not apply to any modifications
+#     of the software.
+#  
+#  Not withstanding the above, under no circumstances may you combine
+#  this software in any way with any other Broadcom software provided
+#  under a license other than the GPL, without Broadcom's express prior
+#  written consent.
+#  
+#  :>
+#
+###############################################################################
+MOD_NAME = bal_api
+MOD_TYPE = lib
+MOD_DEPS = common_include dev_log maple_sdk balobjmsg 
+ifeq ("$(BAL_MONOLITHIC)", "y")
+MOD_DEPS += bal_core
+endif
+
+srcs = bal_api.c bal_api_worker.c
diff --git a/bal_release/src/lib/libbalapi/bal_api.c b/bal_release/src/lib/libbalapi/bal_api.c
new file mode 100644
index 0000000..4374fd2
--- /dev/null
+++ b/bal_release/src/lib/libbalapi/bal_api.c
@@ -0,0 +1,658 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file bal_api.c
+ * @brief The BAL Public API
+ *
+ * @addtogroup api
+ */
+
+/*@{*/
+
+/* Project includes */
+#include "bal_api.h"
+#include "bal_msg.h"
+#include "bal_api_worker.h"
+#include "bal_obj_msg_pack_unpack.h"
+#ifdef BAL_MONOLITHIC
+#include <bal_worker.h>
+#endif
+
+#ifdef ENABLE_LOG
+#include <bcm_dev_log.h>
+
+/*
+ * @brief The logging device id for the BAL public API
+ */
+dev_log_id log_id_public_api;
+#endif
+
+/*
+ * @brief The global mgmt queues 
+ * 
+ * These are the queues through which the BAL API communicates with
+ * the core, and vice versa.
+ */
+static bcmos_msg_queue balapi_rsp_queue;
+static bcmos_msg_queue balapi_to_core_queue;
+
+bcmos_msg_queue *p_balapi_rsp_queue;
+bcmos_msg_queue *p_balapi_to_core_queue;
+
+static bcmos_mutex balapi_lock;
+static uint32_t balapi_exchange_id;
+static STAILQ_HEAD(pending_req_list, bcmos_msg) pending_req_list;
+
+static bcmos_task api_rsp_rx_thread;
+static int _bal_ipc_api_rx_handler(long data);
+
+/* Rx polling timeout (us) */
+#define BAL_API_RX_POLL_TIMEOUT         100000
+
+/*****************************************************************************
+ * Initialize the BAL Public API internal data structures
+ *****************************************************************************/
+bcmos_errno bcmbal_api_init(const char *balapi_mgmt_ip_port,
+                            const char *core_mgmt_ip_port)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+    bcmos_msg_queue_parm msg_q_p = {};
+    bcmos_task_parm task_p = {};
+
+#ifdef ENABLE_LOG
+    log_id_public_api = bcm_dev_log_id_register("BAL_API", DEV_LOG_LEVEL_INFO, DEV_LOG_ID_TYPE_BOTH);
+    BUG_ON(log_id_public_api == DEV_LOG_INVALID_ID);
+#endif
+
+    do
+    {
+        STAILQ_INIT(&pending_req_list);
+
+        ret = bcmos_mutex_create(&balapi_lock, 0, "bal_api");
+        if (BCM_ERR_OK != ret)
+        {
+            BCM_LOG(ERROR, log_id_public_api, "Couldn't create BAL API protection mutex\n");
+            break;
+        }
+
+        /* Create BAL API RX management queue - the BAL Public API
+         * exchanges management messages with the BAL core using this queue.
+         */
+        msg_q_p.name = "balapi_mgmt_q";
+        if (NULL != balapi_mgmt_ip_port)
+        {
+            msg_q_p.local_ep_address = balapi_mgmt_ip_port;
+            msg_q_p.remote_ep_address = NULL;
+            msg_q_p.ep_type = BCMOS_MSG_QUEUE_EP_UDP_SOCKET;
+        }
+        else
+        {
+            msg_q_p.ep_type = BCMOS_MSG_QUEUE_EP_LOCAL;
+        }
+        ret = bcmos_msg_queue_create(&balapi_rsp_queue, &msg_q_p);
+        if (BCM_ERR_OK != ret)
+        {
+            BCM_LOG(ERROR, log_id_public_api, "Couldn't create BAL API mgmt queue\n");
+            ret = BCM_ERR_INTERNAL;
+            break;
+        }
+        p_balapi_rsp_queue = &balapi_rsp_queue;
+#ifdef BAL_MONOLITHIC
+        if (NULL == balapi_mgmt_ip_port)
+            p_bal_core_to_api_queue = p_balapi_rsp_queue;
+#endif
+
+        /* Create queue for sending API requests to the core. Only do it if API and core interact via UDP
+         */
+        if (NULL != core_mgmt_ip_port)
+        {
+            msg_q_p.name = "balapi_to_core_q";
+            msg_q_p.local_ep_address = NULL;
+            msg_q_p.remote_ep_address = core_mgmt_ip_port;
+            msg_q_p.ep_type = BCMOS_MSG_QUEUE_EP_UDP_SOCKET;
+
+            ret = bcmos_msg_queue_create(&balapi_to_core_queue, &msg_q_p);
+            if (BCM_ERR_OK != ret)
+            {
+                BCM_LOG(ERROR, log_id_public_api, "Couldn't create BAL API mgmt queue\n");
+                ret = BCM_ERR_INTERNAL;
+                break;
+            }
+            p_balapi_to_core_queue = &balapi_to_core_queue;
+        }
+
+        /* Create BAL API RX thread */
+        task_p.name = "ipc_api_rsp_rx_thread";
+        task_p.priority = TASK_PRIORITY_IPC_RX;
+        task_p.handler = _bal_ipc_api_rx_handler;
+        task_p.data = (long)p_balapi_rsp_queue;
+
+        ret = bcmos_task_create(&api_rsp_rx_thread, &task_p);
+        if (ret)
+        {
+            BCM_LOG(ERROR, log_id_public_api, "Couldn't create BAL API response RX thread\n");
+            break;
+        }
+
+        /*
+         * Initialize the BAL Public API backend worker and rx threads.  These
+         * threads are used to receive asynchronous indications from the core.
+         */
+        enable_bal_api_indications(balapi_mgmt_ip_port);
+
+    }
+    while(0);
+
+    return ret;
+}
+
+/*****************************************************************************
+ * Un-initialize the BAL Public API internal data structures
+ *****************************************************************************/
+bcmos_errno bcmbal_api_finish(void)
+{
+    bcmos_task_destroy(&api_rsp_rx_thread);
+    bcmos_msg_queue_destroy(&balapi_rsp_queue);
+    if (p_balapi_to_core_queue == &balapi_to_core_queue)
+        bcmos_msg_queue_destroy(&balapi_to_core_queue);
+
+    bal_api_indications_finish();
+
+    return BCM_ERR_OK;
+}
+
+/* Find pending request matching response */
+static bal_comm_msg_hdr *_bal_api_get_request_by_ex_id(uint32_t ex_id)
+{
+    bcmos_msg *req_msg, *tmp_msg;
+    bal_comm_msg_hdr *comm_hdr = NULL;
+
+    STAILQ_FOREACH_SAFE(req_msg, &pending_req_list, next, tmp_msg)
+    {
+        comm_hdr = bcmbal_bal_hdr_get_by_bcmos_hdr(req_msg);
+        if (comm_hdr->ex_id == ex_id)
+        {
+            STAILQ_REMOVE(&pending_req_list, req_msg, bcmos_msg, next);
+            break;
+        }
+    }
+    return req_msg ? comm_hdr : NULL;
+}
+
+/* Check if any pending request timed out */
+static void _bal_api_check_req_timeout(void)
+{
+    bcmos_msg *req_msg, *tmp_msg;
+    bal_comm_msg_hdr *comm_hdr;
+    bcmbal_obj *req_obj;
+    uint32_t ts = bcmos_timestamp();
+
+    STAILQ_FOREACH_SAFE(req_msg, &pending_req_list, next, tmp_msg)
+    {
+        comm_hdr = bcmbal_bal_hdr_get_by_bcmos_hdr(req_msg);
+        if (ts - comm_hdr->timestamp >= BCMBAL_MSG_TIMEOUT_1_SEC)
+        {
+            STAILQ_REMOVE(&pending_req_list, req_msg, bcmos_msg, next);
+            req_obj = (bcmbal_obj *)bcmbal_payload_ptr_get(comm_hdr);
+            /* Release pending API call */
+            req_obj->status = BCM_ERR_TIMEOUT;
+            BCM_LOG(DEBUG, log_id_public_api, "Timing out request %p\n", comm_hdr);
+            bcmos_sem_post(&comm_hdr->sem);
+        }
+    }
+}
+
+/* API response handler */
+static int _bal_ipc_api_rx_handler(long data)
+{
+    static uint32_t last_timeout_check_ts;
+    bcmos_msg_queue *rxq = (bcmos_msg_queue *)data;
+    bcmos_task *my_task = bcmos_task_current();
+    bcmos_msg *msg;
+    bcmos_errno ret = BCM_ERR_OK;
+    uint32_t ex_id;
+    bal_comm_msg_hdr *req;
+    bcmbal_obj *req_obj;
+
+    last_timeout_check_ts = bcmos_timestamp();
+    while (!my_task->destroy_request)
+    {
+        /* Wait for response */
+        msg = NULL;
+        req = NULL;
+
+        ret = bcmos_msg_recv(rxq, BAL_API_RX_POLL_TIMEOUT, &msg);
+        if(BCM_ERR_OK != ret && BCM_ERR_TIMEOUT != ret)
+        {
+            BCM_LOG(ERROR, log_id_public_api,
+                "error during bcmos_msg_recv (error:%s)\n", bcmos_strerror(ret));
+        }
+
+        /* Peek exchange id */
+        if (msg)
+        {
+            ret = bcmbal_bal_msg_peek_ex_id(msg, &ex_id);
+            if(BCM_ERR_OK != ret)
+            {
+                BCM_LOG(ERROR, log_id_public_api,
+                    "bad message. Can't find exchange id (error:%s)\n", bcmos_strerror(ret));
+                bcmos_msg_free(msg);
+                msg = NULL;
+            }
+            else
+            {
+                BCM_LOG(DEBUG, log_id_public_api, "Received message with ex_id=%u\n", ex_id);
+            }
+        }
+
+        /* Now find pending request and also check if any pending request(s) timed out */
+        bcmos_mutex_lock(&balapi_lock);
+        if (msg)
+        {
+            req = _bal_api_get_request_by_ex_id(ex_id);
+            if (NULL == req)
+            {
+                BCM_LOG(ERROR, log_id_public_api,
+                    "Request with ex_id=%u is not found. Probably expired. Response discarded\n", ex_id);
+            }
+            else
+            {
+                BCM_LOG(DEBUG, log_id_public_api, "Found request %p\n", req);
+            }
+        }
+        if (bcmos_timestamp() - last_timeout_check_ts >= BCMBAL_MSG_TIMEOUT_1_SEC)
+        {
+            _bal_api_check_req_timeout();
+            last_timeout_check_ts = bcmos_timestamp();
+        }
+        bcmos_mutex_unlock(&balapi_lock);
+
+        /* Got a message. Now unpack it */
+        if (req)
+        {
+            req_obj = (bcmbal_obj *)bcmbal_payload_ptr_get(req);
+            ret = bcmbal_obj_msg_unpack(msg, &req);
+            if (BCM_ERR_OK != ret)
+            {
+                BCM_LOG(ERROR, log_id_public_api, "Error during message unpack: %s\n", bcmos_strerror(ret));
+                req_obj->status = ret;
+            }
+            /* Release pending API */
+            BCM_LOG(DEBUG, log_id_public_api, "Posting request semaphore for %p\n", req);
+            bcmos_sem_post(&req->sem);
+        }
+
+        if (msg)
+            bcmos_msg_free(msg); /* release packed message. It is no longer needed */
+    }
+
+    my_task->destroyed = BCMOS_TRUE;
+
+    return (BCM_ERR_OK == ret) ? 0 : -EINVAL;
+}
+
+static bcmbal_mgmt_oper_id _bcmbal_obj_to_oper_id(const bcmbal_obj *objinfo)
+{
+    if (objinfo->group == BCMBAL_MGT_GROUP_STAT)
+    {
+        return BCMBAL_MGMT_OPER_ID_GET_STATS;
+    }
+    else if ((objinfo->type & BCMBAL_OBJ_MSG_TYPE_GET))
+    {
+        return BCMBAL_MGMT_OPER_ID_GET;
+    }
+    else if ((objinfo->type & BCMBAL_OBJ_MSG_TYPE_CLEAR))
+    {
+        return BCMBAL_MGMT_OPER_ID_CLEAR;
+    }
+    else
+    {
+        return BCMBAL_MGMT_OPER_ID_SET;
+    }
+}
+
+#define BALAPI_OPER_TIMEOUT (30000000) /* 30 seconds */
+
+static bcmos_errno _bcmbal_oper(bcmbal_obj *objinfo)
+{
+    bal_comm_msg_hdr *comm_hdr = bcmbal_bal_hdr_get(objinfo);
+    bcmos_msg *os_msg;
+    bcmos_errno ret = BCM_ERR_OK;
+
+    /*
+     * Send the message to the core for processing
+     */
+
+    /* Parameter checks */
+    BUG_ON(NULL == objinfo);
+
+    /* Check the magic number to be sure that the object has been properly initialized */
+    if(BCMBAL_OBJ_INIT_VAL != objinfo->obj_init_val)
+    {
+        BCM_LOG(ERROR, log_id_public_api, 
+                "Object has not been initialized: must use a BCMBAL INIT macro on the object before calling the BAL API\n");
+        return BCM_ERR_PARM;
+    }
+
+    ret = bcmos_sem_create(&comm_hdr->sem, 0, 0, "api_req");
+    if (ret)
+    {
+        BCM_LOG(ERROR, log_id_public_api, "Can't create semaphore: %s\n", bcmos_strerror(ret));
+        /* return here. We don't want to destroy semaphore that wasn't created */
+        return ret;
+    }
+
+    do
+    {
+        bcmbal_msg_hdr_set(objinfo,
+                           BCMBAL_MGMT_MSG,
+                           BAL_MSG_TYPE_REQ,
+                           BAL_SUBSYSTEM_PUBLIC_API,
+                           objinfo->obj_type,
+                           _bcmbal_obj_to_oper_id(objinfo),
+                           0);
+
+        BCM_LOG(DEBUG, log_id_public_api, "about to send %p\n", objinfo);
+
+        bcmos_mutex_lock(&balapi_lock);
+        bcmbal_ex_id_set(objinfo, ++balapi_exchange_id);
+        os_msg = bcmbal_bcmos_hdr_get(objinfo);
+        STAILQ_INSERT_TAIL(&pending_req_list, os_msg, next);
+        bcmos_mutex_unlock(&balapi_lock);
+
+        if (BCM_ERR_OK != (ret = bcmbal_msg_send(p_balapi_to_core_queue, objinfo, BCMOS_MSG_SEND_NO_FREE_ON_ERROR)))
+        {
+            BCM_LOG(ERROR, log_id_public_api, "message send failed with error: %s\n", bcmos_strerror(ret));
+            break;
+        }
+        BCM_LOG(DEBUG, log_id_public_api, "REQ message sent to core\n");
+
+        /*
+         * We've sent the message to the core, now, wait for the response (or timeout)
+         */
+        ret = bcmos_sem_wait(&comm_hdr->sem, BALAPI_OPER_TIMEOUT);
+        if (BCM_ERR_OK != ret)
+        {
+            BCM_LOG(ERROR, log_id_public_api, "rsp message receive for failed with error: %s\n",
+                    bcmos_strerror(ret));
+            break;
+        }
+        BCM_LOG(DEBUG, log_id_public_api, "RSP message received from core\n");
+
+        if (BCM_ERR_OK != ret)
+        {
+            BCM_LOG(ERROR, log_id_public_api, "failed to process rsp msg\n");
+            break;
+        }
+
+        if(BCM_ERR_OK != objinfo->status)
+        {
+            BCM_LOG(ERROR, log_id_public_api, "remote message command status is: %s\n",
+                bcmos_strerror(objinfo->status));
+        }
+
+        /*
+         * Pass the command status received from the core back to the caller
+         */
+        ret = objinfo->status;
+    }
+    while(0);
+
+    bcmos_sem_destroy(&comm_hdr->sem);
+
+    return ret;
+}
+
+/*****************************************************************************
+ * BAL Public API Set (or modify) command.
+ *****************************************************************************/
+bcmos_errno bcmbal_cfg_set(bcmbal_cfg *objinfo)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+
+    BCM_LOG(INFO, log_id_public_api, "BAL PUBLIC API - BCMBAL_SET\n");
+
+    if(BCMBAL_OBJ_ID_PACKET == objinfo->hdr.obj_type)
+    {
+        BCM_LOG(ERROR, log_id_public_api, "unsupported object id detected %d\n", objinfo->hdr.obj_type);
+        ret = BCM_ERR_NOT_SUPPORTED;
+
+    }
+    else
+    {
+        objinfo->hdr.type = BCMBAL_OBJ_MSG_TYPE_SET;
+        ret = _bcmbal_oper(&objinfo->hdr);
+    }
+
+    return ret;
+}
+
+#define BCMBAL_MAX_PROXY_PACKET_SIZE  (1600)
+
+/*****************************************************************************
+ * BAL Public API Packet Send function.
+ *****************************************************************************/
+bcmos_errno bcmbal_pkt_send(bcmbal_dest dest,
+                            const char *packet_to_send,
+                            uint16_t packet_len)
+{
+    /* Convert the user packet into a BAL object */
+    bcmbal_packet_cfg *p_packet_obj;
+    bcmbal_packet_key key;
+    bcmbal_u8_list_u32 pkt;
+    bcmos_errno ret;
+
+    BCM_LOG(INFO, log_id_public_api, "BAL PUBLIC API - BCMBAL_SEND to %s\n",
+            (BCMBAL_DEST_TYPE_NNI == dest.type) ? "NNI" : "SUB-TERM");
+
+    if(BCMBAL_MAX_PROXY_PACKET_SIZE < packet_len)
+    {
+        BCM_LOG(ERROR, log_id_public_api, "user packet length (%d) cannot be greater than %d\n",
+                packet_len,
+                BCMBAL_MAX_PROXY_PACKET_SIZE);
+
+        return BCM_ERR_PARM;
+    }
+
+    BCM_LOG(INFO, log_id_public_api, "user packet first 8 bytes %02X%02X%02X%02X%02X%02X%02X%02X\n",
+            packet_to_send[0], packet_to_send[1], packet_to_send[2], packet_to_send[3],
+            packet_to_send[4], packet_to_send[5], packet_to_send[6], packet_to_send[7]);
+
+    /* Set up the object key */
+    key.packet_send_dest = dest;
+
+    /* Allocate room for the packet object including the user packet */
+    p_packet_obj = bcmos_calloc(sizeof(bcmbal_packet_cfg) + packet_len);
+
+    BCMBAL_CFG_INIT(p_packet_obj, packet, key);
+
+    /* Now fill in user packet data into the object */
+    pkt.len = packet_len;
+    pkt.val = (uint8_t *)&p_packet_obj[1];
+    memcpy(pkt.val, packet_to_send, packet_len);
+
+    BCMBAL_CFG_PROP_SET(p_packet_obj, packet, pkt, pkt);
+
+    p_packet_obj->hdr.hdr.type = BCMBAL_OBJ_MSG_TYPE_SET; /* internally packet SEND is modeled as a config SET */
+    ret = _bcmbal_oper(&(p_packet_obj->hdr.hdr));
+    bcmos_free(p_packet_obj);
+
+    return ret;
+}
+
+/*****************************************************************************
+ * BAL Public API Get command.
+ *****************************************************************************/
+bcmos_errno bcmbal_cfg_get(bcmbal_cfg *objinfo)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+
+    BCM_LOG(DEBUG, log_id_public_api, "BAL PUBLIC API - BCMBAL_GET\n");
+
+    if(BCMBAL_OBJ_ID_PACKET == objinfo->hdr.obj_type)
+    {
+        BCM_LOG(ERROR, log_id_public_api, "unsupported object id detected %d\n", objinfo->hdr.obj_type);
+        ret = BCM_ERR_NOT_SUPPORTED;
+
+    }
+    else
+    {
+        objinfo->hdr.type = BCMBAL_OBJ_MSG_TYPE_GET;
+        ret = _bcmbal_oper(&(objinfo->hdr));
+    }
+
+    return ret;
+}
+
+/*****************************************************************************
+ * BAL Public API Clear command.
+ *****************************************************************************/
+bcmos_errno bcmbal_cfg_clear(bcmbal_cfg *objinfo)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+
+    BCM_LOG(INFO, log_id_public_api, "BAL PUBLIC API - BCMBAL_CLEAR\n");
+
+    if(BCMBAL_OBJ_ID_PACKET == objinfo->hdr.obj_type)
+    {
+        BCM_LOG(ERROR, log_id_public_api, "unsupported object id detected %d\n", objinfo->hdr.obj_type);
+        ret = BCM_ERR_NOT_SUPPORTED;
+
+    }
+    else
+    {
+        objinfo->hdr.type = BCMBAL_OBJ_MSG_TYPE_CLEAR;
+        ret = _bcmbal_oper(&objinfo->hdr);
+    }
+
+    return ret;
+}
+
+/*****************************************************************************
+ * @brief BAL Public API Get Stats command.
+ *****************************************************************************/
+bcmos_errno bcmbal_stat_get(bcmbal_stat *objinfo)
+{
+
+    /* Parameter checks */
+    BUG_ON(NULL == objinfo);
+
+    /*
+     * @todo Finish the stats function
+     */
+
+    BCM_LOG(ERROR, log_id_public_api, "bal get stats API not supported\n");
+
+    return BCM_ERR_NOT_SUPPORTED;
+}
+
+/*****************************************************************************
+ * BAL Public API indication subscription.
+ *****************************************************************************/
+bcmos_errno bcmbal_subscribe_ind(bcmbal_cb_cfg *cb_cfg)
+{
+
+    bcmos_errno ret = BCM_ERR_OK;
+
+    /*
+     * The indication subscription function
+     */
+    BCM_LOG(DEBUG, log_id_public_api, "BAL indication subscription for type: %s (%d)\n",
+            bcmbal_objtype_str(cb_cfg->obj_type), cb_cfg->obj_type);
+
+    ret = _manage_api_ind_listener(IND_CB_SUBSCRIBE, cb_cfg);
+
+    return ret;
+}
+
+/*****************************************************************************
+ * BAL Public API indication un-subscription.
+ *****************************************************************************/
+bcmos_errno bcmbal_unsubscribe_ind(bcmbal_cb_cfg *cb_cfg)
+{
+
+    bcmos_errno ret = BCM_ERR_OK;
+
+    BUG_ON(NULL == cb_cfg);
+
+    /*
+     * The indication subscription function
+     */
+    BCM_LOG(DEBUG, log_id_public_api, "BAL indication un-subscription for type: %s (%d)\n",
+            bcmbal_objtype_str(cb_cfg->obj_type), cb_cfg->obj_type);
+
+    ret = _manage_api_ind_listener(IND_CB_UNSUBSCRIBE, cb_cfg);
+
+    return ret;
+}
+
+/*****************************************************************************/
+/**
+ * @brief A function to get the string representation of the interface type
+ *
+ * @param int_type          The interface type to get
+ *
+ * @returns const char *    A pointer to a string containing the interface type,
+ *                          or "INVALID", if not a valid type.
+ *
+ *****************************************************************************/
+const char *bcmbal_get_interface_type_str(bcmbal_intf_type int_type)
+{
+    const char *type_str;
+
+    switch (int_type)
+    {
+        case(BCMBAL_INTF_TYPE_PON):
+        {
+            type_str = "pon";
+        }
+        break;
+
+        case(BCMBAL_INTF_TYPE_NNI):
+        {
+            type_str = "nni";
+        }
+        break;
+
+        default:
+        {
+            type_str = "INVALID";
+        }
+        break;
+
+    }
+
+    return type_str;
+}
+
+
+/*@}*/
diff --git a/bal_release/src/lib/libbalapi/bal_api.dox b/bal_release/src/lib/libbalapi/bal_api.dox
new file mode 100644
index 0000000..f8db011
--- /dev/null
+++ b/bal_release/src/lib/libbalapi/bal_api.dox
@@ -0,0 +1,108 @@
+/*
+ * BAL Programmers Guide - introduction
+ */
+
+/** \mainpage BAL Public Interface Concept
+
+\section intro Introduction
+This document describes the BAL user interface. The user interface is constructed from a
+small set of public APIs and an objects model.
+
+The objects model is designed to manage different entities in the system, and enables a simple and intuitive
+approach for managing line card.
+
+The API layer is designed to enable the management of line card containing muultiple MAC and SWITCH devices
+and support any host application architecture. It includes a set of APIs to access the line card configuration and
+asynchronous indications to send events to the host application.
+
+The API layer is part of the Broadcom® BAL SDK, which is provided as C source code, which is
+independent of the CPU and operating system being used.
+
+\section object_model_table BAL Object Model
+
+The system is modeled as a set of managed objects. The term “object” here doesn’t imply any inheritance, it
+means an entity that can be addressed individually and has a set of properties (attributes) and methods
+(operations), for example, access_terminal, flow, etc.
+
+Each object can have multiple properties (aka attributes), whereas a property is an object parameter that can be set or
+retrieved independently.
+	- A property is a simple type or a structure containing one or more fields, where fields can themselves be
+structures
+	- Each property has a specific permission type, such as Read-Only (RO) and Read-Write (RW).
+
+Object properties are grouped into sections/management groups. The following sections can contain zero or
+more properties:
+	- Key—Field(s) that uniquely identify the object instance (for example, subscriber_terminal key = {subs_id, intf_id}).
+	- Configuration
+	    - Read-Write, Read-Only and Write-Only configuration properties
+	- Statistics
+		- Performance monitoring counters
+		- Debug counters
+	- Autonomous Indications
+		- Notifications that are generated asynchronously.
+		  Indications can be either autonomous (such as alarms) or asynchronous responses to previously
+          submitted configuration change (for instance, subscriber_terminal admin_state=up request).
+
+\section object_model_prop Object and Properties Implementation
+
+\subsection object_model_structs Object Structures
+
+The main input parameter of all the APIs is an object structure, referred to as the Object Request Message. Each
+object section has a different structure that includes a generic header, object key, and a specific section structure
+according to the section type (for example, configuration, statics, etc).
+	- Generic header: A basic component of all the different section structures is the object generic header
+	  \ref bcmbal_obj
+
+	- The configuration structure bcmbal_xx_cfg contains:
+		- The generic header \ref bcmbal_cfg
+		- The object key, if any
+		- The structure bcmbal_xx_cfg_data, containing all object configuration properties
+
+	- This statistics structure bcmbal_xx_stat contains:
+		- The generic header \ref bcmbal_stat
+		- The object key, if any
+		- The structure bcmbal_xx_stat_data, containing all the object statistics
+
+	- The per-autonomous indication structure bcmbal_xx_auto_yy contains:
+		- The generic header \ref bcmbal_auto
+			- The autonomous message ID is stored in the subgroup field.
+		- The object key, if any
+		- The structure bcmbal_xx_auto_yy_data, containing all indication properties, if any
+
+\subsection object_model_init_macros Structure Initialization Macros
+The following macros are used for initializing objects:
+	- \ref BCMBAL_CFG_INIT(cfg_msg, _object, _key)
+	- \ref BCMBAL_STAT_INIT(stat_msg, _object, _key)
+
+The macros perform the following tasks:
+	- Check that the structure matches the object section.
+	- Clear all control fields in the generic header \ref bcmbal_obj.
+
+\subsection object_model_prop_macros Property Presence Mask Manipulation Macros
+The presence mask indicates which of the properties in the object structure need to be accessed (set/get, etc.)
+The mask is a bit field, wherein each bit corresponds to a specific property. The following macros should be used
+for setting the presence mask:
+
+ - Set configuration parameter value:\n
+	\ref BCMBAL_CFG_PROP_SET(_msg, _object, _parm_name, _parm_value)
+ - Indicate that the property should be fetched by a bcmolt_cfg_get() request:\n
+	\ref BCMBAL_CFG_PROP_GET(_msg, _object, _parm_name)
+ - Indicate that the statistic should be fetched by a bcmolt_stat_get() request:\n
+	\ref BCMBAL_STAT_PROP_GET(_msg, _object, _parm_name)
+
+\subsection object_model_enums Enumerations
+In the following descriptions, XX is the object name and YY is the property name from the XML model.
+
+The system model includes the enumerations:
+	- The bcmbal_obj_id enumeration lists all objects. It includes per-object BCMBAL_OBJ_ID_XX constants,
+		where XX is the object name from the XML model.
+	- The bcmbal_xx_cfg_id enumeration lists all XX objects' properties from the “Configuration” section in the
+		XML model. It includes the BCMBAL_XX_CFG_ID_YY constants.
+	- The bcmbal_xx_stat_id enumeration lists all XX object's properties from the “Statistics” section in the XML
+		model. It includes the BCMBAL_XX_STAT_ID_YY constants.
+	- The bcmbal_xx_auto_id enumeration lists all XX object's indications from the “Autonomous Indications”
+		section in the XML model. It includes the BCMBAL_XX_AUTO_ID_YY constants.
+
+\section api_section BAL Public API
+  See \ref api in API Reference chapter
+*/
diff --git a/bal_release/src/lib/libbalapi/bal_api.h b/bal_release/src/lib/libbalapi/bal_api.h
new file mode 100644
index 0000000..60f1e0b
--- /dev/null
+++ b/bal_release/src/lib/libbalapi/bal_api.h
@@ -0,0 +1,286 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file bal_api.h
+ * @brief Function declarations and all inclusions required for the BAL Public API
+ *
+ * @defgroup api BAL Public API
+ */
+#ifndef BCMBAL_API_H
+#define BCMBAL_API_H
+
+#include <bcmos_system.h>
+#include <bcmolt_model_types.h>
+
+#include <bal_objs.h>
+
+
+/*@{*/
+
+/*
+ * This example only controls the default access terminal
+ */
+#define DEFAULT_ATERM_ID           (0)
+
+/* Max number of access-terminals supported by BAL */
+#define MAX_ACC_TERM_ID            (255)
+
+/*------------------------------------------------
+ * See the bal_objs.h file for the BAL objects
+ *------------------------------------------------
+ */
+
+/*
+ * An enumeration of the BAL mgmt operations
+ */
+typedef enum
+{
+    BCMBAL_MGMT_OPER_ID_SET = 1 << 0,
+    BCMBAL_MGMT_OPER_ID_GET = 1 << 1,
+    BCMBAL_MGMT_OPER_ID_GET_STATS = 1 << 2,
+    BCMBAL_MGMT_OPER_ID_CLEAR = 1 << 3,
+    BCMBAL_MGMT_OPER_ID__NUM_OF = 1 << 4,
+    BCMBAL_MGMT_OPER_ID_ALL = BCMBAL_MGMT_OPER_ID__NUM_OF - 1,
+} bcmbal_mgmt_oper_id;
+
+
+/* access_terminal:key:acc_term_id max value */
+#define BAL_API_MAX_ACC_TERM_ID           (255)
+
+/* flow:key:flow_id max value */
+#define BAL_API_MAX_FLOW_ID               (65535)
+
+/* interface:mtu limits */
+#define BAL_API_MIN_INTF_MTU_SIZE         (64)
+#define BAL_API_MAX_INTF_MTU_SIZE         (9216)
+
+/* Max number of interfaces per interface:type in BAL */
+#define BAL_API_MAX_INTF_ID               (15)
+
+/* Max sub_term_id per interface for the various modes */
+#define BAL_API_MAX_SUB_TERM_ID_GPON      (127)
+#define BAL_API_MAX_SUB_TERM_ID_EPON      (256)
+#define BAL_API_MAX_SUB_TERM_ID_XGPON     (511)
+
+/* Max and min values for interface attributes */
+#define BAL_API_MIN_LOW_DATA_AGG_PORT_ID      (256)
+#define BAL_API_MAX_LOW_DATA_AGG_PORT_ID      (14591)
+
+#define BAL_API_MIN_LOW_DATA_SVC_PORT_ID      (1024)
+#define BAL_API_MAX_LOW_DATA_SVC_PORT_ID      (57598)
+
+
+/* Max and Min values for agg_port_id and svc_port_id */
+#define BAL_API_MIN_DATA_SVC_PORT_ID      (256)
+#define BAL_API_MAX_DATA_SVC_PORT_ID      (16383)
+
+/* Max and Min values for agg_port_id and svc_port_id */
+#define BAL_API_MIN_DATA_AGG_PORT_ID      (256)
+#define BAL_API_MAX_DATA_AGG_PORT_ID      (16383)
+
+/* Max value for pbits */
+#define MAX_PBITS_VALUE                   (7)
+
+/*
+ * BAL CLI max values
+ */
+/** Max number of supported OLTs */
+#define MAX_SUPPORTED_OLTS          (BAL_API_MAX_ACC_TERM_ID+1)
+
+/** Max number of supported subscriber terminals (ONUs) */
+#define MAX_SUPPORTED_SUBS          (BAL_API_MAX_SUB_TERM_ID_XGPON+1)
+
+/** Max number of supported flows */
+#define MAX_SUPPORTED_FLOWS         (BAL_API_MAX_FLOW_ID+1)
+
+/** Max number of supported PON and NNI interfaces */
+#define MAX_SUPPORTED_INTF          (BAL_API_MAX_INTF_ID+1)
+
+/** BAL Indication callback handler function prototype */
+typedef void (*f_bcmbal_ind_handler)(bcmbal_obj *obj);
+
+/** BAL Indication callback registration parameters */
+typedef struct bcmbal_cb_cfg
+{
+    bcmbal_obj_id          obj_type; 	       /**< Object type */
+    f_bcmbal_ind_handler   ind_cb_hdlr;        /**< Indication callback function. NULL=unregister */
+    bcmos_module_id        module;             /**< Target module id.
+                                                  If it is BCMOS_MODULE_ID_NONE (0), the callback will be called
+                                                  in BAL's context. Otherwise, it will be called in application
+                                                  module's context */
+} bcmbal_cb_cfg; /* This structure is used for passing the mgmt queue
+
+ * IP:port information between the core main thread and
+ * core worker thread and bal API.
+ */
+typedef struct mgmt_queue_addr_ports
+{
+    const char *core_mgmt_ip_port;
+    const char *balapi_mgmt_ip_port;
+} mgmt_queue_addr_ports;
+
+extern dev_log_id log_id_public_api;
+
+const char *bcmbal_get_interface_type_str(bcmbal_intf_type int_type);
+
+/*
+ *------------------------------------------------------------------------------------------
+ *
+ * @brief The BAL Public API
+ *
+ *------------------------------------------------------------------------------------------
+ */
+
+/**
+ * @brief Initialize the BAL Public API internal data structures
+ *
+ * @param balapi_mgmt_ip_port The IP:port of the BAL API management queue
+ *
+ * @param core_mgmt_ip_port   The IP:port of the core management queue
+ *
+ * @returns bcmos_errno
+ *
+ **/
+bcmos_errno bcmbal_api_init(const char *balapi_mgmt_ip_port, const char *core_mgmt_ip_port);
+
+/**
+ * @brief Un-initialize the BAL Public API internal data structures
+ *
+ * @returns bcmos_errno == BCM_ERR_OK
+ *
+ **/
+bcmos_errno bcmbal_api_finish(void);
+
+/**
+ * @brief BAL Public API Set (or modify) command.
+ *
+ * Set (or modify) the specified object instance (with implicit creation
+ * of dynamic objects) associated with the specified access-terminal device.
+ *
+ * @param objinfo A pointer to a BAL object
+ *
+ * @returns bcmos_errno
+ *
+ **/
+bcmos_errno bcmbal_cfg_set(bcmbal_cfg *objinfo);
+
+/**
+ * @brief BAL Public API Get command.
+ *
+ * Get the specified object instance
+ *
+ * @param objinfo A pointer to a BAL object
+ *
+ * @returns bcmos_errno
+ *
+ */
+bcmos_errno bcmbal_cfg_get(bcmbal_cfg *objinfo);
+
+/**
+ * @brief BAL Public API Packet Send function.
+ *
+ * Send a packet to the specified destination
+ *
+ * @param dest    The destination of the user packet
+ *
+ * @param packet_to_send A pointer to the user packet to send to the specified destination
+ *
+ * @param packet_len The length of the  user packet (must be <=1600 bytes)
+ *
+ * @returns bcmos_errno
+ *
+ */
+bcmos_errno bcmbal_pkt_send(bcmbal_dest dest,
+                            const char *packet_to_send,
+                            uint16_t packet_len);
+
+/**
+ * @brief BAL Public API Clear command.
+ *
+ * Set all attributes to default (or remove the object instance for
+ * dynamic objects) for the specified object instance
+ *
+ * @param objinfo A pointer to a BAL object
+ *
+ * @returns bcmos_errno
+ *
+ */
+bcmos_errno bcmbal_cfg_clear(bcmbal_cfg * objinfo);
+
+/**
+ * @brief BAL Public API Get Stats command.
+ *
+ * Get (and clear) the stats associated with specified object instance
+ *
+ * @param objinfo A pointer to a BAL object
+ *
+ * @returns bcmos_errno
+ *
+ */
+bcmos_errno bcmbal_stat_get(bcmbal_stat *objinfo);
+
+/**
+ * @brief BAL Public API indication subscription.
+ *
+ * Subscription function for the specified indications
+ *
+ * @param cb_cfg  A pointer to the callback configuration parameters for the
+ *                object indications being subscribed to.
+ *
+ * @returns bcmos_errno
+ *
+ */
+bcmos_errno bcmbal_subscribe_ind(bcmbal_cb_cfg *cb_cfg);
+
+/**
+ * @brief BAL Public API indication un-subscription.
+ *
+ * Un-subscription function for the specified (or all) indications
+ *
+ * @param cb_cfg  A pointer to the callback configuration parameters for the
+ *                object indications being un-subscribed from.
+ *
+ * @returns bcmos_errno
+ *
+ */
+bcmos_errno bcmbal_unsubscribe_ind(bcmbal_cb_cfg *cb_cfg);
+
+/**
+ * @brief Get the number of NNI ports supported by the running system
+ *
+ * @returns Number of NNI ports
+ */
+uint16_t bcmbal_num_nni_ports_get(void);
+
+/*@}*/
+
+#endif /* BCMBAL_API_H */
diff --git a/bal_release/src/lib/libbalapi/bal_api_worker.c b/bal_release/src/lib/libbalapi/bal_api_worker.c
new file mode 100644
index 0000000..178060c
--- /dev/null
+++ b/bal_release/src/lib/libbalapi/bal_api_worker.c
@@ -0,0 +1,513 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file bal_api_worker.c
+ * @brief Main processing loop for the worker thread that handles INDications
+ *        sent from the core to the BAL public API 
+ *
+ */
+
+/*
+ * We need access to the BAL subsystem names
+ */
+#define BAL_SUBSYSTEM_STR_REQ
+
+#include <bcmos_system.h>
+#include <bal_msg.h>
+#include <bal_obj_msg_pack_unpack.h>
+#include <bal_osmsg.h>
+#include <bal_api.h>
+#include "bal_api_worker.h"
+#ifdef BAL_MONOLITHIC
+#include <bal_worker.h>
+#endif
+#ifdef ENABLE_LOG
+#include <bcm_dev_log.h>
+#endif
+
+/* This rx thread and worker thread are used to process indications from the core
+ */
+static bcmos_task api_ind_rx_thread;
+static bcmos_task api_ind_worker_thread;
+
+/* Local function declarations */
+static int _bal_ipc_api_ind_rx_handler(long data);
+static void bal_ipc_api_indication_handler(bcmos_module_id module_id, bcmos_msg *msg);
+
+  
+typedef struct indication_subscription_inst indication_subscription_inst;
+struct indication_subscription_inst
+{
+    bcmbal_cb_cfg cb_cfg;
+    /**< TAILQ link for list management */
+    TAILQ_ENTRY(indication_subscription_inst) indication_subscription_inst_next;
+};
+
+TAILQ_HEAD(indication_subscription_list_head, indication_subscription_inst) indication_subscription_list;
+
+/*
+ * The queue through which the core converses with 
+ * the backend of the Public API for indications. 
+ */
+static bcmos_msg_queue bal_api_ind_backend_queue;
+bcmos_msg_queue *p_bal_api_ind_queue;
+
+/* Create API backend message queue */
+bcmos_errno bal_api_ind_msg_queue_create(mgmt_queue_addr_ports *mgmt_queue_info)
+{
+    bcmos_msg_queue_parm msg_q_p = {};
+    bcmos_errno ret = BCM_ERR_OK;
+
+    do
+    {
+        /* Create BAL API indication receive queue - the core sends IND messages
+         * to the BAL public API  using this queue.
+         */
+        msg_q_p.name = "api_ind_rx_q";
+
+        if (NULL != mgmt_queue_info->balapi_mgmt_ip_port)
+        {
+            uint16_t portnum;
+            char *p_ind_portnum_str;
+            char balapi_ind_port_str[256];
+
+            /*
+             * make a copy of the user chosen bal api mgmt port
+             */
+            strcpy(balapi_ind_port_str, mgmt_queue_info->balapi_mgmt_ip_port);
+
+            /* Find the port number */
+            p_ind_portnum_str = strchr(balapi_ind_port_str, ':') + 1;
+
+            /* convert to an integer and increment it by one */
+            portnum = atoi(p_ind_portnum_str) + 1;
+
+            /* create the new string defining the BAL API indication port */
+            sprintf(p_ind_portnum_str,"%d", portnum);
+
+            /* Set up the BAL API indication IP:port access parameter
+             */
+            msg_q_p.local_ep_address = balapi_ind_port_str;
+            msg_q_p.remote_ep_address = NULL;
+            msg_q_p.ep_type = BCMOS_MSG_QUEUE_EP_UDP_SOCKET;
+        }
+        else
+        {
+            msg_q_p.ep_type = BCMOS_MSG_QUEUE_EP_LOCAL;
+        }
+
+        ret = bcmos_msg_queue_create(&bal_api_ind_backend_queue, &msg_q_p);
+        if (BCM_ERR_OK != ret)
+        {
+            BCM_LOG(ERROR, log_id_public_api, "Couldn't BAL API rx indication queue\n");
+            break;
+        }
+
+        p_bal_api_ind_queue = &bal_api_ind_backend_queue;
+#ifdef BAL_MONOLITHIC
+        if (NULL == mgmt_queue_info->balapi_mgmt_ip_port)
+            p_bal_core_to_api_ind_queue = p_bal_api_ind_queue;
+#endif
+    } while (0);
+
+    return ret;
+}
+
+/* Worker module init function.
+ * Register for messages this module is expected to receive
+ */
+static bcmos_errno _bal_worker_module_bal_api_init(long data)
+{
+    bcmos_task_parm task_p = {};
+    bcmos_errno ret = BCM_ERR_OK;
+
+    BUG_ON(0 == data);
+
+    do
+    {
+        /* Create BAL API indication RX thread */
+        task_p.name = "ipc_api_ind_rx_thread";
+        task_p.priority = TASK_PRIORITY_IPC_RX;
+        task_p.handler = _bal_ipc_api_ind_rx_handler;
+        task_p.data = (long)&bal_api_ind_backend_queue;
+
+        ret = bcmos_task_create(&api_ind_rx_thread, &task_p);
+        if (ret)
+        {
+            BCM_LOG(ERROR, log_id_public_api, "Couldn't create BAL API indication RX thread\n");
+            break;
+        }
+
+        /* Register the message types to be handled by the mgmt module
+         */
+        bcmos_msg_register(BCMBAL_MGMT_API_IND_MSG, 
+                           0, 
+                           BCMOS_MODULE_ID_WORKER_API_IND, bal_ipc_api_indication_handler);
+
+    }
+    while(0);
+
+    return ret;
+}
+
+static int _bal_ipc_api_ind_rx_handler(long data)
+{
+    bcmos_msg_queue *rxq = (bcmos_msg_queue *)data;
+    bcmos_task *my_task = bcmos_task_current();
+    bcmos_msg *msg;
+    bcmos_errno ret = BCM_ERR_OK;
+    void *payload;
+
+    while (!my_task->destroy_request)
+    {
+        payload = NULL;
+        ret = bcmbal_msg_recv(rxq, BCMOS_WAIT_FOREVER, &payload);
+        if (ret)
+        {
+            /* Unexpected failure */
+            BCM_LOG(ERROR, log_id_public_api, "bcmbal_msg_recv() -> %s\n", bcmos_strerror(ret));
+            continue;
+        }
+
+        /* Message received */
+        BCM_LOG(DEBUG, log_id_public_api, "bcmbal_msg_recv(%p) -> %s\n", payload, bcmos_strerror(ret));
+
+        /*
+         * Got a message, so now dispatch it.  This will result in one
+         * of the modules (registered for the message being processed)
+         * executing its message callback handler.
+         */
+        msg = bcmbal_bcmos_hdr_get(payload);
+        ret = bcmos_msg_dispatch(msg, BCMOS_MSG_SEND_AUTO_FREE);
+        if (ret)
+        {
+            BCM_LOG(ERROR, log_id_public_api, 
+                    "Couldn't dispatch message %d:%d\n", 
+                    (int)msg->type, (int)msg->instance);
+        }
+    }
+
+    my_task->destroyed = BCMOS_TRUE;
+
+    return (BCM_ERR_OK == ret) ? 0 : -EINVAL;
+}
+
+
+/* Message wrapper that is called when indication is delivered in application module's context */
+static void _int_deliver_wrapper_cb(bcmos_module_id module_id, bcmos_msg *msg)
+{
+    void *msg_payload = bcmbal_payload_ptr_get(bcmbal_bal_hdr_get_by_bcmos_hdr(msg));
+    f_bcmbal_ind_handler handler = (f_bcmbal_ind_handler)bcmbal_scratchpad_get(msg_payload);
+
+    handler((bcmbal_obj *)msg_payload);
+    bcmbal_msg_free((bcmbal_obj *)msg_payload);
+}
+
+static void process_listener_callbacks(bcmbal_obj *obj)
+{
+
+    indication_subscription_inst *current_entry, *p_temp_entry;
+    
+    BCM_LOG(DEBUG, log_id_public_api, "inspecting registered callback for object %d\n", 
+                    obj->obj_type);
+
+    TAILQ_FOREACH_SAFE(current_entry, 
+                       &indication_subscription_list, 
+                       indication_subscription_inst_next,
+                       p_temp_entry)
+    {
+        BCM_LOG(DEBUG, log_id_public_api, "entry objtype %d\n", current_entry->cb_cfg.obj_type);
+
+        if((BCMBAL_OBJ_ID_ANY == current_entry->cb_cfg.obj_type) || 
+           (current_entry->cb_cfg.obj_type == obj->obj_type))
+        {
+            BCM_LOG(DEBUG, log_id_public_api, 
+                    "Calling registered callback for object %d\n", 
+                    obj->obj_type);
+
+            /* call the registered function directly or in the target module's context */
+            if (BCMOS_MODULE_ID_NONE == current_entry->cb_cfg.module)
+            {
+                current_entry->cb_cfg.ind_cb_hdlr(obj);
+            }
+            else
+            {
+                bcmbal_obj *clone = bcmbal_msg_clone(obj);
+                bcmos_errno err;
+                if (NULL == clone)
+                {
+                    BCM_LOG(ERROR, log_id_public_api,
+                            "Couldn't clone message for object %d\n",
+                            obj->obj_type);
+                    continue;
+                }
+                bcmbal_scratchpad_set(clone, current_entry->cb_cfg.ind_cb_hdlr);
+                err = bcmbal_msg_call(clone,
+                    current_entry->cb_cfg.module,
+                    _int_deliver_wrapper_cb,
+                    BCMOS_MSG_SEND_AUTO_FREE);
+                if (BCM_ERR_OK != err)
+                {
+                    BCM_LOG(ERROR, log_id_public_api,
+                            "Couldn't deliver message for object %d to module %d. Error %s\n",
+                            obj->obj_type, current_entry->cb_cfg.module, bcmos_strerror(err));
+                }
+            }
+        }
+    }
+
+    return;
+}
+
+/*
+ * This is the handler for indication messages received by the BAL Public API
+ * backend from the core.  We need to see who has subscribed for these messages,
+ * and call those registered functions.
+ */
+static void bal_ipc_api_indication_handler(bcmos_module_id module_id, bcmos_msg *msg)
+{
+
+    void *msg_payload;
+
+    msg_payload = bcmbal_payload_ptr_get(bcmbal_bal_hdr_get_by_bcmos_hdr(msg));
+
+    /*
+     * TO-DO 
+     * validate the message major and minor version is correct
+     */
+
+    do
+    {
+        if(BAL_SUBSYSTEM_CORE != bcmbal_sender_get(msg_payload))
+        {
+            BCM_LOG(ERROR, log_id_public_api, "Mgmt IND message received from wrong subsystem (%s)\n",
+                    subsystem_str[bcmbal_sender_get(msg_payload)]);
+            break;
+        }
+
+        if(BCMBAL_MGMT_API_IND_MSG != bcmbal_type_major_get(msg_payload))
+        {
+            BCM_LOG(ERROR, log_id_public_api,"Mgmt IND message received with wrong major type (%d)\n", 
+                    bcmbal_type_major_get(msg_payload));
+            break;             
+        }
+                
+        /* Look through the list of registered subscribers for this indication
+         * and call them.
+         */
+        BCM_LOG(DEBUG, log_id_public_api,
+                "Processing indication listeners\n");
+
+        process_listener_callbacks((bcmbal_obj *)msg_payload);
+
+    }
+    while(0);
+
+    bcmbal_msg_free(msg_payload);
+
+    return;
+}
+
+void enable_bal_api_indications(const char *balapi_mgmt_ip_port)
+{
+
+    bcmos_task_parm task_p = {};
+    bcmos_module_parm module_p = {};
+    bcmos_errno ret = BCM_ERR_OK;
+    mgmt_queue_addr_ports mgmt_queue_info;
+    
+    TAILQ_INIT(&indication_subscription_list);
+ 
+    do
+    {
+        /* Create quues for communication between BAL API and the core */
+        mgmt_queue_info.balapi_mgmt_ip_port = balapi_mgmt_ip_port;
+        ret = bal_api_ind_msg_queue_create(&mgmt_queue_info);
+        if (BCM_ERR_OK != ret)
+        {
+            BCM_LOG(ERROR, log_id_public_api, "Couldn't create BAL API indication queue\n");
+            break;
+        }
+
+        module_p.qparm.name = "bal_api_ind_worker_module";
+        module_p.init = _bal_worker_module_bal_api_init;
+        module_p.data = (long)&mgmt_queue_info; /* IP address and port information */
+
+        /* Create worker thread & modules for BAL indication messages from the core */
+        task_p.name = "bal_api_ind_worker";
+        task_p.priority = TASK_PRIORITY_WORKER;
+
+        ret = bcmos_task_create(&api_ind_worker_thread, &task_p);
+        if (BCM_ERR_OK != ret)
+        {
+            BCM_LOG(ERROR, log_id_public_api, "Couldn't create BAL API indication worker thread\n");
+            break;
+        }
+
+        ret = bcmos_module_create(BCMOS_MODULE_ID_WORKER_API_IND, &api_ind_worker_thread, &module_p);
+        if (ret)
+        {
+            BCM_LOG(ERROR, log_id_public_api, "Couldn't create BAL API indication worker module\n");
+            break;
+        }
+
+        BCM_LOG(DEBUG, log_id_public_api, "BAL API indication handler registered\n");
+
+    }
+    while(0);
+
+    return;
+}
+
+
+/** NOTE: when cb_cfg->obj_type is BCMBAL_OBJ_ID_ANY AND type is UN-SUBSCRIBE, then this is unsubscribe all */
+bcmos_errno _manage_api_ind_listener(bcmbal_ind_cb_management_type type, bcmbal_cb_cfg *cb_cfg)
+{
+    
+    bcmos_errno ret = BCM_ERR_OK;
+    indication_subscription_inst *new_ind_entry;
+    indication_subscription_inst *current_entry, *p_temp_entry;
+    bcmos_bool is_unsubscribe;
+
+    BUG_ON(NULL == cb_cfg);
+    BUG_ON(NULL == cb_cfg->ind_cb_hdlr);
+    
+    is_unsubscribe = (IND_CB_UNSUBSCRIBE == type);
+
+    BCM_LOG(DEBUG,log_id_public_api, 
+            "%s: %s for BAL API indications\n",
+            __FUNCTION__,
+            is_unsubscribe ? "Unsubscribing" : "Subscribing");
+
+    do
+    {
+        bcmos_bool b_found_existing_entry = BCMOS_FALSE;
+
+        TAILQ_FOREACH_SAFE(current_entry, 
+                           &indication_subscription_list, 
+                           indication_subscription_inst_next,
+                           p_temp_entry)
+        {
+            if(
+                ((is_unsubscribe && (BCMBAL_OBJ_ID_ANY == cb_cfg->obj_type)) ? BCMOS_TRUE :
+                 (current_entry->cb_cfg.obj_type == cb_cfg->obj_type)) &&
+                (current_entry->cb_cfg.ind_cb_hdlr == cb_cfg->ind_cb_hdlr) &&
+                (current_entry->cb_cfg.module == cb_cfg->module))
+            {
+                BCM_LOG(DEBUG,log_id_public_api, 
+                        "Found existing registration\n");
+
+                if(is_unsubscribe)
+                {
+                    BCM_LOG(DEBUG,log_id_public_api, 
+                            "Removing registration\n");
+                    TAILQ_REMOVE(&indication_subscription_list, current_entry, indication_subscription_inst_next);
+                    bcmos_free(current_entry);
+                }
+                    
+                b_found_existing_entry = BCMOS_TRUE;
+
+                /* Don't stop looking for matches if we are unsubscribing from ANY indications, there could be many
+                 * assigned to a single callback function */
+                if(!(is_unsubscribe && (BCMBAL_OBJ_ID_ANY == cb_cfg->obj_type))) break;
+           }
+
+        }
+
+        /* If we are subscribing to indication and we have already recorded
+         * this subscription, OR we are un-subscribing (whether or not we
+         * found a subscription to remove), then return right away with OK
+         */
+        if((BCMOS_TRUE == b_found_existing_entry) || is_unsubscribe)
+        {
+            break;
+        }
+ 
+        BCM_LOG(DEBUG,log_id_public_api, 
+                "Registering NEW subscriber for BAL API indications\n");
+
+        /* This is a new subscription */
+        new_ind_entry = bcmos_calloc(sizeof(indication_subscription_inst));
+
+        if (NULL == new_ind_entry)
+        {
+            BCM_LOG(FATAL, log_id_public_api,  
+                    "Failed to register api indication subscription\n");
+            ret = BCM_ERR_NOMEM;
+            break;
+        }
+        
+        new_ind_entry->cb_cfg = *cb_cfg;
+
+        TAILQ_INSERT_TAIL(&indication_subscription_list, new_ind_entry, indication_subscription_inst_next);
+
+    } while(0);
+
+    return ret;
+ 
+}
+
+static void free_all_indication_subscriptions(void)
+{
+    indication_subscription_inst *current_entry, *p_temp_entry;
+    
+    TAILQ_FOREACH_SAFE(current_entry, 
+                       &indication_subscription_list, 
+                       indication_subscription_inst_next,
+                       p_temp_entry)
+    {
+        TAILQ_REMOVE(&indication_subscription_list, current_entry, indication_subscription_inst_next);
+        bcmos_free(current_entry);
+    }
+
+    return;
+}
+
+
+void bal_api_indications_finish(void)
+{
+    free_all_indication_subscriptions();
+
+    bcmos_msg_unregister(BCMBAL_MGMT_API_IND_MSG, 
+                         0, 
+                         BCMOS_MODULE_ID_WORKER_API_IND);
+
+    bcmos_msg_queue_destroy(&bal_api_ind_backend_queue);
+
+    bcmos_module_destroy(BCMOS_MODULE_ID_WORKER_API_IND);
+
+    bcmos_task_destroy(&api_ind_rx_thread);
+
+    bcmos_task_destroy(&api_ind_worker_thread);
+
+    return;
+}
diff --git a/bal_release/src/lib/libbalapi/bal_api_worker.h b/bal_release/src/lib/libbalapi/bal_api_worker.h
new file mode 100644
index 0000000..7e258ca
--- /dev/null
+++ b/bal_release/src/lib/libbalapi/bal_api_worker.h
@@ -0,0 +1,62 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file bal_worker.h
+ * 
+ * @brief Bal worker thread included
+ * 
+ * Module contains the data structures and functions used to support the 
+ * BAL core worker thread.
+ */
+
+#ifndef	BAL_API_WORKER_H
+#define	BAL_API_WORKER_H
+
+#include <bcmos_errno.h>
+
+extern bcmos_msg_queue *p_balapi_to_core_queue;
+
+typedef enum {
+    IND_CB_SUBSCRIBE,
+    IND_CB_UNSUBSCRIBE
+}bcmbal_ind_cb_management_type;
+
+/*
+ * Function declarations
+ */
+extern bcmos_errno bal_api_ind_msg_queue_create(mgmt_queue_addr_ports *mgmt_queue_info);
+extern void enable_bal_api_indications(const char *balapi_mgmt_ip_port);
+extern bcmos_errno _manage_api_ind_listener(bcmbal_ind_cb_management_type type, bcmbal_cb_cfg *cb_cfg);
+extern void bal_api_indications_finish(void);
+
+
+#endif /* BAL_API_WORKER_H */
diff --git a/bal_release/src/lib/libbalapicli/Makefile b/bal_release/src/lib/libbalapicli/Makefile
new file mode 100644
index 0000000..44b7bac
--- /dev/null
+++ b/bal_release/src/lib/libbalapicli/Makefile
@@ -0,0 +1,37 @@
+###############################################################################
+#
+#  <:copyright-BRCM:2016:DUAL/GPL:standard
+#  
+#     Copyright (c) 2016 Broadcom
+#     All Rights Reserved
+#  
+#  Unless you and Broadcom execute a separate written software license
+#  agreement governing use of this software, this software is licensed
+#  to you under the terms of the GNU General Public License version 2
+#  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+#  with the following added to such license:
+#  
+#     As a special exception, the copyright holders of this software give
+#     you permission to link this software with independent modules, and
+#     to copy and distribute the resulting executable under terms of your
+#     choice, provided that you also meet, for each linked independent
+#     module, the terms and conditions of the license of that module.
+#     An independent module is a module which is not derived from this
+#     software.  The special exception does not apply to any modifications
+#     of the software.
+#  
+#  Not withstanding the above, under no circumstances may you combine
+#  this software in any way with any other Broadcom software provided
+#  under a license other than the GPL, without Broadcom's express prior
+#  written consent.
+#  
+#  :>
+#
+###############################################################################
+MOD_NAME = bal_api_cli
+MOD_TYPE = lib
+MOD_DEPS = cli bal_api
+MOD_INC_DIRS = $(SRC_DIR) $(OUT_DIR)
+
+srcs = bal_api_cli.c bal_api_cli_dump.c 
+gen_bal_srcs = bal_api_cli_helpers.c bal_api_cli_handlers.c
diff --git a/bal_release/src/lib/libbalapicli/bal_api_cli.c b/bal_release/src/lib/libbalapicli/bal_api_cli.c
new file mode 100644
index 0000000..cbbe973
--- /dev/null
+++ b/bal_release/src/lib/libbalapicli/bal_api_cli.c
@@ -0,0 +1,1059 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#include <bcmos_system.h>
+#include <bcmcli.h>
+#include <bal_api.h>
+#include "bal_api_cli.h"
+#include "bal_api_cli_helpers.h"
+#include "bal_api_cli_handlers.h"
+
+#define BCMBAL_APICLI_CAST_DISCARD_CONST(p, type)       (type)((long)(p))
+
+/* bool enum table */
+static bcmcli_enum_val bool_enum[] =
+{
+    { .name = "yes", .val = 1 },
+    { .name = "no", .val = 0 },
+    BCMCLI_ENUM_LAST
+};
+
+static bcmbal_apicli_type_descr bool_type_descr = {
+    .name = "bool",
+    .descr = "Boolean",
+    .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM,
+    .size = sizeof(bcmos_bool),
+    .x = {.e = bool_enum}
+};
+
+/* parameter data */
+typedef struct
+{
+    const bcmbal_apicli_prop_descr *prop;      /* property */
+    const bcmbal_apicli_field_descr *field;    /* field or NULL */
+    const bcmbal_apicli_field_descr *array_fd; /* array field descriptor or NULL */
+    uint16_t offset;                         /* offset from the beginning of the property */
+    uint16_t array_fd_offset;                /* offset of array_fd from the beginning of the property */
+    bcmbal_mgt_group group;                  /* management group */
+} bcmbal_apicli_parm_data;
+
+typedef enum
+{
+    BCMBAL_APICLI_FLAGS_NONE = 0,
+    BCMBAL_APICLI_FLAGS_IGNORE_FIELDS = 1 << 0
+} bcmbal_apicli_flags;
+
+/* Current session */
+static bcmcli_session *current_session;
+
+/*
+ * helpers
+ */
+
+/* calculate number of fields in type */
+static uint32_t bcmbal_apicli_get_num_fields_in_type(const bcmbal_apicli_type_descr *td)
+{
+    uint16_t f;
+    uint32_t nf = 0;
+
+
+    switch (td->base_type)
+    {
+        case BCMBAL_APICLI_BASE_TYPE_ID_STRUCT:
+        {
+            if (!td->x.s.num_fields)
+                return 0;
+            BUG_ON(!td->x.s.fields);
+            for (f = 0; f < td->x.s.num_fields; f++)
+            {
+                nf +=  bcmbal_apicli_get_num_fields_in_type(td->x.s.fields[f].type);
+            }
+            break;
+        }
+
+        case BCMBAL_APICLI_BASE_TYPE_ID_UNION:
+        {
+            /* Union. Count only common fields */
+            nf = td->x.u.num_common_fields;
+            break;
+        }
+
+        case BCMBAL_APICLI_BASE_TYPE_ID_ARR_FIXED:
+        {
+            nf = bcmbal_apicli_get_num_fields_in_type(td->x.arr_fixed.elem_type);
+            break;
+        }
+
+        case BCMBAL_APICLI_BASE_TYPE_ID_ARR_DYN:
+        {
+            nf = bcmbal_apicli_get_num_fields_in_type(td->x.arr_dyn.elem_type);
+            break;
+        }
+
+        default:
+        {
+            nf = 1;
+            break;
+        }
+    }
+
+    return nf;
+}
+
+/* calculate number of property fields for given object+group+subgroup+access. simple property=single field */
+static bcmos_errno bcmbal_apicli_get_num_fields_in_group(bcmbal_obj_id o, bcmbal_mgt_group group, uint16_t subgroup,
+    bcmbal_apicli_prop_access_id access_level, uint32_t *nfields)
+{
+    uint32_t nf = 0;
+    int i;
+    bcmos_errno rc = BCM_ERR_OK;
+
+    for (i = 0; rc != BCM_ERR_RANGE; i++)
+    {
+        const bcmbal_apicli_prop_descr *pd;
+        rc = bcmbal_apicli_object_property(o, group, subgroup, i, &pd);
+        if (rc == BCM_ERR_OK && (pd->access & access_level))
+        {
+            /* Calculate number of fields if write access. Count only properties for read access */
+            if ((access_level & BCMBAL_APICLI_PROP_ACCESS_ID_W) != 0)
+            {
+                BUG_ON(!pd->type);
+                nf += bcmbal_apicli_get_num_fields_in_type(pd->type);
+            }
+            else
+            {
+                ++nf;
+            }
+        }
+    }
+    *nfields = nf;
+
+    return BCM_ERR_OK;
+}
+
+/*
+ * Command handlers
+ */
+
+static bcmos_errno bcmbal_apicli_objects_handler(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    int rc;
+    bcmbal_obj_id o;
+    const char *name, *descr;
+
+    bcmcli_print(session, "System Object Types:\n");
+    bcmcli_print(session, "=======================================\n");
+    bcmcli_print(session, "Id   Name                   Description\n");
+    bcmcli_print(session, "=======================================\n");
+    for (o = 0; o < BCMBAL_OBJ_ID__NUM_OF; o++)
+    {
+        rc = bcmbal_apicli_object_name(o, &name, &descr);
+        if (!rc)
+            bcmcli_print(session, "%.4d %-22s %s\n", o, name, descr);
+    }
+
+    return 0;
+}
+
+static bcmos_errno bcmbal_apicli_set_handler(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    return bcmbal_apicli_call(BCMBAL_MGT_GROUP_CFG, BCMBAL_OBJ_MSG_TYPE_SET, session);
+}
+
+static bcmos_errno bcmbal_apicli_get_handler(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    return bcmbal_apicli_call(BCMBAL_MGT_GROUP_CFG, BCMBAL_OBJ_MSG_TYPE_GET, session);
+}
+
+static bcmos_errno bcmbal_apicli_clear_handler(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    return bcmbal_apicli_call(BCMBAL_MGT_GROUP_CFG, BCMBAL_OBJ_MSG_TYPE_CLEAR, session);
+}
+
+static bcmos_errno bcmbal_apicli_stat_handler(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    return bcmbal_apicli_call(BCMBAL_MGT_GROUP_STAT, BCMBAL_OBJ_MSG_TYPE_GET, session);
+}
+
+/*
+ * Init-time helpers
+ */
+
+/* map to CLI type */
+static bcmos_errno bcmbal_apicli_map_type(
+    const bcmbal_apicli_type_descr *td,
+    const bcmbal_apicli_type_descr *array_td,
+    bcmcli_cmd_parm *cmd_parm)
+{
+    bcmbal_apicli_parm_data *parm_data = cmd_parm->user_data;
+    bcmos_errno rc = BCM_ERR_OK;
+
+    /* Map type */
+    switch(td->base_type)
+    {
+    case BCMBAL_APICLI_BASE_TYPE_ID_SNUM:
+        cmd_parm->type = BCMCLI_PARM_NUMBER;
+        break;
+    case BCMBAL_APICLI_BASE_TYPE_ID_UNUM:
+        cmd_parm->type = BCMCLI_PARM_UNUMBER;
+        break;
+    case BCMBAL_APICLI_BASE_TYPE_ID_UNUM_HEX:
+        cmd_parm->type = BCMCLI_PARM_HEX;
+        break;
+    case BCMBAL_APICLI_BASE_TYPE_ID_BOOL:
+        cmd_parm->type = BCMCLI_PARM_ENUM;
+        cmd_parm->enum_table = bool_enum;
+        break;
+    case BCMBAL_APICLI_BASE_TYPE_ID_FLOAT:
+        cmd_parm->type = td->size == sizeof(double) ? BCMCLI_PARM_DOUBLE : BCMCLI_PARM_FLOAT;
+        break;
+    case BCMBAL_APICLI_BASE_TYPE_ID_STRING:
+        cmd_parm->type = BCMCLI_PARM_STRING;
+        break;
+    case BCMBAL_APICLI_BASE_TYPE_ID_IPV4:
+        cmd_parm->type = BCMCLI_PARM_IP;
+        break;
+    case BCMBAL_APICLI_BASE_TYPE_ID_MAC:
+        cmd_parm->type = BCMCLI_PARM_MAC;
+        break;
+    case BCMBAL_APICLI_BASE_TYPE_ID_ENUM:
+        cmd_parm->type = BCMCLI_PARM_ENUM;
+        cmd_parm->enum_table = td->x.e;
+        break;
+    case BCMBAL_APICLI_BASE_TYPE_ID_ENUM_MASK:
+        cmd_parm->type = BCMCLI_PARM_ENUM_MASK;
+        cmd_parm->enum_table = td->x.e;
+        break;
+    default:
+        bcmcli_print(current_session, "*** can't map type %s (%d)\n", td->name, (int)td->base_type);
+        rc = BCM_ERR_NOT_SUPPORTED;
+        break;
+    }
+
+    /* Map uint8_t array to buffer if it is independent (not structure field) */
+    if (array_td &&
+        td->size == 1 &&
+        (td->base_type == BCMBAL_APICLI_BASE_TYPE_ID_UNUM || td->base_type == BCMBAL_APICLI_BASE_TYPE_ID_UNUM_HEX) &&
+        (parm_data->array_fd == parm_data->field || !parm_data->field))
+    {
+        cmd_parm->type = BCMCLI_PARM_BUFFER;
+    }
+
+    return rc;
+}
+
+/* allocate memory for name and description and copy to to parm */
+static bcmos_errno bcmbal_apicli_copy_parm_name(bcmcli_cmd_parm *parm, const char *name, const char *descr)
+{
+    parm->name = bcmos_alloc(strlen(name) + 1);
+    parm->description = bcmos_alloc(strlen(descr) + 1);
+    if ((parm->name == NULL) || (parm->description == NULL))
+    {
+        /* Successful allocation if any will be released by common cleanup
+         * along with the rest of dynamic parameter fields */
+        return BCM_ERR_NOMEM;
+    }
+    strcpy(BCMBAL_APICLI_CAST_DISCARD_CONST(parm->name, void *), name);
+    strcpy(BCMBAL_APICLI_CAST_DISCARD_CONST(parm->description, void *), descr);
+    return BCM_ERR_OK;
+}
+
+/* populate single parameter */
+static int bcmbal_apicli_populate_parm1(
+    const bcmbal_apicli_prop_descr *pd,
+    const bcmbal_apicli_field_descr *fd,
+    const bcmbal_apicli_type_descr *td,
+    const bcmbal_apicli_field_descr *array_fd,
+    uint32_t offset,
+    uint32_t array_fd_offset,
+    bcmcli_cmd_parm *cmd_parm,
+    uint32_t cmd_flags,
+    char *name,
+    char *help)
+{
+    bcmbal_apicli_parm_data *parm_data = cmd_parm->user_data;
+    int rc;
+
+    parm_data->prop = pd;
+    parm_data->field = fd;
+    parm_data->offset = offset;
+    parm_data->array_fd = array_fd;
+    parm_data->array_fd_offset = array_fd_offset;
+
+    rc = bcmbal_apicli_copy_parm_name(cmd_parm, name, help);
+    if (rc)
+    {
+        return rc;
+    }
+    cmd_parm->flags = cmd_flags;
+    if (td->min_val != td->max_val || td->min_val)
+    {
+        cmd_parm->flags |= BCMCLI_PARM_FLAG_RANGE;
+        cmd_parm->low_val = td->min_val;
+        cmd_parm->hi_val = td->max_val;
+    }
+    rc = bcmbal_apicli_map_type(td, array_fd ? array_fd->type : NULL, cmd_parm);
+    if (rc < 0)
+    {
+        return rc;
+    }
+
+    /* Arrays require more work.
+     * - Calculate size. Known for fixed arrays, hard-coded max for dynamic
+     * - Allocate either buffer or array of values based on CLI parameter type
+     * - Calculate offset from the beginning of array entry
+     */
+    if (array_fd)
+    {
+        uint32_t array_size;
+
+        if (array_fd->type->base_type == BCMBAL_APICLI_BASE_TYPE_ID_ARR_FIXED)
+        {
+            array_size = array_fd->type->x.arr_fixed.size;
+        }
+        else
+        {
+            array_size = array_fd->type->x.arr_dyn.max_size;
+        }
+        if (!array_size)
+        {
+            bcmcli_print(current_session, "*** Error in %s array descriptor. Size is not set.\n", array_fd->name);
+            return BCM_ERR_INTERNAL;
+        }
+        if (cmd_parm->type == BCMCLI_PARM_BUFFER)
+        {
+            rc = bcmbal_buf_alloc(&cmd_parm->value.buffer, array_size);
+            if (rc)
+            {
+                return rc;
+            }
+        }
+        else
+        {
+            cmd_parm->values = bcmos_calloc(sizeof(bcmcli_parm_value) * array_size);
+            if (!cmd_parm->values)
+            {
+                return BCM_ERR_NOMEM;
+            }
+            cmd_parm->max_array_size = array_size;
+        }
+    }
+
+    return 1;
+}
+
+
+/* populate name buf and help buf */
+static void bcmbal_apicli_populate_name_help(const bcmbal_apicli_field_descr *fld, char *name_buf0, char *help_buf0,
+    char *name_buf, char *help_buf)
+{
+    name_buf[0] = 0;
+    help_buf[0] = 0;
+    bcmcli_strncpy(name_buf, name_buf0, BCMBAL_APICLI_MAX_PARM_NAME_LENGTH);
+    if (strlen(name_buf))
+        bcmcli_strncat(name_buf, ".", BCMBAL_APICLI_MAX_PARM_NAME_LENGTH);
+    bcmcli_strncat(name_buf, fld->cli_name ? fld->cli_name : fld->name, BCMBAL_APICLI_MAX_PARM_NAME_LENGTH);
+    bcmcli_strncpy(help_buf, help_buf0, BCMBAL_APICLI_MAX_PARM_HELP_LENGTH);
+    bcmcli_strncat(help_buf, " - ", BCMBAL_APICLI_MAX_PARM_HELP_LENGTH);
+    bcmcli_strncat(help_buf, fld->descr ? fld->descr : fld->name, BCMBAL_APICLI_MAX_PARM_HELP_LENGTH);
+}
+
+/* Allocate CLI parameter array. Set up parm->data */
+static bcmcli_cmd_parm *bcmbal_apicli_parm_alloc(int nparms)
+{
+    uint32_t size;
+    bcmcli_cmd_parm *parms;
+    bcmbal_apicli_parm_data *parm_data;
+    int i;
+
+    /* Allocate parameter table and populate it */
+    size = (sizeof(bcmcli_cmd_parm) + sizeof(bcmbal_apicli_parm_data)) * (nparms + 1);
+    parms = bcmos_calloc(size);
+    if (!parms)
+        return NULL;
+
+    /* Associate parameter_data structs with parameters */
+    parm_data = (bcmbal_apicli_parm_data *)(parms + nparms + 1);
+    for (i = 0; i < nparms; i++)
+    {
+        parms[i].user_data = &parm_data[i];
+    }
+    return parms;
+}
+
+/* clone enum table */
+static bcmcli_enum_val *bcmbal_apicli_clone_enum_table(bcmcli_cmd_parm *parm)
+{
+    bcmcli_enum_val *org_table = parm->enum_table;
+    bcmcli_enum_val *val = org_table;
+    bcmcli_enum_val *clone_table = org_table;
+    int i, n;
+
+    BUG_ON(parm->type != BCMCLI_PARM_ENUM);
+    while (val && val->name)
+    {
+        ++val;
+    }
+    n = val - org_table;
+
+    clone_table = bcmos_calloc(sizeof(bcmcli_enum_val) * (n + 1));
+    if (!clone_table)
+    {
+        return NULL;
+    }
+    for (i = 0; i < n; i++)
+    {
+        clone_table[i].name = org_table[i].name;
+        clone_table[i].val = org_table[i].val;
+    }
+    return clone_table;
+}
+
+
+/* populate CLI parameter(s) from a single property. Can be multiple parameters
+ * if property contains multiple fields.
+ * Returns number of parameters populated >= 0 or error < 0
+ */
+static int bcmbal_apicli_populate_parms_from_property(const bcmbal_apicli_prop_descr *pd, 
+    const bcmbal_apicli_field_descr *fd, const bcmbal_apicli_field_descr *array_fd, uint32_t offset,
+    uint32_t array_fd_offset, bcmcli_cmd_parm *parms, bcmbal_apicli_prop_access_id access_level, uint32_t cmd_flags,
+    char *name_buf0, char *help_buf0)
+{
+    const bcmbal_apicli_type_descr *td = fd ? fd->type : pd->type;
+    uint32_t nf = 0;
+    char name_buf[BCMBAL_APICLI_MAX_PARM_NAME_LENGTH];
+    char help_buf[BCMBAL_APICLI_MAX_PARM_HELP_LENGTH];
+    int rc = 0;
+
+    /* presence masks are not set directly, they are calculated based on other fields */
+    if (fd != NULL && (fd->flags & BCMBAL_APICLI_FIELD_DESCR_FLAGS_PRESENCE_MASK) != 0)
+    {
+        return BCM_ERR_READ_ONLY;
+    }
+
+    /* At top level take name from property */
+    if (td == pd->type)
+    {
+        /* In case there's a global prefix */
+        char *top_name_buf = name_buf0;
+        uint32_t top_name_buf_len = BCMBAL_APICLI_MAX_PARM_NAME_LENGTH;
+        uint32_t prefix_len = strlen(name_buf0);
+        if (prefix_len > 0)
+        {
+            top_name_buf += prefix_len;
+            top_name_buf_len -= prefix_len;
+        }
+
+        bcmcli_strncpy(top_name_buf, pd->cli_name ? pd->cli_name : pd->name, top_name_buf_len);
+        bcmcli_strncpy(help_buf0, pd->descr ? pd->descr : pd->name, BCMBAL_APICLI_MAX_PARM_HELP_LENGTH);
+    }
+
+    /* For read access we only mark whether read property or not. It is not field-by-field operation */
+    if (access_level == BCMBAL_APICLI_PROP_ACCESS_ID_R)
+    {
+        td = &bool_type_descr;
+    }
+
+    /* In case of arrays we should
+     * - check that there is no array in array. It is not supported
+     * - store array type descriptor FFU and replace the "current" type descriptor with element type
+     * - reset offset because for array fields it should be calculated from array base rather than property
+     */
+    if (td->base_type == BCMBAL_APICLI_BASE_TYPE_ID_ARR_DYN || td->base_type == BCMBAL_APICLI_BASE_TYPE_ID_ARR_FIXED)
+    {
+        if (array_fd)
+        {
+            bcmcli_print(
+                current_session,
+                "*** %s in %s: arrays-in-arrays are not supported\n",
+                pd->name,
+                array_fd->name);
+            return BCM_ERR_NOT_SUPPORTED;
+        }
+        /* store array type and fetch element type */
+        array_fd = fd ? fd : (const bcmbal_apicli_field_descr *)pd;
+        if (td->base_type == BCMBAL_APICLI_BASE_TYPE_ID_ARR_DYN)
+        {
+            td = td->x.arr_dyn.elem_type;
+        }
+        else
+        {
+            td = td->x.arr_fixed.elem_type;
+        }
+        array_fd_offset = offset;
+        offset = 0;
+    }
+
+    if (td->base_type == BCMBAL_APICLI_BASE_TYPE_ID_STRUCT)
+    {
+        uint16_t f;
+        if (!td->x.s.num_fields)
+            return 0;
+        BUG_ON(!td->x.s.fields);
+        for (f = 0; f < td->x.s.num_fields; f++)
+        {
+            const bcmbal_apicli_field_descr *fld = &td->x.s.fields[f];
+            bcmbal_apicli_populate_name_help(fld, name_buf0, help_buf0, name_buf, help_buf);
+            rc = bcmbal_apicli_populate_parms_from_property(pd, fld, array_fd, offset+fld->offset,
+                array_fd_offset, &parms[nf], access_level, cmd_flags, name_buf, help_buf);
+            if (rc > 0)
+                nf +=  rc;
+        }
+    }
+    else if (td->base_type == BCMBAL_APICLI_BASE_TYPE_ID_UNION)
+    {
+        /* Union */
+        uint16_t f;
+        const bcmbal_apicli_field_descr *fld;
+        bcmcli_cmd_parm *sel_parm;
+        bcmbal_apicli_parm_data *sel_data;
+        bcmcli_enum_val *e;
+
+        if (!td->x.u.num_common_fields)
+            return 0;
+        BUG_ON(!td->x.u.common_fields);
+
+        /* Populate parameters preceding the union selector */
+        for (f = 0; f < td->x.u.classifier_idx; f++)
+        {
+            fld = &td->x.u.common_fields[f];
+            bcmbal_apicli_populate_name_help(fld, name_buf0, help_buf0, name_buf, help_buf);
+            rc =  bcmbal_apicli_populate_parms_from_property(pd, fld, array_fd,
+                offset+fld->offset, array_fd_offset, &parms[nf], access_level, cmd_flags, name_buf, help_buf);
+            if (rc > 0)
+                nf += rc;
+        }
+
+        /* Now populate parameter for selector */
+        sel_parm = &parms[nf];
+        fld = &td->x.u.common_fields[f];
+        bcmbal_apicli_populate_name_help(fld, name_buf0, help_buf0, name_buf, help_buf);
+        rc = bcmbal_apicli_populate_parms_from_property(pd, fld, array_fd,
+            offset+fld->offset, array_fd_offset, sel_parm, access_level, cmd_flags, name_buf, help_buf);
+        if (rc > 0)
+            nf += rc;
+        /* Clone enum table in order to allow modifying it */
+        if (rc >= 1)
+        {
+            sel_parm->enum_table = bcmbal_apicli_clone_enum_table(sel_parm);
+            if (!sel_parm->enum_table)
+            {
+                rc = BCM_ERR_NOMEM;
+            }
+        }
+
+        /* Now set-up selector */
+        sel_parm->flags |= BCMCLI_PARM_FLAG_SELECTOR;
+        sel_data = sel_parm->user_data;
+        e = sel_parm->enum_table;
+        while (e && e->name && rc >= 0)
+        {
+            fld = &td->x.u.union_fields[e - sel_parm->enum_table];
+            if (fld->type)
+            {
+                int np = bcmbal_apicli_get_num_fields_in_type(fld->type);
+                int i;
+
+                e->parms = bcmbal_apicli_parm_alloc(np);
+                if (!e->parms)
+                {
+                    rc = BCM_ERR_NOMEM;
+                    break;
+                }
+                for (i = 0; i < np; i++)
+                {
+                    bcmbal_apicli_parm_data *data = e->parms[i].user_data;
+                    data->group = sel_data->group;
+                }
+                /* Collapse substructure name */
+                if (fld->type->base_type == BCMBAL_APICLI_BASE_TYPE_ID_STRUCT ||
+                    fld->type->base_type == BCMBAL_APICLI_BASE_TYPE_ID_UNION)
+                {
+                    bcmcli_strncpy(name_buf, name_buf0, sizeof(name_buf));
+                    bcmcli_strncpy(help_buf, help_buf0, sizeof(help_buf));
+                }
+                else
+                {
+                    bcmbal_apicli_populate_name_help(fld, name_buf0, help_buf0, name_buf, help_buf);
+                }
+                rc = bcmbal_apicli_populate_parms_from_property(pd, fld, array_fd,
+                    offset+fld->offset, array_fd_offset, e->parms, access_level, cmd_flags, name_buf, help_buf);
+            }
+            ++e;
+        }
+
+        /* Finally populate parameters following the selector parameter */
+        for (f = td->x.u.classifier_idx + 1; f < td->x.u.num_common_fields && rc >= 0; f++)
+        {
+            fld = &td->x.u.common_fields[f];
+            bcmbal_apicli_populate_name_help(fld, name_buf0, help_buf0, name_buf, help_buf);
+            rc = bcmbal_apicli_populate_parms_from_property(pd, fld, array_fd,
+                offset+fld->offset, array_fd_offset, &parms[nf], access_level, cmd_flags, name_buf, help_buf);
+            if (rc > 0)
+                nf += rc;
+        }
+    }
+    else
+    {
+        /* Finally! Simple type that maps to a single CLI parameter */
+        nf = bcmbal_apicli_populate_parm1(pd, fd, td, array_fd, offset, array_fd_offset,
+            &parms[0], cmd_flags, name_buf0, help_buf0);
+    }
+    return (rc >= 0) ? nf : rc;
+}
+
+/* populate CLI parameter table */
+static int bcmbal_apicli_populate_parms(
+    bcmbal_obj_id o,
+    bcmbal_mgt_group group,
+    uint16_t subgroup,
+    bcmbal_apicli_prop_access_id access_level,
+    bcmcli_cmd_parm *parms,
+    uint32_t cmd_flags,
+    const char *prefix)
+{
+    int nf = 0;
+    int i;
+    bcmos_errno rc = BCM_ERR_OK;
+
+    for (i = 0; rc != BCM_ERR_RANGE; i++)
+    {
+        const bcmbal_apicli_prop_descr *pd;
+        char name_buf[BCMBAL_APICLI_MAX_PARM_NAME_LENGTH] = "";
+        char help_buf[BCMBAL_APICLI_MAX_PARM_HELP_LENGTH] = "";
+
+        strncpy(name_buf, prefix, BCMBAL_APICLI_MAX_PARM_NAME_LENGTH-1);
+        name_buf[BCMBAL_APICLI_MAX_PARM_NAME_LENGTH-1] = 0;
+
+        rc = bcmbal_apicli_object_property(o, group, subgroup, i, &pd);
+        if (rc == BCM_ERR_OK && (pd->access & access_level))
+        {
+            rc = bcmbal_apicli_populate_parms_from_property(pd, NULL, NULL, 0, 0, &parms[nf],
+                access_level, cmd_flags, name_buf, help_buf);
+            if (rc > 0)
+                nf += rc;
+        }
+    }
+    return nf;
+}
+
+
+/* compact selector table. squeeze out values that don't have parameter table attached */
+static void bcmbal_apicli_compact_selector(bcmcli_enum_val *selector, int size)
+{
+    int i, j;
+
+    for (i = 0; i < size; i++)
+    {
+        if (!selector[i].parms)
+        {
+            for ( j = i + 1; j < size && !selector[j].parms; j ++)
+                ;
+            if (j < size)
+            {
+                memcpy(&selector[i], &selector[j], sizeof(bcmcli_enum_val));
+                memset(&selector[j], 0, sizeof(bcmcli_enum_val));
+            }
+            else
+            {
+                memset(&selector[i], 0, sizeof(bcmcli_enum_val));
+            }
+        }
+    }
+}
+
+/* Free CLI parameters. both name and description are allocated dynamically */
+static void bcmbal_apicli_free_parms(bcmcli_cmd_parm *parms)
+{
+    bcmcli_cmd_parm *p = parms;
+
+    while (p->name)
+    {
+        if ((p->flags & BCMCLI_PARM_FLAG_SELECTOR))
+        {
+            /* Remove selector table */
+            bcmcli_enum_val *sel = p->enum_table;
+            if (sel)
+            {
+                bcmcli_enum_val *e = sel;
+                while(e->name)
+                {
+                    if (e->parms)
+                    {
+                        bcmbal_apicli_free_parms(e->parms);
+                    }
+                    ++e;
+                }
+                bcmos_free(sel);
+            }
+        }
+        if (p->description)
+            bcmos_free(BCMBAL_APICLI_CAST_DISCARD_CONST(p->description, void *));
+        if (p->name)
+            bcmos_free(BCMBAL_APICLI_CAST_DISCARD_CONST(p->name, void *));
+        if (p->max_array_size && p->values)
+            bcmos_free(p->values);
+        if (p->value.buffer.start)
+            bcmbal_buf_free(&p->value.buffer);
+
+        ++p;
+    }
+    bcmos_free(parms);
+}
+
+static uint8_t bcmbal_apicli_get_num_cmd_parms(bcmbal_mgt_group group, bcmbal_apicli_flags flags)
+{
+    if (group == BCMBAL_MGT_GROUP_STAT)
+        return 2; /* object + stat ID */
+    else
+        return 1; /* object */
+}
+
+/* Read generated info and add CLI command */
+static bcmos_errno bcmbal_apicli_add(bcmcli_entry *dir, const char *cmd_name, const char *cmd_descr,
+    bcmbal_mgt_group group, bcmbal_apicli_prop_access_id access_level, bcmcli_cmd_cb cmd_handler, 
+    bcmbal_apicli_flags flags)
+{
+    bcmcli_cmd_extra_parm cmd_extras = { .free_parms = bcmbal_apicli_free_parms };
+    bcmcli_cmd_parm *cmd_parms;
+    bcmcli_enum_val *obj_selector;
+    bcmbal_obj_id o;
+    bcmos_errno rc = BCM_ERR_OK;
+    uint32_t cmd_flags = 0;
+    uint8_t num_cmd_parms = bcmbal_apicli_get_num_cmd_parms(group, flags);
+    int n_obj;
+    int i;
+
+    /* Command flags: parameters in the following groups are optional */
+    if (group == BCMBAL_MGT_GROUP_CFG || group == BCMBAL_MGT_GROUP_STAT || group == BCMBAL_MGT_GROUP_AUTO_CFG)
+        cmd_flags = BCMCLI_PARM_FLAG_OPTIONAL;
+
+    /* command parameters are:
+     * - object_name (selector)
+     * - object_key_fields
+     * - object_per_group_fields filtered by access
+     * Therefore, there is 1 top-level enum parameter (object type) with per-value parameter tables
+     * In the case of operations or proxy messages, there is also a top-level enum parameter for the oper/proxy name
+     */
+
+    /* Allocate enum table based on max number of objects. Will be compacted in the end */
+    cmd_parms = bcmos_calloc(sizeof(bcmcli_cmd_parm) * (num_cmd_parms + 1));
+    if (!cmd_parms)
+        return BCM_ERR_NOMEM;
+
+    /* Allocate enough space for all object entries as well as a terminator entry (which is left NULL) */
+    obj_selector = bcmos_calloc(sizeof(bcmcli_enum_val) * (BCMBAL_OBJ_ID__NUM_OF + 1));
+    if (!obj_selector)
+        goto nomem_cleanup;
+
+    /* Allocate parameter table */
+    n_obj = 0;
+    for (o = 0; o < BCMBAL_OBJ_ID__NUM_OF; o++)
+    {
+        uint32_t nkeyfields = 0;
+        uint32_t nfields = 0;
+        uint32_t nfilterfields = 0;
+        uint32_t size;
+        uint16_t s;
+        uint16_t subgroup_count = bcmbal_apicli_get_subgroup_count(o, group);
+        bcmcli_enum_val *sub_selector;
+
+        if (subgroup_count == 0)
+            continue;
+
+        obj_selector[n_obj].val = o;
+        rc = bcmbal_apicli_object_name(o, &obj_selector[n_obj].name, NULL);
+        if (rc)
+            continue;
+
+        /* Get number of key fields and save it */
+        if (group == BCMBAL_MGT_GROUP_AUTO_CFG)
+        {
+            nkeyfields = 0;
+        }
+        else
+        {
+            bcmbal_apicli_get_num_fields_in_group(
+                o, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_APICLI_PROP_ACCESS_ID_W, &nkeyfields);
+        }
+
+        /* Allocate subgroup enum table */
+        sub_selector = bcmos_calloc(sizeof(bcmcli_enum_val) * (subgroup_count + 1));
+        if (!sub_selector)
+            goto nomem_cleanup;
+
+        /* Allocate single subgroup command parameter */
+        size = sizeof(bcmcli_cmd_parm) * 2;
+        obj_selector[n_obj].parms = bcmos_calloc(size);
+        if (!obj_selector[n_obj].parms)
+        {
+            bcmos_free(sub_selector);
+            goto nomem_cleanup;
+        }
+
+        /* Setup single subgroup command parameter */
+        obj_selector[n_obj].parms[0].type = BCMCLI_PARM_ENUM;
+        obj_selector[n_obj].parms[0].flags = BCMCLI_PARM_FLAG_SELECTOR;
+        obj_selector[n_obj].parms[0].enum_table = sub_selector;
+        rc = bcmbal_apicli_copy_parm_name(&obj_selector[n_obj].parms[0],
+                                 "sub",
+                                 "Subgroup (specific operation / proxy msg)");
+        if (rc)
+            goto nomem_cleanup;
+
+        for (s = 0; s < subgroup_count; ++s)
+        {
+            const char *sub_name;
+            bcmcli_cmd_parm *parm_ptr;
+
+            /* Get name of specific subgroup */
+            rc = bcmbal_apicli_object_subgroup_name(o, group, s, &sub_name, NULL);
+            if (rc)
+                continue;
+
+            /* Setup entry in subgroup enum table */
+            sub_selector[s].name = sub_name;
+            sub_selector[s].val = s;
+
+            /* Get number of group fields */
+            rc = bcmbal_apicli_get_num_fields_in_group(o, group, s, access_level, &nfields);
+            if (rc)
+                continue;
+
+            if ((flags & BCMBAL_APICLI_FLAGS_IGNORE_FIELDS) != BCMBAL_APICLI_FLAGS_NONE)
+            {
+                nfilterfields = 0;
+                nfields = 0;
+            }
+
+            /* Allocate parameter table and populate it */
+            sub_selector[s].parms = bcmbal_apicli_parm_alloc(nfields + nkeyfields + nfilterfields);
+            if (!sub_selector[s].parms)
+            {
+                rc = BCM_ERR_NOMEM;
+                goto nomem_cleanup;
+            }
+            for (i = 0; i < nkeyfields + nfields + nfilterfields; i++)
+            {
+                bcmbal_apicli_parm_data *parm_data = sub_selector[s].parms[i].user_data;
+                parm_data->group = (i < nkeyfields) ? BCMBAL_MGT_GROUP_KEY : group;
+            }
+
+            parm_ptr = sub_selector[s].parms;
+            if (nkeyfields)
+            {
+                rc = bcmbal_apicli_populate_parms(
+                    o, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_APICLI_PROP_ACCESS_ID_W, parm_ptr, 0, "");
+                if (rc < 0)
+                    goto nomem_cleanup;
+                parm_ptr += rc;
+            }
+            if (nfilterfields)
+            {
+                rc = bcmbal_apicli_populate_parms(
+                    o, group, s, BCMBAL_APICLI_PROP_ACCESS_ID_RW, parm_ptr, cmd_flags, "filter.");
+                if (rc < 0)
+                    goto nomem_cleanup;
+                parm_ptr += rc;
+            }
+            if (nfields)
+            {
+                rc = bcmbal_apicli_populate_parms(o, group, s, access_level, parm_ptr, cmd_flags, "");
+                if (rc < 0)
+                    goto nomem_cleanup;
+                parm_ptr += rc;
+            }
+        }
+
+        /* Compact sub_selector enum. Removes holes (values without parameter table) */
+        bcmbal_apicli_compact_selector(sub_selector, subgroup_count);
+
+        /* If the group type doesn't support subgroups, remove the subgroup param entry */
+        if (group == BCMBAL_MGT_GROUP_CFG || group == BCMBAL_MGT_GROUP_STAT || group == BCMBAL_MGT_GROUP_AUTO_CFG)
+        {
+            /* Free the memory associated with the (single) subgroup param */
+            bcmos_free(BCMBAL_APICLI_CAST_DISCARD_CONST(obj_selector[n_obj].parms[0].name, void *));
+            bcmos_free(BCMBAL_APICLI_CAST_DISCARD_CONST(obj_selector[n_obj].parms[0].description, void *));
+            bcmos_free(obj_selector[n_obj].parms);
+            /* Assign the subgroup params to the root object params */
+            obj_selector[n_obj].parms = sub_selector[0].parms;
+            bcmos_free(sub_selector);
+        }
+
+        ++n_obj; /* number of configured objects */
+    }
+
+    /* Compact obj_selector enum. Removes holes (values without parameter table) */
+    bcmbal_apicli_compact_selector(obj_selector, BCMBAL_OBJ_ID__NUM_OF);
+
+    /* Add a 'clear on read' to stats group */
+    if (group == BCMBAL_MGT_GROUP_STAT)
+    {
+        cmd_parms[0].type = BCMCLI_PARM_ENUM;
+        cmd_parms[0].enum_table = bool_enum;
+        rc = bcmbal_apicli_copy_parm_name(&cmd_parms[0], "clear", "clear on read");
+        if (rc)
+            goto nomem_cleanup;
+    }
+
+    /* We are ready to add this command */
+    cmd_parms[num_cmd_parms - 1].type = BCMCLI_PARM_ENUM;
+    cmd_parms[num_cmd_parms - 1].flags = BCMCLI_PARM_FLAG_SELECTOR;
+    cmd_parms[num_cmd_parms - 1].enum_table = obj_selector;
+    rc = bcmbal_apicli_copy_parm_name(&cmd_parms[num_cmd_parms - 1], "object", "Object Type");
+    if (rc)
+        goto nomem_cleanup;
+    rc = bcmcli_cmd_add(dir, cmd_name, cmd_handler, cmd_descr,
+        (access_level == BCMBAL_APICLI_PROP_ACCESS_ID_W) ? BCMCLI_ACCESS_ADMIN : BCMCLI_ACCESS_GUEST,
+        &cmd_extras, cmd_parms);
+    if (rc)
+        goto nomem_cleanup;
+    return 0;
+
+nomem_cleanup:
+    if (obj_selector)
+    {
+        for (o = 0; o < BCMBAL_OBJ_ID__NUM_OF; o++)
+        {
+            if (obj_selector[o].parms)
+                bcmbal_apicli_free_parms(obj_selector[o].parms);
+        }
+        bcmos_free(obj_selector);
+    }
+    bcmos_free(cmd_parms);
+    return rc;
+}
+
+static bcmcli_session *bcmbal_apicli_log;
+static FILE *bcmbal_apicli_log_file;
+
+static int bcmbal_apicli_log_write_cb(bcmcli_session *session, const char *buf, uint32_t size)
+{
+    if (bcmbal_apicli_log_file == NULL || buf == NULL)
+        return BCM_ERR_INTERNAL;
+    fwrite(buf, 1, size, bcmbal_apicli_log_file);
+    fflush(bcmbal_apicli_log_file);
+    return BCM_ERR_OK;
+}
+
+/* Enable/disable API logging
+ *       BCMCLI_MAKE_PARM("file", "Log file. Use \"-\" to disable logging", BCMCLI_PARM_STRING, 0));
+ */
+static bcmos_errno bcmbal_apicli_log_handler(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    const char *fname = parm[0].value.string;
+    bcmcli_session_parm session_params =
+    {
+        .write = bcmbal_apicli_log_write_cb,
+        .name = "api_log"
+    };
+    bcmos_errno rc;
+    time_t start_time;
+
+    /* Close existing log session if any */
+    if (bcmbal_apicli_log)
+    {
+        bcmcli_log_set(BCMCLI_LOG_NONE, NULL);
+        bcmcli_session_close(bcmbal_apicli_log);
+        fclose(bcmbal_apicli_log_file);
+        bcmbal_apicli_log = NULL;
+        bcmbal_apicli_log_file = NULL;
+    }
+
+    if (!strcmp(fname, "-"))
+        return BCM_ERR_OK;
+
+    /* Starting a new log session */
+    bcmbal_apicli_log_file = fopen(fname, "a");
+    if (bcmbal_apicli_log_file == NULL)
+    {
+        bcmcli_print(session, "Can't open file %s for logging\n", fname);
+        return BCM_ERR_PARM;
+    }
+    rc = bcmcli_session_open_user(&session_params, &bcmbal_apicli_log);
+    if (rc)
+    {
+        fclose(bcmbal_apicli_log_file);
+        bcmbal_apicli_log_file = NULL;
+        bcmcli_print(session, "Can't open log session. Error %s\n", bcmos_strerror(rc));
+        return rc;
+    }
+    time(&start_time);
+    bcmcli_log_set(BCMCLI_LOG_C_COMMENT, bcmbal_apicli_log);
+    bcmcli_log("/* API logging session started. %s */\n", ctime(&start_time));
+    return BCM_ERR_OK;
+}
+
+static void bcmbal_apicli_find_del_cmd(bcmcli_entry *dir, const char *cmd_name)
+{
+    bcmcli_entry *cmd;
+    cmd = bcmcli_cmd_find(dir, cmd_name);
+    if (cmd)
+    {
+        bcmcli_token_destroy(cmd);
+    }
+}
+
+/* Unregisters commands and directories */
+void bcmbal_apicli_del_commands(bcmcli_session *session, bcmcli_entry *api_dir)
+{
+    bcmbal_apicli_find_del_cmd(api_dir, "set");
+    bcmbal_apicli_find_del_cmd(api_dir, "get");
+    bcmbal_apicli_find_del_cmd(api_dir, "clear");
+    bcmbal_apicli_find_del_cmd(api_dir, "stat");
+    bcmbal_apicli_find_del_cmd(api_dir, "objects");
+    bcmbal_apicli_find_del_cmd(api_dir, "log");
+}
+
+/* Registers commands and directories */
+bcmos_errno bcmbal_apicli_add_commands(bcmcli_session *session, bcmcli_entry *api_dir)
+{
+    bcmos_errno rc;
+
+    current_session = session;
+
+    /* Now generate and add commands */
+    rc = bcmbal_apicli_add(api_dir, "set", "Set object configuration", BCMBAL_MGT_GROUP_CFG,
+        BCMBAL_APICLI_PROP_ACCESS_ID_W, bcmbal_apicli_set_handler, BCMBAL_APICLI_FLAGS_NONE);
+    rc = rc ? rc : bcmbal_apicli_add(api_dir, "get", "Get object configuration", BCMBAL_MGT_GROUP_CFG,
+        BCMBAL_APICLI_PROP_ACCESS_ID_R, bcmbal_apicli_get_handler, BCMBAL_APICLI_FLAGS_NONE);
+    rc = rc ? rc : bcmbal_apicli_add(api_dir, "clear", "Clear object configuration", BCMBAL_MGT_GROUP_CFG,
+        BCMBAL_APICLI_PROP_ACCESS_ID_R, bcmbal_apicli_clear_handler, BCMBAL_APICLI_FLAGS_IGNORE_FIELDS);
+    rc = rc ? rc : bcmbal_apicli_add(api_dir, "stat", "Get statistics", BCMBAL_MGT_GROUP_STAT,
+        BCMBAL_APICLI_PROP_ACCESS_ID_R, bcmbal_apicli_stat_handler, BCMBAL_APICLI_FLAGS_NONE);
+
+    /* List all system objects */
+    rc = rc ? rc : bcmcli_cmd_add(api_dir, "objects", bcmbal_apicli_objects_handler,
+        "Object Types", BCMCLI_ACCESS_GUEST, NULL, NULL);
+
+    BCMCLI_MAKE_CMD(api_dir, "log", "Log API calls", bcmbal_apicli_log_handler,
+        BCMCLI_MAKE_PARM("file", "Log file. Use \"-\" to disable logging", BCMCLI_PARM_STRING, 0));
+
+    return rc;
+}
diff --git a/bal_release/src/lib/libbalapicli/bal_api_cli.h b/bal_release/src/lib/libbalapicli/bal_api_cli.h
new file mode 100644
index 0000000..2acc2a7
--- /dev/null
+++ b/bal_release/src/lib/libbalapicli/bal_api_cli.h
@@ -0,0 +1,40 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef BCMBAL_APICLI_H_
+#define BCMBAL_APICLI_H_
+
+#include <bcmcli.h>
+
+void bcmbal_apicli_del_commands(bcmcli_session *session, bcmcli_entry *api_dir);
+
+/* Add BAL CLI commands */
+bcmos_errno bcmbal_apicli_add_commands(bcmcli_session *session, bcmcli_entry *api_dir);
+
+#endif /* BCMBAL_APICLI_H_ */
diff --git a/bal_release/src/lib/libbalapicli/bal_api_cli_dump.c b/bal_release/src/lib/libbalapicli/bal_api_cli_dump.c
new file mode 100644
index 0000000..5a34961
--- /dev/null
+++ b/bal_release/src/lib/libbalapicli/bal_api_cli_dump.c
@@ -0,0 +1,823 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#include <bcmos_system.h>
+#include <bal_obj.h>
+#include <bcmcli.h>
+#include "bal_api_cli_helpers.h"
+
+typedef enum
+{
+    BCMBAL_APICLI_OUTPUT_STYLE_STD,
+    BCMBAL_APICLI_OUTPUT_STYLE_C_INIT
+} bcmbal_apicli_output_style;
+
+typedef struct
+{
+    const bcmbal_apicli_type_descr *type;
+    void *data;
+    uint8_t bit;
+} bcmbal_apicli_presence_mask_info;
+
+static bcmos_errno bcmbal_apicli_dump_array(
+    bcmcli_session *session,
+    const bcmbal_apicli_type_descr *td,
+    void *data,
+    uint32_t size,
+    const char *name,
+    bcmbal_apicli_output_style style,
+    const bcmbal_apicli_presence_mask_info *presence_mask);
+
+static bcmos_errno bcmbal_apicli_read_snum(
+    bcmcli_session *session, const bcmbal_apicli_type_descr *td, void *data, int64_t *n)
+{
+    switch (td->size)
+    {
+    case 1:
+    {
+        int8_t n1 = *(int8_t *)data;
+        *n = n1;
+        break;
+    }
+    case 2:
+    {
+        int16_t n2 = *(int16_t *)data;
+        *n = n2;
+        break;
+    }
+    case 4:
+    {
+        int32_t n4 = *(int32_t *)data;
+        *n = n4;
+        break;
+    }
+    case 8:
+    {
+        memcpy(n, data, sizeof(*n));
+        break;
+    }
+    default:
+        bcmcli_print(session, "*** number size %u is not supported\n", td->size);
+        return BCM_ERR_NOT_SUPPORTED;
+    }
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno bcmbal_apicli_read_unum(
+    bcmcli_session *session, const bcmbal_apicli_type_descr *td, void *data, uint64_t *n)
+{
+    switch (td->size)
+    {
+    case 1:
+    {
+        uint8_t n1 = *(uint8_t *)data;
+        *n = n1;
+        break;
+    }
+    case 2:
+    {
+        uint16_t n2 = *(uint16_t *)data;
+        *n = n2;
+        break;
+    }
+    case 4:
+    {
+        uint32_t n4 = *(uint32_t *)data;
+        *n = n4;
+        break;
+    }
+    case 8:
+    {
+        memcpy(n, data, sizeof(*n));
+        break;
+    }
+    default:
+        bcmcli_print(session, "*** number size %u is not supported\n", td->size);
+        return BCM_ERR_NOT_SUPPORTED;
+    }
+    return BCM_ERR_OK;
+}
+
+static void bcmbal_apicli_strcat_upper(char *dest, uint32_t dest_len, const char *src, uint32_t src_len)
+{
+    uint32_t src_idx;
+    uint32_t dest_idx;
+
+    for (dest_idx = 0; dest_idx < dest_len - 1; ++dest_idx)
+    {
+        if (dest[dest_idx] == '\0')
+        {
+            break;
+        }
+    }
+
+    for (src_idx = 0; src_idx < src_len && dest_idx < dest_len - 1; ++src_idx, ++dest_idx)
+    {
+        dest[dest_idx] = src[src_idx];
+        if (dest[dest_idx] >= 'a' && dest[dest_idx] <= 'z')
+        {
+            dest[dest_idx] = 'A' + (dest[dest_idx] - 'a');
+        }
+    }
+
+    dest[dest_idx] = '\0';
+}
+
+static const char *bcmbal_apicli_get_c_enum_id(const bcmbal_apicli_type_descr *td, const char *name)
+{
+    static char full_name_buf[256];
+    full_name_buf[0] = '\0';
+    bcmbal_apicli_strcat_upper(full_name_buf, sizeof(full_name_buf), td->name, strlen(td->name));
+    bcmbal_apicli_strcat_upper(full_name_buf, sizeof(full_name_buf), "_", 1);
+    bcmbal_apicli_strcat_upper(full_name_buf, sizeof(full_name_buf), name, strlen(name));
+    return full_name_buf;
+}
+
+static bcmos_errno bcmbal_apicli_dump_simple_data_type(
+    bcmcli_session *session,
+    const bcmbal_apicli_type_descr *td,
+    void *data,
+    const char *name,
+    bcmbal_apicli_output_style style)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+
+    switch (td->base_type)
+    {
+    case BCMBAL_APICLI_BASE_TYPE_ID_SNUM:       /* signed number */
+    {
+        int64_t n = 0;
+        rc = bcmbal_apicli_read_snum(session, td, data, &n);
+        bcmcli_print(session, "%lld", (long long)n);
+        break;
+    }
+
+    case BCMBAL_APICLI_BASE_TYPE_ID_UNUM:       /* unsigned number */
+    {
+        uint64_t n = 0;
+        rc = bcmbal_apicli_read_unum(session, td, data, &n);
+        bcmcli_print(session, "%llu", (unsigned long long)n);
+        break;
+    }
+
+    case BCMBAL_APICLI_BASE_TYPE_ID_UNUM_HEX:   /* unsigned number printed in hex */
+    {
+        uint64_t n = 0;
+        rc = bcmbal_apicli_read_unum(session, td, data, &n);
+        bcmcli_print(session, "0x%llx", (unsigned long long)n);
+        break;
+    }
+
+    case BCMBAL_APICLI_BASE_TYPE_ID_FLOAT:      /* floating-point number */
+    {
+        if (td->size == sizeof(float))
+        {
+            bcmcli_print(session, "%f", *(float *)data);
+        }
+        else if (td->size == sizeof(double))
+        {
+            bcmcli_print(session, "%f", *(double *)data);
+        }
+        else
+        {
+            bcmcli_print(session, "*** floating-point number of width %u is not supported\n", td->size);
+            rc = BCM_ERR_NOT_SUPPORTED;
+        }
+        break;
+    }
+
+    case BCMBAL_APICLI_BASE_TYPE_ID_BOOL:
+    {
+        const char *no_str = style == BCMBAL_APICLI_OUTPUT_STYLE_C_INIT ? "BCMOS_FALSE" : "no";
+        const char *yes_str = style == BCMBAL_APICLI_OUTPUT_STYLE_C_INIT ? "BCMOS_TRUE" : "yes";
+        uint64_t n = 0;
+        rc = bcmbal_apicli_read_unum(session, td, data, &n);
+        bcmcli_print(session, "%s", n == 0 ? no_str : yes_str);
+        break;
+    }
+
+    case BCMBAL_APICLI_BASE_TYPE_ID_STRING:     /* string */
+    {
+        if (td->size == 0)
+        {
+            bcmcli_print(session, "\"%s\"", (char *)data);
+        }
+        else
+        {
+            /* we know the size of the buffer */
+            bcmcli_print(session, "\"%.*s\"", td->size, (char *)data);
+        }
+        break;
+    }
+
+    case BCMBAL_APICLI_BASE_TYPE_ID_IPV4:       /* IPv4 address */
+    {
+        uint32_t ip;
+        memcpy(&ip, data, sizeof(ip));
+        bcmcli_print(
+            session,
+            style == BCMBAL_APICLI_OUTPUT_STYLE_C_INIT ? "{ %d,%d,%d,%d }" : "%d.%d.%d.%d",
+            (ip >> 24) & 0xff, (ip >> 16) & 0xff, (ip >> 8) & 0xff, ip & 0xff);
+        break;
+    }
+
+    case BCMBAL_APICLI_BASE_TYPE_ID_MAC:        /* MAC address */
+    {
+        bcmos_mac_address mac;
+        memcpy(mac.u8, data, sizeof(mac.u8));
+        bcmcli_print(
+            session,
+            style == BCMBAL_APICLI_OUTPUT_STYLE_C_INIT ?
+                "{{ 0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x }}" :
+                "%02x:%02x:%02x:%02x:%02x:%02x",
+            mac.u8[0], mac.u8[1], mac.u8[2], mac.u8[3], mac.u8[4], mac.u8[5]);
+        break;
+    }
+
+    case BCMBAL_APICLI_BASE_TYPE_ID_ENUM:       /* enum */
+    {
+        uint64_t n = 0;
+        const char *s;
+        rc = bcmbal_apicli_read_unum(session, td, data, &n);
+        BUG_ON(td->x.e == NULL);
+        s = bcmcli_enum_stringval(td->x.e, (long)n);
+        if (style == BCMBAL_APICLI_OUTPUT_STYLE_C_INIT)
+        {
+            s = bcmbal_apicli_get_c_enum_id(td, s);
+        }
+        bcmcli_print(session, "%s", s);
+        break;
+    }
+
+    case BCMBAL_APICLI_BASE_TYPE_ID_ENUM_MASK:
+    {
+        uint64_t n = 0;
+        const char *s;
+        const char *none = NULL;
+        bcmcli_enum_val *value = td->x.e;
+        bcmos_bool first = BCMOS_TRUE;
+        BUG_ON(value == NULL);
+        rc = bcmbal_apicli_read_unum(session, td, data, &n);
+        while (value->name != NULL)
+        {
+            if (value->val == 0)
+            {
+                none = value->name;
+            }
+            if ((value->val & n) != 0)
+            {
+                s = value->name;
+                if (style == BCMBAL_APICLI_OUTPUT_STYLE_C_INIT)
+                {
+                    s = bcmbal_apicli_get_c_enum_id(td, s);
+                }
+                bcmcli_print(session, "%s%s", first ? "" : (style == BCMBAL_APICLI_OUTPUT_STYLE_C_INIT ? "|" : BCMCLI_ENUM_MASK_DEL_STR), s);
+                first = BCMOS_FALSE;
+                n -= value->val;
+            }
+            ++value;
+        }
+        if (first)
+        {
+            bcmcli_print(session, "%s", (style == BCMBAL_APICLI_OUTPUT_STYLE_C_INIT) || (NULL == none) ? "0" : none);
+        }
+        break;
+    }
+
+    default:
+        bcmcli_print(session, "*** type %d is not supported\n", (int)td->base_type);
+        rc = BCM_ERR_NOT_SUPPORTED;
+        break;
+    }
+    return rc;
+}
+
+
+/* calculate number of enum values */
+static int bcmbal_apicli_get_num_enum_vals(const bcmcli_enum_val *vals)
+{
+    const bcmcli_enum_val *v = vals;
+    while (v && v->name)
+    {
+        ++v;
+    }
+    return (v - vals);
+}
+
+/* helper function to skip the "u." in front of union field names */
+static inline const char *bcmbal_apicli_skip_union_prefix(const char *name)
+{
+    if (name[0] == 'u' && name[1] == '.')
+    {
+        name += 2;
+    }
+    return name;
+}
+
+static bcmos_bool bcmbal_apicli_is_value_set(
+    bcmcli_session *session,
+    const bcmbal_apicli_presence_mask_info *presence_mask)
+{
+    uint64_t pm_value_num = 0;
+    if (!presence_mask || !presence_mask->type)
+    {
+        /* no presence mask - all values are implicitly set */
+        return BCMOS_TRUE;
+    }
+    bcmbal_apicli_read_unum(session, presence_mask->type, presence_mask->data, &pm_value_num);
+    return ((pm_value_num >> presence_mask->bit) & 1) != 0;
+}
+
+/* Dump data type */
+static bcmos_errno bcmbal_apicli_dump_data_type(
+    bcmcli_session *session,
+    const bcmbal_apicli_type_descr *td,
+    void *data,
+    const char *name,
+    uint32_t num_entries,
+    uint32_t entry_size,
+    bcmbal_apicli_output_style style,
+    const bcmbal_apicli_presence_mask_info *presence_mask)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+
+    switch (td->base_type)
+    {
+        case BCMBAL_APICLI_BASE_TYPE_ID_STRUCT:
+        {
+            uint16_t f;
+            char full_name[BCMBAL_APICLI_MAX_PARM_NAME_LENGTH];
+            if (!td->x.s.num_fields)
+                return 0;
+            BUG_ON(!td->x.s.fields);
+            if (style == BCMBAL_APICLI_OUTPUT_STYLE_C_INIT)
+            {
+                bcmcli_print(session, "{ ");
+            }
+            for (f = 0; f < td->x.s.num_fields; f++)
+            {
+                const bcmbal_apicli_field_descr *fld = &td->x.s.fields[f];
+                void *fdata = (void *)((long)data + fld->offset);
+                bcmbal_apicli_presence_mask_info field_pm = {};
+                if (((td->x.s.fields[0].flags & BCMBAL_APICLI_FIELD_DESCR_FLAGS_PRESENCE_MASK) != 0) &&
+                    style != BCMBAL_APICLI_OUTPUT_STYLE_C_INIT)
+                {
+                    /* If the struct has a presence mask, skip the presence mask field itself, then record the position
+                     * of the presence mask so we can check it later for each entry. */
+                    if (f == 0)
+                    {
+                        continue;
+                    }
+
+                    field_pm.type = td->x.s.fields[0].type;
+                    field_pm.data = (uint8_t *)data + td->x.s.fields[0].offset;
+                    field_pm.bit = (uint8_t)(f - 1);
+                }
+                if (style == BCMBAL_APICLI_OUTPUT_STYLE_C_INIT && f > 0)
+                {
+                    bcmcli_print(session, ", ");
+                }
+                bcmcli_strncpy(full_name, name, sizeof(full_name));
+                bcmcli_strncat(full_name, ".", sizeof(full_name));
+                bcmcli_strncat(full_name, fld->name, sizeof(full_name));
+                rc = bcmbal_apicli_dump_data_type(session, fld->type, fdata, full_name, num_entries, entry_size, style, &field_pm);
+            }
+            if (style == BCMBAL_APICLI_OUTPUT_STYLE_C_INIT)
+            {
+                bcmcli_print(session, " }");
+            }
+            break;
+        }
+
+        case BCMBAL_APICLI_BASE_TYPE_ID_UNION:
+        {
+            /* Print fields up to selector, then selector, then selected sub-structure */
+            uint16_t f;
+            char full_name[BCMBAL_APICLI_MAX_PARM_NAME_LENGTH];
+            const bcmbal_apicli_field_descr *fld;
+            void *fdata;
+            int64_t selector_val = 0;
+            int num_union_vals;
+
+            if (!td->x.u.num_common_fields)
+                return 0;
+            BUG_ON(!td->x.u.common_fields);
+            if (style == BCMBAL_APICLI_OUTPUT_STYLE_C_INIT)
+            {
+                bcmcli_print(session, "{ ");
+            }
+            /* Common fields, including selector */
+            for (f = 0; f <= td->x.u.classifier_idx && !rc; f++)
+            {
+                fld = &td->x.u.common_fields[f];
+                fdata = (void *)((long)data + fld->offset);
+
+                bcmcli_strncpy(full_name, name, sizeof(full_name));
+                if (fld->name && strlen(fld->name))
+                {
+                    bcmcli_strncat(full_name, ".", sizeof(full_name));
+                    bcmcli_strncat(full_name, fld->name, sizeof(full_name));
+                }
+                rc = bcmbal_apicli_dump_data_type(session, fld->type, fdata, full_name, num_entries, entry_size, style, presence_mask);
+                if (f == td->x.u.classifier_idx)
+                {
+                    rc = rc ? rc : bcmbal_apicli_read_snum(session, fld->type, fdata, &selector_val);
+                }
+                if (style == BCMBAL_APICLI_OUTPUT_STYLE_C_INIT)
+                {
+                    bcmcli_print(session, ", ");
+                }
+            }
+            if (rc)
+            {
+                bcmcli_print(session, "***internal error when dumping field %s\n",
+                    td->x.u.common_fields[f].name);
+                return rc;
+            }
+
+            num_union_vals = bcmbal_apicli_get_num_enum_vals(td->x.u.common_fields[td->x.u.classifier_idx].type->x.e);
+            if ((unsigned)selector_val >= num_union_vals)
+            {
+                bcmcli_print(session, "***invalid union selector value %lld\n", (long long)selector_val);
+                return BCM_ERR_INTERNAL;
+            }
+
+            /* Common fields following selector */
+            for (; f < td->x.u.num_common_fields; f++)
+            {
+                fld = &td->x.u.common_fields[f];
+                fdata = (void *)((long)data + fld->offset);
+
+                if (style == BCMBAL_APICLI_OUTPUT_STYLE_C_INIT)
+                {
+                    bcmcli_print(session, ", ");
+                }
+                bcmcli_strncpy(full_name, name, sizeof(full_name));
+                if (fld->name && strlen(fld->name))
+                {
+                    bcmcli_strncat(full_name, ".", sizeof(full_name));
+                    bcmcli_strncat(full_name, fld->name, sizeof(full_name));
+                }
+                rc = bcmbal_apicli_dump_data_type(session, fld->type, fdata, full_name, num_entries, entry_size, style, presence_mask);
+            }
+
+            /* Selected field */
+            fld = &td->x.u.union_fields[selector_val];
+            if (fld->type)
+            {
+                if (style == BCMBAL_APICLI_OUTPUT_STYLE_C_INIT)
+                {
+                    bcmcli_print(session, "{ .%s = ", bcmbal_apicli_skip_union_prefix(fld->name));
+                }
+                fdata = (void *)((long)data + fld->offset);
+
+                bcmcli_strncpy(full_name, name, sizeof(full_name));
+                if (fld->name && strlen(fld->name))
+                {
+                    bcmcli_strncat(full_name, ".", sizeof(full_name));
+                    bcmcli_strncat(full_name, fld->name, sizeof(full_name));
+                }
+                rc = bcmbal_apicli_dump_data_type(session, fld->type, fdata, full_name, num_entries, entry_size, style, presence_mask);
+                if (style == BCMBAL_APICLI_OUTPUT_STYLE_C_INIT)
+                {
+                    bcmcli_print(session, " }");
+                }
+            }
+            if (style == BCMBAL_APICLI_OUTPUT_STYLE_C_INIT)
+            {
+                bcmcli_print(session, " }");
+            }
+            break;
+        }
+
+        case BCMBAL_APICLI_BASE_TYPE_ID_ARR_FIXED: /* fixed array */
+        {
+            rc = bcmbal_apicli_dump_array(session, td->x.arr_fixed.elem_type, data, td->x.arr_fixed.size, name, style, presence_mask);
+            break;
+        }
+
+        case BCMBAL_APICLI_BASE_TYPE_ID_ARR_DYN:   /* dynamic array that should be printed as buffer */
+        {
+            /* Read length */
+            uint32_t array_size;
+            long base_ptr;
+
+            switch (td->x.arr_dyn.len_size )
+            {
+                case 1: array_size = *(uint8_t *)data; break;
+                case 2: array_size = *(uint16_t *)data; break;
+                case 4: array_size = *(uint32_t *)data; break;
+                default:
+                    bcmcli_print(session,
+                        "*** %s: dyn array len_size %u is not supported\n", name, td->x.arr_dyn.len_size);
+                    return BCM_ERR_NOT_SUPPORTED;
+            }
+            base_ptr = BCMOS_ROUND_UP((long)data + td->x.arr_dyn.len_size, sizeof(void *));
+            BUG_ON(!base_ptr);
+            data = *(void **)base_ptr;
+            rc = bcmbal_apicli_dump_array(session, td->x.arr_dyn.elem_type, data, array_size, name, style, presence_mask);
+            break;
+        }
+
+        default:
+        {
+            /* Finally! Simple type that maps to a single CLI parameter */
+            int n;
+            bcmbal_apicli_presence_mask_info local_pm;
+
+            /* If we have a single value and that value is not included in the presence mask, just skip it entirely */
+            if (num_entries == 1 && !bcmbal_apicli_is_value_set(session, presence_mask))
+            {
+                break;
+            }
+
+            if (style != BCMBAL_APICLI_OUTPUT_STYLE_C_INIT)
+            {
+                if (name)
+                {
+                    bcmcli_print(session, "   %s=", name);
+                }
+                if (!num_entries)
+                {
+                    bcmcli_print(session, BCMCLI_ARRAY_EMPTY);
+                }
+            }
+
+            /* Dump simple value or array of simple values */
+            local_pm = presence_mask ? *presence_mask : (bcmbal_apicli_presence_mask_info){};
+            for (n = 0; n < num_entries; n++)
+            {
+                if (n)
+                {
+                    bcmcli_print(session, ",");
+                }
+
+                /* If we have a presence mask, make sure to print a special token if the value is unset */
+                if (bcmbal_apicli_is_value_set(session, &local_pm))
+                {
+                    rc = bcmbal_apicli_dump_simple_data_type(session, td, data, name, style);
+                }
+                else
+                {
+                    bcmcli_print(session, BCMCLI_PARM_NO_VALUE);
+                }
+                
+                data = (void *)((long)data + entry_size);
+                local_pm.data = (void *)((long)local_pm.data + entry_size);
+            }
+            if (style != BCMBAL_APICLI_OUTPUT_STYLE_C_INIT)
+            {
+                bcmcli_print(session, "\n");
+            }
+            break;
+        }
+    }
+    return rc;
+}
+
+/* Dump array */
+static bcmos_errno bcmbal_apicli_dump_array(
+    bcmcli_session *session,
+    const bcmbal_apicli_type_descr *td,
+    void *data,
+    uint32_t size,
+    const char *name,
+    bcmbal_apicli_output_style style,
+    const bcmbal_apicli_presence_mask_info *presence_mask)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+
+    /* Print as buffer or element by element ? */
+    if (style == BCMBAL_APICLI_OUTPUT_STYLE_C_INIT)
+    {
+        bcmcli_print(session, "{ ");
+        rc = bcmbal_apicli_dump_data_type(session, td, data, name, size, td->size, style, presence_mask);
+        bcmcli_print(session, " }");
+    }
+    else if ((td->base_type == BCMBAL_APICLI_BASE_TYPE_ID_UNUM ||
+        td->base_type == BCMBAL_APICLI_BASE_TYPE_ID_UNUM_HEX) && td->size == 1)
+    {
+        if (bcmbal_apicli_is_value_set(session, presence_mask))
+        {
+            bcmcli_print(session, "   %s=\n", name);
+            bcmcli_session_hexdump(session, data, 0, size, "      ");
+        }
+    }
+    else
+    {
+        rc = bcmbal_apicli_dump_data_type(session, td, data, name, size, td->size, style, presence_mask);
+    }
+    return rc;
+}
+
+/* Dump property */
+bcmos_errno bcmbal_apicli_dump_prop(bcmcli_session *session, const bcmbal_apicli_prop_descr *pd, void *prop_data)
+{
+    return bcmbal_apicli_dump_data_type(
+        session, pd->type, prop_data, pd->name, 1, 0, BCMBAL_APICLI_OUTPUT_STYLE_STD, NULL);
+}
+
+/* Dump a single property value in C initializer format */
+bcmos_errno bcmbal_apicli_dump_prop_initializer(
+    bcmcli_session *session, const bcmbal_apicli_prop_descr *pd, void *prop_data)
+{
+    return bcmbal_apicli_dump_data_type(
+        session, pd->type, prop_data, pd->name, 1, 0, BCMBAL_APICLI_OUTPUT_STYLE_C_INIT, NULL);
+}
+
+/* Calculate property pointer given the group data pointer and property description */
+static inline void *bcmbal_apicli_prop_data_ptr(void *group_ptr, const bcmbal_apicli_prop_descr *pd)
+{
+    return (void *)((long)group_ptr + pd->offset);
+}
+
+/* Dump object data */
+static bcmos_errno bcmbal_apicli_dump_data(bcmcli_session *session, bcmbal_obj *msg, void *data, uint32_t data_size)
+{
+    uint16_t prop;
+    bcmos_errno rc = BCM_ERR_OK;
+    const bcmbal_apicli_prop_descr *pd;
+
+    bcmcli_print(session, "data:\n");
+    for (prop = 0;
+         bcmbal_apicli_object_property(msg->obj_type, msg->group, msg->subgroup, prop, &pd) == BCM_ERR_OK;
+         ++prop)
+    {
+        void *prop_data = bcmbal_apicli_prop_data_ptr(data, pd);
+        if (!(msg->presence_mask & (1LL << prop)))
+            continue;
+        if (!prop_data)
+        {
+            continue;
+        }
+        BUG_ON(pd->offset > data_size);
+        rc = bcmbal_apicli_dump_prop(session, pd, prop_data);
+        if (rc != BCM_ERR_OK)
+        {
+            break;
+        }
+    }
+    return rc;
+}
+
+/* Dump object key */
+static bcmos_errno bcmbal_apicli_dump_key(bcmcli_session *session, bcmbal_obj *msg, void *key, uint32_t key_size)
+{
+    uint16_t prop;
+    bcmos_errno rc = BCM_ERR_OK;
+    const bcmbal_apicli_prop_descr *pd;
+
+    bcmcli_print(session, "key:\n");
+    for (prop = 0;
+         bcmbal_apicli_object_property(msg->obj_type, BCMBAL_MGT_GROUP_KEY, 0, prop, &pd) == BCM_ERR_OK;
+         ++prop)
+    {
+        void *prop_data = bcmbal_apicli_prop_data_ptr(key, pd);
+        if (!prop_data)
+        {
+            continue;
+        }
+        BUG_ON(pd->offset > key_size);
+        rc = bcmbal_apicli_dump_prop(session, pd, prop_data);
+        if (rc != BCM_ERR_OK)
+        {
+            break;
+        }
+    }
+    return rc;
+}
+
+const char *bcmbal_apicli_mgt_group_to_str(bcmbal_mgt_group group)
+{
+    static const char *str_table[BCMBAL_MGT_GROUP__NUM_OF] =
+    {
+        [BCMBAL_MGT_GROUP_KEY]      = "key",
+        [BCMBAL_MGT_GROUP_CFG]      = "cfg",
+        [BCMBAL_MGT_GROUP_STAT]     = "stat",
+        [BCMBAL_MGT_GROUP_AUTO]     = "auto",
+        [BCMBAL_MGT_GROUP_AUTO_CFG] = "auto_cfg",
+    };
+    return (group >= BCMBAL_MGT_GROUP__NUM_OF) ? "<unknown>" : str_table[group];
+}
+
+/* Dump message */
+bcmos_errno bcmbal_apicli_msg_dump(bcmcli_session *session, bcmbal_obj *msg)
+{
+    bcmos_errno rc;
+    const char *name, *descr;
+    uint32_t key_size;
+    uint32_t key_offset;
+    uint32_t data_size = 0;
+    uint32_t data_offset;
+    void *key = NULL;
+    void *data = NULL;
+
+    rc = bcmbal_apicli_object_name(msg->obj_type, &name, &descr);
+    if (rc)
+    {
+        goto dump_error;
+    }
+
+    bcmcli_print(session, "object: ");
+    if (name)
+    {
+        bcmcli_print(session, "%s", name);
+    }
+    if (descr)
+    {
+        bcmcli_print(session, " - %s", descr);
+    }
+    bcmcli_print(session, "\n");
+    rc = bcmbal_apicli_object_struct_size(msg->obj_type, BCMBAL_MGT_GROUP_KEY, 0, &key_size, &key_offset, &data_size, &data_offset);
+    rc = rc ? rc : bcmbal_apicli_object_struct_size(msg->obj_type, msg->group, msg->subgroup, &key_size, &key_offset, &data_size, &data_offset);
+    if (rc)
+    {
+        goto dump_error;
+    }
+
+    bcmcli_print(session, (msg->type & BCMBAL_OBJ_MSG_TYPE_GET) != 0 ? "get" : "set");
+    if ((msg->type & BCMBAL_OBJ_MSG_TYPE_CLEAR) != 0)
+    {
+        bcmcli_print(session, ",clear");
+    }
+    bcmcli_print(session, " %s ", bcmbal_apicli_mgt_group_to_str(msg->group));
+
+    if (msg->group != BCMBAL_MGT_GROUP_CFG && 
+        msg->group != BCMBAL_MGT_GROUP_STAT && 
+        msg->group != BCMBAL_MGT_GROUP_AUTO_CFG)
+    {
+        const char *sub_name, *sub_descr;
+        /* Get name of specific subgroup */
+        rc = bcmbal_apicli_object_subgroup_name(msg->obj_type, msg->group, msg->subgroup, &sub_name, &sub_descr);
+        if (rc)
+        {
+            goto dump_error;
+        }
+        bcmcli_print(session, "subgroup: %s-%s ", sub_name ? sub_name : "?", sub_descr ? sub_descr : "");
+    }
+    if (msg->dir == BCMBAL_OBJ_MSG_DIR_REQUEST)
+    {
+        bcmcli_print(session, "request\n");
+    }
+    else
+    {
+        bcmcli_print(session, "response: %s\n", bcmos_strerror(msg->status));
+        bcmcli_print(session, "is in-progress: %s\n", (msg->is_inprogress == BCMOS_TRUE) ? "yes" : "no");
+    }
+
+    if ((msg->group != BCMBAL_MGT_GROUP_AUTO_CFG) && key_size)
+    {
+        key = (void *)((long)msg + sizeof(bcmbal_obj));
+        rc = bcmbal_apicli_dump_key(session, msg, key, key_size);
+        if (rc)
+        {
+            goto dump_error;
+        }
+    }
+    if (data_size &&
+         (  ((msg->dir == BCMBAL_OBJ_MSG_DIR_REQUEST) && (msg->type & BCMBAL_OBJ_MSG_TYPE_SET))  ||
+            ((msg->dir == BCMBAL_OBJ_MSG_DIR_RESPONSE) && (msg->type & BCMBAL_OBJ_MSG_TYPE_GET)) ||
+            (msg->group == BCMBAL_MGT_GROUP_AUTO)
+         )
+       )
+    {
+        data = (void *)((long)msg + data_offset);
+        rc = bcmbal_apicli_dump_data(session, msg, data, data_size);
+        if (rc)
+        {
+            goto dump_error;
+        }
+    }
+    return BCM_ERR_OK;
+
+dump_error:
+    bcmcli_print(session, "*** Object dump error %s (%d)\n", bcmos_strerror(rc), rc);
+    return rc;
+}
+
diff --git a/bal_release/src/lib/libbalapicli/bal_api_cli_handlers.c b/bal_release/src/lib/libbalapicli/bal_api_cli_handlers.c
new file mode 100644
index 0000000..cc90bbf
--- /dev/null
+++ b/bal_release/src/lib/libbalapicli/bal_api_cli_handlers.c
@@ -0,0 +1,4516 @@
+#include <bcmos_system.h>
+#include <bal_api.h>
+#include <bcmcli.h>
+#include "bal_api_cli_helpers.h"
+#include "bal_api_cli_handlers.h"
+
+bcmcli_session *bcmbal_apicli_log_session = NULL;
+
+typedef struct
+{
+    uint8_t *start;
+    uint32_t used;
+} bcmbal_apicli_byte_pool;
+
+static bcmos_errno bcmbal_apicli_byte_pool_create(bcmbal_apicli_byte_pool *buf)
+{
+    buf->used = 0;
+    buf->start = bcmos_calloc(BCMBAL_APICLI_DYNAMIC_LIST_BUFFER_SIZE);
+    return (buf->start == NULL) ? BCM_ERR_NOMEM : BCM_ERR_OK;
+}
+
+static void bcmbal_apicli_byte_pool_destroy(bcmbal_apicli_byte_pool *buf)
+{
+    bcmos_free(buf->start);
+}
+
+static void *bcmbal_apicli_byte_pool_calloc(bcmbal_apicli_byte_pool *buf, uint32_t num_bytes)
+{
+    void *ret;
+    if (buf->used + num_bytes > BCMBAL_APICLI_DYNAMIC_LIST_BUFFER_SIZE)
+    {
+        return NULL;
+    }
+
+    ret = buf->start + buf->used;
+    buf->used += num_bytes;
+    memset(ret, 0, num_bytes);
+    return ret;
+}
+
+/*
+ * Start/end banners - these are specially formatted so listening apps can easily tell where API handling starts/ends.
+ */
+static void bcmbal_apicli_print_start(bcmcli_session *session, const char *api_name)
+{
+    bcmcli_print(session, "[-- API Start: %s --]\n", api_name);
+}
+
+static void bcmbal_apicli_print_data_start(bcmcli_session *session)
+{
+    bcmcli_print(session, "[-- API Message Data --]\n");
+}
+
+static void bcmbal_apicli_print_complete(bcmcli_session *session, bcmos_errno err, const char *err_text)
+{
+    if (err != BCM_ERR_OK && err_text != NULL && err_text[0] != '\0')
+    {
+        bcmcli_print(session, "ERROR: %s", err_text);
+    }
+
+    bcmcli_print(session, "[-- API Complete: %d (%s) --]\n", err, bcmos_strerror(err));
+}
+
+static int bcmbal_apicli_session_write_cb(bcmcli_session *cli_session, const char *buf, uint32_t size)
+{
+    bcmcli_log(buf, "%.*s", size, buf);
+    return (int)size;
+}
+
+/* Logs a property value to the CLI log in such a way that it is a valid RHS in an initializer.  For a primitve, this
+ * will just print the value (e.g. "42").  For a struct, it will emit all members in between curly braces. */
+static void bcmbal_apicli_log_prop_val(bcmolt_obj_id obj, bcmolt_mgt_group group, uint16_t subgroup, uint16_t prop, void *value)
+{
+    bcmos_errno err;
+    const bcmbal_apicli_prop_descr *prop_descr;
+
+    if (bcmbal_apicli_log_session == NULL)
+    {
+        static bcmcli_session_parm session_params = { .write = bcmbal_apicli_session_write_cb };
+
+        err = bcmcli_session_open(&session_params, &bcmbal_apicli_log_session);
+        if (err != BCM_ERR_OK)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error opening session: %s", bcmos_strerror(err));
+            return;
+        }
+    }
+
+    err = bcmbal_apicli_object_property(obj, group, subgroup, prop, &prop_descr);
+    if (err != BCM_ERR_OK)
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error getting info for property: %s", bcmos_strerror(err));
+        return;
+    }
+
+    err = bcmbal_apicli_dump_prop_initializer(bcmbal_apicli_log_session, prop_descr, value);
+    if (err != BCM_ERR_OK)
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error printing property: %s", bcmos_strerror(err));
+    }
+}
+
+static inline bcmos_ipv4_address bcmbal_apicli_unumber_to_ipv4(uint32_t num)
+{
+    bcmos_ipv4_address ip = { .u32 = num };
+    return ip;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmbal_cli_access_terminal_cfg_get(bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmbal_access_terminal_cfg cfg;         /**< declare main API struct */
+    bcmbal_access_terminal_key key = { };   /**< declare key */
+    bcmcli_log("bcmbal_access_terminal_cfg cfg;\n");
+    bcmcli_log("bcmbal_access_terminal_key key = {  };\n");
+    bcmbal_apicli_print_start(session, "bcmbal_cfg_get");
+
+    /* init the API struct */
+    BCMBAL_CFG_INIT(&cfg, access_terminal, key);
+    bcmcli_log("BCMBAL_CFG_INIT(&cfg, access_terminal, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "admin_state");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, access_terminal, admin_state);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, access_terminal, admin_state);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "oper_status");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, access_terminal, oper_status);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, access_terminal, oper_status);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "iwf_mode");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, access_terminal, iwf_mode);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, access_terminal, iwf_mode);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMBAL_CFG_PROP_IS_SET(&cfg, access_terminal, admin_state) && !BCMBAL_CFG_PROP_IS_SET(&cfg, access_terminal, oper_status) && !BCMBAL_CFG_PROP_IS_SET(&cfg, access_terminal, iwf_mode))
+    {
+        BCMBAL_CFG_PROP_GET(&cfg, access_terminal, all_properties);
+        bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, access_terminal, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmbal_cfg_get(&cfg.hdr);
+    bcmcli_log("bcmbal_cfg_get(&cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        bcmbal_apicli_print_data_start(session);
+        err = bcmbal_apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    bcmbal_apicli_print_complete(session, err, NULL);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmbal_cli_access_terminal_cfg_set(bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmbal_access_terminal_cfg cfg;         /**< declare main API struct */
+    bcmbal_access_terminal_key key = { };   /**< declare key */
+    bcmcli_log("bcmbal_access_terminal_cfg cfg;\n");
+    bcmcli_log("bcmbal_access_terminal_key key = {  };\n");
+    bcmbal_apicli_print_start(session, "bcmbal_cfg_set");
+
+    /* init the API struct */
+    BCMBAL_CFG_INIT(&cfg, access_terminal, key);
+    bcmcli_log("BCMBAL_CFG_INIT(&cfg, access_terminal, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "admin_state");
+    if (cli_parm != NULL)
+    {
+        bcmbal_state val;
+        val = (bcmbal_state) cli_parm->value.enum_val;
+        BCMBAL_CFG_PROP_SET(&cfg, access_terminal, admin_state, val);
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, access_terminal, admin_state, ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_ACCESS_TERMINAL, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_ACCESS_TERMINAL_CFG_ID_ADMIN_STATE, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmbal_cfg_set(&cfg.hdr);
+    bcmcli_log("bcmbal_cfg_set(&cfg.hdr);\n");
+    bcmbal_apicli_print_complete(session, err, NULL);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmbal_cli_access_terminal_cfg_clear(bcmcli_session *session)
+{
+    bcmos_errno err;
+    bcmbal_access_terminal_cfg cfg;         /**< declare main API struct */
+    bcmbal_access_terminal_key key = { };   /**< declare key */
+    bcmcli_log("bcmbal_access_terminal_cfg cfg;\n");
+    bcmcli_log("bcmbal_access_terminal_key key = {  };\n");
+    bcmbal_apicli_print_start(session, "bcmbal_cfg_clear");
+
+    /* init the API struct */
+    BCMBAL_CFG_INIT(&cfg, access_terminal, key);
+    bcmcli_log("BCMBAL_CFG_INIT(&cfg, access_terminal, key);\n");
+
+    /* call API */
+    err = bcmbal_cfg_clear(&cfg.hdr);
+    bcmcli_log("bcmbal_cfg_clear(&cfg.hdr);\n");
+    bcmbal_apicli_print_complete(session, err, NULL);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmbal_cli_flow_cfg_get(bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmbal_flow_cfg cfg;        /**< declare main API struct */
+    bcmbal_flow_key key = { };  /**< declare key */
+    bcmcli_log("bcmbal_flow_cfg cfg;\n");
+    bcmcli_log("bcmbal_flow_key key = {  };\n");
+    bcmbal_apicli_print_start(session, "bcmbal_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "flow_id");
+    if (cli_parm != NULL)
+    {
+        key.flow_id = (bcmbal_flow_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "flow_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.flow_id = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_FLOW, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_FLOW_KEY_ID_FLOW_ID, &key.flow_id);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "flow_type");
+    if (cli_parm != NULL)
+    {
+        key.flow_type = (bcmbal_flow_type) cli_parm->value.enum_val;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "flow_type is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.flow_type = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_FLOW, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_FLOW_KEY_ID_FLOW_TYPE, &key.flow_type);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMBAL_CFG_INIT(&cfg, flow, key);
+    bcmcli_log("BCMBAL_CFG_INIT(&cfg, flow, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "admin_state");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, flow, admin_state);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, flow, admin_state);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "oper_status");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, flow, oper_status);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, flow, oper_status);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "access_int_id");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, flow, access_int_id);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, flow, access_int_id);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "network_int_id");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, flow, network_int_id);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, flow, network_int_id);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "sub_term_id");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, flow, sub_term_id);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, flow, sub_term_id);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "sub_term_uni_idx");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, flow, sub_term_uni_idx);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, flow, sub_term_uni_idx);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "svc_port_id");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, flow, svc_port_id);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, flow, svc_port_id);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "agg_port_id");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, flow, agg_port_id);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, flow, agg_port_id);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "resolve_mac");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, flow, resolve_mac);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, flow, resolve_mac);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "classifier");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, flow, classifier);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, flow, classifier);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "action");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, flow, action);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, flow, action);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "sla");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, flow, sla);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, flow, sla);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "cookie");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, flow, cookie);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, flow, cookie);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "priority");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, flow, priority);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, flow, priority);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "group_id");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, flow, group_id);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, flow, group_id);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "queue");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, flow, queue);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, flow, queue);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMBAL_CFG_PROP_IS_SET(&cfg, flow, admin_state) && !BCMBAL_CFG_PROP_IS_SET(&cfg, flow, oper_status) && !BCMBAL_CFG_PROP_IS_SET(&cfg, flow, access_int_id) && !BCMBAL_CFG_PROP_IS_SET(&cfg, flow, network_int_id) && !BCMBAL_CFG_PROP_IS_SET(&cfg, flow, sub_term_id) && !BCMBAL_CFG_PROP_IS_SET(&cfg, flow, sub_term_uni_idx) && !BCMBAL_CFG_PROP_IS_SET(&cfg, flow, svc_port_id) && !BCMBAL_CFG_PROP_IS_SET(&cfg, flow, agg_port_id) && !BCMBAL_CFG_PROP_IS_SET(&cfg, flow, resolve_mac) && !BCMBAL_CFG_PROP_IS_SET(&cfg, flow, classifier) && !BCMBAL_CFG_PROP_IS_SET(&cfg, flow, action) && !BCMBAL_CFG_PROP_IS_SET(&cfg, flow, sla) && !BCMBAL_CFG_PROP_IS_SET(&cfg, flow, cookie) && !BCMBAL_CFG_PROP_IS_SET(&cfg, flow, priority) && !BCMBAL_CFG_PROP_IS_SET(&cfg, flow, group_id) && !BCMBAL_CFG_PROP_IS_SET(&cfg, flow, queue))
+    {
+        BCMBAL_CFG_PROP_GET(&cfg, flow, all_properties);
+        bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, flow, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmbal_cfg_get(&cfg.hdr);
+    bcmcli_log("bcmbal_cfg_get(&cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        bcmbal_apicli_print_data_start(session);
+        err = bcmbal_apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    bcmbal_apicli_print_complete(session, err, NULL);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmbal_cli_flow_cfg_set(bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmbal_flow_cfg cfg;        /**< declare main API struct */
+    bcmbal_flow_key key = { };  /**< declare key */
+    bcmcli_log("bcmbal_flow_cfg cfg;\n");
+    bcmcli_log("bcmbal_flow_key key = {  };\n");
+    bcmbal_apicli_print_start(session, "bcmbal_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "flow_id");
+    if (cli_parm != NULL)
+    {
+        key.flow_id = (bcmbal_flow_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "flow_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.flow_id = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_FLOW, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_FLOW_KEY_ID_FLOW_ID, &key.flow_id);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "flow_type");
+    if (cli_parm != NULL)
+    {
+        key.flow_type = (bcmbal_flow_type) cli_parm->value.enum_val;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "flow_type is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.flow_type = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_FLOW, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_FLOW_KEY_ID_FLOW_TYPE, &key.flow_type);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMBAL_CFG_INIT(&cfg, flow, key);
+    bcmcli_log("BCMBAL_CFG_INIT(&cfg, flow, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "admin_state");
+    if (cli_parm != NULL)
+    {
+        bcmbal_state val;
+        val = (bcmbal_state) cli_parm->value.enum_val;
+        BCMBAL_CFG_PROP_SET(&cfg, flow, admin_state, val);
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, flow, admin_state, ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_FLOW, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_FLOW_CFG_ID_ADMIN_STATE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "access_int_id");
+    if (cli_parm != NULL)
+    {
+        bcmbal_intf_id val;
+        val = (bcmbal_intf_id) cli_parm->value.unumber;
+        BCMBAL_CFG_PROP_SET(&cfg, flow, access_int_id, val);
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, flow, access_int_id, ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_FLOW, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_FLOW_CFG_ID_ACCESS_INT_ID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "network_int_id");
+    if (cli_parm != NULL)
+    {
+        bcmbal_intf_id val;
+        val = (bcmbal_intf_id) cli_parm->value.unumber;
+        BCMBAL_CFG_PROP_SET(&cfg, flow, network_int_id, val);
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, flow, network_int_id, ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_FLOW, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_FLOW_CFG_ID_NETWORK_INT_ID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "sub_term_id");
+    if (cli_parm != NULL)
+    {
+        bcmbal_sub_id val;
+        val = (bcmbal_sub_id) cli_parm->value.unumber;
+        BCMBAL_CFG_PROP_SET(&cfg, flow, sub_term_id, val);
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, flow, sub_term_id, ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_FLOW, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_FLOW_CFG_ID_SUB_TERM_ID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "sub_term_uni_idx");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMBAL_CFG_PROP_SET(&cfg, flow, sub_term_uni_idx, val);
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, flow, sub_term_uni_idx, ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_FLOW, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_FLOW_CFG_ID_SUB_TERM_UNI_IDX, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "svc_port_id");
+    if (cli_parm != NULL)
+    {
+        bcmbal_service_port_id val;
+        val = (bcmbal_service_port_id) cli_parm->value.unumber;
+        BCMBAL_CFG_PROP_SET(&cfg, flow, svc_port_id, val);
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, flow, svc_port_id, ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_FLOW, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_FLOW_CFG_ID_SVC_PORT_ID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "agg_port_id");
+    if (cli_parm != NULL)
+    {
+        bcmbal_aggregation_port_id val;
+        val = (bcmbal_aggregation_port_id) cli_parm->value.unumber;
+        BCMBAL_CFG_PROP_SET(&cfg, flow, agg_port_id, val);
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, flow, agg_port_id, ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_FLOW, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_FLOW_CFG_ID_AGG_PORT_ID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "resolve_mac");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMBAL_CFG_PROP_SET(&cfg, flow, resolve_mac, val);
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, flow, resolve_mac, ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_FLOW, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_FLOW_CFG_ID_RESOLVE_MAC, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "classifier.");
+    if (cli_parm != NULL)
+    {
+        bcmbal_classifier val = { };
+        cli_parm = bcmcli_find_named_parm(session, "classifier.o_tpid");
+        if (cli_parm != NULL)
+        {
+            val.o_tpid = cli_parm->value.unumber;
+            val.presence_mask = val.presence_mask | BCMBAL_CLASSIFIER_ID_O_TPID;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "classifier.o_vid");
+        if (cli_parm != NULL)
+        {
+            val.o_vid = cli_parm->value.unumber;
+            val.presence_mask = val.presence_mask | BCMBAL_CLASSIFIER_ID_O_VID;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "classifier.i_tpid");
+        if (cli_parm != NULL)
+        {
+            val.i_tpid = cli_parm->value.unumber;
+            val.presence_mask = val.presence_mask | BCMBAL_CLASSIFIER_ID_I_TPID;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "classifier.i_vid");
+        if (cli_parm != NULL)
+        {
+            val.i_vid = cli_parm->value.unumber;
+            val.presence_mask = val.presence_mask | BCMBAL_CLASSIFIER_ID_I_VID;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "classifier.o_pbits");
+        if (cli_parm != NULL)
+        {
+            val.o_pbits = cli_parm->value.unumber;
+            val.presence_mask = val.presence_mask | BCMBAL_CLASSIFIER_ID_O_PBITS;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "classifier.i_pbits");
+        if (cli_parm != NULL)
+        {
+            val.i_pbits = cli_parm->value.unumber;
+            val.presence_mask = val.presence_mask | BCMBAL_CLASSIFIER_ID_I_PBITS;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "classifier.ether_type");
+        if (cli_parm != NULL)
+        {
+            val.ether_type = cli_parm->value.unumber;
+            val.presence_mask = val.presence_mask | BCMBAL_CLASSIFIER_ID_ETHER_TYPE;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "classifier.dst_mac");
+        if (cli_parm != NULL)
+        {
+            val.dst_mac = cli_parm->value.mac;
+            val.presence_mask = val.presence_mask | BCMBAL_CLASSIFIER_ID_DST_MAC;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "classifier.src_mac");
+        if (cli_parm != NULL)
+        {
+            val.src_mac = cli_parm->value.mac;
+            val.presence_mask = val.presence_mask | BCMBAL_CLASSIFIER_ID_SRC_MAC;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "classifier.ip_proto");
+        if (cli_parm != NULL)
+        {
+            val.ip_proto = cli_parm->value.unumber;
+            val.presence_mask = val.presence_mask | BCMBAL_CLASSIFIER_ID_IP_PROTO;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "classifier.dst_ip");
+        if (cli_parm != NULL)
+        {
+            val.dst_ip = bcmbal_apicli_unumber_to_ipv4(cli_parm->value.unumber);
+            val.presence_mask = val.presence_mask | BCMBAL_CLASSIFIER_ID_DST_IP;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "classifier.src_ip");
+        if (cli_parm != NULL)
+        {
+            val.src_ip = bcmbal_apicli_unumber_to_ipv4(cli_parm->value.unumber);
+            val.presence_mask = val.presence_mask | BCMBAL_CLASSIFIER_ID_SRC_IP;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "classifier.src_port");
+        if (cli_parm != NULL)
+        {
+            val.src_port = cli_parm->value.unumber;
+            val.presence_mask = val.presence_mask | BCMBAL_CLASSIFIER_ID_SRC_PORT;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "classifier.dst_port");
+        if (cli_parm != NULL)
+        {
+            val.dst_port = cli_parm->value.unumber;
+            val.presence_mask = val.presence_mask | BCMBAL_CLASSIFIER_ID_DST_PORT;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "classifier.pkt_tag_type");
+        if (cli_parm != NULL)
+        {
+            val.pkt_tag_type = (bcmbal_pkt_tag_type) cli_parm->value.enum_val;
+            val.presence_mask = val.presence_mask | BCMBAL_CLASSIFIER_ID_PKT_TAG_TYPE;
+        }
+
+        BCMBAL_CFG_PROP_SET(&cfg, flow, classifier, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmbal_classifier val = ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_FLOW, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_FLOW_CFG_ID_CLASSIFIER, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, flow, classifier, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "action.");
+    if (cli_parm != NULL)
+    {
+        bcmbal_action val = { };
+        cli_parm = bcmcli_find_named_parm(session, "action.cmds_bitmask");
+        if (cli_parm != NULL)
+        {
+            val.cmds_bitmask = (bcmbal_action_cmd_id) cli_parm->value.enum_val;
+            val.presence_mask = val.presence_mask | BCMBAL_ACTION_ID_CMDS_BITMASK;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "action.o_vid");
+        if (cli_parm != NULL)
+        {
+            val.o_vid = cli_parm->value.unumber;
+            val.presence_mask = val.presence_mask | BCMBAL_ACTION_ID_O_VID;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "action.o_pbits");
+        if (cli_parm != NULL)
+        {
+            val.o_pbits = cli_parm->value.unumber;
+            val.presence_mask = val.presence_mask | BCMBAL_ACTION_ID_O_PBITS;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "action.o_tpid");
+        if (cli_parm != NULL)
+        {
+            val.o_tpid = cli_parm->value.unumber;
+            val.presence_mask = val.presence_mask | BCMBAL_ACTION_ID_O_TPID;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "action.i_vid");
+        if (cli_parm != NULL)
+        {
+            val.i_vid = cli_parm->value.unumber;
+            val.presence_mask = val.presence_mask | BCMBAL_ACTION_ID_I_VID;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "action.i_pbits");
+        if (cli_parm != NULL)
+        {
+            val.i_pbits = cli_parm->value.unumber;
+            val.presence_mask = val.presence_mask | BCMBAL_ACTION_ID_I_PBITS;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "action.i_tpid");
+        if (cli_parm != NULL)
+        {
+            val.i_tpid = cli_parm->value.unumber;
+            val.presence_mask = val.presence_mask | BCMBAL_ACTION_ID_I_TPID;
+        }
+
+        BCMBAL_CFG_PROP_SET(&cfg, flow, action, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmbal_action val = ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_FLOW, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_FLOW_CFG_ID_ACTION, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, flow, action, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "sla.");
+    if (cli_parm != NULL)
+    {
+        bcmbal_sla val = { };
+        cli_parm = bcmcli_find_named_parm(session, "sla.min_rate");
+        if (cli_parm != NULL)
+        {
+            val.min_rate = cli_parm->value.unumber;
+            val.presence_mask = val.presence_mask | BCMBAL_SLA_ID_MIN_RATE;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "sla.max_rate");
+        if (cli_parm != NULL)
+        {
+            val.max_rate = cli_parm->value.unumber;
+            val.presence_mask = val.presence_mask | BCMBAL_SLA_ID_MAX_RATE;
+        }
+
+        BCMBAL_CFG_PROP_SET(&cfg, flow, sla, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmbal_sla val = ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_FLOW, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_FLOW_CFG_ID_SLA, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, flow, sla, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "cookie");
+    if (cli_parm != NULL)
+    {
+        bcmbal_cookie val;
+        val = (bcmbal_cookie) cli_parm->value.unumber64;
+        BCMBAL_CFG_PROP_SET(&cfg, flow, cookie, val);
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, flow, cookie, ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_FLOW, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_FLOW_CFG_ID_COOKIE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "priority");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMBAL_CFG_PROP_SET(&cfg, flow, priority, val);
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, flow, priority, ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_FLOW, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_FLOW_CFG_ID_PRIORITY, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "group_id");
+    if (cli_parm != NULL)
+    {
+        bcmbal_group_id val;
+        val = (bcmbal_group_id) cli_parm->value.unumber;
+        BCMBAL_CFG_PROP_SET(&cfg, flow, group_id, val);
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, flow, group_id, ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_FLOW, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_FLOW_CFG_ID_GROUP_ID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "queue.");
+    if (cli_parm != NULL)
+    {
+        bcmbal_tm_queue_ref val = { };
+        cli_parm = bcmcli_find_named_parm(session, "queue.sched_id");
+        if (cli_parm != NULL)
+        {
+            val.sched_id = (bcmbal_tm_sched_id) cli_parm->value.unumber;
+        }
+        else
+        {
+            bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "queue.sched_id is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "queue.queue_id");
+        if (cli_parm != NULL)
+        {
+            val.queue_id = (bcmbal_tm_queue_id) cli_parm->value.unumber;
+        }
+        else
+        {
+            bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "queue.queue_id is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMBAL_CFG_PROP_SET(&cfg, flow, queue, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmbal_tm_queue_ref val = ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_FLOW, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_FLOW_CFG_ID_QUEUE, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, flow, queue, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmbal_cfg_set(&cfg.hdr);
+    bcmcli_log("bcmbal_cfg_set(&cfg.hdr);\n");
+    bcmbal_apicli_print_complete(session, err, NULL);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmbal_cli_flow_cfg_clear(bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmbal_flow_cfg cfg;        /**< declare main API struct */
+    bcmbal_flow_key key = { };  /**< declare key */
+    bcmcli_log("bcmbal_flow_cfg cfg;\n");
+    bcmcli_log("bcmbal_flow_key key = {  };\n");
+    bcmbal_apicli_print_start(session, "bcmbal_cfg_clear");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "flow_id");
+    if (cli_parm != NULL)
+    {
+        key.flow_id = (bcmbal_flow_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "flow_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.flow_id = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_FLOW, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_FLOW_KEY_ID_FLOW_ID, &key.flow_id);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "flow_type");
+    if (cli_parm != NULL)
+    {
+        key.flow_type = (bcmbal_flow_type) cli_parm->value.enum_val;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "flow_type is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.flow_type = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_FLOW, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_FLOW_KEY_ID_FLOW_TYPE, &key.flow_type);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMBAL_CFG_INIT(&cfg, flow, key);
+    bcmcli_log("BCMBAL_CFG_INIT(&cfg, flow, key);\n");
+
+    /* call API */
+    err = bcmbal_cfg_clear(&cfg.hdr);
+    bcmcli_log("bcmbal_cfg_clear(&cfg.hdr);\n");
+    bcmbal_apicli_print_complete(session, err, NULL);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmbal_cli_flow_stat_get(bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmbal_flow_stat stat;      /**< declare main API struct */
+    bcmbal_flow_key key = { };  /**< declare key */
+    bcmcli_log("bcmbal_flow_stat stat;\n");
+    bcmcli_log("bcmbal_flow_key key = {  };\n");
+    bcmbal_apicli_print_start(session, "bcmbal_stat_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "flow_id");
+    if (cli_parm != NULL)
+    {
+        key.flow_id = (bcmbal_flow_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "flow_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.flow_id = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_FLOW, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_FLOW_KEY_ID_FLOW_ID, &key.flow_id);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "flow_type");
+    if (cli_parm != NULL)
+    {
+        key.flow_type = (bcmbal_flow_type) cli_parm->value.enum_val;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "flow_type is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.flow_type = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_FLOW, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_FLOW_KEY_ID_FLOW_TYPE, &key.flow_type);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMBAL_STAT_INIT(&stat, flow, key);
+    bcmcli_log("BCMBAL_STAT_INIT(&stat, flow, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "rx_packets");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_STAT_PROP_GET(&stat, flow, rx_packets);
+            bcmcli_log("BCMBAL_STAT_PROP_GET(&stat, flow, rx_packets);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_bytes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_STAT_PROP_GET(&stat, flow, rx_bytes);
+            bcmcli_log("BCMBAL_STAT_PROP_GET(&stat, flow, rx_bytes);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_packets");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_STAT_PROP_GET(&stat, flow, tx_packets);
+            bcmcli_log("BCMBAL_STAT_PROP_GET(&stat, flow, tx_packets);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_bytes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_STAT_PROP_GET(&stat, flow, tx_bytes);
+            bcmcli_log("BCMBAL_STAT_PROP_GET(&stat, flow, tx_bytes);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMBAL_STAT_PROP_IS_SET(&stat, flow, rx_packets) && !BCMBAL_STAT_PROP_IS_SET(&stat, flow, rx_bytes) && !BCMBAL_STAT_PROP_IS_SET(&stat, flow, tx_packets) && !BCMBAL_STAT_PROP_IS_SET(&stat, flow, tx_bytes))
+    {
+        BCMBAL_STAT_PROP_GET(&stat, flow, all_properties);
+        bcmcli_log("BCMBAL_STAT_PROP_GET(&stat, flow, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmbal_stat_get(&stat.hdr);
+    bcmcli_log("bcmbal_stat_get(&stat.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        bcmbal_apicli_print_data_start(session);
+        err = bcmbal_apicli_msg_dump(session, &stat.hdr.hdr);
+    }
+
+    bcmbal_apicli_print_complete(session, err, NULL);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmbal_cli_group_cfg_get(bcmcli_session *session, bcmbal_apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmbal_group_cfg cfg;       /**< declare main API struct */
+    bcmbal_group_key key = { }; /**< declare key */
+    uint8_t *list_mem;          /**< declare memory buffer for variable-sized lists */
+    bcmcli_log("bcmbal_group_cfg cfg;\n");
+    bcmcli_log("bcmbal_group_key key = {  };\n");
+    bcmcli_log("uint8_t* list_mem;\n");
+    bcmbal_apicli_print_start(session, "bcmbal_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "group_id");
+    if (cli_parm != NULL)
+    {
+        key.group_id = (bcmbal_group_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "group_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.group_id = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_GROUP, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_GROUP_KEY_ID_GROUP_ID, &key.group_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMBAL_CFG_INIT(&cfg, group, key);
+    bcmcli_log("BCMBAL_CFG_INIT(&cfg, group, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "members_cmd");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, group, members_cmd);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, group, members_cmd);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "members");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, group, members);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, group, members);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "cookie");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, group, cookie);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, group, cookie);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "flows");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, group, flows);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, group, flows);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "owner");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, group, owner);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, group, owner);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMBAL_CFG_PROP_IS_SET(&cfg, group, members_cmd) && !BCMBAL_CFG_PROP_IS_SET(&cfg, group, members) && !BCMBAL_CFG_PROP_IS_SET(&cfg, group, cookie) && !BCMBAL_CFG_PROP_IS_SET(&cfg, group, flows) && !BCMBAL_CFG_PROP_IS_SET(&cfg, group, owner))
+    {
+        BCMBAL_CFG_PROP_GET(&cfg, group, all_properties);
+        bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, group, all_properties);\n");
+    }
+
+    /* set memory to use for variable-sized lists */
+    list_mem = bcmbal_apicli_byte_pool_calloc(byte_pool, BCMBAL_APICLI_DYNAMIC_LIST_BUFFER_SIZE);
+    if (list_mem == NULL)
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+        return BCM_ERR_NOMEM;
+    }
+
+    bcmcli_log("list_mem = bcmos_calloc(BCMBAL_APICLI_DYNAMIC_LIST_BUFFER_SIZE);\n");
+    BCMBAL_CFG_LIST_BUF_SET(&cfg, group, list_mem, BCMBAL_APICLI_DYNAMIC_LIST_BUFFER_SIZE);
+    bcmcli_log("BCMBAL_CFG_LIST_BUF_SET(&cfg, group, list_mem, BCMBAL_APICLI_DYNAMIC_LIST_BUFFER_SIZE);\n");
+
+    /* call API */
+    err = bcmbal_cfg_get(&cfg.hdr);
+    bcmcli_log("bcmbal_cfg_get(&cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        bcmbal_apicli_print_data_start(session);
+        err = bcmbal_apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    bcmbal_apicli_print_complete(session, err, NULL);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmbal_cli_group_cfg_set(bcmcli_session *session, bcmbal_apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmbal_group_cfg cfg;       /**< declare main API struct */
+    bcmbal_group_key key = { }; /**< declare key */
+    bcmcli_log("bcmbal_group_cfg cfg;\n");
+    bcmcli_log("bcmbal_group_key key = {  };\n");
+    bcmbal_apicli_print_start(session, "bcmbal_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "group_id");
+    if (cli_parm != NULL)
+    {
+        key.group_id = (bcmbal_group_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "group_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.group_id = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_GROUP, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_GROUP_KEY_ID_GROUP_ID, &key.group_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMBAL_CFG_INIT(&cfg, group, key);
+    bcmcli_log("BCMBAL_CFG_INIT(&cfg, group, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "members_cmd");
+    if (cli_parm != NULL)
+    {
+        bcmbal_group_member_cmd val;
+        val = (bcmbal_group_member_cmd) cli_parm->value.enum_val;
+        BCMBAL_CFG_PROP_SET(&cfg, group, members_cmd, val);
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, group, members_cmd, ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_GROUP, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_GROUP_CFG_ID_MEMBERS_CMD, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "members.");
+    if (cli_parm != NULL)
+    {
+        bcmbal_group_member_info_list_u16 val = { };
+        int32_t i0;
+        val.val = bcmbal_apicli_byte_pool_calloc(byte_pool, cli_parm->array_size * sizeof(*val.val));
+        if (val.val == NULL)
+        {
+            bcmbal_apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+            return BCM_ERR_NOMEM;
+        }
+
+        val.len = cli_parm->array_size;
+        cli_parm = bcmcli_find_named_parm(session, "members.intf_id");
+        if (cli_parm != NULL)
+        {
+            if (cli_parm->array_size != val.len)
+            {
+                bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "members.intf_id is a different size than other arrays in the struct\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i0 = 0; i0 < val.len; i0++)
+            {
+                val.val[i0].intf_id = (bcmbal_intf_id) cli_parm->values[i0].unumber;
+            }
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "members.svc_port_id");
+        if (cli_parm != NULL)
+        {
+            if (cli_parm->array_size != val.len)
+            {
+                bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "members.svc_port_id is a different size than other arrays in the struct\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i0 = 0; i0 < val.len; i0++)
+            {
+                val.val[i0].svc_port_id = (bcmbal_service_port_id) cli_parm->values[i0].unumber;
+            }
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "members.action.cmds_bitmask");
+        if (cli_parm != NULL)
+        {
+            if (cli_parm->array_size != val.len)
+            {
+                bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "members.action.cmds_bitmask is a different size than other arrays in the struct\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i0 = 0; i0 < val.len; i0++)
+            {
+                if (bcmcli_parm_value_is_set(session, cli_parm, i0))
+                {
+                    val.val[i0].action.cmds_bitmask = (bcmbal_action_cmd_id) cli_parm->values[i0].enum_val;
+                    val.val[i0].action.presence_mask = val.val[i0].action.presence_mask | BCMBAL_ACTION_ID_CMDS_BITMASK;
+                }
+            }
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "members.action.o_vid");
+        if (cli_parm != NULL)
+        {
+            if (cli_parm->array_size != val.len)
+            {
+                bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "members.action.o_vid is a different size than other arrays in the struct\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i0 = 0; i0 < val.len; i0++)
+            {
+                if (bcmcli_parm_value_is_set(session, cli_parm, i0))
+                {
+                    val.val[i0].action.o_vid = cli_parm->values[i0].unumber;
+                    val.val[i0].action.presence_mask = val.val[i0].action.presence_mask | BCMBAL_ACTION_ID_O_VID;
+                }
+            }
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "members.action.o_pbits");
+        if (cli_parm != NULL)
+        {
+            if (cli_parm->array_size != val.len)
+            {
+                bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "members.action.o_pbits is a different size than other arrays in the struct\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i0 = 0; i0 < val.len; i0++)
+            {
+                if (bcmcli_parm_value_is_set(session, cli_parm, i0))
+                {
+                    val.val[i0].action.o_pbits = cli_parm->values[i0].unumber;
+                    val.val[i0].action.presence_mask = val.val[i0].action.presence_mask | BCMBAL_ACTION_ID_O_PBITS;
+                }
+            }
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "members.action.o_tpid");
+        if (cli_parm != NULL)
+        {
+            if (cli_parm->array_size != val.len)
+            {
+                bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "members.action.o_tpid is a different size than other arrays in the struct\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i0 = 0; i0 < val.len; i0++)
+            {
+                if (bcmcli_parm_value_is_set(session, cli_parm, i0))
+                {
+                    val.val[i0].action.o_tpid = cli_parm->values[i0].unumber;
+                    val.val[i0].action.presence_mask = val.val[i0].action.presence_mask | BCMBAL_ACTION_ID_O_TPID;
+                }
+            }
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "members.action.i_vid");
+        if (cli_parm != NULL)
+        {
+            if (cli_parm->array_size != val.len)
+            {
+                bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "members.action.i_vid is a different size than other arrays in the struct\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i0 = 0; i0 < val.len; i0++)
+            {
+                if (bcmcli_parm_value_is_set(session, cli_parm, i0))
+                {
+                    val.val[i0].action.i_vid = cli_parm->values[i0].unumber;
+                    val.val[i0].action.presence_mask = val.val[i0].action.presence_mask | BCMBAL_ACTION_ID_I_VID;
+                }
+            }
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "members.action.i_pbits");
+        if (cli_parm != NULL)
+        {
+            if (cli_parm->array_size != val.len)
+            {
+                bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "members.action.i_pbits is a different size than other arrays in the struct\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i0 = 0; i0 < val.len; i0++)
+            {
+                if (bcmcli_parm_value_is_set(session, cli_parm, i0))
+                {
+                    val.val[i0].action.i_pbits = cli_parm->values[i0].unumber;
+                    val.val[i0].action.presence_mask = val.val[i0].action.presence_mask | BCMBAL_ACTION_ID_I_PBITS;
+                }
+            }
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "members.action.i_tpid");
+        if (cli_parm != NULL)
+        {
+            if (cli_parm->array_size != val.len)
+            {
+                bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "members.action.i_tpid is a different size than other arrays in the struct\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i0 = 0; i0 < val.len; i0++)
+            {
+                if (bcmcli_parm_value_is_set(session, cli_parm, i0))
+                {
+                    val.val[i0].action.i_tpid = cli_parm->values[i0].unumber;
+                    val.val[i0].action.presence_mask = val.val[i0].action.presence_mask | BCMBAL_ACTION_ID_I_TPID;
+                }
+            }
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "members.queue.sched_id");
+        if (cli_parm != NULL)
+        {
+            if (cli_parm->array_size != val.len)
+            {
+                bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "members.queue.sched_id is a different size than other arrays in the struct\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i0 = 0; i0 < val.len; i0++)
+            {
+                val.val[i0].queue.sched_id = (bcmbal_tm_sched_id) cli_parm->values[i0].unumber;
+            }
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "members.queue.queue_id");
+        if (cli_parm != NULL)
+        {
+            if (cli_parm->array_size != val.len)
+            {
+                bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "members.queue.queue_id is a different size than other arrays in the struct\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i0 = 0; i0 < val.len; i0++)
+            {
+                val.val[i0].queue.queue_id = (bcmbal_tm_queue_id) cli_parm->values[i0].unumber;
+            }
+        }
+
+        BCMBAL_CFG_PROP_SET(&cfg, group, members, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmbal_group_member_info_list_u16 val = ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_GROUP, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_GROUP_CFG_ID_MEMBERS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, group, members, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "cookie");
+    if (cli_parm != NULL)
+    {
+        bcmbal_cookie val;
+        val = (bcmbal_cookie) cli_parm->value.unumber64;
+        BCMBAL_CFG_PROP_SET(&cfg, group, cookie, val);
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, group, cookie, ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_GROUP, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_GROUP_CFG_ID_COOKIE, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmbal_cfg_set(&cfg.hdr);
+    bcmcli_log("bcmbal_cfg_set(&cfg.hdr);\n");
+    bcmbal_apicli_print_complete(session, err, NULL);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmbal_cli_group_cfg_clear(bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmbal_group_cfg cfg;       /**< declare main API struct */
+    bcmbal_group_key key = { }; /**< declare key */
+    bcmcli_log("bcmbal_group_cfg cfg;\n");
+    bcmcli_log("bcmbal_group_key key = {  };\n");
+    bcmbal_apicli_print_start(session, "bcmbal_cfg_clear");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "group_id");
+    if (cli_parm != NULL)
+    {
+        key.group_id = (bcmbal_group_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "group_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.group_id = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_GROUP, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_GROUP_KEY_ID_GROUP_ID, &key.group_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMBAL_CFG_INIT(&cfg, group, key);
+    bcmcli_log("BCMBAL_CFG_INIT(&cfg, group, key);\n");
+
+    /* call API */
+    err = bcmbal_cfg_clear(&cfg.hdr);
+    bcmcli_log("bcmbal_cfg_clear(&cfg.hdr);\n");
+    bcmbal_apicli_print_complete(session, err, NULL);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmbal_cli_interface_cfg_get(bcmcli_session *session, bcmbal_apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmbal_interface_cfg cfg;       /**< declare main API struct */
+    bcmbal_interface_key key = { }; /**< declare key */
+    uint8_t *list_mem;              /**< declare memory buffer for variable-sized lists */
+    bcmcli_log("bcmbal_interface_cfg cfg;\n");
+    bcmcli_log("bcmbal_interface_key key = {  };\n");
+    bcmcli_log("uint8_t* list_mem;\n");
+    bcmbal_apicli_print_start(session, "bcmbal_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "intf_id");
+    if (cli_parm != NULL)
+    {
+        key.intf_id = cli_parm->value.unumber;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "intf_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.intf_id = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_INTERFACE, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_INTERFACE_KEY_ID_INTF_ID, &key.intf_id);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "intf_type");
+    if (cli_parm != NULL)
+    {
+        key.intf_type = (bcmbal_intf_type) cli_parm->value.enum_val;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "intf_type is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.intf_type = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_INTERFACE, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_INTERFACE_KEY_ID_INTF_TYPE, &key.intf_type);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMBAL_CFG_INIT(&cfg, interface, key);
+    bcmcli_log("BCMBAL_CFG_INIT(&cfg, interface, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "admin_state");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, interface, admin_state);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, interface, admin_state);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "oper_status");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, interface, oper_status);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, interface, oper_status);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "min_data_agg_port_id");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, interface, min_data_agg_port_id);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, interface, min_data_agg_port_id);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "min_data_svc_port_id");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, interface, min_data_svc_port_id);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, interface, min_data_svc_port_id);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "transceiver_type");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, interface, transceiver_type);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, interface, transceiver_type);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ds_miss_mode");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, interface, ds_miss_mode);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, interface, ds_miss_mode);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mtu");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, interface, mtu);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, interface, mtu);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "flow_control");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, interface, flow_control);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, interface, flow_control);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ds_tm");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, interface, ds_tm);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, interface, ds_tm);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "us_tm");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, interface, us_tm);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, interface, us_tm);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "sub_term_id_list");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, interface, sub_term_id_list);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, interface, sub_term_id_list);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMBAL_CFG_PROP_IS_SET(&cfg, interface, admin_state) && !BCMBAL_CFG_PROP_IS_SET(&cfg, interface, oper_status) && !BCMBAL_CFG_PROP_IS_SET(&cfg, interface, min_data_agg_port_id) && !BCMBAL_CFG_PROP_IS_SET(&cfg, interface, min_data_svc_port_id) && !BCMBAL_CFG_PROP_IS_SET(&cfg, interface, transceiver_type) && !BCMBAL_CFG_PROP_IS_SET(&cfg, interface, ds_miss_mode) && !BCMBAL_CFG_PROP_IS_SET(&cfg, interface, mtu) && !BCMBAL_CFG_PROP_IS_SET(&cfg, interface, flow_control) && !BCMBAL_CFG_PROP_IS_SET(&cfg, interface, ds_tm) && !BCMBAL_CFG_PROP_IS_SET(&cfg, interface, us_tm) && !BCMBAL_CFG_PROP_IS_SET(&cfg, interface, sub_term_id_list))
+    {
+        BCMBAL_CFG_PROP_GET(&cfg, interface, all_properties);
+        bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, interface, all_properties);\n");
+    }
+
+    /* set memory to use for variable-sized lists */
+    list_mem = bcmbal_apicli_byte_pool_calloc(byte_pool, BCMBAL_APICLI_DYNAMIC_LIST_BUFFER_SIZE);
+    if (list_mem == NULL)
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+        return BCM_ERR_NOMEM;
+    }
+
+    bcmcli_log("list_mem = bcmos_calloc(BCMBAL_APICLI_DYNAMIC_LIST_BUFFER_SIZE);\n");
+    BCMBAL_CFG_LIST_BUF_SET(&cfg, interface, list_mem, BCMBAL_APICLI_DYNAMIC_LIST_BUFFER_SIZE);
+    bcmcli_log("BCMBAL_CFG_LIST_BUF_SET(&cfg, interface, list_mem, BCMBAL_APICLI_DYNAMIC_LIST_BUFFER_SIZE);\n");
+
+    /* call API */
+    err = bcmbal_cfg_get(&cfg.hdr);
+    bcmcli_log("bcmbal_cfg_get(&cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        bcmbal_apicli_print_data_start(session);
+        err = bcmbal_apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    bcmbal_apicli_print_complete(session, err, NULL);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmbal_cli_interface_cfg_set(bcmcli_session *session, bcmbal_apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmbal_interface_cfg cfg;       /**< declare main API struct */
+    bcmbal_interface_key key = { }; /**< declare key */
+    bcmcli_log("bcmbal_interface_cfg cfg;\n");
+    bcmcli_log("bcmbal_interface_key key = {  };\n");
+    bcmbal_apicli_print_start(session, "bcmbal_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "intf_id");
+    if (cli_parm != NULL)
+    {
+        key.intf_id = cli_parm->value.unumber;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "intf_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.intf_id = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_INTERFACE, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_INTERFACE_KEY_ID_INTF_ID, &key.intf_id);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "intf_type");
+    if (cli_parm != NULL)
+    {
+        key.intf_type = (bcmbal_intf_type) cli_parm->value.enum_val;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "intf_type is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.intf_type = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_INTERFACE, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_INTERFACE_KEY_ID_INTF_TYPE, &key.intf_type);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMBAL_CFG_INIT(&cfg, interface, key);
+    bcmcli_log("BCMBAL_CFG_INIT(&cfg, interface, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "admin_state");
+    if (cli_parm != NULL)
+    {
+        bcmbal_state val;
+        val = (bcmbal_state) cli_parm->value.enum_val;
+        BCMBAL_CFG_PROP_SET(&cfg, interface, admin_state, val);
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, interface, admin_state, ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_INTERFACE, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_INTERFACE_CFG_ID_ADMIN_STATE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "min_data_agg_port_id");
+    if (cli_parm != NULL)
+    {
+        bcmbal_aggregation_port_id val;
+        val = (bcmbal_aggregation_port_id) cli_parm->value.unumber;
+        BCMBAL_CFG_PROP_SET(&cfg, interface, min_data_agg_port_id, val);
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, interface, min_data_agg_port_id, ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_INTERFACE, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_INTERFACE_CFG_ID_MIN_DATA_AGG_PORT_ID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "min_data_svc_port_id");
+    if (cli_parm != NULL)
+    {
+        bcmbal_service_port_id val;
+        val = (bcmbal_service_port_id) cli_parm->value.unumber;
+        BCMBAL_CFG_PROP_SET(&cfg, interface, min_data_svc_port_id, val);
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, interface, min_data_svc_port_id, ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_INTERFACE, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_INTERFACE_CFG_ID_MIN_DATA_SVC_PORT_ID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "transceiver_type");
+    if (cli_parm != NULL)
+    {
+        bcmbal_trx_type val;
+        val = (bcmbal_trx_type) cli_parm->value.enum_val;
+        BCMBAL_CFG_PROP_SET(&cfg, interface, transceiver_type, val);
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, interface, transceiver_type, ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_INTERFACE, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_INTERFACE_CFG_ID_TRANSCEIVER_TYPE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ds_miss_mode");
+    if (cli_parm != NULL)
+    {
+        bcmbal_ds_miss_mode val;
+        val = (bcmbal_ds_miss_mode) cli_parm->value.enum_val;
+        BCMBAL_CFG_PROP_SET(&cfg, interface, ds_miss_mode, val);
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, interface, ds_miss_mode, ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_INTERFACE, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_INTERFACE_CFG_ID_DS_MISS_MODE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mtu");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMBAL_CFG_PROP_SET(&cfg, interface, mtu, val);
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, interface, mtu, ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_INTERFACE, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_INTERFACE_CFG_ID_MTU, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "flow_control");
+    if (cli_parm != NULL)
+    {
+        bcmbal_control val;
+        val = (bcmbal_control) cli_parm->value.enum_val;
+        BCMBAL_CFG_PROP_SET(&cfg, interface, flow_control, val);
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, interface, flow_control, ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_INTERFACE, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_INTERFACE_CFG_ID_FLOW_CONTROL, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ds_tm");
+    if (cli_parm != NULL)
+    {
+        bcmbal_tm_sched_id val;
+        val = (bcmbal_tm_sched_id) cli_parm->value.unumber;
+        BCMBAL_CFG_PROP_SET(&cfg, interface, ds_tm, val);
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, interface, ds_tm, ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_INTERFACE, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_INTERFACE_CFG_ID_DS_TM, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "us_tm");
+    if (cli_parm != NULL)
+    {
+        bcmbal_tm_sched_id val;
+        val = (bcmbal_tm_sched_id) cli_parm->value.unumber;
+        BCMBAL_CFG_PROP_SET(&cfg, interface, us_tm, val);
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, interface, us_tm, ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_INTERFACE, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_INTERFACE_CFG_ID_US_TM, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmbal_cfg_set(&cfg.hdr);
+    bcmcli_log("bcmbal_cfg_set(&cfg.hdr);\n");
+    bcmbal_apicli_print_complete(session, err, NULL);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmbal_cli_interface_cfg_clear(bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmbal_interface_cfg cfg;       /**< declare main API struct */
+    bcmbal_interface_key key = { }; /**< declare key */
+    bcmcli_log("bcmbal_interface_cfg cfg;\n");
+    bcmcli_log("bcmbal_interface_key key = {  };\n");
+    bcmbal_apicli_print_start(session, "bcmbal_cfg_clear");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "intf_id");
+    if (cli_parm != NULL)
+    {
+        key.intf_id = cli_parm->value.unumber;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "intf_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.intf_id = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_INTERFACE, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_INTERFACE_KEY_ID_INTF_ID, &key.intf_id);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "intf_type");
+    if (cli_parm != NULL)
+    {
+        key.intf_type = (bcmbal_intf_type) cli_parm->value.enum_val;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "intf_type is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.intf_type = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_INTERFACE, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_INTERFACE_KEY_ID_INTF_TYPE, &key.intf_type);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMBAL_CFG_INIT(&cfg, interface, key);
+    bcmcli_log("BCMBAL_CFG_INIT(&cfg, interface, key);\n");
+
+    /* call API */
+    err = bcmbal_cfg_clear(&cfg.hdr);
+    bcmcli_log("bcmbal_cfg_clear(&cfg.hdr);\n");
+    bcmbal_apicli_print_complete(session, err, NULL);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmbal_cli_interface_stat_get(bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmbal_interface_stat stat;     /**< declare main API struct */
+    bcmbal_interface_key key = { }; /**< declare key */
+    bcmcli_log("bcmbal_interface_stat stat;\n");
+    bcmcli_log("bcmbal_interface_key key = {  };\n");
+    bcmbal_apicli_print_start(session, "bcmbal_stat_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "intf_id");
+    if (cli_parm != NULL)
+    {
+        key.intf_id = cli_parm->value.unumber;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "intf_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.intf_id = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_INTERFACE, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_INTERFACE_KEY_ID_INTF_ID, &key.intf_id);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "intf_type");
+    if (cli_parm != NULL)
+    {
+        key.intf_type = (bcmbal_intf_type) cli_parm->value.enum_val;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "intf_type is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.intf_type = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_INTERFACE, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_INTERFACE_KEY_ID_INTF_TYPE, &key.intf_type);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMBAL_STAT_INIT(&stat, interface, key);
+    bcmcli_log("BCMBAL_STAT_INIT(&stat, interface, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "rx_packets");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_STAT_PROP_GET(&stat, interface, rx_packets);
+            bcmcli_log("BCMBAL_STAT_PROP_GET(&stat, interface, rx_packets);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_bytes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_STAT_PROP_GET(&stat, interface, rx_bytes);
+            bcmcli_log("BCMBAL_STAT_PROP_GET(&stat, interface, rx_bytes);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_packets");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_STAT_PROP_GET(&stat, interface, tx_packets);
+            bcmcli_log("BCMBAL_STAT_PROP_GET(&stat, interface, tx_packets);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_bytes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_STAT_PROP_GET(&stat, interface, tx_bytes);
+            bcmcli_log("BCMBAL_STAT_PROP_GET(&stat, interface, tx_bytes);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMBAL_STAT_PROP_IS_SET(&stat, interface, rx_packets) && !BCMBAL_STAT_PROP_IS_SET(&stat, interface, rx_bytes) && !BCMBAL_STAT_PROP_IS_SET(&stat, interface, tx_packets) && !BCMBAL_STAT_PROP_IS_SET(&stat, interface, tx_bytes))
+    {
+        BCMBAL_STAT_PROP_GET(&stat, interface, all_properties);
+        bcmcli_log("BCMBAL_STAT_PROP_GET(&stat, interface, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmbal_stat_get(&stat.hdr);
+    bcmcli_log("bcmbal_stat_get(&stat.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        bcmbal_apicli_print_data_start(session);
+        err = bcmbal_apicli_msg_dump(session, &stat.hdr.hdr);
+    }
+
+    bcmbal_apicli_print_complete(session, err, NULL);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmbal_cli_packet_cfg_get(bcmcli_session *session, bcmbal_apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmbal_packet_cfg cfg;          /**< declare main API struct */
+    bcmbal_packet_key key = { };    /**< declare key */
+    uint8_t *list_mem;              /**< declare memory buffer for variable-sized lists */
+    bcmcli_log("bcmbal_packet_cfg cfg;\n");
+    bcmcli_log("bcmbal_packet_key key = {  };\n");
+    bcmcli_log("uint8_t* list_mem;\n");
+    bcmbal_apicli_print_start(session, "bcmbal_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "reserved");
+    if (cli_parm != NULL)
+    {
+        key.reserved = cli_parm->value.unumber;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "reserved is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.reserved = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_PACKET, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_PACKET_KEY_ID_RESERVED, &key.reserved);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_parm_by_prefix(session, "packet_send_dest.");
+    if (cli_parm != NULL)
+    {
+        cli_parm = bcmcli_find_named_parm(session, "packet_send_dest.type");
+        if (cli_parm != NULL)
+        {
+            key.packet_send_dest.type = (bcmbal_dest_type) cli_parm->value.enum_val;
+        }
+        else
+        {
+            bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "packet_send_dest.type is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        switch (key.packet_send_dest.type)
+        {
+            case BCMBAL_DEST_TYPE_NNI:
+                cli_parm = bcmcli_find_named_parm(session, "packet_send_dest.int_id");
+                if (cli_parm != NULL)
+                {
+                    key.packet_send_dest.u.nni.int_id = (bcmbal_intf_id) cli_parm->value.unumber;
+                }
+                else
+                {
+                    bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "packet_send_dest.int_id is not set\n");
+                    return BCM_ERR_PARM;
+                }
+                break;
+            case BCMBAL_DEST_TYPE_SUB_TERM:
+                cli_parm = bcmcli_find_named_parm(session, "packet_send_dest.sub_term_id");
+                if (cli_parm != NULL)
+                {
+                    key.packet_send_dest.u.sub_term.sub_term_id = (bcmbal_sub_id) cli_parm->value.unumber;
+                }
+                else
+                {
+                    bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "packet_send_dest.sub_term_id is not set\n");
+                    return BCM_ERR_PARM;
+                }
+
+                cli_parm = bcmcli_find_named_parm(session, "packet_send_dest.sub_term_uni");
+                if (cli_parm != NULL)
+                {
+                    key.packet_send_dest.u.sub_term.sub_term_uni = cli_parm->value.unumber;
+                }
+                else
+                {
+                    bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "packet_send_dest.sub_term_uni is not set\n");
+                    return BCM_ERR_PARM;
+                }
+
+                cli_parm = bcmcli_find_named_parm(session, "packet_send_dest.int_id");
+                if (cli_parm != NULL)
+                {
+                    key.packet_send_dest.u.sub_term.int_id = cli_parm->value.unumber;
+                }
+                else
+                {
+                    bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "packet_send_dest.int_id is not set\n");
+                    return BCM_ERR_PARM;
+                }
+                break;
+            case BCMBAL_DEST_TYPE_HOST:
+                break;
+            default:
+                bcmbal_apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+                return BCM_ERR_RANGE;
+        }
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "packet_send_dest is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.packet_send_dest = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_PACKET, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_PACKET_KEY_ID_PACKET_SEND_DEST, &key.packet_send_dest);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMBAL_CFG_INIT(&cfg, packet, key);
+    bcmcli_log("BCMBAL_CFG_INIT(&cfg, packet, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "flow_id");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, packet, flow_id);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, packet, flow_id);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "flow_type");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, packet, flow_type);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, packet, flow_type);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "intf_id");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, packet, intf_id);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, packet, intf_id);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "intf_type");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, packet, intf_type);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, packet, intf_type);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "svc_port");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, packet, svc_port);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, packet, svc_port);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "flow_cookie");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, packet, flow_cookie);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, packet, flow_cookie);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "pkt");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, packet, pkt);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, packet, pkt);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMBAL_CFG_PROP_IS_SET(&cfg, packet, flow_id) && !BCMBAL_CFG_PROP_IS_SET(&cfg, packet, flow_type) && !BCMBAL_CFG_PROP_IS_SET(&cfg, packet, intf_id) && !BCMBAL_CFG_PROP_IS_SET(&cfg, packet, intf_type) && !BCMBAL_CFG_PROP_IS_SET(&cfg, packet, svc_port) && !BCMBAL_CFG_PROP_IS_SET(&cfg, packet, flow_cookie) && !BCMBAL_CFG_PROP_IS_SET(&cfg, packet, pkt))
+    {
+        BCMBAL_CFG_PROP_GET(&cfg, packet, all_properties);
+        bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, packet, all_properties);\n");
+    }
+
+    /* set memory to use for variable-sized lists */
+    list_mem = bcmbal_apicli_byte_pool_calloc(byte_pool, BCMBAL_APICLI_DYNAMIC_LIST_BUFFER_SIZE);
+    if (list_mem == NULL)
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+        return BCM_ERR_NOMEM;
+    }
+
+    bcmcli_log("list_mem = bcmos_calloc(BCMBAL_APICLI_DYNAMIC_LIST_BUFFER_SIZE);\n");
+    BCMBAL_CFG_LIST_BUF_SET(&cfg, packet, list_mem, BCMBAL_APICLI_DYNAMIC_LIST_BUFFER_SIZE);
+    bcmcli_log("BCMBAL_CFG_LIST_BUF_SET(&cfg, packet, list_mem, BCMBAL_APICLI_DYNAMIC_LIST_BUFFER_SIZE);\n");
+
+    /* call API */
+    err = bcmbal_cfg_get(&cfg.hdr);
+    bcmcli_log("bcmbal_cfg_get(&cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        bcmbal_apicli_print_data_start(session);
+        err = bcmbal_apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    bcmbal_apicli_print_complete(session, err, NULL);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmbal_cli_packet_cfg_set(bcmcli_session *session, bcmbal_apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmbal_packet_cfg cfg;          /**< declare main API struct */
+    bcmbal_packet_key key = { };    /**< declare key */
+    bcmcli_log("bcmbal_packet_cfg cfg;\n");
+    bcmcli_log("bcmbal_packet_key key = {  };\n");
+    bcmbal_apicli_print_start(session, "bcmbal_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "reserved");
+    if (cli_parm != NULL)
+    {
+        key.reserved = cli_parm->value.unumber;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "reserved is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.reserved = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_PACKET, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_PACKET_KEY_ID_RESERVED, &key.reserved);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_parm_by_prefix(session, "packet_send_dest.");
+    if (cli_parm != NULL)
+    {
+        cli_parm = bcmcli_find_named_parm(session, "packet_send_dest.type");
+        if (cli_parm != NULL)
+        {
+            key.packet_send_dest.type = (bcmbal_dest_type) cli_parm->value.enum_val;
+        }
+        else
+        {
+            bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "packet_send_dest.type is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        switch (key.packet_send_dest.type)
+        {
+            case BCMBAL_DEST_TYPE_NNI:
+                cli_parm = bcmcli_find_named_parm(session, "packet_send_dest.int_id");
+                if (cli_parm != NULL)
+                {
+                    key.packet_send_dest.u.nni.int_id = (bcmbal_intf_id) cli_parm->value.unumber;
+                }
+                else
+                {
+                    bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "packet_send_dest.int_id is not set\n");
+                    return BCM_ERR_PARM;
+                }
+                break;
+            case BCMBAL_DEST_TYPE_SUB_TERM:
+                cli_parm = bcmcli_find_named_parm(session, "packet_send_dest.sub_term_id");
+                if (cli_parm != NULL)
+                {
+                    key.packet_send_dest.u.sub_term.sub_term_id = (bcmbal_sub_id) cli_parm->value.unumber;
+                }
+                else
+                {
+                    bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "packet_send_dest.sub_term_id is not set\n");
+                    return BCM_ERR_PARM;
+                }
+
+                cli_parm = bcmcli_find_named_parm(session, "packet_send_dest.sub_term_uni");
+                if (cli_parm != NULL)
+                {
+                    key.packet_send_dest.u.sub_term.sub_term_uni = cli_parm->value.unumber;
+                }
+                else
+                {
+                    bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "packet_send_dest.sub_term_uni is not set\n");
+                    return BCM_ERR_PARM;
+                }
+
+                cli_parm = bcmcli_find_named_parm(session, "packet_send_dest.int_id");
+                if (cli_parm != NULL)
+                {
+                    key.packet_send_dest.u.sub_term.int_id = cli_parm->value.unumber;
+                }
+                else
+                {
+                    bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "packet_send_dest.int_id is not set\n");
+                    return BCM_ERR_PARM;
+                }
+                break;
+            case BCMBAL_DEST_TYPE_HOST:
+                break;
+            default:
+                bcmbal_apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+                return BCM_ERR_RANGE;
+        }
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "packet_send_dest is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.packet_send_dest = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_PACKET, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_PACKET_KEY_ID_PACKET_SEND_DEST, &key.packet_send_dest);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMBAL_CFG_INIT(&cfg, packet, key);
+    bcmcli_log("BCMBAL_CFG_INIT(&cfg, packet, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "flow_id");
+    if (cli_parm != NULL)
+    {
+        bcmbal_flow_id val;
+        val = (bcmbal_flow_id) cli_parm->value.unumber;
+        BCMBAL_CFG_PROP_SET(&cfg, packet, flow_id, val);
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, packet, flow_id, ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_PACKET, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_PACKET_CFG_ID_FLOW_ID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "flow_type");
+    if (cli_parm != NULL)
+    {
+        bcmbal_flow_type val;
+        val = (bcmbal_flow_type) cli_parm->value.enum_val;
+        BCMBAL_CFG_PROP_SET(&cfg, packet, flow_type, val);
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, packet, flow_type, ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_PACKET, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_PACKET_CFG_ID_FLOW_TYPE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "intf_id");
+    if (cli_parm != NULL)
+    {
+        bcmbal_intf_id val;
+        val = (bcmbal_intf_id) cli_parm->value.unumber;
+        BCMBAL_CFG_PROP_SET(&cfg, packet, intf_id, val);
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, packet, intf_id, ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_PACKET, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_PACKET_CFG_ID_INTF_ID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "intf_type");
+    if (cli_parm != NULL)
+    {
+        bcmbal_intf_type val;
+        val = (bcmbal_intf_type) cli_parm->value.enum_val;
+        BCMBAL_CFG_PROP_SET(&cfg, packet, intf_type, val);
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, packet, intf_type, ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_PACKET, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_PACKET_CFG_ID_INTF_TYPE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "svc_port");
+    if (cli_parm != NULL)
+    {
+        bcmbal_service_port_id val;
+        val = (bcmbal_service_port_id) cli_parm->value.unumber;
+        BCMBAL_CFG_PROP_SET(&cfg, packet, svc_port, val);
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, packet, svc_port, ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_PACKET, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_PACKET_CFG_ID_SVC_PORT, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "flow_cookie");
+    if (cli_parm != NULL)
+    {
+        bcmbal_cookie val;
+        val = (bcmbal_cookie) cli_parm->value.unumber64;
+        BCMBAL_CFG_PROP_SET(&cfg, packet, flow_cookie, val);
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, packet, flow_cookie, ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_PACKET, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_PACKET_CFG_ID_FLOW_COOKIE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "pkt");
+    if (cli_parm != NULL)
+    {
+        bcmbal_u8_list_u32 val = { };
+        val.len = bcmbal_buf_get_used(&cli_parm->value.buffer);
+        val.val = bcmbal_apicli_byte_pool_calloc(byte_pool, val.len);
+        if (val.val == NULL)
+        {
+            bcmbal_apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+            return BCM_ERR_NOMEM;
+        }
+
+        bcmbal_buf_set_pos(&cli_parm->value.buffer, 0);
+        bcmbal_buf_read(&cli_parm->value.buffer, val.val, val.len);
+        BCMBAL_CFG_PROP_SET(&cfg, packet, pkt, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmbal_u8_list_u32 val = ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_PACKET, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_PACKET_CFG_ID_PKT, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, packet, pkt, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmbal_cfg_set(&cfg.hdr);
+    bcmcli_log("bcmbal_cfg_set(&cfg.hdr);\n");
+    bcmbal_apicli_print_complete(session, err, NULL);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmbal_cli_packet_cfg_clear(bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmbal_packet_cfg cfg;          /**< declare main API struct */
+    bcmbal_packet_key key = { };    /**< declare key */
+    bcmcli_log("bcmbal_packet_cfg cfg;\n");
+    bcmcli_log("bcmbal_packet_key key = {  };\n");
+    bcmbal_apicli_print_start(session, "bcmbal_cfg_clear");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "reserved");
+    if (cli_parm != NULL)
+    {
+        key.reserved = cli_parm->value.unumber;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "reserved is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.reserved = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_PACKET, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_PACKET_KEY_ID_RESERVED, &key.reserved);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_parm_by_prefix(session, "packet_send_dest.");
+    if (cli_parm != NULL)
+    {
+        cli_parm = bcmcli_find_named_parm(session, "packet_send_dest.type");
+        if (cli_parm != NULL)
+        {
+            key.packet_send_dest.type = (bcmbal_dest_type) cli_parm->value.enum_val;
+        }
+        else
+        {
+            bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "packet_send_dest.type is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        switch (key.packet_send_dest.type)
+        {
+            case BCMBAL_DEST_TYPE_NNI:
+                cli_parm = bcmcli_find_named_parm(session, "packet_send_dest.int_id");
+                if (cli_parm != NULL)
+                {
+                    key.packet_send_dest.u.nni.int_id = (bcmbal_intf_id) cli_parm->value.unumber;
+                }
+                else
+                {
+                    bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "packet_send_dest.int_id is not set\n");
+                    return BCM_ERR_PARM;
+                }
+                break;
+            case BCMBAL_DEST_TYPE_SUB_TERM:
+                cli_parm = bcmcli_find_named_parm(session, "packet_send_dest.sub_term_id");
+                if (cli_parm != NULL)
+                {
+                    key.packet_send_dest.u.sub_term.sub_term_id = (bcmbal_sub_id) cli_parm->value.unumber;
+                }
+                else
+                {
+                    bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "packet_send_dest.sub_term_id is not set\n");
+                    return BCM_ERR_PARM;
+                }
+
+                cli_parm = bcmcli_find_named_parm(session, "packet_send_dest.sub_term_uni");
+                if (cli_parm != NULL)
+                {
+                    key.packet_send_dest.u.sub_term.sub_term_uni = cli_parm->value.unumber;
+                }
+                else
+                {
+                    bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "packet_send_dest.sub_term_uni is not set\n");
+                    return BCM_ERR_PARM;
+                }
+
+                cli_parm = bcmcli_find_named_parm(session, "packet_send_dest.int_id");
+                if (cli_parm != NULL)
+                {
+                    key.packet_send_dest.u.sub_term.int_id = cli_parm->value.unumber;
+                }
+                else
+                {
+                    bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "packet_send_dest.int_id is not set\n");
+                    return BCM_ERR_PARM;
+                }
+                break;
+            case BCMBAL_DEST_TYPE_HOST:
+                break;
+            default:
+                bcmbal_apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+                return BCM_ERR_RANGE;
+        }
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "packet_send_dest is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.packet_send_dest = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_PACKET, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_PACKET_KEY_ID_PACKET_SEND_DEST, &key.packet_send_dest);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMBAL_CFG_INIT(&cfg, packet, key);
+    bcmcli_log("BCMBAL_CFG_INIT(&cfg, packet, key);\n");
+
+    /* call API */
+    err = bcmbal_cfg_clear(&cfg.hdr);
+    bcmcli_log("bcmbal_cfg_clear(&cfg.hdr);\n");
+    bcmbal_apicli_print_complete(session, err, NULL);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmbal_cli_subscriber_terminal_cfg_get(bcmcli_session *session, bcmbal_apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmbal_subscriber_terminal_cfg cfg;         /**< declare main API struct */
+    bcmbal_subscriber_terminal_key key = { };   /**< declare key */
+    uint8_t *list_mem;  /**< declare memory buffer for variable-sized lists */
+    bcmcli_log("bcmbal_subscriber_terminal_cfg cfg;\n");
+    bcmcli_log("bcmbal_subscriber_terminal_key key = {  };\n");
+    bcmcli_log("uint8_t* list_mem;\n");
+    bcmbal_apicli_print_start(session, "bcmbal_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "sub_term_id");
+    if (cli_parm != NULL)
+    {
+        key.sub_term_id = (bcmbal_sub_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "sub_term_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.sub_term_id = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_SUBSCRIBER_TERMINAL_KEY_ID_SUB_TERM_ID, &key.sub_term_id);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "intf_id");
+    if (cli_parm != NULL)
+    {
+        key.intf_id = (bcmbal_intf_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "intf_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.intf_id = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_SUBSCRIBER_TERMINAL_KEY_ID_INTF_ID, &key.intf_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMBAL_CFG_INIT(&cfg, subscriber_terminal, key);
+    bcmcli_log("BCMBAL_CFG_INIT(&cfg, subscriber_terminal, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "admin_state");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, subscriber_terminal, admin_state);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, subscriber_terminal, admin_state);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "oper_status");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, subscriber_terminal, oper_status);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, subscriber_terminal, oper_status);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "serial_number");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, subscriber_terminal, serial_number);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, subscriber_terminal, serial_number);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "password");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, subscriber_terminal, password);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, subscriber_terminal, password);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "registration_id");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, subscriber_terminal, registration_id);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, subscriber_terminal, registration_id);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "svc_port_id");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, subscriber_terminal, svc_port_id);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, subscriber_terminal, svc_port_id);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mac_address");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, subscriber_terminal, mac_address);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, subscriber_terminal, mac_address);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ds_tm");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, subscriber_terminal, ds_tm);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, subscriber_terminal, ds_tm);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "us_tm");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, subscriber_terminal, us_tm);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, subscriber_terminal, us_tm);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "svc_port_id_list");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, subscriber_terminal, svc_port_id_list);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, subscriber_terminal, svc_port_id_list);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "agg_port_id_list");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, subscriber_terminal, agg_port_id_list);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, subscriber_terminal, agg_port_id_list);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMBAL_CFG_PROP_IS_SET(&cfg, subscriber_terminal, admin_state) && !BCMBAL_CFG_PROP_IS_SET(&cfg, subscriber_terminal, oper_status) && !BCMBAL_CFG_PROP_IS_SET(&cfg, subscriber_terminal, serial_number) && !BCMBAL_CFG_PROP_IS_SET(&cfg, subscriber_terminal, password) && !BCMBAL_CFG_PROP_IS_SET(&cfg, subscriber_terminal, registration_id) && !BCMBAL_CFG_PROP_IS_SET(&cfg, subscriber_terminal, svc_port_id) && !BCMBAL_CFG_PROP_IS_SET(&cfg, subscriber_terminal, mac_address) && !BCMBAL_CFG_PROP_IS_SET(&cfg, subscriber_terminal, ds_tm) && !BCMBAL_CFG_PROP_IS_SET(&cfg, subscriber_terminal, us_tm) && !BCMBAL_CFG_PROP_IS_SET(&cfg, subscriber_terminal, svc_port_id_list) && !BCMBAL_CFG_PROP_IS_SET(&cfg, subscriber_terminal, agg_port_id_list))
+    {
+        BCMBAL_CFG_PROP_GET(&cfg, subscriber_terminal, all_properties);
+        bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, subscriber_terminal, all_properties);\n");
+    }
+
+    /* set memory to use for variable-sized lists */
+    list_mem = bcmbal_apicli_byte_pool_calloc(byte_pool, BCMBAL_APICLI_DYNAMIC_LIST_BUFFER_SIZE);
+    if (list_mem == NULL)
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+        return BCM_ERR_NOMEM;
+    }
+
+    bcmcli_log("list_mem = bcmos_calloc(BCMBAL_APICLI_DYNAMIC_LIST_BUFFER_SIZE);\n");
+    BCMBAL_CFG_LIST_BUF_SET(&cfg, subscriber_terminal, list_mem, BCMBAL_APICLI_DYNAMIC_LIST_BUFFER_SIZE);
+    bcmcli_log("BCMBAL_CFG_LIST_BUF_SET(&cfg, subscriber_terminal, list_mem, BCMBAL_APICLI_DYNAMIC_LIST_BUFFER_SIZE);\n");
+
+    /* call API */
+    err = bcmbal_cfg_get(&cfg.hdr);
+    bcmcli_log("bcmbal_cfg_get(&cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        bcmbal_apicli_print_data_start(session);
+        err = bcmbal_apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    bcmbal_apicli_print_complete(session, err, NULL);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmbal_cli_subscriber_terminal_cfg_set(bcmcli_session *session, bcmbal_apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmbal_subscriber_terminal_cfg cfg; /**< declare main API struct */
+    bcmbal_subscriber_terminal_key key = { };   /**< declare key */
+    bcmcli_log("bcmbal_subscriber_terminal_cfg cfg;\n");
+    bcmcli_log("bcmbal_subscriber_terminal_key key = {  };\n");
+    bcmbal_apicli_print_start(session, "bcmbal_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "sub_term_id");
+    if (cli_parm != NULL)
+    {
+        key.sub_term_id = (bcmbal_sub_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "sub_term_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.sub_term_id = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_SUBSCRIBER_TERMINAL_KEY_ID_SUB_TERM_ID, &key.sub_term_id);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "intf_id");
+    if (cli_parm != NULL)
+    {
+        key.intf_id = (bcmbal_intf_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "intf_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.intf_id = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_SUBSCRIBER_TERMINAL_KEY_ID_INTF_ID, &key.intf_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMBAL_CFG_INIT(&cfg, subscriber_terminal, key);
+    bcmcli_log("BCMBAL_CFG_INIT(&cfg, subscriber_terminal, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "admin_state");
+    if (cli_parm != NULL)
+    {
+        bcmbal_state val;
+        val = (bcmbal_state) cli_parm->value.enum_val;
+        BCMBAL_CFG_PROP_SET(&cfg, subscriber_terminal, admin_state, val);
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, subscriber_terminal, admin_state, ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_ADMIN_STATE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "serial_number.");
+    if (cli_parm != NULL)
+    {
+        bcmbal_serial_number val = { };
+        cli_parm = bcmcli_find_named_parm(session, "serial_number.vendor_id");
+        if (cli_parm != NULL)
+        {
+            if (bcmbal_buf_get_used(&cli_parm->value.buffer) != 4)
+            {
+                bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "buffer serial_number.vendor_id must have 4 bytes\n");
+                return BCM_ERR_PARM;
+            }
+
+            bcmbal_buf_set_pos(&cli_parm->value.buffer, 0);
+            bcmbal_buf_read(&cli_parm->value.buffer, val.vendor_id, 4);
+        }
+        else
+        {
+            bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "serial_number.vendor_id is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "serial_number.vendor_specific");
+        if (cli_parm != NULL)
+        {
+            if (bcmbal_buf_get_used(&cli_parm->value.buffer) != 4)
+            {
+                bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "buffer serial_number.vendor_specific must have 4 bytes\n");
+                return BCM_ERR_PARM;
+            }
+
+            bcmbal_buf_set_pos(&cli_parm->value.buffer, 0);
+            bcmbal_buf_read(&cli_parm->value.buffer, val.vendor_specific, 4);
+        }
+        else
+        {
+            bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "serial_number.vendor_specific is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMBAL_CFG_PROP_SET(&cfg, subscriber_terminal, serial_number, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmbal_serial_number val = ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SERIAL_NUMBER, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, subscriber_terminal, serial_number, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "password.");
+    if (cli_parm != NULL)
+    {
+        bcmbal_password val = { };
+        cli_parm = bcmcli_find_named_parm(session, "password.arr");
+        if (cli_parm != NULL)
+        {
+            if (bcmbal_buf_get_used(&cli_parm->value.buffer) != 10)
+            {
+                bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "buffer password.arr must have 10 bytes\n");
+                return BCM_ERR_PARM;
+            }
+
+            bcmbal_buf_set_pos(&cli_parm->value.buffer, 0);
+            bcmbal_buf_read(&cli_parm->value.buffer, val.arr, 10);
+        }
+        else
+        {
+            bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "password.arr is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMBAL_CFG_PROP_SET(&cfg, subscriber_terminal, password, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmbal_password val = ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_PASSWORD, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, subscriber_terminal, password, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "registration_id.");
+    if (cli_parm != NULL)
+    {
+        bcmbal_registration_id val = { };
+        cli_parm = bcmcli_find_named_parm(session, "registration_id.arr");
+        if (cli_parm != NULL)
+        {
+            if (bcmbal_buf_get_used(&cli_parm->value.buffer) != 36)
+            {
+                bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "buffer registration_id.arr must have 36 bytes\n");
+                return BCM_ERR_PARM;
+            }
+
+            bcmbal_buf_set_pos(&cli_parm->value.buffer, 0);
+            bcmbal_buf_read(&cli_parm->value.buffer, val.arr, 36);
+        }
+        else
+        {
+            bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "registration_id.arr is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMBAL_CFG_PROP_SET(&cfg, subscriber_terminal, registration_id, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmbal_registration_id val = ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_REGISTRATION_ID, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, subscriber_terminal, registration_id, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mac_address");
+    if (cli_parm != NULL)
+    {
+        bcmos_mac_address val;
+        val = cli_parm->value.mac;
+        BCMBAL_CFG_PROP_SET(&cfg, subscriber_terminal, mac_address, val);
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, subscriber_terminal, mac_address, ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_MAC_ADDRESS, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ds_tm");
+    if (cli_parm != NULL)
+    {
+        bcmbal_tm_sched_id val;
+        val = (bcmbal_tm_sched_id) cli_parm->value.unumber;
+        BCMBAL_CFG_PROP_SET(&cfg, subscriber_terminal, ds_tm, val);
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, subscriber_terminal, ds_tm, ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_DS_TM, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "us_tm");
+    if (cli_parm != NULL)
+    {
+        bcmbal_tm_sched_id val;
+        val = (bcmbal_tm_sched_id) cli_parm->value.unumber;
+        BCMBAL_CFG_PROP_SET(&cfg, subscriber_terminal, us_tm, val);
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, subscriber_terminal, us_tm, ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_US_TM, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmbal_cfg_set(&cfg.hdr);
+    bcmcli_log("bcmbal_cfg_set(&cfg.hdr);\n");
+    bcmbal_apicli_print_complete(session, err, NULL);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmbal_cli_subscriber_terminal_cfg_clear(bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmbal_subscriber_terminal_cfg cfg;         /**< declare main API struct */
+    bcmbal_subscriber_terminal_key key = { };   /**< declare key */
+    bcmcli_log("bcmbal_subscriber_terminal_cfg cfg;\n");
+    bcmcli_log("bcmbal_subscriber_terminal_key key = {  };\n");
+    bcmbal_apicli_print_start(session, "bcmbal_cfg_clear");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "sub_term_id");
+    if (cli_parm != NULL)
+    {
+        key.sub_term_id = (bcmbal_sub_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "sub_term_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.sub_term_id = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_SUBSCRIBER_TERMINAL_KEY_ID_SUB_TERM_ID, &key.sub_term_id);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "intf_id");
+    if (cli_parm != NULL)
+    {
+        key.intf_id = (bcmbal_intf_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "intf_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.intf_id = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_SUBSCRIBER_TERMINAL_KEY_ID_INTF_ID, &key.intf_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMBAL_CFG_INIT(&cfg, subscriber_terminal, key);
+    bcmcli_log("BCMBAL_CFG_INIT(&cfg, subscriber_terminal, key);\n");
+
+    /* call API */
+    err = bcmbal_cfg_clear(&cfg.hdr);
+    bcmcli_log("bcmbal_cfg_clear(&cfg.hdr);\n");
+    bcmbal_apicli_print_complete(session, err, NULL);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmbal_cli_subscriber_terminal_stat_get(bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmbal_subscriber_terminal_stat stat;       /**< declare main API struct */
+    bcmbal_subscriber_terminal_key key = { };   /**< declare key */
+    bcmcli_log("bcmbal_subscriber_terminal_stat stat;\n");
+    bcmcli_log("bcmbal_subscriber_terminal_key key = {  };\n");
+    bcmbal_apicli_print_start(session, "bcmbal_stat_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "sub_term_id");
+    if (cli_parm != NULL)
+    {
+        key.sub_term_id = (bcmbal_sub_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "sub_term_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.sub_term_id = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_SUBSCRIBER_TERMINAL_KEY_ID_SUB_TERM_ID, &key.sub_term_id);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "intf_id");
+    if (cli_parm != NULL)
+    {
+        key.intf_id = (bcmbal_intf_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "intf_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.intf_id = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_SUBSCRIBER_TERMINAL_KEY_ID_INTF_ID, &key.intf_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMBAL_STAT_INIT(&stat, subscriber_terminal, key);
+    bcmcli_log("BCMBAL_STAT_INIT(&stat, subscriber_terminal, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "rx_packets");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_STAT_PROP_GET(&stat, subscriber_terminal, rx_packets);
+            bcmcli_log("BCMBAL_STAT_PROP_GET(&stat, subscriber_terminal, rx_packets);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_bytes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_STAT_PROP_GET(&stat, subscriber_terminal, rx_bytes);
+            bcmcli_log("BCMBAL_STAT_PROP_GET(&stat, subscriber_terminal, rx_bytes);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_packets");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_STAT_PROP_GET(&stat, subscriber_terminal, tx_packets);
+            bcmcli_log("BCMBAL_STAT_PROP_GET(&stat, subscriber_terminal, tx_packets);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_bytes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_STAT_PROP_GET(&stat, subscriber_terminal, tx_bytes);
+            bcmcli_log("BCMBAL_STAT_PROP_GET(&stat, subscriber_terminal, tx_bytes);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMBAL_STAT_PROP_IS_SET(&stat, subscriber_terminal, rx_packets) && !BCMBAL_STAT_PROP_IS_SET(&stat, subscriber_terminal, rx_bytes) && !BCMBAL_STAT_PROP_IS_SET(&stat, subscriber_terminal, tx_packets) && !BCMBAL_STAT_PROP_IS_SET(&stat, subscriber_terminal, tx_bytes))
+    {
+        BCMBAL_STAT_PROP_GET(&stat, subscriber_terminal, all_properties);
+        bcmcli_log("BCMBAL_STAT_PROP_GET(&stat, subscriber_terminal, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmbal_stat_get(&stat.hdr);
+    bcmcli_log("bcmbal_stat_get(&stat.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        bcmbal_apicli_print_data_start(session);
+        err = bcmbal_apicli_msg_dump(session, &stat.hdr.hdr);
+    }
+
+    bcmbal_apicli_print_complete(session, err, NULL);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmbal_cli_tm_queue_cfg_get(bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmbal_tm_queue_cfg cfg;        /**< declare main API struct */
+    bcmbal_tm_queue_key key = { };  /**< declare key */
+    bcmcli_log("bcmbal_tm_queue_cfg cfg;\n");
+    bcmcli_log("bcmbal_tm_queue_key key = {  };\n");
+    bcmbal_apicli_print_start(session, "bcmbal_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "sched_id");
+    if (cli_parm != NULL)
+    {
+        key.sched_id = (bcmbal_tm_sched_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "sched_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.sched_id = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_TM_QUEUE, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_TM_QUEUE_KEY_ID_SCHED_ID, &key.sched_id);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "sched_dir");
+    if (cli_parm != NULL)
+    {
+        key.sched_dir = (bcmbal_tm_sched_dir) cli_parm->value.enum_val;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "sched_dir is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.sched_dir = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_TM_QUEUE, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_TM_QUEUE_KEY_ID_SCHED_DIR, &key.sched_dir);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "id");
+    if (cli_parm != NULL)
+    {
+        key.id = (bcmbal_tm_queue_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.id = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_TM_QUEUE, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_TM_QUEUE_KEY_ID_ID, &key.id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMBAL_CFG_INIT(&cfg, tm_queue, key);
+    bcmcli_log("BCMBAL_CFG_INIT(&cfg, tm_queue, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "priority");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, tm_queue, priority);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, tm_queue, priority);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "weight");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, tm_queue, weight);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, tm_queue, weight);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rate");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, tm_queue, rate);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, tm_queue, rate);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "bac");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, tm_queue, bac);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, tm_queue, bac);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "creation_mode");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, tm_queue, creation_mode);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, tm_queue, creation_mode);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ref_count");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, tm_queue, ref_count);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, tm_queue, ref_count);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMBAL_CFG_PROP_IS_SET(&cfg, tm_queue, priority) && !BCMBAL_CFG_PROP_IS_SET(&cfg, tm_queue, weight) && !BCMBAL_CFG_PROP_IS_SET(&cfg, tm_queue, rate) && !BCMBAL_CFG_PROP_IS_SET(&cfg, tm_queue, bac) && !BCMBAL_CFG_PROP_IS_SET(&cfg, tm_queue, creation_mode) && !BCMBAL_CFG_PROP_IS_SET(&cfg, tm_queue, ref_count))
+    {
+        BCMBAL_CFG_PROP_GET(&cfg, tm_queue, all_properties);
+        bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, tm_queue, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmbal_cfg_get(&cfg.hdr);
+    bcmcli_log("bcmbal_cfg_get(&cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        bcmbal_apicli_print_data_start(session);
+        err = bcmbal_apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    bcmbal_apicli_print_complete(session, err, NULL);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmbal_cli_tm_queue_cfg_set(bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmbal_tm_queue_cfg cfg;        /**< declare main API struct */
+    bcmbal_tm_queue_key key = { };  /**< declare key */
+    bcmcli_log("bcmbal_tm_queue_cfg cfg;\n");
+    bcmcli_log("bcmbal_tm_queue_key key = {  };\n");
+    bcmbal_apicli_print_start(session, "bcmbal_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "sched_id");
+    if (cli_parm != NULL)
+    {
+        key.sched_id = (bcmbal_tm_sched_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "sched_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.sched_id = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_TM_QUEUE, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_TM_QUEUE_KEY_ID_SCHED_ID, &key.sched_id);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "sched_dir");
+    if (cli_parm != NULL)
+    {
+        key.sched_dir = (bcmbal_tm_sched_dir) cli_parm->value.enum_val;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "sched_dir is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.sched_dir = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_TM_QUEUE, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_TM_QUEUE_KEY_ID_SCHED_DIR, &key.sched_dir);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "id");
+    if (cli_parm != NULL)
+    {
+        key.id = (bcmbal_tm_queue_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.id = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_TM_QUEUE, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_TM_QUEUE_KEY_ID_ID, &key.id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMBAL_CFG_INIT(&cfg, tm_queue, key);
+    bcmcli_log("BCMBAL_CFG_INIT(&cfg, tm_queue, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "priority");
+    if (cli_parm != NULL)
+    {
+        bcmbal_tm_priority val;
+        val = (bcmbal_tm_priority) cli_parm->value.unumber;
+        BCMBAL_CFG_PROP_SET(&cfg, tm_queue, priority, val);
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, tm_queue, priority, ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_TM_QUEUE, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_TM_QUEUE_CFG_ID_PRIORITY, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "weight");
+    if (cli_parm != NULL)
+    {
+        bcmbal_tm_weight val;
+        val = (bcmbal_tm_weight) cli_parm->value.unumber;
+        BCMBAL_CFG_PROP_SET(&cfg, tm_queue, weight, val);
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, tm_queue, weight, ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_TM_QUEUE, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_TM_QUEUE_CFG_ID_WEIGHT, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "rate.");
+    if (cli_parm != NULL)
+    {
+        bcmbal_tm_shaping val = { };
+        cli_parm = bcmcli_find_named_parm(session, "rate.sbr");
+        if (cli_parm != NULL)
+        {
+            val.sbr = cli_parm->value.unumber;
+            val.presence_mask = val.presence_mask | BCMBAL_TM_SHAPING_ID_SBR;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "rate.pbr");
+        if (cli_parm != NULL)
+        {
+            val.pbr = cli_parm->value.unumber;
+            val.presence_mask = val.presence_mask | BCMBAL_TM_SHAPING_ID_PBR;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "rate.burst");
+        if (cli_parm != NULL)
+        {
+            val.burst = cli_parm->value.unumber;
+            val.presence_mask = val.presence_mask | BCMBAL_TM_SHAPING_ID_BURST;
+        }
+
+        BCMBAL_CFG_PROP_SET(&cfg, tm_queue, rate, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmbal_tm_shaping val = ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_TM_QUEUE, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_TM_QUEUE_CFG_ID_RATE, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, tm_queue, rate, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "bac.");
+    if (cli_parm != NULL)
+    {
+        bcmbal_tm_bac val = { };
+        cli_parm = bcmcli_find_named_parm(session, "bac.type");
+        if (cli_parm != NULL)
+        {
+            val.type = (bcmbal_tm_bac_type) cli_parm->value.enum_val;
+        }
+        else
+        {
+            bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "bac.type is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        switch (val.type)
+        {
+            case BCMBAL_TM_BAC_TYPE_TAILDROP:
+                cli_parm = bcmcli_find_named_parm(session, "bac.max_size");
+                if (cli_parm != NULL)
+                {
+                    val.u.taildrop.max_size = cli_parm->value.unumber;
+                }
+                else
+                {
+                    bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "bac.max_size is not set\n");
+                    return BCM_ERR_PARM;
+                }
+                break;
+            case BCMBAL_TM_BAC_TYPE_RED:
+                cli_parm = bcmcli_find_parm_by_prefix(session, "bac.red.");
+                if (cli_parm != NULL)
+                {
+                    cli_parm = bcmcli_find_named_parm(session, "bac.red.min_threshold");
+                    if (cli_parm != NULL)
+                    {
+                        val.u.red.red.min_threshold = (bcmbal_percent) cli_parm->value.unumber;
+                    }
+                    else
+                    {
+                        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "bac.red.min_threshold is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "bac.red.max_threshold");
+                    if (cli_parm != NULL)
+                    {
+                        val.u.red.red.max_threshold = (bcmbal_percent) cli_parm->value.unumber;
+                    }
+                    else
+                    {
+                        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "bac.red.max_threshold is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "bac.red.max_probability");
+                    if (cli_parm != NULL)
+                    {
+                        val.u.red.red.max_probability = (bcmbal_percent) cli_parm->value.unumber;
+                    }
+                    else
+                    {
+                        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "bac.red.max_probability is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                }
+                else
+                {
+                    bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "bac.red is not set\n");
+                    return BCM_ERR_PARM;
+                }
+                break;
+            case BCMBAL_TM_BAC_TYPE_WRED:
+                cli_parm = bcmcli_find_parm_by_prefix(session, "bac.green.");
+                if (cli_parm != NULL)
+                {
+                    cli_parm = bcmcli_find_named_parm(session, "bac.green.min_threshold");
+                    if (cli_parm != NULL)
+                    {
+                        val.u.wred.green.min_threshold = (bcmbal_percent) cli_parm->value.unumber;
+                    }
+                    else
+                    {
+                        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "bac.green.min_threshold is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "bac.green.max_threshold");
+                    if (cli_parm != NULL)
+                    {
+                        val.u.wred.green.max_threshold = (bcmbal_percent) cli_parm->value.unumber;
+                    }
+                    else
+                    {
+                        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "bac.green.max_threshold is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "bac.green.max_probability");
+                    if (cli_parm != NULL)
+                    {
+                        val.u.wred.green.max_probability = (bcmbal_percent) cli_parm->value.unumber;
+                    }
+                    else
+                    {
+                        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "bac.green.max_probability is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                }
+                else
+                {
+                    bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "bac.green is not set\n");
+                    return BCM_ERR_PARM;
+                }
+
+                cli_parm = bcmcli_find_parm_by_prefix(session, "bac.yellow.");
+                if (cli_parm != NULL)
+                {
+                    cli_parm = bcmcli_find_named_parm(session, "bac.yellow.min_threshold");
+                    if (cli_parm != NULL)
+                    {
+                        val.u.wred.yellow.min_threshold = (bcmbal_percent) cli_parm->value.unumber;
+                    }
+                    else
+                    {
+                        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "bac.yellow.min_threshold is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "bac.yellow.max_threshold");
+                    if (cli_parm != NULL)
+                    {
+                        val.u.wred.yellow.max_threshold = (bcmbal_percent) cli_parm->value.unumber;
+                    }
+                    else
+                    {
+                        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "bac.yellow.max_threshold is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "bac.yellow.max_probability");
+                    if (cli_parm != NULL)
+                    {
+                        val.u.wred.yellow.max_probability = (bcmbal_percent) cli_parm->value.unumber;
+                    }
+                    else
+                    {
+                        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "bac.yellow.max_probability is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                }
+                else
+                {
+                    bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "bac.yellow is not set\n");
+                    return BCM_ERR_PARM;
+                }
+
+                cli_parm = bcmcli_find_parm_by_prefix(session, "bac.red.");
+                if (cli_parm != NULL)
+                {
+                    cli_parm = bcmcli_find_named_parm(session, "bac.red.min_threshold");
+                    if (cli_parm != NULL)
+                    {
+                        val.u.wred.red.min_threshold = (bcmbal_percent) cli_parm->value.unumber;
+                    }
+                    else
+                    {
+                        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "bac.red.min_threshold is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "bac.red.max_threshold");
+                    if (cli_parm != NULL)
+                    {
+                        val.u.wred.red.max_threshold = (bcmbal_percent) cli_parm->value.unumber;
+                    }
+                    else
+                    {
+                        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "bac.red.max_threshold is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "bac.red.max_probability");
+                    if (cli_parm != NULL)
+                    {
+                        val.u.wred.red.max_probability = (bcmbal_percent) cli_parm->value.unumber;
+                    }
+                    else
+                    {
+                        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "bac.red.max_probability is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                }
+                else
+                {
+                    bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "bac.red is not set\n");
+                    return BCM_ERR_PARM;
+                }
+                break;
+            default:
+                bcmbal_apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+                return BCM_ERR_RANGE;
+        }
+
+        BCMBAL_CFG_PROP_SET(&cfg, tm_queue, bac, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmbal_tm_bac val = ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_TM_QUEUE, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_TM_QUEUE_CFG_ID_BAC, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, tm_queue, bac, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmbal_cfg_set(&cfg.hdr);
+    bcmcli_log("bcmbal_cfg_set(&cfg.hdr);\n");
+    bcmbal_apicli_print_complete(session, err, NULL);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmbal_cli_tm_queue_cfg_clear(bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmbal_tm_queue_cfg cfg;        /**< declare main API struct */
+    bcmbal_tm_queue_key key = { };  /**< declare key */
+    bcmcli_log("bcmbal_tm_queue_cfg cfg;\n");
+    bcmcli_log("bcmbal_tm_queue_key key = {  };\n");
+    bcmbal_apicli_print_start(session, "bcmbal_cfg_clear");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "sched_id");
+    if (cli_parm != NULL)
+    {
+        key.sched_id = (bcmbal_tm_sched_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "sched_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.sched_id = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_TM_QUEUE, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_TM_QUEUE_KEY_ID_SCHED_ID, &key.sched_id);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "sched_dir");
+    if (cli_parm != NULL)
+    {
+        key.sched_dir = (bcmbal_tm_sched_dir) cli_parm->value.enum_val;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "sched_dir is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.sched_dir = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_TM_QUEUE, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_TM_QUEUE_KEY_ID_SCHED_DIR, &key.sched_dir);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "id");
+    if (cli_parm != NULL)
+    {
+        key.id = (bcmbal_tm_queue_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.id = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_TM_QUEUE, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_TM_QUEUE_KEY_ID_ID, &key.id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMBAL_CFG_INIT(&cfg, tm_queue, key);
+    bcmcli_log("BCMBAL_CFG_INIT(&cfg, tm_queue, key);\n");
+
+    /* call API */
+    err = bcmbal_cfg_clear(&cfg.hdr);
+    bcmcli_log("bcmbal_cfg_clear(&cfg.hdr);\n");
+    bcmbal_apicli_print_complete(session, err, NULL);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmbal_cli_tm_queue_stat_get(bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmbal_tm_queue_stat stat;      /**< declare main API struct */
+    bcmbal_tm_queue_key key = { };  /**< declare key */
+    bcmcli_log("bcmbal_tm_queue_stat stat;\n");
+    bcmcli_log("bcmbal_tm_queue_key key = {  };\n");
+    bcmbal_apicli_print_start(session, "bcmbal_stat_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "sched_id");
+    if (cli_parm != NULL)
+    {
+        key.sched_id = (bcmbal_tm_sched_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "sched_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.sched_id = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_TM_QUEUE, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_TM_QUEUE_KEY_ID_SCHED_ID, &key.sched_id);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "sched_dir");
+    if (cli_parm != NULL)
+    {
+        key.sched_dir = (bcmbal_tm_sched_dir) cli_parm->value.enum_val;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "sched_dir is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.sched_dir = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_TM_QUEUE, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_TM_QUEUE_KEY_ID_SCHED_DIR, &key.sched_dir);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "id");
+    if (cli_parm != NULL)
+    {
+        key.id = (bcmbal_tm_queue_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.id = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_TM_QUEUE, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_TM_QUEUE_KEY_ID_ID, &key.id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMBAL_STAT_INIT(&stat, tm_queue, key);
+    bcmcli_log("BCMBAL_STAT_INIT(&stat, tm_queue, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "packets_ok");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_STAT_PROP_GET(&stat, tm_queue, packets_ok);
+            bcmcli_log("BCMBAL_STAT_PROP_GET(&stat, tm_queue, packets_ok);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "bytes_ok");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_STAT_PROP_GET(&stat, tm_queue, bytes_ok);
+            bcmcli_log("BCMBAL_STAT_PROP_GET(&stat, tm_queue, bytes_ok);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "packets_discarded");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_STAT_PROP_GET(&stat, tm_queue, packets_discarded);
+            bcmcli_log("BCMBAL_STAT_PROP_GET(&stat, tm_queue, packets_discarded);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "bytes_discarded");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_STAT_PROP_GET(&stat, tm_queue, bytes_discarded);
+            bcmcli_log("BCMBAL_STAT_PROP_GET(&stat, tm_queue, bytes_discarded);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMBAL_STAT_PROP_IS_SET(&stat, tm_queue, packets_ok) && !BCMBAL_STAT_PROP_IS_SET(&stat, tm_queue, bytes_ok) && !BCMBAL_STAT_PROP_IS_SET(&stat, tm_queue, packets_discarded) && !BCMBAL_STAT_PROP_IS_SET(&stat, tm_queue, bytes_discarded))
+    {
+        BCMBAL_STAT_PROP_GET(&stat, tm_queue, all_properties);
+        bcmcli_log("BCMBAL_STAT_PROP_GET(&stat, tm_queue, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmbal_stat_get(&stat.hdr);
+    bcmcli_log("bcmbal_stat_get(&stat.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        bcmbal_apicli_print_data_start(session);
+        err = bcmbal_apicli_msg_dump(session, &stat.hdr.hdr);
+    }
+
+    bcmbal_apicli_print_complete(session, err, NULL);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmbal_cli_tm_sched_cfg_get(bcmcli_session *session, bcmbal_apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmbal_tm_sched_cfg cfg;        /**< declare main API struct */
+    bcmbal_tm_sched_key key = { };  /**< declare key */
+    uint8_t *list_mem;              /**< declare memory buffer for variable-sized lists */
+    bcmcli_log("bcmbal_tm_sched_cfg cfg;\n");
+    bcmcli_log("bcmbal_tm_sched_key key = {  };\n");
+    bcmcli_log("uint8_t* list_mem;\n");
+    bcmbal_apicli_print_start(session, "bcmbal_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "dir");
+    if (cli_parm != NULL)
+    {
+        key.dir = (bcmbal_tm_sched_dir) cli_parm->value.enum_val;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "dir is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.dir = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_TM_SCHED, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_TM_SCHED_KEY_ID_DIR, &key.dir);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "id");
+    if (cli_parm != NULL)
+    {
+        key.id = (bcmbal_tm_sched_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.id = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_TM_SCHED, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_TM_SCHED_KEY_ID_ID, &key.id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMBAL_CFG_INIT(&cfg, tm_sched, key);
+    bcmcli_log("BCMBAL_CFG_INIT(&cfg, tm_sched, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "owner");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, tm_sched, owner);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, tm_sched, owner);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "sched_type");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, tm_sched, sched_type);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, tm_sched, sched_type);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "sched_parent");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, tm_sched, sched_parent);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, tm_sched, sched_parent);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "sched_child_type");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, tm_sched, sched_child_type);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, tm_sched, sched_child_type);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rate");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, tm_sched, rate);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, tm_sched, rate);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tcont_sla");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, tm_sched, tcont_sla);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, tm_sched, tcont_sla);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "creation_mode");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, tm_sched, creation_mode);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, tm_sched, creation_mode);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "queues");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, tm_sched, queues);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, tm_sched, queues);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "sub_scheds");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, tm_sched, sub_scheds);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, tm_sched, sub_scheds);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "num_priorities");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMBAL_CFG_PROP_GET(&cfg, tm_sched, num_priorities);
+            bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, tm_sched, num_priorities);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMBAL_CFG_PROP_IS_SET(&cfg, tm_sched, owner) && !BCMBAL_CFG_PROP_IS_SET(&cfg, tm_sched, sched_type) && !BCMBAL_CFG_PROP_IS_SET(&cfg, tm_sched, sched_parent) && !BCMBAL_CFG_PROP_IS_SET(&cfg, tm_sched, sched_child_type) && !BCMBAL_CFG_PROP_IS_SET(&cfg, tm_sched, rate) && !BCMBAL_CFG_PROP_IS_SET(&cfg, tm_sched, tcont_sla) && !BCMBAL_CFG_PROP_IS_SET(&cfg, tm_sched, creation_mode) && !BCMBAL_CFG_PROP_IS_SET(&cfg, tm_sched, queues) && !BCMBAL_CFG_PROP_IS_SET(&cfg, tm_sched, sub_scheds) && !BCMBAL_CFG_PROP_IS_SET(&cfg, tm_sched, num_priorities))
+    {
+        BCMBAL_CFG_PROP_GET(&cfg, tm_sched, all_properties);
+        bcmcli_log("BCMBAL_CFG_PROP_GET(&cfg, tm_sched, all_properties);\n");
+    }
+
+    /* set memory to use for variable-sized lists */
+    list_mem = bcmbal_apicli_byte_pool_calloc(byte_pool, BCMBAL_APICLI_DYNAMIC_LIST_BUFFER_SIZE);
+    if (list_mem == NULL)
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+        return BCM_ERR_NOMEM;
+    }
+
+    bcmcli_log("list_mem = bcmos_calloc(BCMBAL_APICLI_DYNAMIC_LIST_BUFFER_SIZE);\n");
+    BCMBAL_CFG_LIST_BUF_SET(&cfg, tm_sched, list_mem, BCMBAL_APICLI_DYNAMIC_LIST_BUFFER_SIZE);
+    bcmcli_log("BCMBAL_CFG_LIST_BUF_SET(&cfg, tm_sched, list_mem, BCMBAL_APICLI_DYNAMIC_LIST_BUFFER_SIZE);\n");
+
+    /* call API */
+    err = bcmbal_cfg_get(&cfg.hdr);
+    bcmcli_log("bcmbal_cfg_get(&cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        bcmbal_apicli_print_data_start(session);
+        err = bcmbal_apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    bcmbal_apicli_print_complete(session, err, NULL);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmbal_cli_tm_sched_cfg_set(bcmcli_session *session, bcmbal_apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmbal_tm_sched_cfg cfg;        /**< declare main API struct */
+    bcmbal_tm_sched_key key = { };  /**< declare key */
+    bcmcli_log("bcmbal_tm_sched_cfg cfg;\n");
+    bcmcli_log("bcmbal_tm_sched_key key = {  };\n");
+    bcmbal_apicli_print_start(session, "bcmbal_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "dir");
+    if (cli_parm != NULL)
+    {
+        key.dir = (bcmbal_tm_sched_dir) cli_parm->value.enum_val;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "dir is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.dir = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_TM_SCHED, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_TM_SCHED_KEY_ID_DIR, &key.dir);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "id");
+    if (cli_parm != NULL)
+    {
+        key.id = (bcmbal_tm_sched_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.id = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_TM_SCHED, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_TM_SCHED_KEY_ID_ID, &key.id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMBAL_CFG_INIT(&cfg, tm_sched, key);
+    bcmcli_log("BCMBAL_CFG_INIT(&cfg, tm_sched, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "owner.");
+    if (cli_parm != NULL)
+    {
+        bcmbal_tm_sched_owner val = { };
+        cli_parm = bcmcli_find_named_parm(session, "owner.type");
+        if (cli_parm != NULL)
+        {
+            val.type = (bcmbal_tm_sched_owner_type) cli_parm->value.enum_val;
+        }
+        else
+        {
+            bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "owner.type is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        switch (val.type)
+        {
+            case BCMBAL_TM_SCHED_OWNER_TYPE_INTERFACE:
+                cli_parm = bcmcli_find_named_parm(session, "owner.intf_type");
+                if (cli_parm != NULL)
+                {
+                    val.u.interface.intf_type = (bcmbal_intf_type) cli_parm->value.enum_val;
+                }
+                else
+                {
+                    bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "owner.intf_type is not set\n");
+                    return BCM_ERR_PARM;
+                }
+
+                cli_parm = bcmcli_find_named_parm(session, "owner.intf_id");
+                if (cli_parm != NULL)
+                {
+                    val.u.interface.intf_id = (bcmbal_intf_id) cli_parm->value.unumber;
+                }
+                else
+                {
+                    bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "owner.intf_id is not set\n");
+                    return BCM_ERR_PARM;
+                }
+                break;
+            case BCMBAL_TM_SCHED_OWNER_TYPE_SUB_TERM:
+                cli_parm = bcmcli_find_named_parm(session, "owner.intf_id");
+                if (cli_parm != NULL)
+                {
+                    val.u.sub_term.intf_id = (bcmbal_intf_id) cli_parm->value.unumber;
+                }
+                else
+                {
+                    bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "owner.intf_id is not set\n");
+                    return BCM_ERR_PARM;
+                }
+
+                cli_parm = bcmcli_find_named_parm(session, "owner.sub_term_id");
+                if (cli_parm != NULL)
+                {
+                    val.u.sub_term.sub_term_id = (bcmbal_sub_id) cli_parm->value.unumber;
+                }
+                else
+                {
+                    bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "owner.sub_term_id is not set\n");
+                    return BCM_ERR_PARM;
+                }
+                break;
+            case BCMBAL_TM_SCHED_OWNER_TYPE_AGG_PORT:
+                cli_parm = bcmcli_find_named_parm(session, "owner.intf_id");
+                if (cli_parm != NULL)
+                {
+                    val.u.agg_port.intf_id = cli_parm->value.unumber;
+                    val.u.agg_port.presence_mask = val.u.agg_port.presence_mask | BCMBAL_TM_SCHED_OWNER_AGG_PORT_ID_INTF_ID;
+                }
+
+                cli_parm = bcmcli_find_named_parm(session, "owner.sub_term_id");
+                if (cli_parm != NULL)
+                {
+                    val.u.agg_port.sub_term_id = (bcmbal_sub_id) cli_parm->value.unumber;
+                    val.u.agg_port.presence_mask = val.u.agg_port.presence_mask | BCMBAL_TM_SCHED_OWNER_AGG_PORT_ID_SUB_TERM_ID;
+                }
+
+                cli_parm = bcmcli_find_named_parm(session, "owner.agg_port_id");
+                if (cli_parm != NULL)
+                {
+                    val.u.agg_port.agg_port_id = (bcmbal_aggregation_port_id) cli_parm->value.unumber;
+                    val.u.agg_port.presence_mask = val.u.agg_port.presence_mask | BCMBAL_TM_SCHED_OWNER_AGG_PORT_ID_AGG_PORT_ID;
+                }
+                break;
+            case BCMBAL_TM_SCHED_OWNER_TYPE_UNI:
+                cli_parm = bcmcli_find_named_parm(session, "owner.intf_id");
+                if (cli_parm != NULL)
+                {
+                    val.u.uni.intf_id = cli_parm->value.unumber;
+                }
+                else
+                {
+                    bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "owner.intf_id is not set\n");
+                    return BCM_ERR_PARM;
+                }
+
+                cli_parm = bcmcli_find_named_parm(session, "owner.sub_term_id");
+                if (cli_parm != NULL)
+                {
+                    val.u.uni.sub_term_id = (bcmbal_sub_id) cli_parm->value.unumber;
+                }
+                else
+                {
+                    bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "owner.sub_term_id is not set\n");
+                    return BCM_ERR_PARM;
+                }
+
+                cli_parm = bcmcli_find_named_parm(session, "owner.idx");
+                if (cli_parm != NULL)
+                {
+                    val.u.uni.idx = cli_parm->value.unumber;
+                }
+                else
+                {
+                    bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "owner.idx is not set\n");
+                    return BCM_ERR_PARM;
+                }
+                break;
+            case BCMBAL_TM_SCHED_OWNER_TYPE_VIRTUAL:
+                cli_parm = bcmcli_find_named_parm(session, "owner.idx");
+                if (cli_parm != NULL)
+                {
+                    val.u.virtual.idx = cli_parm->value.unumber;
+                }
+                else
+                {
+                    bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "owner.idx is not set\n");
+                    return BCM_ERR_PARM;
+                }
+                break;
+            default:
+                bcmbal_apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+                return BCM_ERR_RANGE;
+        }
+
+        BCMBAL_CFG_PROP_SET(&cfg, tm_sched, owner, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmbal_tm_sched_owner val = ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_TM_SCHED, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_TM_SCHED_CFG_ID_OWNER, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, tm_sched, owner, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "sched_type");
+    if (cli_parm != NULL)
+    {
+        bcmbal_tm_sched_type val;
+        val = (bcmbal_tm_sched_type) cli_parm->value.enum_val;
+        BCMBAL_CFG_PROP_SET(&cfg, tm_sched, sched_type, val);
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, tm_sched, sched_type, ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_TM_SCHED, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_TM_SCHED_CFG_ID_SCHED_TYPE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "sched_parent.");
+    if (cli_parm != NULL)
+    {
+        bcmbal_tm_sched_parent val = { };
+        cli_parm = bcmcli_find_named_parm(session, "sched_parent.sched_id");
+        if (cli_parm != NULL)
+        {
+            val.sched_id = (bcmbal_tm_sched_id) cli_parm->value.unumber;
+            val.presence_mask = val.presence_mask | BCMBAL_TM_SCHED_PARENT_ID_SCHED_ID;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "sched_parent.priority");
+        if (cli_parm != NULL)
+        {
+            val.priority = (bcmbal_tm_priority) cli_parm->value.unumber;
+            val.presence_mask = val.presence_mask | BCMBAL_TM_SCHED_PARENT_ID_PRIORITY;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "sched_parent.weight");
+        if (cli_parm != NULL)
+        {
+            val.weight = (bcmbal_tm_weight) cli_parm->value.unumber;
+            val.presence_mask = val.presence_mask | BCMBAL_TM_SCHED_PARENT_ID_WEIGHT;
+        }
+
+        BCMBAL_CFG_PROP_SET(&cfg, tm_sched, sched_parent, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmbal_tm_sched_parent val = ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_TM_SCHED, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_TM_SCHED_CFG_ID_SCHED_PARENT, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, tm_sched, sched_parent, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "sched_child_type");
+    if (cli_parm != NULL)
+    {
+        bcmbal_tm_sched_child_type val;
+        val = (bcmbal_tm_sched_child_type) cli_parm->value.enum_val;
+        BCMBAL_CFG_PROP_SET(&cfg, tm_sched, sched_child_type, val);
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, tm_sched, sched_child_type, ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_TM_SCHED, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_TM_SCHED_CFG_ID_SCHED_CHILD_TYPE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "rate.");
+    if (cli_parm != NULL)
+    {
+        bcmbal_tm_shaping val = { };
+        cli_parm = bcmcli_find_named_parm(session, "rate.sbr");
+        if (cli_parm != NULL)
+        {
+            val.sbr = cli_parm->value.unumber;
+            val.presence_mask = val.presence_mask | BCMBAL_TM_SHAPING_ID_SBR;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "rate.pbr");
+        if (cli_parm != NULL)
+        {
+            val.pbr = cli_parm->value.unumber;
+            val.presence_mask = val.presence_mask | BCMBAL_TM_SHAPING_ID_PBR;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "rate.burst");
+        if (cli_parm != NULL)
+        {
+            val.burst = cli_parm->value.unumber;
+            val.presence_mask = val.presence_mask | BCMBAL_TM_SHAPING_ID_BURST;
+        }
+
+        BCMBAL_CFG_PROP_SET(&cfg, tm_sched, rate, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmbal_tm_shaping val = ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_TM_SCHED, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_TM_SCHED_CFG_ID_RATE, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, tm_sched, rate, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "tcont_sla.");
+    if (cli_parm != NULL)
+    {
+        bcmbal_tm_tcont_sla val = { };
+        cli_parm = bcmcli_find_named_parm(session, "tcont_sla.extra_bw_elig");
+        if (cli_parm != NULL)
+        {
+            val.extra_bw_elig = (bcmbal_extra_bw_eligibility_type) cli_parm->value.enum_val;
+            val.presence_mask = val.presence_mask | BCMBAL_TM_TCONT_SLA_ID_EXTRA_BW_ELIG;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "tcont_sla.nrt_cbr");
+        if (cli_parm != NULL)
+        {
+            val.nrt_cbr = cli_parm->value.unumber;
+            val.presence_mask = val.presence_mask | BCMBAL_TM_TCONT_SLA_ID_NRT_CBR;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "tcont_sla.rt_cbr");
+        if (cli_parm != NULL)
+        {
+            val.rt_cbr = cli_parm->value.unumber;
+            val.presence_mask = val.presence_mask | BCMBAL_TM_TCONT_SLA_ID_RT_CBR;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "tcont_sla.rt_profile");
+        if (cli_parm != NULL)
+        {
+            val.rt_profile = cli_parm->value.unumber;
+            val.presence_mask = val.presence_mask | BCMBAL_TM_TCONT_SLA_ID_RT_PROFILE;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "tcont_sla.nrt_profile");
+        if (cli_parm != NULL)
+        {
+            val.nrt_profile = cli_parm->value.unumber;
+            val.presence_mask = val.presence_mask | BCMBAL_TM_TCONT_SLA_ID_NRT_PROFILE;
+        }
+
+        BCMBAL_CFG_PROP_SET(&cfg, tm_sched, tcont_sla, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmbal_tm_tcont_sla val = ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_TM_SCHED, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_TM_SCHED_CFG_ID_TCONT_SLA, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, tm_sched, tcont_sla, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "num_priorities");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMBAL_CFG_PROP_SET(&cfg, tm_sched, num_priorities, val);
+        bcmcli_log("BCMBAL_CFG_PROP_SET(&cfg, tm_sched, num_priorities, ");
+        bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_TM_SCHED, BCMBAL_MGT_GROUP_CFG, 0, BCMBAL_TM_SCHED_CFG_ID_NUM_PRIORITIES, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmbal_cfg_set(&cfg.hdr);
+    bcmcli_log("bcmbal_cfg_set(&cfg.hdr);\n");
+    bcmbal_apicli_print_complete(session, err, NULL);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmbal_cli_tm_sched_cfg_clear(bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmbal_tm_sched_cfg cfg;        /**< declare main API struct */
+    bcmbal_tm_sched_key key = { };  /**< declare key */
+    bcmcli_log("bcmbal_tm_sched_cfg cfg;\n");
+    bcmcli_log("bcmbal_tm_sched_key key = {  };\n");
+    bcmbal_apicli_print_start(session, "bcmbal_cfg_clear");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "dir");
+    if (cli_parm != NULL)
+    {
+        key.dir = (bcmbal_tm_sched_dir) cli_parm->value.enum_val;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "dir is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.dir = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_TM_SCHED, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_TM_SCHED_KEY_ID_DIR, &key.dir);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "id");
+    if (cli_parm != NULL)
+    {
+        key.id = (bcmbal_tm_sched_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.id = ");
+    bcmbal_apicli_log_prop_val(BCMBAL_OBJ_ID_TM_SCHED, BCMBAL_MGT_GROUP_KEY, 0, BCMBAL_TM_SCHED_KEY_ID_ID, &key.id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMBAL_CFG_INIT(&cfg, tm_sched, key);
+    bcmcli_log("BCMBAL_CFG_INIT(&cfg, tm_sched, key);\n");
+
+    /* call API */
+    err = bcmbal_cfg_clear(&cfg.hdr);
+    bcmcli_log("bcmbal_cfg_clear(&cfg.hdr);\n");
+    bcmbal_apicli_print_complete(session, err, NULL);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmbal_apicli_root(bcmbal_mgt_group group_type, bcmbal_obj_msg_type msg_type, bcmcli_session *session, bcmbal_apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmbal_obj_id obj_id;
+    cli_parm = bcmcli_find_named_parm(session, "object");
+    if (cli_parm != NULL)
+    {
+        obj_id = cli_parm->value.number;
+    }
+    else
+    {
+        bcmbal_apicli_print_complete(session, BCM_ERR_PARM, "object is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    switch (obj_id)
+    {
+        case BCMBAL_OBJ_ID_ACCESS_TERMINAL:
+            switch (group_type)
+            {
+                case BCMBAL_MGT_GROUP_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMBAL_OBJ_MSG_TYPE_GET:
+                            return bcmbal_cli_access_terminal_cfg_get(session);
+                        case BCMBAL_OBJ_MSG_TYPE_SET:
+                            return bcmbal_cli_access_terminal_cfg_set(session);
+                        case BCMBAL_OBJ_MSG_TYPE_CLEAR:
+                            return bcmbal_cli_access_terminal_cfg_clear(session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMBAL_OBJ_ID_FLOW:
+            switch (group_type)
+            {
+                case BCMBAL_MGT_GROUP_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMBAL_OBJ_MSG_TYPE_GET:
+                            return bcmbal_cli_flow_cfg_get(session);
+                        case BCMBAL_OBJ_MSG_TYPE_SET:
+                            return bcmbal_cli_flow_cfg_set(session);
+                        case BCMBAL_OBJ_MSG_TYPE_CLEAR:
+                            return bcmbal_cli_flow_cfg_clear(session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMBAL_MGT_GROUP_STAT:
+                    return bcmbal_cli_flow_stat_get(session);
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMBAL_OBJ_ID_GROUP:
+            switch (group_type)
+            {
+                case BCMBAL_MGT_GROUP_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMBAL_OBJ_MSG_TYPE_GET:
+                            return bcmbal_cli_group_cfg_get(session, byte_pool);
+                        case BCMBAL_OBJ_MSG_TYPE_SET:
+                            return bcmbal_cli_group_cfg_set(session, byte_pool);
+                        case BCMBAL_OBJ_MSG_TYPE_CLEAR:
+                            return bcmbal_cli_group_cfg_clear(session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMBAL_OBJ_ID_INTERFACE:
+            switch (group_type)
+            {
+                case BCMBAL_MGT_GROUP_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMBAL_OBJ_MSG_TYPE_GET:
+                            return bcmbal_cli_interface_cfg_get(session, byte_pool);
+                        case BCMBAL_OBJ_MSG_TYPE_SET:
+                            return bcmbal_cli_interface_cfg_set(session, byte_pool);
+                        case BCMBAL_OBJ_MSG_TYPE_CLEAR:
+                            return bcmbal_cli_interface_cfg_clear(session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMBAL_MGT_GROUP_STAT:
+                    return bcmbal_cli_interface_stat_get(session);
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMBAL_OBJ_ID_PACKET:
+            switch (group_type)
+            {
+                case BCMBAL_MGT_GROUP_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMBAL_OBJ_MSG_TYPE_GET:
+                            return bcmbal_cli_packet_cfg_get(session, byte_pool);
+                        case BCMBAL_OBJ_MSG_TYPE_SET:
+                            return bcmbal_cli_packet_cfg_set(session, byte_pool);
+                        case BCMBAL_OBJ_MSG_TYPE_CLEAR:
+                            return bcmbal_cli_packet_cfg_clear(session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL:
+            switch (group_type)
+            {
+                case BCMBAL_MGT_GROUP_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMBAL_OBJ_MSG_TYPE_GET:
+                            return bcmbal_cli_subscriber_terminal_cfg_get(session, byte_pool);
+                        case BCMBAL_OBJ_MSG_TYPE_SET:
+                            return bcmbal_cli_subscriber_terminal_cfg_set(session, byte_pool);
+                        case BCMBAL_OBJ_MSG_TYPE_CLEAR:
+                            return bcmbal_cli_subscriber_terminal_cfg_clear(session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMBAL_MGT_GROUP_STAT:
+                    return bcmbal_cli_subscriber_terminal_stat_get(session);
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMBAL_OBJ_ID_TM_QUEUE:
+            switch (group_type)
+            {
+                case BCMBAL_MGT_GROUP_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMBAL_OBJ_MSG_TYPE_GET:
+                            return bcmbal_cli_tm_queue_cfg_get(session);
+                        case BCMBAL_OBJ_MSG_TYPE_SET:
+                            return bcmbal_cli_tm_queue_cfg_set(session);
+                        case BCMBAL_OBJ_MSG_TYPE_CLEAR:
+                            return bcmbal_cli_tm_queue_cfg_clear(session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMBAL_MGT_GROUP_STAT:
+                    return bcmbal_cli_tm_queue_stat_get(session);
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMBAL_OBJ_ID_TM_SCHED:
+            switch (group_type)
+            {
+                case BCMBAL_MGT_GROUP_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMBAL_OBJ_MSG_TYPE_GET:
+                            return bcmbal_cli_tm_sched_cfg_get(session, byte_pool);
+                        case BCMBAL_OBJ_MSG_TYPE_SET:
+                            return bcmbal_cli_tm_sched_cfg_set(session, byte_pool);
+                        case BCMBAL_OBJ_MSG_TYPE_CLEAR:
+                            return bcmbal_cli_tm_sched_cfg_clear(session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        default:
+            return BCM_ERR_RANGE;
+    }
+}
+
+/* Perform an API call based on CLI input */
+bcmos_errno bcmbal_apicli_call(bcmbal_mgt_group group_type, bcmbal_obj_msg_type msg_type, bcmcli_session *session)
+{
+    bcmos_errno err;
+    bcmbal_apicli_byte_pool byte_pool;
+
+    /* setup memory pool for dynamically-sized list memory allocation */
+    err = bcmbal_apicli_byte_pool_create(&byte_pool);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    /* call the root API handler */
+    err = bcmbal_apicli_root(group_type, msg_type, session, &byte_pool);
+
+    /* free all dynamically allocated memory */
+    bcmbal_apicli_byte_pool_destroy(&byte_pool);
+
+    return err;
+}
diff --git a/bal_release/src/lib/libbalapicli/bal_api_cli_handlers.h b/bal_release/src/lib/libbalapicli/bal_api_cli_handlers.h
new file mode 100644
index 0000000..dc7f1fc
--- /dev/null
+++ b/bal_release/src/lib/libbalapicli/bal_api_cli_handlers.h
@@ -0,0 +1,46 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+*/
+
+#ifndef BCMBAL_APICLI_HANDLERS_H_
+#define BCMBAL_APICLI_HANDLERS_H_
+
+#include <bcmos_system.h>
+#include <bal_api.h>
+#include <bcmcli.h>
+
+/* the maximum amount of memory that could possibly by used by all variable-sized lists within a GET request */
+#define BCMBAL_APICLI_DYNAMIC_LIST_BUFFER_SIZE (32 * 1024)
+
+/* Perform an API call based on CLI input */
+bcmos_errno bcmbal_apicli_call(
+    bcmbal_mgt_group group_type,
+    bcmbal_obj_msg_type msg_type,
+    bcmcli_session *session);
+
+#endif
diff --git a/bal_release/src/lib/libbalapicli/bal_api_cli_helpers.c b/bal_release/src/lib/libbalapicli/bal_api_cli_helpers.c
new file mode 100644
index 0000000..d9b6e43
--- /dev/null
+++ b/bal_release/src/lib/libbalapicli/bal_api_cli_helpers.c
@@ -0,0 +1,1913 @@
+#include <bcmos_system.h>
+#include <bcmcli.h>
+#include <bal_api.h>
+#include "bal_api_cli_helpers.h"
+
+/* allow possibly unused descriptors to make the code easier to generate */
+#ifdef __GNUC__
+#define BCM_DESCR   __attribute__((unused))
+#else
+#define BCM_DESCR
+#endif
+
+/* Unless specified in the XML model, dynamic arrays will have this max size (in bytes, will divide by element size) */
+#define DEFAULT_DYN_ARR_MAX_SIZE    2048
+
+/* ==== Base Type Descriptors ==== */
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_uint8_t = { .name = "uint8", .base_type = BCMBAL_APICLI_BASE_TYPE_ID_UNUM, .size = sizeof(uint8_t) };
+
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_uint16_t = { .name = "uint16", .base_type = BCMBAL_APICLI_BASE_TYPE_ID_UNUM, .size = sizeof(uint16_t) };
+
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_uint32_t = { .name = "uint32", .base_type = BCMBAL_APICLI_BASE_TYPE_ID_UNUM, .size = sizeof(uint32_t) };
+
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_uint64_t = { .name = "uint64", .base_type = BCMBAL_APICLI_BASE_TYPE_ID_UNUM, .size = sizeof(uint64_t) };
+
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_uint8_t_hex = { .name = "uint8_hex", .base_type = BCMBAL_APICLI_BASE_TYPE_ID_UNUM_HEX, .size = sizeof(uint8_t) };
+
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_uint16_t_hex = { .name = "uint16_hex", .base_type = BCMBAL_APICLI_BASE_TYPE_ID_UNUM_HEX, .size = sizeof(uint16_t) };
+
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_uint32_t_hex = { .name = "uint32_hex", .base_type = BCMBAL_APICLI_BASE_TYPE_ID_UNUM_HEX, .size = sizeof(uint32_t) };
+
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_uint64_t_hex = { .name = "uint64_hex", .base_type = BCMBAL_APICLI_BASE_TYPE_ID_UNUM_HEX, .size = sizeof(uint64_t) };
+
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_int8_t = { .name = "int8", .base_type = BCMBAL_APICLI_BASE_TYPE_ID_SNUM, .size = sizeof(int8_t) };
+
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_int16_t = { .name = "int16", .base_type = BCMBAL_APICLI_BASE_TYPE_ID_SNUM, .size = sizeof(int16_t) };
+
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_int32_t = { .name = "int32", .base_type = BCMBAL_APICLI_BASE_TYPE_ID_SNUM, .size = sizeof(int32_t) };
+
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_int64_t = { .name = "int64", .base_type = BCMBAL_APICLI_BASE_TYPE_ID_SNUM, .size = sizeof(int64_t) };
+
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_float = { .name = "float", .base_type = BCMBAL_APICLI_BASE_TYPE_ID_FLOAT, .size = sizeof(float) };
+
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_double = { .name = "double", .base_type = BCMBAL_APICLI_BASE_TYPE_ID_FLOAT, .size = sizeof(double) };
+
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmos_mac_address = { .name = "mac", .descr = "MAC address", .base_type = BCMBAL_APICLI_BASE_TYPE_ID_MAC, .size = sizeof(bcmos_mac_address) };
+
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmos_ipv4_address = { .name = "ipv4", .descr = "IPv4 address", .base_type = BCMBAL_APICLI_BASE_TYPE_ID_IPV4, .size = sizeof(bcmos_ipv4_address) };
+
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmos_bool = { .name = "bool", .descr = "Boolean", .base_type = BCMBAL_APICLI_BASE_TYPE_ID_BOOL, .size = sizeof(bcmos_bool) };
+
+/* ==== Object Type Information ==== */
+static char *object_name[] = { "access_terminal", "flow", "group", "interface", "packet", "subscriber_terminal", "tm_queue", "tm_sched" };
+static char *object_descr[] = { "BAL Access Terminal Object", "BAL Flow", "BAL Group", "BAL interface object", "Packet that can be transmitted or received", "BAL Subscriber Terminal", "Transmit queue", "Scheduling node" };
+
+/* ==== Supporting Types ==== */
+bcmcli_enum_val bcmbal_access_terminal_cfg_id_string_table[] = { { .name = "admin_state", .val = BCMBAL_ACCESS_TERMINAL_CFG_ID_ADMIN_STATE }, { .name = "oper_status", .val = BCMBAL_ACCESS_TERMINAL_CFG_ID_OPER_STATUS }, { .name = "iwf_mode", .val = BCMBAL_ACCESS_TERMINAL_CFG_ID_IWF_MODE }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_access_terminal_cfg_id = { .name = "bcmbal_access_terminal_cfg_id", .descr = "Identifiers for all properties contained in the access_terminal_cfg group.", .size = sizeof(bcmbal_access_terminal_cfg_id), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM, .x = { .e = bcmbal_access_terminal_cfg_id_string_table } };
+bcmcli_enum_val bcmbal_access_terminal_ind_id_string_table[] = { { .name = "admin_state", .val = BCMBAL_ACCESS_TERMINAL_IND_ID_ADMIN_STATE }, { .name = "oper_status", .val = BCMBAL_ACCESS_TERMINAL_IND_ID_OPER_STATUS }, { .name = "iwf_mode", .val = BCMBAL_ACCESS_TERMINAL_IND_ID_IWF_MODE }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_access_terminal_ind_id = { .name = "bcmbal_access_terminal_ind_id", .descr = "Identifiers for all properties contained in the access_terminal_ind group.", .size = sizeof(bcmbal_access_terminal_ind_id), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM, .x = { .e = bcmbal_access_terminal_ind_id_string_table } };
+bcmcli_enum_val bcmbal_access_terminal_key_id_string_table[] = { { .name = "access_term_id", .val = BCMBAL_ACCESS_TERMINAL_KEY_ID_ACCESS_TERM_ID }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_access_terminal_key_id = { .name = "bcmbal_access_terminal_key_id", .descr = "Identifiers for all properties contained in the access_terminal_key group.", .size = sizeof(bcmbal_access_terminal_key_id), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM, .x = { .e = bcmbal_access_terminal_key_id_string_table } };
+bcmcli_enum_val bcmbal_action_id_string_table[] = { { .name = "none", .val = BCMBAL_ACTION_ID_NONE }, { .name = "cmds_bitmask", .val = BCMBAL_ACTION_ID_CMDS_BITMASK }, { .name = "o_vid", .val = BCMBAL_ACTION_ID_O_VID }, { .name = "o_pbits", .val = BCMBAL_ACTION_ID_O_PBITS }, { .name = "o_tpid", .val = BCMBAL_ACTION_ID_O_TPID }, { .name = "i_vid", .val = BCMBAL_ACTION_ID_I_VID }, { .name = "i_pbits", .val = BCMBAL_ACTION_ID_I_PBITS }, { .name = "i_tpid", .val = BCMBAL_ACTION_ID_I_TPID }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_action_id = { .name = "bcmbal_action_id", .descr = "action ID", .size = sizeof(bcmbal_action_id), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM_MASK, .x = { .e = bcmbal_action_id_string_table } };
+bcmcli_enum_val bcmbal_action_cmd_id_string_table[] = { { .name = "none", .val = BCMBAL_ACTION_CMD_ID_NONE }, { .name = "add_outer_tag", .val = BCMBAL_ACTION_CMD_ID_ADD_OUTER_TAG }, { .name = "remove_outer_tag", .val = BCMBAL_ACTION_CMD_ID_REMOVE_OUTER_TAG }, { .name = "xlate_outer_tag", .val = BCMBAL_ACTION_CMD_ID_XLATE_OUTER_TAG }, { .name = "xlate_two_tags", .val = BCMBAL_ACTION_CMD_ID_XLATE_TWO_TAGS }, { .name = "discard_ds_bcast", .val = BCMBAL_ACTION_CMD_ID_DISCARD_DS_BCAST }, { .name = "discard_ds_unknown", .val = BCMBAL_ACTION_CMD_ID_DISCARD_DS_UNKNOWN }, { .name = "add_two_tags", .val = BCMBAL_ACTION_CMD_ID_ADD_TWO_TAGS }, { .name = "remove_two_tags", .val = BCMBAL_ACTION_CMD_ID_REMOVE_TWO_TAGS }, { .name = "remark_pbits", .val = BCMBAL_ACTION_CMD_ID_REMARK_PBITS }, { .name = "copy_pbits", .val = BCMBAL_ACTION_CMD_ID_COPY_PBITS }, { .name = "reverse_copy_pbits", .val = BCMBAL_ACTION_CMD_ID_REVERSE_COPY_PBITS }, { .name = "dscp_to_pbits", .val = BCMBAL_ACTION_CMD_ID_DSCP_TO_PBITS }, { .name = "trap_to_host", .val = BCMBAL_ACTION_CMD_ID_TRAP_TO_HOST }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_action_cmd_id = { .name = "bcmbal_action_cmd_id", .descr = "action_cmd_id", .size = sizeof(bcmbal_action_cmd_id), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM_MASK, .x = { .e = bcmbal_action_cmd_id_string_table } };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_action_fields[] = { { .name = "presence_mask", .descr = "Presence Mask", .offset = offsetof(bcmbal_action, presence_mask), .type = &type_descr_bcmbal_action_id, .flags = BCMBAL_APICLI_FIELD_DESCR_FLAGS_PRESENCE_MASK }, { .name = "cmds_bitmask", .descr = "Commands bitmask", .offset = offsetof(bcmbal_action, cmds_bitmask), .type = &type_descr_bcmbal_action_cmd_id }, { .name = "o_vid", .descr = "Outer vid", .offset = offsetof(bcmbal_action, o_vid), .type = &type_descr_uint16_t }, { .name = "o_pbits", .descr = "Outer pbits", .offset = offsetof(bcmbal_action, o_pbits), .type = &type_descr_uint8_t }, { .name = "o_tpid", .descr = "Outer tpid", .offset = offsetof(bcmbal_action, o_tpid), .type = &type_descr_uint16_t }, { .name = "i_vid", .descr = "Inner vid", .offset = offsetof(bcmbal_action, i_vid), .type = &type_descr_uint16_t }, { .name = "i_pbits", .descr = "Inner pbits", .offset = offsetof(bcmbal_action, i_pbits), .type = &type_descr_uint8_t }, { .name = "i_tpid", .descr = "Inner tpid", .offset = offsetof(bcmbal_action, i_tpid), .type = &type_descr_uint16_t } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_action = { .name = "bcmbal_action", .descr = "action", .size = sizeof(bcmbal_action), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_action_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_action_fields } } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_aggregation_port_id_list_u8 = { .name = "bcmbal_aggregation_port_id_list_u8", .descr = "Variable-length list of aggregation_port_id", .size = sizeof(bcmbal_aggregation_port_id_list_u8), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ARR_DYN, .x = { .arr_dyn = { .elem_type = &type_descr_uint16_t, .len_size = 1, .max_size = DEFAULT_DYN_ARR_MAX_SIZE / sizeof(bcmbal_aggregation_port_id) } } };
+bcmcli_enum_val bcmbal_classifier_id_string_table[] = { { .name = "none", .val = BCMBAL_CLASSIFIER_ID_NONE }, { .name = "o_tpid", .val = BCMBAL_CLASSIFIER_ID_O_TPID }, { .name = "o_vid", .val = BCMBAL_CLASSIFIER_ID_O_VID }, { .name = "i_tpid", .val = BCMBAL_CLASSIFIER_ID_I_TPID }, { .name = "i_vid", .val = BCMBAL_CLASSIFIER_ID_I_VID }, { .name = "o_pbits", .val = BCMBAL_CLASSIFIER_ID_O_PBITS }, { .name = "i_pbits", .val = BCMBAL_CLASSIFIER_ID_I_PBITS }, { .name = "ether_type", .val = BCMBAL_CLASSIFIER_ID_ETHER_TYPE }, { .name = "dst_mac", .val = BCMBAL_CLASSIFIER_ID_DST_MAC }, { .name = "src_mac", .val = BCMBAL_CLASSIFIER_ID_SRC_MAC }, { .name = "ip_proto", .val = BCMBAL_CLASSIFIER_ID_IP_PROTO }, { .name = "dst_ip", .val = BCMBAL_CLASSIFIER_ID_DST_IP }, { .name = "src_ip", .val = BCMBAL_CLASSIFIER_ID_SRC_IP }, { .name = "src_port", .val = BCMBAL_CLASSIFIER_ID_SRC_PORT }, { .name = "dst_port", .val = BCMBAL_CLASSIFIER_ID_DST_PORT }, { .name = "pkt_tag_type", .val = BCMBAL_CLASSIFIER_ID_PKT_TAG_TYPE }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_classifier_id = { .name = "bcmbal_classifier_id", .descr = "classifier ID", .size = sizeof(bcmbal_classifier_id), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM_MASK, .x = { .e = bcmbal_classifier_id_string_table } };
+bcmcli_enum_val bcmbal_pkt_tag_type_string_table[] = { { .name = "none", .val = BCMBAL_PKT_TAG_TYPE_NONE }, { .name = "untagged", .val = BCMBAL_PKT_TAG_TYPE_UNTAGGED }, { .name = "single_tag", .val = BCMBAL_PKT_TAG_TYPE_SINGLE_TAG }, { .name = "double_tag", .val = BCMBAL_PKT_TAG_TYPE_DOUBLE_TAG }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_pkt_tag_type = { .name = "bcmbal_pkt_tag_type", .descr = "Packet tag type", .size = sizeof(bcmbal_pkt_tag_type), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM_MASK, .x = { .e = bcmbal_pkt_tag_type_string_table } };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_classifier_fields[] = { { .name = "presence_mask", .descr = "Presence Mask", .offset = offsetof(bcmbal_classifier, presence_mask), .type = &type_descr_bcmbal_classifier_id, .flags = BCMBAL_APICLI_FIELD_DESCR_FLAGS_PRESENCE_MASK }, { .name = "o_tpid", .descr = "Outer TPID of the packet to be classified", .offset = offsetof(bcmbal_classifier, o_tpid), .type = &type_descr_uint16_t }, { .name = "o_vid", .descr = "Outer VID of the packet to be classified", .offset = offsetof(bcmbal_classifier, o_vid), .type = &type_descr_uint16_t }, { .name = "i_tpid", .descr = "Inner TPID of the packet to be classified", .offset = offsetof(bcmbal_classifier, i_tpid), .type = &type_descr_uint16_t }, { .name = "i_vid", .descr = "Inner VID of the packet to be classified", .offset = offsetof(bcmbal_classifier, i_vid), .type = &type_descr_uint16_t }, { .name = "o_pbits", .descr = "Outer PBITS of the packet to be classified", .offset = offsetof(bcmbal_classifier, o_pbits), .type = &type_descr_uint8_t }, { .name = "i_pbits", .descr = "Inner PBITS of the packet to be classified", .offset = offsetof(bcmbal_classifier, i_pbits), .type = &type_descr_uint8_t }, { .name = "ether_type", .descr = "Ethertype of the packet to be classified", .offset = offsetof(bcmbal_classifier, ether_type), .type = &type_descr_uint16_t }, { .name = "dst_mac", .descr = "Destination MAC address of the packet to be classified", .offset = offsetof(bcmbal_classifier, dst_mac), .type = &type_descr_bcmos_mac_address }, { .name = "src_mac", .descr = "Source MAC address of the packet to be classified", .offset = offsetof(bcmbal_classifier, src_mac), .type = &type_descr_bcmos_mac_address }, { .name = "ip_proto", .descr = "IP protocol of the packet to be classified", .offset = offsetof(bcmbal_classifier, ip_proto), .type = &type_descr_uint8_t }, { .name = "dst_ip", .descr = "Destination IP address of the packet to be classified", .offset = offsetof(bcmbal_classifier, dst_ip), .type = &type_descr_bcmos_ipv4_address }, { .name = "src_ip", .descr = "Source IP address of the packet to be classified", .offset = offsetof(bcmbal_classifier, src_ip), .type = &type_descr_bcmos_ipv4_address }, { .name = "src_port", .descr = "Source port of the packet to be classified", .offset = offsetof(bcmbal_classifier, src_port), .type = &type_descr_uint16_t }, { .name = "dst_port", .descr = "Destination port of the packet to be classified", .offset = offsetof(bcmbal_classifier, dst_port), .type = &type_descr_uint16_t }, { .name = "pkt_tag_type", .descr = "The tag type of the ingress packets", .offset = offsetof(bcmbal_classifier, pkt_tag_type), .type = &type_descr_bcmbal_pkt_tag_type } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_classifier = { .name = "bcmbal_classifier", .descr = "classifier", .size = sizeof(bcmbal_classifier), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_classifier_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_classifier_fields } } };
+bcmcli_enum_val bcmbal_control_string_table[] = { { .name = "disable", .val = BCMBAL_CONTROL_DISABLE }, { .name = "enable", .val = BCMBAL_CONTROL_ENABLE }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_control = { .name = "bcmbal_control", .descr = "Generic enable/disable enumeration", .size = sizeof(bcmbal_control), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM, .x = { .e = bcmbal_control_string_table } };
+bcmcli_enum_val bcmbal_dest_type_string_table[] = { { .name = "nni", .val = BCMBAL_DEST_TYPE_NNI }, { .name = "sub_term", .val = BCMBAL_DEST_TYPE_SUB_TERM }, { .name = "host", .val = BCMBAL_DEST_TYPE_HOST }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_dest_type = { .name = "bcmbal_dest_type", .descr = "Destination type", .size = sizeof(bcmbal_dest_type), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM, .x = { .e = bcmbal_dest_type_string_table } };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_dest_fields[] = { { .name = "type", .descr = "packet destination", .offset = offsetof(bcmbal_dest, type), .type = &type_descr_bcmbal_dest_type } };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_dest_nni_fields[] = { { .name = "int_id", .descr = "Interface ID", .offset = offsetof(bcmbal_dest, u.nni.int_id) - offsetof(bcmbal_dest, u.nni.int_id), .type = &type_descr_uint32_t } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_dest_nni = { .name = "bcmbal_dest_nni", .descr = "Packet destination nni", .size = sizeof(((bcmbal_dest *)0)->u.nni), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_dest_nni_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_dest_nni_fields } } };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_dest_sub_term_fields[] = { { .name = "sub_term_id", .descr = "Subscriber terminal ID", .offset = offsetof(bcmbal_dest, u.sub_term.sub_term_id) - offsetof(bcmbal_dest, u.sub_term.sub_term_id), .type = &type_descr_uint32_t }, { .name = "sub_term_uni", .descr = "Subscriber terminal UNI", .offset = offsetof(bcmbal_dest, u.sub_term.sub_term_uni) - offsetof(bcmbal_dest, u.sub_term.sub_term_id), .type = &type_descr_uint16_t }, { .name = "int_id", .descr = "Interface ID", .offset = offsetof(bcmbal_dest, u.sub_term.int_id) - offsetof(bcmbal_dest, u.sub_term.sub_term_id), .type = &type_descr_uint16_t } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_dest_sub_term = { .name = "bcmbal_dest_sub_term", .descr = "Packet destination subscriber terminal", .size = sizeof(((bcmbal_dest *)0)->u.sub_term), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_dest_sub_term_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_dest_sub_term_fields } } };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_dest_union_fields[] = { { .name = "u.nni", .descr = "", .offset = offsetof(bcmbal_dest, u.nni), .type = &type_descr_bcmbal_dest_nni }, { .name = "u.sub_term", .descr = "", .offset = offsetof(bcmbal_dest, u.sub_term), .type = &type_descr_bcmbal_dest_sub_term }, { }, { } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_dest = { .name = "bcmbal_dest", .descr = "Packet destination", .size = sizeof(bcmbal_dest), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_UNION, .x = { .u = { .num_common_fields = sizeof(type_descr_bcmbal_dest_fields) / sizeof(bcmbal_apicli_field_descr), .common_fields = type_descr_bcmbal_dest_fields, .classifier_idx = 0, .union_fields = type_descr_bcmbal_dest_union_fields } } };
+bcmcli_enum_val bcmbal_ds_miss_mode_string_table[] = { { .name = "discard", .val = BCMBAL_DS_MISS_MODE_DISCARD }, { .name = "broadcast", .val = BCMBAL_DS_MISS_MODE_BROADCAST }, { .name = "vid", .val = BCMBAL_DS_MISS_MODE_VID }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_ds_miss_mode = { .name = "bcmbal_ds_miss_mode", .descr = "Downstrean action for unknown packets", .size = sizeof(bcmbal_ds_miss_mode), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM, .x = { .e = bcmbal_ds_miss_mode_string_table } };
+bcmcli_enum_val bcmbal_extra_bw_eligibility_type_string_table[] = { { .name = "none", .val = BCMBAL_EXTRA_BW_ELIGIBILITY_TYPE_NONE }, { .name = "not_assured", .val = BCMBAL_EXTRA_BW_ELIGIBILITY_TYPE_NOT_ASSURED }, { .name = "best_effort", .val = BCMBAL_EXTRA_BW_ELIGIBILITY_TYPE_BEST_EFFORT }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_extra_bw_eligibility_type = { .name = "bcmbal_extra_bw_eligibility_type", .descr = "Extra BW Eligibility Type", .size = sizeof(bcmbal_extra_bw_eligibility_type), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM, .x = { .e = bcmbal_extra_bw_eligibility_type_string_table } };
+bcmcli_enum_val bcmbal_flow_cfg_id_string_table[] = { { .name = "admin_state", .val = BCMBAL_FLOW_CFG_ID_ADMIN_STATE }, { .name = "oper_status", .val = BCMBAL_FLOW_CFG_ID_OPER_STATUS }, { .name = "access_int_id", .val = BCMBAL_FLOW_CFG_ID_ACCESS_INT_ID }, { .name = "network_int_id", .val = BCMBAL_FLOW_CFG_ID_NETWORK_INT_ID }, { .name = "sub_term_id", .val = BCMBAL_FLOW_CFG_ID_SUB_TERM_ID }, { .name = "sub_term_uni_idx", .val = BCMBAL_FLOW_CFG_ID_SUB_TERM_UNI_IDX }, { .name = "svc_port_id", .val = BCMBAL_FLOW_CFG_ID_SVC_PORT_ID }, { .name = "agg_port_id", .val = BCMBAL_FLOW_CFG_ID_AGG_PORT_ID }, { .name = "resolve_mac", .val = BCMBAL_FLOW_CFG_ID_RESOLVE_MAC }, { .name = "classifier", .val = BCMBAL_FLOW_CFG_ID_CLASSIFIER }, { .name = "action", .val = BCMBAL_FLOW_CFG_ID_ACTION }, { .name = "sla", .val = BCMBAL_FLOW_CFG_ID_SLA }, { .name = "cookie", .val = BCMBAL_FLOW_CFG_ID_COOKIE }, { .name = "priority", .val = BCMBAL_FLOW_CFG_ID_PRIORITY }, { .name = "group_id", .val = BCMBAL_FLOW_CFG_ID_GROUP_ID }, { .name = "queue", .val = BCMBAL_FLOW_CFG_ID_QUEUE }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_flow_cfg_id = { .name = "bcmbal_flow_cfg_id", .descr = "Identifiers for all properties contained in the flow_cfg group.", .size = sizeof(bcmbal_flow_cfg_id), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM, .x = { .e = bcmbal_flow_cfg_id_string_table } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_flow_id_list_u32 = { .name = "bcmbal_flow_id_list_u32", .descr = "Variable-length list of flow_id", .size = sizeof(bcmbal_flow_id_list_u32), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ARR_DYN, .x = { .arr_dyn = { .elem_type = &type_descr_uint32_t, .len_size = 4, .max_size = DEFAULT_DYN_ARR_MAX_SIZE / sizeof(bcmbal_flow_id) } } };
+bcmcli_enum_val bcmbal_flow_ind_id_string_table[] = { { .name = "admin_state", .val = BCMBAL_FLOW_IND_ID_ADMIN_STATE }, { .name = "oper_status", .val = BCMBAL_FLOW_IND_ID_OPER_STATUS }, { .name = "access_int_id", .val = BCMBAL_FLOW_IND_ID_ACCESS_INT_ID }, { .name = "network_int_id", .val = BCMBAL_FLOW_IND_ID_NETWORK_INT_ID }, { .name = "sub_term_id", .val = BCMBAL_FLOW_IND_ID_SUB_TERM_ID }, { .name = "svc_port_id", .val = BCMBAL_FLOW_IND_ID_SVC_PORT_ID }, { .name = "agg_port_id", .val = BCMBAL_FLOW_IND_ID_AGG_PORT_ID }, { .name = "resolve_mac", .val = BCMBAL_FLOW_IND_ID_RESOLVE_MAC }, { .name = "base_tc_id", .val = BCMBAL_FLOW_IND_ID_BASE_TC_ID }, { .name = "classifier", .val = BCMBAL_FLOW_IND_ID_CLASSIFIER }, { .name = "action", .val = BCMBAL_FLOW_IND_ID_ACTION }, { .name = "sla", .val = BCMBAL_FLOW_IND_ID_SLA }, { .name = "cookie", .val = BCMBAL_FLOW_IND_ID_COOKIE }, { .name = "priority", .val = BCMBAL_FLOW_IND_ID_PRIORITY }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_flow_ind_id = { .name = "bcmbal_flow_ind_id", .descr = "Identifiers for all properties contained in the flow_ind group.", .size = sizeof(bcmbal_flow_ind_id), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM, .x = { .e = bcmbal_flow_ind_id_string_table } };
+bcmcli_enum_val bcmbal_flow_key_id_string_table[] = { { .name = "flow_id", .val = BCMBAL_FLOW_KEY_ID_FLOW_ID }, { .name = "flow_type", .val = BCMBAL_FLOW_KEY_ID_FLOW_TYPE }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_flow_key_id = { .name = "bcmbal_flow_key_id", .descr = "Identifiers for all properties contained in the flow_key group.", .size = sizeof(bcmbal_flow_key_id), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM, .x = { .e = bcmbal_flow_key_id_string_table } };
+bcmcli_enum_val bcmbal_flow_stat_id_string_table[] = { { .name = "rx_packets", .val = BCMBAL_FLOW_STAT_ID_RX_PACKETS }, { .name = "rx_bytes", .val = BCMBAL_FLOW_STAT_ID_RX_BYTES }, { .name = "tx_packets", .val = BCMBAL_FLOW_STAT_ID_TX_PACKETS }, { .name = "tx_bytes", .val = BCMBAL_FLOW_STAT_ID_TX_BYTES }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_flow_stat_id = { .name = "bcmbal_flow_stat_id", .descr = "Identifiers for all properties contained in the flow_stat group.", .size = sizeof(bcmbal_flow_stat_id), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM, .x = { .e = bcmbal_flow_stat_id_string_table } };
+bcmcli_enum_val bcmbal_flow_type_string_table[] = { { .name = "upstream", .val = BCMBAL_FLOW_TYPE_UPSTREAM }, { .name = "downstream", .val = BCMBAL_FLOW_TYPE_DOWNSTREAM }, { .name = "broadcast", .val = BCMBAL_FLOW_TYPE_BROADCAST }, { .name = "multicast", .val = BCMBAL_FLOW_TYPE_MULTICAST }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_flow_type = { .name = "bcmbal_flow_type", .descr = "Flow Type", .size = sizeof(bcmbal_flow_type), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM, .x = { .e = bcmbal_flow_type_string_table } };
+bcmcli_enum_val bcmbal_group_cfg_id_string_table[] = { { .name = "members_cmd", .val = BCMBAL_GROUP_CFG_ID_MEMBERS_CMD }, { .name = "members", .val = BCMBAL_GROUP_CFG_ID_MEMBERS }, { .name = "cookie", .val = BCMBAL_GROUP_CFG_ID_COOKIE }, { .name = "flows", .val = BCMBAL_GROUP_CFG_ID_FLOWS }, { .name = "owner", .val = BCMBAL_GROUP_CFG_ID_OWNER }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_group_cfg_id = { .name = "bcmbal_group_cfg_id", .descr = "Identifiers for all properties contained in the group_cfg group.", .size = sizeof(bcmbal_group_cfg_id), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM, .x = { .e = bcmbal_group_cfg_id_string_table } };
+bcmcli_enum_val bcmbal_group_key_id_string_table[] = { { .name = "group_id", .val = BCMBAL_GROUP_KEY_ID_GROUP_ID }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_group_key_id = { .name = "bcmbal_group_key_id", .descr = "Identifiers for all properties contained in the group_key group.", .size = sizeof(bcmbal_group_key_id), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM, .x = { .e = bcmbal_group_key_id_string_table } };
+bcmcli_enum_val bcmbal_group_member_cmd_string_table[] = { { .name = "add_members", .val = BCMBAL_GROUP_MEMBER_CMD_ADD_MEMBERS }, { .name = "rem_members", .val = BCMBAL_GROUP_MEMBER_CMD_REM_MEMBERS }, { .name = "set_members", .val = BCMBAL_GROUP_MEMBER_CMD_SET_MEMBERS }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_group_member_cmd = { .name = "bcmbal_group_member_cmd", .descr = "Member operation type", .size = sizeof(bcmbal_group_member_cmd), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM, .x = { .e = bcmbal_group_member_cmd_string_table } };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_tm_queue_ref_fields[] = { { .name = "sched_id", .descr = "Scheduler (tm_sched) ID", .offset = offsetof(bcmbal_tm_queue_ref, sched_id), .type = &type_descr_uint32_t }, { .name = "queue_id", .descr = "Queue ID", .offset = offsetof(bcmbal_tm_queue_ref, queue_id), .type = &type_descr_uint8_t } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_tm_queue_ref = { .name = "bcmbal_tm_queue_ref", .descr = "Queue Reference", .size = sizeof(bcmbal_tm_queue_ref), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_tm_queue_ref_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_tm_queue_ref_fields } } };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_group_member_info_fields[] = { { .name = "intf_id", .descr = "Access interface id for this member", .offset = offsetof(bcmbal_group_member_info, intf_id), .type = &type_descr_uint32_t }, { .name = "svc_port_id", .descr = "The multicast \"GEM\" for this member", .offset = offsetof(bcmbal_group_member_info, svc_port_id), .type = &type_descr_uint16_t }, { .name = "action", .descr = "VLAN actions", .offset = offsetof(bcmbal_group_member_info, action), .type = &type_descr_bcmbal_action }, { .name = "queue", .descr = "Egress queue", .offset = offsetof(bcmbal_group_member_info, queue), .type = &type_descr_bcmbal_tm_queue_ref } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_group_member_info = { .name = "bcmbal_group_member_info", .descr = "Group Member Info", .size = sizeof(bcmbal_group_member_info), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_group_member_info_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_group_member_info_fields } } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_group_member_info_list_u16 = { .name = "bcmbal_group_member_info_list_u16", .descr = "Variable-length list of group_member_info", .size = sizeof(bcmbal_group_member_info_list_u16), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ARR_DYN, .x = { .arr_dyn = { .elem_type = &type_descr_bcmbal_group_member_info, .len_size = 2, .max_size = DEFAULT_DYN_ARR_MAX_SIZE / sizeof(bcmbal_group_member_info) } } };
+bcmcli_enum_val bcmbal_group_owner_string_table[] = { { .name = "none", .val = BCMBAL_GROUP_OWNER_NONE }, { .name = "multicast", .val = BCMBAL_GROUP_OWNER_MULTICAST }, { .name = "unicast", .val = BCMBAL_GROUP_OWNER_UNICAST }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_group_owner = { .name = "bcmbal_group_owner", .descr = "owner of the group", .size = sizeof(bcmbal_group_owner), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM, .x = { .e = bcmbal_group_owner_string_table } };
+bcmcli_enum_val bcmbal_interface_cfg_id_string_table[] = { { .name = "admin_state", .val = BCMBAL_INTERFACE_CFG_ID_ADMIN_STATE }, { .name = "oper_status", .val = BCMBAL_INTERFACE_CFG_ID_OPER_STATUS }, { .name = "min_data_agg_port_id", .val = BCMBAL_INTERFACE_CFG_ID_MIN_DATA_AGG_PORT_ID }, { .name = "min_data_svc_port_id", .val = BCMBAL_INTERFACE_CFG_ID_MIN_DATA_SVC_PORT_ID }, { .name = "transceiver_type", .val = BCMBAL_INTERFACE_CFG_ID_TRANSCEIVER_TYPE }, { .name = "ds_miss_mode", .val = BCMBAL_INTERFACE_CFG_ID_DS_MISS_MODE }, { .name = "mtu", .val = BCMBAL_INTERFACE_CFG_ID_MTU }, { .name = "flow_control", .val = BCMBAL_INTERFACE_CFG_ID_FLOW_CONTROL }, { .name = "ds_tm", .val = BCMBAL_INTERFACE_CFG_ID_DS_TM }, { .name = "us_tm", .val = BCMBAL_INTERFACE_CFG_ID_US_TM }, { .name = "sub_term_id_list", .val = BCMBAL_INTERFACE_CFG_ID_SUB_TERM_ID_LIST }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_interface_cfg_id = { .name = "bcmbal_interface_cfg_id", .descr = "Identifiers for all properties contained in the interface_cfg group.", .size = sizeof(bcmbal_interface_cfg_id), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM, .x = { .e = bcmbal_interface_cfg_id_string_table } };
+bcmcli_enum_val bcmbal_interface_ind_id_string_table[] = { { .name = "admin_state", .val = BCMBAL_INTERFACE_IND_ID_ADMIN_STATE }, { .name = "oper_status", .val = BCMBAL_INTERFACE_IND_ID_OPER_STATUS }, { .name = "min_data_agg_port_id", .val = BCMBAL_INTERFACE_IND_ID_MIN_DATA_AGG_PORT_ID }, { .name = "min_data_svc_port_id", .val = BCMBAL_INTERFACE_IND_ID_MIN_DATA_SVC_PORT_ID }, { .name = "transceiver_type", .val = BCMBAL_INTERFACE_IND_ID_TRANSCEIVER_TYPE }, { .name = "ds_miss_mode", .val = BCMBAL_INTERFACE_IND_ID_DS_MISS_MODE }, { .name = "mtu", .val = BCMBAL_INTERFACE_IND_ID_MTU }, { .name = "flow_control", .val = BCMBAL_INTERFACE_IND_ID_FLOW_CONTROL }, { .name = "ds_tm", .val = BCMBAL_INTERFACE_IND_ID_DS_TM }, { .name = "us_tm", .val = BCMBAL_INTERFACE_IND_ID_US_TM }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_interface_ind_id = { .name = "bcmbal_interface_ind_id", .descr = "Identifiers for all properties contained in the interface_ind group.", .size = sizeof(bcmbal_interface_ind_id), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM, .x = { .e = bcmbal_interface_ind_id_string_table } };
+bcmcli_enum_val bcmbal_interface_key_id_string_table[] = { { .name = "intf_id", .val = BCMBAL_INTERFACE_KEY_ID_INTF_ID }, { .name = "intf_type", .val = BCMBAL_INTERFACE_KEY_ID_INTF_TYPE }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_interface_key_id = { .name = "bcmbal_interface_key_id", .descr = "Identifiers for all properties contained in the interface_key group.", .size = sizeof(bcmbal_interface_key_id), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM, .x = { .e = bcmbal_interface_key_id_string_table } };
+bcmcli_enum_val bcmbal_interface_stat_id_string_table[] = { { .name = "rx_packets", .val = BCMBAL_INTERFACE_STAT_ID_RX_PACKETS }, { .name = "rx_bytes", .val = BCMBAL_INTERFACE_STAT_ID_RX_BYTES }, { .name = "tx_packets", .val = BCMBAL_INTERFACE_STAT_ID_TX_PACKETS }, { .name = "tx_bytes", .val = BCMBAL_INTERFACE_STAT_ID_TX_BYTES }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_interface_stat_id = { .name = "bcmbal_interface_stat_id", .descr = "Identifiers for all properties contained in the interface_stat group.", .size = sizeof(bcmbal_interface_stat_id), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM, .x = { .e = bcmbal_interface_stat_id_string_table } };
+bcmcli_enum_val bcmbal_intf_type_string_table[] = { { .name = "nni", .val = BCMBAL_INTF_TYPE_NNI }, { .name = "pon", .val = BCMBAL_INTF_TYPE_PON }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_intf_type = { .name = "bcmbal_intf_type", .descr = "Interface type", .size = sizeof(bcmbal_intf_type), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM, .x = { .e = bcmbal_intf_type_string_table } };
+bcmcli_enum_val bcmbal_iwf_mode_string_table[] = { { .name = "direct_mapping", .val = BCMBAL_IWF_MODE_DIRECT_MAPPING }, { .name = "per_flow", .val = BCMBAL_IWF_MODE_PER_FLOW }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_iwf_mode = { .name = "bcmbal_iwf_mode", .descr = "Interworking Function Mode", .size = sizeof(bcmbal_iwf_mode), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM, .x = { .e = bcmbal_iwf_mode_string_table } };
+bcmcli_enum_val bcmbal_packet_cfg_id_string_table[] = { { .name = "flow_id", .val = BCMBAL_PACKET_CFG_ID_FLOW_ID }, { .name = "flow_type", .val = BCMBAL_PACKET_CFG_ID_FLOW_TYPE }, { .name = "intf_id", .val = BCMBAL_PACKET_CFG_ID_INTF_ID }, { .name = "intf_type", .val = BCMBAL_PACKET_CFG_ID_INTF_TYPE }, { .name = "svc_port", .val = BCMBAL_PACKET_CFG_ID_SVC_PORT }, { .name = "flow_cookie", .val = BCMBAL_PACKET_CFG_ID_FLOW_COOKIE }, { .name = "pkt", .val = BCMBAL_PACKET_CFG_ID_PKT }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_packet_cfg_id = { .name = "bcmbal_packet_cfg_id", .descr = "Identifiers for all properties contained in the packet_cfg group.", .size = sizeof(bcmbal_packet_cfg_id), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM, .x = { .e = bcmbal_packet_cfg_id_string_table } };
+bcmcli_enum_val bcmbal_packet_ind_id_string_table[] = { { .name = "flow_id", .val = BCMBAL_PACKET_IND_ID_FLOW_ID }, { .name = "flow_type", .val = BCMBAL_PACKET_IND_ID_FLOW_TYPE }, { .name = "intf_id", .val = BCMBAL_PACKET_IND_ID_INTF_ID }, { .name = "intf_type", .val = BCMBAL_PACKET_IND_ID_INTF_TYPE }, { .name = "svc_port", .val = BCMBAL_PACKET_IND_ID_SVC_PORT }, { .name = "flow_cookie", .val = BCMBAL_PACKET_IND_ID_FLOW_COOKIE }, { .name = "pkt", .val = BCMBAL_PACKET_IND_ID_PKT }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_packet_ind_id = { .name = "bcmbal_packet_ind_id", .descr = "Identifiers for all properties contained in the packet_ind group.", .size = sizeof(bcmbal_packet_ind_id), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM, .x = { .e = bcmbal_packet_ind_id_string_table } };
+bcmcli_enum_val bcmbal_packet_key_id_string_table[] = { { .name = "reserved", .val = BCMBAL_PACKET_KEY_ID_RESERVED }, { .name = "packet_send_dest", .val = BCMBAL_PACKET_KEY_ID_PACKET_SEND_DEST }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_packet_key_id = { .name = "bcmbal_packet_key_id", .descr = "Identifiers for all properties contained in the packet_key group.", .size = sizeof(bcmbal_packet_key_id), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM, .x = { .e = bcmbal_packet_key_id_string_table } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_uint8_t_arr_10 = { .name = "uint8_t[10]", .descr = "Array of 10 elements of type uint8_t", .size = sizeof(uint8_t[10]), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ARR_FIXED, .x = { .arr_fixed = { .elem_type = &type_descr_uint8_t, .size = 10 } } };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_password_fields[] = { { .name = "arr", .descr = "Array", .offset = offsetof(bcmbal_password, arr), .type = &type_descr_uint8_t_arr_10 } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_password = { .name = "bcmbal_password", .descr = "Password", .size = sizeof(bcmbal_password), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_password_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_password_fields } } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_uint8_t_arr_36 = { .name = "uint8_t[36]", .descr = "Array of 36 elements of type uint8_t", .size = sizeof(uint8_t[36]), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ARR_FIXED, .x = { .arr_fixed = { .elem_type = &type_descr_uint8_t, .size = 36 } } };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_registration_id_fields[] = { { .name = "arr", .descr = "ONU registration ID", .offset = offsetof(bcmbal_registration_id, arr), .type = &type_descr_uint8_t_arr_36 } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_registration_id = { .name = "bcmbal_registration_id", .descr = "Registration id", .size = sizeof(bcmbal_registration_id), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_registration_id_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_registration_id_fields } } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_uint8_t_arr_4 = { .name = "uint8_t[4]", .descr = "Array of 4 elements of type uint8_t", .size = sizeof(uint8_t[4]), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ARR_FIXED, .x = { .arr_fixed = { .elem_type = &type_descr_uint8_t, .size = 4 } } };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_serial_number_fields[] = { { .name = "vendor_id", .descr = "vendor id", .offset = offsetof(bcmbal_serial_number, vendor_id), .type = &type_descr_uint8_t_arr_4 }, { .name = "vendor_specific", .descr = "vendor specific", .offset = offsetof(bcmbal_serial_number, vendor_specific), .type = &type_descr_uint8_t_arr_4 } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_serial_number = { .name = "bcmbal_serial_number", .descr = "Serial number", .size = sizeof(bcmbal_serial_number), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_serial_number_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_serial_number_fields } } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_service_port_id_list_u8 = { .name = "bcmbal_service_port_id_list_u8", .descr = "Variable-length list of service_port_id", .size = sizeof(bcmbal_service_port_id_list_u8), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ARR_DYN, .x = { .arr_dyn = { .elem_type = &type_descr_uint16_t, .len_size = 1, .max_size = DEFAULT_DYN_ARR_MAX_SIZE / sizeof(bcmbal_service_port_id) } } };
+bcmcli_enum_val bcmbal_sla_id_string_table[] = { { .name = "none", .val = BCMBAL_SLA_ID_NONE }, { .name = "min_rate", .val = BCMBAL_SLA_ID_MIN_RATE }, { .name = "max_rate", .val = BCMBAL_SLA_ID_MAX_RATE }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_sla_id = { .name = "bcmbal_sla_id", .descr = "SLA ID", .size = sizeof(bcmbal_sla_id), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM_MASK, .x = { .e = bcmbal_sla_id_string_table } };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_sla_fields[] = { { .name = "presence_mask", .descr = "Presence Mask", .offset = offsetof(bcmbal_sla, presence_mask), .type = &type_descr_bcmbal_sla_id, .flags = BCMBAL_APICLI_FIELD_DESCR_FLAGS_PRESENCE_MASK }, { .name = "min_rate", .descr = "The minimal rate for this flow, in kilobits per second (optional)", .offset = offsetof(bcmbal_sla, min_rate), .type = &type_descr_uint32_t }, { .name = "max_rate", .descr = "The maximum rate for this flow, in kilobits per second (optional)", .offset = offsetof(bcmbal_sla, max_rate), .type = &type_descr_uint32_t } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_sla = { .name = "bcmbal_sla", .descr = "SLA", .size = sizeof(bcmbal_sla), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_sla_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_sla_fields } } };
+bcmcli_enum_val bcmbal_state_string_table[] = { { .name = "up", .val = BCMBAL_STATE_UP }, { .name = "down", .val = BCMBAL_STATE_DOWN }, { .name = "testing", .val = BCMBAL_STATE_TESTING }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_state = { .name = "bcmbal_state", .descr = "Admin state values for access terminal object", .size = sizeof(bcmbal_state), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM, .x = { .e = bcmbal_state_string_table } };
+bcmcli_enum_val bcmbal_status_string_table[] = { { .name = "up", .val = BCMBAL_STATUS_UP }, { .name = "down", .val = BCMBAL_STATUS_DOWN }, { .name = "testing", .val = BCMBAL_STATUS_TESTING }, { .name = "not_present", .val = BCMBAL_STATUS_NOT_PRESENT }, { .name = "lower_layer_down", .val = BCMBAL_STATUS_LOWER_LAYER_DOWN }, { .name = "unknown", .val = BCMBAL_STATUS_UNKNOWN }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_status = { .name = "bcmbal_status", .descr = "Oper status values", .size = sizeof(bcmbal_status), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM, .x = { .e = bcmbal_status_string_table } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_sub_id_list_u16 = { .name = "bcmbal_sub_id_list_u16", .descr = "Variable-length list of sub_id", .size = sizeof(bcmbal_sub_id_list_u16), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ARR_DYN, .x = { .arr_dyn = { .elem_type = &type_descr_uint32_t, .len_size = 2, .max_size = DEFAULT_DYN_ARR_MAX_SIZE / sizeof(bcmbal_sub_id) } } };
+bcmcli_enum_val bcmbal_subscriber_terminal_cfg_id_string_table[] = { { .name = "admin_state", .val = BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_ADMIN_STATE }, { .name = "oper_status", .val = BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_OPER_STATUS }, { .name = "serial_number", .val = BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SERIAL_NUMBER }, { .name = "password", .val = BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_PASSWORD }, { .name = "registration_id", .val = BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_REGISTRATION_ID }, { .name = "svc_port_id", .val = BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SVC_PORT_ID }, { .name = "mac_address", .val = BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_MAC_ADDRESS }, { .name = "ds_tm", .val = BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_DS_TM }, { .name = "us_tm", .val = BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_US_TM }, { .name = "svc_port_id_list", .val = BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SVC_PORT_ID_LIST }, { .name = "agg_port_id_list", .val = BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_AGG_PORT_ID_LIST }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_subscriber_terminal_cfg_id = { .name = "bcmbal_subscriber_terminal_cfg_id", .descr = "Identifiers for all properties contained in the subscriber_terminal_cfg group.", .size = sizeof(bcmbal_subscriber_terminal_cfg_id), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM, .x = { .e = bcmbal_subscriber_terminal_cfg_id_string_table } };
+bcmcli_enum_val bcmbal_subscriber_terminal_ind_id_string_table[] = { { .name = "admin_state", .val = BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_ADMIN_STATE }, { .name = "oper_status", .val = BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_OPER_STATUS }, { .name = "serial_number", .val = BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_SERIAL_NUMBER }, { .name = "password", .val = BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_PASSWORD }, { .name = "registration_id", .val = BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_REGISTRATION_ID }, { .name = "svc_port_id", .val = BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_SVC_PORT_ID }, { .name = "mac_address", .val = BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_MAC_ADDRESS }, { .name = "ds_tm", .val = BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_DS_TM }, { .name = "us_tm", .val = BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_US_TM }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_subscriber_terminal_ind_id = { .name = "bcmbal_subscriber_terminal_ind_id", .descr = "Identifiers for all properties contained in the subscriber_terminal_ind group.", .size = sizeof(bcmbal_subscriber_terminal_ind_id), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM, .x = { .e = bcmbal_subscriber_terminal_ind_id_string_table } };
+bcmcli_enum_val bcmbal_subscriber_terminal_key_id_string_table[] = { { .name = "sub_term_id", .val = BCMBAL_SUBSCRIBER_TERMINAL_KEY_ID_SUB_TERM_ID }, { .name = "intf_id", .val = BCMBAL_SUBSCRIBER_TERMINAL_KEY_ID_INTF_ID }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_subscriber_terminal_key_id = { .name = "bcmbal_subscriber_terminal_key_id", .descr = "Identifiers for all properties contained in the subscriber_terminal_key group.", .size = sizeof(bcmbal_subscriber_terminal_key_id), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM, .x = { .e = bcmbal_subscriber_terminal_key_id_string_table } };
+bcmcli_enum_val bcmbal_subscriber_terminal_stat_id_string_table[] = { { .name = "rx_packets", .val = BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_RX_PACKETS }, { .name = "rx_bytes", .val = BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_RX_BYTES }, { .name = "tx_packets", .val = BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_TX_PACKETS }, { .name = "tx_bytes", .val = BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_TX_BYTES }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_subscriber_terminal_stat_id = { .name = "bcmbal_subscriber_terminal_stat_id", .descr = "Identifiers for all properties contained in the subscriber_terminal_stat group.", .size = sizeof(bcmbal_subscriber_terminal_stat_id), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM, .x = { .e = bcmbal_subscriber_terminal_stat_id_string_table } };
+bcmcli_enum_val bcmbal_tm_bac_type_string_table[] = { { .name = "taildrop", .val = BCMBAL_TM_BAC_TYPE_TAILDROP }, { .name = "wtaildrop", .val = BCMBAL_TM_BAC_TYPE_WTAILDROP }, { .name = "red", .val = BCMBAL_TM_BAC_TYPE_RED }, { .name = "wred", .val = BCMBAL_TM_BAC_TYPE_WRED }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_tm_bac_type = { .name = "bcmbal_tm_bac_type", .descr = "Buffer Admission Control Type", .size = sizeof(bcmbal_tm_bac_type), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM, .x = { .e = bcmbal_tm_bac_type_string_table } };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_tm_red_fields[] = { { .name = "min_threshold", .descr = "Min threshold in percent of max queue size", .offset = offsetof(bcmbal_tm_red, min_threshold), .type = &type_descr_uint8_t }, { .name = "max_threshold", .descr = "Max threshold in percent of max queue size", .offset = offsetof(bcmbal_tm_red, max_threshold), .type = &type_descr_uint8_t }, { .name = "max_probability", .descr = "Discard probability for occupancy between min_threshold and max_threshold", .offset = offsetof(bcmbal_tm_red, max_probability), .type = &type_descr_uint8_t } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_tm_red = { .name = "bcmbal_tm_red", .descr = "Random Early Discard Configuration", .size = sizeof(bcmbal_tm_red), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_tm_red_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_tm_red_fields } } };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_tm_bac_fields[] = { { .name = "type", .descr = "Buffer Admission Control Type", .offset = offsetof(bcmbal_tm_bac, type), .type = &type_descr_bcmbal_tm_bac_type } };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_tm_bac_taildrop_fields[] = { { .name = "max_size", .descr = "max number of packets in the queue", .offset = offsetof(bcmbal_tm_bac, u.taildrop.max_size) - offsetof(bcmbal_tm_bac, u.taildrop.max_size), .type = &type_descr_uint32_t } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_tm_bac_taildrop = { .name = "bcmbal_tm_bac_taildrop", .descr = "tm_bac taildrop", .size = sizeof(((bcmbal_tm_bac *)0)->u.taildrop), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_tm_bac_taildrop_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_tm_bac_taildrop_fields } } };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_tm_bac_red_fields[] = { { .name = "red", .descr = "Random Early Discard configuration", .offset = offsetof(bcmbal_tm_bac, u.red.red) - offsetof(bcmbal_tm_bac, u.red.red), .type = &type_descr_bcmbal_tm_red } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_tm_bac_red = { .name = "bcmbal_tm_bac_red", .descr = "tm_bac red", .size = sizeof(((bcmbal_tm_bac *)0)->u.red), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_tm_bac_red_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_tm_bac_red_fields } } };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_tm_bac_wred_fields[] = { { .name = "green", .descr = "Green Random Early Discard Configuration", .offset = offsetof(bcmbal_tm_bac, u.wred.green) - offsetof(bcmbal_tm_bac, u.wred.green), .type = &type_descr_bcmbal_tm_red }, { .name = "yellow", .descr = "Yellow Random Early Discard Configuration", .offset = offsetof(bcmbal_tm_bac, u.wred.yellow) - offsetof(bcmbal_tm_bac, u.wred.green), .type = &type_descr_bcmbal_tm_red }, { .name = "red", .descr = "Red Random Early Discard Configuration", .offset = offsetof(bcmbal_tm_bac, u.wred.red) - offsetof(bcmbal_tm_bac, u.wred.green), .type = &type_descr_bcmbal_tm_red } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_tm_bac_wred = { .name = "bcmbal_tm_bac_wred", .descr = "tm_bac wred", .size = sizeof(((bcmbal_tm_bac *)0)->u.wred), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_tm_bac_wred_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_tm_bac_wred_fields } } };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_tm_bac_union_fields[] = { { .name = "u.taildrop", .descr = "", .offset = offsetof(bcmbal_tm_bac, u.taildrop), .type = &type_descr_bcmbal_tm_bac_taildrop }, { }, { .name = "u.red", .descr = "", .offset = offsetof(bcmbal_tm_bac, u.red), .type = &type_descr_bcmbal_tm_bac_red }, { .name = "u.wred", .descr = "", .offset = offsetof(bcmbal_tm_bac, u.wred), .type = &type_descr_bcmbal_tm_bac_wred }, { } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_tm_bac = { .name = "bcmbal_tm_bac", .descr = "Queue Buffer Admission Control", .size = sizeof(bcmbal_tm_bac), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_UNION, .x = { .u = { .num_common_fields = sizeof(type_descr_bcmbal_tm_bac_fields) / sizeof(bcmbal_apicli_field_descr), .common_fields = type_descr_bcmbal_tm_bac_fields, .classifier_idx = 0, .union_fields = type_descr_bcmbal_tm_bac_union_fields } } };
+bcmcli_enum_val bcmbal_tm_creation_mode_string_table[] = { { .name = "manual", .val = BCMBAL_TM_CREATION_MODE_MANUAL }, { .name = "auto", .val = BCMBAL_TM_CREATION_MODE_AUTO }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_tm_creation_mode = { .name = "bcmbal_tm_creation_mode", .descr = "TM Creation Mode", .size = sizeof(bcmbal_tm_creation_mode), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM, .x = { .e = bcmbal_tm_creation_mode_string_table } };
+bcmcli_enum_val bcmbal_tm_queue_cfg_id_string_table[] = { { .name = "priority", .val = BCMBAL_TM_QUEUE_CFG_ID_PRIORITY }, { .name = "weight", .val = BCMBAL_TM_QUEUE_CFG_ID_WEIGHT }, { .name = "rate", .val = BCMBAL_TM_QUEUE_CFG_ID_RATE }, { .name = "bac", .val = BCMBAL_TM_QUEUE_CFG_ID_BAC }, { .name = "creation_mode", .val = BCMBAL_TM_QUEUE_CFG_ID_CREATION_MODE }, { .name = "ref_count", .val = BCMBAL_TM_QUEUE_CFG_ID_REF_COUNT }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_tm_queue_cfg_id = { .name = "bcmbal_tm_queue_cfg_id", .descr = "Identifiers for all properties contained in the tm_queue_cfg group.", .size = sizeof(bcmbal_tm_queue_cfg_id), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM, .x = { .e = bcmbal_tm_queue_cfg_id_string_table } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_tm_queue_id_list_u8 = { .name = "bcmbal_tm_queue_id_list_u8", .descr = "Variable-length list of tm_queue_id", .size = sizeof(bcmbal_tm_queue_id_list_u8), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ARR_DYN, .x = { .arr_dyn = { .elem_type = &type_descr_uint8_t, .len_size = 1, .max_size = DEFAULT_DYN_ARR_MAX_SIZE / sizeof(bcmbal_tm_queue_id) } } };
+bcmcli_enum_val bcmbal_tm_queue_ind_id_string_table[] = { { .name = "ret", .val = BCMBAL_TM_QUEUE_IND_ID_RET }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_tm_queue_ind_id = { .name = "bcmbal_tm_queue_ind_id", .descr = "Identifiers for all properties contained in the tm_queue_ind group.", .size = sizeof(bcmbal_tm_queue_ind_id), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM, .x = { .e = bcmbal_tm_queue_ind_id_string_table } };
+bcmcli_enum_val bcmbal_tm_queue_key_id_string_table[] = { { .name = "sched_id", .val = BCMBAL_TM_QUEUE_KEY_ID_SCHED_ID }, { .name = "sched_dir", .val = BCMBAL_TM_QUEUE_KEY_ID_SCHED_DIR }, { .name = "id", .val = BCMBAL_TM_QUEUE_KEY_ID_ID }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_tm_queue_key_id = { .name = "bcmbal_tm_queue_key_id", .descr = "Identifiers for all properties contained in the tm_queue_key group.", .size = sizeof(bcmbal_tm_queue_key_id), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM, .x = { .e = bcmbal_tm_queue_key_id_string_table } };
+bcmcli_enum_val bcmbal_tm_queue_stat_id_string_table[] = { { .name = "packets_ok", .val = BCMBAL_TM_QUEUE_STAT_ID_PACKETS_OK }, { .name = "bytes_ok", .val = BCMBAL_TM_QUEUE_STAT_ID_BYTES_OK }, { .name = "packets_discarded", .val = BCMBAL_TM_QUEUE_STAT_ID_PACKETS_DISCARDED }, { .name = "bytes_discarded", .val = BCMBAL_TM_QUEUE_STAT_ID_BYTES_DISCARDED }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_tm_queue_stat_id = { .name = "bcmbal_tm_queue_stat_id", .descr = "Identifiers for all properties contained in the tm_queue_stat group.", .size = sizeof(bcmbal_tm_queue_stat_id), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM, .x = { .e = bcmbal_tm_queue_stat_id_string_table } };
+bcmcli_enum_val bcmbal_tm_sched_cfg_id_string_table[] = { { .name = "owner", .val = BCMBAL_TM_SCHED_CFG_ID_OWNER }, { .name = "sched_type", .val = BCMBAL_TM_SCHED_CFG_ID_SCHED_TYPE }, { .name = "sched_parent", .val = BCMBAL_TM_SCHED_CFG_ID_SCHED_PARENT }, { .name = "sched_child_type", .val = BCMBAL_TM_SCHED_CFG_ID_SCHED_CHILD_TYPE }, { .name = "rate", .val = BCMBAL_TM_SCHED_CFG_ID_RATE }, { .name = "tcont_sla", .val = BCMBAL_TM_SCHED_CFG_ID_TCONT_SLA }, { .name = "creation_mode", .val = BCMBAL_TM_SCHED_CFG_ID_CREATION_MODE }, { .name = "queues", .val = BCMBAL_TM_SCHED_CFG_ID_QUEUES }, { .name = "sub_scheds", .val = BCMBAL_TM_SCHED_CFG_ID_SUB_SCHEDS }, { .name = "num_priorities", .val = BCMBAL_TM_SCHED_CFG_ID_NUM_PRIORITIES }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_tm_sched_cfg_id = { .name = "bcmbal_tm_sched_cfg_id", .descr = "Identifiers for all properties contained in the tm_sched_cfg group.", .size = sizeof(bcmbal_tm_sched_cfg_id), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM, .x = { .e = bcmbal_tm_sched_cfg_id_string_table } };
+bcmcli_enum_val bcmbal_tm_sched_child_type_string_table[] = { { .name = "queue", .val = BCMBAL_TM_SCHED_CHILD_TYPE_QUEUE }, { .name = "sched", .val = BCMBAL_TM_SCHED_CHILD_TYPE_SCHED }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_tm_sched_child_type = { .name = "bcmbal_tm_sched_child_type", .descr = "Scheduling Level for the Children TM ", .size = sizeof(bcmbal_tm_sched_child_type), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM, .x = { .e = bcmbal_tm_sched_child_type_string_table } };
+bcmcli_enum_val bcmbal_tm_sched_dir_string_table[] = { { .name = "us", .val = BCMBAL_TM_SCHED_DIR_US }, { .name = "ds", .val = BCMBAL_TM_SCHED_DIR_DS }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_tm_sched_dir = { .name = "bcmbal_tm_sched_dir", .descr = "Traffic Direction", .size = sizeof(bcmbal_tm_sched_dir), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM, .x = { .e = bcmbal_tm_sched_dir_string_table } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_tm_sched_id_list_u8 = { .name = "bcmbal_tm_sched_id_list_u8", .descr = "Variable-length list of tm_sched_id", .size = sizeof(bcmbal_tm_sched_id_list_u8), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ARR_DYN, .x = { .arr_dyn = { .elem_type = &type_descr_uint32_t, .len_size = 1, .max_size = DEFAULT_DYN_ARR_MAX_SIZE / sizeof(bcmbal_tm_sched_id) } } };
+bcmcli_enum_val bcmbal_tm_sched_ind_id_string_table[] = { { .name = "ret", .val = BCMBAL_TM_SCHED_IND_ID_RET }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_tm_sched_ind_id = { .name = "bcmbal_tm_sched_ind_id", .descr = "Identifiers for all properties contained in the tm_sched_ind group.", .size = sizeof(bcmbal_tm_sched_ind_id), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM, .x = { .e = bcmbal_tm_sched_ind_id_string_table } };
+bcmcli_enum_val bcmbal_tm_sched_key_id_string_table[] = { { .name = "dir", .val = BCMBAL_TM_SCHED_KEY_ID_DIR }, { .name = "id", .val = BCMBAL_TM_SCHED_KEY_ID_ID }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_tm_sched_key_id = { .name = "bcmbal_tm_sched_key_id", .descr = "Identifiers for all properties contained in the tm_sched_key group.", .size = sizeof(bcmbal_tm_sched_key_id), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM, .x = { .e = bcmbal_tm_sched_key_id_string_table } };
+bcmcli_enum_val bcmbal_tm_sched_owner_type_string_table[] = { { .name = "undefined", .val = BCMBAL_TM_SCHED_OWNER_TYPE_UNDEFINED }, { .name = "interface", .val = BCMBAL_TM_SCHED_OWNER_TYPE_INTERFACE }, { .name = "sub_term", .val = BCMBAL_TM_SCHED_OWNER_TYPE_SUB_TERM }, { .name = "agg_port", .val = BCMBAL_TM_SCHED_OWNER_TYPE_AGG_PORT }, { .name = "uni", .val = BCMBAL_TM_SCHED_OWNER_TYPE_UNI }, { .name = "virtual", .val = BCMBAL_TM_SCHED_OWNER_TYPE_VIRTUAL }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_tm_sched_owner_type = { .name = "bcmbal_tm_sched_owner_type", .descr = "TM Scheduler Owner Type", .size = sizeof(bcmbal_tm_sched_owner_type), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM, .x = { .e = bcmbal_tm_sched_owner_type_string_table } };
+bcmcli_enum_val bcmbal_tm_sched_owner_agg_port_id_string_table[] = { { .name = "none", .val = BCMBAL_TM_SCHED_OWNER_AGG_PORT_ID_NONE }, { .name = "intf_id", .val = BCMBAL_TM_SCHED_OWNER_AGG_PORT_ID_INTF_ID }, { .name = "sub_term_id", .val = BCMBAL_TM_SCHED_OWNER_AGG_PORT_ID_SUB_TERM_ID }, { .name = "agg_port_id", .val = BCMBAL_TM_SCHED_OWNER_AGG_PORT_ID_AGG_PORT_ID }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_tm_sched_owner_agg_port_id = { .name = "bcmbal_tm_sched_owner_agg_port_id", .descr = "tm_sched_owner agg_port ID", .size = sizeof(bcmbal_tm_sched_owner_agg_port_id), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM_MASK, .x = { .e = bcmbal_tm_sched_owner_agg_port_id_string_table } };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_tm_sched_owner_fields[] = { { .name = "type", .descr = "Owner type", .offset = offsetof(bcmbal_tm_sched_owner, type), .type = &type_descr_bcmbal_tm_sched_owner_type } };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_tm_sched_owner_interface_fields[] = { { .name = "intf_type", .descr = "Interface Type", .offset = offsetof(bcmbal_tm_sched_owner, u.interface.intf_type) - offsetof(bcmbal_tm_sched_owner, u.interface.intf_type), .type = &type_descr_bcmbal_intf_type }, { .name = "intf_id", .descr = "Interface ID", .offset = offsetof(bcmbal_tm_sched_owner, u.interface.intf_id) - offsetof(bcmbal_tm_sched_owner, u.interface.intf_type), .type = &type_descr_uint32_t } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_tm_sched_owner_interface = { .name = "bcmbal_tm_sched_owner_interface", .descr = "tm_sched_owner interface", .size = sizeof(((bcmbal_tm_sched_owner *)0)->u.interface), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_tm_sched_owner_interface_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_tm_sched_owner_interface_fields } } };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_tm_sched_owner_sub_term_fields[] = { { .name = "intf_id", .descr = "PON interface id", .offset = offsetof(bcmbal_tm_sched_owner, u.sub_term.intf_id) - offsetof(bcmbal_tm_sched_owner, u.sub_term.intf_id), .type = &type_descr_uint32_t }, { .name = "sub_term_id", .descr = "Subscriber terminal ID", .offset = offsetof(bcmbal_tm_sched_owner, u.sub_term.sub_term_id) - offsetof(bcmbal_tm_sched_owner, u.sub_term.intf_id), .type = &type_descr_uint32_t } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_tm_sched_owner_sub_term = { .name = "bcmbal_tm_sched_owner_sub_term", .descr = "tm_sched_owner subs_term", .size = sizeof(((bcmbal_tm_sched_owner *)0)->u.sub_term), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_tm_sched_owner_sub_term_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_tm_sched_owner_sub_term_fields } } };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_tm_sched_owner_agg_port_fields[] = { { .name = "presence_mask", .descr = "Presence Mask", .offset = offsetof(bcmbal_tm_sched_owner, u.agg_port.presence_mask) - offsetof(bcmbal_tm_sched_owner, u.agg_port.presence_mask), .type = &type_descr_bcmbal_tm_sched_owner_agg_port_id, .flags = BCMBAL_APICLI_FIELD_DESCR_FLAGS_PRESENCE_MASK }, { .name = "intf_id", .descr = "PON interface id", .offset = offsetof(bcmbal_tm_sched_owner, u.agg_port.intf_id) - offsetof(bcmbal_tm_sched_owner, u.agg_port.presence_mask), .type = &type_descr_uint8_t }, { .name = "sub_term_id", .descr = "Subscriber terminal id", .offset = offsetof(bcmbal_tm_sched_owner, u.agg_port.sub_term_id) - offsetof(bcmbal_tm_sched_owner, u.agg_port.presence_mask), .type = &type_descr_uint32_t }, { .name = "agg_port_id", .descr = "Aggregation port id", .offset = offsetof(bcmbal_tm_sched_owner, u.agg_port.agg_port_id) - offsetof(bcmbal_tm_sched_owner, u.agg_port.presence_mask), .type = &type_descr_uint16_t } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_tm_sched_owner_agg_port = { .name = "bcmbal_tm_sched_owner_agg_port", .descr = "tm_sched_owner agg_port", .size = sizeof(((bcmbal_tm_sched_owner *)0)->u.agg_port), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_tm_sched_owner_agg_port_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_tm_sched_owner_agg_port_fields } } };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_tm_sched_owner_uni_fields[] = { { .name = "intf_id", .descr = "PON interface id", .offset = offsetof(bcmbal_tm_sched_owner, u.uni.intf_id) - offsetof(bcmbal_tm_sched_owner, u.uni.intf_id), .type = &type_descr_uint8_t }, { .name = "sub_term_id", .descr = "Subscriber terminal id", .offset = offsetof(bcmbal_tm_sched_owner, u.uni.sub_term_id) - offsetof(bcmbal_tm_sched_owner, u.uni.intf_id), .type = &type_descr_uint32_t }, { .name = "idx", .descr = "Index at subscriber terminal", .offset = offsetof(bcmbal_tm_sched_owner, u.uni.idx) - offsetof(bcmbal_tm_sched_owner, u.uni.intf_id), .type = &type_descr_uint8_t } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_tm_sched_owner_uni = { .name = "bcmbal_tm_sched_owner_uni", .descr = "tm_sched_owner uni", .size = sizeof(((bcmbal_tm_sched_owner *)0)->u.uni), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_tm_sched_owner_uni_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_tm_sched_owner_uni_fields } } };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_tm_sched_owner_virtual_fields[] = { { .name = "idx", .descr = "Owner index", .offset = offsetof(bcmbal_tm_sched_owner, u.virtual.idx) - offsetof(bcmbal_tm_sched_owner, u.virtual.idx), .type = &type_descr_uint32_t } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_tm_sched_owner_virtual = { .name = "bcmbal_tm_sched_owner_virtual", .descr = "tm_sched_owner virtual", .size = sizeof(((bcmbal_tm_sched_owner *)0)->u.virtual), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_tm_sched_owner_virtual_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_tm_sched_owner_virtual_fields } } };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_tm_sched_owner_union_fields[] = { { }, { .name = "u.interface", .descr = "", .offset = offsetof(bcmbal_tm_sched_owner, u.interface), .type = &type_descr_bcmbal_tm_sched_owner_interface }, { .name = "u.sub_term", .descr = "", .offset = offsetof(bcmbal_tm_sched_owner, u.sub_term), .type = &type_descr_bcmbal_tm_sched_owner_sub_term }, { .name = "u.agg_port", .descr = "", .offset = offsetof(bcmbal_tm_sched_owner, u.agg_port), .type = &type_descr_bcmbal_tm_sched_owner_agg_port }, { .name = "u.uni", .descr = "", .offset = offsetof(bcmbal_tm_sched_owner, u.uni), .type = &type_descr_bcmbal_tm_sched_owner_uni }, { .name = "u.virtual", .descr = "", .offset = offsetof(bcmbal_tm_sched_owner, u.virtual), .type = &type_descr_bcmbal_tm_sched_owner_virtual }, { } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_tm_sched_owner = { .name = "bcmbal_tm_sched_owner", .descr = "TM Scheduler Owner", .size = sizeof(bcmbal_tm_sched_owner), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_UNION, .x = { .u = { .num_common_fields = sizeof(type_descr_bcmbal_tm_sched_owner_fields) / sizeof(bcmbal_apicli_field_descr), .common_fields = type_descr_bcmbal_tm_sched_owner_fields, .classifier_idx = 0, .union_fields = type_descr_bcmbal_tm_sched_owner_union_fields } } };
+bcmcli_enum_val bcmbal_tm_sched_parent_id_string_table[] = { { .name = "none", .val = BCMBAL_TM_SCHED_PARENT_ID_NONE }, { .name = "sched_id", .val = BCMBAL_TM_SCHED_PARENT_ID_SCHED_ID }, { .name = "priority", .val = BCMBAL_TM_SCHED_PARENT_ID_PRIORITY }, { .name = "weight", .val = BCMBAL_TM_SCHED_PARENT_ID_WEIGHT }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_tm_sched_parent_id = { .name = "bcmbal_tm_sched_parent_id", .descr = "tm_sched_parent ID", .size = sizeof(bcmbal_tm_sched_parent_id), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM_MASK, .x = { .e = bcmbal_tm_sched_parent_id_string_table } };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_tm_sched_parent_fields[] = { { .name = "presence_mask", .descr = "Presence Mask", .offset = offsetof(bcmbal_tm_sched_parent, presence_mask), .type = &type_descr_bcmbal_tm_sched_parent_id, .flags = BCMBAL_APICLI_FIELD_DESCR_FLAGS_PRESENCE_MASK }, { .name = "sched_id", .descr = "Parent scheduler id", .offset = offsetof(bcmbal_tm_sched_parent, sched_id), .type = &type_descr_uint32_t }, { .name = "priority", .descr = "Priority", .offset = offsetof(bcmbal_tm_sched_parent, priority), .type = &type_descr_uint8_t }, { .name = "weight", .descr = "Weight", .offset = offsetof(bcmbal_tm_sched_parent, weight), .type = &type_descr_uint8_t } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_tm_sched_parent = { .name = "bcmbal_tm_sched_parent", .descr = "Scheduling Parent Connect Point", .size = sizeof(bcmbal_tm_sched_parent), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_tm_sched_parent_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_tm_sched_parent_fields } } };
+bcmcli_enum_val bcmbal_tm_sched_type_string_table[] = { { .name = "none", .val = BCMBAL_TM_SCHED_TYPE_NONE }, { .name = "wfq", .val = BCMBAL_TM_SCHED_TYPE_WFQ }, { .name = "sp", .val = BCMBAL_TM_SCHED_TYPE_SP }, { .name = "sp_wfq", .val = BCMBAL_TM_SCHED_TYPE_SP_WFQ }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_tm_sched_type = { .name = "bcmbal_tm_sched_type", .descr = "Scheduler Type", .size = sizeof(bcmbal_tm_sched_type), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM, .x = { .e = bcmbal_tm_sched_type_string_table } };
+bcmcli_enum_val bcmbal_tm_shaping_id_string_table[] = { { .name = "none", .val = BCMBAL_TM_SHAPING_ID_NONE }, { .name = "sbr", .val = BCMBAL_TM_SHAPING_ID_SBR }, { .name = "pbr", .val = BCMBAL_TM_SHAPING_ID_PBR }, { .name = "burst", .val = BCMBAL_TM_SHAPING_ID_BURST }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_tm_shaping_id = { .name = "bcmbal_tm_shaping_id", .descr = "tm_shaping ID", .size = sizeof(bcmbal_tm_shaping_id), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM_MASK, .x = { .e = bcmbal_tm_shaping_id_string_table } };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_tm_shaping_fields[] = { { .name = "presence_mask", .descr = "Presence Mask", .offset = offsetof(bcmbal_tm_shaping, presence_mask), .type = &type_descr_bcmbal_tm_shaping_id, .flags = BCMBAL_APICLI_FIELD_DESCR_FLAGS_PRESENCE_MASK }, { .name = "sbr", .descr = "Sustained Bit Rate (kbps)", .offset = offsetof(bcmbal_tm_shaping, sbr), .type = &type_descr_uint32_t }, { .name = "pbr", .descr = "Peak Bit Rate (kbps)", .offset = offsetof(bcmbal_tm_shaping, pbr), .type = &type_descr_uint32_t }, { .name = "burst", .descr = "Max Burst Bytes at Peak Bit Rate", .offset = offsetof(bcmbal_tm_shaping, burst), .type = &type_descr_uint32_t } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_tm_shaping = { .name = "bcmbal_tm_shaping", .descr = "Shaping Parameters", .size = sizeof(bcmbal_tm_shaping), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_tm_shaping_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_tm_shaping_fields } } };
+bcmcli_enum_val bcmbal_tm_tcont_sla_id_string_table[] = { { .name = "none", .val = BCMBAL_TM_TCONT_SLA_ID_NONE }, { .name = "extra_bw_elig", .val = BCMBAL_TM_TCONT_SLA_ID_EXTRA_BW_ELIG }, { .name = "nrt_cbr", .val = BCMBAL_TM_TCONT_SLA_ID_NRT_CBR }, { .name = "rt_cbr", .val = BCMBAL_TM_TCONT_SLA_ID_RT_CBR }, { .name = "rt_profile", .val = BCMBAL_TM_TCONT_SLA_ID_RT_PROFILE }, { .name = "nrt_profile", .val = BCMBAL_TM_TCONT_SLA_ID_NRT_PROFILE }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_tm_tcont_sla_id = { .name = "bcmbal_tm_tcont_sla_id", .descr = "tm_tcont_sla ID", .size = sizeof(bcmbal_tm_tcont_sla_id), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM_MASK, .x = { .e = bcmbal_tm_tcont_sla_id_string_table } };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_tm_tcont_sla_fields[] = { { .name = "presence_mask", .descr = "Presence Mask", .offset = offsetof(bcmbal_tm_tcont_sla, presence_mask), .type = &type_descr_bcmbal_tm_tcont_sla_id, .flags = BCMBAL_APICLI_FIELD_DESCR_FLAGS_PRESENCE_MASK }, { .name = "extra_bw_elig", .descr = "Extra BW eligibility type", .offset = offsetof(bcmbal_tm_tcont_sla, extra_bw_elig), .type = &type_descr_bcmbal_extra_bw_eligibility_type }, { .name = "nrt_cbr", .descr = "NRT CBR", .offset = offsetof(bcmbal_tm_tcont_sla, nrt_cbr), .type = &type_descr_uint8_t }, { .name = "rt_cbr", .descr = "RT_CBR", .offset = offsetof(bcmbal_tm_tcont_sla, rt_cbr), .type = &type_descr_uint8_t }, { .name = "rt_profile", .descr = "RT Profile", .offset = offsetof(bcmbal_tm_tcont_sla, rt_profile), .type = &type_descr_uint8_t }, { .name = "nrt_profile", .descr = "NRT Profile", .offset = offsetof(bcmbal_tm_tcont_sla, nrt_profile), .type = &type_descr_uint8_t } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_tm_tcont_sla = { .name = "bcmbal_tm_tcont_sla", .descr = "ITU-PON Extended SLA Parameters", .size = sizeof(bcmbal_tm_tcont_sla), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_tm_tcont_sla_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_tm_tcont_sla_fields } } };
+bcmcli_enum_val bcmbal_trx_type_string_table[] = { { .name = "gpon_sps_43_48", .val = BCMBAL_TRX_TYPE_GPON_SPS_43_48 }, { .name = "gpon_sps_sog_4321", .val = BCMBAL_TRX_TYPE_GPON_SPS_SOG_4321 }, { .name = "gpon_lte_3680_m", .val = BCMBAL_TRX_TYPE_GPON_LTE_3680_M }, { .name = "gpon_source_photonics", .val = BCMBAL_TRX_TYPE_GPON_SOURCE_PHOTONICS }, { .name = "gpon_lte_3680_p", .val = BCMBAL_TRX_TYPE_GPON_LTE_3680_P }, { .name = "xgpon_lth_7222_pc", .val = BCMBAL_TRX_TYPE_XGPON_LTH_7222_PC }, { .name = "xgpon_lth_7226_pc", .val = BCMBAL_TRX_TYPE_XGPON_LTH_7226_PC }, { .name = "xgpon_lth_5302_pc", .val = BCMBAL_TRX_TYPE_XGPON_LTH_5302_PC }, BCMCLI_ENUM_LAST };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_trx_type = { .name = "bcmbal_trx_type", .descr = "Transceiver types", .size = sizeof(bcmbal_trx_type), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ENUM, .x = { .e = bcmbal_trx_type_string_table } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_u8_list_u32 = { .name = "bcmbal_u8_list_u32", .descr = "Variable-length list of U8", .size = sizeof(bcmbal_u8_list_u32), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_ARR_DYN, .x = { .arr_dyn = { .elem_type = &type_descr_uint8_t, .len_size = 4, .max_size = DEFAULT_DYN_ARR_MAX_SIZE / sizeof(uint8_t) } } };
+
+/* ==== Object: access_terminal ==== */
+
+/* Group: access_terminal - key */
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_access_terminal_key_access_term_id = { .name = "access_term_id", .descr = "Reserved (set to 0)", .access = 0, .property = BCMBAL_ACCESS_TERMINAL_KEY_ID_ACCESS_TERM_ID, .offset = offsetof(bcmbal_access_terminal_key, access_term_id), .type = &type_descr_uint32_t };
+static bcmbal_apicli_prop_descr * BCM_DESCR access_terminal_key_prop_array[] = { &prop_descr_access_terminal_key_access_term_id };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_access_terminal_key_fields[] = { { .name = "access_term_id", .descr = "Reserved (set to 0)", .offset = offsetof(bcmbal_access_terminal_key, access_term_id), .type = &type_descr_uint32_t } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_access_terminal_key = { .name = "bcmbal_access_terminal_key", .descr = "key", .size = sizeof(bcmbal_access_terminal_key), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_access_terminal_key_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_access_terminal_key_fields } } };
+
+/* Group: access_terminal - cfg */
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_access_terminal_cfg_admin_state = { .name = "admin_state", .descr = "Administrative state", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_ACCESS_TERMINAL_CFG_ID_ADMIN_STATE, .offset = offsetof(bcmbal_access_terminal_cfg_data, admin_state), .type = &type_descr_bcmbal_state };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_access_terminal_cfg_oper_status = { .name = "oper_status", .descr = "Operational status", .access = BCMBAL_APICLI_PROP_ACCESS_ID_R, .property = BCMBAL_ACCESS_TERMINAL_CFG_ID_OPER_STATUS, .offset = offsetof(bcmbal_access_terminal_cfg_data, oper_status), .type = &type_descr_bcmbal_status };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_access_terminal_cfg_iwf_mode = { .name = "iwf_mode", .descr = "The interworking mode", .access = BCMBAL_APICLI_PROP_ACCESS_ID_R, .property = BCMBAL_ACCESS_TERMINAL_CFG_ID_IWF_MODE, .offset = offsetof(bcmbal_access_terminal_cfg_data, iwf_mode), .type = &type_descr_bcmbal_iwf_mode };
+static bcmbal_apicli_prop_descr * BCM_DESCR access_terminal_cfg_prop_array[] = { &prop_descr_access_terminal_cfg_admin_state, &prop_descr_access_terminal_cfg_oper_status, &prop_descr_access_terminal_cfg_iwf_mode };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_access_terminal_cfg_data_fields[] = { { .name = "admin_state", .descr = "Administrative state", .offset = offsetof(bcmbal_access_terminal_cfg_data, admin_state), .type = &type_descr_bcmbal_state }, { .name = "oper_status", .descr = "Operational status", .offset = offsetof(bcmbal_access_terminal_cfg_data, oper_status), .type = &type_descr_bcmbal_status }, { .name = "iwf_mode", .descr = "The interworking mode", .offset = offsetof(bcmbal_access_terminal_cfg_data, iwf_mode), .type = &type_descr_bcmbal_iwf_mode } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_access_terminal_cfg_data = { .name = "bcmbal_access_terminal_cfg_data", .descr = "cfg", .size = sizeof(bcmbal_access_terminal_cfg_data), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_access_terminal_cfg_data_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_access_terminal_cfg_data_fields } } };
+
+/* Group: access_terminal - ind */
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_access_terminal_ind_admin_state = { .name = "admin_state", .descr = "Current administrative state", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_ACCESS_TERMINAL_IND_ID_ADMIN_STATE, .offset = offsetof(bcmbal_access_terminal_ind_data, admin_state), .type = &type_descr_bcmbal_state };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_access_terminal_ind_oper_status = { .name = "oper_status", .descr = "Current operational status", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_ACCESS_TERMINAL_IND_ID_OPER_STATUS, .offset = offsetof(bcmbal_access_terminal_ind_data, oper_status), .type = &type_descr_bcmbal_status };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_access_terminal_ind_iwf_mode = { .name = "iwf_mode", .descr = "The interworking mode", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_ACCESS_TERMINAL_IND_ID_IWF_MODE, .offset = offsetof(bcmbal_access_terminal_ind_data, iwf_mode), .type = &type_descr_bcmbal_iwf_mode };
+static bcmbal_apicli_prop_descr * BCM_DESCR access_terminal_ind_prop_array[] = { &prop_descr_access_terminal_ind_admin_state, &prop_descr_access_terminal_ind_oper_status, &prop_descr_access_terminal_ind_iwf_mode };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_access_terminal_ind_data_fields[] = { { .name = "admin_state", .descr = "Current administrative state", .offset = offsetof(bcmbal_access_terminal_ind_data, admin_state), .type = &type_descr_bcmbal_state }, { .name = "oper_status", .descr = "Current operational status", .offset = offsetof(bcmbal_access_terminal_ind_data, oper_status), .type = &type_descr_bcmbal_status }, { .name = "iwf_mode", .descr = "The interworking mode", .offset = offsetof(bcmbal_access_terminal_ind_data, iwf_mode), .type = &type_descr_bcmbal_iwf_mode } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_access_terminal_ind_data = { .name = "bcmbal_access_terminal_ind_data", .descr = "Access Terminal Indication", .size = sizeof(bcmbal_access_terminal_ind_data), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_access_terminal_ind_data_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_access_terminal_ind_data_fields } } };
+
+/* ==== Object: flow ==== */
+
+/* Group: flow - cfg */
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_flow_cfg_admin_state = { .name = "admin_state", .descr = "Administrative state", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_FLOW_CFG_ID_ADMIN_STATE, .offset = offsetof(bcmbal_flow_cfg_data, admin_state), .type = &type_descr_bcmbal_state };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_flow_cfg_oper_status = { .name = "oper_status", .descr = "Operational status", .access = BCMBAL_APICLI_PROP_ACCESS_ID_R, .property = BCMBAL_FLOW_CFG_ID_OPER_STATUS, .offset = offsetof(bcmbal_flow_cfg_data, oper_status), .type = &type_descr_bcmbal_status };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_flow_cfg_access_int_id = { .name = "access_int_id", .descr = "The ID of the subscriber side interface; i.e. PON", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_FLOW_CFG_ID_ACCESS_INT_ID, .offset = offsetof(bcmbal_flow_cfg_data, access_int_id), .type = &type_descr_uint32_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_flow_cfg_network_int_id = { .name = "network_int_id", .descr = "The ID of the network side interface; i.e. NNI", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_FLOW_CFG_ID_NETWORK_INT_ID, .offset = offsetof(bcmbal_flow_cfg_data, network_int_id), .type = &type_descr_uint32_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_flow_cfg_sub_term_id = { .name = "sub_term_id", .descr = "The ID of the subsccriber terminal device", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_FLOW_CFG_ID_SUB_TERM_ID, .offset = offsetof(bcmbal_flow_cfg_data, sub_term_id), .type = &type_descr_uint32_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_flow_cfg_sub_term_uni_idx = { .name = "sub_term_uni_idx", .descr = "The index of the subsccriber terminal uni port the flow is related to", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_FLOW_CFG_ID_SUB_TERM_UNI_IDX, .offset = offsetof(bcmbal_flow_cfg_data, sub_term_uni_idx), .type = &type_descr_uint8_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_flow_cfg_svc_port_id = { .name = "svc_port_id", .descr = "The ID of the service port (for GPON/XGPON - GEM ID)", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_FLOW_CFG_ID_SVC_PORT_ID, .offset = offsetof(bcmbal_flow_cfg_data, svc_port_id), .type = &type_descr_uint16_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_flow_cfg_agg_port_id = { .name = "agg_port_id", .descr = "The ID of the aggregate port (for GPON/XGPON - ALLOC ID)", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_FLOW_CFG_ID_AGG_PORT_ID, .offset = offsetof(bcmbal_flow_cfg_data, agg_port_id), .type = &type_descr_uint16_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_flow_cfg_resolve_mac = { .name = "resolve_mac", .descr = "A flag indicating if the MAC address table should be used in DS GEM resolution", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_FLOW_CFG_ID_RESOLVE_MAC, .offset = offsetof(bcmbal_flow_cfg_data, resolve_mac), .type = &type_descr_bcmos_bool };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_flow_cfg_classifier = { .name = "classifier", .descr = "The classifier for this flow", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_FLOW_CFG_ID_CLASSIFIER, .offset = offsetof(bcmbal_flow_cfg_data, classifier), .type = &type_descr_bcmbal_classifier };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_flow_cfg_action = { .name = "action", .descr = "The action associated with the flow", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_FLOW_CFG_ID_ACTION, .offset = offsetof(bcmbal_flow_cfg_data, action), .type = &type_descr_bcmbal_action };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_flow_cfg_sla = { .name = "sla", .descr = "SLA parameters for this flow", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_FLOW_CFG_ID_SLA, .offset = offsetof(bcmbal_flow_cfg_data, sla), .type = &type_descr_bcmbal_sla };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_flow_cfg_cookie = { .name = "cookie", .descr = "Application cookie", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_FLOW_CFG_ID_COOKIE, .offset = offsetof(bcmbal_flow_cfg_data, cookie), .type = &type_descr_uint64_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_flow_cfg_priority = { .name = "priority", .descr = "Priority", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_FLOW_CFG_ID_PRIORITY, .offset = offsetof(bcmbal_flow_cfg_data, priority), .type = &type_descr_uint16_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_flow_cfg_group_id = { .name = "group_id", .descr = "RW - The multicast group associated with this flow, valid for type MULTICAST only", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_FLOW_CFG_ID_GROUP_ID, .offset = offsetof(bcmbal_flow_cfg_data, group_id), .type = &type_descr_uint32_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_flow_cfg_queue = { .name = "queue", .descr = "Egress queue", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_FLOW_CFG_ID_QUEUE, .offset = offsetof(bcmbal_flow_cfg_data, queue), .type = &type_descr_bcmbal_tm_queue_ref };
+static bcmbal_apicli_prop_descr * BCM_DESCR flow_cfg_prop_array[] = { &prop_descr_flow_cfg_admin_state, &prop_descr_flow_cfg_oper_status, &prop_descr_flow_cfg_access_int_id, &prop_descr_flow_cfg_network_int_id, &prop_descr_flow_cfg_sub_term_id, &prop_descr_flow_cfg_sub_term_uni_idx, &prop_descr_flow_cfg_svc_port_id, &prop_descr_flow_cfg_agg_port_id, &prop_descr_flow_cfg_resolve_mac, &prop_descr_flow_cfg_classifier, &prop_descr_flow_cfg_action, &prop_descr_flow_cfg_sla, &prop_descr_flow_cfg_cookie, &prop_descr_flow_cfg_priority, &prop_descr_flow_cfg_group_id, &prop_descr_flow_cfg_queue };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_flow_cfg_data_fields[] = { { .name = "admin_state", .descr = "Administrative state", .offset = offsetof(bcmbal_flow_cfg_data, admin_state), .type = &type_descr_bcmbal_state }, { .name = "oper_status", .descr = "Operational status", .offset = offsetof(bcmbal_flow_cfg_data, oper_status), .type = &type_descr_bcmbal_status }, { .name = "access_int_id", .descr = "The ID of the subscriber side interface; i.e. PON", .offset = offsetof(bcmbal_flow_cfg_data, access_int_id), .type = &type_descr_uint32_t }, { .name = "network_int_id", .descr = "The ID of the network side interface; i.e. NNI", .offset = offsetof(bcmbal_flow_cfg_data, network_int_id), .type = &type_descr_uint32_t }, { .name = "sub_term_id", .descr = "The ID of the subsccriber terminal device", .offset = offsetof(bcmbal_flow_cfg_data, sub_term_id), .type = &type_descr_uint32_t }, { .name = "sub_term_uni_idx", .descr = "The index of the subsccriber terminal uni port the flow is related to", .offset = offsetof(bcmbal_flow_cfg_data, sub_term_uni_idx), .type = &type_descr_uint8_t }, { .name = "svc_port_id", .descr = "The ID of the service port (for GPON/XGPON - GEM ID)", .offset = offsetof(bcmbal_flow_cfg_data, svc_port_id), .type = &type_descr_uint16_t }, { .name = "agg_port_id", .descr = "The ID of the aggregate port (for GPON/XGPON - ALLOC ID)", .offset = offsetof(bcmbal_flow_cfg_data, agg_port_id), .type = &type_descr_uint16_t }, { .name = "resolve_mac", .descr = "A flag indicating if the MAC address table should be used in DS GEM resolution", .offset = offsetof(bcmbal_flow_cfg_data, resolve_mac), .type = &type_descr_bcmos_bool }, { .name = "classifier", .descr = "The classifier for this flow", .offset = offsetof(bcmbal_flow_cfg_data, classifier), .type = &type_descr_bcmbal_classifier }, { .name = "action", .descr = "The action associated with the flow", .offset = offsetof(bcmbal_flow_cfg_data, action), .type = &type_descr_bcmbal_action }, { .name = "sla", .descr = "SLA parameters for this flow", .offset = offsetof(bcmbal_flow_cfg_data, sla), .type = &type_descr_bcmbal_sla }, { .name = "cookie", .descr = "Application cookie", .offset = offsetof(bcmbal_flow_cfg_data, cookie), .type = &type_descr_uint64_t }, { .name = "priority", .descr = "Priority", .offset = offsetof(bcmbal_flow_cfg_data, priority), .type = &type_descr_uint16_t }, { .name = "group_id", .descr = "RW - The multicast group associated with this flow, valid for type MULTICAST only", .offset = offsetof(bcmbal_flow_cfg_data, group_id), .type = &type_descr_uint32_t }, { .name = "queue", .descr = "Egress queue", .offset = offsetof(bcmbal_flow_cfg_data, queue), .type = &type_descr_bcmbal_tm_queue_ref } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_flow_cfg_data = { .name = "bcmbal_flow_cfg_data", .descr = "cfg", .size = sizeof(bcmbal_flow_cfg_data), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_flow_cfg_data_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_flow_cfg_data_fields } } };
+
+/* Group: flow - key */
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_flow_key_flow_id = { .name = "flow_id", .descr = "The ID of the flow object instance being referenced", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_FLOW_KEY_ID_FLOW_ID, .offset = offsetof(bcmbal_flow_key, flow_id), .type = &type_descr_uint32_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_flow_key_flow_type = { .name = "flow_type", .descr = "The type of the flow, Upstream, Downstream, Broadcast or Multicast", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_FLOW_KEY_ID_FLOW_TYPE, .offset = offsetof(bcmbal_flow_key, flow_type), .type = &type_descr_bcmbal_flow_type };
+static bcmbal_apicli_prop_descr * BCM_DESCR flow_key_prop_array[] = { &prop_descr_flow_key_flow_id, &prop_descr_flow_key_flow_type };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_flow_key_fields[] = { { .name = "flow_id", .descr = "The ID of the flow object instance being referenced", .offset = offsetof(bcmbal_flow_key, flow_id), .type = &type_descr_uint32_t }, { .name = "flow_type", .descr = "The type of the flow, Upstream, Downstream, Broadcast or Multicast", .offset = offsetof(bcmbal_flow_key, flow_type), .type = &type_descr_bcmbal_flow_type } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_flow_key = { .name = "bcmbal_flow_key", .descr = "key", .size = sizeof(bcmbal_flow_key), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_flow_key_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_flow_key_fields } } };
+
+/* Group: flow - stat */
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_flow_stat_rx_packets = { .name = "rx_packets", .descr = "Received packets", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_FLOW_STAT_ID_RX_PACKETS, .offset = offsetof(bcmbal_flow_stat_data, rx_packets), .type = &type_descr_uint64_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_flow_stat_rx_bytes = { .name = "rx_bytes", .descr = "Received bytes", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_FLOW_STAT_ID_RX_BYTES, .offset = offsetof(bcmbal_flow_stat_data, rx_bytes), .type = &type_descr_uint64_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_flow_stat_tx_packets = { .name = "tx_packets", .descr = "Transmitted packets", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_FLOW_STAT_ID_TX_PACKETS, .offset = offsetof(bcmbal_flow_stat_data, tx_packets), .type = &type_descr_uint64_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_flow_stat_tx_bytes = { .name = "tx_bytes", .descr = "Transmitted bytes", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_FLOW_STAT_ID_TX_BYTES, .offset = offsetof(bcmbal_flow_stat_data, tx_bytes), .type = &type_descr_uint64_t };
+static bcmbal_apicli_prop_descr * BCM_DESCR flow_stat_prop_array[] = { &prop_descr_flow_stat_rx_packets, &prop_descr_flow_stat_rx_bytes, &prop_descr_flow_stat_tx_packets, &prop_descr_flow_stat_tx_bytes };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_flow_stat_data_fields[] = { { .name = "rx_packets", .descr = "Received packets", .offset = offsetof(bcmbal_flow_stat_data, rx_packets), .type = &type_descr_uint64_t }, { .name = "rx_bytes", .descr = "Received bytes", .offset = offsetof(bcmbal_flow_stat_data, rx_bytes), .type = &type_descr_uint64_t }, { .name = "tx_packets", .descr = "Transmitted packets", .offset = offsetof(bcmbal_flow_stat_data, tx_packets), .type = &type_descr_uint64_t }, { .name = "tx_bytes", .descr = "Transmitted bytes", .offset = offsetof(bcmbal_flow_stat_data, tx_bytes), .type = &type_descr_uint64_t } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_flow_stat_data = { .name = "bcmbal_flow_stat_data", .descr = "stat", .size = sizeof(bcmbal_flow_stat_data), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_flow_stat_data_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_flow_stat_data_fields } } };
+
+/* Group: flow - ind */
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_flow_ind_admin_state = { .name = "admin_state", .descr = "Administrative state", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_FLOW_IND_ID_ADMIN_STATE, .offset = offsetof(bcmbal_flow_ind_data, admin_state), .type = &type_descr_bcmbal_state };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_flow_ind_oper_status = { .name = "oper_status", .descr = "Operational Status", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_FLOW_IND_ID_OPER_STATUS, .offset = offsetof(bcmbal_flow_ind_data, oper_status), .type = &type_descr_bcmbal_status };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_flow_ind_access_int_id = { .name = "access_int_id", .descr = "The ID of the subscriber side interface; i.e. PON", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_FLOW_IND_ID_ACCESS_INT_ID, .offset = offsetof(bcmbal_flow_ind_data, access_int_id), .type = &type_descr_uint16_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_flow_ind_network_int_id = { .name = "network_int_id", .descr = "The ID of the network side interface; i.e. NNI", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_FLOW_IND_ID_NETWORK_INT_ID, .offset = offsetof(bcmbal_flow_ind_data, network_int_id), .type = &type_descr_uint16_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_flow_ind_sub_term_id = { .name = "sub_term_id", .descr = "The ID of the subsccriber terminal device", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_FLOW_IND_ID_SUB_TERM_ID, .offset = offsetof(bcmbal_flow_ind_data, sub_term_id), .type = &type_descr_uint32_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_flow_ind_svc_port_id = { .name = "svc_port_id", .descr = "The ID of the service port (for GPON/XGPON - GEM ID)", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_FLOW_IND_ID_SVC_PORT_ID, .offset = offsetof(bcmbal_flow_ind_data, svc_port_id), .type = &type_descr_uint16_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_flow_ind_agg_port_id = { .name = "agg_port_id", .descr = "The ID of the aggregate port (for GPON/XGPON - ALLOC ID)", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_FLOW_IND_ID_AGG_PORT_ID, .offset = offsetof(bcmbal_flow_ind_data, agg_port_id), .type = &type_descr_uint16_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_flow_ind_resolve_mac = { .name = "resolve_mac", .descr = "A flag indicating if the MAC address table should be used in DS GEM resolution", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_FLOW_IND_ID_RESOLVE_MAC, .offset = offsetof(bcmbal_flow_ind_data, resolve_mac), .type = &type_descr_bcmos_bool };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_flow_ind_base_tc_id = { .name = "base_tc_id", .descr = "The base index of the TC object(s) to be used for this flow", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_FLOW_IND_ID_BASE_TC_ID, .offset = offsetof(bcmbal_flow_ind_data, base_tc_id), .type = &type_descr_uint16_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_flow_ind_classifier = { .name = "classifier", .descr = "The classifier for this flow", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_FLOW_IND_ID_CLASSIFIER, .offset = offsetof(bcmbal_flow_ind_data, classifier), .type = &type_descr_bcmbal_classifier };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_flow_ind_action = { .name = "action", .descr = "The action associated with the flow", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_FLOW_IND_ID_ACTION, .offset = offsetof(bcmbal_flow_ind_data, action), .type = &type_descr_bcmbal_action };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_flow_ind_sla = { .name = "sla", .descr = "SLA parameters for this flow", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_FLOW_IND_ID_SLA, .offset = offsetof(bcmbal_flow_ind_data, sla), .type = &type_descr_bcmbal_sla };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_flow_ind_cookie = { .name = "cookie", .descr = "Application cookie", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_FLOW_IND_ID_COOKIE, .offset = offsetof(bcmbal_flow_ind_data, cookie), .type = &type_descr_uint32_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_flow_ind_priority = { .name = "priority", .descr = "Priority", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_FLOW_IND_ID_PRIORITY, .offset = offsetof(bcmbal_flow_ind_data, priority), .type = &type_descr_uint16_t };
+static bcmbal_apicli_prop_descr * BCM_DESCR flow_ind_prop_array[] = { &prop_descr_flow_ind_admin_state, &prop_descr_flow_ind_oper_status, &prop_descr_flow_ind_access_int_id, &prop_descr_flow_ind_network_int_id, &prop_descr_flow_ind_sub_term_id, &prop_descr_flow_ind_svc_port_id, &prop_descr_flow_ind_agg_port_id, &prop_descr_flow_ind_resolve_mac, &prop_descr_flow_ind_base_tc_id, &prop_descr_flow_ind_classifier, &prop_descr_flow_ind_action, &prop_descr_flow_ind_sla, &prop_descr_flow_ind_cookie, &prop_descr_flow_ind_priority };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_flow_ind_data_fields[] = { { .name = "admin_state", .descr = "Administrative state", .offset = offsetof(bcmbal_flow_ind_data, admin_state), .type = &type_descr_bcmbal_state }, { .name = "oper_status", .descr = "Operational Status", .offset = offsetof(bcmbal_flow_ind_data, oper_status), .type = &type_descr_bcmbal_status }, { .name = "access_int_id", .descr = "The ID of the subscriber side interface; i.e. PON", .offset = offsetof(bcmbal_flow_ind_data, access_int_id), .type = &type_descr_uint16_t }, { .name = "network_int_id", .descr = "The ID of the network side interface; i.e. NNI", .offset = offsetof(bcmbal_flow_ind_data, network_int_id), .type = &type_descr_uint16_t }, { .name = "sub_term_id", .descr = "The ID of the subsccriber terminal device", .offset = offsetof(bcmbal_flow_ind_data, sub_term_id), .type = &type_descr_uint32_t }, { .name = "svc_port_id", .descr = "The ID of the service port (for GPON/XGPON - GEM ID)", .offset = offsetof(bcmbal_flow_ind_data, svc_port_id), .type = &type_descr_uint16_t }, { .name = "agg_port_id", .descr = "The ID of the aggregate port (for GPON/XGPON - ALLOC ID)", .offset = offsetof(bcmbal_flow_ind_data, agg_port_id), .type = &type_descr_uint16_t }, { .name = "resolve_mac", .descr = "A flag indicating if the MAC address table should be used in DS GEM resolution", .offset = offsetof(bcmbal_flow_ind_data, resolve_mac), .type = &type_descr_bcmos_bool }, { .name = "base_tc_id", .descr = "The base index of the TC object(s) to be used for this flow", .offset = offsetof(bcmbal_flow_ind_data, base_tc_id), .type = &type_descr_uint16_t }, { .name = "classifier", .descr = "The classifier for this flow", .offset = offsetof(bcmbal_flow_ind_data, classifier), .type = &type_descr_bcmbal_classifier }, { .name = "action", .descr = "The action associated with the flow", .offset = offsetof(bcmbal_flow_ind_data, action), .type = &type_descr_bcmbal_action }, { .name = "sla", .descr = "SLA parameters for this flow", .offset = offsetof(bcmbal_flow_ind_data, sla), .type = &type_descr_bcmbal_sla }, { .name = "cookie", .descr = "Application cookie", .offset = offsetof(bcmbal_flow_ind_data, cookie), .type = &type_descr_uint32_t }, { .name = "priority", .descr = "Priority", .offset = offsetof(bcmbal_flow_ind_data, priority), .type = &type_descr_uint16_t } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_flow_ind_data = { .name = "bcmbal_flow_ind_data", .descr = "Flow Indication", .size = sizeof(bcmbal_flow_ind_data), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_flow_ind_data_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_flow_ind_data_fields } } };
+
+/* ==== Object: group ==== */
+
+/* Group: group - cfg */
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_group_cfg_members_cmd = { .name = "members_cmd", .descr = "Membership operation commands", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_GROUP_CFG_ID_MEMBERS_CMD, .offset = offsetof(bcmbal_group_cfg_data, members_cmd), .type = &type_descr_bcmbal_group_member_cmd };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_group_cfg_members = { .name = "members", .descr = "The list of members associated with this group", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_GROUP_CFG_ID_MEMBERS, .offset = offsetof(bcmbal_group_cfg_data, members), .type = &type_descr_bcmbal_group_member_info_list_u16 };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_group_cfg_cookie = { .name = "cookie", .descr = "Application cookie", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_GROUP_CFG_ID_COOKIE, .offset = offsetof(bcmbal_group_cfg_data, cookie), .type = &type_descr_uint64_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_group_cfg_flows = { .name = "flows", .descr = "List of flows associated with this group", .access = BCMBAL_APICLI_PROP_ACCESS_ID_R, .property = BCMBAL_GROUP_CFG_ID_FLOWS, .offset = offsetof(bcmbal_group_cfg_data, flows), .type = &type_descr_bcmbal_flow_id_list_u32 };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_group_cfg_owner = { .name = "owner", .descr = "Owner of the group", .access = BCMBAL_APICLI_PROP_ACCESS_ID_R, .property = BCMBAL_GROUP_CFG_ID_OWNER, .offset = offsetof(bcmbal_group_cfg_data, owner), .type = &type_descr_bcmbal_group_owner };
+static bcmbal_apicli_prop_descr * BCM_DESCR group_cfg_prop_array[] = { &prop_descr_group_cfg_members_cmd, &prop_descr_group_cfg_members, &prop_descr_group_cfg_cookie, &prop_descr_group_cfg_flows, &prop_descr_group_cfg_owner };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_group_cfg_data_fields[] = { { .name = "members_cmd", .descr = "Membership operation commands", .offset = offsetof(bcmbal_group_cfg_data, members_cmd), .type = &type_descr_bcmbal_group_member_cmd }, { .name = "members", .descr = "The list of members associated with this group", .offset = offsetof(bcmbal_group_cfg_data, members), .type = &type_descr_bcmbal_group_member_info_list_u16 }, { .name = "cookie", .descr = "Application cookie", .offset = offsetof(bcmbal_group_cfg_data, cookie), .type = &type_descr_uint64_t }, { .name = "flows", .descr = "List of flows associated with this group", .offset = offsetof(bcmbal_group_cfg_data, flows), .type = &type_descr_bcmbal_flow_id_list_u32 }, { .name = "owner", .descr = "Owner of the group", .offset = offsetof(bcmbal_group_cfg_data, owner), .type = &type_descr_bcmbal_group_owner } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_group_cfg_data = { .name = "bcmbal_group_cfg_data", .descr = "cfg", .size = sizeof(bcmbal_group_cfg_data), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_group_cfg_data_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_group_cfg_data_fields } } };
+
+/* Group: group - key */
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_group_key_group_id = { .name = "group_id", .descr = "The ID of the group object instance being referenced", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_GROUP_KEY_ID_GROUP_ID, .offset = offsetof(bcmbal_group_key, group_id), .type = &type_descr_uint32_t };
+static bcmbal_apicli_prop_descr * BCM_DESCR group_key_prop_array[] = { &prop_descr_group_key_group_id };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_group_key_fields[] = { { .name = "group_id", .descr = "The ID of the group object instance being referenced", .offset = offsetof(bcmbal_group_key, group_id), .type = &type_descr_uint32_t } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_group_key = { .name = "bcmbal_group_key", .descr = "key", .size = sizeof(bcmbal_group_key), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_group_key_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_group_key_fields } } };
+
+/* ==== Object: interface ==== */
+
+/* Group: interface - key */
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_interface_key_intf_id = { .name = "intf_id", .descr = "intf_id", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_INTERFACE_KEY_ID_INTF_ID, .offset = offsetof(bcmbal_interface_key, intf_id), .type = &type_descr_uint32_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_interface_key_intf_type = { .name = "intf_type", .descr = "intf_type", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_INTERFACE_KEY_ID_INTF_TYPE, .offset = offsetof(bcmbal_interface_key, intf_type), .type = &type_descr_bcmbal_intf_type };
+static bcmbal_apicli_prop_descr * BCM_DESCR interface_key_prop_array[] = { &prop_descr_interface_key_intf_id, &prop_descr_interface_key_intf_type };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_interface_key_fields[] = { { .name = "intf_id", .descr = "intf_id", .offset = offsetof(bcmbal_interface_key, intf_id), .type = &type_descr_uint32_t }, { .name = "intf_type", .descr = "intf_type", .offset = offsetof(bcmbal_interface_key, intf_type), .type = &type_descr_bcmbal_intf_type } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_interface_key = { .name = "bcmbal_interface_key", .descr = "key", .size = sizeof(bcmbal_interface_key), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_interface_key_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_interface_key_fields } } };
+
+/* Group: interface - cfg */
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_interface_cfg_admin_state = { .name = "admin_state", .descr = "Administrative state", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_INTERFACE_CFG_ID_ADMIN_STATE, .offset = offsetof(bcmbal_interface_cfg_data, admin_state), .type = &type_descr_bcmbal_state };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_interface_cfg_oper_status = { .name = "oper_status", .descr = "Operational status", .access = BCMBAL_APICLI_PROP_ACCESS_ID_R, .property = BCMBAL_INTERFACE_CFG_ID_OPER_STATUS, .offset = offsetof(bcmbal_interface_cfg_data, oper_status), .type = &type_descr_bcmbal_status };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_interface_cfg_min_data_agg_port_id = { .name = "min_data_agg_port_id", .descr = "The minimum agg_port_id that is allowed in the system", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_INTERFACE_CFG_ID_MIN_DATA_AGG_PORT_ID, .offset = offsetof(bcmbal_interface_cfg_data, min_data_agg_port_id), .type = &type_descr_uint16_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_interface_cfg_min_data_svc_port_id = { .name = "min_data_svc_port_id", .descr = "The minimum svc_port_id that is allowed in the system", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_INTERFACE_CFG_ID_MIN_DATA_SVC_PORT_ID, .offset = offsetof(bcmbal_interface_cfg_data, min_data_svc_port_id), .type = &type_descr_uint16_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_interface_cfg_transceiver_type = { .name = "transceiver_type", .descr = "The transceiver type used on an interface", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_INTERFACE_CFG_ID_TRANSCEIVER_TYPE, .offset = offsetof(bcmbal_interface_cfg_data, transceiver_type), .type = &type_descr_bcmbal_trx_type };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_interface_cfg_ds_miss_mode = { .name = "ds_miss_mode", .descr = "Defines the action to take for unknown downstream packets", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_INTERFACE_CFG_ID_DS_MISS_MODE, .offset = offsetof(bcmbal_interface_cfg_data, ds_miss_mode), .type = &type_descr_bcmbal_ds_miss_mode };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_interface_cfg_mtu = { .name = "mtu", .descr = "The MTU for an interface", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_INTERFACE_CFG_ID_MTU, .offset = offsetof(bcmbal_interface_cfg_data, mtu), .type = &type_descr_uint16_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_interface_cfg_flow_control = { .name = "flow_control", .descr = "Flow control enable or disable", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_INTERFACE_CFG_ID_FLOW_CONTROL, .offset = offsetof(bcmbal_interface_cfg_data, flow_control), .type = &type_descr_bcmbal_control };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_interface_cfg_ds_tm = { .name = "ds_tm", .descr = "Downstream scheduler and shaper", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_INTERFACE_CFG_ID_DS_TM, .offset = offsetof(bcmbal_interface_cfg_data, ds_tm), .type = &type_descr_uint32_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_interface_cfg_us_tm = { .name = "us_tm", .descr = "Upstream scheduler and shaper", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_INTERFACE_CFG_ID_US_TM, .offset = offsetof(bcmbal_interface_cfg_data, us_tm), .type = &type_descr_uint32_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_interface_cfg_sub_term_id_list = { .name = "sub_term_id_list", .descr = "A list of subscriber terminal ids configured on this interface", .access = BCMBAL_APICLI_PROP_ACCESS_ID_R, .property = BCMBAL_INTERFACE_CFG_ID_SUB_TERM_ID_LIST, .offset = offsetof(bcmbal_interface_cfg_data, sub_term_id_list), .type = &type_descr_bcmbal_sub_id_list_u16 };
+static bcmbal_apicli_prop_descr * BCM_DESCR interface_cfg_prop_array[] = { &prop_descr_interface_cfg_admin_state, &prop_descr_interface_cfg_oper_status, &prop_descr_interface_cfg_min_data_agg_port_id, &prop_descr_interface_cfg_min_data_svc_port_id, &prop_descr_interface_cfg_transceiver_type, &prop_descr_interface_cfg_ds_miss_mode, &prop_descr_interface_cfg_mtu, &prop_descr_interface_cfg_flow_control, &prop_descr_interface_cfg_ds_tm, &prop_descr_interface_cfg_us_tm, &prop_descr_interface_cfg_sub_term_id_list };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_interface_cfg_data_fields[] = { { .name = "admin_state", .descr = "Administrative state", .offset = offsetof(bcmbal_interface_cfg_data, admin_state), .type = &type_descr_bcmbal_state }, { .name = "oper_status", .descr = "Operational status", .offset = offsetof(bcmbal_interface_cfg_data, oper_status), .type = &type_descr_bcmbal_status }, { .name = "min_data_agg_port_id", .descr = "The minimum agg_port_id that is allowed in the system", .offset = offsetof(bcmbal_interface_cfg_data, min_data_agg_port_id), .type = &type_descr_uint16_t }, { .name = "min_data_svc_port_id", .descr = "The minimum svc_port_id that is allowed in the system", .offset = offsetof(bcmbal_interface_cfg_data, min_data_svc_port_id), .type = &type_descr_uint16_t }, { .name = "transceiver_type", .descr = "The transceiver type used on an interface", .offset = offsetof(bcmbal_interface_cfg_data, transceiver_type), .type = &type_descr_bcmbal_trx_type }, { .name = "ds_miss_mode", .descr = "Defines the action to take for unknown downstream packets", .offset = offsetof(bcmbal_interface_cfg_data, ds_miss_mode), .type = &type_descr_bcmbal_ds_miss_mode }, { .name = "mtu", .descr = "The MTU for an interface", .offset = offsetof(bcmbal_interface_cfg_data, mtu), .type = &type_descr_uint16_t }, { .name = "flow_control", .descr = "Flow control enable or disable", .offset = offsetof(bcmbal_interface_cfg_data, flow_control), .type = &type_descr_bcmbal_control }, { .name = "ds_tm", .descr = "Downstream scheduler and shaper", .offset = offsetof(bcmbal_interface_cfg_data, ds_tm), .type = &type_descr_uint32_t }, { .name = "us_tm", .descr = "Upstream scheduler and shaper", .offset = offsetof(bcmbal_interface_cfg_data, us_tm), .type = &type_descr_uint32_t }, { .name = "sub_term_id_list", .descr = "A list of subscriber terminal ids configured on this interface", .offset = offsetof(bcmbal_interface_cfg_data, sub_term_id_list), .type = &type_descr_bcmbal_sub_id_list_u16 } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_interface_cfg_data = { .name = "bcmbal_interface_cfg_data", .descr = "cfg", .size = sizeof(bcmbal_interface_cfg_data), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_interface_cfg_data_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_interface_cfg_data_fields } } };
+
+/* Group: interface - stat */
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_interface_stat_rx_packets = { .name = "rx_packets", .descr = "Recieved packets", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_INTERFACE_STAT_ID_RX_PACKETS, .offset = offsetof(bcmbal_interface_stat_data, rx_packets), .type = &type_descr_uint64_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_interface_stat_rx_bytes = { .name = "rx_bytes", .descr = "Received bytes", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_INTERFACE_STAT_ID_RX_BYTES, .offset = offsetof(bcmbal_interface_stat_data, rx_bytes), .type = &type_descr_uint64_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_interface_stat_tx_packets = { .name = "tx_packets", .descr = "Transmitted packets", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_INTERFACE_STAT_ID_TX_PACKETS, .offset = offsetof(bcmbal_interface_stat_data, tx_packets), .type = &type_descr_uint64_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_interface_stat_tx_bytes = { .name = "tx_bytes", .descr = "Transmitted bytes", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_INTERFACE_STAT_ID_TX_BYTES, .offset = offsetof(bcmbal_interface_stat_data, tx_bytes), .type = &type_descr_uint64_t };
+static bcmbal_apicli_prop_descr * BCM_DESCR interface_stat_prop_array[] = { &prop_descr_interface_stat_rx_packets, &prop_descr_interface_stat_rx_bytes, &prop_descr_interface_stat_tx_packets, &prop_descr_interface_stat_tx_bytes };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_interface_stat_data_fields[] = { { .name = "rx_packets", .descr = "Recieved packets", .offset = offsetof(bcmbal_interface_stat_data, rx_packets), .type = &type_descr_uint64_t }, { .name = "rx_bytes", .descr = "Received bytes", .offset = offsetof(bcmbal_interface_stat_data, rx_bytes), .type = &type_descr_uint64_t }, { .name = "tx_packets", .descr = "Transmitted packets", .offset = offsetof(bcmbal_interface_stat_data, tx_packets), .type = &type_descr_uint64_t }, { .name = "tx_bytes", .descr = "Transmitted bytes", .offset = offsetof(bcmbal_interface_stat_data, tx_bytes), .type = &type_descr_uint64_t } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_interface_stat_data = { .name = "bcmbal_interface_stat_data", .descr = "stat", .size = sizeof(bcmbal_interface_stat_data), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_interface_stat_data_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_interface_stat_data_fields } } };
+
+/* Group: interface - ind */
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_interface_ind_admin_state = { .name = "admin_state", .descr = "Current administrative state", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_INTERFACE_IND_ID_ADMIN_STATE, .offset = offsetof(bcmbal_interface_ind_data, admin_state), .type = &type_descr_bcmbal_state };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_interface_ind_oper_status = { .name = "oper_status", .descr = "Current operational state", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_INTERFACE_IND_ID_OPER_STATUS, .offset = offsetof(bcmbal_interface_ind_data, oper_status), .type = &type_descr_bcmbal_status };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_interface_ind_min_data_agg_port_id = { .name = "min_data_agg_port_id", .descr = "The minimum agg_port_id that is allowed in the system", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_INTERFACE_IND_ID_MIN_DATA_AGG_PORT_ID, .offset = offsetof(bcmbal_interface_ind_data, min_data_agg_port_id), .type = &type_descr_uint16_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_interface_ind_min_data_svc_port_id = { .name = "min_data_svc_port_id", .descr = "The minimum svc_port_id that is allowed in the system", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_INTERFACE_IND_ID_MIN_DATA_SVC_PORT_ID, .offset = offsetof(bcmbal_interface_ind_data, min_data_svc_port_id), .type = &type_descr_uint16_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_interface_ind_transceiver_type = { .name = "transceiver_type", .descr = "The transceiver type used on an interface", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_INTERFACE_IND_ID_TRANSCEIVER_TYPE, .offset = offsetof(bcmbal_interface_ind_data, transceiver_type), .type = &type_descr_bcmbal_trx_type };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_interface_ind_ds_miss_mode = { .name = "ds_miss_mode", .descr = "Defines the action to take for DS unknown packets", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_INTERFACE_IND_ID_DS_MISS_MODE, .offset = offsetof(bcmbal_interface_ind_data, ds_miss_mode), .type = &type_descr_bcmbal_ds_miss_mode };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_interface_ind_mtu = { .name = "mtu", .descr = "The MTU for an interface", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_INTERFACE_IND_ID_MTU, .offset = offsetof(bcmbal_interface_ind_data, mtu), .type = &type_descr_uint16_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_interface_ind_flow_control = { .name = "flow_control", .descr = "Flow control enable or disable", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_INTERFACE_IND_ID_FLOW_CONTROL, .offset = offsetof(bcmbal_interface_ind_data, flow_control), .type = &type_descr_bcmbal_control };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_interface_ind_ds_tm = { .name = "ds_tm", .descr = "Downstream scheduler and shaper", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_INTERFACE_IND_ID_DS_TM, .offset = offsetof(bcmbal_interface_ind_data, ds_tm), .type = &type_descr_uint32_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_interface_ind_us_tm = { .name = "us_tm", .descr = "Upstream scheduler and shaper", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_INTERFACE_IND_ID_US_TM, .offset = offsetof(bcmbal_interface_ind_data, us_tm), .type = &type_descr_uint32_t };
+static bcmbal_apicli_prop_descr * BCM_DESCR interface_ind_prop_array[] = { &prop_descr_interface_ind_admin_state, &prop_descr_interface_ind_oper_status, &prop_descr_interface_ind_min_data_agg_port_id, &prop_descr_interface_ind_min_data_svc_port_id, &prop_descr_interface_ind_transceiver_type, &prop_descr_interface_ind_ds_miss_mode, &prop_descr_interface_ind_mtu, &prop_descr_interface_ind_flow_control, &prop_descr_interface_ind_ds_tm, &prop_descr_interface_ind_us_tm };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_interface_ind_data_fields[] = { { .name = "admin_state", .descr = "Current administrative state", .offset = offsetof(bcmbal_interface_ind_data, admin_state), .type = &type_descr_bcmbal_state }, { .name = "oper_status", .descr = "Current operational state", .offset = offsetof(bcmbal_interface_ind_data, oper_status), .type = &type_descr_bcmbal_status }, { .name = "min_data_agg_port_id", .descr = "The minimum agg_port_id that is allowed in the system", .offset = offsetof(bcmbal_interface_ind_data, min_data_agg_port_id), .type = &type_descr_uint16_t }, { .name = "min_data_svc_port_id", .descr = "The minimum svc_port_id that is allowed in the system", .offset = offsetof(bcmbal_interface_ind_data, min_data_svc_port_id), .type = &type_descr_uint16_t }, { .name = "transceiver_type", .descr = "The transceiver type used on an interface", .offset = offsetof(bcmbal_interface_ind_data, transceiver_type), .type = &type_descr_bcmbal_trx_type }, { .name = "ds_miss_mode", .descr = "Defines the action to take for DS unknown packets", .offset = offsetof(bcmbal_interface_ind_data, ds_miss_mode), .type = &type_descr_bcmbal_ds_miss_mode }, { .name = "mtu", .descr = "The MTU for an interface", .offset = offsetof(bcmbal_interface_ind_data, mtu), .type = &type_descr_uint16_t }, { .name = "flow_control", .descr = "Flow control enable or disable", .offset = offsetof(bcmbal_interface_ind_data, flow_control), .type = &type_descr_bcmbal_control }, { .name = "ds_tm", .descr = "Downstream scheduler and shaper", .offset = offsetof(bcmbal_interface_ind_data, ds_tm), .type = &type_descr_uint32_t }, { .name = "us_tm", .descr = "Upstream scheduler and shaper", .offset = offsetof(bcmbal_interface_ind_data, us_tm), .type = &type_descr_uint32_t } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_interface_ind_data = { .name = "bcmbal_interface_ind_data", .descr = "Interface Indication", .size = sizeof(bcmbal_interface_ind_data), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_interface_ind_data_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_interface_ind_data_fields } } };
+
+/* ==== Object: packet ==== */
+
+/* Group: packet - cfg */
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_packet_cfg_flow_id = { .name = "flow_id", .descr = "N/A for sending a packet", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_PACKET_CFG_ID_FLOW_ID, .offset = offsetof(bcmbal_packet_cfg_data, flow_id), .type = &type_descr_uint32_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_packet_cfg_flow_type = { .name = "flow_type", .descr = "Flow Type", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_PACKET_CFG_ID_FLOW_TYPE, .offset = offsetof(bcmbal_packet_cfg_data, flow_type), .type = &type_descr_bcmbal_flow_type };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_packet_cfg_intf_id = { .name = "intf_id", .descr = "Interface ID", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_PACKET_CFG_ID_INTF_ID, .offset = offsetof(bcmbal_packet_cfg_data, intf_id), .type = &type_descr_uint32_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_packet_cfg_intf_type = { .name = "intf_type", .descr = "Interface Type", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_PACKET_CFG_ID_INTF_TYPE, .offset = offsetof(bcmbal_packet_cfg_data, intf_type), .type = &type_descr_bcmbal_intf_type };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_packet_cfg_svc_port = { .name = "svc_port", .descr = "N/A for sending a packet", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_PACKET_CFG_ID_SVC_PORT, .offset = offsetof(bcmbal_packet_cfg_data, svc_port), .type = &type_descr_uint16_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_packet_cfg_flow_cookie = { .name = "flow_cookie", .descr = "N/A for sending a packet", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_PACKET_CFG_ID_FLOW_COOKIE, .offset = offsetof(bcmbal_packet_cfg_data, flow_cookie), .type = &type_descr_uint64_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_packet_cfg_pkt = { .name = "pkt", .descr = "Packet Data", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_PACKET_CFG_ID_PKT, .offset = offsetof(bcmbal_packet_cfg_data, pkt), .type = &type_descr_bcmbal_u8_list_u32 };
+static bcmbal_apicli_prop_descr * BCM_DESCR packet_cfg_prop_array[] = { &prop_descr_packet_cfg_flow_id, &prop_descr_packet_cfg_flow_type, &prop_descr_packet_cfg_intf_id, &prop_descr_packet_cfg_intf_type, &prop_descr_packet_cfg_svc_port, &prop_descr_packet_cfg_flow_cookie, &prop_descr_packet_cfg_pkt };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_packet_cfg_data_fields[] = { { .name = "flow_id", .descr = "N/A for sending a packet", .offset = offsetof(bcmbal_packet_cfg_data, flow_id), .type = &type_descr_uint32_t }, { .name = "flow_type", .descr = "Flow Type", .offset = offsetof(bcmbal_packet_cfg_data, flow_type), .type = &type_descr_bcmbal_flow_type }, { .name = "intf_id", .descr = "Interface ID", .offset = offsetof(bcmbal_packet_cfg_data, intf_id), .type = &type_descr_uint32_t }, { .name = "intf_type", .descr = "Interface Type", .offset = offsetof(bcmbal_packet_cfg_data, intf_type), .type = &type_descr_bcmbal_intf_type }, { .name = "svc_port", .descr = "N/A for sending a packet", .offset = offsetof(bcmbal_packet_cfg_data, svc_port), .type = &type_descr_uint16_t }, { .name = "flow_cookie", .descr = "N/A for sending a packet", .offset = offsetof(bcmbal_packet_cfg_data, flow_cookie), .type = &type_descr_uint64_t }, { .name = "pkt", .descr = "Packet Data", .offset = offsetof(bcmbal_packet_cfg_data, pkt), .type = &type_descr_bcmbal_u8_list_u32 } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_packet_cfg_data = { .name = "bcmbal_packet_cfg_data", .descr = "cfg", .size = sizeof(bcmbal_packet_cfg_data), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_packet_cfg_data_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_packet_cfg_data_fields } } };
+
+/* Group: packet - key */
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_packet_key_reserved = { .name = "reserved", .descr = "Reserved key field", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_PACKET_KEY_ID_RESERVED, .offset = offsetof(bcmbal_packet_key, reserved), .type = &type_descr_uint32_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_packet_key_packet_send_dest = { .name = "packet_send_dest", .descr = "Packet destination", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_PACKET_KEY_ID_PACKET_SEND_DEST, .offset = offsetof(bcmbal_packet_key, packet_send_dest), .type = &type_descr_bcmbal_dest };
+static bcmbal_apicli_prop_descr * BCM_DESCR packet_key_prop_array[] = { &prop_descr_packet_key_reserved, &prop_descr_packet_key_packet_send_dest };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_packet_key_fields[] = { { .name = "reserved", .descr = "Reserved key field", .offset = offsetof(bcmbal_packet_key, reserved), .type = &type_descr_uint32_t }, { .name = "packet_send_dest", .descr = "Packet destination", .offset = offsetof(bcmbal_packet_key, packet_send_dest), .type = &type_descr_bcmbal_dest } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_packet_key = { .name = "bcmbal_packet_key", .descr = "key", .size = sizeof(bcmbal_packet_key), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_packet_key_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_packet_key_fields } } };
+
+/* Group: packet - ind */
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_packet_ind_flow_id = { .name = "flow_id", .descr = "N/A for sending a packet", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_PACKET_IND_ID_FLOW_ID, .offset = offsetof(bcmbal_packet_ind_data, flow_id), .type = &type_descr_uint32_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_packet_ind_flow_type = { .name = "flow_type", .descr = "Flow Type", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_PACKET_IND_ID_FLOW_TYPE, .offset = offsetof(bcmbal_packet_ind_data, flow_type), .type = &type_descr_bcmbal_flow_type };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_packet_ind_intf_id = { .name = "intf_id", .descr = "Interface ID", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_PACKET_IND_ID_INTF_ID, .offset = offsetof(bcmbal_packet_ind_data, intf_id), .type = &type_descr_uint32_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_packet_ind_intf_type = { .name = "intf_type", .descr = "Interface Type", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_PACKET_IND_ID_INTF_TYPE, .offset = offsetof(bcmbal_packet_ind_data, intf_type), .type = &type_descr_bcmbal_intf_type };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_packet_ind_svc_port = { .name = "svc_port", .descr = "N/A for sending a packet", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_PACKET_IND_ID_SVC_PORT, .offset = offsetof(bcmbal_packet_ind_data, svc_port), .type = &type_descr_uint16_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_packet_ind_flow_cookie = { .name = "flow_cookie", .descr = "N/A for sending a packet", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_PACKET_IND_ID_FLOW_COOKIE, .offset = offsetof(bcmbal_packet_ind_data, flow_cookie), .type = &type_descr_uint64_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_packet_ind_pkt = { .name = "pkt", .descr = "Packet Data", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_PACKET_IND_ID_PKT, .offset = offsetof(bcmbal_packet_ind_data, pkt), .type = &type_descr_bcmbal_u8_list_u32 };
+static bcmbal_apicli_prop_descr * BCM_DESCR packet_ind_prop_array[] = { &prop_descr_packet_ind_flow_id, &prop_descr_packet_ind_flow_type, &prop_descr_packet_ind_intf_id, &prop_descr_packet_ind_intf_type, &prop_descr_packet_ind_svc_port, &prop_descr_packet_ind_flow_cookie, &prop_descr_packet_ind_pkt };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_packet_ind_data_fields[] = { { .name = "flow_id", .descr = "N/A for sending a packet", .offset = offsetof(bcmbal_packet_ind_data, flow_id), .type = &type_descr_uint32_t }, { .name = "flow_type", .descr = "Flow Type", .offset = offsetof(bcmbal_packet_ind_data, flow_type), .type = &type_descr_bcmbal_flow_type }, { .name = "intf_id", .descr = "Interface ID", .offset = offsetof(bcmbal_packet_ind_data, intf_id), .type = &type_descr_uint32_t }, { .name = "intf_type", .descr = "Interface Type", .offset = offsetof(bcmbal_packet_ind_data, intf_type), .type = &type_descr_bcmbal_intf_type }, { .name = "svc_port", .descr = "N/A for sending a packet", .offset = offsetof(bcmbal_packet_ind_data, svc_port), .type = &type_descr_uint16_t }, { .name = "flow_cookie", .descr = "N/A for sending a packet", .offset = offsetof(bcmbal_packet_ind_data, flow_cookie), .type = &type_descr_uint64_t }, { .name = "pkt", .descr = "Packet Data", .offset = offsetof(bcmbal_packet_ind_data, pkt), .type = &type_descr_bcmbal_u8_list_u32 } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_packet_ind_data = { .name = "bcmbal_packet_ind_data", .descr = "Packet indication", .size = sizeof(bcmbal_packet_ind_data), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_packet_ind_data_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_packet_ind_data_fields } } };
+
+/* ==== Object: subscriber_terminal ==== */
+
+/* Group: subscriber_terminal - key */
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_subscriber_terminal_key_sub_term_id = { .name = "sub_term_id", .descr = "sub_term_id", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_SUBSCRIBER_TERMINAL_KEY_ID_SUB_TERM_ID, .offset = offsetof(bcmbal_subscriber_terminal_key, sub_term_id), .type = &type_descr_uint32_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_subscriber_terminal_key_intf_id = { .name = "intf_id", .descr = "intf_id", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_SUBSCRIBER_TERMINAL_KEY_ID_INTF_ID, .offset = offsetof(bcmbal_subscriber_terminal_key, intf_id), .type = &type_descr_uint32_t };
+static bcmbal_apicli_prop_descr * BCM_DESCR subscriber_terminal_key_prop_array[] = { &prop_descr_subscriber_terminal_key_sub_term_id, &prop_descr_subscriber_terminal_key_intf_id };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_subscriber_terminal_key_fields[] = { { .name = "sub_term_id", .descr = "sub_term_id", .offset = offsetof(bcmbal_subscriber_terminal_key, sub_term_id), .type = &type_descr_uint32_t }, { .name = "intf_id", .descr = "intf_id", .offset = offsetof(bcmbal_subscriber_terminal_key, intf_id), .type = &type_descr_uint32_t } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_subscriber_terminal_key = { .name = "bcmbal_subscriber_terminal_key", .descr = "key", .size = sizeof(bcmbal_subscriber_terminal_key), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_subscriber_terminal_key_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_subscriber_terminal_key_fields } } };
+
+/* Group: subscriber_terminal - cfg */
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_subscriber_terminal_cfg_admin_state = { .name = "admin_state", .descr = "Administrative state", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_ADMIN_STATE, .offset = offsetof(bcmbal_subscriber_terminal_cfg_data, admin_state), .type = &type_descr_bcmbal_state };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_subscriber_terminal_cfg_oper_status = { .name = "oper_status", .descr = "Operational status", .access = BCMBAL_APICLI_PROP_ACCESS_ID_R, .property = BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_OPER_STATUS, .offset = offsetof(bcmbal_subscriber_terminal_cfg_data, oper_status), .type = &type_descr_bcmbal_status };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_subscriber_terminal_cfg_serial_number = { .name = "serial_number", .descr = "The serial number of an  ITU PON (GPON/XG-PON1/XGS-PON/NG-PON2) subscriber terminal", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SERIAL_NUMBER, .offset = offsetof(bcmbal_subscriber_terminal_cfg_data, serial_number), .type = &type_descr_bcmbal_serial_number };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_subscriber_terminal_cfg_password = { .name = "password", .descr = "The password of a GPON subscriber terminal", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_PASSWORD, .offset = offsetof(bcmbal_subscriber_terminal_cfg_data, password), .type = &type_descr_bcmbal_password };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_subscriber_terminal_cfg_registration_id = { .name = "registration_id", .descr = "ONU registration ID of an  ITU PON (XG-PON1/XGS-PON/NG-PON2) subscriber terminal", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_REGISTRATION_ID, .offset = offsetof(bcmbal_subscriber_terminal_cfg_data, registration_id), .type = &type_descr_bcmbal_registration_id };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_subscriber_terminal_cfg_svc_port_id = { .name = "svc_port_id", .descr = "The management service port ID (for PON, the ONU ID)", .access = BCMBAL_APICLI_PROP_ACCESS_ID_R, .property = BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SVC_PORT_ID, .offset = offsetof(bcmbal_subscriber_terminal_cfg_data, svc_port_id), .type = &type_descr_uint16_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_subscriber_terminal_cfg_mac_address = { .name = "mac_address", .descr = "The Ethernet MAC address of an EPON subscriber terminal", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_MAC_ADDRESS, .offset = offsetof(bcmbal_subscriber_terminal_cfg_data, mac_address), .type = &type_descr_bcmos_mac_address };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_subscriber_terminal_cfg_ds_tm = { .name = "ds_tm", .descr = "Downstream scheduler and shaper", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_DS_TM, .offset = offsetof(bcmbal_subscriber_terminal_cfg_data, ds_tm), .type = &type_descr_uint32_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_subscriber_terminal_cfg_us_tm = { .name = "us_tm", .descr = "Upstream scheduler and shaper", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_US_TM, .offset = offsetof(bcmbal_subscriber_terminal_cfg_data, us_tm), .type = &type_descr_uint32_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_subscriber_terminal_cfg_svc_port_id_list = { .name = "svc_port_id_list", .descr = "A list of bearer traffic svc_port_ids associated with this subscriber terminal", .access = BCMBAL_APICLI_PROP_ACCESS_ID_R, .property = BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SVC_PORT_ID_LIST, .offset = offsetof(bcmbal_subscriber_terminal_cfg_data, svc_port_id_list), .type = &type_descr_bcmbal_service_port_id_list_u8 };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_subscriber_terminal_cfg_agg_port_id_list = { .name = "agg_port_id_list", .descr = "A list of aggr_port_ids associated with this subscriber terminal", .access = BCMBAL_APICLI_PROP_ACCESS_ID_R, .property = BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_AGG_PORT_ID_LIST, .offset = offsetof(bcmbal_subscriber_terminal_cfg_data, agg_port_id_list), .type = &type_descr_bcmbal_aggregation_port_id_list_u8 };
+static bcmbal_apicli_prop_descr * BCM_DESCR subscriber_terminal_cfg_prop_array[] = { &prop_descr_subscriber_terminal_cfg_admin_state, &prop_descr_subscriber_terminal_cfg_oper_status, &prop_descr_subscriber_terminal_cfg_serial_number, &prop_descr_subscriber_terminal_cfg_password, &prop_descr_subscriber_terminal_cfg_registration_id, &prop_descr_subscriber_terminal_cfg_svc_port_id, &prop_descr_subscriber_terminal_cfg_mac_address, &prop_descr_subscriber_terminal_cfg_ds_tm, &prop_descr_subscriber_terminal_cfg_us_tm, &prop_descr_subscriber_terminal_cfg_svc_port_id_list, &prop_descr_subscriber_terminal_cfg_agg_port_id_list };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_subscriber_terminal_cfg_data_fields[] = { { .name = "admin_state", .descr = "Administrative state", .offset = offsetof(bcmbal_subscriber_terminal_cfg_data, admin_state), .type = &type_descr_bcmbal_state }, { .name = "oper_status", .descr = "Operational status", .offset = offsetof(bcmbal_subscriber_terminal_cfg_data, oper_status), .type = &type_descr_bcmbal_status }, { .name = "serial_number", .descr = "The serial number of an  ITU PON (GPON/XG-PON1/XGS-PON/NG-PON2) subscriber terminal", .offset = offsetof(bcmbal_subscriber_terminal_cfg_data, serial_number), .type = &type_descr_bcmbal_serial_number }, { .name = "password", .descr = "The password of a GPON subscriber terminal", .offset = offsetof(bcmbal_subscriber_terminal_cfg_data, password), .type = &type_descr_bcmbal_password }, { .name = "registration_id", .descr = "ONU registration ID of an  ITU PON (XG-PON1/XGS-PON/NG-PON2) subscriber terminal", .offset = offsetof(bcmbal_subscriber_terminal_cfg_data, registration_id), .type = &type_descr_bcmbal_registration_id }, { .name = "svc_port_id", .descr = "The management service port ID (for PON, the ONU ID)", .offset = offsetof(bcmbal_subscriber_terminal_cfg_data, svc_port_id), .type = &type_descr_uint16_t }, { .name = "mac_address", .descr = "The Ethernet MAC address of an EPON subscriber terminal", .offset = offsetof(bcmbal_subscriber_terminal_cfg_data, mac_address), .type = &type_descr_bcmos_mac_address }, { .name = "ds_tm", .descr = "Downstream scheduler and shaper", .offset = offsetof(bcmbal_subscriber_terminal_cfg_data, ds_tm), .type = &type_descr_uint32_t }, { .name = "us_tm", .descr = "Upstream scheduler and shaper", .offset = offsetof(bcmbal_subscriber_terminal_cfg_data, us_tm), .type = &type_descr_uint32_t }, { .name = "svc_port_id_list", .descr = "A list of bearer traffic svc_port_ids associated with this subscriber terminal", .offset = offsetof(bcmbal_subscriber_terminal_cfg_data, svc_port_id_list), .type = &type_descr_bcmbal_service_port_id_list_u8 }, { .name = "agg_port_id_list", .descr = "A list of aggr_port_ids associated with this subscriber terminal", .offset = offsetof(bcmbal_subscriber_terminal_cfg_data, agg_port_id_list), .type = &type_descr_bcmbal_aggregation_port_id_list_u8 } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_subscriber_terminal_cfg_data = { .name = "bcmbal_subscriber_terminal_cfg_data", .descr = "cfg", .size = sizeof(bcmbal_subscriber_terminal_cfg_data), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_subscriber_terminal_cfg_data_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_subscriber_terminal_cfg_data_fields } } };
+
+/* Group: subscriber_terminal - stat */
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_subscriber_terminal_stat_rx_packets = { .name = "rx_packets", .descr = "Received packets on specified object", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_RX_PACKETS, .offset = offsetof(bcmbal_subscriber_terminal_stat_data, rx_packets), .type = &type_descr_uint64_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_subscriber_terminal_stat_rx_bytes = { .name = "rx_bytes", .descr = "Received bytes on specified object", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_RX_BYTES, .offset = offsetof(bcmbal_subscriber_terminal_stat_data, rx_bytes), .type = &type_descr_uint64_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_subscriber_terminal_stat_tx_packets = { .name = "tx_packets", .descr = "Transmitted packets on specified object", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_TX_PACKETS, .offset = offsetof(bcmbal_subscriber_terminal_stat_data, tx_packets), .type = &type_descr_uint64_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_subscriber_terminal_stat_tx_bytes = { .name = "tx_bytes", .descr = "Transmittted bytes on specified object", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_TX_BYTES, .offset = offsetof(bcmbal_subscriber_terminal_stat_data, tx_bytes), .type = &type_descr_uint64_t };
+static bcmbal_apicli_prop_descr * BCM_DESCR subscriber_terminal_stat_prop_array[] = { &prop_descr_subscriber_terminal_stat_rx_packets, &prop_descr_subscriber_terminal_stat_rx_bytes, &prop_descr_subscriber_terminal_stat_tx_packets, &prop_descr_subscriber_terminal_stat_tx_bytes };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_subscriber_terminal_stat_data_fields[] = { { .name = "rx_packets", .descr = "Received packets on specified object", .offset = offsetof(bcmbal_subscriber_terminal_stat_data, rx_packets), .type = &type_descr_uint64_t }, { .name = "rx_bytes", .descr = "Received bytes on specified object", .offset = offsetof(bcmbal_subscriber_terminal_stat_data, rx_bytes), .type = &type_descr_uint64_t }, { .name = "tx_packets", .descr = "Transmitted packets on specified object", .offset = offsetof(bcmbal_subscriber_terminal_stat_data, tx_packets), .type = &type_descr_uint64_t }, { .name = "tx_bytes", .descr = "Transmittted bytes on specified object", .offset = offsetof(bcmbal_subscriber_terminal_stat_data, tx_bytes), .type = &type_descr_uint64_t } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_subscriber_terminal_stat_data = { .name = "bcmbal_subscriber_terminal_stat_data", .descr = "stat", .size = sizeof(bcmbal_subscriber_terminal_stat_data), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_subscriber_terminal_stat_data_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_subscriber_terminal_stat_data_fields } } };
+
+/* Group: subscriber_terminal - ind */
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_subscriber_terminal_ind_admin_state = { .name = "admin_state", .descr = "Current administrative state", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_ADMIN_STATE, .offset = offsetof(bcmbal_subscriber_terminal_ind_data, admin_state), .type = &type_descr_bcmbal_state };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_subscriber_terminal_ind_oper_status = { .name = "oper_status", .descr = "Current operational status", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_OPER_STATUS, .offset = offsetof(bcmbal_subscriber_terminal_ind_data, oper_status), .type = &type_descr_bcmbal_status };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_subscriber_terminal_ind_serial_number = { .name = "serial_number", .descr = "The serial number of an  ITU PON (GPON/XG-PON1/XGS-PON/NG-PON2) subscriber terminal", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_SERIAL_NUMBER, .offset = offsetof(bcmbal_subscriber_terminal_ind_data, serial_number), .type = &type_descr_bcmbal_serial_number };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_subscriber_terminal_ind_password = { .name = "password", .descr = "The password of a GPON subscriber terminal", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_PASSWORD, .offset = offsetof(bcmbal_subscriber_terminal_ind_data, password), .type = &type_descr_bcmbal_password };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_subscriber_terminal_ind_registration_id = { .name = "registration_id", .descr = "ONU registration ID of an  ITU PON (XG-PON1/XGS-PON/NG-PON2) subscriber terminal", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_REGISTRATION_ID, .offset = offsetof(bcmbal_subscriber_terminal_ind_data, registration_id), .type = &type_descr_bcmbal_registration_id };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_subscriber_terminal_ind_svc_port_id = { .name = "svc_port_id", .descr = "The service port ID (for PON, the ONU ID)", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_SVC_PORT_ID, .offset = offsetof(bcmbal_subscriber_terminal_ind_data, svc_port_id), .type = &type_descr_uint16_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_subscriber_terminal_ind_mac_address = { .name = "mac_address", .descr = "The Ethernet MAC address of an epon subscriber terminal", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_MAC_ADDRESS, .offset = offsetof(bcmbal_subscriber_terminal_ind_data, mac_address), .type = &type_descr_bcmos_mac_address };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_subscriber_terminal_ind_ds_tm = { .name = "ds_tm", .descr = "Downstream scheduler and shaper", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_DS_TM, .offset = offsetof(bcmbal_subscriber_terminal_ind_data, ds_tm), .type = &type_descr_uint32_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_subscriber_terminal_ind_us_tm = { .name = "us_tm", .descr = "Upstream scheduler and shaper", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_US_TM, .offset = offsetof(bcmbal_subscriber_terminal_ind_data, us_tm), .type = &type_descr_uint32_t };
+static bcmbal_apicli_prop_descr * BCM_DESCR subscriber_terminal_ind_prop_array[] = { &prop_descr_subscriber_terminal_ind_admin_state, &prop_descr_subscriber_terminal_ind_oper_status, &prop_descr_subscriber_terminal_ind_serial_number, &prop_descr_subscriber_terminal_ind_password, &prop_descr_subscriber_terminal_ind_registration_id, &prop_descr_subscriber_terminal_ind_svc_port_id, &prop_descr_subscriber_terminal_ind_mac_address, &prop_descr_subscriber_terminal_ind_ds_tm, &prop_descr_subscriber_terminal_ind_us_tm };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_subscriber_terminal_ind_data_fields[] = { { .name = "admin_state", .descr = "Current administrative state", .offset = offsetof(bcmbal_subscriber_terminal_ind_data, admin_state), .type = &type_descr_bcmbal_state }, { .name = "oper_status", .descr = "Current operational status", .offset = offsetof(bcmbal_subscriber_terminal_ind_data, oper_status), .type = &type_descr_bcmbal_status }, { .name = "serial_number", .descr = "The serial number of an  ITU PON (GPON/XG-PON1/XGS-PON/NG-PON2) subscriber terminal", .offset = offsetof(bcmbal_subscriber_terminal_ind_data, serial_number), .type = &type_descr_bcmbal_serial_number }, { .name = "password", .descr = "The password of a GPON subscriber terminal", .offset = offsetof(bcmbal_subscriber_terminal_ind_data, password), .type = &type_descr_bcmbal_password }, { .name = "registration_id", .descr = "ONU registration ID of an  ITU PON (XG-PON1/XGS-PON/NG-PON2) subscriber terminal", .offset = offsetof(bcmbal_subscriber_terminal_ind_data, registration_id), .type = &type_descr_bcmbal_registration_id }, { .name = "svc_port_id", .descr = "The service port ID (for PON, the ONU ID)", .offset = offsetof(bcmbal_subscriber_terminal_ind_data, svc_port_id), .type = &type_descr_uint16_t }, { .name = "mac_address", .descr = "The Ethernet MAC address of an epon subscriber terminal", .offset = offsetof(bcmbal_subscriber_terminal_ind_data, mac_address), .type = &type_descr_bcmos_mac_address }, { .name = "ds_tm", .descr = "Downstream scheduler and shaper", .offset = offsetof(bcmbal_subscriber_terminal_ind_data, ds_tm), .type = &type_descr_uint32_t }, { .name = "us_tm", .descr = "Upstream scheduler and shaper", .offset = offsetof(bcmbal_subscriber_terminal_ind_data, us_tm), .type = &type_descr_uint32_t } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_subscriber_terminal_ind_data = { .name = "bcmbal_subscriber_terminal_ind_data", .descr = "Subscriber Terminal Indication", .size = sizeof(bcmbal_subscriber_terminal_ind_data), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_subscriber_terminal_ind_data_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_subscriber_terminal_ind_data_fields } } };
+
+/* ==== Object: tm_queue ==== */
+
+/* Group: tm_queue - key */
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_tm_queue_key_sched_id = { .name = "sched_id", .descr = "Scheduler that owns the queue", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_TM_QUEUE_KEY_ID_SCHED_ID, .offset = offsetof(bcmbal_tm_queue_key, sched_id), .type = &type_descr_uint32_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_tm_queue_key_sched_dir = { .name = "sched_dir", .descr = "sched dir", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_TM_QUEUE_KEY_ID_SCHED_DIR, .offset = offsetof(bcmbal_tm_queue_key, sched_dir), .type = &type_descr_bcmbal_tm_sched_dir };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_tm_queue_key_id = { .name = "id", .descr = "Queue id", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_TM_QUEUE_KEY_ID_ID, .offset = offsetof(bcmbal_tm_queue_key, id), .type = &type_descr_uint8_t };
+static bcmbal_apicli_prop_descr * BCM_DESCR tm_queue_key_prop_array[] = { &prop_descr_tm_queue_key_sched_id, &prop_descr_tm_queue_key_sched_dir, &prop_descr_tm_queue_key_id };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_tm_queue_key_fields[] = { { .name = "sched_id", .descr = "Scheduler that owns the queue", .offset = offsetof(bcmbal_tm_queue_key, sched_id), .type = &type_descr_uint32_t }, { .name = "sched_dir", .descr = "sched dir", .offset = offsetof(bcmbal_tm_queue_key, sched_dir), .type = &type_descr_bcmbal_tm_sched_dir }, { .name = "id", .descr = "Queue id", .offset = offsetof(bcmbal_tm_queue_key, id), .type = &type_descr_uint8_t } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_tm_queue_key = { .name = "bcmbal_tm_queue_key", .descr = "key", .size = sizeof(bcmbal_tm_queue_key), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_tm_queue_key_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_tm_queue_key_fields } } };
+
+/* Group: tm_queue - cfg */
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_tm_queue_cfg_priority = { .name = "priority", .descr = "Scheduling priority", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_TM_QUEUE_CFG_ID_PRIORITY, .offset = offsetof(bcmbal_tm_queue_cfg_data, priority), .type = &type_descr_uint8_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_tm_queue_cfg_weight = { .name = "weight", .descr = "Scheduling weight", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_TM_QUEUE_CFG_ID_WEIGHT, .offset = offsetof(bcmbal_tm_queue_cfg_data, weight), .type = &type_descr_uint8_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_tm_queue_cfg_rate = { .name = "rate", .descr = "Rate shaping parameters", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_TM_QUEUE_CFG_ID_RATE, .offset = offsetof(bcmbal_tm_queue_cfg_data, rate), .type = &type_descr_bcmbal_tm_shaping };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_tm_queue_cfg_bac = { .name = "bac", .descr = "Buffer admission control", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_TM_QUEUE_CFG_ID_BAC, .offset = offsetof(bcmbal_tm_queue_cfg_data, bac), .type = &type_descr_bcmbal_tm_bac };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_tm_queue_cfg_creation_mode = { .name = "creation_mode", .descr = "Creation mode", .access = BCMBAL_APICLI_PROP_ACCESS_ID_R, .property = BCMBAL_TM_QUEUE_CFG_ID_CREATION_MODE, .offset = offsetof(bcmbal_tm_queue_cfg_data, creation_mode), .type = &type_descr_bcmbal_tm_creation_mode };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_tm_queue_cfg_ref_count = { .name = "ref_count", .descr = "reference count (flows)", .access = BCMBAL_APICLI_PROP_ACCESS_ID_R, .property = BCMBAL_TM_QUEUE_CFG_ID_REF_COUNT, .offset = offsetof(bcmbal_tm_queue_cfg_data, ref_count), .type = &type_descr_uint8_t };
+static bcmbal_apicli_prop_descr * BCM_DESCR tm_queue_cfg_prop_array[] = { &prop_descr_tm_queue_cfg_priority, &prop_descr_tm_queue_cfg_weight, &prop_descr_tm_queue_cfg_rate, &prop_descr_tm_queue_cfg_bac, &prop_descr_tm_queue_cfg_creation_mode, &prop_descr_tm_queue_cfg_ref_count };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_tm_queue_cfg_data_fields[] = { { .name = "priority", .descr = "Scheduling priority", .offset = offsetof(bcmbal_tm_queue_cfg_data, priority), .type = &type_descr_uint8_t }, { .name = "weight", .descr = "Scheduling weight", .offset = offsetof(bcmbal_tm_queue_cfg_data, weight), .type = &type_descr_uint8_t }, { .name = "rate", .descr = "Rate shaping parameters", .offset = offsetof(bcmbal_tm_queue_cfg_data, rate), .type = &type_descr_bcmbal_tm_shaping }, { .name = "bac", .descr = "Buffer admission control", .offset = offsetof(bcmbal_tm_queue_cfg_data, bac), .type = &type_descr_bcmbal_tm_bac }, { .name = "creation_mode", .descr = "Creation mode", .offset = offsetof(bcmbal_tm_queue_cfg_data, creation_mode), .type = &type_descr_bcmbal_tm_creation_mode }, { .name = "ref_count", .descr = "reference count (flows)", .offset = offsetof(bcmbal_tm_queue_cfg_data, ref_count), .type = &type_descr_uint8_t } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_tm_queue_cfg_data = { .name = "bcmbal_tm_queue_cfg_data", .descr = "cfg", .size = sizeof(bcmbal_tm_queue_cfg_data), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_tm_queue_cfg_data_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_tm_queue_cfg_data_fields } } };
+
+/* Group: tm_queue - stat */
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_tm_queue_stat_packets_ok = { .name = "packets_ok", .descr = "Packets transmitted succewssfully", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_TM_QUEUE_STAT_ID_PACKETS_OK, .offset = offsetof(bcmbal_tm_queue_stat_data, packets_ok), .type = &type_descr_uint64_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_tm_queue_stat_bytes_ok = { .name = "bytes_ok", .descr = "Bytes transmitted successfully", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_TM_QUEUE_STAT_ID_BYTES_OK, .offset = offsetof(bcmbal_tm_queue_stat_data, bytes_ok), .type = &type_descr_uint64_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_tm_queue_stat_packets_discarded = { .name = "packets_discarded", .descr = "Packets discarded", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_TM_QUEUE_STAT_ID_PACKETS_DISCARDED, .offset = offsetof(bcmbal_tm_queue_stat_data, packets_discarded), .type = &type_descr_uint64_t };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_tm_queue_stat_bytes_discarded = { .name = "bytes_discarded", .descr = "Bytes discarded", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_TM_QUEUE_STAT_ID_BYTES_DISCARDED, .offset = offsetof(bcmbal_tm_queue_stat_data, bytes_discarded), .type = &type_descr_uint64_t };
+static bcmbal_apicli_prop_descr * BCM_DESCR tm_queue_stat_prop_array[] = { &prop_descr_tm_queue_stat_packets_ok, &prop_descr_tm_queue_stat_bytes_ok, &prop_descr_tm_queue_stat_packets_discarded, &prop_descr_tm_queue_stat_bytes_discarded };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_tm_queue_stat_data_fields[] = { { .name = "packets_ok", .descr = "Packets transmitted succewssfully", .offset = offsetof(bcmbal_tm_queue_stat_data, packets_ok), .type = &type_descr_uint64_t }, { .name = "bytes_ok", .descr = "Bytes transmitted successfully", .offset = offsetof(bcmbal_tm_queue_stat_data, bytes_ok), .type = &type_descr_uint64_t }, { .name = "packets_discarded", .descr = "Packets discarded", .offset = offsetof(bcmbal_tm_queue_stat_data, packets_discarded), .type = &type_descr_uint64_t }, { .name = "bytes_discarded", .descr = "Bytes discarded", .offset = offsetof(bcmbal_tm_queue_stat_data, bytes_discarded), .type = &type_descr_uint64_t } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_tm_queue_stat_data = { .name = "bcmbal_tm_queue_stat_data", .descr = "stat", .size = sizeof(bcmbal_tm_queue_stat_data), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_tm_queue_stat_data_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_tm_queue_stat_data_fields } } };
+
+/* Group: tm_queue - ind */
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_tm_queue_ind_ret = { .name = "ret", .descr = "ret", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_TM_QUEUE_IND_ID_RET, .offset = offsetof(bcmbal_tm_queue_ind_data, ret), .type = &type_descr_uint32_t };
+static bcmbal_apicli_prop_descr * BCM_DESCR tm_queue_ind_prop_array[] = { &prop_descr_tm_queue_ind_ret };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_tm_queue_ind_data_fields[] = { { .name = "ret", .descr = "ret", .offset = offsetof(bcmbal_tm_queue_ind_data, ret), .type = &type_descr_uint32_t } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_tm_queue_ind_data = { .name = "bcmbal_tm_queue_ind_data", .descr = "Tm Queue Indication", .size = sizeof(bcmbal_tm_queue_ind_data), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_tm_queue_ind_data_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_tm_queue_ind_data_fields } } };
+
+/* ==== Object: tm_sched ==== */
+
+/* Group: tm_sched - key */
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_tm_sched_key_dir = { .name = "dir", .descr = "Traffic direction", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_TM_SCHED_KEY_ID_DIR, .offset = offsetof(bcmbal_tm_sched_key, dir), .type = &type_descr_bcmbal_tm_sched_dir };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_tm_sched_key_id = { .name = "id", .descr = "ID", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_TM_SCHED_KEY_ID_ID, .offset = offsetof(bcmbal_tm_sched_key, id), .type = &type_descr_uint32_t };
+static bcmbal_apicli_prop_descr * BCM_DESCR tm_sched_key_prop_array[] = { &prop_descr_tm_sched_key_dir, &prop_descr_tm_sched_key_id };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_tm_sched_key_fields[] = { { .name = "dir", .descr = "Traffic direction", .offset = offsetof(bcmbal_tm_sched_key, dir), .type = &type_descr_bcmbal_tm_sched_dir }, { .name = "id", .descr = "ID", .offset = offsetof(bcmbal_tm_sched_key, id), .type = &type_descr_uint32_t } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_tm_sched_key = { .name = "bcmbal_tm_sched_key", .descr = "key", .size = sizeof(bcmbal_tm_sched_key), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_tm_sched_key_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_tm_sched_key_fields } } };
+
+/* Group: tm_sched - cfg */
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_tm_sched_cfg_owner = { .name = "owner", .descr = "owner", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_TM_SCHED_CFG_ID_OWNER, .offset = offsetof(bcmbal_tm_sched_cfg_data, owner), .type = &type_descr_bcmbal_tm_sched_owner };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_tm_sched_cfg_sched_type = { .name = "sched_type", .descr = "Scheduler type", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_TM_SCHED_CFG_ID_SCHED_TYPE, .offset = offsetof(bcmbal_tm_sched_cfg_data, sched_type), .type = &type_descr_bcmbal_tm_sched_type };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_tm_sched_cfg_sched_parent = { .name = "sched_parent", .descr = "Scheduling parameters for parent scheduler", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_TM_SCHED_CFG_ID_SCHED_PARENT, .offset = offsetof(bcmbal_tm_sched_cfg_data, sched_parent), .type = &type_descr_bcmbal_tm_sched_parent };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_tm_sched_cfg_sched_child_type = { .name = "sched_child_type", .descr = "Scheduling level for children tm ", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_TM_SCHED_CFG_ID_SCHED_CHILD_TYPE, .offset = offsetof(bcmbal_tm_sched_cfg_data, sched_child_type), .type = &type_descr_bcmbal_tm_sched_child_type };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_tm_sched_cfg_rate = { .name = "rate", .descr = "Rate shaping parameters", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_TM_SCHED_CFG_ID_RATE, .offset = offsetof(bcmbal_tm_sched_cfg_data, rate), .type = &type_descr_bcmbal_tm_shaping };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_tm_sched_cfg_tcont_sla = { .name = "tcont_sla", .descr = "Additional SLA parameters for agg_port owner", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_TM_SCHED_CFG_ID_TCONT_SLA, .offset = offsetof(bcmbal_tm_sched_cfg_data, tcont_sla), .type = &type_descr_bcmbal_tm_tcont_sla };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_tm_sched_cfg_creation_mode = { .name = "creation_mode", .descr = "Creation mode", .access = BCMBAL_APICLI_PROP_ACCESS_ID_R, .property = BCMBAL_TM_SCHED_CFG_ID_CREATION_MODE, .offset = offsetof(bcmbal_tm_sched_cfg_data, creation_mode), .type = &type_descr_bcmbal_tm_creation_mode };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_tm_sched_cfg_queues = { .name = "queues", .descr = "Subsidiary queues", .access = BCMBAL_APICLI_PROP_ACCESS_ID_R, .property = BCMBAL_TM_SCHED_CFG_ID_QUEUES, .offset = offsetof(bcmbal_tm_sched_cfg_data, queues), .type = &type_descr_bcmbal_tm_queue_id_list_u8 };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_tm_sched_cfg_sub_scheds = { .name = "sub_scheds", .descr = "Subsidiary schedulers", .access = BCMBAL_APICLI_PROP_ACCESS_ID_R, .property = BCMBAL_TM_SCHED_CFG_ID_SUB_SCHEDS, .offset = offsetof(bcmbal_tm_sched_cfg_data, sub_scheds), .type = &type_descr_bcmbal_tm_sched_id_list_u8 };
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_tm_sched_cfg_num_priorities = { .name = "num_priorities", .descr = "Max number of strict priority scheduling elements", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_TM_SCHED_CFG_ID_NUM_PRIORITIES, .offset = offsetof(bcmbal_tm_sched_cfg_data, num_priorities), .type = &type_descr_uint8_t };
+static bcmbal_apicli_prop_descr * BCM_DESCR tm_sched_cfg_prop_array[] = { &prop_descr_tm_sched_cfg_owner, &prop_descr_tm_sched_cfg_sched_type, &prop_descr_tm_sched_cfg_sched_parent, &prop_descr_tm_sched_cfg_sched_child_type, &prop_descr_tm_sched_cfg_rate, &prop_descr_tm_sched_cfg_tcont_sla, &prop_descr_tm_sched_cfg_creation_mode, &prop_descr_tm_sched_cfg_queues, &prop_descr_tm_sched_cfg_sub_scheds, &prop_descr_tm_sched_cfg_num_priorities };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_tm_sched_cfg_data_fields[] = { { .name = "owner", .descr = "owner", .offset = offsetof(bcmbal_tm_sched_cfg_data, owner), .type = &type_descr_bcmbal_tm_sched_owner }, { .name = "sched_type", .descr = "Scheduler type", .offset = offsetof(bcmbal_tm_sched_cfg_data, sched_type), .type = &type_descr_bcmbal_tm_sched_type }, { .name = "sched_parent", .descr = "Scheduling parameters for parent scheduler", .offset = offsetof(bcmbal_tm_sched_cfg_data, sched_parent), .type = &type_descr_bcmbal_tm_sched_parent }, { .name = "sched_child_type", .descr = "Scheduling level for children tm ", .offset = offsetof(bcmbal_tm_sched_cfg_data, sched_child_type), .type = &type_descr_bcmbal_tm_sched_child_type }, { .name = "rate", .descr = "Rate shaping parameters", .offset = offsetof(bcmbal_tm_sched_cfg_data, rate), .type = &type_descr_bcmbal_tm_shaping }, { .name = "tcont_sla", .descr = "Additional SLA parameters for agg_port owner", .offset = offsetof(bcmbal_tm_sched_cfg_data, tcont_sla), .type = &type_descr_bcmbal_tm_tcont_sla }, { .name = "creation_mode", .descr = "Creation mode", .offset = offsetof(bcmbal_tm_sched_cfg_data, creation_mode), .type = &type_descr_bcmbal_tm_creation_mode }, { .name = "queues", .descr = "Subsidiary queues", .offset = offsetof(bcmbal_tm_sched_cfg_data, queues), .type = &type_descr_bcmbal_tm_queue_id_list_u8 }, { .name = "sub_scheds", .descr = "Subsidiary schedulers", .offset = offsetof(bcmbal_tm_sched_cfg_data, sub_scheds), .type = &type_descr_bcmbal_tm_sched_id_list_u8 }, { .name = "num_priorities", .descr = "Max number of strict priority scheduling elements", .offset = offsetof(bcmbal_tm_sched_cfg_data, num_priorities), .type = &type_descr_uint8_t } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_tm_sched_cfg_data = { .name = "bcmbal_tm_sched_cfg_data", .descr = "cfg", .size = sizeof(bcmbal_tm_sched_cfg_data), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_tm_sched_cfg_data_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_tm_sched_cfg_data_fields } } };
+
+/* Group: tm_sched - ind */
+static bcmbal_apicli_prop_descr BCM_DESCR prop_descr_tm_sched_ind_ret = { .name = "ret", .descr = "ret", .access = BCMBAL_APICLI_PROP_ACCESS_ID_RW, .property = BCMBAL_TM_SCHED_IND_ID_RET, .offset = offsetof(bcmbal_tm_sched_ind_data, ret), .type = &type_descr_uint32_t };
+static bcmbal_apicli_prop_descr * BCM_DESCR tm_sched_ind_prop_array[] = { &prop_descr_tm_sched_ind_ret };
+static bcmbal_apicli_field_descr BCM_DESCR type_descr_bcmbal_tm_sched_ind_data_fields[] = { { .name = "ret", .descr = "ret", .offset = offsetof(bcmbal_tm_sched_ind_data, ret), .type = &type_descr_uint32_t } };
+static bcmbal_apicli_type_descr BCM_DESCR type_descr_bcmbal_tm_sched_ind_data = { .name = "bcmbal_tm_sched_ind_data", .descr = "Tm Sched Indication", .size = sizeof(bcmbal_tm_sched_ind_data), .base_type = BCMBAL_APICLI_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmbal_tm_sched_ind_data_fields) / sizeof(bcmbal_apicli_field_descr), .fields = type_descr_bcmbal_tm_sched_ind_data_fields } } };
+
+/* ==== API Helper Function Implementations ==== */
+bcmos_errno bcmbal_apicli_object_struct_size(bcmbal_obj_id obj, bcmbal_mgt_group group, uint16_t subgroup, uint32_t *key_size, uint32_t *key_offset, uint32_t *data_size, uint32_t *data_offset)
+{
+    if (((key_size == NULL) || (key_offset == NULL)) || ((data_size == NULL) || (data_offset == NULL)))
+    {
+        return BCM_ERR_RANGE;
+    }
+
+    switch (obj)
+    {
+        case BCMBAL_OBJ_ID_ACCESS_TERMINAL:
+            switch (group)
+            {
+                case BCMBAL_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmbal_access_terminal_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmbal_access_terminal_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMBAL_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmbal_access_terminal_key);
+                            *key_offset = offsetof(bcmbal_access_terminal_cfg, key);
+                            *data_size = sizeof(bcmbal_access_terminal_cfg_data);
+                            *data_offset = offsetof(bcmbal_access_terminal_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMBAL_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMBAL_ACCESS_TERMINAL_AUTO_ID_IND:
+                            *key_size = sizeof(bcmbal_access_terminal_key);
+                            *key_offset = offsetof(bcmbal_access_terminal_ind, key);
+                            *data_size = sizeof(bcmbal_access_terminal_ind_data);
+                            *data_offset = offsetof(bcmbal_access_terminal_ind, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMBAL_OBJ_ID_FLOW:
+            switch (group)
+            {
+                case BCMBAL_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmbal_flow_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmbal_flow_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMBAL_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmbal_flow_key);
+                            *key_offset = offsetof(bcmbal_flow_cfg, key);
+                            *data_size = sizeof(bcmbal_flow_cfg_data);
+                            *data_offset = offsetof(bcmbal_flow_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMBAL_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmbal_flow_key);
+                            *key_offset = offsetof(bcmbal_flow_stat, key);
+                            *data_size = sizeof(bcmbal_flow_stat_data);
+                            *data_offset = offsetof(bcmbal_flow_stat, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMBAL_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMBAL_FLOW_AUTO_ID_IND:
+                            *key_size = sizeof(bcmbal_flow_key);
+                            *key_offset = offsetof(bcmbal_flow_ind, key);
+                            *data_size = sizeof(bcmbal_flow_ind_data);
+                            *data_offset = offsetof(bcmbal_flow_ind, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMBAL_OBJ_ID_GROUP:
+            switch (group)
+            {
+                case BCMBAL_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmbal_group_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmbal_group_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMBAL_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmbal_group_key);
+                            *key_offset = offsetof(bcmbal_group_cfg, key);
+                            *data_size = sizeof(bcmbal_group_cfg_data);
+                            *data_offset = offsetof(bcmbal_group_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMBAL_OBJ_ID_INTERFACE:
+            switch (group)
+            {
+                case BCMBAL_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmbal_interface_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmbal_interface_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMBAL_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmbal_interface_key);
+                            *key_offset = offsetof(bcmbal_interface_cfg, key);
+                            *data_size = sizeof(bcmbal_interface_cfg_data);
+                            *data_offset = offsetof(bcmbal_interface_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMBAL_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmbal_interface_key);
+                            *key_offset = offsetof(bcmbal_interface_stat, key);
+                            *data_size = sizeof(bcmbal_interface_stat_data);
+                            *data_offset = offsetof(bcmbal_interface_stat, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMBAL_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMBAL_INTERFACE_AUTO_ID_IND:
+                            *key_size = sizeof(bcmbal_interface_key);
+                            *key_offset = offsetof(bcmbal_interface_ind, key);
+                            *data_size = sizeof(bcmbal_interface_ind_data);
+                            *data_offset = offsetof(bcmbal_interface_ind, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMBAL_OBJ_ID_PACKET:
+            switch (group)
+            {
+                case BCMBAL_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmbal_packet_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmbal_packet_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMBAL_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmbal_packet_key);
+                            *key_offset = offsetof(bcmbal_packet_cfg, key);
+                            *data_size = sizeof(bcmbal_packet_cfg_data);
+                            *data_offset = offsetof(bcmbal_packet_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMBAL_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMBAL_PACKET_AUTO_ID_IND:
+                            *key_size = sizeof(bcmbal_packet_key);
+                            *key_offset = offsetof(bcmbal_packet_ind, key);
+                            *data_size = sizeof(bcmbal_packet_ind_data);
+                            *data_offset = offsetof(bcmbal_packet_ind, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL:
+            switch (group)
+            {
+                case BCMBAL_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmbal_subscriber_terminal_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmbal_subscriber_terminal_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMBAL_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmbal_subscriber_terminal_key);
+                            *key_offset = offsetof(bcmbal_subscriber_terminal_cfg, key);
+                            *data_size = sizeof(bcmbal_subscriber_terminal_cfg_data);
+                            *data_offset = offsetof(bcmbal_subscriber_terminal_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMBAL_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmbal_subscriber_terminal_key);
+                            *key_offset = offsetof(bcmbal_subscriber_terminal_stat, key);
+                            *data_size = sizeof(bcmbal_subscriber_terminal_stat_data);
+                            *data_offset = offsetof(bcmbal_subscriber_terminal_stat, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMBAL_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMBAL_SUBSCRIBER_TERMINAL_AUTO_ID_IND:
+                            *key_size = sizeof(bcmbal_subscriber_terminal_key);
+                            *key_offset = offsetof(bcmbal_subscriber_terminal_ind, key);
+                            *data_size = sizeof(bcmbal_subscriber_terminal_ind_data);
+                            *data_offset = offsetof(bcmbal_subscriber_terminal_ind, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMBAL_OBJ_ID_TM_QUEUE:
+            switch (group)
+            {
+                case BCMBAL_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmbal_tm_queue_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmbal_tm_queue_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMBAL_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmbal_tm_queue_key);
+                            *key_offset = offsetof(bcmbal_tm_queue_cfg, key);
+                            *data_size = sizeof(bcmbal_tm_queue_cfg_data);
+                            *data_offset = offsetof(bcmbal_tm_queue_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMBAL_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmbal_tm_queue_key);
+                            *key_offset = offsetof(bcmbal_tm_queue_stat, key);
+                            *data_size = sizeof(bcmbal_tm_queue_stat_data);
+                            *data_offset = offsetof(bcmbal_tm_queue_stat, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMBAL_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMBAL_TM_QUEUE_AUTO_ID_IND:
+                            *key_size = sizeof(bcmbal_tm_queue_key);
+                            *key_offset = offsetof(bcmbal_tm_queue_ind, key);
+                            *data_size = sizeof(bcmbal_tm_queue_ind_data);
+                            *data_offset = offsetof(bcmbal_tm_queue_ind, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMBAL_OBJ_ID_TM_SCHED:
+            switch (group)
+            {
+                case BCMBAL_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmbal_tm_sched_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmbal_tm_sched_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMBAL_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmbal_tm_sched_key);
+                            *key_offset = offsetof(bcmbal_tm_sched_cfg, key);
+                            *data_size = sizeof(bcmbal_tm_sched_cfg_data);
+                            *data_offset = offsetof(bcmbal_tm_sched_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMBAL_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMBAL_TM_SCHED_AUTO_ID_IND:
+                            *key_size = sizeof(bcmbal_tm_sched_key);
+                            *key_offset = offsetof(bcmbal_tm_sched_ind, key);
+                            *data_size = sizeof(bcmbal_tm_sched_ind_data);
+                            *data_offset = offsetof(bcmbal_tm_sched_ind, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        default:
+            return BCM_ERR_RANGE;
+    }
+
+    return BCM_ERR_INTERNAL;    /**<  should never happen. */
+}
+
+bcmos_errno bcmbal_apicli_object_subgroup_name(bcmbal_obj_id obj, bcmbal_mgt_group group, uint16_t subgroup, const char **name, const char **descr)
+{
+    switch (obj)
+    {
+        case BCMBAL_OBJ_ID_ACCESS_TERMINAL:
+            switch (group)
+            {
+                case BCMBAL_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMBAL_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "cfg";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMBAL_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMBAL_ACCESS_TERMINAL_AUTO_ID_IND:
+                            if (name != NULL)
+                            {
+                                *name = "ind";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Access Terminal Indication";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMBAL_OBJ_ID_FLOW:
+            switch (group)
+            {
+                case BCMBAL_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMBAL_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "cfg";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMBAL_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "stat";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "stat";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMBAL_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMBAL_FLOW_AUTO_ID_IND:
+                            if (name != NULL)
+                            {
+                                *name = "ind";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Flow Indication";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMBAL_OBJ_ID_GROUP:
+            switch (group)
+            {
+                case BCMBAL_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMBAL_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "cfg";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMBAL_OBJ_ID_INTERFACE:
+            switch (group)
+            {
+                case BCMBAL_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMBAL_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "cfg";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMBAL_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "stat";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "stat";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMBAL_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMBAL_INTERFACE_AUTO_ID_IND:
+                            if (name != NULL)
+                            {
+                                *name = "ind";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Interface Indication";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMBAL_OBJ_ID_PACKET:
+            switch (group)
+            {
+                case BCMBAL_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMBAL_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "cfg";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMBAL_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMBAL_PACKET_AUTO_ID_IND:
+                            if (name != NULL)
+                            {
+                                *name = "ind";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Packet indication";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL:
+            switch (group)
+            {
+                case BCMBAL_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMBAL_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "cfg";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMBAL_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "stat";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "stat";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMBAL_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMBAL_SUBSCRIBER_TERMINAL_AUTO_ID_IND:
+                            if (name != NULL)
+                            {
+                                *name = "ind";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Subscriber Terminal Indication";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMBAL_OBJ_ID_TM_QUEUE:
+            switch (group)
+            {
+                case BCMBAL_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMBAL_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "cfg";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMBAL_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "stat";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "stat";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMBAL_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMBAL_TM_QUEUE_AUTO_ID_IND:
+                            if (name != NULL)
+                            {
+                                *name = "ind";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Tm Queue Indication";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMBAL_OBJ_ID_TM_SCHED:
+            switch (group)
+            {
+                case BCMBAL_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMBAL_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "cfg";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMBAL_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMBAL_TM_SCHED_AUTO_ID_IND:
+                            if (name != NULL)
+                            {
+                                *name = "ind";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Tm Sched Indication";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        default:
+            return BCM_ERR_RANGE;
+    }
+
+    return BCM_ERR_INTERNAL;    /**<  should never happen. */
+}
+
+static bcmbal_apicli_prop_descr **obj_get_prop_array(bcmbal_obj_id obj, bcmbal_mgt_group group, uint16_t subgroup, uint32_t *size)
+{
+    switch (obj)
+    {
+        case BCMBAL_OBJ_ID_ACCESS_TERMINAL:
+            switch (group)
+            {
+                case BCMBAL_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(access_terminal_key_prop_array) / sizeof(bcmbal_apicli_prop_descr *);
+                            return access_terminal_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMBAL_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(access_terminal_cfg_prop_array) / sizeof(bcmbal_apicli_prop_descr *);
+                            return access_terminal_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMBAL_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMBAL_ACCESS_TERMINAL_AUTO_ID_IND:
+                            *size = sizeof(access_terminal_ind_prop_array) / sizeof(bcmbal_apicli_prop_descr *);
+                            return access_terminal_ind_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMBAL_OBJ_ID_FLOW:
+            switch (group)
+            {
+                case BCMBAL_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(flow_key_prop_array) / sizeof(bcmbal_apicli_prop_descr *);
+                            return flow_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMBAL_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(flow_cfg_prop_array) / sizeof(bcmbal_apicli_prop_descr *);
+                            return flow_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMBAL_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(flow_stat_prop_array) / sizeof(bcmbal_apicli_prop_descr *);
+                            return flow_stat_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMBAL_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMBAL_FLOW_AUTO_ID_IND:
+                            *size = sizeof(flow_ind_prop_array) / sizeof(bcmbal_apicli_prop_descr *);
+                            return flow_ind_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMBAL_OBJ_ID_GROUP:
+            switch (group)
+            {
+                case BCMBAL_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(group_key_prop_array) / sizeof(bcmbal_apicli_prop_descr *);
+                            return group_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMBAL_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(group_cfg_prop_array) / sizeof(bcmbal_apicli_prop_descr *);
+                            return group_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMBAL_OBJ_ID_INTERFACE:
+            switch (group)
+            {
+                case BCMBAL_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(interface_key_prop_array) / sizeof(bcmbal_apicli_prop_descr *);
+                            return interface_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMBAL_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(interface_cfg_prop_array) / sizeof(bcmbal_apicli_prop_descr *);
+                            return interface_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMBAL_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(interface_stat_prop_array) / sizeof(bcmbal_apicli_prop_descr *);
+                            return interface_stat_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMBAL_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMBAL_INTERFACE_AUTO_ID_IND:
+                            *size = sizeof(interface_ind_prop_array) / sizeof(bcmbal_apicli_prop_descr *);
+                            return interface_ind_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMBAL_OBJ_ID_PACKET:
+            switch (group)
+            {
+                case BCMBAL_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(packet_key_prop_array) / sizeof(bcmbal_apicli_prop_descr *);
+                            return packet_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMBAL_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(packet_cfg_prop_array) / sizeof(bcmbal_apicli_prop_descr *);
+                            return packet_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMBAL_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMBAL_PACKET_AUTO_ID_IND:
+                            *size = sizeof(packet_ind_prop_array) / sizeof(bcmbal_apicli_prop_descr *);
+                            return packet_ind_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL:
+            switch (group)
+            {
+                case BCMBAL_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(subscriber_terminal_key_prop_array) / sizeof(bcmbal_apicli_prop_descr *);
+                            return subscriber_terminal_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMBAL_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(subscriber_terminal_cfg_prop_array) / sizeof(bcmbal_apicli_prop_descr *);
+                            return subscriber_terminal_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMBAL_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(subscriber_terminal_stat_prop_array) / sizeof(bcmbal_apicli_prop_descr *);
+                            return subscriber_terminal_stat_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMBAL_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMBAL_SUBSCRIBER_TERMINAL_AUTO_ID_IND:
+                            *size = sizeof(subscriber_terminal_ind_prop_array) / sizeof(bcmbal_apicli_prop_descr *);
+                            return subscriber_terminal_ind_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMBAL_OBJ_ID_TM_QUEUE:
+            switch (group)
+            {
+                case BCMBAL_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(tm_queue_key_prop_array) / sizeof(bcmbal_apicli_prop_descr *);
+                            return tm_queue_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMBAL_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(tm_queue_cfg_prop_array) / sizeof(bcmbal_apicli_prop_descr *);
+                            return tm_queue_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMBAL_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(tm_queue_stat_prop_array) / sizeof(bcmbal_apicli_prop_descr *);
+                            return tm_queue_stat_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMBAL_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMBAL_TM_QUEUE_AUTO_ID_IND:
+                            *size = sizeof(tm_queue_ind_prop_array) / sizeof(bcmbal_apicli_prop_descr *);
+                            return tm_queue_ind_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMBAL_OBJ_ID_TM_SCHED:
+            switch (group)
+            {
+                case BCMBAL_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(tm_sched_key_prop_array) / sizeof(bcmbal_apicli_prop_descr *);
+                            return tm_sched_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMBAL_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(tm_sched_cfg_prop_array) / sizeof(bcmbal_apicli_prop_descr *);
+                            return tm_sched_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMBAL_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMBAL_TM_SCHED_AUTO_ID_IND:
+                            *size = sizeof(tm_sched_ind_prop_array) / sizeof(bcmbal_apicli_prop_descr *);
+                            return tm_sched_ind_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        default:
+            break;
+    }
+
+    return NULL;
+}
+
+bcmos_errno bcmbal_apicli_object_name(bcmbal_obj_id obj, const char **name, const char **descr)
+{
+    if (obj >= BCMBAL_OBJ_ID__NUM_OF)
+    {
+        return BCM_ERR_RANGE;
+    }
+
+    if (object_name[obj] == NULL)
+    {
+        return BCM_ERR_NOENT;
+    }
+
+    if (name != NULL)
+    {
+        *name = object_name[obj];
+    }
+
+    if (descr != NULL)
+    {
+        *descr = object_descr[obj];
+    }
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcmbal_apicli_object_property(bcmbal_obj_id obj, bcmbal_mgt_group group, uint16_t subgroup, uint16_t prop, const bcmbal_apicli_prop_descr **descr)
+{
+    bcmbal_apicli_prop_descr **prop_array = NULL;
+    uint32_t prop_array_size = 0;
+    if (descr == NULL)
+    {
+        return BCM_ERR_PARM;
+    }
+
+    prop_array = obj_get_prop_array(obj, group, subgroup, &prop_array_size);
+    if ((prop_array == NULL) || (prop >= prop_array_size))
+    {
+        return BCM_ERR_RANGE;
+    }
+
+    if (prop_array[prop] == NULL)
+    {
+        return BCM_ERR_NOENT;
+    }
+
+    *descr = prop_array[prop];
+    return BCM_ERR_OK;
+}
diff --git a/bal_release/src/lib/libbalapicli/bal_api_cli_helpers.h b/bal_release/src/lib/libbalapicli/bal_api_cli_helpers.h
new file mode 100644
index 0000000..07e922a
--- /dev/null
+++ b/bal_release/src/lib/libbalapicli/bal_api_cli_helpers.h
@@ -0,0 +1,221 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+#ifndef BCMBAL_APICLI_HELPERS_H_
+#define BCMBAL_APICLI_HELPERS_H_
+
+#include <bcmcli.h>
+#include <bal_api.h>
+#include "bal_api_cli_types.h"
+
+/* Mac name length */
+#define BCMBAL_APICLI_MAX_PARM_NAME_LENGTH  BCMCLI_MAX_SEARCH_SUBSTR_LENGTH
+
+/* Max help string length */
+#define BCMBAL_APICLI_MAX_PARM_HELP_LENGTH  128
+
+typedef enum bcmbal_apicli_field_descr_flags
+{
+    BCMBAL_APICLI_FIELD_DESCR_FLAGS_NONE            = 0,
+    BCMBAL_APICLI_FIELD_DESCR_FLAGS_PRESENCE_MASK   = (1 << 0)  /* field is a 'presence mask' for a structure */
+} bcmbal_apicli_field_descr_flags;
+
+typedef struct bcmbal_apicli_type_descr bcmbal_apicli_type_descr;
+
+/* Structure field descriptor */
+typedef struct bcmbal_apicli_field_descr
+{
+    const char *name;               /* Field name */
+    const char *descr;              /* Field description */
+    const char *cli_name;           /* Short CLI name. can be missing */
+    bcmbal_apicli_type_descr *type; /* Field type */
+    uint16_t offset;                /* Offset from the beginning of the type structure */
+    bcmbal_apicli_field_descr_flags flags;
+} bcmbal_apicli_field_descr;
+
+/* Data type descriptor */
+struct bcmbal_apicli_type_descr
+{
+    const char *name;                       /* Type name */
+    const char *descr;                      /* Type description. can be missing */
+    const char *cli_name;                   /* Short CLI name. can be missing */
+    bcmbal_apicli_base_type_id base_type;   /* Base type: snum, unum, string, ip, enum, etc. */
+    uint32_t min_val;                       /* Min value for range check */
+    uint32_t max_val;                       /* Max value for range check */
+    uint16_t size;                  /* Size */
+
+    /* The following union is qualified by the base_type and contains additional
+     * info for array, enum, struct, union */
+    union
+    {
+        bcmcli_enum_val *e;         /* enum value array Contains num_elements+1 values. The last value has name=NULL */
+        struct
+        {
+            uint16_t num_fields;    /* number of elements in the following structure */
+            bcmbal_apicli_field_descr *fields;          /* Structure field array. Contains num_elements values */
+        } s;
+        struct
+        {
+            uint16_t num_common_fields;                 /* number of non-union fields at the start of the struct */
+            bcmbal_apicli_field_descr *common_fields;   /* common field array. Contains num_elements values */
+            uint16_t classifier_idx;                    /* index of the classifier field within common_fields */
+            bcmbal_apicli_field_descr *union_fields;    /* sub-struct fields under the union (name == NULL if no fields present)
+                                                         (one per enum entry in the classifier type, plus one for default) */
+        } u;
+        struct
+        {
+            bcmbal_apicli_type_descr *elem_type;        /* Array element type */
+            uint8_t len_size;                       /* Byte width of array length field (at start of struct) */
+            uint16_t max_size;                      /* Max array size */
+        } arr_dyn;
+        struct
+        {
+            bcmbal_apicli_type_descr *elem_type;    /* Array element type */
+            uint16_t size;  /* Fixed array size */
+        } arr_fixed;
+    } x;
+};
+
+/* Property descriptor.
+ * The 1st 5 fields are exactly the same as in bcmbal_apicli_field_descr
+ * ToDo: replace with bcmbal_apicli_field_descr substructure.
+ * Requires changes in code generator
+ */
+typedef struct
+{
+    const char *name;                       /* C name */
+    const char *descr;                      /* Property description */
+    const char *cli_name;                   /* CLI name */
+    bcmbal_apicli_type_descr *type;         /* Type reference */
+    uint16_t offset;                        /* Offset in generated per-group structure */
+    uint16_t property;                      /* Property id in per-object management group */
+    bcmbal_apicli_prop_access_id access;    /* Access */
+} bcmbal_apicli_prop_descr;
+
+/* All APIs return
+ * BCM_ERR_OK - ok
+ * BCM_ERR_NOENT - if id is in range, but doesn't correspond to any value (a hole)
+ * BCM_ERR_RANGE - id is out of range
+ */
+
+/* Get object name by id */
+bcmos_errno bcmbal_apicli_object_name(bcmbal_obj_id obj, const char **name, const char **descr);
+
+/* Get object structure size */
+bcmos_errno bcmbal_apicli_object_struct_size(bcmbal_obj_id obj, bcmbal_mgt_group group, uint16_t subgroup, uint32_t *key_size, uint32_t *key_offset, uint32_t *data_size, uint32_t *data_offset);
+
+/* Get object subgroup (e.g. specific indication) name and description */
+bcmos_errno bcmbal_apicli_object_subgroup_name(bcmbal_obj_id obj, bcmbal_mgt_group group, uint16_t subgroup, const char **name, const char **descr);
+
+/* Get property by object, mgt_group, subgroup (e.g. specific indication), property_id */
+bcmos_errno bcmbal_apicli_object_property(bcmbal_obj_id obj, bcmbal_mgt_group group, uint16_t subgroup, uint16_t prop, const bcmbal_apicli_prop_descr **descr);
+
+/* Get the number of subgroups present for a given group */
+static inline uint16_t bcmbal_apicli_get_subgroup_count(bcmbal_obj_id obj, bcmbal_mgt_group group)
+{
+    uint16_t count = 0;
+    uint32_t dummy;
+    while (bcmbal_apicli_object_struct_size(obj, group, count, &dummy, &dummy, &dummy, &dummy) != BCM_ERR_RANGE)
+    {
+        ++count;
+    }
+
+    return count;
+}
+
+/* Dump a single property */
+bcmos_errno bcmbal_apicli_dump_prop(bcmcli_session *session, const bcmbal_apicli_prop_descr *pd, void *prop_data);
+
+/* Dump a single property value in C initializer format */
+bcmos_errno bcmbal_apicli_dump_prop_initializer(bcmcli_session *session, const bcmbal_apicli_prop_descr *pd, void *prop_data);
+
+/* Dump message */
+bcmos_errno bcmbal_apicli_msg_dump(bcmcli_session *session, bcmbal_obj *msg);
+
+/* Message group name */
+const char *bcmbal_apicli_mgt_group_to_str(bcmbal_mgt_group group);
+
+/* Convert an enum value to the corresponding string */
+#define BCMOLT_ENUM_STRING_VAL(enum_name, value)    bcmcli_enum_stringval(enum_name ## _string_table, (value))
+
+/* Enum string tables */
+extern bcmcli_enum_val bcmbal_access_terminal_cfg_id_string_table[];
+extern bcmcli_enum_val bcmbal_access_terminal_ind_id_string_table[];
+extern bcmcli_enum_val bcmbal_access_terminal_key_id_string_table[];
+extern bcmcli_enum_val bcmbal_action_id_string_table[];
+extern bcmcli_enum_val bcmbal_action_cmd_id_string_table[];
+extern bcmcli_enum_val bcmbal_classifier_id_string_table[];
+extern bcmcli_enum_val bcmbal_pkt_tag_type_string_table[];
+extern bcmcli_enum_val bcmbal_control_string_table[];
+extern bcmcli_enum_val bcmbal_dest_type_string_table[];
+extern bcmcli_enum_val bcmbal_ds_miss_mode_string_table[];
+extern bcmcli_enum_val bcmbal_extra_bw_eligibility_type_string_table[];
+extern bcmcli_enum_val bcmbal_flow_cfg_id_string_table[];
+extern bcmcli_enum_val bcmbal_flow_ind_id_string_table[];
+extern bcmcli_enum_val bcmbal_flow_key_id_string_table[];
+extern bcmcli_enum_val bcmbal_flow_stat_id_string_table[];
+extern bcmcli_enum_val bcmbal_flow_type_string_table[];
+extern bcmcli_enum_val bcmbal_group_cfg_id_string_table[];
+extern bcmcli_enum_val bcmbal_group_key_id_string_table[];
+extern bcmcli_enum_val bcmbal_group_member_cmd_string_table[];
+extern bcmcli_enum_val bcmbal_group_owner_string_table[];
+extern bcmcli_enum_val bcmbal_interface_cfg_id_string_table[];
+extern bcmcli_enum_val bcmbal_interface_ind_id_string_table[];
+extern bcmcli_enum_val bcmbal_interface_key_id_string_table[];
+extern bcmcli_enum_val bcmbal_interface_stat_id_string_table[];
+extern bcmcli_enum_val bcmbal_intf_type_string_table[];
+extern bcmcli_enum_val bcmbal_iwf_mode_string_table[];
+extern bcmcli_enum_val bcmbal_packet_cfg_id_string_table[];
+extern bcmcli_enum_val bcmbal_packet_ind_id_string_table[];
+extern bcmcli_enum_val bcmbal_packet_key_id_string_table[];
+extern bcmcli_enum_val bcmbal_sla_id_string_table[];
+extern bcmcli_enum_val bcmbal_state_string_table[];
+extern bcmcli_enum_val bcmbal_status_string_table[];
+extern bcmcli_enum_val bcmbal_subscriber_terminal_cfg_id_string_table[];
+extern bcmcli_enum_val bcmbal_subscriber_terminal_ind_id_string_table[];
+extern bcmcli_enum_val bcmbal_subscriber_terminal_key_id_string_table[];
+extern bcmcli_enum_val bcmbal_subscriber_terminal_stat_id_string_table[];
+extern bcmcli_enum_val bcmbal_tm_bac_type_string_table[];
+extern bcmcli_enum_val bcmbal_tm_creation_mode_string_table[];
+extern bcmcli_enum_val bcmbal_tm_queue_cfg_id_string_table[];
+extern bcmcli_enum_val bcmbal_tm_queue_ind_id_string_table[];
+extern bcmcli_enum_val bcmbal_tm_queue_key_id_string_table[];
+extern bcmcli_enum_val bcmbal_tm_queue_stat_id_string_table[];
+extern bcmcli_enum_val bcmbal_tm_sched_cfg_id_string_table[];
+extern bcmcli_enum_val bcmbal_tm_sched_child_type_string_table[];
+extern bcmcli_enum_val bcmbal_tm_sched_dir_string_table[];
+extern bcmcli_enum_val bcmbal_tm_sched_ind_id_string_table[];
+extern bcmcli_enum_val bcmbal_tm_sched_key_id_string_table[];
+extern bcmcli_enum_val bcmbal_tm_sched_owner_type_string_table[];
+extern bcmcli_enum_val bcmbal_tm_sched_owner_agg_port_id_string_table[];
+extern bcmcli_enum_val bcmbal_tm_sched_parent_id_string_table[];
+extern bcmcli_enum_val bcmbal_tm_sched_type_string_table[];
+extern bcmcli_enum_val bcmbal_tm_shaping_id_string_table[];
+extern bcmcli_enum_val bcmbal_tm_tcont_sla_id_string_table[];
+extern bcmcli_enum_val bcmbal_trx_type_string_table[];
+#endif /* BCMBAL_APICLI_HELPERS_H_ */
diff --git a/bal_release/src/lib/libbalapicli/bal_api_cli_types.h b/bal_release/src/lib/libbalapicli/bal_api_cli_types.h
new file mode 100644
index 0000000..8e38a6c
--- /dev/null
+++ b/bal_release/src/lib/libbalapicli/bal_api_cli_types.h
@@ -0,0 +1,60 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef BCMBAL_APICLI_TYPES_H_
+#define BCMBAL_APICLI_TYPES_H_
+
+/* Property access */
+typedef enum
+{
+    BCMBAL_APICLI_PROP_ACCESS_ID_R = 0x1,   /* Read access */
+    BCMBAL_APICLI_PROP_ACCESS_ID_W = 0x2,   /* Write access */
+    BCMBAL_APICLI_PROP_ACCESS_ID_RW = 0x3,  /* Read-write */
+} bcmbal_apicli_prop_access_id;
+
+/* Base data types */
+typedef enum
+{
+    BCMBAL_APICLI_BASE_TYPE_ID_SNUM,       /* signed number */
+    BCMBAL_APICLI_BASE_TYPE_ID_UNUM,       /* unsigned number */
+    BCMBAL_APICLI_BASE_TYPE_ID_UNUM_HEX,   /* unsigned number printed in hex */
+    BCMBAL_APICLI_BASE_TYPE_ID_FLOAT,      /* floating-point number */
+    BCMBAL_APICLI_BASE_TYPE_ID_BOOL,       /* boolean (zero=no, nonzero=yes) */
+    BCMBAL_APICLI_BASE_TYPE_ID_STRING,     /* string */
+    BCMBAL_APICLI_BASE_TYPE_ID_IPV4,       /* IPv4 address */
+    BCMBAL_APICLI_BASE_TYPE_ID_MAC,        /* MAC address */
+    BCMBAL_APICLI_BASE_TYPE_ID_ENUM,       /* enum */
+    BCMBAL_APICLI_BASE_TYPE_ID_ENUM_MASK,  /* bitmask enum */
+    BCMBAL_APICLI_BASE_TYPE_ID_STRUCT,     /* struct */
+    BCMBAL_APICLI_BASE_TYPE_ID_UNION,      /* union */
+    BCMBAL_APICLI_BASE_TYPE_ID_ARR_DYN,    /* dynamically-sized array */
+    BCMBAL_APICLI_BASE_TYPE_ID_ARR_FIXED,  /* fixed-size array */
+} bcmbal_apicli_base_type_id;
+
+#endif /* BCMBAL_APICLI_TYPES_H_ */
diff --git a/bal_release/src/lib/libcmdline/Makefile b/bal_release/src/lib/libcmdline/Makefile
new file mode 100644
index 0000000..5c5038d
--- /dev/null
+++ b/bal_release/src/lib/libcmdline/Makefile
@@ -0,0 +1,35 @@
+###############################################################################
+#
+#  <:copyright-BRCM:2016:DUAL/GPL:standard
+#  
+#     Copyright (c) 2016 Broadcom
+#     All Rights Reserved
+#  
+#  Unless you and Broadcom execute a separate written software license
+#  agreement governing use of this software, this software is licensed
+#  to you under the terms of the GNU General Public License version 2
+#  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+#  with the following added to such license:
+#  
+#     As a special exception, the copyright holders of this software give
+#     you permission to link this software with independent modules, and
+#     to copy and distribute the resulting executable under terms of your
+#     choice, provided that you also meet, for each linked independent
+#     module, the terms and conditions of the license of that module.
+#     An independent module is a module which is not derived from this
+#     software.  The special exception does not apply to any modifications
+#     of the software.
+#  
+#  Not withstanding the above, under no circumstances may you combine
+#  this software in any way with any other Broadcom software provided
+#  under a license other than the GPL, without Broadcom's express prior
+#  written consent.
+#  
+#  :>
+#
+###############################################################################
+MOD_NAME = cmdline
+MOD_TYPE = lib
+
+srcs = cmdline.c
+
diff --git a/bal_release/src/lib/libcmdline/cmdline.c b/bal_release/src/lib/libcmdline/cmdline.c
new file mode 100644
index 0000000..d20b10a
--- /dev/null
+++ b/bal_release/src/lib/libcmdline/cmdline.c
@@ -0,0 +1,135 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *
+ *  :>
+ *
+ *****************************************************************************/
+/*
+ * cmdline.c - Command line argument helper
+ */
+
+#include <cmdline.h>
+
+/* Print usage information */
+bcmos_errno cl_print_usage(const char *app, const char *arg,
+    const cl_argument supported_args[], int num_supported_args,
+    cl_argument_usage_flags flags)
+{
+    const char *owner = "";
+    int i;
+
+    if (arg)
+        bcmos_printf("*** Error in parameter %s\n", arg);
+    if (app)
+    {
+        const char *p, *fname;
+        p = strrchr(app, '/');
+        fname = p ? p + 1 : app;
+        bcmos_printf("Usage: %s arguments\n", fname);
+    }
+    for (i = 0; i < num_supported_args; i++)
+    {
+        const cl_argument *opt = &supported_args[i];
+        if ((flags & CL_ARGUMENT_USAGE_FLAG_OWNER) != 0 &&
+            opt->owner && strcmp(opt->owner, owner))
+        {
+            owner = opt->owner;
+            bcmos_printf("\n%s options:\n", owner);
+        }
+        if (opt->short_name)
+            bcmos_printf("%-3s%c", opt->short_name, opt->long_name ? ',' : ' ');
+        else
+            bcmos_printf("    ");
+        bcmos_printf("%-20s %20s  %s\n",
+            opt->long_name ? opt->long_name : "",
+            opt->extra_arg ? opt->extra_arg : "",
+            opt->description ? opt->description : "");
+    }
+    return BCM_ERR_PARM;
+}
+
+/* Get parameter by name */
+const cl_argument *cl_parm_get(const char *name, const cl_argument supported_args[], int num_supported_args)
+{
+    const cl_argument *opt = NULL;
+    int i;
+
+    /* Make sure that all mandatory parameters are set */
+    for (i = 0; i < num_supported_args; i++)
+    {
+        opt = &supported_args[i];
+        if ((opt->short_name && !strcmp(opt->short_name, name)) ||
+            (opt->long_name && !strcmp(opt->long_name, name)))
+            break;
+    }
+    return (i < num_supported_args) ? opt : NULL;
+}
+
+/* Validate command line parameters */
+bcmos_errno cl_validate(int argc, char *argv[],
+    const cl_argument supported_args[], int num_supported_args)
+{
+    bcmos_bool parm_set[num_supported_args];
+    bcmos_errno rc = BCM_ERR_OK;
+    int i;
+
+    memset(parm_set, 0, sizeof(parm_set));
+    for (i = 1; i < argc; i++)
+    {
+        const cl_argument *opt = cl_parm_get(argv[i], supported_args, num_supported_args);
+        if (opt == NULL)
+        {
+            bcmos_printf("*** Invalid parameter: %s\n", argv[i]);
+            rc = BCM_ERR_PARM;
+            break;
+        }
+        if (opt->extra_arg)
+        {
+            ++i;
+            if (i >= argc)
+            {
+                bcmos_printf("*** Argument is missing after %s\n", argv[i-1]);
+                rc = BCM_ERR_PARM;
+                break;
+            }
+        }
+        parm_set[opt - supported_args] = BCMOS_TRUE;
+    }
+
+    /* Make sure that all mandatory parameters are set */
+    for (i = 0; i < num_supported_args; i++)
+    {
+        const cl_argument *opt = &supported_args[i];
+        if ((opt->flags & CL_ARGUMENT_FLAG_MANDATORY) && !parm_set[i])
+        {
+            bcmos_printf("*** Mandatory parameter %s is missing\n", opt->long_name ? opt->long_name : opt->short_name);
+            rc = BCM_ERR_PARM;
+            break;
+        }
+    }
+    return rc;
+}
diff --git a/bal_release/src/lib/libcmdline/cmdline.h b/bal_release/src/lib/libcmdline/cmdline.h
new file mode 100644
index 0000000..cad20b0
--- /dev/null
+++ b/bal_release/src/lib/libcmdline/cmdline.h
@@ -0,0 +1,101 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *
+ *  :>
+ *
+ *****************************************************************************/
+/*
+ * cmdline.h - Command line argument helper
+ */
+
+#ifndef _CMDLINE_H_
+#define _CMDLINE_H_
+
+#include <bcmos_system.h>
+
+/** Argument flags */
+typedef enum
+{
+    CL_ARGUMENT_FLAG_NONE = 0,
+    CL_ARGUMENT_FLAG_MANDATORY = 0x1,
+} cl_argument_flags;
+
+/** Command line argument */
+typedef struct cl_argument
+{
+    const char *long_name;      /**< Command line option: long form */
+    const char *short_name;     /**< Command line option: short form */
+    const char *extra_arg;      /**< Extra arguments */
+    const char *description;    /**< Description */
+    const char *owner;          /**< Owner module */
+    cl_argument_flags flags;    /**< Command line argument flags */
+} cl_argument;
+
+/** Print usage flags */
+typedef enum
+{
+    CL_ARGUMENT_USAGE_FLAG_NONE = 0,
+    CL_ARGUMENT_USAGE_FLAG_OWNER = 0x1, /**< Print argument owners */
+} cl_argument_usage_flags;
+
+/** Print usage
+ * \param[in]   app                     Application name. Can be NULL
+ * \param[in]   arg                     Argument that triggered command line parsing error. Can be NULL
+ * \param[in]   supported_args          Array of supported arguments
+ * \param[in]   num_supported_args      Number of elements in supported_args[] array
+ * \param[in]   flags                   Usage flags
+ * \returns     BCM_ERR_PARM
+ */
+bcmos_errno cl_print_usage(const char *app, const char *arg,
+    const cl_argument supported_args[], int num_supported_args,
+    cl_argument_usage_flags flags);
+
+/** Validate parameters
+ *
+ * - make sure that there are no unknown parameters
+ * - make sure that all mandatory parameters are present
+ *
+ * \param[in]   argc                    Number of command line arguments
+ * \param[in]   argv                    Command line arguments
+ * \param[in]   supported_args          Array of supported arguments
+ * \param[in]   num_supported_args      Number of elements in supported_args[] array
+ * \returns     BCM_ERR_OK or BCM_ERR_PARM
+ */
+bcmos_errno cl_validate(int argc, char *argv[],
+    const cl_argument supported_args[], int num_supported_args);
+
+/** Get CL parameter by name
+ *
+ * \param[in]   name                    Parameter name
+ * \param[in]   supported_args          Supported arguments array
+ * \param[in]   num_supported_args      Supported arguments array size
+ * \returns argument descriptor pointer or NULL if not found
+ */
+const cl_argument *cl_parm_get(const char *name, const cl_argument supported_args[],
+    int num_supported_args);
+
+#endif /* _CMDLINE_H_ */
diff --git a/bal_release/src/lib/libobjmsg/Makefile b/bal_release/src/lib/libobjmsg/Makefile
new file mode 100644
index 0000000..15ff2d9
--- /dev/null
+++ b/bal_release/src/lib/libobjmsg/Makefile
@@ -0,0 +1,37 @@
+###############################################################################
+#
+#  <:copyright-BRCM:2016:DUAL/GPL:standard
+#  
+#     Copyright (c) 2016 Broadcom
+#     All Rights Reserved
+#  
+#  Unless you and Broadcom execute a separate written software license
+#  agreement governing use of this software, this software is licensed
+#  to you under the terms of the GNU General Public License version 2
+#  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+#  with the following added to such license:
+#  
+#     As a special exception, the copyright holders of this software give
+#     you permission to link this software with independent modules, and
+#     to copy and distribute the resulting executable under terms of your
+#     choice, provided that you also meet, for each linked independent
+#     module, the terms and conditions of the license of that module.
+#     An independent module is a module which is not derived from this
+#     software.  The special exception does not apply to any modifications
+#     of the software.
+#  
+#  Not withstanding the above, under no circumstances may you combine
+#  this software in any way with any other Broadcom software provided
+#  under a license other than the GPL, without Broadcom's express prior
+#  written consent.
+#  
+#  :>
+#
+###############################################################################
+MOD_NAME = balobjmsg
+MOD_TYPE = lib
+MOD_DEPS = common_include utils maple_sdk dev_log
+
+gen_bal_hdrs = bal_model_funcs.h bal_obj_msg_pack_unpack.h
+gen_bal_srcs = bal_model_funcs.c bal_obj_msg_pack_unpack.c
+srcs = bal_msg.c
diff --git a/bal_release/src/lib/libobjmsg/bal_model_funcs.c b/bal_release/src/lib/libobjmsg/bal_model_funcs.c
new file mode 100644
index 0000000..262999f
--- /dev/null
+++ b/bal_release/src/lib/libobjmsg/bal_model_funcs.c
@@ -0,0 +1,11384 @@
+#include <bcmos_system.h>
+#include "bal_model_funcs.h"
+
+/******************************************************************************/
+bcmos_bool bcmbal_access_terminal_cfg_id_pack(bcmbal_access_terminal_cfg_id this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_access_terminal_cfg_id_unpack(bcmbal_access_terminal_cfg_id *this, bcmbal_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmbal_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_access_terminal_ind_id_pack(bcmbal_access_terminal_ind_id this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_access_terminal_ind_id_unpack(bcmbal_access_terminal_ind_id *this, bcmbal_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmbal_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_access_terminal_key_id_pack(bcmbal_access_terminal_key_id this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_access_terminal_key_id_unpack(bcmbal_access_terminal_key_id *this, bcmbal_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmbal_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_action_id_pack(bcmbal_action_id this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u64(buf, (uint64_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_action_id_unpack(bcmbal_action_id *this, bcmbal_buf *buf)
+{
+    uint64_t num_val;
+    if (!bcmbal_buf_read_u64(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_action_cmd_id_pack(bcmbal_action_cmd_id this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_action_cmd_id_unpack(bcmbal_action_cmd_id *this, bcmbal_buf *buf)
+{
+    uint32_t num_val;
+    if (!bcmbal_buf_read_u32(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_classifier_id_pack(bcmbal_classifier_id this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u64(buf, (uint64_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_classifier_id_unpack(bcmbal_classifier_id *this, bcmbal_buf *buf)
+{
+    uint64_t num_val;
+    if (!bcmbal_buf_read_u64(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_pkt_tag_type_pack(bcmbal_pkt_tag_type this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_pkt_tag_type_unpack(bcmbal_pkt_tag_type *this, bcmbal_buf *buf)
+{
+    uint32_t num_val;
+    if (!bcmbal_buf_read_u32(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_control_pack(bcmbal_control this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_control_unpack(bcmbal_control *this, bcmbal_buf *buf)
+{
+    uint32_t num_val;
+    if (!bcmbal_buf_read_u32(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_dest_type_pack(bcmbal_dest_type this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_dest_type_unpack(bcmbal_dest_type *this, bcmbal_buf *buf)
+{
+    uint32_t num_val;
+    if (!bcmbal_buf_read_u32(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_ds_miss_mode_pack(bcmbal_ds_miss_mode this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_ds_miss_mode_unpack(bcmbal_ds_miss_mode *this, bcmbal_buf *buf)
+{
+    uint32_t num_val;
+    if (!bcmbal_buf_read_u32(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_extra_bw_eligibility_type_pack(bcmbal_extra_bw_eligibility_type this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_extra_bw_eligibility_type_unpack(bcmbal_extra_bw_eligibility_type *this, bcmbal_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmbal_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_cfg_id_pack(bcmbal_flow_cfg_id this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_cfg_id_unpack(bcmbal_flow_cfg_id *this, bcmbal_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmbal_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_ind_id_pack(bcmbal_flow_ind_id this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_ind_id_unpack(bcmbal_flow_ind_id *this, bcmbal_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmbal_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_key_id_pack(bcmbal_flow_key_id this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_key_id_unpack(bcmbal_flow_key_id *this, bcmbal_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmbal_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_stat_id_pack(bcmbal_flow_stat_id this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_stat_id_unpack(bcmbal_flow_stat_id *this, bcmbal_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmbal_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_type_pack(bcmbal_flow_type this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_type_unpack(bcmbal_flow_type *this, bcmbal_buf *buf)
+{
+    uint32_t num_val;
+    if (!bcmbal_buf_read_u32(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_cfg_id_pack(bcmbal_group_cfg_id this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_cfg_id_unpack(bcmbal_group_cfg_id *this, bcmbal_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmbal_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_key_id_pack(bcmbal_group_key_id this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_key_id_unpack(bcmbal_group_key_id *this, bcmbal_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmbal_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_member_cmd_pack(bcmbal_group_member_cmd this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_member_cmd_unpack(bcmbal_group_member_cmd *this, bcmbal_buf *buf)
+{
+    uint32_t num_val;
+    if (!bcmbal_buf_read_u32(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_owner_pack(bcmbal_group_owner this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_owner_unpack(bcmbal_group_owner *this, bcmbal_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmbal_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_cfg_id_pack(bcmbal_interface_cfg_id this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_cfg_id_unpack(bcmbal_interface_cfg_id *this, bcmbal_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmbal_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_ind_id_pack(bcmbal_interface_ind_id this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_ind_id_unpack(bcmbal_interface_ind_id *this, bcmbal_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmbal_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_key_id_pack(bcmbal_interface_key_id this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_key_id_unpack(bcmbal_interface_key_id *this, bcmbal_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmbal_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_stat_id_pack(bcmbal_interface_stat_id this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_stat_id_unpack(bcmbal_interface_stat_id *this, bcmbal_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmbal_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_intf_type_pack(bcmbal_intf_type this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_intf_type_unpack(bcmbal_intf_type *this, bcmbal_buf *buf)
+{
+    uint32_t num_val;
+    if (!bcmbal_buf_read_u32(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_iwf_mode_pack(bcmbal_iwf_mode this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_iwf_mode_unpack(bcmbal_iwf_mode *this, bcmbal_buf *buf)
+{
+    uint32_t num_val;
+    if (!bcmbal_buf_read_u32(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_packet_cfg_id_pack(bcmbal_packet_cfg_id this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_packet_cfg_id_unpack(bcmbal_packet_cfg_id *this, bcmbal_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmbal_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_packet_ind_id_pack(bcmbal_packet_ind_id this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_packet_ind_id_unpack(bcmbal_packet_ind_id *this, bcmbal_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmbal_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_packet_key_id_pack(bcmbal_packet_key_id this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_packet_key_id_unpack(bcmbal_packet_key_id *this, bcmbal_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmbal_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_sla_id_pack(bcmbal_sla_id this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u64(buf, (uint64_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_sla_id_unpack(bcmbal_sla_id *this, bcmbal_buf *buf)
+{
+    uint64_t num_val;
+    if (!bcmbal_buf_read_u64(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_state_pack(bcmbal_state this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_state_unpack(bcmbal_state *this, bcmbal_buf *buf)
+{
+    uint32_t num_val;
+    if (!bcmbal_buf_read_u32(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_status_pack(bcmbal_status this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_status_unpack(bcmbal_status *this, bcmbal_buf *buf)
+{
+    uint32_t num_val;
+    if (!bcmbal_buf_read_u32(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_cfg_id_pack(bcmbal_subscriber_terminal_cfg_id this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_cfg_id_unpack(bcmbal_subscriber_terminal_cfg_id *this, bcmbal_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmbal_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_ind_id_pack(bcmbal_subscriber_terminal_ind_id this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_ind_id_unpack(bcmbal_subscriber_terminal_ind_id *this, bcmbal_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmbal_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_key_id_pack(bcmbal_subscriber_terminal_key_id this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_key_id_unpack(bcmbal_subscriber_terminal_key_id *this, bcmbal_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmbal_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_stat_id_pack(bcmbal_subscriber_terminal_stat_id this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_stat_id_unpack(bcmbal_subscriber_terminal_stat_id *this, bcmbal_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmbal_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_bac_type_pack(bcmbal_tm_bac_type this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_bac_type_unpack(bcmbal_tm_bac_type *this, bcmbal_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmbal_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_creation_mode_pack(bcmbal_tm_creation_mode this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_creation_mode_unpack(bcmbal_tm_creation_mode *this, bcmbal_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmbal_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_cfg_id_pack(bcmbal_tm_queue_cfg_id this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_cfg_id_unpack(bcmbal_tm_queue_cfg_id *this, bcmbal_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmbal_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_ind_id_pack(bcmbal_tm_queue_ind_id this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_ind_id_unpack(bcmbal_tm_queue_ind_id *this, bcmbal_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmbal_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_key_id_pack(bcmbal_tm_queue_key_id this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_key_id_unpack(bcmbal_tm_queue_key_id *this, bcmbal_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmbal_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_stat_id_pack(bcmbal_tm_queue_stat_id this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_stat_id_unpack(bcmbal_tm_queue_stat_id *this, bcmbal_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmbal_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_cfg_id_pack(bcmbal_tm_sched_cfg_id this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_cfg_id_unpack(bcmbal_tm_sched_cfg_id *this, bcmbal_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmbal_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_child_type_pack(bcmbal_tm_sched_child_type this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_child_type_unpack(bcmbal_tm_sched_child_type *this, bcmbal_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmbal_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_dir_pack(bcmbal_tm_sched_dir this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_dir_unpack(bcmbal_tm_sched_dir *this, bcmbal_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmbal_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_ind_id_pack(bcmbal_tm_sched_ind_id this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_ind_id_unpack(bcmbal_tm_sched_ind_id *this, bcmbal_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmbal_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_key_id_pack(bcmbal_tm_sched_key_id this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_key_id_unpack(bcmbal_tm_sched_key_id *this, bcmbal_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmbal_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_owner_type_pack(bcmbal_tm_sched_owner_type this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_owner_type_unpack(bcmbal_tm_sched_owner_type *this, bcmbal_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmbal_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_owner_agg_port_id_pack(bcmbal_tm_sched_owner_agg_port_id this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u64(buf, (uint64_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_owner_agg_port_id_unpack(bcmbal_tm_sched_owner_agg_port_id *this, bcmbal_buf *buf)
+{
+    uint64_t num_val;
+    if (!bcmbal_buf_read_u64(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_parent_id_pack(bcmbal_tm_sched_parent_id this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u64(buf, (uint64_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_parent_id_unpack(bcmbal_tm_sched_parent_id *this, bcmbal_buf *buf)
+{
+    uint64_t num_val;
+    if (!bcmbal_buf_read_u64(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_type_pack(bcmbal_tm_sched_type this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_type_unpack(bcmbal_tm_sched_type *this, bcmbal_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmbal_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_shaping_id_pack(bcmbal_tm_shaping_id this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u64(buf, (uint64_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_shaping_id_unpack(bcmbal_tm_shaping_id *this, bcmbal_buf *buf)
+{
+    uint64_t num_val;
+    if (!bcmbal_buf_read_u64(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_tcont_sla_id_pack(bcmbal_tm_tcont_sla_id this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u64(buf, (uint64_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_tcont_sla_id_unpack(bcmbal_tm_tcont_sla_id *this, bcmbal_buf *buf)
+{
+    uint64_t num_val;
+    if (!bcmbal_buf_read_u64(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_trx_type_pack(bcmbal_trx_type this, bcmbal_buf *buf)
+{
+    return bcmbal_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_trx_type_unpack(bcmbal_trx_type *this, bcmbal_buf *buf)
+{
+    uint32_t num_val;
+    if (!bcmbal_buf_read_u32(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_action_set_default(bcmbal_action *this)
+{
+    this->presence_mask = (bcmbal_action_id) 0;
+    this->cmds_bitmask = (bcmbal_action_cmd_id) 0;
+    this->o_vid = 0;
+    this->o_pbits = 0;
+    this->o_tpid = 0;
+    this->i_vid = 0;
+    this->i_pbits = 0;
+    this->i_tpid = 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_action_pack(const bcmbal_action *this, bcmbal_buf *buf)
+{
+    if (!bcmbal_action_id_pack(this->presence_mask, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0001) == 0x0001))
+    {
+        if (!bcmbal_action_cmd_id_pack(this->cmds_bitmask, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0002) == 0x0002))
+    {
+        if (!bcmbal_buf_write_u16(buf, this->o_vid))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0004) == 0x0004))
+    {
+        if (!bcmbal_buf_write_u8(buf, this->o_pbits))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0008) == 0x0008))
+    {
+        if (!bcmbal_buf_write_u16(buf, this->o_tpid))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0010) == 0x0010))
+    {
+        if (!bcmbal_buf_write_u16(buf, this->i_vid))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0020) == 0x0020))
+    {
+        if (!bcmbal_buf_write_u8(buf, this->i_pbits))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0040) == 0x0040))
+    {
+        if (!bcmbal_buf_write_u16(buf, this->i_tpid))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_action_get_packed_length(const bcmbal_action *this)
+{
+    uint32_t count = 8;
+    if ((((uint64_t) this->presence_mask & 0x0001) == 0x0001))
+    {
+        count += 4;
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0002) == 0x0002))
+    {
+        count += 2;
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0004) == 0x0004))
+    {
+        count += 1;
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0008) == 0x0008))
+    {
+        count += 2;
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0010) == 0x0010))
+    {
+        count += 2;
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0020) == 0x0020))
+    {
+        count += 1;
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0040) == 0x0040))
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_action_unpack(bcmbal_action *this, bcmbal_buf *buf, void **extra_mem)
+{
+    if (!bcmbal_action_id_unpack(&this->presence_mask, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0001) == 0x0001))
+    {
+        if (!bcmbal_action_cmd_id_unpack(&this->cmds_bitmask, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0002) == 0x0002))
+    {
+        if (!bcmbal_buf_read_u16(buf, &this->o_vid))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0004) == 0x0004))
+    {
+        if (!bcmbal_buf_read_u8(buf, &this->o_pbits))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0008) == 0x0008))
+    {
+        if (!bcmbal_buf_read_u16(buf, &this->o_tpid))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0010) == 0x0010))
+    {
+        if (!bcmbal_buf_read_u16(buf, &this->i_vid))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0020) == 0x0020))
+    {
+        if (!bcmbal_buf_read_u8(buf, &this->i_pbits))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0040) == 0x0040))
+    {
+        if (!bcmbal_buf_read_u16(buf, &this->i_tpid))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_action_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+    bcmbal_action_id presence_mask;
+    if (!bcmbal_action_id_unpack(&presence_mask, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((((uint64_t) presence_mask & 0x0001) == 0x0001))
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) presence_mask & 0x0002) == 0x0002))
+    {
+        if (!bcmbal_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) presence_mask & 0x0004) == 0x0004))
+    {
+        if (!bcmbal_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) presence_mask & 0x0008) == 0x0008))
+    {
+        if (!bcmbal_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) presence_mask & 0x0010) == 0x0010))
+    {
+        if (!bcmbal_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) presence_mask & 0x0020) == 0x0020))
+    {
+        if (!bcmbal_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) presence_mask & 0x0040) == 0x0040))
+    {
+        if (!bcmbal_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_action_bounds_check(const bcmbal_action *this)
+{
+    if ((this->presence_mask & 0xFFFFFFFFFFFFFF80ULL) != 0)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0001) == 0x0001))
+    {
+        if ((this->cmds_bitmask & 0xFFFFE000UL) != 0)
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_aggregation_port_id_list_u8_set_default(bcmbal_aggregation_port_id_list_u8 *this)
+{
+    this->len = 0;
+    this->val = NULL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_aggregation_port_id_list_u8_pack(const bcmbal_aggregation_port_id_list_u8 *this, bcmbal_buf *buf)
+{
+    uint8_t i0;
+    if (!bcmbal_buf_write_u8(buf, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmbal_aggregation_port_id_list_u8\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmbal_buf_write_u16(buf, (uint16_t) this->val[i0]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_aggregation_port_id_list_u8_get_packed_length(const bcmbal_aggregation_port_id_list_u8 *this)
+{
+    return 1 + (2 * this->len);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_aggregation_port_id_list_u8_unpack(bcmbal_aggregation_port_id_list_u8 *this, bcmbal_buf *buf, void **extra_mem)
+{
+    uint8_t i0;
+    if (!bcmbal_buf_read_u8(buf, &this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmbal_aggregation_port_id_list_u8\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->val = (bcmbal_aggregation_port_id *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->len * sizeof(bcmbal_aggregation_port_id));
+        }
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmbal_buf_read_u16(buf, (uint16_t *) &this->val[i0]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_aggregation_port_id_list_u8_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+    uint8_t len;
+    if (!bcmbal_buf_read_u8(packed, &len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmbal_aggregation_port_id) * len);
+    if (!bcmbal_buf_skip(packed, len * 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_aggregation_port_id_list_u8_bounds_check(const bcmbal_aggregation_port_id_list_u8 *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_classifier_set_default(bcmbal_classifier *this)
+{
+    this->presence_mask = (bcmbal_classifier_id) 0;
+    this->o_tpid = 0;
+    this->o_vid = 0;
+    this->i_tpid = 0;
+    this->i_vid = 0;
+    this->o_pbits = 0;
+    this->i_pbits = 0;
+    this->ether_type = 0;
+    bcmos_mac_address_init(&this->dst_mac);
+    bcmos_mac_address_init(&this->src_mac);
+    this->ip_proto = 0;
+    bcmos_ipv4_address_init(&this->dst_ip);
+    bcmos_ipv4_address_init(&this->src_ip);
+    this->src_port = 0;
+    this->dst_port = 0;
+    this->pkt_tag_type = (bcmbal_pkt_tag_type) 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_classifier_pack(const bcmbal_classifier *this, bcmbal_buf *buf)
+{
+    if (!bcmbal_classifier_id_pack(this->presence_mask, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0001) == 0x0001))
+    {
+        if (!bcmbal_buf_write_u16(buf, this->o_tpid))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0002) == 0x0002))
+    {
+        if (!bcmbal_buf_write_u16(buf, this->o_vid))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0004) == 0x0004))
+    {
+        if (!bcmbal_buf_write_u16(buf, this->i_tpid))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0008) == 0x0008))
+    {
+        if (!bcmbal_buf_write_u16(buf, this->i_vid))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0010) == 0x0010))
+    {
+        if (!bcmbal_buf_write_u8(buf, this->o_pbits))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0020) == 0x0020))
+    {
+        if (!bcmbal_buf_write_u8(buf, this->i_pbits))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0040) == 0x0040))
+    {
+        if (!bcmbal_buf_write_u16(buf, this->ether_type))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0080) == 0x0080))
+    {
+        if (!bcmbal_buf_write_mac_address(buf, this->dst_mac))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0100) == 0x0100))
+    {
+        if (!bcmbal_buf_write_mac_address(buf, this->src_mac))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0200) == 0x0200))
+    {
+        if (!bcmbal_buf_write_u8(buf, this->ip_proto))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0400) == 0x0400))
+    {
+        if (!bcmbal_buf_write_ipv4_address(buf, this->dst_ip))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0800) == 0x0800))
+    {
+        if (!bcmbal_buf_write_ipv4_address(buf, this->src_ip))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x1000) == 0x1000))
+    {
+        if (!bcmbal_buf_write_u16(buf, this->src_port))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x2000) == 0x2000))
+    {
+        if (!bcmbal_buf_write_u16(buf, this->dst_port))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x4000) == 0x4000))
+    {
+        if (!bcmbal_pkt_tag_type_pack(this->pkt_tag_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_classifier_get_packed_length(const bcmbal_classifier *this)
+{
+    uint32_t count = 8;
+    if ((((uint64_t) this->presence_mask & 0x0001) == 0x0001))
+    {
+        count += 2;
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0002) == 0x0002))
+    {
+        count += 2;
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0004) == 0x0004))
+    {
+        count += 2;
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0008) == 0x0008))
+    {
+        count += 2;
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0010) == 0x0010))
+    {
+        count += 1;
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0020) == 0x0020))
+    {
+        count += 1;
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0040) == 0x0040))
+    {
+        count += 2;
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0080) == 0x0080))
+    {
+        count += 6;
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0100) == 0x0100))
+    {
+        count += 6;
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0200) == 0x0200))
+    {
+        count += 1;
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0400) == 0x0400))
+    {
+        count += 4;
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0800) == 0x0800))
+    {
+        count += 4;
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x1000) == 0x1000))
+    {
+        count += 2;
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x2000) == 0x2000))
+    {
+        count += 2;
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x4000) == 0x4000))
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_classifier_unpack(bcmbal_classifier *this, bcmbal_buf *buf, void **extra_mem)
+{
+    if (!bcmbal_classifier_id_unpack(&this->presence_mask, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0001) == 0x0001))
+    {
+        if (!bcmbal_buf_read_u16(buf, &this->o_tpid))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0002) == 0x0002))
+    {
+        if (!bcmbal_buf_read_u16(buf, &this->o_vid))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0004) == 0x0004))
+    {
+        if (!bcmbal_buf_read_u16(buf, &this->i_tpid))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0008) == 0x0008))
+    {
+        if (!bcmbal_buf_read_u16(buf, &this->i_vid))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0010) == 0x0010))
+    {
+        if (!bcmbal_buf_read_u8(buf, &this->o_pbits))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0020) == 0x0020))
+    {
+        if (!bcmbal_buf_read_u8(buf, &this->i_pbits))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0040) == 0x0040))
+    {
+        if (!bcmbal_buf_read_u16(buf, &this->ether_type))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0080) == 0x0080))
+    {
+        if (!bcmbal_buf_read_mac_address(buf, &this->dst_mac))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0100) == 0x0100))
+    {
+        if (!bcmbal_buf_read_mac_address(buf, &this->src_mac))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0200) == 0x0200))
+    {
+        if (!bcmbal_buf_read_u8(buf, &this->ip_proto))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0400) == 0x0400))
+    {
+        if (!bcmbal_buf_read_ipv4_address(buf, &this->dst_ip))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0800) == 0x0800))
+    {
+        if (!bcmbal_buf_read_ipv4_address(buf, &this->src_ip))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x1000) == 0x1000))
+    {
+        if (!bcmbal_buf_read_u16(buf, &this->src_port))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x2000) == 0x2000))
+    {
+        if (!bcmbal_buf_read_u16(buf, &this->dst_port))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x4000) == 0x4000))
+    {
+        if (!bcmbal_pkt_tag_type_unpack(&this->pkt_tag_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_classifier_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+    bcmbal_classifier_id presence_mask;
+    if (!bcmbal_classifier_id_unpack(&presence_mask, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((((uint64_t) presence_mask & 0x0001) == 0x0001))
+    {
+        if (!bcmbal_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) presence_mask & 0x0002) == 0x0002))
+    {
+        if (!bcmbal_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) presence_mask & 0x0004) == 0x0004))
+    {
+        if (!bcmbal_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) presence_mask & 0x0008) == 0x0008))
+    {
+        if (!bcmbal_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) presence_mask & 0x0010) == 0x0010))
+    {
+        if (!bcmbal_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) presence_mask & 0x0020) == 0x0020))
+    {
+        if (!bcmbal_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) presence_mask & 0x0040) == 0x0040))
+    {
+        if (!bcmbal_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) presence_mask & 0x0080) == 0x0080))
+    {
+        if (!bcmbal_buf_skip(packed, 6))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) presence_mask & 0x0100) == 0x0100))
+    {
+        if (!bcmbal_buf_skip(packed, 6))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) presence_mask & 0x0200) == 0x0200))
+    {
+        if (!bcmbal_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) presence_mask & 0x0400) == 0x0400))
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) presence_mask & 0x0800) == 0x0800))
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) presence_mask & 0x1000) == 0x1000))
+    {
+        if (!bcmbal_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) presence_mask & 0x2000) == 0x2000))
+    {
+        if (!bcmbal_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) presence_mask & 0x4000) == 0x4000))
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_classifier_bounds_check(const bcmbal_classifier *this)
+{
+    if ((this->presence_mask & 0xFFFFFFFFFFFF8000ULL) != 0)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x4000) == 0x4000))
+    {
+        if ((this->pkt_tag_type & 0xFFFFFFF8UL) != 0)
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_dest_set_default(bcmbal_dest *this)
+{
+    this->type = (bcmbal_dest_type) 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_dest_pack(const bcmbal_dest *this, bcmbal_buf *buf)
+{
+    if (!bcmbal_dest_type_pack(this->type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->type)
+    {
+        case BCMBAL_DEST_TYPE_NNI:
+            {
+                if (!bcmbal_buf_write_u32(buf, (uint32_t) this->u.nni.int_id))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMBAL_DEST_TYPE_SUB_TERM:
+            {
+                if (!bcmbal_buf_write_u32(buf, (uint32_t) this->u.sub_term.sub_term_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmbal_buf_write_u16(buf, this->u.sub_term.sub_term_uni))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmbal_buf_write_u16(buf, this->u.sub_term.int_id))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMBAL_DEST_TYPE_HOST:
+            {
+            }
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_dest_get_packed_length(const bcmbal_dest *this)
+{
+    uint32_t count = 4;
+    switch (this->type)
+    {
+        case BCMBAL_DEST_TYPE_NNI:
+            {
+                count += 4;
+            }
+            break;
+        case BCMBAL_DEST_TYPE_SUB_TERM:
+            {
+                count += 8;
+            }
+            break;
+        case BCMBAL_DEST_TYPE_HOST:
+            {
+            }
+            break;
+        default:
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_dest_unpack(bcmbal_dest *this, bcmbal_buf *buf, void **extra_mem)
+{
+    if (!bcmbal_dest_type_unpack(&this->type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->type)
+    {
+        case BCMBAL_DEST_TYPE_NNI:
+            {
+                if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->u.nni.int_id))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMBAL_DEST_TYPE_SUB_TERM:
+            {
+                if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->u.sub_term.sub_term_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmbal_buf_read_u16(buf, &this->u.sub_term.sub_term_uni))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmbal_buf_read_u16(buf, &this->u.sub_term.int_id))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMBAL_DEST_TYPE_HOST:
+            {
+            }
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_dest_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+    bcmbal_dest_type type;
+    if (!bcmbal_dest_type_unpack(&type, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (type)
+    {
+        case BCMBAL_DEST_TYPE_NNI:
+            {
+                if (!bcmbal_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMBAL_DEST_TYPE_SUB_TERM:
+            {
+                if (!bcmbal_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmbal_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmbal_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMBAL_DEST_TYPE_HOST:
+            {
+            }
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_dest_bounds_check(const bcmbal_dest *this)
+{
+    switch (this->type)
+    {
+        case BCMBAL_DEST_TYPE_NNI:
+            {
+            }
+            break;
+        case BCMBAL_DEST_TYPE_SUB_TERM:
+            {
+            }
+            break;
+        case BCMBAL_DEST_TYPE_HOST:
+            {
+            }
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_flow_id_list_u32_set_default(bcmbal_flow_id_list_u32 *this)
+{
+    this->len = 0;
+    this->val = NULL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_id_list_u32_pack(const bcmbal_flow_id_list_u32 *this, bcmbal_buf *buf)
+{
+    uint32_t i0;
+    if (!bcmbal_buf_write_u32(buf, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmbal_flow_id_list_u32\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmbal_buf_write_u32(buf, (uint32_t) this->val[i0]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_flow_id_list_u32_get_packed_length(const bcmbal_flow_id_list_u32 *this)
+{
+    return 4 + (4 * this->len);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_id_list_u32_unpack(bcmbal_flow_id_list_u32 *this, bcmbal_buf *buf, void **extra_mem)
+{
+    uint32_t i0;
+    if (!bcmbal_buf_read_u32(buf, &this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmbal_flow_id_list_u32\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->val = (bcmbal_flow_id *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->len * sizeof(bcmbal_flow_id));
+        }
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->val[i0]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_id_list_u32_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+    uint32_t len;
+    if (!bcmbal_buf_read_u32(packed, &len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmbal_flow_id) * len);
+    if (!bcmbal_buf_skip(packed, len * 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_id_list_u32_bounds_check(const bcmbal_flow_id_list_u32 *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_tm_queue_ref_set_default(bcmbal_tm_queue_ref *this)
+{
+    this->sched_id = (bcmbal_tm_sched_id) 0;
+    this->queue_id = (bcmbal_tm_queue_id) 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_ref_pack(const bcmbal_tm_queue_ref *this, bcmbal_buf *buf)
+{
+    if (!bcmbal_buf_write_u32(buf, (uint32_t) this->sched_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmbal_buf_write_u8(buf, (uint8_t) this->queue_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_ref_unpack(bcmbal_tm_queue_ref *this, bcmbal_buf *buf, void **extra_mem)
+{
+    if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->sched_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmbal_buf_read_u8(buf, (uint8_t *) &this->queue_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_ref_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmbal_buf_skip(packed, 5);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_ref_bounds_check(const bcmbal_tm_queue_ref *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_group_member_info_set_default(bcmbal_group_member_info *this)
+{
+    this->intf_id = (bcmbal_intf_id) 0;
+    this->svc_port_id = (bcmbal_service_port_id) 0;
+    this->action.presence_mask = (bcmbal_action_id) 0;
+    this->action.cmds_bitmask = (bcmbal_action_cmd_id) 0;
+    this->action.o_vid = 0;
+    this->action.o_pbits = 0;
+    this->action.o_tpid = 0;
+    this->action.i_vid = 0;
+    this->action.i_pbits = 0;
+    this->action.i_tpid = 0;
+    this->queue.sched_id = (bcmbal_tm_sched_id) 0;
+    this->queue.queue_id = (bcmbal_tm_queue_id) 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_member_info_pack(const bcmbal_group_member_info *this, bcmbal_buf *buf)
+{
+    if (!bcmbal_buf_write_u32(buf, (uint32_t) this->intf_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmbal_buf_write_u16(buf, (uint16_t) this->svc_port_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmbal_action_pack(&this->action, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmbal_tm_queue_ref_pack(&this->queue, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_group_member_info_get_packed_length(const bcmbal_group_member_info *this)
+{
+    return 11 + bcmbal_action_get_packed_length(&this->action);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_member_info_unpack(bcmbal_group_member_info *this, bcmbal_buf *buf, void **extra_mem)
+{
+    if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->intf_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmbal_buf_read_u16(buf, (uint16_t *) &this->svc_port_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmbal_action_unpack(&this->action, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmbal_tm_queue_ref_unpack(&this->queue, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_member_info_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+    if (!bcmbal_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmbal_buf_skip(packed, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmbal_action_scan(packed, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmbal_buf_skip(packed, 5))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_member_info_bounds_check(const bcmbal_group_member_info *this)
+{
+    if (!bcmbal_action_bounds_check(&this->action))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmbal_tm_queue_ref_bounds_check(&this->queue))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_group_member_info_list_u16_set_default(bcmbal_group_member_info_list_u16 *this)
+{
+    this->len = 0;
+    this->val = NULL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_member_info_list_u16_pack(const bcmbal_group_member_info_list_u16 *this, bcmbal_buf *buf)
+{
+    uint16_t i0;
+    if (!bcmbal_buf_write_u16(buf, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmbal_group_member_info_list_u16\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmbal_group_member_info_pack(&this->val[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_group_member_info_list_u16_get_packed_length(const bcmbal_group_member_info_list_u16 *this)
+{
+    uint32_t count = 2;
+    uint32_t i0;
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"len\" of struct \"bcmbal_group_member_info_list_u16\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return 0;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        count += bcmbal_group_member_info_get_packed_length(&this->val[i0]);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_member_info_list_u16_unpack(bcmbal_group_member_info_list_u16 *this, bcmbal_buf *buf, void **extra_mem)
+{
+    uint16_t i0;
+    if (!bcmbal_buf_read_u16(buf, &this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmbal_group_member_info_list_u16\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->val = (bcmbal_group_member_info *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->len * sizeof(bcmbal_group_member_info));
+        }
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmbal_group_member_info_unpack(&this->val[i0], buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_member_info_list_u16_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+    uint16_t len;
+    uint16_t i0;
+    if (!bcmbal_buf_read_u16(packed, &len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmbal_group_member_info) * len);
+    for (i0 = 0; i0 < len; i0++)
+    {
+        if (!bcmbal_group_member_info_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_member_info_list_u16_bounds_check(const bcmbal_group_member_info_list_u16 *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_password_set_default(bcmbal_password *this)
+{
+    memset(this->arr, 0, sizeof(this->arr));
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_password_pack(const bcmbal_password *this, bcmbal_buf *buf)
+{
+    if (!bcmbal_buf_write(buf, this->arr, 10))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_password_unpack(bcmbal_password *this, bcmbal_buf *buf, void **extra_mem)
+{
+    if (!bcmbal_buf_read(buf, this->arr, 10))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_password_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmbal_buf_skip(packed, 10);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_password_bounds_check(const bcmbal_password *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_registration_id_set_default(bcmbal_registration_id *this)
+{
+    memset(this->arr, 0, sizeof(this->arr));
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_registration_id_pack(const bcmbal_registration_id *this, bcmbal_buf *buf)
+{
+    if (!bcmbal_buf_write(buf, this->arr, 36))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_registration_id_unpack(bcmbal_registration_id *this, bcmbal_buf *buf, void **extra_mem)
+{
+    if (!bcmbal_buf_read(buf, this->arr, 36))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_registration_id_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmbal_buf_skip(packed, 36);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_registration_id_bounds_check(const bcmbal_registration_id *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_serial_number_set_default(bcmbal_serial_number *this)
+{
+    memset(this->vendor_id, 0, sizeof(this->vendor_id));
+    memset(this->vendor_specific, 0, sizeof(this->vendor_specific));
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_serial_number_pack(const bcmbal_serial_number *this, bcmbal_buf *buf)
+{
+    if (!bcmbal_buf_write(buf, this->vendor_id, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmbal_buf_write(buf, this->vendor_specific, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_serial_number_unpack(bcmbal_serial_number *this, bcmbal_buf *buf, void **extra_mem)
+{
+    if (!bcmbal_buf_read(buf, this->vendor_id, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmbal_buf_read(buf, this->vendor_specific, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_serial_number_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmbal_buf_skip(packed, 8);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_serial_number_bounds_check(const bcmbal_serial_number *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_service_port_id_list_u8_set_default(bcmbal_service_port_id_list_u8 *this)
+{
+    this->len = 0;
+    this->val = NULL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_service_port_id_list_u8_pack(const bcmbal_service_port_id_list_u8 *this, bcmbal_buf *buf)
+{
+    uint8_t i0;
+    if (!bcmbal_buf_write_u8(buf, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmbal_service_port_id_list_u8\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmbal_buf_write_u16(buf, (uint16_t) this->val[i0]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_service_port_id_list_u8_get_packed_length(const bcmbal_service_port_id_list_u8 *this)
+{
+    return 1 + (2 * this->len);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_service_port_id_list_u8_unpack(bcmbal_service_port_id_list_u8 *this, bcmbal_buf *buf, void **extra_mem)
+{
+    uint8_t i0;
+    if (!bcmbal_buf_read_u8(buf, &this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmbal_service_port_id_list_u8\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->val = (bcmbal_service_port_id *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->len * sizeof(bcmbal_service_port_id));
+        }
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmbal_buf_read_u16(buf, (uint16_t *) &this->val[i0]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_service_port_id_list_u8_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+    uint8_t len;
+    if (!bcmbal_buf_read_u8(packed, &len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmbal_service_port_id) * len);
+    if (!bcmbal_buf_skip(packed, len * 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_service_port_id_list_u8_bounds_check(const bcmbal_service_port_id_list_u8 *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_sla_set_default(bcmbal_sla *this)
+{
+    this->presence_mask = (bcmbal_sla_id) 0;
+    this->min_rate = 0;
+    this->max_rate = 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_sla_pack(const bcmbal_sla *this, bcmbal_buf *buf)
+{
+    if (!bcmbal_sla_id_pack(this->presence_mask, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0001) == 0x0001))
+    {
+        if (!bcmbal_buf_write_u32(buf, this->min_rate))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0002) == 0x0002))
+    {
+        if (!bcmbal_buf_write_u32(buf, this->max_rate))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_sla_get_packed_length(const bcmbal_sla *this)
+{
+    uint32_t count = 8;
+    if ((((uint64_t) this->presence_mask & 0x0001) == 0x0001))
+    {
+        count += 4;
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0002) == 0x0002))
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_sla_unpack(bcmbal_sla *this, bcmbal_buf *buf, void **extra_mem)
+{
+    if (!bcmbal_sla_id_unpack(&this->presence_mask, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0001) == 0x0001))
+    {
+        if (!bcmbal_buf_read_u32(buf, &this->min_rate))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0002) == 0x0002))
+    {
+        if (!bcmbal_buf_read_u32(buf, &this->max_rate))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_sla_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+    bcmbal_sla_id presence_mask;
+    if (!bcmbal_sla_id_unpack(&presence_mask, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((((uint64_t) presence_mask & 0x0001) == 0x0001))
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) presence_mask & 0x0002) == 0x0002))
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_sla_bounds_check(const bcmbal_sla *this)
+{
+    if ((this->presence_mask & 0xFFFFFFFFFFFFFFFCULL) != 0)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_sub_id_list_u16_set_default(bcmbal_sub_id_list_u16 *this)
+{
+    this->len = 0;
+    this->val = NULL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_sub_id_list_u16_pack(const bcmbal_sub_id_list_u16 *this, bcmbal_buf *buf)
+{
+    uint16_t i0;
+    if (!bcmbal_buf_write_u16(buf, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmbal_sub_id_list_u16\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmbal_buf_write_u32(buf, (uint32_t) this->val[i0]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_sub_id_list_u16_get_packed_length(const bcmbal_sub_id_list_u16 *this)
+{
+    return 2 + (4 * this->len);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_sub_id_list_u16_unpack(bcmbal_sub_id_list_u16 *this, bcmbal_buf *buf, void **extra_mem)
+{
+    uint16_t i0;
+    if (!bcmbal_buf_read_u16(buf, &this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmbal_sub_id_list_u16\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->val = (bcmbal_sub_id *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->len * sizeof(bcmbal_sub_id));
+        }
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->val[i0]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_sub_id_list_u16_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+    uint16_t len;
+    if (!bcmbal_buf_read_u16(packed, &len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmbal_sub_id) * len);
+    if (!bcmbal_buf_skip(packed, len * 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_sub_id_list_u16_bounds_check(const bcmbal_sub_id_list_u16 *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_tm_red_set_default(bcmbal_tm_red *this)
+{
+    this->min_threshold = (bcmbal_percent) 0;
+    this->max_threshold = (bcmbal_percent) 0;
+    this->max_probability = (bcmbal_percent) 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_red_pack(const bcmbal_tm_red *this, bcmbal_buf *buf)
+{
+    if (!bcmbal_buf_write_u8(buf, (uint8_t) this->min_threshold))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmbal_buf_write_u8(buf, (uint8_t) this->max_threshold))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmbal_buf_write_u8(buf, (uint8_t) this->max_probability))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_red_unpack(bcmbal_tm_red *this, bcmbal_buf *buf, void **extra_mem)
+{
+    if (!bcmbal_buf_read_u8(buf, (uint8_t *) &this->min_threshold))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmbal_buf_read_u8(buf, (uint8_t *) &this->max_threshold))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmbal_buf_read_u8(buf, (uint8_t *) &this->max_probability))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_red_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmbal_buf_skip(packed, 3);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_red_bounds_check(const bcmbal_tm_red *this)
+{
+    if (this->min_threshold > (bcmbal_percent) 100)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->max_threshold > (bcmbal_percent) 100)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->max_probability > (bcmbal_percent) 100)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_tm_bac_set_default(bcmbal_tm_bac *this)
+{
+    this->type = (bcmbal_tm_bac_type) 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_bac_pack(const bcmbal_tm_bac *this, bcmbal_buf *buf)
+{
+    if (!bcmbal_tm_bac_type_pack(this->type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->type)
+    {
+        case BCMBAL_TM_BAC_TYPE_TAILDROP:
+            {
+                if (!bcmbal_buf_write_u32(buf, this->u.taildrop.max_size))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMBAL_TM_BAC_TYPE_RED:
+            {
+                if (!bcmbal_tm_red_pack(&this->u.red.red, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMBAL_TM_BAC_TYPE_WRED:
+            {
+                if (!bcmbal_tm_red_pack(&this->u.wred.green, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmbal_tm_red_pack(&this->u.wred.yellow, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmbal_tm_red_pack(&this->u.wred.red, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMBAL_TM_BAC_TYPE_WTAILDROP:
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_tm_bac_get_packed_length(const bcmbal_tm_bac *this)
+{
+    uint32_t count = 1;
+    switch (this->type)
+    {
+        case BCMBAL_TM_BAC_TYPE_TAILDROP:
+            {
+                count += 4;
+            }
+            break;
+        case BCMBAL_TM_BAC_TYPE_RED:
+            {
+                count += 3;
+            }
+            break;
+        case BCMBAL_TM_BAC_TYPE_WRED:
+            {
+                count += 9;
+            }
+            break;
+        case BCMBAL_TM_BAC_TYPE_WTAILDROP:
+        default:
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_bac_unpack(bcmbal_tm_bac *this, bcmbal_buf *buf, void **extra_mem)
+{
+    if (!bcmbal_tm_bac_type_unpack(&this->type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->type)
+    {
+        case BCMBAL_TM_BAC_TYPE_TAILDROP:
+            {
+                if (!bcmbal_buf_read_u32(buf, &this->u.taildrop.max_size))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMBAL_TM_BAC_TYPE_RED:
+            {
+                if (!bcmbal_tm_red_unpack(&this->u.red.red, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMBAL_TM_BAC_TYPE_WRED:
+            {
+                if (!bcmbal_tm_red_unpack(&this->u.wred.green, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmbal_tm_red_unpack(&this->u.wred.yellow, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmbal_tm_red_unpack(&this->u.wred.red, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMBAL_TM_BAC_TYPE_WTAILDROP:
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_bac_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+    bcmbal_tm_bac_type type;
+    if (!bcmbal_tm_bac_type_unpack(&type, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (type)
+    {
+        case BCMBAL_TM_BAC_TYPE_TAILDROP:
+            {
+                if (!bcmbal_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMBAL_TM_BAC_TYPE_RED:
+            {
+                if (!bcmbal_buf_skip(packed, 3))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMBAL_TM_BAC_TYPE_WRED:
+            {
+                if (!bcmbal_buf_skip(packed, 3))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmbal_buf_skip(packed, 3))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmbal_buf_skip(packed, 3))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMBAL_TM_BAC_TYPE_WTAILDROP:
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_bac_bounds_check(const bcmbal_tm_bac *this)
+{
+    switch (this->type)
+    {
+        case BCMBAL_TM_BAC_TYPE_TAILDROP:
+            {
+            }
+            break;
+        case BCMBAL_TM_BAC_TYPE_RED:
+            {
+                if (!bcmbal_tm_red_bounds_check(&this->u.red.red))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMBAL_TM_BAC_TYPE_WRED:
+            {
+                if (!bcmbal_tm_red_bounds_check(&this->u.wred.green))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmbal_tm_red_bounds_check(&this->u.wred.yellow))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmbal_tm_red_bounds_check(&this->u.wred.red))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMBAL_TM_BAC_TYPE_WTAILDROP:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_tm_queue_id_list_u8_set_default(bcmbal_tm_queue_id_list_u8 *this)
+{
+    this->len = 0;
+    this->val = NULL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_id_list_u8_pack(const bcmbal_tm_queue_id_list_u8 *this, bcmbal_buf *buf)
+{
+    uint8_t i0;
+    if (!bcmbal_buf_write_u8(buf, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmbal_tm_queue_id_list_u8\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmbal_buf_write_u8(buf, (uint8_t) this->val[i0]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_tm_queue_id_list_u8_get_packed_length(const bcmbal_tm_queue_id_list_u8 *this)
+{
+    return 1 + this->len;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_id_list_u8_unpack(bcmbal_tm_queue_id_list_u8 *this, bcmbal_buf *buf, void **extra_mem)
+{
+    uint8_t i0;
+    if (!bcmbal_buf_read_u8(buf, &this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmbal_tm_queue_id_list_u8\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->val = (bcmbal_tm_queue_id *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->len * sizeof(bcmbal_tm_queue_id));
+        }
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmbal_buf_read_u8(buf, (uint8_t *) &this->val[i0]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_id_list_u8_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+    uint8_t len;
+    if (!bcmbal_buf_read_u8(packed, &len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmbal_tm_queue_id) * len);
+    if (!bcmbal_buf_skip(packed, len * 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_id_list_u8_bounds_check(const bcmbal_tm_queue_id_list_u8 *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_tm_sched_id_list_u8_set_default(bcmbal_tm_sched_id_list_u8 *this)
+{
+    this->len = 0;
+    this->val = NULL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_id_list_u8_pack(const bcmbal_tm_sched_id_list_u8 *this, bcmbal_buf *buf)
+{
+    uint8_t i0;
+    if (!bcmbal_buf_write_u8(buf, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmbal_tm_sched_id_list_u8\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmbal_buf_write_u32(buf, (uint32_t) this->val[i0]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_tm_sched_id_list_u8_get_packed_length(const bcmbal_tm_sched_id_list_u8 *this)
+{
+    return 1 + (4 * this->len);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_id_list_u8_unpack(bcmbal_tm_sched_id_list_u8 *this, bcmbal_buf *buf, void **extra_mem)
+{
+    uint8_t i0;
+    if (!bcmbal_buf_read_u8(buf, &this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmbal_tm_sched_id_list_u8\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->val = (bcmbal_tm_sched_id *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->len * sizeof(bcmbal_tm_sched_id));
+        }
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->val[i0]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_id_list_u8_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+    uint8_t len;
+    if (!bcmbal_buf_read_u8(packed, &len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmbal_tm_sched_id) * len);
+    if (!bcmbal_buf_skip(packed, len * 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_id_list_u8_bounds_check(const bcmbal_tm_sched_id_list_u8 *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_tm_sched_owner_set_default(bcmbal_tm_sched_owner *this)
+{
+    this->type = (bcmbal_tm_sched_owner_type) 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_owner_pack(const bcmbal_tm_sched_owner *this, bcmbal_buf *buf)
+{
+    if (!bcmbal_tm_sched_owner_type_pack(this->type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->type)
+    {
+        case BCMBAL_TM_SCHED_OWNER_TYPE_INTERFACE:
+            {
+                if (!bcmbal_intf_type_pack(this->u.interface.intf_type, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmbal_buf_write_u32(buf, (uint32_t) this->u.interface.intf_id))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMBAL_TM_SCHED_OWNER_TYPE_SUB_TERM:
+            {
+                if (!bcmbal_buf_write_u32(buf, (uint32_t) this->u.sub_term.intf_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmbal_buf_write_u32(buf, (uint32_t) this->u.sub_term.sub_term_id))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMBAL_TM_SCHED_OWNER_TYPE_AGG_PORT:
+            {
+                if (!bcmbal_tm_sched_owner_agg_port_id_pack(this->u.agg_port.presence_mask, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((((uint64_t) this->u.agg_port.presence_mask & 0x0001) == 0x0001))
+                {
+                    if (!bcmbal_buf_write_u8(buf, this->u.agg_port.intf_id))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+
+                if ((((uint64_t) this->u.agg_port.presence_mask & 0x0002) == 0x0002))
+                {
+                    if (!bcmbal_buf_write_u32(buf, (uint32_t) this->u.agg_port.sub_term_id))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+
+                if ((((uint64_t) this->u.agg_port.presence_mask & 0x0004) == 0x0004))
+                {
+                    if (!bcmbal_buf_write_u16(buf, (uint16_t) this->u.agg_port.agg_port_id))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMBAL_TM_SCHED_OWNER_TYPE_UNI:
+            {
+                if (!bcmbal_buf_write_u8(buf, this->u.uni.intf_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmbal_buf_write_u32(buf, (uint32_t) this->u.uni.sub_term_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmbal_buf_write_u8(buf, this->u.uni.idx))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMBAL_TM_SCHED_OWNER_TYPE_VIRTUAL:
+            {
+                if (!bcmbal_buf_write_u32(buf, this->u.virtual.idx))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMBAL_TM_SCHED_OWNER_TYPE_UNDEFINED:
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_tm_sched_owner_get_packed_length(const bcmbal_tm_sched_owner *this)
+{
+    uint32_t count = 1;
+    switch (this->type)
+    {
+        case BCMBAL_TM_SCHED_OWNER_TYPE_INTERFACE:
+            {
+                count += 8;
+            }
+            break;
+        case BCMBAL_TM_SCHED_OWNER_TYPE_SUB_TERM:
+            {
+                count += 8;
+            }
+            break;
+        case BCMBAL_TM_SCHED_OWNER_TYPE_AGG_PORT:
+            {
+                count += 15;
+            }
+            break;
+        case BCMBAL_TM_SCHED_OWNER_TYPE_UNI:
+            {
+                count += 6;
+            }
+            break;
+        case BCMBAL_TM_SCHED_OWNER_TYPE_VIRTUAL:
+            {
+                count += 4;
+            }
+            break;
+        case BCMBAL_TM_SCHED_OWNER_TYPE_UNDEFINED:
+        default:
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_owner_unpack(bcmbal_tm_sched_owner *this, bcmbal_buf *buf, void **extra_mem)
+{
+    if (!bcmbal_tm_sched_owner_type_unpack(&this->type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->type)
+    {
+        case BCMBAL_TM_SCHED_OWNER_TYPE_INTERFACE:
+            {
+                if (!bcmbal_intf_type_unpack(&this->u.interface.intf_type, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->u.interface.intf_id))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMBAL_TM_SCHED_OWNER_TYPE_SUB_TERM:
+            {
+                if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->u.sub_term.intf_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->u.sub_term.sub_term_id))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMBAL_TM_SCHED_OWNER_TYPE_AGG_PORT:
+            {
+                if (!bcmbal_tm_sched_owner_agg_port_id_unpack(&this->u.agg_port.presence_mask, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((((uint64_t) this->u.agg_port.presence_mask & 0x0001) == 0x0001))
+                {
+                    if (!bcmbal_buf_read_u8(buf, &this->u.agg_port.intf_id))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+
+                if ((((uint64_t) this->u.agg_port.presence_mask & 0x0002) == 0x0002))
+                {
+                    if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->u.agg_port.sub_term_id))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+
+                if ((((uint64_t) this->u.agg_port.presence_mask & 0x0004) == 0x0004))
+                {
+                    if (!bcmbal_buf_read_u16(buf, (uint16_t *) &this->u.agg_port.agg_port_id))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMBAL_TM_SCHED_OWNER_TYPE_UNI:
+            {
+                if (!bcmbal_buf_read_u8(buf, &this->u.uni.intf_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->u.uni.sub_term_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmbal_buf_read_u8(buf, &this->u.uni.idx))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMBAL_TM_SCHED_OWNER_TYPE_VIRTUAL:
+            {
+                if (!bcmbal_buf_read_u32(buf, &this->u.virtual.idx))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMBAL_TM_SCHED_OWNER_TYPE_UNDEFINED:
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_owner_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+    bcmbal_tm_sched_owner_type type;
+    if (!bcmbal_tm_sched_owner_type_unpack(&type, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (type)
+    {
+        case BCMBAL_TM_SCHED_OWNER_TYPE_INTERFACE:
+            {
+                if (!bcmbal_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmbal_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMBAL_TM_SCHED_OWNER_TYPE_SUB_TERM:
+            {
+                if (!bcmbal_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmbal_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMBAL_TM_SCHED_OWNER_TYPE_AGG_PORT:
+            {
+                bcmbal_tm_sched_owner_agg_port_id presence_mask;
+                if (!bcmbal_tm_sched_owner_agg_port_id_unpack(&presence_mask, packed))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((((uint64_t) presence_mask & 0x0001) == 0x0001))
+                {
+                    if (!bcmbal_buf_skip(packed, 1))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+
+                if ((((uint64_t) presence_mask & 0x0002) == 0x0002))
+                {
+                    if (!bcmbal_buf_skip(packed, 4))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+
+                if ((((uint64_t) presence_mask & 0x0004) == 0x0004))
+                {
+                    if (!bcmbal_buf_skip(packed, 2))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMBAL_TM_SCHED_OWNER_TYPE_UNI:
+            {
+                if (!bcmbal_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmbal_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmbal_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMBAL_TM_SCHED_OWNER_TYPE_VIRTUAL:
+            {
+                if (!bcmbal_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMBAL_TM_SCHED_OWNER_TYPE_UNDEFINED:
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_owner_bounds_check(const bcmbal_tm_sched_owner *this)
+{
+    switch (this->type)
+    {
+        case BCMBAL_TM_SCHED_OWNER_TYPE_INTERFACE:
+            {
+                switch (this->u.interface.intf_type)
+                {
+                    case BCMBAL_INTF_TYPE_NNI:
+                        break;
+                    case BCMBAL_INTF_TYPE_PON:
+                        break;
+                    default:
+                        return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMBAL_TM_SCHED_OWNER_TYPE_SUB_TERM:
+            {
+            }
+            break;
+        case BCMBAL_TM_SCHED_OWNER_TYPE_AGG_PORT:
+            {
+                if ((this->u.agg_port.presence_mask & 0xFFFFFFFFFFFFFFF8ULL) != 0)
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMBAL_TM_SCHED_OWNER_TYPE_UNI:
+            {
+            }
+            break;
+        case BCMBAL_TM_SCHED_OWNER_TYPE_VIRTUAL:
+            {
+            }
+            break;
+        case BCMBAL_TM_SCHED_OWNER_TYPE_UNDEFINED:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_tm_sched_parent_set_default(bcmbal_tm_sched_parent *this)
+{
+    this->presence_mask = (bcmbal_tm_sched_parent_id) 0;
+    this->sched_id = (bcmbal_tm_sched_id) 0;
+    this->priority = (bcmbal_tm_priority) 0;
+    this->weight = (bcmbal_tm_weight) 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_parent_pack(const bcmbal_tm_sched_parent *this, bcmbal_buf *buf)
+{
+    if (!bcmbal_tm_sched_parent_id_pack(this->presence_mask, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0001) == 0x0001))
+    {
+        if (!bcmbal_buf_write_u32(buf, (uint32_t) this->sched_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0002) == 0x0002))
+    {
+        if (!bcmbal_buf_write_u8(buf, (uint8_t) this->priority))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0004) == 0x0004))
+    {
+        if (!bcmbal_buf_write_u8(buf, (uint8_t) this->weight))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_tm_sched_parent_get_packed_length(const bcmbal_tm_sched_parent *this)
+{
+    uint32_t count = 8;
+    if ((((uint64_t) this->presence_mask & 0x0001) == 0x0001))
+    {
+        count += 4;
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0002) == 0x0002))
+    {
+        count += 1;
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0004) == 0x0004))
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_parent_unpack(bcmbal_tm_sched_parent *this, bcmbal_buf *buf, void **extra_mem)
+{
+    if (!bcmbal_tm_sched_parent_id_unpack(&this->presence_mask, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0001) == 0x0001))
+    {
+        if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->sched_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0002) == 0x0002))
+    {
+        if (!bcmbal_buf_read_u8(buf, (uint8_t *) &this->priority))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0004) == 0x0004))
+    {
+        if (!bcmbal_buf_read_u8(buf, (uint8_t *) &this->weight))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_parent_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+    bcmbal_tm_sched_parent_id presence_mask;
+    if (!bcmbal_tm_sched_parent_id_unpack(&presence_mask, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((((uint64_t) presence_mask & 0x0001) == 0x0001))
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) presence_mask & 0x0002) == 0x0002))
+    {
+        if (!bcmbal_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) presence_mask & 0x0004) == 0x0004))
+    {
+        if (!bcmbal_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_parent_bounds_check(const bcmbal_tm_sched_parent *this)
+{
+    if ((this->presence_mask & 0xFFFFFFFFFFFFFFF8ULL) != 0)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_tm_shaping_set_default(bcmbal_tm_shaping *this)
+{
+    this->presence_mask = (bcmbal_tm_shaping_id) 0;
+    this->sbr = 0;
+    this->pbr = 0;
+    this->burst = 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_shaping_pack(const bcmbal_tm_shaping *this, bcmbal_buf *buf)
+{
+    if (!bcmbal_tm_shaping_id_pack(this->presence_mask, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0001) == 0x0001))
+    {
+        if (!bcmbal_buf_write_u32(buf, this->sbr))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0002) == 0x0002))
+    {
+        if (!bcmbal_buf_write_u32(buf, this->pbr))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0004) == 0x0004))
+    {
+        if (!bcmbal_buf_write_u32(buf, this->burst))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_tm_shaping_get_packed_length(const bcmbal_tm_shaping *this)
+{
+    uint32_t count = 8;
+    if ((((uint64_t) this->presence_mask & 0x0001) == 0x0001))
+    {
+        count += 4;
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0002) == 0x0002))
+    {
+        count += 4;
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0004) == 0x0004))
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_shaping_unpack(bcmbal_tm_shaping *this, bcmbal_buf *buf, void **extra_mem)
+{
+    if (!bcmbal_tm_shaping_id_unpack(&this->presence_mask, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0001) == 0x0001))
+    {
+        if (!bcmbal_buf_read_u32(buf, &this->sbr))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0002) == 0x0002))
+    {
+        if (!bcmbal_buf_read_u32(buf, &this->pbr))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0004) == 0x0004))
+    {
+        if (!bcmbal_buf_read_u32(buf, &this->burst))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_shaping_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+    bcmbal_tm_shaping_id presence_mask;
+    if (!bcmbal_tm_shaping_id_unpack(&presence_mask, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((((uint64_t) presence_mask & 0x0001) == 0x0001))
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) presence_mask & 0x0002) == 0x0002))
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) presence_mask & 0x0004) == 0x0004))
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_shaping_bounds_check(const bcmbal_tm_shaping *this)
+{
+    if ((this->presence_mask & 0xFFFFFFFFFFFFFFF8ULL) != 0)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_tm_tcont_sla_set_default(bcmbal_tm_tcont_sla *this)
+{
+    this->presence_mask = (bcmbal_tm_tcont_sla_id) 0;
+    this->extra_bw_elig = BCMBAL_EXTRA_BW_ELIGIBILITY_TYPE_NONE;
+    this->nrt_cbr = 0;
+    this->rt_cbr = 0;
+    this->rt_profile = 0;
+    this->nrt_profile = 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_tcont_sla_pack(const bcmbal_tm_tcont_sla *this, bcmbal_buf *buf)
+{
+    if (!bcmbal_tm_tcont_sla_id_pack(this->presence_mask, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0001) == 0x0001))
+    {
+        if (!bcmbal_extra_bw_eligibility_type_pack(this->extra_bw_elig, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0002) == 0x0002))
+    {
+        if (!bcmbal_buf_write_u8(buf, this->nrt_cbr))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0004) == 0x0004))
+    {
+        if (!bcmbal_buf_write_u8(buf, this->rt_cbr))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0008) == 0x0008))
+    {
+        if (!bcmbal_buf_write_u8(buf, this->rt_profile))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0010) == 0x0010))
+    {
+        if (!bcmbal_buf_write_u8(buf, this->nrt_profile))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_tm_tcont_sla_get_packed_length(const bcmbal_tm_tcont_sla *this)
+{
+    uint32_t count = 8;
+    if ((((uint64_t) this->presence_mask & 0x0001) == 0x0001))
+    {
+        count += 1;
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0002) == 0x0002))
+    {
+        count += 1;
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0004) == 0x0004))
+    {
+        count += 1;
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0008) == 0x0008))
+    {
+        count += 1;
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0010) == 0x0010))
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_tcont_sla_unpack(bcmbal_tm_tcont_sla *this, bcmbal_buf *buf, void **extra_mem)
+{
+    if (!bcmbal_tm_tcont_sla_id_unpack(&this->presence_mask, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0001) == 0x0001))
+    {
+        if (!bcmbal_extra_bw_eligibility_type_unpack(&this->extra_bw_elig, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0002) == 0x0002))
+    {
+        if (!bcmbal_buf_read_u8(buf, &this->nrt_cbr))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0004) == 0x0004))
+    {
+        if (!bcmbal_buf_read_u8(buf, &this->rt_cbr))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0008) == 0x0008))
+    {
+        if (!bcmbal_buf_read_u8(buf, &this->rt_profile))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0010) == 0x0010))
+    {
+        if (!bcmbal_buf_read_u8(buf, &this->nrt_profile))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_tcont_sla_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+    bcmbal_tm_tcont_sla_id presence_mask;
+    if (!bcmbal_tm_tcont_sla_id_unpack(&presence_mask, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((((uint64_t) presence_mask & 0x0001) == 0x0001))
+    {
+        if (!bcmbal_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) presence_mask & 0x0002) == 0x0002))
+    {
+        if (!bcmbal_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) presence_mask & 0x0004) == 0x0004))
+    {
+        if (!bcmbal_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) presence_mask & 0x0008) == 0x0008))
+    {
+        if (!bcmbal_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) presence_mask & 0x0010) == 0x0010))
+    {
+        if (!bcmbal_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_tcont_sla_bounds_check(const bcmbal_tm_tcont_sla *this)
+{
+    if ((this->presence_mask & 0xFFFFFFFFFFFFFFE0ULL) != 0)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((((uint64_t) this->presence_mask & 0x0001) == 0x0001))
+    {
+        switch (this->extra_bw_elig)
+        {
+            case BCMBAL_EXTRA_BW_ELIGIBILITY_TYPE_NONE:
+                break;
+            case BCMBAL_EXTRA_BW_ELIGIBILITY_TYPE_NOT_ASSURED:
+                break;
+            case BCMBAL_EXTRA_BW_ELIGIBILITY_TYPE_BEST_EFFORT:
+                break;
+            default:
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_u8_list_u32_set_default(bcmbal_u8_list_u32 *this)
+{
+    this->len = 0;
+    this->val = NULL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_u8_list_u32_pack(const bcmbal_u8_list_u32 *this, bcmbal_buf *buf)
+{
+    if (!bcmbal_buf_write_u32(buf, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmbal_u8_list_u32\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmbal_buf_write(buf, this->val, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_u8_list_u32_get_packed_length(const bcmbal_u8_list_u32 *this)
+{
+    return 4 + this->len;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_u8_list_u32_unpack(bcmbal_u8_list_u32 *this, bcmbal_buf *buf, void **extra_mem)
+{
+    if (!bcmbal_buf_read_u32(buf, &this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmbal_u8_list_u32\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->val = (uint8_t *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->len * sizeof(uint8_t));
+        }
+    }
+
+    if (!bcmbal_buf_read(buf, this->val, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_u8_list_u32_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+    uint32_t len;
+    if (!bcmbal_buf_read_u32(packed, &len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * len);
+    if (!bcmbal_buf_skip(packed, len * 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_u8_list_u32_bounds_check(const bcmbal_u8_list_u32 *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_access_terminal_key_set_default(bcmbal_access_terminal_key *this, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_KEY_ID_ACCESS_TERM_ID)) != 0)
+    {
+        this->access_term_id = (bcmbal_access_id) 1;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_access_terminal_key_pack(const bcmbal_access_terminal_key *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_KEY_ID_ACCESS_TERM_ID)) != 0)
+    {
+        if (!bcmbal_buf_write_u32(buf, (uint32_t) this->access_term_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_access_terminal_key_get_packed_length(const bcmbal_access_terminal_key *this, bcmbal_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_KEY_ID_ACCESS_TERM_ID)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_access_terminal_key_unpack(bcmbal_access_terminal_key *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_KEY_ID_ACCESS_TERM_ID)) != 0)
+    {
+        if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->access_term_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_access_terminal_key_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_KEY_ID_ACCESS_TERM_ID)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_access_terminal_key_bounds_check(const bcmbal_access_terminal_key *this, bcmbal_presence_mask fields_present, bcmbal_access_terminal_key_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_KEY_ID_ACCESS_TERM_ID)) != 0)
+    {
+        if (this->access_term_id < (bcmbal_access_id) 1)
+        {
+            *failed_prop = BCMBAL_ACCESS_TERMINAL_KEY_ID_ACCESS_TERM_ID;
+            return BCMOS_FALSE;
+        }
+
+        if (this->access_term_id > (bcmbal_access_id) 1)
+        {
+            *failed_prop = BCMBAL_ACCESS_TERMINAL_KEY_ID_ACCESS_TERM_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_access_terminal_cfg_data_set_default(bcmbal_access_terminal_cfg_data *this, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_CFG_ID_ADMIN_STATE)) != 0)
+    {
+        this->admin_state = (bcmbal_state) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_CFG_ID_OPER_STATUS)) != 0)
+    {
+        this->oper_status = (bcmbal_status) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_CFG_ID_IWF_MODE)) != 0)
+    {
+        this->iwf_mode = BCMBAL_IWF_MODE_DIRECT_MAPPING;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_access_terminal_cfg_data_pack(const bcmbal_access_terminal_cfg_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_CFG_ID_ADMIN_STATE)) != 0)
+    {
+        if (!bcmbal_state_pack(this->admin_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_CFG_ID_OPER_STATUS)) != 0)
+    {
+        if (!bcmbal_status_pack(this->oper_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_CFG_ID_IWF_MODE)) != 0)
+    {
+        if (!bcmbal_iwf_mode_pack(this->iwf_mode, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_access_terminal_cfg_data_get_packed_length(const bcmbal_access_terminal_cfg_data *this, bcmbal_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_CFG_ID_ADMIN_STATE)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_CFG_ID_OPER_STATUS)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_CFG_ID_IWF_MODE)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_access_terminal_cfg_data_unpack(bcmbal_access_terminal_cfg_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_CFG_ID_ADMIN_STATE)) != 0)
+    {
+        if (!bcmbal_state_unpack(&this->admin_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_CFG_ID_OPER_STATUS)) != 0)
+    {
+        if (!bcmbal_status_unpack(&this->oper_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_CFG_ID_IWF_MODE)) != 0)
+    {
+        if (!bcmbal_iwf_mode_unpack(&this->iwf_mode, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_access_terminal_cfg_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_CFG_ID_ADMIN_STATE)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_CFG_ID_OPER_STATUS)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_CFG_ID_IWF_MODE)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_access_terminal_cfg_data_bounds_check(const bcmbal_access_terminal_cfg_data *this, bcmbal_presence_mask fields_present, bcmbal_access_terminal_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_CFG_ID_ADMIN_STATE)) != 0)
+    {
+        switch (this->admin_state)
+        {
+            case BCMBAL_STATE_UP:
+                break;
+            case BCMBAL_STATE_DOWN:
+                break;
+            case BCMBAL_STATE_TESTING:
+                break;
+            default:
+                *failed_prop = BCMBAL_ACCESS_TERMINAL_CFG_ID_ADMIN_STATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_CFG_ID_OPER_STATUS)) != 0)
+    {
+        switch (this->oper_status)
+        {
+            case BCMBAL_STATUS_UP:
+                break;
+            case BCMBAL_STATUS_DOWN:
+                break;
+            case BCMBAL_STATUS_TESTING:
+                break;
+            case BCMBAL_STATUS_NOT_PRESENT:
+                break;
+            case BCMBAL_STATUS_LOWER_LAYER_DOWN:
+                break;
+            case BCMBAL_STATUS_UNKNOWN:
+                break;
+            default:
+                *failed_prop = BCMBAL_ACCESS_TERMINAL_CFG_ID_OPER_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_CFG_ID_IWF_MODE)) != 0)
+    {
+        switch (this->iwf_mode)
+        {
+            case BCMBAL_IWF_MODE_DIRECT_MAPPING:
+                break;
+            case BCMBAL_IWF_MODE_PER_FLOW:
+                break;
+            default:
+                *failed_prop = BCMBAL_ACCESS_TERMINAL_CFG_ID_IWF_MODE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_access_terminal_ind_data_set_default(bcmbal_access_terminal_ind_data *this, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_IND_ID_ADMIN_STATE)) != 0)
+    {
+        this->admin_state = (bcmbal_state) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_IND_ID_OPER_STATUS)) != 0)
+    {
+        this->oper_status = (bcmbal_status) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_IND_ID_IWF_MODE)) != 0)
+    {
+        this->iwf_mode = BCMBAL_IWF_MODE_DIRECT_MAPPING;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_access_terminal_ind_data_pack(const bcmbal_access_terminal_ind_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_IND_ID_ADMIN_STATE)) != 0)
+    {
+        if (!bcmbal_state_pack(this->admin_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_IND_ID_OPER_STATUS)) != 0)
+    {
+        if (!bcmbal_status_pack(this->oper_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_IND_ID_IWF_MODE)) != 0)
+    {
+        if (!bcmbal_iwf_mode_pack(this->iwf_mode, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_access_terminal_ind_data_get_packed_length(const bcmbal_access_terminal_ind_data *this, bcmbal_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_IND_ID_ADMIN_STATE)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_IND_ID_OPER_STATUS)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_IND_ID_IWF_MODE)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_access_terminal_ind_data_unpack(bcmbal_access_terminal_ind_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_IND_ID_ADMIN_STATE)) != 0)
+    {
+        if (!bcmbal_state_unpack(&this->admin_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_IND_ID_OPER_STATUS)) != 0)
+    {
+        if (!bcmbal_status_unpack(&this->oper_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_IND_ID_IWF_MODE)) != 0)
+    {
+        if (!bcmbal_iwf_mode_unpack(&this->iwf_mode, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_access_terminal_ind_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_IND_ID_ADMIN_STATE)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_IND_ID_OPER_STATUS)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_IND_ID_IWF_MODE)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_access_terminal_ind_data_bounds_check(const bcmbal_access_terminal_ind_data *this, bcmbal_presence_mask fields_present, bcmbal_access_terminal_ind_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_IND_ID_ADMIN_STATE)) != 0)
+    {
+        switch (this->admin_state)
+        {
+            case BCMBAL_STATE_UP:
+                break;
+            case BCMBAL_STATE_DOWN:
+                break;
+            case BCMBAL_STATE_TESTING:
+                break;
+            default:
+                *failed_prop = BCMBAL_ACCESS_TERMINAL_IND_ID_ADMIN_STATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_IND_ID_OPER_STATUS)) != 0)
+    {
+        switch (this->oper_status)
+        {
+            case BCMBAL_STATUS_UP:
+                break;
+            case BCMBAL_STATUS_DOWN:
+                break;
+            case BCMBAL_STATUS_TESTING:
+                break;
+            case BCMBAL_STATUS_NOT_PRESENT:
+                break;
+            case BCMBAL_STATUS_LOWER_LAYER_DOWN:
+                break;
+            case BCMBAL_STATUS_UNKNOWN:
+                break;
+            default:
+                *failed_prop = BCMBAL_ACCESS_TERMINAL_IND_ID_OPER_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_IND_ID_IWF_MODE)) != 0)
+    {
+        switch (this->iwf_mode)
+        {
+            case BCMBAL_IWF_MODE_DIRECT_MAPPING:
+                break;
+            case BCMBAL_IWF_MODE_PER_FLOW:
+                break;
+            default:
+                *failed_prop = BCMBAL_ACCESS_TERMINAL_IND_ID_IWF_MODE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_flow_key_set_default(bcmbal_flow_key *this, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_FLOW_KEY_ID_FLOW_ID)) != 0)
+    {
+        this->flow_id = (bcmbal_flow_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_KEY_ID_FLOW_TYPE)) != 0)
+    {
+        this->flow_type = (bcmbal_flow_type) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_key_pack(const bcmbal_flow_key *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_FLOW_KEY_ID_FLOW_ID)) != 0)
+    {
+        if (!bcmbal_buf_write_u32(buf, (uint32_t) this->flow_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_KEY_ID_FLOW_TYPE)) != 0)
+    {
+        if (!bcmbal_flow_type_pack(this->flow_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_flow_key_get_packed_length(const bcmbal_flow_key *this, bcmbal_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMBAL_FLOW_KEY_ID_FLOW_ID)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_KEY_ID_FLOW_TYPE)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_key_unpack(bcmbal_flow_key *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_FLOW_KEY_ID_FLOW_ID)) != 0)
+    {
+        if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->flow_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_KEY_ID_FLOW_TYPE)) != 0)
+    {
+        if (!bcmbal_flow_type_unpack(&this->flow_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_key_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_FLOW_KEY_ID_FLOW_ID)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_KEY_ID_FLOW_TYPE)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_key_bounds_check(const bcmbal_flow_key *this, bcmbal_presence_mask fields_present, bcmbal_flow_key_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMBAL_FLOW_KEY_ID_FLOW_TYPE)) != 0)
+    {
+        switch (this->flow_type)
+        {
+            case BCMBAL_FLOW_TYPE_UPSTREAM:
+                break;
+            case BCMBAL_FLOW_TYPE_DOWNSTREAM:
+                break;
+            case BCMBAL_FLOW_TYPE_BROADCAST:
+                break;
+            case BCMBAL_FLOW_TYPE_MULTICAST:
+                break;
+            default:
+                *failed_prop = BCMBAL_FLOW_KEY_ID_FLOW_TYPE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_flow_cfg_data_set_default(bcmbal_flow_cfg_data *this, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_ADMIN_STATE)) != 0)
+    {
+        this->admin_state = (bcmbal_state) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_OPER_STATUS)) != 0)
+    {
+        this->oper_status = (bcmbal_status) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_ACCESS_INT_ID)) != 0)
+    {
+        this->access_int_id = (bcmbal_intf_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_NETWORK_INT_ID)) != 0)
+    {
+        this->network_int_id = (bcmbal_intf_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_SUB_TERM_ID)) != 0)
+    {
+        this->sub_term_id = (bcmbal_sub_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_SUB_TERM_UNI_IDX)) != 0)
+    {
+        this->sub_term_uni_idx = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_SVC_PORT_ID)) != 0)
+    {
+        this->svc_port_id = (bcmbal_service_port_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_AGG_PORT_ID)) != 0)
+    {
+        this->agg_port_id = (bcmbal_aggregation_port_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_RESOLVE_MAC)) != 0)
+    {
+        this->resolve_mac = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_CLASSIFIER)) != 0)
+    {
+        this->classifier.presence_mask = (bcmbal_classifier_id) 0;
+        this->classifier.o_tpid = 0;
+        this->classifier.o_vid = 0;
+        this->classifier.i_tpid = 0;
+        this->classifier.i_vid = 0;
+        this->classifier.o_pbits = 0;
+        this->classifier.i_pbits = 0;
+        this->classifier.ether_type = 0;
+        bcmos_mac_address_init(&this->classifier.dst_mac);
+        bcmos_mac_address_init(&this->classifier.src_mac);
+        this->classifier.ip_proto = 0;
+        bcmos_ipv4_address_init(&this->classifier.dst_ip);
+        bcmos_ipv4_address_init(&this->classifier.src_ip);
+        this->classifier.src_port = 0;
+        this->classifier.dst_port = 0;
+        this->classifier.pkt_tag_type = (bcmbal_pkt_tag_type) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_ACTION)) != 0)
+    {
+        this->action.presence_mask = (bcmbal_action_id) 0;
+        this->action.cmds_bitmask = (bcmbal_action_cmd_id) 0;
+        this->action.o_vid = 0;
+        this->action.o_pbits = 0;
+        this->action.o_tpid = 0;
+        this->action.i_vid = 0;
+        this->action.i_pbits = 0;
+        this->action.i_tpid = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_SLA)) != 0)
+    {
+        this->sla.presence_mask = (bcmbal_sla_id) 0;
+        this->sla.min_rate = 0;
+        this->sla.max_rate = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_COOKIE)) != 0)
+    {
+        this->cookie = (bcmbal_cookie) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_PRIORITY)) != 0)
+    {
+        this->priority = 1;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_GROUP_ID)) != 0)
+    {
+        this->group_id = (bcmbal_group_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_QUEUE)) != 0)
+    {
+        this->queue.sched_id = (bcmbal_tm_sched_id) 0;
+        this->queue.queue_id = (bcmbal_tm_queue_id) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_cfg_data_pack(const bcmbal_flow_cfg_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_ADMIN_STATE)) != 0)
+    {
+        if (!bcmbal_state_pack(this->admin_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_OPER_STATUS)) != 0)
+    {
+        if (!bcmbal_status_pack(this->oper_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_ACCESS_INT_ID)) != 0)
+    {
+        if (!bcmbal_buf_write_u32(buf, (uint32_t) this->access_int_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_NETWORK_INT_ID)) != 0)
+    {
+        if (!bcmbal_buf_write_u32(buf, (uint32_t) this->network_int_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_SUB_TERM_ID)) != 0)
+    {
+        if (!bcmbal_buf_write_u32(buf, (uint32_t) this->sub_term_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_SUB_TERM_UNI_IDX)) != 0)
+    {
+        if (!bcmbal_buf_write_u8(buf, this->sub_term_uni_idx))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_SVC_PORT_ID)) != 0)
+    {
+        if (!bcmbal_buf_write_u16(buf, (uint16_t) this->svc_port_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_AGG_PORT_ID)) != 0)
+    {
+        if (!bcmbal_buf_write_u16(buf, (uint16_t) this->agg_port_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_RESOLVE_MAC)) != 0)
+    {
+        if (!bcmbal_buf_write_bool(buf, this->resolve_mac))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_CLASSIFIER)) != 0)
+    {
+        if (!bcmbal_classifier_pack(&this->classifier, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_ACTION)) != 0)
+    {
+        if (!bcmbal_action_pack(&this->action, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_SLA)) != 0)
+    {
+        if (!bcmbal_sla_pack(&this->sla, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_COOKIE)) != 0)
+    {
+        if (!bcmbal_buf_write_u64(buf, (uint64_t) this->cookie))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_PRIORITY)) != 0)
+    {
+        if (!bcmbal_buf_write_u16(buf, this->priority))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_GROUP_ID)) != 0)
+    {
+        if (!bcmbal_buf_write_u32(buf, (uint32_t) this->group_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_QUEUE)) != 0)
+    {
+        if (!bcmbal_tm_queue_ref_pack(&this->queue, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_flow_cfg_data_get_packed_length(const bcmbal_flow_cfg_data *this, bcmbal_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_ADMIN_STATE)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_OPER_STATUS)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_ACCESS_INT_ID)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_NETWORK_INT_ID)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_SUB_TERM_ID)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_SUB_TERM_UNI_IDX)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_SVC_PORT_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_AGG_PORT_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_RESOLVE_MAC)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_CLASSIFIER)) != 0)
+    {
+        count += bcmbal_classifier_get_packed_length(&this->classifier);
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_ACTION)) != 0)
+    {
+        count += bcmbal_action_get_packed_length(&this->action);
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_SLA)) != 0)
+    {
+        count += bcmbal_sla_get_packed_length(&this->sla);
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_COOKIE)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_PRIORITY)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_GROUP_ID)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_QUEUE)) != 0)
+    {
+        count += 5;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_cfg_data_unpack(bcmbal_flow_cfg_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_ADMIN_STATE)) != 0)
+    {
+        if (!bcmbal_state_unpack(&this->admin_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_OPER_STATUS)) != 0)
+    {
+        if (!bcmbal_status_unpack(&this->oper_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_ACCESS_INT_ID)) != 0)
+    {
+        if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->access_int_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_NETWORK_INT_ID)) != 0)
+    {
+        if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->network_int_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_SUB_TERM_ID)) != 0)
+    {
+        if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->sub_term_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_SUB_TERM_UNI_IDX)) != 0)
+    {
+        if (!bcmbal_buf_read_u8(buf, &this->sub_term_uni_idx))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_SVC_PORT_ID)) != 0)
+    {
+        if (!bcmbal_buf_read_u16(buf, (uint16_t *) &this->svc_port_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_AGG_PORT_ID)) != 0)
+    {
+        if (!bcmbal_buf_read_u16(buf, (uint16_t *) &this->agg_port_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_RESOLVE_MAC)) != 0)
+    {
+        if (!bcmbal_buf_read_bool(buf, &this->resolve_mac))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_CLASSIFIER)) != 0)
+    {
+        if (!bcmbal_classifier_unpack(&this->classifier, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_ACTION)) != 0)
+    {
+        if (!bcmbal_action_unpack(&this->action, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_SLA)) != 0)
+    {
+        if (!bcmbal_sla_unpack(&this->sla, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_COOKIE)) != 0)
+    {
+        if (!bcmbal_buf_read_u64(buf, (uint64_t *) &this->cookie))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_PRIORITY)) != 0)
+    {
+        if (!bcmbal_buf_read_u16(buf, &this->priority))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_GROUP_ID)) != 0)
+    {
+        if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->group_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_QUEUE)) != 0)
+    {
+        if (!bcmbal_tm_queue_ref_unpack(&this->queue, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_cfg_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_ADMIN_STATE)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_OPER_STATUS)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_ACCESS_INT_ID)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_NETWORK_INT_ID)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_SUB_TERM_ID)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_SUB_TERM_UNI_IDX)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_SVC_PORT_ID)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_AGG_PORT_ID)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_RESOLVE_MAC)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_CLASSIFIER)) != 0)
+    {
+        if (!bcmbal_classifier_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_ACTION)) != 0)
+    {
+        if (!bcmbal_action_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_SLA)) != 0)
+    {
+        if (!bcmbal_sla_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_COOKIE)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_PRIORITY)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_GROUP_ID)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_QUEUE)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 5))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_cfg_data_bounds_check(const bcmbal_flow_cfg_data *this, bcmbal_presence_mask fields_present, bcmbal_flow_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_ADMIN_STATE)) != 0)
+    {
+        switch (this->admin_state)
+        {
+            case BCMBAL_STATE_UP:
+                break;
+            case BCMBAL_STATE_DOWN:
+                break;
+            case BCMBAL_STATE_TESTING:
+                break;
+            default:
+                *failed_prop = BCMBAL_FLOW_CFG_ID_ADMIN_STATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_OPER_STATUS)) != 0)
+    {
+        switch (this->oper_status)
+        {
+            case BCMBAL_STATUS_UP:
+                break;
+            case BCMBAL_STATUS_DOWN:
+                break;
+            case BCMBAL_STATUS_TESTING:
+                break;
+            case BCMBAL_STATUS_NOT_PRESENT:
+                break;
+            case BCMBAL_STATUS_LOWER_LAYER_DOWN:
+                break;
+            case BCMBAL_STATUS_UNKNOWN:
+                break;
+            default:
+                *failed_prop = BCMBAL_FLOW_CFG_ID_OPER_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_CLASSIFIER)) != 0)
+    {
+        if (!bcmbal_classifier_bounds_check(&this->classifier))
+        {
+            *failed_prop = BCMBAL_FLOW_CFG_ID_CLASSIFIER;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_ACTION)) != 0)
+    {
+        if (!bcmbal_action_bounds_check(&this->action))
+        {
+            *failed_prop = BCMBAL_FLOW_CFG_ID_ACTION;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_SLA)) != 0)
+    {
+        if (!bcmbal_sla_bounds_check(&this->sla))
+        {
+            *failed_prop = BCMBAL_FLOW_CFG_ID_SLA;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_PRIORITY)) != 0)
+    {
+        if (this->priority < 1)
+        {
+            *failed_prop = BCMBAL_FLOW_CFG_ID_PRIORITY;
+            return BCMOS_FALSE;
+        }
+
+        if (this->priority > 255)
+        {
+            *failed_prop = BCMBAL_FLOW_CFG_ID_PRIORITY;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_QUEUE)) != 0)
+    {
+        if (!bcmbal_tm_queue_ref_bounds_check(&this->queue))
+        {
+            *failed_prop = BCMBAL_FLOW_CFG_ID_QUEUE;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_flow_stat_data_set_default(bcmbal_flow_stat_data *this, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_FLOW_STAT_ID_RX_PACKETS)) != 0)
+    {
+        this->rx_packets = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_STAT_ID_RX_BYTES)) != 0)
+    {
+        this->rx_bytes = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_STAT_ID_TX_PACKETS)) != 0)
+    {
+        this->tx_packets = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_STAT_ID_TX_BYTES)) != 0)
+    {
+        this->tx_bytes = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_stat_data_pack(const bcmbal_flow_stat_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_FLOW_STAT_ID_RX_PACKETS)) != 0)
+    {
+        if (!bcmbal_buf_write_u64(buf, this->rx_packets))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_STAT_ID_RX_BYTES)) != 0)
+    {
+        if (!bcmbal_buf_write_u64(buf, this->rx_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_STAT_ID_TX_PACKETS)) != 0)
+    {
+        if (!bcmbal_buf_write_u64(buf, this->tx_packets))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_STAT_ID_TX_BYTES)) != 0)
+    {
+        if (!bcmbal_buf_write_u64(buf, this->tx_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_flow_stat_data_get_packed_length(const bcmbal_flow_stat_data *this, bcmbal_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMBAL_FLOW_STAT_ID_RX_PACKETS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_STAT_ID_RX_BYTES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_STAT_ID_TX_PACKETS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_STAT_ID_TX_BYTES)) != 0)
+    {
+        count += 8;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_stat_data_unpack(bcmbal_flow_stat_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_FLOW_STAT_ID_RX_PACKETS)) != 0)
+    {
+        if (!bcmbal_buf_read_u64(buf, &this->rx_packets))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_STAT_ID_RX_BYTES)) != 0)
+    {
+        if (!bcmbal_buf_read_u64(buf, &this->rx_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_STAT_ID_TX_PACKETS)) != 0)
+    {
+        if (!bcmbal_buf_read_u64(buf, &this->tx_packets))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_STAT_ID_TX_BYTES)) != 0)
+    {
+        if (!bcmbal_buf_read_u64(buf, &this->tx_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_stat_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_FLOW_STAT_ID_RX_PACKETS)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_STAT_ID_RX_BYTES)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_STAT_ID_TX_PACKETS)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_STAT_ID_TX_BYTES)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_stat_data_bounds_check(const bcmbal_flow_stat_data *this, bcmbal_presence_mask fields_present, bcmbal_flow_stat_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_flow_ind_data_set_default(bcmbal_flow_ind_data *this, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_ADMIN_STATE)) != 0)
+    {
+        this->admin_state = (bcmbal_state) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_OPER_STATUS)) != 0)
+    {
+        this->oper_status = (bcmbal_status) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_ACCESS_INT_ID)) != 0)
+    {
+        this->access_int_id = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_NETWORK_INT_ID)) != 0)
+    {
+        this->network_int_id = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_SUB_TERM_ID)) != 0)
+    {
+        this->sub_term_id = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_SVC_PORT_ID)) != 0)
+    {
+        this->svc_port_id = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_AGG_PORT_ID)) != 0)
+    {
+        this->agg_port_id = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_RESOLVE_MAC)) != 0)
+    {
+        this->resolve_mac = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_BASE_TC_ID)) != 0)
+    {
+        this->base_tc_id = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_CLASSIFIER)) != 0)
+    {
+        this->classifier.presence_mask = (bcmbal_classifier_id) 0;
+        this->classifier.o_tpid = 0;
+        this->classifier.o_vid = 0;
+        this->classifier.i_tpid = 0;
+        this->classifier.i_vid = 0;
+        this->classifier.o_pbits = 0;
+        this->classifier.i_pbits = 0;
+        this->classifier.ether_type = 0;
+        bcmos_mac_address_init(&this->classifier.dst_mac);
+        bcmos_mac_address_init(&this->classifier.src_mac);
+        this->classifier.ip_proto = 0;
+        bcmos_ipv4_address_init(&this->classifier.dst_ip);
+        bcmos_ipv4_address_init(&this->classifier.src_ip);
+        this->classifier.src_port = 0;
+        this->classifier.dst_port = 0;
+        this->classifier.pkt_tag_type = (bcmbal_pkt_tag_type) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_ACTION)) != 0)
+    {
+        this->action.presence_mask = (bcmbal_action_id) 0;
+        this->action.cmds_bitmask = (bcmbal_action_cmd_id) 0;
+        this->action.o_vid = 0;
+        this->action.o_pbits = 0;
+        this->action.o_tpid = 0;
+        this->action.i_vid = 0;
+        this->action.i_pbits = 0;
+        this->action.i_tpid = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_SLA)) != 0)
+    {
+        this->sla.presence_mask = (bcmbal_sla_id) 0;
+        this->sla.min_rate = 0;
+        this->sla.max_rate = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_COOKIE)) != 0)
+    {
+        this->cookie = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_PRIORITY)) != 0)
+    {
+        this->priority = 1;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_ind_data_pack(const bcmbal_flow_ind_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_ADMIN_STATE)) != 0)
+    {
+        if (!bcmbal_state_pack(this->admin_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_OPER_STATUS)) != 0)
+    {
+        if (!bcmbal_status_pack(this->oper_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_ACCESS_INT_ID)) != 0)
+    {
+        if (!bcmbal_buf_write_u16(buf, this->access_int_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_NETWORK_INT_ID)) != 0)
+    {
+        if (!bcmbal_buf_write_u16(buf, this->network_int_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_SUB_TERM_ID)) != 0)
+    {
+        if (!bcmbal_buf_write_u32(buf, this->sub_term_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_SVC_PORT_ID)) != 0)
+    {
+        if (!bcmbal_buf_write_u16(buf, this->svc_port_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_AGG_PORT_ID)) != 0)
+    {
+        if (!bcmbal_buf_write_u16(buf, this->agg_port_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_RESOLVE_MAC)) != 0)
+    {
+        if (!bcmbal_buf_write_bool(buf, this->resolve_mac))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_BASE_TC_ID)) != 0)
+    {
+        if (!bcmbal_buf_write_u16(buf, this->base_tc_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_CLASSIFIER)) != 0)
+    {
+        if (!bcmbal_classifier_pack(&this->classifier, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_ACTION)) != 0)
+    {
+        if (!bcmbal_action_pack(&this->action, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_SLA)) != 0)
+    {
+        if (!bcmbal_sla_pack(&this->sla, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_COOKIE)) != 0)
+    {
+        if (!bcmbal_buf_write_u32(buf, this->cookie))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_PRIORITY)) != 0)
+    {
+        if (!bcmbal_buf_write_u16(buf, this->priority))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_flow_ind_data_get_packed_length(const bcmbal_flow_ind_data *this, bcmbal_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_ADMIN_STATE)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_OPER_STATUS)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_ACCESS_INT_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_NETWORK_INT_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_SUB_TERM_ID)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_SVC_PORT_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_AGG_PORT_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_RESOLVE_MAC)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_BASE_TC_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_CLASSIFIER)) != 0)
+    {
+        count += bcmbal_classifier_get_packed_length(&this->classifier);
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_ACTION)) != 0)
+    {
+        count += bcmbal_action_get_packed_length(&this->action);
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_SLA)) != 0)
+    {
+        count += bcmbal_sla_get_packed_length(&this->sla);
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_COOKIE)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_PRIORITY)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_ind_data_unpack(bcmbal_flow_ind_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_ADMIN_STATE)) != 0)
+    {
+        if (!bcmbal_state_unpack(&this->admin_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_OPER_STATUS)) != 0)
+    {
+        if (!bcmbal_status_unpack(&this->oper_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_ACCESS_INT_ID)) != 0)
+    {
+        if (!bcmbal_buf_read_u16(buf, &this->access_int_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_NETWORK_INT_ID)) != 0)
+    {
+        if (!bcmbal_buf_read_u16(buf, &this->network_int_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_SUB_TERM_ID)) != 0)
+    {
+        if (!bcmbal_buf_read_u32(buf, &this->sub_term_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_SVC_PORT_ID)) != 0)
+    {
+        if (!bcmbal_buf_read_u16(buf, &this->svc_port_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_AGG_PORT_ID)) != 0)
+    {
+        if (!bcmbal_buf_read_u16(buf, &this->agg_port_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_RESOLVE_MAC)) != 0)
+    {
+        if (!bcmbal_buf_read_bool(buf, &this->resolve_mac))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_BASE_TC_ID)) != 0)
+    {
+        if (!bcmbal_buf_read_u16(buf, &this->base_tc_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_CLASSIFIER)) != 0)
+    {
+        if (!bcmbal_classifier_unpack(&this->classifier, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_ACTION)) != 0)
+    {
+        if (!bcmbal_action_unpack(&this->action, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_SLA)) != 0)
+    {
+        if (!bcmbal_sla_unpack(&this->sla, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_COOKIE)) != 0)
+    {
+        if (!bcmbal_buf_read_u32(buf, &this->cookie))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_PRIORITY)) != 0)
+    {
+        if (!bcmbal_buf_read_u16(buf, &this->priority))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_ind_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_ADMIN_STATE)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_OPER_STATUS)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_ACCESS_INT_ID)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_NETWORK_INT_ID)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_SUB_TERM_ID)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_SVC_PORT_ID)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_AGG_PORT_ID)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_RESOLVE_MAC)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_BASE_TC_ID)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_CLASSIFIER)) != 0)
+    {
+        if (!bcmbal_classifier_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_ACTION)) != 0)
+    {
+        if (!bcmbal_action_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_SLA)) != 0)
+    {
+        if (!bcmbal_sla_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_COOKIE)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_PRIORITY)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_ind_data_bounds_check(const bcmbal_flow_ind_data *this, bcmbal_presence_mask fields_present, bcmbal_flow_ind_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_ADMIN_STATE)) != 0)
+    {
+        switch (this->admin_state)
+        {
+            case BCMBAL_STATE_UP:
+                break;
+            case BCMBAL_STATE_DOWN:
+                break;
+            case BCMBAL_STATE_TESTING:
+                break;
+            default:
+                *failed_prop = BCMBAL_FLOW_IND_ID_ADMIN_STATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_OPER_STATUS)) != 0)
+    {
+        switch (this->oper_status)
+        {
+            case BCMBAL_STATUS_UP:
+                break;
+            case BCMBAL_STATUS_DOWN:
+                break;
+            case BCMBAL_STATUS_TESTING:
+                break;
+            case BCMBAL_STATUS_NOT_PRESENT:
+                break;
+            case BCMBAL_STATUS_LOWER_LAYER_DOWN:
+                break;
+            case BCMBAL_STATUS_UNKNOWN:
+                break;
+            default:
+                *failed_prop = BCMBAL_FLOW_IND_ID_OPER_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_CLASSIFIER)) != 0)
+    {
+        if (!bcmbal_classifier_bounds_check(&this->classifier))
+        {
+            *failed_prop = BCMBAL_FLOW_IND_ID_CLASSIFIER;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_ACTION)) != 0)
+    {
+        if (!bcmbal_action_bounds_check(&this->action))
+        {
+            *failed_prop = BCMBAL_FLOW_IND_ID_ACTION;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_SLA)) != 0)
+    {
+        if (!bcmbal_sla_bounds_check(&this->sla))
+        {
+            *failed_prop = BCMBAL_FLOW_IND_ID_SLA;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_PRIORITY)) != 0)
+    {
+        if (this->priority < 1)
+        {
+            *failed_prop = BCMBAL_FLOW_IND_ID_PRIORITY;
+            return BCMOS_FALSE;
+        }
+
+        if (this->priority > 255)
+        {
+            *failed_prop = BCMBAL_FLOW_IND_ID_PRIORITY;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_group_key_set_default(bcmbal_group_key *this, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_GROUP_KEY_ID_GROUP_ID)) != 0)
+    {
+        this->group_id = (bcmbal_group_id) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_key_pack(const bcmbal_group_key *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_GROUP_KEY_ID_GROUP_ID)) != 0)
+    {
+        if (!bcmbal_buf_write_u32(buf, (uint32_t) this->group_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_group_key_get_packed_length(const bcmbal_group_key *this, bcmbal_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMBAL_GROUP_KEY_ID_GROUP_ID)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_key_unpack(bcmbal_group_key *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_GROUP_KEY_ID_GROUP_ID)) != 0)
+    {
+        if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->group_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_key_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_GROUP_KEY_ID_GROUP_ID)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_key_bounds_check(const bcmbal_group_key *this, bcmbal_presence_mask fields_present, bcmbal_group_key_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_group_cfg_data_set_default(bcmbal_group_cfg_data *this, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_MEMBERS_CMD)) != 0)
+    {
+        this->members_cmd = (bcmbal_group_member_cmd) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_MEMBERS)) != 0)
+    {
+        this->members.len = 0;
+        this->members.val = NULL;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_COOKIE)) != 0)
+    {
+        this->cookie = (bcmbal_cookie) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_FLOWS)) != 0)
+    {
+        this->flows.len = 0;
+        this->flows.val = NULL;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_OWNER)) != 0)
+    {
+        this->owner = BCMBAL_GROUP_OWNER_NONE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_cfg_data_pack(const bcmbal_group_cfg_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_MEMBERS_CMD)) != 0)
+    {
+        if (!bcmbal_group_member_cmd_pack(this->members_cmd, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_MEMBERS)) != 0)
+    {
+        if (!bcmbal_group_member_info_list_u16_pack(&this->members, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_COOKIE)) != 0)
+    {
+        if (!bcmbal_buf_write_u64(buf, (uint64_t) this->cookie))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_FLOWS)) != 0)
+    {
+        if (!bcmbal_flow_id_list_u32_pack(&this->flows, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_OWNER)) != 0)
+    {
+        if (!bcmbal_group_owner_pack(this->owner, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_group_cfg_data_get_packed_length(const bcmbal_group_cfg_data *this, bcmbal_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_MEMBERS_CMD)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_MEMBERS)) != 0)
+    {
+        count += bcmbal_group_member_info_list_u16_get_packed_length(&this->members);
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_COOKIE)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_FLOWS)) != 0)
+    {
+        count += bcmbal_flow_id_list_u32_get_packed_length(&this->flows);
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_OWNER)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_cfg_data_unpack(bcmbal_group_cfg_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_MEMBERS_CMD)) != 0)
+    {
+        if (!bcmbal_group_member_cmd_unpack(&this->members_cmd, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_MEMBERS)) != 0)
+    {
+        if (!bcmbal_group_member_info_list_u16_unpack(&this->members, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_COOKIE)) != 0)
+    {
+        if (!bcmbal_buf_read_u64(buf, (uint64_t *) &this->cookie))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_FLOWS)) != 0)
+    {
+        if (!bcmbal_flow_id_list_u32_unpack(&this->flows, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_OWNER)) != 0)
+    {
+        if (!bcmbal_group_owner_unpack(&this->owner, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_cfg_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_MEMBERS_CMD)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_MEMBERS)) != 0)
+    {
+        if (!bcmbal_group_member_info_list_u16_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_COOKIE)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_FLOWS)) != 0)
+    {
+        if (!bcmbal_flow_id_list_u32_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_OWNER)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_cfg_data_bounds_check(const bcmbal_group_cfg_data *this, bcmbal_presence_mask fields_present, bcmbal_group_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_MEMBERS_CMD)) != 0)
+    {
+        switch (this->members_cmd)
+        {
+            case BCMBAL_GROUP_MEMBER_CMD_ADD_MEMBERS:
+                break;
+            case BCMBAL_GROUP_MEMBER_CMD_REM_MEMBERS:
+                break;
+            case BCMBAL_GROUP_MEMBER_CMD_SET_MEMBERS:
+                break;
+            default:
+                *failed_prop = BCMBAL_GROUP_CFG_ID_MEMBERS_CMD;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_MEMBERS)) != 0)
+    {
+        if (!bcmbal_group_member_info_list_u16_bounds_check(&this->members))
+        {
+            *failed_prop = BCMBAL_GROUP_CFG_ID_MEMBERS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_FLOWS)) != 0)
+    {
+        if (!bcmbal_flow_id_list_u32_bounds_check(&this->flows))
+        {
+            *failed_prop = BCMBAL_GROUP_CFG_ID_FLOWS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_OWNER)) != 0)
+    {
+        switch (this->owner)
+        {
+            case BCMBAL_GROUP_OWNER_NONE:
+                break;
+            case BCMBAL_GROUP_OWNER_MULTICAST:
+                break;
+            case BCMBAL_GROUP_OWNER_UNICAST:
+                break;
+            default:
+                *failed_prop = BCMBAL_GROUP_CFG_ID_OWNER;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_interface_key_set_default(bcmbal_interface_key *this, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_KEY_ID_INTF_ID)) != 0)
+    {
+        this->intf_id = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_KEY_ID_INTF_TYPE)) != 0)
+    {
+        this->intf_type = BCMBAL_INTF_TYPE_NNI;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_key_pack(const bcmbal_interface_key *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_KEY_ID_INTF_ID)) != 0)
+    {
+        if (!bcmbal_buf_write_u32(buf, this->intf_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_KEY_ID_INTF_TYPE)) != 0)
+    {
+        if (!bcmbal_intf_type_pack(this->intf_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_interface_key_get_packed_length(const bcmbal_interface_key *this, bcmbal_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_KEY_ID_INTF_ID)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_KEY_ID_INTF_TYPE)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_key_unpack(bcmbal_interface_key *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_KEY_ID_INTF_ID)) != 0)
+    {
+        if (!bcmbal_buf_read_u32(buf, &this->intf_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_KEY_ID_INTF_TYPE)) != 0)
+    {
+        if (!bcmbal_intf_type_unpack(&this->intf_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_key_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_KEY_ID_INTF_ID)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_KEY_ID_INTF_TYPE)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_key_bounds_check(const bcmbal_interface_key *this, bcmbal_presence_mask fields_present, bcmbal_interface_key_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_KEY_ID_INTF_TYPE)) != 0)
+    {
+        switch (this->intf_type)
+        {
+            case BCMBAL_INTF_TYPE_NNI:
+                break;
+            case BCMBAL_INTF_TYPE_PON:
+                break;
+            default:
+                *failed_prop = BCMBAL_INTERFACE_KEY_ID_INTF_TYPE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_interface_cfg_data_set_default(bcmbal_interface_cfg_data *this, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_ADMIN_STATE)) != 0)
+    {
+        this->admin_state = (bcmbal_state) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_OPER_STATUS)) != 0)
+    {
+        this->oper_status = (bcmbal_status) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_MIN_DATA_AGG_PORT_ID)) != 0)
+    {
+        this->min_data_agg_port_id = (bcmbal_aggregation_port_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_MIN_DATA_SVC_PORT_ID)) != 0)
+    {
+        this->min_data_svc_port_id = (bcmbal_service_port_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_TRANSCEIVER_TYPE)) != 0)
+    {
+        this->transceiver_type = BCMBAL_TRX_TYPE_GPON_SPS_43_48;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_DS_MISS_MODE)) != 0)
+    {
+        this->ds_miss_mode = BCMBAL_DS_MISS_MODE_DISCARD;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_MTU)) != 0)
+    {
+        this->mtu = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_FLOW_CONTROL)) != 0)
+    {
+        this->flow_control = BCMBAL_CONTROL_DISABLE;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_DS_TM)) != 0)
+    {
+        this->ds_tm = (bcmbal_tm_sched_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_US_TM)) != 0)
+    {
+        this->us_tm = (bcmbal_tm_sched_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_SUB_TERM_ID_LIST)) != 0)
+    {
+        this->sub_term_id_list.len = 0;
+        this->sub_term_id_list.val = NULL;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_cfg_data_pack(const bcmbal_interface_cfg_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_ADMIN_STATE)) != 0)
+    {
+        if (!bcmbal_state_pack(this->admin_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_OPER_STATUS)) != 0)
+    {
+        if (!bcmbal_status_pack(this->oper_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_MIN_DATA_AGG_PORT_ID)) != 0)
+    {
+        if (!bcmbal_buf_write_u16(buf, (uint16_t) this->min_data_agg_port_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_MIN_DATA_SVC_PORT_ID)) != 0)
+    {
+        if (!bcmbal_buf_write_u16(buf, (uint16_t) this->min_data_svc_port_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_TRANSCEIVER_TYPE)) != 0)
+    {
+        if (!bcmbal_trx_type_pack(this->transceiver_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_DS_MISS_MODE)) != 0)
+    {
+        if (!bcmbal_ds_miss_mode_pack(this->ds_miss_mode, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_MTU)) != 0)
+    {
+        if (!bcmbal_buf_write_u16(buf, this->mtu))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_FLOW_CONTROL)) != 0)
+    {
+        if (!bcmbal_control_pack(this->flow_control, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_DS_TM)) != 0)
+    {
+        if (!bcmbal_buf_write_u32(buf, (uint32_t) this->ds_tm))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_US_TM)) != 0)
+    {
+        if (!bcmbal_buf_write_u32(buf, (uint32_t) this->us_tm))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_SUB_TERM_ID_LIST)) != 0)
+    {
+        if (!bcmbal_sub_id_list_u16_pack(&this->sub_term_id_list, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_interface_cfg_data_get_packed_length(const bcmbal_interface_cfg_data *this, bcmbal_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_ADMIN_STATE)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_OPER_STATUS)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_MIN_DATA_AGG_PORT_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_MIN_DATA_SVC_PORT_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_TRANSCEIVER_TYPE)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_DS_MISS_MODE)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_MTU)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_FLOW_CONTROL)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_DS_TM)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_US_TM)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_SUB_TERM_ID_LIST)) != 0)
+    {
+        count += bcmbal_sub_id_list_u16_get_packed_length(&this->sub_term_id_list);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_cfg_data_unpack(bcmbal_interface_cfg_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_ADMIN_STATE)) != 0)
+    {
+        if (!bcmbal_state_unpack(&this->admin_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_OPER_STATUS)) != 0)
+    {
+        if (!bcmbal_status_unpack(&this->oper_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_MIN_DATA_AGG_PORT_ID)) != 0)
+    {
+        if (!bcmbal_buf_read_u16(buf, (uint16_t *) &this->min_data_agg_port_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_MIN_DATA_SVC_PORT_ID)) != 0)
+    {
+        if (!bcmbal_buf_read_u16(buf, (uint16_t *) &this->min_data_svc_port_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_TRANSCEIVER_TYPE)) != 0)
+    {
+        if (!bcmbal_trx_type_unpack(&this->transceiver_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_DS_MISS_MODE)) != 0)
+    {
+        if (!bcmbal_ds_miss_mode_unpack(&this->ds_miss_mode, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_MTU)) != 0)
+    {
+        if (!bcmbal_buf_read_u16(buf, &this->mtu))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_FLOW_CONTROL)) != 0)
+    {
+        if (!bcmbal_control_unpack(&this->flow_control, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_DS_TM)) != 0)
+    {
+        if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->ds_tm))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_US_TM)) != 0)
+    {
+        if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->us_tm))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_SUB_TERM_ID_LIST)) != 0)
+    {
+        if (!bcmbal_sub_id_list_u16_unpack(&this->sub_term_id_list, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_cfg_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_ADMIN_STATE)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_OPER_STATUS)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_MIN_DATA_AGG_PORT_ID)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_MIN_DATA_SVC_PORT_ID)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_TRANSCEIVER_TYPE)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_DS_MISS_MODE)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_MTU)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_FLOW_CONTROL)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_DS_TM)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_US_TM)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_SUB_TERM_ID_LIST)) != 0)
+    {
+        if (!bcmbal_sub_id_list_u16_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_cfg_data_bounds_check(const bcmbal_interface_cfg_data *this, bcmbal_presence_mask fields_present, bcmbal_interface_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_ADMIN_STATE)) != 0)
+    {
+        switch (this->admin_state)
+        {
+            case BCMBAL_STATE_UP:
+                break;
+            case BCMBAL_STATE_DOWN:
+                break;
+            case BCMBAL_STATE_TESTING:
+                break;
+            default:
+                *failed_prop = BCMBAL_INTERFACE_CFG_ID_ADMIN_STATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_OPER_STATUS)) != 0)
+    {
+        switch (this->oper_status)
+        {
+            case BCMBAL_STATUS_UP:
+                break;
+            case BCMBAL_STATUS_DOWN:
+                break;
+            case BCMBAL_STATUS_TESTING:
+                break;
+            case BCMBAL_STATUS_NOT_PRESENT:
+                break;
+            case BCMBAL_STATUS_LOWER_LAYER_DOWN:
+                break;
+            case BCMBAL_STATUS_UNKNOWN:
+                break;
+            default:
+                *failed_prop = BCMBAL_INTERFACE_CFG_ID_OPER_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_TRANSCEIVER_TYPE)) != 0)
+    {
+        switch (this->transceiver_type)
+        {
+            case BCMBAL_TRX_TYPE_GPON_SPS_43_48:
+                break;
+            case BCMBAL_TRX_TYPE_GPON_SPS_SOG_4321:
+                break;
+            case BCMBAL_TRX_TYPE_GPON_LTE_3680_M:
+                break;
+            case BCMBAL_TRX_TYPE_GPON_SOURCE_PHOTONICS:
+                break;
+            case BCMBAL_TRX_TYPE_GPON_LTE_3680_P:
+                break;
+            case BCMBAL_TRX_TYPE_XGPON_LTH_7222_PC:
+                break;
+            case BCMBAL_TRX_TYPE_XGPON_LTH_7226_PC:
+                break;
+            case BCMBAL_TRX_TYPE_XGPON_LTH_5302_PC:
+                break;
+            default:
+                *failed_prop = BCMBAL_INTERFACE_CFG_ID_TRANSCEIVER_TYPE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_DS_MISS_MODE)) != 0)
+    {
+        switch (this->ds_miss_mode)
+        {
+            case BCMBAL_DS_MISS_MODE_DISCARD:
+                break;
+            case BCMBAL_DS_MISS_MODE_BROADCAST:
+                break;
+            case BCMBAL_DS_MISS_MODE_VID:
+                break;
+            default:
+                *failed_prop = BCMBAL_INTERFACE_CFG_ID_DS_MISS_MODE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_FLOW_CONTROL)) != 0)
+    {
+        switch (this->flow_control)
+        {
+            case BCMBAL_CONTROL_DISABLE:
+                break;
+            case BCMBAL_CONTROL_ENABLE:
+                break;
+            default:
+                *failed_prop = BCMBAL_INTERFACE_CFG_ID_FLOW_CONTROL;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_SUB_TERM_ID_LIST)) != 0)
+    {
+        if (!bcmbal_sub_id_list_u16_bounds_check(&this->sub_term_id_list))
+        {
+            *failed_prop = BCMBAL_INTERFACE_CFG_ID_SUB_TERM_ID_LIST;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_interface_stat_data_set_default(bcmbal_interface_stat_data *this, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_STAT_ID_RX_PACKETS)) != 0)
+    {
+        this->rx_packets = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_STAT_ID_RX_BYTES)) != 0)
+    {
+        this->rx_bytes = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_STAT_ID_TX_PACKETS)) != 0)
+    {
+        this->tx_packets = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_STAT_ID_TX_BYTES)) != 0)
+    {
+        this->tx_bytes = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_stat_data_pack(const bcmbal_interface_stat_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_STAT_ID_RX_PACKETS)) != 0)
+    {
+        if (!bcmbal_buf_write_u64(buf, this->rx_packets))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_STAT_ID_RX_BYTES)) != 0)
+    {
+        if (!bcmbal_buf_write_u64(buf, this->rx_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_STAT_ID_TX_PACKETS)) != 0)
+    {
+        if (!bcmbal_buf_write_u64(buf, this->tx_packets))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_STAT_ID_TX_BYTES)) != 0)
+    {
+        if (!bcmbal_buf_write_u64(buf, this->tx_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_interface_stat_data_get_packed_length(const bcmbal_interface_stat_data *this, bcmbal_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_STAT_ID_RX_PACKETS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_STAT_ID_RX_BYTES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_STAT_ID_TX_PACKETS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_STAT_ID_TX_BYTES)) != 0)
+    {
+        count += 8;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_stat_data_unpack(bcmbal_interface_stat_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_STAT_ID_RX_PACKETS)) != 0)
+    {
+        if (!bcmbal_buf_read_u64(buf, &this->rx_packets))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_STAT_ID_RX_BYTES)) != 0)
+    {
+        if (!bcmbal_buf_read_u64(buf, &this->rx_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_STAT_ID_TX_PACKETS)) != 0)
+    {
+        if (!bcmbal_buf_read_u64(buf, &this->tx_packets))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_STAT_ID_TX_BYTES)) != 0)
+    {
+        if (!bcmbal_buf_read_u64(buf, &this->tx_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_stat_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_STAT_ID_RX_PACKETS)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_STAT_ID_RX_BYTES)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_STAT_ID_TX_PACKETS)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_STAT_ID_TX_BYTES)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_stat_data_bounds_check(const bcmbal_interface_stat_data *this, bcmbal_presence_mask fields_present, bcmbal_interface_stat_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_interface_ind_data_set_default(bcmbal_interface_ind_data *this, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_ADMIN_STATE)) != 0)
+    {
+        this->admin_state = (bcmbal_state) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_OPER_STATUS)) != 0)
+    {
+        this->oper_status = (bcmbal_status) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_MIN_DATA_AGG_PORT_ID)) != 0)
+    {
+        this->min_data_agg_port_id = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_MIN_DATA_SVC_PORT_ID)) != 0)
+    {
+        this->min_data_svc_port_id = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_TRANSCEIVER_TYPE)) != 0)
+    {
+        this->transceiver_type = BCMBAL_TRX_TYPE_GPON_SPS_43_48;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_DS_MISS_MODE)) != 0)
+    {
+        this->ds_miss_mode = BCMBAL_DS_MISS_MODE_DISCARD;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_MTU)) != 0)
+    {
+        this->mtu = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_FLOW_CONTROL)) != 0)
+    {
+        this->flow_control = BCMBAL_CONTROL_DISABLE;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_DS_TM)) != 0)
+    {
+        this->ds_tm = (bcmbal_tm_sched_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_US_TM)) != 0)
+    {
+        this->us_tm = (bcmbal_tm_sched_id) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_ind_data_pack(const bcmbal_interface_ind_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_ADMIN_STATE)) != 0)
+    {
+        if (!bcmbal_state_pack(this->admin_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_OPER_STATUS)) != 0)
+    {
+        if (!bcmbal_status_pack(this->oper_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_MIN_DATA_AGG_PORT_ID)) != 0)
+    {
+        if (!bcmbal_buf_write_u16(buf, this->min_data_agg_port_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_MIN_DATA_SVC_PORT_ID)) != 0)
+    {
+        if (!bcmbal_buf_write_u16(buf, this->min_data_svc_port_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_TRANSCEIVER_TYPE)) != 0)
+    {
+        if (!bcmbal_trx_type_pack(this->transceiver_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_DS_MISS_MODE)) != 0)
+    {
+        if (!bcmbal_ds_miss_mode_pack(this->ds_miss_mode, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_MTU)) != 0)
+    {
+        if (!bcmbal_buf_write_u16(buf, this->mtu))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_FLOW_CONTROL)) != 0)
+    {
+        if (!bcmbal_control_pack(this->flow_control, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_DS_TM)) != 0)
+    {
+        if (!bcmbal_buf_write_u32(buf, (uint32_t) this->ds_tm))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_US_TM)) != 0)
+    {
+        if (!bcmbal_buf_write_u32(buf, (uint32_t) this->us_tm))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_interface_ind_data_get_packed_length(const bcmbal_interface_ind_data *this, bcmbal_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_ADMIN_STATE)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_OPER_STATUS)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_MIN_DATA_AGG_PORT_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_MIN_DATA_SVC_PORT_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_TRANSCEIVER_TYPE)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_DS_MISS_MODE)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_MTU)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_FLOW_CONTROL)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_DS_TM)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_US_TM)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_ind_data_unpack(bcmbal_interface_ind_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_ADMIN_STATE)) != 0)
+    {
+        if (!bcmbal_state_unpack(&this->admin_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_OPER_STATUS)) != 0)
+    {
+        if (!bcmbal_status_unpack(&this->oper_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_MIN_DATA_AGG_PORT_ID)) != 0)
+    {
+        if (!bcmbal_buf_read_u16(buf, &this->min_data_agg_port_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_MIN_DATA_SVC_PORT_ID)) != 0)
+    {
+        if (!bcmbal_buf_read_u16(buf, &this->min_data_svc_port_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_TRANSCEIVER_TYPE)) != 0)
+    {
+        if (!bcmbal_trx_type_unpack(&this->transceiver_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_DS_MISS_MODE)) != 0)
+    {
+        if (!bcmbal_ds_miss_mode_unpack(&this->ds_miss_mode, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_MTU)) != 0)
+    {
+        if (!bcmbal_buf_read_u16(buf, &this->mtu))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_FLOW_CONTROL)) != 0)
+    {
+        if (!bcmbal_control_unpack(&this->flow_control, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_DS_TM)) != 0)
+    {
+        if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->ds_tm))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_US_TM)) != 0)
+    {
+        if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->us_tm))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_ind_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_ADMIN_STATE)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_OPER_STATUS)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_MIN_DATA_AGG_PORT_ID)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_MIN_DATA_SVC_PORT_ID)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_TRANSCEIVER_TYPE)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_DS_MISS_MODE)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_MTU)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_FLOW_CONTROL)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_DS_TM)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_US_TM)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_ind_data_bounds_check(const bcmbal_interface_ind_data *this, bcmbal_presence_mask fields_present, bcmbal_interface_ind_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_ADMIN_STATE)) != 0)
+    {
+        switch (this->admin_state)
+        {
+            case BCMBAL_STATE_UP:
+                break;
+            case BCMBAL_STATE_DOWN:
+                break;
+            case BCMBAL_STATE_TESTING:
+                break;
+            default:
+                *failed_prop = BCMBAL_INTERFACE_IND_ID_ADMIN_STATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_OPER_STATUS)) != 0)
+    {
+        switch (this->oper_status)
+        {
+            case BCMBAL_STATUS_UP:
+                break;
+            case BCMBAL_STATUS_DOWN:
+                break;
+            case BCMBAL_STATUS_TESTING:
+                break;
+            case BCMBAL_STATUS_NOT_PRESENT:
+                break;
+            case BCMBAL_STATUS_LOWER_LAYER_DOWN:
+                break;
+            case BCMBAL_STATUS_UNKNOWN:
+                break;
+            default:
+                *failed_prop = BCMBAL_INTERFACE_IND_ID_OPER_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_TRANSCEIVER_TYPE)) != 0)
+    {
+        switch (this->transceiver_type)
+        {
+            case BCMBAL_TRX_TYPE_GPON_SPS_43_48:
+                break;
+            case BCMBAL_TRX_TYPE_GPON_SPS_SOG_4321:
+                break;
+            case BCMBAL_TRX_TYPE_GPON_LTE_3680_M:
+                break;
+            case BCMBAL_TRX_TYPE_GPON_SOURCE_PHOTONICS:
+                break;
+            case BCMBAL_TRX_TYPE_GPON_LTE_3680_P:
+                break;
+            case BCMBAL_TRX_TYPE_XGPON_LTH_7222_PC:
+                break;
+            case BCMBAL_TRX_TYPE_XGPON_LTH_7226_PC:
+                break;
+            case BCMBAL_TRX_TYPE_XGPON_LTH_5302_PC:
+                break;
+            default:
+                *failed_prop = BCMBAL_INTERFACE_IND_ID_TRANSCEIVER_TYPE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_DS_MISS_MODE)) != 0)
+    {
+        switch (this->ds_miss_mode)
+        {
+            case BCMBAL_DS_MISS_MODE_DISCARD:
+                break;
+            case BCMBAL_DS_MISS_MODE_BROADCAST:
+                break;
+            case BCMBAL_DS_MISS_MODE_VID:
+                break;
+            default:
+                *failed_prop = BCMBAL_INTERFACE_IND_ID_DS_MISS_MODE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_FLOW_CONTROL)) != 0)
+    {
+        switch (this->flow_control)
+        {
+            case BCMBAL_CONTROL_DISABLE:
+                break;
+            case BCMBAL_CONTROL_ENABLE:
+                break;
+            default:
+                *failed_prop = BCMBAL_INTERFACE_IND_ID_FLOW_CONTROL;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_packet_key_set_default(bcmbal_packet_key *this, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_PACKET_KEY_ID_RESERVED)) != 0)
+    {
+        this->reserved = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_KEY_ID_PACKET_SEND_DEST)) != 0)
+    {
+        this->packet_send_dest.type = (bcmbal_dest_type) 0;
+        this->packet_send_dest.u.nni.int_id = (bcmbal_intf_id) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_packet_key_pack(const bcmbal_packet_key *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_PACKET_KEY_ID_RESERVED)) != 0)
+    {
+        if (!bcmbal_buf_write_u32(buf, this->reserved))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_KEY_ID_PACKET_SEND_DEST)) != 0)
+    {
+        if (!bcmbal_dest_pack(&this->packet_send_dest, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_packet_key_get_packed_length(const bcmbal_packet_key *this, bcmbal_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMBAL_PACKET_KEY_ID_RESERVED)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_KEY_ID_PACKET_SEND_DEST)) != 0)
+    {
+        count += bcmbal_dest_get_packed_length(&this->packet_send_dest);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_packet_key_unpack(bcmbal_packet_key *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_PACKET_KEY_ID_RESERVED)) != 0)
+    {
+        if (!bcmbal_buf_read_u32(buf, &this->reserved))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_KEY_ID_PACKET_SEND_DEST)) != 0)
+    {
+        if (!bcmbal_dest_unpack(&this->packet_send_dest, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_packet_key_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_PACKET_KEY_ID_RESERVED)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_KEY_ID_PACKET_SEND_DEST)) != 0)
+    {
+        if (!bcmbal_dest_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_packet_key_bounds_check(const bcmbal_packet_key *this, bcmbal_presence_mask fields_present, bcmbal_packet_key_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMBAL_PACKET_KEY_ID_PACKET_SEND_DEST)) != 0)
+    {
+        if (!bcmbal_dest_bounds_check(&this->packet_send_dest))
+        {
+            *failed_prop = BCMBAL_PACKET_KEY_ID_PACKET_SEND_DEST;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_packet_cfg_data_set_default(bcmbal_packet_cfg_data *this, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_FLOW_ID)) != 0)
+    {
+        this->flow_id = (bcmbal_flow_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_FLOW_TYPE)) != 0)
+    {
+        this->flow_type = (bcmbal_flow_type) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_INTF_ID)) != 0)
+    {
+        this->intf_id = (bcmbal_intf_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_INTF_TYPE)) != 0)
+    {
+        this->intf_type = BCMBAL_INTF_TYPE_NNI;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_SVC_PORT)) != 0)
+    {
+        this->svc_port = (bcmbal_service_port_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_FLOW_COOKIE)) != 0)
+    {
+        this->flow_cookie = (bcmbal_cookie) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_PKT)) != 0)
+    {
+        this->pkt.len = 0;
+        this->pkt.val = NULL;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_packet_cfg_data_pack(const bcmbal_packet_cfg_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_FLOW_ID)) != 0)
+    {
+        if (!bcmbal_buf_write_u32(buf, (uint32_t) this->flow_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_FLOW_TYPE)) != 0)
+    {
+        if (!bcmbal_flow_type_pack(this->flow_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_INTF_ID)) != 0)
+    {
+        if (!bcmbal_buf_write_u32(buf, (uint32_t) this->intf_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_INTF_TYPE)) != 0)
+    {
+        if (!bcmbal_intf_type_pack(this->intf_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_SVC_PORT)) != 0)
+    {
+        if (!bcmbal_buf_write_u16(buf, (uint16_t) this->svc_port))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_FLOW_COOKIE)) != 0)
+    {
+        if (!bcmbal_buf_write_u64(buf, (uint64_t) this->flow_cookie))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_PKT)) != 0)
+    {
+        if (!bcmbal_u8_list_u32_pack(&this->pkt, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_packet_cfg_data_get_packed_length(const bcmbal_packet_cfg_data *this, bcmbal_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_FLOW_ID)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_FLOW_TYPE)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_INTF_ID)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_INTF_TYPE)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_SVC_PORT)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_FLOW_COOKIE)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_PKT)) != 0)
+    {
+        count += bcmbal_u8_list_u32_get_packed_length(&this->pkt);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_packet_cfg_data_unpack(bcmbal_packet_cfg_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_FLOW_ID)) != 0)
+    {
+        if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->flow_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_FLOW_TYPE)) != 0)
+    {
+        if (!bcmbal_flow_type_unpack(&this->flow_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_INTF_ID)) != 0)
+    {
+        if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->intf_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_INTF_TYPE)) != 0)
+    {
+        if (!bcmbal_intf_type_unpack(&this->intf_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_SVC_PORT)) != 0)
+    {
+        if (!bcmbal_buf_read_u16(buf, (uint16_t *) &this->svc_port))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_FLOW_COOKIE)) != 0)
+    {
+        if (!bcmbal_buf_read_u64(buf, (uint64_t *) &this->flow_cookie))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_PKT)) != 0)
+    {
+        if (!bcmbal_u8_list_u32_unpack(&this->pkt, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_packet_cfg_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_FLOW_ID)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_FLOW_TYPE)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_INTF_ID)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_INTF_TYPE)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_SVC_PORT)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_FLOW_COOKIE)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_PKT)) != 0)
+    {
+        if (!bcmbal_u8_list_u32_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_packet_cfg_data_bounds_check(const bcmbal_packet_cfg_data *this, bcmbal_presence_mask fields_present, bcmbal_packet_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_FLOW_TYPE)) != 0)
+    {
+        switch (this->flow_type)
+        {
+            case BCMBAL_FLOW_TYPE_UPSTREAM:
+                break;
+            case BCMBAL_FLOW_TYPE_DOWNSTREAM:
+                break;
+            case BCMBAL_FLOW_TYPE_BROADCAST:
+                break;
+            case BCMBAL_FLOW_TYPE_MULTICAST:
+                break;
+            default:
+                *failed_prop = BCMBAL_PACKET_CFG_ID_FLOW_TYPE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_INTF_TYPE)) != 0)
+    {
+        switch (this->intf_type)
+        {
+            case BCMBAL_INTF_TYPE_NNI:
+                break;
+            case BCMBAL_INTF_TYPE_PON:
+                break;
+            default:
+                *failed_prop = BCMBAL_PACKET_CFG_ID_INTF_TYPE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_PKT)) != 0)
+    {
+        if (!bcmbal_u8_list_u32_bounds_check(&this->pkt))
+        {
+            *failed_prop = BCMBAL_PACKET_CFG_ID_PKT;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_packet_ind_data_set_default(bcmbal_packet_ind_data *this, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_FLOW_ID)) != 0)
+    {
+        this->flow_id = (bcmbal_flow_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_FLOW_TYPE)) != 0)
+    {
+        this->flow_type = (bcmbal_flow_type) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_INTF_ID)) != 0)
+    {
+        this->intf_id = (bcmbal_intf_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_INTF_TYPE)) != 0)
+    {
+        this->intf_type = BCMBAL_INTF_TYPE_NNI;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_SVC_PORT)) != 0)
+    {
+        this->svc_port = (bcmbal_service_port_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_FLOW_COOKIE)) != 0)
+    {
+        this->flow_cookie = (bcmbal_cookie) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_PKT)) != 0)
+    {
+        this->pkt.len = 0;
+        this->pkt.val = NULL;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_packet_ind_data_pack(const bcmbal_packet_ind_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_FLOW_ID)) != 0)
+    {
+        if (!bcmbal_buf_write_u32(buf, (uint32_t) this->flow_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_FLOW_TYPE)) != 0)
+    {
+        if (!bcmbal_flow_type_pack(this->flow_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_INTF_ID)) != 0)
+    {
+        if (!bcmbal_buf_write_u32(buf, (uint32_t) this->intf_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_INTF_TYPE)) != 0)
+    {
+        if (!bcmbal_intf_type_pack(this->intf_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_SVC_PORT)) != 0)
+    {
+        if (!bcmbal_buf_write_u16(buf, (uint16_t) this->svc_port))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_FLOW_COOKIE)) != 0)
+    {
+        if (!bcmbal_buf_write_u64(buf, (uint64_t) this->flow_cookie))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_PKT)) != 0)
+    {
+        if (!bcmbal_u8_list_u32_pack(&this->pkt, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_packet_ind_data_get_packed_length(const bcmbal_packet_ind_data *this, bcmbal_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_FLOW_ID)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_FLOW_TYPE)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_INTF_ID)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_INTF_TYPE)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_SVC_PORT)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_FLOW_COOKIE)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_PKT)) != 0)
+    {
+        count += bcmbal_u8_list_u32_get_packed_length(&this->pkt);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_packet_ind_data_unpack(bcmbal_packet_ind_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_FLOW_ID)) != 0)
+    {
+        if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->flow_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_FLOW_TYPE)) != 0)
+    {
+        if (!bcmbal_flow_type_unpack(&this->flow_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_INTF_ID)) != 0)
+    {
+        if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->intf_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_INTF_TYPE)) != 0)
+    {
+        if (!bcmbal_intf_type_unpack(&this->intf_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_SVC_PORT)) != 0)
+    {
+        if (!bcmbal_buf_read_u16(buf, (uint16_t *) &this->svc_port))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_FLOW_COOKIE)) != 0)
+    {
+        if (!bcmbal_buf_read_u64(buf, (uint64_t *) &this->flow_cookie))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_PKT)) != 0)
+    {
+        if (!bcmbal_u8_list_u32_unpack(&this->pkt, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_packet_ind_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_FLOW_ID)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_FLOW_TYPE)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_INTF_ID)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_INTF_TYPE)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_SVC_PORT)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_FLOW_COOKIE)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_PKT)) != 0)
+    {
+        if (!bcmbal_u8_list_u32_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_packet_ind_data_bounds_check(const bcmbal_packet_ind_data *this, bcmbal_presence_mask fields_present, bcmbal_packet_ind_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_FLOW_TYPE)) != 0)
+    {
+        switch (this->flow_type)
+        {
+            case BCMBAL_FLOW_TYPE_UPSTREAM:
+                break;
+            case BCMBAL_FLOW_TYPE_DOWNSTREAM:
+                break;
+            case BCMBAL_FLOW_TYPE_BROADCAST:
+                break;
+            case BCMBAL_FLOW_TYPE_MULTICAST:
+                break;
+            default:
+                *failed_prop = BCMBAL_PACKET_IND_ID_FLOW_TYPE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_INTF_TYPE)) != 0)
+    {
+        switch (this->intf_type)
+        {
+            case BCMBAL_INTF_TYPE_NNI:
+                break;
+            case BCMBAL_INTF_TYPE_PON:
+                break;
+            default:
+                *failed_prop = BCMBAL_PACKET_IND_ID_INTF_TYPE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_PKT)) != 0)
+    {
+        if (!bcmbal_u8_list_u32_bounds_check(&this->pkt))
+        {
+            *failed_prop = BCMBAL_PACKET_IND_ID_PKT;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_subscriber_terminal_key_set_default(bcmbal_subscriber_terminal_key *this, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_KEY_ID_SUB_TERM_ID)) != 0)
+    {
+        this->sub_term_id = (bcmbal_sub_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_KEY_ID_INTF_ID)) != 0)
+    {
+        this->intf_id = (bcmbal_intf_id) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_key_pack(const bcmbal_subscriber_terminal_key *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_KEY_ID_SUB_TERM_ID)) != 0)
+    {
+        if (!bcmbal_buf_write_u32(buf, (uint32_t) this->sub_term_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_KEY_ID_INTF_ID)) != 0)
+    {
+        if (!bcmbal_buf_write_u32(buf, (uint32_t) this->intf_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_subscriber_terminal_key_get_packed_length(const bcmbal_subscriber_terminal_key *this, bcmbal_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_KEY_ID_SUB_TERM_ID)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_KEY_ID_INTF_ID)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_key_unpack(bcmbal_subscriber_terminal_key *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_KEY_ID_SUB_TERM_ID)) != 0)
+    {
+        if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->sub_term_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_KEY_ID_INTF_ID)) != 0)
+    {
+        if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->intf_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_key_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_KEY_ID_SUB_TERM_ID)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_KEY_ID_INTF_ID)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_key_bounds_check(const bcmbal_subscriber_terminal_key *this, bcmbal_presence_mask fields_present, bcmbal_subscriber_terminal_key_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_subscriber_terminal_cfg_data_set_default(bcmbal_subscriber_terminal_cfg_data *this, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_ADMIN_STATE)) != 0)
+    {
+        this->admin_state = (bcmbal_state) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_OPER_STATUS)) != 0)
+    {
+        this->oper_status = (bcmbal_status) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SERIAL_NUMBER)) != 0)
+    {
+        memset(this->serial_number.vendor_id, 0, sizeof(this->serial_number.vendor_id));
+        memset(this->serial_number.vendor_specific, 0, sizeof(this->serial_number.vendor_specific));
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_PASSWORD)) != 0)
+    {
+        memset(this->password.arr, 0, sizeof(this->password.arr));
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_REGISTRATION_ID)) != 0)
+    {
+        memset(this->registration_id.arr, 0, sizeof(this->registration_id.arr));
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SVC_PORT_ID)) != 0)
+    {
+        this->svc_port_id = (bcmbal_service_port_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_MAC_ADDRESS)) != 0)
+    {
+        bcmos_mac_address_init(&this->mac_address);
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_DS_TM)) != 0)
+    {
+        this->ds_tm = (bcmbal_tm_sched_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_US_TM)) != 0)
+    {
+        this->us_tm = (bcmbal_tm_sched_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SVC_PORT_ID_LIST)) != 0)
+    {
+        this->svc_port_id_list.len = 0;
+        this->svc_port_id_list.val = NULL;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_AGG_PORT_ID_LIST)) != 0)
+    {
+        this->agg_port_id_list.len = 0;
+        this->agg_port_id_list.val = NULL;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_cfg_data_pack(const bcmbal_subscriber_terminal_cfg_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_ADMIN_STATE)) != 0)
+    {
+        if (!bcmbal_state_pack(this->admin_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_OPER_STATUS)) != 0)
+    {
+        if (!bcmbal_status_pack(this->oper_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmbal_serial_number_pack(&this->serial_number, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_PASSWORD)) != 0)
+    {
+        if (!bcmbal_password_pack(&this->password, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_REGISTRATION_ID)) != 0)
+    {
+        if (!bcmbal_registration_id_pack(&this->registration_id, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SVC_PORT_ID)) != 0)
+    {
+        if (!bcmbal_buf_write_u16(buf, (uint16_t) this->svc_port_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_MAC_ADDRESS)) != 0)
+    {
+        if (!bcmbal_buf_write_mac_address(buf, this->mac_address))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_DS_TM)) != 0)
+    {
+        if (!bcmbal_buf_write_u32(buf, (uint32_t) this->ds_tm))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_US_TM)) != 0)
+    {
+        if (!bcmbal_buf_write_u32(buf, (uint32_t) this->us_tm))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SVC_PORT_ID_LIST)) != 0)
+    {
+        if (!bcmbal_service_port_id_list_u8_pack(&this->svc_port_id_list, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_AGG_PORT_ID_LIST)) != 0)
+    {
+        if (!bcmbal_aggregation_port_id_list_u8_pack(&this->agg_port_id_list, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_subscriber_terminal_cfg_data_get_packed_length(const bcmbal_subscriber_terminal_cfg_data *this, bcmbal_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_ADMIN_STATE)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_OPER_STATUS)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SERIAL_NUMBER)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_PASSWORD)) != 0)
+    {
+        count += 10;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_REGISTRATION_ID)) != 0)
+    {
+        count += 36;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SVC_PORT_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_MAC_ADDRESS)) != 0)
+    {
+        count += 6;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_DS_TM)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_US_TM)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SVC_PORT_ID_LIST)) != 0)
+    {
+        count += bcmbal_service_port_id_list_u8_get_packed_length(&this->svc_port_id_list);
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_AGG_PORT_ID_LIST)) != 0)
+    {
+        count += bcmbal_aggregation_port_id_list_u8_get_packed_length(&this->agg_port_id_list);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_cfg_data_unpack(bcmbal_subscriber_terminal_cfg_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_ADMIN_STATE)) != 0)
+    {
+        if (!bcmbal_state_unpack(&this->admin_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_OPER_STATUS)) != 0)
+    {
+        if (!bcmbal_status_unpack(&this->oper_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmbal_serial_number_unpack(&this->serial_number, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_PASSWORD)) != 0)
+    {
+        if (!bcmbal_password_unpack(&this->password, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_REGISTRATION_ID)) != 0)
+    {
+        if (!bcmbal_registration_id_unpack(&this->registration_id, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SVC_PORT_ID)) != 0)
+    {
+        if (!bcmbal_buf_read_u16(buf, (uint16_t *) &this->svc_port_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_MAC_ADDRESS)) != 0)
+    {
+        if (!bcmbal_buf_read_mac_address(buf, &this->mac_address))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_DS_TM)) != 0)
+    {
+        if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->ds_tm))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_US_TM)) != 0)
+    {
+        if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->us_tm))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SVC_PORT_ID_LIST)) != 0)
+    {
+        if (!bcmbal_service_port_id_list_u8_unpack(&this->svc_port_id_list, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_AGG_PORT_ID_LIST)) != 0)
+    {
+        if (!bcmbal_aggregation_port_id_list_u8_unpack(&this->agg_port_id_list, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_cfg_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_ADMIN_STATE)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_OPER_STATUS)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_PASSWORD)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 10))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_REGISTRATION_ID)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 36))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SVC_PORT_ID)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_MAC_ADDRESS)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 6))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_DS_TM)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_US_TM)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SVC_PORT_ID_LIST)) != 0)
+    {
+        if (!bcmbal_service_port_id_list_u8_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_AGG_PORT_ID_LIST)) != 0)
+    {
+        if (!bcmbal_aggregation_port_id_list_u8_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_cfg_data_bounds_check(const bcmbal_subscriber_terminal_cfg_data *this, bcmbal_presence_mask fields_present, bcmbal_subscriber_terminal_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_ADMIN_STATE)) != 0)
+    {
+        switch (this->admin_state)
+        {
+            case BCMBAL_STATE_UP:
+                break;
+            case BCMBAL_STATE_DOWN:
+                break;
+            case BCMBAL_STATE_TESTING:
+                break;
+            default:
+                *failed_prop = BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_ADMIN_STATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_OPER_STATUS)) != 0)
+    {
+        switch (this->oper_status)
+        {
+            case BCMBAL_STATUS_UP:
+                break;
+            case BCMBAL_STATUS_DOWN:
+                break;
+            case BCMBAL_STATUS_TESTING:
+                break;
+            case BCMBAL_STATUS_NOT_PRESENT:
+                break;
+            case BCMBAL_STATUS_LOWER_LAYER_DOWN:
+                break;
+            case BCMBAL_STATUS_UNKNOWN:
+                break;
+            default:
+                *failed_prop = BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_OPER_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmbal_serial_number_bounds_check(&this->serial_number))
+        {
+            *failed_prop = BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SERIAL_NUMBER;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_PASSWORD)) != 0)
+    {
+        if (!bcmbal_password_bounds_check(&this->password))
+        {
+            *failed_prop = BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_PASSWORD;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_REGISTRATION_ID)) != 0)
+    {
+        if (!bcmbal_registration_id_bounds_check(&this->registration_id))
+        {
+            *failed_prop = BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_REGISTRATION_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SVC_PORT_ID_LIST)) != 0)
+    {
+        if (!bcmbal_service_port_id_list_u8_bounds_check(&this->svc_port_id_list))
+        {
+            *failed_prop = BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SVC_PORT_ID_LIST;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_AGG_PORT_ID_LIST)) != 0)
+    {
+        if (!bcmbal_aggregation_port_id_list_u8_bounds_check(&this->agg_port_id_list))
+        {
+            *failed_prop = BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_AGG_PORT_ID_LIST;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_subscriber_terminal_stat_data_set_default(bcmbal_subscriber_terminal_stat_data *this, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_RX_PACKETS)) != 0)
+    {
+        this->rx_packets = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_RX_BYTES)) != 0)
+    {
+        this->rx_bytes = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_TX_PACKETS)) != 0)
+    {
+        this->tx_packets = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_TX_BYTES)) != 0)
+    {
+        this->tx_bytes = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_stat_data_pack(const bcmbal_subscriber_terminal_stat_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_RX_PACKETS)) != 0)
+    {
+        if (!bcmbal_buf_write_u64(buf, this->rx_packets))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_RX_BYTES)) != 0)
+    {
+        if (!bcmbal_buf_write_u64(buf, this->rx_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_TX_PACKETS)) != 0)
+    {
+        if (!bcmbal_buf_write_u64(buf, this->tx_packets))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_TX_BYTES)) != 0)
+    {
+        if (!bcmbal_buf_write_u64(buf, this->tx_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_subscriber_terminal_stat_data_get_packed_length(const bcmbal_subscriber_terminal_stat_data *this, bcmbal_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_RX_PACKETS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_RX_BYTES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_TX_PACKETS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_TX_BYTES)) != 0)
+    {
+        count += 8;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_stat_data_unpack(bcmbal_subscriber_terminal_stat_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_RX_PACKETS)) != 0)
+    {
+        if (!bcmbal_buf_read_u64(buf, &this->rx_packets))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_RX_BYTES)) != 0)
+    {
+        if (!bcmbal_buf_read_u64(buf, &this->rx_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_TX_PACKETS)) != 0)
+    {
+        if (!bcmbal_buf_read_u64(buf, &this->tx_packets))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_TX_BYTES)) != 0)
+    {
+        if (!bcmbal_buf_read_u64(buf, &this->tx_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_stat_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_RX_PACKETS)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_RX_BYTES)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_TX_PACKETS)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_TX_BYTES)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_stat_data_bounds_check(const bcmbal_subscriber_terminal_stat_data *this, bcmbal_presence_mask fields_present, bcmbal_subscriber_terminal_stat_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_subscriber_terminal_ind_data_set_default(bcmbal_subscriber_terminal_ind_data *this, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_ADMIN_STATE)) != 0)
+    {
+        this->admin_state = (bcmbal_state) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_OPER_STATUS)) != 0)
+    {
+        this->oper_status = (bcmbal_status) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_SERIAL_NUMBER)) != 0)
+    {
+        memset(this->serial_number.vendor_id, 0, sizeof(this->serial_number.vendor_id));
+        memset(this->serial_number.vendor_specific, 0, sizeof(this->serial_number.vendor_specific));
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_PASSWORD)) != 0)
+    {
+        memset(this->password.arr, 0, sizeof(this->password.arr));
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_REGISTRATION_ID)) != 0)
+    {
+        memset(this->registration_id.arr, 0, sizeof(this->registration_id.arr));
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_SVC_PORT_ID)) != 0)
+    {
+        this->svc_port_id = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_MAC_ADDRESS)) != 0)
+    {
+        bcmos_mac_address_init(&this->mac_address);
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_DS_TM)) != 0)
+    {
+        this->ds_tm = (bcmbal_tm_sched_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_US_TM)) != 0)
+    {
+        this->us_tm = (bcmbal_tm_sched_id) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_ind_data_pack(const bcmbal_subscriber_terminal_ind_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_ADMIN_STATE)) != 0)
+    {
+        if (!bcmbal_state_pack(this->admin_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_OPER_STATUS)) != 0)
+    {
+        if (!bcmbal_status_pack(this->oper_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmbal_serial_number_pack(&this->serial_number, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_PASSWORD)) != 0)
+    {
+        if (!bcmbal_password_pack(&this->password, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_REGISTRATION_ID)) != 0)
+    {
+        if (!bcmbal_registration_id_pack(&this->registration_id, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_SVC_PORT_ID)) != 0)
+    {
+        if (!bcmbal_buf_write_u16(buf, this->svc_port_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_MAC_ADDRESS)) != 0)
+    {
+        if (!bcmbal_buf_write_mac_address(buf, this->mac_address))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_DS_TM)) != 0)
+    {
+        if (!bcmbal_buf_write_u32(buf, (uint32_t) this->ds_tm))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_US_TM)) != 0)
+    {
+        if (!bcmbal_buf_write_u32(buf, (uint32_t) this->us_tm))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_subscriber_terminal_ind_data_get_packed_length(const bcmbal_subscriber_terminal_ind_data *this, bcmbal_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_ADMIN_STATE)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_OPER_STATUS)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_SERIAL_NUMBER)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_PASSWORD)) != 0)
+    {
+        count += 10;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_REGISTRATION_ID)) != 0)
+    {
+        count += 36;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_SVC_PORT_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_MAC_ADDRESS)) != 0)
+    {
+        count += 6;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_DS_TM)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_US_TM)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_ind_data_unpack(bcmbal_subscriber_terminal_ind_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_ADMIN_STATE)) != 0)
+    {
+        if (!bcmbal_state_unpack(&this->admin_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_OPER_STATUS)) != 0)
+    {
+        if (!bcmbal_status_unpack(&this->oper_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmbal_serial_number_unpack(&this->serial_number, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_PASSWORD)) != 0)
+    {
+        if (!bcmbal_password_unpack(&this->password, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_REGISTRATION_ID)) != 0)
+    {
+        if (!bcmbal_registration_id_unpack(&this->registration_id, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_SVC_PORT_ID)) != 0)
+    {
+        if (!bcmbal_buf_read_u16(buf, &this->svc_port_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_MAC_ADDRESS)) != 0)
+    {
+        if (!bcmbal_buf_read_mac_address(buf, &this->mac_address))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_DS_TM)) != 0)
+    {
+        if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->ds_tm))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_US_TM)) != 0)
+    {
+        if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->us_tm))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_ind_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_ADMIN_STATE)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_OPER_STATUS)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_PASSWORD)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 10))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_REGISTRATION_ID)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 36))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_SVC_PORT_ID)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_MAC_ADDRESS)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 6))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_DS_TM)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_US_TM)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_ind_data_bounds_check(const bcmbal_subscriber_terminal_ind_data *this, bcmbal_presence_mask fields_present, bcmbal_subscriber_terminal_ind_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_ADMIN_STATE)) != 0)
+    {
+        switch (this->admin_state)
+        {
+            case BCMBAL_STATE_UP:
+                break;
+            case BCMBAL_STATE_DOWN:
+                break;
+            case BCMBAL_STATE_TESTING:
+                break;
+            default:
+                *failed_prop = BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_ADMIN_STATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_OPER_STATUS)) != 0)
+    {
+        switch (this->oper_status)
+        {
+            case BCMBAL_STATUS_UP:
+                break;
+            case BCMBAL_STATUS_DOWN:
+                break;
+            case BCMBAL_STATUS_TESTING:
+                break;
+            case BCMBAL_STATUS_NOT_PRESENT:
+                break;
+            case BCMBAL_STATUS_LOWER_LAYER_DOWN:
+                break;
+            case BCMBAL_STATUS_UNKNOWN:
+                break;
+            default:
+                *failed_prop = BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_OPER_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmbal_serial_number_bounds_check(&this->serial_number))
+        {
+            *failed_prop = BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_SERIAL_NUMBER;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_PASSWORD)) != 0)
+    {
+        if (!bcmbal_password_bounds_check(&this->password))
+        {
+            *failed_prop = BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_PASSWORD;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_REGISTRATION_ID)) != 0)
+    {
+        if (!bcmbal_registration_id_bounds_check(&this->registration_id))
+        {
+            *failed_prop = BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_REGISTRATION_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_tm_queue_key_set_default(bcmbal_tm_queue_key *this, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_KEY_ID_SCHED_ID)) != 0)
+    {
+        this->sched_id = (bcmbal_tm_sched_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_KEY_ID_SCHED_DIR)) != 0)
+    {
+        this->sched_dir = (bcmbal_tm_sched_dir) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_KEY_ID_ID)) != 0)
+    {
+        this->id = (bcmbal_tm_queue_id) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_key_pack(const bcmbal_tm_queue_key *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_KEY_ID_SCHED_ID)) != 0)
+    {
+        if (!bcmbal_buf_write_u32(buf, (uint32_t) this->sched_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_KEY_ID_SCHED_DIR)) != 0)
+    {
+        if (!bcmbal_tm_sched_dir_pack(this->sched_dir, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_KEY_ID_ID)) != 0)
+    {
+        if (!bcmbal_buf_write_u8(buf, (uint8_t) this->id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_tm_queue_key_get_packed_length(const bcmbal_tm_queue_key *this, bcmbal_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_KEY_ID_SCHED_ID)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_KEY_ID_SCHED_DIR)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_KEY_ID_ID)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_key_unpack(bcmbal_tm_queue_key *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_KEY_ID_SCHED_ID)) != 0)
+    {
+        if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->sched_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_KEY_ID_SCHED_DIR)) != 0)
+    {
+        if (!bcmbal_tm_sched_dir_unpack(&this->sched_dir, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_KEY_ID_ID)) != 0)
+    {
+        if (!bcmbal_buf_read_u8(buf, (uint8_t *) &this->id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_key_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_KEY_ID_SCHED_ID)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_KEY_ID_SCHED_DIR)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_KEY_ID_ID)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_key_bounds_check(const bcmbal_tm_queue_key *this, bcmbal_presence_mask fields_present, bcmbal_tm_queue_key_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_KEY_ID_SCHED_DIR)) != 0)
+    {
+        switch (this->sched_dir)
+        {
+            case BCMBAL_TM_SCHED_DIR_US:
+                break;
+            case BCMBAL_TM_SCHED_DIR_DS:
+                break;
+            default:
+                *failed_prop = BCMBAL_TM_QUEUE_KEY_ID_SCHED_DIR;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_tm_queue_cfg_data_set_default(bcmbal_tm_queue_cfg_data *this, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_PRIORITY)) != 0)
+    {
+        this->priority = (bcmbal_tm_priority) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_WEIGHT)) != 0)
+    {
+        this->weight = (bcmbal_tm_weight) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_RATE)) != 0)
+    {
+        this->rate.presence_mask = (bcmbal_tm_shaping_id) 0;
+        this->rate.sbr = 0;
+        this->rate.pbr = 0;
+        this->rate.burst = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_BAC)) != 0)
+    {
+        this->bac.type = BCMBAL_TM_BAC_TYPE_TAILDROP;
+        this->bac.u.taildrop.max_size = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_CREATION_MODE)) != 0)
+    {
+        this->creation_mode = BCMBAL_TM_CREATION_MODE_MANUAL;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_REF_COUNT)) != 0)
+    {
+        this->ref_count = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_cfg_data_pack(const bcmbal_tm_queue_cfg_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_PRIORITY)) != 0)
+    {
+        if (!bcmbal_buf_write_u8(buf, (uint8_t) this->priority))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_WEIGHT)) != 0)
+    {
+        if (!bcmbal_buf_write_u8(buf, (uint8_t) this->weight))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_RATE)) != 0)
+    {
+        if (!bcmbal_tm_shaping_pack(&this->rate, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_BAC)) != 0)
+    {
+        if (!bcmbal_tm_bac_pack(&this->bac, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_CREATION_MODE)) != 0)
+    {
+        if (!bcmbal_tm_creation_mode_pack(this->creation_mode, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_REF_COUNT)) != 0)
+    {
+        if (!bcmbal_buf_write_u8(buf, this->ref_count))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_tm_queue_cfg_data_get_packed_length(const bcmbal_tm_queue_cfg_data *this, bcmbal_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_PRIORITY)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_WEIGHT)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_RATE)) != 0)
+    {
+        count += bcmbal_tm_shaping_get_packed_length(&this->rate);
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_BAC)) != 0)
+    {
+        count += bcmbal_tm_bac_get_packed_length(&this->bac);
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_CREATION_MODE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_REF_COUNT)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_cfg_data_unpack(bcmbal_tm_queue_cfg_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_PRIORITY)) != 0)
+    {
+        if (!bcmbal_buf_read_u8(buf, (uint8_t *) &this->priority))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_WEIGHT)) != 0)
+    {
+        if (!bcmbal_buf_read_u8(buf, (uint8_t *) &this->weight))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_RATE)) != 0)
+    {
+        if (!bcmbal_tm_shaping_unpack(&this->rate, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_BAC)) != 0)
+    {
+        if (!bcmbal_tm_bac_unpack(&this->bac, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_CREATION_MODE)) != 0)
+    {
+        if (!bcmbal_tm_creation_mode_unpack(&this->creation_mode, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_REF_COUNT)) != 0)
+    {
+        if (!bcmbal_buf_read_u8(buf, &this->ref_count))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_cfg_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_PRIORITY)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_WEIGHT)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_RATE)) != 0)
+    {
+        if (!bcmbal_tm_shaping_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_BAC)) != 0)
+    {
+        if (!bcmbal_tm_bac_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_CREATION_MODE)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_REF_COUNT)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_cfg_data_bounds_check(const bcmbal_tm_queue_cfg_data *this, bcmbal_presence_mask fields_present, bcmbal_tm_queue_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_RATE)) != 0)
+    {
+        if (!bcmbal_tm_shaping_bounds_check(&this->rate))
+        {
+            *failed_prop = BCMBAL_TM_QUEUE_CFG_ID_RATE;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_BAC)) != 0)
+    {
+        if (!bcmbal_tm_bac_bounds_check(&this->bac))
+        {
+            *failed_prop = BCMBAL_TM_QUEUE_CFG_ID_BAC;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_CREATION_MODE)) != 0)
+    {
+        switch (this->creation_mode)
+        {
+            case BCMBAL_TM_CREATION_MODE_MANUAL:
+                break;
+            case BCMBAL_TM_CREATION_MODE_AUTO:
+                break;
+            default:
+                *failed_prop = BCMBAL_TM_QUEUE_CFG_ID_CREATION_MODE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_tm_queue_stat_data_set_default(bcmbal_tm_queue_stat_data *this, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_STAT_ID_PACKETS_OK)) != 0)
+    {
+        this->packets_ok = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_STAT_ID_BYTES_OK)) != 0)
+    {
+        this->bytes_ok = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_STAT_ID_PACKETS_DISCARDED)) != 0)
+    {
+        this->packets_discarded = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_STAT_ID_BYTES_DISCARDED)) != 0)
+    {
+        this->bytes_discarded = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_stat_data_pack(const bcmbal_tm_queue_stat_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_STAT_ID_PACKETS_OK)) != 0)
+    {
+        if (!bcmbal_buf_write_u64(buf, this->packets_ok))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_STAT_ID_BYTES_OK)) != 0)
+    {
+        if (!bcmbal_buf_write_u64(buf, this->bytes_ok))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_STAT_ID_PACKETS_DISCARDED)) != 0)
+    {
+        if (!bcmbal_buf_write_u64(buf, this->packets_discarded))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_STAT_ID_BYTES_DISCARDED)) != 0)
+    {
+        if (!bcmbal_buf_write_u64(buf, this->bytes_discarded))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_tm_queue_stat_data_get_packed_length(const bcmbal_tm_queue_stat_data *this, bcmbal_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_STAT_ID_PACKETS_OK)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_STAT_ID_BYTES_OK)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_STAT_ID_PACKETS_DISCARDED)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_STAT_ID_BYTES_DISCARDED)) != 0)
+    {
+        count += 8;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_stat_data_unpack(bcmbal_tm_queue_stat_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_STAT_ID_PACKETS_OK)) != 0)
+    {
+        if (!bcmbal_buf_read_u64(buf, &this->packets_ok))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_STAT_ID_BYTES_OK)) != 0)
+    {
+        if (!bcmbal_buf_read_u64(buf, &this->bytes_ok))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_STAT_ID_PACKETS_DISCARDED)) != 0)
+    {
+        if (!bcmbal_buf_read_u64(buf, &this->packets_discarded))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_STAT_ID_BYTES_DISCARDED)) != 0)
+    {
+        if (!bcmbal_buf_read_u64(buf, &this->bytes_discarded))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_stat_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_STAT_ID_PACKETS_OK)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_STAT_ID_BYTES_OK)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_STAT_ID_PACKETS_DISCARDED)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_STAT_ID_BYTES_DISCARDED)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_stat_data_bounds_check(const bcmbal_tm_queue_stat_data *this, bcmbal_presence_mask fields_present, bcmbal_tm_queue_stat_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_tm_queue_ind_data_set_default(bcmbal_tm_queue_ind_data *this, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_IND_ID_RET)) != 0)
+    {
+        this->ret = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_ind_data_pack(const bcmbal_tm_queue_ind_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_IND_ID_RET)) != 0)
+    {
+        if (!bcmbal_buf_write_u32(buf, this->ret))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_tm_queue_ind_data_get_packed_length(const bcmbal_tm_queue_ind_data *this, bcmbal_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_IND_ID_RET)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_ind_data_unpack(bcmbal_tm_queue_ind_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_IND_ID_RET)) != 0)
+    {
+        if (!bcmbal_buf_read_u32(buf, &this->ret))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_ind_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_IND_ID_RET)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_ind_data_bounds_check(const bcmbal_tm_queue_ind_data *this, bcmbal_presence_mask fields_present, bcmbal_tm_queue_ind_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_tm_sched_key_set_default(bcmbal_tm_sched_key *this, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_KEY_ID_DIR)) != 0)
+    {
+        this->dir = (bcmbal_tm_sched_dir) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_KEY_ID_ID)) != 0)
+    {
+        this->id = (bcmbal_tm_sched_id) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_key_pack(const bcmbal_tm_sched_key *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_KEY_ID_DIR)) != 0)
+    {
+        if (!bcmbal_tm_sched_dir_pack(this->dir, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_KEY_ID_ID)) != 0)
+    {
+        if (!bcmbal_buf_write_u32(buf, (uint32_t) this->id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_tm_sched_key_get_packed_length(const bcmbal_tm_sched_key *this, bcmbal_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_KEY_ID_DIR)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_KEY_ID_ID)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_key_unpack(bcmbal_tm_sched_key *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_KEY_ID_DIR)) != 0)
+    {
+        if (!bcmbal_tm_sched_dir_unpack(&this->dir, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_KEY_ID_ID)) != 0)
+    {
+        if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_key_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_KEY_ID_DIR)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_KEY_ID_ID)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_key_bounds_check(const bcmbal_tm_sched_key *this, bcmbal_presence_mask fields_present, bcmbal_tm_sched_key_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_KEY_ID_DIR)) != 0)
+    {
+        switch (this->dir)
+        {
+            case BCMBAL_TM_SCHED_DIR_US:
+                break;
+            case BCMBAL_TM_SCHED_DIR_DS:
+                break;
+            default:
+                *failed_prop = BCMBAL_TM_SCHED_KEY_ID_DIR;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_tm_sched_cfg_data_set_default(bcmbal_tm_sched_cfg_data *this, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_OWNER)) != 0)
+    {
+        this->owner.type = BCMBAL_TM_SCHED_OWNER_TYPE_UNDEFINED;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SCHED_TYPE)) != 0)
+    {
+        this->sched_type = BCMBAL_TM_SCHED_TYPE_NONE;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SCHED_PARENT)) != 0)
+    {
+        this->sched_parent.presence_mask = (bcmbal_tm_sched_parent_id) 0;
+        this->sched_parent.sched_id = (bcmbal_tm_sched_id) 0;
+        this->sched_parent.priority = (bcmbal_tm_priority) 0;
+        this->sched_parent.weight = (bcmbal_tm_weight) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SCHED_CHILD_TYPE)) != 0)
+    {
+        this->sched_child_type = BCMBAL_TM_SCHED_CHILD_TYPE_QUEUE;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_RATE)) != 0)
+    {
+        this->rate.presence_mask = (bcmbal_tm_shaping_id) 0;
+        this->rate.sbr = 0;
+        this->rate.pbr = 0;
+        this->rate.burst = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_TCONT_SLA)) != 0)
+    {
+        this->tcont_sla.presence_mask = (bcmbal_tm_tcont_sla_id) 0;
+        this->tcont_sla.extra_bw_elig = BCMBAL_EXTRA_BW_ELIGIBILITY_TYPE_NONE;
+        this->tcont_sla.nrt_cbr = 0;
+        this->tcont_sla.rt_cbr = 0;
+        this->tcont_sla.rt_profile = 0;
+        this->tcont_sla.nrt_profile = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_CREATION_MODE)) != 0)
+    {
+        this->creation_mode = BCMBAL_TM_CREATION_MODE_MANUAL;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_QUEUES)) != 0)
+    {
+        this->queues.len = 0;
+        this->queues.val = NULL;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SUB_SCHEDS)) != 0)
+    {
+        this->sub_scheds.len = 0;
+        this->sub_scheds.val = NULL;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_NUM_PRIORITIES)) != 0)
+    {
+        this->num_priorities = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_cfg_data_pack(const bcmbal_tm_sched_cfg_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_OWNER)) != 0)
+    {
+        if (!bcmbal_tm_sched_owner_pack(&this->owner, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SCHED_TYPE)) != 0)
+    {
+        if (!bcmbal_tm_sched_type_pack(this->sched_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SCHED_PARENT)) != 0)
+    {
+        if (!bcmbal_tm_sched_parent_pack(&this->sched_parent, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SCHED_CHILD_TYPE)) != 0)
+    {
+        if (!bcmbal_tm_sched_child_type_pack(this->sched_child_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_RATE)) != 0)
+    {
+        if (!bcmbal_tm_shaping_pack(&this->rate, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_TCONT_SLA)) != 0)
+    {
+        if (!bcmbal_tm_tcont_sla_pack(&this->tcont_sla, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_CREATION_MODE)) != 0)
+    {
+        if (!bcmbal_tm_creation_mode_pack(this->creation_mode, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_QUEUES)) != 0)
+    {
+        if (!bcmbal_tm_queue_id_list_u8_pack(&this->queues, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SUB_SCHEDS)) != 0)
+    {
+        if (!bcmbal_tm_sched_id_list_u8_pack(&this->sub_scheds, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_NUM_PRIORITIES)) != 0)
+    {
+        if (!bcmbal_buf_write_u8(buf, this->num_priorities))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_tm_sched_cfg_data_get_packed_length(const bcmbal_tm_sched_cfg_data *this, bcmbal_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_OWNER)) != 0)
+    {
+        count += bcmbal_tm_sched_owner_get_packed_length(&this->owner);
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SCHED_TYPE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SCHED_PARENT)) != 0)
+    {
+        count += bcmbal_tm_sched_parent_get_packed_length(&this->sched_parent);
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SCHED_CHILD_TYPE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_RATE)) != 0)
+    {
+        count += bcmbal_tm_shaping_get_packed_length(&this->rate);
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_TCONT_SLA)) != 0)
+    {
+        count += bcmbal_tm_tcont_sla_get_packed_length(&this->tcont_sla);
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_CREATION_MODE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_QUEUES)) != 0)
+    {
+        count += bcmbal_tm_queue_id_list_u8_get_packed_length(&this->queues);
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SUB_SCHEDS)) != 0)
+    {
+        count += bcmbal_tm_sched_id_list_u8_get_packed_length(&this->sub_scheds);
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_NUM_PRIORITIES)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_cfg_data_unpack(bcmbal_tm_sched_cfg_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_OWNER)) != 0)
+    {
+        if (!bcmbal_tm_sched_owner_unpack(&this->owner, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SCHED_TYPE)) != 0)
+    {
+        if (!bcmbal_tm_sched_type_unpack(&this->sched_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SCHED_PARENT)) != 0)
+    {
+        if (!bcmbal_tm_sched_parent_unpack(&this->sched_parent, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SCHED_CHILD_TYPE)) != 0)
+    {
+        if (!bcmbal_tm_sched_child_type_unpack(&this->sched_child_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_RATE)) != 0)
+    {
+        if (!bcmbal_tm_shaping_unpack(&this->rate, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_TCONT_SLA)) != 0)
+    {
+        if (!bcmbal_tm_tcont_sla_unpack(&this->tcont_sla, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_CREATION_MODE)) != 0)
+    {
+        if (!bcmbal_tm_creation_mode_unpack(&this->creation_mode, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_QUEUES)) != 0)
+    {
+        if (!bcmbal_tm_queue_id_list_u8_unpack(&this->queues, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SUB_SCHEDS)) != 0)
+    {
+        if (!bcmbal_tm_sched_id_list_u8_unpack(&this->sub_scheds, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_NUM_PRIORITIES)) != 0)
+    {
+        if (!bcmbal_buf_read_u8(buf, &this->num_priorities))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_cfg_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_OWNER)) != 0)
+    {
+        if (!bcmbal_tm_sched_owner_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SCHED_TYPE)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SCHED_PARENT)) != 0)
+    {
+        if (!bcmbal_tm_sched_parent_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SCHED_CHILD_TYPE)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_RATE)) != 0)
+    {
+        if (!bcmbal_tm_shaping_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_TCONT_SLA)) != 0)
+    {
+        if (!bcmbal_tm_tcont_sla_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_CREATION_MODE)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_QUEUES)) != 0)
+    {
+        if (!bcmbal_tm_queue_id_list_u8_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SUB_SCHEDS)) != 0)
+    {
+        if (!bcmbal_tm_sched_id_list_u8_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_NUM_PRIORITIES)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_cfg_data_bounds_check(const bcmbal_tm_sched_cfg_data *this, bcmbal_presence_mask fields_present, bcmbal_tm_sched_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_OWNER)) != 0)
+    {
+        if (!bcmbal_tm_sched_owner_bounds_check(&this->owner))
+        {
+            *failed_prop = BCMBAL_TM_SCHED_CFG_ID_OWNER;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SCHED_TYPE)) != 0)
+    {
+        switch (this->sched_type)
+        {
+            case BCMBAL_TM_SCHED_TYPE_NONE:
+                break;
+            case BCMBAL_TM_SCHED_TYPE_WFQ:
+                break;
+            case BCMBAL_TM_SCHED_TYPE_SP:
+                break;
+            case BCMBAL_TM_SCHED_TYPE_SP_WFQ:
+                break;
+            default:
+                *failed_prop = BCMBAL_TM_SCHED_CFG_ID_SCHED_TYPE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SCHED_PARENT)) != 0)
+    {
+        if (!bcmbal_tm_sched_parent_bounds_check(&this->sched_parent))
+        {
+            *failed_prop = BCMBAL_TM_SCHED_CFG_ID_SCHED_PARENT;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SCHED_CHILD_TYPE)) != 0)
+    {
+        switch (this->sched_child_type)
+        {
+            case BCMBAL_TM_SCHED_CHILD_TYPE_QUEUE:
+                break;
+            case BCMBAL_TM_SCHED_CHILD_TYPE_SCHED:
+                break;
+            default:
+                *failed_prop = BCMBAL_TM_SCHED_CFG_ID_SCHED_CHILD_TYPE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_RATE)) != 0)
+    {
+        if (!bcmbal_tm_shaping_bounds_check(&this->rate))
+        {
+            *failed_prop = BCMBAL_TM_SCHED_CFG_ID_RATE;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_TCONT_SLA)) != 0)
+    {
+        if (!bcmbal_tm_tcont_sla_bounds_check(&this->tcont_sla))
+        {
+            *failed_prop = BCMBAL_TM_SCHED_CFG_ID_TCONT_SLA;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_CREATION_MODE)) != 0)
+    {
+        switch (this->creation_mode)
+        {
+            case BCMBAL_TM_CREATION_MODE_MANUAL:
+                break;
+            case BCMBAL_TM_CREATION_MODE_AUTO:
+                break;
+            default:
+                *failed_prop = BCMBAL_TM_SCHED_CFG_ID_CREATION_MODE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_QUEUES)) != 0)
+    {
+        if (!bcmbal_tm_queue_id_list_u8_bounds_check(&this->queues))
+        {
+            *failed_prop = BCMBAL_TM_SCHED_CFG_ID_QUEUES;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SUB_SCHEDS)) != 0)
+    {
+        if (!bcmbal_tm_sched_id_list_u8_bounds_check(&this->sub_scheds))
+        {
+            *failed_prop = BCMBAL_TM_SCHED_CFG_ID_SUB_SCHEDS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_tm_sched_ind_data_set_default(bcmbal_tm_sched_ind_data *this, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_IND_ID_RET)) != 0)
+    {
+        this->ret = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_ind_data_pack(const bcmbal_tm_sched_ind_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_IND_ID_RET)) != 0)
+    {
+        if (!bcmbal_buf_write_u32(buf, this->ret))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_tm_sched_ind_data_get_packed_length(const bcmbal_tm_sched_ind_data *this, bcmbal_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_IND_ID_RET)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_ind_data_unpack(bcmbal_tm_sched_ind_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_IND_ID_RET)) != 0)
+    {
+        if (!bcmbal_buf_read_u32(buf, &this->ret))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_ind_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMBAL_TM_SCHED_IND_ID_RET)) != 0)
+    {
+        if (!bcmbal_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_ind_data_bounds_check(const bcmbal_tm_sched_ind_data *this, bcmbal_presence_mask fields_present, bcmbal_tm_sched_ind_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+bcmos_bool bcmbal_obj_has_tag(bcmbal_obj_id obj, bcmbal_obj_tag tag)
+{
+    switch (obj)
+    {
+        default:
+            return BCMOS_FALSE;
+    }
+}
diff --git a/bal_release/src/lib/libobjmsg/bal_model_funcs.h b/bal_release/src/lib/libobjmsg/bal_model_funcs.h
new file mode 100644
index 0000000..a0f5dd0
--- /dev/null
+++ b/bal_release/src/lib/libobjmsg/bal_model_funcs.h
@@ -0,0 +1,3441 @@
+#ifndef BAL_MODEL_FUNCS
+#define BAL_MODEL_FUNCS
+
+#include "bcmos_system.h"
+#include "bcmos_errno.h"
+#include "bal_buf.h"
+#include "bal_model_ids.h"
+#include "bal_model_types.h"
+
+/** Packs a bcmbal_access_terminal_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_access_terminal_cfg_id_pack(bcmbal_access_terminal_cfg_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_access_terminal_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_access_terminal_cfg_id_unpack(bcmbal_access_terminal_cfg_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_access_terminal_ind_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_access_terminal_ind_id_pack(bcmbal_access_terminal_ind_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_access_terminal_ind_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_access_terminal_ind_id_unpack(bcmbal_access_terminal_ind_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_access_terminal_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_access_terminal_key_id_pack(bcmbal_access_terminal_key_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_access_terminal_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_access_terminal_key_id_unpack(bcmbal_access_terminal_key_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_action_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_action_id_pack(bcmbal_action_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_action_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_action_id_unpack(bcmbal_action_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_action_cmd_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_action_cmd_id_pack(bcmbal_action_cmd_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_action_cmd_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_action_cmd_id_unpack(bcmbal_action_cmd_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_classifier_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_classifier_id_pack(bcmbal_classifier_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_classifier_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_classifier_id_unpack(bcmbal_classifier_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_pkt_tag_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_pkt_tag_type_pack(bcmbal_pkt_tag_type this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_pkt_tag_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_pkt_tag_type_unpack(bcmbal_pkt_tag_type *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_control to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_control_pack(bcmbal_control this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_control from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_control_unpack(bcmbal_control *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_dest_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_dest_type_pack(bcmbal_dest_type this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_dest_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_dest_type_unpack(bcmbal_dest_type *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_ds_miss_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_ds_miss_mode_pack(bcmbal_ds_miss_mode this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_ds_miss_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_ds_miss_mode_unpack(bcmbal_ds_miss_mode *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_extra_bw_eligibility_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_extra_bw_eligibility_type_pack(bcmbal_extra_bw_eligibility_type this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_extra_bw_eligibility_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_extra_bw_eligibility_type_unpack(bcmbal_extra_bw_eligibility_type *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_flow_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_flow_cfg_id_pack(bcmbal_flow_cfg_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_flow_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_flow_cfg_id_unpack(bcmbal_flow_cfg_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_flow_ind_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_flow_ind_id_pack(bcmbal_flow_ind_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_flow_ind_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_flow_ind_id_unpack(bcmbal_flow_ind_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_flow_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_flow_key_id_pack(bcmbal_flow_key_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_flow_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_flow_key_id_unpack(bcmbal_flow_key_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_flow_stat_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_flow_stat_id_pack(bcmbal_flow_stat_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_flow_stat_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_flow_stat_id_unpack(bcmbal_flow_stat_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_flow_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_flow_type_pack(bcmbal_flow_type this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_flow_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_flow_type_unpack(bcmbal_flow_type *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_group_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_group_cfg_id_pack(bcmbal_group_cfg_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_group_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_group_cfg_id_unpack(bcmbal_group_cfg_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_group_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_group_key_id_pack(bcmbal_group_key_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_group_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_group_key_id_unpack(bcmbal_group_key_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_group_member_cmd to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_group_member_cmd_pack(bcmbal_group_member_cmd this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_group_member_cmd from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_group_member_cmd_unpack(bcmbal_group_member_cmd *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_group_owner to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_group_owner_pack(bcmbal_group_owner this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_group_owner from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_group_owner_unpack(bcmbal_group_owner *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_interface_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_interface_cfg_id_pack(bcmbal_interface_cfg_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_interface_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_interface_cfg_id_unpack(bcmbal_interface_cfg_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_interface_ind_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_interface_ind_id_pack(bcmbal_interface_ind_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_interface_ind_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_interface_ind_id_unpack(bcmbal_interface_ind_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_interface_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_interface_key_id_pack(bcmbal_interface_key_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_interface_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_interface_key_id_unpack(bcmbal_interface_key_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_interface_stat_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_interface_stat_id_pack(bcmbal_interface_stat_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_interface_stat_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_interface_stat_id_unpack(bcmbal_interface_stat_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_intf_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_intf_type_pack(bcmbal_intf_type this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_intf_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_intf_type_unpack(bcmbal_intf_type *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_iwf_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_iwf_mode_pack(bcmbal_iwf_mode this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_iwf_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_iwf_mode_unpack(bcmbal_iwf_mode *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_packet_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_packet_cfg_id_pack(bcmbal_packet_cfg_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_packet_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_packet_cfg_id_unpack(bcmbal_packet_cfg_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_packet_ind_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_packet_ind_id_pack(bcmbal_packet_ind_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_packet_ind_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_packet_ind_id_unpack(bcmbal_packet_ind_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_packet_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_packet_key_id_pack(bcmbal_packet_key_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_packet_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_packet_key_id_unpack(bcmbal_packet_key_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_sla_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_sla_id_pack(bcmbal_sla_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_sla_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_sla_id_unpack(bcmbal_sla_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_state to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_state_pack(bcmbal_state this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_state from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_state_unpack(bcmbal_state *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_status to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_status_pack(bcmbal_status this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_status from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_status_unpack(bcmbal_status *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_subscriber_terminal_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_subscriber_terminal_cfg_id_pack(bcmbal_subscriber_terminal_cfg_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_subscriber_terminal_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_subscriber_terminal_cfg_id_unpack(bcmbal_subscriber_terminal_cfg_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_subscriber_terminal_ind_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_subscriber_terminal_ind_id_pack(bcmbal_subscriber_terminal_ind_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_subscriber_terminal_ind_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_subscriber_terminal_ind_id_unpack(bcmbal_subscriber_terminal_ind_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_subscriber_terminal_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_subscriber_terminal_key_id_pack(bcmbal_subscriber_terminal_key_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_subscriber_terminal_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_subscriber_terminal_key_id_unpack(bcmbal_subscriber_terminal_key_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_subscriber_terminal_stat_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_subscriber_terminal_stat_id_pack(bcmbal_subscriber_terminal_stat_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_subscriber_terminal_stat_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_subscriber_terminal_stat_id_unpack(bcmbal_subscriber_terminal_stat_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_tm_bac_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_tm_bac_type_pack(bcmbal_tm_bac_type this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_tm_bac_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_tm_bac_type_unpack(bcmbal_tm_bac_type *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_tm_creation_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_tm_creation_mode_pack(bcmbal_tm_creation_mode this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_tm_creation_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_tm_creation_mode_unpack(bcmbal_tm_creation_mode *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_tm_queue_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_tm_queue_cfg_id_pack(bcmbal_tm_queue_cfg_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_tm_queue_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_tm_queue_cfg_id_unpack(bcmbal_tm_queue_cfg_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_tm_queue_ind_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_tm_queue_ind_id_pack(bcmbal_tm_queue_ind_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_tm_queue_ind_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_tm_queue_ind_id_unpack(bcmbal_tm_queue_ind_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_tm_queue_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_tm_queue_key_id_pack(bcmbal_tm_queue_key_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_tm_queue_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_tm_queue_key_id_unpack(bcmbal_tm_queue_key_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_tm_queue_stat_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_tm_queue_stat_id_pack(bcmbal_tm_queue_stat_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_tm_queue_stat_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_tm_queue_stat_id_unpack(bcmbal_tm_queue_stat_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_tm_sched_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_tm_sched_cfg_id_pack(bcmbal_tm_sched_cfg_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_tm_sched_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_tm_sched_cfg_id_unpack(bcmbal_tm_sched_cfg_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_tm_sched_child_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_tm_sched_child_type_pack(bcmbal_tm_sched_child_type this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_tm_sched_child_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_tm_sched_child_type_unpack(bcmbal_tm_sched_child_type *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_tm_sched_dir to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_tm_sched_dir_pack(bcmbal_tm_sched_dir this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_tm_sched_dir from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_tm_sched_dir_unpack(bcmbal_tm_sched_dir *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_tm_sched_ind_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_tm_sched_ind_id_pack(bcmbal_tm_sched_ind_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_tm_sched_ind_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_tm_sched_ind_id_unpack(bcmbal_tm_sched_ind_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_tm_sched_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_tm_sched_key_id_pack(bcmbal_tm_sched_key_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_tm_sched_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_tm_sched_key_id_unpack(bcmbal_tm_sched_key_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_tm_sched_owner_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_tm_sched_owner_type_pack(bcmbal_tm_sched_owner_type this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_tm_sched_owner_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_tm_sched_owner_type_unpack(bcmbal_tm_sched_owner_type *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_tm_sched_owner_agg_port_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_tm_sched_owner_agg_port_id_pack(bcmbal_tm_sched_owner_agg_port_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_tm_sched_owner_agg_port_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_tm_sched_owner_agg_port_id_unpack(bcmbal_tm_sched_owner_agg_port_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_tm_sched_parent_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_tm_sched_parent_id_pack(bcmbal_tm_sched_parent_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_tm_sched_parent_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_tm_sched_parent_id_unpack(bcmbal_tm_sched_parent_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_tm_sched_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_tm_sched_type_pack(bcmbal_tm_sched_type this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_tm_sched_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_tm_sched_type_unpack(bcmbal_tm_sched_type *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_tm_shaping_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_tm_shaping_id_pack(bcmbal_tm_shaping_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_tm_shaping_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_tm_shaping_id_unpack(bcmbal_tm_shaping_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_tm_tcont_sla_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_tm_tcont_sla_id_pack(bcmbal_tm_tcont_sla_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_tm_tcont_sla_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_tm_tcont_sla_id_unpack(bcmbal_tm_tcont_sla_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_trx_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmbal_trx_type_pack(bcmbal_trx_type this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_trx_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmbal_trx_type_unpack(bcmbal_trx_type *this, bcmbal_buf *buf);
+
+/** Initializes a bcmbal_action struct.  This sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmbal_action_set_default(bcmbal_action *this);
+
+/** Packs a bcmbal_action to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_action_pack(const bcmbal_action *this, bcmbal_buf *buf);
+
+/** Gets the number of bytes that a bcmbal_action would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmbal_action_get_packed_length(const bcmbal_action *this);
+
+/** Unpacks a bcmbal_action from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_action_unpack(bcmbal_action *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_action struct and collects memory requirements 
+ * above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_action_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_action is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_action_bounds_check(const bcmbal_action *this);
+
+/** Initializes a bcmbal_aggregation_port_id_list_u8 struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmbal_aggregation_port_id_list_u8_set_default(bcmbal_aggregation_port_id_list_u8 *this);
+
+/** Packs a bcmbal_aggregation_port_id_list_u8 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_aggregation_port_id_list_u8_pack(const bcmbal_aggregation_port_id_list_u8 *this, bcmbal_buf *buf);
+
+/** Gets the number of bytes that a bcmbal_aggregation_port_id_list_u8 would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmbal_aggregation_port_id_list_u8_get_packed_length(const bcmbal_aggregation_port_id_list_u8 *this);
+
+/** Unpacks a bcmbal_aggregation_port_id_list_u8 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_aggregation_port_id_list_u8_unpack(bcmbal_aggregation_port_id_list_u8 *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_aggregation_port_id_list_u8 struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_aggregation_port_id_list_u8_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_aggregation_port_id_list_u8 is out of 
+ * bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_aggregation_port_id_list_u8_bounds_check(const bcmbal_aggregation_port_id_list_u8 *this);
+
+/** Initializes a bcmbal_classifier struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmbal_classifier_set_default(bcmbal_classifier *this);
+
+/** Packs a bcmbal_classifier to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_classifier_pack(const bcmbal_classifier *this, bcmbal_buf *buf);
+
+/** Gets the number of bytes that a bcmbal_classifier would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmbal_classifier_get_packed_length(const bcmbal_classifier *this);
+
+/** Unpacks a bcmbal_classifier from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_classifier_unpack(bcmbal_classifier *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_classifier struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_classifier_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_classifier is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_classifier_bounds_check(const bcmbal_classifier *this);
+
+/** Initializes a bcmbal_dest struct.  This sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmbal_dest_set_default(bcmbal_dest *this);
+
+/** Packs a bcmbal_dest to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_dest_pack(const bcmbal_dest *this, bcmbal_buf *buf);
+
+/** Gets the number of bytes that a bcmbal_dest would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmbal_dest_get_packed_length(const bcmbal_dest *this);
+
+/** Unpacks a bcmbal_dest from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_dest_unpack(bcmbal_dest *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_dest struct and collects memory requirements 
+ * above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_dest_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_dest is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_dest_bounds_check(const bcmbal_dest *this);
+
+/** Initializes a bcmbal_flow_id_list_u32 struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmbal_flow_id_list_u32_set_default(bcmbal_flow_id_list_u32 *this);
+
+/** Packs a bcmbal_flow_id_list_u32 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_flow_id_list_u32_pack(const bcmbal_flow_id_list_u32 *this, bcmbal_buf *buf);
+
+/** Gets the number of bytes that a bcmbal_flow_id_list_u32 would occupy on the 
+ * wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmbal_flow_id_list_u32_get_packed_length(const bcmbal_flow_id_list_u32 *this);
+
+/** Unpacks a bcmbal_flow_id_list_u32 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_flow_id_list_u32_unpack(bcmbal_flow_id_list_u32 *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_flow_id_list_u32 struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_flow_id_list_u32_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_flow_id_list_u32 is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_flow_id_list_u32_bounds_check(const bcmbal_flow_id_list_u32 *this);
+
+/** Initializes a bcmbal_tm_queue_ref struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmbal_tm_queue_ref_set_default(bcmbal_tm_queue_ref *this);
+
+/** Packs a bcmbal_tm_queue_ref to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_queue_ref_pack(const bcmbal_tm_queue_ref *this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_tm_queue_ref from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_queue_ref_unpack(bcmbal_tm_queue_ref *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_tm_queue_ref struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_tm_queue_ref_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_tm_queue_ref is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_queue_ref_bounds_check(const bcmbal_tm_queue_ref *this);
+
+/** Initializes a bcmbal_group_member_info struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmbal_group_member_info_set_default(bcmbal_group_member_info *this);
+
+/** Packs a bcmbal_group_member_info to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_group_member_info_pack(const bcmbal_group_member_info *this, bcmbal_buf *buf);
+
+/** Gets the number of bytes that a bcmbal_group_member_info would occupy on the 
+ * wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmbal_group_member_info_get_packed_length(const bcmbal_group_member_info *this);
+
+/** Unpacks a bcmbal_group_member_info from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_group_member_info_unpack(bcmbal_group_member_info *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_group_member_info struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_group_member_info_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_group_member_info is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_group_member_info_bounds_check(const bcmbal_group_member_info *this);
+
+/** Initializes a bcmbal_group_member_info_list_u16 struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmbal_group_member_info_list_u16_set_default(bcmbal_group_member_info_list_u16 *this);
+
+/** Packs a bcmbal_group_member_info_list_u16 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_group_member_info_list_u16_pack(const bcmbal_group_member_info_list_u16 *this, bcmbal_buf *buf);
+
+/** Gets the number of bytes that a bcmbal_group_member_info_list_u16 would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmbal_group_member_info_list_u16_get_packed_length(const bcmbal_group_member_info_list_u16 *this);
+
+/** Unpacks a bcmbal_group_member_info_list_u16 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_group_member_info_list_u16_unpack(bcmbal_group_member_info_list_u16 *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_group_member_info_list_u16 struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_group_member_info_list_u16_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_group_member_info_list_u16 is out of 
+ * bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_group_member_info_list_u16_bounds_check(const bcmbal_group_member_info_list_u16 *this);
+
+/** Initializes a bcmbal_password struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmbal_password_set_default(bcmbal_password *this);
+
+/** Packs a bcmbal_password to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_password_pack(const bcmbal_password *this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_password from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_password_unpack(bcmbal_password *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_password struct and collects memory requirements 
+ * above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_password_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_password is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_password_bounds_check(const bcmbal_password *this);
+
+/** Initializes a bcmbal_registration_id struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmbal_registration_id_set_default(bcmbal_registration_id *this);
+
+/** Packs a bcmbal_registration_id to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_registration_id_pack(const bcmbal_registration_id *this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_registration_id from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_registration_id_unpack(bcmbal_registration_id *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_registration_id struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_registration_id_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_registration_id is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_registration_id_bounds_check(const bcmbal_registration_id *this);
+
+/** Initializes a bcmbal_serial_number struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmbal_serial_number_set_default(bcmbal_serial_number *this);
+
+/** Packs a bcmbal_serial_number to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_serial_number_pack(const bcmbal_serial_number *this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_serial_number from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_serial_number_unpack(bcmbal_serial_number *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_serial_number struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_serial_number_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_serial_number is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_serial_number_bounds_check(const bcmbal_serial_number *this);
+
+/** Initializes a bcmbal_service_port_id_list_u8 struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmbal_service_port_id_list_u8_set_default(bcmbal_service_port_id_list_u8 *this);
+
+/** Packs a bcmbal_service_port_id_list_u8 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_service_port_id_list_u8_pack(const bcmbal_service_port_id_list_u8 *this, bcmbal_buf *buf);
+
+/** Gets the number of bytes that a bcmbal_service_port_id_list_u8 would occupy 
+ * on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmbal_service_port_id_list_u8_get_packed_length(const bcmbal_service_port_id_list_u8 *this);
+
+/** Unpacks a bcmbal_service_port_id_list_u8 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_service_port_id_list_u8_unpack(bcmbal_service_port_id_list_u8 *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_service_port_id_list_u8 struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_service_port_id_list_u8_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_service_port_id_list_u8 is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_service_port_id_list_u8_bounds_check(const bcmbal_service_port_id_list_u8 *this);
+
+/** Initializes a bcmbal_sla struct.  This sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmbal_sla_set_default(bcmbal_sla *this);
+
+/** Packs a bcmbal_sla to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_sla_pack(const bcmbal_sla *this, bcmbal_buf *buf);
+
+/** Gets the number of bytes that a bcmbal_sla would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmbal_sla_get_packed_length(const bcmbal_sla *this);
+
+/** Unpacks a bcmbal_sla from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_sla_unpack(bcmbal_sla *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_sla struct and collects memory requirements above 
+ * and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_sla_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_sla is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_sla_bounds_check(const bcmbal_sla *this);
+
+/** Initializes a bcmbal_sub_id_list_u16 struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmbal_sub_id_list_u16_set_default(bcmbal_sub_id_list_u16 *this);
+
+/** Packs a bcmbal_sub_id_list_u16 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_sub_id_list_u16_pack(const bcmbal_sub_id_list_u16 *this, bcmbal_buf *buf);
+
+/** Gets the number of bytes that a bcmbal_sub_id_list_u16 would occupy on the 
+ * wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmbal_sub_id_list_u16_get_packed_length(const bcmbal_sub_id_list_u16 *this);
+
+/** Unpacks a bcmbal_sub_id_list_u16 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_sub_id_list_u16_unpack(bcmbal_sub_id_list_u16 *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_sub_id_list_u16 struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_sub_id_list_u16_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_sub_id_list_u16 is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_sub_id_list_u16_bounds_check(const bcmbal_sub_id_list_u16 *this);
+
+/** Initializes a bcmbal_tm_red struct.  This sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmbal_tm_red_set_default(bcmbal_tm_red *this);
+
+/** Packs a bcmbal_tm_red to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_red_pack(const bcmbal_tm_red *this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_tm_red from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_red_unpack(bcmbal_tm_red *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_tm_red struct and collects memory requirements 
+ * above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_tm_red_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_tm_red is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_red_bounds_check(const bcmbal_tm_red *this);
+
+/** Initializes a bcmbal_tm_bac struct.  This sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmbal_tm_bac_set_default(bcmbal_tm_bac *this);
+
+/** Packs a bcmbal_tm_bac to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_bac_pack(const bcmbal_tm_bac *this, bcmbal_buf *buf);
+
+/** Gets the number of bytes that a bcmbal_tm_bac would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmbal_tm_bac_get_packed_length(const bcmbal_tm_bac *this);
+
+/** Unpacks a bcmbal_tm_bac from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_bac_unpack(bcmbal_tm_bac *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_tm_bac struct and collects memory requirements 
+ * above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_tm_bac_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_tm_bac is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_bac_bounds_check(const bcmbal_tm_bac *this);
+
+/** Initializes a bcmbal_tm_queue_id_list_u8 struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmbal_tm_queue_id_list_u8_set_default(bcmbal_tm_queue_id_list_u8 *this);
+
+/** Packs a bcmbal_tm_queue_id_list_u8 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_queue_id_list_u8_pack(const bcmbal_tm_queue_id_list_u8 *this, bcmbal_buf *buf);
+
+/** Gets the number of bytes that a bcmbal_tm_queue_id_list_u8 would occupy on 
+ * the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmbal_tm_queue_id_list_u8_get_packed_length(const bcmbal_tm_queue_id_list_u8 *this);
+
+/** Unpacks a bcmbal_tm_queue_id_list_u8 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_queue_id_list_u8_unpack(bcmbal_tm_queue_id_list_u8 *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_tm_queue_id_list_u8 struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_tm_queue_id_list_u8_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_tm_queue_id_list_u8 is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_queue_id_list_u8_bounds_check(const bcmbal_tm_queue_id_list_u8 *this);
+
+/** Initializes a bcmbal_tm_sched_id_list_u8 struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmbal_tm_sched_id_list_u8_set_default(bcmbal_tm_sched_id_list_u8 *this);
+
+/** Packs a bcmbal_tm_sched_id_list_u8 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_sched_id_list_u8_pack(const bcmbal_tm_sched_id_list_u8 *this, bcmbal_buf *buf);
+
+/** Gets the number of bytes that a bcmbal_tm_sched_id_list_u8 would occupy on 
+ * the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmbal_tm_sched_id_list_u8_get_packed_length(const bcmbal_tm_sched_id_list_u8 *this);
+
+/** Unpacks a bcmbal_tm_sched_id_list_u8 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_sched_id_list_u8_unpack(bcmbal_tm_sched_id_list_u8 *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_tm_sched_id_list_u8 struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_tm_sched_id_list_u8_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_tm_sched_id_list_u8 is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_sched_id_list_u8_bounds_check(const bcmbal_tm_sched_id_list_u8 *this);
+
+/** Initializes a bcmbal_tm_sched_owner struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmbal_tm_sched_owner_set_default(bcmbal_tm_sched_owner *this);
+
+/** Packs a bcmbal_tm_sched_owner to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_sched_owner_pack(const bcmbal_tm_sched_owner *this, bcmbal_buf *buf);
+
+/** Gets the number of bytes that a bcmbal_tm_sched_owner would occupy on the 
+ * wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmbal_tm_sched_owner_get_packed_length(const bcmbal_tm_sched_owner *this);
+
+/** Unpacks a bcmbal_tm_sched_owner from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_sched_owner_unpack(bcmbal_tm_sched_owner *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_tm_sched_owner struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_tm_sched_owner_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_tm_sched_owner is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_sched_owner_bounds_check(const bcmbal_tm_sched_owner *this);
+
+/** Initializes a bcmbal_tm_sched_parent struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmbal_tm_sched_parent_set_default(bcmbal_tm_sched_parent *this);
+
+/** Packs a bcmbal_tm_sched_parent to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_sched_parent_pack(const bcmbal_tm_sched_parent *this, bcmbal_buf *buf);
+
+/** Gets the number of bytes that a bcmbal_tm_sched_parent would occupy on the 
+ * wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmbal_tm_sched_parent_get_packed_length(const bcmbal_tm_sched_parent *this);
+
+/** Unpacks a bcmbal_tm_sched_parent from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_sched_parent_unpack(bcmbal_tm_sched_parent *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_tm_sched_parent struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_tm_sched_parent_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_tm_sched_parent is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_sched_parent_bounds_check(const bcmbal_tm_sched_parent *this);
+
+/** Initializes a bcmbal_tm_shaping struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmbal_tm_shaping_set_default(bcmbal_tm_shaping *this);
+
+/** Packs a bcmbal_tm_shaping to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_shaping_pack(const bcmbal_tm_shaping *this, bcmbal_buf *buf);
+
+/** Gets the number of bytes that a bcmbal_tm_shaping would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmbal_tm_shaping_get_packed_length(const bcmbal_tm_shaping *this);
+
+/** Unpacks a bcmbal_tm_shaping from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_shaping_unpack(bcmbal_tm_shaping *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_tm_shaping struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_tm_shaping_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_tm_shaping is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_shaping_bounds_check(const bcmbal_tm_shaping *this);
+
+/** Initializes a bcmbal_tm_tcont_sla struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmbal_tm_tcont_sla_set_default(bcmbal_tm_tcont_sla *this);
+
+/** Packs a bcmbal_tm_tcont_sla to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_tcont_sla_pack(const bcmbal_tm_tcont_sla *this, bcmbal_buf *buf);
+
+/** Gets the number of bytes that a bcmbal_tm_tcont_sla would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmbal_tm_tcont_sla_get_packed_length(const bcmbal_tm_tcont_sla *this);
+
+/** Unpacks a bcmbal_tm_tcont_sla from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_tcont_sla_unpack(bcmbal_tm_tcont_sla *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_tm_tcont_sla struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_tm_tcont_sla_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_tm_tcont_sla is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_tcont_sla_bounds_check(const bcmbal_tm_tcont_sla *this);
+
+/** Initializes a bcmbal_u8_list_u32 struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmbal_u8_list_u32_set_default(bcmbal_u8_list_u32 *this);
+
+/** Packs a bcmbal_u8_list_u32 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_u8_list_u32_pack(const bcmbal_u8_list_u32 *this, bcmbal_buf *buf);
+
+/** Gets the number of bytes that a bcmbal_u8_list_u32 would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmbal_u8_list_u32_get_packed_length(const bcmbal_u8_list_u32 *this);
+
+/** Unpacks a bcmbal_u8_list_u32 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_u8_list_u32_unpack(bcmbal_u8_list_u32 *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_u8_list_u32 struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_u8_list_u32_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_u8_list_u32 is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_u8_list_u32_bounds_check(const bcmbal_u8_list_u32 *this);
+
+/** Initializes a bcmbal_access_terminal_key struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmbal_access_terminal_key_set_default(bcmbal_access_terminal_key *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_access_terminal_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_access_terminal_key_pack(const bcmbal_access_terminal_key *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_access_terminal_key would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmbal_access_terminal_key_get_packed_length(const bcmbal_access_terminal_key *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_access_terminal_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_access_terminal_key_unpack(bcmbal_access_terminal_key *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_access_terminal_key struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_access_terminal_key_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_access_terminal_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_access_terminal_key_bounds_check(const bcmbal_access_terminal_key *this, bcmbal_presence_mask fields_present, bcmbal_access_terminal_key_id *failed_prop);
+
+/** Initializes a bcmbal_access_terminal_cfg_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmbal_access_terminal_cfg_data_set_default(bcmbal_access_terminal_cfg_data *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_access_terminal_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_access_terminal_cfg_data_pack(const bcmbal_access_terminal_cfg_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_access_terminal_cfg_data would occupy 
+ * on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmbal_access_terminal_cfg_data_get_packed_length(const bcmbal_access_terminal_cfg_data *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_access_terminal_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_access_terminal_cfg_data_unpack(bcmbal_access_terminal_cfg_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_access_terminal_cfg_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_access_terminal_cfg_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_access_terminal_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_access_terminal_cfg_data_bounds_check(const bcmbal_access_terminal_cfg_data *this, bcmbal_presence_mask fields_present, bcmbal_access_terminal_cfg_id *failed_prop);
+
+/** Initializes a bcmbal_access_terminal_ind_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmbal_access_terminal_ind_data_set_default(bcmbal_access_terminal_ind_data *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_access_terminal_ind_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_access_terminal_ind_data_pack(const bcmbal_access_terminal_ind_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_access_terminal_ind_data would occupy 
+ * on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmbal_access_terminal_ind_data_get_packed_length(const bcmbal_access_terminal_ind_data *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_access_terminal_ind_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_access_terminal_ind_data_unpack(bcmbal_access_terminal_ind_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_access_terminal_ind_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_access_terminal_ind_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_access_terminal_ind_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_access_terminal_ind_data_bounds_check(const bcmbal_access_terminal_ind_data *this, bcmbal_presence_mask fields_present, bcmbal_access_terminal_ind_id *failed_prop);
+
+/** Initializes a bcmbal_flow_key struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmbal_flow_key_set_default(bcmbal_flow_key *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_flow_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_flow_key_pack(const bcmbal_flow_key *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_flow_key would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmbal_flow_key_get_packed_length(const bcmbal_flow_key *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_flow_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_flow_key_unpack(bcmbal_flow_key *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_flow_key struct and collects memory requirements 
+ * above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_flow_key_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_flow_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_flow_key_bounds_check(const bcmbal_flow_key *this, bcmbal_presence_mask fields_present, bcmbal_flow_key_id *failed_prop);
+
+/** Initializes a bcmbal_flow_cfg_data struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmbal_flow_cfg_data_set_default(bcmbal_flow_cfg_data *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_flow_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_flow_cfg_data_pack(const bcmbal_flow_cfg_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_flow_cfg_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmbal_flow_cfg_data_get_packed_length(const bcmbal_flow_cfg_data *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_flow_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_flow_cfg_data_unpack(bcmbal_flow_cfg_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_flow_cfg_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_flow_cfg_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_flow_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_flow_cfg_data_bounds_check(const bcmbal_flow_cfg_data *this, bcmbal_presence_mask fields_present, bcmbal_flow_cfg_id *failed_prop);
+
+/** Initializes a bcmbal_flow_stat_data struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmbal_flow_stat_data_set_default(bcmbal_flow_stat_data *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_flow_stat_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_flow_stat_data_pack(const bcmbal_flow_stat_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_flow_stat_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmbal_flow_stat_data_get_packed_length(const bcmbal_flow_stat_data *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_flow_stat_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_flow_stat_data_unpack(bcmbal_flow_stat_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_flow_stat_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_flow_stat_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_flow_stat_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_flow_stat_data_bounds_check(const bcmbal_flow_stat_data *this, bcmbal_presence_mask fields_present, bcmbal_flow_stat_id *failed_prop);
+
+/** Initializes a bcmbal_flow_ind_data struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmbal_flow_ind_data_set_default(bcmbal_flow_ind_data *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_flow_ind_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_flow_ind_data_pack(const bcmbal_flow_ind_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_flow_ind_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmbal_flow_ind_data_get_packed_length(const bcmbal_flow_ind_data *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_flow_ind_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_flow_ind_data_unpack(bcmbal_flow_ind_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_flow_ind_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_flow_ind_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_flow_ind_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_flow_ind_data_bounds_check(const bcmbal_flow_ind_data *this, bcmbal_presence_mask fields_present, bcmbal_flow_ind_id *failed_prop);
+
+/** Initializes a bcmbal_group_key struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmbal_group_key_set_default(bcmbal_group_key *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_group_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_group_key_pack(const bcmbal_group_key *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_group_key would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmbal_group_key_get_packed_length(const bcmbal_group_key *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_group_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_group_key_unpack(bcmbal_group_key *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_group_key struct and collects memory requirements 
+ * above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_group_key_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_group_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_group_key_bounds_check(const bcmbal_group_key *this, bcmbal_presence_mask fields_present, bcmbal_group_key_id *failed_prop);
+
+/** Initializes a bcmbal_group_cfg_data struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmbal_group_cfg_data_set_default(bcmbal_group_cfg_data *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_group_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_group_cfg_data_pack(const bcmbal_group_cfg_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_group_cfg_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmbal_group_cfg_data_get_packed_length(const bcmbal_group_cfg_data *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_group_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_group_cfg_data_unpack(bcmbal_group_cfg_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_group_cfg_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_group_cfg_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_group_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_group_cfg_data_bounds_check(const bcmbal_group_cfg_data *this, bcmbal_presence_mask fields_present, bcmbal_group_cfg_id *failed_prop);
+
+/** Initializes a bcmbal_interface_key struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmbal_interface_key_set_default(bcmbal_interface_key *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_interface_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_interface_key_pack(const bcmbal_interface_key *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_interface_key would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmbal_interface_key_get_packed_length(const bcmbal_interface_key *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_interface_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_interface_key_unpack(bcmbal_interface_key *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_interface_key struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_interface_key_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_interface_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_interface_key_bounds_check(const bcmbal_interface_key *this, bcmbal_presence_mask fields_present, bcmbal_interface_key_id *failed_prop);
+
+/** Initializes a bcmbal_interface_cfg_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmbal_interface_cfg_data_set_default(bcmbal_interface_cfg_data *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_interface_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_interface_cfg_data_pack(const bcmbal_interface_cfg_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_interface_cfg_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmbal_interface_cfg_data_get_packed_length(const bcmbal_interface_cfg_data *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_interface_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_interface_cfg_data_unpack(bcmbal_interface_cfg_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_interface_cfg_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_interface_cfg_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_interface_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_interface_cfg_data_bounds_check(const bcmbal_interface_cfg_data *this, bcmbal_presence_mask fields_present, bcmbal_interface_cfg_id *failed_prop);
+
+/** Initializes a bcmbal_interface_stat_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmbal_interface_stat_data_set_default(bcmbal_interface_stat_data *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_interface_stat_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_interface_stat_data_pack(const bcmbal_interface_stat_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_interface_stat_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmbal_interface_stat_data_get_packed_length(const bcmbal_interface_stat_data *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_interface_stat_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_interface_stat_data_unpack(bcmbal_interface_stat_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_interface_stat_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_interface_stat_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_interface_stat_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_interface_stat_data_bounds_check(const bcmbal_interface_stat_data *this, bcmbal_presence_mask fields_present, bcmbal_interface_stat_id *failed_prop);
+
+/** Initializes a bcmbal_interface_ind_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmbal_interface_ind_data_set_default(bcmbal_interface_ind_data *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_interface_ind_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_interface_ind_data_pack(const bcmbal_interface_ind_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_interface_ind_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmbal_interface_ind_data_get_packed_length(const bcmbal_interface_ind_data *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_interface_ind_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_interface_ind_data_unpack(bcmbal_interface_ind_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_interface_ind_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_interface_ind_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_interface_ind_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_interface_ind_data_bounds_check(const bcmbal_interface_ind_data *this, bcmbal_presence_mask fields_present, bcmbal_interface_ind_id *failed_prop);
+
+/** Initializes a bcmbal_packet_key struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmbal_packet_key_set_default(bcmbal_packet_key *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_packet_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_packet_key_pack(const bcmbal_packet_key *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_packet_key would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmbal_packet_key_get_packed_length(const bcmbal_packet_key *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_packet_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_packet_key_unpack(bcmbal_packet_key *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_packet_key struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_packet_key_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_packet_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_packet_key_bounds_check(const bcmbal_packet_key *this, bcmbal_presence_mask fields_present, bcmbal_packet_key_id *failed_prop);
+
+/** Initializes a bcmbal_packet_cfg_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmbal_packet_cfg_data_set_default(bcmbal_packet_cfg_data *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_packet_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_packet_cfg_data_pack(const bcmbal_packet_cfg_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_packet_cfg_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmbal_packet_cfg_data_get_packed_length(const bcmbal_packet_cfg_data *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_packet_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_packet_cfg_data_unpack(bcmbal_packet_cfg_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_packet_cfg_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_packet_cfg_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_packet_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_packet_cfg_data_bounds_check(const bcmbal_packet_cfg_data *this, bcmbal_presence_mask fields_present, bcmbal_packet_cfg_id *failed_prop);
+
+/** Initializes a bcmbal_packet_ind_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmbal_packet_ind_data_set_default(bcmbal_packet_ind_data *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_packet_ind_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_packet_ind_data_pack(const bcmbal_packet_ind_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_packet_ind_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmbal_packet_ind_data_get_packed_length(const bcmbal_packet_ind_data *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_packet_ind_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_packet_ind_data_unpack(bcmbal_packet_ind_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_packet_ind_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_packet_ind_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_packet_ind_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_packet_ind_data_bounds_check(const bcmbal_packet_ind_data *this, bcmbal_presence_mask fields_present, bcmbal_packet_ind_id *failed_prop);
+
+/** Initializes a bcmbal_subscriber_terminal_key struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmbal_subscriber_terminal_key_set_default(bcmbal_subscriber_terminal_key *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_subscriber_terminal_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_subscriber_terminal_key_pack(const bcmbal_subscriber_terminal_key *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_subscriber_terminal_key would occupy 
+ * on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmbal_subscriber_terminal_key_get_packed_length(const bcmbal_subscriber_terminal_key *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_subscriber_terminal_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_subscriber_terminal_key_unpack(bcmbal_subscriber_terminal_key *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_subscriber_terminal_key struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_subscriber_terminal_key_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_subscriber_terminal_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_subscriber_terminal_key_bounds_check(const bcmbal_subscriber_terminal_key *this, bcmbal_presence_mask fields_present, bcmbal_subscriber_terminal_key_id *failed_prop);
+
+/** Initializes a bcmbal_subscriber_terminal_cfg_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmbal_subscriber_terminal_cfg_data_set_default(bcmbal_subscriber_terminal_cfg_data *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_subscriber_terminal_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_subscriber_terminal_cfg_data_pack(const bcmbal_subscriber_terminal_cfg_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_subscriber_terminal_cfg_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmbal_subscriber_terminal_cfg_data_get_packed_length(const bcmbal_subscriber_terminal_cfg_data *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_subscriber_terminal_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_subscriber_terminal_cfg_data_unpack(bcmbal_subscriber_terminal_cfg_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_subscriber_terminal_cfg_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_subscriber_terminal_cfg_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_subscriber_terminal_cfg_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_subscriber_terminal_cfg_data_bounds_check(const bcmbal_subscriber_terminal_cfg_data *this, bcmbal_presence_mask fields_present, bcmbal_subscriber_terminal_cfg_id *failed_prop);
+
+/** Initializes a bcmbal_subscriber_terminal_stat_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmbal_subscriber_terminal_stat_data_set_default(bcmbal_subscriber_terminal_stat_data *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_subscriber_terminal_stat_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_subscriber_terminal_stat_data_pack(const bcmbal_subscriber_terminal_stat_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_subscriber_terminal_stat_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmbal_subscriber_terminal_stat_data_get_packed_length(const bcmbal_subscriber_terminal_stat_data *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_subscriber_terminal_stat_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_subscriber_terminal_stat_data_unpack(bcmbal_subscriber_terminal_stat_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_subscriber_terminal_stat_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_subscriber_terminal_stat_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_subscriber_terminal_stat_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_subscriber_terminal_stat_data_bounds_check(const bcmbal_subscriber_terminal_stat_data *this, bcmbal_presence_mask fields_present, bcmbal_subscriber_terminal_stat_id *failed_prop);
+
+/** Initializes a bcmbal_subscriber_terminal_ind_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmbal_subscriber_terminal_ind_data_set_default(bcmbal_subscriber_terminal_ind_data *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_subscriber_terminal_ind_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_subscriber_terminal_ind_data_pack(const bcmbal_subscriber_terminal_ind_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_subscriber_terminal_ind_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmbal_subscriber_terminal_ind_data_get_packed_length(const bcmbal_subscriber_terminal_ind_data *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_subscriber_terminal_ind_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_subscriber_terminal_ind_data_unpack(bcmbal_subscriber_terminal_ind_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_subscriber_terminal_ind_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_subscriber_terminal_ind_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_subscriber_terminal_ind_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_subscriber_terminal_ind_data_bounds_check(const bcmbal_subscriber_terminal_ind_data *this, bcmbal_presence_mask fields_present, bcmbal_subscriber_terminal_ind_id *failed_prop);
+
+/** Initializes a bcmbal_tm_queue_key struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmbal_tm_queue_key_set_default(bcmbal_tm_queue_key *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_tm_queue_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_queue_key_pack(const bcmbal_tm_queue_key *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_tm_queue_key would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmbal_tm_queue_key_get_packed_length(const bcmbal_tm_queue_key *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_tm_queue_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_queue_key_unpack(bcmbal_tm_queue_key *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_tm_queue_key struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_tm_queue_key_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_tm_queue_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_queue_key_bounds_check(const bcmbal_tm_queue_key *this, bcmbal_presence_mask fields_present, bcmbal_tm_queue_key_id *failed_prop);
+
+/** Initializes a bcmbal_tm_queue_cfg_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmbal_tm_queue_cfg_data_set_default(bcmbal_tm_queue_cfg_data *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_tm_queue_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_queue_cfg_data_pack(const bcmbal_tm_queue_cfg_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_tm_queue_cfg_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmbal_tm_queue_cfg_data_get_packed_length(const bcmbal_tm_queue_cfg_data *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_tm_queue_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_queue_cfg_data_unpack(bcmbal_tm_queue_cfg_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_tm_queue_cfg_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_tm_queue_cfg_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_tm_queue_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_queue_cfg_data_bounds_check(const bcmbal_tm_queue_cfg_data *this, bcmbal_presence_mask fields_present, bcmbal_tm_queue_cfg_id *failed_prop);
+
+/** Initializes a bcmbal_tm_queue_stat_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmbal_tm_queue_stat_data_set_default(bcmbal_tm_queue_stat_data *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_tm_queue_stat_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_queue_stat_data_pack(const bcmbal_tm_queue_stat_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_tm_queue_stat_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmbal_tm_queue_stat_data_get_packed_length(const bcmbal_tm_queue_stat_data *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_tm_queue_stat_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_queue_stat_data_unpack(bcmbal_tm_queue_stat_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_tm_queue_stat_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_tm_queue_stat_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_tm_queue_stat_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_queue_stat_data_bounds_check(const bcmbal_tm_queue_stat_data *this, bcmbal_presence_mask fields_present, bcmbal_tm_queue_stat_id *failed_prop);
+
+/** Initializes a bcmbal_tm_queue_ind_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmbal_tm_queue_ind_data_set_default(bcmbal_tm_queue_ind_data *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_tm_queue_ind_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_queue_ind_data_pack(const bcmbal_tm_queue_ind_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_tm_queue_ind_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmbal_tm_queue_ind_data_get_packed_length(const bcmbal_tm_queue_ind_data *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_tm_queue_ind_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_queue_ind_data_unpack(bcmbal_tm_queue_ind_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_tm_queue_ind_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_tm_queue_ind_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_tm_queue_ind_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_queue_ind_data_bounds_check(const bcmbal_tm_queue_ind_data *this, bcmbal_presence_mask fields_present, bcmbal_tm_queue_ind_id *failed_prop);
+
+/** Initializes a bcmbal_tm_sched_key struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmbal_tm_sched_key_set_default(bcmbal_tm_sched_key *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_tm_sched_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_sched_key_pack(const bcmbal_tm_sched_key *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_tm_sched_key would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmbal_tm_sched_key_get_packed_length(const bcmbal_tm_sched_key *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_tm_sched_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_sched_key_unpack(bcmbal_tm_sched_key *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_tm_sched_key struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_tm_sched_key_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_tm_sched_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_sched_key_bounds_check(const bcmbal_tm_sched_key *this, bcmbal_presence_mask fields_present, bcmbal_tm_sched_key_id *failed_prop);
+
+/** Initializes a bcmbal_tm_sched_cfg_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmbal_tm_sched_cfg_data_set_default(bcmbal_tm_sched_cfg_data *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_tm_sched_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_sched_cfg_data_pack(const bcmbal_tm_sched_cfg_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_tm_sched_cfg_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmbal_tm_sched_cfg_data_get_packed_length(const bcmbal_tm_sched_cfg_data *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_tm_sched_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_sched_cfg_data_unpack(bcmbal_tm_sched_cfg_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_tm_sched_cfg_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_tm_sched_cfg_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_tm_sched_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_sched_cfg_data_bounds_check(const bcmbal_tm_sched_cfg_data *this, bcmbal_presence_mask fields_present, bcmbal_tm_sched_cfg_id *failed_prop);
+
+/** Initializes a bcmbal_tm_sched_ind_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmbal_tm_sched_ind_data_set_default(bcmbal_tm_sched_ind_data *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_tm_sched_ind_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_sched_ind_data_pack(const bcmbal_tm_sched_ind_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_tm_sched_ind_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmbal_tm_sched_ind_data_get_packed_length(const bcmbal_tm_sched_ind_data *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_tm_sched_ind_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_sched_ind_data_unpack(bcmbal_tm_sched_ind_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_tm_sched_ind_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmbal_tm_sched_ind_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_tm_sched_ind_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmbal_tm_sched_ind_data_bounds_check(const bcmbal_tm_sched_ind_data *this, bcmbal_presence_mask fields_present, bcmbal_tm_sched_ind_id *failed_prop);
+#endif /* BAL_MODEL_FUNCS */
diff --git a/bal_release/src/lib/libobjmsg/bal_msg.c b/bal_release/src/lib/libobjmsg/bal_msg.c
new file mode 100644
index 0000000..285be80
--- /dev/null
+++ b/bal_release/src/lib/libobjmsg/bal_msg.c
@@ -0,0 +1,220 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file bal_msg.c
+ * @brief BAL message helper functions
+ * @addtogroup ctrlr
+ */
+#include <bal_msg.h>
+#include <bal_obj_msg_pack_unpack.h>
+
+/*
+ * Clone BAL message
+ * Returns payload_ptr of the clone
+ */
+void *bcmbal_msg_clone(void *bal_obj)
+{
+    bal_comm_msg_hdr *msg_hdr = bcmbal_bal_hdr_get(bal_obj);
+    bal_comm_msg_hdr *clone_hdr = NULL;
+    bcmos_errno err = bcmbal_obj_msg_clone(&clone_hdr, msg_hdr);
+    return ((int)err >= 0) ? bcmbal_payload_ptr_get(clone_hdr) : NULL;
+}
+
+/*
+ * Send a BAL message given the payload pointer
+ */
+bcmos_errno bcmbal_msg_send(bcmos_msg_queue *queue, void *msg_payload, bcmos_msg_send_flags flags)
+{
+    bcmos_msg *packed_msg = NULL;
+    bcmos_errno err;
+
+    /* pack and send */
+    err = bcmbal_obj_msg_pack(bcmbal_bal_hdr_get(msg_payload), &packed_msg);
+    if (err != BCM_ERR_OK)
+        return err;
+
+    err = bcmos_msg_send(queue, packed_msg, flags);
+
+    if ((flags & BCMOS_MSG_SEND_NO_FREE_ON_ERROR) == 0)
+    {
+        /* Release the original message */
+        bcmbal_msg_free(msg_payload);
+    }
+    else if (err != BCM_ERR_OK)
+    {
+        /* bcmos_msg_send() failed, but packed_msg wasn't released because of the flag. */
+        bcmos_msg_free(packed_msg);
+    }
+
+    return err;
+}
+
+/*
+ * Call callback in the context of the target module and pass it the BAL message pointer
+ */
+bcmos_errno bcmbal_msg_call(void *msg_payload,
+    bcmos_module_id module, F_bcmos_msg_handler cb, bcmos_msg_send_flags flags)
+{
+    bcmos_msg *m = bcmbal_bcmos_hdr_get(msg_payload);
+    m->handler = cb;
+    return bcmos_msg_send_to_module(module, m, flags);
+}
+
+bcmos_errno bcmbal_msg_recv(bcmos_msg_queue *queue, uint32_t timeout, void **msg_payload)
+{
+    bcmos_errno ret;
+    bcmos_msg *msg;
+    bal_comm_msg_hdr *unpacked_msg = (*msg_payload) ? bcmbal_bal_hdr_get(*msg_payload) : NULL;
+
+    do {
+        ret = bcmos_msg_recv(queue, timeout, &msg);
+        if(BCM_ERR_OK != ret)
+        {
+            bcmos_printf("%s: error during bcmos_msg_recv (error:%s)\n",
+                         __FUNCTION__,
+                         bcmos_strerror(ret));
+            break;
+        }
+
+        /* Got a message. Now unpack it */
+        ret = bcmbal_obj_msg_unpack(msg, &unpacked_msg);
+        bcmos_msg_free(msg); /* release packed message. It is no longer needed */
+        if (BCM_ERR_OK != ret)
+        {
+            bcmos_printf("%s: bcmbal_obj_msg_unpack (error:%s)\n",
+                __FUNCTION__, bcmos_strerror(ret));
+            break;
+        }
+
+        /* If message was allocated in unpack - assign it */
+        if (! *msg_payload)
+            *msg_payload = bcmbal_payload_ptr_get(unpacked_msg);
+
+    } while (0);
+
+    return ret;
+}
+
+int32_t bcmbal_bal_msg_hdr_get_packed_length(void)
+{
+    return 21; /* See bcmbal_bal_msg_hdr_pack() */
+}
+
+static int32_t bcmbal_bal_msg_hdr_get_ex_id_offset(void)
+{
+    return 16; /* See bcmbal_bal_msg_hdr_pack() */
+}
+
+/** Pack a BAL message header to a byte stream */
+bcmos_errno bcmbal_bal_msg_hdr_pack(const bal_comm_msg_hdr *msg, bcmbal_buf *buf)
+{
+    bcmos_bool ret;
+
+    /* bcmos_msg header pack... (8 bytes post-pack) */
+    ret = bcmbal_buf_write_u32(buf, buf->len);
+
+    ret = ret && bcmbal_buf_write_u16(buf, (uint16_t)msg->m.type);
+    ret = ret && bcmbal_buf_write_u8(buf, (uint8_t)msg->m.instance);
+    ret = ret && bcmbal_buf_write_u8(buf, (uint8_t)msg->m.sender);
+
+    /* ...and then the rest of the header (15 bytes post-pack) */
+    ret = ret && bcmbal_buf_write_u8(buf, msg->version_major);
+    ret = ret && bcmbal_buf_write_u8(buf, msg->version_minor);
+    ret = ret && bcmbal_buf_write_u32(buf, msg->msg_id); /* the msg_id cannot be compressed */
+    ret = ret && bcmbal_buf_write_u16(buf, (uint16_t)msg->msg_type);
+    ret = ret && bcmbal_buf_write_u32(buf, msg->ex_id);
+    ret = ret && bcmbal_buf_write_u8(buf, msg->sender);
+
+    return ret ? BCM_ERR_OK : BCM_ERR_OVERFLOW;
+}
+
+/** Unpack a BAL message header from a byte stream */
+bcmos_errno bcmbal_bal_msg_hdr_unpack(bal_comm_msg_hdr *msg, bcmbal_buf *buf)
+{
+    uint16_t   m_type;
+    uint8_t    m_instance;
+    uint8_t    m_sender;
+    uint32_t   m_size;
+
+    uint8_t    version_major;
+    uint8_t    version_minor;
+    uint32_t   msg_id;
+    uint16_t   msg_type;
+    uint32_t   ex_id;
+    uint8_t    sender;
+
+    bcmos_bool ret;
+
+    ret = bcmbal_buf_read_u32(buf, &m_size);
+    ret = ret && bcmbal_buf_read_u16(buf, &m_type);
+    ret = ret && bcmbal_buf_read_u8(buf, &m_instance);
+    ret = ret && bcmbal_buf_read_u8(buf, &m_sender);
+
+    ret = ret && bcmbal_buf_read_u8(buf, &version_major);
+    ret = ret && bcmbal_buf_read_u8(buf, &version_minor);
+    ret = ret && bcmbal_buf_read_u32(buf, &msg_id);
+    ret = ret && bcmbal_buf_read_u16(buf, &msg_type);
+    ret = ret && bcmbal_buf_read_u32(buf, &ex_id);
+    ret = ret && bcmbal_buf_read_u8(buf, &sender);
+
+    if (ret)
+    {
+        msg->m.type = (bcmos_msg_id)m_type;
+        msg->m.instance = (bcmos_msg_instance)m_instance;
+        msg->m.sender = (bcmos_module_id)m_sender;
+        msg->m.size = m_size;
+
+        msg->version_major = version_major;
+        msg->version_minor = version_minor;
+        msg->msg_id = msg_id;
+        msg->msg_type = msg_type;
+        msg->ex_id = ex_id;
+        msg->sender = sender;
+    }
+
+    return ret ? BCM_ERR_OK : BCM_ERR_OVERFLOW;
+}
+
+/** Peek exchange_id in the received message without unpacking */
+bcmos_errno bcmbal_bal_msg_peek_ex_id(bcmos_msg *msg, uint32_t *ex_id)
+{
+    bcmbal_buf buf;
+    if (msg->size < bcmbal_bal_msg_hdr_get_packed_length())
+        return BCM_ERR_INTERNAL;
+    bcmbal_buf_init(&buf, msg->size, msg->data);
+    bcmolt_buf_set_pos(&buf, bcmbal_bal_msg_hdr_get_ex_id_offset());
+    bcmbal_buf_read_u32(&buf, ex_id);
+    return BCM_ERR_OK;
+}
+
+
+
diff --git a/bal_release/src/lib/libobjmsg/bal_obj_msg_pack_unpack.c b/bal_release/src/lib/libobjmsg/bal_obj_msg_pack_unpack.c
new file mode 100644
index 0000000..519af97
--- /dev/null
+++ b/bal_release/src/lib/libobjmsg/bal_obj_msg_pack_unpack.c
@@ -0,0 +1,558 @@
+#include <bcmos_system.h>
+#include <bal_msg.h>
+#include "bal_obj_msg_pack_unpack.h"
+
+typedef uint32_t (*bcmbal_func_packed_len) (void *this, bcmbal_presence_mask fields_present);
+typedef bcmos_bool (*bcmbal_func_pack) (void *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+typedef bcmos_bool (*bcmbal_func_unpack) (void *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+typedef bcmos_bool (*bcmbal_func_mem_scan) (bcmbal_buf * buf, uint32_t * extra_mem, bcmbal_presence_mask fields_present);
+
+/******************************************************************************/
+typedef struct bcmbal_group_info
+{
+    bcmbal_obj_id obj_type;
+    bcmbal_mgt_group group;
+    uint16_t subgroup;
+    uint32_t size;
+    uint32_t container_size;    /* sizeof() the key/data container struct (0 for key groups) */
+    uint32_t data_offset;       /* offsetof() data field within container struct (0 for key groups) */
+    bcmbal_func_packed_len get_packed_length;
+    bcmbal_func_pack pack;
+    bcmbal_func_unpack unpack;
+    bcmbal_func_mem_scan mem_scan;
+} bcmbal_group_info;
+
+/******************************************************************************/
+typedef struct bcmbal_group_ids
+{
+    uint32_t subgroup_count;
+    bcmbal_obj_group_id *subgroup_ids;
+} bcmbal_group_ids;
+
+/******************************************************************************/
+typedef struct bcmbal_instance_info
+{
+    int8_t offset;
+    int8_t size;
+} bcmbal_instance_info;
+
+/******************************************************************************/
+static bcmbal_group_info group_info_access_terminal_key = { BCMBAL_OBJ_ID_ACCESS_TERMINAL, BCMBAL_MGT_GROUP_KEY, 0, sizeof(bcmbal_access_terminal_key), 0, 0, (bcmbal_func_packed_len) bcmbal_access_terminal_key_get_packed_length, (bcmbal_func_pack) bcmbal_access_terminal_key_pack, (bcmbal_func_unpack) bcmbal_access_terminal_key_unpack, bcmbal_access_terminal_key_scan };
+static bcmbal_group_info group_info_access_terminal_cfg = { BCMBAL_OBJ_ID_ACCESS_TERMINAL, BCMBAL_MGT_GROUP_CFG, 0, sizeof(bcmbal_access_terminal_cfg_data), sizeof(bcmbal_access_terminal_cfg), offsetof(bcmbal_access_terminal_cfg, data), (bcmbal_func_packed_len) bcmbal_access_terminal_cfg_data_get_packed_length, (bcmbal_func_pack) bcmbal_access_terminal_cfg_data_pack, (bcmbal_func_unpack) bcmbal_access_terminal_cfg_data_unpack, bcmbal_access_terminal_cfg_data_scan };
+static bcmbal_group_info group_info_access_terminal_ind = { BCMBAL_OBJ_ID_ACCESS_TERMINAL, BCMBAL_MGT_GROUP_AUTO, 0, sizeof(bcmbal_access_terminal_ind_data), sizeof(bcmbal_access_terminal_ind), offsetof(bcmbal_access_terminal_ind, data), (bcmbal_func_packed_len) bcmbal_access_terminal_ind_data_get_packed_length, (bcmbal_func_pack) bcmbal_access_terminal_ind_data_pack, (bcmbal_func_unpack) bcmbal_access_terminal_ind_data_unpack, bcmbal_access_terminal_ind_data_scan };
+static bcmbal_group_info group_info_flow_key = { BCMBAL_OBJ_ID_FLOW, BCMBAL_MGT_GROUP_KEY, 0, sizeof(bcmbal_flow_key), 0, 0, (bcmbal_func_packed_len) bcmbal_flow_key_get_packed_length, (bcmbal_func_pack) bcmbal_flow_key_pack, (bcmbal_func_unpack) bcmbal_flow_key_unpack, bcmbal_flow_key_scan };
+static bcmbal_group_info group_info_flow_cfg = { BCMBAL_OBJ_ID_FLOW, BCMBAL_MGT_GROUP_CFG, 0, sizeof(bcmbal_flow_cfg_data), sizeof(bcmbal_flow_cfg), offsetof(bcmbal_flow_cfg, data), (bcmbal_func_packed_len) bcmbal_flow_cfg_data_get_packed_length, (bcmbal_func_pack) bcmbal_flow_cfg_data_pack, (bcmbal_func_unpack) bcmbal_flow_cfg_data_unpack, bcmbal_flow_cfg_data_scan };
+static bcmbal_group_info group_info_flow_stat = { BCMBAL_OBJ_ID_FLOW, BCMBAL_MGT_GROUP_STAT, 0, sizeof(bcmbal_flow_stat_data), sizeof(bcmbal_flow_stat), offsetof(bcmbal_flow_stat, data), (bcmbal_func_packed_len) bcmbal_flow_stat_data_get_packed_length, (bcmbal_func_pack) bcmbal_flow_stat_data_pack, (bcmbal_func_unpack) bcmbal_flow_stat_data_unpack, bcmbal_flow_stat_data_scan };
+static bcmbal_group_info group_info_flow_ind = { BCMBAL_OBJ_ID_FLOW, BCMBAL_MGT_GROUP_AUTO, 0, sizeof(bcmbal_flow_ind_data), sizeof(bcmbal_flow_ind), offsetof(bcmbal_flow_ind, data), (bcmbal_func_packed_len) bcmbal_flow_ind_data_get_packed_length, (bcmbal_func_pack) bcmbal_flow_ind_data_pack, (bcmbal_func_unpack) bcmbal_flow_ind_data_unpack, bcmbal_flow_ind_data_scan };
+static bcmbal_group_info group_info_group_key = { BCMBAL_OBJ_ID_GROUP, BCMBAL_MGT_GROUP_KEY, 0, sizeof(bcmbal_group_key), 0, 0, (bcmbal_func_packed_len) bcmbal_group_key_get_packed_length, (bcmbal_func_pack) bcmbal_group_key_pack, (bcmbal_func_unpack) bcmbal_group_key_unpack, bcmbal_group_key_scan };
+static bcmbal_group_info group_info_group_cfg = { BCMBAL_OBJ_ID_GROUP, BCMBAL_MGT_GROUP_CFG, 0, sizeof(bcmbal_group_cfg_data), sizeof(bcmbal_group_cfg), offsetof(bcmbal_group_cfg, data), (bcmbal_func_packed_len) bcmbal_group_cfg_data_get_packed_length, (bcmbal_func_pack) bcmbal_group_cfg_data_pack, (bcmbal_func_unpack) bcmbal_group_cfg_data_unpack, bcmbal_group_cfg_data_scan };
+static bcmbal_group_info group_info_interface_key = { BCMBAL_OBJ_ID_INTERFACE, BCMBAL_MGT_GROUP_KEY, 0, sizeof(bcmbal_interface_key), 0, 0, (bcmbal_func_packed_len) bcmbal_interface_key_get_packed_length, (bcmbal_func_pack) bcmbal_interface_key_pack, (bcmbal_func_unpack) bcmbal_interface_key_unpack, bcmbal_interface_key_scan };
+static bcmbal_group_info group_info_interface_cfg = { BCMBAL_OBJ_ID_INTERFACE, BCMBAL_MGT_GROUP_CFG, 0, sizeof(bcmbal_interface_cfg_data), sizeof(bcmbal_interface_cfg), offsetof(bcmbal_interface_cfg, data), (bcmbal_func_packed_len) bcmbal_interface_cfg_data_get_packed_length, (bcmbal_func_pack) bcmbal_interface_cfg_data_pack, (bcmbal_func_unpack) bcmbal_interface_cfg_data_unpack, bcmbal_interface_cfg_data_scan };
+static bcmbal_group_info group_info_interface_stat = { BCMBAL_OBJ_ID_INTERFACE, BCMBAL_MGT_GROUP_STAT, 0, sizeof(bcmbal_interface_stat_data), sizeof(bcmbal_interface_stat), offsetof(bcmbal_interface_stat, data), (bcmbal_func_packed_len) bcmbal_interface_stat_data_get_packed_length, (bcmbal_func_pack) bcmbal_interface_stat_data_pack, (bcmbal_func_unpack) bcmbal_interface_stat_data_unpack, bcmbal_interface_stat_data_scan };
+static bcmbal_group_info group_info_interface_ind = { BCMBAL_OBJ_ID_INTERFACE, BCMBAL_MGT_GROUP_AUTO, 0, sizeof(bcmbal_interface_ind_data), sizeof(bcmbal_interface_ind), offsetof(bcmbal_interface_ind, data), (bcmbal_func_packed_len) bcmbal_interface_ind_data_get_packed_length, (bcmbal_func_pack) bcmbal_interface_ind_data_pack, (bcmbal_func_unpack) bcmbal_interface_ind_data_unpack, bcmbal_interface_ind_data_scan };
+static bcmbal_group_info group_info_packet_key = { BCMBAL_OBJ_ID_PACKET, BCMBAL_MGT_GROUP_KEY, 0, sizeof(bcmbal_packet_key), 0, 0, (bcmbal_func_packed_len) bcmbal_packet_key_get_packed_length, (bcmbal_func_pack) bcmbal_packet_key_pack, (bcmbal_func_unpack) bcmbal_packet_key_unpack, bcmbal_packet_key_scan };
+static bcmbal_group_info group_info_packet_cfg = { BCMBAL_OBJ_ID_PACKET, BCMBAL_MGT_GROUP_CFG, 0, sizeof(bcmbal_packet_cfg_data), sizeof(bcmbal_packet_cfg), offsetof(bcmbal_packet_cfg, data), (bcmbal_func_packed_len) bcmbal_packet_cfg_data_get_packed_length, (bcmbal_func_pack) bcmbal_packet_cfg_data_pack, (bcmbal_func_unpack) bcmbal_packet_cfg_data_unpack, bcmbal_packet_cfg_data_scan };
+static bcmbal_group_info group_info_packet_ind = { BCMBAL_OBJ_ID_PACKET, BCMBAL_MGT_GROUP_AUTO, 0, sizeof(bcmbal_packet_ind_data), sizeof(bcmbal_packet_ind), offsetof(bcmbal_packet_ind, data), (bcmbal_func_packed_len) bcmbal_packet_ind_data_get_packed_length, (bcmbal_func_pack) bcmbal_packet_ind_data_pack, (bcmbal_func_unpack) bcmbal_packet_ind_data_unpack, bcmbal_packet_ind_data_scan };
+static bcmbal_group_info group_info_subscriber_terminal_key = { BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL, BCMBAL_MGT_GROUP_KEY, 0, sizeof(bcmbal_subscriber_terminal_key), 0, 0, (bcmbal_func_packed_len) bcmbal_subscriber_terminal_key_get_packed_length, (bcmbal_func_pack) bcmbal_subscriber_terminal_key_pack, (bcmbal_func_unpack) bcmbal_subscriber_terminal_key_unpack, bcmbal_subscriber_terminal_key_scan };
+static bcmbal_group_info group_info_subscriber_terminal_cfg = { BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL, BCMBAL_MGT_GROUP_CFG, 0, sizeof(bcmbal_subscriber_terminal_cfg_data), sizeof(bcmbal_subscriber_terminal_cfg), offsetof(bcmbal_subscriber_terminal_cfg, data), (bcmbal_func_packed_len) bcmbal_subscriber_terminal_cfg_data_get_packed_length, (bcmbal_func_pack) bcmbal_subscriber_terminal_cfg_data_pack, (bcmbal_func_unpack) bcmbal_subscriber_terminal_cfg_data_unpack, bcmbal_subscriber_terminal_cfg_data_scan };
+static bcmbal_group_info group_info_subscriber_terminal_stat = { BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL, BCMBAL_MGT_GROUP_STAT, 0, sizeof(bcmbal_subscriber_terminal_stat_data), sizeof(bcmbal_subscriber_terminal_stat), offsetof(bcmbal_subscriber_terminal_stat, data), (bcmbal_func_packed_len) bcmbal_subscriber_terminal_stat_data_get_packed_length, (bcmbal_func_pack) bcmbal_subscriber_terminal_stat_data_pack, (bcmbal_func_unpack) bcmbal_subscriber_terminal_stat_data_unpack, bcmbal_subscriber_terminal_stat_data_scan };
+static bcmbal_group_info group_info_subscriber_terminal_ind = { BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL, BCMBAL_MGT_GROUP_AUTO, 0, sizeof(bcmbal_subscriber_terminal_ind_data), sizeof(bcmbal_subscriber_terminal_ind), offsetof(bcmbal_subscriber_terminal_ind, data), (bcmbal_func_packed_len) bcmbal_subscriber_terminal_ind_data_get_packed_length, (bcmbal_func_pack) bcmbal_subscriber_terminal_ind_data_pack, (bcmbal_func_unpack) bcmbal_subscriber_terminal_ind_data_unpack, bcmbal_subscriber_terminal_ind_data_scan };
+static bcmbal_group_info group_info_tm_queue_key = { BCMBAL_OBJ_ID_TM_QUEUE, BCMBAL_MGT_GROUP_KEY, 0, sizeof(bcmbal_tm_queue_key), 0, 0, (bcmbal_func_packed_len) bcmbal_tm_queue_key_get_packed_length, (bcmbal_func_pack) bcmbal_tm_queue_key_pack, (bcmbal_func_unpack) bcmbal_tm_queue_key_unpack, bcmbal_tm_queue_key_scan };
+static bcmbal_group_info group_info_tm_queue_cfg = { BCMBAL_OBJ_ID_TM_QUEUE, BCMBAL_MGT_GROUP_CFG, 0, sizeof(bcmbal_tm_queue_cfg_data), sizeof(bcmbal_tm_queue_cfg), offsetof(bcmbal_tm_queue_cfg, data), (bcmbal_func_packed_len) bcmbal_tm_queue_cfg_data_get_packed_length, (bcmbal_func_pack) bcmbal_tm_queue_cfg_data_pack, (bcmbal_func_unpack) bcmbal_tm_queue_cfg_data_unpack, bcmbal_tm_queue_cfg_data_scan };
+static bcmbal_group_info group_info_tm_queue_stat = { BCMBAL_OBJ_ID_TM_QUEUE, BCMBAL_MGT_GROUP_STAT, 0, sizeof(bcmbal_tm_queue_stat_data), sizeof(bcmbal_tm_queue_stat), offsetof(bcmbal_tm_queue_stat, data), (bcmbal_func_packed_len) bcmbal_tm_queue_stat_data_get_packed_length, (bcmbal_func_pack) bcmbal_tm_queue_stat_data_pack, (bcmbal_func_unpack) bcmbal_tm_queue_stat_data_unpack, bcmbal_tm_queue_stat_data_scan };
+static bcmbal_group_info group_info_tm_queue_ind = { BCMBAL_OBJ_ID_TM_QUEUE, BCMBAL_MGT_GROUP_AUTO, 0, sizeof(bcmbal_tm_queue_ind_data), sizeof(bcmbal_tm_queue_ind), offsetof(bcmbal_tm_queue_ind, data), (bcmbal_func_packed_len) bcmbal_tm_queue_ind_data_get_packed_length, (bcmbal_func_pack) bcmbal_tm_queue_ind_data_pack, (bcmbal_func_unpack) bcmbal_tm_queue_ind_data_unpack, bcmbal_tm_queue_ind_data_scan };
+static bcmbal_group_info group_info_tm_sched_key = { BCMBAL_OBJ_ID_TM_SCHED, BCMBAL_MGT_GROUP_KEY, 0, sizeof(bcmbal_tm_sched_key), 0, 0, (bcmbal_func_packed_len) bcmbal_tm_sched_key_get_packed_length, (bcmbal_func_pack) bcmbal_tm_sched_key_pack, (bcmbal_func_unpack) bcmbal_tm_sched_key_unpack, bcmbal_tm_sched_key_scan };
+static bcmbal_group_info group_info_tm_sched_cfg = { BCMBAL_OBJ_ID_TM_SCHED, BCMBAL_MGT_GROUP_CFG, 0, sizeof(bcmbal_tm_sched_cfg_data), sizeof(bcmbal_tm_sched_cfg), offsetof(bcmbal_tm_sched_cfg, data), (bcmbal_func_packed_len) bcmbal_tm_sched_cfg_data_get_packed_length, (bcmbal_func_pack) bcmbal_tm_sched_cfg_data_pack, (bcmbal_func_unpack) bcmbal_tm_sched_cfg_data_unpack, bcmbal_tm_sched_cfg_data_scan };
+static bcmbal_group_info group_info_tm_sched_ind = { BCMBAL_OBJ_ID_TM_SCHED, BCMBAL_MGT_GROUP_AUTO, 0, sizeof(bcmbal_tm_sched_ind_data), sizeof(bcmbal_tm_sched_ind), offsetof(bcmbal_tm_sched_ind, data), (bcmbal_func_packed_len) bcmbal_tm_sched_ind_data_get_packed_length, (bcmbal_func_pack) bcmbal_tm_sched_ind_data_pack, (bcmbal_func_unpack) bcmbal_tm_sched_ind_data_unpack, bcmbal_tm_sched_ind_data_scan };
+static bcmbal_group_info *group_info[] = { &group_info_access_terminal_key, &group_info_access_terminal_cfg, &group_info_access_terminal_ind, &group_info_flow_key, &group_info_flow_cfg, &group_info_flow_stat, &group_info_flow_ind, &group_info_group_key, &group_info_group_cfg, &group_info_interface_key, &group_info_interface_cfg, &group_info_interface_stat, &group_info_interface_ind, &group_info_packet_key, &group_info_packet_cfg, &group_info_packet_ind, &group_info_subscriber_terminal_key, &group_info_subscriber_terminal_cfg, &group_info_subscriber_terminal_stat, &group_info_subscriber_terminal_ind, &group_info_tm_queue_key, &group_info_tm_queue_cfg, &group_info_tm_queue_stat, &group_info_tm_queue_ind, &group_info_tm_sched_key, &group_info_tm_sched_cfg, &group_info_tm_sched_ind };
+static bcmbal_obj_group_id group_ids_access_terminal_key[] = { BCMBAL_OBJ_GROUP_ID_ACCESS_TERMINAL_KEY };
+static bcmbal_obj_group_id group_ids_access_terminal_cfg[] = { BCMBAL_OBJ_GROUP_ID_ACCESS_TERMINAL_CFG };
+static bcmbal_obj_group_id group_ids_access_terminal_auto[] = { BCMBAL_OBJ_GROUP_ID_ACCESS_TERMINAL_IND };
+static bcmbal_obj_group_id group_ids_flow_key[] = { BCMBAL_OBJ_GROUP_ID_FLOW_KEY };
+static bcmbal_obj_group_id group_ids_flow_cfg[] = { BCMBAL_OBJ_GROUP_ID_FLOW_CFG };
+static bcmbal_obj_group_id group_ids_flow_stat[] = { BCMBAL_OBJ_GROUP_ID_FLOW_STAT };
+static bcmbal_obj_group_id group_ids_flow_auto[] = { BCMBAL_OBJ_GROUP_ID_FLOW_IND };
+static bcmbal_obj_group_id group_ids_group_key[] = { BCMBAL_OBJ_GROUP_ID_GROUP_KEY };
+static bcmbal_obj_group_id group_ids_group_cfg[] = { BCMBAL_OBJ_GROUP_ID_GROUP_CFG };
+static bcmbal_obj_group_id group_ids_interface_key[] = { BCMBAL_OBJ_GROUP_ID_INTERFACE_KEY };
+static bcmbal_obj_group_id group_ids_interface_cfg[] = { BCMBAL_OBJ_GROUP_ID_INTERFACE_CFG };
+static bcmbal_obj_group_id group_ids_interface_stat[] = { BCMBAL_OBJ_GROUP_ID_INTERFACE_STAT };
+static bcmbal_obj_group_id group_ids_interface_auto[] = { BCMBAL_OBJ_GROUP_ID_INTERFACE_IND };
+static bcmbal_obj_group_id group_ids_packet_key[] = { BCMBAL_OBJ_GROUP_ID_PACKET_KEY };
+static bcmbal_obj_group_id group_ids_packet_cfg[] = { BCMBAL_OBJ_GROUP_ID_PACKET_CFG };
+static bcmbal_obj_group_id group_ids_packet_auto[] = { BCMBAL_OBJ_GROUP_ID_PACKET_IND };
+static bcmbal_obj_group_id group_ids_subscriber_terminal_key[] = { BCMBAL_OBJ_GROUP_ID_SUBSCRIBER_TERMINAL_KEY };
+static bcmbal_obj_group_id group_ids_subscriber_terminal_cfg[] = { BCMBAL_OBJ_GROUP_ID_SUBSCRIBER_TERMINAL_CFG };
+static bcmbal_obj_group_id group_ids_subscriber_terminal_stat[] = { BCMBAL_OBJ_GROUP_ID_SUBSCRIBER_TERMINAL_STAT };
+static bcmbal_obj_group_id group_ids_subscriber_terminal_auto[] = { BCMBAL_OBJ_GROUP_ID_SUBSCRIBER_TERMINAL_IND };
+static bcmbal_obj_group_id group_ids_tm_queue_key[] = { BCMBAL_OBJ_GROUP_ID_TM_QUEUE_KEY };
+static bcmbal_obj_group_id group_ids_tm_queue_cfg[] = { BCMBAL_OBJ_GROUP_ID_TM_QUEUE_CFG };
+static bcmbal_obj_group_id group_ids_tm_queue_stat[] = { BCMBAL_OBJ_GROUP_ID_TM_QUEUE_STAT };
+static bcmbal_obj_group_id group_ids_tm_queue_auto[] = { BCMBAL_OBJ_GROUP_ID_TM_QUEUE_IND };
+static bcmbal_obj_group_id group_ids_tm_sched_key[] = { BCMBAL_OBJ_GROUP_ID_TM_SCHED_KEY };
+static bcmbal_obj_group_id group_ids_tm_sched_cfg[] = { BCMBAL_OBJ_GROUP_ID_TM_SCHED_CFG };
+static bcmbal_obj_group_id group_ids_tm_sched_auto[] = { BCMBAL_OBJ_GROUP_ID_TM_SCHED_IND };
+static bcmbal_group_ids group_ids_obj_access_terminal[] = { { 1, group_ids_access_terminal_key }, { 1, group_ids_access_terminal_cfg }, { 0, NULL }, { 1, group_ids_access_terminal_auto }, { 0, NULL } };
+static bcmbal_group_ids group_ids_obj_flow[] = { { 1, group_ids_flow_key }, { 1, group_ids_flow_cfg }, { 1, group_ids_flow_stat }, { 1, group_ids_flow_auto }, { 0, NULL } };
+static bcmbal_group_ids group_ids_obj_group[] = { { 1, group_ids_group_key }, { 1, group_ids_group_cfg }, { 0, NULL }, { 0, NULL }, { 0, NULL } };
+static bcmbal_group_ids group_ids_obj_interface[] = { { 1, group_ids_interface_key }, { 1, group_ids_interface_cfg }, { 1, group_ids_interface_stat }, { 1, group_ids_interface_auto }, { 0, NULL } };
+static bcmbal_group_ids group_ids_obj_packet[] = { { 1, group_ids_packet_key }, { 1, group_ids_packet_cfg }, { 0, NULL }, { 1, group_ids_packet_auto }, { 0, NULL } };
+static bcmbal_group_ids group_ids_obj_subscriber_terminal[] = { { 1, group_ids_subscriber_terminal_key }, { 1, group_ids_subscriber_terminal_cfg }, { 1, group_ids_subscriber_terminal_stat }, { 1, group_ids_subscriber_terminal_auto }, { 0, NULL } };
+static bcmbal_group_ids group_ids_obj_tm_queue[] = { { 1, group_ids_tm_queue_key }, { 1, group_ids_tm_queue_cfg }, { 1, group_ids_tm_queue_stat }, { 1, group_ids_tm_queue_auto }, { 0, NULL } };
+static bcmbal_group_ids group_ids_obj_tm_sched[] = { { 1, group_ids_tm_sched_key }, { 1, group_ids_tm_sched_cfg }, { 0, NULL }, { 1, group_ids_tm_sched_auto }, { 0, NULL } };
+static bcmbal_group_ids *group_ids[] = { group_ids_obj_access_terminal, group_ids_obj_flow, group_ids_obj_group, group_ids_obj_interface, group_ids_obj_packet, group_ids_obj_subscriber_terminal, group_ids_obj_tm_queue, group_ids_obj_tm_sched };
+static bcmbal_presence_mask readonly_prop_mask[] = { (1ULL << BCMBAL_ACCESS_TERMINAL_CFG_ID_OPER_STATUS) | (1ULL << BCMBAL_ACCESS_TERMINAL_CFG_ID_IWF_MODE), 1ULL << BCMBAL_FLOW_CFG_ID_OPER_STATUS, (1ULL << BCMBAL_GROUP_CFG_ID_FLOWS) | (1ULL << BCMBAL_GROUP_CFG_ID_OWNER), (1ULL << BCMBAL_INTERFACE_CFG_ID_OPER_STATUS) | (1ULL << BCMBAL_INTERFACE_CFG_ID_SUB_TERM_ID_LIST), 0, (((1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_OPER_STATUS) | (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SVC_PORT_ID)) | (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SVC_PORT_ID_LIST)) | (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_AGG_PORT_ID_LIST), (1ULL << BCMBAL_TM_QUEUE_CFG_ID_CREATION_MODE) | (1ULL << BCMBAL_TM_QUEUE_CFG_ID_REF_COUNT), ((1ULL << BCMBAL_TM_SCHED_CFG_ID_CREATION_MODE) | (1ULL << BCMBAL_TM_SCHED_CFG_ID_QUEUES)) | (1ULL << BCMBAL_TM_SCHED_CFG_ID_SUB_SCHEDS) };
+static bcmbal_instance_info instance_info[] = { { offsetof(bcmbal_access_terminal_key, access_term_id), sizeof(bcmbal_access_id) }, { offsetof(bcmbal_flow_key, flow_id), sizeof(bcmbal_flow_id) }, { offsetof(bcmbal_group_key, group_id), sizeof(bcmbal_group_id) }, { offsetof(bcmbal_interface_key, intf_id), sizeof(uint32_t) }, { offsetof(bcmbal_packet_key, reserved), sizeof(uint32_t) }, { offsetof(bcmbal_subscriber_terminal_key, sub_term_id), sizeof(bcmbal_sub_id) }, { offsetof(bcmbal_tm_queue_key, id), sizeof(bcmbal_tm_queue_id) }, { offsetof(bcmbal_tm_sched_key, id), sizeof(bcmbal_tm_sched_id) } };
+
+/** Converts a specific object type, group and subgroup into a generic group ID.
+ *
+ * \param obj The object type that corresponds to the group ID.
+ * \param group The group type that corresponds to the group ID.
+ * \param subgroup The subgroup index that corresponds to the group ID.
+ * \param group_id The generic group ID.
+ * \return An error code or BCM_ERR_OK for success. 
+ */
+static bcmos_errno _bcmbal_obj_group_id_combine(bcmbal_obj_id obj, bcmbal_mgt_group group, uint16_t subgroup, bcmbal_obj_group_id *group_id)
+{
+    if ((obj >= BCMBAL_OBJ_ID__NUM_OF) || (group >= BCMBAL_MGT_GROUP__NUM_OF) || (group_ids[obj] == NULL) || (subgroup >= group_ids[obj][group].subgroup_count))
+    {
+        return BCM_ERR_RANGE;
+    }
+
+    *group_id = group_ids[obj][group].subgroup_ids[subgroup];
+    return BCM_ERR_OK;
+}
+
+/******************************************************************************/
+static bcmos_bool _bcmbal_get_group_info(const bcmbal_obj *msg, bcmbal_group_info **group, bcmbal_group_info **key)
+{
+    bcmbal_obj_group_id group_id;
+    bcmbal_obj_group_id key_id;
+    bcmos_errno err;
+
+    err = _bcmbal_obj_group_id_combine(msg->obj_type, msg->group, msg->subgroup, &group_id);
+    if (err != BCM_ERR_OK)
+    {
+        return BCMOS_FALSE;
+    }
+
+    err = _bcmbal_obj_group_id_combine(msg->obj_type, BCMBAL_MGT_GROUP_KEY, 0, &key_id);
+    if (err != BCM_ERR_OK)
+    {
+        return BCMOS_FALSE;
+    }
+
+    *group = group_info[group_id];
+    *key = group_info[key_id];
+    return BCMOS_TRUE;
+}
+
+/** Gets the number of bytes a message would occupy when packed. 
+ *
+ * \param msg The message to scan. 
+ * \return The size in bytes if > 0, or an error as defined in bcmos_errno. 
+ */
+static int32_t _bcmbal_obj_msg_packed_length_get(bcmbal_obj *msg)
+{
+    uint8_t *key_ptr;
+    bcmbal_group_info *group;
+    bcmbal_group_info *key;
+    int32_t ret;
+
+    /* First, get the total length of the packed BAL msg header and the packed BAL object header */
+    ret = bcmbal_bal_msg_hdr_get_packed_length() + bcmbal_obj_msg_hdr_get_packed_length();
+
+    if (!_bcmbal_get_group_info(msg, &group, &key))
+    {
+        return (int32_t) BCM_ERR_MSG_ERROR;
+    }
+
+    key_ptr = (uint8_t *) (msg + 1);
+
+    /* Add the length of the packed key */
+    ret += key->get_packed_length(key_ptr, BCMBAL_PRESENCE_MASK_ALL);
+
+    /* Add the length of the packed object itself (for those attributes that have been specified, if any) */
+    if (bcmbal_obj_msg_should_pack_data(msg) && (group->get_packed_length != NULL))
+    {
+        uint8_t *data_ptr = (uint8_t *) ((long)msg + group->data_offset);
+        ret += group->get_packed_length(data_ptr, msg->presence_mask);
+    }
+
+    return ret;
+}
+
+/** Packs a message to a byte stream.
+ *
+ * \param msg The message to pack. 
+ * \param buf The stream to pack into. 
+ * \return An error code or BCM_ERR_OK for success. 
+ */
+static bcmos_errno _bcmbal_obj_msg_pack(bal_comm_msg_hdr *msg, bcmbal_buf *buf)
+{
+    uint8_t *key_ptr;
+    bcmos_errno err;
+    bcmbal_group_info *group;
+    bcmbal_group_info *key;
+    bcmbal_obj *bal_obj = (bcmbal_obj *)bcmbal_payload_ptr_get(msg);
+
+    if (!_bcmbal_get_group_info(bal_obj, &group, &key))
+    {
+        return BCM_ERR_MSG_ERROR;
+    }
+
+    err = bcmbal_bal_msg_hdr_pack(msg, buf);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    err = bcmbal_obj_msg_hdr_pack(bal_obj, buf);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    key_ptr = (uint8_t *) (bal_obj + 1);
+    if (!key->pack(key_ptr, buf, BCMBAL_PRESENCE_MASK_ALL))
+    {
+        return BCM_ERR_OVERFLOW;
+    }
+
+    if (bcmbal_obj_msg_should_pack_data(bal_obj) && (group->pack != NULL))
+    {
+        uint8_t *data_ptr = (uint8_t *) ((long)bal_obj + group->data_offset);
+        if (!group->pack(data_ptr, buf, bal_obj->presence_mask))
+        {
+            return BCM_ERR_OVERFLOW;
+        }
+    }
+
+    return err;
+}
+
+/* scan the input buffer to determine how much memory will be required to unpack variable-sized lists */
+static bcmos_errno bcmbal_obj_msg_list_mem_scan(bcmbal_buf *buf, const bcmbal_obj *hdr, const bcmbal_group_info *group, const bcmbal_group_info *key, uint32_t *size)
+{
+    uint32_t pos_before_scan = bcmbal_buf_get_used(buf);
+
+    if (!key->mem_scan(buf, size, BCMBAL_PRESENCE_MASK_ALL))
+    {
+        return BCM_ERR_OVERFLOW;
+    }
+
+    if (bcmbal_obj_msg_should_pack_data(hdr) && (group->mem_scan != NULL) && !group->mem_scan(buf, size, hdr->presence_mask))
+    {
+        return BCM_ERR_OVERFLOW;
+    }
+
+    if (!bcmbal_buf_rewind(buf, bcmbal_buf_get_used(buf) - pos_before_scan))
+    {
+        return BCM_ERR_OVERFLOW;
+    }
+
+    return BCM_ERR_OK;
+}
+
+/** Unpacks a message from a byte stream. 
+ *
+ * This unpacks the message from the packed form into the struct following the "unpacked" pointer.  There are several
+ * special cases:
+ *
+ * if *unpacked == NULL:
+ *   *unpacked will be allocated dynamically via bcmos_calloc, in a contiguous block of memory with the struct
+ *   itself followed by the memory required for all variable-sized lists.
+ *
+ * if (*unpacked)->list_buf != NULL:
+ *   When a variable-length list is encountered in the input stream, and the array field we're unpacking into is NULL,
+ *   memory will be allocated starting from (*unpacked)->list_buf.  If multiple such lists exist, they will share this
+ *   buffer.  If the (*unpacked)->list_buf_size is not large enough, this will return BCM_ERR_INSUFFICIENT_LIST_MEM.
+ *
+ * \param buf           The stream to unpack from.
+ * \param unpacked      A pointer to the resulting unpacked BAL message starting at the bal header.
+ * \return The number of bytes unpacked if > 0, or an error as defined in bcmos_errno.
+ */
+static int32_t _bcmbal_obj_msg_unpack(bcmbal_buf *buf, bal_comm_msg_hdr **unpacked)
+{
+    bcmbal_obj bal_obj_hdr;
+    bal_comm_msg_hdr *bal_msg_hdr = &bal_obj_hdr.comm_hdr;
+    bcmos_errno err;
+    bcmbal_group_info *group;
+    bcmbal_group_info *key;
+    bcmos_bool did_malloc = BCMOS_FALSE;
+    uint8_t *key_ptr;
+    void *list_mem = NULL;
+    void **list_mem_ptr = NULL;
+    uint32_t size = 0;
+    bcmbal_obj *unpacked_bal_obj;
+
+    /* Preserve header fields that are not packed */
+    if (*unpacked != NULL)
+        memcpy(&bal_obj_hdr, bcmbal_payload_ptr_get(*unpacked), sizeof(bal_obj_hdr));
+    else
+        memset(&bal_obj_hdr, 0, sizeof(bal_obj_hdr));
+
+    err = bcmbal_bal_msg_hdr_unpack(bal_msg_hdr, buf);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    err = bcmbal_obj_msg_hdr_unpack(&bal_obj_hdr, buf);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    if (!_bcmbal_get_group_info(&bal_obj_hdr, &group, &key))
+    {
+        return BCM_ERR_MSG_ERROR;
+    }
+
+    /* If the caller did not allocate a space to unpack into, then alloc one */
+    if (*unpacked == NULL)
+    {
+        size = group->container_size == 0 ? sizeof(bcmbal_obj) + key->size : group->container_size;
+
+        err = bcmbal_obj_msg_list_mem_scan(buf, &bal_obj_hdr, group, key, &size);
+        if (err != BCM_ERR_OK)
+        {
+            return err;
+        }
+
+        /* allocate a bal msg header, and a BAL object with data length of "size" */
+        unpacked_bal_obj = bcmbal_msg_calloc(size);
+        if (unpacked_bal_obj == NULL)
+        {
+            return BCM_ERR_NOMEM;
+        }
+
+        *unpacked = bcmbal_bal_hdr_get(unpacked_bal_obj);
+
+        list_mem = (uint8_t *)unpacked_bal_obj + group->container_size;
+        list_mem_ptr = &list_mem;
+        did_malloc = BCMOS_TRUE;
+    }
+    else
+    {
+        unpacked_bal_obj = bcmbal_payload_ptr_get(*unpacked);
+
+        if (unpacked_bal_obj->list_buf != NULL)
+        {
+            err = bcmbal_obj_msg_list_mem_scan(buf, &bal_obj_hdr, group, key, &size);
+            if (err != BCM_ERR_OK)
+            {
+                return err;
+            }
+
+            if (size > unpacked_bal_obj->list_buf_size)
+            {
+                return BCM_ERR_INSUFFICIENT_LIST_MEM;
+            }
+
+            list_mem = unpacked_bal_obj->list_buf;
+            list_mem_ptr = &list_mem;
+        }
+
+        size += group->container_size == 0 ? sizeof(bcmbal_obj) + key->size : group->container_size;
+    }
+
+    /* copy the bal message header into the unpack buffer */
+    bal_msg_hdr->m.size = size - sizeof(bcmos_msg);
+
+    /* copy the bal object header into the unpack buffer */
+    *unpacked_bal_obj = bal_obj_hdr;
+
+    key_ptr = (uint8_t *) (unpacked_bal_obj + 1);
+    if (!key->unpack(key_ptr, buf, list_mem_ptr, BCMBAL_PRESENCE_MASK_ALL))
+    {
+        if (did_malloc)
+        {
+            bcmbal_msg_free(unpacked_bal_obj);
+            *unpacked = NULL;
+        }
+
+        return BCM_ERR_OVERFLOW;
+    }
+
+    if (bcmbal_obj_msg_should_pack_data(&bal_obj_hdr))
+    {
+        uint8_t *data_ptr = (uint8_t *)unpacked_bal_obj + group->data_offset;
+        if ((group->unpack != NULL) && !group->unpack(data_ptr, buf, list_mem_ptr, unpacked_bal_obj->presence_mask))
+        {
+            if (did_malloc)
+            {
+                bcmbal_msg_free(unpacked_bal_obj);
+                *unpacked = NULL;
+            }
+
+            return BCM_ERR_OVERFLOW;
+        }
+    }
+
+    return size;
+}
+
+bcmos_errno bcmbal_obj_msg_pack(bal_comm_msg_hdr *unpacked_bal_msg, /* unpacked msg */ bcmos_msg **packed_msg)  /* packed message */
+{
+    bcmbal_buf buf;
+    bcmos_errno ret;
+    bcmbal_obj *unpacked_obj;
+    int32_t packed_payload_len;
+    uint8_t *packed_payload;
+    bcmos_msg *os_msg;
+
+    *packed_msg = NULL; /* Initialization */
+
+    /* Recover a pointer to the UNPACKED bal object */
+    unpacked_obj = (bcmbal_obj *)bcmbal_payload_ptr_get(unpacked_bal_msg);
+
+    /* Calculate packed length */
+    packed_payload_len = _bcmbal_obj_msg_packed_length_get(unpacked_obj);
+    if (packed_payload_len < 0) return (bcmos_errno) packed_payload_len;
+
+    os_msg = (bcmos_msg *)bcmos_alloc(packed_payload_len + sizeof(bcmos_msg));
+
+    if (NULL == os_msg) return BCM_ERR_NORES;
+
+    memset(os_msg, 0, sizeof(bcmos_msg));
+    packed_payload = (uint8_t *) (os_msg + 1);
+    bcmbal_buf_init(&buf, packed_payload_len, packed_payload);
+    if (BCM_ERR_OK != (ret = _bcmbal_obj_msg_pack(unpacked_bal_msg, &buf)))
+    {
+        bcmos_free(os_msg);
+        return ret;
+    }
+
+    os_msg->data = packed_payload;
+    os_msg->size = packed_payload_len;
+    os_msg->type = unpacked_bal_msg->m.type;
+    os_msg->instance = unpacked_bal_msg->m.instance;
+    os_msg->sender = unpacked_bal_msg->m.sender;
+    *packed_msg = os_msg;
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcmbal_obj_msg_unpack(bcmos_msg *packed_msg, /* packed message */ bal_comm_msg_hdr **unpacked_bal_msg)  /* the unpacked bal msg */
+{
+    bcmbal_buf buf;
+    int32_t unpacked_len;
+    bal_comm_msg_hdr *bal_msg_hdr = *unpacked_bal_msg;
+    uint8_t *packed_payload = packed_msg->data;
+    uint32_t packed_payload_len = packed_msg->size;
+
+    bcmbal_buf_init(&buf, packed_payload_len, packed_payload);
+
+    unpacked_len = _bcmbal_obj_msg_unpack(&buf, &bal_msg_hdr);
+
+    if (unpacked_len < 0)
+    {
+        return (bcmos_errno) unpacked_len;
+    }
+
+    if (((bcmbal_obj *) (bcmbal_payload_ptr_get(bal_msg_hdr)))->version != BCMBAL_OBJ_VERSION)
+    {
+        bcmos_printf("Illegal BAL object version detected.  Found: %d, Should be:%d\n", ((bcmbal_obj *) (bcmbal_payload_ptr_get(bal_msg_hdr)))->version, BCMBAL_OBJ_VERSION);
+
+        return BCM_ERR_PARSE;
+    }
+
+    *unpacked_bal_msg = bal_msg_hdr;
+
+    /* NOTE: Do NOT Free the passed in original received message! */
+    return BCM_ERR_OK;
+}
+
+bcmos_errno _bcmbal_obj_group_id_split(bcmbal_obj_group_id group_id, bcmbal_obj_id *obj, bcmbal_mgt_group *group, uint16_t *subgroup)
+{
+    if ((group_id >= BCMBAL_OBJ_GROUP_ID__NUM_OF) || (group_info[group_id] == NULL))
+    {
+        return BCM_ERR_RANGE;
+    }
+
+    *obj = group_info[group_id]->obj_type;
+    *group = group_info[group_id]->group;
+    *subgroup = group_info[group_id]->subgroup;
+    return BCM_ERR_OK;
+}
+
+/******************************************************************************/
+uint8_t bcmbal_obj_msg_instance(const bcmbal_obj *msg)
+{
+    const void *val_ptr;
+
+    if (msg->obj_type >= BCMBAL_OBJ_ID__NUM_OF)
+    {
+        return 0;
+    }
+
+    if (instance_info[msg->obj_type].offset < 0)
+    {
+        return 0;
+    }
+
+    val_ptr = ((const uint8_t *)(msg + 1)) + instance_info[msg->obj_type].offset;
+
+    /** This is probably not the smartest way to do this... TODO: revisit */
+    switch (instance_info[msg->obj_type].size)
+    {
+        case 1:
+            return *((const uint8_t *)val_ptr);
+        case 2:
+            return (uint8_t) (*((const uint16_t *)val_ptr));
+        case 4:
+            return (uint8_t) (*((const uint32_t *)val_ptr));
+        case 8:
+            return (uint8_t) (*((const uint64_t *)val_ptr));
+        default:
+            return 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_errno bcmbal_obj_msg_clone(bal_comm_msg_hdr **dest, bal_comm_msg_hdr *src)
+{
+    bcmos_errno err;
+    int32_t packed_obj_msg_len;
+    uint8_t *mem;
+    bcmbal_buf buf;
+
+    packed_obj_msg_len = _bcmbal_obj_msg_packed_length_get(bcmbal_payload_ptr_get(src));
+    if (packed_obj_msg_len < 0)
+    {
+        return (bcmos_errno) packed_obj_msg_len;
+    }
+
+    /* Allocate a BAL msg (this includes the BAL msg hdr PLUS the BAL object) */
+    mem = bcmos_calloc((uint32_t) packed_obj_msg_len);
+    if (mem == NULL)
+    {
+        return BCM_ERR_NOMEM;
+    }
+
+    bcmbal_buf_init(&buf, (uint32_t) packed_obj_msg_len, mem);
+    err = _bcmbal_obj_msg_pack(src, &buf);
+    if (err != BCM_ERR_OK)
+    {
+        bcmos_free(mem);
+        return err;
+    }
+
+    buf.curr = buf.start;
+    err = _bcmbal_obj_msg_unpack(&buf, dest);
+    bcmos_free(mem);
+    return err;
+}
+
+/******************************************************************************/
+bcmos_errno bcmbal_get_prop_readonly_mask(bcmbal_obj_id obj, bcmbal_presence_mask *mask)
+{
+    if (obj >= BCMBAL_OBJ_ID__NUM_OF)
+    {
+        return BCM_ERR_RANGE;
+    }
+
+    *mask = readonly_prop_mask[obj];
+    return BCM_ERR_OK;
+}
diff --git a/bal_release/src/lib/libobjmsg/bal_obj_msg_pack_unpack.h b/bal_release/src/lib/libobjmsg/bal_obj_msg_pack_unpack.h
new file mode 100644
index 0000000..1837a99
--- /dev/null
+++ b/bal_release/src/lib/libobjmsg/bal_obj_msg_pack_unpack.h
@@ -0,0 +1,51 @@
+#ifndef BAL_OBJ_MSG_PACK_UNPACK_H_
+#define BAL_OBJ_MSG_PACK_UNPACK_H_
+
+#include "bcmos_system.h"
+#include "bcmos_errno.h"
+#include "bal_model_types.h"
+#include "bal_model_funcs.h"
+
+
+bcmos_errno bcmbal_obj_msg_pack(bal_comm_msg_hdr *unpacked_bal_msg,/* unpacked msg */ 
+                                bcmos_msg **packed_msg);    /* packed message */
+
+bcmos_errno bcmbal_obj_msg_unpack(bcmos_msg *packed_msg,    /* packed message */ 
+                                  bal_comm_msg_hdr **unpacked_bal_msg); /* the unpacked bal msg */
+
+/** Returns the instance number of a given message, as determined by the object key.
+ *
+ * \param msg The message to check.
+ * \return The instance number of the message.
+ */
+uint8_t bcmbal_obj_msg_instance(const bcmbal_obj *msg);
+
+/** Gets a mask of all readonly properties for an object's cfg group.
+ *
+ * \param obj The objecct to check.
+ * \param mask A mask of bits set to 1 per read-only property.
+ * \return An error code or BCM_ERR_OK for success. 
+ */
+bcmos_errno bcmbal_get_prop_readonly_mask(bcmbal_obj_id obj, bcmbal_presence_mask *mask);
+
+/** Clones a message by packing it to a buffer then unpacking it into the destination message.
+ * This uses _bcmbal_obj_msg_unpack, so if *dest is NULL, memory will by allocated dynamically using bcmos_calloc.
+ *
+ * \param dest A pointer to the location in memory that will hold the cloned message.
+ * \param src The message that should be copied.
+ * \return An error code or BCM_ERR_OK for success.
+ */
+bcmos_errno bcmbal_obj_msg_clone(bal_comm_msg_hdr **dest, bal_comm_msg_hdr *src);
+
+/** Converts a generic group ID into a specific object type, group and subgroup.
+ *
+ * \param group_id The generic group ID.
+ * \param obj The object type that corresponds to the group ID.
+ * \param group The group type that corresponds to the group ID.
+ * \param subgroup The subgroup index that corresponds to the group ID.
+ * \return An error code or BCM_ERR_OK for success. 
+ */
+bcmos_errno _bcmbal_obj_group_id_split(bcmbal_obj_group_id group_id, bcmbal_obj_id *obj, bcmbal_mgt_group *group, uint16_t *subgroup);
+
+
+#endif /* BAL_OBJ_MSG_PACK_UNPACK_H_ */
diff --git a/bal_release/src/lib/librscmgr/Makefile b/bal_release/src/lib/librscmgr/Makefile
new file mode 100644
index 0000000..d94cd45
--- /dev/null
+++ b/bal_release/src/lib/librscmgr/Makefile
@@ -0,0 +1,37 @@
+###############################################################################
+#
+#  <:copyright-BRCM:2016:DUAL/GPL:standard
+#  
+#     Copyright (c) 2016 Broadcom
+#     All Rights Reserved
+#  
+#  Unless you and Broadcom execute a separate written software license
+#  agreement governing use of this software, this software is licensed
+#  to you under the terms of the GNU General Public License version 2
+#  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+#  with the following added to such license:
+#  
+#     As a special exception, the copyright holders of this software give
+#     you permission to link this software with independent modules, and
+#     to copy and distribute the resulting executable under terms of your
+#     choice, provided that you also meet, for each linked independent
+#     module, the terms and conditions of the license of that module.
+#     An independent module is a module which is not derived from this
+#     software.  The special exception does not apply to any modifications
+#     of the software.
+#  
+#  Not withstanding the above, under no circumstances may you combine
+#  this software in any way with any other Broadcom software provided
+#  under a license other than the GPL, without Broadcom's express prior
+#  written consent.
+#  
+#  :>
+#
+###############################################################################
+MOD_NAME = rscmgr
+MOD_TYPE = lib
+MOD_DEPS = dev_log cli os_cli bal_api 
+srcs = rsc_mgr.c rsc_mgr_common.c rsc_mgr_cli.c
+
+# XXX To break a circular dependency, we should avoid adding bal_core to MOD_DEPS
+EXTRA_CFLAGS += -I$(SRC_DIR)/../../core/main
diff --git a/bal_release/src/lib/librscmgr/rsc_mgr.c b/bal_release/src/lib/librscmgr/rsc_mgr.c
new file mode 100644
index 0000000..bd8afec
--- /dev/null
+++ b/bal_release/src/lib/librscmgr/rsc_mgr.c
@@ -0,0 +1,922 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+#include <bcmolt_host_api.h>
+#include <bcm_dev_log.h>
+#include <bal_objs.h>
+#include <bal_api.h>
+#include <bal_cli.h>
+#include <bcmolt_math.h>
+#include <bcm_topo.h>
+#include "rsc_mgr_common.h"
+#include "rsc_mgr.h"
+
+#define GPON_NUM_OF_ALLOC_IDS 1024
+#define XGPON_NUM_OF_ALLOC_IDS 2048
+
+#define GPON_NUM_OF_GEM_PORT_IDS_PER_PON 4096
+#define XGPON_NUM_OF_GEM_PORT_IDS_PER_PON 8192
+
+#define RSC_MGR_ALLOC_ID_LAST_DATA(pon_id, first_data_alloc_id) \
+    ((first_data_alloc_id) + (bcmolt_pon_alloc_id)(RSC_MGR_PON_TOPO_CONTEXT(pon_id)->num_of_alloc_ids - 1))
+#define RSC_MGR_ALLOC_ID_IS_VALID_DATA(pon_id, alloc_id, first_data_alloc_id) ( \
+    ((alloc_id) >= (first_data_alloc_id) && (alloc_id) <= RSC_MGR_ALLOC_ID_LAST_DATA(pon_id, first_data_alloc_id)))
+#define RSC_MGR_ALLOC_ID_IS_VALID(pon_id, alloc_id, first_data_alloc_id) ( \
+    ((alloc_id) <= RSC_MGR_ALLOC_ID_LAST_DEFAULT(pon_id)) || \
+    RSC_MGR_ALLOC_ID_IS_VALID_DATA(pon_id, alloc_id, first_data_alloc_id))
+
+#define RSC_MGR_GEM_PORT_ID_LAST_DEFAULT(pon_id) ((bcmolt_pon_gem_port_id)(bcm_topo_pon_get_max_num_of_onus(pon_id) - 1))
+#define RSC_MGR_GEM_PORT_ID_LAST_DATA(pon_id, first_data_port_id) \
+    ((first_data_port_id) + (bcmolt_pon_gem_port_id)(RSC_MGR_PON_TOPO_CONTEXT(pon_id)->num_of_gem_ports - bcm_topo_pon_get_max_num_of_onus(pon_id) - 1))
+#define RSC_MGR_GEM_PORT_ID_IS_VALID_DATA(pon_id, gem_port_id, first_data_port_id) ( \
+    ((gem_port_id) >= (first_data_port_id) && (gem_port_id) <= RSC_MGR_GEM_PORT_ID_LAST_DATA(pon_id, first_data_port_id)))
+#define RSC_MGR_GEM_PORT_ID_IS_VALID(pon_id, gem_port_id, first_data_port_id) ( \
+    ((gem_port_id) <= RSC_MGR_GEM_PORT_ID_LAST_DEFAULT(pon_id)) || \
+    RSC_MGR_GEM_PORT_ID_IS_VALID_DATA(pon_id, gem_port_id, first_data_port_id))
+
+#define RSC_MGR_FOR_EACH_ALLOC_INDEX(pon_id, alloc_index) \
+    for (alloc_index = (bcmolt_pon_alloc_index)0; alloc_index < (bcmolt_pon_alloc_index)RSC_MGR_PON_TOPO_CONTEXT(pon_id)->num_of_alloc_ids; alloc_index++)
+
+#define RSC_MGR_FOR_EACH_GEM_INDEX(pon_id, gem_port_index) \
+    for (gem_port_index = 0; (bcmolt_pon_gem_port_index)gem_port_index < (bcmolt_pon_gem_port_index)RSC_MGR_PON_TOPO_CONTEXT(pon_id)->num_of_gem_ports; gem_port_index++)
+
+#define RSC_MGR_FOR_EACH_TM_SCHED_AUTO_INDEX(tm_sched_auto_index) \
+		for (tm_sched_auto_index = 0; (bcmbal_tm_sched_id_index)tm_sched_auto_index < (bcmbal_tm_sched_id_index)tm_context.num_of_tm_sched_auto_key_ids; tm_sched_auto_index++)
+
+/* Because GEM port 0 .. 127 are used for OMCI, we can start allocating from 128. But due to a bug in Maple A0, 128 .. 159 must not be used. So we start from 256. */
+#define MIN_BASE_GEM_PORT_ID_GPON 256
+
+#define NUM_OF_TM_SCHED_AUTO_KEY_IDS	2048
+#define MIN_BASE_TM_SCHED_AUTO_ID 2048
+
+
+rsc_mgr_context_t rsc_mgr_context;
+rsc_mgr_tm_context tm_context;
+
+
+static bcmos_errno rsc_mgr_alloc_validate_common(bcmbal_intf_id access_int_id);
+static bcmos_errno rsc_mgr_obj_get(bcmbal_intf_id access_int_id, rsc_mgr_obj_id obj_id, rsc_mgr_obj_rsc *obj_rsc, rsc_mgr_obj **obj, dev_log_id log_id);
+static bcmos_errno rsc_mgr_obj_store_user_data(rsc_mgr_obj *obj, void *user_data);
+static bcmos_errno rsc_mgr_obj_remove_user_data(rsc_mgr_obj *obj, void *user_data);
+
+
+static bcmos_bool rsc_mgr_is_valid_data_alloc_id_cb(bcmolt_pon_ni pon_id, rsc_mgr_obj_id id, rsc_mgr_obj_id min_data_obj_id)
+{
+    return (bcm_topo_pon_is_valid(pon_id) && RSC_MGR_ALLOC_ID_IS_VALID_DATA(pon_id, id, min_data_obj_id));
+}
+
+static rsc_mgr_obj_id rsc_mgr_get_last_data_alloc_id_cb(bcmolt_pon_ni pon_id, rsc_mgr_obj_id min_data_obj_id)
+{
+    return (rsc_mgr_obj_id)(bcmolt_pon_alloc_id)RSC_MGR_ALLOC_ID_LAST_DATA(pon_id, min_data_obj_id);
+}
+
+static bcmos_bool rsc_mgr_is_valid_data_gem_cb(bcmolt_pon_ni pon_id, rsc_mgr_obj_id id, rsc_mgr_obj_id min_data_obj_id)
+{
+    return (bcm_topo_pon_is_valid(pon_id) && RSC_MGR_GEM_PORT_ID_IS_VALID_DATA(pon_id, id, min_data_obj_id));
+}
+
+static rsc_mgr_obj_id rsc_mgr_get_last_data_gem_cb(bcmolt_pon_ni pon_id, rsc_mgr_obj_id min_data_obj_id)
+{
+    return (rsc_mgr_obj_id)(bcmolt_pon_gem_port_id)RSC_MGR_GEM_PORT_ID_LAST_DATA(pon_id, min_data_obj_id);
+}
+static bcmos_bool rsc_mgr_is_valid_data_tm_sched_auto_id(rsc_mgr_obj_id id)
+{
+    return (id >= MIN_BASE_TM_SCHED_AUTO_ID && id < MIN_BASE_TM_SCHED_AUTO_ID + NUM_OF_TM_SCHED_AUTO_KEY_IDS);
+}
+
+static bcmos_bool rsc_mgr_is_valid_data_tm_sched_auto_id_cb(bcmolt_pon_ni pon_id, rsc_mgr_obj_id id, rsc_mgr_obj_id min_data_obj_id)
+{
+    return rsc_mgr_is_valid_data_tm_sched_auto_id(id);
+}
+
+static rsc_mgr_obj_id rsc_mgr_get_last_data_tm_sched_auto_id_cb(bcmolt_pon_ni pon_id, rsc_mgr_obj_id min_data_obj_id)
+{
+    return (rsc_mgr_obj_id)(min_data_obj_id + NUM_OF_TM_SCHED_AUTO_KEY_IDS - 1);
+}
+
+
+static bcmos_errno rsc_mgr_obj_alloc(bcmbal_intf_id access_int_id, rsc_mgr_obj_id *obj_id, uint32_t range_size, rsc_mgr_obj_type type, rsc_mgr_obj_rsc *obj_rsc, void *user_data, dev_log_id log_id)
+{
+    rsc_mgr_obj *obj;
+    bcmos_errno rc;
+
+    if (range_size < RSC_MGR_MIN_RANGE_SIZE || range_size > RSC_MGR_MAX_RANGE_SIZE)
+    {
+        BCM_LOG(ERROR, log_id, "Range size must be in the range %u .. %u\n", RSC_MGR_MIN_RANGE_SIZE, RSC_MGR_MAX_RANGE_SIZE);
+        return BCM_ERR_PARM;
+    }
+  
+    if (*obj_id)
+    {
+        rc = rsc_mgr_obj_get(access_int_id, *obj_id, obj_rsc, &obj, log_id);
+        if (rc != BCM_ERR_OK)
+            return rc;
+
+        if (obj->range_size != range_size)
+        {
+            BCM_LOG(ERROR, log_id, "When reusing a range of %ss, range size (%d) must be exactly the same as the range from creation (%u)\n",
+                obj_rsc->obj_name, range_size, obj->range_size);
+            return BCM_ERR_PARM;
+        }
+
+        if (obj->type != type)
+        {
+            BCM_LOG(ERROR, log_id, "When reusing %ss, type (%d) must be exactly the same as the type from creation (%u)\n",
+                obj_rsc->obj_name, type, obj->type);
+            return BCM_ERR_PARM;
+        }
+    }
+    else
+    {
+        rsc_mgr_obj *base_obj;
+        rsc_mgr_obj *last_obj;
+        rsc_mgr_obj *obj_iter;
+        
+        /* Find the first free range that fits ("first-fit" algorithm). */
+        TAILQ_FOREACH(obj_iter, &obj_rsc->free_objs, list)
+        {
+            if (range_size <= obj_iter->range_size)
+                break;
+        }
+        if (!obj_iter)
+        {
+            BCM_LOG(ERROR, log_id, "No free %ss\n", obj_rsc->obj_name);
+            return BCM_ERR_NORES;
+        }
+        *obj_id = obj_iter->id;
+
+        if (range_size < obj_iter->range_size)
+        {
+            /* Insert a smaller range (decrease by 'range_size') to the list of free objects. It will replace the old free range. */
+            base_obj = &obj_iter[range_size];
+            last_obj = &obj_iter[obj_iter->range_size - 1];
+            TAILQ_INSERT_HEAD(&obj_rsc->free_objs, base_obj, list);
+            base_obj->range_size = obj_iter->range_size - range_size;
+            last_obj->base_obj = base_obj;
+        }
+
+        /* Move 'range_size' objects from the list of free objects to the list of allocated objects. */
+        base_obj = obj_iter;
+        last_obj = &obj_iter[range_size - 1];
+        TAILQ_REMOVE(&obj_rsc->free_objs, base_obj, list);
+        TAILQ_INSERT_HEAD(&obj_rsc->allocated_objs, base_obj, list);
+        base_obj->range_size = range_size;
+        base_obj->type = type;
+        last_obj->base_obj = base_obj;
+
+        obj = obj_iter;
+        /* since new object, initialize the user data list */
+        TAILQ_INIT(&obj->user_data_list);
+
+    }
+    obj->ref_count++;
+
+    /** store user data (flow entry pointer) in a linked list inside the object */
+    rsc_mgr_obj_store_user_data(obj, user_data);
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno rsc_mgr_obj_free(bcmbal_intf_id access_int_id, rsc_mgr_obj_id obj_id, rsc_mgr_obj_rsc *obj_rsc, void *user_data, dev_log_id log_id)
+{
+    rsc_mgr_obj *obj;
+    rsc_mgr_obj *last_obj;
+    bcmos_errno rc;
+
+    rc = rsc_mgr_obj_get(access_int_id, obj_id, obj_rsc, &obj, log_id);
+    if (rc != BCM_ERR_OK)
+        return rc;
+
+    obj->ref_count--;
+    /** remove user data (flow entry pointer) from the linked list inside the object */
+    rsc_mgr_obj_remove_user_data(obj, user_data);
+
+    if (!obj->ref_count)
+    {
+        rsc_mgr_obj *next_obj = NULL;
+        rsc_mgr_obj *prev_obj = NULL;
+
+        /* Validate that going to the next object won't overflow the array. */
+        if (obj < &obj_rsc->objs[obj_rsc->num_of_objs - 1] && &obj[obj->range_size] <= &obj_rsc->objs[obj_rsc->num_of_objs - 1])
+        {
+            /* Check if the next ID is in the free list (according to its reference count).
+             * If true -> we can merge obj's range with the next range. */
+            if (!obj[obj->range_size].ref_count)
+                next_obj = &obj[obj->range_size];
+        }
+
+        /* Validate that going to the base of the previous range won't underflow the array. */
+        if (obj > obj_rsc->objs)
+        {
+            /* Check if the base ID of the previous range is in the free list (according to the base ID's reference count).
+             * If true -> we can merge obj's range with the previous range. */
+            if (obj[-1].base_obj && !obj[-1].base_obj->ref_count)
+                prev_obj = obj[-1].base_obj;
+        }
+
+        /* First remove the object from the allocated linked list. */
+        TAILQ_REMOVE(&obj_rsc->allocated_objs, obj, list);
+        last_obj = &obj[obj->range_size - 1];
+        obj->type = RSC_MGR_OBJ_TYPE_INVALID; /* Clear type. */
+        if (next_obj && !prev_obj)
+        {
+            /* Merge only with next range. */
+            TAILQ_INSERT_BEFORE(next_obj, obj, list);
+            TAILQ_REMOVE(&obj_rsc->free_objs, next_obj, list);
+            obj->range_size += next_obj->range_size;
+            last_obj->base_obj = NULL;
+            next_obj->range_size = 0;
+            last_obj = &obj[obj->range_size - 1];
+            last_obj->base_obj = obj;
+        }
+        else if (!next_obj && prev_obj)
+        {
+            /* Merge only with previous range. */
+            prev_obj->range_size += obj->range_size;
+            obj->range_size = 0;
+            last_obj->base_obj = prev_obj;
+        }
+        else if (next_obj && prev_obj)
+        {
+            /* Merge with both next and previous ranges. */
+            prev_obj->range_size += obj->range_size + next_obj->range_size;
+            obj->range_size = 0;
+            next_obj->range_size = 0;
+            TAILQ_REMOVE(&obj_rsc->free_objs, next_obj, list);
+            last_obj->base_obj = NULL;
+            last_obj = &prev_obj[prev_obj->range_size - 1];
+            last_obj->base_obj = prev_obj;
+        }
+        else
+        {
+            /* No merge at all. */
+            TAILQ_INSERT_TAIL(&obj_rsc->free_objs, obj, list);
+        }
+    }
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno rsc_mgr_obj_get(bcmbal_intf_id access_int_id, rsc_mgr_obj_id obj_id, rsc_mgr_obj_rsc *obj_rsc, rsc_mgr_obj **obj, dev_log_id log_id)
+{
+    bcmos_errno rc;
+
+    rc = rsc_mgr_alloc_validate_common(access_int_id);
+    if (BCM_ERR_OK != rc)
+        return rc;
+
+    if (!obj_rsc->is_valid_data_obj_id_cb(access_int_id, obj_id, obj_rsc->min_data_obj_id))
+    {
+        BCM_LOG(ERROR, log_id, "%s must be in the range %u .. %u\n",
+            obj_rsc->obj_name, obj_rsc->min_data_obj_id, obj_rsc->get_last_data_obj_id_cb(access_int_id, obj_rsc->min_data_obj_id));
+        return BCM_ERR_PARM;
+    }
+
+    *obj = &obj_rsc->objs[obj_id - obj_rsc->min_data_obj_id];
+    /* Only base object must have its reference count > 0. */
+    if (!(*obj)->ref_count)
+    {
+        BCM_LOG(ERROR, log_id, "%s hasn't been allocated before\n", obj_rsc->obj_name);
+        return BCM_ERR_PARM;
+    }
+
+    return BCM_ERR_OK;
+}
+
+/** @brief stores user passed in data in the linked list inside the obj */
+static bcmos_errno rsc_mgr_obj_store_user_data(rsc_mgr_obj *obj, void *user_data)
+{
+    rsc_mgr_user_data_entry *user_data_entry = NULL;
+
+    if (NULL == user_data)
+        return BCM_ERR_OK;
+
+    user_data_entry = bcmos_calloc(sizeof(rsc_mgr_user_data_entry));
+    user_data_entry->user_data = user_data;
+    TAILQ_INSERT_HEAD(&obj->user_data_list, user_data_entry, next);
+
+    return BCM_ERR_OK;
+}
+
+/** @brief removes user data from the linked list inside the obj */
+static bcmos_errno rsc_mgr_obj_remove_user_data(rsc_mgr_obj *obj, void *user_data)
+{
+    rsc_mgr_user_data_entry *user_data_entry = NULL, *user_data_entry_tmp;
+
+    if (NULL == user_data)
+        return BCM_ERR_OK;
+
+    TAILQ_FOREACH_SAFE(user_data_entry, &obj->user_data_list, next, user_data_entry_tmp)
+    {
+        if (user_data == user_data_entry->user_data)
+            break;
+    }
+    TAILQ_REMOVE(&obj->user_data_list, user_data_entry, next);
+
+    user_data_entry->user_data = NULL;
+    bcmos_free(user_data_entry);
+
+    return BCM_ERR_OK;
+}
+
+/** @brief iterator to iterate through the user data list in obj 
+ * @note the assumption is if a NULL is returned, then caller code stop the iteration.
+ * */
+static void *rsc_mgr_obj_get_next_user_data(rsc_mgr_obj *obj, void **curr_user_data_entry, void **next_user_data_entry)
+{
+    if (NULL == *curr_user_data_entry)
+    {
+        *curr_user_data_entry = TAILQ_FIRST(&obj->user_data_list);
+        if (*curr_user_data_entry)
+        {
+            *next_user_data_entry = TAILQ_NEXT(((rsc_mgr_user_data_entry *)*curr_user_data_entry), next);
+            return ((rsc_mgr_user_data_entry *)(*curr_user_data_entry))->user_data;
+        }
+    }
+    else
+    {
+        *curr_user_data_entry = *next_user_data_entry;
+        if (*next_user_data_entry)
+        {
+            *next_user_data_entry = TAILQ_NEXT(((rsc_mgr_user_data_entry *)*next_user_data_entry), next);
+            return ((rsc_mgr_user_data_entry *)(*curr_user_data_entry))->user_data;
+        }
+    }
+
+    return NULL;
+}
+
+
+/* Alloc ID (aggregation port ID) */
+static bcmos_errno _rsc_mgr_access_int_base_alloc_id_set(bcmbal_intf_id access_int_id, bcmbal_aggregation_port_id min_data_agg_port_id)
+{
+    bcmolt_pon_alloc_index alloc_index;
+    rsc_mgr_topo_pon_context *topo_context = RSC_MGR_PON_TOPO_CONTEXT(access_int_id);
+
+    if (bcm_topo_pon_get_pon_mode(access_int_id) == BCM_TOPO_PON_MODE_GPON)
+    {
+        bcmolt_gpon_ni_cfg gpon_ni_cfg = {};
+        bcmolt_gpon_ni_cfg_id failed_prop;
+
+        BCMOLT_CFG_PROP_SET(&gpon_ni_cfg, gpon_ni, min_data_alloc_id, min_data_agg_port_id);
+        if (!bcmolt_gpon_ni_cfg_data_bounds_check(&gpon_ni_cfg.data, (1ULL << BCMOLT_GPON_NI_CFG_ID_MIN_DATA_ALLOC_ID), &failed_prop))
+        {
+            BCM_LOG(ERROR, topo_context->log_id, "Minimal data alloc ID is not in the allowed range\n");
+            return BCM_ERR_PARM;
+        }
+    }
+    else
+    {
+        bcmolt_xgpon_ni_cfg xgpon_ni_cfg = {};
+        bcmolt_xgpon_ni_cfg_id failed_prop;
+
+        BCMOLT_CFG_PROP_SET(&xgpon_ni_cfg, xgpon_ni, min_data_alloc_id, min_data_agg_port_id);
+        if (!bcmolt_xgpon_ni_cfg_data_bounds_check(&xgpon_ni_cfg.data, (1ULL << BCMOLT_XGPON_NI_CFG_ID_MIN_DATA_ALLOC_ID), &failed_prop))
+        {
+            BCM_LOG(ERROR, topo_context->log_id, "Minimal data alloc ID is not in the allowed range\n");
+            return BCM_ERR_PARM;
+        }
+    }
+    
+    if (!TAILQ_EMPTY(&topo_context->alloc_ids.allocated_objs))
+    {
+        BCM_LOG(ERROR, topo_context->log_id, "Minimal alloc ID cannot be set when there are allocated alloc IDs\n");
+        return BCM_ERR_STATE;
+    }
+
+    topo_context->alloc_ids.min_data_obj_id = (rsc_mgr_obj_id)min_data_agg_port_id;
+    RSC_MGR_FOR_EACH_ALLOC_INDEX(access_int_id, alloc_index)
+        topo_context->alloc_ids.objs[alloc_index].id = topo_context->alloc_ids.min_data_obj_id + alloc_index;
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno rsc_mgr_access_int_base_alloc_id_set(bcmbal_intf_id access_int_id, bcmbal_aggregation_port_id min_data_agg_port_id)
+{
+    bcmos_errno rc;
+
+    rc = rsc_mgr_alloc_validate_common(access_int_id);
+    if (BCM_ERR_OK != rc)
+        return rc;
+
+    return _rsc_mgr_access_int_base_alloc_id_set(access_int_id, min_data_agg_port_id);
+}
+
+
+static bcmos_errno rsc_mgr_alloc_validate_common(bcmbal_intf_id access_int_id)
+{
+    bcmos_errno rc;
+
+    rc = rsc_mgr_init_validate();
+    if (rc != BCM_ERR_OK)
+    {
+        BCM_LOG(ERROR, rsc_mgr_log_id, "Resource manager is uninitialized\n");
+        return rc;
+    }
+
+    if (!bcm_topo_pon_is_valid(access_int_id))
+        return BCM_ERR_PARM;
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno rsc_mgr_alloc_validate_non_unicast(bcmbal_intf_id access_int_id, bcmbal_service_port_id topo_context_gem_port, 
+                                                        bcmbal_service_port_id req_gem_port, uint32_t range_size, rsc_mgr_obj_type type, 
+                                                        dev_log_id log_id)
+{
+    if (topo_context_gem_port != BCMOLT_PON_GEM_PORT_ID_INVALID && req_gem_port && req_gem_port != topo_context_gem_port)
+    {
+        BCM_LOG(ERROR, log_id, "Access interface already has %s service port ID=%u configured\n", RSC_MGR_OBJ_TYPE_STR(type), topo_context_gem_port);
+        return BCM_ERR_ALREADY;
+    }
+
+    if (range_size > 1)
+    {
+        BCM_LOG(ERROR, log_id, "Range bigger than 1 for %s GEM port is not allowed\n", RSC_MGR_OBJ_TYPE_STR(type));
+        return BCM_ERR_PARM;
+    }
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno rsc_mgr_alloc_id_alloc(bcmbal_intf_id access_int_id, bcmbal_aggregation_port_id *agg_port_id, uint32_t range_size, void *user_data)
+{
+    bcmos_errno rc;
+    rsc_mgr_obj_id obj_id = *agg_port_id;
+    rsc_mgr_topo_pon_context *topo_context = RSC_MGR_PON_TOPO_CONTEXT(access_int_id);
+
+    rc = rsc_mgr_alloc_validate_common(access_int_id);
+    if (BCM_ERR_OK != rc)
+        return rc;
+
+    rc = rsc_mgr_obj_alloc(access_int_id, &obj_id, range_size, RSC_MGR_OBJ_TYPE_ALLOC_ID, &topo_context->alloc_ids, user_data, topo_context->log_id);
+    *agg_port_id = obj_id;
+
+    return rc;
+}
+
+bcmos_errno rsc_mgr_alloc_id_free(bcmbal_intf_id access_int_id, bcmbal_aggregation_port_id agg_port_id, void *user_data)
+{
+    rsc_mgr_topo_pon_context *topo_context = RSC_MGR_PON_TOPO_CONTEXT(access_int_id);
+
+    if (!bcm_topo_pon_is_valid(access_int_id))
+        return BCM_ERR_PARM;
+
+    return rsc_mgr_obj_free(access_int_id, (rsc_mgr_obj_id)agg_port_id, &topo_context->alloc_ids, user_data, topo_context->log_id);
+}
+
+bcmos_errno rsc_mgr_alloc_id_get_ref_count(bcmbal_intf_id access_int_id, bcmbal_aggregation_port_id agg_port_id, uint32_t *ref_count)
+{
+    rsc_mgr_obj *obj;
+    bcmos_errno rc;
+    rsc_mgr_topo_pon_context *topo_context = RSC_MGR_PON_TOPO_CONTEXT(access_int_id);
+
+    rc = rsc_mgr_obj_get(access_int_id, (rsc_mgr_obj_id)agg_port_id, &topo_context->alloc_ids, &obj, topo_context->log_id);
+    if (rc != BCM_ERR_OK)
+        return rc;
+
+    *ref_count = obj->ref_count;
+
+    return BCM_ERR_OK;
+}
+
+/** @brief iterates through user data list of an alloc id object */
+void *rsc_mgr_alloc_id_get_next_user_data(bcmbal_intf_id access_int_id, bcmbal_aggregation_port_id agg_port_id, void **curr_user_data_entry, void **next_user_data_entry)
+{
+    rsc_mgr_obj *obj;
+    bcmos_errno rc;
+    rsc_mgr_topo_pon_context *topo_context = RSC_MGR_PON_TOPO_CONTEXT(access_int_id);
+
+    rc = rsc_mgr_obj_get(access_int_id, (rsc_mgr_obj_id)agg_port_id, &topo_context->alloc_ids, &obj, topo_context->log_id);
+    if (rc != BCM_ERR_OK)
+        return NULL;
+
+    return rsc_mgr_obj_get_next_user_data(obj, curr_user_data_entry, next_user_data_entry); 
+}
+
+/* GEM (service port ID) */
+static bcmos_errno _rsc_mgr_access_int_base_gem_set(bcmbal_intf_id access_int_id, bcmbal_service_port_id min_data_svc_port_id)
+{
+    bcmolt_pon_gem_port_index gem_index;
+    rsc_mgr_topo_pon_context *topo_context = RSC_MGR_PON_TOPO_CONTEXT(access_int_id);
+
+    if (bcm_topo_pon_get_pon_mode(access_int_id) == BCM_TOPO_PON_MODE_GPON)
+    {
+        bcmolt_gpon_gem_port_cfg gpon_gem_port_cfg = { .key.gem_port_id = min_data_svc_port_id };
+        bcmolt_gpon_gem_port_key_id failed_prop;
+
+        if (!bcmolt_gpon_gem_port_key_bounds_check(&gpon_gem_port_cfg.key, 1ULL << BCMOLT_GPON_GEM_PORT_KEY_ID_GEM_PORT_ID, &failed_prop) ||
+            min_data_svc_port_id < MIN_BASE_GEM_PORT_ID_GPON)
+        {
+            BCM_LOG(ERROR, topo_context->log_id, "Minimal data GEM port is not in the allowed range\n");
+            return BCM_ERR_PARM;
+        }
+    }
+    else
+    {
+        bcmolt_xgpon_ni_cfg xgpon_ni_cfg = {};
+        bcmolt_xgpon_ni_cfg_id failed_prop;
+
+        BCMOLT_CFG_PROP_SET(&xgpon_ni_cfg, xgpon_ni, min_data_gem_port_id, min_data_svc_port_id);
+        if (!bcmolt_xgpon_ni_cfg_data_bounds_check(&xgpon_ni_cfg.data, 1ULL << BCMOLT_XGPON_NI_CFG_ID_MIN_DATA_GEM_PORT_ID, &failed_prop))
+        {
+            BCM_LOG(ERROR, topo_context->log_id, "Minimal data GEM port is not in the allowed range\n");
+            return BCM_ERR_PARM;
+        }
+    }
+
+    if (!TAILQ_EMPTY(&topo_context->gems.allocated_objs))
+    {
+        BCM_LOG(ERROR, topo_context->log_id, "Minimal GEM port cannot be set when there are allocated GEM ports\n");
+        return BCM_ERR_STATE;
+    }
+
+    topo_context->gems.min_data_obj_id = (rsc_mgr_obj_id)min_data_svc_port_id;
+    RSC_MGR_FOR_EACH_GEM_INDEX(access_int_id, gem_index)
+        topo_context->gems.objs[gem_index].id = topo_context->gems.min_data_obj_id + gem_index;
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno rsc_mgr_access_int_base_gem_set(bcmbal_intf_id access_int_id, bcmbal_service_port_id min_data_svc_port_id)
+{
+    bcmos_errno rc;
+
+    rc = rsc_mgr_alloc_validate_common(access_int_id);
+    if (BCM_ERR_OK != rc)
+        return rc;
+
+    return _rsc_mgr_access_int_base_gem_set(access_int_id, min_data_svc_port_id);
+}
+
+static bcmos_errno _rsc_mgr_base_tm_sched_auto_id_set (bcmbal_tm_sched_id min_tm_sched_auto_id)
+{
+	bcmbal_tm_sched_id_index i;
+
+
+	if (!TAILQ_EMPTY(&tm_context.tm_sched_auto_key_ids.allocated_objs))
+	{
+		BCM_LOG(ERROR, tm_context.log_id, "Minimal tm node auto id cannot be set when there are allocated ids \n");
+		return BCM_ERR_STATE;
+	}
+
+	tm_context.tm_sched_auto_key_ids.min_data_obj_id = (rsc_mgr_obj_id)min_tm_sched_auto_id;
+	RSC_MGR_FOR_EACH_TM_SCHED_AUTO_INDEX(i)
+	{
+		tm_context.tm_sched_auto_key_ids.objs[i].id = tm_context.tm_sched_auto_key_ids.min_data_obj_id + i;
+	}
+
+	return BCM_ERR_OK;
+}
+
+bcmos_errno rsc_mgr_gem_alloc_unicast(bcmbal_intf_id access_int_id, bcmbal_service_port_id *svc_port_id, uint32_t range_size, void *user_data)
+{
+    bcmos_errno rc;
+    rsc_mgr_topo_pon_context *topo_context = NULL;
+    rsc_mgr_obj_id obj_id = *svc_port_id;
+
+    rc = rsc_mgr_alloc_validate_common(access_int_id);
+    if (BCM_ERR_OK != rc)
+        return rc;
+
+    topo_context = RSC_MGR_PON_TOPO_CONTEXT(access_int_id);
+
+    rc = rsc_mgr_obj_alloc(access_int_id, &obj_id, range_size, RSC_MGR_OBJ_TYPE_GEM_PORT_UNICAST, &topo_context->gems, user_data, topo_context->log_id);
+    *svc_port_id = obj_id;
+
+    return rc;
+}
+
+
+bcmos_errno rsc_mgr_gem_alloc_multicast(bcmbal_intf_id access_int_id, bcmbal_service_port_id *svc_port_id, uint32_t range_size, void *user_data)
+{
+    bcmos_errno rc;
+    rsc_mgr_topo_pon_context *topo_context = NULL;
+    rsc_mgr_obj_id obj_id = *svc_port_id;
+
+    rc = rsc_mgr_alloc_validate_common(access_int_id);
+    if (BCM_ERR_OK != rc)
+        return rc;
+
+    topo_context = RSC_MGR_PON_TOPO_CONTEXT(access_int_id);
+#ifndef MULTIPLE_MULTICAST_GEM_PORTS_PER_PON
+    rc = rsc_mgr_alloc_validate_non_unicast(access_int_id, topo_context->multicast_gem_port, *svc_port_id, range_size, RSC_MGR_OBJ_TYPE_GEM_PORT_MULTICAST, topo_context->log_id);
+
+    if (topo_context->multicast_gem_port != BCMOLT_PON_GEM_PORT_ID_INVALID)
+        obj_id = topo_context->multicast_gem_port; /* This will cause the reference count of the multicast GEM to increase. */
+#endif
+
+    rc = rsc_mgr_obj_alloc(access_int_id, &obj_id, range_size, RSC_MGR_OBJ_TYPE_GEM_PORT_MULTICAST, &topo_context->gems, user_data, topo_context->log_id);
+    *svc_port_id = obj_id;
+
+#ifndef MULTIPLE_MULTICAST_GEM_PORTS_PER_PON
+    if (!rc)
+        RSC_MGR_PON_TOPO_CONTEXT(access_int_id)->multicast_gem_port = *svc_port_id;
+#endif
+
+    return rc;
+}
+
+bcmos_errno rsc_mgr_gem_alloc_broadcast(bcmbal_intf_id access_int_id, bcmbal_service_port_id *svc_port_id, uint32_t range_size, void *user_data)
+{
+    bcmos_errno rc;
+    rsc_mgr_topo_pon_context *topo_context = NULL;
+    rsc_mgr_obj_id obj_id = *svc_port_id;
+
+    rc = rsc_mgr_alloc_validate_common(access_int_id);
+    if (BCM_ERR_OK != rc)
+        return rc;
+
+    topo_context = RSC_MGR_PON_TOPO_CONTEXT(access_int_id);
+#ifndef MULTIPLE_BROADCAST_GEM_PORTS_PER_PON
+    rc = rsc_mgr_alloc_validate_non_unicast(access_int_id, topo_context->broadcast_gem_port, *svc_port_id, range_size, RSC_MGR_OBJ_TYPE_GEM_PORT_BROADCAST, topo_context->log_id);
+
+    if (topo_context->broadcast_gem_port != BCMOLT_PON_GEM_PORT_ID_INVALID)
+        obj_id = topo_context->broadcast_gem_port; /* This will cause the reference count of the broadcast GEM to increase. */
+#endif
+
+    rc = rsc_mgr_obj_alloc(access_int_id, &obj_id, range_size, RSC_MGR_OBJ_TYPE_GEM_PORT_BROADCAST, &topo_context->gems, user_data, topo_context->log_id);
+    *svc_port_id = obj_id;
+
+#ifndef MULTIPLE_BROADCAST_GEM_PORTS_PER_PON
+    if (!rc)
+        RSC_MGR_PON_TOPO_CONTEXT(access_int_id)->broadcast_gem_port = *svc_port_id;
+#endif
+
+    return rc;
+}
+
+bcmos_errno rsc_mgr_gem_free(bcmbal_intf_id access_int_id, bcmbal_service_port_id svc_port_id, void *user_data)
+{
+    bcmos_errno rc;
+#ifndef MULTIPLE_MULTICAST_GEM_PORTS_PER_PON
+    rsc_mgr_topo_pon_context *topo_context;
+#endif
+
+    if (!bcm_topo_pon_is_valid(access_int_id))
+        return BCM_ERR_PARM;
+
+#ifndef MULTIPLE_MULTICAST_GEM_PORTS_PER_PON
+    topo_context = RSC_MGR_PON_TOPO_CONTEXT(access_int_id);
+#endif
+
+    rc = rsc_mgr_obj_free(access_int_id, (rsc_mgr_obj_id)svc_port_id, &topo_context->gems, user_data, topo_context->log_id);
+
+#ifndef MULTIPLE_MULTICAST_GEM_PORTS_PER_PON
+    if (!rc && topo_context->multicast_gem_port == svc_port_id)
+        RSC_MGR_PON_TOPO_CONTEXT(access_int_id)->multicast_gem_port = BCMOLT_PON_GEM_PORT_ID_INVALID;
+#endif
+
+    return rc;
+}
+
+bcmos_errno rsc_mgr_gem_get_ref_count(bcmbal_intf_id access_int_id, bcmbal_service_port_id svc_port_id, uint32_t *ref_count)
+{
+    rsc_mgr_obj *obj;
+    bcmos_errno rc;
+    rsc_mgr_topo_pon_context *topo_context = RSC_MGR_PON_TOPO_CONTEXT(access_int_id);
+
+    rc = rsc_mgr_obj_get(access_int_id, (rsc_mgr_obj_id)svc_port_id, &topo_context->gems, &obj, topo_context->log_id);
+    if (rc != BCM_ERR_OK)
+        return rc;
+
+    *ref_count = obj->ref_count;
+
+    return BCM_ERR_OK;
+}
+
+/** @brief iterates through user data list of a gem object */
+void *rsc_mgr_gem_get_next_user_data(bcmbal_intf_id access_int_id, bcmbal_service_port_id svc_port_id, void **curr_user_data_entry, void **next_user_data_entry)
+{
+    rsc_mgr_obj *obj;
+    bcmos_errno rc;
+    rsc_mgr_topo_pon_context *topo_context = RSC_MGR_PON_TOPO_CONTEXT(access_int_id);
+
+    rc = rsc_mgr_obj_get(access_int_id, (rsc_mgr_obj_id)svc_port_id, &topo_context->gems, &obj, topo_context->log_id);
+    if (rc != BCM_ERR_OK)
+        return NULL;
+
+    return rsc_mgr_obj_get_next_user_data(obj, curr_user_data_entry, next_user_data_entry); 
+}
+
+
+
+bcmos_errno _rsc_mgr_tm_sched_auto_id_alloc(bcmbal_tm_sched_id *tm_sched_id)
+{
+    bcmos_errno rc;
+    rsc_mgr_obj_id obj_id = *tm_sched_id;
+
+    rc = rsc_mgr_init_validate();
+    if (rc != BCM_ERR_OK)
+    {
+        BCM_LOG(ERROR, rsc_mgr_log_id, "Resource manager is uninitialized\n");
+        return rc;
+    }
+
+    /* Allocate a new object. */
+    rc = rsc_mgr_obj_alloc(0, &obj_id, 1, RSC_MGR_OBJ_TYPE_TM_SCHED, &tm_context.tm_sched_auto_key_ids, NULL, tm_context.log_id);
+    *tm_sched_id = obj_id;
+
+    return rc;
+}
+
+bcmos_errno _rsc_mgr_tm_sched_auto_id_free(bcmbal_tm_sched_id tm_sched_id)
+{
+    bcmos_errno rc;
+
+    rc = rsc_mgr_obj_free(0, (rsc_mgr_obj_id)tm_sched_id, &tm_context.tm_sched_auto_key_ids, NULL, tm_context.log_id);
+
+    return rc;
+}
+
+bcmos_errno _rsc_mgr_tm_sched_auto_id_get_ref_count(bcmbal_tm_sched_id tm_sched_id, uint32_t *ref_count)
+{
+    rsc_mgr_obj *obj;
+    bcmos_errno rc;
+
+    rc = rsc_mgr_obj_get(0, (rsc_mgr_obj_id)tm_sched_id, &tm_context.tm_sched_auto_key_ids, &obj, tm_context.log_id);
+    if (rc != BCM_ERR_OK)
+        return rc;
+
+    *ref_count = obj->ref_count;
+
+    return BCM_ERR_OK;
+}
+
+bcmos_bool _rsc_mgr_tm_sched_id_validate(bcmbal_tm_sched_id tm_sched_key_id)
+{
+	return (!rsc_mgr_is_valid_data_tm_sched_auto_id(tm_sched_key_id));
+}
+
+static void rsc_mgr_init_obj_rsc(rsc_mgr_obj_rsc *obj_rsc, rsc_mgr_is_valid_data_obj_id_cb_t is_valid_data_obj_id_cb,
+    rsc_mgr_get_last_data_obj_id_cb_t get_last_data_obj_id_cb, uint32_t num_of_objs, const char *obj_name)
+{
+    rsc_mgr_obj *obj;
+
+    obj_rsc->obj_name = obj_name;
+    obj_rsc->is_valid_data_obj_id_cb = is_valid_data_obj_id_cb;
+    obj_rsc->get_last_data_obj_id_cb = get_last_data_obj_id_cb;
+    TAILQ_INIT(&obj_rsc->free_objs);
+    TAILQ_INIT(&obj_rsc->allocated_objs);
+    obj_rsc->objs = bcmos_calloc(num_of_objs * sizeof(*obj_rsc->objs));
+    obj_rsc->num_of_objs = num_of_objs;
+
+    /* Insert a first entry to the list of free objects. */
+    obj = &obj_rsc->objs[0];
+    obj->range_size = num_of_objs;
+    TAILQ_INSERT_HEAD(&obj_rsc->free_objs, obj, list);
+}
+
+static void rsc_mgr_uninit_obj_rsc(rsc_mgr_obj_rsc *obj_rsc)
+{
+    bcmos_free(obj_rsc->objs);
+}
+
+bcmos_errno rsc_mgr_mac_init(void)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcmolt_devid device_id;
+    uint32_t pon_id;
+    rsc_mgr_topo_pon_context *topo_context, *old_topo_context;
+
+    do
+    {
+        rc = rsc_mgr_init_validate();
+        if (rc != BCM_ERR_OK)
+        {
+            BCM_LOG(INFO, rsc_mgr_log_id, "Resource Manager was not initialized");   	    
+            break;
+        }
+        BCM_TOPO_FOR_EACH_PON(device_id, pon_id)
+        {
+            old_topo_context = bcm_topo_pon_get_context(pon_id, BCM_TOPO_PON_CONTEXT_ID_RSC_MGR);
+            if (old_topo_context)
+            {
+                bcmos_free(old_topo_context);
+            }
+            topo_context = bcmos_calloc(sizeof(*topo_context));
+            if (bcm_topo_pon_get_pon_mode(pon_id) == BCM_TOPO_PON_MODE_GPON)
+			{
+				topo_context->num_of_alloc_ids = GPON_NUM_OF_ALLOC_IDS;
+				topo_context->num_of_gem_ports = GPON_NUM_OF_GEM_PORT_IDS_PER_PON;
+			}
+			else
+			{
+				topo_context->num_of_alloc_ids = XGPON_NUM_OF_ALLOC_IDS;
+				topo_context->num_of_gem_ports = XGPON_NUM_OF_GEM_PORT_IDS_PER_PON;
+			}
+			topo_context->multicast_gem_port = BCMOLT_PON_GEM_PORT_ID_INVALID;
+			topo_context->broadcast_gem_port = BCMOLT_PON_GEM_PORT_ID_INVALID;
+			bcm_topo_pon_set_context(pon_id, BCM_TOPO_PON_CONTEXT_ID_RSC_MGR, topo_context);
+#ifdef ENABLE_LOG
+			snprintf(topo_context->log_id_name, sizeof(topo_context->log_id_name), "RSC_MGR%u", pon_id);
+			topo_context->log_id = bcm_dev_log_id_register(topo_context->log_id_name, DEV_LOG_LEVEL_INFO, DEV_LOG_ID_TYPE_BOTH);
+			BUG_ON(topo_context->log_id == DEV_LOG_INVALID_ID);
+#endif	    
+			rsc_mgr_init_obj_rsc(&topo_context->alloc_ids, rsc_mgr_is_valid_data_alloc_id_cb, rsc_mgr_get_last_data_alloc_id_cb,
+				RSC_MGR_PON_TOPO_CONTEXT(pon_id)->num_of_alloc_ids, "alloc ID");
+			rsc_mgr_init_obj_rsc(&topo_context->gems, rsc_mgr_is_valid_data_gem_cb, rsc_mgr_get_last_data_gem_cb,
+				RSC_MGR_PON_TOPO_CONTEXT(pon_id)->num_of_gem_ports, "GEM port");
+			
+			if (bcm_topo_pon_get_pon_mode(pon_id) == BCM_TOPO_PON_MODE_GPON)
+			{
+				bcmolt_gpon_ni_cfg gpon_ni_cfg = {};
+				
+				bcmolt_gpon_ni_cfg_data_set_default(&gpon_ni_cfg.data, 1 << BCMOLT_GPON_NI_CFG_ID_MIN_DATA_ALLOC_ID);
+				_rsc_mgr_access_int_base_alloc_id_set(pon_id, gpon_ni_cfg.data.min_data_alloc_id);
+				
+				_rsc_mgr_access_int_base_gem_set(pon_id, MIN_BASE_GEM_PORT_ID_GPON);
+			}
+			else
+			{
+				bcmolt_xgpon_ni_cfg xgpon_ni_cfg = {};
+				
+				bcmolt_xgpon_ni_cfg_data_set_default(&xgpon_ni_cfg.data, 1 << BCMOLT_XGPON_NI_CFG_ID_MIN_DATA_ALLOC_ID);
+				_rsc_mgr_access_int_base_alloc_id_set(pon_id, xgpon_ni_cfg.data.min_data_alloc_id);
+				
+				bcmolt_xgpon_ni_cfg_data_set_default(&xgpon_ni_cfg.data, 1 << BCMOLT_XGPON_NI_CFG_ID_MIN_DATA_GEM_PORT_ID);
+				_rsc_mgr_access_int_base_gem_set(pon_id, xgpon_ni_cfg.data.min_data_gem_port_id);
+			}
+		}	
+        
+    }while(0);
+    return rc;
+}
+
+bcmos_errno rsc_mgr_init(void)
+{
+    if (rsc_mgr_init_validate() == BCM_ERR_OK)
+   	{
+        BCM_LOG(INFO, rsc_mgr_log_id, "Resource Manager was already initialized");   	    
+        return BCM_ERR_OK;
+   	}
+
+#ifdef ENABLE_LOG
+    if (rsc_mgr_log_id == DEV_LOG_INVALID_ID)
+    {
+        rsc_mgr_log_id = bcm_dev_log_id_register("RSC_MGR", DEV_LOG_LEVEL_INFO, DEV_LOG_ID_TYPE_BOTH);
+        BUG_ON(rsc_mgr_log_id == DEV_LOG_INVALID_ID);
+    }
+#endif
+
+    /*Init the tm object*/
+    tm_context.num_of_tm_sched_auto_key_ids = NUM_OF_TM_SCHED_AUTO_KEY_IDS;
+    snprintf(tm_context.log_id_name , sizeof(tm_context.log_id_name) , "RSC_MGR_TM");
+	tm_context.log_id = bcm_dev_log_id_register(tm_context.log_id_name, DEV_LOG_LEVEL_INFO, DEV_LOG_ID_TYPE_BOTH);
+    BUG_ON(tm_context.log_id == DEV_LOG_INVALID_ID);
+	
+	rsc_mgr_init_obj_rsc(&tm_context.tm_sched_auto_key_ids, rsc_mgr_is_valid_data_tm_sched_auto_id_cb, rsc_mgr_get_last_data_tm_sched_auto_id_cb,
+		tm_context.num_of_tm_sched_auto_key_ids, "TM node auto id");
+
+	_rsc_mgr_base_tm_sched_auto_id_set(MIN_BASE_TM_SCHED_AUTO_ID);
+	
+    rsc_mgr_context.is_initialized = BCMOS_TRUE;
+    return BCM_ERR_OK;
+}
+
+void rsc_mgr_uninit(void)
+{
+    bcmolt_devid device_id;
+    uint32_t pon_id;
+
+    if (!rsc_mgr_context.is_initialized)
+        return;
+
+    BCM_TOPO_FOR_EACH_PON(device_id, pon_id)
+    {
+        rsc_mgr_topo_pon_context *topo_context = RSC_MGR_PON_TOPO_CONTEXT(pon_id);
+
+        rsc_mgr_uninit_obj_rsc(&topo_context->gems);
+        rsc_mgr_uninit_obj_rsc(&topo_context->alloc_ids);
+    }
+    rsc_mgr_context.is_initialized = BCMOS_FALSE;
+}
+
diff --git a/bal_release/src/lib/librscmgr/rsc_mgr.h b/bal_release/src/lib/librscmgr/rsc_mgr.h
new file mode 100644
index 0000000..072d37e
--- /dev/null
+++ b/bal_release/src/lib/librscmgr/rsc_mgr.h
@@ -0,0 +1,64 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+#ifndef _RSC_MGR_H_
+#define _RSC_MGR_H_
+
+#include <bal_objs.h>
+
+/* Alloc ID (aggregation port ID) */
+bcmos_errno rsc_mgr_access_int_base_alloc_id_set(bcmbal_intf_id access_int_id, bcmbal_aggregation_port_id min_data_agg_port_id);
+bcmos_errno rsc_mgr_alloc_id_alloc(bcmbal_intf_id access_int_id, bcmbal_aggregation_port_id *agg_port_id, uint32_t range_size, void *user_data);
+bcmos_errno rsc_mgr_alloc_id_free(bcmbal_intf_id access_int_id, bcmbal_aggregation_port_id agg_port_id, void *user_data);
+bcmos_errno rsc_mgr_alloc_id_get_ref_count(bcmbal_intf_id access_int_id, bcmbal_aggregation_port_id agg_port_id, uint32_t *ref_count);
+void* rsc_mgr_alloc_id_get_next_user_data(bcmbal_intf_id access_int_id, bcmbal_aggregation_port_id agg_port_id, void **curr_user_data_entry, void **next_user_data_entry);
+
+
+/* GEM (service port ID) */
+bcmos_errno rsc_mgr_access_int_base_gem_set(bcmbal_intf_id access_int_id, bcmbal_service_port_id min_data_svc_port_id);
+bcmos_errno rsc_mgr_gem_alloc_unicast(bcmbal_intf_id access_int_id, bcmbal_service_port_id *svc_port_id, uint32_t range_size, void *user_data);
+bcmos_errno rsc_mgr_gem_alloc_multicast(bcmbal_intf_id access_int_id, bcmbal_service_port_id *svc_port_id, uint32_t range_size, void *user_data);
+bcmos_errno rsc_mgr_gem_alloc_broadcast(bcmbal_intf_id access_int_id, bcmbal_service_port_id *svc_port_id, uint32_t range_size, void *user_data);
+bcmos_errno rsc_mgr_gem_free(bcmbal_intf_id access_int_id, bcmbal_service_port_id svc_port_id, void *user_data);
+bcmos_errno rsc_mgr_gem_get_ref_count(bcmbal_intf_id access_int_id, bcmbal_service_port_id svc_port_id, uint32_t *ref_count);
+void* rsc_mgr_gem_get_next_user_data(bcmbal_intf_id access_int_id, bcmbal_service_port_id svc_port_id, void **curr_user_data_entry, void **next_user_data_entry);
+
+bcmos_errno _rsc_mgr_tm_sched_auto_id_alloc(bcmbal_tm_sched_id *tm_sched_key_id);
+bcmos_errno _rsc_mgr_tm_sched_auto_id_free(bcmbal_tm_sched_id tm_sched_key_id);
+bcmos_errno _rsc_mgr_tm_sched_auto_id_get_ref_count(bcmbal_tm_sched_id tm_sched_key_id, uint32_t *ref_count);
+bcmos_bool _rsc_mgr_tm_sched_id_validate(bcmbal_tm_sched_id tm_sched_key_id);
+
+bcmos_errno rsc_mgr_mac_init(void);
+bcmos_errno rsc_mgr_init(void);
+void rsc_mgr_uninit(void);
+
+#endif
+
diff --git a/bal_release/src/lib/librscmgr/rsc_mgr_cli.c b/bal_release/src/lib/librscmgr/rsc_mgr_cli.c
new file mode 100644
index 0000000..7584741
--- /dev/null
+++ b/bal_release/src/lib/librscmgr/rsc_mgr_cli.c
@@ -0,0 +1,315 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+#include <bcm_dev_log.h>
+#include <bcmcli.h>
+#include <bal_objs.h>
+#include <bal_api.h>
+#include <bcm_topo.h>
+#include "rsc_mgr.h"
+#include "rsc_mgr_common.h"
+#include "rsc_mgr_cli.h"
+
+static bcmos_errno rsc_mgr_cli_cmd_init(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    return rsc_mgr_init();
+}
+
+static bcmos_errno rsc_mgr_cli_cmd_base_alloc_id_set(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    bcmbal_intf_id access_int_id = (bcmbal_intf_id)bcmcli_find_named_parm(session, "key.access_int_id")->value.unumber;
+    bcmbal_aggregation_port_id min_data_agg_port_id = (bcmbal_aggregation_port_id)bcmcli_find_named_parm(session, "min_data_agg_port_id")->value.unumber;
+
+    return rsc_mgr_access_int_base_alloc_id_set(access_int_id, min_data_agg_port_id);
+}
+
+static bcmos_errno rsc_mgr_cli_cmd_base_gem_set(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    bcmbal_intf_id access_int_id = (bcmbal_intf_id)bcmcli_find_named_parm(session, "key.access_int_id")->value.unumber;
+    bcmbal_service_port_id min_data_svc_port_id = (bcmbal_service_port_id)bcmcli_find_named_parm(session, "min_data_svc_port_id")->value.unumber;
+
+    return rsc_mgr_access_int_base_gem_set(access_int_id, min_data_svc_port_id);
+}
+
+static bcmos_errno rsc_mgr_cli_cmd_alloc_id_alloc(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    bcmbal_intf_id access_int_id = (bcmbal_intf_id)bcmcli_find_named_parm(session, "key.access_int_id")->value.unumber;
+    bcmcli_cmd_parm *agg_port_id_parm = bcmcli_find_named_parm(session, "agg_port_id");
+    bcmbal_aggregation_port_id agg_port_id = 0;
+    uint32_t range_size = (uint32_t)bcmcli_find_named_parm(session, "range_size")->value.unumber;
+    uint32_t ref_count;
+    bcmos_errno rc;
+
+    if (agg_port_id_parm)
+        agg_port_id = (bcmbal_aggregation_port_id)agg_port_id_parm->value.unumber;
+
+    rc = rsc_mgr_alloc_id_alloc(access_int_id, &agg_port_id, range_size, NULL);
+    if (rc != BCM_ERR_OK)
+        return rc;
+
+    rc = rsc_mgr_alloc_id_get_ref_count(access_int_id, agg_port_id, &ref_count);
+    if (rc != BCM_ERR_OK)
+        return rc;
+
+    bcmcli_session_print(session, "Allocated alloc ID=%u (ref_count=%u)\n", agg_port_id, ref_count);
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno rsc_mgr_cli_cmd_alloc_id_free(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    bcmbal_intf_id access_int_id = (bcmbal_intf_id)bcmcli_find_named_parm(session, "key.access_int_id")->value.unumber;
+    bcmbal_aggregation_port_id agg_port_id = (bcmbal_aggregation_port_id)bcmcli_find_named_parm(session, "agg_port_id")->value.unumber;
+    uint32_t ref_count;
+    bcmos_errno rc;
+
+    rc = rsc_mgr_alloc_id_get_ref_count(access_int_id, agg_port_id, &ref_count);
+    if (rc != BCM_ERR_OK)
+        return rc;
+
+    rc = rsc_mgr_alloc_id_free(access_int_id, agg_port_id, NULL);
+    if (rc != BCM_ERR_OK)
+        return rc;
+
+    bcmcli_session_print(session, "Freed alloc ID=%u (ref_count=%u)\n", agg_port_id, ref_count - 1);
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno rsc_mgr_cli_cmd_gem_alloc(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    bcmbal_intf_id access_int_id = (bcmbal_intf_id)bcmcli_find_named_parm(session, "key.access_int_id")->value.unumber;
+    bcmcli_cmd_parm *svc_port_id_parm = bcmcli_find_named_parm(session, "svc_port_id");
+    bcmbal_service_port_id svc_port_id = 0;
+    uint32_t range_size = (uint32_t)bcmcli_find_named_parm(session, "range_size")->value.unumber;
+    rsc_mgr_obj_type gem_type = (rsc_mgr_obj_type)bcmcli_find_named_parm(session, "gem_type")->value.enum_val;
+    uint32_t ref_count;
+    bcmos_errno rc;
+
+    if (svc_port_id_parm)
+        svc_port_id = (bcmbal_service_port_id)svc_port_id_parm->value.unumber;
+
+    if (RSC_MGR_OBJ_TYPE_GEM_PORT_MULTICAST == gem_type)
+        rc = rsc_mgr_gem_alloc_multicast(access_int_id, &svc_port_id, range_size, NULL);
+    else if (RSC_MGR_OBJ_TYPE_GEM_PORT_BROADCAST == gem_type)
+        rc = rsc_mgr_gem_alloc_broadcast(access_int_id, &svc_port_id, range_size, NULL);
+    else
+        rc = rsc_mgr_gem_alloc_unicast(access_int_id, &svc_port_id, range_size, NULL);
+
+    if (rc != BCM_ERR_OK)
+        return rc;
+
+    rc = rsc_mgr_gem_get_ref_count(access_int_id, svc_port_id, &ref_count);
+    if (rc != BCM_ERR_OK)
+        return rc;
+
+    bcmcli_session_print(session, "Allocated GEM port=%u (ref_count=%u)\n", svc_port_id, ref_count);
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno rsc_mgr_cli_cmd_gem_free(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    bcmbal_intf_id access_int_id = (bcmbal_intf_id)bcmcli_find_named_parm(session, "key.access_int_id")->value.unumber;
+    bcmbal_service_port_id svc_port_id = (bcmbal_service_port_id)bcmcli_find_named_parm(session, "svc_port_id")->value.unumber;
+    uint32_t ref_count;
+    bcmos_errno rc;
+
+    rc = rsc_mgr_gem_get_ref_count(access_int_id, svc_port_id, &ref_count);
+    if (rc != BCM_ERR_OK)
+        return rc;
+
+    rc = rsc_mgr_gem_free(access_int_id, svc_port_id, NULL);
+    if (rc != BCM_ERR_OK)
+        return rc;
+
+    bcmcli_session_print(session, "Freed GEM port=%u (ref_count=%u)\n", svc_port_id, ref_count - 1);
+
+    return BCM_ERR_OK;
+}
+/*allocates a new tm node auto id 
+no inputs parameters are used */
+static bcmos_errno rsc_mgr_cli_cmd_tm_sched_auto_alloc(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    bcmbal_tm_sched_id tm_sched_auto_id = 0;
+    bcmos_errno rc;
+
+    rc = _rsc_mgr_tm_sched_auto_id_alloc(&tm_sched_auto_id);
+    if (rc != BCM_ERR_OK)
+        return rc;
+
+
+    bcmcli_session_print(session, "Allocated TM SCHED AUTO ID %u \n", tm_sched_auto_id);
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno rsc_mgr_cli_cmd_tm_sched_auto_free(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    bcmbal_tm_sched_id tm_sched_auto_id = (bcmbal_tm_sched_id)bcmcli_find_named_parm(session, "tm_sched_auto_id")->value.unumber;
+    uint32_t ref_count;
+    bcmos_errno rc;
+
+    rc = _rsc_mgr_tm_sched_auto_id_get_ref_count(tm_sched_auto_id, &ref_count);
+
+    if (rc != BCM_ERR_OK)
+        return rc;
+
+    rc = _rsc_mgr_tm_sched_auto_id_free(tm_sched_auto_id);
+    if (rc != BCM_ERR_OK)
+        return rc;
+
+    bcmcli_session_print(session, "Freed TM NODE AUTO ID %u (ref_count=%u)\n", tm_sched_auto_id, ref_count - 1);
+
+    return BCM_ERR_OK;
+}
+
+static void rsc_mgr_show_objs_list(bcmcli_session *session, bcmbal_intf_id access_int_id, rsc_mgr_obj_rsc *obj_rsc,
+    rsc_mgr_obj_list *obj_list)
+{
+    rsc_mgr_obj *obj_iter;
+
+    TAILQ_FOREACH(obj_iter, obj_list, list)
+    {
+        if (obj_iter->range_size == 1)
+        {
+            bcmcli_session_print(session, "\t%s=%u (obj_type=%s, ref_count=%u)\n", 
+                    obj_rsc->obj_name, obj_iter->id, RSC_MGR_OBJ_TYPE_STR(obj_iter->type), obj_iter->ref_count);
+        }
+        else
+        {
+            bcmcli_session_print(session, "\t%s=%u .. %u (obj_type=%s, ref_count=%u)\n",
+                obj_rsc->obj_name, obj_iter->id, obj_iter->id + obj_iter->range_size - 1, RSC_MGR_OBJ_TYPE_STR(obj_iter->type), obj_iter->ref_count);
+        }
+    }
+}
+
+static void rsc_mgr_show_objs(bcmcli_session *session, bcmbal_intf_id access_int_id, rsc_mgr_obj_rsc *obj_rsc)
+{
+    bcmcli_session_print(session, "Base data %s=%u\n", obj_rsc->obj_name, obj_rsc->min_data_obj_id);
+    bcmcli_session_print(session, "Allocated %ss:\n", obj_rsc->obj_name);
+    rsc_mgr_show_objs_list(session, access_int_id, obj_rsc, &obj_rsc->allocated_objs);
+    bcmcli_session_print(session, "Free %ss:\n", obj_rsc->obj_name);
+    rsc_mgr_show_objs_list(session, access_int_id, obj_rsc, &obj_rsc->free_objs);
+}
+
+static bcmos_errno rsc_mgr_show(bcmcli_session *session, bcmbal_intf_id access_int_id)
+{
+    bcmos_errno rc;
+    rsc_mgr_topo_pon_context *topo_context;
+
+    rc = rsc_mgr_init_validate();
+    if (rc != BCM_ERR_OK)
+    {
+        BCM_LOG(ERROR, rsc_mgr_log_id, "Resource manager is uninitialized\n");
+        return rc;
+    }
+
+    if (!bcm_topo_pon_is_valid(access_int_id))
+        return BCM_ERR_PARM;
+
+    topo_context = RSC_MGR_PON_TOPO_CONTEXT(access_int_id);
+    rsc_mgr_show_objs(session, access_int_id, &topo_context->alloc_ids);
+    rsc_mgr_show_objs(session, access_int_id, &topo_context->gems);
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno rsc_mgr_cli_cmd_show(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    bcmbal_intf_id access_int_id = (bcmbal_intf_id)bcmcli_find_named_parm(session, "key.access_int_id")->value.unumber;
+
+    return rsc_mgr_show(session, access_int_id);
+}
+
+void rsc_mgr_cli_init(bcmcli_entry *cli_dir)
+{
+    bcmcli_entry *dbg_dir;
+
+    static bcmcli_enum_val rsc_mgr_cli_enum_gem_type_table[] =
+    {
+        { .name = "unicast", .val = RSC_MGR_OBJ_TYPE_GEM_PORT_UNICAST },
+        { .name = "multicast", .val = RSC_MGR_OBJ_TYPE_GEM_PORT_MULTICAST },
+        { .name = "broadcast", .val = RSC_MGR_OBJ_TYPE_GEM_PORT_BROADCAST },
+        BCMCLI_ENUM_LAST
+    };
+
+    dbg_dir = bcmcli_dir_add(cli_dir, "rsc_mgr", "BAL resource manager API access", BCMCLI_ACCESS_ADMIN, NULL);
+
+    BCMCLI_MAKE_CMD(dbg_dir, "init", "Initialize resource manager for a specific access terminal", rsc_mgr_cli_cmd_init,
+        BCMCLI_MAKE_PARM_RANGE("key.access_term_id", "access terminal identifier", BCMCLI_PARM_UNUMBER, 0, 0, MAX_SUPPORTED_OLTS));
+
+    BCMCLI_MAKE_CMD(dbg_dir, "base_alloc_id_set", "Set the base alloc ID for an access interface", rsc_mgr_cli_cmd_base_alloc_id_set,
+        BCMCLI_MAKE_PARM_RANGE("key.access_term_id", "access terminal identifier", BCMCLI_PARM_UNUMBER, 0, 0, MAX_SUPPORTED_OLTS),
+        BCMCLI_MAKE_PARM("key.access_int_id", "access interface identifier", BCMCLI_PARM_UNUMBER, 0),
+        BCMCLI_MAKE_PARM("min_data_agg_port_id", "minimal data aggregation port ID", BCMCLI_PARM_UNUMBER, 0));
+
+    BCMCLI_MAKE_CMD(dbg_dir, "base_gem_set", "Set the base GEM port for an access interface", rsc_mgr_cli_cmd_base_gem_set,
+        BCMCLI_MAKE_PARM_RANGE("key.access_term_id", "access terminal identifier", BCMCLI_PARM_UNUMBER, 0, 0, MAX_SUPPORTED_OLTS),
+        BCMCLI_MAKE_PARM("key.access_int_id", "access interface identifier", BCMCLI_PARM_UNUMBER, 0),
+        BCMCLI_MAKE_PARM("min_data_svc_port_id", "minimal data service port ID", BCMCLI_PARM_UNUMBER, 0));
+
+    BCMCLI_MAKE_CMD(dbg_dir, "alloc_id_alloc", "Allocate an alloc ID range or reuse an existing alloc ID range", rsc_mgr_cli_cmd_alloc_id_alloc,
+        BCMCLI_MAKE_PARM_RANGE("key.access_term_id", "access terminal identifier", BCMCLI_PARM_UNUMBER, 0, 0, MAX_SUPPORTED_OLTS),
+        BCMCLI_MAKE_PARM("key.access_int_id", "access interface identifier", BCMCLI_PARM_UNUMBER, 0),
+        BCMCLI_MAKE_PARM("agg_port_id", "aggregation port ID (if omitted a new alloc ID is allocated, otherwise we reuse an existing alloc ID)",
+        BCMCLI_PARM_UNUMBER, BCMCLI_PARM_FLAG_OPTIONAL),
+        BCMCLI_MAKE_PARM_RANGE("range_size", "range size", BCMCLI_PARM_UNUMBER, 0, RSC_MGR_MIN_RANGE_SIZE, RSC_MGR_MAX_RANGE_SIZE));
+
+    BCMCLI_MAKE_CMD(dbg_dir, "alloc_id_free", "Free an alloc ID range", rsc_mgr_cli_cmd_alloc_id_free,
+        BCMCLI_MAKE_PARM_RANGE("key.access_term_id", "access terminal identifier", BCMCLI_PARM_UNUMBER, 0, 0, MAX_SUPPORTED_OLTS),
+        BCMCLI_MAKE_PARM("key.access_int_id", "access interface identifier", BCMCLI_PARM_UNUMBER, 0),
+        BCMCLI_MAKE_PARM("agg_port_id", "base of alloc ID range", BCMCLI_PARM_UNUMBER, 0));
+
+    BCMCLI_MAKE_CMD(dbg_dir, "gem_alloc", "Allocate a GEM port range or reuse an existing GEM port range", rsc_mgr_cli_cmd_gem_alloc,
+        BCMCLI_MAKE_PARM_RANGE("key.access_term_id", "access terminal identifier", BCMCLI_PARM_UNUMBER, 0, 0, MAX_SUPPORTED_OLTS),
+        BCMCLI_MAKE_PARM("key.access_int_id", "access interface identifier", BCMCLI_PARM_UNUMBER, 0),
+        BCMCLI_MAKE_PARM("svc_port_id", "service port ID (if omitted a new GEM port is allocated, otherwise we reuse an existing GEM port)",
+        BCMCLI_PARM_UNUMBER, BCMCLI_PARM_FLAG_OPTIONAL),
+        BCMCLI_MAKE_PARM_RANGE("range_size", "range size", BCMCLI_PARM_UNUMBER, 0, RSC_MGR_MIN_RANGE_SIZE, RSC_MGR_MAX_RANGE_SIZE),
+        BCMCLI_MAKE_PARM_ENUM("gem_type", "GEM type", rsc_mgr_cli_enum_gem_type_table, 0));
+
+    BCMCLI_MAKE_CMD(dbg_dir, "gem_free", "Free a GEM port range", rsc_mgr_cli_cmd_gem_free,
+        BCMCLI_MAKE_PARM_RANGE("key.access_term_id", "access terminal identifier", BCMCLI_PARM_UNUMBER, 0, 0, MAX_SUPPORTED_OLTS),
+        BCMCLI_MAKE_PARM("key.access_int_id", "access interface identifier", BCMCLI_PARM_UNUMBER, 0),
+        BCMCLI_MAKE_PARM("svc_port_id", "base of GEM port range", BCMCLI_PARM_UNUMBER, 0));
+
+    BCMCLI_MAKE_CMD_NOPARM(dbg_dir, "tm_sched_auto_id_alloc", "Allocate a tm node auto id or reuse an existing id", rsc_mgr_cli_cmd_tm_sched_auto_alloc);
+
+    BCMCLI_MAKE_CMD(dbg_dir, "tm_sched_auto_id_free", "Free a tm node auto id", rsc_mgr_cli_cmd_tm_sched_auto_free,
+        BCMCLI_MAKE_PARM("tm_sched_auto_id", "tm node auto id to be free", BCMCLI_PARM_UNUMBER, 0));
+
+
+    BCMCLI_MAKE_CMD(dbg_dir, "show", "Show the database of the resource manager", rsc_mgr_cli_cmd_show,
+        BCMCLI_MAKE_PARM_RANGE("key.access_term_id", "access terminal identifier", BCMCLI_PARM_UNUMBER, 0, 0, MAX_SUPPORTED_OLTS),
+        BCMCLI_MAKE_PARM("key.access_int_id", "access interface identifier", BCMCLI_PARM_UNUMBER, 0));
+}
+
diff --git a/bal_release/src/lib/librscmgr/rsc_mgr_cli.h b/bal_release/src/lib/librscmgr/rsc_mgr_cli.h
new file mode 100644
index 0000000..7d9085c
--- /dev/null
+++ b/bal_release/src/lib/librscmgr/rsc_mgr_cli.h
@@ -0,0 +1,40 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+#ifndef _RSC_MGR_CLI_H_
+#define _RSC_MGR_CLI_H_
+
+#include <bcmcli.h>
+
+void rsc_mgr_cli_init(bcmcli_entry *cli_dir);
+
+#endif
+
diff --git a/bal_release/src/lib/librscmgr/rsc_mgr_common.c b/bal_release/src/lib/librscmgr/rsc_mgr_common.c
new file mode 100644
index 0000000..71bcee9
--- /dev/null
+++ b/bal_release/src/lib/librscmgr/rsc_mgr_common.c
@@ -0,0 +1,61 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+#include <bcm_topo.h>
+#include "rsc_mgr_common.h"
+
+#ifdef ENABLE_LOG
+dev_log_id rsc_mgr_log_id = DEV_LOG_INVALID_ID;
+#endif
+
+bcmos_errno rsc_mgr_init_validate(void)
+{
+    if (!rsc_mgr_context.is_initialized)
+    {
+#ifdef ENABLE_LOG
+        if (rsc_mgr_log_id == DEV_LOG_INVALID_ID)
+        {
+            rsc_mgr_log_id = bcm_dev_log_id_register("RSC_MGR", DEV_LOG_LEVEL_INFO, DEV_LOG_ID_TYPE_BOTH);
+            BUG_ON(rsc_mgr_log_id == DEV_LOG_INVALID_ID);
+        }
+#endif
+        return BCM_ERR_STATE;
+    }
+
+    if (!bcm_topo_is_initialized())
+    {
+        BCM_LOG(ERROR, rsc_mgr_log_id, "Resource manager cannot be called before topology is initialized\n");
+        return BCM_ERR_STATE;
+    }
+
+    return BCM_ERR_OK;
+}
+
diff --git a/bal_release/src/lib/librscmgr/rsc_mgr_common.h b/bal_release/src/lib/librscmgr/rsc_mgr_common.h
new file mode 100644
index 0000000..4d19176
--- /dev/null
+++ b/bal_release/src/lib/librscmgr/rsc_mgr_common.h
@@ -0,0 +1,147 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+#ifndef _RSC_MGR_COMMON_H_
+#define _RSC_MGR_COMMON_H_
+ 
+#include <bcmolt_host_api.h>
+#include <bcm_dev_log.h>
+#include <bal_objs.h>
+#include <bcmolt_math.h>
+
+#define RSC_MGR_MIN_RANGE_SIZE 1
+#define RSC_MGR_MAX_RANGE_SIZE 8
+
+#define RSC_MGR_PON_TOPO_CONTEXT(pon_id) ((rsc_mgr_topo_pon_context *)bcm_topo_pon_get_context(pon_id, BCM_TOPO_PON_CONTEXT_ID_RSC_MGR))
+
+typedef enum rsc_mgr_obj_type
+{
+    RSC_MGR_OBJ_TYPE_INVALID = 0,
+    RSC_MGR_OBJ_TYPE_GEM_PORT_UNICAST,
+    RSC_MGR_OBJ_TYPE_GEM_PORT_MULTICAST,
+    RSC_MGR_OBJ_TYPE_GEM_PORT_BROADCAST,
+    RSC_MGR_OBJ_TYPE_ALLOC_ID,
+    RSC_MGR_OBJ_TYPE_TM_SCHED,
+} rsc_mgr_obj_type;
+
+#define RSC_MGR_OBJ_TYPE_STR(_type) \
+    ((_type) == RSC_MGR_OBJ_TYPE_GEM_PORT_UNICAST ? "gem_port_unicast":\
+        (_type) == RSC_MGR_OBJ_TYPE_GEM_PORT_MULTICAST ? "gem_port_multicast":\
+            (_type) == RSC_MGR_OBJ_TYPE_GEM_PORT_BROADCAST ? "gem_port_broadcast":\
+                (_type) == RSC_MGR_OBJ_TYPE_ALLOC_ID ? "alloc_id":\
+                    (_type) == RSC_MGR_OBJ_TYPE_TM_SCHED ? "tm_sched":"invalid")
+
+
+typedef struct
+{
+    bcmos_bool is_initialized;
+} rsc_mgr_context_t;
+
+extern rsc_mgr_context_t rsc_mgr_context;
+
+/** @brief container for storing user data */
+typedef struct rsc_mgr_user_data_entry
+{
+    TAILQ_ENTRY(rsc_mgr_user_data_entry) next;
+    void *user_data;
+} rsc_mgr_user_data_entry;
+
+/** @brief linked list of flow entries sharing the same GEM port or Alloc Id */
+typedef TAILQ_HEAD(, rsc_mgr_user_data_entry) shared_obj_user_data_list;
+
+/* An object ID can be either alloc ID or GEM port. */
+typedef uint32_t rsc_mgr_obj_id;
+
+/* An element for an object linked list. */
+typedef struct rsc_mgr_obj
+{
+    TAILQ_ENTRY(rsc_mgr_obj) list;
+    struct rsc_mgr_obj *base_obj; /* The last object of a range points to the base object of the range. */
+    rsc_mgr_obj_id id;
+    uint32_t ref_count;
+    uint32_t range_size;
+    rsc_mgr_obj_type type;
+    shared_obj_user_data_list user_data_list; /* this stores a list of flows sharing the same gem or alloc id object */
+} rsc_mgr_obj;
+
+typedef TAILQ_HEAD(, rsc_mgr_obj) rsc_mgr_obj_list;
+
+typedef bcmos_bool (*rsc_mgr_is_valid_data_obj_id_cb_t)(bcmolt_pon_ni pon_id, rsc_mgr_obj_id id, rsc_mgr_obj_id min_data_obj_id);
+typedef rsc_mgr_obj_id (*rsc_mgr_get_last_data_obj_id_cb_t)(bcmolt_pon_ni pon_id, rsc_mgr_obj_id min_data_obj_id);
+
+typedef struct
+{
+    const char *obj_name;
+    rsc_mgr_is_valid_data_obj_id_cb_t is_valid_data_obj_id_cb;
+    rsc_mgr_get_last_data_obj_id_cb_t get_last_data_obj_id_cb;
+    rsc_mgr_obj_list free_objs;
+    rsc_mgr_obj_list allocated_objs;
+    rsc_mgr_obj *objs; /* Dynamically allocated */
+    uint32_t num_of_objs;
+    rsc_mgr_obj_id min_data_obj_id;
+} rsc_mgr_obj_rsc;
+
+typedef struct
+{
+    rsc_mgr_obj_rsc alloc_ids;
+    rsc_mgr_obj_rsc gems;
+    uint16_t num_of_alloc_ids;
+    uint16_t num_of_gem_ports;
+#ifndef MULTIPLE_MULTICAST_GEM_PORTS_PER_PON
+    uint16_t multicast_gem_port; /* For validation purposes (validate there is no more than a single multicast GEM port per PON). */
+#endif
+#ifndef MULTIPLE_BROADCAST_GEM_PORTS_PER_PON
+    uint16_t broadcast_gem_port; /* For validation purposes (validate there is no more than a single broadcast GEM port per PON). */
+#endif
+#ifdef ENABLE_LOG
+    dev_log_id log_id;
+    char log_id_name[MAX_DEV_LOG_ID_NAME];
+#endif
+} rsc_mgr_topo_pon_context;
+
+typedef struct
+{
+    rsc_mgr_obj_rsc tm_sched_auto_key_ids;
+    uint16_t num_of_tm_sched_auto_key_ids;
+#ifdef ENABLE_LOG
+    dev_log_id log_id;
+    char log_id_name[MAX_DEV_LOG_ID_NAME];
+#endif
+
+} rsc_mgr_tm_context;
+#ifdef ENABLE_LOG
+extern dev_log_id rsc_mgr_log_id;
+#endif
+
+bcmos_errno rsc_mgr_init_validate(void);
+
+#endif
+
diff --git a/bal_release/src/lib/libtopology/Makefile b/bal_release/src/lib/libtopology/Makefile
new file mode 100644
index 0000000..7507881
--- /dev/null
+++ b/bal_release/src/lib/libtopology/Makefile
@@ -0,0 +1,36 @@
+###############################################################################
+#
+#  <:copyright-BRCM:2016:DUAL/GPL:standard
+#  
+#     Copyright (c) 2016 Broadcom
+#     All Rights Reserved
+#  
+#  Unless you and Broadcom execute a separate written software license
+#  agreement governing use of this software, this software is licensed
+#  to you under the terms of the GNU General Public License version 2
+#  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+#  with the following added to such license:
+#  
+#     As a special exception, the copyright holders of this software give
+#     you permission to link this software with independent modules, and
+#     to copy and distribute the resulting executable under terms of your
+#     choice, provided that you also meet, for each linked independent
+#     module, the terms and conditions of the license of that module.
+#     An independent module is a module which is not derived from this
+#     software.  The special exception does not apply to any modifications
+#     of the software.
+#  
+#  Not withstanding the above, under no circumstances may you combine
+#  this software in any way with any other Broadcom software provided
+#  under a license other than the GPL, without Broadcom's express prior
+#  written consent.
+#  
+#  :>
+#
+###############################################################################
+MOD_NAME = topology
+MOD_TYPE = lib
+MOD_DEPS = dev_log maple_sdk
+
+srcs = bcm_topo.c
+
diff --git a/bal_release/src/lib/libtopology/bcm_topo.c b/bal_release/src/lib/libtopology/bcm_topo.c
new file mode 100644
index 0000000..4b092a0
--- /dev/null
+++ b/bal_release/src/lib/libtopology/bcm_topo.c
@@ -0,0 +1,650 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *
+ *  :>
+ *
+ *****************************************************************************/
+
+#include <bcm_dev_log.h>
+#include <bcmolt_math.h>
+#include "bcm_topo.h"
+
+#define BCM_TOPO_MAX_LINE_SIZE 256
+#define BCM_TOPO_MAX_NNI_DEVICES 1
+
+uint32_t g_max_nni_ports[BCM_TOPO_MAX_NNI_DEVICES] = {BCM_TOPO_MAX_NNI_PORTS};
+
+typedef struct bcm_topo_dev_context_t bcm_topo_dev_context_t;
+
+typedef struct
+{
+    bcm_topo_dev_context_t *dev; /* Back pointer to the physical device this PON belongs to */
+    bcmos_bool is_initialized;
+    uint32_t pon_id;
+    uint32_t logical_pon;
+    bcm_topo_pon_mode pon_mode;
+    uint32_t max_num_of_onus;
+    void *contexts[BCM_TOPO_PON_CONTEXT_ID__NUM_OF]; /* User context - 1 entry per user */
+} bcm_topo_pon_context_t;
+
+struct bcm_topo_dev_context_t
+{
+    bcm_topo_pon_mode pon_mode; /* Currently we do not allow more than one PON mode per device (e.g: GPONx8 + XGPONx4) */
+    bcmos_bool is_initialized;
+    uint32_t device_id;
+    uint32_t max_num_of_pons;
+    bcm_topo_pon_context_t pons[BCM_TOPO_MAX_NUM_OF_PONS_PER_DEV];
+};
+
+typedef struct
+{
+    bcmos_bool is_initialized;
+    bcm_topo_dev_context_t devs[BCM_TOPO_MAX_NUM_OF_DEVS];
+    bcm_topo_pon_context_t *logical_pon2physical_pon[BCM_TOPO_MAX_NUM_OF_LOGICAL_PONS];
+} bcm_topo_context_t;
+
+static bcm_topo_context_t bcm_topo_context;
+
+#ifdef ENABLE_LOG
+static dev_log_id topo_log_id = DEV_LOG_INVALID_ID;
+#endif
+
+static int2str_t pon_mode2str[] =
+{
+    {BCM_TOPO_PON_MODE_GPON, "gpon"},
+    {BCM_TOPO_PON_MODE_XGPON, "xgpon"},
+    {BCM_TOPO_PON_MODE_XGS, "xgs"},
+    {BCM_TOPO_PON_MODE_EPON_TDMA, "epon_tdma"},
+    {BCM_TOPO_PON_MODE_EPON_1G, "epon_1g"},
+    {BCM_TOPO_PON_MODE_EPON_10G, "epon_10g"},
+    {-1},
+};
+
+static int2int_t pon_mode2max_num_of_pons[] =
+{
+    {BCM_TOPO_PON_MODE_GPON, 16},
+    {BCM_TOPO_PON_MODE_XGPON, 8},
+    {BCM_TOPO_PON_MODE_XGS, 2},
+    {BCM_TOPO_PON_MODE_EPON_TDMA, 8},
+    {BCM_TOPO_PON_MODE_EPON_1G, 16},
+    {BCM_TOPO_PON_MODE_EPON_10G, 8},
+    {-1},
+};
+
+const char *bcm_topo_dev_get_pon_mode_str(bcmolt_devid device_id)
+{
+    return int2str(pon_mode2str, bcm_topo_context.devs[device_id].pon_mode);
+}
+
+int bcm_topo_dev_get_max_pon(bcmolt_devid device_id)
+{
+    return int2int(pon_mode2max_num_of_pons, bcm_topo_context.devs[device_id].pon_mode);
+}
+
+bcm_topo_pon_mode bcm_topo_pon_get_pon_mode(uint32_t pon)
+{
+    bcmolt_devid device_id;
+    uint32_t physical_pon;
+    bcmos_errno rc;
+
+    rc = bcm_topo_pon_get_logical2physical(pon, &device_id, &physical_pon);
+    if (rc != BCM_ERR_OK)
+        return BCM_TOPO_PON_MODE_INVALID;
+
+    return bcm_topo_context.devs[device_id].pons[physical_pon].pon_mode;
+}
+
+bcm_topo_pon_family bcm_topo_pon_get_pon_family(uint32_t pon)
+{
+    switch (bcm_topo_pon_get_pon_mode(pon))
+    {
+    case BCM_TOPO_PON_MODE_GPON:
+    case BCM_TOPO_PON_MODE_XGPON:
+    case BCM_TOPO_PON_MODE_XGS:
+        return BCM_TOPO_PON_FAMILY_GPON;
+    case BCM_TOPO_PON_MODE_EPON_TDMA:
+    case BCM_TOPO_PON_MODE_EPON_1G:
+    case BCM_TOPO_PON_MODE_EPON_10G:
+        return BCM_TOPO_PON_FAMILY_EPON;
+    default:
+        return BCM_TOPO_PON_FAMILY_INVALID;
+    }
+}
+
+bcm_topo_pon_sub_family bcm_topo_pon_get_pon_sub_family(uint32_t pon)
+{
+    switch (bcm_topo_pon_get_pon_mode(pon))
+    {
+    case BCM_TOPO_PON_MODE_GPON:
+        return BCM_TOPO_PON_SUB_FAMILY_GPON;
+    case BCM_TOPO_PON_MODE_XGPON:
+    case BCM_TOPO_PON_MODE_XGS:
+        return BCM_TOPO_PON_SUB_FAMILY_XGPON;
+    case BCM_TOPO_PON_MODE_EPON_TDMA:
+    case BCM_TOPO_PON_MODE_EPON_1G:
+    case BCM_TOPO_PON_MODE_EPON_10G:
+        return BCM_TOPO_PON_SUB_FAMILY_EPON;
+    default:
+        return BCM_TOPO_PON_SUB_FAMILY_INVALID;
+    }
+}
+
+uint32_t bcm_topo_pon_get_max_num_of_onus(uint32_t pon)
+{
+    bcmolt_devid device_id;
+    uint32_t physical_pon;
+    bcmos_errno rc;
+
+    rc = bcm_topo_pon_get_logical2physical(pon, &device_id, &physical_pon);
+    if (rc != BCM_ERR_OK)
+        return BCM_TOPO_ERR_INVALID;
+
+    return bcm_topo_context.devs[device_id].pons[physical_pon].max_num_of_onus;
+}
+
+bcmos_bool bcm_topo_pon_is_valid(uint32_t pon)
+{
+    bcmolt_devid device_id;
+    uint32_t physical_pon;
+
+    if (bcm_topo_pon_get_logical2physical(pon, &device_id, &physical_pon) != BCM_ERR_OK)
+        return BCMOS_FALSE;
+
+    return BCMOS_TRUE;
+}
+
+bcmolt_devid bcm_topo_dev_get_next(bcmolt_devid device_id)
+{
+    if (device_id == BCM_TOPO_DEV_INVALID)
+        device_id = 0;
+    else
+        device_id++;
+
+    for (; device_id < BCM_TOPO_MAX_NUM_OF_DEVS && !bcm_topo_context.devs[device_id].is_initialized; device_id++);
+
+    return device_id == BCM_TOPO_MAX_NUM_OF_DEVS ? BCM_TOPO_DEV_INVALID : device_id;
+}
+
+uint32_t bcm_topo_pon_get_next(bcmolt_devid device_id, uint32_t pon)
+{
+    uint32_t physical_pon;
+    bcmos_errno rc;
+
+    if (device_id >= BCM_TOPO_MAX_NUM_OF_DEVS)
+    {
+        BCM_LOG(ERROR, topo_log_id, "Device ID must be in the range 0 .. %u\n", BCM_TOPO_MAX_NUM_OF_DEVS - 1);
+        return BCM_TOPO_PON_INVALID;
+    }
+
+    if (pon == BCM_TOPO_PON_INVALID)
+        physical_pon = 0;
+    else
+    {
+        bcmolt_devid dummy;
+
+        rc = bcm_topo_pon_get_logical2physical(pon, &dummy, &physical_pon);
+        if (rc != BCM_ERR_OK)
+        {
+            return BCM_TOPO_PON_INVALID;
+        }
+        else
+        {
+            physical_pon++;
+        }
+    }
+
+    if (physical_pon < bcm_topo_context.devs[device_id].max_num_of_pons)
+    {
+        rc = bcm_topo_pon_get_physical2logical(device_id, physical_pon, &pon);
+        if (rc != BCM_ERR_OK)
+        {
+            return BCM_TOPO_PON_INVALID;
+        }
+        else
+        {
+            return pon;
+        }
+    }
+
+    return BCM_TOPO_PON_INVALID;
+}
+
+bcmos_errno bcm_topo_pon_get_logical2physical(uint32_t logical_pon, bcmolt_devid *device_id, uint32_t *physical_pon)
+{
+    if (logical_pon >= BCM_TOPO_MAX_NUM_OF_LOGICAL_PONS)
+    {
+        BCM_LOG(ERROR, topo_log_id, "Logical PON ID must be in the range 0 .. %u\n", BCM_TOPO_MAX_NUM_OF_LOGICAL_PONS - 1);
+        return BCM_ERR_RANGE;
+    }
+
+    if (!bcm_topo_context.logical_pon2physical_pon[logical_pon])
+    {
+        BCM_LOG(ERROR, topo_log_id, "Logical PON=%u was not associated with a physical PON\n", logical_pon);
+        return BCM_ERR_RANGE;
+    }
+
+    *physical_pon = bcm_topo_context.logical_pon2physical_pon[logical_pon]->pon_id;
+    *device_id = bcm_topo_context.logical_pon2physical_pon[logical_pon]->dev->device_id;
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_topo_pon_get_physical2logical(bcmolt_devid device_id, uint32_t physical_pon, uint32_t *logical_pon)
+{
+    if (device_id >= BCM_TOPO_MAX_NUM_OF_DEVS)
+    {
+        BCM_LOG(ERROR, topo_log_id, "Device ID must be in the range 0 .. %u\n", BCM_TOPO_MAX_NUM_OF_DEVS - 1);
+        return BCM_ERR_RANGE;
+    }
+
+    if (physical_pon >= bcm_topo_context.devs[device_id].max_num_of_pons)
+    {
+        BCM_LOG(ERROR, topo_log_id, "Physical PON ID must be in the range 0 .. %u\n", bcm_topo_context.devs[device_id].max_num_of_pons - 1);
+        return BCM_ERR_RANGE;
+    }
+
+    if (bcm_topo_context.devs[device_id].pons[physical_pon].logical_pon == BCM_TOPO_PON_INVALID)
+    {
+        BCM_LOG(ERROR, topo_log_id, "Physical PON=%u on device=%u was not associated with a logical PON\n", physical_pon, device_id);
+        return BCM_ERR_RANGE;
+    }
+
+    *logical_pon = bcm_topo_context.devs[device_id].pons[physical_pon].logical_pon;
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_topo_pon_set_context(uint32_t pon, bcm_topo_pon_context_id pon_context_id, void *context)
+{
+    bcmolt_devid device_id;
+    uint32_t physical_pon;
+    bcmos_errno rc;
+
+    if (pon_context_id >= BCM_TOPO_PON_CONTEXT_ID__NUM_OF)
+    {
+        BCM_LOG(ERROR, topo_log_id, "Invalid PON context ID\n");
+        return BCM_ERR_RANGE;
+    }
+
+    rc = bcm_topo_pon_get_logical2physical(pon, &device_id, &physical_pon);
+    if (rc != BCM_ERR_OK)
+        return rc;
+
+    bcm_topo_context.devs[device_id].pons[physical_pon].contexts[pon_context_id] = context;
+
+    return BCM_ERR_OK;
+}
+
+void *bcm_topo_pon_get_context(uint32_t pon, bcm_topo_pon_context_id pon_context_id)
+{
+    bcmolt_devid device_id;
+    uint32_t physical_pon;
+    bcmos_errno rc;
+
+    if (pon_context_id >= BCM_TOPO_PON_CONTEXT_ID__NUM_OF)
+    {
+        BCM_LOG(ERROR, topo_log_id, "Invalid PON context ID\n");
+        return NULL;
+    }
+
+    rc = bcm_topo_pon_get_logical2physical(pon, &device_id, &physical_pon);
+    if (rc != BCM_ERR_OK)
+        return NULL;
+
+    return bcm_topo_context.devs[device_id].pons[physical_pon].contexts[pon_context_id];
+}
+
+static void bcm_topo_init_context(void)
+{
+    uint32_t device_id;
+
+    for (device_id = 0; device_id < BCM_TOPO_MAX_NUM_OF_DEVS; device_id++)
+    {
+        bcm_topo_dev_context_t *dev;
+        uint32_t pon_id;
+
+        dev = &bcm_topo_context.devs[device_id];
+        dev->device_id = device_id;
+        dev->pon_mode = BCM_TOPO_PON_MODE_INVALID;
+        for (pon_id = 0; pon_id < BCM_TOPO_MAX_NUM_OF_PONS_PER_DEV; pon_id++)
+        {
+            bcm_topo_pon_context_t *pon;
+
+            pon = &dev->pons[pon_id];
+            pon->dev = dev;
+            pon->pon_id = pon_id;
+            pon->pon_mode = BCM_TOPO_PON_MODE_INVALID;
+            pon->logical_pon = BCM_TOPO_PON_INVALID;
+        }
+    }
+}
+
+static bcmos_errno bcm_topo_init_line_parse(const char *line, const char *filename, uint32_t line_num, bcmos_bool *is_skipped, uint32_t *logical_pon, bcm_topo_pon_mode *pon_mode,
+    uint32_t *device_id, uint32_t *physical_pon)
+{
+    int rc;
+    char logical_pon_str[BCM_TOPO_MAX_LINE_SIZE];
+    char pon_mode_str[BCM_TOPO_MAX_LINE_SIZE];
+    char device_id_str[BCM_TOPO_MAX_LINE_SIZE];
+    char physical_pon_str[BCM_TOPO_MAX_LINE_SIZE];
+    int2str_t *p;
+
+    /* Skip blank lines and comments. */
+    if (!*line || *line == '\n' || *line == '#')
+    {
+        *is_skipped = BCMOS_TRUE;
+        return BCM_ERR_OK;
+    }
+
+    *is_skipped = BCMOS_FALSE;
+
+    /* Read the tokens separated by commas. */
+    rc = sscanf(line, "%[^,],%*[ ]%[^,],%[^,],%[^\n]", logical_pon_str, pon_mode_str, device_id_str, physical_pon_str);
+    if (rc < 4)
+    {
+        BCM_LOG(ERROR, topo_log_id, "Error parsing line %s:%u (rc=%u)\n", filename, line_num, rc);
+        return BCM_ERR_PARSE;
+    }
+
+    if (sscanf(logical_pon_str, "%u", logical_pon) < 1)
+    {
+        BCM_LOG(ERROR, topo_log_id, "Error parsing line %s:%u (rc=%u)\n", filename, line_num, rc);
+        return BCM_ERR_PARSE;
+    }
+
+    if (sscanf(device_id_str, "%u", device_id) < 1)
+    {
+        BCM_LOG(ERROR, topo_log_id, "Error parsing line %s:%u (rc=%u)\n", filename, line_num, rc);
+        return BCM_ERR_PARSE;
+    }
+
+    if (sscanf(physical_pon_str, "%u", physical_pon) < 1)
+    {
+        BCM_LOG(ERROR, topo_log_id, "Error parsing line %s:%u (rc=%u)\n", filename, line_num, rc);
+        return BCM_ERR_PARSE;
+    }
+
+    BCM_LOG(INFO, topo_log_id, "Map Logical PON ID=%u -> (Physical Device ID=%u, Physical Pon ID=%u, PON mode='%s')\n", *logical_pon, *device_id, *physical_pon, pon_mode_str);
+
+    for (p = pon_mode2str; p->from != -1 && strcmp(pon_mode_str, p->to); p++);
+
+    if (p->from == -1)
+    {
+        BCM_LOG(ERROR, topo_log_id, "Error parsing PON mode at %s:%u\n", filename, line_num);
+        return BCM_ERR_PARSE;
+    }
+
+    *pon_mode = p->from;
+
+    return BCM_ERR_OK;
+}
+
+static void bcm_topo_init_dev(bcm_topo_dev_context_t *dev, bcm_topo_pon_mode pon_mode)
+{
+    dev->pon_mode = pon_mode;
+    dev->max_num_of_pons = int2int(pon_mode2max_num_of_pons, pon_mode);
+}
+
+static void bcm_topo_init_pon(bcm_topo_pon_context_t *pon, bcm_topo_pon_mode pon_mode)
+{
+    pon->pon_mode = pon_mode;
+    switch (pon_mode)
+    {
+    case BCM_TOPO_PON_MODE_GPON:
+        pon->max_num_of_onus = 128;
+        break;
+    case BCM_TOPO_PON_MODE_XGPON:
+    case BCM_TOPO_PON_MODE_XGS:
+        pon->max_num_of_onus = 256;
+        break;
+    case BCM_TOPO_PON_MODE_EPON_TDMA:
+    case BCM_TOPO_PON_MODE_EPON_1G:
+    case BCM_TOPO_PON_MODE_EPON_10G:
+        pon->max_num_of_onus = 0; /* There is no "ONU" in EPON, but LLIDs. */
+        break;
+    default:
+        break;
+    }
+}
+
+static bcmos_errno bcm_topo_init_by_file(FILE *fp, const char *filename)
+{
+    char line[BCM_TOPO_MAX_LINE_SIZE];
+    uint32_t line_num;
+
+    /* Read next line. */
+    line_num = 1;
+    while (fgets(line, sizeof(line), fp))
+    {
+        bcmos_bool is_skipped;
+        uint32_t logical_pon, device_id, physical_pon;
+        bcm_topo_pon_mode pon_mode;
+        bcm_topo_dev_context_t *dev;
+        bcm_topo_pon_context_t *pon;
+
+        if (bcm_topo_init_line_parse(line, filename, line_num, &is_skipped, &logical_pon, &pon_mode, &device_id, &physical_pon) != BCM_ERR_OK)
+            return BCM_ERR_PARSE;
+
+        if (is_skipped)
+        {
+            line_num++;
+            continue;
+        }
+
+        if (logical_pon >= BCM_TOPO_MAX_NUM_OF_LOGICAL_PONS)
+        {
+            BCM_LOG(ERROR, topo_log_id, "Logical PON ID at %s:%u must be in the range 0 .. %u\n", filename, line_num, BCM_TOPO_MAX_NUM_OF_LOGICAL_PONS - 1);
+            return BCM_ERR_RANGE;
+        }
+
+        if (bcm_topo_context.logical_pon2physical_pon[logical_pon])
+        {
+            BCM_LOG(ERROR, topo_log_id, "Logical PON ID at %s:%u has already been set before\n", filename, line_num);
+            return BCM_ERR_ALREADY;
+        }
+
+        if (device_id >= BCM_TOPO_MAX_NUM_OF_DEVS)
+        {
+            BCM_LOG(ERROR, topo_log_id, "Physical device ID at %s:%u must be in the range 0 .. %u\n", filename, line_num, BCM_TOPO_MAX_NUM_OF_DEVS - 1);
+            return BCM_ERR_RANGE;
+        }
+
+        dev = &bcm_topo_context.devs[device_id];
+        if (!dev->is_initialized)
+        {
+            bcm_topo_init_dev(dev, pon_mode);
+            dev->is_initialized = BCMOS_TRUE;
+        }
+        else if (dev->pon_mode != pon_mode)
+        {
+            BCM_LOG(ERROR, topo_log_id, "PON mode at %s:%u conflicts with PON mode='%s' that has already been set for this device\n", filename, line_num,
+                int2str(pon_mode2str, dev->pon_mode));
+            return BCM_ERR_NOT_SUPPORTED;
+        }
+
+        if (physical_pon >= dev->max_num_of_pons)
+        {
+            BCM_LOG(ERROR, topo_log_id, "Physical PON ID at %s:%u must be in the range 0 .. %u\n", filename, line_num, dev->max_num_of_pons - 1);
+            return BCM_ERR_RANGE;
+        }
+
+        pon = &bcm_topo_context.devs[device_id].pons[physical_pon];
+        if (!pon->is_initialized)
+        {
+            bcm_topo_init_pon(pon, pon_mode);
+            pon->is_initialized = BCMOS_TRUE;
+        }
+        else
+        {
+            BCM_LOG(ERROR, topo_log_id, "Physical PON ID at %s:%u has already been set before\n", filename, line_num);
+            return BCM_ERR_ALREADY;
+        }
+
+        bcm_topo_context.logical_pon2physical_pon[logical_pon] = &bcm_topo_context.devs[device_id].pons[physical_pon];
+        bcm_topo_context.devs[device_id].pons[physical_pon].logical_pon = logical_pon;
+
+        line_num++;
+    }
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno bcm_topo_init_by_args(bcm_topo_params *params)
+{
+    uint32_t device_id;
+    uint32_t max_num_of_pons_per_dev;
+
+    if (params->num_of_devs > BCM_TOPO_MAX_NUM_OF_DEVS)
+    {
+        BCM_LOG(ERROR, topo_log_id, "Number of devices must be in the range 0 .. %u\n", BCM_TOPO_MAX_NUM_OF_DEVS);
+        return BCM_ERR_RANGE;
+    }
+
+    max_num_of_pons_per_dev = int2int(pon_mode2max_num_of_pons, params->pon_mode);
+
+    if (params->num_of_pons_per_dev > max_num_of_pons_per_dev)
+    {
+        BCM_LOG(ERROR, topo_log_id, "Number of PONs per device for PON mode '%s' must be in the range 0 .. %u\n", int2str(pon_mode2str, params->pon_mode), BCM_TOPO_MAX_NUM_OF_DEVS);
+        return BCM_ERR_RANGE;
+    }
+
+    for (device_id = 0; device_id < params->num_of_devs; device_id++)
+    {
+        uint32_t physical_pon;
+        bcm_topo_dev_context_t *dev;
+        bcm_topo_pon_context_t *pon;
+
+        dev = &bcm_topo_context.devs[device_id];
+        bcm_topo_init_dev(dev, params->pon_mode);
+        dev->is_initialized = BCMOS_TRUE;
+
+        for (physical_pon = 0; physical_pon < params->num_of_pons_per_dev; physical_pon++)
+        {
+            uint32_t logical_pon;
+
+            logical_pon = (device_id * params->num_of_pons_per_dev) + physical_pon;
+
+            BCM_LOG(INFO, topo_log_id, "Map Logical PON ID=%u -> (Physical Device ID=%u, Physical pon ID=%u, PON mode='%s')\n", logical_pon, device_id, physical_pon,
+                int2str(pon_mode2str, params->pon_mode));
+
+            pon = &bcm_topo_context.devs[device_id].pons[physical_pon];
+            bcm_topo_init_pon(pon, params->pon_mode);
+            pon->is_initialized = BCMOS_TRUE;
+
+            bcm_topo_context.logical_pon2physical_pon[logical_pon] = &bcm_topo_context.devs[device_id].pons[physical_pon];
+            bcm_topo_context.devs[device_id].pons[physical_pon].logical_pon = logical_pon;
+        }
+    }
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_topo_init(bcm_topo_params *params, const char *topo_filename)
+{
+    bcmos_errno ret;
+    FILE *topo_fp;
+
+#ifdef ENABLE_LOG
+    if (topo_log_id == DEV_LOG_INVALID_ID)
+    {
+        topo_log_id = bcm_dev_log_id_register("TOPOLOGY", DEV_LOG_LEVEL_INFO, DEV_LOG_ID_TYPE_BOTH);
+        BUG_ON(topo_log_id == DEV_LOG_INVALID_ID);
+    }
+#endif
+
+    bcm_topo_init_context();
+
+    topo_fp = fopen(topo_filename, "r");
+    if (topo_fp)
+    {
+        BCM_LOG(INFO, topo_log_id, "Topology is taken from file\n");
+        ret = bcm_topo_init_by_file(topo_fp, topo_filename);
+        fclose(topo_fp);
+    }
+    else if (params)
+    {
+        BCM_LOG(INFO, topo_log_id, "Topology is taken from arguments\n");
+        ret = bcm_topo_init_by_args(params);
+    }
+    else
+    {
+        BCM_LOG(INFO, topo_log_id, "At least one of topo_fp and params must be specified and exist\n");
+        ret = BCM_ERR_PARM;
+    }
+
+    if (ret != BCM_ERR_OK)
+        goto exit;
+
+    bcm_topo_context.is_initialized = BCMOS_TRUE;
+
+    ret = BCM_ERR_OK;
+
+exit:
+    return ret;
+}
+
+bcmos_bool bcm_topo_is_initialized(void)
+{
+    return bcm_topo_context.is_initialized;
+}
+
+bcmos_bool bcm_topo_dev_set_max_nni(bcmolt_devid device_id, uint32_t num_nni_ports)
+{
+    if(device_id >= BCM_TOPO_MAX_NNI_DEVICES)
+    {
+        return BCM_ERR_PARM;
+    }
+    /* make sure the max number does not exceed the allocated resrouce */
+    if( num_nni_ports > BCM_TOPO_MAX_NNI_PORTS)
+    {
+        return BCM_ERR_PARM;
+    } 
+    g_max_nni_ports[device_id] = num_nni_ports;
+
+    return BCMOS_TRUE;
+}
+
+bcmos_bool bcm_topo_dev_get_max_nni(bcmolt_devid device_id, uint32_t *p_num_nni_ports)
+{
+    if(device_id >= BCM_TOPO_MAX_NNI_DEVICES)
+    {
+        return BCM_ERR_PARM;
+    }
+     *p_num_nni_ports = g_max_nni_ports[device_id];
+
+    return BCMOS_TRUE;
+}
+
+bcmos_bool bcm_topo_nni_is_valid(uint32_t nni)
+{
+
+    if (nni >= g_max_nni_ports[0])
+        return BCMOS_FALSE;
+
+    return BCMOS_TRUE;
+}
+
diff --git a/bal_release/src/lib/libtopology/bcm_topo.h b/bal_release/src/lib/libtopology/bcm_topo.h
new file mode 100644
index 0000000..9c6ec1c
--- /dev/null
+++ b/bal_release/src/lib/libtopology/bcm_topo.h
@@ -0,0 +1,270 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *
+ *  :>
+ *
+ *****************************************************************************/
+
+#ifndef _BCM_TOPO_H_
+#define _BCM_TOPO_H_
+
+#include <bcmolt_conv.h>
+#include <bcmos_system.h>
+#include <bcmolt_model_types.h>
+#include <bal_model_types.h>
+
+#define BCM_TOPO_DEV_INVALID UINT8_MAX
+#define BCM_TOPO_PON_INVALID UINT32_MAX
+#define BCM_TOPO_ERR_INVALID UINT32_MAX
+#define BCM_TOPO_MAX_NUM_OF_DEVS 8 /* Maxmimum of 8 devices per vOLT. */
+#define BCM_TOPO_MAX_NUM_OF_PONS_PER_DEV 16
+#define BCM_TOPO_MAX_NUM_OF_LOGICAL_PONS (BCM_TOPO_MAX_NUM_OF_DEVS * BCM_TOPO_MAX_NUM_OF_PONS_PER_DEV)
+
+#define BCM_TOPO_FOR_EACH_DEV(device_id) \
+    for (device_id = bcm_topo_dev_get_next(BCM_TOPO_DEV_INVALID); device_id != BCM_TOPO_DEV_INVALID; device_id = bcm_topo_dev_get_next(device_id))
+
+#define BCM_TOPO_DEV_FOR_EACH_PON(device_id, pon) \
+    for (pon = bcm_topo_pon_get_next(device_id, BCM_TOPO_PON_INVALID); pon != BCM_TOPO_PON_INVALID; pon = bcm_topo_pon_get_next(device_id, pon))
+
+#define BCM_TOPO_FOR_EACH_PON(device_id, pon) \
+    for (device_id = bcm_topo_dev_get_next(BCM_TOPO_DEV_INVALID); device_id != BCM_TOPO_DEV_INVALID; device_id = bcm_topo_dev_get_next(device_id)) \
+        BCM_TOPO_DEV_FOR_EACH_PON(device_id, pon)
+
+#define BCM_TOPO_FOR_EACH_ONU(pon, onu) \
+    for (onu = 0; onu < bcm_topo_pon_get_max_num_of_onus(pon); onu++)
+
+typedef enum
+{
+    BCM_TOPO_PON_MODE_GPON,
+    BCM_TOPO_PON_MODE_XGPON,
+    BCM_TOPO_PON_MODE_XGS,
+    BCM_TOPO_PON_MODE_EPON_TDMA,
+    BCM_TOPO_PON_MODE_EPON_1G,
+    BCM_TOPO_PON_MODE_EPON_10G,
+    BCM_TOPO_PON_MODE_INVALID,
+    BCM_TOPO_PON_MODE__NUM_OF,
+} bcm_topo_pon_mode;
+
+typedef enum
+{
+    BCM_TOPO_PON_FAMILY_GPON, /* GPON, XGPON, XGS, NGPON2 */
+    BCM_TOPO_PON_FAMILY_EPON,
+    BCM_TOPO_PON_FAMILY_INVALID,
+    BCM_TOPO_PON_FAMILY__NUM_OF,
+} bcm_topo_pon_family;
+
+typedef enum
+{
+    BCM_TOPO_PON_SUB_FAMILY_GPON, /* GPON only */
+    BCM_TOPO_PON_SUB_FAMILY_XGPON, /* XGPON, XGS, NGPON2 */
+    BCM_TOPO_PON_SUB_FAMILY_EPON,
+    BCM_TOPO_PON_SUB_FAMILY_INVALID,
+    BCM_TOPO_PON_SUB_FAMILY__NUM_OF,
+} bcm_topo_pon_sub_family;
+
+/* User context identifier - can be extended if more modules in the system use the bcm_topo.context. */
+typedef enum
+{
+    BCM_TOPO_PON_CONTEXT_ID_MAC_UTIL,
+    BCM_TOPO_PON_CONTEXT_ID_OMCI_SVC,
+    BCM_TOPO_PON_CONTEXT_ID_RSC_MGR,
+    BCM_TOPO_PON_CONTEXT_ID__NUM_OF,
+} bcm_topo_pon_context_id;
+
+typedef struct
+{
+    uint32_t num_of_devs;
+    uint32_t num_of_pons_per_dev;
+    bcm_topo_pon_mode pon_mode;
+} bcm_topo_params;
+
+/**
+ * @brief Get the PON mode of a given device ID.
+ * @param device_id            device ID
+ *
+ * @returns PON mode or Null on error
+ */
+const char *bcm_topo_dev_get_pon_mode_str(bcmolt_devid device_id);
+
+
+/**
+ * @brief Get the max number of pons of a given device ID.
+ * @param device_id            device ID
+ *
+ * @returns the max number of pons or -1 on error
+ */
+int bcm_topo_dev_get_max_pon(bcmolt_devid device_id);
+
+/**
+ * @brief Get the PON mode of a given logical PON ID.
+ * @param pon                 Logical PON ID
+ *
+ * @returns PON mode or BCM_TOPO_PON_MODE_INVALID on error
+ */
+bcm_topo_pon_mode bcm_topo_pon_get_pon_mode(uint32_t pon);
+
+/**
+ * @brief Get the PON family of a given logical PON ID.
+ * @param pon                 Logical PON ID
+ *
+ * @returns PON mode or BCM_TOPO_PON_FAMILY_INVALID on error
+ */
+bcm_topo_pon_family bcm_topo_pon_get_pon_family(uint32_t pon);
+
+/**
+ * @brief Get the PON sub-family of a given logical PON ID.
+ * @param pon                 Logical PON ID
+ *
+ * @returns PON mode or BCM_TOPO_PON_SUB_FAMILY_INVALID on error
+ */
+bcm_topo_pon_sub_family bcm_topo_pon_get_pon_sub_family(uint32_t pon);
+
+/**
+ * @brief Get the number of ONUs of a given logical PON ID.
+ * @param pon                 Logical PON ID
+ *
+ * @returns Number of ONUs or BCM_TOPO_ERR_INVALID on error
+ */
+uint32_t bcm_topo_pon_get_max_num_of_onus(uint32_t pon);
+
+/**
+ * @brief Return whether a given logical PON is in the valid range.
+ *
+ * @returns BCMOS_TRUE is the given logical PON is in the valid range, BCMOS_FALSE otherwise
+ */
+bcmos_bool bcm_topo_pon_is_valid(uint32_t pon);
+
+/**
+ * @brief Traverse devices
+ * @param device_id         Device iterator. Should be BCM_TOPO_DEV_INVALID at the beginning.
+ *
+ * @returns Next device, or BCM_TOPO_DEV_INVALID to mark that no more devices are available.
+ */
+bcmolt_devid bcm_topo_dev_get_next(bcmolt_devid device_id);
+
+/**
+ * @brief Traverse logical PONs within a given device.
+ * @param device_id         Device id
+ * @param pon               Logical PON iterator. Should be BCM_TOPO_PON_INVALID at the beginning.
+ *
+ * @returns Next logical PON on this device, or BCM_TOPO_PON_INVALID to mark that no more PONs are available.
+ */
+uint32_t bcm_topo_pon_get_next(bcmolt_devid device_id, uint32_t pon);
+
+/**
+ * @brief Get device ID and physical PON ID from logical PON ID.
+ * @param logical_pon            logical PON ID
+ * @param *device_id         Pointer to device id
+ * @param *physical_pon           Pointer to physical PON ID
+ *
+ * @returns bcmos_errno
+ * @note In general, the physical PON ID is used in the hardware directed function calls.
+ */
+bcmos_errno bcm_topo_pon_get_logical2physical(uint32_t logical_pon, bcmolt_devid *device_id, uint32_t *physical_pon);
+
+/**
+ * @brief Get logical PON ID from device ID and physical PON ID.
+ * @param device_id           Device id
+ * @param physical_pon             Physical PON ID
+ * @param *logical_pon            Pointer to logical PON ID
+ *
+ * @returns bcmos_errno
+ * @note In general, the logical PON ID is used in the BAL core directed function calls.
+ */
+bcmos_errno bcm_topo_pon_get_physical2logical(bcmolt_devid device_id, uint32_t physical_pon, uint32_t *logical_pon);
+
+/**
+ * @brief Set user context for a given logical PON ID.
+ * @param pon                 Logical PON ID
+ * @param pon_context_id      The identity of the module using the context
+ * @param context             Pointer to user context
+ *
+ * @returns bcmos_errno
+ */
+bcmos_errno bcm_topo_pon_set_context(uint32_t pon, bcm_topo_pon_context_id pon_context_id, void *context);
+
+/**
+ * @brief Get user context for a given logical PON ID.
+ * @param pon                 Logical PON ID
+ * @param pon_context_id      The identity of the module using the context
+ *
+ * @returns User context or NULL if there's an error
+ */
+void *bcm_topo_pon_get_context(uint32_t pon, bcm_topo_pon_context_id pon_context_id);
+
+/**
+ * @brief Initialize topology module, either by arguments (probably received from CLI) or by a topology file. The rule is at least one of them must be specified and exist. If both are
+ *        specified and exist, then we rely on topology file.
+ *        Pay attention that when not using a file, the user have less freedom. For example:
+ *        - The user won't be able to have devices with different PON modes.
+ *        - The user won't be able to have devices with different number of PONs.
+ *        - The user won't be able to map logical PON to (device, physical PON). We assume that logical_pon = (device * num_of_pons_per_dev) + physical_pon.
+ * @param params              Topology parameters. If NULL, we rely on topology file.
+ * @param topo_filename       File containing bcm_topo.configuration in a .csv format
+ *                            The columns are:
+ *                            Logical PON ID, PON Mode, Physical Device ID, Physical PON ID
+ *
+ * @returns bcmos_errno
+ */
+bcmos_errno bcm_topo_init(bcm_topo_params *params, const char *topo_filename);
+
+/**
+ * @brief Returns whether the topology module has been initialized.
+ *
+ * @returns BCMOS_TRUE if topology module has been initialized
+ */
+bcmos_bool bcm_topo_is_initialized(void);
+
+#define BCM_TOPO_MAX_NNI_PORTS 16
+
+/**
+ * @brief Set the max number of nnis of a given device ID.
+ * @param device_id            device ID
+ * @param num_nni_ports        nni ports on the device
+ *
+ * @returns BCMOS_TRUE 
+ */
+bcmos_bool bcm_topo_dev_set_max_nni(bcmolt_devid device_id, uint32_t num_nni_ports);
+
+/**
+ * @brief Get the max number of nnis of a given device ID.
+ * @param device_id            device ID
+ * @param p_num_nni_ports      pointer for the retrieved nni ports on the device
+ *
+ * @returns BCMOS_TRUE 
+ */
+bcmos_bool bcm_topo_dev_get_max_nni(bcmolt_devid device_id, uint32_t *p_num_nni_ports);
+
+/**
+ * @brief Return whether a given logical NNI is in the valid range.
+ *
+ * @returns BCMOS_TRUE is the given logical NNI is in the valid range, BCMOS_FALSE otherwise
+ */
+bcmos_bool bcm_topo_nni_is_valid(uint32_t nni);
+
+#endif
+
diff --git a/bal_release/src/lib/libutils/Makefile b/bal_release/src/lib/libutils/Makefile
new file mode 100644
index 0000000..8b4dd50
--- /dev/null
+++ b/bal_release/src/lib/libutils/Makefile
@@ -0,0 +1,35 @@
+###############################################################################
+#
+#  <:copyright-BRCM:2016:DUAL/GPL:standard
+#  
+#     Copyright (c) 2016 Broadcom
+#     All Rights Reserved
+#  
+#  Unless you and Broadcom execute a separate written software license
+#  agreement governing use of this software, this software is licensed
+#  to you under the terms of the GNU General Public License version 2
+#  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+#  with the following added to such license:
+#  
+#     As a special exception, the copyright holders of this software give
+#     you permission to link this software with independent modules, and
+#     to copy and distribute the resulting executable under terms of your
+#     choice, provided that you also meet, for each linked independent
+#     module, the terms and conditions of the license of that module.
+#     An independent module is a module which is not derived from this
+#     software.  The special exception does not apply to any modifications
+#     of the software.
+#  
+#  Not withstanding the above, under no circumstances may you combine
+#  this software in any way with any other Broadcom software provided
+#  under a license other than the GPL, without Broadcom's express prior
+#  written consent.
+#  
+#  :>
+#
+###############################################################################
+MOD_NAME = balutils
+MOD_TYPE = lib
+
+srcs = bal_utils.c
+
diff --git a/bal_release/src/lib/libutils/bal_utils.c b/bal_release/src/lib/libutils/bal_utils.c
new file mode 100644
index 0000000..024b3d9
--- /dev/null
+++ b/bal_release/src/lib/libutils/bal_utils.c
@@ -0,0 +1,541 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file bal_utils.c
+ * @brief BAL Utilities source
+ *
+ * This file contains the implementation of various BAL "utilities",
+ * which are provided via the libutils.a library.
+ */ 
+
+/*@{*/
+
+#ifdef USING_BAL_UTILS
+
+/* --- system includes ---*/
+#include <stdio.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <limits.h>
+#include <arpa/inet.h>
+#include <string.h>
+
+#include <bcmos_system.h>
+
+/* --- project includes ---*/
+#include "bal_utils.h"
+
+
+/*
+ * Generic helper functions
+ */
+char *mac_addr_to_str(char *buffer, bcmos_mac_address mac)
+{
+    char *fmt_str = NULL;
+
+    fmt_str = "%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx";
+
+    snprintf(buffer, 20, fmt_str,
+             mac.u8[0], mac.u8[1],
+             mac.u8[2], mac.u8[3],
+             mac.u8[4], mac.u8[5]);
+        
+    return buffer;
+}
+
+
+bcmos_bool mac_add_is_null(bcmos_mac_address mac)
+{
+    return ((0 != mac.u8[0]) || (0 != mac.u8[1]) || (0 != mac.u8[2]) ||
+            (0 != mac.u8[3]) || (0 != mac.u8[4]) || (0 != mac.u8[5])) ? BCMOS_FALSE : BCMOS_TRUE;
+}
+
+/**
+ * @brief Determines if string contains a valid IPv4 or IPv6 address
+ *
+ *
+ * @param ipAddrStr Pointer to string to parse
+ *
+ * @return bcmos_bool
+ * @retval TRUE String contains a valid IP address
+ * @retval FALSE String does not
+ */
+bcmos_bool BalIsValidIp(const char *ipAddrStr)
+{
+    struct sockaddr_in addr4;
+	struct in6_addr addr6;
+	bcmos_bool ret = BCMOS_FALSE;
+
+    /* Parameter checks. */
+    BUG_UNLESS(NULL != ipAddrStr, BCMOS_FALSE);
+
+	/* First look to see if it's a valid IPv4 address, then look to see if it's
+       a valid IPv6 address*/
+	if (inet_pton(AF_INET, ipAddrStr, &addr4) > 0 || inet_pton(AF_INET6, ipAddrStr, &addr6) > 0)
+	{
+	    ret = TRUE;
+	}
+
+	return ret;
+}
+
+
+/**
+ * @brief Convert a string to the specified type of integer
+ *
+ * NOTE: This function uses the strtoll() function to convert the string to an
+ * integer value. U64 values greater than 0x7fffffffffffffff cannot be converted
+ * by the strtoll() function because the string value is considered out of the
+ * valid -0x8000000000000000 to 0x7fffffffffffffff 64-bit integer range.
+ *
+ * @param str    String to convert
+ * @param pVal   Pointer to the return value
+ *
+ * @return bcmos_errno
+ */
+static bcmos_errno BalStringToInt(char *str, BalIntStringT *pVal)
+{
+    bcmos_errno  rc  = BAL_OK;
+    U64        u64 = 0;
+    S64        s64 = 0;
+    char      *endptr;
+
+    BUG_UNLESS(NULL != str, BAL_PARAM);
+    BUG_UNLESS(NULL != pVal, BAL_PARAM);
+    BUG_UNLESS(pVal->intType > BAL_STR2INT_INVALID, BAL_PARAM);
+    BUG_UNLESS(pVal->intType < BAL_STR2INT_MAX, BAL_PARAM);
+
+    do
+    {
+        if ((pVal->intType >= BAL_STR2INT_S8) &&
+            (pVal->intType <= BAL_STR2INT_S64))
+        {
+            /* Just assume a signed 64-bit value when converting the string to
+             * an integer. Range checking is done below. Make sure that errno
+             * is set to zero before calling strtoll().
+             */
+            errno = 0;
+            pVal->intU.s64 = 0;   /* Clear all possibilities to 0 */
+            s64 = strtoll(str, &endptr, 10);
+
+            /* General range and error check */
+            if ((errno == ERANGE && (s64 == LONG_MAX || s64 == LONG_MIN))
+                || (errno != 0 && s64 == 0))
+            {
+                errno = 0;
+                rc = BCM_ERR_RANGE;
+                break;
+
+            }
+
+            /* test for no digits or mixed digits and characters */
+            if (endptr == str || '\0' != *endptr)
+            {
+                errno = 0;
+                rc = BCM_ERR_PARM;
+                break;
+            }
+
+            /* routine specific range check */
+            switch (pVal->intType)
+            {
+                case BAL_STR2INT_S8:
+                    if ((s64 < -128) || (s64 > 127))
+                    {
+                        rc = BCM_ERR_RANGE;
+                    }
+                    else
+                    {
+                        pVal->intU.s8 = (S8)s64;
+                    }
+                    break;
+                case BAL_STR2INT_S16:
+                    if ((s64 < -32768) || (s64 > 32767))
+                    {
+                        rc = BCM_ERR_RANGE;
+                    }
+                    else
+                    {
+                        pVal->intU.s16 = (S16)s64;
+                    }
+                    break;
+                case BAL_STR2INT_S32:
+                    if ((s64 < (-2147483647L -1L)) || (s64 > 2147483647L))
+                    {
+                        rc = BCM_ERR_RANGE;
+                    }
+                    else
+                    {
+                        pVal->intU.s32 = (S32)s64;
+                    }
+                    break;
+                case BAL_STR2INT_S64:
+                    /* No range checking is needed since the strtoll() function
+                     * does the range checking. If the string was invalid, errno
+                     * would have been non-zero.
+                     */
+                    pVal->intU.s64 = s64;
+                    break;
+                default:
+                    /* Should never make it here. */
+                    rc = BCM_ERR_PARM;
+                    break;
+            }
+        }
+        else {
+            /* Just assume an unsigned 64-bit value when converting the string
+             * to an integer. Range checking is done below. Make sure that errno
+             * is set to zero before calling strtoull().
+             */
+            errno = 0;
+            pVal->intU.u64 = 0;
+            u64 = strtoull(str, &endptr, 10);
+
+            /* General range and error check */
+            if ((errno == ERANGE && (s64 == LONG_MAX || s64 == LONG_MIN))
+                || (errno != 0 && s64 == 0))
+            {
+                errno = 0;
+                rc = BCM_ERR_RANGE;
+                break;
+
+            }
+
+            /* test for no digits or mixed digits and characters */
+            if (endptr == str || '\0' != *endptr)
+            {
+                errno = 0;
+                rc = BCM_ERR_PARM;
+                break;
+            }
+
+            /* routine specific range check */
+            switch(pVal->intType)
+            {
+                case BAL_STR2INT_U8:
+                    if (u64 > 255)
+                    {
+                        rc = BCM_ERR_RANGE;
+                    }
+                    else
+                    {
+                        pVal->intU.u8 = (U8)u64;
+                    }
+                    break;
+                case BAL_STR2INT_U16:
+                    if (u64 > 65535)
+                    {
+                        rc = BCM_ERR_RANGE;
+                    }
+                    else
+                    {
+                        pVal->intU.u16 = (U16)u64;
+                    }
+                    break;
+                case BAL_STR2INT_U32:
+                    if (u64 > 4294967295UL)
+                    {
+                        rc = BCM_ERR_RANGE;
+                    }
+                    else
+                    {
+                        pVal->intU.u32 = (U32)u64;
+                    }
+                    break;
+                case BAL_STR2INT_U64:
+                    /* No range checking is needed since the strtoull() function
+                     * does the range checking. If the string was invalid, errno
+                     * would have been non-zero.
+                     */
+                    pVal->intU.u64 = u64;
+                    break;
+                default:
+                    /* Should never make it here. */
+                    rc = BCM_ERR_PARM;
+                    break;
+            }
+        }
+    } while (0);
+
+    return(rc);
+}
+
+/**
+ * @brief Convert a string to an S8 type integer
+ *
+ * This function converts a string to an S8 type integer
+ *
+ * @param str    String to convert
+ * @param pVal   Pointer to the return value
+ *
+ * @return bcmos_errno
+ */
+bcmos_errno BalStringToS8(char *str, S8 *pVal)
+{
+    bcmos_errno rc = BAL_OK;
+    BalIntStringT intStr;
+
+    BUG_UNLESS(NULL != str, BAL_PARAM);
+    BUG_UNLESS(NULL != pVal, BAL_PARAM);
+
+    memset(&intStr, 0, sizeof(intStr));
+
+    intStr.intType = BAL_STR2INT_S8;
+
+    rc = BalStringToInt(str, &intStr);
+    if (BAL_OK == rc)
+    {
+        *pVal = intStr.intU.s8;
+    }
+
+    return(rc);
+}
+
+/**
+ * @brief Convert a string to an S16 type integer
+ *
+ * This function converts a string to an S16 type integer
+ *
+ * @param str    String to convert
+ * @param pVal   Pointer to the return value
+ *
+ * @return bcmos_errno
+ */
+bcmos_errno BalStringToS16(char *str, S16 *pVal)
+{
+    bcmos_errno rc = BAL_OK;
+    BalIntStringT intStr;
+
+    BUG_UNLESS(NULL != str, BAL_PARAM);
+    BUG_UNLESS(NULL != pVal, BAL_PARAM);
+
+    memset(&intStr, 0, sizeof(intStr));
+
+    intStr.intType = BAL_STR2INT_S16;
+
+    rc = BalStringToInt(str, &intStr);
+    if (BAL_OK == rc)
+    {
+        *pVal = intStr.intU.s16;
+    }
+
+    return(rc);
+}
+
+/**
+ * @brief Convert a string to an S32 type integer
+ *
+ * This function converts a string to an S32 type integer
+ *
+ * @param str    String to convert
+ * @param pVal   Pointer to the return value
+ *
+ * @return bcmos_errno
+ */
+bcmos_errno BalStringToS32(char *str, S32 *pVal)
+{
+    bcmos_errno rc = BAL_OK;
+    BalIntStringT intStr;
+
+    BUG_UNLESS(NULL != str, BAL_PARAM);
+    BUG_UNLESS(NULL != pVal, BAL_PARAM);
+
+    memset(&intStr, 0, sizeof(intStr));
+
+    intStr.intType = BAL_STR2INT_S32;
+
+    rc = BalStringToInt(str, &intStr);
+    if (BAL_OK == rc)
+    {
+        *pVal = intStr.intU.s32;
+    }
+
+    return(rc);
+}
+
+/**
+ * @brief Convert a string to an S64 type integer
+ *
+ * This function converts a string to an S64 type integer
+ *
+ * @param str    String to convert
+ * @param pVal   Pointer to the return value
+ *
+ * @return bcmos_errno
+ */
+bcmos_errno BalStringToS64(char *str, S64 *pVal)
+{
+    bcmos_errno rc = BAL_OK;
+    BalIntStringT intStr;
+
+    BUG_UNLESS(NULL != str, BAL_PARAM);
+    BUG_UNLESS(NULL != pVal, BAL_PARAM);
+
+    memset(&intStr, 0, sizeof(intStr));
+
+    intStr.intType = BAL_STR2INT_S64;
+
+    rc = BalStringToInt(str, &intStr);
+    if (BAL_OK == rc)
+    {
+        *pVal = intStr.intU.s64;
+    }
+
+    return(rc);
+}
+
+/**
+ * @brief Convert a string to a U8 type integer
+ *
+ * This function converts a string to a U8 type integer
+ *
+ * @param str    String to convert
+ * @param pVal   Pointer to the return value
+ *
+ * @return bcmos_errno
+ */
+bcmos_errno BalStringToU8(char *str, U8 *pVal)
+{
+    bcmos_errno rc = BAL_OK;
+    BalIntStringT intStr;
+
+    BUG_UNLESS(NULL != str, BAL_PARAM);
+    BUG_UNLESS(NULL != pVal, BAL_PARAM);
+
+    memset(&intStr, 0, sizeof(intStr));
+
+    intStr.intType = BAL_STR2INT_U8;
+
+    rc = BalStringToInt(str, &intStr);
+    if (BAL_OK == rc)
+    {
+        *pVal = intStr.intU.u8;
+    }
+
+    return(rc);
+}
+
+/**
+ * @brief Convert a string to a U16 type integer
+ *
+ * This function converts a string to a U16 type integer
+ *
+ * @param str    String to convert
+ * @param pVal   Pointer to the return value
+ *
+ * @return bcmos_errno
+ */
+bcmos_errno BalStringToU16(char *str, U16 *pVal)
+{
+    bcmos_errno rc = BAL_OK;
+    BalIntStringT intStr;
+
+    BUG_UNLESS(NULL != str, BAL_PARAM);
+    BUG_UNLESS(NULL != pVal, BAL_PARAM);
+
+    memset(&intStr, 0, sizeof(intStr));
+
+    intStr.intType = BAL_STR2INT_U16;
+
+    rc = BalStringToInt(str, &intStr);
+    if (BAL_OK == rc)
+    {
+        *pVal = intStr.intU.u16;
+    }
+
+    return(rc);
+}
+
+/**
+ * @brief Convert a string to a U32 type integer
+ *
+ * This function converts a string to a U32 type integer
+ *
+ * @param str    String to convert
+ * @param pVal   Pointer to the return value
+ *
+ * @return bcmos_errno
+ */
+bcmos_errno BalStringToU32(char *str, U32 *pVal)
+{
+    bcmos_errno rc = BAL_OK;
+    BalIntStringT intStr;
+
+    BUG_UNLESS(NULL != str, BAL_PARAM);
+    BUG_UNLESS(NULL != pVal, BAL_PARAM);
+
+    memset(&intStr, 0, sizeof(intStr));
+
+    intStr.intType = BAL_STR2INT_U32;
+
+    rc = BalStringToInt(str, &intStr);
+    if (BAL_OK == rc)
+    {
+        *pVal = intStr.intU.u32;
+    }
+
+    return(rc);
+}
+
+/**
+ * @brief Convert a string to a U64 type integer
+ *
+ * This function converts a string to a U64 type integer
+ *
+ * @param str    String to convert
+ * @param pVal   Pointer to the return value
+ *
+ * @return bcmos_errno
+ */
+bcmos_errno BalStringToU64(char *str, U64 *pVal)
+{
+    bcmos_errno rc = BAL_OK;
+    BalIntStringT intStr;
+
+    BUG_UNLESS(NULL != str, BAL_PARAM);
+    BUG_UNLESS(NULL != pVal, BAL_PARAM);
+
+    memset(&intStr, 0, sizeof(intStr));
+
+    intStr.intType = BAL_STR2INT_U64;
+
+    rc = BalStringToInt(str, &intStr);
+    if (BAL_OK == rc)
+    {
+        *pVal = intStr.intU.u64;
+    }
+
+    return(rc);
+}
+
+
+#endif /* USING_BAL_UTILS */
diff --git a/bal_release/src/lib/libutils/bal_utils.h b/bal_release/src/lib/libutils/bal_utils.h
new file mode 100644
index 0000000..78c6134
--- /dev/null
+++ b/bal_release/src/lib/libutils/bal_utils.h
@@ -0,0 +1,65 @@
+/******************************************************************************
+ *
+ *  <:copyright-BRCM:2016:DUAL/GPL:standard
+ *  
+ *     Copyright (c) 2016 Broadcom
+ *     All Rights Reserved
+ *  
+ *  Unless you and Broadcom execute a separate written software license
+ *  agreement governing use of this software, this software is licensed
+ *  to you under the terms of the GNU General Public License version 2
+ *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ *  with the following added to such license:
+ *  
+ *     As a special exception, the copyright holders of this software give
+ *     you permission to link this software with independent modules, and
+ *     to copy and distribute the resulting executable under terms of your
+ *     choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module.
+ *     An independent module is a module which is not derived from this
+ *     software.  The special exception does not apply to any modifications
+ *     of the software.
+ *  
+ *  Not withstanding the above, under no circumstances may you combine
+ *  this software in any way with any other Broadcom software provided
+ *  under a license other than the GPL, without Broadcom's express prior
+ *  written consent.
+ *  
+ *  :>
+ *
+ *****************************************************************************/
+ 
+/**
+ * @file bal_utils.h
+ * @brief BAL Utilities include file
+ *
+ */
+
+#ifndef BALUTILS_H
+#define BALUTILS_H
+
+/*@{*/
+
+/** 
+ * @brief General purpose BAL String structure.
+ *
+ * This is typically used for debugging or log messages.
+ */
+#define BAL_STRING_LENGTH 256
+
+#define MAC_STR_LEN 18
+
+/**
+ * @brief BAL String Structure
+ */
+typedef struct bal_string
+{
+    char str[BAL_STRING_LENGTH+1]; /**< The string */
+} bal_string;
+
+extern char *mac_addr_to_str(char *buffer, bcmos_mac_address mac);
+extern  bcmos_bool mac_add_is_null(bcmos_mac_address mac);
+
+/*@}*/
+
+#endif /* BALUTILS_H */
diff --git a/bal_release/tools/copyright_tools/insert_copyright.pl b/bal_release/tools/copyright_tools/insert_copyright.pl
new file mode 100755
index 0000000..6f01d1a
--- /dev/null
+++ b/bal_release/tools/copyright_tools/insert_copyright.pl
@@ -0,0 +1,169 @@
+#!/usr/bin/perl
+###############################################################################
+#
+#  Copyright 2015 Broadcom Corporation
+#
+#  This program is the proprietary software of Broadcom Corporation
+#  and/or its licensors, and may only be used, duplicated, modified or
+#  distributed pursuant to the terms and conditions of a separate,
+#  written license agreement executed between you and Broadcom (an
+#  "Authorized License").  Except as set forth in an Authorized License,
+#  Broadcom grants no license (express or implied), right to use, or
+#  waiver of any kind with respect to the Software, and Broadcom
+#  expressly reserves all rights in and to the Software and all
+#  intellectual property rights therein.  IF YOU HAVE NO AUTHORIZED
+#  LICENSE, THEN YOU HAVE NO RIGHT TO USE THIS SOFTWARE IN ANY WAY, AND
+#  SHOULD IMMEDIATELY NOTIFY BROADCOM AND DISCONTINUE ALL USE OF THE
+#  SOFTWARE.
+#
+#  Except as expressly set forth in the Authorized License,
+#
+#  1.  This program, including its structure, sequence and organization,
+#  constitutes the valuable trade secrets of Broadcom, and you shall use
+#  all reasonable efforts to protect the confidentiality thereof, and to
+#  use this information only in connection with your use of Broadcom
+#  integrated circuit products.
+#
+#  2.  TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED
+#  "AS IS" AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES,
+#  REPRESENTATIONS OR WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR
+#  OTHERWISE, WITH RESPECT TO THE SOFTWARE.  BROADCOM SPECIFICALLY
+#  DISCLAIMS ANY AND ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY,
+#  NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES,
+#  ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR
+#  CORRESPONDENCE TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING OUT
+#  OF USE OR PERFORMANCE OF THE SOFTWARE.
+#
+#  3.  TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM
+#  OR ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL, INCIDENTAL, SPECIAL,
+#  INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER ARISING OUT OF OR IN ANY WAY
+#  RELATING TO YOUR USE OF OR INABILITY TO USE THE SOFTWARE EVEN IF
+#  BROADCOM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES; OR (ii)
+#  ANY AMOUNT IN EXCESS OF THE AMOUNT ACTUALLY PAID FOR THE SOFTWARE
+#  ITSELF OR U.S. $1, WHICHEVER IS GREATER. THESE LIMITATIONS SHALL APPLY
+#  NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY LIMITED
+#  REMEDY.
+#
+###############################################################################
+#
+#  Script:  insert_copyright.pl
+#
+#  Purpose: This script inserts a copyright header into the beginning
+#           of a c/c++, shell script, and Makefiles.
+#
+#  Usage:   ./insert_copyright.pl -l <license file> [-t <type>] <source file>
+#             Options:
+#
+#             -l <file>   Specifies the license/copyright file to be inserted into the file
+#             -t <type>   Specifies the type of copyright to insert...
+#                           's' - shell script
+#                           'm' - Makefile
+#                           'c' - (default) c/c++ file
+#
+###############################################################################
+use Getopt::Long;
+my $licfile = "";
+my $srcfile = "";
+my $type = "";
+$result = GetOptions ("license_file=s" => \$licfile,
+                      "type=s"         => \$type);
+
+$srcfile = shift;
+
+## printf "$licfile, $type, $srcfile\n";
+
+sub InsertCfileCopyright
+{
+   my $lic  = shift;
+   my $src = shift;
+
+   print "/******************************************************************************\n";
+   print " *\n";
+
+   open( LICF, "< $lic" ) or die "Can't open $lic : $!";
+   while( $line = <LICF> ) {
+       print " *  $line";
+   }
+   close LICF;
+
+   print " *\n";
+   print " *****************************************************************************/\n";
+   print " \n";
+
+   if (length($srcfile) > 0) {
+       open( SRCF, "< $src" ) or die "Can't open $src : $!";
+       while( $line = <SRCF> ) {
+           print "$line";
+       }
+       close SRCF;
+   }
+}
+
+sub InsertMakefileCopyright
+{
+   my $lic = shift;
+   my $src = shift;
+
+   print "###############################################################################\n";
+   print "#\n";
+
+   open( LICF, "< $lic" ) or die "Can't open $lic : $!";
+   while( $line = <LICF> ) {
+       print "#  $line";
+   }
+   close LICF;
+
+   print "#\n";
+   print "###############################################################################\n";
+
+   if (length($srcfile) > 0) {
+       open( SRCF, "< $src" ) or die "Can't open $src : $!";
+       while( $line = <SRCF> ) {
+           print "$line";
+       }
+       close SRCF;
+   }
+}
+
+sub InsertShCopyright
+{
+   my $lic = shift;
+   my $src = shift;
+
+   if (length($srcfile) > 0) {
+       open( SRCF, "< $src" ) or die "Can't open $src : $!";
+       $line = <SRCF>;
+       print "$line";
+   }
+
+   print "###############################################################################\n";
+   print "#\n";
+
+   open( LICF, "< $lic" ) or die "Can't open $lic : $!";
+   while( $line = <LICF> ) {
+       print "#  $line";
+   }
+   close LICF;
+
+   print "#\n";
+   print "###############################################################################\n";
+
+   if (length($srcfile) > 0) {
+       while( $line = <SRCF> ) {
+           print "$line";
+       }
+       close SRCF;
+   }
+}
+
+if ($type eq "s") {
+    InsertShCopyright($licfile, $srcfile);
+} elsif ($type eq "m") {
+    InsertMakefileCopyright($licfile, $srcfile);
+} elsif ($type eq "c" || $type == "") {
+    InsertCfileCopyright($licfile, $srcfile);
+}
+
+exit;
+
+
diff --git a/bal_release/tools/copyright_tools/strip_c_copyright.pl b/bal_release/tools/copyright_tools/strip_c_copyright.pl
new file mode 100755
index 0000000..2464c58
--- /dev/null
+++ b/bal_release/tools/copyright_tools/strip_c_copyright.pl
@@ -0,0 +1,86 @@
+#!/usr/bin/perl
+###############################################################################
+#
+#  Copyright 2008-2014 Broadcom Corporation
+#
+#  This program is the proprietary software of Broadcom Corporation
+#  and/or its licensors, and may only be used, duplicated, modified or
+#  distributed pursuant to the terms and conditions of a separate,
+#  written license agreement executed between you and Broadcom (an
+#  "Authorized License").  Except as set forth in an Authorized License,
+#  Broadcom grants no license (express or implied), right to use, or
+#  waiver of any kind with respect to the Software, and Broadcom
+#  expressly reserves all rights in and to the Software and all
+#  intellectual property rights therein.  IF YOU HAVE NO AUTHORIZED
+#  LICENSE, THEN YOU HAVE NO RIGHT TO USE THIS SOFTWARE IN ANY WAY, AND
+#  SHOULD IMMEDIATELY NOTIFY BROADCOM AND DISCONTINUE ALL USE OF THE
+#  SOFTWARE.
+#
+#  Except as expressly set forth in the Authorized License,
+#
+#  1.  This program, including its structure, sequence and organization,
+#  constitutes the valuable trade secrets of Broadcom, and you shall use
+#  all reasonable efforts to protect the confidentiality thereof, and to
+#  use this information only in connection with your use of Broadcom
+#  integrated circuit products.
+#
+#  2.  TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED
+#  "AS IS" AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES,
+#  REPRESENTATIONS OR WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR
+#  OTHERWISE, WITH RESPECT TO THE SOFTWARE.  BROADCOM SPECIFICALLY
+#  DISCLAIMS ANY AND ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY,
+#  NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES,
+#  ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR
+#  CORRESPONDENCE TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING OUT
+#  OF USE OR PERFORMANCE OF THE SOFTWARE.
+#
+#  3.  TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM
+#  OR ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL, INCIDENTAL, SPECIAL,
+#  INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER ARISING OUT OF OR IN ANY WAY
+#  RELATING TO YOUR USE OF OR INABILITY TO USE THE SOFTWARE EVEN IF
+#  BROADCOM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES; OR (ii)
+#  ANY AMOUNT IN EXCESS OF THE AMOUNT ACTUALLY PAID FOR THE SOFTWARE
+#  ITSELF OR U.S. $1, WHICHEVER IS GREATER. THESE LIMITATIONS SHALL APPLY
+#  NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY LIMITED
+#  REMEDY.
+#
+###############################################################################
+#
+#  Script:  strip_c_copyright.pl
+#
+#  Purpose: This script removes a copyright header from a c/c++
+#           file. The file is passed into the perl script via STDIN, so this
+#           script must be used in conjunction with something like 'cat'.
+#
+#  Usage:   cat <file> | ./strip_c_copyright.pl
+#
+#
+#  Previous attemps at c-style regular expressions...
+#    s#(?:\/\*(?:[^*]|(?:\*+[^*\/]))*\*+\/).*\n##;
+#    s#(?:\/\*.*Copyright\(c\)(?:[^*]|(?:\*+[^*\/]))*\*+\/).*\n|(?:\/\*(?:[^*]|(?:\*+[^*\/]))*Copyright\(c\)(?:[^*]|(?:\*+[^*\/]))*\*+\/).*\n##;
+#    good => s#(?:\/\*.*Copyright(?:[^*]|(?:\*+[^*\/]))*\*+\/).*\n|(?:\/\*(?:[^*]|(?:\*+[^*\/]))*Copyright(?:[^*]|(?:\*+[^*\/]))*\*+\/).*\n##;
+#    good => s#(?:\/\*.*Copyright(?:[^*]|(?:\*+[^*\/]))*\*+\/).*(?:\s)+|(?:\/\*(?:[^*]|(?:\*+[^*\/]))*Copyright(?:[^*]|(?:\*+[^*\/]))*\*+\/).*(?:\s)+##;
+#
+#  The following regex can be used for removing redundant C++
+#  copyright header from libssd files...
+#
+#  s#\/\/\*+[^*]*Copyright[^*]*\/\/\*+#//****************************************************************************#;
+#
+###############################################################################
+
+$/ = undef;
+$_ = <>;
+
+#
+# The following regex handles the old Teknovus-style copyright headers
+#
+# e.g. "/*         Copyright(c) 2008-2012 Broadcom, Corp.        */"
+#
+#s#(?:\/\*.*Copyright(?:[^*]|(?:\*+[^*\/]))*\*+\/).*(?:\s)+##;
+
+#
+# The following regex handles the new Broadcom standard copyright headers
+#
+s#(?:\/\*(?:[^*]|(?:\*+[^*\/]))*Copyright(?:[^*]|(?:\*+[^*\/]))*\*+\/).*(?:\s)+##;
+print;
+
diff --git a/bal_release/tools/copyright_tools/strip_sh_copyright.pl b/bal_release/tools/copyright_tools/strip_sh_copyright.pl
new file mode 100755
index 0000000..82406b1
--- /dev/null
+++ b/bal_release/tools/copyright_tools/strip_sh_copyright.pl
@@ -0,0 +1,63 @@
+#!/usr/bin/perl
+###############################################################################
+#
+#  Copyright 2008-2014 Broadcom Corporation
+#
+#  This program is the proprietary software of Broadcom Corporation
+#  and/or its licensors, and may only be used, duplicated, modified or
+#  distributed pursuant to the terms and conditions of a separate,
+#  written license agreement executed between you and Broadcom (an
+#  "Authorized License").  Except as set forth in an Authorized License,
+#  Broadcom grants no license (express or implied), right to use, or
+#  waiver of any kind with respect to the Software, and Broadcom
+#  expressly reserves all rights in and to the Software and all
+#  intellectual property rights therein.  IF YOU HAVE NO AUTHORIZED
+#  LICENSE, THEN YOU HAVE NO RIGHT TO USE THIS SOFTWARE IN ANY WAY, AND
+#  SHOULD IMMEDIATELY NOTIFY BROADCOM AND DISCONTINUE ALL USE OF THE
+#  SOFTWARE.
+#
+#  Except as expressly set forth in the Authorized License,
+#
+#  1.  This program, including its structure, sequence and organization,
+#  constitutes the valuable trade secrets of Broadcom, and you shall use
+#  all reasonable efforts to protect the confidentiality thereof, and to
+#  use this information only in connection with your use of Broadcom
+#  integrated circuit products.
+#
+#  2.  TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED
+#  "AS IS" AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES,
+#  REPRESENTATIONS OR WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR
+#  OTHERWISE, WITH RESPECT TO THE SOFTWARE.  BROADCOM SPECIFICALLY
+#  DISCLAIMS ANY AND ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY,
+#  NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES,
+#  ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR
+#  CORRESPONDENCE TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING OUT
+#  OF USE OR PERFORMANCE OF THE SOFTWARE.
+#
+#  3.  TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM
+#  OR ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL, INCIDENTAL, SPECIAL,
+#  INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER ARISING OUT OF OR IN ANY WAY
+#  RELATING TO YOUR USE OF OR INABILITY TO USE THE SOFTWARE EVEN IF
+#  BROADCOM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES; OR (ii)
+#  ANY AMOUNT IN EXCESS OF THE AMOUNT ACTUALLY PAID FOR THE SOFTWARE
+#  ITSELF OR U.S. $1, WHICHEVER IS GREATER. THESE LIMITATIONS SHALL APPLY
+#  NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY LIMITED
+#  REMEDY.
+#
+###############################################################################
+#
+#  Script:  strip_sh_copyright.pl
+#
+#  Purpose: This script removes a copyright header from a shell script
+#           file or Makefile.  The file is passed into the perl script via
+#           STDIN, so this script must be used in conjunction with something
+#           like 'cat'.
+#
+#  Usage:   cat <file> | ./strip_sh_copyright.pl
+#
+###############################################################################
+
+$/ = undef;
+$_ = <>;
+s/##+(?:[^#]|(?:#[^#])*)*Copyright(?:[^#]|(?:#[^#])*)*##+\n//g;
+print;
diff --git a/bal_release/tools/copyright_tools/update_copyright.sh b/bal_release/tools/copyright_tools/update_copyright.sh
new file mode 100755
index 0000000..15f414d
--- /dev/null
+++ b/bal_release/tools/copyright_tools/update_copyright.sh
@@ -0,0 +1,221 @@
+#!/bin/sh
+###############################################################################
+#
+#  <:copyright-BRCM:2016:proprietary:standard
+#   
+#     Broadcom Ltd. Proprietary and Confidential.(c) 2016 Broadcom Ltd.
+#     All Rights Reserved
+#   
+#  This program is the proprietary software of Broadcom Ltd. and/or its
+#  licensors, and may only be used, duplicated, modified or distributed pursuant
+#  to the terms and conditions of a separate, written license agreement executed
+#  between you and Broadcom Ltd. (an "Authorized License").  Except as set forth in
+#  an Authorized License, Broadcom Ltd. grants no license (express or implied), right
+#  to use, or waiver of any kind with respect to the Software, and Broadcom Ltd.
+#  expressly reserves all rights in and to the Software and all intellectual
+#  property rights therein.  IF YOU HAVE NO AUTHORIZED LICENSE, THEN YOU HAVE
+#  NO RIGHT TO USE THIS SOFTWARE IN ANY WAY, AND SHOULD IMMEDIATELY NOTIFY
+#  BROADCOM LTD AND DISCONTINUE ALL USE OF THE SOFTWARE.
+#   
+#  Except as expressly set forth in the Authorized License,
+#   
+#  1. This program, including its structure, sequence and organization,
+#      constitutes the valuable trade secrets of Broadcom Ltd., and you shall use
+#      all reasonable efforts to protect the confidentiality thereof, and to
+#      use this information only in connection with your use of Broadcom Ltd.
+#      integrated circuit products.
+#   
+#  2. TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
+#      AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES, REPRESENTATIONS OR
+#      WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH
+#      RESPECT TO THE SOFTWARE.  BROADCOM SPECIFICALLY DISCLAIMS ANY AND
+#      ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY, NONINFRINGEMENT,
+#      FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES, ACCURACY OR
+#      COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR CORRESPONDENCE
+#      TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING OUT OF USE OR
+#      PERFORMANCE OF THE SOFTWARE.
+#   
+#  3. TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM OR
+#      ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL, INCIDENTAL, SPECIAL,
+#      INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER ARISING OUT OF OR IN ANY
+#      WAY RELATING TO YOUR USE OF OR INABILITY TO USE THE SOFTWARE EVEN
+#      IF BROADCOM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES;
+#      OR (ii) ANY AMOUNT IN EXCESS OF THE AMOUNT ACTUALLY PAID FOR THE
+#      SOFTWARE ITSELF OR U.S. $1, WHICHEVER IS GREATER. THESE LIMITATIONS
+#      SHALL APPLY NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY
+#      LIMITED REMEDY.
+#  :>
+#
+###############################################################################
+#
+#  Script:  update_copyright.sh
+#
+#  Purpose: This script updates the copyright comment headers in
+#           c/c++, shell script, and Makefiles. Depending on the options
+#           specified below, this script will also automatically create a
+#           Perforce changelist and checkout the files before updating the
+#           copyright headers.
+#
+#  Usage:   ./update_copyright.sh [-c chglist num|"none"] <files>
+#             Options:
+#
+#             -c num|"none"    If -c is specified with a Perforce changelist 
+#                              number, then files that are updated by this
+#                              script will be put into the specified changelist.
+#
+#                              If '-c none' is specified, the script will not 
+#                              execute any Perforce commands before updating the
+#                              copyright in files. The user is expected to checkout 
+#                              the files prior to excuting this script.
+#
+#                              If -c is not specified (default), a new change list 
+#                              is created and all updated files are put into the new 
+#                              change list.
+#
+#
+#  This script makes use of the following perl scripts:
+#      strip_c_copyright.pl   - Strips a copyright header from a c/c++ file.
+#      strip_sh_copyright.pl  - Strips a copyright header from a Makefile or shell 
+#                               script.
+#      insert_copyright.pl    - Inserts a copyright header into a c/c++, shell script, 
+#                               or Makefile file.
+#
+#
+#  --------------------------
+#  Copyright Update Procedure
+#  --------------------------
+#
+#  The following procedure should be used to update the copyright information.
+#
+#  1) find . -regextype egrep -regex '.*\.c|.*\.h|.*\.cpp|.*Makefile|.*Makefile\.sdk|.*\.mk|.*\.sh' | xargs $PROJROOT/tools/copyright_tools/update_copyright.sh
+#
+#  To exlude a directory from the search, use the following command
+#
+#  1a) find . -path ./3rdparty -prune -o -regextype egrep -regex '.*\.c|.*\.h|.*\.cpp|.*Makefile|.*Makefile\.sdk|.*\.mk|.*\.sh' | xargs $PROJROOT/tools/copyright_tools/update_copyright.sh
+#
+#  2) Update the "Copyright (c)" statement in the debug CLI (./lib/libdbg/dbgCli.c)
+#        - Note: newer versions of the script may already handle this automatically.
+#
+#  3) Update the following files by hand because they do not follow
+#     the standard source file naming conventions:
+#         - bal/cur/3rdparty/indigo/indigo/modules/ofpal_driver/module/src/ofpal_driver.c
+#         - bal/cur/3rdparty/indigo/indigo/modules/ofpal-driver/utest/main.c
+#         - bal/cur/doxygen/Makefile
+#
+#      Also, you can use the following command to find additional straglers...
+#
+#         find . | xargs grep 2013
+#
+#  (Optional) Use the following procedure to verify the changes.
+#
+#        a) Use p4 to build a list of files that are being modified by this CL.
+#
+#           p4 describe <CL from step1> | grep '^\.\.\.' | awk '{print $2}' | sed 's%//SystemSoftware/Rel/pioneer/dml/%%g' | sed 's%\#.$%%g'  > p4_changes_files.txt
+#        
+#        b) Add the following bash script to a file called temp.sh and
+#           add execute permissions to the file.
+#
+#            #!/bin/sh
+#            #
+#            while read -r line; do
+#                echo "$line:  "`p4 diff -ds $line | grep changed`
+#            done < p4_changes_files.txt
+#        
+#        c) Run the script
+#
+#            ./temp.sh | tee p4_diffs.txt
+#        
+#        d) Check the scripe for unusual/unexpected changes and use 'p4 diff file'
+#           to investigate.
+#
+#            cat p4_diffs.txt | grep -v "changed 1 chunks 1 / 1 lines" | tee t1.txt
+#
+#
+###############################################################################
+
+COPYRIGHT_FILE=${PROJROOT}/COPYRIGHT
+P4_CHANGELIST_DESC="Copyright Header Update - "`date`
+
+if [ "$1" = "-c" ]
+    then
+    P4_CHANGELIST_NUM="$2"
+
+    if [ "$P4_CHANGELIST_NUM" = "" ]
+        then
+        echo "ERROR: must specify 'none' or P4 change list number for the '-c' option."
+        exit 1
+    elif [ "$P4_CHANGELIST_NUM" = "none" ]
+        then
+        echo "NOTE: Perforce commands will be skipped"
+    else
+        echo "Using existing change list $P4_CHANGELIST_NUM"
+    fi
+    shift ; shift
+else
+    P4_CHANGELIST_NUM=`echo -e "Change: new\nDescription: ${P4_CHANGELIST_DESC}" | p4 change -i | cut -d " " -f 2`
+    echo "Created change list $P4_CHANGELIST_NUM"
+fi
+
+for path in "$@"
+do
+  file=`basename $path`
+
+  file_ext="${file#*.}"
+
+  # Only checkout files from perforce is an existing or new change list was specified 
+  if [ "$P4_CHANGELIST_NUM" != "none" ]
+      then
+
+      # Only update text files
+      p4_file_type=`p4 fstat $path | grep headType | cut -d " " -f 3 | grep -o text`
+      if [ "$p4_file_type" != "text" ]
+          then
+          echo "WARNING: skipping file '$path' because it it not a text file."
+          continue  ### resumes iteration of an enclosing for loop ###
+      fi
+
+      # Open the file for editing
+      p4 opened $path 2>&1 | grep -q "not opened"
+      if [ $? != 0 ]
+          then
+          echo "WARNING: file '$path' is already opened for edit..."
+      else
+          p4 edit -c $P4_CHANGELIST_NUM $path &>/dev/null
+      fi
+  fi
+
+  # Update the Copyright based on file type
+  if [ "$file_ext" == "c" ] || [ "$file_ext" == "h" ] || [ "$file_ext" == "cpp" ]
+      then
+      #
+      # C/C++ files
+      #
+      echo -ne "Updating '$file', type = c/c++ ... "
+      cat $path | perl ${PROJROOT}/tools/copyright_tools/strip_c_copyright.pl > $path"_crtemp";
+      perl ${PROJROOT}/tools/copyright_tools/insert_copyright.pl -t c -l ${COPYRIGHT_FILE} $path"_crtemp" > $path;
+      rm $path"_crtemp"
+      echo "done."
+  elif [ "$file_ext" == "sh" ]
+      then
+      #
+      # Shell script files
+      #
+      echo -ne "Updating '$file', type = shell script ... "
+      cat $path | perl ${PROJROOT}/tools/copyright_tools/strip_sh_copyright.pl > $path"_crtemp";
+      perl ${PROJROOT}/tools/copyright_tools/insert_copyright.pl -t s -l ${COPYRIGHT_FILE} $path"_crtemp" > $path;
+      rm $path"_crtemp"
+      echo "done."
+  elif [ "$file" == "Makefile" ] || [ "$file" == "Makefile.sdk" ] || [ "$file_ext" == "mk" ]
+      then
+      #
+      # Makefiles
+      #
+      echo -ne "Updating '$file', type = Makefile ... "
+      cat $path | perl ${PROJROOT}/tools/copyright_tools/strip_sh_copyright.pl > $path"_crtemp";
+      perl ${PROJROOT}/tools/copyright_tools/insert_copyright.pl -t m -l ${COPYRIGHT_FILE} $path"_crtemp" > $path;
+      rm $path"_crtemp"
+      echo "done."
+  else
+      echo "Skipping $file, type = unknown type"
+  fi
+done
\ No newline at end of file
diff --git a/bcm68620_release/release/Makefile b/bcm68620_release/release/Makefile
new file mode 100644
index 0000000..29a26ef
--- /dev/null
+++ b/bcm68620_release/release/Makefile
@@ -0,0 +1,166 @@
+# Central Makefile
+#
+PLATFORM ?= maple
+TOP_DIR=$(shell pwd)
+export PLATFORM
+export TOP_DIR
+
+ifeq ("$(PLATFORM)", "maple")
+    DEVICE=bcm68620
+    export DEVICE
+else
+    $(error Set DEVICE for $(PLATFORM))
+endif
+
+MAKE_DIR=$(TOP_DIR)/make
+MAKE_DEVICE_DIR=$(MAKE_DIR)/$(DEVICE)
+export MAKE_DIR
+export MAKE_DEVICE_DIR
+
+include $(MAKE_DIR)/Makefile.initial_config
+OUT_DIR          ?= $(TOP_DIR)/build
+OUT_DOCS_DIR	 ?= $(OUT_DIR)/doc
+
+# Identify whether it is customer or development build
+EMB_MODULE_LIST=$(realpath $(MAKE_DEVICE_DIR)/modules.embedded)
+ifeq ("$(EMB_MODULE_LIST)", "")
+    RELEASE_BUILD=y
+    export RELEASE_BUILD
+    USE_LINT=n
+    export USE_LINT
+    OUT_HOST_DIR 	 ?= $(OUT_DIR)
+    COPY_FS_SH		 = $(TOP_DIR)/make/copy_host_fs.sh 
+else
+    OUT_HOST_DIR 	 ?= $(OUT_DIR)/$(PLATFORM)/host
+    OUT_EMBEDDED_DIR ?= $(OUT_DIR)/$(PLATFORM)/embedded
+    COPY_FS_SH		 = $(TOP_DIR)/scripts/copy_host_fs.sh 
+    export OUT_EMBEDDED_DIR
+endif
+
+ifneq ("$(BOARD)", "")
+    COPY_HOST_FS_CMD = $(SILENT_BUILD)$(COPY_FS_SH) TOP_DIR=$(TOP_DIR) OUT_HOST_DIR=$(OUT_HOST_DIR)
+endif
+
+export OUT_HOST_DIR
+export OUT_DOCS_DIR
+
+# List of all modules, all library modules and all application modules
+export ALL_MODULES
+export ALL_LIB_MODULES
+export ALL_APP_MODULES
+
+# Current board
+export BOARD
+
+V ?= 0
+ifeq (x"$(V)", x"0")
+	SILENT = -s
+	export SILENT
+	SILENT_BUILD=@
+endif
+
+ifeq ("$(RELEASE_BUILD)", "y")
+all: build_host
+else
+all: build_host build_embedded
+endif
+	$(COPY_HOST_FS_CMD)
+	@echo --- All done ---    
+
+copy_host_fs:
+	$(COPY_HOST_FS_CMD)
+
+ifeq ("$(RELEASE_BUILD)", "y")
+clean: clean_host
+else
+clean: clean_host clean_embedded
+endif
+	rm -fr $(OUT_DIR)
+
+help_general:
+	@echo "make parameters:"
+	@echo "   PLATFORM          - platform to perform the build for. The default platform is $$PLATFORM"
+	@echo "                       Supported platforms are: maple"
+	@echo "   BOARD             - TBD board"
+	@echo "   ENABLE_EPON       - Include EPON/10GEPON support. Default =y, unless overwritten in platform configuration"
+	@echo "   ENABLE_GPON       - Include GPON support. Default =y, unless overwritten in platform configuration"
+	@echo "   ENABLE_XGPON      - Include XGPON support. Default =y, unless overwritten in platform configuration"
+	@echo "   V=<output_level>  - =1-verbose command output, =2-makefile debug output"
+	@echo "   GEN_OBJTAGS       - Low-level option. OBGTAGS to be passed to code generator"
+	@echo "   EXTRA_TYPES       - Low-level option. Space-delimited list of extra types without bcmolt_ prefix"
+	@echo "   ENABLE_CLI        - =n-exclude CLI support. Included by default"
+	@echo "   ENABLE_LOG        - =n-exclude dev_log support. Included by default"
+	@echo "make targets:"
+	@echo "   all               - build everything for the PLATFORM. This is the default target"
+	@echo "   host              - build PLATFORM's host side"
+	@echo "   embedded          - build PLATFORM's embedded side"
+	@echo "   clean             - clean everything for the PLATFORM"
+	@echo "   clean_host        - clean PLATFORM's host side"
+	@echo "   clean_embedded    - clean PLATFORM's embedded side"
+	@echo "   docs              - generate reference document in html format"
+	@echo "   docs_pdf          - generate reference document in pdf format"
+	@echo "   drivers           - generate librdb, ru_gen and hal_generator driver layers"
+	@echo "   clean_drivers     - clean librdb, ru_gen and hal_generator"
+
+
+ifeq ("$(RELEASE_BUILD)", "y")
+help: help_general help_host
+else
+help: help_general help_host help_embedded
+endif
+	
+docs: docs_host
+	
+docs_host:
+	$(SILENT_BUILD)$(MAKE) SUBSYSTEM=host -f $(MAKE_DIR)/Makefile.main $@
+
+docs_pdf: docs
+	$(SILENT_BUILD)$(MAKE) -C $(OUT_DOCS_DIR)/latex
+
+docs_clean:
+	$(SILENT_BUILD)$(BOLD_PRINT) "Cleaning docs"
+	$(SILENT_BUILD)rm -fr $(OUT_DOCS_DIR)
+
+clobber: clean docs_clean
+
+host: build_host
+	$(COPY_HOST_FS_CMD)
+
+clean_host:
+	$(SILENT_BUILD)rm -fr $(OUT_HOST_DIR)
+	$(SILENT_BUILD)$(MAKE) $(SILENT) SUBSYSTEM=host -f $(MAKE_DIR)/Makefile.main $@
+
+%_host:
+	$(SILENT_BUILD)$(MAKE) $(SILENT) SUBSYSTEM=host -f $(MAKE_DIR)/Makefile.main $@
+
+ifneq ("$(RELEASE_BUILD)", "y")
+embedded: build_embedded
+	$(COPY_HOST_FS_CMD)
+	
+clean_embedded:
+	$(SILENT_BUILD)rm -fr $(OUT_EMBEDDED_DIR)
+	$(SILENT_BUILD)$(MAKE) $(SILENT) SUBSYSTEM=embedded -f $(MAKE_DIR)/Makefile.main $@
+
+docs_embedded:
+
+%_embedded:
+	$(SILENT_BUILD)$(MAKE) $(SILENT) SUBSYSTEM=embedded -f $(MAKE_DIR)/Makefile.main $@
+
+endif
+	
+
+hal_generator:
+	$(SILENT_BUILD)$(MAKE) $(SLIENT) -C $(TOP_DIR)/embedded/hal_generator/src
+
+drivers:
+	$(SILENT_BUILD)$(MAKE) $(SLIENT) -C $(TOP_DIR)/embedded/hal_generator/librdb
+	$(SILENT_BUILD)$(MAKE) $(SLIENT) -C $(TOP_DIR)/embedded/hal_generator/ru_gen
+	$(SILENT_BUILD)$(MAKE) $(SLIENT) -C $(TOP_DIR)/embedded/pm_drv_generator
+
+
+clean_drivers:
+	$(SILENT_BUILD)$(MAKE) $(SLIENT) -C $(TOP_DIR)/embedded/hal_generator/librdb clean 
+	$(SILENT_BUILD)$(MAKE) $(SLIENT) -C $(TOP_DIR)/embedded/hal_generator/ru_gen clean
+	$(SILENT_BUILD)$(MAKE) $(SLIENT) -C $(TOP_DIR)/embedded/hal_generator/src clean
+	$(SILENT_BUILD)$(MAKE) $(SLIENT) -C $(TOP_DIR)/embedded/pm_drv_generator clean
+
diff --git a/bcm68620_release/release/docs/68620-SWRN116-SWRDS.pdf b/bcm68620_release/release/docs/68620-SWRN116-SWRDS.pdf
new file mode 100755
index 0000000..1f54532
--- /dev/null
+++ b/bcm68620_release/release/docs/68620-SWRN116-SWRDS.pdf
Binary files differ
diff --git a/bcm68620_release/release/embedded_binaries/bcm68620_appl.bin b/bcm68620_release/release/embedded_binaries/bcm68620_appl.bin
new file mode 100644
index 0000000..0b0d03e
--- /dev/null
+++ b/bcm68620_release/release/embedded_binaries/bcm68620_appl.bin
Binary files differ
diff --git a/bcm68620_release/release/embedded_binaries/bcm68620_boot.bin b/bcm68620_release/release/embedded_binaries/bcm68620_boot.bin
new file mode 100644
index 0000000..2ba650d
--- /dev/null
+++ b/bcm68620_release/release/embedded_binaries/bcm68620_boot.bin
Binary files differ
diff --git a/bcm68620_release/release/embedded_binaries/license.txt b/bcm68620_release/release/embedded_binaries/license.txt
new file mode 100755
index 0000000..d6d21e9
--- /dev/null
+++ b/bcm68620_release/release/embedded_binaries/license.txt
@@ -0,0 +1,46 @@
+/*
+<:copyright-BRCM:2016:proprietary:standard
+ 
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+ 
+This program is the proprietary software of Broadcom Corporation and/or its
+licensors, and may only be used, duplicated, modified or distributed pursuant
+to the terms and conditions of a separate, written license agreement executed
+between you and Broadcom (an "Authorized License").  Except as set forth in
+an Authorized License, Broadcom grants no license (express or implied), right
+to use, or waiver of any kind with respect to the Software, and Broadcom
+expressly reserves all rights in and to the Software and all intellectual
+property rights therein.  IF YOU HAVE NO AUTHORIZED LICENSE, THEN YOU HAVE
+NO RIGHT TO USE THIS SOFTWARE IN ANY WAY, AND SHOULD IMMEDIATELY NOTIFY
+BROADCOM AND DISCONTINUE ALL USE OF THE SOFTWARE.
+ 
+Except as expressly set forth in the Authorized License,
+ 
+1. This program, including its structure, sequence and organization,
+    constitutes the valuable trade secrets of Broadcom, and you shall use
+    all reasonable efforts to protect the confidentiality thereof, and to
+    use this information only in connection with your use of Broadcom
+    integrated circuit products.
+ 
+2. TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
+    AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES, REPRESENTATIONS OR
+    WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH
+    RESPECT TO THE SOFTWARE.  BROADCOM SPECIFICALLY DISCLAIMS ANY AND
+    ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY, NONINFRINGEMENT,
+    FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES, ACCURACY OR
+    COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR CORRESPONDENCE
+    TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING OUT OF USE OR
+    PERFORMANCE OF THE SOFTWARE.
+ 
+3. TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM OR
+    ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL, INCIDENTAL, SPECIAL,
+    INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER ARISING OUT OF OR IN ANY
+    WAY RELATING TO YOUR USE OF OR INABILITY TO USE THE SOFTWARE EVEN
+    IF BROADCOM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES;
+    OR (ii) ANY AMOUNT IN EXCESS OF THE AMOUNT ACTUALLY PAID FOR THE
+    SOFTWARE ITSELF OR U.S. $1, WHICHEVER IS GREATER. THESE LIMITATIONS
+    SHALL APPLY NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY
+    LIMITED REMEDY.
+:>
+*/
\ No newline at end of file
diff --git a/bcm68620_release/release/host_customized/api_linux/Makefile b/bcm68620_release/release/host_customized/api_linux/Makefile
new file mode 100644
index 0000000..da617b5
--- /dev/null
+++ b/bcm68620_release/release/host_customized/api_linux/Makefile
@@ -0,0 +1,16 @@
+# Makefile for building utilities as linux module
+#
+ifeq ("$(OS_KERNEL)", "linux")
+
+MOD_NAME = api_linux
+MOD_TYPE = linux_lib
+MOD_DEPS = utils_linux sysmodel
+srcs = bcmolt_msg.c
+
+# If called by linux kernel builder - add include paths manually.
+# It is not elegant, but we'll not have many linux modules
+ifneq ("$(KBUILD_SRC)", "")
+	-include $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
+endif
+
+endif
diff --git a/bcm68620_release/release/host_customized/api_linux/bcmolt_api.c b/bcm68620_release/release/host_customized/api_linux/bcmolt_api.c
new file mode 120000
index 0000000..4aea218
--- /dev/null
+++ b/bcm68620_release/release/host_customized/api_linux/bcmolt_api.c
@@ -0,0 +1 @@
+../../host_driver/api/bcmolt_api.c
\ No newline at end of file
diff --git a/bcm68620_release/release/host_customized/api_linux/bcmolt_api.h b/bcm68620_release/release/host_customized/api_linux/bcmolt_api.h
new file mode 120000
index 0000000..fe53e25
--- /dev/null
+++ b/bcm68620_release/release/host_customized/api_linux/bcmolt_api.h
@@ -0,0 +1 @@
+../../host_driver/api/bcmolt_api.h
\ No newline at end of file
diff --git a/bcm68620_release/release/host_customized/api_linux/bcmolt_msg.c b/bcm68620_release/release/host_customized/api_linux/bcmolt_msg.c
new file mode 120000
index 0000000..c3875f3
--- /dev/null
+++ b/bcm68620_release/release/host_customized/api_linux/bcmolt_msg.c
@@ -0,0 +1 @@
+../../host_driver/api/bcmolt_msg.c
\ No newline at end of file
diff --git a/bcm68620_release/release/host_customized/api_linux/bcmolt_msg.h b/bcm68620_release/release/host_customized/api_linux/bcmolt_msg.h
new file mode 120000
index 0000000..546a74e
--- /dev/null
+++ b/bcm68620_release/release/host_customized/api_linux/bcmolt_msg.h
@@ -0,0 +1 @@
+../../host_driver/api/bcmolt_msg.h
\ No newline at end of file
diff --git a/bcm68620_release/release/host_customized/board/wrx/Makefile b/bcm68620_release/release/host_customized/board/wrx/Makefile
new file mode 100644
index 0000000..67d1e07
--- /dev/null
+++ b/bcm68620_release/release/host_customized/board/wrx/Makefile
@@ -0,0 +1,14 @@
+# Maple board specific configurations. Relevant only if working in Linux
+#
+MOD_TYPE = lib
+MOD_NAME = bcm_board
+
+ifeq ("$(OS_KERNEL)", "linux")
+ifeq ("$(ENABLE_CLI)", "y")
+
+MOD_DEPS = cli i2c_devs api_cli bcm_dev_ctrl_linux
+
+srcs = bcmolt_board.c bcmolt_board_cli.c
+endif
+endif
+
diff --git a/bcm68620_release/release/host_customized/board/wrx/bcmolt_board.c b/bcm68620_release/release/host_customized/board/wrx/bcmolt_board.c
new file mode 100644
index 0000000..479c5f9
--- /dev/null
+++ b/bcm68620_release/release/host_customized/board/wrx/bcmolt_board.c
@@ -0,0 +1,702 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+*/
+#include <sys/ioctl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <bcmcli.h>
+#include <bcmolt_i2c_devs_ioctl.h>
+#include <bcmolt_dev_ctrl_ioctl.h>
+#include <bcmolt_api.h>
+#include <bcmolt_model_types.h>
+#include <bcmolt_fld.h>
+#include "bcmolt_board.h"
+#include "bcmolt_dpll_table.h"
+
+#define BCM_I2C_DEV_ADDR_START typedef enum {
+#define BCM_I2C_DEV_ADDR(name, desc, val) name = val,
+#define BCM_I2C_DEV_ADDR_END } bcm_i2c_dev_addr;
+
+#define BCM_FPGA_REG_FPGA_VERSION 0x0
+#define BCM_FPGA_REG_BOARD_CONF 0x1
+#define BCM_FPGA_REG_RESETS 0x2
+/* Enable/disable transceiver */
+#define BCM_FPGA_REG_TRX_ENABLE 0x3
+#define BCM_FPGA_REG_TRX_FAIL 0x4
+/* Is transceiver present ? */
+#define BCM_FPGA_REG_TRX_IS_PRESENT 0x5
+#define BCM_FPGA_REG_CXP_CONTROLS 0x6
+#define BCM_FPGA_REG_SHIFT_REGISTER_DATA 0x7
+#define BCM_FPGA_REG_SHIFT_REGISTER_CONTROL 0x8
+#define BCM_FPGA_REG_LEDS 0x9
+#define BCM_FPGA_REG_DEBUG_LEDS 0xA
+#define BCM_FPGA_REG_GPIO_DIR 0xB
+#define BCM_FPGA_REG_GPIO_INPUT 0xC
+#define BCM_FPGA_REG_GPIO_OUTPUT 0xD
+#define BCM_FPGA_REG_GPIO_IRQ 0xE
+
+#define BCM_FPGA_REG_LOW BCM_FPGA_REG_FPGA_VERSION
+#define BCM_FPGA_REG_HIGH BCM_FPGA_REG_GPIO_IRQ
+
+#define BCM_RST_BIT_DEVICE 0x0
+#define BCM_RST_BIT_PON_DPLL 0x1
+#define BCM_RST_BIT_PM_DPLL 0x2
+#define BCM_RST_BIT_KT2 0x4
+
+#define SVK4_IDENT_FILE                 "/etc/svk4"
+
+#include <bcmolt_i2c_devs_addr.h>
+
+#define MAX_CMD_STR_LEN 1024
+
+/* Since the board driver configuration is specific for Linux, there is no point using OS abstraction layer to perform operations like ioctl(). */
+
+static int maple_i2c_fd;
+static int maple_dev_ctrl_fd;
+
+static bcmos_bool bcm_board_is_svk4(void)
+{
+    bcmos_bool is_svk4 = BCMOS_FALSE;
+    FILE *f = fopen(SVK4_IDENT_FILE, "r");
+    if (f)
+    {
+        is_svk4 = BCMOS_TRUE;
+        fclose(f);
+    }
+    return is_svk4;
+}
+
+static bcmos_errno bcm_access_fpga(void)
+{
+    bcmos_errno rc;
+    if (bcm_board_is_svk4())
+    {
+        rc = bcm_board_dev_change(I2C_SW1_I2C_ADDR);
+        BCMOS_TRACE_CHECK_RETURN(rc, rc, "bcm_board_dev_change(I2C_SW1_I2C_ADDR) failed\n");
+        rc = bcm_board_switch_write(0x4);
+        BCMOS_TRACE_CHECK_RETURN(rc, rc, "bcm_board_switch_write(1) failed\n");
+    }
+    else
+    {
+        rc = bcm_board_dev_change(I2C_SW0_I2C_ADDR);
+        BCMOS_TRACE_CHECK_RETURN(rc, rc, "bcm_board_dev_change(I2C_SW0_I2C_ADDR) failed\n");
+        rc = bcm_board_switch_write(1);
+        BCMOS_TRACE_CHECK_RETURN(rc, rc, "bcm_board_switch_write(1) failed\n");
+    }
+    rc = bcm_board_dev_change(FPGA_I2C_ADDR);
+    BCMOS_TRACE_CHECK_RETURN(rc, rc, "bcm_board_dev_change(FPGA_I2C_ADDR) failed \n");
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_board_dev_change(uint32_t addr)
+{
+    int rc;
+    maple_i2c_ioctl_param params =
+    {
+        .addr = addr,
+    };
+
+    rc = ioctl(maple_i2c_fd, MAPLE_I2C_IOCTL_OP_DEV_CHANGE, &params);
+    BCMOS_TRACE_CHECK_RETURN(rc, BCM_ERR_INTERNAL, "ioctl failed for maple_i2c_fd\n");
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_board_dev_write(uint32_t count, uint32_t addr, uint32_t val)
+{
+    int rc;
+    maple_i2c_ioctl_param params =
+    {
+        .count = count,
+        .addr = addr,
+        .val = val,
+    };
+
+    rc = ioctl(maple_i2c_fd, MAPLE_I2C_IOCTL_OP_DEV_WRITE, &params);
+    BCMOS_TRACE_CHECK_RETURN(rc, BCM_ERR_INTERNAL, "ioctl failed for maple_i2c_fd\n");
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_board_dev_read(uint32_t count, uint32_t addr, uint32_t *val)
+{
+    int rc;
+    maple_i2c_ioctl_param params =
+    {
+        .count = count,
+        .addr = addr,
+    };
+
+    rc = ioctl(maple_i2c_fd, MAPLE_I2C_IOCTL_OP_DEV_READ, &params);
+    BCMOS_TRACE_CHECK_RETURN(rc, BCM_ERR_INTERNAL, "ioctl failed for maple_i2c_fd\n");
+    *val = params.val;
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_board_switch_write(uint32_t val)
+{
+    int rc;
+    maple_i2c_ioctl_param params =
+    {
+        .val = val,
+    };
+
+    rc = ioctl(maple_i2c_fd, MAPLE_I2C_IOCTL_OP_SWITCH_WRITE, &params);
+    BCMOS_TRACE_CHECK_RETURN(rc, BCM_ERR_INTERNAL, "ioctl failed for maple_i2c_fd\n");
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_board_switch_read(uint32_t *val)
+{
+    int rc;
+    maple_i2c_ioctl_param params = {};
+
+    rc = ioctl(maple_i2c_fd, MAPLE_I2C_IOCTL_OP_SWITCH_READ, &params);
+    BCMOS_TRACE_CHECK_RETURN(rc, BCM_ERR_INTERNAL, "ioctl failed for maple_i2c_fd\n");
+    *val = params.val;
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_board_fpga_write(uint32_t addr, uint32_t val)
+{
+    int rc;
+    maple_i2c_ioctl_param params =
+    {
+        .addr = addr,
+        .val = val,
+    };
+
+    rc = ioctl(maple_i2c_fd, MAPLE_I2C_IOCTL_OP_FPGA_WRITE, &params);
+    BCMOS_TRACE_CHECK_RETURN(rc, BCM_ERR_INTERNAL, "ioctl failed for fpga_write\n");
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_board_host_event_write(uint32_t val)
+{
+    int rc;
+    dev_ctrl_ioctl_param params =
+    {
+        .event = val,
+    };
+
+    rc = ioctl(maple_dev_ctrl_fd, MAPLE_DEV_CTRL_IOCTL_OP_HOST_EVENT_WRITE, &params);
+    BCMOS_TRACE_CHECK_RETURN(rc, BCM_ERR_INTERNAL, "ioctl failed for host_event_write\n");
+
+#ifdef CONFIG_ONU_SIM
+    /* Raise an interrupt on ext_irq1 for the embedded side. */
+    rc = bcm_board_fpga_gen_gpio_irq(BCMOLT_EXT_IRQ_EXT_IRQ1);
+    BCMOS_TRACE_CHECK_RETURN(rc, BCM_ERR_INTERNAL, "ioctl failed for bcm_board_fpga_gen_gpio_irq\n");
+#endif
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_board_pci_debug(uint32_t device, uint32_t command, int32_t start, int32_t howmany, uint32_t *dumpptr)
+{
+    int rc;
+    dev_ctrl_ioctl_param params =
+    {
+        .device = device,
+        .dumpptr = dumpptr,
+        .start_index = start,
+        .howmany = howmany
+    };
+
+    rc = ioctl(maple_dev_ctrl_fd, command, &params);
+    BCMOS_TRACE_CHECK_RETURN(rc, BCM_ERR_INTERNAL, "ioctl failed for dev_ctrl\n");
+
+    return BCM_ERR_OK;
+}
+bcmos_errno bcm_board_fpga_read(uint32_t addr, uint32_t *val)
+{
+    int rc;
+    maple_i2c_ioctl_param params =
+    {
+        .addr = addr,
+    };
+
+    rc = ioctl(maple_i2c_fd, MAPLE_I2C_IOCTL_OP_FPGA_READ, &params);
+    BCMOS_TRACE_CHECK_RETURN(rc, BCM_ERR_INTERNAL, "ioctl failed for fpga_read\n");
+    *val = params.val;
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_board_fpga_reg_read(uint32_t reg, uint32_t *val)
+{
+    bcmos_errno rc;
+
+    if (reg > BCM_FPGA_REG_HIGH)
+        return BCM_ERR_RANGE;
+
+    rc = bcm_access_fpga();
+    BCMOS_CHECK_RETURN(rc, rc, rc);
+
+    return bcm_board_fpga_read(reg, val);
+}
+
+bcmos_errno bcm_board_fpga_reg_write(uint32_t reg, uint32_t val)
+{
+    bcmos_errno rc;
+
+    if (reg > BCM_FPGA_REG_HIGH)
+        return BCM_ERR_RANGE;
+
+    rc = bcm_access_fpga();
+    BCMOS_CHECK_RETURN(rc, rc, rc);
+
+    return bcm_board_fpga_write(reg, val);
+}
+
+bcmos_errno bcm_board_fpga_version_get(uint32_t *version)
+{
+    bcmos_errno rc;
+
+    rc = bcm_access_fpga();
+    BCMOS_CHECK_RETURN(rc, rc, rc);
+
+    return bcm_board_fpga_read(BCM_FPGA_REG_FPGA_VERSION, version);
+}
+
+bcmos_errno bcm_board_fpga_set_gpio_dir(bcmolt_gpio_pin gpio_pin, bcm_fpga_gpio_dir dir)
+{
+    bcmos_errno rc;
+    uint32_t gpio_dir_mask;
+
+    rc = bcm_access_fpga();
+    BCMOS_CHECK_RETURN(rc, rc, rc);
+
+    /* Read-modify-write direction register (we don't want to affect other GPIO's). */
+    rc = bcm_board_fpga_read(BCM_FPGA_REG_GPIO_DIR, &gpio_dir_mask);
+    BCMOS_CHECK_RETURN(rc, rc, rc);
+    if (dir == BCM_FPGA_GPIO_DIR_INPUT)
+        gpio_dir_mask &= ~(1 << (gpio_pin - BCMOLT_GPIO_PIN_PIN4));
+    else
+        gpio_dir_mask |= (1 << (gpio_pin - BCMOLT_GPIO_PIN_PIN4));
+
+    return bcm_board_fpga_write(BCM_FPGA_REG_GPIO_DIR, gpio_dir_mask);
+}
+
+bcmos_errno bcm_board_fpga_get_gpio_dir(bcmolt_gpio_pin gpio_pin, bcm_fpga_gpio_dir *dir)
+{
+    bcmos_errno rc;
+    uint32_t gpio_dir_mask;
+
+    rc = bcm_access_fpga();
+    BCMOS_CHECK_RETURN(rc, rc, rc);
+
+    rc = bcm_board_fpga_read(BCM_FPGA_REG_GPIO_DIR, &gpio_dir_mask);
+    BCMOS_CHECK_RETURN(rc, rc, rc);
+
+    *dir = (gpio_dir_mask & (1 << (gpio_pin - BCMOLT_GPIO_PIN_PIN4))) ? BCM_FPGA_GPIO_DIR_OUTPUT : BCM_FPGA_GPIO_DIR_INPUT;
+
+    return rc;
+}
+
+bcmos_errno bcm_board_fpga_write_gpio(bcmolt_gpio_pin gpio_pin, uint32_t val)
+{
+    bcmos_errno rc;
+    uint32_t gpio_write_mask;
+
+    rc = bcm_access_fpga();
+    BCMOS_CHECK_RETURN(rc, rc, rc);
+
+    /* Read-modify-write direction register (we don't want to affect other GPIO's). */
+    rc = bcm_board_fpga_read(BCM_FPGA_REG_GPIO_OUTPUT, &gpio_write_mask);
+    BCMOS_CHECK_RETURN(rc, rc, rc);
+    if (!val)
+        gpio_write_mask &= ~(1 << (gpio_pin - BCMOLT_GPIO_PIN_PIN4));
+    else
+        gpio_write_mask |= (1 << (gpio_pin - BCMOLT_GPIO_PIN_PIN4));
+
+    return bcm_board_fpga_write(BCM_FPGA_REG_GPIO_OUTPUT, gpio_write_mask);
+}
+
+bcmos_errno bcm_board_fpga_read_gpio(bcmolt_gpio_pin gpio_pin, uint32_t *val)
+{
+    bcmos_errno rc;
+    uint32_t gpio_read_mask;
+
+    rc = bcm_access_fpga();
+    BCMOS_CHECK_RETURN(rc, rc, rc);
+
+    rc = bcm_board_fpga_read(BCM_FPGA_REG_GPIO_INPUT, &gpio_read_mask);
+    BCMOS_CHECK_RETURN(rc, rc, rc);
+
+    *val = (gpio_read_mask & (1 << (gpio_pin - BCMOLT_GPIO_PIN_PIN4)));
+
+    return rc;
+}
+
+bcmos_errno bcm_board_fpga_gen_gpio_irq(bcmolt_ext_irq ext_irq)
+{
+    bcmos_errno rc;
+    uint32_t gpio_irq_mask;
+
+    rc = bcm_access_fpga();
+    BCMOS_CHECK_RETURN(rc, rc, rc);
+
+    /* Read-modify-write direction register (we don't want to affect other GPIO's). */
+    rc = bcm_board_fpga_read(BCM_FPGA_REG_GPIO_IRQ, &gpio_irq_mask);
+    BCMOS_CHECK_RETURN(rc, rc, rc);
+
+    gpio_irq_mask |= (1 << ext_irq);
+    rc = bcm_board_fpga_write(BCM_FPGA_REG_GPIO_IRQ, gpio_irq_mask);
+    BCMOS_CHECK_RETURN(rc, rc, rc);
+
+    bcmos_usleep(1000);
+
+    gpio_irq_mask &= ~(1 << ext_irq);
+    rc = bcm_board_fpga_write(BCM_FPGA_REG_GPIO_IRQ, gpio_irq_mask);
+
+    return rc;
+}
+
+bcmos_errno bcm_board_trx_present(uint8_t pon)
+{
+    bcmos_errno rc;
+    uint32_t trx_absence_mask;
+
+    rc = bcm_access_fpga();
+    BCMOS_CHECK_RETURN(rc, rc, rc);
+
+    /* Check that the transceiver is present (plugged in). For ONU simulator, we allow working without transceivers. */
+    rc = bcm_board_fpga_read(BCM_FPGA_REG_TRX_IS_PRESENT, &trx_absence_mask);
+    BCMOS_CHECK_RETURN(rc, rc, rc);
+
+    if (trx_absence_mask & (1 << pon))
+    {
+        /* The transceiver is absent. */
+        return BCM_ERR_NODEV;
+    }
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_board_trx_enable(uint8_t pon, bcmos_bool is_enabled)
+{
+#ifdef CONFIG_ONU_SIM
+    static uint32_t trx_disable_mask = 0xFFFFFFFF;
+
+    /* Keep track of which TRXs are logically enabled. */
+    if (is_enabled)
+        trx_disable_mask &= ~(1 << pon);
+    else
+        trx_disable_mask |= (1 << pon);
+
+    return bcm_board_host_event_write(trx_disable_mask);
+#else
+    uint32_t trx_disable_mask;
+    uint32_t trx_absence_mask;
+
+    bcmos_errno rc = bcm_access_fpga();
+    BCMOS_CHECK_RETURN(rc, rc, rc);
+
+    /* Check that the transceiver is present (plugged in). */
+    rc = bcm_board_fpga_read(BCM_FPGA_REG_TRX_IS_PRESENT, &trx_absence_mask);
+    BCMOS_CHECK_RETURN(rc, rc, rc);
+    if (trx_absence_mask & (1 << pon))
+    {
+        /* The transceiver is absent. */
+        return BCM_ERR_NODEV;
+    }
+
+    /* Read-modify-write transceiver disable mask (we don't want to affect other PON's). */
+    rc = bcm_board_fpga_read(BCM_FPGA_REG_TRX_ENABLE, &trx_disable_mask);
+    BCMOS_CHECK_RETURN(rc, rc, rc);
+    if (is_enabled == BCMOS_TRUE)
+        trx_disable_mask &= ~(1 << pon);
+    else
+        trx_disable_mask |= (1 << pon);
+
+    rc = bcm_board_fpga_write(BCM_FPGA_REG_TRX_ENABLE, trx_disable_mask);
+    if (rc != BCM_ERR_OK)
+        return BCM_ERR_INTERNAL;
+    return bcm_board_host_event_write(trx_disable_mask);
+#endif
+}
+
+static bcmos_errno bcm_board_config_reset_value(uint32_t rst_bit, bcmos_bool is_on)
+{
+    bcmos_errno rc;
+    uint32_t reset_values;
+
+    rc = bcm_access_fpga();
+    BCMOS_CHECK_RETURN(rc, rc, rc);
+
+    /* Read-modify-write so we can set only the relevant bit to 0 */
+    rc = bcm_board_fpga_read(BCM_FPGA_REG_RESETS, &reset_values);
+    BCMOS_CHECK_RETURN(rc, rc, rc);
+
+    if (is_on == BCMOS_TRUE)
+        reset_values |= 1 << rst_bit;
+    else
+        reset_values &= ~(1 << rst_bit);
+
+    return bcm_board_fpga_write(BCM_FPGA_REG_RESETS, reset_values);
+}
+
+static bcmos_errno device_disconnect(void)
+{
+    bcmolt_device_key key = {};
+    bcmolt_device_cfg dev_cfg;
+    bcmolt_device_disconnect dev_disconnect;
+    bcmos_errno rc;
+
+    BCMOLT_CFG_INIT(&dev_cfg, device, key);
+    BCMOLT_CFG_PROP_GET(&dev_cfg, device, state);
+    rc = bcmolt_cfg_get(0, &dev_cfg.hdr);
+    BCMOS_CHECK_RETURN(rc, rc, rc);
+    if (dev_cfg.data.state != BCMOLT_DEVICE_STATE_DISCONNECTED)
+    {
+        BCMOLT_OPER_INIT(&dev_disconnect, device, disconnect, key);
+        return bcmolt_oper_submit(0, &dev_disconnect.hdr);
+    }
+    else
+        return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_board_device_reset(void)
+{
+    bcmos_errno rc;
+
+    rc = device_disconnect();
+    BCMOS_CHECK_RETURN(rc, rc, rc);
+    rc = bcm_board_config_reset_value(BCM_RST_BIT_DEVICE, BCMOS_FALSE);
+    BCMOS_CHECK_RETURN(rc, rc, rc);
+
+    return bcm_board_config_reset_value(BCM_RST_BIT_DEVICE, BCMOS_TRUE);
+}
+
+/* Device on keeps the reset bit on active high */
+bcmos_errno bcm_board_device_on(void)
+{
+    return bcm_board_config_reset_value(BCM_RST_BIT_DEVICE, BCMOS_TRUE);
+}
+
+/* Device off keeps the reset bit on active low */
+bcmos_errno bcm_board_device_off(void)
+{
+    bcmos_errno rc;
+
+    rc = device_disconnect();
+    BCMOS_CHECK_RETURN(rc, rc, rc);
+
+    return bcm_board_config_reset_value(BCM_RST_BIT_DEVICE, BCMOS_FALSE);
+}
+
+/* Katana2 Device on keeps the reset bit on active high */
+bcmos_errno bcm_board_kt2_device_on(void)
+{
+    /* take the KT2 out of reset */
+    return bcm_board_config_reset_value(BCM_RST_BIT_KT2, BCMOS_TRUE);
+}
+
+/* Device off keeps the reset bit on active low */
+bcmos_errno bcm_board_kt2_device_off(void)
+{
+    return bcm_board_config_reset_value(BCM_RST_BIT_KT2, BCMOS_FALSE);
+}
+
+static bcmos_errno bcm_access_dpll(void)
+{
+    bcmos_errno rc;
+
+    if (bcm_board_is_svk4())
+    {
+        rc = bcm_board_dev_change(I2C_SW1_I2C_ADDR);
+        BCMOS_TRACE_CHECK_RETURN(rc, rc, "bcm_board_dev_change(I2C_SW1_I2C_ADDR) failed\n");
+        rc = bcm_board_switch_write(0x20);
+        BCMOS_TRACE_CHECK_RETURN(rc, rc, "bcm_board_switch_write(0x20) failed\n");
+    }
+    else
+    {
+        rc = bcm_board_dev_change(I2C_SW0_I2C_ADDR);
+        BCMOS_TRACE_CHECK_RETURN(rc, rc, "bcm_board_dev_change(I2C_SW0_I2C_ADDR) failed\n");
+        rc = bcm_board_switch_write(2);
+        BCMOS_TRACE_CHECK_RETURN(rc, rc, "bcm_board_switch_write(2) failed\n");
+    }
+
+    rc = bcm_board_dev_change(PON_DPLL_I2C_ADDR);
+    BCMOS_TRACE_CHECK_RETURN(rc, rc, "bcm_board_dev_change(PON_DPLL_I2C_ADDR) failed \n");
+
+    return rc;
+}
+
+static int bcm_board_set_page_dpll(uint32_t page)
+{
+    int rcioctl;
+    maple_i2c_ioctl_param params =
+    {
+        .count = 8,
+        .addr = 1,
+        .val = page,
+    };
+
+    rcioctl = ioctl(maple_i2c_fd, MAPLE_I2C_IOCTL_OP_DEV_WRITE, &params);
+    BCMOS_TRACE_CHECK_RETURN(rcioctl, BCM_ERR_INTERNAL, "ioctl write change page failed\n");
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_board_read_dpll(uint32_t page, uint32_t reg, uint32_t *val)
+{
+    bcmos_errno rc;
+    int rcioctl;
+    maple_i2c_ioctl_param params =
+    {
+        .count = 8,
+        .addr = reg,
+        .val = 0,
+    };
+
+    rc = bcm_access_dpll();
+    bcm_board_set_page_dpll(page);
+    rcioctl = ioctl(maple_i2c_fd, MAPLE_I2C_IOCTL_OP_DEV_READ, &params);
+    BCMOS_TRACE_CHECK_RETURN(rcioctl, BCM_ERR_INTERNAL, "ioctl read failed for maple_i2c_fd\n");
+    *val = params.val;
+
+    return rc;
+}
+
+bcmos_errno bcm_board_write_dpll(uint32_t page, uint32_t reg, uint32_t val)
+{
+    bcmos_errno rc;
+    int rcioctl;
+    maple_i2c_ioctl_param params =
+    {
+        .count = 8,
+        .addr = reg,
+        .val = val,
+    };
+
+    rc = bcm_access_dpll();
+    bcm_board_set_page_dpll(page);
+    rcioctl = ioctl(maple_i2c_fd, MAPLE_I2C_IOCTL_OP_DEV_WRITE, &params);
+    BCMOS_TRACE_CHECK_RETURN(rcioctl, BCM_ERR_INTERNAL, "ioctl write failed for maple_i2c_fd\n");
+
+    return rc;
+}
+
+static bcmos_errno bcm_board_load_dpll(dpll_command *commands, int cmdlen)
+{
+    int rcioctl,i;
+    bcmos_errno rc;
+    uint8_t previous_page = 0;
+
+    maple_i2c_ioctl_param params =
+    {
+        .count = 8,
+        .addr = 0,
+        .val = 0,
+    };
+
+    rc = bcm_access_dpll();
+    for (i=0; i < cmdlen; i++)
+    {
+        if (commands[i].page != previous_page)
+        {
+            bcm_board_set_page_dpll(commands[i].page);
+            previous_page = commands[i].page;
+        }
+        params.addr = commands[i].reg;
+        params.val = commands[i].data;
+        rcioctl = ioctl(maple_i2c_fd, MAPLE_I2C_IOCTL_OP_DEV_WRITE, &params);
+        BCMOS_TRACE_CHECK_RETURN(rcioctl, BCM_ERR_INTERNAL, "ioctl write data page failed\n");
+    }
+    return rc;
+}
+bcmos_errno bcm_board_burn_pon_dpll(bcm_dpll_users dpll_dev)
+{
+    switch(dpll_dev)
+    {
+        case GPON_DPLL:
+            return bcm_board_load_dpll(gpon_dpll_table,sizeof(gpon_dpll_table)/sizeof(dpll_command));
+            break;
+        case EPON_DPLL:
+            return bcm_board_load_dpll(epon_dpll_table,sizeof(epon_dpll_table)/sizeof(dpll_command));
+            break;
+        case GPON_SYNCE:
+            return bcm_board_load_dpll(gpon_synce_dpll_table,sizeof(gpon_synce_dpll_table)/sizeof(dpll_command));
+            break;
+        default:
+            break;
+    }
+
+    return BCM_ERR_PARM;
+}
+
+bcmos_errno bcm_board_init(void)
+{
+    maple_dev_ctrl_fd = open("/dev/maple_dev_ctrl", O_RDWR);
+    BCMOS_TRACE_CHECK_RETURN(maple_dev_ctrl_fd < 0, errno, "maple_dev_ctrl_fd open failed\n");
+
+    maple_i2c_fd = open("/dev/maple_i2c", O_RDWR);
+    BCMOS_TRACE_CHECK_RETURN(maple_i2c_fd < 0, errno, "maple_i2c_fd open failed\n");
+
+#ifdef CONFIG_ONU_SIM
+    /* If the ONU sim is running, always leave all transceivers physically disabled. */
+    bcmos_errno rc = bcm_access_fpga();
+    BCMOS_CHECK_RETURN(rc, rc, rc);
+    rc = bcm_board_fpga_write(BCM_FPGA_REG_TRX_ENABLE, 0xFFFFFFFF);
+    if (rc != BCM_ERR_OK)
+        return BCM_ERR_INTERNAL;
+#endif
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_board_get_board_id(bcm_board_svk_board_id * board_id)
+{
+    bcmos_errno rc;
+    uint32_t val;
+
+    rc = bcm_access_fpga();
+    BCMOS_CHECK_RETURN(rc, rc, rc);
+
+    rc = bcm_board_fpga_read(0x1, &val);
+    BCMOS_CHECK_RETURN(rc, rc, rc);
+
+    *board_id = val & 0x7;
+    return BCM_ERR_OK;
+}
+
+void bcm_board_uninit(void)
+{
+    close(maple_i2c_fd);
+    maple_i2c_fd = 0;
+
+    close(maple_dev_ctrl_fd);
+    maple_dev_ctrl_fd = -1;
+}
+
diff --git a/bcm68620_release/release/host_customized/board/wrx/bcmolt_board.h b/bcm68620_release/release/host_customized/board/wrx/bcmolt_board.h
new file mode 100644
index 0000000..3a58eba
--- /dev/null
+++ b/bcm68620_release/release/host_customized/board/wrx/bcmolt_board.h
@@ -0,0 +1,100 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+#ifndef _BCMOLT_BOARD_H_
+#define _BCMOLT_BOARD_H_
+
+#include <bcmos_system.h>
+#include <bcmolt_model_types.h>
+
+typedef enum
+{
+    SVK_1    = 0x7, /* SVK #1 - BCM968620S: all PON flavors supported, SFP+ */
+    SVK_2_XG = 0x6, /* SVK #2 - BCM968620XG: XGPON */
+    SVK_2_XE = 0x5, /* SVK #2 - BCM968620XE: 10G EPON */
+    SVK_3    = 0x4, /* SVK #3 - BCM968620K: all PON flavors supported, XFP */
+} bcm_board_svk_board_id;
+
+bcmos_errno bcm_board_dev_change(uint32_t addr);
+bcmos_errno bcm_board_dev_write(uint32_t count, uint32_t addr, uint32_t val);
+bcmos_errno bcm_board_dev_read(uint32_t count, uint32_t addr, uint32_t *val);
+bcmos_errno bcm_board_switch_write(uint32_t val);
+bcmos_errno bcm_board_switch_read(uint32_t *val);
+bcmos_errno bcm_board_fpga_write(uint32_t addr, uint32_t val);
+bcmos_errno bcm_board_fpga_read(uint32_t addr, uint32_t *val);
+bcmos_errno bcm_board_host_event_write(uint32_t val);
+
+bcmos_errno bcm_board_fpga_version_get(uint32_t *version);
+
+/* FPGA GPIO access */
+typedef enum
+{
+    BCM_FPGA_GPIO_DIR_INPUT,
+    BCM_FPGA_GPIO_DIR_OUTPUT,
+} bcm_fpga_gpio_dir;
+
+typedef enum
+{
+    GPON_DPLL,
+    EPON_DPLL,
+    GPON_SYNCE
+} bcm_dpll_users;
+
+typedef struct
+{
+    uint8_t  page;
+    uint8_t  reg;
+    uint8_t  data;
+} dpll_command;
+
+bcmos_errno bcm_board_fpga_set_gpio_dir(bcmolt_gpio_pin gpio_pin, bcm_fpga_gpio_dir dir);
+bcmos_errno bcm_board_fpga_get_gpio_dir(bcmolt_gpio_pin gpio_pin, bcm_fpga_gpio_dir *dir);
+bcmos_errno bcm_board_fpga_write_gpio(bcmolt_gpio_pin gpio_pin, uint32_t val);
+bcmos_errno bcm_board_fpga_read_gpio(bcmolt_gpio_pin gpio_pin, uint32_t *val);
+bcmos_errno bcm_board_fpga_gen_gpio_irq(bcmolt_ext_irq ext_irq);
+
+bcmos_errno bcm_board_trx_enable(uint8_t pon, bcmos_bool is_enabled);
+bcmos_errno bcm_board_trx_present(uint8_t pon);
+bcmos_errno bcm_board_device_reset(void);
+bcmos_errno bcm_board_device_on(void);
+bcmos_errno bcm_board_device_off(void);
+bcmos_errno bcm_board_kt2_device_on(void);
+bcmos_errno bcm_board_kt2_device_off(void);
+bcmos_errno bcm_board_get_board_id(bcm_board_svk_board_id * board_id);
+bcmos_errno bcm_board_fpga_reg_read(uint32_t reg, uint32_t *val);
+bcmos_errno bcm_board_fpga_reg_write(uint32_t reg, uint32_t val);
+bcmos_errno bcm_board_pci_debug(uint32_t device, uint32_t command, int32_t start, int32_t howmany, uint32_t *dumpptr);
+bcmos_errno bcm_board_burn_pon_dpll(bcm_dpll_users dpll_dev);
+bcmos_errno bcm_board_write_dpll(uint32_t page, uint32_t reg, uint32_t val);
+bcmos_errno bcm_board_read_dpll(uint32_t page, uint32_t reg, uint32_t *val);
+
+bcmos_errno bcm_board_init(void);
+void bcm_board_uninit(void);
+
+#endif
+
diff --git a/bcm68620_release/release/host_customized/board/wrx/bcmolt_board_cli.c b/bcm68620_release/release/host_customized/board/wrx/bcmolt_board_cli.c
new file mode 100644
index 0000000..e7b59fa
--- /dev/null
+++ b/bcm68620_release/release/host_customized/board/wrx/bcmolt_board_cli.c
@@ -0,0 +1,581 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#include <bcmcli.h>
+#include "bcmolt_board.h"
+#include "bcmolt_board_cli.h"
+#include <arpa/inet.h>
+
+#define BCM_I2C_DEV_ADDR_START static bcmcli_enum_val bcm_i2c_dev_addr_table[] = {
+#define BCM_I2C_DEV_ADDR(name, desc, val) {desc, val},
+#define BCM_I2C_DEV_ADDR_END BCMCLI_ENUM_LAST};
+#include <bcmolt_i2c_devs_addr.h>
+
+static bcmos_errno bcm_board_cli_dev_change(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    uint32_t addr = bcmcli_find_named_parm(session, "dev")->value.unumber;
+
+    return bcm_board_dev_change(addr);
+}
+
+static bcmos_errno bcm_board_cli_dev_write(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    uint32_t count = bcmcli_find_named_parm(session, "width")->value.unumber;
+    uint32_t addr = bcmcli_find_named_parm(session, "addr")->value.unumber;
+    uint32_t val = bcmcli_find_named_parm(session, "val")->value.unumber;
+
+    switch (count)
+    {
+    case 8:
+    case 16:
+    case 32:
+        break;
+    default:
+        bcmcli_session_print(session, "Count can be 8|16|32\n");
+        return BCM_ERR_PARM;
+    }
+    return bcm_board_dev_write(count, addr, val);
+}
+
+static bcmos_errno bcm_board_cli_dev_read(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    uint32_t count = bcmcli_find_named_parm(session, "width")->value.unumber;
+    uint32_t addr = bcmcli_find_named_parm(session, "addr")->value.unumber;
+    uint32_t val;
+    bcmos_errno rc;
+    
+    switch (count)
+    {
+    case 8:
+    case 16:
+    case 32:
+        break;
+    default:
+        bcmcli_session_print(session, "Count can be 8|16|32\n");
+        return BCM_ERR_PARM;
+    }
+    rc = bcm_board_dev_read(count, addr, &val);
+    BCMOS_TRACE_CHECK_RETURN(rc, rc, "bcm_board_dev_read() failed\n");
+    bcmcli_session_print(session, "0x%x\n", val);
+    
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno bcm_board_cli_switch_write(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    uint32_t val = bcmcli_find_named_parm(session, "val")->value.unumber;
+
+    return bcm_board_switch_write(val);
+}
+
+static bcmos_errno bcm_board_cli_switch_read(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    uint32_t val;
+    bcmos_errno rc;
+
+    rc = bcm_board_switch_read(&val);
+    BCMOS_TRACE_CHECK_RETURN(rc, rc, "bcm_board_switch_read() failed\n");
+    bcmcli_session_print(session, "0x%x\n", val);
+    
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno bcm_board_cli_fpga_write(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    uint32_t addr = bcmcli_find_named_parm(session, "addr")->value.unumber;
+    uint32_t val = bcmcli_find_named_parm(session, "val")->value.unumber;
+    
+    return bcm_board_fpga_write(addr, val);
+}
+
+static bcmos_errno bcm_board_cli_fpga_read(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    uint32_t addr = bcmcli_find_named_parm(session, "addr")->value.unumber;
+    uint32_t val;
+    bcmos_errno rc;
+    
+    rc = bcm_board_fpga_read(addr, &val);
+    BCMOS_TRACE_CHECK_RETURN(rc, rc, "bcm_board_fpga_read() failed\n");
+    bcmcli_session_print(session, "0x%x\n", val);
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno bcm_board_cli_fpga_version(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    uint32_t version;
+    bcmos_errno rc;
+
+    rc = bcm_board_fpga_version_get(&version);
+    bcmcli_session_print(session, "0x%x\n", version);
+    return rc;
+}
+
+static bcmos_errno bcm_board_cli_fpga_set_gpio_dir(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    bcmolt_gpio_pin gpio_pin = bcmcli_find_named_parm(session, "gpio_pin")->value.unumber;
+    bcm_fpga_gpio_dir dir = bcmcli_find_named_parm(session, "dir")->value.unumber;
+
+    return bcm_board_fpga_set_gpio_dir(gpio_pin, dir);
+}
+
+static bcmos_errno bcm_board_cli_fpga_get_gpio_dir(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    bcmolt_gpio_pin gpio_pin = bcmcli_find_named_parm(session, "gpio_pin")->value.unumber;
+    bcm_fpga_gpio_dir dir;
+    bcmos_errno rc;
+  
+    rc = bcm_board_fpga_get_gpio_dir(gpio_pin, &dir);
+    bcmcli_session_print(session, "%s\n", dir == BCM_FPGA_GPIO_DIR_INPUT ? "input" : "output");
+    return rc;
+}
+
+static bcmos_errno bcm_board_cli_fpga_write_gpio(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    bcmolt_gpio_pin gpio_pin = bcmcli_find_named_parm(session, "gpio_pin")->value.unumber;
+    uint32_t val = bcmcli_find_named_parm(session, "val")->value.unumber;
+
+    return bcm_board_fpga_write_gpio(gpio_pin, val);
+}
+
+static bcmos_errno bcm_board_cli_fpga_read_gpio(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    bcmolt_gpio_pin gpio_pin = bcmcli_find_named_parm(session, "gpio_pin")->value.unumber;
+    uint32_t val;
+    bcmos_errno rc;
+  
+    rc = bcm_board_fpga_read_gpio(gpio_pin, &val);
+    bcmcli_session_print(session, "0x%x\n", val);
+    return rc;
+}
+
+static bcmos_errno bcm_board_cli_fpga_gen_gpio_irq(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    bcmolt_ext_irq ext_irq = bcmcli_find_named_parm(session, "irq")->value.unumber;
+  
+    return bcm_board_fpga_gen_gpio_irq(ext_irq);
+}
+
+static bcmos_errno bcm_board_cli_trx_enable(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    uint8_t pon_id = bcmcli_find_named_parm(session, "pon_id")->value.unumber;
+
+    return bcm_board_trx_enable(pon_id, BCMOS_TRUE);
+}
+
+static bcmos_errno bcm_board_cli_trx_disable(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    uint8_t pon_id = bcmcli_find_named_parm(session, "pon_id")->value.unumber;
+
+    return bcm_board_trx_enable(pon_id, BCMOS_FALSE);
+}
+
+static bcmos_errno bcm_board_cli_device_reset(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    return bcm_board_device_reset();
+}
+
+static bcmos_errno bcm_board_cli_device_on(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    return bcm_board_device_on();
+}
+
+static bcmos_errno bcm_board_cli_device_off(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    return bcm_board_device_off();
+}
+
+static bcmos_errno bcm_board_cli_kt2_on(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    return bcm_board_kt2_device_on();
+}
+
+static bcmos_errno bcm_board_cli_kt2_off(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    return bcm_board_kt2_device_off();
+}
+
+static bcmos_errno bcm_board_cli_fpga_reg_read(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+	uint32_t addr = bcmcli_find_named_parm(session, "addr")->value.unumber;
+	uint32_t val;
+	bcmos_errno rc;
+
+	rc = bcm_board_fpga_reg_read(addr, &val);
+	BCMOS_TRACE_CHECK_RETURN(rc, rc, "bcm_board_fpga_reg_read() failed\n");
+	bcmcli_session_print(session, "0x%x\n", val);
+
+	return BCM_ERR_OK;
+}
+
+static bcmos_errno bcm_board_cli_fpga_reg_write(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+	uint32_t addr = bcmcli_find_named_parm(session, "addr")->value.unumber;
+	uint32_t val = bcmcli_find_named_parm(session, "val")->value.unumber;
+
+    return bcm_board_fpga_reg_write(addr, val);
+}
+
+static bcmos_errno bcm_board_cli_burn_dpll(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+	bcmos_errno rc;
+
+    uint32_t dev = bcmcli_find_named_parm(session, "device")->value.unumber;
+    rc = bcm_board_burn_pon_dpll(dev);
+	BCMOS_TRACE_CHECK_RETURN(rc, rc, "bcm_board_burn_pon_dpll() failed\n");
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno bcm_board_cli_dpll_write(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    uint32_t page = bcmcli_find_named_parm(session, "page")->value.unumber;
+    uint32_t addr = bcmcli_find_named_parm(session, "addr")->value.unumber;
+    uint32_t val = bcmcli_find_named_parm(session, "val")->value.unumber;
+    
+    return bcm_board_write_dpll(page, addr, val);
+}
+
+static bcmos_errno bcm_board_cli_dpll_read(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    uint32_t page = bcmcli_find_named_parm(session, "page")->value.unumber;
+    uint32_t addr = bcmcli_find_named_parm(session, "addr")->value.unumber;
+    uint32_t val;
+    bcmos_errno rc;
+    
+    rc = bcm_board_read_dpll(page, addr, &val);
+    BCMOS_TRACE_CHECK_RETURN(rc, rc, "bcm_board_dpll_read() failed\n");
+    bcmcli_session_print(session, "0x%x\n", val);
+
+    return BCM_ERR_OK;
+}
+
+/* LUK_MAX_DATA_SIZE (2*1024) */
+#define SWITCH_RECEIVE_BUFFER_LENGTH   (2*1024)
+static int switch_socket = -1;
+static char *switch_buffer = NULL;
+static bcmos_bool switch_first_connection = BCMOS_TRUE;
+
+static void switch_response(bcmcli_session *session)
+{
+    int len;
+    char *prompt = NULL;
+
+    while (1)
+    {
+        len = read(switch_socket, switch_buffer, SWITCH_RECEIVE_BUFFER_LENGTH-1);
+        if (len > 0)
+        {
+            switch_buffer[len] = '\0';
+            bcmcli_print(session, "%s", switch_buffer);
+            prompt = strstr(switch_buffer, "BCM");
+            while (prompt)
+            {
+                len = strlen(prompt);
+                if (len >= 6)
+                {
+                    if ((prompt[3] == '>') || ((prompt[3] == '.') && (prompt[5] == '>')))
+                        return;
+                }
+                else if (len >= 4)
+                {
+                    if (prompt[3] == '>')
+                        return;
+                }
+                prompt = strstr(&prompt[2], "BCM");
+            }
+        }
+        else
+            break;
+    }
+}
+
+static bcmos_errno kt2_conn(bcmcli_session *session, const bcmcli_cmd_parm parm[],  uint16_t n_parms)
+{
+    struct sockaddr_in server;
+
+    if (switch_socket != -1)
+    {
+        bcmcli_print(session, "A connection already exists\n");
+        return BCM_ERR_ALREADY;
+    }
+
+    switch_buffer = bcmos_alloc(SWITCH_RECEIVE_BUFFER_LENGTH);
+    if (!switch_buffer)
+    {
+        bcmcli_print(session, "Failed to allocate buffer\n");
+        return BCM_ERR_NOMEM;
+    }
+    memset((void *)&server, 0, sizeof(server));
+    server.sin_family = AF_INET;
+    server.sin_port = htons(parm[0].value.number);
+    server.sin_addr.s_addr = inet_addr("127.0.0.1");
+    switch_socket = socket(AF_INET, SOCK_STREAM, 0);
+    if (switch_socket < 0)
+    {
+        bcmcli_print(session, "Can't open client socket\n");
+        goto exit;
+    }
+    if (connect(switch_socket, (struct sockaddr *)&server, sizeof(server)) == -1)
+    {
+        close(switch_socket);
+        bcmcli_print(session, "Failed to connect\n");
+        goto exit;
+    }
+    if (switch_first_connection)
+    {
+        switch_first_connection = BCMOS_FALSE;
+        switch_response(session);
+    }
+
+    return BCM_ERR_OK;
+
+exit:
+    bcmos_free(switch_buffer);
+    return BCM_ERR_COMM_FAIL;
+}
+
+static bcmos_errno kt2_disconn(bcmcli_session *session, const bcmcli_cmd_parm parm[],  uint16_t n_parms)
+{
+    if (switch_socket != -1)
+    {
+        bcmcli_print(session, "Send 'exit'\n");
+        if (write(switch_socket, "exit\r", strlen("exit\r")) < 0)
+            bcmcli_print(session, "Send 'exit' to switch failed\n");
+        fsync(switch_socket);
+    }
+    bcmos_usleep(1000);
+    if (switch_socket != -1)
+        close(switch_socket);
+    if (switch_buffer)
+        bcmos_free(switch_buffer);
+    /* set socket and buffer with initial values */
+    switch_socket = -1;
+    switch_buffer = NULL;
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno kt2_cmd(bcmcli_session *session, const bcmcli_cmd_parm parm[],  uint16_t n_parms)
+{
+    int len, sent_len;
+    char *str;
+
+    if ((switch_socket == -1) || (!switch_buffer))
+    {
+        bcmcli_print(session, "Connection or buffer do not exist\n");
+        return BCM_ERR_NORES;
+    }
+    /* switch user space application receives thru _fd_input_cb and
+       send to kernel thru _kernel_proxy_output_cb */
+    len = (int)strlen(parm[0].value.string);
+    {
+        /* dirty - just to avoid error : cast discards '__attribute__((const))' qualifier if useing strcat */
+        unsigned long strp = (unsigned long)&parm[0].value.string;
+        str = *(char **)strp;
+    }
+    str[len++] = '\r';
+    str[len] = '\0';
+    sent_len = 0;
+    do
+    {
+        sent_len = write(switch_socket, str + sent_len , len - sent_len);
+        if (sent_len == -1 || ((sent_len == 0) && errno))
+        {
+            bcmcli_print(session, "Send command to switch failed (write to socket error: %d)\n", errno);
+            return BCM_ERR_COMM_FAIL;
+        }
+        fsync(switch_socket);
+    } while(len - sent_len);
+    /* switch kernel send thru _kernel_proxy_input_cb
+       to switch user space application thru _fd_outout_cb */
+    switch_response(session);
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_board_cli_init(bcmcli_entry *top_dir)
+{
+    bcmcli_entry *board_dir, *i2c_dir;
+    bcmos_errno rc;
+    bcm_board_svk_board_id board_id;
+    bcmcli_entry *dir;
+    static bcmcli_enum_val fpga_gpio_pin_table[] =
+    {
+        {"pin4", BCMOLT_GPIO_PIN_PIN4},
+        {"pin5", BCMOLT_GPIO_PIN_PIN5},
+        {"pin6", BCMOLT_GPIO_PIN_PIN6},
+        {"pin7", BCMOLT_GPIO_PIN_PIN7},
+        {"pin8", BCMOLT_GPIO_PIN_PIN8},
+        {"pin9", BCMOLT_GPIO_PIN_PIN9},
+        {"pin10", BCMOLT_GPIO_PIN_PIN10},
+        {"pin11", BCMOLT_GPIO_PIN_PIN11},
+        {"pin12", BCMOLT_GPIO_PIN_PIN12},
+        {"pin13", BCMOLT_GPIO_PIN_PIN13},
+        {"pin14", BCMOLT_GPIO_PIN_PIN14},
+        {"pin15", BCMOLT_GPIO_PIN_PIN15},
+        {"pin16", BCMOLT_GPIO_PIN_PIN16},
+        {"pin17", BCMOLT_GPIO_PIN_PIN17},
+        {"pin18", BCMOLT_GPIO_PIN_PIN18},
+        {"pin19", BCMOLT_GPIO_PIN_PIN19},
+        {"pin20", BCMOLT_GPIO_PIN_PIN20},
+        {"pin21", BCMOLT_GPIO_PIN_PIN21},
+        {"pin22", BCMOLT_GPIO_PIN_PIN22},
+        {"pin23", BCMOLT_GPIO_PIN_PIN23},
+        {"pin24", BCMOLT_GPIO_PIN_PIN24},
+        {"pin25", BCMOLT_GPIO_PIN_PIN25},
+        {"pin26", BCMOLT_GPIO_PIN_PIN26},
+        {"pin27", BCMOLT_GPIO_PIN_PIN27},
+        {"pin28", BCMOLT_GPIO_PIN_PIN28},
+        {"pin29", BCMOLT_GPIO_PIN_PIN29},
+        {"pin30", BCMOLT_GPIO_PIN_PIN30},
+        {"pin31", BCMOLT_GPIO_PIN_PIN31},
+        BCMCLI_ENUM_LAST
+    };
+    static bcmcli_enum_val fpga_ext_irq_table[] =
+    {
+        {"ext_irq0", BCMOLT_EXT_IRQ_EXT_IRQ0},
+        {"ext_irq1", BCMOLT_EXT_IRQ_EXT_IRQ1},
+        {"ext_irq2", BCMOLT_EXT_IRQ_EXT_IRQ2},
+        {"ext_irq3", BCMOLT_EXT_IRQ_EXT_IRQ3},
+        {"ext_irq4", BCMOLT_EXT_IRQ_EXT_IRQ4},
+        {"ext_irq5", BCMOLT_EXT_IRQ_EXT_IRQ5},
+        BCMCLI_ENUM_LAST
+    };
+
+    static bcmcli_enum_val fpga_gpio_dir_table[] =
+    {
+        {"input", BCM_FPGA_GPIO_DIR_INPUT},
+        {"output", BCM_FPGA_GPIO_DIR_OUTPUT},
+        BCMCLI_ENUM_LAST
+    };
+
+    static bcmcli_enum_val dpll_devices[] = {
+        { .name="gpon", .val=GPON_DPLL},
+        { .name="epon", .val=EPON_DPLL},
+        { .name="synce", .val=GPON_SYNCE},
+        BCMCLI_ENUM_LAST
+    };
+    
+    board_dir = bcmcli_dir_add(top_dir, "board", "Board", BCMCLI_ACCESS_GUEST, NULL);
+    BCMOS_CHECK_RETURN_ERROR(!board_dir, BCM_ERR_INTERNAL);
+
+    i2c_dir = bcmcli_dir_add(board_dir, "i2c", "i2c", BCMCLI_ACCESS_GUEST, NULL);
+    BCMOS_CHECK_RETURN_ERROR(!i2c_dir, BCM_ERR_INTERNAL);
+
+    BCMCLI_MAKE_CMD(i2c_dir, "dev_change", "Change current device", bcm_board_cli_dev_change,
+        BCMCLI_MAKE_PARM_ENUM("dev", "device", bcm_i2c_dev_addr_table, 0));
+
+    BCMCLI_MAKE_CMD(i2c_dir, "dev_write", "Write to current i2c device", bcm_board_cli_dev_write,
+        BCMCLI_MAKE_PARM("width", "Width of register in bits (8|16|32)", BCMCLI_PARM_NUMBER, 0),
+        BCMCLI_MAKE_PARM("addr", "address", BCMCLI_PARM_HEX, 0),
+        BCMCLI_MAKE_PARM("val", "value", BCMCLI_PARM_HEX, 0));
+
+    BCMCLI_MAKE_CMD(i2c_dir, "dev_read", "Read from current i2c device", bcm_board_cli_dev_read,
+        BCMCLI_MAKE_PARM("width", "Width of register in bits (8|16|32)", BCMCLI_PARM_NUMBER, 0),
+        BCMCLI_MAKE_PARM("addr", "address", BCMCLI_PARM_HEX, 0));
+
+    BCMCLI_MAKE_CMD(i2c_dir, "switch_write", "Write to switch", bcm_board_cli_switch_write,
+        BCMCLI_MAKE_PARM_RANGE("val", "value", BCMCLI_PARM_HEX, 0, 0, UCHAR_MAX));
+
+    BCMCLI_MAKE_CMD_NOPARM(i2c_dir, "switch_read", "Read from switch", bcm_board_cli_switch_read);
+
+    BCMCLI_MAKE_CMD(i2c_dir, "fpga_write", "Write to FPGA", bcm_board_cli_fpga_write,
+        BCMCLI_MAKE_PARM("addr", "address", BCMCLI_PARM_HEX, 0),
+        BCMCLI_MAKE_PARM("val", "value", BCMCLI_PARM_HEX, 0));
+
+    BCMCLI_MAKE_CMD(i2c_dir, "fpga_read", "Read from FPGA", bcm_board_cli_fpga_read,
+        BCMCLI_MAKE_PARM("addr", "address", BCMCLI_PARM_HEX, 0));
+
+    BCMCLI_MAKE_CMD_NOPARM(board_dir, "fpga_version", "FPGA version", bcm_board_cli_fpga_version);
+    
+    BCMCLI_MAKE_CMD(board_dir, "fpga_set_gpio_dir", "Set GPIO direction", bcm_board_cli_fpga_set_gpio_dir,
+        BCMCLI_MAKE_PARM_ENUM("gpio_pin", "GPIO pin", fpga_gpio_pin_table, 0),
+        BCMCLI_MAKE_PARM_ENUM("dir", "Direction", fpga_gpio_dir_table, 0));
+    BCMCLI_MAKE_CMD(board_dir, "fpga_get_gpio_dir", "Get GPIO direction", bcm_board_cli_fpga_get_gpio_dir,
+        BCMCLI_MAKE_PARM_ENUM("gpio_pin", "GPIO pin", fpga_gpio_pin_table, 0));
+    BCMCLI_MAKE_CMD(board_dir, "fpga_write_gpio", "Write to GPIO pin", bcm_board_cli_fpga_write_gpio,
+        BCMCLI_MAKE_PARM_ENUM("gpio_pin", "GPIO pin", fpga_gpio_pin_table, 0),
+        BCMCLI_MAKE_PARM("val", "Value", BCMCLI_PARM_HEX, 0));
+    BCMCLI_MAKE_CMD(board_dir, "fpga_read_gpio", "Read from GPIO pin", bcm_board_cli_fpga_read_gpio,
+        BCMCLI_MAKE_PARM_ENUM("gpio_pin", "GPIO pin", fpga_gpio_pin_table, 0));
+    BCMCLI_MAKE_CMD(board_dir, "fpga_gen_irq", "Generate GPIO IRQ", bcm_board_cli_fpga_gen_gpio_irq,
+        BCMCLI_MAKE_PARM_ENUM("irq", "IRQ", fpga_ext_irq_table, 0));
+
+    BCMCLI_MAKE_CMD(board_dir, "trx_enable", "Enable transceiver", bcm_board_cli_trx_enable,
+        BCMCLI_MAKE_PARM("pon_id", "pon_id", BCMCLI_PARM_UDECIMAL, 0));
+
+    BCMCLI_MAKE_CMD(board_dir, "trx_disable", "Disable transceiver", bcm_board_cli_trx_disable,
+        BCMCLI_MAKE_PARM("pon_id", "pon_id", BCMCLI_PARM_UDECIMAL, 0));
+
+    BCMCLI_MAKE_CMD_NOPARM(board_dir, "device_reset", "Reset the device - clears the reset bit and then set it on", bcm_board_cli_device_reset);
+
+    BCMCLI_MAKE_CMD_NOPARM(board_dir, "device_on", "Keeps the device with reset bit on", bcm_board_cli_device_on);
+
+    BCMCLI_MAKE_CMD_NOPARM(board_dir, "device_off", "Keeps the device with reset bit off", bcm_board_cli_device_off);
+
+    BCMCLI_MAKE_CMD(board_dir, "fpga_reg_read", "Read data from an FPGA register", bcm_board_cli_fpga_reg_read,
+    	BCMCLI_MAKE_PARM("addr", "address", BCMCLI_PARM_HEX, 0));
+
+    BCMCLI_MAKE_CMD(board_dir, "fpga_reg_write", "Write data to an FPGA register", bcm_board_cli_fpga_reg_write,
+        BCMCLI_MAKE_PARM("addr", "address", BCMCLI_PARM_HEX, 0),
+        BCMCLI_MAKE_PARM("val", "value", BCMCLI_PARM_HEX, 0));
+
+    BCMCLI_MAKE_CMD(board_dir, "dpll", "Burn DPLL", bcm_board_cli_burn_dpll,
+        BCMCLI_MAKE_PARM_ENUM("device", "Device", dpll_devices, 0));
+    
+    BCMCLI_MAKE_CMD(board_dir, "dpll_write", "Write to DPLL", bcm_board_cli_dpll_write,
+        BCMCLI_MAKE_PARM("page", "page", BCMCLI_PARM_HEX, 0),
+        BCMCLI_MAKE_PARM("addr", "address", BCMCLI_PARM_HEX, 0),
+        BCMCLI_MAKE_PARM("val", "value", BCMCLI_PARM_HEX, 0));
+
+    BCMCLI_MAKE_CMD(board_dir, "dpll_read", "Read from DPLL", bcm_board_cli_dpll_read,
+        BCMCLI_MAKE_PARM("page", "page", BCMCLI_PARM_HEX, 0),
+        BCMCLI_MAKE_PARM("addr", "address", BCMCLI_PARM_HEX, 0));
+
+    rc = bcm_board_get_board_id(&board_id);
+    BCMOS_CHECK_RETURN(rc, rc, rc);
+    /* check if the board is SVK#3 */
+    if (board_id == SVK_3)
+    {
+        BCMCLI_MAKE_CMD_NOPARM(board_dir, "kt2_on", "Keeps the Katana2 with reset bit on", bcm_board_cli_kt2_on);
+
+        BCMCLI_MAKE_CMD_NOPARM(board_dir, "kt2_off", "Keeps the Katana2 with reset bit off", bcm_board_cli_kt2_off);
+
+        dir = bcmcli_dir_add(board_dir, "switch", "Switch", BCMCLI_ACCESS_ADMIN, NULL);
+        BCMOS_CHECK_RETURN_ERROR(!dir, BCM_ERR_NOMEM);
+        BCMCLI_MAKE_CMD(dir, "conn", "connect to switch daemon", kt2_conn,
+            BCMCLI_MAKE_PARM("port", "connection port on localhost", BCMCLI_PARM_NUMBER, 0));
+        BCMCLI_MAKE_CMD_NOPARM(dir, "disconn", "disconnect from switch daemon", kt2_disconn);
+        BCMCLI_MAKE_CMD(dir, "cmd", "command to switch - string between quotes", kt2_cmd,
+            BCMCLI_MAKE_PARM("", "", BCMCLI_PARM_STRING, 0));
+    }
+    return BCM_ERR_OK;
+}
+
diff --git a/bcm68620_release/release/host_customized/board/wrx/bcmolt_board_cli.h b/bcm68620_release/release/host_customized/board/wrx/bcmolt_board_cli.h
new file mode 100644
index 0000000..91a904a
--- /dev/null
+++ b/bcm68620_release/release/host_customized/board/wrx/bcmolt_board_cli.h
@@ -0,0 +1,39 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef _BCMOLT_BOARD_CLI_H_
+#define _BCMOLT_BOARD_CLI_H_
+
+#include <bcmos_system.h>
+#include <bcmcli.h>
+
+bcmos_errno bcm_board_cli_init(bcmcli_entry *top_dir);
+
+#endif
+
diff --git a/bcm68620_release/release/host_customized/board/wrx/bcmolt_dpll_table.h b/bcm68620_release/release/host_customized/board/wrx/bcmolt_dpll_table.h
new file mode 100755
index 0000000..a7d610e
--- /dev/null
+++ b/bcm68620_release/release/host_customized/board/wrx/bcmolt_dpll_table.h
@@ -0,0 +1,1144 @@
+#ifndef _BCMOLT_DPLL_TABLE_H_
+#define _BCMOLT_DPLL_TABLE_H_
+
+/* auto generated loading files */
+
+static dpll_command gpon_dpll_table[] =
+{
+    {0x0B,0x24,0xD8},
+    {0x0B,0x25,0x00},
+    {0x00,0x0B,0x68},
+    {0x00,0x16,0x02},
+    {0x00,0x17,0x1C},
+    {0x00,0x18,0xEE},
+    {0x00,0x19,0xDD},
+    {0x00,0x1A,0xDF},
+    {0x00,0x2B,0x02},
+    {0x00,0x2C,0x01},
+    {0x00,0x2D,0x01},
+    {0x00,0x2E,0x6F},
+    {0x00,0x2F,0x00},
+    {0x00,0x30,0x00},
+    {0x00,0x31,0x00},
+    {0x00,0x32,0x00},
+    {0x00,0x33,0x00},
+    {0x00,0x34,0x00},
+    {0x00,0x35,0x00},
+    {0x00,0x36,0x6F},
+    {0x00,0x37,0x00},
+    {0x00,0x38,0x00},
+    {0x00,0x39,0x00},
+    {0x00,0x3A,0x00},
+    {0x00,0x3B,0x00},
+    {0x00,0x3C,0x00},
+    {0x00,0x3D,0x00},
+    {0x00,0x3F,0x11},
+    {0x00,0x40,0x04},
+    {0x00,0x41,0x0E},
+    {0x00,0x42,0x00},
+    {0x00,0x43,0x00},
+    {0x00,0x44,0x00},
+    {0x00,0x45,0x0C},
+    {0x00,0x46,0x32},
+    {0x00,0x47,0x00},
+    {0x00,0x48,0x00},
+    {0x00,0x49,0x00},
+    {0x00,0x4A,0x32},
+    {0x00,0x4B,0x00},
+    {0x00,0x4C,0x00},
+    {0x00,0x4D,0x00},
+    {0x00,0x4E,0x05},
+    {0x00,0x4F,0x00},
+    {0x00,0x51,0x03},
+    {0x00,0x52,0x00},
+    {0x00,0x53,0x00},
+    {0x00,0x54,0x00},
+    {0x00,0x55,0x03},
+    {0x00,0x56,0x00},
+    {0x00,0x57,0x00},
+    {0x00,0x58,0x00},
+    {0x00,0x59,0x03},
+    {0x00,0x5A,0x55},
+    {0x00,0x5B,0x55},
+    {0x00,0x5C,0xD0},
+    {0x00,0x5D,0x00},
+    {0x00,0x5E,0x00},
+    {0x00,0x5F,0x00},
+    {0x00,0x60,0x00},
+    {0x00,0x61,0x00},
+    {0x00,0x62,0x00},
+    {0x00,0x63,0x00},
+    {0x00,0x64,0x00},
+    {0x00,0x65,0x00},
+    {0x00,0x66,0x00},
+    {0x00,0x67,0x00},
+    {0x00,0x68,0x00},
+    {0x00,0x69,0x00},
+    {0x00,0x92,0x00},
+    {0x00,0x93,0x00},
+    {0x00,0x95,0x00},
+    {0x00,0x96,0x00},
+    {0x00,0x98,0x00},
+    {0x00,0x9A,0x02},
+    {0x00,0x9B,0x10},
+    {0x00,0x9D,0x00},
+    {0x00,0x9E,0x20},
+    {0x00,0xA0,0x00},
+    {0x00,0xA2,0x02},
+    {0x00,0xA8,0xC9},
+    {0x00,0xA9,0x62},
+    {0x00,0xAA,0x10},
+    {0x00,0xAB,0x00},
+    {0x00,0xAC,0x00},
+    {0x01,0x02,0x01},
+    {0x01,0x08,0x06},
+    {0x01,0x09,0x09},
+    {0x01,0x0A,0x6B},
+    {0x01,0x0B,0x00},
+    {0x01,0x0D,0x01},
+    {0x01,0x0E,0x09},
+    {0x01,0x0F,0x3B},
+    {0x01,0x10,0x00},
+    {0x01,0x12,0x06},
+    {0x01,0x13,0x09},
+    {0x01,0x14,0x6B},
+    {0x01,0x15,0x00},
+    {0x01,0x17,0x01},
+    {0x01,0x18,0x09},
+    {0x01,0x19,0x3B},
+    {0x01,0x1A,0x00},
+    {0x01,0x1C,0x06},
+    {0x01,0x1D,0x09},
+    {0x01,0x1E,0x6B},
+    {0x01,0x1F,0x00},
+    {0x01,0x21,0x01},
+    {0x01,0x22,0x09},
+    {0x01,0x23,0x3B},
+    {0x01,0x24,0x00},
+    {0x01,0x26,0x06},
+    {0x01,0x27,0x09},
+    {0x01,0x28,0x6B},
+    {0x01,0x29,0x00},
+    {0x01,0x2B,0x01},
+    {0x01,0x2C,0x09},
+    {0x01,0x2D,0x3B},
+    {0x01,0x2E,0x00},
+    {0x01,0x30,0x06},
+    {0x01,0x31,0x09},
+    {0x01,0x32,0x6B},
+    {0x01,0x33,0x00},
+    {0x01,0x3A,0x06},
+    {0x01,0x3B,0xCC},
+    {0x01,0x3C,0x00},
+    {0x01,0x3D,0x00},
+    {0x01,0x3F,0x00},
+    {0x01,0x40,0x00},
+    {0x01,0x41,0x40},
+    {0x01,0x42,0xFF},
+    {0x02,0x02,0x00},
+    {0x02,0x03,0x00},
+    {0x02,0x04,0x00},
+    {0x02,0x05,0x00},
+    {0x02,0x06,0x00},
+    {0x02,0x08,0x4F},
+    {0x02,0x09,0x00},
+    {0x02,0x0A,0x00},
+    {0x02,0x0B,0x00},
+    {0x02,0x0C,0x00},
+    {0x02,0x0D,0x00},
+    {0x02,0x0E,0x01},
+    {0x02,0x0F,0x00},
+    {0x02,0x10,0x00},
+    {0x02,0x11,0x00},
+    {0x02,0x12,0x00},
+    {0x02,0x13,0x00},
+    {0x02,0x14,0x00},
+    {0x02,0x15,0x00},
+    {0x02,0x16,0x00},
+    {0x02,0x17,0x00},
+    {0x02,0x18,0x00},
+    {0x02,0x19,0x00},
+    {0x02,0x1A,0x00},
+    {0x02,0x1B,0x00},
+    {0x02,0x1C,0x00},
+    {0x02,0x1D,0x00},
+    {0x02,0x1E,0x00},
+    {0x02,0x1F,0x00},
+    {0x02,0x20,0x00},
+    {0x02,0x21,0x00},
+    {0x02,0x22,0x00},
+    {0x02,0x23,0x00},
+    {0x02,0x24,0x00},
+    {0x02,0x25,0x00},
+    {0x02,0x26,0x00},
+    {0x02,0x27,0x00},
+    {0x02,0x28,0x00},
+    {0x02,0x29,0x00},
+    {0x02,0x2A,0x00},
+    {0x02,0x2B,0x00},
+    {0x02,0x2C,0x00},
+    {0x02,0x2D,0x00},
+    {0x02,0x2E,0x00},
+    {0x02,0x2F,0x00},
+    {0x02,0x31,0x03},
+    {0x02,0x32,0x03},
+    {0x02,0x33,0x03},
+    {0x02,0x34,0x03},
+    {0x02,0x35,0x00},
+    {0x02,0x36,0x00},
+    {0x02,0x37,0x00},
+    {0x02,0x38,0xC0},
+    {0x02,0x39,0xDE},
+    {0x02,0x3A,0x00},
+    {0x02,0x3B,0x00},
+    {0x02,0x3C,0x00},
+    {0x02,0x3D,0x00},
+    {0x02,0x3E,0xC8},
+    {0x02,0x4A,0x00},
+    {0x02,0x4B,0x00},
+    {0x02,0x4C,0x00},
+    {0x02,0x4D,0x00},
+    {0x02,0x4E,0x00},
+    {0x02,0x4F,0x00},
+    {0x02,0x50,0x00},
+    {0x02,0x51,0x00},
+    {0x02,0x52,0x00},
+    {0x02,0x53,0x00},
+    {0x02,0x54,0x00},
+    {0x02,0x55,0x00},
+    {0x02,0x56,0x00},
+    {0x02,0x57,0x00},
+    {0x02,0x58,0x00},
+    {0x02,0x59,0x00},
+    {0x02,0x5A,0x00},
+    {0x02,0x5B,0x00},
+    {0x02,0x5C,0x00},
+    {0x02,0x5D,0x00},
+    {0x02,0x5E,0x00},
+    {0x02,0x5F,0x00},
+    {0x02,0x60,0x00},
+    {0x02,0x61,0x00},
+    {0x02,0x62,0x00},
+    {0x02,0x63,0x00},
+    {0x02,0x64,0x00},
+    {0x02,0x68,0x00},
+    {0x02,0x69,0x00},
+    {0x02,0x6A,0x00},
+    {0x02,0x6B,0x47},
+    {0x02,0x6C,0x50},
+    {0x02,0x6D,0x4F},
+    {0x02,0x6E,0x4E},
+    {0x02,0x6F,0x5F},
+    {0x02,0x70,0x43},
+    {0x02,0x71,0x4C},
+    {0x02,0x72,0x4B},
+    {0x03,0x02,0x00},
+    {0x03,0x03,0x00},
+    {0x03,0x04,0x00},
+    {0x03,0x05,0x00},
+    {0x03,0x06,0x16},
+    {0x03,0x07,0x00},
+    {0x03,0x08,0x00},
+    {0x03,0x09,0x00},
+    {0x03,0x0A,0x00},
+    {0x03,0x0B,0x80},
+    {0x03,0x0D,0x00},
+    {0x03,0x0E,0x00},
+    {0x03,0x0F,0x00},
+    {0x03,0x10,0x00},
+    {0x03,0x11,0x00},
+    {0x03,0x12,0x00},
+    {0x03,0x13,0x00},
+    {0x03,0x14,0x00},
+    {0x03,0x15,0x00},
+    {0x03,0x16,0x00},
+    {0x03,0x18,0x00},
+    {0x03,0x19,0x00},
+    {0x03,0x1A,0x00},
+    {0x03,0x1B,0x00},
+    {0x03,0x1C,0x00},
+    {0x03,0x1D,0x00},
+    {0x03,0x1E,0x00},
+    {0x03,0x1F,0x00},
+    {0x03,0x20,0x00},
+    {0x03,0x21,0x00},
+    {0x03,0x23,0x00},
+    {0x03,0x24,0x00},
+    {0x03,0x25,0x00},
+    {0x03,0x26,0x00},
+    {0x03,0x27,0x00},
+    {0x03,0x28,0x00},
+    {0x03,0x29,0x00},
+    {0x03,0x2A,0x00},
+    {0x03,0x2B,0x00},
+    {0x03,0x2C,0x00},
+    {0x03,0x2E,0x00},
+    {0x03,0x2F,0x00},
+    {0x03,0x30,0x00},
+    {0x03,0x31,0x00},
+    {0x03,0x32,0x00},
+    {0x03,0x33,0x00},
+    {0x03,0x34,0x00},
+    {0x03,0x35,0x00},
+    {0x03,0x36,0x00},
+    {0x03,0x37,0x00},
+    {0x03,0x39,0x1F},
+    {0x03,0x3B,0x00},
+    {0x03,0x3C,0x00},
+    {0x03,0x3D,0x00},
+    {0x03,0x3E,0x00},
+    {0x03,0x3F,0x00},
+    {0x03,0x40,0x00},
+    {0x03,0x41,0x00},
+    {0x03,0x42,0x00},
+    {0x03,0x43,0x00},
+    {0x03,0x44,0x00},
+    {0x03,0x45,0x00},
+    {0x03,0x46,0x00},
+    {0x03,0x47,0x00},
+    {0x03,0x48,0x00},
+    {0x03,0x49,0x00},
+    {0x03,0x4A,0x00},
+    {0x03,0x4B,0x00},
+    {0x03,0x4C,0x00},
+    {0x03,0x4D,0x00},
+    {0x03,0x4E,0x00},
+    {0x03,0x4F,0x00},
+    {0x03,0x50,0x00},
+    {0x03,0x51,0x00},
+    {0x03,0x52,0x00},
+    {0x03,0x53,0x00},
+    {0x03,0x54,0x00},
+    {0x03,0x55,0x00},
+    {0x03,0x56,0x00},
+    {0x03,0x57,0x00},
+    {0x03,0x58,0x00},
+    {0x03,0x59,0x00},
+    {0x03,0x5A,0x00},
+    {0x03,0x5B,0x00},
+    {0x03,0x5C,0x00},
+    {0x03,0x5D,0x00},
+    {0x03,0x5E,0x00},
+    {0x03,0x5F,0x00},
+    {0x03,0x60,0x00},
+    {0x03,0x61,0x00},
+    {0x03,0x62,0x00},
+    {0x04,0x87,0x00},
+    {0x05,0x02,0x01},
+    {0x05,0x08,0x14},
+    {0x05,0x09,0x22},
+    {0x05,0x0A,0x0D},
+    {0x05,0x0B,0x0C},
+    {0x05,0x0C,0x01},
+    {0x05,0x0D,0x3F},
+    {0x05,0x0E,0x15},
+    {0x05,0x0F,0x26},
+    {0x05,0x10,0x0C},
+    {0x05,0x11,0x0B},
+    {0x05,0x12,0x01},
+    {0x05,0x13,0x3F},
+    {0x05,0x15,0x00},
+    {0x05,0x16,0x00},
+    {0x05,0x17,0x00},
+    {0x05,0x18,0xDF},
+    {0x05,0x19,0x38},
+    {0x05,0x1A,0x03},
+    {0x05,0x1B,0x00},
+    {0x05,0x1C,0x00},
+    {0x05,0x1D,0x80},
+    {0x05,0x1E,0x96},
+    {0x05,0x1F,0x98},
+    {0x05,0x21,0x33},
+    {0x05,0x2A,0x01},
+    {0x05,0x2B,0x01},
+    {0x05,0x2C,0x0F},
+    {0x05,0x2D,0x03},
+    {0x05,0x2E,0x19},
+    {0x05,0x2F,0x19},
+    {0x05,0x31,0x00},
+    {0x05,0x32,0x4B},
+    {0x05,0x33,0x03},
+    {0x05,0x34,0x00},
+    {0x05,0x36,0x0C},
+    {0x05,0x37,0x00},
+    {0x05,0x38,0x01},
+    {0x05,0x39,0x00},
+    {0x09,0x0E,0x02},
+    {0x09,0x43,0x01},
+    {0x09,0x49,0x01},
+    {0x09,0x4A,0x01},
+    {0x0A,0x02,0x00},
+    {0x0A,0x03,0x01},
+    {0x0A,0x04,0x01},
+    {0x0A,0x05,0x01},
+    {0x0B,0x44,0x0F},
+    {0x0B,0x46,0x00},
+    {0x0B,0x47,0x00},
+    {0x0B,0x48,0x0E},
+    {0x0B,0x4A,0x1E},
+    {0x05,0x14,0x01},
+    {0x00,0x1C,0x01},
+    {0x0B,0x24,0xDB},
+    {0x0B,0x25,0x02}
+};
+
+static dpll_command epon_dpll_table[] =
+{
+    {0x0B,0x24,0xD8},
+    {0x0B,0x25,0x00},
+    {0x00,0x0B,0x68},
+    {0x00,0x16,0x02},
+    {0x00,0x17,0x1C},
+    {0x00,0x18,0xEE},
+    {0x00,0x19,0xDD},
+    {0x00,0x1A,0xDF},
+    {0x00,0x2B,0x02},
+    {0x00,0x2C,0x01},
+    {0x00,0x2D,0x01},
+    {0x00,0x2E,0x70},
+    {0x00,0x2F,0x00},
+    {0x00,0x30,0x00},
+    {0x00,0x31,0x00},
+    {0x00,0x32,0x00},
+    {0x00,0x33,0x00},
+    {0x00,0x34,0x00},
+    {0x00,0x35,0x00},
+    {0x00,0x36,0x70},
+    {0x00,0x37,0x00},
+    {0x00,0x38,0x00},
+    {0x00,0x39,0x00},
+    {0x00,0x3A,0x00},
+    {0x00,0x3B,0x00},
+    {0x00,0x3C,0x00},
+    {0x00,0x3D,0x00},
+    {0x00,0x3F,0x11},
+    {0x00,0x40,0x04},
+    {0x00,0x41,0x0E},
+    {0x00,0x42,0x00},
+    {0x00,0x43,0x00},
+    {0x00,0x44,0x00},
+    {0x00,0x45,0x0C},
+    {0x00,0x46,0x32},
+    {0x00,0x47,0x00},
+    {0x00,0x48,0x00},
+    {0x00,0x49,0x00},
+    {0x00,0x4A,0x32},
+    {0x00,0x4B,0x00},
+    {0x00,0x4C,0x00},
+    {0x00,0x4D,0x00},
+    {0x00,0x4E,0x05},
+    {0x00,0x4F,0x00},
+    {0x00,0x51,0x03},
+    {0x00,0x52,0x00},
+    {0x00,0x53,0x00},
+    {0x00,0x54,0x00},
+    {0x00,0x55,0x03},
+    {0x00,0x56,0x00},
+    {0x00,0x57,0x00},
+    {0x00,0x58,0x00},
+    {0x00,0x59,0x03},
+    {0x00,0x5A,0x55},
+    {0x00,0x5B,0x55},
+    {0x00,0x5C,0xD0},
+    {0x00,0x5D,0x00},
+    {0x00,0x5E,0x00},
+    {0x00,0x5F,0x00},
+    {0x00,0x60,0x00},
+    {0x00,0x61,0x00},
+    {0x00,0x62,0x00},
+    {0x00,0x63,0x00},
+    {0x00,0x64,0x00},
+    {0x00,0x65,0x00},
+    {0x00,0x66,0x00},
+    {0x00,0x67,0x00},
+    {0x00,0x68,0x00},
+    {0x00,0x69,0x00},
+    {0x00,0x92,0x00},
+    {0x00,0x93,0x00},
+    {0x00,0x95,0x00},
+    {0x00,0x96,0x00},
+    {0x00,0x98,0x00},
+    {0x00,0x9A,0x02},
+    {0x00,0x9B,0x10},
+    {0x00,0x9D,0x00},
+    {0x00,0x9E,0x20},
+    {0x00,0xA0,0x00},
+    {0x00,0xA2,0x02},
+    {0x00,0xA8,0x1E},
+    {0x00,0xA9,0x94},
+    {0x00,0xAA,0x10},
+    {0x00,0xAB,0x00},
+    {0x00,0xAC,0x00},
+    {0x01,0x02,0x01},
+    {0x01,0x08,0x06},
+    {0x01,0x09,0x09},
+    {0x01,0x0A,0x6B},
+    {0x01,0x0B,0x00},
+    {0x01,0x0D,0x01},
+    {0x01,0x0E,0x09},
+    {0x01,0x0F,0x3B},
+    {0x01,0x10,0x00},
+    {0x01,0x12,0x06},
+    {0x01,0x13,0x09},
+    {0x01,0x14,0x6B},
+    {0x01,0x15,0x00},
+    {0x01,0x17,0x01},
+    {0x01,0x18,0x09},
+    {0x01,0x19,0x3B},
+    {0x01,0x1A,0x00},
+    {0x01,0x1C,0x06},
+    {0x01,0x1D,0x09},
+    {0x01,0x1E,0x6B},
+    {0x01,0x1F,0x00},
+    {0x01,0x21,0x01},
+    {0x01,0x22,0x09},
+    {0x01,0x23,0x3B},
+    {0x01,0x24,0x00},
+    {0x01,0x26,0x06},
+    {0x01,0x27,0x09},
+    {0x01,0x28,0x6B},
+    {0x01,0x29,0x00},
+    {0x01,0x2B,0x01},
+    {0x01,0x2C,0x09},
+    {0x01,0x2D,0x3B},
+    {0x01,0x2E,0x00},
+    {0x01,0x30,0x06},
+    {0x01,0x31,0x09},
+    {0x01,0x32,0x6B},
+    {0x01,0x33,0x00},
+    {0x01,0x3A,0x06},
+    {0x01,0x3B,0xCC},
+    {0x01,0x3C,0x00},
+    {0x01,0x3D,0x00},
+    {0x01,0x3F,0x00},
+    {0x01,0x40,0x00},
+    {0x01,0x41,0x40},
+    {0x01,0x42,0xFF},
+    {0x02,0x02,0x00},
+    {0x02,0x03,0x00},
+    {0x02,0x04,0x00},
+    {0x02,0x05,0x00},
+    {0x02,0x06,0x00},
+    {0x02,0x08,0x4F},
+    {0x02,0x09,0x00},
+    {0x02,0x0A,0x00},
+    {0x02,0x0B,0x00},
+    {0x02,0x0C,0x00},
+    {0x02,0x0D,0x00},
+    {0x02,0x0E,0x01},
+    {0x02,0x0F,0x00},
+    {0x02,0x10,0x00},
+    {0x02,0x11,0x00},
+    {0x02,0x12,0x00},
+    {0x02,0x13,0x00},
+    {0x02,0x14,0x00},
+    {0x02,0x15,0x00},
+    {0x02,0x16,0x00},
+    {0x02,0x17,0x00},
+    {0x02,0x18,0x00},
+    {0x02,0x19,0x00},
+    {0x02,0x1A,0x00},
+    {0x02,0x1B,0x00},
+    {0x02,0x1C,0x00},
+    {0x02,0x1D,0x00},
+    {0x02,0x1E,0x00},
+    {0x02,0x1F,0x00},
+    {0x02,0x20,0x00},
+    {0x02,0x21,0x00},
+    {0x02,0x22,0x00},
+    {0x02,0x23,0x00},
+    {0x02,0x24,0x00},
+    {0x02,0x25,0x00},
+    {0x02,0x26,0x00},
+    {0x02,0x27,0x00},
+    {0x02,0x28,0x00},
+    {0x02,0x29,0x00},
+    {0x02,0x2A,0x00},
+    {0x02,0x2B,0x00},
+    {0x02,0x2C,0x00},
+    {0x02,0x2D,0x00},
+    {0x02,0x2E,0x00},
+    {0x02,0x2F,0x00},
+    {0x02,0x31,0x03},
+    {0x02,0x32,0x03},
+    {0x02,0x33,0x03},
+    {0x02,0x34,0x03},
+    {0x02,0x35,0x00},
+    {0x02,0x36,0x00},
+    {0x02,0x37,0x00},
+    {0x02,0x38,0xD8},
+    {0x02,0x39,0xD6},
+    {0x02,0x3A,0x00},
+    {0x02,0x3B,0x00},
+    {0x02,0x3C,0x00},
+    {0x02,0x3D,0x00},
+    {0x02,0x3E,0xC0},
+    {0x02,0x4A,0x00},
+    {0x02,0x4B,0x00},
+    {0x02,0x4C,0x00},
+    {0x02,0x4D,0x00},
+    {0x02,0x4E,0x00},
+    {0x02,0x4F,0x00},
+    {0x02,0x50,0x00},
+    {0x02,0x51,0x00},
+    {0x02,0x52,0x00},
+    {0x02,0x53,0x00},
+    {0x02,0x54,0x00},
+    {0x02,0x55,0x00},
+    {0x02,0x56,0x00},
+    {0x02,0x57,0x00},
+    {0x02,0x58,0x00},
+    {0x02,0x59,0x00},
+    {0x02,0x5A,0x00},
+    {0x02,0x5B,0x00},
+    {0x02,0x5C,0x00},
+    {0x02,0x5D,0x00},
+    {0x02,0x5E,0x00},
+    {0x02,0x5F,0x00},
+    {0x02,0x60,0x00},
+    {0x02,0x61,0x00},
+    {0x02,0x62,0x00},
+    {0x02,0x63,0x00},
+    {0x02,0x64,0x00},
+    {0x02,0x68,0x00},
+    {0x02,0x69,0x00},
+    {0x02,0x6A,0x00},
+    {0x02,0x6B,0x45},
+    {0x02,0x6C,0x50},
+    {0x02,0x6D,0x4F},
+    {0x02,0x6E,0x4E},
+    {0x02,0x6F,0x5F},
+    {0x02,0x70,0x43},
+    {0x02,0x71,0x4C},
+    {0x02,0x72,0x4B},
+    {0x03,0x02,0x00},
+    {0x03,0x03,0x00},
+    {0x03,0x04,0x00},
+    {0x03,0x05,0x00},
+    {0x03,0x06,0x16},
+    {0x03,0x07,0x00},
+    {0x03,0x08,0x00},
+    {0x03,0x09,0x00},
+    {0x03,0x0A,0x00},
+    {0x03,0x0B,0x80},
+    {0x03,0x0D,0x00},
+    {0x03,0x0E,0x00},
+    {0x03,0x0F,0x00},
+    {0x03,0x10,0x00},
+    {0x03,0x11,0x00},
+    {0x03,0x12,0x00},
+    {0x03,0x13,0x00},
+    {0x03,0x14,0x00},
+    {0x03,0x15,0x00},
+    {0x03,0x16,0x00},
+    {0x03,0x18,0x00},
+    {0x03,0x19,0x00},
+    {0x03,0x1A,0x00},
+    {0x03,0x1B,0x00},
+    {0x03,0x1C,0x00},
+    {0x03,0x1D,0x00},
+    {0x03,0x1E,0x00},
+    {0x03,0x1F,0x00},
+    {0x03,0x20,0x00},
+    {0x03,0x21,0x00},
+    {0x03,0x23,0x00},
+    {0x03,0x24,0x00},
+    {0x03,0x25,0x00},
+    {0x03,0x26,0x00},
+    {0x03,0x27,0x00},
+    {0x03,0x28,0x00},
+    {0x03,0x29,0x00},
+    {0x03,0x2A,0x00},
+    {0x03,0x2B,0x00},
+    {0x03,0x2C,0x00},
+    {0x03,0x2E,0x00},
+    {0x03,0x2F,0x00},
+    {0x03,0x30,0x00},
+    {0x03,0x31,0x00},
+    {0x03,0x32,0x00},
+    {0x03,0x33,0x00},
+    {0x03,0x34,0x00},
+    {0x03,0x35,0x00},
+    {0x03,0x36,0x00},
+    {0x03,0x37,0x00},
+    {0x03,0x39,0x1F},
+    {0x03,0x3B,0x00},
+    {0x03,0x3C,0x00},
+    {0x03,0x3D,0x00},
+    {0x03,0x3E,0x00},
+    {0x03,0x3F,0x00},
+    {0x03,0x40,0x00},
+    {0x03,0x41,0x00},
+    {0x03,0x42,0x00},
+    {0x03,0x43,0x00},
+    {0x03,0x44,0x00},
+    {0x03,0x45,0x00},
+    {0x03,0x46,0x00},
+    {0x03,0x47,0x00},
+    {0x03,0x48,0x00},
+    {0x03,0x49,0x00},
+    {0x03,0x4A,0x00},
+    {0x03,0x4B,0x00},
+    {0x03,0x4C,0x00},
+    {0x03,0x4D,0x00},
+    {0x03,0x4E,0x00},
+    {0x03,0x4F,0x00},
+    {0x03,0x50,0x00},
+    {0x03,0x51,0x00},
+    {0x03,0x52,0x00},
+    {0x03,0x53,0x00},
+    {0x03,0x54,0x00},
+    {0x03,0x55,0x00},
+    {0x03,0x56,0x00},
+    {0x03,0x57,0x00},
+    {0x03,0x58,0x00},
+    {0x03,0x59,0x00},
+    {0x03,0x5A,0x00},
+    {0x03,0x5B,0x00},
+    {0x03,0x5C,0x00},
+    {0x03,0x5D,0x00},
+    {0x03,0x5E,0x00},
+    {0x03,0x5F,0x00},
+    {0x03,0x60,0x00},
+    {0x03,0x61,0x00},
+    {0x03,0x62,0x00},
+    {0x04,0x87,0x00},
+    {0x05,0x02,0x01},
+    {0x05,0x08,0x14},
+    {0x05,0x09,0x22},
+    {0x05,0x0A,0x0D},
+    {0x05,0x0B,0x0C},
+    {0x05,0x0C,0x01},
+    {0x05,0x0D,0x3F},
+    {0x05,0x0E,0x15},
+    {0x05,0x0F,0x26},
+    {0x05,0x10,0x0C},
+    {0x05,0x11,0x0B},
+    {0x05,0x12,0x01},
+    {0x05,0x13,0x3F},
+    {0x05,0x15,0x00},
+    {0x05,0x16,0x00},
+    {0x05,0x17,0x00},
+    {0x05,0x18,0x00},
+    {0x05,0x19,0x65},
+    {0x05,0x1A,0x03},
+    {0x05,0x1B,0x00},
+    {0x05,0x1C,0x00},
+    {0x05,0x1D,0x00},
+    {0x05,0x1E,0x00},
+    {0x05,0x1F,0xA0},
+    {0x05,0x21,0x33},
+    {0x05,0x2A,0x01},
+    {0x05,0x2B,0x01},
+    {0x05,0x2C,0x0F},
+    {0x05,0x2D,0x03},
+    {0x05,0x2E,0x19},
+    {0x05,0x2F,0x19},
+    {0x05,0x31,0x00},
+    {0x05,0x32,0x4B},
+    {0x05,0x33,0x03},
+    {0x05,0x34,0x00},
+    {0x05,0x36,0x0C},
+    {0x05,0x37,0x00},
+    {0x05,0x38,0x01},
+    {0x05,0x39,0x00},
+    {0x09,0x0E,0x02},
+    {0x09,0x43,0x01},
+    {0x09,0x49,0x01},
+    {0x09,0x4A,0x01},
+    {0x0A,0x02,0x00},
+    {0x0A,0x03,0x01},
+    {0x0A,0x04,0x01},
+    {0x0A,0x05,0x01},
+    {0x0B,0x44,0x0F},
+    {0x0B,0x46,0x00},
+    {0x0B,0x47,0x00},
+    {0x0B,0x48,0x0E},
+    {0x0B,0x4A,0x1E},
+    {0x05,0x14,0x01},
+    {0x00,0x1C,0x01},
+    {0x0B,0x24,0xDB},
+    {0x0B,0x25,0x02}
+};
+
+static dpll_command gpon_synce_dpll_table[] =
+{
+    {0x0B,0x24,0xD8},
+    {0x0B,0x25,0x00},
+    {0x00,0x0B,0x68},
+    {0x00,0x16,0x02},
+    {0x00,0x17,0x1C},
+    {0x00,0x18,0xCC},
+    {0x00,0x19,0xDD},
+    {0x00,0x1A,0xDF},
+    {0x00,0x2B,0x02},
+    {0x00,0x2C,0x03},
+    {0x00,0x2D,0x05},
+    {0x00,0x2E,0x6E},
+    {0x00,0x2F,0x00},
+    {0x00,0x30,0x37},
+    {0x00,0x31,0x00},
+    {0x00,0x32,0x00},
+    {0x00,0x33,0x00},
+    {0x00,0x34,0x00},
+    {0x00,0x35,0x00},
+    {0x00,0x36,0x6E},
+    {0x00,0x37,0x00},
+    {0x00,0x38,0x37},
+    {0x00,0x39,0x00},
+    {0x00,0x3A,0x00},
+    {0x00,0x3B,0x00},
+    {0x00,0x3C,0x00},
+    {0x00,0x3D,0x00},
+    {0x00,0x3F,0x33},
+    {0x00,0x40,0x04},
+    {0x00,0x41,0x0E},
+    {0x00,0x42,0x0A},
+    {0x00,0x43,0x00},
+    {0x00,0x44,0x00},
+    {0x00,0x45,0x0C},
+    {0x00,0x46,0x32},
+    {0x00,0x47,0x32},
+    {0x00,0x48,0x00},
+    {0x00,0x49,0x00},
+    {0x00,0x4A,0x32},
+    {0x00,0x4B,0x32},
+    {0x00,0x4C,0x00},
+    {0x00,0x4D,0x00},
+    {0x00,0x4E,0x55},
+    {0x00,0x4F,0x00},
+    {0x00,0x51,0x03},
+    {0x00,0x52,0x03},
+    {0x00,0x53,0x00},
+    {0x00,0x54,0x00},
+    {0x00,0x55,0x03},
+    {0x00,0x56,0x03},
+    {0x00,0x57,0x00},
+    {0x00,0x58,0x00},
+    {0x00,0x59,0x0F},
+    {0x00,0x5A,0x55},
+    {0x00,0x5B,0x55},
+    {0x00,0x5C,0xD0},
+    {0x00,0x5D,0x00},
+    {0x00,0x5E,0x55},
+    {0x00,0x5F,0x55},
+    {0x00,0x60,0xD5},
+    {0x00,0x61,0x00},
+    {0x00,0x62,0x00},
+    {0x00,0x63,0x00},
+    {0x00,0x64,0x00},
+    {0x00,0x65,0x00},
+    {0x00,0x66,0x00},
+    {0x00,0x67,0x00},
+    {0x00,0x68,0x00},
+    {0x00,0x69,0x00},
+    {0x00,0x92,0x00},
+    {0x00,0x93,0x00},
+    {0x00,0x95,0x00},
+    {0x00,0x96,0x00},
+    {0x00,0x98,0x00},
+    {0x00,0x9A,0x02},
+    {0x00,0x9B,0x00},
+    {0x00,0x9D,0x00},
+    {0x00,0x9E,0x60},
+    {0x00,0xA0,0x40},
+    {0x00,0xA2,0x02},
+    {0x00,0xA8,0xB7},
+    {0x00,0xA9,0x28},
+    {0x00,0xAA,0x10},
+    {0x00,0xAB,0x00},
+    {0x00,0xAC,0x00},
+    {0x01,0x02,0x01},
+    {0x01,0x08,0x06},
+    {0x01,0x09,0x09},
+    {0x01,0x0A,0x6B},
+    {0x01,0x0B,0x00},
+    {0x01,0x0D,0x01},
+    {0x01,0x0E,0x09},
+    {0x01,0x0F,0x3B},
+    {0x01,0x10,0x00},
+    {0x01,0x12,0x06},
+    {0x01,0x13,0x09},
+    {0x01,0x14,0x6B},
+    {0x01,0x15,0x00},
+    {0x01,0x17,0x01},
+    {0x01,0x18,0x09},
+    {0x01,0x19,0x3B},
+    {0x01,0x1A,0x00},
+    {0x01,0x1C,0x06},
+    {0x01,0x1D,0x09},
+    {0x01,0x1E,0x6B},
+    {0x01,0x1F,0x00},
+    {0x01,0x21,0x01},
+    {0x01,0x22,0x09},
+    {0x01,0x23,0x3B},
+    {0x01,0x24,0x00},
+    {0x01,0x26,0x06},
+    {0x01,0x27,0x09},
+    {0x01,0x28,0x6B},
+    {0x01,0x29,0x00},
+    {0x01,0x2B,0x01},
+    {0x01,0x2C,0x09},
+    {0x01,0x2D,0x3B},
+    {0x01,0x2E,0x00},
+    {0x01,0x30,0x06},
+    {0x01,0x31,0x09},
+    {0x01,0x32,0x6B},
+    {0x01,0x33,0x00},
+    {0x01,0x3A,0x06},
+    {0x01,0x3B,0xCC},
+    {0x01,0x3C,0x00},
+    {0x01,0x3D,0x00},
+    {0x01,0x3F,0x00},
+    {0x01,0x40,0x00},
+    {0x01,0x41,0x40},
+    {0x01,0x42,0xFF},
+    {0x02,0x02,0x00},
+    {0x02,0x03,0x00},
+    {0x02,0x04,0x00},
+    {0x02,0x05,0x00},
+    {0x02,0x06,0x00},
+    {0x02,0x08,0xDB},
+    {0x02,0x09,0x1A},
+    {0x02,0x0A,0x00},
+    {0x02,0x0B,0xC4},
+    {0x02,0x0C,0x09},
+    {0x02,0x0D,0x00},
+    {0x02,0x0E,0x00},
+    {0x02,0x0F,0x00},
+    {0x02,0x10,0x00},
+    {0x02,0x11,0x20},
+    {0x02,0x12,0x37},
+    {0x02,0x13,0x00},
+    {0x02,0x14,0x00},
+    {0x02,0x15,0x14},
+    {0x02,0x16,0x00},
+    {0x02,0x17,0x00},
+    {0x02,0x18,0x00},
+    {0x02,0x19,0x00},
+    {0x02,0x1A,0x00},
+    {0x02,0x1B,0x04},
+    {0x02,0x1C,0x00},
+    {0x02,0x1D,0x00},
+    {0x02,0x1E,0x00},
+    {0x02,0x1F,0x00},
+    {0x02,0x20,0x00},
+    {0x02,0x21,0x00},
+    {0x02,0x22,0x00},
+    {0x02,0x23,0x00},
+    {0x02,0x24,0x00},
+    {0x02,0x25,0x00},
+    {0x02,0x26,0x00},
+    {0x02,0x27,0x00},
+    {0x02,0x28,0x00},
+    {0x02,0x29,0x00},
+    {0x02,0x2A,0x00},
+    {0x02,0x2B,0x00},
+    {0x02,0x2C,0x00},
+    {0x02,0x2D,0x00},
+    {0x02,0x2E,0x00},
+    {0x02,0x2F,0x00},
+    {0x02,0x31,0x11},
+    {0x02,0x32,0x11},
+    {0x02,0x33,0x01},
+    {0x02,0x34,0x01},
+    {0x02,0x35,0x00},
+    {0x02,0x36,0x00},
+    {0x02,0x37,0x00},
+    {0x02,0x38,0xC0},
+    {0x02,0x39,0xDE},
+    {0x02,0x3A,0x00},
+    {0x02,0x3B,0x00},
+    {0x02,0x3C,0x00},
+    {0x02,0x3D,0x00},
+    {0x02,0x3E,0xC8},
+    {0x02,0x4A,0x00},
+    {0x02,0x4B,0x00},
+    {0x02,0x4C,0x00},
+    {0x02,0x4D,0x00},
+    {0x02,0x4E,0x00},
+    {0x02,0x4F,0x00},
+    {0x02,0x50,0x00},
+    {0x02,0x51,0x00},
+    {0x02,0x52,0x00},
+    {0x02,0x53,0x00},
+    {0x02,0x54,0x00},
+    {0x02,0x55,0x00},
+    {0x02,0x56,0x00},
+    {0x02,0x57,0x00},
+    {0x02,0x58,0x00},
+    {0x02,0x59,0x00},
+    {0x02,0x5A,0x00},
+    {0x02,0x5B,0x00},
+    {0x02,0x5C,0x00},
+    {0x02,0x5D,0x00},
+    {0x02,0x5E,0x00},
+    {0x02,0x5F,0x00},
+    {0x02,0x60,0x00},
+    {0x02,0x61,0x00},
+    {0x02,0x62,0x00},
+    {0x02,0x63,0x00},
+    {0x02,0x64,0x00},
+    {0x02,0x68,0x00},
+    {0x02,0x69,0x00},
+    {0x02,0x6A,0x00},
+    {0x02,0x6B,0x47},
+    {0x02,0x6C,0x50},
+    {0x02,0x6D,0x4F},
+    {0x02,0x6E,0x4E},
+    {0x02,0x6F,0x5F},
+    {0x02,0x70,0x43},
+    {0x02,0x71,0x4C},
+    {0x02,0x72,0x4B},
+    {0x03,0x02,0x00},
+    {0x03,0x03,0x00},
+    {0x03,0x04,0x00},
+    {0x03,0x05,0x00},
+    {0x03,0x06,0x16},
+    {0x03,0x07,0x00},
+    {0x03,0x08,0x00},
+    {0x03,0x09,0x00},
+    {0x03,0x0A,0x00},
+    {0x03,0x0B,0x80},
+    {0x03,0x0D,0x00},
+    {0x03,0x0E,0x00},
+    {0x03,0x0F,0x00},
+    {0x03,0x10,0x00},
+    {0x03,0x11,0x00},
+    {0x03,0x12,0x00},
+    {0x03,0x13,0x00},
+    {0x03,0x14,0x00},
+    {0x03,0x15,0x00},
+    {0x03,0x16,0x00},
+    {0x03,0x18,0x00},
+    {0x03,0x19,0x00},
+    {0x03,0x1A,0x00},
+    {0x03,0x1B,0x00},
+    {0x03,0x1C,0x00},
+    {0x03,0x1D,0x00},
+    {0x03,0x1E,0x00},
+    {0x03,0x1F,0x00},
+    {0x03,0x20,0x00},
+    {0x03,0x21,0x00},
+    {0x03,0x23,0x00},
+    {0x03,0x24,0x00},
+    {0x03,0x25,0x00},
+    {0x03,0x26,0x00},
+    {0x03,0x27,0x00},
+    {0x03,0x28,0x00},
+    {0x03,0x29,0x00},
+    {0x03,0x2A,0x00},
+    {0x03,0x2B,0x00},
+    {0x03,0x2C,0x00},
+    {0x03,0x2E,0x00},
+    {0x03,0x2F,0x00},
+    {0x03,0x30,0x00},
+    {0x03,0x31,0x00},
+    {0x03,0x32,0x00},
+    {0x03,0x33,0x00},
+    {0x03,0x34,0x00},
+    {0x03,0x35,0x00},
+    {0x03,0x36,0x00},
+    {0x03,0x37,0x00},
+    {0x03,0x39,0x1F},
+    {0x03,0x3B,0x00},
+    {0x03,0x3C,0x00},
+    {0x03,0x3D,0x00},
+    {0x03,0x3E,0x00},
+    {0x03,0x3F,0x00},
+    {0x03,0x40,0x00},
+    {0x03,0x41,0x00},
+    {0x03,0x42,0x00},
+    {0x03,0x43,0x00},
+    {0x03,0x44,0x00},
+    {0x03,0x45,0x00},
+    {0x03,0x46,0x00},
+    {0x03,0x47,0x00},
+    {0x03,0x48,0x00},
+    {0x03,0x49,0x00},
+    {0x03,0x4A,0x00},
+    {0x03,0x4B,0x00},
+    {0x03,0x4C,0x00},
+    {0x03,0x4D,0x00},
+    {0x03,0x4E,0x00},
+    {0x03,0x4F,0x00},
+    {0x03,0x50,0x00},
+    {0x03,0x51,0x00},
+    {0x03,0x52,0x00},
+    {0x03,0x53,0x00},
+    {0x03,0x54,0x00},
+    {0x03,0x55,0x00},
+    {0x03,0x56,0x00},
+    {0x03,0x57,0x00},
+    {0x03,0x58,0x00},
+    {0x03,0x59,0x00},
+    {0x03,0x5A,0x00},
+    {0x03,0x5B,0x00},
+    {0x03,0x5C,0x00},
+    {0x03,0x5D,0x00},
+    {0x03,0x5E,0x00},
+    {0x03,0x5F,0x00},
+    {0x03,0x60,0x00},
+    {0x03,0x61,0x00},
+    {0x03,0x62,0x00},
+    {0x04,0x87,0x00},
+    {0x05,0x02,0x01},
+    {0x05,0x08,0x14},
+    {0x05,0x09,0x22},
+    {0x05,0x0A,0x0D},
+    {0x05,0x0B,0x0C},
+    {0x05,0x0C,0x01},
+    {0x05,0x0D,0x3F},
+    {0x05,0x0E,0x15},
+    {0x05,0x0F,0x26},
+    {0x05,0x10,0x0C},
+    {0x05,0x11,0x0B},
+    {0x05,0x12,0x01},
+    {0x05,0x13,0x3F},
+    {0x05,0x15,0x00},
+    {0x05,0x16,0xB8},
+    {0x05,0x17,0xC1},
+    {0x05,0x18,0x49},
+    {0x05,0x19,0xAC},
+    {0x05,0x1A,0x02},
+    {0x05,0x1B,0x00},
+    {0x05,0x1C,0x00},
+    {0x05,0x1D,0x00},
+    {0x05,0x1E,0x00},
+    {0x05,0x1F,0x80},
+    {0x05,0x21,0x31},
+    {0x05,0x2A,0x00},
+    {0x05,0x2B,0x01},
+    {0x05,0x2C,0x0F},
+    {0x05,0x2D,0x03},
+    {0x05,0x2E,0x19},
+    {0x05,0x2F,0x19},
+    {0x05,0x31,0x00},
+    {0x05,0x32,0x42},
+    {0x05,0x33,0x03},
+    {0x05,0x34,0x00},
+    {0x05,0x36,0x0C},
+    {0x05,0x37,0x00},
+    {0x05,0x38,0x21},
+    {0x05,0x39,0x00},
+    {0x09,0x0E,0x02},
+    {0x09,0x43,0x01},
+    {0x09,0x49,0x03},
+    {0x09,0x4A,0x03},
+    {0x0A,0x02,0x00},
+    {0x0A,0x03,0x01},
+    {0x0A,0x04,0x01},
+    {0x0A,0x05,0x01},
+    {0x0B,0x44,0x0C},
+    {0x0B,0x46,0x00},
+    {0x0B,0x47,0x00},
+    {0x0B,0x48,0x0C},
+    {0x0B,0x4A,0x1E},
+    {0x05,0x14,0x01},
+    {0x00,0x1C,0x01},
+    {0x0B,0x24,0xDB},
+    {0x0B,0x25,0x02}
+}; 
+
+#endif
+
diff --git a/bcm68620_release/release/host_customized/board/wrx/fs/i2c_addrs.sh b/bcm68620_release/release/host_customized/board/wrx/fs/i2c_addrs.sh
new file mode 100755
index 0000000..643fd4c
--- /dev/null
+++ b/bcm68620_release/release/host_customized/board/wrx/fs/i2c_addrs.sh
@@ -0,0 +1,4 @@
+#! /bin/bash
+
+# Body will be inserted here by copy_host_fs target in project's main Makefile
+
diff --git a/bcm68620_release/release/host_customized/board/wrx/fs/svk_init.sh b/bcm68620_release/release/host_customized/board/wrx/fs/svk_init.sh
new file mode 100755
index 0000000..c1eece0
--- /dev/null
+++ b/bcm68620_release/release/host_customized/board/wrx/fs/svk_init.sh
@@ -0,0 +1,156 @@
+#! /bin/bash
+cd /opt/bcm68620
+
+# These files are mounted using tmpfs, so they will be deleted upon reboot
+LOCK_DIR_INIT=/tmp/bcm68620_svk_init
+FILE_INIT_DONE="$LOCK_DIR_INIT/done"
+LOCK_DIR_KERNEL_LOG_OWNED=/tmp/bcm68620_kernel_log_owned
+
+USER_APPL_ARGS=""
+KT2_PORT=""
+SWKT2_PORT=""
+KERNEL_LOG="y"
+COOP_DBA="n"
+
+while (($#)); do
+    case "$1" in
+    --kt2)
+        shift
+        KT2_PORT="$1"
+        ;;
+    --swkt2)
+        shift
+        SWKT2_PORT="$1"
+        ;;
+    --proxy) # for backward compatibility (could just use '-proxy')
+        shift
+        USER_APPL_ARGS="$USER_APPL_ARGS -proxy $1"
+        ;;
+    -nl)
+        KERNEL_LOG="n"
+        USER_APPL_ARGS="$USER_APPL_ARGS $1"
+        ;;
+    -coop_dba)
+        COOP_DBA="y"
+        ;;
+    *)
+        USER_APPL_ARGS="$USER_APPL_ARGS $1"
+        ;;
+    esac
+    shift
+done
+
+# Check if the initialization steps (installing kernel modules, etc) have already been done.
+# If not, start the initialization process.
+if mkdir "$LOCK_DIR_INIT" 2>/dev/null; then
+    trap "rmdir \"$LOCK_DIR_INIT\"" EXIT
+    echo "Initializing BCM68620 SVK..."
+
+    insmod ll_pcie.ko
+    sleep 1
+
+    insmod os_linux.ko
+    sleep 1
+
+    source ./i2c_addrs.sh
+    insmod i2c_devs.ko
+    sleep 1
+
+    function probe_dev
+    {
+        2>/dev/null echo maple_i2c 0x$1 > /sys/bus/i2c/devices/i2c-0/new_device
+    }
+
+    # Suppress error warnings in case device cannot be probed because it is inexistent.
+    dmesg -n 1
+    probe_dev $I2C_SW0_I2C_ADDR
+    probe_dev $I2C_SW1_I2C_ADDR
+    probe_dev $I2C_SW2_I2C_ADDR
+    probe_dev $I2C_SW3_I2C_ADDR
+    probe_dev $I2C_SW4_I2C_ADDR
+    probe_dev $SFP_I2C_ADDR1
+    probe_dev $SFP_I2C_ADDR2
+    probe_dev $FPGA_I2C_ADDR
+    probe_dev $PON_DPLL_I2C_ADDR
+    probe_dev $PM_DPLL_I2C_ADDR
+    probe_dev $CXP_T_I2C_ADDR
+    probe_dev $CXP_R_I2C_ADDR
+    probe_dev $PCIE_SW_I2C_ADDR
+    dmesg -n 8
+
+    rm -f /dev/maple_i2c
+    mknod /dev/maple_i2c c `cat /sys/module/i2c_devs/parameters/maple_i2c_chrdev_major` 0
+
+    if [ "$KT2_PORT" != "" ]; then
+        echo k 1 > /proc/maple_i2c/i2c
+        insmod linux-kernel-bde.ko
+        sleep 1
+        cat /proc/linux-kernel-bde
+        sleep 1
+        insmod linux-uk-proxy.ko
+        sleep 1
+        mknod /dev/linux-uk-proxy c 125 0
+        sleep 1
+        insmod linux-bcm-diag-full.ko
+        sleep 1
+        echo "KT2 will wait on port $KT2_PORT"
+        ./bcm.user.proxy -d $KT2_PORT &
+    fi
+
+    if [ "$SWKT2_PORT" != "" ]; then
+        echo "SW KT2 init"
+        insmod linux-kernel-bde.ko
+        sleep 1
+        cat /proc/linux-kernel-bde
+        sleep 1
+        insmod linux-uk-proxy.ko
+        sleep 1
+        mknod /dev/linux-uk-proxy c 125 0
+        sleep 1
+        insmod linux-bcm-diag-full.ko
+        sleep 1
+        echo "KT2 will wait on port $SWKT2_PORT"
+        ./bcm.user.proxy -d $SWKT2_PORT &
+    fi
+
+    insmod bcm_dev_ctrl_linux.ko
+    sleep 1
+    
+    if [ "$COOP_DBA" != "n" ]; then
+        insmod coop_dba_linux.ko
+        sleep 1
+    fi
+    
+    rm -f /dev/bcm_log
+    mknod /dev/bcm_log c `cat /sys/module/bcm_dev_ctrl_linux/parameters/dev_log_chrdev_major` 0
+    mknod /dev/maple_dev_ctrl c `cat /sys/module/bcm_dev_ctrl_linux/parameters/maple_dev_ctrl_chrdev_major` 0
+
+    touch "$FILE_INIT_DONE"
+    trap - EXIT
+else
+    if [ -f "$FILE_INIT_DONE" ]; then
+        echo "Skipped BCM68620 SVK initialization since it has already been done"
+    else
+        echo "Waiting for SVK initialization to complete..."
+        while [ ! -f "$FILE_INIT_DONE" ]; do
+            sleep 1
+        done
+    fi
+fi
+
+# Only one application can have the kernel logger enabled at once.
+# If someone else already owns the kernel logger, run without it.
+if [ "$KERNEL_LOG" == "y" ]; then
+    if mkdir "$LOCK_DIR_KERNEL_LOG_OWNED" 2>/dev/null; then
+        trap "rmdir \"$LOCK_DIR_KERNEL_LOG_OWNED\"" EXIT
+    else
+        USER_APPL_ARGS="$USER_APPL_ARGS -nl"
+        echo "Running without kernel logger since someone else owns it"
+    fi
+fi
+
+#echo "In Band: Launching BCM68620 user space device control application "
+#./bcm_dev_ctrl_user > /dev/null 2>&1 &
+
+echo "Launching BCM68620 user application with options \"$USER_APPL_ARGS\""
+./bcm_user_appl $USER_APPL_ARGS
diff --git a/bcm68620_release/release/host_customized/coop_dba_linux/Makefile b/bcm68620_release/release/host_customized/coop_dba_linux/Makefile
new file mode 100644
index 0000000..9e2043e
--- /dev/null
+++ b/bcm68620_release/release/host_customized/coop_dba_linux/Makefile
@@ -0,0 +1,38 @@
+# Cooperative DBA
+
+ifeq ("$(OS_KERNEL)", "linux")
+
+MOD_NAME = coop_dba_linux
+MOD_TYPE = linux_module
+MOD_DEPS = coop_dba
+
+srcs = bcmolt_coop_dba_linux.c
+
+MOD_INC_DIRS = $(SRC_DIR) $(MODEL_OUT_DIR)
+
+# If called by linux kernel builder - add include paths manually.
+# It is not elegant, but we'll not have many linux modules
+ifneq ("$(KBUILD_SRC)", "")
+	-include $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
+endif
+    ifeq ("$(RELEASE_BUILD)", "y")
+	    KBUILD_EXTRA_SYMBOLS += $(TOP_DIR)/host_driver/dev_ctrl/linux/Module.symvers
+    	EXTRA_CFLAGS += -I$(TOP_DIR)/host_driver/common_gpon \
+-I$(TOP_DIR)/host_driver/transport/pcie_sw_queue \
+-I$(TOP_DIR)/host_driver/pcie \
+-I$(TOP_DIR)/host_driver/api \
+-I$(TOP_DIR)/host_driver/utils \
+-I$(TOP_DIR)/host_reference/dev_log \
+-I$(TOP_DIR)/host_driver/transport/mux 
+    else
+	    KBUILD_EXTRA_SYMBOLS += $(TOP_DIR)/host/dev_ctrl/linux/Module.symvers
+	    EXTRA_CFLAGS += -I$(TOP_DIR)/common/gpon \
+-I$(TOP_DIR)/common/model/maple \
+-I$(TOP_DIR)/common/transport/driver/maple/pcie_sw_queue \
+-I$(TOP_DIR)/common/drivers/maple/pcie \
+-I$(TOP_DIR)/common/api \
+-I$(TOP_DIR)/common/utils \
+-I$(TOP_DIR)/common/dev_log \
+-I$(TOP_DIR)/host/transport/driver/maple/mux
+    endif
+endif
\ No newline at end of file
diff --git a/bcm68620_release/release/host_customized/coop_dba_linux/bcmolt_coop_dba_linux.c b/bcm68620_release/release/host_customized/coop_dba_linux/bcmolt_coop_dba_linux.c
new file mode 100644
index 0000000..70fc52c
--- /dev/null
+++ b/bcm68620_release/release/host_customized/coop_dba_linux/bcmolt_coop_dba_linux.c
@@ -0,0 +1,81 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#include "bcmolt_coop_dba.h"
+
+module_param(bcmos_sys_trace_level, uint, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
+MODULE_PARM_DESC(bcmos_sys_trace_level, "trace_level");
+
+static void bcmolt_coop_dba_unregister_registered_devices(bcmolt_devid max_devid, bcmtrmux_channel channel)
+{
+	bcmolt_devid devid;
+
+	for (devid = 0; devid < max_devid; devid++)
+	{
+		bcmolt_coop_dba_exit(devid, channel);
+	}
+}
+static void bcmolt_coop_dba_module_exit(void)
+{
+	bcmolt_coop_dba_unregister_registered_devices(BCMTR_MAX_OLTS, URGENT_CHANNEL);
+
+    printk("%s\n", __FUNCTION__);
+}
+
+static int bcmolt_coop_dba_module_init(void)
+{
+    bcmos_errno rc;
+    bcmolt_devid devid;
+    bcmtrmux_channel channel = URGENT_CHANNEL;
+
+    printk("%s\n", __FUNCTION__);
+
+#if 0
+    bcmos_trace_level_set(BCMOS_TRACE_LEVEL_DEBUG);
+#endif
+
+	for (devid = 0; devid < BCMTR_MAX_OLTS; devid++)
+	{
+		rc = bcmolt_coop_dba_init(devid, &channel, bcmolt_coop_dba_rx, NULL);
+		if (rc != BCM_ERR_OK)
+		{
+			printk("error in bcmolt_coop_dba_init rc=%d\n", rc);
+			bcmolt_coop_dba_unregister_registered_devices(devid, channel);
+			break;
+		}
+	}
+
+    return rc ? -EINVAL : 0;
+}
+
+module_init(bcmolt_coop_dba_module_init);
+module_exit(bcmolt_coop_dba_module_exit);
+
+MODULE_DESCRIPTION("Cooperative DBA");
+MODULE_LICENSE("Dual BSD/GPL");
diff --git a/bcm68620_release/release/host_customized/dev_ctrl_linux/Makefile b/bcm68620_release/release/host_customized/dev_ctrl_linux/Makefile
new file mode 100644
index 0000000..39a56ff
--- /dev/null
+++ b/bcm68620_release/release/host_customized/dev_ctrl_linux/Makefile
@@ -0,0 +1,17 @@
+# device_control Linux wrapper
+
+ifeq ("$(OS_KERNEL)", "linux")
+
+MOD_NAME = bcm_dev_ctrl_linux
+MOD_TYPE = linux_module
+MOD_DEPS = dev_ctrl nltr dev_log_kernel user_config host_api_linux api_linux pcie pcie_mod
+
+srcs = bcmolt_dev_ctrl_linux.c
+
+# If called by linux kernel builder - add include paths manually.
+# It is not elegant, but we'll not have many linux modules
+ifneq ("$(KBUILD_SRC)", "")
+	-include $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
+endif
+endif
+
diff --git a/bcm68620_release/release/host_customized/dev_ctrl_linux/bcmolt_dev_ctrl_ioctl.h b/bcm68620_release/release/host_customized/dev_ctrl_linux/bcmolt_dev_ctrl_ioctl.h
new file mode 100755
index 0000000..037c467
--- /dev/null
+++ b/bcm68620_release/release/host_customized/dev_ctrl_linux/bcmolt_dev_ctrl_ioctl.h
@@ -0,0 +1,30 @@
+/*
+ * bcmolt_dev_ctrl_ioctl.h
+ *
+ *  Created on: 7 ???? 2015
+ *      Author: milya
+ */
+
+#ifndef HOST_DEV_CTRL_LINUX_BCMOLT_DEV_CTRL_IOCTL_H_
+#define HOST_DEV_CTRL_LINUX_BCMOLT_DEV_CTRL_IOCTL_H_
+
+
+#include <linux/ioctl.h>
+
+typedef struct
+{
+    uint32_t *dumpptr;
+    int32_t start_index;
+    int32_t howmany;
+    uint8_t device;
+    uint32_t event; /* For MAPLE_DEV_CTRL_IOCTL_OP_HOST_EVENT_WRITE only */
+} dev_ctrl_ioctl_param;
+
+#define MAPLE_DEV_CTRL_IOCTL_MAGIC 'J'
+
+#define MAPLE_DEV_CTRL_IOCTL_OP_PCI_STAT    _IOW(MAPLE_DEV_CTRL_IOCTL_MAGIC, 1, dev_ctrl_ioctl_param)
+#define MAPLE_DEV_CTRL_IOCTL_OP_PCI_DUMP_TX _IOW(MAPLE_DEV_CTRL_IOCTL_MAGIC, 2, dev_ctrl_ioctl_param)
+#define MAPLE_DEV_CTRL_IOCTL_OP_PCI_DUMP_RX _IOWR(MAPLE_DEV_CTRL_IOCTL_MAGIC, 3, dev_ctrl_ioctl_param)
+#define MAPLE_DEV_CTRL_IOCTL_OP_HOST_EVENT_WRITE _IOW(MAPLE_DEV_CTRL_IOCTL_MAGIC, 4, dev_ctrl_ioctl_param)
+
+#endif /* HOST_DEV_CTRL_LINUX_BCMOLT_DEV_CTRL_IOCTL_H_ */
diff --git a/bcm68620_release/release/host_customized/dev_ctrl_linux/bcmolt_dev_ctrl_linux.c b/bcm68620_release/release/host_customized/dev_ctrl_linux/bcmolt_dev_ctrl_linux.c
new file mode 100644
index 0000000..5f48de4
--- /dev/null
+++ b/bcm68620_release/release/host_customized/dev_ctrl_linux/bcmolt_dev_ctrl_linux.c
@@ -0,0 +1,370 @@
+#include <linux/proc_fs.h>
+#include <bcmolt_tr_nl_driver.h>
+#include <bcmolt_dev_log_kernel.h>
+#include <bcm_dev_log.h>
+#include <bcmolt_dev_ctrl.h>
+#include <bcmolt_tr_mux.h>
+#include <bcmos_system.h>
+#include <linux/cdev.h>
+#include <asm/uaccess.h> /*copy_from_user*/
+#include <linux/proc_fs.h>
+#include <bcmolt_dev_ctrl_ioctl.h>
+#include <bcmolt_user_utils.h>
+#include <bcmolt_host_api.h>
+#include <bcmolt_fld.h>
+#include <bcmtr_pcie.h>
+
+module_param(bcmos_sys_trace_level, uint, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
+MODULE_PARM_DESC(bcmos_sys_trace_level, "trace_level");
+
+
+int maple_dev_ctrl_chrdev_major = 237;
+module_param(maple_dev_ctrl_chrdev_major, int, S_IRUSR | S_IRGRP | S_IWGRP);
+MODULE_PARM_DESC(maple_dev_ctrl_chrdev_major, "maple_dev_ctrl_major");
+static char is_chrdev_reg;
+static char is_cdev_add;
+
+extern struct proc_dir_entry *bcmolt_dir;
+
+bcmos_errno bcmtr_init(void)
+{
+    return BCM_ERR_OK;
+}
+
+/* /proc/bcmolt/trmux read operation */
+static int trmux_stats_read(char *page, char **start, off_t off, int count, int *eof, void *data)
+{
+    static bcmtrmux_stat prev_stat;
+    int len;
+    bcmtrmux_stat stat;
+    bcmos_errno rc;
+    bcmolt_devid *device_id = data;
+
+    rc = bcmtrmux_stat_get(*device_id, &stat);
+    if (rc)
+    {
+        len = snprintf(page, count, "Can't read trmux statistics rc=%s\n", bcmos_strerror(rc));
+        return len;
+    }
+
+    len = snprintf(page, count, "trmux statistics\n\n");
+    len += sprintf(page + len, "tx_remote      : %u\n", stat.tx_remote - prev_stat.tx_remote);
+    len += sprintf(page + len, "tx_local       : %u\n", stat.tx_local - prev_stat.tx_local);
+    len += sprintf(page + len, "tx_disc_remote : %u\n", stat.tx_disc_remote - prev_stat.tx_disc_remote);
+    len += sprintf(page + len, "tx_disc_local  : %u\n", stat.tx_disc_local - prev_stat.tx_disc_local);
+    len += sprintf(page + len, "rx_remote      : %u\n", stat.rx_remote - prev_stat.rx_remote);
+    len += sprintf(page + len, "rx_local       : %u\n", stat.rx_local - prev_stat.rx_local);
+    len += sprintf(page + len, "rx_auto        : %u\n", stat.rx_auto - prev_stat.rx_auto);
+    len += sprintf(page + len, "rx_disc_remote : %u\n", stat.rx_disc_remote - prev_stat.rx_disc_remote);
+    len += sprintf(page + len, "rx_disc_local  : %u\n", stat.rx_disc_local - prev_stat.rx_disc_local);
+    len += sprintf(page + len, "rx_disc_auto   : %u\n", stat.rx_disc_auto - prev_stat.rx_disc_auto);
+    len += sprintf(page + len, "ctl_to_host    : %u\n", stat.control_to_host - prev_stat.control_to_host);
+    len += sprintf(page + len, "ctl_to_line    : %u\n", stat.control_to_line - prev_stat.control_to_line);
+    len += sprintf(page + len, "rx_disc_inv_ch : %u\n", stat.rx_disc_inv_ch - prev_stat.rx_disc_inv_ch);
+    len += sprintf(page + len, "rx_poll_urgent : %u\n", stat.rx_poll_urgent - prev_stat.rx_poll_urgent);
+    len += sprintf(page + len, "rx_poll_normal : %u\n", stat.rx_poll_normal - prev_stat.rx_poll_normal);
+    prev_stat = stat;
+
+    return len;
+}
+
+/* /proc/bcmolt/devctrl read operation */
+static int devctrl_debug_read(char *page, char **start, off_t off, int count, int *eof, void *data)
+{
+    int len;
+    dev_ctrl_database db;
+    bcmolt_devid *device_id = data;
+
+    dev_ctrl_read_db(*device_id, &db);
+
+    /* db contains the entire copy of dev_ctrl_database. add whatever you want to print. */
+    len = snprintf(page, count, "dev_ctrl debug information\n\n");
+    len += sprintf(page + len, "task name                 : %s\n", db.task_info.name);
+    len += sprintf(page + len, "module name               : %s\n", db.module_info.name);
+    len += sprintf(page + len, "connection state          : %s\n",
+        bcm_str_host_connecting_state(db.connection_info.state));
+    len += sprintf(page + len, "tod                       : %s\n",
+        (db.enable_tod == BCMOLT_CONTROL_STATE_DISABLE) ? "DISABLE" : "ENABLE");
+    len += sprintf(page + len, "last event                : %s\n", bcm_str_device_event(db.last_event));
+    if (db.conn_fail_reason < BCMOLT_HOST_CONNECTION_FAIL_REASON__NUM_OF)
+        len += sprintf(page + len, "connection failure reason : %s\n",
+            bcm_str_host_connection_fail_reason(db.conn_fail_reason));
+    return len;
+}
+
+#ifdef ENABLE_LOG
+static bcmos_errno dev_ctrl_logger_init_cb(void)
+{
+    bcmos_errno rc;
+
+    /* Create kernel logger */
+    rc = bcm_dev_log_linux_init();
+    BUG_ON(rc);
+
+    /* For now just map BCMOS_TRACE_XX to dev_log. Later on dev_control
+     * can define its own log ids
+     */
+    rc = bcm_dev_log_os_trace_init();
+    BUG_ON(rc);
+
+    return rc;
+}
+#endif
+
+static struct cdev maple_dev_ctrl_chrdev_cdev;
+static int maple_dev_ctrl_chrdev_open(struct inode *inode, struct file *filp)
+{
+    return 0;
+}
+
+static int maple_dev_ctrl_chrdev_release(struct inode *inode, struct file *filp)
+{
+    return 0;
+}
+
+static long maple_dev_ctrl_chrdev_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
+{
+    bcmos_errno bcmrc;
+    int linux_rc = 0;
+    int rc = 0;
+    dev_ctrl_ioctl_param params;
+
+    /* don't even decode wrong cmds: better returning  ENOTTY than EFAULT */
+    if (_IOC_TYPE(cmd) != MAPLE_DEV_CTRL_IOCTL_MAGIC)
+        return -ENOTTY;
+
+    rc = copy_from_user((char *)&params, (char *)arg, sizeof(params));
+    if (rc < 0)
+        return rc;
+
+    switch (cmd)
+    {
+    case MAPLE_DEV_CTRL_IOCTL_OP_PCI_STAT:
+        {
+            bcm_pcied_stat stat;
+
+            memset(params.dumpptr, 0, sizeof(bcm_pcied_stat));
+            bcmrc = bcmtr_pcie_get_statistics(params.device, params.start_index, &stat);
+            if (bcmrc == BCM_ERR_OK)
+                memcpy(params.dumpptr, &stat, sizeof(bcm_pcied_stat));
+            else
+                linux_rc = (int)bcmrc;
+        }
+        break;
+    case MAPLE_DEV_CTRL_IOCTL_OP_PCI_DUMP_TX:
+        linux_rc = (int)bcmtr_pcie_tx_dump((char *)params.dumpptr, params.device, params.start_index, params.howmany);
+        break;
+    case MAPLE_DEV_CTRL_IOCTL_OP_PCI_DUMP_RX:
+        linux_rc = (int)bcmtr_pcie_rx_dump((char *)params.dumpptr, params.device, params.start_index, params.howmany);
+        break;
+    case MAPLE_DEV_CTRL_IOCTL_OP_HOST_EVENT_WRITE:
+        linux_rc = (int)bcmolt_dev_ctrl_host_event_write(params.device, params.event);
+        break;
+    default:
+        rc = -ENOTTY;
+        break;
+    }
+
+    return linux_rc;
+}
+static ssize_t maple_dev_ctrl_chrdev_write(struct file *filp, const char __user *buf,
+    size_t count, loff_t *f_pos)
+{
+    return 0;
+}
+
+static struct file_operations maple_dev_ctrl_chrdev_fops =
+{
+    .owner = THIS_MODULE,
+    .open = maple_dev_ctrl_chrdev_open,
+    .release = maple_dev_ctrl_chrdev_release,
+    .write = maple_dev_ctrl_chrdev_write,
+    .unlocked_ioctl = maple_dev_ctrl_chrdev_ioctl
+};
+
+static int maple_dev_ctrl_dev_create_chrdev(void)
+{
+    dev_t dev = MKDEV(maple_dev_ctrl_chrdev_major, 0);
+    int linux_rc;
+    is_chrdev_reg = 0;
+    is_cdev_add = 0;
+    /*
+     * Register your major, and accept a dynamic number.
+     */
+    if (!maple_dev_ctrl_chrdev_major)
+        return -1;
+    linux_rc = register_chrdev_region(dev, 0, "maple_dev_ctrl");
+    if (linux_rc < 0)
+    {
+        printk("register_chrdev_region()->%d\n", linux_rc);
+        return -EIO;
+    }
+    is_chrdev_reg = 1;
+
+    cdev_init(&maple_dev_ctrl_chrdev_cdev, &maple_dev_ctrl_chrdev_fops);
+    linux_rc = cdev_add(&maple_dev_ctrl_chrdev_cdev, dev, 1);
+    if (linux_rc < 0)
+    {
+        printk("cdev_add()->%d\n", linux_rc);
+        return -EIO;
+    }
+    is_cdev_add = 1;
+    return 0;
+}
+
+
+#define BCMOLT_PROCFS_NAME_LEN  4       /* device_id is 1-byte, which can be 3 digit in decimal. */
+#define PROC_TRMUX_NAME         "trmux"
+#define PROC_DEVCTRL_NAME       "devctrl"
+#define PROC_ENTRY_MODE         (S_IFREG | S_IWUSR | S_IRUGO)
+
+typedef struct
+{
+    bcmolt_devid device_id;
+    char name[BCMOLT_PROCFS_NAME_LEN];
+} bcmolt_proc_ctx_t;
+
+static bcmolt_proc_ctx_t bcmolt_proc_ctx[BCMTR_MAX_OLTS];
+static bcmos_bool bcmdev_bcmolt_proc_initialized;
+struct proc_dir_entry *trmux_dir = NULL;
+struct proc_dir_entry *devctrl_dir = NULL;
+
+static void bcmdev_bcmolt_proc_init(void)
+{
+    bcmolt_devid devid;
+    if (!bcmdev_bcmolt_proc_initialized)
+    {
+        for (devid = 0; devid < BCMTR_MAX_OLTS; devid++)
+        {
+            bcmolt_proc_ctx[devid].device_id = devid;
+            sprintf(bcmolt_proc_ctx[devid].name, "%d", devid);
+        }
+        bcmdev_bcmolt_proc_initialized = BCMOS_TRUE;
+    }
+}
+
+static void bcmdev_module_exit(void)
+{
+    int devid;
+
+    if (trmux_dir)
+    {
+        for (devid = 0; devid < BCMTR_MAX_OLTS; devid++)
+        {
+            remove_proc_entry(bcmolt_proc_ctx[devid].name, trmux_dir);
+        }
+        remove_proc_entry(PROC_TRMUX_NAME, bcmolt_dir);
+    }
+    if (devctrl_dir)
+    {
+        for (devid = 0; devid < BCMTR_MAX_OLTS; devid++)
+        {
+            remove_proc_entry(bcmolt_proc_ctx[devid].name, devctrl_dir);
+        }
+        remove_proc_entry(PROC_DEVCTRL_NAME, bcmolt_dir);
+    }
+
+    bcmolt_dev_ctrl_exit();
+    bcmtr_nl_exit();
+    if (is_cdev_add)
+       cdev_del(&maple_dev_ctrl_chrdev_cdev);
+    if (is_chrdev_reg)
+       unregister_chrdev_region(MKDEV(maple_dev_ctrl_chrdev_major, 0), 1);
+#if defined(ENABLE_LOG)
+    bcm_dev_log_linux_exit();
+    bcm_dev_log_destroy();
+#endif
+    printk("%s\n", __FUNCTION__);
+}
+
+static int bcmdev_module_init(void)
+{
+    bcmos_errno rc;
+    struct proc_dir_entry *trmux_file;
+    struct proc_dir_entry *devctrl_file;
+    bcmolt_devid devid;
+    bcmolt_host_init_params params =
+    {
+#ifdef ENABLE_LOG
+        .logger_init_cb = dev_ctrl_logger_init_cb,
+#endif
+        .dev_ctrl_params =
+        {
+            .image_read_cb = bcmuser_image_read,
+            .system_mode_validate_cb = bcmuser_system_mode_validate,
+            .device_off_cb = bcmuser_device_off,
+            .device_on_cb = bcmuser_device_on,
+            .device_is_running_cb = bcmuser_device_is_running,
+            .host_reset_cb = bcmuser_host_reset,
+            .pcie_channel_prepare_cb = bcmuser_pcie_channel_prepare,
+            .pcie_channel_remove_cb = bcmuser_pcie_channel_remove,
+        }
+    };
+
+    if (!is_cdev_add)
+    {
+        if (maple_dev_ctrl_dev_create_chrdev() < 0)
+            printk("%s error to create dev ctrl cdev \n", __FUNCTION__);
+    }
+
+    printk("%s\n", __FUNCTION__);
+
+    rc = bcmolt_host_init(&params);
+    BUG_ON(rc);
+
+    bcmos_trace_level_set(BCMOS_TRACE_LEVEL_DEBUG);
+
+    bcmdev_bcmolt_proc_init();
+
+    rc = bcmtr_nl_init();
+    BUG_ON(rc);
+
+    rc = bcmuser_pcie_prepare();
+
+    if (rc == BCM_ERR_OK)
+    {
+        if ((trmux_dir = create_proc_entry(PROC_TRMUX_NAME, S_IFDIR, bcmolt_dir)) == NULL)
+        {
+            printk("Unable to create /proc/bcmolt/trmux directory\n");
+            return -1;
+        }
+
+        if ((devctrl_dir = create_proc_entry(PROC_DEVCTRL_NAME, S_IFDIR, bcmolt_dir)) == NULL)
+        {
+            printk("Unable to create /proc/bcmolt/devctrl directory\n");
+            return -1;
+        }
+
+        for (devid = 0; devid < BCMTR_MAX_OLTS; devid++)
+        {
+            if ((trmux_file = create_proc_entry(bcmolt_proc_ctx[devid].name, PROC_ENTRY_MODE, trmux_dir)) == NULL)
+            {
+                printk("Unable to create /proc/bcmolt/%s/%s\n", PROC_TRMUX_NAME, bcmolt_proc_ctx[devid].name);
+                return -1;
+            }
+            trmux_file->read_proc = (read_proc_t *)trmux_stats_read;
+            trmux_file->data = &bcmolt_proc_ctx[devid].device_id;
+
+            if ((devctrl_file = create_proc_entry(bcmolt_proc_ctx[devid].name, PROC_ENTRY_MODE, devctrl_dir)) == NULL)
+            {
+                printk("Unable to create /proc/bcmolt/%s/%s\n", PROC_DEVCTRL_NAME, bcmolt_proc_ctx[devid].name);
+                return -1;
+            }
+            devctrl_file->read_proc = (read_proc_t *)devctrl_debug_read;
+            devctrl_file->data = &bcmolt_proc_ctx[devid].device_id;
+        }
+    }
+    else
+    {
+    	bcmos_usleep(2000000);
+    	bcmdev_module_exit();
+    }
+
+    return rc ? -EINVAL : 0;
+}
+
+module_init(bcmdev_module_init);
+module_exit(bcmdev_module_exit);
+
+MODULE_DESCRIPTION("device_control");
+MODULE_LICENSE("Dual BSD/GPL");
diff --git a/bcm68620_release/release/host_customized/embedded_cli/Makefile b/bcm68620_release/release/host_customized/embedded_cli/Makefile
new file mode 100644
index 0000000..3867ac3
--- /dev/null
+++ b/bcm68620_release/release/host_customized/embedded_cli/Makefile
@@ -0,0 +1,13 @@
+# Host API
+#
+ifeq ("$(ENABLE_CLI)", "y")
+    MOD_NAME = embedded_cli
+    MOD_TYPE = lib
+    MOD_DEPS = transport model cli
+ifeq ("$(RELEASE_BUILD)", "y")
+    MOD_DEPS += common_api
+else
+    MOD_DEPS += api
+endif
+    srcs = bcmolt_embedded_cli.c
+endif
diff --git a/bcm68620_release/release/host_customized/embedded_cli/bcmolt_embedded_cli.c b/bcm68620_release/release/host_customized/embedded_cli/bcmolt_embedded_cli.c
new file mode 100644
index 0000000..0c5a8f7
--- /dev/null
+++ b/bcm68620_release/release/host_customized/embedded_cli/bcmolt_embedded_cli.c
@@ -0,0 +1,268 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+/*
+ * bcm_embedded_cli.c - embedded CLI access from the host
+ */
+
+#include <bcmos_system.h>
+#include <bcmolt_embedded_cli.h>
+#include <bcmolt_model_types.h>
+#include <bcmolt_api.h>
+#include <bcmtr_interface.h>
+#include <bcmcli.h>
+
+#define EMBEDDED_CLI_BUFFER_SIZE        2048
+#define EMBEDDED_CLI_TIMER_DELAY_US     100000
+
+/* Embedded CLI client context */
+typedef struct
+{
+    bcmolt_devid device;
+    bcmos_task task;
+    bcmos_timer timer;
+    bcmcli_session *session;
+    uint8_t inbuf[EMBEDDED_CLI_BUFFER_SIZE];
+    uint32_t inbuf_length;
+} embedded_cli_context;
+
+static embedded_cli_context *cli_context;
+
+static bcmos_timer_rc embedded_cli_timer_handler(bcmos_timer *timer, long data)
+{
+    /* FFU: this timer is for future line editing support */
+    return BCMOS_TIMER_OK;
+}
+
+static void embedded_cli_output_msg_handler(bcmolt_devid olt, bcmolt_msg *msg)
+{
+    bcmolt_debug_cli_input *cli_msg = (bcmolt_debug_cli_input *)msg;
+
+    if (cli_context && cli_msg->data.data.val)
+    {
+        /* print directly because output can contain ESC sequences */
+        uint8_t *val = cli_msg->data.data.val;
+        while (*val)
+        {
+            bcmos_putchar(*(val++));
+        }
+    }
+    bcmolt_msg_free(msg);
+}
+
+static void embedded_cli_send_input(embedded_cli_context *context)
+{
+    bcmolt_debug_key key = {};
+    bcmolt_debug_cli_input msg;
+    bcmolt_u8_list_u32 data = { context->inbuf_length, context->inbuf };
+
+    if (!context->inbuf_length)
+    {
+        return;
+    }
+    BCMOLT_OPER_INIT(&msg, debug, cli_input, key);
+    BCMOLT_OPER_PROP_SET(&msg, debug, cli_input, data, data);
+    bcmolt_oper_submit(context->device, &msg.hdr);
+    context->inbuf_length = 0;
+}
+
+/* Initialize embedded CLI module */
+bcmos_errno bcm_embedded_cli_enter(bcmcli_session *session, bcmolt_devid device)
+{
+    static char *embedded_cli_task_name = "embedded_cli";
+    bcmos_task_parm taskp =
+    {
+        .name = embedded_cli_task_name,
+        .priority = TASK_PRIORITY_CLI,
+        .data = device
+    };
+    bcmos_module_parm modulep = {};
+    bcmos_timer_parm timerp =
+    {
+        .owner = BCMOS_MODULE_ID_CLI_OVER_PCIE,
+        .handler = embedded_cli_timer_handler,
+        .data = device
+    };
+    bcmtr_handler_parm msgp =
+    {
+        .object = BCMOLT_OBJ_ID_DEBUG,
+        .group = BCMOLT_MGT_GROUP_AUTO,
+        .subgroup = BCMOLT_DEBUG_AUTO_ID_CLI_OUTPUT,
+        .module = BCMOS_MODULE_ID_CLI_OVER_PCIE,
+        .app_cb = embedded_cli_output_msg_handler,
+        .flags = BCMOLT_AUTO_FLAGS_DISPATCH
+    };
+    bcmtr_handler_parm old_msgp =
+    {
+        .object = BCMOLT_OBJ_ID_DEBUG,
+        .group = BCMOLT_MGT_GROUP_AUTO,
+        .subgroup = BCMOLT_DEBUG_AUTO_ID_CLI_OUTPUT,
+    };
+
+    int c;
+    bcmos_errno rc;
+    bcmos_bool raw_mode = BCMOS_FALSE;
+
+    /* Only 1 instance is supported */
+    if (cli_context)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_ALREADY, "embedded_cli client is already active for device %u\n",
+            cli_context->device);
+    }
+    cli_context = bcmos_calloc(sizeof(*cli_context));
+    if (!cli_context)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_NOMEM, "can't allocate embedded CLI context\n");
+    }
+    cli_context->session = session;
+    cli_context->device = device;
+
+    /* Create input/output task & module */
+    rc = bcmos_task_create(&cli_context->task, &taskp);
+    if (rc)
+    {
+        BCMOS_TRACE_ERR("Can't create embedded cli task: %s\n", bcmos_strerror(rc));
+        goto cleanup1;
+    }
+
+    modulep.data = (long)cli_context;
+    rc = bcmos_module_create(BCMOS_MODULE_ID_CLI_OVER_PCIE, &cli_context->task, &modulep);
+    if (rc)
+    {
+        BCMOS_TRACE_ERR("Can't create embedded cli module: %s\n", bcmos_strerror(rc));
+        goto cleanup2;
+    }
+
+    timerp.data = (long)cli_context;
+    rc = bcmos_timer_create(&cli_context->timer, &timerp);
+    if (rc)
+    {
+        BCMOS_TRACE_ERR("Can't create embedded cli timer: %s\n", bcmos_strerror(rc));
+        goto cleanup3;
+    }
+
+    /* Query existing indication in order to be able to restore it */
+    bcmtr_msg_handler_register_get(device, &old_msgp);
+
+    /* Unregister old handler */
+    bcmtr_msg_handler_unregister(device, &old_msgp);
+
+    /* Register for cli_output indication */
+    rc = bcmtr_msg_handler_register(device, &msgp);
+    if (rc)
+    {
+        BCMOS_TRACE_ERR("Can't register for cli_output indication: %s\n", bcmos_strerror(rc));
+        goto cleanup4;
+    }
+
+    bcmcli_session_print(session, "Device %u: Entering embedded CLI. Type %c to terminate\n",
+        device, BCM_EMBEDDED_CONSOLE_EXIT_CHAR);
+
+    /* Try to enter raw mode if line editing is requested */
+    rc = bcmcli_session_raw_mode_set(session, BCMOS_TRUE);
+    if (rc)
+    {
+        bcmcli_session_print(session, "Can't enable RAW input mode. Line editing is disabled\n");
+    }
+    else
+    {
+        raw_mode = BCMOS_TRUE;
+    }
+    /* No we read input and push it into input buffer */
+    if (raw_mode)
+    {
+        c = bcmos_getchar();
+        while (c >= 0 && c != BCM_EMBEDDED_CONSOLE_EXIT_CHAR)
+        {
+            cli_context->inbuf[cli_context->inbuf_length++] = c;
+            embedded_cli_send_input(cli_context);
+            c = bcmos_getchar();
+        }
+        bcmcli_session_raw_mode_set(session, BCMOS_FALSE);
+    }
+    else
+    {
+        /* Line mode */
+        char *buf;
+
+        buf = bcmcli_session_gets(session, (char *)cli_context->inbuf, sizeof(cli_context->inbuf));
+        while (buf && buf[0] != BCM_EMBEDDED_CONSOLE_EXIT_CHAR)
+        {
+            cli_context->inbuf_length = strlen(buf);
+            if (!cli_context->inbuf_length)
+                continue;
+            if (buf[cli_context->inbuf_length-1] != '\n' && buf[cli_context->inbuf_length-1] != '\r' &&
+                cli_context->inbuf_length < sizeof(cli_context->inbuf) - 1)
+            {
+                buf[cli_context->inbuf_length++] = '\n';
+            }
+            embedded_cli_send_input(cli_context);
+            buf = bcmcli_session_gets(session, (char *)cli_context->inbuf, sizeof(cli_context->inbuf));
+        }
+    }
+
+    bcmos_timer_stop(&cli_context->timer);
+    bcmcli_session_print(session, "Device %u: Embedded CLI terminated\n", device);
+    bcmtr_msg_handler_unregister(device, &msgp);
+    if (old_msgp.app_cb)
+        rc = bcmtr_msg_handler_register(device, &old_msgp);
+
+cleanup4:
+    bcmos_timer_destroy(&cli_context->timer);
+cleanup3:
+    bcmos_module_destroy(BCMOS_MODULE_ID_CLI_OVER_PCIE);
+cleanup2:
+    bcmos_task_destroy(&cli_context->task);
+cleanup1:
+    bcmos_free(cli_context);
+    cli_context = NULL;
+
+    return rc;
+}
+
+static bcmos_errno bcm_embedded_cli_command(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    bcmolt_devid device = parm[0].value.number;
+    return bcm_embedded_cli_enter(session, device);
+}
+
+/* Initialize embedded CLI module */
+bcmos_errno bcm_embedded_cli_init(void)
+{
+    BCMCLI_MAKE_CMD(NULL, "embedded", "Embedded CLI", bcm_embedded_cli_command,
+        BCMCLI_MAKE_PARM_RANGE("device", "Device index", BCMCLI_PARM_DECIMAL, 0, 0, BCMTR_MAX_OLTS-1));
+
+    return BCM_ERR_OK;
+}
+
+/* Cleanup embedded CVLI module */
+bcmos_errno bcm_embedded_cli_exit(void)
+{
+    return BCM_ERR_OK;
+}
diff --git a/bcm68620_release/release/host_customized/embedded_cli/bcmolt_embedded_cli.h b/bcm68620_release/release/host_customized/embedded_cli/bcmolt_embedded_cli.h
new file mode 100644
index 0000000..4a1e519
--- /dev/null
+++ b/bcm68620_release/release/host_customized/embedded_cli/bcmolt_embedded_cli.h
@@ -0,0 +1,64 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+/*
+ * bcm_embedded_cli.h - embedded CLI access from the host
+ */
+
+#ifndef BCMOLT_EMBEDDED_CLI_H_
+#define BCMOLT_EMBEDDED_CLI_H_
+
+#include <bcmcli_session.h>
+#include <bcmolt_msg.h>
+
+/* Character used to exit from embedded console */
+#define BCM_EMBEDDED_CONSOLE_EXIT_CHAR  '!'
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Initialize embedded CLI module */
+bcmos_errno bcm_embedded_cli_init(void);
+
+/* Cleanup embedded CLI module */
+bcmos_errno bcm_embedded_cli_exit(void);
+
+/* Connect to embedded CLI console.
+ * The function waits for user input and
+ * returns when encounters BCM_EMBEDDED_CONSOLE_EXIT_CHAR
+ */
+bcmos_errno bcm_embedded_cli_enter(bcmcli_session *session, bcmolt_devid device);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif
diff --git a/bcm68620_release/release/host_customized/embedded_cli/main/Makefile b/bcm68620_release/release/host_customized/embedded_cli/main/Makefile
new file mode 100644
index 0000000..c6f7c95
--- /dev/null
+++ b/bcm68620_release/release/host_customized/embedded_cli/main/Makefile
@@ -0,0 +1,9 @@
+# Embedded CLI console application
+#
+ifeq ("$(ENABLE_CLI)", "y")
+    MOD_NAME = embedded_console
+    MOD_TYPE = app
+    MOD_DEPS = embedded_cli
+    
+    srcs = bcmolt_embedded_console.c
+endif
diff --git a/bcm68620_release/release/host_customized/embedded_cli/main/bcmolt_embedded_console.c b/bcm68620_release/release/host_customized/embedded_cli/main/bcmolt_embedded_console.c
new file mode 100644
index 0000000..5ce767b
--- /dev/null
+++ b/bcm68620_release/release/host_customized/embedded_cli/main/bcmolt_embedded_console.c
@@ -0,0 +1,79 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#include <bcmos_system.h>
+#include <bcmolt_embedded_cli.h>
+
+static int _cli_help(void)
+{
+    fprintf(stderr, "embedded_console [-d device_index]");
+    return -1;
+}
+
+int main(int argc, char *argv[])
+{
+    bcmcli_session_parm mon_session_parm;
+    bcmcli_session *session;
+    int device = 0;
+    int i;
+
+    /* argc must be odd because all options except for argv[0] go in pairs */
+    if (!(argc % 2))
+    {
+        return _cli_help();
+    }
+
+    memset(&mon_session_parm, 0, sizeof(mon_session_parm));
+    mon_session_parm.access_right = BCMCLI_ACCESS_ADMIN;
+    for(i=1; i<argc; i++)
+    {
+        if (!strcmp(argv[i], "-d"))
+        {
+            char *pend;
+            ++i;
+            device = strtoul(argv[i], &pend, 0);
+            if (pend && *pend)
+                return _cli_help();
+        }
+    }
+
+    if (bcmcli_session_open(&mon_session_parm, &session))
+    {
+        printf("Can't open CLI session\n");
+        return -EINVAL;
+    }
+
+    /* Process user input until EOF or ! command */
+    bcm_embedded_cli_enter(session, device);
+
+    bcmcli_session_close(session);
+
+    return 0;
+}
+
diff --git a/bcm68620_release/release/host_customized/host_api_linux/Makefile b/bcm68620_release/release/host_customized/host_api_linux/Makefile
new file mode 100644
index 0000000..6ab83b5
--- /dev/null
+++ b/bcm68620_release/release/host_customized/host_api_linux/Makefile
@@ -0,0 +1,17 @@
+# Makefile for building host/host_api as linux library to be called from kernel modules
+#
+ifeq ("$(OS_KERNEL)", "linux")
+
+MOD_NAME = host_api_linux
+MOD_TYPE = linux_lib
+MOD_DEPS = common_gpon
+
+srcs = bcmolt_host_api.c
+
+# If called by linux kernel builder - add include paths manually.
+# It is not elegant, but we'll not have many linux modules
+ifneq ("$(KBUILD_SRC)", "")
+	-include $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
+endif
+endif
+
diff --git a/bcm68620_release/release/host_customized/host_api_linux/bcmolt_host_api.c b/bcm68620_release/release/host_customized/host_api_linux/bcmolt_host_api.c
new file mode 120000
index 0000000..420887e
--- /dev/null
+++ b/bcm68620_release/release/host_customized/host_api_linux/bcmolt_host_api.c
@@ -0,0 +1 @@
+../../host_driver/host_api/bcmolt_host_api.c
\ No newline at end of file
diff --git a/bcm68620_release/release/host_customized/host_api_linux/bcmolt_host_api.h b/bcm68620_release/release/host_customized/host_api_linux/bcmolt_host_api.h
new file mode 120000
index 0000000..0ebbe28
--- /dev/null
+++ b/bcm68620_release/release/host_customized/host_api_linux/bcmolt_host_api.h
@@ -0,0 +1 @@
+../../host_driver/host_api/bcmolt_host_api.h
\ No newline at end of file
diff --git a/bcm68620_release/release/host_customized/host_api_linux/bcmolt_host_api_gpon_utils.h b/bcm68620_release/release/host_customized/host_api_linux/bcmolt_host_api_gpon_utils.h
new file mode 120000
index 0000000..66be99e
--- /dev/null
+++ b/bcm68620_release/release/host_customized/host_api_linux/bcmolt_host_api_gpon_utils.h
@@ -0,0 +1 @@
+../../host_driver/host_api/bcmolt_host_api_gpon_utils.h
\ No newline at end of file
diff --git a/bcm68620_release/release/host_customized/i2c/Makefile b/bcm68620_release/release/host_customized/i2c/Makefile
new file mode 100644
index 0000000..333c2db
--- /dev/null
+++ b/bcm68620_release/release/host_customized/i2c/Makefile
@@ -0,0 +1,19 @@
+# I2C devices driver
+#
+ifeq ("$(OS_KERNEL)", "linux")
+
+MOD_NAME = i2c_devs
+MOD_TYPE = linux_module
+
+srcs = bcmolt_i2c_devs.c
+
+# If called by linux kernel builder - add include paths manually.
+# It is not elegant, but we'll not have many linux modules
+ifneq ("$(KBUILD_SRC)", "")
+	-include $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
+endif
+
+endif
+
+USE_LINT = yes
+
diff --git a/bcm68620_release/release/host_customized/i2c/bcmolt_i2c_devs.c b/bcm68620_release/release/host_customized/i2c/bcmolt_i2c_devs.c
new file mode 100644
index 0000000..48e9ec4
--- /dev/null
+++ b/bcm68620_release/release/host_customized/i2c/bcmolt_i2c_devs.c
@@ -0,0 +1,1038 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/slab.h>
+#include <linux/jiffies.h>
+#include <linux/i2c.h>
+#include <linux/err.h>
+#include <linux/cdev.h>
+#include <asm/uaccess.h> /*copy_from_user*/
+#include <linux/proc_fs.h>
+#include "bcmos_system.h"
+#include "bcmolt_i2c_devs.h"
+#include "bcmolt_i2c_devs_ioctl.h"
+
+#define BCM_I2C_DEV_ADDR_START typedef enum {
+#define BCM_I2C_DEV_ADDR(name, desc, val) name = val,
+#define BCM_I2C_DEV_ADDR_END } bcm_i2c_dev_addr;
+
+#include "bcmolt_i2c_devs_addr.h"
+
+#define PROC_DIR_NAME       "maple_i2c"
+#define PROC_ENTRY_NAME     "i2c"
+#define MAX_EAGAIN_ITERS    200 /* 10ms per iter */
+
+/* uncomment the next line to enable debug output to the kernel CLI */
+/* #define I2C_DEBUG_PRINTS 1 */
+#ifdef I2C_DEBUG_PRINTS
+#define i2c_debug_print(fmt, args...) printk("%s#%d: " fmt, __FUNCTION__, __LINE__, ## args)
+#else
+#define i2c_debug_print(...)
+#endif
+
+int maple_i2c_chrdev_major = 216;
+module_param(maple_i2c_chrdev_major, int, S_IRUSR | S_IRGRP | S_IWGRP);
+MODULE_PARM_DESC(maple_i2c_chrdev_major, "maple_i2c_major");
+
+static struct proc_dir_entry *i2c_proc_dir;
+static struct proc_dir_entry *i2c_proc_entry;
+static char is_chrdev_reg;
+static char is_cdev_add;
+static int i2c_client_num;
+static int i2c_num_clients;
+
+const unsigned short normal_i2c[] = {
+    I2C_SW0_I2C_ADDR,
+    I2C_SW1_I2C_ADDR,
+    I2C_SW2_I2C_ADDR,
+    I2C_SW3_I2C_ADDR,
+    I2C_SW4_I2C_ADDR,
+    SFP_I2C_ADDR1,
+    SFP_I2C_ADDR2,
+    FPGA_I2C_ADDR,
+    PON_DPLL_I2C_ADDR,
+    PM_DPLL_I2C_ADDR,
+    CXP_R_I2C_ADDR,
+    PCIE_SW_I2C_ADDR,
+    I2C_CLIENT_END
+};
+
+static unsigned char slave_valid[SLAVE_NUM_OF_SLAVES] = {0};
+
+/*
+ * Driver data (common to all clients)
+ */
+
+static const struct i2c_device_id maple_i2c_id_table[] = {
+    { "maple_i2c", 0 },
+    { }
+};
+MODULE_DEVICE_TABLE(i2c, maple_i2c_id_table);
+
+static void bcm_access_fpga(void);
+
+/*
+ * Client data (each client gets its own)
+ */
+struct maple_i2c_data {
+    struct i2c_client client;
+};
+
+static struct maple_i2c_data *pclient_data_ar[SLAVE_NUM_OF_SLAVES];
+
+static int get_client(unsigned char client_num, struct i2c_client **client)
+{
+    if ((client_num >= SLAVE_NUM_OF_SLAVES) || !slave_valid[client_num])
+    {
+        i2c_debug_print("I2C error: Wrong client number 0x%x\n", client_num);
+        return -1;
+    }
+    *client = &pclient_data_ar[client_num]->client;
+
+    return 0;
+}
+
+
+/*
+ * Helper functions which attempt I2C transfer until successful, or error code is other than -EAGAIN
+ */
+
+static int maple_i2c_send(unsigned char client_num, u8 *buf, size_t count)
+{
+    struct i2c_client *client;
+    int rc;
+    int niter = 0;
+
+    if (get_client(client_num, &client))
+        return -1;
+
+    do {
+        rc = i2c_master_send(client, buf, count);
+        if (rc == -EAGAIN)
+            msleep(10);
+    } while (rc == -EAGAIN && ++niter < MAX_EAGAIN_ITERS);
+    rc = (rc == count) ? 0 : (rc < 0 ) ? rc : -1;
+
+    return rc;
+}
+
+static int maple_i2c_recv(unsigned char client_num, u8 *buf, size_t count)
+{
+    struct i2c_client *client;
+    int rc;
+    int niter = 0;
+
+    if (get_client(client_num, &client))
+        return -1;
+
+    do {
+        rc = i2c_master_recv(client, buf, count);
+        if (rc == -EAGAIN)
+            msleep(10);
+    } while (rc == -EAGAIN && ++niter < MAX_EAGAIN_ITERS);
+    rc = (rc == count) ? 0 : (rc < 0 ) ? rc : -1;
+
+    return rc;
+}
+
+
+static int maple_i2c_read_with_offset(unsigned char client_num, u8 *offset, size_t offset_size, u8 *buf, size_t count)
+{
+    struct i2c_client *client;
+    struct i2c_msg msg[2];
+    int rc;
+    int niter = 0;
+
+    if (get_client(client_num, &client))
+        return -1;
+
+    msg[0].addr = msg[1].addr = client->addr;
+    msg[0].flags = msg[1].flags = client->flags & I2C_M_TEN;
+
+    msg[0].len = offset_size;
+    msg[0].buf = offset;
+
+    msg[1].flags |= I2C_M_RD;
+    msg[1].len = count;
+    msg[1].buf = buf;
+
+    do {
+        rc = i2c_transfer(client->adapter, msg, 2);
+        if (rc == -EAGAIN)
+            msleep(10);
+    } while (rc == -EAGAIN && ++niter < MAX_EAGAIN_ITERS);
+
+    rc = (rc == 2) ? 0 : (rc < 0 ) ? rc : -1;
+
+    return rc;
+}
+
+ssize_t maple_i2c_write(unsigned char client_num, char *buf, size_t count)
+{
+    int rc;
+
+    i2c_debug_print("Write to switch: client=0x%x val = 0x%x\n", normal_i2c[client_num], *buf);
+    rc = maple_i2c_send(client_num, (u8 *)buf, count);
+
+    if (rc < 0)
+        i2c_debug_print("Write Failed. rc=%d  client=%u[%u]\n", rc,
+            normal_i2c[client_num], client_num);
+    else
+        i2c_debug_print("Write Successful client=%u[%u]\n",
+            normal_i2c[client_num], client_num);
+    return rc;
+}
+EXPORT_SYMBOL(maple_i2c_write);
+
+ssize_t maple_i2c_read(unsigned char client_num, char *buf, size_t count)
+{
+    int rc;
+
+    i2c_debug_print("Read from switch: client 0x%x\n", normal_i2c[client_num]);
+    rc = maple_i2c_recv(client_num, (u8 *)buf, count);
+
+    if (rc < 0)
+        i2c_debug_print("Read Failed. rc=%d  client=%u[%u]\n", rc,
+            normal_i2c[client_num], client_num);
+    else
+        i2c_debug_print("Read Successful: count=%u val = 0x%x\n", (unsigned)count, *buf);
+    return rc;
+}
+EXPORT_SYMBOL(maple_i2c_read);
+
+int maple_i2c_write_byte(unsigned char client_num, unsigned char offset, unsigned char val)
+{
+    u8 buf[2];
+    int rc;
+
+    i2c_debug_print("Write Byte: client=0x%x offset = 0x%x, val = 0x%x\n", normal_i2c[client_num], offset, val);
+
+    buf[0] = offset;
+    buf[1] = val;
+    rc = maple_i2c_send(client_num, buf, 2);
+
+    if (rc < 0)
+        i2c_debug_print("Write Byte Failed. rc=%d  offset=0x%x val=0x%x client=%u[%u]\n",
+            rc, offset, val,
+            normal_i2c[client_num], client_num);
+    else
+        i2c_debug_print("Write Byte: offset=0x%x val=0x%x client=%u/%u\n",
+            offset, val,
+            normal_i2c[client_num], client_num);
+    return rc;
+}
+EXPORT_SYMBOL(maple_i2c_write_byte);
+
+int maple_i2c_read_byte(unsigned char client_num, unsigned char offset, unsigned char *data)
+{
+    u8 o = offset;
+    u8 val;
+    int rc;
+
+    i2c_debug_print("Write Byte: client=0x%x offset = 0x%x, val = 0x%x\n", normal_i2c[client_num], offset, val);
+
+    rc = maple_i2c_read_with_offset(client_num, &o, 1, &val, 1);
+
+    if (rc < 0)
+        i2c_debug_print("Read Byte Failed. rc=%d  client=%u[%u]\n", rc,
+            normal_i2c[client_num], client_num);
+    else
+    {
+        *data = val;
+        i2c_debug_print("Read Byte: client=0x%x offset = 0x%x, val = 0x%x\n",
+            normal_i2c[client_num], offset, *data);
+    }
+    return rc;
+}
+EXPORT_SYMBOL(maple_i2c_read_byte);
+
+
+int maple_i2c_write_word(unsigned char client_num, unsigned char offset, unsigned short val)
+{
+    u8 buf[3];
+    int rc;
+
+    i2c_debug_print("Write Word: offset = 0x%x, val = 0x%x\n", offset, val);
+
+    /* The offset to be written should be the first byte in the I2C write */
+    buf[0] = offset;
+    buf[1] = (char)(val&0xFF);
+    buf[2] = (char)(val>>8);
+    rc = maple_i2c_send(client_num, buf, sizeof(buf));
+
+    if (rc < 0)
+        i2c_debug_print("Write Word Failed. rc=%d  offset=0x%x val=0x%x, client=%u[%u]\n",
+            rc, offset, val,
+            normal_i2c[client_num], client_num);
+    else
+        i2c_debug_print("Write Word: offset=0x%x val=0x%x, client=%u[%u]\n",
+            offset, val,
+            normal_i2c[client_num], client_num);
+    return rc;
+}
+EXPORT_SYMBOL(maple_i2c_write_word);
+
+int maple_i2c_read_word(unsigned char client_num, unsigned char offset, unsigned short *data)
+{
+    u8 o = offset;
+    u8 buf[2];
+    int rc;
+
+    rc = maple_i2c_read_with_offset(client_num, &o, 1, buf, sizeof(buf));
+
+    if (rc < 0)
+        i2c_debug_print("Read Word Failed. rc=%d  offset=0x%x client=%u[%u]\n",
+            rc, offset,
+            normal_i2c[client_num], client_num);
+    else
+    {
+        *data = (buf[1]<<8) | buf[0]; /* I2C data is LE */
+        i2c_debug_print("Read Word: offset = 0x%x, val = 0x%x client=%u[%u]\n",
+            offset, *data,
+            normal_i2c[client_num], client_num);
+    }
+    return rc;
+}
+EXPORT_SYMBOL(maple_i2c_read_word);
+
+
+int maple_i2c_write_reg(unsigned char client_num, unsigned char offset, int val)
+{
+    u8 buf[5];
+    int rc;
+
+    i2c_debug_print("Write Register: offset = 0x%x, val = 0x%x\n", offset, val);
+
+    /* Set the buf[0] to be the offset for write operation */
+    buf[0] = offset;
+
+    /* On the I2C bus, LS Byte should go first */
+    buf[1] = val & 0xff;
+    buf[2] = (val >> 8) & 0xff;
+    buf[3] = (val >> 16) & 0xff;
+    buf[4] = (val >> 24) & 0xff;
+    rc = maple_i2c_send(client_num, buf, sizeof(buf));
+
+    if (rc < 0)
+        i2c_debug_print("Write Reg Failed. rc=%d offset=0x%x val=0x%x client=%u[%u]\n",
+            rc, offset, val,
+            normal_i2c[client_num], client_num);
+    else
+        i2c_debug_print("Write Reg Successful. offset=0x%x val=0x%x client=%u[%u]\n",
+            offset, val,
+            normal_i2c[client_num], client_num);
+    return rc;
+}
+EXPORT_SYMBOL(maple_i2c_write_reg);
+
+
+int maple_i2c_read_reg(unsigned char client_num, unsigned char offset, unsigned int *data)
+{
+    u8 o = offset;
+    u8 buf[4];
+    int rc;
+
+    rc = maple_i2c_read_with_offset(client_num, &o, 1, buf, sizeof(buf));
+
+    if (rc < 0)
+        i2c_debug_print("Read Reg Failed. rc=%d offset=0x%x client=%u[%u]\n",
+            rc, offset,
+            normal_i2c[client_num], client_num);
+    else
+    {
+        *data = buf[0] | (buf[1] << 8) | (buf[2] << 16) | (buf[3] << 24); /* LS byte is transferred first */
+        i2c_debug_print("Read Register: client=0x%x offset = 0x%x, val = 0x%x\n", normal_i2c[client_num], offset, *data);
+    }
+    return rc;
+}
+EXPORT_SYMBOL(maple_i2c_read_reg);
+
+
+int maple_i2c_write_fpga(unsigned char client_num, unsigned int offset, unsigned int val)
+{
+    u8 buf[8];
+    int rc;
+
+    bcm_access_fpga();
+
+    i2c_debug_print("Write fpga: offset = 0x%x, val = 0x%x\n", offset, val);
+
+    /* Set the offset for write operation */
+    //    offset = swab32(offset);
+    memcpy(&buf[0], (char*)&offset, 4);
+
+    /* On the I2C bus, LS Byte should go first */
+    //    val = swab32(val);
+    memcpy(&buf[4], (char*)&val, 4);
+
+    rc = maple_i2c_send(client_num, buf, sizeof(buf));
+
+    if (rc < 0)
+        i2c_debug_print("Write FPGA Failed. rc=%d offset=0x%x val=0x%x client=%u[%u]\n",
+            rc, offset, val,
+            normal_i2c[client_num], client_num);
+    else
+        i2c_debug_print("Write FPGA: offset=0x%x val=0x%x client=%u[%u]\n",
+            offset, val,
+            normal_i2c[client_num], client_num);
+    return rc;
+}
+EXPORT_SYMBOL(maple_i2c_write_fpga);
+
+int maple_i2c_read_fpga(unsigned char client_num, unsigned int offset, unsigned int *data)
+{
+    u8 obuf[4];
+    u8 buf[4];
+    int rc;
+
+    bcm_access_fpga();
+
+    /* FPGA expects 4 byte offset in BIG ENDIAN format */
+    obuf[0] = (offset >> 24) & 0xff;
+    obuf[1] = (offset >> 16) & 0xff;
+    obuf[2] = (offset >> 8) & 0xff;
+    obuf[3] = offset & 0xff;
+    rc = maple_i2c_read_with_offset(client_num, obuf, sizeof(obuf), buf, sizeof(buf));
+
+    if (rc < 0)
+        i2c_debug_print("Read FPGA Failed. rc=%d offset=0x%x client=%u[%u]\n",
+            rc, offset,
+            normal_i2c[client_num], client_num);
+    else
+    {
+        *data = buf[3] | (buf[2] << 8) | (buf[1] << 16) | (buf[0] << 24); /* MS byte is transferred first */
+        i2c_debug_print("Read FPGA: offset = 0x%x, val = 0x%x %02x %02x %02x %02x  client=%u[%u]\n",
+            offset, *data, buf[0], buf[1], buf[2], buf[3],
+            normal_i2c[client_num], client_num);
+    }
+    return rc;
+}
+EXPORT_SYMBOL(maple_i2c_read_fpga);
+
+enum client_num maple_i2c_get_client(u32 addr)
+{
+    enum client_num i = 0;
+    while (i < SLAVE_NUM_OF_SLAVES)
+    {
+        if (pclient_data_ar[i])
+        {
+            if (slave_valid[i] && pclient_data_ar[i]->client.addr == addr)
+            {
+                break;
+            }
+        }
+        i++;
+    }
+    return i;
+}
+EXPORT_SYMBOL(maple_i2c_get_client);
+
+static int dev_change(u32 addr)
+{
+    enum client_num i = maple_i2c_get_client(addr);
+
+    if (i < SLAVE_NUM_OF_SLAVES)
+    {
+        i2c_client_num = i;
+        i2c_debug_print("Slave was set successfully i %d, addr 0x%x\n", i, addr);
+    }
+    else
+    {
+        i2c_debug_print("Failed to set slave i %d, addr 0x%x\n", i, addr);
+    }
+
+    return 0;
+}
+
+static void bcm_access_fpga(void)
+{
+    static int access_enabled;
+    int fpga_client_num  = maple_i2c_get_client(I2C_SW1_I2C_ADDR);
+    uint8_t  b;
+
+    if (access_enabled)
+    	return;
+    b = 4;
+    maple_i2c_write(fpga_client_num, &b, 1);
+    access_enabled = 1;
+}
+#define BCM_FPGA_REG_RESETS 0x2
+#define BCM_FPGA_REG_FPGA_VERSION 0x0
+/* 1 = out of reset bcm_board_config_reset_value */
+void reset_maple(int bit,int param)
+{
+    int fpga_client_num  = maple_i2c_get_client(FPGA_I2C_ADDR);
+    int sw_client_num  = maple_i2c_get_client(I2C_SW0_I2C_ADDR);
+    uint8_t  b = 1;
+    uint32_t reset_values;
+
+    maple_i2c_write(sw_client_num, &b, 1);
+
+    /* Read-modify-write so we can set only the relevant bit */
+    maple_i2c_read_fpga(fpga_client_num, BCM_FPGA_REG_RESETS, &reset_values);
+
+    if (param)
+        reset_values |= 1 << bit;
+    else
+        reset_values &= ~(1 << bit);
+    maple_i2c_write_fpga(fpga_client_num, BCM_FPGA_REG_RESETS, reset_values);
+}
+EXPORT_SYMBOL(reset_maple);
+
+/* Calls the appropriate function based on user command */
+static int exec_command(const char *buf, size_t count)
+{
+#define MAX_ARGS 4
+#define MAX_ARG_SIZE 32
+    int i, argc = 0, val = 0;
+    char cmd;
+    u32 offset = 0;
+    char arg[MAX_ARGS][MAX_ARG_SIZE];
+#define LOG_WR_KBUF_SIZE 128
+    char kbuf[LOG_WR_KBUF_SIZE];
+
+    if ((count > LOG_WR_KBUF_SIZE-1) || (copy_from_user(kbuf, buf, count) != 0))
+        return -EFAULT;
+    kbuf[count]=0;
+    argc = sscanf(kbuf, "%c %s %s %s %s", &cmd, arg[0], arg[1], arg[2], arg[3]);
+
+    if (argc < 1)
+    {
+        printk("Need at-least 2 arguments\n");
+        return -EFAULT;
+    }
+
+    for (i=0; i<MAX_ARGS; ++i) {
+        arg[i][MAX_ARG_SIZE-1] = '\0';
+    }
+    offset = (u32)simple_strtoul(arg[0], NULL, 0);
+    if (argc == 3)
+        val = (int)simple_strtoul(arg[1], NULL, 0);
+
+    switch (cmd)
+    {
+    case 'm':
+        reset_maple(0,offset); // maple out of reset(1) | reset (0)
+        break;
+    case 'k':
+        reset_maple(4,offset); // katana2 out of reset(1) | reset (0)
+        break;
+    case 'b':
+        if (argc == 3)
+            maple_i2c_write_byte(i2c_client_num, (u8)offset, (u8)val);
+        else
+        {
+            u8 data;
+            maple_i2c_read_byte(i2c_client_num, (u8)offset, &data);
+            printk("client 0x%x, offset 0x%x, data=0x%x\n", normal_i2c[i2c_client_num], offset, data);
+        }
+        break;
+
+    case 's':
+        if (argc == 2)
+        {
+            u8 data = (u8)offset;
+            maple_i2c_write(i2c_client_num, &data, 1);
+        }
+        else
+        {
+            u8 data = offset;
+            maple_i2c_read(i2c_client_num, &data, 1);
+            printk("client 0x%x, data=0x%x\n", normal_i2c[i2c_client_num], data);
+        }
+        break;
+
+    case 'w':
+        if (argc == 3)
+            maple_i2c_write_word(i2c_client_num, (u8)offset, (u16)val);
+        else
+        {
+            u16 data;
+            maple_i2c_read_word(i2c_client_num, (u8)offset, &data);
+            printk("client 0x%x, offset 0x%x, data=0x%x\n", normal_i2c[i2c_client_num], offset, data);
+        }
+        break;
+
+    case 'd':
+        if (argc == 3)
+            maple_i2c_write_reg(i2c_client_num, (u8)offset, val);
+        else
+        {
+            u32 data;
+            maple_i2c_read_reg(i2c_client_num, (u8)offset, &data);
+            printk("client 0x%x, offset 0x%x, data=0x%x\n", normal_i2c[i2c_client_num], offset, data);
+        }
+        break;
+
+    case 'f':
+        if (argc == 3)
+            maple_i2c_write_fpga(i2c_client_num, offset, val);
+        else
+        {
+            u32 data;
+            maple_i2c_read_fpga(i2c_client_num, offset, &data);
+            printk("client 0x%x, offset 0x%x, data=0x%x\n", normal_i2c[i2c_client_num], offset, data);
+        }
+        break;
+
+    case 'c':
+        dev_change(offset);
+        break;
+
+    default:
+        printk("Invalid command.\n Valid commands:\n"
+            "  Change I2C Addr: c addr\n"
+            "  Write Reg:       d offset val\n"
+            "  Read Reg:        d offset\n"
+            "  Write Word:      w offset val\n"
+            "  Read Word:       w offset\n"
+            "  Write Byte:      b offset val\n"
+            "  Read Byte:       b offset\n"
+            "  Write fpga:      f offset val\n"
+            "  Read fpga:       f offset\n"
+            "  Write to switch: s val (one byte)\n"
+            "  Read from switch:s\n"
+            "  Maple:           m <0|1>\n"
+            "  Katana2:         k <0|1>\n"
+            );
+        break;
+    }
+    return count;
+}
+
+
+
+/* Read Function of PROCFS attribute "maple_i2c/test" */
+static ssize_t maple_i2c_proc_test_read(struct file *f, char *buf, size_t count,
+    loff_t *pos)
+{
+    printk(" Usage: echo command > "
+        " /proc/maple_i2c/test\n");
+    printk(" supported commands:\n"
+        "  Change I2C Addr: c addr\n"
+        "  Write Reg:       d offset val\n"
+        "  Read Reg:        d offset\n"
+        "  Write Word:      w offset val\n"
+        "  Read Word:       w offset\n"
+        "  Write Byte:      b offset val\n"
+        "  Read Byte:       b offset\n"
+        "  Write fpga:      f offset val\n"
+        "  Read fpga:       f offset\n"
+        "  Write to switch: s val (one byte)\n"
+        "  Read from switch:s\n"
+        );
+    return 0;
+}
+
+/* Write Function of PROCFS attribute "maple_i2c/test" */
+static ssize_t maple_i2c_proc_test_write(struct file *f, const char *buf,
+    size_t count, loff_t *pos)
+{
+    return exec_command(buf, count);
+}
+
+/* Return 0 if detection is successful, -ENODEV otherwise */
+static int maple_i2c_dev_detect(struct i2c_client *client, struct i2c_board_info *info)
+{
+    i2c_debug_print("detecting i2c device 0x%x\n", client->addr);
+
+    /* TODO: detection and identification */
+
+    strcpy(info->type, "maple_i2c");
+    info->flags = 0;
+    return 0;
+}
+
+static struct file_operations maple_i2c_fops =
+{
+    read: maple_i2c_proc_test_read,
+    write: maple_i2c_proc_test_write
+};
+
+static int maple_i2c_dev_create_proc(void)
+{
+    i2c_proc_dir = proc_mkdir(PROC_DIR_NAME, NULL);
+    if (!i2c_proc_dir)
+    {
+        i2c_debug_print("fail to create proc dir\n");
+        return -ENOMEM;
+    }
+
+    i2c_proc_entry = create_proc_entry(PROC_ENTRY_NAME, 0, i2c_proc_dir);
+    if (!i2c_proc_entry)
+    {
+        remove_proc_entry(PROC_DIR_NAME, NULL);
+        return -ENOMEM;
+    }
+
+    i2c_proc_entry->proc_fops = &maple_i2c_fops;
+
+    return 0;
+}
+
+static int maple_i2c_chrdev_open(struct inode *inode, struct file *filp)
+{
+    return 0;
+}
+
+static int maple_i2c_chrdev_release(struct inode *inode, struct file *filp)
+{
+    return 0;
+}
+
+static long maple_i2c_chrdev_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
+{
+    int linux_rc = 0;
+    int rc;
+    maple_i2c_ioctl_param params;
+
+    /* don't even decode wrong cmds: better returning  ENOTTY than EFAULT */
+    if (_IOC_TYPE(cmd) != MAPLE_I2C_IOCTL_MAGIC)
+        return -ENOTTY;
+
+    /*
+     * the type is a bitmask, and VERIFY_WRITE catches R/W
+     * transfers. Note that the type is user-oriented, while
+     * verify_area is kernel-oriented, so the concept of "read" and
+     * "write" is reversed
+     */
+    if (_IOC_DIR(cmd) & _IOC_READ)
+        linux_rc = !access_ok(VERIFY_WRITE, (void __user *)arg, _IOC_SIZE(cmd));
+    else if (_IOC_DIR(cmd) & _IOC_WRITE)
+        linux_rc =  !access_ok(VERIFY_READ, (void __user *)arg, _IOC_SIZE(cmd));
+    if (linux_rc)
+        return -EFAULT;
+
+    switch (cmd)
+    {
+    case MAPLE_I2C_IOCTL_OP_DEV_CHANGE:
+        {
+            linux_rc = copy_from_user((char *)&params, (char *)arg, sizeof(params));
+            if (linux_rc < 0)
+                break;
+            return dev_change(params.addr);
+        }
+        break;
+    case MAPLE_I2C_IOCTL_OP_DEV_WRITE:
+        {
+            linux_rc = copy_from_user((char *)&params, (char *)arg, sizeof(params));
+            if (linux_rc < 0)
+                break;
+            switch (params.count)
+            {
+            case 8:
+                return maple_i2c_write_byte(i2c_client_num, params.addr, params.val);
+            case 16:
+                return maple_i2c_write_word(i2c_client_num, params.addr, params.val);
+            case 32:
+                return maple_i2c_write_reg(i2c_client_num, params.addr, params.val);
+            default:
+                return -EINVAL;
+            }
+        }
+        break;
+    case MAPLE_I2C_IOCTL_OP_DEV_READ:
+        {
+            unsigned char b;
+            unsigned short w;
+            unsigned int r;
+
+            linux_rc = copy_from_user((char *)&params, (char *)arg, sizeof(params));
+            if (linux_rc < 0)
+                break;
+            switch (params.count)
+            {
+            case 8:
+                linux_rc = maple_i2c_read_byte(i2c_client_num, params.addr, &b);
+                if (linux_rc < 0)
+                    break;
+                params.val = b;
+                break;
+            case 16:
+                linux_rc = maple_i2c_read_word(i2c_client_num, params.addr, &w);
+                if (linux_rc < 0)
+                    break;
+                params.val = w;
+                break;
+            case 32:
+                linux_rc = maple_i2c_read_reg(i2c_client_num, params.addr, &r);
+                if (linux_rc < 0)
+                    break;
+                params.val = r;
+                break;
+            default:
+                return -EINVAL;
+            }
+            if (linux_rc < 0)
+                break;
+            return copy_to_user((char *)arg, (char *)&params, sizeof(params));
+        }
+    case MAPLE_I2C_IOCTL_OP_SWITCH_WRITE:
+        {
+            char b;
+
+            linux_rc = copy_from_user((char *)&params, (char *)arg, sizeof(params));
+            if (linux_rc < 0)
+                break;
+            b = params.val;
+            return maple_i2c_write(i2c_client_num, &b, 1);
+        }
+    case MAPLE_I2C_IOCTL_OP_SWITCH_READ:
+        {
+            char b;
+
+            linux_rc = maple_i2c_read(i2c_client_num, &b, 1);
+            if (linux_rc < 0)
+                break;
+            params.val = b;
+            return copy_to_user((char *)arg, (char *)&params, sizeof(params));
+        }
+    case MAPLE_I2C_IOCTL_OP_FPGA_WRITE:
+        {
+            linux_rc = copy_from_user((char *)&params, (char *)arg, sizeof(params));
+            if (linux_rc < 0)
+                break;
+            return maple_i2c_write_fpga(i2c_client_num, params.addr, params.val);
+        }
+    case MAPLE_I2C_IOCTL_OP_FPGA_READ:
+        {
+            linux_rc = copy_from_user((char *)&params, (char *)arg, sizeof(params));
+            if (linux_rc < 0)
+                break;
+            linux_rc = maple_i2c_read_fpga(i2c_client_num, params.addr, &params.val);
+            if (linux_rc < 0)
+                break;
+            return copy_to_user((char *)arg, (char *)&params, sizeof(params));
+        }
+    default:
+        rc = -ENOTTY;
+        break;
+    }
+
+    return linux_rc;
+}
+
+static ssize_t maple_i2c_chrdev_write(struct file *filp, const char __user *buf,
+    size_t count, loff_t *f_pos)
+{
+    return 0;
+}
+
+static struct file_operations maple_i2c_chrdev_fops =
+{
+    .owner = THIS_MODULE,
+    .open = maple_i2c_chrdev_open,
+    .release = maple_i2c_chrdev_release,
+    .write = maple_i2c_chrdev_write,
+    .unlocked_ioctl = maple_i2c_chrdev_ioctl
+};
+
+static struct cdev maple_i2c_chrdev_cdev;
+
+static int maple_i2c_dev_create_chrdev(void)
+{
+    dev_t dev = MKDEV(maple_i2c_chrdev_major, 0);
+    int linux_rc;
+
+    is_chrdev_reg = 0;
+    is_cdev_add = 0;
+    /*
+     * Register your major, and accept a dynamic number.
+     */
+    if (!maple_i2c_chrdev_major)
+        return -1;
+    linux_rc = register_chrdev_region(dev, 0, "maple_i2c");
+    if (linux_rc < 0)
+    {
+        i2c_debug_print("register_chrdev_region()->%d\n", linux_rc);
+        return -EIO;
+    }
+    is_chrdev_reg = 1;
+
+    cdev_init(&maple_i2c_chrdev_cdev, &maple_i2c_chrdev_fops);
+    linux_rc = cdev_add(&maple_i2c_chrdev_cdev, dev, 1);
+    if (linux_rc < 0)
+    {
+        i2c_debug_print("cdev_add()->%d\n", linux_rc);
+        return -EIO;
+    }
+    is_cdev_add = 1;
+
+    return 0;
+}
+
+static int maple_i2c_dev_probe(struct i2c_client *client, const struct i2c_device_id *id)
+{
+    int err = 0;
+    struct maple_i2c_data *pclient_data;
+
+    i2c_debug_print("!!!! i2c device 0x%x probe\n", client->addr);
+
+    if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C))
+        goto exit;
+
+    if (!(pclient_data = kzalloc(sizeof(struct maple_i2c_data), GFP_KERNEL)))
+    {
+        err = -ENOMEM;
+        goto exit;
+    }
+
+    pclient_data->client.addr = client->addr;
+    pclient_data->client.adapter = client->adapter;
+    pclient_data->client.driver = client->driver;
+    pclient_data->client.flags = client->flags;
+
+    i2c_set_clientdata(client, pclient_data);
+
+    switch(client->addr)
+    {
+    case I2C_SW0_I2C_ADDR:
+        pclient_data_ar[SLAVE_SWITCH_70] = pclient_data;
+        slave_valid[SLAVE_SWITCH_70] = 1;
+        break;
+    case I2C_SW1_I2C_ADDR:
+        pclient_data_ar[SLAVE_SWITCH_71] = pclient_data;
+        slave_valid[SLAVE_SWITCH_71] = 1;
+        break;
+    case I2C_SW2_I2C_ADDR:
+        pclient_data_ar[SLAVE_SWITCH_72] = pclient_data;
+        slave_valid[SLAVE_SWITCH_72] = 1;
+        break;
+    case I2C_SW3_I2C_ADDR:
+        pclient_data_ar[SLAVE_SWITCH_73] = pclient_data;
+        slave_valid[SLAVE_SWITCH_73] = 1;
+        break;
+    case I2C_SW4_I2C_ADDR:
+        pclient_data_ar[SLAVE_SWITCH_74] = pclient_data;
+        slave_valid[SLAVE_SWITCH_74] = 1;
+        break;
+    case SFP_I2C_ADDR1:
+        pclient_data_ar[SLAVE_SFP_50] = pclient_data;
+        slave_valid[SLAVE_SFP_50] = 1;
+        break;
+    case SFP_I2C_ADDR2:
+        pclient_data_ar[SLAVE_SFP_51] = pclient_data;
+        slave_valid[SLAVE_SFP_51] = 1;
+        break;
+    case FPGA_I2C_ADDR:
+        pclient_data_ar[SLAVE_FPGA_40] = pclient_data;
+        slave_valid[SLAVE_FPGA_40] = 1;
+        break;
+    case PON_DPLL_I2C_ADDR:
+        pclient_data_ar[SLAVE_PON_DPLL_68] = pclient_data;
+        slave_valid[SLAVE_PON_DPLL_68] = 1;
+        break;
+    case PM_DPLL_I2C_ADDR:
+        pclient_data_ar[SLAVE_PM_DPLL_6A] = pclient_data;
+        slave_valid[SLAVE_PM_DPLL_6A] = 1;
+        break;
+    case CXP_R_I2C_ADDR:
+        pclient_data_ar[SLAVE_CXP_R_54] = pclient_data;
+        slave_valid[SLAVE_CXP_R_54] = 1;
+        break;
+    case PCIE_SW_I2C_ADDR:
+        pclient_data_ar[SLAVE_PCIE_SW_3C] = pclient_data;
+        slave_valid[SLAVE_PCIE_SW_3C] = 1;
+        break;
+    default:
+        i2c_debug_print("%s client addr out of range 0x%x\n", __FUNCTION__, client->addr);
+        goto exit_kfree;
+    }
+
+    /* Create only once */
+    if (i2c_proc_entry == NULL)
+    {
+        if (maple_i2c_dev_create_proc() < 0)
+            goto exit_kfree;
+    }
+    if (!is_cdev_add)
+    {
+        if (maple_i2c_dev_create_chrdev() < 0)
+            goto exit_kfree;
+    }
+    ++i2c_num_clients;
+
+    return 0;
+
+exit_kfree:
+    kfree(pclient_data);
+exit:
+    return err;
+}
+
+static int maple_i2c_dev_remove(struct i2c_client *client)
+{
+    kfree(i2c_get_clientdata(client));
+    --i2c_num_clients;
+    if (!i2c_num_clients)
+    {
+        if (i2c_proc_entry != NULL)
+        {
+            remove_proc_entry(PROC_ENTRY_NAME, i2c_proc_dir);
+            i2c_proc_entry = NULL;
+        }
+        if (i2c_proc_dir != NULL)
+        {
+            remove_proc_entry(PROC_DIR_NAME, NULL);
+            i2c_proc_dir = NULL;
+        }
+        if (is_cdev_add)
+        {
+            cdev_del(&maple_i2c_chrdev_cdev);
+            is_cdev_add = 0;
+        }
+        if (is_chrdev_reg)
+        {
+            unregister_chrdev_region(MKDEV(maple_i2c_chrdev_major, 0), 1);
+            is_chrdev_reg = 0;
+        }
+    }
+
+    return 0;
+}
+
+static struct i2c_driver maple_i2c_dev_driver = {
+    .class		= ~0,
+    .driver = {
+        .name	= "maple_i2c",
+    },
+    .probe		= maple_i2c_dev_probe,
+    .remove		= maple_i2c_dev_remove,
+    .id_table	= maple_i2c_id_table,
+    .detect		= maple_i2c_dev_detect,
+    .address_list	= normal_i2c,
+};
+
+module_i2c_driver(maple_i2c_dev_driver);
+
+MODULE_DESCRIPTION("maple i2c devices");
+MODULE_LICENSE("GPL");
+
diff --git a/bcm68620_release/release/host_customized/i2c/bcmolt_i2c_devs.h b/bcm68620_release/release/host_customized/i2c/bcmolt_i2c_devs.h
new file mode 100644
index 0000000..ad0edaa
--- /dev/null
+++ b/bcm68620_release/release/host_customized/i2c/bcmolt_i2c_devs.h
@@ -0,0 +1,226 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef _BCMOLT_I2C_DEVS_H_
+#define _BCMOLT_I2C_DEVS_H_
+
+/* When inserting the module (with insmod) onlt the I2C switch devices (I2C_SWX_I2C_ADDR) 
+   will be automatically detected, and therefore will be probed.
+   Probing all other devices can be done after inerting the module via sysfs.
+   for example, in order to probe FPGA device, the following line should be applied:
+   -- echo maple_i2c FPGA_I2C_ADDR > /sys/bus/i2c/devices/i2c-0/new_device --
+*/ 
+enum client_num
+{
+    SLAVE_SWITCH_70    = 0,
+    SLAVE_SWITCH_71    = 1,
+    SLAVE_SWITCH_72    = 2,
+    SLAVE_SWITCH_73    = 3,
+    SLAVE_SWITCH_74    = 4,
+    SLAVE_SFP_50       = 5,
+    SLAVE_SFP_51       = 6,
+    SLAVE_FPGA_40      = 7,
+    SLAVE_PON_DPLL_68  = 8,
+    SLAVE_PM_DPLL_6A   = 9,
+    SLAVE_CXP_R_54     = 10,
+    SLAVE_PCIE_SW_3C   = 11,
+    SLAVE_NUM_OF_SLAVES
+};
+
+
+/*****************************************************************
+   maple_i2c_write
+
+   DESCRIPTION:
+       Writes serially data to I2C device
+
+   PARAMETERS:
+       client num - The client to write to.
+       buf        - The buffer to write.
+       count      - Number of bytes to write
+
+   OUTPUT:
+       The number of bytes that were written, when fails return negative number
+********************************************************************/
+ssize_t maple_i2c_write(unsigned char client_num, char *buf, size_t count);
+
+/*****************************************************************
+   maple_i2c_read
+
+   DESCRIPTION:
+       Read serially data from I2C device
+
+   PARAMETERS:
+       client num - The client to write to.
+       buf        - The buffer to read to.
+       count      - Number of bytes to read
+
+   OUTPUT:
+       The number of bytes that were read, when fails return negative number
+********************************************************************/
+ssize_t maple_i2c_read(unsigned char client_num, char *buf, size_t count);
+
+/*****************************************************************
+   maple_i2c_write_byte
+
+   DESCRIPTION:
+       Write byte to I2C device
+
+   PARAMETERS:
+       client num - The client to write to.
+       offset     - The offset to write to.
+       val        - Tha data to write.
+
+   OUTPUT:
+       0 on success, -1 on failure.
+********************************************************************/
+int maple_i2c_write_byte(unsigned char client_num, unsigned char offset, unsigned char val);
+
+/*****************************************************************
+   maple_i2c_read_byte
+
+   DESCRIPTION:
+       Read byte from I2C device
+
+   PARAMETERS:
+       client num - The client to read from.
+       offset     - The offset to read from.
+       data       - the read value is written to this pointer.
+   OUTPUT:
+       0 on success, -1 on failure.
+********************************************************************/
+int maple_i2c_read_byte(unsigned char client_num, unsigned char offset, unsigned char* data);
+
+/*****************************************************************
+   maple_i2c_write_word
+
+   DESCRIPTION:
+       Write 16 bit word to I2C device
+
+   PARAMETERS:
+       client num - The client to write to.
+       offset     - The offset to write to.
+       val        - Tha data to write.
+
+   OUTPUT:
+       0 on success, -1 on failure.
+********************************************************************/
+int maple_i2c_write_word(unsigned char client_num, unsigned char offset, unsigned short val);
+
+/*****************************************************************
+   maple_i2c_read_word
+
+   DESCRIPTION:
+       Read 16 bit word from I2C device
+
+   PARAMETERS:
+       client num - The client to read from.
+       offset     - The offset to read from.
+       data       - the read value is written to this pointer.
+   OUTPUT:
+       0 on success, -1 on failure.
+********************************************************************/
+int maple_i2c_read_word(unsigned char client_num, unsigned char offset, unsigned short* data);
+
+/*****************************************************************
+   maple_i2c_write_reg
+
+   DESCRIPTION:
+       Write 32 bit register to I2C device
+
+   PARAMETERS:
+       client num - The client to write to.
+       offset     - The offset to write to.
+       val        - Tha data to write.
+
+   OUTPUT:
+       0 on success, -1 on failure.
+********************************************************************/
+int maple_i2c_write_reg(unsigned char client_num, unsigned char offset, int val);
+
+/*****************************************************************
+   maple_i2c_read_reg
+
+   DESCRIPTION:
+       Read 32 bit word from I2C device
+
+   PARAMETERS:
+       client num - The client to read from.
+       offset     - The offset to read from.
+       data       - the read value is written to this pointer.
+   OUTPUT:
+       0 on success, -1 on failure.
+********************************************************************/
+int maple_i2c_read_reg(unsigned char client_num, unsigned char offset, unsigned int* data);
+
+/*****************************************************************
+   maple_i2c_write_fpga
+
+   DESCRIPTION:
+       Write 32 bit register to I2C fpga device
+
+   PARAMETERS:
+       client num - The client to write to.
+       offset     - The offset to write to.
+       val        - Tha data to write.
+
+   OUTPUT:
+       0 on success, -1 on failure.
+********************************************************************/
+int maple_i2c_write_fpga(unsigned char client_num, unsigned int offset, unsigned int val);
+
+/*****************************************************************
+   maple_i2c_read_fpga
+
+   DESCRIPTION:
+       Read 32 bit word from I2C fpga device
+
+   PARAMETERS:
+       client num - The client to read from.
+       offset     - The offset to read from.
+       data       - the read value is written to this pointer.
+   OUTPUT:
+       0 on success, -1 on failure.
+********************************************************************/
+int maple_i2c_read_fpga(unsigned char client_num, unsigned int offset, unsigned int* data);
+
+/*****************************************************************
+   maple_i2c_get_client
+
+   DESCRIPTION:
+       Gets an I2C client number from an address
+
+   PARAMETERS:
+       addr       - The address of the client.
+   OUTPUT:
+       The client number for this client, or SLAVE_NUM_OF_SLAVES on failure.
+********************************************************************/
+enum client_num maple_i2c_get_client(unsigned int addr);
+
+#endif   /* _MAPLE_I2C_DEVS_H_ */
diff --git a/bcm68620_release/release/host_customized/i2c/bcmolt_i2c_devs_addr.h b/bcm68620_release/release/host_customized/i2c/bcmolt_i2c_devs_addr.h
new file mode 100644
index 0000000..f1a9a2c
--- /dev/null
+++ b/bcm68620_release/release/host_customized/i2c/bcmolt_i2c_devs_addr.h
@@ -0,0 +1,50 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef _BCMOLT_I2C_DEVS_ADDR_H_
+#define _BCMOLT_I2C_DEVS_ADDR_H_
+
+BCM_I2C_DEV_ADDR_START
+BCM_I2C_DEV_ADDR(I2C_SW0_I2C_ADDR, "sw0", 0x70)
+BCM_I2C_DEV_ADDR(I2C_SW1_I2C_ADDR, "sw1", 0x71)
+BCM_I2C_DEV_ADDR(I2C_SW2_I2C_ADDR, "sw2", 0x72)
+BCM_I2C_DEV_ADDR(I2C_SW3_I2C_ADDR, "sw3", 0x73)
+BCM_I2C_DEV_ADDR(I2C_SW4_I2C_ADDR, "sw4", 0x74)
+BCM_I2C_DEV_ADDR(SFP_I2C_ADDR1, "sfp1", 0x50)
+BCM_I2C_DEV_ADDR(SFP_I2C_ADDR2, "sfp2", 0x51)
+BCM_I2C_DEV_ADDR(FPGA_I2C_ADDR, "fpga", 0x40)
+BCM_I2C_DEV_ADDR(PON_DPLL_I2C_ADDR, "pon_dpll", 0x68)
+BCM_I2C_DEV_ADDR(PM_DPLL_I2C_ADDR, "pm_dpll", 0x6a)
+BCM_I2C_DEV_ADDR(CXP_T_I2C_ADDR, "cxp_t", 0x50)
+BCM_I2C_DEV_ADDR(CXP_R_I2C_ADDR, "cxp_r", 0x54)
+BCM_I2C_DEV_ADDR(PCIE_SW_I2C_ADDR, "pcie_sw", 0x3c)
+BCM_I2C_DEV_ADDR_END
+
+#endif
+
diff --git a/bcm68620_release/release/host_customized/i2c/bcmolt_i2c_devs_ioctl.h b/bcm68620_release/release/host_customized/i2c/bcmolt_i2c_devs_ioctl.h
new file mode 100644
index 0000000..e15f71a
--- /dev/null
+++ b/bcm68620_release/release/host_customized/i2c/bcmolt_i2c_devs_ioctl.h
@@ -0,0 +1,24 @@
+#ifndef _BCMOLT_I2C_DEVS_IOCTL_H_
+#define _BCMOLT_I2C_DEVS_IOCTL_H_
+
+#include <linux/ioctl.h>
+
+typedef struct
+{
+    uint32_t count;
+    uint32_t addr;
+    uint32_t val;
+} maple_i2c_ioctl_param;
+
+#define MAPLE_I2C_IOCTL_MAGIC 'I'
+
+#define MAPLE_I2C_IOCTL_OP_DEV_CHANGE _IOW(MAPLE_I2C_IOCTL_MAGIC, 1, maple_i2c_ioctl_param)
+#define MAPLE_I2C_IOCTL_OP_DEV_WRITE _IOW(MAPLE_I2C_IOCTL_MAGIC, 2, maple_i2c_ioctl_param)
+#define MAPLE_I2C_IOCTL_OP_DEV_READ _IOWR(MAPLE_I2C_IOCTL_MAGIC, 3, maple_i2c_ioctl_param)
+#define MAPLE_I2C_IOCTL_OP_SWITCH_WRITE _IOW(MAPLE_I2C_IOCTL_MAGIC, 4, maple_i2c_ioctl_param)
+#define MAPLE_I2C_IOCTL_OP_SWITCH_READ _IOR(MAPLE_I2C_IOCTL_MAGIC, 5, maple_i2c_ioctl_param)
+#define MAPLE_I2C_IOCTL_OP_FPGA_WRITE _IOW(MAPLE_I2C_IOCTL_MAGIC, 6, maple_i2c_ioctl_param)
+#define MAPLE_I2C_IOCTL_OP_FPGA_READ _IOWR(MAPLE_I2C_IOCTL_MAGIC, 7, maple_i2c_ioctl_param)
+
+#endif
+
diff --git a/bcm68620_release/release/host_customized/ll_pcie/Makefile b/bcm68620_release/release/host_customized/ll_pcie/Makefile
new file mode 100755
index 0000000..db7aa7d
--- /dev/null
+++ b/bcm68620_release/release/host_customized/ll_pcie/Makefile
@@ -0,0 +1,36 @@
+MOD_NAME = ll_pcie
+MOD_SUPPRESS_OS_DEP = y
+MOD_DEPS = board_selector
+
+ifeq ("$(RELEASE_BUILD)", "y")
+	EXTRA_CFLAGS += -I$(SRC_DIR) -I$(TOP_DIR)/host_customized/os_abstraction 
+	EXTRA_CFLAGS += -I$(TOP_DIR)/host_customized/os_abstraction/linux -I$(TOP_DIR)/host_driver/config
+else
+	EXTRA_CFLAGS += -I$(SRC_DIR) -I$(TOP_DIR)/common/os_abstraction -I$(TOP_DIR)/host/config
+	EXTRA_CFLAGS += -I$(TOP_DIR)/common/os_abstraction/linux -I$(TOP_DIR)/host/os_abstraction/$(PLATFORM)
+endif
+
+ifeq ("$(ENABLE_TRACE)", "y")
+	MOD_DEFS += -DTX_ENABLE_EVENT_TRACE
+	EXTRA_CFLAGS += -I$(TOP_DIR)/common/drivers/maple/fld
+    ifeq ("$(DEBUG_TRACE_INIT)", "y")
+       MOD_DEFS += -DDEBUG_TRACE_INIT
+    endif
+endif
+
+ifeq ("$(OS_KERNEL)", "linux")
+    MOD_TYPE = linux_module
+    srcs = bcmolt_llpcie.c 
+else
+    MOD_TYPE = lib
+endif
+
+# If called by linux kernel builder - add include paths manually.
+# It is not elegant, but we'll not have many linux modules
+ifneq ("$(KBUILD_SRC)", "")
+	-include $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
+endif
+
+USE_LINT = yes
+
+
diff --git a/bcm68620_release/release/host_customized/ll_pcie/bcmolt_llpcie.c b/bcm68620_release/release/host_customized/ll_pcie/bcmolt_llpcie.c
new file mode 100755
index 0000000..4bb1507
--- /dev/null
+++ b/bcm68620_release/release/host_customized/ll_pcie/bcmolt_llpcie.c
@@ -0,0 +1,1010 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+/*
+    might use readl or ioread32
+*/
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/compiler.h>
+#include <linux/pci.h>
+#include <linux/pci_regs.h>
+#include <linux/init.h>
+#include <linux/errno.h>
+#include <linux/string.h>
+#include <linux/proc_fs.h>
+#include <linux/delay.h>
+#include <linux/io.h>
+#include <linux/uaccess.h>
+#include <linux/gfp.h>
+#include <linux/interrupt.h>
+#include <linux/types.h>
+#include <linux/spinlock.h>
+
+#ifdef TX_ENABLE_EVENT_TRACE
+#include <linux/ctype.h>
+#include <linux/file.h>
+#include <linux/fs.h>
+#include "bcm_fld_common.h"
+#endif
+#include <bcmolt_board_selector.h>
+#include "bcmolt_llpcie.h"
+
+#define DRV_NAME	"maple"
+#define DRV_VERSION	"1.0.3"
+
+#define BAR_REGS                        0
+#define BAR_DDR                         2
+#define BAR_SRAM                        4
+/*
+bar 1 = 8  Mbyte register space
+bar 2 = 16 Mbyte DDR space
+bar 3 = 64 Kbyte SRAM space
+*/
+#define MAPLE_REGS_LENGTH                   0x00800000
+#define MAPLE_DDR_LENGTH                    0x01000000
+#define MAPLE_SRAM_LENGTH                   0x00010000
+
+#ifdef TX_ENABLE_EVENT_TRACE
+#define PCIE_PCIE_0_MISC_CPU_2_PCIE_MEM_WIN1_LO			0x064014U
+#define PCIE_PCIE_0_MISC_CPU_2_PCIE_MEM_WIN1_HI			0x064018U
+#define PCIE_PCIE_0_MISC_CPU_2_PCIE_MEM_WIN1_BASE_LIMIT	0x064074U
+#endif
+#define PCIE_REVISION_REGISTER_OFFSET       0x6406CU /* PCIE_PCIE_PCIE_0_PCIE_PCIE_0_MISC_REVISION    */
+#define PCIE_STATUS_REGISTER_OFFSET         0x64068U /* PCIE_PCIE_PCIE_0_PCIE_PCIE_0_MISC_PCIE_STATUS */
+#define PCIE_HARD_DEBUG_REGISTER_OFFSET     0x64204U /* PCIE_PCIE_PCIE_0_PCIE_PCIE_0_MISC_HARD_DEBUG  */
+#define PCIE_INT_STATUS_REGISTER_OFFSET     0x69400U /* PCIE_PCIE_PCIE_0_CPU_INTR1_INTR_STATUS        */
+#define PCIE_INT_CLEAR_MASK_OFFSET          0x6940CU /* PCIE_PCIE_PCIE_0_CPU_INTR1_INTR_MASK_CLEAR    */
+#define PCIE_INTR1_STATUS_REGISTER_OFFSET   0x69300U /* Interrupt Status Register */
+
+#define PCIE_MAPLE_VENDOR_ID                0x14E4 /* PCIE_CFG_TYPE0_EP_SUBSYSTEM_ID_VENDOR_ID      */
+#define PCIE_MAPLE_DEVICE_ID                0x6862
+#define PCIE_MAPLE_6863_SKU_DEVICE_ID       0x6863
+#define PCIE_MAPLE_EPON_DEVICE_ID           0x5554
+
+#define MAPLE_DRIVER_NAME   DRV_NAME " BCM68620 (Maple) PCI driver " DRV_VERSION
+
+struct proc_dir_entry *bcmolt_dir = NULL;
+static DEFINE_PCI_DEVICE_TABLE(maple_pci_tbl) =
+{ /* vendor_id,                  device_id,       any,       any */
+    {PCI_DEVICE(PCIE_MAPLE_VENDOR_ID, PCIE_MAPLE_DEVICE_ID)},
+    {PCI_DEVICE(PCIE_MAPLE_VENDOR_ID, PCIE_MAPLE_6863_SKU_DEVICE_ID)},
+    {PCI_DEVICE(PCIE_MAPLE_VENDOR_ID, PCIE_MAPLE_EPON_DEVICE_ID)},
+    {0}
+};
+MODULE_DEVICE_TABLE (pci, maple_pci_tbl);
+
+typedef struct
+{
+    bcm_ll_dev_info  device;
+    spinlock_t       lock;
+    int              err_status;
+    int              phylink;
+    int              prev_datalink;
+    int              datalink;
+    uint32_t         deviceid;
+    unsigned int    *traceaddr;
+    struct pci_dev  *pdev;
+    int              enabled;
+} maple_device_info;
+
+static int crt_device = 0;
+static bcm_ll_pcie_status_change callback;
+static bcmos_bool is_initialized = BCMOS_FALSE;
+
+static maple_device_info devices[MAPLE_MAX_DEVICES];
+//static irqreturn_t maple_interrupt (int irq, void *dev_instance);
+static maple_device_info *get_maple_pci_info(int crt);
+
+static int maple_write(struct file *file,const char *buffer,size_t count, void *data);
+static int maple_read(char *page, char **start, off_t off, int count, int *eof, void *data);
+
+/* Map bus/device to device_id */
+static int _pcie_bus_devfv_to_devid(int bus, int devfn)
+{
+    const bus_devfn_devid *map;
+    for (map = bcmolt_board_pci_map_table_get(); map && map->bus > 0; map++)
+    {
+        if (map->bus == bus && map->devfn == devfn)
+        {
+            return map->device;
+        }
+    }
+    /* Not found - use incremental mapping */
+    return crt_device;
+}
+
+/* procedure used by OS to connect Maple PCI to allocated memory */
+
+static int __devinit maple_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
+{
+    int rc;
+    volatile unsigned int readval;
+    maple_device_info *device_info = NULL;
+    int dev_id;
+    u32 val;
+
+    if (!pdev)
+        return 1;
+
+    dev_info(&pdev->dev,
+        "Bus = %d Slot = %d Vendor:device = 0x%04x:0x%04x revision = 0x%02x\n",
+        pdev->bus->number, pdev->devfn,
+        pdev->vendor, pdev->device, pdev->revision);
+
+    if (crt_device == MAPLE_MAX_DEVICES)
+    {
+        printk(" Maximum Maple devices already defined (%d)\n", MAPLE_MAX_DEVICES);
+        return -ENODEV;
+    }
+
+    dev_id = _pcie_bus_devfv_to_devid(pdev->bus->number, pdev->devfn);
+    ++crt_device;
+    device_info = &devices[dev_id];
+    memset(device_info, 0, sizeof(maple_device_info));
+
+    spin_lock_init(&device_info->lock);
+    device_info->deviceid = dev_id;
+    device_info->pdev = pdev;
+
+    /* Enable maple device on PCIe bus and fixup BARs.
+     * Without fixup, module unload/reload crashes with WRX host
+     * because PCI hotplug doesn't work and after unload/re-load
+     * linux believes that BARs are already set.
+     */
+    rc = bcm_ll_pcie_dev_enable(dev_id);
+    if (rc)
+    {
+        printk("Error pci_enable_device_mem = %d\n",rc);
+        goto err_out;
+    }
+
+    rc = pci_request_selected_regions(pdev, pci_select_bars(pdev, IORESOURCE_MEM), DRV_NAME);
+    if (rc)
+        goto err_out;
+
+    pci_set_master(pdev);
+    pci_save_state(pdev);
+
+    device_info->device.soc_regs_base = (unsigned long)pci_ioremap_bar(pdev, BAR_REGS);
+    device_info->device.soc_sram_base = (unsigned long)pci_ioremap_bar(pdev, BAR_SRAM);
+    device_info->device.soc_ddr_base = (unsigned long)pci_ioremap_bar(pdev, BAR_DDR);
+    device_info->device.soc_ddr_length = (uint32_t)pci_resource_len(pdev, BAR_DDR);
+    device_info->device.irq = pdev->irq;
+    pci_set_drvdata(pdev, device_info);
+
+    //rc = request_irq(device_info->device.irq, maple_interrupt, IRQF_SHARED, "maple-pcie", device_info);
+    if (!rc && device_info->device.soc_sram_base)
+    {
+        device_info->device.irq_connected = 1;
+        readval = bcm_pci_read32((uint32_t *)(device_info->device.soc_regs_base + PCIE_REVISION_REGISTER_OFFSET));
+        printk("Card %d version major=%02x minor=%02x\n",device_info->deviceid,
+               ((readval & 0x0000ff00) >> 8),(readval & 0x000000ff));
+        printk("regs_start = 0x%lx\nddr_start  = 0x%lx\nsram_start = 0x%lx\nddr_length  = %d\n",
+                 device_info->device.soc_regs_base,device_info->device.soc_ddr_base,
+                 device_info->device.soc_sram_base, (int)device_info->device.soc_ddr_length);
+        pci_read_config_dword(pdev,PCI_BASE_ADDRESS_0,&val);
+        printk("BAR REGS = 0x%x\n",(unsigned int)val);
+        pci_read_config_dword(pdev,PCI_BASE_ADDRESS_2,&val);
+        printk("BAR DDR = 0x%x\n",(unsigned int)val);
+        pci_read_config_dword(pdev,PCI_BASE_ADDRESS_4,&val);
+        printk("BAR SRAM = 0x%x\n",(unsigned int)val);
+        readval = bcm_pci_read32((uint32_t *)(device_info->device.soc_regs_base + PCIE_STATUS_REGISTER_OFFSET));
+        device_info->err_status = readval & 0x0000000f;
+        device_info->phylink    = (readval >> 4) & 0x1;
+        device_info->datalink   = (readval >> 5) & 0x1;
+        device_info->prev_datalink  = device_info->datalink;
+    }
+    else
+        goto err_out;
+
+    return rc;
+
+err_out:
+    pci_disable_device (pdev);
+    memset(device_info, 0, sizeof(*device_info));
+    --crt_device;
+
+    return rc;
+}
+
+static void __devexit maple_pci_remove(struct pci_dev *pdev)
+{
+    int i;
+    maple_device_info *dev = pci_get_drvdata(pdev);
+
+    if (!dev)
+        return;
+
+    if (dev->device.irq_connected)
+    {
+        //free_irq(dev->device.irq, dev);
+        dev->device.irq_connected = 0;
+    }
+    if (callback)
+    {
+        for (i = 0; i < crt_device; i++)
+        {
+            if (devices[i].pdev == pdev)
+            {
+                callback(i, BCM_LL_PCIE_LINK_DOWN);
+                break;
+            }
+        }
+    }
+    pci_disable_device(pdev);
+    pci_release_regions(pdev);
+    pci_set_drvdata(pdev, NULL);
+    dev->device.soc_sram_base = 0;
+    dev->device.soc_regs_base = 0;
+    dev->pdev = NULL;
+}
+
+static struct pci_driver maple_pci_driver = {
+    .name       = DRV_NAME,
+    .id_table   = maple_pci_tbl,
+    .probe      = maple_pci_probe,
+    .remove     = __devexit_p(maple_pci_remove),
+};
+
+static maple_device_info *get_maple_pci_info(int crt)
+{
+    unsigned int readval=0;
+    maple_device_info *device;
+
+    if (crt >= BCMTR_MAX_OLTS)
+        return NULL;
+
+    device = &devices[crt];
+    if (device->device.soc_regs_base)
+    {
+        if (device->enabled)
+        {
+            readval = bcm_pci_read32((uint32_t *)(device->device.soc_regs_base + PCIE_STATUS_REGISTER_OFFSET));
+            device->err_status = readval & 0x0000000f;
+            device->phylink    = (readval >> 4) & 0x1;
+            device->datalink   = (readval >> 5) & 0x1;
+        }
+        else
+        {
+            device->err_status = 0;
+            device->phylink    = 0;
+            device->datalink   = 0;
+        }
+    }
+    else
+        device = NULL;
+
+    return device;
+}
+
+#if 0
+static irqreturn_t maple_interrupt (int irq, void *dev_instance)
+{
+    volatile unsigned int value;
+    maple_device_info *device_info;
+    unsigned long flags;
+    int handled = IRQ_NONE;
+    uint32_t device;
+
+    spin_lock_irqsave(&device_info->lock, flags);
+    value = bcm_pci_read32((uint32_t *)(device_info->device.soc_regs_base + PCIE_INT_STATUS_REGISTER_OFFSET));
+    if (value)
+    {
+        if (device_info->datalink != device_info->prev_datalink)
+        {
+            if (device_info->datalink == BCM_LL_PCIE_LINK_UP)
+                printk("Device=%d : Link is up !!!\n", device);
+            else
+            {
+                printk("Device=%d : Link is down !!!\n", device);
+                printk("phy status = 0x%x error status = 0x%x\n", device_info->phylink, device_info->err_status);
+            }
+            device_info->prev_datalink = device_info->datalink;
+            if (callback)
+                callback(device, device_info->datalink);
+        }
+        value = bcm_pci_read32((uint32_t *)(device_info->device.soc_regs_base + PCIE_INTR1_STATUS_REGISTER_OFFSET));
+        if (!value)
+            handled = IRQ_HANDLED;
+    }
+    spin_unlock_irqrestore(&device_info->lock, flags);
+
+    return IRQ_RETVAL(handled);
+}
+#endif
+
+/* Returns BAR register address */
+static int _pci_bar_reg_addr(int res)
+{
+    return 0x10 + res*4;
+}
+
+static void _pci_update_resource(struct pci_dev *dev, int resno)
+{
+        struct pci_bus_region region;
+        u16 cmd;
+        u32 new, check, mask;
+        int reg;
+        struct resource *res = dev->resource + resno;
+
+        /*
+         * Ignore resources for unimplemented BARs and unused resource slots
+         * for 64 bit BARs.
+         */
+        if (!res->flags)
+                return;
+
+        /*
+         * Ignore non-moveable resources.  This might be legacy resources for
+         * which no functional BAR register exists or another important
+         * system resource we shouldn't move around.
+         */
+        if (res->flags & IORESOURCE_PCI_FIXED)
+                return;
+
+        pcibios_resource_to_bus(dev, &region, res);
+
+        new = region.start | (res->flags & PCI_REGION_FLAG_MASK);
+        if (res->flags & IORESOURCE_IO)
+                mask = (u32)PCI_BASE_ADDRESS_IO_MASK;
+        else
+                mask = (u32)PCI_BASE_ADDRESS_MEM_MASK;
+
+        reg = _pci_bar_reg_addr(resno);
+
+        pci_write_config_dword(dev, reg, new);
+        pci_read_config_dword(dev, reg, &check);
+
+        if ((new ^ check) & mask) {
+                dev_err(&dev->dev, "BAR %d: error updating (%#08x != %#08x)\n",
+                        resno, new, check);
+        }
+
+        if (res->flags & IORESOURCE_MEM_64) {
+                new = region.start >> 16 >> 16;
+                pci_write_config_dword(dev, reg + 4, new);
+                pci_read_config_dword(dev, reg + 4, &check);
+                if (check != new) {
+                        dev_err(&dev->dev, "BAR %d: error updating "
+                               "(high %#08x != %#08x)\n", resno, new, check);
+                }
+        }
+
+        pci_read_config_word(dev, PCI_COMMAND, &cmd);
+        pci_write_config_word(dev, PCI_COMMAND, cmd | PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER);
+
+        res->flags &= ~IORESOURCE_UNSET;
+        dev_info(&dev->dev, "BAR %d: set to %pR (PCI address [%#llx-%#llx])\n",
+                resno, res, (unsigned long long)region.start,
+                (unsigned long long)region.end);
+}
+
+/* Enable PCI access to device */
+bcmos_errno bcm_ll_pcie_dev_enable(int dev_id)
+{
+    maple_device_info *device;
+    int rc;
+
+    if (dev_id >= MAPLE_MAX_DEVICES)
+        return BCM_ERR_PARM;
+
+    device = &devices[dev_id];
+    if (!device->pdev)
+        return BCM_ERR_IO;
+
+    rc = pci_enable_device_mem(device->pdev);
+    if (rc)
+    {
+        printk("Error pci_enable_device_mem for device %d = %d\n", dev_id, rc);\
+        goto out;
+    }
+
+    /* Refresh devices's PCIe header */
+    _pci_update_resource(device->pdev, BAR_REGS);
+    _pci_update_resource(device->pdev, BAR_SRAM);
+    _pci_update_resource(device->pdev, BAR_DDR);
+    device->enabled = 1;
+
+out:
+    return rc ? BCM_ERR_IO : BCM_ERR_OK;
+}
+
+/* Disable PCI access to device */
+bcmos_errno bcm_ll_pcie_dev_disable(int dev_id)
+{
+    maple_device_info *device;
+
+    printk("%s: device %d\n", __FUNCTION__, dev_id);
+
+    if (dev_id >= MAPLE_MAX_DEVICES)
+        return BCM_ERR_PARM;
+
+    device = &devices[dev_id];
+    if (!device->pdev || !device->enabled)
+        return BCM_ERR_OK;
+    pci_disable_device(device->pdev);
+    device->enabled = 0;
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_ll_pcie_init(void)
+{
+    int rc;
+    if (is_initialized)
+        return BCM_ERR_OK;
+    is_initialized = BCMOS_TRUE;
+    rc = pci_register_driver(&maple_pci_driver);
+    printk(KERN_INFO "Maple PCI driver registered with PCI subsystem. rc=%d\n", rc);
+    return rc ? BCM_ERR_INTERNAL : BCM_ERR_OK;
+}
+
+void bcm_ll_pcie_cleanup(void)
+{
+    if (!is_initialized)
+        return;
+    is_initialized = BCMOS_FALSE;
+
+    pci_unregister_driver(&maple_pci_driver);
+    crt_device = 0;
+    memset(devices, 0, sizeof(devices));
+}
+
+/*******************************************/
+/* procedures executed on insmod and rmmod */
+/*******************************************/
+static int __init bcm_ll_init_module(void)
+{
+    struct proc_dir_entry *bcmolt_file = NULL;
+
+    if ((bcmolt_dir = create_proc_entry("bcmolt", S_IFDIR, NULL)) == NULL)
+    {
+        printk("Unable to create /proc/bcmolt entry\n");
+        return -1;
+    }
+    if ((bcmolt_file = create_proc_entry("card", S_IFREG | S_IWUSR | S_IRUGO, bcmolt_dir)) == NULL)
+    {
+        printk("Unable to create /proc/bcmolt/card entry\n");
+        remove_proc_entry("bcmolt", bcmolt_dir);
+        return -1;
+    }
+    bcmolt_file->write_proc = (write_proc_t *)maple_write;
+    bcmolt_file->read_proc = (read_proc_t *)maple_read;
+
+    return 0;
+}
+
+static void __exit bcm_ll_cleanup_module(void)
+{
+    bcm_ll_pcie_cleanup();
+    remove_proc_entry("card", bcmolt_dir);
+    remove_proc_entry("bcmolt", NULL);
+    printk("Unregister done\n");
+}
+
+/*****************************/
+/* APIs used by Host drivers */
+/*****************************/
+bcmos_errno bcm_ll_pcie_status_change_register(bcm_ll_pcie_status_change cb)
+{
+    int i;
+    maple_device_info *device_info;
+
+    callback = cb;
+    if(callback)
+    {
+        for (i = 0; i < crt_device; i++)
+        {
+            device_info = get_maple_pci_info(i);
+            if (device_info)
+                callback(i, device_info->datalink);
+            else
+                callback(i, BCM_LL_PCIE_LINK_DOWN);
+        }
+    }
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_ll_pcie_status_change_unregister(void)
+{
+    callback = NULL;
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_ll_pcie_query(uint8_t dev_id, bcm_ll_dev_info *info)
+{
+    maple_device_info *device_info;
+
+    if (!info)
+        return BCM_ERR_PARM;
+
+    if (dev_id < MAPLE_MAX_DEVICES)
+    {
+        device_info = get_maple_pci_info(dev_id);
+        if (device_info && device_info->pdev)
+        {
+            if (device_info->datalink == BCM_LL_PCIE_LINK_DOWN)
+                return BCM_ERR_IO;
+            *info = device_info->device;
+            return BCM_ERR_OK;
+        }
+        return BCM_ERR_IO;
+    }
+    return BCM_ERR_RANGE;
+}
+
+bcm_ll_pcie_dev bcm_ll_pcie_dev_get(uint8_t dev_id)
+{
+    maple_device_info *device_info;
+
+    if (dev_id < crt_device)
+    {
+        device_info = get_maple_pci_info(dev_id);
+        return (device_info ? device_info->pdev : NULL);
+    }
+
+    return NULL;
+}
+
+bcmos_errno bcm_ll_pcie_host_reset_enable(uint8_t dev_id, bcmos_bool enabled)
+{
+    uint32_t val;
+
+    val = enabled ? 0 : 1;
+    bcm_pci_write32((uint32_t *)(devices[dev_id].device.soc_regs_base + PCIE_HARD_DEBUG_REGISTER_OFFSET), val);
+
+    return BCM_ERR_OK;
+}
+
+#ifdef TX_ENABLE_EVENT_TRACE
+bcmos_errno bcm_ll_pcie_setrace(uint8_t dev_id)
+{
+    maple_device_info *device_info;
+    uint32_t val,lim,base,size;
+    uint32_t reglo,reghi,baselim;
+    unsigned long addr;
+
+    if (dev_id < crt_device)
+    {
+        device_info = &devices[dev_id];
+        if (!device_info)
+            return BCM_ERR_IO;
+        size = EVENT_BUFFER_SIZE;
+        device_info->traceaddr = (unsigned int *)bcmos_alloc_not_cache(size);
+        memset(device_info->traceaddr,0,size);
+        addr = bcmos_virt_to_phys(device_info->traceaddr); /* | 0x02 = reverse byte order = swap */
+        printk("trace window : alloc=0x%lx size=0x%x\n",(unsigned long)device_info->traceaddr, (unsigned int)size);
+        reglo = PCIE_PCIE_0_MISC_CPU_2_PCIE_MEM_WIN1_LO;
+        reghi = PCIE_PCIE_0_MISC_CPU_2_PCIE_MEM_WIN1_HI;
+        baselim = PCIE_PCIE_0_MISC_CPU_2_PCIE_MEM_WIN1_BASE_LIMIT;
+        bcm_pci_write32((uint32_t *)(device_info->device.soc_regs_base + reglo),addr & 0xffffffff);
+        bcm_pci_write32((uint32_t *)(device_info->device.soc_regs_base + reghi)),((addr >> 32) & 0xffffffff);
+        /* base */
+        base = CPU_2_PCIE_MEM_WIN1_BASE;
+        /* limit */
+        lim = base + size;
+        val = lim  | (base >> 16);
+        bcm_pci_write32((uint32_t *)(device_info->device.soc_regs_base + baselim),val);
+        //bcm_fld_set_event_trace(dev_id);
+        bcm_pci_write32((uint32_t *)(device_info->device.soc_sram_base + BCM_FLD_EVENT_TRACE_OFFSET),0x1);
+
+        return BCM_ERR_OK;
+    }
+    return BCM_ERR_RANGE;
+}
+bcmos_errno bcm_ll_pcie_cleartrace(uint8_t dev_id)
+{
+    maple_device_info *device_info;
+
+    if (dev_id < crt_device)
+    {
+        device_info = &devices[dev_id];
+        if (!device_info)
+            return BCM_ERR_IO;
+        //bcm_fld_clear_event_trace(dev_id);
+        bcm_pci_write32((uint32_t *)(device_info->device.soc_sram_base + BCM_FLD_EVENT_TRACE_OFFSET),0x0);
+        return BCM_ERR_OK;
+    }
+    return BCM_ERR_RANGE;
+}
+bcmos_errno bcm_ll_pcie_savetrace(uint8_t dev_id, char *tracefilename)
+{
+    maple_device_info *device_info;
+    struct file         *fp;
+    unsigned long seg   = 0;
+    mm_segment_t memseg;
+
+    if (!tracefilename)
+        return BCM_ERR_PARM;
+
+    printk("device=%d from=%d, Go to write to file %s\n",dev_id , crt_device, tracefilename);
+
+    if (dev_id < crt_device)
+    {
+        device_info = &devices[dev_id];
+        if (!device_info)
+        {
+            printk("Error: device_info is null\n");
+            goto exit;
+        }
+        fp = filp_open(tracefilename, O_WRONLY | O_CREAT, 0666);
+        if ((fp == NULL) || (fp == (void *)-ENOENT))
+        {
+            printk("Error: Can't open file %s\n",tracefilename);
+            goto exit;
+        }
+        // Get current segment descriptor
+        seg = get_fs().seg;
+
+        // Set segment descriptor associated to kernel space
+        set_fs(get_ds());
+        fp->f_op->write(fp, (char *)device_info->traceaddr,EVENT_BUFFER_SIZE, &fp->f_pos);
+
+        memseg.seg = seg;
+        set_fs(memseg);
+        filp_close(fp, NULL);
+        printk("Wrote file %s\n",tracefilename);
+exit:
+        bcmos_free_not_cache(device_info->traceaddr);
+
+        return BCM_ERR_OK;
+    }
+    return BCM_ERR_RANGE;
+}
+#endif
+
+/*************************************************************/
+/* User interface functions : implement echo/cat to proc file*/
+/*************************************************************/
+
+typedef struct
+{
+    char *name;
+	void (*callback)(int cmdid, char *cmd);
+    char *description;
+} maple_card_command;
+
+static char *find_command(char *cmd);
+static void command_reg(int cmdid, char *line);
+static void command_mem(int cmdid, char *line);
+static void command_cfg(int cmdid, char *line);
+#ifdef TX_ENABLE_EVENT_TRACE
+static void command_trace(int cmdid, char *line);
+#endif
+
+#define READCMD     0
+#define WRITECMD    1
+
+static maple_card_command commands[] =
+{
+    {"readreg",     command_reg, "read register <index> <register offset - hex>"},
+    {"writereg",    command_reg, "write register <index> <register offset - hex> <value - hex>"},
+    {"read",        command_mem, "read <address - hex> <number of words - dec>"},
+    {"write",       command_mem, "write <address - hex> <value - hex>"},
+    {"rcfg",        command_cfg, "read dev <address - hex> <number of words - dec>"},
+    {"wcfg",        command_cfg, "write dev <address - hex> <value - hex>"},
+#ifdef TX_ENABLE_EVENT_TRACE
+    {"trace",       command_trace, "trace <index> on/off/save tx trace"},
+#endif
+    {NULL, NULL, NULL}
+};
+
+static char *find_command(char *cmd)
+{
+    char *rest;
+    int i = 0;
+    maple_card_command *cmdptr = &commands[0];
+
+    cmd = skip_spaces(cmd);
+    if (!strncmp(cmd,"help",strlen("help")))
+    {
+        while (cmdptr->name)
+        {
+            printk("%s\t: %s\n",cmdptr->name, cmdptr->description);
+            cmdptr = &commands[++i];
+        }
+        return NULL;
+    }
+    while (cmdptr->name)
+    {
+        if (!strncmp(cmdptr->name, cmd, strlen(cmdptr->name)))
+        {
+            rest = cmd + strlen(cmdptr->name);
+            rest = skip_spaces(rest);
+            cmdptr->callback(i%2, rest);
+            return NULL;
+        }
+        cmdptr = &commands[++i];
+    }
+
+    return "Wrong command name";
+}
+/**********************************************************************
+  answers to cat /proc/bcmolt command
+**********************************************************************/
+static int maple_read(char *page, char **start, off_t off, int count, int *eof, void *data)
+{
+    int i;
+    int len;
+    maple_device_info *dev = NULL;
+
+    len = sprintf(page, "Maple Device Info\n\n");
+    for (i = 0; i < MAPLE_MAX_DEVICES; i++)
+    {
+        dev = get_maple_pci_info(i);
+        if (dev)
+        {
+            len += sprintf(page + len, "id=%d regs_start=0x%lx ddr_start=0x%lx sram_start=0x%lx ddr_length=%d\n",
+                dev->deviceid,
+                dev->device.soc_regs_base,dev->device.soc_ddr_base,
+                dev->device.soc_sram_base, (int)dev->device.soc_ddr_length);
+            len += sprintf(page + len, "Phy Link is %s Data Link is %s Error status = %d\n\n",
+                dev->phylink == 1 ? "UP" : "DOWN", dev->datalink == 1 ? "UP" : "DOWN", (int)dev->err_status);
+        }
+    }
+
+    return len;
+}
+#ifdef TX_ENABLE_EVENT_TRACE
+static void command_trace(int cmdid, char *line)
+{
+    char token[5];
+    int  index;
+
+    if (sscanf(line, "%d %s", &index, token) != 2)
+    {
+        printk("Wrong parameter\n");
+        return;
+    }
+    printk("TRACE commands : %s\n",token);
+    if (!strncmp(token,"on",2))
+    {
+        //on
+        bcm_ll_pcie_setrace(index);
+        return;
+    }
+    if (!strncmp(token,"off",3))
+    {
+        // off
+        bcm_ll_pcie_cleartrace(index);
+        return;
+    }
+    if (!strncmp(token,"save",4))
+    {
+        //get
+        char filename[20];
+        sprintf(filename,"./tt_trace_%d.trx",index);
+        bcm_ll_pcie_savetrace(index,filename);
+        return;
+    }
+    printk("Wrong command\n");
+}
+#endif
+
+
+static void command_reg(int cmdindex, char *line)
+{
+    char *rest;
+    char *token;
+    int  index;
+    unsigned long address;
+    unsigned int reg;
+
+    if (sscanf(line, "%d %lx", &index, &address) != 2)
+    {
+        printk("Wrong parameter\n");
+        return;
+    }
+    address += (unsigned long)devices[index].device.soc_regs_base;
+    switch (cmdindex)
+    {
+    case READCMD:
+        reg = bcm_pci_read32((uint32_t *)address);
+        printk("0x%lx : %08x\n", address, reg);
+        break;
+    case WRITECMD:
+        rest = line;
+        token = strsep(&rest, " "); /* skip index */
+        token = strsep(&rest, " "); /* skip address */
+        token = strsep(&rest, " ");
+        if (!token)
+        {
+            printk("Wrong parameter\n");
+            return;
+        }
+        sscanf(token, "%x", &reg);
+        printk("write 0x%x to 0x%lx\n", reg, address);
+        bcm_pci_write32((uint32_t *)address,reg);
+        break;
+    }
+}
+
+static void command_mem(int cmdindex, char *line)
+{
+    char *token;
+    char *rest;
+    unsigned long address;
+    unsigned int reg;
+    int i, number_of_words;
+    int in_line=0, max_in_line;
+
+    if (sscanf(line, "%lx", &address) != 1)
+    {
+        printk("Wrong parameter\n");
+        return;
+    }
+    rest = line;
+    token = strsep(&rest, " "); /* skip address */
+    switch (cmdindex)
+    {
+    case READCMD:
+        token = strsep(&rest, " ");
+        if (!token)
+            number_of_words = 1;
+        else
+            sscanf(token, "%d", &number_of_words);
+
+        max_in_line = 4;
+        for (i = 0; i < number_of_words; i++, address += 4)
+        {
+            if (!in_line)
+                printk("%08lx: ", address);
+            reg = bcm_pci_read32((uint32_t *)address);
+            printk("%08x", reg);
+            if (++in_line < max_in_line)
+                printk(" ");
+            else
+            {
+                printk("\n");
+                in_line = 0;
+            }
+        }
+        if (in_line)
+            printk("\n");
+        break;
+    case WRITECMD:
+        token = strsep(&rest, " ");
+        if (!token)
+        {
+            printk("Wrong parameter\n");
+            return;
+        }
+        sscanf(token, "%x", &reg);
+        bcm_pci_write32((uint32_t *)address,reg);
+        break;
+    }
+}
+
+static void command_cfg(int cmdindex, char *line)
+{
+    unsigned long address;
+    unsigned int reg;
+    unsigned int val_or_num;
+    int crt;
+    int i;
+    int in_line=0, max_in_line;
+    maple_device_info *device;
+
+    if (sscanf(line, "%d %lx %x", &crt, &address, &val_or_num) != 3)
+    {
+        printk("Wrong parameter\n");
+        return;
+    }
+
+    if (crt >= crt_device || !devices[crt].pdev)
+    {
+        printk("Invalid device %d\n", crt);
+        return;
+    }
+
+    device = &devices[crt];
+
+    switch (cmdindex)
+    {
+    case READCMD:
+        max_in_line = 4;
+        for (i = 0; i < val_or_num; i++, address += 4)
+        {
+            if (!in_line)
+                printk("%08lx: ", address);
+            pci_read_config_dword(device->pdev, address, &reg);
+            printk("%08x", reg);
+            if (++in_line < max_in_line)
+                printk(" ");
+            else
+            {
+                printk("\n");
+                in_line = 0;
+            }
+        }
+        if (in_line)
+            printk("\n");
+        break;
+
+    case WRITECMD:
+        pci_write_config_dword(device->pdev, address, val_or_num);
+        break;
+    }
+}
+
+/**********************************************************************
+  answers to echo [...] > /proc/bcmolt command
+**********************************************************************/
+static int maple_write(struct file *file,const char *buffer,size_t count, void *data)
+{
+    char *internal;
+
+    if (buffer == NULL)
+        return -EFAULT;
+
+    internal = kmalloc(count, GFP_KERNEL);
+    if (!internal)
+    {
+        printk("Not enough memmory\n");
+        return count;
+    }
+
+    memset(internal, 0, count);
+    if (copy_from_user(internal, buffer, count))
+    {
+        printk("Not enough memmory\n");
+        goto error;
+    }
+    find_command(internal);
+
+error:
+    kfree(internal);
+
+    return count;
+}
+
+EXPORT_SYMBOL(bcmolt_dir);
+EXPORT_SYMBOL(bcm_ll_pcie_init);
+EXPORT_SYMBOL(bcm_ll_pcie_cleanup);
+EXPORT_SYMBOL(bcm_ll_pcie_status_change_register);
+EXPORT_SYMBOL(bcm_ll_pcie_status_change_unregister);
+EXPORT_SYMBOL(bcm_ll_pcie_query);
+EXPORT_SYMBOL(bcm_ll_pcie_dev_get);
+EXPORT_SYMBOL(bcm_ll_pcie_dev_enable);
+EXPORT_SYMBOL(bcm_ll_pcie_dev_disable);
+EXPORT_SYMBOL(bcm_ll_pcie_host_reset_enable);
+
+#ifdef TX_ENABLE_EVENT_TRACE
+EXPORT_SYMBOL(bcm_ll_pcie_setrace);
+EXPORT_SYMBOL(bcm_ll_pcie_cleartrace);
+EXPORT_SYMBOL(bcm_ll_pcie_savetrace);
+#endif
+module_init(bcm_ll_init_module);
+module_exit(bcm_ll_cleanup_module);
+
+MODULE_DESCRIPTION("maple line card");
+MODULE_LICENSE("Dual BSD/GPL");
diff --git a/bcm68620_release/release/host_customized/ll_pcie/bcmolt_llpcie.h b/bcm68620_release/release/host_customized/ll_pcie/bcmolt_llpcie.h
new file mode 100755
index 0000000..bd1a60e
--- /dev/null
+++ b/bcm68620_release/release/host_customized/ll_pcie/bcmolt_llpcie.h
@@ -0,0 +1,134 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+/*
+ * bcm_llpcie.h - Low-level PCIe driver interface
+ */
+
+#ifndef BCMOLT_LLPCIE_H_
+#define BCMOLT_LLPCIE_H_
+
+#include "bcmos_system.h"
+#define MAPLE_MAX_DEVICES               BCMTR_MAX_OLTS
+
+/** Low-level device info */
+typedef struct bcmolt_ll_dev_info
+{
+    unsigned long   soc_regs_base;      /**< Device registers base in host address space */
+    unsigned long   soc_sram_base;      /**< Device SRAM base in host address space */
+    unsigned long   soc_ddr_base;       /**< Device DDR base in host address space */
+    uint32_t        soc_ddr_length;     /**< Device DDR window size */
+    uint32_t        irq;                /**< Device irq number */
+    int             irq_connected;      /**< Device irq number connected */
+} bcm_ll_dev_info;
+
+/** Device PCIe link status change notification callback */
+typedef enum
+{
+    BCM_LL_PCIE_LINK_DOWN,             /**< PCIe link is down */
+    BCM_LL_PCIE_LINK_UP,               /**< PCIe link is up */
+} bcm_ll_pcie_link_status;
+
+/** Low-level device handle */
+typedef void *bcm_ll_pcie_dev;
+
+/** Status change indication */
+typedef void (*bcm_ll_pcie_status_change)(uint8_t dev_id, bcm_ll_pcie_link_status status);
+
+/** Register status change notification callback
+ * \param[in]   cb      Status change notification callback
+ * \return 0=OK or error <0
+ */
+bcmos_errno bcm_ll_pcie_status_change_register(bcm_ll_pcie_status_change cb);
+
+/** Unregister status change notification callback
+ * \return 0=OK or error <0
+ */
+bcmos_errno bcm_ll_pcie_status_change_unregister(void);
+
+/** Query PCIe device
+ * \param[in]   dev_id  Device id
+ * \param[out]  info    Device info
+ * \return 0=OK, BCM_ERR_IO-dev_id is in proper range, but link is down
+ */
+bcmos_errno bcm_ll_pcie_query(uint8_t dev_id, bcm_ll_dev_info *info);
+
+/** Get low-level device handle
+ * \param[in]   dev_id  Device id
+ * \param[out]  lldev   Low-level device handle
+ * \return device handle or NULL if link is down
+ */
+bcm_ll_pcie_dev bcm_ll_pcie_dev_get(uint8_t dev_id);
+
+/* Initialize low-level PCIe driver
+ * \return
+ *   - 0=OK
+ *   - BCM_ERR_INTERNAL - failed to register with PCI subsystem
+ */
+bcmos_errno bcm_ll_pcie_init(void);
+
+/* Cleanup low-level PCIe driver */
+void bcm_ll_pcie_cleanup(void);
+
+/** Enable PCI access to device
+ * \param[in]   dev_id  Device id
+ * \return
+ *   - 0=OK
+ *   - BCM_ERR_PARM-dev_id is invalid
+ *   - BCM_ERR_IO-dev_id is in proper range, but link is down
+ */
+bcmos_errno bcm_ll_pcie_dev_enable(int dev_id);
+
+/** Disable PCI access to device
+ * \param[in]   dev_id  Device id
+ * \return
+ *   - 0=OK
+ *   - BCM_ERR_PARM-dev_id is invalid
+ */
+bcmos_errno bcm_ll_pcie_dev_disable(int dev_id);
+
+/** Enable/disable host reset for all PCIe interfaces (automatic
+ *  device reset when host is reset)
+ * \param[in]   enabled Whether or not hot reset should be enabled
+ * \return 0=OK or error <0
+ */
+bcmos_errno bcm_ll_pcie_host_reset_enable(uint8_t dev_id, bcmos_bool enabled);
+
+#ifdef TX_ENABLE_EVENT_TRACE
+/** Handle low-level trace on target
+ * \param[in]   dev_id  Device id
+ * \param[in]  lfile name for trace
+ * \return device handle or NULL if link is down
+ */
+bcmos_errno bcm_ll_pcie_setrace(uint8_t dev_id);
+bcmos_errno bcm_ll_pcie_cleartrace(uint8_t dev_id);
+bcmos_errno bcm_ll_pcie_savetrace(uint8_t dev_id, char *tracefilename);
+#endif
+
+#endif
diff --git a/bcm68620_release/release/host_customized/ll_pcie/vxworks/bcmolt_llpcie.c b/bcm68620_release/release/host_customized/ll_pcie/vxworks/bcmolt_llpcie.c
new file mode 100644
index 0000000..df6d3c0
--- /dev/null
+++ b/bcm68620_release/release/host_customized/ll_pcie/vxworks/bcmolt_llpcie.c
@@ -0,0 +1,410 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+*/ 
+
+#include <vxWorks.h>
+#include <drv/pci/pciConfigLib.h>
+#include "bcmolt_llpcie.h"
+
+/* Define PCIE device BAR registers */
+#define BAR_REGS                        0
+#define BAR_DDR                         2
+#define BAR_SRAM                        4
+
+/* 
+Define PCIE device BAR space length:
+    bar 1 = 8  Mbyte register space 
+    bar 2 = 16 Mbyte DDR space 
+    bar 3 = 64 Kbyte SRAM space
+*/
+#define MAPLE_REGS_LENGTH                   0x00800000
+#define MAPLE_DDR_LENGTH                    0x01000000
+#define MAPLE_SRAM_LENGTH                   0x00010000
+
+/* Define special registers address */
+#ifdef TX_ENABLE_EVENT_TRACE
+#define PCIE_PCIE_0_MISC_CPU_2_PCIE_MEM_WIN1_LO			0x064014U	
+#define PCIE_PCIE_0_MISC_CPU_2_PCIE_MEM_WIN1_HI			0x064018U
+#define PCIE_PCIE_0_MISC_CPU_2_PCIE_MEM_WIN1_BASE_LIMIT	0x064074U	
+#endif
+#define PCIE_REVISION_REGISTER_OFFSET       0x6406C /* PCIE_PCIE_PCIE_0_PCIE_PCIE_0_MISC_REVISION    */
+#define PCIE_STATUS_REGISTER_OFFSET         0x64068 /* PCIE_PCIE_PCIE_0_PCIE_PCIE_0_MISC_PCIE_STATUS */
+#define PCIE_HARD_DEBUG_REGISTER_OFFSET     0x64204U /* PCIE_PCIE_PCIE_0_PCIE_PCIE_0_MISC_HARD_DEBUG  */
+#define PCIE_INT_STATUS_REGISTER_OFFSET     0x69400 /* PCIE_PCIE_PCIE_0_CPU_INTR1_INTR_STATUS        */
+#define PCIE_INT_CLEAR_MASK_OFFSET          0x6940C /* PCIE_PCIE_PCIE_0_CPU_INTR1_INTR_MASK_CLEAR    */
+#define PCIE_INTR1_STATUS_REGISTER_OFFSET   0x69300 /* Interrupt Status Register */       	
+
+/* Maple device ID */
+#define PCIE_MAPLE_VENDOR_ID                0x14E4 /* PCIE_CFG_TYPE0_EP_SUBSYSTEM_ID_VENDOR_ID      */
+#define PCIE_MAPLE_DEVICE_ID                0x6862 
+#define PCIE_MAPLE_6863_SKU_DEVICE_ID       0x6863
+#define PCIE_MAPLE_EPON_DEVICE_ID           0x5554
+
+/* Define interrupt vector number according BCM53003 BSP */
+#define PCIE1_IV_0 86
+#define PCIE1_IV_1 87
+#define PCIE1_INT_LINE 4
+
+/* Maple device object struct */
+typedef struct  
+{
+    bcm_ll_dev_info  device;
+    bcmos_fastlock   lock;
+    int              err_status;
+    int              phylink;
+    int              prev_datalink;
+    int              datalink;
+    uint32_t         deviceid;  // start from 0
+    unsigned int    *traceaddr;
+    void  *pdev;
+    int pciBusNo;       /* PCI bus number */
+    int pciDevNo;       /* PCI device number */
+    int pciFuncNo;      /* PCI function number */
+    uint32_t dev_status_irq;
+} maple_device_info;
+
+/* Maple device objects */
+static maple_device_info devices[MAPLE_MAX_DEVICES];
+int crt_device = 0;
+
+/* Device PCIE interface status change callback */
+static bcm_ll_pcie_status_change callback;
+
+/** Device status change ISR
+ * \irq          IRQ number
+ * \dev_instance device object 
+ */
+int dev_status_interrupt (int irq, void *dev_instance)
+{
+    bcmos_errno err = BCM_ERR_OK;
+    uint32_t reg_value = 0;
+    maple_device_info *device_info = NULL;   
+    long flags = 0;
+    int handled = 0;
+    uint32_t dev_id = 0;
+    
+    device_info = (maple_device_info *)dev_instance;
+    dev_id = device_info->deviceid;
+    
+    flags = bcmos_fastlock_lock(&device_info->lock);
+
+    reg_value = bcm_pci_read32((uint32_t *)(device_info->device.soc_regs_base + PCIE_INT_STATUS_REGISTER_OFFSET));
+    {
+        if (device_info->datalink != device_info->prev_datalink)
+        {
+            if (device_info->datalink == BCM_LL_PCIE_LINK_UP)
+                printf("Device=%d : Link is up !!!\n", dev_id);
+            else
+            {
+                printf("Device=%d : Link is down !!!\n", dev_id);
+                printf("phy status = 0x%x error status = 0x%x\n", device_info->phylink, device_info->err_status);
+            }
+            device_info->prev_datalink = device_info->datalink;
+            if (callback)
+            {
+                callback(dev_id, device_info->datalink); 
+            }
+        }
+        reg_value = bcm_pci_read32(
+                        (uint32_t *)(device_info->device.soc_regs_base + PCIE_INTR1_STATUS_REGISTER_OFFSET));
+        {
+            handled = 1;
+        }
+    }
+    
+    bcmos_fastlock_unlock(&device_info->lock, flags);
+    
+    return handled;
+}
+
+/** Maple device detection and initialization
+ */
+bcmos_errno bcm_ll_pcie_interface_init()
+{
+    STATUS ret_status;
+    maple_device_info *dev_info = NULL; 
+    uint32_t readval = 0;
+    uint8_t readvalb = 0;
+    bcmos_errno err = BCM_ERR_OK;
+    uint8_t irq = 0;
+    uint16_t device_id;
+
+    printf("%s()\r\n", __FUNCTION__);
+
+    // check maple device number
+    if (crt_device == MAPLE_MAX_DEVICES)
+    {
+        printf(" Maximum Maple devices already defined (%d)\n", MAPLE_MAX_DEVICES);
+        return BCM_ERR_ALREADY;
+    } 
+    // Init device object struct
+    dev_info = &devices[crt_device++];
+    memset(dev_info, 0, sizeof(maple_device_info));
+    
+    // find maple 6862 device
+    ret_status = pciFindDevice(PCIE_MAPLE_VENDOR_ID,
+        PCIE_MAPLE_DEVICE_ID,
+        0,
+        &dev_info->pciBusNo,
+        &dev_info->pciDevNo,
+        &dev_info->pciFuncNo);
+
+    if (OK == ret_status)
+    {
+        device_id = PCIE_MAPLE_DEVICE_ID;
+        goto found_device_id;
+    }
+
+    // find maple 6863 device
+    ret_status = pciFindDevice(PCIE_MAPLE_VENDOR_ID,
+        PCIE_MAPLE_6863_SKU_DEVICE_ID,
+        0,
+        &dev_info->pciBusNo,
+        &dev_info->pciDevNo,
+        &dev_info->pciFuncNo);
+
+    if (OK == ret_status)
+    {
+        device_id = PCIE_MAPLE_6863_SKU_DEVICE_ID;
+        goto found_device_id;
+    }
+
+    // find maple epon device
+    ret_status = pciFindDevice(PCIE_MAPLE_VENDOR_ID,
+        PCIE_MAPLE_EPON_DEVICE_ID,
+        0,
+        &dev_info->pciBusNo,
+        &dev_info->pciDevNo,
+        &dev_info->pciFuncNo);
+
+    if (OK == ret_status)
+    {
+        device_id = PCIE_MAPLE_EPON_DEVICE_ID;
+        goto found_device_id;
+    }
+
+    printf("Can't find any device[%d]\n", PCIE_MAPLE_VENDOR_ID);
+    return BCM_ERR_NODEV;
+
+found_device_id:
+    printf("Found maple device[%x - %x]\n", PCIE_MAPLE_VENDOR_ID, device_id);
+
+    // init    
+    dev_info->deviceid = (crt_device - 1);
+    dev_info->pdev = NULL;
+
+
+    // Enable PCI address map
+    pciConfigInByte(dev_info->pciBusNo,
+                    dev_info->pciDevNo,
+                    dev_info->pciFuncNo,
+                    PCI_CFG_COMMAND,
+                    (UINT8 *)&readvalb);
+    printf("CMD reg = 0x%x\n", readvalb);
+
+    readvalb |= 0x6;
+    pciConfigOutByte(dev_info->pciBusNo,
+                    dev_info->pciDevNo,
+                    dev_info->pciFuncNo,
+                    PCI_CFG_COMMAND,
+                    (UINT8)readvalb);
+
+    pciConfigInByte(dev_info->pciBusNo,
+                    dev_info->pciDevNo,
+                    dev_info->pciFuncNo,
+                    PCI_CFG_COMMAND,
+                    (UINT8 *)&readvalb);
+    printf("Adjusted CMD reg = 0x%x\n", readvalb);
+
+    // Init base addresses
+    dev_info->device.soc_regs_base = 0xe0000000;
+    dev_info->device.soc_sram_base = 0xe2000000;
+    dev_info->device.soc_ddr_base  = 0xe1000000;
+    dev_info->device.soc_ddr_length = 0x1000000; // 16M
+
+    // init interrupt line
+    readvalb = PCIE1_INT_LINE;
+    pciConfigOutByte(dev_info->pciBusNo,
+                    dev_info->pciDevNo,
+                    dev_info->pciFuncNo,
+                    PCI_CFG_DEV_INT_LINE,
+                    (UINT8)readvalb);
+    pciConfigInByte(dev_info->pciBusNo,
+                    dev_info->pciDevNo,
+                    dev_info->pciFuncNo,
+                    PCI_CFG_DEV_INT_LINE,
+                    (UINT8 *)&readvalb);
+    printf("Adjusted INT Line reg = 0x%x\n", readvalb);
+
+    // init interrupt
+    dev_info->device.irq = PCIE1_IV_0;
+    dev_info->dev_status_irq = PCIE1_IV_1;
+
+    // read revision register
+    readval = bcm_pci_read32((uint32_t *)(dev_info->device.soc_regs_base + PCIE_REVISION_REGISTER_OFFSET));
+    printf("readval = 0x%x\n", readval);
+    printf("Card %d version major=%02x minor=%02x\n",
+                dev_info->deviceid, 
+                ((readval & 0x0000ff00) >> 8),
+                (readval & 0x000000ff)); 
+    
+    // read status register
+    readval = bcm_pci_read32((uint32_t *)(dev_info->device.soc_regs_base + PCIE_STATUS_REGISTER_OFFSET));
+    printf("readval = 0x%x\n", readval);
+    dev_info->err_status = (readval & 0x0000000f);
+    dev_info->phylink    = ((readval >> 4) & 0x1);
+    dev_info->datalink   = ((readval >> 5) & 0x1);
+    dev_info->prev_datalink  = dev_info->datalink;
+
+    // connect INT for device status
+    bcmos_fastlock_init(&dev_info->lock, 0);
+    bcmos_int_connect((int)dev_info->dev_status_irq, 
+                        0, 
+                        BCMOS_IRQ_SHARED, 
+                        dev_status_interrupt, 
+                        "status_isr", 
+                        dev_info);
+
+    return BCM_ERR_OK;
+}
+
+/** Get Maple device object struct
+ * \crt devie index,start from 0
+ */
+static maple_device_info *get_maple_pci_info(int crt)
+{
+    bcmos_errno err = BCM_ERR_OK;
+    uint32_t readval = 0;
+    maple_device_info *device_info = NULL;
+
+    /* check input parameter */
+    if (MAPLE_MAX_DEVICES <= crt)
+    {
+        return NULL;
+    }
+    device_info = &devices[crt];
+
+    /* read status register */
+    readval = bcm_pci_read32((uint32_t *)(device_info->device.soc_regs_base + PCIE_STATUS_REGISTER_OFFSET));
+    device_info->err_status = (readval & 0x0000000f);
+    device_info->phylink    = ((readval >> 4) & 0x1);
+    device_info->datalink   = ((readval >> 5) & 0x1);
+
+    /* return device */
+    return device_info;
+}
+
+/** Register status change notification callback
+ * \param[in]   cb      Status change notification callback
+ * \return 0=OK or error <0 
+ */
+bcmos_errno bcm_ll_pcie_status_change_register(bcm_ll_pcie_status_change cb)
+{
+    int i;
+    maple_device_info *dev_info; 
+    
+    callback = cb;
+    for (i = 0; i < crt_device; i++)
+    {
+        dev_info = get_maple_pci_info(i);
+        callback(i, dev_info->datalink);
+    }
+    
+    return BCM_ERR_OK;
+}
+
+/** Unregister status change notification callback
+ * \return 0=OK or error <0
+ */
+bcmos_errno bcm_ll_pcie_status_change_unregister(void)
+{
+    callback = NULL;
+    
+    return BCM_ERR_OK;
+}
+
+/** Query PCIe device
+ * \param[in]   dev_id  Device id
+ * \param[out]  info    Device info
+ * \return 0=OK, BCM_ERR_IO-dev_id is in proper range, but link is down
+ */
+bcmos_errno bcm_ll_pcie_query(uint8_t dev_id, bcm_ll_dev_info *info)
+{
+    maple_device_info *dev_info; 
+    
+    if (NULL == info)
+    {
+        return BCM_ERR_PARM;
+    }
+    
+    if (dev_id < crt_device)
+    {
+        dev_info = get_maple_pci_info(dev_id);
+        if (dev_info->datalink == BCM_LL_PCIE_LINK_DOWN)
+        {
+            return BCM_ERR_IO;
+        }
+
+        *info = dev_info->device;
+        return BCM_ERR_OK;
+    }
+    
+    return BCM_ERR_RANGE;   
+}
+
+/** Get low-level device handle
+ * \param[in]   dev_id  Device id
+ * \param[out]  lldev   Low-level device handle 
+ * \return device handle or NULL if link is down
+ */
+bcm_ll_pcie_dev bcm_ll_pcie_dev_get(uint8_t dev_id)
+{
+    maple_device_info *dev_info; 
+    
+    if (dev_id < MAPLE_MAX_DEVICES)
+    {
+        dev_info = get_maple_pci_info(dev_id);
+        return dev_info->pdev;
+    } 
+    
+    return NULL;
+}
+
+/** Host reset enable 
+ * \enabled 
+ */
+bcmos_errno bcm_ll_pcie_host_reset_enable(uint8_t dev_id, bcmos_bool enabled)
+{
+    uint32_t val;
+
+    val = enabled ? 0 : 1;
+    bcm_pci_write32((uint32_t *)(devices[dev_id].device.soc_regs_base + PCIE_HARD_DEBUG_REGISTER_OFFSET) , val);
+
+    return BCM_ERR_OK;
+}
+
diff --git a/bcm68620_release/release/host_customized/ll_pcie/vxworks/bcmolt_llpcie.h b/bcm68620_release/release/host_customized/ll_pcie/vxworks/bcmolt_llpcie.h
new file mode 100644
index 0000000..d484976
--- /dev/null
+++ b/bcm68620_release/release/host_customized/ll_pcie/vxworks/bcmolt_llpcie.h
@@ -0,0 +1,105 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+/*
+ * bcm_llpcie.h - Low-level PCIe driver interface
+ */
+
+#ifndef BCMOLT_LLPCIE_H_
+#define BCMOLT_LLPCIE_H_
+
+#include "bcmos_system.h"
+#define MAPLE_MAX_DEVICES               1 /* 5 */
+
+/** Low-level device info */
+typedef struct bcmolt_ll_dev_info
+{
+    unsigned long   soc_regs_base;      /**< Device registers base in host address space */
+    unsigned long   soc_sram_base;      /**< Device SRAM base in host address space */
+    unsigned long   soc_ddr_base;       /**< Device DDR base in host address space */
+    uint32_t        soc_ddr_length;     /**< Device DDR window size */
+    uint32_t        irq;                /**< Device irq number */
+} bcm_ll_dev_info;
+
+/** Device PCIe link status change notification callback */
+typedef enum
+{
+    BCM_LL_PCIE_LINK_DOWN,             /**< PCIe link is down */
+    BCM_LL_PCIE_LINK_UP,               /**< PCIe link is up */
+} bcm_ll_pcie_link_status;
+
+/** Low-level device handle */
+typedef void *bcm_ll_pcie_dev;
+
+/** Status change indication */
+typedef void (*bcm_ll_pcie_status_change)(uint8_t dev_id, bcm_ll_pcie_link_status status);
+
+/** Register status change notification callback
+ * \param[in]   cb      Status change notification callback
+ * \return 0=OK or error <0
+ */
+bcmos_errno bcm_ll_pcie_status_change_register(bcm_ll_pcie_status_change cb);
+
+/** Unregister status change notification callback
+ * \return 0=OK or error <0
+ */
+bcmos_errno bcm_ll_pcie_status_change_unregister(void);
+
+/** Query PCIe device
+ * \param[in]   dev_id  Device id
+ * \param[out]  info    Device info
+ * \return 0=OK, BCM_ERR_IO-dev_id is in proper range, but link is down
+ */
+bcmos_errno bcm_ll_pcie_query(uint8_t dev_id, bcm_ll_dev_info *info);
+
+/** Get low-level device handle
+ * \param[in]   dev_id  Device id
+ * \param[out]  lldev   Low-level device handle 
+ * \return device handle or NULL if link is down
+ */
+bcm_ll_pcie_dev bcm_ll_pcie_dev_get(uint8_t dev_id);
+
+/** Enable/disable host reset for all PCIe interfaces (automatic
+ *  device reset when host is reset)
+ * \param[in]   enabled Whether or not hot reset should be enabled
+ * \return 0=OK or error <0
+ */
+bcmos_errno bcm_ll_pcie_host_reset_enable(uint8_t dev_id, bcmos_bool enabled);
+
+#ifdef TX_ENABLE_EVENT_TRACE
+/** Handle low-level trace on target
+ * \param[in]   dev_id  Device id
+ * \param[in]  lfile name for trace
+ * \return device handle or NULL if link is down
+ */
+bcmos_errno bcm_ll_pcie_setrace(uint8_t dev_id);
+bcmos_errno bcm_ll_pcie_cleartrace(uint8_t dev_id);
+bcmos_errno bcm_ll_pcie_savetrace(uint8_t dev_id, char *tracefilename);
+#endif
+#endif
diff --git a/bcm68620_release/release/host_customized/ll_pcie/vxworks/multi_device/bcmolt_llpcie.c b/bcm68620_release/release/host_customized/ll_pcie/vxworks/multi_device/bcmolt_llpcie.c
new file mode 100755
index 0000000..1de7475
--- /dev/null
+++ b/bcm68620_release/release/host_customized/ll_pcie/vxworks/multi_device/bcmolt_llpcie.c
@@ -0,0 +1,505 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+*/ 
+
+#include <vxWorks.h>
+#include <drv/pci/pciConfigLib.h>
+#include "bcmolt_llpcie.h"
+
+/* Define PCIE device BAR registers */
+#define BAR_REGS                        0
+#define BAR_DDR                         2
+#define BAR_SRAM                        4
+
+/* 
+Define PCIE device BAR space length:
+    bar 0 = 8  Mbyte register space 
+    bar 2 = 16 Mbyte DDR space 
+    bar 4 = 64 Kbyte SRAM space
+*/
+#define MAPLE_REGS_LENGTH                   0x00800000
+#define MAPLE_DDR_LENGTH                    0x01000000
+#define MAPLE_SRAM_LENGTH                   0x00010000
+
+/* Define special registers address */
+#ifdef TX_ENABLE_EVENT_TRACE
+#define PCIE_PCIE_0_MISC_CPU_2_PCIE_MEM_WIN1_LO			0x064014U	
+#define PCIE_PCIE_0_MISC_CPU_2_PCIE_MEM_WIN1_HI			0x064018U
+#define PCIE_PCIE_0_MISC_CPU_2_PCIE_MEM_WIN1_BASE_LIMIT	0x064074U	
+#endif
+#define PCIE_REVISION_REGISTER_OFFSET       0x6406C /* PCIE_PCIE_PCIE_0_PCIE_PCIE_0_MISC_REVISION    */
+#define PCIE_STATUS_REGISTER_OFFSET         0x64068 /* PCIE_PCIE_PCIE_0_PCIE_PCIE_0_MISC_PCIE_STATUS */
+#define PCIE_HARD_DEBUG_REGISTER_OFFSET     0x64204U /* PCIE_PCIE_PCIE_0_PCIE_PCIE_0_MISC_HARD_DEBUG  */
+#define PCIE_INT_STATUS_REGISTER_OFFSET     0x69400 /* PCIE_PCIE_PCIE_0_CPU_INTR1_INTR_STATUS        */
+#define PCIE_INT_CLEAR_MASK_OFFSET          0x6940C /* PCIE_PCIE_PCIE_0_CPU_INTR1_INTR_MASK_CLEAR    */
+#define PCIE_INTR1_STATUS_REGISTER_OFFSET   0x69300 /* Interrupt Status Register */       	
+
+/* Maple device ID */
+#define PCIE_MAPLE_VENDOR_ID                0x14E4 /* PCIE_CFG_TYPE0_EP_SUBSYSTEM_ID_VENDOR_ID      */
+#define PCIE_MAPLE_DEVICE_ID                0x6862 
+#define PCIE_MAPLE_6863_SKU_DEVICE_ID       0x6863
+#define PCIE_MAPLE_EPON_DEVICE_ID           0x5554
+
+/* Define interrupt vector number for MPC8308 */
+#define DRV_PCIE_INT_IRQ_BASE 96
+#define PCIE_DEV0_IV_0   (DRV_PCIE_INT_IRQ_BASE + 24)
+#define PCIE_DEV0_IV_1   (DRV_PCIE_INT_IRQ_BASE + 25)
+#define PCIE_DEV1_IV_0   (DRV_PCIE_INT_IRQ_BASE + 0)
+#define PCIE_DEV1_IV_1   (DRV_PCIE_INT_IRQ_BASE + 1)
+
+/* Maple device object struct */
+typedef struct  
+{
+    uint32_t llpcie_irq;
+    uint32_t llpcie_status_irq;
+} maple_llpcie_device_irqs;
+
+maple_llpcie_device_irqs llpcie_device_irqs[BCMOLT_MAX_MAPLE_DEVICES] =
+{
+    {PCIE_DEV0_IV_0,PCIE_DEV0_IV_1},
+    {PCIE_DEV1_IV_0,PCIE_DEV1_IV_1}
+};
+
+
+#ifdef LLPCIE_SET_BASE_ADDRESSES_MANUALLY 
+
+typedef struct 
+{
+    unsigned long   soc_regs_base;      /**< Device registers base in host address space */
+    unsigned long   soc_sram_base;      /**< Device SRAM base in host address space */
+    unsigned long   soc_ddr_base;       /**< Device DDR base in host address space */
+
+} maple_llpcie_base_addresses;
+
+maple_llpcie_base_addresses llpcie_base_addresses[BCMOLT_MAX_MAPLE_DEVICES] =
+{
+     {.soc_regs_base = 0xe0000000, .soc_sram_base = 0xe2000000, .soc_ddr_base  = 0xe1000000},
+     /* in this example there is only one device*/
+     {.soc_regs_base = 0x00000000, .soc_sram_base = 0x00000000, .soc_ddr_base  = 0x00000000}
+};
+#endif
+
+/* Maple device object struct */
+typedef struct  
+{
+    bcm_ll_dev_info  device;
+    bcmos_fastlock   lock;
+    int              err_status;
+    int              phylink;
+    int              prev_datalink;
+    int              datalink;
+    uint32_t         deviceid;  // start from 0
+    unsigned int    *traceaddr;
+    void  *pdev;
+    int pciBusNo;       /* PCI bus number */
+    int pciDevNo;       /* PCI device number */
+    int pciFuncNo;      /* PCI function number */
+    uint32_t dev_status_irq;
+} maple_device_info;
+
+/* Maple device objects */
+maple_device_info g_maple_devs_info[BCMOLT_MAX_MAPLE_DEVICES];
+
+int g_maple_dev_num = 0;
+
+/* Device PCIE interface status change callback */
+bcm_ll_pcie_status_change g_dev_status_change_cb;
+
+/** Device status change ISR
+ * \irq          IRQ number
+ * \dev_instance device object 
+ */
+int dev_status_interrupt (int irq, void *dev_instance)
+{
+    uint32_t reg_value = 0;
+    maple_device_info *device_info = NULL;   
+    long flags = 0;
+    int handled = 0;
+    uint32_t dev_id = 0;
+    
+    device_info = (maple_device_info *)dev_instance;
+    dev_id = device_info->deviceid;
+    
+    flags = bcmos_fastlock_lock(&device_info->lock);
+
+    reg_value = bcm_pci_read32((uint32_t *)(device_info->device.soc_regs_base + PCIE_INT_STATUS_REGISTER_OFFSET));
+    {
+        if (device_info->datalink != device_info->prev_datalink)
+        {
+            if (device_info->datalink == BCM_LL_PCIE_LINK_UP)
+                printf("Device=%d : Link is up !!!\n", dev_id);
+            else
+            {
+                printf("Device=%d : Link is down !!!\n", dev_id);
+                printf("phy status = 0x%x error status = 0x%x\n", device_info->phylink, device_info->err_status);
+            }
+            device_info->prev_datalink = device_info->datalink;
+            if (g_dev_status_change_cb)
+            {
+                g_dev_status_change_cb(dev_id, device_info->datalink); 
+            }
+        }
+        reg_value = bcm_pci_read32(
+                        (uint32_t *)(device_info->device.soc_regs_base + PCIE_INTR1_STATUS_REGISTER_OFFSET));
+        {
+            handled = 1;
+        }
+    }
+    
+    bcmos_fastlock_unlock(&device_info->lock, flags);
+    
+    return handled;
+}
+
+/** Maple device detection and initialization
+ */
+bcmos_errno bcm_ll_pcie_interface_init()
+{
+    STATUS ret_status;
+    maple_device_info *dev_info = NULL; 
+    uint32_t readval = 0;
+    uint8_t readvalb = 0;
+    uint32_t pci_dev_idx = 0;
+
+    printf("%s()\r\n", __FUNCTION__);
+
+    // check maple device number
+    if (g_maple_dev_num >= BCMOLT_MAX_MAPLE_DEVICES)
+    {
+        printf("Maximum Maple devices already defined (%d)\n", BCMOLT_MAX_MAPLE_DEVICES);
+        return BCM_ERR_ALREADY;
+    } 
+
+    // Support multiple Maple devices
+    for (pci_dev_idx = 0; pci_dev_idx < BCMOLT_MAX_MAPLE_DEVICES; pci_dev_idx++)
+    {
+        uint16_t device_id;
+
+        // Init device object struct
+        dev_info = &g_maple_devs_info[pci_dev_idx];
+        memset(dev_info, 0, sizeof(maple_device_info));
+        
+        // Try to find maple device
+        ret_status = pciFindDevice(PCIE_MAPLE_VENDOR_ID,
+            PCIE_MAPLE_DEVICE_ID,
+            pci_dev_idx,
+            &dev_info->pciBusNo,
+            &dev_info->pciDevNo,
+            &dev_info->pciFuncNo);
+
+        if (ret_status == OK)
+        {
+            device_id = PCIE_MAPLE_DEVICE_ID;
+            goto found_device_id;
+        }
+
+        ret_status = pciFindDevice(PCIE_MAPLE_VENDOR_ID,
+            PCIE_MAPLE_6863_SKU_DEVICE_ID,
+            pci_dev_idx,
+            &dev_info->pciBusNo,
+            &dev_info->pciDevNo,
+            &dev_info->pciFuncNo);
+
+        if (ret_status == OK)
+        {
+            device_id = PCIE_MAPLE_6863_SKU_DEVICE_ID;
+            goto found_device_id;
+        }
+
+        ret_status = pciFindDevice(PCIE_MAPLE_VENDOR_ID,
+            PCIE_MAPLE_EPON_DEVICE_ID,
+            pci_dev_idx,
+            &dev_info->pciBusNo,
+            &dev_info->pciDevNo,
+            &dev_info->pciFuncNo);
+
+        if (ret_status == OK)
+        {
+            device_id = PCIE_MAPLE_EPON_DEVICE_ID;
+            goto found_device_id;
+        }
+
+        printf("No more devices, Found %d maple device(s)\n", g_maple_dev_num);
+        break;
+
+found_device_id:
+        // Found new Maple device
+        printf("Found maple device[%x - %x][%d] @ Bus %d, Dev %d, Func %d\n", 
+            PCIE_MAPLE_VENDOR_ID, PCIE_MAPLE_DEVICE_ID, pci_dev_idx,
+            dev_info->pciBusNo, dev_info->pciDevNo, dev_info->pciFuncNo);
+        g_maple_dev_num += 1;
+        
+        // init    
+        dev_info->deviceid = pci_dev_idx;
+        dev_info->pdev = NULL;        
+    
+
+        // Enable PCI address map
+        pciConfigInByte(dev_info->pciBusNo,
+                        dev_info->pciDevNo,
+                        dev_info->pciFuncNo,
+                        PCI_CFG_COMMAND,
+                        (UINT8 *)&readvalb);
+        printf("CMD reg = 0x%x\n", readvalb);
+
+        readvalb |= 0x6;
+        pciConfigOutByte(dev_info->pciBusNo,
+                        dev_info->pciDevNo,
+                        dev_info->pciFuncNo,
+                        PCI_CFG_COMMAND,
+                        (UINT8)readvalb);
+
+        pciConfigInByte(dev_info->pciBusNo,
+                        dev_info->pciDevNo,
+                        dev_info->pciFuncNo,
+                        PCI_CFG_COMMAND,
+                        (UINT8 *)&readvalb);
+        printf("Adjusted CMD reg = 0x%x\n", readvalb);
+
+        // Init base addresses
+
+#ifdef LLPCIE_SET_BASE_ADDRESSES_MANUALLY 
+       dev_info->device.soc_regs_base = llpcie_base_addresses.soc_regs_base;
+       dev_info->device.soc_sram_base = llpcie_base_addresses.soc_sram_base;
+       dev_info->device.soc_ddr_base  = llpcie_base_addresses.soc_ddr_base;
+       dev_info->device.soc_ddr_length = MAPLE_DDR_LENGTH; // 16M */
+#else
+        pciConfigInLong(dev_info->pciBusNo,
+                        dev_info->pciDevNo,
+                        dev_info->pciFuncNo,
+                        PCI_CFG_BASE_ADDRESS_0,
+                        (UINT32 *)&readval);
+        printf("BAR0 = 0x%x\n", readval);
+        dev_info->device.soc_regs_base = (readval & PCI_MEMBASE_MASK);
+
+        pciConfigInLong(dev_info->pciBusNo,
+                        dev_info->pciDevNo,
+                        dev_info->pciFuncNo,
+                        PCI_CFG_BASE_ADDRESS_2,
+                        (UINT32 *)&readval);
+        printf("BAR2 = 0x%x\n", readval);
+        dev_info->device.soc_ddr_base = (readval & PCI_MEMBASE_MASK);
+        dev_info->device.soc_ddr_length = MAPLE_DDR_LENGTH;         // 16M           
+
+        pciConfigInLong(dev_info->pciBusNo,
+                        dev_info->pciDevNo,
+                        dev_info->pciFuncNo,
+                        PCI_CFG_BASE_ADDRESS_4,
+                        (UINT32 *)&readval);
+        printf("BAR4 = 0x%x\n", readval);
+        dev_info->device.soc_sram_base = (readval & PCI_MEMBASE_MASK);   
+#endif             
+
+        printf("Regs Base = 0x%lx, DDR Base = 0x%lx, DDR Length = 0x%x, SRAM Base = 0x%lx\n",
+            dev_info->device.soc_regs_base,
+            dev_info->device.soc_ddr_base,
+            dev_info->device.soc_ddr_length,
+            dev_info->device.soc_sram_base);
+
+        // init interrupt
+        dev_info->device.irq = llpcie_device_irqs[pci_dev_idx].llpcie_irq;
+        dev_info->dev_status_irq = llpcie_device_irqs[pci_dev_idx].llpcie_status_irq;
+        printf("DMA IRQ = %d, Device status IRQ = %d\n", 
+            dev_info->device.irq, dev_info->dev_status_irq);
+                
+        // read revision register
+        readval = bcm_pci_read32((uint32_t *)(dev_info->device.soc_regs_base + PCIE_REVISION_REGISTER_OFFSET));
+        printf("readval = 0x%x\n", readval);
+        printf("Card %d version major=%02x minor=%02x\n",
+                    dev_info->deviceid, 
+                    ((readval & 0x0000ff00) >> 8),
+                    (readval & 0x000000ff)); 
+        
+        // read status register
+        readval = bcm_pci_read32((uint32_t *)(dev_info->device.soc_regs_base + PCIE_STATUS_REGISTER_OFFSET));
+        printf("readval = 0x%x\n", readval);
+        dev_info->err_status = (readval & 0x0000000f);
+        dev_info->phylink    = ((readval >> 4) & 0x1);
+        dev_info->datalink   = ((readval >> 5) & 0x1);
+        dev_info->prev_datalink  = dev_info->datalink;
+
+        // connect INT for device status
+        bcmos_fastlock_init(&dev_info->lock, 0);
+        bcmos_int_connect((int)dev_info->dev_status_irq, 
+                            0, 
+                            BCMOS_IRQ_SHARED, 
+                            dev_status_interrupt, 
+                            "status_isr", 
+                            dev_info);
+    }
+
+    // Return status
+    if (0 >=g_maple_dev_num)
+    {
+        return BCM_ERR_NODEV;
+    }
+    else
+    {
+        return BCM_ERR_OK;
+    }
+}
+
+/** Get Maple device object struct
+ * \crt devie index,start from 0
+ */
+static maple_device_info *get_maple_pci_info(int crt)
+{
+    bcmos_errno err = BCM_ERR_OK;
+    uint32_t readval = 0;
+    maple_device_info *device_info = NULL;
+
+    /* check input parameter */
+    /* don't access invalid device regs base address */
+    if (crt >= g_maple_dev_num)
+    {
+        return NULL;
+    }
+    device_info = &g_maple_devs_info[crt];
+
+    /* read status register */
+    readval = bcm_pci_read32((uint32_t *)(device_info->device.soc_regs_base + PCIE_STATUS_REGISTER_OFFSET));
+    device_info->err_status = (readval & 0x0000000f);
+    device_info->phylink    = ((readval >> 4) & 0x1);
+    device_info->datalink   = ((readval >> 5) & 0x1);
+
+    /* return device */
+    return device_info;
+}
+
+/** Register status change notification callback
+ * \param[in]   cb      Status change notification callback
+ * \return 0=OK or error <0 
+ */
+bcmos_errno bcm_ll_pcie_status_change_register(bcm_ll_pcie_status_change cb)
+{
+    int i;
+    maple_device_info *dev_info; 
+    
+    g_dev_status_change_cb = cb;
+    for (i = 0; i < g_maple_dev_num; i++)
+    {
+        dev_info = get_maple_pci_info(i);
+        g_dev_status_change_cb(i, dev_info->datalink);
+    }
+    
+    return BCM_ERR_OK;
+}
+
+/** Unregister status change notification callback
+ * \return 0=OK or error <0
+ */
+bcmos_errno bcm_ll_pcie_status_change_unregister(void)
+{
+    g_dev_status_change_cb = NULL;
+    
+    return BCM_ERR_OK;
+}
+
+/** Query PCIe device
+ * \param[in]   dev_id  Device id
+ * \param[out]  info    Device info
+ * \return 0=OK, BCM_ERR_IO-dev_id is in proper range, but link is down
+ */
+bcmos_errno bcm_ll_pcie_query(uint8_t dev_id, bcm_ll_dev_info *info)
+{
+    maple_device_info *dev_info = NULL; 
+
+    /* check input parameter */    
+    if (NULL == info)
+    {
+        return BCM_ERR_PARM;
+    }
+
+    /* don't access invalid device regs base address */
+    if (dev_id < g_maple_dev_num)
+    {
+        dev_info = get_maple_pci_info(dev_id);
+        if (NULL == dev_info)
+        {
+            return BCM_ERR_NOENT;
+        }
+        if (dev_info->datalink == BCM_LL_PCIE_LINK_DOWN)
+        {
+            return BCM_ERR_IO;
+        }
+
+        *info = dev_info->device;
+        return BCM_ERR_OK;
+    }
+    
+    return BCM_ERR_RANGE;   
+}
+
+/** Get low-level device handle
+ * \param[in]   dev_id  Device id
+ * \param[out]  lldev   Low-level device handle 
+ * \return device handle or NULL if link is down
+ */
+bcm_ll_pcie_dev bcm_ll_pcie_dev_get(uint8_t dev_id)
+{
+    maple_device_info *dev_info = NULL; 
+
+    /* check input parameter */
+    /* don't access invalid device regs base address */
+    if (dev_id < g_maple_dev_num)
+    {
+        dev_info = get_maple_pci_info(dev_id);
+        if (NULL == dev_info)
+        {
+            return NULL;
+        }
+        else
+        {
+            return dev_info->pdev;
+        }
+    } 
+    
+    return NULL;
+}
+
+/** Host reset enable 
+ * \enabled 
+ */
+bcmos_errno bcm_ll_pcie_host_reset_enable(uint8_t dev_id, bcmos_bool enabled)
+{
+    uint32_t val;
+
+    /* check input parameter */
+    /* don't access invalid device regs base address */
+    if (dev_id >= g_maple_dev_num)
+    {
+        return BCM_ERR_OVERFLOW;
+    }
+    
+    val = enabled ? 0 : 1;
+    bcm_pci_write32((uint32_t *)(g_maple_devs_info[dev_id].device.soc_regs_base + PCIE_HARD_DEBUG_REGISTER_OFFSET), 
+            val);
+
+    return BCM_ERR_OK;
+}
+
diff --git a/bcm68620_release/release/host_customized/ll_pcie/vxworks/multi_device/bcmolt_llpcie.h b/bcm68620_release/release/host_customized/ll_pcie/vxworks/multi_device/bcmolt_llpcie.h
new file mode 100755
index 0000000..040d565
--- /dev/null
+++ b/bcm68620_release/release/host_customized/ll_pcie/vxworks/multi_device/bcmolt_llpcie.h
@@ -0,0 +1,105 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+/*
+ * bcm_llpcie.h - Low-level PCIe driver interface
+ */
+
+#ifndef BCMOLT_LLPCIE_H_
+#define BCMOLT_LLPCIE_H_
+
+#include "bcmos_system.h"
+#define BCMOLT_MAX_MAPLE_DEVICES               2 /* 5 */
+
+/** Low-level device info */
+typedef struct bcmolt_ll_dev_info
+{
+    unsigned long   soc_regs_base;      /**< Device registers base in host address space */
+    unsigned long   soc_sram_base;      /**< Device SRAM base in host address space */
+    unsigned long   soc_ddr_base;       /**< Device DDR base in host address space */
+    uint32_t        soc_ddr_length;     /**< Device DDR window size */
+    uint32_t        irq;                /**< Device irq number */
+} bcm_ll_dev_info;
+
+/** Device PCIe link status change notification callback */
+typedef enum
+{
+    BCM_LL_PCIE_LINK_DOWN,             /**< PCIe link is down */
+    BCM_LL_PCIE_LINK_UP,               /**< PCIe link is up */
+} bcm_ll_pcie_link_status;
+
+/** Low-level device handle */
+typedef void *bcm_ll_pcie_dev;
+
+/** Status change indication */
+typedef void (*bcm_ll_pcie_status_change)(uint8_t dev_id, bcm_ll_pcie_link_status status);
+
+/** Register status change notification callback
+ * \param[in]   cb      Status change notification callback
+ * \return 0=OK or error <0
+ */
+bcmos_errno bcm_ll_pcie_status_change_register(bcm_ll_pcie_status_change cb);
+
+/** Unregister status change notification callback
+ * \return 0=OK or error <0
+ */
+bcmos_errno bcm_ll_pcie_status_change_unregister(void);
+
+/** Query PCIe device
+ * \param[in]   dev_id  Device id
+ * \param[out]  info    Device info
+ * \return 0=OK, BCM_ERR_IO-dev_id is in proper range, but link is down
+ */
+bcmos_errno bcm_ll_pcie_query(uint8_t dev_id, bcm_ll_dev_info *info);
+
+/** Get low-level device handle
+ * \param[in]   dev_id  Device id
+ * \param[out]  lldev   Low-level device handle 
+ * \return device handle or NULL if link is down
+ */
+bcm_ll_pcie_dev bcm_ll_pcie_dev_get(uint8_t dev_id);
+
+/** Enable/disable host reset for all PCIe interfaces (automatic
+ *  device reset when host is reset)
+ * \param[in]   enabled Whether or not hot reset should be enabled
+ * \return 0=OK or error <0
+ */
+bcmos_errno bcm_ll_pcie_host_reset_enable(uint8_t dev_id, bcmos_bool enabled);
+
+#ifdef TX_ENABLE_EVENT_TRACE
+/** Handle low-level trace on target
+ * \param[in]   dev_id  Device id
+ * \param[in]  lfile name for trace
+ * \return device handle or NULL if link is down
+ */
+bcmos_errno bcm_ll_pcie_setrace(uint8_t dev_id);
+bcmos_errno bcm_ll_pcie_cleartrace(uint8_t dev_id);
+bcmos_errno bcm_ll_pcie_savetrace(uint8_t dev_id, char *tracefilename);
+#endif
+#endif
diff --git a/bcm68620_release/release/host_customized/model_linux/Makefile b/bcm68620_release/release/host_customized/model_linux/Makefile
new file mode 100644
index 0000000..45c5c31
--- /dev/null
+++ b/bcm68620_release/release/host_customized/model_linux/Makefile
@@ -0,0 +1,19 @@
+# Makefile for building system model as linux module
+#
+ifeq ("$(OS_KERNEL)", "linux")
+
+MOD_NAME = sysmodel
+MOD_DEPS = utils common_api 
+MOD_TYPE = linux_lib
+SRC_DIR = $(MODEL_OUT_DIR)/linux
+srcs = bcmolt_model_types.c bcmolt_msg_pack.c
+
+$(shell mkdir -p $(SRC_DIR); ln -s $(MODEL_OUT_DIR)/*.[ch] $(SRC_DIR)/ 2> /dev/null)
+	 
+# If called by linux kernel builder - add include paths manually.
+# It is not elegant, but we'll not have many linux modules
+ifneq ("$(KBUILD_SRC)", "")
+	-include $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
+endif
+
+endif
diff --git a/bcm68620_release/release/host_customized/os_abstraction/Makefile b/bcm68620_release/release/host_customized/os_abstraction/Makefile
new file mode 100644
index 0000000..258f45f
--- /dev/null
+++ b/bcm68620_release/release/host_customized/os_abstraction/Makefile
@@ -0,0 +1,51 @@
+# OS abstraction layer
+#
+MOD_NAME = os
+MOD_TYPE = lib
+MOD_INC_DIRS = $(SRC_DIR) $(SRC_DIR)/$(OS)
+MOD_INC_DIRS += $(OS_PLATFORM_DIR) $(CONFIG_DIR)
+MOD_SUPPRESS_OS_DEP = y
+
+ifeq ("$(OS)", "threadx")
+	MOD_DEPS = threadx bsp
+	MOD_INC_DIRS += $(SUBSYSTEM)/sys/inc
+	MOD_DEFS = -DBCMOS_TRACE_IN_DEV_LOG
+endif
+
+ifeq ("$(OS)", "posix")
+	ENABLE_MSG_QUEUE_DOMAIN_SOCKET ?= y
+	ENABLE_MSG_QUEUE_UDP_SOCKET ?= y
+endif
+
+ifeq ("$(ENABLE_MSG_QUEUE_DOMAIN_SOCKET)", "y")
+	MOD_DEFS += -DBCMOS_MSG_QUEUE_DOMAIN_SOCKET
+endif
+
+ifeq ("$(ENABLE_MSG_QUEUE_UDP_SOCKET)", "y")
+	MOD_DEFS += -DBCMOS_MSG_QUEUE_UDP_SOCKET
+endif
+
+ifeq ("$(BUF_IN_DMA_MEM)", "y")
+	EXTRA_CFLAGS += -DBCMOS_BUF_IN_DMA_MEM
+    BUF_DATA_UNIT_SIZE ?= 1024
+	EXTRA_CFLAGS += -DBCMOS_BUF_DATA_UNIT_SIZE=$(BUF_DATA_UNIT_SIZE)
+endif
+
+ifneq ("$(BUF_POOL_SIZE)", "")
+    ifeq ("$(BUF_POOL_BUF_SIZE)", "")
+        BUF_POOL_BUF_SIZE = 4096
+    endif
+    EXTRA_CFLAGS += -DBCMOS_BUF_POOL_SIZE=$(BUF_POOL_SIZE) -DBCMOS_BUF_POOL_BUF_SIZE=$(BUF_POOL_BUF_SIZE)
+endif
+
+srcs  = bcmos_common.c bcmos_errno.c bcmos_hash_table.c bcmos_rw_lock.c $(OS)/bcmos_system.c
+
+ifeq ("$(DEBUG)", "y")
+	MOD_DEFS	+= -DBCMOS_MEM_DEBUG -DBCMOS_SYS_UNITTEST
+endif
+
+ifeq ("$(SUBSYSTEM)", "embedded")
+    USE_LINT = yes
+endif
+
+#EXTRA_DEFINES += -DBCMOS_SYS_UNITTEST
diff --git a/bcm68620_release/release/host_customized/os_abstraction/bcmos_common.c b/bcm68620_release/release/host_customized/os_abstraction/bcmos_common.c
new file mode 100644
index 0000000..d2d552a
--- /dev/null
+++ b/bcm68620_release/release/host_customized/os_abstraction/bcmos_common.c
@@ -0,0 +1,2772 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#include "bcmos_system.h"
+
+/* task control blocks */
+STAILQ_HEAD(task_list, bcmos_task) task_list = STAILQ_HEAD_INITIALIZER(task_list);
+
+/* module control blocks */
+bcmos_module *bcmos_modules[BCMOS_MODULE_ID__NUM_OF];
+
+/* event control blocks */
+bcmos_event *bcmos_events[BCMOS_EVENT_ID__NUM_OF];
+
+/* Global trace level */
+bcmos_trace_level bcmos_sys_trace_level = BCMOS_TRACE_LEVEL_ERROR;
+
+/* Global OS mutex */
+bcmos_mutex bcmos_res_lock;
+
+/* Total memory occupied by block pools */
+uint32_t bcmos_total_blk_pool_size;
+
+/* Total memory occupied by message pools */
+uint32_t bcmos_total_msg_pool_size;
+
+f_bcmolt_sw_error_handler sw_error_handler;
+
+/* Block pools */
+static STAILQ_HEAD(blk_pool_list, bcmos_blk_pool) blk_pool_list = STAILQ_HEAD_INITIALIZER(blk_pool_list);
+
+/* Message pools */
+static STAILQ_HEAD(msg_pool_list, bcmos_blk_pool) msg_pool_list = STAILQ_HEAD_INITIALIZER(msg_pool_list);
+
+/* Message queues */
+static STAILQ_HEAD(msg_queue_list, bcmos_msg_queue) msg_queue_list = STAILQ_HEAD_INITIALIZER(msg_queue_list);
+
+/* Message queue groups */
+static STAILQ_HEAD(msg_qgroup_list, bcmos_msg_qgroup) msg_qgroup_list = STAILQ_HEAD_INITIALIZER(msg_qgroup_list);
+
+/* Lock used to protect msg registration / deregistration */
+static bcmos_fastlock bcmos_msg_register_lock;
+
+/* Shutdown mode: when this is set, we expect message handler deregistration to happen while messages are still being
+ * sent/received. We should handle this gracefully. */
+static bcmos_bool bcmos_msg_shutdown_mode = BCMOS_FALSE;
+
+/* Timer management block */
+typedef struct bcmos_timer_pool
+{
+    bcmos_fastlock lock;                        /* Pool protection lock */
+    bcmos_sys_timer sys_timer;                  /* System timer handle */
+    uint32_t num_active_timers;                 /* Number of active timers in the pool */
+#ifdef BCMOS_TIMER_RB_TREE
+    RB_HEAD(bcmos_timers, bcmos_timer) pool;    /* Timer pool. RB tree */
+#else
+    TAILQ_HEAD(bcmos_timers, bcmos_timer) pool; /* Timer pool: TAILQ */
+#endif
+} bcmos_timer_pool;
+
+static int32_t _bcmos_timer_compare(bcmos_timer *t1, bcmos_timer *t2);
+
+/*
+ * Macros for RB-TREE and TAILQ-based timer tool implementations
+ */
+
+#ifdef BCMOS_TIMER_RB_TREE
+
+#ifdef __arm__
+/* ARM compiler doesn't like unused inline functions. Disable the warning */
+#pragma diag_suppress 177
+#endif
+
+/* Generate RB tree functions */
+RB_GENERATE_INLINE(bcmos_timers, bcmos_timer, entry, _bcmos_timer_compare)
+
+#define TMR_POOL_INIT(tmr_pool)                 RB_INIT(&(tmr_pool)->pool)
+#define TMR_POOL_INSERT(tmr_pool, tmr)          RB_INSERT(bcmos_timers, &(tmr_pool)->pool, tmr)
+#define TMR_POOL_REMOVE(tmr_pool, tmr)          RB_REMOVE(bcmos_timers, &(tmr_pool)->pool, tmr)
+#define TMR_POOL_FIRST(tmr_pool)                RB_MIN(bcmos_timers, &(tmr_pool)->pool)
+
+#else
+
+#define TMR_POOL_INIT(tmr_pool)                 TAILQ_INIT(&(tmr_pool)->pool)
+
+#define TMR_POOL_INSERT(tmr_pool, tmr)                          \
+    do {                                                        \
+        bcmos_timer *_last = TAILQ_LAST(&(tmr_pool)->pool, bcmos_timers);    \
+        if (_last)                                              \
+        {                                                       \
+            if (_bcmos_timer_compare(tmr, _last) >= 0)          \
+            {                                                   \
+                TAILQ_INSERT_TAIL(&(tmr_pool)->pool, tmr, entry); \
+            }                                                   \
+            else                                                \
+            {                                                   \
+                bcmos_timer *_t;                                \
+                uint32_t iter = 0;                              \
+                TAILQ_FOREACH(_t, &(tmr_pool)->pool, entry)     \
+                {                                               \
+                    BUG_ON(iter >= (tmr_pool)->num_active_timers);\
+                    ++iter;                                     \
+                    if (_bcmos_timer_compare(tmr, _t) <= 0)     \
+                    {                                           \
+                        TAILQ_INSERT_BEFORE(_t, tmr, entry);    \
+                        break;                                  \
+                    }                                           \
+                }                                               \
+            }                                                   \
+        }                                                       \
+        else                                                    \
+        {                                                       \
+            TAILQ_INSERT_HEAD(&(tmr_pool)->pool, tmr, entry);   \
+        }                                                       \
+        ++(tmr_pool)->num_active_timers;                        \
+    } while (0)
+
+#define TMR_POOL_REMOVE(tmr_pool, tmr)                          \
+    do {                                                        \
+        BUG_ON(!(tmr_pool)->num_active_timers);                 \
+        TAILQ_REMOVE(&(tmr_pool)->pool, tmr, entry);            \
+        TAILQ_NEXT(tmr, entry) = NULL;                          \
+        --(tmr_pool)->num_active_timers;                        \
+    } while (0)
+
+#define TMR_POOL_FIRST(tmr_pool)                TAILQ_FIRST(&(tmr_pool)->pool)
+
+#endif
+
+#define BCMOS_TIMER_IS_RUNNING(tmr)             ((tmr->flags & BCMOS_TIMER_FLAG_RUNNING) != 0)
+#define BCMOS_TIMER_IS_EXPIRED(tmr)             ((tmr->flags & BCMOS_TIMER_FLAG_EXPIRED) != 0)
+#define BCMOS_TIMER_IS_VALID(tmr)               ((tmr->flags & BCMOS_TIMER_FLAG_VALID) != 0)
+#define BCMOS_TIMER_IS_ACTIVE(tmr)              ((tmr->flags & BCMOS_TIMER_FLAG_ACTIVE) != 0)
+
+static bcmos_bool bcmos_initialized;
+static bcmos_timer_pool tmr_pool;
+static void _sys_timer_handler(void *data);
+
+/*
+ * Print variables
+ */
+
+static bcmos_print_redirect_mode print_redirect_mode;
+static bcmos_print_redirect_cb print_redirect_cb;
+static void *print_redirect_cb_data;
+static bcmos_mutex bcmos_print_lock;
+#ifdef BCMOS_BUF_POOL_SIZE
+static bcmos_blk_pool sys_buf_pool;
+static bcmos_errno bcmos_buf_pool_create(void);
+#endif
+
+/** Initialize system library
+ * \ingroup system
+ * Must be called before any other system function
+ * \returns 0=OK or error code <0
+ */
+bcmos_errno bcmos_init(void)
+{
+    bcmos_errno rc;
+
+    if (bcmos_initialized)
+        return BCM_ERR_OK;
+    rc = bcmos_sys_init();
+    bcmos_mutex_create(&bcmos_res_lock, 0, "res_lock");
+    bcmos_mutex_create(&bcmos_print_lock, 0, "print_lock");
+    TMR_POOL_INIT(&tmr_pool);
+    bcmos_fastlock_init(&tmr_pool.lock, 0);
+    bcmos_fastlock_init(&bcmos_msg_register_lock, 0);
+    rc = rc ? rc : bcmos_sys_timer_create(&tmr_pool.sys_timer, _sys_timer_handler, &tmr_pool);
+
+    /* Create default buffer pool if so requested by compilation options */
+#ifdef BCMOS_BUF_POOL_SIZE
+    rc = rc ? rc : bcmos_buf_pool_create();
+#endif
+
+    if (!rc)
+    {
+        bcmos_initialized = BCMOS_TRUE;
+    }
+
+    return rc;
+}
+
+/** Cleanup system library
+ * \ingroup system
+ */
+void bcmos_exit(void)
+{
+    if (!bcmos_initialized)
+        return;
+    bcmos_sys_timer_destroy(&tmr_pool.sys_timer);
+    bcmos_mutex_destroy(&bcmos_print_lock);
+    bcmos_mutex_destroy(&bcmos_res_lock);
+#ifdef BCMOS_BUF_POOL_SIZE
+    bcmos_blk_pool_reset(&sys_buf_pool);
+    bcmos_blk_pool_destroy(&sys_buf_pool);
+#endif
+    bcmos_sys_exit();
+    bcmos_initialized = BCMOS_FALSE;
+}
+
+/*
+ * Common task services
+ */
+
+/* Query task info */
+bcmos_errno bcmos_task_query(const bcmos_task *task, bcmos_task_parm *parm)
+{
+    if (task == NULL || task->magic != BCMOS_TASK_MAGIC || parm == NULL)
+    {
+        return BCM_ERR_PARM;
+    }
+    *parm = task->parm;
+    return BCM_ERR_OK;
+}
+
+/** Task iterator
+ * \param[in] prev      Previous task. *prev==NULL - get first
+ * \return: BCM_ERR_OK, BCM_ERR_NOENT, BCM_ERR_NO_MORE
+ */
+bcmos_errno bcmos_task_get_next(bcmos_task **prev)
+{
+    bcmos_task *task;
+    if (prev == NULL)
+    {
+        return BCM_ERR_PARM;
+    }
+    task = *prev;
+    if (task && task->magic != BCMOS_TASK_MAGIC)
+    {
+        return BCM_ERR_PARM;
+    }
+    if (task)
+    {
+        task = STAILQ_NEXT(task, list);
+    }
+    else
+    {
+        task = STAILQ_FIRST(&task_list);
+    }
+    *prev = task;
+    if (!task)
+    {
+        return BCM_ERR_NO_MORE;
+    }
+    return BCM_ERR_OK;
+}
+
+/*
+ * Message queue
+ */
+
+static void _bcmos_msgq_notify(bcmos_msg_queue *q, const char *txt)
+{
+    BCMOS_TRACE_INFO("Msg queue %s: %s\n", q->q.parm.name, txt);
+}
+
+/* Decrement in-queue statistics */
+static inline void _bcmos_msgq_stat_dec(bcmos_msg_queue_nw *q)
+{
+    bcmos_msg_queue_stat *stat = &q->stat;
+    uint32_t old_in = stat->msg_in;
+
+    if (stat->msg_in == 0)
+    {
+        BCMOS_TRACE_ERR("Attempt to decrement statistics for an empty queue ('%s')\n", q->parm.name);
+    }
+    else
+    {
+        --stat->msg_in;
+        ++stat->msg_received;
+    }
+
+    if (old_in == q->parm.low_wm)
+    {
+        q->parm.notify((bcmos_msg_queue *)q, "becomes uncongested");
+        stat->is_congested = BCMOS_FALSE;
+    }
+}
+
+/* Increment in-queue statistics */
+static inline void _bcmos_msgq_stat_inc(bcmos_msg_queue_nw *q)
+{
+    bcmos_msg_queue_stat *stat = &q->stat;
+    uint32_t old_in = stat->msg_in;
+
+    ++stat->msg_in;
+    ++stat->msg_sent;
+    if (old_in == q->parm.high_wm)
+    {
+        q->parm.notify((bcmos_msg_queue *)q, "becomes congested");
+        stat->is_congested = BCMOS_TRUE;
+    }
+    if (stat->is_congested)
+        ++stat->msg_almost_full;
+}
+
+static void _bcmos_qgroup_notify(bcmos_msg_qgroup *qgroup, const char *txt)
+{
+    BCMOS_TRACE_INFO("Msg queue %s: %s\n", qgroup->parm.name, txt);
+}
+
+/* Decrement in-queue statistics for queue group */
+static inline void _bcmos_qgroup_stat_dec(bcmos_msg_qgroup *qgroup)
+{
+    bcmos_msg_queue_stat *stat = &qgroup->stat;
+    uint32_t old_in = stat->msg_in;
+
+    if (stat->msg_in == 0)
+    {
+        BCMOS_TRACE_ERR("Attempt to decrement statistics for an empty queue ('%s')\n", qgroup->parm.name);
+    }
+    else
+    {
+        --stat->msg_in;
+        ++stat->msg_received;
+    }
+
+    if (old_in == qgroup->parm.low_wm)
+    {
+        qgroup->parm.notify(qgroup, "becomes uncongested");
+        stat->is_congested = BCMOS_FALSE;
+    }
+}
+
+/* Increment in-queue statistics */
+static inline void _bcmos_qgroup_stat_inc(bcmos_msg_qgroup *qgroup)
+{
+    bcmos_msg_queue_stat *stat = &qgroup->stat;
+    uint32_t old_in = stat->msg_in;
+
+    ++stat->msg_in;
+    ++stat->msg_sent;
+    if (old_in == qgroup->parm.high_wm)
+    {
+        qgroup->parm.notify(qgroup, "becomes congested");
+        stat->is_congested = BCMOS_TRUE;
+    }
+    if (stat->is_congested)
+        ++stat->msg_almost_full;
+}
+
+
+/* Get message from queue.
+ * Urgent queue is checked 1st, then regular queue
+ * Must be called under lock!
+ * Returns msg or NULL if queue is empty
+ */
+static inline bcmos_msg *_bcmos_msg_get(bcmos_msg_queue_nw *q)
+{
+    bcmos_msg *msg;
+
+    msg = STAILQ_FIRST(&q->msgl_urg);
+    if (msg)
+    {
+        STAILQ_REMOVE_HEAD(&q->msgl_urg, next);
+        _bcmos_msgq_stat_dec(q);
+        return msg;
+    }
+
+    msg = STAILQ_FIRST(&q->msgl);
+    if (msg)
+    {
+        STAILQ_REMOVE_HEAD(&q->msgl, next);
+        _bcmos_msgq_stat_dec(q);
+    }
+
+    return msg;
+}
+
+/* Put message on queue.
+ * Must be called under lock!
+ * Returns error in case of queue overflow
+ */
+static inline bcmos_errno _bcmos_msg_put(bcmos_msg_queue_nw *q, bcmos_msg *msg, bcmos_msg_send_flags flags)
+{
+    /* Overflow check */
+    if (q->stat.msg_in >= q->parm.size)
+    {
+        if (!(flags & BCMOS_MSG_SEND_NOLIMIT))
+        {
+            ++q->stat.msg_discarded;
+            return BCM_ERR_OVERFLOW;
+        }
+    }
+    /* Put onto the relevant queue */
+    if ((flags & BCMOS_MSG_SEND_URGENT))
+        STAILQ_INSERT_TAIL(&q->msgl_urg, msg, next);
+    else
+        STAILQ_INSERT_TAIL(&q->msgl, msg, next);
+    _bcmos_msgq_stat_inc(q);
+
+    return BCM_ERR_OK;
+}
+
+/* Create message queue without wait support */
+static void bcmos_msg_queue_nw_init(bcmos_msg_queue_nw *q, const bcmos_msg_queue_parm *parm)
+{
+    q->parm = *parm;
+    STAILQ_INIT(&q->msgl);
+    STAILQ_INIT(&q->msgl_urg);
+    bcmos_fastlock_init(&q->lock, parm->flags);
+    memset(&q->stat, 0, sizeof(q->stat));
+    q->flags = 0;
+    if (!q->parm.size)
+        q->parm.size = BCMOS_MSG_QUEUE_SIZE_UNLIMITED;
+    if (!q->parm.high_wm)
+        q->parm.high_wm = BCMOS_MSG_QUEUE_SIZE_UNLIMITED;
+    if (!q->parm.low_wm)
+        q->parm.low_wm = q->parm.high_wm;
+    if (!q->parm.notify)
+        q->parm.notify = _bcmos_msgq_notify;
+}
+
+/* Destroy message list */
+static void bcmos_msg_list_destroy(bcmos_msg_list *l)
+{
+    bcmos_msg *msg, *tmp;
+    STAILQ_FOREACH_SAFE(msg, l, next, tmp)
+    {
+        STAILQ_REMOVE_HEAD(l, next);
+        bcmos_msg_free(msg);
+    }
+}
+
+#ifdef BCMOS_MSG_QUEUE_REMOTE_SUPPORT
+
+/* Remote queue support - common part of create/destroy */
+
+static bcmos_errno _bcmos_msg_queue_destroy_remote_ep(bcmos_msg_queue *queue)
+{
+    if (queue->q.parm.close)
+        queue->q.parm.close(queue);
+    bcmos_mutex_destroy(&queue->send_lock);
+    if (queue->send_buf)
+        bcmos_free(queue->send_buf);
+    if (queue->recv_buf)
+        bcmos_free(queue->recv_buf);
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno _bcmos_msg_queue_create_remote_ep(bcmos_msg_queue *queue)
+{
+    bcmos_errno rc;
+
+    /* Allocate tx and rx buffers */
+    if (!queue->q.parm.max_mtu)
+    {
+        queue->q.parm.max_mtu = BCMOS_MSG_QUEUE_DEFAULT_MAX_MTU;
+    }
+    queue->send_buf = bcmos_calloc(queue->q.parm.max_mtu);
+    if (!queue->send_buf)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_NOMEM, "Can't allocate send_buf\n");
+    }
+
+    queue->recv_buf = bcmos_calloc(queue->q.parm.max_mtu);
+    if (!queue->recv_buf)
+    {
+        bcmos_free(queue->send_buf);
+        BCMOS_TRACE_RETURN(BCM_ERR_NOMEM, "Can't allocate recv_buf\n");
+    }
+    bcmos_mutex_create(&queue->send_lock, 0, queue->q.parm.name);
+
+    switch (queue->q.parm.ep_type)
+    {
+#ifdef BCMOS_MSG_QUEUE_DOMAIN_SOCKET
+    case BCMOS_MSG_QUEUE_EP_DOMAIN_SOCKET:
+        rc = bcmos_sys_msg_queue_domain_socket_open(queue);
+        break;
+#endif
+#ifdef BCMOS_MSG_QUEUE_UDP_SOCKET
+    case BCMOS_MSG_QUEUE_EP_UDP_SOCKET:
+        rc = bcmos_sys_msg_queue_udp_socket_open(queue);
+        break;
+#endif
+#ifdef BCMOS_MSG_QUEUE_USER_DEFINED
+    case BCMOS_MSG_QUEUE_EP_USER_DEFINED:
+        if (parm.open == NULL || parm.close == NULL || parm.send==NULL || parm.recv == NULL)
+        {
+            rc = BCM_ERR_PARM;
+            break;
+        }
+        rc = parm.open(queue);
+        break;
+#endif
+    default:
+        rc = BCM_ERR_PARM;
+        break;
+    }
+
+    if (rc)
+    {
+        _bcmos_msg_queue_destroy_remote_ep(queue);
+    }
+
+    return rc;
+}
+
+#endif /* #ifdef BCMOS_MSG_QUEUE_REMOTE_SUPPORT */
+
+/* Create message queue. */
+bcmos_errno bcmos_msg_queue_create(bcmos_msg_queue *queue, const bcmos_msg_queue_parm *parm)
+{
+    bcmos_errno rc;
+
+    if (!queue || !parm)
+        BCMOS_TRACE_RETURN(BCM_ERR_PARM, "queue %p, parm %p\n", queue, parm);
+    memset(queue, 0, sizeof(*queue));
+    queue->q.parm = *parm;
+
+    if (parm->ep_type == BCMOS_MSG_QUEUE_EP_LOCAL)
+    {
+        rc = bcmos_sem_create(&queue->m, 0, parm->flags, queue->q.parm.name);
+        if (!rc)
+            bcmos_msg_queue_nw_init(&queue->q, parm);
+    }
+    else
+#ifdef BCMOS_MSG_QUEUE_REMOTE_SUPPORT
+    {
+        rc = _bcmos_msg_queue_create_remote_ep(queue);
+    }
+#else
+    {
+        rc = BCM_ERR_PARM;
+    }
+#endif
+
+    if (rc)
+        return rc;
+
+    queue->magic = BCMOS_MSG_QUEUE_VALID;
+    /* Copy name to make sure that it is not released - in case it was on the stack */
+    if (queue->q.parm.name)
+    {
+        strncpy(queue->name, queue->q.parm.name, sizeof(queue->name) - 1);
+        queue->q.parm.name = queue->name;
+    }
+    bcmos_mutex_lock(&bcmos_res_lock);
+    STAILQ_INSERT_TAIL(&msg_queue_list, queue, list);
+    bcmos_mutex_unlock(&bcmos_res_lock);
+    return BCM_ERR_OK;
+}
+
+/* Destroy queue */
+bcmos_errno bcmos_msg_queue_destroy(bcmos_msg_queue *queue)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+
+    if (!queue || queue->magic != BCMOS_MSG_QUEUE_VALID)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_PARM, "queue handle is invalid\n");
+    }
+    queue->magic = BCMOS_MSG_QUEUE_DELETED;
+    bcmos_mutex_lock(&bcmos_res_lock);
+    STAILQ_REMOVE(&msg_queue_list, queue, bcmos_msg_queue, list);
+    bcmos_mutex_unlock(&bcmos_res_lock);
+
+    if (queue->q.parm.ep_type == BCMOS_MSG_QUEUE_EP_LOCAL)
+    {
+        bcmos_sem_destroy(&queue->m);
+        /* Release all pending messages */
+        bcmos_msg_list_destroy(&queue->q.msgl_urg);
+        bcmos_msg_list_destroy(&queue->q.msgl);
+    }
+#ifdef BCMOS_MSG_QUEUE_REMOTE_SUPPORT
+    else
+    {
+        rc = _bcmos_msg_queue_destroy_remote_ep(queue);
+    }
+#endif
+
+    return rc;
+}
+
+/* Get queue info */
+bcmos_errno bcmos_msg_queue_query(const bcmos_msg_queue *queue, bcmos_msg_queue_info *info)
+{
+    if (!queue || !info)
+        BCMOS_TRACE_RETURN(BCM_ERR_PARM, "queue %p, info %p\n", queue, info);
+    info->stat = queue->q.stat;
+    info->parm = queue->q.parm;
+    return BCM_ERR_OK;
+}
+
+/* Message queue iterator */
+bcmos_errno bcmos_msg_queue_get_next(const bcmos_msg_queue **prev)
+{
+    const bcmos_msg_queue *queue;
+
+    if (prev == NULL)
+    {
+        return BCM_ERR_PARM;
+    }
+    queue = *prev;
+    if (queue && queue->magic != BCMOS_MSG_QUEUE_VALID)
+    {
+        return BCM_ERR_PARM;
+    }
+    if (queue)
+    {
+        queue = STAILQ_NEXT(queue, list);
+    }
+    else
+    {
+        queue = STAILQ_FIRST(&msg_queue_list);
+    }
+    *prev = queue;
+    if (!queue)
+    {
+        return BCM_ERR_NO_MORE;
+    }
+    return BCM_ERR_OK;
+}
+
+#ifdef BCMOS_MSG_QUEUE_REMOTE_SUPPORT
+
+/* Pack / unpack message header.
+ * In the future we might adopt bcmolt_buf service into OS abstraction and use it
+ * for packing / unpacking.
+ */
+
+void bcmos_msg_hdr_pack(const bcmos_msg *msg, uint8_t *buf, uint32_t data_size)
+{
+    uint16_t val16;
+    uint32_t val32;
+    val16 = BCMOS_ENDIAN_CPU_TO_BIG_U16(msg->type);
+    memcpy(buf, &val16, sizeof(val16));
+    buf[2] = (uint8_t)msg->instance;
+    buf[3] = (uint8_t)msg->sender;
+    val32 = BCMOS_ENDIAN_CPU_TO_BIG_U32(data_size);
+    memcpy(&buf[4], &val32, sizeof(val32));
+}
+
+void bcmos_msg_hdr_unpack(const uint8_t *buf, bcmos_msg *msg)
+{
+    uint16_t val16;
+    uint32_t val32;
+    memcpy(&val16, buf, sizeof(val16));
+    val16 = BCMOS_ENDIAN_BIG_TO_CPU_U16(val16);
+    msg->type = (bcmos_msg_id)val16;
+    msg->instance = (bcmos_msg_instance)buf[2];
+    msg->sender = (bcmos_module_id)buf[3];
+    memcpy(&val32, &buf[4], sizeof(val32));
+    msg->size = BCMOS_ENDIAN_BIG_TO_CPU_U32(val32); /* can be overwritten by unpacker */
+    msg->handler = NULL;
+    msg->send_flags = 0;
+}
+
+/* Send message to remote EP wrapper */
+static bcmos_errno _bcmos_msg_send_to_remote_ep(bcmos_msg_queue *queue, bcmos_msg *msg, bcmos_msg_send_flags flags)
+{
+    uint8_t *buf = NULL;
+    uint32_t buf_length = 0;
+    bcmos_errno rc;
+
+    bcmos_mutex_lock(&queue->send_lock);
+    rc = queue->q.parm.pack(queue, msg, &buf, &buf_length);
+    rc = rc ? rc : queue->q.parm.send(queue, buf, buf_length);
+    bcmos_mutex_unlock(&queue->send_lock);
+
+    /* Release if sent successfully or if auto-release flag is set */
+    if (rc == BCM_ERR_OK || !(flags & BCMOS_MSG_SEND_NO_FREE_ON_ERROR))
+    {
+        bcmos_msg_free(msg);
+    }
+    if (buf && queue->q.parm.free_packed)
+    {
+        queue->q.parm.free_packed(queue, buf);
+    }
+    if (rc)
+    {
+        ++queue->q.stat.msg_discarded;
+    }
+    else
+    {
+        ++queue->q.stat.msg_sent;
+    }
+
+    return rc;
+}
+
+/* Receive message from remote EP wrapper */
+static bcmos_errno _bcmos_msg_recv_from_remote_ep(bcmos_msg_queue *queue, uint32_t timeout, bcmos_msg **msg)
+{
+    uint8_t *buf = NULL;
+    uint32_t buf_length = 0;
+    bcmos_errno rc;
+
+    rc = queue->q.parm.recv(queue, timeout, &buf, &buf_length);
+    rc = rc ? rc : queue->q.parm.unpack(queue, buf, buf_length, msg);
+    if (buf && queue->q.parm.free_packed)
+    {
+        queue->q.parm.free_packed(queue, buf);
+    }
+    if (!rc)
+    {
+        ++queue->q.stat.msg_received;
+    }
+
+    return rc;
+}
+
+#endif /* BCMOS_MSG_QUEUE_REMOTE_SUPPORT */
+
+/* Send message to queue */
+bcmos_errno bcmos_msg_send(bcmos_msg_queue *queue, bcmos_msg *msg, bcmos_msg_send_flags flags)
+{
+    long lock_flags;
+    bcmos_errno rc;
+
+#ifdef BCMOS_MSG_QUEUE_REMOTE_SUPPORT
+    if (queue->q.parm.ep_type != BCMOS_MSG_QUEUE_EP_LOCAL)
+    {
+        return _bcmos_msg_send_to_remote_ep(queue, msg, flags);
+    }
+#endif
+
+    lock_flags = bcmos_fastlock_lock(&queue->q.lock);
+    rc = _bcmos_msg_put(&queue->q, msg, flags);
+    if (rc)
+    {
+        bcmos_fastlock_unlock(&queue->q.lock, lock_flags);
+        if (!(flags & BCMOS_MSG_SEND_NO_FREE_ON_ERROR))
+        {
+            bcmos_msg_free(msg);
+        }
+        BCMOS_TRACE_ERR("Overflow: Queue %s\n", queue->q.parm.name);
+        return rc;
+    }
+
+    /* Success */
+    if (queue->is_waiting)
+    {
+        /* Kick waiting task */
+        queue->is_waiting = BCMOS_FALSE;
+        bcmos_fastlock_unlock(&queue->q.lock, lock_flags);
+        bcmos_sem_post(&queue->m);
+    }
+    else
+    {
+        bcmos_fastlock_unlock(&queue->q.lock, lock_flags);
+    }
+
+    return BCM_ERR_OK;
+}
+
+/* Send message to module (internal) - doesn't post any semaphores so it's safe to call under a fastlock */
+static bcmos_errno _bcmos_msg_send_to_module(
+    bcmos_module_id module_id,
+    bcmos_msg *msg,
+    bcmos_msg_send_flags flags,
+    bcmos_sem **sem_to_post)
+{
+    bcmos_module *module = _bcmos_module_get(module_id);
+    bcmos_task *task;
+    long lock_flags, q_lock_flags;
+    uint32_t active_modules;
+    bcmos_errno rc;
+    *sem_to_post = NULL;
+
+    if (!module || !msg->handler)
+    {
+        if (!module)
+        {
+            BCMOS_TRACE_ERR("Module %d doesn't exist\n", module_id);
+            rc = BCM_ERR_NOENT;
+        }
+        else
+        {
+            BCMOS_TRACE_ERR("msg->handler is not set. msg->type=%d\n", msg->type);
+            rc = BCM_ERR_PARM;
+        }
+        if (!(flags & BCMOS_MSG_SEND_NO_FREE_ON_ERROR))
+        {
+            bcmos_msg_free(msg);
+        }
+        return rc;
+    }
+
+    task = module->my_task;
+    lock_flags = bcmos_fastlock_lock(&task->active_lock);
+    q_lock_flags = bcmos_fastlock_lock(&module->msgq.lock);
+
+    rc = _bcmos_msg_put(&module->msgq, msg, flags);
+    if (rc)
+    {
+        bcmos_fastlock_unlock(&module->msgq.lock, q_lock_flags);
+        bcmos_fastlock_unlock(&task->active_lock, lock_flags);
+
+        /* Queue overflow */
+        if (!(flags & BCMOS_MSG_SEND_NO_FREE_ON_ERROR))
+            bcmos_msg_free(msg);
+
+        BCMOS_TRACE_ERR("Overflow: Queue %s\n", module->parm.qparm.name);
+
+        return rc;
+    }
+    bcmos_fastlock_unlock(&module->msgq.lock, q_lock_flags);
+
+    /* Success. Update active_modules task and kick the task */
+    active_modules = task->active_modules;
+    task->active_modules |= (1 << module->idx);
+    bcmos_fastlock_unlock(&task->active_lock, lock_flags);
+
+    /* Notify caller to kick task if there is a chance it was waiting */
+    if (!active_modules)
+        *sem_to_post = &task->active_sem;
+
+    return BCM_ERR_OK;
+}
+
+/* Send message to module */
+bcmos_errno bcmos_msg_send_to_module(bcmos_module_id module_id, bcmos_msg *msg, bcmos_msg_send_flags flags)
+{
+    bcmos_sem *sem_to_post;
+    bcmos_errno err = _bcmos_msg_send_to_module(module_id, msg, flags, &sem_to_post);
+    if (sem_to_post)
+        bcmos_sem_post(sem_to_post);
+    return err;
+}
+
+/* Get message from the head of message queue */
+bcmos_errno bcmos_msg_recv(bcmos_msg_queue *queue, uint32_t timeout, bcmos_msg **msg)
+{
+    long lock_flags;
+
+    if (!queue || !msg)
+        BCMOS_TRACE_RETURN(BCM_ERR_PARM, "queue %p, msg %p\n", queue, msg);
+
+#ifdef BCMOS_MSG_QUEUE_REMOTE_SUPPORT
+    if (queue->q.parm.ep_type != BCMOS_MSG_QUEUE_EP_LOCAL)
+    {
+        return _bcmos_msg_recv_from_remote_ep(queue, timeout, msg);
+    }
+#endif
+
+    lock_flags = bcmos_fastlock_lock(&queue->q.lock);
+    *msg = _bcmos_msg_get(&queue->q);
+    if (*msg)
+    {
+        bcmos_fastlock_unlock(&queue->q.lock, lock_flags);
+        return BCM_ERR_OK;
+    }
+    if (!timeout)
+    {
+        bcmos_fastlock_unlock(&queue->q.lock, lock_flags);
+        return BCM_ERR_NOENT;
+    }
+
+    /* Receive with wait */
+    queue->is_waiting = BCMOS_TRUE;
+    bcmos_fastlock_unlock(&queue->q.lock, lock_flags);
+
+    /* wait for it */
+    bcmos_sem_wait(&queue->m, timeout);
+    lock_flags = bcmos_fastlock_lock(&queue->q.lock);
+    *msg = _bcmos_msg_get(&queue->q);
+    queue->is_waiting = BCMOS_FALSE;
+    bcmos_fastlock_unlock(&queue->q.lock, lock_flags);
+    if (!*msg)
+        return BCM_ERR_TIMEOUT;
+
+    return BCM_ERR_OK;
+}
+
+
+/*
+ * Queue group support
+ */
+
+/* Create message queue group. */
+bcmos_errno bcmos_msg_qgroup_create(bcmos_msg_qgroup *qgroup, const bcmos_msg_qgroup_parm *parm)
+{
+    bcmos_errno rc;
+    bcmos_qgroup_prty prty;
+
+    if (!qgroup || !parm || !parm->nqueues || parm->nqueues>32)
+        BCMOS_TRACE_RETURN(BCM_ERR_PARM, "queue %p, parm %p nqueues %u\n", qgroup, parm, parm ? parm->nqueues: 0);
+    memset(qgroup, 0, sizeof(*qgroup));
+    rc = bcmos_sem_create(&qgroup->m, 0, parm->flags, NULL);
+    if (rc)
+        return rc;
+    qgroup->parm = *parm;
+    bcmos_fastlock_init(&qgroup->lock, parm->flags);
+    if (!qgroup->parm.size)
+        qgroup->parm.size = BCMOS_MSG_QUEUE_SIZE_UNLIMITED;
+    if (!qgroup->parm.high_wm)
+        qgroup->parm.high_wm = BCMOS_MSG_QUEUE_SIZE_UNLIMITED;
+    if (!qgroup->parm.low_wm)
+        qgroup->parm.low_wm = qgroup->parm.high_wm;
+    if (!qgroup->parm.notify)
+        qgroup->parm.notify = _bcmos_qgroup_notify;
+    qgroup->msgl = bcmos_calloc(sizeof(bcmos_msg_list) * (uint32_t)parm->nqueues);
+    if (!qgroup->msgl)
+    {
+        bcmos_msg_qgroup_destroy(qgroup);
+        return BCM_ERR_NOMEM;
+    }
+    for (prty = 0; prty < qgroup->parm.nqueues; prty++)
+    {
+        STAILQ_INIT(&qgroup->msgl[prty]);
+    }
+    /* Copy name to make sure that it is not released - in case it was on the stack */
+    if (qgroup->parm.name)
+    {
+        strncpy(qgroup->name, qgroup->parm.name, sizeof(qgroup->parm.name) - 1);
+        qgroup->parm.name = qgroup->name;
+    }
+    qgroup->magic = BCMOS_MSG_QGROUP_VALID;
+    bcmos_mutex_lock(&bcmos_res_lock);
+    STAILQ_INSERT_TAIL(&msg_qgroup_list, qgroup, list);
+    bcmos_mutex_unlock(&bcmos_res_lock);
+
+    return BCM_ERR_OK;
+}
+
+/** Destroy queue group
+ *
+ * \param[in]   qgroup       Queue group handle
+ * \returns 0=OK or error code <0
+ */
+bcmos_errno bcmos_msg_qgroup_destroy(bcmos_msg_qgroup *qgroup)
+{
+    bcmos_qgroup_prty prty;
+
+    if (!qgroup || qgroup->magic != BCMOS_MSG_QGROUP_VALID)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_PARM, "queue group handle is invalid\n");
+    }
+
+    qgroup->magic = BCMOS_MSG_QGROUP_DELETED;
+
+    bcmos_mutex_lock(&bcmos_res_lock);
+    STAILQ_REMOVE(&msg_qgroup_list, qgroup, bcmos_msg_qgroup, list);
+    bcmos_mutex_unlock(&bcmos_res_lock);
+
+    bcmos_sem_destroy(&qgroup->m);
+
+    /* Release all pending messages */
+    if (qgroup->msgl)
+    {
+        for (prty = 0; prty < qgroup->parm.nqueues; prty++)
+        {
+            bcmos_msg_list_destroy(&qgroup->msgl[prty]);
+        }
+        bcmos_free(qgroup->msgl);
+    }
+    return BCM_ERR_OK;
+
+}
+
+/** Get queue group info */
+bcmos_errno bcmos_msg_qgroup_query(const bcmos_msg_qgroup *qgroup, bcmos_msg_qgroup_info *info)
+{
+    if (!qgroup || !info)
+        return BCM_ERR_PARM;
+
+    info->parm = qgroup->parm;
+    info->stat = qgroup->stat;
+
+    return BCM_ERR_OK;
+}
+
+/** Message queue group iterator
+ * \param[in] prev      Previous queue group. *prev==NULL - get first
+ * \return: BCM_ERR_OK, BCM_ERR_NOENT, BCM_ERR_NO_MORE
+ */
+bcmos_errno bcmos_msg_qgroup_get_next(const bcmos_msg_qgroup **prev)
+{
+    const bcmos_msg_qgroup *qgrp;
+
+    if (prev == NULL)
+    {
+        return BCM_ERR_PARM;
+    }
+    qgrp = *prev;
+    if (qgrp && qgrp->magic != BCMOS_MSG_QGROUP_VALID)
+    {
+        return BCM_ERR_PARM;
+    }
+    if (qgrp)
+    {
+        qgrp = STAILQ_NEXT(qgrp, list);
+    }
+    else
+    {
+        qgrp = STAILQ_FIRST(&msg_qgroup_list);
+    }
+    *prev = qgrp;
+    if (!qgrp)
+    {
+        return BCM_ERR_NO_MORE;
+    }
+    return BCM_ERR_OK;
+}
+
+/* get message from non-empty queue group queue */
+static inline bcmos_msg *_bcmos_qgroup_msg_get(bcmos_msg_qgroup *qgroup, bcmos_qgroup_prty prty)
+{
+    bcmos_msg *msg;
+    msg = STAILQ_FIRST(&qgroup->msgl[prty]);
+    BUG_ON(!msg);
+    STAILQ_REMOVE_HEAD(&qgroup->msgl[prty], next);
+    if (STAILQ_EMPTY(&qgroup->msgl[prty]))
+    {
+        qgroup->active_mask &= ~(1 << prty);
+    }
+    return msg;
+}
+
+/* Send message to queue group */
+bcmos_errno bcmos_msg_send_to_qgroup(bcmos_msg_qgroup *qgroup, bcmos_msg *msg, bcmos_qgroup_prty prty,
+    bcmos_msg_send_flags flags)
+{
+    long lock_flags;
+    bcmos_errno rc = BCM_ERR_OK;
+
+    if (prty >= qgroup->parm.nqueues)
+    {
+        if (!(flags & BCMOS_MSG_SEND_NO_FREE_ON_ERROR))
+        {
+            bcmos_msg_free(msg);
+        }
+        return BCM_ERR_PARM;
+    }
+    msg->send_flags = flags;
+
+    lock_flags = bcmos_fastlock_lock(&qgroup->lock);
+
+    /* Put into the relevant queue */
+    STAILQ_INSERT_TAIL(&qgroup->msgl[prty], msg, next);
+    qgroup->active_mask |= (1 << prty);
+    _bcmos_qgroup_stat_inc(qgroup);
+
+    /* Overflow check */
+    if ((qgroup->stat.msg_in > qgroup->parm.size))
+    {
+        bcmos_msg *m;
+        bcmos_qgroup_prty i;
+        /* Find the lowest-priority queue with data and discard the head message.
+         * The loop always finds something because we've just added a message
+         */
+        for (i = qgroup->parm.nqueues - 1; (qgroup->active_mask & (1 << i)) == 0; i--)
+            ;
+        m = _bcmos_qgroup_msg_get(qgroup, i);
+        --qgroup->stat.msg_in;
+        ++qgroup->stat.msg_discarded;
+        if (!(m->send_flags & BCMOS_MSG_SEND_NO_FREE_ON_ERROR))
+        {
+            bcmos_msg_free(m);
+        }
+        rc = BCM_ERR_OVERFLOW;
+    }
+
+    /* Kick waiting task */
+    if (qgroup->is_waiting)
+    {
+        qgroup->is_waiting = BCMOS_FALSE;
+        bcmos_fastlock_unlock(&qgroup->lock, lock_flags);
+        bcmos_sem_post(&qgroup->m);
+    }
+    else
+    {
+        bcmos_fastlock_unlock(&qgroup->lock, lock_flags);
+    }
+
+    return rc;
+
+}
+
+/* Get highest priority message from queue group */
+bcmos_errno bcmos_msg_recv_from_qgroup(bcmos_msg_qgroup *qgroup, uint32_t timeout, bcmos_msg **msg)
+{
+    long lock_flags;
+    bcmos_qgroup_prty prty;
+
+    if (!qgroup || !msg)
+        BCMOS_TRACE_RETURN(BCM_ERR_PARM, "qgroup %p, msg %p\n", qgroup, msg);
+
+    lock_flags = bcmos_fastlock_lock(&qgroup->lock);
+    if (!qgroup->active_mask)
+    {
+        if (!timeout)
+        {
+            bcmos_fastlock_unlock(&qgroup->lock, lock_flags);
+            return BCM_ERR_NOENT;
+        }
+
+        /* Receive with wait */
+        qgroup->is_waiting = BCMOS_TRUE;
+        bcmos_fastlock_unlock(&qgroup->lock, lock_flags);
+
+        /* wait for it */
+        bcmos_sem_wait(&qgroup->m, timeout);
+
+        /* Done waiting. Either got a message or a timeout */
+        lock_flags = bcmos_fastlock_lock(&qgroup->lock);
+        qgroup->is_waiting = BCMOS_FALSE;
+        if (!qgroup->active_mask)
+        {
+            bcmos_fastlock_unlock(&qgroup->lock, lock_flags);
+            return BCM_ERR_TIMEOUT;
+        }
+    }
+
+    prty = (bcmos_qgroup_prty)(ffs(qgroup->active_mask) - 1);
+    BUG_ON(prty >= qgroup->parm.nqueues);
+    *msg = _bcmos_qgroup_msg_get(qgroup, prty);
+    _bcmos_qgroup_stat_dec(qgroup);
+    bcmos_fastlock_unlock(&qgroup->lock, lock_flags);
+
+    return BCM_ERR_OK;
+}
+
+
+/*
+ * Message registration and dispatch
+ */
+
+/* Hash entry */
+typedef struct msg_hash_entry msg_hash_entry;
+
+struct msg_hash_entry
+{
+    /* Key */
+    uint32_t key;       /* msg_type + instance */
+
+    /* Value */
+    bcmos_module_id module_id;
+    F_bcmos_msg_handler handler;
+
+    /* List of entries with the same key */
+    SLIST_ENTRY(msg_hash_entry) list;
+};
+
+/* Hash table */
+static SLIST_HEAD(msg_hash, msg_hash_entry) msg_hash_table[BCMOS_MSG_HASH_SIZE];
+
+/* Make hash key from msg_type and instance */
+static inline uint32_t _bcmos_msg_hash_key(bcmos_msg_id msg_type, bcmos_msg_instance instance)
+{
+    return ((uint32_t)instance << 16) | (uint32_t)msg_type;
+}
+
+/* Hash function */
+static inline uint32_t _bcmos_msg_hash_func(uint32_t key)
+{
+    key ^= (key >> 9);
+    key ^= (key << 3);
+    key ^= (key >> 15);
+    return key % BCMOS_MSG_HASH_SIZE;
+}
+
+/* Find entry in hash */
+static inline msg_hash_entry *_bcmos_msg_hash_find(bcmos_msg_id msg_type, bcmos_msg_instance instance)
+{
+    uint32_t key = _bcmos_msg_hash_key(msg_type, instance);
+    uint32_t hash = _bcmos_msg_hash_func(key);
+    msg_hash_entry *entry;
+    SLIST_FOREACH(entry, &msg_hash_table[hash], list)
+    {
+        if (entry->key == key)
+            break;
+    }
+    return entry;
+}
+
+/* Register message_type+instance --> module+handler */
+bcmos_errno bcmos_msg_register(bcmos_msg_id msg_type, bcmos_msg_instance instance,
+    bcmos_module_id module_id, F_bcmos_msg_handler handler)
+{
+    uint32_t key = _bcmos_msg_hash_key(msg_type, instance);
+    uint32_t hash = _bcmos_msg_hash_func(key);
+    msg_hash_entry *entry;
+    long lock_flags;
+
+    if (!handler)
+        return BCM_ERR_PARM;
+
+    entry = bcmos_calloc(sizeof(*entry));
+    if (!entry)
+        return BCM_ERR_NOMEM;
+
+    entry->key = key;
+    entry->module_id = module_id;
+    entry->handler = handler;
+    lock_flags = bcmos_fastlock_lock(&bcmos_msg_register_lock);
+    if (_bcmos_msg_hash_find(msg_type, instance) != NULL)
+    {
+        bcmos_fastlock_unlock(&bcmos_msg_register_lock, lock_flags);
+        bcmos_free(entry);
+        return BCM_ERR_ALREADY;
+    }
+    SLIST_INSERT_HEAD(&msg_hash_table[hash], entry, list);
+    bcmos_fastlock_unlock(&bcmos_msg_register_lock, lock_flags);
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcmos_msg_unregister(bcmos_msg_id msg_type, bcmos_msg_instance instance, bcmos_module_id module_id)
+{
+    uint32_t key = _bcmos_msg_hash_key(msg_type, instance);
+    uint32_t hash = _bcmos_msg_hash_func(key);
+    msg_hash_entry *entry;
+    long lock_flags;
+
+    lock_flags = bcmos_fastlock_lock(&bcmos_msg_register_lock);
+    entry = _bcmos_msg_hash_find(msg_type, instance);
+    if (!entry)
+    {
+        bcmos_fastlock_unlock(&bcmos_msg_register_lock, lock_flags);
+        return BCM_ERR_NOENT;
+    }
+
+    if (entry->module_id != module_id)
+    {
+        bcmos_fastlock_unlock(&bcmos_msg_register_lock, lock_flags);
+        return BCM_ERR_INVALID_OP;
+    }
+
+    SLIST_REMOVE(&msg_hash_table[hash], entry, msg_hash_entry, list);
+    bcmos_fastlock_unlock(&bcmos_msg_register_lock, lock_flags);
+    bcmos_free(entry);
+
+    return BCM_ERR_OK;
+}
+
+void bcmos_msg_shutdown_mode_set(bcmos_bool shutdown_mode)
+{
+    bcmos_msg_shutdown_mode = shutdown_mode;
+}
+
+bcmos_bool bcmos_msg_shutdown_mode_get(void)
+{
+    return bcmos_msg_shutdown_mode;
+}
+
+/* Dispatch message to registered module */
+bcmos_errno bcmos_msg_dispatch(bcmos_msg *msg, bcmos_msg_send_flags flags)
+{
+    bcmos_errno err;
+
+    if (unlikely(bcmos_msg_shutdown_mode))
+    {
+        /* In shutdown mode, we need to acquire the same lock used to protect bcmos_msg_register() /
+         * bcmos_msg_unregister(), since we must support calling these functions concurrently. */
+        msg_hash_entry *entry;
+        bcmos_sem *sem_to_post = NULL;
+        long lock_flags = bcmos_fastlock_lock(&bcmos_msg_register_lock);
+        entry = _bcmos_msg_hash_find(msg->type, msg->instance);
+
+        if (entry)
+        {
+            msg->handler = entry->handler;
+            err = _bcmos_msg_send_to_module(entry->module_id, msg, flags, &sem_to_post);
+        }
+        else
+        {
+            /* Not found. Release automatically if requested. */
+            if (!(flags & BCMOS_MSG_SEND_NO_FREE_ON_ERROR))
+                bcmos_msg_free(msg);
+            err = BCM_ERR_OK;
+        }
+
+        bcmos_fastlock_unlock(&bcmos_msg_register_lock, lock_flags);
+        if (sem_to_post)
+            bcmos_sem_post(sem_to_post);
+    }
+    else
+    {
+        msg_hash_entry *entry = _bcmos_msg_hash_find(msg->type, msg->instance);
+
+        if (entry)
+        {
+            msg->handler = entry->handler;
+            err = bcmos_msg_send_to_module(entry->module_id, msg, flags);
+        }
+        else
+        {
+            /* Not found. Release automatically if requested. */
+            BCMOS_TRACE_ERR("Can't dispatch unregistered msg %d:%d\n", msg->type, msg->instance);
+            if (!(flags & BCMOS_MSG_SEND_NO_FREE_ON_ERROR))
+                bcmos_msg_free(msg);
+            err = BCM_ERR_NOENT;
+        }
+    }
+
+    return err;
+}
+
+/*
+ * Task management
+ */
+
+/*
+ * Default task handler
+ */
+/*lint -e{632,633,634}
+ * There are a few warnings about
+ * implicit bcmos_errno conversion to int. It is to bothersome now
+ * to change task handler prototype everywhere and the warning is harmless
+ */
+int bcmos_dft_task_handler(long data)
+{
+    bcmos_task *task = (bcmos_task *)data;
+    long flags = 0, q_flags = 0;
+    uint32_t active_modules;
+    int last_module = 0; /* 1-based last handled module index */
+    bcmos_module *module;
+    bcmos_msg *msg;
+    int rc;
+
+
+    /* Set / validate task timeout */
+    rc = bcmos_task_timeout_set(task, task->parm.msg_wait_timeout, task->parm.timeout_handler);
+    if (rc)
+    {
+        return rc;
+    }
+
+    /* Call init callback if any */
+    if (task->parm.init_handler)
+    {
+        rc = task->parm.init_handler(task->parm.data);
+        if (rc)
+        {
+            BCMOS_TRACE_ERR("Task %s: init_handler returned error %s (%d)\n",
+                task->parm.name, bcmos_strerror((bcmos_errno)rc), rc);
+            bcmos_task_destroy(task);
+            return rc;
+        }
+    }
+
+    /* Wait for module activity */
+    while (!task->destroy_request)
+    {
+        task->current_module = BCMOS_MODULE_ID_NONE;
+
+        /* Wait for module activity */
+        rc = bcmos_sem_wait(&task->active_sem, task->parm.msg_wait_timeout);
+        if (rc == BCM_ERR_TIMEOUT)
+        {
+            F_bcmos_task_handler timeout_handler = task->parm.timeout_handler;
+
+            /* Handle possible race condition */
+            if (!timeout_handler)
+                continue;
+            rc = timeout_handler(data);
+            if (rc != BCM_ERR_OK)
+            {
+                BCMOS_TRACE_ERR("Task %s: terminated by timeout_handler. error %s (%d)\n",
+                    task->parm.name, bcmos_strerror(rc), rc);
+                break;
+            }
+            /* Keep waiting */
+            continue;
+        }
+
+        /* RR active modules */
+        do
+        {
+            flags = bcmos_fastlock_lock(&task->active_lock);
+            active_modules = (task->active_modules >> last_module);
+            if (!active_modules)
+            {
+                last_module = 0;
+                active_modules = task->active_modules;
+                if (!active_modules)
+                {
+                    /* No modules with work to do */
+                    bcmos_fastlock_unlock(&task->active_lock, flags);
+                    continue;
+                }
+            }
+            last_module += ffs(active_modules);
+            BUG_ON(last_module > BCMOS_MAX_MODULES_PER_TASK);
+            module = task->modules[last_module - 1];
+            BUG_ON(!module);
+
+            q_flags = bcmos_fastlock_lock(&module->msgq.lock);
+            /* Get message from the module's message queue */
+            msg = _bcmos_msg_get(&module->msgq);
+            if (!msg)
+            {
+                bcmos_fastlock_unlock(&module->msgq.lock, q_flags);
+                task->active_modules &= ~(1 << (last_module - 1));
+                bcmos_fastlock_unlock(&task->active_lock, flags);
+                continue;
+            }
+
+            bcmos_fastlock_unlock(&module->msgq.lock, q_flags);
+            bcmos_fastlock_unlock(&task->active_lock, flags);
+
+            /* Handle the message */
+            if (msg->handler)
+            {
+                task->current_module = module->id;
+                msg->handler(module->id, msg);
+            }
+            else
+            {
+                BCMOS_TRACE_ERR("msg->handler is not set. msg->type=%d\n", msg->type);
+                bcmos_msg_free(msg);
+            }
+
+        } while (task->active_modules);
+    }
+
+    return 0;
+}
+
+/* Set task message timeout.
+ * The function is only supported in integration mode
+ */
+bcmos_errno bcmos_task_timeout_set(bcmos_task *task, uint32_t timeout, F_bcmos_task_handler timeout_handler)
+{
+    if (task->parm.handler)
+    {
+        BCMOS_TRACE_ERR("%s: The function is only supported in integration mode (task handler == NULL)\n", task->parm.name);
+        return BCM_ERR_NOT_SUPPORTED;
+    }
+    if ((timeout && timeout != BCMOS_WAIT_FOREVER) && !timeout_handler)
+    {
+        BCMOS_TRACE_ERR("%s: timeout_handler is not set\n", task->parm.name);
+        return BCM_ERR_PARM;
+    }
+
+    /* 0 means FOREVER here */
+    if (!timeout)
+        timeout = BCMOS_WAIT_FOREVER;
+
+    task->parm.timeout_handler = timeout_handler;
+    task->parm.msg_wait_timeout = timeout;
+
+    return BCM_ERR_OK;
+}
+
+/*
+ * Module
+ */
+
+/* Register module */
+bcmos_errno bcmos_module_create(bcmos_module_id module_id, bcmos_task *task, bcmos_module_parm *parm)
+{
+    bcmos_module *module;
+    bcmos_errno rc = BCM_ERR_OK;
+    int i;
+
+    if ((unsigned)module_id >= (unsigned)BCMOS_MODULE_ID__NUM_OF || !parm)
+        BCMOS_TRACE_RETURN(BCM_ERR_PARM, "module %d, parm %p\n", module_id, parm);
+    if (!task)
+        BCMOS_TRACE_RETURN(BCM_ERR_NOT_SUPPORTED, "No task\n");
+    if (bcmos_modules[module_id])
+        BCMOS_TRACE_RETURN(BCM_ERR_ALREADY, "module_id %d\n", module_id);
+
+    module = bcmos_calloc(sizeof(bcmos_module));
+    if (!module)
+        BCMOS_TRACE_RETURN(BCM_ERR_NOMEM, "module_id %d\n", module_id);
+    module->id = module_id;
+    module->my_task = task;
+    module->parm = *parm;
+    module->context = (void *)parm->data;
+    bcmos_msg_queue_nw_init(&module->msgq, &parm->qparm);
+    /* Copy name to make sure that it is not released - in case it was on the stack */
+    if (module->parm.qparm.name)
+    {
+        strncpy(module->name, module->parm.qparm.name, sizeof(module->name) - 1);
+        module->parm.qparm.name = module->name;
+    }
+
+    /* Assign module id */
+    for (i = 0; i < BCMOS_MAX_MODULES_PER_TASK; i++)
+    {
+        if (!task->modules[i])
+        {
+            task->modules[i] = module;
+            module->idx = i;
+            break;
+        }
+    }
+    if (i ==  BCMOS_MAX_MODULES_PER_TASK)
+    {
+        bcmos_free(module);
+        BCMOS_TRACE_RETURN(BCM_ERR_TOO_MANY, "module_id %d\n", module_id);
+    }
+
+    bcmos_modules[module_id] = module;
+
+    /* Init module */
+    if (parm->init)
+    {
+        rc = parm->init(parm->data);
+        if (rc)
+            bcmos_module_destroy(module_id);
+    }
+
+    return rc;
+}
+
+/* Un-register module */
+bcmos_errno bcmos_module_destroy(bcmos_module_id module_id)
+{
+    bcmos_module *module = _bcmos_module_get(module_id);
+    bcmos_task *task;
+    long lock_flags, q_lock_flags;
+    bcmos_msg_list msgl_urg, msgl;
+
+    if (!module)
+        BCMOS_TRACE_RETURN(BCM_ERR_NOENT, "module_id %d\n", module_id);
+
+    task = module->my_task;
+    lock_flags = bcmos_fastlock_lock(&task->active_lock);
+    task->modules[module->idx] = NULL;
+    task->active_modules &= ~(1 << module->idx);
+
+    /* Because we are not allowed to free memory (via bcmos_free()) when interrupts are locked, we only empty the linked list (via SLIST_INIT()) and the free comes outside the locked
+     * section. */
+    q_lock_flags = bcmos_fastlock_lock(&module->msgq.lock);
+    msgl_urg = module->msgq.msgl_urg;
+    msgl = module->msgq.msgl;
+    STAILQ_INIT(&module->msgq.msgl_urg);
+    STAILQ_INIT(&module->msgq.msgl);
+    bcmos_fastlock_unlock(&module->msgq.lock, q_lock_flags);
+    bcmos_fastlock_unlock(&task->active_lock, lock_flags);
+
+    bcmos_msg_list_destroy(&msgl_urg);
+    bcmos_msg_list_destroy(&msgl);
+
+    if (module->parm.exit)
+        module->parm.exit(module->parm.data);
+    bcmos_modules[module_id] = NULL;
+    bcmos_free(module);
+
+    return BCM_ERR_OK;
+}
+
+/* Get current module id in the current task */
+bcmos_module_id bcmos_module_current(void)
+{
+    bcmos_task *task = bcmos_task_current();
+
+    if (!task)
+        return BCMOS_MODULE_ID_NONE;
+    return task->current_module;
+}
+
+/* Get module context set by bcmos_module_context_set() */
+void *bcmos_module_context(bcmos_module_id module_id)
+{
+    bcmos_module *module = _bcmos_module_get(module_id);
+    if (!module)
+        return NULL;
+    return module->context;
+}
+
+/* Set module context */
+bcmos_errno bcmos_module_context_set(bcmos_module_id module_id, void *context)
+{
+    bcmos_module *module = _bcmos_module_get(module_id);
+
+    if (!module)
+        BCMOS_TRACE_RETURN(BCM_ERR_NOENT, "module_id %d\n", module_id);
+    module->context = context;
+    return BCM_ERR_OK;
+}
+
+/* Query module info */
+bcmos_errno bcmos_module_query(bcmos_module_id module_id, const bcmos_task **task, bcmos_msg_queue_info *info)
+{
+    bcmos_module *module = _bcmos_module_get(module_id);
+
+    if (!module)
+    {
+        return BCM_ERR_NOENT;
+    }
+    if (task)
+    {
+        *task = module->my_task;
+    }
+    if (info)
+    {
+        info->parm = module->parm.qparm;
+        info->stat = module->msgq.stat;
+    }
+    return BCM_ERR_OK;
+}
+
+/*
+ * Events
+ */
+
+/* This function handles event arrival in module context */
+static void _bcmos_ev_in_module_handler(bcmos_module_id module_id, bcmos_msg *msg)
+{
+    bcmos_event *ev = _bcmos_msg_to_event(msg);
+    uint32_t active_bits;
+    long lock_flags;
+
+    active_bits = ev->active_bits & ev->parm.mask;
+    ev->parm.handler(ev->id, active_bits);
+
+    lock_flags = bcmos_fastlock_lock(&ev->lock);
+    ev->active_bits &= ~active_bits;
+    ev->is_waiting = BCMOS_TRUE;
+    bcmos_fastlock_unlock(&ev->lock, lock_flags);
+}
+
+/* Release event message. Only called in exceptional situations,
+ * such as module queue destroy. Do nothing.
+ */
+static void _bcmos_ev_msg_release(bcmos_msg *msg)
+{
+}
+
+/* Create event set */
+bcmos_errno bcmos_event_create(bcmos_event_id event_id, bcmos_event_parm *parm)
+{
+    bcmos_event *ev;
+    bcmos_module *module = NULL;
+    bcmos_errno rc;
+
+    if ((unsigned)event_id >= (unsigned)BCMOS_EVENT_ID__NUM_OF)
+        BCMOS_TRACE_RETURN(BCM_ERR_PARM, "event_id %d\n", event_id);
+
+    if (_bcmos_event_get(event_id))
+        BCMOS_TRACE_RETURN(BCM_ERR_ALREADY, "event_id %d\n", event_id);
+
+    if (parm && parm->module_id != BCMOS_MODULE_ID_NONE)
+    {
+        module = _bcmos_module_get(parm->module_id);
+        if (!module)
+            BCMOS_TRACE_RETURN(BCM_ERR_NOENT, "module_id %d\n", parm->module_id);
+        if (!parm->handler || !parm->mask)
+            BCMOS_TRACE_RETURN(BCM_ERR_PARM, "event_id %d, handler %p, mask %x\n", event_id, parm->handler, parm->mask);
+    }
+
+    ev = bcmos_calloc(sizeof(bcmos_event));
+    if (!ev)
+        BCMOS_TRACE_RETURN(BCM_ERR_NOMEM, "event_id %d\n", event_id);
+
+    ev->id = event_id;
+    if (parm)
+        ev->parm = *parm;
+    bcmos_fastlock_init(&ev->lock, ev->parm.flags);
+    {
+        rc = bcmos_sem_create(&ev->m, 0, ev->parm.flags, ev->parm.name);
+        if (rc)
+        {
+            bcmos_free(ev);
+            return rc;
+        }
+    }
+
+    /* Initialize event message in integration mode */
+    if (ev->parm.module_id != BCMOS_MODULE_ID_NONE)
+    {
+        ev->msg.handler = _bcmos_ev_in_module_handler;
+        ev->msg.release = _bcmos_ev_msg_release;
+        ev->msg.sender = BCMOS_MODULE_ID_NONE;
+        ev->msg.type = BCMOS_MSG_ID_INTERNAL_EVENT;
+        ev->is_waiting = BCMOS_TRUE;
+    }
+
+    /* Copy name to make sure that it is not released - in case it was on the stack */
+    if (ev->parm.name)
+    {
+        strncpy(ev->name, ev->parm.name, sizeof(ev->name) - 1);
+        ev->parm.name = ev->name;
+    }
+
+    bcmos_events[event_id] = ev;
+
+    return BCM_ERR_OK;
+}
+
+/* Destroy event set created by bcmos_event_create() */
+bcmos_errno bcmos_event_destroy(bcmos_event_id event_id)
+{
+    return BCM_ERR_NOT_SUPPORTED;
+}
+
+/* Raise event */
+bcmos_errno bcmos_event_raise(bcmos_event_id event_id, uint32_t active_bits)
+{
+    bcmos_event *ev = _bcmos_event_get(event_id);
+    long lock_flags;
+
+    if (!ev)
+        BCMOS_TRACE_RETURN(BCM_ERR_NOENT, "event_id %d\n", event_id);
+
+    lock_flags = bcmos_fastlock_lock(&ev->lock);
+    ev->active_bits |= active_bits;
+    if (ev->is_waiting && (ev->active_bits & ev->parm.mask))
+    {
+        ev->is_waiting = BCMOS_FALSE;
+        bcmos_fastlock_unlock(&ev->lock, lock_flags);
+        if (ev->parm.module_id != BCMOS_MODULE_ID_NONE)
+            bcmos_msg_send_to_module(ev->parm.module_id, &ev->msg, BCMOS_MSG_SEND_URGENT | BCMOS_MSG_SEND_NOLIMIT);
+        else
+            bcmos_sem_post(&ev->m);
+    }
+    else
+    {
+        bcmos_fastlock_unlock(&ev->lock, lock_flags);
+    }
+
+    return BCM_ERR_OK;
+}
+
+/* Wait for event */
+bcmos_errno bcmos_event_recv(bcmos_event_id event_id, uint32_t mask,
+    uint32_t timeout, uint32_t *active_bits)
+{
+    bcmos_event *ev = _bcmos_event_get(event_id);
+    long lock_flags;
+
+    BUG_ON(!active_bits);
+    if (!ev)
+        BCMOS_TRACE_RETURN(BCM_ERR_NOENT, "event_id %d is not registered\n", event_id);
+
+    lock_flags = bcmos_fastlock_lock(&ev->lock);
+    *active_bits = ev->active_bits & mask;
+    if (*active_bits)
+    {
+        ev->active_bits &= ~ *active_bits;
+        bcmos_fastlock_unlock(&ev->lock, lock_flags);
+        return BCM_ERR_OK;
+    }
+    if (!timeout)
+    {
+        bcmos_fastlock_unlock(&ev->lock, lock_flags);
+        return BCM_ERR_NOENT;
+    }
+
+    /* recv with wait */
+    ev->is_waiting = BCMOS_TRUE;
+    bcmos_fastlock_unlock(&ev->lock, lock_flags);
+
+    /* wait for it */
+    bcmos_sem_wait(&ev->m, timeout);
+    /* Either got event or timeout */
+    lock_flags = bcmos_fastlock_lock(&ev->lock);
+    *active_bits = ev->active_bits & mask;
+    ev->active_bits &= ~ *active_bits;
+    ev->is_waiting = BCMOS_FALSE;
+    bcmos_fastlock_unlock(&ev->lock, lock_flags);
+    /* If we wait forever and we got an event that does not match the mask we wait on (this is the only possible reason getting here if waiting forever), then we
+     * want to avoid returning BCM_ERR_TIMEOUT - it's not an error. */
+    if (timeout != BCMOS_WAIT_FOREVER && !*active_bits)
+        return BCM_ERR_TIMEOUT;
+    return BCM_ERR_OK;
+}
+
+/*
+ * Timer
+ */
+
+/* compare timestamps minding wrap-around
+ * returns delta >= 0 if ts1 >= ts2
+ */
+static inline int32_t _bcmos_timer_ts_delta(uint32_t ts1, uint32_t ts2)
+{
+    int32_t delta = (int)(ts1 - ts2);
+    return delta;
+}
+
+static int32_t _bcmos_timer_compare(struct bcmos_timer *t1, struct bcmos_timer *t2)
+{
+    int32_t delta = _bcmos_timer_ts_delta(t1->expire_at, t2->expire_at);
+#if defined(BCMOS_TIMER_RB_TREE) && !defined(BCMOS_TIMER_RB_TREE_LIST)
+    /* FreeBSD RB tree implementation doesn't support 2 nodes with the same key */
+    if (!delta)
+        delta = 1;
+#endif
+    return delta;
+}
+
+static inline void _bcmos_start_system_timer(bcmos_timer *head)
+{
+    if (head)
+    {
+        int32_t delay = _bcmos_timer_ts_delta(head->expire_at, bcmos_timestamp());
+        /* Handle rare race condition when next timer expired while we were fiddling
+         * with the pool. Just give it 1 more "tick". System handler handles all timers
+         * expired (<now .. now + PRECISION/2)
+         */
+        if (delay <= 0)
+        {
+            delay = BCMOS_TIMER_PRECISION_US / 2;
+        }
+        bcmos_sys_timer_start(&tmr_pool.sys_timer, delay);
+    }
+    else
+    {
+        bcmos_sys_timer_stop(&tmr_pool.sys_timer);
+    }
+}
+
+/*
+ * Timer pool: RB tree or TAILQ-based implementation
+ */
+static void _bcmos_timer_pool_insert(bcmos_timer *timer, uint32_t delay, bcmos_bool start_sys_timer)
+{
+    long flags;
+    bcmos_timer *head;
+
+    flags = bcmos_fastlock_lock(&tmr_pool.lock);
+    if (BCMOS_TIMER_IS_RUNNING(timer))
+    {
+        bcmos_fastlock_unlock(&tmr_pool.lock, flags);
+        return;
+    }
+    timer->period = timer->parm.periodic ? delay : 0;
+    timer->expire_at = BCMOS_ROUND_UP(bcmos_timestamp() + delay, BCMOS_TIMER_PRECISION_US / 2);
+    TMR_POOL_INSERT(&tmr_pool, timer);
+    timer->flags &= ~BCMOS_TIMER_FLAG_EXPIRED;
+    timer->flags |= BCMOS_TIMER_FLAG_RUNNING;
+
+    /* If new timer is at the top - kick system timer */
+    if (start_sys_timer)
+    {
+        head = TMR_POOL_FIRST(&tmr_pool);
+        if (timer == head)
+        {
+            _bcmos_start_system_timer(head);
+        }
+    }
+    bcmos_fastlock_unlock(&tmr_pool.lock, flags);
+}
+
+static void _bcmos_timer_stop(bcmos_timer *timer)
+{
+    long flags;
+    bcmos_bool was_top;
+    bcmos_msg_queue_nw *queue;
+
+    /* First take running timer out of the active pool */
+    flags = bcmos_fastlock_lock(&tmr_pool.lock);
+    timer->period = 0; /* Prevent periodic timer restart */
+    if (BCMOS_TIMER_IS_RUNNING(timer))
+    {
+        timer->flags &= ~BCMOS_TIMER_FLAG_RUNNING;
+        was_top = (timer == TMR_POOL_FIRST(&tmr_pool));
+        TMR_POOL_REMOVE(&tmr_pool, timer);
+
+        /* If timer was the top - stop/restart system timer */
+        if (was_top)
+        {
+            _bcmos_start_system_timer(TMR_POOL_FIRST(&tmr_pool));
+        }
+    }
+    bcmos_fastlock_unlock(&tmr_pool.lock, flags);
+
+    /* Now timer is not in the active pool. Perhaps it is already in
+     * destination module's queue. Take it out if yes.
+     */
+    queue = timer->queue;
+    if (queue)
+    {
+        flags = bcmos_fastlock_lock(&queue->lock);
+        /* Check queue again because the previous check was unprotected */
+        if (timer->queue)
+        {
+            bcmos_msg_list *msg_list = ((timer->parm.flags & BCMOS_TIMER_PARM_FLAGS_NON_URGENT))
+                ? &queue->msgl : &queue->msgl_urg;
+            if (STAILQ_REMOVE_SAFE(msg_list, &timer->msg, bcmos_msg, next) != NULL)
+            {
+                _bcmos_msgq_stat_dec(queue);
+            }
+            timer->queue = NULL;
+        }
+        timer->flags &= ~BCMOS_TIMER_FLAG_EXPIRED;
+        bcmos_fastlock_unlock(&queue->lock, flags);
+    }
+
+    /* If timer has already expired and we weren't able to stop it -
+     * wait for expiration callback to finish before leaving _bcmos_timer_stop()
+     */
+    if (BCMOS_TIMER_IS_EXPIRED(timer))
+    {
+        bcmos_task *t = bcmos_task_current();
+
+        /* Skip wait if timer is being stopped / restarted from inside the handler */
+        if (t != timer->task)
+        {
+            while (BCMOS_TIMER_IS_EXPIRED(timer) && BCMOS_TIMER_IS_VALID(timer))
+            {
+                bcmos_usleep(1000);
+            }
+            timer->flags &= ~BCMOS_TIMER_FLAG_EXPIRED;
+        }
+    }
+}
+
+
+/* System timer expiration handler.
+ * Execute all timers that expired and restart system timer
+ */
+static void _sys_timer_handler(void *data)
+{
+    bcmos_timer_pool *pool = (bcmos_timer_pool *)data;
+    bcmos_timer *timer;
+    bcmos_timer_rc rc;
+    long flags;
+
+    BUG_ON(pool != &tmr_pool);
+    flags = bcmos_fastlock_lock(&pool->lock);
+    while ((timer=TMR_POOL_FIRST(pool)) != NULL)
+    {
+        /* Stop when reached timer that hasn't expired yet */
+        if (_bcmos_timer_ts_delta(timer->expire_at, bcmos_timestamp()) > BCMOS_TIMER_PRECISION_US / 2)
+            break;
+        timer->flags |= BCMOS_TIMER_FLAG_EXPIRED;
+        timer->flags &= ~BCMOS_TIMER_FLAG_RUNNING;
+        /* IT: Barrier here ? */
+        TMR_POOL_REMOVE(pool, timer);
+
+        /* Execute handler. Unlock first and re-lock in the end
+         * It is safe to unlock here because the top loop starts from MIN every time
+         */
+        bcmos_fastlock_unlock(&pool->lock, flags);
+        rc = timer->handler(timer, timer->parm.data);
+        if (!timer->parm.owner)
+        {
+            if (rc == BCMOS_TIMER_OK && timer->period)
+            {
+                uint32_t interval = timer->period;
+                timer->period = 0;
+                _bcmos_timer_pool_insert(timer, interval, BCMOS_FALSE);
+            }
+            else
+            {
+                timer->flags &= ~BCMOS_TIMER_FLAG_EXPIRED;
+            }
+        }
+        flags = bcmos_fastlock_lock(&pool->lock);
+    }
+    /* Finally kick system timer */
+    _bcmos_start_system_timer(timer);
+    bcmos_fastlock_unlock(&pool->lock, flags);
+}
+
+/* Send timer expiration to the target module as urgent message.
+ * _bcmos_timer_in_module_handler() will get called in the module context
+ */
+static bcmos_timer_rc _bcmos_timer_send_to_module_handler(bcmos_timer *timer, long data)
+{
+    bcmos_errno rc;
+    bcmos_module *module = _bcmos_module_get(timer->parm.owner);
+    bcmos_msg_send_flags send_flags;
+    if (!module)
+    {
+        /* Shouldn't happen, unless the module was destroyed */
+        BCMOS_TRACE_ERR("_bcmos_timer_send_to_module_handler() -- no module=%u (timer->parm.handler=0x%p)\n", timer->parm.owner, timer->parm.handler);
+        timer->flags &= ~BCMOS_TIMER_FLAG_EXPIRED;
+        return BCMOS_TIMER_STOP;      /* will restart in module context if necessary */
+    }
+    timer->queue = &module->msgq;
+    send_flags = BCMOS_MSG_SEND_NOLIMIT;
+    if (!((timer->parm.flags & BCMOS_TIMER_PARM_FLAGS_NON_URGENT)))
+        send_flags |= BCMOS_MSG_SEND_URGENT;
+    rc = bcmos_msg_send_to_module(timer->parm.owner, &timer->msg, send_flags);
+    if (rc)
+    {
+        /* Shouldn't happen, unless the module was destroyed. Very short race condition here */
+        timer->queue = NULL;
+        timer->flags &= ~BCMOS_TIMER_FLAG_EXPIRED;
+        BCMOS_TRACE_ERR("_bcmos_timer_send_to_module_handler() --> %d\n", rc);
+    }
+    return BCMOS_TIMER_STOP; /* will restart in module context if necessary */
+}
+
+/* This function handles timer expiration in module context */
+static void _bcmos_timer_in_module_handler(bcmos_module_id module_id, bcmos_msg *msg)
+{
+    bcmos_timer *timer = _bcmos_msg_to_timer(msg);
+    bcmos_module *module = _bcmos_module_get(timer->parm.owner);
+    bcmos_timer_rc rc;
+
+    /* Call timer's callback function and restart the timer if necessary */
+    timer->queue = NULL;
+    /* module can't be NULL here. it is checked anyway to keep static code analyzer happy */
+    timer->task = module ? module->my_task : (bcmos_task*)NULL;
+    rc = timer->parm.handler(timer, timer->parm.data);
+    timer->task = NULL;
+    if (rc == BCMOS_TIMER_OK && timer->period)
+        _bcmos_timer_pool_insert(timer, timer->period, BCMOS_TRUE);
+    else
+        timer->flags &= ~BCMOS_TIMER_FLAG_EXPIRED;
+}
+
+/* Release timer message. Only called in exceptional situations,
+ * such as module queue destroy. Do nothing
+ */
+static void _bcmos_timer_msg_release(bcmos_msg *msg)
+{
+}
+
+/* Create timer */
+bcmos_errno bcmos_timer_create(bcmos_timer *timer, bcmos_timer_parm *parm)
+{
+    if (!timer || !parm || !parm->handler)
+        BCMOS_TRACE_RETURN(BCM_ERR_PARM, "timer %p, parm %p handler %p\n", timer, parm, parm ? parm->handler : NULL);
+    if (parm->owner != BCMOS_MODULE_ID_NONE && _bcmos_module_get(parm->owner) == NULL)
+        BCMOS_TRACE_RETURN(BCM_ERR_NOENT, "module_id %d\n", parm->owner);
+    memset(timer, 0, sizeof(bcmos_timer));
+    timer->parm = *parm;
+    if (parm->owner == BCMOS_MODULE_ID_NONE)
+        timer->handler = parm->handler;
+    else
+    {
+        timer->handler = _bcmos_timer_send_to_module_handler;
+        timer->msg.handler = _bcmos_timer_in_module_handler;
+        timer->msg.release = _bcmos_timer_msg_release;
+        timer->msg.sender = BCMOS_MODULE_ID_NONE;
+        timer->msg.type = BCMOS_MSG_ID_INTERNAL_TIMER;
+    }
+    timer->flags |= BCMOS_TIMER_FLAG_VALID;
+    return BCM_ERR_OK;
+}
+
+/* Destroy timer */
+void bcmos_timer_destroy(bcmos_timer *timer)
+{
+    BUG_ON(!timer);
+    bcmos_timer_stop(timer);
+    timer->flags &= ~BCMOS_TIMER_FLAG_VALID;
+}
+
+/* (Re)start timer */
+void bcmos_timer_start(bcmos_timer *timer, uint32_t delay)
+{
+    BUG_ON(!timer);
+    BUG_ON(!BCMOS_TIMER_IS_VALID(timer));
+    if ((int32_t)delay < 0)
+    {
+        BCMOS_TRACE_ERR("Attempt to start timer (%s) for period longer than 2^31-1. Reduced to 2^31-1\n",
+            timer->parm.name ? timer->parm.name : "*unnamed*");
+        delay = 0x7fffffff;
+    }
+
+    if (BCMOS_TIMER_IS_RUNNING(timer) || BCMOS_TIMER_IS_EXPIRED(timer))
+    {
+        _bcmos_timer_stop(timer);
+    }
+    _bcmos_timer_pool_insert(timer, delay, BCMOS_TRUE);
+}
+
+/* Stop timer if running */
+void bcmos_timer_stop(bcmos_timer *timer)
+{
+    BUG_ON(!timer);
+    _bcmos_timer_stop(timer);
+}
+
+/** Set timer handler */
+bcmos_errno bcmos_timer_handler_set(bcmos_timer *timer, F_bcmos_timer_handler handler, long data)
+{
+    BUG_ON(!timer);
+    BUG_ON(!handler);
+    timer->parm.handler = handler;
+    timer->parm.data = data;
+    if (timer->parm.owner == BCMOS_MODULE_ID_NONE)
+        timer->handler = handler;
+    return BCM_ERR_OK;
+}
+
+/*
+ * Block memory pool
+ */
+
+/* Memory block structure:
+ * - bcmos_memblk
+ * - blk_size bytes of user data
+ * - [magic - for block overflow-corruption check]
+ * - [padding to align to pointer size]
+ */
+
+struct bcmos_memblk
+{
+    STAILQ_ENTRY(bcmos_memblk) next; /**< Next block pointer */
+    bcmos_blk_pool *pool;       /** pool that owns the block */
+#ifdef BCMOS_MEM_DEBUG
+    uint32_t magic;             /** magic number */
+#define BCMOS_MEM_MAGIC_ALLOC   (('m'<<24) | ('b' << 16) | ('l' << 8) | 'k')
+#define BCMOS_MEM_MAGIC_FREE    (('m'<<24) | ('b' << 16) | ('l' << 8) | '~')
+#define BCMOS_MEM_MAGIC_SUFFIX  (('m'<<24) | ('b' << 16) | ('l' << 8) | 's')
+    uint32_t lineno;            /** line number where the block was allocated/released. FFU */
+#endif
+};
+
+/* Create byte memory pool */
+bcmos_errno bcmos_blk_pool_create(bcmos_blk_pool *pool, const bcmos_blk_pool_parm *parm)
+{
+    uint32_t blk_size;
+
+    if (!pool || !parm || !parm->blk_size)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_PARM, "pool %p, parm %p, blk_size=%u, num_blks=%u\n",
+            pool, parm, parm ? parm->blk_size : 0, parm ? parm->num_blks : 0);
+    }
+    if (parm->num_blks & parm->pool_size)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_PARM, "One and only one of num_blks (%u) and pool_size (%u) must be set\n",
+            parm->num_blks, parm->pool_size);
+    }
+    if (parm->num_blks && parm->start != NULL)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_PARM, "num_blks!=0 can't be used with start!=NULL. Use byte size instead\n");
+    }
+
+    BCM_MEMZERO_STRUCT(pool);
+    pool->parm = *parm;
+
+    /* Copy name to make sure that it is not released - in case it was on the stack */
+    if (pool->parm.name)
+    {
+        strncpy(pool->name, pool->parm.name, sizeof(pool->name) - 1);
+        pool->parm.name = pool->name;
+    }
+
+    /*
+     * Calculate total block size in bytes, including overheads
+     */
+    /* Round up block size to the nearest 32-bit word to make MAGIC check cheaper.
+     * It doesn't affect the actual overhead size because of the final
+     * rounding up to pointer size.
+     */
+    pool->parm.blk_size = BCMOS_ROUND_UP(pool->parm.blk_size, sizeof(uint32_t));
+    blk_size = pool->parm.blk_size + sizeof(bcmos_memblk);
+#ifdef BCMOS_MEM_DEBUG
+    blk_size += sizeof(uint32_t); /* room for magic after user data block */
+#endif
+    blk_size = BCMOS_ROUND_UP(blk_size, sizeof(void *));
+
+    /* Derive num_blks / pool_size from one another */
+    if (pool->parm.num_blks)
+    {
+        pool->parm.pool_size = parm->num_blks * blk_size;
+    }
+    else
+    {
+        pool->parm.num_blks = pool->parm.pool_size / blk_size;
+        if (!pool->parm.num_blks)
+        {
+            BCMOS_TRACE_RETURN(BCM_ERR_PARM, "pool_size (%u) is too small\n", parm->pool_size);
+        }
+    }
+
+    /* Allocate memory for the pool if "start" is not set */
+    pool->start = pool->parm.start;
+    if (!pool->start)
+    {
+        pool->start = bcmos_alloc(pool->parm.pool_size);
+        if (!pool->start)
+        {
+            BCMOS_TRACE_RETURN(BCM_ERR_NOMEM, "Can't allocate memory for block pool %s\n", parm->name);
+        }
+    }
+
+    bcmos_fastlock_init(&pool->lock, parm->flags);
+
+    /* Put all blocks on free list */
+    bcmos_blk_pool_reset(pool);
+
+    pool->magic = BCMOS_BLK_POOL_VALID;
+    if (!(pool->parm.flags & BCMOS_BLK_POOL_FLAG_MSG_POOL))
+    {
+        bcmos_mutex_lock(&bcmos_res_lock);
+        STAILQ_INSERT_TAIL(&blk_pool_list, pool, list);
+        bcmos_total_blk_pool_size += pool->parm.pool_size;
+        bcmos_mutex_unlock(&bcmos_res_lock);
+    }
+
+    return BCM_ERR_OK;
+}
+
+/* Destroy memory pool */
+bcmos_errno bcmos_blk_pool_destroy(bcmos_blk_pool *pool)
+{
+    if (!pool || pool->magic != BCMOS_BLK_POOL_VALID)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_PARM, "pool handle is invalid\n");
+    }
+    if (pool->stat.free < pool->parm.num_blks)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_STATE, "%i blocks are still allocated from the pool %s\n",
+            pool->parm.num_blks - pool->stat.free, pool->parm.name);
+    }
+    if (!(pool->parm.flags & BCMOS_BLK_POOL_FLAG_MSG_POOL))
+    {
+        bcmos_mutex_lock(&bcmos_res_lock);
+        STAILQ_REMOVE(&blk_pool_list, pool, bcmos_blk_pool, list);
+        bcmos_total_blk_pool_size -= pool->parm.pool_size;
+        bcmos_mutex_unlock(&bcmos_res_lock);
+    }
+    if (!pool->parm.start && pool->start)
+    {
+        bcmos_free(pool->start);
+    }
+    pool->magic = BCMOS_BLK_POOL_DELETED;
+    return BCM_ERR_OK;
+}
+
+/** Release all blocks in memory pool . Block content is not affected */
+void bcmos_blk_pool_reset(bcmos_blk_pool *pool)
+{
+    uint32_t blk_size;
+    bcmos_memblk *blk;
+    uint32_t i;
+
+    STAILQ_INIT(&pool->free_list);
+
+    blk_size = pool->parm.blk_size + sizeof(bcmos_memblk);
+#ifdef BCMOS_MEM_DEBUG
+    blk_size += sizeof(uint32_t); /* room for magic after user data block */
+#endif
+    blk_size = BCMOS_ROUND_UP(blk_size, sizeof(void *));
+
+    /* Put all blocks on free list */
+    blk = (bcmos_memblk *)pool->start;
+    for (i = 0; i < pool->parm.num_blks; i++)
+    {
+        blk->pool = pool;
+        STAILQ_INSERT_TAIL(&pool->free_list, blk, next);
+#ifdef BCMOS_MEM_DEBUG
+        *(uint32_t*)((long)blk + sizeof(bcmos_memblk) + pool->parm.blk_size) = BCMOS_MEM_MAGIC_SUFFIX;
+        blk->lineno = 0;
+        blk->magic = BCMOS_MEM_MAGIC_FREE;
+#endif
+        blk = (bcmos_memblk *)((long)blk + blk_size);
+    }
+
+    /* Init statistics */
+    memset(&pool->stat, 0, sizeof(pool->stat));
+    pool->stat.free = pool->parm.num_blks;
+}
+
+/* Allocate block from block memory pool */
+void *bcmos_blk_pool_alloc(bcmos_blk_pool *pool)
+{
+    bcmos_memblk *blk;
+    long flags;
+
+#ifdef BCMOS_MEM_DEBUG
+    BUG_ON(!pool);
+    BUG_ON(pool->magic != BCMOS_BLK_POOL_VALID);
+#endif
+    flags = bcmos_fastlock_lock(&pool->lock);
+    blk = STAILQ_FIRST(&pool->free_list);
+    if (blk)
+    {
+        STAILQ_REMOVE_HEAD(&pool->free_list, next);
+        ++pool->stat.allocated;
+#ifdef BCMOS_MEM_DEBUG
+        blk->magic = BCMOS_MEM_MAGIC_ALLOC;
+#endif
+        bcmos_fastlock_unlock(&pool->lock, flags);
+        return (void *)(blk + 1);
+    }
+
+    /* No memory */
+    ++pool->stat.alloc_failed;
+    bcmos_fastlock_unlock(&pool->lock, flags);
+    return NULL;
+}
+
+/* Allocate block from block memory pool and zero the block */
+void *bcmos_blk_pool_calloc(bcmos_blk_pool *pool)
+{
+    void *ptr = bcmos_blk_pool_alloc(pool);
+    if (ptr)
+    {
+        memset(ptr, 0, pool->parm.blk_size);
+    }
+    return ptr;
+}
+
+/* Release memory allocated using bcmos_pool_byte_alloc() or bcmos_pool_blk_alloc() */
+void bcmos_blk_pool_free(void *ptr)
+{
+    bcmos_memblk *blk;
+    bcmos_blk_pool *pool;
+    long flags;
+
+    blk = (bcmos_memblk *)((long)ptr - sizeof(bcmos_memblk));
+    pool = blk->pool;
+#ifdef BCMOS_MEM_DEBUG
+    BUG_ON(blk->magic != BCMOS_MEM_MAGIC_ALLOC);
+    BUG_ON(pool == NULL);
+    BUG_ON(pool->magic != BCMOS_BLK_POOL_VALID);
+    BUG_ON(*(uint32_t *)((long)ptr + pool->parm.blk_size) != BCMOS_MEM_MAGIC_SUFFIX);
+    blk->magic = BCMOS_MEM_MAGIC_FREE;
+#endif
+    flags = bcmos_fastlock_lock(&pool->lock);
+    STAILQ_INSERT_HEAD(&pool->free_list, blk, next);
+    ++pool->stat.released;
+    bcmos_fastlock_unlock(&pool->lock, flags);
+}
+
+/* Get pool info */
+bcmos_errno bcmos_blk_pool_query(const bcmos_blk_pool *pool, bcmos_blk_pool_info *info)
+{
+    if (!pool || !info)
+    {
+        return BCM_ERR_PARM;
+    }
+    info->parm = pool->parm;
+    info->stat = pool->stat;
+    info->stat.free = pool->parm.num_blks - (info->stat.allocated - info->stat.released);
+    return BCM_ERR_OK;
+}
+
+/* Block pool iterator */
+bcmos_errno bcmos_blk_pool_get_next(const bcmos_blk_pool **prev)
+{
+    const bcmos_blk_pool *pool;
+
+    if (prev == NULL)
+    {
+        return BCM_ERR_PARM;
+    }
+    pool = *prev;
+    if (pool && pool->magic != BCMOS_BLK_POOL_VALID)
+    {
+        return BCM_ERR_PARM;
+    }
+    if (pool)
+    {
+        pool = STAILQ_NEXT(pool, list);
+    }
+    else
+    {
+        pool = STAILQ_FIRST(&blk_pool_list);
+    }
+    *prev = pool;
+    if (!pool)
+    {
+        return BCM_ERR_NO_MORE;
+    }
+    return BCM_ERR_OK;
+}
+
+/*
+ * Message pool
+ */
+
+/* release message callback */
+static void _bcmos_msg_pool_release(bcmos_msg *msg)
+{
+    if (msg->data_release)
+        msg->data_release(msg);
+    bcmos_blk_pool_free(msg);
+}
+
+/* Create message pool */
+bcmos_errno bcmos_msg_pool_create(bcmos_msg_pool *pool, const bcmos_msg_pool_parm *parm)
+{
+    bcmos_blk_pool_parm pool_parm = {};
+    bcmos_memblk *blk;
+    bcmos_errno err;
+
+    if (!pool || !parm || !parm->size)
+    {
+        return BCM_ERR_PARM;
+    }
+    BCM_MEMZERO_STRUCT(pool);
+    pool->parm = *parm;
+    pool_parm.num_blks = parm->size;
+    pool_parm.blk_size = parm->data_size + sizeof(bcmos_msg);
+    pool_parm.flags = parm->flags | BCMOS_BLK_POOL_FLAG_MSG_POOL;
+    pool_parm.name = parm->name;
+
+    /* Create underlying block pool */
+    err = bcmos_blk_pool_create(&pool->blk_pool, &pool_parm);
+    if (err)
+    {
+        return err;
+    }
+    pool->parm.name = pool->blk_pool.name;
+
+    /* Pre-initialize all messages */
+    STAILQ_FOREACH(blk, &pool->blk_pool.free_list, next)
+    {
+        bcmos_msg *msg = (bcmos_msg *)(blk + 1);
+        msg->data = (void *)(msg + 1);
+        msg->size = pool->parm.data_size;
+        msg->release = _bcmos_msg_pool_release;
+        msg->data_release = parm->data_release;
+    }
+    bcmos_mutex_lock(&bcmos_res_lock);
+    STAILQ_INSERT_TAIL(&msg_pool_list, &pool->blk_pool, list);
+    bcmos_total_msg_pool_size += pool->blk_pool.parm.pool_size;
+    bcmos_mutex_unlock(&bcmos_res_lock);
+
+    return BCM_ERR_OK;
+}
+
+/** Destroy message pool */
+bcmos_errno bcmos_msg_pool_destroy(bcmos_msg_pool *pool)
+{
+    bcmos_errno rc;
+
+    rc = bcmos_blk_pool_destroy(&pool->blk_pool);
+    if (rc)
+        return rc;
+
+    bcmos_mutex_lock(&bcmos_res_lock);
+    STAILQ_REMOVE(&msg_pool_list, &pool->blk_pool, bcmos_blk_pool, list);
+    bcmos_total_msg_pool_size -= pool->blk_pool.parm.pool_size;
+    bcmos_mutex_unlock(&bcmos_res_lock);
+
+    pool->parm.size = pool->parm.data_size = 0;
+    return BCM_ERR_OK;
+}
+
+/* Allocate message from pool */
+bcmos_msg *bcmos_msg_pool_alloc(bcmos_msg_pool *pool)
+{
+    return bcmos_blk_pool_alloc(&pool->blk_pool);
+}
+
+/* Get pool info */
+bcmos_errno bcmos_msg_pool_query(const bcmos_msg_pool *pool, bcmos_msg_pool_info *info)
+{
+    bcmos_blk_pool_info pool_info;
+    bcmos_errno err;
+
+    if (!pool || !info)
+    {
+        return BCM_ERR_PARM;
+    }
+    err = bcmos_blk_pool_query(&pool->blk_pool, &pool_info);
+    if (err)
+    {
+        return err;
+    }
+    info->parm = pool->parm;
+    info->stat = pool_info.stat;
+    return BCM_ERR_OK;
+}
+
+/* Block pool iterator */
+bcmos_errno bcmos_msg_pool_get_next(const bcmos_msg_pool **prev)
+{
+    const bcmos_msg_pool *pool;
+
+    if (prev == NULL)
+    {
+        return BCM_ERR_PARM;
+    }
+    pool = *prev;
+    if (pool && pool->blk_pool.magic != BCMOS_BLK_POOL_VALID)
+    {
+        return BCM_ERR_PARM;
+    }
+    if (pool)
+    {
+        pool = container_of(STAILQ_NEXT(&pool->blk_pool, list), bcmos_msg_pool, blk_pool);
+    }
+    else
+    {
+        pool = container_of(STAILQ_FIRST(&msg_pool_list), bcmos_msg_pool, blk_pool);
+    }
+    *prev = pool;
+    if (!pool)
+    {
+        return BCM_ERR_NO_MORE;
+    }
+    return BCM_ERR_OK;
+}
+
+/** Set up print redirection/cloning
+ * \param[in]   mode    redirection/cloning mode
+ * \param[in]   cb      redirection callback
+ * \param[in]   data    opaque data to be passed to cb
+ */
+bcmos_errno bcmos_print_redirect(bcmos_print_redirect_mode mode, bcmos_print_redirect_cb cb, void *data)
+{
+    if (mode != BCMOS_PRINT_REDIRECT_MODE_NONE && cb == NULL)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_PARM, "Redirection callback must be set\n");
+    }
+    print_redirect_mode = mode;
+    if (mode == BCMOS_PRINT_REDIRECT_MODE_NONE)
+    {
+        print_redirect_cb = NULL;
+        print_redirect_cb_data = NULL;
+    }
+    else
+    {
+        print_redirect_cb = cb;
+        print_redirect_cb_data = data;
+    }
+    return BCM_ERR_OK;
+}
+
+/* Print on the console with optional cloning / redirection */
+/*lint -e{454}*/
+int bcmos_vprintf(const char *format, va_list ap)
+{
+    int rc = 0;
+    bcmos_bool protected_section = is_irq_mode() || is_irq_disabled();
+
+    /* Only protect if in task context */
+    if (!protected_section)
+    {
+        bcmos_mutex_lock(&bcmos_print_lock);
+    }
+    if (print_redirect_mode != BCMOS_PRINT_REDIRECT_MODE_REDIRECT)
+    {
+        rc = bcmos_sys_vprintf(format, ap);
+    }
+    if (print_redirect_mode != BCMOS_PRINT_REDIRECT_MODE_NONE)
+    {
+        rc = print_redirect_cb(print_redirect_cb_data, format, ap);
+    }
+    if (!protected_section)
+    {
+        bcmos_mutex_unlock(&bcmos_print_lock);
+    }
+
+    return rc;
+}
+/*lint -e{454}*/
+
+/* Print on the console with optional cloning / redirection */
+int bcmos_printf(const char *format, ...)
+{
+    va_list args;
+    int rc;
+
+    va_start(args, format);
+    rc = bcmos_vprintf(format, args);
+    va_end(args);
+    return rc;
+}
+
+#ifndef BCMOS_PUTCHAR_INLINE
+/*lint -e{454}*/
+void bcmos_putchar(int c)
+{
+    bcmos_bool protected_section = is_irq_mode() || is_irq_disabled();
+
+    /* Only protect if in task context */
+    if (!protected_section)
+    {
+        bcmos_mutex_lock(&bcmos_print_lock);
+    }
+    putchar(c);
+    fflush(stdout);
+    if (!protected_section)
+    {
+        bcmos_mutex_unlock(&bcmos_print_lock);
+    }
+}
+/*lint +e{454}*/
+#endif
+
+#ifndef BCMOS_BUF_OS_SPECIFIC
+
+/*
+ * Buffer allocation/release
+ */
+
+#ifdef BCMOS_BUF_POOL_SIZE
+/** Create buffer pool
+ * \param[in]   num     Number of buffers
+ * \param[in]   size    Buffer size
+ * \param[in]   align   Buffer alignment
+ * \returns o=OK or error <0
+ */
+static bcmos_errno bcmos_buf_pool_create(void)
+{
+    bcmos_blk_pool_parm pool_parm =
+    {
+        .name = "sysbuf"
+    };
+    bcmos_errno rc;
+
+#ifndef BCMOS_BUF_POOL_BUF_SIZE
+#error BCMOS_BUF_POOL_BUF_SIZE must be defined
+#endif
+
+    /* If buffer memory should be allocated by bcmos_dma_alloc - allocate
+     * memory for the whole pool here */
+    pool_parm.blk_size = BCMOS_BUF_POOL_BUF_SIZE + sizeof(bcmos_buf) + BCMTR_BUF_EXTRA_HEADROOM +
+        2*BCMOS_BUF_DATA_ALIGNMENT + BCMOS_BUF_DATA_GUARD;
+
+#ifdef BCMOS_BUF_IN_DMA_MEM
+    pool_parm.pool_size = (pool_parm.blk_size + sizeof(bcmos_memblk)) * BCMOS_BUF_POOL_SIZE;
+    pool_parm.start = bcmos_dma_alloc(0, pool_parm.pool_size);
+    if (!pool_parm.start)
+        return BCM_ERR_NOMEM;
+#else
+    pool_parm.num_blks = BCMOS_BUF_POOL_SIZE;
+#endif
+
+    rc = bcmos_blk_pool_create(&sys_buf_pool, &pool_parm);
+    if (rc)
+    {
+        if (pool_parm.start)
+            bcmos_dma_free(0, pool_parm.start);
+    }
+
+    return rc;
+}
+#endif
+
+/* Allocate buffer */
+bcmos_buf *bcmos_buf_alloc(uint32_t size)
+{
+    /* Allocate extra 2 * BCMOS_BUF_DATA_ALIGNMENT to make sure that neither data start nor end
+     * end up in the middle of cache line
+     */
+    bcmos_buf *buf;
+
+/* Allocate from the pool  */
+#ifdef BCMOS_BUF_POOL_SIZE
+
+    if (size > BCMOS_BUF_POOL_BUF_SIZE)
+    {
+        BCMOS_TRACE_ERR("Attempt to allocate buffer bigger than buffer pool block size. %u > %u\n",
+            size, BCMOS_BUF_POOL_BUF_SIZE);
+        return NULL;
+    }
+    buf = bcmos_blk_pool_alloc(&sys_buf_pool);
+
+#else /* else of #if BCMOS_BUF_POOL_SIZE */
+    {
+        uint32_t alloc_size = sizeof(bcmos_buf) + size + BCMTR_BUF_EXTRA_HEADROOM +
+            2*BCMOS_BUF_DATA_ALIGNMENT - 1 + BCMOS_BUF_DATA_GUARD;
+#ifdef BCMOS_BUF_DATA_UNIT_SIZE
+#if BCMOS_BUF_DATA_UNIT_SIZE & (BCMOS_BUF_DATA_UNIT_SIZE - 1)
+#error BCMOS_BUF_DATA_UNIT_SIZE must be a power of 2
+#endif
+        alloc_size = BCMOS_ROUND_UP(alloc_size, BCMOS_BUF_DATA_UNIT_SIZE);
+#endif
+#ifdef BCMOS_BUF_IN_DMA_MEM
+        buf = bcmos_dma_alloc(0, alloc_size);
+#else
+        buf = bcmos_alloc(alloc_size);
+#endif
+    }
+#endif /* end of #if BCMOS_BUF_POOL_SIZE */
+
+    if (!buf)
+        return NULL;
+    buf->start = (uint8_t *)(buf + 1) + BCMOS_BUF_DATA_GUARD;
+    buf->data = (uint8_t *)(BCMOS_ROUND_UP((long)buf->start + BCMTR_BUF_EXTRA_HEADROOM, BCMOS_BUF_DATA_ALIGNMENT));
+    buf->size = size + (buf->data - buf->start);
+    buf->len = 0;
+#ifdef BCMOS_BUF_POOL_SIZE
+    buf->pool = &sys_buf_pool;
+#else
+    buf->pool = NULL;
+#endif
+    return buf;
+}
+
+/* Release buffer */
+void bcmos_buf_free(bcmos_buf *buf)
+{
+
+#ifdef BCMOS_BUF_POOL_SIZE
+    /* Buffer might have been allocated from the system pool */
+    if (buf->pool)
+    {
+        bcmos_blk_pool_free(buf);
+        return;
+    }
+#endif
+
+#ifdef BCMOS_BUF_IN_DMA_MEM
+    bcmos_dma_free(0, buf);
+#else
+    bcmos_free(buf);
+#endif
+}
+
+#endif
+
+EXPORT_SYMBOL(bcmos_init);
+
+EXPORT_SYMBOL(bcmos_msg_queue_create);
+EXPORT_SYMBOL(bcmos_msg_queue_destroy);
+EXPORT_SYMBOL(bcmos_msg_queue_query);
+EXPORT_SYMBOL(bcmos_msg_queue_get_next);
+EXPORT_SYMBOL(bcmos_msg_send);
+EXPORT_SYMBOL(bcmos_msg_send_to_module);
+EXPORT_SYMBOL(bcmos_msg_recv);
+EXPORT_SYMBOL(bcmos_msg_register);
+EXPORT_SYMBOL(bcmos_msg_unregister);
+EXPORT_SYMBOL(bcmos_msg_dispatch);
+
+EXPORT_SYMBOL(bcmos_msg_qgroup_create);
+EXPORT_SYMBOL(bcmos_msg_qgroup_destroy);
+EXPORT_SYMBOL(bcmos_msg_qgroup_query);
+EXPORT_SYMBOL(bcmos_msg_recv_from_qgroup);
+EXPORT_SYMBOL(bcmos_msg_send_to_qgroup);
+
+EXPORT_SYMBOL(bcmos_task_timeout_set);
+EXPORT_SYMBOL(bcmos_task_get_next);
+
+EXPORT_SYMBOL(bcmos_module_create);
+EXPORT_SYMBOL(bcmos_module_destroy);
+EXPORT_SYMBOL(bcmos_module_current);
+EXPORT_SYMBOL(bcmos_module_context);
+EXPORT_SYMBOL(bcmos_module_context_set);
+EXPORT_SYMBOL(bcmos_module_query);
+
+EXPORT_SYMBOL(bcmos_event_create);
+EXPORT_SYMBOL(bcmos_event_destroy);
+EXPORT_SYMBOL(bcmos_event_raise);
+EXPORT_SYMBOL(bcmos_event_recv);
+
+EXPORT_SYMBOL(bcmos_timer_create);
+EXPORT_SYMBOL(bcmos_timer_destroy);
+EXPORT_SYMBOL(bcmos_timer_start);
+EXPORT_SYMBOL(bcmos_timer_stop);
+EXPORT_SYMBOL(bcmos_timer_handler_set);
+
+EXPORT_SYMBOL(bcmos_blk_pool_create);
+EXPORT_SYMBOL(bcmos_blk_pool_destroy);
+EXPORT_SYMBOL(bcmos_blk_pool_reset);
+EXPORT_SYMBOL(bcmos_blk_pool_alloc);
+EXPORT_SYMBOL(bcmos_blk_pool_calloc);
+EXPORT_SYMBOL(bcmos_blk_pool_free);
+EXPORT_SYMBOL(bcmos_blk_pool_query);
+EXPORT_SYMBOL(bcmos_blk_pool_get_next);
+
+EXPORT_SYMBOL(bcmos_msg_pool_create);
+EXPORT_SYMBOL(bcmos_msg_pool_alloc);
+EXPORT_SYMBOL(bcmos_msg_pool_query);
+EXPORT_SYMBOL(bcmos_msg_pool_destroy);
+EXPORT_SYMBOL(bcmos_msg_pool_get_next);
+
+EXPORT_SYMBOL(bcmos_print_redirect);
+EXPORT_SYMBOL(bcmos_printf);
+EXPORT_SYMBOL(bcmos_vprintf);
+
+#ifndef BCMOS_BUF_OS_SPECIFIC
+EXPORT_SYMBOL(bcmos_buf_alloc);
+EXPORT_SYMBOL(bcmos_buf_free);
+#endif
diff --git a/bcm68620_release/release/host_customized/os_abstraction/bcmos_common.h b/bcm68620_release/release/host_customized/os_abstraction/bcmos_common.h
new file mode 100644
index 0000000..da09c1c
--- /dev/null
+++ b/bcm68620_release/release/host_customized/os_abstraction/bcmos_common.h
@@ -0,0 +1,1479 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef BCMOS_COMMON_H_
+#define BCMOS_COMMON_H_
+
+#ifndef BCMOS_SYSTEM_H_
+#error Please do not include bcmos_common.h directly. Include bcmos_system.h
+#endif
+
+#include "bcmos_errno.h"
+#include "bcmos_types.h"
+#include "bcmos_queue.h"
+#include "bcmos_tree.h"
+/* Get constants, such as task, module, event id lists */
+#include "bcmos_platform.h"
+#include "bcmos_pack.h"
+#include "bcmos_sysif.h"
+
+#define MAX_TASK_NAME_SIZE          64
+#define MAX_MODULE_NAME_SIZE        64
+#define MAX_MSG_QUEUE_NAME_SIZE     64
+#define MAX_TIMER_NAME_SIZE         64
+#define MAX_POOL_NAME_SIZE          64
+#define MAX_EVENT_NAME_SIZE         64
+#define MAX_MUTEX_NAME_SIZE         64
+#define BCMOS_MSG_POOL_DEFAULT_SIZE 512
+
+/* Define bcmos_bool - the boolean type for bcmos - based on C99 standard boolean type */
+#ifndef BCMOS_BOOLEAN
+typedef _Bool bcmos_bool;
+#define BCMOS_FALSE 0
+#define BCMOS_TRUE 1
+#endif
+
+#define BCM_SIZEOFARRAY(arr) (sizeof(arr)/sizeof(*arr))
+#define BCM_SIZEOFFIELD(s, f) (sizeof(((s*)NULL)->f))
+#define BCM_MEMZERO_STRUCT(ptr) memset(ptr, 0, sizeof(*(ptr)))
+#define BCM_MEMCPY_ARRAY(dst, src) memcpy(dst, src, sizeof(dst))
+#define TAB "  "
+#define TAB2 TAB TAB
+#define TAB3 TAB2 TAB
+#define TAB4 TAB2 TAB2
+
+#define CHIP_REVISION_A0 0xA0
+#define CHIP_REVISION_B0 0xB0
+
+#ifdef SIMULATION_BUILD
+#define GET_CHIP_REVISION CHIP_REVISION_A0
+#else
+extern uint32_t chip_revision;
+#define GET_CHIP_REVISION (chip_revision != 0 ? chip_revision : (chip_revision = get_chip_revision()))
+#endif
+
+typedef void (*f_bcmolt_sw_error_handler)(uint8_t pon_id, const char *file_name, uint32_t line_number);
+
+/* Similar to BUG_ON(), with the following features:
+ * 1. The condition is checked against BCM_ERR_OK.
+ * 2. In case on an error, the macro returns from the calling function with the error code. */
+#define BUG_ON_ERR_RET(f) \
+    do \
+    { \
+        bcmos_errno _err; \
+        _err = f; \
+        BUG_ON(_err != BCM_ERR_OK); \
+        return _err; \
+    } \
+    while (0)
+
+/** \addtogroup system_init
+ * @{
+ */
+
+/** Initialize system library
+ * Must be called before any other system function
+ * \returns 0=OK or error code <0
+ */
+bcmos_errno bcmos_init(void);
+
+/** Cleanup system library
+ */
+void bcmos_exit(void);
+
+/** @} system_init */
+
+/** \addtogroup system_mem
+ * @{
+ */
+
+#ifndef BCMOS_MALLOC_FREE_INLINE
+
+/** \defgroup system_heap Default Heap
+ * @{
+ */
+
+/** Allocate memory from the main heap
+ * \param[in]   size
+ * \returns memory block pointer or NULL
+ */
+void *bcmos_alloc(uint32_t size);
+
+/** Release memory to the main pool
+ * \param[in]   ptr
+ */
+void bcmos_free(void *ptr);
+
+/** @} system_heap */
+
+#endif /* #ifndef BCMOS_MALLOC_FREE_INLINE */
+
+/** \defgroup blk_pool Block Memory Pool
+ * \ingroup system_mem
+ * @{
+ */
+
+/** Block memory pool parameters */
+typedef struct
+{
+    const char *name;   /**< Pool name */
+    uint32_t blk_size;  /**< Memory block size > 0 */
+    uint32_t num_blks;  /**< Number of blocks in the pool. If not set - it is derived from pool_size */
+    void *start;        /**< Start address. Can be NULL */
+    uint32_t pool_size; /**< Total pool size in bytes. Only 1 of pool_size, num_blks must be set */
+    uint32_t flags;     /**< TBD flags */
+#define BCMOS_BLK_POOL_FLAG_MSG_POOL  0x80000000 /* Used by message pool */
+} bcmos_blk_pool_parm;
+
+/** Block memory pool statistics */
+typedef struct bcmos_blk_pool_stat
+{
+    uint32_t allocated;     /**< Number of blocks allocated */
+    uint32_t released;      /**< Number of blocks released */
+    uint32_t free;          /**< Number of free blocks in the pool */
+    uint32_t alloc_failed;  /**< Number of allocation failures */
+} bcmos_blk_pool_stat;
+
+/** Block memory pool info */
+typedef struct bcmos_blk_pool_info
+{
+    bcmos_blk_pool_parm parm;   /**< Pool parameters */
+    bcmos_blk_pool_stat stat;   /**< Pool statistics */
+} bcmos_blk_pool_info;
+
+/** Block memory pool control block */
+typedef struct bcmos_blk_pool bcmos_blk_pool;
+
+/** Create block memory pool
+ * \param[in,out]       pool    pool control block
+ * \param[in]           parm    pool parameters
+ * \returns 0=OK or error code <0
+ */
+bcmos_errno bcmos_blk_pool_create(bcmos_blk_pool *pool, const bcmos_blk_pool_parm *parm);
+
+/** Destroy block memory pool
+ * \param[in]   pool    pool handle
+ * \returns 0=OK or error code <0
+ */
+bcmos_errno bcmos_blk_pool_destroy(bcmos_blk_pool *pool);
+
+/** Allocate block from block memory pool
+ *
+ * This allocates a single unit (unit_size bytes)
+ * \param[in]   pool    Pool handle
+ * \return memory block pointer or NULL.
+ * It is guaranteed that the returned pointer is aligned to pointer size
+ */
+void *bcmos_blk_pool_alloc(bcmos_blk_pool *pool);
+
+/** Allocate block from block memory pool and zero the block
+ *
+ * This allocates a single unit (unit_size bytes)
+ * \param[in]   pool    Pool handle
+ * \return memory block pointer or NULL.
+ * It is guaranteed that the returned pointer is aligned to pointer size
+ */
+void *bcmos_blk_pool_calloc(bcmos_blk_pool *pool);
+
+/** Release memory allocated using bcmos_blk_pool_alloc()
+ *
+ * \param[in]   ptr     pointer
+ */
+void bcmos_blk_pool_free(void *ptr);
+
+/** Release all blocks in memory pool. Block content is not affected
+ * This function is useful when application wants to pre-initialize
+ * some portion of each memory block at init time
+ *
+ * \param[in]   pool    Pool handle
+ */
+void bcmos_blk_pool_reset(bcmos_blk_pool *pool);
+
+/** Get pool info
+ *
+ * The pool must be created using bcmos_blk_pool_create()
+ * \param[in]   pool    Block memory pool handle
+ * \param[out]  info    Block memory pool info
+ * \returns 0=OK or error code <0
+ */
+bcmos_errno bcmos_blk_pool_query(const bcmos_blk_pool *pool, bcmos_blk_pool_info *info);
+
+/** Block pool iterator
+ * \param[in] prev      Previous block pool. *prev==NULL - get first
+ * \return: BCM_ERR_OK, BCM_ERR_NOENT, BCM_ERR_NO_MORE
+ */
+bcmos_errno bcmos_blk_pool_get_next(const bcmos_blk_pool **prev);
+
+/** @} blk_pool */
+
+/** \defgroup byte_pool Byte Memory Pool
+ * \ingroup system_mem
+ * @{
+ */
+
+/** Byte memory pool parameters */
+typedef struct
+{
+    const char *name;   /**< Pool name */
+    uint32_t size;      /**< Pool size (bytes) */
+    void *start;        /**< Start address. Can be NULL */
+} bcmos_byte_pool_parm;
+
+/** Byte memory pool control block */
+typedef struct bcmos_byte_pool bcmos_byte_pool;
+
+/** Create byte memory pool
+ * \param[in,out]       pool    pool control block
+ * \param[in]           parm    pool parameters
+ * \returns 0=OK or error code <0
+ */
+bcmos_errno bcmos_byte_pool_create(bcmos_byte_pool *pool, const bcmos_byte_pool_parm *parm);
+
+/** Destroy byte memory pool
+ * \param[in]   pool    pool handle
+ * \returns 0=OK or error code <0
+ */
+bcmos_errno bcmos_byte_pool_destroy(bcmos_byte_pool *pool);
+
+#ifndef BCMOS_BYTE_POOL_ALLOC_FREE_INLINE
+/** Allocate memory from byte memory pool
+ *
+ * This function can only be used with byte memory pools created
+ * with unit_size==1
+ * \param[in]   pool    Pool handle
+ * \param[in]   size    Block size (bytes)
+ * \return memory block pointer or NULL
+ */
+void *bcmos_byte_pool_alloc(bcmos_byte_pool *pool, uint32_t size);
+
+/** Release memory allocated using bcmos_pool_byte_alloc()
+ *
+ * \param[in]   ptr     pointer
+ */
+void bcmos_byte_pool_free(void *ptr);
+
+#endif /* BCMOS_BYTE_POOL_ALLOC_FREE_INLINE */
+
+/** @} byte_pool */
+
+/** @} system_mem */
+
+/** \addtogroup system_task
+ * @{
+ */
+#ifndef BCMOS_WAIT_FOREVER
+#define BCMOS_WAIT_FOREVER        0xFFFFFFFF  /**< Wait timeout. Wait forever */
+#endif
+#ifndef BCMOS_NO_WAIT
+#define BCMOS_NO_WAIT             0 /**< Wait timeout. Don't wait */
+#endif
+#define BCMOS_MICROSECONDS_IN_SECONDS   (1000000)
+
+/** Task priority */
+typedef enum
+{
+    BCMOS_TASK_PRIORITY_0, /**< Priority 0 - highest */
+    BCMOS_TASK_PRIORITY_1, /**< Priority 1 */
+    BCMOS_TASK_PRIORITY_2, /**< Priority 2 */
+    BCMOS_TASK_PRIORITY_3, /**< Priority 3 */
+    BCMOS_TASK_PRIORITY_4, /**< Priority 4 */
+    BCMOS_TASK_PRIORITY_5, /**< Priority 5 */
+    BCMOS_TASK_PRIORITY_6, /**< Priority 6 */
+    BCMOS_TASK_PRIORITY_7, /**< Priority 7 */
+    BCMOS_TASK_PRIORITY_8, /**< Priority 8 */
+    BCMOS_TASK_PRIORITY_9, /**< Priority 9 */
+    BCMOS_TASK_PRIORITY_10,/**< Priority 10 */
+    BCMOS_TASK_PRIORITY_11,/**< Priority 11 */
+    BCMOS_TASK_PRIORITY_12,/**< Priority 12 */
+    BCMOS_TASK_PRIORITY_13,/**< Priority 13 */
+    BCMOS_TASK_PRIORITY_14,/**< Priority 14 */
+    BCMOS_TASK_PRIORITY_15,/**< Priority 15 */
+    BCMOS_TASK_PRIORITY_16,/**< Priority 16 */
+    BCMOS_TASK_PRIORITY_17,/**< Priority 17 */
+    BCMOS_TASK_PRIORITY_18,/**< Priority 18 */
+    BCMOS_TASK_PRIORITY_19,/**< Priority 19 */
+    BCMOS_TASK_PRIORITY_20,/**< Priority 20 */
+    BCMOS_TASK_PRIORITY_21,/**< Priority 21 */
+    BCMOS_TASK_PRIORITY_22,/**< Priority 22 */
+    BCMOS_TASK_PRIORITY_23,/**< Priority 23 */
+    BCMOS_TASK_PRIORITY_24,/**< Priority 24 */
+    BCMOS_TASK_PRIORITY_25,/**< Priority 25 */
+    BCMOS_TASK_PRIORITY_26,/**< Priority 26 */
+    BCMOS_TASK_PRIORITY_27,/**< Priority 27 */
+    BCMOS_TASK_PRIORITY_28,/**< Priority 28 */
+    BCMOS_TASK_PRIORITY_29,/**< Priority 29 */
+    BCMOS_TASK_PRIORITY_30,/**< Priority 30 */
+    BCMOS_TASK_PRIORITY_31,/**< Priority 31 - lowest */
+} bcmos_task_priority;
+
+/** Task handler */
+typedef int (*F_bcmos_task_handler)(long data);
+
+/* Default task handler */
+extern int bcmos_dft_task_handler(long data);
+
+/* This flags determines whether a task is to be suspended upon OOPS condition. */
+#define BCMOS_TASK_FLAG_NO_SUSPEND_ON_OOPS (1 << 0)
+
+/** Task parameters */
+typedef struct
+{
+    const char *name;                   /**< Task name */
+    bcmos_task_priority priority;       /**< Task priority */
+    bcmos_core core;                    /**< CPU core the task is locked to */
+    uint32_t stack_size;                /**< Task stack size */
+    void *stack;                        /**< Stack location. NULL=allocate automatically */
+    F_bcmos_task_handler init_handler;  /**< Optional "init" handler. Called once in the task context when it is created.
+                                             This callback is only supported in integration mode (handler==NULL).
+                                             init_handler returns bcmos_errno. If it returns value other than BCM_ERR_OK,
+                                             the task is destroyed */
+    F_bcmos_task_handler handler;       /**< Task handler. NULL=default (integration mode) */
+    F_bcmos_task_handler timeout_handler;/**< This function is used only in integration mode (handler==NULL) if
+                                              msg_wait_timeout is > 0. It is called if there were no messages for the task
+                                              for longer than msg_wait_timeout us.
+                                              If timeout handler returns value other than BCM_ERR_OK, task terminates.
+                                        */
+    uint32_t msg_wait_timeout;          /**< This parameter is used only in integration mode (handler==NULL) together with
+                                             timeout_handler. If > 0 and there were no messages for longer than
+                                             msg_wait_timeout us, timeout_handler is called.
+                                        */
+    long data;                          /**< Data passed to the task handler */
+    uint32_t flags;                     /**< flags */
+} bcmos_task_parm;
+
+/** Task control block */
+typedef struct bcmos_task bcmos_task;
+
+/** Create a new task
+ *
+ * \param[in,out]  task    Task control block
+ * \param[in]      parm    Task parameters
+ * \returns 0=OK or error code <0
+ */
+bcmos_errno bcmos_task_create(bcmos_task *task, const bcmos_task_parm *parm);
+
+/** Set task timeout
+ *
+ * This function is only used in integration mode (handler==NULL).
+ * It sets max time the default task handler waits for message directed to one of the
+ * task's modules.
+ *
+ * \param[in,out]  task                 Task control block
+ * \param[in]      timeout              Max time (us) to wait for messages. 0=FOREVER
+ *                                      Changing timeout from infinite to finite only takes effect
+ *                                      after message is received by any task module.
+ * \param[in]      timeout_handler      Handler to be called upon timeout. Must be != NULL if timeout > 0.
+ *                                      If the handler returns error (!= BCM_ERR_OK), task terminates.
+ * \returns 0=OK or error code <0
+ */
+bcmos_errno bcmos_task_timeout_set(bcmos_task *task, uint32_t timeout, F_bcmos_task_handler timeout_handler);
+
+/** Destroy task
+ *
+ * \param[in]   task            Task handle
+ * \returns 0=OK or error code <0
+ */
+bcmos_errno bcmos_task_destroy(bcmos_task *task);
+
+/** Get current task
+ * \returns task handle or NULL if not in task context
+ */
+bcmos_task *bcmos_task_current(void);
+
+/** Query task info
+ * \param[in]  task    Task control block
+ * \param[out] parm    Task parameters
+ * \returns 0=OK or error code <0
+ */
+bcmos_errno bcmos_task_query(const bcmos_task *task, bcmos_task_parm *parm);
+
+/** Task iterator
+ * \param[in] prev      Previous task. *prev==NULL - get first
+ * \return: BCM_ERR_OK, BCM_ERR_NOENT, BCM_ERR_NO_MORE
+ */
+bcmos_errno bcmos_task_get_next(bcmos_task **prev);
+
+
+/** @} system_task */
+
+/** \addtogroup system_msg
+ * @{
+ */
+
+/** Message header */
+typedef struct bcmos_msg bcmos_msg;
+
+/** Message queue control block */
+typedef struct bcmos_msg_queue bcmos_msg_queue;
+
+/** Message queue group control block */
+typedef struct bcmos_msg_qgroup bcmos_msg_qgroup;
+
+#if defined(BCMOS_MSG_QUEUE_DOMAIN_SOCKET) || defined(BCMOS_MSG_QUEUE_UDP_SOCKET) || defined(BCMOS_MSG_QUEUE_USER_DEFINED)
+#define BCMOS_MSG_QUEUE_REMOTE_SUPPORT
+#endif
+
+/** Message queue endpoint type */
+typedef enum
+{
+    BCMOS_MSG_QUEUE_EP_LOCAL,           /**< Local endpoint (inter-thread communication) */
+#ifdef BCMOS_MSG_QUEUE_DOMAIN_SOCKET
+    BCMOS_MSG_QUEUE_EP_DOMAIN_SOCKET,   /**< Domain-socket based endpoint */
+#endif
+#ifdef BCMOS_MSG_QUEUE_UDP_SOCKET
+    BCMOS_MSG_QUEUE_EP_UDP_SOCKET,      /**< UDP socket-based endpoint */
+#endif
+#ifdef BCMOS_MSG_QUEUE_USER_DEFINED
+    BCMOS_MSG_QUEUE_EP_USER_DEFINED     /**< User-defined endpoint */
+#endif
+} bcmos_msg_queue_ep_type;
+
+
+/** Message queue parameters */
+typedef struct
+{
+    const char *name;           /**< Queue name (for logging and debugging) */
+    uint32_t size;              /**< Max queue size. 0=unlimited */
+    uint32_t high_wm;           /**< Optional high water mark. Log is generated when queue occupancy exceeds hwm */
+    uint32_t low_wm;            /**< Optional low water mark. Log is generated when queue occupancy drops below lwm */
+    uint32_t flags;             /**< TBD flags. For example, single-core, m-core */
+    void (*notify)(bcmos_msg_queue *q, const char *txt); /***< Called when queue congestion state changes */
+    bcmos_msg_queue_ep_type ep_type; /**< Queue endpoint type */
+
+#ifdef BCMOS_MSG_QUEUE_REMOTE_SUPPORT
+    /* Remote message queue support allows queue endpoints to be located in
+     * different processes or even processors.
+     */
+    const char *local_ep_address;       /**< Queue local endpoint address */
+    const char *remote_ep_address;      /**< Queue local endpoint address */
+
+    uint32_t max_mtu;                   /**< Max MTU size */
+#define BCMOS_MSG_QUEUE_DEFAULT_MAX_MTU         (64*1024)
+
+    /** Optional "pack" callback. Not needed if 2 processes are on the same core. */
+    bcmos_errno (*pack)(bcmos_msg_queue *queue, bcmos_msg *msg, uint8_t **buf, uint32_t *buf_length);
+
+    /** Optional "unpack" callback. Not needed if 2 processes are on the same core. */
+    bcmos_errno (*unpack)(bcmos_msg_queue *queue, uint8_t *buf, uint32_t buf_length, bcmos_msg **msg);
+
+    /** Optional callback that releases packed buffer */
+    void (*free_packed)(bcmos_msg_queue *queue, uint8_t *buf);
+
+    /** Optional "open" callback. Must be set for user-defined queue, NULL otherwise */
+    bcmos_errno (*open)(bcmos_msg_queue *queue);
+
+    /** Optional "close" callback. Must be set for user-defined queue, NULL otherwise */
+    bcmos_errno (*close)(bcmos_msg_queue *queue);
+
+    /** Optional "send" callback. Must be set for user-defined queue, NULL otherwise */
+    bcmos_errno (*send)(bcmos_msg_queue *queue, uint8_t *buf, uint32_t buf_length);
+
+    /** Optional "recv" callback. Must be set for user-defined queue, NULL otherwise */
+    bcmos_errno (*recv)(bcmos_msg_queue *queue, uint32_t timeout, uint8_t **buf, uint32_t *buf_length);
+#endif
+
+} bcmos_msg_queue_parm;
+
+/** Message queue statistics */
+typedef struct
+{
+    uint32_t msg_in;            /**< Number of messages currently in the queue */
+    uint32_t msg_sent;          /**< Number of messages successfully submitted into the queue */
+    uint32_t msg_received;      /**< Number of messages received from the queue */
+    uint32_t msg_discarded;     /**< Number of messages discarded because of queue overflow */
+    uint32_t msg_almost_full;   /**< Number of messages submitted to queue when it was above high water mark */
+    bcmos_bool is_congested;    /**< True=the queue is currently congested */
+} bcmos_msg_queue_stat;
+
+/** Message queue info */
+typedef struct
+{
+    bcmos_msg_queue_parm parm;    /**< Queue parameters */
+    bcmos_msg_queue_stat stat;    /**< Queue statistics */
+} bcmos_msg_queue_info;
+
+/** Message priority in queue group */
+typedef uint32_t bcmos_qgroup_prty;
+
+/** Message queue group parameters */
+typedef struct
+{
+    const char *name;           /**< Queue group name (for logging and debugging) */
+    bcmos_qgroup_prty nqueues;  /**< Number of queues in the group */
+    uint32_t size;              /**< Total number of messages that can be stored in queue group. 0=unlimited */
+    uint32_t high_wm;           /**< Optional high water mark. Log is generated when queue occupancy exceeds hwm */
+    uint32_t low_wm;            /**< Optional low water mark. Log is generated when queue occupancy drops below lwm */
+    uint32_t flags;             /**< TBD flags. For example, single-core, m-core */
+    void (*notify)(bcmos_msg_qgroup *qgrp, const char *txt); /***< Called when queue group congestion state changes */
+} bcmos_msg_qgroup_parm;
+
+/** Message queue group info */
+typedef struct
+{
+    bcmos_msg_qgroup_parm parm; /**< Queue group parameters */
+    bcmos_msg_queue_stat  stat; /**< Queue group statistics */
+} bcmos_msg_qgroup_info;
+
+/** Message recipient instance (e.g., optical link id) */
+typedef uint16_t bcmos_msg_instance;
+
+/** Message send flags */
+typedef enum
+{
+    BCMOS_MSG_SEND_AUTO_FREE = 0x00000000,      /**< Automatically release message in case of error. This is the default behaviour */
+    BCMOS_MSG_SEND_NO_FREE_ON_ERROR =0x00000001,/**< Do NOT free message in case of transmit error */
+    BCMOS_MSG_SEND_URGENT    = 0x00000002,      /**< Urgent message */
+    BCMOS_MSG_SEND_NOLIMIT   = 0x00000004,      /**< Ignore destination queue size limit */
+} bcmos_msg_send_flags;
+
+/** Registered message handler */
+typedef void (*F_bcmos_msg_handler)(bcmos_module_id module_id, bcmos_msg *msg);
+typedef bcmos_errno (*F_bcmos_module_init)(long data);
+typedef void (*F_bcmos_module_exit)(long data);
+
+/** Message header */
+struct bcmos_msg
+{
+    bcmos_msg_id   type;        /**< Message type */
+    bcmos_msg_instance instance;/**< Message recipient instance (e.g., optical link id) */
+    F_bcmos_msg_handler handler;/**< Message handler. Can be set by the sender or message dispatcher */
+    bcmos_module_id sender;     /**< Sender module */
+    STAILQ_ENTRY(bcmos_msg) next; /**< Next message pointer */
+    void *data;                 /**< Message data pointer */
+    void *start;                /**< Message data block start (for release) */
+    uint32_t size;              /**< Message data size */
+    bcmos_msg_send_flags send_flags;    /**< Flags the message was sent with */
+#define BCMOS_MSG_QUEUE_SIZE_UNLIMITED    0xFFFFFFFF      /**< Unlimited queue */
+    void (*release)(bcmos_msg *);       /**< Release callback */
+    void (*data_release)(bcmos_msg *);  /**< Data release callback. Used when message is released to message pool */
+};
+
+/* Helper functions that pack / unpack message header for IPC */
+#ifdef BCMOS_MSG_QUEUE_REMOTE_SUPPORT
+
+/** Size of message header on the line for IPC */
+#define BCMOS_MSG_HDR_SIZE      8
+
+void bcmos_msg_hdr_pack(const bcmos_msg *msg, uint8_t *buf, uint32_t data_size);
+void bcmos_msg_hdr_unpack(const uint8_t *buf, bcmos_msg *msg);
+
+#endif
+
+/** Create message queue.
+ *
+ * This function can be called explicitly in "traditional" mode
+ * or implicitly by bcmos_module_create().
+ * \param[in,out]  queue        Queue control block
+ * \param[in]      parm         Queue parameters
+ * \returns 0=OK or error code <0
+ */
+bcmos_errno bcmos_msg_queue_create(bcmos_msg_queue *queue, const bcmos_msg_queue_parm *parm);
+
+/** Destroy queue
+ *
+ * \param[in]   queue           Queue handle
+ * \returns 0=OK or error code <0
+ */
+bcmos_errno bcmos_msg_queue_destroy(bcmos_msg_queue *queue);
+
+/** Get queue info
+ *
+ * \param[in]   queue           Queue handle
+ * \param[out]  info            Queue information
+ * \returns 0=OK or error code <0
+ */
+bcmos_errno bcmos_msg_queue_query(const bcmos_msg_queue *queue, bcmos_msg_queue_info *info);
+
+/** Message queue iterator
+ * \param[in] prev      Previous queue. *prev==NULL - get first
+ * \return: BCM_ERR_OK, BCM_ERR_NOENT, BCM_ERR_NO_MORE
+ */
+bcmos_errno bcmos_msg_queue_get_next(const bcmos_msg_queue **prev);
+
+/** Create message queue group.
+ *
+ * Queue group contains configurable number of queues. The queues are drained
+ * in strict priority. Priority 0 is the highest.
+ *
+ * \param[in,out]  qgroup       Queue group control block
+ * \param[in]      parm         Queue group parameters
+ * \returns 0=OK or error code <0
+ */
+bcmos_errno bcmos_msg_qgroup_create(bcmos_msg_qgroup *qgroup, const bcmos_msg_qgroup_parm *parm);
+
+/** Destroy queue group
+ *
+ * \param[in]   qgroup       Queue group handle
+ * \returns 0=OK or error code <0
+ */
+bcmos_errno bcmos_msg_qgroup_destroy(bcmos_msg_qgroup *qgroup);
+
+/** Get queue group info
+ *
+ * \param[in]   qgroup       Queue group handle
+ * \param[out]  info         Queue group information
+ * \returns 0=OK or error code <0
+ */
+bcmos_errno bcmos_msg_qgroup_query(const bcmos_msg_qgroup *qgroup, bcmos_msg_qgroup_info *info);
+
+/** Message queue group iterator
+ * \param[in] prev      Previous queue group. *prev==NULL - get first
+ * \return: BCM_ERR_OK, BCM_ERR_NOENT, BCM_ERR_NO_MORE
+ */
+bcmos_errno bcmos_msg_qgroup_get_next(const bcmos_msg_qgroup **prev);
+
+/** Send message to queue
+ *
+ * \param[in]   queue           Queue handle
+ * \param[in]   msg             Message
+ * \param[in]   flags           flags. Combination of \ref bcmos_msg_send_flags bits
+ *
+ * msg is released automatically regardless of bcmos_msg_send() outcome, unless
+ * BCMOS_MSG_SEND_NO_FREE_ON_ERROR flag is set.
+ *
+ * \returns 0=OK or error code <0
+ */
+bcmos_errno bcmos_msg_send(bcmos_msg_queue *queue, bcmos_msg *msg, bcmos_msg_send_flags flags);
+
+/** Send message to module
+ *
+ * For module to be able to receive the message, it must be registered
+ * using bcmos_msg_register()
+ *
+ * \param[in]   module_id       Module id
+ * \param[in]   msg             Message. msg->handler must be set
+ * \param[in]   flags           flags. Combination of \ref bcmos_msg_send_flags bits
+ *
+ * msg is released automatically regardless of bcmos_msg_send_to_module() outcome, unless
+ * BCMOS_MSG_SEND_NO_FREE_ON_ERROR flag is set.
+ *
+ * \returns 0=OK or error code <0
+ */
+bcmos_errno bcmos_msg_send_to_module(bcmos_module_id module_id, bcmos_msg *msg, bcmos_msg_send_flags flags);
+
+/** Send message to queue group
+ *
+ * \param[in]   qgroup          Queue group handle
+ * \param[in]   msg             Message
+ * \param[in]   prty            Message priority in range 0-nqueues_in_group-1.
+ *                              0 priority is the highest. If MAX number of messages are already queues
+ *                              in the queue group, sending message can leave to discard of the head message
+ *                              queued at lower priority
+ * \param[in]   flags           BCMOS_MSG_SEND_AUTO_FREE or BCMOS_MSG_SEND_NO_FREE_ON_ERROR flag
+ *
+ *
+ * msg is released automatically regardless of bcmos_msg_send_to_qgroup() outcome, unless
+ * BCMOS_MSG_SEND_NO_FREE_ON_ERROR flag is set.
+ *
+ * \returns 0=OK or error code <0
+ */
+bcmos_errno bcmos_msg_send_to_qgroup(bcmos_msg_qgroup *qgroup, bcmos_msg *msg, bcmos_qgroup_prty prty,
+    bcmos_msg_send_flags flags);
+
+/** Get message from the head of message queue
+ *
+ * The function can lead to the calling task being suspended for a period
+ * of time or indefinitely, until message is submitted to the queue.\n
+ * The function is only used in "traditional tasks" (see \ref system_model).
+ *
+ * \param[in]   queue           Queue handle
+ * \param[in]   timeout         timeout. can be 0, time in us or \ref BCMOS_WAIT_FOREVER
+ * \param[out]  msg             Message handle
+ * \returns 0=OK or error code <0
+ */
+bcmos_errno bcmos_msg_recv(bcmos_msg_queue *queue, uint32_t timeout, bcmos_msg **msg);
+
+/** Get highest priority message from queue group
+ *
+ * The function can lead to the calling task being suspended for a period
+ * of time or indefinitely, until message is submitted to the queue group.\n
+ * The function is only used in "traditional tasks" (see \ref system_model).
+ *
+ * \param[in]   qgroup          Queue group handle
+ * \param[in]   timeout         timeout. can be 0, time in us or \ref BCMOS_WAIT_FOREVER
+ * \param[out]  msg             Message handle
+ * \returns 0=OK or error code <0
+ */
+bcmos_errno bcmos_msg_recv_from_qgroup(bcmos_msg_qgroup *qgroup, uint32_t timeout, bcmos_msg **msg);
+
+/** Dispatch message. Send to module that registered for it.
+ *
+ * The message must be registered using bcmos_msg_register()
+ *
+ * This function should be used if the message sender doesn't know the target module and/or
+ * message handling callback.
+ *
+ * \param[in]   msg             Message handle
+ * \param[in]   flags           flags. Combination of \ref bcmos_msg_send_flags bits
+ *
+ * msg is released automatically regardless of bcmos_msg_dispatch() outcome, unless
+ * BCMOS_MSG_SEND_NO_FREE_ON_ERROR flag is set.
+ *
+ * \returns 0=OK or error code <0
+ */
+bcmos_errno bcmos_msg_dispatch(bcmos_msg *msg, bcmos_msg_send_flags flags);
+
+/** Register message for "push-mode" delivery.
+ *
+ * When registered message is sent to the target module and
+ * the module's task wakes up, message handler is called in the module's context.
+ *
+ * \param[in]   msg_type        Message type
+ * \param[in]   instance        Message type instance
+ * \param[in]   module_id       Target module id
+ * \param[in]   handler         Message handler
+ * \returns 0=OK or error code <0
+ */
+bcmos_errno bcmos_msg_register(bcmos_msg_id msg_type, bcmos_msg_instance instance,
+    bcmos_module_id module_id, F_bcmos_msg_handler handler);
+
+/** Un-register message registered by bcmos_msg_register()
+ *
+ * \param[in]   msg_type        Message type
+ * \param[in]   instance        Message type instance
+ * \param[in]   module_id       Target module id
+ * \returns 0=OK or error code <0
+ */
+bcmos_errno bcmos_msg_unregister(bcmos_msg_id msg_type, bcmos_msg_instance instance,
+    bcmos_module_id module_id);
+
+/** Put the OS message infrastructure in "shutdown mode".
+ *
+ * When in shutdown mode, bcmos_msg_dispatch() will return BCM_ERR_OK instead of BCM_ERR_NOENT when a handler is not
+ * found for the message. Additionally, bcmos_msg_dispatch() becomes safe to call concurrently with
+ * bcmos_msg_unregister() (this is not true in normal operation).
+ *
+ * \param[in]   shutdown_mode   Whether or not to enable shutdown mode
+ */
+void bcmos_msg_shutdown_mode_set(bcmos_bool shutdown_mode);
+
+/** Gets whether or not the OS message infrastructure is currently in "shutdown mode".
+ * \returns BCMOS_TRUE if we are in shutdown mode, BCMOS_FALSE otherwise
+ */
+bcmos_bool bcmos_msg_shutdown_mode_get(void);
+
+/** Helper type for storing message types alongside their handlers. */
+typedef struct
+{
+    bcmos_msg_id msg_type;
+    F_bcmos_msg_handler handler;
+} bcmos_msg_id2handler;
+
+/** Message pool */
+typedef struct bcmos_msg_pool bcmos_msg_pool;
+
+/** Message pool parameters */
+typedef struct bcmos_msg_pool_parm
+{
+    const char *name;           /**< Pool name */
+    uint32_t size;              /**< Number of messages in the pool */
+    uint32_t data_size;         /**< Message data size */
+    uint32_t flags;             /**< TBD flags */
+    void (*data_release)(bcmos_msg *msg); /**< Optional data release callback. Called when message is released to the pool */
+} bcmos_msg_pool_parm;
+
+/** Message pool statistics */
+typedef bcmos_blk_pool_stat bcmos_msg_pool_stat;
+
+/** Message pool info */
+typedef struct bcmos_msg_pool_info
+{
+    bcmos_msg_pool_parm parm;   /**< Pool parameters */
+    bcmos_msg_pool_stat stat;   /**< Pool statistics */
+} bcmos_msg_pool_info;
+
+/** Create message pool
+ *
+ * Create pool containing pre-allocated messages with specified data size
+ * \param[in]   pool    Message pool handle
+ * \param[in]   parm    Message pool parameters
+ * \returns 0=OK or error code <0
+ */
+bcmos_errno bcmos_msg_pool_create(bcmos_msg_pool *pool, const bcmos_msg_pool_parm *parm);
+
+/** Destroy message pool
+ *
+ * All messages must be released to the pool before it can be destroyed.
+ *
+ * \param[in]   pool    Message pool handle
+ * \returns 0=OK or error code <0
+ */
+bcmos_errno bcmos_msg_pool_destroy(bcmos_msg_pool *pool);
+
+/** Allocate message from pool
+ *
+ * The pool must be created using bcmos_pool_create()
+ * \param[in]   pool    Message pool handle
+ * \returns     msg pointer or NULL if the pool is empty.
+ * "data" and "release" fields in the returned message are pre-set
+ * Once no longer needed, the message must be released using bcmos_msg_free()
+ */
+bcmos_msg *bcmos_msg_pool_alloc(bcmos_msg_pool *pool);
+
+/** Allocate message from pool and clear data
+ *
+ * The pool must be created using bcmos_pool_create()
+ * \param[in]   pool    Message pool handle
+ * \returns     msg pointer or NULL if the pool is empty.
+ * "data" and "release" fields in the returned message are pre-set
+ * Once no longer needed, the message must be released using bcmos_msg_free()
+ */
+static inline bcmos_msg *bcmos_msg_pool_calloc(bcmos_msg_pool *pool)
+{
+    bcmos_msg *msg = bcmos_msg_pool_alloc(pool);
+    if (msg)
+    {
+        memset(msg->data, 0, msg->size);
+    }
+    return msg;
+}
+
+/** Get pool info
+ *
+ * The pool must be created using bcmos_pool_create()
+ * \param[in]   pool    Message pool handle
+ * \param[out]  info    Message pool info
+ * \returns 0=OK or error code <0
+ */
+bcmos_errno bcmos_msg_pool_query(const bcmos_msg_pool *pool, bcmos_msg_pool_info *info);
+
+/** Message pool iterator
+ * \param[in] prev      Previous message pool. *prev==NULL - get first
+ * \return: BCM_ERR_OK, BCM_ERR_NOENT, BCM_ERR_NO_MORE
+ */
+bcmos_errno bcmos_msg_pool_get_next(const bcmos_msg_pool **prev);
+
+/** @} system_msg */
+
+/** \addtogroup system_module
+ * @{
+ */
+
+/** Max number of modules per task. Must be <= 32 */
+#define BCMOS_MAX_MODULES_PER_TASK        8
+
+/** Module parameters */
+typedef struct
+{
+    bcmos_msg_queue_parm qparm;  /**< Message queue paramaters */
+    F_bcmos_module_init init;    /**< Init callback */
+    F_bcmos_module_exit exit;    /**< Exit callback */
+    long data;                   /**< Module context initial value. Also passed to init and exit callbacks */
+} bcmos_module_parm;
+
+/** Module control block */
+typedef struct bcmos_module bcmos_module;
+
+/** Register module
+ *
+ * \param[in]   module_id       Module id
+ * \param[in]   task            Owner task ID
+ * \param[in]   parm            Module parameters
+ * \returns 0=OK or error code <0
+ */
+bcmos_errno bcmos_module_create(bcmos_module_id module_id, bcmos_task *task, bcmos_module_parm *parm);
+
+/** Un-register module
+ *
+ * \param[in]   module_id       Module id
+ * \returns 0=OK or error code <0
+ */
+bcmos_errno bcmos_module_destroy(bcmos_module_id module_id);
+
+/** Get current module id in the current task
+ *
+ * \returns module_id
+ */
+bcmos_module_id bcmos_module_current(void);
+
+/** Get module context
+ *
+ * Module context is initialized as module_parm.data and can be modified using
+ * bcmos_module_context_set()
+ *
+ * \param[in]   module_id       Module_id
+ * \returns context pointer set by bcmos_module_context_set() or
+ *
+ * NULL if module_id is invalid or context is not set.
+ */
+void *bcmos_module_context(bcmos_module_id module_id);
+
+/** Set module context
+ *
+ * Context is an arbitrary structure used to store module-specific data.
+ * Usually this function is called from module init() callback
+ *
+ * \param[in]   module_id       Module_id
+ * \param[in]   context         Module context pointer
+ * \returns 0=OK or error code <0
+ */
+bcmos_errno bcmos_module_context_set(bcmos_module_id module_id, void *context);
+
+/* module control blocks */
+extern bcmos_module *bcmos_modules[BCMOS_MODULE_ID__NUM_OF];
+
+static inline bcmos_module *_bcmos_module_get(bcmos_module_id module_id)
+{
+    bcmos_module *module = bcmos_modules[module_id];
+    if ((unsigned)module_id >= BCMOS_MODULE_ID__NUM_OF)
+        return NULL;
+    return module;
+}
+
+/** Query module
+ *
+ * \param[in]   module_id       Module_id
+ * \param[out]  task            Task that owns the module
+ * \param[out]  info            Module queue info
+ * \returns 0=OK or error code <0
+ */
+bcmos_errno bcmos_module_query(bcmos_module_id module_id, const bcmos_task **task, bcmos_msg_queue_info *info);
+
+/** @} system_module */
+
+/** \addtogroup system_event
+ * @{
+ */
+
+/** Registered event handler */
+typedef void (*F_bcmos_event_handler)(bcmos_event_id event_id, uint32_t active_bits);
+
+/** Event parameters */
+typedef struct
+{
+    const char *name;                   /**< Event set name */
+    bcmos_module_id module_id;          /**< Module id. The module must be registered */
+    uint32_t mask;                      /**< Event bits module is interested in */
+    F_bcmos_event_handler handler;      /**< Event handler. Called in module's context */
+    uint32_t flags;                     /**< TBD flags. E.g., inter-core */
+} bcmos_event_parm;
+
+/** Event control block */
+typedef struct bcmos_event bcmos_event;
+
+/** Create event set
+ *
+ * \param[in]   event_id        Event set id
+ * \param[in]   parm            Event parameters. Used in "integration" mode. NULL in "traditional" mode
+ * \returns 0=OK or error code <0
+ */
+bcmos_errno bcmos_event_create(bcmos_event_id event_id, bcmos_event_parm *parm);
+
+/** Destroy event set created by bcmos_event_create()
+ *
+ * \param[in]   event_id        Event set id
+ * \returns 0=OK or error code <0
+ */
+bcmos_errno bcmos_event_destroy(bcmos_event_id event_id);
+
+/** Raise event
+ *
+ * Raised event is delivered to module(s) that registered for it
+ * using bcmos_event_register() or to the task waiting for event
+ * using bcmos_event_recv()
+ *
+ * \param[in]   event_id        Event set id
+ * \param[in]   active_bits     Active bit mask
+ * \returns 0=OK or error code <0. Can only fail if event is not registered
+ */
+bcmos_errno bcmos_event_raise(bcmos_event_id event_id, uint32_t active_bits);
+
+/** Wait for event
+ *
+ * This function is used in "traditional" mode.\n
+ * The caller can block for a time or indefinitely
+ *
+ * \param[in]   event_id        Event set id
+ * \param[in]   mask            Interesting bits. The functions returns when
+ *                              - timeout expires
+ *                              - event with (active_bits & mask) != 0 is raised
+ * \param[in]   timeout         timeout. can be 0, time in us or \ref BCMOS_WAIT_FOREVER
+ * \param[out]  active_bits     active bits in the event set. valid only if the function returns 0
+ * \returns 0=OK or error code <0
+ */
+bcmos_errno bcmos_event_recv(bcmos_event_id event_id, uint32_t mask,
+    uint32_t timeout, uint32_t *active_bits);
+
+/* Event set array */
+extern bcmos_event *bcmos_events[BCMOS_EVENT_ID__NUM_OF];
+
+/* Get event givern the event id */
+static inline bcmos_event *_bcmos_event_get(bcmos_event_id event_id)
+{
+    bcmos_event *ev = bcmos_events[event_id];
+    if ((unsigned)event_id >= BCMOS_EVENT_ID__NUM_OF)
+        return NULL;
+    return ev;
+}
+
+/** @} system_event */
+
+/** \addtogroup system_timer
+ * @{
+ */
+
+/** Max timer duration (us) */
+#define BCMOS_MAX_TIMER_DURATION   0x80000000
+
+/** Timer control block */
+typedef struct bcmos_timer bcmos_timer;
+
+/** Timer handler completion code */
+typedef enum
+{
+    BCMOS_TIMER_OK,             /**< Restart timer if periodic or keep stopped if not */
+    BCMOS_TIMER_STOP            /**< Do not restart periodic timer */
+} bcmos_timer_rc;
+
+/** Timer handler
+ * \param[in]   timer   Expired timer handle
+ * \param[in]   data    User data supplied at timer creation time
+ * \returns \ref bcmos_timer_rc
+ */
+typedef bcmos_timer_rc (*F_bcmos_timer_handler)(bcmos_timer *timer, long data);
+
+typedef enum
+{
+    BCMOS_TIMER_PARM_FLAGS_URGENT     = 0,       /**< Default behavior. If the timer owner is set, timer expiration
+                                                      will be delivered as an urgent message. */
+    BCMOS_TIMER_PARM_FLAGS_NON_URGENT = 1 << 0,  /**< If the timer owner is set, timer expiration will be delivered as
+                                                      a normal (non-urgent) message. */
+} bcmos_timer_parm_flags;
+
+/** Timer parameters */
+typedef struct
+{
+    const char *name;                   /**< Timer name */
+    bcmos_module_id owner;              /**< Timer owner. If set, timer expiration is delivered to the module
+                                             as a message */
+    bcmos_bool periodic;                /**< TRUE=periodic */
+    F_bcmos_timer_handler handler;      /**< Timer handler. Called in context of owner module
+                                             if set or timer ISR if owner==BCMOS_MODULE_ID_NONE */
+    long data;                          /**< data to pass to the handler */
+    bcmos_timer_parm_flags flags;       /**< Flags to change the behavior of the timer */
+} bcmos_timer_parm;
+
+#ifndef BCMOS_TIMESTAMP_INLINE
+
+/** Get current timestamp
+ * \returns the current system timestamp (us)
+ */
+uint32_t bcmos_timestamp(void);
+
+/** Get current 64 bit timestamp
+ * \returns the current system timestamp (us)
+ * \note There is no guarantee that all 64 bit carry information.
+ *       However, it is guaranteed that the timestamp wraps around
+ *       not oftener than every 50 days (ms resolution)
+ */
+uint64_t bcmos_timestamp64(void);
+
+#endif /* #ifndef BCMOS_TIMESTAMP_INLINE */
+
+/** Create timer
+ *
+ * \param[in,out]       timer   timer control block
+ * \param[in]           parm    timer parameters
+ * \returns 0=OK or error code <0
+ */
+bcmos_errno bcmos_timer_create(bcmos_timer *timer, bcmos_timer_parm *parm);
+
+/** Destroy timer
+ * The timer is stopped if running and destroyed
+ * \param[in]   timer   timer handle
+ */
+void bcmos_timer_destroy(bcmos_timer *timer);
+
+/** Set timer handler
+ *
+ * \param[in,out]       timer   timer control block
+ * \param[in]           handler timer handler
+ * \param[in]           data    data to be passed to the handler
+ * \returns 0=OK or error code <0
+ */
+bcmos_errno bcmos_timer_handler_set(bcmos_timer *timer, F_bcmos_timer_handler handler, long data);
+
+/** (Re)start timer
+ * Stop timer if running and start it.
+ *
+ * \param[in]   timer   timer handle
+ * \param[in]   delay   delay in us
+ */
+void bcmos_timer_start(bcmos_timer *timer, uint32_t delay);
+
+/** Stop timer if running
+ *
+ * \param[in]   timer   timer handle
+ */
+void bcmos_timer_stop(bcmos_timer *timer);
+
+/** Suspend current task for a time
+ *
+ * \param[in]   us      sleep time (us)
+ */
+#ifndef BCMOS_USLEEP_INLINE
+void bcmos_usleep(uint32_t us);
+#endif /* #ifndef BCMOS_USLEEP_INLINE */
+
+/** @} system_timer */
+
+/** \addtogroup system_fastlock
+ * @{
+ */
+
+/** Fast lock control block */
+typedef struct bcmos_fastlock bcmos_fastlock;
+
+#ifndef BCMOS_FASTLOCK_INLINE
+
+/** Init fastlock
+ * \param[in, out]      lock    fast lock control block
+ * \param[in]           flags   flags - TBD. E.g., single core / SMP
+ */
+void bcmos_fastlock_init(bcmos_fastlock *lock, uint32_t flags);
+
+/** Take fast lock
+ * \param[in]   lock    fast lock
+ * \returns value of interrupt flags that should be used in unlock
+ */
+long bcmos_fastlock_lock(bcmos_fastlock *lock);
+
+/** Release fast lock
+ * \param[in]   lock    fast lock
+ * \param[in]   flags   interrupt flags
+ */
+void bcmos_fastlock_unlock(bcmos_fastlock *lock, long flags);
+
+#endif /* #ifndef BCMOS_FASTLOCK_INLINE */
+
+/** @} system_fastlock */
+
+/** \addtogroup system_mutex
+ * @{
+ */
+
+/** Mutex control block */
+typedef struct bcmos_mutex bcmos_mutex;
+
+#ifdef BCMOS_MUTEX_INLINE
+#define BCMOS_MUTEX_CREATE_DESTROY_INLINE
+#define BCMOS_MUTEX_LOCK_UNLOCK_INLINE
+#endif
+
+#ifndef BCMOS_MUTEX_CREATE_DESTROY_INLINE
+
+/** Create recursive mutex
+ * \param[in, out]      mutex   Mutex control block
+ * \param[in]           flags   flags - TBD. E.g., single core / SMP
+ * \param[in]           name name of the mutex (if OS supports), NULL means it will be auto-generated
+ * \returns 0=OK or error code <0
+ */
+bcmos_errno bcmos_mutex_create(bcmos_mutex *mutex, uint32_t flags, const char *name);
+
+/** Destroy mutex
+ * \param[in]   mutex   Mutex control block
+ */
+void bcmos_mutex_destroy(bcmos_mutex *mutex);
+
+#endif /* BCMOS_MUTEX_CREATE_DESTROY_INLINE */
+
+
+#ifndef BCMOS_MUTEX_LOCK_UNLOCK_INLINE
+
+/** Lock mutex
+ * \param[in]   mutex   Mutex control block
+ */
+void bcmos_mutex_lock(bcmos_mutex *mutex);
+
+/** Release mutex
+ * \param[in]   mutex   Mutex control block
+ */
+void bcmos_mutex_unlock(bcmos_mutex *mutex);
+
+#endif /* #ifndef BCMOS_MUTEX_LOCK_UNLOCK_INLINE */
+
+/** @} system_mutex */
+
+/** \addtogroup system_sem
+ * @{
+ */
+
+/** Semaphore control block */
+typedef struct bcmos_sem bcmos_sem;
+
+#ifdef BCMOS_SEM_INLINE
+#define BCMOS_SEM_CREATE_DESTROY_INLINE
+#define BCMOS_SEM_WAIT_INLINE
+#define BCMOS_SEM_POST_INLINE
+#endif
+
+#ifndef BCMOS_SEM_CREATE_DESTROY_INLINE
+
+/** Create semaphore
+ * \param[in, out]    sem   semaphore control block
+ * \param[in]         count initial value of semaphore counter
+ * \param[in]         flags flags - TBD. E.g., single core / SMP
+ * \param[in]         name name of the semaphore (if OS supports), NULL means it will be auto-generated
+ * \returns 0=OK or error code <0
+ */
+bcmos_errno bcmos_sem_create(bcmos_sem *sem, uint32_t count, uint32_t flags, const char *name);
+
+/** Destroy semaphore
+ * \param[in]   sem   semaphore control block
+ */
+void bcmos_sem_destroy(bcmos_sem *sem);
+
+#endif /* BCMOS_SEM_CREATE_DESTROY_INLINE */
+
+#ifndef BCMOS_SEM_WAIT_INLINE
+
+/** Decrement semaphore counter. Wait if the counter is 0
+ *
+ * \param[in]   sem     semaphore control block
+ * \param[in]   timeout timeout. can be 0, time in us or \ref BCMOS_WAIT_FOREVER
+ * \returns 0=OK or error code <0
+ */
+bcmos_errno bcmos_sem_wait(bcmos_sem *sem, uint32_t timeout);
+
+#endif /* #ifndef BCMOS_SEM_WAIT_INLINE */
+
+#ifndef BCMOS_SEM_POST_INLINE
+/** Increment semaphore counter
+ * \param[in]   sem   semaphore control block
+ */
+void bcmos_sem_post(bcmos_sem *sem);
+
+#endif /* #ifndef BCMOS_SEM_POST_INLINE */
+
+/** @} system_sem */
+
+/*
+ * print support
+ */
+
+/** Print cloning/redirection mode */
+typedef enum
+{
+    BCMOS_PRINT_REDIRECT_MODE_NONE,     /**< No cloning, redirection */
+    BCMOS_PRINT_REDIRECT_MODE_REDIRECT, /**< Redirect console output. Do not print on the serial console */
+    BCMOS_PRINT_REDIRECT_MODE_CLONE     /**< Clone console output to redirection callback */
+} bcmos_print_redirect_mode;
+
+/** Print re-direction/cloning callback */
+typedef int (*bcmos_print_redirect_cb)(void *data, const char *format, va_list ap);
+
+/** Set up print redirection/cloning
+ * \param[in]   mode    redirection/cloning mode
+ * \param[in]   cb      redirection callback
+ * \param[in]   data    opaque data to be passed to cb
+ * \returns 0=OK or error <0
+ */
+bcmos_errno bcmos_print_redirect(bcmos_print_redirect_mode mode, bcmos_print_redirect_cb cb, void *data);
+
+/* Print on the console with optional cloning / redirection
+ * \param[in]   format  printf format
+ * \param[in]   ap      argument list
+ * \returns number of characters printed >= 0 or error < 0
+ */
+int bcmos_vprintf(const char *format, va_list ap);
+
+/* Print on the console with optional cloning / redirection
+ * \param[in]   format  printf format
+ * \returns number of characters printed >= 0 or error < 0
+ */
+int bcmos_printf(const char *format, ...);
+
+
+/** \addtogroup system_trace
+ * @{
+ */
+
+/** Trace level */
+typedef enum
+{
+    BCMOS_TRACE_LEVEL_NONE,     /**< No trace output */
+    BCMOS_TRACE_LEVEL_ERROR,    /**< Trace errors */
+    BCMOS_TRACE_LEVEL_WARNING,  /**< Trace errors + warnings */
+    BCMOS_TRACE_LEVEL_INFO,     /**< Trace errors + warnings + info */
+    BCMOS_TRACE_LEVEL_VERBOSE,  /**< Trace errors + warnings + info + verbose info */
+    BCMOS_TRACE_LEVEL_DEBUG,    /**< Trace everything */
+} bcmos_trace_level;
+
+extern bcmos_trace_level bcmos_sys_trace_level;
+
+#ifdef BCMOS_TRACE_PRINTF
+#define BCMOS_TRACE_INLINE
+#endif
+
+#ifndef BCMOS_TRACE_INLINE
+/** Print trace
+ *
+ * \param[in]   level           Record trace at level
+ * \param[in]   format          printf-like format
+ */
+void bcmos_trace(bcmos_trace_level level, const char *format, ...);
+#endif
+
+
+/* Print trace */
+#ifdef BCMOS_TRACE_PRINTF
+#define bcmos_trace(level, fmt, args...)  bcmos_printf(fmt, ## args)
+#endif
+
+/** Set current trace level
+ * \param[in]   level           New trace level
+ * \returns old trace level
+ */
+static inline bcmos_trace_level bcmos_trace_level_set(bcmos_trace_level level)
+{
+    bcmos_trace_level old_level = bcmos_sys_trace_level;
+    bcmos_sys_trace_level = level;
+    return old_level;
+}
+
+/** Get current trace level
+ * \returns trace level
+ */
+static inline bcmos_trace_level bcmos_trace_level_get(void)
+{
+    return bcmos_sys_trace_level;
+}
+
+/** Print trace conditionally, depending on the current trace level
+ * \param[in]   level   Record trace at level
+ * \param[in]   fmt     printf-like format
+ * \param[in]   args    printf-like arguments
+ */
+#define BCMOS_TRACE(level, fmt, args...) \
+    do \
+    { \
+        if (level <= bcmos_sys_trace_level) \
+            bcmos_trace(level, "%s#%d> " fmt, __FUNCTION__, __LINE__, ## args); \
+    } while (0)
+
+/** Print error trace conditionally, depending on the current trace level
+ * \param[in]   fmt     printf-like format
+ * \param[in]   args    printf-like arguments
+ */
+
+extern f_bcmolt_sw_error_handler sw_error_handler;
+
+#define BCMOS_TRACE_ERR(fmt, args...) \
+    do \
+    { \
+        BCMOS_TRACE(BCMOS_TRACE_LEVEL_ERROR, "ERR: " fmt, ## args); \
+        if (sw_error_handler != NULL) \
+        { \
+            sw_error_handler(0xff, __FILE__, __LINE__); \
+        } \
+        _bcmos_backtrace(); \
+   } while (0)
+
+
+/** Print info trace conditionally, depending on the current trace level
+ * \param[in]   fmt     printf-like format
+ * \param[in]   args    printf-like arguments
+ */
+#define BCMOS_TRACE_INFO(fmt, args...)          \
+    BCMOS_TRACE(BCMOS_TRACE_LEVEL_INFO, "INF: " fmt, ## args)
+
+/** Print verbose info trace conditionally, depending on the current trace level
+ * \param[in]   fmt     printf-like format
+ * \param[in]   args    printf-like arguments
+ */
+#define BCMOS_TRACE_VERBOSE(fmt, args...)      \
+    BCMOS_TRACE(BCMOS_TRACE_LEVEL_VERBOSE, "VRB: " fmt, ## args)
+
+/** Print debug trace conditionally, depending on the current trace level
+ * \param[in]   fmt     printf-like format
+ * \param[in]   args    printf-like arguments
+ */
+#define BCMOS_TRACE_DEBUG(fmt, args...)        \
+    BCMOS_TRACE(BCMOS_TRACE_LEVEL_DEBUG, "DBG: " fmt, ## args)
+
+/** Print trace conditionally based on return code and return
+ * \param[in]   rc      return code
+ * \param[in]   fmt     printf-like format
+ * \param[in]   args    printf-like arguments
+ * \returns rc
+ */
+#define BCMOS_TRACE_RETURN(rc, fmt, args...)    \
+    do {                                        \
+        if (rc)                                 \
+            BCMOS_TRACE_ERR("status:%s :" fmt, bcmos_strerror(rc), ## args); \
+        else                                    \
+            BCMOS_TRACE_INFO("success: " fmt, ## args); \
+        return rc;                              \
+    } while (0)
+
+#define BCMOS_TRACE_CHECK_RETURN(cond,rc,fmt,args...)    \
+    do {                                        \
+        if (cond)                                 \
+        {\
+            BCMOS_TRACE_ERR( #cond ": status:%s :" fmt, bcmos_strerror(rc), ## args); \
+            return rc;                              \
+        }\
+    } while (0)
+#define BCMOS_CHECK_RETURN(cond,err,ret)    \
+    do {                                        \
+        if (cond)                                 \
+        {\
+            BCMOS_TRACE_ERR( #cond ": status:%s\n", bcmos_strerror(err)); \
+            return ret;                              \
+        }\
+    } while (0)
+#define BCMOS_CHECK_RETURN_ERROR(cond,err) BCMOS_CHECK_RETURN(cond,err,err)
+#define BCMOS_RETURN_ON_ERROR(err) BCMOS_CHECK_RETURN(BCM_ERR_OK != err, err, /*this space intentionally left blank*/)
+#define BCMOS_RETURN_IF_ERROR(err) BCMOS_CHECK_RETURN_ERROR(BCM_ERR_OK != err, err)
+
+/** @} system_trace */
+
+/*
+ * Low level services
+ */
+
+/** \addtogroup system_buf
+ * @{
+ */
+
+/** Transport/network buffer */
+typedef struct bcmos_buf bcmos_buf;
+
+/** @} system_buf */
+
+/** Round a number up to the specified power of 2 */
+#define BCMOS_ROUND_UP(n, m) (((n) + (m) - 1) & ~((m) - 1))
+
+/** Round a number up to the nearest word multiple */
+#define BCMOS_ROUND_TO_WORD(n) BCMOS_ROUND_UP(n, sizeof(size_t))
+
+/* BCMOS_DIVIDE_ROUND_UP(integer_dividend / integer_divisor) == (integer_dividend + integer_divisor - 1) / integer_divisor */
+#define BCMOS_DIVIDE_ROUND_UP(n, m) (((n) + (m) - 1) / (m))
+
+#endif /* BCMOS_SYSTEM_COMMON_H_ */
diff --git a/bcm68620_release/release/host_customized/os_abstraction/bcmos_common2.h b/bcm68620_release/release/host_customized/os_abstraction/bcmos_common2.h
new file mode 100644
index 0000000..7317aac
--- /dev/null
+++ b/bcm68620_release/release/host_customized/os_abstraction/bcmos_common2.h
@@ -0,0 +1,676 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef BCMOS_COMMON2_H_
+#define BCMOS_COMMON2_H_
+
+#ifndef BCMOS_SYSTEM_H_
+#error Please do not include bcmos_common2.h directly. Include bcmos_system.h
+#endif
+
+#include "bcmos_endian.h"
+
+/* \addtogroup system
+ * @{
+ */
+
+#define BCMOS_MAX_NAME_LENGTH   48
+
+/** \addtogroup system_task
+ * @{
+ */
+
+/** Task control block */
+struct bcmos_task
+{
+    /* OS independent fields */
+    bcmos_task_parm parm;               /**< Task creation parameters */
+    bcmos_module *modules[BCMOS_MAX_MODULES_PER_TASK];
+    uint32_t active_modules;            /**< Bitmask of modules for which events are pending */
+    bcmos_sem active_sem;               /**< Semaphore used to wait for module activity */
+    bcmos_fastlock active_lock;         /**< Lock protecting active_modules */
+    bcmos_module_id current_module;     /**< Current module */
+    bcmos_bool destroy_request;         /**< Task destroy request pending */
+    bcmos_bool destroyed;               /**< Set by task handler before it terminates */
+    STAILQ_ENTRY(bcmos_task) list;      /**< Next task pointer */
+    char name[BCMOS_MAX_NAME_LENGTH];   /**< Task name */
+    bcmos_sys_task sys_task;            /**< OS-specific task extension */
+    uint32_t magic;                     /* magic number */
+#define BCMOS_TASK_MAGIC                (('t' << 24) | ('a' << 16) | ('s' << 8) | 'k')
+#define BCMOS_TASK_MAGIC_DESTROYED      (('t' << 24) | ('a' << 16) | ('s' << 8) | '~')
+};
+
+/** \addtogroup system_mem
+ * @{
+ */
+
+#ifndef BCMOS_CALLOC_INLINE
+
+/** Allocate memory from the main heap and clear it
+ * \ingroup system_heap
+ * \param[in]   size
+ * \returns memory block pointer or NULL
+ */
+static inline void *bcmos_calloc(uint32_t size)
+{
+    void *ptr = bcmos_alloc(size);
+    if (ptr)
+        memset(ptr, 0, size);
+    return ptr;
+}
+#endif /* #ifndef BCMOS_CALLOC_INLINE */
+
+#ifndef BCMOS_DMA_ALLOC_FREE_INLINE
+
+/** Allocate DMA-able memory
+ * \param[in]   device  Device id
+ * \param[in]   size    Block size (bytes)
+ * \returns memory block pointer or NULL
+ */
+void *bcmos_dma_alloc(uint8_t device, uint32_t size);
+
+/** Release DMA-able memory
+ * \param[in]   device  Device id
+ * \param[in]   ptr     Block pointer
+ */
+void bcmos_dma_free(uint8_t device, void *ptr);
+
+#endif /* #ifndef BCMOS_DMA_ALLOC_FREE_INLINE */
+
+#ifndef BCMOS_VIRT_TO_PHYS_INLINE
+
+/** Convert virtual address to physical address
+ *
+ * \param[in]   va      Virtual address
+ * \returns - physical address va is mapped to
+ */
+unsigned long bcmos_virt_to_phys(void *va);
+
+#endif /* #ifndef BCMOS_VIRT_TO_PHYS_INLINE */
+
+/** @} */
+
+/** \addtogroup blk_pool
+ * @{
+ */
+
+/* Memory block header */
+typedef struct bcmos_memblk bcmos_memblk;
+
+/* Memory block list */
+typedef STAILQ_HEAD(, bcmos_memblk) bcmos_memblk_list;
+
+/* Block memory pool control block */
+struct bcmos_blk_pool
+{
+    bcmos_fastlock lock;        /**< Pool protection lock */
+    bcmos_memblk_list free_list;/**< Free block list */
+    bcmos_blk_pool_parm parm;   /**< Pool parameters */
+    bcmos_blk_pool_stat stat;   /**< Pool statistics */
+    void *start;                /**< Pool start pointer */
+    char name[BCMOS_MAX_NAME_LENGTH];   /**< Pool name */
+    uint32_t magic;             /**< magic number */
+#define BCMOS_BLK_POOL_VALID            (('b'<<24) | ('l' << 16) | ('p' << 8) | 'o')
+#define BCMOS_BLK_POOL_DELETED          (('b'<<24) | ('l' << 16) | ('p' << 8) | '~')
+    STAILQ_ENTRY(bcmos_blk_pool) list; /* Pool list */
+};
+
+/* Total memory occupied by all block pools */
+extern uint32_t bcmos_total_blk_pool_size;
+
+/** @} blk_pool */
+
+/** \addtogroup system_msg
+ * @{
+ */
+
+/** Release message
+ * \param[in]   msg             Message handle
+ */
+static inline void bcmos_msg_free(bcmos_msg *msg)
+{
+    if (msg->release)
+    {
+        msg->release(msg);
+    }
+    else
+    {
+        bcmos_free(msg);
+    }
+}
+
+typedef STAILQ_HEAD(, bcmos_msg) bcmos_msg_list;
+
+/** Simple Message queue control block.
+ * Simple message queue doesn't support waiting on.
+ * It is used in module queue mechanisms.
+ */
+typedef struct bcmos_msg_queue_nw
+{
+    bcmos_msg_queue_parm parm;  /**< Queue parameters */
+    bcmos_msg_queue_stat stat;  /**< Queue statistics */
+    bcmos_fastlock lock;        /**< Queue protection lock */
+    bcmos_msg_list msgl;        /**< Message list */
+    bcmos_msg_list msgl_urg;    /**< Urgent message list */
+    uint32_t flags;             /**< Queue flags */
+} bcmos_msg_queue_nw;
+
+/** Message queue control block */
+struct bcmos_msg_queue
+{
+    bcmos_msg_queue_nw q;       /**< Queue control block */
+    bcmos_sem m;                /**< Mutex to suspend waiting task on */
+    bcmos_bool is_waiting;      /**< TRUE if task is waiting on queue */
+    char name[BCMOS_MAX_NAME_LENGTH];   /**< Queue name */
+#ifdef BCMOS_MSG_QUEUE_REMOTE_SUPPORT
+    long ep;                    /**< Endpoint handle (e.g., socket) */
+    void *ep_extra_data;        /**< Extra data - depending on ep type */
+    uint32_t ep_extra_data_size;/**< Extra data size */
+    uint8_t *send_buf;          /**< Send buffer */
+    uint8_t *recv_buf;          /**< Receive buffer */
+    bcmos_mutex send_lock;      /**< Mutex that protects send_buf */
+#endif
+    uint32_t magic;             /**< magic number */
+#define BCMOS_MSG_QUEUE_VALID           (('m'<<24) | ('q' << 16) | ('u' << 8) | 'e')
+#define BCMOS_MSG_QUEUE_DELETED         (('m'<<24) | ('q' << 16) | ('u' << 8) | '~')
+    STAILQ_ENTRY(bcmos_msg_queue) list; /* Queue list */
+};
+
+/** Message queue group control block */
+struct bcmos_msg_qgroup
+{
+    bcmos_msg_qgroup_parm parm; /**< Queue group parameters */
+    bcmos_msg_list *msgl;       /**< Array of parm.nqueues message lists */
+    bcmos_msg_queue_stat stat;  /**< Queue group statistics */
+    bcmos_sem m;                /**< Mutex to suspend waiting task on */
+    bcmos_fastlock lock;        /**< Queue group protection lock */
+    uint32_t active_mask;       /**< Bitmask of queues containing messages */
+    bcmos_bool is_waiting;      /**< TRUE if task is waiting on queue group */
+    char name[BCMOS_MAX_NAME_LENGTH];   /**< Queue group name */
+    uint32_t magic;             /**< magic number */
+#define BCMOS_MSG_QGROUP_VALID           (('m'<<24) | ('q' << 16) | ('g' << 8) | 'r')
+#define BCMOS_MSG_QGROUP_DELETED         (('m'<<24) | ('q' << 16) | ('g' << 8) | '~')
+    STAILQ_ENTRY(bcmos_msg_qgroup) list; /* Queue group list */
+};
+
+/** Message pool control block */
+struct bcmos_msg_pool
+{
+    bcmos_blk_pool blk_pool;    /**< Underlying block memory pool */
+    bcmos_msg_pool_parm parm;   /**< Pool parameters */
+};
+
+/* Total memory occupied by all message pools */
+extern uint32_t bcmos_total_msg_pool_size;
+
+/** @} system_msg */
+
+/** \addtogroup system_timer */
+
+/* Timer precision. Must be a multiple of 2.
+ * Timed expiration timestamp is rounded up to the nearest multiple of timer precision
+ */
+#define BCMOS_TIMER_PRECISION_US        32
+#if (BCMOS_TIMER_PRECISION_US & (BCMOS_TIMER_PRECISION_US - 1))
+    #error BCMOS_TIMER_PRECISION_US must be a multiple of 2
+#endif
+
+/* There are 2 timer implementations
+ * - DLIST-based - works well when most of active timers have the same duration
+ * - RB-tree based - more expensive in simple case, but scales better for large number of timers
+ *                   with arbitrary durations
+ */
+#define BCMOS_TIMER_RB_TREE
+
+/** Timer control block */
+struct bcmos_timer
+{
+    bcmos_msg msg;                      /**< Timer message */
+    bcmos_timer_parm parm;              /**< Timer parameters */
+    F_bcmos_timer_handler handler;      /**< Timer handler */
+    uint32_t period;                    /**< Timer period (us) if periodic */
+    uint32_t expire_at;                 /**< Timestamp when timer should expire */
+    uint32_t flags;                     /*   Internal flags */
+#define BCMOS_TIMER_FLAG_RUNNING        0x00000001      /* Timer is running */
+#define BCMOS_TIMER_FLAG_EXPIRED        0x00000002      /* Timer has expired, but not yet handled */
+#define BCMOS_TIMER_FLAG_ACTIVE         (BCMOS_TIMER_FLAG_RUNNING | BCMOS_TIMER_FLAG_EXPIRED)
+#define BCMOS_TIMER_FLAG_VALID          0x00000004
+    bcmos_msg_queue_nw *queue;          /**< Queue expired timer is on */
+    bcmos_task *task;                   /**< Task that executes timer handler */
+#ifdef BCMOS_TIMER_RB_TREE
+    RB_ENTRY(bcmos_timer) entry;        /**< Timer pool entry */
+#else
+    TAILQ_ENTRY(bcmos_timer) entry;
+#endif
+};
+
+/** Check if timer is running
+ * \param[in]   timer   Timer handle
+ * \returns TRUE if timer is running
+ */
+static inline bcmos_bool bcmos_timer_is_running(const bcmos_timer *timer)
+{
+    bcmos_bool running = ((timer->flags & BCMOS_TIMER_FLAG_RUNNING) != 0) ||
+        (timer->parm.periodic && ((timer->flags & BCMOS_TIMER_FLAG_EXPIRED) != 0));
+    return running;
+}
+
+static inline bcmos_timer *_bcmos_msg_to_timer(bcmos_msg *msg)
+{
+    BUG_ON(msg->type != BCMOS_MSG_ID_INTERNAL_TIMER);
+    return (bcmos_timer *)msg;
+}
+
+/** @} */
+
+/** \addtogroup system_module
+ * @{
+ */
+
+/** Module control block */
+struct bcmos_module
+{
+    bcmos_module_parm parm;     /**< Module parameters */
+    bcmos_module_id id;         /**< Module id */
+    int idx;                    /**< Module index in task control block */
+    bcmos_msg_queue_nw msgq;    /**< Message queue */
+    bcmos_task *my_task;        /**< Task the module is associated with */
+    void *context;              /**< User-defined context */
+    char name[BCMOS_MAX_NAME_LENGTH];   /**< Module name */
+};
+
+/** @} system_module */
+
+/** \addtogroup system_event
+ * @{
+ */
+
+/** Event control block */
+struct bcmos_event
+{
+    bcmos_msg msg;              /**< Message header. Used to deliver event to module's queue */
+    bcmos_event_id id;          /**< Event set id */
+    bcmos_event_parm parm;        /**< Event parameters */
+    bcmos_fastlock lock;        /**< Protects event control block */
+    uint32_t active_bits;       /**< Active event bits */
+
+    bcmos_sem m;                /**< Mutex to suspend task on. Traditional mode only */
+    bcmos_bool is_waiting;      /**< TRUE if task is waiting for event */
+    char name[BCMOS_MAX_NAME_LENGTH];   /**< Event name */
+};
+
+
+static inline bcmos_event *_bcmos_msg_to_event(bcmos_msg *msg)
+{
+    BUG_ON(msg->type != BCMOS_MSG_ID_INTERNAL_EVENT);
+    return (bcmos_event *)msg;
+}
+
+/*
+ * Low level services
+ */
+
+/** \addtogroup system_buf
+ * @{
+ */
+
+#ifndef BCMOS_BUF_OS_SPECIFIC
+#define BCMOS_BUF_DATA_INLINE
+#endif
+
+#ifdef BCMOS_BUF_INLINE
+#define BCMOS_BUF_ALLOC_FREE_INLINE
+#define BCMOS_BUF_DATA_INLINE
+#endif
+
+#ifndef BCMOS_BUF_DATA_GUARD
+#define BCMOS_BUF_DATA_GUARD            0
+#endif
+
+#ifndef BCMOS_BUF_DATA_ALIGNMENT
+#define BCMOS_BUF_DATA_ALIGNMENT        64
+#endif
+
+#ifndef BCMOS_BUF_ALLOC_FREE_INLINE
+
+/** Allocate transport buffer.
+ * The buffer can accommodate up to size bytes of data.
+ * In addition it reserves BCMTR_BUF_EXTRA_HEADROOM headroom bytes
+ * for extra headers.
+ *
+ * \param[in]   size    Data size
+ * \returns buffer pointer or NULL if no memory
+ */
+bcmos_buf *bcmos_buf_alloc(uint32_t size);
+
+ /** Release transport buffer allocated by bcmos_buf_alloc()
+  *
+  * \param[in]   buf    Buffer to be released
+  */
+void bcmos_buf_free(bcmos_buf *buf);
+
+#endif /* BCMOS_BUF_ALLOC_FREE_INLINE */
+
+#ifndef BCMOS_BUF_DATA_INLINE
+
+/** Get data length
+ *
+ * \param[in]   buf     Buffer
+ * \returns data length
+ */
+uint32_t bcmos_buf_length(bcmos_buf *buf);
+
+/** Set data length
+ *
+ * \param[in]   buf     Buffer
+ * \param[in]   length  Data length
+ * \returns 0=OK, or BCM_ERR_OVERFLOW if length exceeds size
+ */
+bcmos_errno bcmos_buf_length_set(bcmos_buf *buf, uint32_t length);
+
+/** Get buffer data pointer.
+ * \param[in]   buf     Buffer
+ * \returns data pointer
+ */
+uint8_t *bcmos_buf_data(bcmos_buf *buf);
+
+#endif /* BCMOS_BUF_DATA_INLINE */
+
+#ifndef BCMOS_BUF_OS_SPECIFIC
+
+#ifndef unlikely
+#define unlikely(x)     (x)
+#endif
+
+/* Generic (not os-specific) sysb implementation */
+
+/*
+ * Network / transport buffer
+ */
+
+
+/* Memory block list */
+typedef STAILQ_HEAD(, bcmos_buf) bcmos_buf_list_head;
+
+typedef struct
+{
+    bcmos_buf_list_head head;           /**< Buffer list head */
+} bcmos_buf_queue;
+
+/* System buffer. We probably can use mbuf as well.  */
+struct bcmos_buf
+{
+    uint8_t *start;
+    uint8_t *data;
+    bcmos_blk_pool *pool;
+    uint32_t size;
+    uint32_t len;
+    STAILQ_ENTRY(bcmos_buf) list;      /**< Next buffer pointer */
+    uint8_t channel;
+};
+
+
+#ifndef BCMTR_BUF_EXTRA_HEADROOM
+#define BCMTR_BUF_EXTRA_HEADROOM 0
+#endif
+
+
+/** Initialize buffer queue
+ * \param[in]   q       Buffer queue
+ */
+static inline void bcmos_buf_queue_init(bcmos_buf_queue *q)
+{
+    STAILQ_INIT(&q->head);
+}
+
+/* Check if buffer queue is empty
+ * \param[in]   q       Buffer queue
+ * \returns TRUE if the queue is empty
+ */
+static inline bcmos_bool bcmos_buf_queue_is_empty(bcmos_buf_queue *q)
+{
+    return (bcmos_bool)STAILQ_EMPTY(&q->head);
+}
+
+/** Enqueue buffer
+ *
+ * Must be called under lock, e.g., q->lock
+ *
+ * \param[in]   q       Buffer queue
+ * \param[in]   buf     Buffer
+ */
+static inline void bcmos_buf_queue_put(bcmos_buf_queue *q, bcmos_buf *buf)
+{
+    STAILQ_INSERT_TAIL(&q->head, buf, list);
+}
+
+/* Dequeue buffer
+ *
+ * Must be called under lock, e.g., q->lock
+ *
+ * Remove and return the 1st queued buffer.
+ * \param[in]   q       Buffer queue
+ * \returns the  buffer pointer
+ */
+static inline bcmos_buf *bcmos_buf_queue_get(bcmos_buf_queue *q)
+{
+    bcmos_buf *buf;
+    buf = STAILQ_FIRST(&q->head);
+    if (buf)
+        STAILQ_REMOVE_HEAD(&q->head, list);
+    return buf;
+}
+
+/* Peek into queue and return the 1st buffer without dequeing it
+ *
+ * Must be called under lock, e.g., q->lock
+ * \param[in]   q       Buffer queue
+ * \returns the  buffer pointer
+ */
+static inline bcmos_buf *bcmos_buf_queue_peek(bcmos_buf_queue *q)
+{
+    return STAILQ_FIRST(&q->head);
+}
+
+/* Initialize buffer */
+static inline bcmos_buf *bcmos_buf_init(bcmos_buf *buf, uint8_t *start,
+    uint8_t *data, uint32_t size, uint32_t len)
+{
+    BUG_ON((void *)(buf +1) != start);
+    buf->start = start;
+    buf->data = data;
+    buf->size = size;
+    buf->len = len;
+    buf->pool = NULL;
+    return buf;
+}
+
+/* Get data length */
+static inline uint32_t bcmos_buf_length(bcmos_buf *buf)
+{
+    return buf->len;
+}
+
+/* Set data length */
+static inline bcmos_errno bcmos_buf_length_set(bcmos_buf *buf, uint32_t length)
+{
+    if (unlikely(length > buf->size - (buf->data - buf->start)))
+    {
+        BCMOS_TRACE_ERR("!!!%s: length=%u size=%u data=%p start=%p data-start=%u\n",
+            __FUNCTION__, length, buf->size, buf->data, buf->start, (uint32_t)(buf->data - buf->start));
+        return BCM_ERR_OVERFLOW;
+    }
+    buf->len = length;
+    return BCM_ERR_OK;
+}
+
+/* Get buffer data pointer. */
+static inline uint8_t *bcmos_buf_data(bcmos_buf *buf)
+{
+    return buf->data;
+}
+
+/* Get buffer channel. */
+static inline uint8_t bcmos_buf_channel(bcmos_buf *buf)
+{
+    return buf->channel;
+}
+
+/* Set buffer channel. */
+static inline void bcmos_buf_channel_set(bcmos_buf *buf, uint8_t channel)
+{
+    buf->channel = channel;
+}
+
+#endif /* #ifndef BCMOS_BUF_OS_SPECIFIC */
+
+/** @} bcmos_buf */
+
+/** \addtogroup system_cache
+ * @{
+ */
+
+#ifndef BCMOS_CACHE_INLINE
+
+/** Invalidate address area in data cache. Dirty cache lines content is discarded.
+ * \param[in]   start   Address area start
+ * \param[in]   size    Address area size
+ */
+void bcmos_dcache_inv(void *start, uint32_t size);
+
+/** Flush address area in data cache. Dirty cache lines are committed to memory.
+ * \param[in]   start   Address area start
+ * \param[in]   size    Address area size
+ */
+void bcmos_dcache_flush(void *start, uint32_t size);
+
+#endif /* BCMOS_CACHE_INLINE */
+
+/** Prepare for DMA write.
+ * On h/w platforms that support DMA-cache coherency, this function should
+ * perform write barrier.
+ * On platforms that don't support DMA cache coherency this function should
+ * flush the relevant dcache area
+ *
+ * \param[in]   start   DMA buffer start address
+ * \param[in]   size    DMA buffer size
+ */
+static inline void bcmos_prepare_for_dma_write(void *start, uint32_t size)
+{
+#ifdef BCMOS_DMA_CACHE_COHERENCY
+    bcmos_barrier();
+#else
+    bcmos_dcache_flush(start, size);
+#endif
+}
+
+/** Prepare for DMA read.
+ * On h/w platforms that support DMA-cache coherency, this function should
+ * perform write barrier.
+ * On platforms that don't support DMA cache coherency this function should
+ * invalidate the relevant dcache area
+ *
+ * \param[in]   start   DMA buffer start address
+ * \param[in]   size    DMA buffer size
+ */
+static inline void bcmos_prepare_for_dma_read(void *start, uint32_t size)
+{
+#ifdef BCMOS_DMA_CACHE_COHERENCY
+    bcmos_barrier();
+#else
+    bcmos_dcache_inv(start, size);
+#endif
+}
+
+/** @} system_cache */
+
+/** \addtogroup system_interrupt
+ * @{
+ */
+
+#ifdef BCMOS_INTERRUPT_INLINE
+#define BCMOS_INTERRUPT_CONNECT_DISCONNECT_INLINE
+#define BCMOS_INTERRUPT_ENABLE_DISABLE_INLINE
+#endif
+
+#ifndef BCMOS_INTERRUPT_CONNECT_DISCONNECT_INLINE
+/** Connect system interrupt
+ * \param[in]   irq     IRQ number
+ * \param[in]   cpu     CPU number (for SMP)
+ * \param[in]   flags   IRQ flags
+ * \param[in]   isr     ISR
+ * \param[in]   name    device name
+ * \param[in]   priv    Private cookie
+ * \returns 0=OK, <0- error
+ */
+int bcmos_int_connect(int irq, int cpu, int flags,
+    int (*isr)(int irq, void *priv), const char *name, void *priv);
+
+/** Disconnect system interrupt
+ * \param[in]   irq     IRQ number
+ * \param[in]   priv    Private cookie passed in bcmos_int_connect()
+ * \returns 0=OK, <0- error
+ */
+void bcmos_int_disconnect(int irq, void *priv);
+#endif
+
+#ifndef BCMOS_INTERRUPT_ENABLE_DISABLE_INLINE
+/** Unmask IRQ
+ * \param[in]   irq IRQ
+ */
+void bcmos_int_enable(int irq);
+
+/** Mask IRQ
+ * \param[in]   irq IRQ
+ */
+void bcmos_int_disable(int irq);
+#endif
+
+/** @} */
+
+/* Get char, put char support */
+#ifndef BCMOS_GETCHAR_INLINE
+static inline int bcmos_getchar(void)
+{
+    return getchar();
+}
+#endif
+
+#ifndef BCMOS_PUTCHAR_INLINE
+void bcmos_putchar(int c);
+#endif
+
+#ifndef BCMOS_SEM_POST_IS_ALLOWED_INLINE
+static inline bcmos_bool bcmos_sem_post_is_allowed(void)
+{
+    return BCMOS_TRUE;
+}
+#endif
+
+#endif /* BCMOS_COMMON2_H_ */
diff --git a/bcm68620_release/release/host_customized/os_abstraction/bcmos_endian.h b/bcm68620_release/release/host_customized/os_abstraction/bcmos_endian.h
new file mode 100644
index 0000000..ece41dc
--- /dev/null
+++ b/bcm68620_release/release/host_customized/os_abstraction/bcmos_endian.h
@@ -0,0 +1,130 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef BCMOS_ENDIAN_H_
+#define BCMOS_ENDIAN_H_
+
+#ifndef BCMOS_SYSTEM_H_
+#error Please do not include bcmos_endian.h directly. Include bcmos_system.h
+#endif
+
+
+
+/** @} system_event */
+
+/** \addtogroup system_endian
+ * @{
+ */
+#ifndef BCMOS_ARCH_ENDIAN_SWAP
+
+/** Swaps the endianness of a 16-bit integer
+ * \param[in] n the original number
+ * \return number with swapped endianness
+ */
+static inline uint16_t bcmos_endian_swap_u16(uint16_t n)
+{
+    return ((n << 8 ) & 0xFF00U)|((n >> 8) & 0x00FFU);
+}
+
+/** Swaps the endianness of a 24-bit integer
+ * \param[in] n the original number
+ * \return number with swapped endianness
+ */
+static inline uint24_t bcmos_endian_swap_u24(uint24_t n)
+{
+    return (uint24_t){ .u8 = { n.u8[2], n.u8[1], n.u8[0] } };
+}
+
+/** Swaps the endianness of a 32-bit integer
+ * \param[in] n the original number
+ * \return number with swapped endianness
+ */
+static inline uint32_t bcmos_endian_swap_u32(uint32_t n)
+{
+    return ((n << 24) & 0xFF000000U)|((n << 8 ) & 0x00FF0000U)|((n >> 8) & 0x0000FF00U)|((n >> 24) & 0x000000FFU);
+}
+
+/** Swaps the endianness of a 64-bit integer
+ * \param[in] n the original number
+ * \return number with swapped endianness
+ */
+static inline uint64_t bcmos_endian_swap_u64(uint64_t n)
+{
+    return (((uint64_t)bcmos_endian_swap_u32(n & 0xFFFFFFFFU) << 32) | bcmos_endian_swap_u32((n >> 32) & 0xFFFFFFFFU));
+}
+
+#endif /* BCMOS_ARCH_ENDIAN_SWAP */
+
+#if (BCM_CPU_ENDIAN == BCMOS_ENDIAN_BIG)
+
+#define BCMOS_ENDIAN_CPU_TO_BIG_U16(n) (n)
+#define BCMOS_ENDIAN_CPU_TO_BIG_U24(n) (n)
+#define BCMOS_ENDIAN_CPU_TO_BIG_U32(n) (n)
+#define BCMOS_ENDIAN_CPU_TO_BIG_U64(n) (n)
+#define BCMOS_ENDIAN_BIG_TO_CPU_U16(n) (n)
+#define BCMOS_ENDIAN_BIG_TO_CPU_U24(n) (n)
+#define BCMOS_ENDIAN_BIG_TO_CPU_U32(n) (n)
+#define BCMOS_ENDIAN_BIG_TO_CPU_U64(n) (n)
+
+#define BCMOS_ENDIAN_CPU_TO_LITTLE_U16(n) (bcmos_endian_swap_u16(n))
+#define BCMOS_ENDIAN_CPU_TO_LITTLE_U24(n) (bcmos_endian_swap_u24(n))
+#define BCMOS_ENDIAN_CPU_TO_LITTLE_U32(n) (bcmos_endian_swap_u32(n))
+#define BCMOS_ENDIAN_CPU_TO_LITTLE_U64(n) (bcmos_endian_swap_u64(n))
+#define BCMOS_ENDIAN_LITTLE_TO_CPU_U16(n) (bcmos_endian_swap_u16(n))
+#define BCMOS_ENDIAN_LITTLE_TO_CPU_U24(n) (bcmos_endian_swap_u24(n))
+#define BCMOS_ENDIAN_LITTLE_TO_CPU_U32(n) (bcmos_endian_swap_u32(n))
+#define BCMOS_ENDIAN_LITTLE_TO_CPU_U64(n) (bcmos_endian_swap_u64(n))
+
+#elif (BCM_CPU_ENDIAN == BCMOS_ENDIAN_LITTLE)
+
+#define BCMOS_ENDIAN_CPU_TO_BIG_U16(n) (bcmos_endian_swap_u16(n))
+#define BCMOS_ENDIAN_CPU_TO_BIG_U24(n) (bcmos_endian_swap_u24(n))
+#define BCMOS_ENDIAN_CPU_TO_BIG_U32(n) (bcmos_endian_swap_u32(n))
+#define BCMOS_ENDIAN_CPU_TO_BIG_U64(n) (bcmos_endian_swap_u64(n))
+#define BCMOS_ENDIAN_BIG_TO_CPU_U16(n) (bcmos_endian_swap_u16(n))
+#define BCMOS_ENDIAN_BIG_TO_CPU_U24(n) (bcmos_endian_swap_u24(n))
+#define BCMOS_ENDIAN_BIG_TO_CPU_U32(n) (bcmos_endian_swap_u32(n))
+#define BCMOS_ENDIAN_BIG_TO_CPU_U64(n) (bcmos_endian_swap_u64(n))
+
+#define BCMOS_ENDIAN_CPU_TO_LITTLE_U16(n) (n)
+#define BCMOS_ENDIAN_CPU_TO_LITTLE_U24(n) (n)
+#define BCMOS_ENDIAN_CPU_TO_LITTLE_U32(n) (n)
+#define BCMOS_ENDIAN_CPU_TO_LITTLE_U64(n) (n)
+#define BCMOS_ENDIAN_LITTLE_TO_CPU_U16(n) (n)
+#define BCMOS_ENDIAN_LITTLE_TO_CPU_U24(n) (n)
+#define BCMOS_ENDIAN_LITTLE_TO_CPU_U32(n) (n)
+#define BCMOS_ENDIAN_LITTLE_TO_CPU_U64(n) (n)
+
+#else
+#error BCM_CPU_ENDIAN must be BCMOS_ENDIAN_BIG or _LITTLE
+#endif
+
+/** @} system_endian */
+
+#endif /* BCMOS_COMMON2_H_ */
diff --git a/bcm68620_release/release/host_customized/os_abstraction/bcmos_errno.c b/bcm68620_release/release/host_customized/os_abstraction/bcmos_errno.c
new file mode 100644
index 0000000..a2a0ff8
--- /dev/null
+++ b/bcm68620_release/release/host_customized/os_abstraction/bcmos_errno.c
@@ -0,0 +1,86 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+#include "bcmos_system.h"
+
+/* Map error code to error string */
+const char *bcmos_strerror(bcmos_errno err)
+{
+    static const char *errstr[] = {
+        [-BCM_ERR_OK]                        = "OK",
+        [-BCM_ERR_IN_PROGRESS]               = "In progress",
+        [-BCM_ERR_PARM]                      = "Error in parameters",
+        [-BCM_ERR_NOMEM]                     = "No memory",
+        [-BCM_ERR_NORES]                     = "No resources",
+        [-BCM_ERR_INTERNAL]                  = "Internal error",
+        [-BCM_ERR_NOENT]                     = "Entry doesn't exist",
+        [-BCM_ERR_NODEV]                     = "Device doesn't exist",
+        [-BCM_ERR_ALREADY]                   = "Entry already exists",
+        [-BCM_ERR_RANGE]                     = "Out of range",
+        [-BCM_ERR_PERM]                      = "No permission to perform an operation",
+        [-BCM_ERR_NOT_SUPPORTED]             = "Operation is not supported",
+        [-BCM_ERR_PARSE]                     = "Parsing error",
+        [-BCM_ERR_INVALID_OP]                = "Invalid operation",
+        [-BCM_ERR_IO]                        = "I/O error",
+        [-BCM_ERR_STATE]                     = "Object is in bad state",
+        [-BCM_ERR_DELETED]                   = "Object is deleted",
+        [-BCM_ERR_TOO_MANY]                  = "Too many objects",
+        [-BCM_ERR_NO_MORE]                   = "No more entries",
+        [-BCM_ERR_OVERFLOW]                  = "Buffer overflow",
+        [-BCM_ERR_COMM_FAIL]                 = "Communication failure",
+        [-BCM_ERR_NOT_CONNECTED]             = "No connection with the target system",
+        [-BCM_ERR_SYSCALL_ERR]               = "System call returned error",
+        [-BCM_ERR_MSG_ERROR]                 = "Received message is insane",
+        [-BCM_ERR_TOO_MANY_REQS]             = "Too many outstanding requests",
+        [-BCM_ERR_TIMEOUT]                   = "Operation timed out",
+        [-BCM_ERR_TOO_MANY_FRAGS]            = "Too many fragments",
+        [-BCM_ERR_NULL]                      = "Got NULL pointer",
+        [-BCM_ERR_READ_ONLY]                 = "Attempt to set read-only parameter",
+        [-BCM_ERR_ONU_ERR_RESP]              = "ONU returned an error response",
+        [-BCM_ERR_MANDATORY_PARM_IS_MISSING] = "Mandatory parameter is missing",
+        [-BCM_ERR_KEY_RANGE]                 = "Key field out of range",
+        [-BCM_ERR_QUEUE_EMPTY]               = "Rx of PCIe empty",
+        [-BCM_ERR_QUEUE_FULL]                = "Tx of PCIe full",
+        [-BCM_ERR_TOO_LONG]                  = "Processing is taking too long, but will finish eventually",
+        [-BCM_ERR_INSUFFICIENT_LIST_MEM]     = "Insufficient list memory provided",
+
+        [-BCM_ERR_OUT_OF_SYNC]               = "Sequence number or operation step was out of sync",
+        [-BCM_ERR_CHECKSUM]                  = "Checksum error",
+        [-BCM_ERR_IMAGE_TYPE]                = "Unsupported file/image type",
+        [-BCM_ERR_INCOMPLETE_TERMINATION]    = "Incomplete premature termination",
+    };
+    static const char *unknown = "*unknown*";
+
+    if ((unsigned)(-err) >= sizeof(errstr)/sizeof(errstr[0]) || !errstr[-err])
+        return unknown;
+    return errstr[-err];
+}
+
+#ifdef __KERNEL__
+EXPORT_SYMBOL(bcmos_strerror);
+#endif
diff --git a/bcm68620_release/release/host_customized/os_abstraction/bcmos_errno.h b/bcm68620_release/release/host_customized/os_abstraction/bcmos_errno.h
new file mode 100644
index 0000000..f5e892a
--- /dev/null
+++ b/bcm68620_release/release/host_customized/os_abstraction/bcmos_errno.h
@@ -0,0 +1,91 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef BCMOS_ERRNO_H_
+#define BCMOS_ERRNO_H_
+
+/** \defgroup system_errno Error Codes
+ * @{
+ */
+
+/** Error codes */
+typedef enum
+{
+    BCM_ERR_OK                                 =  0,   /**< OK */
+    BCM_ERR_IN_PROGRESS                        = -1,   /**< Operation is in progress */
+    BCM_ERR_PARM                               = -2,   /**< Error in parameters */
+    BCM_ERR_NOMEM                              = -3,   /**< No memory */
+    BCM_ERR_NORES                              = -4,   /**< No resources */
+    BCM_ERR_INTERNAL                           = -5,   /**< Internal error */
+    BCM_ERR_NOENT                              = -6,   /**< Entry doesn't exist */
+    BCM_ERR_NODEV                              = -7,   /**< Device doesn't exist */
+    BCM_ERR_ALREADY                            = -8,   /**< Entry already exists */
+    BCM_ERR_RANGE                              = -9,   /**< Out of range */
+    BCM_ERR_PERM                               = -10,  /**< No permission to perform an operation */
+    BCM_ERR_NOT_SUPPORTED                      = -11,  /**< Operation is not supported */
+    BCM_ERR_PARSE                              = -12,  /**< Parsing error */
+    BCM_ERR_INVALID_OP                         = -13,  /**< Invalid operation */
+    BCM_ERR_IO                                 = -14,  /**< I/O error */
+    BCM_ERR_STATE                              = -15,  /**< Object is in bad state */
+    BCM_ERR_DELETED                            = -16,  /**< Object is deleted */
+    BCM_ERR_TOO_MANY                           = -17,  /**< Too many objects */
+    BCM_ERR_NO_MORE                            = -18,  /**< No more entries */
+    BCM_ERR_OVERFLOW                           = -19,  /**< Buffer overflow */
+    BCM_ERR_COMM_FAIL                          = -20,  /**< Communication failure */
+    BCM_ERR_NOT_CONNECTED                      = -21,  /**< No connection with the target system */
+    BCM_ERR_SYSCALL_ERR                        = -22,  /**< System call returned error */
+    BCM_ERR_MSG_ERROR                          = -23,  /**< Received message is insane */
+    BCM_ERR_TOO_MANY_REQS                      = -24,  /**< Too many outstanding requests */
+    BCM_ERR_TIMEOUT                            = -25,  /**< Operation timed out */
+    BCM_ERR_TOO_MANY_FRAGS                     = -26,  /**< Too many fragments */
+    BCM_ERR_NULL                               = -27,  /**< Got NULL pointer */
+    BCM_ERR_READ_ONLY                          = -28,  /**< Attempt to set read-only parameter */
+    BCM_ERR_ONU_ERR_RESP                       = -29,  /**< ONU returned an error response */
+    BCM_ERR_MANDATORY_PARM_IS_MISSING          = -30,  /**< Mandatory parameter is missing */
+    BCM_ERR_KEY_RANGE                          = -31,  /**< Key field was out of range */
+    BCM_ERR_QUEUE_EMPTY                        = -32,  /**< Rx PCIe queue empty */
+    BCM_ERR_QUEUE_FULL                         = -33,  /**< Tx PCIe queue full */
+    BCM_ERR_TOO_LONG                           = -34,  /**< Processing is taking too long, but will finish eventually */
+    BCM_ERR_INSUFFICIENT_LIST_MEM              = -35,  /**< Not enough memory was provided for variable-length lists */
+
+    BCM_ERR_OUT_OF_SYNC                        = -36,  /**< Sequence number or operation step was out of sync. */
+    BCM_ERR_CHECKSUM                           = -37,  /**< Checksum error */
+    BCM_ERR_IMAGE_TYPE                         = -38,  /**< Unsupported file/image type */
+    BCM_ERR_INCOMPLETE_TERMINATION             = -39,  /**< Incomplete premature termination */
+} bcmos_errno;
+
+/** Map error code to error string
+ * \param[in]   err     Error code
+ * \returns Error string
+ */
+const char *bcmos_strerror(bcmos_errno err);
+
+/** @} system_errno */
+
+#endif /* BCMOS_ERRNO_H_ */
diff --git a/bcm68620_release/release/host_customized/os_abstraction/bcmos_hash_table.c b/bcm68620_release/release/host_customized/os_abstraction/bcmos_hash_table.c
new file mode 100644
index 0000000..12e1962
--- /dev/null
+++ b/bcm68620_release/release/host_customized/os_abstraction/bcmos_hash_table.c
@@ -0,0 +1,467 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+#include "bcmos_hash_table.h"
+
+#define ht_overhead     sizeof(void *)
+
+/** Create a hash table using a block pool
+ *  \param[in] pool_parm            pointer to block pool parameters
+ *  \param[in] max_data_entries     Maximum entries the hash table needs to hold
+ *  \param[in] entry_size           Size of each entry in bytes
+ *  \param[in] key_size             Size of each key in bytes
+ *  \return pointer to newly created hash table
+ */
+static hash_table *hash_table_create_in_pool(bcmos_blk_pool_parm *pool_parm,
+                                             uint32_t max_data_entries,
+                                             uint16_t entry_size,
+                                             uint8_t key_size)
+{
+    uint32_t lookup_table_entries = max_data_entries + (max_data_entries / 4);
+    hash_table *ht;
+    bcmos_errno err;
+
+    if (pool_parm == NULL)
+    {
+        BUG();
+        return NULL;
+    }
+
+    entry_size += key_size;
+
+    ht = bcmos_alloc(sizeof(hash_table));
+    if (ht == NULL)
+    {
+        BUG();
+        return NULL;
+    }
+
+    ht->obj_len = entry_size;
+    ht->key_len = key_size;
+    ht->data_offset = ht_overhead;
+    ht->ht_lookup_tbl_entries = lookup_table_entries;
+    ht->ht_max_data_entries = max_data_entries;
+    ht->look_up_entries_tbl = bcmos_alloc(lookup_table_entries * sizeof(ht_block));
+
+    if (ht->look_up_entries_tbl == NULL)
+    {
+        bcmos_free(ht);
+        BUG();
+        return NULL;
+    }
+
+    ht->ht_cur_entries = 0;
+    err = bcmos_blk_pool_create(&ht->key_data_pool, pool_parm);
+
+    if (err != BCM_ERR_OK)
+    {
+        bcmos_free(ht->look_up_entries_tbl);
+        bcmos_free(ht);
+        BUG();
+        return NULL;
+    }
+
+    if (ht->ht_max_data_entries > ht->ht_lookup_tbl_entries)
+    {
+        BUG();
+    }
+
+    ht->obj_len -= ht->key_len;
+
+    memset(ht->look_up_entries_tbl, 0, lookup_table_entries * sizeof(ht_block));
+    return ht;
+}
+
+hash_table *hash_table_create(uint32_t max_data_entries,
+                              uint16_t entry_size,
+                              uint8_t key_size,
+                              char *pool_name)
+{
+    bcmos_blk_pool_parm parm = {0};
+
+    parm.name = pool_name;
+    parm.blk_size = entry_size + key_size + ht_overhead;
+    parm.num_blks = max_data_entries;
+
+    return hash_table_create_in_pool(&parm, max_data_entries, entry_size, key_size);
+}
+
+/** Hash a length of bytes into a uint32_t
+ *  \param[in] key      Bytes to hash
+ *  \param[in] len      Number of bytes in key
+ *  \return The hash as a uint32_t
+ */
+static uint32_t get_hash_for_key(const uint8_t *key, uint8_t len)
+{
+    uint32_t hash = 5381;
+    uint8_t i;
+    const uint8_t *tmp = key;
+    for (i = 0; i < len; tmp++, i++)
+    {
+        hash = ((hash << 5) + hash) + (*tmp);
+    }
+
+    return hash;
+}
+
+/** Gets a hash key used for the keyDataPool in the HashTable
+ *  \param[in] ht   Associated hashtable we are getting hash for key for
+ *  \param[in] key  Key we are getting hash for
+ *  \return An index into the keyDataPool
+ */
+static uint32_t get_hash_val_for_key(const hash_table *ht, const uint8_t *key)
+{
+    return get_hash_for_key(key, ht->key_len) % ht->ht_lookup_tbl_entries;
+}
+
+/** Returns the location of the key within an HtBlock
+ *  \param[in] ht       Hash table in question
+ *  \param[in] block    HtBlock in question
+ *  \return pointer to the data within the block
+ */
+static uint8_t *get_key_from_block_in_table(const hash_table *ht, ht_block *block)
+{
+    return(uint8_t *) block + ht->data_offset + ht->obj_len;
+}
+
+/** Gets and populates a HtBlock with all of its data
+ *  \param[in] next     Next block in this buckets chain
+ *  \param[in] ht       Hash table in question
+ *  \param[in] key      This blocks key
+ *  \param[in] val      This blocks data
+ *  \return The block that we allocated and returned
+ */
+static ht_block *fill_ht_block(ht_block *next,
+                               hash_table *ht,
+                               const uint8_t *key,
+                               const void *val)
+{
+    ht_block *dest_block = bcmos_blk_pool_alloc(&ht->key_data_pool);
+
+    if (dest_block != NULL)
+    {
+        /* storage is nextobj ptr, hash obj,
+	    key which keeps all uint32_t aligned. */
+        dest_block->next_chain = next;
+
+        if (val != NULL)
+        {
+            memcpy((uint8_t *) dest_block + ht->data_offset, val, ht->obj_len);
+        }
+        else
+        {
+            memset((uint8_t *) dest_block + ht->data_offset,0,ht->obj_len);
+        }
+
+        /* Need to put key in after obj */
+        memcpy(
+              (uint8_t *) dest_block + ht->data_offset + ht->obj_len,
+              key,
+              ht->key_len);
+    }
+
+    return dest_block;
+}
+
+/** Determine whether two keys in a particular hash table match
+ *  \param[in] ht       Hashtable
+ *  \param[in] key_a    first key to compare
+ *  \param[in] key_b    second key to compare
+ *  \return whether they are the same
+ */
+static bcmos_bool is_key_match(const hash_table *ht, const uint8_t *key_a, const uint8_t *key_b)
+{
+    return memcmp(key_a, key_b, ht->key_len) == 0;
+}
+
+/** Searches a chained bucket looking for an instance of the key.  If found returns the block if found the key in.
+ *  Prev guy is set to the block in the chain before the block we returned (except in the case * where there is no
+ *  block before the one we returned.
+ *  \param[in] ht           HashTable in question
+ *  \param[in] key_to_find  Key we wonder if exists
+ *  \param[in] chain_start  Where to start looking in the chain
+ *  \param[in] prev_block   The previous guy before the block we returned (if exists)
+ *  \return The block that matches doesExists (if exists)
+ */
+static ht_block *get_key_loc_in_chain(
+                                     const hash_table *ht,
+                                     const uint8_t *key_to_find,
+                                     ht_block *chain_start,
+                                     ht_block **prev_block)
+{
+    *prev_block = NULL;
+    while (chain_start != NULL)
+    {
+        if (is_key_match(ht, key_to_find, get_key_from_block_in_table(ht, chain_start)))
+        {
+            return chain_start;
+        }
+        *prev_block = chain_start;
+        chain_start = chain_start->next_chain;
+    }
+    return NULL;
+}
+
+bcmos_bool hash_table_remove(hash_table *ht, const uint8_t *key)
+{
+    uint32_t hash_val = get_hash_val_for_key(ht, key);
+    ht_block *prev_entry;
+    ht_block *entry = get_key_loc_in_chain(
+        ht,
+        key,
+        ht->look_up_entries_tbl[hash_val].next_chain,
+        &prev_entry);
+
+    if (entry == NULL)
+    {
+        /* No one to delete */
+        return BCMOS_FALSE;
+    }
+    else
+    {
+        ht->ht_cur_entries--;
+        if (prev_entry == NULL)
+        {
+            /* last entry */
+            ht->look_up_entries_tbl[hash_val].next_chain = entry->next_chain;
+        }
+        else
+        {
+            prev_entry->next_chain = entry->next_chain;
+        }
+        bcmos_blk_pool_free(entry);
+        return BCMOS_TRUE;
+    }
+}
+
+/** Returns a pointer to the data within the HT
+ *  \param[in] ht           Hashtable in question
+ *  \param[in] block_ptr    HtBlock that we wonder where its data is
+ */
+static void *get_ht_data_ptr(const hash_table *ht, ht_block *block_ptr)
+{
+    return(uint8_t*)block_ptr + ht->data_offset;
+}
+
+
+/** Get an entry in the hash table
+ *  \param[in] ht       pointer to hash table
+ *  \param[in] key      pointer to key data
+ *  \param[in] hash_val hash value of key
+ *  \return pointer to hash table entry
+ */
+static inline void *ht_get_internal(const hash_table *ht,
+                                    const uint8_t *key,
+                                    uint32_t hash_val)
+{
+    ht_block *tmp;
+    ht_block *ret;
+    ret = get_key_loc_in_chain(
+                              ht,
+                              key,
+                              ht->look_up_entries_tbl[hash_val].next_chain,
+                              &tmp);
+    if (ret != NULL)
+    {
+        return get_ht_data_ptr(ht,ret);
+    }
+    else
+    {
+        return ret;
+    }
+}
+
+void *hash_table_get(const hash_table *ht, const uint8_t *key)
+{
+    uint32_t hashVal = get_hash_val_for_key(ht, key);
+    return ht_get_internal(ht,key,hashVal);
+}
+
+void *hash_table_put(hash_table *ht, const uint8_t *key, const void *val)
+{
+    void *ret_block;
+    uint32_t hash_val;
+    if (ht->ht_cur_entries >= ht->ht_max_data_entries)
+    {
+        return NULL;
+    }
+    hash_val = get_hash_val_for_key(ht, key);
+
+    ret_block = ht_get_internal((const hash_table *) ht, key, hash_val);
+    if (ret_block != NULL)
+    {
+        /* replace existing value with new value */
+        if (val != NULL)
+        {
+            memcpy(ret_block, val, ht->obj_len);
+        }
+        else
+        {
+            memset(ret_block, 0, ht->obj_len);
+        }
+        return ret_block;
+    }
+    else
+    {
+        ht_block *new_block=fill_ht_block(
+                                         ht->look_up_entries_tbl[hash_val].next_chain, ht, key, val);
+        if (new_block != NULL)
+        {
+            ht->look_up_entries_tbl[hash_val].next_chain = new_block;
+            ht->ht_cur_entries++;
+            return get_ht_data_ptr(ht,new_block);
+        }
+        else
+        {
+            return NULL;
+        }
+    }
+
+}
+
+ht_iterator ht_iterator_get(const hash_table *ht)
+{
+    ht_iterator to_ret;
+    to_ret.ht = ht;
+    to_ret.cur_idx = 0;
+    to_ret.removed_at = BCMOS_FALSE;
+    to_ret.still_valid = BCMOS_TRUE;
+    to_ret.cur_block = NULL;
+    return to_ret;
+}
+
+ht_iterator ht_iterator_get_by_key(const hash_table *ht, const uint8_t *key)
+{
+    ht_block *tmp;
+    uint32_t hash_val = get_hash_val_for_key(ht, key);
+    ht_iterator to_ret = {};
+    to_ret.ht = ht;
+    to_ret.removed_at = BCMOS_FALSE;
+    to_ret.cur_block = get_key_loc_in_chain(ht, key, ht->look_up_entries_tbl[hash_val].next_chain, &tmp);
+    to_ret.still_valid = (to_ret.cur_block != NULL);
+    to_ret.cur_idx = hash_val;
+
+    return to_ret;
+}
+
+/** Advance linear scan iterator
+ *  \param[in] it   Iterator to advance
+ */
+static void ht_iterator_scan_adv(ht_iterator *it)
+{
+    if (it->cur_block != NULL)
+    {
+        it->cur_block = it->cur_block->next_chain;
+        if (it->cur_block != NULL)
+        {
+            it->still_valid = BCMOS_TRUE;
+            return;
+        }
+        else
+        {
+            it->cur_idx++;
+        }
+    }
+    /* find non null entry */
+    while (it->cur_idx < it->ht->ht_lookup_tbl_entries)
+    {
+        if (it->ht->look_up_entries_tbl[it->cur_idx].next_chain != NULL)
+        {
+            it->cur_block = it->ht->look_up_entries_tbl[it->cur_idx].next_chain;
+            it->still_valid = BCMOS_TRUE;
+            return;
+        }
+        else
+        {
+            it->cur_idx++;
+        }
+    }
+    it->still_valid = BCMOS_FALSE;
+}
+
+void ht_iterator_deref(const ht_iterator *hti, uint8_t **key, void **obj)
+{
+    if (!hti->still_valid)
+    {
+        BCMOS_TRACE_ERR("%s: Invalid deref\n", __FUNCTION__);
+    }
+    else
+    {
+        *key = get_key_from_block_in_table(hti->ht, hti->cur_block);
+        *obj = get_ht_data_ptr(hti->ht, hti->cur_block);    /* to data */
+    }
+}
+
+void ht_iterator_remove_at(hash_table *ht, ht_iterator *it)
+{
+    if (ht != it->ht)
+    {
+        BCMOS_TRACE_ERR("%s: Incorrect writeable hash table pointer\n", __FUNCTION__);
+    }
+    else if (it->removed_at)
+    {
+        BCMOS_TRACE_ERR("%s: No delete twice\n", __FUNCTION__);
+    }
+    else
+    {
+        uint8_t *key;
+        uint8_t *obj;
+        ht_iterator_deref(it, &key, (void **) &obj);
+        it->removed_at = BCMOS_TRUE;
+        it->still_valid = ht_iterator_next(it);
+        if (!hash_table_remove(ht, key))
+        {
+            BCMOS_TRACE_ERR("%s: Remove error\n", __FUNCTION__);
+        }
+    }
+}
+
+bcmos_bool ht_iterator_next(ht_iterator *it)
+{
+    if (it->still_valid)
+    {
+        if (it->removed_at)
+        {
+            it->removed_at = BCMOS_FALSE;
+        }
+        else
+        {
+            ht_iterator_scan_adv(it);
+        }
+    }
+    return it->still_valid;   /* No entry found */
+}
+
+void hash_table_clear(hash_table *ht)
+{
+    ht_iterator it = ht_iterator_get(ht);
+    while (ht_iterator_next(&it))
+    {
+        ht_iterator_remove_at(ht, &it);
+    }
+}
diff --git a/bcm68620_release/release/host_customized/os_abstraction/bcmos_hash_table.h b/bcm68620_release/release/host_customized/os_abstraction/bcmos_hash_table.h
new file mode 100644
index 0000000..15618d6
--- /dev/null
+++ b/bcm68620_release/release/host_customized/os_abstraction/bcmos_hash_table.h
@@ -0,0 +1,137 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef BCMOS_HASH_TABLE_H_
+#define BCMOS_HASH_TABLE_H_
+
+#include "bcmos_system.h"
+
+typedef struct ht_block ht_block;
+struct ht_block
+{
+    ht_block *next_chain;
+};
+
+typedef struct
+{
+    uint16_t obj_len;
+    uint8_t key_len;
+    uint32_t data_offset;
+    uint32_t ht_lookup_tbl_entries;
+    uint32_t ht_max_data_entries;
+    bcmos_blk_pool key_data_pool;
+    ht_block *look_up_entries_tbl;
+    uint32_t ht_cur_entries;
+} hash_table;
+
+typedef struct
+{
+    const hash_table *ht;
+    uint32_t cur_idx;
+    ht_block *cur_block;
+    bcmos_bool removed_at;
+    bcmos_bool still_valid;
+} ht_iterator;
+
+/** Create a hash table
+ *  \param[in] max_data_entries     Maximum entries the hash table needs to hold
+ *  \param[in] entry_size           Size of each entry in bytes
+ *  \param[in] key_size             Size of each key in bytes
+ *  \param[in] pool_name            Friendly name to identify the hash table's memory pool
+ *  \return pointer to newly created hash table
+ */
+hash_table *hash_table_create(uint32_t max_data_entries,
+                              uint16_t entry_size,
+                              uint8_t key_size,
+                              char *pool_name);
+
+/** Removes all entries from a HashTable.
+ *  \param[in] ht   Hash table to remove all entries from
+ */
+void hash_table_clear(hash_table *ht);
+
+/** Gets a pointer to an entry within the hash table (if exists)
+ *  \param[in] ht   Hashtable in question
+ *  \param[in] key  Key to look for.
+ *  \return Non null if we found a data item associated with KEY.
+ */
+void *hash_table_get(const hash_table *ht, const uint8_t *key);
+
+/** Returns pointers to the key and value that an iterator is pointing at. Warning: key may not be uint32_t aligned.
+ *  DO NOT DELETE THE ELEMENT THE ITERATOR POINTS AT AND AND TRY TO USE THE ITERATOR SUBSEQUENTLY. If you need to do
+ *  this use ht_iterator_remove_at
+ *  \param[in] hti  Iterator
+ *  \param[in] key  Pointer to key to fill
+ *  \param[in] obj  Pointer to obj to fill.
+ */
+void ht_iterator_deref(const ht_iterator *hti, uint8_t **key, void **obj);
+
+/** Get an interator for traversing a hashtable.
+ *  \param[in] ht   Hashtable to traverse
+ *  \return The iterator.
+ */
+ht_iterator ht_iterator_get(const hash_table *ht);
+
+/** Get an interator for traversing a hashtable based on an entry's key.
+ *  \param[in] ht   Hashtable to traverse
+ *  \param[in] key  key of entry to return
+ *  \return The iterator.
+ */
+ht_iterator ht_iterator_get_by_key(const hash_table *ht, const uint8_t *key);
+
+/** Advances a HashTable iterator to the next location within the HashTable.
+ *  \param[in] it   Iterator to advance
+ *  \return TRUE if there was a next element
+ */
+bcmos_bool ht_iterator_next(ht_iterator *it);
+
+/** Deletes the entry where the iterator points to and advances the iterator returning whether the advance worked or
+ *  not.
+ *  \param[in] ht   Writable reference to the hash table (the iterator only has read permission)
+ *  \param[in] it   Itreator pointing at entry to delete.
+ */
+void ht_iterator_remove_at(hash_table *ht, ht_iterator *it);
+
+/** Attempts to associate key with val in the hash table. If key already exists overwrites what was at key with val.
+ *  Otherwise allocates an entry within the hashtable for key and copies val into it.
+ *  \param[in] ht   Hashtable to add or modify
+ *  \param[in] key  Key to try and associate with val.
+ *  \param[in] val  Val to associate
+ *  \return NULL if fail, else pointer to just added block.
+ */
+void *hash_table_put(hash_table *ht, const uint8_t *key, const void *val);
+
+/** Removes an entry (if exists) from the hash table.
+ *  \param[in] ht   HashTable to remove from.
+ *  \param[in] key  Key to remove
+ *  \return BCMOS_TRUE if anything was removed, otherwise BCMOS_FALSE.
+ */
+bcmos_bool hash_table_remove(hash_table *ht, const uint8_t *key);
+
+#endif /* Hash.h */
diff --git a/bcm68620_release/release/host_customized/os_abstraction/bcmos_pack.h b/bcm68620_release/release/host_customized/os_abstraction/bcmos_pack.h
new file mode 100644
index 0000000..2161045
--- /dev/null
+++ b/bcm68620_release/release/host_customized/os_abstraction/bcmos_pack.h
@@ -0,0 +1,67 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef BCMOS_PACK_H_
+#define BCMOS_PACK_H_
+
+
+/*
+ * Packing macros
+ *
+ * Usage:
+ * struct __PACKED_ATTR_START__ my_packed_struct
+ * {
+ *      ...
+ * } __PACKED_ATTR_END__ ;
+ *
+ */
+
+#ifdef __GNUC__
+
+#define __PACKED_ATTR_START__
+#define __PACKED_ATTR_END__ __attribute__ ((packed))
+
+#else
+
+#error define __PACKED_ATTR_START__,  __PACKED_ATTR_END__ for this compiler
+
+#endif
+
+/*
+ * Macros for bit-field manipulation
+ * For each field F requires 2 constants
+ * - F_S - field shift
+ * - F_W - field width
+ */
+#define BCM_FIELD_GET(_w, _f)           (((_w)>>_f ## _S) & ((1 << _f ## _W) - 1))
+#define BCM_FIELD(_f, _v)               ((_v & ((1 << _f ## _W) - 1)) << _f ## _S)
+#define BCM_FIELD_SET(_w, _f, _v)       (_w) |= BCM_FIELD(_f, _v)
+
+
+#endif /* BCMOS_PACK_H_ */
diff --git a/bcm68620_release/release/host_customized/os_abstraction/bcmos_platform.h b/bcm68620_release/release/host_customized/os_abstraction/bcmos_platform.h
new file mode 100644
index 0000000..7b40fb1
--- /dev/null
+++ b/bcm68620_release/release/host_customized/os_abstraction/bcmos_platform.h
@@ -0,0 +1,236 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef BCMOS_PLATFORM_H_
+#define BCMOS_PLATFORM_H_
+
+#ifndef BCMOS_SYSTEM_H_
+#error Please do not include bcmos_platform.h directly. Include bcmos_system.h
+#endif
+
+/** BCM68620 CPU core
+ * \ingroup system_task */
+typedef enum
+{
+    BCMOS_CPU_CORE_ANY,                         /**< Any core */
+
+    BCMOS_CPU_CORE__NUM_OF = 1,                 /**< Number of cores */
+} bcmos_core;
+
+#define MAX_NUMBER_OF_PONS_ON_ALL_DEVICES (BCMTR_MAX_OLTS * BCMTR_MAX_INSTANCES)
+
+/** BCM68620 module
+ * \ingroup system_module
+ */
+typedef enum
+{
+    BCMOS_MODULE_ID_NONE,                       /**< no module */
+
+#ifdef BCMOS_SYS_UNITTEST
+    BCMOS_MODULE_ID_TEST1,
+    BCMOS_MODULE_ID_TEST2,
+#endif
+    /* Each Device (BCM6862X) must have its own dedicated Device Control Module at the host */
+    BCMOS_MODULE_ID_DEV_CTRL_DEV0,
+    BCMOS_MODULE_ID_DEV_CTRL_DEV1,
+    BCMOS_MODULE_ID_DEV_CTRL_DEV2,
+    BCMOS_MODULE_ID_DEV_CTRL_DEV3,
+    BCMOS_MODULE_ID_DEV_CTRL_DEV4,
+    BCMOS_MODULE_ID_DEV_CTRL_DEV5,
+    BCMOS_MODULE_ID_DEV_CTRL_DEV6,
+    BCMOS_MODULE_ID_DEV_CTRL_DEV7,
+
+    /* CLI over PCIe client */
+    BCMOS_MODULE_ID_CLI_OVER_PCIE,
+
+    /* Protection switching user application */
+    BCMOS_MODULE_ID_USER_APPL_PS,
+
+    /* Remote CLI */
+    BCMOS_MODULE_ID_REMOTE_CLI_DEV0,
+
+    /* Remote logger application (To support multiple devices need to add number of devices to previous value) */
+    BCMOS_MODULE_ID_USER_APPL_REMOTE_LOGGER_DEV0 = BCMOS_MODULE_ID_REMOTE_CLI_DEV0 + BCMTR_MAX_OLTS,
+
+    /* OMCI SW download user application (To support multiple devices need to add number of devices to previous value) */
+    BCMOS_MODULE_ID_USER_APPL_OMCI_SWDL_DEV0 = BCMOS_MODULE_ID_USER_APPL_REMOTE_LOGGER_DEV0 + BCMTR_MAX_OLTS,
+
+    /* GPON mac learning / aging user application (To support multiple devices need to add number of devices to previous value)*/
+    BCMOS_MODULE_ID_USER_APPL_GPON_MAC_LEARNING_DEV0 = BCMOS_MODULE_ID_USER_APPL_OMCI_SWDL_DEV0 + BCMTR_MAX_OLTS,
+
+    /* GPON stress user application (To support multiple devices need to add number of devices to previous value)*/
+    BCMOS_MODULE_ID_USER_APPL_GPON_STRESS_DEV0 = BCMOS_MODULE_ID_USER_APPL_GPON_MAC_LEARNING_DEV0 + BCMTR_MAX_OLTS,
+
+    /* GPON DS OMCI packets user application (To support multiple devices need to add number of devices to previous value)*/
+    BCMOS_MODULE_ID_USER_APPL_GPON_DS_OMCI0_DEV0 = BCMOS_MODULE_ID_USER_APPL_GPON_STRESS_DEV0 + BCMTR_MAX_OLTS,
+
+    /* GPON SN acquisition (To support multiple devices need to add number of devices multiply with max PON number to previous value)*/
+    BCMOS_MODULE_ID_USER_APPL_GPON_SN_ACQUISITION0_DEV0 = BCMOS_MODULE_ID_USER_APPL_GPON_DS_OMCI0_DEV0 + MAX_NUMBER_OF_PONS_ON_ALL_DEVICES,
+
+    /* GPON statistics (To support multiple devices need to add number of devices multiply with max PON number to previous value) */
+    BCMOS_MODULE_ID_USER_APPL_GPON_STATISTICS0_DEV0 = BCMOS_MODULE_ID_USER_APPL_GPON_SN_ACQUISITION0_DEV0 + MAX_NUMBER_OF_PONS_ON_ALL_DEVICES,
+
+    /* GPON RSSI user application (To support multiple devices need to add number of devices multiply with max PON number to previous value) */
+    BCMOS_MODULE_ID_USER_APPL_GPON_RSSI_DEV0 = BCMOS_MODULE_ID_USER_APPL_GPON_STATISTICS0_DEV0 + MAX_NUMBER_OF_PONS_ON_ALL_DEVICES,
+
+    /* EPON OAM negotiation application (To support multiple devices need to add number of devices to previous value)*/
+    BCMOS_MODULE_ID_USER_APPL_EON = BCMOS_MODULE_ID_USER_APPL_GPON_RSSI_DEV0 + BCMTR_MAX_OLTS,
+
+    /* EPON optical monitoring application */
+    BCMOS_MODULE_ID_USER_APPL_OMON = BCMOS_MODULE_ID_USER_APPL_EON + BCMTR_MAX_OLTS,
+
+    /* EPON Host driven encryption application */
+    BCMOS_MODULE_ID_USER_APPL_EPON_HDE,
+
+    BCMOS_MODULE_ID_USER_APPL_EPON_OAM,
+
+    BCMOS_MODULE_ID_USER_APPL_DPOE_SEC,
+
+    BCMOS_MODULE_ID_USER_APPL_IMAGE_TRANSFER0 = BCMOS_MODULE_ID_USER_APPL_DPOE_SEC + BCMTR_MAX_OLTS,
+    BCMOS_MODULE_ID_USER_APPL_IMAGE_TRANSFER1,
+
+	BCMOS_MODULE_ID_USER_APPL_ONU_TUNING_DEV0,
+	BCMOS_MODULE_ID_USER_APPL_ONU_TUNING_DEV1,
+
+    BCMOS_MODULE_ID__NUM_OF,                    /**< Number of modules */
+    BCMOS_MODULE_ID_INVALID = BCMOS_MODULE_ID_NONE
+} bcmos_module_id;
+
+/** BCM68620 event group. Each group supports up to 32 events.
+ * \ingroup system_event
+ */
+typedef enum
+{
+#ifdef BCMOS_SYS_UNITTEST
+    BCMOS_EVENT_ID_TEST1,
+    BCMOS_EVENT_ID_TEST2,
+#else
+    BCMOS_EVENT_ID_DUMMY,                       /* Currently OS s/w doesn't use events.
+                                                   Remove this constant when adding real events */
+#endif
+
+    BCMOS_EVENT_ID__NUM_OF,                     /**< Number of event groups */
+} bcmos_event_id;
+
+/** Message hash size
+ * \ingroup system_msg
+ */
+#define BCMOS_MSG_HASH_SIZE     512
+
+/** Maple OS message
+ * \ingroup system_msg
+ */
+typedef enum
+{
+    BCMOS_MSG_ID__BEGIN,
+
+    /* Internal messages */
+    BCMOS_MSG_ID_INTERNAL_TIMER = BCMOS_MSG_ID__BEGIN, /**< Internal "timer message" type */
+    BCMOS_MSG_ID_INTERNAL_EVENT,                       /**< Internal "event message" type */
+    BCMOS_MSG_ID_INTERNAL_IPC,
+
+    BCMOS_MSG_ID_INITIATE_RX_POWER,
+    BCMOS_MSG_ID_INITIATE_TRX_STATUS,
+    BCMOS_MSG_ID_INITIATE_ROGUE_SCAN,
+    BCMOS_MSG_ID_INITIATE_RSSI_READ,
+
+    BCMOS_MSG_ID_GPON_STRESS_START,
+    BCMOS_MSG_ID_GPON_STRESS_TIMEOUT,
+    BCMOS_MSG_ID_GPON_STRESS_ONU_DISCOVERED,
+    BCMOS_MSG_ID_GPON_STRESS_PON_DEACTIVATION_COMPLETED,
+    BCMOS_MSG_ID_GPON_STRESS_PON_ACTIVATION_COMPLETED,
+    BCMOS_MSG_ID_GPON_STRESS_ALL_ONUS_DEACTIVATION_COMPLETED,
+    BCMOS_MSG_ID_GPON_STRESS_ALL_ONUS_ACTIVATION_COMPLETED,
+    BCMOS_MSG_ID_GPON_STRESS_ONU_DEACTIVATION_COMPLETED,
+    BCMOS_MSG_ID_GPON_STRESS_ONU_ACTIVATION_COMPLETED,
+
+    BCMOS_MSG_ID_GPON_DS_OMCI_START,
+    BCMOS_MSG_ID_GPON_DS_OMCI_TIMEOUT,
+    BCMOS_MSG_ID_GPON_DS_OMCI_STOP,
+    BCMOS_MSG_ID_GPON_DS_OMCI_DEVICE_CONNECTED,
+    BCMOS_MSG_ID_GPON_DS_OMCI_DEVICE_DISCONNECTED,
+
+    BCMOS_MSG_ID_GPON_RSSI_START,
+
+    BCMOS_MSG_ID_GPON_STATISTICS_START,
+    BCMOS_MSG_ID_GPON_STATISTICS_TIMEOUT,
+    BCMOS_MSG_ID_GPON_STATISTICS_STOP,
+
+    BCMOS_MSG_ID_EON_START,
+    BCMOS_MSG_ID_EON_STOP,
+    BCMOS_MSG_ID_EON_PROXY_RX,
+
+    BCMOS_MSG_ID_EPON_OAM_PROXY_RX,
+    BCMOS_MSG_ID_EPON_OAM_TIMEOUT,
+
+    BCMOS_MSG_ID_DPOE_SEC_START,
+    BCMOS_MSG_ID_DPOE_SEC_RX_OAM,
+    BCMOS_MSG_ID_DPOE_SEC_RX_EAPOL,
+
+	BCMOS_MSG_ID_ONU_TUNING_START,
+	BCMOS_MSG_ID_ONU_TUNING_STOP,
+
+    BCMOS_MSG_ID__NONE,
+    BCMOS_MSG_ID__END,
+    BCMOS_MSG_ID__FORCE16 = 0x7fff
+} bcmos_msg_id;
+
+#define BCMOS_MSG_ID__NUM_OF (BCMOS_MSG_ID__END - BCMOS_MSG_ID__BEGIN)
+/*
+ * Task priorities
+ */
+
+#define TASK_PRIORITY_TRANSPORT_TX                  BCMOS_TASK_PRIORITY_3
+#define TASK_PRIORITY_TRANSPORT_RX                  BCMOS_TASK_PRIORITY_8
+#define TASK_PRIORITY_TRANSPORT_PROXY               BCMOS_TASK_PRIORITY_9
+#define TASK_PRIORITY_TRANSPORT_REMOTE_CLI          BCMOS_TASK_PRIORITY_9
+#define TASK_PRIORITY_DEVICE_CONTROL                BCMOS_TASK_PRIORITY_10
+#define TASK_PRIORITY_USER_APPL_PS                  BCMOS_TASK_PRIORITY_12
+#define TASK_PRIORITY_USER_APPL_EON                 BCMOS_TASK_PRIORITY_12
+#define TASK_PRIORITY_USER_APPL_OMON                BCMOS_TASK_PRIORITY_12
+#define TASK_PRIORITY_USER_APPL_EPON_HDE            BCMOS_TASK_PRIORITY_12
+#define TASK_PRIORITY_USER_APPL_DPOE_SEC            BCMOS_TASK_PRIORITY_12
+#define TASK_PRIORITY_USER_APPL_GPON_MAC_LEARNING   BCMOS_TASK_PRIORITY_12
+#define TASK_PRIORITY_USER_APPL_GPON_STRESS         BCMOS_TASK_PRIORITY_12
+#define TASK_PRIORITY_USER_APPL_GPON_SN_ACQUISITION BCMOS_TASK_PRIORITY_12
+#define TASK_PRIORITY_USER_APPL_GPON_DS_OMCI        BCMOS_TASK_PRIORITY_12
+#define TASK_PRIORITY_USER_APPL_GPON_STATISTICS     BCMOS_TASK_PRIORITY_12
+#define TASK_PRIORITY_USER_APPL_ONU_TUNING          BCMOS_TASK_PRIORITY_12
+#define TASK_PRIORITY_USER_APPL_GPON_RSSI           BCMOS_TASK_PRIORITY_12
+#define TASK_PRIORITY_CLI                           BCMOS_TASK_PRIORITY_15
+#define TASK_PRIORITY_USER_APPL_OMCI_SWDL           BCMOS_TASK_PRIORITY_17
+#define TASK_PRIORITY_USER_APPL_IMAGE_TRANSFER      BCMOS_TASK_PRIORITY_17
+#define TASK_PRIORITY_DEV_LOG_KERNEL                BCMOS_TASK_PRIORITY_20
+#define TASK_PRIORITY_DEV_LOG                       BCMOS_TASK_PRIORITY_30
+#define TASK_PRIORITY_USER_APPL_REMOTE_LOGGER       BCMOS_TASK_PRIORITY_30
+
+
+
+
+#endif /* BCMOS_PLATFORM_H_ */
diff --git a/bcm68620_release/release/host_customized/os_abstraction/bcmos_queue.h b/bcm68620_release/release/host_customized/os_abstraction/bcmos_queue.h
new file mode 100644
index 0000000..2172e4d
--- /dev/null
+++ b/bcm68620_release/release/host_customized/os_abstraction/bcmos_queue.h
@@ -0,0 +1,650 @@
+/*-
+ * Copyright (c) 1991, 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *	@(#)queue.h	8.5 (Berkeley) 8/20/94
+ * $FreeBSD$
+ */
+
+#ifndef _SYS_QUEUE_H_
+#define	_SYS_QUEUE_H_
+
+/* #include <sys/cdefs.h> */
+
+/*
+ * This file defines four types of data structures: singly-linked lists,
+ * singly-linked tail queues, lists and tail queues.
+ *
+ * A singly-linked list is headed by a single forward pointer. The elements
+ * are singly linked for minimum space and pointer manipulation overhead at
+ * the expense of O(n) removal for arbitrary elements. New elements can be
+ * added to the list after an existing element or at the head of the list.
+ * Elements being removed from the head of the list should use the explicit
+ * macro for this purpose for optimum efficiency. A singly-linked list may
+ * only be traversed in the forward direction.  Singly-linked lists are ideal
+ * for applications with large datasets and few or no removals or for
+ * implementing a LIFO queue.
+ *
+ * A singly-linked tail queue is headed by a pair of pointers, one to the
+ * head of the list and the other to the tail of the list. The elements are
+ * singly linked for minimum space and pointer manipulation overhead at the
+ * expense of O(n) removal for arbitrary elements. New elements can be added
+ * to the list after an existing element, at the head of the list, or at the
+ * end of the list. Elements being removed from the head of the tail queue
+ * should use the explicit macro for this purpose for optimum efficiency.
+ * A singly-linked tail queue may only be traversed in the forward direction.
+ * Singly-linked tail queues are ideal for applications with large datasets
+ * and few or no removals or for implementing a FIFO queue.
+ *
+ * A list is headed by a single forward pointer (or an array of forward
+ * pointers for a hash table header). The elements are doubly linked
+ * so that an arbitrary element can be removed without a need to
+ * traverse the list. New elements can be added to the list before
+ * or after an existing element or at the head of the list. A list
+ * may only be traversed in the forward direction.
+ *
+ * A tail queue is headed by a pair of pointers, one to the head of the
+ * list and the other to the tail of the list. The elements are doubly
+ * linked so that an arbitrary element can be removed without a need to
+ * traverse the list. New elements can be added to the list before or
+ * after an existing element, at the head of the list, or at the end of
+ * the list. A tail queue may be traversed in either direction.
+ *
+ * For details on the use of these macros, see the queue(3) manual page.
+ *
+ *
+ *				SLIST	LIST	STAILQ	TAILQ
+ * _HEAD			+	+	+	+
+ * _HEAD_INITIALIZER		+	+	+	+
+ * _ENTRY			+	+	+	+
+ * _INIT			+	+	+	+
+ * _EMPTY			+	+	+	+
+ * _FIRST			+	+	+	+
+ * _NEXT			+	+	+	+
+ * _PREV			-	-	-	+
+ * _LAST			-	-	+	+
+ * _FOREACH			+	+	+	+
+ * _FOREACH_SAFE		+	+	+	+
+ * _FOREACH_REVERSE		-	-	-	+
+ * _FOREACH_REVERSE_SAFE	-	-	-	+
+ * _INSERT_HEAD			+	+	+	+
+ * _INSERT_BEFORE		-	+	-	+
+ * _INSERT_AFTER		+	+	+	+
+ * _INSERT_TAIL			-	-	+	+
+ * _CONCAT			-	-	+	+
+ * _REMOVE_AFTER		+	-	+	-
+ * _REMOVE_HEAD			+	-	+	-
+ * _REMOVE			+	+	+	+
+ *
+ */
+#ifdef QUEUE_MACRO_DEBUG
+/* Store the last 2 places the queue element or head was altered */
+struct qm_trace {
+	char * lastfile;
+	int lastline;
+	char * prevfile;
+	int prevline;
+};
+
+#define	TRACEBUF	struct qm_trace trace;
+#define	TRASHIT(x)	do {(x) = (void *)-1;} while (0)
+
+#define	QMD_TRACE_HEAD(head) do {					\
+	(head)->trace.prevline = (head)->trace.lastline;		\
+	(head)->trace.prevfile = (head)->trace.lastfile;		\
+	(head)->trace.lastline = __LINE__;				\
+	(head)->trace.lastfile = __FILE__;				\
+} while (0)
+
+#define	QMD_TRACE_ELEM(elem) do {					\
+	(elem)->trace.prevline = (elem)->trace.lastline;		\
+	(elem)->trace.prevfile = (elem)->trace.lastfile;		\
+	(elem)->trace.lastline = __LINE__;				\
+	(elem)->trace.lastfile = __FILE__;				\
+} while (0)
+
+#else
+#define	QMD_TRACE_ELEM(elem)
+#define	QMD_TRACE_HEAD(head)
+#define	TRACEBUF
+#define	TRASHIT(x)
+#endif	/* QUEUE_MACRO_DEBUG */
+
+/* Lint support requires types to be defined using typedefs.
+   No adding "struct" implicitly
+*/
+#ifdef USE_LINT
+#define _Q_TYPE_CAST(type)          (type *)
+#define _Q_TYPE_FIELD(type, field)  type field
+#else
+#define _Q_TYPE_CAST(type)          (struct type *)
+#define _Q_TYPE_FIELD(type, field)  struct type field
+#endif
+
+/*
+ * Singly-linked List declarations.
+ */
+#define	SLIST_HEAD(name, type)						\
+struct name {								\
+    _Q_TYPE_FIELD(type, *slh_first);	/* first element */			\
+}
+
+#define	SLIST_HEAD_INITIALIZER(head)					\
+	{ NULL }
+
+#define	SLIST_ENTRY(type)						\
+struct {								\
+    _Q_TYPE_FIELD(type, *sle_next);	/* next element */			\
+}
+
+/*
+ * Singly-linked List functions.
+ */
+#define	SLIST_EMPTY(head)	((head)->slh_first == NULL)
+
+#define	SLIST_FIRST(head)	((head)->slh_first)
+
+#define	SLIST_FOREACH(var, head, field)					\
+	for ((var) = SLIST_FIRST((head));				\
+	    (var);							\
+	    (var) = SLIST_NEXT((var), field))
+
+#define	SLIST_FOREACH_SAFE(var, head, field, tvar)			\
+	for ((var) = SLIST_FIRST((head));				\
+	    (var) && ((tvar) = SLIST_NEXT((var), field), 1);		\
+	    (var) = (tvar))
+
+#define	SLIST_FOREACH_PREVPTR(var, varp, head, field)			\
+	for ((varp) = &SLIST_FIRST((head));				\
+	    ((var) = *(varp)) != NULL;					\
+	    (varp) = &SLIST_NEXT((var), field))
+
+#define	SLIST_INIT(head) do {						\
+	SLIST_FIRST((head)) = NULL;					\
+} while (0)
+
+#define	SLIST_INSERT_AFTER(slistelm, elm, field) do {			\
+	SLIST_NEXT((elm), field) = SLIST_NEXT((slistelm), field);	\
+	SLIST_NEXT((slistelm), field) = (elm);				\
+} while (0)
+
+#define	SLIST_INSERT_HEAD(head, elm, field) do {			\
+	SLIST_NEXT((elm), field) = SLIST_FIRST((head));			\
+	SLIST_FIRST((head)) = (elm);					\
+} while (0)
+
+#define	SLIST_NEXT(elm, field)	((elm)->field.sle_next)
+
+#define	SLIST_REMOVE(head, elm, type, field) do {			\
+	if (SLIST_FIRST((head)) == (elm)) {				\
+		SLIST_REMOVE_HEAD((head), field);			\
+	}								\
+	else {								\
+        _Q_TYPE_FIELD(type, *curelm) = SLIST_FIRST((head));		\
+		while (SLIST_NEXT(curelm, field) != (elm))		\
+			curelm = SLIST_NEXT(curelm, field);		\
+		SLIST_REMOVE_AFTER(curelm, field);			\
+	}								\
+	TRASHIT((elm)->field.sle_next);					\
+} while (0)
+
+#define SLIST_REMOVE_AFTER(elm, field) do {				\
+	SLIST_NEXT(elm, field) =					\
+	    SLIST_NEXT(SLIST_NEXT(elm, field), field);			\
+} while (0)
+
+#define	SLIST_REMOVE_HEAD(head, field) do {				\
+	SLIST_FIRST((head)) = SLIST_NEXT(SLIST_FIRST((head)), field);	\
+} while (0)
+
+/*
+ * Singly-linked Tail queue declarations.
+ */
+#define	STAILQ_HEAD(name, type)						\
+struct name {								\
+    _Q_TYPE_FIELD(type, *stqh_first);/* first element */			\
+    _Q_TYPE_FIELD(type, **stqh_last);/* addr of last next element */		\
+}
+
+#define	STAILQ_HEAD_INITIALIZER(head)					\
+	{ NULL, &(head).stqh_first }
+
+#define	STAILQ_ENTRY(type)						\
+struct {								\
+    _Q_TYPE_FIELD(type, *stqe_next);	/* next element */			\
+}
+
+/*
+ * Singly-linked Tail queue functions.
+ */
+#define	STAILQ_CONCAT(head1, head2) do {				\
+	if (!STAILQ_EMPTY((head2))) {					\
+		*(head1)->stqh_last = (head2)->stqh_first;		\
+		(head1)->stqh_last = (head2)->stqh_last;		\
+		STAILQ_INIT((head2));					\
+	}								\
+} while (0)
+
+#define	STAILQ_EMPTY(head)	((head)->stqh_first == NULL)
+
+#define	STAILQ_FIRST(head)	((head)->stqh_first)
+
+#define	STAILQ_FOREACH(var, head, field)				\
+	for((var) = STAILQ_FIRST((head));				\
+	   (var);							\
+	   (var) = STAILQ_NEXT((var), field))
+
+
+#define	STAILQ_FOREACH_SAFE(var, head, field, tvar)			\
+	for ((var) = STAILQ_FIRST((head));				\
+	    (var) && ((tvar) = STAILQ_NEXT((var), field), 1);		\
+	    (var) = (tvar))
+
+#define	STAILQ_INIT(head) do {						\
+	STAILQ_FIRST((head)) = NULL;	                                \
+	(head)->stqh_last = &STAILQ_FIRST((head));			\
+} while (0)
+
+#define	STAILQ_INSERT_AFTER(head, tqelm, elm, field) do {		\
+	if ((STAILQ_NEXT((elm), field) = STAILQ_NEXT((tqelm), field)) == NULL)\
+		(head)->stqh_last = &STAILQ_NEXT((elm), field);		\
+	STAILQ_NEXT((tqelm), field) = (elm);				\
+} while (0)
+
+#define	STAILQ_INSERT_HEAD(head, elm, field) do {			\
+	if ((STAILQ_NEXT((elm), field) = STAILQ_FIRST((head))) == NULL)	\
+		(head)->stqh_last = &STAILQ_NEXT((elm), field);		\
+	STAILQ_FIRST((head)) = (elm);					\
+} while (0)
+
+#define	STAILQ_INSERT_TAIL(head, elm, field) do {			\
+	STAILQ_NEXT((elm), field) = NULL;				\
+	*(head)->stqh_last = (elm);					\
+	(head)->stqh_last = &STAILQ_NEXT((elm), field);			\
+} while (0)
+
+#define	STAILQ_LAST(head, type, field)					\
+	(STAILQ_EMPTY((head)) ?						\
+		_Q_TYPE_CAST(type)NULL :							\
+	        ((type *)(void *)				\
+		((char *)((head)->stqh_last) - offsetof(type, field))))
+
+#define	STAILQ_NEXT(elm, field)	((elm)->field.stqe_next)
+
+#define	STAILQ_REMOVE(head, elm, type, field) do {			\
+	if (STAILQ_FIRST((head)) == (elm)) {				\
+		STAILQ_REMOVE_HEAD((head), field);			\
+	}								\
+	else {								\
+        _Q_TYPE_FIELD(type, *curelm) = STAILQ_FIRST((head));		\
+		while (STAILQ_NEXT(curelm, field) != (elm))		\
+			curelm = STAILQ_NEXT(curelm, field);		\
+		STAILQ_REMOVE_AFTER(head, curelm, field);		\
+	}								\
+	TRASHIT((elm)->field.stqe_next);				\
+} while (0)
+
+#define STAILQ_REMOVE_SAFE(head, elm, type, field) ({                   \
+        _Q_TYPE_FIELD(type, *curelm) = STAILQ_FIRST((head));            \
+        if (curelm == (elm)) {                                          \
+                STAILQ_REMOVE_HEAD((head), field);                      \
+        }                                                               \
+        else {                                                          \
+                while (curelm && STAILQ_NEXT(curelm, field) != (elm))   \
+                        curelm = STAILQ_NEXT(curelm, field);            \
+                if (curelm)                                             \
+                    STAILQ_REMOVE_AFTER(head, curelm, field);           \
+        };                                                              \
+        TRASHIT((elm)->field.stqe_next);                                \
+        curelm;                                                         \
+})
+
+#define	STAILQ_REMOVE_HEAD(head, field) do {				\
+	if ((STAILQ_FIRST((head)) =					\
+	     STAILQ_NEXT(STAILQ_FIRST((head)), field)) == NULL)		\
+		(head)->stqh_last = &STAILQ_FIRST((head));		\
+} while (0)
+
+#define STAILQ_REMOVE_AFTER(head, elm, field) do {			\
+	if ((STAILQ_NEXT(elm, field) =					\
+	     STAILQ_NEXT(STAILQ_NEXT(elm, field), field)) == NULL)	\
+		(head)->stqh_last = &STAILQ_NEXT((elm), field);		\
+} while (0)
+
+#define STAILQ_SWAP(head1, head2, type) do {				\
+    _Q_TYPE_FIELD(type, *swap_first) = STAILQ_FIRST(head1);			\
+    _Q_TYPE_FIELD(type, **swap_last) = (head1)->stqh_last;			\
+	STAILQ_FIRST(head1) = STAILQ_FIRST(head2);			\
+	(head1)->stqh_last = (head2)->stqh_last;			\
+	STAILQ_FIRST(head2) = swap_first;				\
+	(head2)->stqh_last = swap_last;					\
+	if (STAILQ_EMPTY(head1))					\
+		(head1)->stqh_last = &STAILQ_FIRST(head1);		\
+	if (STAILQ_EMPTY(head2))					\
+		(head2)->stqh_last = &STAILQ_FIRST(head2);		\
+} while (0)
+
+
+/*
+ * List declarations.
+ */
+#define	DLIST_HEAD(name, type)						\
+struct name {								\
+    _Q_TYPE_FIELD(type, *lh_first);	/* first element */			\
+}
+
+#define	DLIST_HEAD_INITIALIZER(head)					\
+	{ NULL }
+
+#define	DLIST_ENTRY(type)						\
+struct {								\
+    _Q_TYPE_FIELD(type, *le_next);	/* next element */			\
+    _Q_TYPE_FIELD(type, **le_prev);	/* address of previous next element */	\
+}
+
+/*
+ * List functions.
+ */
+
+#if (defined(_KERNEL) && defined(INVARIANTS))
+#define	QMD_DLIST_CHECK_HEAD(head, field) do {				\
+	if (DLIST_FIRST((head)) != NULL &&				\
+	    DLIST_FIRST((head))->field.le_prev !=			\
+	     &DLIST_FIRST((head)))					\
+		panic("Bad list head %p first->prev != head", (head));	\
+} while (0)
+
+#define	QMD_DLIST_CHECK_NEXT(elm, field) do {				\
+	if (DLIST_NEXT((elm), field) != NULL &&				\
+	    DLIST_NEXT((elm), field)->field.le_prev !=			\
+	     &((elm)->field.le_next))					\
+	     	panic("Bad link elm %p next->prev != elm", (elm));	\
+} while (0)
+
+#define	QMD_DLIST_CHECK_PREV(elm, field) do {				\
+	if (*(elm)->field.le_prev != (elm))				\
+		panic("Bad link elm %p prev->next != elm", (elm));	\
+} while (0)
+#else
+#define	QMD_DLIST_CHECK_HEAD(head, field)
+#define	QMD_DLIST_CHECK_NEXT(elm, field)
+#define	QMD_DLIST_CHECK_PREV(elm, field)
+#endif /* (_KERNEL && INVARIANTS) */
+
+#define	DLIST_EMPTY(head)	((head)->lh_first == NULL)
+
+#define	DLIST_FIRST(head)	((head)->lh_first)
+
+#define	DLIST_FOREACH(var, head, field)					\
+	for ((var) = DLIST_FIRST((head));				\
+	    (var);							\
+	    (var) = DLIST_NEXT((var), field))
+
+#define	DLIST_FOREACH_SAFE(var, head, field, tvar)			\
+	for ((var) = DLIST_FIRST((head));				\
+	    (var) && ((tvar) = DLIST_NEXT((var), field), 1);		\
+	    (var) = (tvar))
+
+#define	DLIST_INIT(head) do {						\
+	DLIST_FIRST((head)) = NULL;					\
+} while (0)
+
+#define	DLIST_INSERT_AFTER(listelm, elm, field) do {			\
+	QMD_DLIST_CHECK_NEXT(listelm, field);				\
+	if ((DLIST_NEXT((elm), field) = DLIST_NEXT((listelm), field)) != NULL)\
+		DLIST_NEXT((listelm), field)->field.le_prev =		\
+		    &DLIST_NEXT((elm), field);				\
+	DLIST_NEXT((listelm), field) = (elm);				\
+	(elm)->field.le_prev = &DLIST_NEXT((listelm), field);		\
+} while (0)
+
+#define	DLIST_INSERT_BEFORE(listelm, elm, field) do {			\
+	QMD_DLIST_CHECK_PREV(listelm, field);				\
+	(elm)->field.le_prev = (listelm)->field.le_prev;		\
+	DLIST_NEXT((elm), field) = (listelm);				\
+	*(listelm)->field.le_prev = (elm);				\
+	(listelm)->field.le_prev = &DLIST_NEXT((elm), field);		\
+} while (0)
+
+#define	DLIST_INSERT_HEAD(head, elm, field) do {				\
+	QMD_DLIST_CHECK_HEAD((head), field);				\
+	if ((DLIST_NEXT((elm), field) = DLIST_FIRST((head))) != NULL)	\
+		DLIST_FIRST((head))->field.le_prev = &DLIST_NEXT((elm), field);\
+	DLIST_FIRST((head)) = (elm);					\
+	(elm)->field.le_prev = &DLIST_FIRST((head));			\
+} while (0)
+
+#define	DLIST_NEXT(elm, field)	((elm)->field.le_next)
+
+#define	DLIST_REMOVE(elm, field) do {				    \
+    if ((elm)->field.le_prev)  {                        \
+        QMD_DLIST_CHECK_NEXT(elm, field);				\
+        QMD_DLIST_CHECK_PREV(elm, field);				\
+        if (DLIST_NEXT((elm), field) != NULL)			\
+		    DLIST_NEXT((elm), field)->field.le_prev = 	\
+		        (elm)->field.le_prev;				    \
+		*(elm)->field.le_prev = DLIST_NEXT((elm), field);		\
+		TRASHIT((elm)->field.le_next);					\
+		TRASHIT((elm)->field.le_prev);					\
+    } \
+} while (0)
+
+#define DLIST_SWAP(head1, head2, type, field) do {			\
+    _Q_TYPE_FIELD(type, *swap_tmp) = DLIST_FIRST((head1));			\
+	DLIST_FIRST((head1)) = DLIST_FIRST((head2));			\
+	DLIST_FIRST((head2)) = swap_tmp;					\
+	if ((swap_tmp = DLIST_FIRST((head1))) != NULL)			\
+		swap_tmp->field.le_prev = &DLIST_FIRST((head1));		\
+	if ((swap_tmp = DLIST_FIRST((head2))) != NULL)			\
+		swap_tmp->field.le_prev = &DLIST_FIRST((head2));		\
+} while (0)
+
+/*
+ * Tail queue declarations.
+ */
+#define	TAILQ_HEAD(name, type)						\
+struct name {								\
+    _Q_TYPE_FIELD(type, *tqh_first);	/* first element */			\
+    _Q_TYPE_FIELD(type, **tqh_last);	/* addr of last next element */		\
+	TRACEBUF							\
+}
+
+#define	TAILQ_HEAD_INITIALIZER(head)					\
+	{ NULL, &(head).tqh_first }
+
+#define	TAILQ_ENTRY(type)						\
+struct {								\
+    _Q_TYPE_FIELD(type, *tqe_next);	    /* next element */			\
+    _Q_TYPE_FIELD(type, **tqe_prev);	/* address of previous next element */	\
+	TRACEBUF							\
+}
+
+/*
+ * Tail queue functions.
+ */
+#if (defined(_KERNEL) && defined(INVARIANTS))
+#define	QMD_TAILQ_CHECK_HEAD(head, field) do {				\
+	if (!TAILQ_EMPTY(head) &&					\
+	    TAILQ_FIRST((head))->field.tqe_prev !=			\
+	     &TAILQ_FIRST((head)))					\
+		panic("Bad tailq head %p first->prev != head", (head));	\
+} while (0)
+
+#define	QMD_TAILQ_CHECK_TAIL(head, field) do {				\
+	if (*(head)->tqh_last != NULL)					\
+	    	panic("Bad tailq NEXT(%p->tqh_last) != NULL", (head)); 	\
+} while (0)
+
+#define	QMD_TAILQ_CHECK_NEXT(elm, field) do {				\
+	if (TAILQ_NEXT((elm), field) != NULL &&				\
+	    TAILQ_NEXT((elm), field)->field.tqe_prev !=			\
+	     &((elm)->field.tqe_next))					\
+		panic("Bad link elm %p next->prev != elm", (elm));	\
+} while (0)
+
+#define	QMD_TAILQ_CHECK_PREV(elm, field) do {				\
+	if (*(elm)->field.tqe_prev != (elm))				\
+		panic("Bad link elm %p prev->next != elm", (elm));	\
+} while (0)
+#else
+#define	QMD_TAILQ_CHECK_HEAD(head, field)
+#define	QMD_TAILQ_CHECK_TAIL(head, headname)
+#define	QMD_TAILQ_CHECK_NEXT(elm, field)
+#define	QMD_TAILQ_CHECK_PREV(elm, field)
+#endif /* (_KERNEL && INVARIANTS) */
+
+#define	TAILQ_CONCAT(head1, head2, field) do {				\
+	if (!TAILQ_EMPTY(head2)) {					\
+		*(head1)->tqh_last = (head2)->tqh_first;		\
+		(head2)->tqh_first->field.tqe_prev = (head1)->tqh_last;	\
+		(head1)->tqh_last = (head2)->tqh_last;			\
+		TAILQ_INIT((head2));					\
+		QMD_TRACE_HEAD(head1);					\
+		QMD_TRACE_HEAD(head2);					\
+	}								\
+} while (0)
+
+#define	TAILQ_EMPTY(head)	((head)->tqh_first == NULL)
+
+#define	TAILQ_FIRST(head)	((head)->tqh_first)
+
+#define	TAILQ_FOREACH(var, head, field)					\
+	for ((var) = TAILQ_FIRST((head));				\
+	    (var);							\
+	    (var) = TAILQ_NEXT((var), field))
+
+#define	TAILQ_FOREACH_SAFE(var, head, field, tvar)			\
+	for ((var) = TAILQ_FIRST((head));				\
+	    (var) && ((tvar) = TAILQ_NEXT((var), field), 1);		\
+	    (var) = (tvar))
+
+#define	TAILQ_FOREACH_REVERSE(var, head, headname, field)		\
+	for ((var) = TAILQ_LAST((head), headname);			\
+	    (var);							\
+	    (var) = TAILQ_PREV((var), headname, field))
+
+#define	TAILQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar)	\
+	for ((var) = TAILQ_LAST((head), headname);			\
+	    (var) && ((tvar) = TAILQ_PREV((var), headname, field), 1);	\
+	    (var) = (tvar))
+
+#define	TAILQ_INIT(head) do {						\
+	TAILQ_FIRST((head)) = NULL;					\
+	(head)->tqh_last = &TAILQ_FIRST((head));			\
+	QMD_TRACE_HEAD(head);						\
+} while (0)
+
+#define	TAILQ_INSERT_AFTER(head, listelm, elm, field) do {		\
+	QMD_TAILQ_CHECK_NEXT(listelm, field);				\
+	if ((TAILQ_NEXT((elm), field) = TAILQ_NEXT((listelm), field)) != NULL)\
+		TAILQ_NEXT((elm), field)->field.tqe_prev = 		\
+		    &TAILQ_NEXT((elm), field);				\
+	else {								\
+		(head)->tqh_last = &TAILQ_NEXT((elm), field);		\
+		QMD_TRACE_HEAD(head);					\
+	}								\
+	TAILQ_NEXT((listelm), field) = (elm);				\
+	(elm)->field.tqe_prev = &TAILQ_NEXT((listelm), field);		\
+	QMD_TRACE_ELEM(&(elm)->field);					\
+	QMD_TRACE_ELEM(&listelm->field);				\
+} while (0)
+
+#define	TAILQ_INSERT_BEFORE(listelm, elm, field) do {			\
+	QMD_TAILQ_CHECK_PREV(listelm, field);				\
+	(elm)->field.tqe_prev = (listelm)->field.tqe_prev;		\
+	TAILQ_NEXT((elm), field) = (listelm);				\
+	*(listelm)->field.tqe_prev = (elm);				\
+	(listelm)->field.tqe_prev = &TAILQ_NEXT((elm), field);		\
+	QMD_TRACE_ELEM(&(elm)->field);					\
+	QMD_TRACE_ELEM(&listelm->field);				\
+} while (0)
+
+#define	TAILQ_INSERT_HEAD(head, elm, field) do {			\
+	QMD_TAILQ_CHECK_HEAD(head, field);				\
+	if ((TAILQ_NEXT((elm), field) = TAILQ_FIRST((head))) != NULL)	\
+		TAILQ_FIRST((head))->field.tqe_prev =			\
+		    &TAILQ_NEXT((elm), field);				\
+	else								\
+		(head)->tqh_last = &TAILQ_NEXT((elm), field);		\
+	TAILQ_FIRST((head)) = (elm);					\
+	(elm)->field.tqe_prev = &TAILQ_FIRST((head));			\
+	QMD_TRACE_HEAD(head);						\
+	QMD_TRACE_ELEM(&(elm)->field);					\
+} while (0)
+
+#define	TAILQ_INSERT_TAIL(head, elm, field) do {			\
+	QMD_TAILQ_CHECK_TAIL(head, field);				\
+	TAILQ_NEXT((elm), field) = NULL;				\
+	(elm)->field.tqe_prev = (head)->tqh_last;			\
+	*(head)->tqh_last = (elm);					\
+	(head)->tqh_last = &TAILQ_NEXT((elm), field);			\
+	QMD_TRACE_HEAD(head);						\
+	QMD_TRACE_ELEM(&(elm)->field);					\
+} while (0)
+
+#define	TAILQ_LAST(head, headname)					\
+	(*(((struct headname *)((head)->tqh_last))->tqh_last))
+
+#define	TAILQ_NEXT(elm, field) ((elm)->field.tqe_next)
+
+#define	TAILQ_PREV(elm, headname, field)				\
+	(*(((struct headname *)((elm)->field.tqe_prev))->tqh_last))
+
+#define	TAILQ_REMOVE(head, elm, field) do {				\
+	QMD_TAILQ_CHECK_NEXT(elm, field);				\
+	QMD_TAILQ_CHECK_PREV(elm, field);				\
+	if ((TAILQ_NEXT((elm), field)) != NULL)				\
+		TAILQ_NEXT((elm), field)->field.tqe_prev = 		\
+		    (elm)->field.tqe_prev;				\
+	else {								\
+		(head)->tqh_last = (elm)->field.tqe_prev;		\
+		QMD_TRACE_HEAD(head);					\
+	}								\
+	*(elm)->field.tqe_prev = TAILQ_NEXT((elm), field);		\
+	TRASHIT((elm)->field.tqe_next);					\
+	TRASHIT((elm)->field.tqe_prev);					\
+	QMD_TRACE_ELEM(&(elm)->field);					\
+} while (0)
+
+#define TAILQ_SWAP(head1, head2, type, field) do {			\
+    _Q_TYPE_FIELD(type, *swap_first) = (head1)->tqh_first;			\
+    _Q_TYPE_FIELD(type, **swap_last) = (head1)->tqh_last;			\
+	(head1)->tqh_first = (head2)->tqh_first;			\
+	(head1)->tqh_last = (head2)->tqh_last;				\
+	(head2)->tqh_first = swap_first;				\
+	(head2)->tqh_last = swap_last;					\
+	if ((swap_first = (head1)->tqh_first) != NULL)			\
+		swap_first->field.tqe_prev = &(head1)->tqh_first;	\
+	else								\
+		(head1)->tqh_last = &(head1)->tqh_first;		\
+	if ((swap_first = (head2)->tqh_first) != NULL)			\
+		swap_first->field.tqe_prev = &(head2)->tqh_first;	\
+	else								\
+		(head2)->tqh_last = &(head2)->tqh_first;		\
+} while (0)
+
+#endif /* !_SYS_QUEUE_H_ */
diff --git a/bcm68620_release/release/host_customized/os_abstraction/bcmos_rw_lock.c b/bcm68620_release/release/host_customized/os_abstraction/bcmos_rw_lock.c
new file mode 100644
index 0000000..27eb5e0
--- /dev/null
+++ b/bcm68620_release/release/host_customized/os_abstraction/bcmos_rw_lock.c
@@ -0,0 +1,124 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+#include "bcmos_rw_lock.h"
+
+struct bcmos_rw_lock
+{
+    /* the actual lock, held by the writer, used by the reader to safely obtain a read lock, but not held to allow
+     * multiple readers */
+    bcmos_mutex lock;
+    /* used by the writer to prevent new readers from obtaining read locks while a writer is waiting */
+    bcmos_mutex read_lock;
+    /* used by readers to signal waiting writers that they have finished reading */
+    bcmos_sem write_lock;
+    /* current number of readers */
+    uint32_t readers;
+};
+
+bcmos_errno bcmos_rw_lock_create(bcmos_rw_lock **lock)
+{
+    bcmos_errno err;
+    *lock = (bcmos_rw_lock*)bcmos_calloc(sizeof(bcmos_rw_lock));
+    if (*lock == NULL)
+    {
+        BUG();
+        return BCM_ERR_NOMEM;
+    }
+    if (BCM_ERR_OK != (err = bcmos_mutex_create(&(*lock)->lock, 0, "bcmos_rw_lock_create_lock")))
+    {
+        BUG();
+        return err;
+    }
+    if (BCM_ERR_OK != (err = bcmos_mutex_create(&(*lock)->read_lock, 0, "bcmos_rw_lock_create_rw_lock")))
+    {
+        BUG();
+        return err;
+    }
+    (*lock)->readers = 0;
+    if (BCM_ERR_OK != (err = bcmos_sem_create(&(*lock)->write_lock, 1, 0, "bcmos_rw_lock_create_write_lock")))
+    {
+        BUG();
+        return err;
+    }
+    return err;
+}
+
+/*lint -e{455} suppress "thread mutex has not been locked" */
+void bcmos_rw_write_lock(bcmos_rw_lock* lock)
+{
+    /* prevent any new readers from trying to obtain a read lock */
+    bcmos_mutex_lock(&lock->read_lock);
+    /* lock the actual lock */
+    bcmos_mutex_lock(&lock->lock);
+    while (lock->readers != 0)
+    {
+        /* there are still readers holding read locks, release the lock */
+        bcmos_mutex_unlock(&lock->lock);
+        /* wait for the signal from the last reader before trying again */
+        bcmos_sem_wait(&lock->write_lock, BCMOS_WAIT_FOREVER);
+        /* lock the actual lock and check for readers again */
+        bcmos_mutex_lock(&lock->lock);
+    }
+    /* no more readers, allow new readers to wait on the lock */
+    bcmos_mutex_unlock(&lock->read_lock);
+}
+/*lint +e{454} suppress "thread mutex has not been locked" */
+
+void bcmos_rw_write_release(bcmos_rw_lock* lock)
+{
+    /*lint --e{455} suppress "thread mutex has not been locked" */
+    bcmos_mutex_unlock(&lock->lock);
+}
+
+void bcmos_rw_read_lock(bcmos_rw_lock* lock)
+{
+    /* wait for anyone trying to get a write lock */
+    bcmos_mutex_lock(&lock->read_lock);
+    /* wait for the lock to be released */
+    bcmos_mutex_lock(&lock->lock);
+    lock->readers++;
+    /* reset the signal to the writers */
+    bcmos_sem_wait(&lock->write_lock, BCMOS_NO_WAIT);
+    /* all done, release everything so other readers can get a read lock */
+    bcmos_mutex_unlock(&lock->lock);
+    bcmos_mutex_unlock(&lock->read_lock);
+}
+
+void bcmos_rw_read_release(bcmos_rw_lock* lock)
+{
+    /* get a lock to prevent interruptions */
+    bcmos_mutex_lock(&lock->lock);
+    if (--lock->readers == 0)
+    {
+        /* if we're the last reader, signal that the lock is available for a writer */
+        bcmos_sem_post(&lock->write_lock);
+    }
+    bcmos_mutex_unlock(&lock->lock);
+}
+
diff --git a/bcm68620_release/release/host_customized/os_abstraction/bcmos_rw_lock.h b/bcm68620_release/release/host_customized/os_abstraction/bcmos_rw_lock.h
new file mode 100644
index 0000000..b12d533
--- /dev/null
+++ b/bcm68620_release/release/host_customized/os_abstraction/bcmos_rw_lock.h
@@ -0,0 +1,66 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+/** A write-biased readers-writer lock
+ *  NOTE: DO NOT attempt to obtain a write lock on a thread that is already holding a read lock or vice versa - this
+ *  will result in a deadlock. Multiple read locks from the same thread are safe, multiple write locks are NOT.
+ */
+#ifndef BCMOS_RW_LOCK_H_
+#define BCMOS_RW_LOCK_H_
+#include "bcmos_system.h"
+
+typedef struct bcmos_rw_lock bcmos_rw_lock;
+
+/** Initialize a lock
+ *  \param[out] lock    the newly created lock
+ *  \return error code
+ */
+bcmos_errno bcmos_rw_lock_create(bcmos_rw_lock **lock);
+
+/** Obtain a write lock
+ *  \param[in] lock     the lock to operate on
+ */
+void bcmos_rw_write_lock(bcmos_rw_lock* lock);
+
+/** Release a write lock
+ *  \param[in] lock     the lock to operate on
+ */
+void bcmos_rw_write_release(bcmos_rw_lock* lock);
+
+/** Obtain a read lock
+ *  \param[in] lock     the lock to operate on
+ */
+void bcmos_rw_read_lock(bcmos_rw_lock* lock);
+
+/** Release a read lock
+ *  \param[in] lock     the lock to operate on
+ */
+void bcmos_rw_read_release(bcmos_rw_lock* lock);
+
+#endif
diff --git a/bcm68620_release/release/host_customized/os_abstraction/bcmos_sysif.h b/bcm68620_release/release/host_customized/os_abstraction/bcmos_sysif.h
new file mode 100644
index 0000000..43df6dc
--- /dev/null
+++ b/bcm68620_release/release/host_customized/os_abstraction/bcmos_sysif.h
@@ -0,0 +1,93 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+/*
+ * bcmos_sysif.h
+ *
+ * This internal header file includes OS-specific services
+ * that are referred in OS-independent OS abstraction implementation
+ *
+ */
+
+#ifndef BCMOS_SYSIF_H_
+#define BCMOS_SYSIF_H_
+
+/*
+ * OS-specific init
+ */
+
+/** Initialize system library
+ * Must be called before any other system function
+ * \returns 0=OK or error code <0
+ */
+bcmos_errno bcmos_sys_init(void);
+
+/** Clean-up system library
+ */
+void bcmos_sys_exit(void);
+
+
+/*
+ * Timer support
+ */
+
+/* OS abstraction must define struct bcmos_sys_timer
+ */
+typedef struct bcmos_sys_timer bcmos_sys_timer;
+
+/* System timer handler. Implemented in common OS abstraction services */
+typedef void (*bcmos_sys_timer_handler)(void *data);
+
+/* Create system timer
+ * It is expected that only one high-resolution system timer is needed.
+ * It is used to "kick" timer pool implemented in OS abstraction
+ * \param[in]   timer   System timer
+ * \param[in]   handler Timer handler
+ * \param[in]   data    Data to be passed to the handler
+ * \returns 0 if OK or error < 0
+ */
+bcmos_errno bcmos_sys_timer_create(bcmos_sys_timer *timer, bcmos_sys_timer_handler handler, void *data);
+
+/* Destroy system timer
+ * \param[in]   timer   System timer
+ */
+void bcmos_sys_timer_destroy(bcmos_sys_timer *timer);
+
+/* Start system timer
+ * \param[in]   timer           System timer
+ * \param[in]   interval        Interval (us)
+ */
+void bcmos_sys_timer_start(bcmos_sys_timer *timer, uint32_t interval);
+
+/* Stop system timer
+ * \param[in]   timer           System timer
+ */
+void bcmos_sys_timer_stop(bcmos_sys_timer *timer);
+
+#endif /* BCMOS_SYSIF_H_ */
diff --git a/bcm68620_release/release/host_customized/os_abstraction/bcmos_tree.h b/bcm68620_release/release/host_customized/os_abstraction/bcmos_tree.h
new file mode 100755
index 0000000..82d9164
--- /dev/null
+++ b/bcm68620_release/release/host_customized/os_abstraction/bcmos_tree.h
@@ -0,0 +1,765 @@
+/*	$NetBSD: tree.h,v 1.8 2004/03/28 19:38:30 provos Exp $	*/
+/*	$OpenBSD: tree.h,v 1.7 2002/10/17 21:51:54 art Exp $	*/
+/* $FreeBSD$ */
+
+/*-
+ * Copyright 2002 Niels Provos <provos@citi.umich.edu>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef	_BCMOS_TREE_H_
+#define	_BCMOS_TREE_H_
+
+/*
+ * This file defines data structures for different types of trees:
+ * splay trees and red-black trees.
+ *
+ * A splay tree is a self-organizing data structure.  Every operation
+ * on the tree causes a splay to happen.  The splay moves the requested
+ * node to the root of the tree and partly rebalances it.
+ *
+ * This has the benefit that request locality causes faster lookups as
+ * the requested nodes move to the top of the tree.  On the other hand,
+ * every lookup causes memory writes.
+ *
+ * The Balance Theorem bounds the total access time for m operations
+ * and n inserts on an initially empty tree as O((m + n)lg n).  The
+ * amortized cost for a sequence of m accesses to a splay tree is O(lg n);
+ *
+ * A red-black tree is a binary search tree with the node color as an
+ * extra attribute.  It fulfills a set of conditions:
+ *	- every search path from the root to a leaf consists of the
+ *	  same number of black nodes,
+ *	- each red node (except for the root) has a black parent,
+ *	- each leaf node is black.
+ *
+ * Every operation on a red-black tree is bounded as O(lg n).
+ * The maximum height of a red-black tree is 2lg (n+1).
+ */
+
+#define SPLAY_HEAD(name, type)						\
+struct name {								\
+	type *sph_root; /* root of the tree */			        \
+}
+
+#define SPLAY_INITIALIZER(root)						\
+	{ NULL }
+
+#define SPLAY_INIT(root) do {						\
+	(root)->sph_root = NULL;					\
+} while (/*CONSTCOND*/ 0)
+
+#define SPLAY_ENTRY(type)						\
+struct {								\
+	type *spe_left; /* left element */			        \
+	type *spe_right; /* right element */			        \
+}
+
+#define SPLAY_LEFT(elm, field)		(elm)->field.spe_left
+#define SPLAY_RIGHT(elm, field)		(elm)->field.spe_right
+#define SPLAY_ROOT(head)		(head)->sph_root
+#define SPLAY_EMPTY(head)		(SPLAY_ROOT(head) == NULL)
+
+/* SPLAY_ROTATE_{LEFT,RIGHT} expect that tmp hold SPLAY_{RIGHT,LEFT} */
+#define SPLAY_ROTATE_RIGHT(head, tmp, field) do {			\
+	SPLAY_LEFT((head)->sph_root, field) = SPLAY_RIGHT(tmp, field);	\
+	SPLAY_RIGHT(tmp, field) = (head)->sph_root;			\
+	(head)->sph_root = tmp;						\
+} while (/*CONSTCOND*/ 0)
+	
+#define SPLAY_ROTATE_LEFT(head, tmp, field) do {			\
+	SPLAY_RIGHT((head)->sph_root, field) = SPLAY_LEFT(tmp, field);	\
+	SPLAY_LEFT(tmp, field) = (head)->sph_root;			\
+	(head)->sph_root = tmp;						\
+} while (/*CONSTCOND*/ 0)
+
+#define SPLAY_LINKLEFT(head, tmp, field) do {				\
+	SPLAY_LEFT(tmp, field) = (head)->sph_root;			\
+	tmp = (head)->sph_root;						\
+	(head)->sph_root = SPLAY_LEFT((head)->sph_root, field);		\
+} while (/*CONSTCOND*/ 0)
+
+#define SPLAY_LINKRIGHT(head, tmp, field) do {				\
+	SPLAY_RIGHT(tmp, field) = (head)->sph_root;			\
+	tmp = (head)->sph_root;						\
+	(head)->sph_root = SPLAY_RIGHT((head)->sph_root, field);	\
+} while (/*CONSTCOND*/ 0)
+
+#define SPLAY_ASSEMBLE(head, node, left, right, field) do {		\
+	SPLAY_RIGHT(left, field) = SPLAY_LEFT((head)->sph_root, field);	\
+	SPLAY_LEFT(right, field) = SPLAY_RIGHT((head)->sph_root, field);\
+	SPLAY_LEFT((head)->sph_root, field) = SPLAY_RIGHT(node, field);	\
+	SPLAY_RIGHT((head)->sph_root, field) = SPLAY_LEFT(node, field);	\
+} while (/*CONSTCOND*/ 0)
+
+/* Generates prototypes and inline functions */
+
+#define SPLAY_PROTOTYPE(name, type, field, cmp)				\
+void name##_SPLAY(struct name *, type *);			        \
+void name##_SPLAY_MINMAX(struct name *, int);				\
+type *name##_SPLAY_INSERT(struct name *, type *);		        \
+type *name##_SPLAY_REMOVE(struct name *, type *);		        \
+									\
+/* Finds the node with the same key as elm */				\
+static __inline type *						        \
+name##_SPLAY_FIND(struct name *head, type *elm)			        \
+{									\
+	if (SPLAY_EMPTY(head))						\
+		return(NULL);						\
+	name##_SPLAY(head, elm);					\
+	if ((cmp)(elm, (head)->sph_root) == 0)				\
+		return (head->sph_root);				\
+	return (NULL);							\
+}									\
+									\
+static __inline type *						        \
+name##_SPLAY_NEXT(struct name *head, type *elm)			        \
+{									\
+	name##_SPLAY(head, elm);					\
+	if (SPLAY_RIGHT(elm, field) != NULL) {				\
+		elm = SPLAY_RIGHT(elm, field);				\
+		while (SPLAY_LEFT(elm, field) != NULL) {		\
+			elm = SPLAY_LEFT(elm, field);			\
+		}							\
+	} else								\
+		elm = NULL;						\
+	return (elm);							\
+}									\
+									\
+static __inline type *						        \
+name##_SPLAY_MIN_MAX(struct name *head, int val)			\
+{									\
+	name##_SPLAY_MINMAX(head, val);					\
+        return (SPLAY_ROOT(head));					\
+}
+
+/* Main splay operation.
+ * Moves node close to the key of elm to top
+ */
+#define SPLAY_GENERATE(name, type, field, cmp)				\
+type *								        \
+name##_SPLAY_INSERT(struct name *head, type *elm)		        \
+{									\
+    if (SPLAY_EMPTY(head)) {						\
+	    SPLAY_LEFT(elm, field) = SPLAY_RIGHT(elm, field) = NULL;	\
+    } else {								\
+	    int __comp;							\
+	    name##_SPLAY(head, elm);					\
+	    __comp = (cmp)(elm, (head)->sph_root);			\
+	    if(__comp < 0) {						\
+		    SPLAY_LEFT(elm, field) = SPLAY_LEFT((head)->sph_root, field);\
+		    SPLAY_RIGHT(elm, field) = (head)->sph_root;		\
+		    SPLAY_LEFT((head)->sph_root, field) = NULL;		\
+	    } else if (__comp > 0) {					\
+		    SPLAY_RIGHT(elm, field) = SPLAY_RIGHT((head)->sph_root, field);\
+		    SPLAY_LEFT(elm, field) = (head)->sph_root;		\
+		    SPLAY_RIGHT((head)->sph_root, field) = NULL;	\
+	    } else							\
+		    return ((head)->sph_root);				\
+    }									\
+    (head)->sph_root = (elm);						\
+    return (NULL);							\
+}									\
+									\
+type *								        \
+name##_SPLAY_REMOVE(struct name *head, type *elm)		        \
+{									\
+	type *__tmp;						        \
+	if (SPLAY_EMPTY(head))						\
+		return (NULL);						\
+	name##_SPLAY(head, elm);					\
+	if ((cmp)(elm, (head)->sph_root) == 0) {			\
+		if (SPLAY_LEFT((head)->sph_root, field) == NULL) {	\
+			(head)->sph_root = SPLAY_RIGHT((head)->sph_root, field);\
+		} else {						\
+			__tmp = SPLAY_RIGHT((head)->sph_root, field);	\
+			(head)->sph_root = SPLAY_LEFT((head)->sph_root, field);\
+			name##_SPLAY(head, elm);			\
+			SPLAY_RIGHT((head)->sph_root, field) = __tmp;	\
+		}							\
+		return (elm);						\
+	}								\
+	return (NULL);							\
+}									\
+									\
+void									\
+name##_SPLAY(struct name *head, type *elm)			        \
+{									\
+	type __node, *__left, *__right, *__tmp;			        \
+	int __comp;							\
+\
+	SPLAY_LEFT(&__node, field) = SPLAY_RIGHT(&__node, field) = NULL;\
+	__left = __right = &__node;					\
+\
+	while ((__comp = (cmp)(elm, (head)->sph_root)) != 0) {		\
+		if (__comp < 0) {					\
+			__tmp = SPLAY_LEFT((head)->sph_root, field);	\
+			if (__tmp == NULL)				\
+				break;					\
+			if ((cmp)(elm, __tmp) < 0){			\
+				SPLAY_ROTATE_RIGHT(head, __tmp, field);	\
+				if (SPLAY_LEFT((head)->sph_root, field) == NULL)\
+					break;				\
+			}						\
+			SPLAY_LINKLEFT(head, __right, field);		\
+		} else if (__comp > 0) {				\
+			__tmp = SPLAY_RIGHT((head)->sph_root, field);	\
+			if (__tmp == NULL)				\
+				break;					\
+			if ((cmp)(elm, __tmp) > 0){			\
+				SPLAY_ROTATE_LEFT(head, __tmp, field);	\
+				if (SPLAY_RIGHT((head)->sph_root, field) == NULL)\
+					break;				\
+			}						\
+			SPLAY_LINKRIGHT(head, __left, field);		\
+		}							\
+	}								\
+	SPLAY_ASSEMBLE(head, &__node, __left, __right, field);		\
+}									\
+									\
+/* Splay with either the minimum or the maximum element			\
+ * Used to find minimum or maximum element in tree.			\
+ */									\
+void name##_SPLAY_MINMAX(struct name *head, int __comp)                 \
+{									\
+	type __node, *__left, *__right, *__tmp;			        \
+\
+	SPLAY_LEFT(&__node, field) = SPLAY_RIGHT(&__node, field) = NULL;\
+	__left = __right = &__node;					\
+\
+	while (1) {							\
+		if (__comp < 0) {					\
+			__tmp = SPLAY_LEFT((head)->sph_root, field);	\
+			if (__tmp == NULL)				\
+				break;					\
+			if (__comp < 0){				\
+				SPLAY_ROTATE_RIGHT(head, __tmp, field);	\
+				if (SPLAY_LEFT((head)->sph_root, field) == NULL)\
+					break;				\
+			}						\
+			SPLAY_LINKLEFT(head, __right, field);		\
+		} else if (__comp > 0) {				\
+			__tmp = SPLAY_RIGHT((head)->sph_root, field);	\
+			if (__tmp == NULL)				\
+				break;					\
+			if (__comp > 0) {				\
+				SPLAY_ROTATE_LEFT(head, __tmp, field);	\
+				if (SPLAY_RIGHT((head)->sph_root, field) == NULL)\
+					break;				\
+			}						\
+			SPLAY_LINKRIGHT(head, __left, field);		\
+		}							\
+	}								\
+	SPLAY_ASSEMBLE(head, &__node, __left, __right, field);		\
+}
+
+#define SPLAY_NEGINF	-1
+#define SPLAY_INF	1
+
+#define SPLAY_INSERT(name, x, y)	name##_SPLAY_INSERT(x, y)
+#define SPLAY_REMOVE(name, x, y)	name##_SPLAY_REMOVE(x, y)
+#define SPLAY_FIND(name, x, y)		name##_SPLAY_FIND(x, y)
+#define SPLAY_NEXT(name, x, y)		name##_SPLAY_NEXT(x, y)
+#define SPLAY_MIN(name, x)		(SPLAY_EMPTY(x) ? NULL	\
+					: name##_SPLAY_MIN_MAX(x, SPLAY_NEGINF))
+#define SPLAY_MAX(name, x)		(SPLAY_EMPTY(x) ? NULL	\
+					: name##_SPLAY_MIN_MAX(x, SPLAY_INF))
+
+#define SPLAY_FOREACH(x, name, head)					\
+	for ((x) = SPLAY_MIN(name, head);				\
+	     (x) != NULL;						\
+	     (x) = SPLAY_NEXT(name, head, x))
+
+/* Macros that define a red-black tree */
+#define RB_HEAD(name, type)						\
+struct name {								\
+	type *rbh_root; /* root of the tree */			        \
+}
+
+#define RB_INITIALIZER(root)						\
+	{ NULL }
+
+#define RB_INIT(root) do {						\
+	(root)->rbh_root = NULL;					\
+} while (/*CONSTCOND*/ 0)
+
+#define RB_BLACK	0
+#define RB_RED		1
+#define RB_ENTRY(type)							\
+struct {								\
+	type *rbe_left;		/* left element */		        \
+	type *rbe_right;		/* right element */		\
+	type *rbe_parent;	/* parent element */		        \
+	int rbe_color;			/* node color */		\
+}
+
+#define RB_LEFT(elm, field)		(elm)->field.rbe_left
+#define RB_RIGHT(elm, field)		(elm)->field.rbe_right
+#define RB_PARENT(elm, field)		(elm)->field.rbe_parent
+#define RB_COLOR(elm, field)		(elm)->field.rbe_color
+#define RB_ROOT_NODE(head)		(head)->rbh_root
+#define RB_EMPTY(head)			(RB_ROOT_NODE(head) == NULL)
+
+#define RB_SET(elm, parent, field) do {					\
+	RB_PARENT(elm, field) = parent;					\
+	RB_LEFT(elm, field) = RB_RIGHT(elm, field) = NULL;		\
+	RB_COLOR(elm, field) = RB_RED;					\
+} while (/*CONSTCOND*/ 0)
+
+#define RB_SET_BLACKRED(black, red, field) do {				\
+	RB_COLOR(black, field) = RB_BLACK;				\
+	RB_COLOR(red, field) = RB_RED;					\
+} while (/*CONSTCOND*/ 0)
+
+#ifndef RB_AUGMENT
+#define RB_AUGMENT(x)	do {} while (0)
+#endif
+
+#define RB_ROTATE_LEFT(head, elm, tmp, field) do {			\
+	(tmp) = RB_RIGHT(elm, field);					\
+	if ((RB_RIGHT(elm, field) = RB_LEFT(tmp, field)) != NULL) {	\
+		RB_PARENT(RB_LEFT(tmp, field), field) = (elm);		\
+	}								\
+	RB_AUGMENT(elm);						\
+	if ((RB_PARENT(tmp, field) = RB_PARENT(elm, field)) != NULL) {	\
+		if ((elm) == RB_LEFT(RB_PARENT(elm, field), field))	\
+			RB_LEFT(RB_PARENT(elm, field), field) = (tmp);	\
+		else							\
+			RB_RIGHT(RB_PARENT(elm, field), field) = (tmp);	\
+	} else								\
+		(head)->rbh_root = (tmp);				\
+	RB_LEFT(tmp, field) = (elm);					\
+	RB_PARENT(elm, field) = (tmp);					\
+	RB_AUGMENT(tmp);						\
+	if ((RB_PARENT(tmp, field)))					\
+		RB_AUGMENT(RB_PARENT(tmp, field));			\
+} while (/*CONSTCOND*/ 0)
+
+#define RB_ROTATE_RIGHT(head, elm, tmp, field) do {			\
+	(tmp) = RB_LEFT(elm, field);					\
+	if ((RB_LEFT(elm, field) = RB_RIGHT(tmp, field)) != NULL) {	\
+		RB_PARENT(RB_RIGHT(tmp, field), field) = (elm);		\
+	}								\
+	RB_AUGMENT(elm);						\
+	if ((RB_PARENT(tmp, field) = RB_PARENT(elm, field)) != NULL) {	\
+		if ((elm) == RB_LEFT(RB_PARENT(elm, field), field))	\
+			RB_LEFT(RB_PARENT(elm, field), field) = (tmp);	\
+		else							\
+			RB_RIGHT(RB_PARENT(elm, field), field) = (tmp);	\
+	} else								\
+		(head)->rbh_root = (tmp);				\
+	RB_RIGHT(tmp, field) = (elm);					\
+	RB_PARENT(elm, field) = (tmp);					\
+	RB_AUGMENT(tmp);						\
+	if ((RB_PARENT(tmp, field)))					\
+		RB_AUGMENT(RB_PARENT(tmp, field));			\
+} while (/*CONSTCOND*/ 0)
+
+/* Generates prototypes and inline functions */
+#define	RB_PROTOTYPE(name, type, field, cmp)				\
+	RB_PROTOTYPE_INTERNAL(name, type, field, cmp,)
+#define	RB_PROTOTYPE_STATIC(name, type, field, cmp)			\
+	RB_PROTOTYPE_INTERNAL(name, type, field, cmp, __unused static)
+#define RB_PROTOTYPE_INTERNAL(name, type, field, cmp, attr)		\
+attr void name##_RB_INSERT_COLOR(struct name *, type *);		\
+attr void name##_RB_REMOVE_COLOR(struct name *, type *, type *);        \
+attr type *name##_RB_REMOVE(struct name *, type *);	                \
+attr type *name##_RB_INSERT(struct name *, type *);	                \
+attr type *name##_RB_FIND(struct name *, type *);		        \
+attr type *name##_RB_NFIND(struct name *, type *);	                \
+attr type *name##_RB_NEXT(type *);			                \
+attr type *name##_RB_PREV(type *);			                \
+attr type *name##_RB_MINMAX(struct name *, int);			\
+									\
+
+/* Main rb operation.
+ * Moves node close to the key of elm to top
+ */
+#define	RB_GENERATE(name, type, field, cmp)				\
+	RB_GENERATE_INTERNAL(name, type, field, cmp,)
+#define	RB_GENERATE_STATIC(name, type, field, cmp)			\
+	RB_GENERATE_INTERNAL(name, type, field, cmp, __unused static)
+#define RB_GENERATE_INLINE(name, type, field, cmp)                      \
+        RB_GENERATE_INTERNAL(name, type, field, cmp, static inline)
+#define RB_GENERATE_INTERNAL(name, type, field, cmp, attr)		\
+attr void								\
+name##_RB_INSERT_COLOR(struct name *head, type *elm)		        \
+{									\
+	type *parent, *gparent, *tmp;				        \
+	while ((parent = RB_PARENT(elm, field)) != NULL &&		\
+	    RB_COLOR(parent, field) == RB_RED) {			\
+		gparent = RB_PARENT(parent, field);			\
+		if (parent == RB_LEFT(gparent, field)) {		\
+			tmp = RB_RIGHT(gparent, field);			\
+			if (tmp && RB_COLOR(tmp, field) == RB_RED) {	\
+				RB_COLOR(tmp, field) = RB_BLACK;	\
+				RB_SET_BLACKRED(parent, gparent, field);\
+				elm = gparent;				\
+				continue;				\
+			}						\
+			if (RB_RIGHT(parent, field) == elm) {		\
+				RB_ROTATE_LEFT(head, parent, tmp, field);\
+				tmp = parent;				\
+				parent = elm;				\
+				elm = tmp;				\
+			}						\
+			RB_SET_BLACKRED(parent, gparent, field);	\
+			RB_ROTATE_RIGHT(head, gparent, tmp, field);	\
+		} else {						\
+			tmp = RB_LEFT(gparent, field);			\
+			if (tmp && RB_COLOR(tmp, field) == RB_RED) {	\
+				RB_COLOR(tmp, field) = RB_BLACK;	\
+				RB_SET_BLACKRED(parent, gparent, field);\
+				elm = gparent;				\
+				continue;				\
+			}						\
+			if (RB_LEFT(parent, field) == elm) {		\
+				RB_ROTATE_RIGHT(head, parent, tmp, field);\
+				tmp = parent;				\
+				parent = elm;				\
+				elm = tmp;				\
+			}						\
+			RB_SET_BLACKRED(parent, gparent, field);	\
+			RB_ROTATE_LEFT(head, gparent, tmp, field);	\
+		}							\
+	}								\
+	RB_COLOR(head->rbh_root, field) = RB_BLACK;			\
+}									\
+									\
+attr void								\
+name##_RB_REMOVE_COLOR(struct name *head, type *parent, type *elm)      \
+{									\
+	type *tmp;						        \
+	while ((elm == NULL || RB_COLOR(elm, field) == RB_BLACK) &&	\
+	    elm != RB_ROOT_NODE(head)) {				\
+		if (RB_LEFT(parent, field) == elm) {			\
+			tmp = RB_RIGHT(parent, field);			\
+			if (RB_COLOR(tmp, field) == RB_RED) {		\
+				RB_SET_BLACKRED(tmp, parent, field);	\
+				RB_ROTATE_LEFT(head, parent, tmp, field);\
+				tmp = RB_RIGHT(parent, field);		\
+			}						\
+			if ((RB_LEFT(tmp, field) == NULL ||		\
+			    RB_COLOR(RB_LEFT(tmp, field), field) == RB_BLACK) &&\
+			    (RB_RIGHT(tmp, field) == NULL ||		\
+			    RB_COLOR(RB_RIGHT(tmp, field), field) == RB_BLACK)) {\
+				RB_COLOR(tmp, field) = RB_RED;		\
+				elm = parent;				\
+				parent = RB_PARENT(elm, field);		\
+			} else {					\
+				if (RB_RIGHT(tmp, field) == NULL ||	\
+				    RB_COLOR(RB_RIGHT(tmp, field), field) == RB_BLACK) {\
+					type *oleft;		\
+					if ((oleft = RB_LEFT(tmp, field)) \
+					    != NULL)			\
+						RB_COLOR(oleft, field) = RB_BLACK;\
+					RB_COLOR(tmp, field) = RB_RED;	\
+					RB_ROTATE_RIGHT(head, tmp, oleft, field);\
+					tmp = RB_RIGHT(parent, field);	\
+				}					\
+				RB_COLOR(tmp, field) = RB_COLOR(parent, field);\
+				RB_COLOR(parent, field) = RB_BLACK;	\
+				if (RB_RIGHT(tmp, field))		\
+					RB_COLOR(RB_RIGHT(tmp, field), field) = RB_BLACK;\
+				RB_ROTATE_LEFT(head, parent, tmp, field);\
+				elm = RB_ROOT_NODE(head);		\
+				break;					\
+			}						\
+		} else {						\
+			tmp = RB_LEFT(parent, field);			\
+			if (RB_COLOR(tmp, field) == RB_RED) {		\
+				RB_SET_BLACKRED(tmp, parent, field);	\
+				RB_ROTATE_RIGHT(head, parent, tmp, field);\
+				tmp = RB_LEFT(parent, field);		\
+			}						\
+			if ((RB_LEFT(tmp, field) == NULL ||		\
+			    RB_COLOR(RB_LEFT(tmp, field), field) == RB_BLACK) &&\
+			    (RB_RIGHT(tmp, field) == NULL ||		\
+			    RB_COLOR(RB_RIGHT(tmp, field), field) == RB_BLACK)) {\
+				RB_COLOR(tmp, field) = RB_RED;		\
+				elm = parent;				\
+				parent = RB_PARENT(elm, field);		\
+			} else {					\
+				if (RB_LEFT(tmp, field) == NULL ||	\
+				    RB_COLOR(RB_LEFT(tmp, field), field) == RB_BLACK) {\
+					type *oright;		\
+					if ((oright = RB_RIGHT(tmp, field)) \
+					    != NULL)			\
+						RB_COLOR(oright, field) = RB_BLACK;\
+					RB_COLOR(tmp, field) = RB_RED;	\
+					RB_ROTATE_LEFT(head, tmp, oright, field);\
+					tmp = RB_LEFT(parent, field);	\
+				}					\
+				RB_COLOR(tmp, field) = RB_COLOR(parent, field);\
+				RB_COLOR(parent, field) = RB_BLACK;	\
+				if (RB_LEFT(tmp, field))		\
+					RB_COLOR(RB_LEFT(tmp, field), field) = RB_BLACK;\
+				RB_ROTATE_RIGHT(head, parent, tmp, field);\
+				elm = RB_ROOT_NODE(head);		\
+				break;					\
+			}						\
+		}							\
+	}								\
+	if (elm)							\
+		RB_COLOR(elm, field) = RB_BLACK;			\
+}									\
+									\
+attr type *							        \
+name##_RB_REMOVE(struct name *head, type *elm)			        \
+{									\
+	type *child, *parent, *old = elm;			        \
+	int color;							\
+	if (RB_LEFT(elm, field) == NULL)				\
+		child = RB_RIGHT(elm, field);				\
+	else if (RB_RIGHT(elm, field) == NULL)				\
+		child = RB_LEFT(elm, field);				\
+	else {								\
+		type *left;					        \
+		elm = RB_RIGHT(elm, field);				\
+		while ((left = RB_LEFT(elm, field)) != NULL)		\
+			elm = left;					\
+		child = RB_RIGHT(elm, field);				\
+		parent = RB_PARENT(elm, field);				\
+		color = RB_COLOR(elm, field);				\
+		if (child)						\
+			RB_PARENT(child, field) = parent;		\
+		if (parent) {						\
+			if (RB_LEFT(parent, field) == elm)		\
+				RB_LEFT(parent, field) = child;		\
+			else						\
+				RB_RIGHT(parent, field) = child;	\
+			RB_AUGMENT(parent);				\
+		} else							\
+			RB_ROOT_NODE(head) = child;			\
+		if (RB_PARENT(elm, field) == old)			\
+			parent = elm;					\
+		(elm)->field = (old)->field;				\
+		if (RB_PARENT(old, field)) {				\
+			if (RB_LEFT(RB_PARENT(old, field), field) == old)\
+				RB_LEFT(RB_PARENT(old, field), field) = elm;\
+			else						\
+				RB_RIGHT(RB_PARENT(old, field), field) = elm;\
+			RB_AUGMENT(RB_PARENT(old, field));		\
+		} else							\
+			RB_ROOT_NODE(head) = elm;			\
+		RB_PARENT(RB_LEFT(old, field), field) = elm;		\
+		if (RB_RIGHT(old, field))				\
+			RB_PARENT(RB_RIGHT(old, field), field) = elm;	\
+		if (parent) {						\
+			left = parent;					\
+			do {						\
+				RB_AUGMENT(left);			\
+			} while ((left = RB_PARENT(left, field)) != NULL); \
+		}							\
+		goto color;						\
+	}								\
+	parent = RB_PARENT(elm, field);					\
+	color = RB_COLOR(elm, field);					\
+	if (child)							\
+		RB_PARENT(child, field) = parent;			\
+	if (parent) {							\
+		if (RB_LEFT(parent, field) == elm)			\
+			RB_LEFT(parent, field) = child;			\
+		else							\
+			RB_RIGHT(parent, field) = child;		\
+		RB_AUGMENT(parent);					\
+	} else								\
+		RB_ROOT_NODE(head) = child;				\
+color:									\
+	if (color == RB_BLACK)						\
+		name##_RB_REMOVE_COLOR(head, parent, child);		\
+	return (old);							\
+}									\
+									\
+/* Inserts a node into the RB tree */					\
+attr type *							        \
+name##_RB_INSERT(struct name *head, type *elm)			        \
+{									\
+	type *tmp;						        \
+	type *parent = NULL;					        \
+	int comp = 0;							\
+	tmp = RB_ROOT_NODE(head);					\
+	while (tmp) {							\
+		parent = tmp;						\
+		comp = (cmp)(elm, parent);				\
+		if (comp < 0)						\
+			tmp = RB_LEFT(tmp, field);			\
+		else if (comp > 0)					\
+			tmp = RB_RIGHT(tmp, field);			\
+		else							\
+			return (tmp);					\
+	}								\
+	RB_SET(elm, parent, field);					\
+	if (parent != NULL) {						\
+		if (comp < 0)						\
+			RB_LEFT(parent, field) = elm;			\
+		else							\
+			RB_RIGHT(parent, field) = elm;			\
+		RB_AUGMENT(parent);					\
+	} else								\
+		RB_ROOT_NODE(head) = elm;				\
+	name##_RB_INSERT_COLOR(head, elm);				\
+	return (NULL);							\
+}									\
+									\
+/* Finds the node with the same key as elm */				\
+attr type *							        \
+name##_RB_FIND(struct name *head, type *elm)			        \
+{									\
+	type *tmp = RB_ROOT_NODE(head);				        \
+	int comp;							\
+	while (tmp) {							\
+		comp = cmp(elm, tmp);					\
+		if (comp < 0)						\
+			tmp = RB_LEFT(tmp, field);			\
+		else if (comp > 0)					\
+			tmp = RB_RIGHT(tmp, field);			\
+		else							\
+			return (tmp);					\
+	}								\
+	return (NULL);							\
+}									\
+									\
+/* Finds the first node greater than or equal to the search key */	\
+attr type *							        \
+name##_RB_NFIND(struct name *head, type *elm)			        \
+{									\
+	type *tmp = RB_ROOT_NODE(head);				        \
+	type *res = NULL;					        \
+	int comp;							\
+	while (tmp) {							\
+		comp = cmp(elm, tmp);					\
+		if (comp < 0) {						\
+			res = tmp;					\
+			tmp = RB_LEFT(tmp, field);			\
+		}							\
+		else if (comp > 0)					\
+			tmp = RB_RIGHT(tmp, field);			\
+		else							\
+			return (tmp);					\
+	}								\
+	return (res);							\
+}									\
+									\
+/* ARGSUSED */								\
+attr type *							        \
+name##_RB_NEXT(type *elm)					        \
+{									\
+	if (RB_RIGHT(elm, field)) {					\
+		elm = RB_RIGHT(elm, field);				\
+		while (RB_LEFT(elm, field))				\
+			elm = RB_LEFT(elm, field);			\
+	} else {							\
+		if (RB_PARENT(elm, field) &&				\
+		    (elm == RB_LEFT(RB_PARENT(elm, field), field)))	\
+			elm = RB_PARENT(elm, field);			\
+		else {							\
+			while (RB_PARENT(elm, field) &&			\
+			    (elm == RB_RIGHT(RB_PARENT(elm, field), field)))\
+				elm = RB_PARENT(elm, field);		\
+			elm = RB_PARENT(elm, field);			\
+		}							\
+	}								\
+	return (elm);							\
+}									\
+									\
+/* ARGSUSED */								\
+attr type *							\
+name##_RB_PREV(type *elm)					\
+{									\
+	if (RB_LEFT(elm, field)) {					\
+		elm = RB_LEFT(elm, field);				\
+		while (RB_RIGHT(elm, field))				\
+			elm = RB_RIGHT(elm, field);			\
+	} else {							\
+		if (RB_PARENT(elm, field) &&				\
+		    (elm == RB_RIGHT(RB_PARENT(elm, field), field)))	\
+			elm = RB_PARENT(elm, field);			\
+		else {							\
+			while (RB_PARENT(elm, field) &&			\
+			    (elm == RB_LEFT(RB_PARENT(elm, field), field)))\
+				elm = RB_PARENT(elm, field);		\
+			elm = RB_PARENT(elm, field);			\
+		}							\
+	}								\
+	return (elm);							\
+}									\
+									\
+attr type *							        \
+name##_RB_MINMAX(struct name *head, int val)				\
+{									\
+	type *tmp = RB_ROOT_NODE(head);				        \
+	type *parent = NULL;					        \
+	while (tmp) {							\
+		parent = tmp;						\
+		if (val < 0)						\
+			tmp = RB_LEFT(tmp, field);			\
+		else							\
+			tmp = RB_RIGHT(tmp, field);			\
+	}								\
+	return (parent);						\
+}
+
+#define RB_NEGINF	-1
+#define RB_INF	1
+
+#define RB_INSERT(name, x, y)	name##_RB_INSERT(x, y)
+#define RB_REMOVE(name, x, y)	name##_RB_REMOVE(x, y)
+#define RB_FIND(name, x, y)	name##_RB_FIND(x, y)
+#define RB_NFIND(name, x, y)	name##_RB_NFIND(x, y)
+#define RB_NEXT(name, x, y)	name##_RB_NEXT(y)
+#define RB_PREV(name, x, y)	name##_RB_PREV(y)
+#define RB_MIN(name, x)		name##_RB_MINMAX(x, RB_NEGINF)
+#define RB_MAX(name, x)		name##_RB_MINMAX(x, RB_INF)
+
+#define RB_FOREACH(x, name, head)					\
+	for ((x) = RB_MIN(name, head);					\
+	     (x) != NULL;						\
+	     (x) = name##_RB_NEXT(x))
+
+#define RB_FOREACH_FROM(x, name, y)					\
+	for ((x) = (y);							\
+	    ((x) != NULL) && ((y) = name##_RB_NEXT(x), (x) != NULL);	\
+	     (x) = (y))
+
+#define RB_FOREACH_SAFE(x, name, head, y)				\
+	for ((x) = RB_MIN(name, head);					\
+	    ((x) != NULL) && ((y) = name##_RB_NEXT(x), (x) != NULL);	\
+	     (x) = (y))
+
+#define RB_FOREACH_REVERSE(x, name, head)				\
+	for ((x) = RB_MAX(name, head);					\
+	     (x) != NULL;						\
+	     (x) = name##_RB_PREV(x))
+
+#define RB_FOREACH_REVERSE_FROM(x, name, y)				\
+	for ((x) = (y);							\
+	    ((x) != NULL) && ((y) = name##_RB_PREV(x), (x) != NULL);	\
+	     (x) = (y))
+
+#define RB_FOREACH_REVERSE_SAFE(x, name, head, y)			\
+	for ((x) = RB_MAX(name, head);					\
+	    ((x) != NULL) && ((y) = name##_RB_PREV(x), (x) != NULL);	\
+	     (x) = (y))
+
+#endif	/* _BCMOS_TREE_H_ */
diff --git a/bcm68620_release/release/host_customized/os_abstraction/bcmos_types.h b/bcm68620_release/release/host_customized/os_abstraction/bcmos_types.h
new file mode 100644
index 0000000..21f0191
--- /dev/null
+++ b/bcm68620_release/release/host_customized/os_abstraction/bcmos_types.h
@@ -0,0 +1,208 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef BCMOS_TYPES_H_
+#define BCMOS_TYPES_H_
+
+#ifndef BCMOS_SYSTEM_H_
+#error Please do not include bcmos_types.h directly. Include bcmos_system.h
+#endif
+
+#include "bcmos_pack.h"
+
+/** \defgroup system_types Generic types
+ * @{
+ */
+
+/*
+ * Limits of integer types.
+ */
+
+/* Minimum of signed integer types.  */
+#ifndef INT8_MIN
+#define INT8_MIN       (0x80)
+#endif
+#ifndef INT16_MIN
+#define INT16_MIN      (0x8000)
+#endif
+#ifndef INT32_MIN
+#define INT32_MIN      (0x80000000)
+#endif
+#ifndef INT64_MIN
+#define INT64_MIN      (0x8000000000000000)
+#endif
+
+/* Maximum of signed integer types.  */
+#ifndef INT8_MAX
+#define INT8_MAX       (0x7F)
+#endif
+#ifndef INT16_MAX
+#define INT16_MAX      (0x7FFF)
+#endif
+#ifndef INT32_MAX
+#define INT32_MAX      (0x7FFFFFFF)
+#endif
+#ifndef INT64_MAX
+#define INT64_MAX      (0x7FFFFFFFFFFFFFFF)
+#endif
+
+/* Maximum of unsigned integer types.  */
+#ifndef UINT8_MAX
+#define UINT8_MAX      (0xFF)
+#endif
+#ifndef UINT16_MAX
+#define UINT16_MAX     (0xFFFF)
+#endif
+#ifndef UINT32_MAX
+#define UINT32_MAX     (0xFFFFFFFF)
+#endif
+#ifndef UINT64_MAX
+#define UINT64_MAX     (0xFFFFFFFFFFFFFFFF)
+#endif
+
+
+/** Endianness */
+#define BCMOS_ENDIAN_BIG        0
+#define BCMOS_ENDIAN_LITTLE     1
+
+typedef enum
+{
+    BCMOS_ENDIAN_BIG_E          = BCMOS_ENDIAN_BIG,
+    BCMOS_ENDIAN_LITTLE_E       = BCMOS_ENDIAN_LITTLE,
+} bcmos_endian;
+
+/* If endianness is not set explicitly, try to autodetect it.
+ * Modern gcc versions (over 4.8) define __BYTE_ORDER__
+ * see "gcc -E -dM - < /dev/null | grep ENDIAN"
+ */
+#ifndef BCM_CPU_ENDIAN
+
+#ifdef __BYTE_ORDER__
+
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+#define BCM_CPU_ENDIAN BCMOS_ENDIAN_LITTLE
+#else
+#define BCM_CPU_ENDIAN BCMOS_ENDIAN_BIG
+#endif
+
+#else
+
+/* We are dealing with compiler that doesn't set __BYTE_ORDER__.
+ * If it is simulation build than it must be LE x86.
+ * Otherwise, no way to tell.
+ */
+#ifdef SIMULATION_BUILD
+#define BCM_CPU_ENDIAN BCMOS_ENDIAN_LITTLE
+#endif
+
+#endif /* #ifdef __BYTE_ORDER */
+
+#endif /* #ifndef BCM_CPU_ENDIAN */
+
+#include <bcm_config.h>
+
+/** 24-bit unsigned integer */
+typedef union
+{
+    uint8_t u8[3];
+    struct __PACKED_ATTR_START__
+    {
+#if (BCM_CPU_ENDIAN == BCMOS_ENDIAN_BIG)
+        uint8_t hi;
+        uint8_t mid;
+        uint8_t low;
+#elif (BCM_CPU_ENDIAN == BCMOS_ENDIAN_LITTLE)
+        uint8_t low;
+        uint8_t mid;
+        uint8_t hi;
+#else
+#error BCM_CPU_ENDIAN must be BCMOS_ENDIAN_BIG or _LITTLE
+#endif
+    } __PACKED_ATTR_END__ low_hi;
+} uint24_t;
+
+static inline uint32_t uint24_to_32(uint24_t u24)
+{
+    return (u24.low_hi.hi << 16) | (u24.low_hi.mid << 8) | u24.low_hi.low;
+}
+
+static inline uint24_t uint32_to_24(uint32_t u32)
+{
+    return (uint24_t){ .low_hi= { .hi = (u32 >> 16) & 0xff, .mid = (u32 >> 8) & 0xff, .low = u32 & 0xff } };
+}
+
+/** VLAN tag (CoS/CFI/VID) */
+typedef uint16_t bcmos_vlan_tag;
+
+#define BCMOS_ETH_ALEN   6
+
+/** MAC address */
+typedef struct
+{
+    uint8_t u8[BCMOS_ETH_ALEN];
+} bcmos_mac_address;
+
+/** IPv4 address. It is stored in network byte order. */
+typedef union
+{
+    uint32_t u32;
+    uint8_t u8[4];
+} bcmos_ipv4_address;
+
+/** IPv6 address */
+typedef uint8_t bcmos_ipv6_address[16];
+
+static inline void bcmos_mac_address_init(bcmos_mac_address *mac)
+{
+    memset(mac, 0, sizeof(*mac));
+}
+
+static inline void bcmos_ipv4_address_init(bcmos_ipv4_address *ip)
+{
+    memset(ip, 0, sizeof(*ip));
+}
+
+#ifndef CFE_BUILD
+static inline char *bcmos_inet_ntoa(bcmos_ipv4_address *ip, char *ip_str)
+{
+    snprintf(ip_str, 16, "%u.%u.%u.%u", ip->u8[0], ip->u8[1], ip->u8[2], ip->u8[3]);
+
+    return ip_str;
+}
+#endif
+
+#ifndef container_of
+#define container_of(ptr, type, member) ({            \
+        const typeof( ((type *)0)->member ) *__mptr = (ptr);    \
+        (type *)( (long)__mptr - offsetof(type,member) );})
+#endif
+
+/** @} */
+
+#endif /* BCMOS_TYPES_H_ */
diff --git a/bcm68620_release/release/host_customized/os_abstraction/cfe/bcmolt_model_data_cfe_ext.h b/bcm68620_release/release/host_customized/os_abstraction/cfe/bcmolt_model_data_cfe_ext.h
new file mode 100644
index 0000000..ddca9ce
--- /dev/null
+++ b/bcm68620_release/release/host_customized/os_abstraction/cfe/bcmolt_model_data_cfe_ext.h
@@ -0,0 +1,92 @@
+/*
+<:copyright-BRCM:2016:proprietary:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+This program is the proprietary software of Broadcom Corporation and/or its
+licensors, and may only be used, duplicated, modified or distributed pursuant
+to the terms and conditions of a separate, written license agreement executed
+between you and Broadcom (an "Authorized License").  Except as set forth in
+an Authorized License, Broadcom grants no license (express or implied), right
+to use, or waiver of any kind with respect to the Software, and Broadcom
+expressly reserves all rights in and to the Software and all intellectual
+property rights therein.  IF YOU HAVE NO AUTHORIZED LICENSE, THEN YOU HAVE
+NO RIGHT TO USE THIS SOFTWARE IN ANY WAY, AND SHOULD IMMEDIATELY NOTIFY
+BROADCOM AND DISCONTINUE ALL USE OF THE SOFTWARE.
+
+Except as expressly set forth in the Authorized License,
+
+1. This program, including its structure, sequence and organization,
+    constitutes the valuable trade secrets of Broadcom, and you shall use
+    all reasonable efforts to protect the confidentiality thereof, and to
+    use this information only in connection with your use of Broadcom
+    integrated circuit products.
+
+2. TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
+    AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES, REPRESENTATIONS OR
+    WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH
+    RESPECT TO THE SOFTWARE.  BROADCOM SPECIFICALLY DISCLAIMS ANY AND
+    ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY, NONINFRINGEMENT,
+    FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES, ACCURACY OR
+    COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR CORRESPONDENCE
+    TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING OUT OF USE OR
+    PERFORMANCE OF THE SOFTWARE.
+
+3. TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM OR
+    ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL, INCIDENTAL, SPECIAL,
+    INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER ARISING OUT OF OR IN ANY
+    WAY RELATING TO YOUR USE OF OR INABILITY TO USE THE SOFTWARE EVEN
+    IF BROADCOM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES;
+    OR (ii) ANY AMOUNT IN EXCESS OF THE AMOUNT ACTUALLY PAID FOR THE
+    SOFTWARE ITSELF OR U.S. $1, WHICHEVER IS GREATER. THESE LIMITATIONS
+    SHALL APPLY NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY
+    LIMITED REMEDY.
+:>
+*/
+
+#ifndef BCMOS_MODEL_DATA_CFE_EXT_H_
+#define BCMOS_MODEL_DATA_CFE_EXT_H_
+
+#include "bcmolt_model_data.h"
+
+typedef struct
+{
+    bcmolt_system_mode system_mode;
+    bcmolt_device_nni_speed nni_speed;
+    bcmos_bool use_prev_nni_serdes_firmware;
+} db_rec_device;
+
+/* System mode */
+static bcmolt_system_mode device_system_mode;
+
+/** Set system mode
+ * \param[in]  dev            Device id
+ * \param[in]  system_mode    System mode
+ * \returns BCM_ERR_OK, BCM_ERR_NOT_SUPPORTED
+ */
+static inline bcmos_errno bcmolt_system_mode_set(uint16_t dev, bcmolt_system_mode system_mode)
+{
+    device_system_mode = system_mode;
+    return BCM_ERR_OK;
+}
+
+/** Get system mode
+ * \param[in]  dev            Device id
+ * \param[in]  system_mode    System mode
+ * \returns BCM_ERR_OK
+ */
+static inline bcmos_errno bcmolt_system_mode_get(uint16_t dev, bcmolt_system_mode *system_mode)
+{
+    *system_mode = device_system_mode;
+    return BCM_ERR_OK;
+}
+
+
+static inline int is_issu_boot(void)
+{
+    return BCMOS_FALSE;
+}
+
+
+#endif
diff --git a/bcm68620_release/release/host_customized/os_abstraction/cfe/bcmos_system.h b/bcm68620_release/release/host_customized/os_abstraction/cfe/bcmos_system.h
new file mode 100644
index 0000000..763cc79
--- /dev/null
+++ b/bcm68620_release/release/host_customized/os_abstraction/cfe/bcmos_system.h
@@ -0,0 +1,138 @@
+/*
+<:copyright-BRCM:2016:proprietary:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+This program is the proprietary software of Broadcom Corporation and/or its
+licensors, and may only be used, duplicated, modified or distributed pursuant
+to the terms and conditions of a separate, written license agreement executed
+between you and Broadcom (an "Authorized License").  Except as set forth in
+an Authorized License, Broadcom grants no license (express or implied), right
+to use, or waiver of any kind with respect to the Software, and Broadcom
+expressly reserves all rights in and to the Software and all intellectual
+property rights therein.  IF YOU HAVE NO AUTHORIZED LICENSE, THEN YOU HAVE
+NO RIGHT TO USE THIS SOFTWARE IN ANY WAY, AND SHOULD IMMEDIATELY NOTIFY
+BROADCOM AND DISCONTINUE ALL USE OF THE SOFTWARE.
+
+Except as expressly set forth in the Authorized License,
+
+1. This program, including its structure, sequence and organization,
+    constitutes the valuable trade secrets of Broadcom, and you shall use
+    all reasonable efforts to protect the confidentiality thereof, and to
+    use this information only in connection with your use of Broadcom
+    integrated circuit products.
+
+2. TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
+    AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES, REPRESENTATIONS OR
+    WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH
+    RESPECT TO THE SOFTWARE.  BROADCOM SPECIFICALLY DISCLAIMS ANY AND
+    ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY, NONINFRINGEMENT,
+    FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES, ACCURACY OR
+    COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR CORRESPONDENCE
+    TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING OUT OF USE OR
+    PERFORMANCE OF THE SOFTWARE.
+
+3. TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM OR
+    ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL, INCIDENTAL, SPECIAL,
+    INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER ARISING OUT OF OR IN ANY
+    WAY RELATING TO YOUR USE OF OR INABILITY TO USE THE SOFTWARE EVEN
+    IF BROADCOM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES;
+    OR (ii) ANY AMOUNT IN EXCESS OF THE AMOUNT ACTUALLY PAID FOR THE
+    SOFTWARE ITSELF OR U.S. $1, WHICHEVER IS GREATER. THESE LIMITATIONS
+    SHALL APPLY NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY
+    LIMITED REMEDY.
+:>
+*/
+#ifndef BCMOS_SYSTEM_H_
+#define BCMOS_SYSTEM_H_
+
+#include <limits.h>
+
+#include "lib_types.h"
+#include "lib_string.h"
+
+#include "../bcmos_errno.h"
+#include "../bcmos_types.h"
+#include "../bcmos_endian.h"
+#include "cfe_timer.h"
+#include "lib_printf.h"
+
+#define bcmos_printf printf
+
+#define bcmos_usleep(x)                              \
+                        do {                         \
+                        cfe_usleep (x);              \
+                        }                            \
+                        while(0) 
+/* Define bcmos_bool - the boolean type for bcmos - based on C99 standard boolean type */
+#ifndef BCMOS_BOOLEAN
+typedef _Bool bcmos_bool;
+#define BCMOS_FALSE 0
+#define BCMOS_TRUE 1
+#endif
+
+#define PERIPH_GENINT_REVID              0xffe00000
+#define CHIP_REV_MASK                    0xFF
+static inline unsigned int get_chip_revision(void)
+{
+    return *(volatile unsigned int*)PERIPH_GENINT_REVID & CHIP_REV_MASK;
+} 
+
+#define CHIP_REVISION_A0 0xA0
+#define CHIP_REVISION_B0 0xB0
+
+#ifdef SIMULATION_BUILD
+#define GET_CHIP_REVISION CHIP_REVISION_A0
+#else
+extern uint32_t chip_revision;
+#define GET_CHIP_REVISION (chip_revision != 0 ? chip_revision : (chip_revision = get_chip_revision()))
+#endif
+
+
+typedef uint16_t bcmos_fastlock;
+#define BCMOS_FASTLOCK_INITIALIZER 0
+#define bcmos_fastlock_lock(fastlock) (long)fastlock
+#define bcmos_fastlock_unlock(fastlock, flags)  (void)flags
+
+typedef uint16_t bcmos_mutex;
+#define bcmos_mutex_create(mutex, flags, name)  
+#define bcmos_mutex_lock(mutex)
+#define bcmos_mutex_unlock(mutex)
+
+
+#define BCM_SIZEOFARRAY(arr) (sizeof(arr)/sizeof(*arr))
+#define BCM_SIZEOFFIELD(s, f) (sizeof(((s*)NULL)->f))
+#define BCM_MEMZERO_STRUCT(ptr) memset(ptr, 0, sizeof(*(ptr)))
+#define BCM_MEMCPY_ARRAY(dst, src) memcpy(dst, src, sizeof(dst))
+
+
+#define BUG_ON_PRINT(condition, fmt, args...) \
+    do \
+    { \
+        if (condition) \
+        { \
+            printf(fmt, ##args); \
+            /* On one hand, don't let this task continue - it is likely to crash/create a system exception.
+             * On the other hand, it mustn't do a busy loop - otherwise it can cause lower priority tasks to stop responding. */ \
+            while (1) \
+                bcmos_usleep(10000000); \
+        } \
+    } while (0)
+
+#define BUG_ON(condition)      BUG_ON_PRINT((condition), "BUG in %s %d!\n", __FUNCTION__, __LINE__)
+#define BUG()                  BUG_ON(1)
+#define BUG_UNLESS(condition)  BUG_ON(!(condition))
+
+
+#define BCMOS_TRACE_ERR(fmt, args...) \
+    do \
+    { \
+        printf( fmt, ## args); \
+   } while (0)
+
+
+#define bcmos_vprintf printf
+#define bcmos_calloc(s) KMALLOC((s), 0)
+
+#endif
diff --git a/bcm68620_release/release/host_customized/os_abstraction/linux/Makefile b/bcm68620_release/release/host_customized/os_abstraction/linux/Makefile
new file mode 100644
index 0000000..c66f726
--- /dev/null
+++ b/bcm68620_release/release/host_customized/os_abstraction/linux/Makefile
@@ -0,0 +1,31 @@
+# Linux kernel OS abstraction
+#
+ifeq ("$(OS_KERNEL)", "linux")
+
+MOD_NAME = os_linux
+MOD_TYPE = linux_module
+MOD_SUPPRESS_OS_DEP = y
+MOD_DEPS = ll_pcie
+
+MOD_INC_DIRS = $(SRC_DIR) $(SRC_DIR)/..
+ifeq ("$(RELEASE_BUILD)", "y")
+    MOD_INC_DIRS += host_driver/config
+else
+    MOD_INC_DIRS += $(SUBSYSTEM)/os_abstraction/$(PLATFORM) $(SUBSYSTEM)/config
+endif
+
+EXTRA_CFLAGS += -DBCMOS_TRACE_PRINTF
+
+srcs = bcmos_system.c ../bcmos_errno.c ../bcmos_common.c
+
+ifeq ("$(DEBUG)", "y")
+	MOD_DEFS	+= -DBCMOS_MEM_DEBUG -DBCMOS_SYS_UNITTEST
+endif
+
+# If called by linux kernel builder - add include paths manually.
+# It is not elegant, but we'll not have many linux modules
+ifneq ("$(KBUILD_SRC)", "")
+	-include $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
+endif
+
+endif
diff --git a/bcm68620_release/release/host_customized/os_abstraction/linux/bcmos_system.c b/bcm68620_release/release/host_customized/os_abstraction/linux/bcmos_system.c
new file mode 100644
index 0000000..0b4a023
--- /dev/null
+++ b/bcm68620_release/release/host_customized/os_abstraction/linux/bcmos_system.c
@@ -0,0 +1,536 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+/*
+ * bcmos_system.c
+ *
+ * This file implements a subset of OS Abstraction services
+ * for linux kernel
+ */
+
+#include <bcmos_system.h>
+
+#include <linux/delay.h>
+#include <linux/pci.h>
+#include <asm-generic/pci-dma-compat.h>
+#include <linux/fs.h>
+#include <linux/fdtable.h>
+
+#include <bcmolt_llpcie.h>
+
+/* task control blocks */
+extern STAILQ_HEAD(task_list, bcmos_task) task_list;
+
+/* global OS lock */
+extern bcmos_mutex bcmos_res_lock;
+
+/* Initialize system library */
+bcmos_errno bcmos_sys_init(void)
+{
+    return BCM_ERR_OK;
+}
+/* Clean-up system library */
+void bcmos_sys_exit(void)
+{
+}
+
+/*
+ * Thread handler
+ */
+static int bcmos_task_handler(void *data)
+{
+    bcmos_task *task = (bcmos_task *)data;
+    F_bcmos_task_handler handler;
+    long handler_data;
+
+    task->sys_task.t = current;
+
+    if (task->parm.handler)
+    {
+        /* "traditional task */
+        handler = task->parm.handler;
+        handler_data = task->parm.data;
+    }
+    else
+    {
+        /* "integrated" task */
+        handler = bcmos_dft_task_handler;
+        handler_data = (long)task;
+    }
+    handler(handler_data);
+
+    return 0;
+}
+
+void _bcmos_backtrace(void)
+{
+    /*todo implement this*/
+}
+
+/* Create a new task.
+ * Attention! Priority is ignored.
+ */
+bcmos_errno bcmos_task_create(bcmos_task *task, const bcmos_task_parm *parm)
+{
+    struct task_struct *t;
+    bcmos_errno rc;
+
+    if (!task || !parm)
+        return BCM_ERR_PARM;
+
+    memset(task, 0, sizeof(*task));
+    task->parm = *parm;
+    if (!parm->handler)
+    {
+        /* Initialize and lock mutex to wait on */
+        rc = bcmos_sem_create(&task->active_sem, 0, task->parm.flags, parm->name);
+        if (rc)
+        {
+            BCMOS_TRACE_ERR("Task %s: can't create active_sem. Error %s (%d)\n",
+                task->parm.name, bcmos_strerror(rc), rc);
+            return rc;
+        }
+    }
+    /* Copy name to make sure that it is not released - in case it was on the stack */
+    if (task->parm.name)
+    {
+        strncpy(task->name, task->parm.name, sizeof(task->name) - 1);
+        task->parm.name = task->name;
+    }
+    bcmos_fastlock_init(&task->active_lock, 0);
+    task->magic = BCMOS_TASK_MAGIC;
+    bcmos_mutex_lock(&bcmos_res_lock);
+    STAILQ_INSERT_TAIL(&task_list, task, list);
+    bcmos_mutex_unlock(&bcmos_res_lock);
+
+    t = kthread_run(bcmos_task_handler, task, parm->name);
+    if (t == ERR_PTR(-ENOMEM))
+    {
+        bcmos_mutex_lock(&bcmos_res_lock);
+        STAILQ_REMOVE(&task_list, task, bcmos_task, list);
+        bcmos_mutex_unlock(&bcmos_res_lock);
+        task->magic = 0;
+        return BCM_ERR_NOMEM;
+    }
+
+    return BCM_ERR_OK;
+}
+
+/* Destroy task */
+bcmos_errno bcmos_task_destroy(bcmos_task *task)
+{
+    if (task->magic != BCMOS_TASK_MAGIC)
+    {
+        return BCM_ERR_PARM;
+    }
+    if (!task->sys_task.t)
+    {
+        return BCM_ERR_NOENT;
+    }
+    task->destroy_request = BCMOS_TRUE;
+    task->magic = BCMOS_TASK_MAGIC_DESTROYED;
+    bcmos_mutex_lock(&bcmos_res_lock);
+    STAILQ_REMOVE(&task_list, task, bcmos_task, list);
+    bcmos_mutex_unlock(&bcmos_res_lock);
+    /* The task may be waiting on semaphore. Kick it */
+    if (!task->parm.handler)
+    {
+        bcmos_sem_post(&task->active_sem);
+    }
+
+    /* Sometimes by the time we get here the task has already been disposed of.
+     * TODO: investigate why */
+    if (task->sys_task.t->cred != NULL)
+    {
+        kthread_stop(task->sys_task.t);
+    }
+    return BCM_ERR_OK;
+}
+
+/** Get current task
+ * \returns task handle or NULL if not in task context
+ */
+bcmos_task *bcmos_task_current(void)
+{
+    struct task_struct *kt = current;
+    bcmos_task *t, *tmp;
+
+    STAILQ_FOREACH_SAFE(t, &task_list, list, tmp)
+    {
+        if (t->sys_task.t == kt)
+            break;
+    }
+    return t;
+}
+
+/* timer signal handler */
+static void sys_timer_handler(unsigned long data)
+{
+    bcmos_sys_timer *timer = (bcmos_sys_timer *)data;
+    timer->handler(timer->data);
+}
+
+/* Create timer */
+bcmos_errno bcmos_sys_timer_create(bcmos_sys_timer *timer, bcmos_sys_timer_handler handler, void *data)
+{
+    if (!timer || !handler)
+        BCMOS_TRACE_RETURN(BCM_ERR_PARM, "timer %p, handler %p\n", timer, handler);
+
+   timer->handler = handler;
+   timer->data = data;
+   init_timer(&timer->t);
+   timer->t.function = sys_timer_handler;
+   timer->t.data = (unsigned long)timer;
+
+   return BCM_ERR_OK;
+}
+
+/* Destroy timer */
+void bcmos_sys_timer_destroy(bcmos_sys_timer *timer)
+{
+    del_timer_sync(&timer->t);
+}
+
+/* (Re)start timer */
+void bcmos_sys_timer_start(bcmos_sys_timer *timer, uint32_t delay)
+{
+    /* Convert delay us --> ticks */
+    uint32_t ticks = usecs_to_jiffies(delay);
+    mod_timer(&timer->t, jiffies + ticks);
+}
+
+/* Stop timer if running */
+void bcmos_sys_timer_stop(bcmos_sys_timer *timer)
+{
+    /* No need to do anything. System timer isn't running */
+}
+
+void bcmos_usleep(uint32_t u)
+{
+    if (u >= 10000)
+        msleep((u + 999) / 1000);
+    else
+        udelay(u);
+}
+
+/*
+ * Semaphore
+ */
+
+/* Decrement semaphore counter. Wait if the counter is 0.
+ */
+bcmos_errno bcmos_sem_wait(bcmos_sem *sem, uint32_t timeout)
+{
+    if (timeout)
+    {
+        if (timeout != BCMOS_WAIT_FOREVER)
+        {
+            if (down_timeout(&sem->s, usecs_to_jiffies(timeout)))
+                return BCM_ERR_TIMEOUT;
+        }
+        else
+        {
+            if (down_interruptible(&sem->s))
+                return BCM_ERR_INTERNAL;
+        }
+        return BCM_ERR_OK;
+    }
+
+    /* 0 timeout */
+    if (down_trylock(&sem->s))
+    {
+        return BCM_ERR_NOENT;
+    }
+    return BCM_ERR_OK;
+}
+
+
+/*
+ * Byte memory pool
+ */
+
+/* Memory block header */
+typedef struct bcmos_byte_memblk
+{
+    bcmos_byte_pool *pool;      /** pool that owns the block */
+    uint32_t size;              /** block size (bytes) including bcmos_byte_memblk header */
+#ifdef BCMOS_MEM_DEBUG
+    uint32_t magic;             /** magic number */
+#define BCMOS_MEM_MAGIC_ALLOC   (('m'<<24) | ('b' << 16) | ('l' << 8) | 'k')
+#define BCMOS_MEM_MAGIC_FREE    (('m'<<24) | ('b' << 16) | ('l' << 8) | '~')
+#endif
+} bcmos_byte_memblk;
+
+/* Create byte memory pool */
+bcmos_errno bcmos_byte_pool_create(bcmos_byte_pool *pool, const bcmos_byte_pool_parm *parm)
+{
+    if (!pool || !parm)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_PARM, "pool %p, parm %p\n", pool, parm);
+    }
+
+    BCM_MEMZERO_STRUCT(pool);
+    pool->parm = *parm;
+    if (!pool->parm.size)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_PARM, "size %u\n", parm->size);
+    }
+#ifdef BCMOS_MEM_DEBUG
+    pool->magic = BCMOS_BYTE_POOL_VALID;
+#endif
+    return BCM_ERR_OK;
+}
+
+/* Destroy memory pool */
+bcmos_errno bcmos_byte_pool_destroy(bcmos_byte_pool *pool)
+{
+    if (pool->allocated)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_STATE, "%u bytes of memory are still allocated from the pool %s\n",
+            pool->allocated, pool->parm.name);
+    }
+#ifdef BCMOS_MEM_DEBUG
+    pool->magic = BCMOS_BYTE_POOL_DELETED;
+#endif
+    return BCM_ERR_OK;
+}
+
+/* Allocate memory from memory pool */
+void *bcmos_byte_pool_alloc(bcmos_byte_pool *pool, uint32_t size)
+{
+    bcmos_byte_memblk *blk;
+    uint32_t byte_size;
+    void *ptr;
+
+#ifdef BCMOS_MEM_DEBUG
+    BUG_ON(pool->magic != BCMOS_BYTE_POOL_VALID);
+#endif
+
+    if (size + pool->allocated > pool->parm.size)
+        return NULL;
+
+    byte_size = size + sizeof(bcmos_byte_memblk);
+#ifdef BCMOS_MEM_DEBUG
+    byte_size += sizeof(uint32_t); /* block suffix */
+#endif
+    /* ToDo: Maintain LL of allocated blocks */
+    blk = (bcmos_byte_memblk *)bcmos_alloc(byte_size);
+    if (!blk)
+        return NULL;
+    ptr = (void *)(blk + 1);
+    blk->size = byte_size;
+    pool->allocated += byte_size;
+    blk->pool = pool;
+#ifdef BCMOS_MEM_DEBUG
+    blk->magic = BCMOS_MEM_MAGIC_ALLOC;
+    *(uint32_t *)((long)blk + byte_size - sizeof(uint32_t)) = BCMOS_MEM_MAGIC_ALLOC;
+#endif
+
+    return ptr;
+}
+
+/* Release memory allocated using bcmos_byte_pool_alloc() */
+void bcmos_byte_pool_free(void *ptr)
+{
+    bcmos_byte_memblk *blk;
+    bcmos_byte_pool *pool;
+
+    BUG_ON(!ptr);
+    blk = (bcmos_byte_memblk *)((long)ptr - sizeof(bcmos_byte_memblk));
+    pool = blk->pool;
+#ifdef BCMOS_MEM_DEBUG
+    BUG_ON(pool->magic != BCMOS_BYTE_POOL_VALID);
+    BUG_ON(blk->magic != BCMOS_MEM_MAGIC_ALLOC);
+    BUG_ON(*(uint32_t *)((long)blk + blk->size - sizeof(uint32_t)) != BCMOS_MEM_MAGIC_ALLOC);
+    blk->magic = BCMOS_MEM_MAGIC_FREE;
+#endif
+    pool->allocated -= blk->size;
+    bcmos_free(blk);
+}
+
+/*
+ * DMA-able memory management
+ */
+
+/* Dma-able block header */
+typedef struct
+{
+    struct pci_dev *pdev;
+    dma_addr_t dma_handle;
+    uint32_t size;
+} bcmos_dma_mem_hdr;
+
+/* Allocate DMA-able memory */
+void *bcmos_dma_alloc(uint8_t device, uint32_t size)
+{
+    bcmos_dma_mem_hdr hdr =
+    {
+        .pdev = (struct pci_dev *)bcm_ll_pcie_dev_get(device),
+        .size = size
+    };
+    void *ptr;
+
+    if (!hdr.pdev)
+    {
+        return NULL;
+    }
+
+    ptr = pci_alloc_consistent(hdr.pdev, size + sizeof(bcmos_dma_mem_hdr), &hdr.dma_handle);
+    if (ptr)
+    {
+        memcpy(ptr, &hdr, sizeof(hdr));
+    }
+    return (void *)((long)ptr + sizeof(hdr));
+}
+
+/* Release DMA-able memory */
+void bcmos_dma_free(uint8_t device, void *ptr)
+{
+    bcmos_dma_mem_hdr hdr;
+
+    /* Step back to prefix area */
+    ptr = (void *)((long)ptr - sizeof(hdr));
+    memcpy(&hdr, ptr, sizeof(hdr));
+
+    /* Sanity check */
+    if (!hdr.pdev || hdr.pdev != bcm_ll_pcie_dev_get(device))
+    {
+        BCMOS_TRACE_ERR("!!!Attempt to release insane DMA-able pointer. ptr=%p pdev=%p/%p\n",
+            ptr, hdr.pdev, bcm_ll_pcie_dev_get(device));
+        return;
+    }
+    pci_free_consistent(hdr.pdev, hdr.size, ptr, hdr.dma_handle);
+}
+
+/*
+ * Print to the current process' stdout
+ */
+
+#ifndef STDOUT_FILENO
+#define STDOUT_FILENO 1
+#endif
+
+static int _bcmos_write(struct file *fd, const unsigned char *buf, int len)
+{
+    mm_segment_t oldfs;
+    int len0 = len;
+    oldfs = get_fs();
+    set_fs(KERNEL_DS);
+    while(len)
+    {
+        int lw;
+        lw = vfs_write(fd, (char *)buf, len, &fd->f_pos);
+        if (lw < 0)
+            break;
+        len -= lw;
+        if (len)
+        {
+            if (msleep_interruptible(1))
+                break;
+            buf += lw;
+        }
+    }
+    set_fs(oldfs);
+    return (len0 - len);
+}
+
+int bcmos_sys_vprintf(const char *format, va_list args)
+{
+    struct file *f;
+    int rc=0;
+
+    /* Get stdout file handle if any */
+    if (in_interrupt() || !current || !current->files)
+        f = 0;
+    else
+        f = fcheck(STDOUT_FILENO);
+    if (!f)
+    {
+         rc = vprintk(format, args);
+    }
+    else
+    {
+        char printbuf[1024];
+        char *p1=printbuf, *p2;
+        vscnprintf(printbuf, sizeof(printbuf)-1, format, args);
+        printbuf[sizeof(printbuf)-1]=0;
+        do
+        {
+            p2 = strchr(p1, '\n');
+            if (p2)
+            {
+                rc += _bcmos_write(f, (unsigned char*) p1, p2-p1+1);
+                rc += _bcmos_write(f, (unsigned char*)"\r", 1);
+            }
+            else
+            {
+                rc += _bcmos_write(f, (unsigned char*)p1, strlen(p1));
+            }
+            p1 = p2 + 1;
+        } while(p2);
+    }
+    return rc;
+}
+
+static int os_linux_module_init(void)
+{
+    bcmos_errno rc;
+
+    rc = bcmos_init();
+
+    return rc ? -EINVAL : 0;
+}
+
+static void os_linux_module_exit(void)
+{
+    bcmos_exit();
+}
+
+module_init(os_linux_module_init);
+module_exit(os_linux_module_exit);
+
+MODULE_DESCRIPTION("OS Abstraction");
+MODULE_LICENSE("Dual BSD/GPL");
+
+EXPORT_SYMBOL(bcmos_task_create);
+EXPORT_SYMBOL(bcmos_task_destroy);
+EXPORT_SYMBOL(bcmos_task_current);
+EXPORT_SYMBOL(bcmos_sem_wait);
+EXPORT_SYMBOL(bcmos_sys_trace_level);
+EXPORT_SYMBOL(bcmos_usleep);
+EXPORT_SYMBOL(bcmos_byte_pool_create);
+EXPORT_SYMBOL(bcmos_byte_pool_destroy);
+EXPORT_SYMBOL(bcmos_byte_pool_alloc);
+EXPORT_SYMBOL(bcmos_byte_pool_free);
+EXPORT_SYMBOL(bcmos_sys_vprintf);
+EXPORT_SYMBOL(bcmos_dma_alloc);
+EXPORT_SYMBOL(bcmos_dma_free);
+EXPORT_SYMBOL(_bcmos_backtrace);
+EXPORT_SYMBOL(sw_error_handler);
+EXPORT_SYMBOL(bcmos_exit);
diff --git a/bcm68620_release/release/host_customized/os_abstraction/linux/bcmos_system.h b/bcm68620_release/release/host_customized/os_abstraction/linux/bcmos_system.h
new file mode 100644
index 0000000..d6f36fe
--- /dev/null
+++ b/bcm68620_release/release/host_customized/os_abstraction/linux/bcmos_system.h
@@ -0,0 +1,519 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+/*
+ * bcmos_system.h
+ * Maple System Services
+ * posix port: simulation
+ */
+
+#ifndef BCMOS_SYSTEM_H_
+#define BCMOS_SYSTEM_H_
+#include <linux/version.h>
+#include <linux/module.h>
+#include <linux/types.h>
+#include <linux/string.h>
+#include <linux/stddef.h>
+#include <linux/skbuff.h>
+#include <linux/mutex.h>
+#include <linux/spinlock.h>
+#include <linux/semaphore.h>
+#include <linux/interrupt.h>
+#include <linux/kthread.h>
+#include <linux/compiler.h>
+#include <linux/random.h>
+#include <linux/ctype.h>
+#include <linux/time.h>
+#include <asm/io.h>
+
+#define BCMOS_IRQ_SINGLE    0
+#define BCMOS_IRQ_SHARED    IRQF_SHARED
+
+/* Re-define GNU typeof as ISO __typeof__ */
+#define typeof __typeof__
+
+#define strtol(s,p,b) simple_strtol(s,p,b)
+
+/* Specify here which system functions are inlined */
+
+#define BCMOS_FASTLOCK_INLINE
+#define BCMOS_SEM_INLINE
+#define BCMOS_MUTEX_INLINE
+
+#ifdef ENABLE_LOG
+#define BCMOS_TRACE_IN_DEV_LOG
+#endif
+
+#if !defined(BCMOS_TRACE_IN_DEV_LOG) && !defined(BCMOS_TRACE_PRINTF)
+#define BCMOS_TRACE_PRINTF
+#endif
+
+/* #define BCMOS_BYTE_POOL_ALLOC_FREE_INLINE */
+#define BCMOS_MALLOC_FREE_INLINE
+/* #define BCMOS_CALLOC_INLINE */
+#define BCMOS_BUF_OS_SPECIFIC
+#define BCMOS_BUF_INLINE
+#define BCMOS_INTERRUPT_INLINE
+#define BCMOS_TIMESTAMP_INLINE
+/* #define BCMOS_DMA_ALLOC_FREE_INLINE */
+#define BCMOS_VIRT_TO_PHYS_INLINE
+#define BCMOS_CACHE_INLINE
+/* Uncommentthe following line if h/w supports DMA cache coherency */
+/* #define BCMOS_DMA_CACHE_COHERENCY */
+
+/* getchar, putchar are not support. define as inline and proviude dummy targets */
+#define BCMOS_GETCHAR_INLINE
+#define BCMOS_PUTCHAR_INLINE
+
+#include "bcmos_common.h"
+
+static inline void bcm_pci_write32(volatile uint32_t *address, uint32_t value)
+{
+    writel(value, address);
+}
+
+static inline uint32_t bcm_pci_read32(const volatile uint32_t *address)
+{
+	return readl(address);
+}
+
+
+void _bcmos_backtrace(void);
+int bcmos_sys_vprintf(const char *format, va_list args);
+
+/*
+ * Memory allocation
+ */
+
+/* Allocate DMAable memory from the main heap */
+static inline void *bcmos_alloc(uint32_t size)
+{
+    return kmalloc(size, GFP_DMA);
+}
+
+/* Release memory to the main pool */
+static inline void bcmos_free(void *ptr)
+{
+    return kfree(ptr);
+}
+
+static inline void *bcmos_alloc_not_cache(int32_t size)
+{
+	return kmalloc(size, GFP_KERNEL);
+}
+static inline void bcmos_free_not_cache(void *dest)
+{
+	kfree(dest);
+}
+/*
+ * Synchronization
+ */
+
+/* Mutex control block */
+struct bcmos_mutex
+{
+    struct mutex m;             /**< linux kernel mutex */
+};
+
+/* Create recursive mutex */
+static inline bcmos_errno bcmos_mutex_create(bcmos_mutex *mutex, uint32_t flags, const char *name)
+{
+    mutex_init(&mutex->m);
+    return BCM_ERR_OK;
+}
+
+/* Destroy mutex */
+static inline void bcmos_mutex_destroy(bcmos_mutex *mutex)
+{
+    mutex_destroy(&mutex->m);
+}
+
+/* Lock mutex */
+static inline void bcmos_mutex_lock(bcmos_mutex *mutex)
+{
+    mutex_lock(&mutex->m);
+}
+
+/* Release mutex */
+static inline void bcmos_mutex_unlock(bcmos_mutex *mutex)
+{
+    mutex_unlock(&mutex->m);
+}
+
+/** Fast lock control block */
+struct bcmos_fastlock
+{
+    spinlock_t m;
+};
+
+/** Fastlock initializer. Can be used instead of calling bcmos_fastlock_init() */
+#define BCMOS_FASTLOCK_INITIALIZER      { SPINLOCK_UNLOCKED }
+
+/* Init fastlock */
+static inline void bcmos_fastlock_init(bcmos_fastlock *lock, uint32_t flags)
+{
+    spin_lock_init(&lock->m);
+}
+
+/* Take fast lock */
+static inline long bcmos_fastlock_lock(bcmos_fastlock *lock)
+{
+    unsigned long flags;
+    spin_lock_irqsave(&lock->m, flags);
+    return (long)flags;
+}
+
+/* Release fast lock */
+static inline void bcmos_fastlock_unlock(bcmos_fastlock *lock, long flags)
+{
+    spin_unlock_irqrestore(&lock->m, (unsigned long)flags);
+}
+
+/** Semaphore control block */
+struct bcmos_sem
+{
+    struct semaphore s;      /**< linux kernel semaphore */
+};
+
+/* Create semaphore */
+static inline bcmos_errno bcmos_sem_create(bcmos_sem *sem, uint32_t count, uint32_t flags, const char *name)
+{
+    sema_init(&sem->s, count);
+    return BCM_ERR_OK;
+}
+
+/* Destroy semaphore */
+static inline void bcmos_sem_destroy(bcmos_sem *sem)
+{
+}
+
+/* Wait for semaphore */
+bcmos_errno bcmos_sem_wait(bcmos_sem *sem, uint32_t timeout);
+
+/* Increment semaphore counter */
+static inline void bcmos_sem_post(bcmos_sem *sem)
+{
+    up(&sem->s);
+}
+
+/*
+ * Timers
+ */
+
+/** System timer */
+struct bcmos_sys_timer
+{
+    struct timer_list t;                /**< linux timer */
+    bcmos_sys_timer_handler handler;    /**< Timer handler */
+    void *data;                         /**< Parameter to be passed to the handler */
+};
+
+/* Get current timestamp (us) */
+static inline uint32_t bcmos_timestamp(void)
+{
+    struct timespec uptime;
+    do_posix_clock_monotonic_gettime(&uptime);
+    monotonic_to_bootbased(&uptime);
+    return uptime.tv_sec * USEC_PER_SEC + uptime.tv_nsec / NSEC_PER_USEC;
+}
+
+/* Get current timestamp (us) */
+static inline uint64_t bcmos_timestamp64(void)
+{
+    struct timespec uptime;
+    do_posix_clock_monotonic_gettime(&uptime);
+    monotonic_to_bootbased(&uptime);
+    return (uint64_t)uptime.tv_sec * USEC_PER_SEC + (uint64_t)uptime.tv_nsec / NSEC_PER_USEC;
+}
+
+/*
+ * Task control
+ */
+
+/** OS-specific task control block extension */
+typedef struct bcmos_sys_task
+{
+    struct task_struct *t;
+} bcmos_sys_task;
+
+/** Memory pool control block */
+struct bcmos_byte_pool
+{
+    bcmos_byte_pool_parm parm;  /**< Pool parameters */
+    uint32_t allocated;         /**< Number of bytes allocated */
+#ifdef BCMOS_MEM_DEBUG
+    uint32_t magic;             /**< magic number */
+#define BCMOS_BYTE_POOL_VALID           (('b'<<24) | ('y' << 16) | ('p' << 8) | 'o')
+#define BCMOS_BYTE_POOL_DELETED         (('b'<<24) | ('y' << 16) | ('p' << 8) | '~')
+#endif
+};
+
+/* Transport / network buffer service */
+extern uint32_t bcmos_buf_default_headroom;
+
+/*
+ * Network / transport buffer
+ */
+
+/* Data alignment. Should be a max lf L1, L2 cache line size */
+#define BCMOS_BUF_DATA_ALIGNMENT        128
+
+/* Encapsulated skb */
+struct bcmos_buf
+{
+    struct sk_buff skb;
+};
+
+/* Buffer list */
+typedef struct sk_buff_head bcmos_buf_queue;
+
+/* Allocate buffer */
+static inline bcmos_buf *bcmos_buf_alloc(uint32_t size)
+{
+    /* Allocate extra 2 * BCMOS_BUF_DATA_ALIGNMENT to make sure that neither data start nor end
+     * end up in the middle of cache line
+     */
+    struct sk_buff *skb = dev_alloc_skb(size + BCMTR_BUF_EXTRA_HEADROOM + 2 * BCMOS_BUF_DATA_ALIGNMENT - 1);
+    if (!skb)
+        return NULL;
+#if BCMTR_BUF_EXTRA_HEADROOM
+    skb_reserve(skb, BCMTR_BUF_EXTRA_HEADROOM);
+#endif
+    if ((long)skb->data & (BCMOS_BUF_DATA_ALIGNMENT - 1))
+    {
+        skb_reserve(skb, BCMOS_BUF_DATA_ALIGNMENT - ((long)skb->data & (BCMOS_BUF_DATA_ALIGNMENT - 1)));
+    }
+    return (bcmos_buf *)skb;
+}
+
+/* Release buffer */
+static inline void bcmos_buf_free(bcmos_buf *buf)
+{
+    consume_skb(&buf->skb);
+}
+
+/* Get data length */
+static inline uint32_t bcmos_buf_length(bcmos_buf *buf)
+{
+    return buf->skb.len;
+}
+
+/* Set data length */
+static inline bcmos_errno bcmos_buf_length_set(bcmos_buf *buf, uint32_t length)
+{
+    if (unlikely(length > skb_tailroom(&buf->skb)))
+    {
+        BCMOS_TRACE_ERR("!!!%s: length=%u tailroom=%d\n",
+            __FUNCTION__, length, skb_tailroom(&buf->skb));
+        return BCM_ERR_OVERFLOW;
+    }
+    buf->skb.len = length;
+    return BCM_ERR_OK;
+}
+
+/* Get buffer data pointer. */
+static inline uint8_t *bcmos_buf_data(bcmos_buf *buf)
+{
+    return buf->skb.data;
+}
+
+/* Get buffer channel. */
+static inline uint8_t bcmos_buf_channel(bcmos_buf *buf)
+{
+    return buf->skb.cb[0];
+}
+
+/* Set buffer channel. */
+static inline void bcmos_buf_channel_set(bcmos_buf *buf, uint8_t channel)
+{
+    buf->skb.cb[0] = channel;
+}
+
+/** Initialize buffer queue
+ * \param[in]   q       Buffer queue
+ */
+static inline void bcmos_buf_queue_init(bcmos_buf_queue *q)
+{
+    skb_queue_head_init(q);
+}
+
+/** Enqueue buffer
+ *
+ * Must be called under lock, e.g., q->lock
+ *
+ * \param[in]   q       Buffer queue
+ * \param[in]   buf     Buffer
+ */
+static inline void bcmos_buf_queue_put(bcmos_buf_queue *q, bcmos_buf *buf)
+{
+    __skb_queue_tail(q, &buf->skb);
+}
+
+/* Check if buffer queue is empty
+ * \param[in]   q       Buffer queue
+ * \returns TRUE if the queue is empty
+ */
+static inline bcmos_bool bcmos_buf_queue_is_empty(bcmos_buf_queue *q)
+{
+    return (bcmos_bool)skb_queue_empty(q);
+}
+
+/* Dequeue buffer
+ *
+ * Must be called under lock, e.g., q->lock
+ *
+ * Remove and return the 1st queued buffer.
+ * \param[in]   q       Buffer queue
+ * \returns the  buffer pointer
+ */
+static inline bcmos_buf *bcmos_buf_queue_get(bcmos_buf_queue *q)
+{
+    struct sk_buff *skb = __skb_dequeue(q);
+    return skb ? container_of(skb, bcmos_buf, skb) : NULL;
+}
+
+/* Peek into queue and return the 1st buffer without dequeing it
+ *
+ * Must be called under lock, e.g., q->lock
+ * \param[in]   q       Buffer queue
+ * \returns the  buffer pointer
+ */
+static inline bcmos_buf *bcmos_buf_queue_peek(bcmos_buf_queue *q)
+{
+    struct sk_buff *skb = skb_peek(q);
+    return skb ? container_of(skb, bcmos_buf, skb) : NULL;
+}
+
+/*
+ * dcache utilities
+ */
+/* Invalidate address area in data cache. Dirty cache lines content is discarded */
+static inline void bcmos_dcache_inv(void *start, uint32_t size)
+{
+#if defined(CONFIG_MIPS)
+    dma_cache_inv((unsigned long)start, size);
+#elif defined(CONFIG_PPC)
+    if (((unsigned long)start & (L1_CACHE_BYTES - 1)) || (size & (L1_CACHE_BYTES - 1)))
+        flush_dcache_range((unsigned long)start, (unsigned long)start + size);
+    else
+        invalidate_dcache_range((unsigned long)start, (unsigned long)start + size);
+#elif defined(CONFIG_UML)
+    /* Nothing to do */
+#else
+#error Please implement bcmos_dcache_inv()
+#endif
+}
+
+/* Flush address area in data cache. Dirty cache lines are committed to memory */
+static inline void bcmos_dcache_flush(void *start, uint32_t size)
+{
+#if defined(CONFIG_MIPS)
+    dma_cache_wback((unsigned long)start, size);
+#elif defined(CONFIG_PPC)
+    clean_dcache_range((unsigned long)start, (unsigned long)start + size);
+#elif defined(CONFIG_UML)
+    /* Nothing to do */
+#else
+#error Please implement bcmos_dcache_flush()
+#endif
+}
+
+/*
+ * Interrupt service
+ */
+
+/* Connect system interrupt */
+static inline int bcmos_int_connect(int irq, int cpu, int flags,
+    int (*isr)(int irq, void *priv), const char *name, void *priv)
+{
+    return request_irq(irq, (irq_handler_t)isr, flags, name, priv);
+}
+
+/* Disconnect system interrupt */
+static inline void bcmos_int_disconnect(int irq, void *priv)
+{
+    free_irq(irq, priv);
+}
+
+/* Unmask IRQ */
+static inline void bcmos_int_enable(int irq)
+{
+    enable_irq(irq);
+}
+
+/* Mask IRQ */
+static inline void bcmos_int_disable(int irq)
+{
+    disable_irq(irq);
+}
+
+/* Check in-irq status */
+static inline int is_irq_mode(void)
+{
+    return in_interrupt();
+}
+
+/* Check if interrupts are disabled */
+static inline int is_irq_disabled(void)
+{
+    return irqs_disabled();
+}
+
+/* Convert virtual address to physical address */
+static inline unsigned long bcmos_virt_to_phys(void *va)
+{
+    return virt_to_phys(va);
+}
+
+/* write barrier */
+static inline void bcmos_barrier(void)
+{
+    smp_wmb();
+}
+static inline int bcmos_getchar(void)
+{
+    return -1;
+}
+
+static inline void bcmos_putchar(int c)
+{
+}
+
+#ifdef BCMOS_MSG_QUEUE_DOMAIN_SOCKET
+#undef BCMOS_MSG_QUEUE_DOMAIN_SOCKET
+#endif
+
+#ifdef BCMOS_MSG_QUEUE_UDP_SOCKET
+#undef BCMOS_MSG_QUEUE_UDP_SOCKET
+#endif
+
+/* 2nd part of OS-independent declarations */
+#include "bcmos_common2.h"
+
+#endif /* BCMOS_SYSTEM_H_ */
diff --git a/bcm68620_release/release/host_customized/os_abstraction/os_cli/Makefile b/bcm68620_release/release/host_customized/os_abstraction/os_cli/Makefile
new file mode 100644
index 0000000..545a86a
--- /dev/null
+++ b/bcm68620_release/release/host_customized/os_abstraction/os_cli/Makefile
@@ -0,0 +1,7 @@
+# OS CLI commands
+#
+MOD_NAME = os_cli
+MOD_TYPE = lib
+MOD_DEPS = cli
+
+srcs = bcmos_cli.c
diff --git a/bcm68620_release/release/host_customized/os_abstraction/os_cli/bcmos_cli.c b/bcm68620_release/release/host_customized/os_abstraction/os_cli/bcmos_cli.c
new file mode 100644
index 0000000..3aef31a
--- /dev/null
+++ b/bcm68620_release/release/host_customized/os_abstraction/os_cli/bcmos_cli.c
@@ -0,0 +1,335 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#include <bcmos_cli.h>
+
+static bcmcli_entry *os_cli_dir;
+
+static bcmcli_enum_val trace_level_table[] =
+{
+    { .name="none", .val=BCMOS_TRACE_LEVEL_NONE },
+    { .name="error", .val=BCMOS_TRACE_LEVEL_ERROR },
+    { .name="info", .val=BCMOS_TRACE_LEVEL_INFO },
+    { .name="verbose_info", .val=BCMOS_TRACE_LEVEL_VERBOSE },
+    { .name="debug", .val=BCMOS_TRACE_LEVEL_DEBUG },
+    BCMCLI_ENUM_LAST
+};
+
+/*
+ * Command handlers
+ */
+
+static bcmos_errno _oscli_trace_handler(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    bcmos_trace_level level = (bcmos_trace_level)parm[0].value.number;
+
+    if (bcmcli_parm_is_set(session, &parm[0]))
+    {
+        bcmos_trace_level old_level;
+
+        old_level = bcmos_trace_level_set(level);
+        bcmcli_session_print(session, "OS trace level: old=%s  new=%s\n",
+            bcmcli_enum_stringval(trace_level_table, old_level),
+            bcmcli_enum_stringval(trace_level_table, level));
+    }
+    else
+    {
+        bcmcli_session_print(session, "OS trace level: %s\n",
+            bcmcli_enum_stringval(trace_level_table, bcmos_trace_level_get()));
+    }
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno _oscli_task_handler(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    const char *name = bcmcli_parm_is_set(session, &parm[0]) ? (const char *)parm[0].value.string : NULL;
+    bcmos_task *task = NULL;
+    int nt = 0;
+
+    bcmcli_session_print(session, "%-20s %4s %4s %-10s %s\n", "task", "prio", "core", "timeout", "handler");
+    while (bcmos_task_get_next(&task) == BCM_ERR_OK)
+    {
+        bcmos_task_parm tp = {};
+        bcmos_task_query(task, &tp);
+        if (!name || (name && tp.name && strstr(tp.name, name)))
+        {
+            char core_name[10];
+            if (tp.core != BCMOS_CPU_CORE_ANY)
+            {
+                snprintf(core_name, sizeof(core_name), "%d", tp.core - 1);
+            }
+            else
+            {
+                strcpy(core_name, "any");
+            }
+            bcmcli_session_print(session, "%-20s %-4d %-4s %-10u %p\n",
+                tp.name, tp.priority, core_name,
+                (tp.msg_wait_timeout == BCMOS_WAIT_FOREVER) ? 0 : tp.msg_wait_timeout, tp.handler);
+            ++nt;
+        }
+    }
+    bcmcli_session_print(session, "%d tasks listed\n", nt);
+
+    return BCM_ERR_OK;
+}
+
+static void _oscli_print_qinfo_hdr(bcmcli_session *session, const char *prefix)
+{
+    bcmcli_session_print(session, "%-9s %-9s %-10s %-10s %-10s %-10s %-8s %-8s %-10s congested\n",
+        prefix ? prefix : "", "size", "in", "put", "get", "discard", "l_thresh", "h_thresh", "near-full");
+}
+
+static void _oscli_print_qinfo(bcmcli_session *session, bcmos_msg_queue_info *qi, const char *prefix)
+{
+    bcmcli_session_print(session, "%-s %-9d %-10u %-10u %-10u %-10u %-8d %-8d %-10u %s\n",
+        prefix ? prefix : "", (int)qi->parm.size, qi->stat.msg_in,
+        qi->stat.msg_sent, qi->stat.msg_received,
+        qi->stat.msg_discarded, (int)qi->parm.low_wm, (int)qi->parm.high_wm,
+        qi->stat.msg_almost_full, qi->stat.is_congested ? "yes" : "no");
+}
+
+static bcmos_errno _oscli_module_handler(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    bcmos_module_id id = bcmcli_parm_is_set(session, &parm[0]) ?
+        (bcmos_module_id)parm[0].value.number : BCMOS_MODULE_ID_NONE;
+    bcmos_module_id i;
+    int nm = 0;
+
+    /* Heading */
+    _oscli_print_qinfo_hdr(session, "Module Task                 ");
+
+    for (i = BCMOS_MODULE_ID_NONE + 1; i < BCMOS_MODULE_ID__NUM_OF; i++)
+    {
+        bcmos_errno rc;
+        const bcmos_task *t = NULL;
+        bcmos_msg_queue_info qi = {};
+
+        rc = bcmos_module_query(i, &t, &qi);
+        if ((id == BCMOS_MODULE_ID_NONE || id == i) && rc == BCM_ERR_OK)
+        {
+            bcmos_task_parm tp = {};
+
+            bcmos_task_query(t, &tp);
+            bcmcli_session_print(session, "%-6d %-20s", i, (t && t->parm.name) ? t->parm.name : "*unknown*");
+            _oscli_print_qinfo(session, &qi, " ");
+            ++nm;
+        }
+    }
+    bcmcli_session_print(session, "%d modules listed\n", nm);
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno _oscli_blk_pool_handler(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    const char *name = bcmcli_parm_is_set(session, &parm[0]) ? (const char *)parm[0].value.string : NULL;
+    const bcmos_blk_pool *bp = NULL;
+    int nb = 0;
+
+    bcmcli_session_print(session, "%-24s %-9s %-9s %-9s %-10s %-10s %-10s %-10s\n",
+        "name", "pool_size", "blocks", "blk_size", "free", "allocated", "released", "failed");
+    while (bcmos_blk_pool_get_next(&bp) == BCM_ERR_OK)
+    {
+        bcmos_blk_pool_info pi = {};
+
+        bcmos_blk_pool_query(bp, &pi);
+        if (name == NULL || (pi.parm.name && strstr(pi.parm.name, name)))
+        {
+            bcmcli_session_print(session, "%-24s %-9u %-9u %-9u %-10u %-10u %-10u %-10u\n",
+                pi.parm.name ? pi.parm.name : "", pi.parm.pool_size, pi.parm.num_blks, pi.parm.blk_size,
+                    pi.stat.free, pi.stat.allocated, pi.stat.released, pi.stat.alloc_failed);
+            ++nb;
+        }
+    }
+    bcmcli_session_print(session, "Total memory occupied by all block pools: %u bytes\n", bcmos_total_blk_pool_size);
+    bcmcli_session_print(session, "%d block pools listed\n", nb);
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno _oscli_msg_pool_handler(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    const char *name = bcmcli_parm_is_set(session, &parm[0]) ? (const char *)parm[0].value.string : NULL;
+    const bcmos_msg_pool *mp = NULL;
+    int np = 0;
+
+    bcmcli_session_print(session, "%-24s %-9s %-9s %-10s %-10s %-10s %-10s\n",
+        "name", "size", "data_size", "free", "allocated", "released", "failed");
+    while (bcmos_msg_pool_get_next(&mp) == BCM_ERR_OK)
+    {
+        bcmos_msg_pool_info pi = {};
+
+        bcmos_msg_pool_query(mp, &pi);
+        if (name == NULL || (pi.parm.name && strstr(pi.parm.name, name)))
+        {
+            bcmcli_session_print(session, "%-24s %-9u %-9u %-10u %-10u %-10u %-10u\n",
+                pi.parm.name ? pi.parm.name : "", pi.parm.size, pi.parm.data_size,
+                    pi.stat.free, pi.stat.allocated, pi.stat.released, pi.stat.alloc_failed);
+            ++np;
+        }
+    }
+    bcmcli_session_print(session, "Total memory occupied by all message pools: %u bytes\n", bcmos_total_msg_pool_size);
+    bcmcli_session_print(session, "%d msg pools listed\n", np);
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno _oscli_msg_queue_handler(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    const char *name = bcmcli_parm_is_set(session, &parm[0]) ? (const char *)parm[0].value.string : NULL;
+    const bcmos_msg_queue *mq = NULL;
+    int nq = 0;
+
+    _oscli_print_qinfo_hdr(session, "name                 ");
+    while (bcmos_msg_queue_get_next(&mq) == BCM_ERR_OK)
+    {
+        bcmos_msg_queue_info qi = {};
+
+        bcmos_msg_queue_query(mq, &qi);
+        if (name == NULL || (qi.parm.name && strstr(qi.parm.name, name)))
+        {
+            bcmcli_session_print(session, "%-20s", qi.parm.name ? qi.parm.name : "");
+            _oscli_print_qinfo(session, &qi, " ");
+            ++nq;
+        }
+    }
+    bcmcli_session_print(session, "%d msg queues listed\n", nq);
+
+    return BCM_ERR_OK;
+}
+
+static void _oscli_print_qgroup_info_hdr(bcmcli_session *session)
+{
+    bcmcli_session_print(session, "%-12s %-6s %-9s %-10s %-10s %-10s %-10s %-8s %-8s %-10s congested\n",
+        "name", "queues", "size", "in", "put", "get", "discard", "l_thresh", "h_thresh", "near-full");
+}
+
+static void _oscli_print_qgroup_info(bcmcli_session *session, bcmos_msg_qgroup_info *qi)
+{
+    bcmcli_session_print(session, "%-12s %-6d %-9d %-10u %-10u %-10u %-10u %-8d %-8d %-10u %s\n",
+        qi->parm.name ? qi->parm.name : "", (int)qi->parm.nqueues, (int)qi->parm.size, qi->stat.msg_in,
+        qi->stat.msg_sent, qi->stat.msg_received,
+        qi->stat.msg_discarded, (int)qi->parm.low_wm, (int)qi->parm.high_wm,
+        qi->stat.msg_almost_full, qi->stat.is_congested ? "yes" : "no");
+}
+
+static bcmos_errno _oscli_msg_qgroup_handler(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    const char *name = bcmcli_parm_is_set(session, &parm[0]) ? (const char *)parm[0].value.string : NULL;
+    const bcmos_msg_qgroup *qgrp = NULL;
+    int ngroups = 0;
+
+    _oscli_print_qgroup_info_hdr(session);
+    while (bcmos_msg_qgroup_get_next(&qgrp) == BCM_ERR_OK)
+    {
+        bcmos_msg_qgroup_info qi = {};
+
+        bcmos_msg_qgroup_query(qgrp, &qi);
+        if (name == NULL || (qi.parm.name && strstr(qi.parm.name, name)))
+        {
+            _oscli_print_qgroup_info(session, &qi);
+            ++ngroups;
+        }
+    }
+    bcmcli_session_print(session, "%d msg queue groups listed\n", ngroups);
+
+    return BCM_ERR_OK;
+}
+
+#ifdef BCM_OS_THREADX
+
+extern TX_THREAD __sys_shell__;
+extern TX_THREAD *__usr_shell__;
+
+static bcmos_errno _oscli_sys_handler(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    bcmcli_session_print(session, "Application CLI is suspended. Type \"suspend\" in system shell to resume\n");
+    tx_thread_resume(&__sys_shell__);
+    tx_thread_suspend(tx_thread_identify());
+    tx_thread_wait_abort(tx_thread_identify());
+    bcmcli_session_print(session, "Application CLI is resumed\n");
+    return BCM_ERR_OK;
+}
+#endif
+
+/*
+ * Init / exit interface
+ */
+
+
+bcmos_errno bcmos_cli_init(bcmcli_entry *top_dir)
+{
+    if (os_cli_dir)
+    {
+        return BCM_ERR_ALREADY;
+    }
+
+    /*
+     * rx directory
+     */
+    os_cli_dir = bcmcli_dir_add(top_dir, "os", "OS Abstraction", BCMCLI_ACCESS_GUEST, NULL);
+    BCMOS_CHECK_RETURN_ERROR(!os_cli_dir, BCM_ERR_INTERNAL);
+
+    BCMCLI_MAKE_CMD(os_cli_dir, "trace", "Get/Set trace level", _oscli_trace_handler,
+        BCMCLI_MAKE_PARM_ENUM("level", "Trace level", trace_level_table, BCMCLI_PARM_FLAG_OPTIONAL));
+
+    BCMCLI_MAKE_CMD(os_cli_dir, "task", "Task info", _oscli_task_handler,
+        BCMCLI_MAKE_PARM("name", "Task name or partial name", BCMCLI_PARM_STRING, BCMCLI_PARM_FLAG_OPTIONAL));
+
+    BCMCLI_MAKE_CMD(os_cli_dir, "module", "Module(s)", _oscli_module_handler,
+        BCMCLI_MAKE_PARM_RANGE("id", "Module id", BCMCLI_PARM_NUMBER, BCMCLI_PARM_FLAG_OPTIONAL,
+            BCMOS_MODULE_ID_NONE + 1, BCMOS_MODULE_ID__NUM_OF - 1));
+
+    BCMCLI_MAKE_CMD(os_cli_dir, "blk_pool", "Block pool(s)", _oscli_blk_pool_handler,
+        BCMCLI_MAKE_PARM("name", "Block pool name or partial name", BCMCLI_PARM_STRING, BCMCLI_PARM_FLAG_OPTIONAL));
+
+    BCMCLI_MAKE_CMD(os_cli_dir, "msg_pool", "Message pool(s)", _oscli_msg_pool_handler,
+        BCMCLI_MAKE_PARM("name", "Message pool name or partial name", BCMCLI_PARM_STRING, BCMCLI_PARM_FLAG_OPTIONAL));
+
+    BCMCLI_MAKE_CMD(os_cli_dir, "queue", "Message queue(s)", _oscli_msg_queue_handler,
+        BCMCLI_MAKE_PARM("name", "Message queue name or partial name", BCMCLI_PARM_STRING, BCMCLI_PARM_FLAG_OPTIONAL));
+
+    BCMCLI_MAKE_CMD(os_cli_dir, "qgroup", "Message queue group(s)", _oscli_msg_qgroup_handler,
+        BCMCLI_MAKE_PARM("name", "Message queue group name or partial name", BCMCLI_PARM_STRING, BCMCLI_PARM_FLAG_OPTIONAL));
+
+#ifdef BCM_OS_THREADX
+    BCMCLI_MAKE_CMD_NOPARM(os_cli_dir, "sys", "System shell", _oscli_sys_handler);
+#endif
+
+    return BCM_ERR_OK;
+}
+
+void bcmos_cli_exit(void)
+{
+    if (os_cli_dir)
+    {
+        bcmcli_token_destroy(os_cli_dir);
+        os_cli_dir = NULL;
+    }
+}
diff --git a/bcm68620_release/release/host_customized/os_abstraction/os_cli/bcmos_cli.h b/bcm68620_release/release/host_customized/os_abstraction/os_cli/bcmos_cli.h
new file mode 100644
index 0000000..487952c
--- /dev/null
+++ b/bcm68620_release/release/host_customized/os_abstraction/os_cli/bcmos_cli.h
@@ -0,0 +1,48 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef BCMOS_CLI_H_
+#define BCMOS_CLI_H_
+
+#include <bcmos_system.h>
+#include <bcmcli.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+bcmos_errno bcmos_cli_init(bcmcli_entry *top_dir);
+
+void bcmos_cli_exit(void);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* BCMOS_CLI_H_ */
diff --git a/bcm68620_release/release/host_customized/os_abstraction/posix/bcmos_system.c b/bcm68620_release/release/host_customized/os_abstraction/posix/bcmos_system.c
new file mode 100644
index 0000000..d3cb902
--- /dev/null
+++ b/bcm68620_release/release/host_customized/os_abstraction/posix/bcmos_system.c
@@ -0,0 +1,921 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#include "bcmos_system.h"
+#ifdef BCMOS_MSG_QUEUE_DOMAIN_SOCKET
+#include <sys/un.h>
+#endif
+#include <sys/resource.h>
+
+/* task control blocks */
+extern STAILQ_HEAD(task_list, bcmos_task) task_list;
+
+/* global OS lock */
+extern bcmos_mutex bcmos_res_lock;
+
+/*
+ * Init
+ */
+
+#define TIMER_SIG       SIGRTMIN
+
+/* Initialize system library */
+bcmos_errno bcmos_sys_init(void)
+{
+    return BCM_ERR_OK;
+}
+
+/* Clean-up system library */
+void bcmos_sys_exit(void)
+{
+}
+
+/*
+ * Task management
+ */
+
+/*
+ * Default task handler
+ */
+
+/* Create a new task */
+bcmos_errno bcmos_task_create(bcmos_task *task, const bcmos_task_parm *parm)
+{
+    F_bcmos_task_handler handler;
+    pthread_attr_t pthread_attr;
+    struct sched_param pthread_sched_param = {};
+    int pthread_prio;
+    uint32_t stack_size;
+    void *data;
+    int rc;
+
+    if (!task || !parm)
+        BCMOS_TRACE_RETURN(BCM_ERR_PARM, "task %p, parm %p\n", task, parm);
+    memset(task, 0, sizeof(*task));
+    if (parm->handler)
+    {
+        /* "traditional task */
+        handler = parm->handler;
+        data = (void *)parm->data;
+    }
+    else
+    {
+        /* "integrated" task */
+        handler = bcmos_dft_task_handler;
+        data = task;
+
+        /* Initialize and lock mutex to wait on */
+        rc = bcmos_sem_create(&task->active_sem, 0, task->parm.flags, parm->name);
+        if (rc)
+        {
+            BCMOS_TRACE_ERR("Task %s: can't create active_sem. Error %s (%d)\n",
+                parm->name, bcmos_strerror(rc), rc);
+            return rc;
+        }
+    }
+
+    task->parm = *parm;
+    /* Copy name to make sure that it is not released - in case it was on the stack */
+    if (task->parm.name)
+    {
+        strncpy(task->name, task->parm.name, sizeof(task->name) - 1);
+        task->parm.name = task->name;
+    }
+    bcmos_fastlock_init(&task->active_lock, 0);
+    bcmos_mutex_lock(&bcmos_res_lock);
+    STAILQ_INSERT_TAIL(&task_list, task, list);
+    bcmos_mutex_unlock(&bcmos_res_lock);
+    task->magic = BCMOS_TASK_MAGIC;
+    /* pthread priorities are 1..32, 32 being the highest */
+    pthread_prio = 32 - (int)parm->priority;
+    if (pthread_prio <= 0)
+        pthread_prio = 1;
+    stack_size = PTHREAD_STACK_MIN;
+    if (parm->stack_size && parm->stack_size > PTHREAD_STACK_MIN)
+        stack_size = parm->stack_size;
+    rc = pthread_attr_init(&pthread_attr);
+    pthread_sched_param.sched_priority = pthread_prio;
+    rc = rc ? rc : pthread_attr_setinheritsched(&pthread_attr, PTHREAD_EXPLICIT_SCHED);
+    rc = rc ? rc : pthread_attr_setschedpolicy(&pthread_attr, SCHED_RR);
+    rc = rc ? rc : pthread_attr_setschedparam(&pthread_attr, &pthread_sched_param);
+    rc = rc ? rc : pthread_attr_setstacksize(&pthread_attr, stack_size);
+    rc = rc ? rc : pthread_create(&task->sys_task.t, &pthread_attr, (void *(*)(void *))handler, data);
+    pthread_attr_destroy(&pthread_attr);
+    if (rc == EPERM)
+    {
+        BCMOS_TRACE_INFO("Thread %s: priority %d is ignored. Start as root to honor priorities\n",
+            parm->name, (int)parm->priority);
+        rc = pthread_create(&task->sys_task.t, NULL, (void *(*)(void *))handler, data);
+    }
+    if (rc)
+    {
+        bcmos_mutex_lock(&bcmos_res_lock);
+        STAILQ_REMOVE(&task_list, task, bcmos_task, list);
+        bcmos_mutex_unlock(&bcmos_res_lock);
+        task->magic = 0;
+        if (!parm->handler)
+        {
+            bcmos_sem_destroy(&task->active_sem);
+        }
+        BCMOS_TRACE_RETURN(BCM_ERR_SYSCALL_ERR, "%s (%d)\n", strerror(rc), rc);
+    }
+    return BCM_ERR_OK;
+}
+
+/* Destroy task */
+bcmos_errno bcmos_task_destroy(bcmos_task *task)
+{
+    void *res;
+    int rc_cancel;
+    int rc;
+
+    if (task->magic != BCMOS_TASK_MAGIC)
+    {
+        return BCM_ERR_PARM;
+    }
+    task->destroy_request = BCMOS_TRUE;
+    task->magic = BCMOS_TASK_MAGIC_DESTROYED;
+    bcmos_mutex_lock(&bcmos_res_lock);
+    STAILQ_REMOVE(&task_list, task, bcmos_task, list);
+    bcmos_mutex_unlock(&bcmos_res_lock);
+    /* The task may be waiting on semaphore. Kick it */
+    if (!task->parm.handler)
+    {
+        bcmos_sem_post(&task->active_sem);
+    }
+    rc_cancel = pthread_cancel(task->sys_task.t);
+    rc = pthread_join(task->sys_task.t, &res);
+    return (rc || ((!rc_cancel) && (res != PTHREAD_CANCELED))) ? BCM_ERR_SYSCALL_ERR : 0;
+}
+
+/** Get current task
+ * \returns task handle or NULL if not in task context
+ */
+bcmos_task *bcmos_task_current(void)
+{
+    pthread_t pt = pthread_self();
+    bcmos_task *t, *tmp;
+
+    STAILQ_FOREACH_SAFE(t, &task_list, list, tmp)
+    {
+        if (pthread_equal(pt, t->sys_task.t))
+            break;
+    }
+    return t;
+}
+
+/*
+ * Recursive mutex
+ */
+
+/* Create recursive mutex */
+bcmos_errno bcmos_mutex_create(bcmos_mutex *mutex, uint32_t flags, const char *name)
+{
+    int err;
+    err = pthread_mutexattr_init(&mutex->attr);
+    err = err ? err : pthread_mutexattr_settype(&mutex->attr, PTHREAD_MUTEX_RECURSIVE_NP);
+    err = err ? err : pthread_mutex_init(&mutex->m, &mutex->attr);
+    if (err)
+        BCMOS_TRACE_RETURN(BCM_ERR_SYSCALL_ERR, "errno=%s\n", strerror(err));
+    return BCM_ERR_OK;
+}
+
+/** Destroy mutex
+ * \param[in]   mutex   Mutex control block
+ */
+void bcmos_mutex_destroy(bcmos_mutex *mutex)
+{
+    pthread_mutex_destroy(&mutex->m);
+    pthread_mutexattr_destroy(&mutex->attr);
+}
+
+/* calculate absolute time equal to the current time + timeout */
+static inline void _bcmos_get_abs_time(struct timespec *ts, uint32_t timeout)
+{
+    int rc;
+    rc = clock_gettime(CLOCK_REALTIME, ts);
+    BUG_ON(rc);
+    ts->tv_sec += timeout / 1000000;
+    ts->tv_nsec += (timeout % 1000000) * 1000;
+    if (ts->tv_nsec > 1000000000)
+    {
+        ts->tv_sec += ts->tv_nsec / 1000000000;
+        ts->tv_nsec %= 1000000000;
+    }
+}
+
+/** Lock mutex
+ */
+void bcmos_mutex_lock(bcmos_mutex *mutex)
+{
+    int rc;
+    rc = pthread_mutex_lock(&mutex->m);
+    BUG_ON(rc);
+    return;
+}
+
+/** Release mutex
+ * \param[in]   mutex   Mutex control block
+ */
+void bcmos_mutex_unlock(bcmos_mutex *mutex)
+{
+    int rc;
+    rc = pthread_mutex_unlock(&mutex->m);
+    if (rc)
+        BCMOS_TRACE_ERR("pthread_mutex_unlock()->%d\n", rc);
+    BUG_ON(rc);
+}
+
+/*
+ * Semaphores
+ * Most of semaphore functions are inline
+ */
+
+/* Create semaphore */
+bcmos_errno bcmos_sem_create(bcmos_sem *sem, uint32_t count, uint32_t flags, const char *name)
+{
+    sem_init(&sem->s, 0, count);
+    return BCM_ERR_OK;
+}
+
+/* Destroy semaphore */
+void bcmos_sem_destroy(bcmos_sem *sem)
+{
+    sem_destroy(&sem->s);
+}
+
+/* Decrement semaphore counter. Wait if the counter is 0 */
+bcmos_errno bcmos_sem_wait(bcmos_sem *sem, uint32_t timeout)
+{
+    int rc;
+    struct timespec ts;
+
+    /* Init end time if necessary */
+    if (timeout && timeout != BCMOS_WAIT_FOREVER)
+    {
+        _bcmos_get_abs_time(&ts, timeout);
+    }
+
+    do
+    {
+        if (timeout == BCMOS_WAIT_FOREVER)
+        {
+            rc = sem_wait(&sem->s);
+        }
+        else if (timeout)
+        {
+            rc = sem_timedwait(&sem->s, &ts);
+        }
+        else
+        {
+            rc = sem_trywait(&sem->s);
+        }
+    } while (rc && errno == EINTR);
+
+    if (rc)
+    {
+        bcmos_errno err;
+
+        rc = errno;
+        if (rc == ETIMEDOUT)
+        {
+            err = BCM_ERR_TIMEOUT;
+        }
+        else
+        {
+            err = BCM_ERR_INTERNAL;
+            BCMOS_TRACE_ERR("sem_wait()->%d\n", rc);
+        }
+        return err;
+    }
+
+    return BCM_ERR_OK;
+}
+
+
+/*
+ * Timers
+ */
+
+/** Get current timestamp
+ * \returns the current system timestamp (us)
+ */
+uint32_t bcmos_timestamp(void)
+{
+    struct timespec tp;
+    clock_gettime(CLOCK_MONOTONIC, &tp);
+    return (tp.tv_sec * 1000000 + tp.tv_nsec / 1000);
+}
+
+/** Get current timestamp - 64 bit
+ * \returns the current system timestamp (us)
+ */
+uint64_t bcmos_timestamp64(void)
+{
+    struct timespec tp;
+    clock_gettime(CLOCK_MONOTONIC, &tp);
+    return ((uint64_t)tp.tv_sec * 1000000LL + (uint64_t)tp.tv_nsec / 1000LL);
+}
+
+/*
+ * Timer handlers
+ */
+
+
+
+/* For posix we must create timer task, because there is no way
+ * to enforce protection between a signal handler and a thread
+ */
+static bcmos_task _bcmos_timer_task;
+static sem_t _bcmos_timer_lock;
+
+static int _bcmos_tmr_task_handler(long data)
+{
+    bcmos_sys_timer *timer = (bcmos_sys_timer *)data;
+    bcmos_task *this_task = bcmos_task_current();
+
+    while(!this_task->destroy_request)
+    {
+        sem_wait(&_bcmos_timer_lock);
+        timer->handler(timer->data);
+    }
+    this_task->destroyed = BCMOS_TRUE;
+
+    return 0;
+}
+
+/* timer signal handler */
+static void timer_sig_handler(int sig, siginfo_t *si, void *uc)
+{
+    BUG_ON(si->si_code != SI_TIMER);
+    sem_post(&_bcmos_timer_lock);
+}
+
+/* Create timer */
+bcmos_errno bcmos_sys_timer_create(bcmos_sys_timer *timer, bcmos_sys_timer_handler handler, void *data)
+{
+    static bcmos_task_parm tmr_task_parm = {
+        .name = "tmr_task",
+        .priority = BCMOS_TASK_PRIORITY_0,
+        .handler = _bcmos_tmr_task_handler
+    };
+    bcmos_errno rc;
+
+    struct sigaction sa;
+    struct sigevent sev = {};
+
+    if (!timer || !handler)
+        BCMOS_TRACE_RETURN(BCM_ERR_PARM, "timer %p, handler %p\n", timer, handler);
+
+    timer->handler = handler;
+    timer->data = data;
+
+    sem_init(&_bcmos_timer_lock, 0, 0);
+    tmr_task_parm.data = (long)timer;
+    rc = bcmos_task_create(&_bcmos_timer_task, &tmr_task_parm);
+    if (rc)
+        BCMOS_TRACE_RETURN(rc, "Can't create timer task\n");
+
+    sa.sa_flags = SA_SIGINFO;
+    sa.sa_sigaction = timer_sig_handler;
+    sigemptyset(&sa.sa_mask);
+    if (sigaction(TIMER_SIG, &sa, NULL) == -1)
+        perror("sigaction");
+    /* Prevent timer signal from interrupting system calls */
+    if (siginterrupt(TIMER_SIG, 0) == -1)
+        perror("siginterrupt");
+
+   /* Create librt timer */
+   sev.sigev_notify = SIGEV_SIGNAL;
+   sev.sigev_signo = TIMER_SIG;
+   sev.sigev_value.sival_ptr = timer;
+   if (timer_create(CLOCK_REALTIME, &sev, &timer->t) == -1)
+       BCMOS_TRACE_RETURN(BCM_ERR_SYSCALL_ERR, "errno %s\n", strerror(errno));
+
+   return BCM_ERR_OK;
+}
+
+/* Destroy timer */
+void bcmos_sys_timer_destroy(bcmos_sys_timer *timer)
+{
+    timer_delete(timer->t);
+    sem_destroy(&_bcmos_timer_lock);
+    bcmos_task_destroy(&_bcmos_timer_task);
+}
+
+/* (Re)start timer */
+void bcmos_sys_timer_start(bcmos_sys_timer *timer, uint32_t delay)
+{
+    struct itimerspec its;
+
+    its.it_value.tv_sec = delay / 1000000;
+    its.it_value.tv_nsec = (delay % 1000000) * 1000;
+    its.it_interval.tv_sec = 0;
+    its.it_interval.tv_nsec = 0;
+    if (timer_settime(timer->t, 0, &its, NULL) == -1)
+    {
+        BCMOS_TRACE_ERR("timer_settime errno %s\n", strerror(errno));
+        BUG();
+    }
+}
+
+/* Stop timer if running */
+void bcmos_sys_timer_stop(bcmos_sys_timer *timer)
+{
+    struct itimerspec its;
+
+    BUG_ON(!timer);
+    memset(&its, 0, sizeof(its));
+    timer_settime(timer->t, 0, &its, NULL);
+}
+
+
+/* Suspend current task for a time */
+void bcmos_usleep(uint32_t us)
+{
+    uint32_t ts = bcmos_timestamp();
+    uint32_t tse = ts + us;
+    int32_t d = (us > 1000000) ? 1000000 : us;
+
+    do
+    {
+        usleep(d);
+        d = tse - bcmos_timestamp();
+        if (d > 1000000) d = 1000000;
+    } while (d > 0);
+}
+
+/*
+ * Memory management
+ */
+
+/* Allocate memory from the main heap */
+void *bcmos_alloc(uint32_t size)
+{
+    return malloc(size);
+}
+
+/* Release memory to the main pool */
+void bcmos_free(void *ptr)
+{
+    free(ptr);
+}
+
+/*
+ * Byte memory pool
+ */
+
+/* Memory block header */
+typedef struct bcmos_byte_memblk
+{
+    bcmos_byte_pool *pool;      /** pool that owns the block */
+    uint32_t size;              /** block size (bytes) including bcmos_byte_memblk header */
+#ifdef BCMOS_MEM_DEBUG
+    uint32_t magic;             /** magic number */
+#define BCMOS_MEM_MAGIC_ALLOC   (('m'<<24) | ('b' << 16) | ('l' << 8) | 'k')
+#define BCMOS_MEM_MAGIC_FREE    (('m'<<24) | ('b' << 16) | ('l' << 8) | '~')
+#endif
+} bcmos_byte_memblk;
+
+/* Create byte memory pool */
+bcmos_errno bcmos_byte_pool_create(bcmos_byte_pool *pool, const bcmos_byte_pool_parm *parm)
+{
+    if (!pool || !parm)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_PARM, "pool %p, parm %p\n", pool, parm);
+    }
+
+    BCM_MEMZERO_STRUCT(pool);
+    pool->parm = *parm;
+    if (!pool->parm.size)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_PARM, "size %u\n", parm->size);
+    }
+#ifdef BCMOS_MEM_DEBUG
+    pool->magic = BCMOS_BYTE_POOL_VALID;
+#endif
+    return BCM_ERR_OK;
+}
+
+/* Destroy memory pool */
+bcmos_errno bcmos_byte_pool_destroy(bcmos_byte_pool *pool)
+{
+    if (pool->allocated)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_STATE, "%u bytes of memory are still allocated from the pool %s\n",
+            pool->allocated, pool->parm.name);
+    }
+#ifdef BCMOS_MEM_DEBUG
+    pool->magic = BCMOS_BYTE_POOL_DELETED;
+#endif
+    return BCM_ERR_OK;
+}
+
+/* Allocate memory from memory pool */
+void *bcmos_byte_pool_alloc(bcmos_byte_pool *pool, uint32_t size)
+{
+    bcmos_byte_memblk *blk;
+    uint32_t byte_size;
+    void *ptr;
+
+#ifdef BCMOS_MEM_DEBUG
+    BUG_ON(pool->magic != BCMOS_BYTE_POOL_VALID);
+#endif
+
+    if (size + pool->allocated > pool->parm.size)
+        return NULL;
+
+    byte_size = size + sizeof(bcmos_byte_memblk);
+#ifdef BCMOS_MEM_DEBUG
+    byte_size += sizeof(uint32_t); /* block suffix */
+#endif
+    /* ToDo: Maintain LL of allocated blocks */
+    blk = (bcmos_byte_memblk *)malloc(byte_size);
+    if (!blk)
+        return NULL;
+    ptr = (void *)(blk + 1);
+    blk->size = byte_size;
+    pool->allocated += byte_size;
+    blk->pool = pool;
+#ifdef BCMOS_MEM_DEBUG
+    blk->magic = BCMOS_MEM_MAGIC_ALLOC;
+    *(uint32_t *)((long)blk + byte_size - sizeof(uint32_t)) = BCMOS_MEM_MAGIC_ALLOC;
+#endif
+
+    return ptr;
+}
+
+/* Release memory allocated using bcmos_byte_pool_alloc() */
+void bcmos_byte_pool_free(void *ptr)
+{
+    bcmos_byte_memblk *blk;
+    bcmos_byte_pool *pool;
+
+    BUG_ON(!ptr);
+    blk = (bcmos_byte_memblk *)((long)ptr - sizeof(bcmos_byte_memblk));
+    pool = blk->pool;
+#ifdef BCMOS_MEM_DEBUG
+    BUG_ON(pool->magic != BCMOS_BYTE_POOL_VALID);
+    BUG_ON(blk->magic != BCMOS_MEM_MAGIC_ALLOC);
+    BUG_ON(*(uint32_t *)((long)blk + blk->size - sizeof(uint32_t)) != BCMOS_MEM_MAGIC_ALLOC);
+    blk->magic = BCMOS_MEM_MAGIC_FREE;
+#endif
+    pool->allocated -= blk->size;
+    free(blk);
+}
+
+void _bcmos_backtrace(void)
+{
+    void *array[32];
+    size_t size;
+    char **strings;
+    size_t i;
+
+    size = backtrace(array, sizeof(array)/sizeof(array[0]));
+    strings = backtrace_symbols(array, size);
+
+    printf("Obtained %zd stack frames.\n", size);
+
+    for (i = 0; i < size; i++)
+        printf("%s\n", strings[i]);
+
+    free(strings);
+}
+
+/* stub for int enable */
+void bcmos_int_enable(int irq)
+{
+}
+
+void bcmos_int_disable(int irq)
+{
+}
+
+/* stub for int connect */
+int bcmos_int_connect(int irq, int cpu, int flags,
+    int (*isr)(int irq, void *priv), const char *name, void *priv)
+{
+    return 0;
+}
+
+/* Functions common for domain socket and UDP socket - based message queues */
+#if defined(BCMOS_MSG_QUEUE_DOMAIN_SOCKET) || defined(BCMOS_MSG_QUEUE_UDP_SOCKET)
+
+/** "send" to socket */
+static bcmos_errno _bcmos_socket_send(bcmos_msg_queue *queue, uint8_t *buf, uint32_t buf_length)
+{
+    int rc;
+    /* Message queue without remote endpoint address doesn't support transmit */
+    if (!queue->ep_extra_data_size)
+        return BCM_ERR_NOT_SUPPORTED;
+    rc = sendto(queue->ep, buf, buf_length, 0,
+        (struct sockaddr *)queue->ep_extra_data, queue->ep_extra_data_size);
+    return (rc == buf_length) ? BCM_ERR_OK : BCM_ERR_COMM_FAIL;
+}
+
+/** "recv" from socket */
+static bcmos_errno _bcmos_socket_recv(bcmos_msg_queue *queue, uint32_t timeout, uint8_t **buf, uint32_t *buf_length)
+{
+    int rc;
+    int wait = 0;
+
+    /* Message queue without local endpoint address doesn't support receive */
+    if (!queue->q.parm.local_ep_address)
+        return BCM_ERR_NOT_SUPPORTED;
+
+    if (timeout && timeout != BCMOS_WAIT_FOREVER)
+    {
+        fd_set read_fds;
+        struct timeval tv;
+
+        FD_ZERO(&read_fds);
+        FD_SET(queue->ep, &read_fds);
+        tv.tv_sec = timeout / 1000000;
+        tv.tv_usec = (timeout % 1000000) * 1000;
+        rc = select(queue->ep + 1, &read_fds, NULL, NULL, &tv);
+        if (rc < 0)
+        {
+            return BCM_ERR_COMM_FAIL;
+        }
+        if (!rc || !FD_ISSET(queue->ep, &read_fds))
+            return BCM_ERR_TIMEOUT;
+        wait = MSG_DONTWAIT;
+    }
+
+    rc = recv(queue->ep, queue->recv_buf, queue->q.parm.max_mtu, wait);
+    if (rc < 0)
+    {
+        return BCM_ERR_COMM_FAIL;
+    }
+    if (rc == 0)
+        return BCM_ERR_NOENT;
+
+    *buf = queue->recv_buf;
+    *buf_length = rc;
+    return BCM_ERR_OK;
+}
+
+
+static bcmos_errno _bcmos_socket_close(bcmos_msg_queue *queue)
+{
+    /* Close domain socket */
+    if (queue->ep > 0)
+    {
+        close(queue->ep);
+    }
+    if (queue->ep_extra_data)
+    {
+        bcmos_free(queue->ep_extra_data);
+    }
+    return BCM_ERR_OK;
+}
+
+
+/* Pack message for over-the-socket transmission.
+ * This function is good for case when both queue ends are on the same CPU
+ * and there is no need to do any translation.
+ */
+static bcmos_errno _bcmos_transparent_pack(bcmos_msg_queue *queue, bcmos_msg *msg, uint8_t **buf, uint32_t *buf_length)
+{
+    uint32_t size = BCMOS_MSG_HDR_SIZE + msg->size;
+
+    if (size > queue->q.parm.max_mtu)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_OVERFLOW, "Attempt to send message longer than configured max_mtu %u > %u\n",
+            size, queue->q.parm.max_mtu);
+    }
+    bcmos_msg_hdr_pack(msg, queue->send_buf, msg->size);
+    if (msg->size)
+    {
+        BUG_ON(msg->data == NULL);
+        memcpy(queue->send_buf + BCMOS_MSG_HDR_SIZE, msg->data, msg->size);
+    }
+    *buf = queue->send_buf;
+    *buf_length = size;
+    return BCM_ERR_OK;
+}
+
+/** "unpack" message. In case of domain socket both queue ends are in the same CPU.
+ * Message is sent as-is
+ */
+static bcmos_errno _bcmos_transparent_unpack(bcmos_msg_queue *queue, uint8_t *buf, uint32_t buf_length, bcmos_msg **msg)
+{
+    bcmos_msg *m;
+
+    if (buf_length < BCMOS_MSG_HDR_SIZE)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_INTERNAL, "Received message is too short (%u)\n", buf_length);
+    }
+
+    /* Adjust buf_length to account for difference in packed and unpacked message header sizes */
+    buf_length -= BCMOS_MSG_HDR_SIZE;
+    buf_length += sizeof(bcmos_msg);
+
+    m = bcmos_alloc(buf_length);
+    if (!m)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_NOMEM, "Received message discarded: %u bytes\n", buf_length);
+    }
+
+    bcmos_msg_hdr_unpack(buf, m);
+    m->release = NULL;
+    m->data_release = NULL;
+    if (m->size != buf_length - sizeof(bcmos_msg))
+    {
+        BCMOS_TRACE_ERR("Received message is insane. Expected data length %u, got %u\n",
+            m->size, buf_length - sizeof(bcmos_msg));
+        bcmos_free(m);
+        return BCM_ERR_INTERNAL;
+    }
+    if (m->size)
+    {
+        m->data = m->start = (void *)(m + 1);
+        memcpy(m->data, &buf[BCMOS_MSG_HDR_SIZE], m->size);
+    }
+    else
+    {
+        m->data = m->start = NULL;
+    }
+    *msg = m;
+
+    return BCM_ERR_OK;
+}
+
+
+#endif
+
+/* Domain-socket-based inter-process communication */
+#ifdef BCMOS_MSG_QUEUE_DOMAIN_SOCKET
+
+bcmos_errno bcmos_sys_msg_queue_domain_socket_open(bcmos_msg_queue *queue)
+{
+    struct sockaddr_un sa;
+
+    /* Open domain socket */
+    queue->ep = socket(AF_UNIX, SOCK_DGRAM, 0);
+    if (queue->ep < 0)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_PARM, "Can't create domain socket. error %s\n", strerror(errno));
+    }
+
+    memset(&sa, 0, sizeof(sa));
+    sa.sun_family = AF_UNIX;
+
+    /* If local_ep_address is set - the queue supports receive */
+    if (queue->q.parm.local_ep_address)
+    {
+        strncpy(sa.sun_path, queue->q.parm.local_ep_address, sizeof(sa.sun_path) - 1);
+        /* In linux path can start from 0 character */
+        if (!sa.sun_path[0])
+        {
+            strncpy(&sa.sun_path[1], &queue->q.parm.local_ep_address[1], sizeof(sa.sun_path) - 1);
+        }
+        if (bind(queue->ep, (struct sockaddr *)&sa, sizeof(sa)) < 0)
+        {
+            int err = errno;
+            close(queue->ep);
+            BCMOS_TRACE_RETURN(BCM_ERR_PARM, "Can't bind domain socket to %s. error %s\n",
+                queue->q.parm.local_ep_address, strerror(err));
+        }
+    }
+
+    /* If remote_ep_address is set - the queue supports transmit */
+    if (queue->q.parm.remote_ep_address)
+    {
+        queue->ep_extra_data = bcmos_calloc(sizeof(struct sockaddr_un));
+        if (!queue->ep_extra_data)
+        {
+            close(queue->ep);
+            return BCM_ERR_NOMEM;
+        }
+        strncpy(sa.sun_path, queue->q.parm.remote_ep_address, sizeof(sa.sun_path) - 1);
+        /* In linux path can start from 0 character */
+        if (!sa.sun_path[0])
+        {
+            strncpy(&sa.sun_path[1], &queue->q.parm.remote_ep_address[1], sizeof(sa.sun_path) - 1);
+        }
+        memcpy(queue->ep_extra_data, &sa, sizeof(sa));
+        queue->ep_extra_data_size = sizeof(sa);
+    }
+
+    /* Set callbacks */
+    queue->q.parm.close = _bcmos_socket_close;
+    queue->q.parm.send = _bcmos_socket_send;
+    queue->q.parm.recv = _bcmos_socket_recv;
+    if (!queue->q.parm.pack)
+        queue->q.parm.pack = _bcmos_transparent_pack;
+    if (!queue->q.parm.unpack)
+        queue->q.parm.unpack = _bcmos_transparent_unpack;
+
+    return BCM_ERR_OK;
+}
+
+#endif
+
+/* UDP-socket-based inter-process communication */
+#ifdef BCMOS_MSG_QUEUE_UDP_SOCKET
+
+static bcmos_errno _bcmos_parse_ip_port(const char *s, struct sockaddr_in *sa)
+{
+    uint32_t ip;
+    int n;
+    uint32_t ip1, ip2, ip3, ip4, port;
+
+    n = sscanf(s, "%u.%u.%u.%u:%u", &ip1, &ip2, &ip3, &ip4, &port);
+    if (n != 5 || ip1 > 0xff || ip2 > 0xff || ip3 > 0xff || ip4 > 0xff || port > 0xffff)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_PARM, "Can't parse %s. Must be ip_address:port\n", s);
+    }
+    ip = (ip1 << 24) | (ip2 << 16) | (ip3 << 8) | ip4;
+    sa->sin_port = htons(port);
+    sa->sin_addr.s_addr = htonl(ip);
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcmos_sys_msg_queue_udp_socket_open(bcmos_msg_queue *queue)
+{
+    struct sockaddr_in sa;
+    bcmos_errno rc;
+
+    /* Open UDP socket */
+    queue->ep = socket(AF_INET, SOCK_DGRAM, 0);
+    if (queue->ep < 0)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_PARM, "Can't create UDP socket. error %s\n", strerror(errno));
+    }
+
+    memset(&sa, 0, sizeof(sa));
+    sa.sin_family = AF_INET;
+
+    /* If local_ep_address is set - the queue supports receive */
+    if (queue->q.parm.local_ep_address)
+    {
+        rc = _bcmos_parse_ip_port(queue->q.parm.local_ep_address, &sa);
+        if (rc)
+            return rc;
+        if (!sa.sin_addr.s_addr)
+            sa.sin_addr.s_addr = INADDR_ANY;
+        if (bind(queue->ep, (struct sockaddr *)&sa, sizeof(sa)) < 0)
+        {
+            int err = errno;
+            close(queue->ep);
+            BCMOS_TRACE_RETURN(BCM_ERR_PARM, "Can't bind UDP socket to %s. error %s\n",
+                queue->q.parm.local_ep_address, strerror(err));
+        }
+    }
+
+    /* If remote_ep_address is set - the queue supports transmit */
+    if (queue->q.parm.remote_ep_address)
+    {
+        rc = _bcmos_parse_ip_port(queue->q.parm.remote_ep_address, &sa);
+        if (rc)
+            return rc;
+        queue->ep_extra_data = bcmos_calloc(sizeof(sa));
+        if (!queue->ep_extra_data)
+        {
+            close(queue->ep);
+            return BCM_ERR_NOMEM;
+        }
+        memcpy(queue->ep_extra_data, &sa, sizeof(sa));
+        queue->ep_extra_data_size = sizeof(sa);
+    }
+
+    /* Set callbacks */
+    queue->q.parm.close = _bcmos_socket_close;
+    queue->q.parm.send = _bcmos_socket_send;
+    queue->q.parm.recv = _bcmos_socket_recv;
+    if (!queue->q.parm.pack)
+        queue->q.parm.pack = _bcmos_transparent_pack;
+    if (!queue->q.parm.unpack)
+        queue->q.parm.unpack = _bcmos_transparent_unpack;
+
+    return BCM_ERR_OK;
+}
+#endif
diff --git a/bcm68620_release/release/host_customized/os_abstraction/posix/bcmos_system.h b/bcm68620_release/release/host_customized/os_abstraction/posix/bcmos_system.h
new file mode 100644
index 0000000..9dc902e
--- /dev/null
+++ b/bcm68620_release/release/host_customized/os_abstraction/posix/bcmos_system.h
@@ -0,0 +1,301 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+/*
+ * bcmos_system.h
+ * Maple System Services
+ * posix port: simulation
+ */
+
+#ifndef BCMOS_SYSTEM_H_
+#define BCMOS_SYSTEM_H_
+
+#include <stdlib.h>
+#include <string.h>
+#include <strings.h>
+#include <stdio.h>
+#include <assert.h>
+#include <stdint.h>
+#include <ctype.h>
+#include <stddef.h>
+#include <unistd.h>
+#include <errno.h>
+#include <pthread.h>
+#include <semaphore.h>
+#include <signal.h>
+#include <execinfo.h>
+#include <limits.h>
+#include <stdarg.h>
+#include <sys/select.h>
+#include <sys/time.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+
+/* posix port has only been tested in linux user space */
+#define LINUX_USER_SPACE
+
+/* Re-define GNU typeof as ISO __typeof__ */
+#define typeof __typeof__
+
+void _bcmos_backtrace(void);
+
+#define BUG_ON_PRINT(condition, fmt, args...) \
+    do \
+    { \
+        if (condition) \
+        { \
+            BCMOS_TRACE_ERR(fmt, ##args); \
+            assert(!(condition)); \
+        } \
+    } while (0)
+
+#define BUG_ON(condition)     BUG_ON_PRINT((condition), "BUG in %s %d!\n", __FUNCTION__, __LINE__)
+#define BUG()                 BUG_ON(1)
+#define BUG_UNLESS(condition) BUG_ON(!(condition))
+
+/* If 'err' is not BCM_ERR_OK, there is a bug in the software - halt and print the specified message */
+#define BUG_ON_ERROR(err, fmt, args...) \
+    BUG_ON_PRINT((err) != BCM_ERR_OK, \
+        "%s:%d: err=%s (%d): " fmt, \
+        __FUNCTION__, __LINE__, bcmos_strerror(err), (err), ##args)
+
+/* Specify here which system functions are inlined */
+
+#define BCMOS_FASTLOCK_INLINE
+/* #define BCMOS_SEM_WAIT_INLINE */
+#define BCMOS_SEM_POST_INLINE
+#define BCMOS_TRACE_PRINTF
+/* #define BCMOS_BYTE_POOL_ALLOC_FREE_INLINE */
+/* #define BCMOS_MALLOC_FREE_INLINE */
+/* #define BCMOS_CALLOC_INLINE */
+#define BCMOS_DMA_ALLOC_FREE_INLINE
+#define BCMOS_VIRT_TO_PHYS_INLINE
+#define BCMOS_CACHE_INLINE
+
+#include "bcmos_common.h"
+
+/* posix-specific stuff */
+
+/*
+ * Synchronization
+ */
+
+/** \addtogroup system_mutex
+ * @{
+ */
+
+/** Mutex control block */
+struct bcmos_mutex
+{
+    pthread_mutex_t m;          /**< pthread mutex */
+    pthread_mutexattr_t attr;   /**< pthread mutex attribute */
+};
+
+/** @} system_mutex */
+
+/** \addtogroup system_fastlock
+ * @{
+ */
+
+/** Fast lock control block */
+struct bcmos_fastlock
+{
+    bcmos_mutex m;
+};
+
+/** Fastlock initializer. Can be used instead of calling bcmos_fastlock_init() */
+#define BCMOS_FASTLOCK_INITIALIZER      { { PTHREAD_MUTEX_INITIALIZER } }
+
+/* Init fastlock */
+static inline void bcmos_fastlock_init(bcmos_fastlock *lock, uint32_t flags)
+{
+    bcmos_mutex_create(&lock->m, 0, NULL);
+}
+
+/* Take fast lock */
+static inline long bcmos_fastlock_lock(bcmos_fastlock *lock)
+{
+    bcmos_mutex_lock(&lock->m);
+    return 0;
+}
+
+/* Release fast lock */
+static inline void bcmos_fastlock_unlock(bcmos_fastlock *lock, long flags)
+{
+    bcmos_mutex_unlock(&lock->m);
+}
+
+/** @} system_fastlock */
+
+/** \addtogroup system_sem
+ * @{
+ */
+
+/** Semaphore control block */
+struct bcmos_sem
+{
+    sem_t s;            /**< pthread semaphore */
+};
+
+/* Increment semaphore counter */
+static inline void bcmos_sem_post(bcmos_sem *sem)
+{
+    sem_post(&sem->s);
+}
+
+/** @} system_sem */
+
+/** \addtogroup system_timer
+ * @{
+ */
+
+/** System timer */
+struct bcmos_sys_timer
+{
+    timer_t t;                          /**< librt timer */
+    bcmos_sys_timer_handler handler;    /**< Timer handler */
+    void *data;                         /**< Parameter to be passed to the handler */
+};
+
+/** @} system_timer */
+
+/** \addtogroup system_task
+ * @{
+ */
+
+/** OS-specific task control block extension */
+typedef struct bcmos_sys_task
+{
+    pthread_t t;                        /**< posix pthread */
+} bcmos_sys_task;
+
+/** @} system_task */
+
+/** \addtogroup byte_pool
+ * @{
+ */
+
+/** Memory pool control block */
+struct bcmos_byte_pool
+{
+    bcmos_byte_pool_parm parm;  /**< Pool parameters */
+    uint32_t allocated;         /**< Number of bytes allocated */
+#ifdef BCMOS_MEM_DEBUG
+    uint32_t magic;             /**< magic number */
+#define BCMOS_BYTE_POOL_VALID           (('b'<<24) | ('y' << 16) | ('p' << 8) | 'o')
+#define BCMOS_BYTE_POOL_DELETED         (('b'<<24) | ('y' << 16) | ('p' << 8) | '~')
+#endif
+};
+
+/** @} */
+
+/* Print */
+#define bcmos_sys_vprintf(fmt, args)        vprintf(fmt, args)
+
+/* A few macros to enable linux kernel space compilation */
+#define EXPORT_SYMBOL(_sym)
+
+/*
+ * The following low-level functions are mostly for simulation
+ */
+
+/*
+ * DMA-able memory allocation
+ */
+
+/* Allocate DMA-able memory */
+static inline void *bcmos_dma_alloc(uint8_t device, uint32_t size)
+{
+    return bcmos_alloc(size);
+}
+
+/* Release DMA-able memory */
+static inline void bcmos_dma_free(uint8_t device, void *ptr)
+{
+    bcmos_free(ptr);
+}
+
+/* Convert virtual address to physical address */
+static inline unsigned long bcmos_virt_to_phys(void *va)
+{
+    return (unsigned long)(va);
+}
+
+/* Invalidate address area in data cache. Dirty cache lines content is discarded. */
+static inline void bcmos_dcache_inv(void *start, uint32_t size)
+{
+}
+
+/* Flush address area in data cache. Dirty cache lines are committed to memory. */
+static inline void bcmos_dcache_flush(void *start, uint32_t size)
+{
+}
+
+/* write barrier */
+static inline void bcmos_barrier(void)
+{
+}
+
+static inline void bcm_pci_write32(volatile uint32_t *address, uint32_t value)
+{
+}
+
+static inline uint32_t bcm_pci_read32(const volatile uint32_t *address)
+{
+	return -1;
+}
+
+/* Check in-irq status */
+static inline bcmos_bool is_irq_mode(void)
+{
+    return BCMOS_FALSE;
+}
+
+/* Check if interrupts are disabled */
+static inline bcmos_bool is_irq_disabled(void)
+{
+    return BCMOS_FALSE;
+}
+
+/*
+ * Internal (to OS abstraction) functions for messaging over domain and UDP sockets
+ */
+#ifdef BCMOS_MSG_QUEUE_DOMAIN_SOCKET
+bcmos_errno bcmos_sys_msg_queue_domain_socket_open(bcmos_msg_queue *queue);
+#endif
+
+#ifdef BCMOS_MSG_QUEUE_UDP_SOCKET
+bcmos_errno bcmos_sys_msg_queue_udp_socket_open(bcmos_msg_queue *queue);
+#endif
+
+/* 2nd part of OS-independent declarations */
+#include "bcmos_common2.h"
+
+#endif /* BCMOS_SYSTEM_H_ */
diff --git a/bcm68620_release/release/host_customized/os_abstraction/vxworks55/bcmos_system.c b/bcm68620_release/release/host_customized/os_abstraction/vxworks55/bcmos_system.c
new file mode 100644
index 0000000..645c8d0
--- /dev/null
+++ b/bcm68620_release/release/host_customized/os_abstraction/vxworks55/bcmos_system.c
@@ -0,0 +1,742 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#include "bcmos_system.h"
+#include <vxWorks.h>
+#include <unistd.h>
+#include <taskLib.h>
+#include <wdLib.h>
+#include <sysLib.h>
+#include <errnoLib.h>
+#include <time.h>
+#include <intLib.h>
+#include <cacheLib.h>
+#include "memPartLib.h"
+
+#ifdef HOST_CPU_IS_MIPS
+#include "arch/mips/archMips.h"
+#endif
+
+#include <iv.h>
+
+#define BCMOS_DEFAULT_STACK_SIZE (100*1024)/*0x4000*/
+#define BCMOS_MICROSECONDS_TO_TICKS(u) (u)/1000000*bcmos_timer_get_frequency() + BCMOS_DIVIDE_ROUND_UP(((u)%1000000)*bcmos_timer_get_frequency(),1000000)
+
+/* task control blocks */
+extern STAILQ_HEAD(task_list, bcmos_task) task_list;
+
+/* global OS lock */
+extern bcmos_mutex bcmos_res_lock;
+
+/*
+ * Default task handler
+ */
+extern int bcmos_dft_task_handler(long data);
+
+bcmos_errno bcmos_sys_init(void)
+{
+    return BCM_ERR_OK;
+}
+
+/* Clean-up system library */
+void bcmos_sys_exit(void)
+{
+}
+
+static uint32_t bcmos_timer_get_frequency()
+{
+    static uint32_t frequency = 0;
+    if (!frequency)
+        frequency = sysClkRateGet();
+    return frequency;
+}
+
+bcmos_errno bcmos_task_create(bcmos_task *task, const bcmos_task_parm *parm)
+{
+    F_bcmos_task_handler handler;
+    void *data;
+
+    if (!task || !parm)
+        BCMOS_TRACE_RETURN(BCM_ERR_PARM, "task %p, parm %p\n", (void* )task, (void* )parm);
+    memset(task, 0, sizeof ( *task ));
+
+    if (parm->handler)
+    {
+        /* "traditional task */
+        handler = parm->handler;
+        data = (void *)parm->data;
+    }
+    else
+    {
+        bcmos_errno rc;
+        /* "integrated" task */
+        handler = bcmos_dft_task_handler;
+        data = task;
+
+        /* Initialize and lock mutex to wait on */
+        rc = bcmos_sem_create(&task->active_sem, 0, task->parm.flags, parm->name);
+        if (rc)
+        {
+            BCMOS_TRACE_ERR("Task %s: can't create active_sem. Error %s (%d)\n",
+                parm->name, bcmos_strerror(rc), rc);
+            return rc;
+        }
+    }
+
+    task->parm = *parm;
+    /* Copy name to make sure that it is not released - in case it was on the stack */
+    if (task->parm.name)
+    {
+        strncpy(task->name, task->parm.name, sizeof(task->name) - 1);
+        task->parm.name = task->name;
+    }
+    bcmos_fastlock_init(&task->active_lock, 0);
+    bcmos_mutex_lock(&bcmos_res_lock);
+    STAILQ_INSERT_TAIL(&task_list, task, list);
+    bcmos_mutex_unlock(&bcmos_res_lock);
+    task->magic = BCMOS_TASK_MAGIC;
+    task->sys_task.t = taskSpawn((char*)parm->name,
+                        10 + parm->priority * 2,
+                        0,
+                        parm->stack_size ? parm->stack_size : BCMOS_DEFAULT_STACK_SIZE,
+                        (FUNCPTR)handler,
+                        (int32_t)data,
+                        0,
+                        0,
+                        0,
+                        0,
+                        0,
+                        0,
+                        0,
+                        0,
+                        0);
+
+    if (task->sys_task.t == ERROR)
+    {
+        bcmos_mutex_lock(&bcmos_res_lock);
+        STAILQ_REMOVE(&task_list, task, bcmos_task, list);
+        bcmos_mutex_unlock(&bcmos_res_lock);
+        task->magic = 0;
+        if (!parm->handler)
+        {
+            bcmos_sem_destroy(&task->active_sem);
+        }
+        BCMOS_TRACE_ERR("(%s) Error: taskSpawn, errnoGet()=%d\n", __FUNCTION__, errnoGet());
+        BUG();
+    }
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcmos_task_destroy(bcmos_task *task)
+{
+    if (task->magic != BCMOS_TASK_MAGIC)
+    {
+        return BCM_ERR_PARM;
+    }
+    task->destroy_request = BCMOS_TRUE;
+    bcmos_mutex_lock(&bcmos_res_lock);
+    STAILQ_REMOVE(&task_list, task, bcmos_task, list);
+    bcmos_mutex_unlock(&bcmos_res_lock);
+    task->magic = BCMOS_TASK_MAGIC_DESTROYED;
+    /* The task may be waiting on semaphore. Kick it */
+    if (!task->parm.handler)
+    {
+        bcmos_sem_post(&task->active_sem);
+    }
+    if (taskDelete(task->sys_task.t) != OK)
+    {
+        BCMOS_TRACE_ERR("(%s) Error: taskDelete, errnoGet()=%d\n", __FUNCTION__, errnoGet());
+        BUG();
+    }
+
+    return BCM_ERR_OK;
+}
+
+bcmos_task *bcmos_task_current(void)
+{
+    uint32_t pt = taskIdSelf();
+    bcmos_task *t, *tmp;
+
+    STAILQ_FOREACH_SAFE(t, &task_list, list, tmp)
+    {
+        if (pt == t->sys_task.t)
+            break;
+    }
+    return t;
+}
+
+void *bcmos_alloc(uint32_t size)
+{
+    return malloc(size);
+}
+
+void bcmos_free(void *ptr)
+{
+    free(ptr);
+}
+
+inline static void bcmos_sem_mutex_destroy(uint32_t sm)
+{
+    if (semDelete((SEM_ID)sm) != OK)
+    {
+        BCMOS_TRACE_ERR("(%s) Error: semDelete, errnoGet()=%d\n", __FUNCTION__, errnoGet());
+        BUG();
+    }
+}
+
+inline static bcmos_errno bcmos_sem_mutex_wait(uint32_t sm, uint32_t timeout)
+{
+    int errno;
+    STATUS status;
+
+    timeout = ((timeout == BCMOS_WAIT_FOREVER )? WAIT_FOREVER : BCMOS_MICROSECONDS_TO_TICKS(timeout));
+    status = semTake((SEM_ID)sm, timeout);
+    if (status != OK)
+    {
+        errno = errnoGet();
+        if (errno == S_objLib_OBJ_TIMEOUT)
+        {
+            return BCM_ERR_TIMEOUT;
+        }
+        BUG();
+        return BCM_ERR_INTERNAL;
+    }
+    return BCM_ERR_OK;
+}
+
+inline static void bcmos_sem_mutex_post(uint32_t sm)
+{
+    STATUS status;
+
+    status = semGive((SEM_ID)sm);
+    if (status != OK)
+    {
+        BCMOS_TRACE_ERR("(%s) Error: semGive, status=%d\n", __FUNCTION__, status);
+        BUG();
+    }
+}
+
+bcmos_errno bcmos_sem_create(bcmos_sem *sem, uint32_t count, uint32_t flags, const char *name)
+{
+    SEM_ID semaphore;
+
+    semaphore = semCCreate(SEM_Q_PRIORITY, (SEM_B_STATE)count);
+    if (semaphore == NULL)
+    {
+        BCMOS_TRACE_ERR("(%s) Error: semCCreate, errnoGet()=%d\n", __FUNCTION__, errnoGet());
+        BUG();
+    }
+    sem->s = (uint32_t)semaphore;
+
+    return BCM_ERR_OK;
+}
+
+void bcmos_sem_destroy(bcmos_sem *sem)
+{
+    bcmos_sem_mutex_destroy(sem->s);
+}
+
+bcmos_errno bcmos_sem_wait(bcmos_sem *sem, uint32_t timeout)
+{
+    return bcmos_sem_mutex_wait(sem->s, timeout);
+}
+
+void bcmos_sem_post(bcmos_sem *sem)
+{
+    bcmos_sem_mutex_post(sem->s);
+}
+
+bcmos_errno bcmos_mutex_create(bcmos_mutex *mutex, uint32_t flags, const char *name)
+{
+    SEM_ID semaphore;
+    int options;
+
+    /* SEM_INVERSION_SAFE: Enable (by default) the prevention of priority inversion problem */
+    options = SEM_Q_PRIORITY | SEM_INVERSION_SAFE;
+
+    semaphore = semMCreate(options);
+    if (semaphore == NULL)
+    {
+        BCMOS_TRACE_ERR("(%s) Error: semCCreate, errnoGet()=%d\n", __FUNCTION__, errnoGet());
+        BUG();
+    }
+
+    mutex->m = (uint32_t)semaphore;
+
+    return BCM_ERR_OK;
+}
+
+void bcmos_mutex_destroy(bcmos_mutex *mutex)
+{
+    bcmos_sem_mutex_destroy(mutex->m);
+}
+
+void bcmos_mutex_lock(bcmos_mutex *mutex)
+{
+    bcmos_sem_mutex_wait(mutex->m, BCMOS_WAIT_FOREVER);
+}
+
+void bcmos_mutex_unlock(bcmos_mutex *mutex)
+{
+    bcmos_sem_mutex_post(mutex->m);
+}
+
+void bcmos_fastlock_init(bcmos_fastlock *lock, uint32_t flags)
+{
+}
+
+long bcmos_fastlock_lock(bcmos_fastlock *lock)
+{
+    return (long)intLock();
+}
+
+void bcmos_fastlock_unlock(bcmos_fastlock *lock, long flags)
+{
+    intUnlock(flags);
+}
+
+bcmos_errno bcmos_sys_timer_create(bcmos_sys_timer *timer, bcmos_sys_timer_handler handler, void *data)
+{
+    WDOG_ID watchdog;
+
+    if (!timer || !handler)
+        BCMOS_TRACE_RETURN(BCM_ERR_PARM, "timer %p, handler %p\n", timer, handler);
+
+    /* Call the underlying OS */
+    watchdog = wdCreate();
+    if (watchdog == NULL)
+        BCMOS_TRACE_RETURN(BCM_ERR_SYSCALL_ERR, "errno %s\n", strerror(errno));
+
+    timer->t = (uint32_t)watchdog;
+    timer->handler = handler;
+    timer->data = data;
+
+    return BCM_ERR_OK;
+}
+
+void bcmos_sys_timer_destroy(bcmos_sys_timer *timer)
+{
+    STATUS status;
+    status = wdDelete((WDOG_ID)timer->t);
+    BCMOS_TRACE_DEBUG("wdDelete: status=%d\n", status);
+}
+
+static void _bcmos_time_handler_wrapper(long data)
+{
+    bcmos_sys_timer * timer = (bcmos_sys_timer*)data ;
+    timer->handler(timer->data);
+}
+
+void bcmos_sys_timer_start(bcmos_sys_timer *timer, uint32_t delay)
+{
+    STATUS status;
+    status = wdStart((WDOG_ID)timer->t, BCMOS_MICROSECONDS_TO_TICKS(delay), (FUNCPTR)_bcmos_time_handler_wrapper, (long)timer);
+    if (status == ERROR)
+    {
+        BCMOS_TRACE_ERR("wdStart status %d\n", status);
+        BUG();
+    }
+}
+
+void bcmos_sys_timer_stop(bcmos_sys_timer *timer)
+{
+    STATUS status;
+    status = wdCancel((WDOG_ID)timer->t);
+    if (status == ERROR)
+    {
+        BCMOS_TRACE_ERR("wdCancel status=%d\n", status);
+        BUG();
+    }
+}
+
+void bcmos_usleep(uint32_t us)
+{
+    struct timespec ts;
+
+    ts.tv_sec = us / 1000000;
+    ts.tv_nsec = ( us % 1000000 ) * 1000;
+
+    nanosleep(&ts, 0);
+}
+
+uint32_t bcmos_timestamp(void)
+{
+    struct timespec ts;
+    clock_gettime(CLOCK_REALTIME, &ts);
+    return (ts.tv_sec * 1000000 + ts.tv_nsec / 1000);
+}
+
+/** Get current timestamp - 64 bit
+ * \returns the current system timestamp (us)
+ */
+uint64_t bcmos_timestamp64(void)
+{
+    struct timespec ts;
+    clock_gettime(CLOCK_REALTIME, &ts);
+    return ((uint64_t)ts.tv_sec * 1000000LL + (uint64_t)ts.tv_nsec / 1000LL);
+}
+
+/*
+ * Byte memory pool
+ */
+
+/* Memory block header */
+typedef struct bcmos_byte_memblk
+{
+    bcmos_byte_pool *pool;      /** pool that owns the block */
+    uint32_t size;              /** block size (bytes) including bcmos_byte_memblk header */
+#ifdef BCMOS_MEM_DEBUG
+    uint32_t magic;             /** magic number */
+#define BCMOS_MEM_MAGIC_ALLOC   (('m'<<24) | ('b' << 16) | ('l' << 8) | 'k')
+#define BCMOS_MEM_MAGIC_FREE    (('m'<<24) | ('b' << 16) | ('l' << 8) | '~')
+#endif
+} bcmos_byte_memblk;
+
+/* Create byte memory pool */
+bcmos_errno bcmos_byte_pool_create(bcmos_byte_pool *pool, const bcmos_byte_pool_parm *parm)
+{
+    if (!pool || !parm)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_PARM, "pool %p, parm %p\n", pool, parm);
+    }
+
+    BCM_MEMZERO_STRUCT(pool);
+    pool->parm = *parm;
+    if (!pool->parm.size)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_PARM, "size %u\n", parm->size);
+    }
+#ifdef BCMOS_MEM_DEBUG
+    pool->magic = BCMOS_BYTE_POOL_VALID;
+#endif
+    return BCM_ERR_OK;
+}
+
+/* Destroy memory pool */
+bcmos_errno bcmos_byte_pool_destroy(bcmos_byte_pool *pool)
+{
+    if (pool->allocated)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_STATE, "%u bytes of memory are still allocated from the pool %s\n",
+            pool->allocated, pool->parm.name);
+    }
+#ifdef BCMOS_MEM_DEBUG
+    pool->magic = BCMOS_BYTE_POOL_DELETED;
+#endif
+    return BCM_ERR_OK;
+}
+
+/* Allocate memory from memory pool */
+void *bcmos_byte_pool_alloc(bcmos_byte_pool *pool, uint32_t size)
+{
+    bcmos_byte_memblk *blk;
+    uint32_t byte_size;
+    void *ptr;
+
+#ifdef BCMOS_MEM_DEBUG
+    BUG_ON(pool->magic != BCMOS_BYTE_POOL_VALID);
+#endif
+
+    if (size + pool->allocated > pool->parm.size)
+        return NULL;
+
+    byte_size = size + sizeof(bcmos_byte_memblk);
+#ifdef BCMOS_MEM_DEBUG
+    byte_size += sizeof(uint32_t); /* block suffix */
+#endif
+    /* ToDo: Maintain LL of allocated blocks */
+    blk = (bcmos_byte_memblk *)malloc(byte_size);
+    if (!blk)
+        return NULL;
+    ptr = (void *)(blk + 1);
+    blk->size = byte_size;
+    pool->allocated += byte_size;
+    blk->pool = pool;
+#ifdef BCMOS_MEM_DEBUG
+    blk->magic = BCMOS_MEM_MAGIC_ALLOC;
+    *(uint32_t *)((long)blk + byte_size - sizeof(uint32_t)) = BCMOS_MEM_MAGIC_ALLOC;
+#endif
+
+    return ptr;
+}
+
+/* Release memory allocated using bcmos_byte_pool_alloc() */
+void bcmos_byte_pool_free(void *ptr)
+{
+    bcmos_byte_memblk *blk;
+    bcmos_byte_pool *pool;
+
+    BUG_ON(!ptr);
+    blk = (bcmos_byte_memblk *)((long)ptr - sizeof(bcmos_byte_memblk));
+    pool = blk->pool;
+#ifdef BCMOS_MEM_DEBUG
+    BUG_ON(pool->magic != BCMOS_BYTE_POOL_VALID);
+    BUG_ON(blk->magic != BCMOS_MEM_MAGIC_ALLOC);
+    BUG_ON(*(uint32_t *)((long)blk + blk->size - sizeof(uint32_t)) != BCMOS_MEM_MAGIC_ALLOC);
+    blk->magic = BCMOS_MEM_MAGIC_FREE;
+#endif
+    pool->allocated -= blk->size;
+    free(blk);
+}
+
+void _bcmos_backtrace(void)
+{
+    /*todo implement this*/
+}
+
+int ffsll(long long int i)
+{
+    int l = ffs(i & 0xFFFFFFFF);
+    int h = ffs((i >> 32) & 0xFFFFFFFF);
+
+    if (l)
+        return l;
+
+    if (h)
+        return h + 32;
+
+    return 0;
+}
+
+/* stub for int enable */
+void bcmos_int_enable(int irq)
+{
+}
+
+typedef struct bcmos_int_data
+{
+   int (*isr)(int irq, void *priv);
+   int irq;
+   void *priv;
+} bcmos_int_data;
+
+static void _bcmos_int_handler(long priv)
+{
+     bcmos_int_data *data = (bcmos_int_data *)priv;
+     data->isr(data->irq, data->priv);
+}
+
+int bcmos_int_connect(int irq, int cpu, int flags, int (*isr)(int irq, void *priv), const char *name, void *priv)
+{
+   bcmos_int_data *data = bcmos_calloc(sizeof(bcmos_int_data));
+   if (!data)
+      return (int)BCM_ERR_NOMEM;
+   data->isr = isr;
+   data->irq = irq;
+   data->priv = priv;
+   return pciIntConnect(INUM_TO_IVEC(irq), _bcmos_int_handler, (long)data);
+}
+
+/* Disconnect system interrupt */
+void bcmos_int_disconnect(int irq, void *priv)
+{
+    pciIntDisconnect(INUM_TO_IVEC(irq), _bcmos_int_handler);
+}
+
+/**************************************************************
+ * Check in-irq status                                        *
+ * related header file: "intLib.h"                            *
+ * param[in]   none                                           *
+ * param[out]  none                                           *
+ * return      BCMOS_TRUE  (1) - in interrupt context;        *
+ *             BCMOS_FALSE (0) - in task context;             *
+ **************************************************************/
+
+bcmos_bool is_irq_mode(void)
+{
+    return intContext();
+}
+
+// from bsp
+extern int isIntDisabled();
+/**************************************************************
+ * Check if interrupts are disabled                           *
+ * related header file: "mipsinc.h"                           *
+ * param[in]   none                                           *
+ * param[out]  none                                           *
+ * return      BCMOS_TRUE (1) -  Gloal interrupt disable      *
+               BCMOS_FALSE (0) - Gloal interrupt enable;      *
+ * comment     if BSP team can provide similar function,      *
+               we will call it;                               *
+ * Another option is share this macro used on switch product  *
+ *************************************************************/
+bcmos_bool is_irq_disabled(void)
+{
+    return isIntDisabled();
+}
+
+/**************************************************************
+ * write barrier                                              *
+ * related header file: none                                  *
+ * param[in]   none                                           *
+ * param[out]  none                                           *
+ * return none                                                *
+ * comment:use "sync" base on MIPS (GNU style)                *
+ *************************************************************/
+
+void bcmos_barrier(void)
+{
+ #if defined(HOST_CPU_IS_MIPS) || defined(HOST_CPU_IS_PPC)
+    {__asm__ __volatile__("sync");}
+ #else
+   #error HOST CPU MUST BE MIPS OR POWERPC
+ #endif
+}
+
+/**************************************************************
+ * Allocate DMA-able memory                                   *
+ * related header file:memPartLib.h                           *
+ * param[in]   device  Device id                              *
+ * param[in]   size    Block size (bytes)                     *
+ * param[out]  none                                           *
+ * returns    memory block pointer(uncached memory) or NULL   *
+ * comment:   BSP need to allocate uncached memory pool first *
+ * if BSP team can provide such function,call it directly;    *
+ * suggestion: memPartCreate()create uncached memory and      *
+ * return memory ID:uncachePoolMemPartId                      *
+ * memPartAlloc()/memPartFree():allocate/free memory via      *
+ * memory ID:uncachePoolMemPartId and size                    *
+ * if BSP can gurantee the Memory allocated by cacheDmaMalloc *
+ * cacheDmaFree() is noncached memory,we can call them directly*
+ *************************************************************/
+
+void *bcmos_dma_alloc(uint8_t device, uint32_t size)
+{
+    void * pBuffer;
+#ifdef NON_CACHED_MEMORY_CREATED_BY_CACHEDMAMALLOC
+    pBuffer = cacheDmaMalloc(size);
+    return (pBuffer);
+#else
+    pBuffer = (void *)memPartAlloc(uncachePoolMemPartId, size));
+    return (pBuffer);
+#endif
+}
+
+/**************************************************************
+ * Release DMA-able memory                                    *
+ * related header file: memPartLib.h                          *
+ * param[in]   device  Device id                              *
+ * param[in]   ptr     Block pointer                          *
+ * param[out]  none                                           *
+ * return  none                                               *
+ * comment: see above                                         *
+ *************************************************************/
+void bcmos_dma_free(uint8_t device, void *ptr)
+{
+#ifdef NON_CACHED_MEMORY_CREATED_BY_CACHEDMAMALLOC
+    cacheDmaFree((void *)(ptr));
+#else
+    memPartFree(uncachePoolMemPartId,ptr);
+#endif
+    return;
+}
+
+/**************************************************************
+ * Convert virtual address to physical address                *
+ * related header file:for MIPS CPU	archMips.h                *
+ * param[in]   va    Virtual address                          *
+ * return - physical address va is mapped to                  *
+**************************************************************/
+unsigned long bcmos_virt_to_phys(void *va)
+{
+#ifdef HOST_CPU_IS_MIPS
+  return (unsigned long)(K0_TO_PHYS(va));
+
+#else
+	/* this is an just an example,
+	if you are not working with mips make sure you define the correct mapping for your system */
+    return (unsigned long)(va);
+#endif
+}
+
+/**************************************************************
+ * Invalidate address area in data cache.                     *
+ * related header file:  cacheLib.h                           *
+ * param[in]   start   Address area start                     *
+ * param[in]   size    Address area size                      *
+ * return  none                                               *
+ **************************************************************/
+void bcmos_dcache_inv(void *start, uint32_t size)
+{
+    cacheInvalidate(DATA_CACHE,start, size);
+    return;
+}
+
+/**************************************************************
+ * Flush address area in data cache.                          *
+ * related header file:  cacheLib.h                           *
+ * param[in]   start   Address area start                     *
+ * param[in]   size    Address area size                      *
+ * return  none                                               *
+**************************************************************/
+void bcmos_dcache_flush(void *start, uint32_t size)
+{
+    cacheFlush(DATA_CACHE,start, size);
+    return;
+}
+
+/**************************************************************
+ * write value to PCI memory                                  *
+ * related header file: bcmos_common2.h                       *
+ * param[in]   address  pointer to Address                    *
+ * param[in]   value    value                                 *
+ * return  none                                               *
+ * Comment re-use BCMOS_ENDIAN_CPU_TO_LITTLE_U32 which is from*
+ * bcmos_common2.h,by this macro,can support both big endian  *
+ * host and little endian host.move PCI access functions after*
+ * bcmos_common2.h                                            *
+ **************************************************************/
+void bcm_pci_write32(volatile uint32_t *address, uint32_t value)
+{
+#ifdef HOST_PCIE_SWAP_NEEDED
+    value = BCMOS_ENDIAN_CPU_TO_LITTLE_U32(value);
+#endif
+    *address = value;
+}
+
+/**************************************************************
+ * read value to PCI memory                                   *
+ * related header file: bcmos_common2.h                       *
+ * param[in]   address  pointer to Address                    *
+ * return  value                                              *
+ * Comment see above                                          *
+**************************************************************/
+uint32_t bcm_pci_read32(const volatile uint32_t *address)
+{
+    uint32_t value;
+    value = *address;
+#ifdef HOST_PCIE_SWAP_NEEDED
+    value = BCMOS_ENDIAN_LITTLE_TO_CPU_U32(value);
+#endif
+    return value;
+
+}
+
+
diff --git a/bcm68620_release/release/host_customized/os_abstraction/vxworks55/bcmos_system.h b/bcm68620_release/release/host_customized/os_abstraction/vxworks55/bcmos_system.h
new file mode 100644
index 0000000..5633e28
--- /dev/null
+++ b/bcm68620_release/release/host_customized/os_abstraction/vxworks55/bcmos_system.h
@@ -0,0 +1,184 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+/*
+ * bcmos_system.h
+ * Maple System Services
+ * vxWorks 5.5 port
+ */
+
+#ifndef BCMOS_SYSTEM_H_
+#define BCMOS_SYSTEM_H_
+
+#define BCMOS_IRQ_SINGLE    0
+#define BCMOS_IRQ_SHARED    1
+
+#define inline __inline
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <ctype.h>
+#include <time.h>
+#include <limits.h>
+#include <unistd.h>
+#include <sockLib.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+
+/* Re-define GNU typeof as ISO __typeof__ */
+#define typeof __typeof__
+
+/* Specify here which system functions are inlined */
+
+/* #define BCMOS_FASTLOCK_INLINE */
+/* #define BCMOS_SEM_WAIT_INLINE */
+/* #define BCMOS_SEM_POST_INLINE */
+/* #define BCMOS_USLEEP_INLINE */
+#define BCMOS_TRACE_PRINTF
+#define BCMOS_BYTE_POOL_ALLOC_FREE_INLINE
+/* #define BCMOS_MALLOC_FREE_INLINE */
+/* #define BCMOS_CALLOC_INLINE */
+/* if Host cpu is MIPS cpu,enable this macro */
+/* Host cpu type will be determined during compile*/
+//#define HOST_CPU_IS_MIPS
+//#define HOST_CPU_IS_PPC
+/*if the Memory allocated by cacheDmaMalloc/acheDmaFree() is non-cached memory,enable this macro*/
+#define NON_CACHED_MEMORY_CREATED_BY_CACHEDMAMALLOC
+/* Uncommentthe following line if h/w supports DMA cache coherency */
+/* #define BCMOS_DMA_CACHE_COHERENCY */
+
+static inline void bcmos_int_disable(int irq)
+{}
+
+void _bcmos_backtrace(void);
+
+#define BUG_ON(_f)      do { if (_f) { _bcmos_backtrace(); } } while (0)
+#define BUG()           BUG_ON(1)
+#define BUG_UNLESS(_f)  BUG_ON(!(_f))
+
+/** Boolean */
+#define BCMOS_BOOLEAN
+typedef enum
+{
+    BCMOS_FALSE = 0,
+    BCMOS_TRUE  = 1,
+} bcmos_bool;
+
+#include "bcmos_common.h"
+
+#define ffs(n) ffsLsb(n)
+
+/** Semaphore control block */
+struct bcmos_sem
+{
+    uint32_t s;
+};
+
+
+/** Mutex control block */
+struct bcmos_mutex
+{
+    uint32_t m;
+};
+
+/** Fast lock control block */
+struct bcmos_fastlock
+{
+    uint32_t l;
+};
+
+/** Fastlock initializer. Can be used instead of calling bcmos_fastlock_init() */
+#define BCMOS_FASTLOCK_INITIALIZER      { 0 }
+
+/** OS-specific task control block extension */
+typedef struct bcmos_sys_task
+{
+    uint32_t t;                         /**< vxWorks task ID */
+} bcmos_sys_task;
+
+
+/** System timer */
+struct bcmos_sys_timer
+{
+    uint32_t t;                         /**< VxW timer */
+    bcmos_sys_timer_handler handler;    /**< Timer handler */
+    void *data;                         /**< Parameter to be passed to the handler */
+};
+
+/** Byte memory pool control block */
+struct bcmos_byte_pool
+{
+    bcmos_byte_pool_parm parm;  /**< Pool parameters */
+    uint32_t allocated;         /**< Number of bytes allocated */
+#ifdef BCMOS_MEM_DEBUG
+    uint32_t magic;             /**< magic number */
+#define BCMOS_BYTE_POOL_VALID           (('b'<<24) | ('y' << 16) | ('p' << 8) | 'o')
+#define BCMOS_BYTE_POOL_DELETED         (('b'<<24) | ('y' << 16) | ('p' << 8) | '~')
+#endif
+};
+
+#define bcmos_sys_vprintf(fmt, args)        vprintf(fmt, args)
+
+#define EXPORT_SYMBOL(_sym)
+
+/* 2nd part of OS-independent declarations */
+#include "bcmos_common2.h"
+
+void bcm_pci_write32(volatile uint32_t *address, uint32_t value);
+uint32_t bcm_pci_read32(const volatile uint32_t *address);
+
+
+/*todo must check validity that the string is numeric, sscanf cannot detect errors,
+ * if not valid, put (*tailptr) in the first non valid char in string,
+ if valid, point tailptr in the last char in string (*tailptr=string+strlen(string))*/
+#define strtoull(string,tailptr,base)   ({\
+                                            unsigned long long int __a;\
+                                            *(tailptr)=(char*)((string)+strlen(string));\
+                                            sscanf(string, base == 10 ? "%llu" : "%llx", &__a );\
+                                            __a;\
+                                        })
+#define strtoll(string,tailptr,base)    ({\
+                                            long long int __a;\
+                                            *(tailptr)=(char*)((string)+strlen(string));\
+                                            sscanf(string,"%lld", &__a );\
+                                            __a;\
+                                        })
+
+#define snprintf(s1,n,s2,args...)      sprintf(s1, s2,## args)
+#define vsnprintf(s1,n,s2,args...)     vsprintf(s1, s2,## args)
+
+
+int ffsLsb (UINT32 i);
+int ffsll(long long int i);
+
+
+#endif /* BCMOS_SYSTEM_H_ */
diff --git a/bcm68620_release/release/host_customized/pcie/Makefile b/bcm68620_release/release/host_customized/pcie/Makefile
new file mode 100755
index 0000000..338d3cc
--- /dev/null
+++ b/bcm68620_release/release/host_customized/pcie/Makefile
@@ -0,0 +1,24 @@
+# PCIE driver
+# host specific
+#
+MOD_NAME = pcie_mod
+MOD_DEPS = pcie 
+
+MOD_SUPPRESS_OS_DEP = y
+
+ifeq ("$(OS_KERNEL)", "linux")
+    MOD_TYPE = linux_lib
+    srcs = bcmolt_tr_pcie_specific.c
+else
+    MOD_TYPE = lib
+endif
+
+# If called by linux kernel builder - add include paths manually.
+# It is not elegant, but we'll not have many linux modules
+ifneq ("$(KBUILD_SRC)", "")
+	-include $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
+endif
+
+USE_LINT = yes
+
+
diff --git a/bcm68620_release/release/host_customized/pcie/bcmolt_tr_pcie_specific.c b/bcm68620_release/release/host_customized/pcie/bcmolt_tr_pcie_specific.c
new file mode 100755
index 0000000..94102bc
--- /dev/null
+++ b/bcm68620_release/release/host_customized/pcie/bcmolt_tr_pcie_specific.c
@@ -0,0 +1,106 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#include "bcmos_system.h"
+#include "bcmtr_pcie.h"
+#include "bcmolt_tr_pcie_specific.h"
+
+extern f_bcmtr_int bcmtr_pcie_rx_irq_handler;
+extern f_bcmtr_int bcmtr_pcie_tx_irq_handler;
+static bcmos_fastlock isr_lock;
+
+/***************************************************************/
+/* need to pass thru all the devices - check if irq is SHARED */
+/***************************************************************/
+static int bcmtr_rx_isr(int irq, void *isr_info)
+{
+    uint32_t isr_reg;
+    uint32_t mask_reg;
+    long flags;
+    int handled = 0;
+    bcm_pcied_isr_data *isr_data = (bcm_pcied_isr_data *)isr_info;
+
+    flags = bcmos_fastlock_lock(&isr_lock);
+
+    isr_reg = bcm_pci_read32((uint32_t*)(isr_data->pcie_reg_base + DMA_INTR_STATUS));
+    mask_reg = ~bcm_pci_read32((uint32_t*)(isr_data->pcie_reg_base + DMA_INTR_MASK_STATUS));
+
+    if ((isr_reg & mask_reg)& DMA_TX_DONE_MASK)
+    {
+        /* handle TX DONE interrupt */
+        isr_data->tx_done_num++;
+
+        if (bcmtr_pcie_tx_irq_handler)
+            bcmtr_pcie_tx_irq_handler(isr_data->device);
+
+        handled = 1;
+    }
+
+    if ((isr_reg & mask_reg ) & DMA_RX_DONE_MASK)
+    {
+        /* handle RX DONE interrupt */
+        isr_data->rx_done_num++;
+
+        if (bcmtr_pcie_rx_irq_handler)
+            bcmtr_pcie_rx_irq_handler(isr_data->device);
+
+        handled = 1;
+    }
+
+    if (isr_reg & (DMA_RX_ERROR_MASK | DMA_TX_ERROR_MASK))
+    {
+        if (isr_reg & DMA_RX_ERROR_MASK)
+            isr_data->rx_err_num++;
+        if (isr_reg & DMA_TX_ERROR_MASK)
+            isr_data->tx_err_num++;
+        /* clear interrupt error interrupt */
+        bcm_pci_write32((uint32_t*)(isr_data->pcie_reg_base + DMA_INTR_CLEAR), DMA_RX_ERROR_MASK | DMA_TX_ERROR_MASK);
+        handled = 1;
+    }
+
+    bcmos_fastlock_unlock(&isr_lock, flags);
+
+    return handled;
+}
+
+void bcmtr_connect_isr(void *isr_info)
+{
+    uint32_t    flags = 0;
+
+    bcm_pcied_isr_data *isr_data = (bcm_pcied_isr_data *)isr_info;
+    bcmos_fastlock_init(&isr_lock, flags);
+    /* connect interrupt to system cpu - 0 */
+    bcmos_int_connect((int)isr_data->rx_irq, 0, BCMOS_IRQ_SHARED, bcmtr_rx_isr, "dmaisr", isr_data);
+}
+
+#ifdef __KERNEL__
+EXPORT_SYMBOL(bcmtr_connect_isr);
+#endif
+
+
diff --git a/bcm68620_release/release/host_customized/pcie/bcmolt_tr_pcie_specific.h b/bcm68620_release/release/host_customized/pcie/bcmolt_tr_pcie_specific.h
new file mode 100644
index 0000000..c8c8ac1
--- /dev/null
+++ b/bcm68620_release/release/host_customized/pcie/bcmolt_tr_pcie_specific.h
@@ -0,0 +1,113 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef BCMOLT_TR_PCIE_SPECIFIC_H_
+#define BCMOLT_TR_PCIE_SPECIFIC_H_
+
+#include "bcmos_system.h"
+#include "bcmtr_pcie.h"
+
+#define DESCRIPTOR_CONTROL      0x00064410 /* Tx Software Descriptor List Control and Status */
+#define WAKEUP_DMA              0x00064414 /* Tx Wake Control */
+#define ERROR_STATUS            0x00064418 /* Tx Engine Error Status */
+
+#define INTR2_PCI_STATUS        0x00064318 /* PCI interrupt Status Register */
+
+#define DMA_TX_SW_DESC_LIST_CTRL_STS_TX_DMA_RUN_STOP_MASK   0x00000001
+#define DMA_TX_WAKE_CTRL_WAKE_MASK                          0x00000001
+
+#define DMA_INTR_STATUS	        0x00064318 /* PCI interrupt Status Register */
+#define DMA_INTR_CLEAR          0x00064320 /* PCI interrupt Clear Register */
+#define DMA_INTR_MASK_SET       0x00064328 /* PCI interrupt Mask Set Register */
+#define DMA_INTR_MASK_CLEAR     0x0006432c /* PCI interrupt Mask Clear Register */
+#define DMA_INTR_MASK_STATUS    0x00064324 /* PCI interrupt Mask & Status Register */
+
+#define DMA_RX_ERROR_MASK       0x00000008
+#define DMA_RX_DONE_MASK        0x00000004
+#define DMA_TX_DONE_MASK        0x00000001
+#define DMA_TX_ERROR_MASK       0x00000002
+
+#define PCIE_L2_INTR_MASK       0x00000020 /* L2 interrupt bit in L1 interrupt status */
+
+#define DMA_INTR1_STATUS        0x00069300 /* Interrupt Status Register */
+#define DMA_INTR1_MASK_CLEAR    0x0006930c /* Interrupt Mask Clear Register */
+#define DMA_INTR1_MASK_SET      0x00069308 /* Interrupt Mask Set Register */
+#define DMA_INTA_MASK           0x00000002
+#define DMA_INTA_SHIFT          1
+#define PCIE_STATUS_OFFSET      0x00064068 /* PCIE_PCIE_PCIE_0_PCIE_PCIE_0_MISC_PCIE_STATUS */
+
+void bcmtr_connect_isr(void *isr_info);
+
+/* first parameter is the dest PD, the second parameter is the source field */
+static inline void bcmtr_set_dest_buffer_address(uint32_t *pd, void *value)
+{
+    uint64_t tmp = bcmos_virt_to_phys(value);
+
+    bcm_pci_write32(&pd[PCI_PACKET_LOW_INDEX],  (uint32_t)( tmp & 0xffffffffUL));
+    bcm_pci_write32(&pd[PCI_PACKET_HIGH_INDEX], (uint32_t)((tmp >> 32) & 0xffffffffUL));
+}
+
+/* first parameter is the dest PD, the second parameter is the source field */
+static inline void bcmtr_set_source_buffer_address(uint32_t *pd, void *value)
+{
+    uint64_t tmp = bcmos_virt_to_phys(value);
+
+    bcm_pci_write32(&pd[PCI_PACKET_LOW_INDEX],  (uint32_t)( tmp & 0xffffffffUL));
+    bcm_pci_write32(&pd[PCI_PACKET_HIGH_INDEX], (uint32_t)((tmp >> 32) & 0xffffffffUL));
+}
+
+static inline bcmos_errno bcmtr_create_tu_rings(uint32_t txlength, uint32_t rxlength,
+                                          void **txptr, void **rxptr,
+                                          void **txptr_orig, void **rxptr_orig,
+                                          unsigned long pcie_reg_base)
+{
+    *txptr      = NULL;
+    *rxptr_orig = NULL;
+    *txptr      = NULL;
+    *rxptr_orig = NULL;
+
+    return BCM_ERR_OK;
+}
+static inline void bcmtr_pcie_specific_init(unsigned long pcie_reg_base) {}
+static inline void bcmtr_pcie_free_rings(uint32_t device, uint32_t *tx_ptr, uint32_t * rx_ptr){}
+static inline void bcmtr_pcie_free_irq(uint32_t irq, void *priv)
+{
+#ifndef SIMULATION_BUILD
+    bcmos_int_disconnect((int)irq, priv);
+#endif
+}
+
+#define TX_LOCKDEF         bcmos_mutex  tx_lock;
+#define CREATE_TXLOCK(i)   bcmos_mutex_create(&bcmtr_pcie_data[i].tx_lock, 0, NULL)
+#define DESTROY_TXLOCK(i)  bcmos_mutex_destroy(&bcmtr_pcie_data[i].tx_lock)
+#define LOCK_TX()          bcmos_mutex_lock(&current_device->tx_lock)
+#define UNLOCK_TX()        bcmos_mutex_unlock(&current_device->tx_lock)
+
+#endif
+
diff --git a/bcm68620_release/release/host_customized/transport/nl_socket/Makefile b/bcm68620_release/release/host_customized/transport/nl_socket/Makefile
new file mode 100644
index 0000000..7e85eb0
--- /dev/null
+++ b/bcm68620_release/release/host_customized/transport/nl_socket/Makefile
@@ -0,0 +1,22 @@
+# NL transport driver
+#
+ifeq ("$(OS_KERNEL)", "linux")
+ifeq ("$(CONFIG_TRANSPORT_RAW)", "y")
+
+
+MOD_NAME = nltr
+MOD_TYPE = linux_lib
+MOD_DEPS = trmux tr_plugin_raw
+
+srcs = bcmolt_tr_nl_driver.c
+
+# If called by linux kernel builder - add include paths manually.
+# It is not elegant, but we'll not have many linux modules
+ifneq ("$(KBUILD_SRC)", "")
+	-include $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
+endif
+
+USE_LINT = yes
+
+endif
+endif
diff --git a/bcm68620_release/release/host_customized/transport/nl_socket/bcmolt_tr_nl_driver.c b/bcm68620_release/release/host_customized/transport/nl_socket/bcmolt_tr_nl_driver.c
new file mode 100644
index 0000000..a63fca2
--- /dev/null
+++ b/bcm68620_release/release/host_customized/transport/nl_socket/bcmolt_tr_nl_driver.c
@@ -0,0 +1,232 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+/*
+ * nl_transport.c
+ *
+ * NL-socket based transport. Kernel space module
+ *
+ */
+#include <linux/module.h>       /* Needed by all modules */
+#include <linux/kernel.h>       /* Needed for KERN_INFO */
+#include <net/netlink.h>
+#include <net/sock.h>
+#include <linux/netdevice.h>
+#include <linux/version.h>
+
+#include <bcmolt_tr_mux.h>
+#include <bcmolt_tr_nl_driver.h>
+#include "bcmolt_tr_nl.h"
+
+#define BCMTR_MEM_PACKETS       10000
+#define BCMTR_MEM_OVERHEAD      SKB_TRUESIZE(1024)
+#define BCMTR_MIN_RCVBUF_SIZE   (BCMTR_MEM_PACKETS * BCMTR_MEM_OVERHEAD)
+
+struct sock *bcmtr_nl_sock = NULL;
+
+/* Netlink operations. This driver overrides a couple */
+static struct proto_ops bcmtr_nl_ops;
+static int (*netlink_release_org)(struct socket *sock);
+
+struct bcmtr_nl
+{
+    bcmtrmux_channel channel[BCMTR_MAX_OLTS];
+    int pid;
+    struct sock *sk;
+};
+
+static int bcmtr_netlink_release(struct socket *sock)
+{
+    struct sock *sk = sock->sk;
+    struct bcmtr_nl *nlb = sk->sk_user_data;
+    if (nlb)
+    {
+        int i;
+        for (i = 0; i < BCMTR_MAX_OLTS; i++)
+        {
+            if (nlb->channel[i])
+                bcmtrmux_channel_unregister(i, nlb->channel[i]);
+        }
+        kfree(nlb);
+        sk->sk_user_data = NULL;
+    }
+    return netlink_release_org(sock);
+}
+
+/** Receive message handler */
+static  void _bcmtr_nl_recv(bcmolt_devid device, bcmos_buf *buf, bcmtrmux_channel channel, void *data)
+{
+    uint32_t data_length = bcmos_buf_length(buf);
+    uint32_t device_u32 = (uint32_t)device;
+    struct bcmtr_nl *nlb = (struct bcmtr_nl *)data;
+    uint8_t *p_device;
+    int r;
+
+    NETLINK_CB(&(buf->skb)).dst_group = 0; /* not in mcast group */
+
+    /* Now a tricky part. nlmsg_put() assumes that skb is empty and extends it
+     * by total msg size. We don't want it. Reserve room for nlmsg header and then
+     * set size to 0 and let nlmsg_put() restore it
+     */
+    if (unlikely(skb_headroom(&buf->skb) < NLMSG_HDRLEN + sizeof(uint32_t)))
+    {
+        printk(KERN_INFO "%s: can't prepend NL header\n", __FUNCTION__);
+        bcmos_free(buf);
+        return;
+    }
+    __skb_push(&buf->skb, NLMSG_HDRLEN + sizeof(uint32_t));
+    /* Store device immediately after the NL header */
+    p_device = buf->skb.data + NLMSG_HDRLEN;
+    memcpy(p_device, &device_u32, sizeof(uint32_t));
+    __skb_trim(&buf->skb, 0);
+    nlmsg_put(&buf->skb, 0, 0, NLMSG_DONE, data_length + sizeof(uint32_t), 0);
+
+    r = nlmsg_unicast(nlb->sk, &buf->skb, nlb->pid);
+    if (r)
+    {
+        printk(KERN_INFO "%s: nlmsg_unicast() --> %d len=%u rm_alloc=%d recvbuf=%d\n",
+            __FUNCTION__, r, data_length, atomic_read(&nlb->sk->sk_rmem_alloc), nlb->sk->sk_rcvbuf);
+    }
+}
+
+void bcmtr_nl_input(struct sk_buff *skb)
+{
+    struct nlmsghdr *nlh;
+    struct bcmtr_nl *nlb;
+    uint32_t device;
+    bcmos_errno rc;
+
+    nlh = nlmsg_hdr(skb);
+
+    if(NLMSG_OK(nlh, skb->len))
+    {
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
+        struct sock *sk = NETLINK_CB(skb).sk;
+#else
+        struct sock *sk = NETLINK_CB(skb).ssk;
+#endif
+
+        /* channel is stored in user_data. If it is 0 - that means that channel
+         * is not allocated yet. Do it here
+         */
+        if (!sk->sk_user_data)
+        {
+            nlb = kmalloc(sizeof(*nlb), GFP_KERNEL);
+            if (!nlb)
+            {
+                printk(KERN_INFO "%s: can't allocate NLB\n", __FUNCTION__);
+                return;
+            }
+            memset(nlb, 0, sizeof(*nlb));
+            nlb->pid = nlh->nlmsg_pid;
+            nlb->sk = sk;
+            sk->sk_user_data = nlb;
+
+            /* Override release callback in order to cleanup */
+            bcmtr_nl_ops = *sk->sk_socket->ops;
+            netlink_release_org = bcmtr_nl_ops.release;
+            bcmtr_nl_ops.release = bcmtr_netlink_release;
+            sk->sk_socket->ops = &bcmtr_nl_ops;
+
+            /* Override sk_rcvbuf size. Set min */
+            if (sk->sk_rcvbuf < BCMTR_MIN_RCVBUF_SIZE)
+            {
+                sk->sk_rcvbuf = BCMTR_MIN_RCVBUF_SIZE;
+            }
+        }
+        else
+        {
+            nlb = (struct bcmtr_nl *)sk->sk_user_data;
+        }
+
+        /* Device id follows NLMSG header */
+        device = skb->data[NLMSG_HDRLEN];
+        if (device >= BCMTR_MAX_OLTS)
+        {
+            printk(KERN_INFO "%s: device %u is insane\n", __FUNCTION__, device);
+            return;
+        }
+
+        if (!nlb->channel[device])
+        {
+            bcmtrmux_channel channel = BCMTRMUX_CHANNEL_AUTO_ASSIGN;
+
+            rc = bcmtrmux_channel_register(device, &channel, _bcmtr_nl_recv, nlb);
+            if (rc)
+            {
+                printk(KERN_INFO "%s: can't register channel for device %u. rc=%d\n", __FUNCTION__, device, (int)rc);
+                return;
+            }
+            nlb->channel[device] = channel;
+        }
+
+
+        /* Cut NL header + device */
+        skb_pull(skb, NLMSG_HDRLEN + sizeof(uint32_t));
+
+        /* Clone skb because caller will release the original one */
+        skb = skb_clone(skb, 0);
+        if (!skb)
+        {
+
+            printk(KERN_ERR "Failed to allocate new skb\n");
+            return;
+        }
+
+        /* Forward to the mux */
+        bcmtrmux_rx_from_host(device, nlb->channel[device], (bcmos_buf *)skb);
+    }
+    else
+    {
+        printk(KERN_INFO "%s: invalid message received frpm pid %d\n", __FUNCTION__, nlh->nlmsg_pid);
+    }
+}
+
+static struct netlink_kernel_cfg bcmtr_nl_cfg = {
+    .input = bcmtr_nl_input,
+};
+
+bcmos_errno bcmtr_nl_init(void)
+{
+    printk(KERN_INFO "Maple netlink-based raw driver transport driver\n");
+    bcmtr_nl_sock = netlink_kernel_create(&init_net, BCMTR_NL_FAMILY, &bcmtr_nl_cfg);
+    if(!bcmtr_nl_sock)
+        return BCM_ERR_NOMEM;
+    return BCM_ERR_OK;
+}
+
+void bcmtr_nl_exit(void)
+{
+    printk("Maple netlink-based raw driver terminated\n");
+    if (bcmtr_nl_sock)
+    {
+        netlink_kernel_release(bcmtr_nl_sock);
+        bcmtr_nl_sock = NULL;
+    }
+}
diff --git a/bcm68620_release/release/host_customized/transport/nl_socket/bcmolt_tr_nl_driver.h b/bcm68620_release/release/host_customized/transport/nl_socket/bcmolt_tr_nl_driver.h
new file mode 100644
index 0000000..d79c990
--- /dev/null
+++ b/bcm68620_release/release/host_customized/transport/nl_socket/bcmolt_tr_nl_driver.h
@@ -0,0 +1,42 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+/*
+ * bcmtr_nl_driver.h - host netlink-socket transport driver
+ */
+
+#ifndef BCMOLT_TR_NL_DRIVER_H_
+#define BCMOLT_TR_NL_DRIVER_H_
+
+#include <bcmos_system.h>
+
+bcmos_errno bcmtr_nl_init(void);
+void bcmtr_nl_exit(void);
+
+#endif
diff --git a/bcm68620_release/release/host_customized/transport/plugin/Makefile b/bcm68620_release/release/host_customized/transport/plugin/Makefile
new file mode 100644
index 0000000..80f0147
--- /dev/null
+++ b/bcm68620_release/release/host_customized/transport/plugin/Makefile
@@ -0,0 +1,11 @@
+# Transport: Plugin interface
+#
+MOD_NAME = tr_plugin
+MOD_TYPE = lib
+MOD_DEPS = utils common_api model
+
+ifeq ("$(RELEASE_BUILD)", "y")
+MOD_INC_DIRS = $(SRC_DIR) $(TOP_DIR)/host_driver/transport
+else
+MOD_INC_DIRS = $(SRC_DIR) $(SRC_DIR)/..
+endif
diff --git a/bcm68620_release/release/host_customized/transport/plugin/bcmtr_plugin.h b/bcm68620_release/release/host_customized/transport/plugin/bcmtr_plugin.h
new file mode 100644
index 0000000..82d3dd2
--- /dev/null
+++ b/bcm68620_release/release/host_customized/transport/plugin/bcmtr_plugin.h
@@ -0,0 +1,113 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef BCMTR_PLUGIN_H_
+#define BCMTR_PLUGIN_H_
+
+#include <bcmolt_buf.h>
+#include <bcmolt_msg.h>
+
+#include <bcmtr_interface.h>
+#include <bcmtr_header.h>
+
+/** Message transport type */
+typedef enum
+{
+   BCMTR_TYPE_UDP,        /**< UDP transport */
+   BCMTR_TYPE_RAW         /**< Raw transport */
+} bcmtr_transport_type;
+
+/** UDP configuration */
+typedef struct
+{
+    uint32_t my_ip;             /**< Local IP address in host format */
+    uint32_t remote_ip;         /**< Remote IP address in host format */
+    uint16_t my_port;           /**< Local UDP port in host format. INADDR_ANY is acceptable */
+    uint16_t remote_port;       /**< Remote UDP port in host format */
+} bcmtr_udp_cfg;
+
+/** Transport configuration parameters */
+typedef struct
+{
+    bcmtr_transport_type type;     /**< Transport type */
+
+    /** Type-specific configuration */
+    union
+    {
+        /** UDP Plugin parameters */
+        bcmtr_udp_cfg udp;
+
+        /* Raw task forwarder plugin parameters */
+        struct
+        {
+            bcmtr_udp_cfg udp;          /**< UDP configuration - for UDP-based raw driver */
+            uint32_t max_txq_size;      /**< Max transmit queue/pool size */
+            bcmos_task_priority tx_pri; /**< Tx task priority */
+        } forwarder;
+    } x;
+
+    uint32_t headroom;                  /**< Additional headroom length that should be reserved for plugin use */
+
+} bcmtr_plugin_cfg;
+
+/** Plugin channel */
+typedef unsigned long bcmtr_plugin_channel;
+
+/** Transport driver */
+typedef struct {
+    /** Open communication channel, establish communication */
+    bcmos_errno (*open)(int device, bcmtr_plugin_cfg *cfg, bcmtr_plugin_channel *ch);
+    /** Close communication channel */
+    bcmos_errno (*close)(bcmtr_plugin_channel ch);
+    /** Send data. It doesn't have to release the tx buffer, but if it does - it must
+     * clear buf->start to prevent double release */
+    bcmos_errno (*send)(bcmtr_plugin_channel ch, bcmolt_subchannel subch, bcmolt_buf *buf, bcmtr_send_flags flags);
+    /** Receive data. It is responsible for receive buffer allocation */
+    bcmos_errno (*recv)(bcmtr_plugin_channel ch, bcmolt_subchannel *subch, bcmolt_buf *buf);
+} bcmtr_driver;
+
+/** Initialize plugin callbacks
+ * \param[in]           cfg     Plugin configuration
+ * \param[in,out]       driver  Transport plugin driver structure
+ * \return error code
+ */
+bcmos_errno bcmtr_plugin_init(bcmtr_plugin_cfg *cfg, bcmtr_driver *driver);
+
+/* UDP comm parameters */
+#ifdef BCMTR_UDP_SUPPORT
+extern uint32_t bcmtr_host_ip;
+extern uint16_t bcmtr_host_udp_port;
+extern uint32_t bcmtr_olt_ip[BCMTR_MAX_OLTS];
+extern uint16_t bcmtr_olt_udp_port[BCMTR_MAX_OLTS];
+#endif
+
+void using_inband_set(bcmos_bool using_inband);
+bcmos_bool using_inband_get(void);
+
+#endif /* BCMTR_PLUGIN_H_ */
diff --git a/bcm68620_release/release/host_customized/transport/plugin/direct/bcmtr_plugin_direct.c b/bcm68620_release/release/host_customized/transport/plugin/direct/bcmtr_plugin_direct.c
new file mode 100644
index 0000000..c00c9ba
--- /dev/null
+++ b/bcm68620_release/release/host_customized/transport/plugin/direct/bcmtr_plugin_direct.c
@@ -0,0 +1,290 @@
+/*
+<:copyright-BRCM:2016:proprietary:standard
+ 
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+ 
+This program is the proprietary software of Broadcom Corporation and/or its
+licensors, and may only be used, duplicated, modified or distributed pursuant
+to the terms and conditions of a separate, written license agreement executed
+between you and Broadcom (an "Authorized License").  Except as set forth in
+an Authorized License, Broadcom grants no license (express or implied), right
+to use, or waiver of any kind with respect to the Software, and Broadcom
+expressly reserves all rights in and to the Software and all intellectual
+property rights therein.  IF YOU HAVE NO AUTHORIZED LICENSE, THEN YOU HAVE
+NO RIGHT TO USE THIS SOFTWARE IN ANY WAY, AND SHOULD IMMEDIATELY NOTIFY
+BROADCOM AND DISCONTINUE ALL USE OF THE SOFTWARE.
+ 
+Except as expressly set forth in the Authorized License,
+ 
+1. This program, including its structure, sequence and organization,
+    constitutes the valuable trade secrets of Broadcom, and you shall use
+    all reasonable efforts to protect the confidentiality thereof, and to
+    use this information only in connection with your use of Broadcom
+    integrated circuit products.
+ 
+2. TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
+    AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES, REPRESENTATIONS OR
+    WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH
+    RESPECT TO THE SOFTWARE.  BROADCOM SPECIFICALLY DISCLAIMS ANY AND
+    ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY, NONINFRINGEMENT,
+    FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES, ACCURACY OR
+    COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR CORRESPONDENCE
+    TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING OUT OF USE OR
+    PERFORMANCE OF THE SOFTWARE.
+ 
+3. TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM OR
+    ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL, INCIDENTAL, SPECIAL,
+    INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER ARISING OUT OF OR IN ANY
+    WAY RELATING TO YOUR USE OF OR INABILITY TO USE THE SOFTWARE EVEN
+    IF BROADCOM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES;
+    OR (ii) ANY AMOUNT IN EXCESS OF THE AMOUNT ACTUALLY PAID FOR THE
+    SOFTWARE ITSELF OR U.S. $1, WHICHEVER IS GREATER. THESE LIMITATIONS
+    SHALL APPLY NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY
+    LIMITED REMEDY.
+:>
+*/
+/*
+ * bcmtr_plugin_direct.c
+ *
+ * This plugin
+ * - TX: forwards messages to trmux
+ * - RX: waits on rx task's message queue
+ */
+
+#include <bcmos_system.h>
+
+#include <bcmtr_plugin.h>
+#include <bcm_config.h>
+#include <bcmolt_tr_mux.h>
+
+/* Receive OS message pool and queue */
+static bcmos_msg_pool bcmtr_rx_msg_pool[BCMTR_MAX_OLTS];
+static bcmos_msg_queue bcmtr_rxq[BCMTR_MAX_OLTS];
+
+/* Flags indicating init progress */
+static bcmos_bool rx_pool_created[BCMTR_MAX_OLTS];
+static bcmos_bool rxq_created[BCMTR_MAX_OLTS];
+static void _bcmtr_direct_rx_from_trmux(bcmolt_devid device, bcmos_buf *buf, bcmtrmux_channel channel, void *data);
+
+/* To resolve symbols in user_appl in band not applicable for VXWorks*/
+void using_inband_set(bcmos_bool using_inband){}
+bcmos_bool using_inband_get(void)
+{
+    return BCMOS_FALSE;
+}
+
+
+/* Transport IPC message data */
+typedef struct bcmtr_ipc_data
+{
+    bcmolt_buf buf;             /* Rx buffer */
+    bcmolt_subchannel subch;    /* rx channel */
+} bcmtr_ipc_data;
+
+
+/* System --> OLT buffer translation.
+ * system buffer is released in case of success
+ */
+static bcmos_errno bcmtr_sysbuf_to_oltbuf(bcmos_buf *sysb, bcmolt_buf *oltb)
+{
+    bcmos_errno err;
+
+    err = bcmolt_buf_alloc(oltb, bcmos_buf_length(sysb), BCMTR_BUF_ENDIAN);
+    if (err)
+        return err;
+    bcmolt_buf_write(oltb, bcmos_buf_data(sysb), bcmos_buf_length(sysb));
+    bcmos_buf_free(sysb);
+    oltb->curr = oltb->start;
+    return BCM_ERR_OK;
+}
+
+/* OLT buffer --> system buffer translation.
+ * OLT buffer must have headroom for bcmos_buf header
+ */
+static bcmos_buf *bcmtr_oltbuf_to_sysbuf(bcmolt_buf *oltb)
+{
+    bcmos_buf *sysb;
+    uint32_t len = bcmolt_buf_get_used(oltb);
+
+    sysb = bcmos_buf_alloc(len);
+    if (sysb == NULL)
+        return NULL;
+    memcpy(bcmos_buf_data(sysb), oltb->start, len);
+    bcmos_buf_length_set(sysb, len);
+    /* We don't release the original oltb because it is needed for retransmission.
+     * It will be released by the transport layer
+     */
+    return sysb;
+}
+
+/* Release message data */
+static void bcmtr_msg_data_release(bcmos_msg *msg)
+{
+    bcmtr_ipc_data *data = msg->data;
+    bcmolt_buf_free(&data->buf);
+}
+
+/** Close communication channel */
+static bcmos_errno bcmtr_direct_close(bcmtr_plugin_channel ch)
+{
+    bcmolt_devid device = (bcmolt_devid)(ch >> 8);
+    bcmtrmux_channel muxch = (bcmtrmux_channel)(ch & 0xff);
+
+    /* Unregister from TRMUX */
+    bcmtrmux_channel_unregister(device, muxch);
+
+    /* Destroy rx message pool */
+    if (rx_pool_created[device])
+    {
+        bcmos_msg_pool_destroy(&bcmtr_rx_msg_pool[device]);
+        rx_pool_created[device] = BCMOS_FALSE;
+    }
+
+    /* Destroy RX message queue */
+    if (rxq_created[device])
+    {
+        bcmos_msg_queue_destroy(&bcmtr_rxq[device]);
+        rxq_created[device] = BCMOS_FALSE;
+    }
+
+    return BCM_ERR_OK;
+}
+
+/** Open communication channel */
+static bcmos_errno bcmtr_direct_open(int device, bcmtr_plugin_cfg *cfg, bcmtr_plugin_channel *ch)
+{
+    /* The following variables are declared static in order to protect name string */
+    static bcmos_msg_queue_parm msgq_parm = { .name = "tr_rxq"};
+    bcmos_msg_pool_parm msg_pool_parm = {};
+    bcmtrmux_channel mux_channel = BCMTRMUX_CHANNEL_AUTO_ASSIGN;
+    bcmos_errno err;
+
+    /* Direct plugin supports only 1 application instance */
+    if (device >= BCMTR_MAX_OLTS)
+        BCMOS_TRACE_RETURN(BCM_ERR_PARM, "Device %u is out of range\n", device);
+    if (rx_pool_created[device])
+        BCMOS_TRACE_RETURN(BCM_ERR_ALREADY, "Transport is already initialized for device %u\n", device);
+
+    /* Create RX msg pool */
+    msg_pool_parm.size = BCMTR_MAX_RXQ_SIZE;            /* <-- Define parameter in bcmtr_config */
+    msg_pool_parm.data_size = sizeof(bcmtr_ipc_data);
+    msg_pool_parm.data_release = bcmtr_msg_data_release;
+    err = bcmos_msg_pool_create(&bcmtr_rx_msg_pool[device], &msg_pool_parm);
+    if (err)
+        BCMOS_TRACE_RETURN(err, "Can't create rx pool\n");
+
+    /* Create RX queue set */
+    err = bcmos_msg_queue_create(&bcmtr_rxq[device], &msgq_parm);
+    if (err)
+    {
+        bcmos_msg_pool_destroy(&bcmtr_rx_msg_pool[device]);
+        BCMOS_TRACE_RETURN(err, "Can't create rxq\n");
+    }
+
+    /* Register with trmux */
+    err = bcmtrmux_channel_register(device, &mux_channel, _bcmtr_direct_rx_from_trmux, (void *)NULL );
+    if (err)
+    {
+        bcmos_msg_pool_destroy(&bcmtr_rx_msg_pool[device]);
+        bcmos_msg_queue_destroy(&bcmtr_rxq[device]);
+        BCMOS_TRACE_RETURN(err, "Can't register with trmux\n");
+    }
+
+    rx_pool_created[device] = BCMOS_TRUE;
+    rxq_created[device] = BCMOS_TRUE;
+    *ch = (bcmtr_plugin_channel)((device << 8) | mux_channel);
+
+    return BCM_ERR_OK;
+}
+
+/** Send data */
+static bcmos_errno bcmtr_direct_send(bcmtr_plugin_channel ch, bcmolt_subchannel subch, bcmolt_buf *buf,
+    bcmtr_send_flags flags)
+{
+    bcmolt_devid device = (bcmolt_devid)(ch >> 8);
+    bcmtrmux_channel muxch = (bcmtrmux_channel)(ch & 0xff);
+    bcmos_buf *sysb;
+
+    /* Do zero-copy conversion from bcmolt_buf --> bcmos_buf. It is possible because room
+     * for bcmos_buf header is reserved in the beginning of bcmolt_buf
+     */
+    sysb = bcmtr_oltbuf_to_sysbuf(buf);
+    if (!sysb)
+        return BCM_ERR_NOMEM;
+    bcmtrmux_rx_from_host(device, muxch, sysb);
+
+    return BCM_ERR_OK;
+}
+
+/* Receive from trmux. Called in trmux context */
+static void _bcmtr_direct_rx_from_trmux(bcmolt_devid device, bcmos_buf *sysb, bcmtrmux_channel channel, void *data)
+{
+    bcmos_msg *msg;
+    bcmtr_ipc_data *ipc_data;
+    bcmos_errno err;
+
+    msg = bcmos_msg_pool_alloc(&bcmtr_rx_msg_pool[device]);
+    if (!msg)
+    {
+         /* <-- add some statistic here */
+        bcmos_buf_free(sysb);
+        return;
+    }
+    ipc_data = msg->data;
+    err = bcmtr_sysbuf_to_oltbuf(sysb, &ipc_data->buf);
+    if (err)
+    {
+        /* <-- add some statistic here */
+        bcmos_buf_free(sysb);
+        bcmos_msg_free(msg);
+        return;
+    }
+    ipc_data->subch = channel;
+    err = bcmos_msg_send(&bcmtr_rxq[device], msg, BCMOS_MSG_SEND_AUTO_FREE);
+    if (err)
+    {
+        /* <-- add some statistic here */
+    }
+}
+
+/** Receive data */
+static bcmos_errno bcmtr_direct_recv(bcmtr_plugin_channel ch, bcmolt_subchannel *subch, bcmolt_buf *buf)
+{
+    bcmolt_devid device = (bcmolt_devid)(ch >> 8);
+    bcmos_msg *msg;
+    bcmtr_ipc_data *data;
+    bcmos_errno err;
+
+    err = bcmos_msg_recv(&bcmtr_rxq[device], BCMTR_MSG_TIMEOUT, &msg);
+    if (err)
+    {
+        if (err != BCM_ERR_TIMEOUT)
+            err = BCM_ERR_COMM_FAIL;
+        return err;
+    }
+
+    data = msg->data;
+    *buf = data->buf;
+    *subch = data->subch;
+    /* Prevent buffer release when releasing OS message */
+    data->buf.start = data->buf.curr = NULL;
+    bcmos_msg_free(msg);
+
+    return BCM_ERR_OK;
+}
+
+/** Initialize plugin callbacks
+ * \param[in,out]       driver Transport plugin driver structure
+ * \return error code
+ */
+bcmos_errno bcmtr_plugin_init(bcmtr_plugin_cfg *cfg, bcmtr_driver *driver)
+{
+    driver->open = bcmtr_direct_open;
+    driver->close = bcmtr_direct_close;
+    driver->recv = bcmtr_direct_recv;
+    driver->send = bcmtr_direct_send;
+
+    return BCM_ERR_OK;
+}
+
diff --git a/bcm68620_release/release/host_customized/transport/plugin/mux/Makefile b/bcm68620_release/release/host_customized/transport/plugin/mux/Makefile
new file mode 100755
index 0000000..acf736a
--- /dev/null
+++ b/bcm68620_release/release/host_customized/transport/plugin/mux/Makefile
@@ -0,0 +1,16 @@
+#
+#  transport plugin
+#
+ifeq ("$(OS_KERNEL)", "linux")
+
+ifeq ("$(CONFIG_TRANSPORT_RAW)", "y")
+MOD_NAME = tr_plugin_mux
+MOD_TYPE = lib
+MOD_DEPS =  tr_plugin_raw tr_plugin_raw_ud  
+
+MOD_DEFS = -DBCMTR_PLUGIN_RAW
+
+srcs = bcmtr_nl_ud_mux.c
+
+endif
+endif
diff --git a/bcm68620_release/release/host_customized/transport/plugin/mux/bcmtr_nl_ud_mux.c b/bcm68620_release/release/host_customized/transport/plugin/mux/bcmtr_nl_ud_mux.c
new file mode 100755
index 0000000..cabaf47
--- /dev/null
+++ b/bcm68620_release/release/host_customized/transport/plugin/mux/bcmtr_nl_ud_mux.c
@@ -0,0 +1,40 @@
+

+#include <bcmos_system.h>

+#include <bcmtr_plugin.h>

+#include "bcmolt_tr_ud.h"

+#include "bcmolt_tr_nl.h"

+#include "bcmtr_internal.h"

+

+static bcmos_bool use_inband = BCMOS_FALSE;

+void using_inband_set(bcmos_bool using_inband)

+{

+    use_inband = using_inband;

+}

+bcmos_bool using_inband_get(void)

+{

+    return use_inband;

+}

+

+

+/** Initialize plugin callbacks

+ * \param[in,out]       driver Transport plugin driver structure

+ * \return error code

+ */

+bcmos_errno bcmtr_plugin_init(bcmtr_plugin_cfg *plugin_cfg, bcmtr_driver *driver)

+{

+    bcmos_errno rc = BCM_ERR_NOT_SUPPORTED;

+

+#ifdef SIMULATION_BUILD

+    rc = bcmtr_plugin_init(plugin_cfg, driver);

+#else

+    if (using_inband_get())

+    {

+        rc = bcmtr_ud_plugin_init(plugin_cfg, driver);

+    } else

+    {

+        rc = bcmtr_nl_plugin_init(plugin_cfg, driver);

+    }

+#endif

+

+    return rc;

+}

diff --git a/bcm68620_release/release/host_customized/transport/plugin/raw_nl/Makefile b/bcm68620_release/release/host_customized/transport/plugin/raw_nl/Makefile
new file mode 100644
index 0000000..8947722
--- /dev/null
+++ b/bcm68620_release/release/host_customized/transport/plugin/raw_nl/Makefile
@@ -0,0 +1,15 @@
+#
+# NL transport plugin
+#
+ifeq ("$(OS_KERNEL)", "linux")
+ifeq ("$(CONFIG_TRANSPORT_RAW)", "y")
+
+MOD_NAME = tr_plugin_raw
+MOD_TYPE = lib
+MOD_DEPS = tr_plugin
+MOD_DEFS = -DBCMTR_PLUGIN_RAW
+
+srcs = bcmolt_tr_plugin_nl_socket.c
+
+endif
+endif
diff --git a/bcm68620_release/release/host_customized/transport/plugin/raw_nl/bcmolt_tr_nl.h b/bcm68620_release/release/host_customized/transport/plugin/raw_nl/bcmolt_tr_nl.h
new file mode 100644
index 0000000..0707c3c
--- /dev/null
+++ b/bcm68620_release/release/host_customized/transport/plugin/raw_nl/bcmolt_tr_nl.h
@@ -0,0 +1,40 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef BCMOLT_TR_NL_H_
+#define BCMOLT_TR_NL_H_
+
+#include "bcmtr_internal.h"
+
+/* NL family. Must be some unused number */
+#define BCMTR_NL_FAMILY         28
+
+bcmos_errno bcmtr_nl_plugin_init(bcmtr_plugin_cfg *cfg, bcmtr_driver *driver);
+
+#endif
diff --git a/bcm68620_release/release/host_customized/transport/plugin/raw_nl/bcmolt_tr_plugin_nl_socket.c b/bcm68620_release/release/host_customized/transport/plugin/raw_nl/bcmolt_tr_plugin_nl_socket.c
new file mode 100644
index 0000000..df45234
--- /dev/null
+++ b/bcm68620_release/release/host_customized/transport/plugin/raw_nl/bcmolt_tr_plugin_nl_socket.c
@@ -0,0 +1,339 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <linux/netlink.h>
+#include <poll.h>
+
+#include <bcmos_system.h>
+#include <bcmtr_plugin.h>
+#include <bcm_config.h>
+#include <bcmolt_tr_nl.h>
+
+#define BCMNL_TXPREFIX_LEN      (NLMSG_HDRLEN + sizeof(uint32_t))
+
+
+/* Buffer list header */
+typedef struct bcmtr_nl_buf bcmtr_nl_buf;
+struct bcmtr_nl_buf
+{
+    STAILQ_ENTRY(bcmtr_nl_buf) list;
+    uint32_t len; /**< Total Length of buffer */
+};
+
+/* Plugin channel structure */
+typedef struct bcmtr_nl_channel
+{
+    int device;         /* Device */
+    STAILQ_HEAD(nl_buf_list, bcmtr_nl_buf) buf_list;
+    bcmos_sem sem;      /* Semaphore that indicates that new buffer is available */
+    bcmos_mutex lock;   /* lock that protects this structure */
+} bcmtr_nl_channel;
+
+/* A single NL socket is shared by multiple devices.
+ * The following control block is used for socket multiplexing
+ */
+static struct
+{
+    int s;                                      /* Netlink socket */
+    int users;                                  /* Number of users */
+    bcmos_mutex lock;                           /* lock that protects this structure */
+    bcmos_task nl_rx_task;                      /* Task that reads from the shared NL socket */
+    bcmtr_nl_channel *nlch[BCMTR_MAX_OLTS];     /* Channels */
+} bcmtr_nl_common;
+
+/* NL socket RX task handler */
+static int bcmtr_nl_rx_task_handler(long data);
+
+/** Open first communication channel */
+static bcmos_errno bcmtr_nl_open_first(void)
+{
+    struct sockaddr_nl sa = {};
+    bcmos_task_parm tp = {
+        .name = "nl_tx",
+        .handler = bcmtr_nl_rx_task_handler,
+        .priority = TASK_PRIORITY_TRANSPORT_RX
+    };
+    int s;
+    bcmos_errno err;
+
+    s = socket(AF_NETLINK, SOCK_RAW, BCMTR_NL_FAMILY);
+    if (s < 0)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_COMM_FAIL, "Can't create NL socket\n");
+    }
+
+    /* Connect to remote */
+    sa.nl_pid = 0;
+    if (connect(s, (struct sockaddr*)&sa, sizeof(sa)) == -1)
+    {
+        close(s);
+        BCMOS_TRACE_RETURN(BCM_ERR_COMM_FAIL, "Can't connect NL socket. error %d (%s)\n",
+            errno, strerror(errno));
+    }
+
+    /* Bind local */
+    sa.nl_family = AF_NETLINK;
+    sa.nl_pid = getpid();
+    if (bind(s, (struct sockaddr*)&sa, sizeof(sa) ) == -1)
+    {
+        close(s);
+        BCMOS_TRACE_RETURN(BCM_ERR_COMM_FAIL, "Can't bind NL socket. error %d (%s)\n",
+            errno, strerror(errno));
+    }
+
+    bcmtr_nl_common.s = s;
+
+    /* Create RX thread */
+    err = bcmos_task_create(&bcmtr_nl_common.nl_rx_task, &tp);
+    if (err)
+    {
+        close(s);
+        bcmtr_nl_common.s = 0;
+        BCMOS_TRACE_RETURN(BCM_ERR_COMM_FAIL, "Can't create NL RX thread. error %d (%s)\n",
+            err, bcmos_strerror(err));
+    }
+
+    return BCM_ERR_OK;
+}
+
+/** Close last communication channel */
+static bcmos_errno bcmtr_nl_close_last(void)
+{
+    close(bcmtr_nl_common.s);
+    return bcmos_task_destroy(&bcmtr_nl_common.nl_rx_task);
+}
+
+/** Open communication channel */
+static bcmos_errno bcmtr_nl_open(int device, bcmtr_plugin_cfg *cfg, bcmtr_plugin_channel *ch)
+{
+    bcmtr_nl_channel *nlch;
+    bcmos_errno err = BCM_ERR_OK;
+
+    if ((unsigned)device >= BCMTR_MAX_OLTS)
+        BCMOS_TRACE_RETURN(BCM_ERR_PARM, "Device %d is invalid\n");
+
+    if (bcmtr_nl_common.nlch[device])
+        BCMOS_TRACE_RETURN(BCM_ERR_ALREADY, "Channel for device %d is already opened\n");
+
+    nlch = bcmos_calloc(sizeof(*nlch));
+    if (!nlch)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_NOMEM, "No memory\n");
+    }
+    nlch->device = device;
+    STAILQ_INIT(&nlch->buf_list);
+    err = bcmos_mutex_create(&nlch->lock, 0, "tr_nlch");
+    err = err ? err : bcmos_sem_create(&nlch->sem, 0, 0, "tr_nlch");
+
+    /* Tie in with the control block shared by all devices */
+    bcmos_mutex_lock(&bcmtr_nl_common.lock);
+    if (!bcmtr_nl_common.users)
+        err = err ? err : bcmtr_nl_open_first();
+    if (err)
+    {
+        bcmos_mutex_unlock(&bcmtr_nl_common.lock);
+        bcmos_free(nlch);
+        BCMOS_TRACE_RETURN(err, "Failed to open or bind NL socket\n");
+    }
+    ++bcmtr_nl_common.users;
+    bcmtr_nl_common.nlch[device] = nlch;
+    bcmos_mutex_unlock(&bcmtr_nl_common.lock);
+
+    *ch = (bcmtr_plugin_channel)nlch;
+
+    return BCM_ERR_OK;
+}
+
+/** Close communication channel */
+static bcmos_errno bcmtr_nl_close(bcmtr_plugin_channel ch)
+{
+    bcmtr_nl_channel *nlch = (bcmtr_nl_channel *)ch;
+    bcmtr_nl_buf *nl_buf, *nl_buf_tmp;
+    bcmolt_buf buf;
+    bcmos_errno err = BCM_ERR_OK;
+
+    bcmos_mutex_lock(&bcmtr_nl_common.lock);
+    if (bcmtr_nl_common.nlch[nlch->device] == nlch)
+    {
+        bcmtr_nl_common.nlch[nlch->device] = NULL;
+        --bcmtr_nl_common.users;
+        if (bcmtr_nl_common.users)
+            err = bcmtr_nl_close_last();
+    }
+    else
+    {
+        BCMOS_TRACE_ERR("Unexpected NL channel\n");
+        err = BCM_ERR_INTERNAL;
+    }
+    bcmos_mutex_unlock(&bcmtr_nl_common.lock);
+    bcmos_mutex_destroy(&nlch->lock);
+    bcmos_sem_destroy(&nlch->sem);
+    STAILQ_FOREACH_SAFE(nl_buf, &nlch->buf_list, list, nl_buf_tmp)
+    {
+        STAILQ_REMOVE_HEAD(&nlch->buf_list, list);
+        bcmolt_buf_init(&buf, nl_buf->len, (uint8_t *)nl_buf, BCMTR_BUF_ENDIAN);
+        bcmolt_buf_free(&buf);
+    }
+    bcmos_free(nlch);
+
+    return err;
+}
+
+/** Send data */
+static bcmos_errno bcmtr_nl_send(bcmtr_plugin_channel ch, bcmolt_subchannel subch, bcmolt_buf *buf,
+    bcmtr_send_flags flags)
+{
+    bcmtr_nl_channel *nlch = (bcmtr_nl_channel *)ch;
+    int total_len = bcmolt_buf_get_used(buf);
+    struct nlmsghdr *nlmsg_hdr = (struct nlmsghdr *)(long)buf->start;
+    struct iovec iov = { buf->start, .iov_len=total_len };
+    struct msghdr msg = { .msg_iov = &iov, .msg_iovlen = 1 };
+    int rc;
+
+    nlmsg_hdr->nlmsg_len = total_len;
+    nlmsg_hdr->nlmsg_pid = getpid();
+    buf->start[NLMSG_HDRLEN] = nlch->device;
+
+    rc = sendmsg(bcmtr_nl_common.s, &msg, 0);
+
+    return (rc == total_len) ? BCM_ERR_OK : BCM_ERR_COMM_FAIL;
+}
+
+/* NL socket RX task handler */
+static int bcmtr_nl_rx_task_handler(long data)
+{
+    bcmos_task *my_task = bcmos_task_current();
+    struct iovec iov;
+    struct msghdr msg = { .msg_iov = &iov, .msg_iovlen = 1 };
+    uint32_t device;
+    bcmolt_buf buf = {};
+    bcmtr_nl_buf *nl_buf;
+    bcmtr_nl_channel *nlch;
+    bcmos_errno err;
+    int rc;
+
+    while (!my_task->destroy_request)
+    {
+        err = bcmolt_buf_alloc(&buf, BCMTR_MAX_MTU_SIZE + BCMNL_TXPREFIX_LEN, BCMTR_BUF_ENDIAN);
+        if (err)
+        {
+            /* We are out of memory, hopefully temporary. Wait and continue */
+            bcmos_usleep(1000);
+            continue;
+        }
+        iov.iov_base = buf.start;
+        iov.iov_len = buf.len;
+
+        /* Wait for message */
+        rc = recvmsg(bcmtr_nl_common.s, &msg, 0);
+        if (rc < NLMSG_HDRLEN)
+        {
+            BCMOS_TRACE_ERR("Fatal error. recvmsg() failed with error %d (%s)\n", errno, strerror(errno));
+            break;
+        }
+
+        /* Device follows NL header */
+        memcpy(&device, buf.start + NLMSG_HDRLEN, sizeof(uint32_t));
+        if (device >= BCMTR_MAX_OLTS || !(nlch = bcmtr_nl_common.nlch[device]))
+        {
+            BCMOS_TRACE_ERR("Got message from unexpected device %u. Ignored\n", device);
+            bcmolt_buf_free(&buf);
+            continue;
+        }
+
+        /* Put message on the channel's queue */
+        nl_buf = (bcmtr_nl_buf *)(long)buf.start;
+        nl_buf->len = rc;
+        bcmos_mutex_lock(&nlch->lock);
+        STAILQ_INSERT_TAIL(&nlch->buf_list, nl_buf, list);
+        bcmos_mutex_unlock(&nlch->lock);
+        bcmos_sem_post(&nlch->sem);
+
+        /* Buffer is in use elsewhere */
+        buf.start = buf.curr = NULL;
+    }
+
+    bcmolt_buf_free(&buf);
+    my_task->destroyed = BCMOS_TRUE;
+    return 0;
+}
+
+/** Receive data */
+static bcmos_errno bcmtr_nl_recv(bcmtr_plugin_channel ch, bcmolt_subchannel *subch, bcmolt_buf *buf)
+{
+    bcmtr_nl_channel *nlch = (bcmtr_nl_channel *)ch;
+    bcmtr_nl_buf *nl_buf;
+    bcmos_errno err;
+
+    err = bcmos_sem_wait(&nlch->sem, BCMTR_MSG_TIMEOUT * 1000);
+    if (err)
+        return err;
+    bcmos_mutex_lock(&nlch->lock);
+    nl_buf = STAILQ_FIRST(&nlch->buf_list);
+    if (!nl_buf)
+    {
+        bcmos_mutex_unlock(&nlch->lock);
+        return BCM_ERR_COMM_FAIL;
+    }
+    STAILQ_REMOVE_HEAD(&nlch->buf_list, list);
+    bcmos_mutex_unlock(&nlch->lock);
+
+    /* Got buffer */
+    bcmolt_buf_init(buf, nl_buf->len, (uint8_t *)nl_buf, BCMTR_BUF_ENDIAN);
+    buf->curr = buf->start + BCMNL_TXPREFIX_LEN;
+
+    *subch = 0;
+
+    return BCM_ERR_OK;
+}
+
+/** Initialize plugin callbacks
+ * \param[in,out]       driver Transport plugin driver structure
+ * \return error code
+ */
+bcmos_errno bcmtr_nl_plugin_init(bcmtr_plugin_cfg *cfg, bcmtr_driver *driver)
+{
+    bcmos_errno err;
+
+    bcmos_printf("Launching with a netlink connection\n");
+
+    driver->open = bcmtr_nl_open;
+    driver->close = bcmtr_nl_close;
+    driver->recv = bcmtr_nl_recv;
+    driver->send = bcmtr_nl_send;
+    cfg->headroom = BCMNL_TXPREFIX_LEN;
+
+    err = bcmos_mutex_create(&bcmtr_nl_common.lock, 0, "tr_nl");
+
+    return err;
+}
+
diff --git a/bcm68620_release/release/host_customized/transport/plugin/raw_ud/Makefile b/bcm68620_release/release/host_customized/transport/plugin/raw_ud/Makefile
new file mode 100755
index 0000000..4126ef3
--- /dev/null
+++ b/bcm68620_release/release/host_customized/transport/plugin/raw_ud/Makefile
@@ -0,0 +1,14 @@
+#
+# Unix Domain transport plugin
+#
+ifeq ("$(OS_KERNEL)", "linux")
+ifeq ("$(CONFIG_TRANSPORT_RAW)", "y")
+
+MOD_NAME = tr_plugin_raw_ud
+MOD_TYPE = lib
+MOD_DEPS = tr_plugin
+
+srcs = bcmolt_tr_plugin_ud_socket.c
+
+endif
+endif
diff --git a/bcm68620_release/release/host_customized/transport/plugin/raw_ud/bcmolt_tr_plugin_ud_socket.c b/bcm68620_release/release/host_customized/transport/plugin/raw_ud/bcmolt_tr_plugin_ud_socket.c
new file mode 100755
index 0000000..14d9003
--- /dev/null
+++ b/bcm68620_release/release/host_customized/transport/plugin/raw_ud/bcmolt_tr_plugin_ud_socket.c
@@ -0,0 +1,182 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+
+#include <sys/socket.h>
+#include <sys/un.h>
+
+#include <bcmos_system.h>
+#include <bcmtr_plugin.h>
+#include <bcm_config.h>
+#include <bcmolt_tr_ud.h>
+
+char socket_path[] = SOCKET_PATH;
+/* Plugin channel structure */
+typedef struct bcmtr_ud_channel
+{
+    int device;         /* Device */
+    int sock;                                   /* UD socket */
+} bcmtr_ud_channel;
+
+
+/* This plugin stores both device id and per-device socket handle in
+ * transport's channel_id handle as
+ * (device_id << 24) | socket_handle.
+ * The following functions recover socket_handle and device_id from the channel_id handle
+ */
+
+
+/** Open communication channel */
+static bcmos_errno bcmtr_ud_open(int device, bcmtr_plugin_cfg *cfg, bcmtr_plugin_channel *ch)
+{
+    struct sockaddr_un addr;
+    bcmtr_ud_channel *udch;
+
+    udch = bcmos_calloc(sizeof(*udch));
+    if (!udch)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_NOMEM, "No memory\n");
+    }
+
+    if ( (udch->sock = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) {
+            perror("socket error");
+            exit(-1);
+        }
+
+        memset(&addr, 0, sizeof(addr));
+        addr.sun_family = AF_UNIX;
+        BUG_ON(sizeof(socket_path)>=sizeof(addr.sun_path));
+        memcpy(addr.sun_path, socket_path, sizeof(socket_path));
+
+        if (connect(udch->sock, (struct sockaddr*)&addr, sizeof(addr)) == -1) {
+            perror("connect error");
+            exit(-1);
+        }
+
+    bcmos_printf("Opened %d\n", udch->sock);
+
+    udch->device = device;
+
+    *ch = (bcmtr_plugin_channel)udch;
+
+    return BCM_ERR_OK;
+}
+
+/** Close communication channel */
+static bcmos_errno bcmtr_ud_close(bcmtr_plugin_channel ch)
+{
+    bcmtr_ud_channel *udch = (bcmtr_ud_channel *)ch;
+
+    bcmos_printf("Closed %d\n", udch->sock);
+        close(udch->sock);
+    bcmos_free(udch);
+
+    return BCM_ERR_OK;
+}
+
+/** Send data */
+static bcmos_errno bcmtr_ud_send(bcmtr_plugin_channel ch, bcmolt_subchannel subch, bcmolt_buf *buf,
+    bcmtr_send_flags flags)
+{
+    bcmtr_ud_channel *udch = (bcmtr_ud_channel *)ch;
+    int buflen = bcmolt_buf_get_used(buf);
+    int len;
+    len = send(udch->sock, buf->start, buflen, 0);
+ 
+    if (len < buflen)
+    {
+        bcmos_printf("%s: sock_sendmsg(%u) --> %d. errno=%d\n", __FUNCTION__, buflen, len, errno);
+        return BCM_ERR_COMM_FAIL;
+    }
+
+    return BCM_ERR_OK;
+}
+
+/** Receive data */
+static bcmos_errno bcmtr_ud_recv(bcmtr_plugin_channel ch, bcmolt_subchannel *subch, bcmolt_buf *buf)
+{
+    bcmtr_ud_channel *udch = (bcmtr_ud_channel *)ch;
+    int len;
+    fd_set read_fds;
+    struct timeval tv;
+    bcmos_errno err;
+    int rc;
+
+    FD_ZERO(&read_fds);
+    FD_SET(udch->sock, &read_fds);
+    tv.tv_sec = 0;
+    tv.tv_usec = BCMTR_MSG_TIMEOUT * 1000;
+
+    rc = select(udch->sock + 1, &read_fds, NULL, NULL, &tv);
+    if (rc < 0)
+    {
+        perror("select");
+        return BCM_ERR_COMM_FAIL;
+    }
+    if (!rc || !FD_ISSET(udch->sock, &read_fds))
+    {
+        return BCM_ERR_TIMEOUT;
+    }
+
+    err = bcmolt_buf_alloc(buf, BCMTR_MAX_MTU_SIZE, BCMOLT_BUF_ENDIAN_FIXED);
+    if (err)
+        return BCM_ERR_NOMEM;
+
+    len = recv(udch->sock, buf->start, BCMTR_MAX_MTU_SIZE, 0);
+    if (len <= 0)
+    {
+        bcmolt_buf_free(buf);
+        return BCM_ERR_COMM_FAIL;
+    }
+
+    bcmos_printf("Received %d bytes from dev_control\n", len);
+
+    buf->len = len;
+    return BCM_ERR_OK;
+}
+
+/** Initialize plugin callbacks
+ * \param[in,out]       driver Transport plugin driver structure
+ * \return error code
+ */
+bcmos_errno bcmtr_ud_plugin_init(bcmtr_plugin_cfg *cfg, bcmtr_driver *driver)
+{
+    bcmos_errno err = BCM_ERR_OK;
+
+    bcmos_printf("Launching with a unix domain connection\n");
+
+    driver->open = bcmtr_ud_open;
+    driver->close = bcmtr_ud_close;
+    driver->recv = bcmtr_ud_recv;
+    driver->send = bcmtr_ud_send;
+    cfg->headroom = BCMUD_TXPREFIX_LEN;
+
+    return err;
+}
+
diff --git a/bcm68620_release/release/host_customized/transport/plugin/raw_ud/bcmolt_tr_ud.h b/bcm68620_release/release/host_customized/transport/plugin/raw_ud/bcmolt_tr_ud.h
new file mode 100755
index 0000000..bca32d4
--- /dev/null
+++ b/bcm68620_release/release/host_customized/transport/plugin/raw_ud/bcmolt_tr_ud.h
@@ -0,0 +1,41 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef BCMOLT_TR_UD_H_
+#define BCMOLT_TR_UD_H_
+
+#include "bcmtr_internal.h"
+
+#define BCMUD_TXPREFIX_LEN (sizeof(uint32_t))
+
+#define SOCKET_PATH "\0bcm68620"
+
+bcmos_errno bcmtr_ud_plugin_init(bcmtr_plugin_cfg *cfg, bcmtr_driver *driver);
+
+#endif
diff --git a/bcm68620_release/release/host_customized/transport/plugin/udp/Makefile b/bcm68620_release/release/host_customized/transport/plugin/udp/Makefile
new file mode 100644
index 0000000..8106edc
--- /dev/null
+++ b/bcm68620_release/release/host_customized/transport/plugin/udp/Makefile
@@ -0,0 +1,17 @@
+# Transport: UDP Plugin
+#
+
+CONFIG_TRANSPORT_RAW ?= n
+CONFIG_TRANSPORT_UDP ?= y
+ifeq ("$(CONFIG_TRANSPORT_RAW)", "y")
+	CONFIG_TRANSPORT_UDP = n
+endif
+
+ifeq ("$(CONFIG_TRANSPORT_UDP)", "y")
+MOD_NAME = tr_plugin_udp
+MOD_TYPE = lib
+MOD_DEPS = tr_plugin
+MOD_DEFS = -DBCMTR_UDP_SUPPORT
+
+srcs = bcmtr_plugin_udp_socket.c
+endif
diff --git a/bcm68620_release/release/host_customized/transport/plugin/udp/bcmtr_plugin_udp_socket.c b/bcm68620_release/release/host_customized/transport/plugin/udp/bcmtr_plugin_udp_socket.c
new file mode 100644
index 0000000..4ab4444
--- /dev/null
+++ b/bcm68620_release/release/host_customized/transport/plugin/udp/bcmtr_plugin_udp_socket.c
@@ -0,0 +1,220 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#include <bcmos_system.h>
+
+#include <sys/socket.h>
+#include <sys/types.h>
+#include <netinet/in.h>
+
+#include <bcmtr_plugin.h>
+#include <bcm_config.h>
+
+/* Last seen host IP and port */
+static struct sockaddr_in peer_sa[BCMTR_MAX_OLTS];
+
+/* This plugin stores both device id and per-device socket handle in
+ * transport's channel_id handle as
+ * (device_id << 24) | socket_handle.
+ * The following functions recover socket_handle and device_id from the channel_id handle
+ */
+
+static inline int _bcmtr_channel_to_socket(bcmtr_plugin_channel ch)
+{
+    return (int)(ch & 0xffffff);
+}
+
+static inline int _bcmtr_channel_to_device(bcmtr_plugin_channel ch)
+{
+    return (int)((ch >> 24) & 0xff);
+}
+
+/** Open communication channel */
+static bcmos_errno bcmtr_udp_open(int device, bcmtr_plugin_cfg *cfg, bcmtr_plugin_channel *ch)
+{
+    struct sockaddr_in sa = {};
+    struct timeval timeout = { .tv_sec = 0, .tv_usec = BCMTR_MSG_TIMEOUT * 1000 };  
+    int s;
+
+    s = socket(AF_INET, SOCK_DGRAM, 0);
+    if (s < 0)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_COMM_FAIL, "Can't create UDP socket\n");
+    }
+
+    /* Bind local */
+    sa.sin_family = AF_INET;
+    sa.sin_port = htons(cfg->x.udp.my_port);
+    sa.sin_addr.s_addr = INADDR_ANY;
+    if (bind(s, (struct sockaddr*)&sa, sizeof(sa) ) == -1)
+    {
+        close(s);
+        perror("bind");
+        BCMOS_TRACE_RETURN(BCM_ERR_COMM_FAIL, "Can't bind UDP socket to %d.%d.%d.%d:%d\n",
+            (int)(cfg->x.udp.my_ip >> 24), (int)((cfg->x.udp.my_ip >> 16) & 0xff),
+            (int)((cfg->x.udp.my_ip >> 8) & 0xff), (int)(cfg->x.udp.my_ip & 0xff),
+            (int)cfg->x.udp.my_port);
+    }
+    bcmos_printf("%s: socket bound to port %d\n", __FUNCTION__, (int)cfg->x.udp.my_port);
+
+    if (setsockopt(s, SOL_SOCKET, SO_SNDTIMEO, (char *)&timeout, sizeof(timeout)) < 0)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_COMM_FAIL, "Can't set socket option for send timeout\n");
+    }
+
+    /* Connect to remote */
+    if (cfg->x.udp.remote_port)
+    {
+        peer_sa[device].sin_family = AF_INET;
+        peer_sa[device].sin_port = htons(cfg->x.udp.remote_port);
+        peer_sa[device].sin_addr.s_addr = htonl(cfg->x.udp.remote_ip);
+    }
+    *ch = (device << 24) | s;
+
+    return BCM_ERR_OK;
+}
+
+/* print error message with throttling: not oftener than ones per second */
+static void _bcmtr_udp_print_err(bcmos_errno err, const char *err_msg)
+{
+    static int nerrors;
+    static uint32_t last_timestamp;
+
+    ++nerrors;
+
+    if (!last_timestamp || bcmos_timestamp() - last_timestamp > 1000000)
+    {
+        BCMOS_TRACE_ERR("Error in low-level UDP transport. %s-%s. Errors since last report: %d\n",
+            err_msg, bcmos_strerror(err), nerrors);
+        last_timestamp = bcmos_timestamp();
+        nerrors = 0;
+    }
+}
+
+/** Close communication channel */
+static bcmos_errno bcmtr_udp_close(bcmtr_plugin_channel ch)
+{
+    close(_bcmtr_channel_to_socket(ch));
+    return BCM_ERR_OK;
+}
+
+/** Send data */
+static bcmos_errno bcmtr_udp_send(bcmtr_plugin_channel ch, bcmolt_subchannel subch, bcmolt_buf *buf,
+    bcmtr_send_flags flags)
+{
+    int sock = _bcmtr_channel_to_socket(ch);
+    int device = _bcmtr_channel_to_device(ch);
+    int buflen = bcmolt_buf_get_used(buf);
+    struct iovec iov = { .iov_base = buf->start, .iov_len = buflen };
+    struct msghdr msg = {
+        .msg_iov = &iov, .msg_iovlen = 1, .msg_flags = 0,
+        .msg_name = (void *)&peer_sa[device], .msg_namelen = sizeof(peer_sa[0])
+    };
+    int len;
+
+    len = sendmsg(sock, &msg, 0);
+    if (len < buflen)
+    {
+        bcmos_printf("%s: sock_sendmsg(%u) --> %d. errno=%d\n", __FUNCTION__, buflen, len, errno);
+        return BCM_ERR_COMM_FAIL;
+    }
+
+    return BCM_ERR_OK;
+}
+
+/** Receive data */
+static bcmos_errno bcmtr_udp_recv(bcmtr_plugin_channel ch, bcmolt_subchannel *subch, bcmolt_buf *buf)
+{
+    int sock = _bcmtr_channel_to_socket(ch);
+    int device = _bcmtr_channel_to_device(ch);
+    struct iovec iov;
+    struct msghdr msg = {
+        .msg_iov = &iov, .msg_iovlen = 1,
+        .msg_name = (void *)&peer_sa[device], .msg_namelen = sizeof(peer_sa[0])
+    };
+    int len;
+    fd_set read_fds;
+    struct timeval tv;
+    bcmos_errno err;
+    int rc;
+
+    FD_ZERO(&read_fds);
+    FD_SET(sock, &read_fds);
+    tv.tv_sec = 0;
+    tv.tv_usec = BCMTR_MSG_TIMEOUT * 1000;
+
+    rc = select(sock + 1, &read_fds, NULL, NULL, &tv);
+    if (rc < 0)
+    {
+        perror("select");
+        return BCM_ERR_COMM_FAIL;
+    }
+    if (!rc || !FD_ISSET(sock, &read_fds))
+    {
+        return BCM_ERR_TIMEOUT;
+    }
+
+    err = bcmolt_buf_alloc(buf, BCMTR_MAX_MTU_SIZE, BCMOLT_BUF_ENDIAN_FIXED);
+    if (err)
+        return BCM_ERR_NOMEM;
+
+    iov.iov_base = buf->start;
+    iov.iov_len = BCMTR_MAX_MTU_SIZE;
+    len = recvmsg(sock, &msg, 0);
+    if (len <= 0)
+    {
+        _bcmtr_udp_print_err(BCM_ERR_COMM_FAIL, "recvmsg() failed\n");
+        bcmolt_buf_free(buf);
+        return BCM_ERR_COMM_FAIL;
+    }
+    buf->len = len;
+    *subch = ntohs(peer_sa[device].sin_port);
+
+    return BCM_ERR_OK;
+}
+
+/** Initialize plugin callbacks
+ * \param[in,out]       driver Transport plugin driver structure
+ * \return error code
+ */
+bcmos_errno bcmtr_plugin_init(bcmtr_plugin_cfg *cfg, bcmtr_driver *driver)
+{
+    if (cfg->type != BCMTR_TYPE_UDP)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_PARM, "Invalid plugin type. Expected UDP\n");
+    }
+
+    driver->open = bcmtr_udp_open;
+    driver->close = bcmtr_udp_close;
+    driver->recv = bcmtr_udp_recv;
+    driver->send = bcmtr_udp_send;
+
+    return BCM_ERR_OK;
+}
+
diff --git a/bcm68620_release/release/host_customized/transport/unix_socket/Makefile b/bcm68620_release/release/host_customized/transport/unix_socket/Makefile
new file mode 100644
index 0000000..911e3cc
--- /dev/null
+++ b/bcm68620_release/release/host_customized/transport/unix_socket/Makefile
@@ -0,0 +1,10 @@
+# UD transport driver
+#
+ifneq ("$(SIMULATION_BUILD)", "y")
+MOD_NAME = udtr
+MOD_TYPE = lib
+MOD_DEPS = trmux tr_plugin_raw_ud
+
+srcs = bcmolt_tr_ud_driver.c
+
+endif
diff --git a/bcm68620_release/release/host_customized/transport/unix_socket/bcmolt_tr_ud_driver.c b/bcm68620_release/release/host_customized/transport/unix_socket/bcmolt_tr_ud_driver.c
new file mode 100755
index 0000000..30143da
--- /dev/null
+++ b/bcm68620_release/release/host_customized/transport/unix_socket/bcmolt_tr_ud_driver.c
@@ -0,0 +1,231 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+/*
+ * bcmolt_tr_ud_driver.c
+ *
+ * Unix Domain socket based transport.
+ *
+ */
+#include <stdio.h>
+#include <unistd.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#include <stdlib.h>
+
+#include <bcmolt_tr_mux.h>
+#include <bcmolt_tr_ud_driver.h>
+#include <bcmolt_tr_ud.h>
+
+#define BCMTR_MEM_PACKETS       10000
+#define BCMTR_MEM_OVERHEAD      1024
+#define BCMTR_MIN_RCVBUF_SIZE   (BCMTR_MEM_PACKETS * BCMTR_MEM_OVERHEAD)
+
+char socket_path[] = SOCKET_PATH;
+
+typedef struct ud_conn_info {
+    bcmtrmux_channel channel[BCMTR_MAX_OLTS];
+    int sock;
+} ud_conn_info;
+
+static bcmos_task rx_thread;
+static int fd;
+static ud_conn_info *conn_info[BCMTRMUX_MAX_CHANNELS];
+static int ii;
+
+static void _bcmtr_ud_recv(bcmolt_devid device, bcmos_buf *buf, bcmtrmux_channel channel, void *data)
+{
+    uint32_t data_length = bcmos_buf_length(buf); 
+    int kk;
+
+    /* Find the socket to respond on... */
+    for (kk=0; kk<sizeof(conn_info)/sizeof(conn_info[0]); kk++)
+    {
+        if (conn_info[kk]->channel[device] == channel)
+        {
+            int len = 0;
+            bcmos_printf("Sending to user application for index %d...", kk);
+            len = send(conn_info[kk]->sock, bcmos_buf_data(buf), data_length, 0);
+            if (len < 0)
+            {
+                bcmos_printf("Failed to send respose to user application - what now?\n");
+            }
+            bcmos_printf("Sent %d bytes\n", len);
+            break;
+        }
+    }
+}
+
+static int bcmtr_ud_rx_handler(long arg)
+{
+    int rc, jj;
+    bcmos_buf *buf;
+    struct timeval tv;
+    fd_set read_set;
+
+    while (1)
+    {
+        int count;
+        FD_ZERO(&read_set);
+        for (jj=0; jj<sizeof(conn_info)/sizeof(conn_info[0]); jj++)
+        {
+            if (conn_info[jj])
+            {
+                FD_SET(conn_info[jj]->sock, &read_set);
+            }
+        }
+
+        tv.tv_sec = 0; tv.tv_usec = 100000;
+
+        count = select (FD_SETSIZE, &read_set, NULL, NULL, &tv);
+        if (count < 0)
+            break;
+        
+        for (jj = 0; jj < sizeof(conn_info)/sizeof(conn_info[0]) ; jj++)
+        {
+            if (conn_info[jj] && FD_ISSET(conn_info[jj]->sock, &read_set))
+            {
+                buf = bcmos_buf_alloc(BCMTR_MAX_MTU_SIZE);
+                if (!buf)
+                {
+                    return BCM_ERR_NOMEM;
+                }
+                memset(buf, 0 , sizeof(buf));
+                rc=read(conn_info[jj]->sock, bcmos_buf_data(buf), buf->size);
+                buf->len = rc;
+                buf->data+=BCMUD_TXPREFIX_LEN;
+                if (rc < 0 ) {
+                    perror("read");
+                    exit(-1);
+                }
+                else if (rc == 0) {
+                    close(conn_info[jj]->sock);  
+                    bcmos_free(conn_info[jj]);
+                    conn_info[jj]=0;
+                    bcmos_printf("Closing %d\n", jj);
+                }
+                else {
+                    bcmolt_devid device = 0;  /*  How do we get this?  
+                                                  Need to stuff it at the begining of the message. */
+                    bcmtrmux_rx_from_host(device, conn_info[jj]->channel[device], buf);
+                }
+            }
+        }
+    }
+    return BCM_ERR_OK;
+}
+
+static int next_conn_info(bcmolt_devid device)
+{
+  int jj=0;
+  while (jj<sizeof(conn_info)/sizeof(conn_info[0]))
+    {
+      jj++; ii++;
+      if (ii>sizeof(conn_info)/sizeof(conn_info[0])) ii=0;
+      if (!conn_info[ii]) return 0;
+    }
+  return -1;
+}
+
+bcmos_errno bcmtr_ud_init(void)
+{
+    bcmos_errno err = BCM_ERR_OK;
+    struct sockaddr_un addr;
+    bcmos_task_parm parm = {
+        .priority = TASK_PRIORITY_TRANSPORT_RX,
+        .stack_size = BCMTR_RX_THREAD_STACK,
+        .handler = bcmtr_ud_rx_handler,
+        .name = "ud handler"
+    };
+
+    ii=0;
+    
+    if ( (fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) {
+        perror("socket error");
+        exit(-1);
+    }
+
+    memset(&addr, 0, sizeof(addr));
+    addr.sun_family = AF_UNIX;
+    BUG_ON(sizeof(socket_path)>=sizeof(addr.sun_path));
+    memcpy(addr.sun_path, socket_path, sizeof(socket_path));
+
+    if (bind(fd, (struct sockaddr*)&addr, sizeof(addr)) == -1) {
+        perror("bind error");
+        exit(-1);
+    }
+
+    if (listen(fd, 5) == -1) {
+        perror("listen error");
+        exit(-1);
+    }
+
+    err = bcmos_task_create(&rx_thread, &parm);
+ 
+    if (err) return err;
+
+    while (1) {
+        bcmolt_devid device = 0;  /*  How do we get this?  Need to stuff it at the begining of the message. */
+        int s;
+        ud_conn_info *ci;
+        bcmos_errno rc;
+        bcmtrmux_channel channel = BCMTRMUX_CHANNEL_AUTO_ASSIGN;
+
+        if ( (s = accept(fd, NULL, NULL)) == -1) {
+            perror("accept error");
+            sleep(1);
+            continue;
+        }
+
+        ci = bcmos_calloc(sizeof(*ci)); 
+        if (!ci)
+        {
+            BCMOS_TRACE_RETURN(BCM_ERR_NOMEM, "No memory\n");
+        }
+        rc = bcmtrmux_channel_register(device, &channel, _bcmtr_ud_recv, conn_info);
+        if (rc)
+        {
+            bcmos_printf("%s: can't register channel for device %u. rc=%d\n", __FUNCTION__, device, (int)rc);
+            return rc;;
+        }
+        ci->sock = s;
+        ci->channel[device]=channel;
+        conn_info[ii] = ci;
+
+        bcmos_printf("Accepting %d-%d\n", ii, conn_info[ii]->sock);
+
+        if (next_conn_info(device) < 0) return -1;
+    }
+    return BCM_ERR_OK;
+}
+
+void bcmtr_ud_exit(void)
+{
+
+}
diff --git a/bcm68620_release/release/host_customized/transport/unix_socket/bcmolt_tr_ud_driver.h b/bcm68620_release/release/host_customized/transport/unix_socket/bcmolt_tr_ud_driver.h
new file mode 100755
index 0000000..9726c9c
--- /dev/null
+++ b/bcm68620_release/release/host_customized/transport/unix_socket/bcmolt_tr_ud_driver.h
@@ -0,0 +1,42 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+/*
+ * bcmtr_ud_driver.h - host unix domain socket transport driver
+ */
+
+#ifndef BCMOLT_TR_UD_DRIVER_H_
+#define BCMOLT_TR_UD_DRIVER_H_
+
+#include <bcmos_system.h>
+
+bcmos_errno bcmtr_ud_init(void);
+void bcmtr_ud_exit(void);
+
+#endif
diff --git a/bcm68620_release/release/host_customized/user_config/Makefile b/bcm68620_release/release/host_customized/user_config/Makefile
new file mode 100644
index 0000000..1db59e8
--- /dev/null
+++ b/bcm68620_release/release/host_customized/user_config/Makefile
@@ -0,0 +1,16 @@
+#
+# user_config
+#
+MOD_NAME = user_config
+MOD_DEPS = common_api fld ll_pcie
+
+ifeq ("$(OS_KERNEL)", "linux")
+    MOD_TYPE = linux_lib
+else
+    MOD_TYPE = lib
+endif
+
+ifneq ("$(BOARD)", "")
+    srcs = board/$(BOARD)/bcmolt_user_utils.c
+    MOD_DEPS += i2c_devs board_selector
+endif
diff --git a/bcm68620_release/release/host_customized/user_config/bcmolt_user_utils.h b/bcm68620_release/release/host_customized/user_config/bcmolt_user_utils.h
new file mode 100644
index 0000000..ff32e36
--- /dev/null
+++ b/bcm68620_release/release/host_customized/user_config/bcmolt_user_utils.h
@@ -0,0 +1,75 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef _BCMOLT_USER_UTILS_H_
+#define _BCMOLT_USER_UTILS_H_
+
+#include <bcmolt_model_types.h>
+#include <bcmos_system.h>
+#include <bcmolt_msg.h>
+#include <bcmolt_fld.h>
+
+/* Validate that the given system mode is supported for the given device.
+ * This function returns BCM_ERR_OK if the system mode is valid or a different error code otherwise. */
+bcmos_errno bcmuser_system_mode_validate(bcmolt_devid device, bcmolt_system_mode system_mode);
+
+/* Read file from a file system into a buffer. */
+int bcmuser_image_read(
+    bcmolt_devid device,
+    bcmolt_device_image_type image_type,
+    uint32_t offset,
+    uint8_t *buf,
+    uint32_t buf_size);
+
+/* Turn off the processor of the embedded device. */
+bcmos_errno bcmuser_device_off(bcmolt_devid device);
+
+/* Turn on the processor of the embedded device. */
+bcmos_errno bcmuser_device_on(bcmolt_devid device);
+
+/* Check whether or not the embedded device processor is running. */
+bcmos_errno bcmuser_device_is_running(bcmolt_devid device, bcmos_bool *is_cpu_on);
+
+/* Prepare the PCIe bus for communication with the embedded devices */
+bcmos_errno bcmuser_pcie_prepare(void);
+
+/* Prepare the PCIe channel for communication with the embedded device.
+ * For example, this function may re-enumerate the PCI-E bus. */
+bcmos_errno bcmuser_pcie_channel_prepare(bcmolt_devid device);
+
+bcmos_errno bcmuser_pcie_channel_prepare_for_kt2(bcmolt_devid device);
+
+/* Remove the PCIe channel for communication with the embedded device.
+ * For example, this function may re-enumerate the PCI-E bus. */
+bcmos_errno bcmuser_pcie_channel_remove(bcmolt_devid device);
+
+/* Reset the host processor. */
+bcmos_errno bcmuser_host_reset(void);
+
+#endif
diff --git a/bcm68620_release/release/host_customized/user_config/board/wrx/bcmolt_user_utils.c b/bcm68620_release/release/host_customized/user_config/board/wrx/bcmolt_user_utils.c
new file mode 100644
index 0000000..94f58a9
--- /dev/null
+++ b/bcm68620_release/release/host_customized/user_config/board/wrx/bcmolt_user_utils.c
@@ -0,0 +1,533 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#include <linux/fs.h>
+#include <linux/buffer_head.h>
+#include <linux/reboot.h>
+#include <linux/pci.h>
+#include <asm/segment.h>
+#include <asm/uaccess.h>
+#include <bcmos_system.h>
+#include <bcm_config.h>
+#include <bcmolt_msg.h>
+#include <bcmolt_fld.h>
+#include <bcmolt_llpcie.h>
+#include <bcmolt_conv.h>
+#include <bcmolt_i2c_devs.h>
+#include <bcmolt_board_selector.h>
+#include "bcmolt_user_utils.h"
+
+#define BCM_I2C_DEV_ADDR_START typedef enum {
+#define BCM_I2C_DEV_ADDR(name, desc, val) name = val,
+#define BCM_I2C_DEV_ADDR_END } bcm_i2c_dev_addr;
+#include <bcmolt_i2c_devs_addr.h>
+
+#define BOOT_FILE                       "/opt/bcm68620/bcm68620_boot.bin"
+#define APPL_FILE                       "/opt/bcm68620/bcm68620_appl.bin"
+#define ONU_FW_FILE                     "/opt/bcm68620/dummy_onu_firmware.bin"
+
+#define FPGA_REG_FPGA_VERSION 0x0
+#define FPGA_REG_BOARD_CONF 0x1
+#define FPGA_REG_RESETS 0x2
+
+#define FPGA_RST_BIT_DEVICE 0x0
+#define FPGA_DEVICE_SWITCH  4
+
+#define FPGA_ENABLE_ALL_DEVICES 0x1f
+#define FPGA_ENABLE_SWITCH              (1 << FPGA_DEVICE_SWITCH)
+/* For now swap devices for consistency with PCI enumeration */
+#define FPGA_DEVICE_RESET_BIT(dev)      (1 << (FPGA_RST_BIT_DEVICE + dev))
+
+/* Minimum required FPGA version for reading default system mode via BOARD_CONF register. */
+#define FPGA_VER_FOR_SVK_CONFIG 6
+
+/* Lock that protects critical sections */
+static bcmos_mutex user_lock;
+static bcmos_bool user_lock_initialized;
+
+typedef enum
+{
+    SVK_BOARD_ID_1    = 0x7, /* SVK #1 - BCM968620S: all PON flavors supported, SFP+ */
+    SVK_BOARD_ID_2_XG = 0x6, /* SVK #2 - BCM968620XG: XGPON */
+    SVK_BOARD_ID_2_XE = 0x5, /* SVK #2 - BCM968620XE: 10G EPON */
+    SVK_BOARD_ID_3    = 0x4, /* SVK #3 - BCM968620K: all PON flavors supported, XFP */
+    DVT_BOARD_ID      = 0x3, /* DVT board */
+} svk_board_id;
+
+typedef enum
+{
+    SVK_MODE_GPON_16X     = 0xF, /* SVK #1/3: 16x GPON mode, SVK #2: only valid mode */
+    SVK_MODE_EPON_1G_16X  = 0xE, /* SVK #1/3: 16x 1G EPON mode */
+    SVK_MODE_XGPON        = 0xD, /* SVK #1/3: 8x XGPON mode */
+    SVK_MODE_EPON_10G_8X  = 0xC, /* SVK #1/3: 8x 10G EPON mode */
+    SVK_MODE_EPON_GPON_8X = 0xB, /* SVK #1/3: 8x 10G EPON + 8x GPON coexistence mode */
+} svk_mode;
+
+
+#define CHECK_RETURN_ERROR(cond,rc) \
+		do { \
+			if (cond) {\
+				bcmos_printf("%s#%d: failed with rc=%d\n", __FUNCTION__, __LINE__, rc);\
+				return rc;\
+			}\
+		} while (0)
+
+
+static void userlock_lock(void)
+{
+    if (!user_lock_initialized)
+    {
+        bcmos_mutex_create(&user_lock, 0, "reset_lock");
+        user_lock_initialized = BCMOS_TRUE;
+    }
+    bcmos_mutex_lock(&user_lock);
+}
+
+
+static void userlock_unlock(void)
+{
+    bcmos_mutex_unlock(&user_lock);
+}
+
+static struct file *file_open(const char *path, int flags)
+{
+    struct file *fd = NULL;
+    mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
+
+    fd = filp_open(path, flags, mode);
+    if(IS_ERR(fd))
+        return NULL;
+    return fd;
+}
+
+static void file_close(struct file *file)
+{
+    filp_close(file, NULL);
+}
+
+static int file_read(struct file *file, uint32_t offset, uint8_t *data, unsigned int size)
+{
+    unsigned long long o = offset;
+    mm_segment_t oldfs;
+    int bytes_read;
+
+    oldfs = get_fs();
+    set_fs(get_ds());
+    bytes_read = vfs_read(file, data, size, &o);
+    set_fs(oldfs);
+    if (bytes_read < 0)
+    {
+        BCMOS_TRACE_ERR("vfs_read returned error %d\n", bytes_read);
+        return (int)BCM_ERR_IO;
+    }
+    return bytes_read;
+}
+
+static int file_write(struct file* file, unsigned long long offset, unsigned char* data, unsigned int size)
+{
+    mm_segment_t oldfs;
+    int ret;
+
+    oldfs = get_fs();
+    set_fs(get_ds());
+
+    ret = vfs_write(file, data, size, &offset);
+
+    set_fs(oldfs);
+    return ret;
+}
+
+static bcmos_errno file_write_1(const char *path)
+{
+    struct file *fd;
+    char to_write[] = { '1' };
+    loff_t pos = 0;
+    ssize_t bytes_written;
+
+    fd = file_open(path, O_WRONLY);
+    if ((fd == NULL) || (fd == (void *)-ENOENT)) /* -ENOENT; No such file or directory */
+    {
+        BCMOS_TRACE_ERR("Can't open file %s for writing. Error %s\n",
+            path, bcmos_strerror(fd == NULL ? BCM_ERR_NULL : BCM_ERR_NOENT));
+        return (fd == NULL ? BCM_ERR_NULL : BCM_ERR_NOENT);
+    }
+
+    bytes_written = file_write(fd, pos, to_write, sizeof(to_write));
+    if (bytes_written != sizeof(to_write))
+    {
+        BCMOS_TRACE_ERR("vfs_write returned incorrect number of characters written: %d\n", bytes_written);
+    }
+
+    file_close(fd);
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno i2c_fpga_read(uint32_t reg, uint32_t *val)
+{
+    return maple_i2c_read_fpga(maple_i2c_get_client(FPGA_I2C_ADDR), reg, val);
+}
+
+static bcmos_errno i2c_fpga_write(uint32_t reg, uint32_t val)
+{
+    return maple_i2c_write_fpga(maple_i2c_get_client(FPGA_I2C_ADDR), reg, val);
+}
+
+static bcmos_errno i2c_config_switch(void)
+{
+    uint8_t to_write = 1;
+    int ret;
+
+    ret = maple_i2c_write(maple_i2c_get_client(I2C_SW0_I2C_ADDR), &to_write, 1);
+    if (ret != 0)
+    {
+        BCMOS_TRACE_ERR("Failed to write switch: %d\n", ret);
+        return BCM_ERR_INTERNAL;
+    }
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno i2c_fpga_version_get(uint32_t *version)
+{
+    return i2c_fpga_read(FPGA_REG_FPGA_VERSION, version);
+}
+
+static bcmos_errno i2c_svk_config_get(svk_board_id *board_id, svk_mode *mode)
+{
+    uint32_t val;
+    bcmos_errno rc;
+
+    rc = i2c_fpga_read(FPGA_REG_BOARD_CONF, &val);
+    if (rc == BCM_ERR_OK)
+    {
+        *board_id = (svk_board_id)(val & 0x7);
+        *mode = (svk_mode)((val >> 4) & 0xF);
+    }
+
+    return rc;
+}
+
+static bcmos_errno i2c_device_cpu_state_set(bcmolt_devid device, bcmos_bool is_on)
+{
+    bcmos_errno rc;
+    uint32_t reset_values;
+
+    /* Prevent race condition when this function is called for 2 devices simultaneously */
+    userlock_lock();
+
+    do
+    {
+        rc = i2c_config_switch();
+        if (rc)
+            break;
+
+        /* Read-modify-write so we can set only the relevant bit */
+        rc = i2c_fpga_read(FPGA_REG_RESETS, &reset_values);
+        if (rc)
+            break;
+
+        if (is_on)
+            reset_values |= FPGA_DEVICE_RESET_BIT(device);
+        else
+            reset_values &= ~FPGA_DEVICE_RESET_BIT(device);
+
+        rc = i2c_fpga_write(FPGA_REG_RESETS, reset_values);
+
+    } while (0);
+
+    userlock_unlock();
+
+    CHECK_RETURN_ERROR(rc != BCM_ERR_OK, rc);
+
+    bcmos_usleep(1000);
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_bool bcmuser_system_mode_is_valid(bcmolt_system_mode system_mode, svk_board_id board_id, svk_mode svk_mode)
+{
+    switch (board_id)
+    {
+    case SVK_BOARD_ID_1:
+    case SVK_BOARD_ID_3:
+        switch (svk_mode)
+        {
+        case SVK_MODE_GPON_16X:
+            return (system_mode == BCMOLT_SYSTEM_MODE_GPON__4_X ||
+                    system_mode == BCMOLT_SYSTEM_MODE_GPON__8_X ||
+                    system_mode == BCMOLT_SYSTEM_MODE_GPON__16_X ||
+                    system_mode == BCMOLT_SYSTEM_MODE_GPON_8_XGPON_4_X_COEXISTENCE ||
+                    system_mode == BCMOLT_SYSTEM_MODE_XGPON_1__8_X ||
+                    system_mode == BCMOLT_SYSTEM_MODE_XGPON_1__4_X ||
+                    system_mode == BCMOLT_SYSTEM_MODE_NGPON2__8_X_2_P_5_G);
+        case SVK_MODE_EPON_1G_16X:
+            return (system_mode == BCMOLT_SYSTEM_MODE_EPON__4_X ||
+                    system_mode == BCMOLT_SYSTEM_MODE_EPON__8_X ||
+                    system_mode == BCMOLT_SYSTEM_MODE_EPON__16_X ||
+                    system_mode == BCMOLT_SYSTEM_MODE_EPON__2_X_10_G ||
+                    system_mode == BCMOLT_SYSTEM_MODE_EPON__4_X_10_G ||
+                    system_mode == BCMOLT_SYSTEM_MODE_EPON__8_X_10_G);
+        case SVK_MODE_XGPON:
+            return (system_mode == BCMOLT_SYSTEM_MODE_XGPON_1__8_X ||
+                    system_mode == BCMOLT_SYSTEM_MODE_XGPON_1__4_X ||
+                    system_mode == BCMOLT_SYSTEM_MODE_NGPON2__8_X_2_P_5_G);
+        case SVK_MODE_EPON_10G_8X:
+            return
+                (system_mode == BCMOLT_SYSTEM_MODE_EPON__4_X_COEXISTENCE_TDMA) ||
+                (system_mode == BCMOLT_SYSTEM_MODE_EPON__8_X_COEXISTENCE_TDMA) ||
+                (system_mode == BCMOLT_SYSTEM_MODE_EPON__2_X_10_G) ||
+                (system_mode == BCMOLT_SYSTEM_MODE_EPON__4_X_10_G) ||
+                (system_mode == BCMOLT_SYSTEM_MODE_EPON__8_X_10_G);
+        default:
+            return BCMOS_FALSE;
+        }
+    case SVK_BOARD_ID_2_XG:
+        return (system_mode == BCMOLT_SYSTEM_MODE_XGPON_1__8_X ||
+                system_mode == BCMOLT_SYSTEM_MODE_XGPON_1__4_X ||
+                system_mode == BCMOLT_SYSTEM_MODE_NGPON2__8_X_2_P_5_G ||
+                system_mode == BCMOLT_SYSTEM_MODE_XGS__2_X_10_G ||
+                system_mode == BCMOLT_SYSTEM_MODE_NGPON2__2_X_10_G);
+    case SVK_BOARD_ID_2_XE:
+        return
+            (system_mode == BCMOLT_SYSTEM_MODE_EPON__4_X_COEXISTENCE_TDMA) ||
+            (system_mode == BCMOLT_SYSTEM_MODE_EPON__8_X_COEXISTENCE_TDMA) ||
+            (system_mode == BCMOLT_SYSTEM_MODE_AE_8_X) ||
+            (system_mode == BCMOLT_SYSTEM_MODE_EPON__2_X_10_G) ||
+            (system_mode == BCMOLT_SYSTEM_MODE_EPON__4_X_10_G) ||
+            (system_mode == BCMOLT_SYSTEM_MODE_EPON__8_X_10_G);
+    case DVT_BOARD_ID:
+        return BCMOS_TRUE;
+    default:
+        return BCMOS_FALSE;
+    }
+}
+
+bcmos_errno bcmuser_system_mode_validate(bcmolt_devid device, bcmolt_system_mode system_mode)
+{
+    bcmos_errno rc;
+    uint32_t version;
+    svk_board_id board_id;
+    svk_mode svk_mode;
+
+    rc = i2c_config_switch();
+    CHECK_RETURN_ERROR(rc != BCM_ERR_OK, rc);
+
+    rc = i2c_fpga_version_get(&version);
+    if (rc != BCM_ERR_OK)
+    {
+        BCMOS_TRACE_INFO("Failed to read FPGA version\n");
+        return rc;
+    }
+
+    if (version < FPGA_VER_FOR_SVK_CONFIG)
+    {
+        /* this FPGA version don't support reading the SVK version, so we must assume it's OK */
+        return BCM_ERR_OK;
+    }
+
+    rc = i2c_svk_config_get(&board_id, &svk_mode);
+    if (rc != BCM_ERR_OK)
+    {
+        BCMOS_TRACE_INFO("Failed to read SVK config\n");
+        return rc;
+    }
+
+    if (bcmuser_system_mode_is_valid(system_mode, board_id, svk_mode))
+    {
+        return BCM_ERR_OK;
+    }
+    else
+    {
+        BCMOS_TRACE_INFO(
+            "System mode %s is not supported for board ID %d, SVK mode %d\n",
+            bcmolt_system_mode_name(system_mode),
+            board_id,
+            svk_mode);
+        return BCM_ERR_NOT_SUPPORTED;
+    }
+}
+
+int bcmuser_image_read(bcmolt_devid device, bcmolt_device_image_type image_type,
+    uint32_t offset, uint8_t *buf, uint32_t buf_size)
+{
+    struct file *fd;
+    int bytes_read;
+    bcmos_errno rc;
+    static int2str_t image_type2str[] =
+    {
+        {BCMOLT_DEVICE_IMAGE_TYPE_BOOTLOADER, BOOT_FILE},
+        {BCMOLT_DEVICE_IMAGE_TYPE_APPLICATION, APPL_FILE},
+        {BCMOLT_DEVICE_IMAGE_TYPE_ITU_PON_ONU_FIRMWARE, ONU_FW_FILE},
+        {-1}
+    };
+    const char *filename;
+
+    filename = int2str(image_type2str, image_type);
+    fd = file_open(filename, O_RDONLY);
+    if ((fd == NULL) || (fd == (void *)-ENOENT)) /* -ENOENT; No such file or directory */
+    {
+        rc = (fd == NULL ? BCM_ERR_NULL : BCM_ERR_NOENT);
+        BCMOS_TRACE_ERR("filp_open returned error %s (%d)\n", bcmos_strerror(rc), rc);
+        return rc;
+    }
+    bytes_read = file_read(fd, offset, buf, buf_size);
+    file_close(fd);
+    if (bytes_read < 0)
+    {
+        return (int)BCM_ERR_IO;
+    }
+    return bytes_read;
+}
+
+bcmos_errno bcmuser_device_off(bcmolt_devid device)
+{
+    /* Ignore request for non-existing device */
+    if (device >= bcmolt_board_num_maple_devices())
+        return BCM_ERR_OK;
+    BCMOS_TRACE_INFO("device=%u\n", device);
+    return i2c_device_cpu_state_set(device, BCMOS_FALSE);
+}
+
+bcmos_errno bcmuser_device_on(bcmolt_devid device)
+{
+    bcmos_errno rc;
+
+    BCMOS_TRACE_INFO("device=%u\n", device);
+    if (device >= bcmolt_board_num_maple_devices())
+        return BCM_ERR_RANGE;
+
+    rc = i2c_device_cpu_state_set(device, BCMOS_TRUE);
+    /* Wait a moment to make sure the device is discoverable in case it just booted. */
+    bcmos_usleep(50 * 1000);
+
+    return rc;
+}
+
+bcmos_errno bcmuser_device_is_running(bcmolt_devid device, bcmos_bool *is_running)
+{
+    bcmos_errno rc;
+    uint32_t reset_values;
+    uint32_t version;
+
+    rc = i2c_config_switch();
+    CHECK_RETURN_ERROR(rc != BCM_ERR_OK, rc);
+
+    rc = i2c_fpga_version_get(&version);
+    if (rc != BCM_ERR_OK)
+    {
+        BCMOS_TRACE_INFO("Failed to read FPGA version\n");
+        return rc;
+    }
+    if (!bcmolt_board_supports_standalone(version))
+    {
+        /* For older FPGAs that don't support standalone mode, the device is taken out of reset at boot.  We need to lie
+           and tell device control that it's not running, so it will be programmed from scratch. */
+        BCMOS_TRACE_INFO("FPGA version %d doesn't support standalone mode\n", version);
+        *is_running = BCMOS_FALSE;
+        return BCM_ERR_OK;
+    }
+
+    rc = i2c_fpga_read(FPGA_REG_RESETS, &reset_values);
+    CHECK_RETURN_ERROR(rc != BCM_ERR_OK, rc);
+
+    *is_running = ((reset_values & FPGA_DEVICE_RESET_BIT(device)) != 0);
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcmuser_host_reset(void)
+{
+    bcm_ll_pcie_cleanup();
+    kernel_restart(NULL);
+    return BCM_ERR_OK; /* will never be reached */
+}
+
+bcmos_errno bcmuser_pcie_prepare(void)
+{
+    bcmos_errno rc;
+    uint32_t reset_values;
+    const char *pcie_rescan_file = bcmolt_board_pci_rescan_string_get();
+    int i;
+
+    /* - Take all devices out of reset
+     * - rescan bus
+     * - restore reset value
+     */
+
+    rc = i2c_config_switch();
+    CHECK_RETURN_ERROR(rc != BCM_ERR_OK, rc);
+
+    /* Read-modify-write so we can set only the relevant bit */
+    rc = i2c_fpga_read(FPGA_REG_RESETS, &reset_values);
+    CHECK_RETURN_ERROR(rc != BCM_ERR_OK, rc);
+
+    rc = i2c_fpga_write(FPGA_REG_RESETS, FPGA_ENABLE_ALL_DEVICES);
+    CHECK_RETURN_ERROR(rc != BCM_ERR_OK, rc);
+
+    bcmos_usleep(50000);
+
+    /* Now recan PCI bus */
+    /* Now re-enumerate the PCI bus by writing a 1 to the 'rescan' file. */
+    rc = file_write_1(pcie_rescan_file);
+    if (rc != BCM_ERR_OK)
+        BCMOS_TRACE_ERR("file write returned error %s (%d)\n", bcmos_strerror(rc), rc);
+    bcmos_usleep(100 * 1000);
+
+    /* Now initialize ll_pcie driver and map maple devices */
+    rc = bcm_ll_pcie_init();
+    CHECK_RETURN_ERROR(rc != BCM_ERR_OK, rc);
+
+    /* Now restore rest values. Keep switch out of reset */
+    for (i = 0; i < bcmolt_board_num_maple_devices(); i++)
+    {
+        if ((FPGA_DEVICE_RESET_BIT(i) & reset_values) == 0)
+            bcmuser_pcie_channel_remove(i);
+    }
+    rc = i2c_fpga_write(FPGA_REG_RESETS, reset_values | FPGA_ENABLE_SWITCH);
+    CHECK_RETURN_ERROR(rc != BCM_ERR_OK, rc);
+
+    return 0;
+}
+
+bcmos_errno bcmuser_pcie_channel_prepare(bcmolt_devid device)
+{
+    bcmos_errno rc;
+
+    rc = bcm_ll_pcie_dev_enable(device);
+    if (rc)
+        BCMOS_TRACE_ERR("Couldn't prepare device %d. Error %s\n", device, bcmos_strerror(rc));
+
+    return rc;
+}
+
+bcmos_errno bcmuser_pcie_channel_remove(bcmolt_devid device)
+{
+    bcm_ll_pcie_dev_disable(device);
+    return BCM_ERR_OK;
+}
diff --git a/bcm68620_release/release/host_customized/user_config/board_selector/Makefile b/bcm68620_release/release/host_customized/user_config/board_selector/Makefile
new file mode 100644
index 0000000..bfbfe46
--- /dev/null
+++ b/bcm68620_release/release/host_customized/user_config/board_selector/Makefile
@@ -0,0 +1,15 @@
+#
+# board_selector
+#
+MOD_NAME = board_selector
+MOD_SUPPRESS_OS_DEP = y
+
+ifeq ("$(OS_KERNEL)", "linux")
+    MOD_TYPE = linux_lib
+else
+    MOD_TYPE = lib
+endif
+
+ifneq ("$(BOARD)", "")
+    srcs = $(BOARD)/bcmolt_board_selector.c
+endif
diff --git a/bcm68620_release/release/host_customized/user_config/board_selector/bcmolt_board_selector.h b/bcm68620_release/release/host_customized/user_config/board_selector/bcmolt_board_selector.h
new file mode 100644
index 0000000..74a8103
--- /dev/null
+++ b/bcm68620_release/release/host_customized/user_config/board_selector/bcmolt_board_selector.h
@@ -0,0 +1,61 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+/*
+ * bcmolt_board_selector.h
+ */
+
+#ifndef _BCMOLT_BOARD_SELECTOR_H_
+#define _BCMOLT_BOARD_SELECTOR_H_
+
+#include <bcmos_system.h>
+
+/* bus, devfn --> device mapping table */
+typedef struct
+{
+    int bus;
+    int devfn;
+    int device;
+} bus_devfn_devid;
+
+/* Get PCI rescan string. It is used in linux to rescan PCIe bus */
+const char *bcmolt_board_pci_rescan_string_get(void);
+
+/* Get bus, devfn --> dev_id mapping table.
+ * The table is terminated by row with bus=-1,devfn=-1
+ */
+const bus_devfn_devid *bcmolt_board_pci_map_table_get(void);
+
+/* Return TRUE if board supports Maple-standalone mode */
+bcmos_bool bcmolt_board_supports_standalone(uint32_t version);
+
+/* Returns number of maple devices on the board */
+uint8_t bcmolt_board_num_maple_devices(void);
+
+#endif /* _BCMOLT_BOARD_SELECTOR_H_ */
diff --git a/bcm68620_release/release/host_customized/user_config/board_selector/wrx/bcmolt_board_selector.c b/bcm68620_release/release/host_customized/user_config/board_selector/wrx/bcmolt_board_selector.c
new file mode 100644
index 0000000..c997a12
--- /dev/null
+++ b/bcm68620_release/release/host_customized/user_config/board_selector/wrx/bcmolt_board_selector.c
@@ -0,0 +1,113 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+/*
+ * bcmolt_board_selector.c
+ */
+
+#include <linux/fs.h>
+#include "bcmolt_board_selector.h"
+
+static bus_devfn_devid bus_devfn_devid_table_svk4[] = {
+    { 5, 0, 0},
+    { 3, 0, 1},
+    {-1,-1,-1},
+};
+
+static bus_devfn_devid bus_devfn_devid_table_svk1_3[] = {
+    { 3, 0, 0},
+    {-1,-1,-1},
+};
+
+#define SVK4_IDENT_FILE                 "/etc/svk4"
+
+#define PCIE_DEVICE_RESCAN_FILE_SVK4    "/sys/bus/pci/devices/0000:02:00.0/rescan"
+#define PCIE_DEVICE_RESCAN_FILE_SVK1_3  "/sys/bus/pci/devices/0000:02:01.0/rescan"
+
+/* Minimum required FPGA version for standalone mode (host / embedded processors running disconnected). */
+#define FPGA_VER_FOR_STANDALONE 7
+
+static struct file *file_open(const char *path, int flags)
+{
+    struct file *fd = NULL;
+    mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
+
+    fd = filp_open(path, flags, mode);
+    if(IS_ERR(fd))
+        return NULL;
+    return fd;
+}
+
+static void file_close(struct file *file)
+{
+    filp_close(file, NULL);
+}
+
+static bcmos_bool can_read_file(const char *path)
+{
+    struct file *fd = file_open(path, O_RDONLY);
+    if ((fd == NULL) || (fd == (void *)-ENOENT)) /* -ENOENT; No such file or directory */
+    {
+        return BCMOS_FALSE;
+    }
+
+    file_close(fd);
+    return BCMOS_TRUE;
+}
+
+static bcmos_bool board_is_svk4(void)
+{
+    return can_read_file(SVK4_IDENT_FILE);
+}
+
+/* Get PCI rescan string. It is used in linux to rescan PCIe bus */
+const char *bcmolt_board_pci_rescan_string_get(void)
+{
+    return board_is_svk4() ? PCIE_DEVICE_RESCAN_FILE_SVK4 : PCIE_DEVICE_RESCAN_FILE_SVK1_3;
+}
+
+/* Get bus, devfn --> dev_id mapping table.
+ * The table is terminated by row with bus=-1,devfn=-1
+ */
+const bus_devfn_devid *bcmolt_board_pci_map_table_get(void)
+{
+    return board_is_svk4() ? bus_devfn_devid_table_svk4 : bus_devfn_devid_table_svk1_3;
+}
+
+/* Return TRUE if board supports Maple-standalone mode */
+bcmos_bool bcmolt_board_supports_standalone(uint32_t version)
+{
+    return board_is_svk4() || version >= FPGA_VER_FOR_STANDALONE;
+}
+
+/* Returns number of maple devices on the board */
+uint8_t bcmolt_board_num_maple_devices(void)
+{
+    return board_is_svk4() ? 2 : 1;
+}
diff --git a/bcm68620_release/release/host_customized/utils_linux/Makefile b/bcm68620_release/release/host_customized/utils_linux/Makefile
new file mode 100644
index 0000000..78867d8
--- /dev/null
+++ b/bcm68620_release/release/host_customized/utils_linux/Makefile
@@ -0,0 +1,15 @@
+# Makefile for building utilities as linux module
+#
+ifeq ("$(OS_KERNEL)", "linux")
+
+MOD_NAME = utils_linux
+MOD_TYPE = linux_lib
+srcs = bcmolt_buf.c
+
+# If called by linux kernel builder - add include paths manually.
+# It is not elegant, but we'll not have many linux modules
+ifneq ("$(KBUILD_SRC)", "")
+	-include $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
+endif
+
+endif
diff --git a/bcm68620_release/release/host_customized/utils_linux/bcmolt_buf.c b/bcm68620_release/release/host_customized/utils_linux/bcmolt_buf.c
new file mode 120000
index 0000000..f7b8320
--- /dev/null
+++ b/bcm68620_release/release/host_customized/utils_linux/bcmolt_buf.c
@@ -0,0 +1 @@
+../../host_driver/utils/bcmolt_buf.c
\ No newline at end of file
diff --git a/bcm68620_release/release/host_customized/utils_linux/bcmolt_buf.h b/bcm68620_release/release/host_customized/utils_linux/bcmolt_buf.h
new file mode 120000
index 0000000..4f773fe
--- /dev/null
+++ b/bcm68620_release/release/host_customized/utils_linux/bcmolt_buf.h
@@ -0,0 +1 @@
+../../host_driver/utils/bcmolt_buf.h
\ No newline at end of file
diff --git a/bcm68620_release/release/host_customized/utils_linux/bcmolt_conv.h b/bcm68620_release/release/host_customized/utils_linux/bcmolt_conv.h
new file mode 120000
index 0000000..6fb8c97
--- /dev/null
+++ b/bcm68620_release/release/host_customized/utils_linux/bcmolt_conv.h
@@ -0,0 +1 @@
+../../host_driver/utils/bcmolt_conv.h
\ No newline at end of file
diff --git a/bcm68620_release/release/host_driver/api/Makefile b/bcm68620_release/release/host_driver/api/Makefile
new file mode 100644
index 0000000..fc035d1
--- /dev/null
+++ b/bcm68620_release/release/host_driver/api/Makefile
@@ -0,0 +1,13 @@
+# Common API
+#
+MOD_NAME = common_api
+MOD_TYPE = lib
+MOD_DEPS = utils dev_log
+
+srcs = bcmolt_msg.c
+
+MOD_INC_DIRS = $(SRC_DIR) $(MODEL_OUT_DIR)
+ifeq ("$(RELEASE_BUILD)", "y")
+    MOD_INC_DIRS += $(SRC_DIR)/../transport
+    srcs += bcmolt_api.c
+endif
diff --git a/bcm68620_release/release/host_driver/api/bcmolt_api.c b/bcm68620_release/release/host_driver/api/bcmolt_api.c
new file mode 100644
index 0000000..f15f7e5
--- /dev/null
+++ b/bcm68620_release/release/host_driver/api/bcmolt_api.c
@@ -0,0 +1,291 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#include <bcmtr_interface.h>
+#include "bcmolt_api.h"
+#include "bcmolt_msg_pack.h"
+
+system_mode_change_cb sm_change_cb;
+
+/** Set configuration
+ *
+ * \param[in]   dev     Device id
+ * \param[in]   cfg     Configuration
+ * \returns error code
+ */
+bcmos_errno bcmolt_cfg_set(bcmolt_devid dev, bcmolt_cfg *cfg)
+{
+    bcmos_errno err;
+    bcmolt_presence_mask ro_mask;
+
+    cfg->hdr.type = BCMOLT_MSG_TYPE_SET;
+    /* Make sure that no attemp is made to set read-only property */
+    err = bcmolt_get_prop_readonly_mask(cfg->hdr.obj_type, &ro_mask);
+    if (err)
+    {
+        return err;
+    }
+    if ((ro_mask & cfg->hdr.presence_mask))
+    {
+        cfg->hdr.dir = BCMOLT_MSG_DIR_RESPONSE;
+        cfg->hdr.err = BCM_ERR_READ_ONLY;
+        strncpy(cfg->hdr.err_text, "Read-only fields cannot be set", BCMOLT_MAX_ERR_TEXT_LENGTH);
+        return cfg->hdr.err;
+    }
+    err = bcmtr_call(dev, &cfg->hdr);
+    if ((cfg->hdr.err == BCM_ERR_OK) &&
+        (cfg->hdr.obj_type == BCMOLT_OBJ_ID_DEVICE) &&
+        (BCMOLT_CFG_PROP_IS_SET((bcmolt_device_cfg*)cfg, device, system_mode)))
+    {
+        bcmolt_system_mode_set(dev, ((bcmolt_device_cfg*)cfg)->data.system_mode);
+        if (NULL != sm_change_cb)
+        {
+            sm_change_cb(dev);
+        }
+    }
+    return err;
+}
+
+/** Get configuration
+ *
+ * \param[in]   dev     Device id
+ * \param[in]   cfg     Configuration
+ * \returns error code
+ * The error code can indicate local or remote failure
+ */
+bcmos_errno bcmolt_cfg_get(bcmolt_devid dev, bcmolt_cfg *cfg)
+{
+    cfg->hdr.type = BCMOLT_MSG_TYPE_GET;
+    return bcmtr_call(dev, &cfg->hdr);
+}
+
+/** Clear configuration
+ *
+ * \param[in]   dev     Device id
+ * \param[in]   cfg     Configuration
+ * \returns error code
+ * The error code can indicate local or remote failure
+ */
+bcmos_errno bcmolt_cfg_clear(bcmolt_devid dev, bcmolt_cfg *cfg)
+{
+    cfg->hdr.presence_mask = BCMOLT_PRESENCE_MASK_ALL; /* clear is always object-wide */
+    cfg->hdr.type = BCMOLT_MSG_TYPE_CLEAR;
+    return bcmtr_call(dev, &cfg->hdr);
+}
+
+/** Get statistics
+ *
+ * \param[in]   dev     Device id
+ * \param[in]   stat    Configuration
+ * \param[in]   flags   Flags
+ * \returns error code
+ * The error code can indicate local or remote failure
+ */
+bcmos_errno bcmolt_stat_get(bcmolt_devid dev, bcmolt_stat *stat, bcmolt_stat_flags flags)
+{
+    stat->hdr.type = BCMOLT_MSG_TYPE_GET;
+    if ((flags & BCMOLT_STAT_FLAGS_CLEAR_ON_READ))
+    {
+        stat->hdr.type |= BCMOLT_MSG_TYPE_CLEAR;
+    }
+    return bcmtr_call(dev, &stat->hdr);
+}
+
+/** Get statistics configuration
+ *
+ * \param[in]   dev     Device id
+ * \param[in]   cfg     Configuration
+ * \returns error code
+ * The error code can indicate local or remote failure
+ */
+bcmos_errno bcmolt_stat_cfg_get(bcmolt_devid dev, bcmolt_stat_cfg *cfg)
+{
+    cfg->hdr.type = BCMOLT_MSG_TYPE_GET;
+    cfg->hdr.presence_mask = BCMOLT_PRESENCE_MASK_ALL;
+    return bcmtr_call(dev, &cfg->hdr);
+}
+
+/** Set statistics configuration
+ *
+ * \param[in]   dev     Device id
+ * \param[in]   cfg     Configuration
+ * \returns error code
+ * The error code can indicate local or remote failure
+ */
+bcmos_errno bcmolt_stat_cfg_set(bcmolt_devid dev, bcmolt_stat_cfg *cfg)
+{
+    cfg->hdr.type = BCMOLT_MSG_TYPE_SET;
+    cfg->hdr.presence_mask = BCMOLT_PRESENCE_MASK_ALL;
+    return bcmtr_call(dev, &cfg->hdr);
+}
+
+/** Get indication configuration
+ *
+ * \param[in]   dev     Device id
+ * \param[in]   cfg     Configuration
+ * \returns error code
+ * The error code can indicate local or remote failure
+ */
+bcmos_errno bcmolt_auto_cfg_get(bcmolt_devid dev, bcmolt_auto_cfg *cfg)
+{
+    cfg->hdr.type = BCMOLT_MSG_TYPE_GET;
+    if (cfg->hdr.presence_mask == 0)
+    {
+        cfg->hdr.presence_mask = BCMOLT_PRESENCE_MASK_ALL;
+    }
+    return bcmtr_call(dev, &cfg->hdr);
+}
+
+/** Set indication configuration
+ *
+ * \param[in]   dev     Device id
+ * \param[in]   cfg     Configuration
+ * \returns error code
+ * The error code can indicate local or remote failure
+ */
+bcmos_errno bcmolt_auto_cfg_set(bcmolt_devid dev, bcmolt_auto_cfg *cfg)
+{
+    cfg->hdr.type = BCMOLT_MSG_TYPE_SET;
+    return bcmtr_call(dev, &cfg->hdr);
+}
+
+/** Invoke operation
+ *
+ * \param[in]   dev     Device id
+ * \param[in]   oper    Operation
+ * \returns error code
+ */
+bcmos_errno bcmolt_oper_submit(bcmolt_devid dev, bcmolt_oper *oper)
+{
+    oper->hdr.type = BCMOLT_MSG_TYPE_SET;
+    return bcmtr_call(dev, &oper->hdr);
+}
+
+/** Send message to ONU
+ *
+ * \param[in]   dev     Device id
+ * \param[in]   msg     Message to be sent
+ * \returns error code
+ */
+bcmos_errno bcmolt_proxy_send(bcmolt_devid dev, bcmolt_proxy *msg)
+{
+    msg->hdr.type = BCMOLT_MSG_TYPE_SET;
+    return bcmtr_call(dev, &msg->hdr);
+}
+
+
+/* (Un)Register auto/proxy message */
+static bcmos_errno bcmolt_rx_cb_set(bcmolt_devid device, bcmolt_mgt_group group, bcmolt_rx_cfg *rx_cfg)
+{
+    bcmtr_handler_parm tparm = {
+        .group = group,
+        .subgroup = BCMOLT_SUBGROUP_ANY,
+    };
+    bcmos_errno rc = BCM_ERR_OK;
+    int i;
+
+    if (!rx_cfg)
+        return BCM_ERR_PARM;
+
+    tparm.object = rx_cfg->obj_type;
+    tparm.app_cb = rx_cfg->rx_cb;
+    tparm.flags = rx_cfg->flags;
+    if (rx_cfg->flags == BCMOLT_AUTO_FLAGS_DISPATCH)
+        tparm.module = rx_cfg->module;
+
+    for (i = 0; i < BCMTR_MAX_INSTANCES && !rc; i++)
+    {
+        /* Skip interfaces that are not present in the default mask */
+        if (rx_cfg->pon_ni_mask && 0 == (rx_cfg->pon_ni_mask & (1 << i)))
+            continue;
+
+        tparm.instance = i;
+        if (rx_cfg->rx_cb)
+        {
+            /* If registration of specific object - unregister the old handler first */
+            if (rx_cfg->obj_type != BCMOLT_OBJECT_ANY)
+                bcmtr_msg_handler_unregister(device, &tparm);
+            rc = bcmtr_msg_handler_register(device, &tparm);
+        }
+        else
+        {
+            rc = bcmtr_msg_handler_unregister(device, &tparm);
+        }
+    }
+    return rc;
+}
+
+/* (Un)Register autonomous indication message handler
+ *
+ * \param[in]   dev             Device id
+ * \param[in]   rx_cfg          Receive handler configuration
+ * \returns error code
+ */
+bcmos_errno bcmolt_auto_rx_cb_set(bcmolt_devid device, bcmolt_rx_cfg *rx_cfg)
+{
+    return bcmolt_rx_cb_set(device, BCMOLT_MGT_GROUP_AUTO, rx_cfg);
+}
+
+/* (Un)Register proxy message handler
+ *
+ * \param[in]   dev             Device id
+ * \param[in]   rx_cfg          Receive handler configuration
+ * \returns error code
+ */
+bcmos_errno bcmolt_proxy_rx_cb_set(bcmolt_devid device, bcmolt_rx_cfg *rx_cfg)
+{
+    return bcmolt_rx_cb_set(device, BCMOLT_MGT_GROUP_PROXY_RX, rx_cfg);
+}
+
+/* Get configuration of multiple objects */
+bcmos_errno bcmolt_cfg_get_multi(bcmolt_devid dev, bcmolt_cfg *filter,
+    bcmolt_filter_flags filter_flags, bcmolt_msg_set *msg_set)
+{
+    int i;
+
+    /* If message set already includes messages received on previous iteration - release them */
+    for (i=0; i < msg_set->num_instances; i++)
+    {
+        if (msg_set->msg[i])
+        {
+            bcmolt_msg_free(msg_set->msg[i]);
+            msg_set->msg[i] = NULL;
+        }
+    }
+
+    msg_set->filter_flags = filter_flags;
+    msg_set->num_instances = 0;
+    msg_set->more = BCMOS_FALSE;
+
+    /* Set msg_set in filter message and submit request*/
+    filter->hdr.msg_set = msg_set;
+    filter->hdr.type = BCMOLT_MSG_TYPE_GET_MULTI;
+
+    return bcmtr_call(dev, &filter->hdr);
+}
diff --git a/bcm68620_release/release/host_driver/api/bcmolt_api.h b/bcm68620_release/release/host_driver/api/bcmolt_api.h
new file mode 100644
index 0000000..f18bac9
--- /dev/null
+++ b/bcm68620_release/release/host_driver/api/bcmolt_api.h
@@ -0,0 +1,521 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef BCMOLT_API_H_
+#define BCMOLT_API_H_
+
+#include <bcmos_system.h>
+#include <bcmolt_msg.h>
+
+/** \defgroup api BCM6862x Host API
+ *
+ * Data Types, functions and macros that should be used for BCM6862x device management.
+ * @{
+ */
+
+/** \defgroup api_macros Message Access Macros
+ * @{
+ */
+
+/*
+ * Message Initialization Macros
+ */
+
+/* Initialize request. Internal macro
+ * \param[in]   _h      Message header
+ * \param[in]   _obj    Object type
+ * \param[in]   _grp    message type
+ * \param[in]   _subgrp message subgroup
+ */
+#define _BCMOLT_REQ_INIT(_h, _obj, _grp, _subgrp) \
+    (_h)->hdr.dir = BCMOLT_MSG_DIR_REQUEST;\
+    (_h)->hdr.err = BCM_ERR_OK;\
+    (_h)->hdr.presence_mask = 0;\
+    (_h)->hdr.obj_type = bcmolt_obj_id_ ## _obj;\
+    (_h)->hdr.group = _grp;\
+    (_h)->hdr.subgroup = (uint16_t)_subgrp;\
+    (_h)->hdr.corr_tag = 0
+
+/** Initialize configuration structure
+ * \param[in]   _s      Configuration structure
+ * \param[in]   _obj    Object type
+ * \param[in]   _key    Object key
+ */
+#define BCMOLT_CFG_INIT(_s, _obj, _key) \
+    do {\
+        bcmolt_ ## _obj ## _cfg *_x_ = _s;\
+        memset(_x_, 0, sizeof(*_x_));\
+        _BCMOLT_REQ_INIT(&((_x_)->hdr), _obj, BCMOLT_MGT_GROUP_CFG, 0);\
+        (_x_)->key = _key;\
+    } while (0)
+
+/** Initialize statistics structure
+ * \param[in]   _s      Statistics structure
+ * \param[in]   _obj    Object type
+ * \param[in]   _key    Object key
+ */
+#define BCMOLT_STAT_INIT(_s, _obj, _key) \
+    do {\
+        bcmolt_ ## _obj ## _stat *_x_ = _s;\
+        memset(_x_, 0, sizeof(*_x_));\
+        _BCMOLT_REQ_INIT(&((_x_)->hdr), _obj, BCMOLT_MGT_GROUP_STAT, 0);\
+        (_x_)->key = _key;\
+    } while (0)
+
+/** Initialize statistic configuration structure
+ * \param[in]   _s      Statistics configuration structure
+ * \param[in]   _obj    Object type
+ * \param[in]   _stat   Statistic counter name
+ * \param[in]   _key    Object key
+ */
+#define BCMOLT_STAT_CFG_INIT(_s, _obj, _stat, _key) \
+    do {\
+        bcmolt_ ## _obj ## _stat_cfg *_x_ = _s;\
+        memset(_x_, 0, sizeof(*_x_));\
+        _BCMOLT_REQ_INIT(&((_x_)->hdr), _obj, BCMOLT_MGT_GROUP_STAT_CFG, bcmolt_ ## _obj ## _stat_id_ ## _stat);\
+        (_x_)->key = _key;\
+    } while (0)
+
+/** Initialize indication configuration structure
+ * \param[in]   _s      Indication configuration structure
+ * \param[in]   _obj    Object type
+ * \param[in]   _key    Object key
+ */
+#define BCMOLT_AUTO_CFG_INIT(_s, _obj, _key) \
+    do {\
+        bcmolt_ ## _obj ## _auto_cfg *_x_ = _s;\
+        memset(_x_, 0, sizeof(*_x_));\
+        _BCMOLT_REQ_INIT(&((_x_)->hdr), _obj, BCMOLT_MGT_GROUP_AUTO_CFG, 0);\
+        (_x_)->key = _key;\
+    } while (0)
+
+/** Initialize operation structure
+ * \param[in]   _s      Operation structure
+ * \param[in]   _obj    Object type
+ * \param[in]   _op     Operation type
+ * \param[in]   _key    Object key
+ */
+#define BCMOLT_OPER_INIT(_s, _obj, _op, _key) \
+    do {\
+        bcmolt_ ## _obj ## _ ## _op *_x_ = _s;\
+        memset(_x_, 0, sizeof(*_x_));\
+        _BCMOLT_REQ_INIT(&((_x_)->hdr), _obj, BCMOLT_MGT_GROUP_OPER, bcmolt_ ## _obj ## _oper_id_ ## _op);\
+        (_x_)->key = _key;\
+    } while (0)
+
+/** Initialize proxy message structure
+ * \param[in]   _s      Operation structure
+ * \param[in]   _obj    Object type
+ * \param[in]   _m      Proxy message type
+ * \param[in]   _key    Object key
+ */
+#define BCMOLT_PROXY_INIT(_s, _obj, _m, _key) \
+    do {\
+        bcmolt_ ## _obj ## _ ## _m *_x_ = _s;\
+        memset(_x_, 0, sizeof(*_x_));\
+        _BCMOLT_REQ_INIT(&((_x_)->hdr), _obj, BCMOLT_MGT_GROUP_PROXY, bcmolt_ ## _obj ## _proxy_id_ ## _m);\
+        (_x_)->key = _key;\
+    } while (0)
+
+/** Initialize autonomous indication structure
+ * \param[in]   _s      Autonomous indication structure
+ * \param[in]   _obj    Object type
+ * \param[in]   _au     Autonomous indication type
+ */
+#define BCMOLT_AUTO_INIT(_s, _obj, _au) \
+    do {\
+        bcmolt_ ## _obj ## _ ## _au *_x_ = _s;\
+        _BCMOLT_REQ_INIT(&((_x_)->hdr), _obj, BCMOLT_MGT_GROUP_AUTO, bcmolt_ ## _obj ## _auto_id_ ## _au);\
+        _x_->hdr.hdr.subch = 0;\
+        _x_->hdr.hdr.presence_mask = (1ULL << (uint64_t)bcmolt_ ## _obj ## _ ## _au ## _id_all_properties) - 1;\
+    } while (0)
+
+/** Initialize proxy_rx structure
+ * \param[in]   _s      Proxy rx message structure
+ * \param[in]   _obj    Object type
+ * \param[in]   _pr     Proxy message type
+ */
+#define BCMOLT_PROXY_RX_INIT(_s, _obj, _pr) \
+    do {\
+        bcmolt_ ## _obj ## _ ## _pr *_x_ = _s;\
+        _BCMOLT_REQ_INIT(&((_x_)->hdr), _obj, BCMOLT_MGT_GROUP_PROXY_RX, bcmolt_ ## _obj ## _proxy_rx_id_ ## _pr);\
+        _x_->hdr.hdr.subch = 0;\
+        _x_->hdr.hdr.presence_mask = (1ULL << (uint64_t)bcmolt_ ## _obj ## _ ## _pr ## _id_all_properties) - 1;\
+    } while (0)
+
+/** Set the memory buffer to use for variable-sized lists within a cfg get
+* \param[in]   _s      Configuration structure
+* \param[in]   _obj    Object type
+* \param[in]   _buf    Pointer to a location in memory in which to store the lists
+* \param[in]   _len    Length of the buffer pointed to by _buf
+*/
+#define BCMOLT_CFG_LIST_BUF_SET(_s, _obj, _buf, _len) \
+    do {\
+        bcmolt_ ## _obj ## _cfg *_x_ = _s;\
+        _x_->hdr.hdr.list_buf = _buf;\
+        _x_->hdr.hdr.list_buf_size = _len;\
+    } while (0)
+
+/* Internal macro: Get a bitmask given a property ID enum */
+#define BCMOLT_PROP_MASK_GET(_obj, _grp, _p) \
+    (bcmolt_ ## _obj ## _grp ## _id_ ## _p == bcmolt_ ## _obj ## _grp ## _id_all_properties ? \
+        ((1ULL << (uint64_t)bcmolt_ ## _obj ## _grp ## _id_ ## _p) - 1) : \
+        (1ULL << (uint64_t)bcmolt_ ## _obj ## _grp ## _id_ ## _p))
+
+/* Internal macro: Indicate that configuration property is present */
+#define _BCMOLT_PROP_SET_PRESENT(_m, _obj, _grp, _p) \
+    do { \
+        (_m)->hdr.hdr.presence_mask |= BCMOLT_PROP_MASK_GET(_obj, _grp, _p);\
+    } while (0)
+
+/* Internal macro: check if property is present */
+#define _BCMOLT_PROP_IS_PRESENT(_m, _obj, _grp, _p) \
+    (((_m)->hdr.hdr.presence_mask & BCMOLT_PROP_MASK_GET(_obj, _grp, _p)) ? \
+        BCMOS_TRUE : BCMOS_FALSE)
+
+/** Set configuration property in message structure
+ * \param[in]   _m      Configuration structure
+ * \param[in]   _obj    Object type
+ * \param[in]   _p      Property name
+ * \param[in]   _v      Property value
+ */
+#define BCMOLT_CFG_PROP_SET(_m, _obj, _p, _v) \
+    do { \
+        _BCMOLT_PROP_SET_PRESENT(_m, _obj, _cfg, _p);\
+        (_m)->data._p = (_v);\
+    } while (0)
+
+/** Indicate that configuration property should be read
+ * \param[in]   _m      Configuration structure
+ * \param[in]   _obj    Object type
+ * \param[in]   _p      Property name
+ */
+#define BCMOLT_CFG_PROP_GET(_m, _obj, _p) _BCMOLT_PROP_SET_PRESENT(_m, _obj, _cfg, _p)
+
+/** Check if configuration property is set in message structure
+ * \param[in]   _m      Configuration structure
+ * \param[in]   _obj    Object type
+ * \param[in]   _p      Property name
+ */
+#define BCMOLT_CFG_PROP_IS_SET(_m, _obj, _p)    _BCMOLT_PROP_IS_PRESENT(_m, _obj, _cfg, _p)
+
+/** Indicate that statistic property should be read
+ * \param[in]   _m      Configuration structure
+ * \param[in]   _obj    Object type
+ * \param[in]   _p      Property name
+ */
+#define BCMOLT_STAT_PROP_GET(_m, _obj, _p) _BCMOLT_PROP_SET_PRESENT(_m, _obj, _stat, _p)
+
+/** Check if statistic property is set in message structure
+ * \param[in]   _m      Statistic structure
+ * \param[in]   _obj    Object type
+ * \param[in]   _p      Property name
+ */
+#define BCMOLT_STAT_PROP_IS_SET(_m, _obj, _p)    _BCMOLT_PROP_IS_PRESENT(_m, _obj, _stat, _p)
+
+/** Set operation property in message structure
+ * \param[in]   _m      Operation structure
+ * \param[in]   _obj    Object type
+ * \param[in]   _op     Operation
+ * \param[in]   _p      Property name
+ * \param[in]   _v      Property value
+ */
+#define BCMOLT_OPER_PROP_SET(_m, _obj, _op, _p, _v) \
+    do { \
+        _BCMOLT_PROP_SET_PRESENT(_m, _obj, _ ## _op, _p);\
+        (_m)->data._p = (_v);\
+    } while (0)
+
+/** Check if operation property is set in message structure
+* \param[in]   _m      Operation structure
+* \param[in]   _obj    Object type
+* \param[in]   _op     Operation
+* \param[in]   _p      Property name
+*/
+#define BCMOLT_OPER_PROP_IS_SET(_m, _obj, _op, _p)    _BCMOLT_PROP_IS_PRESENT(_m, _obj, _op, _p)
+
+/** Indicate that autonomous message configuration property should be read
+ * \param[in]   _m      Configuration structure
+ * \param[in]   _obj    Object type
+ * \param[in]   _p      Property name
+ */
+#define BCMOLT_AUTO_CFG_PROP_GET(_m, _obj, _p) _BCMOLT_PROP_SET_PRESENT(_m, _obj, _auto_cfg, _p)
+
+/** Set autonomous message configuration property in message structure
+ * \param[in]   _m      Operation structure
+ * \param[in]   _obj    Object type
+ * \param[in]   _p      Property name
+ * \param[in]   _v      Property value
+ */
+#define BCMOLT_AUTO_CFG_PROP_SET(_m, _obj, _p, _v) \
+    do { \
+        _BCMOLT_PROP_SET_PRESENT(_m, _obj, _auto_cfg, _p);\
+        (_m)->data._p = (_v);\
+    } while (0)
+
+/** Check if autonomous message configuration property is set in message structure
+* \param[in]   _m      Configuration structure
+* \param[in]   _obj    Object type
+* \param[in]   _p      Property name
+*/
+#define BCMOLT_AUTO_CFG_PROP_IS_SET(_m, _obj, _p) _BCMOLT_PROP_IS_PRESENT(_m, _obj, _auto_cfg, _p)
+
+/** Set statistic configuration property in message structure
+* \param[in]   _m      Configuration structure
+* \param[in]   _obj    Object type
+* \param[in]   _p      Property name
+* \param[in]   _v      Property value
+*/
+#define BCMOLT_STAT_CFG_PROP_SET(_m, _obj, _p, _v) \
+    do { \
+        _BCMOLT_PROP_SET_PRESENT(_m, _obj, _stat_cfg, _p);\
+        (_m)->data._p = (_v);\
+    } while (0)
+
+/** Check if statistic configuration property is set in message structure
+* \param[in]   _m      Configuration structure
+* \param[in]   _obj    Object type
+* \param[in]   _p      Property name
+*/
+#define BCMOLT_STAT_CFG_PROP_IS_SET(_m, _obj, _p) _BCMOLT_PROP_IS_PRESENT(_m, _obj, _stat_cfg, _p)
+
+/** Set proxy message property in message structure
+ * \param[in]   _m      Configuration structure
+ * \param[in]   _obj    Object type
+ * \param[in]   _grp    Proxy message type
+ * \param[in]   _p      Property name
+ * \param[in]   _v      Property value
+ */
+#define BCMOLT_PROXY_PROP_SET(_m, _obj, _grp, _p, _v) \
+    do { \
+        _BCMOLT_PROP_SET_PRESENT(_m, _obj, _ ## _grp, _p);\
+        (_m)->data._p = (_v);\
+    } while (0)
+
+/** \defgroup multi_api_func Multi-object property access macros
+ * @{
+ */
+
+/*
+ * Macros for multi-object configuration and statistics retrieval
+ */
+
+/* Internal macro: Indicate that configuration property is present */
+#define _BCMOLT_MSGSET_PROP_SET_PRESENT(_set, _obj, _grp, _p) \
+    do { \
+        (_set)->presence_mask |= BCMOLT_PROP_MASK_GET(_obj, _grp, _p);\
+    } while (0)
+
+/* Internal macro: check if property is present */
+#define _BCMOLT_MSGSET_PROP_IS_PRESENT(_set, _obj, _grp, _p) \
+    (((_set)->presence_mask & BCMOLT_PROP_MASK_GET(_obj, _grp, _p)) ? \
+        BCMOS_TRUE : BCMOS_FALSE)
+
+/** Indicate that configuration property should be read
+ * \param[in]   _set    Message set
+ * \param[in]   _obj    Object type
+ * \param[in]   _p      Property name
+ */
+#define BCMOLT_MSGSET_CFG_PROP_GET(_set, _obj, _p)  _BCMOLT_MSGSET_PROP_SET_PRESENT(_set, _obj, _cfg, _p)
+
+/** Check if configuration property is set in message set
+ * \param[in]   _set    Message set
+ * \param[in]   _obj    Object type
+ * \param[in]   _p      Property name
+ */
+#define BCMOLT_MSGSET_CFG_PROP_IS_SET(_set, _obj, _p) _BCMOLT_MSGSET_PROP_IS_PRESENT(_set, _obj, _cfg, _p)
+
+/** Indicate that statistic should be read
+ * \param[in]   _set    Message set
+ * \param[in]   _obj    Object type
+ * \param[in]   _p      Property name
+ */
+#define BCMOLT_MSGSET_STAT_PROP_GET(_set, _obj, _p)  _BCMOLT_MSGSET_PROP_SET_PRESENT(_set, _obj, _stat, _p)
+
+/** Check if statistic property is set in message set
+ * \param[in]   _set    Message set
+ * \param[in]   _obj    Object type
+ * \param[in]   _p      Property name
+ */
+#define BCMOLT_MSGSET_STAT_PROP_IS_SET(_set, _obj, _p) _BCMOLT_MSGSET_PROP_IS_PRESENT(_m, _obj, _stat, _p)
+
+/** @} */
+
+/** @} */
+
+/** \defgroup api_func API Functions
+ * @{
+ */
+
+/*
+ * API
+ */
+
+typedef void (*system_mode_change_cb)(bcmolt_devid dev);
+
+extern system_mode_change_cb sm_change_cb;
+
+/** Set Configuration
+ *
+ * \param[in]   dev     Device id
+ * \param[in]   cfg     Configuration
+ * \returns error code
+ */
+bcmos_errno bcmolt_cfg_set(bcmolt_devid dev, bcmolt_cfg *cfg);
+
+/** Get Configuration
+ *
+ * \param[in]   dev     Device id
+ * \param[in]   cfg     Configuration
+ * \returns error code
+ * The error code can indicate local or remote failure
+ */
+bcmos_errno bcmolt_cfg_get(bcmolt_devid dev, bcmolt_cfg *cfg);
+
+/** Clear Configuration
+ *
+ * \param[in]   dev     Device id
+ * \param[in]   cfg     Configuration
+ * \returns error code
+ * The error code can indicate local or remote failure
+ */
+bcmos_errno bcmolt_cfg_clear(bcmolt_devid dev, bcmolt_cfg *cfg);
+
+/** Get Statistics
+ *
+ * \param[in]   dev     Device id
+ * \param[in]   stat    Configuration
+ * \param[in]   flags   Flags
+ * \returns error code
+ * The error code can indicate local or remote failure
+ */
+bcmos_errno bcmolt_stat_get(bcmolt_devid dev, bcmolt_stat *stat, bcmolt_stat_flags flags);
+
+/** Get Statistics Configuration
+ *
+ * \param[in]   dev     Device id
+ * \param[in]   cfg     Configuration
+ * \returns error code
+ * The error code can indicate local or remote failure
+ */
+bcmos_errno bcmolt_stat_cfg_get(bcmolt_devid dev, bcmolt_stat_cfg *cfg);
+
+/** Set Statistics Configuration
+ *
+ * \param[in]   dev     Device id
+ * \param[in]   cfg     Configuration
+ * \returns error code
+ * The error code can indicate local or remote failure
+ */
+bcmos_errno bcmolt_stat_cfg_set(bcmolt_devid dev, bcmolt_stat_cfg *cfg);
+
+/** Get Indication Configuration
+ *
+ * \param[in]   dev     Device id
+ * \param[in]   cfg     Configuration
+ * \returns error code
+ * The error code can indicate local or remote failure
+ */
+bcmos_errno bcmolt_auto_cfg_get(bcmolt_devid dev, bcmolt_auto_cfg *cfg);
+
+/** Set Indication Configuration
+ *
+ * \param[in]   dev     Device id
+ * \param[in]   cfg     Configuration
+ * \returns error code
+ * The error code can indicate local or remote failure
+ */
+bcmos_errno bcmolt_auto_cfg_set(bcmolt_devid dev, bcmolt_auto_cfg *cfg);
+
+/** Submit Operation
+ *
+ * \param[in]   dev     Device id
+ * \param[in]   oper    Operation
+ * \returns error code
+ */
+bcmos_errno bcmolt_oper_submit(bcmolt_devid dev, bcmolt_oper *oper);
+
+/** Send Message to ONU
+ *
+ * \param[in]   dev     Device id
+ * \param[in]   msg     Message to be sent
+ * \returns error code
+ */
+bcmos_errno bcmolt_proxy_send(bcmolt_devid dev, bcmolt_proxy *msg);
+
+/** Receive callback registration parameters */
+typedef struct bcmolt_rx_cfg
+{
+    bcmolt_obj_id obj_type;     /**< Object type. Can be \ref BCMOLT_OBJECT_ANY */
+    f_bcmolt_msg_handler rx_cb; /**< Receive callback. NULL=unregister */
+    bcmolt_auto_flags flags;    /**< Dispatch flags. Receive callback function can be called
+                                     in the context of rx task or application task,
+                                     depending on the flags */
+    bcmos_module_id module;     /**< Target module id.
+                                     Relevant only if flags == BCMOLT_AUTO_FLAGS_DISPATCH */
+    uint32_t pon_ni_mask;       /**< Bitmask of pon_ni interfaces the registration applies to.
+                                     0=all interfaces. Each interface is identified by (1 << pon_ni) bit */
+} bcmolt_rx_cfg;
+
+/* (Un)Register Autonomous Indication Message Handler
+ *
+ * \param[in]   dev             Device id
+ * \param[in]   rx_cfg          Receive handler configuration
+ * \returns error code
+ */
+bcmos_errno bcmolt_auto_rx_cb_set(bcmolt_devid device, bcmolt_rx_cfg *rx_cfg);
+
+/* (Un)Register Proxy Message Handler
+ *
+ * \param[in]   dev             Device id
+ * \param[in]   rx_cfg          Receive handler configuration
+ * \returns error code
+ */
+bcmos_errno bcmolt_proxy_rx_cb_set(bcmolt_devid device, bcmolt_rx_cfg *rx_cfg);
+
+/** \defgroup multi_api_func Multi-object API Functions
+ * @{
+ */
+
+/* Get configuration of multiple objects
+ * \param[in]           olt             Device id
+ * \param[in]           filter          Object filter. Header of generated bcmolt_xx_cfg structure
+ * \param[in]           filter_flags    Optional filtering flags
+ * \param[in,out]       msg_set         Message set
+ */
+bcmos_errno bcmolt_cfg_get_multi(bcmolt_devid olt, bcmolt_cfg *filter,
+    bcmolt_filter_flags filter_flags, bcmolt_msg_set *msg_set);
+
+/** @} */
+
+/** @} */
+
+/** @} */
+
+#endif /* BCMOLT_API_H_ */
diff --git a/bcm68620_release/release/host_driver/api/bcmolt_msg.c b/bcm68620_release/release/host_driver/api/bcmolt_msg.c
new file mode 100644
index 0000000..56e3961
--- /dev/null
+++ b/bcm68620_release/release/host_driver/api/bcmolt_msg.c
@@ -0,0 +1,55 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+#include <bcmos_system.h>
+#include <bcm_dev_log.h>
+#include "bcmolt_msg.h"
+
+bcmos_errno bcmolt_msg_err(bcmolt_msg *msg, dev_log_id log_id, bcmos_errno err, uint16_t err_field_idx, const char *fmt, ...)
+{
+    msg->err = err;
+    msg->err_field_idx = err_field_idx;
+    if (fmt)
+    {
+        va_list args;
+
+        va_start(args, fmt);
+        vsnprintf(msg->err_text, sizeof(msg->err_text) - 1, fmt, args);
+        va_end(args);
+        strncat(msg->err_text, "\n", 1);
+#ifdef ENABLE_LOG
+        if (log_id && log_id != DEV_LOG_INVALID_ID)
+            bcm_dev_log_log(log_id, DEV_LOG_LEVEL_ERROR, BCM_LOG_FLAG_CALLER_FMT, "%s", msg->err_text);
+#endif
+    }
+    else
+    {
+        msg->err_text[0] = 0;
+    }
+    return err;
+}
diff --git a/bcm68620_release/release/host_driver/api/bcmolt_msg.h b/bcm68620_release/release/host_driver/api/bcmolt_msg.h
new file mode 100644
index 0000000..5f24b26
--- /dev/null
+++ b/bcm68620_release/release/host_driver/api/bcmolt_msg.h
@@ -0,0 +1,385 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef BCMOLT_MSG_H_
+#define BCMOLT_MSG_H_
+
+#include "bcmos_system.h"
+#include "bcmolt_buf.h"
+#include "bcmolt_model_ids.h"
+#include "bcm_dev_log_task.h"
+
+/** \defgroup \api_data_types Data Types
+ * \ingroup api
+ * @{
+ */
+
+/** Device ID */
+typedef uint8_t bcmolt_devid;
+
+/** Bitmask of fields that are present in a message */
+typedef uint64_t bcmolt_presence_mask;
+
+/** Presence mask indicating all fields present */
+#define BCMOLT_PRESENCE_MASK_ALL ((bcmolt_presence_mask)0xFFFFFFFFFFFFFFFF)
+
+/** Message direction - request or response */
+typedef enum bcmolt_msg_dir
+{
+    BCMOLT_MSG_DIR_REQUEST,
+    BCMOLT_MSG_DIR_RESPONSE
+} bcmolt_msg_dir;
+
+/** Message type. Can be a combination of flags */
+typedef enum bcmolt_msg_type
+{
+    BCMOLT_MSG_TYPE_GET  = 0x01,        /**< Get: configuration or statistics */
+    BCMOLT_MSG_TYPE_SET  = 0x02,        /**< Set: Configuration, Statistics, Auto, Proxy */
+    BCMOLT_MSG_TYPE_CLEAR= 0x04,        /**< Clear: configuration */
+    BCMOLT_MSG_TYPE_MULTI= 0x08,        /**< Multi-object: configuration, statistics */
+
+    BCMOLT_MSG_TYPE_GET_MULTI = BCMOLT_MSG_TYPE_GET | BCMOLT_MSG_TYPE_MULTI,
+} bcmolt_msg_type;
+
+/** Management group - key, config, operation, etc */
+typedef enum bcmolt_mgt_group
+{
+    BCMOLT_MGT_GROUP_KEY,               /**< key that uniquely identifies object instance */
+    BCMOLT_MGT_GROUP_CFG,               /**< Configuration */
+    BCMOLT_MGT_GROUP_STAT,              /**< Statistics */
+    BCMOLT_MGT_GROUP_STAT_CFG,          /**< Statistics threshold configuration */
+    BCMOLT_MGT_GROUP_AUTO,              /**< Autonomous indications */
+    BCMOLT_MGT_GROUP_AUTO_CFG,          /**< Autonomous indication configuration */
+    BCMOLT_MGT_GROUP_OPER,              /**< Operations */
+    BCMOLT_MGT_GROUP_PROXY,             /**< Messages to ONU */
+    BCMOLT_MGT_GROUP_PROXY_RX,          /**< Messages from ONU */
+    BCMOLT_MGT_GROUP__NUM_OF
+} bcmolt_mgt_group;
+
+/** Any object */
+#define BCMOLT_OBJECT_ANY       (bcmolt_obj_id)0xffff
+
+/** Any group */
+#define BCMOLT_MGT_GROUP_ANY    (bcmolt_mgt_group)0xffff
+
+/** Any subgroup */
+#define BCMOLT_SUBGROUP_ANY     0xffff
+
+/** Indicator that no fields contained errors */
+#define BCMOLT_ERR_FIELD_NONE   0xffff
+
+/** Max error text length */
+#define BCMOLT_MAX_ERR_TEXT_LENGTH      256
+
+/* Transport sub-channel handle */
+typedef uint16_t bcmolt_subchannel;
+
+/** Message set - for multi-instance APIs */
+typedef struct bcmolt_msg_set bcmolt_msg_set;
+
+/** Common message header */
+typedef struct bcmolt_msg
+{
+    bcmolt_obj_id        obj_type;      /**< Object type */
+    bcmolt_mgt_group     group;         /**< Management group */
+    uint16_t             subgroup;      /**< Subgroup: for operations, autonomous messages, proxy */
+    bcmolt_msg_type      type;          /**< Set, Get, Clear */
+    bcmolt_msg_dir       dir;           /**< Request/autonomous or Response */
+    bcmos_errno          err;           /**< Remote error code */
+    uint16_t             err_field_idx; /**< If not BCMOLT_ERR_FIELD_NONE, index of erroneous field within struct */
+    uint16_t             corr_tag;      /**< Correlation tag */
+    bcmolt_presence_mask presence_mask; /**< Indicates which parameters are present */
+    char                 err_text[BCMOLT_MAX_ERR_TEXT_LENGTH];  /**< Error text - if err != 0 */
+    /* The following fields are internal. They are not sent on the line */
+    bcmolt_subchannel    subch;         /*   Transport sub-channel via which the message arrived */
+    bcmos_msg            os_msg;        /*   Internal OS message for easy task routing */
+    void                *list_buf;      /*   Memory buffer in which to store variable-sized lists when unpacking */
+    uint32_t             list_buf_size; /*   Number of bytes in the variable-sized list buffer */
+    bcmolt_msg_set      *msg_set;       /* Message set the message belongs to */
+} bcmolt_msg;
+
+/** Configuration group message header */
+typedef struct bcmolt_cfg
+{
+    bcmolt_msg hdr;             /** Common header */
+} bcmolt_cfg;
+
+/** Statistic flags */
+typedef enum
+{
+    BCMOLT_STAT_FLAGS_NONE          = 0x0000, /**< No statistics options set (no clear on read, etc) */
+    BCMOLT_STAT_FLAGS_CLEAR_ON_READ = 0x0001, /**< Clear the requested statistics as part of the read operation */
+} bcmolt_stat_flags;
+
+/** Statistics group message header */
+typedef struct bcmolt_stat
+{
+    bcmolt_msg hdr;             /** Common header */
+} bcmolt_stat;
+
+/** Statistics configuration message header */
+typedef struct bcmolt_stat_cfg
+{
+    bcmolt_msg hdr;             /** Common header */
+} bcmolt_stat_cfg;
+
+/** Operation group message header */
+typedef struct bcmolt_oper
+{
+    bcmolt_msg hdr;             /** Common header */
+} bcmolt_oper;
+
+/** Autonomous message header */
+typedef struct bcmolt_auto
+{
+    bcmolt_msg hdr;             /** Common header */
+} bcmolt_auto;
+
+/** Autonomous message configuration header */
+typedef struct bcmolt_auto_cfg
+{
+    bcmolt_msg hdr;             /** Common header */
+} bcmolt_auto_cfg;
+
+/** Message handler */
+typedef void (*f_bcmolt_msg_handler)(bcmolt_devid olt, bcmolt_msg *msg);
+
+/** Autonomous message flags */
+typedef enum
+{
+    BCMOLT_AUTO_FLAGS_NONE      = 0,            /**< Invoke callback in context of RX task */
+    BCMOLT_AUTO_FLAGS_DISPATCH  = 0x0001,       /**< Dispatch message to application module */
+} bcmolt_auto_flags;
+
+/** Proxy message header */
+typedef struct bcmolt_proxy
+{
+    bcmolt_msg hdr;             /** Common header */
+} bcmolt_proxy;
+
+/** Proxy RX message header */
+typedef struct bcmolt_proxy_rx
+{
+    bcmolt_msg hdr;             /** Common header */
+} bcmolt_proxy_rx;
+
+/** Filter flags */
+typedef enum
+{
+    BCMOLT_FILTER_FLAGS_NONE = 0,
+    BCMOLT_FILTER_FLAGS_INVERT_SELECTION = 0x00000001    /** Return objects NOT selected by filter */
+} bcmolt_filter_flags;
+
+/* Message set */
+struct bcmolt_msg_set
+{
+    uint16_t max_instances;     /**< Max number of instances in the set. Set when set is created and doesn't change */
+    bcmolt_mgt_group group;     /**< Management group */
+    bcmolt_presence_mask presence_mask; /**< Indicates which parameters should be fetched */
+    bcmolt_filter_flags filter_flags;   /**< Filter flags */
+
+    /* Multi-msg API output */
+    uint16_t num_instances;     /**< Number of instances in the set. */
+    bcmos_bool more;            /**< BCMOS_TRUE if not all instances have been retrieved by the last
+                                     bcmolt_get_multi() call. */
+    void *next_key;             /**< Key of the next object instance after those that were returned.  Only valid if
+                                     'more' is BCMOS_FALSE.  Treat this as a pointer to the object's key struct.  This
+                                     can be used for subsequent invocations of bcmolt_cfg_get_multiple() by copying this
+                                     into the filter's key field. */
+#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /**< Check whether C99 is supported */
+    bcmolt_msg *msg[];          /**< Set of API objects returned by bcmolt_cfg_get_multiple(). */
+#else
+    bcmolt_msg *msg[0];          /**< Set of API objects returned by bcmolt_cfg_get_multiple(). */
+#endif
+};
+
+/** @} */
+
+
+/*lint -ecall(633, bcmolt_msg_err) - 4th argument will be a specific enum type, but must be treated as a uint16. */
+/** Set message error. Cannot be static inline, as it uses variable argument list. */
+bcmos_errno bcmolt_msg_err(bcmolt_msg *msg, dev_log_id log_id, bcmos_errno err, uint16_t err_field_idx, const char *fmt, ...)__attribute__((format(__printf__, 5, 6)));
+
+/** Whether we pack the entire structure of a message */
+static inline bcmos_bool bcmolt_msg_should_pack_data(const bcmolt_msg *msg)
+{
+    switch (msg->group)
+    {
+        case BCMOLT_MGT_GROUP_CFG:
+        case BCMOLT_MGT_GROUP_STAT:
+        case BCMOLT_MGT_GROUP_STAT_CFG:
+        case BCMOLT_MGT_GROUP_AUTO_CFG:
+            if ((msg->type & BCMOLT_MSG_TYPE_GET))
+            {
+                bcmos_bool should_pack = (msg->dir == BCMOLT_MSG_DIR_RESPONSE);
+                /* For multi-message get request should_pack must be inverted because the 1st part
+                 * of multi-object request is filter
+                 */
+                return (msg->type & BCMOLT_MSG_TYPE_MULTI) ? !should_pack : should_pack;
+            }
+            else if ((msg->type & BCMOLT_MSG_TYPE_SET))
+            {
+                return (msg->dir == BCMOLT_MSG_DIR_REQUEST);
+            }
+            else
+            {
+                return BCMOS_FALSE;
+            }
+
+        case BCMOLT_MGT_GROUP_OPER:
+        case BCMOLT_MGT_GROUP_PROXY:
+            return (msg->dir == BCMOLT_MSG_DIR_REQUEST);
+
+        default:
+            return BCMOS_TRUE;
+    }
+}
+
+/** Get the length of the header portion of a message */
+static inline int32_t bcmolt_msg_hdr_get_packed_length(const bcmolt_msg *msg)
+{
+    return 18 + (msg->err ? strlen(msg->err_text) + 2 : 0);
+}
+
+/** Pack a message header to a byte stream */
+static inline bcmos_errno bcmolt_msg_hdr_pack(const bcmolt_msg *msg, bcmolt_buf *buf)
+{
+    bcmos_bool ret;
+
+    ret =        bcmolt_buf_write_u8(buf, (uint8_t)msg->obj_type);
+    ret = ret && bcmolt_buf_write_u8(buf, (uint8_t)msg->group);
+    ret = ret && bcmolt_buf_write_u16(buf, msg->subgroup);
+    ret = ret && bcmolt_buf_write_u8(buf, (uint8_t)msg->type);
+    ret = ret && bcmolt_buf_write_u8(buf, (uint8_t)msg->dir);
+    ret = ret && bcmolt_buf_write_s16(buf, (int16_t)msg->err);
+    ret = ret && bcmolt_buf_write_u64(buf, (uint64_t)msg->presence_mask);
+    ret = ret && bcmolt_buf_write_u16(buf, msg->err_field_idx);
+    if (msg->err)
+    {
+        uint16_t len = strlen(msg->err_text);
+        ret = ret && bcmolt_buf_write_u16(buf, len);
+        ret = ret && bcmolt_buf_write(buf, msg->err_text, len);
+    }
+
+    return ret ? BCM_ERR_OK : BCM_ERR_OVERFLOW;
+}
+
+/** Unpack a message header from a byte stream */
+static inline bcmos_errno bcmolt_msg_hdr_unpack(bcmolt_msg *msg, bcmolt_buf *buf)
+{
+    uint8_t    obj_type;
+    uint8_t    group;
+    uint16_t   subgroup;
+    uint8_t    type;
+    uint8_t    dir;
+    int16_t    err = 0;
+    uint64_t   presence_mask;
+    uint16_t   err_field_idx;
+    bcmos_bool ret;
+
+    ret =        bcmolt_buf_read_u8(buf, &obj_type);
+    ret = ret && bcmolt_buf_read_u8(buf, &group);
+    ret = ret && bcmolt_buf_read_u16(buf, &subgroup);
+    ret = ret && bcmolt_buf_read_u8(buf, &type);
+    ret = ret && bcmolt_buf_read_u8(buf, &dir);
+    ret = ret && bcmolt_buf_read_s16(buf, &err);
+    ret = ret && bcmolt_buf_read_u64(buf, &presence_mask);
+    ret = ret && bcmolt_buf_read_u16(buf, &err_field_idx);
+    if (err)
+    {
+        uint16_t len = 0;
+        ret = ret && bcmolt_buf_read_u16(buf, &len);
+        if (len >= sizeof(msg->err_text))
+            len = sizeof(msg->err_text) - 1;
+        ret = ret && bcmolt_buf_read(buf, msg->err_text, len);
+        msg->err_text[len] = 0;
+    }
+    else
+    {
+        msg->err_text[0] = 0;
+    }
+
+    if (ret)
+    {
+        msg->obj_type = (bcmolt_obj_id)obj_type;
+        msg->group = (bcmolt_mgt_group)group;
+        msg->subgroup = subgroup;
+        msg->type = (bcmolt_msg_type)type;
+        msg->dir = (bcmolt_msg_dir)dir;
+        msg->err = (bcmos_errno)err;
+        msg->presence_mask = (bcmolt_presence_mask)presence_mask;
+        msg->err_field_idx = err_field_idx;
+        msg->msg_set = NULL;
+    }
+
+    return ret ? BCM_ERR_OK : BCM_ERR_OVERFLOW;
+}
+
+/* Create message set
+ *
+ * \param[in]   obj             Object id
+ * \param[in]   group           Management group
+ * \param[in]   max_instances   Max number of objects returned by a single API call
+ * \param[out]  msg_set         Message set
+ * \returns error code
+ */
+bcmos_errno bcmolt_msg_set_alloc(bcmolt_obj_id obj, bcmolt_mgt_group group,
+    uint32_t max_instances, bcmolt_msg_set **msg_set);
+
+/* Release message set
+ * \param[in]   msg_set
+ */
+void bcmolt_msg_set_free(bcmolt_msg_set *msg_set);
+
+/* Release dynamically allocated message.
+ */
+static inline void bcmolt_msg_free(bcmolt_msg *msg)
+{
+    if (msg->msg_set)
+    {
+        bcmolt_msg_set_free(msg->msg_set);
+    }
+    bcmos_free(msg);
+}
+
+static inline void bcmolt_os_msg_release_cb(bcmos_msg *os_msg)
+{
+    bcmolt_msg *msg = os_msg->data;
+
+    /* We can be here if target module or transport queue overflows.
+       Release the message
+    */
+    bcmolt_msg_free(msg);
+}
+
+static inline bcmos_module_id bcmos_module_id_for_device(bcmos_module_id module, bcmolt_devid devid)
+{
+    return module + (bcmos_module_id)devid;
+}
+#endif
diff --git a/bcm68620_release/release/host_driver/common_gpon/Makefile b/bcm68620_release/release/host_driver/common_gpon/Makefile
new file mode 100644
index 0000000..9a4e5a0
--- /dev/null
+++ b/bcm68620_release/release/host_driver/common_gpon/Makefile
@@ -0,0 +1,11 @@
+# GPON General
+
+MOD_NAME = common_gpon
+MOD_TYPE = lib
+MOD_DEPS = model cli
+
+EXTRA_CFLAGS += -I$(TOP_DIR)/common/model/maple \
+-I$(TOP_DIR)/common/transport/driver/maple/pcie_sw_queue \
+-I$(TOP_DIR)/common/drivers/maple/pcie
+
+srcs = bcm_common_gpon.c
diff --git a/bcm68620_release/release/host_driver/common_gpon/bcm_common_gpon.c b/bcm68620_release/release/host_driver/common_gpon/bcm_common_gpon.c
new file mode 100644
index 0000000..94e3a1b
--- /dev/null
+++ b/bcm68620_release/release/host_driver/common_gpon/bcm_common_gpon.c
@@ -0,0 +1,262 @@
+/*
+<:copyright-BRCM:2014:proprietary:standard
+
+   Copyright (c) 2014 Broadcom Corporation
+   All Rights Reserved
+
+This program is the proprietary software of Broadcom Corporation and/or its
+licensors, and may only be used, duplicated, modified or distributed pursuant
+to the terms and conditions of a separate, written license agreement executed
+between you and Broadcom (an "Authorized License").  Except as set forth in
+an Authorized License, Broadcom grants no license (express or implied), right
+to use, or waiver of any kind with respect to the Software, and Broadcom
+expressly reserves all rights in and to the Software and all intellectual
+property rights therein.  IF YOU HAVE NO AUTHORIZED LICENSE, THEN YOU HAVE
+NO RIGHT TO USE THIS SOFTWARE IN ANY WAY, AND SHOULD IMMEDIATELY NOTIFY
+BROADCOM AND DISCONTINUE ALL USE OF THE SOFTWARE.
+
+Except as expressly set forth in the Authorized License,
+
+1. This program, including its structure, sequence and organization,
+    constitutes the valuable trade secrets of Broadcom, and you shall use
+    all reasonable efforts to protect the confidentiality thereof, and to
+    use this information only in connection with your use of Broadcom
+    integrated circuit products.
+
+2. TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
+    AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES, REPRESENTATIONS OR
+    WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH
+    RESPECT TO THE SOFTWARE.  BROADCOM SPECIFICALLY DISCLAIMS ANY AND
+    ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY, NONINFRINGEMENT,
+    FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES, ACCURACY OR
+    COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR CORRESPONDENCE
+    TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING OUT OF USE OR
+    PERFORMANCE OF THE SOFTWARE.
+
+3. TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM OR
+    ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL, INCIDENTAL, SPECIAL,
+    INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER ARISING OUT OF OR IN ANY
+    WAY RELATING TO YOUR USE OF OR INABILITY TO USE THE SOFTWARE EVEN
+    IF BROADCOM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES;
+    OR (ii) ANY AMOUNT IN EXCESS OF THE AMOUNT ACTUALLY PAID FOR THE
+    SOFTWARE ITSELF OR U.S. $1, WHICHEVER IS GREATER. THESE LIMITATIONS
+    SHALL APPLY NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY
+    LIMITED REMEDY.
+:>
+*/
+#include "bcm_common_gpon.h"
+
+static pon_mode_db db_gpon =
+{
+    .pon_mode = BCMOLT_PON_MODE_GPON,
+    .api_type = BCMOLT_PON_API_TYPE_GPON,
+    .num_of_onus = GPON_NUM_OF_ONUS,
+    .num_of_alloc_ids = GPON_NUM_OF_ALLOC_IDS,
+    .num_of_dynamic_alloc_indices = GPON_NUM_OF_DYNAMIC_ALLOC_INDICES,
+    .num_of_gem_ports = GPON_NUM_OF_GEM_PORT_IDS_PER_PON,
+    .num_of_alloc_ids_per_onu = GPON_NUM_OF_ALLOC_IDS_PER_ONU,
+    .onu_id_broadcast = GPON_ONU_ID_BROADCAST,
+    .onu_id_unassigned = GPON_ONU_ID_UNASSIGNED,
+    .alloc_id_broadcast = GPON_ALLOC_ID_BROADCAST,
+    .alloc_id_invalid = BCMOLT_GPON_ALLOC_ID_INVALID,
+    .alloc_id_unassigned = GPON_ALLOC_ID_UNASSIGNED,
+    .us_rate = BCMOLT_PON_US_RATE_1G,
+};
+
+static pon_mode_db db_xgpon =
+{
+    .pon_mode = BCMOLT_PON_MODE_XGPON,
+    .api_type = BCMOLT_PON_API_TYPE_XGPON,
+    .num_of_onus = XGPON_NUM_OF_ONUS,
+    .num_of_alloc_ids = XGPON_NUM_OF_ALLOC_IDS,
+    .num_of_dynamic_alloc_indices = XGPON_NUM_OF_DYNAMIC_ALLOC_INDICES,
+    .num_of_gem_ports = XGPON_NUM_OF_GEM_PORT_IDS_PER_PON,
+    .num_of_alloc_ids_per_onu = XGPON_NUM_OF_ALLOC_IDS_PER_ONU,
+    .onu_id_broadcast = XGPON_ONU_ID_BROADCAST,
+    .onu_id_unassigned = XGPON_ONU_ID_UNASSIGNED,
+    .alloc_id_broadcast = XGPON_ALLOC_ID_BROADCAST,
+    .alloc_id_invalid = BCMOLT_XGPON_ALLOC_ID_INVALID,
+    .alloc_id_unassigned = XGPON_ALLOC_ID_UNASSIGNED,
+    .us_rate = BCMOLT_PON_US_RATE_2P5G,
+};
+
+static pon_mode_db db_xgs =
+{
+    .pon_mode = BCMOLT_PON_MODE_XGS,
+    .api_type = BCMOLT_PON_API_TYPE_XGPON,
+    .num_of_onus = XGPON_NUM_OF_ONUS,
+    .num_of_alloc_ids = XGPON_NUM_OF_ALLOC_IDS,
+    .num_of_dynamic_alloc_indices = XGPON_NUM_OF_DYNAMIC_ALLOC_INDICES,
+    .num_of_gem_ports = XGPON_NUM_OF_GEM_PORT_IDS_PER_PON,
+    .num_of_alloc_ids_per_onu = XGPON_NUM_OF_ALLOC_IDS_PER_ONU,
+    .onu_id_broadcast = XGPON_ONU_ID_BROADCAST,
+    .onu_id_unassigned = XGPON_ONU_ID_UNASSIGNED,
+    .alloc_id_broadcast = TEN_GIG_ALLOC_ID_BROADCAST,
+    .alloc_id_invalid = BCMOLT_XGPON_ALLOC_ID_INVALID,
+    .alloc_id_unassigned = XGPON_ALLOC_ID_UNASSIGNED,
+    .us_rate = BCMOLT_PON_US_RATE_10G,
+};
+
+static pon_mode_db db_ngpon2 =
+{
+    .pon_mode = BCMOLT_PON_MODE_NGPON2,
+    .api_type = BCMOLT_PON_API_TYPE_XGPON,
+    .num_of_onus = XGPON_NUM_OF_ONUS,
+    .num_of_alloc_ids = XGPON_NUM_OF_ALLOC_IDS,
+    .num_of_dynamic_alloc_indices = XGPON_NUM_OF_DYNAMIC_ALLOC_INDICES,
+    .num_of_gem_ports = XGPON_NUM_OF_GEM_PORT_IDS_PER_PON,
+    .num_of_alloc_ids_per_onu = XGPON_NUM_OF_ALLOC_IDS_PER_ONU,
+    .onu_id_broadcast = XGPON_ONU_ID_BROADCAST,
+    .onu_id_unassigned = XGPON_ONU_ID_UNASSIGNED,
+    .alloc_id_broadcast = TEN_GIG_ALLOC_ID_BROADCAST,
+    .alloc_id_invalid = BCMOLT_XGPON_ALLOC_ID_INVALID,
+    .alloc_id_unassigned = XGPON_ALLOC_ID_UNASSIGNED,
+    .us_rate = BCMOLT_PON_US_RATE_10G,
+};
+
+static pon_mode_db db_ngpon2_2_5_g =
+{
+    .pon_mode = BCMOLT_PON_MODE_NGPON2,
+    .api_type = BCMOLT_PON_API_TYPE_XGPON,
+    .num_of_onus = XGPON_NUM_OF_ONUS,
+    .num_of_alloc_ids = XGPON_NUM_OF_ALLOC_IDS,
+    .num_of_dynamic_alloc_indices = XGPON_NUM_OF_DYNAMIC_ALLOC_INDICES,
+    .num_of_gem_ports = XGPON_NUM_OF_GEM_PORT_IDS_PER_PON,
+    .num_of_alloc_ids_per_onu = XGPON_NUM_OF_ALLOC_IDS_PER_ONU,
+    .onu_id_broadcast = XGPON_ONU_ID_BROADCAST,
+    .onu_id_unassigned = XGPON_ONU_ID_UNASSIGNED,
+    .alloc_id_broadcast = XGPON_ALLOC_ID_BROADCAST,
+    .alloc_id_invalid = BCMOLT_XGPON_ALLOC_ID_INVALID,
+    .alloc_id_unassigned = XGPON_ALLOC_ID_UNASSIGNED,
+    .us_rate = BCMOLT_PON_US_RATE_2P5G,
+};
+
+static sys_mode_db db_sys = {};
+sys_mode_db *smdbg = &db_sys;
+
+void bcm_common_gpon_init(bcmolt_system_mode system_mode)
+{
+    uint8_t i;
+    bcmolt_xgpon_num_of_onus xgpon_num_of_onus;
+    /* need to check for XGPON XGS NGPON2 modes, the supported number of onus */
+    bcmolt_xgpon_num_of_onus_get(0, &xgpon_num_of_onus);
+
+    switch (system_mode)
+    {
+    case BCMOLT_SYSTEM_MODE_GPON__16_X:
+        smdbg->num_of_pons = GPON_MAX_NUM_OF_PONS;
+        for (i=0; i<smdbg->num_of_pons; i++)
+        {
+            smdbg->pons[i] = db_gpon;
+        }
+        break;
+    case BCMOLT_SYSTEM_MODE_GPON__8_X:
+        smdbg->num_of_pons = GPON_MAX_NUM_OF_PONS / 2;
+        for (i=0; i<smdbg->num_of_pons; i++)
+        {
+            smdbg->pons[i] = db_gpon;
+        }
+        break;
+    case BCMOLT_SYSTEM_MODE_GPON__4_X:
+        smdbg->num_of_pons = GPON_MAX_NUM_OF_PONS / 4;
+        for (i=0; i<smdbg->num_of_pons; i++)
+        {
+            smdbg->pons[i] = db_gpon;
+        }
+        break;
+    case BCMOLT_SYSTEM_MODE_XGPON_1__8_X:
+        smdbg->num_of_pons = XGPON_MAX_NUM_OF_PONS;
+        for (i=0; i<smdbg->num_of_pons; i++)
+        {
+        	smdbg->pons[i] = db_xgpon;
+        	if (xgpon_num_of_onus == BCMOLT_XGPON_NUM_OF_ONUS_XGPON_SUPPORT_510_ONUS)
+        	{
+        		smdbg->pons[i].num_of_onus = XGPON_MAX_NUM_OF_ONUS;
+        	}
+        }
+        break;
+    case BCMOLT_SYSTEM_MODE_XGPON_1__4_X:
+        smdbg->num_of_pons = XGPON_MAX_NUM_OF_PONS / 2;
+        for (i=0; i<smdbg->num_of_pons; i++)
+        {
+        	smdbg->pons[i] = db_xgpon;
+        	if (xgpon_num_of_onus == BCMOLT_XGPON_NUM_OF_ONUS_XGPON_SUPPORT_510_ONUS)
+        	{
+        		smdbg->pons[i].num_of_onus = XGPON_MAX_NUM_OF_ONUS;
+        	}
+        }
+        break;
+    case BCMOLT_SYSTEM_MODE_GPON_8_XGPON_4_X_COEXISTENCE:
+        smdbg->num_of_pons = GPON_MAX_NUM_OF_PONS;
+        /* Initialize first half chip as XGPON */
+        for (i=0; i<XGPON_MAX_NUM_OF_PONS; i++)
+        {
+        	smdbg->pons[i] = db_xgpon;
+        	if (xgpon_num_of_onus == BCMOLT_XGPON_NUM_OF_ONUS_XGPON_SUPPORT_510_ONUS)
+        	{
+        		smdbg->pons[i].num_of_onus = XGPON_MAX_NUM_OF_ONUS;
+        	}
+        }
+        /* Initialize second half chip as GPON */
+        for (; i<smdbg->num_of_pons; i++)
+        {
+            smdbg->pons[i] = db_gpon;
+        }
+        break;
+    case BCMOLT_SYSTEM_MODE_XGS__2_X_10_G:
+        smdbg->num_of_pons = XGS_2X_NUM_OF_PONS;
+        for (i=0; i<smdbg->num_of_pons; i++)
+        {
+        	smdbg->pons[i] = db_xgs;
+        	if (xgpon_num_of_onus == BCMOLT_XGPON_NUM_OF_ONUS_XGPON_SUPPORT_510_ONUS)
+        	{
+        		smdbg->pons[i].num_of_onus = XGPON_MAX_NUM_OF_ONUS;
+        	}
+        }
+        break;
+    case BCMOLT_SYSTEM_MODE_NGPON2__2_X_10_G:
+        smdbg->num_of_pons = NGPON2_2X_NUM_OF_PONS;
+        for (i=0; i<smdbg->num_of_pons; i++)
+        {
+        	smdbg->pons[i] = db_ngpon2;
+        	if (xgpon_num_of_onus == BCMOLT_XGPON_NUM_OF_ONUS_XGPON_SUPPORT_510_ONUS)
+        	{
+        		smdbg->pons[i].num_of_onus = XGPON_MAX_NUM_OF_ONUS;
+        	}
+        }
+        break;
+    case BCMOLT_SYSTEM_MODE_NGPON2__8_X_2_P_5_G:
+           smdbg->num_of_pons = NGPON2_8X_NUM_OF_PONS;
+           for (i=0; i<smdbg->num_of_pons; i++)
+           {
+        	   smdbg->pons[i] = db_ngpon2_2_5_g;
+        	   if (xgpon_num_of_onus == BCMOLT_XGPON_NUM_OF_ONUS_XGPON_SUPPORT_510_ONUS)
+        	   {
+        		   smdbg->pons[i].num_of_onus = XGPON_MAX_NUM_OF_ONUS;
+        	   }
+           }
+           break;
+    default:
+        smdbg->num_of_pons = 0;
+        break;
+    }
+
+}
+
+bcmolt_system_mode bcm_common_gpon_get_system_mode(void)
+{
+    bcmolt_system_mode system_mode;
+
+    /* ToDo: XXX: it requires work. JIRA SWMAPLE-3724 */
+    bcmolt_system_mode_get(0, &system_mode);
+    return system_mode;
+}
+
+bcmolt_pon_mode2str_t bcmolt_pon_mode2str[] =
+{
+    {BCMOLT_PON_MODE_GPON, "gpon"},
+    {BCMOLT_PON_MODE_XGPON, "xgpon"},
+    {BCMOLT_PON_MODE_XGS, "xgs"},
+    {BCMOLT_PON_MODE_NGPON2, "ngpon2"},
+    {-1}
+};
diff --git a/bcm68620_release/release/host_driver/common_gpon/bcm_common_gpon.h b/bcm68620_release/release/host_driver/common_gpon/bcm_common_gpon.h
new file mode 100644
index 0000000..464d661
--- /dev/null
+++ b/bcm68620_release/release/host_driver/common_gpon/bcm_common_gpon.h
@@ -0,0 +1,144 @@
+/*
+<:copyright-BRCM:2016:proprietary:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+This program is the proprietary software of Broadcom Corporation and/or its
+licensors, and may only be used, duplicated, modified or distributed pursuant
+to the terms and conditions of a separate, written license agreement executed
+between you and Broadcom (an "Authorized License").  Except as set forth in
+an Authorized License, Broadcom grants no license (express or implied), right
+to use, or waiver of any kind with respect to the Software, and Broadcom
+expressly reserves all rights in and to the Software and all intellectual
+property rights therein.  IF YOU HAVE NO AUTHORIZED LICENSE, THEN YOU HAVE
+NO RIGHT TO USE THIS SOFTWARE IN ANY WAY, AND SHOULD IMMEDIATELY NOTIFY
+BROADCOM AND DISCONTINUE ALL USE OF THE SOFTWARE.
+
+Except as expressly set forth in the Authorized License,
+
+1. This program, including its structure, sequence and organization,
+    constitutes the valuable trade secrets of Broadcom, and you shall use
+    all reasonable efforts to protect the confidentiality thereof, and to
+    use this information only in connection with your use of Broadcom
+    integrated circuit products.
+
+2. TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
+    AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES, REPRESENTATIONS OR
+    WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH
+    RESPECT TO THE SOFTWARE.  BROADCOM SPECIFICALLY DISCLAIMS ANY AND
+    ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY, NONINFRINGEMENT,
+    FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES, ACCURACY OR
+    COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR CORRESPONDENCE
+    TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING OUT OF USE OR
+    PERFORMANCE OF THE SOFTWARE.
+
+3. TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM OR
+    ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL, INCIDENTAL, SPECIAL,
+    INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER ARISING OUT OF OR IN ANY
+    WAY RELATING TO YOUR USE OF OR INABILITY TO USE THE SOFTWARE EVEN
+    IF BROADCOM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES;
+    OR (ii) ANY AMOUNT IN EXCESS OF THE AMOUNT ACTUALLY PAID FOR THE
+    SOFTWARE ITSELF OR U.S. $1, WHICHEVER IS GREATER. THESE LIMITATIONS
+    SHALL APPLY NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY
+    LIMITED REMEDY.
+:>
+*/
+#ifndef _BCM_COMMON_GPON_H_
+#define _BCM_COMMON_GPON_H_
+
+#include "bcm_dev_log.h"
+#include "bcmcli.h"
+#include "bcmolt_model_types.h"
+#include "bcmolt_math.h"
+#include "bcmolt_conv.h"
+#include "bcm_common_gpon_constants.h"
+
+typedef struct
+{
+    bcmolt_pon_mode pon_mode;
+    bcmolt_pon_api_type api_type;
+    uint16_t num_of_onus;
+    uint16_t num_of_alloc_ids;
+    uint16_t num_of_dynamic_alloc_indices;
+    uint16_t num_of_gem_ports;
+    uint16_t num_of_alloc_ids_per_onu;
+    bcmolt_pon_onu_id onu_id_broadcast;
+    bcmolt_pon_onu_id onu_id_unassigned;
+    bcmolt_pon_alloc_id alloc_id_broadcast;
+    bcmolt_pon_alloc_id alloc_id_invalid;
+    bcmolt_pon_alloc_id alloc_id_unassigned;
+    bcmolt_pon_us_rate us_rate;
+} pon_mode_db;
+
+typedef struct
+{
+    uint8_t num_of_pons;
+    pon_mode_db pons[MAX_NUM_OF_PONS];
+} sys_mode_db;
+
+/* System mode database, initialized at system start.
+ * Used for constants that change based on PON mode, chip type, etc. */
+extern sys_mode_db *smdbg;
+
+/* Get the PON mode database handle for a given PON index (shortcut for smdbg->pons[pon_id]). */
+#define PMDB(pon_id) ((const pon_mode_db *)&smdbg->pons[pon_id])
+
+/* Get the PON mode for a given PON index (shortcut for PMDB(pon_id)->pon_mode). */
+#define PON_MODE(pon_id) (PMDB(pon_id)->pon_mode)
+BCMOLT_TYPE2STR(bcmolt_pon_mode, extern)
+
+/* Generic function that can be used to raise a software error for unsupported PON modes. */
+static inline bcmos_errno error_pon_mode_not_supported(bcmolt_pon_ni pon_ni)
+{
+    bcmolt_pon_mode mode = PON_MODE(pon_ni);
+    BCMOS_TRACE_ERR("PON mode not supported for PON NI-%d: %s (%u)\n", pon_ni, bcmolt_pon_mode2str_conv(mode), mode);
+    return BCM_ERR_INTERNAL;
+}
+
+/* Get a module ID with a base module + instance (PON, cluster, etc.) offset in a type-safe way */
+#define MODULE_INSTANCE(base_module_id, instance) (bcmos_module_id)((uint32_t)(base_module_id) + (uint32_t)(instance))
+
+/* Same as MODULE_INSTANCE, but for events. */
+#define EVENT_INSTANCE(base_event_id, instance) (bcmos_event_id)((uint32_t)(base_event_id) + (uint32_t)(instance))
+
+#define FOR_EACH_ONU(pon_id, onu_id) \
+    for (onu_id = (bcmolt_pon_onu_id)0; onu_id < (bcmolt_pon_onu_id)PMDB(pon_id)->num_of_onus; onu_id++)
+
+#define FOR_EACH_ALLOC_INDEX(pon_id, alloc_index) \
+    for (alloc_index = (bcmolt_pon_alloc_index)0; alloc_index < (bcmolt_pon_alloc_index)PMDB(pon_id)->num_of_alloc_ids; alloc_index++)
+
+#define FOR_EACH_GEM_INDEX(pon_id, gem_port_index) \
+    for (gem_port_index = 0; (bcmolt_pon_gem_port_index)gem_port_index < (bcmolt_pon_gem_port_index)PMDB(pon_id)->num_of_gem_ports; gem_port_index++)
+
+#define ALLOC_INDEX_IS_VALID(pon_id, alloc_index) ((alloc_index) < (bcmolt_pon_alloc_index)PMDB(pon_id)->num_of_alloc_ids)
+#define GEM_PORT_INDEX_IS_VALID(pon_id, gem_port_index) \
+    ((gem_port_index) < (bcmolt_pon_gem_port_index)PMDB(pon_id)->num_of_gem_ports)
+
+#define ALLOC_ID_LAST_DEFAULT(pon_id) ((bcmolt_pon_alloc_id)(PMDB(pon_id)->num_of_onus - 1))
+#define ALLOC_ID_LAST_DATA(pon_id, first_data_alloc_id) \
+    ((first_data_alloc_id) + (bcmolt_pon_alloc_id)(PMDB(pon_id)->num_of_alloc_ids - PMDB(pon_id)->num_of_onus - 1))
+#define ALLOC_ID_IS_VALID_DATA(pon_id, alloc_id, first_data_alloc_id) ( \
+    ((alloc_id) >= (first_data_alloc_id) && (alloc_id) <= ALLOC_ID_LAST_DATA(pon_id, first_data_alloc_id)))
+#define ALLOC_ID_IS_VALID(pon_id, alloc_id, first_data_alloc_id) ( \
+    ((alloc_id) <= ALLOC_ID_LAST_DEFAULT(pon_id)) || \
+    ALLOC_ID_IS_VALID_DATA(pon_id, alloc_id, first_data_alloc_id))
+
+#define GEM_PORT_ID_LAST_DEFAULT(pon_id) ((bcmolt_pon_gem_port_id)(PMDB(pon_id)->num_of_onus - 1))
+#define GEM_PORT_ID_LAST_DATA(pon_id, first_data_port_id) \
+    ((first_data_port_id) + (bcmolt_pon_gem_port_id)(PMDB(pon_id)->num_of_gem_ports - PMDB(pon_id)->num_of_onus - 1))
+#define GEM_PORT_ID_IS_VALID_DATA(pon_id, gem_port_id, first_data_port_id) ( \
+    ((gem_port_id) >= (first_data_port_id) && (gem_port_id) <= GEM_PORT_ID_LAST_DATA(pon_id, first_data_port_id)))
+#define GEM_PORT_ID_IS_VALID(pon_id, gem_port_id, first_data_port_id) ( \
+    ((gem_port_id) <= GEM_PORT_ID_LAST_DEFAULT(pon_id)) || \
+    GEM_PORT_ID_IS_VALID_DATA(pon_id, gem_port_id, first_data_port_id))
+
+#define PON_ID_IS_VALID(system_mode, pon_id) ( \
+    ((uint8_t)pon_id < smdbg->num_of_pons) && \
+    (system_mode != BCMOLT_SYSTEM_MODE_GPON_8_XGPON_4_X_COEXISTENCE || pon_id < XGPON_HALF_CHIP_MAX_NUM_OF_PONS || pon_id >= XGPON_MAX_NUM_OF_PONS))
+
+void bcm_common_gpon_init(bcmolt_system_mode system_mode);
+bcmolt_system_mode bcm_common_gpon_get_system_mode(void);
+
+#endif
+
diff --git a/bcm68620_release/release/host_driver/common_gpon/bcm_common_gpon_constants.h b/bcm68620_release/release/host_driver/common_gpon/bcm_common_gpon_constants.h
new file mode 100644
index 0000000..60308e4
--- /dev/null
+++ b/bcm68620_release/release/host_driver/common_gpon/bcm_common_gpon_constants.h
@@ -0,0 +1,138 @@
+/*
+<:copyright-BRCM:2016:proprietary:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+This program is the proprietary software of Broadcom Corporation and/or its
+licensors, and may only be used, duplicated, modified or distributed pursuant
+to the terms and conditions of a separate, written license agreement executed
+between you and Broadcom (an "Authorized License").  Except as set forth in
+an Authorized License, Broadcom grants no license (express or implied), right
+to use, or waiver of any kind with respect to the Software, and Broadcom
+expressly reserves all rights in and to the Software and all intellectual
+property rights therein.  IF YOU HAVE NO AUTHORIZED LICENSE, THEN YOU HAVE
+NO RIGHT TO USE THIS SOFTWARE IN ANY WAY, AND SHOULD IMMEDIATELY NOTIFY
+BROADCOM AND DISCONTINUE ALL USE OF THE SOFTWARE.
+
+Except as expressly set forth in the Authorized License,
+
+1. This program, including its structure, sequence and organization,
+    constitutes the valuable trade secrets of Broadcom, and you shall use
+    all reasonable efforts to protect the confidentiality thereof, and to
+    use this information only in connection with your use of Broadcom
+    integrated circuit products.
+
+2. TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
+    AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES, REPRESENTATIONS OR
+    WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH
+    RESPECT TO THE SOFTWARE.  BROADCOM SPECIFICALLY DISCLAIMS ANY AND
+    ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY, NONINFRINGEMENT,
+    FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES, ACCURACY OR
+    COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR CORRESPONDENCE
+    TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING OUT OF USE OR
+    PERFORMANCE OF THE SOFTWARE.
+
+3. TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM OR
+    ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL, INCIDENTAL, SPECIAL,
+    INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER ARISING OUT OF OR IN ANY
+    WAY RELATING TO YOUR USE OF OR INABILITY TO USE THE SOFTWARE EVEN
+    IF BROADCOM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES;
+    OR (ii) ANY AMOUNT IN EXCESS OF THE AMOUNT ACTUALLY PAID FOR THE
+    SOFTWARE ITSELF OR U.S. $1, WHICHEVER IS GREATER. THESE LIMITATIONS
+    SHALL APPLY NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY
+    LIMITED REMEDY.
+:>
+*/
+#ifndef _BCM_COMMON_GPON_CONSTANTS_H_
+#define _BCM_COMMON_GPON_CONSTANTS_H_
+
+#include "bcmolt_model_data.h"
+
+/* maximum number of PONs for any supported PON mode */
+#define MAX_NUM_OF_PONS 16
+
+/** Generic "PON mode" used to simplify logic when specific "system mode" is too complex. */
+typedef enum
+{
+    BCMOLT_PON_MODE_GPON,
+    BCMOLT_PON_MODE_XGPON,
+    BCMOLT_PON_MODE_XGS,
+    BCMOLT_PON_MODE_NGPON2,
+} bcmolt_pon_mode;
+
+/** Object type used by the API layer for provisioning each PON mode. */
+typedef enum
+{
+    BCMOLT_PON_API_TYPE_GPON,
+    BCMOLT_PON_API_TYPE_XGPON,
+} bcmolt_pon_api_type;
+
+typedef enum
+{
+    BCMOLT_PON_US_RATE_1G,
+    BCMOLT_PON_US_RATE_2P5G,
+    BCMOLT_PON_US_RATE_10G,
+} bcmolt_pon_us_rate;
+
+/* Number of PON NIs per PON mode */
+#define GPON_MAX_NUM_OF_PONS 16
+#define XGPON_MAX_NUM_OF_PONS 8
+#define XGPON_HALF_CHIP_MAX_NUM_OF_PONS 4
+#define XGS_2X_NUM_OF_PONS 2
+#define NGPON2_2X_NUM_OF_PONS 2
+#define NGPON2_8X_NUM_OF_PONS 8
+
+/* ONU's per PON */
+#define GPON_NUM_OF_ONUS 128
+#define XGPON_NUM_OF_ONUS 256
+#define XGPON_MAX_NUM_OF_ONUS 510
+
+/* Alloc ID's per PON */
+#define GPON_NUM_OF_DYNAMIC_ALLOC_INDICES 640
+#define GPON_NUM_OF_ALLOC_IDS 1024
+#define XGPON_NUM_OF_DYNAMIC_ALLOC_INDICES 1280
+#define XGPON_NUM_OF_ALLOC_IDS 2048
+
+/* Alloc ID's per ONU */
+#define GPON_NUM_OF_ALLOC_IDS_PER_ONU 32
+#define XGPON_NUM_OF_ALLOC_IDS_PER_ONU 32
+#define NUM_OF_ALLOC_IDS_PER_ONU (MAX(GPON_NUM_OF_ALLOC_IDS_PER_ONU, XGPON_NUM_OF_ALLOC_IDS_PER_ONU))
+
+#define GPON_ONU_ID_BROADCAST ((bcmolt_pon_onu_id)0xFF)
+#define XGPON_ONU_ID_BROADCAST ((bcmolt_pon_onu_id)0x3FF)
+#define GPON_ONU_ID_UNASSIGNED GPON_ONU_ID_BROADCAST
+#define XGPON_ONU_ID_UNASSIGNED XGPON_ONU_ID_BROADCAST
+#define XGPON_DUMMY_ONU_ID ((bcmolt_pon_onu_id)511)
+
+#define GPON_ALLOC_ID_BROADCAST ((bcmolt_pon_alloc_id)0xFE)
+#define XGPON_ALLOC_ID_BROADCAST ((bcmolt_pon_alloc_id)0x3FF) /* Used for 2.5G upstream in XGPON/XGS/NGPON2 */
+#define TEN_GIG_ALLOC_ID_BROADCAST ((bcmolt_pon_alloc_id)0x3FE) /* Used for 10G upstream in XGS/NGPON2 */
+#define TEN_OR_2P5_GIG_ALLOC_ID_BROADCAST ((bcmolt_pon_alloc_id)0x3FD) /* Used for either 2.5G/10G upstream in XGS/NGPON2 */
+#define GPON_ALLOC_ID_UNASSIGNED ((bcmolt_pon_alloc_id)0xFF)
+#define XGPON_ALLOC_ID_UNASSIGNED ((bcmolt_pon_alloc_id)512) /* In XGPON we have up to 512 ONU's, and alloc ID is unused for sure. */
+#define XGPON_DUMMY_ALLOC_ID ((bcmolt_pon_alloc_id)511)
+
+/* GEM PORT ID's per PON */
+#define GPON_NUM_OF_GEM_PORT_IDS_PER_PON 4096
+#define XGPON_NUM_OF_GEM_PORT_IDS_PER_PON 8192
+/* GEM PORT ID's per ONU */
+#define MAX_NUM_OF_GEM_PORT_IDS_PER_ONU 256
+
+/* OMCI/CPU packets */
+#define OMCI_CRC_LEN 4
+
+/* Packet sizes - all values in bytes resolution */
+#define OMCI_MIN_PKT_SIZE_WITH_CRC 14
+#define OMCI_MIN_PKT_SIZE_WO_CRC 10
+#define OMCI_MAX_PKT_SIZE_WITH_CRC 1980
+#define OMCI_MAX_PKT_SIZE_WO_CRC 1976
+#define OMCI_BASELINE_PKT_SIZE_WO_CRC 44
+#define OMCI_EXTENDED_PKT_SIZE_WO_CRC OMCI_MAX_PKT_SIZE_WO_CRC
+#define CPU_MIN_PKT_SIZE_WITH_CRC 64
+#define CPU_MIN_PKT_SIZE_WO_CRC 60
+#define CPU_MAX_PKT_SIZE_WITH_CRC 2048
+#define CPU_MAX_PKT_SIZE_WO_CRC 2044
+
+#endif
+
diff --git a/bcm68620_release/release/host_driver/common_gpon/bcm_common_gpon_fast.h b/bcm68620_release/release/host_driver/common_gpon/bcm_common_gpon_fast.h
new file mode 100644
index 0000000..6dac5c5
--- /dev/null
+++ b/bcm68620_release/release/host_driver/common_gpon/bcm_common_gpon_fast.h
@@ -0,0 +1,129 @@
+/*
+<:copyright-BRCM:2016:proprietary:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+This program is the proprietary software of Broadcom Corporation and/or its
+licensors, and may only be used, duplicated, modified or distributed pursuant
+to the terms and conditions of a separate, written license agreement executed
+between you and Broadcom (an "Authorized License").  Except as set forth in
+an Authorized License, Broadcom grants no license (express or implied), right
+to use, or waiver of any kind with respect to the Software, and Broadcom
+expressly reserves all rights in and to the Software and all intellectual
+property rights therein.  IF YOU HAVE NO AUTHORIZED LICENSE, THEN YOU HAVE
+NO RIGHT TO USE THIS SOFTWARE IN ANY WAY, AND SHOULD IMMEDIATELY NOTIFY
+BROADCOM AND DISCONTINUE ALL USE OF THE SOFTWARE.
+
+Except as expressly set forth in the Authorized License,
+
+1. This program, including its structure, sequence and organization,
+    constitutes the valuable trade secrets of Broadcom, and you shall use
+    all reasonable efforts to protect the confidentiality thereof, and to
+    use this information only in connection with your use of Broadcom
+    integrated circuit products.
+
+2. TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
+    AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES, REPRESENTATIONS OR
+    WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH
+    RESPECT TO THE SOFTWARE.  BROADCOM SPECIFICALLY DISCLAIMS ANY AND
+    ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY, NONINFRINGEMENT,
+    FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES, ACCURACY OR
+    COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR CORRESPONDENCE
+    TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING OUT OF USE OR
+    PERFORMANCE OF THE SOFTWARE.
+
+3. TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM OR
+    ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL, INCIDENTAL, SPECIAL,
+    INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER ARISING OUT OF OR IN ANY
+    WAY RELATING TO YOUR USE OF OR INABILITY TO USE THE SOFTWARE EVEN
+    IF BROADCOM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES;
+    OR (ii) ANY AMOUNT IN EXCESS OF THE AMOUNT ACTUALLY PAID FOR THE
+    SOFTWARE ITSELF OR U.S. $1, WHICHEVER IS GREATER. THESE LIMITATIONS
+    SHALL APPLY NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY
+    LIMITED REMEDY.
+:>
+*/
+#ifndef _BCM_COMMON_GPON_FAST_H_
+#define _BCM_COMMON_GPON_FAST_H_
+
+#ifndef SIMULATION_BUILD
+#include <bcmtr_pcie_sw_queue.h>
+#endif
+
+#define BCM_COMMON_GPON_FAST_API_LIST_SIZE 1280
+#define BCM_COMMON_GPON_FAST_API_ACCESS_LIST_SIZE 2048
+#define URGENT_CHANNEL BCMTR_SWQ_FIRST_URGENT_CHANNEL
+
+typedef enum
+{
+	BCM_COMMON_FAST_MSG_TYPE_GET_ALLOC_STATS,
+	BCM_COMMON_FAST_MSG_TYPE_SET_ALLOCS,
+	BCM_COMMON_FAST_MSG_TYPE_SET_BW_ALLOCS
+} bcm_common_fast_msg_type;
+
+typedef struct __PACKED_ATTR_START__
+{
+	uint16_t alloc_id;
+	uint32_t allocated;
+	uint32_t used;
+	uint32_t status_report;
+} __PACKED_ATTR_END__ bcm_common_fast_get_alloc_stats;
+
+typedef struct __PACKED_ATTR_START__
+{
+	uint8_t pon_ni;
+	uint32_t cycle_num;
+	uint32_t available_bw;
+	uint32_t num_of_allocs;
+} __PACKED_ATTR_END__ bcm_common_fast_get_stats_ind_hdr;
+
+typedef struct __PACKED_ATTR_START__
+{
+	bcm_common_fast_get_stats_ind_hdr hdr;
+	bcm_common_fast_get_alloc_stats alloc_stats_list[BCM_COMMON_GPON_FAST_API_LIST_SIZE];
+} __PACKED_ATTR_END__ bcm_common_fast_get_stats_ind;
+
+typedef struct __PACKED_ATTR_START__
+{
+	uint16_t alloc_id;
+	uint32_t allocation_blocks;
+	/* uint8_t access_num;  - Will be added in the 2nd phase */
+} __PACKED_ATTR_END__ bcm_common_fast_set_alloc;
+
+typedef struct __PACKED_ATTR_START__
+{
+	uint32_t cycle_num;
+	uint32_t num_of_allocs;
+} __PACKED_ATTR_END__ bcm_common_fast_msg_hdr;
+
+typedef struct __PACKED_ATTR_START__
+{
+	bcm_common_fast_msg_hdr hdr;
+	bcm_common_fast_set_alloc set_alloc_list[BCM_COMMON_GPON_FAST_API_LIST_SIZE];
+} __PACKED_ATTR_END__ bcm_common_fast_set_allocs_msg;
+
+typedef struct __PACKED_ATTR_START__
+{
+	uint16_t alloc_id;
+	uint16_t allocation_size;
+	uint16_t start_time;
+	uint8_t burst_profile;
+    struct __PACKED_ATTR_START__
+    {
+		bcmos_bool ploam_flag			:1;
+		bcmos_bool dbru_flag			:1;
+		bcmos_bool end_of_frame			:1;
+		bcmos_bool end_of_map			:1;
+		bcmos_bool fwi					:1;
+        uint8_t                      	:3;
+    } __PACKED_ATTR_END__ alloc_flags;
+} __PACKED_ATTR_END__ bcm_common_fast_set_access;
+
+typedef struct __PACKED_ATTR_START__
+{
+	bcm_common_fast_msg_hdr hdr;
+	bcm_common_fast_set_access set_access_list[BCM_COMMON_GPON_FAST_API_ACCESS_LIST_SIZE];
+} __PACKED_ATTR_END__ bcm_common_fast_set_accesses_msg;
+
+#endif
diff --git a/bcm68620_release/release/host_driver/config/bcm_config.h b/bcm68620_release/release/host_driver/config/bcm_config.h
new file mode 100644
index 0000000..4d02fe3
--- /dev/null
+++ b/bcm68620_release/release/host_driver/config/bcm_config.h
@@ -0,0 +1,75 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef BCMOLT_CONFIG_H_
+#define BCMOLT_CONFIG_H_
+
+/** \defgroup config Configuration Constants
+ * Configuration constants that must be revised by customer
+ * @{
+ */
+
+/** CPU Endianness. Must be set to BCMOS_ENDIAN_BIG or BCMOS_ENDIAN_LITTLE. */
+#ifndef BCM_CPU_ENDIAN
+
+#error BCM_CPU_ENDIAN must be set BCMOS_ENDIAN_BIG or BCMOS_ENDIAN_LITTLE
+
+#endif /* #ifndef BCM_CPU_ENDIAN */
+
+/** Transport layer configuration defaults */
+#define BCMTR_TR_TYPE              BCMTR_TYPE_UDP       /**< Transport type: raw/udp */
+#define BCMTR_TR_UDP_HOST_IP       0x7f000001
+#define BCMTR_TR_UDP_OLT_IP        0x7f000001
+#define BCMTR_TR_UDP_HOST_PORT     0x4000
+#define BCMTR_TR_UDP_OLT_PORT      0x4010
+
+#define BCMTR_MAX_OLTS             2      /**< Max number of OLTs */
+#define BCMTR_MAX_INSTANCES        16     /**< Max number of message handler instances - typically a number of PON's */
+#define BCMTR_MAX_RETRIES          0      /**< Max number of request retransmissions */
+#define BCMTR_MSG_TIMEOUT          500    /**< Max time to wait for response or next message part (ms) */
+#define BCMTR_MAX_REQUESTS         64     /**< Max number of outstanding requests per application per OLT */
+#define BCMTR_MAX_AUTOS            256    /**< Maximum number of simultaneous multi-part autonomous messages */
+#define BCMTR_MAX_FRAGMENTS        500    /**< Maximum number of fragments per message */
+#define BCMTR_MSG_WAIT_MS          5      /**< length of time to wait on conn read */
+#define BCMTR_MSG_READY_MS         50     /**< Time to wait for application to peak up response */
+#define BCMTR_MAX_MTU_SIZE         4096   /**< max MTU size */
+#define BCMTR_RX_THREAD_STACK      0      /**< Rx thread stack size */
+
+/** Debug output configuration */
+#define BCM_DBG_MAX_MSG_SIZE       128    /**< Max number of message bytes to include in message dump */
+
+#define BCMTR_BUF_EXTRA_HEADROOM   0      /**< Extra headroom to reserve is system buffer */
+
+#define BCMTR_PCIE_START_TIMEOUT   15000  /**< Application start timeout (ms) */
+#define BCMTR_PCIE_CONNECT_TIMEOUT 15000  /**< Connect timeout (ms) */
+/** @} */
+
+#define BCMTR_MAX_RXQ_SIZE         256
+
+#endif /* BCMOLT_CONFIG_H_ */
diff --git a/bcm68620_release/release/host_driver/coop_dba/Makefile b/bcm68620_release/release/host_driver/coop_dba/Makefile
new file mode 100644
index 0000000..fb20a25
--- /dev/null
+++ b/bcm68620_release/release/host_driver/coop_dba/Makefile
@@ -0,0 +1,38 @@
+# Coop DBA
+MOD_NAME = coop_dba
+
+ifeq ("$(OS_KERNEL)", "linux")
+MOD_TYPE = linux_lib
+else
+MOD_TYPE = lib
+endif
+
+ifeq ("$(RELEASE_BUILD)", "y")
+	EXTRA_CFLAGS += -I$(TOP_DIR)/host_driver/api \
+-I$(TOP_DIR)/host_driver/utils \
+-I$(TOP_DIR)/host_reference/dev_log \
+-I$(TOP_DIR)/host_driver/common_gpon \
+-I$(TOP_DIR)/host_driver/transport/mux \
+-I$(TOP_DIR)/host_driver/transport/pcie_sw_queue \
+-I$(TOP_DIR)/host_driver/pcie \
+-I$(TOP_DIR)/host_driver/transport
+else
+	EXTRA_CFLAGS += -I$(TOP_DIR)/common/gpon \
+-I$(TOP_DIR)/common/model/maple \
+-I$(TOP_DIR)/common/transport/driver/maple/pcie_sw_queue \
+-I$(TOP_DIR)/common/drivers/maple/pcie \
+-I$(TOP_DIR)/common/api \
+-I$(TOP_DIR)/common/utils \
+-I$(TOP_DIR)/common/dev_log \
+-I$(TOP_DIR)/host/transport/driver/maple/mux
+endif
+				
+srcs = bcmolt_coop_dba.c
+
+MOD_INC_DIRS = $(SRC_DIR) $(MODEL_OUT_DIR)
+
+# If called by linux kernel builder - add include paths manually.
+# It is not elegant, but we'll not have many linux modules
+ifneq ("$(KBUILD_SRC)", "")
+	-include $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
+endif
diff --git a/bcm68620_release/release/host_driver/coop_dba/bcmolt_coop_dba.c b/bcm68620_release/release/host_driver/coop_dba/bcmolt_coop_dba.c
new file mode 100644
index 0000000..add7ae5
--- /dev/null
+++ b/bcm68620_release/release/host_driver/coop_dba/bcmolt_coop_dba.c
@@ -0,0 +1,223 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#include "bcmolt_coop_dba.h"
+
+/* this is the host application callback that will be called to handle the indications sent from
+ * the embedded side to the host during DBA cycle
+ */
+static bcmolt_coop_dba_host_handler_cb host_handler_array[BCMTR_MAX_OLTS];
+
+/* An API to implement Partial-External DBA type */
+bcmos_errno bcmolt_fast_oper_set_allocs(bcmolt_devid device, uint8_t pon_ni, bcm_common_fast_set_allocs_msg *msg)
+{
+	bcmos_errno rc = BCM_ERR_OK;
+	bcmos_buf *buf;
+	unsigned char *buf_data;
+	bcm_common_fast_set_allocs_msg *msg_p;
+	uint32_t len = sizeof(bcm_common_fast_msg_type) + sizeof(pon_ni) +
+		sizeof(msg->hdr) + sizeof(bcm_common_fast_set_alloc) * msg->hdr.num_of_allocs;
+	uint32_t i;
+
+    buf = bcmos_buf_alloc(len);
+
+    if (!buf)
+    {
+        BCMOS_TRACE_ERR("Can't allocate packet buffer\n");
+        return BCM_ERR_NOMEM;
+    }
+    bcmos_buf_length_set(buf, len);
+    buf_data = bcmos_buf_data(buf);
+
+	/* change endianness from host to embedded */
+
+    /* fixing header endianness and packing */
+    *buf_data++ = (uint8_t)BCM_COMMON_FAST_MSG_TYPE_SET_ALLOCS; /* msg type */
+    *buf_data++ = pon_ni; /* pon_ni is U8 */
+
+    msg_p = (bcm_common_fast_set_allocs_msg *)buf_data;
+
+    msg_p->hdr.cycle_num = BCMOLT_BUF_ENDIAN_CPU_TO_BUF(U32, msg->hdr.cycle_num);
+
+    msg_p->hdr.num_of_allocs = BCMOLT_BUF_ENDIAN_CPU_TO_BUF(U32, msg->hdr.num_of_allocs);
+
+    for (i = 0; i < sizeof(msg->hdr.num_of_allocs); i++)
+    {
+    	/* going over the list parts and fixing their endianity and packing into buf */
+    	msg_p->set_alloc_list[i].alloc_id = BCMOLT_BUF_ENDIAN_CPU_TO_BUF(U16, msg->set_alloc_list[i].alloc_id);
+    	msg_p->set_alloc_list[i].allocation_blocks = BCMOLT_BUF_ENDIAN_CPU_TO_BUF(U32, msg->set_alloc_list[i].allocation_blocks);
+    }
+
+	/* send directly to PCIe driver on the dedicated channel for fast API */
+    rc = bcmtr_swq_send(device, URGENT_CHANNEL, buf);
+
+    if (rc)
+    {
+        BCMOS_TRACE_ERR("bcmtr_pcie_send failed. Error %s (%d)\n", bcmos_strerror(rc), rc);
+        bcmos_buf_free(buf);
+        return BCM_ERR_PARM;
+    }
+    /* buffer will be freed automatically once it is transmitted */
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcmolt_fast_oper_set_accesses(bcmolt_devid device, uint8_t pon_ni, bcm_common_fast_set_accesses_msg *msg)
+{
+	bcmos_errno rc = BCM_ERR_OK;
+	bcmos_buf* buf;
+	bcm_common_fast_set_accesses_msg *msg_p;
+	unsigned char* buf_data;
+	uint32_t len = sizeof(bcm_common_fast_msg_type) + sizeof(pon_ni) +
+		sizeof (msg->hdr) + sizeof(bcm_common_fast_set_access) * msg->hdr.num_of_allocs;
+	uint32_t i;
+
+    buf = bcmos_buf_alloc(len);
+
+    if (!buf)
+    {
+        BCMOS_TRACE_ERR("Can't allocate packet buffer\n");
+        return BCM_ERR_NOMEM;
+    }
+    bcmos_buf_length_set(buf, len);
+    buf_data = bcmos_buf_data(buf);
+
+	/* change endianess from host to embedded */
+    /* fixing header endianness and packing */
+    *buf_data++ = (uint8_t)BCM_COMMON_FAST_MSG_TYPE_SET_BW_ALLOCS;
+    *buf_data++ = pon_ni; /* pon_ni is U8 */
+
+    msg_p = (bcm_common_fast_set_accesses_msg *)buf_data;
+
+    msg_p->hdr.cycle_num = BCMOLT_BUF_ENDIAN_CPU_TO_BUF(U32, msg->hdr.cycle_num);
+    msg_p->hdr.num_of_allocs = BCMOLT_BUF_ENDIAN_CPU_TO_BUF(U32, msg->hdr.num_of_allocs);
+
+    for (i = 0; i < sizeof(msg->hdr.num_of_allocs); i++)
+    {
+    	/* going over the list parts and fixing their endianity and packing into buf */
+    	msg_p->set_access_list[i].alloc_id = BCMOLT_BUF_ENDIAN_CPU_TO_BUF(U16, msg->set_access_list[i].alloc_id);
+    	msg_p->set_access_list[i].allocation_size = BCMOLT_BUF_ENDIAN_CPU_TO_BUF(U16, msg->set_access_list[i].allocation_size);
+    	msg_p->set_access_list[i].start_time = BCMOLT_BUF_ENDIAN_CPU_TO_BUF(U16, msg->set_access_list[i].start_time);
+    	msg_p->set_access_list[i].burst_profile = msg->set_access_list[i].burst_profile; /* burst profile is U8 */
+    	msg_p->set_access_list[i].alloc_flags = msg->set_access_list[i].alloc_flags; /* ploam_flag, dbru_flag, end_of_frame, end_of_map and fwi are boolean and are represented as a bitmap (U8) */
+    }
+
+	/* send directly to PCIe driver on the dedicated channel for fast API */
+	rc = bcmtr_swq_send(device, URGENT_CHANNEL, buf);
+
+    if (rc)
+    {
+        BCMOS_TRACE_ERR("bcmtr_pcie_send failed. Error %s (%d)\n", bcmos_strerror(rc), rc);
+        bcmos_buf_free(buf);
+        return BCM_ERR_PARM;
+    }
+    /* buffer will be freed automatically once it is transmitted */
+    return BCM_ERR_OK;
+}
+
+/* RX callback to handle messages from embedded -> host */
+void bcmolt_coop_dba_rx(bcmolt_devid device, bcmos_buf *sysb, bcmtrmux_channel channel, void *data)
+{
+    bcmos_errno err;
+    bcm_common_fast_get_stats_ind *msg_p;
+
+    unsigned char *buf_data = bcmos_buf_data(sysb);
+    uint32_t i;
+
+    /* calling host application callback to handle the statistics message from the embedded */
+
+    /* the host is expecting a message of type:
+     * typedef struct
+		{
+			bcmolt_xgpon_ni_fast_get_stats_ind_hdr hdr;
+			bws_dba_get_alloc_stat alloc_stats_list[BCM_COMMON_GPON_FAST_API_LIST_SIZE];
+		}bcmolt_xgpon_ni_fast_get_stats_ind;
+     */
+
+    msg_p = (bcm_common_fast_get_stats_ind *)buf_data;
+    /* Fixing endianness and  creating a message. */
+    /* pon_ni us uint8 no need to fix endianness */
+    msg_p->hdr.cycle_num = BCMOLT_BUF_ENDIAN_BUF_TO_CPU(U32, msg_p->hdr.cycle_num);
+    msg_p->hdr.available_bw = BCMOLT_BUF_ENDIAN_BUF_TO_CPU(U32, msg_p->hdr.available_bw);
+    msg_p->hdr.num_of_allocs = BCMOLT_BUF_ENDIAN_BUF_TO_CPU(U32, msg_p->hdr.num_of_allocs);
+    for (i = 0; i < msg_p->hdr.num_of_allocs; i++)
+    {
+    	msg_p->alloc_stats_list[i].alloc_id = BCMOLT_BUF_ENDIAN_BUF_TO_CPU(U16, msg_p->alloc_stats_list[i].alloc_id);
+    	msg_p->alloc_stats_list[i].allocated = BCMOLT_BUF_ENDIAN_BUF_TO_CPU(U32, msg_p->alloc_stats_list[i].allocated);
+    	msg_p->alloc_stats_list[i].used = BCMOLT_BUF_ENDIAN_BUF_TO_CPU(U32, msg_p->alloc_stats_list[i].used);
+    	msg_p->alloc_stats_list[i].status_report = BCMOLT_BUF_ENDIAN_BUF_TO_CPU(U32, msg_p->alloc_stats_list[i].status_report);
+    }
+    if (host_handler_array[device])
+    {
+    	err = host_handler_array[device](device, msg_p);
+    	BUG_ON(err);
+    }
+    else
+    {
+    	bcmos_free(sysb);
+    }
+}
+
+bcmos_errno bcmolt_coop_dba_init(bcmolt_devid devid, bcmtrmux_channel *channel, f_bcmtr_rx_handler rx_handler, void *data)
+{
+	bcmos_errno rc;
+
+	rc = bcmtrmux_channel_register(devid, channel, rx_handler, data);
+    if (rc != BCM_ERR_OK)
+    {
+        bcmos_printf("%s: can't register channel %d for device %u. rc=%d\n", __FUNCTION__, *channel, devid, (int)rc);
+        goto exit;
+    }
+	rc = bcmtr_swq_tx_queue_cfg(devid, BCMTR_PCIE_PRTY_NORMAL, BCMOLT_COOP_DBA_HARDQ_SIZE, BCMOLT_COOP_DBA_SOFTQ_SIZE);
+	if (rc != BCM_ERR_OK)
+	{
+		bcmos_printf("%s: can't configure tx queue channel %d for device %u. rc=%d\n", __FUNCTION__, devid, (int)rc);
+		goto exit;
+
+	}
+	return rc;
+
+exit:
+	bcmolt_coop_dba_exit(devid, *channel);
+	return rc;
+}
+
+void bcmolt_coop_dba_exit(bcmolt_devid devid, bcmtrmux_channel channel)
+{
+	bcmtrmux_channel_unregister(devid, channel);
+}
+
+void bcmolt_coop_dba_host_handler_register(bcmolt_devid devid, bcmolt_coop_dba_host_handler_cb host_handler)
+{
+	host_handler_array[devid] = host_handler;
+}
+
+void bcmolt_coop_dba_host_handler_unregister(bcmolt_devid devid)
+{
+	host_handler_array[devid] = NULL;
+}
diff --git a/bcm68620_release/release/host_driver/coop_dba/bcmolt_coop_dba.h b/bcm68620_release/release/host_driver/coop_dba/bcmolt_coop_dba.h
new file mode 100644
index 0000000..83ca4ec
--- /dev/null
+++ b/bcm68620_release/release/host_driver/coop_dba/bcmolt_coop_dba.h
@@ -0,0 +1,49 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef _BCMOLT_COOP_DBA_H_
+#define _BCMOLT_COOP_DBA_H_
+
+#include <bcmolt_msg.h>
+#include <bcm_common_gpon_fast.h>
+#include <bcmolt_tr_mux.h>
+
+#define BCMOLT_COOP_DBA_HARDQ_SIZE 4
+#define BCMOLT_COOP_DBA_SOFTQ_SIZE 0
+
+typedef bcmos_errno (*bcmolt_coop_dba_host_handler_cb)(bcmolt_devid device, bcm_common_fast_get_stats_ind *data);
+
+bcmos_errno bcmolt_fast_oper_set_allocs(bcmolt_devid device, uint8_t pon_ni, bcm_common_fast_set_allocs_msg *msg);
+bcmos_errno bcmolt_fast_oper_set_accesses(bcmolt_devid device, uint8_t pon_ni, bcm_common_fast_set_accesses_msg *msg);
+void bcmolt_coop_dba_exit(bcmolt_devid devid, bcmtrmux_channel channel);
+bcmos_errno bcmolt_coop_dba_init(bcmolt_devid devid, bcmtrmux_channel *channel, f_bcmtr_rx_handler rx_handler, void *data);
+void bcmolt_coop_dba_host_handler_register(bcmolt_devid devid, bcmolt_coop_dba_host_handler_cb host_handler);
+void bcmolt_coop_dba_host_handler_unregister(bcmolt_devid devid);
+void bcmolt_coop_dba_rx(bcmolt_devid device, bcmos_buf *sysb, bcmtrmux_channel channel, void *data);
+#endif
diff --git a/bcm68620_release/release/host_driver/debug/Makefile b/bcm68620_release/release/host_driver/debug/Makefile
new file mode 100644
index 0000000..0e6e3e6
--- /dev/null
+++ b/bcm68620_release/release/host_driver/debug/Makefile
@@ -0,0 +1,10 @@
+# Common debug API
+#
+MOD_NAME = debug_common
+MOD_DEPS = os dev_log utils model transport common_api
+MOD_TYPE = lib
+
+srcs = bcmolt_debug_api_common.c
+
+USE_LINT=yes
+
diff --git a/bcm68620_release/release/host_driver/debug/bcmolt_debug_api_common.c b/bcm68620_release/release/host_driver/debug/bcmolt_debug_api_common.c
new file mode 100644
index 0000000..4fb6bcf
--- /dev/null
+++ b/bcm68620_release/release/host_driver/debug/bcmolt_debug_api_common.c
@@ -0,0 +1,327 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#include "bcmos_system.h"
+#include "bcmolt_math.h"
+#include "bcmtr_debug.h"
+#include "bcmolt_msg.h"
+#include "bcmolt_debug_api_common.h"
+
+#define API_CFG_PROP_EXISTS(mask, prop)  (((mask) & (1ULL << (prop))) != 0)
+
+static void bcmolt_debug_api_common_capture_stats_update(bcmolt_devid device, bcmolt_debug_api_db *db)
+{
+    bcmos_errno err;
+    bcmtr_capture_info info;
+
+    err = bcmtr_capture_info_get(device, &info);
+    BUG_ON(BCM_ERR_OK != err);
+
+    db->cfg.api_capture_stats.buffer_used_bytes = info.used;
+    db->cfg.api_capture_stats.events_recorded = info.msgs;
+    db->cfg.api_capture_stats.events_dropped = info.lost;
+    db->cfg.api_capture_stats.buffer_wrap_count = info.wa;
+
+    err = bcmtr_capture_size_get(device, &db->cfg.api_capture_stats.readable_bytes);
+    BUG_ON(BCM_ERR_OK != err);
+}
+
+static bcmos_errno bcmolt_debug_api_common_capture_init(bcmolt_devid device, bcmolt_debug_api_db *db)
+{
+    bcmos_errno err;
+    bcmtr_capture_parm cap_parm = {};
+
+    cap_parm.size = db->cfg.api_capture_cfg.buffer_size_bytes;
+    cap_parm.ptr = db->capture_buffer;
+    cap_parm.stop_on_full = db->cfg.api_capture_cfg.buffer_mode == BCMOLT_API_CAPTURE_BUFFER_MODE_OVERFLOW;
+    cap_parm.activate = BCMOS_FALSE;
+
+    err = bcmtr_capture_init(device, &cap_parm);
+    BCMOS_CHECK_RETURN_ERROR(BCM_ERR_OK != err, err);
+
+    bcmolt_debug_api_common_capture_stats_update(device, db);
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcmolt_debug_api_common_get(bcmolt_devid device, bcmolt_msg *msg, bcmolt_debug_api_db *db)
+{
+    if (API_CFG_PROP_EXISTS(msg->presence_mask, BCMOLT_DEBUG_CFG_ID_API_CAPTURE_BUFFER))
+    {
+        uint32_t to_read = 0;
+
+        if (bcmtr_capture_is_active(device))
+        {
+            return bcmolt_msg_err(
+                msg,
+                DEV_LOG_INVALID_ID,
+                BCM_ERR_STATE,
+                BCMOLT_DEBUG_CFG_ID_API_CAPTURE_BUFFER,
+                "Cannot read capture buffer while capture is in progress");
+        }
+
+        if (db->cfg.api_capture_buffer_read.offset < db->cfg.api_capture_stats.readable_bytes)
+        {
+            to_read = MIN(
+                db->cfg.api_capture_buffer.len,
+                db->cfg.api_capture_stats.readable_bytes - db->cfg.api_capture_buffer_read.offset);
+        }
+        if ((db->cfg.api_capture_buffer.val != NULL) && (db->cfg.api_capture_buffer.len > 0))
+        {
+            bcmtr_capture_read(
+                device,
+                db->cfg.api_capture_buffer.val,
+                db->cfg.api_capture_buffer_read.offset,
+                &to_read);
+            memset(db->cfg.api_capture_buffer.val + (db->cfg.api_capture_buffer.len - to_read), 0, to_read);
+        }
+    }
+
+    return BCM_ERR_OK;
+}
+
+debug_trans_handle *bcmolt_debug_api_common_cfg_trans_start(bcmolt_debug_api_db *db)
+{
+    debug_trans_handle *handle = bcmos_calloc(sizeof(*handle));
+    handle->old_db = *db;
+    handle->new_db = db;
+    return handle;
+}
+
+void bcmolt_debug_api_common_cfg_trans_fail(bcmolt_debug_api_db *db, debug_trans_handle *handle)
+{
+    if (handle->old_db.capture_buffer != handle->new_db->capture_buffer)
+    {
+        bcmos_free(handle->new_db->capture_buffer);
+    }
+    if (handle->old_db.cfg.api_capture_buffer.val != handle->new_db->cfg.api_capture_buffer.val)
+    {
+        bcmos_free(handle->new_db->cfg.api_capture_buffer.val);
+    }
+    *db = handle->old_db;
+    bcmos_free(handle);
+}
+
+void bcmolt_debug_api_common_cfg_trans_succeed(bcmolt_devid device, debug_trans_handle *handle)
+{
+    bcmos_errno err;
+
+    if (handle->old_db.capture_buffer != handle->new_db->capture_buffer)
+    {
+        bcmos_free(handle->old_db.capture_buffer);
+        bcmtr_capture_destroy(device);
+        err = bcmolt_debug_api_common_capture_init(device, handle->new_db);
+        if (BCM_ERR_OK != err) /* cfg_set should have validated that this won't fail */
+        {
+            BCMOS_TRACE_ERR("Capture init failed (%s)!\n", bcmos_strerror(err));
+        }
+    }
+    if (handle->old_db.cfg.api_capture_buffer.val != handle->new_db->cfg.api_capture_buffer.val)
+    {
+        bcmos_free(handle->old_db.cfg.api_capture_buffer.val);
+    }
+    bcmos_free(handle);
+}
+
+bcmos_errno bcmolt_debug_api_common_set(
+    bcmolt_devid device,
+    bcmolt_msg *msg,
+    const bcmolt_debug_cfg_data *data,
+    debug_trans_handle *handle,
+    bcmolt_api_capture_location local)
+{
+    if (API_CFG_PROP_EXISTS(msg->presence_mask, BCMOLT_DEBUG_CFG_ID_API_CAPTURE_CFG))
+    {
+        if (bcmtr_capture_is_active(device))
+        {
+            return bcmolt_msg_err(
+                msg,
+                DEV_LOG_INVALID_ID,
+                BCM_ERR_STATE,
+                BCMOLT_DEBUG_CFG_ID_API_CAPTURE_CFG,
+                "Cannot change capture configuration while capture is in progress");
+        }
+        handle->new_db->cfg.api_capture_cfg = data->api_capture_cfg;
+    }
+
+    if (API_CFG_PROP_EXISTS(msg->presence_mask, BCMOLT_DEBUG_CFG_ID_API_CAPTURE_BUFFER_READ))
+    {
+        handle->new_db->cfg.api_capture_buffer_read = data->api_capture_buffer_read;
+    }
+
+    /* Once all the properties are handled, we need to take care of a few things that could depend on multiple
+       properties */
+    if ((handle->new_db->cfg.api_capture_cfg.location == local) &&
+        /* If we just switched to the device ... */
+        ((handle->new_db->cfg.api_capture_cfg.location != handle->old_db.cfg.api_capture_cfg.location) ||
+         /* ... or either the buffer size ... */
+        (handle->new_db->cfg.api_capture_cfg.buffer_size_bytes !=
+         handle->old_db.cfg.api_capture_cfg.buffer_size_bytes) ||
+         /* ... or the buffer mode have changed */
+        (handle->new_db->cfg.api_capture_cfg.buffer_mode != handle->old_db.cfg.api_capture_cfg.buffer_mode)))
+    {
+        handle->new_db->capture_buffer = bcmos_alloc(handle->new_db->cfg.api_capture_cfg.buffer_size_bytes);
+        if (handle->new_db->capture_buffer == NULL)
+        {
+            return bcmolt_msg_err(
+                msg,
+                DEV_LOG_INVALID_ID,
+                BCM_ERR_NOMEM,
+                BCMOLT_DEBUG_CFG_ID_API_CAPTURE_BUFFER_READ,
+                "Failed to allocate new capture buffer");
+        }
+    }
+
+    if ((handle->new_db->cfg.api_capture_cfg.location == local) &&
+        /* If we just switched to the device ... */
+        ((handle->new_db->cfg.api_capture_cfg.location != handle->old_db.cfg.api_capture_cfg.location) ||
+         /* ... or the read size has changed */
+        (handle->old_db.cfg.api_capture_buffer_read.size != handle->new_db->cfg.api_capture_buffer_read.size)))
+    {
+        handle->new_db->cfg.api_capture_buffer.len = handle->new_db->cfg.api_capture_buffer_read.size;
+        if (handle->new_db->cfg.api_capture_buffer.len != 0)
+        {
+            handle->new_db->cfg.api_capture_buffer.val = bcmos_alloc(handle->new_db->cfg.api_capture_buffer_read.size);
+            if (handle->new_db->cfg.api_capture_buffer.val == NULL)
+            {
+                return bcmolt_msg_err(
+                    msg,
+                    DEV_LOG_INVALID_ID,
+                    BCM_ERR_NOMEM,
+                    BCMOLT_DEBUG_CFG_ID_API_CAPTURE_BUFFER_READ,
+                    "Failed to allocate new read buffer");
+            }
+        }
+        else
+        {
+            handle->new_db->cfg.api_capture_buffer.val = NULL;
+        }
+    }
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcmolt_debug_api_common_oper_start_api_capture(bcmolt_devid device, bcmolt_msg *msg)
+{
+    bcmos_errno err;
+    bcmtr_cld_filter filter;
+
+    if (bcmtr_capture_is_active(device))
+    {
+        return bcmolt_msg_err(
+            msg,
+            DEV_LOG_INVALID_ID,
+            BCM_ERR_ALREADY,
+            BCMOLT_ERR_FIELD_NONE,
+            "Capture already in progress");
+    }
+
+    /* capture everything */
+    filter.object = BCMOLT_OBJECT_ANY;
+    filter.group = BCMOLT_MGT_GROUP_ANY;
+    filter.subgroup = BCMOLT_SUBGROUP_ANY;
+    err = bcmtr_cld_level_set(device, &filter, BCMTR_CLD_CAPTURE);
+    BCMOS_CHECK_RETURN_ERROR(BCM_ERR_OK != err, err);
+    /* for now filter out start/stop operations and keep-alives */
+    filter.object = BCMOLT_OBJ_ID_DEBUG;
+    filter.group = BCMOLT_MGT_GROUP_OPER;
+    filter.subgroup = BCMOLT_DEBUG_OPER_ID_START_API_CAPTURE; /*lint !e633 */
+    err = bcmtr_cld_level_set(device, &filter, BCMTR_CLD_NONE);
+    BCMOS_CHECK_RETURN_ERROR(BCM_ERR_OK != err, err);
+    filter.subgroup = BCMOLT_DEBUG_OPER_ID_STOP_API_CAPTURE;  /*lint !e633 */
+    err = bcmtr_cld_level_set(device, &filter, BCMTR_CLD_NONE);
+    BCMOS_CHECK_RETURN_ERROR(BCM_ERR_OK != err, err);
+    filter.object = BCMOLT_OBJ_ID_DEVICE;
+    filter.group = BCMOLT_MGT_GROUP_OPER;
+    filter.subgroup = BCMOLT_DEVICE_OPER_ID_HOST_KEEP_ALIVE;  /*lint !e633 */
+    err = bcmtr_cld_level_set(device, &filter, BCMTR_CLD_NONE);
+    BCMOS_CHECK_RETURN_ERROR(BCM_ERR_OK != err, err);
+    filter.group = BCMOLT_MGT_GROUP_AUTO;
+    filter.subgroup = BCMOLT_DEVICE_AUTO_ID_DEVICE_KEEP_ALIVE;  /*lint !e633 */
+    err = bcmtr_cld_level_set(device, &filter, BCMTR_CLD_NONE);
+    BCMOS_CHECK_RETURN_ERROR(BCM_ERR_OK != err, err);
+
+    return bcmtr_capture_start_stop(device, BCMOS_TRUE);
+}
+
+bcmos_errno bcmolt_debug_api_common_oper_stop_api_capture(bcmolt_devid device, bcmolt_msg *msg, bcmolt_debug_api_db *db)
+{
+    bcmos_errno err;
+
+    if (!bcmtr_capture_is_active(device))
+    {
+        return bcmolt_msg_err(
+            msg,
+            DEV_LOG_INVALID_ID,
+            BCM_ERR_ALREADY,
+            BCMOLT_ERR_FIELD_NONE,
+            "No capture in progress");
+    }
+
+    err = bcmtr_capture_start_stop(device, BCMOS_FALSE);
+    BCMOS_CHECK_RETURN_ERROR(BCM_ERR_OK != err, err);
+
+    bcmolt_debug_api_common_capture_stats_update(device, db);
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcmolt_debug_api_common_oper_reset_api_capture(bcmolt_devid device, bcmolt_msg *msg, bcmolt_debug_api_db *db)
+{
+    bcmos_errno err;
+
+    if (bcmtr_capture_is_active(device))
+    {
+        return bcmolt_msg_err(
+            msg,
+            DEV_LOG_INVALID_ID,
+            BCM_ERR_STATE,
+            BCMOLT_ERR_FIELD_NONE,
+            "Cannot reset capture while capture is running");
+    }
+
+    bcmtr_capture_destroy(device);
+    err = bcmolt_debug_api_common_capture_init(device, db);
+
+    return err;
+}
+
+void bcmolt_debug_api_common_init(bcmolt_devid device, bcmolt_debug_api_db *db)
+{
+    bcmos_errno err;
+
+#if ENABLE_LOG
+    db->log_id = bcm_dev_log_id_register("mh_debug", DEV_LOG_LEVEL_INFO, DEV_LOG_ID_TYPE_BOTH);
+#endif
+
+    bcmolt_debug_cfg_data_set_default(&db->cfg, BCMOLT_PRESENCE_MASK_ALL);
+    db->capture_buffer = bcmos_alloc(db->cfg.api_capture_cfg.buffer_size_bytes);
+    err = bcmolt_debug_api_common_capture_init(device, db);
+    BUG_ON(BCM_ERR_OK != err);
+}
+
diff --git a/bcm68620_release/release/host_driver/debug/bcmolt_debug_api_common.h b/bcm68620_release/release/host_driver/debug/bcmolt_debug_api_common.h
new file mode 100644
index 0000000..a1f28ab
--- /dev/null
+++ b/bcm68620_release/release/host_driver/debug/bcmolt_debug_api_common.h
@@ -0,0 +1,73 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef BCMOLT_DEBUG_API_COMMON_H_
+#define BCMOLT_DEBUG_API_COMMON_H_
+
+#include "bcmolt_model_types.h"
+#include "bcm_dev_log.h"
+
+typedef struct
+{
+    bcmolt_debug_cfg_data cfg;
+    uint8_t *capture_buffer;
+    dev_log_id log_id;
+} bcmolt_debug_api_db;
+
+typedef struct
+{
+    bcmolt_debug_api_db old_db;
+    bcmolt_debug_api_db *new_db;
+} debug_trans_handle;
+
+bcmos_errno bcmolt_debug_api_common_get(bcmolt_devid device, bcmolt_msg *msg, bcmolt_debug_api_db *db);
+
+debug_trans_handle *bcmolt_debug_api_common_cfg_trans_start(bcmolt_debug_api_db *db);
+
+void bcmolt_debug_api_common_cfg_trans_fail(bcmolt_debug_api_db *db, debug_trans_handle *handle);
+
+void bcmolt_debug_api_common_cfg_trans_succeed(bcmolt_devid device, debug_trans_handle *handle);
+
+bcmos_errno bcmolt_debug_api_common_set(
+    bcmolt_devid device,
+    bcmolt_msg *msg,
+    const bcmolt_debug_cfg_data *data,
+    debug_trans_handle *handle,
+    bcmolt_api_capture_location local);
+
+bcmos_errno bcmolt_debug_api_common_oper_start_api_capture(bcmolt_devid device, bcmolt_msg *msg);
+
+bcmos_errno bcmolt_debug_api_common_oper_stop_api_capture(bcmolt_devid device, bcmolt_msg *msg, bcmolt_debug_api_db *db);
+
+bcmos_errno bcmolt_debug_api_common_oper_reset_api_capture(bcmolt_devid device, bcmolt_msg *msg, bcmolt_debug_api_db *db);
+
+void bcmolt_debug_api_common_init(bcmolt_devid device, bcmolt_debug_api_db *db);
+
+#endif /* BCMOLT_DEBUG_API_COMMON_H_ */
+
diff --git a/bcm68620_release/release/host_driver/dev_ctrl/Makefile b/bcm68620_release/release/host_driver/dev_ctrl/Makefile
new file mode 100644
index 0000000..24f149b
--- /dev/null
+++ b/bcm68620_release/release/host_driver/dev_ctrl/Makefile
@@ -0,0 +1,24 @@
+# Device control driver
+MOD_NAME = dev_ctrl
+MOD_DEPS = trmux keep_alive fld ll_pcie debug_common
+MOD_INC_DIRS = $(SRC_DIR)
+
+ifeq ("$(RELEASE_BUILD)", "y")
+    MOD_INC_DIRS += host_driver/sw_version host_driver/sw_error host_driver/mh_utils
+else
+    MOD_INC_DIRS += host/sw_version $(TOP_DIR)/common/sw_error $(TOP_DIR)/common/mh_utils
+endif
+
+ifeq ("$(OS_KERNEL)", "linux")
+MOD_TYPE = linux_lib
+else
+MOD_TYPE = lib
+endif
+
+srcs = bcmolt_dev_ctrl.c bcmolt_debug_ctrl.c
+
+# If called by linux kernel builder - add include paths manually.
+# It is not elegant, but we'll not have many linux modules
+ifneq ("$(KBUILD_SRC)", "")
+	-include $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
+endif
diff --git a/bcm68620_release/release/host_driver/dev_ctrl/bcmolt_debug_ctrl.c b/bcm68620_release/release/host_driver/dev_ctrl/bcmolt_debug_ctrl.c
new file mode 100644
index 0000000..45764cb
--- /dev/null
+++ b/bcm68620_release/release/host_driver/dev_ctrl/bcmolt_debug_ctrl.c
@@ -0,0 +1,469 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#define HOST_API_CAPTURE 0
+
+#include "bcmos_system.h"
+#include "bcmolt_api.h"
+#include "bcmolt_msg.h"
+#include "bcmolt_tr_mux.h"
+#if HOST_API_CAPTURE
+#include "bcmolt_debug_api_common.h"
+#endif
+#include "bcmolt_dev_ctrl.h"
+#include "bcmolt_debug_ctrl.h"
+
+#define API_CAPTURE_PROP_MASK\
+    ((1ULL << BCMOLT_DEBUG_CFG_ID_API_CAPTURE_CFG) |\
+     (1ULL << BCMOLT_DEBUG_CFG_ID_API_CAPTURE_STATS) |\
+     (1ULL << BCMOLT_DEBUG_CFG_ID_API_CAPTURE_BUFFER_READ) |\
+     (1ULL << BCMOLT_DEBUG_CFG_ID_API_CAPTURE_BUFFER))
+
+typedef struct
+{
+    bcmos_bool waiting_for_ack;
+    bcmolt_msg *last_message;
+    bcmos_timer ack_timeout;
+#if HOST_API_CAPTURE
+    bcmolt_debug_api_db db;
+    debug_trans_handle *handle;
+#endif
+} debug_ctrl_ctxt;
+
+static debug_ctrl_ctxt debug_ctrl[BCMTR_MAX_OLTS];
+
+static void send_to_host(bcmolt_devid device, bcmolt_msg *msg)
+{
+    msg->dir = BCMOLT_MSG_DIR_RESPONSE;
+    bcmtrmux_control_to_host(device, msg);
+    bcmolt_msg_free(msg);
+}
+
+static void send_to_device(bcmolt_devid device, bcmolt_msg *msg)
+{
+    debug_ctrl[device].waiting_for_ack = BCMOS_TRUE;
+    debug_ctrl[device].last_message = msg;
+    bcmtrmux_control_to_line(device, msg);
+    bcmos_timer_start(&debug_ctrl[device].ack_timeout, DEVICE_RESPONSE_TIMEOUT_LENGTH);
+}
+
+static bcmos_bool bcmolt_debug_ctrl_cfg_requires_connection(bcmolt_msg *msg, const bcmolt_debug_cfg_data *cfg)
+{
+    return (((msg->presence_mask & ~API_CAPTURE_PROP_MASK) != 0) || /* includes non-API capture elements, or ... */
+            (((msg->presence_mask & API_CAPTURE_PROP_MASK) != 0) && /* includes API captue elements and ... */
+             (cfg->api_capture_cfg.location == BCMOLT_API_CAPTURE_LOCATION_DEVICE))); /* capture location is device */
+}
+
+static void bcmolt_debug_ctrl_send_cfg_get_response(bcmolt_devid device, bcmolt_msg *msg)
+{
+#if HOST_API_CAPTURE
+    if (debug_ctrl[device].db.cfg.api_capture_cfg.location == BCMOLT_API_CAPTURE_LOCATION_HOST)
+    {
+        bcmolt_debug_api_common_get(device, msg, &debug_ctrl[device].db);
+    }
+#endif
+    send_to_host(device, msg);
+}
+
+static void bcmolt_debug_ctrl_handle_cfg_get(bcmolt_devid device, bcmolt_msg *msg, bcmos_bool connected)
+{
+#if HOST_API_CAPTURE
+    if (bcmolt_debug_ctrl_cfg_requires_connection(msg, &debug_ctrl[device].db.cfg))
+#endif
+    {
+        if (connected)
+        {
+            send_to_device(device, msg);
+            return;
+        }
+
+        bcmolt_msg_err(
+            msg,
+            DEV_LOG_INVALID_ID,
+            BCM_ERR_NOT_CONNECTED,
+            BCMOLT_ERR_FIELD_NONE,
+            "Cannot access embedded parameters while disconnected");
+    }
+
+    bcmolt_debug_ctrl_send_cfg_get_response(device, msg);
+}
+
+static void bcmolt_debug_ctrl_send_cfg_set_response(bcmolt_devid device, bcmolt_msg *msg)
+{
+#if HOST_API_CAPTURE
+    if (msg->err == BCM_ERR_OK)
+    {
+        bcmolt_debug_api_common_cfg_trans_succeed(device, debug_ctrl[device].handle);
+    }
+    else
+    {
+        bcmolt_debug_api_common_cfg_trans_fail(&debug_ctrl[device].db, debug_ctrl[device].handle);
+    }
+#endif
+
+    send_to_host(device, msg);
+}
+
+static void bcmolt_debug_ctrl_handle_cfg_set(bcmolt_devid device, bcmolt_msg *msg, bcmos_bool connected)
+{
+    bcmolt_debug_cfg *cfg = (bcmolt_debug_cfg*)msg;
+    bcmolt_debug_cfg_id prop_id;
+    bcmos_errno err;
+
+    if (!bcmolt_debug_cfg_data_bounds_check(&cfg->data, msg->presence_mask, &prop_id))
+    {
+        err = BCM_ERR_RANGE;
+        msg->err_field_idx = (uint16_t)prop_id;
+        send_to_host(device, msg);
+        return;
+    }
+
+#if HOST_API_CAPTURE
+    debug_ctrl[device].handle = bcmolt_debug_api_common_cfg_trans_start(&debug_ctrl[device].db);
+    err = bcmolt_debug_api_common_set(device, msg, &cfg->data, debug_ctrl[device].handle, BCMOLT_API_CAPTURE_LOCATION_HOST);
+#else
+    if (BCMOLT_CFG_PROP_IS_SET(cfg, debug, api_capture_cfg) &&
+        (cfg->data.api_capture_cfg.location == BCMOLT_API_CAPTURE_LOCATION_HOST))
+    {
+        err = bcmolt_msg_err(
+            msg,
+            DEV_LOG_INVALID_ID,
+            BCM_ERR_NOT_SUPPORTED,
+            BCMOLT_ERR_FIELD_NONE,
+            "Host API capture not supported yet");
+    }
+    else
+    {
+        err = BCM_ERR_OK;
+    }
+#endif
+    if (err == BCM_ERR_OK)
+    {
+        if (bcmolt_debug_ctrl_cfg_requires_connection(msg, &cfg->data))
+        {
+            if (connected)
+            {
+                send_to_device(device, msg);
+                return;
+            }
+
+            bcmolt_msg_err(
+                msg,
+                DEV_LOG_INVALID_ID,
+                BCM_ERR_NOT_CONNECTED,
+                BCMOLT_ERR_FIELD_NONE,
+                "Cannot access embedded parameters while disconnected");
+        }
+    }
+
+    bcmolt_debug_ctrl_send_cfg_set_response(device, msg);
+}
+
+static void bcmolt_debug_ctrl_handle_cfg_clear(bcmolt_devid device, bcmolt_msg *msg, bcmos_bool connected)
+{
+#if HOST_API_CAPTURE
+    bcmolt_debug_cfg *cfg = (bcmolt_debug_cfg*)msg;
+#endif
+    bcmos_errno err;
+
+    if (!connected)
+    {
+        bcmolt_msg_err(
+            msg,
+            DEV_LOG_INVALID_ID,
+            BCM_ERR_NOT_CONNECTED,
+            BCMOLT_ERR_FIELD_NONE,
+            "Cannot access embedded parameters while disconnected");
+        send_to_host(device, msg);
+        return;
+    }
+
+#if HOST_API_CAPTURE
+    debug_ctrl[device].handle = bcmolt_debug_api_common_cfg_trans_start(&debug_ctrl[device].db);
+    bcmolt_debug_cfg_data_set_default(&debug_ctrl[device].db.cfg, BCMOLT_PRESENCE_MASK_ALL);
+    msg->presence_mask = BCMOLT_PRESENCE_MASK_ALL;
+    err = bcmolt_debug_api_common_set(device, msg, &cfg->data, debug_ctrl[device].handle, BCMOLT_API_CAPTURE_LOCATION_HOST);
+#else
+    err = BCM_ERR_OK;
+#endif
+    if (err == BCM_ERR_OK)
+    {
+        send_to_device(device, msg);
+    }
+    else
+    {
+        bcmolt_debug_ctrl_send_cfg_set_response(device, msg);
+    }
+}
+
+static void bcmolt_debug_ctrl_handle_cfg(bcmolt_devid device, bcmolt_msg *msg, bcmos_bool connected)
+{
+    switch (msg->type)
+    {
+        case BCMOLT_MSG_TYPE_GET:
+            bcmolt_debug_ctrl_handle_cfg_get(device, msg, connected);
+            break;
+        case BCMOLT_MSG_TYPE_SET:
+            bcmolt_debug_ctrl_handle_cfg_set(device, msg, connected);
+            break;
+        case BCMOLT_MSG_TYPE_CLEAR:
+            bcmolt_debug_ctrl_handle_cfg_clear(device, msg, connected);
+            break;
+        default:
+            bcmolt_msg_err(
+                msg,
+                DEV_LOG_INVALID_ID,
+                BCM_ERR_NOT_SUPPORTED,
+                BCMOLT_ERR_FIELD_NONE,
+                "Unsupported message type (%u)",
+                msg->type);
+            send_to_host(device, msg);
+            break;
+    }
+}
+
+static void bcmolt_debug_ctrl_handle_oper(bcmolt_devid device, bcmolt_msg *msg, bcmos_bool connected)
+{
+#if HOST_API_CAPTURE
+    bcmos_bool host_api_capture =
+        (debug_ctrl[device].db.cfg.api_capture_cfg.location == BCMOLT_API_CAPTURE_LOCATION_HOST);
+
+    switch (msg->subgroup)
+    {
+        case BCMOLT_DEBUG_OPER_ID_START_API_CAPTURE:
+            if (host_api_capture)
+            {
+                msg->err = bcmolt_debug_api_common_oper_start_api_capture(device, msg);
+                send_to_host(device, msg);
+                return;
+            }
+            break;
+        case BCMOLT_DEBUG_OPER_ID_STOP_API_CAPTURE:
+            if (host_api_capture)
+            {
+                msg->err = bcmolt_debug_api_common_oper_stop_api_capture(device, msg, &debug_ctrl[device].db);
+                send_to_host(device, msg);
+                return;
+            }
+            break;
+        case BCMOLT_DEBUG_OPER_ID_RESET_API_CAPTURE:
+            if (host_api_capture)
+            {
+                msg->err = bcmolt_debug_api_common_oper_reset_api_capture(device, msg, &debug_ctrl[device].db);
+                send_to_host(device, msg);
+                return;
+            }
+            break;
+        default:
+            break;
+    }
+#endif
+
+    if (!connected)
+    {
+        bcmolt_msg_err(
+            msg,
+            DEV_LOG_INVALID_ID,
+            BCM_ERR_NOT_CONNECTED,
+            BCMOLT_ERR_FIELD_NONE,
+            "Cannot perform embedded operations while disconnected");
+        send_to_host(device, msg);
+        return;
+    }
+
+    send_to_device(device, msg);
+}
+
+static void bcmolt_debug_ctrl_handle_auto_cfg(bcmolt_devid device, bcmolt_msg *msg, bcmos_bool connected)
+{
+    if (!connected)
+    {
+        bcmolt_msg_err(
+            msg,
+            DEV_LOG_INVALID_ID,
+            BCM_ERR_NOT_CONNECTED,
+            BCMOLT_ERR_FIELD_NONE,
+            "Cannot access embedded parameters while disconnected");
+        send_to_host(device, msg);
+        return;
+    }
+
+    send_to_device(device, msg);
+}
+
+static void bcmolt_debug_ctrl_handle_request(bcmolt_devid device, bcmolt_msg *msg, bcmos_bool connected)
+{
+    if (debug_ctrl[device].waiting_for_ack)
+    {
+        bcmolt_msg_err(
+            msg,
+            DEV_LOG_INVALID_ID,
+            BCM_ERR_TOO_MANY_REQS,
+            BCMOLT_ERR_FIELD_NONE,
+            "Transaction in progress on debug object");
+        send_to_host(device, msg);
+        return;
+    }
+
+    switch (msg->group)
+    {
+        case BCMOLT_MGT_GROUP_CFG:
+            bcmolt_debug_ctrl_handle_cfg(device, msg, connected);
+            break;
+        case BCMOLT_MGT_GROUP_OPER:
+            bcmolt_debug_ctrl_handle_oper(device, msg, connected);
+            break;
+        case BCMOLT_MGT_GROUP_AUTO_CFG:
+            bcmolt_debug_ctrl_handle_auto_cfg(device, msg, connected);
+            break;
+        default:
+            bcmolt_msg_err(
+                msg,
+                DEV_LOG_INVALID_ID,
+                BCM_ERR_NOT_SUPPORTED,
+                BCMOLT_ERR_FIELD_NONE,
+                "Unsupported group (%u)",
+                msg->group);
+            send_to_host(device, msg);
+            break;
+    }
+}
+
+static void bcmolt_debug_ctrl_handle_response(bcmolt_devid device, bcmolt_msg *msg)
+{
+    if (!debug_ctrl[device].waiting_for_ack || (msg->corr_tag != debug_ctrl[device].last_message->corr_tag))
+    {
+        msg->subch = BCMTRMUX_CHANNEL_AUTO_PROXY;
+        send_to_host(device, msg);
+        return;
+    }
+
+    msg->subch = debug_ctrl[device].last_message->subch;
+    bcmos_timer_stop(&debug_ctrl[device].ack_timeout);
+    debug_ctrl[device].waiting_for_ack = BCMOS_FALSE;
+    bcmolt_msg_free(debug_ctrl[device].last_message);
+
+    if (msg->err != BCM_ERR_OK)
+    {
+        send_to_host(device, msg);
+        return;
+    }
+
+    switch (msg->group)
+    {
+        case BCMOLT_MGT_GROUP_CFG:
+            switch (msg->type)
+            {
+                case BCMOLT_MSG_TYPE_GET:
+                    bcmolt_debug_ctrl_send_cfg_get_response(device, msg);
+                    break;
+                case BCMOLT_MSG_TYPE_SET:
+                    bcmolt_debug_ctrl_send_cfg_set_response(device, msg);
+                    break;
+                case BCMOLT_MSG_TYPE_CLEAR:
+                    bcmolt_debug_ctrl_send_cfg_set_response(device, msg);
+                    break;
+                default:
+                    BCMOS_TRACE_ERR("Got unexpected response type (%u) from embedded\n", msg->group);
+                    send_to_host(device, msg);
+                    break;
+            }
+            break;
+        case BCMOLT_MGT_GROUP_OPER:
+        case BCMOLT_MGT_GROUP_AUTO_CFG:
+            send_to_host(device, msg);
+            break;
+        default:
+            BCMOS_TRACE_ERR("Got unexpected response group (%u) from embedded\n", msg->group);
+            send_to_host(device, msg);
+            break;
+    }
+}
+
+static bcmos_timer_rc bcmolt_debug_ctrl_handle_ack_timeout(bcmos_timer *timer, long data)
+{
+    bcmolt_devid device = (bcmolt_devid)data;
+
+    if (debug_ctrl[device].last_message == NULL)
+    {
+        BCMOS_TRACE_ERR("Waiting with no message!\n");
+        return BCMOS_TIMER_OK;
+    }
+
+    bcmolt_msg_err(
+        debug_ctrl[device].last_message,
+        DEV_LOG_INVALID_ID,
+        BCM_ERR_INTERNAL,
+        BCMOLT_ERR_FIELD_NONE,
+        "Did not receive response from embedded");
+    send_to_host(device, debug_ctrl [device].last_message);
+
+    return BCMOS_TIMER_OK;
+}
+
+void bcmolt_debug_ctrl_process_msg(bcmolt_devid device, bcmolt_msg *msg, bcmos_bool connected)
+{
+    switch (msg->dir)
+    {
+        case BCMOLT_MSG_DIR_REQUEST:
+            bcmolt_debug_ctrl_handle_request(device, msg, connected);
+            break;
+        case BCMOLT_MSG_DIR_RESPONSE:
+            bcmolt_debug_ctrl_handle_response(device, msg);
+            break;
+        default:
+            BCMOS_TRACE_ERR("Unsupported direction: %u\n", msg->dir);
+            bcmolt_msg_free(msg);
+            break;
+    }
+}
+
+void bcmolt_debug_ctrl_init(void)
+{
+    bcmolt_devid i;
+
+    for (i = 0; i < BCMTR_MAX_OLTS; i++)
+    {
+        bcmos_timer_parm tp =
+        {
+            .name = "debug_ctrl_ack_timeout",
+            .owner = BCMOS_MODULE_ID_DEV_CTRL_DEV0 + i,
+            .periodic = BCMOS_FALSE,
+            .handler = bcmolt_debug_ctrl_handle_ack_timeout,
+            .data = (long)i,
+            .flags = BCMOS_TIMER_PARM_FLAGS_URGENT,
+        };
+
+        debug_ctrl[i].waiting_for_ack = BCMOS_FALSE;
+        bcmos_timer_create(&debug_ctrl[i].ack_timeout, &tp);
+#if HOST_API_CAPTURE
+        bcmolt_debug_api_common_init(i, &debug_ctrl[i].db);
+#endif
+    }
+}
diff --git a/bcm68620_release/release/host_driver/dev_ctrl/bcmolt_debug_ctrl.h b/bcm68620_release/release/host_driver/dev_ctrl/bcmolt_debug_ctrl.h
new file mode 100644
index 0000000..43991e9
--- /dev/null
+++ b/bcm68620_release/release/host_driver/dev_ctrl/bcmolt_debug_ctrl.h
@@ -0,0 +1,41 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef _BCMOLT_DEBUG_CTRL_H_
+#define _BCMOLT_DEBUG_CTRL_H_
+
+#include "bcmos_system.h"
+#include "bcmolt_msg.h"
+
+void bcmolt_debug_ctrl_process_msg(bcmolt_devid device, bcmolt_msg *msg, bcmos_bool connected);
+
+void bcmolt_debug_ctrl_init(void);
+
+#endif /* _BCMOLT_DEBUG_CTRL_H_ */
+
diff --git a/bcm68620_release/release/host_driver/dev_ctrl/bcmolt_dev_ctrl.c b/bcm68620_release/release/host_driver/dev_ctrl/bcmolt_dev_ctrl.c
new file mode 100644
index 0000000..2ddfa8d
--- /dev/null
+++ b/bcm68620_release/release/host_driver/dev_ctrl/bcmolt_dev_ctrl.c
@@ -0,0 +1,3158 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#include <bcmos_system.h>
+#include <bcm_config.h>
+#include <bcmolt_msg.h>
+#include <bcmolt_tr_mux.h>
+#include <bcmolt_api.h>
+#include <bcmolt_model_types.h>
+#include <bcmolt_model_ids.h>
+#include <bcmolt_host_sw_version.h>
+#include <bcmolt_model_revision.h>
+#include "bcmolt_dev_ctrl.h"
+#include "bcmtr_pcie.h"
+#include "bcmolt_llpcie.h"
+#include "bcm_dev_log.h"
+#include "bcmolt_utils.h"
+#include "bcmolt_firmware_envelope.h"
+#include "bcmolt_msg_pack.h"
+#include "bcmolt_mh_utils.h"
+#include "bcmolt_debug_ctrl.h"
+
+static bcmolt_dev_ctrl_params dev_ctrl_params;
+static dev_ctrl_database dev_ctrl_db[BCMTR_MAX_OLTS];
+static uint8_t *image_buf[BCMTR_MAX_OLTS];
+static uint8_t *rd_image_buf[BCMTR_MAX_OLTS];
+
+#define BCM_DEV_CTRL_RETURN_ON_ERROR(device, rc, fmt, args...)\
+    do\
+    {\
+        if (BCM_ERR_OK != rc)\
+        {\
+            BCM_LOG(ERROR, dev_ctrl_db[device].log_id, "%s: "fmt, bcmos_strerror(rc), ## args);\
+            return rc;\
+        }\
+    } while (0)
+
+#ifndef IN_BAND
+static bcmos_timer_rc dev_ctrl_boot_seq_timer_handler(bcmos_timer *timer, long data);
+static bcmos_timer_rc dev_ctrl_ddr_test_timer_handler(bcmos_timer *timer, long data);
+#endif
+
+const char *bcm_str_device_state(bcmolt_device_state device_state)
+{
+    static const char *strings[] =
+    {
+        [BCMOLT_DEVICE_STATE_DISCONNECTED] = "DISCONNECTED",
+        [BCMOLT_DEVICE_STATE_CONNECTING] = "CONNECTING",
+        [BCMOLT_DEVICE_STATE_READY] = "READY",
+        [BCMOLT_DEVICE_STATE_WAITING_FOR_DEVICE] = "WAITING_FOR_DEVICE",
+        [BCMOLT_DEVICE_STATE__NUM_OF] = "UNKNOWN"
+    };
+    return strings[device_state > BCMOLT_DEVICE_STATE__NUM_OF ? BCMOLT_DEVICE_STATE__NUM_OF : device_state];
+}
+
+const char *bcm_str_device_event(dev_ctrl_event device_event)
+{
+    static const char *strings[] =
+    {
+        [DEVICE_CONTROL_EVENT_DEVICE_CLEAR] = "DEVICE_CLEAR",
+        [DEVICE_CONTROL_EVENT_DEVICE_CONFIG_SET] = "DEVICE_CONFIG_SET",
+        [DEVICE_CONTROL_EVENT_DEVICE_CONFIG_GET] = "DEVICE_CONFIG_GET",
+        [DEVICE_CONTROL_EVENT_DEVICE_DISCONNECT] = "DEVICE_DISCONNECT",
+        [DEVICE_CONTROL_EVENT_DEVICE_TIMER_TIMEOUT] = "TIMER_TIMEOUT",
+        [DEVICE_CONTROL_EVENT_DEVICE_RECEIVED_ACK] = "RECEIVED_ACK",
+        [DEVICE_CONTROL_EVENT_DEVICE_CONNECT] = "DEVICE_CONNECT",
+        [DEVICE_CONTROL_EVENT_DEVICE_RESET] = "DEVICE_RESET",
+        [DEVICE_CONTROL_EVENT_CONNECTION_FAILURE] = "CONNECTION_FAILURE",
+        [DEVICE_CONTROL_EVENT_CONNECTION_ESTABLISHED] = "CONNECTION_ESTABLISHED",
+        [DEVICE_CONTROL_EVENT_DEVICE_READY] = "DEVICE_READY",
+        [DEVICE_CONTROL_EVENT_RUN_DDR_TEST] = "RUN_DDR_TEST",
+        [DEVICE_CONTROL_EVENT_DDR_TEST_COMPLETED] = "DDR_TEST_COMPLETED",
+        [DEVICE_CONTROL_EVENT_DDR_TEST_TIMEOUT] = "DDR_TEST_TIMEOUT",
+        [DEVICE_CONTROL_EVENT__NUM_OF] = "UNKNOWN"
+    };
+    return strings[device_event > DEVICE_CONTROL_EVENT__NUM_OF ? DEVICE_CONTROL_EVENT__NUM_OF : device_event];
+}
+
+#ifdef ENABLE_LOG
+static const char *bcm_str_auto_id(bcmolt_device_auto_id auto_id)
+{
+    static const char *strings[] =
+    {
+        [BCMOLT_DEVICE_AUTO_ID_DEVICE_READY] = "DEVICE_READY",
+        [BCMOLT_DEVICE_AUTO_ID_CONNECTION_ESTABLISHED] = "CONNECTION_ESTABLISHED",
+        [BCMOLT_DEVICE_AUTO_ID_DEVICE_KEEP_ALIVE] = "DEVICE_KEEP_ALIVE",
+        [BCMOLT_DEVICE_AUTO_ID_CONNECTION_FAILURE] = "CONNECTION_FAILURE",
+        [BCMOLT_DEVICE_AUTO_ID_CONNECTION_COMPLETE] = "CONNECTION_COMPLETE",
+        [BCMOLT_DEVICE_AUTO_ID_DISCONNECTION_COMPLETE] = "DISCONNECTION_COMPLETE",
+        [BCMOLT_DEVICE_AUTO_ID_SW_ERROR] = "SW_ERROR",
+        [BCMOLT_DEVICE_AUTO_ID__NUM_OF] = "UNKNOWN"
+    };
+    return strings[auto_id > BCMOLT_DEVICE_AUTO_ID__NUM_OF ? BCMOLT_DEVICE_AUTO_ID__NUM_OF : auto_id];
+}
+#endif
+
+const char *bcm_str_host_connection_fail_reason(bcmolt_host_connection_fail_reason reason)
+{
+    static const char *strings[] =
+    {
+        [BCMOLT_HOST_CONNECTION_FAIL_REASON_TIMEOUT] = "TIMEOUT",
+        [BCMOLT_HOST_CONNECTION_FAIL_REASON_KEEPALIVE] = "KEEPALIVE",
+        [BCMOLT_HOST_CONNECTION_FAIL_REASON_USER_CALLBACK_ERROR] = "USER_CALLBACK_ERROR",
+        [BCMOLT_HOST_CONNECTION_FAIL_REASON_SOFTWARE_VERSION_MISMATCH] = "SOFTWARE_VERSION_MISMATCH",
+        [BCMOLT_HOST_CONNECTION_FAIL_REASON_SYSTEM_MODE_MISMATCH] = "SYSTEM_MODE_MISMATCH",
+        [BCMOLT_HOST_CONNECTION_FAIL_REASON_NNI_SPEED_MISMATCH] = "NNI_SPEED_MISMATCH",
+        [BCMOLT_HOST_CONNECTION_FAIL_REASON_RECONNECT_TIMEOUT] = "RECONNECT_TIMEOUT",
+        [BCMOLT_HOST_CONNECTION_FAIL_REASON_INTERNAL_ERROR] = "INTERNAL_ERROR",
+        [BCMOLT_HOST_CONNECTION_FAIL_REASON_SYSTEM_MODE_NOT_SUPPORTED] = "SYSTEM_MODE_NOT_SUPPORTED",
+        [BCMOLT_HOST_CONNECTION_FAIL_REASON_PARAMETER] = "PARAMETER",
+        [BCMOLT_HOST_CONNECTION_FAIL_REASON__NUM_OF] = "UNKNOWN"
+    };
+    return strings[
+        reason > BCMOLT_HOST_CONNECTION_FAIL_REASON__NUM_OF ? BCMOLT_HOST_CONNECTION_FAIL_REASON__NUM_OF : reason];
+}
+
+const char *bcm_str_host_connecting_state(dev_ctrl_connecting_state state)
+{
+    static const char *strings[] =
+    {
+        [DEV_CTRL_CONNECTING_STATE_ESTABLISHING] = "ESTABLISHING",
+        [DEV_CTRL_CONNECTING_STATE_CONFIGURING] = "CONFIGURING",
+        [DEV_CTRL_CONNECTING_STATE_STANDALONE] = "STANDALONE"
+    };
+    return (state > DEV_CTRL_CONNECTING_STATE_STANDALONE) ? "UNKNOWN" : strings[state];
+}
+
+static inline bcmos_bool dev_ctrl_is_connected(bcmolt_device_state state)
+{
+    return (state == BCMOLT_DEVICE_STATE_READY || state == BCMOLT_DEVICE_STATE_WAITING_FOR_DEVICE);
+}
+
+void dev_ctrl_read_db(bcmolt_devid device, dev_ctrl_database *db)
+{
+    *db = dev_ctrl_db[device];
+}
+
+#ifndef IN_BAND
+#ifdef ENABLE_LOG
+static bcmos_errno dev_ctrl_get_dev_log(bcmolt_devid device, bcmolt_logger_cfg *msg)
+{
+    char *log_buf;
+    char *log_buf_copy;
+    int log_len;
+    int msg_len;
+    int i;
+    bcmos_errno rc;
+    bcm_dev_log_file log_file;
+    uint32_t msg_buf_offset;
+
+    if (msg->key.file_id != BCMOLT_LOG_FILE_ID_SRAM)
+    {
+        return bcmolt_msg_err(
+            &msg->hdr.hdr,
+            DEV_LOG_INVALID_ID,
+            BCM_ERR_KEY_RANGE,
+            BCMOLT_LOGGER_KEY_ID_FILE_ID,
+            "While disconnected, only the SRAM logger may be read");
+    }
+
+    if (BCMOLT_CFG_PROP_IS_SET(msg, logger, wrap_around))
+    {
+        return bcmolt_msg_err(
+            &msg->hdr.hdr,
+            DEV_LOG_INVALID_ID,
+            BCM_ERR_RANGE,
+            BCMOLT_LOGGER_CFG_ID_WRAP_AROUND,
+            "wrap_around cannot be retrieved while disconnected");
+    }
+
+    if (BCMOLT_CFG_PROP_IS_SET(msg, logger, enable_log))
+    {
+        return bcmolt_msg_err(
+            &msg->hdr.hdr,
+            DEV_LOG_INVALID_ID,
+            BCM_ERR_RANGE,
+            BCMOLT_LOGGER_CFG_ID_ENABLE_LOG,
+            "enable_log cannot be retrieved while disconnected");
+    }
+
+    if (BCMOLT_CFG_PROP_IS_SET(msg, logger, log_names))
+    {
+        return bcmolt_msg_err(
+            &msg->hdr.hdr,
+            DEV_LOG_INVALID_ID,
+            BCM_ERR_RANGE,
+            BCMOLT_LOGGER_CFG_ID_LOG_NAMES,
+            "log_names cannot be retrieved while disconnected");
+    }
+
+    if (!BCMOLT_CFG_PROP_IS_SET(msg, logger, buffer))
+    {
+        return BCM_ERR_OK; /* nothing to do */
+    }
+
+    if (dev_ctrl_db[device].fld_info.soc_sram_base == 0)
+    {
+        return bcmolt_msg_err(
+            &msg->hdr.hdr,
+            DEV_LOG_INVALID_ID,
+            BCM_ERR_STATE,
+            BCMOLT_LOGGER_CFG_ID_BUFFER,
+            "log buffer can only be retreived after initial device connection");
+    }
+
+    rc = bcm_fld_get_logs(device, &log_buf, &log_len);
+    BCM_DEV_CTRL_RETURN_ON_ERROR(device, rc, "bcm_fld_get_logs\n");
+
+    if (!log_len)
+        return BCM_ERR_OK;
+
+    /* Make a copy to avoid working over PCIe. Otherwise, the behavior can be unpredictable
+     * based on PCIe transaction size and controller configuration */
+    log_buf_copy = bcmos_alloc(log_len);
+    if (!log_buf_copy)
+        return BCM_ERR_NOMEM;
+
+    /* Copy byte by byte. Slow but works for any PCIe configuration */
+    for (i = 0; i < log_len; i++)
+        log_buf_copy[i] = log_buf[i];
+
+    msg->hdr.hdr.presence_mask |= (1 << BCMOLT_LOGGER_CFG_ID_BUFFER);
+
+    /* Attach log file to the buffer and read from the file */
+    rc = bcm_dev_log_file_attach(log_buf_copy, log_len, &log_file);
+
+    if (rc != BCM_ERR_OK || bcm_dev_log_get_num_of_messages(&log_file) == 0)
+    {
+        bcmos_free(log_buf_copy);
+        BCM_LOG(INFO, dev_ctrl_db[device].log_id, "SRAM log buffer is empty\n");
+        return BCM_ERR_OK;
+    }
+
+    /* copy all messages from SRAM to the API message buffer (stopping when buffer is full) */
+    msg_buf_offset = 0;
+    do
+    {
+        msg_len = bcm_dev_log_file_read(&log_file, &dev_ctrl_db[device].sram_log_offset,
+            &msg->data.buffer.buff[msg_buf_offset], sizeof(msg->data.buffer.buff)- msg_buf_offset - 1);
+        if (msg_len <= 0)
+            break;
+        ++dev_ctrl_db[device].msgs_read;
+        /* The last character is 0-terminator. Take it out */
+        msg_buf_offset += msg_len - 1;
+    } while (msg_buf_offset < sizeof(msg->data.buffer.buff) - 1);
+
+    /* terminate the string with a null character */
+    msg->data.buffer.buff[msg_buf_offset] = '\0';
+    if (msg_len == BCM_ERR_OVERFLOW)
+    {
+        /* More records to read */
+        msg->data.buffer.msg_to_read = bcm_dev_log_get_num_of_messages(&log_file) - dev_ctrl_db[device].msgs_read;
+    }
+    else
+    {
+        /* all done */
+        msg->data.buffer.msg_to_read = 0;
+        dev_ctrl_db[device].sram_log_offset = 0;
+        dev_ctrl_db[device].msgs_read = 0;
+    }
+
+    /* Detach file from buffer */
+    bcm_dev_log_file_detach(&log_file);
+
+    bcmos_free(log_buf_copy);
+
+    return BCM_ERR_OK;
+}
+#endif
+
+static bcmos_errno dev_ctrl_get_sw_error_table(bcmolt_devid device)
+{
+    bcmos_sw_error_table *sw_error_table;
+    uint8_t *sram;
+    uint8_t *local;
+    uint32_t size;
+    uint32_t i;
+
+    sram = bcm_fld_get_sw_error_table(device, &size);
+    local = bcmos_alloc(size);
+    for (i = 0; i < size; i++)
+    {
+        local[i] = sram[i];
+    }
+
+    sw_error_table = (bcmos_sw_error_table*)local;
+    dev_ctrl_db[device].sw_error_count = BCMOS_ENDIAN_LITTLE_TO_CPU_U32(sw_error_table->count);
+    if (dev_ctrl_db[device].sw_error_count > NUM_ELEM(dev_ctrl_db[device].sw_errors))
+    {
+        bcmos_free(local);
+        return BCM_ERR_OVERFLOW;
+    }
+
+    for (i = 0; i < dev_ctrl_db[device].sw_error_count; i++)
+    {
+        dev_ctrl_db[device].sw_errors[i].first_error_time_us =
+            BCMOS_ENDIAN_LITTLE_TO_CPU_U64(sw_error_table->error[i].first_error_time);
+        dev_ctrl_db[device].sw_errors[i].last_error_time_us =
+            BCMOS_ENDIAN_LITTLE_TO_CPU_U64(sw_error_table->error[i].last_error_time);
+        dev_ctrl_db[device].sw_errors[i].line_number =
+            BCMOS_ENDIAN_LITTLE_TO_CPU_U32(sw_error_table->error[i].line_number);
+        dev_ctrl_db[device].sw_errors[i].error_counter =
+            BCMOS_ENDIAN_LITTLE_TO_CPU_U32(sw_error_table->error[i].error_counter);
+        dev_ctrl_db[device].sw_errors[i].instance =
+            BCMOS_ENDIAN_LITTLE_TO_CPU_U32(sw_error_table->error[i].instance);
+        strncpy(
+            dev_ctrl_db[device].sw_errors[i].filename,
+            sw_error_table->error[i].file_name,
+            BCMOLT_SW_ERROR_MAX_FILE_NAME_LEN);
+        dev_ctrl_db[device].sw_errors[i].filename[BCMOLT_SW_ERROR_MAX_FILE_NAME_LEN-1] = 0;
+        strncpy(
+            dev_ctrl_db[device].sw_errors[i].task_name,
+            sw_error_table->error[i].task_name,
+            BCMOLT_SW_ERROR_MAX_TASK_NAME_LEN);
+        dev_ctrl_db[device].sw_errors[i].task_name[BCMOLT_SW_ERROR_MAX_TASK_NAME_LEN-1] = 0;
+    }
+
+    bcmos_free(local);
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_bool sw_error_key_valid(const bcmolt_software_error_key *key)
+{
+    bcmolt_devid device = (bcmolt_devid)bcmos_task_current()->parm.data;
+    return key->idx < dev_ctrl_db[device].sw_error_count;
+}
+
+static bcmos_errno mh_software_error_key_validate(bcmolt_msg *msg, const bcmolt_software_error_key *key)
+{
+    return sw_error_key_valid(key) ? BCM_ERR_OK : BCM_ERR_NOENT;
+}
+
+static bcmos_errno mh_software_error_cfg_get(
+    bcmolt_msg *msg,
+    const bcmolt_software_error_key *key,
+    bcmolt_software_error_cfg_data *data)
+{
+    bcmolt_devid device = (bcmolt_devid)bcmos_task_current()->parm.data;
+    bcmolt_presence_mask props = msg->presence_mask;
+    bcmos_errno rc = BCM_ERR_OK;
+
+    if (props == BCMOLT_PRESENCE_MASK_ALL)
+    { 
+        /* Convert from sentinel "all" presence bits to set of all valid bits*/
+        props = (1U << BCMOLT_SOFTWARE_ERROR_CFG_ID__NUM_OF) - 1;
+    }
+
+    if (BCMOLT_CFG_PROP_IS_SET((bcmolt_software_error_cfg*)msg, software_error, entry))
+    {
+        if (dev_ctrl_db[device].fld_info.soc_sram_base == 0)
+        {
+            return bcmolt_msg_err(
+                msg,
+                DEV_LOG_INVALID_ID,
+                BCM_ERR_STATE,
+                BCMOLT_SOFTWARE_ERROR_CFG_ID_ENTRY,
+                "Software errors can only be retreived after initial device connection");
+        }
+
+        data->entry = dev_ctrl_db[device].sw_errors[key->idx];
+        props &= ~BCMOLT_PROP_MASK_GET(software_error, _cfg, entry);
+    }
+
+    if (props != 0)
+    {
+        rc = bcmolt_msg_err(msg,
+            DEV_LOG_INVALID_ID,
+            BCM_ERR_NOT_SUPPORTED,
+            BCMOLT_ERR_FIELD_NONE,
+            "Unsupported properties: 0x%llx", (unsigned long long)props);
+    }
+
+    return rc;
+}
+
+static bcmos_errno mh_software_error_key_iterate(bcmolt_software_error_key *key)
+{
+    key->idx++;
+    return sw_error_key_valid(key) ? BCM_ERR_OK : BCM_ERR_NO_MORE;
+}
+
+static bcmos_errno mh_software_error_key_resolve_wildcards(bcmolt_software_error_key *key)
+{
+    return BCM_ERR_OK;
+}
+
+MH_DECLARE_CFG_GET_MULTI(software_error)
+
+static bcmos_errno dev_ctrl_sw_error_get(bcmolt_devid device, bcmolt_msg *msg)
+{
+    bcmolt_software_error_cfg *cfg = (bcmolt_software_error_cfg*)msg;
+    bcmos_errno err = dev_ctrl_get_sw_error_table(device);
+    if (err != BCM_ERR_OK)
+    {
+        return BCM_ERR_INTERNAL;
+    }
+
+    if (msg->type == BCMOLT_MSG_TYPE_GET)
+    {
+        bcmolt_software_error_key_id key_prop_id;
+        if (!bcmolt_software_error_key_bounds_check(&cfg->key, BCMOLT_PRESENCE_MASK_ALL, &key_prop_id))
+        {
+            msg->err_field_idx = (uint16_t) key_prop_id;
+            return BCM_ERR_KEY_RANGE;
+        }
+
+        err = mh_software_error_key_validate(msg, &cfg->key);
+        if (err != BCM_ERR_OK)
+        {
+            return err;
+        }
+
+        return mh_software_error_cfg_get(msg, &cfg->key, &cfg->data);
+    }
+    else if (msg->type == BCMOLT_MSG_TYPE_GET_MULTI)
+    {
+        return mh_software_error_cfg_get_multi(cfg, msg->msg_set->filter_flags, msg->msg_set);
+    }
+    else
+    {
+        BCM_LOG(ERROR, dev_ctrl_db[device].log_id, "Unexpected type 0x%x\n", msg->type);
+    }
+    return BCM_ERR_INTERNAL;
+}
+#endif
+
+static void dev_ctrl_send_indication(bcmolt_devid device, bcmolt_msg *msg)
+{
+    msg->subch = BCMTRMUX_CHANNEL_AUTO_PROXY;
+    msg->type = BCMOLT_MSG_TYPE_SET;
+    bcmtrmux_control_to_host(device, msg);
+}
+
+static void dev_ctrl_send_ind_connection_complete(bcmolt_devid device, bcmos_bool standalone)
+{
+    bcmolt_device_connection_complete ind = {};
+    BCM_LOG(INFO, dev_ctrl_db[device].log_id, "Connection complete: standalone=%s\n", standalone ? "yes" : "no");
+    BCMOLT_AUTO_INIT(&ind, device, connection_complete);
+    ind.data.standalone = standalone;
+    dev_ctrl_send_indication(device, &ind.hdr.hdr);
+}
+
+static void dev_ctrl_send_ind_disconnection_complete(bcmolt_devid device)
+{
+    bcmolt_device_disconnection_complete ind = {};
+    BCM_LOG(INFO, dev_ctrl_db[device].log_id, "Disconnection complete\n");
+    BCMOLT_AUTO_INIT(&ind, device, disconnection_complete);
+    dev_ctrl_send_indication(device, &ind.hdr.hdr);
+}
+
+static void dev_ctrl_send_ind_connection_failure(bcmolt_devid device, bcmolt_host_connection_fail_reason reason)
+{
+    bcmolt_device_connection_failure ind = {};
+    BCM_LOG(INFO, dev_ctrl_db[device].log_id, "Connection failure: %s\n", bcm_str_host_connection_fail_reason(reason));
+    BCMOLT_AUTO_INIT(&ind, device, connection_failure);
+    ind.data.reason = reason;
+    dev_ctrl_send_indication(device, &ind.hdr.hdr);
+    dev_ctrl_db[device].conn_fail_reason = reason; /* log the failure reason to the db. */
+}
+
+static void dev_ctrl_send_ind_connection_failure_from_msg(bcmolt_devid device, const bcmolt_msg *msg)
+{
+    BUG_ON(msg->subgroup != BCMOLT_DEVICE_AUTO_ID_CONNECTION_FAILURE);
+    dev_ctrl_send_ind_connection_failure(device, ((const bcmolt_device_connection_failure *)msg)->data.reason);
+}
+
+#ifndef IN_BAND
+static void dev_ctrl_send_ind_exception_log(bcmolt_devid device, uint32_t cpuid, const char *exception_buf)
+{
+    /* Because indication size is limited (but IND_MSG_MAX_SIZE > sizeof(bcmolt_str_2000.str), we may need to split into multiple indications.
+     * We use a static variable because our stack size is limited. */
+    static bcmolt_str_2000 api_exception_str;
+    const char *pos = exception_buf;
+    uint32_t remaining_len = strlen(pos);
+
+    while (remaining_len)
+    {
+        bcmolt_device_sw_exception ind = {};
+        uint32_t bytes_copied;
+
+        strncpy(api_exception_str.str, pos, sizeof(api_exception_str.str) - 1);
+        api_exception_str.str[sizeof(api_exception_str.str) - 1] = '\0';
+
+        BCMOLT_AUTO_INIT(&ind, device, sw_exception);
+        ind.data.cpu_id = cpuid;
+        ind.data.text = api_exception_str;
+        dev_ctrl_send_indication(device, &ind.hdr.hdr);
+
+        if (sizeof(api_exception_str.str) - 1 < remaining_len)
+        {
+            bytes_copied = sizeof(api_exception_str.str) - 1;
+        }
+        else
+        {
+            bytes_copied = remaining_len;
+        }
+        remaining_len -= bytes_copied;
+        pos += bytes_copied;
+    }
+}
+#endif
+
+static void dev_ctrl_send_config_set_msg(
+    bcmolt_devid device,
+    bcmolt_presence_mask mask,
+    uint16_t corr_tag,
+    const bcmolt_device_cfg_data *data)
+{
+    bcmolt_device_key key = {};
+    bcmolt_device_cfg cfg;
+    bcmos_errno rc;
+
+    BCMOLT_CFG_INIT(&cfg, device, key);
+    cfg.data = *data;
+    cfg.hdr.hdr.presence_mask = mask;
+
+    cfg.hdr.hdr.corr_tag = corr_tag;
+    cfg.hdr.hdr.type = BCMOLT_MSG_TYPE_SET;
+
+    rc = bcmtrmux_control_to_line(device, &cfg.hdr.hdr);
+    if (rc != BCM_ERR_OK)
+    {
+        BCM_LOG(ERROR, dev_ctrl_db[device].log_id,
+            "bcmtrmux_control_to_line of device config msg returned error %s (%d)\n",
+            bcmos_strerror(rc),
+            rc);
+    }
+}
+
+static void dev_ctrl_send_config_get_msg(bcmolt_devid device, bcmolt_presence_mask mask, uint16_t corr_tag)
+{
+    bcmolt_device_key key = {};
+    bcmolt_device_cfg cfg;
+    bcmos_errno rc;
+
+    BCMOLT_CFG_INIT(&cfg, device, key);
+    cfg.hdr.hdr.presence_mask = mask;
+
+    cfg.hdr.hdr.corr_tag = corr_tag;
+    cfg.hdr.hdr.type = BCMOLT_MSG_TYPE_GET;
+
+    rc = bcmtrmux_control_to_line(device, &cfg.hdr.hdr);
+    if (rc != BCM_ERR_OK)
+    {
+        BCM_LOG(ERROR, dev_ctrl_db[device].log_id,
+            "bcmtrmux_control_to_line of device config msg returned error %s (%d)\n",
+            bcmos_strerror(rc),
+            rc);
+    }
+}
+
+static void dev_ctrl_send_device_disconnect_msg(bcmolt_devid device, uint16_t corr_tag)
+{
+    bcmolt_device_key key = {};
+    bcmolt_device_disconnect oper;
+    bcmos_errno rc;
+
+    BCMOLT_OPER_INIT(&oper, device, disconnect, key);
+
+    oper.hdr.hdr.corr_tag = corr_tag;
+    oper.hdr.hdr.type = BCMOLT_MSG_TYPE_SET;
+    rc = bcmtrmux_control_to_line(device, &oper.hdr.hdr);
+    if (rc != BCM_ERR_OK)
+    {
+        BCM_LOG(ERROR, dev_ctrl_db[device].log_id,
+            "bcmtrmux_control_to_line of device disconnect operation returned error %s (%d)\n",
+            bcmos_strerror(rc),
+            rc);
+    }
+}
+
+/* Set all device object properties to default values. */
+static void dev_ctrl_clear_device_cfg(bcmolt_devid device)
+{
+    dev_ctrl_db[device].device_params_present = 0;
+
+    /* Pay attention: We use the interval and tolerance from dev_ctrl_db[device].ka_info and not from
+     * dev_ctrl_db[device].device_params. These parameters exist in dev_ctrl_db[device].device_params only because it is
+     * the data model representation. */
+    bcmolt_device_cfg_data_set_default(&dev_ctrl_db[device].device_params, BCMOLT_PRESENCE_MASK_ALL);
+    dev_ctrl_db[device].ka_info.ka_interval =
+        dev_ctrl_db[device].device_params.keepalive_interval * BCMOS_MICROSECONDS_IN_SECONDS;
+    dev_ctrl_db[device].ka_info.ka_tolerance = dev_ctrl_db[device].device_params.keepalive_tolerance;
+}
+
+static void dev_ctrl_init_connection_state(bcmolt_devid device)
+{
+    dev_ctrl_db[device].connection_info.config_send_counter = CONFIG_SEND_MAX_NUMBER;
+    dev_ctrl_db[device].connection_info.config_interval = DEVICE_CONTROL_CONFIG_TIME_US;
+}
+
+static bcmos_errno dev_ctrl_validate_cfg_set(bcmolt_devid device, bcmolt_msg *msg)
+{
+#ifndef IN_BAND
+    bcmos_errno rc;
+#endif
+    bcmolt_device_cfg *cfg = (bcmolt_device_cfg *)msg;
+    bcmolt_device_state state = dev_ctrl_db[device].device_params.state;
+    bcmolt_device_cfg_id failed_prop = BCMOLT_ERR_FIELD_NONE;
+
+    if (!bcmolt_device_cfg_data_bounds_check(&cfg->data, msg->presence_mask, &failed_prop))
+    {
+        msg->err_field_idx = (uint16_t)failed_prop;
+        return BCM_ERR_RANGE;
+    }
+
+#ifndef IN_BAND
+    if (BCMOLT_CFG_PROP_IS_SET(cfg, device, system_mode))
+    {
+        if (state != BCMOLT_DEVICE_STATE_DISCONNECTED)
+        {
+            return bcmolt_msg_err(
+                msg,
+                DEV_LOG_INVALID_ID,
+                BCM_ERR_STATE,
+                BCMOLT_DEVICE_CFG_ID_SYSTEM_MODE,
+                "System mode can only be changed while disconnected");
+        }
+
+        rc = dev_ctrl_params.system_mode_validate_cb(device, cfg->data.system_mode);
+        if (rc != BCM_ERR_OK)
+        {
+            return bcmolt_msg_err(
+                msg,
+                DEV_LOG_INVALID_ID,
+                rc,
+                BCMOLT_DEVICE_CFG_ID_SYSTEM_MODE,
+                "Given system mode is not supported for this board");
+        }
+    }
+#endif
+
+    if (BCMOLT_CFG_PROP_IS_SET(cfg, device, nni_speed) && state != BCMOLT_DEVICE_STATE_DISCONNECTED)
+    {
+        return bcmolt_msg_err(
+            msg,
+            DEV_LOG_INVALID_ID,
+            BCM_ERR_STATE,
+            BCMOLT_DEVICE_CFG_ID_NNI_SPEED,
+            "NNI speed can only be changed while disconnected");
+    }
+
+    if (BCMOLT_CFG_PROP_IS_SET(cfg, device, debug) && state != BCMOLT_DEVICE_STATE_DISCONNECTED)
+    {
+        return bcmolt_msg_err(
+            msg,
+            DEV_LOG_INVALID_ID,
+            BCM_ERR_STATE,
+            BCMOLT_DEVICE_CFG_ID_DEBUG,
+            "Debug parameters can only be changed while disconnected");
+    }
+
+    if (BCMOLT_CFG_PROP_IS_SET(cfg, device, firmware_sw_version) ||
+        BCMOLT_CFG_PROP_IS_SET(cfg, device, host_sw_version) ||
+        BCMOLT_CFG_PROP_IS_SET(cfg, device, chip_revision)||
+        BCMOLT_CFG_PROP_IS_SET(cfg, device, state)||
+        BCMOLT_CFG_PROP_IS_SET(cfg, device, chip_temperature)||
+        BCMOLT_CFG_PROP_IS_SET(cfg, device, chip_voltage))
+    {
+        return bcmolt_msg_err(
+            msg,
+            DEV_LOG_INVALID_ID,
+            BCM_ERR_STATE,
+            BCMOLT_ERR_FIELD_NONE,
+            "Cannot set read only fields");
+    }
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno dev_ctrl_validate_cfg_get(bcmolt_devid device, bcmolt_msg *msg)
+{
+    bcmolt_device_state state = dev_ctrl_db[device].device_params.state;
+    bcmolt_device_cfg *cfg = (bcmolt_device_cfg *)msg;
+
+    if (BCMOLT_CFG_PROP_IS_SET(cfg, device, firmware_sw_version) ||
+        BCMOLT_CFG_PROP_IS_SET(cfg, device, chip_revision) ||
+        BCMOLT_CFG_PROP_IS_SET(cfg, device, chip_temperature)||
+        BCMOLT_CFG_PROP_IS_SET(cfg, device, chip_voltage) ||
+        BCMOLT_CFG_PROP_IS_SET(cfg, device, epon_tod_string))
+    {
+        if (!dev_ctrl_is_connected(state))
+        {
+            return bcmolt_msg_err(
+                msg,
+                DEV_LOG_INVALID_ID,
+				BCM_ERR_STATE,
+                BCMOLT_ERR_FIELD_NONE,
+                "Cannot retrieve parameter while disconnected.");
+        }
+    }
+    if (BCMOLT_CFG_PROP_IS_SET(cfg, device, protection_switching_ext_irq))
+    {
+        if (!dev_ctrl_is_connected(state) &&
+            (dev_ctrl_db[device].device_params_present &
+            BCMOLT_PROP_MASK_GET(device, _cfg, protection_switching_ext_irq)) == 0)
+        {
+            return bcmolt_msg_err(
+                msg,
+                DEV_LOG_INVALID_ID,
+				BCM_ERR_STATE,
+                BCMOLT_DEVICE_CFG_ID_PROTECTION_SWITCHING_EXT_IRQ,
+                "Cannot retrieve protection_switching_ext_irq while disconnected and not having a cache.");
+        }
+    }
+    if (BCMOLT_CFG_PROP_IS_SET(cfg, device, epon_clock_transport_sample_delay))
+    {
+        if (!dev_ctrl_is_connected(state) &&
+            (dev_ctrl_db[device].device_params_present &
+            BCMOLT_PROP_MASK_GET(device, _cfg, epon_clock_transport_sample_delay)) == 0)
+        {
+            return bcmolt_msg_err(
+                msg,
+                DEV_LOG_INVALID_ID,
+				BCM_ERR_STATE,
+                BCMOLT_DEVICE_CFG_ID_EPON_CLOCK_TRANSPORT_SAMPLE_DELAY,
+                "Cannot retrieve epon_clock_transport_sample_delay while disconnected and not having a cache.");
+        }
+    }
+    if (BCMOLT_CFG_PROP_IS_SET(cfg, device, indication_shaping))
+    {
+        if (!dev_ctrl_is_connected(state) &&
+            (dev_ctrl_db[device].device_params_present & BCMOLT_PROP_MASK_GET(device, _cfg, indication_shaping)) == 0)
+        {
+            return bcmolt_msg_err(
+                msg,
+                DEV_LOG_INVALID_ID,
+				BCM_ERR_STATE,
+                BCMOLT_DEVICE_CFG_ID_INDICATION_SHAPING,
+                "Cannot retrieve indication_shaping while disconnected and not having a cache.");
+        }
+    }
+    if (BCMOLT_CFG_PROP_IS_SET(cfg, device, gpon_xgpon_tod_enable))
+    {
+        if (!dev_ctrl_is_connected(state) &&
+            (dev_ctrl_db[device].device_params_present &
+            BCMOLT_PROP_MASK_GET(device, _cfg, gpon_xgpon_tod_enable)) == 0)
+        {
+            return bcmolt_msg_err(
+                msg,
+                DEV_LOG_INVALID_ID,
+				BCM_ERR_STATE,
+                BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_ENABLE,
+                "Cannot retrieve gpon_xgpon_tod_enable while disconnected and not having a cache.");
+        }
+    }
+    if (BCMOLT_CFG_PROP_IS_SET(cfg, device, gpon_xgpon_tod_gpio_pin))
+    {
+        if (!dev_ctrl_is_connected(state) &&
+            (dev_ctrl_db[device].device_params_present &
+            BCMOLT_PROP_MASK_GET(device, _cfg, gpon_xgpon_tod_gpio_pin)) == 0)
+        {
+            return bcmolt_msg_err(
+                msg,
+                DEV_LOG_INVALID_ID,
+                BCM_ERR_STATE,
+                BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_GPIO_PIN,
+                "Cannot retrieve gpon_xgpon_tod_gpio_pin while disconnected and not having a cache.");
+        }
+    }
+    if (BCMOLT_CFG_PROP_IS_SET(cfg, device, gpon_xgpon_tod_connected_internally))
+    {
+        if (!dev_ctrl_is_connected(state) &&
+            (dev_ctrl_db[device].device_params_present &
+            BCMOLT_PROP_MASK_GET(device, _cfg, gpon_xgpon_tod_connected_internally)) == 0)
+        {
+            return bcmolt_msg_err(
+                msg,
+                DEV_LOG_INVALID_ID,
+				BCM_ERR_STATE,
+                BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_CONNECTED_INTERNALLY,
+                "Cannot retrieve gpon_xgpon_tod_connected_internally while disconnected and not having a cache.");
+        }
+    }
+    if (BCMOLT_CFG_PROP_IS_SET(cfg, device, epon_8021_as_tod_format))
+    {
+        if (!dev_ctrl_is_connected(state) &&
+            (dev_ctrl_db[device].device_params_present &
+            BCMOLT_PROP_MASK_GET(device, _cfg, epon_8021_as_tod_format)) == 0)
+        {
+            return bcmolt_msg_err(
+                msg,
+                DEV_LOG_INVALID_ID,
+				BCM_ERR_STATE,
+                BCMOLT_DEVICE_CFG_ID_EPON_8021_AS_TOD_FORMAT,
+                "Cannot retrieve epon_8021_as_tod_format while disconnected and not having a cache.");
+        }
+    }
+    if (BCMOLT_CFG_PROP_IS_SET(cfg, device, epon_shaper_mode))
+    {
+        if (!dev_ctrl_is_connected(state) &&
+            (dev_ctrl_db[device].device_params_present &
+            BCMOLT_PROP_MASK_GET(device, _cfg, epon_shaper_mode)) == 0)
+        {
+            return bcmolt_msg_err(
+                msg,
+                DEV_LOG_INVALID_ID,
+				BCM_ERR_STATE,
+                BCMOLT_DEVICE_CFG_ID_EPON_SHAPER_MODE,
+                "Cannot retrieve epon_shaper_mode while disconnected and not having a cache.");
+        }
+    }
+    if (BCMOLT_CFG_PROP_IS_SET(cfg, device, embedded_image_list))
+    {
+        if (!dev_ctrl_is_connected(state) &&
+            (dev_ctrl_db[device].device_params_present &
+            BCMOLT_PROP_MASK_GET(device, _cfg, embedded_image_list)) == 0)
+        {
+            return bcmolt_msg_err(
+                msg,
+                DEV_LOG_INVALID_ID,
+				BCM_ERR_STATE,
+                BCMOLT_DEVICE_CFG_ID_EMBEDDED_IMAGE_LIST,
+                "Cannot retrieve embedded_image_list while disconnected and not having a cache.");
+        }
+    }
+    if (BCMOLT_CFG_PROP_IS_SET(cfg, device, gpon_xgpon_tod_string_length))
+    {
+    	if (!dev_ctrl_is_connected(state) &&
+			(dev_ctrl_db[device].device_params_present &
+			BCMOLT_PROP_MASK_GET(device, _cfg, gpon_xgpon_tod_string_length)) == 0)
+    	{
+    		return bcmolt_msg_err(
+    			msg,
+				DEV_LOG_INVALID_ID,
+				BCM_ERR_STATE,
+				BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_STRING_LENGTH,
+				"Cannot retrieve gpon_xgpon_tod_string_length while disconnected and not having a cache.");
+    	}
+    }
+    if (BCMOLT_CFG_PROP_IS_SET(cfg, device, tod_uart_baudrate))
+    {
+    	if (!dev_ctrl_is_connected(state) &&
+    		(dev_ctrl_db[device].device_params_present &
+    		BCMOLT_PROP_MASK_GET(device, _cfg, tod_uart_baudrate)) == 0)
+    	{
+    		return bcmolt_msg_err(
+    			msg,
+				DEV_LOG_INVALID_ID,
+				BCM_ERR_STATE,
+				BCMOLT_DEVICE_CFG_ID_TOD_UART_BAUDRATE,
+				"Cannot retrieve tod_uart_baudrate while disconnected and not having a cache.");
+    	}
+    }
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno dev_ctrl_validate_cfg_clear(bcmolt_devid device, bcmolt_msg *msg)
+{
+    if (dev_ctrl_db[device].device_params.state != BCMOLT_DEVICE_STATE_DISCONNECTED)
+    {
+        return bcmolt_msg_err(
+            msg,
+            DEV_LOG_INVALID_ID,
+            BCM_ERR_STATE,
+            BCMOLT_ERR_FIELD_NONE,
+            "Device cfg_clear is only allowed while disconnected");
+    }
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno bcm_dev_ctrl_validate_oper_connect(bcmolt_devid device, bcmolt_msg *msg)
+{
+    bcmolt_device_state state = dev_ctrl_db[device].device_params.state;
+
+    if (dev_ctrl_is_connected(state))
+    {
+        return bcmolt_msg_err(msg, DEV_LOG_INVALID_ID, BCM_ERR_ALREADY, BCMOLT_ERR_FIELD_NONE, "already connected");
+    }
+
+    /* If not all mandatory properties are valid return "mandatory parameter is missing" */
+    if (dev_ctrl_db[device].device_params.system_mode >= BCMOLT_SYSTEM_MODE__NUM_OF)
+    {
+        BCM_LOG(INFO, dev_ctrl_db[device].log_id, "Cannot connect: system mode not included\n");
+        return bcmolt_msg_err(
+            msg,
+            DEV_LOG_INVALID_ID,
+            BCM_ERR_MANDATORY_PARM_IS_MISSING,
+            BCMOLT_DEVICE_CFG_ID_SYSTEM_MODE,
+            "System mode must be set before connecting");
+    }
+#ifdef IN_BAND
+    /* For In Band Management IP Address and UDP port must be set prior to connecting*/
+    /* If not all mandatory properties are valid return "mandatory parameter is missing" */
+    if (dev_ctrl_db[device].device_params.device_ip_address.u32 == 0)
+    {
+        BCM_LOG(INFO, dev_ctrl_db[device].log_id, "Cannot connect: must set IP Address port\n");
+        return bcmolt_msg_err(
+            msg,
+            DEV_LOG_INVALID_ID,
+            BCM_ERR_MANDATORY_PARM_IS_MISSING,
+            BCMOLT_DEVICE_CFG_ID_DEVICE_IP_ADDRESS,
+            "Device IP Address must be set before connecting");
+    }
+    if (dev_ctrl_db[device].device_params.device_udp_port == 0)
+    {
+        BCM_LOG(INFO, dev_ctrl_db[device].log_id, "Cannot connect: must set IP Address UDP port\n");
+        return bcmolt_msg_err(
+            msg,
+            DEV_LOG_INVALID_ID,
+            BCM_ERR_MANDATORY_PARM_IS_MISSING,
+            BCMOLT_DEVICE_CFG_ID_DEVICE_UDP_PORT,
+            "UDP port must be set before connecting");
+    }
+#endif
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno bcm_dev_ctrl_validate_oper_disconnect(bcmolt_devid device, bcmolt_msg *msg)
+{
+    bcmolt_device_state state = dev_ctrl_db[device].device_params.state;
+    if (state == BCMOLT_DEVICE_STATE_DISCONNECTED)
+    {
+        return bcmolt_msg_err(msg, DEV_LOG_INVALID_ID, BCM_ERR_ALREADY, BCMOLT_ERR_FIELD_NONE, "already disconnected");
+    }
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno bcm_dev_ctrl_validate_oper_run_ddr_test(bcmolt_devid device, bcmolt_msg *msg)
+{
+    bcmolt_device_run_ddr_test *ddr_test = (bcmolt_device_run_ddr_test*)msg;
+    bcmos_bool is_standalone;
+    bcmos_errno rc;
+
+    if (BCMOLT_DEVICE_STATE_DISCONNECTED != dev_ctrl_db[device].device_params.state)
+    {
+        return bcmolt_msg_err(
+            msg,
+            DEV_LOG_INVALID_ID,
+            BCM_ERR_STATE,
+            BCMOLT_ERR_FIELD_NONE,
+            "DDR test can only be run when disconnected");
+    }
+
+    if (dev_ctrl_db[device].is_host_reset_pending)
+    {
+        return bcmolt_msg_err(
+            msg,
+            DEV_LOG_INVALID_ID,
+            BCM_ERR_STATE,
+            BCMOLT_ERR_FIELD_NONE,
+            "Cannot run DDR test while host reset is pending");
+    }
+
+    /* Check if the chip is running in standalone mode */
+    rc = dev_ctrl_params.device_is_running_cb(device, &is_standalone);
+    if (rc != BCM_ERR_OK)
+    {
+        BCM_LOG(ERROR, dev_ctrl_db[device].log_id, "device_is_running_cb returned error: %s (%d)\n", bcmos_strerror(rc), rc);
+        return bcmolt_msg_err(
+            msg,
+            DEV_LOG_INVALID_ID,
+            rc,
+            BCMOLT_ERR_FIELD_NONE,
+            "Failed to retrieve device status");
+    }
+    if (is_standalone)
+    {
+        return bcmolt_msg_err(
+            msg,
+            DEV_LOG_INVALID_ID,
+            BCM_ERR_STATE,
+            BCMOLT_ERR_FIELD_NONE,
+            "Cannot run DDR test while device is running");
+    }
+
+    if (!ddr_test->data.cpu && !ddr_test->data.ras_0 && !ddr_test->data.ras_1)
+    {
+        return bcmolt_msg_err(
+            msg,
+            DEV_LOG_INVALID_ID,
+            BCM_ERR_STATE,
+            BCMOLT_ERR_FIELD_NONE,
+            "Must request at least one DDR Test");
+    }
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno dev_ctrl_validate_operation(bcmolt_devid device, bcmolt_msg *msg)
+{
+    bcmolt_device_state state = dev_ctrl_db[device].device_params.state;
+    if (state == BCMOLT_DEVICE_STATE_CONNECTING)
+    {
+        return bcmolt_msg_err(
+            msg,
+            DEV_LOG_INVALID_ID,
+            BCM_ERR_STATE,
+            BCMOLT_ERR_FIELD_NONE,
+            "Device operations are not allowed while connecting");
+    }
+    if (state == BCMOLT_DEVICE_STATE_TESTING_DDR)
+    {
+        return bcmolt_msg_err(
+            msg,
+            DEV_LOG_INVALID_ID,
+            BCM_ERR_STATE,
+            BCMOLT_ERR_FIELD_NONE,
+            "Device operations are not allowed while DDR test is in progress");
+    }
+
+    switch (msg->subgroup)
+    {
+    case BCMOLT_DEVICE_OPER_ID_CONNECT:
+        return bcm_dev_ctrl_validate_oper_connect(device, msg);
+    case BCMOLT_DEVICE_OPER_ID_DISCONNECT:
+        return bcm_dev_ctrl_validate_oper_disconnect(device, msg);
+    case BCMOLT_DEVICE_OPER_ID_RUN_DDR_TEST:
+        return bcm_dev_ctrl_validate_oper_run_ddr_test(device, msg);
+    default:
+        return BCM_ERR_OK;
+    }
+}
+
+static bcmos_errno dev_ctrl_validate_msg(bcmolt_devid device, bcmolt_msg *msg)
+{
+    if (dev_ctrl_db[device].device_params.state == BCMOLT_DEVICE_STATE_WAITING_FOR_DEVICE)
+    {
+        return bcmolt_msg_err(
+            msg,
+            DEV_LOG_INVALID_ID,
+            BCM_ERR_STATE,
+            BCMOLT_ERR_FIELD_NONE,
+            "The device object is busy processing another API request");
+    }
+
+    if (msg->group == BCMOLT_MGT_GROUP_CFG)
+    {
+        switch (msg->type)
+        {
+        case BCMOLT_MSG_TYPE_CLEAR:
+            return dev_ctrl_validate_cfg_clear(device, msg);
+        case BCMOLT_MSG_TYPE_SET:
+            return dev_ctrl_validate_cfg_set(device, msg);
+        case BCMOLT_MSG_TYPE_GET:
+            return dev_ctrl_validate_cfg_get(device, msg);
+        default:
+            break;
+        }
+    }
+
+    if (msg->group == BCMOLT_MGT_GROUP_OPER && msg->type == BCMOLT_MSG_TYPE_SET)
+    {
+        return dev_ctrl_validate_operation(device, msg);
+    }
+
+    return bcmolt_msg_err(
+        msg,
+        DEV_LOG_INVALID_ID,
+        BCM_ERR_INTERNAL,
+        BCMOLT_ERR_FIELD_NONE,
+        "Invalid message for device control");
+}
+
+static bcmolt_presence_mask dev_ctrl_fill_from_local(bcmolt_devid device)
+{
+    bcmolt_device_cfg *cfg = (bcmolt_device_cfg *)dev_ctrl_db[device].last_message;
+    bcmolt_presence_mask mask = dev_ctrl_db[device].last_message->presence_mask;
+
+    if (BCMOLT_CFG_PROP_IS_SET(cfg, device, system_mode))
+    {
+        cfg->data.system_mode = dev_ctrl_db[device].device_params.system_mode;
+        mask &= ~BCMOLT_PROP_MASK_GET(device, _cfg, system_mode);
+    }
+
+    if (BCMOLT_CFG_PROP_IS_SET(cfg, device, keepalive_interval))
+    {
+        cfg->data.keepalive_interval = dev_ctrl_db[device].ka_info.ka_interval / BCMOS_MICROSECONDS_IN_SECONDS;
+        mask &= ~BCMOLT_PROP_MASK_GET(device, _cfg, keepalive_interval);
+    }
+
+    if (BCMOLT_CFG_PROP_IS_SET(cfg, device, keepalive_tolerance))
+    {
+        cfg->data.keepalive_tolerance = dev_ctrl_db[device].ka_info.ka_tolerance;
+        mask &= ~BCMOLT_PROP_MASK_GET(device, _cfg, keepalive_tolerance);
+    }
+
+    if (BCMOLT_CFG_PROP_IS_SET(cfg, device, host_sw_version))
+    {
+        cfg->data.host_sw_version.major = BCMOLT_HOST_MAJOR_VER;
+        cfg->data.host_sw_version.minor = BCMOLT_HOST_MINOR_VER;
+        cfg->data.host_sw_version.revision = BCMOLT_HOST_REVISION_VER;
+        cfg->data.host_sw_version.model = BCMOLT_MODEL_REVISION;
+        snprintf(
+            cfg->data.host_sw_version.build_time,
+            sizeof(cfg->data.host_sw_version.build_time),
+            "%s %s",
+            __DATE__,
+            __TIME__);
+        mask &= ~BCMOLT_PROP_MASK_GET(device, _cfg, host_sw_version);
+    }
+
+    if (BCMOLT_CFG_PROP_IS_SET(cfg, device, state))
+    {
+        cfg->data.state = dev_ctrl_db[device].device_params.state;
+        mask &= ~BCMOLT_PROP_MASK_GET(device, _cfg, state);
+    }
+
+    if (BCMOLT_CFG_PROP_IS_SET(cfg, device, debug))
+    {
+        cfg->data.debug = dev_ctrl_db[device].device_params.debug;
+        mask &= ~BCMOLT_PROP_MASK_GET(device, _cfg, debug);
+    }
+
+    if (BCMOLT_CFG_PROP_IS_SET(cfg, device, nni_speed))
+    {
+        cfg->data.nni_speed = dev_ctrl_db[device].device_params.nni_speed;
+        mask &= ~BCMOLT_PROP_MASK_GET(device, _cfg, nni_speed);
+    }
+
+    if (BCMOLT_CFG_PROP_IS_SET(cfg, device, xgpon_num_of_onus))
+    {
+    	cfg->data.xgpon_num_of_onus = dev_ctrl_db[device].device_params.xgpon_num_of_onus;
+    	mask &= ~BCMOLT_PROP_MASK_GET(device, _cfg, xgpon_num_of_onus);
+    }
+
+    return mask;
+}
+
+static void dev_ctrl_update_local_configuration(bcmolt_devid device, const bcmolt_msg *msg)
+{
+    const bcmolt_device_cfg *cfg = (const bcmolt_device_cfg *)msg;
+
+    dev_ctrl_db[device].device_params_present |= msg->presence_mask;
+
+    if (BCMOLT_CFG_PROP_IS_SET(cfg, device, system_mode))
+    {
+        dev_ctrl_db[device].device_params.system_mode = cfg->data.system_mode;
+    }
+    if (BCMOLT_CFG_PROP_IS_SET(cfg, device, debug))
+    {
+        dev_ctrl_db[device].device_params.debug = cfg->data.debug;
+    }
+    if (BCMOLT_CFG_PROP_IS_SET(cfg, device, nni_speed))
+    {
+        dev_ctrl_db[device].device_params.nni_speed = cfg->data.nni_speed;
+    }
+    if (BCMOLT_CFG_PROP_IS_SET(cfg, device, keepalive_interval))
+    {
+        dev_ctrl_db[device].ka_info.ka_interval = (cfg->data.keepalive_interval * BCMOS_MICROSECONDS_IN_SECONDS);
+        dev_ctrl_db[device].device_params.keepalive_interval = cfg->data.keepalive_interval;
+    }
+    if (BCMOLT_CFG_PROP_IS_SET(cfg, device, keepalive_tolerance))
+    {
+        dev_ctrl_db[device].ka_info.ka_tolerance = cfg->data.keepalive_tolerance;
+        dev_ctrl_db[device].device_params.keepalive_tolerance = cfg->data.keepalive_tolerance;
+    }
+    if (BCMOLT_CFG_PROP_IS_SET(cfg, device, protection_switching_ext_irq))
+    {
+        dev_ctrl_db[device].device_params.protection_switching_ext_irq = cfg->data.protection_switching_ext_irq;
+    }
+    if (BCMOLT_CFG_PROP_IS_SET(cfg, device, epon_clock_transport_sample_delay))
+    {
+        dev_ctrl_db[device].device_params.epon_clock_transport_sample_delay =
+            cfg->data.epon_clock_transport_sample_delay;
+    }
+    if (BCMOLT_CFG_PROP_IS_SET(cfg, device, indication_shaping))
+    {
+        dev_ctrl_db[device].device_params.indication_shaping = cfg->data.indication_shaping;
+    }
+    if (BCMOLT_CFG_PROP_IS_SET(cfg, device, gpon_xgpon_tod_enable))
+    {
+        dev_ctrl_db[device].device_params.gpon_xgpon_tod_enable = cfg->data.gpon_xgpon_tod_enable;
+    }
+    if (BCMOLT_CFG_PROP_IS_SET(cfg, device, gpon_xgpon_tod_gpio_pin))
+    {
+        dev_ctrl_db[device].device_params.gpon_xgpon_tod_gpio_pin = cfg->data.gpon_xgpon_tod_gpio_pin;
+    }
+    if (BCMOLT_CFG_PROP_IS_SET(cfg, device, gpon_xgpon_tod_connected_internally))
+    {
+        dev_ctrl_db[device].device_params.gpon_xgpon_tod_connected_internally = cfg->data.gpon_xgpon_tod_connected_internally;
+    }
+    if (BCMOLT_CFG_PROP_IS_SET(cfg, device, epon_shaper_mode))
+    {
+        dev_ctrl_db[device].device_params.epon_shaper_mode = cfg->data.epon_shaper_mode;
+    }
+    if (BCMOLT_CFG_PROP_IS_SET(cfg, device, embedded_image_list))
+    {
+        dev_ctrl_db[device].device_params.embedded_image_list = cfg->data.embedded_image_list;
+    }
+    if (BCMOLT_CFG_PROP_IS_SET(cfg, device, xgpon_num_of_onus))
+    {
+    	dev_ctrl_db[device].device_params.xgpon_num_of_onus = cfg->data.xgpon_num_of_onus;
+    }
+    if (BCMOLT_CFG_PROP_IS_SET(cfg, device, device_ip_address))
+    {
+        dev_ctrl_db[device].device_params.device_ip_address = cfg->data.device_ip_address;
+    }
+    if (BCMOLT_CFG_PROP_IS_SET(cfg, device, device_udp_port))
+    {
+        dev_ctrl_db[device].device_params.device_udp_port = cfg->data.device_udp_port;
+    }
+    if (BCMOLT_CFG_PROP_IS_SET(cfg, device, gpon_xgpon_tod_string_length))
+    {
+    	dev_ctrl_db[device].device_params.gpon_xgpon_tod_string_length = cfg->data.gpon_xgpon_tod_string_length;
+    }
+    if (BCMOLT_CFG_PROP_IS_SET(cfg, device, tod_uart_baudrate))
+    {
+    	dev_ctrl_db[device].device_params.tod_uart_baudrate = cfg->data.tod_uart_baudrate;
+    }
+}
+
+static bcmos_errno dev_ctrl_validate_fw_version(bcmolt_devid device, const bcmolt_firmware_sw_version *version)
+{
+    BCM_LOG(INFO, dev_ctrl_db[device].log_id,
+        "Firmware SW version %u.%u.%u (Object model revision %u, Build time: %s)\n",
+        version->major,
+        version->minor,
+        version->revision,
+        version->model,
+        version->build_time);
+
+    BCM_LOG(INFO, dev_ctrl_db[device].log_id,
+        "Host SW version %u.%u.%u (Object model revision %u, Build time: %s %s)\n",
+        BCMOLT_HOST_MAJOR_VER,
+        BCMOLT_HOST_MINOR_VER,
+        BCMOLT_HOST_REVISION_VER,
+        BCMOLT_MODEL_REVISION,
+        __DATE__,
+        __TIME__);
+
+    /* Version mismatch - note that only the Host/Firmware revisions can be different between the host and the firmware */
+    if (version->major != BCMOLT_HOST_MAJOR_VER ||
+        version->minor != BCMOLT_HOST_MINOR_VER ||
+        version->model != BCMOLT_MODEL_REVISION)
+    {
+        BCM_LOG(INFO, dev_ctrl_db[device].log_id,
+            "SW Versions Mismatch: Host SW version is %u.%u.%u with object model revision %d, while Firmware SW version is %u.%u.%u with object model revision %u\n",
+            BCMOLT_HOST_MAJOR_VER,
+            BCMOLT_HOST_MINOR_VER,
+            BCMOLT_HOST_REVISION_VER,
+            BCMOLT_MODEL_REVISION,
+            version->major,
+            version->minor,
+            version->revision,
+            version->model);
+        return BCM_ERR_STATE;
+    }
+    return BCM_ERR_OK;
+}
+
+#ifndef IN_BAND
+static bcmos_errno dev_ctrl_register_fld(bcmolt_devid device)
+{
+    bcmos_errno rc;
+    bcm_ll_dev_info ll_info;
+
+    if (dev_ctrl_db[device].fld_info.soc_sram_base > 0)
+    {
+        /* we have already queried the PCIe / registered with the FLD */
+        return BCM_ERR_OK;
+    }
+
+    rc = bcm_ll_pcie_query(device, &ll_info);
+    BCM_DEV_CTRL_RETURN_ON_ERROR(device, rc, "bcm_ll_pcie_query\n");
+    dev_ctrl_db[device].fld_info.soc_ddr_length = ll_info.soc_ddr_length;
+    dev_ctrl_db[device].fld_info.soc_sram_base = ll_info.soc_sram_base;
+    dev_ctrl_db[device].fld_info.soc_ddr_base = ll_info.soc_ddr_base;
+    dev_ctrl_db[device].fld_info.soc_regs_base = ll_info.soc_regs_base;
+
+    BCM_LOG(INFO, dev_ctrl_db[device].log_id,
+        "FLD_INFO: ddr_length=0x%x sram_base=%p soc_ddr_base=%p soc_regs_base=%p\n",
+        dev_ctrl_db[device].fld_info.soc_ddr_length,
+        (void *)dev_ctrl_db[device].fld_info.soc_sram_base,
+        (void *)dev_ctrl_db[device].fld_info.soc_ddr_base,
+        (void *)dev_ctrl_db[device].fld_info.soc_regs_base);
+
+    rc = bcm_fld_register(device, &dev_ctrl_db[device].fld_info);
+    BCM_DEV_CTRL_RETURN_ON_ERROR(device, rc, "bcm_fld_register\n");
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno dev_ctrl_handle_file(bcmolt_devid device, bcmolt_device_image_type image_type)
+{
+    int32_t read_len;
+    BCM_FLD_HOST_DEBUG_VALUES host_debug_value;
+    bcmos_errno rc;
+    uint32_t offset_r = 0, offset_w = 0;
+    volatile unsigned long write_complete[2];
+    const char *image_name;
+
+    BUG_ON((image_type != BCMOLT_DEVICE_IMAGE_TYPE_BOOTLOADER) && (image_type != BCMOLT_DEVICE_IMAGE_TYPE_APPLICATION));
+
+    image_name = image_type == BCMOLT_DEVICE_IMAGE_TYPE_APPLICATION ? "application" : "boot loader";
+
+    BCM_LOG(INFO, dev_ctrl_db[device].log_id, "Loading %s\n", image_name);
+
+    host_debug_value = image_type == BCMOLT_DEVICE_IMAGE_TYPE_APPLICATION ? BCM_FLD_HOST_WRITE_DDR : BCM_FLD_HOST_WRITE_SRAM;
+    rc = bcm_fld_set_host_debug_status(device, host_debug_value);
+    BCM_DEV_CTRL_RETURN_ON_ERROR(device, rc, "bcm_fld_set_host_debug_status\n");
+
+    /* If this is the application image, skip the envelope (jump to the data itself). */
+    if (image_type == BCMOLT_DEVICE_IMAGE_TYPE_APPLICATION)
+    {
+        bcmolt_firmware_envelope envelope;
+
+        read_len = dev_ctrl_params.image_read_cb(device, image_type, offset_r, (uint8_t *)&envelope, sizeof(envelope));
+        if (read_len < sizeof(envelope))
+        {
+            BCM_LOG(ERROR, dev_ctrl_db[device].log_id, "image_read_cb returned error %s (%d)\n", bcmos_strerror(rc), rc);
+            return rc;
+        }
+        BCM_LOG(INFO, dev_ctrl_db[device].log_id, "Upload firmware version=%u.%u.%u.%u\n",
+            envelope.revision.release_major_id, envelope.revision.release_minor_id, envelope.revision.release_revision_id, envelope.revision.model_id);
+        offset_r += read_len;
+    }
+
+    do
+    {
+        read_len = dev_ctrl_params.image_read_cb(device, image_type, offset_r, image_buf[device], IMAGE_BUF_SIZE);
+        if (read_len < 0)
+        {
+            BCM_LOG(ERROR, dev_ctrl_db[device].log_id, "image_read_cb returned error %s (%d)\n", bcmos_strerror(rc), rc);
+            return rc;
+        }
+
+        if (!read_len)
+            break;
+
+        BCM_LOG(INFO, dev_ctrl_db[device].log_id, "Writing %s (%d)\n", image_name, read_len);
+        rc = bcm_fld_write(device, (char *)image_buf[device], read_len, offset_w, image_type);
+        if (rc != BCM_ERR_OK)
+        {
+            BCM_LOG(ERROR, dev_ctrl_db[device].log_id, "bcm_fld_write returned error %s (%d)\n", bcmos_strerror(rc), rc);
+            return rc;
+        }
+
+        BCM_LOG(INFO, dev_ctrl_db[device].log_id, "Reading %s for checking (%d)\n", image_name, read_len);
+        rc = bcm_fld_read(device, (char *)rd_image_buf[device], (uint32_t *)&read_len, offset_w, image_type);
+        if (rc != BCM_ERR_OK)
+        {
+            BCM_LOG(ERROR, dev_ctrl_db[device].log_id, "bcm_fld_read returned error %s (%d)\n", bcmos_strerror(rc), rc);
+            return rc;
+        }
+
+        offset_r += read_len;
+        offset_w += read_len;
+
+        BCM_LOG(INFO, dev_ctrl_db[device].log_id, "Comparing %s (%d)/(%u)\n", image_name, read_len, offset_w);
+        if (memcmp(rd_image_buf[device], image_buf[device], read_len))
+        {
+            BCM_LOG(ERROR, dev_ctrl_db[device].log_id, "Error during image uploading  %x\n", offset_w);
+            return BCM_ERR_INTERNAL;
+        }
+    } while (read_len);
+
+    if (!offset_w)
+    {
+        BCM_LOG(ERROR, dev_ctrl_db[device].log_id, "%s image file empty or corrupted!!!\n", image_name);
+        return BCM_ERR_INTERNAL;
+    }
+
+    if (image_type == BCMOLT_DEVICE_IMAGE_TYPE_APPLICATION)
+    {
+        read_len = sizeof(unsigned long);
+        /* first read word from star of the image */
+        bcm_fld_read(device, (char *)(long)&write_complete[0], (uint32_t *)&read_len, 0, image_type);
+        /* sync before read tail of image */
+        bcmos_barrier();
+        /* read from tail of the image */
+        bcm_fld_read(
+            device,
+            (char *)(long)&write_complete[1],
+            (uint32_t *)&read_len,
+            offset_w - sizeof(unsigned long),
+            image_type);
+        /* now we can be sure that full image in the embedded memory */
+    }
+
+    BCM_LOG(INFO, dev_ctrl_db[device].log_id, "Transferred %u bytes\n", offset_w);
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno dev_ctrl_handle_application_image(bcmolt_devid device)
+{
+    bcmolt_device_cfg_data *dev_params = &dev_ctrl_db[device].device_params;
+    bcmos_errno rc = BCM_ERR_OK;
+
+    rc = dev_ctrl_handle_file(device, BCMOLT_DEVICE_IMAGE_TYPE_APPLICATION);
+    BCM_DEV_CTRL_RETURN_ON_ERROR(device, rc, "dev_ctrl_handle_file()\n");
+    rc = bcm_fld_host_finish_write_ddr(device, 0);
+    BCM_DEV_CTRL_RETURN_ON_ERROR(device, rc, "bcm_fld_host_finish_write_ddr()\n");
+    rc = bcmtrmux_connect(device, dev_params->debug.host_dma_tx_queue_size, dev_params->debug.host_dma_rx_queue_size);
+    BCM_DEV_CTRL_RETURN_ON_ERROR(device, rc, "bcmtrmux_connect()\n");
+    /* We want that in case ONLY the host is reset, Maple enters standalone mode - this means we need to turn off "hot reset" on the PCIe channel. */
+    rc = bcm_ll_pcie_host_reset_enable(device,BCMOS_FALSE);
+    BCM_DEV_CTRL_RETURN_ON_ERROR(device, rc, "bcm_ll_pcie_host_reset_enable()\n");
+
+    return rc;
+}
+
+static bcmos_errno dev_ctrl_handle_bootloader_image(bcmolt_devid device, uint32_t test_ddr)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+
+    rc = dev_ctrl_handle_file(device, BCMOLT_DEVICE_IMAGE_TYPE_BOOTLOADER);
+    BCM_DEV_CTRL_RETURN_ON_ERROR(device, rc, "dev_ctrl_handle_file()\n");
+    rc = bcm_fld_start_bootloader(device, test_ddr);
+    BCM_DEV_CTRL_RETURN_ON_ERROR(device, rc, "bcm_fld_start_bootloader()\n");
+    bcmos_timer_start(
+        &dev_ctrl_db[device].boot_seq_info.timer.timer,
+        dev_ctrl_db[device].boot_seq_info.polling_interval);
+
+    return rc;
+}
+
+static bcmos_errno dev_ctrl_start_fld(bcmolt_devid device, uint32_t test_ddr)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+
+    bcm_fld_clear_comm_area(device);
+
+    rc = dev_ctrl_handle_bootloader_image(device, test_ddr);
+    BCM_DEV_CTRL_RETURN_ON_ERROR(device, rc, "dev_ctrl_handle_bootloader_image\n");
+
+    return rc;
+}
+
+static bcmos_errno dev_ctrl_get_exception_log_by_cpu(bcmolt_devid device, uint32_t cpuid)
+{
+    char *exception_buf;
+    int exception_buf_len;
+    bcmos_errno rc;
+
+    exception_buf = bcmos_alloc(BCM_FLD_CPU_POSTMORTEM_BUF_SIZE);
+    rc = bcm_fld_copy_exception_log(device, cpuid, exception_buf, &exception_buf_len);
+    if (rc)
+    {
+        BCM_LOG(ERROR, dev_ctrl_db[device].log_id, "bcm_fld_copy_exception_log failed, rc=%u (%s)\n", rc, bcmos_strerror(rc));
+        goto exit;
+    }
+    bcm_fld_clear_exception_state(device, cpuid);
+
+    dev_ctrl_send_ind_exception_log(device, cpuid, exception_buf);
+    rc = BCM_ERR_OK;
+
+exit:
+    bcmos_free(exception_buf);
+    return rc;
+}
+
+/** Dump exception log if there is one, return BCM_ERR_NOENT if not. */
+static bcmos_errno dev_ctrl_get_exception_log_if_present(bcmolt_devid dev_id)
+{
+    bcmos_errno rc;
+    uint32_t state0, state1;
+
+    /* Dump exception log, if any.
+     * This should be done prior to writing bootloader, as it will overwrite the same place in SRAM. */
+    rc = bcm_fld_get_exception_state(dev_id, &state0, &state1);
+    BCM_DEV_CTRL_RETURN_ON_ERROR(dev_id, rc, "bcm_fld_get_exception_state\n");
+    if (state0)
+        dev_ctrl_get_exception_log_by_cpu(dev_id, 0);
+    if (state1)
+        dev_ctrl_get_exception_log_by_cpu(dev_id, 1);
+    if (!state0 && !state1)
+        return BCM_ERR_NOENT;
+
+    return BCM_ERR_OK;
+}
+
+/** Dump exception log if there is one, print a message and return BCM_ERR_OK if not. */
+static bcmos_errno dev_ctrl_get_exception_log(bcmolt_devid dev_id)
+{
+    bcmos_errno rc = dev_ctrl_get_exception_log_if_present(dev_id);
+    if (rc == BCM_ERR_NOENT)
+    {
+        BCM_LOG(DEBUG, dev_ctrl_db[dev_id].log_id, "Exception log for device %d is empty\n", dev_id);
+        rc = BCM_ERR_OK;
+    }
+    return rc;
+}
+
+static void dev_ctrl_sw_error_table_dump(bcmolt_devid dev_id)
+{
+    bcmos_errno err = dev_ctrl_get_sw_error_table(dev_id);
+    uint8_t i;
+
+    if (BCM_ERR_OK != err)
+    {
+        BCM_LOG(INFO, dev_ctrl_db[dev_id].log_id, "Failed to retrieve Embedded Software Error(s): %d\n", err);
+    }
+    else
+    {
+        BCM_LOG(INFO, dev_ctrl_db[dev_id].log_id, "Found %u Embedded Software Error(s):\n", dev_ctrl_db[dev_id].sw_error_count);
+        for (i = 0; i < dev_ctrl_db[dev_id].sw_error_count; i++)
+        {
+            BCM_LOG(INFO, dev_ctrl_db[dev_id].log_id,
+                "\t[%s] %s:%u inst:%u count:%u first:%llu last:%llu\n",
+                dev_ctrl_db[dev_id].sw_errors[i].task_name,
+                dev_ctrl_db[dev_id].sw_errors[i].filename,
+                dev_ctrl_db[dev_id].sw_errors[i].line_number,
+                dev_ctrl_db[dev_id].sw_errors[i].instance,
+                dev_ctrl_db[dev_id].sw_errors[i].error_counter,
+                (unsigned long long)dev_ctrl_db[dev_id].sw_errors[i].first_error_time_us,
+                (unsigned long long)dev_ctrl_db[dev_id].sw_errors[i].last_error_time_us);
+        }
+    }
+}
+#endif
+
+static bcmolt_host_connection_fail_reason dev_ctrl_connect_from_reset(bcmolt_devid device, uint32_t test_ddr)
+{
+#ifndef IN_BAND
+    bcmos_errno rc;
+
+    rc = dev_ctrl_params.device_on_cb(device);
+    BCMOS_TRACE_CHECK_RETURN(
+        rc != BCM_ERR_OK,
+        BCMOLT_HOST_CONNECTION_FAIL_REASON_USER_CALLBACK_ERROR,
+        "device_on_cb\n");
+
+    rc = dev_ctrl_params.pcie_channel_prepare_cb(device);
+    BCMOS_TRACE_CHECK_RETURN(
+        rc != BCM_ERR_OK,
+        BCMOLT_HOST_CONNECTION_FAIL_REASON_USER_CALLBACK_ERROR,
+        "pcie_channel_prepare_cb\n");
+
+
+    rc = dev_ctrl_register_fld(device);
+    BCMOS_TRACE_CHECK_RETURN(
+        rc != BCM_ERR_OK,
+        BCMOLT_HOST_CONNECTION_FAIL_REASON_INTERNAL_ERROR,
+        "dev_ctrl_register_fld\n");
+
+    dev_ctrl_get_exception_log(device);
+    dev_ctrl_sw_error_table_dump(device);
+
+#ifndef SIMULATION_BUILD
+    bcm_fld_set_host_event(device, dev_ctrl_db[device].trx_disable_mask);
+#endif
+    rc = dev_ctrl_start_fld(device, test_ddr);
+    BCMOS_TRACE_CHECK_RETURN(
+        rc != BCM_ERR_OK,
+        BCMOLT_HOST_CONNECTION_FAIL_REASON_INTERNAL_ERROR,
+        "dev_ctrl_start_fld\n");
+#endif
+    return BCMOLT_HOST_CONNECTION_FAIL_REASON_NONE;
+}
+
+static bcmolt_host_connection_fail_reason dev_ctrl_connect_to_standalone(bcmolt_devid device)
+{
+    bcmos_errno rc;
+
+    /* if Maple runs in standalone mode, and host did reset, we need to register maple to fld and and
+       reconnect the transport layer - no need to rescan, it was done automatically by host when
+       ll_pcie registered maple
+       re-scan without passing thru remove and maple off, lets maple out of reset, remapped, but stucked
+       not, really, working in standaloane mode
+       */
+
+    /* The chip is running and the PCIe channel hardware is initialized, we can now safely:
+     * - Register with the FLD driver.
+     * - Restart the PCIe connection process.  As part of this process, the host will set the 'host queues valid' flag.
+     *   If the device is running and sees this flag is set, it will start the reconnection process as well, in sync
+     *   with the host.  If the device fails to connect, it means that the device is unresponsive, so the best we can do
+     *   is reset the device and reprogram it from scratch. */
+#ifndef IN_BAND
+    rc = dev_ctrl_register_fld(device);
+    BCMOS_TRACE_CHECK_RETURN(
+        rc != BCM_ERR_OK,
+        BCMOLT_HOST_CONNECTION_FAIL_REASON_INTERNAL_ERROR,
+        "dev_ctrl_register_fld\n");
+
+    dev_ctrl_get_exception_log(device);
+
+#ifndef SIMULATION_BUILD
+    bcm_fld_set_host_event(device, dev_ctrl_db[device].trx_disable_mask);
+#endif
+#endif
+
+    BCM_LOG(INFO, dev_ctrl_db[device].log_id, "Requesting re-connect to running device...\n");
+#ifndef IN_BAND
+    rc = bcmtrmux_connect(
+        device,
+        dev_ctrl_db[device].device_params.debug.host_dma_tx_queue_size,
+        dev_ctrl_db[device].device_params.debug.host_dma_rx_queue_size); 
+#else
+     /*Need to pass in IP Address and UDP port when running in linux user space*/
+    rc = bcmtrmux_connect(device,
+          dev_ctrl_db[device].device_params.device_ip_address,
+          dev_ctrl_db[device].device_params.device_udp_port);
+
+#endif
+
+    if (rc == BCM_ERR_OK)
+    {
+        dev_ctrl_db[device].connection_info.state = DEV_CTRL_CONNECTING_STATE_STANDALONE;
+        return BCMOLT_HOST_CONNECTION_FAIL_REASON_NONE;
+    }
+    else
+    {
+        BCM_LOG(INFO, dev_ctrl_db[device].log_id, "Connection failed - running device didn't respond to connection request\n");
+        return BCMOLT_HOST_CONNECTION_FAIL_REASON_RECONNECT_TIMEOUT;
+    }
+}
+
+static void dev_ctrl_disconnect(bcmolt_devid device)
+{
+    bcmos_errno rc;
+
+    dev_ctrl_db[device].device_params.state = BCMOLT_DEVICE_STATE_DISCONNECTED;
+#ifdef ENABLE_LOG
+    dev_ctrl_db[device].sram_log_offset = 0;
+    dev_ctrl_db[device].msgs_read = 0;
+#endif
+    stop_keep_alive_process(&dev_ctrl_db[device].ka_info);
+    bcmos_timer_stop(&dev_ctrl_db[device].exception_monitor_timer.timer);
+    dev_ctrl_init_connection_state(device);
+    rc = bcmtrmux_disconnect(device);
+    if (rc != BCM_ERR_OK && rc != BCM_ERR_ALREADY)
+    {
+        BCM_LOG(ERROR, dev_ctrl_db[device].log_id, "bcmtrmux_disconnect returned error: %s (%d)\n", bcmos_strerror(rc), rc);
+    }
+}
+
+static bcmos_errno dev_ctrl_perform_reset_device(bcmolt_devid device)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+
+    dev_ctrl_disconnect(device);
+
+#ifndef IN_BAND
+    rc = dev_ctrl_params.pcie_channel_remove_cb(device);
+    if (rc != BCM_ERR_OK)
+    {
+        BCM_LOG(ERROR, dev_ctrl_db[device].log_id, "Device remove callback failed: %s (%d)\n", bcmos_strerror(rc), rc);
+    }
+    rc = dev_ctrl_params.device_off_cb(device);
+    if (rc != BCM_ERR_OK)
+    {
+        BCM_LOG(ERROR, dev_ctrl_db[device].log_id, "Device off callback failed: %s (%d)\n", bcmos_strerror(rc), rc);
+    }
+
+    /* the device has been reset so our FLD info is now invalid */
+    dev_ctrl_db[device].fld_info.soc_sram_base = 0;
+    bcm_fld_unregister(device);
+#endif
+    return rc;
+}
+static bcmos_errno dev_ctrl_perform_reset(bcmolt_devid device, const bcmolt_msg *msg)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcmolt_device_reset_mode mode = ((const bcmolt_device_reset *)msg)->data.mode;
+    bcmolt_devid i;
+
+    switch (mode)
+    {
+    case BCMOLT_DEVICE_RESET_MODE_DEVICE:
+        return dev_ctrl_perform_reset_device(device);
+
+    case BCMOLT_DEVICE_RESET_MODE_HOST:
+        dev_ctrl_db[device].device_params.state = BCMOLT_DEVICE_STATE_DISCONNECTED;
+        dev_ctrl_db[device].is_host_reset_pending = BCMOS_TRUE;
+        dev_ctrl_send_device_disconnect_msg(device, 0);
+        /* instead of resetting the host right away, wait a few ms so the host can receive the ack / indication */
+        bcmos_timer_start(&dev_ctrl_db[device].reset_delay_timer.timer, HOST_RESET_DELAY_US);
+        break;
+
+    case BCMOLT_DEVICE_RESET_MODE_ALL:
+        for (i = 0; i < BCMTR_MAX_OLTS; i++)
+        {
+            dev_ctrl_db[i].device_params.state = BCMOLT_DEVICE_STATE_DISCONNECTED;
+            dev_ctrl_db[i].is_host_reset_pending = BCMOS_TRUE;
+            rc = dev_ctrl_params.device_off_cb(i);
+            if (rc != BCM_ERR_OK)
+            {
+                BCM_LOG(ERROR, dev_ctrl_db[i].log_id, "Device off callback failed: %s (%d)\n", bcmos_strerror(rc), rc);
+            }
+        }
+        /* instead of resetting the host right away, wait a few ms so the host can receive the ack / indication */
+        bcmos_timer_start(&dev_ctrl_db[device].reset_delay_timer.timer, HOST_RESET_DELAY_US);
+        break;
+
+    default:
+        BCM_LOG(ERROR, dev_ctrl_db[device].log_id, "Unrecognized reset mode: %d\n", mode);
+        break;
+    }
+
+    return rc;
+}
+
+static void dev_ctrl_disconnected_state_device_clear_event(bcmolt_devid device, const bcmolt_msg *msg)
+{
+    dev_ctrl_clear_device_cfg(device);
+}
+
+static void dev_ctrl_disconnected_state_device_config_set_event(bcmolt_devid device, const bcmolt_msg *msg)
+{
+    if (dev_ctrl_db[device].last_message == NULL)
+    {
+        BCM_LOG(ERROR, dev_ctrl_db[device].log_id, "Our saved message was invalid\n");
+        return;
+    }
+
+    dev_ctrl_update_local_configuration(device, msg);
+    dev_ctrl_db[device].last_message->dir = BCMOLT_MSG_DIR_RESPONSE;
+    bcmtrmux_control_to_host(device, dev_ctrl_db[device].last_message);
+    bcmolt_msg_free(dev_ctrl_db[device].last_message);
+    dev_ctrl_db[device].last_message = NULL;
+}
+
+static void dev_ctrl_disconnected_state_device_config_get_event(bcmolt_devid device, const bcmolt_msg *msg)
+{
+    bcmolt_presence_mask mask;
+    bcmolt_device_cfg *cfg;
+
+    if (dev_ctrl_db[device].last_message == NULL)
+    {
+        BCM_LOG(ERROR, dev_ctrl_db[device].log_id, "Our saved message was invalid --- aborting\n");
+        return;
+    }
+
+    cfg = (bcmolt_device_cfg *)dev_ctrl_db[device].last_message;
+    cfg->data = dev_ctrl_db[device].device_params;
+    mask = dev_ctrl_fill_from_local(device);
+
+    if ((mask & ~dev_ctrl_db[device].device_params_present) != 0)
+    {
+        bcmolt_msg_err(
+            dev_ctrl_db[device].last_message,
+            DEV_LOG_INVALID_ID,
+            BCM_ERR_INVALID_OP,
+            BCMOLT_ERR_FIELD_NONE,
+            "Unable to get parameters that have never been set");
+    }
+
+    dev_ctrl_db[device].last_message->dir = BCMOLT_MSG_DIR_RESPONSE;
+    bcmtrmux_control_to_host(device, dev_ctrl_db[device].last_message);
+    bcmolt_msg_free(dev_ctrl_db[device].last_message);
+    dev_ctrl_db[device].last_message = NULL;
+}
+
+static void dev_ctrl_disconnected_state_device_connect_event(bcmolt_devid device, const bcmolt_msg *msg)
+{
+#ifdef IN_BAND
+    bcmolt_device_connect oper;
+    bcmolt_device_key key = {};   
+#else
+    bcmos_errno rc;
+#endif
+    bcmolt_host_connection_fail_reason fail_reason;
+    bcmos_bool is_standalone;
+
+    if (dev_ctrl_db[device].is_host_reset_pending)
+    {
+        BCM_LOG(ERROR, dev_ctrl_db[device].log_id, "Cannot connect while host reset is pending\n");
+        return;
+    }
+
+#ifndef IN_BAND
+    /* Check if the chip is running in standalone mode */
+
+    rc = dev_ctrl_params.device_is_running_cb(device, &is_standalone);
+
+    if (rc != BCM_ERR_OK)
+    {
+        BCM_LOG(ERROR, dev_ctrl_db[device].log_id, "device_status_get_cb returned error: %s (%d)\n", bcmos_strerror(rc), rc);
+        return;
+    }
+    BCM_LOG(INFO, dev_ctrl_db[device].log_id, "device_status_get_cb returned success: is_standalone=%s\n", is_standalone ? "yes" : "no");
+
+    /* If the chip is running in standalone mode, connect to it:
+     * - Check the status of the PCIe channel and prepare it if necessary, using host callbacks
+     * - Register the device in the FLD driver
+     * - Use FLD to ask the device to re-initialize its PCIe transport layer
+     * - Initialize the host PCIe transport layer
+     * Otherwise, we must start the boot sequence:
+     * - Power on the device
+     * - Prepare the PCIe channel via host callback
+     * - Register the device in the FLD driver
+     * - Check if there is an exception log from the last time the application was run (and print it if so)
+     * - Start the FLD timer to load the bootcode
+     * In either case, the resulting state is 'connecting'.
+     */
+    dev_ctrl_db[device].boot_seq_info.polling_counter = BOOT_SEQ_POLLING_MAX_NUMBER;
+    bcmos_timer_handler_set(&dev_ctrl_db[device].boot_seq_info.timer.timer, dev_ctrl_boot_seq_timer_handler, device);
+#else
+    is_standalone= BCMOS_TRUE;
+#endif
+    if (is_standalone)
+    {
+        fail_reason = dev_ctrl_connect_to_standalone(device);
+    }
+    else
+    {
+        fail_reason = dev_ctrl_connect_from_reset(device, 0);
+        dev_ctrl_db[device].connection_info.state = DEV_CTRL_CONNECTING_STATE_ESTABLISHING;
+    }
+
+    if (fail_reason == BCMOLT_HOST_CONNECTION_FAIL_REASON_NONE)
+    {
+        bcmos_timer_start(&dev_ctrl_db[device].connection_info.timer.timer, DEVICE_CONTROL_CONNECT_TIME_US);
+        dev_ctrl_db[device].device_params.state = BCMOLT_DEVICE_STATE_CONNECTING;
+        BCM_LOG(DEBUG, dev_ctrl_db[device].log_id, "began connecting to %s\n", is_standalone ? "standby device" : "device from reset");
+
+#ifndef IN_BAND
+    /*Do nothing*/
+#else
+    BCMOLT_OPER_INIT(&oper, device, connect, key);
+    oper.hdr.hdr.type = BCMOLT_MSG_TYPE_SET;
+    (void)bcmtrmux_control_to_line(device, &oper.hdr.hdr);
+    bcmos_printf("Sent connect to embedded...\n");
+#endif
+
+    }
+    else
+    {
+        BCM_LOG(ERROR, dev_ctrl_db[device].log_id,
+            "failed to begin connection process: %s (%d)\n",
+            bcm_str_host_connection_fail_reason(fail_reason),
+            fail_reason);
+        dev_ctrl_send_ind_connection_failure(device, fail_reason);
+    }
+}
+
+static void dev_ctrl_disconnected_state_device_reset_event(bcmolt_devid device, const bcmolt_msg *msg)
+{
+    dev_ctrl_perform_reset(device, msg);
+}
+
+#ifndef IN_BAND
+static void dev_ctrl_disconnected_state_device_run_ddr_test_event(bcmolt_devid device, const bcmolt_msg *msg)
+{
+    bcmolt_host_connection_fail_reason fail_reason;
+    uint32_t test_ddr = 0;
+
+    const bcmolt_device_run_ddr_test_data *params = &((const bcmolt_device_run_ddr_test *)msg)->data;
+    if (params->cpu)
+    {
+        test_ddr |= BCM_FLD_HOST_RUN_CPU_DDR_TEST_MASK;
+    }
+    if (params->ras_0)
+    {
+        test_ddr |= BCM_FLD_HOST_RUN_RAS_0_TEST_MASK;
+    }
+    if (params->ras_1)
+    {
+        test_ddr |= BCM_FLD_HOST_RUN_RAS_1_TEST_MASK;
+    }
+
+    dev_ctrl_db[device].boot_seq_info.polling_counter = DDR_TEST_POLLING_MAX_NUMBER;
+    bcmos_timer_handler_set(&dev_ctrl_db[device].boot_seq_info.timer.timer, dev_ctrl_ddr_test_timer_handler, device);
+    fail_reason = dev_ctrl_connect_from_reset(device, test_ddr);
+    if (fail_reason == BCMOLT_HOST_CONNECTION_FAIL_REASON_NONE)
+    {
+        dev_ctrl_db[device].device_params.state = BCMOLT_DEVICE_STATE_TESTING_DDR;
+    }
+    else
+    {
+        bcmolt_device_ddr_test_complete ind = {};
+        BCMOLT_AUTO_INIT(&ind, device, ddr_test_complete);
+        ind.data.ddr_test.status = BCMOLT_DDR_TEST_STATUS_CONNECTION_FAILED;
+        ind.data.ddr_test.u.connection_failed.reason = fail_reason;
+        dev_ctrl_send_indication(device, &ind.hdr.hdr);
+    }
+
+}
+
+static void dev_ctrl_testing_ddr_state_ddr_test_completed_event(bcmolt_devid device, const bcmolt_msg *msg)
+{
+    bcmolt_device_ddr_test_complete ind = {};
+
+    BCMOLT_AUTO_INIT(&ind, device, ddr_test_complete);
+
+    ind.data.ddr_test.status = BCMOLT_DDR_TEST_STATUS_COMPLETED;
+    ind.data.ddr_test.u.completed.cpu_result = bcm_fld_ddr_test_result_get(device, 0);
+    ind.data.ddr_test.u.completed.ras_0_result = bcm_fld_ddr_test_result_get(device, 1);
+    ind.data.ddr_test.u.completed.ras_1_result = bcm_fld_ddr_test_result_get(device, 2);
+
+    dev_ctrl_perform_reset_device(device);
+    dev_ctrl_db[device].device_params.state = BCMOLT_DEVICE_STATE_DISCONNECTED;
+
+    dev_ctrl_send_indication(device, &ind.hdr.hdr);
+}
+
+static void dev_ctrl_testing_ddr_state_ddr_test_timeout_event(bcmolt_devid device, const bcmolt_msg *msg)
+{
+    bcmolt_device_ddr_test_complete ind = {};
+
+    dev_ctrl_perform_reset_device(device);
+    dev_ctrl_db[device].device_params.state = BCMOLT_DEVICE_STATE_DISCONNECTED;
+
+    BCMOLT_AUTO_INIT(&ind, device, ddr_test_complete);
+    ind.data.ddr_test.status = BCMOLT_DDR_TEST_STATUS_TIMEOUT;
+    dev_ctrl_send_indication(device, &ind.hdr.hdr);
+}
+#endif
+
+static void dev_ctrl_connecting_state_connection_failure_event(bcmolt_devid device, const bcmolt_msg *msg)
+{
+    dev_ctrl_disconnect(device);
+    dev_ctrl_send_ind_connection_failure_from_msg(device, msg);
+}
+
+static void dev_ctrl_connecting_state_connection_established_event(bcmolt_devid device, const bcmolt_msg *msg)
+{
+    if (dev_ctrl_db[device].connection_info.state == DEV_CTRL_CONNECTING_STATE_ESTABLISHING)
+    {
+        /* Initial connection is complete, now wait for the firmware to be initialized. */
+        dev_ctrl_db[device].connection_info.state = DEV_CTRL_CONNECTING_STATE_CONFIGURING;
+        dev_ctrl_send_config_set_msg(
+            device,
+            dev_ctrl_db[device].device_params_present,
+            0,
+            &dev_ctrl_db[device].device_params);
+        if (dev_ctrl_db[device].connection_info.config_send_counter > 0)
+        {
+            dev_ctrl_db[device].connection_info.config_send_counter--;
+        }
+        bcmos_timer_start(
+            &dev_ctrl_db[device].connection_info.timer.timer,
+            dev_ctrl_db[device].connection_info.config_interval);
+    }
+    else
+    {
+        /* Initial connection was already done - something must have gone wrong.  Try again. */
+        if (dev_ctrl_db[device].connection_info.config_send_counter > 0)
+        {
+            dev_ctrl_send_config_set_msg(
+                device,
+                dev_ctrl_db[device].device_params_present,
+                0,
+                &dev_ctrl_db[device].device_params);
+            bcmos_timer_start(
+                &dev_ctrl_db[device].connection_info.timer.timer,
+                dev_ctrl_db[device].connection_info.config_interval);
+            dev_ctrl_db[device].connection_info.config_send_counter--;
+        }
+        else
+        {
+            dev_ctrl_disconnect(device);
+            dev_ctrl_send_ind_connection_failure(device, BCMOLT_HOST_CONNECTION_FAIL_REASON_TIMEOUT);
+        }
+    }
+}
+
+static inline bcmos_bool dev_ctrl_nni_speed_equal(const bcmolt_device_nni_speed *a, const bcmolt_device_nni_speed *b)
+{
+    return (a->first_half == b->first_half && a->second_half == b->second_half);
+}
+
+static void dev_ctrl_connecting_state_device_ready_event(bcmolt_devid device, const bcmolt_msg *msg)
+{
+    bcmos_errno rc;
+    const bcmolt_device_device_ready *ready_msg = (const bcmolt_device_device_ready *)msg;
+    bcmolt_host_connection_fail_reason fail_reason = BCMOLT_HOST_CONNECTION_FAIL_REASON__NUM_OF;
+
+    if (dev_ctrl_db[device].connection_info.state == DEV_CTRL_CONNECTING_STATE_ESTABLISHING)
+    {
+        BCM_LOG(ERROR, dev_ctrl_db[device].log_id, "Unexpected 'device ready' indication before connection is established\n");
+        return;
+    }
+
+    if (ready_msg->data.system_mode != dev_ctrl_db[device].device_params.system_mode)
+    {
+        fail_reason = BCMOLT_HOST_CONNECTION_FAIL_REASON_SYSTEM_MODE_MISMATCH;
+    }
+    else if ((dev_ctrl_db[device].device_params_present & BCMOLT_PROP_MASK_GET(device, _cfg, nni_speed)) != 0 &&
+        !dev_ctrl_nni_speed_equal(&ready_msg->data.nni_speed, &dev_ctrl_db[device].device_params.nni_speed))
+    {
+        fail_reason = BCMOLT_HOST_CONNECTION_FAIL_REASON_NNI_SPEED_MISMATCH;
+    }
+    else
+    {
+        rc = dev_ctrl_validate_fw_version(device, &ready_msg->data.firmware_sw_version);
+        if (rc != BCM_ERR_OK)
+        {
+            fail_reason = BCMOLT_HOST_CONNECTION_FAIL_REASON_SOFTWARE_VERSION_MISMATCH;
+        }
+    }
+
+    if (fail_reason == BCMOLT_HOST_CONNECTION_FAIL_REASON__NUM_OF)
+    {
+        dev_ctrl_db[device].device_params.firmware_sw_version = ready_msg->data.firmware_sw_version;
+        dev_ctrl_db[device].device_params.chip_revision = ready_msg->data.chip_revision;
+        if ((dev_ctrl_db[device].device_params_present & BCMOLT_PROP_MASK_GET(device, _cfg, nni_speed)) == 0)
+        {
+            dev_ctrl_db[device].device_params.nni_speed = ready_msg->data.nni_speed;
+            dev_ctrl_db[device].device_params_present |= BCMOLT_PROP_MASK_GET(device, _cfg, nni_speed);
+        }
+
+        if (dev_ctrl_db[device].ka_info.ka_interval > 0)
+        {
+            start_keep_alive_process(&dev_ctrl_db[device].ka_info);
+        }
+
+#ifndef IN_BAND
+        bcmos_timer_start(&dev_ctrl_db[device].exception_monitor_timer.timer, EXCEPTION_LOG_MONITOR_INTERVAL);
+#endif
+        dev_ctrl_db[device].device_params.state = BCMOLT_DEVICE_STATE_READY;
+        dev_ctrl_send_ind_connection_complete(
+            device,
+            dev_ctrl_db[device].connection_info.state == DEV_CTRL_CONNECTING_STATE_STANDALONE);
+    }
+    else
+    {
+        dev_ctrl_send_device_disconnect_msg(device, 0);
+        dev_ctrl_disconnect(device);
+        dev_ctrl_send_ind_connection_failure(device, fail_reason);
+    }
+}
+
+static void dev_ctrl_connecting_state_received_ack(bcmolt_devid device, const bcmolt_msg *msg)
+{
+    /* This is called when we receive the ACK response against the configuraiton set message which was sent while the
+     * state-machine as part of the initial connection process.  If the result is OK, we should just move on and keep
+     * waiting for the "ready" indication.  If the result is not OK, the device rejected the configuration so we
+     * should disconnect the device and send a failure indication. */
+    if (msg->err != BCM_ERR_OK)
+    {
+        bcmolt_host_connection_fail_reason fail_reason;
+
+        dev_ctrl_disconnect(device);
+
+        /* Figure out which failure reason based on the message error code. */
+        switch (msg->err)
+        {
+        case BCM_ERR_NOT_SUPPORTED:
+            fail_reason = BCMOLT_HOST_CONNECTION_FAIL_REASON_SYSTEM_MODE_NOT_SUPPORTED;
+            break;
+        case BCM_ERR_PARM:
+            fail_reason = BCMOLT_HOST_CONNECTION_FAIL_REASON_PARAMETER;
+            break;
+        default:
+            fail_reason = BCMOLT_HOST_CONNECTION_FAIL_REASON_INTERNAL_ERROR;
+            break;
+        }
+
+        dev_ctrl_send_ind_connection_failure(device, fail_reason);
+    }
+}
+
+static void dev_ctrl_ready_state_device_config_set_event(bcmolt_devid device, const bcmolt_msg *msg)
+{
+    const bcmolt_device_cfg *cfg = (const bcmolt_device_cfg *)msg;
+
+    dev_ctrl_send_config_set_msg(device, msg->presence_mask, dev_ctrl_db[device].last_message->corr_tag, &cfg->data);
+
+    bcmos_timer_start(&dev_ctrl_db[device].device_response_timer.timer, DEVICE_RESPONSE_TIMEOUT_LENGTH);
+    dev_ctrl_db[device].device_params.state = BCMOLT_DEVICE_STATE_WAITING_FOR_DEVICE;
+}
+
+static void dev_ctrl_ready_state_device_config_get_event(bcmolt_devid device, const bcmolt_msg *msg)
+{
+    bcmolt_presence_mask mask;
+
+    if (dev_ctrl_db[device].last_message == NULL)
+    {
+        BCM_LOG(ERROR, dev_ctrl_db[device].log_id, "Our saved message was invalid --- aborting\n");
+        return;
+    }
+
+    mask = dev_ctrl_fill_from_local(device);
+    if (mask == 0)
+    {
+        dev_ctrl_db[device].last_message->dir = BCMOLT_MSG_DIR_RESPONSE;
+        bcmtrmux_control_to_host(device, dev_ctrl_db[device].last_message);
+        bcmolt_msg_free(dev_ctrl_db[device].last_message);
+        dev_ctrl_db[device].last_message = NULL;
+    }
+    else
+    {
+        bcmos_timer_start(&dev_ctrl_db[device].device_response_timer.timer, DEVICE_RESPONSE_TIMEOUT_LENGTH);
+        dev_ctrl_db[device].device_params.state = BCMOLT_DEVICE_STATE_WAITING_FOR_DEVICE;
+        dev_ctrl_send_config_get_msg(device, mask, dev_ctrl_db[device].last_message->corr_tag);
+    }
+}
+
+static void dev_ctrl_ready_state_device_disconnect_event(bcmolt_devid device, const bcmolt_msg *msg)
+{
+    dev_ctrl_send_device_disconnect_msg(device, 0);
+    dev_ctrl_disconnect(device);
+    dev_ctrl_send_ind_disconnection_complete(device);
+}
+
+static void dev_ctrl_ready_state_device_reset_event(bcmolt_devid device, const bcmolt_msg *msg)
+{
+    dev_ctrl_perform_reset(device, msg);
+    dev_ctrl_send_ind_disconnection_complete(device);
+}
+
+static void dev_ctrl_ready_state_connection_failure_event(bcmolt_devid device, const bcmolt_msg *msg)
+{
+    dev_ctrl_disconnect(device);
+    dev_ctrl_send_ind_connection_failure_from_msg(device, msg);
+}
+
+static void dev_ctrl_waiting_for_device_state_timer_timeout(bcmolt_devid device, const bcmolt_msg *msg)
+{
+    if (dev_ctrl_db[device].last_message == NULL)
+    {
+        BCM_LOG(ERROR, dev_ctrl_db[device].log_id, "Our saved message was invalid --- aborting\n");
+        return;
+    }
+
+    bcmolt_msg_err(
+        dev_ctrl_db[device].last_message,
+        DEV_LOG_INVALID_ID,
+        BCM_ERR_INTERNAL,
+        BCMOLT_ERR_FIELD_NONE,
+        "No response to configuration message from embedded");
+    dev_ctrl_db[device].last_message->dir = BCMOLT_MSG_DIR_RESPONSE;
+    bcmtrmux_control_to_host(device, dev_ctrl_db[device].last_message);
+    bcmolt_msg_free(dev_ctrl_db[device].last_message);
+    dev_ctrl_db[device].last_message = NULL;
+    dev_ctrl_db[device].device_params.state = BCMOLT_DEVICE_STATE_READY;
+}
+
+static void dev_ctrl_waiting_for_device_state_received_ack(bcmolt_devid device, const bcmolt_msg *msg)
+{
+    bcmos_timer_stop(&dev_ctrl_db[device].device_response_timer.timer);
+
+    if (dev_ctrl_db[device].last_message == NULL)
+    {
+        BCM_LOG(ERROR, dev_ctrl_db[device].log_id, "Our saved message was invalid --- aborting\n");
+        return;
+    }
+
+    if (msg->corr_tag != dev_ctrl_db[device].last_message->corr_tag)
+    {
+        /* ignore this response as it was to something other than our request */
+        return;
+    }
+
+    if (msg->err != BCM_ERR_OK)
+    {
+        dev_ctrl_db[device].last_message->err = msg->err;
+        dev_ctrl_db[device].last_message->err_field_idx = msg->err_field_idx;
+        memcpy(dev_ctrl_db[device].last_message->err_text, msg->err_text, sizeof(msg->err_text));
+        dev_ctrl_db[device].last_message->dir = BCMOLT_MSG_DIR_RESPONSE;
+        bcmtrmux_control_to_host(device, dev_ctrl_db[device].last_message);
+        bcmolt_msg_free(dev_ctrl_db[device].last_message);
+        dev_ctrl_db[device].last_message = NULL;
+        dev_ctrl_db[device].device_params.state = BCMOLT_DEVICE_STATE_READY;
+        return;
+    }
+
+    if (msg->type == BCMOLT_MSG_TYPE_GET)
+    {
+        const bcmolt_device_cfg *source = (const bcmolt_device_cfg *)msg;
+        bcmolt_device_cfg *dest = (bcmolt_device_cfg *)dev_ctrl_db[device].last_message;
+        if (BCMOLT_CFG_PROP_IS_SET(source, device, protection_switching_ext_irq))
+        {
+            dest->data.protection_switching_ext_irq = source->data.protection_switching_ext_irq;
+        }
+        if (BCMOLT_CFG_PROP_IS_SET(source, device, epon_clock_transport_sample_delay))
+        {
+            dest->data.epon_clock_transport_sample_delay = source->data.epon_clock_transport_sample_delay;
+        }
+        if (BCMOLT_CFG_PROP_IS_SET(source, device, indication_shaping))
+        {
+            dest->data.indication_shaping = source->data.indication_shaping;
+        }
+        if (BCMOLT_CFG_PROP_IS_SET(source, device, gpon_xgpon_tod_enable))
+        {
+            dest->data.gpon_xgpon_tod_enable = source->data.gpon_xgpon_tod_enable;
+        }
+        if (BCMOLT_CFG_PROP_IS_SET(source, device, gpon_xgpon_tod_gpio_pin))
+        {
+            dest->data.gpon_xgpon_tod_gpio_pin = source->data.gpon_xgpon_tod_gpio_pin;
+        }
+        if (BCMOLT_CFG_PROP_IS_SET(source, device, gpon_xgpon_tod_connected_internally))
+        {
+            dest->data.gpon_xgpon_tod_connected_internally = source->data.gpon_xgpon_tod_connected_internally;
+        }
+        if (BCMOLT_CFG_PROP_IS_SET(source, device, epon_8021_as_tod_format))
+        {
+            dest->data.epon_8021_as_tod_format = source->data.epon_8021_as_tod_format;
+        }
+        if (BCMOLT_CFG_PROP_IS_SET(source, device, firmware_sw_version))
+        {
+            dest->data.firmware_sw_version = source->data.firmware_sw_version;
+        }
+        if (BCMOLT_CFG_PROP_IS_SET(source, device, chip_revision))
+        {
+            dest->data.chip_revision = source->data.chip_revision;
+        }
+        if (BCMOLT_CFG_PROP_IS_SET(source, device, chip_temperature))
+        {
+            dest->data.chip_temperature = source->data.chip_temperature;
+        }
+        if (BCMOLT_CFG_PROP_IS_SET(source, device, epon_shaper_mode))
+        {
+            dest->data.epon_shaper_mode = source->data.epon_shaper_mode;
+        }
+        if (BCMOLT_CFG_PROP_IS_SET(source, device, embedded_image_list))
+        {
+            dest->data.embedded_image_list = source->data.embedded_image_list;
+        }
+        if (BCMOLT_CFG_PROP_IS_SET(source, device, chip_voltage))
+        {
+            dest->data.chip_voltage = source->data.chip_voltage;
+        }
+        if (BCMOLT_CFG_PROP_IS_SET(source, device, epon_tod_string))
+        {
+            dest->data.epon_tod_string = source->data.epon_tod_string;
+        }
+        if (BCMOLT_CFG_PROP_IS_SET(source, device, xgpon_num_of_onus))
+        {
+        	dest->data.xgpon_num_of_onus = source->data.xgpon_num_of_onus;
+        }
+        if (BCMOLT_CFG_PROP_IS_SET(source, device, gpon_xgpon_tod_string_length))
+        {
+        	dest->data.gpon_xgpon_tod_string_length = source->data.gpon_xgpon_tod_string_length;
+        }
+        if (BCMOLT_CFG_PROP_IS_SET(source, device, tod_uart_baudrate))
+        {
+        	dest->data.tod_uart_baudrate = source->data.tod_uart_baudrate;
+        }
+    }
+
+    if (msg->type == BCMOLT_MSG_TYPE_SET)
+    {
+        bcmolt_device_cfg *source = (bcmolt_device_cfg *)dev_ctrl_db[device].last_message;
+        bcmolt_device_cfg_data *dest = &dev_ctrl_db[device].device_params;
+        dev_ctrl_db[device].device_params_present |= source->hdr.hdr.presence_mask;
+        if (BCMOLT_CFG_PROP_IS_SET(source, device, protection_switching_ext_irq))
+        {
+            dest->protection_switching_ext_irq = source->data.protection_switching_ext_irq;
+        }
+        if (BCMOLT_CFG_PROP_IS_SET(source, device, epon_clock_transport_sample_delay))
+        {
+            dest->epon_clock_transport_sample_delay = source->data.epon_clock_transport_sample_delay;
+        }
+        if (BCMOLT_CFG_PROP_IS_SET(source, device, indication_shaping))
+        {
+            dest->indication_shaping = source->data.indication_shaping;
+        }
+        if (BCMOLT_CFG_PROP_IS_SET(source, device, gpon_xgpon_tod_enable))
+        {
+            dest->gpon_xgpon_tod_enable = source->data.gpon_xgpon_tod_enable;
+        }
+        if (BCMOLT_CFG_PROP_IS_SET(source, device, gpon_xgpon_tod_gpio_pin))
+        {
+            dest->gpon_xgpon_tod_gpio_pin = source->data.gpon_xgpon_tod_gpio_pin;
+        }
+        if (BCMOLT_CFG_PROP_IS_SET(source, device, gpon_xgpon_tod_connected_internally))
+        {
+            dest->gpon_xgpon_tod_connected_internally = source->data.gpon_xgpon_tod_connected_internally;
+        }
+        if (BCMOLT_CFG_PROP_IS_SET(source, device, epon_8021_as_tod_format))
+        {
+            dest->epon_8021_as_tod_format = source->data.epon_8021_as_tod_format;
+        }
+        if (BCMOLT_CFG_PROP_IS_SET(source, device, epon_tod_string))
+        {
+            dest->epon_tod_string = source->data.epon_tod_string;
+        }
+        if (BCMOLT_CFG_PROP_IS_SET(source, device, epon_shaper_mode))
+        {
+            dest->epon_shaper_mode = source->data.epon_shaper_mode;
+        }
+        if (BCMOLT_CFG_PROP_IS_SET(source, device, keepalive_tolerance))
+        {
+            dev_ctrl_db[device].ka_info.ka_tolerance = source->data.keepalive_tolerance;
+        }
+        if (BCMOLT_CFG_PROP_IS_SET(source, device, keepalive_interval))
+        {
+            dev_ctrl_db[device].ka_info.ka_interval = source->data.keepalive_interval * BCMOS_MICROSECONDS_IN_SECONDS;
+            if (dev_ctrl_db[device].ka_info.ka_interval > 0)
+            {
+                start_keep_alive_process(&dev_ctrl_db[device].ka_info);
+            }
+            else
+            {
+                stop_keep_alive_process(&dev_ctrl_db[device].ka_info);
+            }
+        }
+        if (BCMOLT_CFG_PROP_IS_SET(source, device, gpon_xgpon_tod_string_length))
+        {
+        	dest->gpon_xgpon_tod_string_length = source->data.gpon_xgpon_tod_string_length;
+        }
+        if (BCMOLT_CFG_PROP_IS_SET(source, device, tod_uart_baudrate))
+        {
+        	dest->tod_uart_baudrate = source->data.tod_uart_baudrate;
+        }
+    }
+
+    dev_ctrl_db[device].last_message->dir = BCMOLT_MSG_DIR_RESPONSE;
+    bcmtrmux_control_to_host(device, dev_ctrl_db[device].last_message);
+    dev_ctrl_db[device].device_params.state = BCMOLT_DEVICE_STATE_READY;
+    bcmolt_msg_free(dev_ctrl_db[device].last_message);
+    dev_ctrl_db[device].last_message = NULL;
+}
+
+static dev_ctrl_sm_cb dev_ctrl_sm[BCMOLT_DEVICE_STATE__NUM_OF][DEVICE_CONTROL_EVENT__NUM_OF] =
+{
+    [BCMOLT_DEVICE_STATE_DISCONNECTED] =
+    {
+        [DEVICE_CONTROL_EVENT_DEVICE_CLEAR] = dev_ctrl_disconnected_state_device_clear_event,
+        [DEVICE_CONTROL_EVENT_DEVICE_CONFIG_SET] = dev_ctrl_disconnected_state_device_config_set_event,
+        [DEVICE_CONTROL_EVENT_DEVICE_CONFIG_GET] = dev_ctrl_disconnected_state_device_config_get_event,
+        [DEVICE_CONTROL_EVENT_DEVICE_CONNECT] = dev_ctrl_disconnected_state_device_connect_event,
+        [DEVICE_CONTROL_EVENT_DEVICE_RESET] = dev_ctrl_disconnected_state_device_reset_event,
+#ifndef IN_BAND
+        [DEVICE_CONTROL_EVENT_RUN_DDR_TEST] = dev_ctrl_disconnected_state_device_run_ddr_test_event,
+#endif
+    },
+
+    [BCMOLT_DEVICE_STATE_CONNECTING] =
+    {
+        [DEVICE_CONTROL_EVENT_CONNECTION_FAILURE] = dev_ctrl_connecting_state_connection_failure_event,
+        [DEVICE_CONTROL_EVENT_CONNECTION_ESTABLISHED] = dev_ctrl_connecting_state_connection_established_event,
+        [DEVICE_CONTROL_EVENT_DEVICE_READY] = dev_ctrl_connecting_state_device_ready_event,
+        [DEVICE_CONTROL_EVENT_DEVICE_RECEIVED_ACK] = dev_ctrl_connecting_state_received_ack,
+    },
+
+    [BCMOLT_DEVICE_STATE_READY] =
+    {
+        [DEVICE_CONTROL_EVENT_DEVICE_CONFIG_SET] = dev_ctrl_ready_state_device_config_set_event,
+        [DEVICE_CONTROL_EVENT_DEVICE_CONFIG_GET] = dev_ctrl_ready_state_device_config_get_event,
+        [DEVICE_CONTROL_EVENT_DEVICE_DISCONNECT] = dev_ctrl_ready_state_device_disconnect_event,
+        [DEVICE_CONTROL_EVENT_DEVICE_RESET] = dev_ctrl_ready_state_device_reset_event,
+        [DEVICE_CONTROL_EVENT_CONNECTION_FAILURE] = dev_ctrl_ready_state_connection_failure_event,
+    },
+
+    [BCMOLT_DEVICE_STATE_WAITING_FOR_DEVICE] =
+    {
+        [DEVICE_CONTROL_EVENT_DEVICE_TIMER_TIMEOUT] = dev_ctrl_waiting_for_device_state_timer_timeout,
+        [DEVICE_CONTROL_EVENT_DEVICE_RECEIVED_ACK] = dev_ctrl_waiting_for_device_state_received_ack
+    },
+
+#ifndef IN_BAND
+    [BCMOLT_DEVICE_STATE_TESTING_DDR] =
+    {
+        [DEVICE_CONTROL_EVENT_DDR_TEST_COMPLETED] = dev_ctrl_testing_ddr_state_ddr_test_completed_event,
+        [DEVICE_CONTROL_EVENT_DDR_TEST_TIMEOUT] = dev_ctrl_testing_ddr_state_ddr_test_timeout_event
+    }
+#endif
+};
+
+static void dev_ctrl_sm_err_cb(bcmolt_devid device, dev_ctrl_event event)
+{
+    BCM_LOG(ERROR, dev_ctrl_db[device].log_id,
+        "Unexpected event: device=%d, state=%s, event=%s\n",
+        device,
+        bcm_str_device_state(dev_ctrl_db[device].device_params.state),
+        bcm_str_device_event(event));
+}
+
+static void dev_ctrl_sm_call_state_cb(bcmolt_devid device, dev_ctrl_event event, const bcmolt_msg *msg)
+{
+    dev_ctrl_sm_cb cb;
+    dev_ctrl_db[device].last_event = event;
+    cb = dev_ctrl_sm[dev_ctrl_db[device].device_params.state][event];
+    if (cb == NULL)
+    {
+        dev_ctrl_sm_err_cb(device, event);
+    }
+    else
+    {
+        cb(device, msg);
+    }
+}
+
+static void dev_ctrl_ka_rx_handler(bcmolt_devid device, bcmolt_device_device_keep_alive *msg)
+{
+    keep_alive_rx_handler((const bcmos_keep_alive_data_msg *)&msg->data, &dev_ctrl_db[device].ka_info);
+}
+
+static bcmos_errno dev_ctrl_ka_tx_handler(bcmolt_devid device, bcmolt_msg *msg)
+{
+    bcmos_errno rc;
+
+    if (!dev_ctrl_is_connected(dev_ctrl_db[device].device_params.state))
+    {
+        return BCM_ERR_OK; /* in case this happens during a disconnect/reset operation */
+    }
+
+    msg->corr_tag = ++dev_ctrl_db[device].corr_tag;
+    rc = bcmtrmux_control_to_line(device, msg);
+    return rc;
+}
+
+static bcmos_errno dev_ctrl_ka_disconnect_handler(bcmolt_devid device)
+{
+    dev_ctrl_disconnect(device);
+    dev_ctrl_send_ind_connection_failure(device, BCMOLT_HOST_CONNECTION_FAIL_REASON_KEEPALIVE);
+    return BCM_ERR_OK;
+}
+
+static void handle_oper_set_msg(bcmolt_devid device, bcmolt_msg *msg)
+{
+    dev_ctrl_event event;
+
+    switch (msg->subgroup)
+    {
+    case BCMOLT_DEVICE_OPER_ID_RESET:
+        event = DEVICE_CONTROL_EVENT_DEVICE_RESET;
+        break;
+    case BCMOLT_DEVICE_OPER_ID_CONNECT:
+        event = DEVICE_CONTROL_EVENT_DEVICE_CONNECT;
+        break;
+    case BCMOLT_DEVICE_OPER_ID_DISCONNECT:
+        event = DEVICE_CONTROL_EVENT_DEVICE_DISCONNECT;
+        break;
+    case BCMOLT_DEVICE_OPER_ID_RUN_DDR_TEST:
+        event = DEVICE_CONTROL_EVENT_RUN_DDR_TEST;
+        break;
+    default :
+        event = DEVICE_CONTROL_EVENT_NO_EVENT;
+        break;
+    }
+
+    /* Send response to the waiting application */
+    msg->dir = BCMOLT_MSG_DIR_RESPONSE;
+    bcmtrmux_control_to_host(device, msg);
+
+    /* Handle event */
+    if (event != DEVICE_CONTROL_EVENT_NO_EVENT)
+    {
+        dev_ctrl_sm_call_state_cb(device, event, msg);
+    }
+}
+
+static void dev_ctrl_process_msg(bcmolt_devid device, bcmolt_msg *msg)
+{
+    if (msg->dir == BCMOLT_MSG_DIR_RESPONSE)
+    {
+        dev_ctrl_sm_call_state_cb(device, DEVICE_CONTROL_EVENT_DEVICE_RECEIVED_ACK, msg);
+    }
+
+    if (msg->group == BCMOLT_MGT_GROUP_AUTO)
+    {
+        if (msg->subgroup != BCMOLT_DEVICE_AUTO_ID_DEVICE_KEEP_ALIVE)
+        {
+            BCM_LOG(DEBUG, dev_ctrl_db[device].log_id, "Indication = %s (%d)\n", bcm_str_auto_id(msg->subgroup), msg->subgroup);
+        }
+
+        switch (msg->subgroup)
+        {
+        case BCMOLT_DEVICE_AUTO_ID_DEVICE_KEEP_ALIVE:
+            dev_ctrl_ka_rx_handler(device, (bcmolt_device_device_keep_alive *)msg);
+            break;
+        case BCMOLT_DEVICE_AUTO_ID_CONNECTION_FAILURE:
+            /* note: this indication is not generated by the device - it's generated by device control itself */
+            dev_ctrl_sm_call_state_cb(device, DEVICE_CONTROL_EVENT_CONNECTION_FAILURE, msg);
+            break;
+        case BCMOLT_DEVICE_AUTO_ID_CONNECTION_ESTABLISHED:
+            dev_ctrl_sm_call_state_cb(device, DEVICE_CONTROL_EVENT_CONNECTION_ESTABLISHED, msg);
+            break;
+        case BCMOLT_DEVICE_AUTO_ID_DEVICE_READY:
+            dev_ctrl_sm_call_state_cb(device, DEVICE_CONTROL_EVENT_DEVICE_READY, msg);
+            break;
+        default:
+            BCM_LOG(ERROR, dev_ctrl_db[device].log_id, "Unexpected indication\n");
+            break;
+        }
+    }
+
+    if (msg->group == BCMOLT_MGT_GROUP_OPER && msg->type == BCMOLT_MSG_TYPE_SET && msg->dir != BCMOLT_MSG_DIR_RESPONSE)
+    {
+        /* All operations happen entirely on the host side */
+        handle_oper_set_msg(device, msg);
+    }
+
+    if (msg->group == BCMOLT_MGT_GROUP_CFG && msg->dir != BCMOLT_MSG_DIR_RESPONSE)
+    {
+        dev_ctrl_db[device].last_message = msg;
+        switch (msg->type)
+        {
+        case BCMOLT_MSG_TYPE_GET:
+            dev_ctrl_sm_call_state_cb(device, DEVICE_CONTROL_EVENT_DEVICE_CONFIG_GET, msg);
+            break;
+        case BCMOLT_MSG_TYPE_CLEAR:
+            dev_ctrl_sm_call_state_cb(device, DEVICE_CONTROL_EVENT_DEVICE_CLEAR, msg);
+            break;
+        case BCMOLT_MSG_TYPE_SET:
+            dev_ctrl_sm_call_state_cb(device, DEVICE_CONTROL_EVENT_DEVICE_CONFIG_SET, msg);
+            break;
+        default:
+            break;
+        }
+        msg = NULL;
+    }
+
+    if (msg != NULL)
+    {
+        bcmolt_msg_free(msg);
+    }
+}
+
+static bcmos_timer_rc dev_ctrl_connection_timer_handler(bcmos_timer *timer, long data)
+{
+    bcmolt_devid device = DEVICE_ID_FROM_MODULE_ID(timer->parm.owner);
+
+    if (dev_ctrl_db[device].device_params.state != BCMOLT_DEVICE_STATE_CONNECTING)
+    {
+        /* The timer is irrelevant in this state - discard it and return. */
+    }
+    else if (dev_ctrl_db[device].connection_info.state == DEV_CTRL_CONNECTING_STATE_CONFIGURING)
+    {
+        /* After we have sent the first "device configuration set" message to the device, the connection timer is used
+         * for retransmitting this message in case the device missed it. */
+        bcmolt_device_connection_established ind = {};
+        BCMOLT_AUTO_INIT(&ind, device, connection_established);
+        dev_ctrl_sm_call_state_cb(device, DEVICE_CONTROL_EVENT_CONNECTION_ESTABLISHED, &ind.hdr.hdr);
+    }
+    else
+    {
+        /* Connection failure due to timeout. */
+        bcmolt_device_connection_failure ind = {};
+        BCMOLT_AUTO_INIT(&ind, device, connection_failure);
+        ind.data.reason = BCMOLT_HOST_CONNECTION_FAIL_REASON_TIMEOUT;
+        dev_ctrl_sm_call_state_cb(device, DEVICE_CONTROL_EVENT_CONNECTION_FAILURE, &ind.hdr.hdr);
+    }
+
+    return BCMOS_TIMER_STOP;
+}
+
+#ifndef IN_BAND
+static void dev_ctrl_get_ras_modes(bcmolt_system_mode system_mode, uint32_t *ras_0_mode, uint32_t *ras_1_mode)
+{
+    switch (system_mode)
+    {
+    case BCMOLT_SYSTEM_MODE_GPON__4_X:
+    case BCMOLT_SYSTEM_MODE_GPON__8_X:
+        *ras_0_mode = BCM_FLD_RAS_MODE_GPON;
+        *ras_1_mode = BCM_FLD_RAS_MODE_NOT_CONFIGURED;
+        break;
+    case BCMOLT_SYSTEM_MODE_GPON__16_X:
+        *ras_0_mode = BCM_FLD_RAS_MODE_GPON;
+        *ras_1_mode = BCM_FLD_RAS_MODE_GPON;
+        break;
+    case BCMOLT_SYSTEM_MODE_XGPON_1__4_X:
+    case BCMOLT_SYSTEM_MODE_XGPON_1__8_X:
+    case BCMOLT_SYSTEM_MODE_NGPON2__8_X_2_P_5_G:
+        *ras_0_mode = BCM_FLD_RAS_MODE_XGPON;
+        *ras_1_mode = BCM_FLD_RAS_MODE_XGPON;
+        break;
+    case BCMOLT_SYSTEM_MODE_GPON_8_XGPON_4_X_COEXISTENCE:
+        *ras_0_mode = BCM_FLD_RAS_MODE_XGPON;
+        *ras_1_mode = BCM_FLD_RAS_MODE_GPON;
+        break;
+    case BCMOLT_SYSTEM_MODE_XGS__2_X_10_G:
+    case BCMOLT_SYSTEM_MODE_NGPON2__2_X_10_G:
+        *ras_0_mode = BCM_FLD_RAS_MODE_XGS_NGPON2;
+        *ras_1_mode = BCM_FLD_RAS_MODE_XGS_NGPON2;
+        break;
+    default:
+        *ras_0_mode = BCM_FLD_RAS_MODE_NOT_CONFIGURED;
+        *ras_1_mode = BCM_FLD_RAS_MODE_NOT_CONFIGURED;
+        break;
+    }
+}
+
+static bcmos_timer_rc dev_ctrl_boot_seq_timer_handler(bcmos_timer *timer, long data)
+{
+    bcmos_bool is_bootloader_done;
+    bcmolt_devid device;
+    uint32_t ras_0_mode;
+    uint32_t ras_1_mode;
+    bcmos_errno rc = BCM_ERR_OK;
+    bcmos_timer_rc timer_rc = BCMOS_TIMER_STOP;
+
+    device = (bcmolt_devid)data;
+
+    if (dev_ctrl_db[device].boot_seq_info.polling_counter > 0)
+    {
+        dev_ctrl_db[device].boot_seq_info.polling_counter--;
+        is_bootloader_done = bcm_fld_is_bootloader_done(device);
+        if (is_bootloader_done)
+        {
+            /* Stop the boot timer */
+            timer_rc = BCMOS_TIMER_STOP;
+            BCM_LOG(INFO, dev_ctrl_db[device].log_id, "Boot loader phase done.\n");
+
+            if (dev_ctrl_db[device].device_params.debug.avs_control)
+            {
+                rc = bcm_fld_set_avs_cont(device, BCM_FLD_AVS_CONT); /* don't stop the cpu when avs fails. */
+            }
+            else
+            {
+                rc = bcm_fld_set_avs_cont(device, BCM_FLD_AVS_STOP); /* stop the cpu when avs fails. */
+            }
+            BCM_DEV_CTRL_RETURN_ON_ERROR(device, rc, "bcm_fld_set_avs_cont\n");
+
+            dev_ctrl_get_ras_modes(dev_ctrl_db[device].device_params.system_mode, &ras_0_mode, &ras_1_mode);
+            rc = bcm_fld_set_ras_mode_set(device, 0, ras_0_mode);
+            BCM_DEV_CTRL_RETURN_ON_ERROR(device, rc, "bcm_fld_set_ras_0_mode_set\n");
+            rc = bcm_fld_set_ras_mode_set(device, 1, ras_1_mode);
+            BCM_DEV_CTRL_RETURN_ON_ERROR(device, rc, "bcm_fld_set_ras_1_mode_set\n");
+            rc = dev_ctrl_handle_application_image(device);
+            BCM_DEV_CTRL_RETURN_ON_ERROR(device, rc, "dev_ctrl_handle_application_image()\n");
+        }
+        else
+        {
+            /* Restart the boot timer */
+            timer_rc = BCMOS_TIMER_OK;
+        }
+    }
+    else
+    {
+        timer_rc = BCMOS_TIMER_STOP;
+        BCM_LOG(ERROR, dev_ctrl_db[device].log_id, "dev_ctrl_boot_seq timer expired while trying to burn BOOTLOADER\n");
+    }
+
+    return timer_rc;
+}
+
+static bcmos_timer_rc dev_ctrl_ddr_test_timer_handler(bcmos_timer *timer, long data)
+{
+    bcmos_bool is_ddr_test_done;
+    bcmolt_devid device;
+    bcmos_timer_rc timer_rc = BCMOS_TIMER_STOP;
+
+    device = (bcmolt_devid)data;
+
+    if (dev_ctrl_db[device].boot_seq_info.polling_counter > 0)
+    {
+        dev_ctrl_db[device].boot_seq_info.polling_counter--;
+        is_ddr_test_done = bcm_fld_is_ddr_test_done(device);
+        if (is_ddr_test_done)
+        {
+            /* Stop the boot timer */
+            timer_rc = BCMOS_TIMER_STOP;
+            dev_ctrl_sm_call_state_cb(device, DEVICE_CONTROL_EVENT_DDR_TEST_COMPLETED, NULL);
+        }
+        else
+        {
+            BCM_LOG(INFO, dev_ctrl_db[device].log_id, "Waiting for DDR Test %u\n", dev_ctrl_db[device].boot_seq_info.polling_counter);
+            /* Restart the boot timer */
+            timer_rc = BCMOS_TIMER_OK;
+        }
+    }
+    else
+    {
+        timer_rc = BCMOS_TIMER_STOP;
+        dev_ctrl_sm_call_state_cb(device, DEVICE_CONTROL_EVENT_DDR_TEST_TIMEOUT, NULL);
+    }
+
+    return timer_rc;
+}
+#endif
+
+static bcmos_errno dev_ctrl_init_modules(bcmolt_devid device)
+{
+    bcmos_module_parm module_params = {};
+    bcmos_errno rc = BCM_ERR_OK;
+    dev_ctrl_db[device].module_info.module_id = MODULE_ID_FROM_DEVICE_ID(device);
+    snprintf(
+        dev_ctrl_db[device].module_info.name,
+        sizeof(dev_ctrl_db[device].module_info.name),
+        "dev_ctrl%u_module",
+        device);
+    module_params.qparm.name = dev_ctrl_db[device].module_info.name;
+    module_params.qparm.size = DEVICE_CONTROL_MSG_QUEUE_SIZE;
+    module_params.init = NULL;
+    rc = bcmos_module_create(
+        dev_ctrl_db[device].module_info.module_id,
+        &dev_ctrl_db[device].task_info.task,
+        &module_params);
+    if (rc != BCM_ERR_OK)
+    {
+        BCM_LOG(ERROR, dev_ctrl_db[device].log_id,
+            "bcmos_module_create returned error %s (%d), module id %d\n",
+            bcmos_strerror(rc),
+            rc,
+            dev_ctrl_db[device].module_info.module_id);
+    }
+    return rc;
+}
+
+static bcmos_errno dev_ctrl_init_tasks(bcmolt_devid device)
+{
+    bcmos_task_parm task_params = {};
+    bcmos_errno rc = BCM_ERR_OK;
+    snprintf(dev_ctrl_db[device].task_info.name, sizeof(dev_ctrl_db[device].task_info.name), "dev_ctrl%u", device);
+    task_params.name = dev_ctrl_db[device].task_info.name;
+    task_params.priority = TASK_PRIORITY_DEVICE_CONTROL;
+    task_params.core = BCMOS_CPU_CORE_ANY; /* No CPU affinity */
+    task_params.init_handler = NULL;
+    task_params.data = (long)device;
+    rc = bcmos_task_create(&dev_ctrl_db[device].task_info.task, &task_params);
+    BCM_DEV_CTRL_RETURN_ON_ERROR(device, rc, "bcmos_task_create()\n");
+
+    return rc;
+}
+
+static void dev_ctrl_mod_msg_handler(bcmos_module_id module_id, bcmos_msg *os_msg)
+{
+    bcmolt_msg *msg;
+    bcmolt_devid device;
+
+    device = DEVICE_ID_FROM_MODULE_ID(module_id);
+    msg = os_msg->data;
+
+#ifndef IN_BAND
+#ifdef ENABLE_LOG
+    if (msg->obj_type == BCMOLT_OBJ_ID_LOGGER &&
+        msg->group == BCMOLT_MGT_GROUP_CFG &&
+        msg->type == BCMOLT_MSG_TYPE_GET &&
+        !dev_ctrl_is_connected(dev_ctrl_db[device].device_params.state))
+    {
+        /* The device is not ready, but still we can fetch the logger file from SRAM. */
+        msg->err = dev_ctrl_get_dev_log(device, (bcmolt_logger_cfg *)msg);
+        msg->dir = BCMOLT_MSG_DIR_RESPONSE;
+        bcmtrmux_control_to_host(device, msg);
+        bcmolt_msg_free(msg);
+        return;
+    }
+#endif
+
+    if (msg->obj_type == BCMOLT_OBJ_ID_SOFTWARE_ERROR &&
+        msg->group == BCMOLT_MGT_GROUP_CFG &&
+        (msg->type == BCMOLT_MSG_TYPE_GET || msg->type == BCMOLT_MSG_TYPE_GET_MULTI) &&
+        !dev_ctrl_is_connected(dev_ctrl_db[device].device_params.state))
+    {
+        /* get sw error table from SRAM */
+        msg->err = dev_ctrl_sw_error_get(device, msg);
+        msg->dir = BCMOLT_MSG_DIR_RESPONSE;
+        bcmtrmux_control_to_host(device, msg);
+        bcmolt_msg_free(msg);
+        return;
+    }
+#endif
+
+    if (msg->obj_type == BCMOLT_OBJ_ID_DEBUG)
+    {
+        bcmolt_debug_ctrl_process_msg(device, msg, dev_ctrl_is_connected(dev_ctrl_db[device].device_params.state));
+        return;
+    }
+
+    if (msg->obj_type != BCMOLT_OBJ_ID_DEVICE)
+    {
+        bcmolt_msg_err(
+            msg,
+            DEV_LOG_INVALID_ID,
+            BCM_ERR_INTERNAL,
+            BCMOLT_ERR_FIELD_NONE,
+            "Can't access target when disconnected");
+        msg->dir = BCMOLT_MSG_DIR_RESPONSE;
+        bcmtrmux_control_to_host(device, msg);
+        bcmolt_msg_free(msg);
+    }
+    else if (msg->group == BCMOLT_MGT_GROUP_AUTO)
+    {
+        dev_ctrl_process_msg(device, msg);
+    }
+    else if (msg->dir == BCMOLT_MSG_DIR_RESPONSE)
+    {
+        if (msg->group == BCMOLT_MGT_GROUP_OPER && msg->subgroup == BCMOLT_DEVICE_OPER_ID_HOST_KEEP_ALIVE)
+        {
+            /* Just free it, otherwise ignore keepalive oper responses */
+            bcmolt_msg_free(msg);
+        }
+        else if ((dev_ctrl_db[device].device_params.state == BCMOLT_DEVICE_STATE_WAITING_FOR_DEVICE) || (dev_ctrl_db[device].device_params.state == BCMOLT_DEVICE_STATE_CONNECTING))
+        {
+            dev_ctrl_process_msg(device, msg);
+        }
+        else
+        {
+            BCM_LOG(INFO, dev_ctrl_db[device].log_id, "received unexpected response: group=%u subgroup=%u\n", msg->group, msg->subgroup);
+            bcmolt_msg_free(msg);
+        }
+    }
+    else if (dev_ctrl_db[device].device_params.state != BCMOLT_DEVICE_STATE_CONNECTING)
+    {
+        msg->err = dev_ctrl_validate_msg(device, msg);
+        if (msg->err == BCM_ERR_OK)
+        {
+            dev_ctrl_process_msg(device, msg);
+        }
+        else
+        {
+            msg->dir = BCMOLT_MSG_DIR_RESPONSE;
+            bcmtrmux_control_to_host(device, msg);
+            bcmolt_msg_free(msg);
+        }
+    }
+    else
+    {
+        bcmolt_msg_err(msg, DEV_LOG_INVALID_ID, BCM_ERR_STATE, BCMOLT_ERR_FIELD_NONE, "Device is busy");
+        msg->dir = BCMOLT_MSG_DIR_RESPONSE;
+        bcmtrmux_control_to_host(device, msg);
+        bcmolt_msg_free(msg);
+    }
+}
+
+static void dev_ctrl_mod_msg_release(bcmos_msg *os_msg)
+{
+    bcmolt_msg_free(container_of(os_msg, bcmolt_msg, os_msg));
+}
+
+static bcmos_msg dev_ctrl_ipc_msg = { .handler = dev_ctrl_mod_msg_handler, .release = dev_ctrl_mod_msg_release };
+
+static void bcmdev_rx_handler(bcmolt_devid device, bcmolt_msg *msg, void *data)
+{
+    bcmos_errno rc;
+
+    msg->os_msg = dev_ctrl_ipc_msg;
+    msg->os_msg.data = msg;
+    rc = bcmos_msg_send_to_module(dev_ctrl_db[device].module_info.module_id, &msg->os_msg, BCMOS_MSG_SEND_AUTO_FREE);
+    if (rc != BCM_ERR_OK)
+    {
+        BCM_LOG(ERROR, dev_ctrl_db[device].log_id,
+            "bcmos_msg_send_to_module returned error %s (%d), module id %d\n",
+            bcmos_strerror(rc),
+            rc,
+            dev_ctrl_db[device].module_info.module_id);
+    }
+}
+
+#ifndef IN_BAND
+static bcmos_timer_rc exception_monitor_timer_handler(bcmos_timer *timer, long data)
+{
+    bcmolt_devid device = (bcmolt_devid)data;
+    bcmos_errno rc;
+
+    if (!dev_ctrl_is_connected(dev_ctrl_db[device].device_params.state))
+    {
+        return BCM_ERR_OK; /* in case this happens during a disconnect/reset operation */
+    }
+
+    rc = dev_ctrl_get_exception_log_if_present(device);
+    if (rc != BCM_ERR_OK && rc != BCM_ERR_NOENT)
+    {
+        BCM_LOG(ERROR, dev_ctrl_db[device].log_id, "cant read Exception log for device %d error %s (%d)\n", device, bcmos_strerror(rc), rc);
+    }
+    return BCMOS_TIMER_OK;
+}
+#endif
+
+static bcmos_timer_rc device_response_timer_handler(bcmos_timer *timer, long data)
+{
+    bcmolt_devid device = (bcmolt_devid)data;
+    dev_ctrl_sm_call_state_cb(device, DEVICE_CONTROL_EVENT_DEVICE_TIMER_TIMEOUT, NULL);
+    return BCMOS_TIMER_OK;
+}
+
+static bcmos_timer_rc reset_delay_timer_handler(bcmos_timer *timer, long data)
+{
+    bcmos_errno rc = dev_ctrl_params.host_reset_cb();
+    if (rc != BCM_ERR_OK)
+    {
+        BCM_LOG(ERROR, dev_ctrl_db[(bcmolt_devid)data].log_id, "Host reset callback failed: %s (%d)\n", bcmos_strerror(rc), rc);
+    }
+    return BCMOS_TIMER_OK;
+}
+
+static bcmos_errno dev_ctrl_timer_create(
+    bcmolt_devid device,
+    bcmos_module_id module_id,
+    dev_ctrl_timer *timer,
+    const char *name,
+    bcmos_bool periodic,
+    F_bcmos_timer_handler handler)
+{
+    bcmos_timer_parm timer_params = {};
+    bcmos_errno rc = BCM_ERR_OK;
+
+    snprintf(timer->name, sizeof(timer->name), "dev_ctrl_%s_timer%u", name, device);
+    timer_params.name = timer->name;
+    timer_params.owner = module_id;
+    timer_params.periodic = periodic;
+    timer_params.handler = handler;
+    timer_params.data = device;
+    rc = bcmos_timer_create(&timer->timer, &timer_params);
+    if (rc != BCM_ERR_OK)
+    {
+        BCM_LOG(ERROR, dev_ctrl_db[device].log_id,
+            "'%s' timer creation failed, bcmos_timer_create returned error %s (%d)\n",
+            timer->name,
+            bcmos_strerror(rc),
+            rc);
+    }
+
+    return rc;
+}
+
+#ifndef IN_BAND
+static void dev_ctrl_link_up_down_cb(uint8_t dev_id, bcm_ll_pcie_link_status status)
+{
+    BCM_LOG(INFO, dev_ctrl_db[dev_id].log_id, "Device %u: PCIe link %s\n", dev_id, status == BCM_LL_PCIE_LINK_DOWN ? "down" : "up");
+}
+#endif
+
+static bcmtrmux_msg_dest dev_ctrl_msg_filter_cb(
+    bcmolt_devid device,
+    bcmolt_obj_id obj,
+    bcmolt_mgt_group group,
+    uint16_t subgroup)
+{
+    /* Device control should intercept the message if one of the two happens:
+     * 1. The message object is "device".
+     * 2. The message object is not "device", but the device is not ready, so an appropriate error should be returned to
+     *    the host application. */
+    bcmtrmux_msg_dest dest = BCMTRMUX_DEST_REMOTE;
+
+    if (!dev_ctrl_is_connected(dev_ctrl_db[device].device_params.state))
+    {
+        dest = BCMTRMUX_DEST_LOCAL;
+    }
+    else if (obj == BCMOLT_OBJ_ID_DEBUG)
+    {
+        dest = BCMTRMUX_DEST_LOCAL;
+    }
+    else if (obj == BCMOLT_OBJ_ID_DEVICE)
+    {
+        switch (group)
+        {
+        case BCMOLT_MGT_GROUP_OPER:
+            switch (subgroup)
+            {
+            case BCMOLT_DEVICE_OPER_ID_IMAGE_TRANSFER_START:
+            case BCMOLT_DEVICE_OPER_ID_IMAGE_TRANSFER_DATA:
+            case BCMOLT_DEVICE_OPER_ID_SW_UPGRADE_ACTIVATE:
+                return BCMTRMUX_DEST_REMOTE;
+            default:
+                return BCMTRMUX_DEST_LOCAL;
+            }
+            break;
+        default:
+            return BCMTRMUX_DEST_LOCAL;
+        }
+    }
+    return dest;
+}
+
+static void dev_ctrl_init_device_objects(bcmolt_devid device)
+{
+    dev_ctrl_clear_device_cfg(device);
+    dev_ctrl_init_connection_state(device);
+    dev_ctrl_db[device].device_params.state = BCMOLT_DEVICE_STATE_DISCONNECTED;
+    dev_ctrl_db[device].device_params.system_mode = BCMOLT_SYSTEM_MODE__NUM_OF;
+    dev_ctrl_db[device].boot_seq_info.polling_counter = BOOT_SEQ_POLLING_MAX_NUMBER;
+    dev_ctrl_db[device].boot_seq_info.polling_interval = BOOT_SEQ_POLL_INTERVAL_SEC * BCMOS_MICROSECONDS_IN_SECONDS;
+    dev_ctrl_db[device].corr_tag = 0;
+#ifdef ENABLE_LOG
+    dev_ctrl_db[device].sram_log_offset = 0;
+    dev_ctrl_db[device].msgs_read = 0;
+#endif
+
+#ifndef SIMULATION_BUILD
+    dev_ctrl_db[device].trx_disable_mask = 0xFFFF; /* Mark all PONs with TRX disabled. */
+#endif
+
+    dev_ctrl_db[device].conn_fail_reason = BCMOLT_HOST_CONNECTION_FAIL_REASON_NONE;
+    dev_ctrl_db[device].last_event = DEVICE_CONTROL_EVENT_NO_EVENT;
+}
+
+bcmos_errno bcmolt_dev_ctrl_host_event_write(uint32_t device, uint32_t event)
+{
+#ifndef IN_BAND
+    bcmolt_device_state state = dev_ctrl_db[device].device_params.state;
+#endif
+#ifndef SIMULATION_BUILD
+    /* Update local database, so that after reset we will be able to sync this value with the device. */
+    dev_ctrl_db[device].trx_disable_mask = event;
+#endif
+#ifndef IN_BAND
+    /* Notify device using SRAM, but only if we are already connected (otherwise FLD might be not ready). */
+    if (dev_ctrl_is_connected(state))
+        bcm_fld_set_host_event(device, event);
+#endif
+    return BCM_ERR_OK;
+}
+/*Use different function signatures linux kernel device control and other*/
+#if !defined(LINUX_USER_SPACE)
+bcmos_errno bcmolt_dev_ctrl_init(bcmolt_dev_ctrl_params *params)
+#else
+bcmos_errno bcmolt_dev_ctrl_init()
+#endif
+{
+    bcmolt_devid device;
+    bcmos_errno rc = BCM_ERR_OK;
+
+#if !defined(LINUX_USER_SPACE)
+    if (!params->system_mode_validate_cb ||
+        !params->image_read_cb ||
+        !params->device_off_cb ||
+        !params->device_on_cb ||
+        !params->device_is_running_cb ||
+        !params->host_reset_cb ||
+        !params->pcie_channel_prepare_cb ||
+        !params->pcie_channel_remove_cb)
+    {
+        BCMOS_TRACE_ERR("Missing required callbacks\n");
+        return BCM_ERR_PARM;
+    }
+
+    dev_ctrl_params = *params;
+#endif
+    rc = bcmtrmux_init(dev_ctrl_msg_filter_cb);
+    BCMOS_TRACE_CHECK_RETURN(rc, rc, "bcmtrmux_init()\n");
+
+#ifndef IN_BAND
+    rc = bcm_fld_init(BCMTR_MAX_OLTS);
+    BCMOS_TRACE_CHECK_RETURN(rc, rc, "bcm_fld_init()\n");
+#endif
+
+    for (device = 0; device < BCMTR_MAX_OLTS; device++)
+    {
+#ifdef ENABLE_LOG
+        char log_name[MAX_DEV_LOG_ID_NAME];
+        snprintf(log_name, sizeof(log_name) - 1, "dev_ctrl_%u", device);
+        dev_ctrl_db[device].log_id = bcm_dev_log_id_register(log_name, DEV_LOG_LEVEL_INFO, DEV_LOG_ID_TYPE_BOTH);
+#endif
+        dev_ctrl_init_device_objects(device);
+        image_buf[device] = bcmos_alloc(IMAGE_BUF_SIZE);
+        if (!image_buf[device])
+        {
+            BCM_LOG(ERROR, dev_ctrl_db[device].log_id, "Can't allocate packet buffer\n");
+            return BCM_ERR_NOMEM;
+        }
+        rd_image_buf[device] = bcmos_alloc(IMAGE_BUF_SIZE);
+        if (!rd_image_buf[device])
+        {
+            BCM_LOG(ERROR, dev_ctrl_db[device].log_id, "Can't allocate nh_packet buffer\n");
+            return BCM_ERR_NOMEM;
+        }
+        rc = dev_ctrl_init_tasks(device);
+        BCM_DEV_CTRL_RETURN_ON_ERROR(device, rc, "dev_ctrl_init_tasks()\n");
+
+        rc = dev_ctrl_init_modules(device);
+        BCM_DEV_CTRL_RETURN_ON_ERROR(device, rc, "dev_ctrl_init_modules()\n");
+
+        dev_ctrl_db[device].ka_info.orig = BCM_KEEP_ALIVE_MSG_ORIG_HOST;
+        dev_ctrl_db[device].ka_info.send_handler = dev_ctrl_ka_tx_handler;
+        dev_ctrl_db[device].ka_info.disconnect_handler = dev_ctrl_ka_disconnect_handler;
+        dev_ctrl_db[device].ka_info.device = device;
+        rc = create_keep_alive_timer(&dev_ctrl_db[device].ka_info, dev_ctrl_db[device].module_info.module_id);
+        BCM_DEV_CTRL_RETURN_ON_ERROR(device, rc, "create_keep_alive_timer()\n");
+
+        rc = dev_ctrl_timer_create(
+            device,
+            dev_ctrl_db[device].module_info.module_id,
+            &dev_ctrl_db[device].connection_info.timer,
+            "connection",
+            BCMOS_FALSE, /* non-periodic */
+            dev_ctrl_connection_timer_handler);
+        BCMOS_CHECK_RETURN_ERROR(rc, rc);
+
+#ifndef IN_BAND
+        rc = dev_ctrl_timer_create(
+            device,
+            dev_ctrl_db[device].module_info.module_id,
+            &dev_ctrl_db[device].boot_seq_info.timer,
+            "boot_seq",
+            BCMOS_TRUE, /* periodic */
+            dev_ctrl_boot_seq_timer_handler);
+        BCMOS_CHECK_RETURN_ERROR(rc, rc);
+
+        rc = dev_ctrl_timer_create(
+            device,
+            dev_ctrl_db[device].module_info.module_id,
+            &dev_ctrl_db[device].exception_monitor_timer,
+            "exception_monitor",
+            BCMOS_TRUE, /* periodic */
+            exception_monitor_timer_handler);
+        BCMOS_CHECK_RETURN_ERROR(rc, rc);
+#endif
+        rc = dev_ctrl_timer_create(
+            device,
+            dev_ctrl_db[device].module_info.module_id,
+            &dev_ctrl_db[device].device_response_timer,
+            "device_response",
+            BCMOS_FALSE, /* non-periodic */
+            device_response_timer_handler);
+        BCMOS_CHECK_RETURN_ERROR(rc, rc);
+
+        rc = dev_ctrl_timer_create(
+            device,
+            dev_ctrl_db[device].module_info.module_id,
+            &dev_ctrl_db[device].reset_delay_timer,
+            "reset_delay",
+            BCMOS_FALSE, /* non-periodic */
+            reset_delay_timer_handler);
+        BCMOS_CHECK_RETURN_ERROR(rc, rc);
+
+        /* Register callback to MUX */
+        rc = bcmtrmux_local_handler_register(device, bcmdev_rx_handler, (void *)(long)device);
+        BCM_DEV_CTRL_RETURN_ON_ERROR(device, rc, "bcmtrmux_local_handler_register()\n");
+
+        /* Intercept CONNECTION_ESTABLISHED, DEVICE_READY, KEEP_ALIVE messages */
+        rc = bcmtrmux_control_auto_intercept_filter(
+            device,
+            BCMOLT_OBJ_ID_DEVICE,
+            BCMOLT_DEVICE_AUTO_ID_CONNECTION_ESTABLISHED);
+        rc = rc ? rc : bcmtrmux_control_auto_intercept_filter(
+            device,
+            BCMOLT_OBJ_ID_DEVICE,
+            BCMOLT_DEVICE_AUTO_ID_DEVICE_READY);
+        rc = rc ? rc : bcmtrmux_control_auto_intercept_filter(
+            device,
+            BCMOLT_OBJ_ID_DEVICE,
+            BCMOLT_DEVICE_AUTO_ID_DEVICE_KEEP_ALIVE);
+        BCM_DEV_CTRL_RETURN_ON_ERROR(device, rc, "bcmtrmux_control_auto_intercept_filter()\n");
+    }
+#ifndef IN_BAND
+    /* Register for link_up / link_down interrupt */
+    bcm_ll_pcie_status_change_register(dev_ctrl_link_up_down_cb);
+#endif
+
+    bcmolt_debug_ctrl_init();
+
+    return rc;
+}
+
+void bcmolt_dev_ctrl_exit(void)
+{
+#ifndef IN_BAND
+    bcmolt_devid device;
+
+    for (device = 0; device < BCMTR_MAX_OLTS; device++)
+    {
+        bcmtrmux_local_handler_unregister(device);
+        bcmos_free(image_buf[device]);
+        bcmos_free(rd_image_buf[device]);
+        bcmos_timer_destroy(&dev_ctrl_db[device].connection_info.timer.timer);
+        bcmos_timer_destroy(&dev_ctrl_db[device].ka_info.ka_timer.timer);
+        bcmos_timer_destroy(&dev_ctrl_db[device].boot_seq_info.timer.timer);
+        bcmos_timer_destroy(&dev_ctrl_db[device].exception_monitor_timer.timer);
+        bcmos_timer_destroy(&dev_ctrl_db[device].device_response_timer.timer);
+        bcmos_timer_destroy(&dev_ctrl_db[device].reset_delay_timer.timer);
+        bcmos_module_destroy(dev_ctrl_db[device].module_info.module_id);
+        bcmos_task_destroy(&dev_ctrl_db[device].task_info.task);
+    }
+#endif
+#ifndef IN_BAND
+    bcm_fld_exit();
+#endif
+    bcmtrmux_exit();
+#ifndef IN_BAND
+    bcm_ll_pcie_status_change_unregister();
+#endif
+}
diff --git a/bcm68620_release/release/host_driver/dev_ctrl/bcmolt_dev_ctrl.h b/bcm68620_release/release/host_driver/dev_ctrl/bcmolt_dev_ctrl.h
new file mode 100644
index 0000000..7187ba3
--- /dev/null
+++ b/bcm68620_release/release/host_driver/dev_ctrl/bcmolt_dev_ctrl.h
@@ -0,0 +1,205 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef _BCMOLT_DEV_CTRL_H_
+#define _BCMOLT_DEV_CTRL_H_
+
+#include <bcmos_system.h>
+#include <bcmolt_msg.h>
+#include <bcmolt_model_types.h>
+#include "bcm_keep_alive.h"
+#include "bcmolt_fld.h"
+#include "bcmolt_sw_error.h"
+
+typedef int (*bcmolt_dev_ctrl_cb_image_read)(
+    bcmolt_devid device,
+    bcmolt_device_image_type image_type,
+    uint32_t offset,
+    uint8_t *buf,
+    uint32_t buf_size);
+typedef bcmos_errno (*bcmolt_dev_ctrl_cb_system_mode_validate)(bcmolt_devid device, bcmolt_system_mode system_mode);
+typedef bcmos_errno (*bcmolt_dev_ctrl_cb_device_off)(bcmolt_devid device);
+typedef bcmos_errno (*bcmolt_dev_ctrl_cb_device_on)(bcmolt_devid device);
+typedef bcmos_errno (*bcmolt_dev_ctrl_cb_device_is_running)(bcmolt_devid device, bcmos_bool *is_running);
+typedef bcmos_errno (*bcmolt_dev_ctrl_cb_host_reset)(void);
+typedef bcmos_errno (*bcmolt_dev_ctrl_cb_pcie_channel_prepare)(bcmolt_devid device);
+typedef bcmos_errno (*bcmolt_dev_ctrl_cb_pcie_channel_remove)(bcmolt_devid device);
+typedef bcmos_errno (*bcmolt_dev_ctrl_cb_pcie_status_get)(bcmolt_devid device, bcmos_bool *is_prepared);
+
+typedef struct
+{
+    bcmolt_dev_ctrl_cb_system_mode_validate    system_mode_validate_cb;
+    bcmolt_dev_ctrl_cb_image_read              image_read_cb;
+    bcmolt_dev_ctrl_cb_device_off              device_off_cb;
+    bcmolt_dev_ctrl_cb_device_on               device_on_cb;
+    bcmolt_dev_ctrl_cb_device_is_running       device_is_running_cb;
+    bcmolt_dev_ctrl_cb_host_reset              host_reset_cb;
+    bcmolt_dev_ctrl_cb_pcie_channel_prepare    pcie_channel_prepare_cb;
+    bcmolt_dev_ctrl_cb_pcie_channel_remove     pcie_channel_remove_cb;
+} bcmolt_dev_ctrl_params;
+
+#define DEVICE_CONTROL_MSG_QUEUE_SIZE  BCMOS_MSG_POOL_DEFAULT_SIZE
+#define IMAGE_BUF_SIZE                 (1 * 1024 * 1024) /* 1MB */
+#define BOOT_SEQ_POLL_INTERVAL_SEC     1
+#define BOOT_SEQ_POLLING_MAX_NUMBER    5
+#define DDR_TEST_POLLING_MAX_NUMBER    20
+#define DEVICE_CONTROL_CONFIG_TIME_US  (15 * 1000000) /* 15 seconds */
+#define DEVICE_CONTROL_CONNECT_TIME_US (40 * 1000000) /* 40 seconds */
+#define CONFIG_SEND_MAX_NUMBER         2
+#define FILE_PATH_LEN                  128
+#define HOST_DMA_RX_DEFAULT_QUEUE_SIZE 128
+#define HOST_DMA_TX_DEFAULT_QUEUE_SIZE 128
+#define EXCEPTION_LOG_MONITOR_INTERVAL (5 * 1000000) /* 5 second */
+#define DEVICE_RESPONSE_TIMEOUT_LENGTH (2 * 100000)  /* 200 milliseconds */
+#define HOST_RESET_DELAY_US            100000 /* how long to wait before resetting the host via callback (100ms) */
+
+/* indicates successful connection - used internally, no need to expose this in the host-facing enum */
+#define BCMOLT_HOST_CONNECTION_FAIL_REASON_NONE ((bcmolt_host_connection_fail_reason)0xFF)
+
+typedef enum
+{
+    DEVICE_CONTROL_EVENT_DEVICE_CLEAR,
+    DEVICE_CONTROL_EVENT_DEVICE_CONFIG_SET,
+    DEVICE_CONTROL_EVENT_DEVICE_CONFIG_GET,
+    DEVICE_CONTROL_EVENT_DEVICE_TIMER_TIMEOUT,
+    DEVICE_CONTROL_EVENT_DEVICE_RECEIVED_ACK,
+    DEVICE_CONTROL_EVENT_DEVICE_DISCONNECT,
+    DEVICE_CONTROL_EVENT_DEVICE_CONNECT,
+    DEVICE_CONTROL_EVENT_DEVICE_RESET,
+    DEVICE_CONTROL_EVENT_CONNECTION_FAILURE,
+    DEVICE_CONTROL_EVENT_CONNECTION_ESTABLISHED,
+    DEVICE_CONTROL_EVENT_DEVICE_READY,
+    DEVICE_CONTROL_EVENT_RUN_DDR_TEST,
+    DEVICE_CONTROL_EVENT_DDR_TEST_COMPLETED,
+    DEVICE_CONTROL_EVENT_DDR_TEST_TIMEOUT,
+
+    DEVICE_CONTROL_EVENT__NUM_OF,
+    DEVICE_CONTROL_EVENT_NO_EVENT = DEVICE_CONTROL_EVENT__NUM_OF
+} dev_ctrl_event;
+
+typedef enum
+{
+    DEV_CTRL_CONNECTING_STATE_ESTABLISHING, /* writing software via FLD, waiting for "connection established" */
+    DEV_CTRL_CONNECTING_STATE_CONFIGURING,  /* connection established, cfg sent, waiting for "device ready" */
+    DEV_CTRL_CONNECTING_STATE_STANDALONE,   /* connecting to a standalone device, waiting for "device ready" */
+} dev_ctrl_connecting_state;
+
+typedef struct
+{
+    char name[MAX_TASK_NAME_SIZE];
+    bcmos_task task;
+} dev_ctrl_task;
+
+typedef struct
+{
+    char name[MAX_MODULE_NAME_SIZE];
+    bcmos_module_id module_id;
+} dev_ctrl_module;
+
+typedef struct
+{
+    char name[MAX_TIMER_NAME_SIZE];
+    bcmos_timer timer;
+} dev_ctrl_timer;
+
+typedef struct
+{
+    uint32_t pcie_addr;
+} dev_ctrl_pcie;
+
+typedef struct
+{
+    dev_ctrl_connecting_state state;
+    uint32_t                  config_send_counter;
+    uint32_t                  config_interval;
+    dev_ctrl_timer            timer;
+} dev_ctrl_connection;
+
+typedef struct
+{
+    uint32_t             polling_counter;
+    uint32_t             polling_interval;
+    dev_ctrl_timer       timer;
+} dev_ctrl_boot_seq;
+
+typedef struct
+{
+    dev_ctrl_task           task_info;
+    dev_ctrl_module         module_info;
+    dev_ctrl_connection     connection_info;
+    dev_ctrl_pcie           pcie_info;
+    bcmos_keep_alive_info   ka_info;
+    dev_ctrl_boot_seq       boot_seq_info;
+    bcm_fld_device_info     fld_info;
+    bcmolt_device_cfg_data  device_params;
+    bcmolt_presence_mask    device_params_present;
+    dev_ctrl_timer          exception_monitor_timer;
+    uint16_t                corr_tag;
+    bcmolt_msg *            last_message;
+    dev_ctrl_timer          device_response_timer;
+    dev_ctrl_timer          reset_delay_timer;
+    bcmos_bool              is_host_reset_pending;
+#ifdef ENABLE_LOG
+    uint32_t                sram_log_offset;
+    uint32_t                msgs_read;
+#endif
+    bcmolt_control_state    enable_tod;
+#ifndef SIMULATION_BUILD
+    uint32_t                trx_disable_mask;
+#endif
+    dev_ctrl_event last_event;
+    bcmolt_host_connection_fail_reason conn_fail_reason;
+    uint32_t sw_error_count;
+    bcmolt_sw_error sw_errors[30];
+    dev_log_id log_id;
+} dev_ctrl_database;
+
+typedef void (*dev_ctrl_sm_cb)(bcmolt_devid device, const bcmolt_msg *msg);
+
+#define DEVICE_ID_FROM_MODULE_ID(module_id) ((bcmolt_devid)(module_id - BCMOS_MODULE_ID_DEV_CTRL_DEV0))
+#define MODULE_ID_FROM_DEVICE_ID(device) ((bcmos_module_id)(device + BCMOS_MODULE_ID_DEV_CTRL_DEV0))
+
+const char *bcm_str_device_state(bcmolt_device_state device_state);
+const char *bcm_str_device_event(dev_ctrl_event device_event);
+const char *bcm_str_host_connection_fail_reason(bcmolt_host_connection_fail_reason reason);
+const char *bcm_str_host_connecting_state(dev_ctrl_connecting_state state);
+void dev_ctrl_read_db(bcmolt_devid device, dev_ctrl_database *db);
+
+bcmos_errno bcmolt_dev_ctrl_host_event_write(uint32_t device, uint32_t event);
+
+/*Use different function signatures linux kernel device control and other*/
+#if !defined(LINUX_USER_SPACE)
+bcmos_errno bcmolt_dev_ctrl_init(bcmolt_dev_ctrl_params *params);
+#else
+bcmos_errno bcmolt_dev_ctrl_init(void);
+#endif
+
+void bcmolt_dev_ctrl_exit(void);
+
+#endif
diff --git a/bcm68620_release/release/host_driver/dev_ctrl_daemon/Makefile b/bcm68620_release/release/host_driver/dev_ctrl_daemon/Makefile
new file mode 100644
index 0000000..3379a59
--- /dev/null
+++ b/bcm68620_release/release/host_driver/dev_ctrl_daemon/Makefile
@@ -0,0 +1,22 @@
+# Device control driver
+MOD_NAME = dev_ctrl_daemon
+MOD_DEPS = trmux  debug_common keep_alive 
+
+ifneq ("$(SIMULATION_BUILD)", "y")
+	MOD_DEPS += trmux_daemon keep_alive_daemon
+endif
+
+MOD_INC_DIRS = $(SRC_DIR)
+
+ifeq ("$(RELEASE_BUILD)", "y")
+    MOD_INC_DIRS += host_driver/sw_version host_driver/sw_error host_driver/mh_utils
+else
+    MOD_INC_DIRS += host/sw_version $(TOP_DIR)/common/sw_error $(TOP_DIR)/common/mh_utils
+endif
+
+MOD_TYPE = lib
+
+MOD_DEFS += -DIN_BAND
+
+srcs = bcmolt_dev_ctrl_ib.c bcmolt_debug_ctrl_ib.c
+
diff --git a/bcm68620_release/release/host_driver/dev_ctrl_daemon/bcmolt_debug_ctrl.h b/bcm68620_release/release/host_driver/dev_ctrl_daemon/bcmolt_debug_ctrl.h
new file mode 120000
index 0000000..0a25253
--- /dev/null
+++ b/bcm68620_release/release/host_driver/dev_ctrl_daemon/bcmolt_debug_ctrl.h
@@ -0,0 +1 @@
+../dev_ctrl/bcmolt_debug_ctrl.h
\ No newline at end of file
diff --git a/bcm68620_release/release/host_driver/dev_ctrl_daemon/bcmolt_debug_ctrl_ib.c b/bcm68620_release/release/host_driver/dev_ctrl_daemon/bcmolt_debug_ctrl_ib.c
new file mode 120000
index 0000000..3637829
--- /dev/null
+++ b/bcm68620_release/release/host_driver/dev_ctrl_daemon/bcmolt_debug_ctrl_ib.c
@@ -0,0 +1 @@
+../dev_ctrl/bcmolt_debug_ctrl.c
\ No newline at end of file
diff --git a/bcm68620_release/release/host_driver/dev_ctrl_daemon/bcmolt_dev_ctrl.h b/bcm68620_release/release/host_driver/dev_ctrl_daemon/bcmolt_dev_ctrl.h
new file mode 120000
index 0000000..3b0509c
--- /dev/null
+++ b/bcm68620_release/release/host_driver/dev_ctrl_daemon/bcmolt_dev_ctrl.h
@@ -0,0 +1 @@
+../dev_ctrl/bcmolt_dev_ctrl.h
\ No newline at end of file
diff --git a/bcm68620_release/release/host_driver/dev_ctrl_daemon/bcmolt_dev_ctrl_ib.c b/bcm68620_release/release/host_driver/dev_ctrl_daemon/bcmolt_dev_ctrl_ib.c
new file mode 120000
index 0000000..623bd97
--- /dev/null
+++ b/bcm68620_release/release/host_driver/dev_ctrl_daemon/bcmolt_dev_ctrl_ib.c
@@ -0,0 +1 @@
+../dev_ctrl/bcmolt_dev_ctrl.c
\ No newline at end of file
diff --git a/bcm68620_release/release/host_driver/dev_ctrl_daemon/user/Makefile b/bcm68620_release/release/host_driver/dev_ctrl_daemon/user/Makefile
new file mode 100644
index 0000000..f1d01ca
--- /dev/null
+++ b/bcm68620_release/release/host_driver/dev_ctrl_daemon/user/Makefile
@@ -0,0 +1,14 @@
+ifneq ("$(SIMULATION_BUILD)", "y")
+
+MOD_NAME = bcm_dev_ctrl_user
+MOD_TYPE = app
+MOD_DEPS = udtr os_cli user_config host_api dev_ctrl_daemon trmux_daemon keep_alive_daemon
+
+ifeq ("$(ENABLE_CLI)", "y")
+	MOD_DEPS += api_cli embedded_cli
+endif
+
+srcs = bcmolt_dev_ctrl_user.c
+
+endif
+
diff --git a/bcm68620_release/release/host_driver/dev_ctrl_daemon/user/bcmolt_dev_ctrl_user.c b/bcm68620_release/release/host_driver/dev_ctrl_daemon/user/bcmolt_dev_ctrl_user.c
new file mode 100755
index 0000000..baa7229
--- /dev/null
+++ b/bcm68620_release/release/host_driver/dev_ctrl_daemon/user/bcmolt_dev_ctrl_user.c
@@ -0,0 +1,72 @@
+#include <bcmolt_tr_ud_driver.h>
+#include <bcm_dev_log.h>
+#include <bcmolt_dev_ctrl.h>
+#include <bcmolt_tr_mux.h>
+#include <bcmos_system.h>
+#include <bcmolt_user_utils.h>
+#include <bcmolt_host_api.h>
+#include <bcmolt_fld.h>
+#include <bcmtr_pcie.h>
+
+extern struct proc_dir_entry *bcmolt_dir;
+
+bcmos_errno bcmtr_init(void)
+{
+    return BCM_ERR_OK;
+}
+
+#ifdef ENABLE_LOG
+#define DEV_LOG_SIZE1 1<<11
+#define DEV_LOG_SIZE2 1<<13
+#define DEV_LOG_QUEUE_SIZE 1000
+
+static bcmos_errno dev_ctrl_logger_init_cb(void)
+{
+    bcmos_errno rc;
+    static uint8_t logger_buf1[DEV_LOG_SIZE1];
+    static uint8_t logger_buf2[DEV_LOG_SIZE2];
+    void *addresses[DEV_LOG_MAX_FILES] = {logger_buf1, logger_buf2};
+    uint32_t sizes[DEV_LOG_MAX_FILES] = {sizeof(logger_buf1), sizeof(logger_buf2)};
+    uint32_t flags[DEV_LOG_MAX_FILES] = {BCM_DEV_LOG_FILE_FLAG_STOP_WHEN_FULL, BCM_DEV_LOG_FILE_FLAG_WRAP_AROUND};
+
+    rc = bcm_dev_log_init_default_logger(addresses, sizes, flags, BCM_SIZEOFARRAY(addresses), 0x4000, TASK_PRIORITY_DEV_LOG, DEV_LOG_QUEUE_SIZE);
+    BCMOS_TRACE_CHECK_RETURN(rc, rc, "bcm_dev_log_initialize_dev_logger_default()\n");
+
+    /* For now just map BCMOS_TRACE_XX to dev_log. Later on dev_control
+     * can define its own log ids
+     */
+    //rc = bcm_dev_log_os_trace_init();
+    //BUG_ON(rc);
+
+    return rc;
+}
+#endif
+
+
+
+int main(int argc, char *argv[])
+{
+    bcmos_errno rc;
+    bcmolt_host_init_params params =
+    {
+#ifdef ENABLE_LOG
+        .logger_init_cb = dev_ctrl_logger_init_cb,
+#endif
+        .run_dev_ctrl = BCMOS_TRUE
+    };
+
+    rc = bcmolt_host_init(&params);
+    BUG_ON(rc);
+
+    bcmos_trace_level_set(BCMOS_TRACE_LEVEL_DEBUG);
+
+    rc = bcmtr_ud_init();  /*  Never returns - runs accept loop */
+    BUG_ON(rc);
+
+    while (BCMOS_TRUE)
+    {
+        bcmos_usleep(5*1000*1000);
+        bcmos_printf("Waiting\n");
+    }
+}
+
diff --git a/bcm68620_release/release/host_driver/fld/Makefile b/bcm68620_release/release/host_driver/fld/Makefile
new file mode 100644
index 0000000..b4571ca
--- /dev/null
+++ b/bcm68620_release/release/host_driver/fld/Makefile
@@ -0,0 +1,38 @@
+# FLD driver
+# - low-level FLD driver (load functions)
+#
+MOD_NAME = fld
+MOD_DEPS = model
+
+ifneq ("$(RELEASE_BUILD)", "y")
+    MOD_INC_DIRS = $(SRC_DIR) common/drivers/$(PLATFORM)/fld
+endif
+
+ifeq ("$(ENABLE_TRACE)", "y")
+	MOD_DEFS += -DTX_ENABLE_EVENT_TRACE
+    ifeq ("$(DEBUG_TRACE_INIT)", "y")
+       MOD_DEFS += -DDEBUG_TRACE_INIT
+    endif
+endif
+
+ifeq ("$(OS_KERNEL)", "linux")
+MOD_TYPE = linux_lib
+else
+MOD_TYPE = lib
+endif
+
+# If called by linux kernel builder - add include paths manually.
+# It is not elegant, but we'll not have many linux modules
+ifneq ("$(KBUILD_SRC)", "")
+	-include $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
+endif
+
+# Disable "cast increases required alignment of target type" warning. 
+# There are places in the code with casting from (uint8_t *) to (uint32_t *), but in fact
+# the buffer is well-aligned. 
+EXTRA_CFLAGS += -Wno-error=cast-align
+
+srcs = bcmolt_fld.c
+
+USE_LINT = yes
+
diff --git a/bcm68620_release/release/host_driver/fld/bcm_fld_common.h b/bcm68620_release/release/host_driver/fld/bcm_fld_common.h
new file mode 100644
index 0000000..236c32d
--- /dev/null
+++ b/bcm68620_release/release/host_driver/fld/bcm_fld_common.h
@@ -0,0 +1,245 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef BCM_FLD_COMMON_H
+#define BCM_FLD_COMMON_H
+
+#define BCM_FLD_SRAM_SIZE                           0x00010000 /* 64 KB */
+
+/******************************/
+/* FLD communication area */
+/******************************/
+#define COMM_WORD_SIZE                              4                   /* 32 bit, 4 byte */
+#define BCM_FLD_COMMUNICATION_AREA_TOP              BCM_FLD_SRAM_SIZE
+
+/* Please do not change PCIE_OPAQUE_DATA_SIZE define, MUST be same as used by pcie dma driver */
+#define PCIE_OPAQUE_DATA_SIZE                       (2*4)               /* two pointers (BD and SBD) */
+
+#define BOOTRECORD_RESERVED                         (2*COMM_WORD_SIZE)  /* 4 words reserved for future needs */
+#define BCM_FLD_CPU_POSTMORTEM_BUF_SIZE             0x00001000
+
+#define BCM_FLD_CPU_STATE_OFFSET                    (BCM_FLD_COMMUNICATION_AREA_TOP       - COMM_WORD_SIZE)     /* 0xfffc */
+#define BCM_FLD_HOST_STATE_OFFSET                   (BCM_FLD_CPU_STATE_OFFSET             - COMM_WORD_SIZE)
+#define BCM_FLD_CPU_DEBUG_STATE_OFFSET              (BCM_FLD_HOST_STATE_OFFSET            - COMM_WORD_SIZE)
+#define BCM_FLD_HOST_DEBUG_STATE_OFFSET             (BCM_FLD_CPU_DEBUG_STATE_OFFSET       - COMM_WORD_SIZE)
+#define BCM_FLD_CPU_BOOTREC_STATE_OFFSET            (BCM_FLD_HOST_DEBUG_STATE_OFFSET      - COMM_WORD_SIZE)
+#define BCM_FLD_HOST_BOOTREC_STATE_OFFSET           (BCM_FLD_CPU_BOOTREC_STATE_OFFSET     - COMM_WORD_SIZE)
+
+#define BCM_FLD_CPU_RESET_REASON_OFFSET             (BCM_FLD_HOST_BOOTREC_STATE_OFFSET    - COMM_WORD_SIZE)
+#define BCM_FLD_CPU_EXCEP_REASON_OFFSET             (BCM_FLD_CPU_RESET_REASON_OFFSET      - COMM_WORD_SIZE)
+#define BCM_FLD_CPU_DDR_MEMC_STATE_OFFSET           (BCM_FLD_CPU_EXCEP_REASON_OFFSET      - COMM_WORD_SIZE)
+#define BCM_FLD_RAS_0_DDR_MEMC_STATE_OFFSET         (BCM_FLD_CPU_DDR_MEMC_STATE_OFFSET    - COMM_WORD_SIZE)
+#define BCM_FLD_RAS_1_DDR_MEMC_STATE_OFFSET         (BCM_FLD_RAS_0_DDR_MEMC_STATE_OFFSET  - COMM_WORD_SIZE)
+
+#define BCM_FLD_CPU_DDR_PHY_STATE_OFFSET            (BCM_FLD_RAS_1_DDR_MEMC_STATE_OFFSET  - COMM_WORD_SIZE)
+#define BCM_FLD_RAS_0_DDR_PHY_STATE_OFFSET          (BCM_FLD_CPU_DDR_PHY_STATE_OFFSET     - 6*COMM_WORD_SIZE)
+#define BCM_FLD_RAS_1_DDR_PHY_STATE_OFFSET          (BCM_FLD_RAS_0_DDR_PHY_STATE_OFFSET   - 6*COMM_WORD_SIZE)
+#define BCM_FLD_BOOT_PROTOCOL_VERSION_OFFSET        (BCM_FLD_RAS_1_DDR_PHY_STATE_OFFSET   - 6*COMM_WORD_SIZE)
+#define BCM_FLD_OS_ENTRY_OFFSET                     (BCM_FLD_BOOT_PROTOCOL_VERSION_OFFSET - COMM_WORD_SIZE)
+#define BCM_FLD_CPU_SET_QUEUES_SIZE                 (BCM_FLD_OS_ENTRY_OFFSET - COMM_WORD_SIZE)
+
+/******************************/
+/* Boot-record  area */
+/******************************/
+/* host write for SoC its rx queue size */
+#define BCM_FLD_HOST_RX_QUEUE_SIZE_OFFSET           (BCM_FLD_CPU_SET_QUEUES_SIZE - COMM_WORD_SIZE)
+#define BCM_FLD_CPU_RX_QUEUE_SIZE_OFFSET            (BCM_FLD_HOST_RX_QUEUE_SIZE_OFFSET - COMM_WORD_SIZE)
+
+#define BCM_FLD_CPU_BOOTRECORD_OFFSET               (BCM_FLD_CPU_RX_QUEUE_SIZE_OFFSET - BOOTRECORD_RESERVED)
+
+#define BCM_FLD_HOST_BOOTRECORD_OFFSET              (BCM_FLD_CPU_BOOTRECORD_OFFSET - PCIE_OPAQUE_DATA_SIZE - BOOTRECORD_RESERVED )
+
+#define BCM_FLD_CPU1_POSTMORTEM_STATE               (BCM_FLD_HOST_BOOTRECORD_OFFSET - COMM_WORD_SIZE)
+#define BCM_FLD_CPU0_POSTMORTEM_STATE               (BCM_FLD_CPU1_POSTMORTEM_STATE - COMM_WORD_SIZE)
+
+#define BCM_FLD_RAS_0_SETTINGS                      (BCM_FLD_CPU0_POSTMORTEM_STATE - COMM_WORD_SIZE)
+#define BCM_FLD_RAS_1_SETTINGS                      (BCM_FLD_RAS_0_SETTINGS - COMM_WORD_SIZE)
+
+#define BCM_RAS_DISABLE                              0x0
+#define BCM_RAS_MODE_GPON                            0x1
+#define BCM_RAS_MODE_XGPON                           0x2
+
+#define BCM_FLD_AVS_SETTINGS                         (BCM_FLD_RAS_1_SETTINGS - COMM_WORD_SIZE)
+#define BCM_FLD_AVS_STOP                             0x0
+#define BCM_FLD_AVS_CONT                             0x1
+
+#ifdef TX_ENABLE_EVENT_TRACE
+#define BCM_FLD_EVENT_TRACE_OFFSET                   (BCM_FLD_AVS_SETTINGS - COMM_WORD_SIZE)
+
+/*********************************************************************************
+ PAY ATTENTION !!! BCM_FLD_COMMUNICATION_AREA_BASE must be equal first byte in the FLD
+            communication area therefore  it should be equal to the last define above
+*********************************************************************************/
+
+#define BCM_FLD_COMMUNICATION_AREA_BASE             BCM_FLD_EVENT_TRACE_OFFSET
+#else
+#define BCM_FLD_COMMUNICATION_AREA_BASE             BCM_FLD_RAS_1_SETTINGS
+#endif
+#define BCM_FLD_COMMUNICATION_AREA_SIZE             BCM_FLD_COMMUNICATION_AREA_TOP - BCM_FLD_COMMUNICATION_AREA_BASE
+
+/*********************************************************************************
+ PAY ATTENTION !!! POSTMORTEM_BUF_OFFSET must be outside the communication area
+             therefore  it should be defined from BCM_FLD_COMMUNICATION_AREA_BASE
+*********************************************************************************/
+
+#define BCM_FLD_CPU1_POSTMORTEM_BUF_OFFSET          (BCM_FLD_COMMUNICATION_AREA_BASE - BCM_FLD_CPU_POSTMORTEM_BUF_SIZE)
+#define BCM_FLD_CPU0_POSTMORTEM_BUF_OFFSET          (BCM_FLD_CPU1_POSTMORTEM_BUF_OFFSET - BCM_FLD_CPU_POSTMORTEM_BUF_SIZE)
+#define BCM_FLD_HOST_EVENT                          (BCM_FLD_CPU0_POSTMORTEM_BUF_OFFSET - COMM_WORD_SIZE)
+
+#define BCM_FLD_DDR_TEST_RESULTS_SIZE               (3 * COMM_WORD_SIZE) /* CPU + RAS 0 + RAS 1 */
+#define BCM_FLD_DDR_TEST_RESULTS                    (BCM_FLD_HOST_EVENT - BCM_FLD_DDR_TEST_RESULTS_SIZE)
+
+/* SW Error table */
+#define BCM_FLD_SW_ERROR_TABLE_SIZE                 (1171 * COMM_WORD_SIZE)
+#define BCM_FLD_SW_ERROR_TABLE                      (BCM_FLD_DDR_TEST_RESULTS - BCM_FLD_SW_ERROR_TABLE_SIZE)
+
+/* logger will NOT overwrite other fields */
+#define BCM_FLD_LOGGER_TOP                          BCM_FLD_SW_ERROR_TABLE
+#define BCM_FLD_LOGGER_BASE                         0 /* logger will overwrite the bootloader */
+
+/* BCM68620 (Maple) functional states */
+#define BCM_FLD_CPU_FINISH_BOOTLOADER_SHIFT         0
+#define BCM_FLD_CPU_FINISH_BOOTLOADER_MASK          (0x1 << BCM_FLD_CPU_FINISH_BOOTLOADER_SHIFT)
+
+#define BCM_FLD_CPU_READY_SHIFT                     1
+#define BCM_FLD_CPU_READY_MASK                      (0x1 << BCM_FLD_CPU_READY_SHIFT)
+
+#define BCM_FLD_DDR_TEST_DONE_SHIFT                 2
+#define BCM_FLD_DDR_TEST_DONE_MASK                  (0x1 << BCM_FLD_DDR_TEST_DONE_SHIFT)
+
+/* BCM68620 (Host) functional states */
+#define BCM_FLD_HOST_FINISH_WRITE_DDR_SHIFT         0
+#define BCM_FLD_HOST_FINISH_WRITE_DDR_MASK          (0x1 << BCM_FLD_HOST_FINISH_WRITE_DDR_SHIFT)
+
+#define BCM_FLD_HOST_RUN_CPU_DDR_TEST_SHIFT         1
+#define BCM_FLD_HOST_RUN_CPU_DDR_TEST_MASK          (0x1 << BCM_FLD_HOST_RUN_CPU_DDR_TEST_SHIFT)
+
+#define BCM_FLD_HOST_RUN_RAS_0_TEST_SHIFT           2
+#define BCM_FLD_HOST_RUN_RAS_0_TEST_MASK            (0x1 << BCM_FLD_HOST_RUN_RAS_0_TEST_SHIFT)
+
+#define BCM_FLD_HOST_RUN_RAS_1_TEST_SHIFT           3
+#define BCM_FLD_HOST_RUN_RAS_1_TEST_MASK            (0x1 << BCM_FLD_HOST_RUN_RAS_1_TEST_SHIFT)
+
+/* host bootrecord states */
+#define BCM_FLD_HOST_PRM_VALID_SHIFT                0
+#define BCM_FLD_HOST_PRM_VALID_MASK                 (0x1 << BCM_FLD_HOST_PRM_VALID_SHIFT)
+
+/* device bootrecord states */
+#define BCM_FLD_CPU_PRM_VALID_SHIFT                 0
+#define BCM_FLD_CPU_PRM_VALID_MASK                  (0x1 << BCM_FLD_CPU_PRM_VALID_SHIFT)
+
+/* queue validity flag */
+#define BCM_FLD_CPU_QUEUE_VALID_SHIFT               0
+#define BCM_FLD_CPU_QUEUE_VALID_MASK                (0x1 << BCM_FLD_CPU_QUEUE_VALID_SHIFT)
+
+/* CPU debug states */
+#define CPU_DEBUG_BOOT_FLASH        (1<<0)
+#define CPU_DEBUG_RUN__FROM_SRAM    (1<<1)
+#define CPU_DEBUG_LUT_DONE          (1<<2)
+#define CPU_DEBUG_B15_CFG_DONE      (1<<3)
+#define CPU_DEBUG_UART_INIT_DONE    (1<<4)
+#define CPU_DEBUG_CLEAR_BSS_DONE    (1<<5)
+#define CPU_DEBUG_RUN_C             (1<<6)
+#define CPU_DEBUG_FLASH_READ_FAILED (1<<7)
+#define CPU_DEBUG_OS_FAILED         (1<<8)
+
+/* CPU exception reason */
+#define CPU_EXCEP_UNDEF_INSTR       (1<<0)
+#define CPU_EXCEP_SW_INTR           (1<<1)
+#define CPU_EXCEP_PREFETCH_ABORT    (1<<2)
+#define CPU_EXCEP_DATA_ABORT        (1<<3)
+#define CPU_EXCEP_IRQ               (1<<4)
+#define CPU_EXCEP_FIQ               (1<<5)
+
+#ifndef __ASSEMBLER__
+/* SoC states values */
+typedef enum
+{
+    BCM_FLD_CPU_STATE_UNKNOWN,
+    BCM_FLD_SRAM_BOOT_DONE,
+    BCM_FLD_BOOT_FROM_DDR,
+    BCM_FLD_RUN_FROM_DDR,
+    BCM_FLD_CPU_READY,
+    BCM_FLD_HOST_READY,
+    BCM_FLD_CPU_FINISH_BOOTLOADER
+} BCM_FLD_CPU_STATE;
+
+/* SoC reset values */
+typedef enum
+{
+    BCM_FLD_CPU_RESET_UNKNOWN
+} BCM_FLD_CPU_RESET_REASON;
+
+typedef enum
+{
+    BCM_FLD_RAS_MODE_NOT_CONFIGURED,
+    BCM_FLD_RAS_MODE_GPON,
+    BCM_FLD_RAS_MODE_XGPON,
+    BCM_FLD_RAS_MODE_XGS_NGPON2,
+} BCM_FLD_RSM_MODE;
+
+typedef struct
+{
+    unsigned int magic;
+    unsigned int msg_len;
+    char msg[1];
+} BCM_FLD_POSTMORTEM_LOG;
+#endif
+
+#define BCM_FLD_POSTMORTEM_LOG_MAGIC      0xFEEDBACC
+
+/* device_debug_states */
+#define BCM_FLD_CPU_BOOT_FROM_SRAM_STATES_SHIFT     0
+#define BCM_FLD_CPU_BOOT_FROM_SRAM_STATES_MASK      0x000000ffU
+#define BCM_FLD_CPU_BOOT_FROM_SRAM_ERRORS_SHIFT     8
+#define BCM_FLD_CPU_BOOT_FROM_SRAM_ERRORS_MASK      0x0000ff00U
+#define BCM_FLD_CPU_BOOT_FROM_SRAM_EXCEPTION_SHIFT  16
+#define BCM_FLD_CPU_BOOT_FROM_SRAM_EXCEPTION_MASK   0x00ff0000U
+#define BCM_FLD_CPU_RUN_FROM_DDR_STATES_SHIFT       24
+#define BCM_FLD_CPU_RUN_FROM_DDR_STATES_MASK        0xff000000U
+/* host_debug_states */
+#define BCM_FLD_HOST_WRITE_SRAM_SHIFT               0
+#define BCM_FLD_HOST_WRITE_SRAM_MASK                0x00000001U
+#define BCM_FLD_HOST_START_CPU_SHIFT                1
+#define BCM_FLD_HOST_START_CPU_MASK                 0x00000002U
+#define BCM_FLD_HOST_WRITE_DDR_SHIFT                2
+#define BCM_FLD_HOST_WRITE_DDR_MASK                 0x00000004U
+
+#define CPU_2_PCIE_MEM_WIN0_BASE    0x90000000
+#define CPU_2_PCIE_MEM_WIN0_SIZE    0x00100000
+#define MAX_PMC_SIZE                0x8000
+
+#ifdef TX_ENABLE_EVENT_TRACE
+#define EVENT_BUFFER_SIZE           0x00600000 /* 6 Mbyte */
+/* leave 1 Mbyte gap between windows */
+#define CPU_2_PCIE_MEM_WIN1_BASE    CPU_2_PCIE_MEM_WIN0_BASE + CPU_2_PCIE_MEM_WIN0_SIZE + 0x100000
+#define CPU_2_PCIE_MEM_WIN1_SIZE    EVENT_BUFFER_SIZE
+#endif
+
+#endif
diff --git a/bcm68620_release/release/host_driver/fld/bcmolt_fld.c b/bcm68620_release/release/host_driver/fld/bcmolt_fld.c
new file mode 100644
index 0000000..d4e92b2
--- /dev/null
+++ b/bcm68620_release/release/host_driver/fld/bcmolt_fld.c
@@ -0,0 +1,850 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#include "bcmolt_fld.h"
+#ifdef TX_ENABLE_EVENT_TRACE
+#include "bcmolt_llpcie.h"
+#endif
+
+/* internal data base */
+static uint32_t max_bcm68620_device = 0;
+static bcm_fld_device_info *bcm68620_info = NULL;
+
+#define SRAM_ADDRESS(device,offset) (uint32_t *)(bcm68620_info[device].soc_sram_base + offset)
+
+bcmos_errno bcm_fld_init(uint32_t max_devices)
+{
+    max_bcm68620_device = max_devices;
+    bcm68620_info = (bcm_fld_device_info *)bcmos_alloc(max_devices * sizeof(bcm_fld_device_info));
+    if (!bcm68620_info)
+        return BCM_ERR_NOMEM;
+    memset(bcm68620_info, 0, max_devices * sizeof(bcm_fld_device_info));
+
+    return BCM_ERR_OK;
+}
+
+void bcm_fld_clear_comm_area(uint32_t device)
+{
+    memset((char *)SRAM_ADDRESS(device,BCM_FLD_COMMUNICATION_AREA_BASE), 0 ,BCM_FLD_COMMUNICATION_AREA_SIZE);
+#if defined(TX_ENABLE_EVENT_TRACE) && defined(DEBUG_TRACE_INIT)
+    bcm_ll_pcie_setrace(device);
+#endif
+}
+
+bcmos_errno bcm_fld_exit(void)
+{
+    if (bcm68620_info)
+        bcmos_free(bcm68620_info);
+
+    bcm68620_info = NULL;
+
+    return BCM_ERR_OK;
+}
+
+/* register a device to driver
+   returns the driver index, instead the user's
+   store the user,s information about the device */
+bcmos_errno bcm_fld_register(uint32_t device, bcm_fld_device_info *info)
+{
+    if (!info)
+        return BCM_ERR_PARM;
+
+    if (!bcm68620_info)
+        return BCM_ERR_NORES;
+
+    if (device >= max_bcm68620_device)
+        return BCM_ERR_RANGE;
+
+    if (bcm68620_info[device].soc_sram_base)
+        return BCM_ERR_ALREADY;
+
+    /* copy the information received from the user to uint32_ternal data base */
+    bcm68620_info[device].soc_sram_base = info->soc_sram_base;
+    bcm68620_info[device].soc_ddr_base = info->soc_ddr_base;
+    bcm68620_info[device].soc_regs_base = info->soc_regs_base;
+    bcm68620_info[device].soc_ddr_length = info->soc_ddr_length;
+
+    return BCM_ERR_OK;
+}
+
+/* remove a device from uint32_ternal data base */
+bcmos_errno bcm_fld_unregister(uint32_t device)
+{
+    if (!bcm68620_info)
+        return BCM_ERR_NORES;
+
+    if (device >= max_bcm68620_device)
+        return BCM_ERR_RANGE;
+
+    /* clear the uint32_ternal data base for the given device */
+    bcm68620_info[device].soc_sram_base = 0;
+    bcm68620_info[device].soc_ddr_base = 0;
+    bcm68620_info[device].soc_ddr_length = 0;
+    bcm68620_info[device].soc_crt_length = 0;
+    bcm68620_info[device].soc_regs_base = 0;
+
+    return BCM_ERR_OK;
+}
+
+/* read from communication area and return the soc state
+   reset reason and protocol version */
+bcmos_errno bcm_fld_get_device_status(uint32_t device, bcm_fld_device_stat *debug_state)
+{
+    if (!debug_state)
+        return BCM_ERR_PARM;
+
+    if (!bcm68620_info)
+        return BCM_ERR_NORES;
+
+    if (device >= max_bcm68620_device)
+        return BCM_ERR_RANGE;
+
+    /* read from SRAM os entry offset, CPU status, reason and protocol version */
+    debug_state->protocol_version   = bcm_pci_read32(SRAM_ADDRESS(device,BCM_FLD_BOOT_PROTOCOL_VERSION_OFFSET));
+    debug_state->state              = bcm_pci_read32(SRAM_ADDRESS(device,BCM_FLD_CPU_STATE_OFFSET));
+    debug_state->reason             = bcm_pci_read32(SRAM_ADDRESS(device,BCM_FLD_CPU_RESET_REASON_OFFSET));
+    debug_state->os_entry_offset    = bcm_pci_read32(SRAM_ADDRESS(device,BCM_FLD_OS_ENTRY_OFFSET));
+
+    return BCM_ERR_OK;
+}
+
+/* returns the last soc state */
+bcmos_errno bcm_fld_get_device_loading_state(uint32_t device, BCM_FLD_CPU_STATE *cpu_state)
+{
+    uint32_t temp;
+    volatile uint32_t value;
+
+    if (!cpu_state)
+        return BCM_ERR_PARM;
+
+    if (!bcm68620_info)
+        return BCM_ERR_NORES;
+
+    if (device >= max_bcm68620_device)
+        return BCM_ERR_RANGE;
+
+    value = bcm_pci_read32(SRAM_ADDRESS(device,BCM_FLD_CPU_STATE_OFFSET));
+    temp = value & BCM_FLD_CPU_READY_MASK;
+    if (temp)
+        *cpu_state = BCM_FLD_CPU_READY;
+    else
+    {
+        temp = value & BCM_FLD_CPU_FINISH_BOOTLOADER_MASK;
+        if (temp)
+            *cpu_state = BCM_FLD_CPU_FINISH_BOOTLOADER;
+        else
+            *cpu_state = BCM_FLD_CPU_STATE_UNKNOWN;
+    }
+
+    return BCM_ERR_OK;
+}
+
+/* write in communication area the current host status during loading process */
+bcmos_errno bcm_fld_host_finish_write_ddr(uint32_t device, uint32_t os_entry_address)
+{
+    if (!bcm68620_info)
+        return BCM_ERR_NORES;
+
+    if (device >= max_bcm68620_device)
+        return BCM_ERR_RANGE;
+
+    /* write os_entry address of the code from DDR */
+    bcm_pci_write32(SRAM_ADDRESS(device,BCM_FLD_OS_ENTRY_OFFSET), os_entry_address);
+    /* run code from DDR */
+    bcm_pci_write32(SRAM_ADDRESS(device,BCM_FLD_HOST_STATE_OFFSET), BCM_FLD_HOST_FINISH_WRITE_DDR_MASK);
+
+    return BCM_ERR_OK;
+}
+
+/* return the logs area */
+bcmos_errno bcm_fld_get_logs(uint32_t device, char **log_area, int *length)
+{
+    if (!log_area || !length)
+        return BCM_ERR_PARM;
+
+    if (!bcm68620_info)
+        return BCM_ERR_NORES;
+
+    if (device >= max_bcm68620_device)
+        return BCM_ERR_RANGE;
+
+    *log_area = (char *)SRAM_ADDRESS(device, BCM_FLD_LOGGER_BASE);
+    *length = BCM_FLD_LOGGER_TOP;
+
+    return BCM_ERR_OK;
+}
+
+/* write the received buffer to memory according to offset and type */
+bcmos_errno bcm_fld_write(uint32_t device, char *buff, uint32_t buff_size, uint32_t offset_in_image, bcmolt_device_image_type image_type)
+{
+    unsigned long address = 0;
+    int i;
+#ifndef PCIE_BYTE_COPY
+    uint32_t size, rest;
+    uint32_t* buff_32;
+    uint32_t* addr_32;
+#endif
+
+    if (!buff)
+        return BCM_ERR_PARM;
+
+    if (!bcm68620_info)
+        return BCM_ERR_NORES;
+
+    if (device >= max_bcm68620_device)
+        return BCM_ERR_RANGE;
+
+    if (image_type == BCMOLT_DEVICE_IMAGE_TYPE_BOOTLOADER)
+    {
+        address = bcm68620_info[device].soc_sram_base + offset_in_image;
+        if ((offset_in_image + buff_size) > BCM_FLD_COMMUNICATION_AREA_BASE)
+            return BCM_ERR_OVERFLOW;
+    }
+    else if (image_type == BCMOLT_DEVICE_IMAGE_TYPE_APPLICATION)
+    {
+        address = bcm68620_info[device].soc_ddr_base + offset_in_image;
+        if ((offset_in_image + buff_size) > bcm68620_info[device].soc_ddr_length)
+            return BCM_ERR_OVERFLOW;
+        bcm68620_info[device].soc_crt_length += buff_size;
+    }
+    else
+    {
+        return BCM_ERR_PARM;
+    }
+
+#ifndef PCIE_BYTE_COPY
+    size = buff_size / sizeof(*buff_32);
+    rest = buff_size & (sizeof(*buff_32) -1);
+
+    buff_32 = (uint32_t*)buff;
+    addr_32 = (uint32_t*)address;
+
+    if (rest)
+        size++;
+    for(i = 0; i < size; i++)
+        bcm_pci_write32((addr_32 + i),BCMOS_ENDIAN_CPU_TO_LITTLE_U32(*(buff_32 +i)));
+#else
+    for (i = 0; i < buff_size; i++)
+        *(uint8_t *)(address + i) = buff[i];
+#endif
+
+    bcmos_barrier();
+
+    return BCM_ERR_OK;
+}
+
+/* read to the received buffer from memory according to offset and type */
+bcmos_errno bcm_fld_read(uint32_t device, char *buff, uint32_t *buff_size, uint32_t offset_in_image, bcmolt_device_image_type image_type)
+{
+    unsigned long address = 0;
+    uint32_t i;
+#ifndef PCIE_BYTE_COPY
+    uint32_t size, rest;
+    uint32_t* buff_32;
+    uint32_t* addr_32;
+#endif
+
+    if (!buff || !buff_size)
+        return BCM_ERR_PARM;
+
+    if (!bcm68620_info)
+        return BCM_ERR_NORES;
+
+    if (device >= max_bcm68620_device)
+        return BCM_ERR_RANGE;
+
+    if(image_type == BCMOLT_DEVICE_IMAGE_TYPE_BOOTLOADER)
+        address = bcm68620_info[device].soc_sram_base + offset_in_image;
+    else if (image_type == BCMOLT_DEVICE_IMAGE_TYPE_APPLICATION)
+        address = bcm68620_info[device].soc_ddr_base + offset_in_image;
+    else
+        return BCM_ERR_PARM;
+
+    /* temporary for test , consider to integrate in future */
+#ifndef PCIE_BYTE_COPY
+    size = *buff_size /sizeof(*buff_32);
+    rest = *buff_size & (sizeof(*buff_32) -1);
+    buff_32 = (uint32_t*)buff;
+    addr_32 = (uint32_t*)address;
+
+    if (rest)
+        size++;
+    for(i = 0; i < size; i++)
+        *(buff_32 +i)= BCMOS_ENDIAN_CPU_TO_LITTLE_U32(bcm_pci_read32((uint32_t *)(addr_32 + i)));
+#else
+    for (i = 0; i < *buff_size; i++)
+        buff[i] = *(uint8_t *)(address + i);
+
+#endif
+
+    bcmos_barrier();
+
+    return BCM_ERR_OK;
+}
+
+
+/*********** PMC definitions ****************/
+#define PMC_QUEUE_0_DATA_UNRESET0   0x401c00U
+#define PMC_QUEUE_0_DATA_UNRESET1   0x401c04U
+#define PMC_QUEUE_0_DATA_UNRESET2   0x401c08U
+#define PMC_QUEUE_0_DATA_UNRESET3   0x401c0cU
+
+#define PMC_QUEUE_1_DATA_UNRESET0   0x401c10U
+#define PMC_QUEUE_1_DATA_UNRESET1   0x401c14U
+#define PMC_QUEUE_1_DATA_UNRESET2   0x401c18U
+#define PMC_QUEUE_1_DATA_UNRESET3   0x401c1cU
+
+#define PMC_CNTRL_HOST_MBOX_IN      0x401028U
+#define PMC_HOST_MBOX_MASK          0x2
+#define PMC_PMB_CNTRL               0x4800c0U
+/* The below value is the swap of ((1 << 31) | (1<<20) | (4 << 12) | (0x0C)) */
+#define PMC_PMB_CMD                 0x0C401080
+#define PMC_PMB_WRITE               0x4800c4U
+/* The below value is the swap of 0x1*/
+#define PMC_PMB_ADDRESS             0x1000000
+
+/* PMC command to take ARM out of reset */
+#define ARM_OUT_OF_RESET            35
+/********************************************/
+
+bcmos_errno bcm_fld_start_bootloader(uint32_t device, uint32_t test_ddr)
+{
+/* temporary disabled: just for A0, should be enabled in B0
+#ifdef BCM_PMC_EXIST
+    volatile uint32_t readval;
+#endif
+*/
+    if (!bcm68620_info)
+        return BCM_ERR_NORES;
+
+    if (device >= max_bcm68620_device)
+        return BCM_ERR_RANGE;
+
+    bcm_pci_write32(SRAM_ADDRESS(device, BCM_FLD_HOST_STATE_OFFSET), test_ddr);
+    /* start processor */
+    bcm_fld_set_host_debug_status(device, BCM_FLD_HOST_START_CPU);
+/* Temporary disabled - should be enabled in B0
+#ifndef BCM_PMC_EXIST */
+    bcm_pci_read32((uint32_t *)(bcm68620_info[device].soc_regs_base + PMC_PMB_CNTRL));
+    bcm_pci_write32((uint32_t *)(bcm68620_info[device].soc_regs_base + PMC_PMB_WRITE), PMC_PMB_ADDRESS);
+    bcm_pci_read32((uint32_t *)(bcm68620_info[device].soc_regs_base + PMC_PMB_WRITE));
+    bcm_pci_write32((uint32_t *)(bcm68620_info[device].soc_regs_base + PMC_PMB_CNTRL), PMC_PMB_CMD);
+    bcm_pci_read32((uint32_t *)(bcm68620_info[device].soc_regs_base + PMC_PMB_CNTRL));
+/*
+#else
+    readval = bcm_pci_read32((uint32_t *)(bcm68620_info[device].soc_regs_base + PMC_CNTRL_HOST_MBOX_IN));
+    if (!(readval & PMC_HOST_MBOX_MASK))
+        return BCM_ERR_NOT_CONNECTED;
+
+    bcm_pci_write32((bcm68620_info[device].soc_regs_base + PMC_QUEUE_0_DATA_UNRESET0), BCMOS_ENDIAN_CPU_TO_LITTLE_U32(ARM_OUT_OF_RESET));
+    bcm_pci_write32((bcm68620_info[device].soc_regs_base + PMC_QUEUE_0_DATA_UNRESET1), BCMOS_ENDIAN_CPU_TO_LITTLE_U32(0));
+    bcm_pci_write32((bcm68620_info[device].soc_regs_base + PMC_QUEUE_0_DATA_UNRESET2), BCMOS_ENDIAN_CPU_TO_LITTLE_U32(0));
+    bcm_pci_write32((bcm68620_info[device].soc_regs_base + PMC_QUEUE_0_DATA_UNRESET3), BCMOS_ENDIAN_CPU_TO_LITTLE_U32(0));
+    bcmos_usleep(10000); // 10 msec
+    // read PMC response, to clean the queue
+    bcm_pci_read32((uint32_t *)(bcm68620_info[device].soc_regs_base + PMC_QUEUE_1_DATA_UNRESET0));
+    bcm_pci_read32((uint32_t *)(bcm68620_info[device].soc_regs_base + PMC_QUEUE_1_DATA_UNRESET1));
+    bcm_pci_read32((uint32_t *)(bcm68620_info[device].soc_regs_base + PMC_QUEUE_1_DATA_UNRESET2));
+    bcm_pci_read32((uint32_t *)(bcm68620_info[device].soc_regs_base + PMC_QUEUE_1_DATA_UNRESET3));
+#endif
+*/
+
+    return BCM_ERR_OK;
+}
+
+bcmos_bool bcm_fld_is_bootloader_done(uint32_t device)
+{
+    volatile uint32_t value;
+
+    if (!bcm68620_info)
+        return BCMOS_FALSE;
+
+    if (device >= max_bcm68620_device)
+        return BCMOS_FALSE;
+
+    value = bcm_pci_read32(SRAM_ADDRESS(device,BCM_FLD_CPU_STATE_OFFSET));
+    if (value & BCM_FLD_CPU_FINISH_BOOTLOADER_MASK)
+        return BCMOS_TRUE;
+
+    return BCMOS_FALSE;
+}
+
+bcmos_bool bcm_fld_is_ddr_test_done(uint32_t device)
+{
+    uint32_t value = bcm_pci_read32(SRAM_ADDRESS(device, BCM_FLD_CPU_STATE_OFFSET));
+    return 0 != (value & BCM_FLD_DDR_TEST_DONE_MASK);
+}
+
+bcmos_bool bcm_fld_test_device_bootrecord_flag(uint32_t device)
+{
+    volatile uint32_t value;
+
+    if (!bcm68620_info)
+        return BCMOS_FALSE;
+
+    if (device >= max_bcm68620_device)
+        return BCMOS_FALSE;
+
+    value = bcm_pci_read32(SRAM_ADDRESS(device,BCM_FLD_CPU_BOOTREC_STATE_OFFSET));
+    if (value & BCM_FLD_CPU_PRM_VALID_MASK)
+        return BCMOS_TRUE;
+
+    return BCMOS_FALSE;
+}
+
+bcmos_errno bcm_fld_get_device_bootrecord(uint32_t device, uint32_t *opaque_data)
+{
+    uint32_t *addr, *temp;
+    int32_t i;
+
+    if (!opaque_data)
+        return BCM_ERR_PARM;
+
+    if (!bcm68620_info)
+        return BCM_ERR_NORES;
+
+    if (device >= max_bcm68620_device)
+        return BCM_ERR_RANGE;
+
+    temp = opaque_data;
+    addr = SRAM_ADDRESS(device,BCM_FLD_CPU_BOOTRECORD_OFFSET);
+    for (i = 0; i < PCIE_OPAQUE_DATA_SIZE / 4; i++)
+    {
+        *temp++ = bcm_pci_read32(addr++);
+    }
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_fld_clear_device_bootrecord_flag(uint32_t device)
+{
+    volatile uint32_t value;
+
+    if (!bcm68620_info)
+        return BCM_ERR_NORES;
+
+    if (device >= max_bcm68620_device)
+        return BCM_ERR_RANGE;
+
+    /* clear SoC prm valid bit */
+    value = bcm_pci_read32(SRAM_ADDRESS(device,BCM_FLD_CPU_BOOTREC_STATE_OFFSET));
+    value &= ~BCM_FLD_CPU_PRM_VALID_MASK;
+    bcm_pci_write32(SRAM_ADDRESS(device,BCM_FLD_CPU_BOOTREC_STATE_OFFSET), value);
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_fld_set_host_bootrecord_flag(uint32_t device)
+{
+    volatile uint32_t value;
+
+    if (!bcm68620_info)
+        return BCM_ERR_NORES;
+
+    if (device >= max_bcm68620_device)
+        return BCM_ERR_RANGE;
+
+    /* set host prm valid bit */
+    value = bcm_pci_read32(SRAM_ADDRESS(device,BCM_FLD_HOST_BOOTREC_STATE_OFFSET));
+    value |= ((1 << BCM_FLD_HOST_PRM_VALID_SHIFT) & BCM_FLD_HOST_PRM_VALID_MASK);
+    bcm_pci_write32(SRAM_ADDRESS(device,BCM_FLD_HOST_BOOTREC_STATE_OFFSET), value);
+
+    return BCM_ERR_OK;
+}
+
+bcmos_bool bcm_fld_test_host_bootrecord_flag(uint32_t device)
+{
+    volatile uint32_t value;
+
+    if (!bcm68620_info)
+        return BCMOS_FALSE;
+
+    if (device >= max_bcm68620_device)
+        return BCMOS_FALSE;
+
+    value = bcm_pci_read32(SRAM_ADDRESS(device,BCM_FLD_HOST_BOOTREC_STATE_OFFSET));
+    if (value & BCM_FLD_HOST_PRM_VALID_MASK)
+        return BCMOS_TRUE;
+
+    return BCMOS_FALSE;
+}
+
+bcmos_errno bcm_fld_set_rings_size(uint32_t device, uint32_t host_tx_size, uint32_t host_rx_size)
+{
+    volatile uint32_t value;
+
+    if (!bcm68620_info)
+        return BCM_ERR_NORES;
+
+    if (device >= max_bcm68620_device)
+        return BCM_ERR_RANGE;
+
+    /* write host_pd_ring_size to communication area - SoC will use it in first stages of application */
+    /* device tx ring size is the same as host rx queue */
+    bcm_pci_write32(SRAM_ADDRESS(device,BCM_FLD_HOST_RX_QUEUE_SIZE_OFFSET), host_rx_size);
+    /* device rx ring size is the same as host tx queue */
+    bcm_pci_write32(SRAM_ADDRESS(device,BCM_FLD_CPU_RX_QUEUE_SIZE_OFFSET), host_tx_size);
+    /* set host queue valid bit */
+    value = bcm_pci_read32(SRAM_ADDRESS(device,BCM_FLD_CPU_SET_QUEUES_SIZE));
+    value |= ((1 << BCM_FLD_CPU_QUEUE_VALID_SHIFT) & BCM_FLD_CPU_QUEUE_VALID_MASK);
+    bcm_pci_write32(SRAM_ADDRESS(device,BCM_FLD_CPU_SET_QUEUES_SIZE), value);
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_fld_get_exception_state(uint32_t device, uint32_t *state0, uint32_t *state1)
+{
+    if (!bcm68620_info)
+        return BCM_ERR_NORES;
+
+    if (device >= max_bcm68620_device)
+        return BCM_ERR_RANGE;
+
+    if (!state0 || !state1)
+        return BCM_ERR_PARM;
+
+    *state0 = bcm_pci_read32(SRAM_ADDRESS(device, BCM_FLD_CPU0_POSTMORTEM_STATE));
+    *state1 = bcm_pci_read32(SRAM_ADDRESS(device, BCM_FLD_CPU1_POSTMORTEM_STATE));
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_fld_clear_exception_state(uint32_t device, uint32_t cpuid)
+{
+
+    uint32_t offset =  cpuid ? BCM_FLD_CPU1_POSTMORTEM_STATE : BCM_FLD_CPU0_POSTMORTEM_STATE;
+
+    if (!bcm68620_info)
+        return BCM_ERR_NORES;
+
+    if ((device >= max_bcm68620_device) || (cpuid > 1))
+        return BCM_ERR_RANGE;
+
+    bcm_pci_write32(SRAM_ADDRESS(device, offset), 0);
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_fld_copy_exception_log(uint32_t device, uint32_t cpuid, char *buffer, int *length)
+{
+    BCM_FLD_POSTMORTEM_LOG *exlog;
+    uint32_t offset =  cpuid ? BCM_FLD_CPU1_POSTMORTEM_BUF_OFFSET : BCM_FLD_CPU0_POSTMORTEM_BUF_OFFSET;
+
+    if (!bcm68620_info)
+        return BCM_ERR_NORES;
+
+    if ((device >= max_bcm68620_device) || (cpuid > 1))
+        return BCM_ERR_RANGE;
+
+    if (!buffer || !length)
+        return BCM_ERR_PARM;
+
+    exlog = (BCM_FLD_POSTMORTEM_LOG *)SRAM_ADDRESS(device, offset);
+    if (exlog->magic != BCM_FLD_POSTMORTEM_LOG_MAGIC)
+        *length = 0;
+    else
+    {
+        int i;
+        *length = exlog->msg_len;
+        /* if host is 64 bit and bigendian memcpy does not work correctly */
+        for (i=0; i < exlog->msg_len; i++)
+        {
+            buffer[i] = exlog->msg[i];
+        }
+    }
+    buffer[*length] = '\0';
+
+    return BCM_ERR_OK;
+}
+
+/**
+* \Debug states and functions
+*/
+bcmos_errno bcm_fld_get_device_debug_status(uint32_t device, bcm_fld_device_debug_state *info)
+{
+    volatile uint32_t value;
+
+    if (!info)
+        return BCM_ERR_PARM;
+
+    if (!bcm68620_info)
+        return BCM_ERR_NORES;
+
+    if (device >= max_bcm68620_device)
+        return BCM_ERR_RANGE;
+
+    value = bcm_pci_read32(SRAM_ADDRESS(device,BCM_FLD_CPU_DEBUG_STATE_OFFSET));
+    info->boot_from_sram_states = (value & BCM_FLD_CPU_BOOT_FROM_SRAM_STATES_MASK) >> BCM_FLD_CPU_BOOT_FROM_SRAM_STATES_SHIFT;
+    info->boot_from_sram_errors = (value & BCM_FLD_CPU_BOOT_FROM_SRAM_ERRORS_MASK) >> BCM_FLD_CPU_BOOT_FROM_SRAM_ERRORS_SHIFT;
+    info->boot_from_sram_exception = (value & BCM_FLD_CPU_BOOT_FROM_SRAM_EXCEPTION_MASK) >> BCM_FLD_CPU_BOOT_FROM_SRAM_EXCEPTION_SHIFT;
+    info->run_from_ddr_state = (value & BCM_FLD_CPU_RUN_FROM_DDR_STATES_MASK) >> BCM_FLD_CPU_RUN_FROM_DDR_STATES_SHIFT;
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_fld_get_host_debug_status(uint32_t device, bcm_fld_host_debug_state *info)
+{
+    volatile uint32_t value;
+
+    if (!info)
+        return BCM_ERR_PARM;
+
+    if (!bcm68620_info)
+        return BCM_ERR_NORES;
+
+    if (device >= max_bcm68620_device)
+        return BCM_ERR_RANGE;
+
+    value = bcm_pci_read32(SRAM_ADDRESS(device,BCM_FLD_HOST_DEBUG_STATE_OFFSET));
+    info->write_sram = (value & BCM_FLD_HOST_WRITE_SRAM_MASK) >> BCM_FLD_HOST_WRITE_SRAM_SHIFT;
+    info->start_device = (value & BCM_FLD_HOST_START_CPU_MASK) >> BCM_FLD_HOST_START_CPU_SHIFT;
+    info->write_ddr = (value & BCM_FLD_HOST_WRITE_DDR_MASK) >> BCM_FLD_HOST_WRITE_DDR_SHIFT;
+    value = bcm_pci_read32(SRAM_ADDRESS(device,BCM_FLD_HOST_STATE_OFFSET));
+    info->finish_ddr = (value & BCM_FLD_HOST_FINISH_WRITE_DDR_MASK) >> BCM_FLD_HOST_FINISH_WRITE_DDR_SHIFT;
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_fld_set_host_debug_status(uint32_t device, BCM_FLD_HOST_DEBUG_VALUES stat)
+{
+    volatile uint32_t value = 0;
+
+    if (!bcm68620_info)
+        return BCM_ERR_NORES;
+
+    if (device >= max_bcm68620_device)
+        return BCM_ERR_RANGE;
+
+    if (stat == BCM_FLD_HOST_WRITE_SRAM)
+        value = ((1 << BCM_FLD_HOST_WRITE_SRAM_SHIFT) & BCM_FLD_HOST_WRITE_SRAM_MASK);
+    else
+    {
+        value = bcm_pci_read32(SRAM_ADDRESS(device,BCM_FLD_HOST_DEBUG_STATE_OFFSET));
+        if (stat == BCM_FLD_HOST_START_CPU)
+            value |= ((1 << BCM_FLD_HOST_START_CPU_SHIFT) & BCM_FLD_HOST_START_CPU_MASK);
+        else if (stat == BCM_FLD_HOST_WRITE_DDR)
+            value |= ((1 << BCM_FLD_HOST_WRITE_DDR_SHIFT) & BCM_FLD_HOST_WRITE_DDR_MASK);
+        else
+            return BCM_ERR_PARM;
+    }
+    bcm_pci_write32(SRAM_ADDRESS(device,BCM_FLD_HOST_DEBUG_STATE_OFFSET), value);
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_fld_set_ras_mode_set(uint32_t device, uint32_t ras, uint32_t mode)
+{
+    uint32_t offset =  ras ? BCM_FLD_RAS_1_SETTINGS :BCM_FLD_RAS_0_SETTINGS;
+
+    bcm_pci_write32(SRAM_ADDRESS(device, offset), mode);
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_fld_set_host_event(uint32_t device, uint32_t event)
+{
+    if (!bcm68620_info)
+        return BCM_ERR_NORES;
+
+    if (device >= max_bcm68620_device)
+        return BCM_ERR_RANGE;
+
+    bcm_pci_write32(SRAM_ADDRESS(device, BCM_FLD_HOST_EVENT), event);
+
+    return BCM_ERR_OK;
+}
+
+bcmos_bool bcm_fld_test_queues_flag(uint32_t device)
+{
+    volatile uint32_t value;
+
+    if (!bcm68620_info)
+        return BCMOS_FALSE;
+
+    if (device >= max_bcm68620_device)
+        return BCMOS_FALSE;
+
+    value = bcm_pci_read32(SRAM_ADDRESS(device,BCM_FLD_CPU_SET_QUEUES_SIZE));
+    if (value & BCM_FLD_CPU_QUEUE_VALID_MASK)
+        return BCMOS_TRUE;
+
+    return BCMOS_FALSE;
+}
+
+bcmos_bool bcm_fld_regs_swap_needed(uint32_t device)
+{
+    uint32_t value;
+
+    value = *(volatile uint32_t *)(bcm68620_info[device].soc_regs_base + PCIE_REVISION_REGISTER_OFFSET);
+    if ((value & 0xffff) != 0x0302)
+        return BCMOS_TRUE;
+
+    return BCMOS_FALSE;
+}
+
+bcmos_bool bcm_fld_sram_swap_needed(uint32_t device)
+{
+    uint32_t value;
+    uint8_t charvalue;
+
+    value = 0xaabbccdd;
+    *(volatile uint32_t *)bcm68620_info[device].soc_sram_base = value;
+    charvalue = *(volatile uint8_t *)bcm68620_info[device].soc_sram_base;
+    if (charvalue != *(uint8_t *)&value)
+        return BCMOS_TRUE;
+
+    return BCMOS_FALSE;
+}
+
+bcmos_bool bcm_fld_ddr_swap_needed(uint32_t device)
+{
+    uint32_t value;
+    volatile uint32_t *address;
+    uint8_t charvalue;
+
+    value = 0xaabbccdd;
+    address = (uint32_t *)(bcm68620_info[device].soc_ddr_base + bcm68620_info[device].soc_crt_length);
+    *address = value;
+    charvalue = *address;
+    if (charvalue != *&value)
+        return BCMOS_TRUE;
+
+    return BCMOS_FALSE;
+}
+
+#ifdef TX_ENABLE_EVENT_TRACE
+bcmos_errno bcm_fld_set_event_trace(uint32_t device)
+{
+    if (!bcm68620_info)
+        return BCM_ERR_NORES;
+
+    if (device >= max_bcm68620_device)
+        return BCM_ERR_RANGE;
+
+    bcm_pci_write32(SRAM_ADDRESS(device,BCM_FLD_EVENT_TRACE_OFFSET), 0x1);
+
+    return BCM_ERR_OK;
+}
+bcmos_errno bcm_fld_clear_event_trace(uint32_t device)
+{
+    if (!bcm68620_info)
+        return BCM_ERR_NORES;
+
+    if (device >= max_bcm68620_device)
+        return BCM_ERR_RANGE;
+
+    bcm_pci_write32(SRAM_ADDRESS(device,BCM_FLD_EVENT_TRACE_OFFSET), 0x0);
+
+    return BCM_ERR_OK;
+}
+#endif
+#ifdef DMA_STUB
+bcmos_errno bcm_fld_set_device_bootrecord_flag(uint32_t device)
+{
+    volatile uint32_t value;
+
+    value = BCM_FLD_CPU_PRM_VALID_MASK;
+    bcm_pci_write32(SRAM_ADDRESS(device,BCM_FLD_CPU_BOOTREC_STATE_OFFSET), value);
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_fld_set_device_bootrecord(uint32_t device, uint32_t *opaque_data)
+{
+    uint32_t *addr, *temp;
+    int32_t i;
+
+    temp = opaque_data;
+    addr = SRAM_ADDRESS(device,BCM_FLD_CPU_BOOTRECORD_OFFSET);
+    for (i = 0; i < PCIE_OPAQUE_DATA_SIZE / 4; i++)
+    {
+        bcm_pci_write32(addr++,*temp++);
+    }
+
+    return BCM_ERR_OK;
+}
+#endif
+
+bcmos_errno bcm_fld_set_avs_cont(uint32_t device, uint32_t value)
+{
+    bcm_pci_write32(SRAM_ADDRESS(device, BCM_FLD_AVS_SETTINGS), value);
+
+    return BCM_ERR_OK;
+}
+
+void *bcm_fld_get_sw_error_table(uint32_t device, uint32_t *size)
+{
+    *size = BCM_FLD_SW_ERROR_TABLE_SIZE;
+    return SRAM_ADDRESS(device, BCM_FLD_SW_ERROR_TABLE);
+}
+
+uint32_t bcm_fld_ddr_test_result_get(uint32_t device, uint32_t word)
+{
+    return bcm_pci_read32(SRAM_ADDRESS(device, BCM_FLD_DDR_TEST_RESULTS + (word * COMM_WORD_SIZE)));
+}
+
+#ifdef __KERNEL__
+EXPORT_SYMBOL(bcm_fld_init);
+EXPORT_SYMBOL(bcm_fld_clear_comm_area);
+EXPORT_SYMBOL(bcm_fld_exit);
+EXPORT_SYMBOL(bcm_fld_register);
+EXPORT_SYMBOL(bcm_fld_unregister);
+EXPORT_SYMBOL(bcm_fld_get_device_status);
+EXPORT_SYMBOL(bcm_fld_get_device_loading_state);
+EXPORT_SYMBOL(bcm_fld_host_finish_write_ddr);
+EXPORT_SYMBOL(bcm_fld_get_logs);
+EXPORT_SYMBOL(bcm_fld_write);
+EXPORT_SYMBOL(bcm_fld_read);
+EXPORT_SYMBOL(bcm_fld_start_bootloader);
+EXPORT_SYMBOL(bcm_fld_is_bootloader_done);
+EXPORT_SYMBOL(bcm_fld_set_rings_size);
+EXPORT_SYMBOL(bcm_fld_get_device_bootrecord);
+EXPORT_SYMBOL(bcm_fld_test_device_bootrecord_flag);
+EXPORT_SYMBOL(bcm_fld_clear_device_bootrecord_flag);
+EXPORT_SYMBOL(bcm_fld_set_host_bootrecord_flag);
+EXPORT_SYMBOL(bcm_fld_test_host_bootrecord_flag);
+EXPORT_SYMBOL(bcm_fld_test_queues_flag);
+EXPORT_SYMBOL(bcm_fld_get_device_debug_status);
+EXPORT_SYMBOL(bcm_fld_get_host_debug_status);
+EXPORT_SYMBOL(bcm_fld_set_host_debug_status);
+EXPORT_SYMBOL(bcm_fld_set_ras_mode_set);
+EXPORT_SYMBOL(bcm_fld_set_host_event);
+EXPORT_SYMBOL(bcm_fld_get_exception_state);
+EXPORT_SYMBOL(bcm_fld_clear_exception_state);
+EXPORT_SYMBOL(bcm_fld_copy_exception_log);
+EXPORT_SYMBOL(bcm_fld_regs_swap_needed);
+EXPORT_SYMBOL(bcm_fld_sram_swap_needed);
+EXPORT_SYMBOL(bcm_fld_ddr_swap_needed);
+#ifdef TX_ENABLE_EVENT_TRACE
+EXPORT_SYMBOL(bcm_fld_set_event_trace);
+EXPORT_SYMBOL(bcm_fld_clear_event_trace);
+#endif
+EXPORT_SYMBOL(bcm_fld_set_avs_cont);
+EXPORT_SYMBOL(bcm_fld_get_sw_error_table);
+#endif
diff --git a/bcm68620_release/release/host_driver/fld/bcmolt_fld.h b/bcm68620_release/release/host_driver/fld/bcmolt_fld.h
new file mode 100644
index 0000000..f2297b2
--- /dev/null
+++ b/bcm68620_release/release/host_driver/fld/bcmolt_fld.h
@@ -0,0 +1,456 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef BCMOLT_FLD_H
+#define BCMOLT_FLD_H
+
+#include "bcmos_system.h"
+#include "bcmolt_model_types.h"
+#include "bcmolt_model_ids.h"
+#include "bcm_fld_common.h"
+
+/** \defgroup \fld_data_types Data Types
+ * \ingroup fld
+ * @{
+ */
+
+#define PCIE_REVISION_REGISTER_OFFSET       0x6406CU /* PCIE_PCIE_PCIE_0_PCIE_PCIE_0_MISC_REVISION    */
+
+typedef struct
+{
+    unsigned long   soc_regs_base;
+    unsigned long   soc_sram_base;
+    unsigned long   soc_ddr_base;
+    uint32_t        soc_ddr_length;     /* ddr window length */
+    uint32_t        soc_crt_length;     /* ddr used for load length */
+} bcm_fld_device_info;
+
+typedef struct
+{
+    uint32_t    os_entry_offset;
+    uint32_t    protocol_version;
+    uint32_t    state;
+    uint32_t    reason;
+} bcm_fld_device_stat;
+
+/**
+* \brief Initialize internal data base
+*
+*  allocate the array of pointers to info per device allocate
+*  and clear the info structure for every possible device
+*
+* \param[in] max_devices How many devices might be defined
+*
+* \return
+* 0 if successful, <0 if failed
+*/
+bcmos_errno bcm_fld_init(uint32_t max_devices);
+
+/**
+* \brief Initialize communication area
+*
+*  clear the communication area
+*
+* \param[in] device Identifies the device
+*
+*/
+void bcm_fld_clear_comm_area(uint32_t device);
+
+/**
+* \brief Release internal data base
+*
+* \return
+* 0 if successful, <0 if failed
+*/
+bcmos_errno bcm_fld_exit(void);
+
+/**
+* \brief Register a device to driver
+*
+*  store user's information about the device
+*
+* \param[in] device Identifies the device
+* \param[in] info Information
+*   - regs base address
+*   - sram base address
+*   - ddr base address
+*   - ddr window size
+*
+* \return
+* 0 if successful, <0 if failed
+*/
+bcmos_errno bcm_fld_register(uint32_t device, bcm_fld_device_info *info);
+
+/**
+* \brief Unregister a device from driver
+*
+*  remove the device from the internal db
+*
+* \param[in] device Identifies the device
+*
+* \return
+* 0 if successful, <0 if failed
+*/
+bcmos_errno bcm_fld_unregister(uint32_t device);
+
+/**
+* \brief Read from communication SoC debug information
+*
+* \param[in] device Identifies the device
+* \param[in] debug_state Information to be filled pointer
+*
+* \return
+* 0 if successful, <0 if failed
+*/
+bcmos_errno bcm_fld_get_device_status(uint32_t device, bcm_fld_device_stat *debug_state);
+
+/**
+* \brief Read from communication SoC status
+*
+* \param[in] device Identifies the device
+* \param[in] cpu_state Information to be filled pointer
+*
+* \return
+* 0 if successful, <0 if failed
+*/
+bcmos_errno bcm_fld_get_device_loading_state(uint32_t device, BCM_FLD_CPU_STATE *cpu_state);
+
+/**
+* \brief Write in communication area the finish writing DDR
+*        indicator
+*
+* \param[in] device Identifies the device
+* \param[in] os_entry_address Entry point for embedded
+*       application
+*
+* \return
+* 0 if successful, <0 if failed
+*/
+bcmos_errno bcm_fld_host_finish_write_ddr(uint32_t device, uint32_t os_entry_address);
+
+/**
+* \brief Read from communication the logs area
+*
+* \param[in] device Identifies the device
+* \param[out] log_area Pointer logger area
+* \param[out] length Length logger area
+*
+* \return
+* 0 if successful, <0 if failed
+*/
+bcmos_errno bcm_fld_get_logs(uint32_t device, char **log_area, int *length);
+
+/**
+* \brief Write the received buffer to memory according to offset
+*        and type
+*
+* \param[in] device Identifies the device
+* \param[in] buff Pointer to the buffer to be written
+* \param[in] buff_size Buffer size
+* \param[in] offset_in_image offset to write the buffer
+* \param[in] image_type Loading type, according to destination :
+*       SRAM or DDR
+*
+* \return
+* 0 if successful, <0 if failed
+*/
+bcmos_errno bcm_fld_write(uint32_t device, char *buff, uint32_t buff_size, uint32_t offset_in_image, bcmolt_device_image_type image_type);
+
+/**
+* \brief Read into received buffer from memory according to
+*        offset and type
+*
+* \param[in] device Identifies the device
+* \param[in] buff Pointer to the buffer to receive the content
+* \param[in] buff_size Buffer size
+* \param[in] offset_in_image offset to read into the buffer
+* \param[in] image_type Loading type, according to destination :
+*       SRAM or DDR
+*
+* \return
+* 0 if successful, <0 if failed
+*/
+bcmos_errno bcm_fld_read(uint32_t device, char *buff, uint32_t *buff_size, uint32_t offset_in_image, bcmolt_device_image_type image_type);
+
+/**
+* \brief Take soc cpu out of reset
+*
+* \param[in] device Identifies the device
+*
+* \return
+* 0 if successful, <0 if failed
+*/
+bcmos_errno bcm_fld_start_bootloader(uint32_t device, uint32_t test_ddr);
+
+/**
+* \brief Check if bootloader finished to run
+*
+* \param[in] device Identifies the device
+*
+* \return
+* BCMOS_TRUE if successful, BCMOS_FALSE if failed
+*/
+bcmos_bool bcm_fld_is_bootloader_done(uint32_t device);
+
+bcmos_bool bcm_fld_is_ddr_test_done(uint32_t device);
+
+/**
+* \brief Check if SoC finished synchronization process
+*
+* \param[in] device Identifies the device
+*
+* \return
+*/
+bcmos_bool bcm_fld_test_device_bootrecord(uint32_t device);
+
+/**
+* \brief Returns the bootrecord of the SoC
+*
+* \param[in] device Identifies the device
+* \param[in] opaque_data Pointer to information
+*   - physical address of the buffer descriptors ring
+*   - physical address of shadow buffer descriptors ring
+*   info_length MUST be modulo 4
+*
+* \return
+* 0 if successful, <0 if failed
+*/
+bcmos_errno bcm_fld_get_device_bootrecord(uint32_t device, uint32_t *opaque_data);
+
+/**
+* \brief Set bootrecord valid bit to be checked by the device
+*
+* \param[in] device Identifies the device
+* \return
+* 0 if successful, <0 if failed
+*/
+bcmos_errno bcm_fld_set_host_bootrecord_flag(uint32_t device);
+
+/**
+* \brief Check bootrecord valid bit set previously by the device
+*
+* \param[in] device Identifies the device
+* \return
+* 0 if successful, <0 if failed
+*/
+bcmos_bool bcm_fld_test_host_bootrecord_flag(uint32_t device);
+
+/**
+* \brief Clear bootrecord valid bit to be checked by the device
+*
+* \param[in] device Identifies the device
+* \return
+* 0 if successful, <0 if failed
+*/
+bcmos_errno bcm_fld_clear_device_bootrecord_flag(uint32_t device);
+
+/**
+* \brief Check bootrecord valid bit set previously by the device
+*
+* \param[in] device Identifies the device
+* \return
+* 0 if successful, <0 if failed
+*/
+bcmos_bool bcm_fld_test_device_bootrecord_flag(uint32_t device);
+
+/**
+* \brief Write the tx and rx queue sizes to communication area
+*   set queue validity bit for the device
+*
+* \param[in] device Identifies the device
+* \param[in] host_tx_size Queue size : is also the device rx
+*       queue size
+* \param[in] host_rx_size Queue size : is also the device tx
+*       queue size
+* \return
+* 0 if successful, <0 if failed
+*/
+bcmos_errno bcm_fld_set_rings_size(uint32_t device, uint32_t host_tx_size, uint32_t host_rx_size);
+
+/**
+* \brief set DDR RASconfiguration properties
+*
+* \param[in] device Identifies the device
+*
+* \param[in] ras  Identifies the ras number , can be 0 or 1
+*
+* \param[in] mode Identifies mode - disable 0, gpon 1, xgpon 2,
+*
+* \return
+* 0 if successful, <0 if failed
+*/
+bcmos_errno bcm_fld_set_ras_mode_set(uint32_t device, uint32_t ras, uint32_t mode);
+
+/**
+* \brief Notify device about an event that occurred on the host side
+*
+* \param[in] device Identifies the device
+*
+* \param[in] event  User defined event
+*
+* \return
+* 0 if successful, <0 if failed
+*/
+bcmos_errno bcm_fld_set_host_event(uint32_t device, uint32_t event);
+
+/**
+* \brief Check queues valid bit set previously by Host
+*
+* \param[in] device Identifies the device
+*
+* \return
+* FALSE if PRM_VALID bit is not set, TRUE if PRM_VALID bit is
+* set
+*/
+bcmos_bool bcm_fld_test_queues_flag(uint32_t device);
+
+/**
+* \brief Get the exception area state, set by the device exception
+*        handler
+*
+* \param[in] device Identifies the device
+* \param[out] state Pointer to exception state on cpu0 value
+* \param[out] state Pointer to exception state on cpu1 value
+*
+* \return
+* 0 if successful, <0 if failed
+*/
+
+bcmos_errno bcm_fld_get_exception_state(uint32_t device, uint32_t *state0, uint32_t *state1);
+
+/**
+* \brief Clear the exception area state
+*
+* \param[in] device Identifies the device
+* \param[in] cpuid Identifies the the device cpu
+*
+* \return
+* 0 if successful, <0 if failed
+*/
+bcmos_errno bcm_fld_clear_exception_state(uint32_t device, uint32_t cpuid);
+
+/**
+* \brief Fill buffer with the exception area content, set by
+*        the device exception handler
+*
+* \param[in] device Identifies the device
+* \param[in] cpuid Identifies the the device cpu
+* \param[out] buffer Pointer to be filled with the exception
+*       area content
+* \param[out] length Length of the buffer
+*
+* \return
+* 0 if successful, <0 if failed
+*/
+bcmos_errno bcm_fld_copy_exception_log(uint32_t device, uint32_t cpuid, char *buffer, int *length);
+
+#ifdef TX_ENABLE_EVENT_TRACE
+/**
+* \brief Set event trace flag to be read by embedded and start
+*        traceing
+*
+* \param[in] device Identifies the device
+*
+* \return
+* 0 if successful, <0 if failed
+*/
+bcmos_errno bcm_fld_set_event_trace(uint32_t device);
+
+/**
+* \brief Clear event trace flag to be read by embedded and stop
+*        traceing
+*
+* \param[in] device Identifies the device
+*
+* \return
+* 0 if successful, <0 if failed
+*/
+bcmos_errno bcm_fld_clear_event_trace(uint32_t device);
+#endif
+
+/**
+* \Debug states and functions
+*/
+typedef struct
+{
+    uint32_t    write_sram;
+    uint32_t    start_device;
+    uint32_t    write_ddr;
+    uint32_t    finish_ddr;
+} bcm_fld_host_debug_state;
+
+typedef enum
+{
+    BCM_FLD_HOST_NONE,
+    BCM_FLD_HOST_WRITE_SRAM,    /* set before load  image to SRAM */
+    BCM_FLD_HOST_START_CPU,     /* set before resume ARM */
+    BCM_FLD_HOST_WRITE_DDR      /* set before load  image to DDR */
+} BCM_FLD_HOST_DEBUG_VALUES;
+
+typedef struct
+{
+    uint32_t boot_from_sram_states;
+    uint32_t boot_from_sram_errors;
+    uint32_t boot_from_sram_exception;
+    uint32_t run_from_ddr_state;
+} bcm_fld_device_debug_state;
+
+/**
+* \brief Set and get debugging traceing from communication area
+*
+* \param[in] device Identifies the device
+* \param[in] info Pointer to information
+*
+* \return
+* 0 if successful, <0 if failed
+*/
+/* returns soc debug states */
+bcmos_errno bcm_fld_get_device_debug_status(uint32_t device, bcm_fld_device_debug_state *info);
+/* deal with host states - functional and debug */
+bcmos_errno bcm_fld_get_host_debug_status(uint32_t device, bcm_fld_host_debug_state *info);
+bcmos_errno bcm_fld_set_host_debug_status(uint32_t device, BCM_FLD_HOST_DEBUG_VALUES stat);
+/**
+* \brief Check if swap needed for the respective memory
+*
+* \param[in] device Identifies the device
+*
+* \return
+* true if swap needed, false if swap not needed
+*/
+bcmos_bool bcm_fld_regs_swap_needed(uint32_t device);
+bcmos_bool bcm_fld_sram_swap_needed(uint32_t device);
+bcmos_bool bcm_fld_ddr_swap_needed(uint32_t device);
+
+bcmos_errno bcm_fld_set_avs_cont(uint32_t device, uint32_t value);
+
+void *bcm_fld_get_sw_error_table(uint32_t device, uint32_t *size);
+uint32_t bcm_fld_ddr_test_result_get(uint32_t device, uint32_t word);
+
+#endif
+
diff --git a/bcm68620_release/release/host_driver/host_api/Makefile b/bcm68620_release/release/host_driver/host_api/Makefile
new file mode 100644
index 0000000..089ec56
--- /dev/null
+++ b/bcm68620_release/release/host_driver/host_api/Makefile
@@ -0,0 +1,16 @@
+MOD_NAME = host_api
+MOD_TYPE = lib
+MOD_DEPS = dev_log common_gpon dev_ctrl_daemon
+
+ifeq ("$(RELEASE_BUILD)", "y")
+    MOD_DEPS += common_api
+else
+    MOD_DEPS += api
+endif
+
+ifeq ("$(ENABLE_CLI)", "y")
+    MOD_DEPS += api_cli os_cli embedded_cli
+endif
+
+srcs = bcmolt_host_api.c
+
diff --git a/bcm68620_release/release/host_driver/host_api/bcmolt_host_api.c b/bcm68620_release/release/host_driver/host_api/bcmolt_host_api.c
new file mode 100644
index 0000000..b88d3c1
--- /dev/null
+++ b/bcm68620_release/release/host_driver/host_api/bcmolt_host_api.c
@@ -0,0 +1,76 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+ 
+#include <bcmos_system.h>
+#if !defined(LINUX_USER_SPACE)
+#include <bcmolt_dev_ctrl.h>
+#else
+bcmos_errno bcmolt_dev_ctrl_init(void);
+#endif
+#include <bcm_dev_log.h>
+#include "bcmolt_host_api.h"
+
+bcmos_errno bcmolt_host_init(bcmolt_host_init_params *params)
+{
+    bcmos_errno rc;
+
+    rc = bcmos_init();
+    BUG_ON(rc);
+
+#ifdef ENABLE_LOG
+    if (params->logger_init_cb)
+    {
+        rc = params->logger_init_cb();
+        BUG_ON(rc);
+    }
+#endif
+
+    bcmos_trace_level_set(BCMOS_TRACE_LEVEL_ERROR);
+
+    /* In usermode Linux, we don't invoke bcmolt_dev_ctrl_init() from the application, but from a kernel module (bcm_dev_ctrl_linux.ko). */
+#if !defined(LINUX_USER_SPACE)
+    rc = bcmolt_dev_ctrl_init(&params->dev_ctrl_params);
+    BUG_ON(rc);
+#else
+    if (params->run_dev_ctrl)
+    {
+        rc = bcmolt_dev_ctrl_init();
+        BUG_ON(rc);
+    }
+#endif
+
+#if !defined(__KERNEL__)
+    /* Initialize transport layer. */
+    rc = bcmtr_init();
+    BUG_ON(rc);
+#endif
+
+    return BCM_ERR_OK;
+}
+
diff --git a/bcm68620_release/release/host_driver/host_api/bcmolt_host_api.h b/bcm68620_release/release/host_driver/host_api/bcmolt_host_api.h
new file mode 100644
index 0000000..e7acd61
--- /dev/null
+++ b/bcm68620_release/release/host_driver/host_api/bcmolt_host_api.h
@@ -0,0 +1,75 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef _BCMOLT_HOST_API_H_
+#define _BCMOLT_HOST_API_H_
+
+#include <bcmos_system.h>
+#include <bcmolt_model_types.h>
+
+#if !defined(__KERNEL__)
+#include <bcmtr_debug.h>
+#include <bcmtr_interface.h>
+#include "bcmolt_api.h"
+#include <bcm_common_gpon.h>
+#include <bcmolt_host_api_gpon_utils.h>
+#endif
+
+#if defined(ENABLE_CLI) && !defined(__KERNEL__)
+#include <bcm_api_cli.h>
+#include <bcmos_cli.h>
+#include <bcmolt_embedded_cli.h>
+#include <bcmtr_transport_cli.h>
+#include <bcm_api_cli_helpers.h>
+#endif
+
+#if !defined(LINUX_USER_SPACE)
+#include <bcmolt_dev_ctrl.h>
+#endif
+
+#if !defined(LINUX_USER_SPACE)
+typedef bcmolt_dev_ctrl_cb_image_read bcmolt_host_image_read_cb;
+#endif
+typedef bcmos_errno (*bcmolt_host_logger_init_cb)(void);
+
+typedef struct
+{
+#if !defined(LINUX_USER_SPACE)
+    bcmolt_dev_ctrl_params dev_ctrl_params;
+#endif
+    /* This callback initializes the logger module. If using common/dev_log module, it should be called after OS abstraction layer is initialized, and that's why
+     * it is a callback and not directly initialized by the caller. */
+    bcmolt_host_logger_init_cb logger_init_cb;
+    bcmos_bool run_dev_ctrl;
+} bcmolt_host_init_params;
+
+bcmos_errno bcmolt_host_init(bcmolt_host_init_params *params);
+
+#endif
+
diff --git a/bcm68620_release/release/host_driver/host_api/bcmolt_host_api_gpon_utils.h b/bcm68620_release/release/host_driver/host_api/bcmolt_host_api_gpon_utils.h
new file mode 100644
index 0000000..4676400
--- /dev/null
+++ b/bcm68620_release/release/host_driver/host_api/bcmolt_host_api_gpon_utils.h
@@ -0,0 +1,42 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef _BCMOLT_HOST_API_GPON_UTILS_H_
+#define _BCMOLT_HOST_API_GPON_UTILS_H_
+
+#include <bcmos_system.h>
+#include <bcm_common_gpon.h>
+
+/* Note that PONs 4-7 are not used in GPON/XGPON coexistence mode. */
+#define FOR_EACH_PON(pon_ni)\
+    for (pon_ni = (bcmolt_pon_ni)0;\
+         pon_ni < (bcmolt_pon_ni)smdbg->num_of_pons;\
+         ((bcm_common_gpon_get_system_mode() == BCMOLT_SYSTEM_MODE_GPON_8_XGPON_4_X_COEXISTENCE && pon_ni == XGPON_HALF_CHIP_MAX_NUM_OF_PONS-1) ? pon_ni = XGPON_MAX_NUM_OF_PONS : pon_ni++))
+
+#endif
diff --git a/bcm68620_release/release/host_driver/host_api/user/Makefile b/bcm68620_release/release/host_driver/host_api/user/Makefile
new file mode 100755
index 0000000..5b5baeb
--- /dev/null
+++ b/bcm68620_release/release/host_driver/host_api/user/Makefile
@@ -0,0 +1,19 @@
+
+MOD_NAME = host_api_user
+MOD_TYPE = lib
+MOD_DEPS = dev_log common_gpon dev_ctrl_daemon host_api
+
+ifeq ("$(RELEASE_BUILD)", "y")
+    MOD_DEPS += common_api
+else
+    MOD_DEPS += api
+endif
+
+ifeq ("$(ENABLE_CLI)", "y")
+    MOD_DEPS += api_cli os_cli embedded_cli
+endif
+
+MOD_DEFS += -DIN_BAND
+
+srcs = ../bcmolt_host_api.c
+
diff --git a/bcm68620_release/release/host_driver/keep_alive/Makefile b/bcm68620_release/release/host_driver/keep_alive/Makefile
new file mode 100644
index 0000000..ee02f1a
--- /dev/null
+++ b/bcm68620_release/release/host_driver/keep_alive/Makefile
@@ -0,0 +1,20 @@
+# Common keep_alive
+#
+MOD_NAME = keep_alive
+
+ifeq ("$(OS_KERNEL)", "linux")
+MOD_TYPE = linux_lib
+else
+MOD_TYPE = lib
+endif
+
+MOD_DEPS = model   
+
+srcs = bcm_keep_alive.c
+	 
+# If called by linux kernel builder - add include paths manually.
+# It is not elegant, but we'll not have many linux modules
+ifneq ("$(KBUILD_SRC)", "")
+	-include $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
+endif
+USE_LINT = yes
diff --git a/bcm68620_release/release/host_driver/keep_alive/bcm_keep_alive.c b/bcm68620_release/release/host_driver/keep_alive/bcm_keep_alive.c
new file mode 100644
index 0000000..780f60e
--- /dev/null
+++ b/bcm68620_release/release/host_driver/keep_alive/bcm_keep_alive.c
@@ -0,0 +1,245 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#include <bcmos_system.h>
+#include <bcmolt_msg.h>
+#include <bcmolt_api.h>
+#include <bcmolt_model_types.h>
+#include <bcmolt_model_ids.h>
+#include "bcm_keep_alive.h"
+
+keep_alive_msg_orig2str_t keep_alive_msg_orig2str[] =
+{
+    {BCM_KEEP_ALIVE_MSG_ORIG_DEVICE, "device"},
+    {BCM_KEEP_ALIVE_MSG_ORIG_HOST, "host"},
+    {-1}
+};
+
+static void keep_alive_tx_handler(bcmos_keep_alive_info *ka_info);
+
+static bcmos_timer_rc keep_alive_timer_handler(bcmos_timer *timer, long data)
+{
+    bcmos_keep_alive_info *ka_info;
+    uint32_t  last_recv_ka_ts;
+    uint32_t  ka_interval;
+    uint32_t  ka_tolerance;
+    uint32_t  time_diff_from_prev_ka;
+    uint32_t  ka_process_start_ts;
+    uint32_t  prev_ka_ts;
+    ka_info = (bcmos_keep_alive_info *)data;
+    last_recv_ka_ts = ka_info->last_recv_ka_timestamp;
+    ka_interval = ka_info->ka_interval;
+    ka_tolerance = ka_info->ka_tolerance;
+    ka_process_start_ts = ka_info->ka_process_start_ts;
+
+    /* The first keep alive message that arrives changes last_recv_ka_ts to a value different than zero.
+     * If no keep alive message has arrived yet then the previous keep alive time stamp is the time the process has
+     * started. */
+    prev_ka_ts = (last_recv_ka_ts ? last_recv_ka_ts : ka_process_start_ts);
+
+    /* Time difference between current time and the previous keep alive message */
+    time_diff_from_prev_ka = bcmos_timestamp() - prev_ka_ts;
+
+    /* Check if keep alive message has been received in the past keep alive interval, both part of the equation can't overflow:
+     * The left part is subtraction of two unsigned integers and the right part is restricted by ka_interval max value and ka_tolerance max value -
+     * their multiplication can't exceed max unsigned integer */
+    if (time_diff_from_prev_ka > ka_interval * (ka_tolerance + 1))
+    {
+        if (last_recv_ka_ts)
+        {
+            BCMOS_TRACE_INFO(
+                "Didn't receive keep alive message for %u seconds - about to disconnect\n",
+                (bcmos_timestamp() - last_recv_ka_ts) / BCMOS_MICROSECONDS_IN_SECONDS);
+        }
+        else
+        {
+            BCMOS_TRACE_INFO(
+                "Didn't receive keep alive message since keep alive process started %u seconds ago - "
+                    "about to disconnect\n",
+                (bcmos_timestamp() - ka_process_start_ts) / BCMOS_MICROSECONDS_IN_SECONDS);
+        }
+
+        if (ka_info->disconnect_handler(ka_info->device) != BCM_ERR_OK)
+        {
+            if (ka_info->orig == BCM_KEEP_ALIVE_MSG_ORIG_HOST)
+                BCMOS_TRACE_ERR("Error while trying to send disconnect message (device=%d)\n", ka_info->device);
+            else
+                BCMOS_TRACE_ERR("Error while trying to invoke disconnect from the host procedure\n");
+        }
+        return BCMOS_TIMER_STOP;
+    }
+
+    /* Send Keep alive message to the remote side */
+    keep_alive_tx_handler(ka_info);
+
+    return BCMOS_TIMER_OK;
+}
+
+static void keep_alive_tx_handler(bcmos_keep_alive_info *ka_info)
+{
+    bcmos_keep_alive_msg ka_msg = {};
+    bcmolt_device_key key = {};
+    if (ka_info->orig == BCM_KEEP_ALIVE_MSG_ORIG_HOST)
+    {
+        BCMOLT_OPER_INIT(&ka_msg.host, device, host_keep_alive, key);
+        ka_msg.host.hdr.hdr.type = BCMOLT_MSG_TYPE_SET;
+        BCMOLT_OPER_PROP_SET(&ka_msg.host, device, host_keep_alive, sequence_number, ka_info->last_sent_ka_seq++);
+        BCMOLT_OPER_PROP_SET(&ka_msg.host, device, host_keep_alive, time_stamp, bcmos_timestamp());
+    }
+    else
+    {
+        BCMOLT_AUTO_INIT(&ka_msg.device, device, device_keep_alive);
+        ka_msg.device.hdr.hdr.type = BCMOLT_MSG_TYPE_SET;
+        ka_msg.device.data.sequence_number = ka_info->last_sent_ka_seq++;
+        ka_msg.device.data.time_stamp = bcmos_timestamp();
+    }
+
+    if (ka_info->send_handler(ka_info->device, (bcmolt_msg *)&ka_msg) != BCM_ERR_OK)
+    {
+        BCMOS_TRACE_INFO("Error while trying to send keep alive sequence number %u\n", ka_info->last_sent_ka_seq);
+    }
+}
+
+void keep_alive_rx_handler(const bcmos_keep_alive_data_msg *ka_data_msg, bcmos_keep_alive_info *ka_info)
+{
+    uint32_t seq_diff;
+    uint32_t rx_msg_seq;
+    uint32_t rx_msg_ts;
+
+    /* Tricky part - rx_msg_seq is NOT from the originator but from the other side */
+    if (ka_info->orig == BCM_KEEP_ALIVE_MSG_ORIG_HOST)
+    {
+        rx_msg_seq = ka_data_msg->device.sequence_number;
+        rx_msg_ts = ka_data_msg->device.time_stamp;
+    }
+    else
+    {
+        rx_msg_seq = ka_data_msg->host.sequence_number;
+        rx_msg_ts = ka_data_msg->host.time_stamp;
+    }
+
+    /* If last_recv_ka_seq and last_recv_ka_timestamp are both zeros then it's the first message */
+    if (ka_info->last_recv_ka_seq || ka_info->last_recv_ka_timestamp)
+    {
+        /* All part of the equation are unsigned integers so warp around is already taken care of */
+        seq_diff = rx_msg_seq - ka_info->last_recv_ka_seq;
+
+        /* In the normal case seq_diff should be one */
+        if (seq_diff > 1UL)
+        {
+            BCMOS_TRACE_INFO(
+                "Current keep alive sequence number is %u while previous keep alive sequence number was %u\n",
+                rx_msg_seq,
+                ka_info->last_recv_ka_seq);
+            BCMOS_TRACE_INFO(
+                "Current time stamp is %u while previous time stamp was %u, receive timestamp is %u\n",
+                bcmos_timestamp(),
+                ka_info->last_recv_ka_timestamp,rx_msg_ts);
+            if (seq_diff <= ka_info->ka_tolerance)
+            {
+                BCMOS_TRACE_INFO(
+                    "Missed %u keep alive messages (keep alive tolerance is to lose %d messages)\n",
+                    seq_diff,
+                    ka_info->ka_tolerance);
+            }
+            else
+            {
+                BCMOS_TRACE_ERR(
+                    "Missed %u keep alive messages (keep alive tolerance is to lose %d messages - "
+                        "about to disconnect)\n",
+                    seq_diff,
+                    ka_info->ka_tolerance);
+                stop_keep_alive_process(ka_info);
+                if (ka_info->disconnect_handler(ka_info->device) != BCM_ERR_OK)
+                {
+                    if (ka_info->orig == BCM_KEEP_ALIVE_MSG_ORIG_HOST)
+                    {
+                        BCMOS_TRACE_ERR(
+                            "Error while trying to send disconnect message (device=%d)\n",
+                            ka_info->device);
+                    }
+                    else
+                    {
+                        BCMOS_TRACE_ERR("Error while trying to send disconnect from the host message\n");
+                    }
+                }
+            }
+        }
+    }
+	/* Stroe at the recieving side's database, the sequence number of the last message that came  */
+    ka_info->last_recv_ka_seq = rx_msg_seq;
+
+    /* The time stamp is taken from the clock at the receiving side , not what came in the message */
+    ka_info->last_recv_ka_timestamp = bcmos_timestamp();
+}
+
+bcmos_errno create_keep_alive_timer(bcmos_keep_alive_info *ka_info, bcmos_module_id module_id)
+{
+    bcmos_timer_parm timer_params = {};
+    bcmos_errno rc = BCM_ERR_OK;
+    ka_info->last_recv_ka_timestamp = 0;
+    ka_info->last_recv_ka_seq = 0;
+
+    snprintf(ka_info->ka_timer.name, sizeof(ka_info->ka_timer.name), "keep_alive_t%u", ka_info->device);
+    timer_params.name = ka_info->ka_timer.name;
+    timer_params.owner = module_id;
+    timer_params.periodic = BCMOS_TRUE;
+    timer_params.handler = keep_alive_timer_handler;
+    timer_params.data = (long)ka_info;
+    rc = bcmos_timer_create(&ka_info->ka_timer.timer, &timer_params);
+    if (rc != BCM_ERR_OK)
+    {
+        BCMOS_TRACE_ERR(
+            "keep alive timer creation failed, bcmos_timer_create returned error %s (%d)\n",
+            bcmos_strerror(rc),
+            rc);
+    }
+    return rc;
+}
+
+void start_keep_alive_process(bcmos_keep_alive_info *ka_info)
+{
+    ka_info->last_recv_ka_timestamp = 0;
+    ka_info->last_recv_ka_seq = 0;
+    ka_info->ka_process_start_ts = bcmos_timestamp();
+    bcmos_timer_start(&ka_info->ka_timer.timer, ka_info->ka_interval);
+}
+
+void stop_keep_alive_process(bcmos_keep_alive_info *ka_info)
+{
+    bcmos_timer_stop(&ka_info->ka_timer.timer);
+}
+
+#ifdef __KERNEL__
+EXPORT_SYMBOL(create_keep_alive_timer);
+EXPORT_SYMBOL(keep_alive_rx_handler);
+
+MODULE_DESCRIPTION("BCM device keep-alive support");
+MODULE_LICENSE("Dual BSD/GPL");
+#endif
diff --git a/bcm68620_release/release/host_driver/keep_alive/bcm_keep_alive.h b/bcm68620_release/release/host_driver/keep_alive/bcm_keep_alive.h
new file mode 100644
index 0000000..3779ddd
--- /dev/null
+++ b/bcm68620_release/release/host_driver/keep_alive/bcm_keep_alive.h
@@ -0,0 +1,86 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef BCM_KEEP_ALIVE_H_
+#define BCM_KEEP_ALIVE_H_
+
+#include <bcmos_system.h>
+#include <bcmolt_conv.h>
+
+/* Message originator : device  or host */
+typedef enum
+{
+    BCM_KEEP_ALIVE_MSG_ORIG_DEVICE,
+    BCM_KEEP_ALIVE_MSG_ORIG_HOST,
+} keep_alive_msg_orig;
+
+typedef struct
+{
+    char name[MAX_TIMER_NAME_SIZE];
+    bcmos_timer timer;
+} keep_alive_timer;
+
+typedef bcmos_errno (*F_bcmos_keep_alive_send_handler)(bcmolt_devid device, bcmolt_msg *msg);
+typedef bcmos_errno (*F_bcmos_keep_alive_disconnect_handler)(bcmolt_devid device);
+
+typedef struct
+{
+    uint32_t last_sent_ka_seq;
+    uint32_t last_recv_ka_seq;
+    uint32_t last_recv_ka_timestamp;
+    uint32_t ka_process_start_ts;
+    uint32_t ka_interval;
+    uint32_t ka_tolerance;
+    keep_alive_msg_orig orig;
+    bcmolt_devid device;
+    keep_alive_timer ka_timer;
+    F_bcmos_keep_alive_disconnect_handler disconnect_handler;
+    F_bcmos_keep_alive_send_handler send_handler;
+} bcmos_keep_alive_info;
+
+typedef union
+{
+    bcmolt_device_device_keep_alive device;  /**< Keep alive message originated at the Device */
+    bcmolt_device_host_keep_alive host;      /**< Keep alive message originated at the Host */
+} bcmos_keep_alive_msg;
+
+typedef union
+{
+    bcmolt_device_device_keep_alive_data device;  /**< Keep alive message originated at the Device */
+    bcmolt_device_host_keep_alive_data host;      /**< Keep alive message originated at the Host */
+} bcmos_keep_alive_data_msg;
+
+BCMOLT_TYPE2STR(keep_alive_msg_orig, extern)
+
+void keep_alive_rx_handler(const bcmos_keep_alive_data_msg *ka_data_msg, bcmos_keep_alive_info *ka_info);
+bcmos_errno create_keep_alive_timer(bcmos_keep_alive_info *ka_info,bcmos_module_id module_id);
+void start_keep_alive_process(bcmos_keep_alive_info *ka_info);
+void stop_keep_alive_process(bcmos_keep_alive_info *ka_info);
+
+#endif /* BCM_KEEP_ALIVE_H_ */
diff --git a/bcm68620_release/release/host_driver/keep_alive/daemon/Makefile b/bcm68620_release/release/host_driver/keep_alive/daemon/Makefile
new file mode 100755
index 0000000..5eb7f6c
--- /dev/null
+++ b/bcm68620_release/release/host_driver/keep_alive/daemon/Makefile
@@ -0,0 +1,11 @@
+# Common keep_alive
+#
+MOD_NAME = keep_alive_daemon
+
+MOD_TYPE = lib
+
+MOD_DEPS = model   
+
+srcs = ../bcm_keep_alive.c
+	 
+USE_LINT = yes
diff --git a/bcm68620_release/release/host_driver/mh_utils/bcmolt_mh_utils.h b/bcm68620_release/release/host_driver/mh_utils/bcmolt_mh_utils.h
new file mode 100644
index 0000000..6252a45
--- /dev/null
+++ b/bcm68620_release/release/host_driver/mh_utils/bcmolt_mh_utils.h
@@ -0,0 +1,149 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef _BCMOLT_MH_UTILS_H_
+#define _BCMOLT_MH_UTILS_H_
+
+#define MH_EXIT_IF(cond, error)                                                                                        \
+    do                                                                                                                 \
+    {                                                                                                                  \
+        if (cond)                                                                                                      \
+        {                                                                                                              \
+            if ((error) != BCM_ERR_OK && (error) != BCM_ERR_NO_MORE)                                                   \
+            {                                                                                                          \
+                BCMOS_TRACE_INFO(#cond);                                                                               \
+            }                                                                                                          \
+            err = (error);                                                                                             \
+            goto cleanup;                                                                                              \
+        }                                                                                                              \
+    } while (BCMOS_FALSE)
+
+/* Macro for declaring cfg_get_multi handlers, since the format is perfectly regular */
+#define MH_DECLARE_CFG_GET_MULTI(obj)                                                                                  \
+static bcmos_errno mh_##obj##_cfg_get_multi(                                                                           \
+    const bcmolt_##obj##_cfg *filter,                                                                                  \
+    bcmolt_filter_flags flags,                                                                                         \
+    bcmolt_msg_set *msg_set)                                                                                           \
+{                                                                                                                      \
+    bcmolt_##obj##_cfg cfg;                                                                                            \
+    uint8_t *filter_packed = NULL;                                                                                     \
+    uint8_t *msg_packed = NULL;                                                                                        \
+    bcmos_errno err;                                                                                                   \
+    bcmos_bool success;                                                                                                \
+    uint32_t len;                                                                                                      \
+    bcmolt_buf buf;                                                                                                    \
+    bcmos_bool is_match;                                                                                               \
+    bcmolt_msg dummy_hdr;                                                                                              \
+    bcmolt_##obj##_key_id dummy_prop_id;                                                                               \
+                                                                                                                       \
+    /* assume we didn't finish all objects unless told otherwise */                                                    \
+    msg_set->more = BCMOS_TRUE;                                                                                        \
+                                                                                                                       \
+    /* start with the key included in the filter */                                                                    \
+    *((bcmolt_##obj##_key *)msg_set->next_key) = filter->key;                                                          \
+                                                                                                                       \
+    /* if the filter's key contains any wildcards, get the first real key */                                           \
+    err = mh_##obj##_key_resolve_wildcards(msg_set->next_key);                                                         \
+    MH_EXIT_IF(err != BCM_ERR_OK, err);                                                                                \
+                                                                                                                       \
+    /* if the initial key is invalid, exit early */                                                                    \
+    MH_EXIT_IF(                                                                                                        \
+        !bcmolt_##obj##_key_bounds_check(msg_set->next_key, BCMOLT_PRESENCE_MASK_ALL, &dummy_prop_id),                 \
+        BCM_ERR_KEY_RANGE);                                                                                            \
+    err = mh_##obj##_key_validate(&dummy_hdr, msg_set->next_key);                                                      \
+    MH_EXIT_IF(err != BCM_ERR_OK, err);                                                                                \
+                                                                                                                       \
+    /* pack filter data (including presence mask) for comparisons */                                                   \
+    len = bcmolt_##obj##_cfg_data_get_packed_length(&filter->data, filter->hdr.hdr.presence_mask);                     \
+    filter_packed = bcmos_calloc(len);                                                                                 \
+    MH_EXIT_IF(len > 0 && filter_packed == NULL, BCM_ERR_NOMEM);                                                       \
+    bcmolt_buf_init(&buf, len, filter_packed, BCMOLT_BUF_ENDIAN_FIXED);                                                \
+    success = bcmolt_##obj##_cfg_data_pack(&filter->data, &buf, filter->hdr.hdr.presence_mask);                        \
+                                                                                                                       \
+    while (msg_set->num_instances < msg_set->max_instances)                                                            \
+    {                                                                                                                  \
+        /* initialize the cfg structure with the key and pass it to the MH cfg_get handler */                          \
+        BCMOLT_CFG_INIT(&cfg, obj, *((bcmolt_##obj##_key *)msg_set->next_key));                                        \
+        /* (get all properties that were requested or are being filtered on) */                                        \
+        cfg.hdr.hdr.presence_mask = msg_set->presence_mask | filter->hdr.hdr.presence_mask;                            \
+        cfg.hdr.hdr.type = BCMOLT_MSG_TYPE_GET;                                                                        \
+        cfg.hdr.hdr.dir = BCMOLT_MSG_DIR_RESPONSE;                                                                     \
+        cfg.hdr.hdr.err = mh_##obj##_cfg_get(&cfg.hdr.hdr, &cfg.key, &cfg.data);                                       \
+        MH_EXIT_IF(cfg.hdr.hdr.err != BCM_ERR_OK, cfg.hdr.hdr.err);                                                    \
+                                                                                                                       \
+        /* pack the resulting message data */                                                                          \
+        len = bcmolt_##obj##_cfg_data_get_packed_length(&cfg.data, filter->hdr.hdr.presence_mask);                     \
+        msg_packed = bcmos_calloc(len);                                                                                \
+        MH_EXIT_IF(len > 0 && msg_packed == NULL, BCM_ERR_NOMEM);                                                      \
+        bcmolt_buf_init(&buf, len, msg_packed, BCMOLT_BUF_ENDIAN_FIXED);                                               \
+        success = bcmolt_##obj##_cfg_data_pack(&cfg.data, &buf, filter->hdr.hdr.presence_mask);                        \
+        MH_EXIT_IF(!success, BCM_ERR_INTERNAL);                                                                        \
+                                                                                                                       \
+        /* check the packed message against the filter */                                                              \
+        is_match = (memcmp(filter_packed, msg_packed, len) == 0);                                                      \
+        if ((flags & BCMOLT_FILTER_FLAGS_INVERT_SELECTION) != 0)                                                       \
+        {                                                                                                              \
+            is_match = !is_match;                                                                                      \
+        }                                                                                                              \
+        bcmos_free(msg_packed);                                                                                        \
+        msg_packed = NULL;                                                                                             \
+                                                                                                                       \
+        if (is_match)                                                                                                  \
+        {                                                                                                              \
+            /* if there is a match, include this message in the message set */                                         \
+            msg_set->msg[msg_set->num_instances] = NULL;                                                               \
+            err = bcmolt_msg_clone(&msg_set->msg[msg_set->num_instances], &cfg.hdr.hdr);                               \
+            MH_EXIT_IF(err != BCM_ERR_OK, err);                                                                        \
+            msg_set->num_instances++;                                                                                  \
+        }                                                                                                              \
+                                                                                                                       \
+        /* get next key, break if no more keys are found */                                                            \
+        err = mh_##obj##_key_iterate(msg_set->next_key);                                                               \
+        MH_EXIT_IF(err != BCM_ERR_OK, err);                                                                            \
+    }                                                                                                                  \
+                                                                                                                       \
+cleanup:                                                                                                               \
+    if (filter_packed != NULL)                                                                                         \
+    {                                                                                                                  \
+        bcmos_free(filter_packed);                                                                                     \
+    }                                                                                                                  \
+    if (msg_packed != NULL)                                                                                            \
+    {                                                                                                                  \
+        bcmos_free(msg_packed);                                                                                        \
+    }                                                                                                                  \
+    if (err == BCM_ERR_NO_MORE)                                                                                        \
+    {                                                                                                                  \
+        err = BCM_ERR_OK;                                                                                              \
+        msg_set->more = BCMOS_FALSE;                                                                                   \
+    }                                                                                                                  \
+    return err;                                                                                                        \
+}
+
+#endif /* _BCMOLT_MH_UTILS_H_ */
+
diff --git a/bcm68620_release/release/host_driver/model/Makefile b/bcm68620_release/release/host_driver/model/Makefile
new file mode 100644
index 0000000..7416316
--- /dev/null
+++ b/bcm68620_release/release/host_driver/model/Makefile
@@ -0,0 +1,21 @@
+# Maple object model
+#
+MOD_NAME = model
+MOD_TYPE = lib
+MOD_DEPS = utils common_api
+MOD_INC_DIRS = $(MODEL_OUT_DIR)
+gen_srcs = bcmolt_model_types.c bcmolt_msg_pack.c
+
+ifeq ("$(OS_KERNEL)", "linux")
+    MOD_DEPS += sysmodel
+endif
+
+EXTRA_TYPES += pon_onu_id pon_alloc_id pon_gem_port_id pon_alloc_index pon_gem_port_index
+
+ifeq ("$(ENABLE_EPON)", "y")
+    EXTRA_TYPES += eni pon_rate ieee_8021as_time_sync 
+endif
+
+ifeq ("$(ENABLE_GPON)", "y")
+    EXTRA_TYPES += burst_profile mac_table_idx_main mac_table_idx_cam mac_table_idx_combined
+endif
diff --git a/bcm68620_release/release/host_driver/model/bcmolt_model_data.h b/bcm68620_release/release/host_driver/model/bcmolt_model_data.h
new file mode 100644
index 0000000..f83d4e7
--- /dev/null
+++ b/bcm68620_release/release/host_driver/model/bcmolt_model_data.h
@@ -0,0 +1,3893 @@
+/*
+<:copyright-BRCM:2016:proprietary:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+This program is the proprietary software of Broadcom Corporation and/or its
+licensors, and may only be used, duplicated, modified or distributed pursuant
+to the terms and conditions of a separate, written license agreement executed
+between you and Broadcom (an "Authorized License").  Except as set forth in
+an Authorized License, Broadcom grants no license (express or implied), right
+to use, or waiver of any kind with respect to the Software, and Broadcom
+expressly reserves all rights in and to the Software and all intellectual
+property rights therein.  IF YOU HAVE NO AUTHORIZED LICENSE, THEN YOU HAVE
+NO RIGHT TO USE THIS SOFTWARE IN ANY WAY, AND SHOULD IMMEDIATELY NOTIFY
+BROADCOM AND DISCONTINUE ALL USE OF THE SOFTWARE.
+
+Except as expressly set forth in the Authorized License,
+
+1. This program, including its structure, sequence and organization,
+    constitutes the valuable trade secrets of Broadcom, and you shall use
+    all reasonable efforts to protect the confidentiality thereof, and to
+    use this information only in connection with your use of Broadcom
+    integrated circuit products.
+
+2. TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
+    AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES, REPRESENTATIONS OR
+    WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH
+    RESPECT TO THE SOFTWARE.  BROADCOM SPECIFICALLY DISCLAIMS ANY AND
+    ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY, NONINFRINGEMENT,
+    FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES, ACCURACY OR
+    COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR CORRESPONDENCE
+    TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING OUT OF USE OR
+    PERFORMANCE OF THE SOFTWARE.
+
+3. TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM OR
+    ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL, INCIDENTAL, SPECIAL,
+    INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER ARISING OUT OF OR IN ANY
+    WAY RELATING TO YOUR USE OF OR INABILITY TO USE THE SOFTWARE EVEN
+    IF BROADCOM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES;
+    OR (ii) ANY AMOUNT IN EXCESS OF THE AMOUNT ACTUALLY PAID FOR THE
+    SOFTWARE ITSELF OR U.S. $1, WHICHEVER IS GREATER. THESE LIMITATIONS
+    SHALL APPLY NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY
+    LIMITED REMEDY.
+:>
+*/
+#ifndef BCMOLT_MODEL_DATA_H_
+#define BCMOLT_MODEL_DATA_H_
+
+#include "bcmos_system.h"
+
+/** \addtogroup object_model
+ * @{
+ */
+typedef uint32_t bcmolt_time_quanta;                                /**< bcmolt_time_quanta: typed alias for a 32-bit unsigned integer. */
+typedef uint16_t bcmolt_ae_ni;                                      /**< bcmolt_ae_ni: typed alias for a 16-bit unsigned integer. */
+#define BCMOLT_AE_NI_AE_NI_INVALID  ((bcmolt_ae_ni) 65535U)
+typedef uint8_t bcmolt_aggregation_domain;                          /**< bcmolt_aggregation_domain: typed alias for a 8-bit unsigned integer. */
+typedef uint32_t bcmolt_bandwidth_Kbps;                             /**< bcmolt_bandwidth_Kbps: typed alias for a 32-bit unsigned integer. */
+typedef uint32_t bcmolt_ber_interval;                               /**< bcmolt_ber_interval: typed alias for a 32-bit unsigned integer. */
+#define BCMOLT_BER_INTERVAL_BER_INTERVAL_NOT_CONFIGURED ((bcmolt_ber_interval) 0)
+typedef uint8_t bcmolt_burst_profile_index;                         /**< bcmolt_burst_profile_index: typed alias for a 8-bit unsigned integer. */
+typedef uint8_t bcmolt_dba_port;                                    /**< bcmolt_dba_port: typed alias for a 8-bit unsigned integer. */
+#define BCMOLT_DBA_PORT_COUNT   ((bcmolt_dba_port) 8)
+typedef uint8_t bcmolt_epon_top;                                    /**< bcmolt_epon_top: typed alias for a 8-bit unsigned integer. */
+#define BCMOLT_EPON_TOP_COUNT   ((bcmolt_epon_top) 8)
+typedef uint8_t bcmolt_epm_lim_global;                              /**< bcmolt_epm_lim_global: typed alias for a 8-bit unsigned integer. */
+#define BCMOLT_EPM_LIM_GLOBAL_COUNT ((bcmolt_epm_lim_global) 16)
+typedef uint8_t bcmolt_xg2g_id;                                     /**< bcmolt_xg2g_id: typed alias for a 8-bit unsigned integer. */
+typedef uint16_t bcmolt_epon_llid;                                  /**< bcmolt_epon_llid: typed alias for a 16-bit unsigned integer. */
+#define BCMOLT_EPON_LLID_BROADCAST_LLID_10G ((bcmolt_epon_llid) 32766)
+#define BCMOLT_EPON_LLID_BROADCAST_LLID_1G  ((bcmolt_epon_llid) 32767)
+typedef uint32_t bcmolt_epon_tunnel_id;                             /**< bcmolt_epon_tunnel_id: typed alias for a 32-bit unsigned integer. */
+typedef uint16_t bcmolt_epon_ni;                                    /**< bcmolt_epon_ni: typed alias for a 16-bit unsigned integer. */
+#define BCMOLT_EPON_NI_INVALID  ((bcmolt_epon_ni) 65535U)
+typedef uint8_t bcmolt_epon_onu_id;                                 /**< bcmolt_epon_onu_id: typed alias for a 8-bit unsigned integer. */
+#define BCMOLT_EPON_ONU_ID_UNKNOWN_ONU  ((bcmolt_epon_onu_id) 255)
+typedef uint16_t bcmolt_flow_id;                                    /**< bcmolt_flow_id: typed alias for a 16-bit unsigned integer. */
+typedef uint16_t bcmolt_gpon_alloc_id;                              /**< bcmolt_gpon_alloc_id: typed alias for a 16-bit unsigned integer. */
+#define BCMOLT_GPON_ALLOC_ID_ANY        ((bcmolt_gpon_alloc_id) 65534U)
+#define BCMOLT_GPON_ALLOC_ID_INVALID    ((bcmolt_gpon_alloc_id) 65535U)
+typedef uint16_t bcmolt_vlan_id;                                    /**< bcmolt_vlan_id: typed alias for a 16-bit unsigned integer. */
+#define BCMOLT_VLAN_ID_MAX  ((bcmolt_vlan_id) 4095)
+#define BCMOLT_VLAN_ID_ANY  ((bcmolt_vlan_id) 65535U)
+typedef uint16_t bcmolt_gpon_gem_id;                                /**< bcmolt_gpon_gem_id: typed alias for a 16-bit unsigned integer. */
+#define BCMOLT_GPON_GEM_ID_ANY      ((bcmolt_gpon_gem_id) 65534U)
+#define BCMOLT_GPON_GEM_ID_INVALID  ((bcmolt_gpon_gem_id) 65535U)
+typedef uint16_t bcmolt_gpon_onu_id;                                /**< bcmolt_gpon_onu_id: typed alias for a 16-bit unsigned integer. */
+#define BCMOLT_GPON_ONU_ID_ANY      ((bcmolt_gpon_onu_id) 65534U)
+#define BCMOLT_GPON_ONU_ID_INVALID  ((bcmolt_gpon_onu_id) 65535U)
+typedef uint8_t bcmolt_gpon_ni;                                     /**< bcmolt_gpon_ni: typed alias for a 8-bit unsigned integer. */
+#define BCMOLT_GPON_NI_INVALID  ((bcmolt_gpon_ni) 255)
+typedef uint16_t bcmolt_pon_onu_id;                                 /**< bcmolt_pon_onu_id: typed alias for a 16-bit unsigned integer. */
+#define BCMOLT_PON_ONU_ID_INVALID   ((bcmolt_pon_onu_id) 65535U)
+typedef uint8_t bcmolt_mac_table_idx_cam;                           /**< bcmolt_mac_table_idx_cam: typed alias for a 8-bit unsigned integer. */
+#define BCMOLT_MAC_TABLE_IDX_CAM_NONE   ((bcmolt_mac_table_idx_cam) 255)
+typedef uint16_t bcmolt_mac_table_idx_combined;                     /**< bcmolt_mac_table_idx_combined: typed alias for a 16-bit unsigned integer. */
+#define BCMOLT_MAC_TABLE_IDX_COMBINED_NONE  ((bcmolt_mac_table_idx_combined) 65535U)
+typedef uint16_t bcmolt_mac_table_idx_main;                         /**< bcmolt_mac_table_idx_main: typed alias for a 16-bit unsigned integer. */
+#define BCMOLT_MAC_TABLE_IDX_MAIN_NONE  ((bcmolt_mac_table_idx_main) 65535U)
+typedef uint32_t bcmolt_meters;                                     /**< bcmolt_meters: typed alias for a 32-bit unsigned integer. */
+typedef uint16_t bcmolt_pon_alloc_id;                               /**< bcmolt_pon_alloc_id: typed alias for a 16-bit unsigned integer. */
+#define BCMOLT_PON_ALLOC_ID_INVALID ((bcmolt_pon_alloc_id) 65535U)
+typedef uint16_t bcmolt_pon_alloc_index;                            /**< bcmolt_pon_alloc_index: typed alias for a 16-bit unsigned integer. */
+#define BCMOLT_PON_ALLOC_INDEX_INVALID  ((bcmolt_pon_alloc_index) 65535U)
+typedef uint16_t bcmolt_pon_gem_port_id;                            /**< bcmolt_pon_gem_port_id: typed alias for a 16-bit unsigned integer. */
+#define BCMOLT_PON_GEM_PORT_ID_INVALID  ((bcmolt_pon_gem_port_id) 65535U)
+typedef uint16_t bcmolt_pon_gem_port_index;                         /**< bcmolt_pon_gem_port_index: typed alias for a 16-bit unsigned integer. */
+#define BCMOLT_PON_GEM_PORT_INDEX_INVALID   ((bcmolt_pon_gem_port_index) 65535U)
+typedef uint8_t bcmolt_pon_ni;                                      /**< bcmolt_pon_ni: typed alias for a 8-bit unsigned integer. */
+#define BCMOLT_PON_NI_INVALID   ((bcmolt_pon_ni) 255)
+typedef uint16_t bcmolt_xgpon_alloc_id;                             /**< bcmolt_xgpon_alloc_id: typed alias for a 16-bit unsigned integer. */
+#define BCMOLT_XGPON_ALLOC_ID_ANY       ((bcmolt_xgpon_alloc_id) 65534U)
+#define BCMOLT_XGPON_ALLOC_ID_INVALID   ((bcmolt_xgpon_alloc_id) 65535U)
+typedef uint16_t bcmolt_xgpon_gem_id;                               /**< bcmolt_xgpon_gem_id: typed alias for a 16-bit unsigned integer. */
+#define BCMOLT_XGPON_GEM_ID_ANY     ((bcmolt_xgpon_gem_id) 65534U)
+#define BCMOLT_XGPON_GEM_ID_INVALID ((bcmolt_xgpon_gem_id) 65535U)
+typedef uint8_t bcmolt_xgpon_ni;                                    /**< bcmolt_xgpon_ni: typed alias for a 8-bit unsigned integer. */
+#define BCMOLT_XGPON_NI_INVALID ((bcmolt_xgpon_ni) 255)
+typedef uint16_t bcmolt_xgpon_onu_id;                               /**< bcmolt_xgpon_onu_id: typed alias for a 16-bit unsigned integer. */
+#define BCMOLT_XGPON_ONU_ID_ANY     ((bcmolt_xgpon_onu_id) 65534U)
+#define BCMOLT_XGPON_ONU_ID_INVALID ((bcmolt_xgpon_onu_id) 65535U)
+
+/** activation fail reason. 
+ */
+typedef enum bcmolt_activation_fail_reason
+{
+    BCMOLT_ACTIVATION_FAIL_REASON__BEGIN                    = 0,
+    BCMOLT_ACTIVATION_FAIL_REASON_NONE                      = 0,    /**< None. */
+    BCMOLT_ACTIVATION_FAIL_REASON_RANGING                   = 1,    /**< Ranging. */
+    BCMOLT_ACTIVATION_FAIL_REASON_PASSWORD_AUTHENTICATION   = 2,    /**< Password authentication. */
+    BCMOLT_ACTIVATION_FAIL_REASON_LOS                       = 3,    /**< LOS. */
+    BCMOLT_ACTIVATION_FAIL_REASON_ONU_ALARM                 = 4,    /**< ONU Alarm. */
+    BCMOLT_ACTIVATION_FAIL_REASON__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_activation_fail_reason;
+
+/** Additional BW eligibility. 
+ */
+typedef enum bcmolt_additional_bw_eligibility
+{
+    BCMOLT_ADDITIONAL_BW_ELIGIBILITY__BEGIN                 = 0,
+    BCMOLT_ADDITIONAL_BW_ELIGIBILITY_NONE                   = 0,    /**< None. */
+    BCMOLT_ADDITIONAL_BW_ELIGIBILITY_NON_ASSURED            = 1,    /**< Non Assured. */
+    BCMOLT_ADDITIONAL_BW_ELIGIBILITY_BEST_EFFORT            = 2,    /**< Best Effort. */
+    BCMOLT_ADDITIONAL_BW_ELIGIBILITY__NUM_OF                        /**< Number of enum entries, not an entry itself. */
+} bcmolt_additional_bw_eligibility;
+
+/** Enable state of the AE NI. 
+ */
+typedef enum bcmolt_ae_ni_en_state
+{
+    BCMOLT_AE_NI_EN_STATE__BEGIN                            = 0,
+    BCMOLT_AE_NI_EN_STATE_DISABLED                          = 0,    /**< AE NI is fully disabled. */
+    BCMOLT_AE_NI_EN_STATE_ENABLED                           = 1,    /**< AE NI is fully enabled. */
+    BCMOLT_AE_NI_EN_STATE__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_ae_ni_en_state;
+
+/** Alloc operation. 
+ */
+typedef enum bcmolt_alloc_operation
+{
+    BCMOLT_ALLOC_OPERATION__BEGIN                           = 0,
+    BCMOLT_ALLOC_OPERATION_ACTIVATE                         = 0,    /**< Activate. */
+    BCMOLT_ALLOC_OPERATION_DEACTIVATE                       = 1,    /**< Deactivate. */
+    BCMOLT_ALLOC_OPERATION__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_alloc_operation;
+
+/** Alloc State. 
+ */
+typedef enum bcmolt_alloc_state
+{
+    BCMOLT_ALLOC_STATE__BEGIN                               = 0,
+    BCMOLT_ALLOC_STATE_NOT_CONFIGURED                       = 0,    /**< Not configured. */
+    BCMOLT_ALLOC_STATE_INACTIVE                             = 1,    /**< Inactive. */
+    BCMOLT_ALLOC_STATE_PROCESSING                           = 2,    /**< Processing. */
+    BCMOLT_ALLOC_STATE_ACTIVE                               = 3,    /**< Active. */
+    BCMOLT_ALLOC_STATE__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_alloc_state;
+
+/** Alloc Type. 
+ */
+typedef enum bcmolt_alloc_type
+{
+    BCMOLT_ALLOC_TYPE__BEGIN                                = 0,
+    BCMOLT_ALLOC_TYPE_NONE                                  = 0,    /**< None. */
+    BCMOLT_ALLOC_TYPE_NSR                                   = 1,    /**< Non Status Report. */
+    BCMOLT_ALLOC_TYPE_SR                                    = 2,    /**< Status Report. */
+    BCMOLT_ALLOC_TYPE__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_alloc_type;
+
+/** Alloc Type to scan during the rogue onu detection process. 
+ */
+typedef enum bcmolt_alloc_type_to_scan
+{
+    BCMOLT_ALLOC_TYPE_TO_SCAN__BEGIN                        = 0,
+    BCMOLT_ALLOC_TYPE_TO_SCAN_UNUSED                        = 0,    /**< Scan only the Alloc-IDs that have not been used. */
+    BCMOLT_ALLOC_TYPE_TO_SCAN_PREVIOUSLY_USED               = 1,    /**< Scan only the Alloc-IDs that has been used but currently not being used.  This is for detecting the case when the OLT has released the Alloc, but the ONU is still holding it due to an error. */
+    BCMOLT_ALLOC_TYPE_TO_SCAN_ALL                           = 2,    /**< Scan both used and unused Alloc-IDs. */
+    BCMOLT_ALLOC_TYPE_TO_SCAN__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_alloc_type_to_scan;
+
+/** What to do when the capture buffer is full. 
+ */
+typedef enum bcmolt_api_capture_buffer_mode
+{
+    BCMOLT_API_CAPTURE_BUFFER_MODE__BEGIN                   = 0,
+    BCMOLT_API_CAPTURE_BUFFER_MODE_OVERFLOW                 = 0,    /**< Drop messages when the buffer is full. */
+    BCMOLT_API_CAPTURE_BUFFER_MODE_WRAP                     = 1,    /**< Wrap back to the beginning when the buffer is full. */
+    BCMOLT_API_CAPTURE_BUFFER_MODE__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_api_capture_buffer_mode;
+
+/** Where to perform the API capture. 
+ */
+typedef enum bcmolt_api_capture_location
+{
+    BCMOLT_API_CAPTURE_LOCATION__BEGIN                      = 0,
+    BCMOLT_API_CAPTURE_LOCATION_DEVICE                      = 0,    /**< On the device. */
+    BCMOLT_API_CAPTURE_LOCATION_HOST                        = 1,    /**< On the host. */
+    BCMOLT_API_CAPTURE_LOCATION__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_api_capture_location;
+
+/** Calibration Record. 
+ */
+typedef enum bcmolt_calibration_record
+{
+    BCMOLT_CALIBRATION_RECORD__BEGIN                        = 0,
+    BCMOLT_CALIBRATION_RECORD_UNSPECIFIED                   = 0,    /**< Unspecified. */
+    BCMOLT_CALIBRATION_RECORD_UNCALIBRATED                  = 1,    /**< Uncalibrated. */
+    BCMOLT_CALIBRATION_RECORD_LOOSE                         = 2,    /**< Loose. */
+    BCMOLT_CALIBRATION_RECORD_SUFFICIENT                    = 3,    /**< Sufficient. */
+    BCMOLT_CALIBRATION_RECORD__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_calibration_record;
+
+/** sign. 
+ */
+typedef enum bcmolt_sign
+{
+    BCMOLT_SIGN__BEGIN                                      = 0,
+    BCMOLT_SIGN_POSITIVE                                    = 0,    /**< Positive. */
+    BCMOLT_SIGN_NEGATIVE                                    = 1,    /**< Negative. */
+    BCMOLT_SIGN__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_sign;
+
+/** XGPON ni upstream line rate capabilities 
+ */
+typedef enum bcmolt_upstream_line_rate_capabilities
+{
+    BCMOLT_UPSTREAM_LINE_RATE_CAPABILITIES__BEGIN           = 0,
+    BCMOLT_UPSTREAM_LINE_RATE_CAPABILITIES_RATE_2_P_5_G     = 0,    /**< 2.5G Upstream line rate capability */
+    BCMOLT_UPSTREAM_LINE_RATE_CAPABILITIES_RATE_10_G        = 1,    /**< 10G Upstream line rate capability */
+    BCMOLT_UPSTREAM_LINE_RATE_CAPABILITIES__NUM_OF                  /**< Number of enum entries, not an entry itself. */
+} bcmolt_upstream_line_rate_capabilities;
+
+/** Link type. 
+ */
+typedef enum bcmolt_link_type
+{
+    BCMOLT_LINK_TYPE__BEGIN                                 = 0,
+    BCMOLT_LINK_TYPE_UNSPECIFIED                            = 0,    /**< Link type unspecified */
+    BCMOLT_LINK_TYPE_B                                      = 1,    /**< Link type A is not supported, link type B is supported */
+    BCMOLT_LINK_TYPE_A                                      = 2,    /**< Link type A is supported, link type B is not supported */
+    BCMOLT_LINK_TYPE_A_AND_B                                = 3,    /**< Both link types A and B are supported */
+    BCMOLT_LINK_TYPE__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_link_type;
+
+/** capture strobe signal. 
+ */
+typedef enum bcmolt_capture_strobe_signal
+{
+    BCMOLT_CAPTURE_STROBE_SIGNAL__BEGIN                     = 0,
+    BCMOLT_CAPTURE_STROBE_SIGNAL_GPON_BCDR_RESET            = 0,    /**< gpon bcdr reset. */
+    BCMOLT_CAPTURE_STROBE_SIGNAL_GPON_TRX_ED                = 1,    /**< gpon trx ed. */
+    BCMOLT_CAPTURE_STROBE_SIGNAL_GPON_RSSI                  = 2,    /**< gpon rssi. */
+    BCMOLT_CAPTURE_STROBE_SIGNAL_GPON_EOB                   = 3,    /**< gpon eob. */
+    BCMOLT_CAPTURE_STROBE_SIGNAL_SERDES_BURST_EN            = 4,    /**< serdes burst en. */
+    BCMOLT_CAPTURE_STROBE_SIGNAL_SERDES_RX_LOCK             = 5,    /**< serdes rx lock. */
+    BCMOLT_CAPTURE_STROBE_SIGNAL__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_capture_strobe_signal;
+
+/** Console Redirection Type. 
+ */
+typedef enum bcmolt_console_redirection
+{
+    BCMOLT_CONSOLE_REDIRECTION__BEGIN                       = 0,
+    BCMOLT_CONSOLE_REDIRECTION_NONE                         = 0,    /**< No redirection */
+    BCMOLT_CONSOLE_REDIRECTION_REDIRECT                     = 1,    /**< Embedded console output is redirected to the host */
+    BCMOLT_CONSOLE_REDIRECTION_CLONE                        = 2,    /**< Embedded console output is cloned to the host */
+    BCMOLT_CONSOLE_REDIRECTION__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_console_redirection;
+
+/** control state. 
+ */
+typedef enum bcmolt_control_state
+{
+    BCMOLT_CONTROL_STATE__BEGIN                             = 0,
+    BCMOLT_CONTROL_STATE_DISABLE                            = 0,    /**< Disabled. */
+    BCMOLT_CONTROL_STATE_ENABLE                             = 1,    /**< Enabled. */
+    BCMOLT_CONTROL_STATE__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_control_state;
+
+/** dba mode. 
+ */
+typedef enum bcmolt_dba_mode
+{
+    BCMOLT_DBA_MODE__BEGIN                                  = 0,
+    BCMOLT_DBA_MODE_NORMAL                                  = 0,    /**< normal. */
+    BCMOLT_DBA_MODE_EXTENDED                                = 1,    /**< extended. */
+    BCMOLT_DBA_MODE__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_dba_mode;
+
+/** DBA RAM. 
+ */
+typedef enum bcmolt_dba_ram
+{
+    BCMOLT_DBA_RAM__BEGIN                                   = 0,
+    BCMOLT_DBA_RAM_GRANT_FIFO_RAM_0                         = 0,    /**< Grant FIFO RAM 0. */
+    BCMOLT_DBA_RAM_GRANT_FIFO_RAM_1                         = 1,    /**< Grant FIFO RAM 1. */
+    BCMOLT_DBA_RAM_GRANT_FIFO_RAM_2                         = 2,    /**< Grant FIFO RAM 2. */
+    BCMOLT_DBA_RAM_GRANT_FIFO_RAM_3                         = 3,    /**< Grant FIFO RAM 3. */
+    BCMOLT_DBA_RAM_GRANT_FIFO_RAM_4                         = 4,    /**< Grant FIFO RAM 4. */
+    BCMOLT_DBA_RAM_GRANT_FIFO_RAM_5                         = 5,    /**< Grant FIFO RAM 5. */
+    BCMOLT_DBA_RAM_GRANT_FIFO_RAM_6                         = 6,    /**< Grant FIFO RAM 6. */
+    BCMOLT_DBA_RAM_GRANT_FIFO_RAM_7                         = 7,    /**< Grant FIFO RAM 7. */
+    BCMOLT_DBA_RAM_GRANTS_OUT_RAM                           = 8,    /**< Grants Out RAM. */
+    BCMOLT_DBA_RAM_GRANTS_IN_RAM                            = 9,    /**< Grants In RAM. */
+    BCMOLT_DBA_RAM_GRANTS_RETIRED_RAM                       = 10,   /**< Grants Retired RAM. */
+    BCMOLT_DBA_RAM_REPORT_RAM                               = 11,   /**< Report RAM. */
+    BCMOLT_DBA_RAM_GRANT_CFG_RAM                            = 12,   /**< Grant Cfg RAM. */
+    BCMOLT_DBA_RAM_DEFAULT_TOKENS_RAM                       = 13,   /**< Default Tokens RAM. */
+    BCMOLT_DBA_RAM_POLL_RECORDS_RAM                         = 14,   /**< Poll Records RAM. */
+    BCMOLT_DBA_RAM_HEIR_POLL_RAM                            = 15,   /**< Heir Poll RAM. */
+    BCMOLT_DBA_RAM_LAST_POLL_TIME_RAM                       = 16,   /**< Last Poll Time RAM. */
+    BCMOLT_DBA_RAM_POLL_ORDER_RAM                           = 17,   /**< Poll Order RAM. */
+    BCMOLT_DBA_RAM_TDM_RAM_0                                = 18,   /**< TDM RAM 0. */
+    BCMOLT_DBA_RAM_TDM_RAM_1                                = 19,   /**< TDM RAM 1. */
+    BCMOLT_DBA_RAM_TDM_RAM_2                                = 20,   /**< TDM RAM 2. */
+    BCMOLT_DBA_RAM_TDM_RAM_3                                = 21,   /**< TDM RAM 3. */
+    BCMOLT_DBA_RAM_TDM_RAM_4                                = 22,   /**< TDM RAM 4. */
+    BCMOLT_DBA_RAM_TDM_RAM_5                                = 23,   /**< TDM RAM 5. */
+    BCMOLT_DBA_RAM_TDM_RAM_6                                = 24,   /**< TDM RAM 6. */
+    BCMOLT_DBA_RAM_TDM_RAM_7                                = 25,   /**< TDM RAM 7. */
+    BCMOLT_DBA_RAM__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_dba_ram;
+
+/** DBA type. 
+ */
+typedef enum bcmolt_dba_type
+{
+    BCMOLT_DBA_TYPE__BEGIN                                  = 0,
+    BCMOLT_DBA_TYPE_INTERNAL                                = 0,    /**< DBA internal implementation */
+    BCMOLT_DBA_TYPE_PARTIAL_EXTERNAL                        = 1,    /**< DBA partial external implementation (DE, BA are implemented externally) */
+    BCMOLT_DBA_TYPE_EXTERNAL                                = 2,    /**< DBA external implementation  */
+    BCMOLT_DBA_TYPE__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_dba_type;
+
+/** DDR Test Status. 
+ */
+typedef enum bcmolt_ddr_test_status
+{
+    BCMOLT_DDR_TEST_STATUS__BEGIN                           = 0,
+    BCMOLT_DDR_TEST_STATUS_COMPLETED                        = 0,    /**< The DDR test ran to completion */
+    BCMOLT_DDR_TEST_STATUS_CONNECTION_FAILED                = 1,    /**< The DDR test failed due to an issue loading the bootloader */
+    BCMOLT_DDR_TEST_STATUS_TIMEOUT                          = 2,    /**< The DDR test failed to complete within the expected time */
+    BCMOLT_DDR_TEST_STATUS__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_ddr_test_status;
+
+/** DDR Test Result. 
+ */
+typedef enum bcmolt_ddr_test_result
+{
+    BCMOLT_DDR_TEST_RESULT_SUCCESS                          = 0,        /**< Success. */
+    BCMOLT_DDR_TEST_RESULT_PHY_INIT_ERROR                   = 1,        /**< PHY Init Error. */
+    BCMOLT_DDR_TEST_RESULT_DRAM_INIT_ERROR                  = 2,        /**< DRAM Init Error. */
+    BCMOLT_DDR_TEST_RESULT_SHMOO_ERROR                      = 3,        /**< SHMOO Error. */
+    BCMOLT_DDR_TEST_RESULT_EDIS_TEST_ERROR                  = 4,        /**< EDIS Test Error. */
+    BCMOLT_DDR_TEST_RESULT_MEM_TEST_ERROR                   = 5,        /**< Mem Test Error. */
+    BCMOLT_DDR_TEST_RESULT_NOT_TESTED                       = 127       /**< Not Tested. */
+} bcmolt_ddr_test_result;
+
+/** Reasons why the connection between the host and the device failed 
+ */
+typedef enum bcmolt_host_connection_fail_reason
+{
+    BCMOLT_HOST_CONNECTION_FAIL_REASON__BEGIN                   = 0,
+    BCMOLT_HOST_CONNECTION_FAIL_REASON_TIMEOUT                  = 0,    /**< The connection process has timed out. */
+    BCMOLT_HOST_CONNECTION_FAIL_REASON_KEEPALIVE                = 1,    /**< Too much time has passed between keepalive messages from the device. */
+    BCMOLT_HOST_CONNECTION_FAIL_REASON_USER_CALLBACK_ERROR      = 2,    /**< A user callback returned a nonzero error code.  Check log output to determine which callback failed. */
+    BCMOLT_HOST_CONNECTION_FAIL_REASON_SOFTWARE_VERSION_MISMATCH= 3,    /**< The software version on the running device doesn't match the version in the host software.  Only the revision number is allowed to differ - major/minor/model must match. */
+    BCMOLT_HOST_CONNECTION_FAIL_REASON_SYSTEM_MODE_MISMATCH     = 4,    /**< The system mode on the running device doesn't match the version in the host software. */
+    BCMOLT_HOST_CONNECTION_FAIL_REASON_NNI_SPEED_MISMATCH       = 5,    /**< The NNI speed on the running device doesn't match the version in the host software. */
+    BCMOLT_HOST_CONNECTION_FAIL_REASON_RECONNECT_TIMEOUT        = 6,    /**< A running device didn't respond to the request to reconnect. */
+    BCMOLT_HOST_CONNECTION_FAIL_REASON_INTERNAL_ERROR           = 7,    /**< An unspecified internal error occurred - check the log output for details. */
+    BCMOLT_HOST_CONNECTION_FAIL_REASON_SYSTEM_MODE_NOT_SUPPORTED= 8,    /**< The given system mode is not supported on this device. */
+    BCMOLT_HOST_CONNECTION_FAIL_REASON_PARAMETER                = 9,    /**< One of the initial connection parameters was incorrect. */
+    BCMOLT_HOST_CONNECTION_FAIL_REASON__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_host_connection_fail_reason;
+
+/** deactivation reason. 
+ */
+typedef enum bcmolt_deactivation_reason
+{
+    BCMOLT_DEACTIVATION_REASON__BEGIN                           = 0,
+    BCMOLT_DEACTIVATION_REASON_NONE                             = 0,    /**< none. */
+    BCMOLT_DEACTIVATION_REASON_DEACTIVATION                     = 1,    /**< deactivation. */
+    BCMOLT_DEACTIVATION_REASON_ACK_TIMEOUT                      = 2,    /**< ack timeout. */
+    BCMOLT_DEACTIVATION_REASON_SFI                              = 3,    /**< sfi alarm. */
+    BCMOLT_DEACTIVATION_REASON_TIWI                             = 4,    /**< tiwi. */
+    BCMOLT_DEACTIVATION_REASON_PASSWORD_AUTHENTICATION          = 5,    /**< password authentication. */
+    BCMOLT_DEACTIVATION_REASON_ONU_ALARM                        = 6,    /**< onu alarm. */
+    BCMOLT_DEACTIVATION_REASON_LOS                              = 7,    /**< los. */
+    BCMOLT_DEACTIVATION_REASON_LOKI                             = 8,    /**< loki. */
+    BCMOLT_DEACTIVATION_REASON_RERANGE_FAILURE                  = 9,    /**< re-range failure. */
+    BCMOLT_DEACTIVATION_REASON__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_deactivation_reason;
+
+/** Revision of the BCM68620 device. 
+ */
+typedef enum bcmolt_device_chip_revision
+{
+    BCMOLT_DEVICE_CHIP_REVISION_A0                              = 160,  /**< A0. */
+    BCMOLT_DEVICE_CHIP_REVISION_B0                              = 176   /**< B0. */
+} bcmolt_device_chip_revision;
+
+/** Device Image Type. 
+ */
+typedef enum bcmolt_device_image_type
+{
+    BCMOLT_DEVICE_IMAGE_TYPE__BEGIN                             = 0,
+    BCMOLT_DEVICE_IMAGE_TYPE_BOOTLOADER                         = 0,    /**< Bootloader. */
+    BCMOLT_DEVICE_IMAGE_TYPE_APPLICATION                        = 1,    /**< Application. */
+    BCMOLT_DEVICE_IMAGE_TYPE_ITU_PON_ONU_FIRMWARE               = 2,    /**< ITU PON ONU firmware. */
+    BCMOLT_DEVICE_IMAGE_TYPE_EPON_ONU_FIRMWARE                  = 3,    /**< EPON ONU firmware. */
+    BCMOLT_DEVICE_IMAGE_TYPE__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_device_image_type;
+
+/** Network interface speed 
+ */
+typedef enum bcmolt_nni_speed
+{
+    BCMOLT_NNI_SPEED__BEGIN                                     = 0,
+    BCMOLT_NNI_SPEED_GBPS_1                                     = 0,    /**< 1Gbps */
+    BCMOLT_NNI_SPEED_GBPS_2P5                                   = 1,    /**< 2.5Gbps */
+    BCMOLT_NNI_SPEED_GBPS_10                                    = 2,    /**< 10Gbps */
+    BCMOLT_NNI_SPEED_GBPS_12P5                                  = 3,    /**< 12.5Gbps */
+    BCMOLT_NNI_SPEED_GBPS_10_G_MUX                              = 4,    /**< 10Gbps Mux */
+    BCMOLT_NNI_SPEED__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_nni_speed;
+
+/** Options for the reset operation. 
+ */
+typedef enum bcmolt_device_reset_mode
+{
+    BCMOLT_DEVICE_RESET_MODE_DEVICE                             = 1,    /**< Turn off the embedded device's processor. */
+    BCMOLT_DEVICE_RESET_MODE_HOST                               = 2,    /**< Reset the host processor. */
+    BCMOLT_DEVICE_RESET_MODE_ALL                                = 3     /**< Turn off the embedded device's processor and reset the host processor. */
+} bcmolt_device_reset_mode;
+
+/** The overall state of the host's connection to the device. 
+ */
+typedef enum bcmolt_device_state
+{
+    BCMOLT_DEVICE_STATE__BEGIN                                  = 0,
+    BCMOLT_DEVICE_STATE_DISCONNECTED                            = 0,    /**< The host is not connected to the device. */
+    BCMOLT_DEVICE_STATE_CONNECTING                              = 1,    /**< The host is in the process of connecting to the device. */
+    BCMOLT_DEVICE_STATE_READY                                   = 2,    /**< The device is connected to the host and is ready to accept any command from the host. */
+    BCMOLT_DEVICE_STATE_WAITING_FOR_DEVICE                      = 3,    /**< Waiting for the embedded side to respond to a configuration message. */
+    BCMOLT_DEVICE_STATE_TESTING_DDR                             = 4,    /**< A DDR test is currently in progress */
+    BCMOLT_DEVICE_STATE__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_device_state;
+
+/** Disable Serial Number Control. 
+ */
+typedef enum bcmolt_disable_serial_number_control
+{
+    BCMOLT_DISABLE_SERIAL_NUMBER_CONTROL__BEGIN                 = 0,
+    BCMOLT_DISABLE_SERIAL_NUMBER_CONTROL_UNICAST_DISABLE        = 0,    /**< Unicast Disable. */
+    BCMOLT_DISABLE_SERIAL_NUMBER_CONTROL_UNICAST_ENABLE         = 1,    /**< Unicast Enable. */
+    BCMOLT_DISABLE_SERIAL_NUMBER_CONTROL_BROADCAST_ENABLE       = 2,    /**< Broadcast Enable. */
+    BCMOLT_DISABLE_SERIAL_NUMBER_CONTROL_BROADCAST_DISABLE      = 3,    /**< Broadcast Disable. */
+    BCMOLT_DISABLE_SERIAL_NUMBER_CONTROL_DISABLE_DISCOVERY      = 4,    /**< Disable Discovery. */
+    BCMOLT_DISABLE_SERIAL_NUMBER_CONTROL__NUM_OF                        /**< Number of enum entries, not an entry itself. */
+} bcmolt_disable_serial_number_control;
+
+/** drv_icf_id. 
+ */
+typedef enum bcmolt_drv_icf_id
+{
+    BCMOLT_DRV_ICF_ID__BEGIN                                    = 0,
+    BCMOLT_DRV_ICF_ID_IDX0                                      = 0,    /**< IDX0. */
+    BCMOLT_DRV_ICF_ID_IDX1                                      = 1,    /**< IDX1. */
+    BCMOLT_DRV_ICF_ID_IDX2                                      = 2,    /**< IDX2. */
+    BCMOLT_DRV_ICF_ID_IDX3                                      = 3,    /**< IDX3. */
+    BCMOLT_DRV_ICF_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_drv_icf_id;
+
+/** drv_sgb_id. 
+ */
+typedef enum bcmolt_drv_sgb_id
+{
+    BCMOLT_DRV_SGB_ID__BEGIN                                    = 0,
+    BCMOLT_DRV_SGB_ID_IDX0                                      = 0,    /**< IDX0. */
+    BCMOLT_DRV_SGB_ID_IDX1                                      = 1,    /**< IDX1. */
+    BCMOLT_DRV_SGB_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_drv_sgb_id;
+
+/** DS VLAN action. 
+ */
+typedef enum bcmolt_ds_vlan_action
+{
+    BCMOLT_DS_VLAN_ACTION__BEGIN                                = 0,
+    BCMOLT_DS_VLAN_ACTION_REMOVE                                = 0,    /**< Remove. */
+    BCMOLT_DS_VLAN_ACTION_TRANSPARENT                           = 1,    /**< Transparent. */
+    BCMOLT_DS_VLAN_ACTION__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_ds_vlan_action;
+
+/** TFB Trap Behavior. 
+ */
+typedef enum bcmolt_tfb_trap_behavior
+{
+    BCMOLT_TFB_TRAP_BEHAVIOR__BEGIN                             = 0,
+    BCMOLT_TFB_TRAP_BEHAVIOR_DROP                               = 0,    /**< Drop. */
+    BCMOLT_TFB_TRAP_BEHAVIOR_FORWARD_NNI                        = 1,    /**< Forward NNI. */
+    BCMOLT_TFB_TRAP_BEHAVIOR_FORWARD_CPU                        = 2,    /**< Forward CPU. */
+    BCMOLT_TFB_TRAP_BEHAVIOR_SNOOP                              = 3,    /**< Snoop. */
+    BCMOLT_TFB_TRAP_BEHAVIOR__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_tfb_trap_behavior;
+
+/** TFB Mode. 
+ */
+typedef enum bcmolt_tfb_mode
+{
+    BCMOLT_TFB_MODE__BEGIN                                      = 0,
+    BCMOLT_TFB_MODE_GPON                                        = 0,    /**< GPON. */
+    BCMOLT_TFB_MODE_XGPON                                       = 1,    /**< XGPON. */
+    BCMOLT_TFB_MODE_EPON                                        = 2,    /**< EPON. */
+    BCMOLT_TFB_MODE_XEPON                                       = 3,    /**< XEPON. */
+    BCMOLT_TFB_MODE_COEX                                        = 4,    /**< COEX. */
+    BCMOLT_TFB_MODE__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_tfb_mode;
+
+/** LIM SEC Mode Up. 
+ */
+typedef enum bcmolt_lim_sec_mode_up
+{
+    BCMOLT_LIM_SEC_MODE_UP__BEGIN                               = 0,
+    BCMOLT_LIM_SEC_MODE_UP_TEK                                  = 0,    /**< Teknovus encryption mode */
+    BCMOLT_LIM_SEC_MODE_UP_PER_LLID                             = 1,    /**< Encryption per LLID, 802.1ae/zero-overhead */
+    BCMOLT_LIM_SEC_MODE_UP_NTT                                  = 2,    /**< EPON (NTT) encryption mode */
+    BCMOLT_LIM_SEC_MODE_UP__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_lim_sec_mode_up;
+
+/** LIM SEC Mode Dn. 
+ */
+typedef enum bcmolt_lim_sec_mode_dn
+{
+    BCMOLT_LIM_SEC_MODE_DN__BEGIN                               = 0,
+    BCMOLT_LIM_SEC_MODE_DN_TEK                                  = 0,    /**< Teknovus encryption mode */
+    BCMOLT_LIM_SEC_MODE_DN_PER_LLID                             = 1,    /**< Encryption per LLID, 802.1ae/zero-overhead */
+    BCMOLT_LIM_SEC_MODE_DN_NTT                                  = 2,    /**< EPON (NTT) encryption mode */
+    BCMOLT_LIM_SEC_MODE_DN_CEPON                                = 3,    /**< CEPON (3Churn) encryption mode */
+    BCMOLT_LIM_SEC_MODE_DN__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_lim_sec_mode_dn;
+
+/** XIM SEC Mode. 
+ */
+typedef enum bcmolt_xim_sec_mode
+{
+    BCMOLT_XIM_SEC_MODE__BEGIN                                  = 0,
+    BCMOLT_XIM_SEC_MODE_RESERVED_0                              = 0,    /**< Reserved 0. */
+    BCMOLT_XIM_SEC_MODE_PER_LLID                                = 1,    /**< Per LLID. */
+    BCMOLT_XIM_SEC_MODE_RESERVED_2                              = 2,    /**< Reserved 2. */
+    BCMOLT_XIM_SEC_MODE_CEPON                                   = 3,    /**< CEPON. */
+    BCMOLT_XIM_SEC_MODE__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_xim_sec_mode;
+
+/** HSC RAM. 
+ */
+typedef enum bcmolt_hsc_ram
+{
+    BCMOLT_HSC_RAM__BEGIN                                       = 0,
+    BCMOLT_HSC_RAM_LLC_T1                                       = 0,    /**< LLC T1. */
+    BCMOLT_HSC_RAM_LLC_T2                                       = 1,    /**< LLC T2. */
+    BCMOLT_HSC_RAM_LLC_T3                                       = 2,    /**< LLC T3. */
+    BCMOLT_HSC_RAM_GRP_T2                                       = 3,    /**< Grp T2. */
+    BCMOLT_HSC_RAM_GRP_T3                                       = 4,    /**< Grp T3. */
+    BCMOLT_HSC_RAM_SHP_T1                                       = 5,    /**< Shp T1. */
+    BCMOLT_HSC_RAM_SHP_T2                                       = 6,    /**< Shp T2. */
+    BCMOLT_HSC_RAM_SHP_T3                                       = 7,    /**< Shp T3. */
+    BCMOLT_HSC_RAM_PRF_T1                                       = 8,    /**< Prf T1. */
+    BCMOLT_HSC_RAM_PRF_T2                                       = 9,    /**< Prf T2. */
+    BCMOLT_HSC_RAM_PRF_T3                                       = 10,   /**< Prf T3. */
+    BCMOLT_HSC_RAM_CRE_T1                                       = 11,   /**< Cre T1. */
+    BCMOLT_HSC_RAM_CRE_T2                                       = 12,   /**< Cre T2. */
+    BCMOLT_HSC_RAM_CRE_T3                                       = 13,   /**< Cre T3. */
+    BCMOLT_HSC_RAM_ELU                                          = 14,   /**< ELU. */
+    BCMOLT_HSC_RAM_PTR_T1                                       = 15,   /**< Ptr T1. */
+    BCMOLT_HSC_RAM_PTR_T2                                       = 16,   /**< Ptr T2. */
+    BCMOLT_HSC_RAM_AGR_SHP_T1                                   = 17,   /**< Agr Shp T1. */
+    BCMOLT_HSC_RAM_AEM                                          = 18,   /**< AEM. */
+    BCMOLT_HSC_RAM_ALL_LLC                                      = 19,   /**< All LLC. */
+    BCMOLT_HSC_RAM__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_hsc_ram;
+
+/** LIM RAM. 
+ */
+typedef enum bcmolt_lim_ram
+{
+    BCMOLT_LIM_RAM__BEGIN                                       = 0,
+    BCMOLT_LIM_RAM_LLID_UP                                      = 0,    /**< LLID Up. */
+    BCMOLT_LIM_RAM_PER_ONU_STAT                                 = 1,    /**< Per ONU Stat. */
+    BCMOLT_LIM_RAM_FEC_UP_FULL_S                                = 2,    /**< FEC Up Full S. */
+    BCMOLT_LIM_RAM_FEC_UP_DATA                                  = 3,    /**< FEC Up Data. */
+    BCMOLT_LIM_RAM__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_lim_ram;
+
+/** LKY RAM. 
+ */
+typedef enum bcmolt_lky_ram
+{
+    BCMOLT_LKY_RAM__BEGIN                                       = 0,
+    BCMOLT_LKY_RAM_TX_KEY_RAM                                   = 0,    /**< Tx Key RAM. */
+    BCMOLT_LKY_RAM_TX_KEY_BUFFER                                = 1,    /**< Tx Key Buffer. */
+    BCMOLT_LKY_RAM_RX_KEY_RAM                                   = 2,    /**< Rx Key RAM. */
+    BCMOLT_LKY_RAM_RX_KEY_BUFFER                                = 3,    /**< Rx Key Buffer. */
+    BCMOLT_LKY_RAM__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_lky_ram;
+
+/** MIC RAM. 
+ */
+typedef enum bcmolt_mic_ram
+{
+    BCMOLT_MIC_RAM__BEGIN                                       = 0,
+    BCMOLT_MIC_RAM_RANGE                                        = 0,    /**< Range. */
+    BCMOLT_MIC_RAM_LLID                                         = 1,    /**< LLID. */
+    BCMOLT_MIC_RAM_IDX                                          = 2,    /**< Index. */
+    BCMOLT_MIC_RAM_GRANT_MISS                                   = 3,    /**< Grant Miss. */
+    BCMOLT_MIC_RAM_GRANT_ID                                     = 4,    /**< Grant ID. */
+    BCMOLT_MIC_RAM_TX_IV                                        = 5,    /**< Tx IV. */
+    BCMOLT_MIC_RAM_RX_IV                                        = 6,    /**< Rx IV. */
+    BCMOLT_MIC_RAM_TX_PORT_STAT                                 = 7,    /**< Tx Port Stat. */
+    BCMOLT_MIC_RAM_RX_PORT_STAT                                 = 8,    /**< Rx Port Stat. */
+    BCMOLT_MIC_RAM__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_mic_ram;
+
+/** XPCSRM RAM. 
+ */
+typedef enum bcmolt_xpcsrm_ram
+{
+    BCMOLT_XPCSRM_RAM__BEGIN                                    = 0,
+    BCMOLT_XPCSRM_RAM_CAPTURE_FIFO                              = 0,    /**< Capture FIFO. */
+    BCMOLT_XPCSRM_RAM_FEC_DECODE                                = 1,    /**< FEC Decode. */
+    BCMOLT_XPCSRM_RAM_FEC_STATS                                 = 2,    /**< FEC Stats. */
+    BCMOLT_XPCSRM_RAM_FEC_ENQUEUE                               = 3,    /**< FEC Enqueue. */
+    BCMOLT_XPCSRM_RAM_IDLE_INSERT                               = 4,    /**< Idle Insert. */
+    BCMOLT_XPCSRM_RAM__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_xpcsrm_ram;
+
+/** embedded image transfer status. 
+ */
+typedef enum bcmolt_embedded_image_transfer_status
+{
+    BCMOLT_EMBEDDED_IMAGE_TRANSFER_STATUS__BEGIN                = 0,
+    BCMOLT_EMBEDDED_IMAGE_TRANSFER_STATUS_NONE                  = 0,    /**< No file.  Transfer has never started for this entry. */
+    BCMOLT_EMBEDDED_IMAGE_TRANSFER_STATUS_IN_PROGRESS           = 1,    /**< Transfer has started and not finished. */
+    BCMOLT_EMBEDDED_IMAGE_TRANSFER_STATUS_SUCCESS               = 2,    /**< Transfer has finished successfully. */
+    BCMOLT_EMBEDDED_IMAGE_TRANSFER_STATUS_FAILURE               = 3,    /**< Transfer failed.  Typically due to CRC error. */
+    BCMOLT_EMBEDDED_IMAGE_TRANSFER_STATUS__NUM_OF                       /**< Number of enum entries, not an entry itself. */
+} bcmolt_embedded_image_transfer_status;
+
+/** EPON Encryption information format. 
+ */
+typedef enum bcmolt_epon_encryption_information_format
+{
+    BCMOLT_EPON_ENCRYPTION_INFORMATION_FORMAT__BEGIN            = 0,
+    BCMOLT_EPON_ENCRYPTION_INFORMATION_FORMAT_CFB               = 0,    /**< CFB. */
+    BCMOLT_EPON_ENCRYPTION_INFORMATION_FORMAT_CTR               = 1,    /**< CTR. */
+    BCMOLT_EPON_ENCRYPTION_INFORMATION_FORMAT__NUM_OF                   /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_encryption_information_format;
+
+/** energy detect source. 
+ */
+typedef enum bcmolt_energy_detect_source
+{
+    BCMOLT_ENERGY_DETECT_SOURCE__BEGIN                          = 0,
+    BCMOLT_ENERGY_DETECT_SOURCE_INTERNAL                        = 0,    /**< internal. */
+    BCMOLT_ENERGY_DETECT_SOURCE_TRX                             = 1,    /**< TRX. */
+    BCMOLT_ENERGY_DETECT_SOURCE_BCDR                            = 2,    /**< BCDR. */
+    BCMOLT_ENERGY_DETECT_SOURCE__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_energy_detect_source;
+
+/** EPON turbo mode.  Enables double downstream speed (2G) on 1G EPON NIs 
+ */
+typedef enum bcmolt_epon_1g_turbo_mode
+{
+    BCMOLT_EPON_1G_TURBO_MODE__BEGIN                            = 0,
+    BCMOLT_EPON_1G_TURBO_MODE_DISABLED                          = 0,    /**< Turbo mode is disabled - EPON NI has a dowstream data rate of 1G. */
+    BCMOLT_EPON_1G_TURBO_MODE_ENABLED                           = 1,    /**< Turbo mode is enabled - EPON NI has a dowstream data rate of 2G. */
+    BCMOLT_EPON_1G_TURBO_MODE__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_1g_turbo_mode;
+
+/** EPON Clock Transport Mode. 
+ */
+typedef enum bcmolt_epon_clock_transport_mode
+{
+    BCMOLT_EPON_CLOCK_TRANSPORT_MODE__BEGIN                     = 0,
+    BCMOLT_EPON_CLOCK_TRANSPORT_MODE_HOST_DRIVEN                = 0,    /**< At each pulse, the Maple will issue an indication to the host containing the equivalent MPCP time for this PON. */
+    BCMOLT_EPON_CLOCK_TRANSPORT_MODE_EMBEDDED_DRIVEN            = 1,    /**< At each pulse, the Maple will parse the ToD from the second UART (if available) and then format and send down an IEEE 802.1as clock transport time sync message to each user link. */
+    BCMOLT_EPON_CLOCK_TRANSPORT_MODE__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_clock_transport_mode;
+
+/** Control for how the DBA handles received MPCP report frames. 
+ */
+typedef enum bcmolt_epon_dba_reporting_mode
+{
+    BCMOLT_EPON_DBA_REPORTING_MODE__BEGIN                       = 0,
+    BCMOLT_EPON_DBA_REPORTING_MODE_SIEPON_A                     = 0,    /**< Handle reports as specified by SIEPON package A. */
+    BCMOLT_EPON_DBA_REPORTING_MODE_SIEPON_B                     = 1,    /**< Handle reports as specified by SIEPON package B. */
+    BCMOLT_EPON_DBA_REPORTING_MODE_SIEPON_C                     = 2,    /**< Handle reports as specified by SIEPON package C */
+    BCMOLT_EPON_DBA_REPORTING_MODE__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_dba_reporting_mode;
+
+/** EPON link rate. 
+ */
+typedef enum bcmolt_epon_link_rate
+{
+    BCMOLT_EPON_LINK_RATE__BEGIN                                = 0,
+    BCMOLT_EPON_LINK_RATE_TEN_TEN                               = 0,    /**< Ten_Ten. */
+    BCMOLT_EPON_LINK_RATE_TEN_ONE                               = 1,    /**< Ten_One. */
+    BCMOLT_EPON_LINK_RATE_ONE_ONE                               = 2,    /**< One_One. */
+    BCMOLT_EPON_LINK_RATE__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_link_rate;
+
+/** Status. 
+ */
+typedef enum bcmolt_status
+{
+    BCMOLT_STATUS__BEGIN                                        = 0,
+    BCMOLT_STATUS_OFF                                           = 0,    /**< Status is off. */
+    BCMOLT_STATUS_ON                                            = 1,    /**< Status is on. */
+    BCMOLT_STATUS_NO_CHANGE                                     = 2,    /**< Status should not be changed (valid for SET API calls only). */
+    BCMOLT_STATUS__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_status;
+
+/** EPON encryption mode. 
+ */
+typedef enum bcmolt_epon_encryption_mode
+{
+    BCMOLT_EPON_ENCRYPTION_MODE__BEGIN                          = 0,
+    BCMOLT_EPON_ENCRYPTION_MODE_NO_ENCRYPTION                   = 0,    /**< No encryption of any kind. */
+    BCMOLT_EPON_ENCRYPTION_MODE_EPON_TRIPLE_CHURNING            = 1,    /**< EPON triple-churning mode per CTC specification.  */
+    BCMOLT_EPON_ENCRYPTION_MODE_EPON_ZERO_OVERHEAD_AES          = 2,    /**< EPON zero-overhead AES mode. */
+    BCMOLT_EPON_ENCRYPTION_MODE__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_encryption_mode;
+
+/** Epon Key Choice. 
+ */
+typedef enum bcmolt_epon_key_choice
+{
+    BCMOLT_EPON_KEY_CHOICE__BEGIN                               = 0,
+    BCMOLT_EPON_KEY_CHOICE_KEY_0                                = 0,    /**< Key 0. */
+    BCMOLT_EPON_KEY_CHOICE_KEY_1                                = 1,    /**< Key 1. */
+    BCMOLT_EPON_KEY_CHOICE__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_key_choice;
+
+/** EPON Encryption Direction. 
+ */
+typedef enum bcmolt_epon_encryption_direction
+{
+    BCMOLT_EPON_ENCRYPTION_DIRECTION__BEGIN                     = 0,
+    BCMOLT_EPON_ENCRYPTION_DIRECTION_DOWNSTREAM_ONLY            = 0,    /**< Encrypt downstream traffic only. */
+    BCMOLT_EPON_ENCRYPTION_DIRECTION__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_encryption_direction;
+
+/** EPON FEC enable state.  See flag descriptions for restrictions. 
+ */
+typedef enum bcmolt_epon_fec_en_state
+{
+    BCMOLT_EPON_FEC_EN_STATE__BEGIN                             = 0,
+    BCMOLT_EPON_FEC_EN_STATE_DISABLED                           = 0,    /**< FEC is disabled. */
+    BCMOLT_EPON_FEC_EN_STATE_ENABLED                            = 1,    /**< FEC is enabled.   Note: FEC can only be enabled and disabled PON-wide for 10G paths, but can be enabled and disabled with logical link granularity for 1G paths. */
+    BCMOLT_EPON_FEC_EN_STATE__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_fec_en_state;
+
+/** The types of OAM to choose from. 
+ */
+typedef enum bcmolt_epon_oam_type
+{
+    BCMOLT_EPON_OAM_TYPE__BEGIN                                 = 0,
+    BCMOLT_EPON_OAM_TYPE_BROADCOM                               = 0,    /**< Broadcom OAM (formerly TEK). */
+    BCMOLT_EPON_OAM_TYPE_CTC                                    = 1,    /**< CTC OAM. */
+    BCMOLT_EPON_OAM_TYPE_DPOE                                   = 2,    /**< DPoE OAM */
+    BCMOLT_EPON_OAM_TYPE_SIEPONA                                = 3,    /**< SiEPON OAM. (Mostly similar to DPoE). */
+    BCMOLT_EPON_OAM_TYPE__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_oam_type;
+
+/** epon link fec state. 
+ */
+typedef enum bcmolt_epon_link_fec_state
+{
+    BCMOLT_EPON_LINK_FEC_STATE__BEGIN                           = 0,
+    BCMOLT_EPON_LINK_FEC_STATE_DISABLED                         = 0,    /**< Disabled. */
+    BCMOLT_EPON_LINK_FEC_STATE_ENABLED                          = 1,    /**< Enabled. */
+    BCMOLT_EPON_LINK_FEC_STATE_USE_DEFAULT                      = 2,    /**< Use defaults. */
+    BCMOLT_EPON_LINK_FEC_STATE__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_link_fec_state;
+
+/** The current registration status of a link. 
+ */
+typedef enum bcmolt_epon_link_status
+{
+    BCMOLT_EPON_LINK_STATUS_NONE                                = 0,
+    BCMOLT_EPON_LINK_STATUS_DISCOVERED                          = 0x0001,   /**< Link has completed MPCP registration. */
+    BCMOLT_EPON_LINK_STATUS_REGISTRATION_PREVENTED              = 0x0008    /**< Link is being prevented from registering. */
+} bcmolt_epon_link_status;
+
+/** MPCP discovery info. 
+ */
+typedef enum bcmolt_mpcp_discovery_info
+{
+    BCMOLT_MPCP_DISCOVERY_INFO_NONE                             = 0,
+    BCMOLT_MPCP_DISCOVERY_INFO_ONE_G_CAPABLE                    = 0x0001,   /**< 1G Capable. */
+    BCMOLT_MPCP_DISCOVERY_INFO_TEN_G_CAPABLE                    = 0x0002,   /**< 10G Capable. */
+    BCMOLT_MPCP_DISCOVERY_INFO_ONE_G_WINDOW                     = 0x0010,   /**< 1G window. */
+    BCMOLT_MPCP_DISCOVERY_INFO_TEN_G_WINDOW                     = 0x0020    /**< 10G window. */
+} bcmolt_mpcp_discovery_info;
+
+/** EPON link state flags reflect the current status of the link.  
+ */
+typedef enum bcmolt_epon_link_state_flags
+{
+    BCMOLT_EPON_LINK_STATE_FLAGS_NONE                           = 0,
+    BCMOLT_EPON_LINK_STATE_FLAGS_MPCP_REGISTRATION_COMPLETE     = 0x0001    /**< Link has completed MPCP registration. */
+} bcmolt_epon_link_state_flags;
+
+/** EPON Link Type. 
+ */
+typedef enum bcmolt_epon_link_type
+{
+    BCMOLT_EPON_LINK_TYPE__BEGIN                                = 0,
+    BCMOLT_EPON_LINK_TYPE_SYSTEM                                = 0,        /**< A Link automatically created for system usage. */
+    BCMOLT_EPON_LINK_TYPE_DOWNSTREAM_ONLY                       = 1,        /**< A Link that does not consume upstream bandwidth. */
+    BCMOLT_EPON_LINK_TYPE_BIDIRECTIONAL                         = 2,        /**< A Link that undergoes the MPCP registration process. */
+    BCMOLT_EPON_LINK_TYPE__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_link_type;
+
+/** MPCP gate mode. 
+ */
+typedef enum bcmolt_mpcp_gate_mode
+{
+    BCMOLT_MPCP_GATE_MODE__BEGIN                                = 0,
+    BCMOLT_MPCP_GATE_MODE_TEKNOVUS                              = 0,    /**< Teknovus MPCP registration mode. */
+    BCMOLT_MPCP_GATE_MODE_CUSTOM                                = 1,    /**< Non-Teknovus MPCP registration mode. */
+    BCMOLT_MPCP_GATE_MODE__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_mpcp_gate_mode;
+
+/** MPCP registration gate flags. 
+ */
+typedef enum bcmolt_mpcp_registration_gate_flags
+{
+    BCMOLT_MPCP_REGISTRATION_GATE_FLAGS_NONE                    = 0,
+    BCMOLT_MPCP_REGISTRATION_GATE_FLAGS_FORCE_REPORT            = 0x0001    /**< Force report bit. */
+} bcmolt_mpcp_registration_gate_flags;
+
+/** Enable state of the EPON NI.  Initially the only enable states defined are 
+ * `disabled' and `enabled', but this may later be extended to include 
+ * different degrees of enablement. 
+ */
+typedef enum bcmolt_epon_ni_en_state
+{
+    BCMOLT_EPON_NI_EN_STATE__BEGIN                              = 0,
+    BCMOLT_EPON_NI_EN_STATE_DISABLED                            = 0,        /**< EPON NI is fully disabled. */
+    BCMOLT_EPON_NI_EN_STATE_ENABLED                             = 1,        /**< EPON NI is fully enabled. */
+    BCMOLT_EPON_NI_EN_STATE_PROTECTED_WORKING                   = 2,        /**< EPON NI is fully enabled. redundant and activily carrying traffic. */
+    BCMOLT_EPON_NI_EN_STATE_PROTECTED_STANDBY                   = 3,        /**< EPON NI is fully enabled. redundant and protecting another PON. */
+    BCMOLT_EPON_NI_EN_STATE_PROCESSING                          = 4,        /**< EPON NI is currently transitioning between states */
+    BCMOLT_EPON_NI_EN_STATE__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_ni_en_state;
+
+/** EPON OAM Extension Type. 
+ */
+typedef enum bcmolt_epon_oam_extension_type
+{
+    BCMOLT_EPON_OAM_EXTENSION_TYPE__BEGIN                       = 0,
+    BCMOLT_EPON_OAM_EXTENSION_TYPE_RESERVED                     = 0,    /**< Reserved */
+    BCMOLT_EPON_OAM_EXTENSION_TYPE_BROADCOM                     = 1,    /**< Broadcom */
+    BCMOLT_EPON_OAM_EXTENSION_TYPE_CTC                          = 2,    /**< China Telecom */
+    BCMOLT_EPON_OAM_EXTENSION_TYPE_DASAN                        = 3,    /**< Dasan Networks */
+    BCMOLT_EPON_OAM_EXTENSION_TYPE_KT                           = 4,    /**< Korea Telecom */
+    BCMOLT_EPON_OAM_EXTENSION_TYPE_DPOE                         = 5,    /**< DPoE */
+    BCMOLT_EPON_OAM_EXTENSION_TYPE__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_oam_extension_type;
+
+/** 1 to 11 matche the DPoE response code.  Refer to DPoE-SP-OAMv1.0-I08-140807, 
+ * Cl. 12.1.3. 21 to 28 are used for CTC. 
+ */
+typedef enum bcmolt_epon_onu_upgrade_onu_response_code
+{
+    BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_OK                    = 0,    /**< No errors. */
+    BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_UNDEFINED             = 1,    /**< Unknown error, or one not covered elsewhere. */
+    BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_NOT_FOUND             = 2,    /**< Read requested file that is not available. */
+    BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_NO_ACCESS             = 3,    /**< Access permissions do not allow the requested read/write. */
+    BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_FULL                  = 4,    /**< Storage is full, and cannot hold the written file. */
+    BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_ILLEGAL_OPERATION     = 5,    /**< Cannot perform requested operation in current state. */
+    BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_UNKNOWN_ID            = 6,    /**< Requested file ID is not supported by this device. */
+    BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_BAD_BLOCK             = 7,    /**< Block received in error. */
+    BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_TIMEOUT               = 8,    /**< No block received before timer expiration. */
+    BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_BUSY                  = 9,    /**< Cannot perform requested action due to other activity. */
+    BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_INCOMPATIBLE_FILE     = 10,   /**< Received file is incompatible with this device. File incompatibility is determined by the device vendor. */
+    BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_CORRUPTED_FILE        = 11,   /**< File was received corrupted and is unusable by this device. File integrity is determined by the device vendor. */
+    BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_ERROR_NOT_DEFINED     = 21,   /**< ONU returned ERROR PDU: Undefined error code. */
+    BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_ERROR_ALLOC_EXCEEDED  = 22,   /**< ONU returned ERROR PDU: Disk full or allocation exceeded. */
+    BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_ERROR_ILLEGAL_OP      = 23,   /**< ONU returned ERROR PDU: Illegal TFTP operation. */
+    BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_ERROR_FILE_EXISTS     = 24,   /**< ONU returned ERROR PDU: Mirror file already exists. */
+    BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_END_WRITING_NVS       = 25,   /**< ONU returned END RESPONSE PDU with error: Writing file to NVS */
+    BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_END_CRC_ERROR         = 26,   /**< ONU returned END RESPONSE PDU with error: CRC32 error */
+    BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_END_PARAM_ERROR       = 27,   /**< ONU returned END RESPONSE PDU with error: Parameter error */
+    BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_END_CMD_UNSUPPORTED   = 28,   /**< ONU returned END RESPONSE PDU with error: Command not supported */
+    BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_LAST                  = 29    /**< Last. */
+} bcmolt_epon_onu_upgrade_onu_response_code;
+
+/** EPON ONU Upgrade Return Code. 
+ */
+typedef enum bcmolt_epon_onu_upgrade_return_code
+{
+    BCMOLT_EPON_ONU_UPGRADE_RETURN_CODE__BEGIN                      = 0,
+    BCMOLT_EPON_ONU_UPGRADE_RETURN_CODE_SUCCESS                     = 0,    /**< Command succeeded. */
+    BCMOLT_EPON_ONU_UPGRADE_RETURN_CODE_ONU_RESPONSE_TIMEOUT        = 1,    /**< ONU did not respond to a message within the time specified by the "Write request timeout". */
+    BCMOLT_EPON_ONU_UPGRADE_RETURN_CODE_ONU_ERROR_RESPONSE          = 2,    /**< Error found in the ONU response. */
+    BCMOLT_EPON_ONU_UPGRADE_RETURN_CODE_SYNC_ERROR                  = 3,    /**< Block number sync error. */
+    BCMOLT_EPON_ONU_UPGRADE_RETURN_CODE_COMMIT_FAILED               = 4,    /**< Commit software command failed. */
+    BCMOLT_EPON_ONU_UPGRADE_RETURN_CODE_INTERNAL                    = 5,    /**< Internal error. */
+    BCMOLT_EPON_ONU_UPGRADE_RETURN_CODE_PARSE_ERROR                 = 6,    /**< Unable to parse the ONU response. */
+    BCMOLT_EPON_ONU_UPGRADE_RETURN_CODE__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_onu_upgrade_return_code;
+
+/** Indicates whether links are unprotected, protected standby, or protected 
+ * working. 
+ */
+typedef enum bcmolt_epon_protection_state
+{
+    BCMOLT_EPON_PROTECTION_STATE__BEGIN                             = 0,
+    BCMOLT_EPON_PROTECTION_STATE_UNPROTECTED                        = 0,    /**< The link is not a member of a protection pair. */
+    BCMOLT_EPON_PROTECTION_STATE_PROTECTED_STANDBY                  = 1,    /**< The link is a member of a protection pair in the standby role. */
+    BCMOLT_EPON_PROTECTION_STATE_PROTECTED_WORKING                  = 2,    /**< The link is a member of a protection pair in the working role. */
+    BCMOLT_EPON_PROTECTION_STATE__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_protection_state;
+
+/** EPON Protection Switching Type. 
+ */
+typedef enum bcmolt_epon_protection_switching_type
+{
+    BCMOLT_EPON_PROTECTION_SWITCHING_TYPE__BEGIN                        = 0,
+    BCMOLT_EPON_PROTECTION_SWITCHING_TYPE_NO_PROTECTION_SWTICHING       = 0,    /**< No protection swtiching. */
+    BCMOLT_EPON_PROTECTION_SWITCHING_TYPE_LINE_CARD_PROTECTION_SWITCHING= 1,    /**< Line card protection switching. */
+    BCMOLT_EPON_PROTECTION_SWITCHING_TYPE__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_protection_switching_type;
+
+/** Protection Switching Detection Options. 
+ */
+typedef enum bcmolt_protection_switching_detection_options
+{
+    BCMOLT_PROTECTION_SWITCHING_DETECTION_OPTIONS_NONE                  = 0,
+    BCMOLT_PROTECTION_SWITCHING_DETECTION_OPTIONS_STANDBY_LOS_DETECTION = 0x0001            /**< Standby LOS detection. */
+} bcmolt_protection_switching_detection_options;
+
+/** Criteria for logical link selection during re-ranging process 
+ */
+typedef enum bcmolt_epon_protection_switching_reranging_options
+{
+    BCMOLT_EPON_PROTECTION_SWITCHING_RERANGING_OPTIONS_RERANGE_NONE                 = 1,    /**< No re-ranging at all */
+    BCMOLT_EPON_PROTECTION_SWITCHING_RERANGING_OPTIONS_RERANGE_SINGLE_LOGICAL_LINK  = 2,    /**< Pick minimum logical links to re-range */
+    BCMOLT_EPON_PROTECTION_SWITCHING_RERANGING_OPTIONS_RERANGE_ALL_LOGICAL_LINKS    = 4     /**< Individually re-range all logical links */
+} bcmolt_epon_protection_switching_reranging_options;
+
+/** GPIO pin number. 
+ */
+typedef enum bcmolt_gpio_pin
+{
+    BCMOLT_GPIO_PIN_PIN0                                                            = 0,    /**< GPIO pin 0. */
+    BCMOLT_GPIO_PIN_PIN1                                                            = 1,    /**< GPIO pin 1. */
+    BCMOLT_GPIO_PIN_PIN2                                                            = 2,    /**< GPIO pin 2. */
+    BCMOLT_GPIO_PIN_PIN3                                                            = 3,    /**< GPIO pin 3. */
+    BCMOLT_GPIO_PIN_PIN4                                                            = 4,    /**< GPIO pin 4. */
+    BCMOLT_GPIO_PIN_PIN5                                                            = 5,    /**< GPIO pin 5. */
+    BCMOLT_GPIO_PIN_PIN6                                                            = 6,    /**< GPIO pin 6. */
+    BCMOLT_GPIO_PIN_PIN7                                                            = 7,    /**< GPIO pin 7. */
+    BCMOLT_GPIO_PIN_PIN8                                                            = 8,    /**< GPIO pin 8. */
+    BCMOLT_GPIO_PIN_PIN9                                                            = 9,    /**< GPIO pin 9. */
+    BCMOLT_GPIO_PIN_PIN10                                                           = 10,   /**< GPIO pin 10. */
+    BCMOLT_GPIO_PIN_PIN11                                                           = 11,   /**< GPIO pin 11. */
+    BCMOLT_GPIO_PIN_PIN12                                                           = 12,   /**< GPIO pin 12. */
+    BCMOLT_GPIO_PIN_PIN13                                                           = 13,   /**< GPIO pin 13. */
+    BCMOLT_GPIO_PIN_PIN14                                                           = 14,   /**< GPIO pin 14. */
+    BCMOLT_GPIO_PIN_PIN15                                                           = 15,   /**< GPIO pin 15. */
+    BCMOLT_GPIO_PIN_PIN16                                                           = 16,   /**< GPIO pin 16. */
+    BCMOLT_GPIO_PIN_PIN17                                                           = 17,   /**< GPIO pin 17. */
+    BCMOLT_GPIO_PIN_PIN18                                                           = 18,   /**< GPIO pin 18. */
+    BCMOLT_GPIO_PIN_PIN19                                                           = 19,   /**< GPIO pin 19. */
+    BCMOLT_GPIO_PIN_PIN20                                                           = 20,   /**< GPIO pin 20. */
+    BCMOLT_GPIO_PIN_PIN21                                                           = 21,   /**< GPIO pin 21. */
+    BCMOLT_GPIO_PIN_PIN22                                                           = 22,   /**< GPIO pin 22. */
+    BCMOLT_GPIO_PIN_PIN23                                                           = 23,   /**< GPIO pin 23. */
+    BCMOLT_GPIO_PIN_PIN24                                                           = 24,   /**< GPIO pin 24. */
+    BCMOLT_GPIO_PIN_PIN25                                                           = 25,   /**< GPIO pin 25. */
+    BCMOLT_GPIO_PIN_PIN26                                                           = 26,   /**< GPIO pin 26. */
+    BCMOLT_GPIO_PIN_PIN27                                                           = 27,   /**< GPIO pin 27. */
+    BCMOLT_GPIO_PIN_PIN28                                                           = 28,   /**< GPIO pin 28. */
+    BCMOLT_GPIO_PIN_PIN29                                                           = 29,   /**< GPIO pin 29. */
+    BCMOLT_GPIO_PIN_PIN30                                                           = 30,   /**< GPIO pin 30. */
+    BCMOLT_GPIO_PIN_PIN31                                                           = 31,   /**< GPIO pin 31. */
+    BCMOLT_GPIO_PIN_PIN32                                                           = 32,   /**< GPIO pin 32. */
+    BCMOLT_GPIO_PIN_PIN33                                                           = 33,   /**< GPIO pin 33. */
+    BCMOLT_GPIO_PIN_PIN34                                                           = 34,   /**< GPIO pin 34. */
+    BCMOLT_GPIO_PIN_PIN35                                                           = 35,   /**< GPIO pin 35. */
+    BCMOLT_GPIO_PIN_PIN36                                                           = 36,   /**< GPIO pin 36. */
+    BCMOLT_GPIO_PIN_PIN37                                                           = 37,   /**< GPIO pin 37. */
+    BCMOLT_GPIO_PIN_PIN38                                                           = 38,   /**< GPIO pin 38. */
+    BCMOLT_GPIO_PIN_PIN39                                                           = 39,   /**< GPIO pin 39. */
+    BCMOLT_GPIO_PIN_PIN40                                                           = 40,   /**< GPIO pin 40. */
+    BCMOLT_GPIO_PIN_PIN41                                                           = 41,   /**< GPIO pin 41. */
+    BCMOLT_GPIO_PIN_PIN42                                                           = 42,   /**< GPIO pin 42. */
+    BCMOLT_GPIO_PIN_PIN43                                                           = 43,   /**< GPIO pin 43. */
+    BCMOLT_GPIO_PIN_PIN44                                                           = 44,   /**< GPIO pin 44. */
+    BCMOLT_GPIO_PIN_PIN45                                                           = 45,   /**< GPIO pin 45. */
+    BCMOLT_GPIO_PIN_PIN46                                                           = 46,   /**< GPIO pin 46. */
+    BCMOLT_GPIO_PIN_PIN47                                                           = 47,   /**< GPIO pin 47. */
+    BCMOLT_GPIO_PIN_PIN48                                                           = 48,   /**< GPIO pin 48. */
+    BCMOLT_GPIO_PIN_PIN49                                                           = 49,   /**< GPIO pin 49. */
+    BCMOLT_GPIO_PIN_PIN50                                                           = 50,   /**< GPIO pin 50. */
+    BCMOLT_GPIO_PIN_PIN51                                                           = 51,   /**< GPIO pin 51. */
+    BCMOLT_GPIO_PIN_PIN52                                                           = 52,   /**< GPIO pin 52. */
+    BCMOLT_GPIO_PIN_PIN53                                                           = 53,   /**< GPIO pin 53. */
+    BCMOLT_GPIO_PIN_PIN54                                                           = 54,   /**< GPIO pin 54. */
+    BCMOLT_GPIO_PIN_PIN55                                                           = 55,   /**< GPIO pin 55. */
+    BCMOLT_GPIO_PIN_PIN56                                                           = 56,   /**< GPIO pin 56. */
+    BCMOLT_GPIO_PIN_PIN57                                                           = 57,   /**< GPIO pin 57. */
+    BCMOLT_GPIO_PIN_PIN58                                                           = 58,   /**< GPIO pin 58. */
+    BCMOLT_GPIO_PIN_PIN59                                                           = 59,   /**< GPIO pin 59. */
+    BCMOLT_GPIO_PIN_PIN60                                                           = 60,   /**< GPIO pin 60. */
+    BCMOLT_GPIO_PIN_PIN61                                                           = 61,   /**< GPIO pin 61. */
+    BCMOLT_GPIO_PIN_PIN62                                                           = 62,   /**< GPIO pin 62. */
+    BCMOLT_GPIO_PIN_PIN63                                                           = 63,   /**< GPIO pin 63. */
+    BCMOLT_GPIO_PIN_PIN64                                                           = 64,   /**< GPIO pin 64. */
+    BCMOLT_GPIO_PIN_PIN65                                                           = 65,   /**< GPIO pin 65. */
+    BCMOLT_GPIO_PIN_PIN66                                                           = 66,   /**< GPIO pin 66. */
+    BCMOLT_GPIO_PIN_PIN67                                                           = 67,   /**< GPIO pin 67. */
+    BCMOLT_GPIO_PIN_PIN68                                                           = 68,   /**< GPIO pin 68. */
+    BCMOLT_GPIO_PIN_PIN69                                                           = 69,   /**< GPIO pin 69. */
+    BCMOLT_GPIO_PIN_PIN70                                                           = 70,   /**< GPIO pin 70. */
+    BCMOLT_GPIO_PIN_PIN71                                                           = 71,   /**< GPIO pin 71. */
+    BCMOLT_GPIO_PIN_PIN72                                                           = 72,   /**< GPIO pin 72. */
+    BCMOLT_GPIO_PIN_PIN73                                                           = 73,   /**< GPIO pin 73. */
+    BCMOLT_GPIO_PIN_PIN74                                                           = 74,   /**< GPIO pin 74. */
+    BCMOLT_GPIO_PIN_PIN75                                                           = 75,   /**< GPIO pin 75. */
+    BCMOLT_GPIO_PIN_PIN76                                                           = 76,   /**< GPIO pin 76. */
+    BCMOLT_GPIO_PIN_PIN77                                                           = 77,   /**< GPIO pin 77. */
+    BCMOLT_GPIO_PIN_PIN78                                                           = 78,   /**< GPIO pin 78. */
+    BCMOLT_GPIO_PIN_PIN79                                                           = 79,   /**< GPIO pin 79. */
+    BCMOLT_GPIO_PIN_PIN80                                                           = 80,   /**< GPIO pin 80. */
+    BCMOLT_GPIO_PIN_PIN81                                                           = 81,   /**< GPIO pin 81. */
+    BCMOLT_GPIO_PIN_PIN82                                                           = 82,   /**< GPIO pin 82. */
+    BCMOLT_GPIO_PIN_PIN83                                                           = 83,   /**< GPIO pin 83. */
+    BCMOLT_GPIO_PIN_PIN84                                                           = 84,   /**< GPIO pin 84. */
+    BCMOLT_GPIO_PIN_PIN85                                                           = 85,   /**< GPIO pin 85. */
+    BCMOLT_GPIO_PIN_PIN86                                                           = 86,   /**< GPIO pin 86. */
+    BCMOLT_GPIO_PIN_PIN87                                                           = 87,   /**< GPIO pin 87. */
+    BCMOLT_GPIO_PIN_PIN88                                                           = 88,   /**< GPIO pin 88. */
+    BCMOLT_GPIO_PIN_PIN89                                                           = 89,   /**< GPIO pin 89. */
+    BCMOLT_GPIO_PIN_PIN90                                                           = 90,   /**< GPIO pin 90. */
+    BCMOLT_GPIO_PIN_PIN91                                                           = 91,   /**< GPIO pin 91. */
+    BCMOLT_GPIO_PIN_PIN92                                                           = 92,   /**< GPIO pin 92. */
+    BCMOLT_GPIO_PIN_PIN93                                                           = 93,   /**< GPIO pin 93. */
+    BCMOLT_GPIO_PIN_PIN94                                                           = 94,   /**< GPIO pin 94. */
+    BCMOLT_GPIO_PIN_PIN95                                                           = 95,   /**< GPIO pin 95. */
+    BCMOLT_GPIO_PIN_PIN96                                                           = 96,   /**< GPIO pin 96. */
+    BCMOLT_GPIO_PIN_PIN97                                                           = 97,   /**< GPIO pin 97. */
+    BCMOLT_GPIO_PIN_PIN98                                                           = 98,   /**< GPIO pin 98. */
+    BCMOLT_GPIO_PIN_PIN99                                                           = 99,   /**< GPIO pin 99. */
+    BCMOLT_GPIO_PIN_PIN100                                                          = 100,  /**< GPIO pin 100. */
+    BCMOLT_GPIO_PIN_PIN101                                                          = 101,  /**< GPIO pin 101. */
+    BCMOLT_GPIO_PIN_PIN102                                                          = 102,  /**< GPIO pin 102. */
+    BCMOLT_GPIO_PIN_PIN103                                                          = 103,  /**< GPIO pin 103. */
+    BCMOLT_GPIO_PIN_PIN104                                                          = 104,  /**< GPIO pin 104. */
+    BCMOLT_GPIO_PIN_PIN105                                                          = 105,  /**< GPIO pin 105. */
+    BCMOLT_GPIO_PIN_PIN106                                                          = 106,  /**< GPIO pin 106. */
+    BCMOLT_GPIO_PIN_UNCONFIGURED                                                    = 255   /**< Unconfigured GPIO pin. */
+} bcmolt_gpio_pin;
+
+/** GPIO Polarity. 
+ */
+typedef enum bcmolt_gpio_polarity
+{
+    BCMOLT_GPIO_POLARITY__BEGIN                                                     = 0,
+    BCMOLT_GPIO_POLARITY_ACTIVE_LOW                                                 = 0,    /**< Active Low. */
+    BCMOLT_GPIO_POLARITY_ACTIVE_HIGH                                                = 1,    /**< Active High. */
+    BCMOLT_GPIO_POLARITY__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpio_polarity;
+
+/** External IRQ. 
+ */
+typedef enum bcmolt_ext_irq
+{
+    BCMOLT_EXT_IRQ_EXT_IRQ0                                                         = 0,    /**< External IRQ 0. */
+    BCMOLT_EXT_IRQ_EXT_IRQ1                                                         = 1,    /**< External IRQ 1. */
+    BCMOLT_EXT_IRQ_EXT_IRQ2                                                         = 2,    /**< External IRQ 2. */
+    BCMOLT_EXT_IRQ_EXT_IRQ3                                                         = 3,    /**< External IRQ 3. */
+    BCMOLT_EXT_IRQ_EXT_IRQ4                                                         = 4,    /**< External IRQ 4. */
+    BCMOLT_EXT_IRQ_EXT_IRQ5                                                         = 5,    /**< External IRQ 5. */
+    BCMOLT_EXT_IRQ_UNCONFIGURED                                                     = 255   /**< Unconfigured external IRQ. */
+} bcmolt_ext_irq;
+
+/** Flush MAC table option. 
+ */
+typedef enum bcmolt_flush_mac_table_option
+{
+    BCMOLT_FLUSH_MAC_TABLE_OPTION__BEGIN                                            = 0,
+    BCMOLT_FLUSH_MAC_TABLE_OPTION_ALL                                               = 0,    /**< All. */
+    BCMOLT_FLUSH_MAC_TABLE_OPTION_PER_VID                                           = 1,    /**< PER VID. */
+    BCMOLT_FLUSH_MAC_TABLE_OPTION_PER_FLOW                                          = 2,    /**< PER flow. */
+    BCMOLT_FLUSH_MAC_TABLE_OPTION_VID_PLUS_FLOW                                     = 3,    /**< VID+flow. */
+    BCMOLT_FLUSH_MAC_TABLE_OPTION__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_flush_mac_table_option;
+
+/** Frequency adjustment direction 
+ */
+typedef enum bcmolt_frequency_adjustment_direction
+{
+    BCMOLT_FREQUENCY_ADJUSTMENT_DIRECTION__BEGIN                                    = 0,
+    BCMOLT_FREQUENCY_ADJUSTMENT_DIRECTION_LOWER                                     = 0,    /**< Lower */
+    BCMOLT_FREQUENCY_ADJUSTMENT_DIRECTION_HIGHER                                    = 1,    /**< Higher */
+    BCMOLT_FREQUENCY_ADJUSTMENT_DIRECTION__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_frequency_adjustment_direction;
+
+/** GEM port ID direction. 
+ */
+typedef enum bcmolt_gem_port_direction
+{
+    BCMOLT_GEM_PORT_DIRECTION__BEGIN                                                = 0,
+    BCMOLT_GEM_PORT_DIRECTION_DOWNSTREAM                                            = 0,    /**< downstream port ID. */
+    BCMOLT_GEM_PORT_DIRECTION_UPSTREAM                                              = 1,    /**< upstream port ID. */
+    BCMOLT_GEM_PORT_DIRECTION_BIDIRECTIONAL                                         = 2,    /**< bidirectional port  ID. */
+    BCMOLT_GEM_PORT_DIRECTION__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_gem_port_direction;
+
+/** GEM port type. 
+ */
+typedef enum bcmolt_gem_port_type
+{
+    BCMOLT_GEM_PORT_TYPE__BEGIN                                                     = 0,
+    BCMOLT_GEM_PORT_TYPE_UNICAST                                                    = 0,    /**< unicast port ID. */
+    BCMOLT_GEM_PORT_TYPE_MULTICAST                                                  = 1,    /**< multicast port ID. */
+    BCMOLT_GEM_PORT_TYPE__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_gem_port_type;
+
+/** GEM port operation. 
+ */
+typedef enum bcmolt_gem_port_operation
+{
+    BCMOLT_GEM_PORT_OPERATION__BEGIN                                                = 0,
+    BCMOLT_GEM_PORT_OPERATION_ACTIVATE                                              = 0,    /**< Activate. */
+    BCMOLT_GEM_PORT_OPERATION_DEACTIVATE                                            = 1,    /**< Deactivate. */
+    BCMOLT_GEM_PORT_OPERATION__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_gem_port_operation;
+
+/** GPIO PIN Direction. 
+ */
+typedef enum bcmolt_gpio_pin_dir
+{
+    BCMOLT_GPIO_PIN_DIR__BEGIN                                                      = 0,
+    BCMOLT_GPIO_PIN_DIR_INPUT                                                       = 0,    /**< Input. */
+    BCMOLT_GPIO_PIN_DIR_OUTPUT                                                      = 1,    /**< Output. */
+    BCMOLT_GPIO_PIN_DIR__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpio_pin_dir;
+
+/** GPIO Value. 
+ */
+typedef enum bcmolt_gpio_value
+{
+    BCMOLT_GPIO_VALUE__BEGIN                                                        = 0,
+    BCMOLT_GPIO_VALUE_CLEAR                                                         = 0,    /**< Clear. */
+    BCMOLT_GPIO_VALUE_SET                                                           = 1,    /**< Set. */
+    BCMOLT_GPIO_VALUE__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpio_value;
+
+/** GPON GEM Port State. 
+ */
+typedef enum bcmolt_gpon_gem_port_state
+{
+    BCMOLT_GPON_GEM_PORT_STATE__BEGIN                                               = 0,
+    BCMOLT_GPON_GEM_PORT_STATE_NOT_CONFIGURED                                       = 0,    /**< not configured. */
+    BCMOLT_GPON_GEM_PORT_STATE_INACTIVE                                             = 1,    /**< inactive. */
+    BCMOLT_GPON_GEM_PORT_STATE_PROCESSING                                           = 2,    /**< processing. */
+    BCMOLT_GPON_GEM_PORT_STATE_ACTIVE                                               = 3,    /**< active. */
+    BCMOLT_GPON_GEM_PORT_STATE__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_gem_port_state;
+
+/** Key exchange mode. 
+ */
+typedef enum bcmolt_key_exchange_mode
+{
+    BCMOLT_KEY_EXCHANGE_MODE__BEGIN                                                 = 0,
+    BCMOLT_KEY_EXCHANGE_MODE_NORMAL                                                 = 0,    /**< Normal. */
+    BCMOLT_KEY_EXCHANGE_MODE_ENHANCED                                               = 1,    /**< Enhanced. */
+    BCMOLT_KEY_EXCHANGE_MODE__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_key_exchange_mode;
+
+/** OMCI Device ID. 
+ */
+typedef enum bcmolt_omci_device_id
+{
+    BCMOLT_OMCI_DEVICE_ID_BASELINE                                                  = 10,   /**< Baseline. */
+    BCMOLT_OMCI_DEVICE_ID_EXTENDED                                                  = 11    /**< Extended. */
+} bcmolt_omci_device_id;
+
+/** GPON ONU Upgrade Return Code. 
+ */
+typedef enum bcmolt_gpon_onu_upgrade_return_code
+{
+    BCMOLT_GPON_ONU_UPGRADE_RETURN_CODE__BEGIN                                      = 0,
+    BCMOLT_GPON_ONU_UPGRADE_RETURN_CODE_SUCCESS                                     = 0,    /**< Command succeeded. */
+    BCMOLT_GPON_ONU_UPGRADE_RETURN_CODE_ONU_RESPONSE_TIMEOUT                        = 1,    /**< ONU did not respond to a message within the time specified by the "Write request timeout". */
+    BCMOLT_GPON_ONU_UPGRADE_RETURN_CODE_ONU_ERROR_RESPONSE                          = 2,    /**< Error found in the ONU response. */
+    BCMOLT_GPON_ONU_UPGRADE_RETURN_CODE_TCI_MISMATCH                                = 3,    /**< Transaction ID mismatch. */
+    BCMOLT_GPON_ONU_UPGRADE_RETURN_CODE_GET_IMAGE_FAILED                            = 4,    /**< Get Image Info command failed. */
+    BCMOLT_GPON_ONU_UPGRADE_RETURN_CODE_ACTIVATION_FAILED                           = 5,    /**< Activation software command failed. */
+    BCMOLT_GPON_ONU_UPGRADE_RETURN_CODE_INTERNAL                                    = 6,    /**< Internal error. */
+    BCMOLT_GPON_ONU_UPGRADE_RETURN_CODE__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_upgrade_return_code;
+
+/** G.988 OMCI Result Code. 
+ */
+typedef enum bcmolt_omci_result_code
+{
+    BCMOLT_OMCI_RESULT_CODE__BEGIN                                                  = 0,
+    BCMOLT_OMCI_RESULT_CODE_NO_ERROR                                                = 0,    /**< Command processed successfully. */
+    BCMOLT_OMCI_RESULT_CODE_PROCESSING_ERROR                                        = 1,    /**< Command processing error. */
+    BCMOLT_OMCI_RESULT_CODE_NOT_SUPPORTED                                           = 2,    /**< Command not supported, or not applicable for End software download message. */
+    BCMOLT_OMCI_RESULT_CODE_PARAMETER_ERROR                                         = 3,    /**< Parameter error, or not applicable for End software download message. */
+    BCMOLT_OMCI_RESULT_CODE_UNKNOWN_ENTITY                                          = 4,    /**< Unknown managed entity. */
+    BCMOLT_OMCI_RESULT_CODE_UNKNOWN_INSTANCE                                        = 5,    /**< Unknown managed entity instance. */
+    BCMOLT_OMCI_RESULT_CODE_DEVICE_BUSY                                             = 6,    /**< Device busy. */
+    BCMOLT_OMCI_RESULT_CODE__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_omci_result_code;
+
+/** ONU state. 
+ */
+typedef enum bcmolt_onu_state
+{
+    BCMOLT_ONU_STATE_NOT_CONFIGURED                                                 = 0,    /**< not_configured. */
+    BCMOLT_ONU_STATE_INACTIVE                                                       = 1,    /**< inactive. */
+    BCMOLT_ONU_STATE_ACTIVE                                                         = 2,    /**< active. */
+    BCMOLT_ONU_STATE_ACTIVE_STANDBY                                                 = 3,    /**< active standby. */
+    BCMOLT_ONU_STATE_DISABLED                                                       = 4,    /**< disabled. */
+    BCMOLT_ONU_STATE_AWAKE_FREE                                                     = 5,    /**< ONU is active, but power management is enabled. ONU is allowed to enter low power states at its own discretion. */
+    BCMOLT_ONU_STATE_PROCESSING                                                     = 7,    /**< processing. */
+    BCMOLT_ONU_STATE_LOW_POWER_DOZE                                                 = 8,    /**< ONU has entered the Doze low power state. */
+    BCMOLT_ONU_STATE_LOW_POWER_SLEEP                                                = 9,    /**< ONU has entered the Sleep low power state. */
+    BCMOLT_ONU_STATE_LOW_POWER_WATCH                                                = 10,   /**< ONU has entered the Watchful Sleep low power state. */
+    BCMOLT_ONU_STATE_UNAWARE                                                        = 11    /**< ONU is added to data base but no bws is saved  */
+} bcmolt_onu_state;
+
+/** rssi location sign. 
+ */
+typedef enum bcmolt_rssi_location_sign
+{
+    BCMOLT_RSSI_LOCATION_SIGN__BEGIN                                                = 0,
+    BCMOLT_RSSI_LOCATION_SIGN_BEFORE                                                = 0,    /**< before. */
+    BCMOLT_RSSI_LOCATION_SIGN_AFTER                                                 = 1,    /**< after. */
+    BCMOLT_RSSI_LOCATION_SIGN__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_rssi_location_sign;
+
+/** ONU post discovery mode. 
+ */
+typedef enum bcmolt_onu_post_discovery_mode
+{
+    BCMOLT_ONU_POST_DISCOVERY_MODE__BEGIN                                           = 0,
+    BCMOLT_ONU_POST_DISCOVERY_MODE_NONE                                             = 0,    /**< none. */
+    BCMOLT_ONU_POST_DISCOVERY_MODE_ACTIVATE                                         = 1,    /**< activate. */
+    BCMOLT_ONU_POST_DISCOVERY_MODE_DISABLE                                          = 2,    /**< disable. */
+    BCMOLT_ONU_POST_DISCOVERY_MODE__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_onu_post_discovery_mode;
+
+/** Image transfer status. 
+ */
+typedef enum bcmolt_image_transfer_status
+{
+    BCMOLT_IMAGE_TRANSFER_STATUS__BEGIN                                             = 0,
+    BCMOLT_IMAGE_TRANSFER_STATUS_SUCCESS                                            = 0,    /**< Success. */
+    BCMOLT_IMAGE_TRANSFER_STATUS_MEMORY_ALLOCATION_FAILURE                          = 1,    /**< Memory allocation failure. */
+    BCMOLT_IMAGE_TRANSFER_STATUS_UNSUPPORTED_FILE_TYPE                              = 2,    /**< Unsupported file type. */
+    BCMOLT_IMAGE_TRANSFER_STATUS_CRC_ERROR                                          = 3,    /**< CRC checksum error. */
+    BCMOLT_IMAGE_TRANSFER_STATUS_BLOCK_OUT_OF_SYNC                                  = 4,    /**< Block out of sync. */
+    BCMOLT_IMAGE_TRANSFER_STATUS_INTERNAL_ERROR                                     = 5,    /**< Internal error. */
+    BCMOLT_IMAGE_TRANSFER_STATUS_INVALID_STATE                                      = 6,    /**< Invalid state. */
+    BCMOLT_IMAGE_TRANSFER_STATUS_PREMATURE_TERMINATION                              = 7,    /**< Premature termination. */
+    BCMOLT_IMAGE_TRANSFER_STATUS_ACK_TIMEOUT                                        = 8,    /**< ACK timeout. */
+    BCMOLT_IMAGE_TRANSFER_STATUS__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_image_transfer_status;
+
+/** iwf mode. 
+ */
+typedef enum bcmolt_iwf_mode
+{
+    BCMOLT_IWF_MODE__BEGIN                                                          = 0,
+    BCMOLT_IWF_MODE_DIRECT_MAPPING_MODE                                             = 0,    /**< DIRECT MAPPING MODE. */
+    BCMOLT_IWF_MODE_PER_FLOW_MODE                                                   = 1,    /**< PER FLOW MODE. */
+    BCMOLT_IWF_MODE__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_iwf_mode;
+
+/** log file id. 
+ */
+typedef enum bcmolt_log_file_id
+{
+    BCMOLT_LOG_FILE_ID__BEGIN                                                       = 0,
+    BCMOLT_LOG_FILE_ID_SRAM                                                         = 0,    /**< SRAM. */
+    BCMOLT_LOG_FILE_ID_DDR                                                          = 1,    /**< DDR. */
+    BCMOLT_LOG_FILE_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_log_file_id;
+
+/** log level. 
+ */
+typedef enum bcmolt_log_level
+{
+    BCMOLT_LOG_LEVEL__BEGIN                                                         = 0,
+    BCMOLT_LOG_LEVEL_NO_LOG                                                         = 0,    /**< no log. */
+    BCMOLT_LOG_LEVEL_FATAL                                                          = 1,    /**< fatal. */
+    BCMOLT_LOG_LEVEL_ERROR                                                          = 2,    /**< error. */
+    BCMOLT_LOG_LEVEL_WARNING                                                        = 3,    /**< warning. */
+    BCMOLT_LOG_LEVEL_INFO                                                           = 4,    /**< info. */
+    BCMOLT_LOG_LEVEL_DEBUG                                                          = 5,    /**< debug. */
+    BCMOLT_LOG_LEVEL__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_log_level;
+
+/** log style. 
+ */
+typedef enum bcmolt_log_style
+{
+    BCMOLT_LOG_STYLE__BEGIN                                                         = 0,
+    BCMOLT_LOG_STYLE_NORMAL                                                         = 0,    /**< normal. */
+    BCMOLT_LOG_STYLE_BOLD                                                           = 1,    /**< bold. */
+    BCMOLT_LOG_STYLE_UNDERLINE                                                      = 2,    /**< underline. */
+    BCMOLT_LOG_STYLE_BLINK                                                          = 3,    /**< blink. */
+    BCMOLT_LOG_STYLE_REVERSE_VIDEO                                                  = 4,    /**< reverse video. */
+    BCMOLT_LOG_STYLE__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_log_style;
+
+/** log type. 
+ */
+typedef enum bcmolt_log_type
+{
+    BCMOLT_LOG_TYPE__BEGIN                                                          = 0,
+    BCMOLT_LOG_TYPE_NONE                                                            = 0,    /**< dont show log  */
+    BCMOLT_LOG_TYPE_PRINT                                                           = 1,    /**< print. */
+    BCMOLT_LOG_TYPE_SAVE                                                            = 2,    /**< save. */
+    BCMOLT_LOG_TYPE_BOTH                                                            = 3,    /**< both. */
+    BCMOLT_LOG_TYPE__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_log_type;
+
+/** MAC table miss fallback. 
+ */
+typedef enum bcmolt_mac_table_miss_fallback
+{
+    BCMOLT_MAC_TABLE_MISS_FALLBACK__BEGIN                                           = 0,
+    BCMOLT_MAC_TABLE_MISS_FALLBACK_DROP                                             = 0,    /**< The packet is dropped. */
+    BCMOLT_MAC_TABLE_MISS_FALLBACK_DEFAULT_FLOW                                     = 1,    /**< The packet is forwarded with the provisioned default flow ID. */
+    BCMOLT_MAC_TABLE_MISS_FALLBACK_VID                                              = 2,    /**< The packet is forwarded with a flow ID equal to its VID. */
+    BCMOLT_MAC_TABLE_MISS_FALLBACK__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_mac_table_miss_fallback;
+
+/** MAC table Learning mode. 
+ */
+typedef enum bcmolt_mac_table_learning_mode
+{
+    BCMOLT_MAC_TABLE_LEARNING_MODE__BEGIN                                           = 0,
+    BCMOLT_MAC_TABLE_LEARNING_MODE_NORMAL                                           = 0,    /**< Normal mode: upstream traffic that matches on MAC/VID but doesn't match on flow ID is still allowed to pass. */
+    BCMOLT_MAC_TABLE_LEARNING_MODE_MOVE                                             = 1,    /**< Normal mode: upstream traffic that matches on MAC/VID but doesn't match on flow ID is considered to be a MAC move condition. */
+    BCMOLT_MAC_TABLE_LEARNING_MODE__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_mac_table_learning_mode;
+
+/** Mapping tag method. 
+ */
+typedef enum bcmolt_mapping_tag_method
+{
+    BCMOLT_MAPPING_TAG_METHOD_OUTER_VID                                             = 1,    /**< Outer VID. */
+    BCMOLT_MAPPING_TAG_METHOD_INNER_VID                                             = 0     /**< Inner VID. */
+} bcmolt_mapping_tag_method;
+
+/** NNI Connection. 
+ */
+typedef enum bcmolt_nni_connection
+{
+    BCMOLT_NNI_CONNECTION__BEGIN                                                    = 0,
+    BCMOLT_NNI_CONNECTION_PRIMARY                                                   = 0,    /**< Primary. */
+    BCMOLT_NNI_CONNECTION_BACKUP                                                    = 1,    /**< Backup. */
+    BCMOLT_NNI_CONNECTION__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_nni_connection;
+
+/** Trivalent. 
+ */
+typedef enum bcmolt_trivalent
+{
+    BCMOLT_TRIVALENT__BEGIN                                                         = 0,
+    BCMOLT_TRIVALENT_FALSE                                                          = 0,    /**< False. */
+    BCMOLT_TRIVALENT_TRUE                                                           = 1,    /**< True. */
+    BCMOLT_TRIVALENT_NOT_APPLICABLE                                                 = 2,    /**< Not Applicable. */
+    BCMOLT_TRIVALENT__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_trivalent;
+
+/** ODN Class. 
+ */
+typedef enum bcmolt_odn_class
+{
+    BCMOLT_ODN_CLASS_N1                                                             = 0,    /**< N1. */
+    BCMOLT_ODN_CLASS_N2                                                             = 1,    /**< N2. */
+    BCMOLT_ODN_CLASS_E1                                                             = 3,    /**< E1. */
+    BCMOLT_ODN_CLASS_E2                                                             = 4     /**< E2. */
+} bcmolt_odn_class;
+
+/** OMCI Port ID operation. 
+ */
+typedef enum bcmolt_omci_port_id_operation
+{
+    BCMOLT_OMCI_PORT_ID_OPERATION__BEGIN                                            = 0,
+    BCMOLT_OMCI_PORT_ID_OPERATION_CONFIGURE                                         = 0,    /**< configure. */
+    BCMOLT_OMCI_PORT_ID_OPERATION_REMOVE                                            = 1,    /**< remove. */
+    BCMOLT_OMCI_PORT_ID_OPERATION__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_omci_port_id_operation;
+
+/** ONU operation. 
+ */
+typedef enum bcmolt_onu_operation
+{
+    BCMOLT_ONU_OPERATION__BEGIN                                                     = 0,
+    BCMOLT_ONU_OPERATION_INACTIVE                                                   = 0,    /**< Inactive. */
+    BCMOLT_ONU_OPERATION_ACTIVE                                                     = 1,    /**< Active. */
+    BCMOLT_ONU_OPERATION_DISABLE                                                    = 2,    /**< Disable. */
+    BCMOLT_ONU_OPERATION_ENABLE                                                     = 3,    /**< Enable. */
+    BCMOLT_ONU_OPERATION_ACTIVE_STANDBY                                             = 4,    /**< Active Standby. */
+    BCMOLT_ONU_OPERATION_AWAKE_FREE                                                 = 5,    /**< Transitions the ONU to an active state with power management enabled. Allowed in inactive, disabled, and active states. */
+    BCMOLT_ONU_OPERATION__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_onu_operation;
+
+/** ONU Power level. 
+ */
+typedef enum bcmolt_onu_power_level
+{
+    BCMOLT_ONU_POWER_LEVEL__BEGIN                                                   = 0,
+    BCMOLT_ONU_POWER_LEVEL_INCREASE                                                 = 0,    /**< increase. */
+    BCMOLT_ONU_POWER_LEVEL_DECREASE                                                 = 1,    /**< decrease. */
+    BCMOLT_ONU_POWER_LEVEL__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_onu_power_level;
+
+/** TC layer protocol. 
+ */
+typedef enum bcmolt_tc_protocol
+{
+    BCMOLT_TC_PROTOCOL__BEGIN                                                       = 0,
+    BCMOLT_TC_PROTOCOL_TC_LAYER_PROTOCOL_G_987_P_3                                  = 0,    /**< TC layer protocol G.987.3 */
+    BCMOLT_TC_PROTOCOL_TC_LAYER_PROTOCOL_G_989_P_3                                  = 1,    /**< TC layer protocol G.989.3 */
+    BCMOLT_TC_PROTOCOL__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_tc_protocol;
+
+/** Packet Injection Error. 
+ */
+typedef enum bcmolt_packet_injection_error
+{
+    BCMOLT_PACKET_INJECTION_ERROR__BEGIN                                            = 0,
+    BCMOLT_PACKET_INJECTION_ERROR_GEM_PORT_NOT_ACTIVE                               = 0,    /**< GEM Port Not Active. */
+    BCMOLT_PACKET_INJECTION_ERROR__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_packet_injection_error;
+
+/** packet type. 
+ */
+typedef enum bcmolt_packet_type
+{
+    BCMOLT_PACKET_TYPE__BEGIN                                                       = 0,
+    BCMOLT_PACKET_TYPE_CPU                                                          = 0,    /**< CPU. */
+    BCMOLT_PACKET_TYPE_OMCI                                                         = 1,    /**< OMCI. */
+    BCMOLT_PACKET_TYPE__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_packet_type;
+
+/** Password authentication fail reason. 
+ */
+typedef enum bcmolt_password_authentication_fail_reason
+{
+    BCMOLT_PASSWORD_AUTHENTICATION_FAIL_REASON__BEGIN                               = 0,
+    BCMOLT_PASSWORD_AUTHENTICATION_FAIL_REASON_NONE                                 = 0,    /**< none. */
+    BCMOLT_PASSWORD_AUTHENTICATION_FAIL_REASON_PASSWORD_INCONSISTENCY               = 1,    /**< Password inconsistency. */
+    BCMOLT_PASSWORD_AUTHENTICATION_FAIL_REASON_PASSWORD_MISMATCH                    = 2,    /**< Password mismatch. */
+    BCMOLT_PASSWORD_AUTHENTICATION_FAIL_REASON_PASSWORD_AUTHENTICATION_TIMEOUT      = 3,    /**< Password authentication timeout. */
+    BCMOLT_PASSWORD_AUTHENTICATION_FAIL_REASON_ONU_ALARM                            = 4,    /**< onu alarm. */
+    BCMOLT_PASSWORD_AUTHENTICATION_FAIL_REASON_LOS_EVENT                            = 5,    /**< los event. */
+    BCMOLT_PASSWORD_AUTHENTICATION_FAIL_REASON_DISABLE_EVENT                        = 6,    /**< disable event. */
+    BCMOLT_PASSWORD_AUTHENTICATION_FAIL_REASON__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_password_authentication_fail_reason;
+
+/** Polarity. 
+ */
+typedef enum bcmolt_polarity
+{
+    BCMOLT_POLARITY__BEGIN                                                          = 0,
+    BCMOLT_POLARITY_LOW                                                             = 0,    /**< Low. */
+    BCMOLT_POLARITY_HIGH                                                            = 1,    /**< High. */
+    BCMOLT_POLARITY__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_polarity;
+
+/** Polling Interval. 
+ */
+typedef enum bcmolt_polling_interval
+{
+    BCMOLT_POLLING_INTERVAL_POLLING_DISABLED                                        = 0,            /**< No polling gates will be sent to this LLID. */
+    BCMOLT_POLLING_INTERVAL_US_500                                                  = 500,          /**< 500 us. */
+    BCMOLT_POLLING_INTERVAL_MS_1                                                    = 1000,         /**< 1 ms. */
+    BCMOLT_POLLING_INTERVAL_MS_2                                                    = 2000,         /**< 2 ms. */
+    BCMOLT_POLLING_INTERVAL_MS_4                                                    = 4000,         /**< 4 ms. */
+    BCMOLT_POLLING_INTERVAL_MS_8                                                    = 8000,         /**< 8 ms. */
+    BCMOLT_POLLING_INTERVAL_MS_16                                                   = 16000,        /**< 16 ms. */
+    BCMOLT_POLLING_INTERVAL_AUTOMATIC                                               = 2147483647L   /**< Firmware will choose an appropriate value. */
+} bcmolt_polling_interval;
+
+/** PON Operation. 
+ */
+typedef enum bcmolt_pon_operation
+{
+    BCMOLT_PON_OPERATION__BEGIN                                                     = 0,
+    BCMOLT_PON_OPERATION_INACTIVE                                                   = 0,            /**< Inactive. */
+    BCMOLT_PON_OPERATION_ACTIVE_WORKING                                             = 1,            /**< Active Working. */
+    BCMOLT_PON_OPERATION_ACTIVE_STANDBY                                             = 2,            /**< Active Standby. */
+    BCMOLT_PON_OPERATION__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_pon_operation;
+
+/** PON Protection Switching Options. 
+ */
+typedef enum bcmolt_pon_protection_switching_options
+{
+    BCMOLT_PON_PROTECTION_SWITCHING_OPTIONS_NONE                                    = 0,
+    BCMOLT_PON_PROTECTION_SWITCHING_OPTIONS_SWIFT_POPUP                             = 0x0001,   /**< If set, switchovers will utilize the Swift_POPUP and Ranging_Adjustment PLOAMs added in G.984 annex D. */
+    BCMOLT_PON_PROTECTION_SWITCHING_OPTIONS_DEBUG_FAST_RANGING                      = 0x0002    /**< If set, ONU EQDs will not be calculated as part of a switchover.  Instead, each ONU's new EQD will be equal to its last EQD when the PON NI was in active-working state.  This provides a fast switchover, but can only be used if the trunk distance never changes. */
+} bcmolt_pon_protection_switching_options;
+
+/** PON state. 
+ */
+typedef enum bcmolt_pon_state
+{
+    BCMOLT_PON_STATE__BEGIN                                                         = 0,
+    BCMOLT_PON_STATE_INACTIVE                                                       = 0,        /**< Inactive. */
+    BCMOLT_PON_STATE_PROCESSING                                                     = 1,        /**< Processing. */
+    BCMOLT_PON_STATE_ACTIVE_WORKING                                                 = 2,        /**< Active Working. */
+    BCMOLT_PON_STATE_ACTIVE_STANDBY                                                 = 3,        /**< Active Standby. */
+    BCMOLT_PON_STATE__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_pon_state;
+
+/** power levelling control. 
+ */
+typedef enum bcmolt_power_levelling_control
+{
+    BCMOLT_POWER_LEVELLING_CONTROL__BEGIN                                           = 0,
+    BCMOLT_POWER_LEVELLING_CONTROL_DIRECT                                           = 0,    /**< Direct. */
+    BCMOLT_POWER_LEVELLING_CONTROL_DECREASE                                         = 1,    /**< Decrease. */
+    BCMOLT_POWER_LEVELLING_CONTROL_INCREASE                                         = 2,    /**< Increase. */
+    BCMOLT_POWER_LEVELLING_CONTROL__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_power_levelling_control;
+
+/** The reason that a power management state change occurred. 
+ */
+typedef enum bcmolt_power_management_transition_reason
+{
+    BCMOLT_POWER_MANAGEMENT_TRANSITION_REASON__BEGIN                                = 0,
+    BCMOLT_POWER_MANAGEMENT_TRANSITION_REASON_POWER_MANAGEMENT_ENABLED              = 0,    /**< Host requested power management enable. */
+    BCMOLT_POWER_MANAGEMENT_TRANSITION_REASON_POWER_MANAGEMENT_DISABLED             = 1,    /**< Host requested power management disable. */
+    BCMOLT_POWER_MANAGEMENT_TRANSITION_REASON_SLEEP_REQUEST_AWAKE                   = 2,    /**< Received sleep request PLOAM from ONU. */
+    BCMOLT_POWER_MANAGEMENT_TRANSITION_REASON_SLEEP_REQUEST_DOZE                    = 3,    /**< Received sleep request PLOAM from ONU. */
+    BCMOLT_POWER_MANAGEMENT_TRANSITION_REASON_SLEEP_REQUEST_SLEEP                   = 4,    /**< Received sleep request PLOAM from ONU. */
+    BCMOLT_POWER_MANAGEMENT_TRANSITION_REASON_SLEEP_REQUEST_WATCH                   = 5,    /**< Received sleep request PLOAM from ONU. */
+    BCMOLT_POWER_MANAGEMENT_TRANSITION_REASON_TERI_EXPIRED                          = 6,    /**< Teri timer expired. It has been too long since we have received an upstream burst from an ONU in a low power state. */
+    BCMOLT_POWER_MANAGEMENT_TRANSITION_REASON_TALERTED_EXPIRED                      = 7,    /**< Talerted timer expired. It has been too long since the ONU was requested to wake up with no idication that it has complied. */
+    BCMOLT_POWER_MANAGEMENT_TRANSITION_REASON_ALARM                                 = 8,    /**< A LOSi/LOFi/LOBi alarm has ben raised against the ONU. */
+    BCMOLT_POWER_MANAGEMENT_TRANSITION_REASON__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_power_management_transition_reason;
+
+/** PRBS Polynomial. 
+ */
+typedef enum bcmolt_prbs_polynomial
+{
+    BCMOLT_PRBS_POLYNOMIAL__BEGIN                                                   = 0,
+    BCMOLT_PRBS_POLYNOMIAL_PRBS_7                                                   = 0,    /**< PRBS_7. */
+    BCMOLT_PRBS_POLYNOMIAL_PRBS_9                                                   = 1,    /**< PRBS_9. */
+    BCMOLT_PRBS_POLYNOMIAL_PRBS_11                                                  = 2,    /**< PRBS_11. */
+    BCMOLT_PRBS_POLYNOMIAL_PRBS_15                                                  = 3,    /**< PRBS_15. */
+    BCMOLT_PRBS_POLYNOMIAL_PRBS_23                                                  = 4,    /**< PRBS_23. */
+    BCMOLT_PRBS_POLYNOMIAL_PRBS_31                                                  = 5,    /**< PRBS_31. */
+    BCMOLT_PRBS_POLYNOMIAL_PRBS_58                                                  = 6,    /**< PRBS_58. */
+    BCMOLT_PRBS_POLYNOMIAL__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_prbs_polynomial;
+
+/** PRBS checker mode. 
+ */
+typedef enum bcmolt_prbs_checker_mode
+{
+    BCMOLT_PRBS_CHECKER_MODE__BEGIN                                                 = 0,
+    BCMOLT_PRBS_CHECKER_MODE_SELF_SYNC                                              = 0,    /**< Self-sync mode w/ hysteresis. PRBS seed register is continuously seeded with previous received bits.  This mode results in faster locking, but bit errors are counted multiple times (often by 3x).  */
+    BCMOLT_PRBS_CHECKER_MODE_INITIAL_SEED_MODE                                      = 1,    /**< Initial seed mode w/ hysteresis. PRBS seed registers is seeded with previous received bits only till PRBS lock is  acquired and then they run locally independently from the received data until the checker goes out of PRBS lock.  */
+    BCMOLT_PRBS_CHECKER_MODE_INITIAL_SEED_MODE_2                                    = 2,    /**< Initial seed mode w/o hysteresis. Similar to mode 1 above except once locked it stays locked until PRBS is disabled.    */
+    BCMOLT_PRBS_CHECKER_MODE__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_prbs_checker_mode;
+
+/** PRBS Lock State. 
+ */
+typedef enum bcmolt_prbs_lock_state
+{
+    BCMOLT_PRBS_LOCK_STATE__BEGIN                                                   = 0,
+    BCMOLT_PRBS_LOCK_STATE_UNLOCKED                                                 = 0,    /**< PRBS Checker is out of LOCK state and state machine is searching for a LOCK */
+    BCMOLT_PRBS_LOCK_STATE_LOCKED                                                   = 1,    /**< PRBS Checker is in LOCKED state */
+    BCMOLT_PRBS_LOCK_STATE__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_prbs_lock_state;
+
+/** Possible Raman Mitigation settings.  Raman mitigation injects pseudo-noise 
+ * into the 1G downstream data path to reduce interference with analog video 
+ * signals on other wavelengths. 
+ */
+typedef enum bcmolt_raman_mitigation_mode
+{
+    BCMOLT_RAMAN_MITIGATION_MODE__BEGIN                                             = 0,
+    BCMOLT_RAMAN_MITIGATION_MODE_DISABLED                                           = 0,    /**< No packets are generated. */
+    BCMOLT_RAMAN_MITIGATION_MODE_RANDOM                                             = 1,    /**< Pseudo-random packets are generated. */
+    BCMOLT_RAMAN_MITIGATION_MODE_FIXED                                              = 2,    /**< Fixed background packets are generated. */
+    BCMOLT_RAMAN_MITIGATION_MODE__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_raman_mitigation_mode;
+
+/** Ranging fail reason. 
+ */
+typedef enum bcmolt_ranging_fail_reason
+{
+    BCMOLT_RANGING_FAIL_REASON__BEGIN                                               = 0,
+    BCMOLT_RANGING_FAIL_REASON_NONE                                                 = 0,    /**< none. */
+    BCMOLT_RANGING_FAIL_REASON_RANGING_ACK_TIMEOUT                                  = 1,    /**< ranging ack timeout. */
+    BCMOLT_RANGING_FAIL_REASON_PLOAM_DATA_MISMATCH                                  = 2,    /**< ploam data mismatch. */
+    BCMOLT_RANGING_FAIL_REASON_PLOAM_TYPE_MISMATCH                                  = 3,    /**< ploam type mismatch. */
+    BCMOLT_RANGING_FAIL_REASON_PLOAM_ONU_ID_MISMATCH                                = 4,    /**< ploam onu id mismatch. */
+    BCMOLT_RANGING_FAIL_REASON_DRIFT_EXCEEDED                                       = 5,    /**< drift exceeded. */
+    BCMOLT_RANGING_FAIL_REASON_NO_PLOAM_RECEIVED                                    = 6,    /**< no ploam received. */
+    BCMOLT_RANGING_FAIL_REASON_LOS                                                  = 7,    /**< los. */
+    BCMOLT_RANGING_FAIL_REASON_ALARMS                                               = 8,    /**< alarms. */
+    BCMOLT_RANGING_FAIL_REASON__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_ranging_fail_reason;
+
+/** Registration Behavior. 
+ */
+typedef enum bcmolt_registration_behavior
+{
+    BCMOLT_REGISTRATION_BEHAVIOR__BEGIN                                             = 0,
+    BCMOLT_REGISTRATION_BEHAVIOR_AUTOMATIC                                          = 0,    /**< All links will be allowed to register. */
+    BCMOLT_REGISTRATION_BEHAVIOR_NOTIFY_UNKNOWN                                     = 1,    /**< Links that are not pre-provisioned will not be allowed to register.  A maskable indication will be sent to the host which can then decide if the link should be provisioned. */
+    BCMOLT_REGISTRATION_BEHAVIOR__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_registration_behavior;
+
+/** request registration fail reason. 
+ */
+typedef enum bcmolt_request_registration_fail_reason
+{
+    BCMOLT_REQUEST_REGISTRATION_FAIL_REASON__BEGIN                                  = 0,
+    BCMOLT_REQUEST_REGISTRATION_FAIL_REASON_NONE                                    = 0,    /**< None. */
+    BCMOLT_REQUEST_REGISTRATION_FAIL_REASON_REGISTRATION_PLOAM_TIMEOUT              = 1,    /**< registration ploam timeout. */
+    BCMOLT_REQUEST_REGISTRATION_FAIL_REASON_ONU_ALARM                               = 2,    /**< onu alarm. */
+    BCMOLT_REQUEST_REGISTRATION_FAIL_REASON_DEACTIVATION                            = 3,    /**< deactivation. */
+    BCMOLT_REQUEST_REGISTRATION_FAIL_REASON_DISABLE                                 = 4,    /**< disable. */
+    BCMOLT_REQUEST_REGISTRATION_FAIL_REASON__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_request_registration_fail_reason;
+
+/** Result. 
+ */
+typedef enum bcmolt_result
+{
+    BCMOLT_RESULT__BEGIN                                                            = 0,
+    BCMOLT_RESULT_SUCCESS                                                           = 0,    /**< Success. */
+    BCMOLT_RESULT_FAIL                                                              = 1,    /**< Fail. */
+    BCMOLT_RESULT__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_result;
+
+/** Type of the rogue detection algorithm. 
+ */
+typedef enum bcmolt_rogue_detection_algorithm_type
+{
+    BCMOLT_ROGUE_DETECTION_ALGORITHM_TYPE__BEGIN                                    = 0,
+    BCMOLT_ROGUE_DETECTION_ALGORITHM_TYPE_EARLY_ROGUE_DETECTION                     = 0,    /**< Firmware-driven periodic process which runs in the background to detect the potential rogue ONU. */
+    BCMOLT_ROGUE_DETECTION_ALGORITHM_TYPE_SPECIAL_MAP                               = 1,    /**< Use the user-provisioned special bandwidth map until it is told to stop. */
+    BCMOLT_ROGUE_DETECTION_ALGORITHM_TYPE_EXTENDED_GUARD_TIME                       = 2,    /**< Destructive tool that extends the guard time on all bursts. */
+    BCMOLT_ROGUE_DETECTION_ALGORITHM_TYPE__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_rogue_detection_algorithm_type;
+
+/** Rogue ONU detection measurement type. 
+ */
+typedef enum bcmolt_rogue_detection_window
+{
+    BCMOLT_ROGUE_DETECTION_WINDOW__BEGIN                                            = 0,
+    BCMOLT_ROGUE_DETECTION_WINDOW_SILENT_WINDOW                                     = 0,    /**< Silent window measurement. */
+    BCMOLT_ROGUE_DETECTION_WINDOW_CUT_OFF_WINDOW                                    = 1,    /**< Cut-off window measurement. */
+    BCMOLT_ROGUE_DETECTION_WINDOW__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_rogue_detection_window;
+
+/** Status of the rogue ONU detection result. 
+ */
+typedef enum bcmolt_rogue_measurement_result
+{
+    BCMOLT_ROGUE_MEASUREMENT_RESULT__BEGIN                                          = 0,
+    BCMOLT_ROGUE_MEASUREMENT_RESULT_RSSI_COMPLETE                                   = 0,    /**< Rogue ONU RSSI detection activity completed. */
+    BCMOLT_ROGUE_MEASUREMENT_RESULT_NOT_PERFORMED                                   = 1,    /**< Rogue ONU detection not performed. */
+    BCMOLT_ROGUE_MEASUREMENT_RESULT_ROGUE_CYCLE_STOP                                = 2,    /**< Rogue ONU cycle detection stopped. */
+    BCMOLT_ROGUE_MEASUREMENT_RESULT_RSSI_ERROR                                      = 3,    /**< There was an error in the RSSI measurement. */
+    BCMOLT_ROGUE_MEASUREMENT_RESULT_RSSI_NOT_COMPLETE                               = 4,    /**< The RSSI mesaurement was not complete. */
+    BCMOLT_ROGUE_MEASUREMENT_RESULT__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_rogue_measurement_result;
+
+/** Rogue Scan Indication Status . 
+ */
+typedef enum bcmolt_rogue_scan_status
+{
+    BCMOLT_ROGUE_SCAN_STATUS__BEGIN                                                 = 0,
+    BCMOLT_ROGUE_SCAN_STATUS_COMPLETE                                               = 0,    /**< Rogue Scan was completed. */
+    BCMOLT_ROGUE_SCAN_STATUS_LLID_STATE_IS_BAD                                      = 1,    /**< llid in targeted scan was an active link. */
+    BCMOLT_ROGUE_SCAN_STATUS_LLID_IS_OOR                                            = 2,    /**< llid in targeted scan is out of range for pon. */
+    BCMOLT_ROGUE_SCAN_STATUS_SCAN_ERR_NORES                                         = 3,    /**< There were no available LIM indexes for the scan.. */
+    BCMOLT_ROGUE_SCAN_STATUS_SCAN_ERR_INTERNAL                                      = 4,    /**< An internal software was encountered.. */
+    BCMOLT_ROGUE_SCAN_STATUS__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_rogue_scan_status;
+
+/** RSSI measurement fail reason. 
+ */
+typedef enum bcmolt_rssi_measurement_fail_reason
+{
+    BCMOLT_RSSI_MEASUREMENT_FAIL_REASON__BEGIN                                      = 0,
+    BCMOLT_RSSI_MEASUREMENT_FAIL_REASON_NONE                                        = 0,    /**< None. */
+    BCMOLT_RSSI_MEASUREMENT_FAIL_REASON_NO_DELIMITER                                = 1,    /**< No delimiter. */
+    BCMOLT_RSSI_MEASUREMENT_FAIL_REASON_NO_ACCESS                                   = 2,    /**< No access. */
+    BCMOLT_RSSI_MEASUREMENT_FAIL_REASON__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_rssi_measurement_fail_reason;
+
+/** secure mutual authentication fail reason. 
+ */
+typedef enum bcmolt_secure_mutual_authentication_fail_reason
+{
+    BCMOLT_SECURE_MUTUAL_AUTHENTICATION_FAIL_REASON__BEGIN                          = 0,
+    BCMOLT_SECURE_MUTUAL_AUTHENTICATION_FAIL_REASON_TIMEOUT                         = 0,    /**< secure mutual authentication timeout. */
+    BCMOLT_SECURE_MUTUAL_AUTHENTICATION_FAIL_REASON__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_secure_mutual_authentication_fail_reason;
+
+/** serdes ranging mode. 
+ */
+typedef enum bcmolt_serdes_ranging_mode
+{
+    BCMOLT_SERDES_RANGING_MODE__BEGIN                                               = 0,
+    BCMOLT_SERDES_RANGING_MODE_ED_MODE                                              = 0,    /**< ed mode. */
+    BCMOLT_SERDES_RANGING_MODE_BCDR_RESET_MODE                                      = 1,    /**< BCDR reset mode. */
+    BCMOLT_SERDES_RANGING_MODE_FAST_MODE                                            = 2,    /**< fast mode. */
+    BCMOLT_SERDES_RANGING_MODE__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_serdes_ranging_mode;
+
+/** SerDes Instance. 
+ */
+typedef enum bcmolt_serdes_instance
+{
+    BCMOLT_SERDES_INSTANCE__BEGIN                                                   = 0,
+    BCMOLT_SERDES_INSTANCE_INSTANCE_0                                               = 0,    /**< Primary Serdes, or 10G SerDes for EPON pon_ids. */
+    BCMOLT_SERDES_INSTANCE_INSTANCE_1                                               = 1,    /**< Secondary Serdes, or 1G/2G SerDes for EPON pon_ids. */
+    BCMOLT_SERDES_INSTANCE__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_serdes_instance;
+
+/** Shaper Mode. 
+ */
+typedef enum bcmolt_shaper_mode
+{
+    BCMOLT_SHAPER_MODE__BEGIN                                                       = 0,
+    BCMOLT_SHAPER_MODE_LAYER_1                                                      = 0,    /**< Shapers will count IPG, preamble, frame, and FCS */
+    BCMOLT_SHAPER_MODE_LAYER_2                                                      = 1,    /**< Shapers will count frame and FCS. */
+    BCMOLT_SHAPER_MODE__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_shaper_mode;
+
+/** All possible statistic alarm trigger conditions. 
+ */
+typedef enum bcmolt_stat_condition_type
+{
+    BCMOLT_STAT_CONDITION_TYPE__BEGIN                                               = 0,
+    BCMOLT_STAT_CONDITION_TYPE_NONE                                                 = 0,    /**< The alarm is disabled. */
+    BCMOLT_STAT_CONDITION_TYPE_RATE_THRESHOLD                                       = 1,    /**< The alarm is triggered if the stats delta value between samples crosses the configured threshold boundary. */
+    BCMOLT_STAT_CONDITION_TYPE_RATE_RANGE                                           = 2,    /**< The alarm is triggered if the stats delta value between samples deviates from the configured range. */
+    BCMOLT_STAT_CONDITION_TYPE_VALUE_THRESHOLD                                      = 3,    /**< The alarm is raised if the stats sample value becomes greater than this level.  The alarm is cleared when the host read the stats. */
+    BCMOLT_STAT_CONDITION_TYPE__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_stat_condition_type;
+
+/** Switch over type c onu state. 
+ */
+typedef enum bcmolt_switch_over_type_c_onu_state
+{
+    BCMOLT_SWITCH_OVER_TYPE_C_ONU_STATE__BEGIN                                      = 0,
+    BCMOLT_SWITCH_OVER_TYPE_C_ONU_STATE_ACTIVE                                      = 0,    /**< Active. */
+    BCMOLT_SWITCH_OVER_TYPE_C_ONU_STATE_ACTIVE_STANDBY                              = 1,    /**< Active standby. */
+    BCMOLT_SWITCH_OVER_TYPE_C_ONU_STATE__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_switch_over_type_c_onu_state;
+
+/** System working mode (GPON/EPON etc.) 
+ */
+typedef enum bcmolt_system_mode
+{
+    BCMOLT_SYSTEM_MODE__BEGIN                                                       = 0,
+    BCMOLT_SYSTEM_MODE_GPON__16_X                                                   = 0,    /**< 16x GPON */
+    BCMOLT_SYSTEM_MODE_GPON__8_X                                                    = 1,    /**< 8x GPON */
+    BCMOLT_SYSTEM_MODE_GPON__4_X                                                    = 2,    /**< 4x GPON */
+    BCMOLT_SYSTEM_MODE_EPON__16_X                                                   = 3,    /**< 16x EPON */
+    BCMOLT_SYSTEM_MODE_XGPON_1__8_X                                                 = 4,    /**< 8x XGPON1 */
+    BCMOLT_SYSTEM_MODE_EPON__8_X_COEXISTENCE_TDMA                                   = 5,    /**< 8x EPON coexistence TDMA */
+    BCMOLT_SYSTEM_MODE_AE_8_X                                                       = 6,    /**< 8x 10G Active Ethernet */
+    BCMOLT_SYSTEM_MODE_EPON__8_X_10_G                                               = 7,    /**< 8x EPON (10/10 only) */
+    BCMOLT_SYSTEM_MODE_GPON_8_XGPON_4_X_COEXISTENCE                                 = 8,    /**< 8x GPON 4x XGPON coexistence */
+    BCMOLT_SYSTEM_MODE_EPON__8_X                                                    = 9,    /**< 8x EPON (1/1 only) */
+    BCMOLT_SYSTEM_MODE_EPON__4_X                                                    = 10,   /**< 4x EPON (1/1 only) */
+    BCMOLT_SYSTEM_MODE_EPON__4_X_COEXISTENCE_TDMA                                   = 11,   /**< 4x EPON coexistence TDMA */
+    BCMOLT_SYSTEM_MODE_EPON__4_X_10_G                                               = 12,   /**< 4x EPON (10/10 only) */
+    BCMOLT_SYSTEM_MODE_XGS__2_X_10_G                                                = 13,   /**< 2x XGS-PON (10/10) */
+    BCMOLT_SYSTEM_MODE_NGPON2__2_X_10_G                                             = 14,   /**< 2x NGPON2 (10/10) */
+    BCMOLT_SYSTEM_MODE_NGPON2__8_X_2_P_5_G                                          = 15,   /**< 8x NGPON2 (10/2.5) */
+    BCMOLT_SYSTEM_MODE_XGPON_1__4_X                                                 = 16,   /**< 4x XGPON1 */
+    BCMOLT_SYSTEM_MODE_EPON__2_X_10_G                                               = 17,   /**< 2x EPON (10/10 only) */
+    BCMOLT_SYSTEM_MODE__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_system_mode;
+
+/** US operating wavelength bands. 
+ */
+typedef enum bcmolt_us_operating_wavelength_bands
+{
+    BCMOLT_US_OPERATING_WAVELENGTH_BANDS_EXPANDED_SPECTRUM_WIDE_BAND                = 0,    /**< Expanded spectrum wide band option */
+    BCMOLT_US_OPERATING_WAVELENGTH_BANDS_EXPANDED_SPECTRUM_REDUCED_BAND             = 1,    /**< Expanded spectrum reduced band option */
+    BCMOLT_US_OPERATING_WAVELENGTH_BANDS_EXPANDED_SPECTRUM_NARROW_BAND              = 2,    /**< Expanded spectrum reduced band option */
+    BCMOLT_US_OPERATING_WAVELENGTH_BANDS_SHARED_SPECTRUM_WIDE_BAND                  = 16,   /**< Shared spectrum wide band option */
+    BCMOLT_US_OPERATING_WAVELENGTH_BANDS_SHARED_SPECTRUM_REDUCED_BAND               = 17,   /**< Shared spectrum reduced band option */
+    BCMOLT_US_OPERATING_WAVELENGTH_BANDS_SHARED_SPECTRUM_NARROW_BAND                = 18    /**< Shared spectrum wide narrow option */
+} bcmolt_us_operating_wavelength_bands;
+
+/** Traffic resume result. 
+ */
+typedef enum bcmolt_traffic_resume_result
+{
+    BCMOLT_TRAFFIC_RESUME_RESULT__BEGIN                                             = 0,
+    BCMOLT_TRAFFIC_RESUME_RESULT_SUCCESS                                            = 0,    /**< Success. */
+    BCMOLT_TRAFFIC_RESUME_RESULT_FAILURE                                            = 1,    /**< Failure. */
+    BCMOLT_TRAFFIC_RESUME_RESULT_SUSPECTED_LOS                                      = 2,    /**< suspected_los. */
+    BCMOLT_TRAFFIC_RESUME_RESULT__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_traffic_resume_result;
+
+/** trx calibration trigger. 
+ */
+typedef enum bcmolt_trx_calibration_trigger
+{
+    BCMOLT_TRX_CALIBRATION_TRIGGER__BEGIN                                           = 0,
+    BCMOLT_TRX_CALIBRATION_TRIGGER_EPON_STAT                                        = 0,    /**< epon stat. */
+    BCMOLT_TRX_CALIBRATION_TRIGGER_GPON_BCDR_RESET                                  = 1,    /**< gpon bcdr reset. */
+    BCMOLT_TRX_CALIBRATION_TRIGGER_GPON_TRX_RESET                                   = 2,    /**< gpon trx reset. */
+    BCMOLT_TRX_CALIBRATION_TRIGGER_GPON_TRX_ED                                      = 3,    /**< gpon trx ed. */
+    BCMOLT_TRX_CALIBRATION_TRIGGER_GPON_RSSI                                        = 4,    /**< gpon rssi. */
+    BCMOLT_TRX_CALIBRATION_TRIGGER_GPON_EOB                                         = 5,    /**< gpon eob. */
+    BCMOLT_TRX_CALIBRATION_TRIGGER_GPON_RANGING                                     = 6,    /**< gpon ranging. */
+    BCMOLT_TRX_CALIBRATION_TRIGGER_SERDES_BURST_EN                                  = 7,    /**< serdes burst en. */
+    BCMOLT_TRX_CALIBRATION_TRIGGER__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_trx_calibration_trigger;
+
+/** trx calibration trigger position. 
+ */
+typedef enum bcmolt_trx_calibration_trigger_position
+{
+    BCMOLT_TRX_CALIBRATION_TRIGGER_POSITION__BEGIN                                  = 0,
+    BCMOLT_TRX_CALIBRATION_TRIGGER_POSITION_RISING                                  = 0,    /**< rising edge. */
+    BCMOLT_TRX_CALIBRATION_TRIGGER_POSITION_FALLING                                 = 1,    /**< falling edge. */
+    BCMOLT_TRX_CALIBRATION_TRIGGER_POSITION__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_trx_calibration_trigger_position;
+
+/** trx calibration window mode. 
+ */
+typedef enum bcmolt_trx_calibration_window_mode
+{
+    BCMOLT_TRX_CALIBRATION_WINDOW_MODE__BEGIN                                       = 0,
+    BCMOLT_TRX_CALIBRATION_WINDOW_MODE_RANGING                                      = 0,    /**< ranging. */
+    BCMOLT_TRX_CALIBRATION_WINDOW_MODE_NON_RANGING                                  = 1,    /**< non ranging. */
+    BCMOLT_TRX_CALIBRATION_WINDOW_MODE_BOTH                                         = 2,    /**< ranging and non ranging. */
+    BCMOLT_TRX_CALIBRATION_WINDOW_MODE__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_trx_calibration_window_mode;
+
+/** TRX type. 
+ */
+typedef enum bcmolt_trx_type
+{
+    BCMOLT_TRX_TYPE__BEGIN                                                          = 0,
+    BCMOLT_TRX_TYPE_SPS_43_48_H_HP_CDE_SD_2013                                      = 0,    /**< SourcePhotonics - SPS-43-48H-HP-CDE-SD Reset is required BEFORE, TRX is Squelched. till 2013 rev.  */
+    BCMOLT_TRX_TYPE_SOG_4321_PSGB                                                   = 1,    /**< Superxon B+ type */
+    BCMOLT_TRX_TYPE_LTE_3680_M                                                      = 2,    /**< LIGENT LTE3680M. */
+    BCMOLT_TRX_TYPE_SOURCE_PHOTONICS                                                = 3,    /**< Source Photonics. */
+    BCMOLT_TRX_TYPE_LTE_3680_P_TYPE_C_PLUS                                          = 4,    /**< LIGENT LTE3680P_TYPE_C_PLUS. */
+    BCMOLT_TRX_TYPE_ANY                                                             = 5,    /**< Any. */
+    BCMOLT_TRX_TYPE_ANY_RESET_GUARD                                                 = 6,    /**< Any reset guard. */
+    BCMOLT_TRX_TYPE_ANY_RESET_PREAMBLE                                              = 7,    /**< Any reset preamble. */
+    BCMOLT_TRX_TYPE_WTD_RTXM_167_526_CPLUS                                          = 8,    /**< WTD RTXM167 526 C+. */
+    BCMOLT_TRX_TYPE_WTD_RTXM_167_522_BPLUS                                          = 9,    /**< WTD RTXM167 522 B+. */
+    BCMOLT_TRX_TYPE_LTE_3680_P_BC                                                   = 10,   /**< LIGENT HiSense LTE3680P-BC. */
+    BCMOLT_TRX_TYPE_SOGQ_4321_PSGB_C_PLUS                                           = 11,   /**< Superxon C+ type */
+    BCMOLT_TRX_TYPE_WTD_RTXM167_521                                                 = 12,   /**< WTD RTXM167_521. */
+    BCMOLT_TRX_TYPE_LTE3678                                                         = 13,   /**< LTE3678. */
+    BCMOLT_TRX_TYPE_SOGP_4321_PSGA                                                  = 14,   /**< Superxon SOGP4321-PSGA. */
+    BCMOLT_TRX_TYPE_GPON_GENERAL_1                                                  = 15,   /**< gpon general 1. */
+    BCMOLT_TRX_TYPE_GPON_GENERAL_2                                                  = 16,   /**< gpon general 2. */
+    BCMOLT_TRX_TYPE_GPON_GENERAL_3                                                  = 17,   /**< gpon general 3. */
+    BCMOLT_TRX_TYPE_GPON_GENERAL_4                                                  = 18,   /**< gpon general 4. */
+    BCMOLT_TRX_TYPE_GPON_GENERAL_5                                                  = 19,   /**< gpon general 5. */
+    BCMOLT_TRX_TYPE_GPON_GENERAL_6                                                  = 20,   /**< gpon general 6. */
+    BCMOLT_TRX_TYPE_GPON_GENERAL_7                                                  = 21,   /**< gpon general 7. */
+    BCMOLT_TRX_TYPE_GPON_GENERAL_8                                                  = 22,   /**< gpon general 8. */
+    BCMOLT_TRX_TYPE_GPON_GENERAL_9                                                  = 23,   /**< gpon general 9. */
+    BCMOLT_TRX_TYPE_GPON_GENERAL_10                                                 = 24,   /**< gpon general 10. */
+    BCMOLT_TRX_TYPE_GPON_GENERAL_11                                                 = 25,   /**< gpon general 11. */
+    BCMOLT_TRX_TYPE__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_trx_type;
+
+/** Tune in fail reason. 
+ */
+typedef enum bcmolt_tune_in_fail_reason
+{
+    BCMOLT_TUNE_IN_FAIL_REASON__BEGIN                                               = 0,
+    BCMOLT_TUNE_IN_FAIL_REASON_NONE                                                 = 0,    /**< none. */
+    BCMOLT_TUNE_IN_FAIL_REASON_NO_TUNING_RESPONSE_PLOAM_RECEIVED                    = 1,    /**< No tuning response ploam received. */
+    BCMOLT_TUNE_IN_FAIL_REASON_ONU_ACTIVATION_FAILED                                = 2,    /**< onu activation failed. */
+    BCMOLT_TUNE_IN_FAIL_REASON__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_tune_in_fail_reason;
+
+/** Tune out fail reason. 
+ */
+typedef enum bcmolt_tune_out_fail_reason
+{
+    BCMOLT_TUNE_OUT_FAIL_REASON__BEGIN                                              = 0,
+    BCMOLT_TUNE_OUT_FAIL_REASON_NONE                                                = 0,    /**< none. */
+    BCMOLT_TUNE_OUT_FAIL_REASON_NACK_PLOAM_RECEIVED                                 = 1,    /**< NACK ploam received. */
+    BCMOLT_TUNE_OUT_FAIL_REASON_NO_TUNING_RESPONSE_PLOAM_RECEIVED                   = 2,    /**< no tuning response ploam received. */
+    BCMOLT_TUNE_OUT_FAIL_REASON_TSOURCE_TIMEOUT                                     = 3,    /**< tsource timeout. */
+    BCMOLT_TUNE_OUT_FAIL_REASON_ROLLBACK_REQUEST                                    = 4,    /**< rollback request. */
+    BCMOLT_TUNE_OUT_FAIL_REASON__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_tune_out_fail_reason;
+
+/** UART baud rate. 
+ */
+typedef enum bcmolt_uart_baudrate
+{
+    BCMOLT_UART_BAUDRATE__BEGIN                                                     = 0,
+    BCMOLT_UART_BAUDRATE_UART_RATE_4800                                             = 0,    /**< UART rate 4800. */
+    BCMOLT_UART_BAUDRATE_UART_RATE_9600                                             = 1,    /**< UART rate 9600. */
+    BCMOLT_UART_BAUDRATE_UART_RATE_14400                                            = 2,    /**< UART rate 14400. */
+    BCMOLT_UART_BAUDRATE_UART_RATE_19200                                            = 3,    /**< UART rate 19200. */
+    BCMOLT_UART_BAUDRATE_UART_RATE_38400                                            = 4,    /**< UART rate 38400. */
+    BCMOLT_UART_BAUDRATE_UART_RATE_57600                                            = 5,    /**< UART rate 57600. */
+    BCMOLT_UART_BAUDRATE_UART_RATE_115200                                           = 6,    /**< UART rate 115200. */
+    BCMOLT_UART_BAUDRATE_UART_RATE_230400                                           = 7,    /**< UART rate 230400. */
+    BCMOLT_UART_BAUDRATE_UART_RATE_380400                                           = 8,    /**< UART rate 380400. */
+    BCMOLT_UART_BAUDRATE_UART_RATE_460800                                           = 9,    /**< UART rate 460800. */
+    BCMOLT_UART_BAUDRATE_UART_RATE_921600                                           = 10,   /**< UART rate 921600. */
+    BCMOLT_UART_BAUDRATE__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_uart_baudrate;
+
+/** us_gem_port_destination. 
+ */
+typedef enum bcmolt_us_gem_port_destination
+{
+    BCMOLT_US_GEM_PORT_DESTINATION__BEGIN                                           = 0,
+    BCMOLT_US_GEM_PORT_DESTINATION_DATA                                             = 0,    /**< data. */
+    BCMOLT_US_GEM_PORT_DESTINATION_CPU                                              = 1,    /**< cpu. */
+    BCMOLT_US_GEM_PORT_DESTINATION_OMCI                                             = 2,    /**< omci. */
+    BCMOLT_US_GEM_PORT_DESTINATION__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_us_gem_port_destination;
+
+/** US VLAN action. 
+ */
+typedef enum bcmolt_us_vlan_action
+{
+    BCMOLT_US_VLAN_ACTION_ADD                                                       = 1,    /**< Add. */
+    BCMOLT_US_VLAN_ACTION_TRANSPARENT                                               = 0     /**< Transparent. */
+} bcmolt_us_vlan_action;
+
+/** VLAN to flow mapping method. 
+ */
+typedef enum bcmolt_vlan_to_flow_mapping_method
+{
+    BCMOLT_VLAN_TO_FLOW_MAPPING_METHOD__BEGIN                                       = 0,
+    BCMOLT_VLAN_TO_FLOW_MAPPING_METHOD_VID                                          = 0,    /**< VID. */
+    BCMOLT_VLAN_TO_FLOW_MAPPING_METHOD_MACPLUSVID                                   = 1,    /**< MAC+VID. */
+    BCMOLT_VLAN_TO_FLOW_MAPPING_METHOD__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_vlan_to_flow_mapping_method;
+
+/** XGPON GEM Port State. 
+ */
+typedef enum bcmolt_xgpon_gem_port_state
+{
+    BCMOLT_XGPON_GEM_PORT_STATE_NOT_CONFIGURED                                      = 0,    /**< not configured. */
+    BCMOLT_XGPON_GEM_PORT_STATE_INACTIVE                                            = 1,    /**< inactive. */
+    BCMOLT_XGPON_GEM_PORT_STATE_ACTIVE                                              = 3     /**< active. */
+} bcmolt_xgpon_gem_port_state;
+
+/** xgpon num of onus. 
+ */
+typedef enum bcmolt_xgpon_num_of_onus
+{
+    BCMOLT_XGPON_NUM_OF_ONUS__BEGIN                                                 = 0,
+    BCMOLT_XGPON_NUM_OF_ONUS_XGPON_SUPPORT_256_ONUS                                 = 0,    /**< xgpon support 256 onus. */
+    BCMOLT_XGPON_NUM_OF_ONUS_XGPON_SUPPORT_510_ONUS                                 = 1,    /**< xgpon support 510 onus. */
+    BCMOLT_XGPON_NUM_OF_ONUS__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_num_of_onus;
+
+/** xgpon serdes ranging mode. 
+ */
+typedef enum bcmolt_xgpon_serdes_ranging_mode
+{
+    BCMOLT_XGPON_SERDES_RANGING_MODE__BEGIN                                         = 0,
+    BCMOLT_XGPON_SERDES_RANGING_MODE_ED                                             = 0,    /**< ed. */
+    BCMOLT_XGPON_SERDES_RANGING_MODE_BCDR                                           = 1,    /**< bcdr. */
+    BCMOLT_XGPON_SERDES_RANGING_MODE_FAST_RANGING1                                  = 2,    /**< fast ranging1. */
+    BCMOLT_XGPON_SERDES_RANGING_MODE_FAST_RANGING2                                  = 3,    /**< fast ranging2. */
+    BCMOLT_XGPON_SERDES_RANGING_MODE__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_serdes_ranging_mode;
+
+/** XGPON TRX type. 
+ */
+typedef enum bcmolt_xgpon_trx_type
+{
+    BCMOLT_XGPON_TRX_TYPE__BEGIN                                                    = 0,
+    BCMOLT_XGPON_TRX_TYPE_LTH_7222_PC                                               = 0,    /**< Ligent LTH 7222-PC. */
+    BCMOLT_XGPON_TRX_TYPE_USER_DEFINED                                              = 1,    /**< User Defined. */
+    BCMOLT_XGPON_TRX_TYPE_WTD_RTXM266_702                                           = 2,    /**< WTD_RTXM266_702. */
+    BCMOLT_XGPON_TRX_TYPE_LTH_7222_BC_PLUS                                          = 3,    /**< SFP+ */
+    BCMOLT_XGPON_TRX_TYPE_LTH_7226_PC                                               = 4,    /**< XGS */
+    BCMOLT_XGPON_TRX_TYPE_LTH_5302_PC                                               = 5,    /**< 10G EPON for XGS mode */
+    BCMOLT_XGPON_TRX_TYPE_XGPON_GENERAL_1                                           = 6,    /**< xgpon general 1. */
+    BCMOLT_XGPON_TRX_TYPE_XGPON_GENERAL_2                                           = 7,    /**< xgpon general 2. */
+    BCMOLT_XGPON_TRX_TYPE_LTW_627_X_PC                                              = 8,    /**< Supports NGPON2 TRx for various channels */
+    BCMOLT_XGPON_TRX_TYPE_XPP_XE_R_3_CDFB                                           = 9,    /**< 10G EPON for XGS mode */
+    BCMOLT_XGPON_TRX_TYPE__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_trx_type;
+
+/** Actual Scheduler/Shaper. 
+ */
+typedef struct bcmolt_actual_schedulershaper
+{
+    bcmolt_time_quanta actual_mbs_tq;       /**< Actual MBS (TQ). */
+    bcmolt_time_quanta actual_weight_tq;    /**< Actual Weight (TQ). */
+} bcmolt_actual_schedulershaper;
+
+/** 128-bit AES key used for ONU authentication. 
+ */
+typedef struct bcmolt_aes_key
+{
+    uint8_t bytes[16];  /**< Bytes that comprise the key. */
+} bcmolt_aes_key;
+
+/** What portion of the capture buffer to read. 
+ */
+typedef struct bcmolt_api_capture_buffer_reader
+{
+    uint32_t offset;    /**< The bytes offset to read from. */
+    uint32_t size;      /**< The number of bytes to read. */
+} bcmolt_api_capture_buffer_reader;
+
+/** Configuration for API capture. 
+ */
+typedef struct bcmolt_api_capture_config
+{
+    bcmolt_api_capture_location location;   /**< Where to perform the API capture. */
+    uint32_t buffer_size_bytes;             /**< Maximum number of bytes to capture. */
+    bcmolt_api_capture_buffer_mode buffer_mode; /**< What to do when the capture buffer is full. */
+} bcmolt_api_capture_config;
+
+/** Statistics on the most recent API capture. 
+ */
+typedef struct bcmolt_api_capture_stats
+{
+    uint32_t buffer_used_bytes; /**< Used space in the capture buffer (in bytes). */
+    uint32_t buffer_wrap_count; /**< Number of times the capture buffer has wrapped. */
+    uint32_t events_recorded;   /**< Number of events recorded in the capture buffer. */
+    uint32_t events_dropped;    /**< Number of events dropped due to overflow. */
+    uint32_t readable_bytes;    /**< Number of bytes needed to retrieve capture buffer. */
+} bcmolt_api_capture_stats;
+
+/** Bounds. 
+ */
+typedef struct bcmolt_bounds
+{
+    uint32_t best_case;     /**< Best Case. */
+    uint32_t worst_case;    /**< Worst Case. */
+} bcmolt_bounds;
+
+/** Fixed-Length list: 8x bounds. 
+ */
+typedef struct bcmolt_arr_bounds_8
+{
+    bcmolt_bounds arr[8];   /**< Array. */
+} bcmolt_arr_bounds_8;
+
+/** Fixed-Length list: 8x calibration_record. 
+ */
+typedef struct bcmolt_arr_calibration_record_8
+{
+    bcmolt_calibration_record arr[8];   /**< Array. */
+} bcmolt_arr_calibration_record_8;
+
+/** DS frequency offset. 
+ */
+typedef struct bcmolt_ds_frequency_offset
+{
+    bcmolt_sign sign;   /**< sign. */
+    uint8_t value;      /**< value. */
+} bcmolt_ds_frequency_offset;
+
+/** Channel Profile 
+ */
+typedef struct bcmolt_channel_profile
+{
+    uint8_t version;        /**< Channel profile version */
+    uint8_t channel_index;  /**< Channel profile index */
+    bcmolt_ds_frequency_offset ds_frequency_offset; /**< The difference between the actual OLT CT Tx frequency and the nominal central frequency for the given DWLCH ID, expressed in units of 0.1GHz */
+    uint8_t channel_partition;                      /**< Channel partition */
+    uint8_t uwlch_id;       /**< The assigned upstream wavelength channel ID */
+    uint32_t us_frequency;  /**< The nominal central frequency of the upstream wavelength channel or a root frequency of the cyclic set of central frequencies forming an upstream wavelength channel, indicates the value in units of 0.1 GHz. */
+    bcmolt_upstream_line_rate_capabilities us_rate; /**< US rate. */
+    uint8_t default_onu_attenuation;                /**< The default ONU attenuation level in steps of 3dB */
+    uint8_t response_threshold;                     /**< Threshold represent the maximum number of Ploams the ONU can transmit at non-zero attenuation level while attempting to establish communication with OLT CT */
+    bcmolt_link_type us_link_type;                  /**< US link type. */
+    bcmos_bool is_valid;    /**< is valid. */
+} bcmolt_channel_profile;
+
+/** Fixed-Length list: 8x channel_profile. 
+ */
+typedef struct bcmolt_arr_channel_profile_8
+{
+    bcmolt_channel_profile arr[8];  /**< Array. */
+} bcmolt_arr_channel_profile_8;
+
+/** Power consumption report per channel 
+ */
+typedef struct bcmolt_power_consumption_channel_report
+{
+    uint8_t ds_wavelength_channel_id;   /**< Downstream wavelength channel ID */
+    uint8_t us_wavelength_channel_id;   /**< Upstream wavelength channel ID */
+    uint16_t power_consumption;         /**< Power consumption */
+} bcmolt_power_consumption_channel_report;
+
+/** Fixed-Length list: 8x power_consumption_channel_report. 
+ */
+typedef struct bcmolt_arr_power_consumption_channel_report_8
+{
+    bcmolt_power_consumption_channel_report arr[8]; /**< Array. */
+} bcmolt_arr_power_consumption_channel_report_8;
+
+/** Fixed-Length list: 2x U16. 
+ */
+typedef struct bcmolt_arr_u16_2
+{
+    uint16_t arr[2];    /**< Array. */
+} bcmolt_arr_u16_2;
+
+/** Fixed-Length list: 2x U16. 
+ */
+typedef struct bcmolt_arr_u16_2_hex
+{
+    uint16_t arr[2];    /**< Array. */
+} bcmolt_arr_u16_2_hex;
+
+/** Fixed-Length list: 5x U16. 
+ */
+typedef struct bcmolt_arr_u16_5_hex
+{
+    uint16_t arr[5];    /**< Array. */
+} bcmolt_arr_u16_5_hex;
+
+/** Fixed-Length list: 7x U16. 
+ */
+typedef struct bcmolt_arr_u16_7
+{
+    uint16_t arr[7];    /**< Array. */
+} bcmolt_arr_u16_7;
+
+/** Fixed-Length list: 6x U32. 
+ */
+typedef struct bcmolt_arr_u32_6
+{
+    uint32_t arr[6];    /**< Array. */
+} bcmolt_arr_u32_6;
+
+/** Fixed-Length list: 10x U8. 
+ */
+typedef struct bcmolt_arr_u8_10
+{
+    uint8_t arr[10];    /**< Array. */
+} bcmolt_arr_u8_10;
+
+/** Fixed-Length list: 12x U8. 
+ */
+typedef struct bcmolt_arr_u8_12
+{
+    uint8_t arr[12];    /**< Array. */
+} bcmolt_arr_u8_12;
+
+/** Fixed-Length list: 13x U8. 
+ */
+typedef struct bcmolt_arr_u8_13
+{
+    uint8_t arr[13];    /**< Array. */
+} bcmolt_arr_u8_13;
+
+/** Fixed-Length list: 36x U8. 
+ */
+typedef struct bcmolt_arr_u8_36
+{
+    uint8_t arr[36];    /**< Array. */
+} bcmolt_arr_u8_36;
+
+/** Fixed-Length list: 4x U8. 
+ */
+typedef struct bcmolt_arr_u8_4
+{
+    uint8_t arr[4]; /**< Array. */
+} bcmolt_arr_u8_4;
+
+/** Fixed-Length list: 40x U8. 
+ */
+typedef struct bcmolt_arr_u8_40
+{
+    uint8_t arr[40];    /**< Array. */
+} bcmolt_arr_u8_40;
+
+/** XGPON burst profile. 
+ */
+typedef struct bcmolt_xgpon_burst_profile
+{
+    uint8_t profile_version;            /**< profile version. */
+    bcmos_bool is_fec_on;               /**< is fec on. */
+    uint8_t delimiter_size_in_bytes;    /**< delimiter size in bytes. */
+    uint32_t delimiter_pattern_high;    /**< delimiter pattern high. */
+    uint32_t delimiter_pattern_low;     /**< delimiter pattern low. */
+    uint8_t preamble_length_in_bytes;   /**< preamble length in bytes. */
+    uint8_t preamble_repeats_count;     /**< preamble repeats count. */
+    uint32_t preamble_pattern_high;     /**< preamble pattern high. */
+    uint32_t preamble_pattern_low;      /**< preamble pattern low. */
+    uint64_t pon_tag;                   /**< PON tag. */
+    uint32_t num_of_guard_bytes;        /**< number of guard bytes. */
+    bcmos_bool is_profile_valid;        /**< is profile valid. */
+    uint32_t burst_overhead_size_in_words;  /**< Burst overhead size in 4-byte words (word size is 4 bytes regardless of upstream data rate). */
+} bcmolt_xgpon_burst_profile;
+
+/** Fixed-Length list: 4x xgpon_burst_profile. 
+ */
+typedef struct bcmolt_arr_xgpon_burst_profile_4
+{
+    bcmolt_xgpon_burst_profile arr[4];  /**< Array. */
+} bcmolt_arr_xgpon_burst_profile_4;
+
+/** XGPON TRX configuration. 
+ */
+typedef struct bcmolt_xgpon_trx_configuration
+{
+    uint32_t trx_reset_pattern_first;           /**< trx reset pattern first. */
+    uint32_t trx_reset_pattern_middle;          /**< trx reset pattern middle. */
+    uint32_t trx_reset_pattern_last;            /**< trx reset pattern last. */
+    uint8_t trx_reset_middle_repeats_count;     /**< trx reset middle repeats count. */
+    uint16_t trx_reset_location;                /**< trx reset location. */
+    bcmos_bool trx_reset_polarity;              /**< trx reset polarity. */
+    uint32_t bcdr_reset_pattern_first;          /**< bcdr reset pattern first. */
+    uint32_t bcdr_reset_pattern_middle;         /**< bcdr reset pattern middle. */
+    uint32_t bcdr_reset_pattern_last;           /**< bcdr reset pattern last. */
+    uint8_t bcdr_reset_middle_repeats_count;    /**< bcdr reset middle repeats count. */
+    uint8_t bcdr_reset_location;                /**< bcdr reset location. */
+    bcmos_bool bcdr_reset_polarity;             /**< bcdr reset polarity. */
+} bcmolt_xgpon_trx_configuration;
+
+/** Fixed-Length list: 4x xgpon_trx_configuration. 
+ */
+typedef struct bcmolt_arr_xgpon_trx_configuration_4
+{
+    bcmolt_xgpon_trx_configuration arr[4];  /**< Array. */
+} bcmolt_arr_xgpon_trx_configuration_4;
+
+/** Automatic ONU deactivation. 
+ */
+typedef struct bcmolt_automatic_onu_deactivation
+{
+    bcmos_bool los;         /**< Auto deactivate ONU due to LOS */
+    bcmos_bool onu_alarms;  /**< Auto deactivate ONU due to ONU alarms */
+    bcmos_bool tiwi;        /**< Auto deactivate ONU due to TIWi alarm */
+    bcmos_bool ack_timeout; /**< Auto deactivate ONU due to Ack timeout */
+    bcmos_bool sfi;         /**< Auto deactivate ONU due to SFi alarm */
+    bcmos_bool loki;        /**< Auto deactivate ONU due to Loki alarm */
+} bcmolt_automatic_onu_deactivation;
+
+/** TRX Resync pattern control. 
+ */
+typedef struct bcmolt_resync_control
+{
+    uint8_t start_pattern;      /**< start pattern. */
+    uint8_t middle_pattern;     /**< middle pattern. */
+    uint8_t last_pattern;       /**< last pattern. */
+    uint8_t middle_repetition;  /**< middle repetition. */
+    uint8_t location;           /**< location. */
+} bcmolt_resync_control;
+
+/** BCDR resync pattern configuration. 
+ */
+typedef struct bcmolt_bcdr_resync_pattern_configuration
+{
+    bcmolt_resync_control resync_control;           /**< resync control. */
+    bcmolt_resync_control ranging_resync_control;   /**< ranging resync control. */
+} bcmolt_bcdr_resync_pattern_configuration;
+
+/** BER monitoring parameters. 
+ */
+typedef struct bcmolt_ber_monitor_params
+{
+    uint32_t us_ber_interval;   /**< Interval in milliseconds for upstream BER monitoring (0 = disabled). */
+    uint8_t sf_threshold;       /**< Signal fail alarm is raised when BER raises to 10^-x, where x is this number. */
+    uint8_t sd_threshold;       /**< Signal degrade alarm is raised when BER raises to 10^-x, where x is this number. */
+} bcmolt_ber_monitor_params;
+
+/** CBR RT Allocation profile. 
+ */
+typedef struct bcmolt_cbr_rt_allocation_profile
+{
+    uint16_t ma_7;  /**< CBA maximum allocation size for frame gap 7 */
+    uint16_t ma_3;  /**< CBA maximum allocation size for frame gap 3 */
+    uint16_t ma_1;  /**< CBA maximum allocation size for frame gap 1 */
+} bcmolt_cbr_rt_allocation_profile;
+
+/** Results of the DDR test 
+ */
+typedef struct bcmolt_ddr_test_completed
+{
+    bcmolt_ddr_test_status status;  /**< Outcome of the DDR test */
+    union
+    {
+        struct
+        {
+            bcmolt_ddr_test_result cpu_result;          /**< CPU Result. */
+            bcmolt_ddr_test_result ras_0_result;        /**< RAS 0 Result. */
+            bcmolt_ddr_test_result ras_1_result;        /**< RAS 1 Result. */
+        } completed;
+
+        struct
+        {
+            bcmolt_host_connection_fail_reason reason;  /**< Connection fail reason. */
+        } connection_failed;
+    } u;
+} bcmolt_ddr_test_completed;
+
+/** Debug parameters for device configuration 
+ */
+typedef struct bcmolt_debug_device_cfg
+{
+    uint16_t host_dma_rx_queue_size;            /**< RX Queue size of the host DMA     */
+    uint16_t host_dma_tx_queue_size;            /**< TX Queue size of the host DMA     */
+    bcmos_bool avs_control;                     /**< AVS control. */
+    bcmos_bool use_prev_pon_serdes_firmware;    /**< This is a fallback option if there are issues with the new firmware */
+    bcmos_bool use_prev_nni_serdes_firmware;    /**< This is a fallback option if there are issues with the new firmware */
+} bcmolt_debug_device_cfg;
+
+/** Device NNI Speed. 
+ */
+typedef struct bcmolt_device_nni_speed
+{
+    bcmolt_nni_speed first_half;    /**< Interface speed for the first half of the NNI ports on the system. */
+    bcmolt_nni_speed second_half;   /**< Interface speed for the second half of the NNI ports on the system. */
+} bcmolt_device_nni_speed;
+
+/* \cond UNDOCUMENTED_SYMBOLS */
+
+/** Dummy Struct For Embedded Types. 
+ */
+typedef struct bcmolt_dummy_struct_for_embedded_types
+{
+    bcmolt_aggregation_domain ad;               /**< ad. */
+    bcmolt_epon_top et;                         /**< et. */
+    bcmolt_epm_lim_global elg;                  /**< elg. */
+    bcmolt_dba_port dba_port;                   /**< dba port. */
+    bcmolt_drv_sgb_id sgb;                      /**< sgb. */
+    bcmolt_drv_icf_id icf;                      /**< icf. */
+    bcmolt_tfb_trap_behavior tfb_trap_behavior; /**< tfb trap behavior. */
+    bcmolt_tfb_mode tfb_mode;                   /**< tfb mode. */
+    bcmolt_lim_sec_mode_up lim_sec_mode_up;     /**< lim sec mode up. */
+    bcmolt_lim_sec_mode_dn lim_sec_mode_dn;     /**< lim sec mode dn. */
+    bcmolt_xim_sec_mode xim_sec_mode;           /**< xim sec mode. */
+    bcmolt_dba_ram dba_ram;                     /**< dba ram. */
+    bcmolt_hsc_ram hsc_ram;                     /**< hsc ram. */
+    bcmolt_lim_ram lim_ram;                     /**< lim ram. */
+    bcmolt_lky_ram lky_ram;                     /**< lky ram. */
+    bcmolt_mic_ram mic_ram;                     /**< mic ram. */
+    bcmolt_xpcsrm_ram xpcs_ram;                 /**< xpcs ram. */
+    bcmolt_xg2g_id xg2g_id;                     /**< xg2g id. */
+} bcmolt_dummy_struct_for_embedded_types;
+
+/* \endcond */
+
+/** Embedded image entry. 
+ */
+typedef struct bcmolt_embedded_image_entry
+{
+    bcmolt_device_image_type image_type;    /**< Type of the embedded file image. */
+    uint32_t image_size;                    /**< Size of the embedded file image.  Unit is bytes. */
+    uint32_t crc32; /**< CRC 32 checksum of entire file image data. */
+    bcmolt_embedded_image_transfer_status status;   /**< Image transfer status. */
+    char image_name[64];    /**< Name of the file image.  Null-terminated string.  This is required for the DPoE ONU only.  DPoE requires the write request OAM contains the name of the file. */
+} bcmolt_embedded_image_entry;
+
+/** Variable-length list of embedded_image_entry. 
+ */
+typedef struct bcmolt_embedded_image_entry_list_u8
+{
+    uint8_t len;                        /**< List length. */
+    bcmolt_embedded_image_entry *val;   /**< List contents. */
+} bcmolt_embedded_image_entry_list_u8;
+
+/** Encryption_information_container. 
+ */
+typedef struct bcmolt_encryption_information_container
+{
+    bcmolt_epon_encryption_information_format format;   /**< Format. */
+    union
+    {
+        struct
+        {
+            uint8_t key[16];    /**< Key. */
+        } cfb;
+
+        struct
+        {
+            uint8_t key[16];    /**< Key. */
+            uint8_t sci[8];     /**< SCI. */
+        } ctr;
+    } u;
+} bcmolt_encryption_information_container;
+
+/** EPON clock transport configuration 
+ */
+typedef struct bcmolt_epon_clock_transport_configuration
+{
+    bcmolt_epon_clock_transport_mode epon_clock_transport_mode; /**< Clock Transport mode on this OLT PON Port. */
+} bcmolt_epon_clock_transport_configuration;
+
+/** Data of unknown link, including rate and alarm status 
+ */
+typedef struct bcmolt_unknown_link_status
+{
+    bcmolt_epon_link_rate link_rate;    /**< The rate of the unknown link */
+    bcmolt_status alarm_status;         /**< Whether the unknown link alarm is raised or cleared. */
+} bcmolt_unknown_link_status;
+
+/** Data of laser on/off violating link, including attempted laser on time, 
+ * attempted laser off time, and alarm status. 
+ */
+typedef struct bcmolt_laser_on_off_status
+{
+    bcmolt_time_quanta laser_on_time;   /**< The laser on time of the ONU that is violating. */
+    bcmolt_time_quanta laser_off_time;  /**< The laser off time of the ONU that is violating. */
+    bcmolt_status alarm_status;         /**< Whether the laser on/off violation alarm is raised or cleared. */
+} bcmolt_laser_on_off_status;
+
+/** Data of range violating link, including the range it attempted to use, and 
+ * alarm status. 
+ */
+typedef struct bcmolt_range_status
+{
+    bcmolt_time_quanta range;   /**< The range that the violating link attempted to register at. */
+    bcmolt_status alarm_status; /**< Whether the range violation alarm is raised or cleared. */
+} bcmolt_range_status;
+
+/** Details of Suspected Rogue ONU provided in Denied Link Alarm 
+ */
+typedef struct bcmolt_rogue_status
+{
+    bcmolt_epon_llid denied_llid;       /**< LLID. */
+    bcmolt_time_quanta denied_range;    /**< ONU Range. */
+    bcmolt_status alarm_status;         /**< Alarm State. */
+} bcmolt_rogue_status;
+
+/** The state of all alarms on an EPON Denied Link. 
+ */
+typedef struct bcmolt_epon_denied_link_alarm_state
+{
+    bcmolt_unknown_link_status unknown_link_violation;  /**< Unknown Link Violation. */
+    bcmolt_status overhead_profile_violation;           /**< Overhead Profile Violation. */
+    bcmolt_status max_link_violation;                   /**< Max Link Violation. */
+    bcmolt_status llid_pool_empty_violation;            /**< LLID Pool Empty Violation. */
+    bcmolt_laser_on_off_status laser_on_off_violation;  /**< Laser On/Off Violation. */
+    bcmolt_status system_resource_violation;            /**< System Resource Violation. */
+    bcmolt_range_status range_violation;                /**< Range Violation. */
+    bcmolt_status tdm_channels_exhausted;               /**< TDM Channels Exhausted. */
+    bcmolt_rogue_status rogue_violation;                /**< Rogue ONU Violation. */
+    bcmolt_status upstream_bandwidth_violation;         /**< Upstream Bandwidth Violation. */
+} bcmolt_epon_denied_link_alarm_state;
+
+/** Keys and mode for encrypting the EPON logical link. 
+ */
+typedef struct bcmolt_epon_encryption_config
+{
+    bcmolt_epon_encryption_mode downstream_mode;    /**< Downstream Mode. */
+    bcmolt_epon_key_choice downstream_key_choice;   /**< Downstream Key Choice. */
+    bcmolt_encryption_information_container downstream_encryption_information;  /**< Downstream Encryption Information. */
+    bcmolt_epon_encryption_mode upstream_mode;  /**< Upstream Mode. */
+    bcmolt_epon_key_choice upstream_key_choice; /**< Upstream Key Choice. */
+    bcmolt_encryption_information_container upstream_encryption_information;    /**< Upstream Encryption Information. */
+} bcmolt_epon_encryption_config;
+
+/** Key exchange configuration that applies to the EPON link. 
+ */
+typedef struct bcmolt_epon_key_exchange_config
+{
+    bcmolt_epon_oam_type oam_type;              /**< The type of OAM that is sent to start the key exchange. */
+    uint16_t period;                            /**< Key exchange period in seconds.  0 means disable encryption. */
+    bcmolt_epon_encryption_direction direction; /**< Encryption direction: Downstream only or Bi-directional. */
+} bcmolt_epon_key_exchange_config;
+
+/** EPON laser overhead parameters. (Laser On and Laser Off times) 
+ */
+typedef struct bcmolt_epon_laser_overhead_parameters
+{
+    bcmolt_time_quanta laser_on_time;   /**< Number of time quanta to allow for ONUs' laser-on transition. */
+    bcmolt_time_quanta laser_off_time;  /**< Number of time quanta to allow for ONUs' laser-off transition. */
+} bcmolt_epon_laser_overhead_parameters;
+
+/** The state of all alarms on an EPON Link. 
+ */
+typedef struct bcmolt_epon_link_alarm_state
+{
+    bcmolt_status key_exchange_failure;         /**< Key Exchange Failure. */
+    bcmolt_status invalid_mpcp_report_received; /**< Invalid MPCP Report Received. */
+    bcmolt_status mpcp_report_timeout;          /**< MPCP Report Timeout. */
+    bcmolt_status oam_keepalive_timeout;        /**< OAM Keepalive Timeout. */
+} bcmolt_epon_link_alarm_state;
+
+/** Downstream and upstream FEC enable state for an EPON link. 
+ */
+typedef struct bcmolt_epon_link_fec_en
+{
+    bcmolt_epon_link_fec_state upstream;    /**< FEC enable state for upstream path. */
+    bcmolt_epon_link_fec_state downstream;  /**< FEC enable state for downstream path. */
+} bcmolt_epon_link_fec_en;
+
+/** EPON logical link. 
+ */
+typedef struct bcmolt_epon_link_info
+{
+    bcmolt_epon_link_status link_status;            /**< Link status flags. */
+    bcmolt_epon_link_rate rate;                     /**< The rate at which the link operates. */
+    bcmolt_epon_llid llid;                          /**< The LLID of the link. */
+    bcmolt_mpcp_discovery_info mpcp_discovery_info; /**< Flags from MPCP discovery. */
+    bcmolt_time_quanta onu_laser_on_time_tq;        /**< Laser on time reported by ONU.  This is set to 0 for 1G/1G links as 1G MPCP does not include this field. */
+    bcmolt_time_quanta onu_laser_off_time_tq;       /**< Laser off time reported by ONU. */
+    uint8_t pending_grants;             /**< The number of pending grants. */
+    bcmolt_time_quanta range_value_tq;  /**< The link's range value in TQ. */
+    bcmolt_epon_tunnel_id tunnel_id;    /**< The tunnel ID to use when sending traffic to the link. */
+} bcmolt_epon_link_info;
+
+/** Gate parameters. 
+ */
+typedef struct bcmolt_gate_parameters
+{
+    bcmolt_mpcp_registration_gate_flags flags;  /**< Flags to set for this gate. */
+    uint32_t delay_before_ms;                   /**< Delay before sending this gate in milliseconds. */
+    bcmolt_time_quanta gate_size_tq;            /**< Size of this gate in time quanta. */
+} bcmolt_gate_parameters;
+
+/** Variable-length list of gate_parameters. 
+ */
+typedef struct bcmolt_gate_parameters_list_u32
+{
+    uint32_t len;                   /**< List length. */
+    bcmolt_gate_parameters *val;    /**< List contents. */
+} bcmolt_gate_parameters_list_u32;
+
+/** Specification of the EPON gate mode and associated parameters. 
+ */
+typedef struct bcmolt_epon_registration_gate_mode
+{
+    bcmolt_mpcp_gate_mode registration_gate_mode;   /**< MPCP registration gate mode. */
+    union
+    {
+        struct
+        {
+            uint16_t reg_ack_timeout_ms;            /**< Amount of time to wait for a link to respond with a register ack after a register is sent. */
+        } teknovus;
+
+        struct
+        {
+            bcmolt_gate_parameters_list_u32 gates;  /**< Gates to send for REG ACK. */
+        } custom;
+    } u;
+} bcmolt_epon_registration_gate_mode;
+
+/** Configuration related to EPON logical link registration and reporting. 
+ */
+typedef struct bcmolt_epon_logical_link_options
+{
+    bcmolt_epon_registration_gate_mode registration_gate_mode;  /**< EPON registration gate mode. */
+    bcmolt_epon_dba_reporting_mode reporting_mode;              /**< Control for how the DBA handles received MPCP report frames. */
+    uint16_t max_links; /**< Maximum number of links to register on the EPON NI.  A value of zero indicates no fixed limit. This is an aggregate limit on the number of non-system links on a PON. This limit applies to both registered and non-registered links. This value cannot be reduced below the count of links currently allocated, nor is it valid to increase it above the sum of the per RP mac_links limits. */
+} bcmolt_epon_logical_link_options;
+
+/** The list of alarms defined for an EPON NI 
+ */
+typedef struct bcmolt_epon_ni_alarm_state
+{
+    bcmolt_status no_reports;   /**< No Reports. */
+} bcmolt_epon_ni_alarm_state;
+
+/** Encryption configuration that applies to the EPON NI as a whole. 
+ */
+typedef struct bcmolt_epon_ni_encryption_cfg
+{
+    bcmolt_epon_encryption_mode downstream_encryption_mode; /**< Downstream encryption mode. */
+    bcmolt_epon_encryption_mode upstream_encryption_mode;   /**< Upstream encryption mode. */
+} bcmolt_epon_ni_encryption_cfg;
+
+/** EPON ONU Upgrade Parameters. 
+ */
+typedef struct bcmolt_epon_onu_upgrade_params
+{
+    bcmolt_epon_oam_extension_type oam_extension_type;  /**< OAM Extension Type. */
+    union
+    {
+        struct
+        {
+            uint32_t response_timeout_ms;               /**< The length of time that the OLT will wait for the ONU to respond. */
+        } broadcom;
+
+        struct
+        {
+            uint32_t response_timeout_ms;               /**< The length of time that the OLT will wait for the ONU to respond. */
+        } ctc;
+
+        struct
+        {
+            uint32_t response_timeout_ms;               /**< The length of time that the OLT will wait for the ONU to respond. */
+        } dasan;
+
+        struct
+        {
+            uint32_t response_timeout_ms;               /**< The length of time that the OLT will wait for the ONU to respond. */
+        } kt;
+
+        struct
+        {
+            uint32_t response_timeout_ms;               /**< The length of time that the OLT will wait for the ONU to respond. */
+            uint16_t block_size;                        /**< Number of byte per data block. */
+            uint32_t final_ack_response_timeout;        /**< Timeout for the final ACK response.  The DPoE standard 1.0 specifies this should be at least 15 seconds.  Unit is seconds. */
+        } dpoe;
+    } u;
+} bcmolt_epon_onu_upgrade_params;
+
+/** EPON ONU Upgrade Status. 
+ */
+typedef struct bcmolt_epon_onu_upgrade_status
+{
+    bcmos_mac_address onu_id;                       /**< ONU ID. */
+    bcmolt_epon_onu_upgrade_return_code error_code; /**< Upgrade status. */
+    bcmolt_epon_onu_upgrade_onu_response_code onu_return_code;  /**< Response code from the ONU. */
+} bcmolt_epon_onu_upgrade_status;
+
+/** Variable-length list of epon_onu_upgrade_status. 
+ */
+typedef struct bcmolt_epon_onu_upgrade_status_list_u32
+{
+    uint32_t len;   /**< List length. */
+    bcmolt_epon_onu_upgrade_status *val;    /**< List contents. */
+} bcmolt_epon_onu_upgrade_status_list_u32;
+
+/** EPON protection switching configuration 
+ */
+typedef struct bcmolt_epon_protection_switching_configuration
+{
+    bcmolt_epon_protection_switching_type protection_type;  /**< Protection scheme. */
+    bcmolt_protection_switching_detection_options protection_switching_options; /**< Protection switching options. */
+    bcmolt_epon_protection_switching_reranging_options rerange_options;         /**< Re-ranging algorithm selection */
+    uint8_t rerange_attempts;                   /**< Number of times to re range during a switch */
+    uint16_t rerange_interval;                  /**< Interval between re-range attempts. */
+    uint16_t sync_gate_duration;                /**< Duration of sync gate. */
+    bcmolt_gpio_pin gpio_input;                 /**< Configures state on PON (working/standby) */
+    bcmolt_gpio_polarity gpio_input_polarity;   /**< GPIO Input Polarity. */
+    bcmolt_gpio_pin gpio_output;                /**< Indicates state on PON (working/standby) */
+    bcmolt_gpio_polarity gpio_output_polarity;  /**< GPIO Output Polarity. */
+} bcmolt_epon_protection_switching_configuration;
+
+/** Variable-length list of U8. 
+ */
+typedef struct bcmolt_u8_list_u16
+{
+    uint16_t len;   /**< List length. */
+    uint8_t *val;   /**< List contents. */
+} bcmolt_u8_list_u16;
+
+/** A template for an Ethernet frame of some fixed length, accompanied by a mask 
+ * vector of equal size.  When used in the context of frame transmission, the 
+ * mask vector distinguishes bit regions of the template that should be 
+ * transmitted verbatim (e.g. the content of an OAM message) from bit regions 
+ * that should be filled in farther along the data path (e.g. Ethernet source 
+ * or destination addresses).  When used in the context of frame reception, the 
+ * mask vector distinguishes bit regions of the template that are to be 
+ * compared with received frames (e.g. flags within OAM heartbeat messages 
+ * received from ONUs) from "don't care" bit regions (e.g. Ethernet source 
+ * addresses from those same messages).  
+ */
+typedef struct bcmolt_ethernet_frame_masked
+{
+    bcmolt_u8_list_u16 frame_octets;    /**< A complete Ethernet frame.  For every zero bit in the mask_octets */
+    bcmolt_u8_list_u16 mask_octets;     /**< A bit vector of the same length as frame_octets. */
+} bcmolt_ethernet_frame_masked;
+
+/** A complete Ethernet frame, beginning with the DA (layer 2 destination 
+ * address) and ending just before the FCS (frame check sequence).  In contrast 
+ * to `masked Ethernet frames,' which see, unmasked Ethernet frames are 
+ * transmitted or interpreted/relayed verbatim.  
+ */
+typedef struct bcmolt_ethernet_frame_unmasked
+{
+    bcmolt_u8_list_u16 frame_octets;    /**< Complete content of the Ethernet frame, beginning with the DA (layer 2 destination */
+} bcmolt_ethernet_frame_unmasked;
+
+/** Extended Guard Time. 
+ */
+typedef struct bcmolt_extended_guard_time
+{
+    uint32_t additional_preburst_guard_time;    /**< Additional guard time (in bytes) before all bursts for this ONU. */
+    uint32_t additional_postburst_guard_time;   /**< Additional guard time (in bytes) after all bursts for this ONU. */
+} bcmolt_extended_guard_time;
+
+/** Firmware SW Version 
+ */
+typedef struct bcmolt_firmware_sw_version
+{
+    uint8_t major;          /**< Major . */
+    uint8_t minor;          /**< Minor. */
+    uint8_t revision;       /**< Revision. */
+    uint32_t model;         /**< Model. */
+    char build_time[32];    /**< Firmware SW build time */
+} bcmolt_firmware_sw_version;
+
+/** GEM port configuration. 
+ */
+typedef struct bcmolt_gem_port_configuration
+{
+    bcmolt_gem_port_direction direction;    /**< GEM port direction */
+    bcmolt_gem_port_type type;              /**< GEM port type */
+} bcmolt_gem_port_configuration;
+
+/** GPON Alloc With State. 
+ */
+typedef struct bcmolt_gpon_alloc_with_state
+{
+    bcmolt_gpon_alloc_id alloc_id;  /**< Alloc ID. */
+    bcmolt_alloc_state state;       /**< State. */
+} bcmolt_gpon_alloc_with_state;
+
+/** Variable-length list of gpon_alloc_with_state. 
+ */
+typedef struct bcmolt_gpon_alloc_with_state_list_u16_max_32
+{
+    uint16_t len;                       /**< List length. */
+    bcmolt_gpon_alloc_with_state *val;  /**< List contents. */
+} bcmolt_gpon_alloc_with_state_list_u16_max_32;
+
+/** GPON Debug Flow Config. 
+ */
+typedef struct bcmolt_gpon_debug_flow_config
+{
+    bcmolt_control_state untagged_flow; /**< If enabled, this GEM port will expect upstream traffic to be untagged and downstream traffic to use a custom VLAN tag. */
+    bcmolt_vlan_id untagged_vid;        /**< The VLAN ID to use when adding MAC table entries for untagged traffic. */
+} bcmolt_gpon_debug_flow_config;
+
+/** Variable-length list of gpon_gem_id. 
+ */
+typedef struct bcmolt_gpon_gem_id_list_u8_max_16
+{
+    uint8_t len;                /**< List length. */
+    bcmolt_gpon_gem_id *val;    /**< List contents. */
+} bcmolt_gpon_gem_id_list_u8_max_16;
+
+/** GPON GEM Port With State. 
+ */
+typedef struct bcmolt_gpon_gem_port_with_state
+{
+    bcmolt_gpon_gem_id gem_id;          /**< GEM ID. */
+    bcmolt_gpon_gem_port_state state;   /**< State. */
+} bcmolt_gpon_gem_port_with_state;
+
+/** Variable-length list of gpon_gem_port_with_state. 
+ */
+typedef struct bcmolt_gpon_gem_port_with_state_list_u16_max_128
+{
+    uint16_t len;   /**< List length. */
+    bcmolt_gpon_gem_port_with_state *val;   /**< List contents. */
+} bcmolt_gpon_gem_port_with_state_list_u16_max_128;
+
+/** Variable-length list of gpon_gem_port_with_state. 
+ */
+typedef struct bcmolt_gpon_gem_port_with_state_list_u16_max_256
+{
+    uint16_t len;   /**< List length. */
+    bcmolt_gpon_gem_port_with_state *val;   /**< List contents. */
+} bcmolt_gpon_gem_port_with_state_list_u16_max_256;
+
+/** Options for configuring the "untagged flow" feature. 
+ */
+typedef struct bcmolt_gpon_iwf_debug_flow_config
+{
+    bcmos_bool learn_untagged_flow_vids;        /**< When a MAC/VID is learned on an untagged flow, learn the received MAC address with both the untagged VID and the received VID (even though it will be invalid). */
+    uint16_t untagged_flow_shaping_ms_per_sec;  /**< If this value is greater than 0, learning events on untagged flows will only be enabled for N milliseconds every second.  For example, a value of 10 would mean learning is only enabled for 1% of the total time. */
+} bcmolt_gpon_iwf_debug_flow_config;
+
+/** GPON Key Exchange . 
+ */
+typedef struct bcmolt_gpon_key_exchange
+{
+    uint32_t interval;              /**< Key Exchange process interval in milliseconds */
+    bcmolt_control_state control;   /**< Enable\disable periodic process of Key Exchange for active ONUs */
+    bcmolt_key_exchange_mode mode;  /**< Key exchange mode */
+    bcmolt_control_state encrypted_ports_only;  /**< Perform key exchange only to ONUs with GEM ports that have downstream encryption enabled */
+} bcmolt_gpon_key_exchange;
+
+/** GPON MAC table scan result for a single MAC table entry. 
+ */
+typedef struct bcmolt_gpon_mac_table_scan_result
+{
+    bcmolt_vlan_id vlan;            /**< The VLAN ID of the entry. */
+    bcmolt_flow_id flow_id;         /**< The flow ID assigned to traffic that matches this MAC table entry. */
+    bcmos_bool stat;                /**< Whether or not the MAC entry is static.  Static entries don't age. */
+    bcmolt_gpon_gem_id gem_port_id; /**< The GEM port ID of the traffic that created this table entry.  This only applies to automatically-learned entries.  Manually-added entries will have the value BCMOLT_PON_GEM_PORT_ID_INVALID. */
+    bcmolt_gpon_onu_id onu_id;      /**< The ONU ID for the traffic that created this table entry.  This only valid if gem_port_id is valid.  Otherwise this will be set to BCMOLT_GPON_ONU_ID_INVALID. */
+} bcmolt_gpon_mac_table_scan_result;
+
+/** Variable-length list of gpon_mac_table_scan_result. 
+ */
+typedef struct bcmolt_gpon_mac_table_scan_result_list_u16
+{
+    uint16_t len;   /**< List length. */
+    bcmolt_gpon_mac_table_scan_result *val; /**< List contents. */
+} bcmolt_gpon_mac_table_scan_result_list_u16;
+
+/** GPON NI Debug parameters 
+ */
+typedef struct bcmolt_gpon_ni_debug
+{
+    uint16_t number_of_gem_ports_per_onu;   /**< Number of Gem ports per ONU */
+} bcmolt_gpon_ni_debug;
+
+/** GPON ONU activation. 
+ */
+typedef struct bcmolt_gpon_onu_activation
+{
+    bcmolt_control_state key_exchange;              /**< Perform single key exchange during activation. */
+    bcmolt_control_state password_authentication;   /**< Perform password authentication during activation */
+    bcmolt_control_state fail_due_to_password_authentication_failure;   /**< Deactivate ONU due to password authentication failure */
+} bcmolt_gpon_onu_activation;
+
+/** GPON ONU alarm status. 
+ */
+typedef struct bcmolt_gpon_onu_alarm_state
+{
+    bcmolt_status losi;     /**< Loss of signal. */
+    bcmolt_status lofi;     /**< Loss of frame. */
+    bcmolt_status loami;    /**< Loss of PLOAM. */
+    bcmolt_status dgi;      /**< Dying Gasp. */
+    bcmolt_status tiwi;     /**< Transmission interference Alarm. */
+    bcmolt_status dowi;     /**< Drift of Window. */
+    bcmolt_status sufi;     /**< Start UP Failure. */
+    bcmolt_status sfi;      /**< Signal Fail. */
+    bcmolt_status sdi;      /**< Signal Degraded. */
+    bcmolt_status dfi;      /**< Deactivation Failure. */
+    bcmolt_status loai;     /**< Loss of ack. */
+    bcmolt_status loki;     /**< loss of key. */
+} bcmolt_gpon_onu_alarm_state;
+
+/** GPON ONU alarms. 
+ */
+typedef struct bcmolt_gpon_onu_alarms
+{
+    bcmolt_status losi;     /**< LOSi. */
+    bcmolt_status lofi;     /**< LOFi. */
+    bcmolt_status loami;    /**< LOAMi. */
+} bcmolt_gpon_onu_alarms;
+
+/** GPON ONU alarms thresholds. 
+ */
+typedef struct bcmolt_gpon_onu_alarms_thresholds
+{
+    uint8_t losi;   /**< Threshold for asserting LOSi alarm */
+    uint8_t lofi;   /**< Threshold for asserting LOFi alarm */
+    uint8_t loami;  /**< Threshold for asserting LOAMi alarm */
+} bcmolt_gpon_onu_alarms_thresholds;
+
+/** GPON ONU EQD. 
+ */
+typedef struct bcmolt_gpon_onu_eqd
+{
+    bcmolt_gpon_onu_id onu_id;  /**< ONU ID. */
+    uint32_t eqd;               /**< EQD. */
+} bcmolt_gpon_onu_eqd;
+
+/** Variable-length list of gpon_onu_eqd. 
+ */
+typedef struct bcmolt_gpon_onu_eqd_list_u32
+{
+    uint32_t len;               /**< List length. */
+    bcmolt_gpon_onu_eqd *val;   /**< List contents. */
+} bcmolt_gpon_onu_eqd_list_u32;
+
+/** Variable-length list of gpon_onu_id. 
+ */
+typedef struct bcmolt_gpon_onu_id_list_u32_max_256
+{
+    uint32_t len;               /**< List length. */
+    bcmolt_gpon_onu_id *val;    /**< List contents. */
+} bcmolt_gpon_onu_id_list_u32_max_256;
+
+/** GPON ONU upgrade params. 
+ */
+typedef struct bcmolt_gpon_onu_upgrade_params
+{
+    uint32_t response_timeout_ms;       /**< The length of time that the OLT will wait for the ONU to respond. */
+    uint8_t max_retry_count;            /**< The number of retries. */
+    bcmolt_omci_device_id omci_format;  /**< Baseline (0x0A) or Extended (0x0B). */
+    uint16_t window_size;               /**< Number of sections per window. */
+    bcmos_bool activate_commit;         /**< Automatically activate the new image and commit. */
+    uint32_t delay_for_commit_ms;       /**< Delay time before COMMIT command.  Unit is milliseconds. */
+    uint8_t max_activation_attempts;    /**< Maximum number of re-attempts to activate the ONU. */
+} bcmolt_gpon_onu_upgrade_params;
+
+/** GPON ONU Upgrade Status. 
+ */
+typedef struct bcmolt_gpon_onu_upgrade_status
+{
+    bcmolt_pon_onu_id onu_id;   /**< ONU ID. */
+    bcmolt_gpon_onu_upgrade_return_code error_code; /**< Error Code. */
+    bcmolt_omci_result_code fail_reason;            /**< Failure reason specific to the Error Code above. */
+} bcmolt_gpon_onu_upgrade_status;
+
+/** Variable-length list of gpon_onu_upgrade_status. 
+ */
+typedef struct bcmolt_gpon_onu_upgrade_status_list_u32
+{
+    uint32_t len;   /**< List length. */
+    bcmolt_gpon_onu_upgrade_status *val;    /**< List contents. */
+} bcmolt_gpon_onu_upgrade_status_list_u32;
+
+/** GPON ONU With State. 
+ */
+typedef struct bcmolt_gpon_onu_with_state
+{
+    bcmolt_gpon_onu_id onu_id;  /**< ONU ID. */
+    bcmolt_onu_state state;     /**< State. */
+} bcmolt_gpon_onu_with_state;
+
+/** Variable-length list of gpon_onu_with_state. 
+ */
+typedef struct bcmolt_gpon_onu_with_state_list_u16_max_128
+{
+    uint16_t len;                       /**< List length. */
+    bcmolt_gpon_onu_with_state *val;    /**< List contents. */
+} bcmolt_gpon_onu_with_state_list_u16_max_128;
+
+/** gpon RSSI general configuration. 
+ */
+typedef struct bcmolt_gpon_rssi_general_configuration
+{
+    uint8_t location;   /**< the pattern activation location in clock cycles relative (before) to start of burst. */
+    bcmolt_rssi_location_sign location_sign;    /**< this bit determines whether the location of the RSSI in data mode (configured as RSSI pattern 1) will be before or after the burst start. */
+    uint8_t start_pattern;                      /**< the value of the first cycle of the pattern (will be transmitted once). */
+    uint8_t middle_pattern;                     /**< the value of the pattern that will be transmitted middle_repetition times between the start and the end of the pattern. */
+    uint8_t last_pattern;                       /**< the value of the last cycle of the pattern. will be transmitted once. */
+    uint8_t middle_repertition;                 /**< the number of times the middle pattern will be repeated. */
+    uint16_t minimum_burst;                     /**< the minimum burst size needed measurement */
+} bcmolt_gpon_rssi_general_configuration;
+
+/** GPON SN Acquisition. 
+ */
+typedef struct bcmolt_gpon_sn_acquisition
+{
+    uint32_t interval;              /**< SN process interval in milliseconds */
+    bcmolt_control_state control;   /**< SN process control */
+    bcmolt_onu_post_discovery_mode onu_post_discovery_mode; /**< Automatic operation following ONU discovery */
+} bcmolt_gpon_sn_acquisition;
+
+/** Host SW Version 
+ */
+typedef struct bcmolt_host_sw_version
+{
+    uint8_t major;          /**< Major . */
+    uint8_t minor;          /**< Minor. */
+    uint8_t revision;       /**< Revision. */
+    uint32_t model;         /**< Model. */
+    char build_time[32];    /**< Firmware SW build time */
+} bcmolt_host_sw_version;
+
+/** HW PON ID. 
+ */
+typedef struct bcmolt_hw_pon_id
+{
+    uint32_t pon_id_1;  /**< LSB 32 bits of PON ID. */
+    uint32_t pon_id_2;  /**< MSB 19 bits of PON ID. */
+} bcmolt_hw_pon_id;
+
+/** Port Identity used in IEEE 802.1as Clock Tranport. 
+ */
+typedef struct bcmolt_ieee_8021as_port_identity
+{
+    uint8_t clock_identity[8];  /**< Clock identity is a unique identifier used in IEEE 802.1as clock transport. */
+    uint16_t port_number;       /**< Port Number. */
+} bcmolt_ieee_8021as_port_identity;
+
+/** Timestamp used in IEEE 802.1as clock transport. 
+ */
+typedef struct bcmolt_ieee_8021as_timestamp
+{
+    uint16_t seconds_high;  /**< The high 16 bits of the 48 bit seconds field as required by IEEE. */
+    uint32_t seconds_low;   /**< The low 32 bts of the 48 bit seconds field as required by IEEE. */
+    uint32_t nanoseconds;   /**< The Nanoseconds part of the timestamp. */
+} bcmolt_ieee_8021as_timestamp;
+
+/** Full frame of the IEEE 802.1as time sync message used in clock transport. 
+ */
+typedef struct bcmolt_ieee_8021as_time_sync
+{
+    bcmos_mac_address destination_mac;  /**< Destination MAC Address. */
+    bcmos_mac_address source_mac;       /**< Source MAC Address. */
+    uint16_t eth_type_len;              /**< Type of Ethernet PDU. */
+    uint8_t eth_subtype;                /**< Slow protocol Subtype. */
+    uint8_t ieee_oui[3];                /**< IEEE OUI. */
+    uint16_t msg_id;                    /**< Message ID. */
+    uint32_t x; /**< Reference Time. */
+    bcmolt_ieee_8021as_timestamp tod;               /**< Time of day timestamp. */
+    bcmolt_ieee_8021as_port_identity port_identity; /**< Source port identity. */
+    int8_t log_msg_interval;                        /**< Log message interval (currently unused but required by spec). */
+    double rate_ratio;                  /**< Ratio of local second to grandmaster second. */
+    uint16_t gm_time_base_indicator;    /**< Grandmaster time base indicator (currently unused but required by spec). */
+    uint8_t last_gm_phase_change[12];   /**< Time of the current grandmaster minus the time of the previous grandmaster, in units of 2^-16 ns (currently unused but required by spec). */
+    int32_t last_frequency_change;      /**< Fractional frequency offset of the current grandmaster relative to the previous grandmaster (Not currently used but required by spec). */
+} bcmolt_ieee_8021as_time_sync;
+
+/** Rate limiting / shaping for the indication channel. 
+ */
+typedef struct bcmolt_indication_shaping
+{
+    bcmos_bool enabled; /**< Whether or not the device will limit the rate of indications sent to the host. */
+    uint32_t max_rate;  /**< Maximum number of indications per second to be generated by the device. */
+    uint32_t max_burst; /**< Maximum number of indications that are allowed to be sent back-to-back. */
+} bcmolt_indication_shaping;
+
+/** LA resync pattern configuration. 
+ */
+typedef struct bcmolt_la_resync_pattern_configuration
+{
+    bcmolt_resync_control resync_control;   /**< used in normal mode */
+    bcmolt_resync_control ranging_resync_control;   /**< used in ranging mode at the beginning of each ranging cycle */
+} bcmolt_la_resync_pattern_configuration;
+
+/** log buffer. 
+ */
+typedef struct bcmolt_log_buffer
+{
+    char buff[2048];        /**< buff. */
+    uint32_t msg_to_read;   /**< msg_to_read. */
+} bcmolt_log_buffer;
+
+/** MAC table configuration. 
+ */
+typedef struct bcmolt_mac_table_configuration
+{
+    bcmolt_mac_table_miss_fallback miss_fallback;   /**< Behavior for downstream traffic when MAC table lookup fails. */
+    bcmolt_flow_id default_flow_id;                 /**< Flow ID assigned to upstream traffic on a MAC table miss if miss_fallback is set to default_flow. */
+    uint32_t aging_time;    /**< Aging time in seconds.  If no traffic is seen for a given MAC address / VID for this length of time, the entry will age and the host will be notified via indication. */
+    bcmolt_mac_table_learning_mode learning_mode;   /**< Learning table mode. */
+    bcmolt_control_state automatic_mac_learning;    /**< If enabled, new MAC table entries are added automatically the first time a new MAC address/VID combination is seen.  If disabled, no actions are taken automatically except notifying the host via indication. */
+    bcmolt_control_state automatic_mac_aging;       /**< If enabled, MAC table entries are deleted automatically when they age.  If disabled, no actions are taken automatically except notifying the host via indication. */
+    bcmolt_control_state automatic_mac_move;        /**< Only applicable if learning_mode is move.  If enabled, MAC table entries are automatically updated when a MAC move condition is encountered.  If disabled, no actions are taken automatically except notifying the host via indication. */
+    bcmos_bool automatic_static_mode;               /**< If enabled, all MAC entries that are added automatically via automatic_mac_learning and automatic_mac_move will be treated as static (not aging). */
+} bcmolt_mac_table_configuration;
+
+/** Variable-length list of MacAddress. 
+ */
+typedef struct bcmolt_macaddress_list_u32
+{
+    uint32_t len;           /**< List length. */
+    bcmos_mac_address *val; /**< List contents. */
+} bcmolt_macaddress_list_u32;
+
+/** Variable-length list of MacAddress. 
+ */
+typedef struct bcmolt_macaddress_list_u32_max_2048
+{
+    uint32_t len;           /**< List length. */
+    bcmos_mac_address *val; /**< List contents. */
+} bcmolt_macaddress_list_u32_max_2048;
+
+/** NNI Link Status. 
+ */
+typedef struct bcmolt_nni_link_status
+{
+    bcmolt_trivalent link_status;       /**< The local and remote partners are abled and ready to transmit/receive traffic. */
+    bcmolt_trivalent signal_detected;   /**< Serdes controller has detected energy on the line.  debugging purpose. */
+    bcmolt_trivalent pmd_locked;        /**< Indicates PMD locked.  debugging purpose.  If this is true, but the links status is not, that means the transceiver is not enabled. */
+} bcmolt_nni_link_status;
+
+/** OAM heartbeat configuration 
+ */
+typedef struct bcmolt_oam_heartbeat_config
+{
+    uint16_t send_period;               /**< The period at which to send OAM info frames, and expect info responses on this link (in seconds). */
+    bcmolt_u8_list_u16 transmit_frame;  /**< The OAM PDU payload from the Flags field (offset 15) to the end of the PDU (before the FCS). */
+    bcmolt_ethernet_frame_masked ignored_receive_frame_template;    /**< OAM packets matching this masked payload will be dropped rather than forwarded to the host. */
+    uint16_t receive_timeout;       /**< The time (in seconds) to report OAM timeout after the last received OAM frame. */
+    uint16_t maximum_receive_size;  /**< Maximum size of received frames.  Setting this value to zero will cause all OAM frames to be dropped. */
+} bcmolt_oam_heartbeat_config;
+
+/** Configuration parameters for the ONU power management feature. These should 
+ * match the parameters sent to the ONU via OMCI. 
+ */
+typedef struct bcmolt_onu_power_management_configuration
+{
+    uint32_t ilowpower;         /**< The maximum amount of time any ONU on this NI may spend in a low power state in units of 125us. */
+    uint32_t iaware;            /**< The minimum amount of time every ONU on his NI must spend in an aware state in units of 125us. */
+    uint16_t itransinit;        /**< The maximum amount of time required by any ONU on this NI to power up its transmitter only from a low power state in units of 125us. */
+    uint16_t itxinit;           /**< The maximum amount of time required by any ONU on this NI to power up its transceiver (transmitter + receiver) from a low power state in units of 125us. */
+    uint32_t irxoff;            /**< The maximum amount of time any ONU on this NI may spend with its receiver disabled in units of 125us. */
+    uint16_t low_power_clobi;   /**< The number of consecutive non-contiguous missing allocations to allow before raising the LOSi/LOFi/LOBi alarms on any ONU on this NI. */
+} bcmolt_onu_power_management_configuration;
+
+/** onu tuning configuration. 
+ */
+typedef struct bcmolt_onu_tuning_configuration
+{
+    uint32_t tsource;   /**< Tsource timer in msec */
+    uint32_t ttarget;   /**< Ttarget timer in msec */
+    bcmos_bool request_registration_required;   /**< is request registration part of the tuning in process */
+} bcmolt_onu_tuning_configuration;
+
+/** Identifies the TWDM channel termination within a certain domain 
+ */
+typedef struct bcmolt_pon_id
+{
+    uint32_t administrative_label;  /**< MSB 28 bit of the PON ID */
+    uint8_t dwlch_id;               /**< LSB 4 bits of the PON ID */
+} bcmolt_pon_id;
+
+/** Operation Control 
+ */
+typedef struct bcmolt_operation_control
+{
+    uint8_t re;                 /**< Indicates whether the Transmit Optical Level (TOL) contains the launch power of the OTL (RE=0) or of a reach extender (RE=1) */
+    bcmolt_odn_class odn_class; /**< Identifies the nominal optical parameters of the transceiver according to the ODN Optical Path Loss (OPL) */
+    bcmolt_control_state ds_fec_mode;   /**< Enable/Disable the downstream FEC. Default is Enable. Attribute can be set only when PON NI state is Inactive. */
+    bcmolt_tc_protocol protocol;        /**< When system mode is NGPON2, this parameter Indicate the TC layer protocol: ITU-T G.989.3 or ITU-T G.987.3 */
+    bcmolt_link_type ds_link_type;      /**< Optical link type (Unspecified, A, B, Both) */
+    bcmolt_pon_id pon_id;               /**< Identifies the TWDM channel termination within a certain domain */
+    uint8_t c;  /**< Transmit optical level (TOL) reference point indicator: S/R-CG or S/R-CP */
+} bcmolt_operation_control;
+
+/** Periodic Standby PON monitoring. 
+ */
+typedef struct bcmolt_periodic_standby_pon_monitoring
+{
+    uint32_t interval;              /**< interval in ms. */
+    bcmolt_control_state control;   /**< control. */
+} bcmolt_periodic_standby_pon_monitoring;
+
+/** Port Level Shaper Configuration:. 
+ */
+typedef struct bcmolt_pon_aggregate_shaper
+{
+    uint32_t bandwidth_kbps;    /**< Rate in kbps, 0 is disabled, If rate is >1G then use 256kbps increments, if rate is < 1G then use 64kbps increments.  */
+    uint32_t mbs_kB;            /**< Maximum Burst Size in KB : range is 2KB to 4MB in 1KB increments.  */
+} bcmolt_pon_aggregate_shaper;
+
+/** PON Alloc SLA. 
+ */
+typedef struct bcmolt_pon_alloc_sla
+{
+    uint32_t cbr_rt_bw;     /**< CBR Real Time Bandwidth which require shaping of the bandwidth allocations in a fine granularity.  */
+    uint32_t cbr_nrt_bw;    /**< Fixed Bandwidth with no critical requirement of shaping */
+    uint32_t guaranteed_bw; /**< Dynamic bandwidth which the OLT is committed to allocate upon demand */
+    uint32_t maximum_bw;    /**< Maximum allocated bandwidth allowed for this alloc ID */
+    bcmolt_additional_bw_eligibility additional_bw_eligibility; /**< Alloc ID additional BW eligibility */
+    bcmos_bool cbr_rt_compensation; /**< Set to True for AllocID with CBR RT Bandwidth that requires compensation for skipped allocations during quiet window */
+    uint8_t cbr_rt_ap_index;        /**< Allocation Profile index for CBR RT Bandwidth */
+    uint8_t cbr_nrt_ap_index;       /**< Allocation Profile index for CBR non-RT Bandwidth */
+    bcmolt_alloc_type alloc_type;   /**< Type of the alloc ID  */
+    uint8_t weight;                 /**< Alloc ID Weight used in case of Extended DBA mode */
+    uint8_t priority;               /**< Alloc ID Priority used in case of Extended DBA mode */
+} bcmolt_pon_alloc_sla;
+
+/** PON available bandwidth. 
+ */
+typedef struct bcmolt_pon_available_bandwidth
+{
+    uint32_t cbr_bw;            /**< Total BW available for CBR real-time traffic (bytes/sec). */
+    uint32_t total_bw;          /**< Total BW available for guaranteed traffic (bytes/sec) */
+    uint32_t next_onu_total_bw; /**< Total BW available for guaranteed traffic after new ONU is added (bytes/sec). */
+} bcmolt_pon_available_bandwidth;
+
+/** PON DBA. 
+ */
+typedef struct bcmolt_pon_dba
+{
+    uint8_t sr_reporting_block_size;    /**< ONU status report block size in bytes */
+    bcmolt_dba_mode dba_mode;           /**< DBA mode */
+} bcmolt_pon_dba;
+
+/** PON Distance. 
+ */
+typedef struct bcmolt_pon_distance
+{
+    uint32_t max_log_distance;  /**< Max logical distance of an ONU on the PON */
+    uint32_t max_diff_reach;    /**< Max distance between the closest and farthest ONU */
+} bcmolt_pon_distance;
+
+/** PON Drift Control. 
+ */
+typedef struct bcmolt_pon_drift_control
+{
+    uint32_t drift_interval;            /**< Interval in milliseconds for ONU transmission drift monitoring (0 = disabled). */
+    uint8_t drift_limit;                /**< DOWi threshold in bits */
+    uint8_t transmission_control_limit; /**< TIWi threshold in bits */
+} bcmolt_pon_drift_control;
+
+/** Variable-length list of pon_onu_id. 
+ */
+typedef struct bcmolt_pon_onu_id_list_u32
+{
+    uint32_t len;           /**< List length. */
+    bcmolt_pon_onu_id *val; /**< List contents. */
+} bcmolt_pon_onu_id_list_u32;
+
+/** PON Power Level. 
+ */
+typedef struct bcmolt_pon_power_level
+{
+    uint32_t pls_maximum_allocation_size;   /**< Max allocation size for PLS transmission */
+    uint8_t mode;   /**< ONU default power level mode */
+} bcmolt_pon_power_level;
+
+/** GPON protection switching configuration. 
+ */
+typedef struct bcmolt_pon_protection_switching
+{
+    uint16_t timeout;           /**< LOS switch over timeout in milliseconds */
+    bcmolt_gpio_pin gpio_pin;   /**< GPIO pin for input/output signal */
+    bcmolt_pon_protection_switching_options options;    /**< Options to control the protection switching process */
+} bcmolt_pon_protection_switching;
+
+/** PON Status. 
+ */
+typedef struct bcmolt_pon_status
+{
+    bcmolt_pon_state state;     /**< state. */
+    bcmolt_status los_status;   /**< LOS status. */
+} bcmolt_pon_status;
+
+/** PRBS checker config. 
+ */
+typedef struct bcmolt_prbs_checker_config
+{
+    bcmolt_prbs_polynomial polynom; /**< PRBS polynom type */
+    bcmolt_prbs_checker_mode mode;  /**< PRBS LOCK state machine. */
+    bcmos_bool data_invert;         /**< Invert or no invert for received PRBS data */
+    bcmolt_control_state control;   /**< Enable\Disable the US PRBS checker */
+} bcmolt_prbs_checker_config;
+
+/** PRBS Generator config. 
+ */
+typedef struct bcmolt_prbs_generator_config
+{
+    bcmolt_prbs_polynomial polynom; /**< PRBS polynom type */
+    bcmos_bool error_insert;        /**< 0 to 1 transition on this signal will insert single bit error in the MSB bit of the data bus. */
+    bcmos_bool invert;              /**< Invert or no invert for transmitted PRBS data */
+    bcmolt_control_state control;   /**< Enable\Disable the DS PRBS generator */
+} bcmolt_prbs_generator_config;
+
+/** That state of the PRBS test, lock state, and error counters. 
+ */
+typedef struct bcmolt_prbs_status
+{
+    bcmolt_prbs_lock_state lock_state;  /**< The state of the PRBS lock */
+    uint32_t error_counts;              /**< The bit errors observed during the PRBS test.  This field is clear on read. */
+} bcmolt_prbs_status;
+
+/** ranging control configuration. 
+ */
+typedef struct bcmolt_ranging_control_configuration
+{
+    uint8_t wait_state_1_window_size;   /**< wait state 1 window size. */
+    uint8_t wait_state_2_window_size;   /**< wait state 2 window size. */
+    bcmos_bool wait_after_resync_4;     /**< wait after resync 4. */
+} bcmolt_ranging_control_configuration;
+
+/** ranging resync conditions. 
+ */
+typedef struct bcmolt_ranging_resync_conditions
+{
+    bcmos_bool after_init;              /**< after init. */
+    bcmos_bool after_no_ed;             /**< after no ed. */
+    bcmos_bool after_ed;                /**< after ed. */
+    bcmos_bool after_no_del;            /**< after no del. */
+    bcmos_bool after_ranging_access;    /**< after ranging access. */
+    uint16_t med_val;                   /**< med val. */
+} bcmolt_ranging_resync_conditions;
+
+/** ranging rssi control. 
+ */
+typedef struct bcmolt_ranging_rssi_control
+{
+    bcmos_bool after_no_ed;     /**< after no ed. */
+    bcmos_bool after_ed;        /**< after ed. */
+    bcmos_bool after_reset_3;   /**< after reset 3. */
+} bcmolt_ranging_rssi_control;
+
+/** request registration status. 
+ */
+typedef struct bcmolt_request_registration_status
+{
+    bcmolt_control_state request_registration_state;    /**< request registration state. */
+    bcmos_bool sma_flag;    /**< is request registration is part of sma process */
+} bcmolt_request_registration_status;
+
+/** Rogue Detection Special Map. 
+ */
+typedef struct bcmolt_rogue_detection_special_map
+{
+    uint32_t plo_size;              /**< PLO size. */
+    bcmolt_pon_alloc_id alloc_id;   /**< Alloc ID. */
+    bcmolt_pon_onu_id onu_id;       /**< ONU ID. */
+    uint8_t access_size;            /**< Access size. */
+} bcmolt_rogue_detection_special_map;
+
+/** Variable-length list of rogue_detection_special_map. 
+ */
+typedef struct bcmolt_rogue_detection_special_map_list_u32_max_8
+{
+    uint32_t len;   /**< List length. */
+    bcmolt_rogue_detection_special_map *val;    /**< List contents. */
+} bcmolt_rogue_detection_special_map_list_u32_max_8;
+
+/** Type and attributes of the rogue detection algorithm. 
+ */
+typedef struct bcmolt_rogue_detection_algorithm
+{
+    bcmolt_rogue_detection_algorithm_type algorithm_type;   /**< Type of the rogue detection algorithm. */
+    union
+    {
+        struct
+        {
+            bcmolt_rogue_detection_window measurement_type; /**< Silent Window or Cut off Window */
+            uint32_t interval;                  /**< Periodic process timer interval in milliseconds */
+            bcmos_bool second_ranging_window;   /**< Determines whether the second ranging window should be invoked or not. */
+            bcmolt_alloc_type_to_scan alloc_type_to_scan;               /**< Alloc type to scan during rogue detection.  Unused, previously used, or all Alloc-IDs. */
+        } early_rogue_detection;
+
+        struct
+        {
+            bcmolt_rogue_detection_special_map_list_u32_max_8 accesses; /**< Accesses. */
+        } special_map;
+
+        struct
+        {
+            uint32_t additional_guard_time; /**< Additional guard time (in bytes) for all ONUs on this PON. */
+        } extended_guard_time;
+    } u;
+} bcmolt_rogue_detection_algorithm;
+
+/** Configures the attributes of the rogue ONU detection periodic process. 
+ */
+typedef struct bcmolt_rogue_onu_detection_process
+{
+    bcmolt_control_state control;   /**< Enable/Disable the rogue ONU detection process. */
+    bcmolt_rogue_detection_algorithm detection_algorithm;   /**< Type and attributes of the rogue detection algorithm. */
+} bcmolt_rogue_onu_detection_process;
+
+/** serdes configuration. 
+ */
+typedef struct bcmolt_serdes_configuration
+{
+    bcmolt_serdes_ranging_mode ranging_mode;    /**< Select ranging mode for GPON/XGPON */
+    bcmos_bool multi_ed_mode;                   /**< Allow for multiple ED for ED mode for GPON/XGPON */
+    uint16_t burst_enable_start_offset;         /**< Start offset for stat capture on SERDES channel */
+    uint16_t burst_enable_end_offset;           /**< End offset for stat capture on SERDES channel  */
+    bcmos_bool ed_invertion;                    /**< ed invertion. */
+} bcmolt_serdes_configuration;
+
+/** serial number. 
+ */
+typedef struct bcmolt_serial_number
+{
+    uint8_t vendor_id[4];       /**< vendor id. */
+    uint8_t vendor_specific[4]; /**< vendor specific. */
+} bcmolt_serial_number;
+
+/** Solicited Scheduler. 
+ */
+typedef struct bcmolt_solicited_scheduler
+{
+    bcmolt_bandwidth_Kbps bandwidth_Kbps;   /**< The maximum layer 1 throughput provided by this scheduler (in Kbps). */
+    bcmolt_time_quanta max_burst_size_tq;   /**< The maximum burst size (in TQ). */
+    uint8_t priority;                       /**< The priority at which this scheduler runs.  This field is read-only and fixed at 0 for the MIN Shaper/Scheduler  element. */
+    bcmolt_time_quanta weight_tq;           /**< The weight of this scheduler (in TQ rounded up to nearest 128). Must be greater than or equal to Grant Threshold. */
+} bcmolt_solicited_scheduler;
+
+/** Statistic alarm trigger configuration. 
+ */
+typedef struct bcmolt_stat_alarm_trigger_config
+{
+    bcmolt_stat_condition_type type;    /**< Type of condition to trigger the alarm. */
+    union
+    {
+        struct
+        {
+            uint64_t rising;            /**< The alarm is raised if the stats delta value per second becomes greater than this threshold level. */
+            uint64_t falling;           /**< The alarm is cleared if the stats delta value per second becomes less than this threshold level. */
+        } rate_threshold;
+
+        struct
+        {
+            uint64_t upper;             /**< The alarm is raised if the stats delta value per second becomes greater than this upper level. */
+            uint64_t lower;             /**< The alarm is raised if the stats delta value per second becomes less than this lower level. */
+        } rate_range;
+
+        struct
+        {
+            uint64_t limit;             /**< The alarm is raised if the stats sample value becomes greater than this level.  The alarm is cleared when the host clears the stats. */
+        } value_threshold;
+    } u;
+} bcmolt_stat_alarm_trigger_config;
+
+/** Statistics alarm soaking configuration 
+ */
+typedef struct bcmolt_stat_alarm_soak_config
+{
+    uint32_t active_soak_time;  /**< If the alarm condition is raised and stays in the raised state for at least this amount of time (unit=seconds), the alarm indication is sent to the host. */
+    uint32_t clear_soak_time;   /**< After the alarm is raised, if it is cleared and stays in the cleared state for at least this amount of time (unit=seconds), the alarm indication is sent to the host. */
+} bcmolt_stat_alarm_soak_config;
+
+/** Statistic alarm configuration. 
+ */
+typedef struct bcmolt_stat_alarm_config
+{
+    bcmolt_stat_alarm_trigger_config trigger;   /**< Statistics alarm trigger configuration. */
+    bcmolt_stat_alarm_soak_config soak;         /**< Statistics alarm soaking configuration */
+} bcmolt_stat_alarm_config;
+
+/** ASCII string with max length 100. 
+ */
+typedef struct bcmolt_str_100
+{
+    char str[100];  /**< String. */
+} bcmolt_str_100;
+
+/** ASCII string with max length 1000. 
+ */
+typedef struct bcmolt_str_1000
+{
+    char str[1000]; /**< String. */
+} bcmolt_str_1000;
+
+/** ASCII string with max length 2000. 
+ */
+typedef struct bcmolt_str_2000
+{
+    char str[2000]; /**< String. */
+} bcmolt_str_2000;
+
+/** ASCII string with max length 256. 
+ */
+typedef struct bcmolt_str_256
+{
+    char str[256];  /**< String. */
+} bcmolt_str_256;
+
+/** ASCII string with max length 64. 
+ */
+typedef struct bcmolt_str_64
+{
+    char str[64];   /**< String. */
+} bcmolt_str_64;
+
+/** SW Error. 
+ */
+typedef struct bcmolt_sw_error
+{
+    uint64_t first_error_time_us;   /**< Timestamp (in us) when his error first occurred */
+    uint64_t last_error_time_us;    /**< Timestamp (in us) when his error last occurred */
+    uint32_t line_number;           /**< Line Number. */
+    uint32_t error_counter;         /**< The number of times this error has occurred */
+    uint32_t instance;              /**< Instance. */
+    char filename[64];              /**< Filename. */
+    char task_name[64];             /**< Task Name. */
+} bcmolt_sw_error;
+
+/** System profile 
+ */
+typedef struct bcmolt_system_profile
+{
+    uint32_t ng_2_sys_id;       /**< 20-bit identifier of the NGPON2 system */
+    uint8_t version;            /**< System profile version. */
+    uint8_t channel_spacing;    /**< An integer indicating the channel spacing in units of 1GHz */
+    bcmolt_us_operating_wavelength_bands us_operating_wavelength_bands; /**< Upstream operating wavelength bands */
+    uint8_t us_mse; /**< Upstream Maximum Spectral Excursion (MSE) represented as an unsigned integer indicating the value in units of 1GHz */
+    bcmolt_calibration_record loose_calibration_bound;  /**< Spectral excursion bound below which a TWDM ONU can be considered as loosely calibrated */
+    uint16_t fsr;               /**< If a cyclic WM is used in the upstream, Free Spectral Range indicates the value in units of 0.1 GHz */
+    uint8_t twdm_channel_count; /**< The number of Channel_Profile PLOAM messages with distinct Channel Profile indices that an ONU can expect to receive while listening to this downstream wavelength channel */
+} bcmolt_system_profile;
+
+/** TRX Delimiter. 
+ */
+typedef struct bcmolt_trx_delimiter
+{
+    uint8_t pattern[3];     /**< pattern. */
+    uint8_t size;           /**< Size in bytes. */
+    uint8_t window_size;    /**< Window size. */
+} bcmolt_trx_delimiter;
+
+/** TRX Energy detect. 
+ */
+typedef struct bcmolt_trx_energy_detect
+{
+    bcmolt_energy_detect_source ranging_ed_source;      /**< Ranging ED source. */
+    bcmolt_energy_detect_source delimiter_ed_source;    /**< Delimiter ED source. */
+    uint8_t minimum_threshold;  /**< Minimum threshold. */
+    uint8_t maximum_threshold;  /**< Maximum threshold. */
+    uint8_t ed_pattern;         /**< ED pattern. */
+    uint8_t ed_pattern_size;    /**< ED pattern size. */
+    uint8_t window_size;        /**< Window size. */
+    bcmos_bool inversion;       /**< Inversion. */
+    uint8_t no_ed_threshold;    /**< no ed threshold. */
+} bcmolt_trx_energy_detect;
+
+/** TRX Preamble. 
+ */
+typedef struct bcmolt_trx_preamble
+{
+    uint8_t type_1_size;                /**< Type 1 size. */
+    uint8_t type_2_size;                /**< Type 2 size. */
+    uint8_t type_3_pre_ranging_size;    /**< Type 3 pre ranging size. */
+    uint8_t type_3_post_ranging_size;   /**< Type 3 post ranging size. */
+    uint8_t type_3_pattern;             /**< Type 3 pattern. */
+} bcmolt_trx_preamble;
+
+/** TRX RX configuration. 
+ */
+typedef struct bcmolt_trx_rx_configuration
+{
+    uint8_t wait_window_size;           /**< Wait Window size. */
+    uint8_t ranging_access_window_size; /**< Ranging access window size. */
+} bcmolt_trx_rx_configuration;
+
+/** Variable-length list of U32. 
+ */
+typedef struct bcmolt_u32_list_u32_max_500_hex
+{
+    uint32_t len;   /**< List length. */
+    uint32_t *val;  /**< List contents. */
+} bcmolt_u32_list_u32_max_500_hex;
+
+/** Variable-length list of U8. 
+ */
+typedef struct bcmolt_u8_list_u16_hex
+{
+    uint16_t len;   /**< List length. */
+    uint8_t *val;   /**< List contents. */
+} bcmolt_u8_list_u16_hex;
+
+/** Variable-length list of U8. 
+ */
+typedef struct bcmolt_u8_list_u32
+{
+    uint32_t len;   /**< List length. */
+    uint8_t *val;   /**< List contents. */
+} bcmolt_u8_list_u32;
+
+/** Variable-length list of U8. 
+ */
+typedef struct bcmolt_u8_list_u32_max_2048
+{
+    uint32_t len;   /**< List length. */
+    uint8_t *val;   /**< List contents. */
+} bcmolt_u8_list_u32_max_2048;
+
+/** UBD Info. 
+ */
+typedef struct bcmolt_ubd_info
+{
+    uint16_t actual_polling_interval;   /**< Units: 65.536us */
+    bcmolt_time_quanta actual_grant_threshold_tq;               /**< Actual Grant Threshold (TQ). */
+    bcmolt_actual_schedulershaper actual_min_schedulershaper;   /**< Actual Min Scheduler/Shaper. */
+    bcmolt_actual_schedulershaper actual_max_schedulershaper;   /**< Actual Max Scheduler/Shaper. */
+} bcmolt_ubd_info;
+
+/** The upstream bandwidth distribution for this LLID. 
+ */
+typedef struct bcmolt_upstream_bandwidth_distribution
+{
+    bcmolt_polling_interval polling_interval_us;    /**< The amount of time between when this LLID last reported upstream data and when it will next be polled (approximate: rounded down to the nearest 65.536 us). */
+    bcmolt_time_quanta grant_threshold_tq;          /**< Used to determine the maximum grant size that will be issued to this LLID (in TQ; rounded up to the nearest 128TQ; 1TQ = 16ns = 2Bytes@1G or 20Bytes@10G). */
+    bcmolt_solicited_scheduler min_schedulershaper; /**< Min Scheduler/Shaper. */
+    bcmolt_solicited_scheduler max_schedulershaper; /**< Max Scheduler/Shaper. */
+    bcmolt_time_quanta tdm_grant_size_tq;           /**< Size of TDM grants (in TQ). */
+    uint32_t tdm_grant_interval_us;                 /**< Interval between TDM grants (in us). */
+} bcmolt_upstream_bandwidth_distribution;
+
+/** VLAN tag. 
+ */
+typedef struct bcmolt_vlan_tag
+{
+    bcmolt_vlan_id vlan_id; /**< VLAN ID. */
+    uint8_t pbit;           /**< Pbit. */
+} bcmolt_vlan_tag;
+
+/** XGPON Alloc With State. 
+ */
+typedef struct bcmolt_xgpon_alloc_with_state
+{
+    bcmolt_xgpon_alloc_id alloc_id; /**< Alloc ID. */
+    bcmolt_alloc_state state;       /**< State. */
+} bcmolt_xgpon_alloc_with_state;
+
+/** Variable-length list of xgpon_alloc_with_state. 
+ */
+typedef struct bcmolt_xgpon_alloc_with_state_list_u16_max_32
+{
+    uint16_t len;                       /**< List length. */
+    bcmolt_xgpon_alloc_with_state *val; /**< List contents. */
+} bcmolt_xgpon_alloc_with_state_list_u16_max_32;
+
+/** xgpon ed state. 
+ */
+typedef struct bcmolt_xgpon_ed_state
+{
+    bcmos_bool reset_on_ed_fail;    /**< reset on ED fail. */
+    bcmos_bool reset_on_ed_success; /**< reset on ED success. */
+} bcmolt_xgpon_ed_state;
+
+/** Variable-length list of xgpon_gem_id. 
+ */
+typedef struct bcmolt_xgpon_gem_id_list_u8_max_16
+{
+    uint8_t len;                /**< List length. */
+    bcmolt_xgpon_gem_id *val;   /**< List contents. */
+} bcmolt_xgpon_gem_id_list_u8_max_16;
+
+/** XGPON GEM Port With State. 
+ */
+typedef struct bcmolt_xgpon_gem_port_with_state
+{
+    bcmolt_xgpon_gem_id gem_id;         /**< GEM ID. */
+    bcmolt_xgpon_gem_port_state state;  /**< State. */
+} bcmolt_xgpon_gem_port_with_state;
+
+/** Variable-length list of xgpon_gem_port_with_state. 
+ */
+typedef struct bcmolt_xgpon_gem_port_with_state_list_u16_max_128
+{
+    uint16_t len;   /**< List length. */
+    bcmolt_xgpon_gem_port_with_state *val;  /**< List contents. */
+} bcmolt_xgpon_gem_port_with_state_list_u16_max_128;
+
+/** Variable-length list of xgpon_gem_port_with_state. 
+ */
+typedef struct bcmolt_xgpon_gem_port_with_state_list_u16_max_256
+{
+    uint16_t len;   /**< List length. */
+    bcmolt_xgpon_gem_port_with_state *val;  /**< List contents. */
+} bcmolt_xgpon_gem_port_with_state_list_u16_max_256;
+
+/** XGPON Key Exchange. 
+ */
+typedef struct bcmolt_xgpon_key_exchange
+{
+    uint32_t interval;              /**< Key Exchange process interval in milliseconds */
+    bcmolt_control_state control;   /**< Enable\disable periodic process of Key Exchange for active ONUs */
+    bcmolt_control_state encrypted_ports_only;  /**< Perform key exchange only to ONUs with GEM ports that have downstream encryption enabled */
+} bcmolt_xgpon_key_exchange;
+
+/** XGPON Multicast key. 
+ */
+typedef struct bcmolt_xgpon_multicast_key
+{
+    bcmolt_aes_key key;     /**< AES encryption key for multicsat XGEM port IDs */
+    bcmos_bool key_control; /**< Enable\Disable encryption on multicast XGEM ports */
+} bcmolt_xgpon_multicast_key;
+
+/** XGPON NI Debug parameters 
+ */
+typedef struct bcmolt_xgpon_ni_debug
+{
+    bcmos_bool increase_available_cbr_bw;   /**< Use increase available CBR bandwidth for better BW utilization */
+    uint16_t inter_burst_gap_in_bytes;      /**< Gap between two consecutive bursts for the same ONU */
+    uint16_t number_of_gem_ports_per_onu;   /**< Number of gem ports per onu */
+} bcmolt_xgpon_ni_debug;
+
+/** XGPON ONU Activation. 
+ */
+typedef struct bcmolt_xgpon_onu_activation
+{
+    bcmolt_control_state key_exchange;  /**< Perform single key exchange during activation. */
+    bcmolt_control_state fail_due_to_regis_auto_fail;   /**< Deactivate ONU due to registration authentication failure */
+} bcmolt_xgpon_onu_activation;
+
+/** XGPON ONU AES KEY. 
+ */
+typedef struct bcmolt_xgpon_onu_aes_key
+{
+    bcmolt_aes_key encryption_key;  /**< encryption key. */
+    uint8_t key_index;              /**< key index. */
+} bcmolt_xgpon_onu_aes_key;
+
+/** XGPON ONU alarm status. 
+ */
+typedef struct bcmolt_xgpon_onu_alarm_state
+{
+    bcmolt_status losi;             /**< Loss of signal. */
+    bcmolt_status lobi;             /**< Loss of burst. */
+    bcmolt_status lopci;            /**< Loss of PLOAM channel. */
+    bcmolt_status lopci_mic_error;  /**< Mic error on ploam channel. */
+    bcmolt_status looci;            /**< Loss of OMCI channel. */
+    bcmolt_status tiwi;             /**< Transmission interference Alarm. */
+    bcmolt_status dowi;             /**< Drift of Window. */
+    bcmolt_status sufi;             /**< Start UP Failure. */
+    bcmolt_status sfi;              /**< Signal Fail. */
+    bcmolt_status sdi;              /**< Signal Degraded. */
+    bcmolt_status dfi;              /**< Deactivation Failure. */
+    bcmolt_status dgi;              /**< Dying gasp. */
+    bcmolt_status pqsi;             /**< Ploam queue status. */
+} bcmolt_xgpon_onu_alarm_state;
+
+/** XGPON ONU alarms. 
+ */
+typedef struct bcmolt_xgpon_onu_alarms
+{
+    bcmolt_status losi;             /**< LOSi. */
+    bcmolt_status lobi;             /**< LOBi. */
+    bcmolt_status lopci_miss;       /**< LOPCi miss. */
+    bcmolt_status lopci_mic_error;  /**< LOPCi mic error. */
+} bcmolt_xgpon_onu_alarms;
+
+/** XGPON ONU alarms thresholds. 
+ */
+typedef struct bcmolt_xgpon_onu_alarms_thresholds
+{
+    uint8_t losi;   /**< Threshold for asserting LOSi alarm. */
+    uint8_t lobi;   /**< Threshold for asserting LOBi alarm. */
+    uint8_t looci;  /**< Threshold for asserting LOOCi alarm. */
+    uint8_t lopci;  /**< Threshold for asserting LOPCi alarm.  */
+} bcmolt_xgpon_onu_alarms_thresholds;
+
+/** XGPON ONU EQD. 
+ */
+typedef struct bcmolt_xgpon_onu_eqd
+{
+    bcmolt_xgpon_onu_id onu_id; /**< ONU ID. */
+    uint32_t eqd;               /**< EQD. */
+} bcmolt_xgpon_onu_eqd;
+
+/** Variable-length list of xgpon_onu_eqd. 
+ */
+typedef struct bcmolt_xgpon_onu_eqd_list_u32
+{
+    uint32_t len;               /**< List length. */
+    bcmolt_xgpon_onu_eqd *val;  /**< List contents. */
+} bcmolt_xgpon_onu_eqd_list_u32;
+
+/** XGPON ONU registration keys. 
+ */
+typedef struct bcmolt_xgpon_onu_registration_keys
+{
+    bcmolt_aes_key ploam_ik;    /**< ploam ik. */
+    bcmolt_aes_key omci_ik;     /**< omci ik. */
+    bcmolt_aes_key omci_k1;     /**< omci k1. */
+    bcmolt_aes_key omci_k2;     /**< omci k2. */
+    bcmolt_aes_key kek;         /**< kek. */
+} bcmolt_xgpon_onu_registration_keys;
+
+/** XGPON ONU With State. 
+ */
+typedef struct bcmolt_xgpon_onu_with_state
+{
+    bcmolt_xgpon_onu_id onu_id; /**< ONU ID. */
+    bcmolt_onu_state state;     /**< State. */
+} bcmolt_xgpon_onu_with_state;
+
+/** Variable-length list of xgpon_onu_with_state. 
+ */
+typedef struct bcmolt_xgpon_onu_with_state_list_u16_max_510
+{
+    uint16_t len;                       /**< List length. */
+    bcmolt_xgpon_onu_with_state *val;   /**< List contents. */
+} bcmolt_xgpon_onu_with_state_list_u16_max_510;
+
+/** XGPON PLOAM handling. 
+ */
+typedef struct bcmolt_xgpon_ploam_handling
+{
+    uint32_t ack_timeout;               /**< Timeout for receiving ACK ploam */
+    uint8_t retrans_ranging_time;       /**< Number of Ranging Time ploam retransmissions in case of ACK timeout */
+    uint8_t retrans_assign_alloc_id;    /**< Number of Assign Alloc ID ploam retransmissions in case of ACK timeout */
+    uint8_t retrans_key_control;        /**< Number of Key Control ploam retransmissions in case of ACK timeout */
+    uint8_t retrans_request_registration;   /**< Number of Request Registration ploam retransmissions in case of ACK timeout */
+} bcmolt_xgpon_ploam_handling;
+
+/** XGPON protection switching configuration. 
+ */
+typedef struct bcmolt_xgpon_protection_switching
+{
+    uint16_t timeout;           /**< LOS switch over timeout in milliseconds */
+    bcmolt_gpio_pin gpio_pin;   /**< GPIO pin for input/output signal */
+    bcmos_bool fast_ranging;    /**< fast ranging  */
+} bcmolt_xgpon_protection_switching;
+
+/** xgpon protection switching debug. 
+ */
+typedef struct bcmolt_xgpon_protection_switching_debug
+{
+    uint16_t data_map_delay_ms;             /**< delay to wait after sending ranging time delta before running the data map   */
+    bcmos_bool rerange_send_ranging_time;   /**< Should the SM send the current ranging time before doing the re-ranging  */
+    uint16_t rerange_send_ranging_time_delay;   /**< the delay between sending the ranging time and starting the rerange  */
+} bcmolt_xgpon_protection_switching_debug;
+
+/** XGPON RSSI normal configuration. 
+ */
+typedef struct bcmolt_xgpon_rssi_normal_config
+{
+    bcmolt_polarity polarity;   /**< RSSI signal polarity */
+    uint8_t location;           /**< RSSI signal location in words */
+    bcmolt_sign location_sign;  /**< RSSI signal location sign */
+    uint16_t pulse_width;       /**< RSSI pulse width in words */
+    uint16_t minimum_burst;     /**< Data minimum burst size in words */
+} bcmolt_xgpon_rssi_normal_config;
+
+/** xgpon rssi ranging config. 
+ */
+typedef struct bcmolt_xgpon_rssi_ranging_config
+{
+    bcmos_bool start_on_ed;         /**< start on ED. */
+    uint8_t frame_delay;            /**< frame delay from ED */
+    uint16_t word_delay;            /**< word delay from ED */
+    uint8_t frame_delay_after_ed;   /**< frame delay from start  of ranging window */
+    uint16_t word_delay_after_ed;   /**< word delay from start  of ranging window */
+} bcmolt_xgpon_rssi_ranging_config;
+
+/** xgpon rx ranging SM patterns. 
+ */
+typedef struct bcmolt_xgpon_rx_ranging_sm_pattern
+{
+    uint32_t trx_reset_pattern_first;   /**< trx reset pattern first. */
+    uint32_t trx_reset_pattern_middle;  /**< trx reset pattern middle. */
+    uint32_t trx_reset_pattern_last;    /**< trx reset pattern last. */
+    uint8_t trx_reset_middle_repeats;   /**< trx reset middle repeats. */
+    uint8_t trx_reset_location;         /**< trx reset location. */
+    uint32_t bcdr_reset_pattern_first;  /**< bcdr reset pattern first. */
+    uint32_t bcdr_reset_pattern_middle; /**< bcdr reset pattern middle. */
+    uint32_t bcdr_reset_pattern_last;   /**< bcdr reset pattern last. */
+    uint8_t bcdr_reset_middle_repeats;  /**< bcdr reset middle repeats. */
+    uint8_t bcdr_reset_location;        /**< bcdr reset location. */
+    bcmos_bool bcdr_reset_polarity;     /**< bcdr reset polarity. */
+} bcmolt_xgpon_rx_ranging_sm_pattern;
+
+/** xgpon serdes configuration. 
+ */
+typedef struct bcmolt_xgpon_serdes_configuration
+{
+    bcmos_bool multi_ed_mode;   /**< multi ed mode. */
+    bcmolt_xgpon_serdes_ranging_mode ranging_mode;  /**< ranging mode. */
+} bcmolt_xgpon_serdes_configuration;
+
+/** XGPON SN Acquisition. 
+ */
+typedef struct bcmolt_xgpon_sn_acquisition
+{
+    uint32_t interval;              /**< SN process interval in milliseconds */
+    bcmolt_control_state control;   /**< SN process control */
+    bcmolt_onu_post_discovery_mode onu_post_discovery_mode; /**< Automatic operation following ONU discovery */
+    bcmolt_burst_profile_index burst_profile;               /**< Burst profile index to use during SN acquisition window */
+} bcmolt_xgpon_sn_acquisition;
+
+/** xgpon_trx_debug. 
+ */
+typedef struct bcmolt_xgpon_trx_debug
+{
+    bcmolt_control_state rx_reversed_polarity;  /**< transceiver reversed polarity */
+    bcmolt_control_state neg_out_bit;           /**< turn all 1 to 0 and all 0 to 1 at the output. default is not to make negative bits */
+} bcmolt_xgpon_trx_debug;
+
+/** @} */
+#endif /* BCMOLT_MODEL_DATA_H_ */
diff --git a/bcm68620_release/release/host_driver/model/bcmolt_model_ids.h b/bcm68620_release/release/host_driver/model/bcmolt_model_ids.h
new file mode 100644
index 0000000..4a1967c
--- /dev/null
+++ b/bcm68620_release/release/host_driver/model/bcmolt_model_ids.h
@@ -0,0 +1,9624 @@
+/*
+<:copyright-BRCM:2016:proprietary:standard
+ 
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+ 
+This program is the proprietary software of Broadcom Corporation and/or its
+licensors, and may only be used, duplicated, modified or distributed pursuant
+to the terms and conditions of a separate, written license agreement executed
+between you and Broadcom (an "Authorized License").  Except as set forth in
+an Authorized License, Broadcom grants no license (express or implied), right
+to use, or waiver of any kind with respect to the Software, and Broadcom
+expressly reserves all rights in and to the Software and all intellectual
+property rights therein.  IF YOU HAVE NO AUTHORIZED LICENSE, THEN YOU HAVE
+NO RIGHT TO USE THIS SOFTWARE IN ANY WAY, AND SHOULD IMMEDIATELY NOTIFY
+BROADCOM AND DISCONTINUE ALL USE OF THE SOFTWARE.
+ 
+Except as expressly set forth in the Authorized License,
+ 
+1. This program, including its structure, sequence and organization,
+    constitutes the valuable trade secrets of Broadcom, and you shall use
+    all reasonable efforts to protect the confidentiality thereof, and to
+    use this information only in connection with your use of Broadcom
+    integrated circuit products.
+ 
+2. TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
+    AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES, REPRESENTATIONS OR
+    WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH
+    RESPECT TO THE SOFTWARE.  BROADCOM SPECIFICALLY DISCLAIMS ANY AND
+    ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY, NONINFRINGEMENT,
+    FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES, ACCURACY OR
+    COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR CORRESPONDENCE
+    TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING OUT OF USE OR
+    PERFORMANCE OF THE SOFTWARE.
+ 
+3. TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM OR
+    ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL, INCIDENTAL, SPECIAL,
+    INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER ARISING OUT OF OR IN ANY
+    WAY RELATING TO YOUR USE OF OR INABILITY TO USE THE SOFTWARE EVEN
+    IF BROADCOM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES;
+    OR (ii) ANY AMOUNT IN EXCESS OF THE AMOUNT ACTUALLY PAID FOR THE
+    SOFTWARE ITSELF OR U.S. $1, WHICHEVER IS GREATER. THESE LIMITATIONS
+    SHALL APPLY NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY
+    LIMITED REMEDY.
+:>
+*/
+#ifndef BCMOLT_MODEL_IDS_H_
+#define BCMOLT_MODEL_IDS_H_
+
+/** \addtogroup api_data_types 
+ * @{ 
+ */
+
+/** Identifiers for all properties contained in the ae_ni_cfg group. 
+ */
+typedef enum bcmolt_ae_ni_cfg_id
+{
+    BCMOLT_AE_NI_CFG_ID__BEGIN          = 0,
+    BCMOLT_AE_NI_CFG_ID_MAC_ADDRESS     = 0,                /**< MAC Address. */
+    BCMOLT_AE_NI_CFG_ID_AE_NI_EN        = 1,                /**< AE NI enable state. */
+    BCMOLT_AE_NI_CFG_ID_MTU_10G         = 2,                /**< MTU. */
+    BCMOLT_AE_NI_CFG_ID_PRBS_GENERATOR  = 3,                /**< PRBS Generator. */
+    BCMOLT_AE_NI_CFG_ID_PRBS_CHECKER    = 4,                /**< PRBS Checker. */
+    BCMOLT_AE_NI_CFG_ID_PRBS_STATUS     = 5,                /**< PRBS status. */
+    BCMOLT_AE_NI_CFG_ID__NUM_OF                             /**< Number of enum entries, not an entry itself. */
+} bcmolt_ae_ni_cfg_id;
+
+/** Identifiers for all properties contained in the ae_ni_key group. 
+ */
+typedef enum bcmolt_ae_ni_key_id
+{
+    BCMOLT_AE_NI_KEY_ID__BEGIN          = 0,
+    BCMOLT_AE_NI_KEY_ID_AE_NI           = 0,                /**< AE NI number. */
+    BCMOLT_AE_NI_KEY_ID__NUM_OF                             /**< Number of enum entries, not an entry itself. */
+} bcmolt_ae_ni_key_id;
+
+/** Identifiers for all properties contained in the ae_ni_set_ae_ni_en_state 
+ * group. 
+ */
+typedef enum bcmolt_ae_ni_set_ae_ni_en_state_id
+{
+    BCMOLT_AE_NI_SET_AE_NI_EN_STATE_ID__BEGIN   = 0,
+    BCMOLT_AE_NI_SET_AE_NI_EN_STATE_ID_NEW_STATE= 0,        /**< New AE NI enable state. */
+    BCMOLT_AE_NI_SET_AE_NI_EN_STATE_ID__NUM_OF              /**< Number of enum entries, not an entry itself. */
+} bcmolt_ae_ni_set_ae_ni_en_state_id;
+
+/** Identifiers for all properties contained in the ae_path_ds_auto_cfg group. 
+ */
+typedef enum bcmolt_ae_path_ds_auto_cfg_id
+{
+    BCMOLT_AE_PATH_DS_AUTO_CFG_ID__BEGIN            = 0,
+    BCMOLT_AE_PATH_DS_AUTO_CFG_ID_STAT_ALARM_CLEARED= 0,    /**< Stat Alarm Cleared. */
+    BCMOLT_AE_PATH_DS_AUTO_CFG_ID_STAT_ALARM_RAISED = 1,    /**< Stat Alarm Raised. */
+    BCMOLT_AE_PATH_DS_AUTO_CFG_ID__NUM_OF                   /**< Number of enum entries, not an entry itself. */
+} bcmolt_ae_path_ds_auto_cfg_id;
+
+/** Identifiers for all properties contained in the ae_path_ds_key group. 
+ */
+typedef enum bcmolt_ae_path_ds_key_id
+{
+    BCMOLT_AE_PATH_DS_KEY_ID__BEGIN                 = 0,
+    BCMOLT_AE_PATH_DS_KEY_ID_AE_NI                  = 0,    /**< AE NI (Active Ethernet Network Interface) number. */
+    BCMOLT_AE_PATH_DS_KEY_ID__NUM_OF                        /**< Number of enum entries, not an entry itself. */
+} bcmolt_ae_path_ds_key_id;
+
+/** Identifiers for all properties contained in the 
+ * ae_path_ds_stat_alarm_cleared group. 
+ */
+typedef enum bcmolt_ae_path_ds_stat_alarm_cleared_id
+{
+    BCMOLT_AE_PATH_DS_STAT_ALARM_CLEARED_ID__BEGIN  = 0,
+    BCMOLT_AE_PATH_DS_STAT_ALARM_CLEARED_ID_STAT    = 0,    /**< Statistic ID. */
+    BCMOLT_AE_PATH_DS_STAT_ALARM_CLEARED_ID__NUM_OF         /**< Number of enum entries, not an entry itself. */
+} bcmolt_ae_path_ds_stat_alarm_cleared_id;
+
+/** Identifiers for all properties contained in the ae_path_ds_stat_alarm_raised 
+ * group. 
+ */
+typedef enum bcmolt_ae_path_ds_stat_alarm_raised_id
+{
+    BCMOLT_AE_PATH_DS_STAT_ALARM_RAISED_ID__BEGIN   = 0,
+    BCMOLT_AE_PATH_DS_STAT_ALARM_RAISED_ID_STAT     = 0,    /**< Statistic ID. */
+    BCMOLT_AE_PATH_DS_STAT_ALARM_RAISED_ID__NUM_OF          /**< Number of enum entries, not an entry itself. */
+} bcmolt_ae_path_ds_stat_alarm_raised_id;
+
+/** Identifiers for all properties contained in the ae_path_ds_stat_cfg group. 
+ */
+typedef enum bcmolt_ae_path_ds_stat_cfg_id
+{
+    BCMOLT_AE_PATH_DS_STAT_CFG_ID__BEGIN            = 0,
+    BCMOLT_AE_PATH_DS_STAT_CFG_ID_CFG               = 0,    /**< Configuration. */
+    BCMOLT_AE_PATH_DS_STAT_CFG_ID__NUM_OF                   /**< Number of enum entries, not an entry itself. */
+} bcmolt_ae_path_ds_stat_cfg_id;
+
+/** Identifiers for all properties contained in the ae_path_ds_stat group. 
+ */
+typedef enum bcmolt_ae_path_ds_stat_id
+{
+    BCMOLT_AE_PATH_DS_STAT_ID__BEGIN                = 0,
+    BCMOLT_AE_PATH_DS_STAT_ID_BYTES                 = 0,    /**< Bytes. */
+    BCMOLT_AE_PATH_DS_STAT_ID_FRAMES                = 1,    /**< Frames. */
+    BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_64             = 2,    /**< 64 Byte Frames. */
+    BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_65_127         = 3,    /**< 65-127 Byte Frames. */
+    BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_128_255        = 4,    /**< 128-255 Byte Frames. */
+    BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_256_511        = 5,    /**< 256-511 Byte Frames. */
+    BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_512_1023       = 6,    /**< 512-1023 Byte Frames. */
+    BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_1024_1518      = 7,    /**< 1024-1518 Byte Frames. */
+    BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_1519_2047      = 8,    /**< 1519-2047 Byte Frames. */
+    BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_2048_4095      = 9,    /**< 2048_4095 Byte Frames. */
+    BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_4096_9216      = 10,   /**< 4096-9216 Byte Frames. */
+    BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_9217_16383     = 11,   /**< 9217-16383 Byte Frames. */
+    BCMOLT_AE_PATH_DS_STAT_ID_BROADCAST_FRAMES      = 12,   /**< Broadcast Frames. */
+    BCMOLT_AE_PATH_DS_STAT_ID_DATA_BYTES            = 13,   /**< Data Bytes. */
+    BCMOLT_AE_PATH_DS_STAT_ID_MULTICAST_FRAMES      = 14,   /**< Mulitcast Frames. */
+    BCMOLT_AE_PATH_DS_STAT_ID_UNICAST_FRAMES        = 15,   /**< Unicast Frames. */
+    BCMOLT_AE_PATH_DS_STAT_ID_ABORT_FRAMES          = 16,   /**< Abort Frames. */
+    BCMOLT_AE_PATH_DS_STAT_ID__NUM_OF                       /**< Number of enum entries, not an entry itself. */
+} bcmolt_ae_path_ds_stat_id;
+
+/** Identifiers for all properties contained in the ae_path_us_auto_cfg group. 
+ */
+typedef enum bcmolt_ae_path_us_auto_cfg_id
+{
+    BCMOLT_AE_PATH_US_AUTO_CFG_ID__BEGIN            = 0,
+    BCMOLT_AE_PATH_US_AUTO_CFG_ID_STAT_ALARM_CLEARED= 0,    /**< Stat Alarm Cleared. */
+    BCMOLT_AE_PATH_US_AUTO_CFG_ID_STAT_ALARM_RAISED = 1,    /**< Stat Alarm Raised. */
+    BCMOLT_AE_PATH_US_AUTO_CFG_ID__NUM_OF                   /**< Number of enum entries, not an entry itself. */
+} bcmolt_ae_path_us_auto_cfg_id;
+
+/** Identifiers for all properties contained in the ae_path_us_key group. 
+ */
+typedef enum bcmolt_ae_path_us_key_id
+{
+    BCMOLT_AE_PATH_US_KEY_ID__BEGIN                 = 0,
+    BCMOLT_AE_PATH_US_KEY_ID_AE_NI                  = 0,    /**< AE NI. */
+    BCMOLT_AE_PATH_US_KEY_ID__NUM_OF                        /**< Number of enum entries, not an entry itself. */
+} bcmolt_ae_path_us_key_id;
+
+/** Identifiers for all properties contained in the 
+ * ae_path_us_stat_alarm_cleared group. 
+ */
+typedef enum bcmolt_ae_path_us_stat_alarm_cleared_id
+{
+    BCMOLT_AE_PATH_US_STAT_ALARM_CLEARED_ID__BEGIN  = 0,
+    BCMOLT_AE_PATH_US_STAT_ALARM_CLEARED_ID_STAT    = 0,    /**< Statistic ID. */
+    BCMOLT_AE_PATH_US_STAT_ALARM_CLEARED_ID__NUM_OF         /**< Number of enum entries, not an entry itself. */
+} bcmolt_ae_path_us_stat_alarm_cleared_id;
+
+/** Identifiers for all properties contained in the ae_path_us_stat_alarm_raised 
+ * group. 
+ */
+typedef enum bcmolt_ae_path_us_stat_alarm_raised_id
+{
+    BCMOLT_AE_PATH_US_STAT_ALARM_RAISED_ID__BEGIN   = 0,
+    BCMOLT_AE_PATH_US_STAT_ALARM_RAISED_ID_STAT     = 0,    /**< Statistic ID. */
+    BCMOLT_AE_PATH_US_STAT_ALARM_RAISED_ID__NUM_OF          /**< Number of enum entries, not an entry itself. */
+} bcmolt_ae_path_us_stat_alarm_raised_id;
+
+/** Identifiers for all properties contained in the ae_path_us_stat_cfg group. 
+ */
+typedef enum bcmolt_ae_path_us_stat_cfg_id
+{
+    BCMOLT_AE_PATH_US_STAT_CFG_ID__BEGIN            = 0,
+    BCMOLT_AE_PATH_US_STAT_CFG_ID_CFG               = 0,    /**< Configuration. */
+    BCMOLT_AE_PATH_US_STAT_CFG_ID__NUM_OF                   /**< Number of enum entries, not an entry itself. */
+} bcmolt_ae_path_us_stat_cfg_id;
+
+/** Identifiers for all properties contained in the ae_path_us_stat group. 
+ */
+typedef enum bcmolt_ae_path_us_stat_id
+{
+    BCMOLT_AE_PATH_US_STAT_ID__BEGIN                = 0,
+    BCMOLT_AE_PATH_US_STAT_ID_BYTES                 = 0,    /**< Bytes. */
+    BCMOLT_AE_PATH_US_STAT_ID_FRAMES                = 1,    /**< Frames. */
+    BCMOLT_AE_PATH_US_STAT_ID_FRAMES_64             = 2,    /**< 64 Byte Frames. */
+    BCMOLT_AE_PATH_US_STAT_ID_FRAMES_65_127         = 3,    /**< 65-127 Byte Frames. */
+    BCMOLT_AE_PATH_US_STAT_ID_FRAMES_128_255        = 4,    /**< 128-255 Byte Frames. */
+    BCMOLT_AE_PATH_US_STAT_ID_FRAMES_256_511        = 5,    /**< 256-511 Byte Frames. */
+    BCMOLT_AE_PATH_US_STAT_ID_FRAMES_512_1023       = 6,    /**< 512-1023 Byte Frames. */
+    BCMOLT_AE_PATH_US_STAT_ID_FRAMES_1024_1518      = 7,    /**< 1024-1518 Byte Frames. */
+    BCMOLT_AE_PATH_US_STAT_ID_FRAMES_1519_2047      = 8,    /**< 1519-2047 Byte Frames. */
+    BCMOLT_AE_PATH_US_STAT_ID_FRAMES_2048_4095      = 9,    /**< 2048_4095 Byte Frames. */
+    BCMOLT_AE_PATH_US_STAT_ID_FRAMES_4096_9216      = 10,   /**< 4096-9216 Byte Frames. */
+    BCMOLT_AE_PATH_US_STAT_ID_FRAMES_9217_16383     = 11,   /**< 9217-16383 Byte Frames. */
+    BCMOLT_AE_PATH_US_STAT_ID_BROADCAST_FRAMES      = 12,   /**< Broadcast Frames. */
+    BCMOLT_AE_PATH_US_STAT_ID_DATA_BYTES            = 13,   /**< Data Bytes. */
+    BCMOLT_AE_PATH_US_STAT_ID_MULTICAST_FRAMES      = 14,   /**< Mulitcast Frames. */
+    BCMOLT_AE_PATH_US_STAT_ID_UNICAST_FRAMES        = 15,   /**< Unicast Frames. */
+    BCMOLT_AE_PATH_US_STAT_ID_ABORT_FRAMES          = 16,   /**< Abort Frames. */
+    BCMOLT_AE_PATH_US_STAT_ID_FCS_ERROR             = 17,   /**< FCS Error. */
+    BCMOLT_AE_PATH_US_STAT_ID_OVERSIZE_ERROR        = 18,   /**< Oversize Error. */
+    BCMOLT_AE_PATH_US_STAT_ID_RUNT_ERROR            = 19,   /**< Runt Error. */
+    BCMOLT_AE_PATH_US_STAT_ID__NUM_OF                       /**< Number of enum entries, not an entry itself. */
+} bcmolt_ae_path_us_stat_id;
+
+/** Identifiers for all properties contained in the channel_cfg group. 
+ */
+typedef enum bcmolt_channel_cfg_id
+{
+    BCMOLT_CHANNEL_CFG_ID__BEGIN                    = 0,
+    BCMOLT_CHANNEL_CFG_ID_OPERATION_CONTROL         = 0,    /**< Operation control. */
+    BCMOLT_CHANNEL_CFG_ID_TOL                       = 1,    /**< TOL. */
+    BCMOLT_CHANNEL_CFG_ID_SYSTEM_PROFILE            = 2,    /**< System profile. */
+    BCMOLT_CHANNEL_CFG_ID_CHANNEL_PROFILE           = 3,    /**< Channel profile. */
+    BCMOLT_CHANNEL_CFG_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_channel_cfg_id;
+
+/** Identifiers for all properties contained in the channel_key group. 
+ */
+typedef enum bcmolt_channel_key_id
+{
+    BCMOLT_CHANNEL_KEY_ID__BEGIN                    = 0,
+    BCMOLT_CHANNEL_KEY_ID_PON_NI                    = 0,    /**< PON network interface. */
+    BCMOLT_CHANNEL_KEY_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_channel_key_id;
+
+/** Identifiers for all properties contained in the debug_auto_cfg group. 
+ */
+typedef enum bcmolt_debug_auto_cfg_id
+{
+    BCMOLT_DEBUG_AUTO_CFG_ID__BEGIN                 = 0,
+    BCMOLT_DEBUG_AUTO_CFG_ID_CLI_OUTPUT             = 0,    /**< cli_output. */
+    BCMOLT_DEBUG_AUTO_CFG_ID_FILE_ALMOST_FULL       = 1,    /**< file_almost_full. */
+    BCMOLT_DEBUG_AUTO_CFG_ID__NUM_OF                        /**< Number of enum entries, not an entry itself. */
+} bcmolt_debug_auto_cfg_id;
+
+/** Identifiers for all properties contained in the debug_cfg group. 
+ */
+typedef enum bcmolt_debug_cfg_id
+{
+    BCMOLT_DEBUG_CFG_ID__BEGIN                      = 0,
+    BCMOLT_DEBUG_CFG_ID_CONSOLE_REDIRECTION         = 0,    /**< Console_redirection. */
+    BCMOLT_DEBUG_CFG_ID_INDICATIONS_DROPPED         = 1,    /**< Indications Dropped. */
+    BCMOLT_DEBUG_CFG_ID_FILE_USED_PERCENT           = 2,    /**< File used percent. */
+    BCMOLT_DEBUG_CFG_ID_API_CAPTURE_CFG             = 3,    /**< API Capture Cfg. */
+    BCMOLT_DEBUG_CFG_ID_API_CAPTURE_STATS           = 4,    /**< API Capture Stats. */
+    BCMOLT_DEBUG_CFG_ID_API_CAPTURE_BUFFER_READ     = 5,    /**< API Capture Buffer Read. */
+    BCMOLT_DEBUG_CFG_ID_API_CAPTURE_BUFFER          = 6,    /**< API Capture Buffer. */
+    BCMOLT_DEBUG_CFG_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_debug_cfg_id;
+
+/** Identifiers for all properties contained in the debug_cli_input group. 
+ */
+typedef enum bcmolt_debug_cli_input_id
+{
+    BCMOLT_DEBUG_CLI_INPUT_ID__BEGIN                = 0,
+    BCMOLT_DEBUG_CLI_INPUT_ID_DATA                  = 0,    /**< data. */
+    BCMOLT_DEBUG_CLI_INPUT_ID__NUM_OF                       /**< Number of enum entries, not an entry itself. */
+} bcmolt_debug_cli_input_id;
+
+/** Identifiers for all properties contained in the debug_cli_output group. 
+ */
+typedef enum bcmolt_debug_cli_output_id
+{
+    BCMOLT_DEBUG_CLI_OUTPUT_ID__BEGIN               = 0,
+    BCMOLT_DEBUG_CLI_OUTPUT_ID_DATA                 = 0,    /**< data. */
+    BCMOLT_DEBUG_CLI_OUTPUT_ID__NUM_OF                      /**< Number of enum entries, not an entry itself. */
+} bcmolt_debug_cli_output_id;
+
+/** Identifiers for all properties contained in the debug_file_almost_full 
+ * group. 
+ */
+typedef enum bcmolt_debug_file_almost_full_id
+{
+    BCMOLT_DEBUG_FILE_ALMOST_FULL_ID__NUM_OF                /**< Number of enum entries, not an entry itself. */
+} bcmolt_debug_file_almost_full_id;
+
+/** Identifiers for all properties contained in the debug_key group. 
+ */
+typedef enum bcmolt_debug_key_id
+{
+    BCMOLT_DEBUG_KEY_ID__BEGIN                      = 0,
+    BCMOLT_DEBUG_KEY_ID_RESERVED                    = 0,    /**< Reserved. */
+    BCMOLT_DEBUG_KEY_ID__NUM_OF                 /**< Number of enum entries, not an entry itself. */
+} bcmolt_debug_key_id;
+
+/** Identifiers for all properties contained in the debug_reset_api_capture 
+ * group. 
+ */
+typedef enum bcmolt_debug_reset_api_capture_id
+{
+    BCMOLT_DEBUG_RESET_API_CAPTURE_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_debug_reset_api_capture_id;
+
+/** Identifiers for all properties contained in the debug_start_api_capture 
+ * group. 
+ */
+typedef enum bcmolt_debug_start_api_capture_id
+{
+    BCMOLT_DEBUG_START_API_CAPTURE_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_debug_start_api_capture_id;
+
+/** Identifiers for all properties contained in the debug_stop_api_capture 
+ * group. 
+ */
+typedef enum bcmolt_debug_stop_api_capture_id
+{
+    BCMOLT_DEBUG_STOP_API_CAPTURE_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_debug_stop_api_capture_id;
+
+/** Identifiers for all properties contained in the device_auto_cfg group. 
+ */
+typedef enum bcmolt_device_auto_cfg_id
+{
+    BCMOLT_DEVICE_AUTO_CFG_ID__BEGIN                    = 0,
+    BCMOLT_DEVICE_AUTO_CFG_ID_CONNECTION_COMPLETE       = 0,    /**< Connection Complete. */
+    BCMOLT_DEVICE_AUTO_CFG_ID_CONNECTION_ESTABLISHED    = 1,    /**< Connection Established (Internal). */
+    BCMOLT_DEVICE_AUTO_CFG_ID_CONNECTION_FAILURE        = 2,    /**< Connection Failure. */
+    BCMOLT_DEVICE_AUTO_CFG_ID_DDR_TEST_COMPLETE         = 3,    /**< DDR Test Complete. */
+    BCMOLT_DEVICE_AUTO_CFG_ID_DEVICE_KEEP_ALIVE         = 4,    /**< Device Keep Alive (Internal). */
+    BCMOLT_DEVICE_AUTO_CFG_ID_DEVICE_READY              = 5,    /**< Device Ready (Internal). */
+    BCMOLT_DEVICE_AUTO_CFG_ID_DISCONNECTION_COMPLETE    = 6,    /**< Disconnection Complete. */
+    BCMOLT_DEVICE_AUTO_CFG_ID_IMAGE_TRANSFER_COMPLETE   = 7,    /**< Image Transfer Complete. */
+    BCMOLT_DEVICE_AUTO_CFG_ID_INDICATIONS_DROPPED       = 8,    /**< Indications Dropped. */
+    BCMOLT_DEVICE_AUTO_CFG_ID_SW_ERROR                  = 9,    /**< sw error. */
+    BCMOLT_DEVICE_AUTO_CFG_ID_SW_EXCEPTION              = 10,   /**< sw exception. */
+    BCMOLT_DEVICE_AUTO_CFG_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_device_auto_cfg_id;
+
+/** Identifiers for all properties contained in the device_cfg group. 
+ */
+typedef enum bcmolt_device_cfg_id
+{
+    BCMOLT_DEVICE_CFG_ID__BEGIN                             = 0,
+    BCMOLT_DEVICE_CFG_ID_SYSTEM_MODE                        = 0,    /**< system_mode. */
+    BCMOLT_DEVICE_CFG_ID_KEEPALIVE_INTERVAL                 = 1,    /**< Device Keepalive Interval. */
+    BCMOLT_DEVICE_CFG_ID_KEEPALIVE_TOLERANCE                = 2,    /**< Device Keepalive tolerance . */
+    BCMOLT_DEVICE_CFG_ID_FIRMWARE_SW_VERSION                = 3,    /**< Firmware SW Version. */
+    BCMOLT_DEVICE_CFG_ID_HOST_SW_VERSION                    = 4,    /**< Host SW Version. */
+    BCMOLT_DEVICE_CFG_ID_CHIP_REVISION                      = 5,    /**< Chip Revision. */
+    BCMOLT_DEVICE_CFG_ID_STATE                              = 6,    /**< Device state. */
+    BCMOLT_DEVICE_CFG_ID_DEBUG                              = 7,    /**< debug parameters. */
+    BCMOLT_DEVICE_CFG_ID_NNI_SPEED                          = 8,    /**< NNI Speed. */
+    BCMOLT_DEVICE_CFG_ID_PROTECTION_SWITCHING_EXT_IRQ       = 9,    /**< Protection Switching External IRQ. */
+    BCMOLT_DEVICE_CFG_ID_EPON_CLOCK_TRANSPORT_SAMPLE_DELAY  = 10,   /**< EPON Clock Transport Sample Delay. */
+    BCMOLT_DEVICE_CFG_ID_INDICATION_SHAPING                 = 11,   /**< Indication Shaping. */
+    BCMOLT_DEVICE_CFG_ID_CHIP_TEMPERATURE                   = 12,   /**< chip temperature . */
+    BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_ENABLE              = 13,   /**< GPON/XGPON ToD enable. */
+    BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_GPIO_PIN            = 14,   /**< GPON/XGPON ToD GPIO pin. */
+    BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_CONNECTED_INTERNALLY= 15,   /**< GPON/XGPON is ToD internally. */
+    BCMOLT_DEVICE_CFG_ID_EPON_8021_AS_TOD_FORMAT            = 16,   /**< EPON 802.1AS ToD Format. */
+    BCMOLT_DEVICE_CFG_ID_EPON_SHAPER_MODE                   = 17,   /**< EPON Shaper Mode. */
+    BCMOLT_DEVICE_CFG_ID_EMBEDDED_IMAGE_LIST                = 18,   /**< Embedded image list. */
+    BCMOLT_DEVICE_CFG_ID_CHIP_VOLTAGE                       = 19,   /**< chip voltage. */
+    BCMOLT_DEVICE_CFG_ID_EPON_TOD_STRING                    = 20,   /**< EPON ToD String. */
+    BCMOLT_DEVICE_CFG_ID_XGPON_NUM_OF_ONUS                  = 21,   /**< xgpon num of onus. */
+    BCMOLT_DEVICE_CFG_ID_DEVICE_IP_ADDRESS                  = 22,   /**< Device IP Address. */
+    BCMOLT_DEVICE_CFG_ID_DEVICE_UDP_PORT                    = 23,   /**< Device UDP port. */
+    BCMOLT_DEVICE_CFG_ID_TOD_UART_BAUDRATE                  = 24,   /**< UART baudrate. */
+    BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_STRING_LENGTH       = 25,   /**< GPON/XGPON ToD string length. */
+    BCMOLT_DEVICE_CFG_ID__NUM_OF        /**< Number of enum entries, not an entry itself. */
+} bcmolt_device_cfg_id;
+
+/** Identifiers for all properties contained in the device_connect group. 
+ */
+typedef enum bcmolt_device_connect_id
+{
+    BCMOLT_DEVICE_CONNECT_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_device_connect_id;
+
+/** Identifiers for all properties contained in the device_connection_complete 
+ * group. 
+ */
+typedef enum bcmolt_device_connection_complete_id
+{
+    BCMOLT_DEVICE_CONNECTION_COMPLETE_ID__BEGIN             = 0,
+    BCMOLT_DEVICE_CONNECTION_COMPLETE_ID_STANDALONE         = 0,    /**< Standalone. */
+    BCMOLT_DEVICE_CONNECTION_COMPLETE_ID__NUM_OF                    /**< Number of enum entries, not an entry itself. */
+} bcmolt_device_connection_complete_id;
+
+/** Identifiers for all properties contained in the 
+ * device_connection_established group. 
+ */
+typedef enum bcmolt_device_connection_established_id
+{
+    BCMOLT_DEVICE_CONNECTION_ESTABLISHED_ID__NUM_OF                 /**< Number of enum entries, not an entry itself. */
+} bcmolt_device_connection_established_id;
+
+/** Identifiers for all properties contained in the device_connection_failure 
+ * group. 
+ */
+typedef enum bcmolt_device_connection_failure_id
+{
+    BCMOLT_DEVICE_CONNECTION_FAILURE_ID__BEGIN              = 0,
+    BCMOLT_DEVICE_CONNECTION_FAILURE_ID_REASON              = 0,    /**< Connection fail reason. */
+    BCMOLT_DEVICE_CONNECTION_FAILURE_ID__NUM_OF                     /**< Number of enum entries, not an entry itself. */
+} bcmolt_device_connection_failure_id;
+
+/** Identifiers for all properties contained in the device_ddr_test_complete 
+ * group. 
+ */
+typedef enum bcmolt_device_ddr_test_complete_id
+{
+    BCMOLT_DEVICE_DDR_TEST_COMPLETE_ID__BEGIN               = 0,
+    BCMOLT_DEVICE_DDR_TEST_COMPLETE_ID_DDR_TEST             = 0,    /**< DDR Test. */
+    BCMOLT_DEVICE_DDR_TEST_COMPLETE_ID__NUM_OF                      /**< Number of enum entries, not an entry itself. */
+} bcmolt_device_ddr_test_complete_id;
+
+/** Identifiers for all properties contained in the device_device_keep_alive 
+ * group. 
+ */
+typedef enum bcmolt_device_device_keep_alive_id
+{
+    BCMOLT_DEVICE_DEVICE_KEEP_ALIVE_ID__BEGIN               = 0,
+    BCMOLT_DEVICE_DEVICE_KEEP_ALIVE_ID_SEQUENCE_NUMBER      = 0,    /**< sequence number. */
+    BCMOLT_DEVICE_DEVICE_KEEP_ALIVE_ID_TIME_STAMP           = 1,    /**< time stamp. */
+    BCMOLT_DEVICE_DEVICE_KEEP_ALIVE_ID__NUM_OF                      /**< Number of enum entries, not an entry itself. */
+} bcmolt_device_device_keep_alive_id;
+
+/** Identifiers for all properties contained in the device_device_ready group. 
+ */
+typedef enum bcmolt_device_device_ready_id
+{
+    BCMOLT_DEVICE_DEVICE_READY_ID__BEGIN                    = 0,
+    BCMOLT_DEVICE_DEVICE_READY_ID_FIRMWARE_SW_VERSION       = 0,    /**< Software Version. */
+    BCMOLT_DEVICE_DEVICE_READY_ID_SYSTEM_MODE               = 1,    /**< System Mode. */
+    BCMOLT_DEVICE_DEVICE_READY_ID_NNI_SPEED                 = 2,    /**< NNI Speed. */
+    BCMOLT_DEVICE_DEVICE_READY_ID_CHIP_REVISION             = 3,    /**< Chip Revision. */
+    BCMOLT_DEVICE_DEVICE_READY_ID_TOD_ENABLE                = 4,    /**< ToD control. */
+    BCMOLT_DEVICE_DEVICE_READY_ID_TOD_GPIO_PIN              = 5,    /**< GPIO pin is used when ToD UART is not connected to the embedded, and TOD value is obtained by the host. */
+    BCMOLT_DEVICE_DEVICE_READY_ID__NUM_OF           /**< Number of enum entries, not an entry itself. */
+} bcmolt_device_device_ready_id;
+
+/** Identifiers for all properties contained in the device_disconnect group. 
+ */
+typedef enum bcmolt_device_disconnect_id
+{
+    BCMOLT_DEVICE_DISCONNECT_ID__NUM_OF             /**< Number of enum entries, not an entry itself. */
+} bcmolt_device_disconnect_id;
+
+/** Identifiers for all properties contained in the 
+ * device_disconnection_complete group. 
+ */
+typedef enum bcmolt_device_disconnection_complete_id
+{
+    BCMOLT_DEVICE_DISCONNECTION_COMPLETE_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_device_disconnection_complete_id;
+
+/** Identifiers for all properties contained in the device_host_keep_alive 
+ * group. 
+ */
+typedef enum bcmolt_device_host_keep_alive_id
+{
+    BCMOLT_DEVICE_HOST_KEEP_ALIVE_ID__BEGIN                 = 0,
+    BCMOLT_DEVICE_HOST_KEEP_ALIVE_ID_SEQUENCE_NUMBER        = 0,    /**< sequence number. */
+    BCMOLT_DEVICE_HOST_KEEP_ALIVE_ID_TIME_STAMP             = 1,    /**< time stamp. */
+    BCMOLT_DEVICE_HOST_KEEP_ALIVE_ID__NUM_OF                        /**< Number of enum entries, not an entry itself. */
+} bcmolt_device_host_keep_alive_id;
+
+/** Identifiers for all properties contained in the 
+ * device_image_transfer_complete group. 
+ */
+typedef enum bcmolt_device_image_transfer_complete_id
+{
+    BCMOLT_DEVICE_IMAGE_TRANSFER_COMPLETE_ID__BEGIN         = 0,
+    BCMOLT_DEVICE_IMAGE_TRANSFER_COMPLETE_ID_IMAGE_TYPE     = 0,    /**< Image type. */
+    BCMOLT_DEVICE_IMAGE_TRANSFER_COMPLETE_ID_BLOCK_NUMBER   = 1,    /**< Block number. */
+    BCMOLT_DEVICE_IMAGE_TRANSFER_COMPLETE_ID_STATUS         = 2,    /**< Status. */
+    BCMOLT_DEVICE_IMAGE_TRANSFER_COMPLETE_ID__NUM_OF                /**< Number of enum entries, not an entry itself. */
+} bcmolt_device_image_transfer_complete_id;
+
+/** Identifiers for all properties contained in the device_image_transfer_data 
+ * group. 
+ */
+typedef enum bcmolt_device_image_transfer_data_id
+{
+    BCMOLT_DEVICE_IMAGE_TRANSFER_DATA_ID__BEGIN             = 0,
+    BCMOLT_DEVICE_IMAGE_TRANSFER_DATA_ID_BLOCK_NUMBER       = 0,    /**< Block number. */
+    BCMOLT_DEVICE_IMAGE_TRANSFER_DATA_ID_MORE_DATA          = 1,    /**< More Data. */
+    BCMOLT_DEVICE_IMAGE_TRANSFER_DATA_ID_DATA               = 2,    /**< Data. */
+    BCMOLT_DEVICE_IMAGE_TRANSFER_DATA_ID__NUM_OF                    /**< Number of enum entries, not an entry itself. */
+} bcmolt_device_image_transfer_data_id;
+
+/** Identifiers for all properties contained in the device_image_transfer_start 
+ * group. 
+ */
+typedef enum bcmolt_device_image_transfer_start_id
+{
+    BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID__BEGIN            = 0,
+    BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID_IMAGE_TYPE        = 0,    /**< Image type. */
+    BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID_IMAGE_SIZE        = 1,    /**< Image Size. */
+    BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID_CRC32             = 2,    /**< CRC32. */
+    BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID_IMAGE_NAME        = 3,    /**< Image name. */
+    BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID__NUM_OF                   /**< Number of enum entries, not an entry itself. */
+} bcmolt_device_image_transfer_start_id;
+
+/** Identifiers for all properties contained in the device_indications_dropped 
+ * group. 
+ */
+typedef enum bcmolt_device_indications_dropped_id
+{
+    BCMOLT_DEVICE_INDICATIONS_DROPPED_ID__BEGIN             = 0,
+    BCMOLT_DEVICE_INDICATIONS_DROPPED_ID_TOTAL_COUNT        = 0,    /**< Total Count. */
+    BCMOLT_DEVICE_INDICATIONS_DROPPED_ID__NUM_OF                    /**< Number of enum entries, not an entry itself. */
+} bcmolt_device_indications_dropped_id;
+
+/** Identifiers for all properties contained in the device_key group. 
+ */
+typedef enum bcmolt_device_key_id
+{
+    BCMOLT_DEVICE_KEY_ID__BEGIN                             = 0,
+    BCMOLT_DEVICE_KEY_ID_RESERVED                           = 0,    /**< Reserved. */
+    BCMOLT_DEVICE_KEY_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_device_key_id;
+
+/** Identifiers for all properties contained in the device_reset group. 
+ */
+typedef enum bcmolt_device_reset_id
+{
+    BCMOLT_DEVICE_RESET_ID__BEGIN                           = 0,
+    BCMOLT_DEVICE_RESET_ID_MODE                             = 0,    /**< Mode. */
+    BCMOLT_DEVICE_RESET_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_device_reset_id;
+
+/** Identifiers for all properties contained in the device_run_ddr_test group. 
+ */
+typedef enum bcmolt_device_run_ddr_test_id
+{
+    BCMOLT_DEVICE_RUN_DDR_TEST_ID__BEGIN                    = 0,
+    BCMOLT_DEVICE_RUN_DDR_TEST_ID_CPU                       = 0,    /**< CPU. */
+    BCMOLT_DEVICE_RUN_DDR_TEST_ID_RAS_0                     = 1,    /**< RAS 0. */
+    BCMOLT_DEVICE_RUN_DDR_TEST_ID_RAS_1                     = 2,    /**< RAS 1. */
+    BCMOLT_DEVICE_RUN_DDR_TEST_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_device_run_ddr_test_id;
+
+/** Identifiers for all properties contained in the device_sw_error group. 
+ */
+typedef enum bcmolt_device_sw_error_id
+{
+    BCMOLT_DEVICE_SW_ERROR_ID__BEGIN                        = 0,
+    BCMOLT_DEVICE_SW_ERROR_ID_TASK_NAME                     = 0,    /**< task name. */
+    BCMOLT_DEVICE_SW_ERROR_ID_FILE_NAME                     = 1,    /**< file name. */
+    BCMOLT_DEVICE_SW_ERROR_ID_LINE_NUMBER                   = 2,    /**< line number. */
+    BCMOLT_DEVICE_SW_ERROR_ID_PON_NI                        = 3,    /**< pon_ni. */
+    BCMOLT_DEVICE_SW_ERROR_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_device_sw_error_id;
+
+/** Identifiers for all properties contained in the device_sw_exception group. 
+ */
+typedef enum bcmolt_device_sw_exception_id
+{
+    BCMOLT_DEVICE_SW_EXCEPTION_ID__BEGIN                    = 0,
+    BCMOLT_DEVICE_SW_EXCEPTION_ID_CPU_ID                    = 0,    /**< CPU ID. */
+    BCMOLT_DEVICE_SW_EXCEPTION_ID_TEXT                      = 1,    /**< text. */
+    BCMOLT_DEVICE_SW_EXCEPTION_ID__NUM_OF           /**< Number of enum entries, not an entry itself. */
+} bcmolt_device_sw_exception_id;
+
+/** Identifiers for all properties contained in the device_sw_upgrade_activate 
+ * group. 
+ */
+typedef enum bcmolt_device_sw_upgrade_activate_id
+{
+    BCMOLT_DEVICE_SW_UPGRADE_ACTIVATE_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_device_sw_upgrade_activate_id;
+
+/** Identifiers for all properties contained in the epon_denied_link_auto_cfg 
+ * group. 
+ */
+typedef enum bcmolt_epon_denied_link_auto_cfg_id
+{
+    BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID__BEGIN                      = 0,
+    BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_LASER_ON_OFF_VIOLATION      = 0,    /**< Laser On/Off Violation. */
+    BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_LLID_POOL_EMPTY_VIOLATION   = 1,    /**< LLID Pool Empty Violation. */
+    BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_MAX_LINK_VIOLATION          = 2,    /**< Max Link Violation. */
+    BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_OVERHEAD_PROFILE_VIOLATION  = 3,    /**< Overhead Profile Violation. */
+    BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_RANGE_VIOLATION             = 4,    /**< Range Violation. */
+    BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_ROGUE_VIOLATION             = 5,    /**< Rogue ONU Detected. */
+    BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_SYSTEM_RESOURCE_VIOLATION   = 6,    /**< System Resource Violation. */
+    BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_TDM_CHANNELS_EXHAUSTED      = 7,    /**< TDM Channels Exhausted. */
+    BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_UNKNOWN_LINK_VIOLATION      = 8,    /**< Unknown Link Violation. */
+    BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_UPSTREAM_BANDWIDTH_VIOLATION= 9,    /**< Upstream Bandwidth Violation. */
+    BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_denied_link_auto_cfg_id;
+
+/** Identifiers for all properties contained in the epon_denied_link_cfg group. 
+ */
+typedef enum bcmolt_epon_denied_link_cfg_id
+{
+    BCMOLT_EPON_DENIED_LINK_CFG_ID__BEGIN                           = 0,
+    BCMOLT_EPON_DENIED_LINK_CFG_ID_ALARM_STATE                      = 0,    /**< Alarm State. */
+    BCMOLT_EPON_DENIED_LINK_CFG_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_denied_link_cfg_id;
+
+/** Identifiers for all properties contained in the epon_denied_link_key group. 
+ */
+typedef enum bcmolt_epon_denied_link_key_id
+{
+    BCMOLT_EPON_DENIED_LINK_KEY_ID__BEGIN                           = 0,
+    BCMOLT_EPON_DENIED_LINK_KEY_ID_EPON_NI                          = 0,    /**< EPON NI Identifier. */
+    BCMOLT_EPON_DENIED_LINK_KEY_ID_MAC_ADDRESS                      = 1,    /**< MAC Address. */
+    BCMOLT_EPON_DENIED_LINK_KEY_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_denied_link_key_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_denied_link_laser_on_off_violation group. 
+ */
+typedef enum bcmolt_epon_denied_link_laser_on_off_violation_id
+{
+    BCMOLT_EPON_DENIED_LINK_LASER_ON_OFF_VIOLATION_ID__BEGIN        = 0,
+    BCMOLT_EPON_DENIED_LINK_LASER_ON_OFF_VIOLATION_ID_ALARM_STATUS  = 0,        /**< Alarm Status. */
+    BCMOLT_EPON_DENIED_LINK_LASER_ON_OFF_VIOLATION_ID__NUM_OF                   /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_denied_link_laser_on_off_violation_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_denied_link_llid_pool_empty_violation group. 
+ */
+typedef enum bcmolt_epon_denied_link_llid_pool_empty_violation_id
+{
+    BCMOLT_EPON_DENIED_LINK_LLID_POOL_EMPTY_VIOLATION_ID__BEGIN         = 0,
+    BCMOLT_EPON_DENIED_LINK_LLID_POOL_EMPTY_VIOLATION_ID_ALARM_STATUS   = 0,    /**< Alarm Status. */
+    BCMOLT_EPON_DENIED_LINK_LLID_POOL_EMPTY_VIOLATION_ID__NUM_OF                /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_denied_link_llid_pool_empty_violation_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_denied_link_max_link_violation group. 
+ */
+typedef enum bcmolt_epon_denied_link_max_link_violation_id
+{
+    BCMOLT_EPON_DENIED_LINK_MAX_LINK_VIOLATION_ID__BEGIN                = 0,
+    BCMOLT_EPON_DENIED_LINK_MAX_LINK_VIOLATION_ID_ALARM_STATUS          = 0,    /**< Alarm Status. */
+    BCMOLT_EPON_DENIED_LINK_MAX_LINK_VIOLATION_ID__NUM_OF                       /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_denied_link_max_link_violation_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_denied_link_overhead_profile_violation group. 
+ */
+typedef enum bcmolt_epon_denied_link_overhead_profile_violation_id
+{
+    BCMOLT_EPON_DENIED_LINK_OVERHEAD_PROFILE_VIOLATION_ID__BEGIN        = 0,
+    BCMOLT_EPON_DENIED_LINK_OVERHEAD_PROFILE_VIOLATION_ID_ALARM_STATUS  = 0,    /**< Alarm status. */
+    BCMOLT_EPON_DENIED_LINK_OVERHEAD_PROFILE_VIOLATION_ID__NUM_OF               /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_denied_link_overhead_profile_violation_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_denied_link_range_violation group. 
+ */
+typedef enum bcmolt_epon_denied_link_range_violation_id
+{
+    BCMOLT_EPON_DENIED_LINK_RANGE_VIOLATION_ID__BEGIN                   = 0,
+    BCMOLT_EPON_DENIED_LINK_RANGE_VIOLATION_ID_ALARM_STATUS             = 0,    /**< Alarm Status. */
+    BCMOLT_EPON_DENIED_LINK_RANGE_VIOLATION_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_denied_link_range_violation_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_denied_link_rogue_violation group. 
+ */
+typedef enum bcmolt_epon_denied_link_rogue_violation_id
+{
+    BCMOLT_EPON_DENIED_LINK_ROGUE_VIOLATION_ID__BEGIN                   = 0,
+    BCMOLT_EPON_DENIED_LINK_ROGUE_VIOLATION_ID_ALARM_STATUS             = 0,    /**< Alarm Status. */
+    BCMOLT_EPON_DENIED_LINK_ROGUE_VIOLATION_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_denied_link_rogue_violation_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_denied_link_system_resource_violation group. 
+ */
+typedef enum bcmolt_epon_denied_link_system_resource_violation_id
+{
+    BCMOLT_EPON_DENIED_LINK_SYSTEM_RESOURCE_VIOLATION_ID__BEGIN         = 0,
+    BCMOLT_EPON_DENIED_LINK_SYSTEM_RESOURCE_VIOLATION_ID_ALARM_STATUS   = 0,    /**< Alarm Status. */
+    BCMOLT_EPON_DENIED_LINK_SYSTEM_RESOURCE_VIOLATION_ID__NUM_OF                /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_denied_link_system_resource_violation_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_denied_link_tdm_channels_exhausted group. 
+ */
+typedef enum bcmolt_epon_denied_link_tdm_channels_exhausted_id
+{
+    BCMOLT_EPON_DENIED_LINK_TDM_CHANNELS_EXHAUSTED_ID__BEGIN            = 0,
+    BCMOLT_EPON_DENIED_LINK_TDM_CHANNELS_EXHAUSTED_ID_ALARM_STATUS      = 0,    /**< Alarm Status. */
+    BCMOLT_EPON_DENIED_LINK_TDM_CHANNELS_EXHAUSTED_ID__NUM_OF                   /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_denied_link_tdm_channels_exhausted_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_denied_link_unknown_link_violation group. 
+ */
+typedef enum bcmolt_epon_denied_link_unknown_link_violation_id
+{
+    BCMOLT_EPON_DENIED_LINK_UNKNOWN_LINK_VIOLATION_ID__BEGIN            = 0,
+    BCMOLT_EPON_DENIED_LINK_UNKNOWN_LINK_VIOLATION_ID_ALARM_STATUS      = 0,    /**< Alarm Status. */
+    BCMOLT_EPON_DENIED_LINK_UNKNOWN_LINK_VIOLATION_ID__NUM_OF                   /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_denied_link_unknown_link_violation_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_denied_link_upstream_bandwidth_violation group. 
+ */
+typedef enum bcmolt_epon_denied_link_upstream_bandwidth_violation_id
+{
+    BCMOLT_EPON_DENIED_LINK_UPSTREAM_BANDWIDTH_VIOLATION_ID__BEGIN      = 0,
+    BCMOLT_EPON_DENIED_LINK_UPSTREAM_BANDWIDTH_VIOLATION_ID_ALARM_STATUS= 0,    /**< Alarm Status. */
+    BCMOLT_EPON_DENIED_LINK_UPSTREAM_BANDWIDTH_VIOLATION_ID__NUM_OF             /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_denied_link_upstream_bandwidth_violation_id;
+
+/** Identifiers for all properties contained in the epon_link_auto_cfg group. 
+ */
+typedef enum bcmolt_epon_link_auto_cfg_id
+{
+    BCMOLT_EPON_LINK_AUTO_CFG_ID__BEGIN                                 = 0,
+    BCMOLT_EPON_LINK_AUTO_CFG_ID_DUPLICATE_MPCP_REGISTRATION_REQUEST    = 0,    /**< Duplicate MPCP Registration Request. */
+    BCMOLT_EPON_LINK_AUTO_CFG_ID_ENCRYPTION_ENABLED                     = 1,    /**< Encryption Enabled. */
+    BCMOLT_EPON_LINK_AUTO_CFG_ID_KEY_EXCHANGE_FAILURE                   = 2,    /**< Key Exchange Failure. */
+    BCMOLT_EPON_LINK_AUTO_CFG_ID_KEY_EXCHANGE_STARTED                   = 3,    /**< key_exchange_started. */
+    BCMOLT_EPON_LINK_AUTO_CFG_ID_KEY_EXCHANGE_STOPPED                   = 4,    /**< key_exchange_stopped. */
+    BCMOLT_EPON_LINK_AUTO_CFG_ID_LINK_DELETED                           = 5,    /**< Link Deleted. */
+    BCMOLT_EPON_LINK_AUTO_CFG_ID_LINK_SPEED_MISMATCH                    = 6,    /**< Link attempted to register at a different speed. */
+    BCMOLT_EPON_LINK_AUTO_CFG_ID_MPCP_DEREGISTERED                      = 7,    /**< MPCP Deregistered. */
+    BCMOLT_EPON_LINK_AUTO_CFG_ID_MPCP_DISCOVERED                        = 8,    /**< MPCP Discovered. */
+    BCMOLT_EPON_LINK_AUTO_CFG_ID_MPCP_REG_ACK_TIMEOUT                   = 9,    /**< MPCP Reg Ack Timeout. */
+    BCMOLT_EPON_LINK_AUTO_CFG_ID_MPCP_REPORT_TIMEOUT                    = 10,   /**< MPCP Report Timeout. */
+    BCMOLT_EPON_LINK_AUTO_CFG_ID_OAM_KEEPALIVE_TIMEOUT                  = 11,   /**< OAM Keepalive Timeout. */
+    BCMOLT_EPON_LINK_AUTO_CFG_ID_OAM_KEEPALIVE_TIMER_STARTED            = 12,   /**< OAM keepalive timer started. */
+    BCMOLT_EPON_LINK_AUTO_CFG_ID_OAM_KEEPALIVE_TIMER_STOPPED            = 13,   /**< OAM keepalive timer stopped. */
+    BCMOLT_EPON_LINK_AUTO_CFG_ID_PREPROVISIONED_LINK_CREATED            = 14,   /**< Preprovisioned Link Created. */
+    BCMOLT_EPON_LINK_AUTO_CFG_ID_PROTECTION_SWITCH_OCCURRED             = 15,   /**< Protection Switch Occurred. */
+    BCMOLT_EPON_LINK_AUTO_CFG_ID_RANGE_VALUE_CHANGED                    = 16,   /**< Range Value Changed. */
+    BCMOLT_EPON_LINK_AUTO_CFG_ID_RERANGE_FAILURE                        = 17,   /**< Re-range failure. */
+    BCMOLT_EPON_LINK_AUTO_CFG_ID_STAT_ALARM_CLEARED                     = 18,   /**< Stat Alarm Cleared. */
+    BCMOLT_EPON_LINK_AUTO_CFG_ID_STAT_ALARM_RAISED                      = 19,   /**< Stat Alarm Raised. */
+    BCMOLT_EPON_LINK_AUTO_CFG_ID_STATIC_REGISTRATION_DONE               = 20,   /**< Static registration done. */
+    BCMOLT_EPON_LINK_AUTO_CFG_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_link_auto_cfg_id;
+
+/** Identifiers for all properties contained in the epon_link_cfg group. 
+ */
+typedef enum bcmolt_epon_link_cfg_id
+{
+    BCMOLT_EPON_LINK_CFG_ID__BEGIN                                      = 0,
+    BCMOLT_EPON_LINK_CFG_ID_LINK_RATE                                   = 0,    /**< EPON link rate. */
+    BCMOLT_EPON_LINK_CFG_ID_STATE_FLAGS                                 = 1,    /**< EPON link state flags. */
+    BCMOLT_EPON_LINK_CFG_ID_LLID                                        = 2,    /**< EPON logical link identifier. */
+    BCMOLT_EPON_LINK_CFG_ID_LASER_ON_TIME_TQ                            = 3,    /**< Laser-on time (TQ). */
+    BCMOLT_EPON_LINK_CFG_ID_LASER_OFF_TIME_TQ                           = 4,    /**< Laser-off time (TQ). */
+    BCMOLT_EPON_LINK_CFG_ID_RANGE_VALUE_TQ                              = 5,    /**< Range value (TQ). */
+    BCMOLT_EPON_LINK_CFG_ID_DISTANCE                                    = 6,    /**< Distance. */
+    BCMOLT_EPON_LINK_CFG_ID_ALARM_STATE                                 = 7,    /**< Alarm State. */
+    BCMOLT_EPON_LINK_CFG_ID_TUNNEL_ID                                   = 8,    /**< Tunnel ID. */
+    BCMOLT_EPON_LINK_CFG_ID_ONU_ID                                      = 9,    /**< Associated ONU. */
+    BCMOLT_EPON_LINK_CFG_ID_MIN_LASER_OVERHEAD                          = 10,   /**< Min Laser Overhead. */
+    BCMOLT_EPON_LINK_CFG_ID_KEY_EXCHANGE_CONFIG                         = 11,   /**< Key exchange configuration. */
+    BCMOLT_EPON_LINK_CFG_ID_EPON_ENCRYPTION                             = 12,   /**< EPON Encryption . */
+    BCMOLT_EPON_LINK_CFG_ID_FEC_ENABLE                                  = 13,   /**< FEC enable. */
+    BCMOLT_EPON_LINK_CFG_ID_OAM_HEARTBEAT_CONFIG                        = 14,   /**< OAM heartbeat configuration. */
+    BCMOLT_EPON_LINK_CFG_ID_UPSTREAM_BANDWIDTH                          = 15,   /**< Upstream Bandwidth. */
+    BCMOLT_EPON_LINK_CFG_ID_UBD_INFO                                    = 16,   /**< UBD Info. */
+    BCMOLT_EPON_LINK_CFG_ID_CLOCK_TRANSPORT_ENABLE                      = 17,   /**< Clock Transport Enable. */
+    BCMOLT_EPON_LINK_CFG_ID_PENDING_GRANTS                              = 18,   /**< Pending grants. */
+    BCMOLT_EPON_LINK_CFG_ID_LINK_TYPE                                   = 19,   /**< Link Type. */
+    BCMOLT_EPON_LINK_CFG_ID__NUM_OF         /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_link_cfg_id;
+
+/** Identifiers for all properties contained in the epon_link_delete_link group. 
+ */
+typedef enum bcmolt_epon_link_delete_link_id
+{
+    BCMOLT_EPON_LINK_DELETE_LINK_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_link_delete_link_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_link_duplicate_mpcp_registration_request group. 
+ */
+typedef enum bcmolt_epon_link_duplicate_mpcp_registration_request_id
+{
+    BCMOLT_EPON_LINK_DUPLICATE_MPCP_REGISTRATION_REQUEST_ID__BEGIN          = 0,
+    BCMOLT_EPON_LINK_DUPLICATE_MPCP_REGISTRATION_REQUEST_ID_INITIAL_RANGE_TQ= 0,    /**< Initial range. */
+    BCMOLT_EPON_LINK_DUPLICATE_MPCP_REGISTRATION_REQUEST_ID_CURRENT_RANGE_TQ= 1,    /**< Current range. */
+    BCMOLT_EPON_LINK_DUPLICATE_MPCP_REGISTRATION_REQUEST_ID__NUM_OF                 /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_link_duplicate_mpcp_registration_request_id;
+
+/** Identifiers for all properties contained in the epon_link_encryption_enabled 
+ * group. 
+ */
+typedef enum bcmolt_epon_link_encryption_enabled_id
+{
+    BCMOLT_EPON_LINK_ENCRYPTION_ENABLED_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_link_encryption_enabled_id;
+
+/** Identifiers for all properties contained in the epon_link_force_rediscovery 
+ * group. 
+ */
+typedef enum bcmolt_epon_link_force_rediscovery_id
+{
+    BCMOLT_EPON_LINK_FORCE_REDISCOVERY_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_link_force_rediscovery_id;
+
+/** Identifiers for all properties contained in the epon_link_frame_captured 
+ * group. 
+ */
+typedef enum bcmolt_epon_link_frame_captured_id
+{
+    BCMOLT_EPON_LINK_FRAME_CAPTURED_ID__BEGIN                               = 0,
+    BCMOLT_EPON_LINK_FRAME_CAPTURED_ID_FRAME                                = 0,    /**< Received frame. */
+    BCMOLT_EPON_LINK_FRAME_CAPTURED_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_link_frame_captured_id;
+
+/** Identifiers for all properties contained in the epon_link_inject_frame 
+ * group. 
+ */
+typedef enum bcmolt_epon_link_inject_frame_id
+{
+    BCMOLT_EPON_LINK_INJECT_FRAME_ID__BEGIN                                 = 0,
+    BCMOLT_EPON_LINK_INJECT_FRAME_ID_FRAME                                  = 0,    /**< Frame to transmit. */
+    BCMOLT_EPON_LINK_INJECT_FRAME_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_link_inject_frame_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_link_key_exchange_failure group. 
+ */
+typedef enum bcmolt_epon_link_key_exchange_failure_id
+{
+    BCMOLT_EPON_LINK_KEY_EXCHANGE_FAILURE_ID__BEGIN                         = 0,
+    BCMOLT_EPON_LINK_KEY_EXCHANGE_FAILURE_ID_ALARM_STATUS                   = 0,    /**< alarm status. */
+    BCMOLT_EPON_LINK_KEY_EXCHANGE_FAILURE_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_link_key_exchange_failure_id;
+
+/** Identifiers for all properties contained in the epon_link_key_exchange_start 
+ * group. 
+ */
+typedef enum bcmolt_epon_link_key_exchange_start_id
+{
+    BCMOLT_EPON_LINK_KEY_EXCHANGE_START_ID__BEGIN                           = 0,
+    BCMOLT_EPON_LINK_KEY_EXCHANGE_START_ID_PERIOD                           = 0,    /**< period. */
+    BCMOLT_EPON_LINK_KEY_EXCHANGE_START_ID__NUM_OF      /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_link_key_exchange_start_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_link_key_exchange_started group. 
+ */
+typedef enum bcmolt_epon_link_key_exchange_started_id
+{
+    BCMOLT_EPON_LINK_KEY_EXCHANGE_STARTED_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_link_key_exchange_started_id;
+
+/** Identifiers for all properties contained in the epon_link_key_exchange_stop 
+ * group. 
+ */
+typedef enum bcmolt_epon_link_key_exchange_stop_id
+{
+    BCMOLT_EPON_LINK_KEY_EXCHANGE_STOP_ID__NUM_OF       /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_link_key_exchange_stop_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_link_key_exchange_stopped group. 
+ */
+typedef enum bcmolt_epon_link_key_exchange_stopped_id
+{
+    BCMOLT_EPON_LINK_KEY_EXCHANGE_STOPPED_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_link_key_exchange_stopped_id;
+
+/** Identifiers for all properties contained in the epon_link_key group. 
+ */
+typedef enum bcmolt_epon_link_key_id
+{
+    BCMOLT_EPON_LINK_KEY_ID__BEGIN                                          = 0,
+    BCMOLT_EPON_LINK_KEY_ID_EPON_NI                                         = 0,    /**< EPON NI identifier. */
+    BCMOLT_EPON_LINK_KEY_ID_MAC_ADDRESS                                     = 1,    /**< MAC address. */
+    BCMOLT_EPON_LINK_KEY_ID__NUM_OF             /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_link_key_id;
+
+/** Identifiers for all properties contained in the epon_link_link_deleted 
+ * group. 
+ */
+typedef enum bcmolt_epon_link_link_deleted_id
+{
+    BCMOLT_EPON_LINK_LINK_DELETED_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_link_link_deleted_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_link_link_speed_mismatch group. 
+ */
+typedef enum bcmolt_epon_link_link_speed_mismatch_id
+{
+    BCMOLT_EPON_LINK_LINK_SPEED_MISMATCH_ID__BEGIN                          = 0,
+    BCMOLT_EPON_LINK_LINK_SPEED_MISMATCH_ID_PREVIOUS_RATE                   = 0,    /**< Previous rate. */
+    BCMOLT_EPON_LINK_LINK_SPEED_MISMATCH_ID_CURRENT_RATE                    = 1,    /**< Current rate. */
+    BCMOLT_EPON_LINK_LINK_SPEED_MISMATCH_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_link_link_speed_mismatch_id;
+
+/** Identifiers for all properties contained in the epon_link_mpcp_deregistered 
+ * group. 
+ */
+typedef enum bcmolt_epon_link_mpcp_deregistered_id
+{
+    BCMOLT_EPON_LINK_MPCP_DEREGISTERED_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_link_mpcp_deregistered_id;
+
+/** Identifiers for all properties contained in the epon_link_mpcp_discovered 
+ * group. 
+ */
+typedef enum bcmolt_epon_link_mpcp_discovered_id
+{
+    BCMOLT_EPON_LINK_MPCP_DISCOVERED_ID__BEGIN                              = 0,
+    BCMOLT_EPON_LINK_MPCP_DISCOVERED_ID_LINK_INFO                           = 0,    /**< Link information. */
+    BCMOLT_EPON_LINK_MPCP_DISCOVERED_ID__NUM_OF         /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_link_mpcp_discovered_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_link_mpcp_reg_ack_timeout group. 
+ */
+typedef enum bcmolt_epon_link_mpcp_reg_ack_timeout_id
+{
+    BCMOLT_EPON_LINK_MPCP_REG_ACK_TIMEOUT_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_link_mpcp_reg_ack_timeout_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_link_mpcp_report_timeout group. 
+ */
+typedef enum bcmolt_epon_link_mpcp_report_timeout_id
+{
+    BCMOLT_EPON_LINK_MPCP_REPORT_TIMEOUT_ID__BEGIN                          = 0,
+    BCMOLT_EPON_LINK_MPCP_REPORT_TIMEOUT_ID_ALARM_STATUS                    = 0,    /**< Alarm Status. */
+    BCMOLT_EPON_LINK_MPCP_REPORT_TIMEOUT_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_link_mpcp_report_timeout_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_link_oam_keepalive_timeout group. 
+ */
+typedef enum bcmolt_epon_link_oam_keepalive_timeout_id
+{
+    BCMOLT_EPON_LINK_OAM_KEEPALIVE_TIMEOUT_ID__BEGIN                        = 0,
+    BCMOLT_EPON_LINK_OAM_KEEPALIVE_TIMEOUT_ID_ALARM_STATUS                  = 0,    /**< Alarm Status. */
+    BCMOLT_EPON_LINK_OAM_KEEPALIVE_TIMEOUT_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_link_oam_keepalive_timeout_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_link_oam_keepalive_timer_start group. 
+ */
+typedef enum bcmolt_epon_link_oam_keepalive_timer_start_id
+{
+    BCMOLT_EPON_LINK_OAM_KEEPALIVE_TIMER_START_ID__BEGIN                    = 0,
+    BCMOLT_EPON_LINK_OAM_KEEPALIVE_TIMER_START_ID_SEND_PERIOD               = 0,    /**< Send period. */
+    BCMOLT_EPON_LINK_OAM_KEEPALIVE_TIMER_START_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_link_oam_keepalive_timer_start_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_link_oam_keepalive_timer_started group. 
+ */
+typedef enum bcmolt_epon_link_oam_keepalive_timer_started_id
+{
+    BCMOLT_EPON_LINK_OAM_KEEPALIVE_TIMER_STARTED_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_link_oam_keepalive_timer_started_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_link_oam_keepalive_timer_stop group. 
+ */
+typedef enum bcmolt_epon_link_oam_keepalive_timer_stop_id
+{
+    BCMOLT_EPON_LINK_OAM_KEEPALIVE_TIMER_STOP_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_link_oam_keepalive_timer_stop_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_link_oam_keepalive_timer_stopped group. 
+ */
+typedef enum bcmolt_epon_link_oam_keepalive_timer_stopped_id
+{
+    BCMOLT_EPON_LINK_OAM_KEEPALIVE_TIMER_STOPPED_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_link_oam_keepalive_timer_stopped_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_link_preprovisioned_link_created group. 
+ */
+typedef enum bcmolt_epon_link_preprovisioned_link_created_id
+{
+    BCMOLT_EPON_LINK_PREPROVISIONED_LINK_CREATED_ID__BEGIN                  = 0,
+    BCMOLT_EPON_LINK_PREPROVISIONED_LINK_CREATED_ID_LINK_INFO               = 0,    /**< Link information. */
+    BCMOLT_EPON_LINK_PREPROVISIONED_LINK_CREATED_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_link_preprovisioned_link_created_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_link_protection_switch_occurred group. 
+ */
+typedef enum bcmolt_epon_link_protection_switch_occurred_id
+{
+    BCMOLT_EPON_LINK_PROTECTION_SWITCH_OCCURRED_ID__BEGIN                   = 0,
+    BCMOLT_EPON_LINK_PROTECTION_SWITCH_OCCURRED_ID_PROTECTION_STATUS        = 0,    /**< Protection status. */
+    BCMOLT_EPON_LINK_PROTECTION_SWITCH_OCCURRED_ID_RANGE_VALUE_TQ           = 1,    /**< Range value in time quanta. */
+    BCMOLT_EPON_LINK_PROTECTION_SWITCH_OCCURRED_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_link_protection_switch_occurred_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_link_range_value_changed group. 
+ */
+typedef enum bcmolt_epon_link_range_value_changed_id
+{
+    BCMOLT_EPON_LINK_RANGE_VALUE_CHANGED_ID__BEGIN                          = 0,
+    BCMOLT_EPON_LINK_RANGE_VALUE_CHANGED_ID_RANGE_VALUE_TQ                  = 0,    /**< Range value in time quanta. */
+    BCMOLT_EPON_LINK_RANGE_VALUE_CHANGED_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_link_range_value_changed_id;
+
+/** Identifiers for all properties contained in the epon_link_rerange_failure 
+ * group. 
+ */
+typedef enum bcmolt_epon_link_rerange_failure_id
+{
+    BCMOLT_EPON_LINK_RERANGE_FAILURE_ID__NUM_OF     /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_link_rerange_failure_id;
+
+/** Identifiers for all properties contained in the epon_link_stat_alarm_cleared 
+ * group. 
+ */
+typedef enum bcmolt_epon_link_stat_alarm_cleared_id
+{
+    BCMOLT_EPON_LINK_STAT_ALARM_CLEARED_ID__BEGIN                           = 0,
+    BCMOLT_EPON_LINK_STAT_ALARM_CLEARED_ID_STAT                             = 0,    /**< Statistic ID. */
+    BCMOLT_EPON_LINK_STAT_ALARM_CLEARED_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_link_stat_alarm_cleared_id;
+
+/** Identifiers for all properties contained in the epon_link_stat_alarm_raised 
+ * group. 
+ */
+typedef enum bcmolt_epon_link_stat_alarm_raised_id
+{
+    BCMOLT_EPON_LINK_STAT_ALARM_RAISED_ID__BEGIN                            = 0,
+    BCMOLT_EPON_LINK_STAT_ALARM_RAISED_ID_STAT                              = 0,    /**< Statistic ID. */
+    BCMOLT_EPON_LINK_STAT_ALARM_RAISED_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_link_stat_alarm_raised_id;
+
+/** Identifiers for all properties contained in the epon_link_stat_cfg group. 
+ */
+typedef enum bcmolt_epon_link_stat_cfg_id
+{
+    BCMOLT_EPON_LINK_STAT_CFG_ID__BEGIN                                     = 0,
+    BCMOLT_EPON_LINK_STAT_CFG_ID_CFG                                        = 0,    /**< Configuration. */
+    BCMOLT_EPON_LINK_STAT_CFG_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_link_stat_cfg_id;
+
+/** Identifiers for all properties contained in the epon_link_stat group. 
+ */
+typedef enum bcmolt_epon_link_stat_id
+{
+    BCMOLT_EPON_LINK_STAT_ID__BEGIN                                         = 0,
+    BCMOLT_EPON_LINK_STAT_ID_RX_DATA_BYTES                                  = 0,    /**< Data Bytes RX. */
+    BCMOLT_EPON_LINK_STAT_ID_RX_DATA_FRAMES                                 = 1,    /**< Data Frames RX. */
+    BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_64                                   = 2,    /**< 64 Byte Frames RX. */
+    BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_65_127                               = 3,    /**< 65-127 Byte Frames RX. */
+    BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_128_255                              = 4,    /**< 128-255 Byte Frames RX. */
+    BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_256_511                              = 5,    /**< 256-511 Byte Frames RX. */
+    BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_512_1023                             = 6,    /**< 512-1023 Byte Frames RX. */
+    BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_1024_1518                            = 7,    /**< 1024-1518 Byte Frames RX. */
+    BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_1519_2047                            = 8,    /**< 1519-2047 Byte Frames RX. */
+    BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_2048_4095                            = 9,    /**< 2048-4095 Byte Frames RX. */
+    BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_4096_9216                            = 10,   /**< 4096-9216 Byte Frames RX. */
+    BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_9217_16383                           = 11,   /**< 9217-16383 Byte Frames RX. */
+    BCMOLT_EPON_LINK_STAT_ID_RX_OAM_BYTES                                   = 12,   /**< OAM Bytes RX. */
+    BCMOLT_EPON_LINK_STAT_ID_RX_OAM_FRAMES                                  = 13,   /**< OAM Frames RX. */
+    BCMOLT_EPON_LINK_STAT_ID_RX_MPCP_FRAMES                                 = 14,   /**< MPCP Frames RX. */
+    BCMOLT_EPON_LINK_STAT_ID_RX_BROADCAST_FRAMES                            = 15,   /**< Broadcast Frames RX. */
+    BCMOLT_EPON_LINK_STAT_ID_RX_UNICAST_FRAMES                              = 16,   /**< Unicast Frames RX. */
+    BCMOLT_EPON_LINK_STAT_ID_RX_MULTICAST_FRAMES                            = 17,   /**< Multicast Frames RX. */
+    BCMOLT_EPON_LINK_STAT_ID_RX_REPORT_FRAMES                               = 18,   /**< Report Frames RX. */
+    BCMOLT_EPON_LINK_STAT_ID_RX_FCS_ERROR                                   = 19,   /**< FCS Error RX. */
+    BCMOLT_EPON_LINK_STAT_ID_RX_OVERSIZE_ERROR                              = 20,   /**< Oversize Error RX. */
+    BCMOLT_EPON_LINK_STAT_ID_RX_RUNT_ERROR                                  = 21,   /**< Runt Error RX. */
+    BCMOLT_EPON_LINK_STAT_ID_RX_LINE_CODE_ERROR                             = 22,   /**< Line Code Error RX. */
+    BCMOLT_EPON_LINK_STAT_ID_RX_LINE_CODE_ERROR_MAX                         = 23,   /**< Line Code Error Max RX. */
+    BCMOLT_EPON_LINK_STAT_ID_TX_DATA_BYTES                                  = 24,   /**< Data Bytes TX. */
+    BCMOLT_EPON_LINK_STAT_ID_TX_DATA_FRAMES                                 = 25,   /**< Data Frames TX. */
+    BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_64                                   = 26,   /**< 64 Byte Frames TX. */
+    BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_65_127                               = 27,   /**< 65-127 Byte Frames TX. */
+    BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_128_255                              = 28,   /**< 128-255 Byte Frames TX. */
+    BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_256_511                              = 29,   /**< 256-511 Byte Frames TX. */
+    BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_512_1023                             = 30,   /**< 512-1023 Byte Frames TX. */
+    BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_1024_1518                            = 31,   /**< 1024-1518 Byte Frames TX. */
+    BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_1519_2047                            = 32,   /**< 1519-2047 Byte Frames TX. */
+    BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_2048_4095                            = 33,   /**< 2048-4095 Byte Frames TX. */
+    BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_4096_9216                            = 34,   /**< 4096-9216 Byte Frames TX. */
+    BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_9217_16383                           = 35,   /**< 9217-16383 Byte Frames TX. */
+    BCMOLT_EPON_LINK_STAT_ID_TX_OAM_BYTES                                   = 36,   /**< OAM Bytes TX. */
+    BCMOLT_EPON_LINK_STAT_ID_TX_OAM_FRAMES                                  = 37,   /**< OAM Frames TX. */
+    BCMOLT_EPON_LINK_STAT_ID_TX_MPCP_FRAMES                                 = 38,   /**< MPCP Frames TX. */
+    BCMOLT_EPON_LINK_STAT_ID_TX_BROADCAST_FRAMES                            = 39,   /**< Broadcast Frames TX. */
+    BCMOLT_EPON_LINK_STAT_ID_TX_UNICAST_FRAMES                              = 40,   /**< Unicast Frames TX. */
+    BCMOLT_EPON_LINK_STAT_ID_TX_MULTICAST_FRAMES                            = 41,   /**< Multicast Frames TX. */
+    BCMOLT_EPON_LINK_STAT_ID_TX_GATES                                       = 42,   /**< Gates TX. */
+    BCMOLT_EPON_LINK_STAT_ID__NUM_OF                        /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_link_stat_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_link_static_registration_done group. 
+ */
+typedef enum bcmolt_epon_link_static_registration_done_id
+{
+    BCMOLT_EPON_LINK_STATIC_REGISTRATION_DONE_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_link_static_registration_done_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_link_static_registration group. 
+ */
+typedef enum bcmolt_epon_link_static_registration_id
+{
+    BCMOLT_EPON_LINK_STATIC_REGISTRATION_ID__BEGIN                          = 0,
+    BCMOLT_EPON_LINK_STATIC_REGISTRATION_ID_LASERON_TIME_TQ                 = 0,    /**< Laser-on time (TQ). */
+    BCMOLT_EPON_LINK_STATIC_REGISTRATION_ID_LASEROFF_TIME_TQ                = 1,    /**< Laser-off time (TQ). */
+    BCMOLT_EPON_LINK_STATIC_REGISTRATION_ID_RANGE_VALUE_TQ                  = 2,    /**< Range value (TQ). */
+    BCMOLT_EPON_LINK_STATIC_REGISTRATION_ID_PENDING_GRANTS                  = 3,    /**< Pending Grants. */
+    BCMOLT_EPON_LINK_STATIC_REGISTRATION_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_link_static_registration_id;
+
+/** Identifiers for all properties contained in the epon_ni_add_link group. 
+ */
+typedef enum bcmolt_epon_ni_add_link_id
+{
+    BCMOLT_EPON_NI_ADD_LINK_ID__BEGIN                                       = 0,
+    BCMOLT_EPON_NI_ADD_LINK_ID_MAC_ADDRESS                                  = 0,    /**< MAC address. */
+    BCMOLT_EPON_NI_ADD_LINK_ID_RATE                                         = 1,    /**< Rate. */
+    BCMOLT_EPON_NI_ADD_LINK_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_ni_add_link_id;
+
+/** Identifiers for all properties contained in the epon_ni_add_multicast_link 
+ * group. 
+ */
+typedef enum bcmolt_epon_ni_add_multicast_link_id
+{
+    BCMOLT_EPON_NI_ADD_MULTICAST_LINK_ID__BEGIN                             = 0,
+    BCMOLT_EPON_NI_ADD_MULTICAST_LINK_ID_MAC_ADDRESS                        = 0,    /**< MAC address. */
+    BCMOLT_EPON_NI_ADD_MULTICAST_LINK_ID_RATE                               = 1,    /**< Rate. */
+    BCMOLT_EPON_NI_ADD_MULTICAST_LINK_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_ni_add_multicast_link_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_ni_add_protected_standby_link group. 
+ */
+typedef enum bcmolt_epon_ni_add_protected_standby_link_id
+{
+    BCMOLT_EPON_NI_ADD_PROTECTED_STANDBY_LINK_ID__BEGIN                     = 0,
+    BCMOLT_EPON_NI_ADD_PROTECTED_STANDBY_LINK_ID_MAC_ADDRESS                = 0,    /**< MAC address. */
+    BCMOLT_EPON_NI_ADD_PROTECTED_STANDBY_LINK_ID_WORKING_LINK_INFO          = 1,    /**< Working link info. */
+    BCMOLT_EPON_NI_ADD_PROTECTED_STANDBY_LINK_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_ni_add_protected_standby_link_id;
+
+/** Identifiers for all properties contained in the epon_ni_auto_cfg group. 
+ */
+typedef enum bcmolt_epon_ni_auto_cfg_id
+{
+    BCMOLT_EPON_NI_AUTO_CFG_ID__BEGIN                                       = 0,
+    BCMOLT_EPON_NI_AUTO_CFG_ID_AUTO_ROGUE_SCAN_10G_FAILURE                  = 0,    /**< 10G Epon Autonomous Rogue Scan failure detected. */
+    BCMOLT_EPON_NI_AUTO_CFG_ID_AUTO_ROGUE_SCAN_1G_FAILURE                   = 1,    /**< 1G Epon Autonomous Rogue Scan failure detected. */
+    BCMOLT_EPON_NI_AUTO_CFG_ID_LLID_QUARANTINED                             = 2,    /**< LLID Quarantined. */
+    BCMOLT_EPON_NI_AUTO_CFG_ID_MPCP_TIMESTAMP_CHANGED                       = 3,    /**< MPCP Timestamp Changed. */
+    BCMOLT_EPON_NI_AUTO_CFG_ID_NO_REPORTS                                   = 4,    /**< No Reports. */
+    BCMOLT_EPON_NI_AUTO_CFG_ID_ONU_UPGRADE_COMPLETE                         = 5,    /**< ONU Upgrade Complete. */
+    BCMOLT_EPON_NI_AUTO_CFG_ID_RERANGE_FAILURE                              = 6,    /**< Re-range failure. */
+    BCMOLT_EPON_NI_AUTO_CFG_ID_ROGUE_SCAN_COMPLETE                          = 7,    /**< Rogue Scan is Complete. */
+    BCMOLT_EPON_NI_AUTO_CFG_ID_RSSI_MEASUREMENT_COMPLETED                   = 8,    /**< RSSI Measurement Completed. */
+    BCMOLT_EPON_NI_AUTO_CFG_ID_STATE_CHANGE_COMPLETED                       = 9,    /**< State Change Completed. */
+    BCMOLT_EPON_NI_AUTO_CFG_ID__NUM_OF                      /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_ni_auto_cfg_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_ni_auto_rogue_scan_10g_failure group. 
+ */
+typedef enum bcmolt_epon_ni_auto_rogue_scan_10g_failure_id
+{
+    BCMOLT_EPON_NI_AUTO_ROGUE_SCAN_10G_FAILURE_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_ni_auto_rogue_scan_10g_failure_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_ni_auto_rogue_scan_1g_failure group. 
+ */
+typedef enum bcmolt_epon_ni_auto_rogue_scan_1g_failure_id
+{
+    BCMOLT_EPON_NI_AUTO_ROGUE_SCAN_1G_FAILURE_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_ni_auto_rogue_scan_1g_failure_id;
+
+/** Identifiers for all properties contained in the epon_ni_cfg group. 
+ */
+typedef enum bcmolt_epon_ni_cfg_id
+{
+    BCMOLT_EPON_NI_CFG_ID__BEGIN                                            = 0,
+    BCMOLT_EPON_NI_CFG_ID_MAC_ADDRESS                                       = 0,    /**< MAC Address. */
+    BCMOLT_EPON_NI_CFG_ID_EPON_NI_EN                                        = 1,    /**< EPON NI enable state. */
+    BCMOLT_EPON_NI_CFG_ID_REGISTRATION_BEHAVIOR                             = 2,    /**< Registration Behavior. */
+    BCMOLT_EPON_NI_CFG_ID_MTU_1G                                            = 3,    /**< 1G MTU. */
+    BCMOLT_EPON_NI_CFG_ID_MTU_10G                                           = 4,    /**< 10G MTU. */
+    BCMOLT_EPON_NI_CFG_ID_MINIMUM_FIBER_LENGTH                              = 5,    /**< Minimum Fiber Length. */
+    BCMOLT_EPON_NI_CFG_ID_MAXIMUM_FIBER_LENGTH                              = 6,    /**< Maximum Fiber Length. */
+    BCMOLT_EPON_NI_CFG_ID_GRANT_SPACING_TQ                                  = 7,    /**< Grant Spacing (TQ). */
+    BCMOLT_EPON_NI_CFG_ID_EPON_LOGICAL_LINK_OPTIONS                         = 8,    /**< EPON logical link options. */
+    BCMOLT_EPON_NI_CFG_ID_MPCP_DISCOVERY_PERIOD_MS                          = 9,    /**< MPCP discovery period in milliseconds. */
+    BCMOLT_EPON_NI_CFG_ID_ALARM_STATE                                       = 10,   /**< Alarm State. */
+    BCMOLT_EPON_NI_CFG_ID_ALL_LINKS                                         = 11,   /**< All links. */
+    BCMOLT_EPON_NI_CFG_ID_ENCRYPTION_CFG                                    = 12,   /**< EPON NI encryption configuration. */
+    BCMOLT_EPON_NI_CFG_ID_PROTECTION_SWITCHING_CFG                          = 13,   /**< Protection switching configuration. */
+    BCMOLT_EPON_NI_CFG_ID_CLOCK_TRANSPORT_CFG                               = 14,   /**< Clock transport configuration. */
+    BCMOLT_EPON_NI_CFG_ID_DROPDOWN_WEIGHTS                                  = 15,   /**< Drop-down Weights. */
+    BCMOLT_EPON_NI_CFG_ID_APPROXIMATE_SOLICITED_USAGE                       = 16,   /**< Approximate Solicited Usage. */
+    BCMOLT_EPON_NI_CFG_ID_APPROXIMATE_TDM_USAGE                             = 17,   /**< Approximate TDM Usage. */
+    BCMOLT_EPON_NI_CFG_ID_NO_REPORTS_SOAK_TIME                              = 18,   /**< No Reports soak time. */
+    BCMOLT_EPON_NI_CFG_ID_PON_AGGREGATE_SHAPER                              = 19,   /**< PON Aggregate Shaper. */
+    BCMOLT_EPON_NI_CFG_ID_ESTIMATED_PON_LATENCY_TQ                          = 20,   /**< Estimated PON Latency (TQ). */
+    BCMOLT_EPON_NI_CFG_ID_ONU_UPGRADE_PARAMS                                = 21,   /**< ONU upgrade params. */
+    BCMOLT_EPON_NI_CFG_ID_AUTO_ROGUE_DETECT_10G_EN                          = 22,   /**< 10G Epon Autonomous Rogue Detection Enable. */
+    BCMOLT_EPON_NI_CFG_ID_AUTO_ROGUE_DETECT_1G_EN                           = 23,   /**< 1G Epon Autonomous Rogue Detect Enable. */
+    BCMOLT_EPON_NI_CFG_ID_AUTO_ROGUE_DETECT_10G_THRESHOLD                   = 24,   /**< 10G Epon Auto Rogue Detect Threshold. */
+    BCMOLT_EPON_NI_CFG_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_ni_cfg_id;
+
+/** Identifiers for all properties contained in the epon_ni_issue_rssi_grant 
+ * group. 
+ */
+typedef enum bcmolt_epon_ni_issue_rssi_grant_id
+{
+    BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID__BEGIN                               = 0,
+    BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_GRANTED_LINK                         = 0,    /**< Granted Link. */
+    BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_TRIGGER_WIDTH                        = 1,    /**< Rssi Trigger Width in ns. */
+    BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_TRIGGER_DELAY                        = 2,    /**< Rssi Trigger Delay in ns. */
+    BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_SAMPLE_PERIOD                        = 3,    /**< Rssi Sampe Period in us. */
+    BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_ni_issue_rssi_grant_id;
+
+/** Identifiers for all properties contained in the epon_ni_key group. 
+ */
+typedef enum bcmolt_epon_ni_key_id
+{
+    BCMOLT_EPON_NI_KEY_ID__BEGIN                                            = 0,
+    BCMOLT_EPON_NI_KEY_ID_EPON_NI                                           = 0,    /**< EPON NI number. */
+    BCMOLT_EPON_NI_KEY_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_ni_key_id;
+
+/** Identifiers for all properties contained in the epon_ni_llid_quarantined 
+ * group. 
+ */
+typedef enum bcmolt_epon_ni_llid_quarantined_id
+{
+    BCMOLT_EPON_NI_LLID_QUARANTINED_ID__BEGIN                               = 0,
+    BCMOLT_EPON_NI_LLID_QUARANTINED_ID_LLID                                 = 0,    /**< LLID. */
+    BCMOLT_EPON_NI_LLID_QUARANTINED_ID_LINK_RATE                            = 1,    /**< Link Rate. */
+    BCMOLT_EPON_NI_LLID_QUARANTINED_ID_LINK_MAC                             = 2,    /**< Link MAC. */
+    BCMOLT_EPON_NI_LLID_QUARANTINED_ID_RANGE_VALUE_TQ                       = 3,    /**< Range value in time quanta. */
+    BCMOLT_EPON_NI_LLID_QUARANTINED_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_ni_llid_quarantined_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_ni_mpcp_timestamp_changed group. 
+ */
+typedef enum bcmolt_epon_ni_mpcp_timestamp_changed_id
+{
+    BCMOLT_EPON_NI_MPCP_TIMESTAMP_CHANGED_ID__BEGIN                         = 0,
+    BCMOLT_EPON_NI_MPCP_TIMESTAMP_CHANGED_ID_MPCP_TIMESTAMP                 = 0,    /**< MPCP Timestamp. */
+    BCMOLT_EPON_NI_MPCP_TIMESTAMP_CHANGED_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_ni_mpcp_timestamp_changed_id;
+
+/** Identifiers for all properties contained in the epon_ni_no_reports group. 
+ */
+typedef enum bcmolt_epon_ni_no_reports_id
+{
+    BCMOLT_EPON_NI_NO_REPORTS_ID__BEGIN                                     = 0,
+    BCMOLT_EPON_NI_NO_REPORTS_ID_ALARM_STATUS                               = 0,    /**< Alarm Status. */
+    BCMOLT_EPON_NI_NO_REPORTS_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_ni_no_reports_id;
+
+/** Identifiers for all properties contained in the epon_ni_onu_upgrade_complete 
+ * group. 
+ */
+typedef enum bcmolt_epon_ni_onu_upgrade_complete_id
+{
+    BCMOLT_EPON_NI_ONU_UPGRADE_COMPLETE_ID__BEGIN                           = 0,
+    BCMOLT_EPON_NI_ONU_UPGRADE_COMPLETE_ID_STATUS                           = 0,    /**< Status. */
+    BCMOLT_EPON_NI_ONU_UPGRADE_COMPLETE_ID_LIST_OF_FAILED_ENTITIES          = 1,    /**< List of failed entities. */
+    BCMOLT_EPON_NI_ONU_UPGRADE_COMPLETE_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_ni_onu_upgrade_complete_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_ni_protection_switching_apply_rerange_delta group. 
+ */
+typedef enum bcmolt_epon_ni_protection_switching_apply_rerange_delta_id
+{
+    BCMOLT_EPON_NI_PROTECTION_SWITCHING_APPLY_RERANGE_DELTA_ID__BEGIN       = 0,
+    BCMOLT_EPON_NI_PROTECTION_SWITCHING_APPLY_RERANGE_DELTA_ID_RERANGE_DELTA= 0,    /**< Re-range delta. */
+    BCMOLT_EPON_NI_PROTECTION_SWITCHING_APPLY_RERANGE_DELTA_ID__NUM_OF              /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_ni_protection_switching_apply_rerange_delta_id;
+
+/** Identifiers for all properties contained in the epon_ni_rerange_failure 
+ * group. 
+ */
+typedef enum bcmolt_epon_ni_rerange_failure_id
+{
+    BCMOLT_EPON_NI_RERANGE_FAILURE_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_ni_rerange_failure_id;
+
+/** Identifiers for all properties contained in the epon_ni_rogue_llid_scan 
+ * group. 
+ */
+typedef enum bcmolt_epon_ni_rogue_llid_scan_id
+{
+    BCMOLT_EPON_NI_ROGUE_LLID_SCAN_ID__BEGIN                                = 0,
+    BCMOLT_EPON_NI_ROGUE_LLID_SCAN_ID_MODE                                  = 0,    /**< Scan All. */
+    BCMOLT_EPON_NI_ROGUE_LLID_SCAN_ID_LLID                                  = 1,    /**< LLID. */
+    BCMOLT_EPON_NI_ROGUE_LLID_SCAN_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_ni_rogue_llid_scan_id;
+
+/** Identifiers for all properties contained in the epon_ni_rogue_scan_complete 
+ * group. 
+ */
+typedef enum bcmolt_epon_ni_rogue_scan_complete_id
+{
+    BCMOLT_EPON_NI_ROGUE_SCAN_COMPLETE_ID__BEGIN                            = 0,
+    BCMOLT_EPON_NI_ROGUE_SCAN_COMPLETE_ID_RETURN_IND_STATUS                 = 0,    /**< Status of completed scan. */
+    BCMOLT_EPON_NI_ROGUE_SCAN_COMPLETE_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_ni_rogue_scan_complete_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_ni_rssi_measurement_completed group. 
+ */
+typedef enum bcmolt_epon_ni_rssi_measurement_completed_id
+{
+    BCMOLT_EPON_NI_RSSI_MEASUREMENT_COMPLETED_ID__BEGIN                     = 0,
+    BCMOLT_EPON_NI_RSSI_MEASUREMENT_COMPLETED_ID_STATUS                     = 0,    /**< status. */
+    BCMOLT_EPON_NI_RSSI_MEASUREMENT_COMPLETED_ID_LLID                       = 1,    /**< LLID. */
+    BCMOLT_EPON_NI_RSSI_MEASUREMENT_COMPLETED_ID_LINK_MAC                   = 2,    /**< Link MAC . */
+    BCMOLT_EPON_NI_RSSI_MEASUREMENT_COMPLETED_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_ni_rssi_measurement_completed_id;
+
+/** Identifiers for all properties contained in the epon_ni_set_epon_ni_en_state 
+ * group. 
+ */
+typedef enum bcmolt_epon_ni_set_epon_ni_en_state_id
+{
+    BCMOLT_EPON_NI_SET_EPON_NI_EN_STATE_ID__BEGIN                           = 0,
+    BCMOLT_EPON_NI_SET_EPON_NI_EN_STATE_ID_NEW_STATE                        = 0,    /**< New EPON NI enable state. */
+    BCMOLT_EPON_NI_SET_EPON_NI_EN_STATE_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_ni_set_epon_ni_en_state_id;
+
+/** Identifiers for all properties contained in the epon_ni_start_onu_upgrade 
+ * group. 
+ */
+typedef enum bcmolt_epon_ni_start_onu_upgrade_id
+{
+    BCMOLT_EPON_NI_START_ONU_UPGRADE_ID__BEGIN                              = 0,
+    BCMOLT_EPON_NI_START_ONU_UPGRADE_ID_LIST_OF_ONU_IDS                     = 0,    /**< List of ONU IDs. */
+    BCMOLT_EPON_NI_START_ONU_UPGRADE_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_ni_start_onu_upgrade_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_ni_state_change_completed group. 
+ */
+typedef enum bcmolt_epon_ni_state_change_completed_id
+{
+    BCMOLT_EPON_NI_STATE_CHANGE_COMPLETED_ID__BEGIN                         = 0,
+    BCMOLT_EPON_NI_STATE_CHANGE_COMPLETED_ID_NEW_STATE                      = 0,    /**< New EPON NI enable state. */
+    BCMOLT_EPON_NI_STATE_CHANGE_COMPLETED_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_ni_state_change_completed_id;
+
+/** Identifiers for all properties contained in the epon_onu_10g_us_auto_cfg 
+ * group. 
+ */
+typedef enum bcmolt_epon_onu_10g_us_auto_cfg_id
+{
+    BCMOLT_EPON_ONU_10G_US_AUTO_CFG_ID__BEGIN                               = 0,
+    BCMOLT_EPON_ONU_10G_US_AUTO_CFG_ID_STAT_ALARM_CLEARED                   = 0,    /**< Stat Alarm Cleared. */
+    BCMOLT_EPON_ONU_10G_US_AUTO_CFG_ID_STAT_ALARM_RAISED                    = 1,    /**< Stat Alarm Raised. */
+    BCMOLT_EPON_ONU_10G_US_AUTO_CFG_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_onu_10g_us_auto_cfg_id;
+
+/** Identifiers for all properties contained in the epon_onu_10g_us_cfg group. 
+ */
+typedef enum bcmolt_epon_onu_10g_us_cfg_id
+{
+    BCMOLT_EPON_ONU_10G_US_CFG_ID__BEGIN                                    = 0,
+    BCMOLT_EPON_ONU_10G_US_CFG_ID_ALL_LINKS                                 = 0,    /**< All Links. */
+    BCMOLT_EPON_ONU_10G_US_CFG_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_onu_10g_us_cfg_id;
+
+/** Identifiers for all properties contained in the epon_onu_10g_us_key group. 
+ */
+typedef enum bcmolt_epon_onu_10g_us_key_id
+{
+    BCMOLT_EPON_ONU_10G_US_KEY_ID__BEGIN                                    = 0,
+    BCMOLT_EPON_ONU_10G_US_KEY_ID_EPON_NI                                   = 0,    /**< EPON NI. */
+    BCMOLT_EPON_ONU_10G_US_KEY_ID_ONU_ID                                    = 1,    /**< ONU ID. */
+    BCMOLT_EPON_ONU_10G_US_KEY_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_onu_10g_us_key_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_onu_10g_us_stat_alarm_cleared group. 
+ */
+typedef enum bcmolt_epon_onu_10g_us_stat_alarm_cleared_id
+{
+    BCMOLT_EPON_ONU_10G_US_STAT_ALARM_CLEARED_ID__BEGIN                     = 0,
+    BCMOLT_EPON_ONU_10G_US_STAT_ALARM_CLEARED_ID_STAT                       = 0,    /**< Statistic ID. */
+    BCMOLT_EPON_ONU_10G_US_STAT_ALARM_CLEARED_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_onu_10g_us_stat_alarm_cleared_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_onu_10g_us_stat_alarm_raised group. 
+ */
+typedef enum bcmolt_epon_onu_10g_us_stat_alarm_raised_id
+{
+    BCMOLT_EPON_ONU_10G_US_STAT_ALARM_RAISED_ID__BEGIN                      = 0,
+    BCMOLT_EPON_ONU_10G_US_STAT_ALARM_RAISED_ID_STAT                        = 0,    /**< Statistic ID. */
+    BCMOLT_EPON_ONU_10G_US_STAT_ALARM_RAISED_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_onu_10g_us_stat_alarm_raised_id;
+
+/** Identifiers for all properties contained in the epon_onu_10g_us_stat_cfg 
+ * group. 
+ */
+typedef enum bcmolt_epon_onu_10g_us_stat_cfg_id
+{
+    BCMOLT_EPON_ONU_10G_US_STAT_CFG_ID__BEGIN                               = 0,
+    BCMOLT_EPON_ONU_10G_US_STAT_CFG_ID_CFG                                  = 0,    /**< Configuration. */
+    BCMOLT_EPON_ONU_10G_US_STAT_CFG_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_onu_10g_us_stat_cfg_id;
+
+/** Identifiers for all properties contained in the epon_onu_10g_us_stat group. 
+ */
+typedef enum bcmolt_epon_onu_10g_us_stat_id
+{
+    BCMOLT_EPON_ONU_10G_US_STAT_ID__BEGIN                                   = 0,
+    BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_CODE_WORDS_TOTAL                     = 0,    /**< FEC Code Words Total. */
+    BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_CODE_WORDS_DECODE_FAILS              = 1,    /**< FEC Code Words Decode Fails. */
+    BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_ZEROES_CORRECTED                     = 2,    /**< FEC Zeroes Corrected. */
+    BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_ONES_CORRECTED                       = 3,    /**< FEC Ones Corrected. */
+    BCMOLT_EPON_ONU_10G_US_STAT_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_onu_10g_us_stat_id;
+
+/** Identifiers for all properties contained in the epon_onu_1g_us_auto_cfg 
+ * group. 
+ */
+typedef enum bcmolt_epon_onu_1g_us_auto_cfg_id
+{
+    BCMOLT_EPON_ONU_1G_US_AUTO_CFG_ID__BEGIN                                = 0,
+    BCMOLT_EPON_ONU_1G_US_AUTO_CFG_ID_STAT_ALARM_CLEARED                    = 0,    /**< Stat Alarm Cleared. */
+    BCMOLT_EPON_ONU_1G_US_AUTO_CFG_ID_STAT_ALARM_RAISED                     = 1,    /**< Stat Alarm Raised. */
+    BCMOLT_EPON_ONU_1G_US_AUTO_CFG_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_onu_1g_us_auto_cfg_id;
+
+/** Identifiers for all properties contained in the epon_onu_1g_us_cfg group. 
+ */
+typedef enum bcmolt_epon_onu_1g_us_cfg_id
+{
+    BCMOLT_EPON_ONU_1G_US_CFG_ID__BEGIN                                     = 0,
+    BCMOLT_EPON_ONU_1G_US_CFG_ID_ALL_LINKS                                  = 0,    /**< All Links. */
+    BCMOLT_EPON_ONU_1G_US_CFG_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_onu_1g_us_cfg_id;
+
+/** Identifiers for all properties contained in the epon_onu_1g_us_key group. 
+ */
+typedef enum bcmolt_epon_onu_1g_us_key_id
+{
+    BCMOLT_EPON_ONU_1G_US_KEY_ID__BEGIN                                     = 0,
+    BCMOLT_EPON_ONU_1G_US_KEY_ID_EPON_NI                                    = 0,    /**< EPON NI. */
+    BCMOLT_EPON_ONU_1G_US_KEY_ID_ONU_ID                                     = 1,    /**< ONU ID. */
+    BCMOLT_EPON_ONU_1G_US_KEY_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_onu_1g_us_key_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_onu_1g_us_stat_alarm_cleared group. 
+ */
+typedef enum bcmolt_epon_onu_1g_us_stat_alarm_cleared_id
+{
+    BCMOLT_EPON_ONU_1G_US_STAT_ALARM_CLEARED_ID__BEGIN                      = 0,
+    BCMOLT_EPON_ONU_1G_US_STAT_ALARM_CLEARED_ID_STAT                        = 0,    /**< Statistic ID. */
+    BCMOLT_EPON_ONU_1G_US_STAT_ALARM_CLEARED_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_onu_1g_us_stat_alarm_cleared_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_onu_1g_us_stat_alarm_raised group. 
+ */
+typedef enum bcmolt_epon_onu_1g_us_stat_alarm_raised_id
+{
+    BCMOLT_EPON_ONU_1G_US_STAT_ALARM_RAISED_ID__BEGIN                       = 0,
+    BCMOLT_EPON_ONU_1G_US_STAT_ALARM_RAISED_ID_STAT                         = 0,    /**< Statistic ID. */
+    BCMOLT_EPON_ONU_1G_US_STAT_ALARM_RAISED_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_onu_1g_us_stat_alarm_raised_id;
+
+/** Identifiers for all properties contained in the epon_onu_1g_us_stat_cfg 
+ * group. 
+ */
+typedef enum bcmolt_epon_onu_1g_us_stat_cfg_id
+{
+    BCMOLT_EPON_ONU_1G_US_STAT_CFG_ID__BEGIN                                = 0,
+    BCMOLT_EPON_ONU_1G_US_STAT_CFG_ID_CFG                                   = 0,    /**< Configuration. */
+    BCMOLT_EPON_ONU_1G_US_STAT_CFG_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_onu_1g_us_stat_cfg_id;
+
+/** Identifiers for all properties contained in the epon_onu_1g_us_stat group. 
+ */
+typedef enum bcmolt_epon_onu_1g_us_stat_id
+{
+    BCMOLT_EPON_ONU_1G_US_STAT_ID__BEGIN                                    = 0,
+    BCMOLT_EPON_ONU_1G_US_STAT_ID_GOOD_FRAMES                               = 0,    /**< Good frames. */
+    BCMOLT_EPON_ONU_1G_US_STAT_ID_GOOD_BYTES                                = 1,    /**< Good bytes. */
+    BCMOLT_EPON_ONU_1G_US_STAT_ID_OVERSZ_FRAMES                             = 2,    /**< Oversized frames. */
+    BCMOLT_EPON_ONU_1G_US_STAT_ID_NON_FEC_GOOD_FRAMES                       = 3,    /**< Non-FEC Good Frames. */
+    BCMOLT_EPON_ONU_1G_US_STAT_ID_NON_FEC_GOOD_BYTES                        = 4,    /**< Non-FEC Good Bytes. */
+    BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_GOOD_FRAMES                           = 5,    /**< FEC Good Frames. */
+    BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_GOOD_BYTES                            = 6,    /**< FEC Good Bytes. */
+    BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_FRAMES_EXC_ERRS                       = 7,    /**< FEC Frames which exceeded 8 symbol errors. */
+    BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_BLKS_NO_ERRS                          = 8,    /**< FEC Blocks with no errors. */
+    BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_BLKS_CORR_ERRS                        = 9,    /**< FEC Blocks with correctable errors. */
+    BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_BLKS_UNCORR_ERRS                      = 10,   /**< FEC Blocks with uncorrectable errors. */
+    BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_CORR_BYTES                            = 11,   /**< FEC Corrected Bytes. */
+    BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_CORR_ZEROES                           = 12,   /**< FEC Corrected Zeroes. */
+    BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_CORR_ONES                             = 13,   /**< FEC Corrected Ones. */
+    BCMOLT_EPON_ONU_1G_US_STAT_ID_UNDERSZ_FRAMES                            = 14,   /**< Undersize frames. */
+    BCMOLT_EPON_ONU_1G_US_STAT_ID_ERRORSZ_FRAMES                            = 15,   /**< Errored frame . */
+    BCMOLT_EPON_ONU_1G_US_STAT_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_onu_1g_us_stat_id;
+
+/** Identifiers for all properties contained in the epon_path_10g_ds_auto_cfg 
+ * group. 
+ */
+typedef enum bcmolt_epon_path_10g_ds_auto_cfg_id
+{
+    BCMOLT_EPON_PATH_10G_DS_AUTO_CFG_ID__BEGIN                              = 0,
+    BCMOLT_EPON_PATH_10G_DS_AUTO_CFG_ID_STAT_ALARM_CLEARED                  = 0,    /**< Stat Alarm Cleared. */
+    BCMOLT_EPON_PATH_10G_DS_AUTO_CFG_ID_STAT_ALARM_RAISED                   = 1,    /**< Stat Alarm Raised. */
+    BCMOLT_EPON_PATH_10G_DS_AUTO_CFG_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_path_10g_ds_auto_cfg_id;
+
+/** Identifiers for all properties contained in the epon_path_10g_ds_cfg group. 
+ */
+typedef enum bcmolt_epon_path_10g_ds_cfg_id
+{
+    BCMOLT_EPON_PATH_10G_DS_CFG_ID__BEGIN                                   = 0,
+    BCMOLT_EPON_PATH_10G_DS_CFG_ID_FEC_STATE                                = 0,    /**< Path FEC state. */
+    BCMOLT_EPON_PATH_10G_DS_CFG_ID_PRBS_GENERATOR                           = 1,    /**< PRBS Generator. */
+    BCMOLT_EPON_PATH_10G_DS_CFG_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_path_10g_ds_cfg_id;
+
+/** Identifiers for all properties contained in the epon_path_10g_ds_key group. 
+ */
+typedef enum bcmolt_epon_path_10g_ds_key_id
+{
+    BCMOLT_EPON_PATH_10G_DS_KEY_ID__BEGIN                                   = 0,
+    BCMOLT_EPON_PATH_10G_DS_KEY_ID_EPON_NI                                  = 0,    /**< EPON NI (EPON Network Interface) number. */
+    BCMOLT_EPON_PATH_10G_DS_KEY_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_path_10g_ds_key_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_path_10g_ds_stat_alarm_cleared group. 
+ */
+typedef enum bcmolt_epon_path_10g_ds_stat_alarm_cleared_id
+{
+    BCMOLT_EPON_PATH_10G_DS_STAT_ALARM_CLEARED_ID__BEGIN                    = 0,
+    BCMOLT_EPON_PATH_10G_DS_STAT_ALARM_CLEARED_ID_STAT                      = 0,    /**< Statistic ID. */
+    BCMOLT_EPON_PATH_10G_DS_STAT_ALARM_CLEARED_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_path_10g_ds_stat_alarm_cleared_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_path_10g_ds_stat_alarm_raised group. 
+ */
+typedef enum bcmolt_epon_path_10g_ds_stat_alarm_raised_id
+{
+    BCMOLT_EPON_PATH_10G_DS_STAT_ALARM_RAISED_ID__BEGIN                     = 0,
+    BCMOLT_EPON_PATH_10G_DS_STAT_ALARM_RAISED_ID_STAT                       = 0,    /**< Statistic ID. */
+    BCMOLT_EPON_PATH_10G_DS_STAT_ALARM_RAISED_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_path_10g_ds_stat_alarm_raised_id;
+
+/** Identifiers for all properties contained in the epon_path_10g_ds_stat_cfg 
+ * group. 
+ */
+typedef enum bcmolt_epon_path_10g_ds_stat_cfg_id
+{
+    BCMOLT_EPON_PATH_10G_DS_STAT_CFG_ID__BEGIN                              = 0,
+    BCMOLT_EPON_PATH_10G_DS_STAT_CFG_ID_CFG                                 = 0,    /**< Configuration. */
+    BCMOLT_EPON_PATH_10G_DS_STAT_CFG_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_path_10g_ds_stat_cfg_id;
+
+/** Identifiers for all properties contained in the epon_path_10g_ds_stat group. 
+ */
+typedef enum bcmolt_epon_path_10g_ds_stat_id
+{
+    BCMOLT_EPON_PATH_10G_DS_STAT_ID__BEGIN                                  = 0,
+    BCMOLT_EPON_PATH_10G_DS_STAT_ID_BYTES                                   = 0,    /**< Bytes. */
+    BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES                                  = 1,    /**< Frames. */
+    BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_64                               = 2,    /**< 64 Byte Frames. */
+    BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_65_127                           = 3,    /**< 65-127 Byte Frames. */
+    BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_128_255                          = 4,    /**< 128-255 Byte Frames. */
+    BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_256_511                          = 5,    /**< 256-511 Byte Frames. */
+    BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_512_1023                         = 6,    /**< 512-1023 Byte Frames. */
+    BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_1024_1518                        = 7,    /**< 1024-1518 Byte Frames. */
+    BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_1519_2047                        = 8,    /**< 1519-2047 Byte Frames. */
+    BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_2048_4095                        = 9,    /**< 2048_4095 Byte Frames. */
+    BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_4096_9216                        = 10,   /**< 4096-9216 Byte Frames. */
+    BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_9217_16383                       = 11,   /**< 9217-16383 Byte Frames. */
+    BCMOLT_EPON_PATH_10G_DS_STAT_ID_BROADCAST_FRAMES                        = 12,   /**< Broadcast Frames. */
+    BCMOLT_EPON_PATH_10G_DS_STAT_ID_DATA_BYTES                              = 13,   /**< Data Bytes. */
+    BCMOLT_EPON_PATH_10G_DS_STAT_ID_MULTICAST_FRAMES                        = 14,   /**< Mulitcast Frames. */
+    BCMOLT_EPON_PATH_10G_DS_STAT_ID_UNICAST_FRAMES                          = 15,   /**< Unicast Frames. */
+    BCMOLT_EPON_PATH_10G_DS_STAT_ID_OAM_BYTES                               = 16,   /**< OAM Bytes. */
+    BCMOLT_EPON_PATH_10G_DS_STAT_ID_OAM_FRAMES                              = 17,   /**< OAM Frames. */
+    BCMOLT_EPON_PATH_10G_DS_STAT_ID_GATE_FRAMES                             = 18,   /**< Gate Frames. */
+    BCMOLT_EPON_PATH_10G_DS_STAT_ID_MPCP_FRAMES                             = 19,   /**< MPCP Frames. */
+    BCMOLT_EPON_PATH_10G_DS_STAT_ID_ABORT_FRAMES                            = 20,   /**< Abort Frames. */
+    BCMOLT_EPON_PATH_10G_DS_STAT_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_path_10g_ds_stat_id;
+
+/** Identifiers for all properties contained in the epon_path_10g_us_auto_cfg 
+ * group. 
+ */
+typedef enum bcmolt_epon_path_10g_us_auto_cfg_id
+{
+    BCMOLT_EPON_PATH_10G_US_AUTO_CFG_ID__BEGIN                              = 0,
+    BCMOLT_EPON_PATH_10G_US_AUTO_CFG_ID_STAT_ALARM_CLEARED                  = 0,    /**< Stat Alarm Cleared. */
+    BCMOLT_EPON_PATH_10G_US_AUTO_CFG_ID_STAT_ALARM_RAISED                   = 1,    /**< Stat Alarm Raised. */
+    BCMOLT_EPON_PATH_10G_US_AUTO_CFG_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_path_10g_us_auto_cfg_id;
+
+/** Identifiers for all properties contained in the epon_path_10g_us_cfg group. 
+ */
+typedef enum bcmolt_epon_path_10g_us_cfg_id
+{
+    BCMOLT_EPON_PATH_10G_US_CFG_ID__BEGIN                                   = 0,
+    BCMOLT_EPON_PATH_10G_US_CFG_ID_FEC_STATE                                = 0,    /**< Path FEC state. */
+    BCMOLT_EPON_PATH_10G_US_CFG_ID_SYNC_TIME_TQ                             = 1,    /**< Sync Time (TQ). */
+    BCMOLT_EPON_PATH_10G_US_CFG_ID_PRBS_CHECKER                             = 2,    /**< PRBS Checker. */
+    BCMOLT_EPON_PATH_10G_US_CFG_ID_PRBS_STATUS                              = 3,    /**< PRBS status. */
+    BCMOLT_EPON_PATH_10G_US_CFG_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_path_10g_us_cfg_id;
+
+/** Identifiers for all properties contained in the epon_path_10g_us_key group. 
+ */
+typedef enum bcmolt_epon_path_10g_us_key_id
+{
+    BCMOLT_EPON_PATH_10G_US_KEY_ID__BEGIN                                   = 0,
+    BCMOLT_EPON_PATH_10G_US_KEY_ID_EPON_NI                                  = 0,    /**< EPON NI. */
+    BCMOLT_EPON_PATH_10G_US_KEY_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_path_10g_us_key_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_path_10g_us_stat_alarm_cleared group. 
+ */
+typedef enum bcmolt_epon_path_10g_us_stat_alarm_cleared_id
+{
+    BCMOLT_EPON_PATH_10G_US_STAT_ALARM_CLEARED_ID__BEGIN                    = 0,
+    BCMOLT_EPON_PATH_10G_US_STAT_ALARM_CLEARED_ID_STAT                      = 0,    /**< Statistic ID. */
+    BCMOLT_EPON_PATH_10G_US_STAT_ALARM_CLEARED_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_path_10g_us_stat_alarm_cleared_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_path_10g_us_stat_alarm_raised group. 
+ */
+typedef enum bcmolt_epon_path_10g_us_stat_alarm_raised_id
+{
+    BCMOLT_EPON_PATH_10G_US_STAT_ALARM_RAISED_ID__BEGIN                     = 0,
+    BCMOLT_EPON_PATH_10G_US_STAT_ALARM_RAISED_ID_STAT                       = 0,    /**< Statistic ID. */
+    BCMOLT_EPON_PATH_10G_US_STAT_ALARM_RAISED_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_path_10g_us_stat_alarm_raised_id;
+
+/** Identifiers for all properties contained in the epon_path_10g_us_stat_cfg 
+ * group. 
+ */
+typedef enum bcmolt_epon_path_10g_us_stat_cfg_id
+{
+    BCMOLT_EPON_PATH_10G_US_STAT_CFG_ID__BEGIN                              = 0,
+    BCMOLT_EPON_PATH_10G_US_STAT_CFG_ID_CFG                                 = 0,    /**< Configuration. */
+    BCMOLT_EPON_PATH_10G_US_STAT_CFG_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_path_10g_us_stat_cfg_id;
+
+/** Identifiers for all properties contained in the epon_path_10g_us_stat group. 
+ */
+typedef enum bcmolt_epon_path_10g_us_stat_id
+{
+    BCMOLT_EPON_PATH_10G_US_STAT_ID__BEGIN                                  = 0,
+    BCMOLT_EPON_PATH_10G_US_STAT_ID_BYTES                                   = 0,    /**< Bytes. */
+    BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES                                  = 1,    /**< Frames. */
+    BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_64                               = 2,    /**< 64 Byte Frames. */
+    BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_65_127                           = 3,    /**< 65-127 Byte Frames. */
+    BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_128_255                          = 4,    /**< 128-255 Byte Frames. */
+    BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_256_511                          = 5,    /**< 256-511 Byte Frames. */
+    BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_512_1023                         = 6,    /**< 512-1023 Byte Frames. */
+    BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_1024_1518                        = 7,    /**< 1024-1518 Byte Frames. */
+    BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_1519_2047                        = 8,    /**< 1519-2047 Byte Frames. */
+    BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_2048_4095                        = 9,    /**< 2048_4095 Byte Frames. */
+    BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_4096_9216                        = 10,   /**< 4096-9216 Byte Frames. */
+    BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_9217_16383                       = 11,   /**< 9217-16383 Byte Frames. */
+    BCMOLT_EPON_PATH_10G_US_STAT_ID_BROADCAST_FRAMES                        = 12,   /**< Broadcast Frames. */
+    BCMOLT_EPON_PATH_10G_US_STAT_ID_DATA_BYTES                              = 13,   /**< Data Bytes. */
+    BCMOLT_EPON_PATH_10G_US_STAT_ID_MULTICAST_FRAMES                        = 14,   /**< Mulitcast Frames. */
+    BCMOLT_EPON_PATH_10G_US_STAT_ID_UNICAST_FRAMES                          = 15,   /**< Unicast Frames. */
+    BCMOLT_EPON_PATH_10G_US_STAT_ID_MPCP_FRAMES                             = 16,   /**< MPCP Frames. */
+    BCMOLT_EPON_PATH_10G_US_STAT_ID_OAM_BYTES                               = 17,   /**< OAM Bytes. */
+    BCMOLT_EPON_PATH_10G_US_STAT_ID_OAM_FRAMES                              = 18,   /**< OAM Frames. */
+    BCMOLT_EPON_PATH_10G_US_STAT_ID_REPORT_FRAMES                           = 19,   /**< Report Frames. */
+    BCMOLT_EPON_PATH_10G_US_STAT_ID_ABORT_FRAMES                            = 20,   /**< Abort Frames. */
+    BCMOLT_EPON_PATH_10G_US_STAT_ID_FCS_ERROR                               = 21,   /**< FCS Error. */
+    BCMOLT_EPON_PATH_10G_US_STAT_ID_CRC_8_ERROR                             = 22,   /**< CRC8 Error. */
+    BCMOLT_EPON_PATH_10G_US_STAT_ID_OUT_OF_SLOT                             = 23,   /**< Out of Slot. */
+    BCMOLT_EPON_PATH_10G_US_STAT_ID_OVERSIZE_ERROR                          = 24,   /**< Oversize Error. */
+    BCMOLT_EPON_PATH_10G_US_STAT_ID_RUNT_ERROR                              = 25,   /**< Runt Error. */
+    BCMOLT_EPON_PATH_10G_US_STAT_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_path_10g_us_stat_id;
+
+/** Identifiers for all properties contained in the epon_path_1g_ds_auto_cfg 
+ * group. 
+ */
+typedef enum bcmolt_epon_path_1g_ds_auto_cfg_id
+{
+    BCMOLT_EPON_PATH_1G_DS_AUTO_CFG_ID__BEGIN                               = 0,
+    BCMOLT_EPON_PATH_1G_DS_AUTO_CFG_ID_STAT_ALARM_CLEARED                   = 0,    /**< Stat Alarm Cleared. */
+    BCMOLT_EPON_PATH_1G_DS_AUTO_CFG_ID_STAT_ALARM_RAISED                    = 1,    /**< Stat Alarm Raised. */
+    BCMOLT_EPON_PATH_1G_DS_AUTO_CFG_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_path_1g_ds_auto_cfg_id;
+
+/** Identifiers for all properties contained in the epon_path_1g_ds_cfg group. 
+ */
+typedef enum bcmolt_epon_path_1g_ds_cfg_id
+{
+    BCMOLT_EPON_PATH_1G_DS_CFG_ID__BEGIN                                    = 0,
+    BCMOLT_EPON_PATH_1G_DS_CFG_ID_DEFAULT_FEC_STATE                         = 0,    /**< Default FEC state. */
+    BCMOLT_EPON_PATH_1G_DS_CFG_ID_RAMAN_MODE                                = 1,    /**< Raman mode. */
+    BCMOLT_EPON_PATH_1G_DS_CFG_ID_TURBO_2G_MODE                             = 2,    /**< Turbo 2G mode. */
+    BCMOLT_EPON_PATH_1G_DS_CFG_ID_PRBS_GENERATOR                            = 3,    /**< PRBS Generator. */
+    BCMOLT_EPON_PATH_1G_DS_CFG_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_path_1g_ds_cfg_id;
+
+/** Identifiers for all properties contained in the epon_path_1g_ds_key group. 
+ */
+typedef enum bcmolt_epon_path_1g_ds_key_id
+{
+    BCMOLT_EPON_PATH_1G_DS_KEY_ID__BEGIN                                    = 0,
+    BCMOLT_EPON_PATH_1G_DS_KEY_ID_EPON_NI                                   = 0,    /**< EPON NI. */
+    BCMOLT_EPON_PATH_1G_DS_KEY_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_path_1g_ds_key_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_path_1g_ds_stat_alarm_cleared group. 
+ */
+typedef enum bcmolt_epon_path_1g_ds_stat_alarm_cleared_id
+{
+    BCMOLT_EPON_PATH_1G_DS_STAT_ALARM_CLEARED_ID__BEGIN                     = 0,
+    BCMOLT_EPON_PATH_1G_DS_STAT_ALARM_CLEARED_ID_STAT                       = 0,    /**< Statistic ID. */
+    BCMOLT_EPON_PATH_1G_DS_STAT_ALARM_CLEARED_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_path_1g_ds_stat_alarm_cleared_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_path_1g_ds_stat_alarm_raised group. 
+ */
+typedef enum bcmolt_epon_path_1g_ds_stat_alarm_raised_id
+{
+    BCMOLT_EPON_PATH_1G_DS_STAT_ALARM_RAISED_ID__BEGIN                      = 0,
+    BCMOLT_EPON_PATH_1G_DS_STAT_ALARM_RAISED_ID_STAT                        = 0,    /**< Statistic ID. */
+    BCMOLT_EPON_PATH_1G_DS_STAT_ALARM_RAISED_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_path_1g_ds_stat_alarm_raised_id;
+
+/** Identifiers for all properties contained in the epon_path_1g_ds_stat_cfg 
+ * group. 
+ */
+typedef enum bcmolt_epon_path_1g_ds_stat_cfg_id
+{
+    BCMOLT_EPON_PATH_1G_DS_STAT_CFG_ID__BEGIN                               = 0,
+    BCMOLT_EPON_PATH_1G_DS_STAT_CFG_ID_CFG                                  = 0,    /**< Configuration. */
+    BCMOLT_EPON_PATH_1G_DS_STAT_CFG_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_path_1g_ds_stat_cfg_id;
+
+/** Identifiers for all properties contained in the epon_path_1g_ds_stat group. 
+ */
+typedef enum bcmolt_epon_path_1g_ds_stat_id
+{
+    BCMOLT_EPON_PATH_1G_DS_STAT_ID__BEGIN                                   = 0,
+    BCMOLT_EPON_PATH_1G_DS_STAT_ID_BYTES                                    = 0,    /**< Bytes. */
+    BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES                                   = 1,    /**< Frames. */
+    BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_64                                = 2,    /**< 64 Byte Frames. */
+    BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_65_127                            = 3,    /**< 65-127 Byte Frames. */
+    BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_128_255                           = 4,    /**< 128-255 Byte Frames. */
+    BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_256_511                           = 5,    /**< 256-511 Byte Frames. */
+    BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_512_1023                          = 6,    /**< 512-1023 Byte Frames. */
+    BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_1024_1518                         = 7,    /**< 1024-1518 Byte Frames. */
+    BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_1519_2047                         = 8,    /**< 1519-2047 Byte Frames. */
+    BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_2048_4095                         = 9,    /**< 2048_4095 Byte Frames. */
+    BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_4096_9216                         = 10,   /**< 4096-9216 Byte Frames. */
+    BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_9217_16383                        = 11,   /**< 9217-16383 Byte Frames. */
+    BCMOLT_EPON_PATH_1G_DS_STAT_ID_BROADCAST_FRAMES                         = 12,   /**< Broadcast Frames. */
+    BCMOLT_EPON_PATH_1G_DS_STAT_ID_DATA_BYTES                               = 13,   /**< Data Bytes. */
+    BCMOLT_EPON_PATH_1G_DS_STAT_ID_MULTICAST_FRAMES                         = 14,   /**< Mulitcast Frames. */
+    BCMOLT_EPON_PATH_1G_DS_STAT_ID_UNICAST_FRAMES                           = 15,   /**< Unicast Frames. */
+    BCMOLT_EPON_PATH_1G_DS_STAT_ID_OAM_BYTES                                = 16,   /**< OAM Bytes. */
+    BCMOLT_EPON_PATH_1G_DS_STAT_ID_OAM_FRAMES                               = 17,   /**< OAM Frames. */
+    BCMOLT_EPON_PATH_1G_DS_STAT_ID_GATE_FRAMES                              = 18,   /**< Gate Frames. */
+    BCMOLT_EPON_PATH_1G_DS_STAT_ID_MPCP_FRAMES                              = 19,   /**< MPCP Frames. */
+    BCMOLT_EPON_PATH_1G_DS_STAT_ID_ABORT_FRAMES                             = 20,   /**< Abort Frames. */
+    BCMOLT_EPON_PATH_1G_DS_STAT_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_path_1g_ds_stat_id;
+
+/** Identifiers for all properties contained in the epon_path_1g_us_auto_cfg 
+ * group. 
+ */
+typedef enum bcmolt_epon_path_1g_us_auto_cfg_id
+{
+    BCMOLT_EPON_PATH_1G_US_AUTO_CFG_ID__BEGIN                               = 0,
+    BCMOLT_EPON_PATH_1G_US_AUTO_CFG_ID_STAT_ALARM_CLEARED                   = 0,    /**< Stat Alarm Cleared. */
+    BCMOLT_EPON_PATH_1G_US_AUTO_CFG_ID_STAT_ALARM_RAISED                    = 1,    /**< Stat Alarm Raised. */
+    BCMOLT_EPON_PATH_1G_US_AUTO_CFG_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_path_1g_us_auto_cfg_id;
+
+/** Identifiers for all properties contained in the epon_path_1g_us_cfg group. 
+ */
+typedef enum bcmolt_epon_path_1g_us_cfg_id
+{
+    BCMOLT_EPON_PATH_1G_US_CFG_ID__BEGIN                                    = 0,
+    BCMOLT_EPON_PATH_1G_US_CFG_ID_DEFAULT_FEC_STATE                         = 0,    /**< Default FEC state. */
+    BCMOLT_EPON_PATH_1G_US_CFG_ID_SYNC_TIME_TQ                              = 1,    /**< Sync Time (TQ). */
+    BCMOLT_EPON_PATH_1G_US_CFG_ID_PRBS_CHECKER                              = 2,    /**< PRBS Checker. */
+    BCMOLT_EPON_PATH_1G_US_CFG_ID_PRBS_STATUS                               = 3,    /**< PRBS status. */
+    BCMOLT_EPON_PATH_1G_US_CFG_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_path_1g_us_cfg_id;
+
+/** Identifiers for all properties contained in the epon_path_1g_us_key group. 
+ */
+typedef enum bcmolt_epon_path_1g_us_key_id
+{
+    BCMOLT_EPON_PATH_1G_US_KEY_ID__BEGIN                                    = 0,
+    BCMOLT_EPON_PATH_1G_US_KEY_ID_EPON_NI                                   = 0,    /**< EPON NI. */
+    BCMOLT_EPON_PATH_1G_US_KEY_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_path_1g_us_key_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_path_1g_us_stat_alarm_cleared group. 
+ */
+typedef enum bcmolt_epon_path_1g_us_stat_alarm_cleared_id
+{
+    BCMOLT_EPON_PATH_1G_US_STAT_ALARM_CLEARED_ID__BEGIN                     = 0,
+    BCMOLT_EPON_PATH_1G_US_STAT_ALARM_CLEARED_ID_STAT                       = 0,    /**< Statistic ID. */
+    BCMOLT_EPON_PATH_1G_US_STAT_ALARM_CLEARED_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_path_1g_us_stat_alarm_cleared_id;
+
+/** Identifiers for all properties contained in the 
+ * epon_path_1g_us_stat_alarm_raised group. 
+ */
+typedef enum bcmolt_epon_path_1g_us_stat_alarm_raised_id
+{
+    BCMOLT_EPON_PATH_1G_US_STAT_ALARM_RAISED_ID__BEGIN                      = 0,
+    BCMOLT_EPON_PATH_1G_US_STAT_ALARM_RAISED_ID_STAT                        = 0,    /**< Statistic ID. */
+    BCMOLT_EPON_PATH_1G_US_STAT_ALARM_RAISED_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_path_1g_us_stat_alarm_raised_id;
+
+/** Identifiers for all properties contained in the epon_path_1g_us_stat_cfg 
+ * group. 
+ */
+typedef enum bcmolt_epon_path_1g_us_stat_cfg_id
+{
+    BCMOLT_EPON_PATH_1G_US_STAT_CFG_ID__BEGIN                               = 0,
+    BCMOLT_EPON_PATH_1G_US_STAT_CFG_ID_CFG                                  = 0,    /**< Configuration. */
+    BCMOLT_EPON_PATH_1G_US_STAT_CFG_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_path_1g_us_stat_cfg_id;
+
+/** Identifiers for all properties contained in the epon_path_1g_us_stat group. 
+ */
+typedef enum bcmolt_epon_path_1g_us_stat_id
+{
+    BCMOLT_EPON_PATH_1G_US_STAT_ID__BEGIN                                   = 0,
+    BCMOLT_EPON_PATH_1G_US_STAT_ID_BYTES                                    = 0,    /**< Bytes. */
+    BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES                                   = 1,    /**< Frames. */
+    BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_64                                = 2,    /**< 64 Byte Frames. */
+    BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_65_127                            = 3,    /**< 65-127 Byte Frames. */
+    BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_128_255                           = 4,    /**< 128-255 Byte Frames. */
+    BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_256_511                           = 5,    /**< 256-511 Byte Frames. */
+    BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_512_1023                          = 6,    /**< 512-1023 Byte Frames. */
+    BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_1024_1518                         = 7,    /**< 1024-1518 Byte Frames. */
+    BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_1519_2047                         = 8,    /**< 1519-2047 Byte Frames. */
+    BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_2048_4095                         = 9,    /**< 2048_4095 Byte Frames. */
+    BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_4096_9216                         = 10,   /**< 4096-9216 Byte Frames. */
+    BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_9217_16383                        = 11,   /**< 9217-16383 Byte Frames. */
+    BCMOLT_EPON_PATH_1G_US_STAT_ID_BROADCAST_FRAMES                         = 12,   /**< Broadcast Frames. */
+    BCMOLT_EPON_PATH_1G_US_STAT_ID_DATA_BYTES                               = 13,   /**< Data Bytes. */
+    BCMOLT_EPON_PATH_1G_US_STAT_ID_MULTICAST_FRAMES                         = 14,   /**< Mulitcast Frames. */
+    BCMOLT_EPON_PATH_1G_US_STAT_ID_UNICAST_FRAMES                           = 15,   /**< Unicast Frames. */
+    BCMOLT_EPON_PATH_1G_US_STAT_ID_MPCP_FRAMES                              = 16,   /**< MPCP Frames. */
+    BCMOLT_EPON_PATH_1G_US_STAT_ID_OAM_BYTES                                = 17,   /**< OAM Bytes. */
+    BCMOLT_EPON_PATH_1G_US_STAT_ID_OAM_FRAMES                               = 18,   /**< OAM Frames. */
+    BCMOLT_EPON_PATH_1G_US_STAT_ID_REPORT_FRAMES                            = 19,   /**< Report Frames. */
+    BCMOLT_EPON_PATH_1G_US_STAT_ID_ABORT_FRAMES                             = 20,   /**< Abort Frames. */
+    BCMOLT_EPON_PATH_1G_US_STAT_ID_FCS_ERROR                                = 21,   /**< FCS Error. */
+    BCMOLT_EPON_PATH_1G_US_STAT_ID_CRC_8_ERROR                              = 22,   /**< CRC8 Error. */
+    BCMOLT_EPON_PATH_1G_US_STAT_ID_OUT_OF_SLOT                              = 23,   /**< Out of Slot. */
+    BCMOLT_EPON_PATH_1G_US_STAT_ID_OVERSIZE_ERROR                           = 24,   /**< Oversize Error. */
+    BCMOLT_EPON_PATH_1G_US_STAT_ID_RUNT_ERROR                               = 25,   /**< Runt Error. */
+    BCMOLT_EPON_PATH_1G_US_STAT_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_path_1g_us_stat_id;
+
+/** Identifiers for all properties contained in the epon_rp_cfg group. 
+ */
+typedef enum bcmolt_epon_rp_cfg_id
+{
+    BCMOLT_EPON_RP_CFG_ID__BEGIN                                            = 0,
+    BCMOLT_EPON_RP_CFG_ID_BASE_LLID                                         = 0,    /**< Base logical link identifier. */
+    BCMOLT_EPON_RP_CFG_ID_MPCP_DISC_EN                                      = 1,    /**< MPCP discovery enable. */
+    BCMOLT_EPON_RP_CFG_ID_MPCP_DISC_GNT_LEN_TQ                              = 2,    /**< MPCP discovery grant length TQ. */
+    BCMOLT_EPON_RP_CFG_ID_MPCP_REPORT_TIMEOUT                               = 3,    /**< MPCP report timeout mS. */
+    BCMOLT_EPON_RP_CFG_ID_MAX_MPCP_REG_PER_DISC_WINDOW                      = 4,    /**< Maximum MPCP registrations per discovery window. */
+    BCMOLT_EPON_RP_CFG_ID_MAX_LINKS                                         = 5,    /**< Maximum number of links. */
+    BCMOLT_EPON_RP_CFG_ID_DEFAULT_UPSTREAM_BANDWIDTH                        = 6,    /**< Default Upstream Bandwidth. */
+    BCMOLT_EPON_RP_CFG_ID_RATE_OF_REFRACTION                                = 7,    /**< Rate of Refraction. */
+    BCMOLT_EPON_RP_CFG_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_rp_cfg_id;
+
+/** Identifiers for all properties contained in the epon_rp_key group. 
+ */
+typedef enum bcmolt_epon_rp_key_id
+{
+    BCMOLT_EPON_RP_KEY_ID__BEGIN                                            = 0,
+    BCMOLT_EPON_RP_KEY_ID_EPON_NI                                           = 0,    /**< EPON NI number. */
+    BCMOLT_EPON_RP_KEY_ID_LINK_RATE                                         = 1,    /**< Link rate. */
+    BCMOLT_EPON_RP_KEY_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_rp_key_id;
+
+/** Identifiers for all properties contained in the gpio_cfg group. 
+ */
+typedef enum bcmolt_gpio_cfg_id
+{
+    BCMOLT_GPIO_CFG_ID__BEGIN                                               = 0,
+    BCMOLT_GPIO_CFG_ID_DIRECTION                                            = 0,    /**< Direction. */
+    BCMOLT_GPIO_CFG_ID_VALUE                                                = 1,    /**< Value. */
+    BCMOLT_GPIO_CFG_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpio_cfg_id;
+
+/** Identifiers for all properties contained in the gpio_key group. 
+ */
+typedef enum bcmolt_gpio_key_id
+{
+    BCMOLT_GPIO_KEY_ID__BEGIN                                               = 0,
+    BCMOLT_GPIO_KEY_ID_RESERVED                                             = 0,    /**< Reserved. */
+    BCMOLT_GPIO_KEY_ID_GPIO_ID                                              = 1,    /**< GPIO ID. */
+    BCMOLT_GPIO_KEY_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpio_key_id;
+
+/** Identifiers for all properties contained in the gpon_alloc_auto_cfg group. 
+ */
+typedef enum bcmolt_gpon_alloc_auto_cfg_id
+{
+    BCMOLT_GPON_ALLOC_AUTO_CFG_ID__BEGIN                                    = 0,
+    BCMOLT_GPON_ALLOC_AUTO_CFG_ID_CONFIGURATION_COMPLETED                   = 0,    /**< Configuration Completed. */
+    BCMOLT_GPON_ALLOC_AUTO_CFG_ID_GET_ALLOC_STATS_COMPLETED                 = 1,    /**< Get alloc ID statistics completed. */
+    BCMOLT_GPON_ALLOC_AUTO_CFG_ID_STAT_ALARM_CLEARED                        = 2,    /**< Stat Alarm Cleared. */
+    BCMOLT_GPON_ALLOC_AUTO_CFG_ID_STAT_ALARM_RAISED                         = 3,    /**< Stat Alarm Raised. */
+    BCMOLT_GPON_ALLOC_AUTO_CFG_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_alloc_auto_cfg_id;
+
+/** Identifiers for all properties contained in the gpon_alloc_cfg group. 
+ */
+typedef enum bcmolt_gpon_alloc_cfg_id
+{
+    BCMOLT_GPON_ALLOC_CFG_ID__BEGIN                                         = 0,
+    BCMOLT_GPON_ALLOC_CFG_ID_STATE                                          = 0,    /**< Alloc ID state. */
+    BCMOLT_GPON_ALLOC_CFG_ID_SLA                                            = 1,    /**< Alloc ID SLA. */
+    BCMOLT_GPON_ALLOC_CFG_ID_ONU_ID                                         = 2,    /**< onu_id. */
+    BCMOLT_GPON_ALLOC_CFG_ID_COLLECT_STATS                                  = 3,    /**< Enable statistics collection on the alloc id. */
+    BCMOLT_GPON_ALLOC_CFG_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_alloc_cfg_id;
+
+/** Identifiers for all properties contained in the 
+ * gpon_alloc_configuration_completed group. 
+ */
+typedef enum bcmolt_gpon_alloc_configuration_completed_id
+{
+    BCMOLT_GPON_ALLOC_CONFIGURATION_COMPLETED_ID__BEGIN                     = 0,
+    BCMOLT_GPON_ALLOC_CONFIGURATION_COMPLETED_ID_STATUS                     = 0,    /**< Status. */
+    BCMOLT_GPON_ALLOC_CONFIGURATION_COMPLETED_ID_NEW_STATE                  = 1,    /**< new state. */
+    BCMOLT_GPON_ALLOC_CONFIGURATION_COMPLETED_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_alloc_configuration_completed_id;
+
+/** Identifiers for all properties contained in the 
+ * gpon_alloc_get_alloc_stats_completed group. 
+ */
+typedef enum bcmolt_gpon_alloc_get_alloc_stats_completed_id
+{
+    BCMOLT_GPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID__BEGIN                   = 0,
+    BCMOLT_GPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_STATUS                   = 0,    /**< status. */
+    BCMOLT_GPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_NSR_USED         = 1,    /**< Average NSR used bytes. */
+    BCMOLT_GPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_NSR_ALLOCATED    = 2,    /**< Average NSR allocated bytes. */
+    BCMOLT_GPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_SR_REPORT        = 3,    /**< Average SR report. */
+    BCMOLT_GPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_alloc_get_alloc_stats_completed_id;
+
+/** Identifiers for all properties contained in the gpon_alloc_get_stats group. 
+ */
+typedef enum bcmolt_gpon_alloc_get_stats_id
+{
+    BCMOLT_GPON_ALLOC_GET_STATS_ID__BEGIN                                   = 0,
+    BCMOLT_GPON_ALLOC_GET_STATS_ID_NUM_OF_CYCLES                            = 0,    /**< Number of cycles. */
+    BCMOLT_GPON_ALLOC_GET_STATS_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_alloc_get_stats_id;
+
+/** Identifiers for all properties contained in the gpon_alloc_key group. 
+ */
+typedef enum bcmolt_gpon_alloc_key_id
+{
+    BCMOLT_GPON_ALLOC_KEY_ID__BEGIN                                         = 0,
+    BCMOLT_GPON_ALLOC_KEY_ID_PON_NI                                         = 0,    /**< PON network interface. */
+    BCMOLT_GPON_ALLOC_KEY_ID_ALLOC_ID                                       = 1,    /**< Alloc ID. */
+    BCMOLT_GPON_ALLOC_KEY_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_alloc_key_id;
+
+/** Identifiers for all properties contained in the gpon_alloc_set_state group. 
+ */
+typedef enum bcmolt_gpon_alloc_set_state_id
+{
+    BCMOLT_GPON_ALLOC_SET_STATE_ID__BEGIN                                   = 0,
+    BCMOLT_GPON_ALLOC_SET_STATE_ID_STATE                                    = 0,    /**< State. */
+    BCMOLT_GPON_ALLOC_SET_STATE_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_alloc_set_state_id;
+
+/** Identifiers for all properties contained in the 
+ * gpon_alloc_stat_alarm_cleared group. 
+ */
+typedef enum bcmolt_gpon_alloc_stat_alarm_cleared_id
+{
+    BCMOLT_GPON_ALLOC_STAT_ALARM_CLEARED_ID__BEGIN                          = 0,
+    BCMOLT_GPON_ALLOC_STAT_ALARM_CLEARED_ID_STAT                            = 0,    /**< Statistic ID. */
+    BCMOLT_GPON_ALLOC_STAT_ALARM_CLEARED_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_alloc_stat_alarm_cleared_id;
+
+/** Identifiers for all properties contained in the gpon_alloc_stat_alarm_raised 
+ * group. 
+ */
+typedef enum bcmolt_gpon_alloc_stat_alarm_raised_id
+{
+    BCMOLT_GPON_ALLOC_STAT_ALARM_RAISED_ID__BEGIN                           = 0,
+    BCMOLT_GPON_ALLOC_STAT_ALARM_RAISED_ID_STAT                             = 0,    /**< Statistic ID. */
+    BCMOLT_GPON_ALLOC_STAT_ALARM_RAISED_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_alloc_stat_alarm_raised_id;
+
+/** Identifiers for all properties contained in the gpon_alloc_stat_cfg group. 
+ */
+typedef enum bcmolt_gpon_alloc_stat_cfg_id
+{
+    BCMOLT_GPON_ALLOC_STAT_CFG_ID__BEGIN                                    = 0,
+    BCMOLT_GPON_ALLOC_STAT_CFG_ID_CFG                                       = 0,    /**< Configuration. */
+    BCMOLT_GPON_ALLOC_STAT_CFG_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_alloc_stat_cfg_id;
+
+/** Identifiers for all properties contained in the gpon_alloc_stat group. 
+ */
+typedef enum bcmolt_gpon_alloc_stat_id
+{
+    BCMOLT_GPON_ALLOC_STAT_ID__BEGIN                                        = 0,
+    BCMOLT_GPON_ALLOC_STAT_ID_RX_BYTES                                      = 0,    /**< Received Bytes. */
+    BCMOLT_GPON_ALLOC_STAT_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_alloc_stat_id;
+
+/** Identifiers for all properties contained in the gpon_gem_port_auto_cfg 
+ * group. 
+ */
+typedef enum bcmolt_gpon_gem_port_auto_cfg_id
+{
+    BCMOLT_GPON_GEM_PORT_AUTO_CFG_ID__BEGIN                                 = 0,
+    BCMOLT_GPON_GEM_PORT_AUTO_CFG_ID_CONFIGURATION_COMPLETED                = 0,    /**< Configuration Completed. */
+    BCMOLT_GPON_GEM_PORT_AUTO_CFG_ID_STAT_ALARM_CLEARED                     = 1,    /**< Stat Alarm Cleared. */
+    BCMOLT_GPON_GEM_PORT_AUTO_CFG_ID_STAT_ALARM_RAISED                      = 2,    /**< Stat Alarm Raised. */
+    BCMOLT_GPON_GEM_PORT_AUTO_CFG_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_gem_port_auto_cfg_id;
+
+/** Identifiers for all properties contained in the gpon_gem_port_cfg group. 
+ */
+typedef enum bcmolt_gpon_gem_port_cfg_id
+{
+    BCMOLT_GPON_GEM_PORT_CFG_ID__BEGIN                                      = 0,
+    BCMOLT_GPON_GEM_PORT_CFG_ID_CONFIGURATION                               = 0,    /**< Configuration. */
+    BCMOLT_GPON_GEM_PORT_CFG_ID_ONU_ID                                      = 1,    /**< ONU ID. */
+    BCMOLT_GPON_GEM_PORT_CFG_ID_GEM_PORT_STATE                              = 2,    /**< gem port state. */
+    BCMOLT_GPON_GEM_PORT_CFG_ID_DOWNSTREAM_ENCRYPTION_MODE                  = 3,    /**< Downstream encryption mode. */
+    BCMOLT_GPON_GEM_PORT_CFG_ID_UPSTREAM_DESTINATION_QUEUE                  = 4,    /**< Upstream destination queue. */
+    BCMOLT_GPON_GEM_PORT_CFG_ID_CONTROL                                     = 5,    /**< control. */
+    BCMOLT_GPON_GEM_PORT_CFG_ID_DEBUG_FLOW_CONFIG                           = 6,    /**< Debug flow config. */
+    BCMOLT_GPON_GEM_PORT_CFG_ID_MAC_TABLE_ENTRY_LIMIT                       = 7,    /**< MAC table entry limit. */
+    BCMOLT_GPON_GEM_PORT_CFG_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_gem_port_cfg_id;
+
+/** Identifiers for all properties contained in the 
+ * gpon_gem_port_configuration_completed group. 
+ */
+typedef enum bcmolt_gpon_gem_port_configuration_completed_id
+{
+    BCMOLT_GPON_GEM_PORT_CONFIGURATION_COMPLETED_ID__BEGIN                  = 0,
+    BCMOLT_GPON_GEM_PORT_CONFIGURATION_COMPLETED_ID_STATUS                  = 0,    /**< status. */
+    BCMOLT_GPON_GEM_PORT_CONFIGURATION_COMPLETED_ID_NEW_STATE               = 1,    /**< new state. */
+    BCMOLT_GPON_GEM_PORT_CONFIGURATION_COMPLETED_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_gem_port_configuration_completed_id;
+
+/** Identifiers for all properties contained in the gpon_gem_port_key group. 
+ */
+typedef enum bcmolt_gpon_gem_port_key_id
+{
+    BCMOLT_GPON_GEM_PORT_KEY_ID__BEGIN                                      = 0,
+    BCMOLT_GPON_GEM_PORT_KEY_ID_PON_NI                                      = 0,    /**< PON network interface. */
+    BCMOLT_GPON_GEM_PORT_KEY_ID_GEM_PORT_ID                                 = 1,    /**< GEM Port ID. */
+    BCMOLT_GPON_GEM_PORT_KEY_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_gem_port_key_id;
+
+/** Identifiers for all properties contained in the gpon_gem_port_set_state 
+ * group. 
+ */
+typedef enum bcmolt_gpon_gem_port_set_state_id
+{
+    BCMOLT_GPON_GEM_PORT_SET_STATE_ID__BEGIN                                = 0,
+    BCMOLT_GPON_GEM_PORT_SET_STATE_ID_STATE                                 = 0,    /**< State. */
+    BCMOLT_GPON_GEM_PORT_SET_STATE_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_gem_port_set_state_id;
+
+/** Identifiers for all properties contained in the 
+ * gpon_gem_port_stat_alarm_cleared group. 
+ */
+typedef enum bcmolt_gpon_gem_port_stat_alarm_cleared_id
+{
+    BCMOLT_GPON_GEM_PORT_STAT_ALARM_CLEARED_ID__BEGIN                       = 0,
+    BCMOLT_GPON_GEM_PORT_STAT_ALARM_CLEARED_ID_STAT                         = 0,    /**< Statistic ID. */
+    BCMOLT_GPON_GEM_PORT_STAT_ALARM_CLEARED_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_gem_port_stat_alarm_cleared_id;
+
+/** Identifiers for all properties contained in the 
+ * gpon_gem_port_stat_alarm_raised group. 
+ */
+typedef enum bcmolt_gpon_gem_port_stat_alarm_raised_id
+{
+    BCMOLT_GPON_GEM_PORT_STAT_ALARM_RAISED_ID__BEGIN                        = 0,
+    BCMOLT_GPON_GEM_PORT_STAT_ALARM_RAISED_ID_STAT                          = 0,    /**< Statistic ID. */
+    BCMOLT_GPON_GEM_PORT_STAT_ALARM_RAISED_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_gem_port_stat_alarm_raised_id;
+
+/** Identifiers for all properties contained in the gpon_gem_port_stat_cfg 
+ * group. 
+ */
+typedef enum bcmolt_gpon_gem_port_stat_cfg_id
+{
+    BCMOLT_GPON_GEM_PORT_STAT_CFG_ID__BEGIN                                 = 0,
+    BCMOLT_GPON_GEM_PORT_STAT_CFG_ID_CFG                                    = 0,    /**< Configuration. */
+    BCMOLT_GPON_GEM_PORT_STAT_CFG_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_gem_port_stat_cfg_id;
+
+/** Identifiers for all properties contained in the gpon_gem_port_stat group. 
+ */
+typedef enum bcmolt_gpon_gem_port_stat_id
+{
+    BCMOLT_GPON_GEM_PORT_STAT_ID__BEGIN                                     = 0,
+    BCMOLT_GPON_GEM_PORT_STAT_ID_RX_PACKETS                                 = 0,    /**< Received GEM frames. */
+    BCMOLT_GPON_GEM_PORT_STAT_ID_RX_BYTES                                   = 1,    /**< Received bytes. */
+    BCMOLT_GPON_GEM_PORT_STAT_ID_TX_PACKETS                                 = 2,    /**< Transmitted GEM frames. */
+    BCMOLT_GPON_GEM_PORT_STAT_ID_TX_BYTES                                   = 3,    /**< Transmitted bytes. */
+    BCMOLT_GPON_GEM_PORT_STAT_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_gem_port_stat_id;
+
+/** Identifiers for all properties contained in the gpon_iwf_auto_cfg group. 
+ */
+typedef enum bcmolt_gpon_iwf_auto_cfg_id
+{
+    BCMOLT_GPON_IWF_AUTO_CFG_ID__BEGIN                                      = 0,
+    BCMOLT_GPON_IWF_AUTO_CFG_ID_FLUSH_MAC_TABLE_COMPLETED                   = 0,    /**< Flush MAC Table Completed. */
+    BCMOLT_GPON_IWF_AUTO_CFG_ID_SCAN_MAC_TABLE_COMPLETED                    = 1,    /**< Scan MAC Table Completed. */
+    BCMOLT_GPON_IWF_AUTO_CFG_ID_STAT_ALARM_CLEARED                          = 2,    /**< Stat Alarm Cleared. */
+    BCMOLT_GPON_IWF_AUTO_CFG_ID_STAT_ALARM_RAISED                           = 3,    /**< Stat Alarm Raised. */
+    BCMOLT_GPON_IWF_AUTO_CFG_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_iwf_auto_cfg_id;
+
+/** Identifiers for all properties contained in the gpon_iwf_cfg group. 
+ */
+typedef enum bcmolt_gpon_iwf_cfg_id
+{
+    BCMOLT_GPON_IWF_CFG_ID__BEGIN                                           = 0,
+    BCMOLT_GPON_IWF_CFG_ID_IWF_MODE                                         = 0,    /**< IWF mode. */
+    BCMOLT_GPON_IWF_CFG_ID_US_TPID_PER_FLOW                                 = 1,    /**< US tpid per flow. */
+    BCMOLT_GPON_IWF_CFG_ID_US_OTAG_DIRECT_TPID                              = 2,    /**< US otag direct tpid. */
+    BCMOLT_GPON_IWF_CFG_ID_US_OTAG_DIRECT_PBIT                              = 3,    /**< US otag direct pbit. */
+    BCMOLT_GPON_IWF_CFG_ID_DS_TPID                                          = 4,    /**< DS tpid. */
+    BCMOLT_GPON_IWF_CFG_ID_MAC_TABLE_CONFIGURATION                          = 5,    /**< MAC table configuration. */
+    BCMOLT_GPON_IWF_CFG_ID_DEBUG_FLOW_CONFIGURATION                         = 6,    /**< Debug flow configuration. */
+    BCMOLT_GPON_IWF_CFG_ID_MAC_TABLE_COUNT                                  = 7,    /**< MAC table entry count. */
+    BCMOLT_GPON_IWF_CFG_ID_FORBIDDEN_VLAN_FLOW_GEM_RANGE_START              = 8,    /**< Vlan, flow, Gem forbidden range start value. */
+    BCMOLT_GPON_IWF_CFG_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_iwf_cfg_id;
+
+/** Identifiers for all properties contained in the gpon_iwf_ds_egress_flow_cfg 
+ * group. 
+ */
+typedef enum bcmolt_gpon_iwf_ds_egress_flow_cfg_id
+{
+    BCMOLT_GPON_IWF_DS_EGRESS_FLOW_CFG_ID__BEGIN                            = 0,
+    BCMOLT_GPON_IWF_DS_EGRESS_FLOW_CFG_ID_GEM_PORT                          = 0,    /**< GEM port. */
+    BCMOLT_GPON_IWF_DS_EGRESS_FLOW_CFG_ID_PBIT_CONTROL                      = 1,    /**< Pbit control. */
+    BCMOLT_GPON_IWF_DS_EGRESS_FLOW_CFG_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_iwf_ds_egress_flow_cfg_id;
+
+/** Identifiers for all properties contained in the gpon_iwf_ds_egress_flow_key 
+ * group. 
+ */
+typedef enum bcmolt_gpon_iwf_ds_egress_flow_key_id
+{
+    BCMOLT_GPON_IWF_DS_EGRESS_FLOW_KEY_ID__BEGIN                            = 0,
+    BCMOLT_GPON_IWF_DS_EGRESS_FLOW_KEY_ID_PON_NI                            = 0,    /**< PON network interface. */
+    BCMOLT_GPON_IWF_DS_EGRESS_FLOW_KEY_ID_FLOW_ID                           = 1,    /**< Flow ID. */
+    BCMOLT_GPON_IWF_DS_EGRESS_FLOW_KEY_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_iwf_ds_egress_flow_key_id;
+
+/** Identifiers for all properties contained in the gpon_iwf_ds_ingress_flow_cfg 
+ * group. 
+ */
+typedef enum bcmolt_gpon_iwf_ds_ingress_flow_cfg_id
+{
+    BCMOLT_GPON_IWF_DS_INGRESS_FLOW_CFG_ID__BEGIN                           = 0,
+    BCMOLT_GPON_IWF_DS_INGRESS_FLOW_CFG_ID_MAPPING_METHOD                   = 0,    /**< Mapping method. */
+    BCMOLT_GPON_IWF_DS_INGRESS_FLOW_CFG_ID_MAPPING_TAG                      = 1,    /**< Mapping tag. */
+    BCMOLT_GPON_IWF_DS_INGRESS_FLOW_CFG_ID_VLAN_ACTION                      = 2,    /**< VLAN action. */
+    BCMOLT_GPON_IWF_DS_INGRESS_FLOW_CFG_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_iwf_ds_ingress_flow_cfg_id;
+
+/** Identifiers for all properties contained in the gpon_iwf_ds_ingress_flow_key 
+ * group. 
+ */
+typedef enum bcmolt_gpon_iwf_ds_ingress_flow_key_id
+{
+    BCMOLT_GPON_IWF_DS_INGRESS_FLOW_KEY_ID__BEGIN                           = 0,
+    BCMOLT_GPON_IWF_DS_INGRESS_FLOW_KEY_ID_PON_NI                           = 0,    /**< PON network interface. */
+    BCMOLT_GPON_IWF_DS_INGRESS_FLOW_KEY_ID_VLAN_ID                          = 1,    /**< vlan ID. */
+    BCMOLT_GPON_IWF_DS_INGRESS_FLOW_KEY_ID__NUM_OF          /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_iwf_ds_ingress_flow_key_id;
+
+/** Identifiers for all properties contained in the 
+ * gpon_iwf_flush_mac_table_completed group. 
+ */
+typedef enum bcmolt_gpon_iwf_flush_mac_table_completed_id
+{
+    BCMOLT_GPON_IWF_FLUSH_MAC_TABLE_COMPLETED_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_iwf_flush_mac_table_completed_id;
+
+/** Identifiers for all properties contained in the gpon_iwf_flush_mac_table 
+ * group. 
+ */
+typedef enum bcmolt_gpon_iwf_flush_mac_table_id
+{
+    BCMOLT_GPON_IWF_FLUSH_MAC_TABLE_ID__BEGIN                               = 0,
+    BCMOLT_GPON_IWF_FLUSH_MAC_TABLE_ID_CONTROL                              = 0,    /**< control. */
+    BCMOLT_GPON_IWF_FLUSH_MAC_TABLE_ID_VID                                  = 1,    /**< VID. */
+    BCMOLT_GPON_IWF_FLUSH_MAC_TABLE_ID_FLOW_ID                              = 2,    /**< FLOW ID. */
+    BCMOLT_GPON_IWF_FLUSH_MAC_TABLE_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_iwf_flush_mac_table_id;
+
+/** Identifiers for all properties contained in the gpon_iwf_key group. 
+ */
+typedef enum bcmolt_gpon_iwf_key_id
+{
+    BCMOLT_GPON_IWF_KEY_ID__BEGIN                                           = 0,
+    BCMOLT_GPON_IWF_KEY_ID_PON_NI                                           = 0,    /**< PON network interface. */
+    BCMOLT_GPON_IWF_KEY_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_iwf_key_id;
+
+/** Identifiers for all properties contained in the gpon_iwf_mac_table_auto_cfg 
+ * group. 
+ */
+typedef enum bcmolt_gpon_iwf_mac_table_auto_cfg_id
+{
+    BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID__BEGIN                            = 0,
+    BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID_MAC_AGED                          = 0,    /**< MAC Aged. */
+    BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID_MAC_DROPPED                       = 1,    /**< MAC Dropped. */
+    BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID_MAC_MOVE                          = 2,    /**< MAC Move. */
+    BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID_NEW_MAC                           = 3,    /**< New MAC. */
+    BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_iwf_mac_table_auto_cfg_id;
+
+/** Identifiers for all properties contained in the gpon_iwf_mac_table_cfg 
+ * group. 
+ */
+typedef enum bcmolt_gpon_iwf_mac_table_cfg_id
+{
+    BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID__BEGIN                                 = 0,
+    BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_FLOW_ID                                = 0,    /**< Flow ID. */
+    BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_STAT                                   = 1,    /**< static. */
+    BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_GEM_PORT_ID                            = 2,    /**< GEM Port ID. */
+    BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_ONU_ID                                 = 3,    /**< ONU ID. */
+    BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_iwf_mac_table_cfg_id;
+
+/** Identifiers for all properties contained in the gpon_iwf_mac_table_key 
+ * group. 
+ */
+typedef enum bcmolt_gpon_iwf_mac_table_key_id
+{
+    BCMOLT_GPON_IWF_MAC_TABLE_KEY_ID__BEGIN                                 = 0,
+    BCMOLT_GPON_IWF_MAC_TABLE_KEY_ID_PON_NI                                 = 0,    /**< PON network interface. */
+    BCMOLT_GPON_IWF_MAC_TABLE_KEY_ID_MAC_ADDRESS                            = 1,    /**< MAC address. */
+    BCMOLT_GPON_IWF_MAC_TABLE_KEY_ID_VLAN                                   = 2,    /**< VLAN. */
+    BCMOLT_GPON_IWF_MAC_TABLE_KEY_ID__NUM_OF        /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_iwf_mac_table_key_id;
+
+/** Identifiers for all properties contained in the gpon_iwf_mac_table_mac_aged 
+ * group. 
+ */
+typedef enum bcmolt_gpon_iwf_mac_table_mac_aged_id
+{
+    BCMOLT_GPON_IWF_MAC_TABLE_MAC_AGED_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_iwf_mac_table_mac_aged_id;
+
+/** Identifiers for all properties contained in the 
+ * gpon_iwf_mac_table_mac_dropped group. 
+ */
+typedef enum bcmolt_gpon_iwf_mac_table_mac_dropped_id
+{
+    BCMOLT_GPON_IWF_MAC_TABLE_MAC_DROPPED_ID__BEGIN                         = 0,
+    BCMOLT_GPON_IWF_MAC_TABLE_MAC_DROPPED_ID_FLOW_ID                        = 0,    /**< flow ID. */
+    BCMOLT_GPON_IWF_MAC_TABLE_MAC_DROPPED_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_iwf_mac_table_mac_dropped_id;
+
+/** Identifiers for all properties contained in the gpon_iwf_mac_table_mac_move 
+ * group. 
+ */
+typedef enum bcmolt_gpon_iwf_mac_table_mac_move_id
+{
+    BCMOLT_GPON_IWF_MAC_TABLE_MAC_MOVE_ID__BEGIN                            = 0,
+    BCMOLT_GPON_IWF_MAC_TABLE_MAC_MOVE_ID_OLD_FLOW_ID                       = 0,    /**< old flow ID. */
+    BCMOLT_GPON_IWF_MAC_TABLE_MAC_MOVE_ID_NEW_FLOW_ID                       = 1,    /**< new flow id. */
+    BCMOLT_GPON_IWF_MAC_TABLE_MAC_MOVE_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_iwf_mac_table_mac_move_id;
+
+/** Identifiers for all properties contained in the gpon_iwf_mac_table_new_mac 
+ * group. 
+ */
+typedef enum bcmolt_gpon_iwf_mac_table_new_mac_id
+{
+    BCMOLT_GPON_IWF_MAC_TABLE_NEW_MAC_ID__BEGIN                             = 0,
+    BCMOLT_GPON_IWF_MAC_TABLE_NEW_MAC_ID_FLOW_ID                            = 0,    /**< flow ID. */
+    BCMOLT_GPON_IWF_MAC_TABLE_NEW_MAC_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_iwf_mac_table_new_mac_id;
+
+/** Identifiers for all properties contained in the 
+ * gpon_iwf_scan_mac_table_completed group. 
+ */
+typedef enum bcmolt_gpon_iwf_scan_mac_table_completed_id
+{
+    BCMOLT_GPON_IWF_SCAN_MAC_TABLE_COMPLETED_ID__BEGIN                      = 0,
+    BCMOLT_GPON_IWF_SCAN_MAC_TABLE_COMPLETED_ID_MAC_ADDRESS                 = 0,    /**< MAC Address. */
+    BCMOLT_GPON_IWF_SCAN_MAC_TABLE_COMPLETED_ID_ENTRIES                     = 1,    /**< Entries. */
+    BCMOLT_GPON_IWF_SCAN_MAC_TABLE_COMPLETED_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_iwf_scan_mac_table_completed_id;
+
+/** Identifiers for all properties contained in the gpon_iwf_scan_mac_table 
+ * group. 
+ */
+typedef enum bcmolt_gpon_iwf_scan_mac_table_id
+{
+    BCMOLT_GPON_IWF_SCAN_MAC_TABLE_ID__BEGIN                                = 0,
+    BCMOLT_GPON_IWF_SCAN_MAC_TABLE_ID_MAC_ADDRESS                           = 0,    /**< MAC Address. */
+    BCMOLT_GPON_IWF_SCAN_MAC_TABLE_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_iwf_scan_mac_table_id;
+
+/** Identifiers for all properties contained in the gpon_iwf_stat_alarm_cleared 
+ * group. 
+ */
+typedef enum bcmolt_gpon_iwf_stat_alarm_cleared_id
+{
+    BCMOLT_GPON_IWF_STAT_ALARM_CLEARED_ID__BEGIN                            = 0,
+    BCMOLT_GPON_IWF_STAT_ALARM_CLEARED_ID_STAT                              = 0,    /**< Statistic ID. */
+    BCMOLT_GPON_IWF_STAT_ALARM_CLEARED_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_iwf_stat_alarm_cleared_id;
+
+/** Identifiers for all properties contained in the gpon_iwf_stat_alarm_raised 
+ * group. 
+ */
+typedef enum bcmolt_gpon_iwf_stat_alarm_raised_id
+{
+    BCMOLT_GPON_IWF_STAT_ALARM_RAISED_ID__BEGIN                             = 0,
+    BCMOLT_GPON_IWF_STAT_ALARM_RAISED_ID_STAT                               = 0,    /**< Statistic ID. */
+    BCMOLT_GPON_IWF_STAT_ALARM_RAISED_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_iwf_stat_alarm_raised_id;
+
+/** Identifiers for all properties contained in the gpon_iwf_stat_cfg group. 
+ */
+typedef enum bcmolt_gpon_iwf_stat_cfg_id
+{
+    BCMOLT_GPON_IWF_STAT_CFG_ID__BEGIN                                      = 0,
+    BCMOLT_GPON_IWF_STAT_CFG_ID_CFG                                         = 0,    /**< Configuration. */
+    BCMOLT_GPON_IWF_STAT_CFG_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_iwf_stat_cfg_id;
+
+/** Identifiers for all properties contained in the gpon_iwf_stat group. 
+ */
+typedef enum bcmolt_gpon_iwf_stat_id
+{
+    BCMOLT_GPON_IWF_STAT_ID__BEGIN                                          = 0,
+    BCMOLT_GPON_IWF_STAT_ID_DS_HIT_EVENT                                    = 0,    /**< DS hit event. */
+    BCMOLT_GPON_IWF_STAT_ID_DS_MISS_EVENT                                   = 1,    /**< DS miss event. */
+    BCMOLT_GPON_IWF_STAT_ID_DS_DROP_DUE_TO_MISS_EVENT                       = 2,    /**< DS drop due to miss event. */
+    BCMOLT_GPON_IWF_STAT_ID_DS_DROP_DUE_TO_HIT_EVENT                        = 3,    /**< DS drop due to hit event. */
+    BCMOLT_GPON_IWF_STAT_ID_DS_DROP_TO_DISABLED_GEM                         = 4,    /**< DS drop to disabled GEM. */
+    BCMOLT_GPON_IWF_STAT_ID_NEW_MAC_DISCOVERED                              = 5,    /**< New MAC discovered. */
+    BCMOLT_GPON_IWF_STAT_ID_MOVE_EVENT                                      = 6,    /**< Move event. */
+    BCMOLT_GPON_IWF_STAT_ID_NEW_MAC_DROP_DUE_TO_FIFO_FULL                   = 7,    /**< New MAC drop due to fifo full. */
+    BCMOLT_GPON_IWF_STAT_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_iwf_stat_id;
+
+/** Identifiers for all properties contained in the gpon_iwf_us_flow_cfg group. 
+ */
+typedef enum bcmolt_gpon_iwf_us_flow_cfg_id
+{
+    BCMOLT_GPON_IWF_US_FLOW_CFG_ID__BEGIN                                   = 0,
+    BCMOLT_GPON_IWF_US_FLOW_CFG_ID_FLOW_ID                                  = 0,    /**< Flow ID. */
+    BCMOLT_GPON_IWF_US_FLOW_CFG_ID_MAC_LEARNING                             = 1,    /**< MAC learning. */
+    BCMOLT_GPON_IWF_US_FLOW_CFG_ID_VLAN_ACTION                              = 2,    /**< VLAN action. */
+    BCMOLT_GPON_IWF_US_FLOW_CFG_ID_VLAN_TAG                                 = 3,    /**< Vlan tag. */
+    BCMOLT_GPON_IWF_US_FLOW_CFG_ID_TPID_INDEX                               = 4,    /**< TPID index. */
+    BCMOLT_GPON_IWF_US_FLOW_CFG_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_iwf_us_flow_cfg_id;
+
+/** Identifiers for all properties contained in the gpon_iwf_us_flow_key group. 
+ */
+typedef enum bcmolt_gpon_iwf_us_flow_key_id
+{
+    BCMOLT_GPON_IWF_US_FLOW_KEY_ID__BEGIN                                   = 0,
+    BCMOLT_GPON_IWF_US_FLOW_KEY_ID_PON_NI                                   = 0,    /**< PON network interface. */
+    BCMOLT_GPON_IWF_US_FLOW_KEY_ID_GEM_PORT_ID                              = 1,    /**< GEM Port  ID. */
+    BCMOLT_GPON_IWF_US_FLOW_KEY_ID__NUM_OF                  /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_iwf_us_flow_key_id;
+
+/** Identifiers for all properties contained in the 
+ * gpon_ni_activate_all_onus_completed group. 
+ */
+typedef enum bcmolt_gpon_ni_activate_all_onus_completed_id
+{
+    BCMOLT_GPON_NI_ACTIVATE_ALL_ONUS_COMPLETED_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_ni_activate_all_onus_completed_id;
+
+/** Identifiers for all properties contained in the gpon_ni_auto_cfg group. 
+ */
+typedef enum bcmolt_gpon_ni_auto_cfg_id
+{
+    BCMOLT_GPON_NI_AUTO_CFG_ID__BEGIN                                       = 0,
+    BCMOLT_GPON_NI_AUTO_CFG_ID_ACTIVATE_ALL_ONUS_COMPLETED                  = 0,    /**< activate all onus completed. */
+    BCMOLT_GPON_NI_AUTO_CFG_ID_CPU_PACKETS_FAILURE                          = 1,    /**< CPU Packets Failure. */
+    BCMOLT_GPON_NI_AUTO_CFG_ID_DEACTIVATE_ALL_ONUS_COMPLETED                = 2,    /**< deactivate all onus completed. */
+    BCMOLT_GPON_NI_AUTO_CFG_ID_DISABLE_ALL_ONUS_COMPLETED                   = 3,    /**< disable all onus completed. */
+    BCMOLT_GPON_NI_AUTO_CFG_ID_ENABLE_ALL_ONUS_COMPLETED                    = 4,    /**< enable all onus completed. */
+    BCMOLT_GPON_NI_AUTO_CFG_ID_LOS                                          = 5,    /**< LOS. */
+    BCMOLT_GPON_NI_AUTO_CFG_ID_ONU_DISCOVERED                               = 6,    /**< ONU Discovered. */
+    BCMOLT_GPON_NI_AUTO_CFG_ID_ONU_UPGRADE_COMPLETE                         = 7,    /**< ONU Upgrade Complete. */
+    BCMOLT_GPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_ONUS_RANGED             = 8,    /**< Protection Switching ONUs Ranged. */
+    BCMOLT_GPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED    = 9,    /**< Protection Switching Switchover Completed. */
+    BCMOLT_GPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_TRAFFIC_RESUME          = 10,   /**< Protection Switching Traffic Resume. */
+    BCMOLT_GPON_NI_AUTO_CFG_ID_ROGUE_DETECTION_COMPLETED                    = 11,   /**< Rogue detection completed. */
+    BCMOLT_GPON_NI_AUTO_CFG_ID_ROGUE_ONU_SPECIAL_MAP_CYCLE_START            = 12,   /**< Rogue ONU special map cycle start. */
+    BCMOLT_GPON_NI_AUTO_CFG_ID_SERIAL_NUMBER_ACQUISITION_CYCLE_START        = 13,   /**< Serial Number Acquisition Cycle Start. */
+    BCMOLT_GPON_NI_AUTO_CFG_ID_STANDBY_PON_MONITORING_CYCLE_COMPLETED       = 14,   /**< Standby PON Monitoring Cycle Completed. */
+    BCMOLT_GPON_NI_AUTO_CFG_ID_STAT_ALARM_CLEARED                           = 15,   /**< Stat Alarm Cleared. */
+    BCMOLT_GPON_NI_AUTO_CFG_ID_STAT_ALARM_RAISED                            = 16,   /**< Stat Alarm Raised. */
+    BCMOLT_GPON_NI_AUTO_CFG_ID_STATE_CHANGE_COMPLETED                       = 17,   /**< State Change Completed. */
+    BCMOLT_GPON_NI_AUTO_CFG_ID_TOD_REQUEST_COMPLETED                        = 18,   /**< TOD request completed. */
+    BCMOLT_GPON_NI_AUTO_CFG_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_ni_auto_cfg_id;
+
+/** Identifiers for all properties contained in the 
+ * gpon_ni_broadcast_ploam_packet group. 
+ */
+typedef enum bcmolt_gpon_ni_broadcast_ploam_packet_id
+{
+    BCMOLT_GPON_NI_BROADCAST_PLOAM_PACKET_ID__BEGIN                         = 0,
+    BCMOLT_GPON_NI_BROADCAST_PLOAM_PACKET_ID_PLOAM                          = 0,    /**< ploam. */
+    BCMOLT_GPON_NI_BROADCAST_PLOAM_PACKET_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_ni_broadcast_ploam_packet_id;
+
+/** Identifiers for all properties contained in the gpon_ni_cfg group. 
+ */
+typedef enum bcmolt_gpon_ni_cfg_id
+{
+    BCMOLT_GPON_NI_CFG_ID__BEGIN                                            = 0,
+    BCMOLT_GPON_NI_CFG_ID_PON_STATUS                                        = 0,    /**< PON status. */
+    BCMOLT_GPON_NI_CFG_ID_AVAILABLE_BANDWIDTH                               = 1,    /**< Available Bandwidth. */
+    BCMOLT_GPON_NI_CFG_ID_NUMBER_OF_ACTIVE_ONUS                             = 2,    /**< number of active onus. */
+    BCMOLT_GPON_NI_CFG_ID_NUMBER_OF_ACTIVE_STANDBY_ONUS                     = 3,    /**< number of active standby onus. */
+    BCMOLT_GPON_NI_CFG_ID_PRBS_STATUS                                       = 4,    /**< PRBS status. */
+    BCMOLT_GPON_NI_CFG_ID_PON_DISTANCE                                      = 5,    /**< Pon distance. */
+    BCMOLT_GPON_NI_CFG_ID_RANGING_WINDOW_SIZE                               = 6,    /**< Ranging window size. */
+    BCMOLT_GPON_NI_CFG_ID_PREASSIGNED_EQUALIZATION_DELAY                    = 7,    /**< Pre-assigned Equalization Delay [bits]. */
+    BCMOLT_GPON_NI_CFG_ID_EQD_CYCLES_NUMBER                                 = 8,    /**< EqD measurement cycles number. */
+    BCMOLT_GPON_NI_CFG_ID_POWER_LEVEL                                       = 9,    /**< Power level. */
+    BCMOLT_GPON_NI_CFG_ID_DS_FEC_MODE                                       = 10,   /**< DS FEC mode. */
+    BCMOLT_GPON_NI_CFG_ID_DRIFT_CONTROL                                     = 11,   /**< Drift control. */
+    BCMOLT_GPON_NI_CFG_ID_DS_BER_REPORTING_INTERVAL                         = 12,   /**< DS BER reporting interval in ms. */
+    BCMOLT_GPON_NI_CFG_ID_LOS_ALARM_THRESHOLD                               = 13,   /**< LOS alarm threshold. */
+    BCMOLT_GPON_NI_CFG_ID_LOS_INITIAL_VALUE                                 = 14,   /**< LOS initial value. */
+    BCMOLT_GPON_NI_CFG_ID_ONU_ALARMS_THRESHOLDS                             = 15,   /**< ONU alarms thresholds. */
+    BCMOLT_GPON_NI_CFG_ID_BER_MONITOR                                       = 16,   /**< BER monitoring params. */
+    BCMOLT_GPON_NI_CFG_ID_PLOAM_ACK_TIMEOUT                                 = 17,   /**< Ploam ACK timeout. */
+    BCMOLT_GPON_NI_CFG_ID_ONU_ACTIVATION                                    = 18,   /**< ONU activation. */
+    BCMOLT_GPON_NI_CFG_ID_SN_ACQUISITION                                    = 19,   /**< SN Acquisition . */
+    BCMOLT_GPON_NI_CFG_ID_KEY_EXCHANGE                                      = 20,   /**< Key exchange. */
+    BCMOLT_GPON_NI_CFG_ID_PROTECTION_SWITCHING                              = 21,   /**< Protection switching. */
+    BCMOLT_GPON_NI_CFG_ID_CBR_RT_ALLOCATION_PROFILE                         = 22,   /**< CBR RT Allocation profile. */
+    BCMOLT_GPON_NI_CFG_ID_CBR_NRT_ALLOCATION_PROFILE                        = 23,   /**< CBR NRT Allocation Profile. */
+    BCMOLT_GPON_NI_CFG_ID_DBA                                               = 24,   /**< DBA. */
+    BCMOLT_GPON_NI_CFG_ID_POWER_MANAGEMENT                                  = 25,   /**< Power Management. */
+    BCMOLT_GPON_NI_CFG_ID_ROGUE_ONU_DETECTION_PROCESS                       = 26,   /**< Rogue ONU detection process. */
+    BCMOLT_GPON_NI_CFG_ID_PERIODIC_STANDBY_PON_MONITORING                   = 27,   /**< Periodic Standby PON monitoring. */
+    BCMOLT_GPON_NI_CFG_ID_PRBS_CHECKER                                      = 28,   /**< PRBS Checker. */
+    BCMOLT_GPON_NI_CFG_ID_PRBS_GENERATOR                                    = 29,   /**< PRBS Generator. */
+    BCMOLT_GPON_NI_CFG_ID_MIN_DATA_ALLOC_ID                                 = 30,   /**< Minimum Data Alloc ID. */
+    BCMOLT_GPON_NI_CFG_ID_AUTOMATIC_ONU_DEACTIVATION                        = 31,   /**< Automatic ONU deactivation. */
+    BCMOLT_GPON_NI_CFG_ID_US_BANDWIDTH_LIMIT                                = 32,   /**< US bandwidth Limit. */
+    BCMOLT_GPON_NI_CFG_ID_ALL_ONUS                                          = 33,   /**< all ONUs. */
+    BCMOLT_GPON_NI_CFG_ID_ALL_MCAST_GEM_PORTS                               = 34,   /**< all multicast GEM ports. */
+    BCMOLT_GPON_NI_CFG_ID_DEBUG                                             = 35,   /**< PON NI debug parameters. */
+    BCMOLT_GPON_NI_CFG_ID_ONU_UPGRADE_PARAMS                                = 36,   /**< ONU upgrade params. */
+    BCMOLT_GPON_NI_CFG_ID_PS_C_WAIT_BEFORE_DEACTIVATION_TIMEOUT             = 37,   /**< protection switching type c wait before deactivation timeout. */
+    BCMOLT_GPON_NI_CFG_ID_BIP32_INDICATION_CONTROL                          = 38,   /**< bip32 indication control. */
+    BCMOLT_GPON_NI_CFG_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_ni_cfg_id;
+
+/** Identifiers for all properties contained in the gpon_ni_cpu_packets_failure 
+ * group. 
+ */
+typedef enum bcmolt_gpon_ni_cpu_packets_failure_id
+{
+    BCMOLT_GPON_NI_CPU_PACKETS_FAILURE_ID__BEGIN                            = 0,
+    BCMOLT_GPON_NI_CPU_PACKETS_FAILURE_ID_ERROR                             = 0,    /**< Error. */
+    BCMOLT_GPON_NI_CPU_PACKETS_FAILURE_ID_GEM_PORT_ID                       = 1,    /**< GEM Port ID. */
+    BCMOLT_GPON_NI_CPU_PACKETS_FAILURE_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_ni_cpu_packets_failure_id;
+
+/** Identifiers for all properties contained in the gpon_ni_cpu_packets group. 
+ */
+typedef enum bcmolt_gpon_ni_cpu_packets_id
+{
+    BCMOLT_GPON_NI_CPU_PACKETS_ID__BEGIN                                    = 0,
+    BCMOLT_GPON_NI_CPU_PACKETS_ID_PACKET_TYPE                               = 0,    /**< packet type. */
+    BCMOLT_GPON_NI_CPU_PACKETS_ID_CALC_CRC                                  = 1,    /**< calc crc. */
+    BCMOLT_GPON_NI_CPU_PACKETS_ID_GEM_PORT_LIST                             = 2,    /**< gem port list. */
+    BCMOLT_GPON_NI_CPU_PACKETS_ID_BUFFER                                    = 3,    /**< buffer. */
+    BCMOLT_GPON_NI_CPU_PACKETS_ID__NUM_OF                   /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_ni_cpu_packets_id;
+
+/** Identifiers for all properties contained in the 
+ * gpon_ni_deactivate_all_onus_completed group. 
+ */
+typedef enum bcmolt_gpon_ni_deactivate_all_onus_completed_id
+{
+    BCMOLT_GPON_NI_DEACTIVATE_ALL_ONUS_COMPLETED_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_ni_deactivate_all_onus_completed_id;
+
+/** Identifiers for all properties contained in the 
+ * gpon_ni_disable_all_onus_completed group. 
+ */
+typedef enum bcmolt_gpon_ni_disable_all_onus_completed_id
+{
+    BCMOLT_GPON_NI_DISABLE_ALL_ONUS_COMPLETED_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_ni_disable_all_onus_completed_id;
+
+/** Identifiers for all properties contained in the 
+ * gpon_ni_disable_serial_number group. 
+ */
+typedef enum bcmolt_gpon_ni_disable_serial_number_id
+{
+    BCMOLT_GPON_NI_DISABLE_SERIAL_NUMBER_ID__BEGIN                          = 0,
+    BCMOLT_GPON_NI_DISABLE_SERIAL_NUMBER_ID_CONTROL                         = 0,    /**< control. */
+    BCMOLT_GPON_NI_DISABLE_SERIAL_NUMBER_ID_SERIAL_NUMBER                   = 1,    /**< serial number. */
+    BCMOLT_GPON_NI_DISABLE_SERIAL_NUMBER_ID__NUM_OF     /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_ni_disable_serial_number_id;
+
+/** Identifiers for all properties contained in the 
+ * gpon_ni_enable_all_onus_completed group. 
+ */
+typedef enum bcmolt_gpon_ni_enable_all_onus_completed_id
+{
+    BCMOLT_GPON_NI_ENABLE_ALL_ONUS_COMPLETED_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_ni_enable_all_onus_completed_id;
+
+/** Identifiers for all properties contained in the gpon_ni_key group. 
+ */
+typedef enum bcmolt_gpon_ni_key_id
+{
+    BCMOLT_GPON_NI_KEY_ID__BEGIN                                            = 0,
+    BCMOLT_GPON_NI_KEY_ID_PON_NI                                            = 0,    /**< PON network interface. */
+    BCMOLT_GPON_NI_KEY_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_ni_key_id;
+
+/** Identifiers for all properties contained in the gpon_ni_los group. 
+ */
+typedef enum bcmolt_gpon_ni_los_id
+{
+    BCMOLT_GPON_NI_LOS_ID__BEGIN                                            = 0,
+    BCMOLT_GPON_NI_LOS_ID_STATUS                                            = 0,    /**< status. */
+    BCMOLT_GPON_NI_LOS_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_ni_los_id;
+
+/** Identifiers for all properties contained in the gpon_ni_onu_discovered 
+ * group. 
+ */
+typedef enum bcmolt_gpon_ni_onu_discovered_id
+{
+    BCMOLT_GPON_NI_ONU_DISCOVERED_ID__BEGIN                                 = 0,
+    BCMOLT_GPON_NI_ONU_DISCOVERED_ID_SERIAL_NUMBER                          = 0,    /**< serial number. */
+    BCMOLT_GPON_NI_ONU_DISCOVERED_ID_RANGING_TIME                           = 1,    /**< ranging time. */
+    BCMOLT_GPON_NI_ONU_DISCOVERED_ID_ONU_ID                                 = 2,    /**< onu_id. */
+    BCMOLT_GPON_NI_ONU_DISCOVERED_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_ni_onu_discovered_id;
+
+/** Identifiers for all properties contained in the gpon_ni_onu_upgrade_complete 
+ * group. 
+ */
+typedef enum bcmolt_gpon_ni_onu_upgrade_complete_id
+{
+    BCMOLT_GPON_NI_ONU_UPGRADE_COMPLETE_ID__BEGIN                           = 0,
+    BCMOLT_GPON_NI_ONU_UPGRADE_COMPLETE_ID_STATUS                           = 0,    /**< Status. */
+    BCMOLT_GPON_NI_ONU_UPGRADE_COMPLETE_ID_LIST_OF_FAILED_ENTITIES          = 1,    /**< List of failed entities. */
+    BCMOLT_GPON_NI_ONU_UPGRADE_COMPLETE_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_ni_onu_upgrade_complete_id;
+
+/** Identifiers for all properties contained in the 
+ * gpon_ni_protection_switching_onus_ranged group. 
+ */
+typedef enum bcmolt_gpon_ni_protection_switching_onus_ranged_id
+{
+    BCMOLT_GPON_NI_PROTECTION_SWITCHING_ONUS_RANGED_ID__BEGIN               = 0,
+    BCMOLT_GPON_NI_PROTECTION_SWITCHING_ONUS_RANGED_ID_ONUS                 = 0,            /**< ONUs. */
+    BCMOLT_GPON_NI_PROTECTION_SWITCHING_ONUS_RANGED_ID__NUM_OF                              /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_ni_protection_switching_onus_ranged_id;
+
+/** Identifiers for all properties contained in the 
+ * gpon_ni_protection_switching_switchover_completed group. 
+ */
+typedef enum bcmolt_gpon_ni_protection_switching_switchover_completed_id
+{
+    BCMOLT_GPON_NI_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED_ID__BEGIN      = 0,
+    BCMOLT_GPON_NI_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED_ID_RESULT      = 0,            /**< Result. */
+    BCMOLT_GPON_NI_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED_ID__NUM_OF                     /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_ni_protection_switching_switchover_completed_id;
+
+/** Identifiers for all properties contained in the 
+ * gpon_ni_protection_switching_traffic_resume group. 
+ */
+typedef enum bcmolt_gpon_ni_protection_switching_traffic_resume_id
+{
+    BCMOLT_GPON_NI_PROTECTION_SWITCHING_TRAFFIC_RESUME_ID__BEGIN            = 0,
+    BCMOLT_GPON_NI_PROTECTION_SWITCHING_TRAFFIC_RESUME_ID_RESULT            = 0,            /**< Result. */
+    BCMOLT_GPON_NI_PROTECTION_SWITCHING_TRAFFIC_RESUME_ID__NUM_OF                           /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_ni_protection_switching_traffic_resume_id;
+
+/** Identifiers for all properties contained in the 
+ * gpon_ni_protection_switching_type_c_set_multiple_onu_state group. 
+ */
+typedef enum bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_id
+{
+    BCMOLT_GPON_NI_PROTECTION_SWITCHING_TYPE_C_SET_MULTIPLE_ONU_STATE_ID__BEGIN     = 0,
+    BCMOLT_GPON_NI_PROTECTION_SWITCHING_TYPE_C_SET_MULTIPLE_ONU_STATE_ID_ONU_STATE  = 0,    /**< onu state. */
+    BCMOLT_GPON_NI_PROTECTION_SWITCHING_TYPE_C_SET_MULTIPLE_ONU_STATE_ID_ONU_LIST   = 1,    /**< onu list. */
+    BCMOLT_GPON_NI_PROTECTION_SWITCHING_TYPE_C_SET_MULTIPLE_ONU_STATE_ID__NUM_OF            /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_id;
+
+/** Identifiers for all properties contained in the gpon_ni_reset group. 
+ */
+typedef enum bcmolt_gpon_ni_reset_id
+{
+    BCMOLT_GPON_NI_RESET_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_ni_reset_id;
+
+/** Identifiers for all properties contained in the 
+ * gpon_ni_rogue_detection_completed group. 
+ */
+typedef enum bcmolt_gpon_ni_rogue_detection_completed_id
+{
+    BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID__BEGIN                              = 0,
+    BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_WINDOW_TYPE                         = 0,    /**< Window type. */
+    BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_MEASUREMENT_STATUS                  = 1,    /**< Measurement status. */
+    BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_ALLOC_ID                            = 2,    /**< Alloc ID. */
+    BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_ONU_ID                              = 3,    /**< ONU ID. */
+    BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_IS_DELINEATION                      = 4,    /**< Is delineation. */
+    BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_IS_ED                               = 5,    /**< Is ED. */
+    BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_RX_DATA                             = 6,    /**< Received data. */
+    BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_PLOAM_RECEIVED_ONU_ID               = 7,    /**< ploam_received_onu_id. */
+    BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_PLOAM_RECEIVED_CRC_ERROR            = 8,    /**< ploam_received_crc_error. */
+    BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_ni_rogue_detection_completed_id;
+
+/** Identifiers for all properties contained in the 
+ * gpon_ni_rogue_detection_window group. 
+ */
+typedef enum bcmolt_gpon_ni_rogue_detection_window_id
+{
+    BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID__BEGIN                                 = 0,
+    BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_WINDOW_TYPE                            = 0,    /**< Window type. */
+    BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_ALLOC_ID                               = 1,    /**< Alloc ID. */
+    BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_ONU_ID                                 = 2,    /**< ONU ID. */
+    BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_SECOND_RANGING_WINDOW                  = 3,    /**< Second ranging window. */
+    BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID__NUM_OF                /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_ni_rogue_detection_window_id;
+
+/** Identifiers for all properties contained in the 
+ * gpon_ni_rogue_onu_special_map_cycle_start group. 
+ */
+typedef enum bcmolt_gpon_ni_rogue_onu_special_map_cycle_start_id
+{
+    BCMOLT_GPON_NI_ROGUE_ONU_SPECIAL_MAP_CYCLE_START_ID__NUM_OF     /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_ni_rogue_onu_special_map_cycle_start_id;
+
+/** Identifiers for all properties contained in the 
+ * gpon_ni_serial_number_acquisition_cycle_start group. 
+ */
+typedef enum bcmolt_gpon_ni_serial_number_acquisition_cycle_start_id
+{
+    BCMOLT_GPON_NI_SERIAL_NUMBER_ACQUISITION_CYCLE_START_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_ni_serial_number_acquisition_cycle_start_id;
+
+/** Identifiers for all properties contained in the gpon_ni_set_onu_state group. 
+ */
+typedef enum bcmolt_gpon_ni_set_onu_state_id
+{
+    BCMOLT_GPON_NI_SET_ONU_STATE_ID__BEGIN                                          = 0,
+    BCMOLT_GPON_NI_SET_ONU_STATE_ID_ONU_STATE                                       = 0,    /**< ONU state. */
+    BCMOLT_GPON_NI_SET_ONU_STATE_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_ni_set_onu_state_id;
+
+/** Identifiers for all properties contained in the gpon_ni_set_pon_state group. 
+ */
+typedef enum bcmolt_gpon_ni_set_pon_state_id
+{
+    BCMOLT_GPON_NI_SET_PON_STATE_ID__BEGIN                                          = 0,
+    BCMOLT_GPON_NI_SET_PON_STATE_ID_PON_STATE                                       = 0,    /**< PON state. */
+    BCMOLT_GPON_NI_SET_PON_STATE_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_ni_set_pon_state_id;
+
+/** Identifiers for all properties contained in the 
+ * gpon_ni_single_request_standby_pon_monitoring group. 
+ */
+typedef enum bcmolt_gpon_ni_single_request_standby_pon_monitoring_id
+{
+    BCMOLT_GPON_NI_SINGLE_REQUEST_STANDBY_PON_MONITORING_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_ni_single_request_standby_pon_monitoring_id;
+
+/** Identifiers for all properties contained in the 
+ * gpon_ni_standby_pon_monitoring_cycle_completed group. 
+ */
+typedef enum bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_id
+{
+    BCMOLT_GPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID__BEGIN                         = 0,
+    BCMOLT_GPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID_NUMBER_OF_DETECTED_DELIMITER   = 0,    /**< number of detected delimiter. */
+    BCMOLT_GPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID_ENERGY_DETECT_SIGNAL           = 1,    /**< energy detect signal. */
+    BCMOLT_GPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_id;
+
+/** Identifiers for all properties contained in the gpon_ni_start_onu_upgrade 
+ * group. 
+ */
+typedef enum bcmolt_gpon_ni_start_onu_upgrade_id
+{
+    BCMOLT_GPON_NI_START_ONU_UPGRADE_ID__BEGIN                                              = 0,
+    BCMOLT_GPON_NI_START_ONU_UPGRADE_ID_LIST_OF_ONU_IDS                                     = 0,    /**< List of ONU IDs. */
+    BCMOLT_GPON_NI_START_ONU_UPGRADE_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_ni_start_onu_upgrade_id;
+
+/** Identifiers for all properties contained in the gpon_ni_stat_alarm_cleared 
+ * group. 
+ */
+typedef enum bcmolt_gpon_ni_stat_alarm_cleared_id
+{
+    BCMOLT_GPON_NI_STAT_ALARM_CLEARED_ID__BEGIN                                             = 0,
+    BCMOLT_GPON_NI_STAT_ALARM_CLEARED_ID_STAT                                               = 0,    /**< Statistic ID. */
+    BCMOLT_GPON_NI_STAT_ALARM_CLEARED_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_ni_stat_alarm_cleared_id;
+
+/** Identifiers for all properties contained in the gpon_ni_stat_alarm_raised 
+ * group. 
+ */
+typedef enum bcmolt_gpon_ni_stat_alarm_raised_id
+{
+    BCMOLT_GPON_NI_STAT_ALARM_RAISED_ID__BEGIN                                              = 0,
+    BCMOLT_GPON_NI_STAT_ALARM_RAISED_ID_STAT                                                = 0,    /**< Statistic ID. */
+    BCMOLT_GPON_NI_STAT_ALARM_RAISED_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_ni_stat_alarm_raised_id;
+
+/** Identifiers for all properties contained in the gpon_ni_stat_cfg group. 
+ */
+typedef enum bcmolt_gpon_ni_stat_cfg_id
+{
+    BCMOLT_GPON_NI_STAT_CFG_ID__BEGIN                                                       = 0,
+    BCMOLT_GPON_NI_STAT_CFG_ID_CFG                                                          = 0,    /**< Configuration. */
+    BCMOLT_GPON_NI_STAT_CFG_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_ni_stat_cfg_id;
+
+/** Identifiers for all properties contained in the gpon_ni_stat group. 
+ */
+typedef enum bcmolt_gpon_ni_stat_id
+{
+    BCMOLT_GPON_NI_STAT_ID__BEGIN                                                           = 0,
+    BCMOLT_GPON_NI_STAT_ID_FEC_CODEWORDS                                                    = 0,    /**< Received FEC codewords. */
+    BCMOLT_GPON_NI_STAT_ID_FEC_CODEWORDS_UNCORRECTED                                        = 1,    /**< Received uncorrected FEC codewords. */
+    BCMOLT_GPON_NI_STAT_ID_BIP8_BYTES                                                       = 2,    /**< Received bytes protected by bip8. */
+    BCMOLT_GPON_NI_STAT_ID_BIP8_ERRORS                                                      = 3,    /**< Received bip8 errors. */
+    BCMOLT_GPON_NI_STAT_ID_RX_GEM_PACKETS                                                   = 4,    /**< Received GEM frames. */
+    BCMOLT_GPON_NI_STAT_ID_RX_GEM_DROPPED                                                   = 5,    /**< Received dropped GEM ID packets. */
+    BCMOLT_GPON_NI_STAT_ID_RX_GEM_IDLE                                                      = 6,    /**< Received idle GEM frames. */
+    BCMOLT_GPON_NI_STAT_ID_RX_GEM_CORRECTED                                                 = 7,    /**< Received corrected GEM frames. */
+    BCMOLT_GPON_NI_STAT_ID_RX_GEM_ILLEGAL                                                   = 8,    /**< Received illegal GEM frames. */
+    BCMOLT_GPON_NI_STAT_ID_RX_ALLOCATIONS_VALID                                             = 9,    /**< Received valid allocations. */
+    BCMOLT_GPON_NI_STAT_ID_RX_ALLOCATIONS_INVALID                                           = 10,   /**< Received invalid allocations. */
+    BCMOLT_GPON_NI_STAT_ID_RX_ALLOCATIONS_DISABLED                                          = 11,   /**< Received disabled allocations. */
+    BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS                                                        = 12,   /**< Received Ploams. */
+    BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS_NON_IDLE                                               = 13,   /**< Received non idle Ploams. */
+    BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS_ERROR                                                  = 14,   /**< Received error Ploams. */
+    BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS_DROPPED                                                = 15,   /**< Received dropped Ploams. */
+    BCMOLT_GPON_NI_STAT_ID_RX_CPU                                                           = 16,   /**< Received CPU packets. */
+    BCMOLT_GPON_NI_STAT_ID_RX_OMCI                                                          = 17,   /**< Received OMCI packets. */
+    BCMOLT_GPON_NI_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR                                        = 18,   /**< Received OMCI packets with CRC errors. */
+    BCMOLT_GPON_NI_STAT_ID_RX_DROPPED_TOO_SHORT                                             = 19,   /**< Received packets dropped due to length too short. */
+    BCMOLT_GPON_NI_STAT_ID_RX_DROPPED_TOO_LONG                                              = 20,   /**< Received packet dropped due to length too long. */
+    BCMOLT_GPON_NI_STAT_ID_RX_CRC_ERRORS                                                    = 21,   /**< Received packet dropped due to crc error. */
+    BCMOLT_GPON_NI_STAT_ID_RX_KEY_ERRORS                                                    = 22,   /**< Received packet dropped due to key error. */
+    BCMOLT_GPON_NI_STAT_ID_RX_FRAGMENTS_ERRORS                                              = 23,   /**< Received packet dropped due to fragmentation error. */
+    BCMOLT_GPON_NI_STAT_ID_RX_PACKETS_DROPPED                                               = 24,   /**< Global dropped packets. */
+    BCMOLT_GPON_NI_STAT_ID_TX_GEM                                                           = 25,   /**< Transmitted GEM frames. */
+    BCMOLT_GPON_NI_STAT_ID_TX_PLOAMS                                                        = 26,   /**< Transmitted Ploams. */
+    BCMOLT_GPON_NI_STAT_ID_TX_GEM_FRAGMENTS                                                 = 27,   /**< Transmitted GEM fragments. */
+    BCMOLT_GPON_NI_STAT_ID_TX_CPU                                                           = 28,   /**< Transmitted CPU packets. */
+    BCMOLT_GPON_NI_STAT_ID_TX_OMCI                                                          = 29,   /**< Transmitted OMCI packets. */
+    BCMOLT_GPON_NI_STAT_ID_TX_CPU_OMCI_PACKETS_DROPPED                                      = 30,   /**< Transmit packets dropped due to illegal length. */
+    BCMOLT_GPON_NI_STAT_ID_TX_DROPPED_ILLEGAL_LENGTH                                        = 31,   /**< Transmitted packet dropped due to illegal length. */
+    BCMOLT_GPON_NI_STAT_ID_TX_DROPPED_TPID_MISS                                             = 32,   /**< Dropped because of TPID miss. */
+    BCMOLT_GPON_NI_STAT_ID_TX_DROPPED_VID_MISS                                              = 33,   /**< Dropped because of VID miss. */
+    BCMOLT_GPON_NI_STAT_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_ni_stat_id;
+
+/** Identifiers for all properties contained in the 
+ * gpon_ni_state_change_completed group. 
+ */
+typedef enum bcmolt_gpon_ni_state_change_completed_id
+{
+    BCMOLT_GPON_NI_STATE_CHANGE_COMPLETED_ID__BEGIN                                         = 0,
+    BCMOLT_GPON_NI_STATE_CHANGE_COMPLETED_ID_RESULT                                         = 0,    /**< Result. */
+    BCMOLT_GPON_NI_STATE_CHANGE_COMPLETED_ID_PREVIOUS_STATE                                 = 1,    /**< Previous state. */
+    BCMOLT_GPON_NI_STATE_CHANGE_COMPLETED_ID_NEW_STATE                                      = 2,    /**< New state. */
+    BCMOLT_GPON_NI_STATE_CHANGE_COMPLETED_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_ni_state_change_completed_id;
+
+/** Identifiers for all properties contained in the 
+ * gpon_ni_tod_request_completed group. 
+ */
+typedef enum bcmolt_gpon_ni_tod_request_completed_id
+{
+    BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID__BEGIN                                          = 0,
+    BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_TOD_STRING                                      = 0,    /**< tod_string. */
+    BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_SFC                                             = 1,    /**< sfc. */
+    BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_RTC_OFFSET_SEC                                  = 2,    /**< rtc_offset_sec. */
+    BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_RTC_OFFSET_NSEC                                 = 3,    /**< rtc_offset_nsec. */
+    BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_STATUS                                          = 4,    /**< status. */
+    BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_ni_tod_request_completed_id;
+
+/** Identifiers for all properties contained in the gpon_ni_tod_request group. 
+ */
+typedef enum bcmolt_gpon_ni_tod_request_id
+{
+    BCMOLT_GPON_NI_TOD_REQUEST_ID__NUM_OF           /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_ni_tod_request_id;
+
+/** Identifiers for all properties contained in the gpon_onu_auto_cfg group. 
+ */
+typedef enum bcmolt_gpon_onu_auto_cfg_id
+{
+    BCMOLT_GPON_ONU_AUTO_CFG_ID__BEGIN                                                      = 0,
+    BCMOLT_GPON_ONU_AUTO_CFG_ID_BER_INTERVAL_CONFIGURATION_COMPLETED                        = 0,    /**< BER Interval Configuration Completed. */
+    BCMOLT_GPON_ONU_AUTO_CFG_ID_DFI                                                         = 1,    /**< Receive Dying-Gasp of ONUi. */
+    BCMOLT_GPON_ONU_AUTO_CFG_ID_DGI                                                         = 2,    /**< Receive Dying-Gasp of ONUi. */
+    BCMOLT_GPON_ONU_AUTO_CFG_ID_DOWI                                                        = 3,    /**< Drift of Window of ONUi. */
+    BCMOLT_GPON_ONU_AUTO_CFG_ID_ERR                                                         = 4,    /**< ERR. */
+    BCMOLT_GPON_ONU_AUTO_CFG_ID_INVALID_DBRU_REPORT                                         = 5,    /**< Invalid DBRu Report. */
+    BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_COMPLETED                                      = 6,    /**< Key Exchange Completed. */
+    BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_CYCLE_SKIPPED                                  = 7,    /**< Key Exchange Cycle Skipped. */
+    BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_DECRYPT_REQUIRED                               = 8,    /**< Key Exchange Decrypt Required. */
+    BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_KEY_MISMATCH                                   = 9,    /**< Key Exchange Key Mismatch. */
+    BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_KEY_REQUEST_TIMEOUT                            = 10,   /**< Key Exchange Key Request Timeout. */
+    BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_UNCONSECUTIVE_INDEX                            = 11,   /**< Key Exchange Unconsecutive Index. */
+    BCMOLT_GPON_ONU_AUTO_CFG_ID_LOAI                                                        = 12,   /**< LOAi. */
+    BCMOLT_GPON_ONU_AUTO_CFG_ID_LOKI                                                        = 13,   /**< LOki. */
+    BCMOLT_GPON_ONU_AUTO_CFG_ID_MEMI                                                        = 14,   /**< MEMi. */
+    BCMOLT_GPON_ONU_AUTO_CFG_ID_OMCI_PORT_ID_CONFIGURATION_COMPLETED                        = 15,   /**< OMCI PORT ID Configuration Completed. */
+    BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_ACTIVATION_COMPLETED                                    = 16,   /**< ONU Activation Completed. */
+    BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_ACTIVATION_STANDBY_COMPLETED                            = 17,   /**< onu activation standby completed. */
+    BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_ALARM                                                   = 18,   /**< ONU Alarm. */
+    BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_DEACTIVATION_COMPLETED                                  = 19,   /**< ONU Deactivation Completed. */
+    BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_DISABLE_COMPLETED                                       = 20,   /**< ONU Disable Completed. */
+    BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_ENABLE_COMPLETED                                        = 21,   /**< ONU Enable Completed. */
+    BCMOLT_GPON_ONU_AUTO_CFG_ID_OPTICAL_REFLECTION                                          = 22,   /**< Optical Reflection. */
+    BCMOLT_GPON_ONU_AUTO_CFG_ID_PASSWORD_AUTHENTICATION_COMPLETED                           = 23,   /**< Password Authentication Completed. */
+    BCMOLT_GPON_ONU_AUTO_CFG_ID_PEE                                                         = 24,   /**< PEE. */
+    BCMOLT_GPON_ONU_AUTO_CFG_ID_POSSIBLE_DRIFT                                              = 25,   /**< Possible Drift. */
+    BCMOLT_GPON_ONU_AUTO_CFG_ID_POWER_MANAGEMENT_STATE_CHANGE                               = 26,   /**< Power Management State Change. */
+    BCMOLT_GPON_ONU_AUTO_CFG_ID_PST                                                         = 27,   /**< PST. */
+    BCMOLT_GPON_ONU_AUTO_CFG_ID_RANGING_COMPLETED                                           = 28,   /**< Ranging Completed. */
+    BCMOLT_GPON_ONU_AUTO_CFG_ID_REI                                                         = 29,   /**< REI. */
+    BCMOLT_GPON_ONU_AUTO_CFG_ID_RSSI_MEASUREMENT_COMPLETED                                  = 30,   /**< RSSI Measurement Completed. */
+    BCMOLT_GPON_ONU_AUTO_CFG_ID_SDI                                                         = 31,   /**< Signal Degraded of ONUi. */
+    BCMOLT_GPON_ONU_AUTO_CFG_ID_SFI                                                         = 32,   /**< Signal Fail of ONUi. */
+    BCMOLT_GPON_ONU_AUTO_CFG_ID_STAT_ALARM_CLEARED                                          = 33,   /**< Stat Alarm Cleared. */
+    BCMOLT_GPON_ONU_AUTO_CFG_ID_STAT_ALARM_RAISED                                           = 34,   /**< Stat Alarm Raised. */
+    BCMOLT_GPON_ONU_AUTO_CFG_ID_SUFI                                                        = 35,   /**< SUFi. */
+    BCMOLT_GPON_ONU_AUTO_CFG_ID_TIWI                                                        = 36,   /**< Transmission Interference Warning. */
+    BCMOLT_GPON_ONU_AUTO_CFG_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_auto_cfg_id;
+
+/** Identifiers for all properties contained in the 
+ * gpon_onu_ber_interval_configuration_completed group. 
+ */
+typedef enum bcmolt_gpon_onu_ber_interval_configuration_completed_id
+{
+    BCMOLT_GPON_ONU_BER_INTERVAL_CONFIGURATION_COMPLETED_ID__BEGIN                          = 0,
+    BCMOLT_GPON_ONU_BER_INTERVAL_CONFIGURATION_COMPLETED_ID_BER_INTERVAL                    = 0,    /**< BER interval in ms. */
+    BCMOLT_GPON_ONU_BER_INTERVAL_CONFIGURATION_COMPLETED_ID_RESULT                          = 1,    /**< Result. */
+    BCMOLT_GPON_ONU_BER_INTERVAL_CONFIGURATION_COMPLETED_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_ber_interval_configuration_completed_id;
+
+/** Identifiers for all properties contained in the gpon_onu_cfg group. 
+ */
+typedef enum bcmolt_gpon_onu_cfg_id
+{
+    BCMOLT_GPON_ONU_CFG_ID__BEGIN                                                           = 0,
+    BCMOLT_GPON_ONU_CFG_ID_ONU_STATE                                                        = 0,    /**< onu state. */
+    BCMOLT_GPON_ONU_CFG_ID_SERIAL_NUMBER                                                    = 1,    /**< Serial number. */
+    BCMOLT_GPON_ONU_CFG_ID_PASSWORD                                                         = 2,    /**< password. */
+    BCMOLT_GPON_ONU_CFG_ID_AUTO_PASSWORD_LEARNING                                           = 3,    /**< auto password learning. */
+    BCMOLT_GPON_ONU_CFG_ID_US_FEC                                                           = 4,    /**< US FEC. */
+    BCMOLT_GPON_ONU_CFG_ID_OMCI_PORT_ID                                                     = 5,    /**< OMCI port ID. */
+    BCMOLT_GPON_ONU_CFG_ID_DS_BER_REPORTING_INTERVAL                                        = 6,    /**< DS BER reporting interval in ms. */
+    BCMOLT_GPON_ONU_CFG_ID_AES_ENCRYPTION_KEY                                               = 7,    /**< AES encryption key. */
+    BCMOLT_GPON_ONU_CFG_ID_ALARM_STATE                                                      = 8,    /**< alarm state. */
+    BCMOLT_GPON_ONU_CFG_ID_RANGING_TIME                                                     = 9,    /**< ranging time. */
+    BCMOLT_GPON_ONU_CFG_ID_DISABLED_AFTER_DISCOVERY                                         = 10,   /**< Disabled after Discovery. */
+    BCMOLT_GPON_ONU_CFG_ID_DEACTIVATION_REASON                                              = 11,   /**< deactivation reason. */
+    BCMOLT_GPON_ONU_CFG_ID_ALL_GEM_PORTS                                                    = 12,   /**< all GEM ports. */
+    BCMOLT_GPON_ONU_CFG_ID_ALL_ALLOCS                                                       = 13,   /**< all allocs. */
+    BCMOLT_GPON_ONU_CFG_ID_ONU_PS_TYPE_C                                                    = 14,   /**< onu protection switching type c. */
+    BCMOLT_GPON_ONU_CFG_ID_EXTENDED_GUARD_TIME                                              = 15,   /**< Extended Guard Time. */
+    BCMOLT_GPON_ONU_CFG_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_cfg_id;
+
+/** Identifiers for all properties contained in the gpon_onu_change_power_level 
+ * group. 
+ */
+typedef enum bcmolt_gpon_onu_change_power_level_id
+{
+    BCMOLT_GPON_ONU_CHANGE_POWER_LEVEL_ID__BEGIN                                            = 0,
+    BCMOLT_GPON_ONU_CHANGE_POWER_LEVEL_ID_POWER_LEVEL_ACTION                                = 0,    /**< power level action. */
+    BCMOLT_GPON_ONU_CHANGE_POWER_LEVEL_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_change_power_level_id;
+
+/** Identifiers for all properties contained in the gpon_onu_cpu_packet group. 
+ */
+typedef enum bcmolt_gpon_onu_cpu_packet_id
+{
+    BCMOLT_GPON_ONU_CPU_PACKET_ID__BEGIN                                                    = 0,
+    BCMOLT_GPON_ONU_CPU_PACKET_ID_PORT_ID                                                   = 0,    /**< port_id. */
+    BCMOLT_GPON_ONU_CPU_PACKET_ID_CRC_OK                                                    = 1,    /**< crc_ok. */
+    BCMOLT_GPON_ONU_CPU_PACKET_ID_PACKET_SIZE                                               = 2,    /**< packet_size. */
+    BCMOLT_GPON_ONU_CPU_PACKET_ID_BUFFER                                                    = 3,    /**< buffer. */
+    BCMOLT_GPON_ONU_CPU_PACKET_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_cpu_packet_id;
+
+/** Identifiers for all properties contained in the gpon_onu_cpu_packets group. 
+ */
+typedef enum bcmolt_gpon_onu_cpu_packets_id
+{
+    BCMOLT_GPON_ONU_CPU_PACKETS_ID__BEGIN                                                   = 0,
+    BCMOLT_GPON_ONU_CPU_PACKETS_ID_PACKET_TYPE                                              = 0,    /**< packet type. */
+    BCMOLT_GPON_ONU_CPU_PACKETS_ID_CALC_CRC                                                 = 1,    /**< calc crc. */
+    BCMOLT_GPON_ONU_CPU_PACKETS_ID_NUMBER_OF_PACKETS                                        = 2,    /**< number of packets. */
+    BCMOLT_GPON_ONU_CPU_PACKETS_ID_PACKET_SIZE                                              = 3,    /**< Single packet size. */
+    BCMOLT_GPON_ONU_CPU_PACKETS_ID_BUFFER                                                   = 4,    /**< buffer. */
+    BCMOLT_GPON_ONU_CPU_PACKETS_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_cpu_packets_id;
+
+/** Identifiers for all properties contained in the gpon_onu_dfi group. 
+ */
+typedef enum bcmolt_gpon_onu_dfi_id
+{
+    BCMOLT_GPON_ONU_DFI_ID__BEGIN                                                           = 0,
+    BCMOLT_GPON_ONU_DFI_ID_ALARM_STATUS                                                     = 0,    /**< alarm status. */
+    BCMOLT_GPON_ONU_DFI_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_dfi_id;
+
+/** Identifiers for all properties contained in the gpon_onu_dgi group. 
+ */
+typedef enum bcmolt_gpon_onu_dgi_id
+{
+    BCMOLT_GPON_ONU_DGI_ID__BEGIN                                                           = 0,
+    BCMOLT_GPON_ONU_DGI_ID_ALARM_STATUS                                                     = 0,    /**< alarm status. */
+    BCMOLT_GPON_ONU_DGI_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_dgi_id;
+
+/** Identifiers for all properties contained in the gpon_onu_dowi group. 
+ */
+typedef enum bcmolt_gpon_onu_dowi_id
+{
+    BCMOLT_GPON_ONU_DOWI_ID__BEGIN                                                          = 0,
+    BCMOLT_GPON_ONU_DOWI_ID_ALARM_STATUS                                                    = 0,    /**< Alarm status. */
+    BCMOLT_GPON_ONU_DOWI_ID_DRIFT_VALUE                                                     = 1,    /**< Drift value. */
+    BCMOLT_GPON_ONU_DOWI_ID_NEW_EQD                                                         = 2,    /**< New EQD. */
+    BCMOLT_GPON_ONU_DOWI_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_dowi_id;
+
+/** Identifiers for all properties contained in the gpon_onu_err group. 
+ */
+typedef enum bcmolt_gpon_onu_err_id
+{
+    BCMOLT_GPON_ONU_ERR_ID__BEGIN                                                           = 0,
+    BCMOLT_GPON_ONU_ERR_ID_BIP8_ERRORS                                                      = 0,    /**< BIP8 errors. */
+    BCMOLT_GPON_ONU_ERR_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_err_id;
+
+/** Identifiers for all properties contained in the gpon_onu_invalid_dbru_report 
+ * group. 
+ */
+typedef enum bcmolt_gpon_onu_invalid_dbru_report_id
+{
+    BCMOLT_GPON_ONU_INVALID_DBRU_REPORT_ID__BEGIN                                           = 0,
+    BCMOLT_GPON_ONU_INVALID_DBRU_REPORT_ID_ALLOC_ID                                         = 0,    /**< Alloc-ID. */
+    BCMOLT_GPON_ONU_INVALID_DBRU_REPORT_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_invalid_dbru_report_id;
+
+/** Identifiers for all properties contained in the 
+ * gpon_onu_key_exchange_completed group. 
+ */
+typedef enum bcmolt_gpon_onu_key_exchange_completed_id
+{
+    BCMOLT_GPON_ONU_KEY_EXCHANGE_COMPLETED_ID__BEGIN                                        = 0,
+    BCMOLT_GPON_ONU_KEY_EXCHANGE_COMPLETED_ID_NEW_KEY                                       = 0,    /**< new key. */
+    BCMOLT_GPON_ONU_KEY_EXCHANGE_COMPLETED_ID__NUM_OF       /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_key_exchange_completed_id;
+
+/** Identifiers for all properties contained in the 
+ * gpon_onu_key_exchange_cycle_skipped group. 
+ */
+typedef enum bcmolt_gpon_onu_key_exchange_cycle_skipped_id
+{
+    BCMOLT_GPON_ONU_KEY_EXCHANGE_CYCLE_SKIPPED_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_key_exchange_cycle_skipped_id;
+
+/** Identifiers for all properties contained in the 
+ * gpon_onu_key_exchange_decrypt_required group. 
+ */
+typedef enum bcmolt_gpon_onu_key_exchange_decrypt_required_id
+{
+    BCMOLT_GPON_ONU_KEY_EXCHANGE_DECRYPT_REQUIRED_ID__BEGIN                                 = 0,
+    BCMOLT_GPON_ONU_KEY_EXCHANGE_DECRYPT_REQUIRED_ID_NEW_KEY                                = 0,    /**< new key. */
+    BCMOLT_GPON_ONU_KEY_EXCHANGE_DECRYPT_REQUIRED_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_key_exchange_decrypt_required_id;
+
+/** Identifiers for all properties contained in the 
+ * gpon_onu_key_exchange_key_mismatch group. 
+ */
+typedef enum bcmolt_gpon_onu_key_exchange_key_mismatch_id
+{
+    BCMOLT_GPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID__BEGIN                                     = 0,
+    BCMOLT_GPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID_EXPECTED_KEY                               = 0,    /**< expected key. */
+    BCMOLT_GPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID_RECEIVED_KEY                               = 1,    /**< received key. */
+    BCMOLT_GPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID__NUM_OF        /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_key_exchange_key_mismatch_id;
+
+/** Identifiers for all properties contained in the 
+ * gpon_onu_key_exchange_key_request_timeout group. 
+ */
+typedef enum bcmolt_gpon_onu_key_exchange_key_request_timeout_id
+{
+    BCMOLT_GPON_ONU_KEY_EXCHANGE_KEY_REQUEST_TIMEOUT_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_key_exchange_key_request_timeout_id;
+
+/** Identifiers for all properties contained in the 
+ * gpon_onu_key_exchange_unconsecutive_index group. 
+ */
+typedef enum bcmolt_gpon_onu_key_exchange_unconsecutive_index_id
+{
+    BCMOLT_GPON_ONU_KEY_EXCHANGE_UNCONSECUTIVE_INDEX_ID__BEGIN                              = 0,
+    BCMOLT_GPON_ONU_KEY_EXCHANGE_UNCONSECUTIVE_INDEX_ID_EXPECTED_INDEX                      = 0,    /**< expected index. */
+    BCMOLT_GPON_ONU_KEY_EXCHANGE_UNCONSECUTIVE_INDEX_ID_ACTUAL_INDEX                        = 1,    /**< actual index. */
+    BCMOLT_GPON_ONU_KEY_EXCHANGE_UNCONSECUTIVE_INDEX_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_key_exchange_unconsecutive_index_id;
+
+/** Identifiers for all properties contained in the gpon_onu_key group. 
+ */
+typedef enum bcmolt_gpon_onu_key_id
+{
+    BCMOLT_GPON_ONU_KEY_ID__BEGIN                                                           = 0,
+    BCMOLT_GPON_ONU_KEY_ID_PON_NI                                                           = 0,    /**< PON network interface. */
+    BCMOLT_GPON_ONU_KEY_ID_ONU_ID                                                           = 1,    /**< ONU ID. */
+    BCMOLT_GPON_ONU_KEY_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_key_id;
+
+/** Identifiers for all properties contained in the gpon_onu_loai group. 
+ */
+typedef enum bcmolt_gpon_onu_loai_id
+{
+    BCMOLT_GPON_ONU_LOAI_ID__BEGIN                                                          = 0,
+    BCMOLT_GPON_ONU_LOAI_ID_ALARM_STATUS                                                    = 0,    /**< alarm status. */
+    BCMOLT_GPON_ONU_LOAI_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_loai_id;
+
+/** Identifiers for all properties contained in the gpon_onu_loki group. 
+ */
+typedef enum bcmolt_gpon_onu_loki_id
+{
+    BCMOLT_GPON_ONU_LOKI_ID__BEGIN                                                          = 0,
+    BCMOLT_GPON_ONU_LOKI_ID_ALARM_STATUS                                                    = 0,    /**< alarm status. */
+    BCMOLT_GPON_ONU_LOKI_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_loki_id;
+
+/** Identifiers for all properties contained in the gpon_onu_memi group. 
+ */
+typedef enum bcmolt_gpon_onu_memi_id
+{
+    BCMOLT_GPON_ONU_MEMI_ID__BEGIN                                                          = 0,
+    BCMOLT_GPON_ONU_MEMI_ID_PLOAM_BUFFER                                                    = 0,    /**< PLOAM buffer. */
+    BCMOLT_GPON_ONU_MEMI_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_memi_id;
+
+/** Identifiers for all properties contained in the gpon_onu_omci_packet group. 
+ */
+typedef enum bcmolt_gpon_onu_omci_packet_id
+{
+    BCMOLT_GPON_ONU_OMCI_PACKET_ID__BEGIN                                                   = 0,
+    BCMOLT_GPON_ONU_OMCI_PACKET_ID_PORT_ID                                                  = 0,    /**< port_id. */
+    BCMOLT_GPON_ONU_OMCI_PACKET_ID_CRC_OK                                                   = 1,    /**< crc_ok. */
+    BCMOLT_GPON_ONU_OMCI_PACKET_ID_PACKET_SIZE                                              = 2,    /**< packet_size. */
+    BCMOLT_GPON_ONU_OMCI_PACKET_ID_BUFFER                                                   = 3,    /**< buffer. */
+    BCMOLT_GPON_ONU_OMCI_PACKET_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_omci_packet_id;
+
+/** Identifiers for all properties contained in the 
+ * gpon_onu_omci_port_id_configuration_completed group. 
+ */
+typedef enum bcmolt_gpon_onu_omci_port_id_configuration_completed_id
+{
+    BCMOLT_GPON_ONU_OMCI_PORT_ID_CONFIGURATION_COMPLETED_ID__BEGIN                          = 0,
+    BCMOLT_GPON_ONU_OMCI_PORT_ID_CONFIGURATION_COMPLETED_ID_GEM_PORT                        = 0,    /**< GEM Port ID. */
+    BCMOLT_GPON_ONU_OMCI_PORT_ID_CONFIGURATION_COMPLETED_ID_STATUS                          = 1,    /**< status. */
+    BCMOLT_GPON_ONU_OMCI_PORT_ID_CONFIGURATION_COMPLETED_ID_OPERATION                       = 2,    /**< Operation. */
+    BCMOLT_GPON_ONU_OMCI_PORT_ID_CONFIGURATION_COMPLETED_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_omci_port_id_configuration_completed_id;
+
+/** Identifiers for all properties contained in the 
+ * gpon_onu_onu_activation_completed group. 
+ */
+typedef enum bcmolt_gpon_onu_onu_activation_completed_id
+{
+    BCMOLT_GPON_ONU_ONU_ACTIVATION_COMPLETED_ID__BEGIN                                      = 0,
+    BCMOLT_GPON_ONU_ONU_ACTIVATION_COMPLETED_ID_STATUS                                      = 0,    /**< status. */
+    BCMOLT_GPON_ONU_ONU_ACTIVATION_COMPLETED_ID_FAIL_REASON                                 = 1,    /**< fail reason. */
+    BCMOLT_GPON_ONU_ONU_ACTIVATION_COMPLETED_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_onu_activation_completed_id;
+
+/** Identifiers for all properties contained in the 
+ * gpon_onu_onu_activation_standby_completed group. 
+ */
+typedef enum bcmolt_gpon_onu_onu_activation_standby_completed_id
+{
+    BCMOLT_GPON_ONU_ONU_ACTIVATION_STANDBY_COMPLETED_ID__BEGIN                              = 0,
+    BCMOLT_GPON_ONU_ONU_ACTIVATION_STANDBY_COMPLETED_ID_RESULT                              = 0,    /**< result. */
+    BCMOLT_GPON_ONU_ONU_ACTIVATION_STANDBY_COMPLETED_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_onu_activation_standby_completed_id;
+
+/** Identifiers for all properties contained in the gpon_onu_onu_alarm group. 
+ */
+typedef enum bcmolt_gpon_onu_onu_alarm_id
+{
+    BCMOLT_GPON_ONU_ONU_ALARM_ID__BEGIN                                                     = 0,
+    BCMOLT_GPON_ONU_ONU_ALARM_ID_ONU_ALARM                                                  = 0,    /**< onu alarm. */
+    BCMOLT_GPON_ONU_ONU_ALARM_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_onu_alarm_id;
+
+/** Identifiers for all properties contained in the 
+ * gpon_onu_onu_deactivation_completed group. 
+ */
+typedef enum bcmolt_gpon_onu_onu_deactivation_completed_id
+{
+    BCMOLT_GPON_ONU_ONU_DEACTIVATION_COMPLETED_ID__BEGIN                                    = 0,
+    BCMOLT_GPON_ONU_ONU_DEACTIVATION_COMPLETED_ID_STATUS                                    = 0,    /**< status. */
+    BCMOLT_GPON_ONU_ONU_DEACTIVATION_COMPLETED_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_onu_deactivation_completed_id;
+
+/** Identifiers for all properties contained in the 
+ * gpon_onu_onu_disable_completed group. 
+ */
+typedef enum bcmolt_gpon_onu_onu_disable_completed_id
+{
+    BCMOLT_GPON_ONU_ONU_DISABLE_COMPLETED_ID__BEGIN                                         = 0,
+    BCMOLT_GPON_ONU_ONU_DISABLE_COMPLETED_ID_SERIAL_NUMBER                                  = 0,    /**< serial number. */
+    BCMOLT_GPON_ONU_ONU_DISABLE_COMPLETED_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_onu_disable_completed_id;
+
+/** Identifiers for all properties contained in the 
+ * gpon_onu_onu_enable_completed group. 
+ */
+typedef enum bcmolt_gpon_onu_onu_enable_completed_id
+{
+    BCMOLT_GPON_ONU_ONU_ENABLE_COMPLETED_ID__BEGIN                                          = 0,
+    BCMOLT_GPON_ONU_ONU_ENABLE_COMPLETED_ID_SERIAL_NUMBER                                   = 0,    /**< serial number. */
+    BCMOLT_GPON_ONU_ONU_ENABLE_COMPLETED_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_onu_enable_completed_id;
+
+/** Identifiers for all properties contained in the gpon_onu_optical_reflection 
+ * group. 
+ */
+typedef enum bcmolt_gpon_onu_optical_reflection_id
+{
+    BCMOLT_GPON_ONU_OPTICAL_REFLECTION_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_optical_reflection_id;
+
+/** Identifiers for all properties contained in the 
+ * gpon_onu_password_authentication_completed group. 
+ */
+typedef enum bcmolt_gpon_onu_password_authentication_completed_id
+{
+    BCMOLT_GPON_ONU_PASSWORD_AUTHENTICATION_COMPLETED_ID__BEGIN                             = 0,
+    BCMOLT_GPON_ONU_PASSWORD_AUTHENTICATION_COMPLETED_ID_STATUS                             = 0,    /**< status. */
+    BCMOLT_GPON_ONU_PASSWORD_AUTHENTICATION_COMPLETED_ID_FAIL_REASON                        = 1,    /**< fail reason. */
+    BCMOLT_GPON_ONU_PASSWORD_AUTHENTICATION_COMPLETED_ID_PASSWORD                           = 2,    /**< password. */
+    BCMOLT_GPON_ONU_PASSWORD_AUTHENTICATION_COMPLETED_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_password_authentication_completed_id;
+
+/** Identifiers for all properties contained in the gpon_onu_pee group. 
+ */
+typedef enum bcmolt_gpon_onu_pee_id
+{
+    BCMOLT_GPON_ONU_PEE_ID__BEGIN                                                           = 0,
+    BCMOLT_GPON_ONU_PEE_ID_ALARM_STATUS                                                     = 0,    /**< alarm status. */
+    BCMOLT_GPON_ONU_PEE_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_pee_id;
+
+/** Identifiers for all properties contained in the gpon_onu_ploam_packet group. 
+ */
+typedef enum bcmolt_gpon_onu_ploam_packet_id
+{
+    BCMOLT_GPON_ONU_PLOAM_PACKET_ID__BEGIN                                                  = 0,
+    BCMOLT_GPON_ONU_PLOAM_PACKET_ID_PLOAM                                                   = 0,    /**< ploam. */
+    BCMOLT_GPON_ONU_PLOAM_PACKET_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_ploam_packet_id;
+
+/** Identifiers for all properties contained in the gpon_onu_possible_drift 
+ * group. 
+ */
+typedef enum bcmolt_gpon_onu_possible_drift_id
+{
+    BCMOLT_GPON_ONU_POSSIBLE_DRIFT_ID__BEGIN                                                = 0,
+    BCMOLT_GPON_ONU_POSSIBLE_DRIFT_ID_ALARM_STATUS                                          = 0,    /**< Alarm Status. */
+    BCMOLT_GPON_ONU_POSSIBLE_DRIFT_ID_ESTIMATED_DRIFT                                       = 1,    /**< Estimated Drift. */
+    BCMOLT_GPON_ONU_POSSIBLE_DRIFT_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_possible_drift_id;
+
+/** Identifiers for all properties contained in the 
+ * gpon_onu_power_management_state_change group. 
+ */
+typedef enum bcmolt_gpon_onu_power_management_state_change_id
+{
+    BCMOLT_GPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID__BEGIN                                 = 0,
+    BCMOLT_GPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_OLD_STATE                              = 0,    /**< Old State. */
+    BCMOLT_GPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_NEW_STATE                              = 1,    /**< New State. */
+    BCMOLT_GPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_REASON                                 = 2,    /**< Reason. */
+    BCMOLT_GPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_power_management_state_change_id;
+
+/** Identifiers for all properties contained in the gpon_onu_pst group. 
+ */
+typedef enum bcmolt_gpon_onu_pst_id
+{
+    BCMOLT_GPON_ONU_PST_ID__BEGIN                                                           = 0,
+    BCMOLT_GPON_ONU_PST_ID_LINK_NUMBER                                                      = 0,    /**< link number. */
+    BCMOLT_GPON_ONU_PST_ID_K1                                                               = 1,    /**< K1. */
+    BCMOLT_GPON_ONU_PST_ID_K2                                                               = 2,    /**< K2. */
+    BCMOLT_GPON_ONU_PST_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_pst_id;
+
+/** Identifiers for all properties contained in the gpon_onu_ranging_completed 
+ * group. 
+ */
+typedef enum bcmolt_gpon_onu_ranging_completed_id
+{
+    BCMOLT_GPON_ONU_RANGING_COMPLETED_ID__BEGIN                                             = 0,
+    BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_STATUS                                             = 0,    /**< status. */
+    BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_FAIL_REASON                                        = 1,    /**< fail reason. */
+    BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_NUMBER_OF_PLOAMS                                   = 2,    /**< number of PLOAMs. */
+    BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_EQD                                                = 3,    /**< EQD. */
+    BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_POWER_LEVEL                                        = 4,    /**< Power Level. */
+    BCMOLT_GPON_ONU_RANGING_COMPLETED_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_ranging_completed_id;
+
+/** Identifiers for all properties contained in the gpon_onu_rei group. 
+ */
+typedef enum bcmolt_gpon_onu_rei_id
+{
+    BCMOLT_GPON_ONU_REI_ID__BEGIN                                                           = 0,
+    BCMOLT_GPON_ONU_REI_ID_BIP8_ERRORS                                                      = 0,    /**< BIP8 errors. */
+    BCMOLT_GPON_ONU_REI_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_rei_id;
+
+/** Identifiers for all properties contained in the 
+ * gpon_onu_rssi_measurement_completed group. 
+ */
+typedef enum bcmolt_gpon_onu_rssi_measurement_completed_id
+{
+    BCMOLT_GPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID__BEGIN                                    = 0,
+    BCMOLT_GPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID_STATUS                                    = 0,    /**< status. */
+    BCMOLT_GPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID_FAIL_REASON                               = 1,    /**< fail reason. */
+    BCMOLT_GPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_rssi_measurement_completed_id;
+
+/** Identifiers for all properties contained in the gpon_onu_rssi_measurement 
+ * group. 
+ */
+typedef enum bcmolt_gpon_onu_rssi_measurement_id
+{
+    BCMOLT_GPON_ONU_RSSI_MEASUREMENT_ID__NUM_OF             /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_rssi_measurement_id;
+
+/** Identifiers for all properties contained in the gpon_onu_sdi group. 
+ */
+typedef enum bcmolt_gpon_onu_sdi_id
+{
+    BCMOLT_GPON_ONU_SDI_ID__BEGIN                                                           = 0,
+    BCMOLT_GPON_ONU_SDI_ID_ALARM_STATUS                                                     = 0,    /**< alarm status. */
+    BCMOLT_GPON_ONU_SDI_ID_BER                                                              = 1,    /**< BER. */
+    BCMOLT_GPON_ONU_SDI_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_sdi_id;
+
+/** Identifiers for all properties contained in the gpon_onu_set_onu_state 
+ * group. 
+ */
+typedef enum bcmolt_gpon_onu_set_onu_state_id
+{
+    BCMOLT_GPON_ONU_SET_ONU_STATE_ID__BEGIN                                                 = 0,
+    BCMOLT_GPON_ONU_SET_ONU_STATE_ID_ONU_STATE                                              = 0,    /**< ONU state. */
+    BCMOLT_GPON_ONU_SET_ONU_STATE_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_set_onu_state_id;
+
+/** Identifiers for all properties contained in the gpon_onu_sfi group. 
+ */
+typedef enum bcmolt_gpon_onu_sfi_id
+{
+    BCMOLT_GPON_ONU_SFI_ID__BEGIN                                                           = 0,
+    BCMOLT_GPON_ONU_SFI_ID_ALARM_STATUS                                                     = 0,    /**< alarm status. */
+    BCMOLT_GPON_ONU_SFI_ID_BER                                                              = 1,    /**< BER. */
+    BCMOLT_GPON_ONU_SFI_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_sfi_id;
+
+/** Identifiers for all properties contained in the gpon_onu_stat_alarm_cleared 
+ * group. 
+ */
+typedef enum bcmolt_gpon_onu_stat_alarm_cleared_id
+{
+    BCMOLT_GPON_ONU_STAT_ALARM_CLEARED_ID__BEGIN                                            = 0,
+    BCMOLT_GPON_ONU_STAT_ALARM_CLEARED_ID_STAT                                              = 0,    /**< Statistic ID. */
+    BCMOLT_GPON_ONU_STAT_ALARM_CLEARED_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_stat_alarm_cleared_id;
+
+/** Identifiers for all properties contained in the gpon_onu_stat_alarm_raised 
+ * group. 
+ */
+typedef enum bcmolt_gpon_onu_stat_alarm_raised_id
+{
+    BCMOLT_GPON_ONU_STAT_ALARM_RAISED_ID__BEGIN                                             = 0,
+    BCMOLT_GPON_ONU_STAT_ALARM_RAISED_ID_STAT                                               = 0,    /**< Statistic ID. */
+    BCMOLT_GPON_ONU_STAT_ALARM_RAISED_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_stat_alarm_raised_id;
+
+/** Identifiers for all properties contained in the gpon_onu_stat_cfg group. 
+ */
+typedef enum bcmolt_gpon_onu_stat_cfg_id
+{
+    BCMOLT_GPON_ONU_STAT_CFG_ID__BEGIN                                                      = 0,
+    BCMOLT_GPON_ONU_STAT_CFG_ID_CFG                                                         = 0,    /**< Configuration. */
+    BCMOLT_GPON_ONU_STAT_CFG_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_stat_cfg_id;
+
+/** Identifiers for all properties contained in the gpon_onu_stat group. 
+ */
+typedef enum bcmolt_gpon_onu_stat_id
+{
+    BCMOLT_GPON_ONU_STAT_ID__BEGIN                                                          = 0,
+    BCMOLT_GPON_ONU_STAT_ID_FEC_CODEWORDS                                                   = 0,    /**< Total received FEC codewords. */
+    BCMOLT_GPON_ONU_STAT_ID_FEC_BYTES_CORRECTED                                             = 1,    /**< FEC codewords corrected bytes. */
+    BCMOLT_GPON_ONU_STAT_ID_FEC_CODEWORDS_CORRECTED                                         = 2,    /**< FEC corrected codewords error . */
+    BCMOLT_GPON_ONU_STAT_ID_FEC_CODEWORDS_UNCORRECTED                                       = 3,    /**< FEC not corrected codewords error. */
+    BCMOLT_GPON_ONU_STAT_ID_BIP8_BYTES                                                      = 4,    /**< Received bytes for BIP8. */
+    BCMOLT_GPON_ONU_STAT_ID_BIP8_ERRORS                                                     = 5,    /**< Bit error according to BIP8. */
+    BCMOLT_GPON_ONU_STAT_ID_RX_PLOAMS_CRC_ERROR                                             = 6,    /**< Received PLOAMs with CRC error. */
+    BCMOLT_GPON_ONU_STAT_ID_RX_PLOAMS_NON_IDLE                                              = 7,    /**< Received non idle PLOAMs. */
+    BCMOLT_GPON_ONU_STAT_ID_POSITIVE_DRIFT                                                  = 8,    /**< Positive drift. */
+    BCMOLT_GPON_ONU_STAT_ID_NEGATIVE_DRIFT                                                  = 9,    /**< Negative drift. */
+    BCMOLT_GPON_ONU_STAT_ID_RX_OMCI                                                         = 10,   /**< Received OMCI packets. */
+    BCMOLT_GPON_ONU_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR                                       = 11,   /**< Received OMCI packets with CRC errors. */
+    BCMOLT_GPON_ONU_STAT_ID_BER_REPORTED                                                    = 12,   /**< BER reported. */
+    BCMOLT_GPON_ONU_STAT_ID_UNRECEIVED_BURST                                                = 13,   /**< Unreceived burst. */
+    BCMOLT_GPON_ONU_STAT_ID_LCDG_ERRORS                                                     = 14,   /**< LCDG errors. */
+    BCMOLT_GPON_ONU_STAT_ID_RDI_ERRORS                                                      = 15,   /**< RDI errors. */
+    BCMOLT_GPON_ONU_STAT_ID_RX_BYTES                                                        = 16,   /**< rx bytes. */
+    BCMOLT_GPON_ONU_STAT_ID_RX_PACKETS                                                      = 17,   /**< rx packets. */
+    BCMOLT_GPON_ONU_STAT_ID_TX_BYTES                                                        = 18,   /**< tx bytes. */
+    BCMOLT_GPON_ONU_STAT_ID_TX_PACKETS                                                      = 19,   /**< tx packets. */
+    BCMOLT_GPON_ONU_STAT_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_stat_id;
+
+/** Identifiers for all properties contained in the gpon_onu_sufi group. 
+ */
+typedef enum bcmolt_gpon_onu_sufi_id
+{
+    BCMOLT_GPON_ONU_SUFI_ID__BEGIN                                                          = 0,
+    BCMOLT_GPON_ONU_SUFI_ID_ALARM_STATUS                                                    = 0,    /**< alarm status. */
+    BCMOLT_GPON_ONU_SUFI_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_sufi_id;
+
+/** Identifiers for all properties contained in the gpon_onu_tiwi group. 
+ */
+typedef enum bcmolt_gpon_onu_tiwi_id
+{
+    BCMOLT_GPON_ONU_TIWI_ID__BEGIN                                                          = 0,
+    BCMOLT_GPON_ONU_TIWI_ID_ALARM_STATUS                                                    = 0,    /**< Alarm status. */
+    BCMOLT_GPON_ONU_TIWI_ID_DRIFT_VALUE                                                     = 1,    /**< Drift value. */
+    BCMOLT_GPON_ONU_TIWI_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_tiwi_id;
+
+/** Identifiers for all properties contained in the gpon_trx_cfg group. 
+ */
+typedef enum bcmolt_gpon_trx_cfg_id
+{
+    BCMOLT_GPON_TRX_CFG_ID__BEGIN                                                           = 0,
+    BCMOLT_GPON_TRX_CFG_ID_TRANSCEIVER_TYPE                                                 = 0,    /**< transceiver type. */
+    BCMOLT_GPON_TRX_CFG_ID_LA_CONFIGURATION                                                 = 1,    /**< LA configuration. */
+    BCMOLT_GPON_TRX_CFG_ID_BCDR                                                             = 2,    /**< BCDR. */
+    BCMOLT_GPON_TRX_CFG_ID_LA_RANGING_AFTER_NO_ED_RESYNC                                    = 3,    /**< LA ranging after no ed resync . */
+    BCMOLT_GPON_TRX_CFG_ID_BCDR_RANGING_AFTER_NO_ED_RESYNC                                  = 4,    /**< BCDR ranging after no ed resync configuration. */
+    BCMOLT_GPON_TRX_CFG_ID_LA_RANGING_AFTER_ED_RESYNC                                       = 5,    /**< LA ranging after ed resync . */
+    BCMOLT_GPON_TRX_CFG_ID_BCDR_RANGING_AFTER_ED_RESYNC                                     = 6,    /**< BCDR ranging after ed resync. */
+    BCMOLT_GPON_TRX_CFG_ID_LA_RESYNC_POLARITY                                               = 7,    /**< la resync polarity. */
+    BCMOLT_GPON_TRX_CFG_ID_BCDR_RESYNC_POLARITY                                             = 8,    /**< BCDR resync polarity. */
+    BCMOLT_GPON_TRX_CFG_ID_BCDR_RANGING_RESYNC_CONDITIONS                                   = 9,    /**< bcdr ranging resync conditions. */
+    BCMOLT_GPON_TRX_CFG_ID_LA_RANGING_RESYNC_CONDITIONS                                     = 10,   /**< la ranging resync conditions. */
+    BCMOLT_GPON_TRX_CFG_ID_RX_CONFIGURATION                                                 = 11,   /**< RX configuration. */
+    BCMOLT_GPON_TRX_CFG_ID_RANGING_CONTROL_STAGES_CONFIGURATION                             = 12,   /**< ranging control stages configuration. */
+    BCMOLT_GPON_TRX_CFG_ID_ENERGY_DETECT                                                    = 13,   /**< Energy Detect. */
+    BCMOLT_GPON_TRX_CFG_ID_END_OF_BURST_DATA_PATTERN                                        = 14,   /**< end of burst data pattern . */
+    BCMOLT_GPON_TRX_CFG_ID_END_OF_BURST_RANGING_PATTERN                                     = 15,   /**< end of burst ranging pattern. */
+    BCMOLT_GPON_TRX_CFG_ID_PREAMBLE                                                         = 16,   /**< Preamble. */
+    BCMOLT_GPON_TRX_CFG_ID_DELIMITER                                                        = 17,   /**< Delimiter. */
+    BCMOLT_GPON_TRX_CFG_ID_GUARD_BITS                                                       = 18,   /**< Guard bits. */
+    BCMOLT_GPON_TRX_CFG_ID_SERDES_CONFIGURATION                                             = 19,   /**< serdes configuration. */
+    BCMOLT_GPON_TRX_CFG_ID_PLO_RANGING                                                      = 20,   /**< PLO for ranging. */
+    BCMOLT_GPON_TRX_CFG_ID_PLO_DATA                                                         = 21,   /**< PLO for data. */
+    BCMOLT_GPON_TRX_CFG_ID_RSSI_NORMAL_CONFIG                                               = 22,   /**< rssi normal config. */
+    BCMOLT_GPON_TRX_CFG_ID_RANGING_RSSI_RESYNC_CONTROL                                      = 23,   /**< ranging rssi resync control. */
+    BCMOLT_GPON_TRX_CFG_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_trx_cfg_id;
+
+/** Identifiers for all properties contained in the gpon_trx_key group. 
+ */
+typedef enum bcmolt_gpon_trx_key_id
+{
+    BCMOLT_GPON_TRX_KEY_ID__BEGIN                                                           = 0,
+    BCMOLT_GPON_TRX_KEY_ID_PON_NI                                                           = 0,    /**< PON network interface. */
+    BCMOLT_GPON_TRX_KEY_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_trx_key_id;
+
+/** Identifiers for all properties contained in the log_entry_auto_cfg group. 
+ */
+typedef enum bcmolt_log_entry_auto_cfg_id
+{
+    BCMOLT_LOG_ENTRY_AUTO_CFG_ID__BEGIN                                                     = 0,
+    BCMOLT_LOG_ENTRY_AUTO_CFG_ID_STAT_ALARM_CLEARED                                         = 0,    /**< Stat Alarm Cleared. */
+    BCMOLT_LOG_ENTRY_AUTO_CFG_ID_STAT_ALARM_RAISED                                          = 1,    /**< Stat Alarm Raised. */
+    BCMOLT_LOG_ENTRY_AUTO_CFG_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_log_entry_auto_cfg_id;
+
+/** Identifiers for all properties contained in the log_entry_cfg group. 
+ */
+typedef enum bcmolt_log_entry_cfg_id
+{
+    BCMOLT_LOG_ENTRY_CFG_ID__BEGIN                                                          = 0,
+    BCMOLT_LOG_ENTRY_CFG_ID_DEFAULT_LOG_LEVEL                                               = 0,    /**< default log level. */
+    BCMOLT_LOG_ENTRY_CFG_ID_DEFAULT_LOG_TYPE                                                = 1,    /**< default log type. */
+    BCMOLT_LOG_ENTRY_CFG_ID_LOG_LEVEL_PRINT                                                 = 2,    /**< log level print. */
+    BCMOLT_LOG_ENTRY_CFG_ID_LOG_LEVEL_SAVE                                                  = 3,    /**< log level save. */
+    BCMOLT_LOG_ENTRY_CFG_ID_LOG_TYPE                                                        = 4,    /**< log type. */
+    BCMOLT_LOG_ENTRY_CFG_ID_LOG_STYLE                                                       = 5,    /**< log_style. */
+    BCMOLT_LOG_ENTRY_CFG_ID_LOG_NAME                                                        = 6,    /**< log name. */
+    BCMOLT_LOG_ENTRY_CFG_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_log_entry_cfg_id;
+
+/** Identifiers for all properties contained in the log_entry_key group. 
+ */
+typedef enum bcmolt_log_entry_key_id
+{
+    BCMOLT_LOG_ENTRY_KEY_ID__BEGIN                                                          = 0,
+    BCMOLT_LOG_ENTRY_KEY_ID_LOG_ID                                                          = 0,    /**< log id. */
+    BCMOLT_LOG_ENTRY_KEY_ID_RESERVED                                                        = 1,    /**< reserved. */
+    BCMOLT_LOG_ENTRY_KEY_ID_NAME                                                            = 2,    /**< name. */
+    BCMOLT_LOG_ENTRY_KEY_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_log_entry_key_id;
+
+/** Identifiers for all properties contained in the log_entry_stat_alarm_cleared 
+ * group. 
+ */
+typedef enum bcmolt_log_entry_stat_alarm_cleared_id
+{
+    BCMOLT_LOG_ENTRY_STAT_ALARM_CLEARED_ID__BEGIN                                           = 0,
+    BCMOLT_LOG_ENTRY_STAT_ALARM_CLEARED_ID_STAT                                             = 0,    /**< Statistic ID. */
+    BCMOLT_LOG_ENTRY_STAT_ALARM_CLEARED_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_log_entry_stat_alarm_cleared_id;
+
+/** Identifiers for all properties contained in the log_entry_stat_alarm_raised 
+ * group. 
+ */
+typedef enum bcmolt_log_entry_stat_alarm_raised_id
+{
+    BCMOLT_LOG_ENTRY_STAT_ALARM_RAISED_ID__BEGIN                                            = 0,
+    BCMOLT_LOG_ENTRY_STAT_ALARM_RAISED_ID_STAT                                              = 0,    /**< Statistic ID. */
+    BCMOLT_LOG_ENTRY_STAT_ALARM_RAISED_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_log_entry_stat_alarm_raised_id;
+
+/** Identifiers for all properties contained in the log_entry_stat_cfg group. 
+ */
+typedef enum bcmolt_log_entry_stat_cfg_id
+{
+    BCMOLT_LOG_ENTRY_STAT_CFG_ID__BEGIN                                                     = 0,
+    BCMOLT_LOG_ENTRY_STAT_CFG_ID_CFG                                                        = 0,    /**< Configuration. */
+    BCMOLT_LOG_ENTRY_STAT_CFG_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_log_entry_stat_cfg_id;
+
+/** Identifiers for all properties contained in the log_entry_stat group. 
+ */
+typedef enum bcmolt_log_entry_stat_id
+{
+    BCMOLT_LOG_ENTRY_STAT_ID__BEGIN                                                         = 0,
+    BCMOLT_LOG_ENTRY_STAT_ID_MSG_COUNT                                                      = 0,    /**< msg count. */
+    BCMOLT_LOG_ENTRY_STAT_ID_LOST_MSG_COUNT                                                 = 1,    /**< lost msg count. */
+    BCMOLT_LOG_ENTRY_STAT_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_log_entry_stat_id;
+
+/** Identifiers for all properties contained in the logger_auto_cfg group. 
+ */
+typedef enum bcmolt_logger_auto_cfg_id
+{
+    BCMOLT_LOGGER_AUTO_CFG_ID__BEGIN                                                        = 0,
+    BCMOLT_LOGGER_AUTO_CFG_ID_STAT_ALARM_CLEARED                                            = 0,    /**< Stat Alarm Cleared. */
+    BCMOLT_LOGGER_AUTO_CFG_ID_STAT_ALARM_RAISED                                             = 1,    /**< Stat Alarm Raised. */
+    BCMOLT_LOGGER_AUTO_CFG_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_logger_auto_cfg_id;
+
+/** Identifiers for all properties contained in the logger_cfg group. 
+ */
+typedef enum bcmolt_logger_cfg_id
+{
+    BCMOLT_LOGGER_CFG_ID__BEGIN                                                             = 0,
+    BCMOLT_LOGGER_CFG_ID_BUFFER                                                             = 0,    /**< buffer. */
+    BCMOLT_LOGGER_CFG_ID_WRAP_AROUND                                                        = 1,    /**< wrap around. */
+    BCMOLT_LOGGER_CFG_ID_CLEAR_AFTER_READ                                                   = 2,    /**< clear_after_read. */
+    BCMOLT_LOGGER_CFG_ID_ENABLE_LOG                                                         = 3,    /**< enable log. */
+    BCMOLT_LOGGER_CFG_ID_LOG_NAMES                                                          = 4,    /**< log_names. */
+    BCMOLT_LOGGER_CFG_ID__NUM_OF        /**< Number of enum entries, not an entry itself. */
+} bcmolt_logger_cfg_id;
+
+/** Identifiers for all properties contained in the logger_clear_log group. 
+ */
+typedef enum bcmolt_logger_clear_log_id
+{
+    BCMOLT_LOGGER_CLEAR_LOG_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_logger_clear_log_id;
+
+/** Identifiers for all properties contained in the logger_key group. 
+ */
+typedef enum bcmolt_logger_key_id
+{
+    BCMOLT_LOGGER_KEY_ID__BEGIN                                                             = 0,
+    BCMOLT_LOGGER_KEY_ID_RESERVED                                                           = 0,    /**< reserved. */
+    BCMOLT_LOGGER_KEY_ID_FILE_ID                                                            = 1,    /**< file id. */
+    BCMOLT_LOGGER_KEY_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_logger_key_id;
+
+/** Identifiers for all properties contained in the logger_stat_alarm_cleared 
+ * group. 
+ */
+typedef enum bcmolt_logger_stat_alarm_cleared_id
+{
+    BCMOLT_LOGGER_STAT_ALARM_CLEARED_ID__BEGIN                                              = 0,
+    BCMOLT_LOGGER_STAT_ALARM_CLEARED_ID_STAT                                                = 0,    /**< Statistic ID. */
+    BCMOLT_LOGGER_STAT_ALARM_CLEARED_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_logger_stat_alarm_cleared_id;
+
+/** Identifiers for all properties contained in the logger_stat_alarm_raised 
+ * group. 
+ */
+typedef enum bcmolt_logger_stat_alarm_raised_id
+{
+    BCMOLT_LOGGER_STAT_ALARM_RAISED_ID__BEGIN                                               = 0,
+    BCMOLT_LOGGER_STAT_ALARM_RAISED_ID_STAT                                                 = 0,    /**< Statistic ID. */
+    BCMOLT_LOGGER_STAT_ALARM_RAISED_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_logger_stat_alarm_raised_id;
+
+/** Identifiers for all properties contained in the logger_stat_cfg group. 
+ */
+typedef enum bcmolt_logger_stat_cfg_id
+{
+    BCMOLT_LOGGER_STAT_CFG_ID__BEGIN                                                        = 0,
+    BCMOLT_LOGGER_STAT_CFG_ID_CFG                                                           = 0,    /**< Configuration. */
+    BCMOLT_LOGGER_STAT_CFG_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_logger_stat_cfg_id;
+
+/** Identifiers for all properties contained in the logger_stat group. 
+ */
+typedef enum bcmolt_logger_stat_id
+{
+    BCMOLT_LOGGER_STAT_ID__BEGIN                                                            = 0,
+    BCMOLT_LOGGER_STAT_ID_LINES_IN_LOG                                                      = 0,    /**< lines in log. */
+    BCMOLT_LOGGER_STAT_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_logger_stat_id;
+
+/** Identifiers for all properties contained in the nni_auto_cfg group. 
+ */
+typedef enum bcmolt_nni_auto_cfg_id
+{
+    BCMOLT_NNI_AUTO_CFG_ID__BEGIN                                                           = 0,
+    BCMOLT_NNI_AUTO_CFG_ID_STAT_ALARM_CLEARED                                               = 0,    /**< Stat Alarm Cleared. */
+    BCMOLT_NNI_AUTO_CFG_ID_STAT_ALARM_RAISED                                                = 1,    /**< Stat Alarm Raised. */
+    BCMOLT_NNI_AUTO_CFG_ID_STATUS_CHANGED                                                   = 2,    /**< Status changed. */
+    BCMOLT_NNI_AUTO_CFG_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_nni_auto_cfg_id;
+
+/** Identifiers for all properties contained in the nni_cfg group. 
+ */
+typedef enum bcmolt_nni_cfg_id
+{
+    BCMOLT_NNI_CFG_ID__BEGIN                                                                = 0,
+    BCMOLT_NNI_CFG_ID_REMOTE_LOOPBACK                                                       = 0,    /**< Remote loopback. */
+    BCMOLT_NNI_CFG_ID_LINE_LOOPBACK                                                         = 1,    /**< Line loopback. */
+    BCMOLT_NNI_CFG_ID_MAC_ADDRESS                                                           = 2,    /**< Mac Address. */
+    BCMOLT_NNI_CFG_ID_NNI_STATUS                                                            = 3,    /**< NNI Status. */
+    BCMOLT_NNI_CFG_ID_NNI_BACKUP_STATUS                                                     = 4,    /**< NNI Backup Status. */
+    BCMOLT_NNI_CFG_ID_ACTIVE_NNI                                                            = 5,    /**< Active NNI. */
+    BCMOLT_NNI_CFG_ID_NNI_STATUS_POLLING_INTERVAL_MS                                        = 6,    /**< NNI Status Polling Interval (ms). */
+    BCMOLT_NNI_CFG_ID_AUTOSWITCH                                                            = 7,    /**< Auto-Switch. */
+    BCMOLT_NNI_CFG_ID_FLOW_CONTROL                                                          = 8,    /**< Flow Control. */
+    BCMOLT_NNI_CFG_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_nni_cfg_id;
+
+/** Identifiers for all properties contained in the nni_key group. 
+ */
+typedef enum bcmolt_nni_key_id
+{
+    BCMOLT_NNI_KEY_ID__BEGIN                                                                = 0,
+    BCMOLT_NNI_KEY_ID_PON_NI                                                                = 0,    /**< PON NI. */
+    BCMOLT_NNI_KEY_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_nni_key_id;
+
+/** Identifiers for all properties contained in the nni_serdes_cfg group. 
+ */
+typedef enum bcmolt_nni_serdes_cfg_id
+{
+    BCMOLT_NNI_SERDES_CFG_ID__BEGIN                                                         = 0,
+    BCMOLT_NNI_SERDES_CFG_ID_RX_VGA                                                         = 0,    /**< Rx Vga. */
+    BCMOLT_NNI_SERDES_CFG_ID_RX_PF                                                          = 1,    /**< Rx PF. */
+    BCMOLT_NNI_SERDES_CFG_ID_RX_LFPF                                                        = 2,    /**< Rx LFPF. */
+    BCMOLT_NNI_SERDES_CFG_ID_RX_DFE1                                                        = 3,    /**< Rx DFE1. */
+    BCMOLT_NNI_SERDES_CFG_ID_RX_DFE2                                                        = 4,    /**< Rx DFE2. */
+    BCMOLT_NNI_SERDES_CFG_ID_RX_DFE3                                                        = 5,    /**< Rx DFE3. */
+    BCMOLT_NNI_SERDES_CFG_ID_RX_DFE4                                                        = 6,    /**< Rx DFE4. */
+    BCMOLT_NNI_SERDES_CFG_ID_RX_DFE5                                                        = 7,    /**< Rx DFE5. */
+    BCMOLT_NNI_SERDES_CFG_ID_TX_PRE                                                         = 8,    /**< Tx Pre. */
+    BCMOLT_NNI_SERDES_CFG_ID_TX_MAIN                                                        = 9,    /**< Tx Main. */
+    BCMOLT_NNI_SERDES_CFG_ID_TX_POST1                                                       = 10,   /**< Tx Post1. */
+    BCMOLT_NNI_SERDES_CFG_ID_TX_POST2                                                       = 11,   /**< Tx Post2. */
+    BCMOLT_NNI_SERDES_CFG_ID_TX_POST3                                                       = 12,   /**< Tx Post3. */
+    BCMOLT_NNI_SERDES_CFG_ID_TX_AMP                                                         = 13,   /**< Tx Amp. */
+    BCMOLT_NNI_SERDES_CFG_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_nni_serdes_cfg_id;
+
+/** Identifiers for all properties contained in the nni_serdes_key group. 
+ */
+typedef enum bcmolt_nni_serdes_key_id
+{
+    BCMOLT_NNI_SERDES_KEY_ID__BEGIN                                                         = 0,
+    BCMOLT_NNI_SERDES_KEY_ID_PON_NI                                                         = 0,    /**< PON NI. */
+    BCMOLT_NNI_SERDES_KEY_ID_INSTANCE                                                       = 1,    /**< Instance. */
+    BCMOLT_NNI_SERDES_KEY_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_nni_serdes_key_id;
+
+/** Identifiers for all properties contained in the nni_stat_alarm_cleared 
+ * group. 
+ */
+typedef enum bcmolt_nni_stat_alarm_cleared_id
+{
+    BCMOLT_NNI_STAT_ALARM_CLEARED_ID__BEGIN                                                 = 0,
+    BCMOLT_NNI_STAT_ALARM_CLEARED_ID_STAT                                                   = 0,    /**< Statistic ID. */
+    BCMOLT_NNI_STAT_ALARM_CLEARED_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_nni_stat_alarm_cleared_id;
+
+/** Identifiers for all properties contained in the nni_stat_alarm_raised group. 
+ */
+typedef enum bcmolt_nni_stat_alarm_raised_id
+{
+    BCMOLT_NNI_STAT_ALARM_RAISED_ID__BEGIN                                                  = 0,
+    BCMOLT_NNI_STAT_ALARM_RAISED_ID_STAT                                                    = 0,    /**< Statistic ID. */
+    BCMOLT_NNI_STAT_ALARM_RAISED_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_nni_stat_alarm_raised_id;
+
+/** Identifiers for all properties contained in the nni_stat_cfg group. 
+ */
+typedef enum bcmolt_nni_stat_cfg_id
+{
+    BCMOLT_NNI_STAT_CFG_ID__BEGIN                                                           = 0,
+    BCMOLT_NNI_STAT_CFG_ID_CFG                                                              = 0,    /**< Configuration. */
+    BCMOLT_NNI_STAT_CFG_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_nni_stat_cfg_id;
+
+/** Identifiers for all properties contained in the nni_stat group. 
+ */
+typedef enum bcmolt_nni_stat_id
+{
+    BCMOLT_NNI_STAT_ID__BEGIN                                                               = 0,
+    BCMOLT_NNI_STAT_ID_RX_FRAMES_64                                                         = 0,    /**< RX 64 Byte Frames. */
+    BCMOLT_NNI_STAT_ID_RX_FRAMES_65_127                                                     = 1,    /**< RX 65-127 Byte Frames. */
+    BCMOLT_NNI_STAT_ID_RX_FRAMES_128_255                                                    = 2,    /**< RX 128-255 Byte Frames. */
+    BCMOLT_NNI_STAT_ID_RX_FRAMES_256_511                                                    = 3,    /**< RX 256-511 Byte Frames. */
+    BCMOLT_NNI_STAT_ID_RX_FRAMES_512_1023                                                   = 4,    /**< RX 512-1023 Byte Frames. */
+    BCMOLT_NNI_STAT_ID_RX_FRAMES_1024_1518                                                  = 5,    /**< RX 1024-1518 Byte Frames. */
+    BCMOLT_NNI_STAT_ID_RX_FRAMES_1519_2047                                                  = 6,    /**< RX 1519-2047 Byte Frames. */
+    BCMOLT_NNI_STAT_ID_RX_FRAMES_2048_4095                                                  = 7,    /**< RX 2048-4095 Byte Frames. */
+    BCMOLT_NNI_STAT_ID_RX_FRAMES_4096_9216                                                  = 8,    /**< RX 4096-9216 Byte Frames. */
+    BCMOLT_NNI_STAT_ID_RX_FRAMES_9217_16383                                                 = 9,    /**< RX 9217-16383 Byte Frames. */
+    BCMOLT_NNI_STAT_ID_RX_FRAMES                                                            = 10,   /**< RX Frames. */
+    BCMOLT_NNI_STAT_ID_RX_BYTES                                                             = 11,   /**< RX Bytes. */
+    BCMOLT_NNI_STAT_ID_RX_GOOD_FRAMES                                                       = 12,   /**< RX Good Frames. */
+    BCMOLT_NNI_STAT_ID_RX_UNICAST_FRAMES                                                    = 13,   /**< RX Unicast Frames. */
+    BCMOLT_NNI_STAT_ID_RX_MULTICAST_FRAMES                                                  = 14,   /**< RX Multicast Frames. */
+    BCMOLT_NNI_STAT_ID_RX_BROADCAST_FRAMES                                                  = 15,   /**< RX Broadcast Frames. */
+    BCMOLT_NNI_STAT_ID_RX_FCS_ERRORS                                                        = 16,   /**< RX FCS Errors. */
+    BCMOLT_NNI_STAT_ID_RX_CONTROL_FRAMES                                                    = 17,   /**< RX Control Frames. */
+    BCMOLT_NNI_STAT_ID_RX_PAUSE_FRAMES                                                      = 18,   /**< RX Pause Frames. */
+    BCMOLT_NNI_STAT_ID_RX_PFC_FRAMES                                                        = 19,   /**< RX PFC Frames. */
+    BCMOLT_NNI_STAT_ID_RX_UNSUPPORTED_OPCODE                                                = 20,   /**< RX Unsupported Opcode Frames. */
+    BCMOLT_NNI_STAT_ID_RX_UNSUPPORTED_DA                                                    = 21,   /**< RX Unsupported DA Frames. */
+    BCMOLT_NNI_STAT_ID_RX_ALIGNMENT_ERRORS                                                  = 22,   /**< RX Alignment Errors. */
+    BCMOLT_NNI_STAT_ID_RX_LENGTH_OUT_OF_RANGE                                               = 23,   /**< RX Length Out of Range. */
+    BCMOLT_NNI_STAT_ID_RX_CODE_ERRORS                                                       = 24,   /**< RX Code Errors. */
+    BCMOLT_NNI_STAT_ID_RX_OVERSIZED_FRAMES                                                  = 25,   /**< RX Oversized Frames. */
+    BCMOLT_NNI_STAT_ID_RX_JABBER_FRAMES                                                     = 26,   /**< RX Jabber Frames. */
+    BCMOLT_NNI_STAT_ID_RX_MTU_CHECK_ERRORS                                                  = 27,   /**< RX MTU Check Errors. */
+    BCMOLT_NNI_STAT_ID_RX_PROMISCUOUS_FRAMES                                                = 28,   /**< RX Promiscuous Frames. */
+    BCMOLT_NNI_STAT_ID_RX_VLAN_FRAMES                                                       = 29,   /**< RX VLAN Frames. */
+    BCMOLT_NNI_STAT_ID_RX_DOUBLE_VLAN_FRAMES                                                = 30,   /**< RX Double VLAN Frames. */
+    BCMOLT_NNI_STAT_ID_RX_TRUNCATED_FRAMES                                                  = 31,   /**< RX Truncated Frames. */
+    BCMOLT_NNI_STAT_ID_RX_UNDERSIZE_FRAMES                                                  = 32,   /**< RX Undersized Frames. */
+    BCMOLT_NNI_STAT_ID_RX_FRAGMENTED_FRAMES                                                 = 33,   /**< RX Fragmented Frames. */
+    BCMOLT_NNI_STAT_ID_RX_RUNT_FRAMES                                                       = 34,   /**< RX Runt Frames. */
+    BCMOLT_NNI_STAT_ID_TX_FRAMES_64                                                         = 35,   /**< TX 64 Byte Frames. */
+    BCMOLT_NNI_STAT_ID_TX_FRAMES_65_127                                                     = 36,   /**< TX 65-127 Byte Frames. */
+    BCMOLT_NNI_STAT_ID_TX_FRAMES_128_255                                                    = 37,   /**< TX 128-255 Byte Frames. */
+    BCMOLT_NNI_STAT_ID_TX_FRAMES_256_511                                                    = 38,   /**< TX 256-511 Byte Frames. */
+    BCMOLT_NNI_STAT_ID_TX_FRAMES_512_1023                                                   = 39,   /**< TX 512-1023 Byte Frames. */
+    BCMOLT_NNI_STAT_ID_TX_FRAMES_1024_1518                                                  = 40,   /**< TX 1024-1518 Byte Frames. */
+    BCMOLT_NNI_STAT_ID_TX_FRAMES_1519_2047                                                  = 41,   /**< TX 1519-2047 Byte Frames. */
+    BCMOLT_NNI_STAT_ID_TX_FRAMES_2048_4095                                                  = 42,   /**< TX 2048-4095 Byte Frames. */
+    BCMOLT_NNI_STAT_ID_TX_FRAMES_4096_9216                                                  = 43,   /**< TX 4096-9216 Byte Frames. */
+    BCMOLT_NNI_STAT_ID_TX_FRAMES_9217_16383                                                 = 44,   /**< TX 9217-16383 Byte Frames. */
+    BCMOLT_NNI_STAT_ID_TX_FRAMES                                                            = 45,   /**< TX Frames. */
+    BCMOLT_NNI_STAT_ID_TX_BYTES                                                             = 46,   /**< TX Bytes. */
+    BCMOLT_NNI_STAT_ID_TX_GOOD_FRAMES                                                       = 47,   /**< TX Good Frames. */
+    BCMOLT_NNI_STAT_ID_TX_UNICAST_FRAMES                                                    = 48,   /**< TX Unicast Frames. */
+    BCMOLT_NNI_STAT_ID_TX_MULTICAST_FRAMES                                                  = 49,   /**< TX Multicast Frames. */
+    BCMOLT_NNI_STAT_ID_TX_BROADCAST_FRAMES                                                  = 50,   /**< TX Broadcast Frames. */
+    BCMOLT_NNI_STAT_ID_TX_PAUSE_FRAMES                                                      = 51,   /**< TX Pause Frames. */
+    BCMOLT_NNI_STAT_ID_TX_PFC_FRAMES                                                        = 52,   /**< TX PFC Frames. */
+    BCMOLT_NNI_STAT_ID_TX_JABBER_FRAMES                                                     = 53,   /**< TX Jabber Frames. */
+    BCMOLT_NNI_STAT_ID_TX_FCS_ERRORS                                                        = 54,   /**< TX FCS Errors. */
+    BCMOLT_NNI_STAT_ID_TX_CONTROL_FRAMES                                                    = 55,   /**< TX Control Frames. */
+    BCMOLT_NNI_STAT_ID_TX_OVERSIZE_FRAMES                                                   = 56,   /**< TX Oversize Frames. */
+    BCMOLT_NNI_STAT_ID_TX_FRAGMENTED_FRAMES                                                 = 57,   /**< TX Fragmented Frames. */
+    BCMOLT_NNI_STAT_ID_TX_ERROR_FRAMES                                                      = 58,   /**< TX Error Frames. */
+    BCMOLT_NNI_STAT_ID_TX_VLAN_FRAMES                                                       = 59,   /**< TX VLAN Frames. */
+    BCMOLT_NNI_STAT_ID_TX_DOUBLE_VLAN_FRAMES                                                = 60,   /**< TX Double VLAN Frames. */
+    BCMOLT_NNI_STAT_ID_TX_RUNT_FRAMES                                                       = 61,   /**< TX Runt Frames. */
+    BCMOLT_NNI_STAT_ID_TX_UNDERRUN_FRAMES                                                   = 62,   /**< TX Underrun Frames. */
+    BCMOLT_NNI_STAT_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_nni_stat_id;
+
+/** Identifiers for all properties contained in the nni_status_changed group. 
+ */
+typedef enum bcmolt_nni_status_changed_id
+{
+    BCMOLT_NNI_STATUS_CHANGED_ID__BEGIN                                                     = 0,
+    BCMOLT_NNI_STATUS_CHANGED_ID_NEW_STATUS                                                 = 0,    /**< New NNI Link Status. */
+    BCMOLT_NNI_STATUS_CHANGED_ID_LINK                                                       = 1,    /**< Link. */
+    BCMOLT_NNI_STATUS_CHANGED_ID_PREVIOUS_ACTIVE                                            = 2,    /**< Previous Active. */
+    BCMOLT_NNI_STATUS_CHANGED_ID_NEW_ACTIVE                                                 = 3,    /**< New Active. */
+    BCMOLT_NNI_STATUS_CHANGED_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_nni_status_changed_id;
+
+/** Identifiers for all properties contained in the software_error_cfg group. 
+ */
+typedef enum bcmolt_software_error_cfg_id
+{
+    BCMOLT_SOFTWARE_ERROR_CFG_ID__BEGIN                                                     = 0,
+    BCMOLT_SOFTWARE_ERROR_CFG_ID_ENTRY                                                      = 0,    /**< Entry. */
+    BCMOLT_SOFTWARE_ERROR_CFG_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_software_error_cfg_id;
+
+/** Identifiers for all properties contained in the software_error_key group. 
+ */
+typedef enum bcmolt_software_error_key_id
+{
+    BCMOLT_SOFTWARE_ERROR_KEY_ID__BEGIN                                                     = 0,
+    BCMOLT_SOFTWARE_ERROR_KEY_ID_RESERVED                                                   = 0,    /**< Reserved. */
+    BCMOLT_SOFTWARE_ERROR_KEY_ID_IDX                                                        = 1,    /**< Index. */
+    BCMOLT_SOFTWARE_ERROR_KEY_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_software_error_key_id;
+
+/** Identifiers for all properties contained in the trx_calibration_auto_cfg 
+ * group. 
+ */
+typedef enum bcmolt_trx_calibration_auto_cfg_id
+{
+    BCMOLT_TRX_CALIBRATION_AUTO_CFG_ID__BEGIN                                               = 0,
+    BCMOLT_TRX_CALIBRATION_AUTO_CFG_ID_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED               = 0,    /**< Capture window and statistic completed. */
+    BCMOLT_TRX_CALIBRATION_AUTO_CFG_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_trx_calibration_auto_cfg_id;
+
+/** Identifiers for all properties contained in the 
+ * trx_calibration_capture_window_and_statistic_completed group. 
+ */
+typedef enum bcmolt_trx_calibration_capture_window_and_statistic_completed_id
+{
+    BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID__BEGIN                 = 0,
+    BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_DATA_WINDOW            = 0,    /**< data window. */
+    BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_STROBE_WINDOW          = 1,    /**< strobe window. */
+    BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_RISE_MIN_MIN      = 2,    /**< edge rise min min. */
+    BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_RISE_MIN_MAX      = 3,    /**< edge rise min max. */
+    BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_RISE_MAX_MIN      = 4,    /**< edge rise max min. */
+    BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_RISE_MAX_MAX      = 5,    /**< edge rise max max. */
+    BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_FALL_MIN_MIN      = 6,    /**< edge fall min min . */
+    BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_FALL_MIN_MAX      = 7,    /**< edge fall min max. */
+    BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_FALL_MAX_MIN      = 8,    /**< edge fall max min. */
+    BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_FALL_MAX_MAX      = 9,    /**< edge fall max max. */
+    BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_RESULT                 = 10,   /**< result. */
+    BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID__NUM_OF                        /**< Number of enum entries, not an entry itself. */
+} bcmolt_trx_calibration_capture_window_and_statistic_completed_id;
+
+/** Identifiers for all properties contained in the trx_calibration_key group. 
+ */
+typedef enum bcmolt_trx_calibration_key_id
+{
+    BCMOLT_TRX_CALIBRATION_KEY_ID__BEGIN                                                    = 0,
+    BCMOLT_TRX_CALIBRATION_KEY_ID_RESERVED                                                  = 0,    /**< Reserved. */
+    BCMOLT_TRX_CALIBRATION_KEY_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_trx_calibration_key_id;
+
+/** Identifiers for all properties contained in the 
+ * trx_calibration_start_capture_window group. 
+ */
+typedef enum bcmolt_trx_calibration_start_capture_window_id
+{
+    BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID__BEGIN                                   = 0,
+    BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_PON_NI                                   = 0,    /**< pon_ni. */
+    BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_TRIGGER                                  = 1,    /**< trigger. */
+    BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_STROBE                                   = 2,    /**< strobe. */
+    BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_WINDOW_MODE                              = 3,    /**< window mode. */
+    BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_ONU_ID                                   = 4,    /**< onu id. */
+    BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_TRIGGER_POSITION                         = 5,    /**< trigger position. */
+    BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_STOP_DUE_TO_CORRUPT_STROBE               = 6,    /**< stop due to corrupt strobe. */
+    BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_START_OFFSET                             = 7,    /**< start offset. */
+    BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_END_OFFSET                               = 8,    /**< end offset. */
+    BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_NUMBER_OF_CYCLES                         = 9,    /**< number of cycles. */
+    BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_trx_calibration_start_capture_window_id;
+
+/** Identifiers for all properties contained in the 
+ * trx_calibration_stop_capture_window group. 
+ */
+typedef enum bcmolt_trx_calibration_stop_capture_window_id
+{
+    BCMOLT_TRX_CALIBRATION_STOP_CAPTURE_WINDOW_ID__BEGIN                                    = 0,
+    BCMOLT_TRX_CALIBRATION_STOP_CAPTURE_WINDOW_ID_PON_NI                                    = 0,    /**< pon_ni. */
+    BCMOLT_TRX_CALIBRATION_STOP_CAPTURE_WINDOW_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_trx_calibration_stop_capture_window_id;
+
+/** Identifiers for all properties contained in the xgpon_alloc_auto_cfg group. 
+ */
+typedef enum bcmolt_xgpon_alloc_auto_cfg_id
+{
+    BCMOLT_XGPON_ALLOC_AUTO_CFG_ID__BEGIN                                                   = 0,
+    BCMOLT_XGPON_ALLOC_AUTO_CFG_ID_CONFIGURATION_COMPLETED                                  = 0,    /**< Configuration Completed. */
+    BCMOLT_XGPON_ALLOC_AUTO_CFG_ID_GET_ALLOC_STATS_COMPLETED                                = 1,    /**< Get alloc ID statistics completed. */
+    BCMOLT_XGPON_ALLOC_AUTO_CFG_ID_STAT_ALARM_CLEARED                                       = 2,    /**< Stat Alarm Cleared. */
+    BCMOLT_XGPON_ALLOC_AUTO_CFG_ID_STAT_ALARM_RAISED                                        = 3,    /**< Stat Alarm Raised. */
+    BCMOLT_XGPON_ALLOC_AUTO_CFG_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_alloc_auto_cfg_id;
+
+/** Identifiers for all properties contained in the xgpon_alloc_cfg group. 
+ */
+typedef enum bcmolt_xgpon_alloc_cfg_id
+{
+    BCMOLT_XGPON_ALLOC_CFG_ID__BEGIN                                                        = 0,
+    BCMOLT_XGPON_ALLOC_CFG_ID_STATE                                                         = 0,    /**< state. */
+    BCMOLT_XGPON_ALLOC_CFG_ID_SLA                                                           = 1,    /**< sla. */
+    BCMOLT_XGPON_ALLOC_CFG_ID_ONU_ID                                                        = 2,    /**< onu_id. */
+    BCMOLT_XGPON_ALLOC_CFG_ID_COLLECT_STATS                                                 = 3,    /**< Enable statistics collection on the alloc id. */
+    BCMOLT_XGPON_ALLOC_CFG_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_alloc_cfg_id;
+
+/** Identifiers for all properties contained in the 
+ * xgpon_alloc_configuration_completed group. 
+ */
+typedef enum bcmolt_xgpon_alloc_configuration_completed_id
+{
+    BCMOLT_XGPON_ALLOC_CONFIGURATION_COMPLETED_ID__BEGIN                                    = 0,
+    BCMOLT_XGPON_ALLOC_CONFIGURATION_COMPLETED_ID_STATUS                                    = 0,    /**< status. */
+    BCMOLT_XGPON_ALLOC_CONFIGURATION_COMPLETED_ID_NEW_STATE                                 = 1,    /**< new state. */
+    BCMOLT_XGPON_ALLOC_CONFIGURATION_COMPLETED_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_alloc_configuration_completed_id;
+
+/** Identifiers for all properties contained in the 
+ * xgpon_alloc_get_alloc_stats_completed group. 
+ */
+typedef enum bcmolt_xgpon_alloc_get_alloc_stats_completed_id
+{
+    BCMOLT_XGPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID__BEGIN                                  = 0,
+    BCMOLT_XGPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_STATUS                                  = 0,    /**< status. */
+    BCMOLT_XGPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_NSR_USED                        = 1,    /**< Average NSR used words. */
+    BCMOLT_XGPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_NSR_ALLOCATED                   = 2,    /**< Average NSR allocated words. */
+    BCMOLT_XGPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_SR_REPORT                       = 3,    /**< Average SR report. */
+    BCMOLT_XGPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_alloc_get_alloc_stats_completed_id;
+
+/** Identifiers for all properties contained in the xgpon_alloc_get_stats group. 
+ */
+typedef enum bcmolt_xgpon_alloc_get_stats_id
+{
+    BCMOLT_XGPON_ALLOC_GET_STATS_ID__BEGIN                                                  = 0,
+    BCMOLT_XGPON_ALLOC_GET_STATS_ID_NUM_OF_CYCLES                                           = 0,    /**< Number of cycles. */
+    BCMOLT_XGPON_ALLOC_GET_STATS_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_alloc_get_stats_id;
+
+/** Identifiers for all properties contained in the xgpon_alloc_key group. 
+ */
+typedef enum bcmolt_xgpon_alloc_key_id
+{
+    BCMOLT_XGPON_ALLOC_KEY_ID__BEGIN                                                        = 0,
+    BCMOLT_XGPON_ALLOC_KEY_ID_PON_NI                                                        = 0,    /**< PON network interface. */
+    BCMOLT_XGPON_ALLOC_KEY_ID_ALLOC_ID                                                      = 1,    /**< Alloc ID. */
+    BCMOLT_XGPON_ALLOC_KEY_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_alloc_key_id;
+
+/** Identifiers for all properties contained in the xgpon_alloc_set_state group. 
+ */
+typedef enum bcmolt_xgpon_alloc_set_state_id
+{
+    BCMOLT_XGPON_ALLOC_SET_STATE_ID__BEGIN                                                  = 0,
+    BCMOLT_XGPON_ALLOC_SET_STATE_ID_STATE                                                   = 0,    /**< State. */
+    BCMOLT_XGPON_ALLOC_SET_STATE_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_alloc_set_state_id;
+
+/** Identifiers for all properties contained in the 
+ * xgpon_alloc_stat_alarm_cleared group. 
+ */
+typedef enum bcmolt_xgpon_alloc_stat_alarm_cleared_id
+{
+    BCMOLT_XGPON_ALLOC_STAT_ALARM_CLEARED_ID__BEGIN                                         = 0,
+    BCMOLT_XGPON_ALLOC_STAT_ALARM_CLEARED_ID_STAT                                           = 0,    /**< Statistic ID. */
+    BCMOLT_XGPON_ALLOC_STAT_ALARM_CLEARED_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_alloc_stat_alarm_cleared_id;
+
+/** Identifiers for all properties contained in the 
+ * xgpon_alloc_stat_alarm_raised group. 
+ */
+typedef enum bcmolt_xgpon_alloc_stat_alarm_raised_id
+{
+    BCMOLT_XGPON_ALLOC_STAT_ALARM_RAISED_ID__BEGIN                                          = 0,
+    BCMOLT_XGPON_ALLOC_STAT_ALARM_RAISED_ID_STAT                                            = 0,    /**< Statistic ID. */
+    BCMOLT_XGPON_ALLOC_STAT_ALARM_RAISED_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_alloc_stat_alarm_raised_id;
+
+/** Identifiers for all properties contained in the xgpon_alloc_stat_cfg group. 
+ */
+typedef enum bcmolt_xgpon_alloc_stat_cfg_id
+{
+    BCMOLT_XGPON_ALLOC_STAT_CFG_ID__BEGIN                                                   = 0,
+    BCMOLT_XGPON_ALLOC_STAT_CFG_ID_CFG                                                      = 0,    /**< Configuration. */
+    BCMOLT_XGPON_ALLOC_STAT_CFG_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_alloc_stat_cfg_id;
+
+/** Identifiers for all properties contained in the xgpon_alloc_stat group. 
+ */
+typedef enum bcmolt_xgpon_alloc_stat_id
+{
+    BCMOLT_XGPON_ALLOC_STAT_ID__BEGIN                                                       = 0,
+    BCMOLT_XGPON_ALLOC_STAT_ID_RX_BYTES                                                     = 0,    /**< Received Bytes. */
+    BCMOLT_XGPON_ALLOC_STAT_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_alloc_stat_id;
+
+/** Identifiers for all properties contained in the xgpon_gem_port_auto_cfg 
+ * group. 
+ */
+typedef enum bcmolt_xgpon_gem_port_auto_cfg_id
+{
+    BCMOLT_XGPON_GEM_PORT_AUTO_CFG_ID__BEGIN                                                = 0,
+    BCMOLT_XGPON_GEM_PORT_AUTO_CFG_ID_STAT_ALARM_CLEARED                                    = 0,    /**< Stat Alarm Cleared. */
+    BCMOLT_XGPON_GEM_PORT_AUTO_CFG_ID_STAT_ALARM_RAISED                                     = 1,    /**< Stat Alarm Raised. */
+    BCMOLT_XGPON_GEM_PORT_AUTO_CFG_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_gem_port_auto_cfg_id;
+
+/** Identifiers for all properties contained in the xgpon_gem_port_cfg group. 
+ */
+typedef enum bcmolt_xgpon_gem_port_cfg_id
+{
+    BCMOLT_XGPON_GEM_PORT_CFG_ID__BEGIN                                                     = 0,
+    BCMOLT_XGPON_GEM_PORT_CFG_ID_CONFIGURATION                                              = 0,    /**< Configuration. */
+    BCMOLT_XGPON_GEM_PORT_CFG_ID_ONU_ID                                                     = 1,    /**< ONU ID. */
+    BCMOLT_XGPON_GEM_PORT_CFG_ID_GEM_PORT_STATE                                             = 2,    /**< gem port state. */
+    BCMOLT_XGPON_GEM_PORT_CFG_ID_ENCRYPTION_MODE                                            = 3,    /**< Encryption mode. */
+    BCMOLT_XGPON_GEM_PORT_CFG_ID_UPSTREAM_DESTINATION_QUEUE                                 = 4,    /**< Upstream destination queue. */
+    BCMOLT_XGPON_GEM_PORT_CFG_ID_CONTROL                                                    = 5,    /**< control. */
+    BCMOLT_XGPON_GEM_PORT_CFG_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_gem_port_cfg_id;
+
+/** Identifiers for all properties contained in the xgpon_gem_port_key group. 
+ */
+typedef enum bcmolt_xgpon_gem_port_key_id
+{
+    BCMOLT_XGPON_GEM_PORT_KEY_ID__BEGIN                                                     = 0,
+    BCMOLT_XGPON_GEM_PORT_KEY_ID_PON_NI                                                     = 0,    /**< PON network interface. */
+    BCMOLT_XGPON_GEM_PORT_KEY_ID_GEM_PORT_ID                                                = 1,    /**< GEM PORT ID. */
+    BCMOLT_XGPON_GEM_PORT_KEY_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_gem_port_key_id;
+
+/** Identifiers for all properties contained in the 
+ * xgpon_gem_port_stat_alarm_cleared group. 
+ */
+typedef enum bcmolt_xgpon_gem_port_stat_alarm_cleared_id
+{
+    BCMOLT_XGPON_GEM_PORT_STAT_ALARM_CLEARED_ID__BEGIN                                      = 0,
+    BCMOLT_XGPON_GEM_PORT_STAT_ALARM_CLEARED_ID_STAT                                        = 0,    /**< Statistic ID. */
+    BCMOLT_XGPON_GEM_PORT_STAT_ALARM_CLEARED_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_gem_port_stat_alarm_cleared_id;
+
+/** Identifiers for all properties contained in the 
+ * xgpon_gem_port_stat_alarm_raised group. 
+ */
+typedef enum bcmolt_xgpon_gem_port_stat_alarm_raised_id
+{
+    BCMOLT_XGPON_GEM_PORT_STAT_ALARM_RAISED_ID__BEGIN                                       = 0,
+    BCMOLT_XGPON_GEM_PORT_STAT_ALARM_RAISED_ID_STAT                                         = 0,    /**< Statistic ID. */
+    BCMOLT_XGPON_GEM_PORT_STAT_ALARM_RAISED_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_gem_port_stat_alarm_raised_id;
+
+/** Identifiers for all properties contained in the xgpon_gem_port_stat_cfg 
+ * group. 
+ */
+typedef enum bcmolt_xgpon_gem_port_stat_cfg_id
+{
+    BCMOLT_XGPON_GEM_PORT_STAT_CFG_ID__BEGIN                                                = 0,
+    BCMOLT_XGPON_GEM_PORT_STAT_CFG_ID_CFG                                                   = 0,    /**< Configuration. */
+    BCMOLT_XGPON_GEM_PORT_STAT_CFG_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_gem_port_stat_cfg_id;
+
+/** Identifiers for all properties contained in the xgpon_gem_port_stat group. 
+ */
+typedef enum bcmolt_xgpon_gem_port_stat_id
+{
+    BCMOLT_XGPON_GEM_PORT_STAT_ID__BEGIN                                                    = 0,
+    BCMOLT_XGPON_GEM_PORT_STAT_ID_TX_BYTES                                                  = 0,    /**< TX bytes. */
+    BCMOLT_XGPON_GEM_PORT_STAT_ID_TX_PACKETS                                                = 1,    /**< TX packets. */
+    BCMOLT_XGPON_GEM_PORT_STAT_ID_RX_PACKETS                                                = 2,    /**< RX packets. */
+    BCMOLT_XGPON_GEM_PORT_STAT_ID_RX_BYTES                                                  = 3,    /**< RX bytes. */
+    BCMOLT_XGPON_GEM_PORT_STAT_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_gem_port_stat_id;
+
+/** Identifiers for all properties contained in the xgpon_iwf_cfg group. 
+ */
+typedef enum bcmolt_xgpon_iwf_cfg_id
+{
+    BCMOLT_XGPON_IWF_CFG_ID__BEGIN                                                          = 0,
+    BCMOLT_XGPON_IWF_CFG_ID_US_OTAG_DIRECT_TPID                                             = 0,    /**< US otag direct tpid. */
+    BCMOLT_XGPON_IWF_CFG_ID_DS_TPID                                                         = 1,    /**< DS tpid. */
+    BCMOLT_XGPON_IWF_CFG_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_iwf_cfg_id;
+
+/** Identifiers for all properties contained in the xgpon_iwf_key group. 
+ */
+typedef enum bcmolt_xgpon_iwf_key_id
+{
+    BCMOLT_XGPON_IWF_KEY_ID__BEGIN                                                          = 0,
+    BCMOLT_XGPON_IWF_KEY_ID_PON_NI                                                          = 0,    /**< PON network interface. */
+    BCMOLT_XGPON_IWF_KEY_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_iwf_key_id;
+
+/** Identifiers for all properties contained in the 
+ * xgpon_ni_activate_all_onus_completed group. 
+ */
+typedef enum bcmolt_xgpon_ni_activate_all_onus_completed_id
+{
+    BCMOLT_XGPON_NI_ACTIVATE_ALL_ONUS_COMPLETED_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_ni_activate_all_onus_completed_id;
+
+/** Identifiers for all properties contained in the 
+ * xgpon_ni_adjust_tx_wavelength group. 
+ */
+typedef enum bcmolt_xgpon_ni_adjust_tx_wavelength_id
+{
+    BCMOLT_XGPON_NI_ADJUST_TX_WAVELENGTH_ID__BEGIN                                          = 0,
+    BCMOLT_XGPON_NI_ADJUST_TX_WAVELENGTH_ID_SERIAL_NUMBER                                   = 0,    /**< Seril number. */
+    BCMOLT_XGPON_NI_ADJUST_TX_WAVELENGTH_ID_FREQENCY_ADJUSTMENT_DIRECTION                   = 1,    /**< Frequncy adjustment direction. */
+    BCMOLT_XGPON_NI_ADJUST_TX_WAVELENGTH_ID_FREQUENCY_ADJUSTMENT_SIZE                       = 2,    /**< Frequency adjustment size. */
+    BCMOLT_XGPON_NI_ADJUST_TX_WAVELENGTH_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_ni_adjust_tx_wavelength_id;
+
+/** Identifiers for all properties contained in the xgpon_ni_auto_cfg group. 
+ */
+typedef enum bcmolt_xgpon_ni_auto_cfg_id
+{
+    BCMOLT_XGPON_NI_AUTO_CFG_ID__BEGIN                                                      = 0,
+    BCMOLT_XGPON_NI_AUTO_CFG_ID_ACTIVATE_ALL_ONUS_COMPLETED                                 = 0,    /**< activate all onus completed. */
+    BCMOLT_XGPON_NI_AUTO_CFG_ID_CPU_PACKETS_FAILURE                                         = 1,    /**< CPU Packets Failure. */
+    BCMOLT_XGPON_NI_AUTO_CFG_ID_DEACTIVATE_ALL_ONUS_COMPLETED                               = 2,    /**< deactivate all onus completed. */
+    BCMOLT_XGPON_NI_AUTO_CFG_ID_DISABLE_ALL_ONUS_COMPLETED                                  = 3,    /**< disable all onus completed. */
+    BCMOLT_XGPON_NI_AUTO_CFG_ID_ENABLE_ALL_ONUS_COMPLETED                                   = 4,    /**< enable all onus completed. */
+    BCMOLT_XGPON_NI_AUTO_CFG_ID_LOS                                                         = 5,    /**< LOS. */
+    BCMOLT_XGPON_NI_AUTO_CFG_ID_ONU_DISCOVERED                                              = 6,    /**< ONU Discovered. */
+    BCMOLT_XGPON_NI_AUTO_CFG_ID_ONU_UPGRADE_COMPLETE                                        = 7,    /**< ONU Upgrade Complete. */
+    BCMOLT_XGPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_ONUS_RANGED                            = 8,    /**< Protection Switching ONUs Ranged. */
+    BCMOLT_XGPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED                   = 9,    /**< Protection Switching Switchover Completed. */
+    BCMOLT_XGPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_TRAFFIC_RESUME                         = 10,   /**< Protection Switching Traffic Resume. */
+    BCMOLT_XGPON_NI_AUTO_CFG_ID_ROGUE_DETECTION_COMPLETED                                   = 11,   /**< Rogue detection completed. */
+    BCMOLT_XGPON_NI_AUTO_CFG_ID_ROGUE_ONU_SPECIAL_MAP_CYCLE_START                           = 12,   /**< Rogue ONU special map cycle start. */
+    BCMOLT_XGPON_NI_AUTO_CFG_ID_SERIAL_NUMBER_ACQUISITION_CYCLE_START                       = 13,   /**< Serial Number Acquisition Cycle Start. */
+    BCMOLT_XGPON_NI_AUTO_CFG_ID_STANDBY_PON_MONITORING_CYCLE_COMPLETED                      = 14,   /**< Standby PON Monitoring Cycle Completed. */
+    BCMOLT_XGPON_NI_AUTO_CFG_ID_STAT_ALARM_CLEARED                                          = 15,   /**< Stat Alarm Cleared. */
+    BCMOLT_XGPON_NI_AUTO_CFG_ID_STAT_ALARM_RAISED                                           = 16,   /**< Stat Alarm Raised. */
+    BCMOLT_XGPON_NI_AUTO_CFG_ID_STATE_CHANGE_COMPLETED                                      = 17,   /**< State Change Completed. */
+    BCMOLT_XGPON_NI_AUTO_CFG_ID_TOD_REQUEST_COMPLETED                                       = 18,   /**< TOD request completed. */
+    BCMOLT_XGPON_NI_AUTO_CFG_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_ni_auto_cfg_id;
+
+/** Identifiers for all properties contained in the 
+ * xgpon_ni_broadcast_ploam_packet group. 
+ */
+typedef enum bcmolt_xgpon_ni_broadcast_ploam_packet_id
+{
+    BCMOLT_XGPON_NI_BROADCAST_PLOAM_PACKET_ID__BEGIN                                        = 0,
+    BCMOLT_XGPON_NI_BROADCAST_PLOAM_PACKET_ID_PLOAM                                         = 0,    /**< ploam. */
+    BCMOLT_XGPON_NI_BROADCAST_PLOAM_PACKET_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_ni_broadcast_ploam_packet_id;
+
+/** Identifiers for all properties contained in the xgpon_ni_cfg group. 
+ */
+typedef enum bcmolt_xgpon_ni_cfg_id
+{
+    BCMOLT_XGPON_NI_CFG_ID__BEGIN                                                           = 0,
+    BCMOLT_XGPON_NI_CFG_ID_HW_PON_ID                                                        = 0,    /**< HW pon id. */
+    BCMOLT_XGPON_NI_CFG_ID_AVAILABLE_BANDWIDTH                                              = 1,    /**< Available Bandwidth. */
+    BCMOLT_XGPON_NI_CFG_ID_NUMBER_OF_ACTIVE_ONUS                                            = 2,    /**< number of active onus. */
+    BCMOLT_XGPON_NI_CFG_ID_PON_STATUS                                                       = 3,    /**< PON status. */
+    BCMOLT_XGPON_NI_CFG_ID_PON_DISTANCE                                                     = 4,    /**< PON distance. */
+    BCMOLT_XGPON_NI_CFG_ID_RANGING_WINDOW_SIZE                                              = 5,    /**< Ranging window size. */
+    BCMOLT_XGPON_NI_CFG_ID_EQD_CYCLES_NUMBER                                                = 6,    /**< EqD measurement cycles number. */
+    BCMOLT_XGPON_NI_CFG_ID_DRIFT_CONTROL                                                    = 7,    /**< drift control. */
+    BCMOLT_XGPON_NI_CFG_ID_LOS_ALARM_THRESHOLD                                              = 8,    /**< los alarm threshold. */
+    BCMOLT_XGPON_NI_CFG_ID_LOS_INITIAL_VALUE                                                = 9,    /**< los initialization value. */
+    BCMOLT_XGPON_NI_CFG_ID_ONU_ALARMS_THRESHOLDS                                            = 10,   /**< ONU alarms thresholds. */
+    BCMOLT_XGPON_NI_CFG_ID_BER_MONITOR                                                      = 11,   /**< BER monitoring params. */
+    BCMOLT_XGPON_NI_CFG_ID_ONU_ACTIVATION                                                   = 12,   /**< ONU Activation. */
+    BCMOLT_XGPON_NI_CFG_ID_SN_ACQUISITION                                                   = 13,   /**< sn acquisition. */
+    BCMOLT_XGPON_NI_CFG_ID_KEY_EXCHANGE                                                     = 14,   /**< key exchange. */
+    BCMOLT_XGPON_NI_CFG_ID_PROTECTION_SWITCHING                                             = 15,   /**< Protection switching. */
+    BCMOLT_XGPON_NI_CFG_ID_PROTECTION_SWITCHING_DEBUG                                       = 16,   /**< protection switching debug . */
+    BCMOLT_XGPON_NI_CFG_ID_CBR_RT_ALLOCATION_PROFILE                                        = 17,   /**< CBR RT Allocation profile. */
+    BCMOLT_XGPON_NI_CFG_ID_CBR_NRT_ALLOCATION_PROFILE                                       = 18,   /**< CBR NRT Allocation Profile. */
+    BCMOLT_XGPON_NI_CFG_ID_POWER_MANAGEMENT                                                 = 19,   /**< Power Management. */
+    BCMOLT_XGPON_NI_CFG_ID_ROGUE_ONU_DETECTION_PROCESS                                      = 20,   /**< Rogue ONU detection process. */
+    BCMOLT_XGPON_NI_CFG_ID_PERIODIC_STANDBY_PON_MONITORING                                  = 21,   /**< Periodic standby PON monitoring. */
+    BCMOLT_XGPON_NI_CFG_ID_DBA_MODE                                                         = 22,   /**< DBA mode. */
+    BCMOLT_XGPON_NI_CFG_ID_PLOAM_HANDLING                                                   = 23,   /**< Ploam handling. */
+    BCMOLT_XGPON_NI_CFG_ID_MIN_DATA_ALLOC_ID                                                = 24,   /**< Minimum data alloc id. */
+    BCMOLT_XGPON_NI_CFG_ID_MIN_DATA_GEM_PORT_ID                                             = 25,   /**< Minimum data port id. */
+    BCMOLT_XGPON_NI_CFG_ID_MULTICAST_KEY                                                    = 26,   /**< multicast key. */
+    BCMOLT_XGPON_NI_CFG_ID_PRBS_CHECKER                                                     = 27,   /**< PRBS Checker. */
+    BCMOLT_XGPON_NI_CFG_ID_PRBS_GENERATOR                                                   = 28,   /**< PRBS Generator. */
+    BCMOLT_XGPON_NI_CFG_ID_PRBS_STATUS                                                      = 29,   /**< PRBS status. */
+    BCMOLT_XGPON_NI_CFG_ID_AUTOMATIC_ONU_DEACTIVATION                                       = 30,   /**< Automatic ONU deactivation. */
+    BCMOLT_XGPON_NI_CFG_ID_US_BANDWIDTH_LIMIT                                               = 31,   /**< US bandwidth Limit. */
+    BCMOLT_XGPON_NI_CFG_ID_ALL_ONUS                                                         = 32,   /**< all ONUs. */
+    BCMOLT_XGPON_NI_CFG_ID_ALL_MCAST_GEM_PORTS                                              = 33,   /**< all multicast GEM ports. */
+    BCMOLT_XGPON_NI_CFG_ID_DEBUG                                                            = 34,   /**< PON NI debug parameters. */
+    BCMOLT_XGPON_NI_CFG_ID_ONU_UPGRADE_PARAMS                                               = 35,   /**< ONU upgrade params. */
+    BCMOLT_XGPON_NI_CFG_ID_DS_FEC_MODE                                                      = 36,   /**< DS FEC mode. */
+    BCMOLT_XGPON_NI_CFG_ID_DBA_TYPE                                                         = 37,   /**< DBA type. */
+    BCMOLT_XGPON_NI_CFG_ID_ONU_TUNING                                                       = 38,   /**< onu tuning. */
+    BCMOLT_XGPON_NI_CFG_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_ni_cfg_id;
+
+/** Identifiers for all properties contained in the xgpon_ni_cpu_packets_failure 
+ * group. 
+ */
+typedef enum bcmolt_xgpon_ni_cpu_packets_failure_id
+{
+    BCMOLT_XGPON_NI_CPU_PACKETS_FAILURE_ID__BEGIN                                           = 0,
+    BCMOLT_XGPON_NI_CPU_PACKETS_FAILURE_ID_ERROR                                            = 0,    /**< Error. */
+    BCMOLT_XGPON_NI_CPU_PACKETS_FAILURE_ID_GEM_PORT_ID                                      = 1,    /**< GEM Port ID. */
+    BCMOLT_XGPON_NI_CPU_PACKETS_FAILURE_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_ni_cpu_packets_failure_id;
+
+/** Identifiers for all properties contained in the xgpon_ni_cpu_packets group. 
+ */
+typedef enum bcmolt_xgpon_ni_cpu_packets_id
+{
+    BCMOLT_XGPON_NI_CPU_PACKETS_ID__BEGIN                                                   = 0,
+    BCMOLT_XGPON_NI_CPU_PACKETS_ID_PACKET_TYPE                                              = 0,    /**< packet type. */
+    BCMOLT_XGPON_NI_CPU_PACKETS_ID_CALC_CRC                                                 = 1,    /**< calc crc. */
+    BCMOLT_XGPON_NI_CPU_PACKETS_ID_GEM_PORT_LIST                                            = 2,    /**< gem port list. */
+    BCMOLT_XGPON_NI_CPU_PACKETS_ID_BUFFER                                                   = 3,    /**< buffer. */
+    BCMOLT_XGPON_NI_CPU_PACKETS_ID__NUM_OF                      /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_ni_cpu_packets_id;
+
+/** Identifiers for all properties contained in the 
+ * xgpon_ni_deactivate_all_onus_completed group. 
+ */
+typedef enum bcmolt_xgpon_ni_deactivate_all_onus_completed_id
+{
+    BCMOLT_XGPON_NI_DEACTIVATE_ALL_ONUS_COMPLETED_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_ni_deactivate_all_onus_completed_id;
+
+/** Identifiers for all properties contained in the 
+ * xgpon_ni_disable_all_onus_completed group. 
+ */
+typedef enum bcmolt_xgpon_ni_disable_all_onus_completed_id
+{
+    BCMOLT_XGPON_NI_DISABLE_ALL_ONUS_COMPLETED_ID__NUM_OF       /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_ni_disable_all_onus_completed_id;
+
+/** Identifiers for all properties contained in the 
+ * xgpon_ni_disable_serial_number group. 
+ */
+typedef enum bcmolt_xgpon_ni_disable_serial_number_id
+{
+    BCMOLT_XGPON_NI_DISABLE_SERIAL_NUMBER_ID__BEGIN                                         = 0,
+    BCMOLT_XGPON_NI_DISABLE_SERIAL_NUMBER_ID_CONTROL                                        = 0,    /**< control. */
+    BCMOLT_XGPON_NI_DISABLE_SERIAL_NUMBER_ID_SERIAL_NUMBER                                  = 1,    /**< serial number. */
+    BCMOLT_XGPON_NI_DISABLE_SERIAL_NUMBER_ID__NUM_OF        /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_ni_disable_serial_number_id;
+
+/** Identifiers for all properties contained in the 
+ * xgpon_ni_enable_all_onus_completed group. 
+ */
+typedef enum bcmolt_xgpon_ni_enable_all_onus_completed_id
+{
+    BCMOLT_XGPON_NI_ENABLE_ALL_ONUS_COMPLETED_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_ni_enable_all_onus_completed_id;
+
+/** Identifiers for all properties contained in the xgpon_ni_key group. 
+ */
+typedef enum bcmolt_xgpon_ni_key_id
+{
+    BCMOLT_XGPON_NI_KEY_ID__BEGIN                                                           = 0,
+    BCMOLT_XGPON_NI_KEY_ID_PON_NI                                                           = 0,    /**< PON network interface. */
+    BCMOLT_XGPON_NI_KEY_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_ni_key_id;
+
+/** Identifiers for all properties contained in the xgpon_ni_los group. 
+ */
+typedef enum bcmolt_xgpon_ni_los_id
+{
+    BCMOLT_XGPON_NI_LOS_ID__BEGIN                                                           = 0,
+    BCMOLT_XGPON_NI_LOS_ID_STATUS                                                           = 0,    /**< status. */
+    BCMOLT_XGPON_NI_LOS_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_ni_los_id;
+
+/** Identifiers for all properties contained in the xgpon_ni_onu_discovered 
+ * group. 
+ */
+typedef enum bcmolt_xgpon_ni_onu_discovered_id
+{
+    BCMOLT_XGPON_NI_ONU_DISCOVERED_ID__BEGIN                                                = 0,
+    BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_SERIAL_NUMBER                                         = 0,    /**< serial number. */
+    BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_RANGING_TIME                                          = 1,    /**< ranging time. */
+    BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_ONU_ID                                                = 2,    /**< onu_id. */
+    BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_UPSTREAM_LINE_RATE_CAPABILITIES                       = 3,    /**< upstream line rate capabilities. */
+    BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_CURRENT_DOWNSTREAM_PON_ID                             = 4,    /**< current downstream pon id. */
+    BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_CURRENT_UPSTREAM_PON_ID                               = 5,    /**< current upstream pon id. */
+    BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_CALIBRATION_RECORD                                    = 6,    /**< calibration record. */
+    BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_TUNING_GRANULARITY                                    = 7,    /**< tuning granularity. */
+    BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_STEP_TUNING_TIME                                      = 8,    /**< step tuning time. */
+    BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_ATTENUATION                                           = 9,    /**< attenuetion. */
+    BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_POWER_LEVELLING_CAPABILITIES                          = 10,   /**< power levelling capabilities. */
+    BCMOLT_XGPON_NI_ONU_DISCOVERED_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_ni_onu_discovered_id;
+
+/** Identifiers for all properties contained in the 
+ * xgpon_ni_onu_upgrade_complete group. 
+ */
+typedef enum bcmolt_xgpon_ni_onu_upgrade_complete_id
+{
+    BCMOLT_XGPON_NI_ONU_UPGRADE_COMPLETE_ID__BEGIN                                          = 0,
+    BCMOLT_XGPON_NI_ONU_UPGRADE_COMPLETE_ID_STATUS                                          = 0,    /**< Status. */
+    BCMOLT_XGPON_NI_ONU_UPGRADE_COMPLETE_ID_LIST_OF_FAILED_ENTITIES                         = 1,    /**< List of failed entities. */
+    BCMOLT_XGPON_NI_ONU_UPGRADE_COMPLETE_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_ni_onu_upgrade_complete_id;
+
+/** Identifiers for all properties contained in the 
+ * xgpon_ni_protection_switching_onus_ranged group. 
+ */
+typedef enum bcmolt_xgpon_ni_protection_switching_onus_ranged_id
+{
+    BCMOLT_XGPON_NI_PROTECTION_SWITCHING_ONUS_RANGED_ID__BEGIN                              = 0,
+    BCMOLT_XGPON_NI_PROTECTION_SWITCHING_ONUS_RANGED_ID_ONUS                                = 0,    /**< ONUs. */
+    BCMOLT_XGPON_NI_PROTECTION_SWITCHING_ONUS_RANGED_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_ni_protection_switching_onus_ranged_id;
+
+/** Identifiers for all properties contained in the 
+ * xgpon_ni_protection_switching_switchover_completed group. 
+ */
+typedef enum bcmolt_xgpon_ni_protection_switching_switchover_completed_id
+{
+    BCMOLT_XGPON_NI_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED_ID__BEGIN                     = 0,
+    BCMOLT_XGPON_NI_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED_ID_RESULT                     = 0,    /**< Result. */
+    BCMOLT_XGPON_NI_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_ni_protection_switching_switchover_completed_id;
+
+/** Identifiers for all properties contained in the 
+ * xgpon_ni_protection_switching_traffic_resume group. 
+ */
+typedef enum bcmolt_xgpon_ni_protection_switching_traffic_resume_id
+{
+    BCMOLT_XGPON_NI_PROTECTION_SWITCHING_TRAFFIC_RESUME_ID__BEGIN                           = 0,
+    BCMOLT_XGPON_NI_PROTECTION_SWITCHING_TRAFFIC_RESUME_ID_RESULT                           = 0,    /**< Result. */
+    BCMOLT_XGPON_NI_PROTECTION_SWITCHING_TRAFFIC_RESUME_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_ni_protection_switching_traffic_resume_id;
+
+/** Identifiers for all properties contained in the xgpon_ni_reset group. 
+ */
+typedef enum bcmolt_xgpon_ni_reset_id
+{
+    BCMOLT_XGPON_NI_RESET_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_ni_reset_id;
+
+/** Identifiers for all properties contained in the 
+ * xgpon_ni_rogue_detection_completed group. 
+ */
+typedef enum bcmolt_xgpon_ni_rogue_detection_completed_id
+{
+    BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID__BEGIN                                     = 0,
+    BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_WINDOW_TYPE                                = 0,    /**< Window type. */
+    BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_MEASUREMENT_STATUS                         = 1,    /**< Measurement status. */
+    BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_ALLOC_ID                                   = 2,    /**< Alloc ID. */
+    BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_ONU_ID                                     = 3,    /**< ONU ID. */
+    BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_IS_DELINEATION                             = 4,    /**< Is delineation. */
+    BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_IS_ED                                      = 5,    /**< Is ED. */
+    BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_RX_DATA                                    = 6,    /**< Received data. */
+    BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_PLOAM_RECEIVED_ONU_ID                      = 7,    /**< ploam_received_onu_id. */
+    BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_PLOAM_RECEIVED_MIC_ERROR                   = 8,    /**< ploam_received_mic_error. */
+    BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_ni_rogue_detection_completed_id;
+
+/** Identifiers for all properties contained in the 
+ * xgpon_ni_rogue_detection_window group. 
+ */
+typedef enum bcmolt_xgpon_ni_rogue_detection_window_id
+{
+    BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID__BEGIN                                        = 0,
+    BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_WINDOW_TYPE                                   = 0,    /**< Window type. */
+    BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_ALLOC_ID                                      = 1,    /**< Alloc ID. */
+    BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_ONU_ID                                        = 2,    /**< ONU ID. */
+    BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_SECOND_RANGING_WINDOW                         = 3,    /**< Second ranging window. */
+    BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID__NUM_OF               /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_ni_rogue_detection_window_id;
+
+/** Identifiers for all properties contained in the 
+ * xgpon_ni_rogue_onu_special_map_cycle_start group. 
+ */
+typedef enum bcmolt_xgpon_ni_rogue_onu_special_map_cycle_start_id
+{
+    BCMOLT_XGPON_NI_ROGUE_ONU_SPECIAL_MAP_CYCLE_START_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_ni_rogue_onu_special_map_cycle_start_id;
+
+/** Identifiers for all properties contained in the xgpon_ni_run_special_bw_map 
+ * group. 
+ */
+typedef enum bcmolt_xgpon_ni_run_special_bw_map_id
+{
+    BCMOLT_XGPON_NI_RUN_SPECIAL_BW_MAP_ID__BEGIN                                            = 0,
+    BCMOLT_XGPON_NI_RUN_SPECIAL_BW_MAP_ID_NUMBER_OF_CYCLE                                   = 0,    /**< number of cycle. */
+    BCMOLT_XGPON_NI_RUN_SPECIAL_BW_MAP_ID_ALLOCATION_NUMBER                                 = 1,    /**< allocation number. */
+    BCMOLT_XGPON_NI_RUN_SPECIAL_BW_MAP_ID_BW_MAP_ARRAY                                      = 2,    /**< bw map array. */
+    BCMOLT_XGPON_NI_RUN_SPECIAL_BW_MAP_ID__NUM_OF                       /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_ni_run_special_bw_map_id;
+
+/** Identifiers for all properties contained in the 
+ * xgpon_ni_serial_number_acquisition_cycle_start group. 
+ */
+typedef enum bcmolt_xgpon_ni_serial_number_acquisition_cycle_start_id
+{
+    BCMOLT_XGPON_NI_SERIAL_NUMBER_ACQUISITION_CYCLE_START_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_ni_serial_number_acquisition_cycle_start_id;
+
+/** Identifiers for all properties contained in the xgpon_ni_set_onu_state 
+ * group. 
+ */
+typedef enum bcmolt_xgpon_ni_set_onu_state_id
+{
+    BCMOLT_XGPON_NI_SET_ONU_STATE_ID__BEGIN                                                 = 0,
+    BCMOLT_XGPON_NI_SET_ONU_STATE_ID_ONU_STATE                                              = 0,    /**< ONU state. */
+    BCMOLT_XGPON_NI_SET_ONU_STATE_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_ni_set_onu_state_id;
+
+/** Identifiers for all properties contained in the xgpon_ni_set_pon_state 
+ * group. 
+ */
+typedef enum bcmolt_xgpon_ni_set_pon_state_id
+{
+    BCMOLT_XGPON_NI_SET_PON_STATE_ID__BEGIN                                                 = 0,
+    BCMOLT_XGPON_NI_SET_PON_STATE_ID_PON_STATE                                              = 0,    /**< PON state. */
+    BCMOLT_XGPON_NI_SET_PON_STATE_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_ni_set_pon_state_id;
+
+/** Identifiers for all properties contained in the 
+ * xgpon_ni_single_request_standby_pon_monitoring group. 
+ */
+typedef enum bcmolt_xgpon_ni_single_request_standby_pon_monitoring_id
+{
+    BCMOLT_XGPON_NI_SINGLE_REQUEST_STANDBY_PON_MONITORING_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_ni_single_request_standby_pon_monitoring_id;
+
+/** Identifiers for all properties contained in the 
+ * xgpon_ni_standby_pon_monitoring_cycle_completed group. 
+ */
+typedef enum bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_id
+{
+    BCMOLT_XGPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID__BEGIN                        = 0,
+    BCMOLT_XGPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID_NUMBER_OF_DETECTED_DELIMITER  = 0,    /**< number of detected delimiter. */
+    BCMOLT_XGPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID_ENERGY_DETECT_SIGNAL          = 1,    /**< energy detect signal. */
+    BCMOLT_XGPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_id;
+
+/** Identifiers for all properties contained in the xgpon_ni_start_onu_upgrade 
+ * group. 
+ */
+typedef enum bcmolt_xgpon_ni_start_onu_upgrade_id
+{
+    BCMOLT_XGPON_NI_START_ONU_UPGRADE_ID__BEGIN                                             = 0,
+    BCMOLT_XGPON_NI_START_ONU_UPGRADE_ID_LIST_OF_ONU_IDS                                    = 0,    /**< List of ONU IDs. */
+    BCMOLT_XGPON_NI_START_ONU_UPGRADE_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_ni_start_onu_upgrade_id;
+
+/** Identifiers for all properties contained in the xgpon_ni_stat_alarm_cleared 
+ * group. 
+ */
+typedef enum bcmolt_xgpon_ni_stat_alarm_cleared_id
+{
+    BCMOLT_XGPON_NI_STAT_ALARM_CLEARED_ID__BEGIN                                            = 0,
+    BCMOLT_XGPON_NI_STAT_ALARM_CLEARED_ID_STAT                                              = 0,    /**< Statistic ID. */
+    BCMOLT_XGPON_NI_STAT_ALARM_CLEARED_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_ni_stat_alarm_cleared_id;
+
+/** Identifiers for all properties contained in the xgpon_ni_stat_alarm_raised 
+ * group. 
+ */
+typedef enum bcmolt_xgpon_ni_stat_alarm_raised_id
+{
+    BCMOLT_XGPON_NI_STAT_ALARM_RAISED_ID__BEGIN                                             = 0,
+    BCMOLT_XGPON_NI_STAT_ALARM_RAISED_ID_STAT                                               = 0,    /**< Statistic ID. */
+    BCMOLT_XGPON_NI_STAT_ALARM_RAISED_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_ni_stat_alarm_raised_id;
+
+/** Identifiers for all properties contained in the xgpon_ni_stat_cfg group. 
+ */
+typedef enum bcmolt_xgpon_ni_stat_cfg_id
+{
+    BCMOLT_XGPON_NI_STAT_CFG_ID__BEGIN                                                      = 0,
+    BCMOLT_XGPON_NI_STAT_CFG_ID_CFG                                                         = 0,    /**< Configuration. */
+    BCMOLT_XGPON_NI_STAT_CFG_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_ni_stat_cfg_id;
+
+/** Identifiers for all properties contained in the xgpon_ni_stat group. 
+ */
+typedef enum bcmolt_xgpon_ni_stat_id
+{
+    BCMOLT_XGPON_NI_STAT_ID__BEGIN                                                          = 0,
+    BCMOLT_XGPON_NI_STAT_ID_FEC_CODEWORDS                                                   = 0,    /**< Receive FEC codewords. */
+    BCMOLT_XGPON_NI_STAT_ID_BIP32_BYTES                                                     = 1,    /**< Received bytes protected by bip32. */
+    BCMOLT_XGPON_NI_STAT_ID_BIP32_ERRORS                                                    = 2,    /**< Received bip32 errors. */
+    BCMOLT_XGPON_NI_STAT_ID_RX_XGTC_HEADERS                                                 = 3,    /**< Received valid XGTC headers. */
+    BCMOLT_XGPON_NI_STAT_ID_RX_XGTC_CORRECTED                                               = 4,    /**< Received corrected XGTC headers. */
+    BCMOLT_XGPON_NI_STAT_ID_RX_XGTC_UNCORRECTED                                             = 5,    /**< Received uncorrected XGTC headers. */
+    BCMOLT_XGPON_NI_STAT_ID_RX_XGEM                                                         = 6,    /**< Received valid XGEM frames. */
+    BCMOLT_XGPON_NI_STAT_ID_RX_XGEM_DROPPED                                                 = 7,    /**< Received dropped XGEM ID frames. */
+    BCMOLT_XGPON_NI_STAT_ID_RX_XGEM_IDLE                                                    = 8,    /**< Received idle XGEM frames. */
+    BCMOLT_XGPON_NI_STAT_ID_RX_XGEM_CORRECTED                                               = 9,    /**< Received corrected XGEM frames. */
+    BCMOLT_XGPON_NI_STAT_ID_RX_CRC_ERROR                                                    = 10,   /**< Received packets with CRC error. */
+    BCMOLT_XGPON_NI_STAT_ID_RX_FRAGMENT_ERROR                                               = 11,   /**< Received fragment errors. */
+    BCMOLT_XGPON_NI_STAT_ID_RX_PACKETS_DROPPED                                              = 12,   /**< Global dropped packets. */
+    BCMOLT_XGPON_NI_STAT_ID_RX_DROPPED_TOO_SHORT                                            = 13,   /**< Received packets dropped due to length too short. */
+    BCMOLT_XGPON_NI_STAT_ID_RX_DROPPED_TOO_LONG                                             = 14,   /**< Received packet dropped due to length too long. */
+    BCMOLT_XGPON_NI_STAT_ID_RX_KEY_ERROR                                                    = 15,   /**< Received key errors. */
+    BCMOLT_XGPON_NI_STAT_ID_TX_PLOAMS                                                       = 16,   /**< Transmitted Ploams. */
+    BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS_DROPPED                                               = 17,   /**< Received dropped Ploams. */
+    BCMOLT_XGPON_NI_STAT_ID_RX_ALLOCATIONS_VALID                                            = 18,   /**< Received valid allocations. */
+    BCMOLT_XGPON_NI_STAT_ID_RX_ALLOCATIONS_INVALID                                          = 19,   /**< Received invalid allocations. */
+    BCMOLT_XGPON_NI_STAT_ID_RX_ALLOCATIONS_DISABLED                                         = 20,   /**< Received disabled allocations. */
+    BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS                                                       = 21,   /**< Received Ploams. */
+    BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS_NON_IDLE                                              = 22,   /**< Received non idle Ploams. */
+    BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS_ERROR                                                 = 23,   /**< Received error Ploams. */
+    BCMOLT_XGPON_NI_STAT_ID_RX_CPU                                                          = 24,   /**< Received CPU packets. */
+    BCMOLT_XGPON_NI_STAT_ID_RX_OMCI                                                         = 25,   /**< Received OMCI packets. */
+    BCMOLT_XGPON_NI_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR                                       = 26,   /**< Received OMCI packets with CRC errors. */
+    BCMOLT_XGPON_NI_STAT_ID_TX_PACKETS                                                      = 27,   /**< Transmitted packets. */
+    BCMOLT_XGPON_NI_STAT_ID_TX_XGEM                                                         = 28,   /**< Transmitted XGEM fragments. */
+    BCMOLT_XGPON_NI_STAT_ID_TX_CPU                                                          = 29,   /**< Transmitted CPU packets. */
+    BCMOLT_XGPON_NI_STAT_ID_TX_OMCI                                                         = 30,   /**< Transmitted OMCI packets. */
+    BCMOLT_XGPON_NI_STAT_ID_TX_CPU_OMCI_PACKETS_DROPPED                                     = 31,   /**< Transmit packets dropped due to illegal length. */
+    BCMOLT_XGPON_NI_STAT_ID_TX_DROPPED_ILLEGAL_LENGTH                                       = 32,   /**< Transmit packets dropped due to illegal length. */
+    BCMOLT_XGPON_NI_STAT_ID_TX_DROPPED_TPID_MISS                                            = 33,   /**< Transmit packets dropped due to TPID miss. */
+    BCMOLT_XGPON_NI_STAT_ID_TX_DROPPED_VID_MISS                                             = 34,   /**< Transmit packets droped due to VID miss. */
+    BCMOLT_XGPON_NI_STAT_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_ni_stat_id;
+
+/** Identifiers for all properties contained in the 
+ * xgpon_ni_state_change_completed group. 
+ */
+typedef enum bcmolt_xgpon_ni_state_change_completed_id
+{
+    BCMOLT_XGPON_NI_STATE_CHANGE_COMPLETED_ID__BEGIN                                        = 0,
+    BCMOLT_XGPON_NI_STATE_CHANGE_COMPLETED_ID_RESULT                                        = 0,    /**< Result. */
+    BCMOLT_XGPON_NI_STATE_CHANGE_COMPLETED_ID_PREVIOUS_STATE                                = 1,    /**< Previous state. */
+    BCMOLT_XGPON_NI_STATE_CHANGE_COMPLETED_ID_NEW_STATE                                     = 2,    /**< new state. */
+    BCMOLT_XGPON_NI_STATE_CHANGE_COMPLETED_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_ni_state_change_completed_id;
+
+/** Identifiers for all properties contained in the 
+ * xgpon_ni_tod_request_completed group. 
+ */
+typedef enum bcmolt_xgpon_ni_tod_request_completed_id
+{
+    BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID__BEGIN                                         = 0,
+    BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_TOD_STRING                                     = 0,    /**< tod_string. */
+    BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_SFC                                            = 1,    /**< sfc. */
+    BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_RTC_OFFSET_SEC                                 = 2,    /**< rtc_offset_sec. */
+    BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_RTC_OFFSET_NSEC                                = 3,    /**< rtc_offset_nsec. */
+    BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_STATUS                                         = 4,    /**< status. */
+    BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_ni_tod_request_completed_id;
+
+/** Identifiers for all properties contained in the xgpon_ni_tod_request group. 
+ */
+typedef enum bcmolt_xgpon_ni_tod_request_id
+{
+    BCMOLT_XGPON_NI_TOD_REQUEST_ID__NUM_OF              /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_ni_tod_request_id;
+
+/** Identifiers for all properties contained in the 
+ * xgpon_onu_adjust_tx_wavelength group. 
+ */
+typedef enum bcmolt_xgpon_onu_adjust_tx_wavelength_id
+{
+    BCMOLT_XGPON_ONU_ADJUST_TX_WAVELENGTH_ID__BEGIN                                         = 0,
+    BCMOLT_XGPON_ONU_ADJUST_TX_WAVELENGTH_ID_FREQUENCY_ADJUSTMENT_DIRECTION                 = 0,    /**< Frequency adjustment direction. */
+    BCMOLT_XGPON_ONU_ADJUST_TX_WAVELENGTH_ID_FREQUENCY_ADJUSTMENT_SIZE                      = 1,    /**< Frequency adjustment size. */
+    BCMOLT_XGPON_ONU_ADJUST_TX_WAVELENGTH_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_adjust_tx_wavelength_id;
+
+/** Identifiers for all properties contained in the xgpon_onu_auto_cfg group. 
+ */
+typedef enum bcmolt_xgpon_onu_auto_cfg_id
+{
+    BCMOLT_XGPON_ONU_AUTO_CFG_ID__BEGIN                                                     = 0,
+    BCMOLT_XGPON_ONU_AUTO_CFG_ID_DFI                                                        = 0,    /**< Receive Dying-Gasp of ONUi. */
+    BCMOLT_XGPON_ONU_AUTO_CFG_ID_DGI                                                        = 1,    /**< Receive Dying-Gasp of ONUi. */
+    BCMOLT_XGPON_ONU_AUTO_CFG_ID_DOWI                                                       = 2,    /**< Drift of Window of ONUi. */
+    BCMOLT_XGPON_ONU_AUTO_CFG_ID_INVALID_DBRU_REPORT                                        = 3,    /**< Invalid DBRu Report. */
+    BCMOLT_XGPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_COMPLETED                                     = 4,    /**< Key Exchange Completed. */
+    BCMOLT_XGPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_CYCLE_SKIPPED                                 = 5,    /**< Key Exchange Cycle Skipped. */
+    BCMOLT_XGPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_KEY_MISMATCH                                  = 6,    /**< Key Exchange Key Mismatch. */
+    BCMOLT_XGPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_KEY_REQUEST_TIMEOUT                           = 7,    /**< Key Exchange Key Request Timeout. */
+    BCMOLT_XGPON_ONU_AUTO_CFG_ID_LOOCI                                                      = 8,    /**< LOOCi. */
+    BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_ACTIVATION_COMPLETED                                   = 9,    /**< ONU Activation Completed. */
+    BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_ALARM                                                  = 10,   /**< ONU Alarm. */
+    BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_DEACTIVATION_COMPLETED                                 = 11,   /**< ONU Deactivation Completed. */
+    BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_DISABLE_COMPLETED                                      = 12,   /**< ONU Disable Completed. */
+    BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_ENABLE_COMPLETED                                       = 13,   /**< ONU Enable Completed. */
+    BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_TUNING_IN_COMPLETED                                    = 14,   /**< ONU Tuning in completed. */
+    BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_TUNING_OUT_COMPLETED                                   = 15,   /**< ONU Tuning out completed. */
+    BCMOLT_XGPON_ONU_AUTO_CFG_ID_OPTICAL_REFLECTION                                         = 16,   /**< Optical Reflection. */
+    BCMOLT_XGPON_ONU_AUTO_CFG_ID_POSSIBLE_DRIFT                                             = 17,   /**< Possible Drift. */
+    BCMOLT_XGPON_ONU_AUTO_CFG_ID_POWER_CONSUMPTION_REPORT                                   = 18,   /**< Power consumption report. */
+    BCMOLT_XGPON_ONU_AUTO_CFG_ID_POWER_LEVEL_REPORT                                         = 19,   /**< Power level report. */
+    BCMOLT_XGPON_ONU_AUTO_CFG_ID_POWER_MANAGEMENT_STATE_CHANGE                              = 20,   /**< Power Management State Change. */
+    BCMOLT_XGPON_ONU_AUTO_CFG_ID_PQSI                                                       = 21,   /**< ploam queue status. */
+    BCMOLT_XGPON_ONU_AUTO_CFG_ID_RANGING_COMPLETED                                          = 22,   /**< Ranging Completed. */
+    BCMOLT_XGPON_ONU_AUTO_CFG_ID_REGISTRATION_ID                                            = 23,   /**< Registration ID. */
+    BCMOLT_XGPON_ONU_AUTO_CFG_ID_RSSI_MEASUREMENT_COMPLETED                                 = 24,   /**< RSSI Measurement Completed. */
+    BCMOLT_XGPON_ONU_AUTO_CFG_ID_SDI                                                        = 25,   /**< Signal Degraded of ONUi. */
+    BCMOLT_XGPON_ONU_AUTO_CFG_ID_SECURE_MUTUAL_AUTHENTICATION_FAILURE                       = 26,   /**< secure mutual authentication failure. */
+    BCMOLT_XGPON_ONU_AUTO_CFG_ID_SFI                                                        = 27,   /**< Signal Fail of ONUi. */
+    BCMOLT_XGPON_ONU_AUTO_CFG_ID_STAT_ALARM_CLEARED                                         = 28,   /**< Stat Alarm Cleared. */
+    BCMOLT_XGPON_ONU_AUTO_CFG_ID_STAT_ALARM_RAISED                                          = 29,   /**< Stat Alarm Raised. */
+    BCMOLT_XGPON_ONU_AUTO_CFG_ID_SUFI                                                       = 30,   /**< SUFi. */
+    BCMOLT_XGPON_ONU_AUTO_CFG_ID_TIWI                                                       = 31,   /**< Transmission Interference Warning. */
+    BCMOLT_XGPON_ONU_AUTO_CFG_ID_TUNING_RESPONSE                                            = 32,   /**< Tuning response. */
+    BCMOLT_XGPON_ONU_AUTO_CFG_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_auto_cfg_id;
+
+/** Identifiers for all properties contained in the xgpon_onu_cfg group. 
+ */
+typedef enum bcmolt_xgpon_onu_cfg_id
+{
+    BCMOLT_XGPON_ONU_CFG_ID__BEGIN                                                          = 0,
+    BCMOLT_XGPON_ONU_CFG_ID_ONU_STATE                                                       = 0,    /**< onu state. */
+    BCMOLT_XGPON_ONU_CFG_ID_ONU_OLD_STATE                                                   = 1,    /**< onu old state. */
+    BCMOLT_XGPON_ONU_CFG_ID_ALARM_STATE                                                     = 2,    /**< alarm state. */
+    BCMOLT_XGPON_ONU_CFG_ID_REGISTRATION_ENCRYPTION_KEYS                                    = 3,    /**< registration encryption keys. */
+    BCMOLT_XGPON_ONU_CFG_ID_CURRENT_ENCRYPTION_KEY                                          = 4,    /**< current encryption key. */
+    BCMOLT_XGPON_ONU_CFG_ID_SERIAL_NUMBER                                                   = 5,    /**< serial number. */
+    BCMOLT_XGPON_ONU_CFG_ID_REGISTRATION_ID                                                 = 6,    /**< registration id. */
+    BCMOLT_XGPON_ONU_CFG_ID_REGISTRATION_ID_AUTO_LEARNING                                   = 7,    /**< Registration ID auto learning. */
+    BCMOLT_XGPON_ONU_CFG_ID_RANGING_BURST_PROFILE                                           = 8,    /**< ranging burst profile. */
+    BCMOLT_XGPON_ONU_CFG_ID_DATA_BURST_PROFILE                                              = 9,    /**< data burst profile. */
+    BCMOLT_XGPON_ONU_CFG_ID_RANGING_TIME                                                    = 10,   /**< ranging time. */
+    BCMOLT_XGPON_ONU_CFG_ID_DISABLED_AFTER_DISCOVERY                                        = 11,   /**< Disabled after Discovery. */
+    BCMOLT_XGPON_ONU_CFG_ID_DEACTIVATION_REASON                                             = 12,   /**< deactivation reason. */
+    BCMOLT_XGPON_ONU_CFG_ID_ALL_GEM_PORTS                                                   = 13,   /**< all GEM ports. */
+    BCMOLT_XGPON_ONU_CFG_ID_ALL_ALLOCS                                                      = 14,   /**< all allocs. */
+    BCMOLT_XGPON_ONU_CFG_ID_EXTENDED_GUARD_TIME                                             = 15,   /**< Extended Guard Time. */
+    BCMOLT_XGPON_ONU_CFG_ID_US_LINE_RATE                                                    = 16,   /**< US line rate. */
+    BCMOLT_XGPON_ONU_CFG_ID_CALIBRATION_RECORD                                              = 17,   /**< Calibration record. */
+    BCMOLT_XGPON_ONU_CFG_ID_TUNING_GRANULARITY                                              = 18,   /**< Tuning granularity. */
+    BCMOLT_XGPON_ONU_CFG_ID_STEP_TUNING_TIME                                                = 19,   /**< Step tuning time. */
+    BCMOLT_XGPON_ONU_CFG_ID_POWER_LEVELLING_CAPABILITIES                                    = 20,   /**< Power levelling capabilities. */
+    BCMOLT_XGPON_ONU_CFG_ID_REQUEST_REGISTRATION_STATUS                                     = 21,   /**< Request registration status. */
+    BCMOLT_XGPON_ONU_CFG_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_cfg_id;
+
+/** Identifiers for all properties contained in the 
+ * xgpon_onu_change_power_levelling group. 
+ */
+typedef enum bcmolt_xgpon_onu_change_power_levelling_id
+{
+    BCMOLT_XGPON_ONU_CHANGE_POWER_LEVELLING_ID__BEGIN                                       = 0,
+    BCMOLT_XGPON_ONU_CHANGE_POWER_LEVELLING_ID_CONTROL                                      = 0,    /**< control. */
+    BCMOLT_XGPON_ONU_CHANGE_POWER_LEVELLING_ID_ATTENUATION                                  = 1,    /**< Attenuation. */
+    BCMOLT_XGPON_ONU_CHANGE_POWER_LEVELLING_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_change_power_levelling_id;
+
+/** Identifiers for all properties contained in the xgpon_onu_cpu_packet group. 
+ */
+typedef enum bcmolt_xgpon_onu_cpu_packet_id
+{
+    BCMOLT_XGPON_ONU_CPU_PACKET_ID__BEGIN                                                   = 0,
+    BCMOLT_XGPON_ONU_CPU_PACKET_ID_PORT_ID                                                  = 0,    /**< port id. */
+    BCMOLT_XGPON_ONU_CPU_PACKET_ID_CRC_OK                                                   = 1,    /**< crc ok. */
+    BCMOLT_XGPON_ONU_CPU_PACKET_ID_PACKET_SIZE                                              = 2,    /**< packet size. */
+    BCMOLT_XGPON_ONU_CPU_PACKET_ID_BUFFER                                                   = 3,    /**< buffer. */
+    BCMOLT_XGPON_ONU_CPU_PACKET_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_cpu_packet_id;
+
+/** Identifiers for all properties contained in the xgpon_onu_cpu_packets group. 
+ */
+typedef enum bcmolt_xgpon_onu_cpu_packets_id
+{
+    BCMOLT_XGPON_ONU_CPU_PACKETS_ID__BEGIN                                                  = 0,
+    BCMOLT_XGPON_ONU_CPU_PACKETS_ID_PACKET_TYPE                                             = 0,    /**< packet type. */
+    BCMOLT_XGPON_ONU_CPU_PACKETS_ID_CALC_CRC                                                = 1,    /**< calc crc. */
+    BCMOLT_XGPON_ONU_CPU_PACKETS_ID_NUMBER_OF_PACKETS                                       = 2,    /**< number of packets. */
+    BCMOLT_XGPON_ONU_CPU_PACKETS_ID_PACKET_SIZE                                             = 3,    /**< Single packet size. */
+    BCMOLT_XGPON_ONU_CPU_PACKETS_ID_BUFFER                                                  = 4,    /**< buffer. */
+    BCMOLT_XGPON_ONU_CPU_PACKETS_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_cpu_packets_id;
+
+/** Identifiers for all properties contained in the xgpon_onu_dfi group. 
+ */
+typedef enum bcmolt_xgpon_onu_dfi_id
+{
+    BCMOLT_XGPON_ONU_DFI_ID__BEGIN                                                          = 0,
+    BCMOLT_XGPON_ONU_DFI_ID_ALARM_STATUS                                                    = 0,    /**< alarm status. */
+    BCMOLT_XGPON_ONU_DFI_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_dfi_id;
+
+/** Identifiers for all properties contained in the xgpon_onu_dgi group. 
+ */
+typedef enum bcmolt_xgpon_onu_dgi_id
+{
+    BCMOLT_XGPON_ONU_DGI_ID__BEGIN                                                          = 0,
+    BCMOLT_XGPON_ONU_DGI_ID_ALARM_STATUS                                                    = 0,    /**< alarm status. */
+    BCMOLT_XGPON_ONU_DGI_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_dgi_id;
+
+/** Identifiers for all properties contained in the xgpon_onu_dowi group. 
+ */
+typedef enum bcmolt_xgpon_onu_dowi_id
+{
+    BCMOLT_XGPON_ONU_DOWI_ID__BEGIN                                                         = 0,
+    BCMOLT_XGPON_ONU_DOWI_ID_ALARM_STATUS                                                   = 0,    /**< Alarm status. */
+    BCMOLT_XGPON_ONU_DOWI_ID_DRIFT_VALUE                                                    = 1,    /**< Drift value. */
+    BCMOLT_XGPON_ONU_DOWI_ID_NEW_EQD                                                        = 2,    /**< New EQD. */
+    BCMOLT_XGPON_ONU_DOWI_ID__NUM_OF                    /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_dowi_id;
+
+/** Identifiers for all properties contained in the 
+ * xgpon_onu_get_power_consumption group. 
+ */
+typedef enum bcmolt_xgpon_onu_get_power_consumption_id
+{
+    BCMOLT_XGPON_ONU_GET_POWER_CONSUMPTION_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_get_power_consumption_id;
+
+/** Identifiers for all properties contained in the xgpon_onu_get_power_level 
+ * group. 
+ */
+typedef enum bcmolt_xgpon_onu_get_power_level_id
+{
+    BCMOLT_XGPON_ONU_GET_POWER_LEVEL_ID__NUM_OF         /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_get_power_level_id;
+
+/** Identifiers for all properties contained in the 
+ * xgpon_onu_invalid_dbru_report group. 
+ */
+typedef enum bcmolt_xgpon_onu_invalid_dbru_report_id
+{
+    BCMOLT_XGPON_ONU_INVALID_DBRU_REPORT_ID__BEGIN                                          = 0,
+    BCMOLT_XGPON_ONU_INVALID_DBRU_REPORT_ID_ALLOC_ID                                        = 0,    /**< Alloc-ID. */
+    BCMOLT_XGPON_ONU_INVALID_DBRU_REPORT_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_invalid_dbru_report_id;
+
+/** Identifiers for all properties contained in the 
+ * xgpon_onu_key_exchange_completed group. 
+ */
+typedef enum bcmolt_xgpon_onu_key_exchange_completed_id
+{
+    BCMOLT_XGPON_ONU_KEY_EXCHANGE_COMPLETED_ID__BEGIN                                       = 0,
+    BCMOLT_XGPON_ONU_KEY_EXCHANGE_COMPLETED_ID_NEW_KEY                                      = 0,    /**< new key. */
+    BCMOLT_XGPON_ONU_KEY_EXCHANGE_COMPLETED_ID__NUM_OF      /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_key_exchange_completed_id;
+
+/** Identifiers for all properties contained in the 
+ * xgpon_onu_key_exchange_cycle_skipped group. 
+ */
+typedef enum bcmolt_xgpon_onu_key_exchange_cycle_skipped_id
+{
+    BCMOLT_XGPON_ONU_KEY_EXCHANGE_CYCLE_SKIPPED_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_key_exchange_cycle_skipped_id;
+
+/** Identifiers for all properties contained in the 
+ * xgpon_onu_key_exchange_key_mismatch group. 
+ */
+typedef enum bcmolt_xgpon_onu_key_exchange_key_mismatch_id
+{
+    BCMOLT_XGPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID__BEGIN                                    = 0,
+    BCMOLT_XGPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID_EXPECTED_KEY                              = 0,    /**< expected key. */
+    BCMOLT_XGPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID_RECEIVED_KEY                              = 1,    /**< received key. */
+    BCMOLT_XGPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID__NUM_OF           /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_key_exchange_key_mismatch_id;
+
+/** Identifiers for all properties contained in the 
+ * xgpon_onu_key_exchange_key_request_timeout group. 
+ */
+typedef enum bcmolt_xgpon_onu_key_exchange_key_request_timeout_id
+{
+    BCMOLT_XGPON_ONU_KEY_EXCHANGE_KEY_REQUEST_TIMEOUT_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_key_exchange_key_request_timeout_id;
+
+/** Identifiers for all properties contained in the xgpon_onu_key group. 
+ */
+typedef enum bcmolt_xgpon_onu_key_id
+{
+    BCMOLT_XGPON_ONU_KEY_ID__BEGIN                                                          = 0,
+    BCMOLT_XGPON_ONU_KEY_ID_PON_NI                                                          = 0,    /**< PON network interface. */
+    BCMOLT_XGPON_ONU_KEY_ID_ONU_ID                                                          = 1,    /**< onu id. */
+    BCMOLT_XGPON_ONU_KEY_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_key_id;
+
+/** Identifiers for all properties contained in the xgpon_onu_looci group. 
+ */
+typedef enum bcmolt_xgpon_onu_looci_id
+{
+    BCMOLT_XGPON_ONU_LOOCI_ID__BEGIN                                                        = 0,
+    BCMOLT_XGPON_ONU_LOOCI_ID_ALARM_STATUS                                                  = 0,    /**< alarm status. */
+    BCMOLT_XGPON_ONU_LOOCI_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_looci_id;
+
+/** Identifiers for all properties contained in the xgpon_onu_omci_packet group. 
+ */
+typedef enum bcmolt_xgpon_onu_omci_packet_id
+{
+    BCMOLT_XGPON_ONU_OMCI_PACKET_ID__BEGIN                                                  = 0,
+    BCMOLT_XGPON_ONU_OMCI_PACKET_ID_PORT_ID                                                 = 0,    /**< port id. */
+    BCMOLT_XGPON_ONU_OMCI_PACKET_ID_CRC_OK                                                  = 1,    /**< crc ok. */
+    BCMOLT_XGPON_ONU_OMCI_PACKET_ID_PACKET_SIZE                                             = 2,    /**< packet size. */
+    BCMOLT_XGPON_ONU_OMCI_PACKET_ID_BUFFER                                                  = 3,    /**< buffer. */
+    BCMOLT_XGPON_ONU_OMCI_PACKET_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_omci_packet_id;
+
+/** Identifiers for all properties contained in the 
+ * xgpon_onu_onu_activation_completed group. 
+ */
+typedef enum bcmolt_xgpon_onu_onu_activation_completed_id
+{
+    BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID__BEGIN                                     = 0,
+    BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID_STATUS                                     = 0,    /**< status. */
+    BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID_FAIL_REASON                                = 1,    /**< fail reason. */
+    BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID_REGISTRATION_ID                            = 2,    /**< registration id. */
+    BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID_REGISTRATION_ENCRYPTION_KEYS               = 3,    /**< registration encryption keys. */
+    BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_onu_activation_completed_id;
+
+/** Identifiers for all properties contained in the xgpon_onu_onu_alarm group. 
+ */
+typedef enum bcmolt_xgpon_onu_onu_alarm_id
+{
+    BCMOLT_XGPON_ONU_ONU_ALARM_ID__BEGIN                                                    = 0,
+    BCMOLT_XGPON_ONU_ONU_ALARM_ID_ONU_ALARM                                                 = 0,    /**< onu alarm. */
+    BCMOLT_XGPON_ONU_ONU_ALARM_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_onu_alarm_id;
+
+/** Identifiers for all properties contained in the 
+ * xgpon_onu_onu_deactivation_completed group. 
+ */
+typedef enum bcmolt_xgpon_onu_onu_deactivation_completed_id
+{
+    BCMOLT_XGPON_ONU_ONU_DEACTIVATION_COMPLETED_ID__BEGIN                                   = 0,
+    BCMOLT_XGPON_ONU_ONU_DEACTIVATION_COMPLETED_ID_STATUS                                   = 0,    /**< Status. */
+    BCMOLT_XGPON_ONU_ONU_DEACTIVATION_COMPLETED_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_onu_deactivation_completed_id;
+
+/** Identifiers for all properties contained in the 
+ * xgpon_onu_onu_disable_completed group. 
+ */
+typedef enum bcmolt_xgpon_onu_onu_disable_completed_id
+{
+    BCMOLT_XGPON_ONU_ONU_DISABLE_COMPLETED_ID__BEGIN                                        = 0,
+    BCMOLT_XGPON_ONU_ONU_DISABLE_COMPLETED_ID_SERIAL_NUMBER                                 = 0,    /**< serial number. */
+    BCMOLT_XGPON_ONU_ONU_DISABLE_COMPLETED_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_onu_disable_completed_id;
+
+/** Identifiers for all properties contained in the 
+ * xgpon_onu_onu_enable_completed group. 
+ */
+typedef enum bcmolt_xgpon_onu_onu_enable_completed_id
+{
+    BCMOLT_XGPON_ONU_ONU_ENABLE_COMPLETED_ID__BEGIN                                         = 0,
+    BCMOLT_XGPON_ONU_ONU_ENABLE_COMPLETED_ID_SERIAL_NUMBER                                  = 0,    /**< serial number. */
+    BCMOLT_XGPON_ONU_ONU_ENABLE_COMPLETED_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_onu_enable_completed_id;
+
+/** Identifiers for all properties contained in the 
+ * xgpon_onu_onu_tuning_in_completed group. 
+ */
+typedef enum bcmolt_xgpon_onu_onu_tuning_in_completed_id
+{
+    BCMOLT_XGPON_ONU_ONU_TUNING_IN_COMPLETED_ID__BEGIN                                      = 0,
+    BCMOLT_XGPON_ONU_ONU_TUNING_IN_COMPLETED_ID_RESULT                                      = 0,    /**< result. */
+    BCMOLT_XGPON_ONU_ONU_TUNING_IN_COMPLETED_ID_FAIL_REASON                                 = 1,    /**< fail reason. */
+    BCMOLT_XGPON_ONU_ONU_TUNING_IN_COMPLETED_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_onu_tuning_in_completed_id;
+
+/** Identifiers for all properties contained in the xgpon_onu_onu_tuning_in 
+ * group. 
+ */
+typedef enum bcmolt_xgpon_onu_onu_tuning_in_id
+{
+    BCMOLT_XGPON_ONU_ONU_TUNING_IN_ID__NUM_OF           /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_onu_tuning_in_id;
+
+/** Identifiers for all properties contained in the 
+ * xgpon_onu_onu_tuning_out_completed group. 
+ */
+typedef enum bcmolt_xgpon_onu_onu_tuning_out_completed_id
+{
+    BCMOLT_XGPON_ONU_ONU_TUNING_OUT_COMPLETED_ID__BEGIN                                     = 0,
+    BCMOLT_XGPON_ONU_ONU_TUNING_OUT_COMPLETED_ID_RESULT                                     = 0,    /**< result. */
+    BCMOLT_XGPON_ONU_ONU_TUNING_OUT_COMPLETED_ID_FAIL_REASON                                = 1,    /**< fail reason. */
+    BCMOLT_XGPON_ONU_ONU_TUNING_OUT_COMPLETED_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_onu_tuning_out_completed_id;
+
+/** Identifiers for all properties contained in the xgpon_onu_onu_tuning_out 
+ * group. 
+ */
+typedef enum bcmolt_xgpon_onu_onu_tuning_out_id
+{
+    BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID__BEGIN                                               = 0,
+    BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_TARGET_DS_PON_ID                                     = 0,    /**< target ds pon id. */
+    BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_TARGET_US_PON_ID                                     = 1,    /**< target us pon id. */
+    BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_TIME_TO_SWITCH                                       = 2,    /**< time to switch. */
+    BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_ROLLBACK                                             = 3,    /**< rollback. */
+    BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_STATUS                                               = 4,    /**< status. */
+    BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID__NUM_OF      /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_onu_tuning_out_id;
+
+/** Identifiers for all properties contained in the xgpon_onu_optical_reflection 
+ * group. 
+ */
+typedef enum bcmolt_xgpon_onu_optical_reflection_id
+{
+    BCMOLT_XGPON_ONU_OPTICAL_REFLECTION_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_optical_reflection_id;
+
+/** Identifiers for all properties contained in the xgpon_onu_ploam_packet 
+ * group. 
+ */
+typedef enum bcmolt_xgpon_onu_ploam_packet_id
+{
+    BCMOLT_XGPON_ONU_PLOAM_PACKET_ID__BEGIN                                                 = 0,
+    BCMOLT_XGPON_ONU_PLOAM_PACKET_ID_DEFAULT_KEY                                            = 0,    /**< default key. */
+    BCMOLT_XGPON_ONU_PLOAM_PACKET_ID_PLOAM                                                  = 1,    /**< ploam. */
+    BCMOLT_XGPON_ONU_PLOAM_PACKET_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_ploam_packet_id;
+
+/** Identifiers for all properties contained in the xgpon_onu_possible_drift 
+ * group. 
+ */
+typedef enum bcmolt_xgpon_onu_possible_drift_id
+{
+    BCMOLT_XGPON_ONU_POSSIBLE_DRIFT_ID__BEGIN                                               = 0,
+    BCMOLT_XGPON_ONU_POSSIBLE_DRIFT_ID_ALARM_STATUS                                         = 0,    /**< Alarm Status. */
+    BCMOLT_XGPON_ONU_POSSIBLE_DRIFT_ID_ESTIMATED_DRIFT                                      = 1,    /**< Estimated Drift. */
+    BCMOLT_XGPON_ONU_POSSIBLE_DRIFT_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_possible_drift_id;
+
+/** Identifiers for all properties contained in the 
+ * xgpon_onu_power_consumption_report group. 
+ */
+typedef enum bcmolt_xgpon_onu_power_consumption_report_id
+{
+    BCMOLT_XGPON_ONU_POWER_CONSUMPTION_REPORT_ID__BEGIN                                     = 0,
+    BCMOLT_XGPON_ONU_POWER_CONSUMPTION_REPORT_ID_POWER_CONSUMPTION_REPORT                   = 0,    /**< power consumption report. */
+    BCMOLT_XGPON_ONU_POWER_CONSUMPTION_REPORT_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_power_consumption_report_id;
+
+/** Identifiers for all properties contained in the xgpon_onu_power_level_report 
+ * group. 
+ */
+typedef enum bcmolt_xgpon_onu_power_level_report_id
+{
+    BCMOLT_XGPON_ONU_POWER_LEVEL_REPORT_ID__BEGIN                                           = 0,
+    BCMOLT_XGPON_ONU_POWER_LEVEL_REPORT_ID_ATTENUATION                                      = 0,    /**< Attenuation. */
+    BCMOLT_XGPON_ONU_POWER_LEVEL_REPORT_ID_POWER_LEVELLING_CAPABILITY                       = 1,    /**< Power levelling capability. */
+    BCMOLT_XGPON_ONU_POWER_LEVEL_REPORT_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_power_level_report_id;
+
+/** Identifiers for all properties contained in the 
+ * xgpon_onu_power_management_state_change group. 
+ */
+typedef enum bcmolt_xgpon_onu_power_management_state_change_id
+{
+    BCMOLT_XGPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID__BEGIN                                = 0,
+    BCMOLT_XGPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_OLD_STATE                             = 0,    /**< Old State. */
+    BCMOLT_XGPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_NEW_STATE                             = 1,    /**< New State. */
+    BCMOLT_XGPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_REASON                                = 2,    /**< Reason. */
+    BCMOLT_XGPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_power_management_state_change_id;
+
+/** Identifiers for all properties contained in the xgpon_onu_pqsi group. 
+ */
+typedef enum bcmolt_xgpon_onu_pqsi_id
+{
+    BCMOLT_XGPON_ONU_PQSI_ID__BEGIN                                                         = 0,
+    BCMOLT_XGPON_ONU_PQSI_ID_ALARM_STATUS                                                   = 0,    /**< alarm status. */
+    BCMOLT_XGPON_ONU_PQSI_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_pqsi_id;
+
+/** Identifiers for all properties contained in the xgpon_onu_ranging_completed 
+ * group. 
+ */
+typedef enum bcmolt_xgpon_onu_ranging_completed_id
+{
+    BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID__BEGIN                                            = 0,
+    BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_STATUS                                            = 0,    /**< status. */
+    BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_FAIL_REASON                                       = 1,    /**< fail reason. */
+    BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_EQD                                               = 2,    /**< EQD. */
+    BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_NUMBER_OF_PLOAMS                                  = 3,    /**< number of ploams. */
+    BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_POWER_LEVEL                                       = 4,    /**< power level. */
+    BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_ranging_completed_id;
+
+/** Identifiers for all properties contained in the xgpon_onu_registration_id 
+ * group. 
+ */
+typedef enum bcmolt_xgpon_onu_registration_id_id
+{
+    BCMOLT_XGPON_ONU_REGISTRATION_ID_ID__BEGIN                                              = 0,
+    BCMOLT_XGPON_ONU_REGISTRATION_ID_ID_REGISTRATION_ID                                     = 0,    /**< Registration ID. */
+    BCMOLT_XGPON_ONU_REGISTRATION_ID_ID_REQUEST_REGISTRATION_STATUS                         = 1,    /**< request registration status. */
+    BCMOLT_XGPON_ONU_REGISTRATION_ID_ID_REQUEST_REGISTRATION_FAIL_REASON                    = 2,    /**< request registration fail reason. */
+    BCMOLT_XGPON_ONU_REGISTRATION_ID_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_registration_id_id;
+
+/** Identifiers for all properties contained in the 
+ * xgpon_onu_request_registration group. 
+ */
+typedef enum bcmolt_xgpon_onu_request_registration_id
+{
+    BCMOLT_XGPON_ONU_REQUEST_REGISTRATION_ID__BEGIN                                         = 0,
+    BCMOLT_XGPON_ONU_REQUEST_REGISTRATION_ID_SMA_FLAG                                       = 0,    /**< SMA flag. */
+    BCMOLT_XGPON_ONU_REQUEST_REGISTRATION_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_request_registration_id;
+
+/** Identifiers for all properties contained in the 
+ * xgpon_onu_rssi_measurement_completed group. 
+ */
+typedef enum bcmolt_xgpon_onu_rssi_measurement_completed_id
+{
+    BCMOLT_XGPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID__BEGIN                                   = 0,
+    BCMOLT_XGPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID_STATUS                                   = 0,    /**< status. */
+    BCMOLT_XGPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID_FAIL_REASON                              = 1,    /**< fail reason. */
+    BCMOLT_XGPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_rssi_measurement_completed_id;
+
+/** Identifiers for all properties contained in the xgpon_onu_rssi_measurement 
+ * group. 
+ */
+typedef enum bcmolt_xgpon_onu_rssi_measurement_id
+{
+    BCMOLT_XGPON_ONU_RSSI_MEASUREMENT_ID__NUM_OF            /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_rssi_measurement_id;
+
+/** Identifiers for all properties contained in the xgpon_onu_sdi group. 
+ */
+typedef enum bcmolt_xgpon_onu_sdi_id
+{
+    BCMOLT_XGPON_ONU_SDI_ID__BEGIN                                                          = 0,
+    BCMOLT_XGPON_ONU_SDI_ID_ALARM_STATUS                                                    = 0,    /**< alarm status. */
+    BCMOLT_XGPON_ONU_SDI_ID_BER                                                             = 1,    /**< BER. */
+    BCMOLT_XGPON_ONU_SDI_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_sdi_id;
+
+/** Identifiers for all properties contained in the 
+ * xgpon_onu_secure_mutual_authentication_failure group. 
+ */
+typedef enum bcmolt_xgpon_onu_secure_mutual_authentication_failure_id
+{
+    BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_FAILURE_ID__BEGIN                         = 0,
+    BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_FAILURE_ID_STATUS                         = 0,    /**< status. */
+    BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_FAILURE_ID_FAIL_REASON                    = 1,    /**< secure mutual authentication fail reason. */
+    BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_FAILURE_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_secure_mutual_authentication_failure_id;
+
+/** Identifiers for all properties contained in the 
+ * xgpon_onu_secure_mutual_authentication group. 
+ */
+typedef enum bcmolt_xgpon_onu_secure_mutual_authentication_id
+{
+    BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_ID__BEGIN                                 = 0,
+    BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_ID_MASTER_KEY                             = 0,    /**< master key. */
+    BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_ID_BUFFER                                 = 1,    /**< OMCI data buffer. */
+    BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_ID_MIC                                    = 2,    /**< mic. */
+    BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_secure_mutual_authentication_id;
+
+/** Identifiers for all properties contained in the xgpon_onu_set_onu_state 
+ * group. 
+ */
+typedef enum bcmolt_xgpon_onu_set_onu_state_id
+{
+    BCMOLT_XGPON_ONU_SET_ONU_STATE_ID__BEGIN                                                = 0,
+    BCMOLT_XGPON_ONU_SET_ONU_STATE_ID_ONU_STATE                                             = 0,    /**< ONU state. */
+    BCMOLT_XGPON_ONU_SET_ONU_STATE_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_set_onu_state_id;
+
+/** Identifiers for all properties contained in the xgpon_onu_sfi group. 
+ */
+typedef enum bcmolt_xgpon_onu_sfi_id
+{
+    BCMOLT_XGPON_ONU_SFI_ID__BEGIN                                                          = 0,
+    BCMOLT_XGPON_ONU_SFI_ID_ALARM_STATUS                                                    = 0,    /**< alarm status. */
+    BCMOLT_XGPON_ONU_SFI_ID_BER                                                             = 1,    /**< BER. */
+    BCMOLT_XGPON_ONU_SFI_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_sfi_id;
+
+/** Identifiers for all properties contained in the xgpon_onu_stat_alarm_cleared 
+ * group. 
+ */
+typedef enum bcmolt_xgpon_onu_stat_alarm_cleared_id
+{
+    BCMOLT_XGPON_ONU_STAT_ALARM_CLEARED_ID__BEGIN                                           = 0,
+    BCMOLT_XGPON_ONU_STAT_ALARM_CLEARED_ID_STAT                                             = 0,    /**< Statistic ID. */
+    BCMOLT_XGPON_ONU_STAT_ALARM_CLEARED_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_stat_alarm_cleared_id;
+
+/** Identifiers for all properties contained in the xgpon_onu_stat_alarm_raised 
+ * group. 
+ */
+typedef enum bcmolt_xgpon_onu_stat_alarm_raised_id
+{
+    BCMOLT_XGPON_ONU_STAT_ALARM_RAISED_ID__BEGIN                                            = 0,
+    BCMOLT_XGPON_ONU_STAT_ALARM_RAISED_ID_STAT                                              = 0,    /**< Statistic ID. */
+    BCMOLT_XGPON_ONU_STAT_ALARM_RAISED_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_stat_alarm_raised_id;
+
+/** Identifiers for all properties contained in the xgpon_onu_stat_cfg group. 
+ */
+typedef enum bcmolt_xgpon_onu_stat_cfg_id
+{
+    BCMOLT_XGPON_ONU_STAT_CFG_ID__BEGIN                                                     = 0,
+    BCMOLT_XGPON_ONU_STAT_CFG_ID_CFG                                                        = 0,    /**< Configuration. */
+    BCMOLT_XGPON_ONU_STAT_CFG_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_stat_cfg_id;
+
+/** Identifiers for all properties contained in the xgpon_onu_stat group. 
+ */
+typedef enum bcmolt_xgpon_onu_stat_id
+{
+    BCMOLT_XGPON_ONU_STAT_ID__BEGIN                                                         = 0,
+    BCMOLT_XGPON_ONU_STAT_ID_POSITIVE_DRIFT                                                 = 0,    /**< positive drift. */
+    BCMOLT_XGPON_ONU_STAT_ID_NEGATIVE_DRIFT                                                 = 1,    /**< negative drift. */
+    BCMOLT_XGPON_ONU_STAT_ID_DELIMITER_MISS_DETECTION                                       = 2,    /**< delimiter miss detection. */
+    BCMOLT_XGPON_ONU_STAT_ID_BIP32_ERRORS                                                   = 3,    /**< bip32 errors. */
+    BCMOLT_XGPON_ONU_STAT_ID_RX_WORDS                                                       = 4,    /**< received words. */
+    BCMOLT_XGPON_ONU_STAT_ID_FEC_CORRECTED_SYMBOLS                                          = 5,    /**< fec corrected symbols. */
+    BCMOLT_XGPON_ONU_STAT_ID_FEC_CORRECTED_CODEWORDS                                        = 6,    /**< fec corrected codewords. */
+    BCMOLT_XGPON_ONU_STAT_ID_FEC_UNCORRECTABLE_CODEWORDS                                    = 7,    /**< fec uncorrectable codewords. */
+    BCMOLT_XGPON_ONU_STAT_ID_FEC_CODEWORDS                                                  = 8,    /**< fec total codewords. */
+    BCMOLT_XGPON_ONU_STAT_ID_FEC_CORRECTED_BITS                                             = 9,    /**< fec corrected bits. */
+    BCMOLT_XGPON_ONU_STAT_ID_XGEM_KEY_ERRORS                                                = 10,   /**< xgem key error. */
+    BCMOLT_XGPON_ONU_STAT_ID_XGEM_LOSS                                                      = 11,   /**< xgem loss . */
+    BCMOLT_XGPON_ONU_STAT_ID_RX_PLOAMS_MIC_ERROR                                            = 12,   /**< mic error ploam. */
+    BCMOLT_XGPON_ONU_STAT_ID_RX_PLOAMS_NON_IDLE                                             = 13,   /**< non idle ploam. */
+    BCMOLT_XGPON_ONU_STAT_ID_RX_OMCI                                                        = 14,   /**< Received OMCI packets. */
+    BCMOLT_XGPON_ONU_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR                                      = 15,   /**< Received OMCI packets with CRC errors. */
+    BCMOLT_XGPON_ONU_STAT_ID_RX_BYTES                                                       = 16,   /**< rx bytes. */
+    BCMOLT_XGPON_ONU_STAT_ID_RX_PACKETS                                                     = 17,   /**< rx packets. */
+    BCMOLT_XGPON_ONU_STAT_ID_TX_BYTES                                                       = 18,   /**< tx bytes. */
+    BCMOLT_XGPON_ONU_STAT_ID_TX_PACKETS                                                     = 19,   /**< tx packets. */
+    BCMOLT_XGPON_ONU_STAT_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_stat_id;
+
+/** Identifiers for all properties contained in the xgpon_onu_sufi group. 
+ */
+typedef enum bcmolt_xgpon_onu_sufi_id
+{
+    BCMOLT_XGPON_ONU_SUFI_ID__BEGIN                                                         = 0,
+    BCMOLT_XGPON_ONU_SUFI_ID_ALARM_STATUS                                                   = 0,    /**< alarm status. */
+    BCMOLT_XGPON_ONU_SUFI_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_sufi_id;
+
+/** Identifiers for all properties contained in the xgpon_onu_tiwi group. 
+ */
+typedef enum bcmolt_xgpon_onu_tiwi_id
+{
+    BCMOLT_XGPON_ONU_TIWI_ID__BEGIN                                                         = 0,
+    BCMOLT_XGPON_ONU_TIWI_ID_ALARM_STATUS                                                   = 0,    /**< Alarm status. */
+    BCMOLT_XGPON_ONU_TIWI_ID_DRIFT_VALUE                                                    = 1,    /**< Drift value. */
+    BCMOLT_XGPON_ONU_TIWI_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_tiwi_id;
+
+/** Identifiers for all properties contained in the xgpon_onu_tuning_response 
+ * group. 
+ */
+typedef enum bcmolt_xgpon_onu_tuning_response_id
+{
+    BCMOLT_XGPON_ONU_TUNING_RESPONSE_ID__BEGIN                                              = 0,
+    BCMOLT_XGPON_ONU_TUNING_RESPONSE_ID_ACK                                                 = 0,    /**< ack. */
+    BCMOLT_XGPON_ONU_TUNING_RESPONSE_ID_RESULT                                              = 1,    /**< result. */
+    BCMOLT_XGPON_ONU_TUNING_RESPONSE_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_tuning_response_id;
+
+/** Identifiers for all properties contained in the xgpon_trx_cfg group. 
+ */
+typedef enum bcmolt_xgpon_trx_cfg_id
+{
+    BCMOLT_XGPON_TRX_CFG_ID__BEGIN                                                          = 0,
+    BCMOLT_XGPON_TRX_CFG_ID_BURST_PROFILE                                                   = 0,    /**< burst profile. */
+    BCMOLT_XGPON_TRX_CFG_ID_TRANSCEIVER_CONFIG                                              = 1,    /**< transceiver config. */
+    BCMOLT_XGPON_TRX_CFG_ID_TRANSCEIVER_TYPE                                                = 2,    /**< trx type. */
+    BCMOLT_XGPON_TRX_CFG_ID_DEBUG                                                           = 3,    /**< debug. */
+    BCMOLT_XGPON_TRX_CFG_ID_RSSI_NORMAL_CONFIG                                              = 4,    /**< rssi normal config. */
+    BCMOLT_XGPON_TRX_CFG_ID_RSSI_RANGING_CONFIG                                             = 5,    /**< rssi ranging config. */
+    BCMOLT_XGPON_TRX_CFG_ID_SERDES_CONFIGURATION                                            = 6,    /**< serdes configuration. */
+    BCMOLT_XGPON_TRX_CFG_ID_BURST_PROFILE_DELIMITER_MAX_ERRORS                              = 7,    /**< burst profile delimiter max errors. */
+    BCMOLT_XGPON_TRX_CFG_ID_RANGING_SM_PATTERNS_AT_INIT                                     = 8,    /**< ranging sm patterns at init. */
+    BCMOLT_XGPON_TRX_CFG_ID_RANGING_SM_PATTERNS_ED_FAILURE                                  = 9,    /**< ranging sm patterns ED failure. */
+    BCMOLT_XGPON_TRX_CFG_ID_RESET_ON_DEL_MISS                                               = 10,   /**< reset on del miss. */
+    BCMOLT_XGPON_TRX_CFG_ID_ED_STATE                                                        = 11,   /**< ed state. */
+    BCMOLT_XGPON_TRX_CFG_ID_INVERT_ED                                                       = 12,   /**< invert ED. */
+    BCMOLT_XGPON_TRX_CFG_ID_END_OF_BURST_RESET                                              = 13,   /**< end of burst reset. */
+    BCMOLT_XGPON_TRX_CFG_ID_TRX_RST_POLARITY                                                = 14,   /**< TRX reset polarity. */
+    BCMOLT_XGPON_TRX_CFG_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_trx_cfg_id;
+
+/** Identifiers for all properties contained in the xgpon_trx_key group. 
+ */
+typedef enum bcmolt_xgpon_trx_key_id
+{
+    BCMOLT_XGPON_TRX_KEY_ID__BEGIN                                                          = 0,
+    BCMOLT_XGPON_TRX_KEY_ID_PON_NI                                                          = 0,    /**< PON network interface. */
+    BCMOLT_XGPON_TRX_KEY_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_trx_key_id;
+
+/** Identifiers for all properties contained in the xpon_serdes_cfg group. 
+ */
+typedef enum bcmolt_xpon_serdes_cfg_id
+{
+    BCMOLT_XPON_SERDES_CFG_ID__BEGIN                                                        = 0,
+    BCMOLT_XPON_SERDES_CFG_ID_RX_VGA                                                        = 0,    /**< Rx Vga. */
+    BCMOLT_XPON_SERDES_CFG_ID_RX_PF                                                         = 1,    /**< Rx PF. */
+    BCMOLT_XPON_SERDES_CFG_ID_RX_LFPF                                                       = 2,    /**< Rx LFPF. */
+    BCMOLT_XPON_SERDES_CFG_ID_RX_DFE1                                                       = 3,    /**< Rx DFE1. */
+    BCMOLT_XPON_SERDES_CFG_ID_RX_DFE2                                                       = 4,    /**< Rx DFE2. */
+    BCMOLT_XPON_SERDES_CFG_ID_RX_DFE3                                                       = 5,    /**< Rx DFE3. */
+    BCMOLT_XPON_SERDES_CFG_ID_RX_DFE4                                                       = 6,    /**< Rx DFE4. */
+    BCMOLT_XPON_SERDES_CFG_ID_RX_DFE5                                                       = 7,    /**< Rx DFE5. */
+    BCMOLT_XPON_SERDES_CFG_ID_TX_PRE                                                        = 8,    /**< Tx Pre. */
+    BCMOLT_XPON_SERDES_CFG_ID_TX_MAIN                                                       = 9,    /**< Tx Main. */
+    BCMOLT_XPON_SERDES_CFG_ID_TX_POST1                                                      = 10,   /**< Tx Post1. */
+    BCMOLT_XPON_SERDES_CFG_ID_TX_POST2                                                      = 11,   /**< Tx Post2. */
+    BCMOLT_XPON_SERDES_CFG_ID_TX_POST3                                                      = 12,   /**< Tx Post3. */
+    BCMOLT_XPON_SERDES_CFG_ID_TX_AMP                                                        = 13,   /**< Tx Amp. */
+    BCMOLT_XPON_SERDES_CFG_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_xpon_serdes_cfg_id;
+
+/** Identifiers for all properties contained in the xpon_serdes_key group. 
+ */
+typedef enum bcmolt_xpon_serdes_key_id
+{
+    BCMOLT_XPON_SERDES_KEY_ID__BEGIN                                                        = 0,
+    BCMOLT_XPON_SERDES_KEY_ID_PON_NI                                                        = 0,    /**< PON NI. */
+    BCMOLT_XPON_SERDES_KEY_ID_INSTANCE                                                      = 1,    /**< Instance. */
+    BCMOLT_XPON_SERDES_KEY_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_xpon_serdes_key_id;
+
+/** All object tags for all objects in the system. 
+ */
+typedef enum bcmolt_obj_tag
+{
+    BCMOLT_OBJ_TAG__BEGIN,
+    BCMOLT_OBJ_TAG_EPON                                                                     = 0,
+    BCMOLT_OBJ_TAG_AE,
+    BCMOLT_OBJ_TAG_GPON,
+    BCMOLT_OBJ_TAG_XGPON,
+    BCMOLT_OBJ_TAG__NUM_OF              /**< Number of enum entries, not an entry itself. */
+} bcmolt_obj_tag;
+
+/* The following config modes are enabled for this build */
+#define BCMOLT_CONFIG_MODE_EPON 1
+
+/* The following config modes are enabled for this build */
+#define BCMOLT_CONFIG_MODE_AE   1
+
+/* The following config modes are enabled for this build */
+#define BCMOLT_CONFIG_MODE_GPON 1
+
+/* The following config modes are enabled for this build */
+#define BCMOLT_CONFIG_MODE_XGPON    1
+
+/** Identifiers for all objects in the system. 
+ */
+typedef enum bcmolt_obj_id
+{
+    BCMOLT_OBJ_ID__BEGIN,
+    BCMOLT_OBJ_ID_AE_NI                                                                     = 0,    /**< AE NI (Active Ethernet Network Interface) */
+    BCMOLT_OBJ_ID_AE_PATH_DS                                                                = 1,    /**< AE path downstream */
+    BCMOLT_OBJ_ID_AE_PATH_US                                                                = 2,    /**< AE path upstream */
+    BCMOLT_OBJ_ID_CHANNEL                                                                   = 3,    /**< Channel */
+    BCMOLT_OBJ_ID_DEBUG                                                                     = 4,    /**< Debug */
+    BCMOLT_OBJ_ID_DEVICE                                                                    = 5,    /**< Device */
+    BCMOLT_OBJ_ID_EPON_DENIED_LINK                                                          = 6,    /**< EPON Denied Link */
+    BCMOLT_OBJ_ID_EPON_LINK                                                                 = 7,    /**< EPON link */
+    BCMOLT_OBJ_ID_EPON_NI                                                                   = 8,    /**< EPON NI (EPON Network Interface) */
+    BCMOLT_OBJ_ID_EPON_ONU_10G_US                                                           = 9,    /**< EPON ONU 10G US */
+    BCMOLT_OBJ_ID_EPON_ONU_1G_US                                                            = 10,   /**< EPON ONU 1G US */
+    BCMOLT_OBJ_ID_EPON_PATH_10G_DS                                                          = 11,   /**< EPON path 10G downstream */
+    BCMOLT_OBJ_ID_EPON_PATH_10G_US                                                          = 12,   /**< EPON path 10G upstream */
+    BCMOLT_OBJ_ID_EPON_PATH_1G_DS                                                           = 13,   /**< EPON path 1G downstream */
+    BCMOLT_OBJ_ID_EPON_PATH_1G_US                                                           = 14,   /**< EPON path 1G upstream */
+    BCMOLT_OBJ_ID_EPON_RP                                                                   = 15,   /**< EPON Reconciliation Path */
+    BCMOLT_OBJ_ID_GPIO                                                                      = 16,   /**< GPIO */
+    BCMOLT_OBJ_ID_GPON_ALLOC                                                                = 17,   /**< GPON Alloc */
+    BCMOLT_OBJ_ID_GPON_GEM_PORT                                                             = 18,   /**< GPON GEM Port */
+    BCMOLT_OBJ_ID_GPON_IWF                                                                  = 19,   /**< GPON IWF */
+    BCMOLT_OBJ_ID_GPON_IWF_DS_EGRESS_FLOW                                                   = 20,   /**< GPON IWF DS egress flow */
+    BCMOLT_OBJ_ID_GPON_IWF_DS_INGRESS_FLOW                                                  = 21,   /**< GPON IWF DS ingress flow */
+    BCMOLT_OBJ_ID_GPON_IWF_MAC_TABLE                                                        = 22,   /**< GPON IWF MAC table */
+    BCMOLT_OBJ_ID_GPON_IWF_US_FLOW                                                          = 23,   /**< GPON IWF US flow */
+    BCMOLT_OBJ_ID_GPON_NI                                                                   = 24,   /**< GPON network interface */
+    BCMOLT_OBJ_ID_GPON_ONU                                                                  = 25,   /**< GPON ONU */
+    BCMOLT_OBJ_ID_GPON_TRX                                                                  = 26,   /**< GPON TRX */
+    BCMOLT_OBJ_ID_LOG_ENTRY                                                                 = 27,   /**< log entry */
+    BCMOLT_OBJ_ID_LOGGER                                                                    = 28,   /**< logger */
+    BCMOLT_OBJ_ID_NNI                                                                       = 29,   /**< NNI */
+    BCMOLT_OBJ_ID_NNI_SERDES                                                                = 30,   /**< nni_serdes */
+    BCMOLT_OBJ_ID_SOFTWARE_ERROR                                                            = 31,   /**< Software Error */
+    BCMOLT_OBJ_ID_TRX_CALIBRATION                                                           = 32,   /**< TRX Calibration */
+    BCMOLT_OBJ_ID_XGPON_ALLOC                                                               = 33,   /**< XGPON Alloc */
+    BCMOLT_OBJ_ID_XGPON_GEM_PORT                                                            = 34,   /**< XGPON GEM port */
+    BCMOLT_OBJ_ID_XGPON_IWF                                                                 = 35,   /**< XGPON IWF */
+    BCMOLT_OBJ_ID_XGPON_NI                                                                  = 36,   /**< XGPON network interface */
+    BCMOLT_OBJ_ID_XGPON_ONU                                                                 = 37,   /**< XGPON ONU */
+    BCMOLT_OBJ_ID_XGPON_TRX                                                                 = 38,   /**< XGPON TRX */
+    BCMOLT_OBJ_ID_XPON_SERDES                                                               = 39,   /**< xpon_serdes */
+    BCMOLT_OBJ_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_obj_id;
+
+/** Identifiers for all possible groups under all objects in the system. 
+ */
+typedef enum bcmolt_group_id
+{
+    BCMOLT_GROUP_ID__BEGIN,
+    BCMOLT_GROUP_ID_AE_NI_KEY                                                               = 0,    /**< AE NI (Active Ethernet Network Interface) - key */
+    BCMOLT_GROUP_ID_AE_NI_CFG                                                               = 1,    /**< AE NI (Active Ethernet Network Interface) - cfg */
+    BCMOLT_GROUP_ID_AE_NI_SET_AE_NI_EN_STATE                                                = 2,    /**< AE NI (Active Ethernet Network Interface) - Set AE NI Enable State */
+    BCMOLT_GROUP_ID_AE_PATH_DS_KEY                                                          = 3,    /**< AE path downstream - key */
+    BCMOLT_GROUP_ID_AE_PATH_DS_STAT                                                         = 4,    /**< AE path downstream - stat */
+    BCMOLT_GROUP_ID_AE_PATH_DS_STAT_CFG_BYTES                                               = 5,    /**< AE path downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_AE_PATH_DS_STAT_CFG_FRAMES                                              = 6,    /**< AE path downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_AE_PATH_DS_STAT_CFG_FRAMES_64                                           = 7,    /**< AE path downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_AE_PATH_DS_STAT_CFG_FRAMES_65_127                                       = 8,    /**< AE path downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_AE_PATH_DS_STAT_CFG_FRAMES_128_255                                      = 9,    /**< AE path downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_AE_PATH_DS_STAT_CFG_FRAMES_256_511                                      = 10,   /**< AE path downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_AE_PATH_DS_STAT_CFG_FRAMES_512_1023                                     = 11,   /**< AE path downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_AE_PATH_DS_STAT_CFG_FRAMES_1024_1518                                    = 12,   /**< AE path downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_AE_PATH_DS_STAT_CFG_FRAMES_1519_2047                                    = 13,   /**< AE path downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_AE_PATH_DS_STAT_CFG_FRAMES_2048_4095                                    = 14,   /**< AE path downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_AE_PATH_DS_STAT_CFG_FRAMES_4096_9216                                    = 15,   /**< AE path downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_AE_PATH_DS_STAT_CFG_FRAMES_9217_16383                                   = 16,   /**< AE path downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_AE_PATH_DS_STAT_CFG_BROADCAST_FRAMES                                    = 17,   /**< AE path downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_AE_PATH_DS_STAT_CFG_DATA_BYTES                                          = 18,   /**< AE path downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_AE_PATH_DS_STAT_CFG_MULTICAST_FRAMES                                    = 19,   /**< AE path downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_AE_PATH_DS_STAT_CFG_UNICAST_FRAMES                                      = 20,   /**< AE path downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_AE_PATH_DS_STAT_CFG_ABORT_FRAMES                                        = 21,   /**< AE path downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_AE_PATH_DS_STAT_ALARM_CLEARED                                           = 22,   /**< AE path downstream - Stat Alarm Cleared */
+    BCMOLT_GROUP_ID_AE_PATH_DS_STAT_ALARM_RAISED                                            = 23,   /**< AE path downstream - Stat Alarm Raised */
+    BCMOLT_GROUP_ID_AE_PATH_DS_AUTO_CFG                                                     = 24,   /**< AE path downstream - Indication Configuration */
+    BCMOLT_GROUP_ID_AE_PATH_US_KEY                                                          = 25,   /**< AE path upstream - key */
+    BCMOLT_GROUP_ID_AE_PATH_US_STAT                                                         = 26,   /**< AE path upstream - stat */
+    BCMOLT_GROUP_ID_AE_PATH_US_STAT_CFG_BYTES                                               = 27,   /**< AE path upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_AE_PATH_US_STAT_CFG_FRAMES                                              = 28,   /**< AE path upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_AE_PATH_US_STAT_CFG_FRAMES_64                                           = 29,   /**< AE path upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_AE_PATH_US_STAT_CFG_FRAMES_65_127                                       = 30,   /**< AE path upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_AE_PATH_US_STAT_CFG_FRAMES_128_255                                      = 31,   /**< AE path upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_AE_PATH_US_STAT_CFG_FRAMES_256_511                                      = 32,   /**< AE path upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_AE_PATH_US_STAT_CFG_FRAMES_512_1023                                     = 33,   /**< AE path upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_AE_PATH_US_STAT_CFG_FRAMES_1024_1518                                    = 34,   /**< AE path upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_AE_PATH_US_STAT_CFG_FRAMES_1519_2047                                    = 35,   /**< AE path upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_AE_PATH_US_STAT_CFG_FRAMES_2048_4095                                    = 36,   /**< AE path upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_AE_PATH_US_STAT_CFG_FRAMES_4096_9216                                    = 37,   /**< AE path upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_AE_PATH_US_STAT_CFG_FRAMES_9217_16383                                   = 38,   /**< AE path upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_AE_PATH_US_STAT_CFG_BROADCAST_FRAMES                                    = 39,   /**< AE path upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_AE_PATH_US_STAT_CFG_DATA_BYTES                                          = 40,   /**< AE path upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_AE_PATH_US_STAT_CFG_MULTICAST_FRAMES                                    = 41,   /**< AE path upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_AE_PATH_US_STAT_CFG_UNICAST_FRAMES                                      = 42,   /**< AE path upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_AE_PATH_US_STAT_CFG_ABORT_FRAMES                                        = 43,   /**< AE path upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_AE_PATH_US_STAT_CFG_FCS_ERROR                                           = 44,   /**< AE path upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_AE_PATH_US_STAT_CFG_OVERSIZE_ERROR                                      = 45,   /**< AE path upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_AE_PATH_US_STAT_CFG_RUNT_ERROR                                          = 46,   /**< AE path upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_AE_PATH_US_STAT_ALARM_CLEARED                                           = 47,   /**< AE path upstream - Stat Alarm Cleared */
+    BCMOLT_GROUP_ID_AE_PATH_US_STAT_ALARM_RAISED                                            = 48,   /**< AE path upstream - Stat Alarm Raised */
+    BCMOLT_GROUP_ID_AE_PATH_US_AUTO_CFG                                                     = 49,   /**< AE path upstream - Indication Configuration */
+    BCMOLT_GROUP_ID_CHANNEL_KEY                                                             = 50,   /**< Channel - key */
+    BCMOLT_GROUP_ID_CHANNEL_CFG                                                             = 51,   /**< Channel - cfg */
+    BCMOLT_GROUP_ID_DEBUG_KEY                                                               = 52,   /**< Debug - key */
+    BCMOLT_GROUP_ID_DEBUG_CFG                                                               = 53,   /**< Debug - cfg */
+    BCMOLT_GROUP_ID_DEBUG_CLI_OUTPUT                                                        = 54,   /**< Debug - cli_output */
+    BCMOLT_GROUP_ID_DEBUG_FILE_ALMOST_FULL                                                  = 55,   /**< Debug - file_almost_full */
+    BCMOLT_GROUP_ID_DEBUG_AUTO_CFG                                                          = 56,   /**< Debug - Indication Configuration */
+    BCMOLT_GROUP_ID_DEBUG_CLI_INPUT                                                         = 57,   /**< Debug - CLI_input */
+    BCMOLT_GROUP_ID_DEBUG_RESET_API_CAPTURE                                                 = 58,   /**< Debug - Reset API Capture */
+    BCMOLT_GROUP_ID_DEBUG_START_API_CAPTURE                                                 = 59,   /**< Debug - Start API Capture */
+    BCMOLT_GROUP_ID_DEBUG_STOP_API_CAPTURE                                                  = 60,   /**< Debug - Stop API Capture */
+    BCMOLT_GROUP_ID_DEVICE_KEY                                                              = 61,   /**< Device - key */
+    BCMOLT_GROUP_ID_DEVICE_CFG                                                              = 62,   /**< Device - cfg */
+    BCMOLT_GROUP_ID_DEVICE_CONNECTION_COMPLETE                                              = 63,   /**< Device - Connection Complete */
+    BCMOLT_GROUP_ID_DEVICE_CONNECTION_ESTABLISHED                                           = 64,   /**< Device - Connection Established (Internal) */
+    BCMOLT_GROUP_ID_DEVICE_CONNECTION_FAILURE                                               = 65,   /**< Device - Connection Failure */
+    BCMOLT_GROUP_ID_DEVICE_DDR_TEST_COMPLETE                                                = 66,   /**< Device - DDR Test Complete */
+    BCMOLT_GROUP_ID_DEVICE_DEVICE_KEEP_ALIVE                                                = 67,   /**< Device - Device Keep Alive (Internal) */
+    BCMOLT_GROUP_ID_DEVICE_DEVICE_READY                                                     = 68,   /**< Device - Device Ready (Internal) */
+    BCMOLT_GROUP_ID_DEVICE_DISCONNECTION_COMPLETE                                           = 69,   /**< Device - Disconnection Complete */
+    BCMOLT_GROUP_ID_DEVICE_IMAGE_TRANSFER_COMPLETE                                          = 70,   /**< Device - Image Transfer Complete */
+    BCMOLT_GROUP_ID_DEVICE_INDICATIONS_DROPPED                                              = 71,   /**< Device - Indications Dropped */
+    BCMOLT_GROUP_ID_DEVICE_SW_ERROR                                                         = 72,   /**< Device - sw error */
+    BCMOLT_GROUP_ID_DEVICE_SW_EXCEPTION                                                     = 73,   /**< Device - sw exception */
+    BCMOLT_GROUP_ID_DEVICE_AUTO_CFG                                                         = 74,   /**< Device - Indication Configuration */
+    BCMOLT_GROUP_ID_DEVICE_CONNECT                                                          = 75,   /**< Device - Connect */
+    BCMOLT_GROUP_ID_DEVICE_DISCONNECT                                                       = 76,   /**< Device - Device Disconnect */
+    BCMOLT_GROUP_ID_DEVICE_HOST_KEEP_ALIVE                                                  = 77,   /**< Device - Host Keep Alive (Internal) */
+    BCMOLT_GROUP_ID_DEVICE_IMAGE_TRANSFER_DATA                                              = 78,   /**< Device - Image Data Transfer Operation (Internal) */
+    BCMOLT_GROUP_ID_DEVICE_IMAGE_TRANSFER_START                                             = 79,   /**< Device - Start Image Transfer Operation */
+    BCMOLT_GROUP_ID_DEVICE_RESET                                                            = 80,   /**< Device - Device Reset */
+    BCMOLT_GROUP_ID_DEVICE_RUN_DDR_TEST                                                     = 81,   /**< Device - Run DDR Test */
+    BCMOLT_GROUP_ID_DEVICE_SW_UPGRADE_ACTIVATE                                              = 82,   /**< Device - SW upgrade activate */
+    BCMOLT_GROUP_ID_EPON_DENIED_LINK_KEY                                                    = 83,   /**< EPON Denied Link - key */
+    BCMOLT_GROUP_ID_EPON_DENIED_LINK_CFG                                                    = 84,   /**< EPON Denied Link - cfg */
+    BCMOLT_GROUP_ID_EPON_DENIED_LINK_LASER_ON_OFF_VIOLATION                                 = 85,   /**< EPON Denied Link - Laser On/Off Violation */
+    BCMOLT_GROUP_ID_EPON_DENIED_LINK_LLID_POOL_EMPTY_VIOLATION                              = 86,   /**< EPON Denied Link - LLID Pool Empty Violation */
+    BCMOLT_GROUP_ID_EPON_DENIED_LINK_MAX_LINK_VIOLATION                                     = 87,   /**< EPON Denied Link - Max Link Violation */
+    BCMOLT_GROUP_ID_EPON_DENIED_LINK_OVERHEAD_PROFILE_VIOLATION                             = 88,   /**< EPON Denied Link - Overhead Profile Violation */
+    BCMOLT_GROUP_ID_EPON_DENIED_LINK_RANGE_VIOLATION                                        = 89,   /**< EPON Denied Link - Range Violation */
+    BCMOLT_GROUP_ID_EPON_DENIED_LINK_ROGUE_VIOLATION                                        = 90,   /**< EPON Denied Link - Rogue ONU Detected */
+    BCMOLT_GROUP_ID_EPON_DENIED_LINK_SYSTEM_RESOURCE_VIOLATION                              = 91,   /**< EPON Denied Link - System Resource Violation */
+    BCMOLT_GROUP_ID_EPON_DENIED_LINK_TDM_CHANNELS_EXHAUSTED                                 = 92,   /**< EPON Denied Link - TDM Channels Exhausted */
+    BCMOLT_GROUP_ID_EPON_DENIED_LINK_UNKNOWN_LINK_VIOLATION                                 = 93,   /**< EPON Denied Link - Unknown Link Violation */
+    BCMOLT_GROUP_ID_EPON_DENIED_LINK_UPSTREAM_BANDWIDTH_VIOLATION                           = 94,   /**< EPON Denied Link - Upstream Bandwidth Violation */
+    BCMOLT_GROUP_ID_EPON_DENIED_LINK_AUTO_CFG                                               = 95,   /**< EPON Denied Link - Indication Configuration */
+    BCMOLT_GROUP_ID_EPON_LINK_KEY                                                           = 96,   /**< EPON link - key */
+    BCMOLT_GROUP_ID_EPON_LINK_CFG                                                           = 97,   /**< EPON link - cfg */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT                                                          = 98,   /**< EPON link - stat */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_DATA_BYTES                                        = 99,   /**< EPON link - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_DATA_FRAMES                                       = 100,  /**< EPON link - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_FRAMES_64                                         = 101,  /**< EPON link - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_FRAMES_65_127                                     = 102,  /**< EPON link - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_FRAMES_128_255                                    = 103,  /**< EPON link - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_FRAMES_256_511                                    = 104,  /**< EPON link - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_FRAMES_512_1023                                   = 105,  /**< EPON link - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_FRAMES_1024_1518                                  = 106,  /**< EPON link - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_FRAMES_1519_2047                                  = 107,  /**< EPON link - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_FRAMES_2048_4095                                  = 108,  /**< EPON link - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_FRAMES_4096_9216                                  = 109,  /**< EPON link - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_FRAMES_9217_16383                                 = 110,  /**< EPON link - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_OAM_BYTES                                         = 111,  /**< EPON link - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_OAM_FRAMES                                        = 112,  /**< EPON link - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_MPCP_FRAMES                                       = 113,  /**< EPON link - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_BROADCAST_FRAMES                                  = 114,  /**< EPON link - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_UNICAST_FRAMES                                    = 115,  /**< EPON link - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_MULTICAST_FRAMES                                  = 116,  /**< EPON link - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_REPORT_FRAMES                                     = 117,  /**< EPON link - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_FCS_ERROR                                         = 118,  /**< EPON link - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_OVERSIZE_ERROR                                    = 119,  /**< EPON link - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_RUNT_ERROR                                        = 120,  /**< EPON link - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_LINE_CODE_ERROR                                   = 121,  /**< EPON link - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_LINE_CODE_ERROR_MAX                               = 122,  /**< EPON link - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_TX_DATA_BYTES                                        = 123,  /**< EPON link - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_TX_DATA_FRAMES                                       = 124,  /**< EPON link - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_TX_FRAMES_64                                         = 125,  /**< EPON link - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_TX_FRAMES_65_127                                     = 126,  /**< EPON link - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_TX_FRAMES_128_255                                    = 127,  /**< EPON link - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_TX_FRAMES_256_511                                    = 128,  /**< EPON link - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_TX_FRAMES_512_1023                                   = 129,  /**< EPON link - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_TX_FRAMES_1024_1518                                  = 130,  /**< EPON link - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_TX_FRAMES_1519_2047                                  = 131,  /**< EPON link - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_TX_FRAMES_2048_4095                                  = 132,  /**< EPON link - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_TX_FRAMES_4096_9216                                  = 133,  /**< EPON link - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_TX_FRAMES_9217_16383                                 = 134,  /**< EPON link - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_TX_OAM_BYTES                                         = 135,  /**< EPON link - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_TX_OAM_FRAMES                                        = 136,  /**< EPON link - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_TX_MPCP_FRAMES                                       = 137,  /**< EPON link - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_TX_BROADCAST_FRAMES                                  = 138,  /**< EPON link - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_TX_UNICAST_FRAMES                                    = 139,  /**< EPON link - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_TX_MULTICAST_FRAMES                                  = 140,  /**< EPON link - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_TX_GATES                                             = 141,  /**< EPON link - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_LINK_DUPLICATE_MPCP_REGISTRATION_REQUEST                           = 142,  /**< EPON link - Duplicate MPCP Registration Request */
+    BCMOLT_GROUP_ID_EPON_LINK_ENCRYPTION_ENABLED                                            = 143,  /**< EPON link - Encryption Enabled */
+    BCMOLT_GROUP_ID_EPON_LINK_KEY_EXCHANGE_FAILURE                                          = 144,  /**< EPON link - Key Exchange Failure */
+    BCMOLT_GROUP_ID_EPON_LINK_KEY_EXCHANGE_STARTED                                          = 145,  /**< EPON link - key_exchange_started */
+    BCMOLT_GROUP_ID_EPON_LINK_KEY_EXCHANGE_STOPPED                                          = 146,  /**< EPON link - key_exchange_stopped */
+    BCMOLT_GROUP_ID_EPON_LINK_LINK_DELETED                                                  = 147,  /**< EPON link - Link Deleted */
+    BCMOLT_GROUP_ID_EPON_LINK_LINK_SPEED_MISMATCH                                           = 148,  /**< EPON link - Link attempted to register at a different speed */
+    BCMOLT_GROUP_ID_EPON_LINK_MPCP_DEREGISTERED                                             = 149,  /**< EPON link - MPCP Deregistered */
+    BCMOLT_GROUP_ID_EPON_LINK_MPCP_DISCOVERED                                               = 150,  /**< EPON link - MPCP Discovered */
+    BCMOLT_GROUP_ID_EPON_LINK_MPCP_REG_ACK_TIMEOUT                                          = 151,  /**< EPON link - MPCP Reg Ack Timeout */
+    BCMOLT_GROUP_ID_EPON_LINK_MPCP_REPORT_TIMEOUT                                           = 152,  /**< EPON link - MPCP Report Timeout */
+    BCMOLT_GROUP_ID_EPON_LINK_OAM_KEEPALIVE_TIMEOUT                                         = 153,  /**< EPON link - OAM Keepalive Timeout */
+    BCMOLT_GROUP_ID_EPON_LINK_OAM_KEEPALIVE_TIMER_STARTED                                   = 154,  /**< EPON link - OAM keepalive timer started */
+    BCMOLT_GROUP_ID_EPON_LINK_OAM_KEEPALIVE_TIMER_STOPPED                                   = 155,  /**< EPON link - OAM keepalive timer stopped */
+    BCMOLT_GROUP_ID_EPON_LINK_PREPROVISIONED_LINK_CREATED                                   = 156,  /**< EPON link - Preprovisioned Link Created */
+    BCMOLT_GROUP_ID_EPON_LINK_PROTECTION_SWITCH_OCCURRED                                    = 157,  /**< EPON link - Protection Switch Occurred */
+    BCMOLT_GROUP_ID_EPON_LINK_RANGE_VALUE_CHANGED                                           = 158,  /**< EPON link - Range Value Changed */
+    BCMOLT_GROUP_ID_EPON_LINK_RERANGE_FAILURE                                               = 159,  /**< EPON link - Re-range failure */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT_ALARM_CLEARED                                            = 160,  /**< EPON link - Stat Alarm Cleared */
+    BCMOLT_GROUP_ID_EPON_LINK_STAT_ALARM_RAISED                                             = 161,  /**< EPON link - Stat Alarm Raised */
+    BCMOLT_GROUP_ID_EPON_LINK_STATIC_REGISTRATION_DONE                                      = 162,  /**< EPON link - Static registration done */
+    BCMOLT_GROUP_ID_EPON_LINK_AUTO_CFG                                                      = 163,  /**< EPON link - Indication Configuration */
+    BCMOLT_GROUP_ID_EPON_LINK_DELETE_LINK                                                   = 164,  /**< EPON link - Delete Link */
+    BCMOLT_GROUP_ID_EPON_LINK_FORCE_REDISCOVERY                                             = 165,  /**< EPON link - Force Link Rediscovery */
+    BCMOLT_GROUP_ID_EPON_LINK_KEY_EXCHANGE_START                                            = 166,  /**< EPON link - Key exchange start */
+    BCMOLT_GROUP_ID_EPON_LINK_KEY_EXCHANGE_STOP                                             = 167,  /**< EPON link - Key exchange stop */
+    BCMOLT_GROUP_ID_EPON_LINK_OAM_KEEPALIVE_TIMER_START                                     = 168,  /**< EPON link - OAM Keepalive Timer Start */
+    BCMOLT_GROUP_ID_EPON_LINK_OAM_KEEPALIVE_TIMER_STOP                                      = 169,  /**< EPON link - OAM Keepalive Timer Stop */
+    BCMOLT_GROUP_ID_EPON_LINK_STATIC_REGISTRATION                                           = 170,  /**< EPON link - static_registration */
+    BCMOLT_GROUP_ID_EPON_LINK_INJECT_FRAME                                                  = 171,  /**< EPON link - Inject Frame */
+    BCMOLT_GROUP_ID_EPON_LINK_FRAME_CAPTURED                                                = 172,  /**< EPON link - Frame Captured */
+    BCMOLT_GROUP_ID_EPON_NI_KEY                                                             = 173,  /**< EPON NI (EPON Network Interface) - key */
+    BCMOLT_GROUP_ID_EPON_NI_CFG                                                             = 174,  /**< EPON NI (EPON Network Interface) - cfg */
+    BCMOLT_GROUP_ID_EPON_NI_AUTO_ROGUE_SCAN_10G_FAILURE                                     = 175,  /**< EPON NI (EPON Network Interface) - 10G Epon Autonomous Rogue Scan failure detected */
+    BCMOLT_GROUP_ID_EPON_NI_AUTO_ROGUE_SCAN_1G_FAILURE                                      = 176,  /**< EPON NI (EPON Network Interface) - 1G Epon Autonomous Rogue Scan failure detected */
+    BCMOLT_GROUP_ID_EPON_NI_LLID_QUARANTINED                                                = 177,  /**< EPON NI (EPON Network Interface) - LLID Quarantined */
+    BCMOLT_GROUP_ID_EPON_NI_MPCP_TIMESTAMP_CHANGED                                          = 178,  /**< EPON NI (EPON Network Interface) - MPCP Timestamp Changed */
+    BCMOLT_GROUP_ID_EPON_NI_NO_REPORTS                                                      = 179,  /**< EPON NI (EPON Network Interface) - No Reports */
+    BCMOLT_GROUP_ID_EPON_NI_ONU_UPGRADE_COMPLETE                                            = 180,  /**< EPON NI (EPON Network Interface) - ONU Upgrade Complete */
+    BCMOLT_GROUP_ID_EPON_NI_RERANGE_FAILURE                                                 = 181,  /**< EPON NI (EPON Network Interface) - Re-range failure */
+    BCMOLT_GROUP_ID_EPON_NI_ROGUE_SCAN_COMPLETE                                             = 182,  /**< EPON NI (EPON Network Interface) - Rogue Scan is Complete */
+    BCMOLT_GROUP_ID_EPON_NI_RSSI_MEASUREMENT_COMPLETED                                      = 183,  /**< EPON NI (EPON Network Interface) - RSSI Measurement Completed */
+    BCMOLT_GROUP_ID_EPON_NI_STATE_CHANGE_COMPLETED                                          = 184,  /**< EPON NI (EPON Network Interface) - State Change Completed */
+    BCMOLT_GROUP_ID_EPON_NI_AUTO_CFG                                                        = 185,  /**< EPON NI (EPON Network Interface) - Indication Configuration */
+    BCMOLT_GROUP_ID_EPON_NI_ADD_LINK                                                        = 186,  /**< EPON NI (EPON Network Interface) - Add link */
+    BCMOLT_GROUP_ID_EPON_NI_ADD_MULTICAST_LINK                                              = 187,  /**< EPON NI (EPON Network Interface) - Add Mutlticastlink */
+    BCMOLT_GROUP_ID_EPON_NI_ADD_PROTECTED_STANDBY_LINK                                      = 188,  /**< EPON NI (EPON Network Interface) - Add Protected Standby Link */
+    BCMOLT_GROUP_ID_EPON_NI_ISSUE_RSSI_GRANT                                                = 189,  /**< EPON NI (EPON Network Interface) - Issue an Rx Power Measurement Request */
+    BCMOLT_GROUP_ID_EPON_NI_PROTECTION_SWITCHING_APPLY_RERANGE_DELTA                        = 190,  /**< EPON NI (EPON Network Interface) - Protection switching apply re-range delta */
+    BCMOLT_GROUP_ID_EPON_NI_ROGUE_LLID_SCAN                                                 = 191,  /**< EPON NI (EPON Network Interface) - Run Rogue LLID Scan */
+    BCMOLT_GROUP_ID_EPON_NI_SET_EPON_NI_EN_STATE                                            = 192,  /**< EPON NI (EPON Network Interface) - Set EPON NI Enable State */
+    BCMOLT_GROUP_ID_EPON_NI_START_ONU_UPGRADE                                               = 193,  /**< EPON NI (EPON Network Interface) - Start ONU Firmware Upgrade */
+    BCMOLT_GROUP_ID_EPON_ONU_10G_US_KEY                                                     = 194,  /**< EPON ONU 10G US - key */
+    BCMOLT_GROUP_ID_EPON_ONU_10G_US_CFG                                                     = 195,  /**< EPON ONU 10G US - cfg */
+    BCMOLT_GROUP_ID_EPON_ONU_10G_US_STAT                                                    = 196,  /**< EPON ONU 10G US - stat */
+    BCMOLT_GROUP_ID_EPON_ONU_10G_US_STAT_CFG_FEC_CODE_WORDS_TOTAL                           = 197,  /**< EPON ONU 10G US - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_ONU_10G_US_STAT_CFG_FEC_CODE_WORDS_DECODE_FAILS                    = 198,  /**< EPON ONU 10G US - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_ONU_10G_US_STAT_CFG_FEC_ZEROES_CORRECTED                           = 199,  /**< EPON ONU 10G US - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_ONU_10G_US_STAT_CFG_FEC_ONES_CORRECTED                             = 200,  /**< EPON ONU 10G US - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_ONU_10G_US_STAT_ALARM_CLEARED                                      = 201,  /**< EPON ONU 10G US - Stat Alarm Cleared */
+    BCMOLT_GROUP_ID_EPON_ONU_10G_US_STAT_ALARM_RAISED                                       = 202,  /**< EPON ONU 10G US - Stat Alarm Raised */
+    BCMOLT_GROUP_ID_EPON_ONU_10G_US_AUTO_CFG                                                = 203,  /**< EPON ONU 10G US - Indication Configuration */
+    BCMOLT_GROUP_ID_EPON_ONU_1G_US_KEY                                                      = 204,  /**< EPON ONU 1G US - key */
+    BCMOLT_GROUP_ID_EPON_ONU_1G_US_CFG                                                      = 205,  /**< EPON ONU 1G US - cfg */
+    BCMOLT_GROUP_ID_EPON_ONU_1G_US_STAT                                                     = 206,  /**< EPON ONU 1G US - stat */
+    BCMOLT_GROUP_ID_EPON_ONU_1G_US_STAT_CFG_GOOD_FRAMES                                     = 207,  /**< EPON ONU 1G US - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_ONU_1G_US_STAT_CFG_GOOD_BYTES                                      = 208,  /**< EPON ONU 1G US - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_ONU_1G_US_STAT_CFG_OVERSZ_FRAMES                                   = 209,  /**< EPON ONU 1G US - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_ONU_1G_US_STAT_CFG_NON_FEC_GOOD_FRAMES                             = 210,  /**< EPON ONU 1G US - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_ONU_1G_US_STAT_CFG_NON_FEC_GOOD_BYTES                              = 211,  /**< EPON ONU 1G US - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_ONU_1G_US_STAT_CFG_FEC_GOOD_FRAMES                                 = 212,  /**< EPON ONU 1G US - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_ONU_1G_US_STAT_CFG_FEC_GOOD_BYTES                                  = 213,  /**< EPON ONU 1G US - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_ONU_1G_US_STAT_CFG_FEC_FRAMES_EXC_ERRS                             = 214,  /**< EPON ONU 1G US - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_ONU_1G_US_STAT_CFG_FEC_BLKS_NO_ERRS                                = 215,  /**< EPON ONU 1G US - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_ONU_1G_US_STAT_CFG_FEC_BLKS_CORR_ERRS                              = 216,  /**< EPON ONU 1G US - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_ONU_1G_US_STAT_CFG_FEC_BLKS_UNCORR_ERRS                            = 217,  /**< EPON ONU 1G US - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_ONU_1G_US_STAT_CFG_FEC_CORR_BYTES                                  = 218,  /**< EPON ONU 1G US - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_ONU_1G_US_STAT_CFG_FEC_CORR_ZEROES                                 = 219,  /**< EPON ONU 1G US - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_ONU_1G_US_STAT_CFG_FEC_CORR_ONES                                   = 220,  /**< EPON ONU 1G US - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_ONU_1G_US_STAT_CFG_UNDERSZ_FRAMES                                  = 221,  /**< EPON ONU 1G US - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_ONU_1G_US_STAT_CFG_ERRORSZ_FRAMES                                  = 222,  /**< EPON ONU 1G US - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_ONU_1G_US_STAT_ALARM_CLEARED                                       = 223,  /**< EPON ONU 1G US - Stat Alarm Cleared */
+    BCMOLT_GROUP_ID_EPON_ONU_1G_US_STAT_ALARM_RAISED                                        = 224,  /**< EPON ONU 1G US - Stat Alarm Raised */
+    BCMOLT_GROUP_ID_EPON_ONU_1G_US_AUTO_CFG                                                 = 225,  /**< EPON ONU 1G US - Indication Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_DS_KEY                                                    = 226,  /**< EPON path 10G downstream - key */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_DS_CFG                                                    = 227,  /**< EPON path 10G downstream - cfg */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT                                                   = 228,  /**< EPON path 10G downstream - stat */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_CFG_BYTES                                         = 229,  /**< EPON path 10G downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_CFG_FRAMES                                        = 230,  /**< EPON path 10G downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_CFG_FRAMES_64                                     = 231,  /**< EPON path 10G downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_CFG_FRAMES_65_127                                 = 232,  /**< EPON path 10G downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_CFG_FRAMES_128_255                                = 233,  /**< EPON path 10G downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_CFG_FRAMES_256_511                                = 234,  /**< EPON path 10G downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_CFG_FRAMES_512_1023                               = 235,  /**< EPON path 10G downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_CFG_FRAMES_1024_1518                              = 236,  /**< EPON path 10G downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_CFG_FRAMES_1519_2047                              = 237,  /**< EPON path 10G downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_CFG_FRAMES_2048_4095                              = 238,  /**< EPON path 10G downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_CFG_FRAMES_4096_9216                              = 239,  /**< EPON path 10G downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_CFG_FRAMES_9217_16383                             = 240,  /**< EPON path 10G downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_CFG_BROADCAST_FRAMES                              = 241,  /**< EPON path 10G downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_CFG_DATA_BYTES                                    = 242,  /**< EPON path 10G downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_CFG_MULTICAST_FRAMES                              = 243,  /**< EPON path 10G downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_CFG_UNICAST_FRAMES                                = 244,  /**< EPON path 10G downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_CFG_OAM_BYTES                                     = 245,  /**< EPON path 10G downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_CFG_OAM_FRAMES                                    = 246,  /**< EPON path 10G downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_CFG_GATE_FRAMES                                   = 247,  /**< EPON path 10G downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_CFG_MPCP_FRAMES                                   = 248,  /**< EPON path 10G downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_CFG_ABORT_FRAMES                                  = 249,  /**< EPON path 10G downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_ALARM_CLEARED                                     = 250,  /**< EPON path 10G downstream - Stat Alarm Cleared */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_ALARM_RAISED                                      = 251,  /**< EPON path 10G downstream - Stat Alarm Raised */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_DS_AUTO_CFG                                               = 252,  /**< EPON path 10G downstream - Indication Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_US_KEY                                                    = 253,  /**< EPON path 10G upstream - key */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_US_CFG                                                    = 254,  /**< EPON path 10G upstream - cfg */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT                                                   = 255,  /**< EPON path 10G upstream - stat */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_BYTES                                         = 256,  /**< EPON path 10G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_FRAMES                                        = 257,  /**< EPON path 10G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_FRAMES_64                                     = 258,  /**< EPON path 10G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_FRAMES_65_127                                 = 259,  /**< EPON path 10G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_FRAMES_128_255                                = 260,  /**< EPON path 10G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_FRAMES_256_511                                = 261,  /**< EPON path 10G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_FRAMES_512_1023                               = 262,  /**< EPON path 10G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_FRAMES_1024_1518                              = 263,  /**< EPON path 10G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_FRAMES_1519_2047                              = 264,  /**< EPON path 10G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_FRAMES_2048_4095                              = 265,  /**< EPON path 10G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_FRAMES_4096_9216                              = 266,  /**< EPON path 10G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_FRAMES_9217_16383                             = 267,  /**< EPON path 10G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_BROADCAST_FRAMES                              = 268,  /**< EPON path 10G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_DATA_BYTES                                    = 269,  /**< EPON path 10G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_MULTICAST_FRAMES                              = 270,  /**< EPON path 10G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_UNICAST_FRAMES                                = 271,  /**< EPON path 10G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_MPCP_FRAMES                                   = 272,  /**< EPON path 10G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_OAM_BYTES                                     = 273,  /**< EPON path 10G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_OAM_FRAMES                                    = 274,  /**< EPON path 10G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_REPORT_FRAMES                                 = 275,  /**< EPON path 10G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_ABORT_FRAMES                                  = 276,  /**< EPON path 10G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_FCS_ERROR                                     = 277,  /**< EPON path 10G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_CRC_8_ERROR                                   = 278,  /**< EPON path 10G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_OUT_OF_SLOT                                   = 279,  /**< EPON path 10G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_OVERSIZE_ERROR                                = 280,  /**< EPON path 10G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_RUNT_ERROR                                    = 281,  /**< EPON path 10G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_ALARM_CLEARED                                     = 282,  /**< EPON path 10G upstream - Stat Alarm Cleared */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_ALARM_RAISED                                      = 283,  /**< EPON path 10G upstream - Stat Alarm Raised */
+    BCMOLT_GROUP_ID_EPON_PATH_10G_US_AUTO_CFG                                               = 284,  /**< EPON path 10G upstream - Indication Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_DS_KEY                                                     = 285,  /**< EPON path 1G downstream - key */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_DS_CFG                                                     = 286,  /**< EPON path 1G downstream - cfg */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT                                                    = 287,  /**< EPON path 1G downstream - stat */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_CFG_BYTES                                          = 288,  /**< EPON path 1G downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_CFG_FRAMES                                         = 289,  /**< EPON path 1G downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_CFG_FRAMES_64                                      = 290,  /**< EPON path 1G downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_CFG_FRAMES_65_127                                  = 291,  /**< EPON path 1G downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_CFG_FRAMES_128_255                                 = 292,  /**< EPON path 1G downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_CFG_FRAMES_256_511                                 = 293,  /**< EPON path 1G downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_CFG_FRAMES_512_1023                                = 294,  /**< EPON path 1G downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_CFG_FRAMES_1024_1518                               = 295,  /**< EPON path 1G downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_CFG_FRAMES_1519_2047                               = 296,  /**< EPON path 1G downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_CFG_FRAMES_2048_4095                               = 297,  /**< EPON path 1G downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_CFG_FRAMES_4096_9216                               = 298,  /**< EPON path 1G downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_CFG_FRAMES_9217_16383                              = 299,  /**< EPON path 1G downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_CFG_BROADCAST_FRAMES                               = 300,  /**< EPON path 1G downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_CFG_DATA_BYTES                                     = 301,  /**< EPON path 1G downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_CFG_MULTICAST_FRAMES                               = 302,  /**< EPON path 1G downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_CFG_UNICAST_FRAMES                                 = 303,  /**< EPON path 1G downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_CFG_OAM_BYTES                                      = 304,  /**< EPON path 1G downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_CFG_OAM_FRAMES                                     = 305,  /**< EPON path 1G downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_CFG_GATE_FRAMES                                    = 306,  /**< EPON path 1G downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_CFG_MPCP_FRAMES                                    = 307,  /**< EPON path 1G downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_CFG_ABORT_FRAMES                                   = 308,  /**< EPON path 1G downstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_ALARM_CLEARED                                      = 309,  /**< EPON path 1G downstream - Stat Alarm Cleared */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_ALARM_RAISED                                       = 310,  /**< EPON path 1G downstream - Stat Alarm Raised */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_DS_AUTO_CFG                                                = 311,  /**< EPON path 1G downstream - Indication Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_US_KEY                                                     = 312,  /**< EPON path 1G upstream - key */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_US_CFG                                                     = 313,  /**< EPON path 1G upstream - cfg */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT                                                    = 314,  /**< EPON path 1G upstream - stat */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_BYTES                                          = 315,  /**< EPON path 1G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_FRAMES                                         = 316,  /**< EPON path 1G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_FRAMES_64                                      = 317,  /**< EPON path 1G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_FRAMES_65_127                                  = 318,  /**< EPON path 1G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_FRAMES_128_255                                 = 319,  /**< EPON path 1G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_FRAMES_256_511                                 = 320,  /**< EPON path 1G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_FRAMES_512_1023                                = 321,  /**< EPON path 1G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_FRAMES_1024_1518                               = 322,  /**< EPON path 1G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_FRAMES_1519_2047                               = 323,  /**< EPON path 1G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_FRAMES_2048_4095                               = 324,  /**< EPON path 1G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_FRAMES_4096_9216                               = 325,  /**< EPON path 1G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_FRAMES_9217_16383                              = 326,  /**< EPON path 1G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_BROADCAST_FRAMES                               = 327,  /**< EPON path 1G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_DATA_BYTES                                     = 328,  /**< EPON path 1G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_MULTICAST_FRAMES                               = 329,  /**< EPON path 1G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_UNICAST_FRAMES                                 = 330,  /**< EPON path 1G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_MPCP_FRAMES                                    = 331,  /**< EPON path 1G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_OAM_BYTES                                      = 332,  /**< EPON path 1G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_OAM_FRAMES                                     = 333,  /**< EPON path 1G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_REPORT_FRAMES                                  = 334,  /**< EPON path 1G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_ABORT_FRAMES                                   = 335,  /**< EPON path 1G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_FCS_ERROR                                      = 336,  /**< EPON path 1G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_CRC_8_ERROR                                    = 337,  /**< EPON path 1G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_OUT_OF_SLOT                                    = 338,  /**< EPON path 1G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_OVERSIZE_ERROR                                 = 339,  /**< EPON path 1G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_RUNT_ERROR                                     = 340,  /**< EPON path 1G upstream - Statistic Configuration */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_ALARM_CLEARED                                      = 341,  /**< EPON path 1G upstream - Stat Alarm Cleared */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_ALARM_RAISED                                       = 342,  /**< EPON path 1G upstream - Stat Alarm Raised */
+    BCMOLT_GROUP_ID_EPON_PATH_1G_US_AUTO_CFG                                                = 343,  /**< EPON path 1G upstream - Indication Configuration */
+    BCMOLT_GROUP_ID_EPON_RP_KEY                                                             = 344,  /**< EPON Reconciliation Path - key */
+    BCMOLT_GROUP_ID_EPON_RP_CFG                                                             = 345,  /**< EPON Reconciliation Path - cfg */
+    BCMOLT_GROUP_ID_GPIO_KEY                                                                = 346,  /**< GPIO - key */
+    BCMOLT_GROUP_ID_GPIO_CFG                                                                = 347,  /**< GPIO - cfg */
+    BCMOLT_GROUP_ID_GPON_ALLOC_KEY                                                          = 348,  /**< GPON Alloc - key */
+    BCMOLT_GROUP_ID_GPON_ALLOC_CFG                                                          = 349,  /**< GPON Alloc - cfg */
+    BCMOLT_GROUP_ID_GPON_ALLOC_STAT                                                         = 350,  /**< GPON Alloc - stat */
+    BCMOLT_GROUP_ID_GPON_ALLOC_STAT_CFG_RX_BYTES                                            = 351,  /**< GPON Alloc - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_ALLOC_CONFIGURATION_COMPLETED                                      = 352,  /**< GPON Alloc - Configuration Completed */
+    BCMOLT_GROUP_ID_GPON_ALLOC_GET_ALLOC_STATS_COMPLETED                                    = 353,  /**< GPON Alloc - Get alloc ID statistics completed */
+    BCMOLT_GROUP_ID_GPON_ALLOC_STAT_ALARM_CLEARED                                           = 354,  /**< GPON Alloc - Stat Alarm Cleared */
+    BCMOLT_GROUP_ID_GPON_ALLOC_STAT_ALARM_RAISED                                            = 355,  /**< GPON Alloc - Stat Alarm Raised */
+    BCMOLT_GROUP_ID_GPON_ALLOC_AUTO_CFG                                                     = 356,  /**< GPON Alloc - Indication Configuration */
+    BCMOLT_GROUP_ID_GPON_ALLOC_GET_STATS                                                    = 357,  /**< GPON Alloc - Get statistics */
+    BCMOLT_GROUP_ID_GPON_ALLOC_SET_STATE                                                    = 358,  /**< GPON Alloc - Set state */
+    BCMOLT_GROUP_ID_GPON_GEM_PORT_KEY                                                       = 359,  /**< GPON GEM Port - key */
+    BCMOLT_GROUP_ID_GPON_GEM_PORT_CFG                                                       = 360,  /**< GPON GEM Port - cfg */
+    BCMOLT_GROUP_ID_GPON_GEM_PORT_STAT                                                      = 361,  /**< GPON GEM Port - stat */
+    BCMOLT_GROUP_ID_GPON_GEM_PORT_STAT_CFG_RX_PACKETS                                       = 362,  /**< GPON GEM Port - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_GEM_PORT_STAT_CFG_RX_BYTES                                         = 363,  /**< GPON GEM Port - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_GEM_PORT_STAT_CFG_TX_PACKETS                                       = 364,  /**< GPON GEM Port - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_GEM_PORT_STAT_CFG_TX_BYTES                                         = 365,  /**< GPON GEM Port - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_GEM_PORT_CONFIGURATION_COMPLETED                                   = 366,  /**< GPON GEM Port - Configuration Completed */
+    BCMOLT_GROUP_ID_GPON_GEM_PORT_STAT_ALARM_CLEARED                                        = 367,  /**< GPON GEM Port - Stat Alarm Cleared */
+    BCMOLT_GROUP_ID_GPON_GEM_PORT_STAT_ALARM_RAISED                                         = 368,  /**< GPON GEM Port - Stat Alarm Raised */
+    BCMOLT_GROUP_ID_GPON_GEM_PORT_AUTO_CFG                                                  = 369,  /**< GPON GEM Port - Indication Configuration */
+    BCMOLT_GROUP_ID_GPON_GEM_PORT_SET_STATE                                                 = 370,  /**< GPON GEM Port - Set state */
+    BCMOLT_GROUP_ID_GPON_IWF_KEY                                                            = 371,  /**< GPON IWF - key */
+    BCMOLT_GROUP_ID_GPON_IWF_CFG                                                            = 372,  /**< GPON IWF - cfg */
+    BCMOLT_GROUP_ID_GPON_IWF_STAT                                                           = 373,  /**< GPON IWF - stat */
+    BCMOLT_GROUP_ID_GPON_IWF_STAT_CFG_DS_HIT_EVENT                                          = 374,  /**< GPON IWF - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_IWF_STAT_CFG_DS_MISS_EVENT                                         = 375,  /**< GPON IWF - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_IWF_STAT_CFG_DS_DROP_DUE_TO_MISS_EVENT                             = 376,  /**< GPON IWF - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_IWF_STAT_CFG_DS_DROP_DUE_TO_HIT_EVENT                              = 377,  /**< GPON IWF - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_IWF_STAT_CFG_DS_DROP_TO_DISABLED_GEM                               = 378,  /**< GPON IWF - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_IWF_STAT_CFG_NEW_MAC_DISCOVERED                                    = 379,  /**< GPON IWF - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_IWF_STAT_CFG_MOVE_EVENT                                            = 380,  /**< GPON IWF - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_IWF_STAT_CFG_NEW_MAC_DROP_DUE_TO_FIFO_FULL                         = 381,  /**< GPON IWF - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_IWF_FLUSH_MAC_TABLE_COMPLETED                                      = 382,  /**< GPON IWF - Flush MAC Table Completed */
+    BCMOLT_GROUP_ID_GPON_IWF_SCAN_MAC_TABLE_COMPLETED                                       = 383,  /**< GPON IWF - Scan MAC Table Completed */
+    BCMOLT_GROUP_ID_GPON_IWF_STAT_ALARM_CLEARED                                             = 384,  /**< GPON IWF - Stat Alarm Cleared */
+    BCMOLT_GROUP_ID_GPON_IWF_STAT_ALARM_RAISED                                              = 385,  /**< GPON IWF - Stat Alarm Raised */
+    BCMOLT_GROUP_ID_GPON_IWF_AUTO_CFG                                                       = 386,  /**< GPON IWF - Indication Configuration */
+    BCMOLT_GROUP_ID_GPON_IWF_FLUSH_MAC_TABLE                                                = 387,  /**< GPON IWF - Flush MAC Table */
+    BCMOLT_GROUP_ID_GPON_IWF_SCAN_MAC_TABLE                                                 = 388,  /**< GPON IWF - Scan MAC Table */
+    BCMOLT_GROUP_ID_GPON_IWF_DS_EGRESS_FLOW_KEY                                             = 389,  /**< GPON IWF DS egress flow - key */
+    BCMOLT_GROUP_ID_GPON_IWF_DS_EGRESS_FLOW_CFG                                             = 390,  /**< GPON IWF DS egress flow - cfg */
+    BCMOLT_GROUP_ID_GPON_IWF_DS_INGRESS_FLOW_KEY                                            = 391,  /**< GPON IWF DS ingress flow - key */
+    BCMOLT_GROUP_ID_GPON_IWF_DS_INGRESS_FLOW_CFG                                            = 392,  /**< GPON IWF DS ingress flow - cfg */
+    BCMOLT_GROUP_ID_GPON_IWF_MAC_TABLE_KEY                                                  = 393,  /**< GPON IWF MAC table - key */
+    BCMOLT_GROUP_ID_GPON_IWF_MAC_TABLE_CFG                                                  = 394,  /**< GPON IWF MAC table - cfg */
+    BCMOLT_GROUP_ID_GPON_IWF_MAC_TABLE_MAC_AGED                                             = 395,  /**< GPON IWF MAC table - MAC Aged */
+    BCMOLT_GROUP_ID_GPON_IWF_MAC_TABLE_MAC_DROPPED                                          = 396,  /**< GPON IWF MAC table - MAC Dropped */
+    BCMOLT_GROUP_ID_GPON_IWF_MAC_TABLE_MAC_MOVE                                             = 397,  /**< GPON IWF MAC table - MAC Move */
+    BCMOLT_GROUP_ID_GPON_IWF_MAC_TABLE_NEW_MAC                                              = 398,  /**< GPON IWF MAC table - New MAC */
+    BCMOLT_GROUP_ID_GPON_IWF_MAC_TABLE_AUTO_CFG                                             = 399,  /**< GPON IWF MAC table - Indication Configuration */
+    BCMOLT_GROUP_ID_GPON_IWF_US_FLOW_KEY                                                    = 400,  /**< GPON IWF US flow - key */
+    BCMOLT_GROUP_ID_GPON_IWF_US_FLOW_CFG                                                    = 401,  /**< GPON IWF US flow - cfg */
+    BCMOLT_GROUP_ID_GPON_NI_KEY                                                             = 402,  /**< GPON network interface - key */
+    BCMOLT_GROUP_ID_GPON_NI_CFG                                                             = 403,  /**< GPON network interface - cfg */
+    BCMOLT_GROUP_ID_GPON_NI_STAT                                                            = 404,  /**< GPON network interface - stat */
+    BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_FEC_CODEWORDS                                          = 405,  /**< GPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_FEC_CODEWORDS_UNCORRECTED                              = 406,  /**< GPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_BIP8_BYTES                                             = 407,  /**< GPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_BIP8_ERRORS                                            = 408,  /**< GPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_RX_GEM_PACKETS                                         = 409,  /**< GPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_RX_GEM_DROPPED                                         = 410,  /**< GPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_RX_GEM_IDLE                                            = 411,  /**< GPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_RX_GEM_CORRECTED                                       = 412,  /**< GPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_RX_GEM_ILLEGAL                                         = 413,  /**< GPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_RX_ALLOCATIONS_VALID                                   = 414,  /**< GPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_RX_ALLOCATIONS_INVALID                                 = 415,  /**< GPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_RX_ALLOCATIONS_DISABLED                                = 416,  /**< GPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_RX_PLOAMS                                              = 417,  /**< GPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_RX_PLOAMS_NON_IDLE                                     = 418,  /**< GPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_RX_PLOAMS_ERROR                                        = 419,  /**< GPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_RX_PLOAMS_DROPPED                                      = 420,  /**< GPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_RX_CPU                                                 = 421,  /**< GPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_RX_OMCI                                                = 422,  /**< GPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_RX_OMCI_PACKETS_CRC_ERROR                              = 423,  /**< GPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_RX_DROPPED_TOO_SHORT                                   = 424,  /**< GPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_RX_DROPPED_TOO_LONG                                    = 425,  /**< GPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_RX_CRC_ERRORS                                          = 426,  /**< GPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_RX_KEY_ERRORS                                          = 427,  /**< GPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_RX_FRAGMENTS_ERRORS                                    = 428,  /**< GPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_RX_PACKETS_DROPPED                                     = 429,  /**< GPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_TX_GEM                                                 = 430,  /**< GPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_TX_PLOAMS                                              = 431,  /**< GPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_TX_GEM_FRAGMENTS                                       = 432,  /**< GPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_TX_CPU                                                 = 433,  /**< GPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_TX_OMCI                                                = 434,  /**< GPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_TX_CPU_OMCI_PACKETS_DROPPED                            = 435,  /**< GPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_TX_DROPPED_ILLEGAL_LENGTH                              = 436,  /**< GPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_TX_DROPPED_TPID_MISS                                   = 437,  /**< GPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_TX_DROPPED_VID_MISS                                    = 438,  /**< GPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_NI_ACTIVATE_ALL_ONUS_COMPLETED                                     = 439,  /**< GPON network interface - activate all onus completed */
+    BCMOLT_GROUP_ID_GPON_NI_CPU_PACKETS_FAILURE                                             = 440,  /**< GPON network interface - CPU Packets Failure */
+    BCMOLT_GROUP_ID_GPON_NI_DEACTIVATE_ALL_ONUS_COMPLETED                                   = 441,  /**< GPON network interface - deactivate all onus completed */
+    BCMOLT_GROUP_ID_GPON_NI_DISABLE_ALL_ONUS_COMPLETED                                      = 442,  /**< GPON network interface - disable all onus completed */
+    BCMOLT_GROUP_ID_GPON_NI_ENABLE_ALL_ONUS_COMPLETED                                       = 443,  /**< GPON network interface - enable all onus completed */
+    BCMOLT_GROUP_ID_GPON_NI_LOS                                                             = 444,  /**< GPON network interface - LOS */
+    BCMOLT_GROUP_ID_GPON_NI_ONU_DISCOVERED                                                  = 445,  /**< GPON network interface - ONU Discovered */
+    BCMOLT_GROUP_ID_GPON_NI_ONU_UPGRADE_COMPLETE                                            = 446,  /**< GPON network interface - ONU Upgrade Complete */
+    BCMOLT_GROUP_ID_GPON_NI_PROTECTION_SWITCHING_ONUS_RANGED                                = 447,  /**< GPON network interface - Protection Switching ONUs Ranged */
+    BCMOLT_GROUP_ID_GPON_NI_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED                       = 448,  /**< GPON network interface - Protection Switching Switchover Completed */
+    BCMOLT_GROUP_ID_GPON_NI_PROTECTION_SWITCHING_TRAFFIC_RESUME                             = 449,  /**< GPON network interface - Protection Switching Traffic Resume */
+    BCMOLT_GROUP_ID_GPON_NI_ROGUE_DETECTION_COMPLETED                                       = 450,  /**< GPON network interface - Rogue detection completed */
+    BCMOLT_GROUP_ID_GPON_NI_ROGUE_ONU_SPECIAL_MAP_CYCLE_START                               = 451,  /**< GPON network interface - Rogue ONU special map cycle start */
+    BCMOLT_GROUP_ID_GPON_NI_SERIAL_NUMBER_ACQUISITION_CYCLE_START                           = 452,  /**< GPON network interface - Serial Number Acquisition Cycle Start */
+    BCMOLT_GROUP_ID_GPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED                          = 453,  /**< GPON network interface - Standby PON Monitoring Cycle Completed */
+    BCMOLT_GROUP_ID_GPON_NI_STAT_ALARM_CLEARED                                              = 454,  /**< GPON network interface - Stat Alarm Cleared */
+    BCMOLT_GROUP_ID_GPON_NI_STAT_ALARM_RAISED                                               = 455,  /**< GPON network interface - Stat Alarm Raised */
+    BCMOLT_GROUP_ID_GPON_NI_STATE_CHANGE_COMPLETED                                          = 456,  /**< GPON network interface - State Change Completed */
+    BCMOLT_GROUP_ID_GPON_NI_TOD_REQUEST_COMPLETED                                           = 457,  /**< GPON network interface - TOD request completed */
+    BCMOLT_GROUP_ID_GPON_NI_AUTO_CFG                                                        = 458,  /**< GPON network interface - Indication Configuration */
+    BCMOLT_GROUP_ID_GPON_NI_DISABLE_SERIAL_NUMBER                                           = 459,  /**< GPON network interface - Disable Serial Number */
+    BCMOLT_GROUP_ID_GPON_NI_PROTECTION_SWITCHING_TYPE_C_SET_MULTIPLE_ONU_STATE              = 460,  /**< GPON network interface - protection switching type c set multiple onu state */
+    BCMOLT_GROUP_ID_GPON_NI_RESET                                                           = 461,  /**< GPON network interface - Reset */
+    BCMOLT_GROUP_ID_GPON_NI_ROGUE_DETECTION_WINDOW                                          = 462,  /**< GPON network interface - Rogue Detection Window */
+    BCMOLT_GROUP_ID_GPON_NI_SET_ONU_STATE                                                   = 463,  /**< GPON network interface - Set ONU State */
+    BCMOLT_GROUP_ID_GPON_NI_SET_PON_STATE                                                   = 464,  /**< GPON network interface - Set PON State */
+    BCMOLT_GROUP_ID_GPON_NI_SINGLE_REQUEST_STANDBY_PON_MONITORING                           = 465,  /**< GPON network interface - Single request for standby PON monitoring */
+    BCMOLT_GROUP_ID_GPON_NI_START_ONU_UPGRADE                                               = 466,  /**< GPON network interface - Start ONU Firmware Upgrade */
+    BCMOLT_GROUP_ID_GPON_NI_TOD_REQUEST                                                     = 467,  /**< GPON network interface - TOD request */
+    BCMOLT_GROUP_ID_GPON_NI_BROADCAST_PLOAM_PACKET                                          = 468,  /**< GPON network interface - Broadcast PLOAM Packet */
+    BCMOLT_GROUP_ID_GPON_NI_CPU_PACKETS                                                     = 469,  /**< GPON network interface - GPON CPU Packets */
+    BCMOLT_GROUP_ID_GPON_ONU_KEY                                                            = 470,  /**< GPON ONU - key */
+    BCMOLT_GROUP_ID_GPON_ONU_CFG                                                            = 471,  /**< GPON ONU - cfg */
+    BCMOLT_GROUP_ID_GPON_ONU_STAT                                                           = 472,  /**< GPON ONU - stat */
+    BCMOLT_GROUP_ID_GPON_ONU_STAT_CFG_FEC_CODEWORDS                                         = 473,  /**< GPON ONU - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_ONU_STAT_CFG_FEC_BYTES_CORRECTED                                   = 474,  /**< GPON ONU - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_ONU_STAT_CFG_FEC_CODEWORDS_CORRECTED                               = 475,  /**< GPON ONU - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_ONU_STAT_CFG_FEC_CODEWORDS_UNCORRECTED                             = 476,  /**< GPON ONU - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_ONU_STAT_CFG_BIP8_BYTES                                            = 477,  /**< GPON ONU - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_ONU_STAT_CFG_BIP8_ERRORS                                           = 478,  /**< GPON ONU - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_ONU_STAT_CFG_RX_PLOAMS_CRC_ERROR                                   = 479,  /**< GPON ONU - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_ONU_STAT_CFG_RX_PLOAMS_NON_IDLE                                    = 480,  /**< GPON ONU - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_ONU_STAT_CFG_POSITIVE_DRIFT                                        = 481,  /**< GPON ONU - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_ONU_STAT_CFG_NEGATIVE_DRIFT                                        = 482,  /**< GPON ONU - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_ONU_STAT_CFG_RX_OMCI                                               = 483,  /**< GPON ONU - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_ONU_STAT_CFG_RX_OMCI_PACKETS_CRC_ERROR                             = 484,  /**< GPON ONU - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_ONU_STAT_CFG_BER_REPORTED                                          = 485,  /**< GPON ONU - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_ONU_STAT_CFG_UNRECEIVED_BURST                                      = 486,  /**< GPON ONU - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_ONU_STAT_CFG_LCDG_ERRORS                                           = 487,  /**< GPON ONU - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_ONU_STAT_CFG_RDI_ERRORS                                            = 488,  /**< GPON ONU - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_ONU_STAT_CFG_RX_BYTES                                              = 489,  /**< GPON ONU - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_ONU_STAT_CFG_RX_PACKETS                                            = 490,  /**< GPON ONU - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_ONU_STAT_CFG_TX_BYTES                                              = 491,  /**< GPON ONU - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_ONU_STAT_CFG_TX_PACKETS                                            = 492,  /**< GPON ONU - Statistic Configuration */
+    BCMOLT_GROUP_ID_GPON_ONU_BER_INTERVAL_CONFIGURATION_COMPLETED                           = 493,  /**< GPON ONU - BER Interval Configuration Completed */
+    BCMOLT_GROUP_ID_GPON_ONU_DFI                                                            = 494,  /**< GPON ONU - Receive Dying-Gasp of ONUi */
+    BCMOLT_GROUP_ID_GPON_ONU_DGI                                                            = 495,  /**< GPON ONU - Receive Dying-Gasp of ONUi */
+    BCMOLT_GROUP_ID_GPON_ONU_DOWI                                                           = 496,  /**< GPON ONU - Drift of Window of ONUi */
+    BCMOLT_GROUP_ID_GPON_ONU_ERR                                                            = 497,  /**< GPON ONU - ERR */
+    BCMOLT_GROUP_ID_GPON_ONU_INVALID_DBRU_REPORT                                            = 498,  /**< GPON ONU - Invalid DBRu Report */
+    BCMOLT_GROUP_ID_GPON_ONU_KEY_EXCHANGE_COMPLETED                                         = 499,  /**< GPON ONU - Key Exchange Completed */
+    BCMOLT_GROUP_ID_GPON_ONU_KEY_EXCHANGE_CYCLE_SKIPPED                                     = 500,  /**< GPON ONU - Key Exchange Cycle Skipped */
+    BCMOLT_GROUP_ID_GPON_ONU_KEY_EXCHANGE_DECRYPT_REQUIRED                                  = 501,  /**< GPON ONU - Key Exchange Decrypt Required */
+    BCMOLT_GROUP_ID_GPON_ONU_KEY_EXCHANGE_KEY_MISMATCH                                      = 502,  /**< GPON ONU - Key Exchange Key Mismatch */
+    BCMOLT_GROUP_ID_GPON_ONU_KEY_EXCHANGE_KEY_REQUEST_TIMEOUT                               = 503,  /**< GPON ONU - Key Exchange Key Request Timeout */
+    BCMOLT_GROUP_ID_GPON_ONU_KEY_EXCHANGE_UNCONSECUTIVE_INDEX                               = 504,  /**< GPON ONU - Key Exchange Unconsecutive Index */
+    BCMOLT_GROUP_ID_GPON_ONU_LOAI                                                           = 505,  /**< GPON ONU - LOAi */
+    BCMOLT_GROUP_ID_GPON_ONU_LOKI                                                           = 506,  /**< GPON ONU - LOki */
+    BCMOLT_GROUP_ID_GPON_ONU_MEMI                                                           = 507,  /**< GPON ONU - MEMi */
+    BCMOLT_GROUP_ID_GPON_ONU_OMCI_PORT_ID_CONFIGURATION_COMPLETED                           = 508,  /**< GPON ONU - OMCI PORT ID Configuration Completed */
+    BCMOLT_GROUP_ID_GPON_ONU_ONU_ACTIVATION_COMPLETED                                       = 509,  /**< GPON ONU - ONU Activation Completed */
+    BCMOLT_GROUP_ID_GPON_ONU_ONU_ACTIVATION_STANDBY_COMPLETED                               = 510,  /**< GPON ONU - onu activation standby completed */
+    BCMOLT_GROUP_ID_GPON_ONU_ONU_ALARM                                                      = 511,  /**< GPON ONU - ONU Alarm */
+    BCMOLT_GROUP_ID_GPON_ONU_ONU_DEACTIVATION_COMPLETED                                     = 512,  /**< GPON ONU - ONU Deactivation Completed */
+    BCMOLT_GROUP_ID_GPON_ONU_ONU_DISABLE_COMPLETED                                          = 513,  /**< GPON ONU - ONU Disable Completed */
+    BCMOLT_GROUP_ID_GPON_ONU_ONU_ENABLE_COMPLETED                                           = 514,  /**< GPON ONU - ONU Enable Completed */
+    BCMOLT_GROUP_ID_GPON_ONU_OPTICAL_REFLECTION                                             = 515,  /**< GPON ONU - Optical Reflection */
+    BCMOLT_GROUP_ID_GPON_ONU_PASSWORD_AUTHENTICATION_COMPLETED                              = 516,  /**< GPON ONU - Password Authentication Completed */
+    BCMOLT_GROUP_ID_GPON_ONU_PEE                                                            = 517,  /**< GPON ONU - PEE */
+    BCMOLT_GROUP_ID_GPON_ONU_POSSIBLE_DRIFT                                                 = 518,  /**< GPON ONU - Possible Drift */
+    BCMOLT_GROUP_ID_GPON_ONU_POWER_MANAGEMENT_STATE_CHANGE                                  = 519,  /**< GPON ONU - Power Management State Change */
+    BCMOLT_GROUP_ID_GPON_ONU_PST                                                            = 520,  /**< GPON ONU - PST */
+    BCMOLT_GROUP_ID_GPON_ONU_RANGING_COMPLETED                                              = 521,  /**< GPON ONU - Ranging Completed */
+    BCMOLT_GROUP_ID_GPON_ONU_REI                                                            = 522,  /**< GPON ONU - REI */
+    BCMOLT_GROUP_ID_GPON_ONU_RSSI_MEASUREMENT_COMPLETED                                     = 523,  /**< GPON ONU - RSSI Measurement Completed */
+    BCMOLT_GROUP_ID_GPON_ONU_SDI                                                            = 524,  /**< GPON ONU - Signal Degraded of ONUi */
+    BCMOLT_GROUP_ID_GPON_ONU_SFI                                                            = 525,  /**< GPON ONU - Signal Fail of ONUi */
+    BCMOLT_GROUP_ID_GPON_ONU_STAT_ALARM_CLEARED                                             = 526,  /**< GPON ONU - Stat Alarm Cleared */
+    BCMOLT_GROUP_ID_GPON_ONU_STAT_ALARM_RAISED                                              = 527,  /**< GPON ONU - Stat Alarm Raised */
+    BCMOLT_GROUP_ID_GPON_ONU_SUFI                                                           = 528,  /**< GPON ONU - SUFi */
+    BCMOLT_GROUP_ID_GPON_ONU_TIWI                                                           = 529,  /**< GPON ONU - Transmission Interference Warning */
+    BCMOLT_GROUP_ID_GPON_ONU_AUTO_CFG                                                       = 530,  /**< GPON ONU - Indication Configuration */
+    BCMOLT_GROUP_ID_GPON_ONU_CHANGE_POWER_LEVEL                                             = 531,  /**< GPON ONU - Change Power Level */
+    BCMOLT_GROUP_ID_GPON_ONU_RSSI_MEASUREMENT                                               = 532,  /**< GPON ONU - RSSI Measurement */
+    BCMOLT_GROUP_ID_GPON_ONU_SET_ONU_STATE                                                  = 533,  /**< GPON ONU - Set ONU State */
+    BCMOLT_GROUP_ID_GPON_ONU_CPU_PACKETS                                                    = 534,  /**< GPON ONU - GPON CPU Packets */
+    BCMOLT_GROUP_ID_GPON_ONU_PLOAM_PACKET                                                   = 535,  /**< GPON ONU - PLOAM Packet */
+    BCMOLT_GROUP_ID_GPON_ONU_CPU_PACKET                                                     = 536,  /**< GPON ONU - GPON CPU packet */
+    BCMOLT_GROUP_ID_GPON_ONU_OMCI_PACKET                                                    = 537,  /**< GPON ONU - GPON OMCI packet */
+    BCMOLT_GROUP_ID_GPON_TRX_KEY                                                            = 538,  /**< GPON TRX - key */
+    BCMOLT_GROUP_ID_GPON_TRX_CFG                                                            = 539,  /**< GPON TRX - cfg */
+    BCMOLT_GROUP_ID_LOG_ENTRY_KEY                                                           = 540,  /**< log entry - key */
+    BCMOLT_GROUP_ID_LOG_ENTRY_CFG                                                           = 541,  /**< log entry - cfg */
+    BCMOLT_GROUP_ID_LOG_ENTRY_STAT                                                          = 542,  /**< log entry - stat */
+    BCMOLT_GROUP_ID_LOG_ENTRY_STAT_CFG_MSG_COUNT                                            = 543,  /**< log entry - Statistic Configuration */
+    BCMOLT_GROUP_ID_LOG_ENTRY_STAT_CFG_LOST_MSG_COUNT                                       = 544,  /**< log entry - Statistic Configuration */
+    BCMOLT_GROUP_ID_LOG_ENTRY_STAT_ALARM_CLEARED                                            = 545,  /**< log entry - Stat Alarm Cleared */
+    BCMOLT_GROUP_ID_LOG_ENTRY_STAT_ALARM_RAISED                                             = 546,  /**< log entry - Stat Alarm Raised */
+    BCMOLT_GROUP_ID_LOG_ENTRY_AUTO_CFG                                                      = 547,  /**< log entry - Indication Configuration */
+    BCMOLT_GROUP_ID_LOGGER_KEY                                                              = 548,  /**< logger - key */
+    BCMOLT_GROUP_ID_LOGGER_CFG                                                              = 549,  /**< logger - cfg */
+    BCMOLT_GROUP_ID_LOGGER_STAT                                                             = 550,  /**< logger - stat */
+    BCMOLT_GROUP_ID_LOGGER_STAT_CFG_LINES_IN_LOG                                            = 551,  /**< logger - Statistic Configuration */
+    BCMOLT_GROUP_ID_LOGGER_STAT_ALARM_CLEARED                                               = 552,  /**< logger - Stat Alarm Cleared */
+    BCMOLT_GROUP_ID_LOGGER_STAT_ALARM_RAISED                                                = 553,  /**< logger - Stat Alarm Raised */
+    BCMOLT_GROUP_ID_LOGGER_AUTO_CFG                                                         = 554,  /**< logger - Indication Configuration */
+    BCMOLT_GROUP_ID_LOGGER_CLEAR_LOG                                                        = 555,  /**< logger - clear log */
+    BCMOLT_GROUP_ID_NNI_KEY                                                                 = 556,  /**< NNI - key */
+    BCMOLT_GROUP_ID_NNI_CFG                                                                 = 557,  /**< NNI - cfg */
+    BCMOLT_GROUP_ID_NNI_STAT                                                                = 558,  /**< NNI - stat */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_FRAMES_64                                               = 559,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_FRAMES_65_127                                           = 560,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_FRAMES_128_255                                          = 561,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_FRAMES_256_511                                          = 562,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_FRAMES_512_1023                                         = 563,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_FRAMES_1024_1518                                        = 564,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_FRAMES_1519_2047                                        = 565,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_FRAMES_2048_4095                                        = 566,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_FRAMES_4096_9216                                        = 567,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_FRAMES_9217_16383                                       = 568,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_FRAMES                                                  = 569,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_BYTES                                                   = 570,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_GOOD_FRAMES                                             = 571,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_UNICAST_FRAMES                                          = 572,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_MULTICAST_FRAMES                                        = 573,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_BROADCAST_FRAMES                                        = 574,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_FCS_ERRORS                                              = 575,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_CONTROL_FRAMES                                          = 576,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_PAUSE_FRAMES                                            = 577,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_PFC_FRAMES                                              = 578,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_UNSUPPORTED_OPCODE                                      = 579,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_UNSUPPORTED_DA                                          = 580,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_ALIGNMENT_ERRORS                                        = 581,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_LENGTH_OUT_OF_RANGE                                     = 582,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_CODE_ERRORS                                             = 583,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_OVERSIZED_FRAMES                                        = 584,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_JABBER_FRAMES                                           = 585,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_MTU_CHECK_ERRORS                                        = 586,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_PROMISCUOUS_FRAMES                                      = 587,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_VLAN_FRAMES                                             = 588,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_DOUBLE_VLAN_FRAMES                                      = 589,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_TRUNCATED_FRAMES                                        = 590,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_UNDERSIZE_FRAMES                                        = 591,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_FRAGMENTED_FRAMES                                       = 592,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_RUNT_FRAMES                                             = 593,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_FRAMES_64                                               = 594,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_FRAMES_65_127                                           = 595,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_FRAMES_128_255                                          = 596,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_FRAMES_256_511                                          = 597,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_FRAMES_512_1023                                         = 598,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_FRAMES_1024_1518                                        = 599,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_FRAMES_1519_2047                                        = 600,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_FRAMES_2048_4095                                        = 601,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_FRAMES_4096_9216                                        = 602,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_FRAMES_9217_16383                                       = 603,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_FRAMES                                                  = 604,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_BYTES                                                   = 605,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_GOOD_FRAMES                                             = 606,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_UNICAST_FRAMES                                          = 607,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_MULTICAST_FRAMES                                        = 608,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_BROADCAST_FRAMES                                        = 609,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_PAUSE_FRAMES                                            = 610,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_PFC_FRAMES                                              = 611,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_JABBER_FRAMES                                           = 612,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_FCS_ERRORS                                              = 613,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_CONTROL_FRAMES                                          = 614,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_OVERSIZE_FRAMES                                         = 615,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_FRAGMENTED_FRAMES                                       = 616,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_ERROR_FRAMES                                            = 617,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_VLAN_FRAMES                                             = 618,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_DOUBLE_VLAN_FRAMES                                      = 619,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_RUNT_FRAMES                                             = 620,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_UNDERRUN_FRAMES                                         = 621,  /**< NNI - Statistic Configuration */
+    BCMOLT_GROUP_ID_NNI_STAT_ALARM_CLEARED                                                  = 622,  /**< NNI - Stat Alarm Cleared */
+    BCMOLT_GROUP_ID_NNI_STAT_ALARM_RAISED                                                   = 623,  /**< NNI - Stat Alarm Raised */
+    BCMOLT_GROUP_ID_NNI_STATUS_CHANGED                                                      = 624,  /**< NNI - Status changed */
+    BCMOLT_GROUP_ID_NNI_AUTO_CFG                                                            = 625,  /**< NNI - Indication Configuration */
+    BCMOLT_GROUP_ID_NNI_SERDES_KEY                                                          = 626,  /**< nni_serdes - key */
+    BCMOLT_GROUP_ID_NNI_SERDES_CFG                                                          = 627,  /**< nni_serdes - cfg */
+    BCMOLT_GROUP_ID_SOFTWARE_ERROR_KEY                                                      = 628,  /**< Software Error - key */
+    BCMOLT_GROUP_ID_SOFTWARE_ERROR_CFG                                                      = 629,  /**< Software Error - cfg */
+    BCMOLT_GROUP_ID_TRX_CALIBRATION_KEY                                                     = 630,  /**< TRX Calibration - key */
+    BCMOLT_GROUP_ID_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED                  = 631,  /**< TRX Calibration - Capture window and statistic completed */
+    BCMOLT_GROUP_ID_TRX_CALIBRATION_AUTO_CFG                                                = 632,  /**< TRX Calibration - Indication Configuration */
+    BCMOLT_GROUP_ID_TRX_CALIBRATION_START_CAPTURE_WINDOW                                    = 633,  /**< TRX Calibration - start capture window */
+    BCMOLT_GROUP_ID_TRX_CALIBRATION_STOP_CAPTURE_WINDOW                                     = 634,  /**< TRX Calibration - stop capture window */
+    BCMOLT_GROUP_ID_XGPON_ALLOC_KEY                                                         = 635,  /**< XGPON Alloc - key */
+    BCMOLT_GROUP_ID_XGPON_ALLOC_CFG                                                         = 636,  /**< XGPON Alloc - cfg */
+    BCMOLT_GROUP_ID_XGPON_ALLOC_STAT                                                        = 637,  /**< XGPON Alloc - stat */
+    BCMOLT_GROUP_ID_XGPON_ALLOC_STAT_CFG_RX_BYTES                                           = 638,  /**< XGPON Alloc - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_ALLOC_CONFIGURATION_COMPLETED                                     = 639,  /**< XGPON Alloc - Configuration Completed */
+    BCMOLT_GROUP_ID_XGPON_ALLOC_GET_ALLOC_STATS_COMPLETED                                   = 640,  /**< XGPON Alloc - Get alloc ID statistics completed */
+    BCMOLT_GROUP_ID_XGPON_ALLOC_STAT_ALARM_CLEARED                                          = 641,  /**< XGPON Alloc - Stat Alarm Cleared */
+    BCMOLT_GROUP_ID_XGPON_ALLOC_STAT_ALARM_RAISED                                           = 642,  /**< XGPON Alloc - Stat Alarm Raised */
+    BCMOLT_GROUP_ID_XGPON_ALLOC_AUTO_CFG                                                    = 643,  /**< XGPON Alloc - Indication Configuration */
+    BCMOLT_GROUP_ID_XGPON_ALLOC_GET_STATS                                                   = 644,  /**< XGPON Alloc - Get statistics */
+    BCMOLT_GROUP_ID_XGPON_ALLOC_SET_STATE                                                   = 645,  /**< XGPON Alloc - Set state */
+    BCMOLT_GROUP_ID_XGPON_GEM_PORT_KEY                                                      = 646,  /**< XGPON GEM port - key */
+    BCMOLT_GROUP_ID_XGPON_GEM_PORT_CFG                                                      = 647,  /**< XGPON GEM port - cfg */
+    BCMOLT_GROUP_ID_XGPON_GEM_PORT_STAT                                                     = 648,  /**< XGPON GEM port - stat */
+    BCMOLT_GROUP_ID_XGPON_GEM_PORT_STAT_CFG_TX_BYTES                                        = 649,  /**< XGPON GEM port - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_GEM_PORT_STAT_CFG_TX_PACKETS                                      = 650,  /**< XGPON GEM port - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_GEM_PORT_STAT_CFG_RX_PACKETS                                      = 651,  /**< XGPON GEM port - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_GEM_PORT_STAT_CFG_RX_BYTES                                        = 652,  /**< XGPON GEM port - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_GEM_PORT_STAT_ALARM_CLEARED                                       = 653,  /**< XGPON GEM port - Stat Alarm Cleared */
+    BCMOLT_GROUP_ID_XGPON_GEM_PORT_STAT_ALARM_RAISED                                        = 654,  /**< XGPON GEM port - Stat Alarm Raised */
+    BCMOLT_GROUP_ID_XGPON_GEM_PORT_AUTO_CFG                                                 = 655,  /**< XGPON GEM port - Indication Configuration */
+    BCMOLT_GROUP_ID_XGPON_IWF_KEY                                                           = 656,  /**< XGPON IWF - key */
+    BCMOLT_GROUP_ID_XGPON_IWF_CFG                                                           = 657,  /**< XGPON IWF - cfg */
+    BCMOLT_GROUP_ID_XGPON_NI_KEY                                                            = 658,  /**< XGPON network interface - key */
+    BCMOLT_GROUP_ID_XGPON_NI_CFG                                                            = 659,  /**< XGPON network interface - cfg */
+    BCMOLT_GROUP_ID_XGPON_NI_STAT                                                           = 660,  /**< XGPON network interface - stat */
+    BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_FEC_CODEWORDS                                         = 661,  /**< XGPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_BIP32_BYTES                                           = 662,  /**< XGPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_BIP32_ERRORS                                          = 663,  /**< XGPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_XGTC_HEADERS                                       = 664,  /**< XGPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_XGTC_CORRECTED                                     = 665,  /**< XGPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_XGTC_UNCORRECTED                                   = 666,  /**< XGPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_XGEM                                               = 667,  /**< XGPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_XGEM_DROPPED                                       = 668,  /**< XGPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_XGEM_IDLE                                          = 669,  /**< XGPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_XGEM_CORRECTED                                     = 670,  /**< XGPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_CRC_ERROR                                          = 671,  /**< XGPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_FRAGMENT_ERROR                                     = 672,  /**< XGPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_PACKETS_DROPPED                                    = 673,  /**< XGPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_DROPPED_TOO_SHORT                                  = 674,  /**< XGPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_DROPPED_TOO_LONG                                   = 675,  /**< XGPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_KEY_ERROR                                          = 676,  /**< XGPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_TX_PLOAMS                                             = 677,  /**< XGPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_PLOAMS_DROPPED                                     = 678,  /**< XGPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_ALLOCATIONS_VALID                                  = 679,  /**< XGPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_ALLOCATIONS_INVALID                                = 680,  /**< XGPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_ALLOCATIONS_DISABLED                               = 681,  /**< XGPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_PLOAMS                                             = 682,  /**< XGPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_PLOAMS_NON_IDLE                                    = 683,  /**< XGPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_PLOAMS_ERROR                                       = 684,  /**< XGPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_CPU                                                = 685,  /**< XGPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_OMCI                                               = 686,  /**< XGPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_OMCI_PACKETS_CRC_ERROR                             = 687,  /**< XGPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_TX_PACKETS                                            = 688,  /**< XGPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_TX_XGEM                                               = 689,  /**< XGPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_TX_CPU                                                = 690,  /**< XGPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_TX_OMCI                                               = 691,  /**< XGPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_TX_CPU_OMCI_PACKETS_DROPPED                           = 692,  /**< XGPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_TX_DROPPED_ILLEGAL_LENGTH                             = 693,  /**< XGPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_TX_DROPPED_TPID_MISS                                  = 694,  /**< XGPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_TX_DROPPED_VID_MISS                                   = 695,  /**< XGPON network interface - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_NI_ACTIVATE_ALL_ONUS_COMPLETED                                    = 696,  /**< XGPON network interface - activate all onus completed */
+    BCMOLT_GROUP_ID_XGPON_NI_CPU_PACKETS_FAILURE                                            = 697,  /**< XGPON network interface - CPU Packets Failure */
+    BCMOLT_GROUP_ID_XGPON_NI_DEACTIVATE_ALL_ONUS_COMPLETED                                  = 698,  /**< XGPON network interface - deactivate all onus completed */
+    BCMOLT_GROUP_ID_XGPON_NI_DISABLE_ALL_ONUS_COMPLETED                                     = 699,  /**< XGPON network interface - disable all onus completed */
+    BCMOLT_GROUP_ID_XGPON_NI_ENABLE_ALL_ONUS_COMPLETED                                      = 700,  /**< XGPON network interface - enable all onus completed */
+    BCMOLT_GROUP_ID_XGPON_NI_LOS                                                            = 701,  /**< XGPON network interface - LOS */
+    BCMOLT_GROUP_ID_XGPON_NI_ONU_DISCOVERED                                                 = 702,  /**< XGPON network interface - ONU Discovered */
+    BCMOLT_GROUP_ID_XGPON_NI_ONU_UPGRADE_COMPLETE                                           = 703,  /**< XGPON network interface - ONU Upgrade Complete */
+    BCMOLT_GROUP_ID_XGPON_NI_PROTECTION_SWITCHING_ONUS_RANGED                               = 704,  /**< XGPON network interface - Protection Switching ONUs Ranged */
+    BCMOLT_GROUP_ID_XGPON_NI_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED                      = 705,  /**< XGPON network interface - Protection Switching Switchover Completed */
+    BCMOLT_GROUP_ID_XGPON_NI_PROTECTION_SWITCHING_TRAFFIC_RESUME                            = 706,  /**< XGPON network interface - Protection Switching Traffic Resume */
+    BCMOLT_GROUP_ID_XGPON_NI_ROGUE_DETECTION_COMPLETED                                      = 707,  /**< XGPON network interface - Rogue detection completed */
+    BCMOLT_GROUP_ID_XGPON_NI_ROGUE_ONU_SPECIAL_MAP_CYCLE_START                              = 708,  /**< XGPON network interface - Rogue ONU special map cycle start */
+    BCMOLT_GROUP_ID_XGPON_NI_SERIAL_NUMBER_ACQUISITION_CYCLE_START                          = 709,  /**< XGPON network interface - Serial Number Acquisition Cycle Start */
+    BCMOLT_GROUP_ID_XGPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED                         = 710,  /**< XGPON network interface - Standby PON Monitoring Cycle Completed */
+    BCMOLT_GROUP_ID_XGPON_NI_STAT_ALARM_CLEARED                                             = 711,  /**< XGPON network interface - Stat Alarm Cleared */
+    BCMOLT_GROUP_ID_XGPON_NI_STAT_ALARM_RAISED                                              = 712,  /**< XGPON network interface - Stat Alarm Raised */
+    BCMOLT_GROUP_ID_XGPON_NI_STATE_CHANGE_COMPLETED                                         = 713,  /**< XGPON network interface - State Change Completed */
+    BCMOLT_GROUP_ID_XGPON_NI_TOD_REQUEST_COMPLETED                                          = 714,  /**< XGPON network interface - TOD request completed */
+    BCMOLT_GROUP_ID_XGPON_NI_AUTO_CFG                                                       = 715,  /**< XGPON network interface - Indication Configuration */
+    BCMOLT_GROUP_ID_XGPON_NI_ADJUST_TX_WAVELENGTH                                           = 716,  /**< XGPON network interface - Adjust Tx Wavelengh */
+    BCMOLT_GROUP_ID_XGPON_NI_DISABLE_SERIAL_NUMBER                                          = 717,  /**< XGPON network interface - Disable Serial Number */
+    BCMOLT_GROUP_ID_XGPON_NI_RESET                                                          = 718,  /**< XGPON network interface - Reset */
+    BCMOLT_GROUP_ID_XGPON_NI_ROGUE_DETECTION_WINDOW                                         = 719,  /**< XGPON network interface - Rogue Detection Window */
+    BCMOLT_GROUP_ID_XGPON_NI_RUN_SPECIAL_BW_MAP                                             = 720,  /**< XGPON network interface - Run Special BW Map */
+    BCMOLT_GROUP_ID_XGPON_NI_SET_ONU_STATE                                                  = 721,  /**< XGPON network interface - Set ONU State */
+    BCMOLT_GROUP_ID_XGPON_NI_SET_PON_STATE                                                  = 722,  /**< XGPON network interface - Set PON State */
+    BCMOLT_GROUP_ID_XGPON_NI_SINGLE_REQUEST_STANDBY_PON_MONITORING                          = 723,  /**< XGPON network interface - Single request standby PON Monitoring */
+    BCMOLT_GROUP_ID_XGPON_NI_START_ONU_UPGRADE                                              = 724,  /**< XGPON network interface - Start ONU Firmware Upgrade */
+    BCMOLT_GROUP_ID_XGPON_NI_TOD_REQUEST                                                    = 725,  /**< XGPON network interface - TOD request */
+    BCMOLT_GROUP_ID_XGPON_NI_BROADCAST_PLOAM_PACKET                                         = 726,  /**< XGPON network interface - Broadcast PLOAM Packet */
+    BCMOLT_GROUP_ID_XGPON_NI_CPU_PACKETS                                                    = 727,  /**< XGPON network interface - XGPON CPU packets */
+    BCMOLT_GROUP_ID_XGPON_ONU_KEY                                                           = 728,  /**< XGPON ONU - key */
+    BCMOLT_GROUP_ID_XGPON_ONU_CFG                                                           = 729,  /**< XGPON ONU - cfg */
+    BCMOLT_GROUP_ID_XGPON_ONU_STAT                                                          = 730,  /**< XGPON ONU - stat */
+    BCMOLT_GROUP_ID_XGPON_ONU_STAT_CFG_POSITIVE_DRIFT                                       = 731,  /**< XGPON ONU - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_ONU_STAT_CFG_NEGATIVE_DRIFT                                       = 732,  /**< XGPON ONU - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_ONU_STAT_CFG_DELIMITER_MISS_DETECTION                             = 733,  /**< XGPON ONU - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_ONU_STAT_CFG_BIP32_ERRORS                                         = 734,  /**< XGPON ONU - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_ONU_STAT_CFG_RX_WORDS                                             = 735,  /**< XGPON ONU - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_ONU_STAT_CFG_FEC_CORRECTED_SYMBOLS                                = 736,  /**< XGPON ONU - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_ONU_STAT_CFG_FEC_CORRECTED_CODEWORDS                              = 737,  /**< XGPON ONU - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_ONU_STAT_CFG_FEC_UNCORRECTABLE_CODEWORDS                          = 738,  /**< XGPON ONU - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_ONU_STAT_CFG_FEC_CODEWORDS                                        = 739,  /**< XGPON ONU - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_ONU_STAT_CFG_FEC_CORRECTED_BITS                                   = 740,  /**< XGPON ONU - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_ONU_STAT_CFG_XGEM_KEY_ERRORS                                      = 741,  /**< XGPON ONU - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_ONU_STAT_CFG_XGEM_LOSS                                            = 742,  /**< XGPON ONU - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_ONU_STAT_CFG_RX_PLOAMS_MIC_ERROR                                  = 743,  /**< XGPON ONU - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_ONU_STAT_CFG_RX_PLOAMS_NON_IDLE                                   = 744,  /**< XGPON ONU - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_ONU_STAT_CFG_RX_OMCI                                              = 745,  /**< XGPON ONU - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_ONU_STAT_CFG_RX_OMCI_PACKETS_CRC_ERROR                            = 746,  /**< XGPON ONU - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_ONU_STAT_CFG_RX_BYTES                                             = 747,  /**< XGPON ONU - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_ONU_STAT_CFG_RX_PACKETS                                           = 748,  /**< XGPON ONU - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_ONU_STAT_CFG_TX_BYTES                                             = 749,  /**< XGPON ONU - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_ONU_STAT_CFG_TX_PACKETS                                           = 750,  /**< XGPON ONU - Statistic Configuration */
+    BCMOLT_GROUP_ID_XGPON_ONU_DFI                                                           = 751,  /**< XGPON ONU - Receive Dying-Gasp of ONUi */
+    BCMOLT_GROUP_ID_XGPON_ONU_DGI                                                           = 752,  /**< XGPON ONU - Receive Dying-Gasp of ONUi */
+    BCMOLT_GROUP_ID_XGPON_ONU_DOWI                                                          = 753,  /**< XGPON ONU - Drift of Window of ONUi */
+    BCMOLT_GROUP_ID_XGPON_ONU_INVALID_DBRU_REPORT                                           = 754,  /**< XGPON ONU - Invalid DBRu Report */
+    BCMOLT_GROUP_ID_XGPON_ONU_KEY_EXCHANGE_COMPLETED                                        = 755,  /**< XGPON ONU - Key Exchange Completed */
+    BCMOLT_GROUP_ID_XGPON_ONU_KEY_EXCHANGE_CYCLE_SKIPPED                                    = 756,  /**< XGPON ONU - Key Exchange Cycle Skipped */
+    BCMOLT_GROUP_ID_XGPON_ONU_KEY_EXCHANGE_KEY_MISMATCH                                     = 757,  /**< XGPON ONU - Key Exchange Key Mismatch */
+    BCMOLT_GROUP_ID_XGPON_ONU_KEY_EXCHANGE_KEY_REQUEST_TIMEOUT                              = 758,  /**< XGPON ONU - Key Exchange Key Request Timeout */
+    BCMOLT_GROUP_ID_XGPON_ONU_LOOCI                                                         = 759,  /**< XGPON ONU - LOOCi */
+    BCMOLT_GROUP_ID_XGPON_ONU_ONU_ACTIVATION_COMPLETED                                      = 760,  /**< XGPON ONU - ONU Activation Completed */
+    BCMOLT_GROUP_ID_XGPON_ONU_ONU_ALARM                                                     = 761,  /**< XGPON ONU - ONU Alarm */
+    BCMOLT_GROUP_ID_XGPON_ONU_ONU_DEACTIVATION_COMPLETED                                    = 762,  /**< XGPON ONU - ONU Deactivation Completed */
+    BCMOLT_GROUP_ID_XGPON_ONU_ONU_DISABLE_COMPLETED                                         = 763,  /**< XGPON ONU - ONU Disable Completed */
+    BCMOLT_GROUP_ID_XGPON_ONU_ONU_ENABLE_COMPLETED                                          = 764,  /**< XGPON ONU - ONU Enable Completed */
+    BCMOLT_GROUP_ID_XGPON_ONU_ONU_TUNING_IN_COMPLETED                                       = 765,  /**< XGPON ONU - ONU Tuning in completed */
+    BCMOLT_GROUP_ID_XGPON_ONU_ONU_TUNING_OUT_COMPLETED                                      = 766,  /**< XGPON ONU - ONU Tuning out completed */
+    BCMOLT_GROUP_ID_XGPON_ONU_OPTICAL_REFLECTION                                            = 767,  /**< XGPON ONU - Optical Reflection */
+    BCMOLT_GROUP_ID_XGPON_ONU_POSSIBLE_DRIFT                                                = 768,  /**< XGPON ONU - Possible Drift */
+    BCMOLT_GROUP_ID_XGPON_ONU_POWER_CONSUMPTION_REPORT                                      = 769,  /**< XGPON ONU - Power consumption report */
+    BCMOLT_GROUP_ID_XGPON_ONU_POWER_LEVEL_REPORT                                            = 770,  /**< XGPON ONU - Power level report */
+    BCMOLT_GROUP_ID_XGPON_ONU_POWER_MANAGEMENT_STATE_CHANGE                                 = 771,  /**< XGPON ONU - Power Management State Change */
+    BCMOLT_GROUP_ID_XGPON_ONU_PQSI                                                          = 772,  /**< XGPON ONU - ploam queue status */
+    BCMOLT_GROUP_ID_XGPON_ONU_RANGING_COMPLETED                                             = 773,  /**< XGPON ONU - Ranging Completed */
+    BCMOLT_GROUP_ID_XGPON_ONU_REGISTRATION_ID                                               = 774,  /**< XGPON ONU - Registration ID */
+    BCMOLT_GROUP_ID_XGPON_ONU_RSSI_MEASUREMENT_COMPLETED                                    = 775,  /**< XGPON ONU - RSSI Measurement Completed */
+    BCMOLT_GROUP_ID_XGPON_ONU_SDI                                                           = 776,  /**< XGPON ONU - Signal Degraded of ONUi */
+    BCMOLT_GROUP_ID_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_FAILURE                          = 777,  /**< XGPON ONU - secure mutual authentication failure */
+    BCMOLT_GROUP_ID_XGPON_ONU_SFI                                                           = 778,  /**< XGPON ONU - Signal Fail of ONUi */
+    BCMOLT_GROUP_ID_XGPON_ONU_STAT_ALARM_CLEARED                                            = 779,  /**< XGPON ONU - Stat Alarm Cleared */
+    BCMOLT_GROUP_ID_XGPON_ONU_STAT_ALARM_RAISED                                             = 780,  /**< XGPON ONU - Stat Alarm Raised */
+    BCMOLT_GROUP_ID_XGPON_ONU_SUFI                                                          = 781,  /**< XGPON ONU - SUFi */
+    BCMOLT_GROUP_ID_XGPON_ONU_TIWI                                                          = 782,  /**< XGPON ONU - Transmission Interference Warning */
+    BCMOLT_GROUP_ID_XGPON_ONU_TUNING_RESPONSE                                               = 783,  /**< XGPON ONU - Tuning response */
+    BCMOLT_GROUP_ID_XGPON_ONU_AUTO_CFG                                                      = 784,  /**< XGPON ONU - Indication Configuration */
+    BCMOLT_GROUP_ID_XGPON_ONU_ADJUST_TX_WAVELENGTH                                          = 785,  /**< XGPON ONU - Adjust Tx wavelength */
+    BCMOLT_GROUP_ID_XGPON_ONU_CHANGE_POWER_LEVELLING                                        = 786,  /**< XGPON ONU - Change power levelling */
+    BCMOLT_GROUP_ID_XGPON_ONU_GET_POWER_CONSUMPTION                                         = 787,  /**< XGPON ONU - Get power consumption */
+    BCMOLT_GROUP_ID_XGPON_ONU_GET_POWER_LEVEL                                               = 788,  /**< XGPON ONU - Get power level */
+    BCMOLT_GROUP_ID_XGPON_ONU_ONU_TUNING_IN                                                 = 789,  /**< XGPON ONU - ONU Tuning in */
+    BCMOLT_GROUP_ID_XGPON_ONU_ONU_TUNING_OUT                                                = 790,  /**< XGPON ONU - ONU Tuning out */
+    BCMOLT_GROUP_ID_XGPON_ONU_REQUEST_REGISTRATION                                          = 791,  /**< XGPON ONU - Request registration */
+    BCMOLT_GROUP_ID_XGPON_ONU_RSSI_MEASUREMENT                                              = 792,  /**< XGPON ONU - RSSI Measurement */
+    BCMOLT_GROUP_ID_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION                                  = 793,  /**< XGPON ONU - Secure mutual authentication */
+    BCMOLT_GROUP_ID_XGPON_ONU_SET_ONU_STATE                                                 = 794,  /**< XGPON ONU - Set ONU State */
+    BCMOLT_GROUP_ID_XGPON_ONU_CPU_PACKETS                                                   = 795,  /**< XGPON ONU - XGPON CPU packets */
+    BCMOLT_GROUP_ID_XGPON_ONU_PLOAM_PACKET                                                  = 796,  /**< XGPON ONU - PLOAM Packet */
+    BCMOLT_GROUP_ID_XGPON_ONU_CPU_PACKET                                                    = 797,  /**< XGPON ONU - XGPON CPU packet */
+    BCMOLT_GROUP_ID_XGPON_ONU_OMCI_PACKET                                                   = 798,  /**< XGPON ONU - XGPON OMCI packet */
+    BCMOLT_GROUP_ID_XGPON_TRX_KEY                                                           = 799,  /**< XGPON TRX - key */
+    BCMOLT_GROUP_ID_XGPON_TRX_CFG                                                           = 800,  /**< XGPON TRX - cfg */
+    BCMOLT_GROUP_ID_XPON_SERDES_KEY                                                         = 801,  /**< xpon_serdes - key */
+    BCMOLT_GROUP_ID_XPON_SERDES_CFG                                                         = 802,  /**< xpon_serdes - cfg */
+    BCMOLT_GROUP_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_group_id;
+
+/** List of all ae_ni groups of type oper. 
+ */
+typedef enum bcmolt_ae_ni_oper_id
+{
+    BCMOLT_AE_NI_OPER_ID__BEGIN,
+    BCMOLT_AE_NI_OPER_ID_SET_AE_NI_EN_STATE                                                 = 0,    /**< Set AE NI Enable State. */
+    BCMOLT_AE_NI_OPER_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_ae_ni_oper_id;
+
+/** List of all ae_path_ds groups of type auto. 
+ */
+typedef enum bcmolt_ae_path_ds_auto_id
+{
+    BCMOLT_AE_PATH_DS_AUTO_ID__BEGIN,
+    BCMOLT_AE_PATH_DS_AUTO_ID_STAT_ALARM_CLEARED                                            = 0,    /**< Stat Alarm Cleared. */
+    BCMOLT_AE_PATH_DS_AUTO_ID_STAT_ALARM_RAISED,    /**< Stat Alarm Raised. */
+    BCMOLT_AE_PATH_DS_AUTO_ID__NUM_OF               /**< Number of enum entries, not an entry itself. */
+} bcmolt_ae_path_ds_auto_id;
+
+/** List of all ae_path_us groups of type auto. 
+ */
+typedef enum bcmolt_ae_path_us_auto_id
+{
+    BCMOLT_AE_PATH_US_AUTO_ID__BEGIN,
+    BCMOLT_AE_PATH_US_AUTO_ID_STAT_ALARM_CLEARED                                            = 0,    /**< Stat Alarm Cleared. */
+    BCMOLT_AE_PATH_US_AUTO_ID_STAT_ALARM_RAISED,    /**< Stat Alarm Raised. */
+    BCMOLT_AE_PATH_US_AUTO_ID__NUM_OF               /**< Number of enum entries, not an entry itself. */
+} bcmolt_ae_path_us_auto_id;
+
+/** List of all debug groups of type auto. 
+ */
+typedef enum bcmolt_debug_auto_id
+{
+    BCMOLT_DEBUG_AUTO_ID__BEGIN,
+    BCMOLT_DEBUG_AUTO_ID_CLI_OUTPUT                                                         = 0,    /**< cli_output. */
+    BCMOLT_DEBUG_AUTO_ID_FILE_ALMOST_FULL,  /**< file_almost_full. */
+    BCMOLT_DEBUG_AUTO_ID__NUM_OF            /**< Number of enum entries, not an entry itself. */
+} bcmolt_debug_auto_id;
+
+/** List of all debug groups of type oper. 
+ */
+typedef enum bcmolt_debug_oper_id
+{
+    BCMOLT_DEBUG_OPER_ID__BEGIN,
+    BCMOLT_DEBUG_OPER_ID_CLI_INPUT                                                          = 0,    /**< CLI_input. */
+    BCMOLT_DEBUG_OPER_ID_RESET_API_CAPTURE, /**< Reset API Capture. */
+    BCMOLT_DEBUG_OPER_ID_START_API_CAPTURE, /**< Start API Capture. */
+    BCMOLT_DEBUG_OPER_ID_STOP_API_CAPTURE,  /**< Stop API Capture. */
+    BCMOLT_DEBUG_OPER_ID__NUM_OF            /**< Number of enum entries, not an entry itself. */
+} bcmolt_debug_oper_id;
+
+/** List of all device groups of type auto. 
+ */
+typedef enum bcmolt_device_auto_id
+{
+    BCMOLT_DEVICE_AUTO_ID__BEGIN,
+    BCMOLT_DEVICE_AUTO_ID_CONNECTION_COMPLETE                                               = 0,    /**< Connection Complete. */
+    BCMOLT_DEVICE_AUTO_ID_CONNECTION_ESTABLISHED,   /**< Connection Established (Internal). */
+    BCMOLT_DEVICE_AUTO_ID_CONNECTION_FAILURE,       /**< Connection Failure. */
+    BCMOLT_DEVICE_AUTO_ID_DDR_TEST_COMPLETE,        /**< DDR Test Complete. */
+    BCMOLT_DEVICE_AUTO_ID_DEVICE_KEEP_ALIVE,        /**< Device Keep Alive (Internal). */
+    BCMOLT_DEVICE_AUTO_ID_DEVICE_READY,             /**< Device Ready (Internal). */
+    BCMOLT_DEVICE_AUTO_ID_DISCONNECTION_COMPLETE,   /**< Disconnection Complete. */
+    BCMOLT_DEVICE_AUTO_ID_IMAGE_TRANSFER_COMPLETE,  /**< Image Transfer Complete. */
+    BCMOLT_DEVICE_AUTO_ID_INDICATIONS_DROPPED,      /**< Indications Dropped. */
+    BCMOLT_DEVICE_AUTO_ID_SW_ERROR,                 /**< sw error. */
+    BCMOLT_DEVICE_AUTO_ID_SW_EXCEPTION,             /**< sw exception. */
+    BCMOLT_DEVICE_AUTO_ID__NUM_OF                   /**< Number of enum entries, not an entry itself. */
+} bcmolt_device_auto_id;
+
+/** List of all device groups of type oper. 
+ */
+typedef enum bcmolt_device_oper_id
+{
+    BCMOLT_DEVICE_OPER_ID__BEGIN,
+    BCMOLT_DEVICE_OPER_ID_CONNECT                                                           = 0,    /**< Connect. */
+    BCMOLT_DEVICE_OPER_ID_DISCONNECT,           /**< Device Disconnect. */
+    BCMOLT_DEVICE_OPER_ID_HOST_KEEP_ALIVE,      /**< Host Keep Alive (Internal). */
+    BCMOLT_DEVICE_OPER_ID_IMAGE_TRANSFER_DATA,  /**< Image Data Transfer Operation (Internal). */
+    BCMOLT_DEVICE_OPER_ID_IMAGE_TRANSFER_START, /**< Start Image Transfer Operation. */
+    BCMOLT_DEVICE_OPER_ID_RESET,                /**< Device Reset. */
+    BCMOLT_DEVICE_OPER_ID_RUN_DDR_TEST,         /**< Run DDR Test. */
+    BCMOLT_DEVICE_OPER_ID_SW_UPGRADE_ACTIVATE,  /**< SW upgrade activate. */
+    BCMOLT_DEVICE_OPER_ID__NUM_OF               /**< Number of enum entries, not an entry itself. */
+} bcmolt_device_oper_id;
+
+/** List of all epon_denied_link groups of type auto. 
+ */
+typedef enum bcmolt_epon_denied_link_auto_id
+{
+    BCMOLT_EPON_DENIED_LINK_AUTO_ID__BEGIN,
+    BCMOLT_EPON_DENIED_LINK_AUTO_ID_LASER_ON_OFF_VIOLATION                                  = 0,    /**< Laser On/Off Violation. */
+    BCMOLT_EPON_DENIED_LINK_AUTO_ID_LLID_POOL_EMPTY_VIOLATION,      /**< LLID Pool Empty Violation. */
+    BCMOLT_EPON_DENIED_LINK_AUTO_ID_MAX_LINK_VIOLATION,             /**< Max Link Violation. */
+    BCMOLT_EPON_DENIED_LINK_AUTO_ID_OVERHEAD_PROFILE_VIOLATION,     /**< Overhead Profile Violation. */
+    BCMOLT_EPON_DENIED_LINK_AUTO_ID_RANGE_VIOLATION,                /**< Range Violation. */
+    BCMOLT_EPON_DENIED_LINK_AUTO_ID_ROGUE_VIOLATION,                /**< Rogue ONU Detected. */
+    BCMOLT_EPON_DENIED_LINK_AUTO_ID_SYSTEM_RESOURCE_VIOLATION,      /**< System Resource Violation. */
+    BCMOLT_EPON_DENIED_LINK_AUTO_ID_TDM_CHANNELS_EXHAUSTED,         /**< TDM Channels Exhausted. */
+    BCMOLT_EPON_DENIED_LINK_AUTO_ID_UNKNOWN_LINK_VIOLATION,         /**< Unknown Link Violation. */
+    BCMOLT_EPON_DENIED_LINK_AUTO_ID_UPSTREAM_BANDWIDTH_VIOLATION,   /**< Upstream Bandwidth Violation. */
+    BCMOLT_EPON_DENIED_LINK_AUTO_ID__NUM_OF /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_denied_link_auto_id;
+
+/** List of all epon_link groups of type auto. 
+ */
+typedef enum bcmolt_epon_link_auto_id
+{
+    BCMOLT_EPON_LINK_AUTO_ID__BEGIN,
+    BCMOLT_EPON_LINK_AUTO_ID_DUPLICATE_MPCP_REGISTRATION_REQUEST                            = 0,    /**< Duplicate MPCP Registration Request. */
+    BCMOLT_EPON_LINK_AUTO_ID_ENCRYPTION_ENABLED,            /**< Encryption Enabled. */
+    BCMOLT_EPON_LINK_AUTO_ID_KEY_EXCHANGE_FAILURE,          /**< Key Exchange Failure. */
+    BCMOLT_EPON_LINK_AUTO_ID_KEY_EXCHANGE_STARTED,          /**< key_exchange_started. */
+    BCMOLT_EPON_LINK_AUTO_ID_KEY_EXCHANGE_STOPPED,          /**< key_exchange_stopped. */
+    BCMOLT_EPON_LINK_AUTO_ID_LINK_DELETED,                  /**< Link Deleted. */
+    BCMOLT_EPON_LINK_AUTO_ID_LINK_SPEED_MISMATCH,           /**< Link attempted to register at a different speed. */
+    BCMOLT_EPON_LINK_AUTO_ID_MPCP_DEREGISTERED,             /**< MPCP Deregistered. */
+    BCMOLT_EPON_LINK_AUTO_ID_MPCP_DISCOVERED,               /**< MPCP Discovered. */
+    BCMOLT_EPON_LINK_AUTO_ID_MPCP_REG_ACK_TIMEOUT,          /**< MPCP Reg Ack Timeout. */
+    BCMOLT_EPON_LINK_AUTO_ID_MPCP_REPORT_TIMEOUT,           /**< MPCP Report Timeout. */
+    BCMOLT_EPON_LINK_AUTO_ID_OAM_KEEPALIVE_TIMEOUT,         /**< OAM Keepalive Timeout. */
+    BCMOLT_EPON_LINK_AUTO_ID_OAM_KEEPALIVE_TIMER_STARTED,   /**< OAM keepalive timer started. */
+    BCMOLT_EPON_LINK_AUTO_ID_OAM_KEEPALIVE_TIMER_STOPPED,   /**< OAM keepalive timer stopped. */
+    BCMOLT_EPON_LINK_AUTO_ID_PREPROVISIONED_LINK_CREATED,   /**< Preprovisioned Link Created. */
+    BCMOLT_EPON_LINK_AUTO_ID_PROTECTION_SWITCH_OCCURRED,    /**< Protection Switch Occurred. */
+    BCMOLT_EPON_LINK_AUTO_ID_RANGE_VALUE_CHANGED,           /**< Range Value Changed. */
+    BCMOLT_EPON_LINK_AUTO_ID_RERANGE_FAILURE,               /**< Re-range failure. */
+    BCMOLT_EPON_LINK_AUTO_ID_STAT_ALARM_CLEARED,            /**< Stat Alarm Cleared. */
+    BCMOLT_EPON_LINK_AUTO_ID_STAT_ALARM_RAISED,             /**< Stat Alarm Raised. */
+    BCMOLT_EPON_LINK_AUTO_ID_STATIC_REGISTRATION_DONE,      /**< Static registration done. */
+    BCMOLT_EPON_LINK_AUTO_ID__NUM_OF                        /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_link_auto_id;
+
+/** List of all epon_link groups of type oper. 
+ */
+typedef enum bcmolt_epon_link_oper_id
+{
+    BCMOLT_EPON_LINK_OPER_ID__BEGIN,
+    BCMOLT_EPON_LINK_OPER_ID_DELETE_LINK                                                    = 0,    /**< Delete Link. */
+    BCMOLT_EPON_LINK_OPER_ID_FORCE_REDISCOVERY,         /**< Force Link Rediscovery. */
+    BCMOLT_EPON_LINK_OPER_ID_KEY_EXCHANGE_START,        /**< Key exchange start. */
+    BCMOLT_EPON_LINK_OPER_ID_KEY_EXCHANGE_STOP,         /**< Key exchange stop. */
+    BCMOLT_EPON_LINK_OPER_ID_OAM_KEEPALIVE_TIMER_START, /**< OAM Keepalive Timer Start. */
+    BCMOLT_EPON_LINK_OPER_ID_OAM_KEEPALIVE_TIMER_STOP,  /**< OAM Keepalive Timer Stop. */
+    BCMOLT_EPON_LINK_OPER_ID_STATIC_REGISTRATION,       /**< static_registration. */
+    BCMOLT_EPON_LINK_OPER_ID__NUM_OF                    /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_link_oper_id;
+
+/** List of all epon_link groups of type proxy. 
+ */
+typedef enum bcmolt_epon_link_proxy_id
+{
+    BCMOLT_EPON_LINK_PROXY_ID__BEGIN,
+    BCMOLT_EPON_LINK_PROXY_ID_INJECT_FRAME                                                  = 0,    /**< Inject Frame. */
+    BCMOLT_EPON_LINK_PROXY_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_link_proxy_id;
+
+/** List of all epon_link groups of type proxy_rx. 
+ */
+typedef enum bcmolt_epon_link_proxy_rx_id
+{
+    BCMOLT_EPON_LINK_PROXY_RX_ID__BEGIN,
+    BCMOLT_EPON_LINK_PROXY_RX_ID_FRAME_CAPTURED                                             = 0,    /**< Frame Captured. */
+    BCMOLT_EPON_LINK_PROXY_RX_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_link_proxy_rx_id;
+
+/** List of all epon_ni groups of type auto. 
+ */
+typedef enum bcmolt_epon_ni_auto_id
+{
+    BCMOLT_EPON_NI_AUTO_ID__BEGIN,
+    BCMOLT_EPON_NI_AUTO_ID_AUTO_ROGUE_SCAN_10G_FAILURE                                      = 0,    /**< 10G Epon Autonomous Rogue Scan failure detected. */
+    BCMOLT_EPON_NI_AUTO_ID_AUTO_ROGUE_SCAN_1G_FAILURE,  /**< 1G Epon Autonomous Rogue Scan failure detected. */
+    BCMOLT_EPON_NI_AUTO_ID_LLID_QUARANTINED,            /**< LLID Quarantined. */
+    BCMOLT_EPON_NI_AUTO_ID_MPCP_TIMESTAMP_CHANGED,      /**< MPCP Timestamp Changed. */
+    BCMOLT_EPON_NI_AUTO_ID_NO_REPORTS,                  /**< No Reports. */
+    BCMOLT_EPON_NI_AUTO_ID_ONU_UPGRADE_COMPLETE,        /**< ONU Upgrade Complete. */
+    BCMOLT_EPON_NI_AUTO_ID_RERANGE_FAILURE,             /**< Re-range failure. */
+    BCMOLT_EPON_NI_AUTO_ID_ROGUE_SCAN_COMPLETE,         /**< Rogue Scan is Complete. */
+    BCMOLT_EPON_NI_AUTO_ID_RSSI_MEASUREMENT_COMPLETED,  /**< RSSI Measurement Completed. */
+    BCMOLT_EPON_NI_AUTO_ID_STATE_CHANGE_COMPLETED,      /**< State Change Completed. */
+    BCMOLT_EPON_NI_AUTO_ID__NUM_OF                      /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_ni_auto_id;
+
+/** List of all epon_ni groups of type oper. 
+ */
+typedef enum bcmolt_epon_ni_oper_id
+{
+    BCMOLT_EPON_NI_OPER_ID__BEGIN,
+    BCMOLT_EPON_NI_OPER_ID_ADD_LINK                                                         = 0,    /**< Add link. */
+    BCMOLT_EPON_NI_OPER_ID_ADD_MULTICAST_LINK,          /**< Add Mutlticastlink. */
+    BCMOLT_EPON_NI_OPER_ID_ADD_PROTECTED_STANDBY_LINK,  /**< Add Protected Standby Link. */
+    BCMOLT_EPON_NI_OPER_ID_ISSUE_RSSI_GRANT,            /**< Issue an Rx Power Measurement Request. */
+    BCMOLT_EPON_NI_OPER_ID_PROTECTION_SWITCHING_APPLY_RERANGE_DELTA,    /**< Protection switching apply re-range delta. */
+    BCMOLT_EPON_NI_OPER_ID_ROGUE_LLID_SCAN,         /**< Run Rogue LLID Scan. */
+    BCMOLT_EPON_NI_OPER_ID_SET_EPON_NI_EN_STATE,    /**< Set EPON NI Enable State. */
+    BCMOLT_EPON_NI_OPER_ID_START_ONU_UPGRADE,       /**< Start ONU Firmware Upgrade. */
+    BCMOLT_EPON_NI_OPER_ID__NUM_OF                  /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_ni_oper_id;
+
+/** List of all epon_onu_10g_us groups of type auto. 
+ */
+typedef enum bcmolt_epon_onu_10g_us_auto_id
+{
+    BCMOLT_EPON_ONU_10G_US_AUTO_ID__BEGIN,
+    BCMOLT_EPON_ONU_10G_US_AUTO_ID_STAT_ALARM_CLEARED                                       = 0,    /**< Stat Alarm Cleared. */
+    BCMOLT_EPON_ONU_10G_US_AUTO_ID_STAT_ALARM_RAISED,   /**< Stat Alarm Raised. */
+    BCMOLT_EPON_ONU_10G_US_AUTO_ID__NUM_OF              /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_onu_10g_us_auto_id;
+
+/** List of all epon_onu_1g_us groups of type auto. 
+ */
+typedef enum bcmolt_epon_onu_1g_us_auto_id
+{
+    BCMOLT_EPON_ONU_1G_US_AUTO_ID__BEGIN,
+    BCMOLT_EPON_ONU_1G_US_AUTO_ID_STAT_ALARM_CLEARED                                        = 0,    /**< Stat Alarm Cleared. */
+    BCMOLT_EPON_ONU_1G_US_AUTO_ID_STAT_ALARM_RAISED,    /**< Stat Alarm Raised. */
+    BCMOLT_EPON_ONU_1G_US_AUTO_ID__NUM_OF               /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_onu_1g_us_auto_id;
+
+/** List of all epon_path_10g_ds groups of type auto. 
+ */
+typedef enum bcmolt_epon_path_10g_ds_auto_id
+{
+    BCMOLT_EPON_PATH_10G_DS_AUTO_ID__BEGIN,
+    BCMOLT_EPON_PATH_10G_DS_AUTO_ID_STAT_ALARM_CLEARED                                      = 0,    /**< Stat Alarm Cleared. */
+    BCMOLT_EPON_PATH_10G_DS_AUTO_ID_STAT_ALARM_RAISED,  /**< Stat Alarm Raised. */
+    BCMOLT_EPON_PATH_10G_DS_AUTO_ID__NUM_OF             /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_path_10g_ds_auto_id;
+
+/** List of all epon_path_10g_us groups of type auto. 
+ */
+typedef enum bcmolt_epon_path_10g_us_auto_id
+{
+    BCMOLT_EPON_PATH_10G_US_AUTO_ID__BEGIN,
+    BCMOLT_EPON_PATH_10G_US_AUTO_ID_STAT_ALARM_CLEARED                                      = 0,    /**< Stat Alarm Cleared. */
+    BCMOLT_EPON_PATH_10G_US_AUTO_ID_STAT_ALARM_RAISED,  /**< Stat Alarm Raised. */
+    BCMOLT_EPON_PATH_10G_US_AUTO_ID__NUM_OF             /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_path_10g_us_auto_id;
+
+/** List of all epon_path_1g_ds groups of type auto. 
+ */
+typedef enum bcmolt_epon_path_1g_ds_auto_id
+{
+    BCMOLT_EPON_PATH_1G_DS_AUTO_ID__BEGIN,
+    BCMOLT_EPON_PATH_1G_DS_AUTO_ID_STAT_ALARM_CLEARED                                       = 0,    /**< Stat Alarm Cleared. */
+    BCMOLT_EPON_PATH_1G_DS_AUTO_ID_STAT_ALARM_RAISED,   /**< Stat Alarm Raised. */
+    BCMOLT_EPON_PATH_1G_DS_AUTO_ID__NUM_OF              /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_path_1g_ds_auto_id;
+
+/** List of all epon_path_1g_us groups of type auto. 
+ */
+typedef enum bcmolt_epon_path_1g_us_auto_id
+{
+    BCMOLT_EPON_PATH_1G_US_AUTO_ID__BEGIN,
+    BCMOLT_EPON_PATH_1G_US_AUTO_ID_STAT_ALARM_CLEARED                                       = 0,    /**< Stat Alarm Cleared. */
+    BCMOLT_EPON_PATH_1G_US_AUTO_ID_STAT_ALARM_RAISED,   /**< Stat Alarm Raised. */
+    BCMOLT_EPON_PATH_1G_US_AUTO_ID__NUM_OF              /**< Number of enum entries, not an entry itself. */
+} bcmolt_epon_path_1g_us_auto_id;
+
+/** List of all gpon_alloc groups of type auto. 
+ */
+typedef enum bcmolt_gpon_alloc_auto_id
+{
+    BCMOLT_GPON_ALLOC_AUTO_ID__BEGIN,
+    BCMOLT_GPON_ALLOC_AUTO_ID_CONFIGURATION_COMPLETED                                       = 0,    /**< Configuration Completed. */
+    BCMOLT_GPON_ALLOC_AUTO_ID_GET_ALLOC_STATS_COMPLETED,    /**< Get alloc ID statistics completed. */
+    BCMOLT_GPON_ALLOC_AUTO_ID_STAT_ALARM_CLEARED,           /**< Stat Alarm Cleared. */
+    BCMOLT_GPON_ALLOC_AUTO_ID_STAT_ALARM_RAISED,            /**< Stat Alarm Raised. */
+    BCMOLT_GPON_ALLOC_AUTO_ID__NUM_OF                       /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_alloc_auto_id;
+
+/** List of all gpon_alloc groups of type oper. 
+ */
+typedef enum bcmolt_gpon_alloc_oper_id
+{
+    BCMOLT_GPON_ALLOC_OPER_ID__BEGIN,
+    BCMOLT_GPON_ALLOC_OPER_ID_GET_STATS                                                     = 0,    /**< Get statistics. */
+    BCMOLT_GPON_ALLOC_OPER_ID_SET_STATE,    /**< Set state. */
+    BCMOLT_GPON_ALLOC_OPER_ID__NUM_OF       /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_alloc_oper_id;
+
+/** List of all gpon_gem_port groups of type auto. 
+ */
+typedef enum bcmolt_gpon_gem_port_auto_id
+{
+    BCMOLT_GPON_GEM_PORT_AUTO_ID__BEGIN,
+    BCMOLT_GPON_GEM_PORT_AUTO_ID_CONFIGURATION_COMPLETED                                    = 0,    /**< Configuration Completed. */
+    BCMOLT_GPON_GEM_PORT_AUTO_ID_STAT_ALARM_CLEARED,    /**< Stat Alarm Cleared. */
+    BCMOLT_GPON_GEM_PORT_AUTO_ID_STAT_ALARM_RAISED,     /**< Stat Alarm Raised. */
+    BCMOLT_GPON_GEM_PORT_AUTO_ID__NUM_OF                /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_gem_port_auto_id;
+
+/** List of all gpon_gem_port groups of type oper. 
+ */
+typedef enum bcmolt_gpon_gem_port_oper_id
+{
+    BCMOLT_GPON_GEM_PORT_OPER_ID__BEGIN,
+    BCMOLT_GPON_GEM_PORT_OPER_ID_SET_STATE                                                  = 0,    /**< Set state. */
+    BCMOLT_GPON_GEM_PORT_OPER_ID__NUM_OF    /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_gem_port_oper_id;
+
+/** List of all gpon_iwf groups of type auto. 
+ */
+typedef enum bcmolt_gpon_iwf_auto_id
+{
+    BCMOLT_GPON_IWF_AUTO_ID__BEGIN,
+    BCMOLT_GPON_IWF_AUTO_ID_FLUSH_MAC_TABLE_COMPLETED                                       = 0,    /**< Flush MAC Table Completed. */
+    BCMOLT_GPON_IWF_AUTO_ID_SCAN_MAC_TABLE_COMPLETED,   /**< Scan MAC Table Completed. */
+    BCMOLT_GPON_IWF_AUTO_ID_STAT_ALARM_CLEARED,         /**< Stat Alarm Cleared. */
+    BCMOLT_GPON_IWF_AUTO_ID_STAT_ALARM_RAISED,          /**< Stat Alarm Raised. */
+    BCMOLT_GPON_IWF_AUTO_ID__NUM_OF                     /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_iwf_auto_id;
+
+/** List of all gpon_iwf groups of type oper. 
+ */
+typedef enum bcmolt_gpon_iwf_oper_id
+{
+    BCMOLT_GPON_IWF_OPER_ID__BEGIN,
+    BCMOLT_GPON_IWF_OPER_ID_FLUSH_MAC_TABLE                                                 = 0,    /**< Flush MAC Table. */
+    BCMOLT_GPON_IWF_OPER_ID_SCAN_MAC_TABLE, /**< Scan MAC Table. */
+    BCMOLT_GPON_IWF_OPER_ID__NUM_OF         /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_iwf_oper_id;
+
+/** List of all gpon_iwf_mac_table groups of type auto. 
+ */
+typedef enum bcmolt_gpon_iwf_mac_table_auto_id
+{
+    BCMOLT_GPON_IWF_MAC_TABLE_AUTO_ID__BEGIN,
+    BCMOLT_GPON_IWF_MAC_TABLE_AUTO_ID_MAC_AGED                                              = 0,    /**< MAC Aged. */
+    BCMOLT_GPON_IWF_MAC_TABLE_AUTO_ID_MAC_DROPPED,  /**< MAC Dropped. */
+    BCMOLT_GPON_IWF_MAC_TABLE_AUTO_ID_MAC_MOVE,     /**< MAC Move. */
+    BCMOLT_GPON_IWF_MAC_TABLE_AUTO_ID_NEW_MAC,      /**< New MAC. */
+    BCMOLT_GPON_IWF_MAC_TABLE_AUTO_ID__NUM_OF       /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_iwf_mac_table_auto_id;
+
+/** List of all gpon_ni groups of type auto. 
+ */
+typedef enum bcmolt_gpon_ni_auto_id
+{
+    BCMOLT_GPON_NI_AUTO_ID__BEGIN,
+    BCMOLT_GPON_NI_AUTO_ID_ACTIVATE_ALL_ONUS_COMPLETED                                      = 0,    /**< activate all onus completed. */
+    BCMOLT_GPON_NI_AUTO_ID_CPU_PACKETS_FAILURE,             /**< CPU Packets Failure. */
+    BCMOLT_GPON_NI_AUTO_ID_DEACTIVATE_ALL_ONUS_COMPLETED,   /**< deactivate all onus completed. */
+    BCMOLT_GPON_NI_AUTO_ID_DISABLE_ALL_ONUS_COMPLETED,      /**< disable all onus completed. */
+    BCMOLT_GPON_NI_AUTO_ID_ENABLE_ALL_ONUS_COMPLETED,       /**< enable all onus completed. */
+    BCMOLT_GPON_NI_AUTO_ID_LOS,                     /**< LOS. */
+    BCMOLT_GPON_NI_AUTO_ID_ONU_DISCOVERED,          /**< ONU Discovered. */
+    BCMOLT_GPON_NI_AUTO_ID_ONU_UPGRADE_COMPLETE,    /**< ONU Upgrade Complete. */
+    BCMOLT_GPON_NI_AUTO_ID_PROTECTION_SWITCHING_ONUS_RANGED,            /**< Protection Switching ONUs Ranged. */
+    BCMOLT_GPON_NI_AUTO_ID_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED,   /**< Protection Switching Switchover Completed. */
+    BCMOLT_GPON_NI_AUTO_ID_PROTECTION_SWITCHING_TRAFFIC_RESUME,         /**< Protection Switching Traffic Resume. */
+    BCMOLT_GPON_NI_AUTO_ID_ROGUE_DETECTION_COMPLETED,                   /**< Rogue detection completed. */
+    BCMOLT_GPON_NI_AUTO_ID_ROGUE_ONU_SPECIAL_MAP_CYCLE_START,           /**< Rogue ONU special map cycle start. */
+    BCMOLT_GPON_NI_AUTO_ID_SERIAL_NUMBER_ACQUISITION_CYCLE_START,       /**< Serial Number Acquisition Cycle Start. */
+    BCMOLT_GPON_NI_AUTO_ID_STANDBY_PON_MONITORING_CYCLE_COMPLETED,      /**< Standby PON Monitoring Cycle Completed. */
+    BCMOLT_GPON_NI_AUTO_ID_STAT_ALARM_CLEARED,      /**< Stat Alarm Cleared. */
+    BCMOLT_GPON_NI_AUTO_ID_STAT_ALARM_RAISED,       /**< Stat Alarm Raised. */
+    BCMOLT_GPON_NI_AUTO_ID_STATE_CHANGE_COMPLETED,  /**< State Change Completed. */
+    BCMOLT_GPON_NI_AUTO_ID_TOD_REQUEST_COMPLETED,   /**< TOD request completed. */
+    BCMOLT_GPON_NI_AUTO_ID__NUM_OF                  /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_ni_auto_id;
+
+/** List of all gpon_ni groups of type oper. 
+ */
+typedef enum bcmolt_gpon_ni_oper_id
+{
+    BCMOLT_GPON_NI_OPER_ID__BEGIN,
+    BCMOLT_GPON_NI_OPER_ID_DISABLE_SERIAL_NUMBER                                            = 0,    /**< Disable Serial Number. */
+    BCMOLT_GPON_NI_OPER_ID_PROTECTION_SWITCHING_TYPE_C_SET_MULTIPLE_ONU_STATE,                      /**< protection switching type c set multiple onu state. */
+    BCMOLT_GPON_NI_OPER_ID_RESET,                   /**< Reset. */
+    BCMOLT_GPON_NI_OPER_ID_ROGUE_DETECTION_WINDOW,  /**< Rogue Detection Window. */
+    BCMOLT_GPON_NI_OPER_ID_SET_ONU_STATE,           /**< Set ONU State. */
+    BCMOLT_GPON_NI_OPER_ID_SET_PON_STATE,           /**< Set PON State. */
+    BCMOLT_GPON_NI_OPER_ID_SINGLE_REQUEST_STANDBY_PON_MONITORING,   /**< Single request for standby PON monitoring. */
+    BCMOLT_GPON_NI_OPER_ID_START_ONU_UPGRADE,                       /**< Start ONU Firmware Upgrade. */
+    BCMOLT_GPON_NI_OPER_ID_TOD_REQUEST, /**< TOD request. */
+    BCMOLT_GPON_NI_OPER_ID__NUM_OF      /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_ni_oper_id;
+
+/** List of all gpon_ni groups of type proxy. 
+ */
+typedef enum bcmolt_gpon_ni_proxy_id
+{
+    BCMOLT_GPON_NI_PROXY_ID__BEGIN,
+    BCMOLT_GPON_NI_PROXY_ID_BROADCAST_PLOAM_PACKET                                          = 0,    /**< Broadcast PLOAM Packet. */
+    BCMOLT_GPON_NI_PROXY_ID_CPU_PACKETS,    /**< GPON CPU Packets. */
+    BCMOLT_GPON_NI_PROXY_ID__NUM_OF         /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_ni_proxy_id;
+
+/** List of all gpon_onu groups of type auto. 
+ */
+typedef enum bcmolt_gpon_onu_auto_id
+{
+    BCMOLT_GPON_ONU_AUTO_ID__BEGIN,
+    BCMOLT_GPON_ONU_AUTO_ID_BER_INTERVAL_CONFIGURATION_COMPLETED                            = 0,    /**< BER Interval Configuration Completed. */
+    BCMOLT_GPON_ONU_AUTO_ID_DFI,                        /**< Receive Dying-Gasp of ONUi. */
+    BCMOLT_GPON_ONU_AUTO_ID_DGI,                        /**< Receive Dying-Gasp of ONUi. */
+    BCMOLT_GPON_ONU_AUTO_ID_DOWI,                       /**< Drift of Window of ONUi. */
+    BCMOLT_GPON_ONU_AUTO_ID_ERR,                        /**< ERR. */
+    BCMOLT_GPON_ONU_AUTO_ID_INVALID_DBRU_REPORT,        /**< Invalid DBRu Report. */
+    BCMOLT_GPON_ONU_AUTO_ID_KEY_EXCHANGE_COMPLETED,     /**< Key Exchange Completed. */
+    BCMOLT_GPON_ONU_AUTO_ID_KEY_EXCHANGE_CYCLE_SKIPPED, /**< Key Exchange Cycle Skipped. */
+    BCMOLT_GPON_ONU_AUTO_ID_KEY_EXCHANGE_DECRYPT_REQUIRED,      /**< Key Exchange Decrypt Required. */
+    BCMOLT_GPON_ONU_AUTO_ID_KEY_EXCHANGE_KEY_MISMATCH,          /**< Key Exchange Key Mismatch. */
+    BCMOLT_GPON_ONU_AUTO_ID_KEY_EXCHANGE_KEY_REQUEST_TIMEOUT,   /**< Key Exchange Key Request Timeout. */
+    BCMOLT_GPON_ONU_AUTO_ID_KEY_EXCHANGE_UNCONSECUTIVE_INDEX,   /**< Key Exchange Unconsecutive Index. */
+    BCMOLT_GPON_ONU_AUTO_ID_LOAI,   /**< LOAi. */
+    BCMOLT_GPON_ONU_AUTO_ID_LOKI,   /**< LOki. */
+    BCMOLT_GPON_ONU_AUTO_ID_MEMI,   /**< MEMi. */
+    BCMOLT_GPON_ONU_AUTO_ID_OMCI_PORT_ID_CONFIGURATION_COMPLETED,   /**< OMCI PORT ID Configuration Completed. */
+    BCMOLT_GPON_ONU_AUTO_ID_ONU_ACTIVATION_COMPLETED,               /**< ONU Activation Completed. */
+    BCMOLT_GPON_ONU_AUTO_ID_ONU_ACTIVATION_STANDBY_COMPLETED,       /**< onu activation standby completed. */
+    BCMOLT_GPON_ONU_AUTO_ID_ONU_ALARM,                  /**< ONU Alarm. */
+    BCMOLT_GPON_ONU_AUTO_ID_ONU_DEACTIVATION_COMPLETED, /**< ONU Deactivation Completed. */
+    BCMOLT_GPON_ONU_AUTO_ID_ONU_DISABLE_COMPLETED,      /**< ONU Disable Completed. */
+    BCMOLT_GPON_ONU_AUTO_ID_ONU_ENABLE_COMPLETED,       /**< ONU Enable Completed. */
+    BCMOLT_GPON_ONU_AUTO_ID_OPTICAL_REFLECTION,         /**< Optical Reflection. */
+    BCMOLT_GPON_ONU_AUTO_ID_PASSWORD_AUTHENTICATION_COMPLETED,  /**< Password Authentication Completed. */
+    BCMOLT_GPON_ONU_AUTO_ID_PEE,            /**< PEE. */
+    BCMOLT_GPON_ONU_AUTO_ID_POSSIBLE_DRIFT, /**< Possible Drift. */
+    BCMOLT_GPON_ONU_AUTO_ID_POWER_MANAGEMENT_STATE_CHANGE,  /**< Power Management State Change. */
+    BCMOLT_GPON_ONU_AUTO_ID_PST,                        /**< PST. */
+    BCMOLT_GPON_ONU_AUTO_ID_RANGING_COMPLETED,          /**< Ranging Completed. */
+    BCMOLT_GPON_ONU_AUTO_ID_REI,                        /**< REI. */
+    BCMOLT_GPON_ONU_AUTO_ID_RSSI_MEASUREMENT_COMPLETED, /**< RSSI Measurement Completed. */
+    BCMOLT_GPON_ONU_AUTO_ID_SDI,                        /**< Signal Degraded of ONUi. */
+    BCMOLT_GPON_ONU_AUTO_ID_SFI,                        /**< Signal Fail of ONUi. */
+    BCMOLT_GPON_ONU_AUTO_ID_STAT_ALARM_CLEARED,         /**< Stat Alarm Cleared. */
+    BCMOLT_GPON_ONU_AUTO_ID_STAT_ALARM_RAISED,          /**< Stat Alarm Raised. */
+    BCMOLT_GPON_ONU_AUTO_ID_SUFI,                       /**< SUFi. */
+    BCMOLT_GPON_ONU_AUTO_ID_TIWI,                       /**< Transmission Interference Warning. */
+    BCMOLT_GPON_ONU_AUTO_ID__NUM_OF                     /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_auto_id;
+
+/** List of all gpon_onu groups of type oper. 
+ */
+typedef enum bcmolt_gpon_onu_oper_id
+{
+    BCMOLT_GPON_ONU_OPER_ID__BEGIN,
+    BCMOLT_GPON_ONU_OPER_ID_CHANGE_POWER_LEVEL                                              = 0,    /**< Change Power Level. */
+    BCMOLT_GPON_ONU_OPER_ID_RSSI_MEASUREMENT,   /**< RSSI Measurement. */
+    BCMOLT_GPON_ONU_OPER_ID_SET_ONU_STATE,      /**< Set ONU State. */
+    BCMOLT_GPON_ONU_OPER_ID__NUM_OF             /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_oper_id;
+
+/** List of all gpon_onu groups of type proxy. 
+ */
+typedef enum bcmolt_gpon_onu_proxy_id
+{
+    BCMOLT_GPON_ONU_PROXY_ID__BEGIN,
+    BCMOLT_GPON_ONU_PROXY_ID_CPU_PACKETS                                                    = 0,    /**< GPON CPU Packets. */
+    BCMOLT_GPON_ONU_PROXY_ID_PLOAM_PACKET,  /**< PLOAM Packet. */
+    BCMOLT_GPON_ONU_PROXY_ID__NUM_OF        /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_proxy_id;
+
+/** List of all gpon_onu groups of type proxy_rx. 
+ */
+typedef enum bcmolt_gpon_onu_proxy_rx_id
+{
+    BCMOLT_GPON_ONU_PROXY_RX_ID__BEGIN,
+    BCMOLT_GPON_ONU_PROXY_RX_ID_CPU_PACKET                                                  = 0,    /**< GPON CPU packet. */
+    BCMOLT_GPON_ONU_PROXY_RX_ID_OMCI_PACKET,    /**< GPON OMCI packet. */
+    BCMOLT_GPON_ONU_PROXY_RX_ID__NUM_OF         /**< Number of enum entries, not an entry itself. */
+} bcmolt_gpon_onu_proxy_rx_id;
+
+/** List of all log_entry groups of type auto. 
+ */
+typedef enum bcmolt_log_entry_auto_id
+{
+    BCMOLT_LOG_ENTRY_AUTO_ID__BEGIN,
+    BCMOLT_LOG_ENTRY_AUTO_ID_STAT_ALARM_CLEARED                                             = 0,    /**< Stat Alarm Cleared. */
+    BCMOLT_LOG_ENTRY_AUTO_ID_STAT_ALARM_RAISED, /**< Stat Alarm Raised. */
+    BCMOLT_LOG_ENTRY_AUTO_ID__NUM_OF            /**< Number of enum entries, not an entry itself. */
+} bcmolt_log_entry_auto_id;
+
+/** List of all logger groups of type auto. 
+ */
+typedef enum bcmolt_logger_auto_id
+{
+    BCMOLT_LOGGER_AUTO_ID__BEGIN,
+    BCMOLT_LOGGER_AUTO_ID_STAT_ALARM_CLEARED                                                = 0,    /**< Stat Alarm Cleared. */
+    BCMOLT_LOGGER_AUTO_ID_STAT_ALARM_RAISED,    /**< Stat Alarm Raised. */
+    BCMOLT_LOGGER_AUTO_ID__NUM_OF               /**< Number of enum entries, not an entry itself. */
+} bcmolt_logger_auto_id;
+
+/** List of all logger groups of type oper. 
+ */
+typedef enum bcmolt_logger_oper_id
+{
+    BCMOLT_LOGGER_OPER_ID__BEGIN,
+    BCMOLT_LOGGER_OPER_ID_CLEAR_LOG                                                         = 0,    /**< clear log. */
+    BCMOLT_LOGGER_OPER_ID__NUM_OF   /**< Number of enum entries, not an entry itself. */
+} bcmolt_logger_oper_id;
+
+/** List of all nni groups of type auto. 
+ */
+typedef enum bcmolt_nni_auto_id
+{
+    BCMOLT_NNI_AUTO_ID__BEGIN,
+    BCMOLT_NNI_AUTO_ID_STAT_ALARM_CLEARED                                                   = 0,    /**< Stat Alarm Cleared. */
+    BCMOLT_NNI_AUTO_ID_STAT_ALARM_RAISED,   /**< Stat Alarm Raised. */
+    BCMOLT_NNI_AUTO_ID_STATUS_CHANGED,      /**< Status changed. */
+    BCMOLT_NNI_AUTO_ID__NUM_OF              /**< Number of enum entries, not an entry itself. */
+} bcmolt_nni_auto_id;
+
+/** List of all trx_calibration groups of type auto. 
+ */
+typedef enum bcmolt_trx_calibration_auto_id
+{
+    BCMOLT_TRX_CALIBRATION_AUTO_ID__BEGIN,
+    BCMOLT_TRX_CALIBRATION_AUTO_ID_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED                   = 0,    /**< Capture window and statistic completed. */
+    BCMOLT_TRX_CALIBRATION_AUTO_ID__NUM_OF  /**< Number of enum entries, not an entry itself. */
+} bcmolt_trx_calibration_auto_id;
+
+/** List of all trx_calibration groups of type oper. 
+ */
+typedef enum bcmolt_trx_calibration_oper_id
+{
+    BCMOLT_TRX_CALIBRATION_OPER_ID__BEGIN,
+    BCMOLT_TRX_CALIBRATION_OPER_ID_START_CAPTURE_WINDOW                                     = 0,    /**< start capture window. */
+    BCMOLT_TRX_CALIBRATION_OPER_ID_STOP_CAPTURE_WINDOW, /**< stop capture window. */
+    BCMOLT_TRX_CALIBRATION_OPER_ID__NUM_OF              /**< Number of enum entries, not an entry itself. */
+} bcmolt_trx_calibration_oper_id;
+
+/** List of all xgpon_alloc groups of type auto. 
+ */
+typedef enum bcmolt_xgpon_alloc_auto_id
+{
+    BCMOLT_XGPON_ALLOC_AUTO_ID__BEGIN,
+    BCMOLT_XGPON_ALLOC_AUTO_ID_CONFIGURATION_COMPLETED                                      = 0,    /**< Configuration Completed. */
+    BCMOLT_XGPON_ALLOC_AUTO_ID_GET_ALLOC_STATS_COMPLETED,   /**< Get alloc ID statistics completed. */
+    BCMOLT_XGPON_ALLOC_AUTO_ID_STAT_ALARM_CLEARED,          /**< Stat Alarm Cleared. */
+    BCMOLT_XGPON_ALLOC_AUTO_ID_STAT_ALARM_RAISED,           /**< Stat Alarm Raised. */
+    BCMOLT_XGPON_ALLOC_AUTO_ID__NUM_OF                      /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_alloc_auto_id;
+
+/** List of all xgpon_alloc groups of type oper. 
+ */
+typedef enum bcmolt_xgpon_alloc_oper_id
+{
+    BCMOLT_XGPON_ALLOC_OPER_ID__BEGIN,
+    BCMOLT_XGPON_ALLOC_OPER_ID_GET_STATS                                                    = 0,    /**< Get statistics. */
+    BCMOLT_XGPON_ALLOC_OPER_ID_SET_STATE,   /**< Set state. */
+    BCMOLT_XGPON_ALLOC_OPER_ID__NUM_OF      /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_alloc_oper_id;
+
+/** List of all xgpon_gem_port groups of type auto. 
+ */
+typedef enum bcmolt_xgpon_gem_port_auto_id
+{
+    BCMOLT_XGPON_GEM_PORT_AUTO_ID__BEGIN,
+    BCMOLT_XGPON_GEM_PORT_AUTO_ID_STAT_ALARM_CLEARED                                        = 0,    /**< Stat Alarm Cleared. */
+    BCMOLT_XGPON_GEM_PORT_AUTO_ID_STAT_ALARM_RAISED,    /**< Stat Alarm Raised. */
+    BCMOLT_XGPON_GEM_PORT_AUTO_ID__NUM_OF               /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_gem_port_auto_id;
+
+/** List of all xgpon_ni groups of type auto. 
+ */
+typedef enum bcmolt_xgpon_ni_auto_id
+{
+    BCMOLT_XGPON_NI_AUTO_ID__BEGIN,
+    BCMOLT_XGPON_NI_AUTO_ID_ACTIVATE_ALL_ONUS_COMPLETED                                     = 0,    /**< activate all onus completed. */
+    BCMOLT_XGPON_NI_AUTO_ID_CPU_PACKETS_FAILURE,            /**< CPU Packets Failure. */
+    BCMOLT_XGPON_NI_AUTO_ID_DEACTIVATE_ALL_ONUS_COMPLETED,  /**< deactivate all onus completed. */
+    BCMOLT_XGPON_NI_AUTO_ID_DISABLE_ALL_ONUS_COMPLETED,     /**< disable all onus completed. */
+    BCMOLT_XGPON_NI_AUTO_ID_ENABLE_ALL_ONUS_COMPLETED,      /**< enable all onus completed. */
+    BCMOLT_XGPON_NI_AUTO_ID_LOS,                    /**< LOS. */
+    BCMOLT_XGPON_NI_AUTO_ID_ONU_DISCOVERED,         /**< ONU Discovered. */
+    BCMOLT_XGPON_NI_AUTO_ID_ONU_UPGRADE_COMPLETE,   /**< ONU Upgrade Complete. */
+    BCMOLT_XGPON_NI_AUTO_ID_PROTECTION_SWITCHING_ONUS_RANGED,           /**< Protection Switching ONUs Ranged. */
+    BCMOLT_XGPON_NI_AUTO_ID_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED,  /**< Protection Switching Switchover Completed. */
+    BCMOLT_XGPON_NI_AUTO_ID_PROTECTION_SWITCHING_TRAFFIC_RESUME,        /**< Protection Switching Traffic Resume. */
+    BCMOLT_XGPON_NI_AUTO_ID_ROGUE_DETECTION_COMPLETED,                  /**< Rogue detection completed. */
+    BCMOLT_XGPON_NI_AUTO_ID_ROGUE_ONU_SPECIAL_MAP_CYCLE_START,          /**< Rogue ONU special map cycle start. */
+    BCMOLT_XGPON_NI_AUTO_ID_SERIAL_NUMBER_ACQUISITION_CYCLE_START,      /**< Serial Number Acquisition Cycle Start. */
+    BCMOLT_XGPON_NI_AUTO_ID_STANDBY_PON_MONITORING_CYCLE_COMPLETED,     /**< Standby PON Monitoring Cycle Completed. */
+    BCMOLT_XGPON_NI_AUTO_ID_STAT_ALARM_CLEARED,     /**< Stat Alarm Cleared. */
+    BCMOLT_XGPON_NI_AUTO_ID_STAT_ALARM_RAISED,      /**< Stat Alarm Raised. */
+    BCMOLT_XGPON_NI_AUTO_ID_STATE_CHANGE_COMPLETED, /**< State Change Completed. */
+    BCMOLT_XGPON_NI_AUTO_ID_TOD_REQUEST_COMPLETED,  /**< TOD request completed. */
+    BCMOLT_XGPON_NI_AUTO_ID__NUM_OF                 /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_ni_auto_id;
+
+/** List of all xgpon_ni groups of type oper. 
+ */
+typedef enum bcmolt_xgpon_ni_oper_id
+{
+    BCMOLT_XGPON_NI_OPER_ID__BEGIN,
+    BCMOLT_XGPON_NI_OPER_ID_ADJUST_TX_WAVELENGTH                                            = 0,    /**< Adjust Tx Wavelengh. */
+    BCMOLT_XGPON_NI_OPER_ID_DISABLE_SERIAL_NUMBER,                  /**< Disable Serial Number. */
+    BCMOLT_XGPON_NI_OPER_ID_RESET,                                  /**< Reset. */
+    BCMOLT_XGPON_NI_OPER_ID_ROGUE_DETECTION_WINDOW,                 /**< Rogue Detection Window. */
+    BCMOLT_XGPON_NI_OPER_ID_RUN_SPECIAL_BW_MAP,                     /**< Run Special BW Map. */
+    BCMOLT_XGPON_NI_OPER_ID_SET_ONU_STATE,                          /**< Set ONU State. */
+    BCMOLT_XGPON_NI_OPER_ID_SET_PON_STATE,                          /**< Set PON State. */
+    BCMOLT_XGPON_NI_OPER_ID_SINGLE_REQUEST_STANDBY_PON_MONITORING,  /**< Single request standby PON Monitoring. */
+    BCMOLT_XGPON_NI_OPER_ID_START_ONU_UPGRADE,                      /**< Start ONU Firmware Upgrade. */
+    BCMOLT_XGPON_NI_OPER_ID_TOD_REQUEST,    /**< TOD request. */
+    BCMOLT_XGPON_NI_OPER_ID__NUM_OF         /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_ni_oper_id;
+
+/** List of all xgpon_ni groups of type proxy. 
+ */
+typedef enum bcmolt_xgpon_ni_proxy_id
+{
+    BCMOLT_XGPON_NI_PROXY_ID__BEGIN,
+    BCMOLT_XGPON_NI_PROXY_ID_BROADCAST_PLOAM_PACKET                                         = 0,    /**< Broadcast PLOAM Packet. */
+    BCMOLT_XGPON_NI_PROXY_ID_CPU_PACKETS,   /**< XGPON CPU packets. */
+    BCMOLT_XGPON_NI_PROXY_ID__NUM_OF        /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_ni_proxy_id;
+
+/** List of all xgpon_onu groups of type auto. 
+ */
+typedef enum bcmolt_xgpon_onu_auto_id
+{
+    BCMOLT_XGPON_ONU_AUTO_ID__BEGIN,
+    BCMOLT_XGPON_ONU_AUTO_ID_DFI                                                            = 0,    /**< Receive Dying-Gasp of ONUi. */
+    BCMOLT_XGPON_ONU_AUTO_ID_DGI,                       /**< Receive Dying-Gasp of ONUi. */
+    BCMOLT_XGPON_ONU_AUTO_ID_DOWI,                      /**< Drift of Window of ONUi. */
+    BCMOLT_XGPON_ONU_AUTO_ID_INVALID_DBRU_REPORT,       /**< Invalid DBRu Report. */
+    BCMOLT_XGPON_ONU_AUTO_ID_KEY_EXCHANGE_COMPLETED,    /**< Key Exchange Completed. */
+    BCMOLT_XGPON_ONU_AUTO_ID_KEY_EXCHANGE_CYCLE_SKIPPED,        /**< Key Exchange Cycle Skipped. */
+    BCMOLT_XGPON_ONU_AUTO_ID_KEY_EXCHANGE_KEY_MISMATCH,         /**< Key Exchange Key Mismatch. */
+    BCMOLT_XGPON_ONU_AUTO_ID_KEY_EXCHANGE_KEY_REQUEST_TIMEOUT,  /**< Key Exchange Key Request Timeout. */
+    BCMOLT_XGPON_ONU_AUTO_ID_LOOCI,                     /**< LOOCi. */
+    BCMOLT_XGPON_ONU_AUTO_ID_ONU_ACTIVATION_COMPLETED,  /**< ONU Activation Completed. */
+    BCMOLT_XGPON_ONU_AUTO_ID_ONU_ALARM,                 /**< ONU Alarm. */
+    BCMOLT_XGPON_ONU_AUTO_ID_ONU_DEACTIVATION_COMPLETED,    /**< ONU Deactivation Completed. */
+    BCMOLT_XGPON_ONU_AUTO_ID_ONU_DISABLE_COMPLETED,         /**< ONU Disable Completed. */
+    BCMOLT_XGPON_ONU_AUTO_ID_ONU_ENABLE_COMPLETED,          /**< ONU Enable Completed. */
+    BCMOLT_XGPON_ONU_AUTO_ID_ONU_TUNING_IN_COMPLETED,       /**< ONU Tuning in completed. */
+    BCMOLT_XGPON_ONU_AUTO_ID_ONU_TUNING_OUT_COMPLETED,      /**< ONU Tuning out completed. */
+    BCMOLT_XGPON_ONU_AUTO_ID_OPTICAL_REFLECTION,            /**< Optical Reflection. */
+    BCMOLT_XGPON_ONU_AUTO_ID_POSSIBLE_DRIFT,                /**< Possible Drift. */
+    BCMOLT_XGPON_ONU_AUTO_ID_POWER_CONSUMPTION_REPORT,      /**< Power consumption report. */
+    BCMOLT_XGPON_ONU_AUTO_ID_POWER_LEVEL_REPORT,            /**< Power level report. */
+    BCMOLT_XGPON_ONU_AUTO_ID_POWER_MANAGEMENT_STATE_CHANGE, /**< Power Management State Change. */
+    BCMOLT_XGPON_ONU_AUTO_ID_PQSI,              /**< ploam queue status. */
+    BCMOLT_XGPON_ONU_AUTO_ID_RANGING_COMPLETED, /**< Ranging Completed. */
+    BCMOLT_XGPON_ONU_AUTO_ID_REGISTRATION_ID,   /**< Registration ID. */
+    BCMOLT_XGPON_ONU_AUTO_ID_RSSI_MEASUREMENT_COMPLETED,    /**< RSSI Measurement Completed. */
+    BCMOLT_XGPON_ONU_AUTO_ID_SDI,   /**< Signal Degraded of ONUi. */
+    BCMOLT_XGPON_ONU_AUTO_ID_SECURE_MUTUAL_AUTHENTICATION_FAILURE,  /**< secure mutual authentication failure. */
+    BCMOLT_XGPON_ONU_AUTO_ID_SFI,                   /**< Signal Fail of ONUi. */
+    BCMOLT_XGPON_ONU_AUTO_ID_STAT_ALARM_CLEARED,    /**< Stat Alarm Cleared. */
+    BCMOLT_XGPON_ONU_AUTO_ID_STAT_ALARM_RAISED,     /**< Stat Alarm Raised. */
+    BCMOLT_XGPON_ONU_AUTO_ID_SUFI,                  /**< SUFi. */
+    BCMOLT_XGPON_ONU_AUTO_ID_TIWI,                  /**< Transmission Interference Warning. */
+    BCMOLT_XGPON_ONU_AUTO_ID_TUNING_RESPONSE,       /**< Tuning response. */
+    BCMOLT_XGPON_ONU_AUTO_ID__NUM_OF                /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_auto_id;
+
+/** List of all xgpon_onu groups of type oper. 
+ */
+typedef enum bcmolt_xgpon_onu_oper_id
+{
+    BCMOLT_XGPON_ONU_OPER_ID__BEGIN,
+    BCMOLT_XGPON_ONU_OPER_ID_ADJUST_TX_WAVELENGTH                                           = 0,    /**< Adjust Tx wavelength. */
+    BCMOLT_XGPON_ONU_OPER_ID_CHANGE_POWER_LEVELLING,        /**< Change power levelling. */
+    BCMOLT_XGPON_ONU_OPER_ID_GET_POWER_CONSUMPTION,         /**< Get power consumption. */
+    BCMOLT_XGPON_ONU_OPER_ID_GET_POWER_LEVEL,               /**< Get power level. */
+    BCMOLT_XGPON_ONU_OPER_ID_ONU_TUNING_IN,                 /**< ONU Tuning in. */
+    BCMOLT_XGPON_ONU_OPER_ID_ONU_TUNING_OUT,                /**< ONU Tuning out. */
+    BCMOLT_XGPON_ONU_OPER_ID_REQUEST_REGISTRATION,          /**< Request registration. */
+    BCMOLT_XGPON_ONU_OPER_ID_RSSI_MEASUREMENT,              /**< RSSI Measurement. */
+    BCMOLT_XGPON_ONU_OPER_ID_SECURE_MUTUAL_AUTHENTICATION,  /**< Secure mutual authentication. */
+    BCMOLT_XGPON_ONU_OPER_ID_SET_ONU_STATE,                 /**< Set ONU State. */
+    BCMOLT_XGPON_ONU_OPER_ID__NUM_OF                        /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_oper_id;
+
+/** List of all xgpon_onu groups of type proxy. 
+ */
+typedef enum bcmolt_xgpon_onu_proxy_id
+{
+    BCMOLT_XGPON_ONU_PROXY_ID__BEGIN,
+    BCMOLT_XGPON_ONU_PROXY_ID_CPU_PACKETS                                                   = 0,    /**< XGPON CPU packets. */
+    BCMOLT_XGPON_ONU_PROXY_ID_PLOAM_PACKET, /**< PLOAM Packet. */
+    BCMOLT_XGPON_ONU_PROXY_ID__NUM_OF       /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_proxy_id;
+
+/** List of all xgpon_onu groups of type proxy_rx. 
+ */
+typedef enum bcmolt_xgpon_onu_proxy_rx_id
+{
+    BCMOLT_XGPON_ONU_PROXY_RX_ID__BEGIN,
+    BCMOLT_XGPON_ONU_PROXY_RX_ID_CPU_PACKET                                                 = 0,    /**< XGPON CPU packet. */
+    BCMOLT_XGPON_ONU_PROXY_RX_ID_OMCI_PACKET,   /**< XGPON OMCI packet. */
+    BCMOLT_XGPON_ONU_PROXY_RX_ID__NUM_OF        /**< Number of enum entries, not an entry itself. */
+} bcmolt_xgpon_onu_proxy_rx_id;
+
+#define bcmolt_ae_ni_key_id_all_properties                                                  BCMOLT_AE_NI_KEY_ID__NUM_OF
+#define bcmolt_ae_ni_cfg_id_all_properties                                                  BCMOLT_AE_NI_CFG_ID__NUM_OF
+#define bcmolt_ae_ni_set_ae_ni_en_state_id_all_properties                                   BCMOLT_AE_NI_SET_AE_NI_EN_STATE_ID__NUM_OF
+#define bcmolt_ae_path_ds_key_id_all_properties                                             BCMOLT_AE_PATH_DS_KEY_ID__NUM_OF
+#define bcmolt_ae_path_ds_stat_id_all_properties                                            BCMOLT_AE_PATH_DS_STAT_ID__NUM_OF
+#define bcmolt_ae_path_ds_stat_cfg_id_all_properties                                        BCMOLT_AE_PATH_DS_STAT_CFG_ID__NUM_OF
+#define bcmolt_ae_path_ds_stat_alarm_raised_id_all_properties                               BCMOLT_AE_PATH_DS_STAT_ALARM_RAISED_ID__NUM_OF
+#define bcmolt_ae_path_ds_stat_alarm_cleared_id_all_properties                              BCMOLT_AE_PATH_DS_STAT_ALARM_CLEARED_ID__NUM_OF
+#define bcmolt_ae_path_ds_auto_cfg_id_all_properties                                        BCMOLT_AE_PATH_DS_AUTO_CFG_ID__NUM_OF
+#define bcmolt_ae_path_us_key_id_all_properties                                             BCMOLT_AE_PATH_US_KEY_ID__NUM_OF
+#define bcmolt_ae_path_us_stat_id_all_properties                                            BCMOLT_AE_PATH_US_STAT_ID__NUM_OF
+#define bcmolt_ae_path_us_stat_cfg_id_all_properties                                        BCMOLT_AE_PATH_US_STAT_CFG_ID__NUM_OF
+#define bcmolt_ae_path_us_stat_alarm_raised_id_all_properties                               BCMOLT_AE_PATH_US_STAT_ALARM_RAISED_ID__NUM_OF
+#define bcmolt_ae_path_us_stat_alarm_cleared_id_all_properties                              BCMOLT_AE_PATH_US_STAT_ALARM_CLEARED_ID__NUM_OF
+#define bcmolt_ae_path_us_auto_cfg_id_all_properties                                        BCMOLT_AE_PATH_US_AUTO_CFG_ID__NUM_OF
+#define bcmolt_channel_key_id_all_properties                                                BCMOLT_CHANNEL_KEY_ID__NUM_OF
+#define bcmolt_channel_cfg_id_all_properties                                                BCMOLT_CHANNEL_CFG_ID__NUM_OF
+#define bcmolt_debug_key_id_all_properties                                                  BCMOLT_DEBUG_KEY_ID__NUM_OF
+#define bcmolt_debug_cli_input_id_all_properties                                            BCMOLT_DEBUG_CLI_INPUT_ID__NUM_OF
+#define bcmolt_debug_cli_output_id_all_properties                                           BCMOLT_DEBUG_CLI_OUTPUT_ID__NUM_OF
+#define bcmolt_debug_cfg_id_all_properties                                                  BCMOLT_DEBUG_CFG_ID__NUM_OF
+#define bcmolt_debug_file_almost_full_id_all_properties                                     BCMOLT_DEBUG_FILE_ALMOST_FULL_ID__NUM_OF
+#define bcmolt_debug_start_api_capture_id_all_properties                                    BCMOLT_DEBUG_START_API_CAPTURE_ID__NUM_OF
+#define bcmolt_debug_stop_api_capture_id_all_properties                                     BCMOLT_DEBUG_STOP_API_CAPTURE_ID__NUM_OF
+#define bcmolt_debug_reset_api_capture_id_all_properties                                    BCMOLT_DEBUG_RESET_API_CAPTURE_ID__NUM_OF
+#define bcmolt_debug_auto_cfg_id_all_properties                                             BCMOLT_DEBUG_AUTO_CFG_ID__NUM_OF
+#define bcmolt_device_cfg_id_all_properties                                                 BCMOLT_DEVICE_CFG_ID__NUM_OF
+#define bcmolt_device_key_id_all_properties                                                 BCMOLT_DEVICE_KEY_ID__NUM_OF
+#define bcmolt_device_connect_id_all_properties                                             BCMOLT_DEVICE_CONNECT_ID__NUM_OF
+#define bcmolt_device_disconnect_id_all_properties                                          BCMOLT_DEVICE_DISCONNECT_ID__NUM_OF
+#define bcmolt_device_reset_id_all_properties                                               BCMOLT_DEVICE_RESET_ID__NUM_OF
+#define bcmolt_device_host_keep_alive_id_all_properties                                     BCMOLT_DEVICE_HOST_KEEP_ALIVE_ID__NUM_OF
+#define bcmolt_device_sw_upgrade_activate_id_all_properties                                 BCMOLT_DEVICE_SW_UPGRADE_ACTIVATE_ID__NUM_OF
+#define bcmolt_device_device_ready_id_all_properties                                        BCMOLT_DEVICE_DEVICE_READY_ID__NUM_OF
+#define bcmolt_device_connection_established_id_all_properties                              BCMOLT_DEVICE_CONNECTION_ESTABLISHED_ID__NUM_OF
+#define bcmolt_device_device_keep_alive_id_all_properties                                   BCMOLT_DEVICE_DEVICE_KEEP_ALIVE_ID__NUM_OF
+#define bcmolt_device_connection_failure_id_all_properties                                  BCMOLT_DEVICE_CONNECTION_FAILURE_ID__NUM_OF
+#define bcmolt_device_connection_complete_id_all_properties                                 BCMOLT_DEVICE_CONNECTION_COMPLETE_ID__NUM_OF
+#define bcmolt_device_disconnection_complete_id_all_properties                              BCMOLT_DEVICE_DISCONNECTION_COMPLETE_ID__NUM_OF
+#define bcmolt_device_sw_error_id_all_properties                                            BCMOLT_DEVICE_SW_ERROR_ID__NUM_OF
+#define bcmolt_device_sw_exception_id_all_properties                                        BCMOLT_DEVICE_SW_EXCEPTION_ID__NUM_OF
+#define bcmolt_device_indications_dropped_id_all_properties                                 BCMOLT_DEVICE_INDICATIONS_DROPPED_ID__NUM_OF
+#define bcmolt_device_image_transfer_start_id_all_properties                                BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID__NUM_OF
+#define bcmolt_device_image_transfer_data_id_all_properties                                 BCMOLT_DEVICE_IMAGE_TRANSFER_DATA_ID__NUM_OF
+#define bcmolt_device_image_transfer_complete_id_all_properties                             BCMOLT_DEVICE_IMAGE_TRANSFER_COMPLETE_ID__NUM_OF
+#define bcmolt_device_run_ddr_test_id_all_properties                                        BCMOLT_DEVICE_RUN_DDR_TEST_ID__NUM_OF
+#define bcmolt_device_ddr_test_complete_id_all_properties                                   BCMOLT_DEVICE_DDR_TEST_COMPLETE_ID__NUM_OF
+#define bcmolt_device_auto_cfg_id_all_properties                                            BCMOLT_DEVICE_AUTO_CFG_ID__NUM_OF
+#define bcmolt_epon_denied_link_key_id_all_properties                                       BCMOLT_EPON_DENIED_LINK_KEY_ID__NUM_OF
+#define bcmolt_epon_denied_link_cfg_id_all_properties                                       BCMOLT_EPON_DENIED_LINK_CFG_ID__NUM_OF
+#define bcmolt_epon_denied_link_unknown_link_violation_id_all_properties                    BCMOLT_EPON_DENIED_LINK_UNKNOWN_LINK_VIOLATION_ID__NUM_OF
+#define bcmolt_epon_denied_link_overhead_profile_violation_id_all_properties                BCMOLT_EPON_DENIED_LINK_OVERHEAD_PROFILE_VIOLATION_ID__NUM_OF
+#define bcmolt_epon_denied_link_laser_on_off_violation_id_all_properties                    BCMOLT_EPON_DENIED_LINK_LASER_ON_OFF_VIOLATION_ID__NUM_OF
+#define bcmolt_epon_denied_link_max_link_violation_id_all_properties                        BCMOLT_EPON_DENIED_LINK_MAX_LINK_VIOLATION_ID__NUM_OF
+#define bcmolt_epon_denied_link_llid_pool_empty_violation_id_all_properties                 BCMOLT_EPON_DENIED_LINK_LLID_POOL_EMPTY_VIOLATION_ID__NUM_OF
+#define bcmolt_epon_denied_link_system_resource_violation_id_all_properties                 BCMOLT_EPON_DENIED_LINK_SYSTEM_RESOURCE_VIOLATION_ID__NUM_OF
+#define bcmolt_epon_denied_link_range_violation_id_all_properties                           BCMOLT_EPON_DENIED_LINK_RANGE_VIOLATION_ID__NUM_OF
+#define bcmolt_epon_denied_link_tdm_channels_exhausted_id_all_properties                    BCMOLT_EPON_DENIED_LINK_TDM_CHANNELS_EXHAUSTED_ID__NUM_OF
+#define bcmolt_epon_denied_link_rogue_violation_id_all_properties                           BCMOLT_EPON_DENIED_LINK_ROGUE_VIOLATION_ID__NUM_OF
+#define bcmolt_epon_denied_link_upstream_bandwidth_violation_id_all_properties              BCMOLT_EPON_DENIED_LINK_UPSTREAM_BANDWIDTH_VIOLATION_ID__NUM_OF
+#define bcmolt_epon_denied_link_auto_cfg_id_all_properties                                  BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID__NUM_OF
+#define bcmolt_epon_link_key_id_all_properties                                              BCMOLT_EPON_LINK_KEY_ID__NUM_OF
+#define bcmolt_epon_link_cfg_id_all_properties                                              BCMOLT_EPON_LINK_CFG_ID__NUM_OF
+#define bcmolt_epon_link_stat_id_all_properties                                             BCMOLT_EPON_LINK_STAT_ID__NUM_OF
+#define bcmolt_epon_link_force_rediscovery_id_all_properties                                BCMOLT_EPON_LINK_FORCE_REDISCOVERY_ID__NUM_OF
+#define bcmolt_epon_link_delete_link_id_all_properties                                      BCMOLT_EPON_LINK_DELETE_LINK_ID__NUM_OF
+#define bcmolt_epon_link_key_exchange_failure_id_all_properties                             BCMOLT_EPON_LINK_KEY_EXCHANGE_FAILURE_ID__NUM_OF
+#define bcmolt_epon_link_encryption_enabled_id_all_properties                               BCMOLT_EPON_LINK_ENCRYPTION_ENABLED_ID__NUM_OF
+#define bcmolt_epon_link_mpcp_reg_ack_timeout_id_all_properties                             BCMOLT_EPON_LINK_MPCP_REG_ACK_TIMEOUT_ID__NUM_OF
+#define bcmolt_epon_link_range_value_changed_id_all_properties                              BCMOLT_EPON_LINK_RANGE_VALUE_CHANGED_ID__NUM_OF
+#define bcmolt_epon_link_protection_switch_occurred_id_all_properties                       BCMOLT_EPON_LINK_PROTECTION_SWITCH_OCCURRED_ID__NUM_OF
+#define bcmolt_epon_link_duplicate_mpcp_registration_request_id_all_properties              BCMOLT_EPON_LINK_DUPLICATE_MPCP_REGISTRATION_REQUEST_ID__NUM_OF
+#define bcmolt_epon_link_link_speed_mismatch_id_all_properties                              BCMOLT_EPON_LINK_LINK_SPEED_MISMATCH_ID__NUM_OF
+#define bcmolt_epon_link_mpcp_report_timeout_id_all_properties                              BCMOLT_EPON_LINK_MPCP_REPORT_TIMEOUT_ID__NUM_OF
+#define bcmolt_epon_link_oam_keepalive_timeout_id_all_properties                            BCMOLT_EPON_LINK_OAM_KEEPALIVE_TIMEOUT_ID__NUM_OF
+#define bcmolt_epon_link_mpcp_discovered_id_all_properties                                  BCMOLT_EPON_LINK_MPCP_DISCOVERED_ID__NUM_OF
+#define bcmolt_epon_link_mpcp_deregistered_id_all_properties                                BCMOLT_EPON_LINK_MPCP_DEREGISTERED_ID__NUM_OF
+#define bcmolt_epon_link_preprovisioned_link_created_id_all_properties                      BCMOLT_EPON_LINK_PREPROVISIONED_LINK_CREATED_ID__NUM_OF
+#define bcmolt_epon_link_oam_keepalive_timer_start_id_all_properties                        BCMOLT_EPON_LINK_OAM_KEEPALIVE_TIMER_START_ID__NUM_OF
+#define bcmolt_epon_link_oam_keepalive_timer_stop_id_all_properties                         BCMOLT_EPON_LINK_OAM_KEEPALIVE_TIMER_STOP_ID__NUM_OF
+#define bcmolt_epon_link_key_exchange_start_id_all_properties                               BCMOLT_EPON_LINK_KEY_EXCHANGE_START_ID__NUM_OF
+#define bcmolt_epon_link_key_exchange_stop_id_all_properties                                BCMOLT_EPON_LINK_KEY_EXCHANGE_STOP_ID__NUM_OF
+#define bcmolt_epon_link_oam_keepalive_timer_started_id_all_properties                      BCMOLT_EPON_LINK_OAM_KEEPALIVE_TIMER_STARTED_ID__NUM_OF
+#define bcmolt_epon_link_oam_keepalive_timer_stopped_id_all_properties                      BCMOLT_EPON_LINK_OAM_KEEPALIVE_TIMER_STOPPED_ID__NUM_OF
+#define bcmolt_epon_link_key_exchange_started_id_all_properties                             BCMOLT_EPON_LINK_KEY_EXCHANGE_STARTED_ID__NUM_OF
+#define bcmolt_epon_link_key_exchange_stopped_id_all_properties                             BCMOLT_EPON_LINK_KEY_EXCHANGE_STOPPED_ID__NUM_OF
+#define bcmolt_epon_link_static_registration_id_all_properties                              BCMOLT_EPON_LINK_STATIC_REGISTRATION_ID__NUM_OF
+#define bcmolt_epon_link_static_registration_done_id_all_properties                         BCMOLT_EPON_LINK_STATIC_REGISTRATION_DONE_ID__NUM_OF
+#define bcmolt_epon_link_rerange_failure_id_all_properties                                  BCMOLT_EPON_LINK_RERANGE_FAILURE_ID__NUM_OF
+#define bcmolt_epon_link_inject_frame_id_all_properties                                     BCMOLT_EPON_LINK_INJECT_FRAME_ID__NUM_OF
+#define bcmolt_epon_link_frame_captured_id_all_properties                                   BCMOLT_EPON_LINK_FRAME_CAPTURED_ID__NUM_OF
+#define bcmolt_epon_link_link_deleted_id_all_properties                                     BCMOLT_EPON_LINK_LINK_DELETED_ID__NUM_OF
+#define bcmolt_epon_link_stat_cfg_id_all_properties                                         BCMOLT_EPON_LINK_STAT_CFG_ID__NUM_OF
+#define bcmolt_epon_link_stat_alarm_raised_id_all_properties                                BCMOLT_EPON_LINK_STAT_ALARM_RAISED_ID__NUM_OF
+#define bcmolt_epon_link_stat_alarm_cleared_id_all_properties                               BCMOLT_EPON_LINK_STAT_ALARM_CLEARED_ID__NUM_OF
+#define bcmolt_epon_link_auto_cfg_id_all_properties                                         BCMOLT_EPON_LINK_AUTO_CFG_ID__NUM_OF
+#define bcmolt_epon_ni_key_id_all_properties                                                BCMOLT_EPON_NI_KEY_ID__NUM_OF
+#define bcmolt_epon_ni_cfg_id_all_properties                                                BCMOLT_EPON_NI_CFG_ID__NUM_OF
+#define bcmolt_epon_ni_set_epon_ni_en_state_id_all_properties                               BCMOLT_EPON_NI_SET_EPON_NI_EN_STATE_ID__NUM_OF
+#define bcmolt_epon_ni_issue_rssi_grant_id_all_properties                                   BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID__NUM_OF
+#define bcmolt_epon_ni_add_link_id_all_properties                                           BCMOLT_EPON_NI_ADD_LINK_ID__NUM_OF
+#define bcmolt_epon_ni_add_multicast_link_id_all_properties                                 BCMOLT_EPON_NI_ADD_MULTICAST_LINK_ID__NUM_OF
+#define bcmolt_epon_ni_add_protected_standby_link_id_all_properties                         BCMOLT_EPON_NI_ADD_PROTECTED_STANDBY_LINK_ID__NUM_OF
+#define bcmolt_epon_ni_no_reports_id_all_properties                                         BCMOLT_EPON_NI_NO_REPORTS_ID__NUM_OF
+#define bcmolt_epon_ni_llid_quarantined_id_all_properties                                   BCMOLT_EPON_NI_LLID_QUARANTINED_ID__NUM_OF
+#define bcmolt_epon_ni_state_change_completed_id_all_properties                             BCMOLT_EPON_NI_STATE_CHANGE_COMPLETED_ID__NUM_OF
+#define bcmolt_epon_ni_protection_switching_apply_rerange_delta_id_all_properties           BCMOLT_EPON_NI_PROTECTION_SWITCHING_APPLY_RERANGE_DELTA_ID__NUM_OF
+#define bcmolt_epon_ni_rerange_failure_id_all_properties                                    BCMOLT_EPON_NI_RERANGE_FAILURE_ID__NUM_OF
+#define bcmolt_epon_ni_rssi_measurement_completed_id_all_properties                         BCMOLT_EPON_NI_RSSI_MEASUREMENT_COMPLETED_ID__NUM_OF
+#define bcmolt_epon_ni_rogue_llid_scan_id_all_properties                                    BCMOLT_EPON_NI_ROGUE_LLID_SCAN_ID__NUM_OF
+#define bcmolt_epon_ni_start_onu_upgrade_id_all_properties                                  BCMOLT_EPON_NI_START_ONU_UPGRADE_ID__NUM_OF
+#define bcmolt_epon_ni_onu_upgrade_complete_id_all_properties                               BCMOLT_EPON_NI_ONU_UPGRADE_COMPLETE_ID__NUM_OF
+#define bcmolt_epon_ni_rogue_scan_complete_id_all_properties                                BCMOLT_EPON_NI_ROGUE_SCAN_COMPLETE_ID__NUM_OF
+#define bcmolt_epon_ni_mpcp_timestamp_changed_id_all_properties                             BCMOLT_EPON_NI_MPCP_TIMESTAMP_CHANGED_ID__NUM_OF
+#define bcmolt_epon_ni_auto_rogue_scan_1g_failure_id_all_properties                         BCMOLT_EPON_NI_AUTO_ROGUE_SCAN_1G_FAILURE_ID__NUM_OF
+#define bcmolt_epon_ni_auto_rogue_scan_10g_failure_id_all_properties                        BCMOLT_EPON_NI_AUTO_ROGUE_SCAN_10G_FAILURE_ID__NUM_OF
+#define bcmolt_epon_ni_auto_cfg_id_all_properties                                           BCMOLT_EPON_NI_AUTO_CFG_ID__NUM_OF
+#define bcmolt_epon_onu_10g_us_key_id_all_properties                                        BCMOLT_EPON_ONU_10G_US_KEY_ID__NUM_OF
+#define bcmolt_epon_onu_10g_us_stat_id_all_properties                                       BCMOLT_EPON_ONU_10G_US_STAT_ID__NUM_OF
+#define bcmolt_epon_onu_10g_us_cfg_id_all_properties                                        BCMOLT_EPON_ONU_10G_US_CFG_ID__NUM_OF
+#define bcmolt_epon_onu_10g_us_stat_cfg_id_all_properties                                   BCMOLT_EPON_ONU_10G_US_STAT_CFG_ID__NUM_OF
+#define bcmolt_epon_onu_10g_us_stat_alarm_raised_id_all_properties                          BCMOLT_EPON_ONU_10G_US_STAT_ALARM_RAISED_ID__NUM_OF
+#define bcmolt_epon_onu_10g_us_stat_alarm_cleared_id_all_properties                         BCMOLT_EPON_ONU_10G_US_STAT_ALARM_CLEARED_ID__NUM_OF
+#define bcmolt_epon_onu_10g_us_auto_cfg_id_all_properties                                   BCMOLT_EPON_ONU_10G_US_AUTO_CFG_ID__NUM_OF
+#define bcmolt_epon_onu_1g_us_key_id_all_properties                                         BCMOLT_EPON_ONU_1G_US_KEY_ID__NUM_OF
+#define bcmolt_epon_onu_1g_us_stat_id_all_properties                                        BCMOLT_EPON_ONU_1G_US_STAT_ID__NUM_OF
+#define bcmolt_epon_onu_1g_us_cfg_id_all_properties                                         BCMOLT_EPON_ONU_1G_US_CFG_ID__NUM_OF
+#define bcmolt_epon_onu_1g_us_stat_cfg_id_all_properties                                    BCMOLT_EPON_ONU_1G_US_STAT_CFG_ID__NUM_OF
+#define bcmolt_epon_onu_1g_us_stat_alarm_raised_id_all_properties                           BCMOLT_EPON_ONU_1G_US_STAT_ALARM_RAISED_ID__NUM_OF
+#define bcmolt_epon_onu_1g_us_stat_alarm_cleared_id_all_properties                          BCMOLT_EPON_ONU_1G_US_STAT_ALARM_CLEARED_ID__NUM_OF
+#define bcmolt_epon_onu_1g_us_auto_cfg_id_all_properties                                    BCMOLT_EPON_ONU_1G_US_AUTO_CFG_ID__NUM_OF
+#define bcmolt_epon_path_10g_ds_key_id_all_properties                                       BCMOLT_EPON_PATH_10G_DS_KEY_ID__NUM_OF
+#define bcmolt_epon_path_10g_ds_cfg_id_all_properties                                       BCMOLT_EPON_PATH_10G_DS_CFG_ID__NUM_OF
+#define bcmolt_epon_path_10g_ds_stat_id_all_properties                                      BCMOLT_EPON_PATH_10G_DS_STAT_ID__NUM_OF
+#define bcmolt_epon_path_10g_ds_stat_cfg_id_all_properties                                  BCMOLT_EPON_PATH_10G_DS_STAT_CFG_ID__NUM_OF
+#define bcmolt_epon_path_10g_ds_stat_alarm_raised_id_all_properties                         BCMOLT_EPON_PATH_10G_DS_STAT_ALARM_RAISED_ID__NUM_OF
+#define bcmolt_epon_path_10g_ds_stat_alarm_cleared_id_all_properties                        BCMOLT_EPON_PATH_10G_DS_STAT_ALARM_CLEARED_ID__NUM_OF
+#define bcmolt_epon_path_10g_ds_auto_cfg_id_all_properties                                  BCMOLT_EPON_PATH_10G_DS_AUTO_CFG_ID__NUM_OF
+#define bcmolt_epon_path_10g_us_key_id_all_properties                                       BCMOLT_EPON_PATH_10G_US_KEY_ID__NUM_OF
+#define bcmolt_epon_path_10g_us_cfg_id_all_properties                                       BCMOLT_EPON_PATH_10G_US_CFG_ID__NUM_OF
+#define bcmolt_epon_path_10g_us_stat_id_all_properties                                      BCMOLT_EPON_PATH_10G_US_STAT_ID__NUM_OF
+#define bcmolt_epon_path_10g_us_stat_cfg_id_all_properties                                  BCMOLT_EPON_PATH_10G_US_STAT_CFG_ID__NUM_OF
+#define bcmolt_epon_path_10g_us_stat_alarm_raised_id_all_properties                         BCMOLT_EPON_PATH_10G_US_STAT_ALARM_RAISED_ID__NUM_OF
+#define bcmolt_epon_path_10g_us_stat_alarm_cleared_id_all_properties                        BCMOLT_EPON_PATH_10G_US_STAT_ALARM_CLEARED_ID__NUM_OF
+#define bcmolt_epon_path_10g_us_auto_cfg_id_all_properties                                  BCMOLT_EPON_PATH_10G_US_AUTO_CFG_ID__NUM_OF
+#define bcmolt_epon_path_1g_ds_key_id_all_properties                                        BCMOLT_EPON_PATH_1G_DS_KEY_ID__NUM_OF
+#define bcmolt_epon_path_1g_ds_cfg_id_all_properties                                        BCMOLT_EPON_PATH_1G_DS_CFG_ID__NUM_OF
+#define bcmolt_epon_path_1g_ds_stat_id_all_properties                                       BCMOLT_EPON_PATH_1G_DS_STAT_ID__NUM_OF
+#define bcmolt_epon_path_1g_ds_stat_cfg_id_all_properties                                   BCMOLT_EPON_PATH_1G_DS_STAT_CFG_ID__NUM_OF
+#define bcmolt_epon_path_1g_ds_stat_alarm_raised_id_all_properties                          BCMOLT_EPON_PATH_1G_DS_STAT_ALARM_RAISED_ID__NUM_OF
+#define bcmolt_epon_path_1g_ds_stat_alarm_cleared_id_all_properties                         BCMOLT_EPON_PATH_1G_DS_STAT_ALARM_CLEARED_ID__NUM_OF
+#define bcmolt_epon_path_1g_ds_auto_cfg_id_all_properties                                   BCMOLT_EPON_PATH_1G_DS_AUTO_CFG_ID__NUM_OF
+#define bcmolt_epon_path_1g_us_key_id_all_properties                                        BCMOLT_EPON_PATH_1G_US_KEY_ID__NUM_OF
+#define bcmolt_epon_path_1g_us_cfg_id_all_properties                                        BCMOLT_EPON_PATH_1G_US_CFG_ID__NUM_OF
+#define bcmolt_epon_path_1g_us_stat_id_all_properties                                       BCMOLT_EPON_PATH_1G_US_STAT_ID__NUM_OF
+#define bcmolt_epon_path_1g_us_stat_cfg_id_all_properties                                   BCMOLT_EPON_PATH_1G_US_STAT_CFG_ID__NUM_OF
+#define bcmolt_epon_path_1g_us_stat_alarm_raised_id_all_properties                          BCMOLT_EPON_PATH_1G_US_STAT_ALARM_RAISED_ID__NUM_OF
+#define bcmolt_epon_path_1g_us_stat_alarm_cleared_id_all_properties                         BCMOLT_EPON_PATH_1G_US_STAT_ALARM_CLEARED_ID__NUM_OF
+#define bcmolt_epon_path_1g_us_auto_cfg_id_all_properties                                   BCMOLT_EPON_PATH_1G_US_AUTO_CFG_ID__NUM_OF
+#define bcmolt_epon_rp_key_id_all_properties                                                BCMOLT_EPON_RP_KEY_ID__NUM_OF
+#define bcmolt_epon_rp_cfg_id_all_properties                                                BCMOLT_EPON_RP_CFG_ID__NUM_OF
+#define bcmolt_gpio_key_id_all_properties                                                   BCMOLT_GPIO_KEY_ID__NUM_OF
+#define bcmolt_gpio_cfg_id_all_properties                                                   BCMOLT_GPIO_CFG_ID__NUM_OF
+#define bcmolt_gpon_alloc_key_id_all_properties                                             BCMOLT_GPON_ALLOC_KEY_ID__NUM_OF
+#define bcmolt_gpon_alloc_cfg_id_all_properties                                             BCMOLT_GPON_ALLOC_CFG_ID__NUM_OF
+#define bcmolt_gpon_alloc_stat_id_all_properties                                            BCMOLT_GPON_ALLOC_STAT_ID__NUM_OF
+#define bcmolt_gpon_alloc_configuration_completed_id_all_properties                         BCMOLT_GPON_ALLOC_CONFIGURATION_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_alloc_set_state_id_all_properties                                       BCMOLT_GPON_ALLOC_SET_STATE_ID__NUM_OF
+#define bcmolt_gpon_alloc_get_stats_id_all_properties                                       BCMOLT_GPON_ALLOC_GET_STATS_ID__NUM_OF
+#define bcmolt_gpon_alloc_get_alloc_stats_completed_id_all_properties                       BCMOLT_GPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_alloc_stat_cfg_id_all_properties                                        BCMOLT_GPON_ALLOC_STAT_CFG_ID__NUM_OF
+#define bcmolt_gpon_alloc_stat_alarm_raised_id_all_properties                               BCMOLT_GPON_ALLOC_STAT_ALARM_RAISED_ID__NUM_OF
+#define bcmolt_gpon_alloc_stat_alarm_cleared_id_all_properties                              BCMOLT_GPON_ALLOC_STAT_ALARM_CLEARED_ID__NUM_OF
+#define bcmolt_gpon_alloc_auto_cfg_id_all_properties                                        BCMOLT_GPON_ALLOC_AUTO_CFG_ID__NUM_OF
+#define bcmolt_gpon_gem_port_key_id_all_properties                                          BCMOLT_GPON_GEM_PORT_KEY_ID__NUM_OF
+#define bcmolt_gpon_gem_port_cfg_id_all_properties                                          BCMOLT_GPON_GEM_PORT_CFG_ID__NUM_OF
+#define bcmolt_gpon_gem_port_stat_id_all_properties                                         BCMOLT_GPON_GEM_PORT_STAT_ID__NUM_OF
+#define bcmolt_gpon_gem_port_configuration_completed_id_all_properties                      BCMOLT_GPON_GEM_PORT_CONFIGURATION_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_gem_port_set_state_id_all_properties                                    BCMOLT_GPON_GEM_PORT_SET_STATE_ID__NUM_OF
+#define bcmolt_gpon_gem_port_stat_cfg_id_all_properties                                     BCMOLT_GPON_GEM_PORT_STAT_CFG_ID__NUM_OF
+#define bcmolt_gpon_gem_port_stat_alarm_raised_id_all_properties                            BCMOLT_GPON_GEM_PORT_STAT_ALARM_RAISED_ID__NUM_OF
+#define bcmolt_gpon_gem_port_stat_alarm_cleared_id_all_properties                           BCMOLT_GPON_GEM_PORT_STAT_ALARM_CLEARED_ID__NUM_OF
+#define bcmolt_gpon_gem_port_auto_cfg_id_all_properties                                     BCMOLT_GPON_GEM_PORT_AUTO_CFG_ID__NUM_OF
+#define bcmolt_gpon_iwf_key_id_all_properties                                               BCMOLT_GPON_IWF_KEY_ID__NUM_OF
+#define bcmolt_gpon_iwf_cfg_id_all_properties                                               BCMOLT_GPON_IWF_CFG_ID__NUM_OF
+#define bcmolt_gpon_iwf_stat_id_all_properties                                              BCMOLT_GPON_IWF_STAT_ID__NUM_OF
+#define bcmolt_gpon_iwf_flush_mac_table_id_all_properties                                   BCMOLT_GPON_IWF_FLUSH_MAC_TABLE_ID__NUM_OF
+#define bcmolt_gpon_iwf_scan_mac_table_id_all_properties                                    BCMOLT_GPON_IWF_SCAN_MAC_TABLE_ID__NUM_OF
+#define bcmolt_gpon_iwf_flush_mac_table_completed_id_all_properties                         BCMOLT_GPON_IWF_FLUSH_MAC_TABLE_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_iwf_scan_mac_table_completed_id_all_properties                          BCMOLT_GPON_IWF_SCAN_MAC_TABLE_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_iwf_stat_cfg_id_all_properties                                          BCMOLT_GPON_IWF_STAT_CFG_ID__NUM_OF
+#define bcmolt_gpon_iwf_stat_alarm_raised_id_all_properties                                 BCMOLT_GPON_IWF_STAT_ALARM_RAISED_ID__NUM_OF
+#define bcmolt_gpon_iwf_stat_alarm_cleared_id_all_properties                                BCMOLT_GPON_IWF_STAT_ALARM_CLEARED_ID__NUM_OF
+#define bcmolt_gpon_iwf_auto_cfg_id_all_properties                                          BCMOLT_GPON_IWF_AUTO_CFG_ID__NUM_OF
+#define bcmolt_gpon_iwf_ds_egress_flow_key_id_all_properties                                BCMOLT_GPON_IWF_DS_EGRESS_FLOW_KEY_ID__NUM_OF
+#define bcmolt_gpon_iwf_ds_egress_flow_cfg_id_all_properties                                BCMOLT_GPON_IWF_DS_EGRESS_FLOW_CFG_ID__NUM_OF
+#define bcmolt_gpon_iwf_ds_ingress_flow_key_id_all_properties                               BCMOLT_GPON_IWF_DS_INGRESS_FLOW_KEY_ID__NUM_OF
+#define bcmolt_gpon_iwf_ds_ingress_flow_cfg_id_all_properties                               BCMOLT_GPON_IWF_DS_INGRESS_FLOW_CFG_ID__NUM_OF
+#define bcmolt_gpon_iwf_mac_table_key_id_all_properties                                     BCMOLT_GPON_IWF_MAC_TABLE_KEY_ID__NUM_OF
+#define bcmolt_gpon_iwf_mac_table_cfg_id_all_properties                                     BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID__NUM_OF
+#define bcmolt_gpon_iwf_mac_table_new_mac_id_all_properties                                 BCMOLT_GPON_IWF_MAC_TABLE_NEW_MAC_ID__NUM_OF
+#define bcmolt_gpon_iwf_mac_table_mac_aged_id_all_properties                                BCMOLT_GPON_IWF_MAC_TABLE_MAC_AGED_ID__NUM_OF
+#define bcmolt_gpon_iwf_mac_table_mac_move_id_all_properties                                BCMOLT_GPON_IWF_MAC_TABLE_MAC_MOVE_ID__NUM_OF
+#define bcmolt_gpon_iwf_mac_table_mac_dropped_id_all_properties                             BCMOLT_GPON_IWF_MAC_TABLE_MAC_DROPPED_ID__NUM_OF
+#define bcmolt_gpon_iwf_mac_table_auto_cfg_id_all_properties                                BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID__NUM_OF
+#define bcmolt_gpon_iwf_us_flow_key_id_all_properties                                       BCMOLT_GPON_IWF_US_FLOW_KEY_ID__NUM_OF
+#define bcmolt_gpon_iwf_us_flow_cfg_id_all_properties                                       BCMOLT_GPON_IWF_US_FLOW_CFG_ID__NUM_OF
+#define bcmolt_gpon_ni_key_id_all_properties                                                BCMOLT_GPON_NI_KEY_ID__NUM_OF
+#define bcmolt_gpon_ni_cfg_id_all_properties                                                BCMOLT_GPON_NI_CFG_ID__NUM_OF
+#define bcmolt_gpon_ni_stat_id_all_properties                                               BCMOLT_GPON_NI_STAT_ID__NUM_OF
+#define bcmolt_gpon_ni_set_pon_state_id_all_properties                                      BCMOLT_GPON_NI_SET_PON_STATE_ID__NUM_OF
+#define bcmolt_gpon_ni_reset_id_all_properties                                              BCMOLT_GPON_NI_RESET_ID__NUM_OF
+#define bcmolt_gpon_ni_disable_serial_number_id_all_properties                              BCMOLT_GPON_NI_DISABLE_SERIAL_NUMBER_ID__NUM_OF
+#define bcmolt_gpon_ni_single_request_standby_pon_monitoring_id_all_properties              BCMOLT_GPON_NI_SINGLE_REQUEST_STANDBY_PON_MONITORING_ID__NUM_OF
+#define bcmolt_gpon_ni_set_onu_state_id_all_properties                                      BCMOLT_GPON_NI_SET_ONU_STATE_ID__NUM_OF
+#define bcmolt_gpon_ni_state_change_completed_id_all_properties                             BCMOLT_GPON_NI_STATE_CHANGE_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_ni_los_id_all_properties                                                BCMOLT_GPON_NI_LOS_ID__NUM_OF
+#define bcmolt_gpon_ni_serial_number_acquisition_cycle_start_id_all_properties              BCMOLT_GPON_NI_SERIAL_NUMBER_ACQUISITION_CYCLE_START_ID__NUM_OF
+#define bcmolt_gpon_ni_protection_switching_traffic_resume_id_all_properties                BCMOLT_GPON_NI_PROTECTION_SWITCHING_TRAFFIC_RESUME_ID__NUM_OF
+#define bcmolt_gpon_ni_protection_switching_onus_ranged_id_all_properties                   BCMOLT_GPON_NI_PROTECTION_SWITCHING_ONUS_RANGED_ID__NUM_OF
+#define bcmolt_gpon_ni_protection_switching_switchover_completed_id_all_properties          BCMOLT_GPON_NI_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_id_all_properties             BCMOLT_GPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_ni_onu_discovered_id_all_properties                                     BCMOLT_GPON_NI_ONU_DISCOVERED_ID__NUM_OF
+#define bcmolt_gpon_ni_cpu_packets_failure_id_all_properties                                BCMOLT_GPON_NI_CPU_PACKETS_FAILURE_ID__NUM_OF
+#define bcmolt_gpon_ni_cpu_packets_id_all_properties                                        BCMOLT_GPON_NI_CPU_PACKETS_ID__NUM_OF
+#define bcmolt_gpon_ni_broadcast_ploam_packet_id_all_properties                             BCMOLT_GPON_NI_BROADCAST_PLOAM_PACKET_ID__NUM_OF
+#define bcmolt_gpon_ni_rogue_detection_window_id_all_properties                             BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID__NUM_OF
+#define bcmolt_gpon_ni_rogue_detection_completed_id_all_properties                          BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_ni_deactivate_all_onus_completed_id_all_properties                      BCMOLT_GPON_NI_DEACTIVATE_ALL_ONUS_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_ni_disable_all_onus_completed_id_all_properties                         BCMOLT_GPON_NI_DISABLE_ALL_ONUS_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_ni_activate_all_onus_completed_id_all_properties                        BCMOLT_GPON_NI_ACTIVATE_ALL_ONUS_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_ni_enable_all_onus_completed_id_all_properties                          BCMOLT_GPON_NI_ENABLE_ALL_ONUS_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_ni_tod_request_id_all_properties                                        BCMOLT_GPON_NI_TOD_REQUEST_ID__NUM_OF
+#define bcmolt_gpon_ni_tod_request_completed_id_all_properties                              BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_id_all_properties BCMOLT_GPON_NI_PROTECTION_SWITCHING_TYPE_C_SET_MULTIPLE_ONU_STATE_ID__NUM_OF
+#define bcmolt_gpon_ni_start_onu_upgrade_id_all_properties                                  BCMOLT_GPON_NI_START_ONU_UPGRADE_ID__NUM_OF
+#define bcmolt_gpon_ni_onu_upgrade_complete_id_all_properties                               BCMOLT_GPON_NI_ONU_UPGRADE_COMPLETE_ID__NUM_OF
+#define bcmolt_gpon_ni_rogue_onu_special_map_cycle_start_id_all_properties                  BCMOLT_GPON_NI_ROGUE_ONU_SPECIAL_MAP_CYCLE_START_ID__NUM_OF
+#define bcmolt_gpon_ni_stat_cfg_id_all_properties                                           BCMOLT_GPON_NI_STAT_CFG_ID__NUM_OF
+#define bcmolt_gpon_ni_stat_alarm_raised_id_all_properties                                  BCMOLT_GPON_NI_STAT_ALARM_RAISED_ID__NUM_OF
+#define bcmolt_gpon_ni_stat_alarm_cleared_id_all_properties                                 BCMOLT_GPON_NI_STAT_ALARM_CLEARED_ID__NUM_OF
+#define bcmolt_gpon_ni_auto_cfg_id_all_properties                                           BCMOLT_GPON_NI_AUTO_CFG_ID__NUM_OF
+#define bcmolt_gpon_onu_key_id_all_properties                                               BCMOLT_GPON_ONU_KEY_ID__NUM_OF
+#define bcmolt_gpon_onu_cfg_id_all_properties                                               BCMOLT_GPON_ONU_CFG_ID__NUM_OF
+#define bcmolt_gpon_onu_stat_id_all_properties                                              BCMOLT_GPON_ONU_STAT_ID__NUM_OF
+#define bcmolt_gpon_onu_set_onu_state_id_all_properties                                     BCMOLT_GPON_ONU_SET_ONU_STATE_ID__NUM_OF
+#define bcmolt_gpon_onu_rssi_measurement_id_all_properties                                  BCMOLT_GPON_ONU_RSSI_MEASUREMENT_ID__NUM_OF
+#define bcmolt_gpon_onu_change_power_level_id_all_properties                                BCMOLT_GPON_ONU_CHANGE_POWER_LEVEL_ID__NUM_OF
+#define bcmolt_gpon_onu_onu_alarm_id_all_properties                                         BCMOLT_GPON_ONU_ONU_ALARM_ID__NUM_OF
+#define bcmolt_gpon_onu_dowi_id_all_properties                                              BCMOLT_GPON_ONU_DOWI_ID__NUM_OF
+#define bcmolt_gpon_onu_sfi_id_all_properties                                               BCMOLT_GPON_ONU_SFI_ID__NUM_OF
+#define bcmolt_gpon_onu_sdi_id_all_properties                                               BCMOLT_GPON_ONU_SDI_ID__NUM_OF
+#define bcmolt_gpon_onu_dfi_id_all_properties                                               BCMOLT_GPON_ONU_DFI_ID__NUM_OF
+#define bcmolt_gpon_onu_sufi_id_all_properties                                              BCMOLT_GPON_ONU_SUFI_ID__NUM_OF
+#define bcmolt_gpon_onu_loai_id_all_properties                                              BCMOLT_GPON_ONU_LOAI_ID__NUM_OF
+#define bcmolt_gpon_onu_dgi_id_all_properties                                               BCMOLT_GPON_ONU_DGI_ID__NUM_OF
+#define bcmolt_gpon_onu_pee_id_all_properties                                               BCMOLT_GPON_ONU_PEE_ID__NUM_OF
+#define bcmolt_gpon_onu_pst_id_all_properties                                               BCMOLT_GPON_ONU_PST_ID__NUM_OF
+#define bcmolt_gpon_onu_tiwi_id_all_properties                                              BCMOLT_GPON_ONU_TIWI_ID__NUM_OF
+#define bcmolt_gpon_onu_loki_id_all_properties                                              BCMOLT_GPON_ONU_LOKI_ID__NUM_OF
+#define bcmolt_gpon_onu_memi_id_all_properties                                              BCMOLT_GPON_ONU_MEMI_ID__NUM_OF
+#define bcmolt_gpon_onu_omci_port_id_configuration_completed_id_all_properties              BCMOLT_GPON_ONU_OMCI_PORT_ID_CONFIGURATION_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_onu_ber_interval_configuration_completed_id_all_properties              BCMOLT_GPON_ONU_BER_INTERVAL_CONFIGURATION_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_onu_err_id_all_properties                                               BCMOLT_GPON_ONU_ERR_ID__NUM_OF
+#define bcmolt_gpon_onu_rei_id_all_properties                                               BCMOLT_GPON_ONU_REI_ID__NUM_OF
+#define bcmolt_gpon_onu_ranging_completed_id_all_properties                                 BCMOLT_GPON_ONU_RANGING_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_onu_password_authentication_completed_id_all_properties                 BCMOLT_GPON_ONU_PASSWORD_AUTHENTICATION_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_onu_onu_activation_completed_id_all_properties                          BCMOLT_GPON_ONU_ONU_ACTIVATION_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_onu_onu_deactivation_completed_id_all_properties                        BCMOLT_GPON_ONU_ONU_DEACTIVATION_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_onu_onu_enable_completed_id_all_properties                              BCMOLT_GPON_ONU_ONU_ENABLE_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_onu_onu_disable_completed_id_all_properties                             BCMOLT_GPON_ONU_ONU_DISABLE_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_onu_invalid_dbru_report_id_all_properties                               BCMOLT_GPON_ONU_INVALID_DBRU_REPORT_ID__NUM_OF
+#define bcmolt_gpon_onu_key_exchange_completed_id_all_properties                            BCMOLT_GPON_ONU_KEY_EXCHANGE_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_onu_key_exchange_key_request_timeout_id_all_properties                  BCMOLT_GPON_ONU_KEY_EXCHANGE_KEY_REQUEST_TIMEOUT_ID__NUM_OF
+#define bcmolt_gpon_onu_key_exchange_cycle_skipped_id_all_properties                        BCMOLT_GPON_ONU_KEY_EXCHANGE_CYCLE_SKIPPED_ID__NUM_OF
+#define bcmolt_gpon_onu_key_exchange_key_mismatch_id_all_properties                         BCMOLT_GPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID__NUM_OF
+#define bcmolt_gpon_onu_key_exchange_unconsecutive_index_id_all_properties                  BCMOLT_GPON_ONU_KEY_EXCHANGE_UNCONSECUTIVE_INDEX_ID__NUM_OF
+#define bcmolt_gpon_onu_rssi_measurement_completed_id_all_properties                        BCMOLT_GPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_onu_key_exchange_decrypt_required_id_all_properties                     BCMOLT_GPON_ONU_KEY_EXCHANGE_DECRYPT_REQUIRED_ID__NUM_OF
+#define bcmolt_gpon_onu_optical_reflection_id_all_properties                                BCMOLT_GPON_ONU_OPTICAL_REFLECTION_ID__NUM_OF
+#define bcmolt_gpon_onu_cpu_packets_id_all_properties                                       BCMOLT_GPON_ONU_CPU_PACKETS_ID__NUM_OF
+#define bcmolt_gpon_onu_ploam_packet_id_all_properties                                      BCMOLT_GPON_ONU_PLOAM_PACKET_ID__NUM_OF
+#define bcmolt_gpon_onu_cpu_packet_id_all_properties                                        BCMOLT_GPON_ONU_CPU_PACKET_ID__NUM_OF
+#define bcmolt_gpon_onu_omci_packet_id_all_properties                                       BCMOLT_GPON_ONU_OMCI_PACKET_ID__NUM_OF
+#define bcmolt_gpon_onu_onu_activation_standby_completed_id_all_properties                  BCMOLT_GPON_ONU_ONU_ACTIVATION_STANDBY_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_onu_power_management_state_change_id_all_properties                     BCMOLT_GPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID__NUM_OF
+#define bcmolt_gpon_onu_possible_drift_id_all_properties                                    BCMOLT_GPON_ONU_POSSIBLE_DRIFT_ID__NUM_OF
+#define bcmolt_gpon_onu_stat_cfg_id_all_properties                                          BCMOLT_GPON_ONU_STAT_CFG_ID__NUM_OF
+#define bcmolt_gpon_onu_stat_alarm_raised_id_all_properties                                 BCMOLT_GPON_ONU_STAT_ALARM_RAISED_ID__NUM_OF
+#define bcmolt_gpon_onu_stat_alarm_cleared_id_all_properties                                BCMOLT_GPON_ONU_STAT_ALARM_CLEARED_ID__NUM_OF
+#define bcmolt_gpon_onu_auto_cfg_id_all_properties                                          BCMOLT_GPON_ONU_AUTO_CFG_ID__NUM_OF
+#define bcmolt_gpon_trx_key_id_all_properties                                               BCMOLT_GPON_TRX_KEY_ID__NUM_OF
+#define bcmolt_gpon_trx_cfg_id_all_properties                                               BCMOLT_GPON_TRX_CFG_ID__NUM_OF
+#define bcmolt_log_entry_key_id_all_properties                                              BCMOLT_LOG_ENTRY_KEY_ID__NUM_OF
+#define bcmolt_log_entry_cfg_id_all_properties                                              BCMOLT_LOG_ENTRY_CFG_ID__NUM_OF
+#define bcmolt_log_entry_stat_id_all_properties                                             BCMOLT_LOG_ENTRY_STAT_ID__NUM_OF
+#define bcmolt_log_entry_stat_cfg_id_all_properties                                         BCMOLT_LOG_ENTRY_STAT_CFG_ID__NUM_OF
+#define bcmolt_log_entry_stat_alarm_raised_id_all_properties                                BCMOLT_LOG_ENTRY_STAT_ALARM_RAISED_ID__NUM_OF
+#define bcmolt_log_entry_stat_alarm_cleared_id_all_properties                               BCMOLT_LOG_ENTRY_STAT_ALARM_CLEARED_ID__NUM_OF
+#define bcmolt_log_entry_auto_cfg_id_all_properties                                         BCMOLT_LOG_ENTRY_AUTO_CFG_ID__NUM_OF
+#define bcmolt_logger_key_id_all_properties                                                 BCMOLT_LOGGER_KEY_ID__NUM_OF
+#define bcmolt_logger_cfg_id_all_properties                                                 BCMOLT_LOGGER_CFG_ID__NUM_OF
+#define bcmolt_logger_stat_id_all_properties                                                BCMOLT_LOGGER_STAT_ID__NUM_OF
+#define bcmolt_logger_clear_log_id_all_properties                                           BCMOLT_LOGGER_CLEAR_LOG_ID__NUM_OF
+#define bcmolt_logger_stat_cfg_id_all_properties                                            BCMOLT_LOGGER_STAT_CFG_ID__NUM_OF
+#define bcmolt_logger_stat_alarm_raised_id_all_properties                                   BCMOLT_LOGGER_STAT_ALARM_RAISED_ID__NUM_OF
+#define bcmolt_logger_stat_alarm_cleared_id_all_properties                                  BCMOLT_LOGGER_STAT_ALARM_CLEARED_ID__NUM_OF
+#define bcmolt_logger_auto_cfg_id_all_properties                                            BCMOLT_LOGGER_AUTO_CFG_ID__NUM_OF
+#define bcmolt_nni_key_id_all_properties                                                    BCMOLT_NNI_KEY_ID__NUM_OF
+#define bcmolt_nni_cfg_id_all_properties                                                    BCMOLT_NNI_CFG_ID__NUM_OF
+#define bcmolt_nni_stat_id_all_properties                                                   BCMOLT_NNI_STAT_ID__NUM_OF
+#define bcmolt_nni_status_changed_id_all_properties                                         BCMOLT_NNI_STATUS_CHANGED_ID__NUM_OF
+#define bcmolt_nni_stat_cfg_id_all_properties                                               BCMOLT_NNI_STAT_CFG_ID__NUM_OF
+#define bcmolt_nni_stat_alarm_raised_id_all_properties                                      BCMOLT_NNI_STAT_ALARM_RAISED_ID__NUM_OF
+#define bcmolt_nni_stat_alarm_cleared_id_all_properties                                     BCMOLT_NNI_STAT_ALARM_CLEARED_ID__NUM_OF
+#define bcmolt_nni_auto_cfg_id_all_properties                                               BCMOLT_NNI_AUTO_CFG_ID__NUM_OF
+#define bcmolt_nni_serdes_key_id_all_properties                                             BCMOLT_NNI_SERDES_KEY_ID__NUM_OF
+#define bcmolt_nni_serdes_cfg_id_all_properties                                             BCMOLT_NNI_SERDES_CFG_ID__NUM_OF
+#define bcmolt_software_error_key_id_all_properties                                         BCMOLT_SOFTWARE_ERROR_KEY_ID__NUM_OF
+#define bcmolt_software_error_cfg_id_all_properties                                         BCMOLT_SOFTWARE_ERROR_CFG_ID__NUM_OF
+#define bcmolt_trx_calibration_key_id_all_properties                                        BCMOLT_TRX_CALIBRATION_KEY_ID__NUM_OF
+#define bcmolt_trx_calibration_start_capture_window_id_all_properties                       BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID__NUM_OF
+#define bcmolt_trx_calibration_capture_window_and_statistic_completed_id_all_properties     BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID__NUM_OF
+#define bcmolt_trx_calibration_stop_capture_window_id_all_properties                        BCMOLT_TRX_CALIBRATION_STOP_CAPTURE_WINDOW_ID__NUM_OF
+#define bcmolt_trx_calibration_auto_cfg_id_all_properties                                   BCMOLT_TRX_CALIBRATION_AUTO_CFG_ID__NUM_OF
+#define bcmolt_xgpon_alloc_key_id_all_properties                                            BCMOLT_XGPON_ALLOC_KEY_ID__NUM_OF
+#define bcmolt_xgpon_alloc_cfg_id_all_properties                                            BCMOLT_XGPON_ALLOC_CFG_ID__NUM_OF
+#define bcmolt_xgpon_alloc_configuration_completed_id_all_properties                        BCMOLT_XGPON_ALLOC_CONFIGURATION_COMPLETED_ID__NUM_OF
+#define bcmolt_xgpon_alloc_get_stats_id_all_properties                                      BCMOLT_XGPON_ALLOC_GET_STATS_ID__NUM_OF
+#define bcmolt_xgpon_alloc_get_alloc_stats_completed_id_all_properties                      BCMOLT_XGPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID__NUM_OF
+#define bcmolt_xgpon_alloc_set_state_id_all_properties                                      BCMOLT_XGPON_ALLOC_SET_STATE_ID__NUM_OF
+#define bcmolt_xgpon_alloc_stat_id_all_properties                                           BCMOLT_XGPON_ALLOC_STAT_ID__NUM_OF
+#define bcmolt_xgpon_alloc_stat_cfg_id_all_properties                                       BCMOLT_XGPON_ALLOC_STAT_CFG_ID__NUM_OF
+#define bcmolt_xgpon_alloc_stat_alarm_raised_id_all_properties                              BCMOLT_XGPON_ALLOC_STAT_ALARM_RAISED_ID__NUM_OF
+#define bcmolt_xgpon_alloc_stat_alarm_cleared_id_all_properties                             BCMOLT_XGPON_ALLOC_STAT_ALARM_CLEARED_ID__NUM_OF
+#define bcmolt_xgpon_alloc_auto_cfg_id_all_properties                                       BCMOLT_XGPON_ALLOC_AUTO_CFG_ID__NUM_OF
+#define bcmolt_xgpon_gem_port_key_id_all_properties                                         BCMOLT_XGPON_GEM_PORT_KEY_ID__NUM_OF
+#define bcmolt_xgpon_gem_port_cfg_id_all_properties                                         BCMOLT_XGPON_GEM_PORT_CFG_ID__NUM_OF
+#define bcmolt_xgpon_gem_port_stat_id_all_properties                                        BCMOLT_XGPON_GEM_PORT_STAT_ID__NUM_OF
+#define bcmolt_xgpon_gem_port_stat_cfg_id_all_properties                                    BCMOLT_XGPON_GEM_PORT_STAT_CFG_ID__NUM_OF
+#define bcmolt_xgpon_gem_port_stat_alarm_raised_id_all_properties                           BCMOLT_XGPON_GEM_PORT_STAT_ALARM_RAISED_ID__NUM_OF
+#define bcmolt_xgpon_gem_port_stat_alarm_cleared_id_all_properties                          BCMOLT_XGPON_GEM_PORT_STAT_ALARM_CLEARED_ID__NUM_OF
+#define bcmolt_xgpon_gem_port_auto_cfg_id_all_properties                                    BCMOLT_XGPON_GEM_PORT_AUTO_CFG_ID__NUM_OF
+#define bcmolt_xgpon_iwf_key_id_all_properties                                              BCMOLT_XGPON_IWF_KEY_ID__NUM_OF
+#define bcmolt_xgpon_iwf_cfg_id_all_properties                                              BCMOLT_XGPON_IWF_CFG_ID__NUM_OF
+#define bcmolt_xgpon_ni_key_id_all_properties                                               BCMOLT_XGPON_NI_KEY_ID__NUM_OF
+#define bcmolt_xgpon_ni_cfg_id_all_properties                                               BCMOLT_XGPON_NI_CFG_ID__NUM_OF
+#define bcmolt_xgpon_ni_stat_id_all_properties                                              BCMOLT_XGPON_NI_STAT_ID__NUM_OF
+#define bcmolt_xgpon_ni_set_pon_state_id_all_properties                                     BCMOLT_XGPON_NI_SET_PON_STATE_ID__NUM_OF
+#define bcmolt_xgpon_ni_reset_id_all_properties                                             BCMOLT_XGPON_NI_RESET_ID__NUM_OF
+#define bcmolt_xgpon_ni_disable_serial_number_id_all_properties                             BCMOLT_XGPON_NI_DISABLE_SERIAL_NUMBER_ID__NUM_OF
+#define bcmolt_xgpon_ni_single_request_standby_pon_monitoring_id_all_properties             BCMOLT_XGPON_NI_SINGLE_REQUEST_STANDBY_PON_MONITORING_ID__NUM_OF
+#define bcmolt_xgpon_ni_set_onu_state_id_all_properties                                     BCMOLT_XGPON_NI_SET_ONU_STATE_ID__NUM_OF
+#define bcmolt_xgpon_ni_run_special_bw_map_id_all_properties                                BCMOLT_XGPON_NI_RUN_SPECIAL_BW_MAP_ID__NUM_OF
+#define bcmolt_xgpon_ni_rogue_detection_window_id_all_properties                            BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID__NUM_OF
+#define bcmolt_xgpon_ni_state_change_completed_id_all_properties                            BCMOLT_XGPON_NI_STATE_CHANGE_COMPLETED_ID__NUM_OF
+#define bcmolt_xgpon_ni_los_id_all_properties                                               BCMOLT_XGPON_NI_LOS_ID__NUM_OF
+#define bcmolt_xgpon_ni_serial_number_acquisition_cycle_start_id_all_properties             BCMOLT_XGPON_NI_SERIAL_NUMBER_ACQUISITION_CYCLE_START_ID__NUM_OF
+#define bcmolt_xgpon_ni_protection_switching_traffic_resume_id_all_properties               BCMOLT_XGPON_NI_PROTECTION_SWITCHING_TRAFFIC_RESUME_ID__NUM_OF
+#define bcmolt_xgpon_ni_protection_switching_onus_ranged_id_all_properties                  BCMOLT_XGPON_NI_PROTECTION_SWITCHING_ONUS_RANGED_ID__NUM_OF
+#define bcmolt_xgpon_ni_protection_switching_switchover_completed_id_all_properties         BCMOLT_XGPON_NI_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED_ID__NUM_OF
+#define bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_id_all_properties            BCMOLT_XGPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID__NUM_OF
+#define bcmolt_xgpon_ni_onu_discovered_id_all_properties                                    BCMOLT_XGPON_NI_ONU_DISCOVERED_ID__NUM_OF
+#define bcmolt_xgpon_ni_cpu_packets_failure_id_all_properties                               BCMOLT_XGPON_NI_CPU_PACKETS_FAILURE_ID__NUM_OF
+#define bcmolt_xgpon_ni_cpu_packets_id_all_properties                                       BCMOLT_XGPON_NI_CPU_PACKETS_ID__NUM_OF
+#define bcmolt_xgpon_ni_broadcast_ploam_packet_id_all_properties                            BCMOLT_XGPON_NI_BROADCAST_PLOAM_PACKET_ID__NUM_OF
+#define bcmolt_xgpon_ni_rogue_detection_completed_id_all_properties                         BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID__NUM_OF
+#define bcmolt_xgpon_ni_deactivate_all_onus_completed_id_all_properties                     BCMOLT_XGPON_NI_DEACTIVATE_ALL_ONUS_COMPLETED_ID__NUM_OF
+#define bcmolt_xgpon_ni_disable_all_onus_completed_id_all_properties                        BCMOLT_XGPON_NI_DISABLE_ALL_ONUS_COMPLETED_ID__NUM_OF
+#define bcmolt_xgpon_ni_activate_all_onus_completed_id_all_properties                       BCMOLT_XGPON_NI_ACTIVATE_ALL_ONUS_COMPLETED_ID__NUM_OF
+#define bcmolt_xgpon_ni_enable_all_onus_completed_id_all_properties                         BCMOLT_XGPON_NI_ENABLE_ALL_ONUS_COMPLETED_ID__NUM_OF
+#define bcmolt_xgpon_ni_tod_request_completed_id_all_properties                             BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID__NUM_OF
+#define bcmolt_xgpon_ni_tod_request_id_all_properties                                       BCMOLT_XGPON_NI_TOD_REQUEST_ID__NUM_OF
+#define bcmolt_xgpon_ni_start_onu_upgrade_id_all_properties                                 BCMOLT_XGPON_NI_START_ONU_UPGRADE_ID__NUM_OF
+#define bcmolt_xgpon_ni_onu_upgrade_complete_id_all_properties                              BCMOLT_XGPON_NI_ONU_UPGRADE_COMPLETE_ID__NUM_OF
+#define bcmolt_xgpon_ni_rogue_onu_special_map_cycle_start_id_all_properties                 BCMOLT_XGPON_NI_ROGUE_ONU_SPECIAL_MAP_CYCLE_START_ID__NUM_OF
+#define bcmolt_xgpon_ni_adjust_tx_wavelength_id_all_properties                              BCMOLT_XGPON_NI_ADJUST_TX_WAVELENGTH_ID__NUM_OF
+#define bcmolt_xgpon_ni_stat_cfg_id_all_properties                                          BCMOLT_XGPON_NI_STAT_CFG_ID__NUM_OF
+#define bcmolt_xgpon_ni_stat_alarm_raised_id_all_properties                                 BCMOLT_XGPON_NI_STAT_ALARM_RAISED_ID__NUM_OF
+#define bcmolt_xgpon_ni_stat_alarm_cleared_id_all_properties                                BCMOLT_XGPON_NI_STAT_ALARM_CLEARED_ID__NUM_OF
+#define bcmolt_xgpon_ni_auto_cfg_id_all_properties                                          BCMOLT_XGPON_NI_AUTO_CFG_ID__NUM_OF
+#define bcmolt_xgpon_onu_key_id_all_properties                                              BCMOLT_XGPON_ONU_KEY_ID__NUM_OF
+#define bcmolt_xgpon_onu_cfg_id_all_properties                                              BCMOLT_XGPON_ONU_CFG_ID__NUM_OF
+#define bcmolt_xgpon_onu_stat_id_all_properties                                             BCMOLT_XGPON_ONU_STAT_ID__NUM_OF
+#define bcmolt_xgpon_onu_set_onu_state_id_all_properties                                    BCMOLT_XGPON_ONU_SET_ONU_STATE_ID__NUM_OF
+#define bcmolt_xgpon_onu_rssi_measurement_id_all_properties                                 BCMOLT_XGPON_ONU_RSSI_MEASUREMENT_ID__NUM_OF
+#define bcmolt_xgpon_onu_onu_alarm_id_all_properties                                        BCMOLT_XGPON_ONU_ONU_ALARM_ID__NUM_OF
+#define bcmolt_xgpon_onu_dowi_id_all_properties                                             BCMOLT_XGPON_ONU_DOWI_ID__NUM_OF
+#define bcmolt_xgpon_onu_sfi_id_all_properties                                              BCMOLT_XGPON_ONU_SFI_ID__NUM_OF
+#define bcmolt_xgpon_onu_sdi_id_all_properties                                              BCMOLT_XGPON_ONU_SDI_ID__NUM_OF
+#define bcmolt_xgpon_onu_dfi_id_all_properties                                              BCMOLT_XGPON_ONU_DFI_ID__NUM_OF
+#define bcmolt_xgpon_onu_pqsi_id_all_properties                                             BCMOLT_XGPON_ONU_PQSI_ID__NUM_OF
+#define bcmolt_xgpon_onu_sufi_id_all_properties                                             BCMOLT_XGPON_ONU_SUFI_ID__NUM_OF
+#define bcmolt_xgpon_onu_tiwi_id_all_properties                                             BCMOLT_XGPON_ONU_TIWI_ID__NUM_OF
+#define bcmolt_xgpon_onu_looci_id_all_properties                                            BCMOLT_XGPON_ONU_LOOCI_ID__NUM_OF
+#define bcmolt_xgpon_onu_ranging_completed_id_all_properties                                BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID__NUM_OF
+#define bcmolt_xgpon_onu_onu_activation_completed_id_all_properties                         BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID__NUM_OF
+#define bcmolt_xgpon_onu_onu_deactivation_completed_id_all_properties                       BCMOLT_XGPON_ONU_ONU_DEACTIVATION_COMPLETED_ID__NUM_OF
+#define bcmolt_xgpon_onu_onu_enable_completed_id_all_properties                             BCMOLT_XGPON_ONU_ONU_ENABLE_COMPLETED_ID__NUM_OF
+#define bcmolt_xgpon_onu_onu_disable_completed_id_all_properties                            BCMOLT_XGPON_ONU_ONU_DISABLE_COMPLETED_ID__NUM_OF
+#define bcmolt_xgpon_onu_rssi_measurement_completed_id_all_properties                       BCMOLT_XGPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID__NUM_OF
+#define bcmolt_xgpon_onu_invalid_dbru_report_id_all_properties                              BCMOLT_XGPON_ONU_INVALID_DBRU_REPORT_ID__NUM_OF
+#define bcmolt_xgpon_onu_key_exchange_completed_id_all_properties                           BCMOLT_XGPON_ONU_KEY_EXCHANGE_COMPLETED_ID__NUM_OF
+#define bcmolt_xgpon_onu_key_exchange_key_request_timeout_id_all_properties                 BCMOLT_XGPON_ONU_KEY_EXCHANGE_KEY_REQUEST_TIMEOUT_ID__NUM_OF
+#define bcmolt_xgpon_onu_key_exchange_cycle_skipped_id_all_properties                       BCMOLT_XGPON_ONU_KEY_EXCHANGE_CYCLE_SKIPPED_ID__NUM_OF
+#define bcmolt_xgpon_onu_key_exchange_key_mismatch_id_all_properties                        BCMOLT_XGPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID__NUM_OF
+#define bcmolt_xgpon_onu_optical_reflection_id_all_properties                               BCMOLT_XGPON_ONU_OPTICAL_REFLECTION_ID__NUM_OF
+#define bcmolt_xgpon_onu_ploam_packet_id_all_properties                                     BCMOLT_XGPON_ONU_PLOAM_PACKET_ID__NUM_OF
+#define bcmolt_xgpon_onu_cpu_packets_id_all_properties                                      BCMOLT_XGPON_ONU_CPU_PACKETS_ID__NUM_OF
+#define bcmolt_xgpon_onu_cpu_packet_id_all_properties                                       BCMOLT_XGPON_ONU_CPU_PACKET_ID__NUM_OF
+#define bcmolt_xgpon_onu_omci_packet_id_all_properties                                      BCMOLT_XGPON_ONU_OMCI_PACKET_ID__NUM_OF
+#define bcmolt_xgpon_onu_dgi_id_all_properties                                              BCMOLT_XGPON_ONU_DGI_ID__NUM_OF
+#define bcmolt_xgpon_onu_power_management_state_change_id_all_properties                    BCMOLT_XGPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID__NUM_OF
+#define bcmolt_xgpon_onu_possible_drift_id_all_properties                                   BCMOLT_XGPON_ONU_POSSIBLE_DRIFT_ID__NUM_OF
+#define bcmolt_xgpon_onu_request_registration_id_all_properties                             BCMOLT_XGPON_ONU_REQUEST_REGISTRATION_ID__NUM_OF
+#define bcmolt_xgpon_onu_change_power_levelling_id_all_properties                           BCMOLT_XGPON_ONU_CHANGE_POWER_LEVELLING_ID__NUM_OF
+#define bcmolt_xgpon_onu_get_power_level_id_all_properties                                  BCMOLT_XGPON_ONU_GET_POWER_LEVEL_ID__NUM_OF
+#define bcmolt_xgpon_onu_get_power_consumption_id_all_properties                            BCMOLT_XGPON_ONU_GET_POWER_CONSUMPTION_ID__NUM_OF
+#define bcmolt_xgpon_onu_adjust_tx_wavelength_id_all_properties                             BCMOLT_XGPON_ONU_ADJUST_TX_WAVELENGTH_ID__NUM_OF
+#define bcmolt_xgpon_onu_registration_id_id_all_properties                                  BCMOLT_XGPON_ONU_REGISTRATION_ID_ID__NUM_OF
+#define bcmolt_xgpon_onu_power_level_report_id_all_properties                               BCMOLT_XGPON_ONU_POWER_LEVEL_REPORT_ID__NUM_OF
+#define bcmolt_xgpon_onu_power_consumption_report_id_all_properties                         BCMOLT_XGPON_ONU_POWER_CONSUMPTION_REPORT_ID__NUM_OF
+#define bcmolt_xgpon_onu_secure_mutual_authentication_id_all_properties                     BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_ID__NUM_OF
+#define bcmolt_xgpon_onu_secure_mutual_authentication_failure_id_all_properties             BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_FAILURE_ID__NUM_OF
+#define bcmolt_xgpon_onu_onu_tuning_in_id_all_properties                                    BCMOLT_XGPON_ONU_ONU_TUNING_IN_ID__NUM_OF
+#define bcmolt_xgpon_onu_onu_tuning_out_id_all_properties                                   BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID__NUM_OF
+#define bcmolt_xgpon_onu_onu_tuning_out_completed_id_all_properties                         BCMOLT_XGPON_ONU_ONU_TUNING_OUT_COMPLETED_ID__NUM_OF
+#define bcmolt_xgpon_onu_onu_tuning_in_completed_id_all_properties                          BCMOLT_XGPON_ONU_ONU_TUNING_IN_COMPLETED_ID__NUM_OF
+#define bcmolt_xgpon_onu_tuning_response_id_all_properties                                  BCMOLT_XGPON_ONU_TUNING_RESPONSE_ID__NUM_OF
+#define bcmolt_xgpon_onu_stat_cfg_id_all_properties                                         BCMOLT_XGPON_ONU_STAT_CFG_ID__NUM_OF
+#define bcmolt_xgpon_onu_stat_alarm_raised_id_all_properties                                BCMOLT_XGPON_ONU_STAT_ALARM_RAISED_ID__NUM_OF
+#define bcmolt_xgpon_onu_stat_alarm_cleared_id_all_properties                               BCMOLT_XGPON_ONU_STAT_ALARM_CLEARED_ID__NUM_OF
+#define bcmolt_xgpon_onu_auto_cfg_id_all_properties                                         BCMOLT_XGPON_ONU_AUTO_CFG_ID__NUM_OF
+#define bcmolt_xgpon_trx_key_id_all_properties                                              BCMOLT_XGPON_TRX_KEY_ID__NUM_OF
+#define bcmolt_xgpon_trx_cfg_id_all_properties                                              BCMOLT_XGPON_TRX_CFG_ID__NUM_OF
+#define bcmolt_xpon_serdes_key_id_all_properties                                            BCMOLT_XPON_SERDES_KEY_ID__NUM_OF
+#define bcmolt_xpon_serdes_cfg_id_all_properties                                            BCMOLT_XPON_SERDES_CFG_ID__NUM_OF
+
+/* The following are required for the API Init/Set/etc macros */
+#define bcmolt_obj_id__begin                                                                    BCMOLT_OBJ_ID__BEGIN
+#define bcmolt_obj_id_ae_ni                                                                     BCMOLT_OBJ_ID_AE_NI
+#define bcmolt_obj_id_ae_path_ds                                                                BCMOLT_OBJ_ID_AE_PATH_DS
+#define bcmolt_obj_id_ae_path_us                                                                BCMOLT_OBJ_ID_AE_PATH_US
+#define bcmolt_obj_id_channel                                                                   BCMOLT_OBJ_ID_CHANNEL
+#define bcmolt_obj_id_debug                                                                     BCMOLT_OBJ_ID_DEBUG
+#define bcmolt_obj_id_device                                                                    BCMOLT_OBJ_ID_DEVICE
+#define bcmolt_obj_id_epon_denied_link                                                          BCMOLT_OBJ_ID_EPON_DENIED_LINK
+#define bcmolt_obj_id_epon_link                                                                 BCMOLT_OBJ_ID_EPON_LINK
+#define bcmolt_obj_id_epon_ni                                                                   BCMOLT_OBJ_ID_EPON_NI
+#define bcmolt_obj_id_epon_onu_10g_us                                                           BCMOLT_OBJ_ID_EPON_ONU_10G_US
+#define bcmolt_obj_id_epon_onu_1g_us                                                            BCMOLT_OBJ_ID_EPON_ONU_1G_US
+#define bcmolt_obj_id_epon_path_10g_ds                                                          BCMOLT_OBJ_ID_EPON_PATH_10G_DS
+#define bcmolt_obj_id_epon_path_10g_us                                                          BCMOLT_OBJ_ID_EPON_PATH_10G_US
+#define bcmolt_obj_id_epon_path_1g_ds                                                           BCMOLT_OBJ_ID_EPON_PATH_1G_DS
+#define bcmolt_obj_id_epon_path_1g_us                                                           BCMOLT_OBJ_ID_EPON_PATH_1G_US
+#define bcmolt_obj_id_epon_rp                                                                   BCMOLT_OBJ_ID_EPON_RP
+#define bcmolt_obj_id_gpio                                                                      BCMOLT_OBJ_ID_GPIO
+#define bcmolt_obj_id_gpon_alloc                                                                BCMOLT_OBJ_ID_GPON_ALLOC
+#define bcmolt_obj_id_gpon_gem_port                                                             BCMOLT_OBJ_ID_GPON_GEM_PORT
+#define bcmolt_obj_id_gpon_iwf                                                                  BCMOLT_OBJ_ID_GPON_IWF
+#define bcmolt_obj_id_gpon_iwf_ds_egress_flow                                                   BCMOLT_OBJ_ID_GPON_IWF_DS_EGRESS_FLOW
+#define bcmolt_obj_id_gpon_iwf_ds_ingress_flow                                                  BCMOLT_OBJ_ID_GPON_IWF_DS_INGRESS_FLOW
+#define bcmolt_obj_id_gpon_iwf_mac_table                                                        BCMOLT_OBJ_ID_GPON_IWF_MAC_TABLE
+#define bcmolt_obj_id_gpon_iwf_us_flow                                                          BCMOLT_OBJ_ID_GPON_IWF_US_FLOW
+#define bcmolt_obj_id_gpon_ni                                                                   BCMOLT_OBJ_ID_GPON_NI
+#define bcmolt_obj_id_gpon_onu                                                                  BCMOLT_OBJ_ID_GPON_ONU
+#define bcmolt_obj_id_gpon_trx                                                                  BCMOLT_OBJ_ID_GPON_TRX
+#define bcmolt_obj_id_log_entry                                                                 BCMOLT_OBJ_ID_LOG_ENTRY
+#define bcmolt_obj_id_logger                                                                    BCMOLT_OBJ_ID_LOGGER
+#define bcmolt_obj_id_nni                                                                       BCMOLT_OBJ_ID_NNI
+#define bcmolt_obj_id_nni_serdes                                                                BCMOLT_OBJ_ID_NNI_SERDES
+#define bcmolt_obj_id_software_error                                                            BCMOLT_OBJ_ID_SOFTWARE_ERROR
+#define bcmolt_obj_id_trx_calibration                                                           BCMOLT_OBJ_ID_TRX_CALIBRATION
+#define bcmolt_obj_id_xgpon_alloc                                                               BCMOLT_OBJ_ID_XGPON_ALLOC
+#define bcmolt_obj_id_xgpon_gem_port                                                            BCMOLT_OBJ_ID_XGPON_GEM_PORT
+#define bcmolt_obj_id_xgpon_iwf                                                                 BCMOLT_OBJ_ID_XGPON_IWF
+#define bcmolt_obj_id_xgpon_ni                                                                  BCMOLT_OBJ_ID_XGPON_NI
+#define bcmolt_obj_id_xgpon_onu                                                                 BCMOLT_OBJ_ID_XGPON_ONU
+#define bcmolt_obj_id_xgpon_trx                                                                 BCMOLT_OBJ_ID_XGPON_TRX
+#define bcmolt_obj_id_xpon_serdes                                                               BCMOLT_OBJ_ID_XPON_SERDES
+#define bcmolt_obj_id__num_of                                                                   BCMOLT_OBJ_ID__NUM_OF
+#define bcmolt_ae_ni_oper_id__begin                                                             BCMOLT_AE_NI_OPER_ID__BEGIN
+#define bcmolt_ae_ni_oper_id_set_ae_ni_en_state                                                 BCMOLT_AE_NI_OPER_ID_SET_AE_NI_EN_STATE
+#define bcmolt_ae_ni_oper_id__num_of                                                            BCMOLT_AE_NI_OPER_ID__NUM_OF
+#define bcmolt_ae_path_ds_auto_id__begin                                                        BCMOLT_AE_PATH_DS_AUTO_ID__BEGIN
+#define bcmolt_ae_path_ds_auto_id_stat_alarm_cleared                                            BCMOLT_AE_PATH_DS_AUTO_ID_STAT_ALARM_CLEARED
+#define bcmolt_ae_path_ds_auto_id_stat_alarm_raised                                             BCMOLT_AE_PATH_DS_AUTO_ID_STAT_ALARM_RAISED
+#define bcmolt_ae_path_ds_auto_id__num_of                                                       BCMOLT_AE_PATH_DS_AUTO_ID__NUM_OF
+#define bcmolt_ae_path_us_auto_id__begin                                                        BCMOLT_AE_PATH_US_AUTO_ID__BEGIN
+#define bcmolt_ae_path_us_auto_id_stat_alarm_cleared                                            BCMOLT_AE_PATH_US_AUTO_ID_STAT_ALARM_CLEARED
+#define bcmolt_ae_path_us_auto_id_stat_alarm_raised                                             BCMOLT_AE_PATH_US_AUTO_ID_STAT_ALARM_RAISED
+#define bcmolt_ae_path_us_auto_id__num_of                                                       BCMOLT_AE_PATH_US_AUTO_ID__NUM_OF
+#define bcmolt_debug_auto_id__begin                                                             BCMOLT_DEBUG_AUTO_ID__BEGIN
+#define bcmolt_debug_auto_id_cli_output                                                         BCMOLT_DEBUG_AUTO_ID_CLI_OUTPUT
+#define bcmolt_debug_auto_id_file_almost_full                                                   BCMOLT_DEBUG_AUTO_ID_FILE_ALMOST_FULL
+#define bcmolt_debug_auto_id__num_of                                                            BCMOLT_DEBUG_AUTO_ID__NUM_OF
+#define bcmolt_debug_oper_id__begin                                                             BCMOLT_DEBUG_OPER_ID__BEGIN
+#define bcmolt_debug_oper_id_cli_input                                                          BCMOLT_DEBUG_OPER_ID_CLI_INPUT
+#define bcmolt_debug_oper_id_reset_api_capture                                                  BCMOLT_DEBUG_OPER_ID_RESET_API_CAPTURE
+#define bcmolt_debug_oper_id_start_api_capture                                                  BCMOLT_DEBUG_OPER_ID_START_API_CAPTURE
+#define bcmolt_debug_oper_id_stop_api_capture                                                   BCMOLT_DEBUG_OPER_ID_STOP_API_CAPTURE
+#define bcmolt_debug_oper_id__num_of                                                            BCMOLT_DEBUG_OPER_ID__NUM_OF
+#define bcmolt_device_auto_id__begin                                                            BCMOLT_DEVICE_AUTO_ID__BEGIN
+#define bcmolt_device_auto_id_connection_complete                                               BCMOLT_DEVICE_AUTO_ID_CONNECTION_COMPLETE
+#define bcmolt_device_auto_id_connection_established                                            BCMOLT_DEVICE_AUTO_ID_CONNECTION_ESTABLISHED
+#define bcmolt_device_auto_id_connection_failure                                                BCMOLT_DEVICE_AUTO_ID_CONNECTION_FAILURE
+#define bcmolt_device_auto_id_ddr_test_complete                                                 BCMOLT_DEVICE_AUTO_ID_DDR_TEST_COMPLETE
+#define bcmolt_device_auto_id_device_keep_alive                                                 BCMOLT_DEVICE_AUTO_ID_DEVICE_KEEP_ALIVE
+#define bcmolt_device_auto_id_device_ready                                                      BCMOLT_DEVICE_AUTO_ID_DEVICE_READY
+#define bcmolt_device_auto_id_disconnection_complete                                            BCMOLT_DEVICE_AUTO_ID_DISCONNECTION_COMPLETE
+#define bcmolt_device_auto_id_image_transfer_complete                                           BCMOLT_DEVICE_AUTO_ID_IMAGE_TRANSFER_COMPLETE
+#define bcmolt_device_auto_id_indications_dropped                                               BCMOLT_DEVICE_AUTO_ID_INDICATIONS_DROPPED
+#define bcmolt_device_auto_id_sw_error                                                          BCMOLT_DEVICE_AUTO_ID_SW_ERROR
+#define bcmolt_device_auto_id_sw_exception                                                      BCMOLT_DEVICE_AUTO_ID_SW_EXCEPTION
+#define bcmolt_device_auto_id__num_of                                                           BCMOLT_DEVICE_AUTO_ID__NUM_OF
+#define bcmolt_device_oper_id__begin                                                            BCMOLT_DEVICE_OPER_ID__BEGIN
+#define bcmolt_device_oper_id_connect                                                           BCMOLT_DEVICE_OPER_ID_CONNECT
+#define bcmolt_device_oper_id_disconnect                                                        BCMOLT_DEVICE_OPER_ID_DISCONNECT
+#define bcmolt_device_oper_id_host_keep_alive                                                   BCMOLT_DEVICE_OPER_ID_HOST_KEEP_ALIVE
+#define bcmolt_device_oper_id_image_transfer_data                                               BCMOLT_DEVICE_OPER_ID_IMAGE_TRANSFER_DATA
+#define bcmolt_device_oper_id_image_transfer_start                                              BCMOLT_DEVICE_OPER_ID_IMAGE_TRANSFER_START
+#define bcmolt_device_oper_id_reset                                                             BCMOLT_DEVICE_OPER_ID_RESET
+#define bcmolt_device_oper_id_run_ddr_test                                                      BCMOLT_DEVICE_OPER_ID_RUN_DDR_TEST
+#define bcmolt_device_oper_id_sw_upgrade_activate                                               BCMOLT_DEVICE_OPER_ID_SW_UPGRADE_ACTIVATE
+#define bcmolt_device_oper_id__num_of                                                           BCMOLT_DEVICE_OPER_ID__NUM_OF
+#define bcmolt_epon_denied_link_auto_id__begin                                                  BCMOLT_EPON_DENIED_LINK_AUTO_ID__BEGIN
+#define bcmolt_epon_denied_link_auto_id_laser_on_off_violation                                  BCMOLT_EPON_DENIED_LINK_AUTO_ID_LASER_ON_OFF_VIOLATION
+#define bcmolt_epon_denied_link_auto_id_llid_pool_empty_violation                               BCMOLT_EPON_DENIED_LINK_AUTO_ID_LLID_POOL_EMPTY_VIOLATION
+#define bcmolt_epon_denied_link_auto_id_max_link_violation                                      BCMOLT_EPON_DENIED_LINK_AUTO_ID_MAX_LINK_VIOLATION
+#define bcmolt_epon_denied_link_auto_id_overhead_profile_violation                              BCMOLT_EPON_DENIED_LINK_AUTO_ID_OVERHEAD_PROFILE_VIOLATION
+#define bcmolt_epon_denied_link_auto_id_range_violation                                         BCMOLT_EPON_DENIED_LINK_AUTO_ID_RANGE_VIOLATION
+#define bcmolt_epon_denied_link_auto_id_rogue_violation                                         BCMOLT_EPON_DENIED_LINK_AUTO_ID_ROGUE_VIOLATION
+#define bcmolt_epon_denied_link_auto_id_system_resource_violation                               BCMOLT_EPON_DENIED_LINK_AUTO_ID_SYSTEM_RESOURCE_VIOLATION
+#define bcmolt_epon_denied_link_auto_id_tdm_channels_exhausted                                  BCMOLT_EPON_DENIED_LINK_AUTO_ID_TDM_CHANNELS_EXHAUSTED
+#define bcmolt_epon_denied_link_auto_id_unknown_link_violation                                  BCMOLT_EPON_DENIED_LINK_AUTO_ID_UNKNOWN_LINK_VIOLATION
+#define bcmolt_epon_denied_link_auto_id_upstream_bandwidth_violation                            BCMOLT_EPON_DENIED_LINK_AUTO_ID_UPSTREAM_BANDWIDTH_VIOLATION
+#define bcmolt_epon_denied_link_auto_id__num_of                                                 BCMOLT_EPON_DENIED_LINK_AUTO_ID__NUM_OF
+#define bcmolt_epon_link_auto_id__begin                                                         BCMOLT_EPON_LINK_AUTO_ID__BEGIN
+#define bcmolt_epon_link_auto_id_duplicate_mpcp_registration_request                            BCMOLT_EPON_LINK_AUTO_ID_DUPLICATE_MPCP_REGISTRATION_REQUEST
+#define bcmolt_epon_link_auto_id_encryption_enabled                                             BCMOLT_EPON_LINK_AUTO_ID_ENCRYPTION_ENABLED
+#define bcmolt_epon_link_auto_id_key_exchange_failure                                           BCMOLT_EPON_LINK_AUTO_ID_KEY_EXCHANGE_FAILURE
+#define bcmolt_epon_link_auto_id_key_exchange_started                                           BCMOLT_EPON_LINK_AUTO_ID_KEY_EXCHANGE_STARTED
+#define bcmolt_epon_link_auto_id_key_exchange_stopped                                           BCMOLT_EPON_LINK_AUTO_ID_KEY_EXCHANGE_STOPPED
+#define bcmolt_epon_link_auto_id_link_deleted                                                   BCMOLT_EPON_LINK_AUTO_ID_LINK_DELETED
+#define bcmolt_epon_link_auto_id_link_speed_mismatch                                            BCMOLT_EPON_LINK_AUTO_ID_LINK_SPEED_MISMATCH
+#define bcmolt_epon_link_auto_id_mpcp_deregistered                                              BCMOLT_EPON_LINK_AUTO_ID_MPCP_DEREGISTERED
+#define bcmolt_epon_link_auto_id_mpcp_discovered                                                BCMOLT_EPON_LINK_AUTO_ID_MPCP_DISCOVERED
+#define bcmolt_epon_link_auto_id_mpcp_reg_ack_timeout                                           BCMOLT_EPON_LINK_AUTO_ID_MPCP_REG_ACK_TIMEOUT
+#define bcmolt_epon_link_auto_id_mpcp_report_timeout                                            BCMOLT_EPON_LINK_AUTO_ID_MPCP_REPORT_TIMEOUT
+#define bcmolt_epon_link_auto_id_oam_keepalive_timeout                                          BCMOLT_EPON_LINK_AUTO_ID_OAM_KEEPALIVE_TIMEOUT
+#define bcmolt_epon_link_auto_id_oam_keepalive_timer_started                                    BCMOLT_EPON_LINK_AUTO_ID_OAM_KEEPALIVE_TIMER_STARTED
+#define bcmolt_epon_link_auto_id_oam_keepalive_timer_stopped                                    BCMOLT_EPON_LINK_AUTO_ID_OAM_KEEPALIVE_TIMER_STOPPED
+#define bcmolt_epon_link_auto_id_preprovisioned_link_created                                    BCMOLT_EPON_LINK_AUTO_ID_PREPROVISIONED_LINK_CREATED
+#define bcmolt_epon_link_auto_id_protection_switch_occurred                                     BCMOLT_EPON_LINK_AUTO_ID_PROTECTION_SWITCH_OCCURRED
+#define bcmolt_epon_link_auto_id_range_value_changed                                            BCMOLT_EPON_LINK_AUTO_ID_RANGE_VALUE_CHANGED
+#define bcmolt_epon_link_auto_id_rerange_failure                                                BCMOLT_EPON_LINK_AUTO_ID_RERANGE_FAILURE
+#define bcmolt_epon_link_auto_id_stat_alarm_cleared                                             BCMOLT_EPON_LINK_AUTO_ID_STAT_ALARM_CLEARED
+#define bcmolt_epon_link_auto_id_stat_alarm_raised                                              BCMOLT_EPON_LINK_AUTO_ID_STAT_ALARM_RAISED
+#define bcmolt_epon_link_auto_id_static_registration_done                                       BCMOLT_EPON_LINK_AUTO_ID_STATIC_REGISTRATION_DONE
+#define bcmolt_epon_link_auto_id__num_of                                                        BCMOLT_EPON_LINK_AUTO_ID__NUM_OF
+#define bcmolt_epon_link_oper_id__begin                                                         BCMOLT_EPON_LINK_OPER_ID__BEGIN
+#define bcmolt_epon_link_oper_id_delete_link                                                    BCMOLT_EPON_LINK_OPER_ID_DELETE_LINK
+#define bcmolt_epon_link_oper_id_force_rediscovery                                              BCMOLT_EPON_LINK_OPER_ID_FORCE_REDISCOVERY
+#define bcmolt_epon_link_oper_id_key_exchange_start                                             BCMOLT_EPON_LINK_OPER_ID_KEY_EXCHANGE_START
+#define bcmolt_epon_link_oper_id_key_exchange_stop                                              BCMOLT_EPON_LINK_OPER_ID_KEY_EXCHANGE_STOP
+#define bcmolt_epon_link_oper_id_oam_keepalive_timer_start                                      BCMOLT_EPON_LINK_OPER_ID_OAM_KEEPALIVE_TIMER_START
+#define bcmolt_epon_link_oper_id_oam_keepalive_timer_stop                                       BCMOLT_EPON_LINK_OPER_ID_OAM_KEEPALIVE_TIMER_STOP
+#define bcmolt_epon_link_oper_id_static_registration                                            BCMOLT_EPON_LINK_OPER_ID_STATIC_REGISTRATION
+#define bcmolt_epon_link_oper_id__num_of                                                        BCMOLT_EPON_LINK_OPER_ID__NUM_OF
+#define bcmolt_epon_link_proxy_id__begin                                                        BCMOLT_EPON_LINK_PROXY_ID__BEGIN
+#define bcmolt_epon_link_proxy_id_inject_frame                                                  BCMOLT_EPON_LINK_PROXY_ID_INJECT_FRAME
+#define bcmolt_epon_link_proxy_id__num_of                                                       BCMOLT_EPON_LINK_PROXY_ID__NUM_OF
+#define bcmolt_epon_link_proxy_rx_id__begin                                                     BCMOLT_EPON_LINK_PROXY_RX_ID__BEGIN
+#define bcmolt_epon_link_proxy_rx_id_frame_captured                                             BCMOLT_EPON_LINK_PROXY_RX_ID_FRAME_CAPTURED
+#define bcmolt_epon_link_proxy_rx_id__num_of                                                    BCMOLT_EPON_LINK_PROXY_RX_ID__NUM_OF
+#define bcmolt_epon_ni_auto_id__begin                                                           BCMOLT_EPON_NI_AUTO_ID__BEGIN
+#define bcmolt_epon_ni_auto_id_auto_rogue_scan_10g_failure                                      BCMOLT_EPON_NI_AUTO_ID_AUTO_ROGUE_SCAN_10G_FAILURE
+#define bcmolt_epon_ni_auto_id_auto_rogue_scan_1g_failure                                       BCMOLT_EPON_NI_AUTO_ID_AUTO_ROGUE_SCAN_1G_FAILURE
+#define bcmolt_epon_ni_auto_id_llid_quarantined                                                 BCMOLT_EPON_NI_AUTO_ID_LLID_QUARANTINED
+#define bcmolt_epon_ni_auto_id_mpcp_timestamp_changed                                           BCMOLT_EPON_NI_AUTO_ID_MPCP_TIMESTAMP_CHANGED
+#define bcmolt_epon_ni_auto_id_no_reports                                                       BCMOLT_EPON_NI_AUTO_ID_NO_REPORTS
+#define bcmolt_epon_ni_auto_id_onu_upgrade_complete                                             BCMOLT_EPON_NI_AUTO_ID_ONU_UPGRADE_COMPLETE
+#define bcmolt_epon_ni_auto_id_rerange_failure                                                  BCMOLT_EPON_NI_AUTO_ID_RERANGE_FAILURE
+#define bcmolt_epon_ni_auto_id_rogue_scan_complete                                              BCMOLT_EPON_NI_AUTO_ID_ROGUE_SCAN_COMPLETE
+#define bcmolt_epon_ni_auto_id_rssi_measurement_completed                                       BCMOLT_EPON_NI_AUTO_ID_RSSI_MEASUREMENT_COMPLETED
+#define bcmolt_epon_ni_auto_id_state_change_completed                                           BCMOLT_EPON_NI_AUTO_ID_STATE_CHANGE_COMPLETED
+#define bcmolt_epon_ni_auto_id__num_of                                                          BCMOLT_EPON_NI_AUTO_ID__NUM_OF
+#define bcmolt_epon_ni_oper_id__begin                                                           BCMOLT_EPON_NI_OPER_ID__BEGIN
+#define bcmolt_epon_ni_oper_id_add_link                                                         BCMOLT_EPON_NI_OPER_ID_ADD_LINK
+#define bcmolt_epon_ni_oper_id_add_multicast_link                                               BCMOLT_EPON_NI_OPER_ID_ADD_MULTICAST_LINK
+#define bcmolt_epon_ni_oper_id_add_protected_standby_link                                       BCMOLT_EPON_NI_OPER_ID_ADD_PROTECTED_STANDBY_LINK
+#define bcmolt_epon_ni_oper_id_issue_rssi_grant                                                 BCMOLT_EPON_NI_OPER_ID_ISSUE_RSSI_GRANT
+#define bcmolt_epon_ni_oper_id_protection_switching_apply_rerange_delta                         BCMOLT_EPON_NI_OPER_ID_PROTECTION_SWITCHING_APPLY_RERANGE_DELTA
+#define bcmolt_epon_ni_oper_id_rogue_llid_scan                                                  BCMOLT_EPON_NI_OPER_ID_ROGUE_LLID_SCAN
+#define bcmolt_epon_ni_oper_id_set_epon_ni_en_state                                             BCMOLT_EPON_NI_OPER_ID_SET_EPON_NI_EN_STATE
+#define bcmolt_epon_ni_oper_id_start_onu_upgrade                                                BCMOLT_EPON_NI_OPER_ID_START_ONU_UPGRADE
+#define bcmolt_epon_ni_oper_id__num_of                                                          BCMOLT_EPON_NI_OPER_ID__NUM_OF
+#define bcmolt_epon_onu_10g_us_auto_id__begin                                                   BCMOLT_EPON_ONU_10G_US_AUTO_ID__BEGIN
+#define bcmolt_epon_onu_10g_us_auto_id_stat_alarm_cleared                                       BCMOLT_EPON_ONU_10G_US_AUTO_ID_STAT_ALARM_CLEARED
+#define bcmolt_epon_onu_10g_us_auto_id_stat_alarm_raised                                        BCMOLT_EPON_ONU_10G_US_AUTO_ID_STAT_ALARM_RAISED
+#define bcmolt_epon_onu_10g_us_auto_id__num_of                                                  BCMOLT_EPON_ONU_10G_US_AUTO_ID__NUM_OF
+#define bcmolt_epon_onu_1g_us_auto_id__begin                                                    BCMOLT_EPON_ONU_1G_US_AUTO_ID__BEGIN
+#define bcmolt_epon_onu_1g_us_auto_id_stat_alarm_cleared                                        BCMOLT_EPON_ONU_1G_US_AUTO_ID_STAT_ALARM_CLEARED
+#define bcmolt_epon_onu_1g_us_auto_id_stat_alarm_raised                                         BCMOLT_EPON_ONU_1G_US_AUTO_ID_STAT_ALARM_RAISED
+#define bcmolt_epon_onu_1g_us_auto_id__num_of                                                   BCMOLT_EPON_ONU_1G_US_AUTO_ID__NUM_OF
+#define bcmolt_epon_path_10g_ds_auto_id__begin                                                  BCMOLT_EPON_PATH_10G_DS_AUTO_ID__BEGIN
+#define bcmolt_epon_path_10g_ds_auto_id_stat_alarm_cleared                                      BCMOLT_EPON_PATH_10G_DS_AUTO_ID_STAT_ALARM_CLEARED
+#define bcmolt_epon_path_10g_ds_auto_id_stat_alarm_raised                                       BCMOLT_EPON_PATH_10G_DS_AUTO_ID_STAT_ALARM_RAISED
+#define bcmolt_epon_path_10g_ds_auto_id__num_of                                                 BCMOLT_EPON_PATH_10G_DS_AUTO_ID__NUM_OF
+#define bcmolt_epon_path_10g_us_auto_id__begin                                                  BCMOLT_EPON_PATH_10G_US_AUTO_ID__BEGIN
+#define bcmolt_epon_path_10g_us_auto_id_stat_alarm_cleared                                      BCMOLT_EPON_PATH_10G_US_AUTO_ID_STAT_ALARM_CLEARED
+#define bcmolt_epon_path_10g_us_auto_id_stat_alarm_raised                                       BCMOLT_EPON_PATH_10G_US_AUTO_ID_STAT_ALARM_RAISED
+#define bcmolt_epon_path_10g_us_auto_id__num_of                                                 BCMOLT_EPON_PATH_10G_US_AUTO_ID__NUM_OF
+#define bcmolt_epon_path_1g_ds_auto_id__begin                                                   BCMOLT_EPON_PATH_1G_DS_AUTO_ID__BEGIN
+#define bcmolt_epon_path_1g_ds_auto_id_stat_alarm_cleared                                       BCMOLT_EPON_PATH_1G_DS_AUTO_ID_STAT_ALARM_CLEARED
+#define bcmolt_epon_path_1g_ds_auto_id_stat_alarm_raised                                        BCMOLT_EPON_PATH_1G_DS_AUTO_ID_STAT_ALARM_RAISED
+#define bcmolt_epon_path_1g_ds_auto_id__num_of                                                  BCMOLT_EPON_PATH_1G_DS_AUTO_ID__NUM_OF
+#define bcmolt_epon_path_1g_us_auto_id__begin                                                   BCMOLT_EPON_PATH_1G_US_AUTO_ID__BEGIN
+#define bcmolt_epon_path_1g_us_auto_id_stat_alarm_cleared                                       BCMOLT_EPON_PATH_1G_US_AUTO_ID_STAT_ALARM_CLEARED
+#define bcmolt_epon_path_1g_us_auto_id_stat_alarm_raised                                        BCMOLT_EPON_PATH_1G_US_AUTO_ID_STAT_ALARM_RAISED
+#define bcmolt_epon_path_1g_us_auto_id__num_of                                                  BCMOLT_EPON_PATH_1G_US_AUTO_ID__NUM_OF
+#define bcmolt_gpon_alloc_auto_id__begin                                                        BCMOLT_GPON_ALLOC_AUTO_ID__BEGIN
+#define bcmolt_gpon_alloc_auto_id_configuration_completed                                       BCMOLT_GPON_ALLOC_AUTO_ID_CONFIGURATION_COMPLETED
+#define bcmolt_gpon_alloc_auto_id_get_alloc_stats_completed                                     BCMOLT_GPON_ALLOC_AUTO_ID_GET_ALLOC_STATS_COMPLETED
+#define bcmolt_gpon_alloc_auto_id_stat_alarm_cleared                                            BCMOLT_GPON_ALLOC_AUTO_ID_STAT_ALARM_CLEARED
+#define bcmolt_gpon_alloc_auto_id_stat_alarm_raised                                             BCMOLT_GPON_ALLOC_AUTO_ID_STAT_ALARM_RAISED
+#define bcmolt_gpon_alloc_auto_id__num_of                                                       BCMOLT_GPON_ALLOC_AUTO_ID__NUM_OF
+#define bcmolt_gpon_alloc_oper_id__begin                                                        BCMOLT_GPON_ALLOC_OPER_ID__BEGIN
+#define bcmolt_gpon_alloc_oper_id_get_stats                                                     BCMOLT_GPON_ALLOC_OPER_ID_GET_STATS
+#define bcmolt_gpon_alloc_oper_id_set_state                                                     BCMOLT_GPON_ALLOC_OPER_ID_SET_STATE
+#define bcmolt_gpon_alloc_oper_id__num_of                                                       BCMOLT_GPON_ALLOC_OPER_ID__NUM_OF
+#define bcmolt_gpon_gem_port_auto_id__begin                                                     BCMOLT_GPON_GEM_PORT_AUTO_ID__BEGIN
+#define bcmolt_gpon_gem_port_auto_id_configuration_completed                                    BCMOLT_GPON_GEM_PORT_AUTO_ID_CONFIGURATION_COMPLETED
+#define bcmolt_gpon_gem_port_auto_id_stat_alarm_cleared                                         BCMOLT_GPON_GEM_PORT_AUTO_ID_STAT_ALARM_CLEARED
+#define bcmolt_gpon_gem_port_auto_id_stat_alarm_raised                                          BCMOLT_GPON_GEM_PORT_AUTO_ID_STAT_ALARM_RAISED
+#define bcmolt_gpon_gem_port_auto_id__num_of                                                    BCMOLT_GPON_GEM_PORT_AUTO_ID__NUM_OF
+#define bcmolt_gpon_gem_port_oper_id__begin                                                     BCMOLT_GPON_GEM_PORT_OPER_ID__BEGIN
+#define bcmolt_gpon_gem_port_oper_id_set_state                                                  BCMOLT_GPON_GEM_PORT_OPER_ID_SET_STATE
+#define bcmolt_gpon_gem_port_oper_id__num_of                                                    BCMOLT_GPON_GEM_PORT_OPER_ID__NUM_OF
+#define bcmolt_gpon_iwf_auto_id__begin                                                          BCMOLT_GPON_IWF_AUTO_ID__BEGIN
+#define bcmolt_gpon_iwf_auto_id_flush_mac_table_completed                                       BCMOLT_GPON_IWF_AUTO_ID_FLUSH_MAC_TABLE_COMPLETED
+#define bcmolt_gpon_iwf_auto_id_scan_mac_table_completed                                        BCMOLT_GPON_IWF_AUTO_ID_SCAN_MAC_TABLE_COMPLETED
+#define bcmolt_gpon_iwf_auto_id_stat_alarm_cleared                                              BCMOLT_GPON_IWF_AUTO_ID_STAT_ALARM_CLEARED
+#define bcmolt_gpon_iwf_auto_id_stat_alarm_raised                                               BCMOLT_GPON_IWF_AUTO_ID_STAT_ALARM_RAISED
+#define bcmolt_gpon_iwf_auto_id__num_of                                                         BCMOLT_GPON_IWF_AUTO_ID__NUM_OF
+#define bcmolt_gpon_iwf_oper_id__begin                                                          BCMOLT_GPON_IWF_OPER_ID__BEGIN
+#define bcmolt_gpon_iwf_oper_id_flush_mac_table                                                 BCMOLT_GPON_IWF_OPER_ID_FLUSH_MAC_TABLE
+#define bcmolt_gpon_iwf_oper_id_scan_mac_table                                                  BCMOLT_GPON_IWF_OPER_ID_SCAN_MAC_TABLE
+#define bcmolt_gpon_iwf_oper_id__num_of                                                         BCMOLT_GPON_IWF_OPER_ID__NUM_OF
+#define bcmolt_gpon_iwf_mac_table_auto_id__begin                                                BCMOLT_GPON_IWF_MAC_TABLE_AUTO_ID__BEGIN
+#define bcmolt_gpon_iwf_mac_table_auto_id_mac_aged                                              BCMOLT_GPON_IWF_MAC_TABLE_AUTO_ID_MAC_AGED
+#define bcmolt_gpon_iwf_mac_table_auto_id_mac_dropped                                           BCMOLT_GPON_IWF_MAC_TABLE_AUTO_ID_MAC_DROPPED
+#define bcmolt_gpon_iwf_mac_table_auto_id_mac_move                                              BCMOLT_GPON_IWF_MAC_TABLE_AUTO_ID_MAC_MOVE
+#define bcmolt_gpon_iwf_mac_table_auto_id_new_mac                                               BCMOLT_GPON_IWF_MAC_TABLE_AUTO_ID_NEW_MAC
+#define bcmolt_gpon_iwf_mac_table_auto_id__num_of                                               BCMOLT_GPON_IWF_MAC_TABLE_AUTO_ID__NUM_OF
+#define bcmolt_gpon_ni_auto_id__begin                                                           BCMOLT_GPON_NI_AUTO_ID__BEGIN
+#define bcmolt_gpon_ni_auto_id_activate_all_onus_completed                                      BCMOLT_GPON_NI_AUTO_ID_ACTIVATE_ALL_ONUS_COMPLETED
+#define bcmolt_gpon_ni_auto_id_cpu_packets_failure                                              BCMOLT_GPON_NI_AUTO_ID_CPU_PACKETS_FAILURE
+#define bcmolt_gpon_ni_auto_id_deactivate_all_onus_completed                                    BCMOLT_GPON_NI_AUTO_ID_DEACTIVATE_ALL_ONUS_COMPLETED
+#define bcmolt_gpon_ni_auto_id_disable_all_onus_completed                                       BCMOLT_GPON_NI_AUTO_ID_DISABLE_ALL_ONUS_COMPLETED
+#define bcmolt_gpon_ni_auto_id_enable_all_onus_completed                                        BCMOLT_GPON_NI_AUTO_ID_ENABLE_ALL_ONUS_COMPLETED
+#define bcmolt_gpon_ni_auto_id_los                                                              BCMOLT_GPON_NI_AUTO_ID_LOS
+#define bcmolt_gpon_ni_auto_id_onu_discovered                                                   BCMOLT_GPON_NI_AUTO_ID_ONU_DISCOVERED
+#define bcmolt_gpon_ni_auto_id_onu_upgrade_complete                                             BCMOLT_GPON_NI_AUTO_ID_ONU_UPGRADE_COMPLETE
+#define bcmolt_gpon_ni_auto_id_protection_switching_onus_ranged                                 BCMOLT_GPON_NI_AUTO_ID_PROTECTION_SWITCHING_ONUS_RANGED
+#define bcmolt_gpon_ni_auto_id_protection_switching_switchover_completed                        BCMOLT_GPON_NI_AUTO_ID_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED
+#define bcmolt_gpon_ni_auto_id_protection_switching_traffic_resume                              BCMOLT_GPON_NI_AUTO_ID_PROTECTION_SWITCHING_TRAFFIC_RESUME
+#define bcmolt_gpon_ni_auto_id_rogue_detection_completed                                        BCMOLT_GPON_NI_AUTO_ID_ROGUE_DETECTION_COMPLETED
+#define bcmolt_gpon_ni_auto_id_rogue_onu_special_map_cycle_start                                BCMOLT_GPON_NI_AUTO_ID_ROGUE_ONU_SPECIAL_MAP_CYCLE_START
+#define bcmolt_gpon_ni_auto_id_serial_number_acquisition_cycle_start                            BCMOLT_GPON_NI_AUTO_ID_SERIAL_NUMBER_ACQUISITION_CYCLE_START
+#define bcmolt_gpon_ni_auto_id_standby_pon_monitoring_cycle_completed                           BCMOLT_GPON_NI_AUTO_ID_STANDBY_PON_MONITORING_CYCLE_COMPLETED
+#define bcmolt_gpon_ni_auto_id_stat_alarm_cleared                                               BCMOLT_GPON_NI_AUTO_ID_STAT_ALARM_CLEARED
+#define bcmolt_gpon_ni_auto_id_stat_alarm_raised                                                BCMOLT_GPON_NI_AUTO_ID_STAT_ALARM_RAISED
+#define bcmolt_gpon_ni_auto_id_state_change_completed                                           BCMOLT_GPON_NI_AUTO_ID_STATE_CHANGE_COMPLETED
+#define bcmolt_gpon_ni_auto_id_tod_request_completed                                            BCMOLT_GPON_NI_AUTO_ID_TOD_REQUEST_COMPLETED
+#define bcmolt_gpon_ni_auto_id__num_of                                                          BCMOLT_GPON_NI_AUTO_ID__NUM_OF
+#define bcmolt_gpon_ni_oper_id__begin                                                           BCMOLT_GPON_NI_OPER_ID__BEGIN
+#define bcmolt_gpon_ni_oper_id_disable_serial_number                                            BCMOLT_GPON_NI_OPER_ID_DISABLE_SERIAL_NUMBER
+#define bcmolt_gpon_ni_oper_id_protection_switching_type_c_set_multiple_onu_state               BCMOLT_GPON_NI_OPER_ID_PROTECTION_SWITCHING_TYPE_C_SET_MULTIPLE_ONU_STATE
+#define bcmolt_gpon_ni_oper_id_reset                                                            BCMOLT_GPON_NI_OPER_ID_RESET
+#define bcmolt_gpon_ni_oper_id_rogue_detection_window                                           BCMOLT_GPON_NI_OPER_ID_ROGUE_DETECTION_WINDOW
+#define bcmolt_gpon_ni_oper_id_set_onu_state                                                    BCMOLT_GPON_NI_OPER_ID_SET_ONU_STATE
+#define bcmolt_gpon_ni_oper_id_set_pon_state                                                    BCMOLT_GPON_NI_OPER_ID_SET_PON_STATE
+#define bcmolt_gpon_ni_oper_id_single_request_standby_pon_monitoring                            BCMOLT_GPON_NI_OPER_ID_SINGLE_REQUEST_STANDBY_PON_MONITORING
+#define bcmolt_gpon_ni_oper_id_start_onu_upgrade                                                BCMOLT_GPON_NI_OPER_ID_START_ONU_UPGRADE
+#define bcmolt_gpon_ni_oper_id_tod_request                                                      BCMOLT_GPON_NI_OPER_ID_TOD_REQUEST
+#define bcmolt_gpon_ni_oper_id__num_of                                                          BCMOLT_GPON_NI_OPER_ID__NUM_OF
+#define bcmolt_gpon_ni_proxy_id__begin                                                          BCMOLT_GPON_NI_PROXY_ID__BEGIN
+#define bcmolt_gpon_ni_proxy_id_broadcast_ploam_packet                                          BCMOLT_GPON_NI_PROXY_ID_BROADCAST_PLOAM_PACKET
+#define bcmolt_gpon_ni_proxy_id_cpu_packets                                                     BCMOLT_GPON_NI_PROXY_ID_CPU_PACKETS
+#define bcmolt_gpon_ni_proxy_id__num_of                                                         BCMOLT_GPON_NI_PROXY_ID__NUM_OF
+#define bcmolt_gpon_onu_auto_id__begin                                                          BCMOLT_GPON_ONU_AUTO_ID__BEGIN
+#define bcmolt_gpon_onu_auto_id_ber_interval_configuration_completed                            BCMOLT_GPON_ONU_AUTO_ID_BER_INTERVAL_CONFIGURATION_COMPLETED
+#define bcmolt_gpon_onu_auto_id_dfi                                                             BCMOLT_GPON_ONU_AUTO_ID_DFI
+#define bcmolt_gpon_onu_auto_id_dgi                                                             BCMOLT_GPON_ONU_AUTO_ID_DGI
+#define bcmolt_gpon_onu_auto_id_dowi                                                            BCMOLT_GPON_ONU_AUTO_ID_DOWI
+#define bcmolt_gpon_onu_auto_id_err                                                             BCMOLT_GPON_ONU_AUTO_ID_ERR
+#define bcmolt_gpon_onu_auto_id_invalid_dbru_report                                             BCMOLT_GPON_ONU_AUTO_ID_INVALID_DBRU_REPORT
+#define bcmolt_gpon_onu_auto_id_key_exchange_completed                                          BCMOLT_GPON_ONU_AUTO_ID_KEY_EXCHANGE_COMPLETED
+#define bcmolt_gpon_onu_auto_id_key_exchange_cycle_skipped                                      BCMOLT_GPON_ONU_AUTO_ID_KEY_EXCHANGE_CYCLE_SKIPPED
+#define bcmolt_gpon_onu_auto_id_key_exchange_decrypt_required                                   BCMOLT_GPON_ONU_AUTO_ID_KEY_EXCHANGE_DECRYPT_REQUIRED
+#define bcmolt_gpon_onu_auto_id_key_exchange_key_mismatch                                       BCMOLT_GPON_ONU_AUTO_ID_KEY_EXCHANGE_KEY_MISMATCH
+#define bcmolt_gpon_onu_auto_id_key_exchange_key_request_timeout                                BCMOLT_GPON_ONU_AUTO_ID_KEY_EXCHANGE_KEY_REQUEST_TIMEOUT
+#define bcmolt_gpon_onu_auto_id_key_exchange_unconsecutive_index                                BCMOLT_GPON_ONU_AUTO_ID_KEY_EXCHANGE_UNCONSECUTIVE_INDEX
+#define bcmolt_gpon_onu_auto_id_loai                                                            BCMOLT_GPON_ONU_AUTO_ID_LOAI
+#define bcmolt_gpon_onu_auto_id_loki                                                            BCMOLT_GPON_ONU_AUTO_ID_LOKI
+#define bcmolt_gpon_onu_auto_id_memi                                                            BCMOLT_GPON_ONU_AUTO_ID_MEMI
+#define bcmolt_gpon_onu_auto_id_omci_port_id_configuration_completed                            BCMOLT_GPON_ONU_AUTO_ID_OMCI_PORT_ID_CONFIGURATION_COMPLETED
+#define bcmolt_gpon_onu_auto_id_onu_activation_completed                                        BCMOLT_GPON_ONU_AUTO_ID_ONU_ACTIVATION_COMPLETED
+#define bcmolt_gpon_onu_auto_id_onu_activation_standby_completed                                BCMOLT_GPON_ONU_AUTO_ID_ONU_ACTIVATION_STANDBY_COMPLETED
+#define bcmolt_gpon_onu_auto_id_onu_alarm                                                       BCMOLT_GPON_ONU_AUTO_ID_ONU_ALARM
+#define bcmolt_gpon_onu_auto_id_onu_deactivation_completed                                      BCMOLT_GPON_ONU_AUTO_ID_ONU_DEACTIVATION_COMPLETED
+#define bcmolt_gpon_onu_auto_id_onu_disable_completed                                           BCMOLT_GPON_ONU_AUTO_ID_ONU_DISABLE_COMPLETED
+#define bcmolt_gpon_onu_auto_id_onu_enable_completed                                            BCMOLT_GPON_ONU_AUTO_ID_ONU_ENABLE_COMPLETED
+#define bcmolt_gpon_onu_auto_id_optical_reflection                                              BCMOLT_GPON_ONU_AUTO_ID_OPTICAL_REFLECTION
+#define bcmolt_gpon_onu_auto_id_password_authentication_completed                               BCMOLT_GPON_ONU_AUTO_ID_PASSWORD_AUTHENTICATION_COMPLETED
+#define bcmolt_gpon_onu_auto_id_pee                                                             BCMOLT_GPON_ONU_AUTO_ID_PEE
+#define bcmolt_gpon_onu_auto_id_possible_drift                                                  BCMOLT_GPON_ONU_AUTO_ID_POSSIBLE_DRIFT
+#define bcmolt_gpon_onu_auto_id_power_management_state_change                                   BCMOLT_GPON_ONU_AUTO_ID_POWER_MANAGEMENT_STATE_CHANGE
+#define bcmolt_gpon_onu_auto_id_pst                                                             BCMOLT_GPON_ONU_AUTO_ID_PST
+#define bcmolt_gpon_onu_auto_id_ranging_completed                                               BCMOLT_GPON_ONU_AUTO_ID_RANGING_COMPLETED
+#define bcmolt_gpon_onu_auto_id_rei                                                             BCMOLT_GPON_ONU_AUTO_ID_REI
+#define bcmolt_gpon_onu_auto_id_rssi_measurement_completed                                      BCMOLT_GPON_ONU_AUTO_ID_RSSI_MEASUREMENT_COMPLETED
+#define bcmolt_gpon_onu_auto_id_sdi                                                             BCMOLT_GPON_ONU_AUTO_ID_SDI
+#define bcmolt_gpon_onu_auto_id_sfi                                                             BCMOLT_GPON_ONU_AUTO_ID_SFI
+#define bcmolt_gpon_onu_auto_id_stat_alarm_cleared                                              BCMOLT_GPON_ONU_AUTO_ID_STAT_ALARM_CLEARED
+#define bcmolt_gpon_onu_auto_id_stat_alarm_raised                                               BCMOLT_GPON_ONU_AUTO_ID_STAT_ALARM_RAISED
+#define bcmolt_gpon_onu_auto_id_sufi                                                            BCMOLT_GPON_ONU_AUTO_ID_SUFI
+#define bcmolt_gpon_onu_auto_id_tiwi                                                            BCMOLT_GPON_ONU_AUTO_ID_TIWI
+#define bcmolt_gpon_onu_auto_id__num_of                                                         BCMOLT_GPON_ONU_AUTO_ID__NUM_OF
+#define bcmolt_gpon_onu_oper_id__begin                                                          BCMOLT_GPON_ONU_OPER_ID__BEGIN
+#define bcmolt_gpon_onu_oper_id_change_power_level                                              BCMOLT_GPON_ONU_OPER_ID_CHANGE_POWER_LEVEL
+#define bcmolt_gpon_onu_oper_id_rssi_measurement                                                BCMOLT_GPON_ONU_OPER_ID_RSSI_MEASUREMENT
+#define bcmolt_gpon_onu_oper_id_set_onu_state                                                   BCMOLT_GPON_ONU_OPER_ID_SET_ONU_STATE
+#define bcmolt_gpon_onu_oper_id__num_of                                                         BCMOLT_GPON_ONU_OPER_ID__NUM_OF
+#define bcmolt_gpon_onu_proxy_id__begin                                                         BCMOLT_GPON_ONU_PROXY_ID__BEGIN
+#define bcmolt_gpon_onu_proxy_id_cpu_packets                                                    BCMOLT_GPON_ONU_PROXY_ID_CPU_PACKETS
+#define bcmolt_gpon_onu_proxy_id_ploam_packet                                                   BCMOLT_GPON_ONU_PROXY_ID_PLOAM_PACKET
+#define bcmolt_gpon_onu_proxy_id__num_of                                                        BCMOLT_GPON_ONU_PROXY_ID__NUM_OF
+#define bcmolt_gpon_onu_proxy_rx_id__begin                                                      BCMOLT_GPON_ONU_PROXY_RX_ID__BEGIN
+#define bcmolt_gpon_onu_proxy_rx_id_cpu_packet                                                  BCMOLT_GPON_ONU_PROXY_RX_ID_CPU_PACKET
+#define bcmolt_gpon_onu_proxy_rx_id_omci_packet                                                 BCMOLT_GPON_ONU_PROXY_RX_ID_OMCI_PACKET
+#define bcmolt_gpon_onu_proxy_rx_id__num_of                                                     BCMOLT_GPON_ONU_PROXY_RX_ID__NUM_OF
+#define bcmolt_log_entry_auto_id__begin                                                         BCMOLT_LOG_ENTRY_AUTO_ID__BEGIN
+#define bcmolt_log_entry_auto_id_stat_alarm_cleared                                             BCMOLT_LOG_ENTRY_AUTO_ID_STAT_ALARM_CLEARED
+#define bcmolt_log_entry_auto_id_stat_alarm_raised                                              BCMOLT_LOG_ENTRY_AUTO_ID_STAT_ALARM_RAISED
+#define bcmolt_log_entry_auto_id__num_of                                                        BCMOLT_LOG_ENTRY_AUTO_ID__NUM_OF
+#define bcmolt_logger_auto_id__begin                                                            BCMOLT_LOGGER_AUTO_ID__BEGIN
+#define bcmolt_logger_auto_id_stat_alarm_cleared                                                BCMOLT_LOGGER_AUTO_ID_STAT_ALARM_CLEARED
+#define bcmolt_logger_auto_id_stat_alarm_raised                                                 BCMOLT_LOGGER_AUTO_ID_STAT_ALARM_RAISED
+#define bcmolt_logger_auto_id__num_of                                                           BCMOLT_LOGGER_AUTO_ID__NUM_OF
+#define bcmolt_logger_oper_id__begin                                                            BCMOLT_LOGGER_OPER_ID__BEGIN
+#define bcmolt_logger_oper_id_clear_log                                                         BCMOLT_LOGGER_OPER_ID_CLEAR_LOG
+#define bcmolt_logger_oper_id__num_of                                                           BCMOLT_LOGGER_OPER_ID__NUM_OF
+#define bcmolt_nni_auto_id__begin                                                               BCMOLT_NNI_AUTO_ID__BEGIN
+#define bcmolt_nni_auto_id_stat_alarm_cleared                                                   BCMOLT_NNI_AUTO_ID_STAT_ALARM_CLEARED
+#define bcmolt_nni_auto_id_stat_alarm_raised                                                    BCMOLT_NNI_AUTO_ID_STAT_ALARM_RAISED
+#define bcmolt_nni_auto_id_status_changed                                                       BCMOLT_NNI_AUTO_ID_STATUS_CHANGED
+#define bcmolt_nni_auto_id__num_of                                                              BCMOLT_NNI_AUTO_ID__NUM_OF
+#define bcmolt_trx_calibration_auto_id__begin                                                   BCMOLT_TRX_CALIBRATION_AUTO_ID__BEGIN
+#define bcmolt_trx_calibration_auto_id_capture_window_and_statistic_completed                   BCMOLT_TRX_CALIBRATION_AUTO_ID_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED
+#define bcmolt_trx_calibration_auto_id__num_of                                                  BCMOLT_TRX_CALIBRATION_AUTO_ID__NUM_OF
+#define bcmolt_trx_calibration_oper_id__begin                                                   BCMOLT_TRX_CALIBRATION_OPER_ID__BEGIN
+#define bcmolt_trx_calibration_oper_id_start_capture_window                                     BCMOLT_TRX_CALIBRATION_OPER_ID_START_CAPTURE_WINDOW
+#define bcmolt_trx_calibration_oper_id_stop_capture_window                                      BCMOLT_TRX_CALIBRATION_OPER_ID_STOP_CAPTURE_WINDOW
+#define bcmolt_trx_calibration_oper_id__num_of                                                  BCMOLT_TRX_CALIBRATION_OPER_ID__NUM_OF
+#define bcmolt_xgpon_alloc_auto_id__begin                                                       BCMOLT_XGPON_ALLOC_AUTO_ID__BEGIN
+#define bcmolt_xgpon_alloc_auto_id_configuration_completed                                      BCMOLT_XGPON_ALLOC_AUTO_ID_CONFIGURATION_COMPLETED
+#define bcmolt_xgpon_alloc_auto_id_get_alloc_stats_completed                                    BCMOLT_XGPON_ALLOC_AUTO_ID_GET_ALLOC_STATS_COMPLETED
+#define bcmolt_xgpon_alloc_auto_id_stat_alarm_cleared                                           BCMOLT_XGPON_ALLOC_AUTO_ID_STAT_ALARM_CLEARED
+#define bcmolt_xgpon_alloc_auto_id_stat_alarm_raised                                            BCMOLT_XGPON_ALLOC_AUTO_ID_STAT_ALARM_RAISED
+#define bcmolt_xgpon_alloc_auto_id__num_of                                                      BCMOLT_XGPON_ALLOC_AUTO_ID__NUM_OF
+#define bcmolt_xgpon_alloc_oper_id__begin                                                       BCMOLT_XGPON_ALLOC_OPER_ID__BEGIN
+#define bcmolt_xgpon_alloc_oper_id_get_stats                                                    BCMOLT_XGPON_ALLOC_OPER_ID_GET_STATS
+#define bcmolt_xgpon_alloc_oper_id_set_state                                                    BCMOLT_XGPON_ALLOC_OPER_ID_SET_STATE
+#define bcmolt_xgpon_alloc_oper_id__num_of                                                      BCMOLT_XGPON_ALLOC_OPER_ID__NUM_OF
+#define bcmolt_xgpon_gem_port_auto_id__begin                                                    BCMOLT_XGPON_GEM_PORT_AUTO_ID__BEGIN
+#define bcmolt_xgpon_gem_port_auto_id_stat_alarm_cleared                                        BCMOLT_XGPON_GEM_PORT_AUTO_ID_STAT_ALARM_CLEARED
+#define bcmolt_xgpon_gem_port_auto_id_stat_alarm_raised                                         BCMOLT_XGPON_GEM_PORT_AUTO_ID_STAT_ALARM_RAISED
+#define bcmolt_xgpon_gem_port_auto_id__num_of                                                   BCMOLT_XGPON_GEM_PORT_AUTO_ID__NUM_OF
+#define bcmolt_xgpon_ni_auto_id__begin                                                          BCMOLT_XGPON_NI_AUTO_ID__BEGIN
+#define bcmolt_xgpon_ni_auto_id_activate_all_onus_completed                                     BCMOLT_XGPON_NI_AUTO_ID_ACTIVATE_ALL_ONUS_COMPLETED
+#define bcmolt_xgpon_ni_auto_id_cpu_packets_failure                                             BCMOLT_XGPON_NI_AUTO_ID_CPU_PACKETS_FAILURE
+#define bcmolt_xgpon_ni_auto_id_deactivate_all_onus_completed                                   BCMOLT_XGPON_NI_AUTO_ID_DEACTIVATE_ALL_ONUS_COMPLETED
+#define bcmolt_xgpon_ni_auto_id_disable_all_onus_completed                                      BCMOLT_XGPON_NI_AUTO_ID_DISABLE_ALL_ONUS_COMPLETED
+#define bcmolt_xgpon_ni_auto_id_enable_all_onus_completed                                       BCMOLT_XGPON_NI_AUTO_ID_ENABLE_ALL_ONUS_COMPLETED
+#define bcmolt_xgpon_ni_auto_id_los                                                             BCMOLT_XGPON_NI_AUTO_ID_LOS
+#define bcmolt_xgpon_ni_auto_id_onu_discovered                                                  BCMOLT_XGPON_NI_AUTO_ID_ONU_DISCOVERED
+#define bcmolt_xgpon_ni_auto_id_onu_upgrade_complete                                            BCMOLT_XGPON_NI_AUTO_ID_ONU_UPGRADE_COMPLETE
+#define bcmolt_xgpon_ni_auto_id_protection_switching_onus_ranged                                BCMOLT_XGPON_NI_AUTO_ID_PROTECTION_SWITCHING_ONUS_RANGED
+#define bcmolt_xgpon_ni_auto_id_protection_switching_switchover_completed                       BCMOLT_XGPON_NI_AUTO_ID_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED
+#define bcmolt_xgpon_ni_auto_id_protection_switching_traffic_resume                             BCMOLT_XGPON_NI_AUTO_ID_PROTECTION_SWITCHING_TRAFFIC_RESUME
+#define bcmolt_xgpon_ni_auto_id_rogue_detection_completed                                       BCMOLT_XGPON_NI_AUTO_ID_ROGUE_DETECTION_COMPLETED
+#define bcmolt_xgpon_ni_auto_id_rogue_onu_special_map_cycle_start                               BCMOLT_XGPON_NI_AUTO_ID_ROGUE_ONU_SPECIAL_MAP_CYCLE_START
+#define bcmolt_xgpon_ni_auto_id_serial_number_acquisition_cycle_start                           BCMOLT_XGPON_NI_AUTO_ID_SERIAL_NUMBER_ACQUISITION_CYCLE_START
+#define bcmolt_xgpon_ni_auto_id_standby_pon_monitoring_cycle_completed                          BCMOLT_XGPON_NI_AUTO_ID_STANDBY_PON_MONITORING_CYCLE_COMPLETED
+#define bcmolt_xgpon_ni_auto_id_stat_alarm_cleared                                              BCMOLT_XGPON_NI_AUTO_ID_STAT_ALARM_CLEARED
+#define bcmolt_xgpon_ni_auto_id_stat_alarm_raised                                               BCMOLT_XGPON_NI_AUTO_ID_STAT_ALARM_RAISED
+#define bcmolt_xgpon_ni_auto_id_state_change_completed                                          BCMOLT_XGPON_NI_AUTO_ID_STATE_CHANGE_COMPLETED
+#define bcmolt_xgpon_ni_auto_id_tod_request_completed                                           BCMOLT_XGPON_NI_AUTO_ID_TOD_REQUEST_COMPLETED
+#define bcmolt_xgpon_ni_auto_id__num_of                                                         BCMOLT_XGPON_NI_AUTO_ID__NUM_OF
+#define bcmolt_xgpon_ni_oper_id__begin                                                          BCMOLT_XGPON_NI_OPER_ID__BEGIN
+#define bcmolt_xgpon_ni_oper_id_adjust_tx_wavelength                                            BCMOLT_XGPON_NI_OPER_ID_ADJUST_TX_WAVELENGTH
+#define bcmolt_xgpon_ni_oper_id_disable_serial_number                                           BCMOLT_XGPON_NI_OPER_ID_DISABLE_SERIAL_NUMBER
+#define bcmolt_xgpon_ni_oper_id_reset                                                           BCMOLT_XGPON_NI_OPER_ID_RESET
+#define bcmolt_xgpon_ni_oper_id_rogue_detection_window                                          BCMOLT_XGPON_NI_OPER_ID_ROGUE_DETECTION_WINDOW
+#define bcmolt_xgpon_ni_oper_id_run_special_bw_map                                              BCMOLT_XGPON_NI_OPER_ID_RUN_SPECIAL_BW_MAP
+#define bcmolt_xgpon_ni_oper_id_set_onu_state                                                   BCMOLT_XGPON_NI_OPER_ID_SET_ONU_STATE
+#define bcmolt_xgpon_ni_oper_id_set_pon_state                                                   BCMOLT_XGPON_NI_OPER_ID_SET_PON_STATE
+#define bcmolt_xgpon_ni_oper_id_single_request_standby_pon_monitoring                           BCMOLT_XGPON_NI_OPER_ID_SINGLE_REQUEST_STANDBY_PON_MONITORING
+#define bcmolt_xgpon_ni_oper_id_start_onu_upgrade                                               BCMOLT_XGPON_NI_OPER_ID_START_ONU_UPGRADE
+#define bcmolt_xgpon_ni_oper_id_tod_request                                                     BCMOLT_XGPON_NI_OPER_ID_TOD_REQUEST
+#define bcmolt_xgpon_ni_oper_id__num_of                                                         BCMOLT_XGPON_NI_OPER_ID__NUM_OF
+#define bcmolt_xgpon_ni_proxy_id__begin                                                         BCMOLT_XGPON_NI_PROXY_ID__BEGIN
+#define bcmolt_xgpon_ni_proxy_id_broadcast_ploam_packet                                         BCMOLT_XGPON_NI_PROXY_ID_BROADCAST_PLOAM_PACKET
+#define bcmolt_xgpon_ni_proxy_id_cpu_packets                                                    BCMOLT_XGPON_NI_PROXY_ID_CPU_PACKETS
+#define bcmolt_xgpon_ni_proxy_id__num_of                                                        BCMOLT_XGPON_NI_PROXY_ID__NUM_OF
+#define bcmolt_xgpon_onu_auto_id__begin                                                         BCMOLT_XGPON_ONU_AUTO_ID__BEGIN
+#define bcmolt_xgpon_onu_auto_id_dfi                                                            BCMOLT_XGPON_ONU_AUTO_ID_DFI
+#define bcmolt_xgpon_onu_auto_id_dgi                                                            BCMOLT_XGPON_ONU_AUTO_ID_DGI
+#define bcmolt_xgpon_onu_auto_id_dowi                                                           BCMOLT_XGPON_ONU_AUTO_ID_DOWI
+#define bcmolt_xgpon_onu_auto_id_invalid_dbru_report                                            BCMOLT_XGPON_ONU_AUTO_ID_INVALID_DBRU_REPORT
+#define bcmolt_xgpon_onu_auto_id_key_exchange_completed                                         BCMOLT_XGPON_ONU_AUTO_ID_KEY_EXCHANGE_COMPLETED
+#define bcmolt_xgpon_onu_auto_id_key_exchange_cycle_skipped                                     BCMOLT_XGPON_ONU_AUTO_ID_KEY_EXCHANGE_CYCLE_SKIPPED
+#define bcmolt_xgpon_onu_auto_id_key_exchange_key_mismatch                                      BCMOLT_XGPON_ONU_AUTO_ID_KEY_EXCHANGE_KEY_MISMATCH
+#define bcmolt_xgpon_onu_auto_id_key_exchange_key_request_timeout                               BCMOLT_XGPON_ONU_AUTO_ID_KEY_EXCHANGE_KEY_REQUEST_TIMEOUT
+#define bcmolt_xgpon_onu_auto_id_looci                                                          BCMOLT_XGPON_ONU_AUTO_ID_LOOCI
+#define bcmolt_xgpon_onu_auto_id_onu_activation_completed                                       BCMOLT_XGPON_ONU_AUTO_ID_ONU_ACTIVATION_COMPLETED
+#define bcmolt_xgpon_onu_auto_id_onu_alarm                                                      BCMOLT_XGPON_ONU_AUTO_ID_ONU_ALARM
+#define bcmolt_xgpon_onu_auto_id_onu_deactivation_completed                                     BCMOLT_XGPON_ONU_AUTO_ID_ONU_DEACTIVATION_COMPLETED
+#define bcmolt_xgpon_onu_auto_id_onu_disable_completed                                          BCMOLT_XGPON_ONU_AUTO_ID_ONU_DISABLE_COMPLETED
+#define bcmolt_xgpon_onu_auto_id_onu_enable_completed                                           BCMOLT_XGPON_ONU_AUTO_ID_ONU_ENABLE_COMPLETED
+#define bcmolt_xgpon_onu_auto_id_onu_tuning_in_completed                                        BCMOLT_XGPON_ONU_AUTO_ID_ONU_TUNING_IN_COMPLETED
+#define bcmolt_xgpon_onu_auto_id_onu_tuning_out_completed                                       BCMOLT_XGPON_ONU_AUTO_ID_ONU_TUNING_OUT_COMPLETED
+#define bcmolt_xgpon_onu_auto_id_optical_reflection                                             BCMOLT_XGPON_ONU_AUTO_ID_OPTICAL_REFLECTION
+#define bcmolt_xgpon_onu_auto_id_possible_drift                                                 BCMOLT_XGPON_ONU_AUTO_ID_POSSIBLE_DRIFT
+#define bcmolt_xgpon_onu_auto_id_power_consumption_report                                       BCMOLT_XGPON_ONU_AUTO_ID_POWER_CONSUMPTION_REPORT
+#define bcmolt_xgpon_onu_auto_id_power_level_report                                             BCMOLT_XGPON_ONU_AUTO_ID_POWER_LEVEL_REPORT
+#define bcmolt_xgpon_onu_auto_id_power_management_state_change                                  BCMOLT_XGPON_ONU_AUTO_ID_POWER_MANAGEMENT_STATE_CHANGE
+#define bcmolt_xgpon_onu_auto_id_pqsi                                                           BCMOLT_XGPON_ONU_AUTO_ID_PQSI
+#define bcmolt_xgpon_onu_auto_id_ranging_completed                                              BCMOLT_XGPON_ONU_AUTO_ID_RANGING_COMPLETED
+#define bcmolt_xgpon_onu_auto_id_registration_id                                                BCMOLT_XGPON_ONU_AUTO_ID_REGISTRATION_ID
+#define bcmolt_xgpon_onu_auto_id_rssi_measurement_completed                                     BCMOLT_XGPON_ONU_AUTO_ID_RSSI_MEASUREMENT_COMPLETED
+#define bcmolt_xgpon_onu_auto_id_sdi                                                            BCMOLT_XGPON_ONU_AUTO_ID_SDI
+#define bcmolt_xgpon_onu_auto_id_secure_mutual_authentication_failure                           BCMOLT_XGPON_ONU_AUTO_ID_SECURE_MUTUAL_AUTHENTICATION_FAILURE
+#define bcmolt_xgpon_onu_auto_id_sfi                                                            BCMOLT_XGPON_ONU_AUTO_ID_SFI
+#define bcmolt_xgpon_onu_auto_id_stat_alarm_cleared                                             BCMOLT_XGPON_ONU_AUTO_ID_STAT_ALARM_CLEARED
+#define bcmolt_xgpon_onu_auto_id_stat_alarm_raised                                              BCMOLT_XGPON_ONU_AUTO_ID_STAT_ALARM_RAISED
+#define bcmolt_xgpon_onu_auto_id_sufi                                                           BCMOLT_XGPON_ONU_AUTO_ID_SUFI
+#define bcmolt_xgpon_onu_auto_id_tiwi                                                           BCMOLT_XGPON_ONU_AUTO_ID_TIWI
+#define bcmolt_xgpon_onu_auto_id_tuning_response                                                BCMOLT_XGPON_ONU_AUTO_ID_TUNING_RESPONSE
+#define bcmolt_xgpon_onu_auto_id__num_of                                                        BCMOLT_XGPON_ONU_AUTO_ID__NUM_OF
+#define bcmolt_xgpon_onu_oper_id__begin                                                         BCMOLT_XGPON_ONU_OPER_ID__BEGIN
+#define bcmolt_xgpon_onu_oper_id_adjust_tx_wavelength                                           BCMOLT_XGPON_ONU_OPER_ID_ADJUST_TX_WAVELENGTH
+#define bcmolt_xgpon_onu_oper_id_change_power_levelling                                         BCMOLT_XGPON_ONU_OPER_ID_CHANGE_POWER_LEVELLING
+#define bcmolt_xgpon_onu_oper_id_get_power_consumption                                          BCMOLT_XGPON_ONU_OPER_ID_GET_POWER_CONSUMPTION
+#define bcmolt_xgpon_onu_oper_id_get_power_level                                                BCMOLT_XGPON_ONU_OPER_ID_GET_POWER_LEVEL
+#define bcmolt_xgpon_onu_oper_id_onu_tuning_in                                                  BCMOLT_XGPON_ONU_OPER_ID_ONU_TUNING_IN
+#define bcmolt_xgpon_onu_oper_id_onu_tuning_out                                                 BCMOLT_XGPON_ONU_OPER_ID_ONU_TUNING_OUT
+#define bcmolt_xgpon_onu_oper_id_request_registration                                           BCMOLT_XGPON_ONU_OPER_ID_REQUEST_REGISTRATION
+#define bcmolt_xgpon_onu_oper_id_rssi_measurement                                               BCMOLT_XGPON_ONU_OPER_ID_RSSI_MEASUREMENT
+#define bcmolt_xgpon_onu_oper_id_secure_mutual_authentication                                   BCMOLT_XGPON_ONU_OPER_ID_SECURE_MUTUAL_AUTHENTICATION
+#define bcmolt_xgpon_onu_oper_id_set_onu_state                                                  BCMOLT_XGPON_ONU_OPER_ID_SET_ONU_STATE
+#define bcmolt_xgpon_onu_oper_id__num_of                                                        BCMOLT_XGPON_ONU_OPER_ID__NUM_OF
+#define bcmolt_xgpon_onu_proxy_id__begin                                                        BCMOLT_XGPON_ONU_PROXY_ID__BEGIN
+#define bcmolt_xgpon_onu_proxy_id_cpu_packets                                                   BCMOLT_XGPON_ONU_PROXY_ID_CPU_PACKETS
+#define bcmolt_xgpon_onu_proxy_id_ploam_packet                                                  BCMOLT_XGPON_ONU_PROXY_ID_PLOAM_PACKET
+#define bcmolt_xgpon_onu_proxy_id__num_of                                                       BCMOLT_XGPON_ONU_PROXY_ID__NUM_OF
+#define bcmolt_xgpon_onu_proxy_rx_id__begin                                                     BCMOLT_XGPON_ONU_PROXY_RX_ID__BEGIN
+#define bcmolt_xgpon_onu_proxy_rx_id_cpu_packet                                                 BCMOLT_XGPON_ONU_PROXY_RX_ID_CPU_PACKET
+#define bcmolt_xgpon_onu_proxy_rx_id_omci_packet                                                BCMOLT_XGPON_ONU_PROXY_RX_ID_OMCI_PACKET
+#define bcmolt_xgpon_onu_proxy_rx_id__num_of                                                    BCMOLT_XGPON_ONU_PROXY_RX_ID__NUM_OF
+#define bcmolt_ae_ni_key_id_ae_ni                                                               BCMOLT_AE_NI_KEY_ID_AE_NI
+#define bcmolt_ae_ni_key_id__num_of                                                             BCMOLT_AE_NI_KEY_ID__NUM_OF
+#define bcmolt_ae_ni_cfg_id_mac_address                                                         BCMOLT_AE_NI_CFG_ID_MAC_ADDRESS
+#define bcmolt_ae_ni_cfg_id_ae_ni_en                                                            BCMOLT_AE_NI_CFG_ID_AE_NI_EN
+#define bcmolt_ae_ni_cfg_id_mtu_10g                                                             BCMOLT_AE_NI_CFG_ID_MTU_10G
+#define bcmolt_ae_ni_cfg_id_prbs_generator                                                      BCMOLT_AE_NI_CFG_ID_PRBS_GENERATOR
+#define bcmolt_ae_ni_cfg_id_prbs_checker                                                        BCMOLT_AE_NI_CFG_ID_PRBS_CHECKER
+#define bcmolt_ae_ni_cfg_id_prbs_status                                                         BCMOLT_AE_NI_CFG_ID_PRBS_STATUS
+#define bcmolt_ae_ni_cfg_id__num_of                                                             BCMOLT_AE_NI_CFG_ID__NUM_OF
+#define bcmolt_ae_ni_set_ae_ni_en_state_id_new_state                                            BCMOLT_AE_NI_SET_AE_NI_EN_STATE_ID_NEW_STATE
+#define bcmolt_ae_ni_set_ae_ni_en_state_id__num_of                                              BCMOLT_AE_NI_SET_AE_NI_EN_STATE_ID__NUM_OF
+#define bcmolt_ae_path_ds_key_id_ae_ni                                                          BCMOLT_AE_PATH_DS_KEY_ID_AE_NI
+#define bcmolt_ae_path_ds_key_id__num_of                                                        BCMOLT_AE_PATH_DS_KEY_ID__NUM_OF
+#define bcmolt_ae_path_ds_stat_id_bytes                                                         BCMOLT_AE_PATH_DS_STAT_ID_BYTES
+#define bcmolt_ae_path_ds_stat_id_frames                                                        BCMOLT_AE_PATH_DS_STAT_ID_FRAMES
+#define bcmolt_ae_path_ds_stat_id_frames_64                                                     BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_64
+#define bcmolt_ae_path_ds_stat_id_frames_65_127                                                 BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_65_127
+#define bcmolt_ae_path_ds_stat_id_frames_128_255                                                BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_128_255
+#define bcmolt_ae_path_ds_stat_id_frames_256_511                                                BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_256_511
+#define bcmolt_ae_path_ds_stat_id_frames_512_1023                                               BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_512_1023
+#define bcmolt_ae_path_ds_stat_id_frames_1024_1518                                              BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_1024_1518
+#define bcmolt_ae_path_ds_stat_id_frames_1519_2047                                              BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_1519_2047
+#define bcmolt_ae_path_ds_stat_id_frames_2048_4095                                              BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_2048_4095
+#define bcmolt_ae_path_ds_stat_id_frames_4096_9216                                              BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_4096_9216
+#define bcmolt_ae_path_ds_stat_id_frames_9217_16383                                             BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_9217_16383
+#define bcmolt_ae_path_ds_stat_id_broadcast_frames                                              BCMOLT_AE_PATH_DS_STAT_ID_BROADCAST_FRAMES
+#define bcmolt_ae_path_ds_stat_id_data_bytes                                                    BCMOLT_AE_PATH_DS_STAT_ID_DATA_BYTES
+#define bcmolt_ae_path_ds_stat_id_multicast_frames                                              BCMOLT_AE_PATH_DS_STAT_ID_MULTICAST_FRAMES
+#define bcmolt_ae_path_ds_stat_id_unicast_frames                                                BCMOLT_AE_PATH_DS_STAT_ID_UNICAST_FRAMES
+#define bcmolt_ae_path_ds_stat_id_abort_frames                                                  BCMOLT_AE_PATH_DS_STAT_ID_ABORT_FRAMES
+#define bcmolt_ae_path_ds_stat_id__num_of                                                       BCMOLT_AE_PATH_DS_STAT_ID__NUM_OF
+#define bcmolt_ae_path_ds_stat_cfg_id_cfg                                                       BCMOLT_AE_PATH_DS_STAT_CFG_ID_CFG
+#define bcmolt_ae_path_ds_stat_cfg_id__num_of                                                   BCMOLT_AE_PATH_DS_STAT_CFG_ID__NUM_OF
+#define bcmolt_ae_path_ds_stat_alarm_cleared_id_stat                                            BCMOLT_AE_PATH_DS_STAT_ALARM_CLEARED_ID_STAT
+#define bcmolt_ae_path_ds_stat_alarm_cleared_id__num_of                                         BCMOLT_AE_PATH_DS_STAT_ALARM_CLEARED_ID__NUM_OF
+#define bcmolt_ae_path_ds_stat_alarm_raised_id_stat                                             BCMOLT_AE_PATH_DS_STAT_ALARM_RAISED_ID_STAT
+#define bcmolt_ae_path_ds_stat_alarm_raised_id__num_of                                          BCMOLT_AE_PATH_DS_STAT_ALARM_RAISED_ID__NUM_OF
+#define bcmolt_ae_path_ds_auto_cfg_id_stat_alarm_cleared                                        BCMOLT_AE_PATH_DS_AUTO_CFG_ID_STAT_ALARM_CLEARED
+#define bcmolt_ae_path_ds_auto_cfg_id_stat_alarm_raised                                         BCMOLT_AE_PATH_DS_AUTO_CFG_ID_STAT_ALARM_RAISED
+#define bcmolt_ae_path_ds_auto_cfg_id__num_of                                                   BCMOLT_AE_PATH_DS_AUTO_CFG_ID__NUM_OF
+#define bcmolt_ae_path_us_key_id_ae_ni                                                          BCMOLT_AE_PATH_US_KEY_ID_AE_NI
+#define bcmolt_ae_path_us_key_id__num_of                                                        BCMOLT_AE_PATH_US_KEY_ID__NUM_OF
+#define bcmolt_ae_path_us_stat_id_bytes                                                         BCMOLT_AE_PATH_US_STAT_ID_BYTES
+#define bcmolt_ae_path_us_stat_id_frames                                                        BCMOLT_AE_PATH_US_STAT_ID_FRAMES
+#define bcmolt_ae_path_us_stat_id_frames_64                                                     BCMOLT_AE_PATH_US_STAT_ID_FRAMES_64
+#define bcmolt_ae_path_us_stat_id_frames_65_127                                                 BCMOLT_AE_PATH_US_STAT_ID_FRAMES_65_127
+#define bcmolt_ae_path_us_stat_id_frames_128_255                                                BCMOLT_AE_PATH_US_STAT_ID_FRAMES_128_255
+#define bcmolt_ae_path_us_stat_id_frames_256_511                                                BCMOLT_AE_PATH_US_STAT_ID_FRAMES_256_511
+#define bcmolt_ae_path_us_stat_id_frames_512_1023                                               BCMOLT_AE_PATH_US_STAT_ID_FRAMES_512_1023
+#define bcmolt_ae_path_us_stat_id_frames_1024_1518                                              BCMOLT_AE_PATH_US_STAT_ID_FRAMES_1024_1518
+#define bcmolt_ae_path_us_stat_id_frames_1519_2047                                              BCMOLT_AE_PATH_US_STAT_ID_FRAMES_1519_2047
+#define bcmolt_ae_path_us_stat_id_frames_2048_4095                                              BCMOLT_AE_PATH_US_STAT_ID_FRAMES_2048_4095
+#define bcmolt_ae_path_us_stat_id_frames_4096_9216                                              BCMOLT_AE_PATH_US_STAT_ID_FRAMES_4096_9216
+#define bcmolt_ae_path_us_stat_id_frames_9217_16383                                             BCMOLT_AE_PATH_US_STAT_ID_FRAMES_9217_16383
+#define bcmolt_ae_path_us_stat_id_broadcast_frames                                              BCMOLT_AE_PATH_US_STAT_ID_BROADCAST_FRAMES
+#define bcmolt_ae_path_us_stat_id_data_bytes                                                    BCMOLT_AE_PATH_US_STAT_ID_DATA_BYTES
+#define bcmolt_ae_path_us_stat_id_multicast_frames                                              BCMOLT_AE_PATH_US_STAT_ID_MULTICAST_FRAMES
+#define bcmolt_ae_path_us_stat_id_unicast_frames                                                BCMOLT_AE_PATH_US_STAT_ID_UNICAST_FRAMES
+#define bcmolt_ae_path_us_stat_id_abort_frames                                                  BCMOLT_AE_PATH_US_STAT_ID_ABORT_FRAMES
+#define bcmolt_ae_path_us_stat_id_fcs_error                                                     BCMOLT_AE_PATH_US_STAT_ID_FCS_ERROR
+#define bcmolt_ae_path_us_stat_id_oversize_error                                                BCMOLT_AE_PATH_US_STAT_ID_OVERSIZE_ERROR
+#define bcmolt_ae_path_us_stat_id_runt_error                                                    BCMOLT_AE_PATH_US_STAT_ID_RUNT_ERROR
+#define bcmolt_ae_path_us_stat_id__num_of                                                       BCMOLT_AE_PATH_US_STAT_ID__NUM_OF
+#define bcmolt_ae_path_us_stat_cfg_id_cfg                                                       BCMOLT_AE_PATH_US_STAT_CFG_ID_CFG
+#define bcmolt_ae_path_us_stat_cfg_id__num_of                                                   BCMOLT_AE_PATH_US_STAT_CFG_ID__NUM_OF
+#define bcmolt_ae_path_us_stat_alarm_cleared_id_stat                                            BCMOLT_AE_PATH_US_STAT_ALARM_CLEARED_ID_STAT
+#define bcmolt_ae_path_us_stat_alarm_cleared_id__num_of                                         BCMOLT_AE_PATH_US_STAT_ALARM_CLEARED_ID__NUM_OF
+#define bcmolt_ae_path_us_stat_alarm_raised_id_stat                                             BCMOLT_AE_PATH_US_STAT_ALARM_RAISED_ID_STAT
+#define bcmolt_ae_path_us_stat_alarm_raised_id__num_of                                          BCMOLT_AE_PATH_US_STAT_ALARM_RAISED_ID__NUM_OF
+#define bcmolt_ae_path_us_auto_cfg_id_stat_alarm_cleared                                        BCMOLT_AE_PATH_US_AUTO_CFG_ID_STAT_ALARM_CLEARED
+#define bcmolt_ae_path_us_auto_cfg_id_stat_alarm_raised                                         BCMOLT_AE_PATH_US_AUTO_CFG_ID_STAT_ALARM_RAISED
+#define bcmolt_ae_path_us_auto_cfg_id__num_of                                                   BCMOLT_AE_PATH_US_AUTO_CFG_ID__NUM_OF
+#define bcmolt_channel_key_id_pon_ni                                                            BCMOLT_CHANNEL_KEY_ID_PON_NI
+#define bcmolt_channel_key_id__num_of                                                           BCMOLT_CHANNEL_KEY_ID__NUM_OF
+#define bcmolt_channel_cfg_id_operation_control                                                 BCMOLT_CHANNEL_CFG_ID_OPERATION_CONTROL
+#define bcmolt_channel_cfg_id_tol                                                               BCMOLT_CHANNEL_CFG_ID_TOL
+#define bcmolt_channel_cfg_id_system_profile                                                    BCMOLT_CHANNEL_CFG_ID_SYSTEM_PROFILE
+#define bcmolt_channel_cfg_id_channel_profile                                                   BCMOLT_CHANNEL_CFG_ID_CHANNEL_PROFILE
+#define bcmolt_channel_cfg_id__num_of                                                           BCMOLT_CHANNEL_CFG_ID__NUM_OF
+#define bcmolt_debug_key_id_reserved                                                            BCMOLT_DEBUG_KEY_ID_RESERVED
+#define bcmolt_debug_key_id__num_of                                                             BCMOLT_DEBUG_KEY_ID__NUM_OF
+#define bcmolt_debug_cfg_id_console_redirection                                                 BCMOLT_DEBUG_CFG_ID_CONSOLE_REDIRECTION
+#define bcmolt_debug_cfg_id_indications_dropped                                                 BCMOLT_DEBUG_CFG_ID_INDICATIONS_DROPPED
+#define bcmolt_debug_cfg_id_file_used_percent                                                   BCMOLT_DEBUG_CFG_ID_FILE_USED_PERCENT
+#define bcmolt_debug_cfg_id_api_capture_cfg                                                     BCMOLT_DEBUG_CFG_ID_API_CAPTURE_CFG
+#define bcmolt_debug_cfg_id_api_capture_stats                                                   BCMOLT_DEBUG_CFG_ID_API_CAPTURE_STATS
+#define bcmolt_debug_cfg_id_api_capture_buffer_read                                             BCMOLT_DEBUG_CFG_ID_API_CAPTURE_BUFFER_READ
+#define bcmolt_debug_cfg_id_api_capture_buffer                                                  BCMOLT_DEBUG_CFG_ID_API_CAPTURE_BUFFER
+#define bcmolt_debug_cfg_id__num_of                                                             BCMOLT_DEBUG_CFG_ID__NUM_OF
+#define bcmolt_debug_cli_output_id_data                                                         BCMOLT_DEBUG_CLI_OUTPUT_ID_DATA
+#define bcmolt_debug_cli_output_id__num_of                                                      BCMOLT_DEBUG_CLI_OUTPUT_ID__NUM_OF
+#define bcmolt_debug_file_almost_full_id__num_of                                                BCMOLT_DEBUG_FILE_ALMOST_FULL_ID__NUM_OF
+#define bcmolt_debug_auto_cfg_id_cli_output                                                     BCMOLT_DEBUG_AUTO_CFG_ID_CLI_OUTPUT
+#define bcmolt_debug_auto_cfg_id_file_almost_full                                               BCMOLT_DEBUG_AUTO_CFG_ID_FILE_ALMOST_FULL
+#define bcmolt_debug_auto_cfg_id__num_of                                                        BCMOLT_DEBUG_AUTO_CFG_ID__NUM_OF
+#define bcmolt_debug_cli_input_id_data                                                          BCMOLT_DEBUG_CLI_INPUT_ID_DATA
+#define bcmolt_debug_cli_input_id__num_of                                                       BCMOLT_DEBUG_CLI_INPUT_ID__NUM_OF
+#define bcmolt_debug_reset_api_capture_id__num_of                                               BCMOLT_DEBUG_RESET_API_CAPTURE_ID__NUM_OF
+#define bcmolt_debug_start_api_capture_id__num_of                                               BCMOLT_DEBUG_START_API_CAPTURE_ID__NUM_OF
+#define bcmolt_debug_stop_api_capture_id__num_of                                                BCMOLT_DEBUG_STOP_API_CAPTURE_ID__NUM_OF
+#define bcmolt_device_key_id_reserved                                                           BCMOLT_DEVICE_KEY_ID_RESERVED
+#define bcmolt_device_key_id__num_of                                                            BCMOLT_DEVICE_KEY_ID__NUM_OF
+#define bcmolt_device_cfg_id_system_mode                                                        BCMOLT_DEVICE_CFG_ID_SYSTEM_MODE
+#define bcmolt_device_cfg_id_keepalive_interval                                                 BCMOLT_DEVICE_CFG_ID_KEEPALIVE_INTERVAL
+#define bcmolt_device_cfg_id_keepalive_tolerance                                                BCMOLT_DEVICE_CFG_ID_KEEPALIVE_TOLERANCE
+#define bcmolt_device_cfg_id_firmware_sw_version                                                BCMOLT_DEVICE_CFG_ID_FIRMWARE_SW_VERSION
+#define bcmolt_device_cfg_id_host_sw_version                                                    BCMOLT_DEVICE_CFG_ID_HOST_SW_VERSION
+#define bcmolt_device_cfg_id_chip_revision                                                      BCMOLT_DEVICE_CFG_ID_CHIP_REVISION
+#define bcmolt_device_cfg_id_state                                                              BCMOLT_DEVICE_CFG_ID_STATE
+#define bcmolt_device_cfg_id_debug                                                              BCMOLT_DEVICE_CFG_ID_DEBUG
+#define bcmolt_device_cfg_id_nni_speed                                                          BCMOLT_DEVICE_CFG_ID_NNI_SPEED
+#define bcmolt_device_cfg_id_protection_switching_ext_irq                                       BCMOLT_DEVICE_CFG_ID_PROTECTION_SWITCHING_EXT_IRQ
+#define bcmolt_device_cfg_id_epon_clock_transport_sample_delay                                  BCMOLT_DEVICE_CFG_ID_EPON_CLOCK_TRANSPORT_SAMPLE_DELAY
+#define bcmolt_device_cfg_id_indication_shaping                                                 BCMOLT_DEVICE_CFG_ID_INDICATION_SHAPING
+#define bcmolt_device_cfg_id_chip_temperature                                                   BCMOLT_DEVICE_CFG_ID_CHIP_TEMPERATURE
+#define bcmolt_device_cfg_id_gpon_xgpon_tod_enable                                              BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_ENABLE
+#define bcmolt_device_cfg_id_gpon_xgpon_tod_gpio_pin                                            BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_GPIO_PIN
+#define bcmolt_device_cfg_id_gpon_xgpon_tod_connected_internally                                BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_CONNECTED_INTERNALLY
+#define bcmolt_device_cfg_id_epon_8021_as_tod_format                                            BCMOLT_DEVICE_CFG_ID_EPON_8021_AS_TOD_FORMAT
+#define bcmolt_device_cfg_id_epon_shaper_mode                                                   BCMOLT_DEVICE_CFG_ID_EPON_SHAPER_MODE
+#define bcmolt_device_cfg_id_embedded_image_list                                                BCMOLT_DEVICE_CFG_ID_EMBEDDED_IMAGE_LIST
+#define bcmolt_device_cfg_id_chip_voltage                                                       BCMOLT_DEVICE_CFG_ID_CHIP_VOLTAGE
+#define bcmolt_device_cfg_id_epon_tod_string                                                    BCMOLT_DEVICE_CFG_ID_EPON_TOD_STRING
+#define bcmolt_device_cfg_id_xgpon_num_of_onus                                                  BCMOLT_DEVICE_CFG_ID_XGPON_NUM_OF_ONUS
+#define bcmolt_device_cfg_id_device_ip_address                                                  BCMOLT_DEVICE_CFG_ID_DEVICE_IP_ADDRESS
+#define bcmolt_device_cfg_id_device_udp_port                                                    BCMOLT_DEVICE_CFG_ID_DEVICE_UDP_PORT
+#define bcmolt_device_cfg_id_tod_uart_baudrate                                                  BCMOLT_DEVICE_CFG_ID_TOD_UART_BAUDRATE
+#define bcmolt_device_cfg_id_gpon_xgpon_tod_string_length                                       BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_STRING_LENGTH
+#define bcmolt_device_cfg_id__num_of                                                            BCMOLT_DEVICE_CFG_ID__NUM_OF
+#define bcmolt_device_connection_complete_id_standalone                                         BCMOLT_DEVICE_CONNECTION_COMPLETE_ID_STANDALONE
+#define bcmolt_device_connection_complete_id__num_of                                            BCMOLT_DEVICE_CONNECTION_COMPLETE_ID__NUM_OF
+#define bcmolt_device_connection_established_id__num_of                                         BCMOLT_DEVICE_CONNECTION_ESTABLISHED_ID__NUM_OF
+#define bcmolt_device_connection_failure_id_reason                                              BCMOLT_DEVICE_CONNECTION_FAILURE_ID_REASON
+#define bcmolt_device_connection_failure_id__num_of                                             BCMOLT_DEVICE_CONNECTION_FAILURE_ID__NUM_OF
+#define bcmolt_device_ddr_test_complete_id_ddr_test                                             BCMOLT_DEVICE_DDR_TEST_COMPLETE_ID_DDR_TEST
+#define bcmolt_device_ddr_test_complete_id__num_of                                              BCMOLT_DEVICE_DDR_TEST_COMPLETE_ID__NUM_OF
+#define bcmolt_device_device_keep_alive_id_sequence_number                                      BCMOLT_DEVICE_DEVICE_KEEP_ALIVE_ID_SEQUENCE_NUMBER
+#define bcmolt_device_device_keep_alive_id_time_stamp                                           BCMOLT_DEVICE_DEVICE_KEEP_ALIVE_ID_TIME_STAMP
+#define bcmolt_device_device_keep_alive_id__num_of                                              BCMOLT_DEVICE_DEVICE_KEEP_ALIVE_ID__NUM_OF
+#define bcmolt_device_device_ready_id_firmware_sw_version                                       BCMOLT_DEVICE_DEVICE_READY_ID_FIRMWARE_SW_VERSION
+#define bcmolt_device_device_ready_id_system_mode                                               BCMOLT_DEVICE_DEVICE_READY_ID_SYSTEM_MODE
+#define bcmolt_device_device_ready_id_nni_speed                                                 BCMOLT_DEVICE_DEVICE_READY_ID_NNI_SPEED
+#define bcmolt_device_device_ready_id_chip_revision                                             BCMOLT_DEVICE_DEVICE_READY_ID_CHIP_REVISION
+#define bcmolt_device_device_ready_id_tod_enable                                                BCMOLT_DEVICE_DEVICE_READY_ID_TOD_ENABLE
+#define bcmolt_device_device_ready_id_tod_gpio_pin                                              BCMOLT_DEVICE_DEVICE_READY_ID_TOD_GPIO_PIN
+#define bcmolt_device_device_ready_id__num_of                                                   BCMOLT_DEVICE_DEVICE_READY_ID__NUM_OF
+#define bcmolt_device_disconnection_complete_id__num_of                                         BCMOLT_DEVICE_DISCONNECTION_COMPLETE_ID__NUM_OF
+#define bcmolt_device_image_transfer_complete_id_image_type                                     BCMOLT_DEVICE_IMAGE_TRANSFER_COMPLETE_ID_IMAGE_TYPE
+#define bcmolt_device_image_transfer_complete_id_block_number                                   BCMOLT_DEVICE_IMAGE_TRANSFER_COMPLETE_ID_BLOCK_NUMBER
+#define bcmolt_device_image_transfer_complete_id_status                                         BCMOLT_DEVICE_IMAGE_TRANSFER_COMPLETE_ID_STATUS
+#define bcmolt_device_image_transfer_complete_id__num_of                                        BCMOLT_DEVICE_IMAGE_TRANSFER_COMPLETE_ID__NUM_OF
+#define bcmolt_device_indications_dropped_id_total_count                                        BCMOLT_DEVICE_INDICATIONS_DROPPED_ID_TOTAL_COUNT
+#define bcmolt_device_indications_dropped_id__num_of                                            BCMOLT_DEVICE_INDICATIONS_DROPPED_ID__NUM_OF
+#define bcmolt_device_sw_error_id_task_name                                                     BCMOLT_DEVICE_SW_ERROR_ID_TASK_NAME
+#define bcmolt_device_sw_error_id_file_name                                                     BCMOLT_DEVICE_SW_ERROR_ID_FILE_NAME
+#define bcmolt_device_sw_error_id_line_number                                                   BCMOLT_DEVICE_SW_ERROR_ID_LINE_NUMBER
+#define bcmolt_device_sw_error_id_pon_ni                                                        BCMOLT_DEVICE_SW_ERROR_ID_PON_NI
+#define bcmolt_device_sw_error_id__num_of                                                       BCMOLT_DEVICE_SW_ERROR_ID__NUM_OF
+#define bcmolt_device_sw_exception_id_cpu_id                                                    BCMOLT_DEVICE_SW_EXCEPTION_ID_CPU_ID
+#define bcmolt_device_sw_exception_id_text                                                      BCMOLT_DEVICE_SW_EXCEPTION_ID_TEXT
+#define bcmolt_device_sw_exception_id__num_of                                                   BCMOLT_DEVICE_SW_EXCEPTION_ID__NUM_OF
+#define bcmolt_device_auto_cfg_id_connection_complete                                           BCMOLT_DEVICE_AUTO_CFG_ID_CONNECTION_COMPLETE
+#define bcmolt_device_auto_cfg_id_connection_established                                        BCMOLT_DEVICE_AUTO_CFG_ID_CONNECTION_ESTABLISHED
+#define bcmolt_device_auto_cfg_id_connection_failure                                            BCMOLT_DEVICE_AUTO_CFG_ID_CONNECTION_FAILURE
+#define bcmolt_device_auto_cfg_id_ddr_test_complete                                             BCMOLT_DEVICE_AUTO_CFG_ID_DDR_TEST_COMPLETE
+#define bcmolt_device_auto_cfg_id_device_keep_alive                                             BCMOLT_DEVICE_AUTO_CFG_ID_DEVICE_KEEP_ALIVE
+#define bcmolt_device_auto_cfg_id_device_ready                                                  BCMOLT_DEVICE_AUTO_CFG_ID_DEVICE_READY
+#define bcmolt_device_auto_cfg_id_disconnection_complete                                        BCMOLT_DEVICE_AUTO_CFG_ID_DISCONNECTION_COMPLETE
+#define bcmolt_device_auto_cfg_id_image_transfer_complete                                       BCMOLT_DEVICE_AUTO_CFG_ID_IMAGE_TRANSFER_COMPLETE
+#define bcmolt_device_auto_cfg_id_indications_dropped                                           BCMOLT_DEVICE_AUTO_CFG_ID_INDICATIONS_DROPPED
+#define bcmolt_device_auto_cfg_id_sw_error                                                      BCMOLT_DEVICE_AUTO_CFG_ID_SW_ERROR
+#define bcmolt_device_auto_cfg_id_sw_exception                                                  BCMOLT_DEVICE_AUTO_CFG_ID_SW_EXCEPTION
+#define bcmolt_device_auto_cfg_id__num_of                                                       BCMOLT_DEVICE_AUTO_CFG_ID__NUM_OF
+#define bcmolt_device_connect_id__num_of                                                        BCMOLT_DEVICE_CONNECT_ID__NUM_OF
+#define bcmolt_device_disconnect_id__num_of                                                     BCMOLT_DEVICE_DISCONNECT_ID__NUM_OF
+#define bcmolt_device_host_keep_alive_id_sequence_number                                        BCMOLT_DEVICE_HOST_KEEP_ALIVE_ID_SEQUENCE_NUMBER
+#define bcmolt_device_host_keep_alive_id_time_stamp                                             BCMOLT_DEVICE_HOST_KEEP_ALIVE_ID_TIME_STAMP
+#define bcmolt_device_host_keep_alive_id__num_of                                                BCMOLT_DEVICE_HOST_KEEP_ALIVE_ID__NUM_OF
+#define bcmolt_device_image_transfer_data_id_block_number                                       BCMOLT_DEVICE_IMAGE_TRANSFER_DATA_ID_BLOCK_NUMBER
+#define bcmolt_device_image_transfer_data_id_more_data                                          BCMOLT_DEVICE_IMAGE_TRANSFER_DATA_ID_MORE_DATA
+#define bcmolt_device_image_transfer_data_id_data                                               BCMOLT_DEVICE_IMAGE_TRANSFER_DATA_ID_DATA
+#define bcmolt_device_image_transfer_data_id__num_of                                            BCMOLT_DEVICE_IMAGE_TRANSFER_DATA_ID__NUM_OF
+#define bcmolt_device_image_transfer_start_id_image_type                                        BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID_IMAGE_TYPE
+#define bcmolt_device_image_transfer_start_id_image_size                                        BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID_IMAGE_SIZE
+#define bcmolt_device_image_transfer_start_id_crc32                                             BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID_CRC32
+#define bcmolt_device_image_transfer_start_id_image_name                                        BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID_IMAGE_NAME
+#define bcmolt_device_image_transfer_start_id__num_of                                           BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID__NUM_OF
+#define bcmolt_device_reset_id_mode                                                             BCMOLT_DEVICE_RESET_ID_MODE
+#define bcmolt_device_reset_id__num_of                                                          BCMOLT_DEVICE_RESET_ID__NUM_OF
+#define bcmolt_device_run_ddr_test_id_cpu                                                       BCMOLT_DEVICE_RUN_DDR_TEST_ID_CPU
+#define bcmolt_device_run_ddr_test_id_ras_0                                                     BCMOLT_DEVICE_RUN_DDR_TEST_ID_RAS_0
+#define bcmolt_device_run_ddr_test_id_ras_1                                                     BCMOLT_DEVICE_RUN_DDR_TEST_ID_RAS_1
+#define bcmolt_device_run_ddr_test_id__num_of                                                   BCMOLT_DEVICE_RUN_DDR_TEST_ID__NUM_OF
+#define bcmolt_device_sw_upgrade_activate_id__num_of                                            BCMOLT_DEVICE_SW_UPGRADE_ACTIVATE_ID__NUM_OF
+#define bcmolt_epon_denied_link_key_id_epon_ni                                                  BCMOLT_EPON_DENIED_LINK_KEY_ID_EPON_NI
+#define bcmolt_epon_denied_link_key_id_mac_address                                              BCMOLT_EPON_DENIED_LINK_KEY_ID_MAC_ADDRESS
+#define bcmolt_epon_denied_link_key_id__num_of                                                  BCMOLT_EPON_DENIED_LINK_KEY_ID__NUM_OF
+#define bcmolt_epon_denied_link_cfg_id_alarm_state                                              BCMOLT_EPON_DENIED_LINK_CFG_ID_ALARM_STATE
+#define bcmolt_epon_denied_link_cfg_id__num_of                                                  BCMOLT_EPON_DENIED_LINK_CFG_ID__NUM_OF
+#define bcmolt_epon_denied_link_laser_on_off_violation_id_alarm_status                          BCMOLT_EPON_DENIED_LINK_LASER_ON_OFF_VIOLATION_ID_ALARM_STATUS
+#define bcmolt_epon_denied_link_laser_on_off_violation_id__num_of                               BCMOLT_EPON_DENIED_LINK_LASER_ON_OFF_VIOLATION_ID__NUM_OF
+#define bcmolt_epon_denied_link_llid_pool_empty_violation_id_alarm_status                       BCMOLT_EPON_DENIED_LINK_LLID_POOL_EMPTY_VIOLATION_ID_ALARM_STATUS
+#define bcmolt_epon_denied_link_llid_pool_empty_violation_id__num_of                            BCMOLT_EPON_DENIED_LINK_LLID_POOL_EMPTY_VIOLATION_ID__NUM_OF
+#define bcmolt_epon_denied_link_max_link_violation_id_alarm_status                              BCMOLT_EPON_DENIED_LINK_MAX_LINK_VIOLATION_ID_ALARM_STATUS
+#define bcmolt_epon_denied_link_max_link_violation_id__num_of                                   BCMOLT_EPON_DENIED_LINK_MAX_LINK_VIOLATION_ID__NUM_OF
+#define bcmolt_epon_denied_link_overhead_profile_violation_id_alarm_status                      BCMOLT_EPON_DENIED_LINK_OVERHEAD_PROFILE_VIOLATION_ID_ALARM_STATUS
+#define bcmolt_epon_denied_link_overhead_profile_violation_id__num_of                           BCMOLT_EPON_DENIED_LINK_OVERHEAD_PROFILE_VIOLATION_ID__NUM_OF
+#define bcmolt_epon_denied_link_range_violation_id_alarm_status                                 BCMOLT_EPON_DENIED_LINK_RANGE_VIOLATION_ID_ALARM_STATUS
+#define bcmolt_epon_denied_link_range_violation_id__num_of                                      BCMOLT_EPON_DENIED_LINK_RANGE_VIOLATION_ID__NUM_OF
+#define bcmolt_epon_denied_link_rogue_violation_id_alarm_status                                 BCMOLT_EPON_DENIED_LINK_ROGUE_VIOLATION_ID_ALARM_STATUS
+#define bcmolt_epon_denied_link_rogue_violation_id__num_of                                      BCMOLT_EPON_DENIED_LINK_ROGUE_VIOLATION_ID__NUM_OF
+#define bcmolt_epon_denied_link_system_resource_violation_id_alarm_status                       BCMOLT_EPON_DENIED_LINK_SYSTEM_RESOURCE_VIOLATION_ID_ALARM_STATUS
+#define bcmolt_epon_denied_link_system_resource_violation_id__num_of                            BCMOLT_EPON_DENIED_LINK_SYSTEM_RESOURCE_VIOLATION_ID__NUM_OF
+#define bcmolt_epon_denied_link_tdm_channels_exhausted_id_alarm_status                          BCMOLT_EPON_DENIED_LINK_TDM_CHANNELS_EXHAUSTED_ID_ALARM_STATUS
+#define bcmolt_epon_denied_link_tdm_channels_exhausted_id__num_of                               BCMOLT_EPON_DENIED_LINK_TDM_CHANNELS_EXHAUSTED_ID__NUM_OF
+#define bcmolt_epon_denied_link_unknown_link_violation_id_alarm_status                          BCMOLT_EPON_DENIED_LINK_UNKNOWN_LINK_VIOLATION_ID_ALARM_STATUS
+#define bcmolt_epon_denied_link_unknown_link_violation_id__num_of                               BCMOLT_EPON_DENIED_LINK_UNKNOWN_LINK_VIOLATION_ID__NUM_OF
+#define bcmolt_epon_denied_link_upstream_bandwidth_violation_id_alarm_status                    BCMOLT_EPON_DENIED_LINK_UPSTREAM_BANDWIDTH_VIOLATION_ID_ALARM_STATUS
+#define bcmolt_epon_denied_link_upstream_bandwidth_violation_id__num_of                         BCMOLT_EPON_DENIED_LINK_UPSTREAM_BANDWIDTH_VIOLATION_ID__NUM_OF
+#define bcmolt_epon_denied_link_auto_cfg_id_laser_on_off_violation                              BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_LASER_ON_OFF_VIOLATION
+#define bcmolt_epon_denied_link_auto_cfg_id_llid_pool_empty_violation                           BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_LLID_POOL_EMPTY_VIOLATION
+#define bcmolt_epon_denied_link_auto_cfg_id_max_link_violation                                  BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_MAX_LINK_VIOLATION
+#define bcmolt_epon_denied_link_auto_cfg_id_overhead_profile_violation                          BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_OVERHEAD_PROFILE_VIOLATION
+#define bcmolt_epon_denied_link_auto_cfg_id_range_violation                                     BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_RANGE_VIOLATION
+#define bcmolt_epon_denied_link_auto_cfg_id_rogue_violation                                     BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_ROGUE_VIOLATION
+#define bcmolt_epon_denied_link_auto_cfg_id_system_resource_violation                           BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_SYSTEM_RESOURCE_VIOLATION
+#define bcmolt_epon_denied_link_auto_cfg_id_tdm_channels_exhausted                              BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_TDM_CHANNELS_EXHAUSTED
+#define bcmolt_epon_denied_link_auto_cfg_id_unknown_link_violation                              BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_UNKNOWN_LINK_VIOLATION
+#define bcmolt_epon_denied_link_auto_cfg_id_upstream_bandwidth_violation                        BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_UPSTREAM_BANDWIDTH_VIOLATION
+#define bcmolt_epon_denied_link_auto_cfg_id__num_of                                             BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID__NUM_OF
+#define bcmolt_epon_link_key_id_epon_ni                                                         BCMOLT_EPON_LINK_KEY_ID_EPON_NI
+#define bcmolt_epon_link_key_id_mac_address                                                     BCMOLT_EPON_LINK_KEY_ID_MAC_ADDRESS
+#define bcmolt_epon_link_key_id__num_of                                                         BCMOLT_EPON_LINK_KEY_ID__NUM_OF
+#define bcmolt_epon_link_cfg_id_link_rate                                                       BCMOLT_EPON_LINK_CFG_ID_LINK_RATE
+#define bcmolt_epon_link_cfg_id_state_flags                                                     BCMOLT_EPON_LINK_CFG_ID_STATE_FLAGS
+#define bcmolt_epon_link_cfg_id_llid                                                            BCMOLT_EPON_LINK_CFG_ID_LLID
+#define bcmolt_epon_link_cfg_id_laser_on_time_tq                                                BCMOLT_EPON_LINK_CFG_ID_LASER_ON_TIME_TQ
+#define bcmolt_epon_link_cfg_id_laser_off_time_tq                                               BCMOLT_EPON_LINK_CFG_ID_LASER_OFF_TIME_TQ
+#define bcmolt_epon_link_cfg_id_range_value_tq                                                  BCMOLT_EPON_LINK_CFG_ID_RANGE_VALUE_TQ
+#define bcmolt_epon_link_cfg_id_distance                                                        BCMOLT_EPON_LINK_CFG_ID_DISTANCE
+#define bcmolt_epon_link_cfg_id_alarm_state                                                     BCMOLT_EPON_LINK_CFG_ID_ALARM_STATE
+#define bcmolt_epon_link_cfg_id_tunnel_id                                                       BCMOLT_EPON_LINK_CFG_ID_TUNNEL_ID
+#define bcmolt_epon_link_cfg_id_onu_id                                                          BCMOLT_EPON_LINK_CFG_ID_ONU_ID
+#define bcmolt_epon_link_cfg_id_min_laser_overhead                                              BCMOLT_EPON_LINK_CFG_ID_MIN_LASER_OVERHEAD
+#define bcmolt_epon_link_cfg_id_key_exchange_config                                             BCMOLT_EPON_LINK_CFG_ID_KEY_EXCHANGE_CONFIG
+#define bcmolt_epon_link_cfg_id_epon_encryption                                                 BCMOLT_EPON_LINK_CFG_ID_EPON_ENCRYPTION
+#define bcmolt_epon_link_cfg_id_fec_enable                                                      BCMOLT_EPON_LINK_CFG_ID_FEC_ENABLE
+#define bcmolt_epon_link_cfg_id_oam_heartbeat_config                                            BCMOLT_EPON_LINK_CFG_ID_OAM_HEARTBEAT_CONFIG
+#define bcmolt_epon_link_cfg_id_upstream_bandwidth                                              BCMOLT_EPON_LINK_CFG_ID_UPSTREAM_BANDWIDTH
+#define bcmolt_epon_link_cfg_id_ubd_info                                                        BCMOLT_EPON_LINK_CFG_ID_UBD_INFO
+#define bcmolt_epon_link_cfg_id_clock_transport_enable                                          BCMOLT_EPON_LINK_CFG_ID_CLOCK_TRANSPORT_ENABLE
+#define bcmolt_epon_link_cfg_id_pending_grants                                                  BCMOLT_EPON_LINK_CFG_ID_PENDING_GRANTS
+#define bcmolt_epon_link_cfg_id_link_type                                                       BCMOLT_EPON_LINK_CFG_ID_LINK_TYPE
+#define bcmolt_epon_link_cfg_id__num_of                                                         BCMOLT_EPON_LINK_CFG_ID__NUM_OF
+#define bcmolt_epon_link_stat_id_rx_data_bytes                                                  BCMOLT_EPON_LINK_STAT_ID_RX_DATA_BYTES
+#define bcmolt_epon_link_stat_id_rx_data_frames                                                 BCMOLT_EPON_LINK_STAT_ID_RX_DATA_FRAMES
+#define bcmolt_epon_link_stat_id_rx_frames_64                                                   BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_64
+#define bcmolt_epon_link_stat_id_rx_frames_65_127                                               BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_65_127
+#define bcmolt_epon_link_stat_id_rx_frames_128_255                                              BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_128_255
+#define bcmolt_epon_link_stat_id_rx_frames_256_511                                              BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_256_511
+#define bcmolt_epon_link_stat_id_rx_frames_512_1023                                             BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_512_1023
+#define bcmolt_epon_link_stat_id_rx_frames_1024_1518                                            BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_1024_1518
+#define bcmolt_epon_link_stat_id_rx_frames_1519_2047                                            BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_1519_2047
+#define bcmolt_epon_link_stat_id_rx_frames_2048_4095                                            BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_2048_4095
+#define bcmolt_epon_link_stat_id_rx_frames_4096_9216                                            BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_4096_9216
+#define bcmolt_epon_link_stat_id_rx_frames_9217_16383                                           BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_9217_16383
+#define bcmolt_epon_link_stat_id_rx_oam_bytes                                                   BCMOLT_EPON_LINK_STAT_ID_RX_OAM_BYTES
+#define bcmolt_epon_link_stat_id_rx_oam_frames                                                  BCMOLT_EPON_LINK_STAT_ID_RX_OAM_FRAMES
+#define bcmolt_epon_link_stat_id_rx_mpcp_frames                                                 BCMOLT_EPON_LINK_STAT_ID_RX_MPCP_FRAMES
+#define bcmolt_epon_link_stat_id_rx_broadcast_frames                                            BCMOLT_EPON_LINK_STAT_ID_RX_BROADCAST_FRAMES
+#define bcmolt_epon_link_stat_id_rx_unicast_frames                                              BCMOLT_EPON_LINK_STAT_ID_RX_UNICAST_FRAMES
+#define bcmolt_epon_link_stat_id_rx_multicast_frames                                            BCMOLT_EPON_LINK_STAT_ID_RX_MULTICAST_FRAMES
+#define bcmolt_epon_link_stat_id_rx_report_frames                                               BCMOLT_EPON_LINK_STAT_ID_RX_REPORT_FRAMES
+#define bcmolt_epon_link_stat_id_rx_fcs_error                                                   BCMOLT_EPON_LINK_STAT_ID_RX_FCS_ERROR
+#define bcmolt_epon_link_stat_id_rx_oversize_error                                              BCMOLT_EPON_LINK_STAT_ID_RX_OVERSIZE_ERROR
+#define bcmolt_epon_link_stat_id_rx_runt_error                                                  BCMOLT_EPON_LINK_STAT_ID_RX_RUNT_ERROR
+#define bcmolt_epon_link_stat_id_rx_line_code_error                                             BCMOLT_EPON_LINK_STAT_ID_RX_LINE_CODE_ERROR
+#define bcmolt_epon_link_stat_id_rx_line_code_error_max                                         BCMOLT_EPON_LINK_STAT_ID_RX_LINE_CODE_ERROR_MAX
+#define bcmolt_epon_link_stat_id_tx_data_bytes                                                  BCMOLT_EPON_LINK_STAT_ID_TX_DATA_BYTES
+#define bcmolt_epon_link_stat_id_tx_data_frames                                                 BCMOLT_EPON_LINK_STAT_ID_TX_DATA_FRAMES
+#define bcmolt_epon_link_stat_id_tx_frames_64                                                   BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_64
+#define bcmolt_epon_link_stat_id_tx_frames_65_127                                               BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_65_127
+#define bcmolt_epon_link_stat_id_tx_frames_128_255                                              BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_128_255
+#define bcmolt_epon_link_stat_id_tx_frames_256_511                                              BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_256_511
+#define bcmolt_epon_link_stat_id_tx_frames_512_1023                                             BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_512_1023
+#define bcmolt_epon_link_stat_id_tx_frames_1024_1518                                            BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_1024_1518
+#define bcmolt_epon_link_stat_id_tx_frames_1519_2047                                            BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_1519_2047
+#define bcmolt_epon_link_stat_id_tx_frames_2048_4095                                            BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_2048_4095
+#define bcmolt_epon_link_stat_id_tx_frames_4096_9216                                            BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_4096_9216
+#define bcmolt_epon_link_stat_id_tx_frames_9217_16383                                           BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_9217_16383
+#define bcmolt_epon_link_stat_id_tx_oam_bytes                                                   BCMOLT_EPON_LINK_STAT_ID_TX_OAM_BYTES
+#define bcmolt_epon_link_stat_id_tx_oam_frames                                                  BCMOLT_EPON_LINK_STAT_ID_TX_OAM_FRAMES
+#define bcmolt_epon_link_stat_id_tx_mpcp_frames                                                 BCMOLT_EPON_LINK_STAT_ID_TX_MPCP_FRAMES
+#define bcmolt_epon_link_stat_id_tx_broadcast_frames                                            BCMOLT_EPON_LINK_STAT_ID_TX_BROADCAST_FRAMES
+#define bcmolt_epon_link_stat_id_tx_unicast_frames                                              BCMOLT_EPON_LINK_STAT_ID_TX_UNICAST_FRAMES
+#define bcmolt_epon_link_stat_id_tx_multicast_frames                                            BCMOLT_EPON_LINK_STAT_ID_TX_MULTICAST_FRAMES
+#define bcmolt_epon_link_stat_id_tx_gates                                                       BCMOLT_EPON_LINK_STAT_ID_TX_GATES
+#define bcmolt_epon_link_stat_id__num_of                                                        BCMOLT_EPON_LINK_STAT_ID__NUM_OF
+#define bcmolt_epon_link_stat_cfg_id_cfg                                                        BCMOLT_EPON_LINK_STAT_CFG_ID_CFG
+#define bcmolt_epon_link_stat_cfg_id__num_of                                                    BCMOLT_EPON_LINK_STAT_CFG_ID__NUM_OF
+#define bcmolt_epon_link_duplicate_mpcp_registration_request_id_initial_range_tq                BCMOLT_EPON_LINK_DUPLICATE_MPCP_REGISTRATION_REQUEST_ID_INITIAL_RANGE_TQ
+#define bcmolt_epon_link_duplicate_mpcp_registration_request_id_current_range_tq                BCMOLT_EPON_LINK_DUPLICATE_MPCP_REGISTRATION_REQUEST_ID_CURRENT_RANGE_TQ
+#define bcmolt_epon_link_duplicate_mpcp_registration_request_id__num_of                         BCMOLT_EPON_LINK_DUPLICATE_MPCP_REGISTRATION_REQUEST_ID__NUM_OF
+#define bcmolt_epon_link_encryption_enabled_id__num_of                                          BCMOLT_EPON_LINK_ENCRYPTION_ENABLED_ID__NUM_OF
+#define bcmolt_epon_link_key_exchange_failure_id_alarm_status                                   BCMOLT_EPON_LINK_KEY_EXCHANGE_FAILURE_ID_ALARM_STATUS
+#define bcmolt_epon_link_key_exchange_failure_id__num_of                                        BCMOLT_EPON_LINK_KEY_EXCHANGE_FAILURE_ID__NUM_OF
+#define bcmolt_epon_link_key_exchange_started_id__num_of                                        BCMOLT_EPON_LINK_KEY_EXCHANGE_STARTED_ID__NUM_OF
+#define bcmolt_epon_link_key_exchange_stopped_id__num_of                                        BCMOLT_EPON_LINK_KEY_EXCHANGE_STOPPED_ID__NUM_OF
+#define bcmolt_epon_link_link_deleted_id__num_of                                                BCMOLT_EPON_LINK_LINK_DELETED_ID__NUM_OF
+#define bcmolt_epon_link_link_speed_mismatch_id_previous_rate                                   BCMOLT_EPON_LINK_LINK_SPEED_MISMATCH_ID_PREVIOUS_RATE
+#define bcmolt_epon_link_link_speed_mismatch_id_current_rate                                    BCMOLT_EPON_LINK_LINK_SPEED_MISMATCH_ID_CURRENT_RATE
+#define bcmolt_epon_link_link_speed_mismatch_id__num_of                                         BCMOLT_EPON_LINK_LINK_SPEED_MISMATCH_ID__NUM_OF
+#define bcmolt_epon_link_mpcp_deregistered_id__num_of                                           BCMOLT_EPON_LINK_MPCP_DEREGISTERED_ID__NUM_OF
+#define bcmolt_epon_link_mpcp_discovered_id_link_info                                           BCMOLT_EPON_LINK_MPCP_DISCOVERED_ID_LINK_INFO
+#define bcmolt_epon_link_mpcp_discovered_id__num_of                                             BCMOLT_EPON_LINK_MPCP_DISCOVERED_ID__NUM_OF
+#define bcmolt_epon_link_mpcp_reg_ack_timeout_id__num_of                                        BCMOLT_EPON_LINK_MPCP_REG_ACK_TIMEOUT_ID__NUM_OF
+#define bcmolt_epon_link_mpcp_report_timeout_id_alarm_status                                    BCMOLT_EPON_LINK_MPCP_REPORT_TIMEOUT_ID_ALARM_STATUS
+#define bcmolt_epon_link_mpcp_report_timeout_id__num_of                                         BCMOLT_EPON_LINK_MPCP_REPORT_TIMEOUT_ID__NUM_OF
+#define bcmolt_epon_link_oam_keepalive_timeout_id_alarm_status                                  BCMOLT_EPON_LINK_OAM_KEEPALIVE_TIMEOUT_ID_ALARM_STATUS
+#define bcmolt_epon_link_oam_keepalive_timeout_id__num_of                                       BCMOLT_EPON_LINK_OAM_KEEPALIVE_TIMEOUT_ID__NUM_OF
+#define bcmolt_epon_link_oam_keepalive_timer_started_id__num_of                                 BCMOLT_EPON_LINK_OAM_KEEPALIVE_TIMER_STARTED_ID__NUM_OF
+#define bcmolt_epon_link_oam_keepalive_timer_stopped_id__num_of                                 BCMOLT_EPON_LINK_OAM_KEEPALIVE_TIMER_STOPPED_ID__NUM_OF
+#define bcmolt_epon_link_preprovisioned_link_created_id_link_info                               BCMOLT_EPON_LINK_PREPROVISIONED_LINK_CREATED_ID_LINK_INFO
+#define bcmolt_epon_link_preprovisioned_link_created_id__num_of                                 BCMOLT_EPON_LINK_PREPROVISIONED_LINK_CREATED_ID__NUM_OF
+#define bcmolt_epon_link_protection_switch_occurred_id_protection_status                        BCMOLT_EPON_LINK_PROTECTION_SWITCH_OCCURRED_ID_PROTECTION_STATUS
+#define bcmolt_epon_link_protection_switch_occurred_id_range_value_tq                           BCMOLT_EPON_LINK_PROTECTION_SWITCH_OCCURRED_ID_RANGE_VALUE_TQ
+#define bcmolt_epon_link_protection_switch_occurred_id__num_of                                  BCMOLT_EPON_LINK_PROTECTION_SWITCH_OCCURRED_ID__NUM_OF
+#define bcmolt_epon_link_range_value_changed_id_range_value_tq                                  BCMOLT_EPON_LINK_RANGE_VALUE_CHANGED_ID_RANGE_VALUE_TQ
+#define bcmolt_epon_link_range_value_changed_id__num_of                                         BCMOLT_EPON_LINK_RANGE_VALUE_CHANGED_ID__NUM_OF
+#define bcmolt_epon_link_rerange_failure_id__num_of                                             BCMOLT_EPON_LINK_RERANGE_FAILURE_ID__NUM_OF
+#define bcmolt_epon_link_stat_alarm_cleared_id_stat                                             BCMOLT_EPON_LINK_STAT_ALARM_CLEARED_ID_STAT
+#define bcmolt_epon_link_stat_alarm_cleared_id__num_of                                          BCMOLT_EPON_LINK_STAT_ALARM_CLEARED_ID__NUM_OF
+#define bcmolt_epon_link_stat_alarm_raised_id_stat                                              BCMOLT_EPON_LINK_STAT_ALARM_RAISED_ID_STAT
+#define bcmolt_epon_link_stat_alarm_raised_id__num_of                                           BCMOLT_EPON_LINK_STAT_ALARM_RAISED_ID__NUM_OF
+#define bcmolt_epon_link_static_registration_done_id__num_of                                    BCMOLT_EPON_LINK_STATIC_REGISTRATION_DONE_ID__NUM_OF
+#define bcmolt_epon_link_auto_cfg_id_duplicate_mpcp_registration_request                        BCMOLT_EPON_LINK_AUTO_CFG_ID_DUPLICATE_MPCP_REGISTRATION_REQUEST
+#define bcmolt_epon_link_auto_cfg_id_encryption_enabled                                         BCMOLT_EPON_LINK_AUTO_CFG_ID_ENCRYPTION_ENABLED
+#define bcmolt_epon_link_auto_cfg_id_key_exchange_failure                                       BCMOLT_EPON_LINK_AUTO_CFG_ID_KEY_EXCHANGE_FAILURE
+#define bcmolt_epon_link_auto_cfg_id_key_exchange_started                                       BCMOLT_EPON_LINK_AUTO_CFG_ID_KEY_EXCHANGE_STARTED
+#define bcmolt_epon_link_auto_cfg_id_key_exchange_stopped                                       BCMOLT_EPON_LINK_AUTO_CFG_ID_KEY_EXCHANGE_STOPPED
+#define bcmolt_epon_link_auto_cfg_id_link_deleted                                               BCMOLT_EPON_LINK_AUTO_CFG_ID_LINK_DELETED
+#define bcmolt_epon_link_auto_cfg_id_link_speed_mismatch                                        BCMOLT_EPON_LINK_AUTO_CFG_ID_LINK_SPEED_MISMATCH
+#define bcmolt_epon_link_auto_cfg_id_mpcp_deregistered                                          BCMOLT_EPON_LINK_AUTO_CFG_ID_MPCP_DEREGISTERED
+#define bcmolt_epon_link_auto_cfg_id_mpcp_discovered                                            BCMOLT_EPON_LINK_AUTO_CFG_ID_MPCP_DISCOVERED
+#define bcmolt_epon_link_auto_cfg_id_mpcp_reg_ack_timeout                                       BCMOLT_EPON_LINK_AUTO_CFG_ID_MPCP_REG_ACK_TIMEOUT
+#define bcmolt_epon_link_auto_cfg_id_mpcp_report_timeout                                        BCMOLT_EPON_LINK_AUTO_CFG_ID_MPCP_REPORT_TIMEOUT
+#define bcmolt_epon_link_auto_cfg_id_oam_keepalive_timeout                                      BCMOLT_EPON_LINK_AUTO_CFG_ID_OAM_KEEPALIVE_TIMEOUT
+#define bcmolt_epon_link_auto_cfg_id_oam_keepalive_timer_started                                BCMOLT_EPON_LINK_AUTO_CFG_ID_OAM_KEEPALIVE_TIMER_STARTED
+#define bcmolt_epon_link_auto_cfg_id_oam_keepalive_timer_stopped                                BCMOLT_EPON_LINK_AUTO_CFG_ID_OAM_KEEPALIVE_TIMER_STOPPED
+#define bcmolt_epon_link_auto_cfg_id_preprovisioned_link_created                                BCMOLT_EPON_LINK_AUTO_CFG_ID_PREPROVISIONED_LINK_CREATED
+#define bcmolt_epon_link_auto_cfg_id_protection_switch_occurred                                 BCMOLT_EPON_LINK_AUTO_CFG_ID_PROTECTION_SWITCH_OCCURRED
+#define bcmolt_epon_link_auto_cfg_id_range_value_changed                                        BCMOLT_EPON_LINK_AUTO_CFG_ID_RANGE_VALUE_CHANGED
+#define bcmolt_epon_link_auto_cfg_id_rerange_failure                                            BCMOLT_EPON_LINK_AUTO_CFG_ID_RERANGE_FAILURE
+#define bcmolt_epon_link_auto_cfg_id_stat_alarm_cleared                                         BCMOLT_EPON_LINK_AUTO_CFG_ID_STAT_ALARM_CLEARED
+#define bcmolt_epon_link_auto_cfg_id_stat_alarm_raised                                          BCMOLT_EPON_LINK_AUTO_CFG_ID_STAT_ALARM_RAISED
+#define bcmolt_epon_link_auto_cfg_id_static_registration_done                                   BCMOLT_EPON_LINK_AUTO_CFG_ID_STATIC_REGISTRATION_DONE
+#define bcmolt_epon_link_auto_cfg_id__num_of                                                    BCMOLT_EPON_LINK_AUTO_CFG_ID__NUM_OF
+#define bcmolt_epon_link_delete_link_id__num_of                                                 BCMOLT_EPON_LINK_DELETE_LINK_ID__NUM_OF
+#define bcmolt_epon_link_force_rediscovery_id__num_of                                           BCMOLT_EPON_LINK_FORCE_REDISCOVERY_ID__NUM_OF
+#define bcmolt_epon_link_key_exchange_start_id_period                                           BCMOLT_EPON_LINK_KEY_EXCHANGE_START_ID_PERIOD
+#define bcmolt_epon_link_key_exchange_start_id__num_of                                          BCMOLT_EPON_LINK_KEY_EXCHANGE_START_ID__NUM_OF
+#define bcmolt_epon_link_key_exchange_stop_id__num_of                                           BCMOLT_EPON_LINK_KEY_EXCHANGE_STOP_ID__NUM_OF
+#define bcmolt_epon_link_oam_keepalive_timer_start_id_send_period                               BCMOLT_EPON_LINK_OAM_KEEPALIVE_TIMER_START_ID_SEND_PERIOD
+#define bcmolt_epon_link_oam_keepalive_timer_start_id__num_of                                   BCMOLT_EPON_LINK_OAM_KEEPALIVE_TIMER_START_ID__NUM_OF
+#define bcmolt_epon_link_oam_keepalive_timer_stop_id__num_of                                    BCMOLT_EPON_LINK_OAM_KEEPALIVE_TIMER_STOP_ID__NUM_OF
+#define bcmolt_epon_link_static_registration_id_laseron_time_tq                                 BCMOLT_EPON_LINK_STATIC_REGISTRATION_ID_LASERON_TIME_TQ
+#define bcmolt_epon_link_static_registration_id_laseroff_time_tq                                BCMOLT_EPON_LINK_STATIC_REGISTRATION_ID_LASEROFF_TIME_TQ
+#define bcmolt_epon_link_static_registration_id_range_value_tq                                  BCMOLT_EPON_LINK_STATIC_REGISTRATION_ID_RANGE_VALUE_TQ
+#define bcmolt_epon_link_static_registration_id_pending_grants                                  BCMOLT_EPON_LINK_STATIC_REGISTRATION_ID_PENDING_GRANTS
+#define bcmolt_epon_link_static_registration_id__num_of                                         BCMOLT_EPON_LINK_STATIC_REGISTRATION_ID__NUM_OF
+#define bcmolt_epon_link_inject_frame_id_frame                                                  BCMOLT_EPON_LINK_INJECT_FRAME_ID_FRAME
+#define bcmolt_epon_link_inject_frame_id__num_of                                                BCMOLT_EPON_LINK_INJECT_FRAME_ID__NUM_OF
+#define bcmolt_epon_link_frame_captured_id_frame                                                BCMOLT_EPON_LINK_FRAME_CAPTURED_ID_FRAME
+#define bcmolt_epon_link_frame_captured_id__num_of                                              BCMOLT_EPON_LINK_FRAME_CAPTURED_ID__NUM_OF
+#define bcmolt_epon_ni_key_id_epon_ni                                                           BCMOLT_EPON_NI_KEY_ID_EPON_NI
+#define bcmolt_epon_ni_key_id__num_of                                                           BCMOLT_EPON_NI_KEY_ID__NUM_OF
+#define bcmolt_epon_ni_cfg_id_mac_address                                                       BCMOLT_EPON_NI_CFG_ID_MAC_ADDRESS
+#define bcmolt_epon_ni_cfg_id_epon_ni_en                                                        BCMOLT_EPON_NI_CFG_ID_EPON_NI_EN
+#define bcmolt_epon_ni_cfg_id_registration_behavior                                             BCMOLT_EPON_NI_CFG_ID_REGISTRATION_BEHAVIOR
+#define bcmolt_epon_ni_cfg_id_mtu_1g                                                            BCMOLT_EPON_NI_CFG_ID_MTU_1G
+#define bcmolt_epon_ni_cfg_id_mtu_10g                                                           BCMOLT_EPON_NI_CFG_ID_MTU_10G
+#define bcmolt_epon_ni_cfg_id_minimum_fiber_length                                              BCMOLT_EPON_NI_CFG_ID_MINIMUM_FIBER_LENGTH
+#define bcmolt_epon_ni_cfg_id_maximum_fiber_length                                              BCMOLT_EPON_NI_CFG_ID_MAXIMUM_FIBER_LENGTH
+#define bcmolt_epon_ni_cfg_id_grant_spacing_tq                                                  BCMOLT_EPON_NI_CFG_ID_GRANT_SPACING_TQ
+#define bcmolt_epon_ni_cfg_id_epon_logical_link_options                                         BCMOLT_EPON_NI_CFG_ID_EPON_LOGICAL_LINK_OPTIONS
+#define bcmolt_epon_ni_cfg_id_mpcp_discovery_period_ms                                          BCMOLT_EPON_NI_CFG_ID_MPCP_DISCOVERY_PERIOD_MS
+#define bcmolt_epon_ni_cfg_id_alarm_state                                                       BCMOLT_EPON_NI_CFG_ID_ALARM_STATE
+#define bcmolt_epon_ni_cfg_id_all_links                                                         BCMOLT_EPON_NI_CFG_ID_ALL_LINKS
+#define bcmolt_epon_ni_cfg_id_encryption_cfg                                                    BCMOLT_EPON_NI_CFG_ID_ENCRYPTION_CFG
+#define bcmolt_epon_ni_cfg_id_protection_switching_cfg                                          BCMOLT_EPON_NI_CFG_ID_PROTECTION_SWITCHING_CFG
+#define bcmolt_epon_ni_cfg_id_clock_transport_cfg                                               BCMOLT_EPON_NI_CFG_ID_CLOCK_TRANSPORT_CFG
+#define bcmolt_epon_ni_cfg_id_dropdown_weights                                                  BCMOLT_EPON_NI_CFG_ID_DROPDOWN_WEIGHTS
+#define bcmolt_epon_ni_cfg_id_approximate_solicited_usage                                       BCMOLT_EPON_NI_CFG_ID_APPROXIMATE_SOLICITED_USAGE
+#define bcmolt_epon_ni_cfg_id_approximate_tdm_usage                                             BCMOLT_EPON_NI_CFG_ID_APPROXIMATE_TDM_USAGE
+#define bcmolt_epon_ni_cfg_id_no_reports_soak_time                                              BCMOLT_EPON_NI_CFG_ID_NO_REPORTS_SOAK_TIME
+#define bcmolt_epon_ni_cfg_id_pon_aggregate_shaper                                              BCMOLT_EPON_NI_CFG_ID_PON_AGGREGATE_SHAPER
+#define bcmolt_epon_ni_cfg_id_estimated_pon_latency_tq                                          BCMOLT_EPON_NI_CFG_ID_ESTIMATED_PON_LATENCY_TQ
+#define bcmolt_epon_ni_cfg_id_onu_upgrade_params                                                BCMOLT_EPON_NI_CFG_ID_ONU_UPGRADE_PARAMS
+#define bcmolt_epon_ni_cfg_id_auto_rogue_detect_10g_en                                          BCMOLT_EPON_NI_CFG_ID_AUTO_ROGUE_DETECT_10G_EN
+#define bcmolt_epon_ni_cfg_id_auto_rogue_detect_1g_en                                           BCMOLT_EPON_NI_CFG_ID_AUTO_ROGUE_DETECT_1G_EN
+#define bcmolt_epon_ni_cfg_id_auto_rogue_detect_10g_threshold                                   BCMOLT_EPON_NI_CFG_ID_AUTO_ROGUE_DETECT_10G_THRESHOLD
+#define bcmolt_epon_ni_cfg_id__num_of                                                           BCMOLT_EPON_NI_CFG_ID__NUM_OF
+#define bcmolt_epon_ni_auto_rogue_scan_10g_failure_id__num_of                                   BCMOLT_EPON_NI_AUTO_ROGUE_SCAN_10G_FAILURE_ID__NUM_OF
+#define bcmolt_epon_ni_auto_rogue_scan_1g_failure_id__num_of                                    BCMOLT_EPON_NI_AUTO_ROGUE_SCAN_1G_FAILURE_ID__NUM_OF
+#define bcmolt_epon_ni_llid_quarantined_id_llid                                                 BCMOLT_EPON_NI_LLID_QUARANTINED_ID_LLID
+#define bcmolt_epon_ni_llid_quarantined_id_link_rate                                            BCMOLT_EPON_NI_LLID_QUARANTINED_ID_LINK_RATE
+#define bcmolt_epon_ni_llid_quarantined_id_link_mac                                             BCMOLT_EPON_NI_LLID_QUARANTINED_ID_LINK_MAC
+#define bcmolt_epon_ni_llid_quarantined_id_range_value_tq                                       BCMOLT_EPON_NI_LLID_QUARANTINED_ID_RANGE_VALUE_TQ
+#define bcmolt_epon_ni_llid_quarantined_id__num_of                                              BCMOLT_EPON_NI_LLID_QUARANTINED_ID__NUM_OF
+#define bcmolt_epon_ni_mpcp_timestamp_changed_id_mpcp_timestamp                                 BCMOLT_EPON_NI_MPCP_TIMESTAMP_CHANGED_ID_MPCP_TIMESTAMP
+#define bcmolt_epon_ni_mpcp_timestamp_changed_id__num_of                                        BCMOLT_EPON_NI_MPCP_TIMESTAMP_CHANGED_ID__NUM_OF
+#define bcmolt_epon_ni_no_reports_id_alarm_status                                               BCMOLT_EPON_NI_NO_REPORTS_ID_ALARM_STATUS
+#define bcmolt_epon_ni_no_reports_id__num_of                                                    BCMOLT_EPON_NI_NO_REPORTS_ID__NUM_OF
+#define bcmolt_epon_ni_onu_upgrade_complete_id_status                                           BCMOLT_EPON_NI_ONU_UPGRADE_COMPLETE_ID_STATUS
+#define bcmolt_epon_ni_onu_upgrade_complete_id_list_of_failed_entities                          BCMOLT_EPON_NI_ONU_UPGRADE_COMPLETE_ID_LIST_OF_FAILED_ENTITIES
+#define bcmolt_epon_ni_onu_upgrade_complete_id__num_of                                          BCMOLT_EPON_NI_ONU_UPGRADE_COMPLETE_ID__NUM_OF
+#define bcmolt_epon_ni_rerange_failure_id__num_of                                               BCMOLT_EPON_NI_RERANGE_FAILURE_ID__NUM_OF
+#define bcmolt_epon_ni_rogue_scan_complete_id_return_ind_status                                 BCMOLT_EPON_NI_ROGUE_SCAN_COMPLETE_ID_RETURN_IND_STATUS
+#define bcmolt_epon_ni_rogue_scan_complete_id__num_of                                           BCMOLT_EPON_NI_ROGUE_SCAN_COMPLETE_ID__NUM_OF
+#define bcmolt_epon_ni_rssi_measurement_completed_id_status                                     BCMOLT_EPON_NI_RSSI_MEASUREMENT_COMPLETED_ID_STATUS
+#define bcmolt_epon_ni_rssi_measurement_completed_id_llid                                       BCMOLT_EPON_NI_RSSI_MEASUREMENT_COMPLETED_ID_LLID
+#define bcmolt_epon_ni_rssi_measurement_completed_id_link_mac                                   BCMOLT_EPON_NI_RSSI_MEASUREMENT_COMPLETED_ID_LINK_MAC
+#define bcmolt_epon_ni_rssi_measurement_completed_id__num_of                                    BCMOLT_EPON_NI_RSSI_MEASUREMENT_COMPLETED_ID__NUM_OF
+#define bcmolt_epon_ni_state_change_completed_id_new_state                                      BCMOLT_EPON_NI_STATE_CHANGE_COMPLETED_ID_NEW_STATE
+#define bcmolt_epon_ni_state_change_completed_id__num_of                                        BCMOLT_EPON_NI_STATE_CHANGE_COMPLETED_ID__NUM_OF
+#define bcmolt_epon_ni_auto_cfg_id_auto_rogue_scan_10g_failure                                  BCMOLT_EPON_NI_AUTO_CFG_ID_AUTO_ROGUE_SCAN_10G_FAILURE
+#define bcmolt_epon_ni_auto_cfg_id_auto_rogue_scan_1g_failure                                   BCMOLT_EPON_NI_AUTO_CFG_ID_AUTO_ROGUE_SCAN_1G_FAILURE
+#define bcmolt_epon_ni_auto_cfg_id_llid_quarantined                                             BCMOLT_EPON_NI_AUTO_CFG_ID_LLID_QUARANTINED
+#define bcmolt_epon_ni_auto_cfg_id_mpcp_timestamp_changed                                       BCMOLT_EPON_NI_AUTO_CFG_ID_MPCP_TIMESTAMP_CHANGED
+#define bcmolt_epon_ni_auto_cfg_id_no_reports                                                   BCMOLT_EPON_NI_AUTO_CFG_ID_NO_REPORTS
+#define bcmolt_epon_ni_auto_cfg_id_onu_upgrade_complete                                         BCMOLT_EPON_NI_AUTO_CFG_ID_ONU_UPGRADE_COMPLETE
+#define bcmolt_epon_ni_auto_cfg_id_rerange_failure                                              BCMOLT_EPON_NI_AUTO_CFG_ID_RERANGE_FAILURE
+#define bcmolt_epon_ni_auto_cfg_id_rogue_scan_complete                                          BCMOLT_EPON_NI_AUTO_CFG_ID_ROGUE_SCAN_COMPLETE
+#define bcmolt_epon_ni_auto_cfg_id_rssi_measurement_completed                                   BCMOLT_EPON_NI_AUTO_CFG_ID_RSSI_MEASUREMENT_COMPLETED
+#define bcmolt_epon_ni_auto_cfg_id_state_change_completed                                       BCMOLT_EPON_NI_AUTO_CFG_ID_STATE_CHANGE_COMPLETED
+#define bcmolt_epon_ni_auto_cfg_id__num_of                                                      BCMOLT_EPON_NI_AUTO_CFG_ID__NUM_OF
+#define bcmolt_epon_ni_add_link_id_mac_address                                                  BCMOLT_EPON_NI_ADD_LINK_ID_MAC_ADDRESS
+#define bcmolt_epon_ni_add_link_id_rate                                                         BCMOLT_EPON_NI_ADD_LINK_ID_RATE
+#define bcmolt_epon_ni_add_link_id__num_of                                                      BCMOLT_EPON_NI_ADD_LINK_ID__NUM_OF
+#define bcmolt_epon_ni_add_multicast_link_id_mac_address                                        BCMOLT_EPON_NI_ADD_MULTICAST_LINK_ID_MAC_ADDRESS
+#define bcmolt_epon_ni_add_multicast_link_id_rate                                               BCMOLT_EPON_NI_ADD_MULTICAST_LINK_ID_RATE
+#define bcmolt_epon_ni_add_multicast_link_id__num_of                                            BCMOLT_EPON_NI_ADD_MULTICAST_LINK_ID__NUM_OF
+#define bcmolt_epon_ni_add_protected_standby_link_id_mac_address                                BCMOLT_EPON_NI_ADD_PROTECTED_STANDBY_LINK_ID_MAC_ADDRESS
+#define bcmolt_epon_ni_add_protected_standby_link_id_working_link_info                          BCMOLT_EPON_NI_ADD_PROTECTED_STANDBY_LINK_ID_WORKING_LINK_INFO
+#define bcmolt_epon_ni_add_protected_standby_link_id__num_of                                    BCMOLT_EPON_NI_ADD_PROTECTED_STANDBY_LINK_ID__NUM_OF
+#define bcmolt_epon_ni_issue_rssi_grant_id_granted_link                                         BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_GRANTED_LINK
+#define bcmolt_epon_ni_issue_rssi_grant_id_trigger_width                                        BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_TRIGGER_WIDTH
+#define bcmolt_epon_ni_issue_rssi_grant_id_trigger_delay                                        BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_TRIGGER_DELAY
+#define bcmolt_epon_ni_issue_rssi_grant_id_sample_period                                        BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_SAMPLE_PERIOD
+#define bcmolt_epon_ni_issue_rssi_grant_id__num_of                                              BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID__NUM_OF
+#define bcmolt_epon_ni_protection_switching_apply_rerange_delta_id_rerange_delta                BCMOLT_EPON_NI_PROTECTION_SWITCHING_APPLY_RERANGE_DELTA_ID_RERANGE_DELTA
+#define bcmolt_epon_ni_protection_switching_apply_rerange_delta_id__num_of                      BCMOLT_EPON_NI_PROTECTION_SWITCHING_APPLY_RERANGE_DELTA_ID__NUM_OF
+#define bcmolt_epon_ni_rogue_llid_scan_id_mode                                                  BCMOLT_EPON_NI_ROGUE_LLID_SCAN_ID_MODE
+#define bcmolt_epon_ni_rogue_llid_scan_id_llid                                                  BCMOLT_EPON_NI_ROGUE_LLID_SCAN_ID_LLID
+#define bcmolt_epon_ni_rogue_llid_scan_id__num_of                                               BCMOLT_EPON_NI_ROGUE_LLID_SCAN_ID__NUM_OF
+#define bcmolt_epon_ni_set_epon_ni_en_state_id_new_state                                        BCMOLT_EPON_NI_SET_EPON_NI_EN_STATE_ID_NEW_STATE
+#define bcmolt_epon_ni_set_epon_ni_en_state_id__num_of                                          BCMOLT_EPON_NI_SET_EPON_NI_EN_STATE_ID__NUM_OF
+#define bcmolt_epon_ni_start_onu_upgrade_id_list_of_onu_ids                                     BCMOLT_EPON_NI_START_ONU_UPGRADE_ID_LIST_OF_ONU_IDS
+#define bcmolt_epon_ni_start_onu_upgrade_id__num_of                                             BCMOLT_EPON_NI_START_ONU_UPGRADE_ID__NUM_OF
+#define bcmolt_epon_onu_10g_us_key_id_epon_ni                                                   BCMOLT_EPON_ONU_10G_US_KEY_ID_EPON_NI
+#define bcmolt_epon_onu_10g_us_key_id_onu_id                                                    BCMOLT_EPON_ONU_10G_US_KEY_ID_ONU_ID
+#define bcmolt_epon_onu_10g_us_key_id__num_of                                                   BCMOLT_EPON_ONU_10G_US_KEY_ID__NUM_OF
+#define bcmolt_epon_onu_10g_us_cfg_id_all_links                                                 BCMOLT_EPON_ONU_10G_US_CFG_ID_ALL_LINKS
+#define bcmolt_epon_onu_10g_us_cfg_id__num_of                                                   BCMOLT_EPON_ONU_10G_US_CFG_ID__NUM_OF
+#define bcmolt_epon_onu_10g_us_stat_id_fec_code_words_total                                     BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_CODE_WORDS_TOTAL
+#define bcmolt_epon_onu_10g_us_stat_id_fec_code_words_decode_fails                              BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_CODE_WORDS_DECODE_FAILS
+#define bcmolt_epon_onu_10g_us_stat_id_fec_zeroes_corrected                                     BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_ZEROES_CORRECTED
+#define bcmolt_epon_onu_10g_us_stat_id_fec_ones_corrected                                       BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_ONES_CORRECTED
+#define bcmolt_epon_onu_10g_us_stat_id__num_of                                                  BCMOLT_EPON_ONU_10G_US_STAT_ID__NUM_OF
+#define bcmolt_epon_onu_10g_us_stat_cfg_id_cfg                                                  BCMOLT_EPON_ONU_10G_US_STAT_CFG_ID_CFG
+#define bcmolt_epon_onu_10g_us_stat_cfg_id__num_of                                              BCMOLT_EPON_ONU_10G_US_STAT_CFG_ID__NUM_OF
+#define bcmolt_epon_onu_10g_us_stat_alarm_cleared_id_stat                                       BCMOLT_EPON_ONU_10G_US_STAT_ALARM_CLEARED_ID_STAT
+#define bcmolt_epon_onu_10g_us_stat_alarm_cleared_id__num_of                                    BCMOLT_EPON_ONU_10G_US_STAT_ALARM_CLEARED_ID__NUM_OF
+#define bcmolt_epon_onu_10g_us_stat_alarm_raised_id_stat                                        BCMOLT_EPON_ONU_10G_US_STAT_ALARM_RAISED_ID_STAT
+#define bcmolt_epon_onu_10g_us_stat_alarm_raised_id__num_of                                     BCMOLT_EPON_ONU_10G_US_STAT_ALARM_RAISED_ID__NUM_OF
+#define bcmolt_epon_onu_10g_us_auto_cfg_id_stat_alarm_cleared                                   BCMOLT_EPON_ONU_10G_US_AUTO_CFG_ID_STAT_ALARM_CLEARED
+#define bcmolt_epon_onu_10g_us_auto_cfg_id_stat_alarm_raised                                    BCMOLT_EPON_ONU_10G_US_AUTO_CFG_ID_STAT_ALARM_RAISED
+#define bcmolt_epon_onu_10g_us_auto_cfg_id__num_of                                              BCMOLT_EPON_ONU_10G_US_AUTO_CFG_ID__NUM_OF
+#define bcmolt_epon_onu_1g_us_key_id_epon_ni                                                    BCMOLT_EPON_ONU_1G_US_KEY_ID_EPON_NI
+#define bcmolt_epon_onu_1g_us_key_id_onu_id                                                     BCMOLT_EPON_ONU_1G_US_KEY_ID_ONU_ID
+#define bcmolt_epon_onu_1g_us_key_id__num_of                                                    BCMOLT_EPON_ONU_1G_US_KEY_ID__NUM_OF
+#define bcmolt_epon_onu_1g_us_cfg_id_all_links                                                  BCMOLT_EPON_ONU_1G_US_CFG_ID_ALL_LINKS
+#define bcmolt_epon_onu_1g_us_cfg_id__num_of                                                    BCMOLT_EPON_ONU_1G_US_CFG_ID__NUM_OF
+#define bcmolt_epon_onu_1g_us_stat_id_good_frames                                               BCMOLT_EPON_ONU_1G_US_STAT_ID_GOOD_FRAMES
+#define bcmolt_epon_onu_1g_us_stat_id_good_bytes                                                BCMOLT_EPON_ONU_1G_US_STAT_ID_GOOD_BYTES
+#define bcmolt_epon_onu_1g_us_stat_id_oversz_frames                                             BCMOLT_EPON_ONU_1G_US_STAT_ID_OVERSZ_FRAMES
+#define bcmolt_epon_onu_1g_us_stat_id_non_fec_good_frames                                       BCMOLT_EPON_ONU_1G_US_STAT_ID_NON_FEC_GOOD_FRAMES
+#define bcmolt_epon_onu_1g_us_stat_id_non_fec_good_bytes                                        BCMOLT_EPON_ONU_1G_US_STAT_ID_NON_FEC_GOOD_BYTES
+#define bcmolt_epon_onu_1g_us_stat_id_fec_good_frames                                           BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_GOOD_FRAMES
+#define bcmolt_epon_onu_1g_us_stat_id_fec_good_bytes                                            BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_GOOD_BYTES
+#define bcmolt_epon_onu_1g_us_stat_id_fec_frames_exc_errs                                       BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_FRAMES_EXC_ERRS
+#define bcmolt_epon_onu_1g_us_stat_id_fec_blks_no_errs                                          BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_BLKS_NO_ERRS
+#define bcmolt_epon_onu_1g_us_stat_id_fec_blks_corr_errs                                        BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_BLKS_CORR_ERRS
+#define bcmolt_epon_onu_1g_us_stat_id_fec_blks_uncorr_errs                                      BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_BLKS_UNCORR_ERRS
+#define bcmolt_epon_onu_1g_us_stat_id_fec_corr_bytes                                            BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_CORR_BYTES
+#define bcmolt_epon_onu_1g_us_stat_id_fec_corr_zeroes                                           BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_CORR_ZEROES
+#define bcmolt_epon_onu_1g_us_stat_id_fec_corr_ones                                             BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_CORR_ONES
+#define bcmolt_epon_onu_1g_us_stat_id_undersz_frames                                            BCMOLT_EPON_ONU_1G_US_STAT_ID_UNDERSZ_FRAMES
+#define bcmolt_epon_onu_1g_us_stat_id_errorsz_frames                                            BCMOLT_EPON_ONU_1G_US_STAT_ID_ERRORSZ_FRAMES
+#define bcmolt_epon_onu_1g_us_stat_id__num_of                                                   BCMOLT_EPON_ONU_1G_US_STAT_ID__NUM_OF
+#define bcmolt_epon_onu_1g_us_stat_cfg_id_cfg                                                   BCMOLT_EPON_ONU_1G_US_STAT_CFG_ID_CFG
+#define bcmolt_epon_onu_1g_us_stat_cfg_id__num_of                                               BCMOLT_EPON_ONU_1G_US_STAT_CFG_ID__NUM_OF
+#define bcmolt_epon_onu_1g_us_stat_alarm_cleared_id_stat                                        BCMOLT_EPON_ONU_1G_US_STAT_ALARM_CLEARED_ID_STAT
+#define bcmolt_epon_onu_1g_us_stat_alarm_cleared_id__num_of                                     BCMOLT_EPON_ONU_1G_US_STAT_ALARM_CLEARED_ID__NUM_OF
+#define bcmolt_epon_onu_1g_us_stat_alarm_raised_id_stat                                         BCMOLT_EPON_ONU_1G_US_STAT_ALARM_RAISED_ID_STAT
+#define bcmolt_epon_onu_1g_us_stat_alarm_raised_id__num_of                                      BCMOLT_EPON_ONU_1G_US_STAT_ALARM_RAISED_ID__NUM_OF
+#define bcmolt_epon_onu_1g_us_auto_cfg_id_stat_alarm_cleared                                    BCMOLT_EPON_ONU_1G_US_AUTO_CFG_ID_STAT_ALARM_CLEARED
+#define bcmolt_epon_onu_1g_us_auto_cfg_id_stat_alarm_raised                                     BCMOLT_EPON_ONU_1G_US_AUTO_CFG_ID_STAT_ALARM_RAISED
+#define bcmolt_epon_onu_1g_us_auto_cfg_id__num_of                                               BCMOLT_EPON_ONU_1G_US_AUTO_CFG_ID__NUM_OF
+#define bcmolt_epon_path_10g_ds_key_id_epon_ni                                                  BCMOLT_EPON_PATH_10G_DS_KEY_ID_EPON_NI
+#define bcmolt_epon_path_10g_ds_key_id__num_of                                                  BCMOLT_EPON_PATH_10G_DS_KEY_ID__NUM_OF
+#define bcmolt_epon_path_10g_ds_cfg_id_fec_state                                                BCMOLT_EPON_PATH_10G_DS_CFG_ID_FEC_STATE
+#define bcmolt_epon_path_10g_ds_cfg_id_prbs_generator                                           BCMOLT_EPON_PATH_10G_DS_CFG_ID_PRBS_GENERATOR
+#define bcmolt_epon_path_10g_ds_cfg_id__num_of                                                  BCMOLT_EPON_PATH_10G_DS_CFG_ID__NUM_OF
+#define bcmolt_epon_path_10g_ds_stat_id_bytes                                                   BCMOLT_EPON_PATH_10G_DS_STAT_ID_BYTES
+#define bcmolt_epon_path_10g_ds_stat_id_frames                                                  BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES
+#define bcmolt_epon_path_10g_ds_stat_id_frames_64                                               BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_64
+#define bcmolt_epon_path_10g_ds_stat_id_frames_65_127                                           BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_65_127
+#define bcmolt_epon_path_10g_ds_stat_id_frames_128_255                                          BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_128_255
+#define bcmolt_epon_path_10g_ds_stat_id_frames_256_511                                          BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_256_511
+#define bcmolt_epon_path_10g_ds_stat_id_frames_512_1023                                         BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_512_1023
+#define bcmolt_epon_path_10g_ds_stat_id_frames_1024_1518                                        BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_1024_1518
+#define bcmolt_epon_path_10g_ds_stat_id_frames_1519_2047                                        BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_1519_2047
+#define bcmolt_epon_path_10g_ds_stat_id_frames_2048_4095                                        BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_2048_4095
+#define bcmolt_epon_path_10g_ds_stat_id_frames_4096_9216                                        BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_4096_9216
+#define bcmolt_epon_path_10g_ds_stat_id_frames_9217_16383                                       BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_9217_16383
+#define bcmolt_epon_path_10g_ds_stat_id_broadcast_frames                                        BCMOLT_EPON_PATH_10G_DS_STAT_ID_BROADCAST_FRAMES
+#define bcmolt_epon_path_10g_ds_stat_id_data_bytes                                              BCMOLT_EPON_PATH_10G_DS_STAT_ID_DATA_BYTES
+#define bcmolt_epon_path_10g_ds_stat_id_multicast_frames                                        BCMOLT_EPON_PATH_10G_DS_STAT_ID_MULTICAST_FRAMES
+#define bcmolt_epon_path_10g_ds_stat_id_unicast_frames                                          BCMOLT_EPON_PATH_10G_DS_STAT_ID_UNICAST_FRAMES
+#define bcmolt_epon_path_10g_ds_stat_id_oam_bytes                                               BCMOLT_EPON_PATH_10G_DS_STAT_ID_OAM_BYTES
+#define bcmolt_epon_path_10g_ds_stat_id_oam_frames                                              BCMOLT_EPON_PATH_10G_DS_STAT_ID_OAM_FRAMES
+#define bcmolt_epon_path_10g_ds_stat_id_gate_frames                                             BCMOLT_EPON_PATH_10G_DS_STAT_ID_GATE_FRAMES
+#define bcmolt_epon_path_10g_ds_stat_id_mpcp_frames                                             BCMOLT_EPON_PATH_10G_DS_STAT_ID_MPCP_FRAMES
+#define bcmolt_epon_path_10g_ds_stat_id_abort_frames                                            BCMOLT_EPON_PATH_10G_DS_STAT_ID_ABORT_FRAMES
+#define bcmolt_epon_path_10g_ds_stat_id__num_of                                                 BCMOLT_EPON_PATH_10G_DS_STAT_ID__NUM_OF
+#define bcmolt_epon_path_10g_ds_stat_cfg_id_cfg                                                 BCMOLT_EPON_PATH_10G_DS_STAT_CFG_ID_CFG
+#define bcmolt_epon_path_10g_ds_stat_cfg_id__num_of                                             BCMOLT_EPON_PATH_10G_DS_STAT_CFG_ID__NUM_OF
+#define bcmolt_epon_path_10g_ds_stat_alarm_cleared_id_stat                                      BCMOLT_EPON_PATH_10G_DS_STAT_ALARM_CLEARED_ID_STAT
+#define bcmolt_epon_path_10g_ds_stat_alarm_cleared_id__num_of                                   BCMOLT_EPON_PATH_10G_DS_STAT_ALARM_CLEARED_ID__NUM_OF
+#define bcmolt_epon_path_10g_ds_stat_alarm_raised_id_stat                                       BCMOLT_EPON_PATH_10G_DS_STAT_ALARM_RAISED_ID_STAT
+#define bcmolt_epon_path_10g_ds_stat_alarm_raised_id__num_of                                    BCMOLT_EPON_PATH_10G_DS_STAT_ALARM_RAISED_ID__NUM_OF
+#define bcmolt_epon_path_10g_ds_auto_cfg_id_stat_alarm_cleared                                  BCMOLT_EPON_PATH_10G_DS_AUTO_CFG_ID_STAT_ALARM_CLEARED
+#define bcmolt_epon_path_10g_ds_auto_cfg_id_stat_alarm_raised                                   BCMOLT_EPON_PATH_10G_DS_AUTO_CFG_ID_STAT_ALARM_RAISED
+#define bcmolt_epon_path_10g_ds_auto_cfg_id__num_of                                             BCMOLT_EPON_PATH_10G_DS_AUTO_CFG_ID__NUM_OF
+#define bcmolt_epon_path_10g_us_key_id_epon_ni                                                  BCMOLT_EPON_PATH_10G_US_KEY_ID_EPON_NI
+#define bcmolt_epon_path_10g_us_key_id__num_of                                                  BCMOLT_EPON_PATH_10G_US_KEY_ID__NUM_OF
+#define bcmolt_epon_path_10g_us_cfg_id_fec_state                                                BCMOLT_EPON_PATH_10G_US_CFG_ID_FEC_STATE
+#define bcmolt_epon_path_10g_us_cfg_id_sync_time_tq                                             BCMOLT_EPON_PATH_10G_US_CFG_ID_SYNC_TIME_TQ
+#define bcmolt_epon_path_10g_us_cfg_id_prbs_checker                                             BCMOLT_EPON_PATH_10G_US_CFG_ID_PRBS_CHECKER
+#define bcmolt_epon_path_10g_us_cfg_id_prbs_status                                              BCMOLT_EPON_PATH_10G_US_CFG_ID_PRBS_STATUS
+#define bcmolt_epon_path_10g_us_cfg_id__num_of                                                  BCMOLT_EPON_PATH_10G_US_CFG_ID__NUM_OF
+#define bcmolt_epon_path_10g_us_stat_id_bytes                                                   BCMOLT_EPON_PATH_10G_US_STAT_ID_BYTES
+#define bcmolt_epon_path_10g_us_stat_id_frames                                                  BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES
+#define bcmolt_epon_path_10g_us_stat_id_frames_64                                               BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_64
+#define bcmolt_epon_path_10g_us_stat_id_frames_65_127                                           BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_65_127
+#define bcmolt_epon_path_10g_us_stat_id_frames_128_255                                          BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_128_255
+#define bcmolt_epon_path_10g_us_stat_id_frames_256_511                                          BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_256_511
+#define bcmolt_epon_path_10g_us_stat_id_frames_512_1023                                         BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_512_1023
+#define bcmolt_epon_path_10g_us_stat_id_frames_1024_1518                                        BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_1024_1518
+#define bcmolt_epon_path_10g_us_stat_id_frames_1519_2047                                        BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_1519_2047
+#define bcmolt_epon_path_10g_us_stat_id_frames_2048_4095                                        BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_2048_4095
+#define bcmolt_epon_path_10g_us_stat_id_frames_4096_9216                                        BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_4096_9216
+#define bcmolt_epon_path_10g_us_stat_id_frames_9217_16383                                       BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_9217_16383
+#define bcmolt_epon_path_10g_us_stat_id_broadcast_frames                                        BCMOLT_EPON_PATH_10G_US_STAT_ID_BROADCAST_FRAMES
+#define bcmolt_epon_path_10g_us_stat_id_data_bytes                                              BCMOLT_EPON_PATH_10G_US_STAT_ID_DATA_BYTES
+#define bcmolt_epon_path_10g_us_stat_id_multicast_frames                                        BCMOLT_EPON_PATH_10G_US_STAT_ID_MULTICAST_FRAMES
+#define bcmolt_epon_path_10g_us_stat_id_unicast_frames                                          BCMOLT_EPON_PATH_10G_US_STAT_ID_UNICAST_FRAMES
+#define bcmolt_epon_path_10g_us_stat_id_mpcp_frames                                             BCMOLT_EPON_PATH_10G_US_STAT_ID_MPCP_FRAMES
+#define bcmolt_epon_path_10g_us_stat_id_oam_bytes                                               BCMOLT_EPON_PATH_10G_US_STAT_ID_OAM_BYTES
+#define bcmolt_epon_path_10g_us_stat_id_oam_frames                                              BCMOLT_EPON_PATH_10G_US_STAT_ID_OAM_FRAMES
+#define bcmolt_epon_path_10g_us_stat_id_report_frames                                           BCMOLT_EPON_PATH_10G_US_STAT_ID_REPORT_FRAMES
+#define bcmolt_epon_path_10g_us_stat_id_abort_frames                                            BCMOLT_EPON_PATH_10G_US_STAT_ID_ABORT_FRAMES
+#define bcmolt_epon_path_10g_us_stat_id_fcs_error                                               BCMOLT_EPON_PATH_10G_US_STAT_ID_FCS_ERROR
+#define bcmolt_epon_path_10g_us_stat_id_crc_8_error                                             BCMOLT_EPON_PATH_10G_US_STAT_ID_CRC_8_ERROR
+#define bcmolt_epon_path_10g_us_stat_id_out_of_slot                                             BCMOLT_EPON_PATH_10G_US_STAT_ID_OUT_OF_SLOT
+#define bcmolt_epon_path_10g_us_stat_id_oversize_error                                          BCMOLT_EPON_PATH_10G_US_STAT_ID_OVERSIZE_ERROR
+#define bcmolt_epon_path_10g_us_stat_id_runt_error                                              BCMOLT_EPON_PATH_10G_US_STAT_ID_RUNT_ERROR
+#define bcmolt_epon_path_10g_us_stat_id__num_of                                                 BCMOLT_EPON_PATH_10G_US_STAT_ID__NUM_OF
+#define bcmolt_epon_path_10g_us_stat_cfg_id_cfg                                                 BCMOLT_EPON_PATH_10G_US_STAT_CFG_ID_CFG
+#define bcmolt_epon_path_10g_us_stat_cfg_id__num_of                                             BCMOLT_EPON_PATH_10G_US_STAT_CFG_ID__NUM_OF
+#define bcmolt_epon_path_10g_us_stat_alarm_cleared_id_stat                                      BCMOLT_EPON_PATH_10G_US_STAT_ALARM_CLEARED_ID_STAT
+#define bcmolt_epon_path_10g_us_stat_alarm_cleared_id__num_of                                   BCMOLT_EPON_PATH_10G_US_STAT_ALARM_CLEARED_ID__NUM_OF
+#define bcmolt_epon_path_10g_us_stat_alarm_raised_id_stat                                       BCMOLT_EPON_PATH_10G_US_STAT_ALARM_RAISED_ID_STAT
+#define bcmolt_epon_path_10g_us_stat_alarm_raised_id__num_of                                    BCMOLT_EPON_PATH_10G_US_STAT_ALARM_RAISED_ID__NUM_OF
+#define bcmolt_epon_path_10g_us_auto_cfg_id_stat_alarm_cleared                                  BCMOLT_EPON_PATH_10G_US_AUTO_CFG_ID_STAT_ALARM_CLEARED
+#define bcmolt_epon_path_10g_us_auto_cfg_id_stat_alarm_raised                                   BCMOLT_EPON_PATH_10G_US_AUTO_CFG_ID_STAT_ALARM_RAISED
+#define bcmolt_epon_path_10g_us_auto_cfg_id__num_of                                             BCMOLT_EPON_PATH_10G_US_AUTO_CFG_ID__NUM_OF
+#define bcmolt_epon_path_1g_ds_key_id_epon_ni                                                   BCMOLT_EPON_PATH_1G_DS_KEY_ID_EPON_NI
+#define bcmolt_epon_path_1g_ds_key_id__num_of                                                   BCMOLT_EPON_PATH_1G_DS_KEY_ID__NUM_OF
+#define bcmolt_epon_path_1g_ds_cfg_id_default_fec_state                                         BCMOLT_EPON_PATH_1G_DS_CFG_ID_DEFAULT_FEC_STATE
+#define bcmolt_epon_path_1g_ds_cfg_id_raman_mode                                                BCMOLT_EPON_PATH_1G_DS_CFG_ID_RAMAN_MODE
+#define bcmolt_epon_path_1g_ds_cfg_id_turbo_2g_mode                                             BCMOLT_EPON_PATH_1G_DS_CFG_ID_TURBO_2G_MODE
+#define bcmolt_epon_path_1g_ds_cfg_id_prbs_generator                                            BCMOLT_EPON_PATH_1G_DS_CFG_ID_PRBS_GENERATOR
+#define bcmolt_epon_path_1g_ds_cfg_id__num_of                                                   BCMOLT_EPON_PATH_1G_DS_CFG_ID__NUM_OF
+#define bcmolt_epon_path_1g_ds_stat_id_bytes                                                    BCMOLT_EPON_PATH_1G_DS_STAT_ID_BYTES
+#define bcmolt_epon_path_1g_ds_stat_id_frames                                                   BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES
+#define bcmolt_epon_path_1g_ds_stat_id_frames_64                                                BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_64
+#define bcmolt_epon_path_1g_ds_stat_id_frames_65_127                                            BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_65_127
+#define bcmolt_epon_path_1g_ds_stat_id_frames_128_255                                           BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_128_255
+#define bcmolt_epon_path_1g_ds_stat_id_frames_256_511                                           BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_256_511
+#define bcmolt_epon_path_1g_ds_stat_id_frames_512_1023                                          BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_512_1023
+#define bcmolt_epon_path_1g_ds_stat_id_frames_1024_1518                                         BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_1024_1518
+#define bcmolt_epon_path_1g_ds_stat_id_frames_1519_2047                                         BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_1519_2047
+#define bcmolt_epon_path_1g_ds_stat_id_frames_2048_4095                                         BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_2048_4095
+#define bcmolt_epon_path_1g_ds_stat_id_frames_4096_9216                                         BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_4096_9216
+#define bcmolt_epon_path_1g_ds_stat_id_frames_9217_16383                                        BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_9217_16383
+#define bcmolt_epon_path_1g_ds_stat_id_broadcast_frames                                         BCMOLT_EPON_PATH_1G_DS_STAT_ID_BROADCAST_FRAMES
+#define bcmolt_epon_path_1g_ds_stat_id_data_bytes                                               BCMOLT_EPON_PATH_1G_DS_STAT_ID_DATA_BYTES
+#define bcmolt_epon_path_1g_ds_stat_id_multicast_frames                                         BCMOLT_EPON_PATH_1G_DS_STAT_ID_MULTICAST_FRAMES
+#define bcmolt_epon_path_1g_ds_stat_id_unicast_frames                                           BCMOLT_EPON_PATH_1G_DS_STAT_ID_UNICAST_FRAMES
+#define bcmolt_epon_path_1g_ds_stat_id_oam_bytes                                                BCMOLT_EPON_PATH_1G_DS_STAT_ID_OAM_BYTES
+#define bcmolt_epon_path_1g_ds_stat_id_oam_frames                                               BCMOLT_EPON_PATH_1G_DS_STAT_ID_OAM_FRAMES
+#define bcmolt_epon_path_1g_ds_stat_id_gate_frames                                              BCMOLT_EPON_PATH_1G_DS_STAT_ID_GATE_FRAMES
+#define bcmolt_epon_path_1g_ds_stat_id_mpcp_frames                                              BCMOLT_EPON_PATH_1G_DS_STAT_ID_MPCP_FRAMES
+#define bcmolt_epon_path_1g_ds_stat_id_abort_frames                                             BCMOLT_EPON_PATH_1G_DS_STAT_ID_ABORT_FRAMES
+#define bcmolt_epon_path_1g_ds_stat_id__num_of                                                  BCMOLT_EPON_PATH_1G_DS_STAT_ID__NUM_OF
+#define bcmolt_epon_path_1g_ds_stat_cfg_id_cfg                                                  BCMOLT_EPON_PATH_1G_DS_STAT_CFG_ID_CFG
+#define bcmolt_epon_path_1g_ds_stat_cfg_id__num_of                                              BCMOLT_EPON_PATH_1G_DS_STAT_CFG_ID__NUM_OF
+#define bcmolt_epon_path_1g_ds_stat_alarm_cleared_id_stat                                       BCMOLT_EPON_PATH_1G_DS_STAT_ALARM_CLEARED_ID_STAT
+#define bcmolt_epon_path_1g_ds_stat_alarm_cleared_id__num_of                                    BCMOLT_EPON_PATH_1G_DS_STAT_ALARM_CLEARED_ID__NUM_OF
+#define bcmolt_epon_path_1g_ds_stat_alarm_raised_id_stat                                        BCMOLT_EPON_PATH_1G_DS_STAT_ALARM_RAISED_ID_STAT
+#define bcmolt_epon_path_1g_ds_stat_alarm_raised_id__num_of                                     BCMOLT_EPON_PATH_1G_DS_STAT_ALARM_RAISED_ID__NUM_OF
+#define bcmolt_epon_path_1g_ds_auto_cfg_id_stat_alarm_cleared                                   BCMOLT_EPON_PATH_1G_DS_AUTO_CFG_ID_STAT_ALARM_CLEARED
+#define bcmolt_epon_path_1g_ds_auto_cfg_id_stat_alarm_raised                                    BCMOLT_EPON_PATH_1G_DS_AUTO_CFG_ID_STAT_ALARM_RAISED
+#define bcmolt_epon_path_1g_ds_auto_cfg_id__num_of                                              BCMOLT_EPON_PATH_1G_DS_AUTO_CFG_ID__NUM_OF
+#define bcmolt_epon_path_1g_us_key_id_epon_ni                                                   BCMOLT_EPON_PATH_1G_US_KEY_ID_EPON_NI
+#define bcmolt_epon_path_1g_us_key_id__num_of                                                   BCMOLT_EPON_PATH_1G_US_KEY_ID__NUM_OF
+#define bcmolt_epon_path_1g_us_cfg_id_default_fec_state                                         BCMOLT_EPON_PATH_1G_US_CFG_ID_DEFAULT_FEC_STATE
+#define bcmolt_epon_path_1g_us_cfg_id_sync_time_tq                                              BCMOLT_EPON_PATH_1G_US_CFG_ID_SYNC_TIME_TQ
+#define bcmolt_epon_path_1g_us_cfg_id_prbs_checker                                              BCMOLT_EPON_PATH_1G_US_CFG_ID_PRBS_CHECKER
+#define bcmolt_epon_path_1g_us_cfg_id_prbs_status                                               BCMOLT_EPON_PATH_1G_US_CFG_ID_PRBS_STATUS
+#define bcmolt_epon_path_1g_us_cfg_id__num_of                                                   BCMOLT_EPON_PATH_1G_US_CFG_ID__NUM_OF
+#define bcmolt_epon_path_1g_us_stat_id_bytes                                                    BCMOLT_EPON_PATH_1G_US_STAT_ID_BYTES
+#define bcmolt_epon_path_1g_us_stat_id_frames                                                   BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES
+#define bcmolt_epon_path_1g_us_stat_id_frames_64                                                BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_64
+#define bcmolt_epon_path_1g_us_stat_id_frames_65_127                                            BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_65_127
+#define bcmolt_epon_path_1g_us_stat_id_frames_128_255                                           BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_128_255
+#define bcmolt_epon_path_1g_us_stat_id_frames_256_511                                           BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_256_511
+#define bcmolt_epon_path_1g_us_stat_id_frames_512_1023                                          BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_512_1023
+#define bcmolt_epon_path_1g_us_stat_id_frames_1024_1518                                         BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_1024_1518
+#define bcmolt_epon_path_1g_us_stat_id_frames_1519_2047                                         BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_1519_2047
+#define bcmolt_epon_path_1g_us_stat_id_frames_2048_4095                                         BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_2048_4095
+#define bcmolt_epon_path_1g_us_stat_id_frames_4096_9216                                         BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_4096_9216
+#define bcmolt_epon_path_1g_us_stat_id_frames_9217_16383                                        BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_9217_16383
+#define bcmolt_epon_path_1g_us_stat_id_broadcast_frames                                         BCMOLT_EPON_PATH_1G_US_STAT_ID_BROADCAST_FRAMES
+#define bcmolt_epon_path_1g_us_stat_id_data_bytes                                               BCMOLT_EPON_PATH_1G_US_STAT_ID_DATA_BYTES
+#define bcmolt_epon_path_1g_us_stat_id_multicast_frames                                         BCMOLT_EPON_PATH_1G_US_STAT_ID_MULTICAST_FRAMES
+#define bcmolt_epon_path_1g_us_stat_id_unicast_frames                                           BCMOLT_EPON_PATH_1G_US_STAT_ID_UNICAST_FRAMES
+#define bcmolt_epon_path_1g_us_stat_id_mpcp_frames                                              BCMOLT_EPON_PATH_1G_US_STAT_ID_MPCP_FRAMES
+#define bcmolt_epon_path_1g_us_stat_id_oam_bytes                                                BCMOLT_EPON_PATH_1G_US_STAT_ID_OAM_BYTES
+#define bcmolt_epon_path_1g_us_stat_id_oam_frames                                               BCMOLT_EPON_PATH_1G_US_STAT_ID_OAM_FRAMES
+#define bcmolt_epon_path_1g_us_stat_id_report_frames                                            BCMOLT_EPON_PATH_1G_US_STAT_ID_REPORT_FRAMES
+#define bcmolt_epon_path_1g_us_stat_id_abort_frames                                             BCMOLT_EPON_PATH_1G_US_STAT_ID_ABORT_FRAMES
+#define bcmolt_epon_path_1g_us_stat_id_fcs_error                                                BCMOLT_EPON_PATH_1G_US_STAT_ID_FCS_ERROR
+#define bcmolt_epon_path_1g_us_stat_id_crc_8_error                                              BCMOLT_EPON_PATH_1G_US_STAT_ID_CRC_8_ERROR
+#define bcmolt_epon_path_1g_us_stat_id_out_of_slot                                              BCMOLT_EPON_PATH_1G_US_STAT_ID_OUT_OF_SLOT
+#define bcmolt_epon_path_1g_us_stat_id_oversize_error                                           BCMOLT_EPON_PATH_1G_US_STAT_ID_OVERSIZE_ERROR
+#define bcmolt_epon_path_1g_us_stat_id_runt_error                                               BCMOLT_EPON_PATH_1G_US_STAT_ID_RUNT_ERROR
+#define bcmolt_epon_path_1g_us_stat_id__num_of                                                  BCMOLT_EPON_PATH_1G_US_STAT_ID__NUM_OF
+#define bcmolt_epon_path_1g_us_stat_cfg_id_cfg                                                  BCMOLT_EPON_PATH_1G_US_STAT_CFG_ID_CFG
+#define bcmolt_epon_path_1g_us_stat_cfg_id__num_of                                              BCMOLT_EPON_PATH_1G_US_STAT_CFG_ID__NUM_OF
+#define bcmolt_epon_path_1g_us_stat_alarm_cleared_id_stat                                       BCMOLT_EPON_PATH_1G_US_STAT_ALARM_CLEARED_ID_STAT
+#define bcmolt_epon_path_1g_us_stat_alarm_cleared_id__num_of                                    BCMOLT_EPON_PATH_1G_US_STAT_ALARM_CLEARED_ID__NUM_OF
+#define bcmolt_epon_path_1g_us_stat_alarm_raised_id_stat                                        BCMOLT_EPON_PATH_1G_US_STAT_ALARM_RAISED_ID_STAT
+#define bcmolt_epon_path_1g_us_stat_alarm_raised_id__num_of                                     BCMOLT_EPON_PATH_1G_US_STAT_ALARM_RAISED_ID__NUM_OF
+#define bcmolt_epon_path_1g_us_auto_cfg_id_stat_alarm_cleared                                   BCMOLT_EPON_PATH_1G_US_AUTO_CFG_ID_STAT_ALARM_CLEARED
+#define bcmolt_epon_path_1g_us_auto_cfg_id_stat_alarm_raised                                    BCMOLT_EPON_PATH_1G_US_AUTO_CFG_ID_STAT_ALARM_RAISED
+#define bcmolt_epon_path_1g_us_auto_cfg_id__num_of                                              BCMOLT_EPON_PATH_1G_US_AUTO_CFG_ID__NUM_OF
+#define bcmolt_epon_rp_key_id_epon_ni                                                           BCMOLT_EPON_RP_KEY_ID_EPON_NI
+#define bcmolt_epon_rp_key_id_link_rate                                                         BCMOLT_EPON_RP_KEY_ID_LINK_RATE
+#define bcmolt_epon_rp_key_id__num_of                                                           BCMOLT_EPON_RP_KEY_ID__NUM_OF
+#define bcmolt_epon_rp_cfg_id_base_llid                                                         BCMOLT_EPON_RP_CFG_ID_BASE_LLID
+#define bcmolt_epon_rp_cfg_id_mpcp_disc_en                                                      BCMOLT_EPON_RP_CFG_ID_MPCP_DISC_EN
+#define bcmolt_epon_rp_cfg_id_mpcp_disc_gnt_len_tq                                              BCMOLT_EPON_RP_CFG_ID_MPCP_DISC_GNT_LEN_TQ
+#define bcmolt_epon_rp_cfg_id_mpcp_report_timeout                                               BCMOLT_EPON_RP_CFG_ID_MPCP_REPORT_TIMEOUT
+#define bcmolt_epon_rp_cfg_id_max_mpcp_reg_per_disc_window                                      BCMOLT_EPON_RP_CFG_ID_MAX_MPCP_REG_PER_DISC_WINDOW
+#define bcmolt_epon_rp_cfg_id_max_links                                                         BCMOLT_EPON_RP_CFG_ID_MAX_LINKS
+#define bcmolt_epon_rp_cfg_id_default_upstream_bandwidth                                        BCMOLT_EPON_RP_CFG_ID_DEFAULT_UPSTREAM_BANDWIDTH
+#define bcmolt_epon_rp_cfg_id_rate_of_refraction                                                BCMOLT_EPON_RP_CFG_ID_RATE_OF_REFRACTION
+#define bcmolt_epon_rp_cfg_id__num_of                                                           BCMOLT_EPON_RP_CFG_ID__NUM_OF
+#define bcmolt_gpio_key_id_reserved                                                             BCMOLT_GPIO_KEY_ID_RESERVED
+#define bcmolt_gpio_key_id_gpio_id                                                              BCMOLT_GPIO_KEY_ID_GPIO_ID
+#define bcmolt_gpio_key_id__num_of                                                              BCMOLT_GPIO_KEY_ID__NUM_OF
+#define bcmolt_gpio_cfg_id_direction                                                            BCMOLT_GPIO_CFG_ID_DIRECTION
+#define bcmolt_gpio_cfg_id_value                                                                BCMOLT_GPIO_CFG_ID_VALUE
+#define bcmolt_gpio_cfg_id__num_of                                                              BCMOLT_GPIO_CFG_ID__NUM_OF
+#define bcmolt_gpon_alloc_key_id_pon_ni                                                         BCMOLT_GPON_ALLOC_KEY_ID_PON_NI
+#define bcmolt_gpon_alloc_key_id_alloc_id                                                       BCMOLT_GPON_ALLOC_KEY_ID_ALLOC_ID
+#define bcmolt_gpon_alloc_key_id__num_of                                                        BCMOLT_GPON_ALLOC_KEY_ID__NUM_OF
+#define bcmolt_gpon_alloc_cfg_id_state                                                          BCMOLT_GPON_ALLOC_CFG_ID_STATE
+#define bcmolt_gpon_alloc_cfg_id_sla                                                            BCMOLT_GPON_ALLOC_CFG_ID_SLA
+#define bcmolt_gpon_alloc_cfg_id_onu_id                                                         BCMOLT_GPON_ALLOC_CFG_ID_ONU_ID
+#define bcmolt_gpon_alloc_cfg_id_collect_stats                                                  BCMOLT_GPON_ALLOC_CFG_ID_COLLECT_STATS
+#define bcmolt_gpon_alloc_cfg_id__num_of                                                        BCMOLT_GPON_ALLOC_CFG_ID__NUM_OF
+#define bcmolt_gpon_alloc_stat_id_rx_bytes                                                      BCMOLT_GPON_ALLOC_STAT_ID_RX_BYTES
+#define bcmolt_gpon_alloc_stat_id__num_of                                                       BCMOLT_GPON_ALLOC_STAT_ID__NUM_OF
+#define bcmolt_gpon_alloc_stat_cfg_id_cfg                                                       BCMOLT_GPON_ALLOC_STAT_CFG_ID_CFG
+#define bcmolt_gpon_alloc_stat_cfg_id__num_of                                                   BCMOLT_GPON_ALLOC_STAT_CFG_ID__NUM_OF
+#define bcmolt_gpon_alloc_configuration_completed_id_status                                     BCMOLT_GPON_ALLOC_CONFIGURATION_COMPLETED_ID_STATUS
+#define bcmolt_gpon_alloc_configuration_completed_id_new_state                                  BCMOLT_GPON_ALLOC_CONFIGURATION_COMPLETED_ID_NEW_STATE
+#define bcmolt_gpon_alloc_configuration_completed_id__num_of                                    BCMOLT_GPON_ALLOC_CONFIGURATION_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_alloc_get_alloc_stats_completed_id_status                                   BCMOLT_GPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_STATUS
+#define bcmolt_gpon_alloc_get_alloc_stats_completed_id_average_nsr_used                         BCMOLT_GPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_NSR_USED
+#define bcmolt_gpon_alloc_get_alloc_stats_completed_id_average_nsr_allocated                    BCMOLT_GPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_NSR_ALLOCATED
+#define bcmolt_gpon_alloc_get_alloc_stats_completed_id_average_sr_report                        BCMOLT_GPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_SR_REPORT
+#define bcmolt_gpon_alloc_get_alloc_stats_completed_id__num_of                                  BCMOLT_GPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_alloc_stat_alarm_cleared_id_stat                                            BCMOLT_GPON_ALLOC_STAT_ALARM_CLEARED_ID_STAT
+#define bcmolt_gpon_alloc_stat_alarm_cleared_id__num_of                                         BCMOLT_GPON_ALLOC_STAT_ALARM_CLEARED_ID__NUM_OF
+#define bcmolt_gpon_alloc_stat_alarm_raised_id_stat                                             BCMOLT_GPON_ALLOC_STAT_ALARM_RAISED_ID_STAT
+#define bcmolt_gpon_alloc_stat_alarm_raised_id__num_of                                          BCMOLT_GPON_ALLOC_STAT_ALARM_RAISED_ID__NUM_OF
+#define bcmolt_gpon_alloc_auto_cfg_id_configuration_completed                                   BCMOLT_GPON_ALLOC_AUTO_CFG_ID_CONFIGURATION_COMPLETED
+#define bcmolt_gpon_alloc_auto_cfg_id_get_alloc_stats_completed                                 BCMOLT_GPON_ALLOC_AUTO_CFG_ID_GET_ALLOC_STATS_COMPLETED
+#define bcmolt_gpon_alloc_auto_cfg_id_stat_alarm_cleared                                        BCMOLT_GPON_ALLOC_AUTO_CFG_ID_STAT_ALARM_CLEARED
+#define bcmolt_gpon_alloc_auto_cfg_id_stat_alarm_raised                                         BCMOLT_GPON_ALLOC_AUTO_CFG_ID_STAT_ALARM_RAISED
+#define bcmolt_gpon_alloc_auto_cfg_id__num_of                                                   BCMOLT_GPON_ALLOC_AUTO_CFG_ID__NUM_OF
+#define bcmolt_gpon_alloc_get_stats_id_num_of_cycles                                            BCMOLT_GPON_ALLOC_GET_STATS_ID_NUM_OF_CYCLES
+#define bcmolt_gpon_alloc_get_stats_id__num_of                                                  BCMOLT_GPON_ALLOC_GET_STATS_ID__NUM_OF
+#define bcmolt_gpon_alloc_set_state_id_state                                                    BCMOLT_GPON_ALLOC_SET_STATE_ID_STATE
+#define bcmolt_gpon_alloc_set_state_id__num_of                                                  BCMOLT_GPON_ALLOC_SET_STATE_ID__NUM_OF
+#define bcmolt_gpon_gem_port_key_id_pon_ni                                                      BCMOLT_GPON_GEM_PORT_KEY_ID_PON_NI
+#define bcmolt_gpon_gem_port_key_id_gem_port_id                                                 BCMOLT_GPON_GEM_PORT_KEY_ID_GEM_PORT_ID
+#define bcmolt_gpon_gem_port_key_id__num_of                                                     BCMOLT_GPON_GEM_PORT_KEY_ID__NUM_OF
+#define bcmolt_gpon_gem_port_cfg_id_configuration                                               BCMOLT_GPON_GEM_PORT_CFG_ID_CONFIGURATION
+#define bcmolt_gpon_gem_port_cfg_id_onu_id                                                      BCMOLT_GPON_GEM_PORT_CFG_ID_ONU_ID
+#define bcmolt_gpon_gem_port_cfg_id_gem_port_state                                              BCMOLT_GPON_GEM_PORT_CFG_ID_GEM_PORT_STATE
+#define bcmolt_gpon_gem_port_cfg_id_downstream_encryption_mode                                  BCMOLT_GPON_GEM_PORT_CFG_ID_DOWNSTREAM_ENCRYPTION_MODE
+#define bcmolt_gpon_gem_port_cfg_id_upstream_destination_queue                                  BCMOLT_GPON_GEM_PORT_CFG_ID_UPSTREAM_DESTINATION_QUEUE
+#define bcmolt_gpon_gem_port_cfg_id_control                                                     BCMOLT_GPON_GEM_PORT_CFG_ID_CONTROL
+#define bcmolt_gpon_gem_port_cfg_id_debug_flow_config                                           BCMOLT_GPON_GEM_PORT_CFG_ID_DEBUG_FLOW_CONFIG
+#define bcmolt_gpon_gem_port_cfg_id_mac_table_entry_limit                                       BCMOLT_GPON_GEM_PORT_CFG_ID_MAC_TABLE_ENTRY_LIMIT
+#define bcmolt_gpon_gem_port_cfg_id__num_of                                                     BCMOLT_GPON_GEM_PORT_CFG_ID__NUM_OF
+#define bcmolt_gpon_gem_port_stat_id_rx_packets                                                 BCMOLT_GPON_GEM_PORT_STAT_ID_RX_PACKETS
+#define bcmolt_gpon_gem_port_stat_id_rx_bytes                                                   BCMOLT_GPON_GEM_PORT_STAT_ID_RX_BYTES
+#define bcmolt_gpon_gem_port_stat_id_tx_packets                                                 BCMOLT_GPON_GEM_PORT_STAT_ID_TX_PACKETS
+#define bcmolt_gpon_gem_port_stat_id_tx_bytes                                                   BCMOLT_GPON_GEM_PORT_STAT_ID_TX_BYTES
+#define bcmolt_gpon_gem_port_stat_id__num_of                                                    BCMOLT_GPON_GEM_PORT_STAT_ID__NUM_OF
+#define bcmolt_gpon_gem_port_stat_cfg_id_cfg                                                    BCMOLT_GPON_GEM_PORT_STAT_CFG_ID_CFG
+#define bcmolt_gpon_gem_port_stat_cfg_id__num_of                                                BCMOLT_GPON_GEM_PORT_STAT_CFG_ID__NUM_OF
+#define bcmolt_gpon_gem_port_configuration_completed_id_status                                  BCMOLT_GPON_GEM_PORT_CONFIGURATION_COMPLETED_ID_STATUS
+#define bcmolt_gpon_gem_port_configuration_completed_id_new_state                               BCMOLT_GPON_GEM_PORT_CONFIGURATION_COMPLETED_ID_NEW_STATE
+#define bcmolt_gpon_gem_port_configuration_completed_id__num_of                                 BCMOLT_GPON_GEM_PORT_CONFIGURATION_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_gem_port_stat_alarm_cleared_id_stat                                         BCMOLT_GPON_GEM_PORT_STAT_ALARM_CLEARED_ID_STAT
+#define bcmolt_gpon_gem_port_stat_alarm_cleared_id__num_of                                      BCMOLT_GPON_GEM_PORT_STAT_ALARM_CLEARED_ID__NUM_OF
+#define bcmolt_gpon_gem_port_stat_alarm_raised_id_stat                                          BCMOLT_GPON_GEM_PORT_STAT_ALARM_RAISED_ID_STAT
+#define bcmolt_gpon_gem_port_stat_alarm_raised_id__num_of                                       BCMOLT_GPON_GEM_PORT_STAT_ALARM_RAISED_ID__NUM_OF
+#define bcmolt_gpon_gem_port_auto_cfg_id_configuration_completed                                BCMOLT_GPON_GEM_PORT_AUTO_CFG_ID_CONFIGURATION_COMPLETED
+#define bcmolt_gpon_gem_port_auto_cfg_id_stat_alarm_cleared                                     BCMOLT_GPON_GEM_PORT_AUTO_CFG_ID_STAT_ALARM_CLEARED
+#define bcmolt_gpon_gem_port_auto_cfg_id_stat_alarm_raised                                      BCMOLT_GPON_GEM_PORT_AUTO_CFG_ID_STAT_ALARM_RAISED
+#define bcmolt_gpon_gem_port_auto_cfg_id__num_of                                                BCMOLT_GPON_GEM_PORT_AUTO_CFG_ID__NUM_OF
+#define bcmolt_gpon_gem_port_set_state_id_state                                                 BCMOLT_GPON_GEM_PORT_SET_STATE_ID_STATE
+#define bcmolt_gpon_gem_port_set_state_id__num_of                                               BCMOLT_GPON_GEM_PORT_SET_STATE_ID__NUM_OF
+#define bcmolt_gpon_iwf_key_id_pon_ni                                                           BCMOLT_GPON_IWF_KEY_ID_PON_NI
+#define bcmolt_gpon_iwf_key_id__num_of                                                          BCMOLT_GPON_IWF_KEY_ID__NUM_OF
+#define bcmolt_gpon_iwf_cfg_id_iwf_mode                                                         BCMOLT_GPON_IWF_CFG_ID_IWF_MODE
+#define bcmolt_gpon_iwf_cfg_id_us_tpid_per_flow                                                 BCMOLT_GPON_IWF_CFG_ID_US_TPID_PER_FLOW
+#define bcmolt_gpon_iwf_cfg_id_us_otag_direct_tpid                                              BCMOLT_GPON_IWF_CFG_ID_US_OTAG_DIRECT_TPID
+#define bcmolt_gpon_iwf_cfg_id_us_otag_direct_pbit                                              BCMOLT_GPON_IWF_CFG_ID_US_OTAG_DIRECT_PBIT
+#define bcmolt_gpon_iwf_cfg_id_ds_tpid                                                          BCMOLT_GPON_IWF_CFG_ID_DS_TPID
+#define bcmolt_gpon_iwf_cfg_id_mac_table_configuration                                          BCMOLT_GPON_IWF_CFG_ID_MAC_TABLE_CONFIGURATION
+#define bcmolt_gpon_iwf_cfg_id_debug_flow_configuration                                         BCMOLT_GPON_IWF_CFG_ID_DEBUG_FLOW_CONFIGURATION
+#define bcmolt_gpon_iwf_cfg_id_mac_table_count                                                  BCMOLT_GPON_IWF_CFG_ID_MAC_TABLE_COUNT
+#define bcmolt_gpon_iwf_cfg_id_forbidden_vlan_flow_gem_range_start                              BCMOLT_GPON_IWF_CFG_ID_FORBIDDEN_VLAN_FLOW_GEM_RANGE_START
+#define bcmolt_gpon_iwf_cfg_id__num_of                                                          BCMOLT_GPON_IWF_CFG_ID__NUM_OF
+#define bcmolt_gpon_iwf_stat_id_ds_hit_event                                                    BCMOLT_GPON_IWF_STAT_ID_DS_HIT_EVENT
+#define bcmolt_gpon_iwf_stat_id_ds_miss_event                                                   BCMOLT_GPON_IWF_STAT_ID_DS_MISS_EVENT
+#define bcmolt_gpon_iwf_stat_id_ds_drop_due_to_miss_event                                       BCMOLT_GPON_IWF_STAT_ID_DS_DROP_DUE_TO_MISS_EVENT
+#define bcmolt_gpon_iwf_stat_id_ds_drop_due_to_hit_event                                        BCMOLT_GPON_IWF_STAT_ID_DS_DROP_DUE_TO_HIT_EVENT
+#define bcmolt_gpon_iwf_stat_id_ds_drop_to_disabled_gem                                         BCMOLT_GPON_IWF_STAT_ID_DS_DROP_TO_DISABLED_GEM
+#define bcmolt_gpon_iwf_stat_id_new_mac_discovered                                              BCMOLT_GPON_IWF_STAT_ID_NEW_MAC_DISCOVERED
+#define bcmolt_gpon_iwf_stat_id_move_event                                                      BCMOLT_GPON_IWF_STAT_ID_MOVE_EVENT
+#define bcmolt_gpon_iwf_stat_id_new_mac_drop_due_to_fifo_full                                   BCMOLT_GPON_IWF_STAT_ID_NEW_MAC_DROP_DUE_TO_FIFO_FULL
+#define bcmolt_gpon_iwf_stat_id__num_of                                                         BCMOLT_GPON_IWF_STAT_ID__NUM_OF
+#define bcmolt_gpon_iwf_stat_cfg_id_cfg                                                         BCMOLT_GPON_IWF_STAT_CFG_ID_CFG
+#define bcmolt_gpon_iwf_stat_cfg_id__num_of                                                     BCMOLT_GPON_IWF_STAT_CFG_ID__NUM_OF
+#define bcmolt_gpon_iwf_flush_mac_table_completed_id__num_of                                    BCMOLT_GPON_IWF_FLUSH_MAC_TABLE_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_iwf_scan_mac_table_completed_id_mac_address                                 BCMOLT_GPON_IWF_SCAN_MAC_TABLE_COMPLETED_ID_MAC_ADDRESS
+#define bcmolt_gpon_iwf_scan_mac_table_completed_id_entries                                     BCMOLT_GPON_IWF_SCAN_MAC_TABLE_COMPLETED_ID_ENTRIES
+#define bcmolt_gpon_iwf_scan_mac_table_completed_id__num_of                                     BCMOLT_GPON_IWF_SCAN_MAC_TABLE_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_iwf_stat_alarm_cleared_id_stat                                              BCMOLT_GPON_IWF_STAT_ALARM_CLEARED_ID_STAT
+#define bcmolt_gpon_iwf_stat_alarm_cleared_id__num_of                                           BCMOLT_GPON_IWF_STAT_ALARM_CLEARED_ID__NUM_OF
+#define bcmolt_gpon_iwf_stat_alarm_raised_id_stat                                               BCMOLT_GPON_IWF_STAT_ALARM_RAISED_ID_STAT
+#define bcmolt_gpon_iwf_stat_alarm_raised_id__num_of                                            BCMOLT_GPON_IWF_STAT_ALARM_RAISED_ID__NUM_OF
+#define bcmolt_gpon_iwf_auto_cfg_id_flush_mac_table_completed                                   BCMOLT_GPON_IWF_AUTO_CFG_ID_FLUSH_MAC_TABLE_COMPLETED
+#define bcmolt_gpon_iwf_auto_cfg_id_scan_mac_table_completed                                    BCMOLT_GPON_IWF_AUTO_CFG_ID_SCAN_MAC_TABLE_COMPLETED
+#define bcmolt_gpon_iwf_auto_cfg_id_stat_alarm_cleared                                          BCMOLT_GPON_IWF_AUTO_CFG_ID_STAT_ALARM_CLEARED
+#define bcmolt_gpon_iwf_auto_cfg_id_stat_alarm_raised                                           BCMOLT_GPON_IWF_AUTO_CFG_ID_STAT_ALARM_RAISED
+#define bcmolt_gpon_iwf_auto_cfg_id__num_of                                                     BCMOLT_GPON_IWF_AUTO_CFG_ID__NUM_OF
+#define bcmolt_gpon_iwf_flush_mac_table_id_control                                              BCMOLT_GPON_IWF_FLUSH_MAC_TABLE_ID_CONTROL
+#define bcmolt_gpon_iwf_flush_mac_table_id_vid                                                  BCMOLT_GPON_IWF_FLUSH_MAC_TABLE_ID_VID
+#define bcmolt_gpon_iwf_flush_mac_table_id_flow_id                                              BCMOLT_GPON_IWF_FLUSH_MAC_TABLE_ID_FLOW_ID
+#define bcmolt_gpon_iwf_flush_mac_table_id__num_of                                              BCMOLT_GPON_IWF_FLUSH_MAC_TABLE_ID__NUM_OF
+#define bcmolt_gpon_iwf_scan_mac_table_id_mac_address                                           BCMOLT_GPON_IWF_SCAN_MAC_TABLE_ID_MAC_ADDRESS
+#define bcmolt_gpon_iwf_scan_mac_table_id__num_of                                               BCMOLT_GPON_IWF_SCAN_MAC_TABLE_ID__NUM_OF
+#define bcmolt_gpon_iwf_ds_egress_flow_key_id_pon_ni                                            BCMOLT_GPON_IWF_DS_EGRESS_FLOW_KEY_ID_PON_NI
+#define bcmolt_gpon_iwf_ds_egress_flow_key_id_flow_id                                           BCMOLT_GPON_IWF_DS_EGRESS_FLOW_KEY_ID_FLOW_ID
+#define bcmolt_gpon_iwf_ds_egress_flow_key_id__num_of                                           BCMOLT_GPON_IWF_DS_EGRESS_FLOW_KEY_ID__NUM_OF
+#define bcmolt_gpon_iwf_ds_egress_flow_cfg_id_gem_port                                          BCMOLT_GPON_IWF_DS_EGRESS_FLOW_CFG_ID_GEM_PORT
+#define bcmolt_gpon_iwf_ds_egress_flow_cfg_id_pbit_control                                      BCMOLT_GPON_IWF_DS_EGRESS_FLOW_CFG_ID_PBIT_CONTROL
+#define bcmolt_gpon_iwf_ds_egress_flow_cfg_id__num_of                                           BCMOLT_GPON_IWF_DS_EGRESS_FLOW_CFG_ID__NUM_OF
+#define bcmolt_gpon_iwf_ds_ingress_flow_key_id_pon_ni                                           BCMOLT_GPON_IWF_DS_INGRESS_FLOW_KEY_ID_PON_NI
+#define bcmolt_gpon_iwf_ds_ingress_flow_key_id_vlan_id                                          BCMOLT_GPON_IWF_DS_INGRESS_FLOW_KEY_ID_VLAN_ID
+#define bcmolt_gpon_iwf_ds_ingress_flow_key_id__num_of                                          BCMOLT_GPON_IWF_DS_INGRESS_FLOW_KEY_ID__NUM_OF
+#define bcmolt_gpon_iwf_ds_ingress_flow_cfg_id_mapping_method                                   BCMOLT_GPON_IWF_DS_INGRESS_FLOW_CFG_ID_MAPPING_METHOD
+#define bcmolt_gpon_iwf_ds_ingress_flow_cfg_id_mapping_tag                                      BCMOLT_GPON_IWF_DS_INGRESS_FLOW_CFG_ID_MAPPING_TAG
+#define bcmolt_gpon_iwf_ds_ingress_flow_cfg_id_vlan_action                                      BCMOLT_GPON_IWF_DS_INGRESS_FLOW_CFG_ID_VLAN_ACTION
+#define bcmolt_gpon_iwf_ds_ingress_flow_cfg_id__num_of                                          BCMOLT_GPON_IWF_DS_INGRESS_FLOW_CFG_ID__NUM_OF
+#define bcmolt_gpon_iwf_mac_table_key_id_pon_ni                                                 BCMOLT_GPON_IWF_MAC_TABLE_KEY_ID_PON_NI
+#define bcmolt_gpon_iwf_mac_table_key_id_mac_address                                            BCMOLT_GPON_IWF_MAC_TABLE_KEY_ID_MAC_ADDRESS
+#define bcmolt_gpon_iwf_mac_table_key_id_vlan                                                   BCMOLT_GPON_IWF_MAC_TABLE_KEY_ID_VLAN
+#define bcmolt_gpon_iwf_mac_table_key_id__num_of                                                BCMOLT_GPON_IWF_MAC_TABLE_KEY_ID__NUM_OF
+#define bcmolt_gpon_iwf_mac_table_cfg_id_flow_id                                                BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_FLOW_ID
+#define bcmolt_gpon_iwf_mac_table_cfg_id_stat                                                   BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_STAT
+#define bcmolt_gpon_iwf_mac_table_cfg_id_gem_port_id                                            BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_GEM_PORT_ID
+#define bcmolt_gpon_iwf_mac_table_cfg_id_onu_id                                                 BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_ONU_ID
+#define bcmolt_gpon_iwf_mac_table_cfg_id__num_of                                                BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID__NUM_OF
+#define bcmolt_gpon_iwf_mac_table_mac_aged_id__num_of                                           BCMOLT_GPON_IWF_MAC_TABLE_MAC_AGED_ID__NUM_OF
+#define bcmolt_gpon_iwf_mac_table_mac_dropped_id_flow_id                                        BCMOLT_GPON_IWF_MAC_TABLE_MAC_DROPPED_ID_FLOW_ID
+#define bcmolt_gpon_iwf_mac_table_mac_dropped_id__num_of                                        BCMOLT_GPON_IWF_MAC_TABLE_MAC_DROPPED_ID__NUM_OF
+#define bcmolt_gpon_iwf_mac_table_mac_move_id_old_flow_id                                       BCMOLT_GPON_IWF_MAC_TABLE_MAC_MOVE_ID_OLD_FLOW_ID
+#define bcmolt_gpon_iwf_mac_table_mac_move_id_new_flow_id                                       BCMOLT_GPON_IWF_MAC_TABLE_MAC_MOVE_ID_NEW_FLOW_ID
+#define bcmolt_gpon_iwf_mac_table_mac_move_id__num_of                                           BCMOLT_GPON_IWF_MAC_TABLE_MAC_MOVE_ID__NUM_OF
+#define bcmolt_gpon_iwf_mac_table_new_mac_id_flow_id                                            BCMOLT_GPON_IWF_MAC_TABLE_NEW_MAC_ID_FLOW_ID
+#define bcmolt_gpon_iwf_mac_table_new_mac_id__num_of                                            BCMOLT_GPON_IWF_MAC_TABLE_NEW_MAC_ID__NUM_OF
+#define bcmolt_gpon_iwf_mac_table_auto_cfg_id_mac_aged                                          BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID_MAC_AGED
+#define bcmolt_gpon_iwf_mac_table_auto_cfg_id_mac_dropped                                       BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID_MAC_DROPPED
+#define bcmolt_gpon_iwf_mac_table_auto_cfg_id_mac_move                                          BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID_MAC_MOVE
+#define bcmolt_gpon_iwf_mac_table_auto_cfg_id_new_mac                                           BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID_NEW_MAC
+#define bcmolt_gpon_iwf_mac_table_auto_cfg_id__num_of                                           BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID__NUM_OF
+#define bcmolt_gpon_iwf_us_flow_key_id_pon_ni                                                   BCMOLT_GPON_IWF_US_FLOW_KEY_ID_PON_NI
+#define bcmolt_gpon_iwf_us_flow_key_id_gem_port_id                                              BCMOLT_GPON_IWF_US_FLOW_KEY_ID_GEM_PORT_ID
+#define bcmolt_gpon_iwf_us_flow_key_id__num_of                                                  BCMOLT_GPON_IWF_US_FLOW_KEY_ID__NUM_OF
+#define bcmolt_gpon_iwf_us_flow_cfg_id_flow_id                                                  BCMOLT_GPON_IWF_US_FLOW_CFG_ID_FLOW_ID
+#define bcmolt_gpon_iwf_us_flow_cfg_id_mac_learning                                             BCMOLT_GPON_IWF_US_FLOW_CFG_ID_MAC_LEARNING
+#define bcmolt_gpon_iwf_us_flow_cfg_id_vlan_action                                              BCMOLT_GPON_IWF_US_FLOW_CFG_ID_VLAN_ACTION
+#define bcmolt_gpon_iwf_us_flow_cfg_id_vlan_tag                                                 BCMOLT_GPON_IWF_US_FLOW_CFG_ID_VLAN_TAG
+#define bcmolt_gpon_iwf_us_flow_cfg_id_tpid_index                                               BCMOLT_GPON_IWF_US_FLOW_CFG_ID_TPID_INDEX
+#define bcmolt_gpon_iwf_us_flow_cfg_id__num_of                                                  BCMOLT_GPON_IWF_US_FLOW_CFG_ID__NUM_OF
+#define bcmolt_gpon_ni_key_id_pon_ni                                                            BCMOLT_GPON_NI_KEY_ID_PON_NI
+#define bcmolt_gpon_ni_key_id__num_of                                                           BCMOLT_GPON_NI_KEY_ID__NUM_OF
+#define bcmolt_gpon_ni_cfg_id_pon_status                                                        BCMOLT_GPON_NI_CFG_ID_PON_STATUS
+#define bcmolt_gpon_ni_cfg_id_available_bandwidth                                               BCMOLT_GPON_NI_CFG_ID_AVAILABLE_BANDWIDTH
+#define bcmolt_gpon_ni_cfg_id_number_of_active_onus                                             BCMOLT_GPON_NI_CFG_ID_NUMBER_OF_ACTIVE_ONUS
+#define bcmolt_gpon_ni_cfg_id_number_of_active_standby_onus                                     BCMOLT_GPON_NI_CFG_ID_NUMBER_OF_ACTIVE_STANDBY_ONUS
+#define bcmolt_gpon_ni_cfg_id_prbs_status                                                       BCMOLT_GPON_NI_CFG_ID_PRBS_STATUS
+#define bcmolt_gpon_ni_cfg_id_pon_distance                                                      BCMOLT_GPON_NI_CFG_ID_PON_DISTANCE
+#define bcmolt_gpon_ni_cfg_id_ranging_window_size                                               BCMOLT_GPON_NI_CFG_ID_RANGING_WINDOW_SIZE
+#define bcmolt_gpon_ni_cfg_id_preassigned_equalization_delay                                    BCMOLT_GPON_NI_CFG_ID_PREASSIGNED_EQUALIZATION_DELAY
+#define bcmolt_gpon_ni_cfg_id_eqd_cycles_number                                                 BCMOLT_GPON_NI_CFG_ID_EQD_CYCLES_NUMBER
+#define bcmolt_gpon_ni_cfg_id_power_level                                                       BCMOLT_GPON_NI_CFG_ID_POWER_LEVEL
+#define bcmolt_gpon_ni_cfg_id_ds_fec_mode                                                       BCMOLT_GPON_NI_CFG_ID_DS_FEC_MODE
+#define bcmolt_gpon_ni_cfg_id_drift_control                                                     BCMOLT_GPON_NI_CFG_ID_DRIFT_CONTROL
+#define bcmolt_gpon_ni_cfg_id_ds_ber_reporting_interval                                         BCMOLT_GPON_NI_CFG_ID_DS_BER_REPORTING_INTERVAL
+#define bcmolt_gpon_ni_cfg_id_los_alarm_threshold                                               BCMOLT_GPON_NI_CFG_ID_LOS_ALARM_THRESHOLD
+#define bcmolt_gpon_ni_cfg_id_los_initial_value                                                 BCMOLT_GPON_NI_CFG_ID_LOS_INITIAL_VALUE
+#define bcmolt_gpon_ni_cfg_id_onu_alarms_thresholds                                             BCMOLT_GPON_NI_CFG_ID_ONU_ALARMS_THRESHOLDS
+#define bcmolt_gpon_ni_cfg_id_ber_monitor                                                       BCMOLT_GPON_NI_CFG_ID_BER_MONITOR
+#define bcmolt_gpon_ni_cfg_id_ploam_ack_timeout                                                 BCMOLT_GPON_NI_CFG_ID_PLOAM_ACK_TIMEOUT
+#define bcmolt_gpon_ni_cfg_id_onu_activation                                                    BCMOLT_GPON_NI_CFG_ID_ONU_ACTIVATION
+#define bcmolt_gpon_ni_cfg_id_sn_acquisition                                                    BCMOLT_GPON_NI_CFG_ID_SN_ACQUISITION
+#define bcmolt_gpon_ni_cfg_id_key_exchange                                                      BCMOLT_GPON_NI_CFG_ID_KEY_EXCHANGE
+#define bcmolt_gpon_ni_cfg_id_protection_switching                                              BCMOLT_GPON_NI_CFG_ID_PROTECTION_SWITCHING
+#define bcmolt_gpon_ni_cfg_id_cbr_rt_allocation_profile                                         BCMOLT_GPON_NI_CFG_ID_CBR_RT_ALLOCATION_PROFILE
+#define bcmolt_gpon_ni_cfg_id_cbr_nrt_allocation_profile                                        BCMOLT_GPON_NI_CFG_ID_CBR_NRT_ALLOCATION_PROFILE
+#define bcmolt_gpon_ni_cfg_id_dba                                                               BCMOLT_GPON_NI_CFG_ID_DBA
+#define bcmolt_gpon_ni_cfg_id_power_management                                                  BCMOLT_GPON_NI_CFG_ID_POWER_MANAGEMENT
+#define bcmolt_gpon_ni_cfg_id_rogue_onu_detection_process                                       BCMOLT_GPON_NI_CFG_ID_ROGUE_ONU_DETECTION_PROCESS
+#define bcmolt_gpon_ni_cfg_id_periodic_standby_pon_monitoring                                   BCMOLT_GPON_NI_CFG_ID_PERIODIC_STANDBY_PON_MONITORING
+#define bcmolt_gpon_ni_cfg_id_prbs_checker                                                      BCMOLT_GPON_NI_CFG_ID_PRBS_CHECKER
+#define bcmolt_gpon_ni_cfg_id_prbs_generator                                                    BCMOLT_GPON_NI_CFG_ID_PRBS_GENERATOR
+#define bcmolt_gpon_ni_cfg_id_min_data_alloc_id                                                 BCMOLT_GPON_NI_CFG_ID_MIN_DATA_ALLOC_ID
+#define bcmolt_gpon_ni_cfg_id_automatic_onu_deactivation                                        BCMOLT_GPON_NI_CFG_ID_AUTOMATIC_ONU_DEACTIVATION
+#define bcmolt_gpon_ni_cfg_id_us_bandwidth_limit                                                BCMOLT_GPON_NI_CFG_ID_US_BANDWIDTH_LIMIT
+#define bcmolt_gpon_ni_cfg_id_all_onus                                                          BCMOLT_GPON_NI_CFG_ID_ALL_ONUS
+#define bcmolt_gpon_ni_cfg_id_all_mcast_gem_ports                                               BCMOLT_GPON_NI_CFG_ID_ALL_MCAST_GEM_PORTS
+#define bcmolt_gpon_ni_cfg_id_debug                                                             BCMOLT_GPON_NI_CFG_ID_DEBUG
+#define bcmolt_gpon_ni_cfg_id_onu_upgrade_params                                                BCMOLT_GPON_NI_CFG_ID_ONU_UPGRADE_PARAMS
+#define bcmolt_gpon_ni_cfg_id_ps_c_wait_before_deactivation_timeout                             BCMOLT_GPON_NI_CFG_ID_PS_C_WAIT_BEFORE_DEACTIVATION_TIMEOUT
+#define bcmolt_gpon_ni_cfg_id_bip32_indication_control                                          BCMOLT_GPON_NI_CFG_ID_BIP32_INDICATION_CONTROL
+#define bcmolt_gpon_ni_cfg_id__num_of                                                           BCMOLT_GPON_NI_CFG_ID__NUM_OF
+#define bcmolt_gpon_ni_stat_id_fec_codewords                                                    BCMOLT_GPON_NI_STAT_ID_FEC_CODEWORDS
+#define bcmolt_gpon_ni_stat_id_fec_codewords_uncorrected                                        BCMOLT_GPON_NI_STAT_ID_FEC_CODEWORDS_UNCORRECTED
+#define bcmolt_gpon_ni_stat_id_bip8_bytes                                                       BCMOLT_GPON_NI_STAT_ID_BIP8_BYTES
+#define bcmolt_gpon_ni_stat_id_bip8_errors                                                      BCMOLT_GPON_NI_STAT_ID_BIP8_ERRORS
+#define bcmolt_gpon_ni_stat_id_rx_gem_packets                                                   BCMOLT_GPON_NI_STAT_ID_RX_GEM_PACKETS
+#define bcmolt_gpon_ni_stat_id_rx_gem_dropped                                                   BCMOLT_GPON_NI_STAT_ID_RX_GEM_DROPPED
+#define bcmolt_gpon_ni_stat_id_rx_gem_idle                                                      BCMOLT_GPON_NI_STAT_ID_RX_GEM_IDLE
+#define bcmolt_gpon_ni_stat_id_rx_gem_corrected                                                 BCMOLT_GPON_NI_STAT_ID_RX_GEM_CORRECTED
+#define bcmolt_gpon_ni_stat_id_rx_gem_illegal                                                   BCMOLT_GPON_NI_STAT_ID_RX_GEM_ILLEGAL
+#define bcmolt_gpon_ni_stat_id_rx_allocations_valid                                             BCMOLT_GPON_NI_STAT_ID_RX_ALLOCATIONS_VALID
+#define bcmolt_gpon_ni_stat_id_rx_allocations_invalid                                           BCMOLT_GPON_NI_STAT_ID_RX_ALLOCATIONS_INVALID
+#define bcmolt_gpon_ni_stat_id_rx_allocations_disabled                                          BCMOLT_GPON_NI_STAT_ID_RX_ALLOCATIONS_DISABLED
+#define bcmolt_gpon_ni_stat_id_rx_ploams                                                        BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS
+#define bcmolt_gpon_ni_stat_id_rx_ploams_non_idle                                               BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS_NON_IDLE
+#define bcmolt_gpon_ni_stat_id_rx_ploams_error                                                  BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS_ERROR
+#define bcmolt_gpon_ni_stat_id_rx_ploams_dropped                                                BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS_DROPPED
+#define bcmolt_gpon_ni_stat_id_rx_cpu                                                           BCMOLT_GPON_NI_STAT_ID_RX_CPU
+#define bcmolt_gpon_ni_stat_id_rx_omci                                                          BCMOLT_GPON_NI_STAT_ID_RX_OMCI
+#define bcmolt_gpon_ni_stat_id_rx_omci_packets_crc_error                                        BCMOLT_GPON_NI_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR
+#define bcmolt_gpon_ni_stat_id_rx_dropped_too_short                                             BCMOLT_GPON_NI_STAT_ID_RX_DROPPED_TOO_SHORT
+#define bcmolt_gpon_ni_stat_id_rx_dropped_too_long                                              BCMOLT_GPON_NI_STAT_ID_RX_DROPPED_TOO_LONG
+#define bcmolt_gpon_ni_stat_id_rx_crc_errors                                                    BCMOLT_GPON_NI_STAT_ID_RX_CRC_ERRORS
+#define bcmolt_gpon_ni_stat_id_rx_key_errors                                                    BCMOLT_GPON_NI_STAT_ID_RX_KEY_ERRORS
+#define bcmolt_gpon_ni_stat_id_rx_fragments_errors                                              BCMOLT_GPON_NI_STAT_ID_RX_FRAGMENTS_ERRORS
+#define bcmolt_gpon_ni_stat_id_rx_packets_dropped                                               BCMOLT_GPON_NI_STAT_ID_RX_PACKETS_DROPPED
+#define bcmolt_gpon_ni_stat_id_tx_gem                                                           BCMOLT_GPON_NI_STAT_ID_TX_GEM
+#define bcmolt_gpon_ni_stat_id_tx_ploams                                                        BCMOLT_GPON_NI_STAT_ID_TX_PLOAMS
+#define bcmolt_gpon_ni_stat_id_tx_gem_fragments                                                 BCMOLT_GPON_NI_STAT_ID_TX_GEM_FRAGMENTS
+#define bcmolt_gpon_ni_stat_id_tx_cpu                                                           BCMOLT_GPON_NI_STAT_ID_TX_CPU
+#define bcmolt_gpon_ni_stat_id_tx_omci                                                          BCMOLT_GPON_NI_STAT_ID_TX_OMCI
+#define bcmolt_gpon_ni_stat_id_tx_cpu_omci_packets_dropped                                      BCMOLT_GPON_NI_STAT_ID_TX_CPU_OMCI_PACKETS_DROPPED
+#define bcmolt_gpon_ni_stat_id_tx_dropped_illegal_length                                        BCMOLT_GPON_NI_STAT_ID_TX_DROPPED_ILLEGAL_LENGTH
+#define bcmolt_gpon_ni_stat_id_tx_dropped_tpid_miss                                             BCMOLT_GPON_NI_STAT_ID_TX_DROPPED_TPID_MISS
+#define bcmolt_gpon_ni_stat_id_tx_dropped_vid_miss                                              BCMOLT_GPON_NI_STAT_ID_TX_DROPPED_VID_MISS
+#define bcmolt_gpon_ni_stat_id__num_of                                                          BCMOLT_GPON_NI_STAT_ID__NUM_OF
+#define bcmolt_gpon_ni_stat_cfg_id_cfg                                                          BCMOLT_GPON_NI_STAT_CFG_ID_CFG
+#define bcmolt_gpon_ni_stat_cfg_id__num_of                                                      BCMOLT_GPON_NI_STAT_CFG_ID__NUM_OF
+#define bcmolt_gpon_ni_activate_all_onus_completed_id__num_of                                   BCMOLT_GPON_NI_ACTIVATE_ALL_ONUS_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_ni_cpu_packets_failure_id_error                                             BCMOLT_GPON_NI_CPU_PACKETS_FAILURE_ID_ERROR
+#define bcmolt_gpon_ni_cpu_packets_failure_id_gem_port_id                                       BCMOLT_GPON_NI_CPU_PACKETS_FAILURE_ID_GEM_PORT_ID
+#define bcmolt_gpon_ni_cpu_packets_failure_id__num_of                                           BCMOLT_GPON_NI_CPU_PACKETS_FAILURE_ID__NUM_OF
+#define bcmolt_gpon_ni_deactivate_all_onus_completed_id__num_of                                 BCMOLT_GPON_NI_DEACTIVATE_ALL_ONUS_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_ni_disable_all_onus_completed_id__num_of                                    BCMOLT_GPON_NI_DISABLE_ALL_ONUS_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_ni_enable_all_onus_completed_id__num_of                                     BCMOLT_GPON_NI_ENABLE_ALL_ONUS_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_ni_los_id_status                                                            BCMOLT_GPON_NI_LOS_ID_STATUS
+#define bcmolt_gpon_ni_los_id__num_of                                                           BCMOLT_GPON_NI_LOS_ID__NUM_OF
+#define bcmolt_gpon_ni_onu_discovered_id_serial_number                                          BCMOLT_GPON_NI_ONU_DISCOVERED_ID_SERIAL_NUMBER
+#define bcmolt_gpon_ni_onu_discovered_id_ranging_time                                           BCMOLT_GPON_NI_ONU_DISCOVERED_ID_RANGING_TIME
+#define bcmolt_gpon_ni_onu_discovered_id_onu_id                                                 BCMOLT_GPON_NI_ONU_DISCOVERED_ID_ONU_ID
+#define bcmolt_gpon_ni_onu_discovered_id__num_of                                                BCMOLT_GPON_NI_ONU_DISCOVERED_ID__NUM_OF
+#define bcmolt_gpon_ni_onu_upgrade_complete_id_status                                           BCMOLT_GPON_NI_ONU_UPGRADE_COMPLETE_ID_STATUS
+#define bcmolt_gpon_ni_onu_upgrade_complete_id_list_of_failed_entities                          BCMOLT_GPON_NI_ONU_UPGRADE_COMPLETE_ID_LIST_OF_FAILED_ENTITIES
+#define bcmolt_gpon_ni_onu_upgrade_complete_id__num_of                                          BCMOLT_GPON_NI_ONU_UPGRADE_COMPLETE_ID__NUM_OF
+#define bcmolt_gpon_ni_protection_switching_onus_ranged_id_onus                                 BCMOLT_GPON_NI_PROTECTION_SWITCHING_ONUS_RANGED_ID_ONUS
+#define bcmolt_gpon_ni_protection_switching_onus_ranged_id__num_of                              BCMOLT_GPON_NI_PROTECTION_SWITCHING_ONUS_RANGED_ID__NUM_OF
+#define bcmolt_gpon_ni_protection_switching_switchover_completed_id_result                      BCMOLT_GPON_NI_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED_ID_RESULT
+#define bcmolt_gpon_ni_protection_switching_switchover_completed_id__num_of                     BCMOLT_GPON_NI_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_ni_protection_switching_traffic_resume_id_result                            BCMOLT_GPON_NI_PROTECTION_SWITCHING_TRAFFIC_RESUME_ID_RESULT
+#define bcmolt_gpon_ni_protection_switching_traffic_resume_id__num_of                           BCMOLT_GPON_NI_PROTECTION_SWITCHING_TRAFFIC_RESUME_ID__NUM_OF
+#define bcmolt_gpon_ni_rogue_detection_completed_id_window_type                                 BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_WINDOW_TYPE
+#define bcmolt_gpon_ni_rogue_detection_completed_id_measurement_status                          BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_MEASUREMENT_STATUS
+#define bcmolt_gpon_ni_rogue_detection_completed_id_alloc_id                                    BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_ALLOC_ID
+#define bcmolt_gpon_ni_rogue_detection_completed_id_onu_id                                      BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_ONU_ID
+#define bcmolt_gpon_ni_rogue_detection_completed_id_is_delineation                              BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_IS_DELINEATION
+#define bcmolt_gpon_ni_rogue_detection_completed_id_is_ed                                       BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_IS_ED
+#define bcmolt_gpon_ni_rogue_detection_completed_id_rx_data                                     BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_RX_DATA
+#define bcmolt_gpon_ni_rogue_detection_completed_id_ploam_received_onu_id                       BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_PLOAM_RECEIVED_ONU_ID
+#define bcmolt_gpon_ni_rogue_detection_completed_id_ploam_received_crc_error                    BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_PLOAM_RECEIVED_CRC_ERROR
+#define bcmolt_gpon_ni_rogue_detection_completed_id__num_of                                     BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_ni_rogue_onu_special_map_cycle_start_id__num_of                             BCMOLT_GPON_NI_ROGUE_ONU_SPECIAL_MAP_CYCLE_START_ID__NUM_OF
+#define bcmolt_gpon_ni_serial_number_acquisition_cycle_start_id__num_of                         BCMOLT_GPON_NI_SERIAL_NUMBER_ACQUISITION_CYCLE_START_ID__NUM_OF
+#define bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_id_number_of_detected_delimiter   BCMOLT_GPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID_NUMBER_OF_DETECTED_DELIMITER
+#define bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_id_energy_detect_signal           BCMOLT_GPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID_ENERGY_DETECT_SIGNAL
+#define bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_id__num_of                        BCMOLT_GPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_ni_stat_alarm_cleared_id_stat                                               BCMOLT_GPON_NI_STAT_ALARM_CLEARED_ID_STAT
+#define bcmolt_gpon_ni_stat_alarm_cleared_id__num_of                                            BCMOLT_GPON_NI_STAT_ALARM_CLEARED_ID__NUM_OF
+#define bcmolt_gpon_ni_stat_alarm_raised_id_stat                                                BCMOLT_GPON_NI_STAT_ALARM_RAISED_ID_STAT
+#define bcmolt_gpon_ni_stat_alarm_raised_id__num_of                                             BCMOLT_GPON_NI_STAT_ALARM_RAISED_ID__NUM_OF
+#define bcmolt_gpon_ni_state_change_completed_id_result                                         BCMOLT_GPON_NI_STATE_CHANGE_COMPLETED_ID_RESULT
+#define bcmolt_gpon_ni_state_change_completed_id_previous_state                                 BCMOLT_GPON_NI_STATE_CHANGE_COMPLETED_ID_PREVIOUS_STATE
+#define bcmolt_gpon_ni_state_change_completed_id_new_state                                      BCMOLT_GPON_NI_STATE_CHANGE_COMPLETED_ID_NEW_STATE
+#define bcmolt_gpon_ni_state_change_completed_id__num_of                                        BCMOLT_GPON_NI_STATE_CHANGE_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_ni_tod_request_completed_id_tod_string                                      BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_TOD_STRING
+#define bcmolt_gpon_ni_tod_request_completed_id_sfc                                             BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_SFC
+#define bcmolt_gpon_ni_tod_request_completed_id_rtc_offset_sec                                  BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_RTC_OFFSET_SEC
+#define bcmolt_gpon_ni_tod_request_completed_id_rtc_offset_nsec                                 BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_RTC_OFFSET_NSEC
+#define bcmolt_gpon_ni_tod_request_completed_id_status                                          BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_STATUS
+#define bcmolt_gpon_ni_tod_request_completed_id__num_of                                         BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_ni_auto_cfg_id_activate_all_onus_completed                                  BCMOLT_GPON_NI_AUTO_CFG_ID_ACTIVATE_ALL_ONUS_COMPLETED
+#define bcmolt_gpon_ni_auto_cfg_id_cpu_packets_failure                                          BCMOLT_GPON_NI_AUTO_CFG_ID_CPU_PACKETS_FAILURE
+#define bcmolt_gpon_ni_auto_cfg_id_deactivate_all_onus_completed                                BCMOLT_GPON_NI_AUTO_CFG_ID_DEACTIVATE_ALL_ONUS_COMPLETED
+#define bcmolt_gpon_ni_auto_cfg_id_disable_all_onus_completed                                   BCMOLT_GPON_NI_AUTO_CFG_ID_DISABLE_ALL_ONUS_COMPLETED
+#define bcmolt_gpon_ni_auto_cfg_id_enable_all_onus_completed                                    BCMOLT_GPON_NI_AUTO_CFG_ID_ENABLE_ALL_ONUS_COMPLETED
+#define bcmolt_gpon_ni_auto_cfg_id_los                                                          BCMOLT_GPON_NI_AUTO_CFG_ID_LOS
+#define bcmolt_gpon_ni_auto_cfg_id_onu_discovered                                               BCMOLT_GPON_NI_AUTO_CFG_ID_ONU_DISCOVERED
+#define bcmolt_gpon_ni_auto_cfg_id_onu_upgrade_complete                                         BCMOLT_GPON_NI_AUTO_CFG_ID_ONU_UPGRADE_COMPLETE
+#define bcmolt_gpon_ni_auto_cfg_id_protection_switching_onus_ranged                             BCMOLT_GPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_ONUS_RANGED
+#define bcmolt_gpon_ni_auto_cfg_id_protection_switching_switchover_completed                    BCMOLT_GPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED
+#define bcmolt_gpon_ni_auto_cfg_id_protection_switching_traffic_resume                          BCMOLT_GPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_TRAFFIC_RESUME
+#define bcmolt_gpon_ni_auto_cfg_id_rogue_detection_completed                                    BCMOLT_GPON_NI_AUTO_CFG_ID_ROGUE_DETECTION_COMPLETED
+#define bcmolt_gpon_ni_auto_cfg_id_rogue_onu_special_map_cycle_start                            BCMOLT_GPON_NI_AUTO_CFG_ID_ROGUE_ONU_SPECIAL_MAP_CYCLE_START
+#define bcmolt_gpon_ni_auto_cfg_id_serial_number_acquisition_cycle_start                        BCMOLT_GPON_NI_AUTO_CFG_ID_SERIAL_NUMBER_ACQUISITION_CYCLE_START
+#define bcmolt_gpon_ni_auto_cfg_id_standby_pon_monitoring_cycle_completed                       BCMOLT_GPON_NI_AUTO_CFG_ID_STANDBY_PON_MONITORING_CYCLE_COMPLETED
+#define bcmolt_gpon_ni_auto_cfg_id_stat_alarm_cleared                                           BCMOLT_GPON_NI_AUTO_CFG_ID_STAT_ALARM_CLEARED
+#define bcmolt_gpon_ni_auto_cfg_id_stat_alarm_raised                                            BCMOLT_GPON_NI_AUTO_CFG_ID_STAT_ALARM_RAISED
+#define bcmolt_gpon_ni_auto_cfg_id_state_change_completed                                       BCMOLT_GPON_NI_AUTO_CFG_ID_STATE_CHANGE_COMPLETED
+#define bcmolt_gpon_ni_auto_cfg_id_tod_request_completed                                        BCMOLT_GPON_NI_AUTO_CFG_ID_TOD_REQUEST_COMPLETED
+#define bcmolt_gpon_ni_auto_cfg_id__num_of                                                      BCMOLT_GPON_NI_AUTO_CFG_ID__NUM_OF
+#define bcmolt_gpon_ni_disable_serial_number_id_control                                         BCMOLT_GPON_NI_DISABLE_SERIAL_NUMBER_ID_CONTROL
+#define bcmolt_gpon_ni_disable_serial_number_id_serial_number                                   BCMOLT_GPON_NI_DISABLE_SERIAL_NUMBER_ID_SERIAL_NUMBER
+#define bcmolt_gpon_ni_disable_serial_number_id__num_of                                         BCMOLT_GPON_NI_DISABLE_SERIAL_NUMBER_ID__NUM_OF
+#define bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_id_onu_state          BCMOLT_GPON_NI_PROTECTION_SWITCHING_TYPE_C_SET_MULTIPLE_ONU_STATE_ID_ONU_STATE
+#define bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_id_onu_list           BCMOLT_GPON_NI_PROTECTION_SWITCHING_TYPE_C_SET_MULTIPLE_ONU_STATE_ID_ONU_LIST
+#define bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_id__num_of            BCMOLT_GPON_NI_PROTECTION_SWITCHING_TYPE_C_SET_MULTIPLE_ONU_STATE_ID__NUM_OF
+#define bcmolt_gpon_ni_reset_id__num_of                                                         BCMOLT_GPON_NI_RESET_ID__NUM_OF
+#define bcmolt_gpon_ni_rogue_detection_window_id_window_type                                    BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_WINDOW_TYPE
+#define bcmolt_gpon_ni_rogue_detection_window_id_alloc_id                                       BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_ALLOC_ID
+#define bcmolt_gpon_ni_rogue_detection_window_id_onu_id                                         BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_ONU_ID
+#define bcmolt_gpon_ni_rogue_detection_window_id_second_ranging_window                          BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_SECOND_RANGING_WINDOW
+#define bcmolt_gpon_ni_rogue_detection_window_id__num_of                                        BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID__NUM_OF
+#define bcmolt_gpon_ni_set_onu_state_id_onu_state                                               BCMOLT_GPON_NI_SET_ONU_STATE_ID_ONU_STATE
+#define bcmolt_gpon_ni_set_onu_state_id__num_of                                                 BCMOLT_GPON_NI_SET_ONU_STATE_ID__NUM_OF
+#define bcmolt_gpon_ni_set_pon_state_id_pon_state                                               BCMOLT_GPON_NI_SET_PON_STATE_ID_PON_STATE
+#define bcmolt_gpon_ni_set_pon_state_id__num_of                                                 BCMOLT_GPON_NI_SET_PON_STATE_ID__NUM_OF
+#define bcmolt_gpon_ni_single_request_standby_pon_monitoring_id__num_of                         BCMOLT_GPON_NI_SINGLE_REQUEST_STANDBY_PON_MONITORING_ID__NUM_OF
+#define bcmolt_gpon_ni_start_onu_upgrade_id_list_of_onu_ids                                     BCMOLT_GPON_NI_START_ONU_UPGRADE_ID_LIST_OF_ONU_IDS
+#define bcmolt_gpon_ni_start_onu_upgrade_id__num_of                                             BCMOLT_GPON_NI_START_ONU_UPGRADE_ID__NUM_OF
+#define bcmolt_gpon_ni_tod_request_id__num_of                                                   BCMOLT_GPON_NI_TOD_REQUEST_ID__NUM_OF
+#define bcmolt_gpon_ni_broadcast_ploam_packet_id_ploam                                          BCMOLT_GPON_NI_BROADCAST_PLOAM_PACKET_ID_PLOAM
+#define bcmolt_gpon_ni_broadcast_ploam_packet_id__num_of                                        BCMOLT_GPON_NI_BROADCAST_PLOAM_PACKET_ID__NUM_OF
+#define bcmolt_gpon_ni_cpu_packets_id_packet_type                                               BCMOLT_GPON_NI_CPU_PACKETS_ID_PACKET_TYPE
+#define bcmolt_gpon_ni_cpu_packets_id_calc_crc                                                  BCMOLT_GPON_NI_CPU_PACKETS_ID_CALC_CRC
+#define bcmolt_gpon_ni_cpu_packets_id_gem_port_list                                             BCMOLT_GPON_NI_CPU_PACKETS_ID_GEM_PORT_LIST
+#define bcmolt_gpon_ni_cpu_packets_id_buffer                                                    BCMOLT_GPON_NI_CPU_PACKETS_ID_BUFFER
+#define bcmolt_gpon_ni_cpu_packets_id__num_of                                                   BCMOLT_GPON_NI_CPU_PACKETS_ID__NUM_OF
+#define bcmolt_gpon_onu_key_id_pon_ni                                                           BCMOLT_GPON_ONU_KEY_ID_PON_NI
+#define bcmolt_gpon_onu_key_id_onu_id                                                           BCMOLT_GPON_ONU_KEY_ID_ONU_ID
+#define bcmolt_gpon_onu_key_id__num_of                                                          BCMOLT_GPON_ONU_KEY_ID__NUM_OF
+#define bcmolt_gpon_onu_cfg_id_onu_state                                                        BCMOLT_GPON_ONU_CFG_ID_ONU_STATE
+#define bcmolt_gpon_onu_cfg_id_serial_number                                                    BCMOLT_GPON_ONU_CFG_ID_SERIAL_NUMBER
+#define bcmolt_gpon_onu_cfg_id_password                                                         BCMOLT_GPON_ONU_CFG_ID_PASSWORD
+#define bcmolt_gpon_onu_cfg_id_auto_password_learning                                           BCMOLT_GPON_ONU_CFG_ID_AUTO_PASSWORD_LEARNING
+#define bcmolt_gpon_onu_cfg_id_us_fec                                                           BCMOLT_GPON_ONU_CFG_ID_US_FEC
+#define bcmolt_gpon_onu_cfg_id_omci_port_id                                                     BCMOLT_GPON_ONU_CFG_ID_OMCI_PORT_ID
+#define bcmolt_gpon_onu_cfg_id_ds_ber_reporting_interval                                        BCMOLT_GPON_ONU_CFG_ID_DS_BER_REPORTING_INTERVAL
+#define bcmolt_gpon_onu_cfg_id_aes_encryption_key                                               BCMOLT_GPON_ONU_CFG_ID_AES_ENCRYPTION_KEY
+#define bcmolt_gpon_onu_cfg_id_alarm_state                                                      BCMOLT_GPON_ONU_CFG_ID_ALARM_STATE
+#define bcmolt_gpon_onu_cfg_id_ranging_time                                                     BCMOLT_GPON_ONU_CFG_ID_RANGING_TIME
+#define bcmolt_gpon_onu_cfg_id_disabled_after_discovery                                         BCMOLT_GPON_ONU_CFG_ID_DISABLED_AFTER_DISCOVERY
+#define bcmolt_gpon_onu_cfg_id_deactivation_reason                                              BCMOLT_GPON_ONU_CFG_ID_DEACTIVATION_REASON
+#define bcmolt_gpon_onu_cfg_id_all_gem_ports                                                    BCMOLT_GPON_ONU_CFG_ID_ALL_GEM_PORTS
+#define bcmolt_gpon_onu_cfg_id_all_allocs                                                       BCMOLT_GPON_ONU_CFG_ID_ALL_ALLOCS
+#define bcmolt_gpon_onu_cfg_id_onu_ps_type_c                                                    BCMOLT_GPON_ONU_CFG_ID_ONU_PS_TYPE_C
+#define bcmolt_gpon_onu_cfg_id_extended_guard_time                                              BCMOLT_GPON_ONU_CFG_ID_EXTENDED_GUARD_TIME
+#define bcmolt_gpon_onu_cfg_id__num_of                                                          BCMOLT_GPON_ONU_CFG_ID__NUM_OF
+#define bcmolt_gpon_onu_stat_id_fec_codewords                                                   BCMOLT_GPON_ONU_STAT_ID_FEC_CODEWORDS
+#define bcmolt_gpon_onu_stat_id_fec_bytes_corrected                                             BCMOLT_GPON_ONU_STAT_ID_FEC_BYTES_CORRECTED
+#define bcmolt_gpon_onu_stat_id_fec_codewords_corrected                                         BCMOLT_GPON_ONU_STAT_ID_FEC_CODEWORDS_CORRECTED
+#define bcmolt_gpon_onu_stat_id_fec_codewords_uncorrected                                       BCMOLT_GPON_ONU_STAT_ID_FEC_CODEWORDS_UNCORRECTED
+#define bcmolt_gpon_onu_stat_id_bip8_bytes                                                      BCMOLT_GPON_ONU_STAT_ID_BIP8_BYTES
+#define bcmolt_gpon_onu_stat_id_bip8_errors                                                     BCMOLT_GPON_ONU_STAT_ID_BIP8_ERRORS
+#define bcmolt_gpon_onu_stat_id_rx_ploams_crc_error                                             BCMOLT_GPON_ONU_STAT_ID_RX_PLOAMS_CRC_ERROR
+#define bcmolt_gpon_onu_stat_id_rx_ploams_non_idle                                              BCMOLT_GPON_ONU_STAT_ID_RX_PLOAMS_NON_IDLE
+#define bcmolt_gpon_onu_stat_id_positive_drift                                                  BCMOLT_GPON_ONU_STAT_ID_POSITIVE_DRIFT
+#define bcmolt_gpon_onu_stat_id_negative_drift                                                  BCMOLT_GPON_ONU_STAT_ID_NEGATIVE_DRIFT
+#define bcmolt_gpon_onu_stat_id_rx_omci                                                         BCMOLT_GPON_ONU_STAT_ID_RX_OMCI
+#define bcmolt_gpon_onu_stat_id_rx_omci_packets_crc_error                                       BCMOLT_GPON_ONU_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR
+#define bcmolt_gpon_onu_stat_id_ber_reported                                                    BCMOLT_GPON_ONU_STAT_ID_BER_REPORTED
+#define bcmolt_gpon_onu_stat_id_unreceived_burst                                                BCMOLT_GPON_ONU_STAT_ID_UNRECEIVED_BURST
+#define bcmolt_gpon_onu_stat_id_lcdg_errors                                                     BCMOLT_GPON_ONU_STAT_ID_LCDG_ERRORS
+#define bcmolt_gpon_onu_stat_id_rdi_errors                                                      BCMOLT_GPON_ONU_STAT_ID_RDI_ERRORS
+#define bcmolt_gpon_onu_stat_id_rx_bytes                                                        BCMOLT_GPON_ONU_STAT_ID_RX_BYTES
+#define bcmolt_gpon_onu_stat_id_rx_packets                                                      BCMOLT_GPON_ONU_STAT_ID_RX_PACKETS
+#define bcmolt_gpon_onu_stat_id_tx_bytes                                                        BCMOLT_GPON_ONU_STAT_ID_TX_BYTES
+#define bcmolt_gpon_onu_stat_id_tx_packets                                                      BCMOLT_GPON_ONU_STAT_ID_TX_PACKETS
+#define bcmolt_gpon_onu_stat_id__num_of                                                         BCMOLT_GPON_ONU_STAT_ID__NUM_OF
+#define bcmolt_gpon_onu_stat_cfg_id_cfg                                                         BCMOLT_GPON_ONU_STAT_CFG_ID_CFG
+#define bcmolt_gpon_onu_stat_cfg_id__num_of                                                     BCMOLT_GPON_ONU_STAT_CFG_ID__NUM_OF
+#define bcmolt_gpon_onu_ber_interval_configuration_completed_id_ber_interval                    BCMOLT_GPON_ONU_BER_INTERVAL_CONFIGURATION_COMPLETED_ID_BER_INTERVAL
+#define bcmolt_gpon_onu_ber_interval_configuration_completed_id_result                          BCMOLT_GPON_ONU_BER_INTERVAL_CONFIGURATION_COMPLETED_ID_RESULT
+#define bcmolt_gpon_onu_ber_interval_configuration_completed_id__num_of                         BCMOLT_GPON_ONU_BER_INTERVAL_CONFIGURATION_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_onu_dfi_id_alarm_status                                                     BCMOLT_GPON_ONU_DFI_ID_ALARM_STATUS
+#define bcmolt_gpon_onu_dfi_id__num_of                                                          BCMOLT_GPON_ONU_DFI_ID__NUM_OF
+#define bcmolt_gpon_onu_dgi_id_alarm_status                                                     BCMOLT_GPON_ONU_DGI_ID_ALARM_STATUS
+#define bcmolt_gpon_onu_dgi_id__num_of                                                          BCMOLT_GPON_ONU_DGI_ID__NUM_OF
+#define bcmolt_gpon_onu_dowi_id_alarm_status                                                    BCMOLT_GPON_ONU_DOWI_ID_ALARM_STATUS
+#define bcmolt_gpon_onu_dowi_id_drift_value                                                     BCMOLT_GPON_ONU_DOWI_ID_DRIFT_VALUE
+#define bcmolt_gpon_onu_dowi_id_new_eqd                                                         BCMOLT_GPON_ONU_DOWI_ID_NEW_EQD
+#define bcmolt_gpon_onu_dowi_id__num_of                                                         BCMOLT_GPON_ONU_DOWI_ID__NUM_OF
+#define bcmolt_gpon_onu_err_id_bip8_errors                                                      BCMOLT_GPON_ONU_ERR_ID_BIP8_ERRORS
+#define bcmolt_gpon_onu_err_id__num_of                                                          BCMOLT_GPON_ONU_ERR_ID__NUM_OF
+#define bcmolt_gpon_onu_invalid_dbru_report_id_alloc_id                                         BCMOLT_GPON_ONU_INVALID_DBRU_REPORT_ID_ALLOC_ID
+#define bcmolt_gpon_onu_invalid_dbru_report_id__num_of                                          BCMOLT_GPON_ONU_INVALID_DBRU_REPORT_ID__NUM_OF
+#define bcmolt_gpon_onu_key_exchange_completed_id_new_key                                       BCMOLT_GPON_ONU_KEY_EXCHANGE_COMPLETED_ID_NEW_KEY
+#define bcmolt_gpon_onu_key_exchange_completed_id__num_of                                       BCMOLT_GPON_ONU_KEY_EXCHANGE_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_onu_key_exchange_cycle_skipped_id__num_of                                   BCMOLT_GPON_ONU_KEY_EXCHANGE_CYCLE_SKIPPED_ID__NUM_OF
+#define bcmolt_gpon_onu_key_exchange_decrypt_required_id_new_key                                BCMOLT_GPON_ONU_KEY_EXCHANGE_DECRYPT_REQUIRED_ID_NEW_KEY
+#define bcmolt_gpon_onu_key_exchange_decrypt_required_id__num_of                                BCMOLT_GPON_ONU_KEY_EXCHANGE_DECRYPT_REQUIRED_ID__NUM_OF
+#define bcmolt_gpon_onu_key_exchange_key_mismatch_id_expected_key                               BCMOLT_GPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID_EXPECTED_KEY
+#define bcmolt_gpon_onu_key_exchange_key_mismatch_id_received_key                               BCMOLT_GPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID_RECEIVED_KEY
+#define bcmolt_gpon_onu_key_exchange_key_mismatch_id__num_of                                    BCMOLT_GPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID__NUM_OF
+#define bcmolt_gpon_onu_key_exchange_key_request_timeout_id__num_of                             BCMOLT_GPON_ONU_KEY_EXCHANGE_KEY_REQUEST_TIMEOUT_ID__NUM_OF
+#define bcmolt_gpon_onu_key_exchange_unconsecutive_index_id_expected_index                      BCMOLT_GPON_ONU_KEY_EXCHANGE_UNCONSECUTIVE_INDEX_ID_EXPECTED_INDEX
+#define bcmolt_gpon_onu_key_exchange_unconsecutive_index_id_actual_index                        BCMOLT_GPON_ONU_KEY_EXCHANGE_UNCONSECUTIVE_INDEX_ID_ACTUAL_INDEX
+#define bcmolt_gpon_onu_key_exchange_unconsecutive_index_id__num_of                             BCMOLT_GPON_ONU_KEY_EXCHANGE_UNCONSECUTIVE_INDEX_ID__NUM_OF
+#define bcmolt_gpon_onu_loai_id_alarm_status                                                    BCMOLT_GPON_ONU_LOAI_ID_ALARM_STATUS
+#define bcmolt_gpon_onu_loai_id__num_of                                                         BCMOLT_GPON_ONU_LOAI_ID__NUM_OF
+#define bcmolt_gpon_onu_loki_id_alarm_status                                                    BCMOLT_GPON_ONU_LOKI_ID_ALARM_STATUS
+#define bcmolt_gpon_onu_loki_id__num_of                                                         BCMOLT_GPON_ONU_LOKI_ID__NUM_OF
+#define bcmolt_gpon_onu_memi_id_ploam_buffer                                                    BCMOLT_GPON_ONU_MEMI_ID_PLOAM_BUFFER
+#define bcmolt_gpon_onu_memi_id__num_of                                                         BCMOLT_GPON_ONU_MEMI_ID__NUM_OF
+#define bcmolt_gpon_onu_omci_port_id_configuration_completed_id_gem_port                        BCMOLT_GPON_ONU_OMCI_PORT_ID_CONFIGURATION_COMPLETED_ID_GEM_PORT
+#define bcmolt_gpon_onu_omci_port_id_configuration_completed_id_status                          BCMOLT_GPON_ONU_OMCI_PORT_ID_CONFIGURATION_COMPLETED_ID_STATUS
+#define bcmolt_gpon_onu_omci_port_id_configuration_completed_id_operation                       BCMOLT_GPON_ONU_OMCI_PORT_ID_CONFIGURATION_COMPLETED_ID_OPERATION
+#define bcmolt_gpon_onu_omci_port_id_configuration_completed_id__num_of                         BCMOLT_GPON_ONU_OMCI_PORT_ID_CONFIGURATION_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_onu_onu_activation_completed_id_status                                      BCMOLT_GPON_ONU_ONU_ACTIVATION_COMPLETED_ID_STATUS
+#define bcmolt_gpon_onu_onu_activation_completed_id_fail_reason                                 BCMOLT_GPON_ONU_ONU_ACTIVATION_COMPLETED_ID_FAIL_REASON
+#define bcmolt_gpon_onu_onu_activation_completed_id__num_of                                     BCMOLT_GPON_ONU_ONU_ACTIVATION_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_onu_onu_activation_standby_completed_id_result                              BCMOLT_GPON_ONU_ONU_ACTIVATION_STANDBY_COMPLETED_ID_RESULT
+#define bcmolt_gpon_onu_onu_activation_standby_completed_id__num_of                             BCMOLT_GPON_ONU_ONU_ACTIVATION_STANDBY_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_onu_onu_alarm_id_onu_alarm                                                  BCMOLT_GPON_ONU_ONU_ALARM_ID_ONU_ALARM
+#define bcmolt_gpon_onu_onu_alarm_id__num_of                                                    BCMOLT_GPON_ONU_ONU_ALARM_ID__NUM_OF
+#define bcmolt_gpon_onu_onu_deactivation_completed_id_status                                    BCMOLT_GPON_ONU_ONU_DEACTIVATION_COMPLETED_ID_STATUS
+#define bcmolt_gpon_onu_onu_deactivation_completed_id__num_of                                   BCMOLT_GPON_ONU_ONU_DEACTIVATION_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_onu_onu_disable_completed_id_serial_number                                  BCMOLT_GPON_ONU_ONU_DISABLE_COMPLETED_ID_SERIAL_NUMBER
+#define bcmolt_gpon_onu_onu_disable_completed_id__num_of                                        BCMOLT_GPON_ONU_ONU_DISABLE_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_onu_onu_enable_completed_id_serial_number                                   BCMOLT_GPON_ONU_ONU_ENABLE_COMPLETED_ID_SERIAL_NUMBER
+#define bcmolt_gpon_onu_onu_enable_completed_id__num_of                                         BCMOLT_GPON_ONU_ONU_ENABLE_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_onu_optical_reflection_id__num_of                                           BCMOLT_GPON_ONU_OPTICAL_REFLECTION_ID__NUM_OF
+#define bcmolt_gpon_onu_password_authentication_completed_id_status                             BCMOLT_GPON_ONU_PASSWORD_AUTHENTICATION_COMPLETED_ID_STATUS
+#define bcmolt_gpon_onu_password_authentication_completed_id_fail_reason                        BCMOLT_GPON_ONU_PASSWORD_AUTHENTICATION_COMPLETED_ID_FAIL_REASON
+#define bcmolt_gpon_onu_password_authentication_completed_id_password                           BCMOLT_GPON_ONU_PASSWORD_AUTHENTICATION_COMPLETED_ID_PASSWORD
+#define bcmolt_gpon_onu_password_authentication_completed_id__num_of                            BCMOLT_GPON_ONU_PASSWORD_AUTHENTICATION_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_onu_pee_id_alarm_status                                                     BCMOLT_GPON_ONU_PEE_ID_ALARM_STATUS
+#define bcmolt_gpon_onu_pee_id__num_of                                                          BCMOLT_GPON_ONU_PEE_ID__NUM_OF
+#define bcmolt_gpon_onu_possible_drift_id_alarm_status                                          BCMOLT_GPON_ONU_POSSIBLE_DRIFT_ID_ALARM_STATUS
+#define bcmolt_gpon_onu_possible_drift_id_estimated_drift                                       BCMOLT_GPON_ONU_POSSIBLE_DRIFT_ID_ESTIMATED_DRIFT
+#define bcmolt_gpon_onu_possible_drift_id__num_of                                               BCMOLT_GPON_ONU_POSSIBLE_DRIFT_ID__NUM_OF
+#define bcmolt_gpon_onu_power_management_state_change_id_old_state                              BCMOLT_GPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_OLD_STATE
+#define bcmolt_gpon_onu_power_management_state_change_id_new_state                              BCMOLT_GPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_NEW_STATE
+#define bcmolt_gpon_onu_power_management_state_change_id_reason                                 BCMOLT_GPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_REASON
+#define bcmolt_gpon_onu_power_management_state_change_id__num_of                                BCMOLT_GPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID__NUM_OF
+#define bcmolt_gpon_onu_pst_id_link_number                                                      BCMOLT_GPON_ONU_PST_ID_LINK_NUMBER
+#define bcmolt_gpon_onu_pst_id_k1                                                               BCMOLT_GPON_ONU_PST_ID_K1
+#define bcmolt_gpon_onu_pst_id_k2                                                               BCMOLT_GPON_ONU_PST_ID_K2
+#define bcmolt_gpon_onu_pst_id__num_of                                                          BCMOLT_GPON_ONU_PST_ID__NUM_OF
+#define bcmolt_gpon_onu_ranging_completed_id_status                                             BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_STATUS
+#define bcmolt_gpon_onu_ranging_completed_id_fail_reason                                        BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_FAIL_REASON
+#define bcmolt_gpon_onu_ranging_completed_id_number_of_ploams                                   BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_NUMBER_OF_PLOAMS
+#define bcmolt_gpon_onu_ranging_completed_id_eqd                                                BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_EQD
+#define bcmolt_gpon_onu_ranging_completed_id_power_level                                        BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_POWER_LEVEL
+#define bcmolt_gpon_onu_ranging_completed_id__num_of                                            BCMOLT_GPON_ONU_RANGING_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_onu_rei_id_bip8_errors                                                      BCMOLT_GPON_ONU_REI_ID_BIP8_ERRORS
+#define bcmolt_gpon_onu_rei_id__num_of                                                          BCMOLT_GPON_ONU_REI_ID__NUM_OF
+#define bcmolt_gpon_onu_rssi_measurement_completed_id_status                                    BCMOLT_GPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID_STATUS
+#define bcmolt_gpon_onu_rssi_measurement_completed_id_fail_reason                               BCMOLT_GPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID_FAIL_REASON
+#define bcmolt_gpon_onu_rssi_measurement_completed_id__num_of                                   BCMOLT_GPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID__NUM_OF
+#define bcmolt_gpon_onu_sdi_id_alarm_status                                                     BCMOLT_GPON_ONU_SDI_ID_ALARM_STATUS
+#define bcmolt_gpon_onu_sdi_id_ber                                                              BCMOLT_GPON_ONU_SDI_ID_BER
+#define bcmolt_gpon_onu_sdi_id__num_of                                                          BCMOLT_GPON_ONU_SDI_ID__NUM_OF
+#define bcmolt_gpon_onu_sfi_id_alarm_status                                                     BCMOLT_GPON_ONU_SFI_ID_ALARM_STATUS
+#define bcmolt_gpon_onu_sfi_id_ber                                                              BCMOLT_GPON_ONU_SFI_ID_BER
+#define bcmolt_gpon_onu_sfi_id__num_of                                                          BCMOLT_GPON_ONU_SFI_ID__NUM_OF
+#define bcmolt_gpon_onu_stat_alarm_cleared_id_stat                                              BCMOLT_GPON_ONU_STAT_ALARM_CLEARED_ID_STAT
+#define bcmolt_gpon_onu_stat_alarm_cleared_id__num_of                                           BCMOLT_GPON_ONU_STAT_ALARM_CLEARED_ID__NUM_OF
+#define bcmolt_gpon_onu_stat_alarm_raised_id_stat                                               BCMOLT_GPON_ONU_STAT_ALARM_RAISED_ID_STAT
+#define bcmolt_gpon_onu_stat_alarm_raised_id__num_of                                            BCMOLT_GPON_ONU_STAT_ALARM_RAISED_ID__NUM_OF
+#define bcmolt_gpon_onu_sufi_id_alarm_status                                                    BCMOLT_GPON_ONU_SUFI_ID_ALARM_STATUS
+#define bcmolt_gpon_onu_sufi_id__num_of                                                         BCMOLT_GPON_ONU_SUFI_ID__NUM_OF
+#define bcmolt_gpon_onu_tiwi_id_alarm_status                                                    BCMOLT_GPON_ONU_TIWI_ID_ALARM_STATUS
+#define bcmolt_gpon_onu_tiwi_id_drift_value                                                     BCMOLT_GPON_ONU_TIWI_ID_DRIFT_VALUE
+#define bcmolt_gpon_onu_tiwi_id__num_of                                                         BCMOLT_GPON_ONU_TIWI_ID__NUM_OF
+#define bcmolt_gpon_onu_auto_cfg_id_ber_interval_configuration_completed                        BCMOLT_GPON_ONU_AUTO_CFG_ID_BER_INTERVAL_CONFIGURATION_COMPLETED
+#define bcmolt_gpon_onu_auto_cfg_id_dfi                                                         BCMOLT_GPON_ONU_AUTO_CFG_ID_DFI
+#define bcmolt_gpon_onu_auto_cfg_id_dgi                                                         BCMOLT_GPON_ONU_AUTO_CFG_ID_DGI
+#define bcmolt_gpon_onu_auto_cfg_id_dowi                                                        BCMOLT_GPON_ONU_AUTO_CFG_ID_DOWI
+#define bcmolt_gpon_onu_auto_cfg_id_err                                                         BCMOLT_GPON_ONU_AUTO_CFG_ID_ERR
+#define bcmolt_gpon_onu_auto_cfg_id_invalid_dbru_report                                         BCMOLT_GPON_ONU_AUTO_CFG_ID_INVALID_DBRU_REPORT
+#define bcmolt_gpon_onu_auto_cfg_id_key_exchange_completed                                      BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_COMPLETED
+#define bcmolt_gpon_onu_auto_cfg_id_key_exchange_cycle_skipped                                  BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_CYCLE_SKIPPED
+#define bcmolt_gpon_onu_auto_cfg_id_key_exchange_decrypt_required                               BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_DECRYPT_REQUIRED
+#define bcmolt_gpon_onu_auto_cfg_id_key_exchange_key_mismatch                                   BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_KEY_MISMATCH
+#define bcmolt_gpon_onu_auto_cfg_id_key_exchange_key_request_timeout                            BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_KEY_REQUEST_TIMEOUT
+#define bcmolt_gpon_onu_auto_cfg_id_key_exchange_unconsecutive_index                            BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_UNCONSECUTIVE_INDEX
+#define bcmolt_gpon_onu_auto_cfg_id_loai                                                        BCMOLT_GPON_ONU_AUTO_CFG_ID_LOAI
+#define bcmolt_gpon_onu_auto_cfg_id_loki                                                        BCMOLT_GPON_ONU_AUTO_CFG_ID_LOKI
+#define bcmolt_gpon_onu_auto_cfg_id_memi                                                        BCMOLT_GPON_ONU_AUTO_CFG_ID_MEMI
+#define bcmolt_gpon_onu_auto_cfg_id_omci_port_id_configuration_completed                        BCMOLT_GPON_ONU_AUTO_CFG_ID_OMCI_PORT_ID_CONFIGURATION_COMPLETED
+#define bcmolt_gpon_onu_auto_cfg_id_onu_activation_completed                                    BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_ACTIVATION_COMPLETED
+#define bcmolt_gpon_onu_auto_cfg_id_onu_activation_standby_completed                            BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_ACTIVATION_STANDBY_COMPLETED
+#define bcmolt_gpon_onu_auto_cfg_id_onu_alarm                                                   BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_ALARM
+#define bcmolt_gpon_onu_auto_cfg_id_onu_deactivation_completed                                  BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_DEACTIVATION_COMPLETED
+#define bcmolt_gpon_onu_auto_cfg_id_onu_disable_completed                                       BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_DISABLE_COMPLETED
+#define bcmolt_gpon_onu_auto_cfg_id_onu_enable_completed                                        BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_ENABLE_COMPLETED
+#define bcmolt_gpon_onu_auto_cfg_id_optical_reflection                                          BCMOLT_GPON_ONU_AUTO_CFG_ID_OPTICAL_REFLECTION
+#define bcmolt_gpon_onu_auto_cfg_id_password_authentication_completed                           BCMOLT_GPON_ONU_AUTO_CFG_ID_PASSWORD_AUTHENTICATION_COMPLETED
+#define bcmolt_gpon_onu_auto_cfg_id_pee                                                         BCMOLT_GPON_ONU_AUTO_CFG_ID_PEE
+#define bcmolt_gpon_onu_auto_cfg_id_possible_drift                                              BCMOLT_GPON_ONU_AUTO_CFG_ID_POSSIBLE_DRIFT
+#define bcmolt_gpon_onu_auto_cfg_id_power_management_state_change                               BCMOLT_GPON_ONU_AUTO_CFG_ID_POWER_MANAGEMENT_STATE_CHANGE
+#define bcmolt_gpon_onu_auto_cfg_id_pst                                                         BCMOLT_GPON_ONU_AUTO_CFG_ID_PST
+#define bcmolt_gpon_onu_auto_cfg_id_ranging_completed                                           BCMOLT_GPON_ONU_AUTO_CFG_ID_RANGING_COMPLETED
+#define bcmolt_gpon_onu_auto_cfg_id_rei                                                         BCMOLT_GPON_ONU_AUTO_CFG_ID_REI
+#define bcmolt_gpon_onu_auto_cfg_id_rssi_measurement_completed                                  BCMOLT_GPON_ONU_AUTO_CFG_ID_RSSI_MEASUREMENT_COMPLETED
+#define bcmolt_gpon_onu_auto_cfg_id_sdi                                                         BCMOLT_GPON_ONU_AUTO_CFG_ID_SDI
+#define bcmolt_gpon_onu_auto_cfg_id_sfi                                                         BCMOLT_GPON_ONU_AUTO_CFG_ID_SFI
+#define bcmolt_gpon_onu_auto_cfg_id_stat_alarm_cleared                                          BCMOLT_GPON_ONU_AUTO_CFG_ID_STAT_ALARM_CLEARED
+#define bcmolt_gpon_onu_auto_cfg_id_stat_alarm_raised                                           BCMOLT_GPON_ONU_AUTO_CFG_ID_STAT_ALARM_RAISED
+#define bcmolt_gpon_onu_auto_cfg_id_sufi                                                        BCMOLT_GPON_ONU_AUTO_CFG_ID_SUFI
+#define bcmolt_gpon_onu_auto_cfg_id_tiwi                                                        BCMOLT_GPON_ONU_AUTO_CFG_ID_TIWI
+#define bcmolt_gpon_onu_auto_cfg_id__num_of                                                     BCMOLT_GPON_ONU_AUTO_CFG_ID__NUM_OF
+#define bcmolt_gpon_onu_change_power_level_id_power_level_action                                BCMOLT_GPON_ONU_CHANGE_POWER_LEVEL_ID_POWER_LEVEL_ACTION
+#define bcmolt_gpon_onu_change_power_level_id__num_of                                           BCMOLT_GPON_ONU_CHANGE_POWER_LEVEL_ID__NUM_OF
+#define bcmolt_gpon_onu_rssi_measurement_id__num_of                                             BCMOLT_GPON_ONU_RSSI_MEASUREMENT_ID__NUM_OF
+#define bcmolt_gpon_onu_set_onu_state_id_onu_state                                              BCMOLT_GPON_ONU_SET_ONU_STATE_ID_ONU_STATE
+#define bcmolt_gpon_onu_set_onu_state_id__num_of                                                BCMOLT_GPON_ONU_SET_ONU_STATE_ID__NUM_OF
+#define bcmolt_gpon_onu_cpu_packets_id_packet_type                                              BCMOLT_GPON_ONU_CPU_PACKETS_ID_PACKET_TYPE
+#define bcmolt_gpon_onu_cpu_packets_id_calc_crc                                                 BCMOLT_GPON_ONU_CPU_PACKETS_ID_CALC_CRC
+#define bcmolt_gpon_onu_cpu_packets_id_number_of_packets                                        BCMOLT_GPON_ONU_CPU_PACKETS_ID_NUMBER_OF_PACKETS
+#define bcmolt_gpon_onu_cpu_packets_id_packet_size                                              BCMOLT_GPON_ONU_CPU_PACKETS_ID_PACKET_SIZE
+#define bcmolt_gpon_onu_cpu_packets_id_buffer                                                   BCMOLT_GPON_ONU_CPU_PACKETS_ID_BUFFER
+#define bcmolt_gpon_onu_cpu_packets_id__num_of                                                  BCMOLT_GPON_ONU_CPU_PACKETS_ID__NUM_OF
+#define bcmolt_gpon_onu_ploam_packet_id_ploam                                                   BCMOLT_GPON_ONU_PLOAM_PACKET_ID_PLOAM
+#define bcmolt_gpon_onu_ploam_packet_id__num_of                                                 BCMOLT_GPON_ONU_PLOAM_PACKET_ID__NUM_OF
+#define bcmolt_gpon_onu_cpu_packet_id_port_id                                                   BCMOLT_GPON_ONU_CPU_PACKET_ID_PORT_ID
+#define bcmolt_gpon_onu_cpu_packet_id_crc_ok                                                    BCMOLT_GPON_ONU_CPU_PACKET_ID_CRC_OK
+#define bcmolt_gpon_onu_cpu_packet_id_packet_size                                               BCMOLT_GPON_ONU_CPU_PACKET_ID_PACKET_SIZE
+#define bcmolt_gpon_onu_cpu_packet_id_buffer                                                    BCMOLT_GPON_ONU_CPU_PACKET_ID_BUFFER
+#define bcmolt_gpon_onu_cpu_packet_id__num_of                                                   BCMOLT_GPON_ONU_CPU_PACKET_ID__NUM_OF
+#define bcmolt_gpon_onu_omci_packet_id_port_id                                                  BCMOLT_GPON_ONU_OMCI_PACKET_ID_PORT_ID
+#define bcmolt_gpon_onu_omci_packet_id_crc_ok                                                   BCMOLT_GPON_ONU_OMCI_PACKET_ID_CRC_OK
+#define bcmolt_gpon_onu_omci_packet_id_packet_size                                              BCMOLT_GPON_ONU_OMCI_PACKET_ID_PACKET_SIZE
+#define bcmolt_gpon_onu_omci_packet_id_buffer                                                   BCMOLT_GPON_ONU_OMCI_PACKET_ID_BUFFER
+#define bcmolt_gpon_onu_omci_packet_id__num_of                                                  BCMOLT_GPON_ONU_OMCI_PACKET_ID__NUM_OF
+#define bcmolt_gpon_trx_key_id_pon_ni                                                           BCMOLT_GPON_TRX_KEY_ID_PON_NI
+#define bcmolt_gpon_trx_key_id__num_of                                                          BCMOLT_GPON_TRX_KEY_ID__NUM_OF
+#define bcmolt_gpon_trx_cfg_id_transceiver_type                                                 BCMOLT_GPON_TRX_CFG_ID_TRANSCEIVER_TYPE
+#define bcmolt_gpon_trx_cfg_id_la_configuration                                                 BCMOLT_GPON_TRX_CFG_ID_LA_CONFIGURATION
+#define bcmolt_gpon_trx_cfg_id_bcdr                                                             BCMOLT_GPON_TRX_CFG_ID_BCDR
+#define bcmolt_gpon_trx_cfg_id_la_ranging_after_no_ed_resync                                    BCMOLT_GPON_TRX_CFG_ID_LA_RANGING_AFTER_NO_ED_RESYNC
+#define bcmolt_gpon_trx_cfg_id_bcdr_ranging_after_no_ed_resync                                  BCMOLT_GPON_TRX_CFG_ID_BCDR_RANGING_AFTER_NO_ED_RESYNC
+#define bcmolt_gpon_trx_cfg_id_la_ranging_after_ed_resync                                       BCMOLT_GPON_TRX_CFG_ID_LA_RANGING_AFTER_ED_RESYNC
+#define bcmolt_gpon_trx_cfg_id_bcdr_ranging_after_ed_resync                                     BCMOLT_GPON_TRX_CFG_ID_BCDR_RANGING_AFTER_ED_RESYNC
+#define bcmolt_gpon_trx_cfg_id_la_resync_polarity                                               BCMOLT_GPON_TRX_CFG_ID_LA_RESYNC_POLARITY
+#define bcmolt_gpon_trx_cfg_id_bcdr_resync_polarity                                             BCMOLT_GPON_TRX_CFG_ID_BCDR_RESYNC_POLARITY
+#define bcmolt_gpon_trx_cfg_id_bcdr_ranging_resync_conditions                                   BCMOLT_GPON_TRX_CFG_ID_BCDR_RANGING_RESYNC_CONDITIONS
+#define bcmolt_gpon_trx_cfg_id_la_ranging_resync_conditions                                     BCMOLT_GPON_TRX_CFG_ID_LA_RANGING_RESYNC_CONDITIONS
+#define bcmolt_gpon_trx_cfg_id_rx_configuration                                                 BCMOLT_GPON_TRX_CFG_ID_RX_CONFIGURATION
+#define bcmolt_gpon_trx_cfg_id_ranging_control_stages_configuration                             BCMOLT_GPON_TRX_CFG_ID_RANGING_CONTROL_STAGES_CONFIGURATION
+#define bcmolt_gpon_trx_cfg_id_energy_detect                                                    BCMOLT_GPON_TRX_CFG_ID_ENERGY_DETECT
+#define bcmolt_gpon_trx_cfg_id_end_of_burst_data_pattern                                        BCMOLT_GPON_TRX_CFG_ID_END_OF_BURST_DATA_PATTERN
+#define bcmolt_gpon_trx_cfg_id_end_of_burst_ranging_pattern                                     BCMOLT_GPON_TRX_CFG_ID_END_OF_BURST_RANGING_PATTERN
+#define bcmolt_gpon_trx_cfg_id_preamble                                                         BCMOLT_GPON_TRX_CFG_ID_PREAMBLE
+#define bcmolt_gpon_trx_cfg_id_delimiter                                                        BCMOLT_GPON_TRX_CFG_ID_DELIMITER
+#define bcmolt_gpon_trx_cfg_id_guard_bits                                                       BCMOLT_GPON_TRX_CFG_ID_GUARD_BITS
+#define bcmolt_gpon_trx_cfg_id_serdes_configuration                                             BCMOLT_GPON_TRX_CFG_ID_SERDES_CONFIGURATION
+#define bcmolt_gpon_trx_cfg_id_plo_ranging                                                      BCMOLT_GPON_TRX_CFG_ID_PLO_RANGING
+#define bcmolt_gpon_trx_cfg_id_plo_data                                                         BCMOLT_GPON_TRX_CFG_ID_PLO_DATA
+#define bcmolt_gpon_trx_cfg_id_rssi_normal_config                                               BCMOLT_GPON_TRX_CFG_ID_RSSI_NORMAL_CONFIG
+#define bcmolt_gpon_trx_cfg_id_ranging_rssi_resync_control                                      BCMOLT_GPON_TRX_CFG_ID_RANGING_RSSI_RESYNC_CONTROL
+#define bcmolt_gpon_trx_cfg_id__num_of                                                          BCMOLT_GPON_TRX_CFG_ID__NUM_OF
+#define bcmolt_log_entry_key_id_log_id                                                          BCMOLT_LOG_ENTRY_KEY_ID_LOG_ID
+#define bcmolt_log_entry_key_id_reserved                                                        BCMOLT_LOG_ENTRY_KEY_ID_RESERVED
+#define bcmolt_log_entry_key_id_name                                                            BCMOLT_LOG_ENTRY_KEY_ID_NAME
+#define bcmolt_log_entry_key_id__num_of                                                         BCMOLT_LOG_ENTRY_KEY_ID__NUM_OF
+#define bcmolt_log_entry_cfg_id_default_log_level                                               BCMOLT_LOG_ENTRY_CFG_ID_DEFAULT_LOG_LEVEL
+#define bcmolt_log_entry_cfg_id_default_log_type                                                BCMOLT_LOG_ENTRY_CFG_ID_DEFAULT_LOG_TYPE
+#define bcmolt_log_entry_cfg_id_log_level_print                                                 BCMOLT_LOG_ENTRY_CFG_ID_LOG_LEVEL_PRINT
+#define bcmolt_log_entry_cfg_id_log_level_save                                                  BCMOLT_LOG_ENTRY_CFG_ID_LOG_LEVEL_SAVE
+#define bcmolt_log_entry_cfg_id_log_type                                                        BCMOLT_LOG_ENTRY_CFG_ID_LOG_TYPE
+#define bcmolt_log_entry_cfg_id_log_style                                                       BCMOLT_LOG_ENTRY_CFG_ID_LOG_STYLE
+#define bcmolt_log_entry_cfg_id_log_name                                                        BCMOLT_LOG_ENTRY_CFG_ID_LOG_NAME
+#define bcmolt_log_entry_cfg_id__num_of                                                         BCMOLT_LOG_ENTRY_CFG_ID__NUM_OF
+#define bcmolt_log_entry_stat_id_msg_count                                                      BCMOLT_LOG_ENTRY_STAT_ID_MSG_COUNT
+#define bcmolt_log_entry_stat_id_lost_msg_count                                                 BCMOLT_LOG_ENTRY_STAT_ID_LOST_MSG_COUNT
+#define bcmolt_log_entry_stat_id__num_of                                                        BCMOLT_LOG_ENTRY_STAT_ID__NUM_OF
+#define bcmolt_log_entry_stat_cfg_id_cfg                                                        BCMOLT_LOG_ENTRY_STAT_CFG_ID_CFG
+#define bcmolt_log_entry_stat_cfg_id__num_of                                                    BCMOLT_LOG_ENTRY_STAT_CFG_ID__NUM_OF
+#define bcmolt_log_entry_stat_alarm_cleared_id_stat                                             BCMOLT_LOG_ENTRY_STAT_ALARM_CLEARED_ID_STAT
+#define bcmolt_log_entry_stat_alarm_cleared_id__num_of                                          BCMOLT_LOG_ENTRY_STAT_ALARM_CLEARED_ID__NUM_OF
+#define bcmolt_log_entry_stat_alarm_raised_id_stat                                              BCMOLT_LOG_ENTRY_STAT_ALARM_RAISED_ID_STAT
+#define bcmolt_log_entry_stat_alarm_raised_id__num_of                                           BCMOLT_LOG_ENTRY_STAT_ALARM_RAISED_ID__NUM_OF
+#define bcmolt_log_entry_auto_cfg_id_stat_alarm_cleared                                         BCMOLT_LOG_ENTRY_AUTO_CFG_ID_STAT_ALARM_CLEARED
+#define bcmolt_log_entry_auto_cfg_id_stat_alarm_raised                                          BCMOLT_LOG_ENTRY_AUTO_CFG_ID_STAT_ALARM_RAISED
+#define bcmolt_log_entry_auto_cfg_id__num_of                                                    BCMOLT_LOG_ENTRY_AUTO_CFG_ID__NUM_OF
+#define bcmolt_logger_key_id_reserved                                                           BCMOLT_LOGGER_KEY_ID_RESERVED
+#define bcmolt_logger_key_id_file_id                                                            BCMOLT_LOGGER_KEY_ID_FILE_ID
+#define bcmolt_logger_key_id__num_of                                                            BCMOLT_LOGGER_KEY_ID__NUM_OF
+#define bcmolt_logger_cfg_id_buffer                                                             BCMOLT_LOGGER_CFG_ID_BUFFER
+#define bcmolt_logger_cfg_id_wrap_around                                                        BCMOLT_LOGGER_CFG_ID_WRAP_AROUND
+#define bcmolt_logger_cfg_id_clear_after_read                                                   BCMOLT_LOGGER_CFG_ID_CLEAR_AFTER_READ
+#define bcmolt_logger_cfg_id_enable_log                                                         BCMOLT_LOGGER_CFG_ID_ENABLE_LOG
+#define bcmolt_logger_cfg_id_log_names                                                          BCMOLT_LOGGER_CFG_ID_LOG_NAMES
+#define bcmolt_logger_cfg_id__num_of                                                            BCMOLT_LOGGER_CFG_ID__NUM_OF
+#define bcmolt_logger_stat_id_lines_in_log                                                      BCMOLT_LOGGER_STAT_ID_LINES_IN_LOG
+#define bcmolt_logger_stat_id__num_of                                                           BCMOLT_LOGGER_STAT_ID__NUM_OF
+#define bcmolt_logger_stat_cfg_id_cfg                                                           BCMOLT_LOGGER_STAT_CFG_ID_CFG
+#define bcmolt_logger_stat_cfg_id__num_of                                                       BCMOLT_LOGGER_STAT_CFG_ID__NUM_OF
+#define bcmolt_logger_stat_alarm_cleared_id_stat                                                BCMOLT_LOGGER_STAT_ALARM_CLEARED_ID_STAT
+#define bcmolt_logger_stat_alarm_cleared_id__num_of                                             BCMOLT_LOGGER_STAT_ALARM_CLEARED_ID__NUM_OF
+#define bcmolt_logger_stat_alarm_raised_id_stat                                                 BCMOLT_LOGGER_STAT_ALARM_RAISED_ID_STAT
+#define bcmolt_logger_stat_alarm_raised_id__num_of                                              BCMOLT_LOGGER_STAT_ALARM_RAISED_ID__NUM_OF
+#define bcmolt_logger_auto_cfg_id_stat_alarm_cleared                                            BCMOLT_LOGGER_AUTO_CFG_ID_STAT_ALARM_CLEARED
+#define bcmolt_logger_auto_cfg_id_stat_alarm_raised                                             BCMOLT_LOGGER_AUTO_CFG_ID_STAT_ALARM_RAISED
+#define bcmolt_logger_auto_cfg_id__num_of                                                       BCMOLT_LOGGER_AUTO_CFG_ID__NUM_OF
+#define bcmolt_logger_clear_log_id__num_of                                                      BCMOLT_LOGGER_CLEAR_LOG_ID__NUM_OF
+#define bcmolt_nni_key_id_pon_ni                                                                BCMOLT_NNI_KEY_ID_PON_NI
+#define bcmolt_nni_key_id__num_of                                                               BCMOLT_NNI_KEY_ID__NUM_OF
+#define bcmolt_nni_cfg_id_remote_loopback                                                       BCMOLT_NNI_CFG_ID_REMOTE_LOOPBACK
+#define bcmolt_nni_cfg_id_line_loopback                                                         BCMOLT_NNI_CFG_ID_LINE_LOOPBACK
+#define bcmolt_nni_cfg_id_mac_address                                                           BCMOLT_NNI_CFG_ID_MAC_ADDRESS
+#define bcmolt_nni_cfg_id_nni_status                                                            BCMOLT_NNI_CFG_ID_NNI_STATUS
+#define bcmolt_nni_cfg_id_nni_backup_status                                                     BCMOLT_NNI_CFG_ID_NNI_BACKUP_STATUS
+#define bcmolt_nni_cfg_id_active_nni                                                            BCMOLT_NNI_CFG_ID_ACTIVE_NNI
+#define bcmolt_nni_cfg_id_nni_status_polling_interval_ms                                        BCMOLT_NNI_CFG_ID_NNI_STATUS_POLLING_INTERVAL_MS
+#define bcmolt_nni_cfg_id_autoswitch                                                            BCMOLT_NNI_CFG_ID_AUTOSWITCH
+#define bcmolt_nni_cfg_id_flow_control                                                          BCMOLT_NNI_CFG_ID_FLOW_CONTROL
+#define bcmolt_nni_cfg_id__num_of                                                               BCMOLT_NNI_CFG_ID__NUM_OF
+#define bcmolt_nni_stat_id_rx_frames_64                                                         BCMOLT_NNI_STAT_ID_RX_FRAMES_64
+#define bcmolt_nni_stat_id_rx_frames_65_127                                                     BCMOLT_NNI_STAT_ID_RX_FRAMES_65_127
+#define bcmolt_nni_stat_id_rx_frames_128_255                                                    BCMOLT_NNI_STAT_ID_RX_FRAMES_128_255
+#define bcmolt_nni_stat_id_rx_frames_256_511                                                    BCMOLT_NNI_STAT_ID_RX_FRAMES_256_511
+#define bcmolt_nni_stat_id_rx_frames_512_1023                                                   BCMOLT_NNI_STAT_ID_RX_FRAMES_512_1023
+#define bcmolt_nni_stat_id_rx_frames_1024_1518                                                  BCMOLT_NNI_STAT_ID_RX_FRAMES_1024_1518
+#define bcmolt_nni_stat_id_rx_frames_1519_2047                                                  BCMOLT_NNI_STAT_ID_RX_FRAMES_1519_2047
+#define bcmolt_nni_stat_id_rx_frames_2048_4095                                                  BCMOLT_NNI_STAT_ID_RX_FRAMES_2048_4095
+#define bcmolt_nni_stat_id_rx_frames_4096_9216                                                  BCMOLT_NNI_STAT_ID_RX_FRAMES_4096_9216
+#define bcmolt_nni_stat_id_rx_frames_9217_16383                                                 BCMOLT_NNI_STAT_ID_RX_FRAMES_9217_16383
+#define bcmolt_nni_stat_id_rx_frames                                                            BCMOLT_NNI_STAT_ID_RX_FRAMES
+#define bcmolt_nni_stat_id_rx_bytes                                                             BCMOLT_NNI_STAT_ID_RX_BYTES
+#define bcmolt_nni_stat_id_rx_good_frames                                                       BCMOLT_NNI_STAT_ID_RX_GOOD_FRAMES
+#define bcmolt_nni_stat_id_rx_unicast_frames                                                    BCMOLT_NNI_STAT_ID_RX_UNICAST_FRAMES
+#define bcmolt_nni_stat_id_rx_multicast_frames                                                  BCMOLT_NNI_STAT_ID_RX_MULTICAST_FRAMES
+#define bcmolt_nni_stat_id_rx_broadcast_frames                                                  BCMOLT_NNI_STAT_ID_RX_BROADCAST_FRAMES
+#define bcmolt_nni_stat_id_rx_fcs_errors                                                        BCMOLT_NNI_STAT_ID_RX_FCS_ERRORS
+#define bcmolt_nni_stat_id_rx_control_frames                                                    BCMOLT_NNI_STAT_ID_RX_CONTROL_FRAMES
+#define bcmolt_nni_stat_id_rx_pause_frames                                                      BCMOLT_NNI_STAT_ID_RX_PAUSE_FRAMES
+#define bcmolt_nni_stat_id_rx_pfc_frames                                                        BCMOLT_NNI_STAT_ID_RX_PFC_FRAMES
+#define bcmolt_nni_stat_id_rx_unsupported_opcode                                                BCMOLT_NNI_STAT_ID_RX_UNSUPPORTED_OPCODE
+#define bcmolt_nni_stat_id_rx_unsupported_da                                                    BCMOLT_NNI_STAT_ID_RX_UNSUPPORTED_DA
+#define bcmolt_nni_stat_id_rx_alignment_errors                                                  BCMOLT_NNI_STAT_ID_RX_ALIGNMENT_ERRORS
+#define bcmolt_nni_stat_id_rx_length_out_of_range                                               BCMOLT_NNI_STAT_ID_RX_LENGTH_OUT_OF_RANGE
+#define bcmolt_nni_stat_id_rx_code_errors                                                       BCMOLT_NNI_STAT_ID_RX_CODE_ERRORS
+#define bcmolt_nni_stat_id_rx_oversized_frames                                                  BCMOLT_NNI_STAT_ID_RX_OVERSIZED_FRAMES
+#define bcmolt_nni_stat_id_rx_jabber_frames                                                     BCMOLT_NNI_STAT_ID_RX_JABBER_FRAMES
+#define bcmolt_nni_stat_id_rx_mtu_check_errors                                                  BCMOLT_NNI_STAT_ID_RX_MTU_CHECK_ERRORS
+#define bcmolt_nni_stat_id_rx_promiscuous_frames                                                BCMOLT_NNI_STAT_ID_RX_PROMISCUOUS_FRAMES
+#define bcmolt_nni_stat_id_rx_vlan_frames                                                       BCMOLT_NNI_STAT_ID_RX_VLAN_FRAMES
+#define bcmolt_nni_stat_id_rx_double_vlan_frames                                                BCMOLT_NNI_STAT_ID_RX_DOUBLE_VLAN_FRAMES
+#define bcmolt_nni_stat_id_rx_truncated_frames                                                  BCMOLT_NNI_STAT_ID_RX_TRUNCATED_FRAMES
+#define bcmolt_nni_stat_id_rx_undersize_frames                                                  BCMOLT_NNI_STAT_ID_RX_UNDERSIZE_FRAMES
+#define bcmolt_nni_stat_id_rx_fragmented_frames                                                 BCMOLT_NNI_STAT_ID_RX_FRAGMENTED_FRAMES
+#define bcmolt_nni_stat_id_rx_runt_frames                                                       BCMOLT_NNI_STAT_ID_RX_RUNT_FRAMES
+#define bcmolt_nni_stat_id_tx_frames_64                                                         BCMOLT_NNI_STAT_ID_TX_FRAMES_64
+#define bcmolt_nni_stat_id_tx_frames_65_127                                                     BCMOLT_NNI_STAT_ID_TX_FRAMES_65_127
+#define bcmolt_nni_stat_id_tx_frames_128_255                                                    BCMOLT_NNI_STAT_ID_TX_FRAMES_128_255
+#define bcmolt_nni_stat_id_tx_frames_256_511                                                    BCMOLT_NNI_STAT_ID_TX_FRAMES_256_511
+#define bcmolt_nni_stat_id_tx_frames_512_1023                                                   BCMOLT_NNI_STAT_ID_TX_FRAMES_512_1023
+#define bcmolt_nni_stat_id_tx_frames_1024_1518                                                  BCMOLT_NNI_STAT_ID_TX_FRAMES_1024_1518
+#define bcmolt_nni_stat_id_tx_frames_1519_2047                                                  BCMOLT_NNI_STAT_ID_TX_FRAMES_1519_2047
+#define bcmolt_nni_stat_id_tx_frames_2048_4095                                                  BCMOLT_NNI_STAT_ID_TX_FRAMES_2048_4095
+#define bcmolt_nni_stat_id_tx_frames_4096_9216                                                  BCMOLT_NNI_STAT_ID_TX_FRAMES_4096_9216
+#define bcmolt_nni_stat_id_tx_frames_9217_16383                                                 BCMOLT_NNI_STAT_ID_TX_FRAMES_9217_16383
+#define bcmolt_nni_stat_id_tx_frames                                                            BCMOLT_NNI_STAT_ID_TX_FRAMES
+#define bcmolt_nni_stat_id_tx_bytes                                                             BCMOLT_NNI_STAT_ID_TX_BYTES
+#define bcmolt_nni_stat_id_tx_good_frames                                                       BCMOLT_NNI_STAT_ID_TX_GOOD_FRAMES
+#define bcmolt_nni_stat_id_tx_unicast_frames                                                    BCMOLT_NNI_STAT_ID_TX_UNICAST_FRAMES
+#define bcmolt_nni_stat_id_tx_multicast_frames                                                  BCMOLT_NNI_STAT_ID_TX_MULTICAST_FRAMES
+#define bcmolt_nni_stat_id_tx_broadcast_frames                                                  BCMOLT_NNI_STAT_ID_TX_BROADCAST_FRAMES
+#define bcmolt_nni_stat_id_tx_pause_frames                                                      BCMOLT_NNI_STAT_ID_TX_PAUSE_FRAMES
+#define bcmolt_nni_stat_id_tx_pfc_frames                                                        BCMOLT_NNI_STAT_ID_TX_PFC_FRAMES
+#define bcmolt_nni_stat_id_tx_jabber_frames                                                     BCMOLT_NNI_STAT_ID_TX_JABBER_FRAMES
+#define bcmolt_nni_stat_id_tx_fcs_errors                                                        BCMOLT_NNI_STAT_ID_TX_FCS_ERRORS
+#define bcmolt_nni_stat_id_tx_control_frames                                                    BCMOLT_NNI_STAT_ID_TX_CONTROL_FRAMES
+#define bcmolt_nni_stat_id_tx_oversize_frames                                                   BCMOLT_NNI_STAT_ID_TX_OVERSIZE_FRAMES
+#define bcmolt_nni_stat_id_tx_fragmented_frames                                                 BCMOLT_NNI_STAT_ID_TX_FRAGMENTED_FRAMES
+#define bcmolt_nni_stat_id_tx_error_frames                                                      BCMOLT_NNI_STAT_ID_TX_ERROR_FRAMES
+#define bcmolt_nni_stat_id_tx_vlan_frames                                                       BCMOLT_NNI_STAT_ID_TX_VLAN_FRAMES
+#define bcmolt_nni_stat_id_tx_double_vlan_frames                                                BCMOLT_NNI_STAT_ID_TX_DOUBLE_VLAN_FRAMES
+#define bcmolt_nni_stat_id_tx_runt_frames                                                       BCMOLT_NNI_STAT_ID_TX_RUNT_FRAMES
+#define bcmolt_nni_stat_id_tx_underrun_frames                                                   BCMOLT_NNI_STAT_ID_TX_UNDERRUN_FRAMES
+#define bcmolt_nni_stat_id__num_of                                                              BCMOLT_NNI_STAT_ID__NUM_OF
+#define bcmolt_nni_stat_cfg_id_cfg                                                              BCMOLT_NNI_STAT_CFG_ID_CFG
+#define bcmolt_nni_stat_cfg_id__num_of                                                          BCMOLT_NNI_STAT_CFG_ID__NUM_OF
+#define bcmolt_nni_stat_alarm_cleared_id_stat                                                   BCMOLT_NNI_STAT_ALARM_CLEARED_ID_STAT
+#define bcmolt_nni_stat_alarm_cleared_id__num_of                                                BCMOLT_NNI_STAT_ALARM_CLEARED_ID__NUM_OF
+#define bcmolt_nni_stat_alarm_raised_id_stat                                                    BCMOLT_NNI_STAT_ALARM_RAISED_ID_STAT
+#define bcmolt_nni_stat_alarm_raised_id__num_of                                                 BCMOLT_NNI_STAT_ALARM_RAISED_ID__NUM_OF
+#define bcmolt_nni_status_changed_id_new_status                                                 BCMOLT_NNI_STATUS_CHANGED_ID_NEW_STATUS
+#define bcmolt_nni_status_changed_id_link                                                       BCMOLT_NNI_STATUS_CHANGED_ID_LINK
+#define bcmolt_nni_status_changed_id_previous_active                                            BCMOLT_NNI_STATUS_CHANGED_ID_PREVIOUS_ACTIVE
+#define bcmolt_nni_status_changed_id_new_active                                                 BCMOLT_NNI_STATUS_CHANGED_ID_NEW_ACTIVE
+#define bcmolt_nni_status_changed_id__num_of                                                    BCMOLT_NNI_STATUS_CHANGED_ID__NUM_OF
+#define bcmolt_nni_auto_cfg_id_stat_alarm_cleared                                               BCMOLT_NNI_AUTO_CFG_ID_STAT_ALARM_CLEARED
+#define bcmolt_nni_auto_cfg_id_stat_alarm_raised                                                BCMOLT_NNI_AUTO_CFG_ID_STAT_ALARM_RAISED
+#define bcmolt_nni_auto_cfg_id_status_changed                                                   BCMOLT_NNI_AUTO_CFG_ID_STATUS_CHANGED
+#define bcmolt_nni_auto_cfg_id__num_of                                                          BCMOLT_NNI_AUTO_CFG_ID__NUM_OF
+#define bcmolt_nni_serdes_key_id_pon_ni                                                         BCMOLT_NNI_SERDES_KEY_ID_PON_NI
+#define bcmolt_nni_serdes_key_id_instance                                                       BCMOLT_NNI_SERDES_KEY_ID_INSTANCE
+#define bcmolt_nni_serdes_key_id__num_of                                                        BCMOLT_NNI_SERDES_KEY_ID__NUM_OF
+#define bcmolt_nni_serdes_cfg_id_rx_vga                                                         BCMOLT_NNI_SERDES_CFG_ID_RX_VGA
+#define bcmolt_nni_serdes_cfg_id_rx_pf                                                          BCMOLT_NNI_SERDES_CFG_ID_RX_PF
+#define bcmolt_nni_serdes_cfg_id_rx_lfpf                                                        BCMOLT_NNI_SERDES_CFG_ID_RX_LFPF
+#define bcmolt_nni_serdes_cfg_id_rx_dfe1                                                        BCMOLT_NNI_SERDES_CFG_ID_RX_DFE1
+#define bcmolt_nni_serdes_cfg_id_rx_dfe2                                                        BCMOLT_NNI_SERDES_CFG_ID_RX_DFE2
+#define bcmolt_nni_serdes_cfg_id_rx_dfe3                                                        BCMOLT_NNI_SERDES_CFG_ID_RX_DFE3
+#define bcmolt_nni_serdes_cfg_id_rx_dfe4                                                        BCMOLT_NNI_SERDES_CFG_ID_RX_DFE4
+#define bcmolt_nni_serdes_cfg_id_rx_dfe5                                                        BCMOLT_NNI_SERDES_CFG_ID_RX_DFE5
+#define bcmolt_nni_serdes_cfg_id_tx_pre                                                         BCMOLT_NNI_SERDES_CFG_ID_TX_PRE
+#define bcmolt_nni_serdes_cfg_id_tx_main                                                        BCMOLT_NNI_SERDES_CFG_ID_TX_MAIN
+#define bcmolt_nni_serdes_cfg_id_tx_post1                                                       BCMOLT_NNI_SERDES_CFG_ID_TX_POST1
+#define bcmolt_nni_serdes_cfg_id_tx_post2                                                       BCMOLT_NNI_SERDES_CFG_ID_TX_POST2
+#define bcmolt_nni_serdes_cfg_id_tx_post3                                                       BCMOLT_NNI_SERDES_CFG_ID_TX_POST3
+#define bcmolt_nni_serdes_cfg_id_tx_amp                                                         BCMOLT_NNI_SERDES_CFG_ID_TX_AMP
+#define bcmolt_nni_serdes_cfg_id__num_of                                                        BCMOLT_NNI_SERDES_CFG_ID__NUM_OF
+#define bcmolt_software_error_key_id_reserved                                                   BCMOLT_SOFTWARE_ERROR_KEY_ID_RESERVED
+#define bcmolt_software_error_key_id_idx                                                        BCMOLT_SOFTWARE_ERROR_KEY_ID_IDX
+#define bcmolt_software_error_key_id__num_of                                                    BCMOLT_SOFTWARE_ERROR_KEY_ID__NUM_OF
+#define bcmolt_software_error_cfg_id_entry                                                      BCMOLT_SOFTWARE_ERROR_CFG_ID_ENTRY
+#define bcmolt_software_error_cfg_id__num_of                                                    BCMOLT_SOFTWARE_ERROR_CFG_ID__NUM_OF
+#define bcmolt_trx_calibration_key_id_reserved                                                  BCMOLT_TRX_CALIBRATION_KEY_ID_RESERVED
+#define bcmolt_trx_calibration_key_id__num_of                                                   BCMOLT_TRX_CALIBRATION_KEY_ID__NUM_OF
+#define bcmolt_trx_calibration_capture_window_and_statistic_completed_id_data_window            BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_DATA_WINDOW
+#define bcmolt_trx_calibration_capture_window_and_statistic_completed_id_strobe_window          BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_STROBE_WINDOW
+#define bcmolt_trx_calibration_capture_window_and_statistic_completed_id_edge_rise_min_min      BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_RISE_MIN_MIN
+#define bcmolt_trx_calibration_capture_window_and_statistic_completed_id_edge_rise_min_max      BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_RISE_MIN_MAX
+#define bcmolt_trx_calibration_capture_window_and_statistic_completed_id_edge_rise_max_min      BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_RISE_MAX_MIN
+#define bcmolt_trx_calibration_capture_window_and_statistic_completed_id_edge_rise_max_max      BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_RISE_MAX_MAX
+#define bcmolt_trx_calibration_capture_window_and_statistic_completed_id_edge_fall_min_min      BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_FALL_MIN_MIN
+#define bcmolt_trx_calibration_capture_window_and_statistic_completed_id_edge_fall_min_max      BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_FALL_MIN_MAX
+#define bcmolt_trx_calibration_capture_window_and_statistic_completed_id_edge_fall_max_min      BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_FALL_MAX_MIN
+#define bcmolt_trx_calibration_capture_window_and_statistic_completed_id_edge_fall_max_max      BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_FALL_MAX_MAX
+#define bcmolt_trx_calibration_capture_window_and_statistic_completed_id_result                 BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_RESULT
+#define bcmolt_trx_calibration_capture_window_and_statistic_completed_id__num_of                BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID__NUM_OF
+#define bcmolt_trx_calibration_auto_cfg_id_capture_window_and_statistic_completed               BCMOLT_TRX_CALIBRATION_AUTO_CFG_ID_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED
+#define bcmolt_trx_calibration_auto_cfg_id__num_of                                              BCMOLT_TRX_CALIBRATION_AUTO_CFG_ID__NUM_OF
+#define bcmolt_trx_calibration_start_capture_window_id_pon_ni                                   BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_PON_NI
+#define bcmolt_trx_calibration_start_capture_window_id_trigger                                  BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_TRIGGER
+#define bcmolt_trx_calibration_start_capture_window_id_strobe                                   BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_STROBE
+#define bcmolt_trx_calibration_start_capture_window_id_window_mode                              BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_WINDOW_MODE
+#define bcmolt_trx_calibration_start_capture_window_id_onu_id                                   BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_ONU_ID
+#define bcmolt_trx_calibration_start_capture_window_id_trigger_position                         BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_TRIGGER_POSITION
+#define bcmolt_trx_calibration_start_capture_window_id_stop_due_to_corrupt_strobe               BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_STOP_DUE_TO_CORRUPT_STROBE
+#define bcmolt_trx_calibration_start_capture_window_id_start_offset                             BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_START_OFFSET
+#define bcmolt_trx_calibration_start_capture_window_id_end_offset                               BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_END_OFFSET
+#define bcmolt_trx_calibration_start_capture_window_id_number_of_cycles                         BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_NUMBER_OF_CYCLES
+#define bcmolt_trx_calibration_start_capture_window_id__num_of                                  BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID__NUM_OF
+#define bcmolt_trx_calibration_stop_capture_window_id_pon_ni                                    BCMOLT_TRX_CALIBRATION_STOP_CAPTURE_WINDOW_ID_PON_NI
+#define bcmolt_trx_calibration_stop_capture_window_id__num_of                                   BCMOLT_TRX_CALIBRATION_STOP_CAPTURE_WINDOW_ID__NUM_OF
+#define bcmolt_xgpon_alloc_key_id_pon_ni                                                        BCMOLT_XGPON_ALLOC_KEY_ID_PON_NI
+#define bcmolt_xgpon_alloc_key_id_alloc_id                                                      BCMOLT_XGPON_ALLOC_KEY_ID_ALLOC_ID
+#define bcmolt_xgpon_alloc_key_id__num_of                                                       BCMOLT_XGPON_ALLOC_KEY_ID__NUM_OF
+#define bcmolt_xgpon_alloc_cfg_id_state                                                         BCMOLT_XGPON_ALLOC_CFG_ID_STATE
+#define bcmolt_xgpon_alloc_cfg_id_sla                                                           BCMOLT_XGPON_ALLOC_CFG_ID_SLA
+#define bcmolt_xgpon_alloc_cfg_id_onu_id                                                        BCMOLT_XGPON_ALLOC_CFG_ID_ONU_ID
+#define bcmolt_xgpon_alloc_cfg_id_collect_stats                                                 BCMOLT_XGPON_ALLOC_CFG_ID_COLLECT_STATS
+#define bcmolt_xgpon_alloc_cfg_id__num_of                                                       BCMOLT_XGPON_ALLOC_CFG_ID__NUM_OF
+#define bcmolt_xgpon_alloc_stat_id_rx_bytes                                                     BCMOLT_XGPON_ALLOC_STAT_ID_RX_BYTES
+#define bcmolt_xgpon_alloc_stat_id__num_of                                                      BCMOLT_XGPON_ALLOC_STAT_ID__NUM_OF
+#define bcmolt_xgpon_alloc_stat_cfg_id_cfg                                                      BCMOLT_XGPON_ALLOC_STAT_CFG_ID_CFG
+#define bcmolt_xgpon_alloc_stat_cfg_id__num_of                                                  BCMOLT_XGPON_ALLOC_STAT_CFG_ID__NUM_OF
+#define bcmolt_xgpon_alloc_configuration_completed_id_status                                    BCMOLT_XGPON_ALLOC_CONFIGURATION_COMPLETED_ID_STATUS
+#define bcmolt_xgpon_alloc_configuration_completed_id_new_state                                 BCMOLT_XGPON_ALLOC_CONFIGURATION_COMPLETED_ID_NEW_STATE
+#define bcmolt_xgpon_alloc_configuration_completed_id__num_of                                   BCMOLT_XGPON_ALLOC_CONFIGURATION_COMPLETED_ID__NUM_OF
+#define bcmolt_xgpon_alloc_get_alloc_stats_completed_id_status                                  BCMOLT_XGPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_STATUS
+#define bcmolt_xgpon_alloc_get_alloc_stats_completed_id_average_nsr_used                        BCMOLT_XGPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_NSR_USED
+#define bcmolt_xgpon_alloc_get_alloc_stats_completed_id_average_nsr_allocated                   BCMOLT_XGPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_NSR_ALLOCATED
+#define bcmolt_xgpon_alloc_get_alloc_stats_completed_id_average_sr_report                       BCMOLT_XGPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_SR_REPORT
+#define bcmolt_xgpon_alloc_get_alloc_stats_completed_id__num_of                                 BCMOLT_XGPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID__NUM_OF
+#define bcmolt_xgpon_alloc_stat_alarm_cleared_id_stat                                           BCMOLT_XGPON_ALLOC_STAT_ALARM_CLEARED_ID_STAT
+#define bcmolt_xgpon_alloc_stat_alarm_cleared_id__num_of                                        BCMOLT_XGPON_ALLOC_STAT_ALARM_CLEARED_ID__NUM_OF
+#define bcmolt_xgpon_alloc_stat_alarm_raised_id_stat                                            BCMOLT_XGPON_ALLOC_STAT_ALARM_RAISED_ID_STAT
+#define bcmolt_xgpon_alloc_stat_alarm_raised_id__num_of                                         BCMOLT_XGPON_ALLOC_STAT_ALARM_RAISED_ID__NUM_OF
+#define bcmolt_xgpon_alloc_auto_cfg_id_configuration_completed                                  BCMOLT_XGPON_ALLOC_AUTO_CFG_ID_CONFIGURATION_COMPLETED
+#define bcmolt_xgpon_alloc_auto_cfg_id_get_alloc_stats_completed                                BCMOLT_XGPON_ALLOC_AUTO_CFG_ID_GET_ALLOC_STATS_COMPLETED
+#define bcmolt_xgpon_alloc_auto_cfg_id_stat_alarm_cleared                                       BCMOLT_XGPON_ALLOC_AUTO_CFG_ID_STAT_ALARM_CLEARED
+#define bcmolt_xgpon_alloc_auto_cfg_id_stat_alarm_raised                                        BCMOLT_XGPON_ALLOC_AUTO_CFG_ID_STAT_ALARM_RAISED
+#define bcmolt_xgpon_alloc_auto_cfg_id__num_of                                                  BCMOLT_XGPON_ALLOC_AUTO_CFG_ID__NUM_OF
+#define bcmolt_xgpon_alloc_get_stats_id_num_of_cycles                                           BCMOLT_XGPON_ALLOC_GET_STATS_ID_NUM_OF_CYCLES
+#define bcmolt_xgpon_alloc_get_stats_id__num_of                                                 BCMOLT_XGPON_ALLOC_GET_STATS_ID__NUM_OF
+#define bcmolt_xgpon_alloc_set_state_id_state                                                   BCMOLT_XGPON_ALLOC_SET_STATE_ID_STATE
+#define bcmolt_xgpon_alloc_set_state_id__num_of                                                 BCMOLT_XGPON_ALLOC_SET_STATE_ID__NUM_OF
+#define bcmolt_xgpon_gem_port_key_id_pon_ni                                                     BCMOLT_XGPON_GEM_PORT_KEY_ID_PON_NI
+#define bcmolt_xgpon_gem_port_key_id_gem_port_id                                                BCMOLT_XGPON_GEM_PORT_KEY_ID_GEM_PORT_ID
+#define bcmolt_xgpon_gem_port_key_id__num_of                                                    BCMOLT_XGPON_GEM_PORT_KEY_ID__NUM_OF
+#define bcmolt_xgpon_gem_port_cfg_id_configuration                                              BCMOLT_XGPON_GEM_PORT_CFG_ID_CONFIGURATION
+#define bcmolt_xgpon_gem_port_cfg_id_onu_id                                                     BCMOLT_XGPON_GEM_PORT_CFG_ID_ONU_ID
+#define bcmolt_xgpon_gem_port_cfg_id_gem_port_state                                             BCMOLT_XGPON_GEM_PORT_CFG_ID_GEM_PORT_STATE
+#define bcmolt_xgpon_gem_port_cfg_id_encryption_mode                                            BCMOLT_XGPON_GEM_PORT_CFG_ID_ENCRYPTION_MODE
+#define bcmolt_xgpon_gem_port_cfg_id_upstream_destination_queue                                 BCMOLT_XGPON_GEM_PORT_CFG_ID_UPSTREAM_DESTINATION_QUEUE
+#define bcmolt_xgpon_gem_port_cfg_id_control                                                    BCMOLT_XGPON_GEM_PORT_CFG_ID_CONTROL
+#define bcmolt_xgpon_gem_port_cfg_id__num_of                                                    BCMOLT_XGPON_GEM_PORT_CFG_ID__NUM_OF
+#define bcmolt_xgpon_gem_port_stat_id_tx_bytes                                                  BCMOLT_XGPON_GEM_PORT_STAT_ID_TX_BYTES
+#define bcmolt_xgpon_gem_port_stat_id_tx_packets                                                BCMOLT_XGPON_GEM_PORT_STAT_ID_TX_PACKETS
+#define bcmolt_xgpon_gem_port_stat_id_rx_packets                                                BCMOLT_XGPON_GEM_PORT_STAT_ID_RX_PACKETS
+#define bcmolt_xgpon_gem_port_stat_id_rx_bytes                                                  BCMOLT_XGPON_GEM_PORT_STAT_ID_RX_BYTES
+#define bcmolt_xgpon_gem_port_stat_id__num_of                                                   BCMOLT_XGPON_GEM_PORT_STAT_ID__NUM_OF
+#define bcmolt_xgpon_gem_port_stat_cfg_id_cfg                                                   BCMOLT_XGPON_GEM_PORT_STAT_CFG_ID_CFG
+#define bcmolt_xgpon_gem_port_stat_cfg_id__num_of                                               BCMOLT_XGPON_GEM_PORT_STAT_CFG_ID__NUM_OF
+#define bcmolt_xgpon_gem_port_stat_alarm_cleared_id_stat                                        BCMOLT_XGPON_GEM_PORT_STAT_ALARM_CLEARED_ID_STAT
+#define bcmolt_xgpon_gem_port_stat_alarm_cleared_id__num_of                                     BCMOLT_XGPON_GEM_PORT_STAT_ALARM_CLEARED_ID__NUM_OF
+#define bcmolt_xgpon_gem_port_stat_alarm_raised_id_stat                                         BCMOLT_XGPON_GEM_PORT_STAT_ALARM_RAISED_ID_STAT
+#define bcmolt_xgpon_gem_port_stat_alarm_raised_id__num_of                                      BCMOLT_XGPON_GEM_PORT_STAT_ALARM_RAISED_ID__NUM_OF
+#define bcmolt_xgpon_gem_port_auto_cfg_id_stat_alarm_cleared                                    BCMOLT_XGPON_GEM_PORT_AUTO_CFG_ID_STAT_ALARM_CLEARED
+#define bcmolt_xgpon_gem_port_auto_cfg_id_stat_alarm_raised                                     BCMOLT_XGPON_GEM_PORT_AUTO_CFG_ID_STAT_ALARM_RAISED
+#define bcmolt_xgpon_gem_port_auto_cfg_id__num_of                                               BCMOLT_XGPON_GEM_PORT_AUTO_CFG_ID__NUM_OF
+#define bcmolt_xgpon_iwf_key_id_pon_ni                                                          BCMOLT_XGPON_IWF_KEY_ID_PON_NI
+#define bcmolt_xgpon_iwf_key_id__num_of                                                         BCMOLT_XGPON_IWF_KEY_ID__NUM_OF
+#define bcmolt_xgpon_iwf_cfg_id_us_otag_direct_tpid                                             BCMOLT_XGPON_IWF_CFG_ID_US_OTAG_DIRECT_TPID
+#define bcmolt_xgpon_iwf_cfg_id_ds_tpid                                                         BCMOLT_XGPON_IWF_CFG_ID_DS_TPID
+#define bcmolt_xgpon_iwf_cfg_id__num_of                                                         BCMOLT_XGPON_IWF_CFG_ID__NUM_OF
+#define bcmolt_xgpon_ni_key_id_pon_ni                                                           BCMOLT_XGPON_NI_KEY_ID_PON_NI
+#define bcmolt_xgpon_ni_key_id__num_of                                                          BCMOLT_XGPON_NI_KEY_ID__NUM_OF
+#define bcmolt_xgpon_ni_cfg_id_hw_pon_id                                                        BCMOLT_XGPON_NI_CFG_ID_HW_PON_ID
+#define bcmolt_xgpon_ni_cfg_id_available_bandwidth                                              BCMOLT_XGPON_NI_CFG_ID_AVAILABLE_BANDWIDTH
+#define bcmolt_xgpon_ni_cfg_id_number_of_active_onus                                            BCMOLT_XGPON_NI_CFG_ID_NUMBER_OF_ACTIVE_ONUS
+#define bcmolt_xgpon_ni_cfg_id_pon_status                                                       BCMOLT_XGPON_NI_CFG_ID_PON_STATUS
+#define bcmolt_xgpon_ni_cfg_id_pon_distance                                                     BCMOLT_XGPON_NI_CFG_ID_PON_DISTANCE
+#define bcmolt_xgpon_ni_cfg_id_ranging_window_size                                              BCMOLT_XGPON_NI_CFG_ID_RANGING_WINDOW_SIZE
+#define bcmolt_xgpon_ni_cfg_id_eqd_cycles_number                                                BCMOLT_XGPON_NI_CFG_ID_EQD_CYCLES_NUMBER
+#define bcmolt_xgpon_ni_cfg_id_drift_control                                                    BCMOLT_XGPON_NI_CFG_ID_DRIFT_CONTROL
+#define bcmolt_xgpon_ni_cfg_id_los_alarm_threshold                                              BCMOLT_XGPON_NI_CFG_ID_LOS_ALARM_THRESHOLD
+#define bcmolt_xgpon_ni_cfg_id_los_initial_value                                                BCMOLT_XGPON_NI_CFG_ID_LOS_INITIAL_VALUE
+#define bcmolt_xgpon_ni_cfg_id_onu_alarms_thresholds                                            BCMOLT_XGPON_NI_CFG_ID_ONU_ALARMS_THRESHOLDS
+#define bcmolt_xgpon_ni_cfg_id_ber_monitor                                                      BCMOLT_XGPON_NI_CFG_ID_BER_MONITOR
+#define bcmolt_xgpon_ni_cfg_id_onu_activation                                                   BCMOLT_XGPON_NI_CFG_ID_ONU_ACTIVATION
+#define bcmolt_xgpon_ni_cfg_id_sn_acquisition                                                   BCMOLT_XGPON_NI_CFG_ID_SN_ACQUISITION
+#define bcmolt_xgpon_ni_cfg_id_key_exchange                                                     BCMOLT_XGPON_NI_CFG_ID_KEY_EXCHANGE
+#define bcmolt_xgpon_ni_cfg_id_protection_switching                                             BCMOLT_XGPON_NI_CFG_ID_PROTECTION_SWITCHING
+#define bcmolt_xgpon_ni_cfg_id_protection_switching_debug                                       BCMOLT_XGPON_NI_CFG_ID_PROTECTION_SWITCHING_DEBUG
+#define bcmolt_xgpon_ni_cfg_id_cbr_rt_allocation_profile                                        BCMOLT_XGPON_NI_CFG_ID_CBR_RT_ALLOCATION_PROFILE
+#define bcmolt_xgpon_ni_cfg_id_cbr_nrt_allocation_profile                                       BCMOLT_XGPON_NI_CFG_ID_CBR_NRT_ALLOCATION_PROFILE
+#define bcmolt_xgpon_ni_cfg_id_power_management                                                 BCMOLT_XGPON_NI_CFG_ID_POWER_MANAGEMENT
+#define bcmolt_xgpon_ni_cfg_id_rogue_onu_detection_process                                      BCMOLT_XGPON_NI_CFG_ID_ROGUE_ONU_DETECTION_PROCESS
+#define bcmolt_xgpon_ni_cfg_id_periodic_standby_pon_monitoring                                  BCMOLT_XGPON_NI_CFG_ID_PERIODIC_STANDBY_PON_MONITORING
+#define bcmolt_xgpon_ni_cfg_id_dba_mode                                                         BCMOLT_XGPON_NI_CFG_ID_DBA_MODE
+#define bcmolt_xgpon_ni_cfg_id_ploam_handling                                                   BCMOLT_XGPON_NI_CFG_ID_PLOAM_HANDLING
+#define bcmolt_xgpon_ni_cfg_id_min_data_alloc_id                                                BCMOLT_XGPON_NI_CFG_ID_MIN_DATA_ALLOC_ID
+#define bcmolt_xgpon_ni_cfg_id_min_data_gem_port_id                                             BCMOLT_XGPON_NI_CFG_ID_MIN_DATA_GEM_PORT_ID
+#define bcmolt_xgpon_ni_cfg_id_multicast_key                                                    BCMOLT_XGPON_NI_CFG_ID_MULTICAST_KEY
+#define bcmolt_xgpon_ni_cfg_id_prbs_checker                                                     BCMOLT_XGPON_NI_CFG_ID_PRBS_CHECKER
+#define bcmolt_xgpon_ni_cfg_id_prbs_generator                                                   BCMOLT_XGPON_NI_CFG_ID_PRBS_GENERATOR
+#define bcmolt_xgpon_ni_cfg_id_prbs_status                                                      BCMOLT_XGPON_NI_CFG_ID_PRBS_STATUS
+#define bcmolt_xgpon_ni_cfg_id_automatic_onu_deactivation                                       BCMOLT_XGPON_NI_CFG_ID_AUTOMATIC_ONU_DEACTIVATION
+#define bcmolt_xgpon_ni_cfg_id_us_bandwidth_limit                                               BCMOLT_XGPON_NI_CFG_ID_US_BANDWIDTH_LIMIT
+#define bcmolt_xgpon_ni_cfg_id_all_onus                                                         BCMOLT_XGPON_NI_CFG_ID_ALL_ONUS
+#define bcmolt_xgpon_ni_cfg_id_all_mcast_gem_ports                                              BCMOLT_XGPON_NI_CFG_ID_ALL_MCAST_GEM_PORTS
+#define bcmolt_xgpon_ni_cfg_id_debug                                                            BCMOLT_XGPON_NI_CFG_ID_DEBUG
+#define bcmolt_xgpon_ni_cfg_id_onu_upgrade_params                                               BCMOLT_XGPON_NI_CFG_ID_ONU_UPGRADE_PARAMS
+#define bcmolt_xgpon_ni_cfg_id_ds_fec_mode                                                      BCMOLT_XGPON_NI_CFG_ID_DS_FEC_MODE
+#define bcmolt_xgpon_ni_cfg_id_dba_type                                                         BCMOLT_XGPON_NI_CFG_ID_DBA_TYPE
+#define bcmolt_xgpon_ni_cfg_id_onu_tuning                                                       BCMOLT_XGPON_NI_CFG_ID_ONU_TUNING
+#define bcmolt_xgpon_ni_cfg_id__num_of                                                          BCMOLT_XGPON_NI_CFG_ID__NUM_OF
+#define bcmolt_xgpon_ni_stat_id_fec_codewords                                                   BCMOLT_XGPON_NI_STAT_ID_FEC_CODEWORDS
+#define bcmolt_xgpon_ni_stat_id_bip32_bytes                                                     BCMOLT_XGPON_NI_STAT_ID_BIP32_BYTES
+#define bcmolt_xgpon_ni_stat_id_bip32_errors                                                    BCMOLT_XGPON_NI_STAT_ID_BIP32_ERRORS
+#define bcmolt_xgpon_ni_stat_id_rx_xgtc_headers                                                 BCMOLT_XGPON_NI_STAT_ID_RX_XGTC_HEADERS
+#define bcmolt_xgpon_ni_stat_id_rx_xgtc_corrected                                               BCMOLT_XGPON_NI_STAT_ID_RX_XGTC_CORRECTED
+#define bcmolt_xgpon_ni_stat_id_rx_xgtc_uncorrected                                             BCMOLT_XGPON_NI_STAT_ID_RX_XGTC_UNCORRECTED
+#define bcmolt_xgpon_ni_stat_id_rx_xgem                                                         BCMOLT_XGPON_NI_STAT_ID_RX_XGEM
+#define bcmolt_xgpon_ni_stat_id_rx_xgem_dropped                                                 BCMOLT_XGPON_NI_STAT_ID_RX_XGEM_DROPPED
+#define bcmolt_xgpon_ni_stat_id_rx_xgem_idle                                                    BCMOLT_XGPON_NI_STAT_ID_RX_XGEM_IDLE
+#define bcmolt_xgpon_ni_stat_id_rx_xgem_corrected                                               BCMOLT_XGPON_NI_STAT_ID_RX_XGEM_CORRECTED
+#define bcmolt_xgpon_ni_stat_id_rx_crc_error                                                    BCMOLT_XGPON_NI_STAT_ID_RX_CRC_ERROR
+#define bcmolt_xgpon_ni_stat_id_rx_fragment_error                                               BCMOLT_XGPON_NI_STAT_ID_RX_FRAGMENT_ERROR
+#define bcmolt_xgpon_ni_stat_id_rx_packets_dropped                                              BCMOLT_XGPON_NI_STAT_ID_RX_PACKETS_DROPPED
+#define bcmolt_xgpon_ni_stat_id_rx_dropped_too_short                                            BCMOLT_XGPON_NI_STAT_ID_RX_DROPPED_TOO_SHORT
+#define bcmolt_xgpon_ni_stat_id_rx_dropped_too_long                                             BCMOLT_XGPON_NI_STAT_ID_RX_DROPPED_TOO_LONG
+#define bcmolt_xgpon_ni_stat_id_rx_key_error                                                    BCMOLT_XGPON_NI_STAT_ID_RX_KEY_ERROR
+#define bcmolt_xgpon_ni_stat_id_tx_ploams                                                       BCMOLT_XGPON_NI_STAT_ID_TX_PLOAMS
+#define bcmolt_xgpon_ni_stat_id_rx_ploams_dropped                                               BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS_DROPPED
+#define bcmolt_xgpon_ni_stat_id_rx_allocations_valid                                            BCMOLT_XGPON_NI_STAT_ID_RX_ALLOCATIONS_VALID
+#define bcmolt_xgpon_ni_stat_id_rx_allocations_invalid                                          BCMOLT_XGPON_NI_STAT_ID_RX_ALLOCATIONS_INVALID
+#define bcmolt_xgpon_ni_stat_id_rx_allocations_disabled                                         BCMOLT_XGPON_NI_STAT_ID_RX_ALLOCATIONS_DISABLED
+#define bcmolt_xgpon_ni_stat_id_rx_ploams                                                       BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS
+#define bcmolt_xgpon_ni_stat_id_rx_ploams_non_idle                                              BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS_NON_IDLE
+#define bcmolt_xgpon_ni_stat_id_rx_ploams_error                                                 BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS_ERROR
+#define bcmolt_xgpon_ni_stat_id_rx_cpu                                                          BCMOLT_XGPON_NI_STAT_ID_RX_CPU
+#define bcmolt_xgpon_ni_stat_id_rx_omci                                                         BCMOLT_XGPON_NI_STAT_ID_RX_OMCI
+#define bcmolt_xgpon_ni_stat_id_rx_omci_packets_crc_error                                       BCMOLT_XGPON_NI_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR
+#define bcmolt_xgpon_ni_stat_id_tx_packets                                                      BCMOLT_XGPON_NI_STAT_ID_TX_PACKETS
+#define bcmolt_xgpon_ni_stat_id_tx_xgem                                                         BCMOLT_XGPON_NI_STAT_ID_TX_XGEM
+#define bcmolt_xgpon_ni_stat_id_tx_cpu                                                          BCMOLT_XGPON_NI_STAT_ID_TX_CPU
+#define bcmolt_xgpon_ni_stat_id_tx_omci                                                         BCMOLT_XGPON_NI_STAT_ID_TX_OMCI
+#define bcmolt_xgpon_ni_stat_id_tx_cpu_omci_packets_dropped                                     BCMOLT_XGPON_NI_STAT_ID_TX_CPU_OMCI_PACKETS_DROPPED
+#define bcmolt_xgpon_ni_stat_id_tx_dropped_illegal_length                                       BCMOLT_XGPON_NI_STAT_ID_TX_DROPPED_ILLEGAL_LENGTH
+#define bcmolt_xgpon_ni_stat_id_tx_dropped_tpid_miss                                            BCMOLT_XGPON_NI_STAT_ID_TX_DROPPED_TPID_MISS
+#define bcmolt_xgpon_ni_stat_id_tx_dropped_vid_miss                                             BCMOLT_XGPON_NI_STAT_ID_TX_DROPPED_VID_MISS
+#define bcmolt_xgpon_ni_stat_id__num_of                                                         BCMOLT_XGPON_NI_STAT_ID__NUM_OF
+#define bcmolt_xgpon_ni_stat_cfg_id_cfg                                                         BCMOLT_XGPON_NI_STAT_CFG_ID_CFG
+#define bcmolt_xgpon_ni_stat_cfg_id__num_of                                                     BCMOLT_XGPON_NI_STAT_CFG_ID__NUM_OF
+#define bcmolt_xgpon_ni_activate_all_onus_completed_id__num_of                                  BCMOLT_XGPON_NI_ACTIVATE_ALL_ONUS_COMPLETED_ID__NUM_OF
+#define bcmolt_xgpon_ni_cpu_packets_failure_id_error                                            BCMOLT_XGPON_NI_CPU_PACKETS_FAILURE_ID_ERROR
+#define bcmolt_xgpon_ni_cpu_packets_failure_id_gem_port_id                                      BCMOLT_XGPON_NI_CPU_PACKETS_FAILURE_ID_GEM_PORT_ID
+#define bcmolt_xgpon_ni_cpu_packets_failure_id__num_of                                          BCMOLT_XGPON_NI_CPU_PACKETS_FAILURE_ID__NUM_OF
+#define bcmolt_xgpon_ni_deactivate_all_onus_completed_id__num_of                                BCMOLT_XGPON_NI_DEACTIVATE_ALL_ONUS_COMPLETED_ID__NUM_OF
+#define bcmolt_xgpon_ni_disable_all_onus_completed_id__num_of                                   BCMOLT_XGPON_NI_DISABLE_ALL_ONUS_COMPLETED_ID__NUM_OF
+#define bcmolt_xgpon_ni_enable_all_onus_completed_id__num_of                                    BCMOLT_XGPON_NI_ENABLE_ALL_ONUS_COMPLETED_ID__NUM_OF
+#define bcmolt_xgpon_ni_los_id_status                                                           BCMOLT_XGPON_NI_LOS_ID_STATUS
+#define bcmolt_xgpon_ni_los_id__num_of                                                          BCMOLT_XGPON_NI_LOS_ID__NUM_OF
+#define bcmolt_xgpon_ni_onu_discovered_id_serial_number                                         BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_SERIAL_NUMBER
+#define bcmolt_xgpon_ni_onu_discovered_id_ranging_time                                          BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_RANGING_TIME
+#define bcmolt_xgpon_ni_onu_discovered_id_onu_id                                                BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_ONU_ID
+#define bcmolt_xgpon_ni_onu_discovered_id_upstream_line_rate_capabilities                       BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_UPSTREAM_LINE_RATE_CAPABILITIES
+#define bcmolt_xgpon_ni_onu_discovered_id_current_downstream_pon_id                             BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_CURRENT_DOWNSTREAM_PON_ID
+#define bcmolt_xgpon_ni_onu_discovered_id_current_upstream_pon_id                               BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_CURRENT_UPSTREAM_PON_ID
+#define bcmolt_xgpon_ni_onu_discovered_id_calibration_record                                    BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_CALIBRATION_RECORD
+#define bcmolt_xgpon_ni_onu_discovered_id_tuning_granularity                                    BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_TUNING_GRANULARITY
+#define bcmolt_xgpon_ni_onu_discovered_id_step_tuning_time                                      BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_STEP_TUNING_TIME
+#define bcmolt_xgpon_ni_onu_discovered_id_attenuation                                           BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_ATTENUATION
+#define bcmolt_xgpon_ni_onu_discovered_id_power_levelling_capabilities                          BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_POWER_LEVELLING_CAPABILITIES
+#define bcmolt_xgpon_ni_onu_discovered_id__num_of                                               BCMOLT_XGPON_NI_ONU_DISCOVERED_ID__NUM_OF
+#define bcmolt_xgpon_ni_onu_upgrade_complete_id_status                                          BCMOLT_XGPON_NI_ONU_UPGRADE_COMPLETE_ID_STATUS
+#define bcmolt_xgpon_ni_onu_upgrade_complete_id_list_of_failed_entities                         BCMOLT_XGPON_NI_ONU_UPGRADE_COMPLETE_ID_LIST_OF_FAILED_ENTITIES
+#define bcmolt_xgpon_ni_onu_upgrade_complete_id__num_of                                         BCMOLT_XGPON_NI_ONU_UPGRADE_COMPLETE_ID__NUM_OF
+#define bcmolt_xgpon_ni_protection_switching_onus_ranged_id_onus                                BCMOLT_XGPON_NI_PROTECTION_SWITCHING_ONUS_RANGED_ID_ONUS
+#define bcmolt_xgpon_ni_protection_switching_onus_ranged_id__num_of                             BCMOLT_XGPON_NI_PROTECTION_SWITCHING_ONUS_RANGED_ID__NUM_OF
+#define bcmolt_xgpon_ni_protection_switching_switchover_completed_id_result                     BCMOLT_XGPON_NI_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED_ID_RESULT
+#define bcmolt_xgpon_ni_protection_switching_switchover_completed_id__num_of                    BCMOLT_XGPON_NI_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED_ID__NUM_OF
+#define bcmolt_xgpon_ni_protection_switching_traffic_resume_id_result                           BCMOLT_XGPON_NI_PROTECTION_SWITCHING_TRAFFIC_RESUME_ID_RESULT
+#define bcmolt_xgpon_ni_protection_switching_traffic_resume_id__num_of                          BCMOLT_XGPON_NI_PROTECTION_SWITCHING_TRAFFIC_RESUME_ID__NUM_OF
+#define bcmolt_xgpon_ni_rogue_detection_completed_id_window_type                                BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_WINDOW_TYPE
+#define bcmolt_xgpon_ni_rogue_detection_completed_id_measurement_status                         BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_MEASUREMENT_STATUS
+#define bcmolt_xgpon_ni_rogue_detection_completed_id_alloc_id                                   BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_ALLOC_ID
+#define bcmolt_xgpon_ni_rogue_detection_completed_id_onu_id                                     BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_ONU_ID
+#define bcmolt_xgpon_ni_rogue_detection_completed_id_is_delineation                             BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_IS_DELINEATION
+#define bcmolt_xgpon_ni_rogue_detection_completed_id_is_ed                                      BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_IS_ED
+#define bcmolt_xgpon_ni_rogue_detection_completed_id_rx_data                                    BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_RX_DATA
+#define bcmolt_xgpon_ni_rogue_detection_completed_id_ploam_received_onu_id                      BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_PLOAM_RECEIVED_ONU_ID
+#define bcmolt_xgpon_ni_rogue_detection_completed_id_ploam_received_mic_error                   BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_PLOAM_RECEIVED_MIC_ERROR
+#define bcmolt_xgpon_ni_rogue_detection_completed_id__num_of                                    BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID__NUM_OF
+#define bcmolt_xgpon_ni_rogue_onu_special_map_cycle_start_id__num_of                            BCMOLT_XGPON_NI_ROGUE_ONU_SPECIAL_MAP_CYCLE_START_ID__NUM_OF
+#define bcmolt_xgpon_ni_serial_number_acquisition_cycle_start_id__num_of                        BCMOLT_XGPON_NI_SERIAL_NUMBER_ACQUISITION_CYCLE_START_ID__NUM_OF
+#define bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_id_number_of_detected_delimiter  BCMOLT_XGPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID_NUMBER_OF_DETECTED_DELIMITER
+#define bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_id_energy_detect_signal          BCMOLT_XGPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID_ENERGY_DETECT_SIGNAL
+#define bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_id__num_of                       BCMOLT_XGPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID__NUM_OF
+#define bcmolt_xgpon_ni_stat_alarm_cleared_id_stat                                              BCMOLT_XGPON_NI_STAT_ALARM_CLEARED_ID_STAT
+#define bcmolt_xgpon_ni_stat_alarm_cleared_id__num_of                                           BCMOLT_XGPON_NI_STAT_ALARM_CLEARED_ID__NUM_OF
+#define bcmolt_xgpon_ni_stat_alarm_raised_id_stat                                               BCMOLT_XGPON_NI_STAT_ALARM_RAISED_ID_STAT
+#define bcmolt_xgpon_ni_stat_alarm_raised_id__num_of                                            BCMOLT_XGPON_NI_STAT_ALARM_RAISED_ID__NUM_OF
+#define bcmolt_xgpon_ni_state_change_completed_id_result                                        BCMOLT_XGPON_NI_STATE_CHANGE_COMPLETED_ID_RESULT
+#define bcmolt_xgpon_ni_state_change_completed_id_previous_state                                BCMOLT_XGPON_NI_STATE_CHANGE_COMPLETED_ID_PREVIOUS_STATE
+#define bcmolt_xgpon_ni_state_change_completed_id_new_state                                     BCMOLT_XGPON_NI_STATE_CHANGE_COMPLETED_ID_NEW_STATE
+#define bcmolt_xgpon_ni_state_change_completed_id__num_of                                       BCMOLT_XGPON_NI_STATE_CHANGE_COMPLETED_ID__NUM_OF
+#define bcmolt_xgpon_ni_tod_request_completed_id_tod_string                                     BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_TOD_STRING
+#define bcmolt_xgpon_ni_tod_request_completed_id_sfc                                            BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_SFC
+#define bcmolt_xgpon_ni_tod_request_completed_id_rtc_offset_sec                                 BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_RTC_OFFSET_SEC
+#define bcmolt_xgpon_ni_tod_request_completed_id_rtc_offset_nsec                                BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_RTC_OFFSET_NSEC
+#define bcmolt_xgpon_ni_tod_request_completed_id_status                                         BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_STATUS
+#define bcmolt_xgpon_ni_tod_request_completed_id__num_of                                        BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID__NUM_OF
+#define bcmolt_xgpon_ni_auto_cfg_id_activate_all_onus_completed                                 BCMOLT_XGPON_NI_AUTO_CFG_ID_ACTIVATE_ALL_ONUS_COMPLETED
+#define bcmolt_xgpon_ni_auto_cfg_id_cpu_packets_failure                                         BCMOLT_XGPON_NI_AUTO_CFG_ID_CPU_PACKETS_FAILURE
+#define bcmolt_xgpon_ni_auto_cfg_id_deactivate_all_onus_completed                               BCMOLT_XGPON_NI_AUTO_CFG_ID_DEACTIVATE_ALL_ONUS_COMPLETED
+#define bcmolt_xgpon_ni_auto_cfg_id_disable_all_onus_completed                                  BCMOLT_XGPON_NI_AUTO_CFG_ID_DISABLE_ALL_ONUS_COMPLETED
+#define bcmolt_xgpon_ni_auto_cfg_id_enable_all_onus_completed                                   BCMOLT_XGPON_NI_AUTO_CFG_ID_ENABLE_ALL_ONUS_COMPLETED
+#define bcmolt_xgpon_ni_auto_cfg_id_los                                                         BCMOLT_XGPON_NI_AUTO_CFG_ID_LOS
+#define bcmolt_xgpon_ni_auto_cfg_id_onu_discovered                                              BCMOLT_XGPON_NI_AUTO_CFG_ID_ONU_DISCOVERED
+#define bcmolt_xgpon_ni_auto_cfg_id_onu_upgrade_complete                                        BCMOLT_XGPON_NI_AUTO_CFG_ID_ONU_UPGRADE_COMPLETE
+#define bcmolt_xgpon_ni_auto_cfg_id_protection_switching_onus_ranged                            BCMOLT_XGPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_ONUS_RANGED
+#define bcmolt_xgpon_ni_auto_cfg_id_protection_switching_switchover_completed                   BCMOLT_XGPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED
+#define bcmolt_xgpon_ni_auto_cfg_id_protection_switching_traffic_resume                         BCMOLT_XGPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_TRAFFIC_RESUME
+#define bcmolt_xgpon_ni_auto_cfg_id_rogue_detection_completed                                   BCMOLT_XGPON_NI_AUTO_CFG_ID_ROGUE_DETECTION_COMPLETED
+#define bcmolt_xgpon_ni_auto_cfg_id_rogue_onu_special_map_cycle_start                           BCMOLT_XGPON_NI_AUTO_CFG_ID_ROGUE_ONU_SPECIAL_MAP_CYCLE_START
+#define bcmolt_xgpon_ni_auto_cfg_id_serial_number_acquisition_cycle_start                       BCMOLT_XGPON_NI_AUTO_CFG_ID_SERIAL_NUMBER_ACQUISITION_CYCLE_START
+#define bcmolt_xgpon_ni_auto_cfg_id_standby_pon_monitoring_cycle_completed                      BCMOLT_XGPON_NI_AUTO_CFG_ID_STANDBY_PON_MONITORING_CYCLE_COMPLETED
+#define bcmolt_xgpon_ni_auto_cfg_id_stat_alarm_cleared                                          BCMOLT_XGPON_NI_AUTO_CFG_ID_STAT_ALARM_CLEARED
+#define bcmolt_xgpon_ni_auto_cfg_id_stat_alarm_raised                                           BCMOLT_XGPON_NI_AUTO_CFG_ID_STAT_ALARM_RAISED
+#define bcmolt_xgpon_ni_auto_cfg_id_state_change_completed                                      BCMOLT_XGPON_NI_AUTO_CFG_ID_STATE_CHANGE_COMPLETED
+#define bcmolt_xgpon_ni_auto_cfg_id_tod_request_completed                                       BCMOLT_XGPON_NI_AUTO_CFG_ID_TOD_REQUEST_COMPLETED
+#define bcmolt_xgpon_ni_auto_cfg_id__num_of                                                     BCMOLT_XGPON_NI_AUTO_CFG_ID__NUM_OF
+#define bcmolt_xgpon_ni_adjust_tx_wavelength_id_serial_number                                   BCMOLT_XGPON_NI_ADJUST_TX_WAVELENGTH_ID_SERIAL_NUMBER
+#define bcmolt_xgpon_ni_adjust_tx_wavelength_id_freqency_adjustment_direction                   BCMOLT_XGPON_NI_ADJUST_TX_WAVELENGTH_ID_FREQENCY_ADJUSTMENT_DIRECTION
+#define bcmolt_xgpon_ni_adjust_tx_wavelength_id_frequency_adjustment_size                       BCMOLT_XGPON_NI_ADJUST_TX_WAVELENGTH_ID_FREQUENCY_ADJUSTMENT_SIZE
+#define bcmolt_xgpon_ni_adjust_tx_wavelength_id__num_of                                         BCMOLT_XGPON_NI_ADJUST_TX_WAVELENGTH_ID__NUM_OF
+#define bcmolt_xgpon_ni_disable_serial_number_id_control                                        BCMOLT_XGPON_NI_DISABLE_SERIAL_NUMBER_ID_CONTROL
+#define bcmolt_xgpon_ni_disable_serial_number_id_serial_number                                  BCMOLT_XGPON_NI_DISABLE_SERIAL_NUMBER_ID_SERIAL_NUMBER
+#define bcmolt_xgpon_ni_disable_serial_number_id__num_of                                        BCMOLT_XGPON_NI_DISABLE_SERIAL_NUMBER_ID__NUM_OF
+#define bcmolt_xgpon_ni_reset_id__num_of                                                        BCMOLT_XGPON_NI_RESET_ID__NUM_OF
+#define bcmolt_xgpon_ni_rogue_detection_window_id_window_type                                   BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_WINDOW_TYPE
+#define bcmolt_xgpon_ni_rogue_detection_window_id_alloc_id                                      BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_ALLOC_ID
+#define bcmolt_xgpon_ni_rogue_detection_window_id_onu_id                                        BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_ONU_ID
+#define bcmolt_xgpon_ni_rogue_detection_window_id_second_ranging_window                         BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_SECOND_RANGING_WINDOW
+#define bcmolt_xgpon_ni_rogue_detection_window_id__num_of                                       BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID__NUM_OF
+#define bcmolt_xgpon_ni_run_special_bw_map_id_number_of_cycle                                   BCMOLT_XGPON_NI_RUN_SPECIAL_BW_MAP_ID_NUMBER_OF_CYCLE
+#define bcmolt_xgpon_ni_run_special_bw_map_id_allocation_number                                 BCMOLT_XGPON_NI_RUN_SPECIAL_BW_MAP_ID_ALLOCATION_NUMBER
+#define bcmolt_xgpon_ni_run_special_bw_map_id_bw_map_array                                      BCMOLT_XGPON_NI_RUN_SPECIAL_BW_MAP_ID_BW_MAP_ARRAY
+#define bcmolt_xgpon_ni_run_special_bw_map_id__num_of                                           BCMOLT_XGPON_NI_RUN_SPECIAL_BW_MAP_ID__NUM_OF
+#define bcmolt_xgpon_ni_set_onu_state_id_onu_state                                              BCMOLT_XGPON_NI_SET_ONU_STATE_ID_ONU_STATE
+#define bcmolt_xgpon_ni_set_onu_state_id__num_of                                                BCMOLT_XGPON_NI_SET_ONU_STATE_ID__NUM_OF
+#define bcmolt_xgpon_ni_set_pon_state_id_pon_state                                              BCMOLT_XGPON_NI_SET_PON_STATE_ID_PON_STATE
+#define bcmolt_xgpon_ni_set_pon_state_id__num_of                                                BCMOLT_XGPON_NI_SET_PON_STATE_ID__NUM_OF
+#define bcmolt_xgpon_ni_single_request_standby_pon_monitoring_id__num_of                        BCMOLT_XGPON_NI_SINGLE_REQUEST_STANDBY_PON_MONITORING_ID__NUM_OF
+#define bcmolt_xgpon_ni_start_onu_upgrade_id_list_of_onu_ids                                    BCMOLT_XGPON_NI_START_ONU_UPGRADE_ID_LIST_OF_ONU_IDS
+#define bcmolt_xgpon_ni_start_onu_upgrade_id__num_of                                            BCMOLT_XGPON_NI_START_ONU_UPGRADE_ID__NUM_OF
+#define bcmolt_xgpon_ni_tod_request_id__num_of                                                  BCMOLT_XGPON_NI_TOD_REQUEST_ID__NUM_OF
+#define bcmolt_xgpon_ni_broadcast_ploam_packet_id_ploam                                         BCMOLT_XGPON_NI_BROADCAST_PLOAM_PACKET_ID_PLOAM
+#define bcmolt_xgpon_ni_broadcast_ploam_packet_id__num_of                                       BCMOLT_XGPON_NI_BROADCAST_PLOAM_PACKET_ID__NUM_OF
+#define bcmolt_xgpon_ni_cpu_packets_id_packet_type                                              BCMOLT_XGPON_NI_CPU_PACKETS_ID_PACKET_TYPE
+#define bcmolt_xgpon_ni_cpu_packets_id_calc_crc                                                 BCMOLT_XGPON_NI_CPU_PACKETS_ID_CALC_CRC
+#define bcmolt_xgpon_ni_cpu_packets_id_gem_port_list                                            BCMOLT_XGPON_NI_CPU_PACKETS_ID_GEM_PORT_LIST
+#define bcmolt_xgpon_ni_cpu_packets_id_buffer                                                   BCMOLT_XGPON_NI_CPU_PACKETS_ID_BUFFER
+#define bcmolt_xgpon_ni_cpu_packets_id__num_of                                                  BCMOLT_XGPON_NI_CPU_PACKETS_ID__NUM_OF
+#define bcmolt_xgpon_onu_key_id_pon_ni                                                          BCMOLT_XGPON_ONU_KEY_ID_PON_NI
+#define bcmolt_xgpon_onu_key_id_onu_id                                                          BCMOLT_XGPON_ONU_KEY_ID_ONU_ID
+#define bcmolt_xgpon_onu_key_id__num_of                                                         BCMOLT_XGPON_ONU_KEY_ID__NUM_OF
+#define bcmolt_xgpon_onu_cfg_id_onu_state                                                       BCMOLT_XGPON_ONU_CFG_ID_ONU_STATE
+#define bcmolt_xgpon_onu_cfg_id_onu_old_state                                                   BCMOLT_XGPON_ONU_CFG_ID_ONU_OLD_STATE
+#define bcmolt_xgpon_onu_cfg_id_alarm_state                                                     BCMOLT_XGPON_ONU_CFG_ID_ALARM_STATE
+#define bcmolt_xgpon_onu_cfg_id_registration_encryption_keys                                    BCMOLT_XGPON_ONU_CFG_ID_REGISTRATION_ENCRYPTION_KEYS
+#define bcmolt_xgpon_onu_cfg_id_current_encryption_key                                          BCMOLT_XGPON_ONU_CFG_ID_CURRENT_ENCRYPTION_KEY
+#define bcmolt_xgpon_onu_cfg_id_serial_number                                                   BCMOLT_XGPON_ONU_CFG_ID_SERIAL_NUMBER
+#define bcmolt_xgpon_onu_cfg_id_registration_id                                                 BCMOLT_XGPON_ONU_CFG_ID_REGISTRATION_ID
+#define bcmolt_xgpon_onu_cfg_id_registration_id_auto_learning                                   BCMOLT_XGPON_ONU_CFG_ID_REGISTRATION_ID_AUTO_LEARNING
+#define bcmolt_xgpon_onu_cfg_id_ranging_burst_profile                                           BCMOLT_XGPON_ONU_CFG_ID_RANGING_BURST_PROFILE
+#define bcmolt_xgpon_onu_cfg_id_data_burst_profile                                              BCMOLT_XGPON_ONU_CFG_ID_DATA_BURST_PROFILE
+#define bcmolt_xgpon_onu_cfg_id_ranging_time                                                    BCMOLT_XGPON_ONU_CFG_ID_RANGING_TIME
+#define bcmolt_xgpon_onu_cfg_id_disabled_after_discovery                                        BCMOLT_XGPON_ONU_CFG_ID_DISABLED_AFTER_DISCOVERY
+#define bcmolt_xgpon_onu_cfg_id_deactivation_reason                                             BCMOLT_XGPON_ONU_CFG_ID_DEACTIVATION_REASON
+#define bcmolt_xgpon_onu_cfg_id_all_gem_ports                                                   BCMOLT_XGPON_ONU_CFG_ID_ALL_GEM_PORTS
+#define bcmolt_xgpon_onu_cfg_id_all_allocs                                                      BCMOLT_XGPON_ONU_CFG_ID_ALL_ALLOCS
+#define bcmolt_xgpon_onu_cfg_id_extended_guard_time                                             BCMOLT_XGPON_ONU_CFG_ID_EXTENDED_GUARD_TIME
+#define bcmolt_xgpon_onu_cfg_id_us_line_rate                                                    BCMOLT_XGPON_ONU_CFG_ID_US_LINE_RATE
+#define bcmolt_xgpon_onu_cfg_id_calibration_record                                              BCMOLT_XGPON_ONU_CFG_ID_CALIBRATION_RECORD
+#define bcmolt_xgpon_onu_cfg_id_tuning_granularity                                              BCMOLT_XGPON_ONU_CFG_ID_TUNING_GRANULARITY
+#define bcmolt_xgpon_onu_cfg_id_step_tuning_time                                                BCMOLT_XGPON_ONU_CFG_ID_STEP_TUNING_TIME
+#define bcmolt_xgpon_onu_cfg_id_power_levelling_capabilities                                    BCMOLT_XGPON_ONU_CFG_ID_POWER_LEVELLING_CAPABILITIES
+#define bcmolt_xgpon_onu_cfg_id_request_registration_status                                     BCMOLT_XGPON_ONU_CFG_ID_REQUEST_REGISTRATION_STATUS
+#define bcmolt_xgpon_onu_cfg_id__num_of                                                         BCMOLT_XGPON_ONU_CFG_ID__NUM_OF
+#define bcmolt_xgpon_onu_stat_id_positive_drift                                                 BCMOLT_XGPON_ONU_STAT_ID_POSITIVE_DRIFT
+#define bcmolt_xgpon_onu_stat_id_negative_drift                                                 BCMOLT_XGPON_ONU_STAT_ID_NEGATIVE_DRIFT
+#define bcmolt_xgpon_onu_stat_id_delimiter_miss_detection                                       BCMOLT_XGPON_ONU_STAT_ID_DELIMITER_MISS_DETECTION
+#define bcmolt_xgpon_onu_stat_id_bip32_errors                                                   BCMOLT_XGPON_ONU_STAT_ID_BIP32_ERRORS
+#define bcmolt_xgpon_onu_stat_id_rx_words                                                       BCMOLT_XGPON_ONU_STAT_ID_RX_WORDS
+#define bcmolt_xgpon_onu_stat_id_fec_corrected_symbols                                          BCMOLT_XGPON_ONU_STAT_ID_FEC_CORRECTED_SYMBOLS
+#define bcmolt_xgpon_onu_stat_id_fec_corrected_codewords                                        BCMOLT_XGPON_ONU_STAT_ID_FEC_CORRECTED_CODEWORDS
+#define bcmolt_xgpon_onu_stat_id_fec_uncorrectable_codewords                                    BCMOLT_XGPON_ONU_STAT_ID_FEC_UNCORRECTABLE_CODEWORDS
+#define bcmolt_xgpon_onu_stat_id_fec_codewords                                                  BCMOLT_XGPON_ONU_STAT_ID_FEC_CODEWORDS
+#define bcmolt_xgpon_onu_stat_id_fec_corrected_bits                                             BCMOLT_XGPON_ONU_STAT_ID_FEC_CORRECTED_BITS
+#define bcmolt_xgpon_onu_stat_id_xgem_key_errors                                                BCMOLT_XGPON_ONU_STAT_ID_XGEM_KEY_ERRORS
+#define bcmolt_xgpon_onu_stat_id_xgem_loss                                                      BCMOLT_XGPON_ONU_STAT_ID_XGEM_LOSS
+#define bcmolt_xgpon_onu_stat_id_rx_ploams_mic_error                                            BCMOLT_XGPON_ONU_STAT_ID_RX_PLOAMS_MIC_ERROR
+#define bcmolt_xgpon_onu_stat_id_rx_ploams_non_idle                                             BCMOLT_XGPON_ONU_STAT_ID_RX_PLOAMS_NON_IDLE
+#define bcmolt_xgpon_onu_stat_id_rx_omci                                                        BCMOLT_XGPON_ONU_STAT_ID_RX_OMCI
+#define bcmolt_xgpon_onu_stat_id_rx_omci_packets_crc_error                                      BCMOLT_XGPON_ONU_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR
+#define bcmolt_xgpon_onu_stat_id_rx_bytes                                                       BCMOLT_XGPON_ONU_STAT_ID_RX_BYTES
+#define bcmolt_xgpon_onu_stat_id_rx_packets                                                     BCMOLT_XGPON_ONU_STAT_ID_RX_PACKETS
+#define bcmolt_xgpon_onu_stat_id_tx_bytes                                                       BCMOLT_XGPON_ONU_STAT_ID_TX_BYTES
+#define bcmolt_xgpon_onu_stat_id_tx_packets                                                     BCMOLT_XGPON_ONU_STAT_ID_TX_PACKETS
+#define bcmolt_xgpon_onu_stat_id__num_of                                                        BCMOLT_XGPON_ONU_STAT_ID__NUM_OF
+#define bcmolt_xgpon_onu_stat_cfg_id_cfg                                                        BCMOLT_XGPON_ONU_STAT_CFG_ID_CFG
+#define bcmolt_xgpon_onu_stat_cfg_id__num_of                                                    BCMOLT_XGPON_ONU_STAT_CFG_ID__NUM_OF
+#define bcmolt_xgpon_onu_dfi_id_alarm_status                                                    BCMOLT_XGPON_ONU_DFI_ID_ALARM_STATUS
+#define bcmolt_xgpon_onu_dfi_id__num_of                                                         BCMOLT_XGPON_ONU_DFI_ID__NUM_OF
+#define bcmolt_xgpon_onu_dgi_id_alarm_status                                                    BCMOLT_XGPON_ONU_DGI_ID_ALARM_STATUS
+#define bcmolt_xgpon_onu_dgi_id__num_of                                                         BCMOLT_XGPON_ONU_DGI_ID__NUM_OF
+#define bcmolt_xgpon_onu_dowi_id_alarm_status                                                   BCMOLT_XGPON_ONU_DOWI_ID_ALARM_STATUS
+#define bcmolt_xgpon_onu_dowi_id_drift_value                                                    BCMOLT_XGPON_ONU_DOWI_ID_DRIFT_VALUE
+#define bcmolt_xgpon_onu_dowi_id_new_eqd                                                        BCMOLT_XGPON_ONU_DOWI_ID_NEW_EQD
+#define bcmolt_xgpon_onu_dowi_id__num_of                                                        BCMOLT_XGPON_ONU_DOWI_ID__NUM_OF
+#define bcmolt_xgpon_onu_invalid_dbru_report_id_alloc_id                                        BCMOLT_XGPON_ONU_INVALID_DBRU_REPORT_ID_ALLOC_ID
+#define bcmolt_xgpon_onu_invalid_dbru_report_id__num_of                                         BCMOLT_XGPON_ONU_INVALID_DBRU_REPORT_ID__NUM_OF
+#define bcmolt_xgpon_onu_key_exchange_completed_id_new_key                                      BCMOLT_XGPON_ONU_KEY_EXCHANGE_COMPLETED_ID_NEW_KEY
+#define bcmolt_xgpon_onu_key_exchange_completed_id__num_of                                      BCMOLT_XGPON_ONU_KEY_EXCHANGE_COMPLETED_ID__NUM_OF
+#define bcmolt_xgpon_onu_key_exchange_cycle_skipped_id__num_of                                  BCMOLT_XGPON_ONU_KEY_EXCHANGE_CYCLE_SKIPPED_ID__NUM_OF
+#define bcmolt_xgpon_onu_key_exchange_key_mismatch_id_expected_key                              BCMOLT_XGPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID_EXPECTED_KEY
+#define bcmolt_xgpon_onu_key_exchange_key_mismatch_id_received_key                              BCMOLT_XGPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID_RECEIVED_KEY
+#define bcmolt_xgpon_onu_key_exchange_key_mismatch_id__num_of                                   BCMOLT_XGPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID__NUM_OF
+#define bcmolt_xgpon_onu_key_exchange_key_request_timeout_id__num_of                            BCMOLT_XGPON_ONU_KEY_EXCHANGE_KEY_REQUEST_TIMEOUT_ID__NUM_OF
+#define bcmolt_xgpon_onu_looci_id_alarm_status                                                  BCMOLT_XGPON_ONU_LOOCI_ID_ALARM_STATUS
+#define bcmolt_xgpon_onu_looci_id__num_of                                                       BCMOLT_XGPON_ONU_LOOCI_ID__NUM_OF
+#define bcmolt_xgpon_onu_onu_activation_completed_id_status                                     BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID_STATUS
+#define bcmolt_xgpon_onu_onu_activation_completed_id_fail_reason                                BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID_FAIL_REASON
+#define bcmolt_xgpon_onu_onu_activation_completed_id_registration_id                            BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID_REGISTRATION_ID
+#define bcmolt_xgpon_onu_onu_activation_completed_id_registration_encryption_keys               BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID_REGISTRATION_ENCRYPTION_KEYS
+#define bcmolt_xgpon_onu_onu_activation_completed_id__num_of                                    BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID__NUM_OF
+#define bcmolt_xgpon_onu_onu_alarm_id_onu_alarm                                                 BCMOLT_XGPON_ONU_ONU_ALARM_ID_ONU_ALARM
+#define bcmolt_xgpon_onu_onu_alarm_id__num_of                                                   BCMOLT_XGPON_ONU_ONU_ALARM_ID__NUM_OF
+#define bcmolt_xgpon_onu_onu_deactivation_completed_id_status                                   BCMOLT_XGPON_ONU_ONU_DEACTIVATION_COMPLETED_ID_STATUS
+#define bcmolt_xgpon_onu_onu_deactivation_completed_id__num_of                                  BCMOLT_XGPON_ONU_ONU_DEACTIVATION_COMPLETED_ID__NUM_OF
+#define bcmolt_xgpon_onu_onu_disable_completed_id_serial_number                                 BCMOLT_XGPON_ONU_ONU_DISABLE_COMPLETED_ID_SERIAL_NUMBER
+#define bcmolt_xgpon_onu_onu_disable_completed_id__num_of                                       BCMOLT_XGPON_ONU_ONU_DISABLE_COMPLETED_ID__NUM_OF
+#define bcmolt_xgpon_onu_onu_enable_completed_id_serial_number                                  BCMOLT_XGPON_ONU_ONU_ENABLE_COMPLETED_ID_SERIAL_NUMBER
+#define bcmolt_xgpon_onu_onu_enable_completed_id__num_of                                        BCMOLT_XGPON_ONU_ONU_ENABLE_COMPLETED_ID__NUM_OF
+#define bcmolt_xgpon_onu_onu_tuning_in_completed_id_result                                      BCMOLT_XGPON_ONU_ONU_TUNING_IN_COMPLETED_ID_RESULT
+#define bcmolt_xgpon_onu_onu_tuning_in_completed_id_fail_reason                                 BCMOLT_XGPON_ONU_ONU_TUNING_IN_COMPLETED_ID_FAIL_REASON
+#define bcmolt_xgpon_onu_onu_tuning_in_completed_id__num_of                                     BCMOLT_XGPON_ONU_ONU_TUNING_IN_COMPLETED_ID__NUM_OF
+#define bcmolt_xgpon_onu_onu_tuning_out_completed_id_result                                     BCMOLT_XGPON_ONU_ONU_TUNING_OUT_COMPLETED_ID_RESULT
+#define bcmolt_xgpon_onu_onu_tuning_out_completed_id_fail_reason                                BCMOLT_XGPON_ONU_ONU_TUNING_OUT_COMPLETED_ID_FAIL_REASON
+#define bcmolt_xgpon_onu_onu_tuning_out_completed_id__num_of                                    BCMOLT_XGPON_ONU_ONU_TUNING_OUT_COMPLETED_ID__NUM_OF
+#define bcmolt_xgpon_onu_optical_reflection_id__num_of                                          BCMOLT_XGPON_ONU_OPTICAL_REFLECTION_ID__NUM_OF
+#define bcmolt_xgpon_onu_possible_drift_id_alarm_status                                         BCMOLT_XGPON_ONU_POSSIBLE_DRIFT_ID_ALARM_STATUS
+#define bcmolt_xgpon_onu_possible_drift_id_estimated_drift                                      BCMOLT_XGPON_ONU_POSSIBLE_DRIFT_ID_ESTIMATED_DRIFT
+#define bcmolt_xgpon_onu_possible_drift_id__num_of                                              BCMOLT_XGPON_ONU_POSSIBLE_DRIFT_ID__NUM_OF
+#define bcmolt_xgpon_onu_power_consumption_report_id_power_consumption_report                   BCMOLT_XGPON_ONU_POWER_CONSUMPTION_REPORT_ID_POWER_CONSUMPTION_REPORT
+#define bcmolt_xgpon_onu_power_consumption_report_id__num_of                                    BCMOLT_XGPON_ONU_POWER_CONSUMPTION_REPORT_ID__NUM_OF
+#define bcmolt_xgpon_onu_power_level_report_id_attenuation                                      BCMOLT_XGPON_ONU_POWER_LEVEL_REPORT_ID_ATTENUATION
+#define bcmolt_xgpon_onu_power_level_report_id_power_levelling_capability                       BCMOLT_XGPON_ONU_POWER_LEVEL_REPORT_ID_POWER_LEVELLING_CAPABILITY
+#define bcmolt_xgpon_onu_power_level_report_id__num_of                                          BCMOLT_XGPON_ONU_POWER_LEVEL_REPORT_ID__NUM_OF
+#define bcmolt_xgpon_onu_power_management_state_change_id_old_state                             BCMOLT_XGPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_OLD_STATE
+#define bcmolt_xgpon_onu_power_management_state_change_id_new_state                             BCMOLT_XGPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_NEW_STATE
+#define bcmolt_xgpon_onu_power_management_state_change_id_reason                                BCMOLT_XGPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_REASON
+#define bcmolt_xgpon_onu_power_management_state_change_id__num_of                               BCMOLT_XGPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID__NUM_OF
+#define bcmolt_xgpon_onu_pqsi_id_alarm_status                                                   BCMOLT_XGPON_ONU_PQSI_ID_ALARM_STATUS
+#define bcmolt_xgpon_onu_pqsi_id__num_of                                                        BCMOLT_XGPON_ONU_PQSI_ID__NUM_OF
+#define bcmolt_xgpon_onu_ranging_completed_id_status                                            BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_STATUS
+#define bcmolt_xgpon_onu_ranging_completed_id_fail_reason                                       BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_FAIL_REASON
+#define bcmolt_xgpon_onu_ranging_completed_id_eqd                                               BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_EQD
+#define bcmolt_xgpon_onu_ranging_completed_id_number_of_ploams                                  BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_NUMBER_OF_PLOAMS
+#define bcmolt_xgpon_onu_ranging_completed_id_power_level                                       BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_POWER_LEVEL
+#define bcmolt_xgpon_onu_ranging_completed_id__num_of                                           BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID__NUM_OF
+#define bcmolt_xgpon_onu_registration_id_id_registration_id                                     BCMOLT_XGPON_ONU_REGISTRATION_ID_ID_REGISTRATION_ID
+#define bcmolt_xgpon_onu_registration_id_id_request_registration_status                         BCMOLT_XGPON_ONU_REGISTRATION_ID_ID_REQUEST_REGISTRATION_STATUS
+#define bcmolt_xgpon_onu_registration_id_id_request_registration_fail_reason                    BCMOLT_XGPON_ONU_REGISTRATION_ID_ID_REQUEST_REGISTRATION_FAIL_REASON
+#define bcmolt_xgpon_onu_registration_id_id__num_of                                             BCMOLT_XGPON_ONU_REGISTRATION_ID_ID__NUM_OF
+#define bcmolt_xgpon_onu_rssi_measurement_completed_id_status                                   BCMOLT_XGPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID_STATUS
+#define bcmolt_xgpon_onu_rssi_measurement_completed_id_fail_reason                              BCMOLT_XGPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID_FAIL_REASON
+#define bcmolt_xgpon_onu_rssi_measurement_completed_id__num_of                                  BCMOLT_XGPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID__NUM_OF
+#define bcmolt_xgpon_onu_sdi_id_alarm_status                                                    BCMOLT_XGPON_ONU_SDI_ID_ALARM_STATUS
+#define bcmolt_xgpon_onu_sdi_id_ber                                                             BCMOLT_XGPON_ONU_SDI_ID_BER
+#define bcmolt_xgpon_onu_sdi_id__num_of                                                         BCMOLT_XGPON_ONU_SDI_ID__NUM_OF
+#define bcmolt_xgpon_onu_secure_mutual_authentication_failure_id_status                         BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_FAILURE_ID_STATUS
+#define bcmolt_xgpon_onu_secure_mutual_authentication_failure_id_fail_reason                    BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_FAILURE_ID_FAIL_REASON
+#define bcmolt_xgpon_onu_secure_mutual_authentication_failure_id__num_of                        BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_FAILURE_ID__NUM_OF
+#define bcmolt_xgpon_onu_sfi_id_alarm_status                                                    BCMOLT_XGPON_ONU_SFI_ID_ALARM_STATUS
+#define bcmolt_xgpon_onu_sfi_id_ber                                                             BCMOLT_XGPON_ONU_SFI_ID_BER
+#define bcmolt_xgpon_onu_sfi_id__num_of                                                         BCMOLT_XGPON_ONU_SFI_ID__NUM_OF
+#define bcmolt_xgpon_onu_stat_alarm_cleared_id_stat                                             BCMOLT_XGPON_ONU_STAT_ALARM_CLEARED_ID_STAT
+#define bcmolt_xgpon_onu_stat_alarm_cleared_id__num_of                                          BCMOLT_XGPON_ONU_STAT_ALARM_CLEARED_ID__NUM_OF
+#define bcmolt_xgpon_onu_stat_alarm_raised_id_stat                                              BCMOLT_XGPON_ONU_STAT_ALARM_RAISED_ID_STAT
+#define bcmolt_xgpon_onu_stat_alarm_raised_id__num_of                                           BCMOLT_XGPON_ONU_STAT_ALARM_RAISED_ID__NUM_OF
+#define bcmolt_xgpon_onu_sufi_id_alarm_status                                                   BCMOLT_XGPON_ONU_SUFI_ID_ALARM_STATUS
+#define bcmolt_xgpon_onu_sufi_id__num_of                                                        BCMOLT_XGPON_ONU_SUFI_ID__NUM_OF
+#define bcmolt_xgpon_onu_tiwi_id_alarm_status                                                   BCMOLT_XGPON_ONU_TIWI_ID_ALARM_STATUS
+#define bcmolt_xgpon_onu_tiwi_id_drift_value                                                    BCMOLT_XGPON_ONU_TIWI_ID_DRIFT_VALUE
+#define bcmolt_xgpon_onu_tiwi_id__num_of                                                        BCMOLT_XGPON_ONU_TIWI_ID__NUM_OF
+#define bcmolt_xgpon_onu_tuning_response_id_ack                                                 BCMOLT_XGPON_ONU_TUNING_RESPONSE_ID_ACK
+#define bcmolt_xgpon_onu_tuning_response_id_result                                              BCMOLT_XGPON_ONU_TUNING_RESPONSE_ID_RESULT
+#define bcmolt_xgpon_onu_tuning_response_id__num_of                                             BCMOLT_XGPON_ONU_TUNING_RESPONSE_ID__NUM_OF
+#define bcmolt_xgpon_onu_auto_cfg_id_dfi                                                        BCMOLT_XGPON_ONU_AUTO_CFG_ID_DFI
+#define bcmolt_xgpon_onu_auto_cfg_id_dgi                                                        BCMOLT_XGPON_ONU_AUTO_CFG_ID_DGI
+#define bcmolt_xgpon_onu_auto_cfg_id_dowi                                                       BCMOLT_XGPON_ONU_AUTO_CFG_ID_DOWI
+#define bcmolt_xgpon_onu_auto_cfg_id_invalid_dbru_report                                        BCMOLT_XGPON_ONU_AUTO_CFG_ID_INVALID_DBRU_REPORT
+#define bcmolt_xgpon_onu_auto_cfg_id_key_exchange_completed                                     BCMOLT_XGPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_COMPLETED
+#define bcmolt_xgpon_onu_auto_cfg_id_key_exchange_cycle_skipped                                 BCMOLT_XGPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_CYCLE_SKIPPED
+#define bcmolt_xgpon_onu_auto_cfg_id_key_exchange_key_mismatch                                  BCMOLT_XGPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_KEY_MISMATCH
+#define bcmolt_xgpon_onu_auto_cfg_id_key_exchange_key_request_timeout                           BCMOLT_XGPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_KEY_REQUEST_TIMEOUT
+#define bcmolt_xgpon_onu_auto_cfg_id_looci                                                      BCMOLT_XGPON_ONU_AUTO_CFG_ID_LOOCI
+#define bcmolt_xgpon_onu_auto_cfg_id_onu_activation_completed                                   BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_ACTIVATION_COMPLETED
+#define bcmolt_xgpon_onu_auto_cfg_id_onu_alarm                                                  BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_ALARM
+#define bcmolt_xgpon_onu_auto_cfg_id_onu_deactivation_completed                                 BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_DEACTIVATION_COMPLETED
+#define bcmolt_xgpon_onu_auto_cfg_id_onu_disable_completed                                      BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_DISABLE_COMPLETED
+#define bcmolt_xgpon_onu_auto_cfg_id_onu_enable_completed                                       BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_ENABLE_COMPLETED
+#define bcmolt_xgpon_onu_auto_cfg_id_onu_tuning_in_completed                                    BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_TUNING_IN_COMPLETED
+#define bcmolt_xgpon_onu_auto_cfg_id_onu_tuning_out_completed                                   BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_TUNING_OUT_COMPLETED
+#define bcmolt_xgpon_onu_auto_cfg_id_optical_reflection                                         BCMOLT_XGPON_ONU_AUTO_CFG_ID_OPTICAL_REFLECTION
+#define bcmolt_xgpon_onu_auto_cfg_id_possible_drift                                             BCMOLT_XGPON_ONU_AUTO_CFG_ID_POSSIBLE_DRIFT
+#define bcmolt_xgpon_onu_auto_cfg_id_power_consumption_report                                   BCMOLT_XGPON_ONU_AUTO_CFG_ID_POWER_CONSUMPTION_REPORT
+#define bcmolt_xgpon_onu_auto_cfg_id_power_level_report                                         BCMOLT_XGPON_ONU_AUTO_CFG_ID_POWER_LEVEL_REPORT
+#define bcmolt_xgpon_onu_auto_cfg_id_power_management_state_change                              BCMOLT_XGPON_ONU_AUTO_CFG_ID_POWER_MANAGEMENT_STATE_CHANGE
+#define bcmolt_xgpon_onu_auto_cfg_id_pqsi                                                       BCMOLT_XGPON_ONU_AUTO_CFG_ID_PQSI
+#define bcmolt_xgpon_onu_auto_cfg_id_ranging_completed                                          BCMOLT_XGPON_ONU_AUTO_CFG_ID_RANGING_COMPLETED
+#define bcmolt_xgpon_onu_auto_cfg_id_registration_id                                            BCMOLT_XGPON_ONU_AUTO_CFG_ID_REGISTRATION_ID
+#define bcmolt_xgpon_onu_auto_cfg_id_rssi_measurement_completed                                 BCMOLT_XGPON_ONU_AUTO_CFG_ID_RSSI_MEASUREMENT_COMPLETED
+#define bcmolt_xgpon_onu_auto_cfg_id_sdi                                                        BCMOLT_XGPON_ONU_AUTO_CFG_ID_SDI
+#define bcmolt_xgpon_onu_auto_cfg_id_secure_mutual_authentication_failure                       BCMOLT_XGPON_ONU_AUTO_CFG_ID_SECURE_MUTUAL_AUTHENTICATION_FAILURE
+#define bcmolt_xgpon_onu_auto_cfg_id_sfi                                                        BCMOLT_XGPON_ONU_AUTO_CFG_ID_SFI
+#define bcmolt_xgpon_onu_auto_cfg_id_stat_alarm_cleared                                         BCMOLT_XGPON_ONU_AUTO_CFG_ID_STAT_ALARM_CLEARED
+#define bcmolt_xgpon_onu_auto_cfg_id_stat_alarm_raised                                          BCMOLT_XGPON_ONU_AUTO_CFG_ID_STAT_ALARM_RAISED
+#define bcmolt_xgpon_onu_auto_cfg_id_sufi                                                       BCMOLT_XGPON_ONU_AUTO_CFG_ID_SUFI
+#define bcmolt_xgpon_onu_auto_cfg_id_tiwi                                                       BCMOLT_XGPON_ONU_AUTO_CFG_ID_TIWI
+#define bcmolt_xgpon_onu_auto_cfg_id_tuning_response                                            BCMOLT_XGPON_ONU_AUTO_CFG_ID_TUNING_RESPONSE
+#define bcmolt_xgpon_onu_auto_cfg_id__num_of                                                    BCMOLT_XGPON_ONU_AUTO_CFG_ID__NUM_OF
+#define bcmolt_xgpon_onu_adjust_tx_wavelength_id_frequency_adjustment_direction                 BCMOLT_XGPON_ONU_ADJUST_TX_WAVELENGTH_ID_FREQUENCY_ADJUSTMENT_DIRECTION
+#define bcmolt_xgpon_onu_adjust_tx_wavelength_id_frequency_adjustment_size                      BCMOLT_XGPON_ONU_ADJUST_TX_WAVELENGTH_ID_FREQUENCY_ADJUSTMENT_SIZE
+#define bcmolt_xgpon_onu_adjust_tx_wavelength_id__num_of                                        BCMOLT_XGPON_ONU_ADJUST_TX_WAVELENGTH_ID__NUM_OF
+#define bcmolt_xgpon_onu_change_power_levelling_id_control                                      BCMOLT_XGPON_ONU_CHANGE_POWER_LEVELLING_ID_CONTROL
+#define bcmolt_xgpon_onu_change_power_levelling_id_attenuation                                  BCMOLT_XGPON_ONU_CHANGE_POWER_LEVELLING_ID_ATTENUATION
+#define bcmolt_xgpon_onu_change_power_levelling_id__num_of                                      BCMOLT_XGPON_ONU_CHANGE_POWER_LEVELLING_ID__NUM_OF
+#define bcmolt_xgpon_onu_get_power_consumption_id__num_of                                       BCMOLT_XGPON_ONU_GET_POWER_CONSUMPTION_ID__NUM_OF
+#define bcmolt_xgpon_onu_get_power_level_id__num_of                                             BCMOLT_XGPON_ONU_GET_POWER_LEVEL_ID__NUM_OF
+#define bcmolt_xgpon_onu_onu_tuning_in_id__num_of                                               BCMOLT_XGPON_ONU_ONU_TUNING_IN_ID__NUM_OF
+#define bcmolt_xgpon_onu_onu_tuning_out_id_target_ds_pon_id                                     BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_TARGET_DS_PON_ID
+#define bcmolt_xgpon_onu_onu_tuning_out_id_target_us_pon_id                                     BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_TARGET_US_PON_ID
+#define bcmolt_xgpon_onu_onu_tuning_out_id_time_to_switch                                       BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_TIME_TO_SWITCH
+#define bcmolt_xgpon_onu_onu_tuning_out_id_rollback                                             BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_ROLLBACK
+#define bcmolt_xgpon_onu_onu_tuning_out_id_status                                               BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_STATUS
+#define bcmolt_xgpon_onu_onu_tuning_out_id__num_of                                              BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID__NUM_OF
+#define bcmolt_xgpon_onu_request_registration_id_sma_flag                                       BCMOLT_XGPON_ONU_REQUEST_REGISTRATION_ID_SMA_FLAG
+#define bcmolt_xgpon_onu_request_registration_id__num_of                                        BCMOLT_XGPON_ONU_REQUEST_REGISTRATION_ID__NUM_OF
+#define bcmolt_xgpon_onu_rssi_measurement_id__num_of                                            BCMOLT_XGPON_ONU_RSSI_MEASUREMENT_ID__NUM_OF
+#define bcmolt_xgpon_onu_secure_mutual_authentication_id_master_key                             BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_ID_MASTER_KEY
+#define bcmolt_xgpon_onu_secure_mutual_authentication_id_buffer                                 BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_ID_BUFFER
+#define bcmolt_xgpon_onu_secure_mutual_authentication_id_mic                                    BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_ID_MIC
+#define bcmolt_xgpon_onu_secure_mutual_authentication_id__num_of                                BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_ID__NUM_OF
+#define bcmolt_xgpon_onu_set_onu_state_id_onu_state                                             BCMOLT_XGPON_ONU_SET_ONU_STATE_ID_ONU_STATE
+#define bcmolt_xgpon_onu_set_onu_state_id__num_of                                               BCMOLT_XGPON_ONU_SET_ONU_STATE_ID__NUM_OF
+#define bcmolt_xgpon_onu_cpu_packets_id_packet_type                                             BCMOLT_XGPON_ONU_CPU_PACKETS_ID_PACKET_TYPE
+#define bcmolt_xgpon_onu_cpu_packets_id_calc_crc                                                BCMOLT_XGPON_ONU_CPU_PACKETS_ID_CALC_CRC
+#define bcmolt_xgpon_onu_cpu_packets_id_number_of_packets                                       BCMOLT_XGPON_ONU_CPU_PACKETS_ID_NUMBER_OF_PACKETS
+#define bcmolt_xgpon_onu_cpu_packets_id_packet_size                                             BCMOLT_XGPON_ONU_CPU_PACKETS_ID_PACKET_SIZE
+#define bcmolt_xgpon_onu_cpu_packets_id_buffer                                                  BCMOLT_XGPON_ONU_CPU_PACKETS_ID_BUFFER
+#define bcmolt_xgpon_onu_cpu_packets_id__num_of                                                 BCMOLT_XGPON_ONU_CPU_PACKETS_ID__NUM_OF
+#define bcmolt_xgpon_onu_ploam_packet_id_default_key                                            BCMOLT_XGPON_ONU_PLOAM_PACKET_ID_DEFAULT_KEY
+#define bcmolt_xgpon_onu_ploam_packet_id_ploam                                                  BCMOLT_XGPON_ONU_PLOAM_PACKET_ID_PLOAM
+#define bcmolt_xgpon_onu_ploam_packet_id__num_of                                                BCMOLT_XGPON_ONU_PLOAM_PACKET_ID__NUM_OF
+#define bcmolt_xgpon_onu_cpu_packet_id_port_id                                                  BCMOLT_XGPON_ONU_CPU_PACKET_ID_PORT_ID
+#define bcmolt_xgpon_onu_cpu_packet_id_crc_ok                                                   BCMOLT_XGPON_ONU_CPU_PACKET_ID_CRC_OK
+#define bcmolt_xgpon_onu_cpu_packet_id_packet_size                                              BCMOLT_XGPON_ONU_CPU_PACKET_ID_PACKET_SIZE
+#define bcmolt_xgpon_onu_cpu_packet_id_buffer                                                   BCMOLT_XGPON_ONU_CPU_PACKET_ID_BUFFER
+#define bcmolt_xgpon_onu_cpu_packet_id__num_of                                                  BCMOLT_XGPON_ONU_CPU_PACKET_ID__NUM_OF
+#define bcmolt_xgpon_onu_omci_packet_id_port_id                                                 BCMOLT_XGPON_ONU_OMCI_PACKET_ID_PORT_ID
+#define bcmolt_xgpon_onu_omci_packet_id_crc_ok                                                  BCMOLT_XGPON_ONU_OMCI_PACKET_ID_CRC_OK
+#define bcmolt_xgpon_onu_omci_packet_id_packet_size                                             BCMOLT_XGPON_ONU_OMCI_PACKET_ID_PACKET_SIZE
+#define bcmolt_xgpon_onu_omci_packet_id_buffer                                                  BCMOLT_XGPON_ONU_OMCI_PACKET_ID_BUFFER
+#define bcmolt_xgpon_onu_omci_packet_id__num_of                                                 BCMOLT_XGPON_ONU_OMCI_PACKET_ID__NUM_OF
+#define bcmolt_xgpon_trx_key_id_pon_ni                                                          BCMOLT_XGPON_TRX_KEY_ID_PON_NI
+#define bcmolt_xgpon_trx_key_id__num_of                                                         BCMOLT_XGPON_TRX_KEY_ID__NUM_OF
+#define bcmolt_xgpon_trx_cfg_id_burst_profile                                                   BCMOLT_XGPON_TRX_CFG_ID_BURST_PROFILE
+#define bcmolt_xgpon_trx_cfg_id_transceiver_config                                              BCMOLT_XGPON_TRX_CFG_ID_TRANSCEIVER_CONFIG
+#define bcmolt_xgpon_trx_cfg_id_transceiver_type                                                BCMOLT_XGPON_TRX_CFG_ID_TRANSCEIVER_TYPE
+#define bcmolt_xgpon_trx_cfg_id_debug                                                           BCMOLT_XGPON_TRX_CFG_ID_DEBUG
+#define bcmolt_xgpon_trx_cfg_id_rssi_normal_config                                              BCMOLT_XGPON_TRX_CFG_ID_RSSI_NORMAL_CONFIG
+#define bcmolt_xgpon_trx_cfg_id_rssi_ranging_config                                             BCMOLT_XGPON_TRX_CFG_ID_RSSI_RANGING_CONFIG
+#define bcmolt_xgpon_trx_cfg_id_serdes_configuration                                            BCMOLT_XGPON_TRX_CFG_ID_SERDES_CONFIGURATION
+#define bcmolt_xgpon_trx_cfg_id_burst_profile_delimiter_max_errors                              BCMOLT_XGPON_TRX_CFG_ID_BURST_PROFILE_DELIMITER_MAX_ERRORS
+#define bcmolt_xgpon_trx_cfg_id_ranging_sm_patterns_at_init                                     BCMOLT_XGPON_TRX_CFG_ID_RANGING_SM_PATTERNS_AT_INIT
+#define bcmolt_xgpon_trx_cfg_id_ranging_sm_patterns_ed_failure                                  BCMOLT_XGPON_TRX_CFG_ID_RANGING_SM_PATTERNS_ED_FAILURE
+#define bcmolt_xgpon_trx_cfg_id_reset_on_del_miss                                               BCMOLT_XGPON_TRX_CFG_ID_RESET_ON_DEL_MISS
+#define bcmolt_xgpon_trx_cfg_id_ed_state                                                        BCMOLT_XGPON_TRX_CFG_ID_ED_STATE
+#define bcmolt_xgpon_trx_cfg_id_invert_ed                                                       BCMOLT_XGPON_TRX_CFG_ID_INVERT_ED
+#define bcmolt_xgpon_trx_cfg_id_end_of_burst_reset                                              BCMOLT_XGPON_TRX_CFG_ID_END_OF_BURST_RESET
+#define bcmolt_xgpon_trx_cfg_id_trx_rst_polarity                                                BCMOLT_XGPON_TRX_CFG_ID_TRX_RST_POLARITY
+#define bcmolt_xgpon_trx_cfg_id__num_of                                                         BCMOLT_XGPON_TRX_CFG_ID__NUM_OF
+#define bcmolt_xpon_serdes_key_id_pon_ni                                                        BCMOLT_XPON_SERDES_KEY_ID_PON_NI
+#define bcmolt_xpon_serdes_key_id_instance                                                      BCMOLT_XPON_SERDES_KEY_ID_INSTANCE
+#define bcmolt_xpon_serdes_key_id__num_of                                                       BCMOLT_XPON_SERDES_KEY_ID__NUM_OF
+#define bcmolt_xpon_serdes_cfg_id_rx_vga                                                        BCMOLT_XPON_SERDES_CFG_ID_RX_VGA
+#define bcmolt_xpon_serdes_cfg_id_rx_pf                                                         BCMOLT_XPON_SERDES_CFG_ID_RX_PF
+#define bcmolt_xpon_serdes_cfg_id_rx_lfpf                                                       BCMOLT_XPON_SERDES_CFG_ID_RX_LFPF
+#define bcmolt_xpon_serdes_cfg_id_rx_dfe1                                                       BCMOLT_XPON_SERDES_CFG_ID_RX_DFE1
+#define bcmolt_xpon_serdes_cfg_id_rx_dfe2                                                       BCMOLT_XPON_SERDES_CFG_ID_RX_DFE2
+#define bcmolt_xpon_serdes_cfg_id_rx_dfe3                                                       BCMOLT_XPON_SERDES_CFG_ID_RX_DFE3
+#define bcmolt_xpon_serdes_cfg_id_rx_dfe4                                                       BCMOLT_XPON_SERDES_CFG_ID_RX_DFE4
+#define bcmolt_xpon_serdes_cfg_id_rx_dfe5                                                       BCMOLT_XPON_SERDES_CFG_ID_RX_DFE5
+#define bcmolt_xpon_serdes_cfg_id_tx_pre                                                        BCMOLT_XPON_SERDES_CFG_ID_TX_PRE
+#define bcmolt_xpon_serdes_cfg_id_tx_main                                                       BCMOLT_XPON_SERDES_CFG_ID_TX_MAIN
+#define bcmolt_xpon_serdes_cfg_id_tx_post1                                                      BCMOLT_XPON_SERDES_CFG_ID_TX_POST1
+#define bcmolt_xpon_serdes_cfg_id_tx_post2                                                      BCMOLT_XPON_SERDES_CFG_ID_TX_POST2
+#define bcmolt_xpon_serdes_cfg_id_tx_post3                                                      BCMOLT_XPON_SERDES_CFG_ID_TX_POST3
+#define bcmolt_xpon_serdes_cfg_id_tx_amp                                                        BCMOLT_XPON_SERDES_CFG_ID_TX_AMP
+#define bcmolt_xpon_serdes_cfg_id__num_of                                                       BCMOLT_XPON_SERDES_CFG_ID__NUM_OF
+
+/** Checks whether the given object type has the given tag. 
+ *
+ * \return true if the given object has the given tag, false otherwise 
+ */
+bcmos_bool bcmolt_obj_has_tag(bcmolt_obj_id obj, bcmolt_obj_tag tag);
+
+/** @} */
+#endif /* BCMOLT_MODEL_IDS_H_ */
diff --git a/bcm68620_release/release/host_driver/model/bcmolt_model_revision.h b/bcm68620_release/release/host_driver/model/bcmolt_model_revision.h
new file mode 100755
index 0000000..5f93880
--- /dev/null
+++ b/bcm68620_release/release/host_driver/model/bcmolt_model_revision.h
@@ -0,0 +1,47 @@
+/*
+<:copyright-BRCM:2016:proprietary:standard
+ 
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+ 
+This program is the proprietary software of Broadcom Corporation and/or its
+licensors, and may only be used, duplicated, modified or distributed pursuant
+to the terms and conditions of a separate, written license agreement executed
+between you and Broadcom (an "Authorized License").  Except as set forth in
+an Authorized License, Broadcom grants no license (express or implied), right
+to use, or waiver of any kind with respect to the Software, and Broadcom
+expressly reserves all rights in and to the Software and all intellectual
+property rights therein.  IF YOU HAVE NO AUTHORIZED LICENSE, THEN YOU HAVE
+NO RIGHT TO USE THIS SOFTWARE IN ANY WAY, AND SHOULD IMMEDIATELY NOTIFY
+BROADCOM AND DISCONTINUE ALL USE OF THE SOFTWARE.
+ 
+Except as expressly set forth in the Authorized License,
+ 
+1. This program, including its structure, sequence and organization,
+    constitutes the valuable trade secrets of Broadcom, and you shall use
+    all reasonable efforts to protect the confidentiality thereof, and to
+    use this information only in connection with your use of Broadcom
+    integrated circuit products.
+ 
+2. TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
+    AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES, REPRESENTATIONS OR
+    WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH
+    RESPECT TO THE SOFTWARE.  BROADCOM SPECIFICALLY DISCLAIMS ANY AND
+    ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY, NONINFRINGEMENT,
+    FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES, ACCURACY OR
+    COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR CORRESPONDENCE
+    TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING OUT OF USE OR
+    PERFORMANCE OF THE SOFTWARE.
+ 
+3. TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM OR
+    ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL, INCIDENTAL, SPECIAL,
+    INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER ARISING OUT OF OR IN ANY
+    WAY RELATING TO YOUR USE OF OR INABILITY TO USE THE SOFTWARE EVEN
+    IF BROADCOM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES;
+    OR (ii) ANY AMOUNT IN EXCESS OF THE AMOUNT ACTUALLY PAID FOR THE
+    SOFTWARE ITSELF OR U.S. $1, WHICHEVER IS GREATER. THESE LIMITATIONS
+    SHALL APPLY NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY
+    LIMITED REMEDY.
+:>
+*/
+#define BCMOLT_MODEL_REVISION 1
diff --git a/bcm68620_release/release/host_driver/model/bcmolt_model_types.c b/bcm68620_release/release/host_driver/model/bcmolt_model_types.c
new file mode 100644
index 0000000..cce3c31
--- /dev/null
+++ b/bcm68620_release/release/host_driver/model/bcmolt_model_types.c
@@ -0,0 +1,105484 @@
+/*
+<:copyright-BRCM:2016:proprietary:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+This program is the proprietary software of Broadcom Corporation and/or its
+licensors, and may only be used, duplicated, modified or distributed pursuant
+to the terms and conditions of a separate, written license agreement executed
+between you and Broadcom (an "Authorized License").  Except as set forth in
+an Authorized License, Broadcom grants no license (express or implied), right
+to use, or waiver of any kind with respect to the Software, and Broadcom
+expressly reserves all rights in and to the Software and all intellectual
+property rights therein.  IF YOU HAVE NO AUTHORIZED LICENSE, THEN YOU HAVE
+NO RIGHT TO USE THIS SOFTWARE IN ANY WAY, AND SHOULD IMMEDIATELY NOTIFY
+BROADCOM AND DISCONTINUE ALL USE OF THE SOFTWARE.
+
+Except as expressly set forth in the Authorized License,
+
+1. This program, including its structure, sequence and organization,
+    constitutes the valuable trade secrets of Broadcom, and you shall use
+    all reasonable efforts to protect the confidentiality thereof, and to
+    use this information only in connection with your use of Broadcom
+    integrated circuit products.
+
+2. TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
+    AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES, REPRESENTATIONS OR
+    WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH
+    RESPECT TO THE SOFTWARE.  BROADCOM SPECIFICALLY DISCLAIMS ANY AND
+    ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY, NONINFRINGEMENT,
+    FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES, ACCURACY OR
+    COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR CORRESPONDENCE
+    TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING OUT OF USE OR
+    PERFORMANCE OF THE SOFTWARE.
+
+3. TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM OR
+    ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL, INCIDENTAL, SPECIAL,
+    INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER ARISING OUT OF OR IN ANY
+    WAY RELATING TO YOUR USE OF OR INABILITY TO USE THE SOFTWARE EVEN
+    IF BROADCOM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES;
+    OR (ii) ANY AMOUNT IN EXCESS OF THE AMOUNT ACTUALLY PAID FOR THE
+    SOFTWARE ITSELF OR U.S. $1, WHICHEVER IS GREATER. THESE LIMITATIONS
+    SHALL APPLY NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY
+    LIMITED REMEDY.
+:>
+*/
+#include "bcmolt_model_types.h"
+#include "bcmolt_model_ids.h"
+
+/******************************************************************************/
+bcmos_bool bcmolt_activation_fail_reason_pack(bcmolt_activation_fail_reason this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_activation_fail_reason_unpack(bcmolt_activation_fail_reason *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_additional_bw_eligibility_pack(bcmolt_additional_bw_eligibility this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_additional_bw_eligibility_unpack(bcmolt_additional_bw_eligibility *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_ni_cfg_id_pack(bcmolt_ae_ni_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_ni_cfg_id_unpack(bcmolt_ae_ni_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_ni_en_state_pack(bcmolt_ae_ni_en_state this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_ni_en_state_unpack(bcmolt_ae_ni_en_state *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_ni_key_id_pack(bcmolt_ae_ni_key_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_ni_key_id_unpack(bcmolt_ae_ni_key_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_ni_set_ae_ni_en_state_id_pack(bcmolt_ae_ni_set_ae_ni_en_state_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_ni_set_ae_ni_en_state_id_unpack(bcmolt_ae_ni_set_ae_ni_en_state_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_ds_auto_cfg_id_pack(bcmolt_ae_path_ds_auto_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_ds_auto_cfg_id_unpack(bcmolt_ae_path_ds_auto_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_ds_key_id_pack(bcmolt_ae_path_ds_key_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_ds_key_id_unpack(bcmolt_ae_path_ds_key_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_ds_stat_alarm_cleared_id_pack(bcmolt_ae_path_ds_stat_alarm_cleared_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_ds_stat_alarm_cleared_id_unpack(bcmolt_ae_path_ds_stat_alarm_cleared_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_ds_stat_alarm_raised_id_pack(bcmolt_ae_path_ds_stat_alarm_raised_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_ds_stat_alarm_raised_id_unpack(bcmolt_ae_path_ds_stat_alarm_raised_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_ds_stat_cfg_id_pack(bcmolt_ae_path_ds_stat_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_ds_stat_cfg_id_unpack(bcmolt_ae_path_ds_stat_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_ds_stat_id_pack(bcmolt_ae_path_ds_stat_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_ds_stat_id_unpack(bcmolt_ae_path_ds_stat_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_us_auto_cfg_id_pack(bcmolt_ae_path_us_auto_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_us_auto_cfg_id_unpack(bcmolt_ae_path_us_auto_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_us_key_id_pack(bcmolt_ae_path_us_key_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_us_key_id_unpack(bcmolt_ae_path_us_key_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_us_stat_alarm_cleared_id_pack(bcmolt_ae_path_us_stat_alarm_cleared_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_us_stat_alarm_cleared_id_unpack(bcmolt_ae_path_us_stat_alarm_cleared_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_us_stat_alarm_raised_id_pack(bcmolt_ae_path_us_stat_alarm_raised_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_us_stat_alarm_raised_id_unpack(bcmolt_ae_path_us_stat_alarm_raised_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_us_stat_cfg_id_pack(bcmolt_ae_path_us_stat_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_us_stat_cfg_id_unpack(bcmolt_ae_path_us_stat_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_us_stat_id_pack(bcmolt_ae_path_us_stat_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_us_stat_id_unpack(bcmolt_ae_path_us_stat_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_alloc_operation_pack(bcmolt_alloc_operation this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_alloc_operation_unpack(bcmolt_alloc_operation *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_alloc_state_pack(bcmolt_alloc_state this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_alloc_state_unpack(bcmolt_alloc_state *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_alloc_type_pack(bcmolt_alloc_type this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_alloc_type_unpack(bcmolt_alloc_type *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_alloc_type_to_scan_pack(bcmolt_alloc_type_to_scan this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_alloc_type_to_scan_unpack(bcmolt_alloc_type_to_scan *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_api_capture_buffer_mode_pack(bcmolt_api_capture_buffer_mode this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_api_capture_buffer_mode_unpack(bcmolt_api_capture_buffer_mode *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_api_capture_location_pack(bcmolt_api_capture_location this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_api_capture_location_unpack(bcmolt_api_capture_location *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_calibration_record_pack(bcmolt_calibration_record this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_calibration_record_unpack(bcmolt_calibration_record *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_sign_pack(bcmolt_sign this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_sign_unpack(bcmolt_sign *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_upstream_line_rate_capabilities_pack(bcmolt_upstream_line_rate_capabilities this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_upstream_line_rate_capabilities_unpack(bcmolt_upstream_line_rate_capabilities *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_link_type_pack(bcmolt_link_type this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_link_type_unpack(bcmolt_link_type *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_capture_strobe_signal_pack(bcmolt_capture_strobe_signal this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_capture_strobe_signal_unpack(bcmolt_capture_strobe_signal *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_channel_cfg_id_pack(bcmolt_channel_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_channel_cfg_id_unpack(bcmolt_channel_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_channel_key_id_pack(bcmolt_channel_key_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_channel_key_id_unpack(bcmolt_channel_key_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_console_redirection_pack(bcmolt_console_redirection this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_console_redirection_unpack(bcmolt_console_redirection *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_control_state_pack(bcmolt_control_state this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_control_state_unpack(bcmolt_control_state *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_dba_mode_pack(bcmolt_dba_mode this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_dba_mode_unpack(bcmolt_dba_mode *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_dba_ram_pack(bcmolt_dba_ram this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_dba_ram_unpack(bcmolt_dba_ram *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_dba_type_pack(bcmolt_dba_type this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_dba_type_unpack(bcmolt_dba_type *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ddr_test_status_pack(bcmolt_ddr_test_status this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ddr_test_status_unpack(bcmolt_ddr_test_status *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ddr_test_result_pack(bcmolt_ddr_test_result this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ddr_test_result_unpack(bcmolt_ddr_test_result *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_host_connection_fail_reason_pack(bcmolt_host_connection_fail_reason this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_host_connection_fail_reason_unpack(bcmolt_host_connection_fail_reason *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_deactivation_reason_pack(bcmolt_deactivation_reason this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_deactivation_reason_unpack(bcmolt_deactivation_reason *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_debug_auto_cfg_id_pack(bcmolt_debug_auto_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_debug_auto_cfg_id_unpack(bcmolt_debug_auto_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_debug_cfg_id_pack(bcmolt_debug_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_debug_cfg_id_unpack(bcmolt_debug_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_debug_cli_input_id_pack(bcmolt_debug_cli_input_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_debug_cli_input_id_unpack(bcmolt_debug_cli_input_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_debug_cli_output_id_pack(bcmolt_debug_cli_output_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_debug_cli_output_id_unpack(bcmolt_debug_cli_output_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_debug_file_almost_full_id_pack(bcmolt_debug_file_almost_full_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_debug_file_almost_full_id_unpack(bcmolt_debug_file_almost_full_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_debug_key_id_pack(bcmolt_debug_key_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_debug_key_id_unpack(bcmolt_debug_key_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_debug_reset_api_capture_id_pack(bcmolt_debug_reset_api_capture_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_debug_reset_api_capture_id_unpack(bcmolt_debug_reset_api_capture_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_debug_start_api_capture_id_pack(bcmolt_debug_start_api_capture_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_debug_start_api_capture_id_unpack(bcmolt_debug_start_api_capture_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_debug_stop_api_capture_id_pack(bcmolt_debug_stop_api_capture_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_debug_stop_api_capture_id_unpack(bcmolt_debug_stop_api_capture_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_auto_cfg_id_pack(bcmolt_device_auto_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_auto_cfg_id_unpack(bcmolt_device_auto_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_cfg_id_pack(bcmolt_device_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_cfg_id_unpack(bcmolt_device_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_chip_revision_pack(bcmolt_device_chip_revision this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_chip_revision_unpack(bcmolt_device_chip_revision *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_connect_id_pack(bcmolt_device_connect_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_connect_id_unpack(bcmolt_device_connect_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_connection_complete_id_pack(bcmolt_device_connection_complete_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_connection_complete_id_unpack(bcmolt_device_connection_complete_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_connection_established_id_pack(bcmolt_device_connection_established_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_connection_established_id_unpack(bcmolt_device_connection_established_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_connection_failure_id_pack(bcmolt_device_connection_failure_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_connection_failure_id_unpack(bcmolt_device_connection_failure_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_ddr_test_complete_id_pack(bcmolt_device_ddr_test_complete_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_ddr_test_complete_id_unpack(bcmolt_device_ddr_test_complete_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_device_keep_alive_id_pack(bcmolt_device_device_keep_alive_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_device_keep_alive_id_unpack(bcmolt_device_device_keep_alive_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_device_ready_id_pack(bcmolt_device_device_ready_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_device_ready_id_unpack(bcmolt_device_device_ready_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_disconnect_id_pack(bcmolt_device_disconnect_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_disconnect_id_unpack(bcmolt_device_disconnect_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_disconnection_complete_id_pack(bcmolt_device_disconnection_complete_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_disconnection_complete_id_unpack(bcmolt_device_disconnection_complete_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_host_keep_alive_id_pack(bcmolt_device_host_keep_alive_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_host_keep_alive_id_unpack(bcmolt_device_host_keep_alive_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_image_transfer_complete_id_pack(bcmolt_device_image_transfer_complete_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_image_transfer_complete_id_unpack(bcmolt_device_image_transfer_complete_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_image_transfer_data_id_pack(bcmolt_device_image_transfer_data_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_image_transfer_data_id_unpack(bcmolt_device_image_transfer_data_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_image_transfer_start_id_pack(bcmolt_device_image_transfer_start_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_image_transfer_start_id_unpack(bcmolt_device_image_transfer_start_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_image_type_pack(bcmolt_device_image_type this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_image_type_unpack(bcmolt_device_image_type *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_indications_dropped_id_pack(bcmolt_device_indications_dropped_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_indications_dropped_id_unpack(bcmolt_device_indications_dropped_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_key_id_pack(bcmolt_device_key_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_key_id_unpack(bcmolt_device_key_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_speed_pack(bcmolt_nni_speed this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_speed_unpack(bcmolt_nni_speed *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_reset_id_pack(bcmolt_device_reset_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_reset_id_unpack(bcmolt_device_reset_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_reset_mode_pack(bcmolt_device_reset_mode this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_reset_mode_unpack(bcmolt_device_reset_mode *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_run_ddr_test_id_pack(bcmolt_device_run_ddr_test_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_run_ddr_test_id_unpack(bcmolt_device_run_ddr_test_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_state_pack(bcmolt_device_state this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_state_unpack(bcmolt_device_state *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_sw_error_id_pack(bcmolt_device_sw_error_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_sw_error_id_unpack(bcmolt_device_sw_error_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_sw_exception_id_pack(bcmolt_device_sw_exception_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_sw_exception_id_unpack(bcmolt_device_sw_exception_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_sw_upgrade_activate_id_pack(bcmolt_device_sw_upgrade_activate_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_sw_upgrade_activate_id_unpack(bcmolt_device_sw_upgrade_activate_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_disable_serial_number_control_pack(bcmolt_disable_serial_number_control this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_disable_serial_number_control_unpack(bcmolt_disable_serial_number_control *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_drv_icf_id_pack(bcmolt_drv_icf_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_drv_icf_id_unpack(bcmolt_drv_icf_id *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_drv_sgb_id_pack(bcmolt_drv_sgb_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_drv_sgb_id_unpack(bcmolt_drv_sgb_id *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ds_vlan_action_pack(bcmolt_ds_vlan_action this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ds_vlan_action_unpack(bcmolt_ds_vlan_action *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_tfb_trap_behavior_pack(bcmolt_tfb_trap_behavior this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_tfb_trap_behavior_unpack(bcmolt_tfb_trap_behavior *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_tfb_mode_pack(bcmolt_tfb_mode this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_tfb_mode_unpack(bcmolt_tfb_mode *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_lim_sec_mode_up_pack(bcmolt_lim_sec_mode_up this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_lim_sec_mode_up_unpack(bcmolt_lim_sec_mode_up *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_lim_sec_mode_dn_pack(bcmolt_lim_sec_mode_dn this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_lim_sec_mode_dn_unpack(bcmolt_lim_sec_mode_dn *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xim_sec_mode_pack(bcmolt_xim_sec_mode this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xim_sec_mode_unpack(bcmolt_xim_sec_mode *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_hsc_ram_pack(bcmolt_hsc_ram this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_hsc_ram_unpack(bcmolt_hsc_ram *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_lim_ram_pack(bcmolt_lim_ram this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_lim_ram_unpack(bcmolt_lim_ram *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_lky_ram_pack(bcmolt_lky_ram this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_lky_ram_unpack(bcmolt_lky_ram *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_mic_ram_pack(bcmolt_mic_ram this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_mic_ram_unpack(bcmolt_mic_ram *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xpcsrm_ram_pack(bcmolt_xpcsrm_ram this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xpcsrm_ram_unpack(bcmolt_xpcsrm_ram *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_embedded_image_transfer_status_pack(bcmolt_embedded_image_transfer_status this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_embedded_image_transfer_status_unpack(bcmolt_embedded_image_transfer_status *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_encryption_information_format_pack(bcmolt_epon_encryption_information_format this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_encryption_information_format_unpack(bcmolt_epon_encryption_information_format *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_energy_detect_source_pack(bcmolt_energy_detect_source this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_energy_detect_source_unpack(bcmolt_energy_detect_source *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_1g_turbo_mode_pack(bcmolt_epon_1g_turbo_mode this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_1g_turbo_mode_unpack(bcmolt_epon_1g_turbo_mode *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_clock_transport_mode_pack(bcmolt_epon_clock_transport_mode this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_clock_transport_mode_unpack(bcmolt_epon_clock_transport_mode *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_dba_reporting_mode_pack(bcmolt_epon_dba_reporting_mode this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_dba_reporting_mode_unpack(bcmolt_epon_dba_reporting_mode *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_rate_pack(bcmolt_epon_link_rate this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_rate_unpack(bcmolt_epon_link_rate *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_status_pack(bcmolt_status this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_status_unpack(bcmolt_status *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_auto_cfg_id_pack(bcmolt_epon_denied_link_auto_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_auto_cfg_id_unpack(bcmolt_epon_denied_link_auto_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_cfg_id_pack(bcmolt_epon_denied_link_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_cfg_id_unpack(bcmolt_epon_denied_link_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_key_id_pack(bcmolt_epon_denied_link_key_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_key_id_unpack(bcmolt_epon_denied_link_key_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_laser_on_off_violation_id_pack(bcmolt_epon_denied_link_laser_on_off_violation_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_laser_on_off_violation_id_unpack(bcmolt_epon_denied_link_laser_on_off_violation_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_llid_pool_empty_violation_id_pack(bcmolt_epon_denied_link_llid_pool_empty_violation_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_llid_pool_empty_violation_id_unpack(bcmolt_epon_denied_link_llid_pool_empty_violation_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_max_link_violation_id_pack(bcmolt_epon_denied_link_max_link_violation_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_max_link_violation_id_unpack(bcmolt_epon_denied_link_max_link_violation_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_overhead_profile_violation_id_pack(bcmolt_epon_denied_link_overhead_profile_violation_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_overhead_profile_violation_id_unpack(bcmolt_epon_denied_link_overhead_profile_violation_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_range_violation_id_pack(bcmolt_epon_denied_link_range_violation_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_range_violation_id_unpack(bcmolt_epon_denied_link_range_violation_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_rogue_violation_id_pack(bcmolt_epon_denied_link_rogue_violation_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_rogue_violation_id_unpack(bcmolt_epon_denied_link_rogue_violation_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_system_resource_violation_id_pack(bcmolt_epon_denied_link_system_resource_violation_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_system_resource_violation_id_unpack(bcmolt_epon_denied_link_system_resource_violation_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_tdm_channels_exhausted_id_pack(bcmolt_epon_denied_link_tdm_channels_exhausted_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_tdm_channels_exhausted_id_unpack(bcmolt_epon_denied_link_tdm_channels_exhausted_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_unknown_link_violation_id_pack(bcmolt_epon_denied_link_unknown_link_violation_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_unknown_link_violation_id_unpack(bcmolt_epon_denied_link_unknown_link_violation_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_upstream_bandwidth_violation_id_pack(bcmolt_epon_denied_link_upstream_bandwidth_violation_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_upstream_bandwidth_violation_id_unpack(bcmolt_epon_denied_link_upstream_bandwidth_violation_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_encryption_mode_pack(bcmolt_epon_encryption_mode this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_encryption_mode_unpack(bcmolt_epon_encryption_mode *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_key_choice_pack(bcmolt_epon_key_choice this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_key_choice_unpack(bcmolt_epon_key_choice *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_encryption_direction_pack(bcmolt_epon_encryption_direction this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_encryption_direction_unpack(bcmolt_epon_encryption_direction *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_fec_en_state_pack(bcmolt_epon_fec_en_state this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_fec_en_state_unpack(bcmolt_epon_fec_en_state *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_type_pack(bcmolt_epon_oam_type this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_type_unpack(bcmolt_epon_oam_type *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_auto_cfg_id_pack(bcmolt_epon_link_auto_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_auto_cfg_id_unpack(bcmolt_epon_link_auto_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_cfg_id_pack(bcmolt_epon_link_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_cfg_id_unpack(bcmolt_epon_link_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_delete_link_id_pack(bcmolt_epon_link_delete_link_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_delete_link_id_unpack(bcmolt_epon_link_delete_link_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_duplicate_mpcp_registration_request_id_pack(bcmolt_epon_link_duplicate_mpcp_registration_request_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_duplicate_mpcp_registration_request_id_unpack(bcmolt_epon_link_duplicate_mpcp_registration_request_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_encryption_enabled_id_pack(bcmolt_epon_link_encryption_enabled_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_encryption_enabled_id_unpack(bcmolt_epon_link_encryption_enabled_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_fec_state_pack(bcmolt_epon_link_fec_state this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_fec_state_unpack(bcmolt_epon_link_fec_state *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_force_rediscovery_id_pack(bcmolt_epon_link_force_rediscovery_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_force_rediscovery_id_unpack(bcmolt_epon_link_force_rediscovery_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_frame_captured_id_pack(bcmolt_epon_link_frame_captured_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_frame_captured_id_unpack(bcmolt_epon_link_frame_captured_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_status_pack(bcmolt_epon_link_status this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_status_unpack(bcmolt_epon_link_status *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_mpcp_discovery_info_pack(bcmolt_mpcp_discovery_info this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_mpcp_discovery_info_unpack(bcmolt_mpcp_discovery_info *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_inject_frame_id_pack(bcmolt_epon_link_inject_frame_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_inject_frame_id_unpack(bcmolt_epon_link_inject_frame_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_key_exchange_failure_id_pack(bcmolt_epon_link_key_exchange_failure_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_key_exchange_failure_id_unpack(bcmolt_epon_link_key_exchange_failure_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_key_exchange_start_id_pack(bcmolt_epon_link_key_exchange_start_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_key_exchange_start_id_unpack(bcmolt_epon_link_key_exchange_start_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_key_exchange_started_id_pack(bcmolt_epon_link_key_exchange_started_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_key_exchange_started_id_unpack(bcmolt_epon_link_key_exchange_started_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_key_exchange_stop_id_pack(bcmolt_epon_link_key_exchange_stop_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_key_exchange_stop_id_unpack(bcmolt_epon_link_key_exchange_stop_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_key_exchange_stopped_id_pack(bcmolt_epon_link_key_exchange_stopped_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_key_exchange_stopped_id_unpack(bcmolt_epon_link_key_exchange_stopped_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_key_id_pack(bcmolt_epon_link_key_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_key_id_unpack(bcmolt_epon_link_key_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_link_deleted_id_pack(bcmolt_epon_link_link_deleted_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_link_deleted_id_unpack(bcmolt_epon_link_link_deleted_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_link_speed_mismatch_id_pack(bcmolt_epon_link_link_speed_mismatch_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_link_speed_mismatch_id_unpack(bcmolt_epon_link_link_speed_mismatch_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_mpcp_deregistered_id_pack(bcmolt_epon_link_mpcp_deregistered_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_mpcp_deregistered_id_unpack(bcmolt_epon_link_mpcp_deregistered_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_mpcp_discovered_id_pack(bcmolt_epon_link_mpcp_discovered_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_mpcp_discovered_id_unpack(bcmolt_epon_link_mpcp_discovered_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_mpcp_reg_ack_timeout_id_pack(bcmolt_epon_link_mpcp_reg_ack_timeout_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_mpcp_reg_ack_timeout_id_unpack(bcmolt_epon_link_mpcp_reg_ack_timeout_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_mpcp_report_timeout_id_pack(bcmolt_epon_link_mpcp_report_timeout_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_mpcp_report_timeout_id_unpack(bcmolt_epon_link_mpcp_report_timeout_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_oam_keepalive_timeout_id_pack(bcmolt_epon_link_oam_keepalive_timeout_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_oam_keepalive_timeout_id_unpack(bcmolt_epon_link_oam_keepalive_timeout_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_oam_keepalive_timer_start_id_pack(bcmolt_epon_link_oam_keepalive_timer_start_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_oam_keepalive_timer_start_id_unpack(bcmolt_epon_link_oam_keepalive_timer_start_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_oam_keepalive_timer_started_id_pack(bcmolt_epon_link_oam_keepalive_timer_started_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_oam_keepalive_timer_started_id_unpack(bcmolt_epon_link_oam_keepalive_timer_started_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_oam_keepalive_timer_stop_id_pack(bcmolt_epon_link_oam_keepalive_timer_stop_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_oam_keepalive_timer_stop_id_unpack(bcmolt_epon_link_oam_keepalive_timer_stop_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_oam_keepalive_timer_stopped_id_pack(bcmolt_epon_link_oam_keepalive_timer_stopped_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_oam_keepalive_timer_stopped_id_unpack(bcmolt_epon_link_oam_keepalive_timer_stopped_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_preprovisioned_link_created_id_pack(bcmolt_epon_link_preprovisioned_link_created_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_preprovisioned_link_created_id_unpack(bcmolt_epon_link_preprovisioned_link_created_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_protection_switch_occurred_id_pack(bcmolt_epon_link_protection_switch_occurred_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_protection_switch_occurred_id_unpack(bcmolt_epon_link_protection_switch_occurred_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_range_value_changed_id_pack(bcmolt_epon_link_range_value_changed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_range_value_changed_id_unpack(bcmolt_epon_link_range_value_changed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_rerange_failure_id_pack(bcmolt_epon_link_rerange_failure_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_rerange_failure_id_unpack(bcmolt_epon_link_rerange_failure_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_stat_alarm_cleared_id_pack(bcmolt_epon_link_stat_alarm_cleared_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_stat_alarm_cleared_id_unpack(bcmolt_epon_link_stat_alarm_cleared_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_stat_alarm_raised_id_pack(bcmolt_epon_link_stat_alarm_raised_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_stat_alarm_raised_id_unpack(bcmolt_epon_link_stat_alarm_raised_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_stat_cfg_id_pack(bcmolt_epon_link_stat_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_stat_cfg_id_unpack(bcmolt_epon_link_stat_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_stat_id_pack(bcmolt_epon_link_stat_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_stat_id_unpack(bcmolt_epon_link_stat_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_state_flags_pack(bcmolt_epon_link_state_flags this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_state_flags_unpack(bcmolt_epon_link_state_flags *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_static_registration_done_id_pack(bcmolt_epon_link_static_registration_done_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_static_registration_done_id_unpack(bcmolt_epon_link_static_registration_done_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_static_registration_id_pack(bcmolt_epon_link_static_registration_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_static_registration_id_unpack(bcmolt_epon_link_static_registration_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_type_pack(bcmolt_epon_link_type this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_type_unpack(bcmolt_epon_link_type *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_mpcp_gate_mode_pack(bcmolt_mpcp_gate_mode this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_mpcp_gate_mode_unpack(bcmolt_mpcp_gate_mode *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_mpcp_registration_gate_flags_pack(bcmolt_mpcp_registration_gate_flags this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_mpcp_registration_gate_flags_unpack(bcmolt_mpcp_registration_gate_flags *this, bcmolt_buf *buf)
+{
+    uint32_t num_val;
+    if (!bcmolt_buf_read_u32(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_add_link_id_pack(bcmolt_epon_ni_add_link_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_add_link_id_unpack(bcmolt_epon_ni_add_link_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_add_multicast_link_id_pack(bcmolt_epon_ni_add_multicast_link_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_add_multicast_link_id_unpack(bcmolt_epon_ni_add_multicast_link_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_add_protected_standby_link_id_pack(bcmolt_epon_ni_add_protected_standby_link_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_add_protected_standby_link_id_unpack(bcmolt_epon_ni_add_protected_standby_link_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_auto_cfg_id_pack(bcmolt_epon_ni_auto_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_auto_cfg_id_unpack(bcmolt_epon_ni_auto_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_auto_rogue_scan_10g_failure_id_pack(bcmolt_epon_ni_auto_rogue_scan_10g_failure_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_auto_rogue_scan_10g_failure_id_unpack(bcmolt_epon_ni_auto_rogue_scan_10g_failure_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_auto_rogue_scan_1g_failure_id_pack(bcmolt_epon_ni_auto_rogue_scan_1g_failure_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_auto_rogue_scan_1g_failure_id_unpack(bcmolt_epon_ni_auto_rogue_scan_1g_failure_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_cfg_id_pack(bcmolt_epon_ni_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_cfg_id_unpack(bcmolt_epon_ni_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_en_state_pack(bcmolt_epon_ni_en_state this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_en_state_unpack(bcmolt_epon_ni_en_state *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_issue_rssi_grant_id_pack(bcmolt_epon_ni_issue_rssi_grant_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_issue_rssi_grant_id_unpack(bcmolt_epon_ni_issue_rssi_grant_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_key_id_pack(bcmolt_epon_ni_key_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_key_id_unpack(bcmolt_epon_ni_key_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_llid_quarantined_id_pack(bcmolt_epon_ni_llid_quarantined_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_llid_quarantined_id_unpack(bcmolt_epon_ni_llid_quarantined_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_mpcp_timestamp_changed_id_pack(bcmolt_epon_ni_mpcp_timestamp_changed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_mpcp_timestamp_changed_id_unpack(bcmolt_epon_ni_mpcp_timestamp_changed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_no_reports_id_pack(bcmolt_epon_ni_no_reports_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_no_reports_id_unpack(bcmolt_epon_ni_no_reports_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_onu_upgrade_complete_id_pack(bcmolt_epon_ni_onu_upgrade_complete_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_onu_upgrade_complete_id_unpack(bcmolt_epon_ni_onu_upgrade_complete_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_protection_switching_apply_rerange_delta_id_pack(bcmolt_epon_ni_protection_switching_apply_rerange_delta_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_protection_switching_apply_rerange_delta_id_unpack(bcmolt_epon_ni_protection_switching_apply_rerange_delta_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_rerange_failure_id_pack(bcmolt_epon_ni_rerange_failure_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_rerange_failure_id_unpack(bcmolt_epon_ni_rerange_failure_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_rogue_llid_scan_id_pack(bcmolt_epon_ni_rogue_llid_scan_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_rogue_llid_scan_id_unpack(bcmolt_epon_ni_rogue_llid_scan_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_rogue_scan_complete_id_pack(bcmolt_epon_ni_rogue_scan_complete_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_rogue_scan_complete_id_unpack(bcmolt_epon_ni_rogue_scan_complete_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_rssi_measurement_completed_id_pack(bcmolt_epon_ni_rssi_measurement_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_rssi_measurement_completed_id_unpack(bcmolt_epon_ni_rssi_measurement_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_set_epon_ni_en_state_id_pack(bcmolt_epon_ni_set_epon_ni_en_state_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_set_epon_ni_en_state_id_unpack(bcmolt_epon_ni_set_epon_ni_en_state_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_start_onu_upgrade_id_pack(bcmolt_epon_ni_start_onu_upgrade_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_start_onu_upgrade_id_unpack(bcmolt_epon_ni_start_onu_upgrade_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_state_change_completed_id_pack(bcmolt_epon_ni_state_change_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_state_change_completed_id_unpack(bcmolt_epon_ni_state_change_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_extension_type_pack(bcmolt_epon_oam_extension_type this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_extension_type_unpack(bcmolt_epon_oam_extension_type *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_10g_us_auto_cfg_id_pack(bcmolt_epon_onu_10g_us_auto_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_10g_us_auto_cfg_id_unpack(bcmolt_epon_onu_10g_us_auto_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_10g_us_cfg_id_pack(bcmolt_epon_onu_10g_us_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_10g_us_cfg_id_unpack(bcmolt_epon_onu_10g_us_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_10g_us_key_id_pack(bcmolt_epon_onu_10g_us_key_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_10g_us_key_id_unpack(bcmolt_epon_onu_10g_us_key_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_10g_us_stat_alarm_cleared_id_pack(bcmolt_epon_onu_10g_us_stat_alarm_cleared_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_10g_us_stat_alarm_cleared_id_unpack(bcmolt_epon_onu_10g_us_stat_alarm_cleared_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_10g_us_stat_alarm_raised_id_pack(bcmolt_epon_onu_10g_us_stat_alarm_raised_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_10g_us_stat_alarm_raised_id_unpack(bcmolt_epon_onu_10g_us_stat_alarm_raised_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_10g_us_stat_cfg_id_pack(bcmolt_epon_onu_10g_us_stat_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_10g_us_stat_cfg_id_unpack(bcmolt_epon_onu_10g_us_stat_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_10g_us_stat_id_pack(bcmolt_epon_onu_10g_us_stat_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_10g_us_stat_id_unpack(bcmolt_epon_onu_10g_us_stat_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_1g_us_auto_cfg_id_pack(bcmolt_epon_onu_1g_us_auto_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_1g_us_auto_cfg_id_unpack(bcmolt_epon_onu_1g_us_auto_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_1g_us_cfg_id_pack(bcmolt_epon_onu_1g_us_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_1g_us_cfg_id_unpack(bcmolt_epon_onu_1g_us_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_1g_us_key_id_pack(bcmolt_epon_onu_1g_us_key_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_1g_us_key_id_unpack(bcmolt_epon_onu_1g_us_key_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_1g_us_stat_alarm_cleared_id_pack(bcmolt_epon_onu_1g_us_stat_alarm_cleared_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_1g_us_stat_alarm_cleared_id_unpack(bcmolt_epon_onu_1g_us_stat_alarm_cleared_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_1g_us_stat_alarm_raised_id_pack(bcmolt_epon_onu_1g_us_stat_alarm_raised_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_1g_us_stat_alarm_raised_id_unpack(bcmolt_epon_onu_1g_us_stat_alarm_raised_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_1g_us_stat_cfg_id_pack(bcmolt_epon_onu_1g_us_stat_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_1g_us_stat_cfg_id_unpack(bcmolt_epon_onu_1g_us_stat_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_1g_us_stat_id_pack(bcmolt_epon_onu_1g_us_stat_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_1g_us_stat_id_unpack(bcmolt_epon_onu_1g_us_stat_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_upgrade_onu_response_code_pack(bcmolt_epon_onu_upgrade_onu_response_code this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_upgrade_onu_response_code_unpack(bcmolt_epon_onu_upgrade_onu_response_code *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_upgrade_return_code_pack(bcmolt_epon_onu_upgrade_return_code this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_upgrade_return_code_unpack(bcmolt_epon_onu_upgrade_return_code *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_ds_auto_cfg_id_pack(bcmolt_epon_path_10g_ds_auto_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_ds_auto_cfg_id_unpack(bcmolt_epon_path_10g_ds_auto_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_ds_cfg_id_pack(bcmolt_epon_path_10g_ds_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_ds_cfg_id_unpack(bcmolt_epon_path_10g_ds_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_ds_key_id_pack(bcmolt_epon_path_10g_ds_key_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_ds_key_id_unpack(bcmolt_epon_path_10g_ds_key_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_ds_stat_alarm_cleared_id_pack(bcmolt_epon_path_10g_ds_stat_alarm_cleared_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_ds_stat_alarm_cleared_id_unpack(bcmolt_epon_path_10g_ds_stat_alarm_cleared_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_ds_stat_alarm_raised_id_pack(bcmolt_epon_path_10g_ds_stat_alarm_raised_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_ds_stat_alarm_raised_id_unpack(bcmolt_epon_path_10g_ds_stat_alarm_raised_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_ds_stat_cfg_id_pack(bcmolt_epon_path_10g_ds_stat_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_ds_stat_cfg_id_unpack(bcmolt_epon_path_10g_ds_stat_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_ds_stat_id_pack(bcmolt_epon_path_10g_ds_stat_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_ds_stat_id_unpack(bcmolt_epon_path_10g_ds_stat_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_us_auto_cfg_id_pack(bcmolt_epon_path_10g_us_auto_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_us_auto_cfg_id_unpack(bcmolt_epon_path_10g_us_auto_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_us_cfg_id_pack(bcmolt_epon_path_10g_us_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_us_cfg_id_unpack(bcmolt_epon_path_10g_us_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_us_key_id_pack(bcmolt_epon_path_10g_us_key_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_us_key_id_unpack(bcmolt_epon_path_10g_us_key_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_us_stat_alarm_cleared_id_pack(bcmolt_epon_path_10g_us_stat_alarm_cleared_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_us_stat_alarm_cleared_id_unpack(bcmolt_epon_path_10g_us_stat_alarm_cleared_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_us_stat_alarm_raised_id_pack(bcmolt_epon_path_10g_us_stat_alarm_raised_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_us_stat_alarm_raised_id_unpack(bcmolt_epon_path_10g_us_stat_alarm_raised_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_us_stat_cfg_id_pack(bcmolt_epon_path_10g_us_stat_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_us_stat_cfg_id_unpack(bcmolt_epon_path_10g_us_stat_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_us_stat_id_pack(bcmolt_epon_path_10g_us_stat_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_us_stat_id_unpack(bcmolt_epon_path_10g_us_stat_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_ds_auto_cfg_id_pack(bcmolt_epon_path_1g_ds_auto_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_ds_auto_cfg_id_unpack(bcmolt_epon_path_1g_ds_auto_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_ds_cfg_id_pack(bcmolt_epon_path_1g_ds_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_ds_cfg_id_unpack(bcmolt_epon_path_1g_ds_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_ds_key_id_pack(bcmolt_epon_path_1g_ds_key_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_ds_key_id_unpack(bcmolt_epon_path_1g_ds_key_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_ds_stat_alarm_cleared_id_pack(bcmolt_epon_path_1g_ds_stat_alarm_cleared_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_ds_stat_alarm_cleared_id_unpack(bcmolt_epon_path_1g_ds_stat_alarm_cleared_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_ds_stat_alarm_raised_id_pack(bcmolt_epon_path_1g_ds_stat_alarm_raised_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_ds_stat_alarm_raised_id_unpack(bcmolt_epon_path_1g_ds_stat_alarm_raised_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_ds_stat_cfg_id_pack(bcmolt_epon_path_1g_ds_stat_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_ds_stat_cfg_id_unpack(bcmolt_epon_path_1g_ds_stat_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_ds_stat_id_pack(bcmolt_epon_path_1g_ds_stat_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_ds_stat_id_unpack(bcmolt_epon_path_1g_ds_stat_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_us_auto_cfg_id_pack(bcmolt_epon_path_1g_us_auto_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_us_auto_cfg_id_unpack(bcmolt_epon_path_1g_us_auto_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_us_cfg_id_pack(bcmolt_epon_path_1g_us_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_us_cfg_id_unpack(bcmolt_epon_path_1g_us_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_us_key_id_pack(bcmolt_epon_path_1g_us_key_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_us_key_id_unpack(bcmolt_epon_path_1g_us_key_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_us_stat_alarm_cleared_id_pack(bcmolt_epon_path_1g_us_stat_alarm_cleared_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_us_stat_alarm_cleared_id_unpack(bcmolt_epon_path_1g_us_stat_alarm_cleared_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_us_stat_alarm_raised_id_pack(bcmolt_epon_path_1g_us_stat_alarm_raised_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_us_stat_alarm_raised_id_unpack(bcmolt_epon_path_1g_us_stat_alarm_raised_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_us_stat_cfg_id_pack(bcmolt_epon_path_1g_us_stat_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_us_stat_cfg_id_unpack(bcmolt_epon_path_1g_us_stat_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_us_stat_id_pack(bcmolt_epon_path_1g_us_stat_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_us_stat_id_unpack(bcmolt_epon_path_1g_us_stat_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_protection_state_pack(bcmolt_epon_protection_state this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_protection_state_unpack(bcmolt_epon_protection_state *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_protection_switching_type_pack(bcmolt_epon_protection_switching_type this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_protection_switching_type_unpack(bcmolt_epon_protection_switching_type *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_protection_switching_detection_options_pack(bcmolt_protection_switching_detection_options this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_protection_switching_detection_options_unpack(bcmolt_protection_switching_detection_options *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_protection_switching_reranging_options_pack(bcmolt_epon_protection_switching_reranging_options this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_protection_switching_reranging_options_unpack(bcmolt_epon_protection_switching_reranging_options *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpio_pin_pack(bcmolt_gpio_pin this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpio_pin_unpack(bcmolt_gpio_pin *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpio_polarity_pack(bcmolt_gpio_polarity this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpio_polarity_unpack(bcmolt_gpio_polarity *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_rp_cfg_id_pack(bcmolt_epon_rp_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_rp_cfg_id_unpack(bcmolt_epon_rp_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_rp_key_id_pack(bcmolt_epon_rp_key_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_rp_key_id_unpack(bcmolt_epon_rp_key_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ext_irq_pack(bcmolt_ext_irq this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ext_irq_unpack(bcmolt_ext_irq *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_flush_mac_table_option_pack(bcmolt_flush_mac_table_option this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_flush_mac_table_option_unpack(bcmolt_flush_mac_table_option *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_frequency_adjustment_direction_pack(bcmolt_frequency_adjustment_direction this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_frequency_adjustment_direction_unpack(bcmolt_frequency_adjustment_direction *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gem_port_direction_pack(bcmolt_gem_port_direction this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gem_port_direction_unpack(bcmolt_gem_port_direction *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gem_port_type_pack(bcmolt_gem_port_type this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gem_port_type_unpack(bcmolt_gem_port_type *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gem_port_operation_pack(bcmolt_gem_port_operation this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gem_port_operation_unpack(bcmolt_gem_port_operation *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpio_cfg_id_pack(bcmolt_gpio_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpio_cfg_id_unpack(bcmolt_gpio_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpio_key_id_pack(bcmolt_gpio_key_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpio_key_id_unpack(bcmolt_gpio_key_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpio_pin_dir_pack(bcmolt_gpio_pin_dir this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpio_pin_dir_unpack(bcmolt_gpio_pin_dir *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpio_value_pack(bcmolt_gpio_value this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpio_value_unpack(bcmolt_gpio_value *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_auto_cfg_id_pack(bcmolt_gpon_alloc_auto_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_auto_cfg_id_unpack(bcmolt_gpon_alloc_auto_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_cfg_id_pack(bcmolt_gpon_alloc_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_cfg_id_unpack(bcmolt_gpon_alloc_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_configuration_completed_id_pack(bcmolt_gpon_alloc_configuration_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_configuration_completed_id_unpack(bcmolt_gpon_alloc_configuration_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_get_alloc_stats_completed_id_pack(bcmolt_gpon_alloc_get_alloc_stats_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_get_alloc_stats_completed_id_unpack(bcmolt_gpon_alloc_get_alloc_stats_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_get_stats_id_pack(bcmolt_gpon_alloc_get_stats_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_get_stats_id_unpack(bcmolt_gpon_alloc_get_stats_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_key_id_pack(bcmolt_gpon_alloc_key_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_key_id_unpack(bcmolt_gpon_alloc_key_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_set_state_id_pack(bcmolt_gpon_alloc_set_state_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_set_state_id_unpack(bcmolt_gpon_alloc_set_state_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_stat_alarm_cleared_id_pack(bcmolt_gpon_alloc_stat_alarm_cleared_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_stat_alarm_cleared_id_unpack(bcmolt_gpon_alloc_stat_alarm_cleared_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_stat_alarm_raised_id_pack(bcmolt_gpon_alloc_stat_alarm_raised_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_stat_alarm_raised_id_unpack(bcmolt_gpon_alloc_stat_alarm_raised_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_stat_cfg_id_pack(bcmolt_gpon_alloc_stat_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_stat_cfg_id_unpack(bcmolt_gpon_alloc_stat_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_stat_id_pack(bcmolt_gpon_alloc_stat_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_stat_id_unpack(bcmolt_gpon_alloc_stat_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_auto_cfg_id_pack(bcmolt_gpon_gem_port_auto_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_auto_cfg_id_unpack(bcmolt_gpon_gem_port_auto_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_cfg_id_pack(bcmolt_gpon_gem_port_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_cfg_id_unpack(bcmolt_gpon_gem_port_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_configuration_completed_id_pack(bcmolt_gpon_gem_port_configuration_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_configuration_completed_id_unpack(bcmolt_gpon_gem_port_configuration_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_key_id_pack(bcmolt_gpon_gem_port_key_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_key_id_unpack(bcmolt_gpon_gem_port_key_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_set_state_id_pack(bcmolt_gpon_gem_port_set_state_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_set_state_id_unpack(bcmolt_gpon_gem_port_set_state_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_stat_alarm_cleared_id_pack(bcmolt_gpon_gem_port_stat_alarm_cleared_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_stat_alarm_cleared_id_unpack(bcmolt_gpon_gem_port_stat_alarm_cleared_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_stat_alarm_raised_id_pack(bcmolt_gpon_gem_port_stat_alarm_raised_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_stat_alarm_raised_id_unpack(bcmolt_gpon_gem_port_stat_alarm_raised_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_stat_cfg_id_pack(bcmolt_gpon_gem_port_stat_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_stat_cfg_id_unpack(bcmolt_gpon_gem_port_stat_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_stat_id_pack(bcmolt_gpon_gem_port_stat_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_stat_id_unpack(bcmolt_gpon_gem_port_stat_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_state_pack(bcmolt_gpon_gem_port_state this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_state_unpack(bcmolt_gpon_gem_port_state *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_auto_cfg_id_pack(bcmolt_gpon_iwf_auto_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_auto_cfg_id_unpack(bcmolt_gpon_iwf_auto_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_cfg_id_pack(bcmolt_gpon_iwf_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_cfg_id_unpack(bcmolt_gpon_iwf_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_ds_egress_flow_cfg_id_pack(bcmolt_gpon_iwf_ds_egress_flow_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_ds_egress_flow_cfg_id_unpack(bcmolt_gpon_iwf_ds_egress_flow_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_ds_egress_flow_key_id_pack(bcmolt_gpon_iwf_ds_egress_flow_key_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_ds_egress_flow_key_id_unpack(bcmolt_gpon_iwf_ds_egress_flow_key_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_ds_ingress_flow_cfg_id_pack(bcmolt_gpon_iwf_ds_ingress_flow_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_ds_ingress_flow_cfg_id_unpack(bcmolt_gpon_iwf_ds_ingress_flow_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_ds_ingress_flow_key_id_pack(bcmolt_gpon_iwf_ds_ingress_flow_key_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_ds_ingress_flow_key_id_unpack(bcmolt_gpon_iwf_ds_ingress_flow_key_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_flush_mac_table_completed_id_pack(bcmolt_gpon_iwf_flush_mac_table_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_flush_mac_table_completed_id_unpack(bcmolt_gpon_iwf_flush_mac_table_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_flush_mac_table_id_pack(bcmolt_gpon_iwf_flush_mac_table_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_flush_mac_table_id_unpack(bcmolt_gpon_iwf_flush_mac_table_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_key_id_pack(bcmolt_gpon_iwf_key_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_key_id_unpack(bcmolt_gpon_iwf_key_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_mac_table_auto_cfg_id_pack(bcmolt_gpon_iwf_mac_table_auto_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_mac_table_auto_cfg_id_unpack(bcmolt_gpon_iwf_mac_table_auto_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_mac_table_cfg_id_pack(bcmolt_gpon_iwf_mac_table_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_mac_table_cfg_id_unpack(bcmolt_gpon_iwf_mac_table_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_mac_table_key_id_pack(bcmolt_gpon_iwf_mac_table_key_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_mac_table_key_id_unpack(bcmolt_gpon_iwf_mac_table_key_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_mac_table_mac_aged_id_pack(bcmolt_gpon_iwf_mac_table_mac_aged_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_mac_table_mac_aged_id_unpack(bcmolt_gpon_iwf_mac_table_mac_aged_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_mac_table_mac_dropped_id_pack(bcmolt_gpon_iwf_mac_table_mac_dropped_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_mac_table_mac_dropped_id_unpack(bcmolt_gpon_iwf_mac_table_mac_dropped_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_mac_table_mac_move_id_pack(bcmolt_gpon_iwf_mac_table_mac_move_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_mac_table_mac_move_id_unpack(bcmolt_gpon_iwf_mac_table_mac_move_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_mac_table_new_mac_id_pack(bcmolt_gpon_iwf_mac_table_new_mac_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_mac_table_new_mac_id_unpack(bcmolt_gpon_iwf_mac_table_new_mac_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_scan_mac_table_completed_id_pack(bcmolt_gpon_iwf_scan_mac_table_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_scan_mac_table_completed_id_unpack(bcmolt_gpon_iwf_scan_mac_table_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_scan_mac_table_id_pack(bcmolt_gpon_iwf_scan_mac_table_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_scan_mac_table_id_unpack(bcmolt_gpon_iwf_scan_mac_table_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_stat_alarm_cleared_id_pack(bcmolt_gpon_iwf_stat_alarm_cleared_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_stat_alarm_cleared_id_unpack(bcmolt_gpon_iwf_stat_alarm_cleared_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_stat_alarm_raised_id_pack(bcmolt_gpon_iwf_stat_alarm_raised_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_stat_alarm_raised_id_unpack(bcmolt_gpon_iwf_stat_alarm_raised_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_stat_cfg_id_pack(bcmolt_gpon_iwf_stat_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_stat_cfg_id_unpack(bcmolt_gpon_iwf_stat_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_stat_id_pack(bcmolt_gpon_iwf_stat_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_stat_id_unpack(bcmolt_gpon_iwf_stat_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_us_flow_cfg_id_pack(bcmolt_gpon_iwf_us_flow_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_us_flow_cfg_id_unpack(bcmolt_gpon_iwf_us_flow_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_us_flow_key_id_pack(bcmolt_gpon_iwf_us_flow_key_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_us_flow_key_id_unpack(bcmolt_gpon_iwf_us_flow_key_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_key_exchange_mode_pack(bcmolt_key_exchange_mode this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_key_exchange_mode_unpack(bcmolt_key_exchange_mode *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_activate_all_onus_completed_id_pack(bcmolt_gpon_ni_activate_all_onus_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_activate_all_onus_completed_id_unpack(bcmolt_gpon_ni_activate_all_onus_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_auto_cfg_id_pack(bcmolt_gpon_ni_auto_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_auto_cfg_id_unpack(bcmolt_gpon_ni_auto_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_broadcast_ploam_packet_id_pack(bcmolt_gpon_ni_broadcast_ploam_packet_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_broadcast_ploam_packet_id_unpack(bcmolt_gpon_ni_broadcast_ploam_packet_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_cfg_id_pack(bcmolt_gpon_ni_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_cfg_id_unpack(bcmolt_gpon_ni_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_cpu_packets_failure_id_pack(bcmolt_gpon_ni_cpu_packets_failure_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_cpu_packets_failure_id_unpack(bcmolt_gpon_ni_cpu_packets_failure_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_cpu_packets_id_pack(bcmolt_gpon_ni_cpu_packets_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_cpu_packets_id_unpack(bcmolt_gpon_ni_cpu_packets_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_deactivate_all_onus_completed_id_pack(bcmolt_gpon_ni_deactivate_all_onus_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_deactivate_all_onus_completed_id_unpack(bcmolt_gpon_ni_deactivate_all_onus_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_disable_all_onus_completed_id_pack(bcmolt_gpon_ni_disable_all_onus_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_disable_all_onus_completed_id_unpack(bcmolt_gpon_ni_disable_all_onus_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_disable_serial_number_id_pack(bcmolt_gpon_ni_disable_serial_number_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_disable_serial_number_id_unpack(bcmolt_gpon_ni_disable_serial_number_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_enable_all_onus_completed_id_pack(bcmolt_gpon_ni_enable_all_onus_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_enable_all_onus_completed_id_unpack(bcmolt_gpon_ni_enable_all_onus_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_key_id_pack(bcmolt_gpon_ni_key_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_key_id_unpack(bcmolt_gpon_ni_key_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_los_id_pack(bcmolt_gpon_ni_los_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_los_id_unpack(bcmolt_gpon_ni_los_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_onu_discovered_id_pack(bcmolt_gpon_ni_onu_discovered_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_onu_discovered_id_unpack(bcmolt_gpon_ni_onu_discovered_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_onu_upgrade_complete_id_pack(bcmolt_gpon_ni_onu_upgrade_complete_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_onu_upgrade_complete_id_unpack(bcmolt_gpon_ni_onu_upgrade_complete_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_protection_switching_onus_ranged_id_pack(bcmolt_gpon_ni_protection_switching_onus_ranged_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_protection_switching_onus_ranged_id_unpack(bcmolt_gpon_ni_protection_switching_onus_ranged_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_protection_switching_switchover_completed_id_pack(bcmolt_gpon_ni_protection_switching_switchover_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_protection_switching_switchover_completed_id_unpack(bcmolt_gpon_ni_protection_switching_switchover_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_protection_switching_traffic_resume_id_pack(bcmolt_gpon_ni_protection_switching_traffic_resume_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_protection_switching_traffic_resume_id_unpack(bcmolt_gpon_ni_protection_switching_traffic_resume_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_id_pack(bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_id_unpack(bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_reset_id_pack(bcmolt_gpon_ni_reset_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_reset_id_unpack(bcmolt_gpon_ni_reset_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_rogue_detection_completed_id_pack(bcmolt_gpon_ni_rogue_detection_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_rogue_detection_completed_id_unpack(bcmolt_gpon_ni_rogue_detection_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_rogue_detection_window_id_pack(bcmolt_gpon_ni_rogue_detection_window_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_rogue_detection_window_id_unpack(bcmolt_gpon_ni_rogue_detection_window_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_rogue_onu_special_map_cycle_start_id_pack(bcmolt_gpon_ni_rogue_onu_special_map_cycle_start_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_rogue_onu_special_map_cycle_start_id_unpack(bcmolt_gpon_ni_rogue_onu_special_map_cycle_start_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_serial_number_acquisition_cycle_start_id_pack(bcmolt_gpon_ni_serial_number_acquisition_cycle_start_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_serial_number_acquisition_cycle_start_id_unpack(bcmolt_gpon_ni_serial_number_acquisition_cycle_start_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_set_onu_state_id_pack(bcmolt_gpon_ni_set_onu_state_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_set_onu_state_id_unpack(bcmolt_gpon_ni_set_onu_state_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_set_pon_state_id_pack(bcmolt_gpon_ni_set_pon_state_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_set_pon_state_id_unpack(bcmolt_gpon_ni_set_pon_state_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_single_request_standby_pon_monitoring_id_pack(bcmolt_gpon_ni_single_request_standby_pon_monitoring_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_single_request_standby_pon_monitoring_id_unpack(bcmolt_gpon_ni_single_request_standby_pon_monitoring_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_id_pack(bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_id_unpack(bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_start_onu_upgrade_id_pack(bcmolt_gpon_ni_start_onu_upgrade_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_start_onu_upgrade_id_unpack(bcmolt_gpon_ni_start_onu_upgrade_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_stat_alarm_cleared_id_pack(bcmolt_gpon_ni_stat_alarm_cleared_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_stat_alarm_cleared_id_unpack(bcmolt_gpon_ni_stat_alarm_cleared_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_stat_alarm_raised_id_pack(bcmolt_gpon_ni_stat_alarm_raised_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_stat_alarm_raised_id_unpack(bcmolt_gpon_ni_stat_alarm_raised_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_stat_cfg_id_pack(bcmolt_gpon_ni_stat_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_stat_cfg_id_unpack(bcmolt_gpon_ni_stat_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_stat_id_pack(bcmolt_gpon_ni_stat_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_stat_id_unpack(bcmolt_gpon_ni_stat_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_state_change_completed_id_pack(bcmolt_gpon_ni_state_change_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_state_change_completed_id_unpack(bcmolt_gpon_ni_state_change_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_tod_request_completed_id_pack(bcmolt_gpon_ni_tod_request_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_tod_request_completed_id_unpack(bcmolt_gpon_ni_tod_request_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_tod_request_id_pack(bcmolt_gpon_ni_tod_request_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_tod_request_id_unpack(bcmolt_gpon_ni_tod_request_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_auto_cfg_id_pack(bcmolt_gpon_onu_auto_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_auto_cfg_id_unpack(bcmolt_gpon_onu_auto_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_ber_interval_configuration_completed_id_pack(bcmolt_gpon_onu_ber_interval_configuration_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_ber_interval_configuration_completed_id_unpack(bcmolt_gpon_onu_ber_interval_configuration_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_cfg_id_pack(bcmolt_gpon_onu_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_cfg_id_unpack(bcmolt_gpon_onu_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_change_power_level_id_pack(bcmolt_gpon_onu_change_power_level_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_change_power_level_id_unpack(bcmolt_gpon_onu_change_power_level_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_cpu_packet_id_pack(bcmolt_gpon_onu_cpu_packet_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_cpu_packet_id_unpack(bcmolt_gpon_onu_cpu_packet_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_cpu_packets_id_pack(bcmolt_gpon_onu_cpu_packets_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_cpu_packets_id_unpack(bcmolt_gpon_onu_cpu_packets_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_dfi_id_pack(bcmolt_gpon_onu_dfi_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_dfi_id_unpack(bcmolt_gpon_onu_dfi_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_dgi_id_pack(bcmolt_gpon_onu_dgi_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_dgi_id_unpack(bcmolt_gpon_onu_dgi_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_dowi_id_pack(bcmolt_gpon_onu_dowi_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_dowi_id_unpack(bcmolt_gpon_onu_dowi_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_err_id_pack(bcmolt_gpon_onu_err_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_err_id_unpack(bcmolt_gpon_onu_err_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_invalid_dbru_report_id_pack(bcmolt_gpon_onu_invalid_dbru_report_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_invalid_dbru_report_id_unpack(bcmolt_gpon_onu_invalid_dbru_report_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_key_exchange_completed_id_pack(bcmolt_gpon_onu_key_exchange_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_key_exchange_completed_id_unpack(bcmolt_gpon_onu_key_exchange_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_key_exchange_cycle_skipped_id_pack(bcmolt_gpon_onu_key_exchange_cycle_skipped_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_key_exchange_cycle_skipped_id_unpack(bcmolt_gpon_onu_key_exchange_cycle_skipped_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_key_exchange_decrypt_required_id_pack(bcmolt_gpon_onu_key_exchange_decrypt_required_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_key_exchange_decrypt_required_id_unpack(bcmolt_gpon_onu_key_exchange_decrypt_required_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_key_exchange_key_mismatch_id_pack(bcmolt_gpon_onu_key_exchange_key_mismatch_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_key_exchange_key_mismatch_id_unpack(bcmolt_gpon_onu_key_exchange_key_mismatch_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_key_exchange_key_request_timeout_id_pack(bcmolt_gpon_onu_key_exchange_key_request_timeout_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_key_exchange_key_request_timeout_id_unpack(bcmolt_gpon_onu_key_exchange_key_request_timeout_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_key_exchange_unconsecutive_index_id_pack(bcmolt_gpon_onu_key_exchange_unconsecutive_index_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_key_exchange_unconsecutive_index_id_unpack(bcmolt_gpon_onu_key_exchange_unconsecutive_index_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_key_id_pack(bcmolt_gpon_onu_key_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_key_id_unpack(bcmolt_gpon_onu_key_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_loai_id_pack(bcmolt_gpon_onu_loai_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_loai_id_unpack(bcmolt_gpon_onu_loai_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_loki_id_pack(bcmolt_gpon_onu_loki_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_loki_id_unpack(bcmolt_gpon_onu_loki_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_memi_id_pack(bcmolt_gpon_onu_memi_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_memi_id_unpack(bcmolt_gpon_onu_memi_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_omci_packet_id_pack(bcmolt_gpon_onu_omci_packet_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_omci_packet_id_unpack(bcmolt_gpon_onu_omci_packet_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_omci_port_id_configuration_completed_id_pack(bcmolt_gpon_onu_omci_port_id_configuration_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_omci_port_id_configuration_completed_id_unpack(bcmolt_gpon_onu_omci_port_id_configuration_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_onu_activation_completed_id_pack(bcmolt_gpon_onu_onu_activation_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_onu_activation_completed_id_unpack(bcmolt_gpon_onu_onu_activation_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_onu_activation_standby_completed_id_pack(bcmolt_gpon_onu_onu_activation_standby_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_onu_activation_standby_completed_id_unpack(bcmolt_gpon_onu_onu_activation_standby_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_onu_alarm_id_pack(bcmolt_gpon_onu_onu_alarm_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_onu_alarm_id_unpack(bcmolt_gpon_onu_onu_alarm_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_onu_deactivation_completed_id_pack(bcmolt_gpon_onu_onu_deactivation_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_onu_deactivation_completed_id_unpack(bcmolt_gpon_onu_onu_deactivation_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_onu_disable_completed_id_pack(bcmolt_gpon_onu_onu_disable_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_onu_disable_completed_id_unpack(bcmolt_gpon_onu_onu_disable_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_onu_enable_completed_id_pack(bcmolt_gpon_onu_onu_enable_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_onu_enable_completed_id_unpack(bcmolt_gpon_onu_onu_enable_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_optical_reflection_id_pack(bcmolt_gpon_onu_optical_reflection_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_optical_reflection_id_unpack(bcmolt_gpon_onu_optical_reflection_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_password_authentication_completed_id_pack(bcmolt_gpon_onu_password_authentication_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_password_authentication_completed_id_unpack(bcmolt_gpon_onu_password_authentication_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_pee_id_pack(bcmolt_gpon_onu_pee_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_pee_id_unpack(bcmolt_gpon_onu_pee_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_ploam_packet_id_pack(bcmolt_gpon_onu_ploam_packet_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_ploam_packet_id_unpack(bcmolt_gpon_onu_ploam_packet_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_possible_drift_id_pack(bcmolt_gpon_onu_possible_drift_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_possible_drift_id_unpack(bcmolt_gpon_onu_possible_drift_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_power_management_state_change_id_pack(bcmolt_gpon_onu_power_management_state_change_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_power_management_state_change_id_unpack(bcmolt_gpon_onu_power_management_state_change_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_pst_id_pack(bcmolt_gpon_onu_pst_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_pst_id_unpack(bcmolt_gpon_onu_pst_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_ranging_completed_id_pack(bcmolt_gpon_onu_ranging_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_ranging_completed_id_unpack(bcmolt_gpon_onu_ranging_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_rei_id_pack(bcmolt_gpon_onu_rei_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_rei_id_unpack(bcmolt_gpon_onu_rei_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_rssi_measurement_completed_id_pack(bcmolt_gpon_onu_rssi_measurement_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_rssi_measurement_completed_id_unpack(bcmolt_gpon_onu_rssi_measurement_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_rssi_measurement_id_pack(bcmolt_gpon_onu_rssi_measurement_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_rssi_measurement_id_unpack(bcmolt_gpon_onu_rssi_measurement_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_sdi_id_pack(bcmolt_gpon_onu_sdi_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_sdi_id_unpack(bcmolt_gpon_onu_sdi_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_set_onu_state_id_pack(bcmolt_gpon_onu_set_onu_state_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_set_onu_state_id_unpack(bcmolt_gpon_onu_set_onu_state_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_sfi_id_pack(bcmolt_gpon_onu_sfi_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_sfi_id_unpack(bcmolt_gpon_onu_sfi_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_stat_alarm_cleared_id_pack(bcmolt_gpon_onu_stat_alarm_cleared_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_stat_alarm_cleared_id_unpack(bcmolt_gpon_onu_stat_alarm_cleared_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_stat_alarm_raised_id_pack(bcmolt_gpon_onu_stat_alarm_raised_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_stat_alarm_raised_id_unpack(bcmolt_gpon_onu_stat_alarm_raised_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_stat_cfg_id_pack(bcmolt_gpon_onu_stat_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_stat_cfg_id_unpack(bcmolt_gpon_onu_stat_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_stat_id_pack(bcmolt_gpon_onu_stat_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_stat_id_unpack(bcmolt_gpon_onu_stat_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_sufi_id_pack(bcmolt_gpon_onu_sufi_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_sufi_id_unpack(bcmolt_gpon_onu_sufi_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_tiwi_id_pack(bcmolt_gpon_onu_tiwi_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_tiwi_id_unpack(bcmolt_gpon_onu_tiwi_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_omci_device_id_pack(bcmolt_omci_device_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_omci_device_id_unpack(bcmolt_omci_device_id *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_upgrade_return_code_pack(bcmolt_gpon_onu_upgrade_return_code this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_upgrade_return_code_unpack(bcmolt_gpon_onu_upgrade_return_code *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_omci_result_code_pack(bcmolt_omci_result_code this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_omci_result_code_unpack(bcmolt_omci_result_code *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_onu_state_pack(bcmolt_onu_state this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_onu_state_unpack(bcmolt_onu_state *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_rssi_location_sign_pack(bcmolt_rssi_location_sign this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_rssi_location_sign_unpack(bcmolt_rssi_location_sign *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_onu_post_discovery_mode_pack(bcmolt_onu_post_discovery_mode this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_onu_post_discovery_mode_unpack(bcmolt_onu_post_discovery_mode *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_trx_cfg_id_pack(bcmolt_gpon_trx_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_trx_cfg_id_unpack(bcmolt_gpon_trx_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_trx_key_id_pack(bcmolt_gpon_trx_key_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_trx_key_id_unpack(bcmolt_gpon_trx_key_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_image_transfer_status_pack(bcmolt_image_transfer_status this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_image_transfer_status_unpack(bcmolt_image_transfer_status *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_iwf_mode_pack(bcmolt_iwf_mode this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_iwf_mode_unpack(bcmolt_iwf_mode *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_entry_auto_cfg_id_pack(bcmolt_log_entry_auto_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_entry_auto_cfg_id_unpack(bcmolt_log_entry_auto_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_entry_cfg_id_pack(bcmolt_log_entry_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_entry_cfg_id_unpack(bcmolt_log_entry_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_entry_key_id_pack(bcmolt_log_entry_key_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_entry_key_id_unpack(bcmolt_log_entry_key_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_entry_stat_alarm_cleared_id_pack(bcmolt_log_entry_stat_alarm_cleared_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_entry_stat_alarm_cleared_id_unpack(bcmolt_log_entry_stat_alarm_cleared_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_entry_stat_alarm_raised_id_pack(bcmolt_log_entry_stat_alarm_raised_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_entry_stat_alarm_raised_id_unpack(bcmolt_log_entry_stat_alarm_raised_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_entry_stat_cfg_id_pack(bcmolt_log_entry_stat_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_entry_stat_cfg_id_unpack(bcmolt_log_entry_stat_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_entry_stat_id_pack(bcmolt_log_entry_stat_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_entry_stat_id_unpack(bcmolt_log_entry_stat_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_file_id_pack(bcmolt_log_file_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_file_id_unpack(bcmolt_log_file_id *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_level_pack(bcmolt_log_level this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_level_unpack(bcmolt_log_level *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_style_pack(bcmolt_log_style this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_style_unpack(bcmolt_log_style *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_type_pack(bcmolt_log_type this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_type_unpack(bcmolt_log_type *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_logger_auto_cfg_id_pack(bcmolt_logger_auto_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_logger_auto_cfg_id_unpack(bcmolt_logger_auto_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_logger_cfg_id_pack(bcmolt_logger_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_logger_cfg_id_unpack(bcmolt_logger_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_logger_clear_log_id_pack(bcmolt_logger_clear_log_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_logger_clear_log_id_unpack(bcmolt_logger_clear_log_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_logger_key_id_pack(bcmolt_logger_key_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_logger_key_id_unpack(bcmolt_logger_key_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_logger_stat_alarm_cleared_id_pack(bcmolt_logger_stat_alarm_cleared_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_logger_stat_alarm_cleared_id_unpack(bcmolt_logger_stat_alarm_cleared_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_logger_stat_alarm_raised_id_pack(bcmolt_logger_stat_alarm_raised_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_logger_stat_alarm_raised_id_unpack(bcmolt_logger_stat_alarm_raised_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_logger_stat_cfg_id_pack(bcmolt_logger_stat_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_logger_stat_cfg_id_unpack(bcmolt_logger_stat_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_logger_stat_id_pack(bcmolt_logger_stat_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_logger_stat_id_unpack(bcmolt_logger_stat_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_mac_table_miss_fallback_pack(bcmolt_mac_table_miss_fallback this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_mac_table_miss_fallback_unpack(bcmolt_mac_table_miss_fallback *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_mac_table_learning_mode_pack(bcmolt_mac_table_learning_mode this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_mac_table_learning_mode_unpack(bcmolt_mac_table_learning_mode *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_mapping_tag_method_pack(bcmolt_mapping_tag_method this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_mapping_tag_method_unpack(bcmolt_mapping_tag_method *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_auto_cfg_id_pack(bcmolt_nni_auto_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_auto_cfg_id_unpack(bcmolt_nni_auto_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_cfg_id_pack(bcmolt_nni_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_cfg_id_unpack(bcmolt_nni_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_connection_pack(bcmolt_nni_connection this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_connection_unpack(bcmolt_nni_connection *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_key_id_pack(bcmolt_nni_key_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_key_id_unpack(bcmolt_nni_key_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trivalent_pack(bcmolt_trivalent this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trivalent_unpack(bcmolt_trivalent *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_serdes_cfg_id_pack(bcmolt_nni_serdes_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_serdes_cfg_id_unpack(bcmolt_nni_serdes_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_serdes_key_id_pack(bcmolt_nni_serdes_key_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_serdes_key_id_unpack(bcmolt_nni_serdes_key_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_stat_alarm_cleared_id_pack(bcmolt_nni_stat_alarm_cleared_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_stat_alarm_cleared_id_unpack(bcmolt_nni_stat_alarm_cleared_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_stat_alarm_raised_id_pack(bcmolt_nni_stat_alarm_raised_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_stat_alarm_raised_id_unpack(bcmolt_nni_stat_alarm_raised_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_stat_cfg_id_pack(bcmolt_nni_stat_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_stat_cfg_id_unpack(bcmolt_nni_stat_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_stat_id_pack(bcmolt_nni_stat_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_stat_id_unpack(bcmolt_nni_stat_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_status_changed_id_pack(bcmolt_nni_status_changed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_status_changed_id_unpack(bcmolt_nni_status_changed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_odn_class_pack(bcmolt_odn_class this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_odn_class_unpack(bcmolt_odn_class *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_omci_port_id_operation_pack(bcmolt_omci_port_id_operation this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_omci_port_id_operation_unpack(bcmolt_omci_port_id_operation *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_onu_operation_pack(bcmolt_onu_operation this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_onu_operation_unpack(bcmolt_onu_operation *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_onu_power_level_pack(bcmolt_onu_power_level this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_onu_power_level_unpack(bcmolt_onu_power_level *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_tc_protocol_pack(bcmolt_tc_protocol this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_tc_protocol_unpack(bcmolt_tc_protocol *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_packet_injection_error_pack(bcmolt_packet_injection_error this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_packet_injection_error_unpack(bcmolt_packet_injection_error *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_packet_type_pack(bcmolt_packet_type this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_packet_type_unpack(bcmolt_packet_type *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_password_authentication_fail_reason_pack(bcmolt_password_authentication_fail_reason this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_password_authentication_fail_reason_unpack(bcmolt_password_authentication_fail_reason *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_polarity_pack(bcmolt_polarity this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_polarity_unpack(bcmolt_polarity *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_polling_interval_pack(bcmolt_polling_interval this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_s32(buf, (int32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_polling_interval_unpack(bcmolt_polling_interval *this, bcmolt_buf *buf)
+{
+    int32_t num_val;
+    if (!bcmolt_buf_read_s32(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_operation_pack(bcmolt_pon_operation this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_operation_unpack(bcmolt_pon_operation *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_protection_switching_options_pack(bcmolt_pon_protection_switching_options this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_protection_switching_options_unpack(bcmolt_pon_protection_switching_options *this, bcmolt_buf *buf)
+{
+    uint32_t num_val;
+    if (!bcmolt_buf_read_u32(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_state_pack(bcmolt_pon_state this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_state_unpack(bcmolt_pon_state *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_power_levelling_control_pack(bcmolt_power_levelling_control this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_power_levelling_control_unpack(bcmolt_power_levelling_control *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_power_management_transition_reason_pack(bcmolt_power_management_transition_reason this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_power_management_transition_reason_unpack(bcmolt_power_management_transition_reason *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_prbs_polynomial_pack(bcmolt_prbs_polynomial this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_prbs_polynomial_unpack(bcmolt_prbs_polynomial *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_prbs_checker_mode_pack(bcmolt_prbs_checker_mode this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_prbs_checker_mode_unpack(bcmolt_prbs_checker_mode *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_prbs_lock_state_pack(bcmolt_prbs_lock_state this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_prbs_lock_state_unpack(bcmolt_prbs_lock_state *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_raman_mitigation_mode_pack(bcmolt_raman_mitigation_mode this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_raman_mitigation_mode_unpack(bcmolt_raman_mitigation_mode *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ranging_fail_reason_pack(bcmolt_ranging_fail_reason this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ranging_fail_reason_unpack(bcmolt_ranging_fail_reason *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_registration_behavior_pack(bcmolt_registration_behavior this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_registration_behavior_unpack(bcmolt_registration_behavior *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_request_registration_fail_reason_pack(bcmolt_request_registration_fail_reason this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_request_registration_fail_reason_unpack(bcmolt_request_registration_fail_reason *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_result_pack(bcmolt_result this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_result_unpack(bcmolt_result *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_rogue_detection_algorithm_type_pack(bcmolt_rogue_detection_algorithm_type this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_rogue_detection_algorithm_type_unpack(bcmolt_rogue_detection_algorithm_type *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_rogue_detection_window_pack(bcmolt_rogue_detection_window this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_rogue_detection_window_unpack(bcmolt_rogue_detection_window *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_rogue_measurement_result_pack(bcmolt_rogue_measurement_result this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_rogue_measurement_result_unpack(bcmolt_rogue_measurement_result *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_rogue_scan_status_pack(bcmolt_rogue_scan_status this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_rogue_scan_status_unpack(bcmolt_rogue_scan_status *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_rssi_measurement_fail_reason_pack(bcmolt_rssi_measurement_fail_reason this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_rssi_measurement_fail_reason_unpack(bcmolt_rssi_measurement_fail_reason *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_secure_mutual_authentication_fail_reason_pack(bcmolt_secure_mutual_authentication_fail_reason this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_secure_mutual_authentication_fail_reason_unpack(bcmolt_secure_mutual_authentication_fail_reason *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_serdes_ranging_mode_pack(bcmolt_serdes_ranging_mode this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_serdes_ranging_mode_unpack(bcmolt_serdes_ranging_mode *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_serdes_instance_pack(bcmolt_serdes_instance this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_serdes_instance_unpack(bcmolt_serdes_instance *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_shaper_mode_pack(bcmolt_shaper_mode this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_shaper_mode_unpack(bcmolt_shaper_mode *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_software_error_cfg_id_pack(bcmolt_software_error_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_software_error_cfg_id_unpack(bcmolt_software_error_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_software_error_key_id_pack(bcmolt_software_error_key_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_software_error_key_id_unpack(bcmolt_software_error_key_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_stat_condition_type_pack(bcmolt_stat_condition_type this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_stat_condition_type_unpack(bcmolt_stat_condition_type *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_switch_over_type_c_onu_state_pack(bcmolt_switch_over_type_c_onu_state this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_switch_over_type_c_onu_state_unpack(bcmolt_switch_over_type_c_onu_state *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_system_mode_pack(bcmolt_system_mode this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_system_mode_unpack(bcmolt_system_mode *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_us_operating_wavelength_bands_pack(bcmolt_us_operating_wavelength_bands this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_us_operating_wavelength_bands_unpack(bcmolt_us_operating_wavelength_bands *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_traffic_resume_result_pack(bcmolt_traffic_resume_result this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_traffic_resume_result_unpack(bcmolt_traffic_resume_result *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_calibration_auto_cfg_id_pack(bcmolt_trx_calibration_auto_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_calibration_auto_cfg_id_unpack(bcmolt_trx_calibration_auto_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_calibration_capture_window_and_statistic_completed_id_pack(bcmolt_trx_calibration_capture_window_and_statistic_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_calibration_capture_window_and_statistic_completed_id_unpack(bcmolt_trx_calibration_capture_window_and_statistic_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_calibration_key_id_pack(bcmolt_trx_calibration_key_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_calibration_key_id_unpack(bcmolt_trx_calibration_key_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_calibration_start_capture_window_id_pack(bcmolt_trx_calibration_start_capture_window_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_calibration_start_capture_window_id_unpack(bcmolt_trx_calibration_start_capture_window_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_calibration_stop_capture_window_id_pack(bcmolt_trx_calibration_stop_capture_window_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_calibration_stop_capture_window_id_unpack(bcmolt_trx_calibration_stop_capture_window_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_calibration_trigger_pack(bcmolt_trx_calibration_trigger this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_calibration_trigger_unpack(bcmolt_trx_calibration_trigger *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_calibration_trigger_position_pack(bcmolt_trx_calibration_trigger_position this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_calibration_trigger_position_unpack(bcmolt_trx_calibration_trigger_position *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_calibration_window_mode_pack(bcmolt_trx_calibration_window_mode this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_calibration_window_mode_unpack(bcmolt_trx_calibration_window_mode *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_type_pack(bcmolt_trx_type this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_type_unpack(bcmolt_trx_type *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_tune_in_fail_reason_pack(bcmolt_tune_in_fail_reason this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_tune_in_fail_reason_unpack(bcmolt_tune_in_fail_reason *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_tune_out_fail_reason_pack(bcmolt_tune_out_fail_reason this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_tune_out_fail_reason_unpack(bcmolt_tune_out_fail_reason *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_uart_baudrate_pack(bcmolt_uart_baudrate this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_uart_baudrate_unpack(bcmolt_uart_baudrate *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_us_gem_port_destination_pack(bcmolt_us_gem_port_destination this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_us_gem_port_destination_unpack(bcmolt_us_gem_port_destination *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_us_vlan_action_pack(bcmolt_us_vlan_action this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_us_vlan_action_unpack(bcmolt_us_vlan_action *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_vlan_to_flow_mapping_method_pack(bcmolt_vlan_to_flow_mapping_method this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_vlan_to_flow_mapping_method_unpack(bcmolt_vlan_to_flow_mapping_method *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_auto_cfg_id_pack(bcmolt_xgpon_alloc_auto_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_auto_cfg_id_unpack(bcmolt_xgpon_alloc_auto_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_cfg_id_pack(bcmolt_xgpon_alloc_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_cfg_id_unpack(bcmolt_xgpon_alloc_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_configuration_completed_id_pack(bcmolt_xgpon_alloc_configuration_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_configuration_completed_id_unpack(bcmolt_xgpon_alloc_configuration_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_get_alloc_stats_completed_id_pack(bcmolt_xgpon_alloc_get_alloc_stats_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_get_alloc_stats_completed_id_unpack(bcmolt_xgpon_alloc_get_alloc_stats_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_get_stats_id_pack(bcmolt_xgpon_alloc_get_stats_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_get_stats_id_unpack(bcmolt_xgpon_alloc_get_stats_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_key_id_pack(bcmolt_xgpon_alloc_key_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_key_id_unpack(bcmolt_xgpon_alloc_key_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_set_state_id_pack(bcmolt_xgpon_alloc_set_state_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_set_state_id_unpack(bcmolt_xgpon_alloc_set_state_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_stat_alarm_cleared_id_pack(bcmolt_xgpon_alloc_stat_alarm_cleared_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_stat_alarm_cleared_id_unpack(bcmolt_xgpon_alloc_stat_alarm_cleared_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_stat_alarm_raised_id_pack(bcmolt_xgpon_alloc_stat_alarm_raised_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_stat_alarm_raised_id_unpack(bcmolt_xgpon_alloc_stat_alarm_raised_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_stat_cfg_id_pack(bcmolt_xgpon_alloc_stat_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_stat_cfg_id_unpack(bcmolt_xgpon_alloc_stat_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_stat_id_pack(bcmolt_xgpon_alloc_stat_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_stat_id_unpack(bcmolt_xgpon_alloc_stat_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_auto_cfg_id_pack(bcmolt_xgpon_gem_port_auto_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_auto_cfg_id_unpack(bcmolt_xgpon_gem_port_auto_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_cfg_id_pack(bcmolt_xgpon_gem_port_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_cfg_id_unpack(bcmolt_xgpon_gem_port_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_key_id_pack(bcmolt_xgpon_gem_port_key_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_key_id_unpack(bcmolt_xgpon_gem_port_key_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_stat_alarm_cleared_id_pack(bcmolt_xgpon_gem_port_stat_alarm_cleared_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_stat_alarm_cleared_id_unpack(bcmolt_xgpon_gem_port_stat_alarm_cleared_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_stat_alarm_raised_id_pack(bcmolt_xgpon_gem_port_stat_alarm_raised_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_stat_alarm_raised_id_unpack(bcmolt_xgpon_gem_port_stat_alarm_raised_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_stat_cfg_id_pack(bcmolt_xgpon_gem_port_stat_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_stat_cfg_id_unpack(bcmolt_xgpon_gem_port_stat_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_stat_id_pack(bcmolt_xgpon_gem_port_stat_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_stat_id_unpack(bcmolt_xgpon_gem_port_stat_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_state_pack(bcmolt_xgpon_gem_port_state this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_state_unpack(bcmolt_xgpon_gem_port_state *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_iwf_cfg_id_pack(bcmolt_xgpon_iwf_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_iwf_cfg_id_unpack(bcmolt_xgpon_iwf_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_iwf_key_id_pack(bcmolt_xgpon_iwf_key_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_iwf_key_id_unpack(bcmolt_xgpon_iwf_key_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_activate_all_onus_completed_id_pack(bcmolt_xgpon_ni_activate_all_onus_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_activate_all_onus_completed_id_unpack(bcmolt_xgpon_ni_activate_all_onus_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_adjust_tx_wavelength_id_pack(bcmolt_xgpon_ni_adjust_tx_wavelength_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_adjust_tx_wavelength_id_unpack(bcmolt_xgpon_ni_adjust_tx_wavelength_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_auto_cfg_id_pack(bcmolt_xgpon_ni_auto_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_auto_cfg_id_unpack(bcmolt_xgpon_ni_auto_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_broadcast_ploam_packet_id_pack(bcmolt_xgpon_ni_broadcast_ploam_packet_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_broadcast_ploam_packet_id_unpack(bcmolt_xgpon_ni_broadcast_ploam_packet_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_cfg_id_pack(bcmolt_xgpon_ni_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_cfg_id_unpack(bcmolt_xgpon_ni_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_cpu_packets_failure_id_pack(bcmolt_xgpon_ni_cpu_packets_failure_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_cpu_packets_failure_id_unpack(bcmolt_xgpon_ni_cpu_packets_failure_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_cpu_packets_id_pack(bcmolt_xgpon_ni_cpu_packets_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_cpu_packets_id_unpack(bcmolt_xgpon_ni_cpu_packets_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_deactivate_all_onus_completed_id_pack(bcmolt_xgpon_ni_deactivate_all_onus_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_deactivate_all_onus_completed_id_unpack(bcmolt_xgpon_ni_deactivate_all_onus_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_disable_all_onus_completed_id_pack(bcmolt_xgpon_ni_disable_all_onus_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_disable_all_onus_completed_id_unpack(bcmolt_xgpon_ni_disable_all_onus_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_disable_serial_number_id_pack(bcmolt_xgpon_ni_disable_serial_number_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_disable_serial_number_id_unpack(bcmolt_xgpon_ni_disable_serial_number_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_enable_all_onus_completed_id_pack(bcmolt_xgpon_ni_enable_all_onus_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_enable_all_onus_completed_id_unpack(bcmolt_xgpon_ni_enable_all_onus_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_key_id_pack(bcmolt_xgpon_ni_key_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_key_id_unpack(bcmolt_xgpon_ni_key_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_los_id_pack(bcmolt_xgpon_ni_los_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_los_id_unpack(bcmolt_xgpon_ni_los_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_onu_discovered_id_pack(bcmolt_xgpon_ni_onu_discovered_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_onu_discovered_id_unpack(bcmolt_xgpon_ni_onu_discovered_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_onu_upgrade_complete_id_pack(bcmolt_xgpon_ni_onu_upgrade_complete_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_onu_upgrade_complete_id_unpack(bcmolt_xgpon_ni_onu_upgrade_complete_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_protection_switching_onus_ranged_id_pack(bcmolt_xgpon_ni_protection_switching_onus_ranged_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_protection_switching_onus_ranged_id_unpack(bcmolt_xgpon_ni_protection_switching_onus_ranged_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_protection_switching_switchover_completed_id_pack(bcmolt_xgpon_ni_protection_switching_switchover_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_protection_switching_switchover_completed_id_unpack(bcmolt_xgpon_ni_protection_switching_switchover_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_protection_switching_traffic_resume_id_pack(bcmolt_xgpon_ni_protection_switching_traffic_resume_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_protection_switching_traffic_resume_id_unpack(bcmolt_xgpon_ni_protection_switching_traffic_resume_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_reset_id_pack(bcmolt_xgpon_ni_reset_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_reset_id_unpack(bcmolt_xgpon_ni_reset_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_rogue_detection_completed_id_pack(bcmolt_xgpon_ni_rogue_detection_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_rogue_detection_completed_id_unpack(bcmolt_xgpon_ni_rogue_detection_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_rogue_detection_window_id_pack(bcmolt_xgpon_ni_rogue_detection_window_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_rogue_detection_window_id_unpack(bcmolt_xgpon_ni_rogue_detection_window_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_rogue_onu_special_map_cycle_start_id_pack(bcmolt_xgpon_ni_rogue_onu_special_map_cycle_start_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_rogue_onu_special_map_cycle_start_id_unpack(bcmolt_xgpon_ni_rogue_onu_special_map_cycle_start_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_run_special_bw_map_id_pack(bcmolt_xgpon_ni_run_special_bw_map_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_run_special_bw_map_id_unpack(bcmolt_xgpon_ni_run_special_bw_map_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_serial_number_acquisition_cycle_start_id_pack(bcmolt_xgpon_ni_serial_number_acquisition_cycle_start_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_serial_number_acquisition_cycle_start_id_unpack(bcmolt_xgpon_ni_serial_number_acquisition_cycle_start_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_set_onu_state_id_pack(bcmolt_xgpon_ni_set_onu_state_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_set_onu_state_id_unpack(bcmolt_xgpon_ni_set_onu_state_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_set_pon_state_id_pack(bcmolt_xgpon_ni_set_pon_state_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_set_pon_state_id_unpack(bcmolt_xgpon_ni_set_pon_state_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_single_request_standby_pon_monitoring_id_pack(bcmolt_xgpon_ni_single_request_standby_pon_monitoring_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_single_request_standby_pon_monitoring_id_unpack(bcmolt_xgpon_ni_single_request_standby_pon_monitoring_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_id_pack(bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_id_unpack(bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_start_onu_upgrade_id_pack(bcmolt_xgpon_ni_start_onu_upgrade_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_start_onu_upgrade_id_unpack(bcmolt_xgpon_ni_start_onu_upgrade_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_stat_alarm_cleared_id_pack(bcmolt_xgpon_ni_stat_alarm_cleared_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_stat_alarm_cleared_id_unpack(bcmolt_xgpon_ni_stat_alarm_cleared_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_stat_alarm_raised_id_pack(bcmolt_xgpon_ni_stat_alarm_raised_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_stat_alarm_raised_id_unpack(bcmolt_xgpon_ni_stat_alarm_raised_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_stat_cfg_id_pack(bcmolt_xgpon_ni_stat_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_stat_cfg_id_unpack(bcmolt_xgpon_ni_stat_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_stat_id_pack(bcmolt_xgpon_ni_stat_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_stat_id_unpack(bcmolt_xgpon_ni_stat_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_state_change_completed_id_pack(bcmolt_xgpon_ni_state_change_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_state_change_completed_id_unpack(bcmolt_xgpon_ni_state_change_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_tod_request_completed_id_pack(bcmolt_xgpon_ni_tod_request_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_tod_request_completed_id_unpack(bcmolt_xgpon_ni_tod_request_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_tod_request_id_pack(bcmolt_xgpon_ni_tod_request_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_tod_request_id_unpack(bcmolt_xgpon_ni_tod_request_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_num_of_onus_pack(bcmolt_xgpon_num_of_onus this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_num_of_onus_unpack(bcmolt_xgpon_num_of_onus *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_adjust_tx_wavelength_id_pack(bcmolt_xgpon_onu_adjust_tx_wavelength_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_adjust_tx_wavelength_id_unpack(bcmolt_xgpon_onu_adjust_tx_wavelength_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_auto_cfg_id_pack(bcmolt_xgpon_onu_auto_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_auto_cfg_id_unpack(bcmolt_xgpon_onu_auto_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_cfg_id_pack(bcmolt_xgpon_onu_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_cfg_id_unpack(bcmolt_xgpon_onu_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_change_power_levelling_id_pack(bcmolt_xgpon_onu_change_power_levelling_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_change_power_levelling_id_unpack(bcmolt_xgpon_onu_change_power_levelling_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_cpu_packet_id_pack(bcmolt_xgpon_onu_cpu_packet_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_cpu_packet_id_unpack(bcmolt_xgpon_onu_cpu_packet_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_cpu_packets_id_pack(bcmolt_xgpon_onu_cpu_packets_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_cpu_packets_id_unpack(bcmolt_xgpon_onu_cpu_packets_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_dfi_id_pack(bcmolt_xgpon_onu_dfi_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_dfi_id_unpack(bcmolt_xgpon_onu_dfi_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_dgi_id_pack(bcmolt_xgpon_onu_dgi_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_dgi_id_unpack(bcmolt_xgpon_onu_dgi_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_dowi_id_pack(bcmolt_xgpon_onu_dowi_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_dowi_id_unpack(bcmolt_xgpon_onu_dowi_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_get_power_consumption_id_pack(bcmolt_xgpon_onu_get_power_consumption_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_get_power_consumption_id_unpack(bcmolt_xgpon_onu_get_power_consumption_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_get_power_level_id_pack(bcmolt_xgpon_onu_get_power_level_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_get_power_level_id_unpack(bcmolt_xgpon_onu_get_power_level_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_invalid_dbru_report_id_pack(bcmolt_xgpon_onu_invalid_dbru_report_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_invalid_dbru_report_id_unpack(bcmolt_xgpon_onu_invalid_dbru_report_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_key_exchange_completed_id_pack(bcmolt_xgpon_onu_key_exchange_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_key_exchange_completed_id_unpack(bcmolt_xgpon_onu_key_exchange_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_key_exchange_cycle_skipped_id_pack(bcmolt_xgpon_onu_key_exchange_cycle_skipped_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_key_exchange_cycle_skipped_id_unpack(bcmolt_xgpon_onu_key_exchange_cycle_skipped_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_key_exchange_key_mismatch_id_pack(bcmolt_xgpon_onu_key_exchange_key_mismatch_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_key_exchange_key_mismatch_id_unpack(bcmolt_xgpon_onu_key_exchange_key_mismatch_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_key_exchange_key_request_timeout_id_pack(bcmolt_xgpon_onu_key_exchange_key_request_timeout_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_key_exchange_key_request_timeout_id_unpack(bcmolt_xgpon_onu_key_exchange_key_request_timeout_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_key_id_pack(bcmolt_xgpon_onu_key_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_key_id_unpack(bcmolt_xgpon_onu_key_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_looci_id_pack(bcmolt_xgpon_onu_looci_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_looci_id_unpack(bcmolt_xgpon_onu_looci_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_omci_packet_id_pack(bcmolt_xgpon_onu_omci_packet_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_omci_packet_id_unpack(bcmolt_xgpon_onu_omci_packet_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_activation_completed_id_pack(bcmolt_xgpon_onu_onu_activation_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_activation_completed_id_unpack(bcmolt_xgpon_onu_onu_activation_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_alarm_id_pack(bcmolt_xgpon_onu_onu_alarm_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_alarm_id_unpack(bcmolt_xgpon_onu_onu_alarm_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_deactivation_completed_id_pack(bcmolt_xgpon_onu_onu_deactivation_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_deactivation_completed_id_unpack(bcmolt_xgpon_onu_onu_deactivation_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_disable_completed_id_pack(bcmolt_xgpon_onu_onu_disable_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_disable_completed_id_unpack(bcmolt_xgpon_onu_onu_disable_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_enable_completed_id_pack(bcmolt_xgpon_onu_onu_enable_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_enable_completed_id_unpack(bcmolt_xgpon_onu_onu_enable_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_tuning_in_completed_id_pack(bcmolt_xgpon_onu_onu_tuning_in_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_tuning_in_completed_id_unpack(bcmolt_xgpon_onu_onu_tuning_in_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_tuning_in_id_pack(bcmolt_xgpon_onu_onu_tuning_in_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_tuning_in_id_unpack(bcmolt_xgpon_onu_onu_tuning_in_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_tuning_out_completed_id_pack(bcmolt_xgpon_onu_onu_tuning_out_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_tuning_out_completed_id_unpack(bcmolt_xgpon_onu_onu_tuning_out_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_tuning_out_id_pack(bcmolt_xgpon_onu_onu_tuning_out_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_tuning_out_id_unpack(bcmolt_xgpon_onu_onu_tuning_out_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_optical_reflection_id_pack(bcmolt_xgpon_onu_optical_reflection_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_optical_reflection_id_unpack(bcmolt_xgpon_onu_optical_reflection_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_ploam_packet_id_pack(bcmolt_xgpon_onu_ploam_packet_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_ploam_packet_id_unpack(bcmolt_xgpon_onu_ploam_packet_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_possible_drift_id_pack(bcmolt_xgpon_onu_possible_drift_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_possible_drift_id_unpack(bcmolt_xgpon_onu_possible_drift_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_power_consumption_report_id_pack(bcmolt_xgpon_onu_power_consumption_report_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_power_consumption_report_id_unpack(bcmolt_xgpon_onu_power_consumption_report_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_power_level_report_id_pack(bcmolt_xgpon_onu_power_level_report_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_power_level_report_id_unpack(bcmolt_xgpon_onu_power_level_report_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_power_management_state_change_id_pack(bcmolt_xgpon_onu_power_management_state_change_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_power_management_state_change_id_unpack(bcmolt_xgpon_onu_power_management_state_change_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_pqsi_id_pack(bcmolt_xgpon_onu_pqsi_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_pqsi_id_unpack(bcmolt_xgpon_onu_pqsi_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_ranging_completed_id_pack(bcmolt_xgpon_onu_ranging_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_ranging_completed_id_unpack(bcmolt_xgpon_onu_ranging_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_registration_id_id_pack(bcmolt_xgpon_onu_registration_id_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_registration_id_id_unpack(bcmolt_xgpon_onu_registration_id_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_request_registration_id_pack(bcmolt_xgpon_onu_request_registration_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_request_registration_id_unpack(bcmolt_xgpon_onu_request_registration_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_rssi_measurement_completed_id_pack(bcmolt_xgpon_onu_rssi_measurement_completed_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_rssi_measurement_completed_id_unpack(bcmolt_xgpon_onu_rssi_measurement_completed_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_rssi_measurement_id_pack(bcmolt_xgpon_onu_rssi_measurement_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_rssi_measurement_id_unpack(bcmolt_xgpon_onu_rssi_measurement_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_sdi_id_pack(bcmolt_xgpon_onu_sdi_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_sdi_id_unpack(bcmolt_xgpon_onu_sdi_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_secure_mutual_authentication_failure_id_pack(bcmolt_xgpon_onu_secure_mutual_authentication_failure_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_secure_mutual_authentication_failure_id_unpack(bcmolt_xgpon_onu_secure_mutual_authentication_failure_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_secure_mutual_authentication_id_pack(bcmolt_xgpon_onu_secure_mutual_authentication_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_secure_mutual_authentication_id_unpack(bcmolt_xgpon_onu_secure_mutual_authentication_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_set_onu_state_id_pack(bcmolt_xgpon_onu_set_onu_state_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_set_onu_state_id_unpack(bcmolt_xgpon_onu_set_onu_state_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_sfi_id_pack(bcmolt_xgpon_onu_sfi_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_sfi_id_unpack(bcmolt_xgpon_onu_sfi_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_stat_alarm_cleared_id_pack(bcmolt_xgpon_onu_stat_alarm_cleared_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_stat_alarm_cleared_id_unpack(bcmolt_xgpon_onu_stat_alarm_cleared_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_stat_alarm_raised_id_pack(bcmolt_xgpon_onu_stat_alarm_raised_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_stat_alarm_raised_id_unpack(bcmolt_xgpon_onu_stat_alarm_raised_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_stat_cfg_id_pack(bcmolt_xgpon_onu_stat_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_stat_cfg_id_unpack(bcmolt_xgpon_onu_stat_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_stat_id_pack(bcmolt_xgpon_onu_stat_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_stat_id_unpack(bcmolt_xgpon_onu_stat_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_sufi_id_pack(bcmolt_xgpon_onu_sufi_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_sufi_id_unpack(bcmolt_xgpon_onu_sufi_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_tiwi_id_pack(bcmolt_xgpon_onu_tiwi_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_tiwi_id_unpack(bcmolt_xgpon_onu_tiwi_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_tuning_response_id_pack(bcmolt_xgpon_onu_tuning_response_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_tuning_response_id_unpack(bcmolt_xgpon_onu_tuning_response_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_serdes_ranging_mode_pack(bcmolt_xgpon_serdes_ranging_mode this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_serdes_ranging_mode_unpack(bcmolt_xgpon_serdes_ranging_mode *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_trx_cfg_id_pack(bcmolt_xgpon_trx_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_trx_cfg_id_unpack(bcmolt_xgpon_trx_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_trx_key_id_pack(bcmolt_xgpon_trx_key_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_trx_key_id_unpack(bcmolt_xgpon_trx_key_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_trx_type_pack(bcmolt_xgpon_trx_type this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_trx_type_unpack(bcmolt_xgpon_trx_type *this, bcmolt_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xpon_serdes_cfg_id_pack(bcmolt_xpon_serdes_cfg_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xpon_serdes_cfg_id_unpack(bcmolt_xpon_serdes_cfg_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xpon_serdes_key_id_pack(bcmolt_xpon_serdes_key_id this, bcmolt_buf *buf)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xpon_serdes_key_id_unpack(bcmolt_xpon_serdes_key_id *this, bcmolt_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_actual_schedulershaper_set_default(bcmolt_actual_schedulershaper *this)
+{
+    this->actual_mbs_tq = (bcmolt_time_quanta) 0;
+    this->actual_weight_tq = (bcmolt_time_quanta) 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_actual_schedulershaper_pack(const bcmolt_actual_schedulershaper *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u32(buf, (uint32_t) this->actual_mbs_tq))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, (uint32_t) this->actual_weight_tq))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_actual_schedulershaper_unpack(bcmolt_actual_schedulershaper *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u32(buf, (uint32_t *) &this->actual_mbs_tq))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, (uint32_t *) &this->actual_weight_tq))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_actual_schedulershaper_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 8);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_actual_schedulershaper_bounds_check(const bcmolt_actual_schedulershaper *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_aes_key_set_default(bcmolt_aes_key *this)
+{
+    memset(this->bytes, 0, sizeof(this->bytes));
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_aes_key_pack(const bcmolt_aes_key *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write(buf, this->bytes, 16))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_aes_key_unpack(bcmolt_aes_key *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read(buf, this->bytes, 16))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_aes_key_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 16);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_aes_key_bounds_check(const bcmolt_aes_key *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_api_capture_buffer_reader_set_default(bcmolt_api_capture_buffer_reader *this)
+{
+    this->offset = 0;
+    this->size = 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_api_capture_buffer_reader_pack(const bcmolt_api_capture_buffer_reader *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u32(buf, this->offset))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_api_capture_buffer_reader_unpack(bcmolt_api_capture_buffer_reader *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u32(buf, &this->offset))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_api_capture_buffer_reader_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 8);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_api_capture_buffer_reader_bounds_check(const bcmolt_api_capture_buffer_reader *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_api_capture_config_set_default(bcmolt_api_capture_config *this)
+{
+    this->location = BCMOLT_API_CAPTURE_LOCATION_DEVICE;
+    this->buffer_size_bytes = 16384;
+    this->buffer_mode = BCMOLT_API_CAPTURE_BUFFER_MODE_WRAP;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_api_capture_config_pack(const bcmolt_api_capture_config *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_api_capture_location_pack(this->location, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->buffer_size_bytes))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_api_capture_buffer_mode_pack(this->buffer_mode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_api_capture_config_unpack(bcmolt_api_capture_config *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_api_capture_location_unpack(&this->location, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->buffer_size_bytes))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_api_capture_buffer_mode_unpack(&this->buffer_mode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_api_capture_config_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 6);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_api_capture_config_bounds_check(const bcmolt_api_capture_config *this)
+{
+    switch (this->location)
+    {
+        case BCMOLT_API_CAPTURE_LOCATION_DEVICE:
+            break;
+        case BCMOLT_API_CAPTURE_LOCATION_HOST:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    if (this->buffer_size_bytes < 16384)
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->buffer_mode)
+    {
+        case BCMOLT_API_CAPTURE_BUFFER_MODE_OVERFLOW:
+            break;
+        case BCMOLT_API_CAPTURE_BUFFER_MODE_WRAP:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_api_capture_stats_set_default(bcmolt_api_capture_stats *this)
+{
+    this->buffer_used_bytes = 0;
+    this->buffer_wrap_count = 0;
+    this->events_recorded = 0;
+    this->events_dropped = 0;
+    this->readable_bytes = 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_api_capture_stats_pack(const bcmolt_api_capture_stats *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u32(buf, this->buffer_used_bytes))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->buffer_wrap_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->events_recorded))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->events_dropped))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->readable_bytes))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_api_capture_stats_unpack(bcmolt_api_capture_stats *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u32(buf, &this->buffer_used_bytes))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->buffer_wrap_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->events_recorded))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->events_dropped))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->readable_bytes))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_api_capture_stats_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 20);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_api_capture_stats_bounds_check(const bcmolt_api_capture_stats *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_bounds_set_default(bcmolt_bounds *this)
+{
+    this->best_case = 0;
+    this->worst_case = 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_bounds_pack(const bcmolt_bounds *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u32(buf, this->best_case))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->worst_case))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_bounds_unpack(bcmolt_bounds *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u32(buf, &this->best_case))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->worst_case))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_bounds_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 8);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_bounds_bounds_check(const bcmolt_bounds *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_arr_bounds_8_set_default(bcmolt_arr_bounds_8 *this)
+{
+    memset(this->arr, 0, sizeof(this->arr));
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_bounds_8_pack(const bcmolt_arr_bounds_8 *this, bcmolt_buf *buf)
+{
+    uint32_t i0;
+    for (i0 = 0; i0 < 8; i0++)
+    {
+        if (!bcmolt_bounds_pack(&this->arr[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_bounds_8_unpack(bcmolt_arr_bounds_8 *this, bcmolt_buf *buf, void **extra_mem)
+{
+    uint32_t i0;
+    for (i0 = 0; i0 < 8; i0++)
+    {
+        if (!bcmolt_bounds_unpack(&this->arr[i0], buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_bounds_8_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 64);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_bounds_8_bounds_check(const bcmolt_arr_bounds_8 *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_arr_calibration_record_8_set_default(bcmolt_arr_calibration_record_8 *this)
+{
+    memset(this->arr, 0, sizeof(this->arr));
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_calibration_record_8_pack(const bcmolt_arr_calibration_record_8 *this, bcmolt_buf *buf)
+{
+    uint32_t i0;
+    for (i0 = 0; i0 < 8; i0++)
+    {
+        if (!bcmolt_calibration_record_pack(this->arr[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_calibration_record_8_unpack(bcmolt_arr_calibration_record_8 *this, bcmolt_buf *buf, void **extra_mem)
+{
+    uint32_t i0;
+    for (i0 = 0; i0 < 8; i0++)
+    {
+        if (!bcmolt_calibration_record_unpack(&this->arr[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_calibration_record_8_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 8);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_calibration_record_8_bounds_check(const bcmolt_arr_calibration_record_8 *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_ds_frequency_offset_set_default(bcmolt_ds_frequency_offset *this)
+{
+    this->sign = BCMOLT_SIGN_POSITIVE;
+    this->value = 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ds_frequency_offset_pack(const bcmolt_ds_frequency_offset *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_sign_pack(this->sign, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->value))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ds_frequency_offset_unpack(bcmolt_ds_frequency_offset *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_sign_unpack(&this->sign, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->value))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ds_frequency_offset_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 2);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ds_frequency_offset_bounds_check(const bcmolt_ds_frequency_offset *this)
+{
+    switch (this->sign)
+    {
+        case BCMOLT_SIGN_POSITIVE:
+            break;
+        case BCMOLT_SIGN_NEGATIVE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_channel_profile_set_default(bcmolt_channel_profile *this)
+{
+    this->version = 0;
+    this->channel_index = 0;
+    this->ds_frequency_offset.sign = BCMOLT_SIGN_POSITIVE;
+    this->ds_frequency_offset.value = 0;
+    this->channel_partition = 0;
+    this->uwlch_id = 0;
+    this->us_frequency = 0;
+    this->us_rate = BCMOLT_UPSTREAM_LINE_RATE_CAPABILITIES_RATE_2_P_5_G;
+    this->default_onu_attenuation = 0;
+    this->response_threshold = 0;
+    this->us_link_type = BCMOLT_LINK_TYPE_UNSPECIFIED;
+    this->is_valid = BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_channel_profile_pack(const bcmolt_channel_profile *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u8(buf, this->version))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->channel_index))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_ds_frequency_offset_pack(&this->ds_frequency_offset, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->channel_partition))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->uwlch_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->us_frequency))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_upstream_line_rate_capabilities_pack(this->us_rate, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->default_onu_attenuation))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->response_threshold))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_link_type_pack(this->us_link_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_bool(buf, this->is_valid))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_channel_profile_unpack(bcmolt_channel_profile *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u8(buf, &this->version))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->channel_index))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_ds_frequency_offset_unpack(&this->ds_frequency_offset, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->channel_partition))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->uwlch_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->us_frequency))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_upstream_line_rate_capabilities_unpack(&this->us_rate, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->default_onu_attenuation))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->response_threshold))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_link_type_unpack(&this->us_link_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_bool(buf, &this->is_valid))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_channel_profile_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 15);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_channel_profile_bounds_check(const bcmolt_channel_profile *this)
+{
+    if (this->version > 15)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->channel_index > 15)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_ds_frequency_offset_bounds_check(&this->ds_frequency_offset))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->channel_partition > 15)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->uwlch_id > 15)
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->us_rate)
+    {
+        case BCMOLT_UPSTREAM_LINE_RATE_CAPABILITIES_RATE_2_P_5_G:
+            break;
+        case BCMOLT_UPSTREAM_LINE_RATE_CAPABILITIES_RATE_10_G:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    if (this->default_onu_attenuation > 7)
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->us_link_type)
+    {
+        case BCMOLT_LINK_TYPE_UNSPECIFIED:
+            break;
+        case BCMOLT_LINK_TYPE_B:
+            break;
+        case BCMOLT_LINK_TYPE_A:
+            break;
+        case BCMOLT_LINK_TYPE_A_AND_B:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_arr_channel_profile_8_set_default(bcmolt_arr_channel_profile_8 *this)
+{
+    memset(this->arr, 0, sizeof(this->arr));
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_channel_profile_8_pack(const bcmolt_arr_channel_profile_8 *this, bcmolt_buf *buf)
+{
+    uint32_t i0;
+    for (i0 = 0; i0 < 8; i0++)
+    {
+        if (!bcmolt_channel_profile_pack(&this->arr[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_channel_profile_8_unpack(bcmolt_arr_channel_profile_8 *this, bcmolt_buf *buf, void **extra_mem)
+{
+    uint32_t i0;
+    for (i0 = 0; i0 < 8; i0++)
+    {
+        if (!bcmolt_channel_profile_unpack(&this->arr[i0], buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_channel_profile_8_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 120);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_channel_profile_8_bounds_check(const bcmolt_arr_channel_profile_8 *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_power_consumption_channel_report_set_default(bcmolt_power_consumption_channel_report *this)
+{
+    this->ds_wavelength_channel_id = 0;
+    this->us_wavelength_channel_id = 0;
+    this->power_consumption = 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_power_consumption_channel_report_pack(const bcmolt_power_consumption_channel_report *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u8(buf, this->ds_wavelength_channel_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->us_wavelength_channel_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u16(buf, this->power_consumption))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_power_consumption_channel_report_unpack(bcmolt_power_consumption_channel_report *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u8(buf, &this->ds_wavelength_channel_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->us_wavelength_channel_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u16(buf, &this->power_consumption))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_power_consumption_channel_report_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 4);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_power_consumption_channel_report_bounds_check(const bcmolt_power_consumption_channel_report *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_arr_power_consumption_channel_report_8_set_default(bcmolt_arr_power_consumption_channel_report_8 *this)
+{
+    memset(this->arr, 0, sizeof(this->arr));
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_power_consumption_channel_report_8_pack(const bcmolt_arr_power_consumption_channel_report_8 *this, bcmolt_buf *buf)
+{
+    uint32_t i0;
+    for (i0 = 0; i0 < 8; i0++)
+    {
+        if (!bcmolt_power_consumption_channel_report_pack(&this->arr[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_power_consumption_channel_report_8_unpack(bcmolt_arr_power_consumption_channel_report_8 *this, bcmolt_buf *buf, void **extra_mem)
+{
+    uint32_t i0;
+    for (i0 = 0; i0 < 8; i0++)
+    {
+        if (!bcmolt_power_consumption_channel_report_unpack(&this->arr[i0], buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_power_consumption_channel_report_8_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 32);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_power_consumption_channel_report_8_bounds_check(const bcmolt_arr_power_consumption_channel_report_8 *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_arr_u16_2_set_default(bcmolt_arr_u16_2 *this)
+{
+    this->arr[0] = 4096;
+    this->arr[1] = 8192;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_u16_2_pack(const bcmolt_arr_u16_2 *this, bcmolt_buf *buf)
+{
+    uint32_t i0;
+    for (i0 = 0; i0 < 2; i0++)
+    {
+        if (!bcmolt_buf_write_u16(buf, this->arr[i0]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_u16_2_unpack(bcmolt_arr_u16_2 *this, bcmolt_buf *buf, void **extra_mem)
+{
+    uint32_t i0;
+    for (i0 = 0; i0 < 2; i0++)
+    {
+        if (!bcmolt_buf_read_u16(buf, &this->arr[i0]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_u16_2_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 4);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_u16_2_bounds_check(const bcmolt_arr_u16_2 *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_arr_u16_2_hex_set_default(bcmolt_arr_u16_2_hex *this)
+{
+    this->arr[0] = 33024U;
+    this->arr[1] = 33024U;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_u16_2_hex_pack(const bcmolt_arr_u16_2_hex *this, bcmolt_buf *buf)
+{
+    uint32_t i0;
+    for (i0 = 0; i0 < 2; i0++)
+    {
+        if (!bcmolt_buf_write_u16(buf, this->arr[i0]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_u16_2_hex_unpack(bcmolt_arr_u16_2_hex *this, bcmolt_buf *buf, void **extra_mem)
+{
+    uint32_t i0;
+    for (i0 = 0; i0 < 2; i0++)
+    {
+        if (!bcmolt_buf_read_u16(buf, &this->arr[i0]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_u16_2_hex_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 4);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_u16_2_hex_bounds_check(const bcmolt_arr_u16_2_hex *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_arr_u16_5_hex_set_default(bcmolt_arr_u16_5_hex *this)
+{
+    this->arr[0] = 33024U;
+    this->arr[1] = 34984U;
+    this->arr[2] = 37120U;
+    this->arr[3] = 37376U;
+    this->arr[4] = 33024U;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_u16_5_hex_pack(const bcmolt_arr_u16_5_hex *this, bcmolt_buf *buf)
+{
+    uint32_t i0;
+    for (i0 = 0; i0 < 5; i0++)
+    {
+        if (!bcmolt_buf_write_u16(buf, this->arr[i0]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_u16_5_hex_unpack(bcmolt_arr_u16_5_hex *this, bcmolt_buf *buf, void **extra_mem)
+{
+    uint32_t i0;
+    for (i0 = 0; i0 < 5; i0++)
+    {
+        if (!bcmolt_buf_read_u16(buf, &this->arr[i0]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_u16_5_hex_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 10);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_u16_5_hex_bounds_check(const bcmolt_arr_u16_5_hex *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_arr_u16_7_set_default(bcmolt_arr_u16_7 *this)
+{
+    memset(this->arr, 0, sizeof(this->arr));
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_u16_7_pack(const bcmolt_arr_u16_7 *this, bcmolt_buf *buf)
+{
+    uint32_t i0;
+    for (i0 = 0; i0 < 7; i0++)
+    {
+        if (!bcmolt_buf_write_u16(buf, this->arr[i0]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_u16_7_unpack(bcmolt_arr_u16_7 *this, bcmolt_buf *buf, void **extra_mem)
+{
+    uint32_t i0;
+    for (i0 = 0; i0 < 7; i0++)
+    {
+        if (!bcmolt_buf_read_u16(buf, &this->arr[i0]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_u16_7_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 14);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_u16_7_bounds_check(const bcmolt_arr_u16_7 *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_arr_u32_6_set_default(bcmolt_arr_u32_6 *this)
+{
+    memset(this->arr, 0, sizeof(this->arr));
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_u32_6_pack(const bcmolt_arr_u32_6 *this, bcmolt_buf *buf)
+{
+    uint32_t i0;
+    for (i0 = 0; i0 < 6; i0++)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->arr[i0]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_u32_6_unpack(bcmolt_arr_u32_6 *this, bcmolt_buf *buf, void **extra_mem)
+{
+    uint32_t i0;
+    for (i0 = 0; i0 < 6; i0++)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->arr[i0]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_u32_6_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 24);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_u32_6_bounds_check(const bcmolt_arr_u32_6 *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_arr_u8_10_set_default(bcmolt_arr_u8_10 *this)
+{
+    memset(this->arr, 0, sizeof(this->arr));
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_u8_10_pack(const bcmolt_arr_u8_10 *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write(buf, this->arr, 10))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_u8_10_unpack(bcmolt_arr_u8_10 *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read(buf, this->arr, 10))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_u8_10_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 10);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_u8_10_bounds_check(const bcmolt_arr_u8_10 *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_arr_u8_12_set_default(bcmolt_arr_u8_12 *this)
+{
+    memset(this->arr, 0, sizeof(this->arr));
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_u8_12_pack(const bcmolt_arr_u8_12 *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write(buf, this->arr, 12))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_u8_12_unpack(bcmolt_arr_u8_12 *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read(buf, this->arr, 12))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_u8_12_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 12);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_u8_12_bounds_check(const bcmolt_arr_u8_12 *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_arr_u8_13_set_default(bcmolt_arr_u8_13 *this)
+{
+    memset(this->arr, 0, sizeof(this->arr));
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_u8_13_pack(const bcmolt_arr_u8_13 *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write(buf, this->arr, 13))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_u8_13_unpack(bcmolt_arr_u8_13 *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read(buf, this->arr, 13))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_u8_13_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 13);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_u8_13_bounds_check(const bcmolt_arr_u8_13 *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_arr_u8_36_set_default(bcmolt_arr_u8_36 *this)
+{
+    memset(this->arr, 0, sizeof(this->arr));
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_u8_36_pack(const bcmolt_arr_u8_36 *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write(buf, this->arr, 36))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_u8_36_unpack(bcmolt_arr_u8_36 *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read(buf, this->arr, 36))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_u8_36_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 36);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_u8_36_bounds_check(const bcmolt_arr_u8_36 *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_arr_u8_4_set_default(bcmolt_arr_u8_4 *this)
+{
+    this->arr[0] = 7;
+    this->arr[1] = 7;
+    this->arr[2] = 7;
+    this->arr[3] = 7;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_u8_4_pack(const bcmolt_arr_u8_4 *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write(buf, this->arr, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_u8_4_unpack(bcmolt_arr_u8_4 *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read(buf, this->arr, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_u8_4_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 4);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_u8_4_bounds_check(const bcmolt_arr_u8_4 *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_arr_u8_40_set_default(bcmolt_arr_u8_40 *this)
+{
+    memset(this->arr, 0, sizeof(this->arr));
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_u8_40_pack(const bcmolt_arr_u8_40 *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write(buf, this->arr, 40))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_u8_40_unpack(bcmolt_arr_u8_40 *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read(buf, this->arr, 40))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_u8_40_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 40);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_u8_40_bounds_check(const bcmolt_arr_u8_40 *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_burst_profile_set_default(bcmolt_xgpon_burst_profile *this)
+{
+    this->profile_version = 0;
+    this->is_fec_on = BCMOS_FALSE;
+    this->delimiter_size_in_bytes = 0;
+    this->delimiter_pattern_high = 0;
+    this->delimiter_pattern_low = 8;
+    this->preamble_length_in_bytes = 8;
+    this->preamble_repeats_count = 0;
+    this->preamble_pattern_high = 0;
+    this->preamble_pattern_low = 0;
+    this->pon_tag = 0;
+    this->num_of_guard_bytes = 0;
+    this->is_profile_valid = BCMOS_FALSE;
+    this->burst_overhead_size_in_words = 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_burst_profile_pack(const bcmolt_xgpon_burst_profile *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u8(buf, this->profile_version))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_bool(buf, this->is_fec_on))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->delimiter_size_in_bytes))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->delimiter_pattern_high))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->delimiter_pattern_low))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->preamble_length_in_bytes))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->preamble_repeats_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->preamble_pattern_high))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->preamble_pattern_low))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u64(buf, this->pon_tag))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->num_of_guard_bytes))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_bool(buf, this->is_profile_valid))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->burst_overhead_size_in_words))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_burst_profile_unpack(bcmolt_xgpon_burst_profile *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u8(buf, &this->profile_version))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_bool(buf, &this->is_fec_on))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->delimiter_size_in_bytes))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->delimiter_pattern_high))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->delimiter_pattern_low))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->preamble_length_in_bytes))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->preamble_repeats_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->preamble_pattern_high))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->preamble_pattern_low))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u64(buf, &this->pon_tag))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->num_of_guard_bytes))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_bool(buf, &this->is_profile_valid))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->burst_overhead_size_in_words))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_burst_profile_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 38);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_burst_profile_bounds_check(const bcmolt_xgpon_burst_profile *this)
+{
+    if (this->delimiter_size_in_bytes > 8)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->preamble_length_in_bytes < 1)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->preamble_length_in_bytes > 8)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_arr_xgpon_burst_profile_4_set_default(bcmolt_arr_xgpon_burst_profile_4 *this)
+{
+    this->arr[0].profile_version = 0;
+    this->arr[0].is_fec_on = BCMOS_FALSE;
+    this->arr[0].delimiter_size_in_bytes = 8;
+    this->arr[0].delimiter_pattern_high = 3015562000UL;
+    this->arr[0].delimiter_pattern_low = 2999259041UL;
+    this->arr[0].preamble_length_in_bytes = 8;
+    this->arr[0].preamble_repeats_count = 20;
+    this->arr[0].preamble_pattern_high = 2863311530UL;
+    this->arr[0].preamble_pattern_low = 2863311530UL;
+    this->arr[0].pon_tag = 0;
+    this->arr[0].num_of_guard_bytes = 16;
+    this->arr[0].is_profile_valid = BCMOS_TRUE;
+    this->arr[0].burst_overhead_size_in_words = 78;
+    this->arr[1].profile_version = 0;
+    this->arr[1].is_fec_on = BCMOS_FALSE;
+    this->arr[1].delimiter_size_in_bytes = 8;
+    this->arr[1].delimiter_pattern_high = 3015562000UL;
+    this->arr[1].delimiter_pattern_low = 2999259041UL;
+    this->arr[1].preamble_length_in_bytes = 8;
+    this->arr[1].preamble_repeats_count = 9;
+    this->arr[1].preamble_pattern_high = 2863311530UL;
+    this->arr[1].preamble_pattern_low = 2863311530UL;
+    this->arr[1].pon_tag = 0;
+    this->arr[1].num_of_guard_bytes = 16;
+    this->arr[1].is_profile_valid = BCMOS_TRUE;
+    this->arr[1].burst_overhead_size_in_words = 56;
+    this->arr[2].profile_version = 0;
+    this->arr[2].is_fec_on = BCMOS_TRUE;
+    this->arr[2].delimiter_size_in_bytes = 8;
+    this->arr[2].delimiter_pattern_high = 3015562000UL;
+    this->arr[2].delimiter_pattern_low = 2999259041UL;
+    this->arr[2].preamble_length_in_bytes = 8;
+    this->arr[2].preamble_repeats_count = 20;
+    this->arr[2].preamble_pattern_high = 2863311530UL;
+    this->arr[2].preamble_pattern_low = 2863311530UL;
+    this->arr[2].pon_tag = 0;
+    this->arr[2].num_of_guard_bytes = 16;
+    this->arr[2].is_profile_valid = BCMOS_TRUE;
+    this->arr[2].burst_overhead_size_in_words = 78;
+    this->arr[3].profile_version = 0;
+    this->arr[3].is_fec_on = BCMOS_TRUE;
+    this->arr[3].delimiter_size_in_bytes = 8;
+    this->arr[3].delimiter_pattern_high = 3015562000UL;
+    this->arr[3].delimiter_pattern_low = 2999259041UL;
+    this->arr[3].preamble_length_in_bytes = 8;
+    this->arr[3].preamble_repeats_count = 9;
+    this->arr[3].preamble_pattern_high = 2863311530UL;
+    this->arr[3].preamble_pattern_low = 2863311530UL;
+    this->arr[3].pon_tag = 0;
+    this->arr[3].num_of_guard_bytes = 16;
+    this->arr[3].is_profile_valid = BCMOS_TRUE;
+    this->arr[3].burst_overhead_size_in_words = 56;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_xgpon_burst_profile_4_pack(const bcmolt_arr_xgpon_burst_profile_4 *this, bcmolt_buf *buf)
+{
+    uint32_t i0;
+    for (i0 = 0; i0 < 4; i0++)
+    {
+        if (!bcmolt_xgpon_burst_profile_pack(&this->arr[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_xgpon_burst_profile_4_unpack(bcmolt_arr_xgpon_burst_profile_4 *this, bcmolt_buf *buf, void **extra_mem)
+{
+    uint32_t i0;
+    for (i0 = 0; i0 < 4; i0++)
+    {
+        if (!bcmolt_xgpon_burst_profile_unpack(&this->arr[i0], buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_xgpon_burst_profile_4_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 152);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_xgpon_burst_profile_4_bounds_check(const bcmolt_arr_xgpon_burst_profile_4 *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_trx_configuration_set_default(bcmolt_xgpon_trx_configuration *this)
+{
+    this->trx_reset_pattern_first = 0;
+    this->trx_reset_pattern_middle = 0;
+    this->trx_reset_pattern_last = 0;
+    this->trx_reset_middle_repeats_count = 0;
+    this->trx_reset_location = 0;
+    this->trx_reset_polarity = BCMOS_FALSE;
+    this->bcdr_reset_pattern_first = 0;
+    this->bcdr_reset_pattern_middle = 0;
+    this->bcdr_reset_pattern_last = 0;
+    this->bcdr_reset_middle_repeats_count = 0;
+    this->bcdr_reset_location = 0;
+    this->bcdr_reset_polarity = BCMOS_FALSE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_trx_configuration_pack(const bcmolt_xgpon_trx_configuration *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u32(buf, this->trx_reset_pattern_first))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->trx_reset_pattern_middle))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->trx_reset_pattern_last))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->trx_reset_middle_repeats_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u16(buf, this->trx_reset_location))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_bool(buf, this->trx_reset_polarity))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->bcdr_reset_pattern_first))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->bcdr_reset_pattern_middle))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->bcdr_reset_pattern_last))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->bcdr_reset_middle_repeats_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->bcdr_reset_location))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_bool(buf, this->bcdr_reset_polarity))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_trx_configuration_unpack(bcmolt_xgpon_trx_configuration *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u32(buf, &this->trx_reset_pattern_first))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->trx_reset_pattern_middle))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->trx_reset_pattern_last))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->trx_reset_middle_repeats_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u16(buf, &this->trx_reset_location))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_bool(buf, &this->trx_reset_polarity))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->bcdr_reset_pattern_first))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->bcdr_reset_pattern_middle))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->bcdr_reset_pattern_last))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->bcdr_reset_middle_repeats_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->bcdr_reset_location))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_bool(buf, &this->bcdr_reset_polarity))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_trx_configuration_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 31);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_trx_configuration_bounds_check(const bcmolt_xgpon_trx_configuration *this)
+{
+    if (this->trx_reset_location > 511)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_arr_xgpon_trx_configuration_4_set_default(bcmolt_arr_xgpon_trx_configuration_4 *this)
+{
+    this->arr[0].trx_reset_pattern_first = 0;
+    this->arr[0].trx_reset_pattern_middle = 4294967295UL;
+    this->arr[0].trx_reset_pattern_last = 0;
+    this->arr[0].trx_reset_middle_repeats_count = 4;
+    this->arr[0].trx_reset_location = 0;
+    this->arr[0].trx_reset_polarity = BCMOS_FALSE;
+    this->arr[0].bcdr_reset_pattern_first = 0;
+    this->arr[0].bcdr_reset_pattern_middle = 255;
+    this->arr[0].bcdr_reset_pattern_last = 0;
+    this->arr[0].bcdr_reset_middle_repeats_count = 1;
+    this->arr[0].bcdr_reset_location = 20;
+    this->arr[0].bcdr_reset_polarity = BCMOS_FALSE;
+    this->arr[1].trx_reset_pattern_first = 0;
+    this->arr[1].trx_reset_pattern_middle = 4294967295UL;
+    this->arr[1].trx_reset_pattern_last = 0;
+    this->arr[1].trx_reset_middle_repeats_count = 4;
+    this->arr[1].trx_reset_location = 33;
+    this->arr[1].trx_reset_polarity = BCMOS_FALSE;
+    this->arr[1].bcdr_reset_pattern_first = 0;
+    this->arr[1].bcdr_reset_pattern_middle = 255;
+    this->arr[1].bcdr_reset_pattern_last = 0;
+    this->arr[1].bcdr_reset_middle_repeats_count = 1;
+    this->arr[1].bcdr_reset_location = 23;
+    this->arr[1].bcdr_reset_polarity = BCMOS_FALSE;
+    this->arr[2].trx_reset_pattern_first = 0;
+    this->arr[2].trx_reset_pattern_middle = 4294967295UL;
+    this->arr[2].trx_reset_pattern_last = 0;
+    this->arr[2].trx_reset_middle_repeats_count = 4;
+    this->arr[2].trx_reset_location = 0;
+    this->arr[2].trx_reset_polarity = BCMOS_FALSE;
+    this->arr[2].bcdr_reset_pattern_first = 0;
+    this->arr[2].bcdr_reset_pattern_middle = 255;
+    this->arr[2].bcdr_reset_pattern_last = 0;
+    this->arr[2].bcdr_reset_middle_repeats_count = 1;
+    this->arr[2].bcdr_reset_location = 20;
+    this->arr[2].bcdr_reset_polarity = BCMOS_FALSE;
+    this->arr[3].trx_reset_pattern_first = 0;
+    this->arr[3].trx_reset_pattern_middle = 4294967295UL;
+    this->arr[3].trx_reset_pattern_last = 0;
+    this->arr[3].trx_reset_middle_repeats_count = 4;
+    this->arr[3].trx_reset_location = 33;
+    this->arr[3].trx_reset_polarity = BCMOS_FALSE;
+    this->arr[3].bcdr_reset_pattern_first = 0;
+    this->arr[3].bcdr_reset_pattern_middle = 255;
+    this->arr[3].bcdr_reset_pattern_last = 0;
+    this->arr[3].bcdr_reset_middle_repeats_count = 1;
+    this->arr[3].bcdr_reset_location = 23;
+    this->arr[3].bcdr_reset_polarity = BCMOS_FALSE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_xgpon_trx_configuration_4_pack(const bcmolt_arr_xgpon_trx_configuration_4 *this, bcmolt_buf *buf)
+{
+    uint32_t i0;
+    for (i0 = 0; i0 < 4; i0++)
+    {
+        if (!bcmolt_xgpon_trx_configuration_pack(&this->arr[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_xgpon_trx_configuration_4_unpack(bcmolt_arr_xgpon_trx_configuration_4 *this, bcmolt_buf *buf, void **extra_mem)
+{
+    uint32_t i0;
+    for (i0 = 0; i0 < 4; i0++)
+    {
+        if (!bcmolt_xgpon_trx_configuration_unpack(&this->arr[i0], buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_xgpon_trx_configuration_4_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 124);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_arr_xgpon_trx_configuration_4_bounds_check(const bcmolt_arr_xgpon_trx_configuration_4 *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_automatic_onu_deactivation_set_default(bcmolt_automatic_onu_deactivation *this)
+{
+    this->los = BCMOS_FALSE;
+    this->onu_alarms = BCMOS_FALSE;
+    this->tiwi = BCMOS_FALSE;
+    this->ack_timeout = BCMOS_FALSE;
+    this->sfi = BCMOS_FALSE;
+    this->loki = BCMOS_FALSE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_automatic_onu_deactivation_pack(const bcmolt_automatic_onu_deactivation *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_bool(buf, this->los))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_bool(buf, this->onu_alarms))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_bool(buf, this->tiwi))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_bool(buf, this->ack_timeout))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_bool(buf, this->sfi))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_bool(buf, this->loki))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_automatic_onu_deactivation_unpack(bcmolt_automatic_onu_deactivation *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_bool(buf, &this->los))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_bool(buf, &this->onu_alarms))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_bool(buf, &this->tiwi))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_bool(buf, &this->ack_timeout))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_bool(buf, &this->sfi))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_bool(buf, &this->loki))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_automatic_onu_deactivation_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 6);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_automatic_onu_deactivation_bounds_check(const bcmolt_automatic_onu_deactivation *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_resync_control_set_default(bcmolt_resync_control *this)
+{
+    this->start_pattern = 15;
+    this->middle_pattern = 0;
+    this->last_pattern = 0;
+    this->middle_repetition = 0;
+    this->location = 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_resync_control_pack(const bcmolt_resync_control *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u8(buf, this->start_pattern))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->middle_pattern))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->last_pattern))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->middle_repetition))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->location))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_resync_control_unpack(bcmolt_resync_control *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u8(buf, &this->start_pattern))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->middle_pattern))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->last_pattern))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->middle_repetition))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->location))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_resync_control_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 5);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_resync_control_bounds_check(const bcmolt_resync_control *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_bcdr_resync_pattern_configuration_set_default(bcmolt_bcdr_resync_pattern_configuration *this)
+{
+    this->resync_control.start_pattern = 15;
+    this->resync_control.middle_pattern = 0;
+    this->resync_control.last_pattern = 0;
+    this->resync_control.middle_repetition = 0;
+    this->resync_control.location = 34;
+    this->ranging_resync_control.start_pattern = 15;
+    this->ranging_resync_control.middle_pattern = 0;
+    this->ranging_resync_control.last_pattern = 0;
+    this->ranging_resync_control.middle_repetition = 0;
+    this->ranging_resync_control.location = 7;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_bcdr_resync_pattern_configuration_pack(const bcmolt_bcdr_resync_pattern_configuration *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_resync_control_pack(&this->resync_control, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_resync_control_pack(&this->ranging_resync_control, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_bcdr_resync_pattern_configuration_unpack(bcmolt_bcdr_resync_pattern_configuration *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_resync_control_unpack(&this->resync_control, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_resync_control_unpack(&this->ranging_resync_control, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_bcdr_resync_pattern_configuration_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 10);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_bcdr_resync_pattern_configuration_bounds_check(const bcmolt_bcdr_resync_pattern_configuration *this)
+{
+    if (!bcmolt_resync_control_bounds_check(&this->resync_control))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_resync_control_bounds_check(&this->ranging_resync_control))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_ber_monitor_params_set_default(bcmolt_ber_monitor_params *this)
+{
+    this->us_ber_interval = 5000;
+    this->sf_threshold = 3;
+    this->sd_threshold = 5;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ber_monitor_params_pack(const bcmolt_ber_monitor_params *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u32(buf, this->us_ber_interval))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->sf_threshold))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->sd_threshold))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ber_monitor_params_unpack(bcmolt_ber_monitor_params *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u32(buf, &this->us_ber_interval))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->sf_threshold))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->sd_threshold))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ber_monitor_params_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 6);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ber_monitor_params_bounds_check(const bcmolt_ber_monitor_params *this)
+{
+    if (this->us_ber_interval > 60000UL)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->sf_threshold < 3)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->sf_threshold > 8)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->sd_threshold < 4)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->sd_threshold > 9)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_cbr_rt_allocation_profile_set_default(bcmolt_cbr_rt_allocation_profile *this)
+{
+    this->ma_7 = 64;
+    this->ma_3 = 256;
+    this->ma_1 = 512;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_cbr_rt_allocation_profile_pack(const bcmolt_cbr_rt_allocation_profile *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u16(buf, this->ma_7))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u16(buf, this->ma_3))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u16(buf, this->ma_1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_cbr_rt_allocation_profile_unpack(bcmolt_cbr_rt_allocation_profile *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u16(buf, &this->ma_7))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u16(buf, &this->ma_3))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u16(buf, &this->ma_1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_cbr_rt_allocation_profile_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 6);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_cbr_rt_allocation_profile_bounds_check(const bcmolt_cbr_rt_allocation_profile *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_ddr_test_completed_set_default(bcmolt_ddr_test_completed *this)
+{
+    this->status = (bcmolt_ddr_test_status) 2;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ddr_test_completed_pack(const bcmolt_ddr_test_completed *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_ddr_test_status_pack(this->status, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->status)
+    {
+        case BCMOLT_DDR_TEST_STATUS_COMPLETED:
+            {
+                if (!bcmolt_ddr_test_result_pack(this->u.completed.cpu_result, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_ddr_test_result_pack(this->u.completed.ras_0_result, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_ddr_test_result_pack(this->u.completed.ras_1_result, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_DDR_TEST_STATUS_CONNECTION_FAILED:
+            {
+                if (!bcmolt_host_connection_fail_reason_pack(this->u.connection_failed.reason, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_DDR_TEST_STATUS_TIMEOUT:
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_ddr_test_completed_get_packed_length(const bcmolt_ddr_test_completed *this)
+{
+    uint32_t count = 1;
+    switch (this->status)
+    {
+        case BCMOLT_DDR_TEST_STATUS_COMPLETED:
+            {
+                count += 3;
+            }
+            break;
+        case BCMOLT_DDR_TEST_STATUS_CONNECTION_FAILED:
+            {
+                count += 1;
+            }
+            break;
+        case BCMOLT_DDR_TEST_STATUS_TIMEOUT:
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ddr_test_completed_unpack(bcmolt_ddr_test_completed *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_ddr_test_status_unpack(&this->status, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->status)
+    {
+        case BCMOLT_DDR_TEST_STATUS_COMPLETED:
+            {
+                if (!bcmolt_ddr_test_result_unpack(&this->u.completed.cpu_result, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_ddr_test_result_unpack(&this->u.completed.ras_0_result, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_ddr_test_result_unpack(&this->u.completed.ras_1_result, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_DDR_TEST_STATUS_CONNECTION_FAILED:
+            {
+                if (!bcmolt_host_connection_fail_reason_unpack(&this->u.connection_failed.reason, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_DDR_TEST_STATUS_TIMEOUT:
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ddr_test_completed_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_ddr_test_status status;
+    if (!bcmolt_ddr_test_status_unpack(&status, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (status)
+    {
+        case BCMOLT_DDR_TEST_STATUS_COMPLETED:
+            {
+                if (!bcmolt_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_DDR_TEST_STATUS_CONNECTION_FAILED:
+            {
+                if (!bcmolt_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_DDR_TEST_STATUS_TIMEOUT:
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ddr_test_completed_bounds_check(const bcmolt_ddr_test_completed *this)
+{
+    switch (this->status)
+    {
+        case BCMOLT_DDR_TEST_STATUS_COMPLETED:
+            {
+                switch (this->u.completed.cpu_result)
+                {
+                    case BCMOLT_DDR_TEST_RESULT_SUCCESS:
+                        break;
+                    case BCMOLT_DDR_TEST_RESULT_PHY_INIT_ERROR:
+                        break;
+                    case BCMOLT_DDR_TEST_RESULT_DRAM_INIT_ERROR:
+                        break;
+                    case BCMOLT_DDR_TEST_RESULT_SHMOO_ERROR:
+                        break;
+                    case BCMOLT_DDR_TEST_RESULT_EDIS_TEST_ERROR:
+                        break;
+                    case BCMOLT_DDR_TEST_RESULT_MEM_TEST_ERROR:
+                        break;
+                    case BCMOLT_DDR_TEST_RESULT_NOT_TESTED:
+                        break;
+                    default:
+                        return BCMOS_FALSE;
+                }
+
+                switch (this->u.completed.ras_0_result)
+                {
+                    case BCMOLT_DDR_TEST_RESULT_SUCCESS:
+                        break;
+                    case BCMOLT_DDR_TEST_RESULT_PHY_INIT_ERROR:
+                        break;
+                    case BCMOLT_DDR_TEST_RESULT_DRAM_INIT_ERROR:
+                        break;
+                    case BCMOLT_DDR_TEST_RESULT_SHMOO_ERROR:
+                        break;
+                    case BCMOLT_DDR_TEST_RESULT_EDIS_TEST_ERROR:
+                        break;
+                    case BCMOLT_DDR_TEST_RESULT_MEM_TEST_ERROR:
+                        break;
+                    case BCMOLT_DDR_TEST_RESULT_NOT_TESTED:
+                        break;
+                    default:
+                        return BCMOS_FALSE;
+                }
+
+                switch (this->u.completed.ras_1_result)
+                {
+                    case BCMOLT_DDR_TEST_RESULT_SUCCESS:
+                        break;
+                    case BCMOLT_DDR_TEST_RESULT_PHY_INIT_ERROR:
+                        break;
+                    case BCMOLT_DDR_TEST_RESULT_DRAM_INIT_ERROR:
+                        break;
+                    case BCMOLT_DDR_TEST_RESULT_SHMOO_ERROR:
+                        break;
+                    case BCMOLT_DDR_TEST_RESULT_EDIS_TEST_ERROR:
+                        break;
+                    case BCMOLT_DDR_TEST_RESULT_MEM_TEST_ERROR:
+                        break;
+                    case BCMOLT_DDR_TEST_RESULT_NOT_TESTED:
+                        break;
+                    default:
+                        return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_DDR_TEST_STATUS_CONNECTION_FAILED:
+            {
+                switch (this->u.connection_failed.reason)
+                {
+                    case BCMOLT_HOST_CONNECTION_FAIL_REASON_TIMEOUT:
+                        break;
+                    case BCMOLT_HOST_CONNECTION_FAIL_REASON_KEEPALIVE:
+                        break;
+                    case BCMOLT_HOST_CONNECTION_FAIL_REASON_USER_CALLBACK_ERROR:
+                        break;
+                    case BCMOLT_HOST_CONNECTION_FAIL_REASON_SOFTWARE_VERSION_MISMATCH:
+                        break;
+                    case BCMOLT_HOST_CONNECTION_FAIL_REASON_SYSTEM_MODE_MISMATCH:
+                        break;
+                    case BCMOLT_HOST_CONNECTION_FAIL_REASON_NNI_SPEED_MISMATCH:
+                        break;
+                    case BCMOLT_HOST_CONNECTION_FAIL_REASON_RECONNECT_TIMEOUT:
+                        break;
+                    case BCMOLT_HOST_CONNECTION_FAIL_REASON_INTERNAL_ERROR:
+                        break;
+                    case BCMOLT_HOST_CONNECTION_FAIL_REASON_SYSTEM_MODE_NOT_SUPPORTED:
+                        break;
+                    case BCMOLT_HOST_CONNECTION_FAIL_REASON_PARAMETER:
+                        break;
+                    default:
+                        return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_DDR_TEST_STATUS_TIMEOUT:
+            break;
+        default:
+            {
+            }
+
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_debug_device_cfg_set_default(bcmolt_debug_device_cfg *this)
+{
+    this->host_dma_rx_queue_size = 128;
+    this->host_dma_tx_queue_size = 128;
+    this->avs_control = BCMOS_FALSE;
+    this->use_prev_pon_serdes_firmware = BCMOS_FALSE;
+    this->use_prev_nni_serdes_firmware = BCMOS_FALSE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_debug_device_cfg_pack(const bcmolt_debug_device_cfg *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u16(buf, this->host_dma_rx_queue_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u16(buf, this->host_dma_tx_queue_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_bool(buf, this->avs_control))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_bool(buf, this->use_prev_pon_serdes_firmware))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_bool(buf, this->use_prev_nni_serdes_firmware))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_debug_device_cfg_unpack(bcmolt_debug_device_cfg *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u16(buf, &this->host_dma_rx_queue_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u16(buf, &this->host_dma_tx_queue_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_bool(buf, &this->avs_control))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_bool(buf, &this->use_prev_pon_serdes_firmware))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_bool(buf, &this->use_prev_nni_serdes_firmware))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_debug_device_cfg_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 7);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_debug_device_cfg_bounds_check(const bcmolt_debug_device_cfg *this)
+{
+    if (this->host_dma_rx_queue_size < 1)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->host_dma_rx_queue_size > 1024)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->host_dma_tx_queue_size < 1)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->host_dma_tx_queue_size > 1024)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_device_nni_speed_set_default(bcmolt_device_nni_speed *this)
+{
+    this->first_half = BCMOLT_NNI_SPEED_GBPS_1;
+    this->second_half = BCMOLT_NNI_SPEED_GBPS_1;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_nni_speed_pack(const bcmolt_device_nni_speed *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_nni_speed_pack(this->first_half, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_nni_speed_pack(this->second_half, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_nni_speed_unpack(bcmolt_device_nni_speed *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_nni_speed_unpack(&this->first_half, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_nni_speed_unpack(&this->second_half, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_nni_speed_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 2);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_nni_speed_bounds_check(const bcmolt_device_nni_speed *this)
+{
+    switch (this->first_half)
+    {
+        case BCMOLT_NNI_SPEED_GBPS_1:
+            break;
+        case BCMOLT_NNI_SPEED_GBPS_2P5:
+            break;
+        case BCMOLT_NNI_SPEED_GBPS_10:
+            break;
+        case BCMOLT_NNI_SPEED_GBPS_12P5:
+            break;
+        case BCMOLT_NNI_SPEED_GBPS_10_G_MUX:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->second_half)
+    {
+        case BCMOLT_NNI_SPEED_GBPS_1:
+            break;
+        case BCMOLT_NNI_SPEED_GBPS_2P5:
+            break;
+        case BCMOLT_NNI_SPEED_GBPS_10:
+            break;
+        case BCMOLT_NNI_SPEED_GBPS_12P5:
+            break;
+        case BCMOLT_NNI_SPEED_GBPS_10_G_MUX:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/* \cond UNDOCUMENTED_SYMBOLS */
+
+/******************************************************************************/
+void bcmolt_dummy_struct_for_embedded_types_set_default(bcmolt_dummy_struct_for_embedded_types *this)
+{
+    this->ad = (bcmolt_aggregation_domain) 0;
+    this->et = (bcmolt_epon_top) 0;
+    this->elg = (bcmolt_epm_lim_global) 0;
+    this->dba_port = (bcmolt_dba_port) 0;
+    this->sgb = BCMOLT_DRV_SGB_ID_IDX0;
+    this->icf = BCMOLT_DRV_ICF_ID_IDX0;
+    this->tfb_trap_behavior = BCMOLT_TFB_TRAP_BEHAVIOR_DROP;
+    this->tfb_mode = BCMOLT_TFB_MODE_GPON;
+    this->lim_sec_mode_up = BCMOLT_LIM_SEC_MODE_UP_TEK;
+    this->lim_sec_mode_dn = BCMOLT_LIM_SEC_MODE_DN_TEK;
+    this->xim_sec_mode = BCMOLT_XIM_SEC_MODE_RESERVED_0;
+    this->dba_ram = BCMOLT_DBA_RAM_GRANT_FIFO_RAM_0;
+    this->hsc_ram = BCMOLT_HSC_RAM_LLC_T1;
+    this->lim_ram = BCMOLT_LIM_RAM_LLID_UP;
+    this->lky_ram = BCMOLT_LKY_RAM_TX_KEY_RAM;
+    this->mic_ram = BCMOLT_MIC_RAM_RANGE;
+    this->xpcs_ram = BCMOLT_XPCSRM_RAM_CAPTURE_FIFO;
+    this->xg2g_id = (bcmolt_xg2g_id) 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_dummy_struct_for_embedded_types_pack(const bcmolt_dummy_struct_for_embedded_types *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u8(buf, (uint8_t) this->ad))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, (uint8_t) this->et))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, (uint8_t) this->elg))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, (uint8_t) this->dba_port))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_drv_sgb_id_pack(this->sgb, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_drv_icf_id_pack(this->icf, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_tfb_trap_behavior_pack(this->tfb_trap_behavior, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_tfb_mode_pack(this->tfb_mode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_lim_sec_mode_up_pack(this->lim_sec_mode_up, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_lim_sec_mode_dn_pack(this->lim_sec_mode_dn, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_xim_sec_mode_pack(this->xim_sec_mode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_dba_ram_pack(this->dba_ram, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_hsc_ram_pack(this->hsc_ram, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_lim_ram_pack(this->lim_ram, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_lky_ram_pack(this->lky_ram, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_mic_ram_pack(this->mic_ram, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_xpcsrm_ram_pack(this->xpcs_ram, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, (uint8_t) this->xg2g_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_dummy_struct_for_embedded_types_unpack(bcmolt_dummy_struct_for_embedded_types *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u8(buf, (uint8_t *) &this->ad))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, (uint8_t *) &this->et))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, (uint8_t *) &this->elg))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, (uint8_t *) &this->dba_port))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_drv_sgb_id_unpack(&this->sgb, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_drv_icf_id_unpack(&this->icf, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_tfb_trap_behavior_unpack(&this->tfb_trap_behavior, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_tfb_mode_unpack(&this->tfb_mode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_lim_sec_mode_up_unpack(&this->lim_sec_mode_up, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_lim_sec_mode_dn_unpack(&this->lim_sec_mode_dn, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_xim_sec_mode_unpack(&this->xim_sec_mode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_dba_ram_unpack(&this->dba_ram, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_hsc_ram_unpack(&this->hsc_ram, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_lim_ram_unpack(&this->lim_ram, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_lky_ram_unpack(&this->lky_ram, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_mic_ram_unpack(&this->mic_ram, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_xpcsrm_ram_unpack(&this->xpcs_ram, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, (uint8_t *) &this->xg2g_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_dummy_struct_for_embedded_types_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 18);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_dummy_struct_for_embedded_types_bounds_check(const bcmolt_dummy_struct_for_embedded_types *this)
+{
+    if (this->ad > (bcmolt_aggregation_domain) 1)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->et > (bcmolt_epon_top) 7)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->elg > (bcmolt_epm_lim_global) 15)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->dba_port > (bcmolt_dba_port) 7)
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->sgb)
+    {
+        case BCMOLT_DRV_SGB_ID_IDX0:
+            break;
+        case BCMOLT_DRV_SGB_ID_IDX1:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->icf)
+    {
+        case BCMOLT_DRV_ICF_ID_IDX0:
+            break;
+        case BCMOLT_DRV_ICF_ID_IDX1:
+            break;
+        case BCMOLT_DRV_ICF_ID_IDX2:
+            break;
+        case BCMOLT_DRV_ICF_ID_IDX3:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->tfb_trap_behavior)
+    {
+        case BCMOLT_TFB_TRAP_BEHAVIOR_DROP:
+            break;
+        case BCMOLT_TFB_TRAP_BEHAVIOR_FORWARD_NNI:
+            break;
+        case BCMOLT_TFB_TRAP_BEHAVIOR_FORWARD_CPU:
+            break;
+        case BCMOLT_TFB_TRAP_BEHAVIOR_SNOOP:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->tfb_mode)
+    {
+        case BCMOLT_TFB_MODE_GPON:
+            break;
+        case BCMOLT_TFB_MODE_XGPON:
+            break;
+        case BCMOLT_TFB_MODE_EPON:
+            break;
+        case BCMOLT_TFB_MODE_XEPON:
+            break;
+        case BCMOLT_TFB_MODE_COEX:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->lim_sec_mode_up)
+    {
+        case BCMOLT_LIM_SEC_MODE_UP_TEK:
+            break;
+        case BCMOLT_LIM_SEC_MODE_UP_PER_LLID:
+            break;
+        case BCMOLT_LIM_SEC_MODE_UP_NTT:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->lim_sec_mode_dn)
+    {
+        case BCMOLT_LIM_SEC_MODE_DN_TEK:
+            break;
+        case BCMOLT_LIM_SEC_MODE_DN_PER_LLID:
+            break;
+        case BCMOLT_LIM_SEC_MODE_DN_NTT:
+            break;
+        case BCMOLT_LIM_SEC_MODE_DN_CEPON:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->xim_sec_mode)
+    {
+        case BCMOLT_XIM_SEC_MODE_RESERVED_0:
+            break;
+        case BCMOLT_XIM_SEC_MODE_PER_LLID:
+            break;
+        case BCMOLT_XIM_SEC_MODE_RESERVED_2:
+            break;
+        case BCMOLT_XIM_SEC_MODE_CEPON:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->dba_ram)
+    {
+        case BCMOLT_DBA_RAM_GRANT_FIFO_RAM_0:
+            break;
+        case BCMOLT_DBA_RAM_GRANT_FIFO_RAM_1:
+            break;
+        case BCMOLT_DBA_RAM_GRANT_FIFO_RAM_2:
+            break;
+        case BCMOLT_DBA_RAM_GRANT_FIFO_RAM_3:
+            break;
+        case BCMOLT_DBA_RAM_GRANT_FIFO_RAM_4:
+            break;
+        case BCMOLT_DBA_RAM_GRANT_FIFO_RAM_5:
+            break;
+        case BCMOLT_DBA_RAM_GRANT_FIFO_RAM_6:
+            break;
+        case BCMOLT_DBA_RAM_GRANT_FIFO_RAM_7:
+            break;
+        case BCMOLT_DBA_RAM_GRANTS_OUT_RAM:
+            break;
+        case BCMOLT_DBA_RAM_GRANTS_IN_RAM:
+            break;
+        case BCMOLT_DBA_RAM_GRANTS_RETIRED_RAM:
+            break;
+        case BCMOLT_DBA_RAM_REPORT_RAM:
+            break;
+        case BCMOLT_DBA_RAM_GRANT_CFG_RAM:
+            break;
+        case BCMOLT_DBA_RAM_DEFAULT_TOKENS_RAM:
+            break;
+        case BCMOLT_DBA_RAM_POLL_RECORDS_RAM:
+            break;
+        case BCMOLT_DBA_RAM_HEIR_POLL_RAM:
+            break;
+        case BCMOLT_DBA_RAM_LAST_POLL_TIME_RAM:
+            break;
+        case BCMOLT_DBA_RAM_POLL_ORDER_RAM:
+            break;
+        case BCMOLT_DBA_RAM_TDM_RAM_0:
+            break;
+        case BCMOLT_DBA_RAM_TDM_RAM_1:
+            break;
+        case BCMOLT_DBA_RAM_TDM_RAM_2:
+            break;
+        case BCMOLT_DBA_RAM_TDM_RAM_3:
+            break;
+        case BCMOLT_DBA_RAM_TDM_RAM_4:
+            break;
+        case BCMOLT_DBA_RAM_TDM_RAM_5:
+            break;
+        case BCMOLT_DBA_RAM_TDM_RAM_6:
+            break;
+        case BCMOLT_DBA_RAM_TDM_RAM_7:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->hsc_ram)
+    {
+        case BCMOLT_HSC_RAM_LLC_T1:
+            break;
+        case BCMOLT_HSC_RAM_LLC_T2:
+            break;
+        case BCMOLT_HSC_RAM_LLC_T3:
+            break;
+        case BCMOLT_HSC_RAM_GRP_T2:
+            break;
+        case BCMOLT_HSC_RAM_GRP_T3:
+            break;
+        case BCMOLT_HSC_RAM_SHP_T1:
+            break;
+        case BCMOLT_HSC_RAM_SHP_T2:
+            break;
+        case BCMOLT_HSC_RAM_SHP_T3:
+            break;
+        case BCMOLT_HSC_RAM_PRF_T1:
+            break;
+        case BCMOLT_HSC_RAM_PRF_T2:
+            break;
+        case BCMOLT_HSC_RAM_PRF_T3:
+            break;
+        case BCMOLT_HSC_RAM_CRE_T1:
+            break;
+        case BCMOLT_HSC_RAM_CRE_T2:
+            break;
+        case BCMOLT_HSC_RAM_CRE_T3:
+            break;
+        case BCMOLT_HSC_RAM_ELU:
+            break;
+        case BCMOLT_HSC_RAM_PTR_T1:
+            break;
+        case BCMOLT_HSC_RAM_PTR_T2:
+            break;
+        case BCMOLT_HSC_RAM_AGR_SHP_T1:
+            break;
+        case BCMOLT_HSC_RAM_AEM:
+            break;
+        case BCMOLT_HSC_RAM_ALL_LLC:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->lim_ram)
+    {
+        case BCMOLT_LIM_RAM_LLID_UP:
+            break;
+        case BCMOLT_LIM_RAM_PER_ONU_STAT:
+            break;
+        case BCMOLT_LIM_RAM_FEC_UP_FULL_S:
+            break;
+        case BCMOLT_LIM_RAM_FEC_UP_DATA:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->lky_ram)
+    {
+        case BCMOLT_LKY_RAM_TX_KEY_RAM:
+            break;
+        case BCMOLT_LKY_RAM_TX_KEY_BUFFER:
+            break;
+        case BCMOLT_LKY_RAM_RX_KEY_RAM:
+            break;
+        case BCMOLT_LKY_RAM_RX_KEY_BUFFER:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->mic_ram)
+    {
+        case BCMOLT_MIC_RAM_RANGE:
+            break;
+        case BCMOLT_MIC_RAM_LLID:
+            break;
+        case BCMOLT_MIC_RAM_IDX:
+            break;
+        case BCMOLT_MIC_RAM_GRANT_MISS:
+            break;
+        case BCMOLT_MIC_RAM_GRANT_ID:
+            break;
+        case BCMOLT_MIC_RAM_TX_IV:
+            break;
+        case BCMOLT_MIC_RAM_RX_IV:
+            break;
+        case BCMOLT_MIC_RAM_TX_PORT_STAT:
+            break;
+        case BCMOLT_MIC_RAM_RX_PORT_STAT:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->xpcs_ram)
+    {
+        case BCMOLT_XPCSRM_RAM_CAPTURE_FIFO:
+            break;
+        case BCMOLT_XPCSRM_RAM_FEC_DECODE:
+            break;
+        case BCMOLT_XPCSRM_RAM_FEC_STATS:
+            break;
+        case BCMOLT_XPCSRM_RAM_FEC_ENQUEUE:
+            break;
+        case BCMOLT_XPCSRM_RAM_IDLE_INSERT:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    if (this->xg2g_id > (bcmolt_xg2g_id) 7)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/* \endcond */
+
+/******************************************************************************/
+void bcmolt_embedded_image_entry_set_default(bcmolt_embedded_image_entry *this)
+{
+    this->image_type = BCMOLT_DEVICE_IMAGE_TYPE_BOOTLOADER;
+    this->image_size = 0;
+    this->crc32 = 0;
+    this->status = BCMOLT_EMBEDDED_IMAGE_TRANSFER_STATUS_NONE;
+    memset(this->image_name, 0, 64);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_embedded_image_entry_pack(const bcmolt_embedded_image_entry *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_device_image_type_pack(this->image_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->image_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->crc32))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_embedded_image_transfer_status_pack(this->status, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write(buf, this->image_name, 64))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_embedded_image_entry_unpack(bcmolt_embedded_image_entry *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_device_image_type_unpack(&this->image_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->image_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->crc32))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_embedded_image_transfer_status_unpack(&this->status, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read(buf, this->image_name, 64))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_embedded_image_entry_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 74);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_embedded_image_entry_bounds_check(const bcmolt_embedded_image_entry *this)
+{
+    switch (this->image_type)
+    {
+        case BCMOLT_DEVICE_IMAGE_TYPE_BOOTLOADER:
+            break;
+        case BCMOLT_DEVICE_IMAGE_TYPE_APPLICATION:
+            break;
+        case BCMOLT_DEVICE_IMAGE_TYPE_ITU_PON_ONU_FIRMWARE:
+            break;
+        case BCMOLT_DEVICE_IMAGE_TYPE_EPON_ONU_FIRMWARE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->status)
+    {
+        case BCMOLT_EMBEDDED_IMAGE_TRANSFER_STATUS_NONE:
+            break;
+        case BCMOLT_EMBEDDED_IMAGE_TRANSFER_STATUS_IN_PROGRESS:
+            break;
+        case BCMOLT_EMBEDDED_IMAGE_TRANSFER_STATUS_SUCCESS:
+            break;
+        case BCMOLT_EMBEDDED_IMAGE_TRANSFER_STATUS_FAILURE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_embedded_image_entry_list_u8_set_default(bcmolt_embedded_image_entry_list_u8 *this)
+{
+    this->len = 0;
+    this->val = NULL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_embedded_image_entry_list_u8_pack(const bcmolt_embedded_image_entry_list_u8 *this, bcmolt_buf *buf)
+{
+    uint8_t i0;
+    if (!bcmolt_buf_write_u8(buf, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_embedded_image_entry_list_u8\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_embedded_image_entry_pack(&this->val[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_embedded_image_entry_list_u8_get_packed_length(const bcmolt_embedded_image_entry_list_u8 *this)
+{
+    return 1 + (74 * this->len);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_embedded_image_entry_list_u8_unpack(bcmolt_embedded_image_entry_list_u8 *this, bcmolt_buf *buf, void **extra_mem)
+{
+    uint8_t i0;
+    if (!bcmolt_buf_read_u8(buf, &this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_embedded_image_entry_list_u8\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->val = (bcmolt_embedded_image_entry *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->len * sizeof(bcmolt_embedded_image_entry));
+        }
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_embedded_image_entry_unpack(&this->val[i0], buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_embedded_image_entry_list_u8_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    uint8_t len;
+    if (!bcmolt_buf_read_u8(packed, &len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_embedded_image_entry) * len);
+    if (!bcmolt_buf_skip(packed, len * 74))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_embedded_image_entry_list_u8_bounds_check(const bcmolt_embedded_image_entry_list_u8 *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_encryption_information_container_set_default(bcmolt_encryption_information_container *this)
+{
+    this->format = (bcmolt_epon_encryption_information_format) 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_encryption_information_container_pack(const bcmolt_encryption_information_container *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_epon_encryption_information_format_pack(this->format, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->format)
+    {
+        case BCMOLT_EPON_ENCRYPTION_INFORMATION_FORMAT_CFB:
+            {
+                if (!bcmolt_buf_write(buf, this->u.cfb.key, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_ENCRYPTION_INFORMATION_FORMAT_CTR:
+            {
+                if (!bcmolt_buf_write(buf, this->u.ctr.key, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_buf_write(buf, this->u.ctr.sci, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_encryption_information_container_get_packed_length(const bcmolt_encryption_information_container *this)
+{
+    uint32_t count = 1;
+    switch (this->format)
+    {
+        case BCMOLT_EPON_ENCRYPTION_INFORMATION_FORMAT_CFB:
+            {
+                count += 16;
+            }
+            break;
+        case BCMOLT_EPON_ENCRYPTION_INFORMATION_FORMAT_CTR:
+            {
+                count += 24;
+            }
+            break;
+        default:
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_encryption_information_container_unpack(bcmolt_encryption_information_container *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_encryption_information_format_unpack(&this->format, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->format)
+    {
+        case BCMOLT_EPON_ENCRYPTION_INFORMATION_FORMAT_CFB:
+            {
+                if (!bcmolt_buf_read(buf, this->u.cfb.key, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_ENCRYPTION_INFORMATION_FORMAT_CTR:
+            {
+                if (!bcmolt_buf_read(buf, this->u.ctr.key, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_buf_read(buf, this->u.ctr.sci, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_encryption_information_container_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_encryption_information_format format;
+    if (!bcmolt_epon_encryption_information_format_unpack(&format, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (format)
+    {
+        case BCMOLT_EPON_ENCRYPTION_INFORMATION_FORMAT_CFB:
+            {
+                if (!bcmolt_buf_skip(packed, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_ENCRYPTION_INFORMATION_FORMAT_CTR:
+            {
+                if (!bcmolt_buf_skip(packed, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_buf_skip(packed, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_encryption_information_container_bounds_check(const bcmolt_encryption_information_container *this)
+{
+    switch (this->format)
+    {
+        case BCMOLT_EPON_ENCRYPTION_INFORMATION_FORMAT_CFB:
+            {
+            }
+            break;
+        case BCMOLT_EPON_ENCRYPTION_INFORMATION_FORMAT_CTR:
+            {
+            }
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_clock_transport_configuration_set_default(bcmolt_epon_clock_transport_configuration *this)
+{
+    this->epon_clock_transport_mode = BCMOLT_EPON_CLOCK_TRANSPORT_MODE_HOST_DRIVEN;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_clock_transport_configuration_pack(const bcmolt_epon_clock_transport_configuration *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_epon_clock_transport_mode_pack(this->epon_clock_transport_mode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_clock_transport_configuration_unpack(bcmolt_epon_clock_transport_configuration *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_clock_transport_mode_unpack(&this->epon_clock_transport_mode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_clock_transport_configuration_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 1);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_clock_transport_configuration_bounds_check(const bcmolt_epon_clock_transport_configuration *this)
+{
+    switch (this->epon_clock_transport_mode)
+    {
+        case BCMOLT_EPON_CLOCK_TRANSPORT_MODE_HOST_DRIVEN:
+            break;
+        case BCMOLT_EPON_CLOCK_TRANSPORT_MODE_EMBEDDED_DRIVEN:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_unknown_link_status_set_default(bcmolt_unknown_link_status *this)
+{
+    this->link_rate = BCMOLT_EPON_LINK_RATE_TEN_TEN;
+    this->alarm_status = BCMOLT_STATUS_OFF;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_unknown_link_status_pack(const bcmolt_unknown_link_status *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_epon_link_rate_pack(this->link_rate, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_pack(this->alarm_status, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_unknown_link_status_unpack(bcmolt_unknown_link_status *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_link_rate_unpack(&this->link_rate, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_unpack(&this->alarm_status, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_unknown_link_status_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 3);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_unknown_link_status_bounds_check(const bcmolt_unknown_link_status *this)
+{
+    switch (this->link_rate)
+    {
+        case BCMOLT_EPON_LINK_RATE_TEN_TEN:
+            break;
+        case BCMOLT_EPON_LINK_RATE_TEN_ONE:
+            break;
+        case BCMOLT_EPON_LINK_RATE_ONE_ONE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->alarm_status)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_laser_on_off_status_set_default(bcmolt_laser_on_off_status *this)
+{
+    this->laser_on_time = (bcmolt_time_quanta) 0;
+    this->laser_off_time = (bcmolt_time_quanta) 0;
+    this->alarm_status = BCMOLT_STATUS_OFF;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_laser_on_off_status_pack(const bcmolt_laser_on_off_status *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u32(buf, (uint32_t) this->laser_on_time))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, (uint32_t) this->laser_off_time))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_pack(this->alarm_status, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_laser_on_off_status_unpack(bcmolt_laser_on_off_status *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u32(buf, (uint32_t *) &this->laser_on_time))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, (uint32_t *) &this->laser_off_time))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_unpack(&this->alarm_status, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_laser_on_off_status_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 9);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_laser_on_off_status_bounds_check(const bcmolt_laser_on_off_status *this)
+{
+    switch (this->alarm_status)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_range_status_set_default(bcmolt_range_status *this)
+{
+    this->range = (bcmolt_time_quanta) 0;
+    this->alarm_status = BCMOLT_STATUS_OFF;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_range_status_pack(const bcmolt_range_status *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u32(buf, (uint32_t) this->range))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_pack(this->alarm_status, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_range_status_unpack(bcmolt_range_status *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u32(buf, (uint32_t *) &this->range))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_unpack(&this->alarm_status, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_range_status_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 5);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_range_status_bounds_check(const bcmolt_range_status *this)
+{
+    switch (this->alarm_status)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_rogue_status_set_default(bcmolt_rogue_status *this)
+{
+    this->denied_llid = (bcmolt_epon_llid) 0;
+    this->denied_range = (bcmolt_time_quanta) 0;
+    this->alarm_status = BCMOLT_STATUS_OFF;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_rogue_status_pack(const bcmolt_rogue_status *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u16(buf, (uint16_t) this->denied_llid))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, (uint32_t) this->denied_range))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_pack(this->alarm_status, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_rogue_status_unpack(bcmolt_rogue_status *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->denied_llid))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, (uint32_t *) &this->denied_range))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_unpack(&this->alarm_status, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_rogue_status_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 7);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_rogue_status_bounds_check(const bcmolt_rogue_status *this)
+{
+    switch (this->alarm_status)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_denied_link_alarm_state_set_default(bcmolt_epon_denied_link_alarm_state *this)
+{
+    this->unknown_link_violation.link_rate = BCMOLT_EPON_LINK_RATE_TEN_TEN;
+    this->unknown_link_violation.alarm_status = BCMOLT_STATUS_OFF;
+    this->overhead_profile_violation = BCMOLT_STATUS_OFF;
+    this->max_link_violation = BCMOLT_STATUS_OFF;
+    this->llid_pool_empty_violation = BCMOLT_STATUS_OFF;
+    this->laser_on_off_violation.laser_on_time = (bcmolt_time_quanta) 0;
+    this->laser_on_off_violation.laser_off_time = (bcmolt_time_quanta) 0;
+    this->laser_on_off_violation.alarm_status = BCMOLT_STATUS_OFF;
+    this->system_resource_violation = BCMOLT_STATUS_OFF;
+    this->range_violation.range = (bcmolt_time_quanta) 0;
+    this->range_violation.alarm_status = BCMOLT_STATUS_OFF;
+    this->tdm_channels_exhausted = BCMOLT_STATUS_OFF;
+    this->rogue_violation.denied_llid = (bcmolt_epon_llid) 0;
+    this->rogue_violation.denied_range = (bcmolt_time_quanta) 0;
+    this->rogue_violation.alarm_status = BCMOLT_STATUS_OFF;
+    this->upstream_bandwidth_violation = BCMOLT_STATUS_OFF;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_alarm_state_pack(const bcmolt_epon_denied_link_alarm_state *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_unknown_link_status_pack(&this->unknown_link_violation, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_pack(this->overhead_profile_violation, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_pack(this->max_link_violation, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_pack(this->llid_pool_empty_violation, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_laser_on_off_status_pack(&this->laser_on_off_violation, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_pack(this->system_resource_violation, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_range_status_pack(&this->range_violation, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_pack(this->tdm_channels_exhausted, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_rogue_status_pack(&this->rogue_violation, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_pack(this->upstream_bandwidth_violation, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_alarm_state_unpack(bcmolt_epon_denied_link_alarm_state *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_unknown_link_status_unpack(&this->unknown_link_violation, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_unpack(&this->overhead_profile_violation, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_unpack(&this->max_link_violation, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_unpack(&this->llid_pool_empty_violation, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_laser_on_off_status_unpack(&this->laser_on_off_violation, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_unpack(&this->system_resource_violation, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_range_status_unpack(&this->range_violation, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_unpack(&this->tdm_channels_exhausted, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_rogue_status_unpack(&this->rogue_violation, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_unpack(&this->upstream_bandwidth_violation, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_alarm_state_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 30);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_alarm_state_bounds_check(const bcmolt_epon_denied_link_alarm_state *this)
+{
+    if (!bcmolt_unknown_link_status_bounds_check(&this->unknown_link_violation))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->overhead_profile_violation)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->max_link_violation)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->llid_pool_empty_violation)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_laser_on_off_status_bounds_check(&this->laser_on_off_violation))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->system_resource_violation)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_range_status_bounds_check(&this->range_violation))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->tdm_channels_exhausted)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_rogue_status_bounds_check(&this->rogue_violation))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->upstream_bandwidth_violation)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_encryption_config_set_default(bcmolt_epon_encryption_config *this)
+{
+    this->downstream_mode = BCMOLT_EPON_ENCRYPTION_MODE_NO_ENCRYPTION;
+    this->downstream_key_choice = BCMOLT_EPON_KEY_CHOICE_KEY_0;
+    this->downstream_encryption_information.format = BCMOLT_EPON_ENCRYPTION_INFORMATION_FORMAT_CFB;
+    memset(this->downstream_encryption_information.u.cfb.key, 0, sizeof(this->downstream_encryption_information.u.cfb.key));
+    this->upstream_mode = BCMOLT_EPON_ENCRYPTION_MODE_NO_ENCRYPTION;
+    this->upstream_key_choice = BCMOLT_EPON_KEY_CHOICE_KEY_0;
+    this->upstream_encryption_information.format = BCMOLT_EPON_ENCRYPTION_INFORMATION_FORMAT_CFB;
+    memset(this->upstream_encryption_information.u.cfb.key, 0, sizeof(this->upstream_encryption_information.u.cfb.key));
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_encryption_config_pack(const bcmolt_epon_encryption_config *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_epon_encryption_mode_pack(this->downstream_mode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_key_choice_pack(this->downstream_key_choice, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_encryption_information_container_pack(&this->downstream_encryption_information, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_encryption_mode_pack(this->upstream_mode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_key_choice_pack(this->upstream_key_choice, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_encryption_information_container_pack(&this->upstream_encryption_information, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_encryption_config_get_packed_length(const bcmolt_epon_encryption_config *this)
+{
+    return 6 + bcmolt_encryption_information_container_get_packed_length(&this->downstream_encryption_information) + bcmolt_encryption_information_container_get_packed_length(&this->upstream_encryption_information);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_encryption_config_unpack(bcmolt_epon_encryption_config *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_encryption_mode_unpack(&this->downstream_mode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_key_choice_unpack(&this->downstream_key_choice, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_encryption_information_container_unpack(&this->downstream_encryption_information, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_encryption_mode_unpack(&this->upstream_mode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_key_choice_unpack(&this->upstream_key_choice, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_encryption_information_container_unpack(&this->upstream_encryption_information, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_encryption_config_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    if (!bcmolt_buf_skip(packed, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_encryption_information_container_scan(packed, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_skip(packed, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_encryption_information_container_scan(packed, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_encryption_config_bounds_check(const bcmolt_epon_encryption_config *this)
+{
+    switch (this->downstream_mode)
+    {
+        case BCMOLT_EPON_ENCRYPTION_MODE_NO_ENCRYPTION:
+            break;
+        case BCMOLT_EPON_ENCRYPTION_MODE_EPON_TRIPLE_CHURNING:
+            break;
+        case BCMOLT_EPON_ENCRYPTION_MODE_EPON_ZERO_OVERHEAD_AES:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->downstream_key_choice)
+    {
+        case BCMOLT_EPON_KEY_CHOICE_KEY_0:
+            break;
+        case BCMOLT_EPON_KEY_CHOICE_KEY_1:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_encryption_information_container_bounds_check(&this->downstream_encryption_information))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->upstream_mode)
+    {
+        case BCMOLT_EPON_ENCRYPTION_MODE_NO_ENCRYPTION:
+            break;
+        case BCMOLT_EPON_ENCRYPTION_MODE_EPON_TRIPLE_CHURNING:
+            break;
+        case BCMOLT_EPON_ENCRYPTION_MODE_EPON_ZERO_OVERHEAD_AES:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->upstream_key_choice)
+    {
+        case BCMOLT_EPON_KEY_CHOICE_KEY_0:
+            break;
+        case BCMOLT_EPON_KEY_CHOICE_KEY_1:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_encryption_information_container_bounds_check(&this->upstream_encryption_information))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_key_exchange_config_set_default(bcmolt_epon_key_exchange_config *this)
+{
+    this->oam_type = BCMOLT_EPON_OAM_TYPE_BROADCOM;
+    this->period = 0;
+    this->direction = BCMOLT_EPON_ENCRYPTION_DIRECTION_DOWNSTREAM_ONLY;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_key_exchange_config_pack(const bcmolt_epon_key_exchange_config *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_epon_oam_type_pack(this->oam_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u16(buf, this->period))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_encryption_direction_pack(this->direction, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_key_exchange_config_unpack(bcmolt_epon_key_exchange_config *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_type_unpack(&this->oam_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u16(buf, &this->period))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_encryption_direction_unpack(&this->direction, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_key_exchange_config_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 5);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_key_exchange_config_bounds_check(const bcmolt_epon_key_exchange_config *this)
+{
+    switch (this->oam_type)
+    {
+        case BCMOLT_EPON_OAM_TYPE_BROADCOM:
+            break;
+        case BCMOLT_EPON_OAM_TYPE_CTC:
+            break;
+        case BCMOLT_EPON_OAM_TYPE_DPOE:
+            break;
+        case BCMOLT_EPON_OAM_TYPE_SIEPONA:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->direction)
+    {
+        case BCMOLT_EPON_ENCRYPTION_DIRECTION_DOWNSTREAM_ONLY:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_laser_overhead_parameters_set_default(bcmolt_epon_laser_overhead_parameters *this)
+{
+    this->laser_on_time = (bcmolt_time_quanta) 32;
+    this->laser_off_time = (bcmolt_time_quanta) 32;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_laser_overhead_parameters_pack(const bcmolt_epon_laser_overhead_parameters *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u32(buf, (uint32_t) this->laser_on_time))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, (uint32_t) this->laser_off_time))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_laser_overhead_parameters_unpack(bcmolt_epon_laser_overhead_parameters *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u32(buf, (uint32_t *) &this->laser_on_time))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, (uint32_t *) &this->laser_off_time))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_laser_overhead_parameters_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 8);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_laser_overhead_parameters_bounds_check(const bcmolt_epon_laser_overhead_parameters *this)
+{
+    if (this->laser_on_time > (bcmolt_time_quanta) 62)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->laser_off_time > (bcmolt_time_quanta) 62)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_link_alarm_state_set_default(bcmolt_epon_link_alarm_state *this)
+{
+    this->key_exchange_failure = BCMOLT_STATUS_OFF;
+    this->invalid_mpcp_report_received = BCMOLT_STATUS_OFF;
+    this->mpcp_report_timeout = BCMOLT_STATUS_OFF;
+    this->oam_keepalive_timeout = BCMOLT_STATUS_OFF;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_alarm_state_pack(const bcmolt_epon_link_alarm_state *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_status_pack(this->key_exchange_failure, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_pack(this->invalid_mpcp_report_received, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_pack(this->mpcp_report_timeout, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_pack(this->oam_keepalive_timeout, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_alarm_state_unpack(bcmolt_epon_link_alarm_state *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_status_unpack(&this->key_exchange_failure, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_unpack(&this->invalid_mpcp_report_received, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_unpack(&this->mpcp_report_timeout, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_unpack(&this->oam_keepalive_timeout, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_alarm_state_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 4);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_alarm_state_bounds_check(const bcmolt_epon_link_alarm_state *this)
+{
+    switch (this->key_exchange_failure)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->invalid_mpcp_report_received)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->mpcp_report_timeout)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->oam_keepalive_timeout)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_link_fec_en_set_default(bcmolt_epon_link_fec_en *this)
+{
+    this->upstream = BCMOLT_EPON_LINK_FEC_STATE_USE_DEFAULT;
+    this->downstream = BCMOLT_EPON_LINK_FEC_STATE_USE_DEFAULT;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_fec_en_pack(const bcmolt_epon_link_fec_en *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_epon_link_fec_state_pack(this->upstream, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_link_fec_state_pack(this->downstream, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_fec_en_unpack(bcmolt_epon_link_fec_en *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_link_fec_state_unpack(&this->upstream, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_link_fec_state_unpack(&this->downstream, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_fec_en_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 2);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_fec_en_bounds_check(const bcmolt_epon_link_fec_en *this)
+{
+    switch (this->upstream)
+    {
+        case BCMOLT_EPON_LINK_FEC_STATE_DISABLED:
+            break;
+        case BCMOLT_EPON_LINK_FEC_STATE_ENABLED:
+            break;
+        case BCMOLT_EPON_LINK_FEC_STATE_USE_DEFAULT:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->downstream)
+    {
+        case BCMOLT_EPON_LINK_FEC_STATE_DISABLED:
+            break;
+        case BCMOLT_EPON_LINK_FEC_STATE_ENABLED:
+            break;
+        case BCMOLT_EPON_LINK_FEC_STATE_USE_DEFAULT:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_link_info_set_default(bcmolt_epon_link_info *this)
+{
+    this->link_status = (bcmolt_epon_link_status) 0;
+    this->rate = BCMOLT_EPON_LINK_RATE_TEN_TEN;
+    this->llid = (bcmolt_epon_llid) 0;
+    this->mpcp_discovery_info = (bcmolt_mpcp_discovery_info) 0;
+    this->onu_laser_on_time_tq = (bcmolt_time_quanta) 0;
+    this->onu_laser_off_time_tq = (bcmolt_time_quanta) 0;
+    this->pending_grants = 0;
+    this->range_value_tq = (bcmolt_time_quanta) 0;
+    this->tunnel_id = (bcmolt_epon_tunnel_id) 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_info_pack(const bcmolt_epon_link_info *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_epon_link_status_pack(this->link_status, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_link_rate_pack(this->rate, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u16(buf, (uint16_t) this->llid))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_mpcp_discovery_info_pack(this->mpcp_discovery_info, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, (uint32_t) this->onu_laser_on_time_tq))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, (uint32_t) this->onu_laser_off_time_tq))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->pending_grants))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, (uint32_t) this->range_value_tq))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, (uint32_t) this->tunnel_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_info_unpack(bcmolt_epon_link_info *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_link_status_unpack(&this->link_status, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_link_rate_unpack(&this->rate, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->llid))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_mpcp_discovery_info_unpack(&this->mpcp_discovery_info, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, (uint32_t *) &this->onu_laser_on_time_tq))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, (uint32_t *) &this->onu_laser_off_time_tq))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->pending_grants))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, (uint32_t *) &this->range_value_tq))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, (uint32_t *) &this->tunnel_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_info_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 24);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_info_bounds_check(const bcmolt_epon_link_info *this)
+{
+    if ((this->link_status & 0x00F6) != 0)
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->rate)
+    {
+        case BCMOLT_EPON_LINK_RATE_TEN_TEN:
+            break;
+        case BCMOLT_EPON_LINK_RATE_TEN_ONE:
+            break;
+        case BCMOLT_EPON_LINK_RATE_ONE_ONE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    if ((this->mpcp_discovery_info & 0xFFCCU) != 0)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gate_parameters_set_default(bcmolt_gate_parameters *this)
+{
+    this->flags = (bcmolt_mpcp_registration_gate_flags) 0;
+    this->delay_before_ms = 50;
+    this->gate_size_tq = (bcmolt_time_quanta) 42;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gate_parameters_pack(const bcmolt_gate_parameters *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_mpcp_registration_gate_flags_pack(this->flags, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->delay_before_ms))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, (uint32_t) this->gate_size_tq))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gate_parameters_unpack(bcmolt_gate_parameters *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_mpcp_registration_gate_flags_unpack(&this->flags, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->delay_before_ms))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, (uint32_t *) &this->gate_size_tq))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gate_parameters_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 12);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gate_parameters_bounds_check(const bcmolt_gate_parameters *this)
+{
+    if ((this->flags & 0xFFFFFFFEUL) != 0)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->delay_before_ms > 3600000UL)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->gate_size_tq > (bcmolt_time_quanta) 65535UL)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gate_parameters_list_u32_set_default(bcmolt_gate_parameters_list_u32 *this)
+{
+    this->len = 0;
+    this->val = NULL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gate_parameters_list_u32_pack(const bcmolt_gate_parameters_list_u32 *this, bcmolt_buf *buf)
+{
+    uint32_t i0;
+    if (!bcmolt_buf_write_u32(buf, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_gate_parameters_list_u32\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_gate_parameters_pack(&this->val[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gate_parameters_list_u32_get_packed_length(const bcmolt_gate_parameters_list_u32 *this)
+{
+    return 4 + (12 * this->len);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gate_parameters_list_u32_unpack(bcmolt_gate_parameters_list_u32 *this, bcmolt_buf *buf, void **extra_mem)
+{
+    uint32_t i0;
+    if (!bcmolt_buf_read_u32(buf, &this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_gate_parameters_list_u32\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->val = (bcmolt_gate_parameters *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->len * sizeof(bcmolt_gate_parameters));
+        }
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_gate_parameters_unpack(&this->val[i0], buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gate_parameters_list_u32_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    uint32_t len;
+    if (!bcmolt_buf_read_u32(packed, &len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_gate_parameters) * len);
+    if (!bcmolt_buf_skip(packed, len * 12))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gate_parameters_list_u32_bounds_check(const bcmolt_gate_parameters_list_u32 *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_registration_gate_mode_set_default(bcmolt_epon_registration_gate_mode *this)
+{
+    this->registration_gate_mode = (bcmolt_mpcp_gate_mode) 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_registration_gate_mode_pack(const bcmolt_epon_registration_gate_mode *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_mpcp_gate_mode_pack(this->registration_gate_mode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->registration_gate_mode)
+    {
+        case BCMOLT_MPCP_GATE_MODE_TEKNOVUS:
+            {
+                if (!bcmolt_buf_write_u16(buf, this->u.teknovus.reg_ack_timeout_ms))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_MPCP_GATE_MODE_CUSTOM:
+            {
+                if (!bcmolt_gate_parameters_list_u32_pack(&this->u.custom.gates, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_registration_gate_mode_get_packed_length(const bcmolt_epon_registration_gate_mode *this)
+{
+    uint32_t count = 1;
+    switch (this->registration_gate_mode)
+    {
+        case BCMOLT_MPCP_GATE_MODE_TEKNOVUS:
+            {
+                count += 2;
+            }
+            break;
+        case BCMOLT_MPCP_GATE_MODE_CUSTOM:
+            {
+                count += bcmolt_gate_parameters_list_u32_get_packed_length(&this->u.custom.gates);
+            }
+            break;
+        default:
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_registration_gate_mode_unpack(bcmolt_epon_registration_gate_mode *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_mpcp_gate_mode_unpack(&this->registration_gate_mode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->registration_gate_mode)
+    {
+        case BCMOLT_MPCP_GATE_MODE_TEKNOVUS:
+            {
+                if (!bcmolt_buf_read_u16(buf, &this->u.teknovus.reg_ack_timeout_ms))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_MPCP_GATE_MODE_CUSTOM:
+            {
+                if (!bcmolt_gate_parameters_list_u32_unpack(&this->u.custom.gates, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_registration_gate_mode_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_mpcp_gate_mode registration_gate_mode;
+    if (!bcmolt_mpcp_gate_mode_unpack(&registration_gate_mode, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (registration_gate_mode)
+    {
+        case BCMOLT_MPCP_GATE_MODE_TEKNOVUS:
+            {
+                if (!bcmolt_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_MPCP_GATE_MODE_CUSTOM:
+            {
+                if (!bcmolt_gate_parameters_list_u32_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_registration_gate_mode_bounds_check(const bcmolt_epon_registration_gate_mode *this)
+{
+    switch (this->registration_gate_mode)
+    {
+        case BCMOLT_MPCP_GATE_MODE_TEKNOVUS:
+            {
+                if (this->u.teknovus.reg_ack_timeout_ms < 50)
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.teknovus.reg_ack_timeout_ms > 200)
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_MPCP_GATE_MODE_CUSTOM:
+            {
+                if (!bcmolt_gate_parameters_list_u32_bounds_check(&this->u.custom.gates))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_logical_link_options_set_default(bcmolt_epon_logical_link_options *this)
+{
+    this->registration_gate_mode.registration_gate_mode = BCMOLT_MPCP_GATE_MODE_TEKNOVUS;
+    this->registration_gate_mode.u.teknovus.reg_ack_timeout_ms = 100;
+    this->reporting_mode = BCMOLT_EPON_DBA_REPORTING_MODE_SIEPON_A;
+    this->max_links = 512;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_logical_link_options_pack(const bcmolt_epon_logical_link_options *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_epon_registration_gate_mode_pack(&this->registration_gate_mode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_dba_reporting_mode_pack(this->reporting_mode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u16(buf, this->max_links))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_logical_link_options_get_packed_length(const bcmolt_epon_logical_link_options *this)
+{
+    return 3 + bcmolt_epon_registration_gate_mode_get_packed_length(&this->registration_gate_mode);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_logical_link_options_unpack(bcmolt_epon_logical_link_options *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_registration_gate_mode_unpack(&this->registration_gate_mode, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_dba_reporting_mode_unpack(&this->reporting_mode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u16(buf, &this->max_links))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_logical_link_options_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    if (!bcmolt_epon_registration_gate_mode_scan(packed, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_skip(packed, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_logical_link_options_bounds_check(const bcmolt_epon_logical_link_options *this)
+{
+    if (!bcmolt_epon_registration_gate_mode_bounds_check(&this->registration_gate_mode))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->reporting_mode)
+    {
+        case BCMOLT_EPON_DBA_REPORTING_MODE_SIEPON_A:
+            break;
+        case BCMOLT_EPON_DBA_REPORTING_MODE_SIEPON_B:
+            break;
+        case BCMOLT_EPON_DBA_REPORTING_MODE_SIEPON_C:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    if (this->max_links > 2044)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_ni_alarm_state_set_default(bcmolt_epon_ni_alarm_state *this)
+{
+    this->no_reports = BCMOLT_STATUS_OFF;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_alarm_state_pack(const bcmolt_epon_ni_alarm_state *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_status_pack(this->no_reports, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_alarm_state_unpack(bcmolt_epon_ni_alarm_state *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_status_unpack(&this->no_reports, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_alarm_state_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 1);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_alarm_state_bounds_check(const bcmolt_epon_ni_alarm_state *this)
+{
+    switch (this->no_reports)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_ni_encryption_cfg_set_default(bcmolt_epon_ni_encryption_cfg *this)
+{
+    this->downstream_encryption_mode = BCMOLT_EPON_ENCRYPTION_MODE_NO_ENCRYPTION;
+    this->upstream_encryption_mode = BCMOLT_EPON_ENCRYPTION_MODE_NO_ENCRYPTION;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_encryption_cfg_pack(const bcmolt_epon_ni_encryption_cfg *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_epon_encryption_mode_pack(this->downstream_encryption_mode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_encryption_mode_pack(this->upstream_encryption_mode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_encryption_cfg_unpack(bcmolt_epon_ni_encryption_cfg *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_encryption_mode_unpack(&this->downstream_encryption_mode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_encryption_mode_unpack(&this->upstream_encryption_mode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_encryption_cfg_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 4);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_encryption_cfg_bounds_check(const bcmolt_epon_ni_encryption_cfg *this)
+{
+    switch (this->downstream_encryption_mode)
+    {
+        case BCMOLT_EPON_ENCRYPTION_MODE_NO_ENCRYPTION:
+            break;
+        case BCMOLT_EPON_ENCRYPTION_MODE_EPON_TRIPLE_CHURNING:
+            break;
+        case BCMOLT_EPON_ENCRYPTION_MODE_EPON_ZERO_OVERHEAD_AES:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->upstream_encryption_mode)
+    {
+        case BCMOLT_EPON_ENCRYPTION_MODE_NO_ENCRYPTION:
+            break;
+        case BCMOLT_EPON_ENCRYPTION_MODE_EPON_TRIPLE_CHURNING:
+            break;
+        case BCMOLT_EPON_ENCRYPTION_MODE_EPON_ZERO_OVERHEAD_AES:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_onu_upgrade_params_set_default(bcmolt_epon_onu_upgrade_params *this)
+{
+    this->oam_extension_type = (bcmolt_epon_oam_extension_type) 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_upgrade_params_pack(const bcmolt_epon_onu_upgrade_params *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_epon_oam_extension_type_pack(this->oam_extension_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->oam_extension_type)
+    {
+        case BCMOLT_EPON_OAM_EXTENSION_TYPE_RESERVED:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_EXTENSION_TYPE_BROADCOM:
+            {
+                if (!bcmolt_buf_write_u32(buf, this->u.broadcom.response_timeout_ms))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_EXTENSION_TYPE_CTC:
+            {
+                if (!bcmolt_buf_write_u32(buf, this->u.ctc.response_timeout_ms))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_EXTENSION_TYPE_DASAN:
+            {
+                if (!bcmolt_buf_write_u32(buf, this->u.dasan.response_timeout_ms))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_EXTENSION_TYPE_KT:
+            {
+                if (!bcmolt_buf_write_u32(buf, this->u.kt.response_timeout_ms))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_EXTENSION_TYPE_DPOE:
+            {
+                if (!bcmolt_buf_write_u32(buf, this->u.dpoe.response_timeout_ms))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_buf_write_u16(buf, this->u.dpoe.block_size))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_buf_write_u32(buf, this->u.dpoe.final_ack_response_timeout))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_onu_upgrade_params_get_packed_length(const bcmolt_epon_onu_upgrade_params *this)
+{
+    uint32_t count = 1;
+    switch (this->oam_extension_type)
+    {
+        case BCMOLT_EPON_OAM_EXTENSION_TYPE_RESERVED:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_EXTENSION_TYPE_BROADCOM:
+            {
+                count += 4;
+            }
+            break;
+        case BCMOLT_EPON_OAM_EXTENSION_TYPE_CTC:
+            {
+                count += 4;
+            }
+            break;
+        case BCMOLT_EPON_OAM_EXTENSION_TYPE_DASAN:
+            {
+                count += 4;
+            }
+            break;
+        case BCMOLT_EPON_OAM_EXTENSION_TYPE_KT:
+            {
+                count += 4;
+            }
+            break;
+        case BCMOLT_EPON_OAM_EXTENSION_TYPE_DPOE:
+            {
+                count += 10;
+            }
+            break;
+        default:
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_upgrade_params_unpack(bcmolt_epon_onu_upgrade_params *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_extension_type_unpack(&this->oam_extension_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->oam_extension_type)
+    {
+        case BCMOLT_EPON_OAM_EXTENSION_TYPE_RESERVED:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_EXTENSION_TYPE_BROADCOM:
+            {
+                if (!bcmolt_buf_read_u32(buf, &this->u.broadcom.response_timeout_ms))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_EXTENSION_TYPE_CTC:
+            {
+                if (!bcmolt_buf_read_u32(buf, &this->u.ctc.response_timeout_ms))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_EXTENSION_TYPE_DASAN:
+            {
+                if (!bcmolt_buf_read_u32(buf, &this->u.dasan.response_timeout_ms))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_EXTENSION_TYPE_KT:
+            {
+                if (!bcmolt_buf_read_u32(buf, &this->u.kt.response_timeout_ms))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_EXTENSION_TYPE_DPOE:
+            {
+                if (!bcmolt_buf_read_u32(buf, &this->u.dpoe.response_timeout_ms))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_buf_read_u16(buf, &this->u.dpoe.block_size))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_buf_read_u32(buf, &this->u.dpoe.final_ack_response_timeout))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_upgrade_params_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_extension_type oam_extension_type;
+    if (!bcmolt_epon_oam_extension_type_unpack(&oam_extension_type, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (oam_extension_type)
+    {
+        case BCMOLT_EPON_OAM_EXTENSION_TYPE_RESERVED:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_EXTENSION_TYPE_BROADCOM:
+            {
+                if (!bcmolt_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_EXTENSION_TYPE_CTC:
+            {
+                if (!bcmolt_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_EXTENSION_TYPE_DASAN:
+            {
+                if (!bcmolt_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_EXTENSION_TYPE_KT:
+            {
+                if (!bcmolt_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_EXTENSION_TYPE_DPOE:
+            {
+                if (!bcmolt_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_upgrade_params_bounds_check(const bcmolt_epon_onu_upgrade_params *this)
+{
+    switch (this->oam_extension_type)
+    {
+        case BCMOLT_EPON_OAM_EXTENSION_TYPE_RESERVED:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_EXTENSION_TYPE_BROADCOM:
+            {
+                if (this->u.broadcom.response_timeout_ms < 50)
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_EXTENSION_TYPE_CTC:
+            {
+                if (this->u.ctc.response_timeout_ms < 100)
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_EXTENSION_TYPE_DASAN:
+            {
+                if (this->u.dasan.response_timeout_ms < 50)
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_EXTENSION_TYPE_KT:
+            {
+                if (this->u.kt.response_timeout_ms < 50)
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_EXTENSION_TYPE_DPOE:
+            {
+                if (this->u.dpoe.response_timeout_ms < 1000)
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.dpoe.block_size < 1)
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.dpoe.final_ack_response_timeout < 15)
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_onu_upgrade_status_set_default(bcmolt_epon_onu_upgrade_status *this)
+{
+    bcmos_mac_address_init(&this->onu_id);
+    this->error_code = BCMOLT_EPON_ONU_UPGRADE_RETURN_CODE_SUCCESS;
+    this->onu_return_code = BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_OK;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_upgrade_status_pack(const bcmolt_epon_onu_upgrade_status *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_mac_address(buf, this->onu_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_onu_upgrade_return_code_pack(this->error_code, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_onu_upgrade_onu_response_code_pack(this->onu_return_code, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_upgrade_status_unpack(bcmolt_epon_onu_upgrade_status *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_mac_address(buf, &this->onu_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_onu_upgrade_return_code_unpack(&this->error_code, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_onu_upgrade_onu_response_code_unpack(&this->onu_return_code, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_upgrade_status_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 8);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_upgrade_status_bounds_check(const bcmolt_epon_onu_upgrade_status *this)
+{
+    switch (this->error_code)
+    {
+        case BCMOLT_EPON_ONU_UPGRADE_RETURN_CODE_SUCCESS:
+            break;
+        case BCMOLT_EPON_ONU_UPGRADE_RETURN_CODE_ONU_RESPONSE_TIMEOUT:
+            break;
+        case BCMOLT_EPON_ONU_UPGRADE_RETURN_CODE_ONU_ERROR_RESPONSE:
+            break;
+        case BCMOLT_EPON_ONU_UPGRADE_RETURN_CODE_SYNC_ERROR:
+            break;
+        case BCMOLT_EPON_ONU_UPGRADE_RETURN_CODE_COMMIT_FAILED:
+            break;
+        case BCMOLT_EPON_ONU_UPGRADE_RETURN_CODE_INTERNAL:
+            break;
+        case BCMOLT_EPON_ONU_UPGRADE_RETURN_CODE_PARSE_ERROR:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->onu_return_code)
+    {
+        case BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_OK:
+            break;
+        case BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_UNDEFINED:
+            break;
+        case BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_NOT_FOUND:
+            break;
+        case BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_NO_ACCESS:
+            break;
+        case BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_FULL:
+            break;
+        case BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_ILLEGAL_OPERATION:
+            break;
+        case BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_UNKNOWN_ID:
+            break;
+        case BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_BAD_BLOCK:
+            break;
+        case BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_TIMEOUT:
+            break;
+        case BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_BUSY:
+            break;
+        case BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_INCOMPATIBLE_FILE:
+            break;
+        case BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_CORRUPTED_FILE:
+            break;
+        case BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_ERROR_NOT_DEFINED:
+            break;
+        case BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_ERROR_ALLOC_EXCEEDED:
+            break;
+        case BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_ERROR_ILLEGAL_OP:
+            break;
+        case BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_ERROR_FILE_EXISTS:
+            break;
+        case BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_END_WRITING_NVS:
+            break;
+        case BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_END_CRC_ERROR:
+            break;
+        case BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_END_PARAM_ERROR:
+            break;
+        case BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_END_CMD_UNSUPPORTED:
+            break;
+        case BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_LAST:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_onu_upgrade_status_list_u32_set_default(bcmolt_epon_onu_upgrade_status_list_u32 *this)
+{
+    this->len = 0;
+    this->val = NULL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_upgrade_status_list_u32_pack(const bcmolt_epon_onu_upgrade_status_list_u32 *this, bcmolt_buf *buf)
+{
+    uint32_t i0;
+    if (!bcmolt_buf_write_u32(buf, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_epon_onu_upgrade_status_list_u32\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_epon_onu_upgrade_status_pack(&this->val[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_onu_upgrade_status_list_u32_get_packed_length(const bcmolt_epon_onu_upgrade_status_list_u32 *this)
+{
+    return 4 + (8 * this->len);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_upgrade_status_list_u32_unpack(bcmolt_epon_onu_upgrade_status_list_u32 *this, bcmolt_buf *buf, void **extra_mem)
+{
+    uint32_t i0;
+    if (!bcmolt_buf_read_u32(buf, &this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_epon_onu_upgrade_status_list_u32\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->val = (bcmolt_epon_onu_upgrade_status *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->len * sizeof(bcmolt_epon_onu_upgrade_status));
+        }
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_epon_onu_upgrade_status_unpack(&this->val[i0], buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_upgrade_status_list_u32_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    uint32_t len;
+    if (!bcmolt_buf_read_u32(packed, &len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_onu_upgrade_status) * len);
+    if (!bcmolt_buf_skip(packed, len * 8))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_upgrade_status_list_u32_bounds_check(const bcmolt_epon_onu_upgrade_status_list_u32 *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_protection_switching_configuration_set_default(bcmolt_epon_protection_switching_configuration *this)
+{
+    this->protection_type = BCMOLT_EPON_PROTECTION_SWITCHING_TYPE_NO_PROTECTION_SWTICHING;
+    this->protection_switching_options = (bcmolt_protection_switching_detection_options) 0;
+    this->rerange_options = BCMOLT_EPON_PROTECTION_SWITCHING_RERANGING_OPTIONS_RERANGE_NONE;
+    this->rerange_attempts = 0;
+    this->rerange_interval = 0;
+    this->sync_gate_duration = 0;
+    this->gpio_input = BCMOLT_GPIO_PIN_UNCONFIGURED;
+    this->gpio_input_polarity = BCMOLT_GPIO_POLARITY_ACTIVE_HIGH;
+    this->gpio_output = BCMOLT_GPIO_PIN_UNCONFIGURED;
+    this->gpio_output_polarity = BCMOLT_GPIO_POLARITY_ACTIVE_HIGH;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_protection_switching_configuration_pack(const bcmolt_epon_protection_switching_configuration *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_epon_protection_switching_type_pack(this->protection_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_protection_switching_detection_options_pack(this->protection_switching_options, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_protection_switching_reranging_options_pack(this->rerange_options, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->rerange_attempts))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u16(buf, this->rerange_interval))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u16(buf, this->sync_gate_duration))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_gpio_pin_pack(this->gpio_input, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_gpio_polarity_pack(this->gpio_input_polarity, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_gpio_pin_pack(this->gpio_output, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_gpio_polarity_pack(this->gpio_output_polarity, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_protection_switching_configuration_unpack(bcmolt_epon_protection_switching_configuration *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_protection_switching_type_unpack(&this->protection_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_protection_switching_detection_options_unpack(&this->protection_switching_options, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_protection_switching_reranging_options_unpack(&this->rerange_options, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->rerange_attempts))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u16(buf, &this->rerange_interval))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u16(buf, &this->sync_gate_duration))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_gpio_pin_unpack(&this->gpio_input, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_gpio_polarity_unpack(&this->gpio_input_polarity, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_gpio_pin_unpack(&this->gpio_output, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_gpio_polarity_unpack(&this->gpio_output_polarity, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_protection_switching_configuration_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 12);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_protection_switching_configuration_bounds_check(const bcmolt_epon_protection_switching_configuration *this)
+{
+    switch (this->protection_type)
+    {
+        case BCMOLT_EPON_PROTECTION_SWITCHING_TYPE_NO_PROTECTION_SWTICHING:
+            break;
+        case BCMOLT_EPON_PROTECTION_SWITCHING_TYPE_LINE_CARD_PROTECTION_SWITCHING:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    if ((this->protection_switching_options & 0x00FE) != 0)
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->rerange_options)
+    {
+        case BCMOLT_EPON_PROTECTION_SWITCHING_RERANGING_OPTIONS_RERANGE_NONE:
+            break;
+        case BCMOLT_EPON_PROTECTION_SWITCHING_RERANGING_OPTIONS_RERANGE_SINGLE_LOGICAL_LINK:
+            break;
+        case BCMOLT_EPON_PROTECTION_SWITCHING_RERANGING_OPTIONS_RERANGE_ALL_LOGICAL_LINKS:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->gpio_input)
+    {
+        case BCMOLT_GPIO_PIN_PIN0:
+            break;
+        case BCMOLT_GPIO_PIN_PIN1:
+            break;
+        case BCMOLT_GPIO_PIN_PIN2:
+            break;
+        case BCMOLT_GPIO_PIN_PIN3:
+            break;
+        case BCMOLT_GPIO_PIN_PIN4:
+            break;
+        case BCMOLT_GPIO_PIN_PIN5:
+            break;
+        case BCMOLT_GPIO_PIN_PIN6:
+            break;
+        case BCMOLT_GPIO_PIN_PIN7:
+            break;
+        case BCMOLT_GPIO_PIN_PIN8:
+            break;
+        case BCMOLT_GPIO_PIN_PIN9:
+            break;
+        case BCMOLT_GPIO_PIN_PIN10:
+            break;
+        case BCMOLT_GPIO_PIN_PIN11:
+            break;
+        case BCMOLT_GPIO_PIN_PIN12:
+            break;
+        case BCMOLT_GPIO_PIN_PIN13:
+            break;
+        case BCMOLT_GPIO_PIN_PIN14:
+            break;
+        case BCMOLT_GPIO_PIN_PIN15:
+            break;
+        case BCMOLT_GPIO_PIN_PIN16:
+            break;
+        case BCMOLT_GPIO_PIN_PIN17:
+            break;
+        case BCMOLT_GPIO_PIN_PIN18:
+            break;
+        case BCMOLT_GPIO_PIN_PIN19:
+            break;
+        case BCMOLT_GPIO_PIN_PIN20:
+            break;
+        case BCMOLT_GPIO_PIN_PIN21:
+            break;
+        case BCMOLT_GPIO_PIN_PIN22:
+            break;
+        case BCMOLT_GPIO_PIN_PIN23:
+            break;
+        case BCMOLT_GPIO_PIN_PIN24:
+            break;
+        case BCMOLT_GPIO_PIN_PIN25:
+            break;
+        case BCMOLT_GPIO_PIN_PIN26:
+            break;
+        case BCMOLT_GPIO_PIN_PIN27:
+            break;
+        case BCMOLT_GPIO_PIN_PIN28:
+            break;
+        case BCMOLT_GPIO_PIN_PIN29:
+            break;
+        case BCMOLT_GPIO_PIN_PIN30:
+            break;
+        case BCMOLT_GPIO_PIN_PIN31:
+            break;
+        case BCMOLT_GPIO_PIN_PIN32:
+            break;
+        case BCMOLT_GPIO_PIN_PIN33:
+            break;
+        case BCMOLT_GPIO_PIN_PIN34:
+            break;
+        case BCMOLT_GPIO_PIN_PIN35:
+            break;
+        case BCMOLT_GPIO_PIN_PIN36:
+            break;
+        case BCMOLT_GPIO_PIN_PIN37:
+            break;
+        case BCMOLT_GPIO_PIN_PIN38:
+            break;
+        case BCMOLT_GPIO_PIN_PIN39:
+            break;
+        case BCMOLT_GPIO_PIN_PIN40:
+            break;
+        case BCMOLT_GPIO_PIN_PIN41:
+            break;
+        case BCMOLT_GPIO_PIN_PIN42:
+            break;
+        case BCMOLT_GPIO_PIN_PIN43:
+            break;
+        case BCMOLT_GPIO_PIN_PIN44:
+            break;
+        case BCMOLT_GPIO_PIN_PIN45:
+            break;
+        case BCMOLT_GPIO_PIN_PIN46:
+            break;
+        case BCMOLT_GPIO_PIN_PIN47:
+            break;
+        case BCMOLT_GPIO_PIN_PIN48:
+            break;
+        case BCMOLT_GPIO_PIN_PIN49:
+            break;
+        case BCMOLT_GPIO_PIN_PIN50:
+            break;
+        case BCMOLT_GPIO_PIN_PIN51:
+            break;
+        case BCMOLT_GPIO_PIN_PIN52:
+            break;
+        case BCMOLT_GPIO_PIN_PIN53:
+            break;
+        case BCMOLT_GPIO_PIN_PIN54:
+            break;
+        case BCMOLT_GPIO_PIN_PIN55:
+            break;
+        case BCMOLT_GPIO_PIN_PIN56:
+            break;
+        case BCMOLT_GPIO_PIN_PIN57:
+            break;
+        case BCMOLT_GPIO_PIN_PIN58:
+            break;
+        case BCMOLT_GPIO_PIN_PIN59:
+            break;
+        case BCMOLT_GPIO_PIN_PIN60:
+            break;
+        case BCMOLT_GPIO_PIN_PIN61:
+            break;
+        case BCMOLT_GPIO_PIN_PIN62:
+            break;
+        case BCMOLT_GPIO_PIN_PIN63:
+            break;
+        case BCMOLT_GPIO_PIN_PIN64:
+            break;
+        case BCMOLT_GPIO_PIN_PIN65:
+            break;
+        case BCMOLT_GPIO_PIN_PIN66:
+            break;
+        case BCMOLT_GPIO_PIN_PIN67:
+            break;
+        case BCMOLT_GPIO_PIN_PIN68:
+            break;
+        case BCMOLT_GPIO_PIN_PIN69:
+            break;
+        case BCMOLT_GPIO_PIN_PIN70:
+            break;
+        case BCMOLT_GPIO_PIN_PIN71:
+            break;
+        case BCMOLT_GPIO_PIN_PIN72:
+            break;
+        case BCMOLT_GPIO_PIN_PIN73:
+            break;
+        case BCMOLT_GPIO_PIN_PIN74:
+            break;
+        case BCMOLT_GPIO_PIN_PIN75:
+            break;
+        case BCMOLT_GPIO_PIN_PIN76:
+            break;
+        case BCMOLT_GPIO_PIN_PIN77:
+            break;
+        case BCMOLT_GPIO_PIN_PIN78:
+            break;
+        case BCMOLT_GPIO_PIN_PIN79:
+            break;
+        case BCMOLT_GPIO_PIN_PIN80:
+            break;
+        case BCMOLT_GPIO_PIN_PIN81:
+            break;
+        case BCMOLT_GPIO_PIN_PIN82:
+            break;
+        case BCMOLT_GPIO_PIN_PIN83:
+            break;
+        case BCMOLT_GPIO_PIN_PIN84:
+            break;
+        case BCMOLT_GPIO_PIN_PIN85:
+            break;
+        case BCMOLT_GPIO_PIN_PIN86:
+            break;
+        case BCMOLT_GPIO_PIN_PIN87:
+            break;
+        case BCMOLT_GPIO_PIN_PIN88:
+            break;
+        case BCMOLT_GPIO_PIN_PIN89:
+            break;
+        case BCMOLT_GPIO_PIN_PIN90:
+            break;
+        case BCMOLT_GPIO_PIN_PIN91:
+            break;
+        case BCMOLT_GPIO_PIN_PIN92:
+            break;
+        case BCMOLT_GPIO_PIN_PIN93:
+            break;
+        case BCMOLT_GPIO_PIN_PIN94:
+            break;
+        case BCMOLT_GPIO_PIN_PIN95:
+            break;
+        case BCMOLT_GPIO_PIN_PIN96:
+            break;
+        case BCMOLT_GPIO_PIN_PIN97:
+            break;
+        case BCMOLT_GPIO_PIN_PIN98:
+            break;
+        case BCMOLT_GPIO_PIN_PIN99:
+            break;
+        case BCMOLT_GPIO_PIN_PIN100:
+            break;
+        case BCMOLT_GPIO_PIN_PIN101:
+            break;
+        case BCMOLT_GPIO_PIN_PIN102:
+            break;
+        case BCMOLT_GPIO_PIN_PIN103:
+            break;
+        case BCMOLT_GPIO_PIN_PIN104:
+            break;
+        case BCMOLT_GPIO_PIN_PIN105:
+            break;
+        case BCMOLT_GPIO_PIN_PIN106:
+            break;
+        case BCMOLT_GPIO_PIN_UNCONFIGURED:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->gpio_input_polarity)
+    {
+        case BCMOLT_GPIO_POLARITY_ACTIVE_LOW:
+            break;
+        case BCMOLT_GPIO_POLARITY_ACTIVE_HIGH:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->gpio_output)
+    {
+        case BCMOLT_GPIO_PIN_PIN0:
+            break;
+        case BCMOLT_GPIO_PIN_PIN1:
+            break;
+        case BCMOLT_GPIO_PIN_PIN2:
+            break;
+        case BCMOLT_GPIO_PIN_PIN3:
+            break;
+        case BCMOLT_GPIO_PIN_PIN4:
+            break;
+        case BCMOLT_GPIO_PIN_PIN5:
+            break;
+        case BCMOLT_GPIO_PIN_PIN6:
+            break;
+        case BCMOLT_GPIO_PIN_PIN7:
+            break;
+        case BCMOLT_GPIO_PIN_PIN8:
+            break;
+        case BCMOLT_GPIO_PIN_PIN9:
+            break;
+        case BCMOLT_GPIO_PIN_PIN10:
+            break;
+        case BCMOLT_GPIO_PIN_PIN11:
+            break;
+        case BCMOLT_GPIO_PIN_PIN12:
+            break;
+        case BCMOLT_GPIO_PIN_PIN13:
+            break;
+        case BCMOLT_GPIO_PIN_PIN14:
+            break;
+        case BCMOLT_GPIO_PIN_PIN15:
+            break;
+        case BCMOLT_GPIO_PIN_PIN16:
+            break;
+        case BCMOLT_GPIO_PIN_PIN17:
+            break;
+        case BCMOLT_GPIO_PIN_PIN18:
+            break;
+        case BCMOLT_GPIO_PIN_PIN19:
+            break;
+        case BCMOLT_GPIO_PIN_PIN20:
+            break;
+        case BCMOLT_GPIO_PIN_PIN21:
+            break;
+        case BCMOLT_GPIO_PIN_PIN22:
+            break;
+        case BCMOLT_GPIO_PIN_PIN23:
+            break;
+        case BCMOLT_GPIO_PIN_PIN24:
+            break;
+        case BCMOLT_GPIO_PIN_PIN25:
+            break;
+        case BCMOLT_GPIO_PIN_PIN26:
+            break;
+        case BCMOLT_GPIO_PIN_PIN27:
+            break;
+        case BCMOLT_GPIO_PIN_PIN28:
+            break;
+        case BCMOLT_GPIO_PIN_PIN29:
+            break;
+        case BCMOLT_GPIO_PIN_PIN30:
+            break;
+        case BCMOLT_GPIO_PIN_PIN31:
+            break;
+        case BCMOLT_GPIO_PIN_PIN32:
+            break;
+        case BCMOLT_GPIO_PIN_PIN33:
+            break;
+        case BCMOLT_GPIO_PIN_PIN34:
+            break;
+        case BCMOLT_GPIO_PIN_PIN35:
+            break;
+        case BCMOLT_GPIO_PIN_PIN36:
+            break;
+        case BCMOLT_GPIO_PIN_PIN37:
+            break;
+        case BCMOLT_GPIO_PIN_PIN38:
+            break;
+        case BCMOLT_GPIO_PIN_PIN39:
+            break;
+        case BCMOLT_GPIO_PIN_PIN40:
+            break;
+        case BCMOLT_GPIO_PIN_PIN41:
+            break;
+        case BCMOLT_GPIO_PIN_PIN42:
+            break;
+        case BCMOLT_GPIO_PIN_PIN43:
+            break;
+        case BCMOLT_GPIO_PIN_PIN44:
+            break;
+        case BCMOLT_GPIO_PIN_PIN45:
+            break;
+        case BCMOLT_GPIO_PIN_PIN46:
+            break;
+        case BCMOLT_GPIO_PIN_PIN47:
+            break;
+        case BCMOLT_GPIO_PIN_PIN48:
+            break;
+        case BCMOLT_GPIO_PIN_PIN49:
+            break;
+        case BCMOLT_GPIO_PIN_PIN50:
+            break;
+        case BCMOLT_GPIO_PIN_PIN51:
+            break;
+        case BCMOLT_GPIO_PIN_PIN52:
+            break;
+        case BCMOLT_GPIO_PIN_PIN53:
+            break;
+        case BCMOLT_GPIO_PIN_PIN54:
+            break;
+        case BCMOLT_GPIO_PIN_PIN55:
+            break;
+        case BCMOLT_GPIO_PIN_PIN56:
+            break;
+        case BCMOLT_GPIO_PIN_PIN57:
+            break;
+        case BCMOLT_GPIO_PIN_PIN58:
+            break;
+        case BCMOLT_GPIO_PIN_PIN59:
+            break;
+        case BCMOLT_GPIO_PIN_PIN60:
+            break;
+        case BCMOLT_GPIO_PIN_PIN61:
+            break;
+        case BCMOLT_GPIO_PIN_PIN62:
+            break;
+        case BCMOLT_GPIO_PIN_PIN63:
+            break;
+        case BCMOLT_GPIO_PIN_PIN64:
+            break;
+        case BCMOLT_GPIO_PIN_PIN65:
+            break;
+        case BCMOLT_GPIO_PIN_PIN66:
+            break;
+        case BCMOLT_GPIO_PIN_PIN67:
+            break;
+        case BCMOLT_GPIO_PIN_PIN68:
+            break;
+        case BCMOLT_GPIO_PIN_PIN69:
+            break;
+        case BCMOLT_GPIO_PIN_PIN70:
+            break;
+        case BCMOLT_GPIO_PIN_PIN71:
+            break;
+        case BCMOLT_GPIO_PIN_PIN72:
+            break;
+        case BCMOLT_GPIO_PIN_PIN73:
+            break;
+        case BCMOLT_GPIO_PIN_PIN74:
+            break;
+        case BCMOLT_GPIO_PIN_PIN75:
+            break;
+        case BCMOLT_GPIO_PIN_PIN76:
+            break;
+        case BCMOLT_GPIO_PIN_PIN77:
+            break;
+        case BCMOLT_GPIO_PIN_PIN78:
+            break;
+        case BCMOLT_GPIO_PIN_PIN79:
+            break;
+        case BCMOLT_GPIO_PIN_PIN80:
+            break;
+        case BCMOLT_GPIO_PIN_PIN81:
+            break;
+        case BCMOLT_GPIO_PIN_PIN82:
+            break;
+        case BCMOLT_GPIO_PIN_PIN83:
+            break;
+        case BCMOLT_GPIO_PIN_PIN84:
+            break;
+        case BCMOLT_GPIO_PIN_PIN85:
+            break;
+        case BCMOLT_GPIO_PIN_PIN86:
+            break;
+        case BCMOLT_GPIO_PIN_PIN87:
+            break;
+        case BCMOLT_GPIO_PIN_PIN88:
+            break;
+        case BCMOLT_GPIO_PIN_PIN89:
+            break;
+        case BCMOLT_GPIO_PIN_PIN90:
+            break;
+        case BCMOLT_GPIO_PIN_PIN91:
+            break;
+        case BCMOLT_GPIO_PIN_PIN92:
+            break;
+        case BCMOLT_GPIO_PIN_PIN93:
+            break;
+        case BCMOLT_GPIO_PIN_PIN94:
+            break;
+        case BCMOLT_GPIO_PIN_PIN95:
+            break;
+        case BCMOLT_GPIO_PIN_PIN96:
+            break;
+        case BCMOLT_GPIO_PIN_PIN97:
+            break;
+        case BCMOLT_GPIO_PIN_PIN98:
+            break;
+        case BCMOLT_GPIO_PIN_PIN99:
+            break;
+        case BCMOLT_GPIO_PIN_PIN100:
+            break;
+        case BCMOLT_GPIO_PIN_PIN101:
+            break;
+        case BCMOLT_GPIO_PIN_PIN102:
+            break;
+        case BCMOLT_GPIO_PIN_PIN103:
+            break;
+        case BCMOLT_GPIO_PIN_PIN104:
+            break;
+        case BCMOLT_GPIO_PIN_PIN105:
+            break;
+        case BCMOLT_GPIO_PIN_PIN106:
+            break;
+        case BCMOLT_GPIO_PIN_UNCONFIGURED:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->gpio_output_polarity)
+    {
+        case BCMOLT_GPIO_POLARITY_ACTIVE_LOW:
+            break;
+        case BCMOLT_GPIO_POLARITY_ACTIVE_HIGH:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_u8_list_u16_set_default(bcmolt_u8_list_u16 *this)
+{
+    this->len = 0;
+    this->val = NULL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_u8_list_u16_pack(const bcmolt_u8_list_u16 *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u16(buf, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_u8_list_u16\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write(buf, this->val, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_u8_list_u16_get_packed_length(const bcmolt_u8_list_u16 *this)
+{
+    return 2 + this->len;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_u8_list_u16_unpack(bcmolt_u8_list_u16 *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u16(buf, &this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_u8_list_u16\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->val = (uint8_t *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->len * sizeof(uint8_t));
+        }
+    }
+
+    if (!bcmolt_buf_read(buf, this->val, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_u8_list_u16_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    uint16_t len;
+    if (!bcmolt_buf_read_u16(packed, &len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * len);
+    if (!bcmolt_buf_skip(packed, len * 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_u8_list_u16_bounds_check(const bcmolt_u8_list_u16 *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_ethernet_frame_masked_set_default(bcmolt_ethernet_frame_masked *this)
+{
+    this->frame_octets.len = 0;
+    this->frame_octets.val = NULL;
+    this->mask_octets.len = 0;
+    this->mask_octets.val = NULL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ethernet_frame_masked_pack(const bcmolt_ethernet_frame_masked *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_u8_list_u16_pack(&this->frame_octets, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_u8_list_u16_pack(&this->mask_octets, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_ethernet_frame_masked_get_packed_length(const bcmolt_ethernet_frame_masked *this)
+{
+    return bcmolt_u8_list_u16_get_packed_length(&this->frame_octets) + bcmolt_u8_list_u16_get_packed_length(&this->mask_octets);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ethernet_frame_masked_unpack(bcmolt_ethernet_frame_masked *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_u8_list_u16_unpack(&this->frame_octets, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_u8_list_u16_unpack(&this->mask_octets, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ethernet_frame_masked_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    if (!bcmolt_u8_list_u16_scan(packed, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_u8_list_u16_scan(packed, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ethernet_frame_masked_bounds_check(const bcmolt_ethernet_frame_masked *this)
+{
+    if (!bcmolt_u8_list_u16_bounds_check(&this->frame_octets))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_u8_list_u16_bounds_check(&this->mask_octets))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_ethernet_frame_unmasked_set_default(bcmolt_ethernet_frame_unmasked *this)
+{
+    this->frame_octets.len = 0;
+    this->frame_octets.val = NULL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ethernet_frame_unmasked_pack(const bcmolt_ethernet_frame_unmasked *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_u8_list_u16_pack(&this->frame_octets, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_ethernet_frame_unmasked_get_packed_length(const bcmolt_ethernet_frame_unmasked *this)
+{
+    return bcmolt_u8_list_u16_get_packed_length(&this->frame_octets);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ethernet_frame_unmasked_unpack(bcmolt_ethernet_frame_unmasked *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_u8_list_u16_unpack(&this->frame_octets, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ethernet_frame_unmasked_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    if (!bcmolt_u8_list_u16_scan(packed, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ethernet_frame_unmasked_bounds_check(const bcmolt_ethernet_frame_unmasked *this)
+{
+    if (!bcmolt_u8_list_u16_bounds_check(&this->frame_octets))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_extended_guard_time_set_default(bcmolt_extended_guard_time *this)
+{
+    this->additional_preburst_guard_time = 0;
+    this->additional_postburst_guard_time = 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_extended_guard_time_pack(const bcmolt_extended_guard_time *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u32(buf, this->additional_preburst_guard_time))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->additional_postburst_guard_time))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_extended_guard_time_unpack(bcmolt_extended_guard_time *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u32(buf, &this->additional_preburst_guard_time))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->additional_postburst_guard_time))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_extended_guard_time_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 8);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_extended_guard_time_bounds_check(const bcmolt_extended_guard_time *this)
+{
+    if (this->additional_preburst_guard_time > 500)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->additional_postburst_guard_time > 500)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_firmware_sw_version_set_default(bcmolt_firmware_sw_version *this)
+{
+    this->major = 0;
+    this->minor = 0;
+    this->revision = 0;
+    this->model = 0;
+    memset(this->build_time, 0, 32);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_firmware_sw_version_pack(const bcmolt_firmware_sw_version *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u8(buf, this->major))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->minor))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->revision))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->model))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write(buf, this->build_time, 32))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_firmware_sw_version_unpack(bcmolt_firmware_sw_version *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u8(buf, &this->major))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->minor))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->revision))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->model))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read(buf, this->build_time, 32))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_firmware_sw_version_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 39);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_firmware_sw_version_bounds_check(const bcmolt_firmware_sw_version *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gem_port_configuration_set_default(bcmolt_gem_port_configuration *this)
+{
+    this->direction = BCMOLT_GEM_PORT_DIRECTION_DOWNSTREAM;
+    this->type = BCMOLT_GEM_PORT_TYPE_UNICAST;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gem_port_configuration_pack(const bcmolt_gem_port_configuration *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_gem_port_direction_pack(this->direction, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_gem_port_type_pack(this->type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gem_port_configuration_unpack(bcmolt_gem_port_configuration *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_gem_port_direction_unpack(&this->direction, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_gem_port_type_unpack(&this->type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gem_port_configuration_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 2);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gem_port_configuration_bounds_check(const bcmolt_gem_port_configuration *this)
+{
+    switch (this->direction)
+    {
+        case BCMOLT_GEM_PORT_DIRECTION_DOWNSTREAM:
+            break;
+        case BCMOLT_GEM_PORT_DIRECTION_UPSTREAM:
+            break;
+        case BCMOLT_GEM_PORT_DIRECTION_BIDIRECTIONAL:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->type)
+    {
+        case BCMOLT_GEM_PORT_TYPE_UNICAST:
+            break;
+        case BCMOLT_GEM_PORT_TYPE_MULTICAST:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_alloc_with_state_set_default(bcmolt_gpon_alloc_with_state *this)
+{
+    this->alloc_id = (bcmolt_gpon_alloc_id) 0;
+    this->state = BCMOLT_ALLOC_STATE_NOT_CONFIGURED;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_with_state_pack(const bcmolt_gpon_alloc_with_state *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u16(buf, (uint16_t) this->alloc_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_alloc_state_pack(this->state, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_with_state_unpack(bcmolt_gpon_alloc_with_state *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->alloc_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_alloc_state_unpack(&this->state, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_with_state_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 3);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_with_state_bounds_check(const bcmolt_gpon_alloc_with_state *this)
+{
+    if (this->alloc_id > (bcmolt_gpon_alloc_id) 4095)
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->state)
+    {
+        case BCMOLT_ALLOC_STATE_NOT_CONFIGURED:
+            break;
+        case BCMOLT_ALLOC_STATE_INACTIVE:
+            break;
+        case BCMOLT_ALLOC_STATE_PROCESSING:
+            break;
+        case BCMOLT_ALLOC_STATE_ACTIVE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_alloc_with_state_list_u16_max_32_set_default(bcmolt_gpon_alloc_with_state_list_u16_max_32 *this)
+{
+    this->len = 0;
+    this->val = NULL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_with_state_list_u16_max_32_pack(const bcmolt_gpon_alloc_with_state_list_u16_max_32 *this, bcmolt_buf *buf)
+{
+    uint16_t i0;
+    if (!bcmolt_buf_write_u16(buf, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_gpon_alloc_with_state_list_u16_max_32\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    if (this->len > 32)
+    {
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_gpon_alloc_with_state_pack(&this->val[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_alloc_with_state_list_u16_max_32_get_packed_length(const bcmolt_gpon_alloc_with_state_list_u16_max_32 *this)
+{
+    return 2 + (3 * this->len);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_with_state_list_u16_max_32_unpack(bcmolt_gpon_alloc_with_state_list_u16_max_32 *this, bcmolt_buf *buf, void **extra_mem)
+{
+    uint16_t i0;
+    if (!bcmolt_buf_read_u16(buf, &this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_gpon_alloc_with_state_list_u16_max_32\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->val = (bcmolt_gpon_alloc_with_state *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->len * sizeof(bcmolt_gpon_alloc_with_state));
+        }
+    }
+
+    if (this->len > 32)
+    {
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_gpon_alloc_with_state_unpack(&this->val[i0], buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_with_state_list_u16_max_32_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    uint16_t len;
+    if (!bcmolt_buf_read_u16(packed, &len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_gpon_alloc_with_state) * len);
+    if (!bcmolt_buf_skip(packed, len * 3))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_with_state_list_u16_max_32_bounds_check(const bcmolt_gpon_alloc_with_state_list_u16_max_32 *this)
+{
+    if (this->len > 32)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_debug_flow_config_set_default(bcmolt_gpon_debug_flow_config *this)
+{
+    this->untagged_flow = BCMOLT_CONTROL_STATE_DISABLE;
+    this->untagged_vid = (bcmolt_vlan_id) 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_debug_flow_config_pack(const bcmolt_gpon_debug_flow_config *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_control_state_pack(this->untagged_flow, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u16(buf, (uint16_t) this->untagged_vid))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_debug_flow_config_unpack(bcmolt_gpon_debug_flow_config *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_control_state_unpack(&this->untagged_flow, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->untagged_vid))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_debug_flow_config_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 3);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_debug_flow_config_bounds_check(const bcmolt_gpon_debug_flow_config *this)
+{
+    switch (this->untagged_flow)
+    {
+        case BCMOLT_CONTROL_STATE_DISABLE:
+            break;
+        case BCMOLT_CONTROL_STATE_ENABLE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    if (this->untagged_vid > (bcmolt_vlan_id) 4095)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_gem_id_list_u8_max_16_set_default(bcmolt_gpon_gem_id_list_u8_max_16 *this)
+{
+    this->len = 0;
+    this->val = NULL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_id_list_u8_max_16_pack(const bcmolt_gpon_gem_id_list_u8_max_16 *this, bcmolt_buf *buf)
+{
+    uint8_t i0;
+    if (!bcmolt_buf_write_u8(buf, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_gpon_gem_id_list_u8_max_16\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    if (this->len > 16)
+    {
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->val[i0]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_gem_id_list_u8_max_16_get_packed_length(const bcmolt_gpon_gem_id_list_u8_max_16 *this)
+{
+    return 1 + (2 * this->len);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_id_list_u8_max_16_unpack(bcmolt_gpon_gem_id_list_u8_max_16 *this, bcmolt_buf *buf, void **extra_mem)
+{
+    uint8_t i0;
+    if (!bcmolt_buf_read_u8(buf, &this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_gpon_gem_id_list_u8_max_16\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->val = (bcmolt_gpon_gem_id *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->len * sizeof(bcmolt_gpon_gem_id));
+        }
+    }
+
+    if (this->len > 16)
+    {
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->val[i0]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_id_list_u8_max_16_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    uint8_t len;
+    if (!bcmolt_buf_read_u8(packed, &len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_gpon_gem_id) * len);
+    if (!bcmolt_buf_skip(packed, len * 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_id_list_u8_max_16_bounds_check(const bcmolt_gpon_gem_id_list_u8_max_16 *this)
+{
+    if (this->len > 16)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_gem_port_with_state_set_default(bcmolt_gpon_gem_port_with_state *this)
+{
+    this->gem_id = (bcmolt_gpon_gem_id) 0;
+    this->state = BCMOLT_GPON_GEM_PORT_STATE_NOT_CONFIGURED;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_with_state_pack(const bcmolt_gpon_gem_port_with_state *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u16(buf, (uint16_t) this->gem_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_gpon_gem_port_state_pack(this->state, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_with_state_unpack(bcmolt_gpon_gem_port_with_state *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->gem_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_gpon_gem_port_state_unpack(&this->state, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_with_state_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 3);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_with_state_bounds_check(const bcmolt_gpon_gem_port_with_state *this)
+{
+    if (this->gem_id > (bcmolt_gpon_gem_id) 4095)
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->state)
+    {
+        case BCMOLT_GPON_GEM_PORT_STATE_NOT_CONFIGURED:
+            break;
+        case BCMOLT_GPON_GEM_PORT_STATE_INACTIVE:
+            break;
+        case BCMOLT_GPON_GEM_PORT_STATE_PROCESSING:
+            break;
+        case BCMOLT_GPON_GEM_PORT_STATE_ACTIVE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_gem_port_with_state_list_u16_max_128_set_default(bcmolt_gpon_gem_port_with_state_list_u16_max_128 *this)
+{
+    this->len = 0;
+    this->val = NULL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_with_state_list_u16_max_128_pack(const bcmolt_gpon_gem_port_with_state_list_u16_max_128 *this, bcmolt_buf *buf)
+{
+    uint16_t i0;
+    if (!bcmolt_buf_write_u16(buf, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_gpon_gem_port_with_state_list_u16_max_128\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    if (this->len > 128)
+    {
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_gpon_gem_port_with_state_pack(&this->val[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_gem_port_with_state_list_u16_max_128_get_packed_length(const bcmolt_gpon_gem_port_with_state_list_u16_max_128 *this)
+{
+    return 2 + (3 * this->len);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_with_state_list_u16_max_128_unpack(bcmolt_gpon_gem_port_with_state_list_u16_max_128 *this, bcmolt_buf *buf, void **extra_mem)
+{
+    uint16_t i0;
+    if (!bcmolt_buf_read_u16(buf, &this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_gpon_gem_port_with_state_list_u16_max_128\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->val = (bcmolt_gpon_gem_port_with_state *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->len * sizeof(bcmolt_gpon_gem_port_with_state));
+        }
+    }
+
+    if (this->len > 128)
+    {
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_gpon_gem_port_with_state_unpack(&this->val[i0], buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_with_state_list_u16_max_128_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    uint16_t len;
+    if (!bcmolt_buf_read_u16(packed, &len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_gpon_gem_port_with_state) * len);
+    if (!bcmolt_buf_skip(packed, len * 3))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_with_state_list_u16_max_128_bounds_check(const bcmolt_gpon_gem_port_with_state_list_u16_max_128 *this)
+{
+    if (this->len > 128)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_gem_port_with_state_list_u16_max_256_set_default(bcmolt_gpon_gem_port_with_state_list_u16_max_256 *this)
+{
+    this->len = 0;
+    this->val = NULL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_with_state_list_u16_max_256_pack(const bcmolt_gpon_gem_port_with_state_list_u16_max_256 *this, bcmolt_buf *buf)
+{
+    uint16_t i0;
+    if (!bcmolt_buf_write_u16(buf, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_gpon_gem_port_with_state_list_u16_max_256\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    if (this->len > 256)
+    {
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_gpon_gem_port_with_state_pack(&this->val[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_gem_port_with_state_list_u16_max_256_get_packed_length(const bcmolt_gpon_gem_port_with_state_list_u16_max_256 *this)
+{
+    return 2 + (3 * this->len);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_with_state_list_u16_max_256_unpack(bcmolt_gpon_gem_port_with_state_list_u16_max_256 *this, bcmolt_buf *buf, void **extra_mem)
+{
+    uint16_t i0;
+    if (!bcmolt_buf_read_u16(buf, &this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_gpon_gem_port_with_state_list_u16_max_256\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->val = (bcmolt_gpon_gem_port_with_state *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->len * sizeof(bcmolt_gpon_gem_port_with_state));
+        }
+    }
+
+    if (this->len > 256)
+    {
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_gpon_gem_port_with_state_unpack(&this->val[i0], buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_with_state_list_u16_max_256_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    uint16_t len;
+    if (!bcmolt_buf_read_u16(packed, &len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_gpon_gem_port_with_state) * len);
+    if (!bcmolt_buf_skip(packed, len * 3))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_with_state_list_u16_max_256_bounds_check(const bcmolt_gpon_gem_port_with_state_list_u16_max_256 *this)
+{
+    if (this->len > 256)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_iwf_debug_flow_config_set_default(bcmolt_gpon_iwf_debug_flow_config *this)
+{
+    this->learn_untagged_flow_vids = BCMOS_FALSE;
+    this->untagged_flow_shaping_ms_per_sec = 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_debug_flow_config_pack(const bcmolt_gpon_iwf_debug_flow_config *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_bool(buf, this->learn_untagged_flow_vids))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u16(buf, this->untagged_flow_shaping_ms_per_sec))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_debug_flow_config_unpack(bcmolt_gpon_iwf_debug_flow_config *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_bool(buf, &this->learn_untagged_flow_vids))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u16(buf, &this->untagged_flow_shaping_ms_per_sec))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_debug_flow_config_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 3);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_debug_flow_config_bounds_check(const bcmolt_gpon_iwf_debug_flow_config *this)
+{
+    if (this->untagged_flow_shaping_ms_per_sec > 1000)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_key_exchange_set_default(bcmolt_gpon_key_exchange *this)
+{
+    this->interval = 10000;
+    this->control = BCMOLT_CONTROL_STATE_DISABLE;
+    this->mode = BCMOLT_KEY_EXCHANGE_MODE_NORMAL;
+    this->encrypted_ports_only = BCMOLT_CONTROL_STATE_ENABLE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_key_exchange_pack(const bcmolt_gpon_key_exchange *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u32(buf, this->interval))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_control_state_pack(this->control, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_key_exchange_mode_pack(this->mode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_control_state_pack(this->encrypted_ports_only, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_key_exchange_unpack(bcmolt_gpon_key_exchange *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u32(buf, &this->interval))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_control_state_unpack(&this->control, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_key_exchange_mode_unpack(&this->mode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_control_state_unpack(&this->encrypted_ports_only, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_key_exchange_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 7);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_key_exchange_bounds_check(const bcmolt_gpon_key_exchange *this)
+{
+    if (this->interval < 1000)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->interval > 3600000UL)
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->control)
+    {
+        case BCMOLT_CONTROL_STATE_DISABLE:
+            break;
+        case BCMOLT_CONTROL_STATE_ENABLE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->mode)
+    {
+        case BCMOLT_KEY_EXCHANGE_MODE_NORMAL:
+            break;
+        case BCMOLT_KEY_EXCHANGE_MODE_ENHANCED:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->encrypted_ports_only)
+    {
+        case BCMOLT_CONTROL_STATE_DISABLE:
+            break;
+        case BCMOLT_CONTROL_STATE_ENABLE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_mac_table_scan_result_set_default(bcmolt_gpon_mac_table_scan_result *this)
+{
+    this->vlan = (bcmolt_vlan_id) 0;
+    this->flow_id = (bcmolt_flow_id) 0;
+    this->stat = BCMOS_FALSE;
+    this->gem_port_id = (bcmolt_gpon_gem_id) 0;
+    this->onu_id = (bcmolt_gpon_onu_id) 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_mac_table_scan_result_pack(const bcmolt_gpon_mac_table_scan_result *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u16(buf, (uint16_t) this->vlan))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u16(buf, (uint16_t) this->flow_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_bool(buf, this->stat))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u16(buf, (uint16_t) this->gem_port_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u16(buf, (uint16_t) this->onu_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_mac_table_scan_result_unpack(bcmolt_gpon_mac_table_scan_result *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->vlan))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->flow_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_bool(buf, &this->stat))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->gem_port_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->onu_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_mac_table_scan_result_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 9);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_mac_table_scan_result_bounds_check(const bcmolt_gpon_mac_table_scan_result *this)
+{
+    if (this->flow_id > (bcmolt_flow_id) 4095)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->gem_port_id > (bcmolt_gpon_gem_id) 4095)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->onu_id > (bcmolt_gpon_onu_id) 127)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_mac_table_scan_result_list_u16_set_default(bcmolt_gpon_mac_table_scan_result_list_u16 *this)
+{
+    this->len = 0;
+    this->val = NULL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_mac_table_scan_result_list_u16_pack(const bcmolt_gpon_mac_table_scan_result_list_u16 *this, bcmolt_buf *buf)
+{
+    uint16_t i0;
+    if (!bcmolt_buf_write_u16(buf, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_gpon_mac_table_scan_result_list_u16\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_gpon_mac_table_scan_result_pack(&this->val[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_mac_table_scan_result_list_u16_get_packed_length(const bcmolt_gpon_mac_table_scan_result_list_u16 *this)
+{
+    return 2 + (9 * this->len);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_mac_table_scan_result_list_u16_unpack(bcmolt_gpon_mac_table_scan_result_list_u16 *this, bcmolt_buf *buf, void **extra_mem)
+{
+    uint16_t i0;
+    if (!bcmolt_buf_read_u16(buf, &this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_gpon_mac_table_scan_result_list_u16\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->val = (bcmolt_gpon_mac_table_scan_result *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->len * sizeof(bcmolt_gpon_mac_table_scan_result));
+        }
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_gpon_mac_table_scan_result_unpack(&this->val[i0], buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_mac_table_scan_result_list_u16_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    uint16_t len;
+    if (!bcmolt_buf_read_u16(packed, &len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_gpon_mac_table_scan_result) * len);
+    if (!bcmolt_buf_skip(packed, len * 9))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_mac_table_scan_result_list_u16_bounds_check(const bcmolt_gpon_mac_table_scan_result_list_u16 *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_ni_debug_set_default(bcmolt_gpon_ni_debug *this)
+{
+    this->number_of_gem_ports_per_onu = 64;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_debug_pack(const bcmolt_gpon_ni_debug *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u16(buf, this->number_of_gem_ports_per_onu))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_debug_unpack(bcmolt_gpon_ni_debug *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u16(buf, &this->number_of_gem_ports_per_onu))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_debug_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 2);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_debug_bounds_check(const bcmolt_gpon_ni_debug *this)
+{
+    if (this->number_of_gem_ports_per_onu < 8)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->number_of_gem_ports_per_onu > 256)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_activation_set_default(bcmolt_gpon_onu_activation *this)
+{
+    this->key_exchange = BCMOLT_CONTROL_STATE_DISABLE;
+    this->password_authentication = BCMOLT_CONTROL_STATE_ENABLE;
+    this->fail_due_to_password_authentication_failure = BCMOLT_CONTROL_STATE_ENABLE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_activation_pack(const bcmolt_gpon_onu_activation *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_control_state_pack(this->key_exchange, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_control_state_pack(this->password_authentication, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_control_state_pack(this->fail_due_to_password_authentication_failure, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_activation_unpack(bcmolt_gpon_onu_activation *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_control_state_unpack(&this->key_exchange, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_control_state_unpack(&this->password_authentication, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_control_state_unpack(&this->fail_due_to_password_authentication_failure, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_activation_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 3);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_activation_bounds_check(const bcmolt_gpon_onu_activation *this)
+{
+    switch (this->key_exchange)
+    {
+        case BCMOLT_CONTROL_STATE_DISABLE:
+            break;
+        case BCMOLT_CONTROL_STATE_ENABLE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->password_authentication)
+    {
+        case BCMOLT_CONTROL_STATE_DISABLE:
+            break;
+        case BCMOLT_CONTROL_STATE_ENABLE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->fail_due_to_password_authentication_failure)
+    {
+        case BCMOLT_CONTROL_STATE_DISABLE:
+            break;
+        case BCMOLT_CONTROL_STATE_ENABLE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_alarm_state_set_default(bcmolt_gpon_onu_alarm_state *this)
+{
+    this->losi = BCMOLT_STATUS_OFF;
+    this->lofi = BCMOLT_STATUS_OFF;
+    this->loami = BCMOLT_STATUS_OFF;
+    this->dgi = BCMOLT_STATUS_OFF;
+    this->tiwi = BCMOLT_STATUS_OFF;
+    this->dowi = BCMOLT_STATUS_OFF;
+    this->sufi = BCMOLT_STATUS_OFF;
+    this->sfi = BCMOLT_STATUS_OFF;
+    this->sdi = BCMOLT_STATUS_OFF;
+    this->dfi = BCMOLT_STATUS_OFF;
+    this->loai = BCMOLT_STATUS_OFF;
+    this->loki = BCMOLT_STATUS_OFF;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_alarm_state_pack(const bcmolt_gpon_onu_alarm_state *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_status_pack(this->losi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_pack(this->lofi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_pack(this->loami, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_pack(this->dgi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_pack(this->tiwi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_pack(this->dowi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_pack(this->sufi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_pack(this->sfi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_pack(this->sdi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_pack(this->dfi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_pack(this->loai, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_pack(this->loki, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_alarm_state_unpack(bcmolt_gpon_onu_alarm_state *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_status_unpack(&this->losi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_unpack(&this->lofi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_unpack(&this->loami, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_unpack(&this->dgi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_unpack(&this->tiwi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_unpack(&this->dowi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_unpack(&this->sufi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_unpack(&this->sfi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_unpack(&this->sdi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_unpack(&this->dfi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_unpack(&this->loai, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_unpack(&this->loki, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_alarm_state_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 12);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_alarm_state_bounds_check(const bcmolt_gpon_onu_alarm_state *this)
+{
+    switch (this->losi)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->lofi)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->loami)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->dgi)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->tiwi)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->dowi)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->sufi)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->sfi)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->sdi)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->dfi)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->loai)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->loki)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_alarms_set_default(bcmolt_gpon_onu_alarms *this)
+{
+    this->losi = BCMOLT_STATUS_OFF;
+    this->lofi = BCMOLT_STATUS_OFF;
+    this->loami = BCMOLT_STATUS_OFF;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_alarms_pack(const bcmolt_gpon_onu_alarms *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_status_pack(this->losi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_pack(this->lofi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_pack(this->loami, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_alarms_unpack(bcmolt_gpon_onu_alarms *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_status_unpack(&this->losi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_unpack(&this->lofi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_unpack(&this->loami, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_alarms_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 3);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_alarms_bounds_check(const bcmolt_gpon_onu_alarms *this)
+{
+    switch (this->losi)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->lofi)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->loami)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_alarms_thresholds_set_default(bcmolt_gpon_onu_alarms_thresholds *this)
+{
+    this->losi = 4;
+    this->lofi = 4;
+    this->loami = 3;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_alarms_thresholds_pack(const bcmolt_gpon_onu_alarms_thresholds *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u8(buf, this->losi))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->lofi))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->loami))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_alarms_thresholds_unpack(bcmolt_gpon_onu_alarms_thresholds *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u8(buf, &this->losi))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->lofi))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->loami))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_alarms_thresholds_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 3);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_alarms_thresholds_bounds_check(const bcmolt_gpon_onu_alarms_thresholds *this)
+{
+    if (this->losi < 1)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->losi > 15)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->lofi < 1)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->lofi > 15)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->loami < 1)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->loami > 15)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_eqd_set_default(bcmolt_gpon_onu_eqd *this)
+{
+    this->onu_id = (bcmolt_gpon_onu_id) 0;
+    this->eqd = 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_eqd_pack(const bcmolt_gpon_onu_eqd *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u16(buf, (uint16_t) this->onu_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->eqd))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_eqd_unpack(bcmolt_gpon_onu_eqd *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->onu_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->eqd))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_eqd_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 6);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_eqd_bounds_check(const bcmolt_gpon_onu_eqd *this)
+{
+    if (this->onu_id > (bcmolt_gpon_onu_id) 127)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_eqd_list_u32_set_default(bcmolt_gpon_onu_eqd_list_u32 *this)
+{
+    this->len = 0;
+    this->val = NULL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_eqd_list_u32_pack(const bcmolt_gpon_onu_eqd_list_u32 *this, bcmolt_buf *buf)
+{
+    uint32_t i0;
+    if (!bcmolt_buf_write_u32(buf, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_gpon_onu_eqd_list_u32\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_gpon_onu_eqd_pack(&this->val[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_eqd_list_u32_get_packed_length(const bcmolt_gpon_onu_eqd_list_u32 *this)
+{
+    return 4 + (6 * this->len);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_eqd_list_u32_unpack(bcmolt_gpon_onu_eqd_list_u32 *this, bcmolt_buf *buf, void **extra_mem)
+{
+    uint32_t i0;
+    if (!bcmolt_buf_read_u32(buf, &this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_gpon_onu_eqd_list_u32\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->val = (bcmolt_gpon_onu_eqd *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->len * sizeof(bcmolt_gpon_onu_eqd));
+        }
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_gpon_onu_eqd_unpack(&this->val[i0], buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_eqd_list_u32_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    uint32_t len;
+    if (!bcmolt_buf_read_u32(packed, &len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_gpon_onu_eqd) * len);
+    if (!bcmolt_buf_skip(packed, len * 6))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_eqd_list_u32_bounds_check(const bcmolt_gpon_onu_eqd_list_u32 *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_id_list_u32_max_256_set_default(bcmolt_gpon_onu_id_list_u32_max_256 *this)
+{
+    this->len = 0;
+    this->val = NULL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_id_list_u32_max_256_pack(const bcmolt_gpon_onu_id_list_u32_max_256 *this, bcmolt_buf *buf)
+{
+    uint32_t i0;
+    if (!bcmolt_buf_write_u32(buf, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_gpon_onu_id_list_u32_max_256\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    if (this->len > 256)
+    {
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->val[i0]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_id_list_u32_max_256_get_packed_length(const bcmolt_gpon_onu_id_list_u32_max_256 *this)
+{
+    return 4 + (2 * this->len);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_id_list_u32_max_256_unpack(bcmolt_gpon_onu_id_list_u32_max_256 *this, bcmolt_buf *buf, void **extra_mem)
+{
+    uint32_t i0;
+    if (!bcmolt_buf_read_u32(buf, &this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_gpon_onu_id_list_u32_max_256\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->val = (bcmolt_gpon_onu_id *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->len * sizeof(bcmolt_gpon_onu_id));
+        }
+    }
+
+    if (this->len > 256)
+    {
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->val[i0]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_id_list_u32_max_256_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    uint32_t len;
+    if (!bcmolt_buf_read_u32(packed, &len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_gpon_onu_id) * len);
+    if (!bcmolt_buf_skip(packed, len * 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_id_list_u32_max_256_bounds_check(const bcmolt_gpon_onu_id_list_u32_max_256 *this)
+{
+    if (this->len > 256)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_upgrade_params_set_default(bcmolt_gpon_onu_upgrade_params *this)
+{
+    this->response_timeout_ms = 1000;
+    this->max_retry_count = 23;
+    this->omci_format = BCMOLT_OMCI_DEVICE_ID_EXTENDED;
+    this->window_size = 32;
+    this->activate_commit = BCMOS_FALSE;
+    this->delay_for_commit_ms = 40000UL;
+    this->max_activation_attempts = 23;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_upgrade_params_pack(const bcmolt_gpon_onu_upgrade_params *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u32(buf, this->response_timeout_ms))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->max_retry_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_omci_device_id_pack(this->omci_format, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u16(buf, this->window_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_bool(buf, this->activate_commit))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->delay_for_commit_ms))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->max_activation_attempts))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_upgrade_params_unpack(bcmolt_gpon_onu_upgrade_params *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u32(buf, &this->response_timeout_ms))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->max_retry_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_omci_device_id_unpack(&this->omci_format, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u16(buf, &this->window_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_bool(buf, &this->activate_commit))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->delay_for_commit_ms))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->max_activation_attempts))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_upgrade_params_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 14);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_upgrade_params_bounds_check(const bcmolt_gpon_onu_upgrade_params *this)
+{
+    if (this->response_timeout_ms < 50)
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->omci_format)
+    {
+        case BCMOLT_OMCI_DEVICE_ID_BASELINE:
+            break;
+        case BCMOLT_OMCI_DEVICE_ID_EXTENDED:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    if (this->window_size < 1)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->window_size > 256)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_upgrade_status_set_default(bcmolt_gpon_onu_upgrade_status *this)
+{
+    this->onu_id = (bcmolt_pon_onu_id) 0;
+    this->error_code = BCMOLT_GPON_ONU_UPGRADE_RETURN_CODE_SUCCESS;
+    this->fail_reason = BCMOLT_OMCI_RESULT_CODE_NO_ERROR;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_upgrade_status_pack(const bcmolt_gpon_onu_upgrade_status *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u16(buf, (uint16_t) this->onu_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_gpon_onu_upgrade_return_code_pack(this->error_code, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_omci_result_code_pack(this->fail_reason, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_upgrade_status_unpack(bcmolt_gpon_onu_upgrade_status *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->onu_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_gpon_onu_upgrade_return_code_unpack(&this->error_code, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_omci_result_code_unpack(&this->fail_reason, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_upgrade_status_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 4);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_upgrade_status_bounds_check(const bcmolt_gpon_onu_upgrade_status *this)
+{
+    if (this->onu_id > (bcmolt_pon_onu_id) 511)
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->error_code)
+    {
+        case BCMOLT_GPON_ONU_UPGRADE_RETURN_CODE_SUCCESS:
+            break;
+        case BCMOLT_GPON_ONU_UPGRADE_RETURN_CODE_ONU_RESPONSE_TIMEOUT:
+            break;
+        case BCMOLT_GPON_ONU_UPGRADE_RETURN_CODE_ONU_ERROR_RESPONSE:
+            break;
+        case BCMOLT_GPON_ONU_UPGRADE_RETURN_CODE_TCI_MISMATCH:
+            break;
+        case BCMOLT_GPON_ONU_UPGRADE_RETURN_CODE_GET_IMAGE_FAILED:
+            break;
+        case BCMOLT_GPON_ONU_UPGRADE_RETURN_CODE_ACTIVATION_FAILED:
+            break;
+        case BCMOLT_GPON_ONU_UPGRADE_RETURN_CODE_INTERNAL:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->fail_reason)
+    {
+        case BCMOLT_OMCI_RESULT_CODE_NO_ERROR:
+            break;
+        case BCMOLT_OMCI_RESULT_CODE_PROCESSING_ERROR:
+            break;
+        case BCMOLT_OMCI_RESULT_CODE_NOT_SUPPORTED:
+            break;
+        case BCMOLT_OMCI_RESULT_CODE_PARAMETER_ERROR:
+            break;
+        case BCMOLT_OMCI_RESULT_CODE_UNKNOWN_ENTITY:
+            break;
+        case BCMOLT_OMCI_RESULT_CODE_UNKNOWN_INSTANCE:
+            break;
+        case BCMOLT_OMCI_RESULT_CODE_DEVICE_BUSY:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_upgrade_status_list_u32_set_default(bcmolt_gpon_onu_upgrade_status_list_u32 *this)
+{
+    this->len = 0;
+    this->val = NULL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_upgrade_status_list_u32_pack(const bcmolt_gpon_onu_upgrade_status_list_u32 *this, bcmolt_buf *buf)
+{
+    uint32_t i0;
+    if (!bcmolt_buf_write_u32(buf, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_gpon_onu_upgrade_status_list_u32\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_gpon_onu_upgrade_status_pack(&this->val[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_upgrade_status_list_u32_get_packed_length(const bcmolt_gpon_onu_upgrade_status_list_u32 *this)
+{
+    return 4 + (4 * this->len);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_upgrade_status_list_u32_unpack(bcmolt_gpon_onu_upgrade_status_list_u32 *this, bcmolt_buf *buf, void **extra_mem)
+{
+    uint32_t i0;
+    if (!bcmolt_buf_read_u32(buf, &this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_gpon_onu_upgrade_status_list_u32\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->val = (bcmolt_gpon_onu_upgrade_status *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->len * sizeof(bcmolt_gpon_onu_upgrade_status));
+        }
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_gpon_onu_upgrade_status_unpack(&this->val[i0], buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_upgrade_status_list_u32_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    uint32_t len;
+    if (!bcmolt_buf_read_u32(packed, &len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_gpon_onu_upgrade_status) * len);
+    if (!bcmolt_buf_skip(packed, len * 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_upgrade_status_list_u32_bounds_check(const bcmolt_gpon_onu_upgrade_status_list_u32 *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_with_state_set_default(bcmolt_gpon_onu_with_state *this)
+{
+    this->onu_id = (bcmolt_gpon_onu_id) 0;
+    this->state = BCMOLT_ONU_STATE_NOT_CONFIGURED;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_with_state_pack(const bcmolt_gpon_onu_with_state *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u16(buf, (uint16_t) this->onu_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_onu_state_pack(this->state, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_with_state_unpack(bcmolt_gpon_onu_with_state *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->onu_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_onu_state_unpack(&this->state, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_with_state_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 3);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_with_state_bounds_check(const bcmolt_gpon_onu_with_state *this)
+{
+    if (this->onu_id > (bcmolt_gpon_onu_id) 127)
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->state)
+    {
+        case BCMOLT_ONU_STATE_NOT_CONFIGURED:
+            break;
+        case BCMOLT_ONU_STATE_INACTIVE:
+            break;
+        case BCMOLT_ONU_STATE_ACTIVE:
+            break;
+        case BCMOLT_ONU_STATE_ACTIVE_STANDBY:
+            break;
+        case BCMOLT_ONU_STATE_DISABLED:
+            break;
+        case BCMOLT_ONU_STATE_AWAKE_FREE:
+            break;
+        case BCMOLT_ONU_STATE_PROCESSING:
+            break;
+        case BCMOLT_ONU_STATE_LOW_POWER_DOZE:
+            break;
+        case BCMOLT_ONU_STATE_LOW_POWER_SLEEP:
+            break;
+        case BCMOLT_ONU_STATE_LOW_POWER_WATCH:
+            break;
+        case BCMOLT_ONU_STATE_UNAWARE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_with_state_list_u16_max_128_set_default(bcmolt_gpon_onu_with_state_list_u16_max_128 *this)
+{
+    this->len = 0;
+    this->val = NULL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_with_state_list_u16_max_128_pack(const bcmolt_gpon_onu_with_state_list_u16_max_128 *this, bcmolt_buf *buf)
+{
+    uint16_t i0;
+    if (!bcmolt_buf_write_u16(buf, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_gpon_onu_with_state_list_u16_max_128\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    if (this->len > 128)
+    {
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_gpon_onu_with_state_pack(&this->val[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_with_state_list_u16_max_128_get_packed_length(const bcmolt_gpon_onu_with_state_list_u16_max_128 *this)
+{
+    return 2 + (3 * this->len);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_with_state_list_u16_max_128_unpack(bcmolt_gpon_onu_with_state_list_u16_max_128 *this, bcmolt_buf *buf, void **extra_mem)
+{
+    uint16_t i0;
+    if (!bcmolt_buf_read_u16(buf, &this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_gpon_onu_with_state_list_u16_max_128\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->val = (bcmolt_gpon_onu_with_state *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->len * sizeof(bcmolt_gpon_onu_with_state));
+        }
+    }
+
+    if (this->len > 128)
+    {
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_gpon_onu_with_state_unpack(&this->val[i0], buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_with_state_list_u16_max_128_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    uint16_t len;
+    if (!bcmolt_buf_read_u16(packed, &len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_gpon_onu_with_state) * len);
+    if (!bcmolt_buf_skip(packed, len * 3))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_with_state_list_u16_max_128_bounds_check(const bcmolt_gpon_onu_with_state_list_u16_max_128 *this)
+{
+    if (this->len > 128)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_rssi_general_configuration_set_default(bcmolt_gpon_rssi_general_configuration *this)
+{
+    this->location = 20;
+    this->location_sign = BCMOLT_RSSI_LOCATION_SIGN_BEFORE;
+    this->start_pattern = 15;
+    this->middle_pattern = 15;
+    this->last_pattern = 15;
+    this->middle_repertition = 50;
+    this->minimum_burst = 55;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_rssi_general_configuration_pack(const bcmolt_gpon_rssi_general_configuration *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u8(buf, this->location))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_rssi_location_sign_pack(this->location_sign, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->start_pattern))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->middle_pattern))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->last_pattern))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->middle_repertition))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u16(buf, this->minimum_burst))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_rssi_general_configuration_unpack(bcmolt_gpon_rssi_general_configuration *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u8(buf, &this->location))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_rssi_location_sign_unpack(&this->location_sign, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->start_pattern))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->middle_pattern))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->last_pattern))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->middle_repertition))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u16(buf, &this->minimum_burst))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_rssi_general_configuration_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 8);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_rssi_general_configuration_bounds_check(const bcmolt_gpon_rssi_general_configuration *this)
+{
+    switch (this->location_sign)
+    {
+        case BCMOLT_RSSI_LOCATION_SIGN_BEFORE:
+            break;
+        case BCMOLT_RSSI_LOCATION_SIGN_AFTER:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_sn_acquisition_set_default(bcmolt_gpon_sn_acquisition *this)
+{
+    this->interval = 1000;
+    this->control = BCMOLT_CONTROL_STATE_DISABLE;
+    this->onu_post_discovery_mode = BCMOLT_ONU_POST_DISCOVERY_MODE_DISABLE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_sn_acquisition_pack(const bcmolt_gpon_sn_acquisition *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u32(buf, this->interval))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_control_state_pack(this->control, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_onu_post_discovery_mode_pack(this->onu_post_discovery_mode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_sn_acquisition_unpack(bcmolt_gpon_sn_acquisition *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u32(buf, &this->interval))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_control_state_unpack(&this->control, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_onu_post_discovery_mode_unpack(&this->onu_post_discovery_mode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_sn_acquisition_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 6);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_sn_acquisition_bounds_check(const bcmolt_gpon_sn_acquisition *this)
+{
+    if (this->interval < 1000)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->interval > 2147483UL)
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->control)
+    {
+        case BCMOLT_CONTROL_STATE_DISABLE:
+            break;
+        case BCMOLT_CONTROL_STATE_ENABLE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->onu_post_discovery_mode)
+    {
+        case BCMOLT_ONU_POST_DISCOVERY_MODE_NONE:
+            break;
+        case BCMOLT_ONU_POST_DISCOVERY_MODE_ACTIVATE:
+            break;
+        case BCMOLT_ONU_POST_DISCOVERY_MODE_DISABLE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_host_sw_version_set_default(bcmolt_host_sw_version *this)
+{
+    this->major = 0;
+    this->minor = 0;
+    this->revision = 0;
+    this->model = 0;
+    memset(this->build_time, 0, 32);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_host_sw_version_pack(const bcmolt_host_sw_version *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u8(buf, this->major))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->minor))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->revision))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->model))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write(buf, this->build_time, 32))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_host_sw_version_unpack(bcmolt_host_sw_version *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u8(buf, &this->major))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->minor))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->revision))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->model))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read(buf, this->build_time, 32))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_host_sw_version_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 39);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_host_sw_version_bounds_check(const bcmolt_host_sw_version *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_hw_pon_id_set_default(bcmolt_hw_pon_id *this)
+{
+    this->pon_id_1 = 0;
+    this->pon_id_2 = 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_hw_pon_id_pack(const bcmolt_hw_pon_id *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u32(buf, this->pon_id_1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->pon_id_2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_hw_pon_id_unpack(bcmolt_hw_pon_id *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u32(buf, &this->pon_id_1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->pon_id_2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_hw_pon_id_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 8);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_hw_pon_id_bounds_check(const bcmolt_hw_pon_id *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_ieee_8021as_port_identity_set_default(bcmolt_ieee_8021as_port_identity *this)
+{
+    memset(this->clock_identity, 0, sizeof(this->clock_identity));
+    this->port_number = 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ieee_8021as_port_identity_pack(const bcmolt_ieee_8021as_port_identity *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write(buf, this->clock_identity, 8))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u16(buf, this->port_number))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ieee_8021as_port_identity_unpack(bcmolt_ieee_8021as_port_identity *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read(buf, this->clock_identity, 8))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u16(buf, &this->port_number))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ieee_8021as_port_identity_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 10);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ieee_8021as_port_identity_bounds_check(const bcmolt_ieee_8021as_port_identity *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_ieee_8021as_timestamp_set_default(bcmolt_ieee_8021as_timestamp *this)
+{
+    this->seconds_high = 0;
+    this->seconds_low = 0;
+    this->nanoseconds = 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ieee_8021as_timestamp_pack(const bcmolt_ieee_8021as_timestamp *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u16(buf, this->seconds_high))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->seconds_low))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->nanoseconds))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ieee_8021as_timestamp_unpack(bcmolt_ieee_8021as_timestamp *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u16(buf, &this->seconds_high))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->seconds_low))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->nanoseconds))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ieee_8021as_timestamp_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 10);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ieee_8021as_timestamp_bounds_check(const bcmolt_ieee_8021as_timestamp *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_ieee_8021as_time_sync_set_default(bcmolt_ieee_8021as_time_sync *this)
+{
+    bcmos_mac_address_init(&this->destination_mac);
+    bcmos_mac_address_init(&this->source_mac);
+    this->eth_type_len = 0;
+    this->eth_subtype = 0;
+    memset(this->ieee_oui, 0, sizeof(this->ieee_oui));
+    this->msg_id = 0;
+    this->x = 0;
+    this->tod.seconds_high = 0;
+    this->tod.seconds_low = 0;
+    this->tod.nanoseconds = 0;
+    memset(this->port_identity.clock_identity, 0, sizeof(this->port_identity.clock_identity));
+    this->port_identity.port_number = 0;
+    this->log_msg_interval = 0;
+    this->rate_ratio = 0;
+    this->gm_time_base_indicator = 0;
+    memset(this->last_gm_phase_change, 0, sizeof(this->last_gm_phase_change));
+    this->last_frequency_change = 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ieee_8021as_time_sync_pack(const bcmolt_ieee_8021as_time_sync *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_mac_address(buf, this->destination_mac))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_mac_address(buf, this->source_mac))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u16(buf, this->eth_type_len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->eth_subtype))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write(buf, this->ieee_oui, 3))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u16(buf, this->msg_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->x))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_ieee_8021as_timestamp_pack(&this->tod, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_ieee_8021as_port_identity_pack(&this->port_identity, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_s8(buf, this->log_msg_interval))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_double(buf, this->rate_ratio))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u16(buf, this->gm_time_base_indicator))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write(buf, this->last_gm_phase_change, 12))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_s32(buf, this->last_frequency_change))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ieee_8021as_time_sync_unpack(bcmolt_ieee_8021as_time_sync *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_mac_address(buf, &this->destination_mac))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_mac_address(buf, &this->source_mac))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u16(buf, &this->eth_type_len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->eth_subtype))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read(buf, this->ieee_oui, 3))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u16(buf, &this->msg_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->x))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_ieee_8021as_timestamp_unpack(&this->tod, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_ieee_8021as_port_identity_unpack(&this->port_identity, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_s8(buf, &this->log_msg_interval))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_double(buf, &this->rate_ratio))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u16(buf, &this->gm_time_base_indicator))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read(buf, this->last_gm_phase_change, 12))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_s32(buf, &this->last_frequency_change))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ieee_8021as_time_sync_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 71);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ieee_8021as_time_sync_bounds_check(const bcmolt_ieee_8021as_time_sync *this)
+{
+    if (!bcmolt_ieee_8021as_timestamp_bounds_check(&this->tod))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_ieee_8021as_port_identity_bounds_check(&this->port_identity))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_indication_shaping_set_default(bcmolt_indication_shaping *this)
+{
+    this->enabled = BCMOS_FALSE;
+    this->max_rate = 1000;
+    this->max_burst = 100;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_indication_shaping_pack(const bcmolt_indication_shaping *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_bool(buf, this->enabled))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->max_rate))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->max_burst))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_indication_shaping_unpack(bcmolt_indication_shaping *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_bool(buf, &this->enabled))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->max_rate))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->max_burst))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_indication_shaping_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 9);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_indication_shaping_bounds_check(const bcmolt_indication_shaping *this)
+{
+    if (this->max_rate < 1)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->max_rate > 10000)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->max_burst < 1)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->max_burst > 10000)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_la_resync_pattern_configuration_set_default(bcmolt_la_resync_pattern_configuration *this)
+{
+    this->resync_control.start_pattern = 15;
+    this->resync_control.middle_pattern = 15;
+    this->resync_control.last_pattern = 15;
+    this->resync_control.middle_repetition = 0;
+    this->resync_control.location = 40;
+    this->ranging_resync_control.start_pattern = 15;
+    this->ranging_resync_control.middle_pattern = 15;
+    this->ranging_resync_control.last_pattern = 15;
+    this->ranging_resync_control.middle_repetition = 0;
+    this->ranging_resync_control.location = 1;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_la_resync_pattern_configuration_pack(const bcmolt_la_resync_pattern_configuration *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_resync_control_pack(&this->resync_control, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_resync_control_pack(&this->ranging_resync_control, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_la_resync_pattern_configuration_unpack(bcmolt_la_resync_pattern_configuration *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_resync_control_unpack(&this->resync_control, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_resync_control_unpack(&this->ranging_resync_control, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_la_resync_pattern_configuration_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 10);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_la_resync_pattern_configuration_bounds_check(const bcmolt_la_resync_pattern_configuration *this)
+{
+    if (!bcmolt_resync_control_bounds_check(&this->resync_control))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_resync_control_bounds_check(&this->ranging_resync_control))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_log_buffer_set_default(bcmolt_log_buffer *this)
+{
+    memset(this->buff, 0, 2048);
+    this->msg_to_read = 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_buffer_pack(const bcmolt_log_buffer *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write(buf, this->buff, 2048))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->msg_to_read))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_buffer_unpack(bcmolt_log_buffer *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read(buf, this->buff, 2048))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->msg_to_read))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_buffer_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 2052);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_buffer_bounds_check(const bcmolt_log_buffer *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_mac_table_configuration_set_default(bcmolt_mac_table_configuration *this)
+{
+    this->miss_fallback = BCMOLT_MAC_TABLE_MISS_FALLBACK_DROP;
+    this->default_flow_id = (bcmolt_flow_id) 0;
+    this->aging_time = 30;
+    this->learning_mode = BCMOLT_MAC_TABLE_LEARNING_MODE_NORMAL;
+    this->automatic_mac_learning = BCMOLT_CONTROL_STATE_DISABLE;
+    this->automatic_mac_aging = BCMOLT_CONTROL_STATE_DISABLE;
+    this->automatic_mac_move = BCMOLT_CONTROL_STATE_DISABLE;
+    this->automatic_static_mode = BCMOS_FALSE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_mac_table_configuration_pack(const bcmolt_mac_table_configuration *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_mac_table_miss_fallback_pack(this->miss_fallback, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u16(buf, (uint16_t) this->default_flow_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->aging_time))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_mac_table_learning_mode_pack(this->learning_mode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_control_state_pack(this->automatic_mac_learning, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_control_state_pack(this->automatic_mac_aging, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_control_state_pack(this->automatic_mac_move, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_bool(buf, this->automatic_static_mode))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_mac_table_configuration_unpack(bcmolt_mac_table_configuration *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_mac_table_miss_fallback_unpack(&this->miss_fallback, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->default_flow_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->aging_time))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_mac_table_learning_mode_unpack(&this->learning_mode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_control_state_unpack(&this->automatic_mac_learning, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_control_state_unpack(&this->automatic_mac_aging, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_control_state_unpack(&this->automatic_mac_move, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_bool(buf, &this->automatic_static_mode))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_mac_table_configuration_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 12);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_mac_table_configuration_bounds_check(const bcmolt_mac_table_configuration *this)
+{
+    switch (this->miss_fallback)
+    {
+        case BCMOLT_MAC_TABLE_MISS_FALLBACK_DROP:
+            break;
+        case BCMOLT_MAC_TABLE_MISS_FALLBACK_DEFAULT_FLOW:
+            break;
+        case BCMOLT_MAC_TABLE_MISS_FALLBACK_VID:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    if (this->default_flow_id > (bcmolt_flow_id) 4095)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->aging_time < 30)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->aging_time > 86400UL)
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->learning_mode)
+    {
+        case BCMOLT_MAC_TABLE_LEARNING_MODE_NORMAL:
+            break;
+        case BCMOLT_MAC_TABLE_LEARNING_MODE_MOVE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->automatic_mac_learning)
+    {
+        case BCMOLT_CONTROL_STATE_DISABLE:
+            break;
+        case BCMOLT_CONTROL_STATE_ENABLE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->automatic_mac_aging)
+    {
+        case BCMOLT_CONTROL_STATE_DISABLE:
+            break;
+        case BCMOLT_CONTROL_STATE_ENABLE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->automatic_mac_move)
+    {
+        case BCMOLT_CONTROL_STATE_DISABLE:
+            break;
+        case BCMOLT_CONTROL_STATE_ENABLE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_macaddress_list_u32_set_default(bcmolt_macaddress_list_u32 *this)
+{
+    this->len = 0;
+    this->val = NULL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_macaddress_list_u32_pack(const bcmolt_macaddress_list_u32 *this, bcmolt_buf *buf)
+{
+    uint32_t i0;
+    if (!bcmolt_buf_write_u32(buf, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_macaddress_list_u32\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_buf_write_mac_address(buf, this->val[i0]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_macaddress_list_u32_get_packed_length(const bcmolt_macaddress_list_u32 *this)
+{
+    return 4 + (6 * this->len);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_macaddress_list_u32_unpack(bcmolt_macaddress_list_u32 *this, bcmolt_buf *buf, void **extra_mem)
+{
+    uint32_t i0;
+    if (!bcmolt_buf_read_u32(buf, &this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_macaddress_list_u32\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->val = (bcmos_mac_address *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->len * sizeof(bcmos_mac_address));
+        }
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_buf_read_mac_address(buf, &this->val[i0]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_macaddress_list_u32_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    uint32_t len;
+    if (!bcmolt_buf_read_u32(packed, &len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmos_mac_address) * len);
+    if (!bcmolt_buf_skip(packed, len * 6))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_macaddress_list_u32_bounds_check(const bcmolt_macaddress_list_u32 *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_macaddress_list_u32_max_2048_set_default(bcmolt_macaddress_list_u32_max_2048 *this)
+{
+    this->len = 0;
+    this->val = NULL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_macaddress_list_u32_max_2048_pack(const bcmolt_macaddress_list_u32_max_2048 *this, bcmolt_buf *buf)
+{
+    uint32_t i0;
+    if (!bcmolt_buf_write_u32(buf, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_macaddress_list_u32_max_2048\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    if (this->len > 2048)
+    {
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_buf_write_mac_address(buf, this->val[i0]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_macaddress_list_u32_max_2048_get_packed_length(const bcmolt_macaddress_list_u32_max_2048 *this)
+{
+    return 4 + (6 * this->len);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_macaddress_list_u32_max_2048_unpack(bcmolt_macaddress_list_u32_max_2048 *this, bcmolt_buf *buf, void **extra_mem)
+{
+    uint32_t i0;
+    if (!bcmolt_buf_read_u32(buf, &this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_macaddress_list_u32_max_2048\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->val = (bcmos_mac_address *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->len * sizeof(bcmos_mac_address));
+        }
+    }
+
+    if (this->len > 2048)
+    {
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_buf_read_mac_address(buf, &this->val[i0]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_macaddress_list_u32_max_2048_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    uint32_t len;
+    if (!bcmolt_buf_read_u32(packed, &len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmos_mac_address) * len);
+    if (!bcmolt_buf_skip(packed, len * 6))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_macaddress_list_u32_max_2048_bounds_check(const bcmolt_macaddress_list_u32_max_2048 *this)
+{
+    if (this->len > 2048)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_nni_link_status_set_default(bcmolt_nni_link_status *this)
+{
+    this->link_status = BCMOLT_TRIVALENT_FALSE;
+    this->signal_detected = BCMOLT_TRIVALENT_FALSE;
+    this->pmd_locked = BCMOLT_TRIVALENT_FALSE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_link_status_pack(const bcmolt_nni_link_status *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_trivalent_pack(this->link_status, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_trivalent_pack(this->signal_detected, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_trivalent_pack(this->pmd_locked, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_link_status_unpack(bcmolt_nni_link_status *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_trivalent_unpack(&this->link_status, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_trivalent_unpack(&this->signal_detected, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_trivalent_unpack(&this->pmd_locked, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_link_status_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 3);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_link_status_bounds_check(const bcmolt_nni_link_status *this)
+{
+    switch (this->link_status)
+    {
+        case BCMOLT_TRIVALENT_FALSE:
+            break;
+        case BCMOLT_TRIVALENT_TRUE:
+            break;
+        case BCMOLT_TRIVALENT_NOT_APPLICABLE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->signal_detected)
+    {
+        case BCMOLT_TRIVALENT_FALSE:
+            break;
+        case BCMOLT_TRIVALENT_TRUE:
+            break;
+        case BCMOLT_TRIVALENT_NOT_APPLICABLE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->pmd_locked)
+    {
+        case BCMOLT_TRIVALENT_FALSE:
+            break;
+        case BCMOLT_TRIVALENT_TRUE:
+            break;
+        case BCMOLT_TRIVALENT_NOT_APPLICABLE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_oam_heartbeat_config_set_default(bcmolt_oam_heartbeat_config *this)
+{
+    this->send_period = 0;
+    this->transmit_frame.len = 0;
+    this->transmit_frame.val = NULL;
+    this->ignored_receive_frame_template.frame_octets.len = 0;
+    this->ignored_receive_frame_template.frame_octets.val = NULL;
+    this->ignored_receive_frame_template.mask_octets.len = 0;
+    this->ignored_receive_frame_template.mask_octets.val = NULL;
+    this->receive_timeout = 1;
+    this->maximum_receive_size = 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_oam_heartbeat_config_pack(const bcmolt_oam_heartbeat_config *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u16(buf, this->send_period))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_u8_list_u16_pack(&this->transmit_frame, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_ethernet_frame_masked_pack(&this->ignored_receive_frame_template, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u16(buf, this->receive_timeout))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u16(buf, this->maximum_receive_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_oam_heartbeat_config_get_packed_length(const bcmolt_oam_heartbeat_config *this)
+{
+    return 6 + bcmolt_u8_list_u16_get_packed_length(&this->transmit_frame) + bcmolt_ethernet_frame_masked_get_packed_length(&this->ignored_receive_frame_template);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_oam_heartbeat_config_unpack(bcmolt_oam_heartbeat_config *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u16(buf, &this->send_period))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_u8_list_u16_unpack(&this->transmit_frame, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_ethernet_frame_masked_unpack(&this->ignored_receive_frame_template, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u16(buf, &this->receive_timeout))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u16(buf, &this->maximum_receive_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_oam_heartbeat_config_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    if (!bcmolt_buf_skip(packed, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_u8_list_u16_scan(packed, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_ethernet_frame_masked_scan(packed, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_skip(packed, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_skip(packed, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_oam_heartbeat_config_bounds_check(const bcmolt_oam_heartbeat_config *this)
+{
+    if (!bcmolt_u8_list_u16_bounds_check(&this->transmit_frame))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_ethernet_frame_masked_bounds_check(&this->ignored_receive_frame_template))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->receive_timeout < 1)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_onu_power_management_configuration_set_default(bcmolt_onu_power_management_configuration *this)
+{
+    this->ilowpower = 1600;
+    this->iaware = 160;
+    this->itransinit = 80;
+    this->itxinit = 40;
+    this->irxoff = 1600;
+    this->low_power_clobi = 8;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_onu_power_management_configuration_pack(const bcmolt_onu_power_management_configuration *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u32(buf, this->ilowpower))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->iaware))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u16(buf, this->itransinit))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u16(buf, this->itxinit))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->irxoff))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u16(buf, this->low_power_clobi))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_onu_power_management_configuration_unpack(bcmolt_onu_power_management_configuration *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u32(buf, &this->ilowpower))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->iaware))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u16(buf, &this->itransinit))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u16(buf, &this->itxinit))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->irxoff))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u16(buf, &this->low_power_clobi))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_onu_power_management_configuration_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 18);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_onu_power_management_configuration_bounds_check(const bcmolt_onu_power_management_configuration *this)
+{
+    if (this->ilowpower < 8)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->ilowpower > 480000UL)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->iaware < 8)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->iaware > 480000UL)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->itransinit > 8000)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->itxinit > 8000)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->irxoff < 8)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->irxoff > 480000UL)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->low_power_clobi < 1)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->low_power_clobi > 1023)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_onu_tuning_configuration_set_default(bcmolt_onu_tuning_configuration *this)
+{
+    this->tsource = 1000;
+    this->ttarget = 1000;
+    this->request_registration_required = BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_onu_tuning_configuration_pack(const bcmolt_onu_tuning_configuration *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u32(buf, this->tsource))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->ttarget))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_bool(buf, this->request_registration_required))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_onu_tuning_configuration_unpack(bcmolt_onu_tuning_configuration *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u32(buf, &this->tsource))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->ttarget))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_bool(buf, &this->request_registration_required))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_onu_tuning_configuration_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 9);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_onu_tuning_configuration_bounds_check(const bcmolt_onu_tuning_configuration *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_pon_id_set_default(bcmolt_pon_id *this)
+{
+    this->administrative_label = 0;
+    this->dwlch_id = 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_id_pack(const bcmolt_pon_id *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u32(buf, this->administrative_label))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->dwlch_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_id_unpack(bcmolt_pon_id *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u32(buf, &this->administrative_label))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->dwlch_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_id_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 5);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_id_bounds_check(const bcmolt_pon_id *this)
+{
+    if (this->administrative_label > 4294967280UL)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->dwlch_id > 7)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_operation_control_set_default(bcmolt_operation_control *this)
+{
+    this->re = 0;
+    this->odn_class = BCMOLT_ODN_CLASS_N1;
+    this->ds_fec_mode = BCMOLT_CONTROL_STATE_ENABLE;
+    this->protocol = BCMOLT_TC_PROTOCOL_TC_LAYER_PROTOCOL_G_989_P_3;
+    this->ds_link_type = BCMOLT_LINK_TYPE_UNSPECIFIED;
+    this->pon_id.administrative_label = 0;
+    this->pon_id.dwlch_id = 0;
+    this->c = 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_operation_control_pack(const bcmolt_operation_control *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u8(buf, this->re))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_odn_class_pack(this->odn_class, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_control_state_pack(this->ds_fec_mode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_tc_protocol_pack(this->protocol, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_link_type_pack(this->ds_link_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_pon_id_pack(&this->pon_id, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->c))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_operation_control_unpack(bcmolt_operation_control *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u8(buf, &this->re))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_odn_class_unpack(&this->odn_class, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_control_state_unpack(&this->ds_fec_mode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_tc_protocol_unpack(&this->protocol, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_link_type_unpack(&this->ds_link_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_pon_id_unpack(&this->pon_id, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->c))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_operation_control_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 11);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_operation_control_bounds_check(const bcmolt_operation_control *this)
+{
+    if (this->re > 1)
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->odn_class)
+    {
+        case BCMOLT_ODN_CLASS_N1:
+            break;
+        case BCMOLT_ODN_CLASS_N2:
+            break;
+        case BCMOLT_ODN_CLASS_E1:
+            break;
+        case BCMOLT_ODN_CLASS_E2:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->ds_fec_mode)
+    {
+        case BCMOLT_CONTROL_STATE_DISABLE:
+            break;
+        case BCMOLT_CONTROL_STATE_ENABLE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->protocol)
+    {
+        case BCMOLT_TC_PROTOCOL_TC_LAYER_PROTOCOL_G_987_P_3:
+            break;
+        case BCMOLT_TC_PROTOCOL_TC_LAYER_PROTOCOL_G_989_P_3:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->ds_link_type)
+    {
+        case BCMOLT_LINK_TYPE_UNSPECIFIED:
+            break;
+        case BCMOLT_LINK_TYPE_B:
+            break;
+        case BCMOLT_LINK_TYPE_A:
+            break;
+        case BCMOLT_LINK_TYPE_A_AND_B:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_pon_id_bounds_check(&this->pon_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->c > 1)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_periodic_standby_pon_monitoring_set_default(bcmolt_periodic_standby_pon_monitoring *this)
+{
+    this->interval = 5000;
+    this->control = BCMOLT_CONTROL_STATE_DISABLE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_periodic_standby_pon_monitoring_pack(const bcmolt_periodic_standby_pon_monitoring *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u32(buf, this->interval))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_control_state_pack(this->control, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_periodic_standby_pon_monitoring_unpack(bcmolt_periodic_standby_pon_monitoring *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u32(buf, &this->interval))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_control_state_unpack(&this->control, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_periodic_standby_pon_monitoring_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 5);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_periodic_standby_pon_monitoring_bounds_check(const bcmolt_periodic_standby_pon_monitoring *this)
+{
+    if (this->interval < 1000)
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->control)
+    {
+        case BCMOLT_CONTROL_STATE_DISABLE:
+            break;
+        case BCMOLT_CONTROL_STATE_ENABLE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_pon_aggregate_shaper_set_default(bcmolt_pon_aggregate_shaper *this)
+{
+    this->bandwidth_kbps = 0;
+    this->mbs_kB = 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_aggregate_shaper_pack(const bcmolt_pon_aggregate_shaper *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u32(buf, this->bandwidth_kbps))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->mbs_kB))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_aggregate_shaper_unpack(bcmolt_pon_aggregate_shaper *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u32(buf, &this->bandwidth_kbps))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->mbs_kB))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_aggregate_shaper_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 8);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_aggregate_shaper_bounds_check(const bcmolt_pon_aggregate_shaper *this)
+{
+    if (this->mbs_kB > 4000)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_pon_alloc_sla_set_default(bcmolt_pon_alloc_sla *this)
+{
+    this->cbr_rt_bw = 0;
+    this->cbr_nrt_bw = 0;
+    this->guaranteed_bw = 0;
+    this->maximum_bw = 0;
+    this->additional_bw_eligibility = BCMOLT_ADDITIONAL_BW_ELIGIBILITY_NONE;
+    this->cbr_rt_compensation = BCMOS_FALSE;
+    this->cbr_rt_ap_index = 0;
+    this->cbr_nrt_ap_index = 0;
+    this->alloc_type = BCMOLT_ALLOC_TYPE_NONE;
+    this->weight = 0;
+    this->priority = 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_alloc_sla_pack(const bcmolt_pon_alloc_sla *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u32(buf, this->cbr_rt_bw))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->cbr_nrt_bw))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->guaranteed_bw))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->maximum_bw))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_additional_bw_eligibility_pack(this->additional_bw_eligibility, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_bool(buf, this->cbr_rt_compensation))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->cbr_rt_ap_index))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->cbr_nrt_ap_index))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_alloc_type_pack(this->alloc_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->weight))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->priority))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_alloc_sla_unpack(bcmolt_pon_alloc_sla *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u32(buf, &this->cbr_rt_bw))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->cbr_nrt_bw))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->guaranteed_bw))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->maximum_bw))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_additional_bw_eligibility_unpack(&this->additional_bw_eligibility, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_bool(buf, &this->cbr_rt_compensation))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->cbr_rt_ap_index))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->cbr_nrt_ap_index))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_alloc_type_unpack(&this->alloc_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->weight))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->priority))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_alloc_sla_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 23);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_alloc_sla_bounds_check(const bcmolt_pon_alloc_sla *this)
+{
+    switch (this->additional_bw_eligibility)
+    {
+        case BCMOLT_ADDITIONAL_BW_ELIGIBILITY_NONE:
+            break;
+        case BCMOLT_ADDITIONAL_BW_ELIGIBILITY_NON_ASSURED:
+            break;
+        case BCMOLT_ADDITIONAL_BW_ELIGIBILITY_BEST_EFFORT:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    if (this->cbr_rt_ap_index > 0)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->cbr_nrt_ap_index > 1)
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->alloc_type)
+    {
+        case BCMOLT_ALLOC_TYPE_NONE:
+            break;
+        case BCMOLT_ALLOC_TYPE_NSR:
+            break;
+        case BCMOLT_ALLOC_TYPE_SR:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    if (this->weight > 100)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->priority > 7)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_pon_available_bandwidth_set_default(bcmolt_pon_available_bandwidth *this)
+{
+    this->cbr_bw = 0;
+    this->total_bw = 0;
+    this->next_onu_total_bw = 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_available_bandwidth_pack(const bcmolt_pon_available_bandwidth *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u32(buf, this->cbr_bw))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->total_bw))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->next_onu_total_bw))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_available_bandwidth_unpack(bcmolt_pon_available_bandwidth *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u32(buf, &this->cbr_bw))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->total_bw))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->next_onu_total_bw))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_available_bandwidth_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 12);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_available_bandwidth_bounds_check(const bcmolt_pon_available_bandwidth *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_pon_dba_set_default(bcmolt_pon_dba *this)
+{
+    this->sr_reporting_block_size = 48;
+    this->dba_mode = BCMOLT_DBA_MODE_NORMAL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_dba_pack(const bcmolt_pon_dba *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u8(buf, this->sr_reporting_block_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_dba_mode_pack(this->dba_mode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_dba_unpack(bcmolt_pon_dba *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u8(buf, &this->sr_reporting_block_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_dba_mode_unpack(&this->dba_mode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_dba_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 2);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_dba_bounds_check(const bcmolt_pon_dba *this)
+{
+    switch (this->dba_mode)
+    {
+        case BCMOLT_DBA_MODE_NORMAL:
+            break;
+        case BCMOLT_DBA_MODE_EXTENDED:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_pon_distance_set_default(bcmolt_pon_distance *this)
+{
+    this->max_log_distance = 20;
+    this->max_diff_reach = 20;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_distance_pack(const bcmolt_pon_distance *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u32(buf, this->max_log_distance))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->max_diff_reach))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_distance_unpack(bcmolt_pon_distance *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u32(buf, &this->max_log_distance))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->max_diff_reach))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_distance_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 8);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_distance_bounds_check(const bcmolt_pon_distance *this)
+{
+    if (this->max_log_distance < 1)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->max_log_distance > 100)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->max_diff_reach < 1)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->max_diff_reach > 60)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_pon_drift_control_set_default(bcmolt_pon_drift_control *this)
+{
+    this->drift_interval = 1000;
+    this->drift_limit = 4;
+    this->transmission_control_limit = 8;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_drift_control_pack(const bcmolt_pon_drift_control *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u32(buf, this->drift_interval))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->drift_limit))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->transmission_control_limit))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_drift_control_unpack(bcmolt_pon_drift_control *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u32(buf, &this->drift_interval))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->drift_limit))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->transmission_control_limit))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_drift_control_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 6);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_drift_control_bounds_check(const bcmolt_pon_drift_control *this)
+{
+    if (this->drift_interval > 60000UL)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->drift_limit < 1)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->drift_limit > 32)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->transmission_control_limit < 1)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->transmission_control_limit > 64)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_pon_onu_id_list_u32_set_default(bcmolt_pon_onu_id_list_u32 *this)
+{
+    this->len = 0;
+    this->val = NULL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_onu_id_list_u32_pack(const bcmolt_pon_onu_id_list_u32 *this, bcmolt_buf *buf)
+{
+    uint32_t i0;
+    if (!bcmolt_buf_write_u32(buf, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_pon_onu_id_list_u32\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->val[i0]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_pon_onu_id_list_u32_get_packed_length(const bcmolt_pon_onu_id_list_u32 *this)
+{
+    return 4 + (2 * this->len);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_onu_id_list_u32_unpack(bcmolt_pon_onu_id_list_u32 *this, bcmolt_buf *buf, void **extra_mem)
+{
+    uint32_t i0;
+    if (!bcmolt_buf_read_u32(buf, &this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_pon_onu_id_list_u32\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->val = (bcmolt_pon_onu_id *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->len * sizeof(bcmolt_pon_onu_id));
+        }
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->val[i0]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_onu_id_list_u32_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    uint32_t len;
+    if (!bcmolt_buf_read_u32(packed, &len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_pon_onu_id) * len);
+    if (!bcmolt_buf_skip(packed, len * 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_onu_id_list_u32_bounds_check(const bcmolt_pon_onu_id_list_u32 *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_pon_power_level_set_default(bcmolt_pon_power_level *this)
+{
+    this->pls_maximum_allocation_size = 120;
+    this->mode = 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_power_level_pack(const bcmolt_pon_power_level *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u32(buf, this->pls_maximum_allocation_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->mode))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_power_level_unpack(bcmolt_pon_power_level *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u32(buf, &this->pls_maximum_allocation_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->mode))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_power_level_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 5);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_power_level_bounds_check(const bcmolt_pon_power_level *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_pon_protection_switching_set_default(bcmolt_pon_protection_switching *this)
+{
+    this->timeout = 100;
+    this->gpio_pin = BCMOLT_GPIO_PIN_UNCONFIGURED;
+    this->options = (bcmolt_pon_protection_switching_options) 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_protection_switching_pack(const bcmolt_pon_protection_switching *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u16(buf, this->timeout))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_gpio_pin_pack(this->gpio_pin, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_pon_protection_switching_options_pack(this->options, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_protection_switching_unpack(bcmolt_pon_protection_switching *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u16(buf, &this->timeout))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_gpio_pin_unpack(&this->gpio_pin, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_pon_protection_switching_options_unpack(&this->options, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_protection_switching_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 7);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_protection_switching_bounds_check(const bcmolt_pon_protection_switching *this)
+{
+    switch (this->gpio_pin)
+    {
+        case BCMOLT_GPIO_PIN_PIN0:
+            break;
+        case BCMOLT_GPIO_PIN_PIN1:
+            break;
+        case BCMOLT_GPIO_PIN_PIN2:
+            break;
+        case BCMOLT_GPIO_PIN_PIN3:
+            break;
+        case BCMOLT_GPIO_PIN_PIN4:
+            break;
+        case BCMOLT_GPIO_PIN_PIN5:
+            break;
+        case BCMOLT_GPIO_PIN_PIN6:
+            break;
+        case BCMOLT_GPIO_PIN_PIN7:
+            break;
+        case BCMOLT_GPIO_PIN_PIN8:
+            break;
+        case BCMOLT_GPIO_PIN_PIN9:
+            break;
+        case BCMOLT_GPIO_PIN_PIN10:
+            break;
+        case BCMOLT_GPIO_PIN_PIN11:
+            break;
+        case BCMOLT_GPIO_PIN_PIN12:
+            break;
+        case BCMOLT_GPIO_PIN_PIN13:
+            break;
+        case BCMOLT_GPIO_PIN_PIN14:
+            break;
+        case BCMOLT_GPIO_PIN_PIN15:
+            break;
+        case BCMOLT_GPIO_PIN_PIN16:
+            break;
+        case BCMOLT_GPIO_PIN_PIN17:
+            break;
+        case BCMOLT_GPIO_PIN_PIN18:
+            break;
+        case BCMOLT_GPIO_PIN_PIN19:
+            break;
+        case BCMOLT_GPIO_PIN_PIN20:
+            break;
+        case BCMOLT_GPIO_PIN_PIN21:
+            break;
+        case BCMOLT_GPIO_PIN_PIN22:
+            break;
+        case BCMOLT_GPIO_PIN_PIN23:
+            break;
+        case BCMOLT_GPIO_PIN_PIN24:
+            break;
+        case BCMOLT_GPIO_PIN_PIN25:
+            break;
+        case BCMOLT_GPIO_PIN_PIN26:
+            break;
+        case BCMOLT_GPIO_PIN_PIN27:
+            break;
+        case BCMOLT_GPIO_PIN_PIN28:
+            break;
+        case BCMOLT_GPIO_PIN_PIN29:
+            break;
+        case BCMOLT_GPIO_PIN_PIN30:
+            break;
+        case BCMOLT_GPIO_PIN_PIN31:
+            break;
+        case BCMOLT_GPIO_PIN_PIN32:
+            break;
+        case BCMOLT_GPIO_PIN_PIN33:
+            break;
+        case BCMOLT_GPIO_PIN_PIN34:
+            break;
+        case BCMOLT_GPIO_PIN_PIN35:
+            break;
+        case BCMOLT_GPIO_PIN_PIN36:
+            break;
+        case BCMOLT_GPIO_PIN_PIN37:
+            break;
+        case BCMOLT_GPIO_PIN_PIN38:
+            break;
+        case BCMOLT_GPIO_PIN_PIN39:
+            break;
+        case BCMOLT_GPIO_PIN_PIN40:
+            break;
+        case BCMOLT_GPIO_PIN_PIN41:
+            break;
+        case BCMOLT_GPIO_PIN_PIN42:
+            break;
+        case BCMOLT_GPIO_PIN_PIN43:
+            break;
+        case BCMOLT_GPIO_PIN_PIN44:
+            break;
+        case BCMOLT_GPIO_PIN_PIN45:
+            break;
+        case BCMOLT_GPIO_PIN_PIN46:
+            break;
+        case BCMOLT_GPIO_PIN_PIN47:
+            break;
+        case BCMOLT_GPIO_PIN_PIN48:
+            break;
+        case BCMOLT_GPIO_PIN_PIN49:
+            break;
+        case BCMOLT_GPIO_PIN_PIN50:
+            break;
+        case BCMOLT_GPIO_PIN_PIN51:
+            break;
+        case BCMOLT_GPIO_PIN_PIN52:
+            break;
+        case BCMOLT_GPIO_PIN_PIN53:
+            break;
+        case BCMOLT_GPIO_PIN_PIN54:
+            break;
+        case BCMOLT_GPIO_PIN_PIN55:
+            break;
+        case BCMOLT_GPIO_PIN_PIN56:
+            break;
+        case BCMOLT_GPIO_PIN_PIN57:
+            break;
+        case BCMOLT_GPIO_PIN_PIN58:
+            break;
+        case BCMOLT_GPIO_PIN_PIN59:
+            break;
+        case BCMOLT_GPIO_PIN_PIN60:
+            break;
+        case BCMOLT_GPIO_PIN_PIN61:
+            break;
+        case BCMOLT_GPIO_PIN_PIN62:
+            break;
+        case BCMOLT_GPIO_PIN_PIN63:
+            break;
+        case BCMOLT_GPIO_PIN_PIN64:
+            break;
+        case BCMOLT_GPIO_PIN_PIN65:
+            break;
+        case BCMOLT_GPIO_PIN_PIN66:
+            break;
+        case BCMOLT_GPIO_PIN_PIN67:
+            break;
+        case BCMOLT_GPIO_PIN_PIN68:
+            break;
+        case BCMOLT_GPIO_PIN_PIN69:
+            break;
+        case BCMOLT_GPIO_PIN_PIN70:
+            break;
+        case BCMOLT_GPIO_PIN_PIN71:
+            break;
+        case BCMOLT_GPIO_PIN_PIN72:
+            break;
+        case BCMOLT_GPIO_PIN_PIN73:
+            break;
+        case BCMOLT_GPIO_PIN_PIN74:
+            break;
+        case BCMOLT_GPIO_PIN_PIN75:
+            break;
+        case BCMOLT_GPIO_PIN_PIN76:
+            break;
+        case BCMOLT_GPIO_PIN_PIN77:
+            break;
+        case BCMOLT_GPIO_PIN_PIN78:
+            break;
+        case BCMOLT_GPIO_PIN_PIN79:
+            break;
+        case BCMOLT_GPIO_PIN_PIN80:
+            break;
+        case BCMOLT_GPIO_PIN_PIN81:
+            break;
+        case BCMOLT_GPIO_PIN_PIN82:
+            break;
+        case BCMOLT_GPIO_PIN_PIN83:
+            break;
+        case BCMOLT_GPIO_PIN_PIN84:
+            break;
+        case BCMOLT_GPIO_PIN_PIN85:
+            break;
+        case BCMOLT_GPIO_PIN_PIN86:
+            break;
+        case BCMOLT_GPIO_PIN_PIN87:
+            break;
+        case BCMOLT_GPIO_PIN_PIN88:
+            break;
+        case BCMOLT_GPIO_PIN_PIN89:
+            break;
+        case BCMOLT_GPIO_PIN_PIN90:
+            break;
+        case BCMOLT_GPIO_PIN_PIN91:
+            break;
+        case BCMOLT_GPIO_PIN_PIN92:
+            break;
+        case BCMOLT_GPIO_PIN_PIN93:
+            break;
+        case BCMOLT_GPIO_PIN_PIN94:
+            break;
+        case BCMOLT_GPIO_PIN_PIN95:
+            break;
+        case BCMOLT_GPIO_PIN_PIN96:
+            break;
+        case BCMOLT_GPIO_PIN_PIN97:
+            break;
+        case BCMOLT_GPIO_PIN_PIN98:
+            break;
+        case BCMOLT_GPIO_PIN_PIN99:
+            break;
+        case BCMOLT_GPIO_PIN_PIN100:
+            break;
+        case BCMOLT_GPIO_PIN_PIN101:
+            break;
+        case BCMOLT_GPIO_PIN_PIN102:
+            break;
+        case BCMOLT_GPIO_PIN_PIN103:
+            break;
+        case BCMOLT_GPIO_PIN_PIN104:
+            break;
+        case BCMOLT_GPIO_PIN_PIN105:
+            break;
+        case BCMOLT_GPIO_PIN_PIN106:
+            break;
+        case BCMOLT_GPIO_PIN_UNCONFIGURED:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    if ((this->options & 0xFFFFFFFCUL) != 0)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_pon_status_set_default(bcmolt_pon_status *this)
+{
+    this->state = BCMOLT_PON_STATE_INACTIVE;
+    this->los_status = BCMOLT_STATUS_OFF;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_status_pack(const bcmolt_pon_status *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_pon_state_pack(this->state, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_pack(this->los_status, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_status_unpack(bcmolt_pon_status *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_pon_state_unpack(&this->state, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_unpack(&this->los_status, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_status_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 2);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_pon_status_bounds_check(const bcmolt_pon_status *this)
+{
+    switch (this->state)
+    {
+        case BCMOLT_PON_STATE_INACTIVE:
+            break;
+        case BCMOLT_PON_STATE_PROCESSING:
+            break;
+        case BCMOLT_PON_STATE_ACTIVE_WORKING:
+            break;
+        case BCMOLT_PON_STATE_ACTIVE_STANDBY:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->los_status)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_prbs_checker_config_set_default(bcmolt_prbs_checker_config *this)
+{
+    this->polynom = BCMOLT_PRBS_POLYNOMIAL_PRBS_7;
+    this->mode = BCMOLT_PRBS_CHECKER_MODE_SELF_SYNC;
+    this->data_invert = BCMOS_FALSE;
+    this->control = BCMOLT_CONTROL_STATE_DISABLE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_prbs_checker_config_pack(const bcmolt_prbs_checker_config *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_prbs_polynomial_pack(this->polynom, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_prbs_checker_mode_pack(this->mode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_bool(buf, this->data_invert))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_control_state_pack(this->control, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_prbs_checker_config_unpack(bcmolt_prbs_checker_config *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_prbs_polynomial_unpack(&this->polynom, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_prbs_checker_mode_unpack(&this->mode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_bool(buf, &this->data_invert))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_control_state_unpack(&this->control, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_prbs_checker_config_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 4);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_prbs_checker_config_bounds_check(const bcmolt_prbs_checker_config *this)
+{
+    switch (this->polynom)
+    {
+        case BCMOLT_PRBS_POLYNOMIAL_PRBS_7:
+            break;
+        case BCMOLT_PRBS_POLYNOMIAL_PRBS_9:
+            break;
+        case BCMOLT_PRBS_POLYNOMIAL_PRBS_11:
+            break;
+        case BCMOLT_PRBS_POLYNOMIAL_PRBS_15:
+            break;
+        case BCMOLT_PRBS_POLYNOMIAL_PRBS_23:
+            break;
+        case BCMOLT_PRBS_POLYNOMIAL_PRBS_31:
+            break;
+        case BCMOLT_PRBS_POLYNOMIAL_PRBS_58:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->mode)
+    {
+        case BCMOLT_PRBS_CHECKER_MODE_SELF_SYNC:
+            break;
+        case BCMOLT_PRBS_CHECKER_MODE_INITIAL_SEED_MODE:
+            break;
+        case BCMOLT_PRBS_CHECKER_MODE_INITIAL_SEED_MODE_2:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->control)
+    {
+        case BCMOLT_CONTROL_STATE_DISABLE:
+            break;
+        case BCMOLT_CONTROL_STATE_ENABLE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_prbs_generator_config_set_default(bcmolt_prbs_generator_config *this)
+{
+    this->polynom = BCMOLT_PRBS_POLYNOMIAL_PRBS_7;
+    this->error_insert = BCMOS_FALSE;
+    this->invert = BCMOS_FALSE;
+    this->control = BCMOLT_CONTROL_STATE_DISABLE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_prbs_generator_config_pack(const bcmolt_prbs_generator_config *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_prbs_polynomial_pack(this->polynom, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_bool(buf, this->error_insert))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_bool(buf, this->invert))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_control_state_pack(this->control, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_prbs_generator_config_unpack(bcmolt_prbs_generator_config *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_prbs_polynomial_unpack(&this->polynom, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_bool(buf, &this->error_insert))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_bool(buf, &this->invert))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_control_state_unpack(&this->control, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_prbs_generator_config_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 4);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_prbs_generator_config_bounds_check(const bcmolt_prbs_generator_config *this)
+{
+    switch (this->polynom)
+    {
+        case BCMOLT_PRBS_POLYNOMIAL_PRBS_7:
+            break;
+        case BCMOLT_PRBS_POLYNOMIAL_PRBS_9:
+            break;
+        case BCMOLT_PRBS_POLYNOMIAL_PRBS_11:
+            break;
+        case BCMOLT_PRBS_POLYNOMIAL_PRBS_15:
+            break;
+        case BCMOLT_PRBS_POLYNOMIAL_PRBS_23:
+            break;
+        case BCMOLT_PRBS_POLYNOMIAL_PRBS_31:
+            break;
+        case BCMOLT_PRBS_POLYNOMIAL_PRBS_58:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->control)
+    {
+        case BCMOLT_CONTROL_STATE_DISABLE:
+            break;
+        case BCMOLT_CONTROL_STATE_ENABLE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_prbs_status_set_default(bcmolt_prbs_status *this)
+{
+    this->lock_state = BCMOLT_PRBS_LOCK_STATE_UNLOCKED;
+    this->error_counts = 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_prbs_status_pack(const bcmolt_prbs_status *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_prbs_lock_state_pack(this->lock_state, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->error_counts))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_prbs_status_unpack(bcmolt_prbs_status *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_prbs_lock_state_unpack(&this->lock_state, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->error_counts))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_prbs_status_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 5);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_prbs_status_bounds_check(const bcmolt_prbs_status *this)
+{
+    switch (this->lock_state)
+    {
+        case BCMOLT_PRBS_LOCK_STATE_UNLOCKED:
+            break;
+        case BCMOLT_PRBS_LOCK_STATE_LOCKED:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_ranging_control_configuration_set_default(bcmolt_ranging_control_configuration *this)
+{
+    this->wait_state_1_window_size = 0;
+    this->wait_state_2_window_size = 0;
+    this->wait_after_resync_4 = BCMOS_FALSE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ranging_control_configuration_pack(const bcmolt_ranging_control_configuration *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u8(buf, this->wait_state_1_window_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->wait_state_2_window_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_bool(buf, this->wait_after_resync_4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ranging_control_configuration_unpack(bcmolt_ranging_control_configuration *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u8(buf, &this->wait_state_1_window_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->wait_state_2_window_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_bool(buf, &this->wait_after_resync_4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ranging_control_configuration_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 3);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ranging_control_configuration_bounds_check(const bcmolt_ranging_control_configuration *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_ranging_resync_conditions_set_default(bcmolt_ranging_resync_conditions *this)
+{
+    this->after_init = BCMOS_FALSE;
+    this->after_no_ed = BCMOS_FALSE;
+    this->after_ed = BCMOS_FALSE;
+    this->after_no_del = BCMOS_FALSE;
+    this->after_ranging_access = BCMOS_FALSE;
+    this->med_val = 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ranging_resync_conditions_pack(const bcmolt_ranging_resync_conditions *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_bool(buf, this->after_init))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_bool(buf, this->after_no_ed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_bool(buf, this->after_ed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_bool(buf, this->after_no_del))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_bool(buf, this->after_ranging_access))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u16(buf, this->med_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ranging_resync_conditions_unpack(bcmolt_ranging_resync_conditions *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_bool(buf, &this->after_init))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_bool(buf, &this->after_no_ed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_bool(buf, &this->after_ed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_bool(buf, &this->after_no_del))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_bool(buf, &this->after_ranging_access))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u16(buf, &this->med_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ranging_resync_conditions_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 7);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ranging_resync_conditions_bounds_check(const bcmolt_ranging_resync_conditions *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_ranging_rssi_control_set_default(bcmolt_ranging_rssi_control *this)
+{
+    this->after_no_ed = BCMOS_FALSE;
+    this->after_ed = BCMOS_FALSE;
+    this->after_reset_3 = BCMOS_FALSE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ranging_rssi_control_pack(const bcmolt_ranging_rssi_control *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_bool(buf, this->after_no_ed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_bool(buf, this->after_ed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_bool(buf, this->after_reset_3))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ranging_rssi_control_unpack(bcmolt_ranging_rssi_control *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_bool(buf, &this->after_no_ed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_bool(buf, &this->after_ed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_bool(buf, &this->after_reset_3))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ranging_rssi_control_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 3);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ranging_rssi_control_bounds_check(const bcmolt_ranging_rssi_control *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_request_registration_status_set_default(bcmolt_request_registration_status *this)
+{
+    this->request_registration_state = BCMOLT_CONTROL_STATE_DISABLE;
+    this->sma_flag = BCMOS_FALSE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_request_registration_status_pack(const bcmolt_request_registration_status *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_control_state_pack(this->request_registration_state, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_bool(buf, this->sma_flag))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_request_registration_status_unpack(bcmolt_request_registration_status *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_control_state_unpack(&this->request_registration_state, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_bool(buf, &this->sma_flag))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_request_registration_status_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 2);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_request_registration_status_bounds_check(const bcmolt_request_registration_status *this)
+{
+    switch (this->request_registration_state)
+    {
+        case BCMOLT_CONTROL_STATE_DISABLE:
+            break;
+        case BCMOLT_CONTROL_STATE_ENABLE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_rogue_detection_special_map_set_default(bcmolt_rogue_detection_special_map *this)
+{
+    this->plo_size = 0;
+    this->alloc_id = (bcmolt_pon_alloc_id) 0;
+    this->onu_id = (bcmolt_pon_onu_id) 0;
+    this->access_size = 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_rogue_detection_special_map_pack(const bcmolt_rogue_detection_special_map *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u32(buf, this->plo_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u16(buf, (uint16_t) this->alloc_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u16(buf, (uint16_t) this->onu_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->access_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_rogue_detection_special_map_unpack(bcmolt_rogue_detection_special_map *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u32(buf, &this->plo_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->alloc_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->onu_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->access_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_rogue_detection_special_map_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 9);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_rogue_detection_special_map_bounds_check(const bcmolt_rogue_detection_special_map *this)
+{
+    if (this->alloc_id > (bcmolt_pon_alloc_id) 16383)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->onu_id > (bcmolt_pon_onu_id) 511)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_rogue_detection_special_map_list_u32_max_8_set_default(bcmolt_rogue_detection_special_map_list_u32_max_8 *this)
+{
+    this->len = 0;
+    this->val = NULL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_rogue_detection_special_map_list_u32_max_8_pack(const bcmolt_rogue_detection_special_map_list_u32_max_8 *this, bcmolt_buf *buf)
+{
+    uint32_t i0;
+    if (!bcmolt_buf_write_u32(buf, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_rogue_detection_special_map_list_u32_max_8\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    if (this->len > 8)
+    {
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_rogue_detection_special_map_pack(&this->val[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_rogue_detection_special_map_list_u32_max_8_get_packed_length(const bcmolt_rogue_detection_special_map_list_u32_max_8 *this)
+{
+    return 4 + (9 * this->len);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_rogue_detection_special_map_list_u32_max_8_unpack(bcmolt_rogue_detection_special_map_list_u32_max_8 *this, bcmolt_buf *buf, void **extra_mem)
+{
+    uint32_t i0;
+    if (!bcmolt_buf_read_u32(buf, &this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_rogue_detection_special_map_list_u32_max_8\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->val = (bcmolt_rogue_detection_special_map *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->len * sizeof(bcmolt_rogue_detection_special_map));
+        }
+    }
+
+    if (this->len > 8)
+    {
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_rogue_detection_special_map_unpack(&this->val[i0], buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_rogue_detection_special_map_list_u32_max_8_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    uint32_t len;
+    if (!bcmolt_buf_read_u32(packed, &len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_rogue_detection_special_map) * len);
+    if (!bcmolt_buf_skip(packed, len * 9))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_rogue_detection_special_map_list_u32_max_8_bounds_check(const bcmolt_rogue_detection_special_map_list_u32_max_8 *this)
+{
+    if (this->len > 8)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_rogue_detection_algorithm_set_default(bcmolt_rogue_detection_algorithm *this)
+{
+    this->algorithm_type = (bcmolt_rogue_detection_algorithm_type) 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_rogue_detection_algorithm_pack(const bcmolt_rogue_detection_algorithm *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_rogue_detection_algorithm_type_pack(this->algorithm_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->algorithm_type)
+    {
+        case BCMOLT_ROGUE_DETECTION_ALGORITHM_TYPE_EARLY_ROGUE_DETECTION:
+            {
+                if (!bcmolt_rogue_detection_window_pack(this->u.early_rogue_detection.measurement_type, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_buf_write_u32(buf, this->u.early_rogue_detection.interval))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_buf_write_bool(buf, this->u.early_rogue_detection.second_ranging_window))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_alloc_type_to_scan_pack(this->u.early_rogue_detection.alloc_type_to_scan, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_ROGUE_DETECTION_ALGORITHM_TYPE_SPECIAL_MAP:
+            {
+                if (!bcmolt_rogue_detection_special_map_list_u32_max_8_pack(&this->u.special_map.accesses, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_ROGUE_DETECTION_ALGORITHM_TYPE_EXTENDED_GUARD_TIME:
+            {
+                if (!bcmolt_buf_write_u32(buf, this->u.extended_guard_time.additional_guard_time))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_rogue_detection_algorithm_get_packed_length(const bcmolt_rogue_detection_algorithm *this)
+{
+    uint32_t count = 1;
+    switch (this->algorithm_type)
+    {
+        case BCMOLT_ROGUE_DETECTION_ALGORITHM_TYPE_EARLY_ROGUE_DETECTION:
+            {
+                count += 7;
+            }
+            break;
+        case BCMOLT_ROGUE_DETECTION_ALGORITHM_TYPE_SPECIAL_MAP:
+            {
+                count += bcmolt_rogue_detection_special_map_list_u32_max_8_get_packed_length(&this->u.special_map.accesses);
+            }
+            break;
+        case BCMOLT_ROGUE_DETECTION_ALGORITHM_TYPE_EXTENDED_GUARD_TIME:
+            {
+                count += 4;
+            }
+            break;
+        default:
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_rogue_detection_algorithm_unpack(bcmolt_rogue_detection_algorithm *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_rogue_detection_algorithm_type_unpack(&this->algorithm_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->algorithm_type)
+    {
+        case BCMOLT_ROGUE_DETECTION_ALGORITHM_TYPE_EARLY_ROGUE_DETECTION:
+            {
+                if (!bcmolt_rogue_detection_window_unpack(&this->u.early_rogue_detection.measurement_type, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_buf_read_u32(buf, &this->u.early_rogue_detection.interval))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_buf_read_bool(buf, &this->u.early_rogue_detection.second_ranging_window))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_alloc_type_to_scan_unpack(&this->u.early_rogue_detection.alloc_type_to_scan, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_ROGUE_DETECTION_ALGORITHM_TYPE_SPECIAL_MAP:
+            {
+                if (!bcmolt_rogue_detection_special_map_list_u32_max_8_unpack(&this->u.special_map.accesses, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_ROGUE_DETECTION_ALGORITHM_TYPE_EXTENDED_GUARD_TIME:
+            {
+                if (!bcmolt_buf_read_u32(buf, &this->u.extended_guard_time.additional_guard_time))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_rogue_detection_algorithm_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_rogue_detection_algorithm_type algorithm_type;
+    if (!bcmolt_rogue_detection_algorithm_type_unpack(&algorithm_type, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (algorithm_type)
+    {
+        case BCMOLT_ROGUE_DETECTION_ALGORITHM_TYPE_EARLY_ROGUE_DETECTION:
+            {
+                if (!bcmolt_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_ROGUE_DETECTION_ALGORITHM_TYPE_SPECIAL_MAP:
+            {
+                if (!bcmolt_rogue_detection_special_map_list_u32_max_8_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_ROGUE_DETECTION_ALGORITHM_TYPE_EXTENDED_GUARD_TIME:
+            {
+                if (!bcmolt_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_rogue_detection_algorithm_bounds_check(const bcmolt_rogue_detection_algorithm *this)
+{
+    switch (this->algorithm_type)
+    {
+        case BCMOLT_ROGUE_DETECTION_ALGORITHM_TYPE_EARLY_ROGUE_DETECTION:
+            {
+                switch (this->u.early_rogue_detection.measurement_type)
+                {
+                    case BCMOLT_ROGUE_DETECTION_WINDOW_SILENT_WINDOW:
+                        break;
+                    case BCMOLT_ROGUE_DETECTION_WINDOW_CUT_OFF_WINDOW:
+                        break;
+                    default:
+                        return BCMOS_FALSE;
+                }
+
+                if (this->u.early_rogue_detection.interval < 1000)
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.early_rogue_detection.interval > 10000000UL)
+                {
+                    return BCMOS_FALSE;
+                }
+
+                switch (this->u.early_rogue_detection.alloc_type_to_scan)
+                {
+                    case BCMOLT_ALLOC_TYPE_TO_SCAN_UNUSED:
+                        break;
+                    case BCMOLT_ALLOC_TYPE_TO_SCAN_PREVIOUSLY_USED:
+                        break;
+                    case BCMOLT_ALLOC_TYPE_TO_SCAN_ALL:
+                        break;
+                    default:
+                        return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_ROGUE_DETECTION_ALGORITHM_TYPE_SPECIAL_MAP:
+            {
+                if (this->u.special_map.accesses.len > 8)
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_rogue_detection_special_map_list_u32_max_8_bounds_check(&this->u.special_map.accesses))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_ROGUE_DETECTION_ALGORITHM_TYPE_EXTENDED_GUARD_TIME:
+            {
+                if (this->u.extended_guard_time.additional_guard_time > 500)
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_rogue_onu_detection_process_set_default(bcmolt_rogue_onu_detection_process *this)
+{
+    this->control = BCMOLT_CONTROL_STATE_DISABLE;
+    this->detection_algorithm.algorithm_type = BCMOLT_ROGUE_DETECTION_ALGORITHM_TYPE_EARLY_ROGUE_DETECTION;
+    this->detection_algorithm.u.early_rogue_detection.measurement_type = BCMOLT_ROGUE_DETECTION_WINDOW_SILENT_WINDOW;
+    this->detection_algorithm.u.early_rogue_detection.interval = 10000;
+    this->detection_algorithm.u.early_rogue_detection.second_ranging_window = BCMOS_FALSE;
+    this->detection_algorithm.u.early_rogue_detection.alloc_type_to_scan = BCMOLT_ALLOC_TYPE_TO_SCAN_ALL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_rogue_onu_detection_process_pack(const bcmolt_rogue_onu_detection_process *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_control_state_pack(this->control, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_rogue_detection_algorithm_pack(&this->detection_algorithm, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_rogue_onu_detection_process_get_packed_length(const bcmolt_rogue_onu_detection_process *this)
+{
+    return 1 + bcmolt_rogue_detection_algorithm_get_packed_length(&this->detection_algorithm);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_rogue_onu_detection_process_unpack(bcmolt_rogue_onu_detection_process *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_control_state_unpack(&this->control, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_rogue_detection_algorithm_unpack(&this->detection_algorithm, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_rogue_onu_detection_process_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    if (!bcmolt_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_rogue_detection_algorithm_scan(packed, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_rogue_onu_detection_process_bounds_check(const bcmolt_rogue_onu_detection_process *this)
+{
+    switch (this->control)
+    {
+        case BCMOLT_CONTROL_STATE_DISABLE:
+            break;
+        case BCMOLT_CONTROL_STATE_ENABLE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_rogue_detection_algorithm_bounds_check(&this->detection_algorithm))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_serdes_configuration_set_default(bcmolt_serdes_configuration *this)
+{
+    this->ranging_mode = BCMOLT_SERDES_RANGING_MODE_BCDR_RESET_MODE;
+    this->multi_ed_mode = BCMOS_FALSE;
+    this->burst_enable_start_offset = 0;
+    this->burst_enable_end_offset = 0;
+    this->ed_invertion = BCMOS_FALSE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_serdes_configuration_pack(const bcmolt_serdes_configuration *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_serdes_ranging_mode_pack(this->ranging_mode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_bool(buf, this->multi_ed_mode))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u16(buf, this->burst_enable_start_offset))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u16(buf, this->burst_enable_end_offset))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_bool(buf, this->ed_invertion))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_serdes_configuration_unpack(bcmolt_serdes_configuration *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_serdes_ranging_mode_unpack(&this->ranging_mode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_bool(buf, &this->multi_ed_mode))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u16(buf, &this->burst_enable_start_offset))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u16(buf, &this->burst_enable_end_offset))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_bool(buf, &this->ed_invertion))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_serdes_configuration_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 7);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_serdes_configuration_bounds_check(const bcmolt_serdes_configuration *this)
+{
+    switch (this->ranging_mode)
+    {
+        case BCMOLT_SERDES_RANGING_MODE_ED_MODE:
+            break;
+        case BCMOLT_SERDES_RANGING_MODE_BCDR_RESET_MODE:
+            break;
+        case BCMOLT_SERDES_RANGING_MODE_FAST_MODE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_serial_number_set_default(bcmolt_serial_number *this)
+{
+    memset(this->vendor_id, 0, sizeof(this->vendor_id));
+    memset(this->vendor_specific, 0, sizeof(this->vendor_specific));
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_serial_number_pack(const bcmolt_serial_number *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write(buf, this->vendor_id, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write(buf, this->vendor_specific, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_serial_number_unpack(bcmolt_serial_number *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read(buf, this->vendor_id, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read(buf, this->vendor_specific, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_serial_number_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 8);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_serial_number_bounds_check(const bcmolt_serial_number *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_solicited_scheduler_set_default(bcmolt_solicited_scheduler *this)
+{
+    this->bandwidth_Kbps = (bcmolt_bandwidth_Kbps) 0;
+    this->max_burst_size_tq = (bcmolt_time_quanta) 0;
+    this->priority = 0;
+    this->weight_tq = (bcmolt_time_quanta) 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_solicited_scheduler_pack(const bcmolt_solicited_scheduler *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u32(buf, (uint32_t) this->bandwidth_Kbps))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, (uint32_t) this->max_burst_size_tq))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->priority))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, (uint32_t) this->weight_tq))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_solicited_scheduler_unpack(bcmolt_solicited_scheduler *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u32(buf, (uint32_t *) &this->bandwidth_Kbps))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, (uint32_t *) &this->max_burst_size_tq))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->priority))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, (uint32_t *) &this->weight_tq))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_solicited_scheduler_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 13);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_solicited_scheduler_bounds_check(const bcmolt_solicited_scheduler *this)
+{
+    if (this->priority > 7)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->weight_tq > (bcmolt_time_quanta) 262106UL)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_stat_alarm_trigger_config_set_default(bcmolt_stat_alarm_trigger_config *this)
+{
+    this->type = (bcmolt_stat_condition_type) 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_stat_alarm_trigger_config_pack(const bcmolt_stat_alarm_trigger_config *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_stat_condition_type_pack(this->type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->type)
+    {
+        case BCMOLT_STAT_CONDITION_TYPE_RATE_THRESHOLD:
+            {
+                if (!bcmolt_buf_write_u64(buf, this->u.rate_threshold.rising))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_buf_write_u64(buf, this->u.rate_threshold.falling))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_STAT_CONDITION_TYPE_RATE_RANGE:
+            {
+                if (!bcmolt_buf_write_u64(buf, this->u.rate_range.upper))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_buf_write_u64(buf, this->u.rate_range.lower))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_STAT_CONDITION_TYPE_VALUE_THRESHOLD:
+            {
+                if (!bcmolt_buf_write_u64(buf, this->u.value_threshold.limit))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_STAT_CONDITION_TYPE_NONE:
+            {
+            }
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_stat_alarm_trigger_config_get_packed_length(const bcmolt_stat_alarm_trigger_config *this)
+{
+    uint32_t count = 1;
+    switch (this->type)
+    {
+        case BCMOLT_STAT_CONDITION_TYPE_RATE_THRESHOLD:
+            {
+                count += 16;
+            }
+            break;
+        case BCMOLT_STAT_CONDITION_TYPE_RATE_RANGE:
+            {
+                count += 16;
+            }
+            break;
+        case BCMOLT_STAT_CONDITION_TYPE_VALUE_THRESHOLD:
+            {
+                count += 8;
+            }
+            break;
+        case BCMOLT_STAT_CONDITION_TYPE_NONE:
+            {
+            }
+            break;
+        default:
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_stat_alarm_trigger_config_unpack(bcmolt_stat_alarm_trigger_config *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_stat_condition_type_unpack(&this->type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->type)
+    {
+        case BCMOLT_STAT_CONDITION_TYPE_RATE_THRESHOLD:
+            {
+                if (!bcmolt_buf_read_u64(buf, &this->u.rate_threshold.rising))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_buf_read_u64(buf, &this->u.rate_threshold.falling))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_STAT_CONDITION_TYPE_RATE_RANGE:
+            {
+                if (!bcmolt_buf_read_u64(buf, &this->u.rate_range.upper))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_buf_read_u64(buf, &this->u.rate_range.lower))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_STAT_CONDITION_TYPE_VALUE_THRESHOLD:
+            {
+                if (!bcmolt_buf_read_u64(buf, &this->u.value_threshold.limit))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_STAT_CONDITION_TYPE_NONE:
+            {
+            }
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_stat_alarm_trigger_config_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_stat_condition_type type;
+    if (!bcmolt_stat_condition_type_unpack(&type, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (type)
+    {
+        case BCMOLT_STAT_CONDITION_TYPE_RATE_THRESHOLD:
+            {
+                if (!bcmolt_buf_skip(packed, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_buf_skip(packed, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_STAT_CONDITION_TYPE_RATE_RANGE:
+            {
+                if (!bcmolt_buf_skip(packed, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_buf_skip(packed, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_STAT_CONDITION_TYPE_VALUE_THRESHOLD:
+            {
+                if (!bcmolt_buf_skip(packed, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_STAT_CONDITION_TYPE_NONE:
+            {
+            }
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_stat_alarm_trigger_config_bounds_check(const bcmolt_stat_alarm_trigger_config *this)
+{
+    switch (this->type)
+    {
+        case BCMOLT_STAT_CONDITION_TYPE_RATE_THRESHOLD:
+            {
+            }
+            break;
+        case BCMOLT_STAT_CONDITION_TYPE_RATE_RANGE:
+            {
+            }
+            break;
+        case BCMOLT_STAT_CONDITION_TYPE_VALUE_THRESHOLD:
+            {
+            }
+            break;
+        case BCMOLT_STAT_CONDITION_TYPE_NONE:
+            {
+            }
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_stat_alarm_soak_config_set_default(bcmolt_stat_alarm_soak_config *this)
+{
+    this->active_soak_time = 0;
+    this->clear_soak_time = 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_stat_alarm_soak_config_pack(const bcmolt_stat_alarm_soak_config *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u32(buf, this->active_soak_time))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->clear_soak_time))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_stat_alarm_soak_config_unpack(bcmolt_stat_alarm_soak_config *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u32(buf, &this->active_soak_time))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->clear_soak_time))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_stat_alarm_soak_config_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 8);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_stat_alarm_soak_config_bounds_check(const bcmolt_stat_alarm_soak_config *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_stat_alarm_config_set_default(bcmolt_stat_alarm_config *this)
+{
+    this->trigger.type = BCMOLT_STAT_CONDITION_TYPE_NONE;
+    this->soak.active_soak_time = 0;
+    this->soak.clear_soak_time = 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_stat_alarm_config_pack(const bcmolt_stat_alarm_config *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_stat_alarm_trigger_config_pack(&this->trigger, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_stat_alarm_soak_config_pack(&this->soak, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_stat_alarm_config_get_packed_length(const bcmolt_stat_alarm_config *this)
+{
+    return 8 + bcmolt_stat_alarm_trigger_config_get_packed_length(&this->trigger);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_stat_alarm_config_unpack(bcmolt_stat_alarm_config *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_stat_alarm_trigger_config_unpack(&this->trigger, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_stat_alarm_soak_config_unpack(&this->soak, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_stat_alarm_config_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    if (!bcmolt_stat_alarm_trigger_config_scan(packed, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_skip(packed, 8))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_stat_alarm_config_bounds_check(const bcmolt_stat_alarm_config *this)
+{
+    if (!bcmolt_stat_alarm_trigger_config_bounds_check(&this->trigger))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_stat_alarm_soak_config_bounds_check(&this->soak))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_str_100_set_default(bcmolt_str_100 *this)
+{
+    memset(this->str, 0, 100);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_str_100_pack(const bcmolt_str_100 *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write(buf, this->str, 100))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_str_100_unpack(bcmolt_str_100 *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read(buf, this->str, 100))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_str_100_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 100);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_str_100_bounds_check(const bcmolt_str_100 *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_str_1000_set_default(bcmolt_str_1000 *this)
+{
+    memset(this->str, 0, 1000);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_str_1000_pack(const bcmolt_str_1000 *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write(buf, this->str, 1000))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_str_1000_unpack(bcmolt_str_1000 *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read(buf, this->str, 1000))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_str_1000_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 1000);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_str_1000_bounds_check(const bcmolt_str_1000 *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_str_2000_set_default(bcmolt_str_2000 *this)
+{
+    memset(this->str, 0, 2000);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_str_2000_pack(const bcmolt_str_2000 *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write(buf, this->str, 2000))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_str_2000_unpack(bcmolt_str_2000 *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read(buf, this->str, 2000))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_str_2000_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 2000);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_str_2000_bounds_check(const bcmolt_str_2000 *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_str_256_set_default(bcmolt_str_256 *this)
+{
+    memset(this->str, 0, 256);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_str_256_pack(const bcmolt_str_256 *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write(buf, this->str, 256))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_str_256_unpack(bcmolt_str_256 *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read(buf, this->str, 256))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_str_256_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 256);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_str_256_bounds_check(const bcmolt_str_256 *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_str_64_set_default(bcmolt_str_64 *this)
+{
+    memset(this->str, 0, 64);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_str_64_pack(const bcmolt_str_64 *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write(buf, this->str, 64))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_str_64_unpack(bcmolt_str_64 *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read(buf, this->str, 64))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_str_64_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 64);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_str_64_bounds_check(const bcmolt_str_64 *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_sw_error_set_default(bcmolt_sw_error *this)
+{
+    this->first_error_time_us = 0;
+    this->last_error_time_us = 0;
+    this->line_number = 0;
+    this->error_counter = 0;
+    this->instance = 0;
+    memset(this->filename, 0, 64);
+    memset(this->task_name, 0, 64);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_sw_error_pack(const bcmolt_sw_error *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u64(buf, this->first_error_time_us))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u64(buf, this->last_error_time_us))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->line_number))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->error_counter))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->instance))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write(buf, this->filename, 64))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write(buf, this->task_name, 64))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_sw_error_unpack(bcmolt_sw_error *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u64(buf, &this->first_error_time_us))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u64(buf, &this->last_error_time_us))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->line_number))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->error_counter))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->instance))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read(buf, this->filename, 64))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read(buf, this->task_name, 64))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_sw_error_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 156);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_sw_error_bounds_check(const bcmolt_sw_error *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_system_profile_set_default(bcmolt_system_profile *this)
+{
+    this->ng_2_sys_id = 0;
+    this->version = 0;
+    this->channel_spacing = 0;
+    this->us_operating_wavelength_bands = BCMOLT_US_OPERATING_WAVELENGTH_BANDS_EXPANDED_SPECTRUM_WIDE_BAND;
+    this->us_mse = 0;
+    this->loose_calibration_bound = BCMOLT_CALIBRATION_RECORD_UNSPECIFIED;
+    this->fsr = 0;
+    this->twdm_channel_count = 8;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_system_profile_pack(const bcmolt_system_profile *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u32(buf, this->ng_2_sys_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->version))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->channel_spacing))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_us_operating_wavelength_bands_pack(this->us_operating_wavelength_bands, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->us_mse))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_calibration_record_pack(this->loose_calibration_bound, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u16(buf, this->fsr))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->twdm_channel_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_system_profile_unpack(bcmolt_system_profile *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u32(buf, &this->ng_2_sys_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->version))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->channel_spacing))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_us_operating_wavelength_bands_unpack(&this->us_operating_wavelength_bands, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->us_mse))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_calibration_record_unpack(&this->loose_calibration_bound, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u16(buf, &this->fsr))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->twdm_channel_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_system_profile_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 12);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_system_profile_bounds_check(const bcmolt_system_profile *this)
+{
+    if (this->ng_2_sys_id > 1048575UL)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->version > 15)
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->us_operating_wavelength_bands)
+    {
+        case BCMOLT_US_OPERATING_WAVELENGTH_BANDS_EXPANDED_SPECTRUM_WIDE_BAND:
+            break;
+        case BCMOLT_US_OPERATING_WAVELENGTH_BANDS_EXPANDED_SPECTRUM_REDUCED_BAND:
+            break;
+        case BCMOLT_US_OPERATING_WAVELENGTH_BANDS_EXPANDED_SPECTRUM_NARROW_BAND:
+            break;
+        case BCMOLT_US_OPERATING_WAVELENGTH_BANDS_SHARED_SPECTRUM_WIDE_BAND:
+            break;
+        case BCMOLT_US_OPERATING_WAVELENGTH_BANDS_SHARED_SPECTRUM_REDUCED_BAND:
+            break;
+        case BCMOLT_US_OPERATING_WAVELENGTH_BANDS_SHARED_SPECTRUM_NARROW_BAND:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->loose_calibration_bound)
+    {
+        case BCMOLT_CALIBRATION_RECORD_UNSPECIFIED:
+            break;
+        case BCMOLT_CALIBRATION_RECORD_UNCALIBRATED:
+            break;
+        case BCMOLT_CALIBRATION_RECORD_LOOSE:
+            break;
+        case BCMOLT_CALIBRATION_RECORD_SUFFICIENT:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    if (this->twdm_channel_count > 15)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_trx_delimiter_set_default(bcmolt_trx_delimiter *this)
+{
+    this->pattern[0] = 171;
+    this->pattern[1] = 89;
+    this->pattern[2] = 131;
+    this->size = 3;
+    this->window_size = 124;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_delimiter_pack(const bcmolt_trx_delimiter *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write(buf, this->pattern, 3))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->window_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_delimiter_unpack(bcmolt_trx_delimiter *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read(buf, this->pattern, 3))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->window_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_delimiter_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 5);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_delimiter_bounds_check(const bcmolt_trx_delimiter *this)
+{
+    if (this->window_size < 2)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_trx_energy_detect_set_default(bcmolt_trx_energy_detect *this)
+{
+    this->ranging_ed_source = BCMOLT_ENERGY_DETECT_SOURCE_TRX;
+    this->delimiter_ed_source = BCMOLT_ENERGY_DETECT_SOURCE_TRX;
+    this->minimum_threshold = 0;
+    this->maximum_threshold = 41;
+    this->ed_pattern = 170;
+    this->ed_pattern_size = 0;
+    this->window_size = 124;
+    this->inversion = BCMOS_FALSE;
+    this->no_ed_threshold = 127;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_energy_detect_pack(const bcmolt_trx_energy_detect *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_energy_detect_source_pack(this->ranging_ed_source, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_energy_detect_source_pack(this->delimiter_ed_source, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->minimum_threshold))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->maximum_threshold))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->ed_pattern))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->ed_pattern_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->window_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_bool(buf, this->inversion))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->no_ed_threshold))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_energy_detect_unpack(bcmolt_trx_energy_detect *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_energy_detect_source_unpack(&this->ranging_ed_source, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_energy_detect_source_unpack(&this->delimiter_ed_source, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->minimum_threshold))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->maximum_threshold))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->ed_pattern))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->ed_pattern_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->window_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_bool(buf, &this->inversion))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->no_ed_threshold))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_energy_detect_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 9);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_energy_detect_bounds_check(const bcmolt_trx_energy_detect *this)
+{
+    switch (this->ranging_ed_source)
+    {
+        case BCMOLT_ENERGY_DETECT_SOURCE_INTERNAL:
+            break;
+        case BCMOLT_ENERGY_DETECT_SOURCE_TRX:
+            break;
+        case BCMOLT_ENERGY_DETECT_SOURCE_BCDR:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->delimiter_ed_source)
+    {
+        case BCMOLT_ENERGY_DETECT_SOURCE_INTERNAL:
+            break;
+        case BCMOLT_ENERGY_DETECT_SOURCE_TRX:
+            break;
+        case BCMOLT_ENERGY_DETECT_SOURCE_BCDR:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    if (this->window_size < 2)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_trx_preamble_set_default(bcmolt_trx_preamble *this)
+{
+    this->type_1_size = 0;
+    this->type_2_size = 0;
+    this->type_3_pre_ranging_size = 50;
+    this->type_3_post_ranging_size = 15;
+    this->type_3_pattern = 170;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_preamble_pack(const bcmolt_trx_preamble *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u8(buf, this->type_1_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->type_2_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->type_3_pre_ranging_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->type_3_post_ranging_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->type_3_pattern))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_preamble_unpack(bcmolt_trx_preamble *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u8(buf, &this->type_1_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->type_2_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->type_3_pre_ranging_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->type_3_post_ranging_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->type_3_pattern))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_preamble_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 5);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_preamble_bounds_check(const bcmolt_trx_preamble *this)
+{
+    if (this->type_3_post_ranging_size < 5)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->type_3_post_ranging_size > 120)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_trx_rx_configuration_set_default(bcmolt_trx_rx_configuration *this)
+{
+    this->wait_window_size = 0;
+    this->ranging_access_window_size = 15;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_rx_configuration_pack(const bcmolt_trx_rx_configuration *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u8(buf, this->wait_window_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->ranging_access_window_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_rx_configuration_unpack(bcmolt_trx_rx_configuration *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u8(buf, &this->wait_window_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->ranging_access_window_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_rx_configuration_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 2);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_rx_configuration_bounds_check(const bcmolt_trx_rx_configuration *this)
+{
+    if (this->ranging_access_window_size < 7)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_u32_list_u32_max_500_hex_set_default(bcmolt_u32_list_u32_max_500_hex *this)
+{
+    this->len = 0;
+    this->val = NULL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_u32_list_u32_max_500_hex_pack(const bcmolt_u32_list_u32_max_500_hex *this, bcmolt_buf *buf)
+{
+    uint32_t i0;
+    if (!bcmolt_buf_write_u32(buf, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_u32_list_u32_max_500_hex\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    if (this->len > 500)
+    {
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->val[i0]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_u32_list_u32_max_500_hex_get_packed_length(const bcmolt_u32_list_u32_max_500_hex *this)
+{
+    return 4 + (4 * this->len);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_u32_list_u32_max_500_hex_unpack(bcmolt_u32_list_u32_max_500_hex *this, bcmolt_buf *buf, void **extra_mem)
+{
+    uint32_t i0;
+    if (!bcmolt_buf_read_u32(buf, &this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_u32_list_u32_max_500_hex\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->val = (uint32_t *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->len * sizeof(uint32_t));
+        }
+    }
+
+    if (this->len > 500)
+    {
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->val[i0]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_u32_list_u32_max_500_hex_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    uint32_t len;
+    if (!bcmolt_buf_read_u32(packed, &len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint32_t) * len);
+    if (!bcmolt_buf_skip(packed, len * 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_u32_list_u32_max_500_hex_bounds_check(const bcmolt_u32_list_u32_max_500_hex *this)
+{
+    if (this->len > 500)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_u8_list_u16_hex_set_default(bcmolt_u8_list_u16_hex *this)
+{
+    this->len = 0;
+    this->val = NULL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_u8_list_u16_hex_pack(const bcmolt_u8_list_u16_hex *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u16(buf, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_u8_list_u16_hex\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write(buf, this->val, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_u8_list_u16_hex_get_packed_length(const bcmolt_u8_list_u16_hex *this)
+{
+    return 2 + this->len;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_u8_list_u16_hex_unpack(bcmolt_u8_list_u16_hex *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u16(buf, &this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_u8_list_u16_hex\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->val = (uint8_t *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->len * sizeof(uint8_t));
+        }
+    }
+
+    if (!bcmolt_buf_read(buf, this->val, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_u8_list_u16_hex_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    uint16_t len;
+    if (!bcmolt_buf_read_u16(packed, &len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * len);
+    if (!bcmolt_buf_skip(packed, len * 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_u8_list_u16_hex_bounds_check(const bcmolt_u8_list_u16_hex *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_u8_list_u32_set_default(bcmolt_u8_list_u32 *this)
+{
+    this->len = 0;
+    this->val = NULL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_u8_list_u32_pack(const bcmolt_u8_list_u32 *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u32(buf, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_u8_list_u32\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write(buf, this->val, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_u8_list_u32_get_packed_length(const bcmolt_u8_list_u32 *this)
+{
+    return 4 + this->len;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_u8_list_u32_unpack(bcmolt_u8_list_u32 *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u32(buf, &this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_u8_list_u32\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->val = (uint8_t *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->len * sizeof(uint8_t));
+        }
+    }
+
+    if (!bcmolt_buf_read(buf, this->val, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_u8_list_u32_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    uint32_t len;
+    if (!bcmolt_buf_read_u32(packed, &len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * len);
+    if (!bcmolt_buf_skip(packed, len * 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_u8_list_u32_bounds_check(const bcmolt_u8_list_u32 *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_u8_list_u32_max_2048_set_default(bcmolt_u8_list_u32_max_2048 *this)
+{
+    this->len = 0;
+    this->val = NULL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_u8_list_u32_max_2048_pack(const bcmolt_u8_list_u32_max_2048 *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u32(buf, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_u8_list_u32_max_2048\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    if (this->len > 2048)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write(buf, this->val, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_u8_list_u32_max_2048_get_packed_length(const bcmolt_u8_list_u32_max_2048 *this)
+{
+    return 4 + this->len;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_u8_list_u32_max_2048_unpack(bcmolt_u8_list_u32_max_2048 *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u32(buf, &this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_u8_list_u32_max_2048\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->val = (uint8_t *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->len * sizeof(uint8_t));
+        }
+    }
+
+    if (this->len > 2048)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read(buf, this->val, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_u8_list_u32_max_2048_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    uint32_t len;
+    if (!bcmolt_buf_read_u32(packed, &len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * len);
+    if (!bcmolt_buf_skip(packed, len * 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_u8_list_u32_max_2048_bounds_check(const bcmolt_u8_list_u32_max_2048 *this)
+{
+    if (this->len > 2048)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_ubd_info_set_default(bcmolt_ubd_info *this)
+{
+    this->actual_polling_interval = 0;
+    this->actual_grant_threshold_tq = (bcmolt_time_quanta) 0;
+    this->actual_min_schedulershaper.actual_mbs_tq = (bcmolt_time_quanta) 0;
+    this->actual_min_schedulershaper.actual_weight_tq = (bcmolt_time_quanta) 0;
+    this->actual_max_schedulershaper.actual_mbs_tq = (bcmolt_time_quanta) 0;
+    this->actual_max_schedulershaper.actual_weight_tq = (bcmolt_time_quanta) 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ubd_info_pack(const bcmolt_ubd_info *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u16(buf, this->actual_polling_interval))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, (uint32_t) this->actual_grant_threshold_tq))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_actual_schedulershaper_pack(&this->actual_min_schedulershaper, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_actual_schedulershaper_pack(&this->actual_max_schedulershaper, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ubd_info_unpack(bcmolt_ubd_info *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u16(buf, &this->actual_polling_interval))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, (uint32_t *) &this->actual_grant_threshold_tq))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_actual_schedulershaper_unpack(&this->actual_min_schedulershaper, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_actual_schedulershaper_unpack(&this->actual_max_schedulershaper, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ubd_info_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 22);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ubd_info_bounds_check(const bcmolt_ubd_info *this)
+{
+    if (!bcmolt_actual_schedulershaper_bounds_check(&this->actual_min_schedulershaper))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_actual_schedulershaper_bounds_check(&this->actual_max_schedulershaper))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_upstream_bandwidth_distribution_set_default(bcmolt_upstream_bandwidth_distribution *this)
+{
+    this->polling_interval_us = BCMOLT_POLLING_INTERVAL_AUTOMATIC;
+    this->grant_threshold_tq = (bcmolt_time_quanta) 0;
+    this->min_schedulershaper.bandwidth_Kbps = (bcmolt_bandwidth_Kbps) 0;
+    this->min_schedulershaper.max_burst_size_tq = (bcmolt_time_quanta) 0;
+    this->min_schedulershaper.priority = 0;
+    this->min_schedulershaper.weight_tq = (bcmolt_time_quanta) 0;
+    this->max_schedulershaper.bandwidth_Kbps = (bcmolt_bandwidth_Kbps) 0;
+    this->max_schedulershaper.max_burst_size_tq = (bcmolt_time_quanta) 0;
+    this->max_schedulershaper.priority = 0;
+    this->max_schedulershaper.weight_tq = (bcmolt_time_quanta) 0;
+    this->tdm_grant_size_tq = (bcmolt_time_quanta) 0;
+    this->tdm_grant_interval_us = 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_upstream_bandwidth_distribution_pack(const bcmolt_upstream_bandwidth_distribution *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_polling_interval_pack(this->polling_interval_us, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, (uint32_t) this->grant_threshold_tq))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_solicited_scheduler_pack(&this->min_schedulershaper, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_solicited_scheduler_pack(&this->max_schedulershaper, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, (uint32_t) this->tdm_grant_size_tq))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->tdm_grant_interval_us))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_upstream_bandwidth_distribution_unpack(bcmolt_upstream_bandwidth_distribution *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_polling_interval_unpack(&this->polling_interval_us, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, (uint32_t *) &this->grant_threshold_tq))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_solicited_scheduler_unpack(&this->min_schedulershaper, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_solicited_scheduler_unpack(&this->max_schedulershaper, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, (uint32_t *) &this->tdm_grant_size_tq))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->tdm_grant_interval_us))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_upstream_bandwidth_distribution_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 42);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_upstream_bandwidth_distribution_bounds_check(const bcmolt_upstream_bandwidth_distribution *this)
+{
+    switch (this->polling_interval_us)
+    {
+        case BCMOLT_POLLING_INTERVAL_POLLING_DISABLED:
+            break;
+        case BCMOLT_POLLING_INTERVAL_US_500:
+            break;
+        case BCMOLT_POLLING_INTERVAL_MS_1:
+            break;
+        case BCMOLT_POLLING_INTERVAL_MS_2:
+            break;
+        case BCMOLT_POLLING_INTERVAL_MS_4:
+            break;
+        case BCMOLT_POLLING_INTERVAL_MS_8:
+            break;
+        case BCMOLT_POLLING_INTERVAL_MS_16:
+            break;
+        case BCMOLT_POLLING_INTERVAL_AUTOMATIC:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    if (this->grant_threshold_tq > (bcmolt_time_quanta) 65408UL)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_solicited_scheduler_bounds_check(&this->min_schedulershaper))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_solicited_scheduler_bounds_check(&this->max_schedulershaper))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->tdm_grant_size_tq > (bcmolt_time_quanta) 65408UL)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->tdm_grant_interval_us > 50000UL)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_vlan_tag_set_default(bcmolt_vlan_tag *this)
+{
+    this->vlan_id = (bcmolt_vlan_id) 0;
+    this->pbit = 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_vlan_tag_pack(const bcmolt_vlan_tag *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u16(buf, (uint16_t) this->vlan_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->pbit))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_vlan_tag_unpack(bcmolt_vlan_tag *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->vlan_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->pbit))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_vlan_tag_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 3);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_vlan_tag_bounds_check(const bcmolt_vlan_tag *this)
+{
+    if (this->vlan_id > (bcmolt_vlan_id) 4095)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->pbit > 7)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_alloc_with_state_set_default(bcmolt_xgpon_alloc_with_state *this)
+{
+    this->alloc_id = (bcmolt_xgpon_alloc_id) 0;
+    this->state = BCMOLT_ALLOC_STATE_NOT_CONFIGURED;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_with_state_pack(const bcmolt_xgpon_alloc_with_state *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u16(buf, (uint16_t) this->alloc_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_alloc_state_pack(this->state, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_with_state_unpack(bcmolt_xgpon_alloc_with_state *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->alloc_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_alloc_state_unpack(&this->state, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_with_state_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 3);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_with_state_bounds_check(const bcmolt_xgpon_alloc_with_state *this)
+{
+    if (this->alloc_id > (bcmolt_xgpon_alloc_id) 16383)
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->state)
+    {
+        case BCMOLT_ALLOC_STATE_NOT_CONFIGURED:
+            break;
+        case BCMOLT_ALLOC_STATE_INACTIVE:
+            break;
+        case BCMOLT_ALLOC_STATE_PROCESSING:
+            break;
+        case BCMOLT_ALLOC_STATE_ACTIVE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_alloc_with_state_list_u16_max_32_set_default(bcmolt_xgpon_alloc_with_state_list_u16_max_32 *this)
+{
+    this->len = 0;
+    this->val = NULL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_with_state_list_u16_max_32_pack(const bcmolt_xgpon_alloc_with_state_list_u16_max_32 *this, bcmolt_buf *buf)
+{
+    uint16_t i0;
+    if (!bcmolt_buf_write_u16(buf, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_xgpon_alloc_with_state_list_u16_max_32\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    if (this->len > 32)
+    {
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_xgpon_alloc_with_state_pack(&this->val[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_alloc_with_state_list_u16_max_32_get_packed_length(const bcmolt_xgpon_alloc_with_state_list_u16_max_32 *this)
+{
+    return 2 + (3 * this->len);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_with_state_list_u16_max_32_unpack(bcmolt_xgpon_alloc_with_state_list_u16_max_32 *this, bcmolt_buf *buf, void **extra_mem)
+{
+    uint16_t i0;
+    if (!bcmolt_buf_read_u16(buf, &this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_xgpon_alloc_with_state_list_u16_max_32\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->val = (bcmolt_xgpon_alloc_with_state *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->len * sizeof(bcmolt_xgpon_alloc_with_state));
+        }
+    }
+
+    if (this->len > 32)
+    {
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_xgpon_alloc_with_state_unpack(&this->val[i0], buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_with_state_list_u16_max_32_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    uint16_t len;
+    if (!bcmolt_buf_read_u16(packed, &len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_xgpon_alloc_with_state) * len);
+    if (!bcmolt_buf_skip(packed, len * 3))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_with_state_list_u16_max_32_bounds_check(const bcmolt_xgpon_alloc_with_state_list_u16_max_32 *this)
+{
+    if (this->len > 32)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_ed_state_set_default(bcmolt_xgpon_ed_state *this)
+{
+    this->reset_on_ed_fail = BCMOS_FALSE;
+    this->reset_on_ed_success = BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ed_state_pack(const bcmolt_xgpon_ed_state *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_bool(buf, this->reset_on_ed_fail))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_bool(buf, this->reset_on_ed_success))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ed_state_unpack(bcmolt_xgpon_ed_state *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_bool(buf, &this->reset_on_ed_fail))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_bool(buf, &this->reset_on_ed_success))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ed_state_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 2);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ed_state_bounds_check(const bcmolt_xgpon_ed_state *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_gem_id_list_u8_max_16_set_default(bcmolt_xgpon_gem_id_list_u8_max_16 *this)
+{
+    this->len = 0;
+    this->val = NULL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_id_list_u8_max_16_pack(const bcmolt_xgpon_gem_id_list_u8_max_16 *this, bcmolt_buf *buf)
+{
+    uint8_t i0;
+    if (!bcmolt_buf_write_u8(buf, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_xgpon_gem_id_list_u8_max_16\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    if (this->len > 16)
+    {
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->val[i0]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_gem_id_list_u8_max_16_get_packed_length(const bcmolt_xgpon_gem_id_list_u8_max_16 *this)
+{
+    return 1 + (2 * this->len);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_id_list_u8_max_16_unpack(bcmolt_xgpon_gem_id_list_u8_max_16 *this, bcmolt_buf *buf, void **extra_mem)
+{
+    uint8_t i0;
+    if (!bcmolt_buf_read_u8(buf, &this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_xgpon_gem_id_list_u8_max_16\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->val = (bcmolt_xgpon_gem_id *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->len * sizeof(bcmolt_xgpon_gem_id));
+        }
+    }
+
+    if (this->len > 16)
+    {
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->val[i0]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_id_list_u8_max_16_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    uint8_t len;
+    if (!bcmolt_buf_read_u8(packed, &len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_xgpon_gem_id) * len);
+    if (!bcmolt_buf_skip(packed, len * 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_id_list_u8_max_16_bounds_check(const bcmolt_xgpon_gem_id_list_u8_max_16 *this)
+{
+    if (this->len > 16)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_gem_port_with_state_set_default(bcmolt_xgpon_gem_port_with_state *this)
+{
+    this->gem_id = (bcmolt_xgpon_gem_id) 0;
+    this->state = BCMOLT_XGPON_GEM_PORT_STATE_NOT_CONFIGURED;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_with_state_pack(const bcmolt_xgpon_gem_port_with_state *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u16(buf, (uint16_t) this->gem_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_xgpon_gem_port_state_pack(this->state, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_with_state_unpack(bcmolt_xgpon_gem_port_with_state *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->gem_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_xgpon_gem_port_state_unpack(&this->state, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_with_state_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 3);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_with_state_bounds_check(const bcmolt_xgpon_gem_port_with_state *this)
+{
+    if (this->gem_id > (bcmolt_xgpon_gem_id) 65533U)
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->state)
+    {
+        case BCMOLT_XGPON_GEM_PORT_STATE_NOT_CONFIGURED:
+            break;
+        case BCMOLT_XGPON_GEM_PORT_STATE_INACTIVE:
+            break;
+        case BCMOLT_XGPON_GEM_PORT_STATE_ACTIVE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_gem_port_with_state_list_u16_max_128_set_default(bcmolt_xgpon_gem_port_with_state_list_u16_max_128 *this)
+{
+    this->len = 0;
+    this->val = NULL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_with_state_list_u16_max_128_pack(const bcmolt_xgpon_gem_port_with_state_list_u16_max_128 *this, bcmolt_buf *buf)
+{
+    uint16_t i0;
+    if (!bcmolt_buf_write_u16(buf, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_xgpon_gem_port_with_state_list_u16_max_128\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    if (this->len > 128)
+    {
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_xgpon_gem_port_with_state_pack(&this->val[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_gem_port_with_state_list_u16_max_128_get_packed_length(const bcmolt_xgpon_gem_port_with_state_list_u16_max_128 *this)
+{
+    return 2 + (3 * this->len);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_with_state_list_u16_max_128_unpack(bcmolt_xgpon_gem_port_with_state_list_u16_max_128 *this, bcmolt_buf *buf, void **extra_mem)
+{
+    uint16_t i0;
+    if (!bcmolt_buf_read_u16(buf, &this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_xgpon_gem_port_with_state_list_u16_max_128\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->val = (bcmolt_xgpon_gem_port_with_state *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->len * sizeof(bcmolt_xgpon_gem_port_with_state));
+        }
+    }
+
+    if (this->len > 128)
+    {
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_xgpon_gem_port_with_state_unpack(&this->val[i0], buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_with_state_list_u16_max_128_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    uint16_t len;
+    if (!bcmolt_buf_read_u16(packed, &len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_xgpon_gem_port_with_state) * len);
+    if (!bcmolt_buf_skip(packed, len * 3))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_with_state_list_u16_max_128_bounds_check(const bcmolt_xgpon_gem_port_with_state_list_u16_max_128 *this)
+{
+    if (this->len > 128)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_gem_port_with_state_list_u16_max_256_set_default(bcmolt_xgpon_gem_port_with_state_list_u16_max_256 *this)
+{
+    this->len = 0;
+    this->val = NULL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_with_state_list_u16_max_256_pack(const bcmolt_xgpon_gem_port_with_state_list_u16_max_256 *this, bcmolt_buf *buf)
+{
+    uint16_t i0;
+    if (!bcmolt_buf_write_u16(buf, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_xgpon_gem_port_with_state_list_u16_max_256\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    if (this->len > 256)
+    {
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_xgpon_gem_port_with_state_pack(&this->val[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_gem_port_with_state_list_u16_max_256_get_packed_length(const bcmolt_xgpon_gem_port_with_state_list_u16_max_256 *this)
+{
+    return 2 + (3 * this->len);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_with_state_list_u16_max_256_unpack(bcmolt_xgpon_gem_port_with_state_list_u16_max_256 *this, bcmolt_buf *buf, void **extra_mem)
+{
+    uint16_t i0;
+    if (!bcmolt_buf_read_u16(buf, &this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_xgpon_gem_port_with_state_list_u16_max_256\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->val = (bcmolt_xgpon_gem_port_with_state *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->len * sizeof(bcmolt_xgpon_gem_port_with_state));
+        }
+    }
+
+    if (this->len > 256)
+    {
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_xgpon_gem_port_with_state_unpack(&this->val[i0], buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_with_state_list_u16_max_256_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    uint16_t len;
+    if (!bcmolt_buf_read_u16(packed, &len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_xgpon_gem_port_with_state) * len);
+    if (!bcmolt_buf_skip(packed, len * 3))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_with_state_list_u16_max_256_bounds_check(const bcmolt_xgpon_gem_port_with_state_list_u16_max_256 *this)
+{
+    if (this->len > 256)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_key_exchange_set_default(bcmolt_xgpon_key_exchange *this)
+{
+    this->interval = 10000;
+    this->control = BCMOLT_CONTROL_STATE_DISABLE;
+    this->encrypted_ports_only = BCMOLT_CONTROL_STATE_DISABLE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_key_exchange_pack(const bcmolt_xgpon_key_exchange *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u32(buf, this->interval))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_control_state_pack(this->control, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_control_state_pack(this->encrypted_ports_only, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_key_exchange_unpack(bcmolt_xgpon_key_exchange *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u32(buf, &this->interval))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_control_state_unpack(&this->control, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_control_state_unpack(&this->encrypted_ports_only, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_key_exchange_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 6);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_key_exchange_bounds_check(const bcmolt_xgpon_key_exchange *this)
+{
+    if (this->interval < 10000)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->interval > 3600000UL)
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->control)
+    {
+        case BCMOLT_CONTROL_STATE_DISABLE:
+            break;
+        case BCMOLT_CONTROL_STATE_ENABLE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->encrypted_ports_only)
+    {
+        case BCMOLT_CONTROL_STATE_DISABLE:
+            break;
+        case BCMOLT_CONTROL_STATE_ENABLE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_multicast_key_set_default(bcmolt_xgpon_multicast_key *this)
+{
+    memset(this->key.bytes, 0, sizeof(this->key.bytes));
+    this->key_control = BCMOS_FALSE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_multicast_key_pack(const bcmolt_xgpon_multicast_key *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_aes_key_pack(&this->key, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_bool(buf, this->key_control))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_multicast_key_unpack(bcmolt_xgpon_multicast_key *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_aes_key_unpack(&this->key, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_bool(buf, &this->key_control))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_multicast_key_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 17);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_multicast_key_bounds_check(const bcmolt_xgpon_multicast_key *this)
+{
+    if (!bcmolt_aes_key_bounds_check(&this->key))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_ni_debug_set_default(bcmolt_xgpon_ni_debug *this)
+{
+    this->increase_available_cbr_bw = BCMOS_FALSE;
+    this->inter_burst_gap_in_bytes = 512;
+    this->number_of_gem_ports_per_onu = 64;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_debug_pack(const bcmolt_xgpon_ni_debug *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_bool(buf, this->increase_available_cbr_bw))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u16(buf, this->inter_burst_gap_in_bytes))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u16(buf, this->number_of_gem_ports_per_onu))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_debug_unpack(bcmolt_xgpon_ni_debug *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_bool(buf, &this->increase_available_cbr_bw))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u16(buf, &this->inter_burst_gap_in_bytes))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u16(buf, &this->number_of_gem_ports_per_onu))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_debug_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 5);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_debug_bounds_check(const bcmolt_xgpon_ni_debug *this)
+{
+    if (this->number_of_gem_ports_per_onu < 8)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->number_of_gem_ports_per_onu > 256)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_activation_set_default(bcmolt_xgpon_onu_activation *this)
+{
+    this->key_exchange = BCMOLT_CONTROL_STATE_DISABLE;
+    this->fail_due_to_regis_auto_fail = BCMOLT_CONTROL_STATE_ENABLE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_activation_pack(const bcmolt_xgpon_onu_activation *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_control_state_pack(this->key_exchange, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_control_state_pack(this->fail_due_to_regis_auto_fail, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_activation_unpack(bcmolt_xgpon_onu_activation *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_control_state_unpack(&this->key_exchange, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_control_state_unpack(&this->fail_due_to_regis_auto_fail, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_activation_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 2);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_activation_bounds_check(const bcmolt_xgpon_onu_activation *this)
+{
+    switch (this->key_exchange)
+    {
+        case BCMOLT_CONTROL_STATE_DISABLE:
+            break;
+        case BCMOLT_CONTROL_STATE_ENABLE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->fail_due_to_regis_auto_fail)
+    {
+        case BCMOLT_CONTROL_STATE_DISABLE:
+            break;
+        case BCMOLT_CONTROL_STATE_ENABLE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_aes_key_set_default(bcmolt_xgpon_onu_aes_key *this)
+{
+    memset(this->encryption_key.bytes, 0, sizeof(this->encryption_key.bytes));
+    this->key_index = 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_aes_key_pack(const bcmolt_xgpon_onu_aes_key *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_aes_key_pack(&this->encryption_key, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->key_index))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_aes_key_unpack(bcmolt_xgpon_onu_aes_key *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_aes_key_unpack(&this->encryption_key, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->key_index))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_aes_key_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 17);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_aes_key_bounds_check(const bcmolt_xgpon_onu_aes_key *this)
+{
+    if (!bcmolt_aes_key_bounds_check(&this->encryption_key))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_alarm_state_set_default(bcmolt_xgpon_onu_alarm_state *this)
+{
+    this->losi = BCMOLT_STATUS_OFF;
+    this->lobi = BCMOLT_STATUS_OFF;
+    this->lopci = BCMOLT_STATUS_OFF;
+    this->lopci_mic_error = BCMOLT_STATUS_OFF;
+    this->looci = BCMOLT_STATUS_OFF;
+    this->tiwi = BCMOLT_STATUS_OFF;
+    this->dowi = BCMOLT_STATUS_OFF;
+    this->sufi = BCMOLT_STATUS_OFF;
+    this->sfi = BCMOLT_STATUS_OFF;
+    this->sdi = BCMOLT_STATUS_OFF;
+    this->dfi = BCMOLT_STATUS_OFF;
+    this->dgi = BCMOLT_STATUS_OFF;
+    this->pqsi = BCMOLT_STATUS_OFF;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_alarm_state_pack(const bcmolt_xgpon_onu_alarm_state *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_status_pack(this->losi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_pack(this->lobi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_pack(this->lopci, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_pack(this->lopci_mic_error, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_pack(this->looci, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_pack(this->tiwi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_pack(this->dowi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_pack(this->sufi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_pack(this->sfi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_pack(this->sdi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_pack(this->dfi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_pack(this->dgi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_pack(this->pqsi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_alarm_state_unpack(bcmolt_xgpon_onu_alarm_state *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_status_unpack(&this->losi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_unpack(&this->lobi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_unpack(&this->lopci, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_unpack(&this->lopci_mic_error, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_unpack(&this->looci, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_unpack(&this->tiwi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_unpack(&this->dowi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_unpack(&this->sufi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_unpack(&this->sfi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_unpack(&this->sdi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_unpack(&this->dfi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_unpack(&this->dgi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_unpack(&this->pqsi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_alarm_state_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 13);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_alarm_state_bounds_check(const bcmolt_xgpon_onu_alarm_state *this)
+{
+    switch (this->losi)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->lobi)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->lopci)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->lopci_mic_error)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->looci)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->tiwi)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->dowi)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->sufi)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->sfi)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->sdi)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->dfi)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->dgi)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->pqsi)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_alarms_set_default(bcmolt_xgpon_onu_alarms *this)
+{
+    this->losi = BCMOLT_STATUS_OFF;
+    this->lobi = BCMOLT_STATUS_OFF;
+    this->lopci_miss = BCMOLT_STATUS_OFF;
+    this->lopci_mic_error = BCMOLT_STATUS_OFF;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_alarms_pack(const bcmolt_xgpon_onu_alarms *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_status_pack(this->losi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_pack(this->lobi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_pack(this->lopci_miss, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_pack(this->lopci_mic_error, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_alarms_unpack(bcmolt_xgpon_onu_alarms *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_status_unpack(&this->losi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_unpack(&this->lobi, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_unpack(&this->lopci_miss, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_status_unpack(&this->lopci_mic_error, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_alarms_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 4);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_alarms_bounds_check(const bcmolt_xgpon_onu_alarms *this)
+{
+    switch (this->losi)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->lobi)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->lopci_miss)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->lopci_mic_error)
+    {
+        case BCMOLT_STATUS_OFF:
+            break;
+        case BCMOLT_STATUS_ON:
+            break;
+        case BCMOLT_STATUS_NO_CHANGE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_alarms_thresholds_set_default(bcmolt_xgpon_onu_alarms_thresholds *this)
+{
+    this->losi = 4;
+    this->lobi = 4;
+    this->looci = 3;
+    this->lopci = 3;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_alarms_thresholds_pack(const bcmolt_xgpon_onu_alarms_thresholds *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u8(buf, this->losi))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->lobi))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->looci))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->lopci))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_alarms_thresholds_unpack(bcmolt_xgpon_onu_alarms_thresholds *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u8(buf, &this->losi))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->lobi))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->looci))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->lopci))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_alarms_thresholds_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 4);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_alarms_thresholds_bounds_check(const bcmolt_xgpon_onu_alarms_thresholds *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_eqd_set_default(bcmolt_xgpon_onu_eqd *this)
+{
+    this->onu_id = (bcmolt_xgpon_onu_id) 0;
+    this->eqd = 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_eqd_pack(const bcmolt_xgpon_onu_eqd *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u16(buf, (uint16_t) this->onu_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->eqd))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_eqd_unpack(bcmolt_xgpon_onu_eqd *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->onu_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->eqd))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_eqd_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 6);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_eqd_bounds_check(const bcmolt_xgpon_onu_eqd *this)
+{
+    if (this->onu_id > (bcmolt_xgpon_onu_id) 511)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_eqd_list_u32_set_default(bcmolt_xgpon_onu_eqd_list_u32 *this)
+{
+    this->len = 0;
+    this->val = NULL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_eqd_list_u32_pack(const bcmolt_xgpon_onu_eqd_list_u32 *this, bcmolt_buf *buf)
+{
+    uint32_t i0;
+    if (!bcmolt_buf_write_u32(buf, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_xgpon_onu_eqd_list_u32\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_xgpon_onu_eqd_pack(&this->val[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_eqd_list_u32_get_packed_length(const bcmolt_xgpon_onu_eqd_list_u32 *this)
+{
+    return 4 + (6 * this->len);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_eqd_list_u32_unpack(bcmolt_xgpon_onu_eqd_list_u32 *this, bcmolt_buf *buf, void **extra_mem)
+{
+    uint32_t i0;
+    if (!bcmolt_buf_read_u32(buf, &this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_xgpon_onu_eqd_list_u32\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->val = (bcmolt_xgpon_onu_eqd *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->len * sizeof(bcmolt_xgpon_onu_eqd));
+        }
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_xgpon_onu_eqd_unpack(&this->val[i0], buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_eqd_list_u32_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    uint32_t len;
+    if (!bcmolt_buf_read_u32(packed, &len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_xgpon_onu_eqd) * len);
+    if (!bcmolt_buf_skip(packed, len * 6))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_eqd_list_u32_bounds_check(const bcmolt_xgpon_onu_eqd_list_u32 *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_registration_keys_set_default(bcmolt_xgpon_onu_registration_keys *this)
+{
+    memset(this->ploam_ik.bytes, 0, sizeof(this->ploam_ik.bytes));
+    memset(this->omci_ik.bytes, 0, sizeof(this->omci_ik.bytes));
+    memset(this->omci_k1.bytes, 0, sizeof(this->omci_k1.bytes));
+    memset(this->omci_k2.bytes, 0, sizeof(this->omci_k2.bytes));
+    memset(this->kek.bytes, 0, sizeof(this->kek.bytes));
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_registration_keys_pack(const bcmolt_xgpon_onu_registration_keys *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_aes_key_pack(&this->ploam_ik, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_aes_key_pack(&this->omci_ik, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_aes_key_pack(&this->omci_k1, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_aes_key_pack(&this->omci_k2, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_aes_key_pack(&this->kek, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_registration_keys_unpack(bcmolt_xgpon_onu_registration_keys *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_aes_key_unpack(&this->ploam_ik, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_aes_key_unpack(&this->omci_ik, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_aes_key_unpack(&this->omci_k1, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_aes_key_unpack(&this->omci_k2, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_aes_key_unpack(&this->kek, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_registration_keys_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 80);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_registration_keys_bounds_check(const bcmolt_xgpon_onu_registration_keys *this)
+{
+    if (!bcmolt_aes_key_bounds_check(&this->ploam_ik))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_aes_key_bounds_check(&this->omci_ik))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_aes_key_bounds_check(&this->omci_k1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_aes_key_bounds_check(&this->omci_k2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_aes_key_bounds_check(&this->kek))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_with_state_set_default(bcmolt_xgpon_onu_with_state *this)
+{
+    this->onu_id = (bcmolt_xgpon_onu_id) 0;
+    this->state = BCMOLT_ONU_STATE_NOT_CONFIGURED;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_with_state_pack(const bcmolt_xgpon_onu_with_state *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u16(buf, (uint16_t) this->onu_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_onu_state_pack(this->state, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_with_state_unpack(bcmolt_xgpon_onu_with_state *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->onu_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_onu_state_unpack(&this->state, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_with_state_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 3);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_with_state_bounds_check(const bcmolt_xgpon_onu_with_state *this)
+{
+    if (this->onu_id > (bcmolt_xgpon_onu_id) 511)
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->state)
+    {
+        case BCMOLT_ONU_STATE_NOT_CONFIGURED:
+            break;
+        case BCMOLT_ONU_STATE_INACTIVE:
+            break;
+        case BCMOLT_ONU_STATE_ACTIVE:
+            break;
+        case BCMOLT_ONU_STATE_ACTIVE_STANDBY:
+            break;
+        case BCMOLT_ONU_STATE_DISABLED:
+            break;
+        case BCMOLT_ONU_STATE_AWAKE_FREE:
+            break;
+        case BCMOLT_ONU_STATE_PROCESSING:
+            break;
+        case BCMOLT_ONU_STATE_LOW_POWER_DOZE:
+            break;
+        case BCMOLT_ONU_STATE_LOW_POWER_SLEEP:
+            break;
+        case BCMOLT_ONU_STATE_LOW_POWER_WATCH:
+            break;
+        case BCMOLT_ONU_STATE_UNAWARE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_with_state_list_u16_max_510_set_default(bcmolt_xgpon_onu_with_state_list_u16_max_510 *this)
+{
+    this->len = 0;
+    this->val = NULL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_with_state_list_u16_max_510_pack(const bcmolt_xgpon_onu_with_state_list_u16_max_510 *this, bcmolt_buf *buf)
+{
+    uint16_t i0;
+    if (!bcmolt_buf_write_u16(buf, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_xgpon_onu_with_state_list_u16_max_510\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    if (this->len > 510)
+    {
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_xgpon_onu_with_state_pack(&this->val[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_with_state_list_u16_max_510_get_packed_length(const bcmolt_xgpon_onu_with_state_list_u16_max_510 *this)
+{
+    return 2 + (3 * this->len);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_with_state_list_u16_max_510_unpack(bcmolt_xgpon_onu_with_state_list_u16_max_510 *this, bcmolt_buf *buf, void **extra_mem)
+{
+    uint16_t i0;
+    if (!bcmolt_buf_read_u16(buf, &this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_xgpon_onu_with_state_list_u16_max_510\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->val = (bcmolt_xgpon_onu_with_state *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->len * sizeof(bcmolt_xgpon_onu_with_state));
+        }
+    }
+
+    if (this->len > 510)
+    {
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_xgpon_onu_with_state_unpack(&this->val[i0], buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_with_state_list_u16_max_510_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    uint16_t len;
+    if (!bcmolt_buf_read_u16(packed, &len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_xgpon_onu_with_state) * len);
+    if (!bcmolt_buf_skip(packed, len * 3))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_with_state_list_u16_max_510_bounds_check(const bcmolt_xgpon_onu_with_state_list_u16_max_510 *this)
+{
+    if (this->len > 510)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_ploam_handling_set_default(bcmolt_xgpon_ploam_handling *this)
+{
+    this->ack_timeout = 2000;
+    this->retrans_ranging_time = 0;
+    this->retrans_assign_alloc_id = 0;
+    this->retrans_key_control = 0;
+    this->retrans_request_registration = 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ploam_handling_pack(const bcmolt_xgpon_ploam_handling *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u32(buf, this->ack_timeout))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->retrans_ranging_time))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->retrans_assign_alloc_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->retrans_key_control))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->retrans_request_registration))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ploam_handling_unpack(bcmolt_xgpon_ploam_handling *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u32(buf, &this->ack_timeout))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->retrans_ranging_time))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->retrans_assign_alloc_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->retrans_key_control))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->retrans_request_registration))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ploam_handling_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 8);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ploam_handling_bounds_check(const bcmolt_xgpon_ploam_handling *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_protection_switching_set_default(bcmolt_xgpon_protection_switching *this)
+{
+    this->timeout = 100;
+    this->gpio_pin = BCMOLT_GPIO_PIN_UNCONFIGURED;
+    this->fast_ranging = BCMOS_FALSE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_protection_switching_pack(const bcmolt_xgpon_protection_switching *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u16(buf, this->timeout))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_gpio_pin_pack(this->gpio_pin, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_bool(buf, this->fast_ranging))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_protection_switching_unpack(bcmolt_xgpon_protection_switching *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u16(buf, &this->timeout))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_gpio_pin_unpack(&this->gpio_pin, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_bool(buf, &this->fast_ranging))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_protection_switching_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 4);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_protection_switching_bounds_check(const bcmolt_xgpon_protection_switching *this)
+{
+    switch (this->gpio_pin)
+    {
+        case BCMOLT_GPIO_PIN_PIN0:
+            break;
+        case BCMOLT_GPIO_PIN_PIN1:
+            break;
+        case BCMOLT_GPIO_PIN_PIN2:
+            break;
+        case BCMOLT_GPIO_PIN_PIN3:
+            break;
+        case BCMOLT_GPIO_PIN_PIN4:
+            break;
+        case BCMOLT_GPIO_PIN_PIN5:
+            break;
+        case BCMOLT_GPIO_PIN_PIN6:
+            break;
+        case BCMOLT_GPIO_PIN_PIN7:
+            break;
+        case BCMOLT_GPIO_PIN_PIN8:
+            break;
+        case BCMOLT_GPIO_PIN_PIN9:
+            break;
+        case BCMOLT_GPIO_PIN_PIN10:
+            break;
+        case BCMOLT_GPIO_PIN_PIN11:
+            break;
+        case BCMOLT_GPIO_PIN_PIN12:
+            break;
+        case BCMOLT_GPIO_PIN_PIN13:
+            break;
+        case BCMOLT_GPIO_PIN_PIN14:
+            break;
+        case BCMOLT_GPIO_PIN_PIN15:
+            break;
+        case BCMOLT_GPIO_PIN_PIN16:
+            break;
+        case BCMOLT_GPIO_PIN_PIN17:
+            break;
+        case BCMOLT_GPIO_PIN_PIN18:
+            break;
+        case BCMOLT_GPIO_PIN_PIN19:
+            break;
+        case BCMOLT_GPIO_PIN_PIN20:
+            break;
+        case BCMOLT_GPIO_PIN_PIN21:
+            break;
+        case BCMOLT_GPIO_PIN_PIN22:
+            break;
+        case BCMOLT_GPIO_PIN_PIN23:
+            break;
+        case BCMOLT_GPIO_PIN_PIN24:
+            break;
+        case BCMOLT_GPIO_PIN_PIN25:
+            break;
+        case BCMOLT_GPIO_PIN_PIN26:
+            break;
+        case BCMOLT_GPIO_PIN_PIN27:
+            break;
+        case BCMOLT_GPIO_PIN_PIN28:
+            break;
+        case BCMOLT_GPIO_PIN_PIN29:
+            break;
+        case BCMOLT_GPIO_PIN_PIN30:
+            break;
+        case BCMOLT_GPIO_PIN_PIN31:
+            break;
+        case BCMOLT_GPIO_PIN_PIN32:
+            break;
+        case BCMOLT_GPIO_PIN_PIN33:
+            break;
+        case BCMOLT_GPIO_PIN_PIN34:
+            break;
+        case BCMOLT_GPIO_PIN_PIN35:
+            break;
+        case BCMOLT_GPIO_PIN_PIN36:
+            break;
+        case BCMOLT_GPIO_PIN_PIN37:
+            break;
+        case BCMOLT_GPIO_PIN_PIN38:
+            break;
+        case BCMOLT_GPIO_PIN_PIN39:
+            break;
+        case BCMOLT_GPIO_PIN_PIN40:
+            break;
+        case BCMOLT_GPIO_PIN_PIN41:
+            break;
+        case BCMOLT_GPIO_PIN_PIN42:
+            break;
+        case BCMOLT_GPIO_PIN_PIN43:
+            break;
+        case BCMOLT_GPIO_PIN_PIN44:
+            break;
+        case BCMOLT_GPIO_PIN_PIN45:
+            break;
+        case BCMOLT_GPIO_PIN_PIN46:
+            break;
+        case BCMOLT_GPIO_PIN_PIN47:
+            break;
+        case BCMOLT_GPIO_PIN_PIN48:
+            break;
+        case BCMOLT_GPIO_PIN_PIN49:
+            break;
+        case BCMOLT_GPIO_PIN_PIN50:
+            break;
+        case BCMOLT_GPIO_PIN_PIN51:
+            break;
+        case BCMOLT_GPIO_PIN_PIN52:
+            break;
+        case BCMOLT_GPIO_PIN_PIN53:
+            break;
+        case BCMOLT_GPIO_PIN_PIN54:
+            break;
+        case BCMOLT_GPIO_PIN_PIN55:
+            break;
+        case BCMOLT_GPIO_PIN_PIN56:
+            break;
+        case BCMOLT_GPIO_PIN_PIN57:
+            break;
+        case BCMOLT_GPIO_PIN_PIN58:
+            break;
+        case BCMOLT_GPIO_PIN_PIN59:
+            break;
+        case BCMOLT_GPIO_PIN_PIN60:
+            break;
+        case BCMOLT_GPIO_PIN_PIN61:
+            break;
+        case BCMOLT_GPIO_PIN_PIN62:
+            break;
+        case BCMOLT_GPIO_PIN_PIN63:
+            break;
+        case BCMOLT_GPIO_PIN_PIN64:
+            break;
+        case BCMOLT_GPIO_PIN_PIN65:
+            break;
+        case BCMOLT_GPIO_PIN_PIN66:
+            break;
+        case BCMOLT_GPIO_PIN_PIN67:
+            break;
+        case BCMOLT_GPIO_PIN_PIN68:
+            break;
+        case BCMOLT_GPIO_PIN_PIN69:
+            break;
+        case BCMOLT_GPIO_PIN_PIN70:
+            break;
+        case BCMOLT_GPIO_PIN_PIN71:
+            break;
+        case BCMOLT_GPIO_PIN_PIN72:
+            break;
+        case BCMOLT_GPIO_PIN_PIN73:
+            break;
+        case BCMOLT_GPIO_PIN_PIN74:
+            break;
+        case BCMOLT_GPIO_PIN_PIN75:
+            break;
+        case BCMOLT_GPIO_PIN_PIN76:
+            break;
+        case BCMOLT_GPIO_PIN_PIN77:
+            break;
+        case BCMOLT_GPIO_PIN_PIN78:
+            break;
+        case BCMOLT_GPIO_PIN_PIN79:
+            break;
+        case BCMOLT_GPIO_PIN_PIN80:
+            break;
+        case BCMOLT_GPIO_PIN_PIN81:
+            break;
+        case BCMOLT_GPIO_PIN_PIN82:
+            break;
+        case BCMOLT_GPIO_PIN_PIN83:
+            break;
+        case BCMOLT_GPIO_PIN_PIN84:
+            break;
+        case BCMOLT_GPIO_PIN_PIN85:
+            break;
+        case BCMOLT_GPIO_PIN_PIN86:
+            break;
+        case BCMOLT_GPIO_PIN_PIN87:
+            break;
+        case BCMOLT_GPIO_PIN_PIN88:
+            break;
+        case BCMOLT_GPIO_PIN_PIN89:
+            break;
+        case BCMOLT_GPIO_PIN_PIN90:
+            break;
+        case BCMOLT_GPIO_PIN_PIN91:
+            break;
+        case BCMOLT_GPIO_PIN_PIN92:
+            break;
+        case BCMOLT_GPIO_PIN_PIN93:
+            break;
+        case BCMOLT_GPIO_PIN_PIN94:
+            break;
+        case BCMOLT_GPIO_PIN_PIN95:
+            break;
+        case BCMOLT_GPIO_PIN_PIN96:
+            break;
+        case BCMOLT_GPIO_PIN_PIN97:
+            break;
+        case BCMOLT_GPIO_PIN_PIN98:
+            break;
+        case BCMOLT_GPIO_PIN_PIN99:
+            break;
+        case BCMOLT_GPIO_PIN_PIN100:
+            break;
+        case BCMOLT_GPIO_PIN_PIN101:
+            break;
+        case BCMOLT_GPIO_PIN_PIN102:
+            break;
+        case BCMOLT_GPIO_PIN_PIN103:
+            break;
+        case BCMOLT_GPIO_PIN_PIN104:
+            break;
+        case BCMOLT_GPIO_PIN_PIN105:
+            break;
+        case BCMOLT_GPIO_PIN_PIN106:
+            break;
+        case BCMOLT_GPIO_PIN_UNCONFIGURED:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_protection_switching_debug_set_default(bcmolt_xgpon_protection_switching_debug *this)
+{
+    this->data_map_delay_ms = 0;
+    this->rerange_send_ranging_time = BCMOS_FALSE;
+    this->rerange_send_ranging_time_delay = 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_protection_switching_debug_pack(const bcmolt_xgpon_protection_switching_debug *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u16(buf, this->data_map_delay_ms))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_bool(buf, this->rerange_send_ranging_time))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u16(buf, this->rerange_send_ranging_time_delay))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_protection_switching_debug_unpack(bcmolt_xgpon_protection_switching_debug *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u16(buf, &this->data_map_delay_ms))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_bool(buf, &this->rerange_send_ranging_time))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u16(buf, &this->rerange_send_ranging_time_delay))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_protection_switching_debug_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 5);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_protection_switching_debug_bounds_check(const bcmolt_xgpon_protection_switching_debug *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_rssi_normal_config_set_default(bcmolt_xgpon_rssi_normal_config *this)
+{
+    this->polarity = BCMOLT_POLARITY_LOW;
+    this->location = 35;
+    this->location_sign = BCMOLT_SIGN_POSITIVE;
+    this->pulse_width = 80;
+    this->minimum_burst = 200;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_rssi_normal_config_pack(const bcmolt_xgpon_rssi_normal_config *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_polarity_pack(this->polarity, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->location))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_sign_pack(this->location_sign, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u16(buf, this->pulse_width))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u16(buf, this->minimum_burst))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_rssi_normal_config_unpack(bcmolt_xgpon_rssi_normal_config *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_polarity_unpack(&this->polarity, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->location))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_sign_unpack(&this->location_sign, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u16(buf, &this->pulse_width))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u16(buf, &this->minimum_burst))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_rssi_normal_config_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 7);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_rssi_normal_config_bounds_check(const bcmolt_xgpon_rssi_normal_config *this)
+{
+    switch (this->polarity)
+    {
+        case BCMOLT_POLARITY_LOW:
+            break;
+        case BCMOLT_POLARITY_HIGH:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->location_sign)
+    {
+        case BCMOLT_SIGN_POSITIVE:
+            break;
+        case BCMOLT_SIGN_NEGATIVE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_rssi_ranging_config_set_default(bcmolt_xgpon_rssi_ranging_config *this)
+{
+    this->start_on_ed = BCMOS_TRUE;
+    this->frame_delay = 0;
+    this->word_delay = 20;
+    this->frame_delay_after_ed = 0;
+    this->word_delay_after_ed = 1;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_rssi_ranging_config_pack(const bcmolt_xgpon_rssi_ranging_config *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_bool(buf, this->start_on_ed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->frame_delay))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u16(buf, this->word_delay))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->frame_delay_after_ed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u16(buf, this->word_delay_after_ed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_rssi_ranging_config_unpack(bcmolt_xgpon_rssi_ranging_config *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_bool(buf, &this->start_on_ed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->frame_delay))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u16(buf, &this->word_delay))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->frame_delay_after_ed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u16(buf, &this->word_delay_after_ed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_rssi_ranging_config_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 7);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_rssi_ranging_config_bounds_check(const bcmolt_xgpon_rssi_ranging_config *this)
+{
+    if (this->frame_delay > 31)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->word_delay > 16383)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->frame_delay_after_ed > 31)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->word_delay_after_ed > 16383)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_rx_ranging_sm_pattern_set_default(bcmolt_xgpon_rx_ranging_sm_pattern *this)
+{
+    this->trx_reset_pattern_first = 0;
+    this->trx_reset_pattern_middle = 0;
+    this->trx_reset_pattern_last = 0;
+    this->trx_reset_middle_repeats = 0;
+    this->trx_reset_location = 0;
+    this->bcdr_reset_pattern_first = 0;
+    this->bcdr_reset_pattern_middle = 0;
+    this->bcdr_reset_pattern_last = 0;
+    this->bcdr_reset_middle_repeats = 0;
+    this->bcdr_reset_location = 0;
+    this->bcdr_reset_polarity = BCMOS_FALSE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_rx_ranging_sm_pattern_pack(const bcmolt_xgpon_rx_ranging_sm_pattern *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u32(buf, this->trx_reset_pattern_first))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->trx_reset_pattern_middle))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->trx_reset_pattern_last))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->trx_reset_middle_repeats))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->trx_reset_location))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->bcdr_reset_pattern_first))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->bcdr_reset_pattern_middle))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u32(buf, this->bcdr_reset_pattern_last))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->bcdr_reset_middle_repeats))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, this->bcdr_reset_location))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_bool(buf, this->bcdr_reset_polarity))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_rx_ranging_sm_pattern_unpack(bcmolt_xgpon_rx_ranging_sm_pattern *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u32(buf, &this->trx_reset_pattern_first))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->trx_reset_pattern_middle))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->trx_reset_pattern_last))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->trx_reset_middle_repeats))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->trx_reset_location))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->bcdr_reset_pattern_first))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->bcdr_reset_pattern_middle))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u32(buf, &this->bcdr_reset_pattern_last))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->bcdr_reset_middle_repeats))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, &this->bcdr_reset_location))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_bool(buf, &this->bcdr_reset_polarity))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_rx_ranging_sm_pattern_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 29);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_rx_ranging_sm_pattern_bounds_check(const bcmolt_xgpon_rx_ranging_sm_pattern *this)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_serdes_configuration_set_default(bcmolt_xgpon_serdes_configuration *this)
+{
+    this->multi_ed_mode = BCMOS_FALSE;
+    this->ranging_mode = BCMOLT_XGPON_SERDES_RANGING_MODE_BCDR;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_serdes_configuration_pack(const bcmolt_xgpon_serdes_configuration *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_bool(buf, this->multi_ed_mode))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_xgpon_serdes_ranging_mode_pack(this->ranging_mode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_serdes_configuration_unpack(bcmolt_xgpon_serdes_configuration *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_bool(buf, &this->multi_ed_mode))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_xgpon_serdes_ranging_mode_unpack(&this->ranging_mode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_serdes_configuration_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 2);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_serdes_configuration_bounds_check(const bcmolt_xgpon_serdes_configuration *this)
+{
+    switch (this->ranging_mode)
+    {
+        case BCMOLT_XGPON_SERDES_RANGING_MODE_ED:
+            break;
+        case BCMOLT_XGPON_SERDES_RANGING_MODE_BCDR:
+            break;
+        case BCMOLT_XGPON_SERDES_RANGING_MODE_FAST_RANGING1:
+            break;
+        case BCMOLT_XGPON_SERDES_RANGING_MODE_FAST_RANGING2:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_sn_acquisition_set_default(bcmolt_xgpon_sn_acquisition *this)
+{
+    this->interval = 1000;
+    this->control = BCMOLT_CONTROL_STATE_DISABLE;
+    this->onu_post_discovery_mode = BCMOLT_ONU_POST_DISCOVERY_MODE_NONE;
+    this->burst_profile = (bcmolt_burst_profile_index) 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_sn_acquisition_pack(const bcmolt_xgpon_sn_acquisition *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_buf_write_u32(buf, this->interval))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_control_state_pack(this->control, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_onu_post_discovery_mode_pack(this->onu_post_discovery_mode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_write_u8(buf, (uint8_t) this->burst_profile))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_sn_acquisition_unpack(bcmolt_xgpon_sn_acquisition *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_buf_read_u32(buf, &this->interval))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_control_state_unpack(&this->control, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_onu_post_discovery_mode_unpack(&this->onu_post_discovery_mode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_buf_read_u8(buf, (uint8_t *) &this->burst_profile))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_sn_acquisition_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 7);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_sn_acquisition_bounds_check(const bcmolt_xgpon_sn_acquisition *this)
+{
+    if (this->interval < 1000)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->interval > 2147483UL)
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->control)
+    {
+        case BCMOLT_CONTROL_STATE_DISABLE:
+            break;
+        case BCMOLT_CONTROL_STATE_ENABLE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->onu_post_discovery_mode)
+    {
+        case BCMOLT_ONU_POST_DISCOVERY_MODE_NONE:
+            break;
+        case BCMOLT_ONU_POST_DISCOVERY_MODE_ACTIVATE:
+            break;
+        case BCMOLT_ONU_POST_DISCOVERY_MODE_DISABLE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    if (this->burst_profile > (bcmolt_burst_profile_index) 3)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_trx_debug_set_default(bcmolt_xgpon_trx_debug *this)
+{
+    this->rx_reversed_polarity = BCMOLT_CONTROL_STATE_DISABLE;
+    this->neg_out_bit = BCMOLT_CONTROL_STATE_DISABLE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_trx_debug_pack(const bcmolt_xgpon_trx_debug *this, bcmolt_buf *buf)
+{
+    if (!bcmolt_control_state_pack(this->rx_reversed_polarity, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_control_state_pack(this->neg_out_bit, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_trx_debug_unpack(bcmolt_xgpon_trx_debug *this, bcmolt_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_control_state_unpack(&this->rx_reversed_polarity, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_control_state_unpack(&this->neg_out_bit, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_trx_debug_scan(bcmolt_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_buf_skip(packed, 2);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_trx_debug_bounds_check(const bcmolt_xgpon_trx_debug *this)
+{
+    switch (this->rx_reversed_polarity)
+    {
+        case BCMOLT_CONTROL_STATE_DISABLE:
+            break;
+        case BCMOLT_CONTROL_STATE_ENABLE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    switch (this->neg_out_bit)
+    {
+        case BCMOLT_CONTROL_STATE_DISABLE:
+            break;
+        case BCMOLT_CONTROL_STATE_ENABLE:
+            break;
+        default:
+            return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_ae_ni_key_set_default(bcmolt_ae_ni_key *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_KEY_ID_AE_NI)) != 0)
+    {
+        this->ae_ni = (bcmolt_ae_ni) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_ni_key_pack(const bcmolt_ae_ni_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_KEY_ID_AE_NI)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->ae_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_ae_ni_key_get_packed_length(const bcmolt_ae_ni_key *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_KEY_ID_AE_NI)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_ni_key_unpack(bcmolt_ae_ni_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_KEY_ID_AE_NI)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->ae_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_ni_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_KEY_ID_AE_NI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_ni_key_bounds_check(const bcmolt_ae_ni_key *this, bcmolt_presence_mask fields_present, bcmolt_ae_ni_key_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_ae_ni_cfg_data_set_default(bcmolt_ae_ni_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_CFG_ID_MAC_ADDRESS)) != 0)
+    {
+        this->mac_address.u8[0] = 0x0000;
+        this->mac_address.u8[1] = 0x000D;
+        this->mac_address.u8[2] = 0x00B6;
+        this->mac_address.u8[3] = 0x0000;
+        this->mac_address.u8[4] = 0x0000;
+        this->mac_address.u8[5] = 0x0000;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_CFG_ID_AE_NI_EN)) != 0)
+    {
+        this->ae_ni_en = BCMOLT_AE_NI_EN_STATE_DISABLED;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_CFG_ID_MTU_10G)) != 0)
+    {
+        this->mtu_10g = 1536;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_CFG_ID_PRBS_GENERATOR)) != 0)
+    {
+        this->prbs_generator.polynom = BCMOLT_PRBS_POLYNOMIAL_PRBS_7;
+        this->prbs_generator.error_insert = BCMOS_FALSE;
+        this->prbs_generator.invert = BCMOS_FALSE;
+        this->prbs_generator.control = BCMOLT_CONTROL_STATE_DISABLE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_CFG_ID_PRBS_CHECKER)) != 0)
+    {
+        this->prbs_checker.polynom = BCMOLT_PRBS_POLYNOMIAL_PRBS_7;
+        this->prbs_checker.mode = BCMOLT_PRBS_CHECKER_MODE_SELF_SYNC;
+        this->prbs_checker.data_invert = BCMOS_FALSE;
+        this->prbs_checker.control = BCMOLT_CONTROL_STATE_DISABLE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_CFG_ID_PRBS_STATUS)) != 0)
+    {
+        this->prbs_status.lock_state = BCMOLT_PRBS_LOCK_STATE_UNLOCKED;
+        this->prbs_status.error_counts = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_ni_cfg_data_pack(const bcmolt_ae_ni_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_CFG_ID_MAC_ADDRESS)) != 0)
+    {
+        if (!bcmolt_buf_write_mac_address(buf, this->mac_address))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_CFG_ID_AE_NI_EN)) != 0)
+    {
+        if (!bcmolt_ae_ni_en_state_pack(this->ae_ni_en, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_CFG_ID_MTU_10G)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, this->mtu_10g))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_CFG_ID_PRBS_GENERATOR)) != 0)
+    {
+        if (!bcmolt_prbs_generator_config_pack(&this->prbs_generator, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_CFG_ID_PRBS_CHECKER)) != 0)
+    {
+        if (!bcmolt_prbs_checker_config_pack(&this->prbs_checker, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_CFG_ID_PRBS_STATUS)) != 0)
+    {
+        if (!bcmolt_prbs_status_pack(&this->prbs_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_ae_ni_cfg_data_get_packed_length(const bcmolt_ae_ni_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_CFG_ID_MAC_ADDRESS)) != 0)
+    {
+        count += 6;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_CFG_ID_AE_NI_EN)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_CFG_ID_MTU_10G)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_CFG_ID_PRBS_GENERATOR)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_CFG_ID_PRBS_CHECKER)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_CFG_ID_PRBS_STATUS)) != 0)
+    {
+        count += 5;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_ni_cfg_data_unpack(bcmolt_ae_ni_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_CFG_ID_MAC_ADDRESS)) != 0)
+    {
+        if (!bcmolt_buf_read_mac_address(buf, &this->mac_address))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_CFG_ID_AE_NI_EN)) != 0)
+    {
+        if (!bcmolt_ae_ni_en_state_unpack(&this->ae_ni_en, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_CFG_ID_MTU_10G)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, &this->mtu_10g))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_CFG_ID_PRBS_GENERATOR)) != 0)
+    {
+        if (!bcmolt_prbs_generator_config_unpack(&this->prbs_generator, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_CFG_ID_PRBS_CHECKER)) != 0)
+    {
+        if (!bcmolt_prbs_checker_config_unpack(&this->prbs_checker, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_CFG_ID_PRBS_STATUS)) != 0)
+    {
+        if (!bcmolt_prbs_status_unpack(&this->prbs_status, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_ni_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_CFG_ID_MAC_ADDRESS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 6))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_CFG_ID_AE_NI_EN)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_CFG_ID_MTU_10G)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_CFG_ID_PRBS_GENERATOR)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_CFG_ID_PRBS_CHECKER)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_CFG_ID_PRBS_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 5))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_ni_cfg_data_bounds_check(const bcmolt_ae_ni_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_ae_ni_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_CFG_ID_AE_NI_EN)) != 0)
+    {
+        switch (this->ae_ni_en)
+        {
+            case BCMOLT_AE_NI_EN_STATE_DISABLED:
+                break;
+            case BCMOLT_AE_NI_EN_STATE_ENABLED:
+                break;
+            default:
+                *failed_prop = BCMOLT_AE_NI_CFG_ID_AE_NI_EN;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_CFG_ID_MTU_10G)) != 0)
+    {
+        if (this->mtu_10g < 64)
+        {
+            *failed_prop = BCMOLT_AE_NI_CFG_ID_MTU_10G;
+            return BCMOS_FALSE;
+        }
+
+        if (this->mtu_10g > 10000)
+        {
+            *failed_prop = BCMOLT_AE_NI_CFG_ID_MTU_10G;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_CFG_ID_PRBS_GENERATOR)) != 0)
+    {
+        if (!bcmolt_prbs_generator_config_bounds_check(&this->prbs_generator))
+        {
+            *failed_prop = BCMOLT_AE_NI_CFG_ID_PRBS_GENERATOR;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_CFG_ID_PRBS_CHECKER)) != 0)
+    {
+        if (!bcmolt_prbs_checker_config_bounds_check(&this->prbs_checker))
+        {
+            *failed_prop = BCMOLT_AE_NI_CFG_ID_PRBS_CHECKER;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_CFG_ID_PRBS_STATUS)) != 0)
+    {
+        if (!bcmolt_prbs_status_bounds_check(&this->prbs_status))
+        {
+            *failed_prop = BCMOLT_AE_NI_CFG_ID_PRBS_STATUS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_ae_ni_set_ae_ni_en_state_data_set_default(bcmolt_ae_ni_set_ae_ni_en_state_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_SET_AE_NI_EN_STATE_ID_NEW_STATE)) != 0)
+    {
+        this->new_state = BCMOLT_AE_NI_EN_STATE_DISABLED;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_ni_set_ae_ni_en_state_data_pack(const bcmolt_ae_ni_set_ae_ni_en_state_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_SET_AE_NI_EN_STATE_ID_NEW_STATE)) != 0)
+    {
+        if (!bcmolt_ae_ni_en_state_pack(this->new_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_ae_ni_set_ae_ni_en_state_data_get_packed_length(const bcmolt_ae_ni_set_ae_ni_en_state_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_SET_AE_NI_EN_STATE_ID_NEW_STATE)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_ni_set_ae_ni_en_state_data_unpack(bcmolt_ae_ni_set_ae_ni_en_state_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_SET_AE_NI_EN_STATE_ID_NEW_STATE)) != 0)
+    {
+        if (!bcmolt_ae_ni_en_state_unpack(&this->new_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_ni_set_ae_ni_en_state_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_SET_AE_NI_EN_STATE_ID_NEW_STATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_ni_set_ae_ni_en_state_data_bounds_check(const bcmolt_ae_ni_set_ae_ni_en_state_data *this, bcmolt_presence_mask fields_present, bcmolt_ae_ni_set_ae_ni_en_state_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_NI_SET_AE_NI_EN_STATE_ID_NEW_STATE)) != 0)
+    {
+        switch (this->new_state)
+        {
+            case BCMOLT_AE_NI_EN_STATE_DISABLED:
+                break;
+            case BCMOLT_AE_NI_EN_STATE_ENABLED:
+                break;
+            default:
+                *failed_prop = BCMOLT_AE_NI_SET_AE_NI_EN_STATE_ID_NEW_STATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_ae_path_ds_key_set_default(bcmolt_ae_path_ds_key *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_KEY_ID_AE_NI)) != 0)
+    {
+        this->ae_ni = (bcmolt_ae_ni) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_ds_key_pack(const bcmolt_ae_path_ds_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_KEY_ID_AE_NI)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->ae_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_ae_path_ds_key_get_packed_length(const bcmolt_ae_path_ds_key *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_KEY_ID_AE_NI)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_ds_key_unpack(bcmolt_ae_path_ds_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_KEY_ID_AE_NI)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->ae_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_ds_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_KEY_ID_AE_NI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_ds_key_bounds_check(const bcmolt_ae_path_ds_key *this, bcmolt_presence_mask fields_present, bcmolt_ae_path_ds_key_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_ae_path_ds_stat_data_set_default(bcmolt_ae_path_ds_stat_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_BYTES)) != 0)
+    {
+        this->bytes = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES)) != 0)
+    {
+        this->frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_64)) != 0)
+    {
+        this->frames_64 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_65_127)) != 0)
+    {
+        this->frames_65_127 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_128_255)) != 0)
+    {
+        this->frames_128_255 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_256_511)) != 0)
+    {
+        this->frames_256_511 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_512_1023)) != 0)
+    {
+        this->frames_512_1023 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_1024_1518)) != 0)
+    {
+        this->frames_1024_1518 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_1519_2047)) != 0)
+    {
+        this->frames_1519_2047 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_2048_4095)) != 0)
+    {
+        this->frames_2048_4095 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_4096_9216)) != 0)
+    {
+        this->frames_4096_9216 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_9217_16383)) != 0)
+    {
+        this->frames_9217_16383 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_BROADCAST_FRAMES)) != 0)
+    {
+        this->broadcast_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_DATA_BYTES)) != 0)
+    {
+        this->data_bytes = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_MULTICAST_FRAMES)) != 0)
+    {
+        this->multicast_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_UNICAST_FRAMES)) != 0)
+    {
+        this->unicast_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_ABORT_FRAMES)) != 0)
+    {
+        this->abort_frames = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_ds_stat_data_pack(const bcmolt_ae_path_ds_stat_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_64)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_64))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_65_127)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_65_127))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_128_255)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_128_255))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_256_511)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_256_511))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_512_1023)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_512_1023))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_1024_1518)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_1024_1518))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_1519_2047)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_1519_2047))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_2048_4095)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_2048_4095))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_4096_9216)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_4096_9216))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_9217_16383)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_9217_16383))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_BROADCAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->broadcast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_DATA_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->data_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_MULTICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->multicast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_UNICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->unicast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_ABORT_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->abort_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_ae_path_ds_stat_data_get_packed_length(const bcmolt_ae_path_ds_stat_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_BYTES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_64)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_65_127)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_128_255)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_256_511)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_512_1023)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_1024_1518)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_1519_2047)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_2048_4095)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_4096_9216)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_9217_16383)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_BROADCAST_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_DATA_BYTES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_MULTICAST_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_UNICAST_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_ABORT_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_ds_stat_data_unpack(bcmolt_ae_path_ds_stat_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_64)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_64))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_65_127)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_65_127))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_128_255)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_128_255))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_256_511)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_256_511))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_512_1023)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_512_1023))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_1024_1518)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_1024_1518))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_1519_2047)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_1519_2047))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_2048_4095)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_2048_4095))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_4096_9216)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_4096_9216))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_9217_16383)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_9217_16383))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_BROADCAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->broadcast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_DATA_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->data_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_MULTICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->multicast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_UNICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->unicast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_ABORT_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->abort_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_ds_stat_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_64)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_65_127)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_128_255)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_256_511)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_512_1023)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_1024_1518)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_1519_2047)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_2048_4095)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_4096_9216)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_9217_16383)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_BROADCAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_DATA_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_MULTICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_UNICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ID_ABORT_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_ds_stat_data_bounds_check(const bcmolt_ae_path_ds_stat_data *this, bcmolt_presence_mask fields_present, bcmolt_ae_path_ds_stat_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_ae_path_ds_stat_cfg_data_set_default(bcmolt_ae_path_ds_stat_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_CFG_ID_CFG)) != 0)
+    {
+        this->cfg.trigger.type = BCMOLT_STAT_CONDITION_TYPE_NONE;
+        this->cfg.soak.active_soak_time = 0;
+        this->cfg.soak.clear_soak_time = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_ds_stat_cfg_data_pack(const bcmolt_ae_path_ds_stat_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_pack(&this->cfg, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_ae_path_ds_stat_cfg_data_get_packed_length(const bcmolt_ae_path_ds_stat_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_CFG_ID_CFG)) != 0)
+    {
+        count += bcmolt_stat_alarm_config_get_packed_length(&this->cfg);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_ds_stat_cfg_data_unpack(bcmolt_ae_path_ds_stat_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_unpack(&this->cfg, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_ds_stat_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_ds_stat_cfg_data_bounds_check(const bcmolt_ae_path_ds_stat_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_ae_path_ds_stat_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_bounds_check(&this->cfg))
+        {
+            *failed_prop = BCMOLT_AE_PATH_DS_STAT_CFG_ID_CFG;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_ae_path_ds_stat_alarm_cleared_data_set_default(bcmolt_ae_path_ds_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        this->stat = BCMOLT_AE_PATH_DS_STAT_ID_BYTES;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_ds_stat_alarm_cleared_data_pack(const bcmolt_ae_path_ds_stat_alarm_cleared_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_ae_path_ds_stat_id_pack(this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_ae_path_ds_stat_alarm_cleared_data_get_packed_length(const bcmolt_ae_path_ds_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_ds_stat_alarm_cleared_data_unpack(bcmolt_ae_path_ds_stat_alarm_cleared_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_ae_path_ds_stat_id_unpack(&this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_ds_stat_alarm_cleared_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_ds_stat_alarm_cleared_data_bounds_check(const bcmolt_ae_path_ds_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present, bcmolt_ae_path_ds_stat_alarm_cleared_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        switch (this->stat)
+        {
+            case BCMOLT_AE_PATH_DS_STAT_ID_BYTES:
+                break;
+            case BCMOLT_AE_PATH_DS_STAT_ID_FRAMES:
+                break;
+            case BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_64:
+                break;
+            case BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_65_127:
+                break;
+            case BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_128_255:
+                break;
+            case BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_256_511:
+                break;
+            case BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_512_1023:
+                break;
+            case BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_1024_1518:
+                break;
+            case BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_1519_2047:
+                break;
+            case BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_2048_4095:
+                break;
+            case BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_4096_9216:
+                break;
+            case BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_9217_16383:
+                break;
+            case BCMOLT_AE_PATH_DS_STAT_ID_BROADCAST_FRAMES:
+                break;
+            case BCMOLT_AE_PATH_DS_STAT_ID_DATA_BYTES:
+                break;
+            case BCMOLT_AE_PATH_DS_STAT_ID_MULTICAST_FRAMES:
+                break;
+            case BCMOLT_AE_PATH_DS_STAT_ID_UNICAST_FRAMES:
+                break;
+            case BCMOLT_AE_PATH_DS_STAT_ID_ABORT_FRAMES:
+                break;
+            default:
+                *failed_prop = BCMOLT_AE_PATH_DS_STAT_ALARM_CLEARED_ID_STAT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_ae_path_ds_stat_alarm_raised_data_set_default(bcmolt_ae_path_ds_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        this->stat = BCMOLT_AE_PATH_DS_STAT_ID_BYTES;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_ds_stat_alarm_raised_data_pack(const bcmolt_ae_path_ds_stat_alarm_raised_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_ae_path_ds_stat_id_pack(this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_ae_path_ds_stat_alarm_raised_data_get_packed_length(const bcmolt_ae_path_ds_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_ds_stat_alarm_raised_data_unpack(bcmolt_ae_path_ds_stat_alarm_raised_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_ae_path_ds_stat_id_unpack(&this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_ds_stat_alarm_raised_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_ds_stat_alarm_raised_data_bounds_check(const bcmolt_ae_path_ds_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present, bcmolt_ae_path_ds_stat_alarm_raised_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        switch (this->stat)
+        {
+            case BCMOLT_AE_PATH_DS_STAT_ID_BYTES:
+                break;
+            case BCMOLT_AE_PATH_DS_STAT_ID_FRAMES:
+                break;
+            case BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_64:
+                break;
+            case BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_65_127:
+                break;
+            case BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_128_255:
+                break;
+            case BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_256_511:
+                break;
+            case BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_512_1023:
+                break;
+            case BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_1024_1518:
+                break;
+            case BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_1519_2047:
+                break;
+            case BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_2048_4095:
+                break;
+            case BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_4096_9216:
+                break;
+            case BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_9217_16383:
+                break;
+            case BCMOLT_AE_PATH_DS_STAT_ID_BROADCAST_FRAMES:
+                break;
+            case BCMOLT_AE_PATH_DS_STAT_ID_DATA_BYTES:
+                break;
+            case BCMOLT_AE_PATH_DS_STAT_ID_MULTICAST_FRAMES:
+                break;
+            case BCMOLT_AE_PATH_DS_STAT_ID_UNICAST_FRAMES:
+                break;
+            case BCMOLT_AE_PATH_DS_STAT_ID_ABORT_FRAMES:
+                break;
+            default:
+                *failed_prop = BCMOLT_AE_PATH_DS_STAT_ALARM_RAISED_ID_STAT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_ae_path_ds_auto_cfg_data_set_default(bcmolt_ae_path_ds_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        this->stat_alarm_cleared = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        this->stat_alarm_raised = BCMOS_FALSE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_ds_auto_cfg_data_pack(const bcmolt_ae_path_ds_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->stat_alarm_cleared))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->stat_alarm_raised))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_ae_path_ds_auto_cfg_data_get_packed_length(const bcmolt_ae_path_ds_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_ds_auto_cfg_data_unpack(bcmolt_ae_path_ds_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->stat_alarm_cleared))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->stat_alarm_raised))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_ds_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_DS_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_ds_auto_cfg_data_bounds_check(const bcmolt_ae_path_ds_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_ae_path_ds_auto_cfg_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_ae_path_us_key_set_default(bcmolt_ae_path_us_key *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_KEY_ID_AE_NI)) != 0)
+    {
+        this->ae_ni = (bcmolt_ae_ni) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_us_key_pack(const bcmolt_ae_path_us_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_KEY_ID_AE_NI)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->ae_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_ae_path_us_key_get_packed_length(const bcmolt_ae_path_us_key *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_KEY_ID_AE_NI)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_us_key_unpack(bcmolt_ae_path_us_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_KEY_ID_AE_NI)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->ae_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_us_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_KEY_ID_AE_NI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_us_key_bounds_check(const bcmolt_ae_path_us_key *this, bcmolt_presence_mask fields_present, bcmolt_ae_path_us_key_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_ae_path_us_stat_data_set_default(bcmolt_ae_path_us_stat_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_BYTES)) != 0)
+    {
+        this->bytes = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES)) != 0)
+    {
+        this->frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_64)) != 0)
+    {
+        this->frames_64 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_65_127)) != 0)
+    {
+        this->frames_65_127 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_128_255)) != 0)
+    {
+        this->frames_128_255 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_256_511)) != 0)
+    {
+        this->frames_256_511 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_512_1023)) != 0)
+    {
+        this->frames_512_1023 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_1024_1518)) != 0)
+    {
+        this->frames_1024_1518 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_1519_2047)) != 0)
+    {
+        this->frames_1519_2047 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_2048_4095)) != 0)
+    {
+        this->frames_2048_4095 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_4096_9216)) != 0)
+    {
+        this->frames_4096_9216 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_9217_16383)) != 0)
+    {
+        this->frames_9217_16383 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_BROADCAST_FRAMES)) != 0)
+    {
+        this->broadcast_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_DATA_BYTES)) != 0)
+    {
+        this->data_bytes = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_MULTICAST_FRAMES)) != 0)
+    {
+        this->multicast_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_UNICAST_FRAMES)) != 0)
+    {
+        this->unicast_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_ABORT_FRAMES)) != 0)
+    {
+        this->abort_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FCS_ERROR)) != 0)
+    {
+        this->fcs_error = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_OVERSIZE_ERROR)) != 0)
+    {
+        this->oversize_error = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_RUNT_ERROR)) != 0)
+    {
+        this->runt_error = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_us_stat_data_pack(const bcmolt_ae_path_us_stat_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_64)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_64))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_65_127)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_65_127))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_128_255)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_128_255))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_256_511)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_256_511))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_512_1023)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_512_1023))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_1024_1518)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_1024_1518))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_1519_2047)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_1519_2047))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_2048_4095)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_2048_4095))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_4096_9216)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_4096_9216))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_9217_16383)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_9217_16383))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_BROADCAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->broadcast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_DATA_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->data_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_MULTICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->multicast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_UNICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->unicast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_ABORT_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->abort_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FCS_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->fcs_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_OVERSIZE_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->oversize_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_RUNT_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->runt_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_ae_path_us_stat_data_get_packed_length(const bcmolt_ae_path_us_stat_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_BYTES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_64)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_65_127)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_128_255)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_256_511)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_512_1023)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_1024_1518)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_1519_2047)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_2048_4095)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_4096_9216)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_9217_16383)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_BROADCAST_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_DATA_BYTES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_MULTICAST_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_UNICAST_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_ABORT_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FCS_ERROR)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_OVERSIZE_ERROR)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_RUNT_ERROR)) != 0)
+    {
+        count += 8;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_us_stat_data_unpack(bcmolt_ae_path_us_stat_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_64)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_64))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_65_127)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_65_127))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_128_255)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_128_255))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_256_511)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_256_511))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_512_1023)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_512_1023))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_1024_1518)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_1024_1518))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_1519_2047)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_1519_2047))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_2048_4095)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_2048_4095))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_4096_9216)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_4096_9216))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_9217_16383)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_9217_16383))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_BROADCAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->broadcast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_DATA_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->data_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_MULTICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->multicast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_UNICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->unicast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_ABORT_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->abort_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FCS_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->fcs_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_OVERSIZE_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->oversize_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_RUNT_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->runt_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_us_stat_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_64)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_65_127)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_128_255)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_256_511)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_512_1023)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_1024_1518)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_1519_2047)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_2048_4095)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_4096_9216)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FRAMES_9217_16383)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_BROADCAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_DATA_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_MULTICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_UNICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_ABORT_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_FCS_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_OVERSIZE_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ID_RUNT_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_us_stat_data_bounds_check(const bcmolt_ae_path_us_stat_data *this, bcmolt_presence_mask fields_present, bcmolt_ae_path_us_stat_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_ae_path_us_stat_cfg_data_set_default(bcmolt_ae_path_us_stat_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_CFG_ID_CFG)) != 0)
+    {
+        this->cfg.trigger.type = BCMOLT_STAT_CONDITION_TYPE_NONE;
+        this->cfg.soak.active_soak_time = 0;
+        this->cfg.soak.clear_soak_time = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_us_stat_cfg_data_pack(const bcmolt_ae_path_us_stat_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_pack(&this->cfg, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_ae_path_us_stat_cfg_data_get_packed_length(const bcmolt_ae_path_us_stat_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_CFG_ID_CFG)) != 0)
+    {
+        count += bcmolt_stat_alarm_config_get_packed_length(&this->cfg);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_us_stat_cfg_data_unpack(bcmolt_ae_path_us_stat_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_unpack(&this->cfg, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_us_stat_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_us_stat_cfg_data_bounds_check(const bcmolt_ae_path_us_stat_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_ae_path_us_stat_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_bounds_check(&this->cfg))
+        {
+            *failed_prop = BCMOLT_AE_PATH_US_STAT_CFG_ID_CFG;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_ae_path_us_stat_alarm_cleared_data_set_default(bcmolt_ae_path_us_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        this->stat = BCMOLT_AE_PATH_US_STAT_ID_BYTES;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_us_stat_alarm_cleared_data_pack(const bcmolt_ae_path_us_stat_alarm_cleared_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_ae_path_us_stat_id_pack(this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_ae_path_us_stat_alarm_cleared_data_get_packed_length(const bcmolt_ae_path_us_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_us_stat_alarm_cleared_data_unpack(bcmolt_ae_path_us_stat_alarm_cleared_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_ae_path_us_stat_id_unpack(&this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_us_stat_alarm_cleared_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_us_stat_alarm_cleared_data_bounds_check(const bcmolt_ae_path_us_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present, bcmolt_ae_path_us_stat_alarm_cleared_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        switch (this->stat)
+        {
+            case BCMOLT_AE_PATH_US_STAT_ID_BYTES:
+                break;
+            case BCMOLT_AE_PATH_US_STAT_ID_FRAMES:
+                break;
+            case BCMOLT_AE_PATH_US_STAT_ID_FRAMES_64:
+                break;
+            case BCMOLT_AE_PATH_US_STAT_ID_FRAMES_65_127:
+                break;
+            case BCMOLT_AE_PATH_US_STAT_ID_FRAMES_128_255:
+                break;
+            case BCMOLT_AE_PATH_US_STAT_ID_FRAMES_256_511:
+                break;
+            case BCMOLT_AE_PATH_US_STAT_ID_FRAMES_512_1023:
+                break;
+            case BCMOLT_AE_PATH_US_STAT_ID_FRAMES_1024_1518:
+                break;
+            case BCMOLT_AE_PATH_US_STAT_ID_FRAMES_1519_2047:
+                break;
+            case BCMOLT_AE_PATH_US_STAT_ID_FRAMES_2048_4095:
+                break;
+            case BCMOLT_AE_PATH_US_STAT_ID_FRAMES_4096_9216:
+                break;
+            case BCMOLT_AE_PATH_US_STAT_ID_FRAMES_9217_16383:
+                break;
+            case BCMOLT_AE_PATH_US_STAT_ID_BROADCAST_FRAMES:
+                break;
+            case BCMOLT_AE_PATH_US_STAT_ID_DATA_BYTES:
+                break;
+            case BCMOLT_AE_PATH_US_STAT_ID_MULTICAST_FRAMES:
+                break;
+            case BCMOLT_AE_PATH_US_STAT_ID_UNICAST_FRAMES:
+                break;
+            case BCMOLT_AE_PATH_US_STAT_ID_ABORT_FRAMES:
+                break;
+            case BCMOLT_AE_PATH_US_STAT_ID_FCS_ERROR:
+                break;
+            case BCMOLT_AE_PATH_US_STAT_ID_OVERSIZE_ERROR:
+                break;
+            case BCMOLT_AE_PATH_US_STAT_ID_RUNT_ERROR:
+                break;
+            default:
+                *failed_prop = BCMOLT_AE_PATH_US_STAT_ALARM_CLEARED_ID_STAT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_ae_path_us_stat_alarm_raised_data_set_default(bcmolt_ae_path_us_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        this->stat = BCMOLT_AE_PATH_US_STAT_ID_BYTES;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_us_stat_alarm_raised_data_pack(const bcmolt_ae_path_us_stat_alarm_raised_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_ae_path_us_stat_id_pack(this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_ae_path_us_stat_alarm_raised_data_get_packed_length(const bcmolt_ae_path_us_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_us_stat_alarm_raised_data_unpack(bcmolt_ae_path_us_stat_alarm_raised_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_ae_path_us_stat_id_unpack(&this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_us_stat_alarm_raised_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_us_stat_alarm_raised_data_bounds_check(const bcmolt_ae_path_us_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present, bcmolt_ae_path_us_stat_alarm_raised_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        switch (this->stat)
+        {
+            case BCMOLT_AE_PATH_US_STAT_ID_BYTES:
+                break;
+            case BCMOLT_AE_PATH_US_STAT_ID_FRAMES:
+                break;
+            case BCMOLT_AE_PATH_US_STAT_ID_FRAMES_64:
+                break;
+            case BCMOLT_AE_PATH_US_STAT_ID_FRAMES_65_127:
+                break;
+            case BCMOLT_AE_PATH_US_STAT_ID_FRAMES_128_255:
+                break;
+            case BCMOLT_AE_PATH_US_STAT_ID_FRAMES_256_511:
+                break;
+            case BCMOLT_AE_PATH_US_STAT_ID_FRAMES_512_1023:
+                break;
+            case BCMOLT_AE_PATH_US_STAT_ID_FRAMES_1024_1518:
+                break;
+            case BCMOLT_AE_PATH_US_STAT_ID_FRAMES_1519_2047:
+                break;
+            case BCMOLT_AE_PATH_US_STAT_ID_FRAMES_2048_4095:
+                break;
+            case BCMOLT_AE_PATH_US_STAT_ID_FRAMES_4096_9216:
+                break;
+            case BCMOLT_AE_PATH_US_STAT_ID_FRAMES_9217_16383:
+                break;
+            case BCMOLT_AE_PATH_US_STAT_ID_BROADCAST_FRAMES:
+                break;
+            case BCMOLT_AE_PATH_US_STAT_ID_DATA_BYTES:
+                break;
+            case BCMOLT_AE_PATH_US_STAT_ID_MULTICAST_FRAMES:
+                break;
+            case BCMOLT_AE_PATH_US_STAT_ID_UNICAST_FRAMES:
+                break;
+            case BCMOLT_AE_PATH_US_STAT_ID_ABORT_FRAMES:
+                break;
+            case BCMOLT_AE_PATH_US_STAT_ID_FCS_ERROR:
+                break;
+            case BCMOLT_AE_PATH_US_STAT_ID_OVERSIZE_ERROR:
+                break;
+            case BCMOLT_AE_PATH_US_STAT_ID_RUNT_ERROR:
+                break;
+            default:
+                *failed_prop = BCMOLT_AE_PATH_US_STAT_ALARM_RAISED_ID_STAT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_ae_path_us_auto_cfg_data_set_default(bcmolt_ae_path_us_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        this->stat_alarm_cleared = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        this->stat_alarm_raised = BCMOS_FALSE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_us_auto_cfg_data_pack(const bcmolt_ae_path_us_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->stat_alarm_cleared))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->stat_alarm_raised))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_ae_path_us_auto_cfg_data_get_packed_length(const bcmolt_ae_path_us_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_us_auto_cfg_data_unpack(bcmolt_ae_path_us_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->stat_alarm_cleared))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->stat_alarm_raised))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_us_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_AE_PATH_US_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_ae_path_us_auto_cfg_data_bounds_check(const bcmolt_ae_path_us_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_ae_path_us_auto_cfg_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_channel_key_set_default(bcmolt_channel_key *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_CHANNEL_KEY_ID_PON_NI)) != 0)
+    {
+        this->pon_ni = (bcmolt_pon_ni) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_channel_key_pack(const bcmolt_channel_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_CHANNEL_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, (uint8_t) this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_channel_key_get_packed_length(const bcmolt_channel_key *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_CHANNEL_KEY_ID_PON_NI)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_channel_key_unpack(bcmolt_channel_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_CHANNEL_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, (uint8_t *) &this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_channel_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_CHANNEL_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_channel_key_bounds_check(const bcmolt_channel_key *this, bcmolt_presence_mask fields_present, bcmolt_channel_key_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_CHANNEL_KEY_ID_PON_NI)) != 0)
+    {
+        if (this->pon_ni > (bcmolt_pon_ni) 15)
+        {
+            *failed_prop = BCMOLT_CHANNEL_KEY_ID_PON_NI;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_channel_cfg_data_set_default(bcmolt_channel_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_CHANNEL_CFG_ID_OPERATION_CONTROL)) != 0)
+    {
+        this->operation_control.re = 0;
+        this->operation_control.odn_class = BCMOLT_ODN_CLASS_N1;
+        this->operation_control.ds_fec_mode = BCMOLT_CONTROL_STATE_ENABLE;
+        this->operation_control.protocol = BCMOLT_TC_PROTOCOL_TC_LAYER_PROTOCOL_G_989_P_3;
+        this->operation_control.ds_link_type = BCMOLT_LINK_TYPE_UNSPECIFIED;
+        this->operation_control.pon_id.administrative_label = 0;
+        this->operation_control.pon_id.dwlch_id = 0;
+        this->operation_control.c = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_CHANNEL_CFG_ID_TOL)) != 0)
+    {
+        this->tol = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_CHANNEL_CFG_ID_SYSTEM_PROFILE)) != 0)
+    {
+        this->system_profile.ng_2_sys_id = 0;
+        this->system_profile.version = 0;
+        this->system_profile.channel_spacing = 0;
+        this->system_profile.us_operating_wavelength_bands = BCMOLT_US_OPERATING_WAVELENGTH_BANDS_EXPANDED_SPECTRUM_WIDE_BAND;
+        this->system_profile.us_mse = 0;
+        this->system_profile.loose_calibration_bound = BCMOLT_CALIBRATION_RECORD_UNSPECIFIED;
+        this->system_profile.fsr = 0;
+        this->system_profile.twdm_channel_count = 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_CHANNEL_CFG_ID_CHANNEL_PROFILE)) != 0)
+    {
+        memset(this->channel_profile.arr, 0, sizeof(this->channel_profile.arr));
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_channel_cfg_data_pack(const bcmolt_channel_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_CHANNEL_CFG_ID_OPERATION_CONTROL)) != 0)
+    {
+        if (!bcmolt_operation_control_pack(&this->operation_control, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_CHANNEL_CFG_ID_TOL)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, this->tol))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_CHANNEL_CFG_ID_SYSTEM_PROFILE)) != 0)
+    {
+        if (!bcmolt_system_profile_pack(&this->system_profile, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_CHANNEL_CFG_ID_CHANNEL_PROFILE)) != 0)
+    {
+        if (!bcmolt_arr_channel_profile_8_pack(&this->channel_profile, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_channel_cfg_data_get_packed_length(const bcmolt_channel_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_CHANNEL_CFG_ID_OPERATION_CONTROL)) != 0)
+    {
+        count += 11;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_CHANNEL_CFG_ID_TOL)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_CHANNEL_CFG_ID_SYSTEM_PROFILE)) != 0)
+    {
+        count += 12;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_CHANNEL_CFG_ID_CHANNEL_PROFILE)) != 0)
+    {
+        count += 120;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_channel_cfg_data_unpack(bcmolt_channel_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_CHANNEL_CFG_ID_OPERATION_CONTROL)) != 0)
+    {
+        if (!bcmolt_operation_control_unpack(&this->operation_control, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_CHANNEL_CFG_ID_TOL)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, &this->tol))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_CHANNEL_CFG_ID_SYSTEM_PROFILE)) != 0)
+    {
+        if (!bcmolt_system_profile_unpack(&this->system_profile, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_CHANNEL_CFG_ID_CHANNEL_PROFILE)) != 0)
+    {
+        if (!bcmolt_arr_channel_profile_8_unpack(&this->channel_profile, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_channel_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_CHANNEL_CFG_ID_OPERATION_CONTROL)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 11))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_CHANNEL_CFG_ID_TOL)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_CHANNEL_CFG_ID_SYSTEM_PROFILE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 12))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_CHANNEL_CFG_ID_CHANNEL_PROFILE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 120))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_channel_cfg_data_bounds_check(const bcmolt_channel_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_channel_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_CHANNEL_CFG_ID_OPERATION_CONTROL)) != 0)
+    {
+        if (!bcmolt_operation_control_bounds_check(&this->operation_control))
+        {
+            *failed_prop = BCMOLT_CHANNEL_CFG_ID_OPERATION_CONTROL;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_CHANNEL_CFG_ID_TOL)) != 0)
+    {
+        if (this->tol > 511)
+        {
+            *failed_prop = BCMOLT_CHANNEL_CFG_ID_TOL;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_CHANNEL_CFG_ID_SYSTEM_PROFILE)) != 0)
+    {
+        if (!bcmolt_system_profile_bounds_check(&this->system_profile))
+        {
+            *failed_prop = BCMOLT_CHANNEL_CFG_ID_SYSTEM_PROFILE;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_CHANNEL_CFG_ID_CHANNEL_PROFILE)) != 0)
+    {
+        if (!bcmolt_arr_channel_profile_8_bounds_check(&this->channel_profile))
+        {
+            *failed_prop = BCMOLT_CHANNEL_CFG_ID_CHANNEL_PROFILE;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_debug_key_set_default(bcmolt_debug_key *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_KEY_ID_RESERVED)) != 0)
+    {
+        this->reserved = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_debug_key_pack(const bcmolt_debug_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_KEY_ID_RESERVED)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->reserved))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_debug_key_get_packed_length(const bcmolt_debug_key *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_KEY_ID_RESERVED)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_debug_key_unpack(bcmolt_debug_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_KEY_ID_RESERVED)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->reserved))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_debug_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_KEY_ID_RESERVED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_debug_key_bounds_check(const bcmolt_debug_key *this, bcmolt_presence_mask fields_present, bcmolt_debug_key_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_debug_cfg_data_set_default(bcmolt_debug_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CFG_ID_CONSOLE_REDIRECTION)) != 0)
+    {
+        this->console_redirection = BCMOLT_CONSOLE_REDIRECTION_NONE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CFG_ID_INDICATIONS_DROPPED)) != 0)
+    {
+        this->indications_dropped = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CFG_ID_FILE_USED_PERCENT)) != 0)
+    {
+        this->file_used_percent = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CFG_ID_API_CAPTURE_CFG)) != 0)
+    {
+        this->api_capture_cfg.location = BCMOLT_API_CAPTURE_LOCATION_DEVICE;
+        this->api_capture_cfg.buffer_size_bytes = 16384;
+        this->api_capture_cfg.buffer_mode = BCMOLT_API_CAPTURE_BUFFER_MODE_WRAP;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CFG_ID_API_CAPTURE_STATS)) != 0)
+    {
+        this->api_capture_stats.buffer_used_bytes = 0;
+        this->api_capture_stats.buffer_wrap_count = 0;
+        this->api_capture_stats.events_recorded = 0;
+        this->api_capture_stats.events_dropped = 0;
+        this->api_capture_stats.readable_bytes = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CFG_ID_API_CAPTURE_BUFFER_READ)) != 0)
+    {
+        this->api_capture_buffer_read.offset = 0;
+        this->api_capture_buffer_read.size = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CFG_ID_API_CAPTURE_BUFFER)) != 0)
+    {
+        this->api_capture_buffer.len = 0;
+        this->api_capture_buffer.val = NULL;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_debug_cfg_data_pack(const bcmolt_debug_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CFG_ID_CONSOLE_REDIRECTION)) != 0)
+    {
+        if (!bcmolt_console_redirection_pack(this->console_redirection, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CFG_ID_INDICATIONS_DROPPED)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->indications_dropped))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CFG_ID_FILE_USED_PERCENT)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->file_used_percent))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CFG_ID_API_CAPTURE_CFG)) != 0)
+    {
+        if (!bcmolt_api_capture_config_pack(&this->api_capture_cfg, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CFG_ID_API_CAPTURE_STATS)) != 0)
+    {
+        if (!bcmolt_api_capture_stats_pack(&this->api_capture_stats, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CFG_ID_API_CAPTURE_BUFFER_READ)) != 0)
+    {
+        if (!bcmolt_api_capture_buffer_reader_pack(&this->api_capture_buffer_read, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CFG_ID_API_CAPTURE_BUFFER)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_pack(&this->api_capture_buffer, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_debug_cfg_data_get_packed_length(const bcmolt_debug_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CFG_ID_CONSOLE_REDIRECTION)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CFG_ID_INDICATIONS_DROPPED)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CFG_ID_FILE_USED_PERCENT)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CFG_ID_API_CAPTURE_CFG)) != 0)
+    {
+        count += 6;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CFG_ID_API_CAPTURE_STATS)) != 0)
+    {
+        count += 20;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CFG_ID_API_CAPTURE_BUFFER_READ)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CFG_ID_API_CAPTURE_BUFFER)) != 0)
+    {
+        count += bcmolt_u8_list_u32_get_packed_length(&this->api_capture_buffer);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_debug_cfg_data_unpack(bcmolt_debug_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CFG_ID_CONSOLE_REDIRECTION)) != 0)
+    {
+        if (!bcmolt_console_redirection_unpack(&this->console_redirection, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CFG_ID_INDICATIONS_DROPPED)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->indications_dropped))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CFG_ID_FILE_USED_PERCENT)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->file_used_percent))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CFG_ID_API_CAPTURE_CFG)) != 0)
+    {
+        if (!bcmolt_api_capture_config_unpack(&this->api_capture_cfg, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CFG_ID_API_CAPTURE_STATS)) != 0)
+    {
+        if (!bcmolt_api_capture_stats_unpack(&this->api_capture_stats, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CFG_ID_API_CAPTURE_BUFFER_READ)) != 0)
+    {
+        if (!bcmolt_api_capture_buffer_reader_unpack(&this->api_capture_buffer_read, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CFG_ID_API_CAPTURE_BUFFER)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_unpack(&this->api_capture_buffer, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_debug_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CFG_ID_CONSOLE_REDIRECTION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CFG_ID_INDICATIONS_DROPPED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CFG_ID_FILE_USED_PERCENT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CFG_ID_API_CAPTURE_CFG)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 6))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CFG_ID_API_CAPTURE_STATS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 20))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CFG_ID_API_CAPTURE_BUFFER_READ)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CFG_ID_API_CAPTURE_BUFFER)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_debug_cfg_data_bounds_check(const bcmolt_debug_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_debug_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CFG_ID_CONSOLE_REDIRECTION)) != 0)
+    {
+        switch (this->console_redirection)
+        {
+            case BCMOLT_CONSOLE_REDIRECTION_NONE:
+                break;
+            case BCMOLT_CONSOLE_REDIRECTION_REDIRECT:
+                break;
+            case BCMOLT_CONSOLE_REDIRECTION_CLONE:
+                break;
+            default:
+                *failed_prop = BCMOLT_DEBUG_CFG_ID_CONSOLE_REDIRECTION;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CFG_ID_API_CAPTURE_CFG)) != 0)
+    {
+        if (!bcmolt_api_capture_config_bounds_check(&this->api_capture_cfg))
+        {
+            *failed_prop = BCMOLT_DEBUG_CFG_ID_API_CAPTURE_CFG;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CFG_ID_API_CAPTURE_STATS)) != 0)
+    {
+        if (!bcmolt_api_capture_stats_bounds_check(&this->api_capture_stats))
+        {
+            *failed_prop = BCMOLT_DEBUG_CFG_ID_API_CAPTURE_STATS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CFG_ID_API_CAPTURE_BUFFER_READ)) != 0)
+    {
+        if (!bcmolt_api_capture_buffer_reader_bounds_check(&this->api_capture_buffer_read))
+        {
+            *failed_prop = BCMOLT_DEBUG_CFG_ID_API_CAPTURE_BUFFER_READ;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CFG_ID_API_CAPTURE_BUFFER)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_bounds_check(&this->api_capture_buffer))
+        {
+            *failed_prop = BCMOLT_DEBUG_CFG_ID_API_CAPTURE_BUFFER;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_debug_cli_output_data_set_default(bcmolt_debug_cli_output_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CLI_OUTPUT_ID_DATA)) != 0)
+    {
+        this->data.len = 0;
+        this->data.val = NULL;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_debug_cli_output_data_pack(const bcmolt_debug_cli_output_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CLI_OUTPUT_ID_DATA)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_pack(&this->data, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_debug_cli_output_data_get_packed_length(const bcmolt_debug_cli_output_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CLI_OUTPUT_ID_DATA)) != 0)
+    {
+        count += bcmolt_u8_list_u32_get_packed_length(&this->data);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_debug_cli_output_data_unpack(bcmolt_debug_cli_output_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CLI_OUTPUT_ID_DATA)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_unpack(&this->data, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_debug_cli_output_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CLI_OUTPUT_ID_DATA)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_debug_cli_output_data_bounds_check(const bcmolt_debug_cli_output_data *this, bcmolt_presence_mask fields_present, bcmolt_debug_cli_output_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CLI_OUTPUT_ID_DATA)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_bounds_check(&this->data))
+        {
+            *failed_prop = BCMOLT_DEBUG_CLI_OUTPUT_ID_DATA;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_debug_auto_cfg_data_set_default(bcmolt_debug_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_AUTO_CFG_ID_CLI_OUTPUT)) != 0)
+    {
+        this->cli_output = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_AUTO_CFG_ID_FILE_ALMOST_FULL)) != 0)
+    {
+        this->file_almost_full = BCMOS_FALSE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_debug_auto_cfg_data_pack(const bcmolt_debug_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_AUTO_CFG_ID_CLI_OUTPUT)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->cli_output))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_AUTO_CFG_ID_FILE_ALMOST_FULL)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->file_almost_full))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_debug_auto_cfg_data_get_packed_length(const bcmolt_debug_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_AUTO_CFG_ID_CLI_OUTPUT)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_AUTO_CFG_ID_FILE_ALMOST_FULL)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_debug_auto_cfg_data_unpack(bcmolt_debug_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_AUTO_CFG_ID_CLI_OUTPUT)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->cli_output))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_AUTO_CFG_ID_FILE_ALMOST_FULL)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->file_almost_full))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_debug_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_AUTO_CFG_ID_CLI_OUTPUT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_AUTO_CFG_ID_FILE_ALMOST_FULL)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_debug_auto_cfg_data_bounds_check(const bcmolt_debug_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_debug_auto_cfg_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_debug_cli_input_data_set_default(bcmolt_debug_cli_input_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CLI_INPUT_ID_DATA)) != 0)
+    {
+        this->data.len = 0;
+        this->data.val = NULL;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_debug_cli_input_data_pack(const bcmolt_debug_cli_input_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CLI_INPUT_ID_DATA)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_pack(&this->data, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_debug_cli_input_data_get_packed_length(const bcmolt_debug_cli_input_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CLI_INPUT_ID_DATA)) != 0)
+    {
+        count += bcmolt_u8_list_u32_get_packed_length(&this->data);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_debug_cli_input_data_unpack(bcmolt_debug_cli_input_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CLI_INPUT_ID_DATA)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_unpack(&this->data, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_debug_cli_input_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CLI_INPUT_ID_DATA)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_debug_cli_input_data_bounds_check(const bcmolt_debug_cli_input_data *this, bcmolt_presence_mask fields_present, bcmolt_debug_cli_input_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEBUG_CLI_INPUT_ID_DATA)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_bounds_check(&this->data))
+        {
+            *failed_prop = BCMOLT_DEBUG_CLI_INPUT_ID_DATA;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_device_key_set_default(bcmolt_device_key *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_KEY_ID_RESERVED)) != 0)
+    {
+        this->reserved = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_key_pack(const bcmolt_device_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_KEY_ID_RESERVED)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->reserved))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_device_key_get_packed_length(const bcmolt_device_key *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_KEY_ID_RESERVED)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_key_unpack(bcmolt_device_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_KEY_ID_RESERVED)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->reserved))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_KEY_ID_RESERVED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_key_bounds_check(const bcmolt_device_key *this, bcmolt_presence_mask fields_present, bcmolt_device_key_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_device_cfg_data_set_default(bcmolt_device_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_SYSTEM_MODE)) != 0)
+    {
+        this->system_mode = BCMOLT_SYSTEM_MODE_GPON__16_X;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_KEEPALIVE_INTERVAL)) != 0)
+    {
+        this->keepalive_interval = 5;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_KEEPALIVE_TOLERANCE)) != 0)
+    {
+        this->keepalive_tolerance = 3;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_FIRMWARE_SW_VERSION)) != 0)
+    {
+        this->firmware_sw_version.major = 0;
+        this->firmware_sw_version.minor = 0;
+        this->firmware_sw_version.revision = 0;
+        this->firmware_sw_version.model = 0;
+        memset(this->firmware_sw_version.build_time, 0, 32);
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_HOST_SW_VERSION)) != 0)
+    {
+        this->host_sw_version.major = 0;
+        this->host_sw_version.minor = 0;
+        this->host_sw_version.revision = 0;
+        this->host_sw_version.model = 0;
+        memset(this->host_sw_version.build_time, 0, 32);
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_CHIP_REVISION)) != 0)
+    {
+        this->chip_revision = (bcmolt_device_chip_revision) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_STATE)) != 0)
+    {
+        this->state = BCMOLT_DEVICE_STATE_DISCONNECTED;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_DEBUG)) != 0)
+    {
+        this->debug.host_dma_rx_queue_size = 128;
+        this->debug.host_dma_tx_queue_size = 128;
+        this->debug.avs_control = BCMOS_FALSE;
+        this->debug.use_prev_pon_serdes_firmware = BCMOS_FALSE;
+        this->debug.use_prev_nni_serdes_firmware = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_NNI_SPEED)) != 0)
+    {
+        this->nni_speed.first_half = BCMOLT_NNI_SPEED_GBPS_1;
+        this->nni_speed.second_half = BCMOLT_NNI_SPEED_GBPS_1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_PROTECTION_SWITCHING_EXT_IRQ)) != 0)
+    {
+        this->protection_switching_ext_irq = BCMOLT_EXT_IRQ_UNCONFIGURED;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_EPON_CLOCK_TRANSPORT_SAMPLE_DELAY)) != 0)
+    {
+        this->epon_clock_transport_sample_delay = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_INDICATION_SHAPING)) != 0)
+    {
+        this->indication_shaping.enabled = BCMOS_FALSE;
+        this->indication_shaping.max_rate = 1000;
+        this->indication_shaping.max_burst = 100;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_CHIP_TEMPERATURE)) != 0)
+    {
+        this->chip_temperature = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_ENABLE)) != 0)
+    {
+        this->gpon_xgpon_tod_enable = BCMOLT_CONTROL_STATE_DISABLE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_GPIO_PIN)) != 0)
+    {
+        this->gpon_xgpon_tod_gpio_pin = BCMOLT_GPIO_PIN_UNCONFIGURED;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_CONNECTED_INTERNALLY)) != 0)
+    {
+        this->gpon_xgpon_tod_connected_internally = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_EPON_8021_AS_TOD_FORMAT)) != 0)
+    {
+        memset(this->epon_8021_as_tod_format.str, 0, 256);
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_EPON_SHAPER_MODE)) != 0)
+    {
+        this->epon_shaper_mode = BCMOLT_SHAPER_MODE_LAYER_1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_EMBEDDED_IMAGE_LIST)) != 0)
+    {
+        this->embedded_image_list.len = 0;
+        this->embedded_image_list.val = NULL;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_CHIP_VOLTAGE)) != 0)
+    {
+        this->chip_voltage = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_EPON_TOD_STRING)) != 0)
+    {
+        memset(this->epon_tod_string.str, 0, 256);
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_XGPON_NUM_OF_ONUS)) != 0)
+    {
+        this->xgpon_num_of_onus = BCMOLT_XGPON_NUM_OF_ONUS_XGPON_SUPPORT_256_ONUS;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_DEVICE_IP_ADDRESS)) != 0)
+    {
+        bcmos_ipv4_address_init(&this->device_ip_address);
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_DEVICE_UDP_PORT)) != 0)
+    {
+        this->device_udp_port = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_TOD_UART_BAUDRATE)) != 0)
+    {
+        this->tod_uart_baudrate = BCMOLT_UART_BAUDRATE_UART_RATE_9600;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_STRING_LENGTH)) != 0)
+    {
+        this->gpon_xgpon_tod_string_length = 16;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_cfg_data_pack(const bcmolt_device_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_SYSTEM_MODE)) != 0)
+    {
+        if (!bcmolt_system_mode_pack(this->system_mode, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_KEEPALIVE_INTERVAL)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->keepalive_interval))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_KEEPALIVE_TOLERANCE)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->keepalive_tolerance))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_FIRMWARE_SW_VERSION)) != 0)
+    {
+        if (!bcmolt_firmware_sw_version_pack(&this->firmware_sw_version, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_HOST_SW_VERSION)) != 0)
+    {
+        if (!bcmolt_host_sw_version_pack(&this->host_sw_version, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_CHIP_REVISION)) != 0)
+    {
+        if (!bcmolt_device_chip_revision_pack(this->chip_revision, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_STATE)) != 0)
+    {
+        if (!bcmolt_device_state_pack(this->state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_DEBUG)) != 0)
+    {
+        if (!bcmolt_debug_device_cfg_pack(&this->debug, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_NNI_SPEED)) != 0)
+    {
+        if (!bcmolt_device_nni_speed_pack(&this->nni_speed, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_PROTECTION_SWITCHING_EXT_IRQ)) != 0)
+    {
+        if (!bcmolt_ext_irq_pack(this->protection_switching_ext_irq, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_EPON_CLOCK_TRANSPORT_SAMPLE_DELAY)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->epon_clock_transport_sample_delay))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_INDICATION_SHAPING)) != 0)
+    {
+        if (!bcmolt_indication_shaping_pack(&this->indication_shaping, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_CHIP_TEMPERATURE)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->chip_temperature))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_ENABLE)) != 0)
+    {
+        if (!bcmolt_control_state_pack(this->gpon_xgpon_tod_enable, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_GPIO_PIN)) != 0)
+    {
+        if (!bcmolt_gpio_pin_pack(this->gpon_xgpon_tod_gpio_pin, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_CONNECTED_INTERNALLY)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->gpon_xgpon_tod_connected_internally))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_EPON_8021_AS_TOD_FORMAT)) != 0)
+    {
+        if (!bcmolt_str_256_pack(&this->epon_8021_as_tod_format, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_EPON_SHAPER_MODE)) != 0)
+    {
+        if (!bcmolt_shaper_mode_pack(this->epon_shaper_mode, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_EMBEDDED_IMAGE_LIST)) != 0)
+    {
+        if (!bcmolt_embedded_image_entry_list_u8_pack(&this->embedded_image_list, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_CHIP_VOLTAGE)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->chip_voltage))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_EPON_TOD_STRING)) != 0)
+    {
+        if (!bcmolt_str_256_pack(&this->epon_tod_string, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_XGPON_NUM_OF_ONUS)) != 0)
+    {
+        if (!bcmolt_xgpon_num_of_onus_pack(this->xgpon_num_of_onus, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_DEVICE_IP_ADDRESS)) != 0)
+    {
+        if (!bcmolt_buf_write_ipv4_address(buf, this->device_ip_address))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_DEVICE_UDP_PORT)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, this->device_udp_port))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_TOD_UART_BAUDRATE)) != 0)
+    {
+        if (!bcmolt_uart_baudrate_pack(this->tod_uart_baudrate, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_STRING_LENGTH)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->gpon_xgpon_tod_string_length))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_device_cfg_data_get_packed_length(const bcmolt_device_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_SYSTEM_MODE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_KEEPALIVE_INTERVAL)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_KEEPALIVE_TOLERANCE)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_FIRMWARE_SW_VERSION)) != 0)
+    {
+        count += 39;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_HOST_SW_VERSION)) != 0)
+    {
+        count += 39;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_CHIP_REVISION)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_STATE)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_DEBUG)) != 0)
+    {
+        count += 7;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_NNI_SPEED)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_PROTECTION_SWITCHING_EXT_IRQ)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_EPON_CLOCK_TRANSPORT_SAMPLE_DELAY)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_INDICATION_SHAPING)) != 0)
+    {
+        count += 9;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_CHIP_TEMPERATURE)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_ENABLE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_GPIO_PIN)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_CONNECTED_INTERNALLY)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_EPON_8021_AS_TOD_FORMAT)) != 0)
+    {
+        count += 256;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_EPON_SHAPER_MODE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_EMBEDDED_IMAGE_LIST)) != 0)
+    {
+        count += bcmolt_embedded_image_entry_list_u8_get_packed_length(&this->embedded_image_list);
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_CHIP_VOLTAGE)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_EPON_TOD_STRING)) != 0)
+    {
+        count += 256;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_XGPON_NUM_OF_ONUS)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_DEVICE_IP_ADDRESS)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_DEVICE_UDP_PORT)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_TOD_UART_BAUDRATE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_STRING_LENGTH)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_cfg_data_unpack(bcmolt_device_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_SYSTEM_MODE)) != 0)
+    {
+        if (!bcmolt_system_mode_unpack(&this->system_mode, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_KEEPALIVE_INTERVAL)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->keepalive_interval))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_KEEPALIVE_TOLERANCE)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->keepalive_tolerance))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_FIRMWARE_SW_VERSION)) != 0)
+    {
+        if (!bcmolt_firmware_sw_version_unpack(&this->firmware_sw_version, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_HOST_SW_VERSION)) != 0)
+    {
+        if (!bcmolt_host_sw_version_unpack(&this->host_sw_version, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_CHIP_REVISION)) != 0)
+    {
+        if (!bcmolt_device_chip_revision_unpack(&this->chip_revision, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_STATE)) != 0)
+    {
+        if (!bcmolt_device_state_unpack(&this->state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_DEBUG)) != 0)
+    {
+        if (!bcmolt_debug_device_cfg_unpack(&this->debug, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_NNI_SPEED)) != 0)
+    {
+        if (!bcmolt_device_nni_speed_unpack(&this->nni_speed, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_PROTECTION_SWITCHING_EXT_IRQ)) != 0)
+    {
+        if (!bcmolt_ext_irq_unpack(&this->protection_switching_ext_irq, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_EPON_CLOCK_TRANSPORT_SAMPLE_DELAY)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->epon_clock_transport_sample_delay))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_INDICATION_SHAPING)) != 0)
+    {
+        if (!bcmolt_indication_shaping_unpack(&this->indication_shaping, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_CHIP_TEMPERATURE)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->chip_temperature))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_ENABLE)) != 0)
+    {
+        if (!bcmolt_control_state_unpack(&this->gpon_xgpon_tod_enable, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_GPIO_PIN)) != 0)
+    {
+        if (!bcmolt_gpio_pin_unpack(&this->gpon_xgpon_tod_gpio_pin, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_CONNECTED_INTERNALLY)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->gpon_xgpon_tod_connected_internally))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_EPON_8021_AS_TOD_FORMAT)) != 0)
+    {
+        if (!bcmolt_str_256_unpack(&this->epon_8021_as_tod_format, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_EPON_SHAPER_MODE)) != 0)
+    {
+        if (!bcmolt_shaper_mode_unpack(&this->epon_shaper_mode, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_EMBEDDED_IMAGE_LIST)) != 0)
+    {
+        if (!bcmolt_embedded_image_entry_list_u8_unpack(&this->embedded_image_list, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_CHIP_VOLTAGE)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->chip_voltage))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_EPON_TOD_STRING)) != 0)
+    {
+        if (!bcmolt_str_256_unpack(&this->epon_tod_string, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_XGPON_NUM_OF_ONUS)) != 0)
+    {
+        if (!bcmolt_xgpon_num_of_onus_unpack(&this->xgpon_num_of_onus, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_DEVICE_IP_ADDRESS)) != 0)
+    {
+        if (!bcmolt_buf_read_ipv4_address(buf, &this->device_ip_address))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_DEVICE_UDP_PORT)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, &this->device_udp_port))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_TOD_UART_BAUDRATE)) != 0)
+    {
+        if (!bcmolt_uart_baudrate_unpack(&this->tod_uart_baudrate, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_STRING_LENGTH)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->gpon_xgpon_tod_string_length))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_SYSTEM_MODE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_KEEPALIVE_INTERVAL)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_KEEPALIVE_TOLERANCE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_FIRMWARE_SW_VERSION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 39))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_HOST_SW_VERSION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 39))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_CHIP_REVISION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_STATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_DEBUG)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 7))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_NNI_SPEED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_PROTECTION_SWITCHING_EXT_IRQ)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_EPON_CLOCK_TRANSPORT_SAMPLE_DELAY)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_INDICATION_SHAPING)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 9))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_CHIP_TEMPERATURE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_ENABLE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_GPIO_PIN)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_CONNECTED_INTERNALLY)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_EPON_8021_AS_TOD_FORMAT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 256))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_EPON_SHAPER_MODE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_EMBEDDED_IMAGE_LIST)) != 0)
+    {
+        if (!bcmolt_embedded_image_entry_list_u8_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_CHIP_VOLTAGE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_EPON_TOD_STRING)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 256))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_XGPON_NUM_OF_ONUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_DEVICE_IP_ADDRESS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_DEVICE_UDP_PORT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_TOD_UART_BAUDRATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_STRING_LENGTH)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_cfg_data_bounds_check(const bcmolt_device_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_device_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_SYSTEM_MODE)) != 0)
+    {
+        switch (this->system_mode)
+        {
+            case BCMOLT_SYSTEM_MODE_GPON__16_X:
+                break;
+            case BCMOLT_SYSTEM_MODE_GPON__8_X:
+                break;
+            case BCMOLT_SYSTEM_MODE_GPON__4_X:
+                break;
+            case BCMOLT_SYSTEM_MODE_EPON__16_X:
+                break;
+            case BCMOLT_SYSTEM_MODE_XGPON_1__8_X:
+                break;
+            case BCMOLT_SYSTEM_MODE_EPON__8_X_COEXISTENCE_TDMA:
+                break;
+            case BCMOLT_SYSTEM_MODE_AE_8_X:
+                break;
+            case BCMOLT_SYSTEM_MODE_EPON__8_X_10_G:
+                break;
+            case BCMOLT_SYSTEM_MODE_GPON_8_XGPON_4_X_COEXISTENCE:
+                break;
+            case BCMOLT_SYSTEM_MODE_EPON__8_X:
+                break;
+            case BCMOLT_SYSTEM_MODE_EPON__4_X:
+                break;
+            case BCMOLT_SYSTEM_MODE_EPON__4_X_COEXISTENCE_TDMA:
+                break;
+            case BCMOLT_SYSTEM_MODE_EPON__4_X_10_G:
+                break;
+            case BCMOLT_SYSTEM_MODE_XGS__2_X_10_G:
+                break;
+            case BCMOLT_SYSTEM_MODE_NGPON2__2_X_10_G:
+                break;
+            case BCMOLT_SYSTEM_MODE_NGPON2__8_X_2_P_5_G:
+                break;
+            case BCMOLT_SYSTEM_MODE_XGPON_1__4_X:
+                break;
+            case BCMOLT_SYSTEM_MODE_EPON__2_X_10_G:
+                break;
+            default:
+                *failed_prop = BCMOLT_DEVICE_CFG_ID_SYSTEM_MODE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_KEEPALIVE_INTERVAL)) != 0)
+    {
+        if (this->keepalive_interval > 15)
+        {
+            *failed_prop = BCMOLT_DEVICE_CFG_ID_KEEPALIVE_INTERVAL;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_KEEPALIVE_TOLERANCE)) != 0)
+    {
+        if (this->keepalive_tolerance > 5)
+        {
+            *failed_prop = BCMOLT_DEVICE_CFG_ID_KEEPALIVE_TOLERANCE;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_FIRMWARE_SW_VERSION)) != 0)
+    {
+        if (!bcmolt_firmware_sw_version_bounds_check(&this->firmware_sw_version))
+        {
+            *failed_prop = BCMOLT_DEVICE_CFG_ID_FIRMWARE_SW_VERSION;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_HOST_SW_VERSION)) != 0)
+    {
+        if (!bcmolt_host_sw_version_bounds_check(&this->host_sw_version))
+        {
+            *failed_prop = BCMOLT_DEVICE_CFG_ID_HOST_SW_VERSION;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_CHIP_REVISION)) != 0)
+    {
+        switch (this->chip_revision)
+        {
+            case BCMOLT_DEVICE_CHIP_REVISION_A0:
+                break;
+            case BCMOLT_DEVICE_CHIP_REVISION_B0:
+                break;
+            default:
+                *failed_prop = BCMOLT_DEVICE_CFG_ID_CHIP_REVISION;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_STATE)) != 0)
+    {
+        switch (this->state)
+        {
+            case BCMOLT_DEVICE_STATE_DISCONNECTED:
+                break;
+            case BCMOLT_DEVICE_STATE_CONNECTING:
+                break;
+            case BCMOLT_DEVICE_STATE_READY:
+                break;
+            case BCMOLT_DEVICE_STATE_WAITING_FOR_DEVICE:
+                break;
+            case BCMOLT_DEVICE_STATE_TESTING_DDR:
+                break;
+            default:
+                *failed_prop = BCMOLT_DEVICE_CFG_ID_STATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_DEBUG)) != 0)
+    {
+        if (!bcmolt_debug_device_cfg_bounds_check(&this->debug))
+        {
+            *failed_prop = BCMOLT_DEVICE_CFG_ID_DEBUG;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_NNI_SPEED)) != 0)
+    {
+        if (!bcmolt_device_nni_speed_bounds_check(&this->nni_speed))
+        {
+            *failed_prop = BCMOLT_DEVICE_CFG_ID_NNI_SPEED;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_PROTECTION_SWITCHING_EXT_IRQ)) != 0)
+    {
+        switch (this->protection_switching_ext_irq)
+        {
+            case BCMOLT_EXT_IRQ_EXT_IRQ0:
+                break;
+            case BCMOLT_EXT_IRQ_EXT_IRQ1:
+                break;
+            case BCMOLT_EXT_IRQ_EXT_IRQ2:
+                break;
+            case BCMOLT_EXT_IRQ_EXT_IRQ3:
+                break;
+            case BCMOLT_EXT_IRQ_EXT_IRQ4:
+                break;
+            case BCMOLT_EXT_IRQ_EXT_IRQ5:
+                break;
+            case BCMOLT_EXT_IRQ_UNCONFIGURED:
+                break;
+            default:
+                *failed_prop = BCMOLT_DEVICE_CFG_ID_PROTECTION_SWITCHING_EXT_IRQ;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_INDICATION_SHAPING)) != 0)
+    {
+        if (!bcmolt_indication_shaping_bounds_check(&this->indication_shaping))
+        {
+            *failed_prop = BCMOLT_DEVICE_CFG_ID_INDICATION_SHAPING;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_ENABLE)) != 0)
+    {
+        switch (this->gpon_xgpon_tod_enable)
+        {
+            case BCMOLT_CONTROL_STATE_DISABLE:
+                break;
+            case BCMOLT_CONTROL_STATE_ENABLE:
+                break;
+            default:
+                *failed_prop = BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_ENABLE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_GPIO_PIN)) != 0)
+    {
+        switch (this->gpon_xgpon_tod_gpio_pin)
+        {
+            case BCMOLT_GPIO_PIN_PIN0:
+                break;
+            case BCMOLT_GPIO_PIN_PIN1:
+                break;
+            case BCMOLT_GPIO_PIN_PIN2:
+                break;
+            case BCMOLT_GPIO_PIN_PIN3:
+                break;
+            case BCMOLT_GPIO_PIN_PIN4:
+                break;
+            case BCMOLT_GPIO_PIN_PIN5:
+                break;
+            case BCMOLT_GPIO_PIN_PIN6:
+                break;
+            case BCMOLT_GPIO_PIN_PIN7:
+                break;
+            case BCMOLT_GPIO_PIN_PIN8:
+                break;
+            case BCMOLT_GPIO_PIN_PIN9:
+                break;
+            case BCMOLT_GPIO_PIN_PIN10:
+                break;
+            case BCMOLT_GPIO_PIN_PIN11:
+                break;
+            case BCMOLT_GPIO_PIN_PIN12:
+                break;
+            case BCMOLT_GPIO_PIN_PIN13:
+                break;
+            case BCMOLT_GPIO_PIN_PIN14:
+                break;
+            case BCMOLT_GPIO_PIN_PIN15:
+                break;
+            case BCMOLT_GPIO_PIN_PIN16:
+                break;
+            case BCMOLT_GPIO_PIN_PIN17:
+                break;
+            case BCMOLT_GPIO_PIN_PIN18:
+                break;
+            case BCMOLT_GPIO_PIN_PIN19:
+                break;
+            case BCMOLT_GPIO_PIN_PIN20:
+                break;
+            case BCMOLT_GPIO_PIN_PIN21:
+                break;
+            case BCMOLT_GPIO_PIN_PIN22:
+                break;
+            case BCMOLT_GPIO_PIN_PIN23:
+                break;
+            case BCMOLT_GPIO_PIN_PIN24:
+                break;
+            case BCMOLT_GPIO_PIN_PIN25:
+                break;
+            case BCMOLT_GPIO_PIN_PIN26:
+                break;
+            case BCMOLT_GPIO_PIN_PIN27:
+                break;
+            case BCMOLT_GPIO_PIN_PIN28:
+                break;
+            case BCMOLT_GPIO_PIN_PIN29:
+                break;
+            case BCMOLT_GPIO_PIN_PIN30:
+                break;
+            case BCMOLT_GPIO_PIN_PIN31:
+                break;
+            case BCMOLT_GPIO_PIN_PIN32:
+                break;
+            case BCMOLT_GPIO_PIN_PIN33:
+                break;
+            case BCMOLT_GPIO_PIN_PIN34:
+                break;
+            case BCMOLT_GPIO_PIN_PIN35:
+                break;
+            case BCMOLT_GPIO_PIN_PIN36:
+                break;
+            case BCMOLT_GPIO_PIN_PIN37:
+                break;
+            case BCMOLT_GPIO_PIN_PIN38:
+                break;
+            case BCMOLT_GPIO_PIN_PIN39:
+                break;
+            case BCMOLT_GPIO_PIN_PIN40:
+                break;
+            case BCMOLT_GPIO_PIN_PIN41:
+                break;
+            case BCMOLT_GPIO_PIN_PIN42:
+                break;
+            case BCMOLT_GPIO_PIN_PIN43:
+                break;
+            case BCMOLT_GPIO_PIN_PIN44:
+                break;
+            case BCMOLT_GPIO_PIN_PIN45:
+                break;
+            case BCMOLT_GPIO_PIN_PIN46:
+                break;
+            case BCMOLT_GPIO_PIN_PIN47:
+                break;
+            case BCMOLT_GPIO_PIN_PIN48:
+                break;
+            case BCMOLT_GPIO_PIN_PIN49:
+                break;
+            case BCMOLT_GPIO_PIN_PIN50:
+                break;
+            case BCMOLT_GPIO_PIN_PIN51:
+                break;
+            case BCMOLT_GPIO_PIN_PIN52:
+                break;
+            case BCMOLT_GPIO_PIN_PIN53:
+                break;
+            case BCMOLT_GPIO_PIN_PIN54:
+                break;
+            case BCMOLT_GPIO_PIN_PIN55:
+                break;
+            case BCMOLT_GPIO_PIN_PIN56:
+                break;
+            case BCMOLT_GPIO_PIN_PIN57:
+                break;
+            case BCMOLT_GPIO_PIN_PIN58:
+                break;
+            case BCMOLT_GPIO_PIN_PIN59:
+                break;
+            case BCMOLT_GPIO_PIN_PIN60:
+                break;
+            case BCMOLT_GPIO_PIN_PIN61:
+                break;
+            case BCMOLT_GPIO_PIN_PIN62:
+                break;
+            case BCMOLT_GPIO_PIN_PIN63:
+                break;
+            case BCMOLT_GPIO_PIN_PIN64:
+                break;
+            case BCMOLT_GPIO_PIN_PIN65:
+                break;
+            case BCMOLT_GPIO_PIN_PIN66:
+                break;
+            case BCMOLT_GPIO_PIN_PIN67:
+                break;
+            case BCMOLT_GPIO_PIN_PIN68:
+                break;
+            case BCMOLT_GPIO_PIN_PIN69:
+                break;
+            case BCMOLT_GPIO_PIN_PIN70:
+                break;
+            case BCMOLT_GPIO_PIN_PIN71:
+                break;
+            case BCMOLT_GPIO_PIN_PIN72:
+                break;
+            case BCMOLT_GPIO_PIN_PIN73:
+                break;
+            case BCMOLT_GPIO_PIN_PIN74:
+                break;
+            case BCMOLT_GPIO_PIN_PIN75:
+                break;
+            case BCMOLT_GPIO_PIN_PIN76:
+                break;
+            case BCMOLT_GPIO_PIN_PIN77:
+                break;
+            case BCMOLT_GPIO_PIN_PIN78:
+                break;
+            case BCMOLT_GPIO_PIN_PIN79:
+                break;
+            case BCMOLT_GPIO_PIN_PIN80:
+                break;
+            case BCMOLT_GPIO_PIN_PIN81:
+                break;
+            case BCMOLT_GPIO_PIN_PIN82:
+                break;
+            case BCMOLT_GPIO_PIN_PIN83:
+                break;
+            case BCMOLT_GPIO_PIN_PIN84:
+                break;
+            case BCMOLT_GPIO_PIN_PIN85:
+                break;
+            case BCMOLT_GPIO_PIN_PIN86:
+                break;
+            case BCMOLT_GPIO_PIN_PIN87:
+                break;
+            case BCMOLT_GPIO_PIN_PIN88:
+                break;
+            case BCMOLT_GPIO_PIN_PIN89:
+                break;
+            case BCMOLT_GPIO_PIN_PIN90:
+                break;
+            case BCMOLT_GPIO_PIN_PIN91:
+                break;
+            case BCMOLT_GPIO_PIN_PIN92:
+                break;
+            case BCMOLT_GPIO_PIN_PIN93:
+                break;
+            case BCMOLT_GPIO_PIN_PIN94:
+                break;
+            case BCMOLT_GPIO_PIN_PIN95:
+                break;
+            case BCMOLT_GPIO_PIN_PIN96:
+                break;
+            case BCMOLT_GPIO_PIN_PIN97:
+                break;
+            case BCMOLT_GPIO_PIN_PIN98:
+                break;
+            case BCMOLT_GPIO_PIN_PIN99:
+                break;
+            case BCMOLT_GPIO_PIN_PIN100:
+                break;
+            case BCMOLT_GPIO_PIN_PIN101:
+                break;
+            case BCMOLT_GPIO_PIN_PIN102:
+                break;
+            case BCMOLT_GPIO_PIN_PIN103:
+                break;
+            case BCMOLT_GPIO_PIN_PIN104:
+                break;
+            case BCMOLT_GPIO_PIN_PIN105:
+                break;
+            case BCMOLT_GPIO_PIN_PIN106:
+                break;
+            case BCMOLT_GPIO_PIN_UNCONFIGURED:
+                break;
+            default:
+                *failed_prop = BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_GPIO_PIN;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_EPON_8021_AS_TOD_FORMAT)) != 0)
+    {
+        if (!bcmolt_str_256_bounds_check(&this->epon_8021_as_tod_format))
+        {
+            *failed_prop = BCMOLT_DEVICE_CFG_ID_EPON_8021_AS_TOD_FORMAT;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_EPON_SHAPER_MODE)) != 0)
+    {
+        switch (this->epon_shaper_mode)
+        {
+            case BCMOLT_SHAPER_MODE_LAYER_1:
+                break;
+            case BCMOLT_SHAPER_MODE_LAYER_2:
+                break;
+            default:
+                *failed_prop = BCMOLT_DEVICE_CFG_ID_EPON_SHAPER_MODE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_EMBEDDED_IMAGE_LIST)) != 0)
+    {
+        if (!bcmolt_embedded_image_entry_list_u8_bounds_check(&this->embedded_image_list))
+        {
+            *failed_prop = BCMOLT_DEVICE_CFG_ID_EMBEDDED_IMAGE_LIST;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_EPON_TOD_STRING)) != 0)
+    {
+        if (!bcmolt_str_256_bounds_check(&this->epon_tod_string))
+        {
+            *failed_prop = BCMOLT_DEVICE_CFG_ID_EPON_TOD_STRING;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_XGPON_NUM_OF_ONUS)) != 0)
+    {
+        switch (this->xgpon_num_of_onus)
+        {
+            case BCMOLT_XGPON_NUM_OF_ONUS_XGPON_SUPPORT_256_ONUS:
+                break;
+            case BCMOLT_XGPON_NUM_OF_ONUS_XGPON_SUPPORT_510_ONUS:
+                break;
+            default:
+                *failed_prop = BCMOLT_DEVICE_CFG_ID_XGPON_NUM_OF_ONUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_TOD_UART_BAUDRATE)) != 0)
+    {
+        switch (this->tod_uart_baudrate)
+        {
+            case BCMOLT_UART_BAUDRATE_UART_RATE_4800:
+                break;
+            case BCMOLT_UART_BAUDRATE_UART_RATE_9600:
+                break;
+            case BCMOLT_UART_BAUDRATE_UART_RATE_14400:
+                break;
+            case BCMOLT_UART_BAUDRATE_UART_RATE_19200:
+                break;
+            case BCMOLT_UART_BAUDRATE_UART_RATE_38400:
+                break;
+            case BCMOLT_UART_BAUDRATE_UART_RATE_57600:
+                break;
+            case BCMOLT_UART_BAUDRATE_UART_RATE_115200:
+                break;
+            case BCMOLT_UART_BAUDRATE_UART_RATE_230400:
+                break;
+            case BCMOLT_UART_BAUDRATE_UART_RATE_380400:
+                break;
+            case BCMOLT_UART_BAUDRATE_UART_RATE_460800:
+                break;
+            case BCMOLT_UART_BAUDRATE_UART_RATE_921600:
+                break;
+            default:
+                *failed_prop = BCMOLT_DEVICE_CFG_ID_TOD_UART_BAUDRATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_STRING_LENGTH)) != 0)
+    {
+        if (this->gpon_xgpon_tod_string_length > 64)
+        {
+            *failed_prop = BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_STRING_LENGTH;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_device_connection_complete_data_set_default(bcmolt_device_connection_complete_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CONNECTION_COMPLETE_ID_STANDALONE)) != 0)
+    {
+        this->standalone = BCMOS_FALSE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_connection_complete_data_pack(const bcmolt_device_connection_complete_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CONNECTION_COMPLETE_ID_STANDALONE)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->standalone))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_device_connection_complete_data_get_packed_length(const bcmolt_device_connection_complete_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CONNECTION_COMPLETE_ID_STANDALONE)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_connection_complete_data_unpack(bcmolt_device_connection_complete_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CONNECTION_COMPLETE_ID_STANDALONE)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->standalone))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_connection_complete_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CONNECTION_COMPLETE_ID_STANDALONE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_connection_complete_data_bounds_check(const bcmolt_device_connection_complete_data *this, bcmolt_presence_mask fields_present, bcmolt_device_connection_complete_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_device_connection_failure_data_set_default(bcmolt_device_connection_failure_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CONNECTION_FAILURE_ID_REASON)) != 0)
+    {
+        this->reason = BCMOLT_HOST_CONNECTION_FAIL_REASON_TIMEOUT;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_connection_failure_data_pack(const bcmolt_device_connection_failure_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CONNECTION_FAILURE_ID_REASON)) != 0)
+    {
+        if (!bcmolt_host_connection_fail_reason_pack(this->reason, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_device_connection_failure_data_get_packed_length(const bcmolt_device_connection_failure_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CONNECTION_FAILURE_ID_REASON)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_connection_failure_data_unpack(bcmolt_device_connection_failure_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CONNECTION_FAILURE_ID_REASON)) != 0)
+    {
+        if (!bcmolt_host_connection_fail_reason_unpack(&this->reason, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_connection_failure_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CONNECTION_FAILURE_ID_REASON)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_connection_failure_data_bounds_check(const bcmolt_device_connection_failure_data *this, bcmolt_presence_mask fields_present, bcmolt_device_connection_failure_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_CONNECTION_FAILURE_ID_REASON)) != 0)
+    {
+        switch (this->reason)
+        {
+            case BCMOLT_HOST_CONNECTION_FAIL_REASON_TIMEOUT:
+                break;
+            case BCMOLT_HOST_CONNECTION_FAIL_REASON_KEEPALIVE:
+                break;
+            case BCMOLT_HOST_CONNECTION_FAIL_REASON_USER_CALLBACK_ERROR:
+                break;
+            case BCMOLT_HOST_CONNECTION_FAIL_REASON_SOFTWARE_VERSION_MISMATCH:
+                break;
+            case BCMOLT_HOST_CONNECTION_FAIL_REASON_SYSTEM_MODE_MISMATCH:
+                break;
+            case BCMOLT_HOST_CONNECTION_FAIL_REASON_NNI_SPEED_MISMATCH:
+                break;
+            case BCMOLT_HOST_CONNECTION_FAIL_REASON_RECONNECT_TIMEOUT:
+                break;
+            case BCMOLT_HOST_CONNECTION_FAIL_REASON_INTERNAL_ERROR:
+                break;
+            case BCMOLT_HOST_CONNECTION_FAIL_REASON_SYSTEM_MODE_NOT_SUPPORTED:
+                break;
+            case BCMOLT_HOST_CONNECTION_FAIL_REASON_PARAMETER:
+                break;
+            default:
+                *failed_prop = BCMOLT_DEVICE_CONNECTION_FAILURE_ID_REASON;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_device_ddr_test_complete_data_set_default(bcmolt_device_ddr_test_complete_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DDR_TEST_COMPLETE_ID_DDR_TEST)) != 0)
+    {
+        this->ddr_test.status = BCMOLT_DDR_TEST_STATUS_COMPLETED;
+        this->ddr_test.u.completed.cpu_result = BCMOLT_DDR_TEST_RESULT_SUCCESS;
+        this->ddr_test.u.completed.ras_0_result = BCMOLT_DDR_TEST_RESULT_SUCCESS;
+        this->ddr_test.u.completed.ras_1_result = BCMOLT_DDR_TEST_RESULT_SUCCESS;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_ddr_test_complete_data_pack(const bcmolt_device_ddr_test_complete_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DDR_TEST_COMPLETE_ID_DDR_TEST)) != 0)
+    {
+        if (!bcmolt_ddr_test_completed_pack(&this->ddr_test, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_device_ddr_test_complete_data_get_packed_length(const bcmolt_device_ddr_test_complete_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DDR_TEST_COMPLETE_ID_DDR_TEST)) != 0)
+    {
+        count += bcmolt_ddr_test_completed_get_packed_length(&this->ddr_test);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_ddr_test_complete_data_unpack(bcmolt_device_ddr_test_complete_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DDR_TEST_COMPLETE_ID_DDR_TEST)) != 0)
+    {
+        if (!bcmolt_ddr_test_completed_unpack(&this->ddr_test, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_ddr_test_complete_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DDR_TEST_COMPLETE_ID_DDR_TEST)) != 0)
+    {
+        if (!bcmolt_ddr_test_completed_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_ddr_test_complete_data_bounds_check(const bcmolt_device_ddr_test_complete_data *this, bcmolt_presence_mask fields_present, bcmolt_device_ddr_test_complete_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DDR_TEST_COMPLETE_ID_DDR_TEST)) != 0)
+    {
+        if (!bcmolt_ddr_test_completed_bounds_check(&this->ddr_test))
+        {
+            *failed_prop = BCMOLT_DEVICE_DDR_TEST_COMPLETE_ID_DDR_TEST;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_device_device_keep_alive_data_set_default(bcmolt_device_device_keep_alive_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_KEEP_ALIVE_ID_SEQUENCE_NUMBER)) != 0)
+    {
+        this->sequence_number = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_KEEP_ALIVE_ID_TIME_STAMP)) != 0)
+    {
+        this->time_stamp = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_device_keep_alive_data_pack(const bcmolt_device_device_keep_alive_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_KEEP_ALIVE_ID_SEQUENCE_NUMBER)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->sequence_number))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_KEEP_ALIVE_ID_TIME_STAMP)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->time_stamp))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_device_device_keep_alive_data_get_packed_length(const bcmolt_device_device_keep_alive_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_KEEP_ALIVE_ID_SEQUENCE_NUMBER)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_KEEP_ALIVE_ID_TIME_STAMP)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_device_keep_alive_data_unpack(bcmolt_device_device_keep_alive_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_KEEP_ALIVE_ID_SEQUENCE_NUMBER)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->sequence_number))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_KEEP_ALIVE_ID_TIME_STAMP)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->time_stamp))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_device_keep_alive_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_KEEP_ALIVE_ID_SEQUENCE_NUMBER)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_KEEP_ALIVE_ID_TIME_STAMP)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_device_keep_alive_data_bounds_check(const bcmolt_device_device_keep_alive_data *this, bcmolt_presence_mask fields_present, bcmolt_device_device_keep_alive_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_device_device_ready_data_set_default(bcmolt_device_device_ready_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_READY_ID_FIRMWARE_SW_VERSION)) != 0)
+    {
+        this->firmware_sw_version.major = 0;
+        this->firmware_sw_version.minor = 0;
+        this->firmware_sw_version.revision = 0;
+        this->firmware_sw_version.model = 0;
+        memset(this->firmware_sw_version.build_time, 0, 32);
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_READY_ID_SYSTEM_MODE)) != 0)
+    {
+        this->system_mode = BCMOLT_SYSTEM_MODE_GPON__16_X;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_READY_ID_NNI_SPEED)) != 0)
+    {
+        this->nni_speed.first_half = BCMOLT_NNI_SPEED_GBPS_1;
+        this->nni_speed.second_half = BCMOLT_NNI_SPEED_GBPS_1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_READY_ID_CHIP_REVISION)) != 0)
+    {
+        this->chip_revision = (bcmolt_device_chip_revision) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_READY_ID_TOD_ENABLE)) != 0)
+    {
+        this->tod_enable = BCMOLT_CONTROL_STATE_DISABLE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_READY_ID_TOD_GPIO_PIN)) != 0)
+    {
+        this->tod_gpio_pin = BCMOLT_GPIO_PIN_PIN0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_device_ready_data_pack(const bcmolt_device_device_ready_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_READY_ID_FIRMWARE_SW_VERSION)) != 0)
+    {
+        if (!bcmolt_firmware_sw_version_pack(&this->firmware_sw_version, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_READY_ID_SYSTEM_MODE)) != 0)
+    {
+        if (!bcmolt_system_mode_pack(this->system_mode, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_READY_ID_NNI_SPEED)) != 0)
+    {
+        if (!bcmolt_device_nni_speed_pack(&this->nni_speed, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_READY_ID_CHIP_REVISION)) != 0)
+    {
+        if (!bcmolt_device_chip_revision_pack(this->chip_revision, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_READY_ID_TOD_ENABLE)) != 0)
+    {
+        if (!bcmolt_control_state_pack(this->tod_enable, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_READY_ID_TOD_GPIO_PIN)) != 0)
+    {
+        if (!bcmolt_gpio_pin_pack(this->tod_gpio_pin, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_device_device_ready_data_get_packed_length(const bcmolt_device_device_ready_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_READY_ID_FIRMWARE_SW_VERSION)) != 0)
+    {
+        count += 39;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_READY_ID_SYSTEM_MODE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_READY_ID_NNI_SPEED)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_READY_ID_CHIP_REVISION)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_READY_ID_TOD_ENABLE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_READY_ID_TOD_GPIO_PIN)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_device_ready_data_unpack(bcmolt_device_device_ready_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_READY_ID_FIRMWARE_SW_VERSION)) != 0)
+    {
+        if (!bcmolt_firmware_sw_version_unpack(&this->firmware_sw_version, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_READY_ID_SYSTEM_MODE)) != 0)
+    {
+        if (!bcmolt_system_mode_unpack(&this->system_mode, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_READY_ID_NNI_SPEED)) != 0)
+    {
+        if (!bcmolt_device_nni_speed_unpack(&this->nni_speed, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_READY_ID_CHIP_REVISION)) != 0)
+    {
+        if (!bcmolt_device_chip_revision_unpack(&this->chip_revision, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_READY_ID_TOD_ENABLE)) != 0)
+    {
+        if (!bcmolt_control_state_unpack(&this->tod_enable, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_READY_ID_TOD_GPIO_PIN)) != 0)
+    {
+        if (!bcmolt_gpio_pin_unpack(&this->tod_gpio_pin, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_device_ready_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_READY_ID_FIRMWARE_SW_VERSION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 39))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_READY_ID_SYSTEM_MODE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_READY_ID_NNI_SPEED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_READY_ID_CHIP_REVISION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_READY_ID_TOD_ENABLE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_READY_ID_TOD_GPIO_PIN)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_device_ready_data_bounds_check(const bcmolt_device_device_ready_data *this, bcmolt_presence_mask fields_present, bcmolt_device_device_ready_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_READY_ID_FIRMWARE_SW_VERSION)) != 0)
+    {
+        if (!bcmolt_firmware_sw_version_bounds_check(&this->firmware_sw_version))
+        {
+            *failed_prop = BCMOLT_DEVICE_DEVICE_READY_ID_FIRMWARE_SW_VERSION;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_READY_ID_SYSTEM_MODE)) != 0)
+    {
+        switch (this->system_mode)
+        {
+            case BCMOLT_SYSTEM_MODE_GPON__16_X:
+                break;
+            case BCMOLT_SYSTEM_MODE_GPON__8_X:
+                break;
+            case BCMOLT_SYSTEM_MODE_GPON__4_X:
+                break;
+            case BCMOLT_SYSTEM_MODE_EPON__16_X:
+                break;
+            case BCMOLT_SYSTEM_MODE_XGPON_1__8_X:
+                break;
+            case BCMOLT_SYSTEM_MODE_EPON__8_X_COEXISTENCE_TDMA:
+                break;
+            case BCMOLT_SYSTEM_MODE_AE_8_X:
+                break;
+            case BCMOLT_SYSTEM_MODE_EPON__8_X_10_G:
+                break;
+            case BCMOLT_SYSTEM_MODE_GPON_8_XGPON_4_X_COEXISTENCE:
+                break;
+            case BCMOLT_SYSTEM_MODE_EPON__8_X:
+                break;
+            case BCMOLT_SYSTEM_MODE_EPON__4_X:
+                break;
+            case BCMOLT_SYSTEM_MODE_EPON__4_X_COEXISTENCE_TDMA:
+                break;
+            case BCMOLT_SYSTEM_MODE_EPON__4_X_10_G:
+                break;
+            case BCMOLT_SYSTEM_MODE_XGS__2_X_10_G:
+                break;
+            case BCMOLT_SYSTEM_MODE_NGPON2__2_X_10_G:
+                break;
+            case BCMOLT_SYSTEM_MODE_NGPON2__8_X_2_P_5_G:
+                break;
+            case BCMOLT_SYSTEM_MODE_XGPON_1__4_X:
+                break;
+            case BCMOLT_SYSTEM_MODE_EPON__2_X_10_G:
+                break;
+            default:
+                *failed_prop = BCMOLT_DEVICE_DEVICE_READY_ID_SYSTEM_MODE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_READY_ID_NNI_SPEED)) != 0)
+    {
+        if (!bcmolt_device_nni_speed_bounds_check(&this->nni_speed))
+        {
+            *failed_prop = BCMOLT_DEVICE_DEVICE_READY_ID_NNI_SPEED;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_READY_ID_CHIP_REVISION)) != 0)
+    {
+        switch (this->chip_revision)
+        {
+            case BCMOLT_DEVICE_CHIP_REVISION_A0:
+                break;
+            case BCMOLT_DEVICE_CHIP_REVISION_B0:
+                break;
+            default:
+                *failed_prop = BCMOLT_DEVICE_DEVICE_READY_ID_CHIP_REVISION;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_READY_ID_TOD_ENABLE)) != 0)
+    {
+        switch (this->tod_enable)
+        {
+            case BCMOLT_CONTROL_STATE_DISABLE:
+                break;
+            case BCMOLT_CONTROL_STATE_ENABLE:
+                break;
+            default:
+                *failed_prop = BCMOLT_DEVICE_DEVICE_READY_ID_TOD_ENABLE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_DEVICE_READY_ID_TOD_GPIO_PIN)) != 0)
+    {
+        switch (this->tod_gpio_pin)
+        {
+            case BCMOLT_GPIO_PIN_PIN0:
+                break;
+            case BCMOLT_GPIO_PIN_PIN1:
+                break;
+            case BCMOLT_GPIO_PIN_PIN2:
+                break;
+            case BCMOLT_GPIO_PIN_PIN3:
+                break;
+            case BCMOLT_GPIO_PIN_PIN4:
+                break;
+            case BCMOLT_GPIO_PIN_PIN5:
+                break;
+            case BCMOLT_GPIO_PIN_PIN6:
+                break;
+            case BCMOLT_GPIO_PIN_PIN7:
+                break;
+            case BCMOLT_GPIO_PIN_PIN8:
+                break;
+            case BCMOLT_GPIO_PIN_PIN9:
+                break;
+            case BCMOLT_GPIO_PIN_PIN10:
+                break;
+            case BCMOLT_GPIO_PIN_PIN11:
+                break;
+            case BCMOLT_GPIO_PIN_PIN12:
+                break;
+            case BCMOLT_GPIO_PIN_PIN13:
+                break;
+            case BCMOLT_GPIO_PIN_PIN14:
+                break;
+            case BCMOLT_GPIO_PIN_PIN15:
+                break;
+            case BCMOLT_GPIO_PIN_PIN16:
+                break;
+            case BCMOLT_GPIO_PIN_PIN17:
+                break;
+            case BCMOLT_GPIO_PIN_PIN18:
+                break;
+            case BCMOLT_GPIO_PIN_PIN19:
+                break;
+            case BCMOLT_GPIO_PIN_PIN20:
+                break;
+            case BCMOLT_GPIO_PIN_PIN21:
+                break;
+            case BCMOLT_GPIO_PIN_PIN22:
+                break;
+            case BCMOLT_GPIO_PIN_PIN23:
+                break;
+            case BCMOLT_GPIO_PIN_PIN24:
+                break;
+            case BCMOLT_GPIO_PIN_PIN25:
+                break;
+            case BCMOLT_GPIO_PIN_PIN26:
+                break;
+            case BCMOLT_GPIO_PIN_PIN27:
+                break;
+            case BCMOLT_GPIO_PIN_PIN28:
+                break;
+            case BCMOLT_GPIO_PIN_PIN29:
+                break;
+            case BCMOLT_GPIO_PIN_PIN30:
+                break;
+            case BCMOLT_GPIO_PIN_PIN31:
+                break;
+            case BCMOLT_GPIO_PIN_PIN32:
+                break;
+            case BCMOLT_GPIO_PIN_PIN33:
+                break;
+            case BCMOLT_GPIO_PIN_PIN34:
+                break;
+            case BCMOLT_GPIO_PIN_PIN35:
+                break;
+            case BCMOLT_GPIO_PIN_PIN36:
+                break;
+            case BCMOLT_GPIO_PIN_PIN37:
+                break;
+            case BCMOLT_GPIO_PIN_PIN38:
+                break;
+            case BCMOLT_GPIO_PIN_PIN39:
+                break;
+            case BCMOLT_GPIO_PIN_PIN40:
+                break;
+            case BCMOLT_GPIO_PIN_PIN41:
+                break;
+            case BCMOLT_GPIO_PIN_PIN42:
+                break;
+            case BCMOLT_GPIO_PIN_PIN43:
+                break;
+            case BCMOLT_GPIO_PIN_PIN44:
+                break;
+            case BCMOLT_GPIO_PIN_PIN45:
+                break;
+            case BCMOLT_GPIO_PIN_PIN46:
+                break;
+            case BCMOLT_GPIO_PIN_PIN47:
+                break;
+            case BCMOLT_GPIO_PIN_PIN48:
+                break;
+            case BCMOLT_GPIO_PIN_PIN49:
+                break;
+            case BCMOLT_GPIO_PIN_PIN50:
+                break;
+            case BCMOLT_GPIO_PIN_PIN51:
+                break;
+            case BCMOLT_GPIO_PIN_PIN52:
+                break;
+            case BCMOLT_GPIO_PIN_PIN53:
+                break;
+            case BCMOLT_GPIO_PIN_PIN54:
+                break;
+            case BCMOLT_GPIO_PIN_PIN55:
+                break;
+            case BCMOLT_GPIO_PIN_PIN56:
+                break;
+            case BCMOLT_GPIO_PIN_PIN57:
+                break;
+            case BCMOLT_GPIO_PIN_PIN58:
+                break;
+            case BCMOLT_GPIO_PIN_PIN59:
+                break;
+            case BCMOLT_GPIO_PIN_PIN60:
+                break;
+            case BCMOLT_GPIO_PIN_PIN61:
+                break;
+            case BCMOLT_GPIO_PIN_PIN62:
+                break;
+            case BCMOLT_GPIO_PIN_PIN63:
+                break;
+            case BCMOLT_GPIO_PIN_PIN64:
+                break;
+            case BCMOLT_GPIO_PIN_PIN65:
+                break;
+            case BCMOLT_GPIO_PIN_PIN66:
+                break;
+            case BCMOLT_GPIO_PIN_PIN67:
+                break;
+            case BCMOLT_GPIO_PIN_PIN68:
+                break;
+            case BCMOLT_GPIO_PIN_PIN69:
+                break;
+            case BCMOLT_GPIO_PIN_PIN70:
+                break;
+            case BCMOLT_GPIO_PIN_PIN71:
+                break;
+            case BCMOLT_GPIO_PIN_PIN72:
+                break;
+            case BCMOLT_GPIO_PIN_PIN73:
+                break;
+            case BCMOLT_GPIO_PIN_PIN74:
+                break;
+            case BCMOLT_GPIO_PIN_PIN75:
+                break;
+            case BCMOLT_GPIO_PIN_PIN76:
+                break;
+            case BCMOLT_GPIO_PIN_PIN77:
+                break;
+            case BCMOLT_GPIO_PIN_PIN78:
+                break;
+            case BCMOLT_GPIO_PIN_PIN79:
+                break;
+            case BCMOLT_GPIO_PIN_PIN80:
+                break;
+            case BCMOLT_GPIO_PIN_PIN81:
+                break;
+            case BCMOLT_GPIO_PIN_PIN82:
+                break;
+            case BCMOLT_GPIO_PIN_PIN83:
+                break;
+            case BCMOLT_GPIO_PIN_PIN84:
+                break;
+            case BCMOLT_GPIO_PIN_PIN85:
+                break;
+            case BCMOLT_GPIO_PIN_PIN86:
+                break;
+            case BCMOLT_GPIO_PIN_PIN87:
+                break;
+            case BCMOLT_GPIO_PIN_PIN88:
+                break;
+            case BCMOLT_GPIO_PIN_PIN89:
+                break;
+            case BCMOLT_GPIO_PIN_PIN90:
+                break;
+            case BCMOLT_GPIO_PIN_PIN91:
+                break;
+            case BCMOLT_GPIO_PIN_PIN92:
+                break;
+            case BCMOLT_GPIO_PIN_PIN93:
+                break;
+            case BCMOLT_GPIO_PIN_PIN94:
+                break;
+            case BCMOLT_GPIO_PIN_PIN95:
+                break;
+            case BCMOLT_GPIO_PIN_PIN96:
+                break;
+            case BCMOLT_GPIO_PIN_PIN97:
+                break;
+            case BCMOLT_GPIO_PIN_PIN98:
+                break;
+            case BCMOLT_GPIO_PIN_PIN99:
+                break;
+            case BCMOLT_GPIO_PIN_PIN100:
+                break;
+            case BCMOLT_GPIO_PIN_PIN101:
+                break;
+            case BCMOLT_GPIO_PIN_PIN102:
+                break;
+            case BCMOLT_GPIO_PIN_PIN103:
+                break;
+            case BCMOLT_GPIO_PIN_PIN104:
+                break;
+            case BCMOLT_GPIO_PIN_PIN105:
+                break;
+            case BCMOLT_GPIO_PIN_PIN106:
+                break;
+            case BCMOLT_GPIO_PIN_UNCONFIGURED:
+                break;
+            default:
+                *failed_prop = BCMOLT_DEVICE_DEVICE_READY_ID_TOD_GPIO_PIN;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_device_image_transfer_complete_data_set_default(bcmolt_device_image_transfer_complete_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_COMPLETE_ID_IMAGE_TYPE)) != 0)
+    {
+        this->image_type = BCMOLT_DEVICE_IMAGE_TYPE_BOOTLOADER;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_COMPLETE_ID_BLOCK_NUMBER)) != 0)
+    {
+        this->block_number = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_COMPLETE_ID_STATUS)) != 0)
+    {
+        this->status = BCMOLT_IMAGE_TRANSFER_STATUS_SUCCESS;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_image_transfer_complete_data_pack(const bcmolt_device_image_transfer_complete_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_COMPLETE_ID_IMAGE_TYPE)) != 0)
+    {
+        if (!bcmolt_device_image_type_pack(this->image_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_COMPLETE_ID_BLOCK_NUMBER)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->block_number))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_COMPLETE_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_image_transfer_status_pack(this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_device_image_transfer_complete_data_get_packed_length(const bcmolt_device_image_transfer_complete_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_COMPLETE_ID_IMAGE_TYPE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_COMPLETE_ID_BLOCK_NUMBER)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_COMPLETE_ID_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_image_transfer_complete_data_unpack(bcmolt_device_image_transfer_complete_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_COMPLETE_ID_IMAGE_TYPE)) != 0)
+    {
+        if (!bcmolt_device_image_type_unpack(&this->image_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_COMPLETE_ID_BLOCK_NUMBER)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->block_number))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_COMPLETE_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_image_transfer_status_unpack(&this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_image_transfer_complete_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_COMPLETE_ID_IMAGE_TYPE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_COMPLETE_ID_BLOCK_NUMBER)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_COMPLETE_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_image_transfer_complete_data_bounds_check(const bcmolt_device_image_transfer_complete_data *this, bcmolt_presence_mask fields_present, bcmolt_device_image_transfer_complete_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_COMPLETE_ID_IMAGE_TYPE)) != 0)
+    {
+        switch (this->image_type)
+        {
+            case BCMOLT_DEVICE_IMAGE_TYPE_BOOTLOADER:
+                break;
+            case BCMOLT_DEVICE_IMAGE_TYPE_APPLICATION:
+                break;
+            case BCMOLT_DEVICE_IMAGE_TYPE_ITU_PON_ONU_FIRMWARE:
+                break;
+            case BCMOLT_DEVICE_IMAGE_TYPE_EPON_ONU_FIRMWARE:
+                break;
+            default:
+                *failed_prop = BCMOLT_DEVICE_IMAGE_TRANSFER_COMPLETE_ID_IMAGE_TYPE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_COMPLETE_ID_STATUS)) != 0)
+    {
+        switch (this->status)
+        {
+            case BCMOLT_IMAGE_TRANSFER_STATUS_SUCCESS:
+                break;
+            case BCMOLT_IMAGE_TRANSFER_STATUS_MEMORY_ALLOCATION_FAILURE:
+                break;
+            case BCMOLT_IMAGE_TRANSFER_STATUS_UNSUPPORTED_FILE_TYPE:
+                break;
+            case BCMOLT_IMAGE_TRANSFER_STATUS_CRC_ERROR:
+                break;
+            case BCMOLT_IMAGE_TRANSFER_STATUS_BLOCK_OUT_OF_SYNC:
+                break;
+            case BCMOLT_IMAGE_TRANSFER_STATUS_INTERNAL_ERROR:
+                break;
+            case BCMOLT_IMAGE_TRANSFER_STATUS_INVALID_STATE:
+                break;
+            case BCMOLT_IMAGE_TRANSFER_STATUS_PREMATURE_TERMINATION:
+                break;
+            case BCMOLT_IMAGE_TRANSFER_STATUS_ACK_TIMEOUT:
+                break;
+            default:
+                *failed_prop = BCMOLT_DEVICE_IMAGE_TRANSFER_COMPLETE_ID_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_device_indications_dropped_data_set_default(bcmolt_device_indications_dropped_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_INDICATIONS_DROPPED_ID_TOTAL_COUNT)) != 0)
+    {
+        this->total_count = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_indications_dropped_data_pack(const bcmolt_device_indications_dropped_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_INDICATIONS_DROPPED_ID_TOTAL_COUNT)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->total_count))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_device_indications_dropped_data_get_packed_length(const bcmolt_device_indications_dropped_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_INDICATIONS_DROPPED_ID_TOTAL_COUNT)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_indications_dropped_data_unpack(bcmolt_device_indications_dropped_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_INDICATIONS_DROPPED_ID_TOTAL_COUNT)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->total_count))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_indications_dropped_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_INDICATIONS_DROPPED_ID_TOTAL_COUNT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_indications_dropped_data_bounds_check(const bcmolt_device_indications_dropped_data *this, bcmolt_presence_mask fields_present, bcmolt_device_indications_dropped_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_device_sw_error_data_set_default(bcmolt_device_sw_error_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_SW_ERROR_ID_TASK_NAME)) != 0)
+    {
+        memset(this->task_name.str, 0, 100);
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_SW_ERROR_ID_FILE_NAME)) != 0)
+    {
+        memset(this->file_name.str, 0, 100);
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_SW_ERROR_ID_LINE_NUMBER)) != 0)
+    {
+        this->line_number = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_SW_ERROR_ID_PON_NI)) != 0)
+    {
+        this->pon_ni = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_sw_error_data_pack(const bcmolt_device_sw_error_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_SW_ERROR_ID_TASK_NAME)) != 0)
+    {
+        if (!bcmolt_str_100_pack(&this->task_name, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_SW_ERROR_ID_FILE_NAME)) != 0)
+    {
+        if (!bcmolt_str_100_pack(&this->file_name, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_SW_ERROR_ID_LINE_NUMBER)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->line_number))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_SW_ERROR_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_device_sw_error_data_get_packed_length(const bcmolt_device_sw_error_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_SW_ERROR_ID_TASK_NAME)) != 0)
+    {
+        count += 100;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_SW_ERROR_ID_FILE_NAME)) != 0)
+    {
+        count += 100;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_SW_ERROR_ID_LINE_NUMBER)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_SW_ERROR_ID_PON_NI)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_sw_error_data_unpack(bcmolt_device_sw_error_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_SW_ERROR_ID_TASK_NAME)) != 0)
+    {
+        if (!bcmolt_str_100_unpack(&this->task_name, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_SW_ERROR_ID_FILE_NAME)) != 0)
+    {
+        if (!bcmolt_str_100_unpack(&this->file_name, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_SW_ERROR_ID_LINE_NUMBER)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->line_number))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_SW_ERROR_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_sw_error_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_SW_ERROR_ID_TASK_NAME)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 100))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_SW_ERROR_ID_FILE_NAME)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 100))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_SW_ERROR_ID_LINE_NUMBER)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_SW_ERROR_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_sw_error_data_bounds_check(const bcmolt_device_sw_error_data *this, bcmolt_presence_mask fields_present, bcmolt_device_sw_error_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_SW_ERROR_ID_TASK_NAME)) != 0)
+    {
+        if (!bcmolt_str_100_bounds_check(&this->task_name))
+        {
+            *failed_prop = BCMOLT_DEVICE_SW_ERROR_ID_TASK_NAME;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_SW_ERROR_ID_FILE_NAME)) != 0)
+    {
+        if (!bcmolt_str_100_bounds_check(&this->file_name))
+        {
+            *failed_prop = BCMOLT_DEVICE_SW_ERROR_ID_FILE_NAME;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_device_sw_exception_data_set_default(bcmolt_device_sw_exception_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_SW_EXCEPTION_ID_CPU_ID)) != 0)
+    {
+        this->cpu_id = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_SW_EXCEPTION_ID_TEXT)) != 0)
+    {
+        memset(this->text.str, 0, 2000);
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_sw_exception_data_pack(const bcmolt_device_sw_exception_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_SW_EXCEPTION_ID_CPU_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->cpu_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_SW_EXCEPTION_ID_TEXT)) != 0)
+    {
+        if (!bcmolt_str_2000_pack(&this->text, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_device_sw_exception_data_get_packed_length(const bcmolt_device_sw_exception_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_SW_EXCEPTION_ID_CPU_ID)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_SW_EXCEPTION_ID_TEXT)) != 0)
+    {
+        count += 2000;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_sw_exception_data_unpack(bcmolt_device_sw_exception_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_SW_EXCEPTION_ID_CPU_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->cpu_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_SW_EXCEPTION_ID_TEXT)) != 0)
+    {
+        if (!bcmolt_str_2000_unpack(&this->text, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_sw_exception_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_SW_EXCEPTION_ID_CPU_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_SW_EXCEPTION_ID_TEXT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2000))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_sw_exception_data_bounds_check(const bcmolt_device_sw_exception_data *this, bcmolt_presence_mask fields_present, bcmolt_device_sw_exception_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_SW_EXCEPTION_ID_TEXT)) != 0)
+    {
+        if (!bcmolt_str_2000_bounds_check(&this->text))
+        {
+            *failed_prop = BCMOLT_DEVICE_SW_EXCEPTION_ID_TEXT;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_device_auto_cfg_data_set_default(bcmolt_device_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_CONNECTION_COMPLETE)) != 0)
+    {
+        this->connection_complete = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_CONNECTION_ESTABLISHED)) != 0)
+    {
+        this->connection_established = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_CONNECTION_FAILURE)) != 0)
+    {
+        this->connection_failure = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_DDR_TEST_COMPLETE)) != 0)
+    {
+        this->ddr_test_complete = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_DEVICE_KEEP_ALIVE)) != 0)
+    {
+        this->device_keep_alive = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_DEVICE_READY)) != 0)
+    {
+        this->device_ready = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_DISCONNECTION_COMPLETE)) != 0)
+    {
+        this->disconnection_complete = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_IMAGE_TRANSFER_COMPLETE)) != 0)
+    {
+        this->image_transfer_complete = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_INDICATIONS_DROPPED)) != 0)
+    {
+        this->indications_dropped = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_SW_ERROR)) != 0)
+    {
+        this->sw_error = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_SW_EXCEPTION)) != 0)
+    {
+        this->sw_exception = BCMOS_FALSE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_auto_cfg_data_pack(const bcmolt_device_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_CONNECTION_COMPLETE)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->connection_complete))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_CONNECTION_ESTABLISHED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->connection_established))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_CONNECTION_FAILURE)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->connection_failure))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_DDR_TEST_COMPLETE)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->ddr_test_complete))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_DEVICE_KEEP_ALIVE)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->device_keep_alive))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_DEVICE_READY)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->device_ready))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_DISCONNECTION_COMPLETE)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->disconnection_complete))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_IMAGE_TRANSFER_COMPLETE)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->image_transfer_complete))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_INDICATIONS_DROPPED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->indications_dropped))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_SW_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->sw_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_SW_EXCEPTION)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->sw_exception))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_device_auto_cfg_data_get_packed_length(const bcmolt_device_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_CONNECTION_COMPLETE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_CONNECTION_ESTABLISHED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_CONNECTION_FAILURE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_DDR_TEST_COMPLETE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_DEVICE_KEEP_ALIVE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_DEVICE_READY)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_DISCONNECTION_COMPLETE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_IMAGE_TRANSFER_COMPLETE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_INDICATIONS_DROPPED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_SW_ERROR)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_SW_EXCEPTION)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_auto_cfg_data_unpack(bcmolt_device_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_CONNECTION_COMPLETE)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->connection_complete))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_CONNECTION_ESTABLISHED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->connection_established))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_CONNECTION_FAILURE)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->connection_failure))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_DDR_TEST_COMPLETE)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->ddr_test_complete))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_DEVICE_KEEP_ALIVE)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->device_keep_alive))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_DEVICE_READY)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->device_ready))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_DISCONNECTION_COMPLETE)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->disconnection_complete))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_IMAGE_TRANSFER_COMPLETE)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->image_transfer_complete))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_INDICATIONS_DROPPED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->indications_dropped))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_SW_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->sw_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_SW_EXCEPTION)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->sw_exception))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_CONNECTION_COMPLETE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_CONNECTION_ESTABLISHED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_CONNECTION_FAILURE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_DDR_TEST_COMPLETE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_DEVICE_KEEP_ALIVE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_DEVICE_READY)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_DISCONNECTION_COMPLETE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_IMAGE_TRANSFER_COMPLETE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_INDICATIONS_DROPPED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_SW_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_AUTO_CFG_ID_SW_EXCEPTION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_auto_cfg_data_bounds_check(const bcmolt_device_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_device_auto_cfg_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_device_host_keep_alive_data_set_default(bcmolt_device_host_keep_alive_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_HOST_KEEP_ALIVE_ID_SEQUENCE_NUMBER)) != 0)
+    {
+        this->sequence_number = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_HOST_KEEP_ALIVE_ID_TIME_STAMP)) != 0)
+    {
+        this->time_stamp = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_host_keep_alive_data_pack(const bcmolt_device_host_keep_alive_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_HOST_KEEP_ALIVE_ID_SEQUENCE_NUMBER)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->sequence_number))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_HOST_KEEP_ALIVE_ID_TIME_STAMP)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->time_stamp))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_device_host_keep_alive_data_get_packed_length(const bcmolt_device_host_keep_alive_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_HOST_KEEP_ALIVE_ID_SEQUENCE_NUMBER)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_HOST_KEEP_ALIVE_ID_TIME_STAMP)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_host_keep_alive_data_unpack(bcmolt_device_host_keep_alive_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_HOST_KEEP_ALIVE_ID_SEQUENCE_NUMBER)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->sequence_number))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_HOST_KEEP_ALIVE_ID_TIME_STAMP)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->time_stamp))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_host_keep_alive_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_HOST_KEEP_ALIVE_ID_SEQUENCE_NUMBER)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_HOST_KEEP_ALIVE_ID_TIME_STAMP)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_host_keep_alive_data_bounds_check(const bcmolt_device_host_keep_alive_data *this, bcmolt_presence_mask fields_present, bcmolt_device_host_keep_alive_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_device_image_transfer_data_data_set_default(bcmolt_device_image_transfer_data_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_DATA_ID_BLOCK_NUMBER)) != 0)
+    {
+        this->block_number = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_DATA_ID_MORE_DATA)) != 0)
+    {
+        this->more_data = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_DATA_ID_DATA)) != 0)
+    {
+        this->data.len = 0;
+        this->data.val = NULL;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_image_transfer_data_data_pack(const bcmolt_device_image_transfer_data_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_DATA_ID_BLOCK_NUMBER)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->block_number))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_DATA_ID_MORE_DATA)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->more_data))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_DATA_ID_DATA)) != 0)
+    {
+        if (!bcmolt_u8_list_u16_hex_pack(&this->data, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_device_image_transfer_data_data_get_packed_length(const bcmolt_device_image_transfer_data_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_DATA_ID_BLOCK_NUMBER)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_DATA_ID_MORE_DATA)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_DATA_ID_DATA)) != 0)
+    {
+        count += bcmolt_u8_list_u16_hex_get_packed_length(&this->data);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_image_transfer_data_data_unpack(bcmolt_device_image_transfer_data_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_DATA_ID_BLOCK_NUMBER)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->block_number))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_DATA_ID_MORE_DATA)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->more_data))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_DATA_ID_DATA)) != 0)
+    {
+        if (!bcmolt_u8_list_u16_hex_unpack(&this->data, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_image_transfer_data_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_DATA_ID_BLOCK_NUMBER)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_DATA_ID_MORE_DATA)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_DATA_ID_DATA)) != 0)
+    {
+        if (!bcmolt_u8_list_u16_hex_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_image_transfer_data_data_bounds_check(const bcmolt_device_image_transfer_data_data *this, bcmolt_presence_mask fields_present, bcmolt_device_image_transfer_data_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_DATA_ID_DATA)) != 0)
+    {
+        if (!bcmolt_u8_list_u16_hex_bounds_check(&this->data))
+        {
+            *failed_prop = BCMOLT_DEVICE_IMAGE_TRANSFER_DATA_ID_DATA;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_device_image_transfer_start_data_set_default(bcmolt_device_image_transfer_start_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID_IMAGE_TYPE)) != 0)
+    {
+        this->image_type = BCMOLT_DEVICE_IMAGE_TYPE_BOOTLOADER;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID_IMAGE_SIZE)) != 0)
+    {
+        this->image_size = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID_CRC32)) != 0)
+    {
+        this->crc32 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID_IMAGE_NAME)) != 0)
+    {
+        memset(this->image_name.str, 0, 64);
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_image_transfer_start_data_pack(const bcmolt_device_image_transfer_start_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID_IMAGE_TYPE)) != 0)
+    {
+        if (!bcmolt_device_image_type_pack(this->image_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID_IMAGE_SIZE)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->image_size))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID_CRC32)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->crc32))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID_IMAGE_NAME)) != 0)
+    {
+        if (!bcmolt_str_64_pack(&this->image_name, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_device_image_transfer_start_data_get_packed_length(const bcmolt_device_image_transfer_start_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID_IMAGE_TYPE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID_IMAGE_SIZE)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID_CRC32)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID_IMAGE_NAME)) != 0)
+    {
+        count += 64;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_image_transfer_start_data_unpack(bcmolt_device_image_transfer_start_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID_IMAGE_TYPE)) != 0)
+    {
+        if (!bcmolt_device_image_type_unpack(&this->image_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID_IMAGE_SIZE)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->image_size))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID_CRC32)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->crc32))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID_IMAGE_NAME)) != 0)
+    {
+        if (!bcmolt_str_64_unpack(&this->image_name, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_image_transfer_start_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID_IMAGE_TYPE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID_IMAGE_SIZE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID_CRC32)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID_IMAGE_NAME)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 64))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_image_transfer_start_data_bounds_check(const bcmolt_device_image_transfer_start_data *this, bcmolt_presence_mask fields_present, bcmolt_device_image_transfer_start_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID_IMAGE_TYPE)) != 0)
+    {
+        switch (this->image_type)
+        {
+            case BCMOLT_DEVICE_IMAGE_TYPE_BOOTLOADER:
+                break;
+            case BCMOLT_DEVICE_IMAGE_TYPE_APPLICATION:
+                break;
+            case BCMOLT_DEVICE_IMAGE_TYPE_ITU_PON_ONU_FIRMWARE:
+                break;
+            case BCMOLT_DEVICE_IMAGE_TYPE_EPON_ONU_FIRMWARE:
+                break;
+            default:
+                *failed_prop = BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID_IMAGE_TYPE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID_IMAGE_NAME)) != 0)
+    {
+        if (!bcmolt_str_64_bounds_check(&this->image_name))
+        {
+            *failed_prop = BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID_IMAGE_NAME;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_device_reset_data_set_default(bcmolt_device_reset_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_RESET_ID_MODE)) != 0)
+    {
+        this->mode = (bcmolt_device_reset_mode) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_reset_data_pack(const bcmolt_device_reset_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_RESET_ID_MODE)) != 0)
+    {
+        if (!bcmolt_device_reset_mode_pack(this->mode, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_device_reset_data_get_packed_length(const bcmolt_device_reset_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_RESET_ID_MODE)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_reset_data_unpack(bcmolt_device_reset_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_RESET_ID_MODE)) != 0)
+    {
+        if (!bcmolt_device_reset_mode_unpack(&this->mode, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_reset_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_RESET_ID_MODE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_reset_data_bounds_check(const bcmolt_device_reset_data *this, bcmolt_presence_mask fields_present, bcmolt_device_reset_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_RESET_ID_MODE)) != 0)
+    {
+        switch (this->mode)
+        {
+            case BCMOLT_DEVICE_RESET_MODE_DEVICE:
+                break;
+            case BCMOLT_DEVICE_RESET_MODE_HOST:
+                break;
+            case BCMOLT_DEVICE_RESET_MODE_ALL:
+                break;
+            default:
+                *failed_prop = BCMOLT_DEVICE_RESET_ID_MODE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_device_run_ddr_test_data_set_default(bcmolt_device_run_ddr_test_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_RUN_DDR_TEST_ID_CPU)) != 0)
+    {
+        this->cpu = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_RUN_DDR_TEST_ID_RAS_0)) != 0)
+    {
+        this->ras_0 = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_RUN_DDR_TEST_ID_RAS_1)) != 0)
+    {
+        this->ras_1 = BCMOS_FALSE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_run_ddr_test_data_pack(const bcmolt_device_run_ddr_test_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_RUN_DDR_TEST_ID_CPU)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->cpu))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_RUN_DDR_TEST_ID_RAS_0)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->ras_0))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_RUN_DDR_TEST_ID_RAS_1)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->ras_1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_device_run_ddr_test_data_get_packed_length(const bcmolt_device_run_ddr_test_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_RUN_DDR_TEST_ID_CPU)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_RUN_DDR_TEST_ID_RAS_0)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_RUN_DDR_TEST_ID_RAS_1)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_run_ddr_test_data_unpack(bcmolt_device_run_ddr_test_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_RUN_DDR_TEST_ID_CPU)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->cpu))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_RUN_DDR_TEST_ID_RAS_0)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->ras_0))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_RUN_DDR_TEST_ID_RAS_1)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->ras_1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_run_ddr_test_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_RUN_DDR_TEST_ID_CPU)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_RUN_DDR_TEST_ID_RAS_0)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_DEVICE_RUN_DDR_TEST_ID_RAS_1)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_device_run_ddr_test_data_bounds_check(const bcmolt_device_run_ddr_test_data *this, bcmolt_presence_mask fields_present, bcmolt_device_run_ddr_test_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_denied_link_key_set_default(bcmolt_epon_denied_link_key *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_KEY_ID_EPON_NI)) != 0)
+    {
+        this->epon_ni = (bcmolt_epon_ni) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_KEY_ID_MAC_ADDRESS)) != 0)
+    {
+        bcmos_mac_address_init(&this->mac_address);
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_key_pack(const bcmolt_epon_denied_link_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_KEY_ID_EPON_NI)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->epon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_KEY_ID_MAC_ADDRESS)) != 0)
+    {
+        if (!bcmolt_buf_write_mac_address(buf, this->mac_address))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_denied_link_key_get_packed_length(const bcmolt_epon_denied_link_key *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_KEY_ID_EPON_NI)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_KEY_ID_MAC_ADDRESS)) != 0)
+    {
+        count += 6;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_key_unpack(bcmolt_epon_denied_link_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_KEY_ID_EPON_NI)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->epon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_KEY_ID_MAC_ADDRESS)) != 0)
+    {
+        if (!bcmolt_buf_read_mac_address(buf, &this->mac_address))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_KEY_ID_EPON_NI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_KEY_ID_MAC_ADDRESS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 6))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_key_bounds_check(const bcmolt_epon_denied_link_key *this, bcmolt_presence_mask fields_present, bcmolt_epon_denied_link_key_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_denied_link_cfg_data_set_default(bcmolt_epon_denied_link_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_CFG_ID_ALARM_STATE)) != 0)
+    {
+        this->alarm_state.unknown_link_violation.link_rate = BCMOLT_EPON_LINK_RATE_TEN_TEN;
+        this->alarm_state.unknown_link_violation.alarm_status = BCMOLT_STATUS_OFF;
+        this->alarm_state.overhead_profile_violation = BCMOLT_STATUS_OFF;
+        this->alarm_state.max_link_violation = BCMOLT_STATUS_OFF;
+        this->alarm_state.llid_pool_empty_violation = BCMOLT_STATUS_OFF;
+        this->alarm_state.laser_on_off_violation.laser_on_time = (bcmolt_time_quanta) 0;
+        this->alarm_state.laser_on_off_violation.laser_off_time = (bcmolt_time_quanta) 0;
+        this->alarm_state.laser_on_off_violation.alarm_status = BCMOLT_STATUS_OFF;
+        this->alarm_state.system_resource_violation = BCMOLT_STATUS_OFF;
+        this->alarm_state.range_violation.range = (bcmolt_time_quanta) 0;
+        this->alarm_state.range_violation.alarm_status = BCMOLT_STATUS_OFF;
+        this->alarm_state.tdm_channels_exhausted = BCMOLT_STATUS_OFF;
+        this->alarm_state.rogue_violation.denied_llid = (bcmolt_epon_llid) 0;
+        this->alarm_state.rogue_violation.denied_range = (bcmolt_time_quanta) 0;
+        this->alarm_state.rogue_violation.alarm_status = BCMOLT_STATUS_OFF;
+        this->alarm_state.upstream_bandwidth_violation = BCMOLT_STATUS_OFF;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_cfg_data_pack(const bcmolt_epon_denied_link_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_CFG_ID_ALARM_STATE)) != 0)
+    {
+        if (!bcmolt_epon_denied_link_alarm_state_pack(&this->alarm_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_denied_link_cfg_data_get_packed_length(const bcmolt_epon_denied_link_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_CFG_ID_ALARM_STATE)) != 0)
+    {
+        count += 30;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_cfg_data_unpack(bcmolt_epon_denied_link_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_CFG_ID_ALARM_STATE)) != 0)
+    {
+        if (!bcmolt_epon_denied_link_alarm_state_unpack(&this->alarm_state, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_CFG_ID_ALARM_STATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 30))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_cfg_data_bounds_check(const bcmolt_epon_denied_link_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_denied_link_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_CFG_ID_ALARM_STATE)) != 0)
+    {
+        if (!bcmolt_epon_denied_link_alarm_state_bounds_check(&this->alarm_state))
+        {
+            *failed_prop = BCMOLT_EPON_DENIED_LINK_CFG_ID_ALARM_STATE;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_denied_link_laser_on_off_violation_data_set_default(bcmolt_epon_denied_link_laser_on_off_violation_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_LASER_ON_OFF_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        this->alarm_status.laser_on_time = (bcmolt_time_quanta) 0;
+        this->alarm_status.laser_off_time = (bcmolt_time_quanta) 0;
+        this->alarm_status.alarm_status = BCMOLT_STATUS_OFF;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_laser_on_off_violation_data_pack(const bcmolt_epon_denied_link_laser_on_off_violation_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_LASER_ON_OFF_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_laser_on_off_status_pack(&this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_denied_link_laser_on_off_violation_data_get_packed_length(const bcmolt_epon_denied_link_laser_on_off_violation_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_LASER_ON_OFF_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        count += 9;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_laser_on_off_violation_data_unpack(bcmolt_epon_denied_link_laser_on_off_violation_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_LASER_ON_OFF_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_laser_on_off_status_unpack(&this->alarm_status, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_laser_on_off_violation_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_LASER_ON_OFF_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 9))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_laser_on_off_violation_data_bounds_check(const bcmolt_epon_denied_link_laser_on_off_violation_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_denied_link_laser_on_off_violation_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_LASER_ON_OFF_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_laser_on_off_status_bounds_check(&this->alarm_status))
+        {
+            *failed_prop = BCMOLT_EPON_DENIED_LINK_LASER_ON_OFF_VIOLATION_ID_ALARM_STATUS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_denied_link_llid_pool_empty_violation_data_set_default(bcmolt_epon_denied_link_llid_pool_empty_violation_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_LLID_POOL_EMPTY_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        this->alarm_status = BCMOLT_STATUS_OFF;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_llid_pool_empty_violation_data_pack(const bcmolt_epon_denied_link_llid_pool_empty_violation_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_LLID_POOL_EMPTY_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_pack(this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_denied_link_llid_pool_empty_violation_data_get_packed_length(const bcmolt_epon_denied_link_llid_pool_empty_violation_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_LLID_POOL_EMPTY_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_llid_pool_empty_violation_data_unpack(bcmolt_epon_denied_link_llid_pool_empty_violation_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_LLID_POOL_EMPTY_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_unpack(&this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_llid_pool_empty_violation_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_LLID_POOL_EMPTY_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_llid_pool_empty_violation_data_bounds_check(const bcmolt_epon_denied_link_llid_pool_empty_violation_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_denied_link_llid_pool_empty_violation_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_LLID_POOL_EMPTY_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        switch (this->alarm_status)
+        {
+            case BCMOLT_STATUS_OFF:
+                break;
+            case BCMOLT_STATUS_ON:
+                break;
+            case BCMOLT_STATUS_NO_CHANGE:
+                break;
+            default:
+                *failed_prop = BCMOLT_EPON_DENIED_LINK_LLID_POOL_EMPTY_VIOLATION_ID_ALARM_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_denied_link_max_link_violation_data_set_default(bcmolt_epon_denied_link_max_link_violation_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_MAX_LINK_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        this->alarm_status = BCMOLT_STATUS_OFF;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_max_link_violation_data_pack(const bcmolt_epon_denied_link_max_link_violation_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_MAX_LINK_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_pack(this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_denied_link_max_link_violation_data_get_packed_length(const bcmolt_epon_denied_link_max_link_violation_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_MAX_LINK_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_max_link_violation_data_unpack(bcmolt_epon_denied_link_max_link_violation_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_MAX_LINK_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_unpack(&this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_max_link_violation_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_MAX_LINK_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_max_link_violation_data_bounds_check(const bcmolt_epon_denied_link_max_link_violation_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_denied_link_max_link_violation_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_MAX_LINK_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        switch (this->alarm_status)
+        {
+            case BCMOLT_STATUS_OFF:
+                break;
+            case BCMOLT_STATUS_ON:
+                break;
+            case BCMOLT_STATUS_NO_CHANGE:
+                break;
+            default:
+                *failed_prop = BCMOLT_EPON_DENIED_LINK_MAX_LINK_VIOLATION_ID_ALARM_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_denied_link_overhead_profile_violation_data_set_default(bcmolt_epon_denied_link_overhead_profile_violation_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_OVERHEAD_PROFILE_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        this->alarm_status = BCMOLT_STATUS_OFF;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_overhead_profile_violation_data_pack(const bcmolt_epon_denied_link_overhead_profile_violation_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_OVERHEAD_PROFILE_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_pack(this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_denied_link_overhead_profile_violation_data_get_packed_length(const bcmolt_epon_denied_link_overhead_profile_violation_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_OVERHEAD_PROFILE_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_overhead_profile_violation_data_unpack(bcmolt_epon_denied_link_overhead_profile_violation_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_OVERHEAD_PROFILE_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_unpack(&this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_overhead_profile_violation_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_OVERHEAD_PROFILE_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_overhead_profile_violation_data_bounds_check(const bcmolt_epon_denied_link_overhead_profile_violation_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_denied_link_overhead_profile_violation_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_OVERHEAD_PROFILE_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        switch (this->alarm_status)
+        {
+            case BCMOLT_STATUS_OFF:
+                break;
+            case BCMOLT_STATUS_ON:
+                break;
+            case BCMOLT_STATUS_NO_CHANGE:
+                break;
+            default:
+                *failed_prop = BCMOLT_EPON_DENIED_LINK_OVERHEAD_PROFILE_VIOLATION_ID_ALARM_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_denied_link_range_violation_data_set_default(bcmolt_epon_denied_link_range_violation_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_RANGE_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        this->alarm_status.range = (bcmolt_time_quanta) 0;
+        this->alarm_status.alarm_status = BCMOLT_STATUS_OFF;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_range_violation_data_pack(const bcmolt_epon_denied_link_range_violation_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_RANGE_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_range_status_pack(&this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_denied_link_range_violation_data_get_packed_length(const bcmolt_epon_denied_link_range_violation_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_RANGE_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        count += 5;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_range_violation_data_unpack(bcmolt_epon_denied_link_range_violation_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_RANGE_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_range_status_unpack(&this->alarm_status, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_range_violation_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_RANGE_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 5))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_range_violation_data_bounds_check(const bcmolt_epon_denied_link_range_violation_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_denied_link_range_violation_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_RANGE_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_range_status_bounds_check(&this->alarm_status))
+        {
+            *failed_prop = BCMOLT_EPON_DENIED_LINK_RANGE_VIOLATION_ID_ALARM_STATUS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_denied_link_rogue_violation_data_set_default(bcmolt_epon_denied_link_rogue_violation_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_ROGUE_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        this->alarm_status.denied_llid = (bcmolt_epon_llid) 0;
+        this->alarm_status.denied_range = (bcmolt_time_quanta) 0;
+        this->alarm_status.alarm_status = BCMOLT_STATUS_OFF;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_rogue_violation_data_pack(const bcmolt_epon_denied_link_rogue_violation_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_ROGUE_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_rogue_status_pack(&this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_denied_link_rogue_violation_data_get_packed_length(const bcmolt_epon_denied_link_rogue_violation_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_ROGUE_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        count += 7;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_rogue_violation_data_unpack(bcmolt_epon_denied_link_rogue_violation_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_ROGUE_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_rogue_status_unpack(&this->alarm_status, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_rogue_violation_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_ROGUE_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 7))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_rogue_violation_data_bounds_check(const bcmolt_epon_denied_link_rogue_violation_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_denied_link_rogue_violation_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_ROGUE_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_rogue_status_bounds_check(&this->alarm_status))
+        {
+            *failed_prop = BCMOLT_EPON_DENIED_LINK_ROGUE_VIOLATION_ID_ALARM_STATUS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_denied_link_system_resource_violation_data_set_default(bcmolt_epon_denied_link_system_resource_violation_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_SYSTEM_RESOURCE_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        this->alarm_status = BCMOLT_STATUS_OFF;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_system_resource_violation_data_pack(const bcmolt_epon_denied_link_system_resource_violation_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_SYSTEM_RESOURCE_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_pack(this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_denied_link_system_resource_violation_data_get_packed_length(const bcmolt_epon_denied_link_system_resource_violation_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_SYSTEM_RESOURCE_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_system_resource_violation_data_unpack(bcmolt_epon_denied_link_system_resource_violation_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_SYSTEM_RESOURCE_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_unpack(&this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_system_resource_violation_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_SYSTEM_RESOURCE_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_system_resource_violation_data_bounds_check(const bcmolt_epon_denied_link_system_resource_violation_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_denied_link_system_resource_violation_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_SYSTEM_RESOURCE_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        switch (this->alarm_status)
+        {
+            case BCMOLT_STATUS_OFF:
+                break;
+            case BCMOLT_STATUS_ON:
+                break;
+            case BCMOLT_STATUS_NO_CHANGE:
+                break;
+            default:
+                *failed_prop = BCMOLT_EPON_DENIED_LINK_SYSTEM_RESOURCE_VIOLATION_ID_ALARM_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_denied_link_tdm_channels_exhausted_data_set_default(bcmolt_epon_denied_link_tdm_channels_exhausted_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_TDM_CHANNELS_EXHAUSTED_ID_ALARM_STATUS)) != 0)
+    {
+        this->alarm_status = BCMOLT_STATUS_OFF;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_tdm_channels_exhausted_data_pack(const bcmolt_epon_denied_link_tdm_channels_exhausted_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_TDM_CHANNELS_EXHAUSTED_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_pack(this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_denied_link_tdm_channels_exhausted_data_get_packed_length(const bcmolt_epon_denied_link_tdm_channels_exhausted_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_TDM_CHANNELS_EXHAUSTED_ID_ALARM_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_tdm_channels_exhausted_data_unpack(bcmolt_epon_denied_link_tdm_channels_exhausted_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_TDM_CHANNELS_EXHAUSTED_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_unpack(&this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_tdm_channels_exhausted_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_TDM_CHANNELS_EXHAUSTED_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_tdm_channels_exhausted_data_bounds_check(const bcmolt_epon_denied_link_tdm_channels_exhausted_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_denied_link_tdm_channels_exhausted_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_TDM_CHANNELS_EXHAUSTED_ID_ALARM_STATUS)) != 0)
+    {
+        switch (this->alarm_status)
+        {
+            case BCMOLT_STATUS_OFF:
+                break;
+            case BCMOLT_STATUS_ON:
+                break;
+            case BCMOLT_STATUS_NO_CHANGE:
+                break;
+            default:
+                *failed_prop = BCMOLT_EPON_DENIED_LINK_TDM_CHANNELS_EXHAUSTED_ID_ALARM_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_denied_link_unknown_link_violation_data_set_default(bcmolt_epon_denied_link_unknown_link_violation_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_UNKNOWN_LINK_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        this->alarm_status.link_rate = BCMOLT_EPON_LINK_RATE_TEN_TEN;
+        this->alarm_status.alarm_status = BCMOLT_STATUS_OFF;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_unknown_link_violation_data_pack(const bcmolt_epon_denied_link_unknown_link_violation_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_UNKNOWN_LINK_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_unknown_link_status_pack(&this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_denied_link_unknown_link_violation_data_get_packed_length(const bcmolt_epon_denied_link_unknown_link_violation_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_UNKNOWN_LINK_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        count += 3;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_unknown_link_violation_data_unpack(bcmolt_epon_denied_link_unknown_link_violation_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_UNKNOWN_LINK_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_unknown_link_status_unpack(&this->alarm_status, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_unknown_link_violation_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_UNKNOWN_LINK_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 3))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_unknown_link_violation_data_bounds_check(const bcmolt_epon_denied_link_unknown_link_violation_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_denied_link_unknown_link_violation_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_UNKNOWN_LINK_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_unknown_link_status_bounds_check(&this->alarm_status))
+        {
+            *failed_prop = BCMOLT_EPON_DENIED_LINK_UNKNOWN_LINK_VIOLATION_ID_ALARM_STATUS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_denied_link_upstream_bandwidth_violation_data_set_default(bcmolt_epon_denied_link_upstream_bandwidth_violation_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_UPSTREAM_BANDWIDTH_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        this->alarm_status = BCMOLT_STATUS_OFF;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_upstream_bandwidth_violation_data_pack(const bcmolt_epon_denied_link_upstream_bandwidth_violation_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_UPSTREAM_BANDWIDTH_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_pack(this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_denied_link_upstream_bandwidth_violation_data_get_packed_length(const bcmolt_epon_denied_link_upstream_bandwidth_violation_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_UPSTREAM_BANDWIDTH_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_upstream_bandwidth_violation_data_unpack(bcmolt_epon_denied_link_upstream_bandwidth_violation_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_UPSTREAM_BANDWIDTH_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_unpack(&this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_upstream_bandwidth_violation_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_UPSTREAM_BANDWIDTH_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_upstream_bandwidth_violation_data_bounds_check(const bcmolt_epon_denied_link_upstream_bandwidth_violation_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_denied_link_upstream_bandwidth_violation_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_UPSTREAM_BANDWIDTH_VIOLATION_ID_ALARM_STATUS)) != 0)
+    {
+        switch (this->alarm_status)
+        {
+            case BCMOLT_STATUS_OFF:
+                break;
+            case BCMOLT_STATUS_ON:
+                break;
+            case BCMOLT_STATUS_NO_CHANGE:
+                break;
+            default:
+                *failed_prop = BCMOLT_EPON_DENIED_LINK_UPSTREAM_BANDWIDTH_VIOLATION_ID_ALARM_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_denied_link_auto_cfg_data_set_default(bcmolt_epon_denied_link_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_LASER_ON_OFF_VIOLATION)) != 0)
+    {
+        this->laser_on_off_violation = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_LLID_POOL_EMPTY_VIOLATION)) != 0)
+    {
+        this->llid_pool_empty_violation = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_MAX_LINK_VIOLATION)) != 0)
+    {
+        this->max_link_violation = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_OVERHEAD_PROFILE_VIOLATION)) != 0)
+    {
+        this->overhead_profile_violation = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_RANGE_VIOLATION)) != 0)
+    {
+        this->range_violation = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_ROGUE_VIOLATION)) != 0)
+    {
+        this->rogue_violation = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_SYSTEM_RESOURCE_VIOLATION)) != 0)
+    {
+        this->system_resource_violation = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_TDM_CHANNELS_EXHAUSTED)) != 0)
+    {
+        this->tdm_channels_exhausted = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_UNKNOWN_LINK_VIOLATION)) != 0)
+    {
+        this->unknown_link_violation = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_UPSTREAM_BANDWIDTH_VIOLATION)) != 0)
+    {
+        this->upstream_bandwidth_violation = BCMOS_FALSE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_auto_cfg_data_pack(const bcmolt_epon_denied_link_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_LASER_ON_OFF_VIOLATION)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->laser_on_off_violation))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_LLID_POOL_EMPTY_VIOLATION)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->llid_pool_empty_violation))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_MAX_LINK_VIOLATION)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->max_link_violation))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_OVERHEAD_PROFILE_VIOLATION)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->overhead_profile_violation))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_RANGE_VIOLATION)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->range_violation))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_ROGUE_VIOLATION)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->rogue_violation))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_SYSTEM_RESOURCE_VIOLATION)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->system_resource_violation))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_TDM_CHANNELS_EXHAUSTED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->tdm_channels_exhausted))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_UNKNOWN_LINK_VIOLATION)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->unknown_link_violation))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_UPSTREAM_BANDWIDTH_VIOLATION)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->upstream_bandwidth_violation))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_denied_link_auto_cfg_data_get_packed_length(const bcmolt_epon_denied_link_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_LASER_ON_OFF_VIOLATION)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_LLID_POOL_EMPTY_VIOLATION)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_MAX_LINK_VIOLATION)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_OVERHEAD_PROFILE_VIOLATION)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_RANGE_VIOLATION)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_ROGUE_VIOLATION)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_SYSTEM_RESOURCE_VIOLATION)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_TDM_CHANNELS_EXHAUSTED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_UNKNOWN_LINK_VIOLATION)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_UPSTREAM_BANDWIDTH_VIOLATION)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_auto_cfg_data_unpack(bcmolt_epon_denied_link_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_LASER_ON_OFF_VIOLATION)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->laser_on_off_violation))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_LLID_POOL_EMPTY_VIOLATION)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->llid_pool_empty_violation))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_MAX_LINK_VIOLATION)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->max_link_violation))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_OVERHEAD_PROFILE_VIOLATION)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->overhead_profile_violation))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_RANGE_VIOLATION)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->range_violation))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_ROGUE_VIOLATION)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->rogue_violation))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_SYSTEM_RESOURCE_VIOLATION)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->system_resource_violation))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_TDM_CHANNELS_EXHAUSTED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->tdm_channels_exhausted))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_UNKNOWN_LINK_VIOLATION)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->unknown_link_violation))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_UPSTREAM_BANDWIDTH_VIOLATION)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->upstream_bandwidth_violation))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_LASER_ON_OFF_VIOLATION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_LLID_POOL_EMPTY_VIOLATION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_MAX_LINK_VIOLATION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_OVERHEAD_PROFILE_VIOLATION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_RANGE_VIOLATION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_ROGUE_VIOLATION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_SYSTEM_RESOURCE_VIOLATION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_TDM_CHANNELS_EXHAUSTED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_UNKNOWN_LINK_VIOLATION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_UPSTREAM_BANDWIDTH_VIOLATION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_denied_link_auto_cfg_data_bounds_check(const bcmolt_epon_denied_link_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_denied_link_auto_cfg_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_link_key_set_default(bcmolt_epon_link_key *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_KEY_ID_EPON_NI)) != 0)
+    {
+        this->epon_ni = (bcmolt_epon_ni) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_KEY_ID_MAC_ADDRESS)) != 0)
+    {
+        bcmos_mac_address_init(&this->mac_address);
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_key_pack(const bcmolt_epon_link_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_KEY_ID_EPON_NI)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->epon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_KEY_ID_MAC_ADDRESS)) != 0)
+    {
+        if (!bcmolt_buf_write_mac_address(buf, this->mac_address))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_link_key_get_packed_length(const bcmolt_epon_link_key *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_KEY_ID_EPON_NI)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_KEY_ID_MAC_ADDRESS)) != 0)
+    {
+        count += 6;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_key_unpack(bcmolt_epon_link_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_KEY_ID_EPON_NI)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->epon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_KEY_ID_MAC_ADDRESS)) != 0)
+    {
+        if (!bcmolt_buf_read_mac_address(buf, &this->mac_address))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_KEY_ID_EPON_NI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_KEY_ID_MAC_ADDRESS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 6))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_key_bounds_check(const bcmolt_epon_link_key *this, bcmolt_presence_mask fields_present, bcmolt_epon_link_key_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_link_cfg_data_set_default(bcmolt_epon_link_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_LINK_RATE)) != 0)
+    {
+        this->link_rate = BCMOLT_EPON_LINK_RATE_TEN_TEN;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_STATE_FLAGS)) != 0)
+    {
+        this->state_flags = (bcmolt_epon_link_state_flags) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_LLID)) != 0)
+    {
+        this->llid = (bcmolt_epon_llid) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_LASER_ON_TIME_TQ)) != 0)
+    {
+        this->laser_on_time_tq = (bcmolt_time_quanta) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_LASER_OFF_TIME_TQ)) != 0)
+    {
+        this->laser_off_time_tq = (bcmolt_time_quanta) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_RANGE_VALUE_TQ)) != 0)
+    {
+        this->range_value_tq = (bcmolt_time_quanta) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_DISTANCE)) != 0)
+    {
+        this->distance = (bcmolt_meters) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_ALARM_STATE)) != 0)
+    {
+        this->alarm_state.key_exchange_failure = BCMOLT_STATUS_OFF;
+        this->alarm_state.invalid_mpcp_report_received = BCMOLT_STATUS_OFF;
+        this->alarm_state.mpcp_report_timeout = BCMOLT_STATUS_OFF;
+        this->alarm_state.oam_keepalive_timeout = BCMOLT_STATUS_OFF;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_TUNNEL_ID)) != 0)
+    {
+        this->tunnel_id = (bcmolt_epon_tunnel_id) 2164260864UL;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_ONU_ID)) != 0)
+    {
+        this->onu_id = (bcmolt_epon_onu_id) 255;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_MIN_LASER_OVERHEAD)) != 0)
+    {
+        this->min_laser_overhead.laser_on_time = (bcmolt_time_quanta) 32;
+        this->min_laser_overhead.laser_off_time = (bcmolt_time_quanta) 32;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_KEY_EXCHANGE_CONFIG)) != 0)
+    {
+        this->key_exchange_config.oam_type = BCMOLT_EPON_OAM_TYPE_BROADCOM;
+        this->key_exchange_config.period = 0;
+        this->key_exchange_config.direction = BCMOLT_EPON_ENCRYPTION_DIRECTION_DOWNSTREAM_ONLY;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_EPON_ENCRYPTION)) != 0)
+    {
+        this->epon_encryption.downstream_mode = BCMOLT_EPON_ENCRYPTION_MODE_NO_ENCRYPTION;
+        this->epon_encryption.downstream_key_choice = BCMOLT_EPON_KEY_CHOICE_KEY_0;
+        this->epon_encryption.downstream_encryption_information.format = BCMOLT_EPON_ENCRYPTION_INFORMATION_FORMAT_CFB;
+        memset(this->epon_encryption.downstream_encryption_information.u.cfb.key, 0, sizeof(this->epon_encryption.downstream_encryption_information.u.cfb.key));
+        this->epon_encryption.upstream_mode = BCMOLT_EPON_ENCRYPTION_MODE_NO_ENCRYPTION;
+        this->epon_encryption.upstream_key_choice = BCMOLT_EPON_KEY_CHOICE_KEY_0;
+        this->epon_encryption.upstream_encryption_information.format = BCMOLT_EPON_ENCRYPTION_INFORMATION_FORMAT_CFB;
+        memset(this->epon_encryption.upstream_encryption_information.u.cfb.key, 0, sizeof(this->epon_encryption.upstream_encryption_information.u.cfb.key));
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_FEC_ENABLE)) != 0)
+    {
+        this->fec_enable.upstream = BCMOLT_EPON_LINK_FEC_STATE_USE_DEFAULT;
+        this->fec_enable.downstream = BCMOLT_EPON_LINK_FEC_STATE_USE_DEFAULT;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_OAM_HEARTBEAT_CONFIG)) != 0)
+    {
+        this->oam_heartbeat_config.send_period = 0;
+        this->oam_heartbeat_config.transmit_frame.len = 0;
+        this->oam_heartbeat_config.transmit_frame.val = NULL;
+        this->oam_heartbeat_config.ignored_receive_frame_template.frame_octets.len = 0;
+        this->oam_heartbeat_config.ignored_receive_frame_template.frame_octets.val = NULL;
+        this->oam_heartbeat_config.ignored_receive_frame_template.mask_octets.len = 0;
+        this->oam_heartbeat_config.ignored_receive_frame_template.mask_octets.val = NULL;
+        this->oam_heartbeat_config.receive_timeout = 1;
+        this->oam_heartbeat_config.maximum_receive_size = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_UPSTREAM_BANDWIDTH)) != 0)
+    {
+        this->upstream_bandwidth.polling_interval_us = BCMOLT_POLLING_INTERVAL_AUTOMATIC;
+        this->upstream_bandwidth.grant_threshold_tq = (bcmolt_time_quanta) 0;
+        this->upstream_bandwidth.min_schedulershaper.bandwidth_Kbps = (bcmolt_bandwidth_Kbps) 0;
+        this->upstream_bandwidth.min_schedulershaper.max_burst_size_tq = (bcmolt_time_quanta) 0;
+        this->upstream_bandwidth.min_schedulershaper.priority = 0;
+        this->upstream_bandwidth.min_schedulershaper.weight_tq = (bcmolt_time_quanta) 0;
+        this->upstream_bandwidth.max_schedulershaper.bandwidth_Kbps = (bcmolt_bandwidth_Kbps) 0;
+        this->upstream_bandwidth.max_schedulershaper.max_burst_size_tq = (bcmolt_time_quanta) 0;
+        this->upstream_bandwidth.max_schedulershaper.priority = 0;
+        this->upstream_bandwidth.max_schedulershaper.weight_tq = (bcmolt_time_quanta) 0;
+        this->upstream_bandwidth.tdm_grant_size_tq = (bcmolt_time_quanta) 0;
+        this->upstream_bandwidth.tdm_grant_interval_us = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_UBD_INFO)) != 0)
+    {
+        this->ubd_info.actual_polling_interval = 0;
+        this->ubd_info.actual_grant_threshold_tq = (bcmolt_time_quanta) 0;
+        this->ubd_info.actual_min_schedulershaper.actual_mbs_tq = (bcmolt_time_quanta) 0;
+        this->ubd_info.actual_min_schedulershaper.actual_weight_tq = (bcmolt_time_quanta) 0;
+        this->ubd_info.actual_max_schedulershaper.actual_mbs_tq = (bcmolt_time_quanta) 0;
+        this->ubd_info.actual_max_schedulershaper.actual_weight_tq = (bcmolt_time_quanta) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_CLOCK_TRANSPORT_ENABLE)) != 0)
+    {
+        this->clock_transport_enable = BCMOS_TRUE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_PENDING_GRANTS)) != 0)
+    {
+        this->pending_grants = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_LINK_TYPE)) != 0)
+    {
+        this->link_type = BCMOLT_EPON_LINK_TYPE_SYSTEM;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_cfg_data_pack(const bcmolt_epon_link_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_LINK_RATE)) != 0)
+    {
+        if (!bcmolt_epon_link_rate_pack(this->link_rate, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_STATE_FLAGS)) != 0)
+    {
+        if (!bcmolt_epon_link_state_flags_pack(this->state_flags, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_LLID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->llid))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_LASER_ON_TIME_TQ)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, (uint32_t) this->laser_on_time_tq))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_LASER_OFF_TIME_TQ)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, (uint32_t) this->laser_off_time_tq))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_RANGE_VALUE_TQ)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, (uint32_t) this->range_value_tq))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_DISTANCE)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, (uint32_t) this->distance))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_ALARM_STATE)) != 0)
+    {
+        if (!bcmolt_epon_link_alarm_state_pack(&this->alarm_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_TUNNEL_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, (uint32_t) this->tunnel_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, (uint8_t) this->onu_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_MIN_LASER_OVERHEAD)) != 0)
+    {
+        if (!bcmolt_epon_laser_overhead_parameters_pack(&this->min_laser_overhead, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_KEY_EXCHANGE_CONFIG)) != 0)
+    {
+        if (!bcmolt_epon_key_exchange_config_pack(&this->key_exchange_config, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_EPON_ENCRYPTION)) != 0)
+    {
+        if (!bcmolt_epon_encryption_config_pack(&this->epon_encryption, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_FEC_ENABLE)) != 0)
+    {
+        if (!bcmolt_epon_link_fec_en_pack(&this->fec_enable, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_OAM_HEARTBEAT_CONFIG)) != 0)
+    {
+        if (!bcmolt_oam_heartbeat_config_pack(&this->oam_heartbeat_config, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_UPSTREAM_BANDWIDTH)) != 0)
+    {
+        if (!bcmolt_upstream_bandwidth_distribution_pack(&this->upstream_bandwidth, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_UBD_INFO)) != 0)
+    {
+        if (!bcmolt_ubd_info_pack(&this->ubd_info, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_CLOCK_TRANSPORT_ENABLE)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->clock_transport_enable))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_PENDING_GRANTS)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->pending_grants))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_LINK_TYPE)) != 0)
+    {
+        if (!bcmolt_epon_link_type_pack(this->link_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_link_cfg_data_get_packed_length(const bcmolt_epon_link_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_LINK_RATE)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_STATE_FLAGS)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_LLID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_LASER_ON_TIME_TQ)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_LASER_OFF_TIME_TQ)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_RANGE_VALUE_TQ)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_DISTANCE)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_ALARM_STATE)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_TUNNEL_ID)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_ONU_ID)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_MIN_LASER_OVERHEAD)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_KEY_EXCHANGE_CONFIG)) != 0)
+    {
+        count += 5;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_EPON_ENCRYPTION)) != 0)
+    {
+        count += bcmolt_epon_encryption_config_get_packed_length(&this->epon_encryption);
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_FEC_ENABLE)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_OAM_HEARTBEAT_CONFIG)) != 0)
+    {
+        count += bcmolt_oam_heartbeat_config_get_packed_length(&this->oam_heartbeat_config);
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_UPSTREAM_BANDWIDTH)) != 0)
+    {
+        count += 42;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_UBD_INFO)) != 0)
+    {
+        count += 22;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_CLOCK_TRANSPORT_ENABLE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_PENDING_GRANTS)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_LINK_TYPE)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_cfg_data_unpack(bcmolt_epon_link_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_LINK_RATE)) != 0)
+    {
+        if (!bcmolt_epon_link_rate_unpack(&this->link_rate, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_STATE_FLAGS)) != 0)
+    {
+        if (!bcmolt_epon_link_state_flags_unpack(&this->state_flags, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_LLID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->llid))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_LASER_ON_TIME_TQ)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, (uint32_t *) &this->laser_on_time_tq))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_LASER_OFF_TIME_TQ)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, (uint32_t *) &this->laser_off_time_tq))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_RANGE_VALUE_TQ)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, (uint32_t *) &this->range_value_tq))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_DISTANCE)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, (uint32_t *) &this->distance))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_ALARM_STATE)) != 0)
+    {
+        if (!bcmolt_epon_link_alarm_state_unpack(&this->alarm_state, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_TUNNEL_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, (uint32_t *) &this->tunnel_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, (uint8_t *) &this->onu_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_MIN_LASER_OVERHEAD)) != 0)
+    {
+        if (!bcmolt_epon_laser_overhead_parameters_unpack(&this->min_laser_overhead, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_KEY_EXCHANGE_CONFIG)) != 0)
+    {
+        if (!bcmolt_epon_key_exchange_config_unpack(&this->key_exchange_config, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_EPON_ENCRYPTION)) != 0)
+    {
+        if (!bcmolt_epon_encryption_config_unpack(&this->epon_encryption, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_FEC_ENABLE)) != 0)
+    {
+        if (!bcmolt_epon_link_fec_en_unpack(&this->fec_enable, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_OAM_HEARTBEAT_CONFIG)) != 0)
+    {
+        if (!bcmolt_oam_heartbeat_config_unpack(&this->oam_heartbeat_config, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_UPSTREAM_BANDWIDTH)) != 0)
+    {
+        if (!bcmolt_upstream_bandwidth_distribution_unpack(&this->upstream_bandwidth, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_UBD_INFO)) != 0)
+    {
+        if (!bcmolt_ubd_info_unpack(&this->ubd_info, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_CLOCK_TRANSPORT_ENABLE)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->clock_transport_enable))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_PENDING_GRANTS)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->pending_grants))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_LINK_TYPE)) != 0)
+    {
+        if (!bcmolt_epon_link_type_unpack(&this->link_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_LINK_RATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_STATE_FLAGS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_LLID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_LASER_ON_TIME_TQ)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_LASER_OFF_TIME_TQ)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_RANGE_VALUE_TQ)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_DISTANCE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_ALARM_STATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_TUNNEL_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_MIN_LASER_OVERHEAD)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_KEY_EXCHANGE_CONFIG)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 5))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_EPON_ENCRYPTION)) != 0)
+    {
+        if (!bcmolt_epon_encryption_config_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_FEC_ENABLE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_OAM_HEARTBEAT_CONFIG)) != 0)
+    {
+        if (!bcmolt_oam_heartbeat_config_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_UPSTREAM_BANDWIDTH)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 42))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_UBD_INFO)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 22))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_CLOCK_TRANSPORT_ENABLE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_PENDING_GRANTS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_LINK_TYPE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_cfg_data_bounds_check(const bcmolt_epon_link_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_link_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_LINK_RATE)) != 0)
+    {
+        switch (this->link_rate)
+        {
+            case BCMOLT_EPON_LINK_RATE_TEN_TEN:
+                break;
+            case BCMOLT_EPON_LINK_RATE_TEN_ONE:
+                break;
+            case BCMOLT_EPON_LINK_RATE_ONE_ONE:
+                break;
+            default:
+                *failed_prop = BCMOLT_EPON_LINK_CFG_ID_LINK_RATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_STATE_FLAGS)) != 0)
+    {
+        if ((this->state_flags & 0x00FE) != 0)
+        {
+            *failed_prop = BCMOLT_EPON_LINK_CFG_ID_STATE_FLAGS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_ALARM_STATE)) != 0)
+    {
+        if (!bcmolt_epon_link_alarm_state_bounds_check(&this->alarm_state))
+        {
+            *failed_prop = BCMOLT_EPON_LINK_CFG_ID_ALARM_STATE;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_TUNNEL_ID)) != 0)
+    {
+        if (this->tunnel_id < (bcmolt_epon_tunnel_id) 2164260864UL)
+        {
+            *failed_prop = BCMOLT_EPON_LINK_CFG_ID_TUNNEL_ID;
+            return BCMOS_FALSE;
+        }
+
+        if (this->tunnel_id > (bcmolt_epon_tunnel_id) 2164264959UL)
+        {
+            *failed_prop = BCMOLT_EPON_LINK_CFG_ID_TUNNEL_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_ONU_ID)) != 0)
+    {
+        if (this->onu_id > (bcmolt_epon_onu_id) 127)
+        {
+            *failed_prop = BCMOLT_EPON_LINK_CFG_ID_ONU_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_MIN_LASER_OVERHEAD)) != 0)
+    {
+        if (!bcmolt_epon_laser_overhead_parameters_bounds_check(&this->min_laser_overhead))
+        {
+            *failed_prop = BCMOLT_EPON_LINK_CFG_ID_MIN_LASER_OVERHEAD;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_KEY_EXCHANGE_CONFIG)) != 0)
+    {
+        if (!bcmolt_epon_key_exchange_config_bounds_check(&this->key_exchange_config))
+        {
+            *failed_prop = BCMOLT_EPON_LINK_CFG_ID_KEY_EXCHANGE_CONFIG;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_EPON_ENCRYPTION)) != 0)
+    {
+        if (!bcmolt_epon_encryption_config_bounds_check(&this->epon_encryption))
+        {
+            *failed_prop = BCMOLT_EPON_LINK_CFG_ID_EPON_ENCRYPTION;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_FEC_ENABLE)) != 0)
+    {
+        if (!bcmolt_epon_link_fec_en_bounds_check(&this->fec_enable))
+        {
+            *failed_prop = BCMOLT_EPON_LINK_CFG_ID_FEC_ENABLE;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_OAM_HEARTBEAT_CONFIG)) != 0)
+    {
+        if (!bcmolt_oam_heartbeat_config_bounds_check(&this->oam_heartbeat_config))
+        {
+            *failed_prop = BCMOLT_EPON_LINK_CFG_ID_OAM_HEARTBEAT_CONFIG;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_UPSTREAM_BANDWIDTH)) != 0)
+    {
+        if (!bcmolt_upstream_bandwidth_distribution_bounds_check(&this->upstream_bandwidth))
+        {
+            *failed_prop = BCMOLT_EPON_LINK_CFG_ID_UPSTREAM_BANDWIDTH;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_UBD_INFO)) != 0)
+    {
+        if (!bcmolt_ubd_info_bounds_check(&this->ubd_info))
+        {
+            *failed_prop = BCMOLT_EPON_LINK_CFG_ID_UBD_INFO;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_CFG_ID_LINK_TYPE)) != 0)
+    {
+        switch (this->link_type)
+        {
+            case BCMOLT_EPON_LINK_TYPE_SYSTEM:
+                break;
+            case BCMOLT_EPON_LINK_TYPE_DOWNSTREAM_ONLY:
+                break;
+            case BCMOLT_EPON_LINK_TYPE_BIDIRECTIONAL:
+                break;
+            default:
+                *failed_prop = BCMOLT_EPON_LINK_CFG_ID_LINK_TYPE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_link_stat_data_set_default(bcmolt_epon_link_stat_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_DATA_BYTES)) != 0)
+    {
+        this->rx_data_bytes = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_DATA_FRAMES)) != 0)
+    {
+        this->rx_data_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_64)) != 0)
+    {
+        this->rx_frames_64 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_65_127)) != 0)
+    {
+        this->rx_frames_65_127 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_128_255)) != 0)
+    {
+        this->rx_frames_128_255 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_256_511)) != 0)
+    {
+        this->rx_frames_256_511 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_512_1023)) != 0)
+    {
+        this->rx_frames_512_1023 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_1024_1518)) != 0)
+    {
+        this->rx_frames_1024_1518 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_1519_2047)) != 0)
+    {
+        this->rx_frames_1519_2047 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_2048_4095)) != 0)
+    {
+        this->rx_frames_2048_4095 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_4096_9216)) != 0)
+    {
+        this->rx_frames_4096_9216 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_9217_16383)) != 0)
+    {
+        this->rx_frames_9217_16383 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_OAM_BYTES)) != 0)
+    {
+        this->rx_oam_bytes = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_OAM_FRAMES)) != 0)
+    {
+        this->rx_oam_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_MPCP_FRAMES)) != 0)
+    {
+        this->rx_mpcp_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_BROADCAST_FRAMES)) != 0)
+    {
+        this->rx_broadcast_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_UNICAST_FRAMES)) != 0)
+    {
+        this->rx_unicast_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_MULTICAST_FRAMES)) != 0)
+    {
+        this->rx_multicast_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_REPORT_FRAMES)) != 0)
+    {
+        this->rx_report_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FCS_ERROR)) != 0)
+    {
+        this->rx_fcs_error = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_OVERSIZE_ERROR)) != 0)
+    {
+        this->rx_oversize_error = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_RUNT_ERROR)) != 0)
+    {
+        this->rx_runt_error = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_LINE_CODE_ERROR)) != 0)
+    {
+        this->rx_line_code_error = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_LINE_CODE_ERROR_MAX)) != 0)
+    {
+        this->rx_line_code_error_max = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_DATA_BYTES)) != 0)
+    {
+        this->tx_data_bytes = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_DATA_FRAMES)) != 0)
+    {
+        this->tx_data_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_64)) != 0)
+    {
+        this->tx_frames_64 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_65_127)) != 0)
+    {
+        this->tx_frames_65_127 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_128_255)) != 0)
+    {
+        this->tx_frames_128_255 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_256_511)) != 0)
+    {
+        this->tx_frames_256_511 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_512_1023)) != 0)
+    {
+        this->tx_frames_512_1023 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_1024_1518)) != 0)
+    {
+        this->tx_frames_1024_1518 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_1519_2047)) != 0)
+    {
+        this->tx_frames_1519_2047 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_2048_4095)) != 0)
+    {
+        this->tx_frames_2048_4095 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_4096_9216)) != 0)
+    {
+        this->tx_frames_4096_9216 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_9217_16383)) != 0)
+    {
+        this->tx_frames_9217_16383 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_OAM_BYTES)) != 0)
+    {
+        this->tx_oam_bytes = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_OAM_FRAMES)) != 0)
+    {
+        this->tx_oam_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_MPCP_FRAMES)) != 0)
+    {
+        this->tx_mpcp_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_BROADCAST_FRAMES)) != 0)
+    {
+        this->tx_broadcast_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_UNICAST_FRAMES)) != 0)
+    {
+        this->tx_unicast_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_MULTICAST_FRAMES)) != 0)
+    {
+        this->tx_multicast_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_GATES)) != 0)
+    {
+        this->tx_gates = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_stat_data_pack(const bcmolt_epon_link_stat_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_DATA_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_data_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_DATA_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_data_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_64)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_frames_64))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_65_127)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_frames_65_127))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_128_255)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_frames_128_255))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_256_511)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_frames_256_511))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_512_1023)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_frames_512_1023))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_1024_1518)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_frames_1024_1518))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_1519_2047)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_frames_1519_2047))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_2048_4095)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_frames_2048_4095))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_4096_9216)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_frames_4096_9216))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_9217_16383)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_frames_9217_16383))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_OAM_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_oam_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_OAM_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_oam_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_MPCP_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_mpcp_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_BROADCAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_broadcast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_UNICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_unicast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_MULTICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_multicast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_REPORT_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_report_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FCS_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_fcs_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_OVERSIZE_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_oversize_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_RUNT_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_runt_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_LINE_CODE_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_line_code_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_LINE_CODE_ERROR_MAX)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_line_code_error_max))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_DATA_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_data_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_DATA_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_data_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_64)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_frames_64))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_65_127)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_frames_65_127))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_128_255)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_frames_128_255))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_256_511)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_frames_256_511))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_512_1023)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_frames_512_1023))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_1024_1518)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_frames_1024_1518))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_1519_2047)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_frames_1519_2047))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_2048_4095)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_frames_2048_4095))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_4096_9216)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_frames_4096_9216))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_9217_16383)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_frames_9217_16383))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_OAM_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_oam_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_OAM_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_oam_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_MPCP_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_mpcp_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_BROADCAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_broadcast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_UNICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_unicast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_MULTICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_multicast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_GATES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_gates))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_link_stat_data_get_packed_length(const bcmolt_epon_link_stat_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_DATA_BYTES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_DATA_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_64)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_65_127)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_128_255)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_256_511)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_512_1023)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_1024_1518)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_1519_2047)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_2048_4095)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_4096_9216)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_9217_16383)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_OAM_BYTES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_OAM_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_MPCP_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_BROADCAST_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_UNICAST_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_MULTICAST_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_REPORT_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FCS_ERROR)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_OVERSIZE_ERROR)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_RUNT_ERROR)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_LINE_CODE_ERROR)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_LINE_CODE_ERROR_MAX)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_DATA_BYTES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_DATA_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_64)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_65_127)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_128_255)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_256_511)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_512_1023)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_1024_1518)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_1519_2047)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_2048_4095)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_4096_9216)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_9217_16383)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_OAM_BYTES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_OAM_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_MPCP_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_BROADCAST_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_UNICAST_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_MULTICAST_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_GATES)) != 0)
+    {
+        count += 8;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_stat_data_unpack(bcmolt_epon_link_stat_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_DATA_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_data_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_DATA_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_data_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_64)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_frames_64))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_65_127)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_frames_65_127))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_128_255)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_frames_128_255))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_256_511)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_frames_256_511))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_512_1023)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_frames_512_1023))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_1024_1518)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_frames_1024_1518))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_1519_2047)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_frames_1519_2047))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_2048_4095)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_frames_2048_4095))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_4096_9216)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_frames_4096_9216))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_9217_16383)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_frames_9217_16383))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_OAM_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_oam_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_OAM_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_oam_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_MPCP_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_mpcp_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_BROADCAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_broadcast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_UNICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_unicast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_MULTICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_multicast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_REPORT_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_report_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FCS_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_fcs_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_OVERSIZE_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_oversize_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_RUNT_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_runt_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_LINE_CODE_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_line_code_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_LINE_CODE_ERROR_MAX)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_line_code_error_max))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_DATA_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_data_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_DATA_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_data_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_64)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_frames_64))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_65_127)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_frames_65_127))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_128_255)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_frames_128_255))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_256_511)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_frames_256_511))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_512_1023)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_frames_512_1023))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_1024_1518)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_frames_1024_1518))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_1519_2047)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_frames_1519_2047))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_2048_4095)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_frames_2048_4095))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_4096_9216)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_frames_4096_9216))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_9217_16383)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_frames_9217_16383))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_OAM_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_oam_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_OAM_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_oam_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_MPCP_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_mpcp_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_BROADCAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_broadcast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_UNICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_unicast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_MULTICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_multicast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_GATES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_gates))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_stat_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_DATA_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_DATA_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_64)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_65_127)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_128_255)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_256_511)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_512_1023)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_1024_1518)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_1519_2047)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_2048_4095)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_4096_9216)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_9217_16383)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_OAM_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_OAM_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_MPCP_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_BROADCAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_UNICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_MULTICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_REPORT_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_FCS_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_OVERSIZE_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_RUNT_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_LINE_CODE_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_RX_LINE_CODE_ERROR_MAX)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_DATA_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_DATA_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_64)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_65_127)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_128_255)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_256_511)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_512_1023)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_1024_1518)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_1519_2047)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_2048_4095)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_4096_9216)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_9217_16383)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_OAM_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_OAM_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_MPCP_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_BROADCAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_UNICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_MULTICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ID_TX_GATES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_stat_data_bounds_check(const bcmolt_epon_link_stat_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_link_stat_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_link_stat_cfg_data_set_default(bcmolt_epon_link_stat_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_CFG_ID_CFG)) != 0)
+    {
+        this->cfg.trigger.type = BCMOLT_STAT_CONDITION_TYPE_NONE;
+        this->cfg.soak.active_soak_time = 0;
+        this->cfg.soak.clear_soak_time = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_stat_cfg_data_pack(const bcmolt_epon_link_stat_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_pack(&this->cfg, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_link_stat_cfg_data_get_packed_length(const bcmolt_epon_link_stat_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_CFG_ID_CFG)) != 0)
+    {
+        count += bcmolt_stat_alarm_config_get_packed_length(&this->cfg);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_stat_cfg_data_unpack(bcmolt_epon_link_stat_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_unpack(&this->cfg, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_stat_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_stat_cfg_data_bounds_check(const bcmolt_epon_link_stat_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_link_stat_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_bounds_check(&this->cfg))
+        {
+            *failed_prop = BCMOLT_EPON_LINK_STAT_CFG_ID_CFG;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_link_duplicate_mpcp_registration_request_data_set_default(bcmolt_epon_link_duplicate_mpcp_registration_request_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_DUPLICATE_MPCP_REGISTRATION_REQUEST_ID_INITIAL_RANGE_TQ)) != 0)
+    {
+        this->initial_range_tq = (bcmolt_time_quanta) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_DUPLICATE_MPCP_REGISTRATION_REQUEST_ID_CURRENT_RANGE_TQ)) != 0)
+    {
+        this->current_range_tq = (bcmolt_time_quanta) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_duplicate_mpcp_registration_request_data_pack(const bcmolt_epon_link_duplicate_mpcp_registration_request_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_DUPLICATE_MPCP_REGISTRATION_REQUEST_ID_INITIAL_RANGE_TQ)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, (uint32_t) this->initial_range_tq))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_DUPLICATE_MPCP_REGISTRATION_REQUEST_ID_CURRENT_RANGE_TQ)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, (uint32_t) this->current_range_tq))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_link_duplicate_mpcp_registration_request_data_get_packed_length(const bcmolt_epon_link_duplicate_mpcp_registration_request_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_DUPLICATE_MPCP_REGISTRATION_REQUEST_ID_INITIAL_RANGE_TQ)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_DUPLICATE_MPCP_REGISTRATION_REQUEST_ID_CURRENT_RANGE_TQ)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_duplicate_mpcp_registration_request_data_unpack(bcmolt_epon_link_duplicate_mpcp_registration_request_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_DUPLICATE_MPCP_REGISTRATION_REQUEST_ID_INITIAL_RANGE_TQ)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, (uint32_t *) &this->initial_range_tq))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_DUPLICATE_MPCP_REGISTRATION_REQUEST_ID_CURRENT_RANGE_TQ)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, (uint32_t *) &this->current_range_tq))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_duplicate_mpcp_registration_request_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_DUPLICATE_MPCP_REGISTRATION_REQUEST_ID_INITIAL_RANGE_TQ)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_DUPLICATE_MPCP_REGISTRATION_REQUEST_ID_CURRENT_RANGE_TQ)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_duplicate_mpcp_registration_request_data_bounds_check(const bcmolt_epon_link_duplicate_mpcp_registration_request_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_link_duplicate_mpcp_registration_request_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_link_key_exchange_failure_data_set_default(bcmolt_epon_link_key_exchange_failure_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_KEY_EXCHANGE_FAILURE_ID_ALARM_STATUS)) != 0)
+    {
+        this->alarm_status = BCMOLT_STATUS_OFF;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_key_exchange_failure_data_pack(const bcmolt_epon_link_key_exchange_failure_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_KEY_EXCHANGE_FAILURE_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_pack(this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_link_key_exchange_failure_data_get_packed_length(const bcmolt_epon_link_key_exchange_failure_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_KEY_EXCHANGE_FAILURE_ID_ALARM_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_key_exchange_failure_data_unpack(bcmolt_epon_link_key_exchange_failure_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_KEY_EXCHANGE_FAILURE_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_unpack(&this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_key_exchange_failure_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_KEY_EXCHANGE_FAILURE_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_key_exchange_failure_data_bounds_check(const bcmolt_epon_link_key_exchange_failure_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_link_key_exchange_failure_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_KEY_EXCHANGE_FAILURE_ID_ALARM_STATUS)) != 0)
+    {
+        switch (this->alarm_status)
+        {
+            case BCMOLT_STATUS_OFF:
+                break;
+            case BCMOLT_STATUS_ON:
+                break;
+            case BCMOLT_STATUS_NO_CHANGE:
+                break;
+            default:
+                *failed_prop = BCMOLT_EPON_LINK_KEY_EXCHANGE_FAILURE_ID_ALARM_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_link_link_speed_mismatch_data_set_default(bcmolt_epon_link_link_speed_mismatch_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_LINK_SPEED_MISMATCH_ID_PREVIOUS_RATE)) != 0)
+    {
+        this->previous_rate = BCMOLT_EPON_LINK_RATE_TEN_TEN;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_LINK_SPEED_MISMATCH_ID_CURRENT_RATE)) != 0)
+    {
+        this->current_rate = BCMOLT_EPON_LINK_RATE_TEN_TEN;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_link_speed_mismatch_data_pack(const bcmolt_epon_link_link_speed_mismatch_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_LINK_SPEED_MISMATCH_ID_PREVIOUS_RATE)) != 0)
+    {
+        if (!bcmolt_epon_link_rate_pack(this->previous_rate, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_LINK_SPEED_MISMATCH_ID_CURRENT_RATE)) != 0)
+    {
+        if (!bcmolt_epon_link_rate_pack(this->current_rate, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_link_link_speed_mismatch_data_get_packed_length(const bcmolt_epon_link_link_speed_mismatch_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_LINK_SPEED_MISMATCH_ID_PREVIOUS_RATE)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_LINK_SPEED_MISMATCH_ID_CURRENT_RATE)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_link_speed_mismatch_data_unpack(bcmolt_epon_link_link_speed_mismatch_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_LINK_SPEED_MISMATCH_ID_PREVIOUS_RATE)) != 0)
+    {
+        if (!bcmolt_epon_link_rate_unpack(&this->previous_rate, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_LINK_SPEED_MISMATCH_ID_CURRENT_RATE)) != 0)
+    {
+        if (!bcmolt_epon_link_rate_unpack(&this->current_rate, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_link_speed_mismatch_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_LINK_SPEED_MISMATCH_ID_PREVIOUS_RATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_LINK_SPEED_MISMATCH_ID_CURRENT_RATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_link_speed_mismatch_data_bounds_check(const bcmolt_epon_link_link_speed_mismatch_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_link_link_speed_mismatch_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_LINK_SPEED_MISMATCH_ID_PREVIOUS_RATE)) != 0)
+    {
+        switch (this->previous_rate)
+        {
+            case BCMOLT_EPON_LINK_RATE_TEN_TEN:
+                break;
+            case BCMOLT_EPON_LINK_RATE_TEN_ONE:
+                break;
+            case BCMOLT_EPON_LINK_RATE_ONE_ONE:
+                break;
+            default:
+                *failed_prop = BCMOLT_EPON_LINK_LINK_SPEED_MISMATCH_ID_PREVIOUS_RATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_LINK_SPEED_MISMATCH_ID_CURRENT_RATE)) != 0)
+    {
+        switch (this->current_rate)
+        {
+            case BCMOLT_EPON_LINK_RATE_TEN_TEN:
+                break;
+            case BCMOLT_EPON_LINK_RATE_TEN_ONE:
+                break;
+            case BCMOLT_EPON_LINK_RATE_ONE_ONE:
+                break;
+            default:
+                *failed_prop = BCMOLT_EPON_LINK_LINK_SPEED_MISMATCH_ID_CURRENT_RATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_link_mpcp_discovered_data_set_default(bcmolt_epon_link_mpcp_discovered_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_MPCP_DISCOVERED_ID_LINK_INFO)) != 0)
+    {
+        this->link_info.link_status = (bcmolt_epon_link_status) 0;
+        this->link_info.rate = BCMOLT_EPON_LINK_RATE_TEN_TEN;
+        this->link_info.llid = (bcmolt_epon_llid) 0;
+        this->link_info.mpcp_discovery_info = (bcmolt_mpcp_discovery_info) 0;
+        this->link_info.onu_laser_on_time_tq = (bcmolt_time_quanta) 0;
+        this->link_info.onu_laser_off_time_tq = (bcmolt_time_quanta) 0;
+        this->link_info.pending_grants = 0;
+        this->link_info.range_value_tq = (bcmolt_time_quanta) 0;
+        this->link_info.tunnel_id = (bcmolt_epon_tunnel_id) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_mpcp_discovered_data_pack(const bcmolt_epon_link_mpcp_discovered_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_MPCP_DISCOVERED_ID_LINK_INFO)) != 0)
+    {
+        if (!bcmolt_epon_link_info_pack(&this->link_info, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_link_mpcp_discovered_data_get_packed_length(const bcmolt_epon_link_mpcp_discovered_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_MPCP_DISCOVERED_ID_LINK_INFO)) != 0)
+    {
+        count += 24;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_mpcp_discovered_data_unpack(bcmolt_epon_link_mpcp_discovered_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_MPCP_DISCOVERED_ID_LINK_INFO)) != 0)
+    {
+        if (!bcmolt_epon_link_info_unpack(&this->link_info, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_mpcp_discovered_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_MPCP_DISCOVERED_ID_LINK_INFO)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 24))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_mpcp_discovered_data_bounds_check(const bcmolt_epon_link_mpcp_discovered_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_link_mpcp_discovered_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_MPCP_DISCOVERED_ID_LINK_INFO)) != 0)
+    {
+        if (!bcmolt_epon_link_info_bounds_check(&this->link_info))
+        {
+            *failed_prop = BCMOLT_EPON_LINK_MPCP_DISCOVERED_ID_LINK_INFO;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_link_mpcp_report_timeout_data_set_default(bcmolt_epon_link_mpcp_report_timeout_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_MPCP_REPORT_TIMEOUT_ID_ALARM_STATUS)) != 0)
+    {
+        this->alarm_status = BCMOLT_STATUS_OFF;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_mpcp_report_timeout_data_pack(const bcmolt_epon_link_mpcp_report_timeout_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_MPCP_REPORT_TIMEOUT_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_pack(this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_link_mpcp_report_timeout_data_get_packed_length(const bcmolt_epon_link_mpcp_report_timeout_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_MPCP_REPORT_TIMEOUT_ID_ALARM_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_mpcp_report_timeout_data_unpack(bcmolt_epon_link_mpcp_report_timeout_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_MPCP_REPORT_TIMEOUT_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_unpack(&this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_mpcp_report_timeout_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_MPCP_REPORT_TIMEOUT_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_mpcp_report_timeout_data_bounds_check(const bcmolt_epon_link_mpcp_report_timeout_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_link_mpcp_report_timeout_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_MPCP_REPORT_TIMEOUT_ID_ALARM_STATUS)) != 0)
+    {
+        switch (this->alarm_status)
+        {
+            case BCMOLT_STATUS_OFF:
+                break;
+            case BCMOLT_STATUS_ON:
+                break;
+            case BCMOLT_STATUS_NO_CHANGE:
+                break;
+            default:
+                *failed_prop = BCMOLT_EPON_LINK_MPCP_REPORT_TIMEOUT_ID_ALARM_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_link_oam_keepalive_timeout_data_set_default(bcmolt_epon_link_oam_keepalive_timeout_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_OAM_KEEPALIVE_TIMEOUT_ID_ALARM_STATUS)) != 0)
+    {
+        this->alarm_status = BCMOLT_STATUS_OFF;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_oam_keepalive_timeout_data_pack(const bcmolt_epon_link_oam_keepalive_timeout_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_OAM_KEEPALIVE_TIMEOUT_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_pack(this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_link_oam_keepalive_timeout_data_get_packed_length(const bcmolt_epon_link_oam_keepalive_timeout_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_OAM_KEEPALIVE_TIMEOUT_ID_ALARM_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_oam_keepalive_timeout_data_unpack(bcmolt_epon_link_oam_keepalive_timeout_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_OAM_KEEPALIVE_TIMEOUT_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_unpack(&this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_oam_keepalive_timeout_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_OAM_KEEPALIVE_TIMEOUT_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_oam_keepalive_timeout_data_bounds_check(const bcmolt_epon_link_oam_keepalive_timeout_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_link_oam_keepalive_timeout_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_OAM_KEEPALIVE_TIMEOUT_ID_ALARM_STATUS)) != 0)
+    {
+        switch (this->alarm_status)
+        {
+            case BCMOLT_STATUS_OFF:
+                break;
+            case BCMOLT_STATUS_ON:
+                break;
+            case BCMOLT_STATUS_NO_CHANGE:
+                break;
+            default:
+                *failed_prop = BCMOLT_EPON_LINK_OAM_KEEPALIVE_TIMEOUT_ID_ALARM_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_link_preprovisioned_link_created_data_set_default(bcmolt_epon_link_preprovisioned_link_created_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_PREPROVISIONED_LINK_CREATED_ID_LINK_INFO)) != 0)
+    {
+        this->link_info.link_status = (bcmolt_epon_link_status) 0;
+        this->link_info.rate = BCMOLT_EPON_LINK_RATE_TEN_TEN;
+        this->link_info.llid = (bcmolt_epon_llid) 0;
+        this->link_info.mpcp_discovery_info = (bcmolt_mpcp_discovery_info) 0;
+        this->link_info.onu_laser_on_time_tq = (bcmolt_time_quanta) 0;
+        this->link_info.onu_laser_off_time_tq = (bcmolt_time_quanta) 0;
+        this->link_info.pending_grants = 0;
+        this->link_info.range_value_tq = (bcmolt_time_quanta) 0;
+        this->link_info.tunnel_id = (bcmolt_epon_tunnel_id) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_preprovisioned_link_created_data_pack(const bcmolt_epon_link_preprovisioned_link_created_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_PREPROVISIONED_LINK_CREATED_ID_LINK_INFO)) != 0)
+    {
+        if (!bcmolt_epon_link_info_pack(&this->link_info, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_link_preprovisioned_link_created_data_get_packed_length(const bcmolt_epon_link_preprovisioned_link_created_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_PREPROVISIONED_LINK_CREATED_ID_LINK_INFO)) != 0)
+    {
+        count += 24;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_preprovisioned_link_created_data_unpack(bcmolt_epon_link_preprovisioned_link_created_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_PREPROVISIONED_LINK_CREATED_ID_LINK_INFO)) != 0)
+    {
+        if (!bcmolt_epon_link_info_unpack(&this->link_info, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_preprovisioned_link_created_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_PREPROVISIONED_LINK_CREATED_ID_LINK_INFO)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 24))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_preprovisioned_link_created_data_bounds_check(const bcmolt_epon_link_preprovisioned_link_created_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_link_preprovisioned_link_created_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_PREPROVISIONED_LINK_CREATED_ID_LINK_INFO)) != 0)
+    {
+        if (!bcmolt_epon_link_info_bounds_check(&this->link_info))
+        {
+            *failed_prop = BCMOLT_EPON_LINK_PREPROVISIONED_LINK_CREATED_ID_LINK_INFO;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_link_protection_switch_occurred_data_set_default(bcmolt_epon_link_protection_switch_occurred_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_PROTECTION_SWITCH_OCCURRED_ID_PROTECTION_STATUS)) != 0)
+    {
+        this->protection_status = BCMOLT_EPON_PROTECTION_STATE_UNPROTECTED;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_PROTECTION_SWITCH_OCCURRED_ID_RANGE_VALUE_TQ)) != 0)
+    {
+        this->range_value_tq = (bcmolt_time_quanta) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_protection_switch_occurred_data_pack(const bcmolt_epon_link_protection_switch_occurred_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_PROTECTION_SWITCH_OCCURRED_ID_PROTECTION_STATUS)) != 0)
+    {
+        if (!bcmolt_epon_protection_state_pack(this->protection_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_PROTECTION_SWITCH_OCCURRED_ID_RANGE_VALUE_TQ)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, (uint32_t) this->range_value_tq))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_link_protection_switch_occurred_data_get_packed_length(const bcmolt_epon_link_protection_switch_occurred_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_PROTECTION_SWITCH_OCCURRED_ID_PROTECTION_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_PROTECTION_SWITCH_OCCURRED_ID_RANGE_VALUE_TQ)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_protection_switch_occurred_data_unpack(bcmolt_epon_link_protection_switch_occurred_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_PROTECTION_SWITCH_OCCURRED_ID_PROTECTION_STATUS)) != 0)
+    {
+        if (!bcmolt_epon_protection_state_unpack(&this->protection_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_PROTECTION_SWITCH_OCCURRED_ID_RANGE_VALUE_TQ)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, (uint32_t *) &this->range_value_tq))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_protection_switch_occurred_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_PROTECTION_SWITCH_OCCURRED_ID_PROTECTION_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_PROTECTION_SWITCH_OCCURRED_ID_RANGE_VALUE_TQ)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_protection_switch_occurred_data_bounds_check(const bcmolt_epon_link_protection_switch_occurred_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_link_protection_switch_occurred_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_PROTECTION_SWITCH_OCCURRED_ID_PROTECTION_STATUS)) != 0)
+    {
+        switch (this->protection_status)
+        {
+            case BCMOLT_EPON_PROTECTION_STATE_UNPROTECTED:
+                break;
+            case BCMOLT_EPON_PROTECTION_STATE_PROTECTED_STANDBY:
+                break;
+            case BCMOLT_EPON_PROTECTION_STATE_PROTECTED_WORKING:
+                break;
+            default:
+                *failed_prop = BCMOLT_EPON_LINK_PROTECTION_SWITCH_OCCURRED_ID_PROTECTION_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_link_range_value_changed_data_set_default(bcmolt_epon_link_range_value_changed_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_RANGE_VALUE_CHANGED_ID_RANGE_VALUE_TQ)) != 0)
+    {
+        this->range_value_tq = (bcmolt_time_quanta) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_range_value_changed_data_pack(const bcmolt_epon_link_range_value_changed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_RANGE_VALUE_CHANGED_ID_RANGE_VALUE_TQ)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, (uint32_t) this->range_value_tq))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_link_range_value_changed_data_get_packed_length(const bcmolt_epon_link_range_value_changed_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_RANGE_VALUE_CHANGED_ID_RANGE_VALUE_TQ)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_range_value_changed_data_unpack(bcmolt_epon_link_range_value_changed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_RANGE_VALUE_CHANGED_ID_RANGE_VALUE_TQ)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, (uint32_t *) &this->range_value_tq))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_range_value_changed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_RANGE_VALUE_CHANGED_ID_RANGE_VALUE_TQ)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_range_value_changed_data_bounds_check(const bcmolt_epon_link_range_value_changed_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_link_range_value_changed_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_link_stat_alarm_cleared_data_set_default(bcmolt_epon_link_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        this->stat = BCMOLT_EPON_LINK_STAT_ID_RX_DATA_BYTES;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_stat_alarm_cleared_data_pack(const bcmolt_epon_link_stat_alarm_cleared_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_epon_link_stat_id_pack(this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_link_stat_alarm_cleared_data_get_packed_length(const bcmolt_epon_link_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_stat_alarm_cleared_data_unpack(bcmolt_epon_link_stat_alarm_cleared_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_epon_link_stat_id_unpack(&this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_stat_alarm_cleared_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_stat_alarm_cleared_data_bounds_check(const bcmolt_epon_link_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_link_stat_alarm_cleared_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        switch (this->stat)
+        {
+            case BCMOLT_EPON_LINK_STAT_ID_RX_DATA_BYTES:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_DATA_FRAMES:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_64:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_65_127:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_128_255:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_256_511:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_512_1023:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_1024_1518:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_1519_2047:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_2048_4095:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_4096_9216:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_9217_16383:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_OAM_BYTES:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_OAM_FRAMES:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_MPCP_FRAMES:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_BROADCAST_FRAMES:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_UNICAST_FRAMES:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_MULTICAST_FRAMES:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_REPORT_FRAMES:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_FCS_ERROR:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_OVERSIZE_ERROR:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_RUNT_ERROR:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_LINE_CODE_ERROR:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_LINE_CODE_ERROR_MAX:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_TX_DATA_BYTES:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_TX_DATA_FRAMES:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_64:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_65_127:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_128_255:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_256_511:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_512_1023:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_1024_1518:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_1519_2047:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_2048_4095:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_4096_9216:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_9217_16383:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_TX_OAM_BYTES:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_TX_OAM_FRAMES:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_TX_MPCP_FRAMES:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_TX_BROADCAST_FRAMES:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_TX_UNICAST_FRAMES:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_TX_MULTICAST_FRAMES:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_TX_GATES:
+                break;
+            default:
+                *failed_prop = BCMOLT_EPON_LINK_STAT_ALARM_CLEARED_ID_STAT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_link_stat_alarm_raised_data_set_default(bcmolt_epon_link_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        this->stat = BCMOLT_EPON_LINK_STAT_ID_RX_DATA_BYTES;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_stat_alarm_raised_data_pack(const bcmolt_epon_link_stat_alarm_raised_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_epon_link_stat_id_pack(this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_link_stat_alarm_raised_data_get_packed_length(const bcmolt_epon_link_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_stat_alarm_raised_data_unpack(bcmolt_epon_link_stat_alarm_raised_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_epon_link_stat_id_unpack(&this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_stat_alarm_raised_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_stat_alarm_raised_data_bounds_check(const bcmolt_epon_link_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_link_stat_alarm_raised_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        switch (this->stat)
+        {
+            case BCMOLT_EPON_LINK_STAT_ID_RX_DATA_BYTES:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_DATA_FRAMES:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_64:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_65_127:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_128_255:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_256_511:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_512_1023:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_1024_1518:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_1519_2047:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_2048_4095:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_4096_9216:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_9217_16383:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_OAM_BYTES:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_OAM_FRAMES:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_MPCP_FRAMES:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_BROADCAST_FRAMES:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_UNICAST_FRAMES:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_MULTICAST_FRAMES:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_REPORT_FRAMES:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_FCS_ERROR:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_OVERSIZE_ERROR:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_RUNT_ERROR:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_LINE_CODE_ERROR:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_RX_LINE_CODE_ERROR_MAX:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_TX_DATA_BYTES:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_TX_DATA_FRAMES:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_64:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_65_127:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_128_255:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_256_511:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_512_1023:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_1024_1518:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_1519_2047:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_2048_4095:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_4096_9216:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_9217_16383:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_TX_OAM_BYTES:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_TX_OAM_FRAMES:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_TX_MPCP_FRAMES:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_TX_BROADCAST_FRAMES:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_TX_UNICAST_FRAMES:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_TX_MULTICAST_FRAMES:
+                break;
+            case BCMOLT_EPON_LINK_STAT_ID_TX_GATES:
+                break;
+            default:
+                *failed_prop = BCMOLT_EPON_LINK_STAT_ALARM_RAISED_ID_STAT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_link_auto_cfg_data_set_default(bcmolt_epon_link_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_DUPLICATE_MPCP_REGISTRATION_REQUEST)) != 0)
+    {
+        this->duplicate_mpcp_registration_request = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_ENCRYPTION_ENABLED)) != 0)
+    {
+        this->encryption_enabled = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_KEY_EXCHANGE_FAILURE)) != 0)
+    {
+        this->key_exchange_failure = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_KEY_EXCHANGE_STARTED)) != 0)
+    {
+        this->key_exchange_started = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_KEY_EXCHANGE_STOPPED)) != 0)
+    {
+        this->key_exchange_stopped = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_LINK_DELETED)) != 0)
+    {
+        this->link_deleted = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_LINK_SPEED_MISMATCH)) != 0)
+    {
+        this->link_speed_mismatch = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_MPCP_DEREGISTERED)) != 0)
+    {
+        this->mpcp_deregistered = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_MPCP_DISCOVERED)) != 0)
+    {
+        this->mpcp_discovered = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_MPCP_REG_ACK_TIMEOUT)) != 0)
+    {
+        this->mpcp_reg_ack_timeout = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_MPCP_REPORT_TIMEOUT)) != 0)
+    {
+        this->mpcp_report_timeout = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_OAM_KEEPALIVE_TIMEOUT)) != 0)
+    {
+        this->oam_keepalive_timeout = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_OAM_KEEPALIVE_TIMER_STARTED)) != 0)
+    {
+        this->oam_keepalive_timer_started = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_OAM_KEEPALIVE_TIMER_STOPPED)) != 0)
+    {
+        this->oam_keepalive_timer_stopped = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_PREPROVISIONED_LINK_CREATED)) != 0)
+    {
+        this->preprovisioned_link_created = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_PROTECTION_SWITCH_OCCURRED)) != 0)
+    {
+        this->protection_switch_occurred = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_RANGE_VALUE_CHANGED)) != 0)
+    {
+        this->range_value_changed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_RERANGE_FAILURE)) != 0)
+    {
+        this->rerange_failure = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        this->stat_alarm_cleared = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        this->stat_alarm_raised = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_STATIC_REGISTRATION_DONE)) != 0)
+    {
+        this->static_registration_done = BCMOS_FALSE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_auto_cfg_data_pack(const bcmolt_epon_link_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_DUPLICATE_MPCP_REGISTRATION_REQUEST)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->duplicate_mpcp_registration_request))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_ENCRYPTION_ENABLED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->encryption_enabled))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_KEY_EXCHANGE_FAILURE)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->key_exchange_failure))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_KEY_EXCHANGE_STARTED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->key_exchange_started))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_KEY_EXCHANGE_STOPPED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->key_exchange_stopped))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_LINK_DELETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->link_deleted))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_LINK_SPEED_MISMATCH)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->link_speed_mismatch))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_MPCP_DEREGISTERED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->mpcp_deregistered))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_MPCP_DISCOVERED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->mpcp_discovered))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_MPCP_REG_ACK_TIMEOUT)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->mpcp_reg_ack_timeout))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_MPCP_REPORT_TIMEOUT)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->mpcp_report_timeout))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_OAM_KEEPALIVE_TIMEOUT)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->oam_keepalive_timeout))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_OAM_KEEPALIVE_TIMER_STARTED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->oam_keepalive_timer_started))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_OAM_KEEPALIVE_TIMER_STOPPED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->oam_keepalive_timer_stopped))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_PREPROVISIONED_LINK_CREATED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->preprovisioned_link_created))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_PROTECTION_SWITCH_OCCURRED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->protection_switch_occurred))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_RANGE_VALUE_CHANGED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->range_value_changed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_RERANGE_FAILURE)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->rerange_failure))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->stat_alarm_cleared))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->stat_alarm_raised))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_STATIC_REGISTRATION_DONE)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->static_registration_done))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_link_auto_cfg_data_get_packed_length(const bcmolt_epon_link_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_DUPLICATE_MPCP_REGISTRATION_REQUEST)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_ENCRYPTION_ENABLED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_KEY_EXCHANGE_FAILURE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_KEY_EXCHANGE_STARTED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_KEY_EXCHANGE_STOPPED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_LINK_DELETED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_LINK_SPEED_MISMATCH)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_MPCP_DEREGISTERED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_MPCP_DISCOVERED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_MPCP_REG_ACK_TIMEOUT)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_MPCP_REPORT_TIMEOUT)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_OAM_KEEPALIVE_TIMEOUT)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_OAM_KEEPALIVE_TIMER_STARTED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_OAM_KEEPALIVE_TIMER_STOPPED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_PREPROVISIONED_LINK_CREATED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_PROTECTION_SWITCH_OCCURRED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_RANGE_VALUE_CHANGED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_RERANGE_FAILURE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_STATIC_REGISTRATION_DONE)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_auto_cfg_data_unpack(bcmolt_epon_link_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_DUPLICATE_MPCP_REGISTRATION_REQUEST)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->duplicate_mpcp_registration_request))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_ENCRYPTION_ENABLED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->encryption_enabled))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_KEY_EXCHANGE_FAILURE)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->key_exchange_failure))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_KEY_EXCHANGE_STARTED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->key_exchange_started))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_KEY_EXCHANGE_STOPPED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->key_exchange_stopped))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_LINK_DELETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->link_deleted))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_LINK_SPEED_MISMATCH)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->link_speed_mismatch))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_MPCP_DEREGISTERED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->mpcp_deregistered))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_MPCP_DISCOVERED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->mpcp_discovered))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_MPCP_REG_ACK_TIMEOUT)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->mpcp_reg_ack_timeout))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_MPCP_REPORT_TIMEOUT)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->mpcp_report_timeout))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_OAM_KEEPALIVE_TIMEOUT)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->oam_keepalive_timeout))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_OAM_KEEPALIVE_TIMER_STARTED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->oam_keepalive_timer_started))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_OAM_KEEPALIVE_TIMER_STOPPED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->oam_keepalive_timer_stopped))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_PREPROVISIONED_LINK_CREATED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->preprovisioned_link_created))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_PROTECTION_SWITCH_OCCURRED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->protection_switch_occurred))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_RANGE_VALUE_CHANGED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->range_value_changed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_RERANGE_FAILURE)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->rerange_failure))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->stat_alarm_cleared))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->stat_alarm_raised))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_STATIC_REGISTRATION_DONE)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->static_registration_done))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_DUPLICATE_MPCP_REGISTRATION_REQUEST)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_ENCRYPTION_ENABLED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_KEY_EXCHANGE_FAILURE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_KEY_EXCHANGE_STARTED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_KEY_EXCHANGE_STOPPED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_LINK_DELETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_LINK_SPEED_MISMATCH)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_MPCP_DEREGISTERED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_MPCP_DISCOVERED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_MPCP_REG_ACK_TIMEOUT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_MPCP_REPORT_TIMEOUT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_OAM_KEEPALIVE_TIMEOUT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_OAM_KEEPALIVE_TIMER_STARTED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_OAM_KEEPALIVE_TIMER_STOPPED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_PREPROVISIONED_LINK_CREATED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_PROTECTION_SWITCH_OCCURRED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_RANGE_VALUE_CHANGED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_RERANGE_FAILURE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_AUTO_CFG_ID_STATIC_REGISTRATION_DONE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_auto_cfg_data_bounds_check(const bcmolt_epon_link_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_link_auto_cfg_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_link_key_exchange_start_data_set_default(bcmolt_epon_link_key_exchange_start_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_KEY_EXCHANGE_START_ID_PERIOD)) != 0)
+    {
+        this->period = 1;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_key_exchange_start_data_pack(const bcmolt_epon_link_key_exchange_start_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_KEY_EXCHANGE_START_ID_PERIOD)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, this->period))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_link_key_exchange_start_data_get_packed_length(const bcmolt_epon_link_key_exchange_start_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_KEY_EXCHANGE_START_ID_PERIOD)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_key_exchange_start_data_unpack(bcmolt_epon_link_key_exchange_start_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_KEY_EXCHANGE_START_ID_PERIOD)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, &this->period))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_key_exchange_start_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_KEY_EXCHANGE_START_ID_PERIOD)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_key_exchange_start_data_bounds_check(const bcmolt_epon_link_key_exchange_start_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_link_key_exchange_start_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_KEY_EXCHANGE_START_ID_PERIOD)) != 0)
+    {
+        if (this->period < 1)
+        {
+            *failed_prop = BCMOLT_EPON_LINK_KEY_EXCHANGE_START_ID_PERIOD;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_link_oam_keepalive_timer_start_data_set_default(bcmolt_epon_link_oam_keepalive_timer_start_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_OAM_KEEPALIVE_TIMER_START_ID_SEND_PERIOD)) != 0)
+    {
+        this->send_period = 1;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_oam_keepalive_timer_start_data_pack(const bcmolt_epon_link_oam_keepalive_timer_start_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_OAM_KEEPALIVE_TIMER_START_ID_SEND_PERIOD)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, this->send_period))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_link_oam_keepalive_timer_start_data_get_packed_length(const bcmolt_epon_link_oam_keepalive_timer_start_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_OAM_KEEPALIVE_TIMER_START_ID_SEND_PERIOD)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_oam_keepalive_timer_start_data_unpack(bcmolt_epon_link_oam_keepalive_timer_start_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_OAM_KEEPALIVE_TIMER_START_ID_SEND_PERIOD)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, &this->send_period))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_oam_keepalive_timer_start_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_OAM_KEEPALIVE_TIMER_START_ID_SEND_PERIOD)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_oam_keepalive_timer_start_data_bounds_check(const bcmolt_epon_link_oam_keepalive_timer_start_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_link_oam_keepalive_timer_start_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_OAM_KEEPALIVE_TIMER_START_ID_SEND_PERIOD)) != 0)
+    {
+        if (this->send_period < 1)
+        {
+            *failed_prop = BCMOLT_EPON_LINK_OAM_KEEPALIVE_TIMER_START_ID_SEND_PERIOD;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_link_static_registration_data_set_default(bcmolt_epon_link_static_registration_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STATIC_REGISTRATION_ID_LASERON_TIME_TQ)) != 0)
+    {
+        this->laseron_time_tq = (bcmolt_time_quanta) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STATIC_REGISTRATION_ID_LASEROFF_TIME_TQ)) != 0)
+    {
+        this->laseroff_time_tq = (bcmolt_time_quanta) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STATIC_REGISTRATION_ID_RANGE_VALUE_TQ)) != 0)
+    {
+        this->range_value_tq = (bcmolt_time_quanta) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STATIC_REGISTRATION_ID_PENDING_GRANTS)) != 0)
+    {
+        this->pending_grants = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_static_registration_data_pack(const bcmolt_epon_link_static_registration_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STATIC_REGISTRATION_ID_LASERON_TIME_TQ)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, (uint32_t) this->laseron_time_tq))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STATIC_REGISTRATION_ID_LASEROFF_TIME_TQ)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, (uint32_t) this->laseroff_time_tq))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STATIC_REGISTRATION_ID_RANGE_VALUE_TQ)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, (uint32_t) this->range_value_tq))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STATIC_REGISTRATION_ID_PENDING_GRANTS)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->pending_grants))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_link_static_registration_data_get_packed_length(const bcmolt_epon_link_static_registration_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STATIC_REGISTRATION_ID_LASERON_TIME_TQ)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STATIC_REGISTRATION_ID_LASEROFF_TIME_TQ)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STATIC_REGISTRATION_ID_RANGE_VALUE_TQ)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STATIC_REGISTRATION_ID_PENDING_GRANTS)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_static_registration_data_unpack(bcmolt_epon_link_static_registration_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STATIC_REGISTRATION_ID_LASERON_TIME_TQ)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, (uint32_t *) &this->laseron_time_tq))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STATIC_REGISTRATION_ID_LASEROFF_TIME_TQ)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, (uint32_t *) &this->laseroff_time_tq))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STATIC_REGISTRATION_ID_RANGE_VALUE_TQ)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, (uint32_t *) &this->range_value_tq))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STATIC_REGISTRATION_ID_PENDING_GRANTS)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->pending_grants))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_static_registration_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STATIC_REGISTRATION_ID_LASERON_TIME_TQ)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STATIC_REGISTRATION_ID_LASEROFF_TIME_TQ)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STATIC_REGISTRATION_ID_RANGE_VALUE_TQ)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_STATIC_REGISTRATION_ID_PENDING_GRANTS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_static_registration_data_bounds_check(const bcmolt_epon_link_static_registration_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_link_static_registration_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_link_inject_frame_data_set_default(bcmolt_epon_link_inject_frame_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_INJECT_FRAME_ID_FRAME)) != 0)
+    {
+        this->frame.frame_octets.len = 0;
+        this->frame.frame_octets.val = NULL;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_inject_frame_data_pack(const bcmolt_epon_link_inject_frame_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_INJECT_FRAME_ID_FRAME)) != 0)
+    {
+        if (!bcmolt_ethernet_frame_unmasked_pack(&this->frame, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_link_inject_frame_data_get_packed_length(const bcmolt_epon_link_inject_frame_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_INJECT_FRAME_ID_FRAME)) != 0)
+    {
+        count += bcmolt_ethernet_frame_unmasked_get_packed_length(&this->frame);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_inject_frame_data_unpack(bcmolt_epon_link_inject_frame_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_INJECT_FRAME_ID_FRAME)) != 0)
+    {
+        if (!bcmolt_ethernet_frame_unmasked_unpack(&this->frame, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_inject_frame_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_INJECT_FRAME_ID_FRAME)) != 0)
+    {
+        if (!bcmolt_ethernet_frame_unmasked_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_inject_frame_data_bounds_check(const bcmolt_epon_link_inject_frame_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_link_inject_frame_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_INJECT_FRAME_ID_FRAME)) != 0)
+    {
+        if (!bcmolt_ethernet_frame_unmasked_bounds_check(&this->frame))
+        {
+            *failed_prop = BCMOLT_EPON_LINK_INJECT_FRAME_ID_FRAME;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_link_frame_captured_data_set_default(bcmolt_epon_link_frame_captured_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_FRAME_CAPTURED_ID_FRAME)) != 0)
+    {
+        this->frame.len = 0;
+        this->frame.val = NULL;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_frame_captured_data_pack(const bcmolt_epon_link_frame_captured_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_FRAME_CAPTURED_ID_FRAME)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_pack(&this->frame, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_link_frame_captured_data_get_packed_length(const bcmolt_epon_link_frame_captured_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_FRAME_CAPTURED_ID_FRAME)) != 0)
+    {
+        count += bcmolt_u8_list_u32_get_packed_length(&this->frame);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_frame_captured_data_unpack(bcmolt_epon_link_frame_captured_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_FRAME_CAPTURED_ID_FRAME)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_unpack(&this->frame, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_frame_captured_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_FRAME_CAPTURED_ID_FRAME)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_link_frame_captured_data_bounds_check(const bcmolt_epon_link_frame_captured_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_link_frame_captured_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_LINK_FRAME_CAPTURED_ID_FRAME)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_bounds_check(&this->frame))
+        {
+            *failed_prop = BCMOLT_EPON_LINK_FRAME_CAPTURED_ID_FRAME;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_ni_key_set_default(bcmolt_epon_ni_key *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_KEY_ID_EPON_NI)) != 0)
+    {
+        this->epon_ni = (bcmolt_epon_ni) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_key_pack(const bcmolt_epon_ni_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_KEY_ID_EPON_NI)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->epon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_ni_key_get_packed_length(const bcmolt_epon_ni_key *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_KEY_ID_EPON_NI)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_key_unpack(bcmolt_epon_ni_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_KEY_ID_EPON_NI)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->epon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_KEY_ID_EPON_NI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_key_bounds_check(const bcmolt_epon_ni_key *this, bcmolt_presence_mask fields_present, bcmolt_epon_ni_key_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_ni_cfg_data_set_default(bcmolt_epon_ni_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_MAC_ADDRESS)) != 0)
+    {
+        this->mac_address.u8[0] = 0x0000;
+        this->mac_address.u8[1] = 0x000D;
+        this->mac_address.u8[2] = 0x00B6;
+        this->mac_address.u8[3] = 0x0000;
+        this->mac_address.u8[4] = 0x0000;
+        this->mac_address.u8[5] = 0x0000;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_EPON_NI_EN)) != 0)
+    {
+        this->epon_ni_en = BCMOLT_EPON_NI_EN_STATE_DISABLED;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_REGISTRATION_BEHAVIOR)) != 0)
+    {
+        this->registration_behavior = BCMOLT_REGISTRATION_BEHAVIOR_AUTOMATIC;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_MTU_1G)) != 0)
+    {
+        this->mtu_1g = 1536;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_MTU_10G)) != 0)
+    {
+        this->mtu_10g = 1536;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_MINIMUM_FIBER_LENGTH)) != 0)
+    {
+        this->minimum_fiber_length = (bcmolt_meters) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_MAXIMUM_FIBER_LENGTH)) != 0)
+    {
+        this->maximum_fiber_length = (bcmolt_meters) 20000;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_GRANT_SPACING_TQ)) != 0)
+    {
+        this->grant_spacing_tq = (bcmolt_time_quanta) 32;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_EPON_LOGICAL_LINK_OPTIONS)) != 0)
+    {
+        this->epon_logical_link_options.registration_gate_mode.registration_gate_mode = BCMOLT_MPCP_GATE_MODE_TEKNOVUS;
+        this->epon_logical_link_options.registration_gate_mode.u.teknovus.reg_ack_timeout_ms = 100;
+        this->epon_logical_link_options.reporting_mode = BCMOLT_EPON_DBA_REPORTING_MODE_SIEPON_A;
+        this->epon_logical_link_options.max_links = 512;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_MPCP_DISCOVERY_PERIOD_MS)) != 0)
+    {
+        this->mpcp_discovery_period_ms = 1000;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_ALARM_STATE)) != 0)
+    {
+        this->alarm_state.no_reports = BCMOLT_STATUS_OFF;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_ALL_LINKS)) != 0)
+    {
+        this->all_links.len = 0;
+        this->all_links.val = NULL;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_ENCRYPTION_CFG)) != 0)
+    {
+        this->encryption_cfg.downstream_encryption_mode = BCMOLT_EPON_ENCRYPTION_MODE_NO_ENCRYPTION;
+        this->encryption_cfg.upstream_encryption_mode = BCMOLT_EPON_ENCRYPTION_MODE_NO_ENCRYPTION;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_PROTECTION_SWITCHING_CFG)) != 0)
+    {
+        this->protection_switching_cfg.protection_type = BCMOLT_EPON_PROTECTION_SWITCHING_TYPE_NO_PROTECTION_SWTICHING;
+        this->protection_switching_cfg.protection_switching_options = (bcmolt_protection_switching_detection_options) 0;
+        this->protection_switching_cfg.rerange_options = BCMOLT_EPON_PROTECTION_SWITCHING_RERANGING_OPTIONS_RERANGE_NONE;
+        this->protection_switching_cfg.rerange_attempts = 0;
+        this->protection_switching_cfg.rerange_interval = 0;
+        this->protection_switching_cfg.sync_gate_duration = 0;
+        this->protection_switching_cfg.gpio_input = BCMOLT_GPIO_PIN_UNCONFIGURED;
+        this->protection_switching_cfg.gpio_input_polarity = BCMOLT_GPIO_POLARITY_ACTIVE_HIGH;
+        this->protection_switching_cfg.gpio_output = BCMOLT_GPIO_PIN_UNCONFIGURED;
+        this->protection_switching_cfg.gpio_output_polarity = BCMOLT_GPIO_POLARITY_ACTIVE_HIGH;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_CLOCK_TRANSPORT_CFG)) != 0)
+    {
+        this->clock_transport_cfg.epon_clock_transport_mode = BCMOLT_EPON_CLOCK_TRANSPORT_MODE_HOST_DRIVEN;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_DROPDOWN_WEIGHTS)) != 0)
+    {
+        memset(this->dropdown_weights.arr, 0, sizeof(this->dropdown_weights.arr));
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_APPROXIMATE_SOLICITED_USAGE)) != 0)
+    {
+        memset(this->approximate_solicited_usage.arr, 0, sizeof(this->approximate_solicited_usage.arr));
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_APPROXIMATE_TDM_USAGE)) != 0)
+    {
+        this->approximate_tdm_usage = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_NO_REPORTS_SOAK_TIME)) != 0)
+    {
+        this->no_reports_soak_time = 25;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_PON_AGGREGATE_SHAPER)) != 0)
+    {
+        this->pon_aggregate_shaper.bandwidth_kbps = 0;
+        this->pon_aggregate_shaper.mbs_kB = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_ESTIMATED_PON_LATENCY_TQ)) != 0)
+    {
+        memset(this->estimated_pon_latency_tq.arr, 0, sizeof(this->estimated_pon_latency_tq.arr));
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_ONU_UPGRADE_PARAMS)) != 0)
+    {
+        this->onu_upgrade_params.oam_extension_type = BCMOLT_EPON_OAM_EXTENSION_TYPE_DPOE;
+        this->onu_upgrade_params.u.dpoe.response_timeout_ms = 1000;
+        this->onu_upgrade_params.u.dpoe.block_size = 60;
+        this->onu_upgrade_params.u.dpoe.final_ack_response_timeout = 15;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_AUTO_ROGUE_DETECT_10G_EN)) != 0)
+    {
+        this->auto_rogue_detect_10g_en = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_AUTO_ROGUE_DETECT_1G_EN)) != 0)
+    {
+        this->auto_rogue_detect_1g_en = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_AUTO_ROGUE_DETECT_10G_THRESHOLD)) != 0)
+    {
+        this->auto_rogue_detect_10g_threshold = 128;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_cfg_data_pack(const bcmolt_epon_ni_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_MAC_ADDRESS)) != 0)
+    {
+        if (!bcmolt_buf_write_mac_address(buf, this->mac_address))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_EPON_NI_EN)) != 0)
+    {
+        if (!bcmolt_epon_ni_en_state_pack(this->epon_ni_en, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_REGISTRATION_BEHAVIOR)) != 0)
+    {
+        if (!bcmolt_registration_behavior_pack(this->registration_behavior, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_MTU_1G)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, this->mtu_1g))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_MTU_10G)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, this->mtu_10g))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_MINIMUM_FIBER_LENGTH)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, (uint32_t) this->minimum_fiber_length))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_MAXIMUM_FIBER_LENGTH)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, (uint32_t) this->maximum_fiber_length))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_GRANT_SPACING_TQ)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, (uint32_t) this->grant_spacing_tq))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_EPON_LOGICAL_LINK_OPTIONS)) != 0)
+    {
+        if (!bcmolt_epon_logical_link_options_pack(&this->epon_logical_link_options, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_MPCP_DISCOVERY_PERIOD_MS)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->mpcp_discovery_period_ms))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_ALARM_STATE)) != 0)
+    {
+        if (!bcmolt_epon_ni_alarm_state_pack(&this->alarm_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_ALL_LINKS)) != 0)
+    {
+        if (!bcmolt_macaddress_list_u32_max_2048_pack(&this->all_links, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_ENCRYPTION_CFG)) != 0)
+    {
+        if (!bcmolt_epon_ni_encryption_cfg_pack(&this->encryption_cfg, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_PROTECTION_SWITCHING_CFG)) != 0)
+    {
+        if (!bcmolt_epon_protection_switching_configuration_pack(&this->protection_switching_cfg, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_CLOCK_TRANSPORT_CFG)) != 0)
+    {
+        if (!bcmolt_epon_clock_transport_configuration_pack(&this->clock_transport_cfg, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_DROPDOWN_WEIGHTS)) != 0)
+    {
+        if (!bcmolt_arr_u16_7_pack(&this->dropdown_weights, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_APPROXIMATE_SOLICITED_USAGE)) != 0)
+    {
+        if (!bcmolt_arr_bounds_8_pack(&this->approximate_solicited_usage, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_APPROXIMATE_TDM_USAGE)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->approximate_tdm_usage))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_NO_REPORTS_SOAK_TIME)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, this->no_reports_soak_time))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_PON_AGGREGATE_SHAPER)) != 0)
+    {
+        if (!bcmolt_pon_aggregate_shaper_pack(&this->pon_aggregate_shaper, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_ESTIMATED_PON_LATENCY_TQ)) != 0)
+    {
+        if (!bcmolt_arr_bounds_8_pack(&this->estimated_pon_latency_tq, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_ONU_UPGRADE_PARAMS)) != 0)
+    {
+        if (!bcmolt_epon_onu_upgrade_params_pack(&this->onu_upgrade_params, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_AUTO_ROGUE_DETECT_10G_EN)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->auto_rogue_detect_10g_en))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_AUTO_ROGUE_DETECT_1G_EN)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->auto_rogue_detect_1g_en))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_AUTO_ROGUE_DETECT_10G_THRESHOLD)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->auto_rogue_detect_10g_threshold))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_ni_cfg_data_get_packed_length(const bcmolt_epon_ni_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_MAC_ADDRESS)) != 0)
+    {
+        count += 6;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_EPON_NI_EN)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_REGISTRATION_BEHAVIOR)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_MTU_1G)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_MTU_10G)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_MINIMUM_FIBER_LENGTH)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_MAXIMUM_FIBER_LENGTH)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_GRANT_SPACING_TQ)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_EPON_LOGICAL_LINK_OPTIONS)) != 0)
+    {
+        count += bcmolt_epon_logical_link_options_get_packed_length(&this->epon_logical_link_options);
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_MPCP_DISCOVERY_PERIOD_MS)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_ALARM_STATE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_ALL_LINKS)) != 0)
+    {
+        count += bcmolt_macaddress_list_u32_max_2048_get_packed_length(&this->all_links);
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_ENCRYPTION_CFG)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_PROTECTION_SWITCHING_CFG)) != 0)
+    {
+        count += 12;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_CLOCK_TRANSPORT_CFG)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_DROPDOWN_WEIGHTS)) != 0)
+    {
+        count += 14;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_APPROXIMATE_SOLICITED_USAGE)) != 0)
+    {
+        count += 64;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_APPROXIMATE_TDM_USAGE)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_NO_REPORTS_SOAK_TIME)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_PON_AGGREGATE_SHAPER)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_ESTIMATED_PON_LATENCY_TQ)) != 0)
+    {
+        count += 64;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_ONU_UPGRADE_PARAMS)) != 0)
+    {
+        count += bcmolt_epon_onu_upgrade_params_get_packed_length(&this->onu_upgrade_params);
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_AUTO_ROGUE_DETECT_10G_EN)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_AUTO_ROGUE_DETECT_1G_EN)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_AUTO_ROGUE_DETECT_10G_THRESHOLD)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_cfg_data_unpack(bcmolt_epon_ni_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_MAC_ADDRESS)) != 0)
+    {
+        if (!bcmolt_buf_read_mac_address(buf, &this->mac_address))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_EPON_NI_EN)) != 0)
+    {
+        if (!bcmolt_epon_ni_en_state_unpack(&this->epon_ni_en, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_REGISTRATION_BEHAVIOR)) != 0)
+    {
+        if (!bcmolt_registration_behavior_unpack(&this->registration_behavior, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_MTU_1G)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, &this->mtu_1g))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_MTU_10G)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, &this->mtu_10g))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_MINIMUM_FIBER_LENGTH)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, (uint32_t *) &this->minimum_fiber_length))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_MAXIMUM_FIBER_LENGTH)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, (uint32_t *) &this->maximum_fiber_length))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_GRANT_SPACING_TQ)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, (uint32_t *) &this->grant_spacing_tq))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_EPON_LOGICAL_LINK_OPTIONS)) != 0)
+    {
+        if (!bcmolt_epon_logical_link_options_unpack(&this->epon_logical_link_options, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_MPCP_DISCOVERY_PERIOD_MS)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->mpcp_discovery_period_ms))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_ALARM_STATE)) != 0)
+    {
+        if (!bcmolt_epon_ni_alarm_state_unpack(&this->alarm_state, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_ALL_LINKS)) != 0)
+    {
+        if (!bcmolt_macaddress_list_u32_max_2048_unpack(&this->all_links, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_ENCRYPTION_CFG)) != 0)
+    {
+        if (!bcmolt_epon_ni_encryption_cfg_unpack(&this->encryption_cfg, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_PROTECTION_SWITCHING_CFG)) != 0)
+    {
+        if (!bcmolt_epon_protection_switching_configuration_unpack(&this->protection_switching_cfg, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_CLOCK_TRANSPORT_CFG)) != 0)
+    {
+        if (!bcmolt_epon_clock_transport_configuration_unpack(&this->clock_transport_cfg, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_DROPDOWN_WEIGHTS)) != 0)
+    {
+        if (!bcmolt_arr_u16_7_unpack(&this->dropdown_weights, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_APPROXIMATE_SOLICITED_USAGE)) != 0)
+    {
+        if (!bcmolt_arr_bounds_8_unpack(&this->approximate_solicited_usage, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_APPROXIMATE_TDM_USAGE)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->approximate_tdm_usage))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_NO_REPORTS_SOAK_TIME)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, &this->no_reports_soak_time))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_PON_AGGREGATE_SHAPER)) != 0)
+    {
+        if (!bcmolt_pon_aggregate_shaper_unpack(&this->pon_aggregate_shaper, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_ESTIMATED_PON_LATENCY_TQ)) != 0)
+    {
+        if (!bcmolt_arr_bounds_8_unpack(&this->estimated_pon_latency_tq, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_ONU_UPGRADE_PARAMS)) != 0)
+    {
+        if (!bcmolt_epon_onu_upgrade_params_unpack(&this->onu_upgrade_params, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_AUTO_ROGUE_DETECT_10G_EN)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->auto_rogue_detect_10g_en))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_AUTO_ROGUE_DETECT_1G_EN)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->auto_rogue_detect_1g_en))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_AUTO_ROGUE_DETECT_10G_THRESHOLD)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->auto_rogue_detect_10g_threshold))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_MAC_ADDRESS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 6))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_EPON_NI_EN)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_REGISTRATION_BEHAVIOR)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_MTU_1G)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_MTU_10G)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_MINIMUM_FIBER_LENGTH)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_MAXIMUM_FIBER_LENGTH)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_GRANT_SPACING_TQ)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_EPON_LOGICAL_LINK_OPTIONS)) != 0)
+    {
+        if (!bcmolt_epon_logical_link_options_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_MPCP_DISCOVERY_PERIOD_MS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_ALARM_STATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_ALL_LINKS)) != 0)
+    {
+        if (!bcmolt_macaddress_list_u32_max_2048_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_ENCRYPTION_CFG)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_PROTECTION_SWITCHING_CFG)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 12))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_CLOCK_TRANSPORT_CFG)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_DROPDOWN_WEIGHTS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 14))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_APPROXIMATE_SOLICITED_USAGE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 64))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_APPROXIMATE_TDM_USAGE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_NO_REPORTS_SOAK_TIME)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_PON_AGGREGATE_SHAPER)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_ESTIMATED_PON_LATENCY_TQ)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 64))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_ONU_UPGRADE_PARAMS)) != 0)
+    {
+        if (!bcmolt_epon_onu_upgrade_params_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_AUTO_ROGUE_DETECT_10G_EN)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_AUTO_ROGUE_DETECT_1G_EN)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_AUTO_ROGUE_DETECT_10G_THRESHOLD)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_cfg_data_bounds_check(const bcmolt_epon_ni_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_ni_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_EPON_NI_EN)) != 0)
+    {
+        switch (this->epon_ni_en)
+        {
+            case BCMOLT_EPON_NI_EN_STATE_DISABLED:
+                break;
+            case BCMOLT_EPON_NI_EN_STATE_ENABLED:
+                break;
+            case BCMOLT_EPON_NI_EN_STATE_PROTECTED_WORKING:
+                break;
+            case BCMOLT_EPON_NI_EN_STATE_PROTECTED_STANDBY:
+                break;
+            case BCMOLT_EPON_NI_EN_STATE_PROCESSING:
+                break;
+            default:
+                *failed_prop = BCMOLT_EPON_NI_CFG_ID_EPON_NI_EN;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_REGISTRATION_BEHAVIOR)) != 0)
+    {
+        switch (this->registration_behavior)
+        {
+            case BCMOLT_REGISTRATION_BEHAVIOR_AUTOMATIC:
+                break;
+            case BCMOLT_REGISTRATION_BEHAVIOR_NOTIFY_UNKNOWN:
+                break;
+            default:
+                *failed_prop = BCMOLT_EPON_NI_CFG_ID_REGISTRATION_BEHAVIOR;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_MTU_1G)) != 0)
+    {
+        if (this->mtu_1g < 64)
+        {
+            *failed_prop = BCMOLT_EPON_NI_CFG_ID_MTU_1G;
+            return BCMOS_FALSE;
+        }
+
+        if (this->mtu_1g > 2000)
+        {
+            *failed_prop = BCMOLT_EPON_NI_CFG_ID_MTU_1G;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_MTU_10G)) != 0)
+    {
+        if (this->mtu_10g < 64)
+        {
+            *failed_prop = BCMOLT_EPON_NI_CFG_ID_MTU_10G;
+            return BCMOS_FALSE;
+        }
+
+        if (this->mtu_10g > 10000)
+        {
+            *failed_prop = BCMOLT_EPON_NI_CFG_ID_MTU_10G;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_GRANT_SPACING_TQ)) != 0)
+    {
+        if (this->grant_spacing_tq > (bcmolt_time_quanta) 65535UL)
+        {
+            *failed_prop = BCMOLT_EPON_NI_CFG_ID_GRANT_SPACING_TQ;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_EPON_LOGICAL_LINK_OPTIONS)) != 0)
+    {
+        if (!bcmolt_epon_logical_link_options_bounds_check(&this->epon_logical_link_options))
+        {
+            *failed_prop = BCMOLT_EPON_NI_CFG_ID_EPON_LOGICAL_LINK_OPTIONS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_MPCP_DISCOVERY_PERIOD_MS)) != 0)
+    {
+        if (this->mpcp_discovery_period_ms < 100)
+        {
+            *failed_prop = BCMOLT_EPON_NI_CFG_ID_MPCP_DISCOVERY_PERIOD_MS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_ALARM_STATE)) != 0)
+    {
+        if (!bcmolt_epon_ni_alarm_state_bounds_check(&this->alarm_state))
+        {
+            *failed_prop = BCMOLT_EPON_NI_CFG_ID_ALARM_STATE;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_ALL_LINKS)) != 0)
+    {
+        if (this->all_links.len > 2048)
+        {
+            return BCMOS_FALSE;
+        }
+
+        if (!bcmolt_macaddress_list_u32_max_2048_bounds_check(&this->all_links))
+        {
+            *failed_prop = BCMOLT_EPON_NI_CFG_ID_ALL_LINKS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_ENCRYPTION_CFG)) != 0)
+    {
+        if (!bcmolt_epon_ni_encryption_cfg_bounds_check(&this->encryption_cfg))
+        {
+            *failed_prop = BCMOLT_EPON_NI_CFG_ID_ENCRYPTION_CFG;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_PROTECTION_SWITCHING_CFG)) != 0)
+    {
+        if (!bcmolt_epon_protection_switching_configuration_bounds_check(&this->protection_switching_cfg))
+        {
+            *failed_prop = BCMOLT_EPON_NI_CFG_ID_PROTECTION_SWITCHING_CFG;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_CLOCK_TRANSPORT_CFG)) != 0)
+    {
+        if (!bcmolt_epon_clock_transport_configuration_bounds_check(&this->clock_transport_cfg))
+        {
+            *failed_prop = BCMOLT_EPON_NI_CFG_ID_CLOCK_TRANSPORT_CFG;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_DROPDOWN_WEIGHTS)) != 0)
+    {
+        if (!bcmolt_arr_u16_7_bounds_check(&this->dropdown_weights))
+        {
+            *failed_prop = BCMOLT_EPON_NI_CFG_ID_DROPDOWN_WEIGHTS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_APPROXIMATE_SOLICITED_USAGE)) != 0)
+    {
+        if (!bcmolt_arr_bounds_8_bounds_check(&this->approximate_solicited_usage))
+        {
+            *failed_prop = BCMOLT_EPON_NI_CFG_ID_APPROXIMATE_SOLICITED_USAGE;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_NO_REPORTS_SOAK_TIME)) != 0)
+    {
+        if (this->no_reports_soak_time > 67)
+        {
+            *failed_prop = BCMOLT_EPON_NI_CFG_ID_NO_REPORTS_SOAK_TIME;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_PON_AGGREGATE_SHAPER)) != 0)
+    {
+        if (!bcmolt_pon_aggregate_shaper_bounds_check(&this->pon_aggregate_shaper))
+        {
+            *failed_prop = BCMOLT_EPON_NI_CFG_ID_PON_AGGREGATE_SHAPER;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_ESTIMATED_PON_LATENCY_TQ)) != 0)
+    {
+        if (!bcmolt_arr_bounds_8_bounds_check(&this->estimated_pon_latency_tq))
+        {
+            *failed_prop = BCMOLT_EPON_NI_CFG_ID_ESTIMATED_PON_LATENCY_TQ;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_CFG_ID_ONU_UPGRADE_PARAMS)) != 0)
+    {
+        if (!bcmolt_epon_onu_upgrade_params_bounds_check(&this->onu_upgrade_params))
+        {
+            *failed_prop = BCMOLT_EPON_NI_CFG_ID_ONU_UPGRADE_PARAMS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_ni_llid_quarantined_data_set_default(bcmolt_epon_ni_llid_quarantined_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_LLID_QUARANTINED_ID_LLID)) != 0)
+    {
+        this->llid = (bcmolt_epon_llid) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_LLID_QUARANTINED_ID_LINK_RATE)) != 0)
+    {
+        this->link_rate = BCMOLT_EPON_LINK_RATE_TEN_TEN;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_LLID_QUARANTINED_ID_LINK_MAC)) != 0)
+    {
+        bcmos_mac_address_init(&this->link_mac);
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_LLID_QUARANTINED_ID_RANGE_VALUE_TQ)) != 0)
+    {
+        this->range_value_tq = (bcmolt_time_quanta) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_llid_quarantined_data_pack(const bcmolt_epon_ni_llid_quarantined_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_LLID_QUARANTINED_ID_LLID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->llid))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_LLID_QUARANTINED_ID_LINK_RATE)) != 0)
+    {
+        if (!bcmolt_epon_link_rate_pack(this->link_rate, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_LLID_QUARANTINED_ID_LINK_MAC)) != 0)
+    {
+        if (!bcmolt_buf_write_mac_address(buf, this->link_mac))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_LLID_QUARANTINED_ID_RANGE_VALUE_TQ)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, (uint32_t) this->range_value_tq))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_ni_llid_quarantined_data_get_packed_length(const bcmolt_epon_ni_llid_quarantined_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_LLID_QUARANTINED_ID_LLID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_LLID_QUARANTINED_ID_LINK_RATE)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_LLID_QUARANTINED_ID_LINK_MAC)) != 0)
+    {
+        count += 6;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_LLID_QUARANTINED_ID_RANGE_VALUE_TQ)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_llid_quarantined_data_unpack(bcmolt_epon_ni_llid_quarantined_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_LLID_QUARANTINED_ID_LLID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->llid))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_LLID_QUARANTINED_ID_LINK_RATE)) != 0)
+    {
+        if (!bcmolt_epon_link_rate_unpack(&this->link_rate, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_LLID_QUARANTINED_ID_LINK_MAC)) != 0)
+    {
+        if (!bcmolt_buf_read_mac_address(buf, &this->link_mac))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_LLID_QUARANTINED_ID_RANGE_VALUE_TQ)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, (uint32_t *) &this->range_value_tq))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_llid_quarantined_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_LLID_QUARANTINED_ID_LLID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_LLID_QUARANTINED_ID_LINK_RATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_LLID_QUARANTINED_ID_LINK_MAC)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 6))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_LLID_QUARANTINED_ID_RANGE_VALUE_TQ)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_llid_quarantined_data_bounds_check(const bcmolt_epon_ni_llid_quarantined_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_ni_llid_quarantined_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_LLID_QUARANTINED_ID_LINK_RATE)) != 0)
+    {
+        switch (this->link_rate)
+        {
+            case BCMOLT_EPON_LINK_RATE_TEN_TEN:
+                break;
+            case BCMOLT_EPON_LINK_RATE_TEN_ONE:
+                break;
+            case BCMOLT_EPON_LINK_RATE_ONE_ONE:
+                break;
+            default:
+                *failed_prop = BCMOLT_EPON_NI_LLID_QUARANTINED_ID_LINK_RATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_ni_mpcp_timestamp_changed_data_set_default(bcmolt_epon_ni_mpcp_timestamp_changed_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_MPCP_TIMESTAMP_CHANGED_ID_MPCP_TIMESTAMP)) != 0)
+    {
+        this->mpcp_timestamp = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_mpcp_timestamp_changed_data_pack(const bcmolt_epon_ni_mpcp_timestamp_changed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_MPCP_TIMESTAMP_CHANGED_ID_MPCP_TIMESTAMP)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->mpcp_timestamp))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_ni_mpcp_timestamp_changed_data_get_packed_length(const bcmolt_epon_ni_mpcp_timestamp_changed_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_MPCP_TIMESTAMP_CHANGED_ID_MPCP_TIMESTAMP)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_mpcp_timestamp_changed_data_unpack(bcmolt_epon_ni_mpcp_timestamp_changed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_MPCP_TIMESTAMP_CHANGED_ID_MPCP_TIMESTAMP)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->mpcp_timestamp))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_mpcp_timestamp_changed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_MPCP_TIMESTAMP_CHANGED_ID_MPCP_TIMESTAMP)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_mpcp_timestamp_changed_data_bounds_check(const bcmolt_epon_ni_mpcp_timestamp_changed_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_ni_mpcp_timestamp_changed_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_ni_no_reports_data_set_default(bcmolt_epon_ni_no_reports_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_NO_REPORTS_ID_ALARM_STATUS)) != 0)
+    {
+        this->alarm_status = BCMOLT_STATUS_OFF;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_no_reports_data_pack(const bcmolt_epon_ni_no_reports_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_NO_REPORTS_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_pack(this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_ni_no_reports_data_get_packed_length(const bcmolt_epon_ni_no_reports_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_NO_REPORTS_ID_ALARM_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_no_reports_data_unpack(bcmolt_epon_ni_no_reports_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_NO_REPORTS_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_unpack(&this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_no_reports_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_NO_REPORTS_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_no_reports_data_bounds_check(const bcmolt_epon_ni_no_reports_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_ni_no_reports_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_NO_REPORTS_ID_ALARM_STATUS)) != 0)
+    {
+        switch (this->alarm_status)
+        {
+            case BCMOLT_STATUS_OFF:
+                break;
+            case BCMOLT_STATUS_ON:
+                break;
+            case BCMOLT_STATUS_NO_CHANGE:
+                break;
+            default:
+                *failed_prop = BCMOLT_EPON_NI_NO_REPORTS_ID_ALARM_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_ni_onu_upgrade_complete_data_set_default(bcmolt_epon_ni_onu_upgrade_complete_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ONU_UPGRADE_COMPLETE_ID_STATUS)) != 0)
+    {
+        this->status = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ONU_UPGRADE_COMPLETE_ID_LIST_OF_FAILED_ENTITIES)) != 0)
+    {
+        this->list_of_failed_entities.len = 0;
+        this->list_of_failed_entities.val = NULL;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_onu_upgrade_complete_data_pack(const bcmolt_epon_ni_onu_upgrade_complete_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ONU_UPGRADE_COMPLETE_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->status))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ONU_UPGRADE_COMPLETE_ID_LIST_OF_FAILED_ENTITIES)) != 0)
+    {
+        if (!bcmolt_epon_onu_upgrade_status_list_u32_pack(&this->list_of_failed_entities, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_ni_onu_upgrade_complete_data_get_packed_length(const bcmolt_epon_ni_onu_upgrade_complete_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ONU_UPGRADE_COMPLETE_ID_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ONU_UPGRADE_COMPLETE_ID_LIST_OF_FAILED_ENTITIES)) != 0)
+    {
+        count += bcmolt_epon_onu_upgrade_status_list_u32_get_packed_length(&this->list_of_failed_entities);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_onu_upgrade_complete_data_unpack(bcmolt_epon_ni_onu_upgrade_complete_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ONU_UPGRADE_COMPLETE_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->status))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ONU_UPGRADE_COMPLETE_ID_LIST_OF_FAILED_ENTITIES)) != 0)
+    {
+        if (!bcmolt_epon_onu_upgrade_status_list_u32_unpack(&this->list_of_failed_entities, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_onu_upgrade_complete_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ONU_UPGRADE_COMPLETE_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ONU_UPGRADE_COMPLETE_ID_LIST_OF_FAILED_ENTITIES)) != 0)
+    {
+        if (!bcmolt_epon_onu_upgrade_status_list_u32_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_onu_upgrade_complete_data_bounds_check(const bcmolt_epon_ni_onu_upgrade_complete_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_ni_onu_upgrade_complete_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ONU_UPGRADE_COMPLETE_ID_LIST_OF_FAILED_ENTITIES)) != 0)
+    {
+        if (!bcmolt_epon_onu_upgrade_status_list_u32_bounds_check(&this->list_of_failed_entities))
+        {
+            *failed_prop = BCMOLT_EPON_NI_ONU_UPGRADE_COMPLETE_ID_LIST_OF_FAILED_ENTITIES;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_ni_rogue_scan_complete_data_set_default(bcmolt_epon_ni_rogue_scan_complete_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ROGUE_SCAN_COMPLETE_ID_RETURN_IND_STATUS)) != 0)
+    {
+        this->return_ind_status = BCMOLT_ROGUE_SCAN_STATUS_COMPLETE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_rogue_scan_complete_data_pack(const bcmolt_epon_ni_rogue_scan_complete_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ROGUE_SCAN_COMPLETE_ID_RETURN_IND_STATUS)) != 0)
+    {
+        if (!bcmolt_rogue_scan_status_pack(this->return_ind_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_ni_rogue_scan_complete_data_get_packed_length(const bcmolt_epon_ni_rogue_scan_complete_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ROGUE_SCAN_COMPLETE_ID_RETURN_IND_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_rogue_scan_complete_data_unpack(bcmolt_epon_ni_rogue_scan_complete_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ROGUE_SCAN_COMPLETE_ID_RETURN_IND_STATUS)) != 0)
+    {
+        if (!bcmolt_rogue_scan_status_unpack(&this->return_ind_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_rogue_scan_complete_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ROGUE_SCAN_COMPLETE_ID_RETURN_IND_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_rogue_scan_complete_data_bounds_check(const bcmolt_epon_ni_rogue_scan_complete_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_ni_rogue_scan_complete_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ROGUE_SCAN_COMPLETE_ID_RETURN_IND_STATUS)) != 0)
+    {
+        switch (this->return_ind_status)
+        {
+            case BCMOLT_ROGUE_SCAN_STATUS_COMPLETE:
+                break;
+            case BCMOLT_ROGUE_SCAN_STATUS_LLID_STATE_IS_BAD:
+                break;
+            case BCMOLT_ROGUE_SCAN_STATUS_LLID_IS_OOR:
+                break;
+            case BCMOLT_ROGUE_SCAN_STATUS_SCAN_ERR_NORES:
+                break;
+            case BCMOLT_ROGUE_SCAN_STATUS_SCAN_ERR_INTERNAL:
+                break;
+            default:
+                *failed_prop = BCMOLT_EPON_NI_ROGUE_SCAN_COMPLETE_ID_RETURN_IND_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_ni_rssi_measurement_completed_data_set_default(bcmolt_epon_ni_rssi_measurement_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_RSSI_MEASUREMENT_COMPLETED_ID_STATUS)) != 0)
+    {
+        this->status = BCMOLT_RESULT_SUCCESS;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_RSSI_MEASUREMENT_COMPLETED_ID_LLID)) != 0)
+    {
+        this->llid = (bcmolt_epon_llid) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_RSSI_MEASUREMENT_COMPLETED_ID_LINK_MAC)) != 0)
+    {
+        bcmos_mac_address_init(&this->link_mac);
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_rssi_measurement_completed_data_pack(const bcmolt_epon_ni_rssi_measurement_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_RSSI_MEASUREMENT_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_result_pack(this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_RSSI_MEASUREMENT_COMPLETED_ID_LLID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->llid))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_RSSI_MEASUREMENT_COMPLETED_ID_LINK_MAC)) != 0)
+    {
+        if (!bcmolt_buf_write_mac_address(buf, this->link_mac))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_ni_rssi_measurement_completed_data_get_packed_length(const bcmolt_epon_ni_rssi_measurement_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_RSSI_MEASUREMENT_COMPLETED_ID_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_RSSI_MEASUREMENT_COMPLETED_ID_LLID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_RSSI_MEASUREMENT_COMPLETED_ID_LINK_MAC)) != 0)
+    {
+        count += 6;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_rssi_measurement_completed_data_unpack(bcmolt_epon_ni_rssi_measurement_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_RSSI_MEASUREMENT_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_result_unpack(&this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_RSSI_MEASUREMENT_COMPLETED_ID_LLID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->llid))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_RSSI_MEASUREMENT_COMPLETED_ID_LINK_MAC)) != 0)
+    {
+        if (!bcmolt_buf_read_mac_address(buf, &this->link_mac))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_rssi_measurement_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_RSSI_MEASUREMENT_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_RSSI_MEASUREMENT_COMPLETED_ID_LLID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_RSSI_MEASUREMENT_COMPLETED_ID_LINK_MAC)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 6))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_rssi_measurement_completed_data_bounds_check(const bcmolt_epon_ni_rssi_measurement_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_ni_rssi_measurement_completed_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_RSSI_MEASUREMENT_COMPLETED_ID_STATUS)) != 0)
+    {
+        switch (this->status)
+        {
+            case BCMOLT_RESULT_SUCCESS:
+                break;
+            case BCMOLT_RESULT_FAIL:
+                break;
+            default:
+                *failed_prop = BCMOLT_EPON_NI_RSSI_MEASUREMENT_COMPLETED_ID_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_ni_state_change_completed_data_set_default(bcmolt_epon_ni_state_change_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_STATE_CHANGE_COMPLETED_ID_NEW_STATE)) != 0)
+    {
+        this->new_state = BCMOLT_EPON_NI_EN_STATE_DISABLED;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_state_change_completed_data_pack(const bcmolt_epon_ni_state_change_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_STATE_CHANGE_COMPLETED_ID_NEW_STATE)) != 0)
+    {
+        if (!bcmolt_epon_ni_en_state_pack(this->new_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_ni_state_change_completed_data_get_packed_length(const bcmolt_epon_ni_state_change_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_STATE_CHANGE_COMPLETED_ID_NEW_STATE)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_state_change_completed_data_unpack(bcmolt_epon_ni_state_change_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_STATE_CHANGE_COMPLETED_ID_NEW_STATE)) != 0)
+    {
+        if (!bcmolt_epon_ni_en_state_unpack(&this->new_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_state_change_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_STATE_CHANGE_COMPLETED_ID_NEW_STATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_state_change_completed_data_bounds_check(const bcmolt_epon_ni_state_change_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_ni_state_change_completed_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_STATE_CHANGE_COMPLETED_ID_NEW_STATE)) != 0)
+    {
+        switch (this->new_state)
+        {
+            case BCMOLT_EPON_NI_EN_STATE_DISABLED:
+                break;
+            case BCMOLT_EPON_NI_EN_STATE_ENABLED:
+                break;
+            case BCMOLT_EPON_NI_EN_STATE_PROTECTED_WORKING:
+                break;
+            case BCMOLT_EPON_NI_EN_STATE_PROTECTED_STANDBY:
+                break;
+            case BCMOLT_EPON_NI_EN_STATE_PROCESSING:
+                break;
+            default:
+                *failed_prop = BCMOLT_EPON_NI_STATE_CHANGE_COMPLETED_ID_NEW_STATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_ni_auto_cfg_data_set_default(bcmolt_epon_ni_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_AUTO_ROGUE_SCAN_10G_FAILURE)) != 0)
+    {
+        this->auto_rogue_scan_10g_failure = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_AUTO_ROGUE_SCAN_1G_FAILURE)) != 0)
+    {
+        this->auto_rogue_scan_1g_failure = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_LLID_QUARANTINED)) != 0)
+    {
+        this->llid_quarantined = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_MPCP_TIMESTAMP_CHANGED)) != 0)
+    {
+        this->mpcp_timestamp_changed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_NO_REPORTS)) != 0)
+    {
+        this->no_reports = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_ONU_UPGRADE_COMPLETE)) != 0)
+    {
+        this->onu_upgrade_complete = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_RERANGE_FAILURE)) != 0)
+    {
+        this->rerange_failure = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_ROGUE_SCAN_COMPLETE)) != 0)
+    {
+        this->rogue_scan_complete = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_RSSI_MEASUREMENT_COMPLETED)) != 0)
+    {
+        this->rssi_measurement_completed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_STATE_CHANGE_COMPLETED)) != 0)
+    {
+        this->state_change_completed = BCMOS_FALSE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_auto_cfg_data_pack(const bcmolt_epon_ni_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_AUTO_ROGUE_SCAN_10G_FAILURE)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->auto_rogue_scan_10g_failure))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_AUTO_ROGUE_SCAN_1G_FAILURE)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->auto_rogue_scan_1g_failure))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_LLID_QUARANTINED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->llid_quarantined))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_MPCP_TIMESTAMP_CHANGED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->mpcp_timestamp_changed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_NO_REPORTS)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->no_reports))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_ONU_UPGRADE_COMPLETE)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->onu_upgrade_complete))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_RERANGE_FAILURE)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->rerange_failure))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_ROGUE_SCAN_COMPLETE)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->rogue_scan_complete))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_RSSI_MEASUREMENT_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->rssi_measurement_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_STATE_CHANGE_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->state_change_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_ni_auto_cfg_data_get_packed_length(const bcmolt_epon_ni_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_AUTO_ROGUE_SCAN_10G_FAILURE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_AUTO_ROGUE_SCAN_1G_FAILURE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_LLID_QUARANTINED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_MPCP_TIMESTAMP_CHANGED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_NO_REPORTS)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_ONU_UPGRADE_COMPLETE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_RERANGE_FAILURE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_ROGUE_SCAN_COMPLETE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_RSSI_MEASUREMENT_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_STATE_CHANGE_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_auto_cfg_data_unpack(bcmolt_epon_ni_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_AUTO_ROGUE_SCAN_10G_FAILURE)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->auto_rogue_scan_10g_failure))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_AUTO_ROGUE_SCAN_1G_FAILURE)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->auto_rogue_scan_1g_failure))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_LLID_QUARANTINED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->llid_quarantined))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_MPCP_TIMESTAMP_CHANGED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->mpcp_timestamp_changed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_NO_REPORTS)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->no_reports))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_ONU_UPGRADE_COMPLETE)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->onu_upgrade_complete))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_RERANGE_FAILURE)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->rerange_failure))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_ROGUE_SCAN_COMPLETE)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->rogue_scan_complete))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_RSSI_MEASUREMENT_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->rssi_measurement_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_STATE_CHANGE_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->state_change_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_AUTO_ROGUE_SCAN_10G_FAILURE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_AUTO_ROGUE_SCAN_1G_FAILURE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_LLID_QUARANTINED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_MPCP_TIMESTAMP_CHANGED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_NO_REPORTS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_ONU_UPGRADE_COMPLETE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_RERANGE_FAILURE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_ROGUE_SCAN_COMPLETE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_RSSI_MEASUREMENT_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_AUTO_CFG_ID_STATE_CHANGE_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_auto_cfg_data_bounds_check(const bcmolt_epon_ni_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_ni_auto_cfg_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_ni_add_link_data_set_default(bcmolt_epon_ni_add_link_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ADD_LINK_ID_MAC_ADDRESS)) != 0)
+    {
+        bcmos_mac_address_init(&this->mac_address);
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ADD_LINK_ID_RATE)) != 0)
+    {
+        this->rate = BCMOLT_EPON_LINK_RATE_TEN_TEN;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_add_link_data_pack(const bcmolt_epon_ni_add_link_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ADD_LINK_ID_MAC_ADDRESS)) != 0)
+    {
+        if (!bcmolt_buf_write_mac_address(buf, this->mac_address))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ADD_LINK_ID_RATE)) != 0)
+    {
+        if (!bcmolt_epon_link_rate_pack(this->rate, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_ni_add_link_data_get_packed_length(const bcmolt_epon_ni_add_link_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ADD_LINK_ID_MAC_ADDRESS)) != 0)
+    {
+        count += 6;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ADD_LINK_ID_RATE)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_add_link_data_unpack(bcmolt_epon_ni_add_link_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ADD_LINK_ID_MAC_ADDRESS)) != 0)
+    {
+        if (!bcmolt_buf_read_mac_address(buf, &this->mac_address))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ADD_LINK_ID_RATE)) != 0)
+    {
+        if (!bcmolt_epon_link_rate_unpack(&this->rate, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_add_link_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ADD_LINK_ID_MAC_ADDRESS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 6))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ADD_LINK_ID_RATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_add_link_data_bounds_check(const bcmolt_epon_ni_add_link_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_ni_add_link_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ADD_LINK_ID_RATE)) != 0)
+    {
+        switch (this->rate)
+        {
+            case BCMOLT_EPON_LINK_RATE_TEN_TEN:
+                break;
+            case BCMOLT_EPON_LINK_RATE_TEN_ONE:
+                break;
+            case BCMOLT_EPON_LINK_RATE_ONE_ONE:
+                break;
+            default:
+                *failed_prop = BCMOLT_EPON_NI_ADD_LINK_ID_RATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_ni_add_multicast_link_data_set_default(bcmolt_epon_ni_add_multicast_link_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ADD_MULTICAST_LINK_ID_MAC_ADDRESS)) != 0)
+    {
+        bcmos_mac_address_init(&this->mac_address);
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ADD_MULTICAST_LINK_ID_RATE)) != 0)
+    {
+        this->rate = BCMOLT_EPON_LINK_RATE_TEN_TEN;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_add_multicast_link_data_pack(const bcmolt_epon_ni_add_multicast_link_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ADD_MULTICAST_LINK_ID_MAC_ADDRESS)) != 0)
+    {
+        if (!bcmolt_buf_write_mac_address(buf, this->mac_address))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ADD_MULTICAST_LINK_ID_RATE)) != 0)
+    {
+        if (!bcmolt_epon_link_rate_pack(this->rate, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_ni_add_multicast_link_data_get_packed_length(const bcmolt_epon_ni_add_multicast_link_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ADD_MULTICAST_LINK_ID_MAC_ADDRESS)) != 0)
+    {
+        count += 6;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ADD_MULTICAST_LINK_ID_RATE)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_add_multicast_link_data_unpack(bcmolt_epon_ni_add_multicast_link_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ADD_MULTICAST_LINK_ID_MAC_ADDRESS)) != 0)
+    {
+        if (!bcmolt_buf_read_mac_address(buf, &this->mac_address))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ADD_MULTICAST_LINK_ID_RATE)) != 0)
+    {
+        if (!bcmolt_epon_link_rate_unpack(&this->rate, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_add_multicast_link_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ADD_MULTICAST_LINK_ID_MAC_ADDRESS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 6))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ADD_MULTICAST_LINK_ID_RATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_add_multicast_link_data_bounds_check(const bcmolt_epon_ni_add_multicast_link_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_ni_add_multicast_link_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ADD_MULTICAST_LINK_ID_RATE)) != 0)
+    {
+        switch (this->rate)
+        {
+            case BCMOLT_EPON_LINK_RATE_TEN_TEN:
+                break;
+            case BCMOLT_EPON_LINK_RATE_TEN_ONE:
+                break;
+            case BCMOLT_EPON_LINK_RATE_ONE_ONE:
+                break;
+            default:
+                *failed_prop = BCMOLT_EPON_NI_ADD_MULTICAST_LINK_ID_RATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_ni_add_protected_standby_link_data_set_default(bcmolt_epon_ni_add_protected_standby_link_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ADD_PROTECTED_STANDBY_LINK_ID_MAC_ADDRESS)) != 0)
+    {
+        bcmos_mac_address_init(&this->mac_address);
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ADD_PROTECTED_STANDBY_LINK_ID_WORKING_LINK_INFO)) != 0)
+    {
+        this->working_link_info.link_status = (bcmolt_epon_link_status) 0;
+        this->working_link_info.rate = BCMOLT_EPON_LINK_RATE_TEN_TEN;
+        this->working_link_info.llid = (bcmolt_epon_llid) 0;
+        this->working_link_info.mpcp_discovery_info = (bcmolt_mpcp_discovery_info) 0;
+        this->working_link_info.onu_laser_on_time_tq = (bcmolt_time_quanta) 0;
+        this->working_link_info.onu_laser_off_time_tq = (bcmolt_time_quanta) 0;
+        this->working_link_info.pending_grants = 0;
+        this->working_link_info.range_value_tq = (bcmolt_time_quanta) 0;
+        this->working_link_info.tunnel_id = (bcmolt_epon_tunnel_id) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_add_protected_standby_link_data_pack(const bcmolt_epon_ni_add_protected_standby_link_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ADD_PROTECTED_STANDBY_LINK_ID_MAC_ADDRESS)) != 0)
+    {
+        if (!bcmolt_buf_write_mac_address(buf, this->mac_address))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ADD_PROTECTED_STANDBY_LINK_ID_WORKING_LINK_INFO)) != 0)
+    {
+        if (!bcmolt_epon_link_info_pack(&this->working_link_info, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_ni_add_protected_standby_link_data_get_packed_length(const bcmolt_epon_ni_add_protected_standby_link_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ADD_PROTECTED_STANDBY_LINK_ID_MAC_ADDRESS)) != 0)
+    {
+        count += 6;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ADD_PROTECTED_STANDBY_LINK_ID_WORKING_LINK_INFO)) != 0)
+    {
+        count += 24;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_add_protected_standby_link_data_unpack(bcmolt_epon_ni_add_protected_standby_link_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ADD_PROTECTED_STANDBY_LINK_ID_MAC_ADDRESS)) != 0)
+    {
+        if (!bcmolt_buf_read_mac_address(buf, &this->mac_address))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ADD_PROTECTED_STANDBY_LINK_ID_WORKING_LINK_INFO)) != 0)
+    {
+        if (!bcmolt_epon_link_info_unpack(&this->working_link_info, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_add_protected_standby_link_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ADD_PROTECTED_STANDBY_LINK_ID_MAC_ADDRESS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 6))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ADD_PROTECTED_STANDBY_LINK_ID_WORKING_LINK_INFO)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 24))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_add_protected_standby_link_data_bounds_check(const bcmolt_epon_ni_add_protected_standby_link_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_ni_add_protected_standby_link_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ADD_PROTECTED_STANDBY_LINK_ID_WORKING_LINK_INFO)) != 0)
+    {
+        if (!bcmolt_epon_link_info_bounds_check(&this->working_link_info))
+        {
+            *failed_prop = BCMOLT_EPON_NI_ADD_PROTECTED_STANDBY_LINK_ID_WORKING_LINK_INFO;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_ni_issue_rssi_grant_data_set_default(bcmolt_epon_ni_issue_rssi_grant_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_GRANTED_LINK)) != 0)
+    {
+        bcmos_mac_address_init(&this->granted_link);
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_TRIGGER_WIDTH)) != 0)
+    {
+        this->trigger_width = 32;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_TRIGGER_DELAY)) != 0)
+    {
+        this->trigger_delay = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_SAMPLE_PERIOD)) != 0)
+    {
+        this->sample_period = 500;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_issue_rssi_grant_data_pack(const bcmolt_epon_ni_issue_rssi_grant_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_GRANTED_LINK)) != 0)
+    {
+        if (!bcmolt_buf_write_mac_address(buf, this->granted_link))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_TRIGGER_WIDTH)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, this->trigger_width))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_TRIGGER_DELAY)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, this->trigger_delay))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_SAMPLE_PERIOD)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, this->sample_period))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_ni_issue_rssi_grant_data_get_packed_length(const bcmolt_epon_ni_issue_rssi_grant_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_GRANTED_LINK)) != 0)
+    {
+        count += 6;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_TRIGGER_WIDTH)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_TRIGGER_DELAY)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_SAMPLE_PERIOD)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_issue_rssi_grant_data_unpack(bcmolt_epon_ni_issue_rssi_grant_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_GRANTED_LINK)) != 0)
+    {
+        if (!bcmolt_buf_read_mac_address(buf, &this->granted_link))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_TRIGGER_WIDTH)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, &this->trigger_width))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_TRIGGER_DELAY)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, &this->trigger_delay))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_SAMPLE_PERIOD)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, &this->sample_period))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_issue_rssi_grant_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_GRANTED_LINK)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 6))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_TRIGGER_WIDTH)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_TRIGGER_DELAY)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_SAMPLE_PERIOD)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_issue_rssi_grant_data_bounds_check(const bcmolt_epon_ni_issue_rssi_grant_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_ni_issue_rssi_grant_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_TRIGGER_WIDTH)) != 0)
+    {
+        if (this->trigger_width < 32)
+        {
+            *failed_prop = BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_TRIGGER_WIDTH;
+            return BCMOS_FALSE;
+        }
+
+        if (this->trigger_width > 3000)
+        {
+            *failed_prop = BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_TRIGGER_WIDTH;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_TRIGGER_DELAY)) != 0)
+    {
+        if (this->trigger_delay > 1500)
+        {
+            *failed_prop = BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_TRIGGER_DELAY;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_SAMPLE_PERIOD)) != 0)
+    {
+        if (this->sample_period < 100)
+        {
+            *failed_prop = BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_SAMPLE_PERIOD;
+            return BCMOS_FALSE;
+        }
+
+        if (this->sample_period > 900)
+        {
+            *failed_prop = BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_SAMPLE_PERIOD;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_ni_protection_switching_apply_rerange_delta_data_set_default(bcmolt_epon_ni_protection_switching_apply_rerange_delta_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_PROTECTION_SWITCHING_APPLY_RERANGE_DELTA_ID_RERANGE_DELTA)) != 0)
+    {
+        this->rerange_delta = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_protection_switching_apply_rerange_delta_data_pack(const bcmolt_epon_ni_protection_switching_apply_rerange_delta_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_PROTECTION_SWITCHING_APPLY_RERANGE_DELTA_ID_RERANGE_DELTA)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->rerange_delta))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_ni_protection_switching_apply_rerange_delta_data_get_packed_length(const bcmolt_epon_ni_protection_switching_apply_rerange_delta_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_PROTECTION_SWITCHING_APPLY_RERANGE_DELTA_ID_RERANGE_DELTA)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_protection_switching_apply_rerange_delta_data_unpack(bcmolt_epon_ni_protection_switching_apply_rerange_delta_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_PROTECTION_SWITCHING_APPLY_RERANGE_DELTA_ID_RERANGE_DELTA)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->rerange_delta))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_protection_switching_apply_rerange_delta_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_PROTECTION_SWITCHING_APPLY_RERANGE_DELTA_ID_RERANGE_DELTA)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_protection_switching_apply_rerange_delta_data_bounds_check(const bcmolt_epon_ni_protection_switching_apply_rerange_delta_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_ni_protection_switching_apply_rerange_delta_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_ni_rogue_llid_scan_data_set_default(bcmolt_epon_ni_rogue_llid_scan_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ROGUE_LLID_SCAN_ID_MODE)) != 0)
+    {
+        this->mode = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ROGUE_LLID_SCAN_ID_LLID)) != 0)
+    {
+        this->llid = (bcmolt_epon_llid) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_rogue_llid_scan_data_pack(const bcmolt_epon_ni_rogue_llid_scan_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ROGUE_LLID_SCAN_ID_MODE)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->mode))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ROGUE_LLID_SCAN_ID_LLID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->llid))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_ni_rogue_llid_scan_data_get_packed_length(const bcmolt_epon_ni_rogue_llid_scan_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ROGUE_LLID_SCAN_ID_MODE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ROGUE_LLID_SCAN_ID_LLID)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_rogue_llid_scan_data_unpack(bcmolt_epon_ni_rogue_llid_scan_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ROGUE_LLID_SCAN_ID_MODE)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->mode))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ROGUE_LLID_SCAN_ID_LLID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->llid))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_rogue_llid_scan_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ROGUE_LLID_SCAN_ID_MODE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_ROGUE_LLID_SCAN_ID_LLID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_rogue_llid_scan_data_bounds_check(const bcmolt_epon_ni_rogue_llid_scan_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_ni_rogue_llid_scan_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_ni_set_epon_ni_en_state_data_set_default(bcmolt_epon_ni_set_epon_ni_en_state_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_SET_EPON_NI_EN_STATE_ID_NEW_STATE)) != 0)
+    {
+        this->new_state = BCMOLT_EPON_NI_EN_STATE_DISABLED;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_set_epon_ni_en_state_data_pack(const bcmolt_epon_ni_set_epon_ni_en_state_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_SET_EPON_NI_EN_STATE_ID_NEW_STATE)) != 0)
+    {
+        if (!bcmolt_epon_ni_en_state_pack(this->new_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_ni_set_epon_ni_en_state_data_get_packed_length(const bcmolt_epon_ni_set_epon_ni_en_state_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_SET_EPON_NI_EN_STATE_ID_NEW_STATE)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_set_epon_ni_en_state_data_unpack(bcmolt_epon_ni_set_epon_ni_en_state_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_SET_EPON_NI_EN_STATE_ID_NEW_STATE)) != 0)
+    {
+        if (!bcmolt_epon_ni_en_state_unpack(&this->new_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_set_epon_ni_en_state_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_SET_EPON_NI_EN_STATE_ID_NEW_STATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_set_epon_ni_en_state_data_bounds_check(const bcmolt_epon_ni_set_epon_ni_en_state_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_ni_set_epon_ni_en_state_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_SET_EPON_NI_EN_STATE_ID_NEW_STATE)) != 0)
+    {
+        switch (this->new_state)
+        {
+            case BCMOLT_EPON_NI_EN_STATE_DISABLED:
+                break;
+            case BCMOLT_EPON_NI_EN_STATE_ENABLED:
+                break;
+            case BCMOLT_EPON_NI_EN_STATE_PROTECTED_WORKING:
+                break;
+            case BCMOLT_EPON_NI_EN_STATE_PROTECTED_STANDBY:
+                break;
+            case BCMOLT_EPON_NI_EN_STATE_PROCESSING:
+                break;
+            default:
+                *failed_prop = BCMOLT_EPON_NI_SET_EPON_NI_EN_STATE_ID_NEW_STATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_ni_start_onu_upgrade_data_set_default(bcmolt_epon_ni_start_onu_upgrade_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_START_ONU_UPGRADE_ID_LIST_OF_ONU_IDS)) != 0)
+    {
+        this->list_of_onu_ids.len = 0;
+        this->list_of_onu_ids.val = NULL;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_start_onu_upgrade_data_pack(const bcmolt_epon_ni_start_onu_upgrade_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_START_ONU_UPGRADE_ID_LIST_OF_ONU_IDS)) != 0)
+    {
+        if (!bcmolt_macaddress_list_u32_pack(&this->list_of_onu_ids, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_ni_start_onu_upgrade_data_get_packed_length(const bcmolt_epon_ni_start_onu_upgrade_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_START_ONU_UPGRADE_ID_LIST_OF_ONU_IDS)) != 0)
+    {
+        count += bcmolt_macaddress_list_u32_get_packed_length(&this->list_of_onu_ids);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_start_onu_upgrade_data_unpack(bcmolt_epon_ni_start_onu_upgrade_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_START_ONU_UPGRADE_ID_LIST_OF_ONU_IDS)) != 0)
+    {
+        if (!bcmolt_macaddress_list_u32_unpack(&this->list_of_onu_ids, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_start_onu_upgrade_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_START_ONU_UPGRADE_ID_LIST_OF_ONU_IDS)) != 0)
+    {
+        if (!bcmolt_macaddress_list_u32_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_ni_start_onu_upgrade_data_bounds_check(const bcmolt_epon_ni_start_onu_upgrade_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_ni_start_onu_upgrade_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_NI_START_ONU_UPGRADE_ID_LIST_OF_ONU_IDS)) != 0)
+    {
+        if (!bcmolt_macaddress_list_u32_bounds_check(&this->list_of_onu_ids))
+        {
+            *failed_prop = BCMOLT_EPON_NI_START_ONU_UPGRADE_ID_LIST_OF_ONU_IDS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_onu_10g_us_key_set_default(bcmolt_epon_onu_10g_us_key *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_KEY_ID_EPON_NI)) != 0)
+    {
+        this->epon_ni = (bcmolt_epon_ni) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_KEY_ID_ONU_ID)) != 0)
+    {
+        this->onu_id = (bcmolt_epon_onu_id) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_10g_us_key_pack(const bcmolt_epon_onu_10g_us_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_KEY_ID_EPON_NI)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->epon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_KEY_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, (uint8_t) this->onu_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_onu_10g_us_key_get_packed_length(const bcmolt_epon_onu_10g_us_key *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_KEY_ID_EPON_NI)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_KEY_ID_ONU_ID)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_10g_us_key_unpack(bcmolt_epon_onu_10g_us_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_KEY_ID_EPON_NI)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->epon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_KEY_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, (uint8_t *) &this->onu_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_10g_us_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_KEY_ID_EPON_NI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_KEY_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_10g_us_key_bounds_check(const bcmolt_epon_onu_10g_us_key *this, bcmolt_presence_mask fields_present, bcmolt_epon_onu_10g_us_key_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_KEY_ID_ONU_ID)) != 0)
+    {
+        if (this->onu_id > (bcmolt_epon_onu_id) 127)
+        {
+            *failed_prop = BCMOLT_EPON_ONU_10G_US_KEY_ID_ONU_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_onu_10g_us_cfg_data_set_default(bcmolt_epon_onu_10g_us_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_CFG_ID_ALL_LINKS)) != 0)
+    {
+        this->all_links.len = 0;
+        this->all_links.val = NULL;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_10g_us_cfg_data_pack(const bcmolt_epon_onu_10g_us_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_CFG_ID_ALL_LINKS)) != 0)
+    {
+        if (!bcmolt_macaddress_list_u32_max_2048_pack(&this->all_links, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_onu_10g_us_cfg_data_get_packed_length(const bcmolt_epon_onu_10g_us_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_CFG_ID_ALL_LINKS)) != 0)
+    {
+        count += bcmolt_macaddress_list_u32_max_2048_get_packed_length(&this->all_links);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_10g_us_cfg_data_unpack(bcmolt_epon_onu_10g_us_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_CFG_ID_ALL_LINKS)) != 0)
+    {
+        if (!bcmolt_macaddress_list_u32_max_2048_unpack(&this->all_links, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_10g_us_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_CFG_ID_ALL_LINKS)) != 0)
+    {
+        if (!bcmolt_macaddress_list_u32_max_2048_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_10g_us_cfg_data_bounds_check(const bcmolt_epon_onu_10g_us_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_onu_10g_us_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_CFG_ID_ALL_LINKS)) != 0)
+    {
+        if (this->all_links.len > 2048)
+        {
+            return BCMOS_FALSE;
+        }
+
+        if (!bcmolt_macaddress_list_u32_max_2048_bounds_check(&this->all_links))
+        {
+            *failed_prop = BCMOLT_EPON_ONU_10G_US_CFG_ID_ALL_LINKS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_onu_10g_us_stat_data_set_default(bcmolt_epon_onu_10g_us_stat_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_CODE_WORDS_TOTAL)) != 0)
+    {
+        this->fec_code_words_total = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_CODE_WORDS_DECODE_FAILS)) != 0)
+    {
+        this->fec_code_words_decode_fails = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_ZEROES_CORRECTED)) != 0)
+    {
+        this->fec_zeroes_corrected = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_ONES_CORRECTED)) != 0)
+    {
+        this->fec_ones_corrected = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_10g_us_stat_data_pack(const bcmolt_epon_onu_10g_us_stat_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_CODE_WORDS_TOTAL)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->fec_code_words_total))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_CODE_WORDS_DECODE_FAILS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->fec_code_words_decode_fails))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_ZEROES_CORRECTED)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->fec_zeroes_corrected))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_ONES_CORRECTED)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->fec_ones_corrected))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_onu_10g_us_stat_data_get_packed_length(const bcmolt_epon_onu_10g_us_stat_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_CODE_WORDS_TOTAL)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_CODE_WORDS_DECODE_FAILS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_ZEROES_CORRECTED)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_ONES_CORRECTED)) != 0)
+    {
+        count += 8;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_10g_us_stat_data_unpack(bcmolt_epon_onu_10g_us_stat_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_CODE_WORDS_TOTAL)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->fec_code_words_total))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_CODE_WORDS_DECODE_FAILS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->fec_code_words_decode_fails))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_ZEROES_CORRECTED)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->fec_zeroes_corrected))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_ONES_CORRECTED)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->fec_ones_corrected))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_10g_us_stat_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_CODE_WORDS_TOTAL)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_CODE_WORDS_DECODE_FAILS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_ZEROES_CORRECTED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_ONES_CORRECTED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_10g_us_stat_data_bounds_check(const bcmolt_epon_onu_10g_us_stat_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_onu_10g_us_stat_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_onu_10g_us_stat_cfg_data_set_default(bcmolt_epon_onu_10g_us_stat_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_STAT_CFG_ID_CFG)) != 0)
+    {
+        this->cfg.trigger.type = BCMOLT_STAT_CONDITION_TYPE_NONE;
+        this->cfg.soak.active_soak_time = 0;
+        this->cfg.soak.clear_soak_time = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_10g_us_stat_cfg_data_pack(const bcmolt_epon_onu_10g_us_stat_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_pack(&this->cfg, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_onu_10g_us_stat_cfg_data_get_packed_length(const bcmolt_epon_onu_10g_us_stat_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_STAT_CFG_ID_CFG)) != 0)
+    {
+        count += bcmolt_stat_alarm_config_get_packed_length(&this->cfg);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_10g_us_stat_cfg_data_unpack(bcmolt_epon_onu_10g_us_stat_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_unpack(&this->cfg, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_10g_us_stat_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_10g_us_stat_cfg_data_bounds_check(const bcmolt_epon_onu_10g_us_stat_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_onu_10g_us_stat_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_bounds_check(&this->cfg))
+        {
+            *failed_prop = BCMOLT_EPON_ONU_10G_US_STAT_CFG_ID_CFG;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_onu_10g_us_stat_alarm_cleared_data_set_default(bcmolt_epon_onu_10g_us_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        this->stat = BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_CODE_WORDS_TOTAL;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_10g_us_stat_alarm_cleared_data_pack(const bcmolt_epon_onu_10g_us_stat_alarm_cleared_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_epon_onu_10g_us_stat_id_pack(this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_onu_10g_us_stat_alarm_cleared_data_get_packed_length(const bcmolt_epon_onu_10g_us_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_10g_us_stat_alarm_cleared_data_unpack(bcmolt_epon_onu_10g_us_stat_alarm_cleared_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_epon_onu_10g_us_stat_id_unpack(&this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_10g_us_stat_alarm_cleared_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_10g_us_stat_alarm_cleared_data_bounds_check(const bcmolt_epon_onu_10g_us_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_onu_10g_us_stat_alarm_cleared_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        switch (this->stat)
+        {
+            case BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_CODE_WORDS_TOTAL:
+                break;
+            case BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_CODE_WORDS_DECODE_FAILS:
+                break;
+            case BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_ZEROES_CORRECTED:
+                break;
+            case BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_ONES_CORRECTED:
+                break;
+            default:
+                *failed_prop = BCMOLT_EPON_ONU_10G_US_STAT_ALARM_CLEARED_ID_STAT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_onu_10g_us_stat_alarm_raised_data_set_default(bcmolt_epon_onu_10g_us_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        this->stat = BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_CODE_WORDS_TOTAL;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_10g_us_stat_alarm_raised_data_pack(const bcmolt_epon_onu_10g_us_stat_alarm_raised_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_epon_onu_10g_us_stat_id_pack(this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_onu_10g_us_stat_alarm_raised_data_get_packed_length(const bcmolt_epon_onu_10g_us_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_10g_us_stat_alarm_raised_data_unpack(bcmolt_epon_onu_10g_us_stat_alarm_raised_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_epon_onu_10g_us_stat_id_unpack(&this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_10g_us_stat_alarm_raised_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_10g_us_stat_alarm_raised_data_bounds_check(const bcmolt_epon_onu_10g_us_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_onu_10g_us_stat_alarm_raised_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        switch (this->stat)
+        {
+            case BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_CODE_WORDS_TOTAL:
+                break;
+            case BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_CODE_WORDS_DECODE_FAILS:
+                break;
+            case BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_ZEROES_CORRECTED:
+                break;
+            case BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_ONES_CORRECTED:
+                break;
+            default:
+                *failed_prop = BCMOLT_EPON_ONU_10G_US_STAT_ALARM_RAISED_ID_STAT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_onu_10g_us_auto_cfg_data_set_default(bcmolt_epon_onu_10g_us_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        this->stat_alarm_cleared = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        this->stat_alarm_raised = BCMOS_FALSE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_10g_us_auto_cfg_data_pack(const bcmolt_epon_onu_10g_us_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->stat_alarm_cleared))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->stat_alarm_raised))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_onu_10g_us_auto_cfg_data_get_packed_length(const bcmolt_epon_onu_10g_us_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_10g_us_auto_cfg_data_unpack(bcmolt_epon_onu_10g_us_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->stat_alarm_cleared))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->stat_alarm_raised))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_10g_us_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_10G_US_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_10g_us_auto_cfg_data_bounds_check(const bcmolt_epon_onu_10g_us_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_onu_10g_us_auto_cfg_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_onu_1g_us_key_set_default(bcmolt_epon_onu_1g_us_key *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_KEY_ID_EPON_NI)) != 0)
+    {
+        this->epon_ni = (bcmolt_epon_ni) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_KEY_ID_ONU_ID)) != 0)
+    {
+        this->onu_id = (bcmolt_epon_onu_id) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_1g_us_key_pack(const bcmolt_epon_onu_1g_us_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_KEY_ID_EPON_NI)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->epon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_KEY_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, (uint8_t) this->onu_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_onu_1g_us_key_get_packed_length(const bcmolt_epon_onu_1g_us_key *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_KEY_ID_EPON_NI)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_KEY_ID_ONU_ID)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_1g_us_key_unpack(bcmolt_epon_onu_1g_us_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_KEY_ID_EPON_NI)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->epon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_KEY_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, (uint8_t *) &this->onu_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_1g_us_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_KEY_ID_EPON_NI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_KEY_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_1g_us_key_bounds_check(const bcmolt_epon_onu_1g_us_key *this, bcmolt_presence_mask fields_present, bcmolt_epon_onu_1g_us_key_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_KEY_ID_ONU_ID)) != 0)
+    {
+        if (this->onu_id > (bcmolt_epon_onu_id) 127)
+        {
+            *failed_prop = BCMOLT_EPON_ONU_1G_US_KEY_ID_ONU_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_onu_1g_us_cfg_data_set_default(bcmolt_epon_onu_1g_us_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_CFG_ID_ALL_LINKS)) != 0)
+    {
+        this->all_links.len = 0;
+        this->all_links.val = NULL;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_1g_us_cfg_data_pack(const bcmolt_epon_onu_1g_us_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_CFG_ID_ALL_LINKS)) != 0)
+    {
+        if (!bcmolt_macaddress_list_u32_pack(&this->all_links, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_onu_1g_us_cfg_data_get_packed_length(const bcmolt_epon_onu_1g_us_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_CFG_ID_ALL_LINKS)) != 0)
+    {
+        count += bcmolt_macaddress_list_u32_get_packed_length(&this->all_links);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_1g_us_cfg_data_unpack(bcmolt_epon_onu_1g_us_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_CFG_ID_ALL_LINKS)) != 0)
+    {
+        if (!bcmolt_macaddress_list_u32_unpack(&this->all_links, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_1g_us_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_CFG_ID_ALL_LINKS)) != 0)
+    {
+        if (!bcmolt_macaddress_list_u32_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_1g_us_cfg_data_bounds_check(const bcmolt_epon_onu_1g_us_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_onu_1g_us_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_CFG_ID_ALL_LINKS)) != 0)
+    {
+        if (!bcmolt_macaddress_list_u32_bounds_check(&this->all_links))
+        {
+            *failed_prop = BCMOLT_EPON_ONU_1G_US_CFG_ID_ALL_LINKS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_onu_1g_us_stat_data_set_default(bcmolt_epon_onu_1g_us_stat_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_GOOD_FRAMES)) != 0)
+    {
+        this->good_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_GOOD_BYTES)) != 0)
+    {
+        this->good_bytes = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_OVERSZ_FRAMES)) != 0)
+    {
+        this->oversz_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_NON_FEC_GOOD_FRAMES)) != 0)
+    {
+        this->non_fec_good_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_NON_FEC_GOOD_BYTES)) != 0)
+    {
+        this->non_fec_good_bytes = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_GOOD_FRAMES)) != 0)
+    {
+        this->fec_good_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_GOOD_BYTES)) != 0)
+    {
+        this->fec_good_bytes = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_FRAMES_EXC_ERRS)) != 0)
+    {
+        this->fec_frames_exc_errs = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_BLKS_NO_ERRS)) != 0)
+    {
+        this->fec_blks_no_errs = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_BLKS_CORR_ERRS)) != 0)
+    {
+        this->fec_blks_corr_errs = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_BLKS_UNCORR_ERRS)) != 0)
+    {
+        this->fec_blks_uncorr_errs = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_CORR_BYTES)) != 0)
+    {
+        this->fec_corr_bytes = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_CORR_ZEROES)) != 0)
+    {
+        this->fec_corr_zeroes = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_CORR_ONES)) != 0)
+    {
+        this->fec_corr_ones = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_UNDERSZ_FRAMES)) != 0)
+    {
+        this->undersz_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_ERRORSZ_FRAMES)) != 0)
+    {
+        this->errorsz_frames = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_1g_us_stat_data_pack(const bcmolt_epon_onu_1g_us_stat_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_GOOD_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->good_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_GOOD_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->good_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_OVERSZ_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->oversz_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_NON_FEC_GOOD_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->non_fec_good_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_NON_FEC_GOOD_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->non_fec_good_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_GOOD_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->fec_good_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_GOOD_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->fec_good_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_FRAMES_EXC_ERRS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->fec_frames_exc_errs))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_BLKS_NO_ERRS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->fec_blks_no_errs))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_BLKS_CORR_ERRS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->fec_blks_corr_errs))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_BLKS_UNCORR_ERRS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->fec_blks_uncorr_errs))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_CORR_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->fec_corr_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_CORR_ZEROES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->fec_corr_zeroes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_CORR_ONES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->fec_corr_ones))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_UNDERSZ_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->undersz_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_ERRORSZ_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->errorsz_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_onu_1g_us_stat_data_get_packed_length(const bcmolt_epon_onu_1g_us_stat_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_GOOD_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_GOOD_BYTES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_OVERSZ_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_NON_FEC_GOOD_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_NON_FEC_GOOD_BYTES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_GOOD_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_GOOD_BYTES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_FRAMES_EXC_ERRS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_BLKS_NO_ERRS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_BLKS_CORR_ERRS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_BLKS_UNCORR_ERRS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_CORR_BYTES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_CORR_ZEROES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_CORR_ONES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_UNDERSZ_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_ERRORSZ_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_1g_us_stat_data_unpack(bcmolt_epon_onu_1g_us_stat_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_GOOD_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->good_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_GOOD_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->good_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_OVERSZ_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->oversz_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_NON_FEC_GOOD_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->non_fec_good_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_NON_FEC_GOOD_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->non_fec_good_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_GOOD_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->fec_good_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_GOOD_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->fec_good_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_FRAMES_EXC_ERRS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->fec_frames_exc_errs))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_BLKS_NO_ERRS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->fec_blks_no_errs))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_BLKS_CORR_ERRS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->fec_blks_corr_errs))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_BLKS_UNCORR_ERRS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->fec_blks_uncorr_errs))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_CORR_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->fec_corr_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_CORR_ZEROES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->fec_corr_zeroes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_CORR_ONES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->fec_corr_ones))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_UNDERSZ_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->undersz_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_ERRORSZ_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->errorsz_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_1g_us_stat_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_GOOD_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_GOOD_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_OVERSZ_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_NON_FEC_GOOD_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_NON_FEC_GOOD_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_GOOD_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_GOOD_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_FRAMES_EXC_ERRS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_BLKS_NO_ERRS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_BLKS_CORR_ERRS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_BLKS_UNCORR_ERRS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_CORR_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_CORR_ZEROES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_CORR_ONES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_UNDERSZ_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ID_ERRORSZ_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_1g_us_stat_data_bounds_check(const bcmolt_epon_onu_1g_us_stat_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_onu_1g_us_stat_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_onu_1g_us_stat_cfg_data_set_default(bcmolt_epon_onu_1g_us_stat_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_CFG_ID_CFG)) != 0)
+    {
+        this->cfg.trigger.type = BCMOLT_STAT_CONDITION_TYPE_NONE;
+        this->cfg.soak.active_soak_time = 0;
+        this->cfg.soak.clear_soak_time = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_1g_us_stat_cfg_data_pack(const bcmolt_epon_onu_1g_us_stat_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_pack(&this->cfg, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_onu_1g_us_stat_cfg_data_get_packed_length(const bcmolt_epon_onu_1g_us_stat_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_CFG_ID_CFG)) != 0)
+    {
+        count += bcmolt_stat_alarm_config_get_packed_length(&this->cfg);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_1g_us_stat_cfg_data_unpack(bcmolt_epon_onu_1g_us_stat_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_unpack(&this->cfg, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_1g_us_stat_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_1g_us_stat_cfg_data_bounds_check(const bcmolt_epon_onu_1g_us_stat_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_onu_1g_us_stat_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_bounds_check(&this->cfg))
+        {
+            *failed_prop = BCMOLT_EPON_ONU_1G_US_STAT_CFG_ID_CFG;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_onu_1g_us_stat_alarm_cleared_data_set_default(bcmolt_epon_onu_1g_us_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        this->stat = BCMOLT_EPON_ONU_1G_US_STAT_ID_GOOD_FRAMES;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_1g_us_stat_alarm_cleared_data_pack(const bcmolt_epon_onu_1g_us_stat_alarm_cleared_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_epon_onu_1g_us_stat_id_pack(this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_onu_1g_us_stat_alarm_cleared_data_get_packed_length(const bcmolt_epon_onu_1g_us_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_1g_us_stat_alarm_cleared_data_unpack(bcmolt_epon_onu_1g_us_stat_alarm_cleared_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_epon_onu_1g_us_stat_id_unpack(&this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_1g_us_stat_alarm_cleared_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_1g_us_stat_alarm_cleared_data_bounds_check(const bcmolt_epon_onu_1g_us_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_onu_1g_us_stat_alarm_cleared_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        switch (this->stat)
+        {
+            case BCMOLT_EPON_ONU_1G_US_STAT_ID_GOOD_FRAMES:
+                break;
+            case BCMOLT_EPON_ONU_1G_US_STAT_ID_GOOD_BYTES:
+                break;
+            case BCMOLT_EPON_ONU_1G_US_STAT_ID_OVERSZ_FRAMES:
+                break;
+            case BCMOLT_EPON_ONU_1G_US_STAT_ID_NON_FEC_GOOD_FRAMES:
+                break;
+            case BCMOLT_EPON_ONU_1G_US_STAT_ID_NON_FEC_GOOD_BYTES:
+                break;
+            case BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_GOOD_FRAMES:
+                break;
+            case BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_GOOD_BYTES:
+                break;
+            case BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_FRAMES_EXC_ERRS:
+                break;
+            case BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_BLKS_NO_ERRS:
+                break;
+            case BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_BLKS_CORR_ERRS:
+                break;
+            case BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_BLKS_UNCORR_ERRS:
+                break;
+            case BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_CORR_BYTES:
+                break;
+            case BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_CORR_ZEROES:
+                break;
+            case BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_CORR_ONES:
+                break;
+            case BCMOLT_EPON_ONU_1G_US_STAT_ID_UNDERSZ_FRAMES:
+                break;
+            case BCMOLT_EPON_ONU_1G_US_STAT_ID_ERRORSZ_FRAMES:
+                break;
+            default:
+                *failed_prop = BCMOLT_EPON_ONU_1G_US_STAT_ALARM_CLEARED_ID_STAT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_onu_1g_us_stat_alarm_raised_data_set_default(bcmolt_epon_onu_1g_us_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        this->stat = BCMOLT_EPON_ONU_1G_US_STAT_ID_GOOD_FRAMES;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_1g_us_stat_alarm_raised_data_pack(const bcmolt_epon_onu_1g_us_stat_alarm_raised_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_epon_onu_1g_us_stat_id_pack(this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_onu_1g_us_stat_alarm_raised_data_get_packed_length(const bcmolt_epon_onu_1g_us_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_1g_us_stat_alarm_raised_data_unpack(bcmolt_epon_onu_1g_us_stat_alarm_raised_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_epon_onu_1g_us_stat_id_unpack(&this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_1g_us_stat_alarm_raised_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_1g_us_stat_alarm_raised_data_bounds_check(const bcmolt_epon_onu_1g_us_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_onu_1g_us_stat_alarm_raised_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        switch (this->stat)
+        {
+            case BCMOLT_EPON_ONU_1G_US_STAT_ID_GOOD_FRAMES:
+                break;
+            case BCMOLT_EPON_ONU_1G_US_STAT_ID_GOOD_BYTES:
+                break;
+            case BCMOLT_EPON_ONU_1G_US_STAT_ID_OVERSZ_FRAMES:
+                break;
+            case BCMOLT_EPON_ONU_1G_US_STAT_ID_NON_FEC_GOOD_FRAMES:
+                break;
+            case BCMOLT_EPON_ONU_1G_US_STAT_ID_NON_FEC_GOOD_BYTES:
+                break;
+            case BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_GOOD_FRAMES:
+                break;
+            case BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_GOOD_BYTES:
+                break;
+            case BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_FRAMES_EXC_ERRS:
+                break;
+            case BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_BLKS_NO_ERRS:
+                break;
+            case BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_BLKS_CORR_ERRS:
+                break;
+            case BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_BLKS_UNCORR_ERRS:
+                break;
+            case BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_CORR_BYTES:
+                break;
+            case BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_CORR_ZEROES:
+                break;
+            case BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_CORR_ONES:
+                break;
+            case BCMOLT_EPON_ONU_1G_US_STAT_ID_UNDERSZ_FRAMES:
+                break;
+            case BCMOLT_EPON_ONU_1G_US_STAT_ID_ERRORSZ_FRAMES:
+                break;
+            default:
+                *failed_prop = BCMOLT_EPON_ONU_1G_US_STAT_ALARM_RAISED_ID_STAT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_onu_1g_us_auto_cfg_data_set_default(bcmolt_epon_onu_1g_us_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        this->stat_alarm_cleared = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        this->stat_alarm_raised = BCMOS_FALSE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_1g_us_auto_cfg_data_pack(const bcmolt_epon_onu_1g_us_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->stat_alarm_cleared))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->stat_alarm_raised))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_onu_1g_us_auto_cfg_data_get_packed_length(const bcmolt_epon_onu_1g_us_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_1g_us_auto_cfg_data_unpack(bcmolt_epon_onu_1g_us_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->stat_alarm_cleared))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->stat_alarm_raised))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_1g_us_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_ONU_1G_US_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_onu_1g_us_auto_cfg_data_bounds_check(const bcmolt_epon_onu_1g_us_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_onu_1g_us_auto_cfg_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_path_10g_ds_key_set_default(bcmolt_epon_path_10g_ds_key *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_KEY_ID_EPON_NI)) != 0)
+    {
+        this->epon_ni = (bcmolt_epon_ni) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_ds_key_pack(const bcmolt_epon_path_10g_ds_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_KEY_ID_EPON_NI)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->epon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_path_10g_ds_key_get_packed_length(const bcmolt_epon_path_10g_ds_key *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_KEY_ID_EPON_NI)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_ds_key_unpack(bcmolt_epon_path_10g_ds_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_KEY_ID_EPON_NI)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->epon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_ds_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_KEY_ID_EPON_NI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_ds_key_bounds_check(const bcmolt_epon_path_10g_ds_key *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_10g_ds_key_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_path_10g_ds_cfg_data_set_default(bcmolt_epon_path_10g_ds_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_CFG_ID_FEC_STATE)) != 0)
+    {
+        this->fec_state = BCMOLT_EPON_FEC_EN_STATE_ENABLED;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_CFG_ID_PRBS_GENERATOR)) != 0)
+    {
+        this->prbs_generator.polynom = BCMOLT_PRBS_POLYNOMIAL_PRBS_7;
+        this->prbs_generator.error_insert = BCMOS_FALSE;
+        this->prbs_generator.invert = BCMOS_FALSE;
+        this->prbs_generator.control = BCMOLT_CONTROL_STATE_DISABLE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_ds_cfg_data_pack(const bcmolt_epon_path_10g_ds_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_CFG_ID_FEC_STATE)) != 0)
+    {
+        if (!bcmolt_epon_fec_en_state_pack(this->fec_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_CFG_ID_PRBS_GENERATOR)) != 0)
+    {
+        if (!bcmolt_prbs_generator_config_pack(&this->prbs_generator, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_path_10g_ds_cfg_data_get_packed_length(const bcmolt_epon_path_10g_ds_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_CFG_ID_FEC_STATE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_CFG_ID_PRBS_GENERATOR)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_ds_cfg_data_unpack(bcmolt_epon_path_10g_ds_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_CFG_ID_FEC_STATE)) != 0)
+    {
+        if (!bcmolt_epon_fec_en_state_unpack(&this->fec_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_CFG_ID_PRBS_GENERATOR)) != 0)
+    {
+        if (!bcmolt_prbs_generator_config_unpack(&this->prbs_generator, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_ds_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_CFG_ID_FEC_STATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_CFG_ID_PRBS_GENERATOR)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_ds_cfg_data_bounds_check(const bcmolt_epon_path_10g_ds_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_10g_ds_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_CFG_ID_FEC_STATE)) != 0)
+    {
+        switch (this->fec_state)
+        {
+            case BCMOLT_EPON_FEC_EN_STATE_DISABLED:
+                break;
+            case BCMOLT_EPON_FEC_EN_STATE_ENABLED:
+                break;
+            default:
+                *failed_prop = BCMOLT_EPON_PATH_10G_DS_CFG_ID_FEC_STATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_CFG_ID_PRBS_GENERATOR)) != 0)
+    {
+        if (!bcmolt_prbs_generator_config_bounds_check(&this->prbs_generator))
+        {
+            *failed_prop = BCMOLT_EPON_PATH_10G_DS_CFG_ID_PRBS_GENERATOR;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_path_10g_ds_stat_data_set_default(bcmolt_epon_path_10g_ds_stat_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_BYTES)) != 0)
+    {
+        this->bytes = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES)) != 0)
+    {
+        this->frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_64)) != 0)
+    {
+        this->frames_64 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_65_127)) != 0)
+    {
+        this->frames_65_127 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_128_255)) != 0)
+    {
+        this->frames_128_255 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_256_511)) != 0)
+    {
+        this->frames_256_511 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_512_1023)) != 0)
+    {
+        this->frames_512_1023 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_1024_1518)) != 0)
+    {
+        this->frames_1024_1518 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_1519_2047)) != 0)
+    {
+        this->frames_1519_2047 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_2048_4095)) != 0)
+    {
+        this->frames_2048_4095 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_4096_9216)) != 0)
+    {
+        this->frames_4096_9216 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_9217_16383)) != 0)
+    {
+        this->frames_9217_16383 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_BROADCAST_FRAMES)) != 0)
+    {
+        this->broadcast_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_DATA_BYTES)) != 0)
+    {
+        this->data_bytes = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_MULTICAST_FRAMES)) != 0)
+    {
+        this->multicast_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_UNICAST_FRAMES)) != 0)
+    {
+        this->unicast_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_OAM_BYTES)) != 0)
+    {
+        this->oam_bytes = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_OAM_FRAMES)) != 0)
+    {
+        this->oam_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_GATE_FRAMES)) != 0)
+    {
+        this->gate_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_MPCP_FRAMES)) != 0)
+    {
+        this->mpcp_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_ABORT_FRAMES)) != 0)
+    {
+        this->abort_frames = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_ds_stat_data_pack(const bcmolt_epon_path_10g_ds_stat_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_64)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_64))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_65_127)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_65_127))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_128_255)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_128_255))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_256_511)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_256_511))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_512_1023)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_512_1023))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_1024_1518)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_1024_1518))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_1519_2047)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_1519_2047))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_2048_4095)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_2048_4095))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_4096_9216)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_4096_9216))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_9217_16383)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_9217_16383))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_BROADCAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->broadcast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_DATA_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->data_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_MULTICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->multicast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_UNICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->unicast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_OAM_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->oam_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_OAM_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->oam_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_GATE_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->gate_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_MPCP_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->mpcp_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_ABORT_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->abort_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_path_10g_ds_stat_data_get_packed_length(const bcmolt_epon_path_10g_ds_stat_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_BYTES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_64)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_65_127)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_128_255)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_256_511)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_512_1023)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_1024_1518)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_1519_2047)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_2048_4095)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_4096_9216)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_9217_16383)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_BROADCAST_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_DATA_BYTES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_MULTICAST_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_UNICAST_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_OAM_BYTES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_OAM_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_GATE_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_MPCP_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_ABORT_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_ds_stat_data_unpack(bcmolt_epon_path_10g_ds_stat_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_64)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_64))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_65_127)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_65_127))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_128_255)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_128_255))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_256_511)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_256_511))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_512_1023)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_512_1023))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_1024_1518)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_1024_1518))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_1519_2047)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_1519_2047))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_2048_4095)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_2048_4095))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_4096_9216)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_4096_9216))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_9217_16383)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_9217_16383))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_BROADCAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->broadcast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_DATA_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->data_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_MULTICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->multicast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_UNICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->unicast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_OAM_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->oam_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_OAM_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->oam_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_GATE_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->gate_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_MPCP_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->mpcp_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_ABORT_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->abort_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_ds_stat_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_64)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_65_127)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_128_255)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_256_511)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_512_1023)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_1024_1518)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_1519_2047)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_2048_4095)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_4096_9216)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_9217_16383)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_BROADCAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_DATA_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_MULTICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_UNICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_OAM_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_OAM_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_GATE_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_MPCP_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ID_ABORT_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_ds_stat_data_bounds_check(const bcmolt_epon_path_10g_ds_stat_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_10g_ds_stat_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_path_10g_ds_stat_cfg_data_set_default(bcmolt_epon_path_10g_ds_stat_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_CFG_ID_CFG)) != 0)
+    {
+        this->cfg.trigger.type = BCMOLT_STAT_CONDITION_TYPE_NONE;
+        this->cfg.soak.active_soak_time = 0;
+        this->cfg.soak.clear_soak_time = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_ds_stat_cfg_data_pack(const bcmolt_epon_path_10g_ds_stat_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_pack(&this->cfg, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_path_10g_ds_stat_cfg_data_get_packed_length(const bcmolt_epon_path_10g_ds_stat_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_CFG_ID_CFG)) != 0)
+    {
+        count += bcmolt_stat_alarm_config_get_packed_length(&this->cfg);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_ds_stat_cfg_data_unpack(bcmolt_epon_path_10g_ds_stat_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_unpack(&this->cfg, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_ds_stat_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_ds_stat_cfg_data_bounds_check(const bcmolt_epon_path_10g_ds_stat_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_10g_ds_stat_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_bounds_check(&this->cfg))
+        {
+            *failed_prop = BCMOLT_EPON_PATH_10G_DS_STAT_CFG_ID_CFG;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_path_10g_ds_stat_alarm_cleared_data_set_default(bcmolt_epon_path_10g_ds_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        this->stat = BCMOLT_EPON_PATH_10G_DS_STAT_ID_BYTES;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_ds_stat_alarm_cleared_data_pack(const bcmolt_epon_path_10g_ds_stat_alarm_cleared_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_epon_path_10g_ds_stat_id_pack(this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_path_10g_ds_stat_alarm_cleared_data_get_packed_length(const bcmolt_epon_path_10g_ds_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_ds_stat_alarm_cleared_data_unpack(bcmolt_epon_path_10g_ds_stat_alarm_cleared_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_epon_path_10g_ds_stat_id_unpack(&this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_ds_stat_alarm_cleared_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_ds_stat_alarm_cleared_data_bounds_check(const bcmolt_epon_path_10g_ds_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_10g_ds_stat_alarm_cleared_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        switch (this->stat)
+        {
+            case BCMOLT_EPON_PATH_10G_DS_STAT_ID_BYTES:
+                break;
+            case BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_64:
+                break;
+            case BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_65_127:
+                break;
+            case BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_128_255:
+                break;
+            case BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_256_511:
+                break;
+            case BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_512_1023:
+                break;
+            case BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_1024_1518:
+                break;
+            case BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_1519_2047:
+                break;
+            case BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_2048_4095:
+                break;
+            case BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_4096_9216:
+                break;
+            case BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_9217_16383:
+                break;
+            case BCMOLT_EPON_PATH_10G_DS_STAT_ID_BROADCAST_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_10G_DS_STAT_ID_DATA_BYTES:
+                break;
+            case BCMOLT_EPON_PATH_10G_DS_STAT_ID_MULTICAST_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_10G_DS_STAT_ID_UNICAST_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_10G_DS_STAT_ID_OAM_BYTES:
+                break;
+            case BCMOLT_EPON_PATH_10G_DS_STAT_ID_OAM_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_10G_DS_STAT_ID_GATE_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_10G_DS_STAT_ID_MPCP_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_10G_DS_STAT_ID_ABORT_FRAMES:
+                break;
+            default:
+                *failed_prop = BCMOLT_EPON_PATH_10G_DS_STAT_ALARM_CLEARED_ID_STAT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_path_10g_ds_stat_alarm_raised_data_set_default(bcmolt_epon_path_10g_ds_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        this->stat = BCMOLT_EPON_PATH_10G_DS_STAT_ID_BYTES;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_ds_stat_alarm_raised_data_pack(const bcmolt_epon_path_10g_ds_stat_alarm_raised_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_epon_path_10g_ds_stat_id_pack(this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_path_10g_ds_stat_alarm_raised_data_get_packed_length(const bcmolt_epon_path_10g_ds_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_ds_stat_alarm_raised_data_unpack(bcmolt_epon_path_10g_ds_stat_alarm_raised_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_epon_path_10g_ds_stat_id_unpack(&this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_ds_stat_alarm_raised_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_ds_stat_alarm_raised_data_bounds_check(const bcmolt_epon_path_10g_ds_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_10g_ds_stat_alarm_raised_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        switch (this->stat)
+        {
+            case BCMOLT_EPON_PATH_10G_DS_STAT_ID_BYTES:
+                break;
+            case BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_64:
+                break;
+            case BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_65_127:
+                break;
+            case BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_128_255:
+                break;
+            case BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_256_511:
+                break;
+            case BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_512_1023:
+                break;
+            case BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_1024_1518:
+                break;
+            case BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_1519_2047:
+                break;
+            case BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_2048_4095:
+                break;
+            case BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_4096_9216:
+                break;
+            case BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_9217_16383:
+                break;
+            case BCMOLT_EPON_PATH_10G_DS_STAT_ID_BROADCAST_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_10G_DS_STAT_ID_DATA_BYTES:
+                break;
+            case BCMOLT_EPON_PATH_10G_DS_STAT_ID_MULTICAST_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_10G_DS_STAT_ID_UNICAST_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_10G_DS_STAT_ID_OAM_BYTES:
+                break;
+            case BCMOLT_EPON_PATH_10G_DS_STAT_ID_OAM_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_10G_DS_STAT_ID_GATE_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_10G_DS_STAT_ID_MPCP_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_10G_DS_STAT_ID_ABORT_FRAMES:
+                break;
+            default:
+                *failed_prop = BCMOLT_EPON_PATH_10G_DS_STAT_ALARM_RAISED_ID_STAT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_path_10g_ds_auto_cfg_data_set_default(bcmolt_epon_path_10g_ds_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        this->stat_alarm_cleared = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        this->stat_alarm_raised = BCMOS_FALSE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_ds_auto_cfg_data_pack(const bcmolt_epon_path_10g_ds_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->stat_alarm_cleared))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->stat_alarm_raised))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_path_10g_ds_auto_cfg_data_get_packed_length(const bcmolt_epon_path_10g_ds_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_ds_auto_cfg_data_unpack(bcmolt_epon_path_10g_ds_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->stat_alarm_cleared))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->stat_alarm_raised))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_ds_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_DS_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_ds_auto_cfg_data_bounds_check(const bcmolt_epon_path_10g_ds_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_10g_ds_auto_cfg_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_path_10g_us_key_set_default(bcmolt_epon_path_10g_us_key *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_KEY_ID_EPON_NI)) != 0)
+    {
+        this->epon_ni = (bcmolt_epon_ni) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_us_key_pack(const bcmolt_epon_path_10g_us_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_KEY_ID_EPON_NI)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->epon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_path_10g_us_key_get_packed_length(const bcmolt_epon_path_10g_us_key *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_KEY_ID_EPON_NI)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_us_key_unpack(bcmolt_epon_path_10g_us_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_KEY_ID_EPON_NI)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->epon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_us_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_KEY_ID_EPON_NI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_us_key_bounds_check(const bcmolt_epon_path_10g_us_key *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_10g_us_key_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_path_10g_us_cfg_data_set_default(bcmolt_epon_path_10g_us_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_CFG_ID_FEC_STATE)) != 0)
+    {
+        this->fec_state = BCMOLT_EPON_FEC_EN_STATE_ENABLED;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_CFG_ID_SYNC_TIME_TQ)) != 0)
+    {
+        this->sync_time_tq = (bcmolt_time_quanta) 32;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_CFG_ID_PRBS_CHECKER)) != 0)
+    {
+        this->prbs_checker.polynom = BCMOLT_PRBS_POLYNOMIAL_PRBS_7;
+        this->prbs_checker.mode = BCMOLT_PRBS_CHECKER_MODE_SELF_SYNC;
+        this->prbs_checker.data_invert = BCMOS_FALSE;
+        this->prbs_checker.control = BCMOLT_CONTROL_STATE_DISABLE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_CFG_ID_PRBS_STATUS)) != 0)
+    {
+        this->prbs_status.lock_state = BCMOLT_PRBS_LOCK_STATE_UNLOCKED;
+        this->prbs_status.error_counts = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_us_cfg_data_pack(const bcmolt_epon_path_10g_us_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_CFG_ID_FEC_STATE)) != 0)
+    {
+        if (!bcmolt_epon_fec_en_state_pack(this->fec_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_CFG_ID_SYNC_TIME_TQ)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, (uint32_t) this->sync_time_tq))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_CFG_ID_PRBS_CHECKER)) != 0)
+    {
+        if (!bcmolt_prbs_checker_config_pack(&this->prbs_checker, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_CFG_ID_PRBS_STATUS)) != 0)
+    {
+        if (!bcmolt_prbs_status_pack(&this->prbs_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_path_10g_us_cfg_data_get_packed_length(const bcmolt_epon_path_10g_us_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_CFG_ID_FEC_STATE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_CFG_ID_SYNC_TIME_TQ)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_CFG_ID_PRBS_CHECKER)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_CFG_ID_PRBS_STATUS)) != 0)
+    {
+        count += 5;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_us_cfg_data_unpack(bcmolt_epon_path_10g_us_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_CFG_ID_FEC_STATE)) != 0)
+    {
+        if (!bcmolt_epon_fec_en_state_unpack(&this->fec_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_CFG_ID_SYNC_TIME_TQ)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, (uint32_t *) &this->sync_time_tq))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_CFG_ID_PRBS_CHECKER)) != 0)
+    {
+        if (!bcmolt_prbs_checker_config_unpack(&this->prbs_checker, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_CFG_ID_PRBS_STATUS)) != 0)
+    {
+        if (!bcmolt_prbs_status_unpack(&this->prbs_status, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_us_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_CFG_ID_FEC_STATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_CFG_ID_SYNC_TIME_TQ)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_CFG_ID_PRBS_CHECKER)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_CFG_ID_PRBS_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 5))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_us_cfg_data_bounds_check(const bcmolt_epon_path_10g_us_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_10g_us_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_CFG_ID_FEC_STATE)) != 0)
+    {
+        switch (this->fec_state)
+        {
+            case BCMOLT_EPON_FEC_EN_STATE_DISABLED:
+                break;
+            case BCMOLT_EPON_FEC_EN_STATE_ENABLED:
+                break;
+            default:
+                *failed_prop = BCMOLT_EPON_PATH_10G_US_CFG_ID_FEC_STATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_CFG_ID_SYNC_TIME_TQ)) != 0)
+    {
+        if (this->sync_time_tq > (bcmolt_time_quanta) 65535UL)
+        {
+            *failed_prop = BCMOLT_EPON_PATH_10G_US_CFG_ID_SYNC_TIME_TQ;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_CFG_ID_PRBS_CHECKER)) != 0)
+    {
+        if (!bcmolt_prbs_checker_config_bounds_check(&this->prbs_checker))
+        {
+            *failed_prop = BCMOLT_EPON_PATH_10G_US_CFG_ID_PRBS_CHECKER;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_CFG_ID_PRBS_STATUS)) != 0)
+    {
+        if (!bcmolt_prbs_status_bounds_check(&this->prbs_status))
+        {
+            *failed_prop = BCMOLT_EPON_PATH_10G_US_CFG_ID_PRBS_STATUS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_path_10g_us_stat_data_set_default(bcmolt_epon_path_10g_us_stat_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_BYTES)) != 0)
+    {
+        this->bytes = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES)) != 0)
+    {
+        this->frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_64)) != 0)
+    {
+        this->frames_64 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_65_127)) != 0)
+    {
+        this->frames_65_127 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_128_255)) != 0)
+    {
+        this->frames_128_255 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_256_511)) != 0)
+    {
+        this->frames_256_511 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_512_1023)) != 0)
+    {
+        this->frames_512_1023 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_1024_1518)) != 0)
+    {
+        this->frames_1024_1518 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_1519_2047)) != 0)
+    {
+        this->frames_1519_2047 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_2048_4095)) != 0)
+    {
+        this->frames_2048_4095 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_4096_9216)) != 0)
+    {
+        this->frames_4096_9216 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_9217_16383)) != 0)
+    {
+        this->frames_9217_16383 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_BROADCAST_FRAMES)) != 0)
+    {
+        this->broadcast_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_DATA_BYTES)) != 0)
+    {
+        this->data_bytes = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_MULTICAST_FRAMES)) != 0)
+    {
+        this->multicast_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_UNICAST_FRAMES)) != 0)
+    {
+        this->unicast_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_MPCP_FRAMES)) != 0)
+    {
+        this->mpcp_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_OAM_BYTES)) != 0)
+    {
+        this->oam_bytes = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_OAM_FRAMES)) != 0)
+    {
+        this->oam_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_REPORT_FRAMES)) != 0)
+    {
+        this->report_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_ABORT_FRAMES)) != 0)
+    {
+        this->abort_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FCS_ERROR)) != 0)
+    {
+        this->fcs_error = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_CRC_8_ERROR)) != 0)
+    {
+        this->crc_8_error = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_OUT_OF_SLOT)) != 0)
+    {
+        this->out_of_slot = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_OVERSIZE_ERROR)) != 0)
+    {
+        this->oversize_error = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_RUNT_ERROR)) != 0)
+    {
+        this->runt_error = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_us_stat_data_pack(const bcmolt_epon_path_10g_us_stat_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_64)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_64))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_65_127)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_65_127))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_128_255)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_128_255))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_256_511)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_256_511))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_512_1023)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_512_1023))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_1024_1518)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_1024_1518))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_1519_2047)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_1519_2047))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_2048_4095)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_2048_4095))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_4096_9216)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_4096_9216))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_9217_16383)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_9217_16383))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_BROADCAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->broadcast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_DATA_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->data_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_MULTICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->multicast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_UNICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->unicast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_MPCP_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->mpcp_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_OAM_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->oam_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_OAM_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->oam_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_REPORT_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->report_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_ABORT_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->abort_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FCS_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->fcs_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_CRC_8_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->crc_8_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_OUT_OF_SLOT)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->out_of_slot))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_OVERSIZE_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->oversize_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_RUNT_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->runt_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_path_10g_us_stat_data_get_packed_length(const bcmolt_epon_path_10g_us_stat_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_BYTES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_64)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_65_127)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_128_255)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_256_511)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_512_1023)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_1024_1518)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_1519_2047)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_2048_4095)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_4096_9216)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_9217_16383)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_BROADCAST_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_DATA_BYTES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_MULTICAST_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_UNICAST_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_MPCP_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_OAM_BYTES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_OAM_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_REPORT_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_ABORT_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FCS_ERROR)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_CRC_8_ERROR)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_OUT_OF_SLOT)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_OVERSIZE_ERROR)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_RUNT_ERROR)) != 0)
+    {
+        count += 8;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_us_stat_data_unpack(bcmolt_epon_path_10g_us_stat_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_64)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_64))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_65_127)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_65_127))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_128_255)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_128_255))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_256_511)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_256_511))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_512_1023)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_512_1023))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_1024_1518)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_1024_1518))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_1519_2047)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_1519_2047))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_2048_4095)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_2048_4095))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_4096_9216)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_4096_9216))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_9217_16383)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_9217_16383))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_BROADCAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->broadcast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_DATA_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->data_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_MULTICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->multicast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_UNICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->unicast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_MPCP_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->mpcp_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_OAM_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->oam_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_OAM_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->oam_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_REPORT_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->report_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_ABORT_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->abort_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FCS_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->fcs_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_CRC_8_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->crc_8_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_OUT_OF_SLOT)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->out_of_slot))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_OVERSIZE_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->oversize_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_RUNT_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->runt_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_us_stat_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_64)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_65_127)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_128_255)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_256_511)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_512_1023)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_1024_1518)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_1519_2047)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_2048_4095)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_4096_9216)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_9217_16383)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_BROADCAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_DATA_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_MULTICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_UNICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_MPCP_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_OAM_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_OAM_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_REPORT_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_ABORT_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_FCS_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_CRC_8_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_OUT_OF_SLOT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_OVERSIZE_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ID_RUNT_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_us_stat_data_bounds_check(const bcmolt_epon_path_10g_us_stat_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_10g_us_stat_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_path_10g_us_stat_cfg_data_set_default(bcmolt_epon_path_10g_us_stat_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_CFG_ID_CFG)) != 0)
+    {
+        this->cfg.trigger.type = BCMOLT_STAT_CONDITION_TYPE_NONE;
+        this->cfg.soak.active_soak_time = 0;
+        this->cfg.soak.clear_soak_time = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_us_stat_cfg_data_pack(const bcmolt_epon_path_10g_us_stat_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_pack(&this->cfg, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_path_10g_us_stat_cfg_data_get_packed_length(const bcmolt_epon_path_10g_us_stat_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_CFG_ID_CFG)) != 0)
+    {
+        count += bcmolt_stat_alarm_config_get_packed_length(&this->cfg);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_us_stat_cfg_data_unpack(bcmolt_epon_path_10g_us_stat_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_unpack(&this->cfg, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_us_stat_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_us_stat_cfg_data_bounds_check(const bcmolt_epon_path_10g_us_stat_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_10g_us_stat_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_bounds_check(&this->cfg))
+        {
+            *failed_prop = BCMOLT_EPON_PATH_10G_US_STAT_CFG_ID_CFG;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_path_10g_us_stat_alarm_cleared_data_set_default(bcmolt_epon_path_10g_us_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        this->stat = BCMOLT_EPON_PATH_10G_US_STAT_ID_BYTES;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_us_stat_alarm_cleared_data_pack(const bcmolt_epon_path_10g_us_stat_alarm_cleared_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_epon_path_10g_us_stat_id_pack(this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_path_10g_us_stat_alarm_cleared_data_get_packed_length(const bcmolt_epon_path_10g_us_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_us_stat_alarm_cleared_data_unpack(bcmolt_epon_path_10g_us_stat_alarm_cleared_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_epon_path_10g_us_stat_id_unpack(&this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_us_stat_alarm_cleared_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_us_stat_alarm_cleared_data_bounds_check(const bcmolt_epon_path_10g_us_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_10g_us_stat_alarm_cleared_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        switch (this->stat)
+        {
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_BYTES:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_64:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_65_127:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_128_255:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_256_511:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_512_1023:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_1024_1518:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_1519_2047:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_2048_4095:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_4096_9216:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_9217_16383:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_BROADCAST_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_DATA_BYTES:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_MULTICAST_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_UNICAST_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_MPCP_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_OAM_BYTES:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_OAM_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_REPORT_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_ABORT_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_FCS_ERROR:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_CRC_8_ERROR:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_OUT_OF_SLOT:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_OVERSIZE_ERROR:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_RUNT_ERROR:
+                break;
+            default:
+                *failed_prop = BCMOLT_EPON_PATH_10G_US_STAT_ALARM_CLEARED_ID_STAT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_path_10g_us_stat_alarm_raised_data_set_default(bcmolt_epon_path_10g_us_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        this->stat = BCMOLT_EPON_PATH_10G_US_STAT_ID_BYTES;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_us_stat_alarm_raised_data_pack(const bcmolt_epon_path_10g_us_stat_alarm_raised_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_epon_path_10g_us_stat_id_pack(this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_path_10g_us_stat_alarm_raised_data_get_packed_length(const bcmolt_epon_path_10g_us_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_us_stat_alarm_raised_data_unpack(bcmolt_epon_path_10g_us_stat_alarm_raised_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_epon_path_10g_us_stat_id_unpack(&this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_us_stat_alarm_raised_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_us_stat_alarm_raised_data_bounds_check(const bcmolt_epon_path_10g_us_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_10g_us_stat_alarm_raised_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        switch (this->stat)
+        {
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_BYTES:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_64:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_65_127:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_128_255:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_256_511:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_512_1023:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_1024_1518:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_1519_2047:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_2048_4095:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_4096_9216:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_9217_16383:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_BROADCAST_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_DATA_BYTES:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_MULTICAST_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_UNICAST_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_MPCP_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_OAM_BYTES:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_OAM_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_REPORT_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_ABORT_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_FCS_ERROR:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_CRC_8_ERROR:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_OUT_OF_SLOT:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_OVERSIZE_ERROR:
+                break;
+            case BCMOLT_EPON_PATH_10G_US_STAT_ID_RUNT_ERROR:
+                break;
+            default:
+                *failed_prop = BCMOLT_EPON_PATH_10G_US_STAT_ALARM_RAISED_ID_STAT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_path_10g_us_auto_cfg_data_set_default(bcmolt_epon_path_10g_us_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        this->stat_alarm_cleared = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        this->stat_alarm_raised = BCMOS_FALSE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_us_auto_cfg_data_pack(const bcmolt_epon_path_10g_us_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->stat_alarm_cleared))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->stat_alarm_raised))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_path_10g_us_auto_cfg_data_get_packed_length(const bcmolt_epon_path_10g_us_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_us_auto_cfg_data_unpack(bcmolt_epon_path_10g_us_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->stat_alarm_cleared))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->stat_alarm_raised))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_us_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_10G_US_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_10g_us_auto_cfg_data_bounds_check(const bcmolt_epon_path_10g_us_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_10g_us_auto_cfg_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_path_1g_ds_key_set_default(bcmolt_epon_path_1g_ds_key *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_KEY_ID_EPON_NI)) != 0)
+    {
+        this->epon_ni = (bcmolt_epon_ni) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_ds_key_pack(const bcmolt_epon_path_1g_ds_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_KEY_ID_EPON_NI)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->epon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_path_1g_ds_key_get_packed_length(const bcmolt_epon_path_1g_ds_key *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_KEY_ID_EPON_NI)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_ds_key_unpack(bcmolt_epon_path_1g_ds_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_KEY_ID_EPON_NI)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->epon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_ds_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_KEY_ID_EPON_NI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_ds_key_bounds_check(const bcmolt_epon_path_1g_ds_key *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_1g_ds_key_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_path_1g_ds_cfg_data_set_default(bcmolt_epon_path_1g_ds_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_CFG_ID_DEFAULT_FEC_STATE)) != 0)
+    {
+        this->default_fec_state = BCMOLT_EPON_FEC_EN_STATE_DISABLED;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_CFG_ID_RAMAN_MODE)) != 0)
+    {
+        this->raman_mode = BCMOLT_RAMAN_MITIGATION_MODE_DISABLED;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_CFG_ID_TURBO_2G_MODE)) != 0)
+    {
+        this->turbo_2g_mode = BCMOLT_EPON_1G_TURBO_MODE_DISABLED;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_CFG_ID_PRBS_GENERATOR)) != 0)
+    {
+        this->prbs_generator.polynom = BCMOLT_PRBS_POLYNOMIAL_PRBS_7;
+        this->prbs_generator.error_insert = BCMOS_FALSE;
+        this->prbs_generator.invert = BCMOS_FALSE;
+        this->prbs_generator.control = BCMOLT_CONTROL_STATE_DISABLE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_ds_cfg_data_pack(const bcmolt_epon_path_1g_ds_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_CFG_ID_DEFAULT_FEC_STATE)) != 0)
+    {
+        if (!bcmolt_epon_fec_en_state_pack(this->default_fec_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_CFG_ID_RAMAN_MODE)) != 0)
+    {
+        if (!bcmolt_raman_mitigation_mode_pack(this->raman_mode, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_CFG_ID_TURBO_2G_MODE)) != 0)
+    {
+        if (!bcmolt_epon_1g_turbo_mode_pack(this->turbo_2g_mode, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_CFG_ID_PRBS_GENERATOR)) != 0)
+    {
+        if (!bcmolt_prbs_generator_config_pack(&this->prbs_generator, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_path_1g_ds_cfg_data_get_packed_length(const bcmolt_epon_path_1g_ds_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_CFG_ID_DEFAULT_FEC_STATE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_CFG_ID_RAMAN_MODE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_CFG_ID_TURBO_2G_MODE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_CFG_ID_PRBS_GENERATOR)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_ds_cfg_data_unpack(bcmolt_epon_path_1g_ds_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_CFG_ID_DEFAULT_FEC_STATE)) != 0)
+    {
+        if (!bcmolt_epon_fec_en_state_unpack(&this->default_fec_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_CFG_ID_RAMAN_MODE)) != 0)
+    {
+        if (!bcmolt_raman_mitigation_mode_unpack(&this->raman_mode, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_CFG_ID_TURBO_2G_MODE)) != 0)
+    {
+        if (!bcmolt_epon_1g_turbo_mode_unpack(&this->turbo_2g_mode, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_CFG_ID_PRBS_GENERATOR)) != 0)
+    {
+        if (!bcmolt_prbs_generator_config_unpack(&this->prbs_generator, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_ds_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_CFG_ID_DEFAULT_FEC_STATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_CFG_ID_RAMAN_MODE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_CFG_ID_TURBO_2G_MODE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_CFG_ID_PRBS_GENERATOR)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_ds_cfg_data_bounds_check(const bcmolt_epon_path_1g_ds_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_1g_ds_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_CFG_ID_DEFAULT_FEC_STATE)) != 0)
+    {
+        switch (this->default_fec_state)
+        {
+            case BCMOLT_EPON_FEC_EN_STATE_DISABLED:
+                break;
+            case BCMOLT_EPON_FEC_EN_STATE_ENABLED:
+                break;
+            default:
+                *failed_prop = BCMOLT_EPON_PATH_1G_DS_CFG_ID_DEFAULT_FEC_STATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_CFG_ID_RAMAN_MODE)) != 0)
+    {
+        switch (this->raman_mode)
+        {
+            case BCMOLT_RAMAN_MITIGATION_MODE_DISABLED:
+                break;
+            case BCMOLT_RAMAN_MITIGATION_MODE_RANDOM:
+                break;
+            case BCMOLT_RAMAN_MITIGATION_MODE_FIXED:
+                break;
+            default:
+                *failed_prop = BCMOLT_EPON_PATH_1G_DS_CFG_ID_RAMAN_MODE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_CFG_ID_TURBO_2G_MODE)) != 0)
+    {
+        switch (this->turbo_2g_mode)
+        {
+            case BCMOLT_EPON_1G_TURBO_MODE_DISABLED:
+                break;
+            case BCMOLT_EPON_1G_TURBO_MODE_ENABLED:
+                break;
+            default:
+                *failed_prop = BCMOLT_EPON_PATH_1G_DS_CFG_ID_TURBO_2G_MODE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_CFG_ID_PRBS_GENERATOR)) != 0)
+    {
+        if (!bcmolt_prbs_generator_config_bounds_check(&this->prbs_generator))
+        {
+            *failed_prop = BCMOLT_EPON_PATH_1G_DS_CFG_ID_PRBS_GENERATOR;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_path_1g_ds_stat_data_set_default(bcmolt_epon_path_1g_ds_stat_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_BYTES)) != 0)
+    {
+        this->bytes = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES)) != 0)
+    {
+        this->frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_64)) != 0)
+    {
+        this->frames_64 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_65_127)) != 0)
+    {
+        this->frames_65_127 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_128_255)) != 0)
+    {
+        this->frames_128_255 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_256_511)) != 0)
+    {
+        this->frames_256_511 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_512_1023)) != 0)
+    {
+        this->frames_512_1023 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_1024_1518)) != 0)
+    {
+        this->frames_1024_1518 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_1519_2047)) != 0)
+    {
+        this->frames_1519_2047 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_2048_4095)) != 0)
+    {
+        this->frames_2048_4095 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_4096_9216)) != 0)
+    {
+        this->frames_4096_9216 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_9217_16383)) != 0)
+    {
+        this->frames_9217_16383 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_BROADCAST_FRAMES)) != 0)
+    {
+        this->broadcast_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_DATA_BYTES)) != 0)
+    {
+        this->data_bytes = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_MULTICAST_FRAMES)) != 0)
+    {
+        this->multicast_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_UNICAST_FRAMES)) != 0)
+    {
+        this->unicast_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_OAM_BYTES)) != 0)
+    {
+        this->oam_bytes = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_OAM_FRAMES)) != 0)
+    {
+        this->oam_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_GATE_FRAMES)) != 0)
+    {
+        this->gate_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_MPCP_FRAMES)) != 0)
+    {
+        this->mpcp_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_ABORT_FRAMES)) != 0)
+    {
+        this->abort_frames = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_ds_stat_data_pack(const bcmolt_epon_path_1g_ds_stat_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_64)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_64))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_65_127)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_65_127))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_128_255)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_128_255))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_256_511)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_256_511))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_512_1023)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_512_1023))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_1024_1518)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_1024_1518))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_1519_2047)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_1519_2047))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_2048_4095)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_2048_4095))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_4096_9216)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_4096_9216))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_9217_16383)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_9217_16383))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_BROADCAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->broadcast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_DATA_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->data_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_MULTICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->multicast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_UNICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->unicast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_OAM_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->oam_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_OAM_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->oam_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_GATE_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->gate_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_MPCP_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->mpcp_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_ABORT_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->abort_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_path_1g_ds_stat_data_get_packed_length(const bcmolt_epon_path_1g_ds_stat_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_BYTES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_64)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_65_127)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_128_255)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_256_511)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_512_1023)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_1024_1518)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_1519_2047)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_2048_4095)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_4096_9216)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_9217_16383)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_BROADCAST_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_DATA_BYTES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_MULTICAST_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_UNICAST_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_OAM_BYTES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_OAM_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_GATE_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_MPCP_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_ABORT_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_ds_stat_data_unpack(bcmolt_epon_path_1g_ds_stat_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_64)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_64))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_65_127)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_65_127))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_128_255)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_128_255))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_256_511)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_256_511))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_512_1023)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_512_1023))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_1024_1518)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_1024_1518))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_1519_2047)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_1519_2047))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_2048_4095)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_2048_4095))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_4096_9216)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_4096_9216))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_9217_16383)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_9217_16383))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_BROADCAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->broadcast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_DATA_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->data_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_MULTICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->multicast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_UNICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->unicast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_OAM_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->oam_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_OAM_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->oam_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_GATE_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->gate_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_MPCP_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->mpcp_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_ABORT_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->abort_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_ds_stat_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_64)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_65_127)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_128_255)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_256_511)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_512_1023)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_1024_1518)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_1519_2047)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_2048_4095)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_4096_9216)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_9217_16383)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_BROADCAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_DATA_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_MULTICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_UNICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_OAM_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_OAM_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_GATE_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_MPCP_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ID_ABORT_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_ds_stat_data_bounds_check(const bcmolt_epon_path_1g_ds_stat_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_1g_ds_stat_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_path_1g_ds_stat_cfg_data_set_default(bcmolt_epon_path_1g_ds_stat_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_CFG_ID_CFG)) != 0)
+    {
+        this->cfg.trigger.type = BCMOLT_STAT_CONDITION_TYPE_NONE;
+        this->cfg.soak.active_soak_time = 0;
+        this->cfg.soak.clear_soak_time = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_ds_stat_cfg_data_pack(const bcmolt_epon_path_1g_ds_stat_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_pack(&this->cfg, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_path_1g_ds_stat_cfg_data_get_packed_length(const bcmolt_epon_path_1g_ds_stat_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_CFG_ID_CFG)) != 0)
+    {
+        count += bcmolt_stat_alarm_config_get_packed_length(&this->cfg);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_ds_stat_cfg_data_unpack(bcmolt_epon_path_1g_ds_stat_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_unpack(&this->cfg, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_ds_stat_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_ds_stat_cfg_data_bounds_check(const bcmolt_epon_path_1g_ds_stat_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_1g_ds_stat_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_bounds_check(&this->cfg))
+        {
+            *failed_prop = BCMOLT_EPON_PATH_1G_DS_STAT_CFG_ID_CFG;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_path_1g_ds_stat_alarm_cleared_data_set_default(bcmolt_epon_path_1g_ds_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        this->stat = BCMOLT_EPON_PATH_1G_DS_STAT_ID_BYTES;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_ds_stat_alarm_cleared_data_pack(const bcmolt_epon_path_1g_ds_stat_alarm_cleared_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_epon_path_1g_ds_stat_id_pack(this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_path_1g_ds_stat_alarm_cleared_data_get_packed_length(const bcmolt_epon_path_1g_ds_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_ds_stat_alarm_cleared_data_unpack(bcmolt_epon_path_1g_ds_stat_alarm_cleared_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_epon_path_1g_ds_stat_id_unpack(&this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_ds_stat_alarm_cleared_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_ds_stat_alarm_cleared_data_bounds_check(const bcmolt_epon_path_1g_ds_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_1g_ds_stat_alarm_cleared_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        switch (this->stat)
+        {
+            case BCMOLT_EPON_PATH_1G_DS_STAT_ID_BYTES:
+                break;
+            case BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_64:
+                break;
+            case BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_65_127:
+                break;
+            case BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_128_255:
+                break;
+            case BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_256_511:
+                break;
+            case BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_512_1023:
+                break;
+            case BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_1024_1518:
+                break;
+            case BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_1519_2047:
+                break;
+            case BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_2048_4095:
+                break;
+            case BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_4096_9216:
+                break;
+            case BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_9217_16383:
+                break;
+            case BCMOLT_EPON_PATH_1G_DS_STAT_ID_BROADCAST_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_1G_DS_STAT_ID_DATA_BYTES:
+                break;
+            case BCMOLT_EPON_PATH_1G_DS_STAT_ID_MULTICAST_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_1G_DS_STAT_ID_UNICAST_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_1G_DS_STAT_ID_OAM_BYTES:
+                break;
+            case BCMOLT_EPON_PATH_1G_DS_STAT_ID_OAM_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_1G_DS_STAT_ID_GATE_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_1G_DS_STAT_ID_MPCP_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_1G_DS_STAT_ID_ABORT_FRAMES:
+                break;
+            default:
+                *failed_prop = BCMOLT_EPON_PATH_1G_DS_STAT_ALARM_CLEARED_ID_STAT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_path_1g_ds_stat_alarm_raised_data_set_default(bcmolt_epon_path_1g_ds_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        this->stat = BCMOLT_EPON_PATH_1G_DS_STAT_ID_BYTES;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_ds_stat_alarm_raised_data_pack(const bcmolt_epon_path_1g_ds_stat_alarm_raised_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_epon_path_1g_ds_stat_id_pack(this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_path_1g_ds_stat_alarm_raised_data_get_packed_length(const bcmolt_epon_path_1g_ds_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_ds_stat_alarm_raised_data_unpack(bcmolt_epon_path_1g_ds_stat_alarm_raised_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_epon_path_1g_ds_stat_id_unpack(&this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_ds_stat_alarm_raised_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_ds_stat_alarm_raised_data_bounds_check(const bcmolt_epon_path_1g_ds_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_1g_ds_stat_alarm_raised_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        switch (this->stat)
+        {
+            case BCMOLT_EPON_PATH_1G_DS_STAT_ID_BYTES:
+                break;
+            case BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_64:
+                break;
+            case BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_65_127:
+                break;
+            case BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_128_255:
+                break;
+            case BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_256_511:
+                break;
+            case BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_512_1023:
+                break;
+            case BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_1024_1518:
+                break;
+            case BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_1519_2047:
+                break;
+            case BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_2048_4095:
+                break;
+            case BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_4096_9216:
+                break;
+            case BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_9217_16383:
+                break;
+            case BCMOLT_EPON_PATH_1G_DS_STAT_ID_BROADCAST_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_1G_DS_STAT_ID_DATA_BYTES:
+                break;
+            case BCMOLT_EPON_PATH_1G_DS_STAT_ID_MULTICAST_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_1G_DS_STAT_ID_UNICAST_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_1G_DS_STAT_ID_OAM_BYTES:
+                break;
+            case BCMOLT_EPON_PATH_1G_DS_STAT_ID_OAM_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_1G_DS_STAT_ID_GATE_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_1G_DS_STAT_ID_MPCP_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_1G_DS_STAT_ID_ABORT_FRAMES:
+                break;
+            default:
+                *failed_prop = BCMOLT_EPON_PATH_1G_DS_STAT_ALARM_RAISED_ID_STAT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_path_1g_ds_auto_cfg_data_set_default(bcmolt_epon_path_1g_ds_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        this->stat_alarm_cleared = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        this->stat_alarm_raised = BCMOS_FALSE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_ds_auto_cfg_data_pack(const bcmolt_epon_path_1g_ds_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->stat_alarm_cleared))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->stat_alarm_raised))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_path_1g_ds_auto_cfg_data_get_packed_length(const bcmolt_epon_path_1g_ds_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_ds_auto_cfg_data_unpack(bcmolt_epon_path_1g_ds_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->stat_alarm_cleared))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->stat_alarm_raised))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_ds_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_DS_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_ds_auto_cfg_data_bounds_check(const bcmolt_epon_path_1g_ds_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_1g_ds_auto_cfg_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_path_1g_us_key_set_default(bcmolt_epon_path_1g_us_key *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_KEY_ID_EPON_NI)) != 0)
+    {
+        this->epon_ni = (bcmolt_epon_ni) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_us_key_pack(const bcmolt_epon_path_1g_us_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_KEY_ID_EPON_NI)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->epon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_path_1g_us_key_get_packed_length(const bcmolt_epon_path_1g_us_key *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_KEY_ID_EPON_NI)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_us_key_unpack(bcmolt_epon_path_1g_us_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_KEY_ID_EPON_NI)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->epon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_us_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_KEY_ID_EPON_NI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_us_key_bounds_check(const bcmolt_epon_path_1g_us_key *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_1g_us_key_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_path_1g_us_cfg_data_set_default(bcmolt_epon_path_1g_us_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_CFG_ID_DEFAULT_FEC_STATE)) != 0)
+    {
+        this->default_fec_state = BCMOLT_EPON_FEC_EN_STATE_DISABLED;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_CFG_ID_SYNC_TIME_TQ)) != 0)
+    {
+        this->sync_time_tq = (bcmolt_time_quanta) 32;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_CFG_ID_PRBS_CHECKER)) != 0)
+    {
+        this->prbs_checker.polynom = BCMOLT_PRBS_POLYNOMIAL_PRBS_7;
+        this->prbs_checker.mode = BCMOLT_PRBS_CHECKER_MODE_SELF_SYNC;
+        this->prbs_checker.data_invert = BCMOS_FALSE;
+        this->prbs_checker.control = BCMOLT_CONTROL_STATE_DISABLE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_CFG_ID_PRBS_STATUS)) != 0)
+    {
+        this->prbs_status.lock_state = BCMOLT_PRBS_LOCK_STATE_UNLOCKED;
+        this->prbs_status.error_counts = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_us_cfg_data_pack(const bcmolt_epon_path_1g_us_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_CFG_ID_DEFAULT_FEC_STATE)) != 0)
+    {
+        if (!bcmolt_epon_fec_en_state_pack(this->default_fec_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_CFG_ID_SYNC_TIME_TQ)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, (uint32_t) this->sync_time_tq))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_CFG_ID_PRBS_CHECKER)) != 0)
+    {
+        if (!bcmolt_prbs_checker_config_pack(&this->prbs_checker, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_CFG_ID_PRBS_STATUS)) != 0)
+    {
+        if (!bcmolt_prbs_status_pack(&this->prbs_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_path_1g_us_cfg_data_get_packed_length(const bcmolt_epon_path_1g_us_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_CFG_ID_DEFAULT_FEC_STATE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_CFG_ID_SYNC_TIME_TQ)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_CFG_ID_PRBS_CHECKER)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_CFG_ID_PRBS_STATUS)) != 0)
+    {
+        count += 5;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_us_cfg_data_unpack(bcmolt_epon_path_1g_us_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_CFG_ID_DEFAULT_FEC_STATE)) != 0)
+    {
+        if (!bcmolt_epon_fec_en_state_unpack(&this->default_fec_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_CFG_ID_SYNC_TIME_TQ)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, (uint32_t *) &this->sync_time_tq))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_CFG_ID_PRBS_CHECKER)) != 0)
+    {
+        if (!bcmolt_prbs_checker_config_unpack(&this->prbs_checker, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_CFG_ID_PRBS_STATUS)) != 0)
+    {
+        if (!bcmolt_prbs_status_unpack(&this->prbs_status, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_us_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_CFG_ID_DEFAULT_FEC_STATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_CFG_ID_SYNC_TIME_TQ)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_CFG_ID_PRBS_CHECKER)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_CFG_ID_PRBS_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 5))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_us_cfg_data_bounds_check(const bcmolt_epon_path_1g_us_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_1g_us_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_CFG_ID_DEFAULT_FEC_STATE)) != 0)
+    {
+        switch (this->default_fec_state)
+        {
+            case BCMOLT_EPON_FEC_EN_STATE_DISABLED:
+                break;
+            case BCMOLT_EPON_FEC_EN_STATE_ENABLED:
+                break;
+            default:
+                *failed_prop = BCMOLT_EPON_PATH_1G_US_CFG_ID_DEFAULT_FEC_STATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_CFG_ID_SYNC_TIME_TQ)) != 0)
+    {
+        if (this->sync_time_tq > (bcmolt_time_quanta) 65535UL)
+        {
+            *failed_prop = BCMOLT_EPON_PATH_1G_US_CFG_ID_SYNC_TIME_TQ;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_CFG_ID_PRBS_CHECKER)) != 0)
+    {
+        if (!bcmolt_prbs_checker_config_bounds_check(&this->prbs_checker))
+        {
+            *failed_prop = BCMOLT_EPON_PATH_1G_US_CFG_ID_PRBS_CHECKER;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_CFG_ID_PRBS_STATUS)) != 0)
+    {
+        if (!bcmolt_prbs_status_bounds_check(&this->prbs_status))
+        {
+            *failed_prop = BCMOLT_EPON_PATH_1G_US_CFG_ID_PRBS_STATUS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_path_1g_us_stat_data_set_default(bcmolt_epon_path_1g_us_stat_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_BYTES)) != 0)
+    {
+        this->bytes = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES)) != 0)
+    {
+        this->frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_64)) != 0)
+    {
+        this->frames_64 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_65_127)) != 0)
+    {
+        this->frames_65_127 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_128_255)) != 0)
+    {
+        this->frames_128_255 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_256_511)) != 0)
+    {
+        this->frames_256_511 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_512_1023)) != 0)
+    {
+        this->frames_512_1023 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_1024_1518)) != 0)
+    {
+        this->frames_1024_1518 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_1519_2047)) != 0)
+    {
+        this->frames_1519_2047 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_2048_4095)) != 0)
+    {
+        this->frames_2048_4095 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_4096_9216)) != 0)
+    {
+        this->frames_4096_9216 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_9217_16383)) != 0)
+    {
+        this->frames_9217_16383 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_BROADCAST_FRAMES)) != 0)
+    {
+        this->broadcast_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_DATA_BYTES)) != 0)
+    {
+        this->data_bytes = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_MULTICAST_FRAMES)) != 0)
+    {
+        this->multicast_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_UNICAST_FRAMES)) != 0)
+    {
+        this->unicast_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_MPCP_FRAMES)) != 0)
+    {
+        this->mpcp_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_OAM_BYTES)) != 0)
+    {
+        this->oam_bytes = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_OAM_FRAMES)) != 0)
+    {
+        this->oam_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_REPORT_FRAMES)) != 0)
+    {
+        this->report_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_ABORT_FRAMES)) != 0)
+    {
+        this->abort_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FCS_ERROR)) != 0)
+    {
+        this->fcs_error = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_CRC_8_ERROR)) != 0)
+    {
+        this->crc_8_error = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_OUT_OF_SLOT)) != 0)
+    {
+        this->out_of_slot = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_OVERSIZE_ERROR)) != 0)
+    {
+        this->oversize_error = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_RUNT_ERROR)) != 0)
+    {
+        this->runt_error = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_us_stat_data_pack(const bcmolt_epon_path_1g_us_stat_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_64)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_64))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_65_127)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_65_127))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_128_255)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_128_255))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_256_511)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_256_511))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_512_1023)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_512_1023))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_1024_1518)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_1024_1518))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_1519_2047)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_1519_2047))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_2048_4095)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_2048_4095))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_4096_9216)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_4096_9216))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_9217_16383)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->frames_9217_16383))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_BROADCAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->broadcast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_DATA_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->data_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_MULTICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->multicast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_UNICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->unicast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_MPCP_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->mpcp_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_OAM_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->oam_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_OAM_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->oam_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_REPORT_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->report_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_ABORT_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->abort_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FCS_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->fcs_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_CRC_8_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->crc_8_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_OUT_OF_SLOT)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->out_of_slot))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_OVERSIZE_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->oversize_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_RUNT_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->runt_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_path_1g_us_stat_data_get_packed_length(const bcmolt_epon_path_1g_us_stat_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_BYTES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_64)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_65_127)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_128_255)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_256_511)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_512_1023)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_1024_1518)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_1519_2047)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_2048_4095)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_4096_9216)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_9217_16383)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_BROADCAST_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_DATA_BYTES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_MULTICAST_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_UNICAST_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_MPCP_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_OAM_BYTES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_OAM_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_REPORT_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_ABORT_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FCS_ERROR)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_CRC_8_ERROR)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_OUT_OF_SLOT)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_OVERSIZE_ERROR)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_RUNT_ERROR)) != 0)
+    {
+        count += 8;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_us_stat_data_unpack(bcmolt_epon_path_1g_us_stat_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_64)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_64))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_65_127)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_65_127))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_128_255)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_128_255))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_256_511)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_256_511))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_512_1023)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_512_1023))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_1024_1518)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_1024_1518))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_1519_2047)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_1519_2047))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_2048_4095)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_2048_4095))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_4096_9216)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_4096_9216))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_9217_16383)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->frames_9217_16383))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_BROADCAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->broadcast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_DATA_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->data_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_MULTICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->multicast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_UNICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->unicast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_MPCP_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->mpcp_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_OAM_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->oam_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_OAM_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->oam_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_REPORT_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->report_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_ABORT_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->abort_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FCS_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->fcs_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_CRC_8_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->crc_8_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_OUT_OF_SLOT)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->out_of_slot))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_OVERSIZE_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->oversize_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_RUNT_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->runt_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_us_stat_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_64)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_65_127)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_128_255)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_256_511)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_512_1023)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_1024_1518)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_1519_2047)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_2048_4095)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_4096_9216)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_9217_16383)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_BROADCAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_DATA_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_MULTICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_UNICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_MPCP_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_OAM_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_OAM_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_REPORT_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_ABORT_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_FCS_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_CRC_8_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_OUT_OF_SLOT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_OVERSIZE_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ID_RUNT_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_us_stat_data_bounds_check(const bcmolt_epon_path_1g_us_stat_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_1g_us_stat_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_path_1g_us_stat_cfg_data_set_default(bcmolt_epon_path_1g_us_stat_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_CFG_ID_CFG)) != 0)
+    {
+        this->cfg.trigger.type = BCMOLT_STAT_CONDITION_TYPE_NONE;
+        this->cfg.soak.active_soak_time = 0;
+        this->cfg.soak.clear_soak_time = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_us_stat_cfg_data_pack(const bcmolt_epon_path_1g_us_stat_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_pack(&this->cfg, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_path_1g_us_stat_cfg_data_get_packed_length(const bcmolt_epon_path_1g_us_stat_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_CFG_ID_CFG)) != 0)
+    {
+        count += bcmolt_stat_alarm_config_get_packed_length(&this->cfg);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_us_stat_cfg_data_unpack(bcmolt_epon_path_1g_us_stat_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_unpack(&this->cfg, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_us_stat_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_us_stat_cfg_data_bounds_check(const bcmolt_epon_path_1g_us_stat_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_1g_us_stat_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_bounds_check(&this->cfg))
+        {
+            *failed_prop = BCMOLT_EPON_PATH_1G_US_STAT_CFG_ID_CFG;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_path_1g_us_stat_alarm_cleared_data_set_default(bcmolt_epon_path_1g_us_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        this->stat = BCMOLT_EPON_PATH_1G_US_STAT_ID_BYTES;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_us_stat_alarm_cleared_data_pack(const bcmolt_epon_path_1g_us_stat_alarm_cleared_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_epon_path_1g_us_stat_id_pack(this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_path_1g_us_stat_alarm_cleared_data_get_packed_length(const bcmolt_epon_path_1g_us_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_us_stat_alarm_cleared_data_unpack(bcmolt_epon_path_1g_us_stat_alarm_cleared_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_epon_path_1g_us_stat_id_unpack(&this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_us_stat_alarm_cleared_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_us_stat_alarm_cleared_data_bounds_check(const bcmolt_epon_path_1g_us_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_1g_us_stat_alarm_cleared_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        switch (this->stat)
+        {
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_BYTES:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_64:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_65_127:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_128_255:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_256_511:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_512_1023:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_1024_1518:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_1519_2047:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_2048_4095:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_4096_9216:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_9217_16383:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_BROADCAST_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_DATA_BYTES:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_MULTICAST_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_UNICAST_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_MPCP_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_OAM_BYTES:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_OAM_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_REPORT_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_ABORT_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_FCS_ERROR:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_CRC_8_ERROR:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_OUT_OF_SLOT:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_OVERSIZE_ERROR:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_RUNT_ERROR:
+                break;
+            default:
+                *failed_prop = BCMOLT_EPON_PATH_1G_US_STAT_ALARM_CLEARED_ID_STAT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_path_1g_us_stat_alarm_raised_data_set_default(bcmolt_epon_path_1g_us_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        this->stat = BCMOLT_EPON_PATH_1G_US_STAT_ID_BYTES;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_us_stat_alarm_raised_data_pack(const bcmolt_epon_path_1g_us_stat_alarm_raised_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_epon_path_1g_us_stat_id_pack(this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_path_1g_us_stat_alarm_raised_data_get_packed_length(const bcmolt_epon_path_1g_us_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_us_stat_alarm_raised_data_unpack(bcmolt_epon_path_1g_us_stat_alarm_raised_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_epon_path_1g_us_stat_id_unpack(&this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_us_stat_alarm_raised_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_us_stat_alarm_raised_data_bounds_check(const bcmolt_epon_path_1g_us_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_1g_us_stat_alarm_raised_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        switch (this->stat)
+        {
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_BYTES:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_64:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_65_127:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_128_255:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_256_511:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_512_1023:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_1024_1518:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_1519_2047:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_2048_4095:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_4096_9216:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_9217_16383:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_BROADCAST_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_DATA_BYTES:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_MULTICAST_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_UNICAST_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_MPCP_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_OAM_BYTES:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_OAM_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_REPORT_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_ABORT_FRAMES:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_FCS_ERROR:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_CRC_8_ERROR:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_OUT_OF_SLOT:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_OVERSIZE_ERROR:
+                break;
+            case BCMOLT_EPON_PATH_1G_US_STAT_ID_RUNT_ERROR:
+                break;
+            default:
+                *failed_prop = BCMOLT_EPON_PATH_1G_US_STAT_ALARM_RAISED_ID_STAT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_path_1g_us_auto_cfg_data_set_default(bcmolt_epon_path_1g_us_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        this->stat_alarm_cleared = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        this->stat_alarm_raised = BCMOS_FALSE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_us_auto_cfg_data_pack(const bcmolt_epon_path_1g_us_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->stat_alarm_cleared))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->stat_alarm_raised))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_path_1g_us_auto_cfg_data_get_packed_length(const bcmolt_epon_path_1g_us_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_us_auto_cfg_data_unpack(bcmolt_epon_path_1g_us_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->stat_alarm_cleared))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->stat_alarm_raised))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_us_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_PATH_1G_US_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_path_1g_us_auto_cfg_data_bounds_check(const bcmolt_epon_path_1g_us_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_1g_us_auto_cfg_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_rp_key_set_default(bcmolt_epon_rp_key *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_KEY_ID_EPON_NI)) != 0)
+    {
+        this->epon_ni = (bcmolt_epon_ni) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_KEY_ID_LINK_RATE)) != 0)
+    {
+        this->link_rate = BCMOLT_EPON_LINK_RATE_TEN_TEN;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_rp_key_pack(const bcmolt_epon_rp_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_KEY_ID_EPON_NI)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->epon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_KEY_ID_LINK_RATE)) != 0)
+    {
+        if (!bcmolt_epon_link_rate_pack(this->link_rate, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_rp_key_get_packed_length(const bcmolt_epon_rp_key *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_KEY_ID_EPON_NI)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_KEY_ID_LINK_RATE)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_rp_key_unpack(bcmolt_epon_rp_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_KEY_ID_EPON_NI)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->epon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_KEY_ID_LINK_RATE)) != 0)
+    {
+        if (!bcmolt_epon_link_rate_unpack(&this->link_rate, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_rp_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_KEY_ID_EPON_NI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_KEY_ID_LINK_RATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_rp_key_bounds_check(const bcmolt_epon_rp_key *this, bcmolt_presence_mask fields_present, bcmolt_epon_rp_key_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_KEY_ID_LINK_RATE)) != 0)
+    {
+        switch (this->link_rate)
+        {
+            case BCMOLT_EPON_LINK_RATE_TEN_TEN:
+                break;
+            case BCMOLT_EPON_LINK_RATE_TEN_ONE:
+                break;
+            case BCMOLT_EPON_LINK_RATE_ONE_ONE:
+                break;
+            default:
+                *failed_prop = BCMOLT_EPON_RP_KEY_ID_LINK_RATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_epon_rp_cfg_data_set_default(bcmolt_epon_rp_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_CFG_ID_BASE_LLID)) != 0)
+    {
+        this->base_llid = (bcmolt_epon_llid) 15360;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_CFG_ID_MPCP_DISC_EN)) != 0)
+    {
+        this->mpcp_disc_en = BCMOS_TRUE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_CFG_ID_MPCP_DISC_GNT_LEN_TQ)) != 0)
+    {
+        this->mpcp_disc_gnt_len_tq = (bcmolt_time_quanta) 8160;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_CFG_ID_MPCP_REPORT_TIMEOUT)) != 0)
+    {
+        this->mpcp_report_timeout = 50;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_CFG_ID_MAX_MPCP_REG_PER_DISC_WINDOW)) != 0)
+    {
+        this->max_mpcp_reg_per_disc_window = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_CFG_ID_MAX_LINKS)) != 0)
+    {
+        this->max_links = 256;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_CFG_ID_DEFAULT_UPSTREAM_BANDWIDTH)) != 0)
+    {
+        this->default_upstream_bandwidth.polling_interval_us = BCMOLT_POLLING_INTERVAL_AUTOMATIC;
+        this->default_upstream_bandwidth.grant_threshold_tq = (bcmolt_time_quanta) 0;
+        this->default_upstream_bandwidth.min_schedulershaper.bandwidth_Kbps = (bcmolt_bandwidth_Kbps) 0;
+        this->default_upstream_bandwidth.min_schedulershaper.max_burst_size_tq = (bcmolt_time_quanta) 0;
+        this->default_upstream_bandwidth.min_schedulershaper.priority = 0;
+        this->default_upstream_bandwidth.min_schedulershaper.weight_tq = (bcmolt_time_quanta) 0;
+        this->default_upstream_bandwidth.max_schedulershaper.bandwidth_Kbps = (bcmolt_bandwidth_Kbps) 0;
+        this->default_upstream_bandwidth.max_schedulershaper.max_burst_size_tq = (bcmolt_time_quanta) 0;
+        this->default_upstream_bandwidth.max_schedulershaper.priority = 0;
+        this->default_upstream_bandwidth.max_schedulershaper.weight_tq = (bcmolt_time_quanta) 0;
+        this->default_upstream_bandwidth.tdm_grant_size_tq = (bcmolt_time_quanta) 0;
+        this->default_upstream_bandwidth.tdm_grant_interval_us = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_CFG_ID_RATE_OF_REFRACTION)) != 0)
+    {
+        this->rate_of_refraction = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_rp_cfg_data_pack(const bcmolt_epon_rp_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_CFG_ID_BASE_LLID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->base_llid))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_CFG_ID_MPCP_DISC_EN)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->mpcp_disc_en))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_CFG_ID_MPCP_DISC_GNT_LEN_TQ)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, (uint32_t) this->mpcp_disc_gnt_len_tq))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_CFG_ID_MPCP_REPORT_TIMEOUT)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, this->mpcp_report_timeout))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_CFG_ID_MAX_MPCP_REG_PER_DISC_WINDOW)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, this->max_mpcp_reg_per_disc_window))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_CFG_ID_MAX_LINKS)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, this->max_links))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_CFG_ID_DEFAULT_UPSTREAM_BANDWIDTH)) != 0)
+    {
+        if (!bcmolt_upstream_bandwidth_distribution_pack(&this->default_upstream_bandwidth, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_CFG_ID_RATE_OF_REFRACTION)) != 0)
+    {
+        if (!bcmolt_buf_write_double(buf, this->rate_of_refraction))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_rp_cfg_data_get_packed_length(const bcmolt_epon_rp_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_CFG_ID_BASE_LLID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_CFG_ID_MPCP_DISC_EN)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_CFG_ID_MPCP_DISC_GNT_LEN_TQ)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_CFG_ID_MPCP_REPORT_TIMEOUT)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_CFG_ID_MAX_MPCP_REG_PER_DISC_WINDOW)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_CFG_ID_MAX_LINKS)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_CFG_ID_DEFAULT_UPSTREAM_BANDWIDTH)) != 0)
+    {
+        count += 42;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_CFG_ID_RATE_OF_REFRACTION)) != 0)
+    {
+        count += 8;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_rp_cfg_data_unpack(bcmolt_epon_rp_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_CFG_ID_BASE_LLID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->base_llid))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_CFG_ID_MPCP_DISC_EN)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->mpcp_disc_en))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_CFG_ID_MPCP_DISC_GNT_LEN_TQ)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, (uint32_t *) &this->mpcp_disc_gnt_len_tq))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_CFG_ID_MPCP_REPORT_TIMEOUT)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, &this->mpcp_report_timeout))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_CFG_ID_MAX_MPCP_REG_PER_DISC_WINDOW)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, &this->max_mpcp_reg_per_disc_window))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_CFG_ID_MAX_LINKS)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, &this->max_links))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_CFG_ID_DEFAULT_UPSTREAM_BANDWIDTH)) != 0)
+    {
+        if (!bcmolt_upstream_bandwidth_distribution_unpack(&this->default_upstream_bandwidth, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_CFG_ID_RATE_OF_REFRACTION)) != 0)
+    {
+        if (!bcmolt_buf_read_double(buf, &this->rate_of_refraction))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_rp_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_CFG_ID_BASE_LLID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_CFG_ID_MPCP_DISC_EN)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_CFG_ID_MPCP_DISC_GNT_LEN_TQ)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_CFG_ID_MPCP_REPORT_TIMEOUT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_CFG_ID_MAX_MPCP_REG_PER_DISC_WINDOW)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_CFG_ID_MAX_LINKS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_CFG_ID_DEFAULT_UPSTREAM_BANDWIDTH)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 42))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_CFG_ID_RATE_OF_REFRACTION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_rp_cfg_data_bounds_check(const bcmolt_epon_rp_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_rp_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_CFG_ID_BASE_LLID)) != 0)
+    {
+        if (this->base_llid > (bcmolt_epon_llid) 32511)
+        {
+            *failed_prop = BCMOLT_EPON_RP_CFG_ID_BASE_LLID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_CFG_ID_MPCP_DISC_GNT_LEN_TQ)) != 0)
+    {
+        if (this->mpcp_disc_gnt_len_tq < (bcmolt_time_quanta) 5)
+        {
+            *failed_prop = BCMOLT_EPON_RP_CFG_ID_MPCP_DISC_GNT_LEN_TQ;
+            return BCMOS_FALSE;
+        }
+
+        if (this->mpcp_disc_gnt_len_tq > (bcmolt_time_quanta) 65535UL)
+        {
+            *failed_prop = BCMOLT_EPON_RP_CFG_ID_MPCP_DISC_GNT_LEN_TQ;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_CFG_ID_MAX_LINKS)) != 0)
+    {
+        if (this->max_links > 2046)
+        {
+            *failed_prop = BCMOLT_EPON_RP_CFG_ID_MAX_LINKS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_EPON_RP_CFG_ID_DEFAULT_UPSTREAM_BANDWIDTH)) != 0)
+    {
+        if (!bcmolt_upstream_bandwidth_distribution_bounds_check(&this->default_upstream_bandwidth))
+        {
+            *failed_prop = BCMOLT_EPON_RP_CFG_ID_DEFAULT_UPSTREAM_BANDWIDTH;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpio_key_set_default(bcmolt_gpio_key *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPIO_KEY_ID_RESERVED)) != 0)
+    {
+        this->reserved = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPIO_KEY_ID_GPIO_ID)) != 0)
+    {
+        this->gpio_id = BCMOLT_GPIO_PIN_PIN0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpio_key_pack(const bcmolt_gpio_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPIO_KEY_ID_RESERVED)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->reserved))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPIO_KEY_ID_GPIO_ID)) != 0)
+    {
+        if (!bcmolt_gpio_pin_pack(this->gpio_id, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpio_key_get_packed_length(const bcmolt_gpio_key *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPIO_KEY_ID_RESERVED)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPIO_KEY_ID_GPIO_ID)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpio_key_unpack(bcmolt_gpio_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPIO_KEY_ID_RESERVED)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->reserved))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPIO_KEY_ID_GPIO_ID)) != 0)
+    {
+        if (!bcmolt_gpio_pin_unpack(&this->gpio_id, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpio_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPIO_KEY_ID_RESERVED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPIO_KEY_ID_GPIO_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpio_key_bounds_check(const bcmolt_gpio_key *this, bcmolt_presence_mask fields_present, bcmolt_gpio_key_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPIO_KEY_ID_GPIO_ID)) != 0)
+    {
+        switch (this->gpio_id)
+        {
+            case BCMOLT_GPIO_PIN_PIN0:
+                break;
+            case BCMOLT_GPIO_PIN_PIN1:
+                break;
+            case BCMOLT_GPIO_PIN_PIN2:
+                break;
+            case BCMOLT_GPIO_PIN_PIN3:
+                break;
+            case BCMOLT_GPIO_PIN_PIN4:
+                break;
+            case BCMOLT_GPIO_PIN_PIN5:
+                break;
+            case BCMOLT_GPIO_PIN_PIN6:
+                break;
+            case BCMOLT_GPIO_PIN_PIN7:
+                break;
+            case BCMOLT_GPIO_PIN_PIN8:
+                break;
+            case BCMOLT_GPIO_PIN_PIN9:
+                break;
+            case BCMOLT_GPIO_PIN_PIN10:
+                break;
+            case BCMOLT_GPIO_PIN_PIN11:
+                break;
+            case BCMOLT_GPIO_PIN_PIN12:
+                break;
+            case BCMOLT_GPIO_PIN_PIN13:
+                break;
+            case BCMOLT_GPIO_PIN_PIN14:
+                break;
+            case BCMOLT_GPIO_PIN_PIN15:
+                break;
+            case BCMOLT_GPIO_PIN_PIN16:
+                break;
+            case BCMOLT_GPIO_PIN_PIN17:
+                break;
+            case BCMOLT_GPIO_PIN_PIN18:
+                break;
+            case BCMOLT_GPIO_PIN_PIN19:
+                break;
+            case BCMOLT_GPIO_PIN_PIN20:
+                break;
+            case BCMOLT_GPIO_PIN_PIN21:
+                break;
+            case BCMOLT_GPIO_PIN_PIN22:
+                break;
+            case BCMOLT_GPIO_PIN_PIN23:
+                break;
+            case BCMOLT_GPIO_PIN_PIN24:
+                break;
+            case BCMOLT_GPIO_PIN_PIN25:
+                break;
+            case BCMOLT_GPIO_PIN_PIN26:
+                break;
+            case BCMOLT_GPIO_PIN_PIN27:
+                break;
+            case BCMOLT_GPIO_PIN_PIN28:
+                break;
+            case BCMOLT_GPIO_PIN_PIN29:
+                break;
+            case BCMOLT_GPIO_PIN_PIN30:
+                break;
+            case BCMOLT_GPIO_PIN_PIN31:
+                break;
+            case BCMOLT_GPIO_PIN_PIN32:
+                break;
+            case BCMOLT_GPIO_PIN_PIN33:
+                break;
+            case BCMOLT_GPIO_PIN_PIN34:
+                break;
+            case BCMOLT_GPIO_PIN_PIN35:
+                break;
+            case BCMOLT_GPIO_PIN_PIN36:
+                break;
+            case BCMOLT_GPIO_PIN_PIN37:
+                break;
+            case BCMOLT_GPIO_PIN_PIN38:
+                break;
+            case BCMOLT_GPIO_PIN_PIN39:
+                break;
+            case BCMOLT_GPIO_PIN_PIN40:
+                break;
+            case BCMOLT_GPIO_PIN_PIN41:
+                break;
+            case BCMOLT_GPIO_PIN_PIN42:
+                break;
+            case BCMOLT_GPIO_PIN_PIN43:
+                break;
+            case BCMOLT_GPIO_PIN_PIN44:
+                break;
+            case BCMOLT_GPIO_PIN_PIN45:
+                break;
+            case BCMOLT_GPIO_PIN_PIN46:
+                break;
+            case BCMOLT_GPIO_PIN_PIN47:
+                break;
+            case BCMOLT_GPIO_PIN_PIN48:
+                break;
+            case BCMOLT_GPIO_PIN_PIN49:
+                break;
+            case BCMOLT_GPIO_PIN_PIN50:
+                break;
+            case BCMOLT_GPIO_PIN_PIN51:
+                break;
+            case BCMOLT_GPIO_PIN_PIN52:
+                break;
+            case BCMOLT_GPIO_PIN_PIN53:
+                break;
+            case BCMOLT_GPIO_PIN_PIN54:
+                break;
+            case BCMOLT_GPIO_PIN_PIN55:
+                break;
+            case BCMOLT_GPIO_PIN_PIN56:
+                break;
+            case BCMOLT_GPIO_PIN_PIN57:
+                break;
+            case BCMOLT_GPIO_PIN_PIN58:
+                break;
+            case BCMOLT_GPIO_PIN_PIN59:
+                break;
+            case BCMOLT_GPIO_PIN_PIN60:
+                break;
+            case BCMOLT_GPIO_PIN_PIN61:
+                break;
+            case BCMOLT_GPIO_PIN_PIN62:
+                break;
+            case BCMOLT_GPIO_PIN_PIN63:
+                break;
+            case BCMOLT_GPIO_PIN_PIN64:
+                break;
+            case BCMOLT_GPIO_PIN_PIN65:
+                break;
+            case BCMOLT_GPIO_PIN_PIN66:
+                break;
+            case BCMOLT_GPIO_PIN_PIN67:
+                break;
+            case BCMOLT_GPIO_PIN_PIN68:
+                break;
+            case BCMOLT_GPIO_PIN_PIN69:
+                break;
+            case BCMOLT_GPIO_PIN_PIN70:
+                break;
+            case BCMOLT_GPIO_PIN_PIN71:
+                break;
+            case BCMOLT_GPIO_PIN_PIN72:
+                break;
+            case BCMOLT_GPIO_PIN_PIN73:
+                break;
+            case BCMOLT_GPIO_PIN_PIN74:
+                break;
+            case BCMOLT_GPIO_PIN_PIN75:
+                break;
+            case BCMOLT_GPIO_PIN_PIN76:
+                break;
+            case BCMOLT_GPIO_PIN_PIN77:
+                break;
+            case BCMOLT_GPIO_PIN_PIN78:
+                break;
+            case BCMOLT_GPIO_PIN_PIN79:
+                break;
+            case BCMOLT_GPIO_PIN_PIN80:
+                break;
+            case BCMOLT_GPIO_PIN_PIN81:
+                break;
+            case BCMOLT_GPIO_PIN_PIN82:
+                break;
+            case BCMOLT_GPIO_PIN_PIN83:
+                break;
+            case BCMOLT_GPIO_PIN_PIN84:
+                break;
+            case BCMOLT_GPIO_PIN_PIN85:
+                break;
+            case BCMOLT_GPIO_PIN_PIN86:
+                break;
+            case BCMOLT_GPIO_PIN_PIN87:
+                break;
+            case BCMOLT_GPIO_PIN_PIN88:
+                break;
+            case BCMOLT_GPIO_PIN_PIN89:
+                break;
+            case BCMOLT_GPIO_PIN_PIN90:
+                break;
+            case BCMOLT_GPIO_PIN_PIN91:
+                break;
+            case BCMOLT_GPIO_PIN_PIN92:
+                break;
+            case BCMOLT_GPIO_PIN_PIN93:
+                break;
+            case BCMOLT_GPIO_PIN_PIN94:
+                break;
+            case BCMOLT_GPIO_PIN_PIN95:
+                break;
+            case BCMOLT_GPIO_PIN_PIN96:
+                break;
+            case BCMOLT_GPIO_PIN_PIN97:
+                break;
+            case BCMOLT_GPIO_PIN_PIN98:
+                break;
+            case BCMOLT_GPIO_PIN_PIN99:
+                break;
+            case BCMOLT_GPIO_PIN_PIN100:
+                break;
+            case BCMOLT_GPIO_PIN_PIN101:
+                break;
+            case BCMOLT_GPIO_PIN_PIN102:
+                break;
+            case BCMOLT_GPIO_PIN_PIN103:
+                break;
+            case BCMOLT_GPIO_PIN_PIN104:
+                break;
+            case BCMOLT_GPIO_PIN_PIN105:
+                break;
+            case BCMOLT_GPIO_PIN_PIN106:
+                break;
+            case BCMOLT_GPIO_PIN_UNCONFIGURED:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPIO_KEY_ID_GPIO_ID;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpio_cfg_data_set_default(bcmolt_gpio_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPIO_CFG_ID_DIRECTION)) != 0)
+    {
+        this->direction = BCMOLT_GPIO_PIN_DIR_INPUT;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPIO_CFG_ID_VALUE)) != 0)
+    {
+        this->value = BCMOLT_GPIO_VALUE_CLEAR;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpio_cfg_data_pack(const bcmolt_gpio_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPIO_CFG_ID_DIRECTION)) != 0)
+    {
+        if (!bcmolt_gpio_pin_dir_pack(this->direction, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPIO_CFG_ID_VALUE)) != 0)
+    {
+        if (!bcmolt_gpio_value_pack(this->value, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpio_cfg_data_get_packed_length(const bcmolt_gpio_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPIO_CFG_ID_DIRECTION)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPIO_CFG_ID_VALUE)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpio_cfg_data_unpack(bcmolt_gpio_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPIO_CFG_ID_DIRECTION)) != 0)
+    {
+        if (!bcmolt_gpio_pin_dir_unpack(&this->direction, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPIO_CFG_ID_VALUE)) != 0)
+    {
+        if (!bcmolt_gpio_value_unpack(&this->value, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpio_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPIO_CFG_ID_DIRECTION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPIO_CFG_ID_VALUE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpio_cfg_data_bounds_check(const bcmolt_gpio_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_gpio_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPIO_CFG_ID_DIRECTION)) != 0)
+    {
+        switch (this->direction)
+        {
+            case BCMOLT_GPIO_PIN_DIR_INPUT:
+                break;
+            case BCMOLT_GPIO_PIN_DIR_OUTPUT:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPIO_CFG_ID_DIRECTION;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPIO_CFG_ID_VALUE)) != 0)
+    {
+        switch (this->value)
+        {
+            case BCMOLT_GPIO_VALUE_CLEAR:
+                break;
+            case BCMOLT_GPIO_VALUE_SET:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPIO_CFG_ID_VALUE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_alloc_key_set_default(bcmolt_gpon_alloc_key *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_KEY_ID_PON_NI)) != 0)
+    {
+        this->pon_ni = (bcmolt_gpon_ni) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_KEY_ID_ALLOC_ID)) != 0)
+    {
+        this->alloc_id = (bcmolt_gpon_alloc_id) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_key_pack(const bcmolt_gpon_alloc_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, (uint8_t) this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_KEY_ID_ALLOC_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->alloc_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_alloc_key_get_packed_length(const bcmolt_gpon_alloc_key *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_KEY_ID_PON_NI)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_KEY_ID_ALLOC_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_key_unpack(bcmolt_gpon_alloc_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, (uint8_t *) &this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_KEY_ID_ALLOC_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->alloc_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_KEY_ID_ALLOC_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_key_bounds_check(const bcmolt_gpon_alloc_key *this, bcmolt_presence_mask fields_present, bcmolt_gpon_alloc_key_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_KEY_ID_PON_NI)) != 0)
+    {
+        if (this->pon_ni > (bcmolt_gpon_ni) 15)
+        {
+            *failed_prop = BCMOLT_GPON_ALLOC_KEY_ID_PON_NI;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_KEY_ID_ALLOC_ID)) != 0)
+    {
+        if (this->alloc_id > (bcmolt_gpon_alloc_id) 4095)
+        {
+            *failed_prop = BCMOLT_GPON_ALLOC_KEY_ID_ALLOC_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_alloc_cfg_data_set_default(bcmolt_gpon_alloc_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_CFG_ID_STATE)) != 0)
+    {
+        this->state = BCMOLT_ALLOC_STATE_NOT_CONFIGURED;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_CFG_ID_SLA)) != 0)
+    {
+        this->sla.cbr_rt_bw = 0;
+        this->sla.cbr_nrt_bw = 0;
+        this->sla.guaranteed_bw = 0;
+        this->sla.maximum_bw = 0;
+        this->sla.additional_bw_eligibility = BCMOLT_ADDITIONAL_BW_ELIGIBILITY_NONE;
+        this->sla.cbr_rt_compensation = BCMOS_FALSE;
+        this->sla.cbr_rt_ap_index = 0;
+        this->sla.cbr_nrt_ap_index = 0;
+        this->sla.alloc_type = BCMOLT_ALLOC_TYPE_NONE;
+        this->sla.weight = 0;
+        this->sla.priority = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_CFG_ID_ONU_ID)) != 0)
+    {
+        this->onu_id = (bcmolt_gpon_onu_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_CFG_ID_COLLECT_STATS)) != 0)
+    {
+        this->collect_stats = BCMOS_FALSE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_cfg_data_pack(const bcmolt_gpon_alloc_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_CFG_ID_STATE)) != 0)
+    {
+        if (!bcmolt_alloc_state_pack(this->state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_CFG_ID_SLA)) != 0)
+    {
+        if (!bcmolt_pon_alloc_sla_pack(&this->sla, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_CFG_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->onu_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_CFG_ID_COLLECT_STATS)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->collect_stats))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_alloc_cfg_data_get_packed_length(const bcmolt_gpon_alloc_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_CFG_ID_STATE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_CFG_ID_SLA)) != 0)
+    {
+        count += 23;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_CFG_ID_ONU_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_CFG_ID_COLLECT_STATS)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_cfg_data_unpack(bcmolt_gpon_alloc_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_CFG_ID_STATE)) != 0)
+    {
+        if (!bcmolt_alloc_state_unpack(&this->state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_CFG_ID_SLA)) != 0)
+    {
+        if (!bcmolt_pon_alloc_sla_unpack(&this->sla, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_CFG_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->onu_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_CFG_ID_COLLECT_STATS)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->collect_stats))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_CFG_ID_STATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_CFG_ID_SLA)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 23))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_CFG_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_CFG_ID_COLLECT_STATS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_cfg_data_bounds_check(const bcmolt_gpon_alloc_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_alloc_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_CFG_ID_STATE)) != 0)
+    {
+        switch (this->state)
+        {
+            case BCMOLT_ALLOC_STATE_NOT_CONFIGURED:
+                break;
+            case BCMOLT_ALLOC_STATE_INACTIVE:
+                break;
+            case BCMOLT_ALLOC_STATE_PROCESSING:
+                break;
+            case BCMOLT_ALLOC_STATE_ACTIVE:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_ALLOC_CFG_ID_STATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_CFG_ID_SLA)) != 0)
+    {
+        if (!bcmolt_pon_alloc_sla_bounds_check(&this->sla))
+        {
+            *failed_prop = BCMOLT_GPON_ALLOC_CFG_ID_SLA;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_CFG_ID_ONU_ID)) != 0)
+    {
+        if (this->onu_id > (bcmolt_gpon_onu_id) 127)
+        {
+            *failed_prop = BCMOLT_GPON_ALLOC_CFG_ID_ONU_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_alloc_stat_data_set_default(bcmolt_gpon_alloc_stat_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_STAT_ID_RX_BYTES)) != 0)
+    {
+        this->rx_bytes = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_stat_data_pack(const bcmolt_gpon_alloc_stat_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_STAT_ID_RX_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_alloc_stat_data_get_packed_length(const bcmolt_gpon_alloc_stat_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_STAT_ID_RX_BYTES)) != 0)
+    {
+        count += 8;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_stat_data_unpack(bcmolt_gpon_alloc_stat_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_STAT_ID_RX_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_stat_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_STAT_ID_RX_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_stat_data_bounds_check(const bcmolt_gpon_alloc_stat_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_alloc_stat_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_alloc_stat_cfg_data_set_default(bcmolt_gpon_alloc_stat_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_STAT_CFG_ID_CFG)) != 0)
+    {
+        this->cfg.trigger.type = BCMOLT_STAT_CONDITION_TYPE_NONE;
+        this->cfg.soak.active_soak_time = 0;
+        this->cfg.soak.clear_soak_time = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_stat_cfg_data_pack(const bcmolt_gpon_alloc_stat_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_pack(&this->cfg, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_alloc_stat_cfg_data_get_packed_length(const bcmolt_gpon_alloc_stat_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_STAT_CFG_ID_CFG)) != 0)
+    {
+        count += bcmolt_stat_alarm_config_get_packed_length(&this->cfg);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_stat_cfg_data_unpack(bcmolt_gpon_alloc_stat_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_unpack(&this->cfg, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_stat_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_stat_cfg_data_bounds_check(const bcmolt_gpon_alloc_stat_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_alloc_stat_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_bounds_check(&this->cfg))
+        {
+            *failed_prop = BCMOLT_GPON_ALLOC_STAT_CFG_ID_CFG;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_alloc_configuration_completed_data_set_default(bcmolt_gpon_alloc_configuration_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_CONFIGURATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        this->status = BCMOLT_RESULT_SUCCESS;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_CONFIGURATION_COMPLETED_ID_NEW_STATE)) != 0)
+    {
+        this->new_state = BCMOLT_ALLOC_STATE_NOT_CONFIGURED;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_configuration_completed_data_pack(const bcmolt_gpon_alloc_configuration_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_CONFIGURATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_result_pack(this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_CONFIGURATION_COMPLETED_ID_NEW_STATE)) != 0)
+    {
+        if (!bcmolt_alloc_state_pack(this->new_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_alloc_configuration_completed_data_get_packed_length(const bcmolt_gpon_alloc_configuration_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_CONFIGURATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_CONFIGURATION_COMPLETED_ID_NEW_STATE)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_configuration_completed_data_unpack(bcmolt_gpon_alloc_configuration_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_CONFIGURATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_result_unpack(&this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_CONFIGURATION_COMPLETED_ID_NEW_STATE)) != 0)
+    {
+        if (!bcmolt_alloc_state_unpack(&this->new_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_configuration_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_CONFIGURATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_CONFIGURATION_COMPLETED_ID_NEW_STATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_configuration_completed_data_bounds_check(const bcmolt_gpon_alloc_configuration_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_alloc_configuration_completed_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_CONFIGURATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        switch (this->status)
+        {
+            case BCMOLT_RESULT_SUCCESS:
+                break;
+            case BCMOLT_RESULT_FAIL:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_ALLOC_CONFIGURATION_COMPLETED_ID_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_CONFIGURATION_COMPLETED_ID_NEW_STATE)) != 0)
+    {
+        switch (this->new_state)
+        {
+            case BCMOLT_ALLOC_STATE_NOT_CONFIGURED:
+                break;
+            case BCMOLT_ALLOC_STATE_INACTIVE:
+                break;
+            case BCMOLT_ALLOC_STATE_PROCESSING:
+                break;
+            case BCMOLT_ALLOC_STATE_ACTIVE:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_ALLOC_CONFIGURATION_COMPLETED_ID_NEW_STATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_alloc_get_alloc_stats_completed_data_set_default(bcmolt_gpon_alloc_get_alloc_stats_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_STATUS)) != 0)
+    {
+        this->status = BCMOLT_RESULT_SUCCESS;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_NSR_USED)) != 0)
+    {
+        this->average_nsr_used = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_NSR_ALLOCATED)) != 0)
+    {
+        this->average_nsr_allocated = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_SR_REPORT)) != 0)
+    {
+        this->average_sr_report = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_get_alloc_stats_completed_data_pack(const bcmolt_gpon_alloc_get_alloc_stats_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_result_pack(this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_NSR_USED)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->average_nsr_used))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_NSR_ALLOCATED)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->average_nsr_allocated))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_SR_REPORT)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->average_sr_report))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_alloc_get_alloc_stats_completed_data_get_packed_length(const bcmolt_gpon_alloc_get_alloc_stats_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_NSR_USED)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_NSR_ALLOCATED)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_SR_REPORT)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_get_alloc_stats_completed_data_unpack(bcmolt_gpon_alloc_get_alloc_stats_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_result_unpack(&this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_NSR_USED)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->average_nsr_used))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_NSR_ALLOCATED)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->average_nsr_allocated))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_SR_REPORT)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->average_sr_report))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_get_alloc_stats_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_NSR_USED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_NSR_ALLOCATED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_SR_REPORT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_get_alloc_stats_completed_data_bounds_check(const bcmolt_gpon_alloc_get_alloc_stats_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_alloc_get_alloc_stats_completed_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_STATUS)) != 0)
+    {
+        switch (this->status)
+        {
+            case BCMOLT_RESULT_SUCCESS:
+                break;
+            case BCMOLT_RESULT_FAIL:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_alloc_stat_alarm_cleared_data_set_default(bcmolt_gpon_alloc_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        this->stat = BCMOLT_GPON_ALLOC_STAT_ID_RX_BYTES;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_stat_alarm_cleared_data_pack(const bcmolt_gpon_alloc_stat_alarm_cleared_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_gpon_alloc_stat_id_pack(this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_alloc_stat_alarm_cleared_data_get_packed_length(const bcmolt_gpon_alloc_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_stat_alarm_cleared_data_unpack(bcmolt_gpon_alloc_stat_alarm_cleared_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_gpon_alloc_stat_id_unpack(&this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_stat_alarm_cleared_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_stat_alarm_cleared_data_bounds_check(const bcmolt_gpon_alloc_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_alloc_stat_alarm_cleared_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        switch (this->stat)
+        {
+            case BCMOLT_GPON_ALLOC_STAT_ID_RX_BYTES:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_ALLOC_STAT_ALARM_CLEARED_ID_STAT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_alloc_stat_alarm_raised_data_set_default(bcmolt_gpon_alloc_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        this->stat = BCMOLT_GPON_ALLOC_STAT_ID_RX_BYTES;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_stat_alarm_raised_data_pack(const bcmolt_gpon_alloc_stat_alarm_raised_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_gpon_alloc_stat_id_pack(this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_alloc_stat_alarm_raised_data_get_packed_length(const bcmolt_gpon_alloc_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_stat_alarm_raised_data_unpack(bcmolt_gpon_alloc_stat_alarm_raised_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_gpon_alloc_stat_id_unpack(&this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_stat_alarm_raised_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_stat_alarm_raised_data_bounds_check(const bcmolt_gpon_alloc_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_alloc_stat_alarm_raised_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        switch (this->stat)
+        {
+            case BCMOLT_GPON_ALLOC_STAT_ID_RX_BYTES:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_ALLOC_STAT_ALARM_RAISED_ID_STAT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_alloc_auto_cfg_data_set_default(bcmolt_gpon_alloc_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_AUTO_CFG_ID_CONFIGURATION_COMPLETED)) != 0)
+    {
+        this->configuration_completed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_AUTO_CFG_ID_GET_ALLOC_STATS_COMPLETED)) != 0)
+    {
+        this->get_alloc_stats_completed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        this->stat_alarm_cleared = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        this->stat_alarm_raised = BCMOS_FALSE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_auto_cfg_data_pack(const bcmolt_gpon_alloc_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_AUTO_CFG_ID_CONFIGURATION_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->configuration_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_AUTO_CFG_ID_GET_ALLOC_STATS_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->get_alloc_stats_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->stat_alarm_cleared))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->stat_alarm_raised))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_alloc_auto_cfg_data_get_packed_length(const bcmolt_gpon_alloc_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_AUTO_CFG_ID_CONFIGURATION_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_AUTO_CFG_ID_GET_ALLOC_STATS_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_auto_cfg_data_unpack(bcmolt_gpon_alloc_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_AUTO_CFG_ID_CONFIGURATION_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->configuration_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_AUTO_CFG_ID_GET_ALLOC_STATS_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->get_alloc_stats_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->stat_alarm_cleared))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->stat_alarm_raised))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_AUTO_CFG_ID_CONFIGURATION_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_AUTO_CFG_ID_GET_ALLOC_STATS_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_auto_cfg_data_bounds_check(const bcmolt_gpon_alloc_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_alloc_auto_cfg_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_alloc_get_stats_data_set_default(bcmolt_gpon_alloc_get_stats_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_GET_STATS_ID_NUM_OF_CYCLES)) != 0)
+    {
+        this->num_of_cycles = 1;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_get_stats_data_pack(const bcmolt_gpon_alloc_get_stats_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_GET_STATS_ID_NUM_OF_CYCLES)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->num_of_cycles))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_alloc_get_stats_data_get_packed_length(const bcmolt_gpon_alloc_get_stats_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_GET_STATS_ID_NUM_OF_CYCLES)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_get_stats_data_unpack(bcmolt_gpon_alloc_get_stats_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_GET_STATS_ID_NUM_OF_CYCLES)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->num_of_cycles))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_get_stats_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_GET_STATS_ID_NUM_OF_CYCLES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_get_stats_data_bounds_check(const bcmolt_gpon_alloc_get_stats_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_alloc_get_stats_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_GET_STATS_ID_NUM_OF_CYCLES)) != 0)
+    {
+        if (this->num_of_cycles < 1)
+        {
+            *failed_prop = BCMOLT_GPON_ALLOC_GET_STATS_ID_NUM_OF_CYCLES;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_alloc_set_state_data_set_default(bcmolt_gpon_alloc_set_state_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_SET_STATE_ID_STATE)) != 0)
+    {
+        this->state = BCMOLT_ALLOC_OPERATION_ACTIVATE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_set_state_data_pack(const bcmolt_gpon_alloc_set_state_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_SET_STATE_ID_STATE)) != 0)
+    {
+        if (!bcmolt_alloc_operation_pack(this->state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_alloc_set_state_data_get_packed_length(const bcmolt_gpon_alloc_set_state_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_SET_STATE_ID_STATE)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_set_state_data_unpack(bcmolt_gpon_alloc_set_state_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_SET_STATE_ID_STATE)) != 0)
+    {
+        if (!bcmolt_alloc_operation_unpack(&this->state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_set_state_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_SET_STATE_ID_STATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_alloc_set_state_data_bounds_check(const bcmolt_gpon_alloc_set_state_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_alloc_set_state_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ALLOC_SET_STATE_ID_STATE)) != 0)
+    {
+        switch (this->state)
+        {
+            case BCMOLT_ALLOC_OPERATION_ACTIVATE:
+                break;
+            case BCMOLT_ALLOC_OPERATION_DEACTIVATE:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_ALLOC_SET_STATE_ID_STATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_gem_port_key_set_default(bcmolt_gpon_gem_port_key *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_KEY_ID_PON_NI)) != 0)
+    {
+        this->pon_ni = (bcmolt_gpon_ni) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_KEY_ID_GEM_PORT_ID)) != 0)
+    {
+        this->gem_port_id = (bcmolt_gpon_gem_id) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_key_pack(const bcmolt_gpon_gem_port_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, (uint8_t) this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_KEY_ID_GEM_PORT_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->gem_port_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_gem_port_key_get_packed_length(const bcmolt_gpon_gem_port_key *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_KEY_ID_PON_NI)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_KEY_ID_GEM_PORT_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_key_unpack(bcmolt_gpon_gem_port_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, (uint8_t *) &this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_KEY_ID_GEM_PORT_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->gem_port_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_KEY_ID_GEM_PORT_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_key_bounds_check(const bcmolt_gpon_gem_port_key *this, bcmolt_presence_mask fields_present, bcmolt_gpon_gem_port_key_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_KEY_ID_PON_NI)) != 0)
+    {
+        if (this->pon_ni > (bcmolt_gpon_ni) 15)
+        {
+            *failed_prop = BCMOLT_GPON_GEM_PORT_KEY_ID_PON_NI;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_KEY_ID_GEM_PORT_ID)) != 0)
+    {
+        if (this->gem_port_id > (bcmolt_gpon_gem_id) 4095)
+        {
+            *failed_prop = BCMOLT_GPON_GEM_PORT_KEY_ID_GEM_PORT_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_gem_port_cfg_data_set_default(bcmolt_gpon_gem_port_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_CONFIGURATION)) != 0)
+    {
+        this->configuration.direction = BCMOLT_GEM_PORT_DIRECTION_DOWNSTREAM;
+        this->configuration.type = BCMOLT_GEM_PORT_TYPE_UNICAST;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_ONU_ID)) != 0)
+    {
+        this->onu_id = (bcmolt_gpon_onu_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_GEM_PORT_STATE)) != 0)
+    {
+        this->gem_port_state = BCMOLT_GPON_GEM_PORT_STATE_NOT_CONFIGURED;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_DOWNSTREAM_ENCRYPTION_MODE)) != 0)
+    {
+        this->downstream_encryption_mode = BCMOLT_CONTROL_STATE_DISABLE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_UPSTREAM_DESTINATION_QUEUE)) != 0)
+    {
+        this->upstream_destination_queue = BCMOLT_US_GEM_PORT_DESTINATION_DATA;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_CONTROL)) != 0)
+    {
+        this->control = BCMOLT_CONTROL_STATE_DISABLE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_DEBUG_FLOW_CONFIG)) != 0)
+    {
+        this->debug_flow_config.untagged_flow = BCMOLT_CONTROL_STATE_DISABLE;
+        this->debug_flow_config.untagged_vid = (bcmolt_vlan_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_MAC_TABLE_ENTRY_LIMIT)) != 0)
+    {
+        this->mac_table_entry_limit = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_cfg_data_pack(const bcmolt_gpon_gem_port_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_CONFIGURATION)) != 0)
+    {
+        if (!bcmolt_gem_port_configuration_pack(&this->configuration, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->onu_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_GEM_PORT_STATE)) != 0)
+    {
+        if (!bcmolt_gpon_gem_port_state_pack(this->gem_port_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_DOWNSTREAM_ENCRYPTION_MODE)) != 0)
+    {
+        if (!bcmolt_control_state_pack(this->downstream_encryption_mode, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_UPSTREAM_DESTINATION_QUEUE)) != 0)
+    {
+        if (!bcmolt_us_gem_port_destination_pack(this->upstream_destination_queue, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_CONTROL)) != 0)
+    {
+        if (!bcmolt_control_state_pack(this->control, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_DEBUG_FLOW_CONFIG)) != 0)
+    {
+        if (!bcmolt_gpon_debug_flow_config_pack(&this->debug_flow_config, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_MAC_TABLE_ENTRY_LIMIT)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, this->mac_table_entry_limit))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_gem_port_cfg_data_get_packed_length(const bcmolt_gpon_gem_port_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_CONFIGURATION)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_ONU_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_GEM_PORT_STATE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_DOWNSTREAM_ENCRYPTION_MODE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_UPSTREAM_DESTINATION_QUEUE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_CONTROL)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_DEBUG_FLOW_CONFIG)) != 0)
+    {
+        count += 3;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_MAC_TABLE_ENTRY_LIMIT)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_cfg_data_unpack(bcmolt_gpon_gem_port_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_CONFIGURATION)) != 0)
+    {
+        if (!bcmolt_gem_port_configuration_unpack(&this->configuration, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->onu_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_GEM_PORT_STATE)) != 0)
+    {
+        if (!bcmolt_gpon_gem_port_state_unpack(&this->gem_port_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_DOWNSTREAM_ENCRYPTION_MODE)) != 0)
+    {
+        if (!bcmolt_control_state_unpack(&this->downstream_encryption_mode, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_UPSTREAM_DESTINATION_QUEUE)) != 0)
+    {
+        if (!bcmolt_us_gem_port_destination_unpack(&this->upstream_destination_queue, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_CONTROL)) != 0)
+    {
+        if (!bcmolt_control_state_unpack(&this->control, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_DEBUG_FLOW_CONFIG)) != 0)
+    {
+        if (!bcmolt_gpon_debug_flow_config_unpack(&this->debug_flow_config, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_MAC_TABLE_ENTRY_LIMIT)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, &this->mac_table_entry_limit))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_CONFIGURATION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_GEM_PORT_STATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_DOWNSTREAM_ENCRYPTION_MODE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_UPSTREAM_DESTINATION_QUEUE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_CONTROL)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_DEBUG_FLOW_CONFIG)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 3))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_MAC_TABLE_ENTRY_LIMIT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_cfg_data_bounds_check(const bcmolt_gpon_gem_port_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_gem_port_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_CONFIGURATION)) != 0)
+    {
+        if (!bcmolt_gem_port_configuration_bounds_check(&this->configuration))
+        {
+            *failed_prop = BCMOLT_GPON_GEM_PORT_CFG_ID_CONFIGURATION;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_ONU_ID)) != 0)
+    {
+        if (this->onu_id > (bcmolt_gpon_onu_id) 127)
+        {
+            *failed_prop = BCMOLT_GPON_GEM_PORT_CFG_ID_ONU_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_GEM_PORT_STATE)) != 0)
+    {
+        switch (this->gem_port_state)
+        {
+            case BCMOLT_GPON_GEM_PORT_STATE_NOT_CONFIGURED:
+                break;
+            case BCMOLT_GPON_GEM_PORT_STATE_INACTIVE:
+                break;
+            case BCMOLT_GPON_GEM_PORT_STATE_PROCESSING:
+                break;
+            case BCMOLT_GPON_GEM_PORT_STATE_ACTIVE:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_GEM_PORT_CFG_ID_GEM_PORT_STATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_DOWNSTREAM_ENCRYPTION_MODE)) != 0)
+    {
+        switch (this->downstream_encryption_mode)
+        {
+            case BCMOLT_CONTROL_STATE_DISABLE:
+                break;
+            case BCMOLT_CONTROL_STATE_ENABLE:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_GEM_PORT_CFG_ID_DOWNSTREAM_ENCRYPTION_MODE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_UPSTREAM_DESTINATION_QUEUE)) != 0)
+    {
+        switch (this->upstream_destination_queue)
+        {
+            case BCMOLT_US_GEM_PORT_DESTINATION_DATA:
+                break;
+            case BCMOLT_US_GEM_PORT_DESTINATION_CPU:
+                break;
+            case BCMOLT_US_GEM_PORT_DESTINATION_OMCI:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_GEM_PORT_CFG_ID_UPSTREAM_DESTINATION_QUEUE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_CONTROL)) != 0)
+    {
+        switch (this->control)
+        {
+            case BCMOLT_CONTROL_STATE_DISABLE:
+                break;
+            case BCMOLT_CONTROL_STATE_ENABLE:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_GEM_PORT_CFG_ID_CONTROL;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_DEBUG_FLOW_CONFIG)) != 0)
+    {
+        if (!bcmolt_gpon_debug_flow_config_bounds_check(&this->debug_flow_config))
+        {
+            *failed_prop = BCMOLT_GPON_GEM_PORT_CFG_ID_DEBUG_FLOW_CONFIG;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_MAC_TABLE_ENTRY_LIMIT)) != 0)
+    {
+        if (this->mac_table_entry_limit > 128)
+        {
+            *failed_prop = BCMOLT_GPON_GEM_PORT_CFG_ID_MAC_TABLE_ENTRY_LIMIT;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_gem_port_stat_data_set_default(bcmolt_gpon_gem_port_stat_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_STAT_ID_RX_PACKETS)) != 0)
+    {
+        this->rx_packets = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_STAT_ID_RX_BYTES)) != 0)
+    {
+        this->rx_bytes = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_STAT_ID_TX_PACKETS)) != 0)
+    {
+        this->tx_packets = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_STAT_ID_TX_BYTES)) != 0)
+    {
+        this->tx_bytes = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_stat_data_pack(const bcmolt_gpon_gem_port_stat_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_STAT_ID_RX_PACKETS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_packets))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_STAT_ID_RX_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_STAT_ID_TX_PACKETS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_packets))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_STAT_ID_TX_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_gem_port_stat_data_get_packed_length(const bcmolt_gpon_gem_port_stat_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_STAT_ID_RX_PACKETS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_STAT_ID_RX_BYTES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_STAT_ID_TX_PACKETS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_STAT_ID_TX_BYTES)) != 0)
+    {
+        count += 8;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_stat_data_unpack(bcmolt_gpon_gem_port_stat_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_STAT_ID_RX_PACKETS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_packets))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_STAT_ID_RX_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_STAT_ID_TX_PACKETS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_packets))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_STAT_ID_TX_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_stat_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_STAT_ID_RX_PACKETS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_STAT_ID_RX_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_STAT_ID_TX_PACKETS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_STAT_ID_TX_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_stat_data_bounds_check(const bcmolt_gpon_gem_port_stat_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_gem_port_stat_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_gem_port_stat_cfg_data_set_default(bcmolt_gpon_gem_port_stat_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_STAT_CFG_ID_CFG)) != 0)
+    {
+        this->cfg.trigger.type = BCMOLT_STAT_CONDITION_TYPE_NONE;
+        this->cfg.soak.active_soak_time = 0;
+        this->cfg.soak.clear_soak_time = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_stat_cfg_data_pack(const bcmolt_gpon_gem_port_stat_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_pack(&this->cfg, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_gem_port_stat_cfg_data_get_packed_length(const bcmolt_gpon_gem_port_stat_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_STAT_CFG_ID_CFG)) != 0)
+    {
+        count += bcmolt_stat_alarm_config_get_packed_length(&this->cfg);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_stat_cfg_data_unpack(bcmolt_gpon_gem_port_stat_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_unpack(&this->cfg, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_stat_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_stat_cfg_data_bounds_check(const bcmolt_gpon_gem_port_stat_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_gem_port_stat_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_bounds_check(&this->cfg))
+        {
+            *failed_prop = BCMOLT_GPON_GEM_PORT_STAT_CFG_ID_CFG;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_gem_port_configuration_completed_data_set_default(bcmolt_gpon_gem_port_configuration_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CONFIGURATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        this->status = BCMOLT_RESULT_SUCCESS;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CONFIGURATION_COMPLETED_ID_NEW_STATE)) != 0)
+    {
+        this->new_state = BCMOLT_GPON_GEM_PORT_STATE_NOT_CONFIGURED;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_configuration_completed_data_pack(const bcmolt_gpon_gem_port_configuration_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CONFIGURATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_result_pack(this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CONFIGURATION_COMPLETED_ID_NEW_STATE)) != 0)
+    {
+        if (!bcmolt_gpon_gem_port_state_pack(this->new_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_gem_port_configuration_completed_data_get_packed_length(const bcmolt_gpon_gem_port_configuration_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CONFIGURATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CONFIGURATION_COMPLETED_ID_NEW_STATE)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_configuration_completed_data_unpack(bcmolt_gpon_gem_port_configuration_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CONFIGURATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_result_unpack(&this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CONFIGURATION_COMPLETED_ID_NEW_STATE)) != 0)
+    {
+        if (!bcmolt_gpon_gem_port_state_unpack(&this->new_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_configuration_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CONFIGURATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CONFIGURATION_COMPLETED_ID_NEW_STATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_configuration_completed_data_bounds_check(const bcmolt_gpon_gem_port_configuration_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_gem_port_configuration_completed_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CONFIGURATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        switch (this->status)
+        {
+            case BCMOLT_RESULT_SUCCESS:
+                break;
+            case BCMOLT_RESULT_FAIL:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_GEM_PORT_CONFIGURATION_COMPLETED_ID_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_CONFIGURATION_COMPLETED_ID_NEW_STATE)) != 0)
+    {
+        switch (this->new_state)
+        {
+            case BCMOLT_GPON_GEM_PORT_STATE_NOT_CONFIGURED:
+                break;
+            case BCMOLT_GPON_GEM_PORT_STATE_INACTIVE:
+                break;
+            case BCMOLT_GPON_GEM_PORT_STATE_PROCESSING:
+                break;
+            case BCMOLT_GPON_GEM_PORT_STATE_ACTIVE:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_GEM_PORT_CONFIGURATION_COMPLETED_ID_NEW_STATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_gem_port_stat_alarm_cleared_data_set_default(bcmolt_gpon_gem_port_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        this->stat = BCMOLT_GPON_GEM_PORT_STAT_ID_RX_PACKETS;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_stat_alarm_cleared_data_pack(const bcmolt_gpon_gem_port_stat_alarm_cleared_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_gpon_gem_port_stat_id_pack(this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_gem_port_stat_alarm_cleared_data_get_packed_length(const bcmolt_gpon_gem_port_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_stat_alarm_cleared_data_unpack(bcmolt_gpon_gem_port_stat_alarm_cleared_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_gpon_gem_port_stat_id_unpack(&this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_stat_alarm_cleared_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_stat_alarm_cleared_data_bounds_check(const bcmolt_gpon_gem_port_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_gem_port_stat_alarm_cleared_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        switch (this->stat)
+        {
+            case BCMOLT_GPON_GEM_PORT_STAT_ID_RX_PACKETS:
+                break;
+            case BCMOLT_GPON_GEM_PORT_STAT_ID_RX_BYTES:
+                break;
+            case BCMOLT_GPON_GEM_PORT_STAT_ID_TX_PACKETS:
+                break;
+            case BCMOLT_GPON_GEM_PORT_STAT_ID_TX_BYTES:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_GEM_PORT_STAT_ALARM_CLEARED_ID_STAT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_gem_port_stat_alarm_raised_data_set_default(bcmolt_gpon_gem_port_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        this->stat = BCMOLT_GPON_GEM_PORT_STAT_ID_RX_PACKETS;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_stat_alarm_raised_data_pack(const bcmolt_gpon_gem_port_stat_alarm_raised_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_gpon_gem_port_stat_id_pack(this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_gem_port_stat_alarm_raised_data_get_packed_length(const bcmolt_gpon_gem_port_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_stat_alarm_raised_data_unpack(bcmolt_gpon_gem_port_stat_alarm_raised_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_gpon_gem_port_stat_id_unpack(&this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_stat_alarm_raised_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_stat_alarm_raised_data_bounds_check(const bcmolt_gpon_gem_port_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_gem_port_stat_alarm_raised_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        switch (this->stat)
+        {
+            case BCMOLT_GPON_GEM_PORT_STAT_ID_RX_PACKETS:
+                break;
+            case BCMOLT_GPON_GEM_PORT_STAT_ID_RX_BYTES:
+                break;
+            case BCMOLT_GPON_GEM_PORT_STAT_ID_TX_PACKETS:
+                break;
+            case BCMOLT_GPON_GEM_PORT_STAT_ID_TX_BYTES:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_GEM_PORT_STAT_ALARM_RAISED_ID_STAT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_gem_port_auto_cfg_data_set_default(bcmolt_gpon_gem_port_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_AUTO_CFG_ID_CONFIGURATION_COMPLETED)) != 0)
+    {
+        this->configuration_completed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        this->stat_alarm_cleared = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        this->stat_alarm_raised = BCMOS_FALSE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_auto_cfg_data_pack(const bcmolt_gpon_gem_port_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_AUTO_CFG_ID_CONFIGURATION_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->configuration_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->stat_alarm_cleared))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->stat_alarm_raised))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_gem_port_auto_cfg_data_get_packed_length(const bcmolt_gpon_gem_port_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_AUTO_CFG_ID_CONFIGURATION_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_auto_cfg_data_unpack(bcmolt_gpon_gem_port_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_AUTO_CFG_ID_CONFIGURATION_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->configuration_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->stat_alarm_cleared))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->stat_alarm_raised))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_AUTO_CFG_ID_CONFIGURATION_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_auto_cfg_data_bounds_check(const bcmolt_gpon_gem_port_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_gem_port_auto_cfg_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_gem_port_set_state_data_set_default(bcmolt_gpon_gem_port_set_state_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_SET_STATE_ID_STATE)) != 0)
+    {
+        this->state = BCMOLT_GEM_PORT_OPERATION_ACTIVATE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_set_state_data_pack(const bcmolt_gpon_gem_port_set_state_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_SET_STATE_ID_STATE)) != 0)
+    {
+        if (!bcmolt_gem_port_operation_pack(this->state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_gem_port_set_state_data_get_packed_length(const bcmolt_gpon_gem_port_set_state_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_SET_STATE_ID_STATE)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_set_state_data_unpack(bcmolt_gpon_gem_port_set_state_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_SET_STATE_ID_STATE)) != 0)
+    {
+        if (!bcmolt_gem_port_operation_unpack(&this->state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_set_state_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_SET_STATE_ID_STATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_gem_port_set_state_data_bounds_check(const bcmolt_gpon_gem_port_set_state_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_gem_port_set_state_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_GEM_PORT_SET_STATE_ID_STATE)) != 0)
+    {
+        switch (this->state)
+        {
+            case BCMOLT_GEM_PORT_OPERATION_ACTIVATE:
+                break;
+            case BCMOLT_GEM_PORT_OPERATION_DEACTIVATE:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_GEM_PORT_SET_STATE_ID_STATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_iwf_key_set_default(bcmolt_gpon_iwf_key *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_KEY_ID_PON_NI)) != 0)
+    {
+        this->pon_ni = (bcmolt_gpon_ni) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_key_pack(const bcmolt_gpon_iwf_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, (uint8_t) this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_iwf_key_get_packed_length(const bcmolt_gpon_iwf_key *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_KEY_ID_PON_NI)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_key_unpack(bcmolt_gpon_iwf_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, (uint8_t *) &this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_key_bounds_check(const bcmolt_gpon_iwf_key *this, bcmolt_presence_mask fields_present, bcmolt_gpon_iwf_key_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_KEY_ID_PON_NI)) != 0)
+    {
+        if (this->pon_ni > (bcmolt_gpon_ni) 15)
+        {
+            *failed_prop = BCMOLT_GPON_IWF_KEY_ID_PON_NI;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_iwf_cfg_data_set_default(bcmolt_gpon_iwf_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_IWF_MODE)) != 0)
+    {
+        this->iwf_mode = BCMOLT_IWF_MODE_DIRECT_MAPPING_MODE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_US_TPID_PER_FLOW)) != 0)
+    {
+        this->us_tpid_per_flow.arr[0] = 33024U;
+        this->us_tpid_per_flow.arr[1] = 33024U;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_US_OTAG_DIRECT_TPID)) != 0)
+    {
+        this->us_otag_direct_tpid = 33024U;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_US_OTAG_DIRECT_PBIT)) != 0)
+    {
+        this->us_otag_direct_pbit = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_DS_TPID)) != 0)
+    {
+        this->ds_tpid.arr[0] = 33024U;
+        this->ds_tpid.arr[1] = 34984U;
+        this->ds_tpid.arr[2] = 37120U;
+        this->ds_tpid.arr[3] = 37376U;
+        this->ds_tpid.arr[4] = 33024U;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_MAC_TABLE_CONFIGURATION)) != 0)
+    {
+        this->mac_table_configuration.miss_fallback = BCMOLT_MAC_TABLE_MISS_FALLBACK_DROP;
+        this->mac_table_configuration.default_flow_id = (bcmolt_flow_id) 0;
+        this->mac_table_configuration.aging_time = 30;
+        this->mac_table_configuration.learning_mode = BCMOLT_MAC_TABLE_LEARNING_MODE_NORMAL;
+        this->mac_table_configuration.automatic_mac_learning = BCMOLT_CONTROL_STATE_DISABLE;
+        this->mac_table_configuration.automatic_mac_aging = BCMOLT_CONTROL_STATE_DISABLE;
+        this->mac_table_configuration.automatic_mac_move = BCMOLT_CONTROL_STATE_DISABLE;
+        this->mac_table_configuration.automatic_static_mode = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_DEBUG_FLOW_CONFIGURATION)) != 0)
+    {
+        this->debug_flow_configuration.learn_untagged_flow_vids = BCMOS_FALSE;
+        this->debug_flow_configuration.untagged_flow_shaping_ms_per_sec = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_MAC_TABLE_COUNT)) != 0)
+    {
+        this->mac_table_count = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_FORBIDDEN_VLAN_FLOW_GEM_RANGE_START)) != 0)
+    {
+        this->forbidden_vlan_flow_gem_range_start = 128;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_cfg_data_pack(const bcmolt_gpon_iwf_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_IWF_MODE)) != 0)
+    {
+        if (!bcmolt_iwf_mode_pack(this->iwf_mode, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_US_TPID_PER_FLOW)) != 0)
+    {
+        if (!bcmolt_arr_u16_2_hex_pack(&this->us_tpid_per_flow, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_US_OTAG_DIRECT_TPID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, this->us_otag_direct_tpid))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_US_OTAG_DIRECT_PBIT)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->us_otag_direct_pbit))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_DS_TPID)) != 0)
+    {
+        if (!bcmolt_arr_u16_5_hex_pack(&this->ds_tpid, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_MAC_TABLE_CONFIGURATION)) != 0)
+    {
+        if (!bcmolt_mac_table_configuration_pack(&this->mac_table_configuration, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_DEBUG_FLOW_CONFIGURATION)) != 0)
+    {
+        if (!bcmolt_gpon_iwf_debug_flow_config_pack(&this->debug_flow_configuration, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_MAC_TABLE_COUNT)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, this->mac_table_count))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_FORBIDDEN_VLAN_FLOW_GEM_RANGE_START)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, this->forbidden_vlan_flow_gem_range_start))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_iwf_cfg_data_get_packed_length(const bcmolt_gpon_iwf_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_IWF_MODE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_US_TPID_PER_FLOW)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_US_OTAG_DIRECT_TPID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_US_OTAG_DIRECT_PBIT)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_DS_TPID)) != 0)
+    {
+        count += 10;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_MAC_TABLE_CONFIGURATION)) != 0)
+    {
+        count += 12;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_DEBUG_FLOW_CONFIGURATION)) != 0)
+    {
+        count += 3;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_MAC_TABLE_COUNT)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_FORBIDDEN_VLAN_FLOW_GEM_RANGE_START)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_cfg_data_unpack(bcmolt_gpon_iwf_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_IWF_MODE)) != 0)
+    {
+        if (!bcmolt_iwf_mode_unpack(&this->iwf_mode, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_US_TPID_PER_FLOW)) != 0)
+    {
+        if (!bcmolt_arr_u16_2_hex_unpack(&this->us_tpid_per_flow, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_US_OTAG_DIRECT_TPID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, &this->us_otag_direct_tpid))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_US_OTAG_DIRECT_PBIT)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->us_otag_direct_pbit))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_DS_TPID)) != 0)
+    {
+        if (!bcmolt_arr_u16_5_hex_unpack(&this->ds_tpid, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_MAC_TABLE_CONFIGURATION)) != 0)
+    {
+        if (!bcmolt_mac_table_configuration_unpack(&this->mac_table_configuration, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_DEBUG_FLOW_CONFIGURATION)) != 0)
+    {
+        if (!bcmolt_gpon_iwf_debug_flow_config_unpack(&this->debug_flow_configuration, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_MAC_TABLE_COUNT)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, &this->mac_table_count))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_FORBIDDEN_VLAN_FLOW_GEM_RANGE_START)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, &this->forbidden_vlan_flow_gem_range_start))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_IWF_MODE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_US_TPID_PER_FLOW)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_US_OTAG_DIRECT_TPID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_US_OTAG_DIRECT_PBIT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_DS_TPID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 10))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_MAC_TABLE_CONFIGURATION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 12))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_DEBUG_FLOW_CONFIGURATION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 3))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_MAC_TABLE_COUNT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_FORBIDDEN_VLAN_FLOW_GEM_RANGE_START)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_cfg_data_bounds_check(const bcmolt_gpon_iwf_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_iwf_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_IWF_MODE)) != 0)
+    {
+        switch (this->iwf_mode)
+        {
+            case BCMOLT_IWF_MODE_DIRECT_MAPPING_MODE:
+                break;
+            case BCMOLT_IWF_MODE_PER_FLOW_MODE:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_IWF_CFG_ID_IWF_MODE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_US_TPID_PER_FLOW)) != 0)
+    {
+        if (!bcmolt_arr_u16_2_hex_bounds_check(&this->us_tpid_per_flow))
+        {
+            *failed_prop = BCMOLT_GPON_IWF_CFG_ID_US_TPID_PER_FLOW;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_US_OTAG_DIRECT_PBIT)) != 0)
+    {
+        if (this->us_otag_direct_pbit > 7)
+        {
+            *failed_prop = BCMOLT_GPON_IWF_CFG_ID_US_OTAG_DIRECT_PBIT;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_DS_TPID)) != 0)
+    {
+        if (!bcmolt_arr_u16_5_hex_bounds_check(&this->ds_tpid))
+        {
+            *failed_prop = BCMOLT_GPON_IWF_CFG_ID_DS_TPID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_MAC_TABLE_CONFIGURATION)) != 0)
+    {
+        if (!bcmolt_mac_table_configuration_bounds_check(&this->mac_table_configuration))
+        {
+            *failed_prop = BCMOLT_GPON_IWF_CFG_ID_MAC_TABLE_CONFIGURATION;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_CFG_ID_DEBUG_FLOW_CONFIGURATION)) != 0)
+    {
+        if (!bcmolt_gpon_iwf_debug_flow_config_bounds_check(&this->debug_flow_configuration))
+        {
+            *failed_prop = BCMOLT_GPON_IWF_CFG_ID_DEBUG_FLOW_CONFIGURATION;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_iwf_stat_data_set_default(bcmolt_gpon_iwf_stat_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ID_DS_HIT_EVENT)) != 0)
+    {
+        this->ds_hit_event = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ID_DS_MISS_EVENT)) != 0)
+    {
+        this->ds_miss_event = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ID_DS_DROP_DUE_TO_MISS_EVENT)) != 0)
+    {
+        this->ds_drop_due_to_miss_event = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ID_DS_DROP_DUE_TO_HIT_EVENT)) != 0)
+    {
+        this->ds_drop_due_to_hit_event = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ID_DS_DROP_TO_DISABLED_GEM)) != 0)
+    {
+        this->ds_drop_to_disabled_gem = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ID_NEW_MAC_DISCOVERED)) != 0)
+    {
+        this->new_mac_discovered = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ID_MOVE_EVENT)) != 0)
+    {
+        this->move_event = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ID_NEW_MAC_DROP_DUE_TO_FIFO_FULL)) != 0)
+    {
+        this->new_mac_drop_due_to_fifo_full = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_stat_data_pack(const bcmolt_gpon_iwf_stat_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ID_DS_HIT_EVENT)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->ds_hit_event))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ID_DS_MISS_EVENT)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->ds_miss_event))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ID_DS_DROP_DUE_TO_MISS_EVENT)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->ds_drop_due_to_miss_event))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ID_DS_DROP_DUE_TO_HIT_EVENT)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->ds_drop_due_to_hit_event))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ID_DS_DROP_TO_DISABLED_GEM)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->ds_drop_to_disabled_gem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ID_NEW_MAC_DISCOVERED)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->new_mac_discovered))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ID_MOVE_EVENT)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->move_event))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ID_NEW_MAC_DROP_DUE_TO_FIFO_FULL)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->new_mac_drop_due_to_fifo_full))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_iwf_stat_data_get_packed_length(const bcmolt_gpon_iwf_stat_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ID_DS_HIT_EVENT)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ID_DS_MISS_EVENT)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ID_DS_DROP_DUE_TO_MISS_EVENT)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ID_DS_DROP_DUE_TO_HIT_EVENT)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ID_DS_DROP_TO_DISABLED_GEM)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ID_NEW_MAC_DISCOVERED)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ID_MOVE_EVENT)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ID_NEW_MAC_DROP_DUE_TO_FIFO_FULL)) != 0)
+    {
+        count += 8;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_stat_data_unpack(bcmolt_gpon_iwf_stat_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ID_DS_HIT_EVENT)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->ds_hit_event))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ID_DS_MISS_EVENT)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->ds_miss_event))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ID_DS_DROP_DUE_TO_MISS_EVENT)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->ds_drop_due_to_miss_event))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ID_DS_DROP_DUE_TO_HIT_EVENT)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->ds_drop_due_to_hit_event))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ID_DS_DROP_TO_DISABLED_GEM)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->ds_drop_to_disabled_gem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ID_NEW_MAC_DISCOVERED)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->new_mac_discovered))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ID_MOVE_EVENT)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->move_event))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ID_NEW_MAC_DROP_DUE_TO_FIFO_FULL)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->new_mac_drop_due_to_fifo_full))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_stat_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ID_DS_HIT_EVENT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ID_DS_MISS_EVENT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ID_DS_DROP_DUE_TO_MISS_EVENT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ID_DS_DROP_DUE_TO_HIT_EVENT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ID_DS_DROP_TO_DISABLED_GEM)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ID_NEW_MAC_DISCOVERED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ID_MOVE_EVENT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ID_NEW_MAC_DROP_DUE_TO_FIFO_FULL)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_stat_data_bounds_check(const bcmolt_gpon_iwf_stat_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_iwf_stat_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_iwf_stat_cfg_data_set_default(bcmolt_gpon_iwf_stat_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_CFG_ID_CFG)) != 0)
+    {
+        this->cfg.trigger.type = BCMOLT_STAT_CONDITION_TYPE_NONE;
+        this->cfg.soak.active_soak_time = 0;
+        this->cfg.soak.clear_soak_time = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_stat_cfg_data_pack(const bcmolt_gpon_iwf_stat_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_pack(&this->cfg, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_iwf_stat_cfg_data_get_packed_length(const bcmolt_gpon_iwf_stat_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_CFG_ID_CFG)) != 0)
+    {
+        count += bcmolt_stat_alarm_config_get_packed_length(&this->cfg);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_stat_cfg_data_unpack(bcmolt_gpon_iwf_stat_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_unpack(&this->cfg, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_stat_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_stat_cfg_data_bounds_check(const bcmolt_gpon_iwf_stat_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_iwf_stat_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_bounds_check(&this->cfg))
+        {
+            *failed_prop = BCMOLT_GPON_IWF_STAT_CFG_ID_CFG;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_iwf_scan_mac_table_completed_data_set_default(bcmolt_gpon_iwf_scan_mac_table_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_SCAN_MAC_TABLE_COMPLETED_ID_MAC_ADDRESS)) != 0)
+    {
+        bcmos_mac_address_init(&this->mac_address);
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_SCAN_MAC_TABLE_COMPLETED_ID_ENTRIES)) != 0)
+    {
+        this->entries.len = 0;
+        this->entries.val = NULL;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_scan_mac_table_completed_data_pack(const bcmolt_gpon_iwf_scan_mac_table_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_SCAN_MAC_TABLE_COMPLETED_ID_MAC_ADDRESS)) != 0)
+    {
+        if (!bcmolt_buf_write_mac_address(buf, this->mac_address))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_SCAN_MAC_TABLE_COMPLETED_ID_ENTRIES)) != 0)
+    {
+        if (!bcmolt_gpon_mac_table_scan_result_list_u16_pack(&this->entries, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_iwf_scan_mac_table_completed_data_get_packed_length(const bcmolt_gpon_iwf_scan_mac_table_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_SCAN_MAC_TABLE_COMPLETED_ID_MAC_ADDRESS)) != 0)
+    {
+        count += 6;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_SCAN_MAC_TABLE_COMPLETED_ID_ENTRIES)) != 0)
+    {
+        count += bcmolt_gpon_mac_table_scan_result_list_u16_get_packed_length(&this->entries);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_scan_mac_table_completed_data_unpack(bcmolt_gpon_iwf_scan_mac_table_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_SCAN_MAC_TABLE_COMPLETED_ID_MAC_ADDRESS)) != 0)
+    {
+        if (!bcmolt_buf_read_mac_address(buf, &this->mac_address))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_SCAN_MAC_TABLE_COMPLETED_ID_ENTRIES)) != 0)
+    {
+        if (!bcmolt_gpon_mac_table_scan_result_list_u16_unpack(&this->entries, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_scan_mac_table_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_SCAN_MAC_TABLE_COMPLETED_ID_MAC_ADDRESS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 6))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_SCAN_MAC_TABLE_COMPLETED_ID_ENTRIES)) != 0)
+    {
+        if (!bcmolt_gpon_mac_table_scan_result_list_u16_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_scan_mac_table_completed_data_bounds_check(const bcmolt_gpon_iwf_scan_mac_table_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_iwf_scan_mac_table_completed_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_SCAN_MAC_TABLE_COMPLETED_ID_ENTRIES)) != 0)
+    {
+        if (!bcmolt_gpon_mac_table_scan_result_list_u16_bounds_check(&this->entries))
+        {
+            *failed_prop = BCMOLT_GPON_IWF_SCAN_MAC_TABLE_COMPLETED_ID_ENTRIES;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_iwf_stat_alarm_cleared_data_set_default(bcmolt_gpon_iwf_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        this->stat = BCMOLT_GPON_IWF_STAT_ID_DS_HIT_EVENT;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_stat_alarm_cleared_data_pack(const bcmolt_gpon_iwf_stat_alarm_cleared_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_gpon_iwf_stat_id_pack(this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_iwf_stat_alarm_cleared_data_get_packed_length(const bcmolt_gpon_iwf_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_stat_alarm_cleared_data_unpack(bcmolt_gpon_iwf_stat_alarm_cleared_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_gpon_iwf_stat_id_unpack(&this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_stat_alarm_cleared_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_stat_alarm_cleared_data_bounds_check(const bcmolt_gpon_iwf_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_iwf_stat_alarm_cleared_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        switch (this->stat)
+        {
+            case BCMOLT_GPON_IWF_STAT_ID_DS_HIT_EVENT:
+                break;
+            case BCMOLT_GPON_IWF_STAT_ID_DS_MISS_EVENT:
+                break;
+            case BCMOLT_GPON_IWF_STAT_ID_DS_DROP_DUE_TO_MISS_EVENT:
+                break;
+            case BCMOLT_GPON_IWF_STAT_ID_DS_DROP_DUE_TO_HIT_EVENT:
+                break;
+            case BCMOLT_GPON_IWF_STAT_ID_DS_DROP_TO_DISABLED_GEM:
+                break;
+            case BCMOLT_GPON_IWF_STAT_ID_NEW_MAC_DISCOVERED:
+                break;
+            case BCMOLT_GPON_IWF_STAT_ID_MOVE_EVENT:
+                break;
+            case BCMOLT_GPON_IWF_STAT_ID_NEW_MAC_DROP_DUE_TO_FIFO_FULL:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_IWF_STAT_ALARM_CLEARED_ID_STAT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_iwf_stat_alarm_raised_data_set_default(bcmolt_gpon_iwf_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        this->stat = BCMOLT_GPON_IWF_STAT_ID_DS_HIT_EVENT;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_stat_alarm_raised_data_pack(const bcmolt_gpon_iwf_stat_alarm_raised_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_gpon_iwf_stat_id_pack(this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_iwf_stat_alarm_raised_data_get_packed_length(const bcmolt_gpon_iwf_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_stat_alarm_raised_data_unpack(bcmolt_gpon_iwf_stat_alarm_raised_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_gpon_iwf_stat_id_unpack(&this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_stat_alarm_raised_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_stat_alarm_raised_data_bounds_check(const bcmolt_gpon_iwf_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_iwf_stat_alarm_raised_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        switch (this->stat)
+        {
+            case BCMOLT_GPON_IWF_STAT_ID_DS_HIT_EVENT:
+                break;
+            case BCMOLT_GPON_IWF_STAT_ID_DS_MISS_EVENT:
+                break;
+            case BCMOLT_GPON_IWF_STAT_ID_DS_DROP_DUE_TO_MISS_EVENT:
+                break;
+            case BCMOLT_GPON_IWF_STAT_ID_DS_DROP_DUE_TO_HIT_EVENT:
+                break;
+            case BCMOLT_GPON_IWF_STAT_ID_DS_DROP_TO_DISABLED_GEM:
+                break;
+            case BCMOLT_GPON_IWF_STAT_ID_NEW_MAC_DISCOVERED:
+                break;
+            case BCMOLT_GPON_IWF_STAT_ID_MOVE_EVENT:
+                break;
+            case BCMOLT_GPON_IWF_STAT_ID_NEW_MAC_DROP_DUE_TO_FIFO_FULL:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_IWF_STAT_ALARM_RAISED_ID_STAT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_iwf_auto_cfg_data_set_default(bcmolt_gpon_iwf_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_AUTO_CFG_ID_FLUSH_MAC_TABLE_COMPLETED)) != 0)
+    {
+        this->flush_mac_table_completed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_AUTO_CFG_ID_SCAN_MAC_TABLE_COMPLETED)) != 0)
+    {
+        this->scan_mac_table_completed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        this->stat_alarm_cleared = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        this->stat_alarm_raised = BCMOS_FALSE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_auto_cfg_data_pack(const bcmolt_gpon_iwf_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_AUTO_CFG_ID_FLUSH_MAC_TABLE_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->flush_mac_table_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_AUTO_CFG_ID_SCAN_MAC_TABLE_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->scan_mac_table_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->stat_alarm_cleared))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->stat_alarm_raised))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_iwf_auto_cfg_data_get_packed_length(const bcmolt_gpon_iwf_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_AUTO_CFG_ID_FLUSH_MAC_TABLE_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_AUTO_CFG_ID_SCAN_MAC_TABLE_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_auto_cfg_data_unpack(bcmolt_gpon_iwf_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_AUTO_CFG_ID_FLUSH_MAC_TABLE_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->flush_mac_table_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_AUTO_CFG_ID_SCAN_MAC_TABLE_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->scan_mac_table_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->stat_alarm_cleared))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->stat_alarm_raised))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_AUTO_CFG_ID_FLUSH_MAC_TABLE_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_AUTO_CFG_ID_SCAN_MAC_TABLE_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_auto_cfg_data_bounds_check(const bcmolt_gpon_iwf_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_iwf_auto_cfg_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_iwf_flush_mac_table_data_set_default(bcmolt_gpon_iwf_flush_mac_table_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_FLUSH_MAC_TABLE_ID_CONTROL)) != 0)
+    {
+        this->control = BCMOLT_FLUSH_MAC_TABLE_OPTION_ALL;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_FLUSH_MAC_TABLE_ID_VID)) != 0)
+    {
+        this->vid = (bcmolt_vlan_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_FLUSH_MAC_TABLE_ID_FLOW_ID)) != 0)
+    {
+        this->flow_id = (bcmolt_flow_id) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_flush_mac_table_data_pack(const bcmolt_gpon_iwf_flush_mac_table_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_FLUSH_MAC_TABLE_ID_CONTROL)) != 0)
+    {
+        if (!bcmolt_flush_mac_table_option_pack(this->control, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_FLUSH_MAC_TABLE_ID_VID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->vid))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_FLUSH_MAC_TABLE_ID_FLOW_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->flow_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_iwf_flush_mac_table_data_get_packed_length(const bcmolt_gpon_iwf_flush_mac_table_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_FLUSH_MAC_TABLE_ID_CONTROL)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_FLUSH_MAC_TABLE_ID_VID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_FLUSH_MAC_TABLE_ID_FLOW_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_flush_mac_table_data_unpack(bcmolt_gpon_iwf_flush_mac_table_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_FLUSH_MAC_TABLE_ID_CONTROL)) != 0)
+    {
+        if (!bcmolt_flush_mac_table_option_unpack(&this->control, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_FLUSH_MAC_TABLE_ID_VID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->vid))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_FLUSH_MAC_TABLE_ID_FLOW_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->flow_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_flush_mac_table_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_FLUSH_MAC_TABLE_ID_CONTROL)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_FLUSH_MAC_TABLE_ID_VID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_FLUSH_MAC_TABLE_ID_FLOW_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_flush_mac_table_data_bounds_check(const bcmolt_gpon_iwf_flush_mac_table_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_iwf_flush_mac_table_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_FLUSH_MAC_TABLE_ID_CONTROL)) != 0)
+    {
+        switch (this->control)
+        {
+            case BCMOLT_FLUSH_MAC_TABLE_OPTION_ALL:
+                break;
+            case BCMOLT_FLUSH_MAC_TABLE_OPTION_PER_VID:
+                break;
+            case BCMOLT_FLUSH_MAC_TABLE_OPTION_PER_FLOW:
+                break;
+            case BCMOLT_FLUSH_MAC_TABLE_OPTION_VID_PLUS_FLOW:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_IWF_FLUSH_MAC_TABLE_ID_CONTROL;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_FLUSH_MAC_TABLE_ID_VID)) != 0)
+    {
+        if (this->vid > (bcmolt_vlan_id) 4095)
+        {
+            *failed_prop = BCMOLT_GPON_IWF_FLUSH_MAC_TABLE_ID_VID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_FLUSH_MAC_TABLE_ID_FLOW_ID)) != 0)
+    {
+        if (this->flow_id > (bcmolt_flow_id) 4095)
+        {
+            *failed_prop = BCMOLT_GPON_IWF_FLUSH_MAC_TABLE_ID_FLOW_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_iwf_scan_mac_table_data_set_default(bcmolt_gpon_iwf_scan_mac_table_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_SCAN_MAC_TABLE_ID_MAC_ADDRESS)) != 0)
+    {
+        bcmos_mac_address_init(&this->mac_address);
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_scan_mac_table_data_pack(const bcmolt_gpon_iwf_scan_mac_table_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_SCAN_MAC_TABLE_ID_MAC_ADDRESS)) != 0)
+    {
+        if (!bcmolt_buf_write_mac_address(buf, this->mac_address))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_iwf_scan_mac_table_data_get_packed_length(const bcmolt_gpon_iwf_scan_mac_table_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_SCAN_MAC_TABLE_ID_MAC_ADDRESS)) != 0)
+    {
+        count += 6;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_scan_mac_table_data_unpack(bcmolt_gpon_iwf_scan_mac_table_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_SCAN_MAC_TABLE_ID_MAC_ADDRESS)) != 0)
+    {
+        if (!bcmolt_buf_read_mac_address(buf, &this->mac_address))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_scan_mac_table_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_SCAN_MAC_TABLE_ID_MAC_ADDRESS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 6))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_scan_mac_table_data_bounds_check(const bcmolt_gpon_iwf_scan_mac_table_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_iwf_scan_mac_table_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_iwf_ds_egress_flow_key_set_default(bcmolt_gpon_iwf_ds_egress_flow_key *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_EGRESS_FLOW_KEY_ID_PON_NI)) != 0)
+    {
+        this->pon_ni = (bcmolt_gpon_ni) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_EGRESS_FLOW_KEY_ID_FLOW_ID)) != 0)
+    {
+        this->flow_id = (bcmolt_flow_id) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_ds_egress_flow_key_pack(const bcmolt_gpon_iwf_ds_egress_flow_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_EGRESS_FLOW_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, (uint8_t) this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_EGRESS_FLOW_KEY_ID_FLOW_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->flow_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_iwf_ds_egress_flow_key_get_packed_length(const bcmolt_gpon_iwf_ds_egress_flow_key *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_EGRESS_FLOW_KEY_ID_PON_NI)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_EGRESS_FLOW_KEY_ID_FLOW_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_ds_egress_flow_key_unpack(bcmolt_gpon_iwf_ds_egress_flow_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_EGRESS_FLOW_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, (uint8_t *) &this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_EGRESS_FLOW_KEY_ID_FLOW_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->flow_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_ds_egress_flow_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_EGRESS_FLOW_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_EGRESS_FLOW_KEY_ID_FLOW_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_ds_egress_flow_key_bounds_check(const bcmolt_gpon_iwf_ds_egress_flow_key *this, bcmolt_presence_mask fields_present, bcmolt_gpon_iwf_ds_egress_flow_key_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_EGRESS_FLOW_KEY_ID_PON_NI)) != 0)
+    {
+        if (this->pon_ni > (bcmolt_gpon_ni) 15)
+        {
+            *failed_prop = BCMOLT_GPON_IWF_DS_EGRESS_FLOW_KEY_ID_PON_NI;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_EGRESS_FLOW_KEY_ID_FLOW_ID)) != 0)
+    {
+        if (this->flow_id > (bcmolt_flow_id) 4095)
+        {
+            *failed_prop = BCMOLT_GPON_IWF_DS_EGRESS_FLOW_KEY_ID_FLOW_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_iwf_ds_egress_flow_cfg_data_set_default(bcmolt_gpon_iwf_ds_egress_flow_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_EGRESS_FLOW_CFG_ID_GEM_PORT)) != 0)
+    {
+        this->gem_port = (bcmolt_gpon_gem_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_EGRESS_FLOW_CFG_ID_PBIT_CONTROL)) != 0)
+    {
+        this->pbit_control = BCMOS_FALSE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_ds_egress_flow_cfg_data_pack(const bcmolt_gpon_iwf_ds_egress_flow_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_EGRESS_FLOW_CFG_ID_GEM_PORT)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->gem_port))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_EGRESS_FLOW_CFG_ID_PBIT_CONTROL)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->pbit_control))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_iwf_ds_egress_flow_cfg_data_get_packed_length(const bcmolt_gpon_iwf_ds_egress_flow_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_EGRESS_FLOW_CFG_ID_GEM_PORT)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_EGRESS_FLOW_CFG_ID_PBIT_CONTROL)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_ds_egress_flow_cfg_data_unpack(bcmolt_gpon_iwf_ds_egress_flow_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_EGRESS_FLOW_CFG_ID_GEM_PORT)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->gem_port))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_EGRESS_FLOW_CFG_ID_PBIT_CONTROL)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->pbit_control))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_ds_egress_flow_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_EGRESS_FLOW_CFG_ID_GEM_PORT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_EGRESS_FLOW_CFG_ID_PBIT_CONTROL)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_ds_egress_flow_cfg_data_bounds_check(const bcmolt_gpon_iwf_ds_egress_flow_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_iwf_ds_egress_flow_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_EGRESS_FLOW_CFG_ID_GEM_PORT)) != 0)
+    {
+        if (this->gem_port > (bcmolt_gpon_gem_id) 4095)
+        {
+            *failed_prop = BCMOLT_GPON_IWF_DS_EGRESS_FLOW_CFG_ID_GEM_PORT;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_iwf_ds_ingress_flow_key_set_default(bcmolt_gpon_iwf_ds_ingress_flow_key *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_INGRESS_FLOW_KEY_ID_PON_NI)) != 0)
+    {
+        this->pon_ni = (bcmolt_gpon_ni) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_INGRESS_FLOW_KEY_ID_VLAN_ID)) != 0)
+    {
+        this->vlan_id = (bcmolt_vlan_id) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_ds_ingress_flow_key_pack(const bcmolt_gpon_iwf_ds_ingress_flow_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_INGRESS_FLOW_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, (uint8_t) this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_INGRESS_FLOW_KEY_ID_VLAN_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->vlan_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_iwf_ds_ingress_flow_key_get_packed_length(const bcmolt_gpon_iwf_ds_ingress_flow_key *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_INGRESS_FLOW_KEY_ID_PON_NI)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_INGRESS_FLOW_KEY_ID_VLAN_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_ds_ingress_flow_key_unpack(bcmolt_gpon_iwf_ds_ingress_flow_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_INGRESS_FLOW_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, (uint8_t *) &this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_INGRESS_FLOW_KEY_ID_VLAN_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->vlan_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_ds_ingress_flow_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_INGRESS_FLOW_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_INGRESS_FLOW_KEY_ID_VLAN_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_ds_ingress_flow_key_bounds_check(const bcmolt_gpon_iwf_ds_ingress_flow_key *this, bcmolt_presence_mask fields_present, bcmolt_gpon_iwf_ds_ingress_flow_key_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_INGRESS_FLOW_KEY_ID_PON_NI)) != 0)
+    {
+        if (this->pon_ni > (bcmolt_gpon_ni) 15)
+        {
+            *failed_prop = BCMOLT_GPON_IWF_DS_INGRESS_FLOW_KEY_ID_PON_NI;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_INGRESS_FLOW_KEY_ID_VLAN_ID)) != 0)
+    {
+        if (this->vlan_id > (bcmolt_vlan_id) 4095)
+        {
+            *failed_prop = BCMOLT_GPON_IWF_DS_INGRESS_FLOW_KEY_ID_VLAN_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_iwf_ds_ingress_flow_cfg_data_set_default(bcmolt_gpon_iwf_ds_ingress_flow_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_INGRESS_FLOW_CFG_ID_MAPPING_METHOD)) != 0)
+    {
+        this->mapping_method = BCMOLT_VLAN_TO_FLOW_MAPPING_METHOD_VID;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_INGRESS_FLOW_CFG_ID_MAPPING_TAG)) != 0)
+    {
+        this->mapping_tag = BCMOLT_MAPPING_TAG_METHOD_OUTER_VID;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_INGRESS_FLOW_CFG_ID_VLAN_ACTION)) != 0)
+    {
+        this->vlan_action = BCMOLT_DS_VLAN_ACTION_REMOVE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_ds_ingress_flow_cfg_data_pack(const bcmolt_gpon_iwf_ds_ingress_flow_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_INGRESS_FLOW_CFG_ID_MAPPING_METHOD)) != 0)
+    {
+        if (!bcmolt_vlan_to_flow_mapping_method_pack(this->mapping_method, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_INGRESS_FLOW_CFG_ID_MAPPING_TAG)) != 0)
+    {
+        if (!bcmolt_mapping_tag_method_pack(this->mapping_tag, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_INGRESS_FLOW_CFG_ID_VLAN_ACTION)) != 0)
+    {
+        if (!bcmolt_ds_vlan_action_pack(this->vlan_action, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_iwf_ds_ingress_flow_cfg_data_get_packed_length(const bcmolt_gpon_iwf_ds_ingress_flow_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_INGRESS_FLOW_CFG_ID_MAPPING_METHOD)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_INGRESS_FLOW_CFG_ID_MAPPING_TAG)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_INGRESS_FLOW_CFG_ID_VLAN_ACTION)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_ds_ingress_flow_cfg_data_unpack(bcmolt_gpon_iwf_ds_ingress_flow_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_INGRESS_FLOW_CFG_ID_MAPPING_METHOD)) != 0)
+    {
+        if (!bcmolt_vlan_to_flow_mapping_method_unpack(&this->mapping_method, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_INGRESS_FLOW_CFG_ID_MAPPING_TAG)) != 0)
+    {
+        if (!bcmolt_mapping_tag_method_unpack(&this->mapping_tag, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_INGRESS_FLOW_CFG_ID_VLAN_ACTION)) != 0)
+    {
+        if (!bcmolt_ds_vlan_action_unpack(&this->vlan_action, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_ds_ingress_flow_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_INGRESS_FLOW_CFG_ID_MAPPING_METHOD)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_INGRESS_FLOW_CFG_ID_MAPPING_TAG)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_INGRESS_FLOW_CFG_ID_VLAN_ACTION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_ds_ingress_flow_cfg_data_bounds_check(const bcmolt_gpon_iwf_ds_ingress_flow_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_iwf_ds_ingress_flow_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_INGRESS_FLOW_CFG_ID_MAPPING_METHOD)) != 0)
+    {
+        switch (this->mapping_method)
+        {
+            case BCMOLT_VLAN_TO_FLOW_MAPPING_METHOD_VID:
+                break;
+            case BCMOLT_VLAN_TO_FLOW_MAPPING_METHOD_MACPLUSVID:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_IWF_DS_INGRESS_FLOW_CFG_ID_MAPPING_METHOD;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_INGRESS_FLOW_CFG_ID_MAPPING_TAG)) != 0)
+    {
+        switch (this->mapping_tag)
+        {
+            case BCMOLT_MAPPING_TAG_METHOD_OUTER_VID:
+                break;
+            case BCMOLT_MAPPING_TAG_METHOD_INNER_VID:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_IWF_DS_INGRESS_FLOW_CFG_ID_MAPPING_TAG;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_DS_INGRESS_FLOW_CFG_ID_VLAN_ACTION)) != 0)
+    {
+        switch (this->vlan_action)
+        {
+            case BCMOLT_DS_VLAN_ACTION_REMOVE:
+                break;
+            case BCMOLT_DS_VLAN_ACTION_TRANSPARENT:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_IWF_DS_INGRESS_FLOW_CFG_ID_VLAN_ACTION;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_iwf_mac_table_key_set_default(bcmolt_gpon_iwf_mac_table_key *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_KEY_ID_PON_NI)) != 0)
+    {
+        this->pon_ni = (bcmolt_gpon_ni) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_KEY_ID_MAC_ADDRESS)) != 0)
+    {
+        bcmos_mac_address_init(&this->mac_address);
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_KEY_ID_VLAN)) != 0)
+    {
+        this->vlan = (bcmolt_vlan_id) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_mac_table_key_pack(const bcmolt_gpon_iwf_mac_table_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, (uint8_t) this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_KEY_ID_MAC_ADDRESS)) != 0)
+    {
+        if (!bcmolt_buf_write_mac_address(buf, this->mac_address))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_KEY_ID_VLAN)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->vlan))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_iwf_mac_table_key_get_packed_length(const bcmolt_gpon_iwf_mac_table_key *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_KEY_ID_PON_NI)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_KEY_ID_MAC_ADDRESS)) != 0)
+    {
+        count += 6;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_KEY_ID_VLAN)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_mac_table_key_unpack(bcmolt_gpon_iwf_mac_table_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, (uint8_t *) &this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_KEY_ID_MAC_ADDRESS)) != 0)
+    {
+        if (!bcmolt_buf_read_mac_address(buf, &this->mac_address))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_KEY_ID_VLAN)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->vlan))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_mac_table_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_KEY_ID_MAC_ADDRESS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 6))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_KEY_ID_VLAN)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_mac_table_key_bounds_check(const bcmolt_gpon_iwf_mac_table_key *this, bcmolt_presence_mask fields_present, bcmolt_gpon_iwf_mac_table_key_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_KEY_ID_PON_NI)) != 0)
+    {
+        if (this->pon_ni > (bcmolt_gpon_ni) 15)
+        {
+            *failed_prop = BCMOLT_GPON_IWF_MAC_TABLE_KEY_ID_PON_NI;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_iwf_mac_table_cfg_data_set_default(bcmolt_gpon_iwf_mac_table_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_FLOW_ID)) != 0)
+    {
+        this->flow_id = (bcmolt_flow_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_STAT)) != 0)
+    {
+        this->stat = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_GEM_PORT_ID)) != 0)
+    {
+        this->gem_port_id = (bcmolt_gpon_gem_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_ONU_ID)) != 0)
+    {
+        this->onu_id = (bcmolt_gpon_onu_id) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_mac_table_cfg_data_pack(const bcmolt_gpon_iwf_mac_table_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_FLOW_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->flow_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_STAT)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->stat))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_GEM_PORT_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->gem_port_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->onu_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_iwf_mac_table_cfg_data_get_packed_length(const bcmolt_gpon_iwf_mac_table_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_FLOW_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_STAT)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_GEM_PORT_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_ONU_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_mac_table_cfg_data_unpack(bcmolt_gpon_iwf_mac_table_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_FLOW_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->flow_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_STAT)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->stat))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_GEM_PORT_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->gem_port_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->onu_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_mac_table_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_FLOW_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_STAT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_GEM_PORT_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_mac_table_cfg_data_bounds_check(const bcmolt_gpon_iwf_mac_table_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_iwf_mac_table_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_FLOW_ID)) != 0)
+    {
+        if (this->flow_id > (bcmolt_flow_id) 4095)
+        {
+            *failed_prop = BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_FLOW_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_GEM_PORT_ID)) != 0)
+    {
+        if (this->gem_port_id > (bcmolt_gpon_gem_id) 4095)
+        {
+            *failed_prop = BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_GEM_PORT_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_ONU_ID)) != 0)
+    {
+        if (this->onu_id > (bcmolt_gpon_onu_id) 127)
+        {
+            *failed_prop = BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_ONU_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_iwf_mac_table_mac_dropped_data_set_default(bcmolt_gpon_iwf_mac_table_mac_dropped_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_MAC_DROPPED_ID_FLOW_ID)) != 0)
+    {
+        this->flow_id = (bcmolt_flow_id) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_mac_table_mac_dropped_data_pack(const bcmolt_gpon_iwf_mac_table_mac_dropped_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_MAC_DROPPED_ID_FLOW_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->flow_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_iwf_mac_table_mac_dropped_data_get_packed_length(const bcmolt_gpon_iwf_mac_table_mac_dropped_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_MAC_DROPPED_ID_FLOW_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_mac_table_mac_dropped_data_unpack(bcmolt_gpon_iwf_mac_table_mac_dropped_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_MAC_DROPPED_ID_FLOW_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->flow_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_mac_table_mac_dropped_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_MAC_DROPPED_ID_FLOW_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_mac_table_mac_dropped_data_bounds_check(const bcmolt_gpon_iwf_mac_table_mac_dropped_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_iwf_mac_table_mac_dropped_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_MAC_DROPPED_ID_FLOW_ID)) != 0)
+    {
+        if (this->flow_id > (bcmolt_flow_id) 4095)
+        {
+            *failed_prop = BCMOLT_GPON_IWF_MAC_TABLE_MAC_DROPPED_ID_FLOW_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_iwf_mac_table_mac_move_data_set_default(bcmolt_gpon_iwf_mac_table_mac_move_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_MAC_MOVE_ID_OLD_FLOW_ID)) != 0)
+    {
+        this->old_flow_id = (bcmolt_flow_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_MAC_MOVE_ID_NEW_FLOW_ID)) != 0)
+    {
+        this->new_flow_id = (bcmolt_flow_id) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_mac_table_mac_move_data_pack(const bcmolt_gpon_iwf_mac_table_mac_move_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_MAC_MOVE_ID_OLD_FLOW_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->old_flow_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_MAC_MOVE_ID_NEW_FLOW_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->new_flow_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_iwf_mac_table_mac_move_data_get_packed_length(const bcmolt_gpon_iwf_mac_table_mac_move_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_MAC_MOVE_ID_OLD_FLOW_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_MAC_MOVE_ID_NEW_FLOW_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_mac_table_mac_move_data_unpack(bcmolt_gpon_iwf_mac_table_mac_move_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_MAC_MOVE_ID_OLD_FLOW_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->old_flow_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_MAC_MOVE_ID_NEW_FLOW_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->new_flow_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_mac_table_mac_move_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_MAC_MOVE_ID_OLD_FLOW_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_MAC_MOVE_ID_NEW_FLOW_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_mac_table_mac_move_data_bounds_check(const bcmolt_gpon_iwf_mac_table_mac_move_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_iwf_mac_table_mac_move_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_MAC_MOVE_ID_OLD_FLOW_ID)) != 0)
+    {
+        if (this->old_flow_id > (bcmolt_flow_id) 4095)
+        {
+            *failed_prop = BCMOLT_GPON_IWF_MAC_TABLE_MAC_MOVE_ID_OLD_FLOW_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_MAC_MOVE_ID_NEW_FLOW_ID)) != 0)
+    {
+        if (this->new_flow_id > (bcmolt_flow_id) 4095)
+        {
+            *failed_prop = BCMOLT_GPON_IWF_MAC_TABLE_MAC_MOVE_ID_NEW_FLOW_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_iwf_mac_table_new_mac_data_set_default(bcmolt_gpon_iwf_mac_table_new_mac_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_NEW_MAC_ID_FLOW_ID)) != 0)
+    {
+        this->flow_id = (bcmolt_flow_id) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_mac_table_new_mac_data_pack(const bcmolt_gpon_iwf_mac_table_new_mac_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_NEW_MAC_ID_FLOW_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->flow_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_iwf_mac_table_new_mac_data_get_packed_length(const bcmolt_gpon_iwf_mac_table_new_mac_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_NEW_MAC_ID_FLOW_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_mac_table_new_mac_data_unpack(bcmolt_gpon_iwf_mac_table_new_mac_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_NEW_MAC_ID_FLOW_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->flow_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_mac_table_new_mac_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_NEW_MAC_ID_FLOW_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_mac_table_new_mac_data_bounds_check(const bcmolt_gpon_iwf_mac_table_new_mac_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_iwf_mac_table_new_mac_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_NEW_MAC_ID_FLOW_ID)) != 0)
+    {
+        if (this->flow_id > (bcmolt_flow_id) 4095)
+        {
+            *failed_prop = BCMOLT_GPON_IWF_MAC_TABLE_NEW_MAC_ID_FLOW_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_iwf_mac_table_auto_cfg_data_set_default(bcmolt_gpon_iwf_mac_table_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID_MAC_AGED)) != 0)
+    {
+        this->mac_aged = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID_MAC_DROPPED)) != 0)
+    {
+        this->mac_dropped = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID_MAC_MOVE)) != 0)
+    {
+        this->mac_move = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID_NEW_MAC)) != 0)
+    {
+        this->new_mac = BCMOS_FALSE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_mac_table_auto_cfg_data_pack(const bcmolt_gpon_iwf_mac_table_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID_MAC_AGED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->mac_aged))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID_MAC_DROPPED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->mac_dropped))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID_MAC_MOVE)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->mac_move))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID_NEW_MAC)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->new_mac))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_iwf_mac_table_auto_cfg_data_get_packed_length(const bcmolt_gpon_iwf_mac_table_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID_MAC_AGED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID_MAC_DROPPED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID_MAC_MOVE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID_NEW_MAC)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_mac_table_auto_cfg_data_unpack(bcmolt_gpon_iwf_mac_table_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID_MAC_AGED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->mac_aged))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID_MAC_DROPPED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->mac_dropped))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID_MAC_MOVE)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->mac_move))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID_NEW_MAC)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->new_mac))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_mac_table_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID_MAC_AGED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID_MAC_DROPPED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID_MAC_MOVE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID_NEW_MAC)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_mac_table_auto_cfg_data_bounds_check(const bcmolt_gpon_iwf_mac_table_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_iwf_mac_table_auto_cfg_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_iwf_us_flow_key_set_default(bcmolt_gpon_iwf_us_flow_key *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_US_FLOW_KEY_ID_PON_NI)) != 0)
+    {
+        this->pon_ni = (bcmolt_gpon_ni) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_US_FLOW_KEY_ID_GEM_PORT_ID)) != 0)
+    {
+        this->gem_port_id = (bcmolt_gpon_gem_id) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_us_flow_key_pack(const bcmolt_gpon_iwf_us_flow_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_US_FLOW_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, (uint8_t) this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_US_FLOW_KEY_ID_GEM_PORT_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->gem_port_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_iwf_us_flow_key_get_packed_length(const bcmolt_gpon_iwf_us_flow_key *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_US_FLOW_KEY_ID_PON_NI)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_US_FLOW_KEY_ID_GEM_PORT_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_us_flow_key_unpack(bcmolt_gpon_iwf_us_flow_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_US_FLOW_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, (uint8_t *) &this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_US_FLOW_KEY_ID_GEM_PORT_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->gem_port_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_us_flow_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_US_FLOW_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_US_FLOW_KEY_ID_GEM_PORT_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_us_flow_key_bounds_check(const bcmolt_gpon_iwf_us_flow_key *this, bcmolt_presence_mask fields_present, bcmolt_gpon_iwf_us_flow_key_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_US_FLOW_KEY_ID_PON_NI)) != 0)
+    {
+        if (this->pon_ni > (bcmolt_gpon_ni) 15)
+        {
+            *failed_prop = BCMOLT_GPON_IWF_US_FLOW_KEY_ID_PON_NI;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_US_FLOW_KEY_ID_GEM_PORT_ID)) != 0)
+    {
+        if (this->gem_port_id > (bcmolt_gpon_gem_id) 4095)
+        {
+            *failed_prop = BCMOLT_GPON_IWF_US_FLOW_KEY_ID_GEM_PORT_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_iwf_us_flow_cfg_data_set_default(bcmolt_gpon_iwf_us_flow_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_US_FLOW_CFG_ID_FLOW_ID)) != 0)
+    {
+        this->flow_id = (bcmolt_flow_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_US_FLOW_CFG_ID_MAC_LEARNING)) != 0)
+    {
+        this->mac_learning = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_US_FLOW_CFG_ID_VLAN_ACTION)) != 0)
+    {
+        this->vlan_action = BCMOLT_US_VLAN_ACTION_ADD;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_US_FLOW_CFG_ID_VLAN_TAG)) != 0)
+    {
+        this->vlan_tag.vlan_id = (bcmolt_vlan_id) 0;
+        this->vlan_tag.pbit = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_US_FLOW_CFG_ID_TPID_INDEX)) != 0)
+    {
+        this->tpid_index = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_us_flow_cfg_data_pack(const bcmolt_gpon_iwf_us_flow_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_US_FLOW_CFG_ID_FLOW_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->flow_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_US_FLOW_CFG_ID_MAC_LEARNING)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->mac_learning))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_US_FLOW_CFG_ID_VLAN_ACTION)) != 0)
+    {
+        if (!bcmolt_us_vlan_action_pack(this->vlan_action, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_US_FLOW_CFG_ID_VLAN_TAG)) != 0)
+    {
+        if (!bcmolt_vlan_tag_pack(&this->vlan_tag, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_US_FLOW_CFG_ID_TPID_INDEX)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->tpid_index))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_iwf_us_flow_cfg_data_get_packed_length(const bcmolt_gpon_iwf_us_flow_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_US_FLOW_CFG_ID_FLOW_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_US_FLOW_CFG_ID_MAC_LEARNING)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_US_FLOW_CFG_ID_VLAN_ACTION)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_US_FLOW_CFG_ID_VLAN_TAG)) != 0)
+    {
+        count += 3;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_US_FLOW_CFG_ID_TPID_INDEX)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_us_flow_cfg_data_unpack(bcmolt_gpon_iwf_us_flow_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_US_FLOW_CFG_ID_FLOW_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->flow_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_US_FLOW_CFG_ID_MAC_LEARNING)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->mac_learning))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_US_FLOW_CFG_ID_VLAN_ACTION)) != 0)
+    {
+        if (!bcmolt_us_vlan_action_unpack(&this->vlan_action, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_US_FLOW_CFG_ID_VLAN_TAG)) != 0)
+    {
+        if (!bcmolt_vlan_tag_unpack(&this->vlan_tag, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_US_FLOW_CFG_ID_TPID_INDEX)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->tpid_index))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_us_flow_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_US_FLOW_CFG_ID_FLOW_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_US_FLOW_CFG_ID_MAC_LEARNING)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_US_FLOW_CFG_ID_VLAN_ACTION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_US_FLOW_CFG_ID_VLAN_TAG)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 3))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_US_FLOW_CFG_ID_TPID_INDEX)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_iwf_us_flow_cfg_data_bounds_check(const bcmolt_gpon_iwf_us_flow_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_iwf_us_flow_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_US_FLOW_CFG_ID_FLOW_ID)) != 0)
+    {
+        if (this->flow_id > (bcmolt_flow_id) 4095)
+        {
+            *failed_prop = BCMOLT_GPON_IWF_US_FLOW_CFG_ID_FLOW_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_US_FLOW_CFG_ID_VLAN_ACTION)) != 0)
+    {
+        switch (this->vlan_action)
+        {
+            case BCMOLT_US_VLAN_ACTION_ADD:
+                break;
+            case BCMOLT_US_VLAN_ACTION_TRANSPARENT:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_IWF_US_FLOW_CFG_ID_VLAN_ACTION;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_US_FLOW_CFG_ID_VLAN_TAG)) != 0)
+    {
+        if (!bcmolt_vlan_tag_bounds_check(&this->vlan_tag))
+        {
+            *failed_prop = BCMOLT_GPON_IWF_US_FLOW_CFG_ID_VLAN_TAG;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_IWF_US_FLOW_CFG_ID_TPID_INDEX)) != 0)
+    {
+        if (this->tpid_index > 1)
+        {
+            *failed_prop = BCMOLT_GPON_IWF_US_FLOW_CFG_ID_TPID_INDEX;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_ni_key_set_default(bcmolt_gpon_ni_key *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_KEY_ID_PON_NI)) != 0)
+    {
+        this->pon_ni = (bcmolt_gpon_ni) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_key_pack(const bcmolt_gpon_ni_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, (uint8_t) this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_ni_key_get_packed_length(const bcmolt_gpon_ni_key *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_KEY_ID_PON_NI)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_key_unpack(bcmolt_gpon_ni_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, (uint8_t *) &this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_key_bounds_check(const bcmolt_gpon_ni_key *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_key_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_KEY_ID_PON_NI)) != 0)
+    {
+        if (this->pon_ni > (bcmolt_gpon_ni) 15)
+        {
+            *failed_prop = BCMOLT_GPON_NI_KEY_ID_PON_NI;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_ni_cfg_data_set_default(bcmolt_gpon_ni_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PON_STATUS)) != 0)
+    {
+        this->pon_status.state = BCMOLT_PON_STATE_INACTIVE;
+        this->pon_status.los_status = BCMOLT_STATUS_OFF;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_AVAILABLE_BANDWIDTH)) != 0)
+    {
+        this->available_bandwidth.cbr_bw = 0;
+        this->available_bandwidth.total_bw = 0;
+        this->available_bandwidth.next_onu_total_bw = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_NUMBER_OF_ACTIVE_ONUS)) != 0)
+    {
+        this->number_of_active_onus = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_NUMBER_OF_ACTIVE_STANDBY_ONUS)) != 0)
+    {
+        this->number_of_active_standby_onus = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PRBS_STATUS)) != 0)
+    {
+        this->prbs_status.lock_state = BCMOLT_PRBS_LOCK_STATE_UNLOCKED;
+        this->prbs_status.error_counts = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PON_DISTANCE)) != 0)
+    {
+        this->pon_distance.max_log_distance = 20;
+        this->pon_distance.max_diff_reach = 20;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_RANGING_WINDOW_SIZE)) != 0)
+    {
+        this->ranging_window_size = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PREASSIGNED_EQUALIZATION_DELAY)) != 0)
+    {
+        this->preassigned_equalization_delay = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_EQD_CYCLES_NUMBER)) != 0)
+    {
+        this->eqd_cycles_number = 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_POWER_LEVEL)) != 0)
+    {
+        this->power_level.pls_maximum_allocation_size = 120;
+        this->power_level.mode = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_DS_FEC_MODE)) != 0)
+    {
+        this->ds_fec_mode = BCMOLT_CONTROL_STATE_ENABLE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_DRIFT_CONTROL)) != 0)
+    {
+        this->drift_control.drift_interval = 1000;
+        this->drift_control.drift_limit = 4;
+        this->drift_control.transmission_control_limit = 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_DS_BER_REPORTING_INTERVAL)) != 0)
+    {
+        this->ds_ber_reporting_interval = (bcmolt_ber_interval) 5000;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_LOS_ALARM_THRESHOLD)) != 0)
+    {
+        this->los_alarm_threshold = 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_LOS_INITIAL_VALUE)) != 0)
+    {
+        this->los_initial_value = BCMOLT_STATUS_ON;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_ONU_ALARMS_THRESHOLDS)) != 0)
+    {
+        this->onu_alarms_thresholds.losi = 4;
+        this->onu_alarms_thresholds.lofi = 4;
+        this->onu_alarms_thresholds.loami = 3;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_BER_MONITOR)) != 0)
+    {
+        this->ber_monitor.us_ber_interval = 5000;
+        this->ber_monitor.sf_threshold = 3;
+        this->ber_monitor.sd_threshold = 5;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PLOAM_ACK_TIMEOUT)) != 0)
+    {
+        this->ploam_ack_timeout = 2000;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_ONU_ACTIVATION)) != 0)
+    {
+        this->onu_activation.key_exchange = BCMOLT_CONTROL_STATE_DISABLE;
+        this->onu_activation.password_authentication = BCMOLT_CONTROL_STATE_ENABLE;
+        this->onu_activation.fail_due_to_password_authentication_failure = BCMOLT_CONTROL_STATE_ENABLE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_SN_ACQUISITION)) != 0)
+    {
+        this->sn_acquisition.interval = 1000;
+        this->sn_acquisition.control = BCMOLT_CONTROL_STATE_DISABLE;
+        this->sn_acquisition.onu_post_discovery_mode = BCMOLT_ONU_POST_DISCOVERY_MODE_DISABLE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_KEY_EXCHANGE)) != 0)
+    {
+        this->key_exchange.interval = 10000;
+        this->key_exchange.control = BCMOLT_CONTROL_STATE_DISABLE;
+        this->key_exchange.mode = BCMOLT_KEY_EXCHANGE_MODE_NORMAL;
+        this->key_exchange.encrypted_ports_only = BCMOLT_CONTROL_STATE_ENABLE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PROTECTION_SWITCHING)) != 0)
+    {
+        this->protection_switching.timeout = 100;
+        this->protection_switching.gpio_pin = BCMOLT_GPIO_PIN_UNCONFIGURED;
+        this->protection_switching.options = (bcmolt_pon_protection_switching_options) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_CBR_RT_ALLOCATION_PROFILE)) != 0)
+    {
+        this->cbr_rt_allocation_profile.ma_7 = 64;
+        this->cbr_rt_allocation_profile.ma_3 = 256;
+        this->cbr_rt_allocation_profile.ma_1 = 512;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_CBR_NRT_ALLOCATION_PROFILE)) != 0)
+    {
+        this->cbr_nrt_allocation_profile.arr[0] = 4096;
+        this->cbr_nrt_allocation_profile.arr[1] = 8192;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_DBA)) != 0)
+    {
+        this->dba.sr_reporting_block_size = 48;
+        this->dba.dba_mode = BCMOLT_DBA_MODE_NORMAL;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_POWER_MANAGEMENT)) != 0)
+    {
+        this->power_management.ilowpower = 1600;
+        this->power_management.iaware = 160;
+        this->power_management.itransinit = 80;
+        this->power_management.itxinit = 40;
+        this->power_management.irxoff = 1600;
+        this->power_management.low_power_clobi = 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_ROGUE_ONU_DETECTION_PROCESS)) != 0)
+    {
+        this->rogue_onu_detection_process.control = BCMOLT_CONTROL_STATE_DISABLE;
+        this->rogue_onu_detection_process.detection_algorithm.algorithm_type = BCMOLT_ROGUE_DETECTION_ALGORITHM_TYPE_EARLY_ROGUE_DETECTION;
+        this->rogue_onu_detection_process.detection_algorithm.u.early_rogue_detection.measurement_type = BCMOLT_ROGUE_DETECTION_WINDOW_SILENT_WINDOW;
+        this->rogue_onu_detection_process.detection_algorithm.u.early_rogue_detection.interval = 10000;
+        this->rogue_onu_detection_process.detection_algorithm.u.early_rogue_detection.second_ranging_window = BCMOS_FALSE;
+        this->rogue_onu_detection_process.detection_algorithm.u.early_rogue_detection.alloc_type_to_scan = BCMOLT_ALLOC_TYPE_TO_SCAN_ALL;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PERIODIC_STANDBY_PON_MONITORING)) != 0)
+    {
+        this->periodic_standby_pon_monitoring.interval = 5000;
+        this->periodic_standby_pon_monitoring.control = BCMOLT_CONTROL_STATE_DISABLE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PRBS_CHECKER)) != 0)
+    {
+        this->prbs_checker.polynom = BCMOLT_PRBS_POLYNOMIAL_PRBS_7;
+        this->prbs_checker.mode = BCMOLT_PRBS_CHECKER_MODE_SELF_SYNC;
+        this->prbs_checker.data_invert = BCMOS_FALSE;
+        this->prbs_checker.control = BCMOLT_CONTROL_STATE_DISABLE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PRBS_GENERATOR)) != 0)
+    {
+        this->prbs_generator.polynom = BCMOLT_PRBS_POLYNOMIAL_PRBS_7;
+        this->prbs_generator.error_insert = BCMOS_FALSE;
+        this->prbs_generator.invert = BCMOS_FALSE;
+        this->prbs_generator.control = BCMOLT_CONTROL_STATE_DISABLE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_MIN_DATA_ALLOC_ID)) != 0)
+    {
+        this->min_data_alloc_id = (bcmolt_gpon_alloc_id) 256;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_AUTOMATIC_ONU_DEACTIVATION)) != 0)
+    {
+        this->automatic_onu_deactivation.los = BCMOS_TRUE;
+        this->automatic_onu_deactivation.onu_alarms = BCMOS_TRUE;
+        this->automatic_onu_deactivation.tiwi = BCMOS_TRUE;
+        this->automatic_onu_deactivation.ack_timeout = BCMOS_TRUE;
+        this->automatic_onu_deactivation.sfi = BCMOS_TRUE;
+        this->automatic_onu_deactivation.loki = BCMOS_TRUE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_US_BANDWIDTH_LIMIT)) != 0)
+    {
+        this->us_bandwidth_limit = 155520000UL;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_ALL_ONUS)) != 0)
+    {
+        this->all_onus.len = 0;
+        this->all_onus.val = NULL;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_ALL_MCAST_GEM_PORTS)) != 0)
+    {
+        this->all_mcast_gem_ports.len = 0;
+        this->all_mcast_gem_ports.val = NULL;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_DEBUG)) != 0)
+    {
+        this->debug.number_of_gem_ports_per_onu = 64;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_ONU_UPGRADE_PARAMS)) != 0)
+    {
+        this->onu_upgrade_params.response_timeout_ms = 1000;
+        this->onu_upgrade_params.max_retry_count = 23;
+        this->onu_upgrade_params.omci_format = BCMOLT_OMCI_DEVICE_ID_EXTENDED;
+        this->onu_upgrade_params.window_size = 32;
+        this->onu_upgrade_params.activate_commit = BCMOS_FALSE;
+        this->onu_upgrade_params.delay_for_commit_ms = 40000UL;
+        this->onu_upgrade_params.max_activation_attempts = 23;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PS_C_WAIT_BEFORE_DEACTIVATION_TIMEOUT)) != 0)
+    {
+        this->ps_c_wait_before_deactivation_timeout = 1000;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_BIP32_INDICATION_CONTROL)) != 0)
+    {
+        this->bip32_indication_control = BCMOLT_CONTROL_STATE_ENABLE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_cfg_data_pack(const bcmolt_gpon_ni_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PON_STATUS)) != 0)
+    {
+        if (!bcmolt_pon_status_pack(&this->pon_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_AVAILABLE_BANDWIDTH)) != 0)
+    {
+        if (!bcmolt_pon_available_bandwidth_pack(&this->available_bandwidth, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_NUMBER_OF_ACTIVE_ONUS)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, this->number_of_active_onus))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_NUMBER_OF_ACTIVE_STANDBY_ONUS)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, this->number_of_active_standby_onus))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PRBS_STATUS)) != 0)
+    {
+        if (!bcmolt_prbs_status_pack(&this->prbs_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PON_DISTANCE)) != 0)
+    {
+        if (!bcmolt_pon_distance_pack(&this->pon_distance, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_RANGING_WINDOW_SIZE)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->ranging_window_size))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PREASSIGNED_EQUALIZATION_DELAY)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->preassigned_equalization_delay))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_EQD_CYCLES_NUMBER)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->eqd_cycles_number))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_POWER_LEVEL)) != 0)
+    {
+        if (!bcmolt_pon_power_level_pack(&this->power_level, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_DS_FEC_MODE)) != 0)
+    {
+        if (!bcmolt_control_state_pack(this->ds_fec_mode, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_DRIFT_CONTROL)) != 0)
+    {
+        if (!bcmolt_pon_drift_control_pack(&this->drift_control, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_DS_BER_REPORTING_INTERVAL)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, (uint32_t) this->ds_ber_reporting_interval))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_LOS_ALARM_THRESHOLD)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->los_alarm_threshold))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_LOS_INITIAL_VALUE)) != 0)
+    {
+        if (!bcmolt_status_pack(this->los_initial_value, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_ONU_ALARMS_THRESHOLDS)) != 0)
+    {
+        if (!bcmolt_gpon_onu_alarms_thresholds_pack(&this->onu_alarms_thresholds, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_BER_MONITOR)) != 0)
+    {
+        if (!bcmolt_ber_monitor_params_pack(&this->ber_monitor, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PLOAM_ACK_TIMEOUT)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, this->ploam_ack_timeout))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_ONU_ACTIVATION)) != 0)
+    {
+        if (!bcmolt_gpon_onu_activation_pack(&this->onu_activation, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_SN_ACQUISITION)) != 0)
+    {
+        if (!bcmolt_gpon_sn_acquisition_pack(&this->sn_acquisition, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_KEY_EXCHANGE)) != 0)
+    {
+        if (!bcmolt_gpon_key_exchange_pack(&this->key_exchange, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PROTECTION_SWITCHING)) != 0)
+    {
+        if (!bcmolt_pon_protection_switching_pack(&this->protection_switching, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_CBR_RT_ALLOCATION_PROFILE)) != 0)
+    {
+        if (!bcmolt_cbr_rt_allocation_profile_pack(&this->cbr_rt_allocation_profile, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_CBR_NRT_ALLOCATION_PROFILE)) != 0)
+    {
+        if (!bcmolt_arr_u16_2_pack(&this->cbr_nrt_allocation_profile, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_DBA)) != 0)
+    {
+        if (!bcmolt_pon_dba_pack(&this->dba, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_POWER_MANAGEMENT)) != 0)
+    {
+        if (!bcmolt_onu_power_management_configuration_pack(&this->power_management, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_ROGUE_ONU_DETECTION_PROCESS)) != 0)
+    {
+        if (!bcmolt_rogue_onu_detection_process_pack(&this->rogue_onu_detection_process, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PERIODIC_STANDBY_PON_MONITORING)) != 0)
+    {
+        if (!bcmolt_periodic_standby_pon_monitoring_pack(&this->periodic_standby_pon_monitoring, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PRBS_CHECKER)) != 0)
+    {
+        if (!bcmolt_prbs_checker_config_pack(&this->prbs_checker, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PRBS_GENERATOR)) != 0)
+    {
+        if (!bcmolt_prbs_generator_config_pack(&this->prbs_generator, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_MIN_DATA_ALLOC_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->min_data_alloc_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_AUTOMATIC_ONU_DEACTIVATION)) != 0)
+    {
+        if (!bcmolt_automatic_onu_deactivation_pack(&this->automatic_onu_deactivation, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_US_BANDWIDTH_LIMIT)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->us_bandwidth_limit))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_ALL_ONUS)) != 0)
+    {
+        if (!bcmolt_gpon_onu_with_state_list_u16_max_128_pack(&this->all_onus, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_ALL_MCAST_GEM_PORTS)) != 0)
+    {
+        if (!bcmolt_gpon_gem_port_with_state_list_u16_max_128_pack(&this->all_mcast_gem_ports, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_DEBUG)) != 0)
+    {
+        if (!bcmolt_gpon_ni_debug_pack(&this->debug, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_ONU_UPGRADE_PARAMS)) != 0)
+    {
+        if (!bcmolt_gpon_onu_upgrade_params_pack(&this->onu_upgrade_params, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PS_C_WAIT_BEFORE_DEACTIVATION_TIMEOUT)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, this->ps_c_wait_before_deactivation_timeout))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_BIP32_INDICATION_CONTROL)) != 0)
+    {
+        if (!bcmolt_control_state_pack(this->bip32_indication_control, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_ni_cfg_data_get_packed_length(const bcmolt_gpon_ni_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PON_STATUS)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_AVAILABLE_BANDWIDTH)) != 0)
+    {
+        count += 12;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_NUMBER_OF_ACTIVE_ONUS)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_NUMBER_OF_ACTIVE_STANDBY_ONUS)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PRBS_STATUS)) != 0)
+    {
+        count += 5;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PON_DISTANCE)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_RANGING_WINDOW_SIZE)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PREASSIGNED_EQUALIZATION_DELAY)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_EQD_CYCLES_NUMBER)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_POWER_LEVEL)) != 0)
+    {
+        count += 5;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_DS_FEC_MODE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_DRIFT_CONTROL)) != 0)
+    {
+        count += 6;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_DS_BER_REPORTING_INTERVAL)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_LOS_ALARM_THRESHOLD)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_LOS_INITIAL_VALUE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_ONU_ALARMS_THRESHOLDS)) != 0)
+    {
+        count += 3;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_BER_MONITOR)) != 0)
+    {
+        count += 6;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PLOAM_ACK_TIMEOUT)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_ONU_ACTIVATION)) != 0)
+    {
+        count += 3;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_SN_ACQUISITION)) != 0)
+    {
+        count += 6;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_KEY_EXCHANGE)) != 0)
+    {
+        count += 7;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PROTECTION_SWITCHING)) != 0)
+    {
+        count += 7;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_CBR_RT_ALLOCATION_PROFILE)) != 0)
+    {
+        count += 6;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_CBR_NRT_ALLOCATION_PROFILE)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_DBA)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_POWER_MANAGEMENT)) != 0)
+    {
+        count += 18;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_ROGUE_ONU_DETECTION_PROCESS)) != 0)
+    {
+        count += bcmolt_rogue_onu_detection_process_get_packed_length(&this->rogue_onu_detection_process);
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PERIODIC_STANDBY_PON_MONITORING)) != 0)
+    {
+        count += 5;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PRBS_CHECKER)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PRBS_GENERATOR)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_MIN_DATA_ALLOC_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_AUTOMATIC_ONU_DEACTIVATION)) != 0)
+    {
+        count += 6;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_US_BANDWIDTH_LIMIT)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_ALL_ONUS)) != 0)
+    {
+        count += bcmolt_gpon_onu_with_state_list_u16_max_128_get_packed_length(&this->all_onus);
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_ALL_MCAST_GEM_PORTS)) != 0)
+    {
+        count += bcmolt_gpon_gem_port_with_state_list_u16_max_128_get_packed_length(&this->all_mcast_gem_ports);
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_DEBUG)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_ONU_UPGRADE_PARAMS)) != 0)
+    {
+        count += 14;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PS_C_WAIT_BEFORE_DEACTIVATION_TIMEOUT)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_BIP32_INDICATION_CONTROL)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_cfg_data_unpack(bcmolt_gpon_ni_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PON_STATUS)) != 0)
+    {
+        if (!bcmolt_pon_status_unpack(&this->pon_status, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_AVAILABLE_BANDWIDTH)) != 0)
+    {
+        if (!bcmolt_pon_available_bandwidth_unpack(&this->available_bandwidth, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_NUMBER_OF_ACTIVE_ONUS)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, &this->number_of_active_onus))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_NUMBER_OF_ACTIVE_STANDBY_ONUS)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, &this->number_of_active_standby_onus))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PRBS_STATUS)) != 0)
+    {
+        if (!bcmolt_prbs_status_unpack(&this->prbs_status, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PON_DISTANCE)) != 0)
+    {
+        if (!bcmolt_pon_distance_unpack(&this->pon_distance, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_RANGING_WINDOW_SIZE)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->ranging_window_size))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PREASSIGNED_EQUALIZATION_DELAY)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->preassigned_equalization_delay))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_EQD_CYCLES_NUMBER)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->eqd_cycles_number))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_POWER_LEVEL)) != 0)
+    {
+        if (!bcmolt_pon_power_level_unpack(&this->power_level, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_DS_FEC_MODE)) != 0)
+    {
+        if (!bcmolt_control_state_unpack(&this->ds_fec_mode, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_DRIFT_CONTROL)) != 0)
+    {
+        if (!bcmolt_pon_drift_control_unpack(&this->drift_control, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_DS_BER_REPORTING_INTERVAL)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, (uint32_t *) &this->ds_ber_reporting_interval))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_LOS_ALARM_THRESHOLD)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->los_alarm_threshold))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_LOS_INITIAL_VALUE)) != 0)
+    {
+        if (!bcmolt_status_unpack(&this->los_initial_value, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_ONU_ALARMS_THRESHOLDS)) != 0)
+    {
+        if (!bcmolt_gpon_onu_alarms_thresholds_unpack(&this->onu_alarms_thresholds, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_BER_MONITOR)) != 0)
+    {
+        if (!bcmolt_ber_monitor_params_unpack(&this->ber_monitor, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PLOAM_ACK_TIMEOUT)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, &this->ploam_ack_timeout))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_ONU_ACTIVATION)) != 0)
+    {
+        if (!bcmolt_gpon_onu_activation_unpack(&this->onu_activation, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_SN_ACQUISITION)) != 0)
+    {
+        if (!bcmolt_gpon_sn_acquisition_unpack(&this->sn_acquisition, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_KEY_EXCHANGE)) != 0)
+    {
+        if (!bcmolt_gpon_key_exchange_unpack(&this->key_exchange, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PROTECTION_SWITCHING)) != 0)
+    {
+        if (!bcmolt_pon_protection_switching_unpack(&this->protection_switching, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_CBR_RT_ALLOCATION_PROFILE)) != 0)
+    {
+        if (!bcmolt_cbr_rt_allocation_profile_unpack(&this->cbr_rt_allocation_profile, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_CBR_NRT_ALLOCATION_PROFILE)) != 0)
+    {
+        if (!bcmolt_arr_u16_2_unpack(&this->cbr_nrt_allocation_profile, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_DBA)) != 0)
+    {
+        if (!bcmolt_pon_dba_unpack(&this->dba, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_POWER_MANAGEMENT)) != 0)
+    {
+        if (!bcmolt_onu_power_management_configuration_unpack(&this->power_management, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_ROGUE_ONU_DETECTION_PROCESS)) != 0)
+    {
+        if (!bcmolt_rogue_onu_detection_process_unpack(&this->rogue_onu_detection_process, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PERIODIC_STANDBY_PON_MONITORING)) != 0)
+    {
+        if (!bcmolt_periodic_standby_pon_monitoring_unpack(&this->periodic_standby_pon_monitoring, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PRBS_CHECKER)) != 0)
+    {
+        if (!bcmolt_prbs_checker_config_unpack(&this->prbs_checker, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PRBS_GENERATOR)) != 0)
+    {
+        if (!bcmolt_prbs_generator_config_unpack(&this->prbs_generator, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_MIN_DATA_ALLOC_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->min_data_alloc_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_AUTOMATIC_ONU_DEACTIVATION)) != 0)
+    {
+        if (!bcmolt_automatic_onu_deactivation_unpack(&this->automatic_onu_deactivation, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_US_BANDWIDTH_LIMIT)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->us_bandwidth_limit))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_ALL_ONUS)) != 0)
+    {
+        if (!bcmolt_gpon_onu_with_state_list_u16_max_128_unpack(&this->all_onus, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_ALL_MCAST_GEM_PORTS)) != 0)
+    {
+        if (!bcmolt_gpon_gem_port_with_state_list_u16_max_128_unpack(&this->all_mcast_gem_ports, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_DEBUG)) != 0)
+    {
+        if (!bcmolt_gpon_ni_debug_unpack(&this->debug, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_ONU_UPGRADE_PARAMS)) != 0)
+    {
+        if (!bcmolt_gpon_onu_upgrade_params_unpack(&this->onu_upgrade_params, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PS_C_WAIT_BEFORE_DEACTIVATION_TIMEOUT)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, &this->ps_c_wait_before_deactivation_timeout))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_BIP32_INDICATION_CONTROL)) != 0)
+    {
+        if (!bcmolt_control_state_unpack(&this->bip32_indication_control, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PON_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_AVAILABLE_BANDWIDTH)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 12))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_NUMBER_OF_ACTIVE_ONUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_NUMBER_OF_ACTIVE_STANDBY_ONUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PRBS_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 5))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PON_DISTANCE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_RANGING_WINDOW_SIZE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PREASSIGNED_EQUALIZATION_DELAY)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_EQD_CYCLES_NUMBER)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_POWER_LEVEL)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 5))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_DS_FEC_MODE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_DRIFT_CONTROL)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 6))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_DS_BER_REPORTING_INTERVAL)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_LOS_ALARM_THRESHOLD)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_LOS_INITIAL_VALUE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_ONU_ALARMS_THRESHOLDS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 3))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_BER_MONITOR)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 6))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PLOAM_ACK_TIMEOUT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_ONU_ACTIVATION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 3))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_SN_ACQUISITION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 6))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_KEY_EXCHANGE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 7))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PROTECTION_SWITCHING)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 7))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_CBR_RT_ALLOCATION_PROFILE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 6))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_CBR_NRT_ALLOCATION_PROFILE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_DBA)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_POWER_MANAGEMENT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 18))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_ROGUE_ONU_DETECTION_PROCESS)) != 0)
+    {
+        if (!bcmolt_rogue_onu_detection_process_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PERIODIC_STANDBY_PON_MONITORING)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 5))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PRBS_CHECKER)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PRBS_GENERATOR)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_MIN_DATA_ALLOC_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_AUTOMATIC_ONU_DEACTIVATION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 6))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_US_BANDWIDTH_LIMIT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_ALL_ONUS)) != 0)
+    {
+        if (!bcmolt_gpon_onu_with_state_list_u16_max_128_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_ALL_MCAST_GEM_PORTS)) != 0)
+    {
+        if (!bcmolt_gpon_gem_port_with_state_list_u16_max_128_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_DEBUG)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_ONU_UPGRADE_PARAMS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 14))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PS_C_WAIT_BEFORE_DEACTIVATION_TIMEOUT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_BIP32_INDICATION_CONTROL)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_cfg_data_bounds_check(const bcmolt_gpon_ni_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PON_STATUS)) != 0)
+    {
+        if (!bcmolt_pon_status_bounds_check(&this->pon_status))
+        {
+            *failed_prop = BCMOLT_GPON_NI_CFG_ID_PON_STATUS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_AVAILABLE_BANDWIDTH)) != 0)
+    {
+        if (!bcmolt_pon_available_bandwidth_bounds_check(&this->available_bandwidth))
+        {
+            *failed_prop = BCMOLT_GPON_NI_CFG_ID_AVAILABLE_BANDWIDTH;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PRBS_STATUS)) != 0)
+    {
+        if (!bcmolt_prbs_status_bounds_check(&this->prbs_status))
+        {
+            *failed_prop = BCMOLT_GPON_NI_CFG_ID_PRBS_STATUS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PON_DISTANCE)) != 0)
+    {
+        if (!bcmolt_pon_distance_bounds_check(&this->pon_distance))
+        {
+            *failed_prop = BCMOLT_GPON_NI_CFG_ID_PON_DISTANCE;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PREASSIGNED_EQUALIZATION_DELAY)) != 0)
+    {
+        if (this->preassigned_equalization_delay > 16776960UL)
+        {
+            *failed_prop = BCMOLT_GPON_NI_CFG_ID_PREASSIGNED_EQUALIZATION_DELAY;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_EQD_CYCLES_NUMBER)) != 0)
+    {
+        if (this->eqd_cycles_number > 255)
+        {
+            *failed_prop = BCMOLT_GPON_NI_CFG_ID_EQD_CYCLES_NUMBER;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_POWER_LEVEL)) != 0)
+    {
+        if (!bcmolt_pon_power_level_bounds_check(&this->power_level))
+        {
+            *failed_prop = BCMOLT_GPON_NI_CFG_ID_POWER_LEVEL;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_DS_FEC_MODE)) != 0)
+    {
+        switch (this->ds_fec_mode)
+        {
+            case BCMOLT_CONTROL_STATE_DISABLE:
+                break;
+            case BCMOLT_CONTROL_STATE_ENABLE:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_NI_CFG_ID_DS_FEC_MODE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_DRIFT_CONTROL)) != 0)
+    {
+        if (!bcmolt_pon_drift_control_bounds_check(&this->drift_control))
+        {
+            *failed_prop = BCMOLT_GPON_NI_CFG_ID_DRIFT_CONTROL;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_DS_BER_REPORTING_INTERVAL)) != 0)
+    {
+        if (this->ds_ber_reporting_interval > (bcmolt_ber_interval) 536870911UL)
+        {
+            *failed_prop = BCMOLT_GPON_NI_CFG_ID_DS_BER_REPORTING_INTERVAL;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_LOS_INITIAL_VALUE)) != 0)
+    {
+        switch (this->los_initial_value)
+        {
+            case BCMOLT_STATUS_OFF:
+                break;
+            case BCMOLT_STATUS_ON:
+                break;
+            case BCMOLT_STATUS_NO_CHANGE:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_NI_CFG_ID_LOS_INITIAL_VALUE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_ONU_ALARMS_THRESHOLDS)) != 0)
+    {
+        if (!bcmolt_gpon_onu_alarms_thresholds_bounds_check(&this->onu_alarms_thresholds))
+        {
+            *failed_prop = BCMOLT_GPON_NI_CFG_ID_ONU_ALARMS_THRESHOLDS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_BER_MONITOR)) != 0)
+    {
+        if (!bcmolt_ber_monitor_params_bounds_check(&this->ber_monitor))
+        {
+            *failed_prop = BCMOLT_GPON_NI_CFG_ID_BER_MONITOR;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_ONU_ACTIVATION)) != 0)
+    {
+        if (!bcmolt_gpon_onu_activation_bounds_check(&this->onu_activation))
+        {
+            *failed_prop = BCMOLT_GPON_NI_CFG_ID_ONU_ACTIVATION;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_SN_ACQUISITION)) != 0)
+    {
+        if (!bcmolt_gpon_sn_acquisition_bounds_check(&this->sn_acquisition))
+        {
+            *failed_prop = BCMOLT_GPON_NI_CFG_ID_SN_ACQUISITION;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_KEY_EXCHANGE)) != 0)
+    {
+        if (!bcmolt_gpon_key_exchange_bounds_check(&this->key_exchange))
+        {
+            *failed_prop = BCMOLT_GPON_NI_CFG_ID_KEY_EXCHANGE;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PROTECTION_SWITCHING)) != 0)
+    {
+        if (!bcmolt_pon_protection_switching_bounds_check(&this->protection_switching))
+        {
+            *failed_prop = BCMOLT_GPON_NI_CFG_ID_PROTECTION_SWITCHING;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_CBR_RT_ALLOCATION_PROFILE)) != 0)
+    {
+        if (!bcmolt_cbr_rt_allocation_profile_bounds_check(&this->cbr_rt_allocation_profile))
+        {
+            *failed_prop = BCMOLT_GPON_NI_CFG_ID_CBR_RT_ALLOCATION_PROFILE;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_CBR_NRT_ALLOCATION_PROFILE)) != 0)
+    {
+        if (!bcmolt_arr_u16_2_bounds_check(&this->cbr_nrt_allocation_profile))
+        {
+            *failed_prop = BCMOLT_GPON_NI_CFG_ID_CBR_NRT_ALLOCATION_PROFILE;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_DBA)) != 0)
+    {
+        if (!bcmolt_pon_dba_bounds_check(&this->dba))
+        {
+            *failed_prop = BCMOLT_GPON_NI_CFG_ID_DBA;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_POWER_MANAGEMENT)) != 0)
+    {
+        if (!bcmolt_onu_power_management_configuration_bounds_check(&this->power_management))
+        {
+            *failed_prop = BCMOLT_GPON_NI_CFG_ID_POWER_MANAGEMENT;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_ROGUE_ONU_DETECTION_PROCESS)) != 0)
+    {
+        if (!bcmolt_rogue_onu_detection_process_bounds_check(&this->rogue_onu_detection_process))
+        {
+            *failed_prop = BCMOLT_GPON_NI_CFG_ID_ROGUE_ONU_DETECTION_PROCESS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PERIODIC_STANDBY_PON_MONITORING)) != 0)
+    {
+        if (!bcmolt_periodic_standby_pon_monitoring_bounds_check(&this->periodic_standby_pon_monitoring))
+        {
+            *failed_prop = BCMOLT_GPON_NI_CFG_ID_PERIODIC_STANDBY_PON_MONITORING;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PRBS_CHECKER)) != 0)
+    {
+        if (!bcmolt_prbs_checker_config_bounds_check(&this->prbs_checker))
+        {
+            *failed_prop = BCMOLT_GPON_NI_CFG_ID_PRBS_CHECKER;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_PRBS_GENERATOR)) != 0)
+    {
+        if (!bcmolt_prbs_generator_config_bounds_check(&this->prbs_generator))
+        {
+            *failed_prop = BCMOLT_GPON_NI_CFG_ID_PRBS_GENERATOR;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_MIN_DATA_ALLOC_ID)) != 0)
+    {
+        if (this->min_data_alloc_id < (bcmolt_gpon_alloc_id) 256)
+        {
+            *failed_prop = BCMOLT_GPON_NI_CFG_ID_MIN_DATA_ALLOC_ID;
+            return BCMOS_FALSE;
+        }
+
+        if (this->min_data_alloc_id > (bcmolt_gpon_alloc_id) 3200)
+        {
+            *failed_prop = BCMOLT_GPON_NI_CFG_ID_MIN_DATA_ALLOC_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_AUTOMATIC_ONU_DEACTIVATION)) != 0)
+    {
+        if (!bcmolt_automatic_onu_deactivation_bounds_check(&this->automatic_onu_deactivation))
+        {
+            *failed_prop = BCMOLT_GPON_NI_CFG_ID_AUTOMATIC_ONU_DEACTIVATION;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_US_BANDWIDTH_LIMIT)) != 0)
+    {
+        if (this->us_bandwidth_limit < 800000UL)
+        {
+            *failed_prop = BCMOLT_GPON_NI_CFG_ID_US_BANDWIDTH_LIMIT;
+            return BCMOS_FALSE;
+        }
+
+        if (this->us_bandwidth_limit > 155520000UL)
+        {
+            *failed_prop = BCMOLT_GPON_NI_CFG_ID_US_BANDWIDTH_LIMIT;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_ALL_ONUS)) != 0)
+    {
+        if (this->all_onus.len > 128)
+        {
+            return BCMOS_FALSE;
+        }
+
+        if (!bcmolt_gpon_onu_with_state_list_u16_max_128_bounds_check(&this->all_onus))
+        {
+            *failed_prop = BCMOLT_GPON_NI_CFG_ID_ALL_ONUS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_ALL_MCAST_GEM_PORTS)) != 0)
+    {
+        if (this->all_mcast_gem_ports.len > 128)
+        {
+            return BCMOS_FALSE;
+        }
+
+        if (!bcmolt_gpon_gem_port_with_state_list_u16_max_128_bounds_check(&this->all_mcast_gem_ports))
+        {
+            *failed_prop = BCMOLT_GPON_NI_CFG_ID_ALL_MCAST_GEM_PORTS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_DEBUG)) != 0)
+    {
+        if (!bcmolt_gpon_ni_debug_bounds_check(&this->debug))
+        {
+            *failed_prop = BCMOLT_GPON_NI_CFG_ID_DEBUG;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_ONU_UPGRADE_PARAMS)) != 0)
+    {
+        if (!bcmolt_gpon_onu_upgrade_params_bounds_check(&this->onu_upgrade_params))
+        {
+            *failed_prop = BCMOLT_GPON_NI_CFG_ID_ONU_UPGRADE_PARAMS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CFG_ID_BIP32_INDICATION_CONTROL)) != 0)
+    {
+        switch (this->bip32_indication_control)
+        {
+            case BCMOLT_CONTROL_STATE_DISABLE:
+                break;
+            case BCMOLT_CONTROL_STATE_ENABLE:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_NI_CFG_ID_BIP32_INDICATION_CONTROL;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_ni_stat_data_set_default(bcmolt_gpon_ni_stat_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_FEC_CODEWORDS)) != 0)
+    {
+        this->fec_codewords = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_FEC_CODEWORDS_UNCORRECTED)) != 0)
+    {
+        this->fec_codewords_uncorrected = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_BIP8_BYTES)) != 0)
+    {
+        this->bip8_bytes = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_BIP8_ERRORS)) != 0)
+    {
+        this->bip8_errors = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_GEM_PACKETS)) != 0)
+    {
+        this->rx_gem_packets = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_GEM_DROPPED)) != 0)
+    {
+        this->rx_gem_dropped = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_GEM_IDLE)) != 0)
+    {
+        this->rx_gem_idle = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_GEM_CORRECTED)) != 0)
+    {
+        this->rx_gem_corrected = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_GEM_ILLEGAL)) != 0)
+    {
+        this->rx_gem_illegal = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_ALLOCATIONS_VALID)) != 0)
+    {
+        this->rx_allocations_valid = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_ALLOCATIONS_INVALID)) != 0)
+    {
+        this->rx_allocations_invalid = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_ALLOCATIONS_DISABLED)) != 0)
+    {
+        this->rx_allocations_disabled = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS)) != 0)
+    {
+        this->rx_ploams = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS_NON_IDLE)) != 0)
+    {
+        this->rx_ploams_non_idle = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS_ERROR)) != 0)
+    {
+        this->rx_ploams_error = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS_DROPPED)) != 0)
+    {
+        this->rx_ploams_dropped = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_CPU)) != 0)
+    {
+        this->rx_cpu = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_OMCI)) != 0)
+    {
+        this->rx_omci = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR)) != 0)
+    {
+        this->rx_omci_packets_crc_error = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_DROPPED_TOO_SHORT)) != 0)
+    {
+        this->rx_dropped_too_short = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_DROPPED_TOO_LONG)) != 0)
+    {
+        this->rx_dropped_too_long = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_CRC_ERRORS)) != 0)
+    {
+        this->rx_crc_errors = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_KEY_ERRORS)) != 0)
+    {
+        this->rx_key_errors = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_FRAGMENTS_ERRORS)) != 0)
+    {
+        this->rx_fragments_errors = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_PACKETS_DROPPED)) != 0)
+    {
+        this->rx_packets_dropped = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_TX_GEM)) != 0)
+    {
+        this->tx_gem = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_TX_PLOAMS)) != 0)
+    {
+        this->tx_ploams = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_TX_GEM_FRAGMENTS)) != 0)
+    {
+        this->tx_gem_fragments = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_TX_CPU)) != 0)
+    {
+        this->tx_cpu = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_TX_OMCI)) != 0)
+    {
+        this->tx_omci = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_TX_CPU_OMCI_PACKETS_DROPPED)) != 0)
+    {
+        this->tx_cpu_omci_packets_dropped = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_TX_DROPPED_ILLEGAL_LENGTH)) != 0)
+    {
+        this->tx_dropped_illegal_length = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_TX_DROPPED_TPID_MISS)) != 0)
+    {
+        this->tx_dropped_tpid_miss = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_TX_DROPPED_VID_MISS)) != 0)
+    {
+        this->tx_dropped_vid_miss = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_stat_data_pack(const bcmolt_gpon_ni_stat_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_FEC_CODEWORDS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->fec_codewords))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_FEC_CODEWORDS_UNCORRECTED)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->fec_codewords_uncorrected))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_BIP8_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->bip8_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_BIP8_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->bip8_errors))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_GEM_PACKETS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_gem_packets))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_GEM_DROPPED)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_gem_dropped))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_GEM_IDLE)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_gem_idle))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_GEM_CORRECTED)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_gem_corrected))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_GEM_ILLEGAL)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_gem_illegal))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_ALLOCATIONS_VALID)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_allocations_valid))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_ALLOCATIONS_INVALID)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_allocations_invalid))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_ALLOCATIONS_DISABLED)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_allocations_disabled))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_ploams))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS_NON_IDLE)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_ploams_non_idle))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_ploams_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS_DROPPED)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_ploams_dropped))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_CPU)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_cpu))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_OMCI)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_omci))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_omci_packets_crc_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_DROPPED_TOO_SHORT)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_dropped_too_short))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_DROPPED_TOO_LONG)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_dropped_too_long))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_CRC_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_crc_errors))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_KEY_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_key_errors))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_FRAGMENTS_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_fragments_errors))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_PACKETS_DROPPED)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_packets_dropped))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_TX_GEM)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_gem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_TX_PLOAMS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_ploams))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_TX_GEM_FRAGMENTS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_gem_fragments))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_TX_CPU)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_cpu))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_TX_OMCI)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_omci))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_TX_CPU_OMCI_PACKETS_DROPPED)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->tx_cpu_omci_packets_dropped))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_TX_DROPPED_ILLEGAL_LENGTH)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_dropped_illegal_length))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_TX_DROPPED_TPID_MISS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_dropped_tpid_miss))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_TX_DROPPED_VID_MISS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_dropped_vid_miss))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_ni_stat_data_get_packed_length(const bcmolt_gpon_ni_stat_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_FEC_CODEWORDS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_FEC_CODEWORDS_UNCORRECTED)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_BIP8_BYTES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_BIP8_ERRORS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_GEM_PACKETS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_GEM_DROPPED)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_GEM_IDLE)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_GEM_CORRECTED)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_GEM_ILLEGAL)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_ALLOCATIONS_VALID)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_ALLOCATIONS_INVALID)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_ALLOCATIONS_DISABLED)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS_NON_IDLE)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS_ERROR)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS_DROPPED)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_CPU)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_OMCI)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_DROPPED_TOO_SHORT)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_DROPPED_TOO_LONG)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_CRC_ERRORS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_KEY_ERRORS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_FRAGMENTS_ERRORS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_PACKETS_DROPPED)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_TX_GEM)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_TX_PLOAMS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_TX_GEM_FRAGMENTS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_TX_CPU)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_TX_OMCI)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_TX_CPU_OMCI_PACKETS_DROPPED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_TX_DROPPED_ILLEGAL_LENGTH)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_TX_DROPPED_TPID_MISS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_TX_DROPPED_VID_MISS)) != 0)
+    {
+        count += 8;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_stat_data_unpack(bcmolt_gpon_ni_stat_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_FEC_CODEWORDS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->fec_codewords))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_FEC_CODEWORDS_UNCORRECTED)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->fec_codewords_uncorrected))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_BIP8_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->bip8_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_BIP8_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->bip8_errors))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_GEM_PACKETS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_gem_packets))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_GEM_DROPPED)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_gem_dropped))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_GEM_IDLE)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_gem_idle))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_GEM_CORRECTED)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_gem_corrected))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_GEM_ILLEGAL)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_gem_illegal))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_ALLOCATIONS_VALID)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_allocations_valid))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_ALLOCATIONS_INVALID)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_allocations_invalid))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_ALLOCATIONS_DISABLED)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_allocations_disabled))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_ploams))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS_NON_IDLE)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_ploams_non_idle))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_ploams_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS_DROPPED)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_ploams_dropped))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_CPU)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_cpu))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_OMCI)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_omci))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_omci_packets_crc_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_DROPPED_TOO_SHORT)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_dropped_too_short))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_DROPPED_TOO_LONG)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_dropped_too_long))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_CRC_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_crc_errors))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_KEY_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_key_errors))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_FRAGMENTS_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_fragments_errors))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_PACKETS_DROPPED)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_packets_dropped))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_TX_GEM)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_gem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_TX_PLOAMS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_ploams))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_TX_GEM_FRAGMENTS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_gem_fragments))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_TX_CPU)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_cpu))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_TX_OMCI)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_omci))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_TX_CPU_OMCI_PACKETS_DROPPED)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->tx_cpu_omci_packets_dropped))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_TX_DROPPED_ILLEGAL_LENGTH)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_dropped_illegal_length))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_TX_DROPPED_TPID_MISS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_dropped_tpid_miss))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_TX_DROPPED_VID_MISS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_dropped_vid_miss))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_stat_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_FEC_CODEWORDS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_FEC_CODEWORDS_UNCORRECTED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_BIP8_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_BIP8_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_GEM_PACKETS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_GEM_DROPPED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_GEM_IDLE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_GEM_CORRECTED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_GEM_ILLEGAL)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_ALLOCATIONS_VALID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_ALLOCATIONS_INVALID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_ALLOCATIONS_DISABLED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS_NON_IDLE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS_DROPPED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_CPU)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_OMCI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_DROPPED_TOO_SHORT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_DROPPED_TOO_LONG)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_CRC_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_KEY_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_FRAGMENTS_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_RX_PACKETS_DROPPED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_TX_GEM)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_TX_PLOAMS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_TX_GEM_FRAGMENTS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_TX_CPU)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_TX_OMCI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_TX_CPU_OMCI_PACKETS_DROPPED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_TX_DROPPED_ILLEGAL_LENGTH)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_TX_DROPPED_TPID_MISS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ID_TX_DROPPED_VID_MISS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_stat_data_bounds_check(const bcmolt_gpon_ni_stat_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_stat_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_ni_stat_cfg_data_set_default(bcmolt_gpon_ni_stat_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_CFG_ID_CFG)) != 0)
+    {
+        this->cfg.trigger.type = BCMOLT_STAT_CONDITION_TYPE_NONE;
+        this->cfg.soak.active_soak_time = 0;
+        this->cfg.soak.clear_soak_time = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_stat_cfg_data_pack(const bcmolt_gpon_ni_stat_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_pack(&this->cfg, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_ni_stat_cfg_data_get_packed_length(const bcmolt_gpon_ni_stat_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_CFG_ID_CFG)) != 0)
+    {
+        count += bcmolt_stat_alarm_config_get_packed_length(&this->cfg);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_stat_cfg_data_unpack(bcmolt_gpon_ni_stat_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_unpack(&this->cfg, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_stat_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_stat_cfg_data_bounds_check(const bcmolt_gpon_ni_stat_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_stat_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_bounds_check(&this->cfg))
+        {
+            *failed_prop = BCMOLT_GPON_NI_STAT_CFG_ID_CFG;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_ni_cpu_packets_failure_data_set_default(bcmolt_gpon_ni_cpu_packets_failure_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CPU_PACKETS_FAILURE_ID_ERROR)) != 0)
+    {
+        this->error = BCMOLT_PACKET_INJECTION_ERROR_GEM_PORT_NOT_ACTIVE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CPU_PACKETS_FAILURE_ID_GEM_PORT_ID)) != 0)
+    {
+        this->gem_port_id = (bcmolt_gpon_gem_id) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_cpu_packets_failure_data_pack(const bcmolt_gpon_ni_cpu_packets_failure_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CPU_PACKETS_FAILURE_ID_ERROR)) != 0)
+    {
+        if (!bcmolt_packet_injection_error_pack(this->error, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CPU_PACKETS_FAILURE_ID_GEM_PORT_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->gem_port_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_ni_cpu_packets_failure_data_get_packed_length(const bcmolt_gpon_ni_cpu_packets_failure_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CPU_PACKETS_FAILURE_ID_ERROR)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CPU_PACKETS_FAILURE_ID_GEM_PORT_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_cpu_packets_failure_data_unpack(bcmolt_gpon_ni_cpu_packets_failure_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CPU_PACKETS_FAILURE_ID_ERROR)) != 0)
+    {
+        if (!bcmolt_packet_injection_error_unpack(&this->error, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CPU_PACKETS_FAILURE_ID_GEM_PORT_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->gem_port_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_cpu_packets_failure_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CPU_PACKETS_FAILURE_ID_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CPU_PACKETS_FAILURE_ID_GEM_PORT_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_cpu_packets_failure_data_bounds_check(const bcmolt_gpon_ni_cpu_packets_failure_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_cpu_packets_failure_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CPU_PACKETS_FAILURE_ID_ERROR)) != 0)
+    {
+        switch (this->error)
+        {
+            case BCMOLT_PACKET_INJECTION_ERROR_GEM_PORT_NOT_ACTIVE:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_NI_CPU_PACKETS_FAILURE_ID_ERROR;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CPU_PACKETS_FAILURE_ID_GEM_PORT_ID)) != 0)
+    {
+        if (this->gem_port_id > (bcmolt_gpon_gem_id) 4095)
+        {
+            *failed_prop = BCMOLT_GPON_NI_CPU_PACKETS_FAILURE_ID_GEM_PORT_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_ni_los_data_set_default(bcmolt_gpon_ni_los_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_LOS_ID_STATUS)) != 0)
+    {
+        this->status = BCMOLT_STATUS_OFF;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_los_data_pack(const bcmolt_gpon_ni_los_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_LOS_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_status_pack(this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_ni_los_data_get_packed_length(const bcmolt_gpon_ni_los_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_LOS_ID_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_los_data_unpack(bcmolt_gpon_ni_los_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_LOS_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_status_unpack(&this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_los_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_LOS_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_los_data_bounds_check(const bcmolt_gpon_ni_los_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_los_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_LOS_ID_STATUS)) != 0)
+    {
+        switch (this->status)
+        {
+            case BCMOLT_STATUS_OFF:
+                break;
+            case BCMOLT_STATUS_ON:
+                break;
+            case BCMOLT_STATUS_NO_CHANGE:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_NI_LOS_ID_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_ni_onu_discovered_data_set_default(bcmolt_gpon_ni_onu_discovered_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ONU_DISCOVERED_ID_SERIAL_NUMBER)) != 0)
+    {
+        memset(this->serial_number.vendor_id, 0, sizeof(this->serial_number.vendor_id));
+        memset(this->serial_number.vendor_specific, 0, sizeof(this->serial_number.vendor_specific));
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ONU_DISCOVERED_ID_RANGING_TIME)) != 0)
+    {
+        this->ranging_time = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ONU_DISCOVERED_ID_ONU_ID)) != 0)
+    {
+        this->onu_id = (bcmolt_gpon_onu_id) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_onu_discovered_data_pack(const bcmolt_gpon_ni_onu_discovered_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ONU_DISCOVERED_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmolt_serial_number_pack(&this->serial_number, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ONU_DISCOVERED_ID_RANGING_TIME)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->ranging_time))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ONU_DISCOVERED_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->onu_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_ni_onu_discovered_data_get_packed_length(const bcmolt_gpon_ni_onu_discovered_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ONU_DISCOVERED_ID_SERIAL_NUMBER)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ONU_DISCOVERED_ID_RANGING_TIME)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ONU_DISCOVERED_ID_ONU_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_onu_discovered_data_unpack(bcmolt_gpon_ni_onu_discovered_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ONU_DISCOVERED_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmolt_serial_number_unpack(&this->serial_number, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ONU_DISCOVERED_ID_RANGING_TIME)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->ranging_time))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ONU_DISCOVERED_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->onu_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_onu_discovered_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ONU_DISCOVERED_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ONU_DISCOVERED_ID_RANGING_TIME)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ONU_DISCOVERED_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_onu_discovered_data_bounds_check(const bcmolt_gpon_ni_onu_discovered_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_onu_discovered_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ONU_DISCOVERED_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmolt_serial_number_bounds_check(&this->serial_number))
+        {
+            *failed_prop = BCMOLT_GPON_NI_ONU_DISCOVERED_ID_SERIAL_NUMBER;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ONU_DISCOVERED_ID_ONU_ID)) != 0)
+    {
+        if (this->onu_id > (bcmolt_gpon_onu_id) 127)
+        {
+            *failed_prop = BCMOLT_GPON_NI_ONU_DISCOVERED_ID_ONU_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_ni_onu_upgrade_complete_data_set_default(bcmolt_gpon_ni_onu_upgrade_complete_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ONU_UPGRADE_COMPLETE_ID_STATUS)) != 0)
+    {
+        this->status = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ONU_UPGRADE_COMPLETE_ID_LIST_OF_FAILED_ENTITIES)) != 0)
+    {
+        this->list_of_failed_entities.len = 0;
+        this->list_of_failed_entities.val = NULL;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_onu_upgrade_complete_data_pack(const bcmolt_gpon_ni_onu_upgrade_complete_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ONU_UPGRADE_COMPLETE_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->status))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ONU_UPGRADE_COMPLETE_ID_LIST_OF_FAILED_ENTITIES)) != 0)
+    {
+        if (!bcmolt_gpon_onu_upgrade_status_list_u32_pack(&this->list_of_failed_entities, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_ni_onu_upgrade_complete_data_get_packed_length(const bcmolt_gpon_ni_onu_upgrade_complete_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ONU_UPGRADE_COMPLETE_ID_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ONU_UPGRADE_COMPLETE_ID_LIST_OF_FAILED_ENTITIES)) != 0)
+    {
+        count += bcmolt_gpon_onu_upgrade_status_list_u32_get_packed_length(&this->list_of_failed_entities);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_onu_upgrade_complete_data_unpack(bcmolt_gpon_ni_onu_upgrade_complete_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ONU_UPGRADE_COMPLETE_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->status))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ONU_UPGRADE_COMPLETE_ID_LIST_OF_FAILED_ENTITIES)) != 0)
+    {
+        if (!bcmolt_gpon_onu_upgrade_status_list_u32_unpack(&this->list_of_failed_entities, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_onu_upgrade_complete_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ONU_UPGRADE_COMPLETE_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ONU_UPGRADE_COMPLETE_ID_LIST_OF_FAILED_ENTITIES)) != 0)
+    {
+        if (!bcmolt_gpon_onu_upgrade_status_list_u32_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_onu_upgrade_complete_data_bounds_check(const bcmolt_gpon_ni_onu_upgrade_complete_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_onu_upgrade_complete_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ONU_UPGRADE_COMPLETE_ID_LIST_OF_FAILED_ENTITIES)) != 0)
+    {
+        if (!bcmolt_gpon_onu_upgrade_status_list_u32_bounds_check(&this->list_of_failed_entities))
+        {
+            *failed_prop = BCMOLT_GPON_NI_ONU_UPGRADE_COMPLETE_ID_LIST_OF_FAILED_ENTITIES;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_ni_protection_switching_onus_ranged_data_set_default(bcmolt_gpon_ni_protection_switching_onus_ranged_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_PROTECTION_SWITCHING_ONUS_RANGED_ID_ONUS)) != 0)
+    {
+        this->onus.len = 0;
+        this->onus.val = NULL;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_protection_switching_onus_ranged_data_pack(const bcmolt_gpon_ni_protection_switching_onus_ranged_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_PROTECTION_SWITCHING_ONUS_RANGED_ID_ONUS)) != 0)
+    {
+        if (!bcmolt_gpon_onu_eqd_list_u32_pack(&this->onus, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_ni_protection_switching_onus_ranged_data_get_packed_length(const bcmolt_gpon_ni_protection_switching_onus_ranged_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_PROTECTION_SWITCHING_ONUS_RANGED_ID_ONUS)) != 0)
+    {
+        count += bcmolt_gpon_onu_eqd_list_u32_get_packed_length(&this->onus);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_protection_switching_onus_ranged_data_unpack(bcmolt_gpon_ni_protection_switching_onus_ranged_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_PROTECTION_SWITCHING_ONUS_RANGED_ID_ONUS)) != 0)
+    {
+        if (!bcmolt_gpon_onu_eqd_list_u32_unpack(&this->onus, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_protection_switching_onus_ranged_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_PROTECTION_SWITCHING_ONUS_RANGED_ID_ONUS)) != 0)
+    {
+        if (!bcmolt_gpon_onu_eqd_list_u32_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_protection_switching_onus_ranged_data_bounds_check(const bcmolt_gpon_ni_protection_switching_onus_ranged_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_protection_switching_onus_ranged_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_PROTECTION_SWITCHING_ONUS_RANGED_ID_ONUS)) != 0)
+    {
+        if (!bcmolt_gpon_onu_eqd_list_u32_bounds_check(&this->onus))
+        {
+            *failed_prop = BCMOLT_GPON_NI_PROTECTION_SWITCHING_ONUS_RANGED_ID_ONUS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_ni_protection_switching_switchover_completed_data_set_default(bcmolt_gpon_ni_protection_switching_switchover_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED_ID_RESULT)) != 0)
+    {
+        this->result = BCMOLT_RESULT_SUCCESS;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_protection_switching_switchover_completed_data_pack(const bcmolt_gpon_ni_protection_switching_switchover_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED_ID_RESULT)) != 0)
+    {
+        if (!bcmolt_result_pack(this->result, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_ni_protection_switching_switchover_completed_data_get_packed_length(const bcmolt_gpon_ni_protection_switching_switchover_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED_ID_RESULT)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_protection_switching_switchover_completed_data_unpack(bcmolt_gpon_ni_protection_switching_switchover_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED_ID_RESULT)) != 0)
+    {
+        if (!bcmolt_result_unpack(&this->result, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_protection_switching_switchover_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED_ID_RESULT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_protection_switching_switchover_completed_data_bounds_check(const bcmolt_gpon_ni_protection_switching_switchover_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_protection_switching_switchover_completed_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED_ID_RESULT)) != 0)
+    {
+        switch (this->result)
+        {
+            case BCMOLT_RESULT_SUCCESS:
+                break;
+            case BCMOLT_RESULT_FAIL:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_NI_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED_ID_RESULT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_ni_protection_switching_traffic_resume_data_set_default(bcmolt_gpon_ni_protection_switching_traffic_resume_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_PROTECTION_SWITCHING_TRAFFIC_RESUME_ID_RESULT)) != 0)
+    {
+        this->result = BCMOLT_TRAFFIC_RESUME_RESULT_SUCCESS;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_protection_switching_traffic_resume_data_pack(const bcmolt_gpon_ni_protection_switching_traffic_resume_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_PROTECTION_SWITCHING_TRAFFIC_RESUME_ID_RESULT)) != 0)
+    {
+        if (!bcmolt_traffic_resume_result_pack(this->result, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_ni_protection_switching_traffic_resume_data_get_packed_length(const bcmolt_gpon_ni_protection_switching_traffic_resume_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_PROTECTION_SWITCHING_TRAFFIC_RESUME_ID_RESULT)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_protection_switching_traffic_resume_data_unpack(bcmolt_gpon_ni_protection_switching_traffic_resume_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_PROTECTION_SWITCHING_TRAFFIC_RESUME_ID_RESULT)) != 0)
+    {
+        if (!bcmolt_traffic_resume_result_unpack(&this->result, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_protection_switching_traffic_resume_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_PROTECTION_SWITCHING_TRAFFIC_RESUME_ID_RESULT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_protection_switching_traffic_resume_data_bounds_check(const bcmolt_gpon_ni_protection_switching_traffic_resume_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_protection_switching_traffic_resume_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_PROTECTION_SWITCHING_TRAFFIC_RESUME_ID_RESULT)) != 0)
+    {
+        switch (this->result)
+        {
+            case BCMOLT_TRAFFIC_RESUME_RESULT_SUCCESS:
+                break;
+            case BCMOLT_TRAFFIC_RESUME_RESULT_FAILURE:
+                break;
+            case BCMOLT_TRAFFIC_RESUME_RESULT_SUSPECTED_LOS:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_NI_PROTECTION_SWITCHING_TRAFFIC_RESUME_ID_RESULT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_ni_rogue_detection_completed_data_set_default(bcmolt_gpon_ni_rogue_detection_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_WINDOW_TYPE)) != 0)
+    {
+        this->window_type = BCMOLT_ROGUE_DETECTION_WINDOW_SILENT_WINDOW;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_MEASUREMENT_STATUS)) != 0)
+    {
+        this->measurement_status = BCMOLT_ROGUE_MEASUREMENT_RESULT_RSSI_COMPLETE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_ALLOC_ID)) != 0)
+    {
+        this->alloc_id = (bcmolt_gpon_alloc_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_ONU_ID)) != 0)
+    {
+        this->onu_id = (bcmolt_gpon_onu_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_IS_DELINEATION)) != 0)
+    {
+        this->is_delineation = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_IS_ED)) != 0)
+    {
+        this->is_ed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_RX_DATA)) != 0)
+    {
+        this->rx_data.len = 0;
+        this->rx_data.val = NULL;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_PLOAM_RECEIVED_ONU_ID)) != 0)
+    {
+        this->ploam_received_onu_id = (bcmolt_gpon_onu_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_PLOAM_RECEIVED_CRC_ERROR)) != 0)
+    {
+        this->ploam_received_crc_error = BCMOS_FALSE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_rogue_detection_completed_data_pack(const bcmolt_gpon_ni_rogue_detection_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_WINDOW_TYPE)) != 0)
+    {
+        if (!bcmolt_rogue_detection_window_pack(this->window_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_MEASUREMENT_STATUS)) != 0)
+    {
+        if (!bcmolt_rogue_measurement_result_pack(this->measurement_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_ALLOC_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->alloc_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->onu_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_IS_DELINEATION)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->is_delineation))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_IS_ED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->is_ed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_RX_DATA)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_pack(&this->rx_data, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_PLOAM_RECEIVED_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->ploam_received_onu_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_PLOAM_RECEIVED_CRC_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->ploam_received_crc_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_ni_rogue_detection_completed_data_get_packed_length(const bcmolt_gpon_ni_rogue_detection_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_WINDOW_TYPE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_MEASUREMENT_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_ALLOC_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_ONU_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_IS_DELINEATION)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_IS_ED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_RX_DATA)) != 0)
+    {
+        count += bcmolt_u8_list_u32_get_packed_length(&this->rx_data);
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_PLOAM_RECEIVED_ONU_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_PLOAM_RECEIVED_CRC_ERROR)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_rogue_detection_completed_data_unpack(bcmolt_gpon_ni_rogue_detection_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_WINDOW_TYPE)) != 0)
+    {
+        if (!bcmolt_rogue_detection_window_unpack(&this->window_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_MEASUREMENT_STATUS)) != 0)
+    {
+        if (!bcmolt_rogue_measurement_result_unpack(&this->measurement_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_ALLOC_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->alloc_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->onu_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_IS_DELINEATION)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->is_delineation))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_IS_ED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->is_ed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_RX_DATA)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_unpack(&this->rx_data, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_PLOAM_RECEIVED_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->ploam_received_onu_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_PLOAM_RECEIVED_CRC_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->ploam_received_crc_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_rogue_detection_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_WINDOW_TYPE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_MEASUREMENT_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_ALLOC_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_IS_DELINEATION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_IS_ED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_RX_DATA)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_PLOAM_RECEIVED_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_PLOAM_RECEIVED_CRC_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_rogue_detection_completed_data_bounds_check(const bcmolt_gpon_ni_rogue_detection_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_rogue_detection_completed_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_WINDOW_TYPE)) != 0)
+    {
+        switch (this->window_type)
+        {
+            case BCMOLT_ROGUE_DETECTION_WINDOW_SILENT_WINDOW:
+                break;
+            case BCMOLT_ROGUE_DETECTION_WINDOW_CUT_OFF_WINDOW:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_WINDOW_TYPE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_MEASUREMENT_STATUS)) != 0)
+    {
+        switch (this->measurement_status)
+        {
+            case BCMOLT_ROGUE_MEASUREMENT_RESULT_RSSI_COMPLETE:
+                break;
+            case BCMOLT_ROGUE_MEASUREMENT_RESULT_NOT_PERFORMED:
+                break;
+            case BCMOLT_ROGUE_MEASUREMENT_RESULT_ROGUE_CYCLE_STOP:
+                break;
+            case BCMOLT_ROGUE_MEASUREMENT_RESULT_RSSI_ERROR:
+                break;
+            case BCMOLT_ROGUE_MEASUREMENT_RESULT_RSSI_NOT_COMPLETE:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_MEASUREMENT_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_ALLOC_ID)) != 0)
+    {
+        if (this->alloc_id > (bcmolt_gpon_alloc_id) 4095)
+        {
+            *failed_prop = BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_ALLOC_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_ONU_ID)) != 0)
+    {
+        if (this->onu_id > (bcmolt_gpon_onu_id) 127)
+        {
+            *failed_prop = BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_ONU_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_RX_DATA)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_bounds_check(&this->rx_data))
+        {
+            *failed_prop = BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_RX_DATA;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_PLOAM_RECEIVED_ONU_ID)) != 0)
+    {
+        if (this->ploam_received_onu_id > (bcmolt_gpon_onu_id) 127)
+        {
+            *failed_prop = BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_PLOAM_RECEIVED_ONU_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data_set_default(bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID_NUMBER_OF_DETECTED_DELIMITER)) != 0)
+    {
+        this->number_of_detected_delimiter = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID_ENERGY_DETECT_SIGNAL)) != 0)
+    {
+        this->energy_detect_signal = BCMOLT_STATUS_OFF;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data_pack(const bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID_NUMBER_OF_DETECTED_DELIMITER)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->number_of_detected_delimiter))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID_ENERGY_DETECT_SIGNAL)) != 0)
+    {
+        if (!bcmolt_status_pack(this->energy_detect_signal, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data_get_packed_length(const bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID_NUMBER_OF_DETECTED_DELIMITER)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID_ENERGY_DETECT_SIGNAL)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data_unpack(bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID_NUMBER_OF_DETECTED_DELIMITER)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->number_of_detected_delimiter))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID_ENERGY_DETECT_SIGNAL)) != 0)
+    {
+        if (!bcmolt_status_unpack(&this->energy_detect_signal, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID_NUMBER_OF_DETECTED_DELIMITER)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID_ENERGY_DETECT_SIGNAL)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data_bounds_check(const bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID_ENERGY_DETECT_SIGNAL)) != 0)
+    {
+        switch (this->energy_detect_signal)
+        {
+            case BCMOLT_STATUS_OFF:
+                break;
+            case BCMOLT_STATUS_ON:
+                break;
+            case BCMOLT_STATUS_NO_CHANGE:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID_ENERGY_DETECT_SIGNAL;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_ni_stat_alarm_cleared_data_set_default(bcmolt_gpon_ni_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        this->stat = BCMOLT_GPON_NI_STAT_ID_FEC_CODEWORDS;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_stat_alarm_cleared_data_pack(const bcmolt_gpon_ni_stat_alarm_cleared_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_gpon_ni_stat_id_pack(this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_ni_stat_alarm_cleared_data_get_packed_length(const bcmolt_gpon_ni_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_stat_alarm_cleared_data_unpack(bcmolt_gpon_ni_stat_alarm_cleared_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_gpon_ni_stat_id_unpack(&this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_stat_alarm_cleared_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_stat_alarm_cleared_data_bounds_check(const bcmolt_gpon_ni_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_stat_alarm_cleared_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        switch (this->stat)
+        {
+            case BCMOLT_GPON_NI_STAT_ID_FEC_CODEWORDS:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_FEC_CODEWORDS_UNCORRECTED:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_BIP8_BYTES:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_BIP8_ERRORS:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_RX_GEM_PACKETS:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_RX_GEM_DROPPED:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_RX_GEM_IDLE:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_RX_GEM_CORRECTED:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_RX_GEM_ILLEGAL:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_RX_ALLOCATIONS_VALID:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_RX_ALLOCATIONS_INVALID:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_RX_ALLOCATIONS_DISABLED:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS_NON_IDLE:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS_ERROR:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS_DROPPED:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_RX_CPU:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_RX_OMCI:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_RX_DROPPED_TOO_SHORT:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_RX_DROPPED_TOO_LONG:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_RX_CRC_ERRORS:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_RX_KEY_ERRORS:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_RX_FRAGMENTS_ERRORS:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_RX_PACKETS_DROPPED:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_TX_GEM:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_TX_PLOAMS:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_TX_GEM_FRAGMENTS:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_TX_CPU:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_TX_OMCI:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_TX_CPU_OMCI_PACKETS_DROPPED:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_TX_DROPPED_ILLEGAL_LENGTH:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_TX_DROPPED_TPID_MISS:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_TX_DROPPED_VID_MISS:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_NI_STAT_ALARM_CLEARED_ID_STAT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_ni_stat_alarm_raised_data_set_default(bcmolt_gpon_ni_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        this->stat = BCMOLT_GPON_NI_STAT_ID_FEC_CODEWORDS;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_stat_alarm_raised_data_pack(const bcmolt_gpon_ni_stat_alarm_raised_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_gpon_ni_stat_id_pack(this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_ni_stat_alarm_raised_data_get_packed_length(const bcmolt_gpon_ni_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_stat_alarm_raised_data_unpack(bcmolt_gpon_ni_stat_alarm_raised_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_gpon_ni_stat_id_unpack(&this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_stat_alarm_raised_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_stat_alarm_raised_data_bounds_check(const bcmolt_gpon_ni_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_stat_alarm_raised_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        switch (this->stat)
+        {
+            case BCMOLT_GPON_NI_STAT_ID_FEC_CODEWORDS:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_FEC_CODEWORDS_UNCORRECTED:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_BIP8_BYTES:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_BIP8_ERRORS:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_RX_GEM_PACKETS:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_RX_GEM_DROPPED:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_RX_GEM_IDLE:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_RX_GEM_CORRECTED:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_RX_GEM_ILLEGAL:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_RX_ALLOCATIONS_VALID:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_RX_ALLOCATIONS_INVALID:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_RX_ALLOCATIONS_DISABLED:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS_NON_IDLE:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS_ERROR:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS_DROPPED:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_RX_CPU:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_RX_OMCI:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_RX_DROPPED_TOO_SHORT:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_RX_DROPPED_TOO_LONG:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_RX_CRC_ERRORS:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_RX_KEY_ERRORS:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_RX_FRAGMENTS_ERRORS:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_RX_PACKETS_DROPPED:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_TX_GEM:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_TX_PLOAMS:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_TX_GEM_FRAGMENTS:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_TX_CPU:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_TX_OMCI:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_TX_CPU_OMCI_PACKETS_DROPPED:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_TX_DROPPED_ILLEGAL_LENGTH:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_TX_DROPPED_TPID_MISS:
+                break;
+            case BCMOLT_GPON_NI_STAT_ID_TX_DROPPED_VID_MISS:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_NI_STAT_ALARM_RAISED_ID_STAT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_ni_state_change_completed_data_set_default(bcmolt_gpon_ni_state_change_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STATE_CHANGE_COMPLETED_ID_RESULT)) != 0)
+    {
+        this->result = BCMOLT_RESULT_SUCCESS;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STATE_CHANGE_COMPLETED_ID_PREVIOUS_STATE)) != 0)
+    {
+        this->previous_state = BCMOLT_PON_STATE_INACTIVE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STATE_CHANGE_COMPLETED_ID_NEW_STATE)) != 0)
+    {
+        this->new_state = BCMOLT_PON_STATE_INACTIVE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_state_change_completed_data_pack(const bcmolt_gpon_ni_state_change_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STATE_CHANGE_COMPLETED_ID_RESULT)) != 0)
+    {
+        if (!bcmolt_result_pack(this->result, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STATE_CHANGE_COMPLETED_ID_PREVIOUS_STATE)) != 0)
+    {
+        if (!bcmolt_pon_state_pack(this->previous_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STATE_CHANGE_COMPLETED_ID_NEW_STATE)) != 0)
+    {
+        if (!bcmolt_pon_state_pack(this->new_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_ni_state_change_completed_data_get_packed_length(const bcmolt_gpon_ni_state_change_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STATE_CHANGE_COMPLETED_ID_RESULT)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STATE_CHANGE_COMPLETED_ID_PREVIOUS_STATE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STATE_CHANGE_COMPLETED_ID_NEW_STATE)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_state_change_completed_data_unpack(bcmolt_gpon_ni_state_change_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STATE_CHANGE_COMPLETED_ID_RESULT)) != 0)
+    {
+        if (!bcmolt_result_unpack(&this->result, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STATE_CHANGE_COMPLETED_ID_PREVIOUS_STATE)) != 0)
+    {
+        if (!bcmolt_pon_state_unpack(&this->previous_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STATE_CHANGE_COMPLETED_ID_NEW_STATE)) != 0)
+    {
+        if (!bcmolt_pon_state_unpack(&this->new_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_state_change_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STATE_CHANGE_COMPLETED_ID_RESULT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STATE_CHANGE_COMPLETED_ID_PREVIOUS_STATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STATE_CHANGE_COMPLETED_ID_NEW_STATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_state_change_completed_data_bounds_check(const bcmolt_gpon_ni_state_change_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_state_change_completed_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STATE_CHANGE_COMPLETED_ID_RESULT)) != 0)
+    {
+        switch (this->result)
+        {
+            case BCMOLT_RESULT_SUCCESS:
+                break;
+            case BCMOLT_RESULT_FAIL:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_NI_STATE_CHANGE_COMPLETED_ID_RESULT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STATE_CHANGE_COMPLETED_ID_PREVIOUS_STATE)) != 0)
+    {
+        switch (this->previous_state)
+        {
+            case BCMOLT_PON_STATE_INACTIVE:
+                break;
+            case BCMOLT_PON_STATE_PROCESSING:
+                break;
+            case BCMOLT_PON_STATE_ACTIVE_WORKING:
+                break;
+            case BCMOLT_PON_STATE_ACTIVE_STANDBY:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_NI_STATE_CHANGE_COMPLETED_ID_PREVIOUS_STATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_STATE_CHANGE_COMPLETED_ID_NEW_STATE)) != 0)
+    {
+        switch (this->new_state)
+        {
+            case BCMOLT_PON_STATE_INACTIVE:
+                break;
+            case BCMOLT_PON_STATE_PROCESSING:
+                break;
+            case BCMOLT_PON_STATE_ACTIVE_WORKING:
+                break;
+            case BCMOLT_PON_STATE_ACTIVE_STANDBY:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_NI_STATE_CHANGE_COMPLETED_ID_NEW_STATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_ni_tod_request_completed_data_set_default(bcmolt_gpon_ni_tod_request_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_TOD_STRING)) != 0)
+    {
+        memset(this->tod_string.str, 0, 64);
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_SFC)) != 0)
+    {
+        this->sfc = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_RTC_OFFSET_SEC)) != 0)
+    {
+        this->rtc_offset_sec = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_RTC_OFFSET_NSEC)) != 0)
+    {
+        this->rtc_offset_nsec = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_STATUS)) != 0)
+    {
+        this->status = BCMOLT_RESULT_SUCCESS;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_tod_request_completed_data_pack(const bcmolt_gpon_ni_tod_request_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_TOD_STRING)) != 0)
+    {
+        if (!bcmolt_str_64_pack(&this->tod_string, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_SFC)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->sfc))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_RTC_OFFSET_SEC)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rtc_offset_sec))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_RTC_OFFSET_NSEC)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->rtc_offset_nsec))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_result_pack(this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_ni_tod_request_completed_data_get_packed_length(const bcmolt_gpon_ni_tod_request_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_TOD_STRING)) != 0)
+    {
+        count += 64;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_SFC)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_RTC_OFFSET_SEC)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_RTC_OFFSET_NSEC)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_tod_request_completed_data_unpack(bcmolt_gpon_ni_tod_request_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_TOD_STRING)) != 0)
+    {
+        if (!bcmolt_str_64_unpack(&this->tod_string, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_SFC)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->sfc))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_RTC_OFFSET_SEC)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rtc_offset_sec))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_RTC_OFFSET_NSEC)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->rtc_offset_nsec))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_result_unpack(&this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_tod_request_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_TOD_STRING)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 64))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_SFC)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_RTC_OFFSET_SEC)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_RTC_OFFSET_NSEC)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_tod_request_completed_data_bounds_check(const bcmolt_gpon_ni_tod_request_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_tod_request_completed_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_TOD_STRING)) != 0)
+    {
+        if (!bcmolt_str_64_bounds_check(&this->tod_string))
+        {
+            *failed_prop = BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_TOD_STRING;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_STATUS)) != 0)
+    {
+        switch (this->status)
+        {
+            case BCMOLT_RESULT_SUCCESS:
+                break;
+            case BCMOLT_RESULT_FAIL:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_ni_auto_cfg_data_set_default(bcmolt_gpon_ni_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_ACTIVATE_ALL_ONUS_COMPLETED)) != 0)
+    {
+        this->activate_all_onus_completed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_CPU_PACKETS_FAILURE)) != 0)
+    {
+        this->cpu_packets_failure = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_DEACTIVATE_ALL_ONUS_COMPLETED)) != 0)
+    {
+        this->deactivate_all_onus_completed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_DISABLE_ALL_ONUS_COMPLETED)) != 0)
+    {
+        this->disable_all_onus_completed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_ENABLE_ALL_ONUS_COMPLETED)) != 0)
+    {
+        this->enable_all_onus_completed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_LOS)) != 0)
+    {
+        this->los = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_ONU_DISCOVERED)) != 0)
+    {
+        this->onu_discovered = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_ONU_UPGRADE_COMPLETE)) != 0)
+    {
+        this->onu_upgrade_complete = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_ONUS_RANGED)) != 0)
+    {
+        this->protection_switching_onus_ranged = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED)) != 0)
+    {
+        this->protection_switching_switchover_completed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_TRAFFIC_RESUME)) != 0)
+    {
+        this->protection_switching_traffic_resume = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_ROGUE_DETECTION_COMPLETED)) != 0)
+    {
+        this->rogue_detection_completed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_ROGUE_ONU_SPECIAL_MAP_CYCLE_START)) != 0)
+    {
+        this->rogue_onu_special_map_cycle_start = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_SERIAL_NUMBER_ACQUISITION_CYCLE_START)) != 0)
+    {
+        this->serial_number_acquisition_cycle_start = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_STANDBY_PON_MONITORING_CYCLE_COMPLETED)) != 0)
+    {
+        this->standby_pon_monitoring_cycle_completed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        this->stat_alarm_cleared = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        this->stat_alarm_raised = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_STATE_CHANGE_COMPLETED)) != 0)
+    {
+        this->state_change_completed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_TOD_REQUEST_COMPLETED)) != 0)
+    {
+        this->tod_request_completed = BCMOS_FALSE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_auto_cfg_data_pack(const bcmolt_gpon_ni_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_ACTIVATE_ALL_ONUS_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->activate_all_onus_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_CPU_PACKETS_FAILURE)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->cpu_packets_failure))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_DEACTIVATE_ALL_ONUS_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->deactivate_all_onus_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_DISABLE_ALL_ONUS_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->disable_all_onus_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_ENABLE_ALL_ONUS_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->enable_all_onus_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_LOS)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->los))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_ONU_DISCOVERED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->onu_discovered))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_ONU_UPGRADE_COMPLETE)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->onu_upgrade_complete))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_ONUS_RANGED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->protection_switching_onus_ranged))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->protection_switching_switchover_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_TRAFFIC_RESUME)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->protection_switching_traffic_resume))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_ROGUE_DETECTION_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->rogue_detection_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_ROGUE_ONU_SPECIAL_MAP_CYCLE_START)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->rogue_onu_special_map_cycle_start))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_SERIAL_NUMBER_ACQUISITION_CYCLE_START)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->serial_number_acquisition_cycle_start))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_STANDBY_PON_MONITORING_CYCLE_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->standby_pon_monitoring_cycle_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->stat_alarm_cleared))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->stat_alarm_raised))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_STATE_CHANGE_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->state_change_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_TOD_REQUEST_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->tod_request_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_ni_auto_cfg_data_get_packed_length(const bcmolt_gpon_ni_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_ACTIVATE_ALL_ONUS_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_CPU_PACKETS_FAILURE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_DEACTIVATE_ALL_ONUS_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_DISABLE_ALL_ONUS_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_ENABLE_ALL_ONUS_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_LOS)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_ONU_DISCOVERED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_ONU_UPGRADE_COMPLETE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_ONUS_RANGED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_TRAFFIC_RESUME)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_ROGUE_DETECTION_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_ROGUE_ONU_SPECIAL_MAP_CYCLE_START)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_SERIAL_NUMBER_ACQUISITION_CYCLE_START)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_STANDBY_PON_MONITORING_CYCLE_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_STATE_CHANGE_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_TOD_REQUEST_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_auto_cfg_data_unpack(bcmolt_gpon_ni_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_ACTIVATE_ALL_ONUS_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->activate_all_onus_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_CPU_PACKETS_FAILURE)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->cpu_packets_failure))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_DEACTIVATE_ALL_ONUS_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->deactivate_all_onus_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_DISABLE_ALL_ONUS_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->disable_all_onus_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_ENABLE_ALL_ONUS_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->enable_all_onus_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_LOS)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->los))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_ONU_DISCOVERED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->onu_discovered))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_ONU_UPGRADE_COMPLETE)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->onu_upgrade_complete))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_ONUS_RANGED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->protection_switching_onus_ranged))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->protection_switching_switchover_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_TRAFFIC_RESUME)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->protection_switching_traffic_resume))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_ROGUE_DETECTION_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->rogue_detection_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_ROGUE_ONU_SPECIAL_MAP_CYCLE_START)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->rogue_onu_special_map_cycle_start))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_SERIAL_NUMBER_ACQUISITION_CYCLE_START)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->serial_number_acquisition_cycle_start))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_STANDBY_PON_MONITORING_CYCLE_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->standby_pon_monitoring_cycle_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->stat_alarm_cleared))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->stat_alarm_raised))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_STATE_CHANGE_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->state_change_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_TOD_REQUEST_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->tod_request_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_ACTIVATE_ALL_ONUS_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_CPU_PACKETS_FAILURE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_DEACTIVATE_ALL_ONUS_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_DISABLE_ALL_ONUS_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_ENABLE_ALL_ONUS_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_LOS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_ONU_DISCOVERED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_ONU_UPGRADE_COMPLETE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_ONUS_RANGED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_TRAFFIC_RESUME)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_ROGUE_DETECTION_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_ROGUE_ONU_SPECIAL_MAP_CYCLE_START)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_SERIAL_NUMBER_ACQUISITION_CYCLE_START)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_STANDBY_PON_MONITORING_CYCLE_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_STATE_CHANGE_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_AUTO_CFG_ID_TOD_REQUEST_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_auto_cfg_data_bounds_check(const bcmolt_gpon_ni_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_auto_cfg_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_ni_disable_serial_number_data_set_default(bcmolt_gpon_ni_disable_serial_number_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_DISABLE_SERIAL_NUMBER_ID_CONTROL)) != 0)
+    {
+        this->control = BCMOLT_DISABLE_SERIAL_NUMBER_CONTROL_UNICAST_DISABLE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_DISABLE_SERIAL_NUMBER_ID_SERIAL_NUMBER)) != 0)
+    {
+        memset(this->serial_number.vendor_id, 0, sizeof(this->serial_number.vendor_id));
+        memset(this->serial_number.vendor_specific, 0, sizeof(this->serial_number.vendor_specific));
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_disable_serial_number_data_pack(const bcmolt_gpon_ni_disable_serial_number_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_DISABLE_SERIAL_NUMBER_ID_CONTROL)) != 0)
+    {
+        if (!bcmolt_disable_serial_number_control_pack(this->control, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_DISABLE_SERIAL_NUMBER_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmolt_serial_number_pack(&this->serial_number, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_ni_disable_serial_number_data_get_packed_length(const bcmolt_gpon_ni_disable_serial_number_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_DISABLE_SERIAL_NUMBER_ID_CONTROL)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_DISABLE_SERIAL_NUMBER_ID_SERIAL_NUMBER)) != 0)
+    {
+        count += 8;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_disable_serial_number_data_unpack(bcmolt_gpon_ni_disable_serial_number_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_DISABLE_SERIAL_NUMBER_ID_CONTROL)) != 0)
+    {
+        if (!bcmolt_disable_serial_number_control_unpack(&this->control, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_DISABLE_SERIAL_NUMBER_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmolt_serial_number_unpack(&this->serial_number, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_disable_serial_number_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_DISABLE_SERIAL_NUMBER_ID_CONTROL)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_DISABLE_SERIAL_NUMBER_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_disable_serial_number_data_bounds_check(const bcmolt_gpon_ni_disable_serial_number_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_disable_serial_number_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_DISABLE_SERIAL_NUMBER_ID_CONTROL)) != 0)
+    {
+        switch (this->control)
+        {
+            case BCMOLT_DISABLE_SERIAL_NUMBER_CONTROL_UNICAST_DISABLE:
+                break;
+            case BCMOLT_DISABLE_SERIAL_NUMBER_CONTROL_UNICAST_ENABLE:
+                break;
+            case BCMOLT_DISABLE_SERIAL_NUMBER_CONTROL_BROADCAST_ENABLE:
+                break;
+            case BCMOLT_DISABLE_SERIAL_NUMBER_CONTROL_BROADCAST_DISABLE:
+                break;
+            case BCMOLT_DISABLE_SERIAL_NUMBER_CONTROL_DISABLE_DISCOVERY:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_NI_DISABLE_SERIAL_NUMBER_ID_CONTROL;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_DISABLE_SERIAL_NUMBER_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmolt_serial_number_bounds_check(&this->serial_number))
+        {
+            *failed_prop = BCMOLT_GPON_NI_DISABLE_SERIAL_NUMBER_ID_SERIAL_NUMBER;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data_set_default(bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_PROTECTION_SWITCHING_TYPE_C_SET_MULTIPLE_ONU_STATE_ID_ONU_STATE)) != 0)
+    {
+        this->onu_state = BCMOLT_SWITCH_OVER_TYPE_C_ONU_STATE_ACTIVE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_PROTECTION_SWITCHING_TYPE_C_SET_MULTIPLE_ONU_STATE_ID_ONU_LIST)) != 0)
+    {
+        this->onu_list.len = 0;
+        this->onu_list.val = NULL;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data_pack(const bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_PROTECTION_SWITCHING_TYPE_C_SET_MULTIPLE_ONU_STATE_ID_ONU_STATE)) != 0)
+    {
+        if (!bcmolt_switch_over_type_c_onu_state_pack(this->onu_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_PROTECTION_SWITCHING_TYPE_C_SET_MULTIPLE_ONU_STATE_ID_ONU_LIST)) != 0)
+    {
+        if (!bcmolt_gpon_onu_id_list_u32_max_256_pack(&this->onu_list, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data_get_packed_length(const bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_PROTECTION_SWITCHING_TYPE_C_SET_MULTIPLE_ONU_STATE_ID_ONU_STATE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_PROTECTION_SWITCHING_TYPE_C_SET_MULTIPLE_ONU_STATE_ID_ONU_LIST)) != 0)
+    {
+        count += bcmolt_gpon_onu_id_list_u32_max_256_get_packed_length(&this->onu_list);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data_unpack(bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_PROTECTION_SWITCHING_TYPE_C_SET_MULTIPLE_ONU_STATE_ID_ONU_STATE)) != 0)
+    {
+        if (!bcmolt_switch_over_type_c_onu_state_unpack(&this->onu_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_PROTECTION_SWITCHING_TYPE_C_SET_MULTIPLE_ONU_STATE_ID_ONU_LIST)) != 0)
+    {
+        if (!bcmolt_gpon_onu_id_list_u32_max_256_unpack(&this->onu_list, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_PROTECTION_SWITCHING_TYPE_C_SET_MULTIPLE_ONU_STATE_ID_ONU_STATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_PROTECTION_SWITCHING_TYPE_C_SET_MULTIPLE_ONU_STATE_ID_ONU_LIST)) != 0)
+    {
+        if (!bcmolt_gpon_onu_id_list_u32_max_256_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data_bounds_check(const bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_PROTECTION_SWITCHING_TYPE_C_SET_MULTIPLE_ONU_STATE_ID_ONU_STATE)) != 0)
+    {
+        switch (this->onu_state)
+        {
+            case BCMOLT_SWITCH_OVER_TYPE_C_ONU_STATE_ACTIVE:
+                break;
+            case BCMOLT_SWITCH_OVER_TYPE_C_ONU_STATE_ACTIVE_STANDBY:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_NI_PROTECTION_SWITCHING_TYPE_C_SET_MULTIPLE_ONU_STATE_ID_ONU_STATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_PROTECTION_SWITCHING_TYPE_C_SET_MULTIPLE_ONU_STATE_ID_ONU_LIST)) != 0)
+    {
+        if (this->onu_list.len > 256)
+        {
+            return BCMOS_FALSE;
+        }
+
+        if (!bcmolt_gpon_onu_id_list_u32_max_256_bounds_check(&this->onu_list))
+        {
+            *failed_prop = BCMOLT_GPON_NI_PROTECTION_SWITCHING_TYPE_C_SET_MULTIPLE_ONU_STATE_ID_ONU_LIST;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_ni_rogue_detection_window_data_set_default(bcmolt_gpon_ni_rogue_detection_window_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_WINDOW_TYPE)) != 0)
+    {
+        this->window_type = BCMOLT_ROGUE_DETECTION_WINDOW_SILENT_WINDOW;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_ALLOC_ID)) != 0)
+    {
+        this->alloc_id = (bcmolt_gpon_alloc_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_ONU_ID)) != 0)
+    {
+        this->onu_id = (bcmolt_gpon_onu_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_SECOND_RANGING_WINDOW)) != 0)
+    {
+        this->second_ranging_window = BCMOS_FALSE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_rogue_detection_window_data_pack(const bcmolt_gpon_ni_rogue_detection_window_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_WINDOW_TYPE)) != 0)
+    {
+        if (!bcmolt_rogue_detection_window_pack(this->window_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_ALLOC_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->alloc_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->onu_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_SECOND_RANGING_WINDOW)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->second_ranging_window))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_ni_rogue_detection_window_data_get_packed_length(const bcmolt_gpon_ni_rogue_detection_window_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_WINDOW_TYPE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_ALLOC_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_ONU_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_SECOND_RANGING_WINDOW)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_rogue_detection_window_data_unpack(bcmolt_gpon_ni_rogue_detection_window_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_WINDOW_TYPE)) != 0)
+    {
+        if (!bcmolt_rogue_detection_window_unpack(&this->window_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_ALLOC_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->alloc_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->onu_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_SECOND_RANGING_WINDOW)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->second_ranging_window))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_rogue_detection_window_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_WINDOW_TYPE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_ALLOC_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_SECOND_RANGING_WINDOW)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_rogue_detection_window_data_bounds_check(const bcmolt_gpon_ni_rogue_detection_window_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_rogue_detection_window_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_WINDOW_TYPE)) != 0)
+    {
+        switch (this->window_type)
+        {
+            case BCMOLT_ROGUE_DETECTION_WINDOW_SILENT_WINDOW:
+                break;
+            case BCMOLT_ROGUE_DETECTION_WINDOW_CUT_OFF_WINDOW:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_WINDOW_TYPE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_ALLOC_ID)) != 0)
+    {
+        if (this->alloc_id > (bcmolt_gpon_alloc_id) 4095)
+        {
+            *failed_prop = BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_ALLOC_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_ONU_ID)) != 0)
+    {
+        if (this->onu_id > (bcmolt_gpon_onu_id) 127)
+        {
+            *failed_prop = BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_ONU_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_ni_set_onu_state_data_set_default(bcmolt_gpon_ni_set_onu_state_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_SET_ONU_STATE_ID_ONU_STATE)) != 0)
+    {
+        this->onu_state = BCMOLT_ONU_OPERATION_INACTIVE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_set_onu_state_data_pack(const bcmolt_gpon_ni_set_onu_state_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_SET_ONU_STATE_ID_ONU_STATE)) != 0)
+    {
+        if (!bcmolt_onu_operation_pack(this->onu_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_ni_set_onu_state_data_get_packed_length(const bcmolt_gpon_ni_set_onu_state_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_SET_ONU_STATE_ID_ONU_STATE)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_set_onu_state_data_unpack(bcmolt_gpon_ni_set_onu_state_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_SET_ONU_STATE_ID_ONU_STATE)) != 0)
+    {
+        if (!bcmolt_onu_operation_unpack(&this->onu_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_set_onu_state_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_SET_ONU_STATE_ID_ONU_STATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_set_onu_state_data_bounds_check(const bcmolt_gpon_ni_set_onu_state_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_set_onu_state_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_SET_ONU_STATE_ID_ONU_STATE)) != 0)
+    {
+        switch (this->onu_state)
+        {
+            case BCMOLT_ONU_OPERATION_INACTIVE:
+                break;
+            case BCMOLT_ONU_OPERATION_ACTIVE:
+                break;
+            case BCMOLT_ONU_OPERATION_DISABLE:
+                break;
+            case BCMOLT_ONU_OPERATION_ENABLE:
+                break;
+            case BCMOLT_ONU_OPERATION_ACTIVE_STANDBY:
+                break;
+            case BCMOLT_ONU_OPERATION_AWAKE_FREE:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_NI_SET_ONU_STATE_ID_ONU_STATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_ni_set_pon_state_data_set_default(bcmolt_gpon_ni_set_pon_state_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_SET_PON_STATE_ID_PON_STATE)) != 0)
+    {
+        this->pon_state = BCMOLT_PON_OPERATION_INACTIVE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_set_pon_state_data_pack(const bcmolt_gpon_ni_set_pon_state_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_SET_PON_STATE_ID_PON_STATE)) != 0)
+    {
+        if (!bcmolt_pon_operation_pack(this->pon_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_ni_set_pon_state_data_get_packed_length(const bcmolt_gpon_ni_set_pon_state_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_SET_PON_STATE_ID_PON_STATE)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_set_pon_state_data_unpack(bcmolt_gpon_ni_set_pon_state_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_SET_PON_STATE_ID_PON_STATE)) != 0)
+    {
+        if (!bcmolt_pon_operation_unpack(&this->pon_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_set_pon_state_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_SET_PON_STATE_ID_PON_STATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_set_pon_state_data_bounds_check(const bcmolt_gpon_ni_set_pon_state_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_set_pon_state_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_SET_PON_STATE_ID_PON_STATE)) != 0)
+    {
+        switch (this->pon_state)
+        {
+            case BCMOLT_PON_OPERATION_INACTIVE:
+                break;
+            case BCMOLT_PON_OPERATION_ACTIVE_WORKING:
+                break;
+            case BCMOLT_PON_OPERATION_ACTIVE_STANDBY:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_NI_SET_PON_STATE_ID_PON_STATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_ni_start_onu_upgrade_data_set_default(bcmolt_gpon_ni_start_onu_upgrade_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_START_ONU_UPGRADE_ID_LIST_OF_ONU_IDS)) != 0)
+    {
+        this->list_of_onu_ids.len = 0;
+        this->list_of_onu_ids.val = NULL;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_start_onu_upgrade_data_pack(const bcmolt_gpon_ni_start_onu_upgrade_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_START_ONU_UPGRADE_ID_LIST_OF_ONU_IDS)) != 0)
+    {
+        if (!bcmolt_pon_onu_id_list_u32_pack(&this->list_of_onu_ids, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_ni_start_onu_upgrade_data_get_packed_length(const bcmolt_gpon_ni_start_onu_upgrade_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_START_ONU_UPGRADE_ID_LIST_OF_ONU_IDS)) != 0)
+    {
+        count += bcmolt_pon_onu_id_list_u32_get_packed_length(&this->list_of_onu_ids);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_start_onu_upgrade_data_unpack(bcmolt_gpon_ni_start_onu_upgrade_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_START_ONU_UPGRADE_ID_LIST_OF_ONU_IDS)) != 0)
+    {
+        if (!bcmolt_pon_onu_id_list_u32_unpack(&this->list_of_onu_ids, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_start_onu_upgrade_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_START_ONU_UPGRADE_ID_LIST_OF_ONU_IDS)) != 0)
+    {
+        if (!bcmolt_pon_onu_id_list_u32_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_start_onu_upgrade_data_bounds_check(const bcmolt_gpon_ni_start_onu_upgrade_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_start_onu_upgrade_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_START_ONU_UPGRADE_ID_LIST_OF_ONU_IDS)) != 0)
+    {
+        if (!bcmolt_pon_onu_id_list_u32_bounds_check(&this->list_of_onu_ids))
+        {
+            *failed_prop = BCMOLT_GPON_NI_START_ONU_UPGRADE_ID_LIST_OF_ONU_IDS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_ni_broadcast_ploam_packet_data_set_default(bcmolt_gpon_ni_broadcast_ploam_packet_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_BROADCAST_PLOAM_PACKET_ID_PLOAM)) != 0)
+    {
+        memset(this->ploam.arr, 0, sizeof(this->ploam.arr));
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_broadcast_ploam_packet_data_pack(const bcmolt_gpon_ni_broadcast_ploam_packet_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_BROADCAST_PLOAM_PACKET_ID_PLOAM)) != 0)
+    {
+        if (!bcmolt_arr_u8_12_pack(&this->ploam, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_ni_broadcast_ploam_packet_data_get_packed_length(const bcmolt_gpon_ni_broadcast_ploam_packet_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_BROADCAST_PLOAM_PACKET_ID_PLOAM)) != 0)
+    {
+        count += 12;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_broadcast_ploam_packet_data_unpack(bcmolt_gpon_ni_broadcast_ploam_packet_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_BROADCAST_PLOAM_PACKET_ID_PLOAM)) != 0)
+    {
+        if (!bcmolt_arr_u8_12_unpack(&this->ploam, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_broadcast_ploam_packet_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_BROADCAST_PLOAM_PACKET_ID_PLOAM)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 12))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_broadcast_ploam_packet_data_bounds_check(const bcmolt_gpon_ni_broadcast_ploam_packet_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_broadcast_ploam_packet_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_BROADCAST_PLOAM_PACKET_ID_PLOAM)) != 0)
+    {
+        if (!bcmolt_arr_u8_12_bounds_check(&this->ploam))
+        {
+            *failed_prop = BCMOLT_GPON_NI_BROADCAST_PLOAM_PACKET_ID_PLOAM;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_ni_cpu_packets_data_set_default(bcmolt_gpon_ni_cpu_packets_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CPU_PACKETS_ID_PACKET_TYPE)) != 0)
+    {
+        this->packet_type = BCMOLT_PACKET_TYPE_CPU;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CPU_PACKETS_ID_CALC_CRC)) != 0)
+    {
+        this->calc_crc = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CPU_PACKETS_ID_GEM_PORT_LIST)) != 0)
+    {
+        this->gem_port_list.len = 0;
+        this->gem_port_list.val = NULL;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CPU_PACKETS_ID_BUFFER)) != 0)
+    {
+        this->buffer.len = 0;
+        this->buffer.val = NULL;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_cpu_packets_data_pack(const bcmolt_gpon_ni_cpu_packets_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CPU_PACKETS_ID_PACKET_TYPE)) != 0)
+    {
+        if (!bcmolt_packet_type_pack(this->packet_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CPU_PACKETS_ID_CALC_CRC)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->calc_crc))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CPU_PACKETS_ID_GEM_PORT_LIST)) != 0)
+    {
+        if (!bcmolt_gpon_gem_id_list_u8_max_16_pack(&this->gem_port_list, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CPU_PACKETS_ID_BUFFER)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_max_2048_pack(&this->buffer, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_ni_cpu_packets_data_get_packed_length(const bcmolt_gpon_ni_cpu_packets_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CPU_PACKETS_ID_PACKET_TYPE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CPU_PACKETS_ID_CALC_CRC)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CPU_PACKETS_ID_GEM_PORT_LIST)) != 0)
+    {
+        count += bcmolt_gpon_gem_id_list_u8_max_16_get_packed_length(&this->gem_port_list);
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CPU_PACKETS_ID_BUFFER)) != 0)
+    {
+        count += bcmolt_u8_list_u32_max_2048_get_packed_length(&this->buffer);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_cpu_packets_data_unpack(bcmolt_gpon_ni_cpu_packets_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CPU_PACKETS_ID_PACKET_TYPE)) != 0)
+    {
+        if (!bcmolt_packet_type_unpack(&this->packet_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CPU_PACKETS_ID_CALC_CRC)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->calc_crc))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CPU_PACKETS_ID_GEM_PORT_LIST)) != 0)
+    {
+        if (!bcmolt_gpon_gem_id_list_u8_max_16_unpack(&this->gem_port_list, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CPU_PACKETS_ID_BUFFER)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_max_2048_unpack(&this->buffer, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_cpu_packets_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CPU_PACKETS_ID_PACKET_TYPE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CPU_PACKETS_ID_CALC_CRC)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CPU_PACKETS_ID_GEM_PORT_LIST)) != 0)
+    {
+        if (!bcmolt_gpon_gem_id_list_u8_max_16_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CPU_PACKETS_ID_BUFFER)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_max_2048_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_ni_cpu_packets_data_bounds_check(const bcmolt_gpon_ni_cpu_packets_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_cpu_packets_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CPU_PACKETS_ID_PACKET_TYPE)) != 0)
+    {
+        switch (this->packet_type)
+        {
+            case BCMOLT_PACKET_TYPE_CPU:
+                break;
+            case BCMOLT_PACKET_TYPE_OMCI:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_NI_CPU_PACKETS_ID_PACKET_TYPE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CPU_PACKETS_ID_GEM_PORT_LIST)) != 0)
+    {
+        if (this->gem_port_list.len > 16)
+        {
+            return BCMOS_FALSE;
+        }
+
+        if (!bcmolt_gpon_gem_id_list_u8_max_16_bounds_check(&this->gem_port_list))
+        {
+            *failed_prop = BCMOLT_GPON_NI_CPU_PACKETS_ID_GEM_PORT_LIST;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_NI_CPU_PACKETS_ID_BUFFER)) != 0)
+    {
+        if (this->buffer.len > 2048)
+        {
+            return BCMOS_FALSE;
+        }
+
+        if (!bcmolt_u8_list_u32_max_2048_bounds_check(&this->buffer))
+        {
+            *failed_prop = BCMOLT_GPON_NI_CPU_PACKETS_ID_BUFFER;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_key_set_default(bcmolt_gpon_onu_key *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_ID_PON_NI)) != 0)
+    {
+        this->pon_ni = (bcmolt_gpon_ni) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_ID_ONU_ID)) != 0)
+    {
+        this->onu_id = (bcmolt_gpon_onu_id) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_key_pack(const bcmolt_gpon_onu_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, (uint8_t) this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->onu_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_key_get_packed_length(const bcmolt_gpon_onu_key *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_ID_PON_NI)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_ID_ONU_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_key_unpack(bcmolt_gpon_onu_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, (uint8_t *) &this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->onu_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_key_bounds_check(const bcmolt_gpon_onu_key *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_key_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_ID_PON_NI)) != 0)
+    {
+        if (this->pon_ni > (bcmolt_gpon_ni) 15)
+        {
+            *failed_prop = BCMOLT_GPON_ONU_KEY_ID_PON_NI;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_ID_ONU_ID)) != 0)
+    {
+        if (this->onu_id > (bcmolt_gpon_onu_id) 127)
+        {
+            *failed_prop = BCMOLT_GPON_ONU_KEY_ID_ONU_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_cfg_data_set_default(bcmolt_gpon_onu_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_ONU_STATE)) != 0)
+    {
+        this->onu_state = BCMOLT_ONU_STATE_NOT_CONFIGURED;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_SERIAL_NUMBER)) != 0)
+    {
+        memset(this->serial_number.vendor_id, 0, sizeof(this->serial_number.vendor_id));
+        memset(this->serial_number.vendor_specific, 0, sizeof(this->serial_number.vendor_specific));
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_PASSWORD)) != 0)
+    {
+        memset(this->password.arr, 0, sizeof(this->password.arr));
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_AUTO_PASSWORD_LEARNING)) != 0)
+    {
+        this->auto_password_learning = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_US_FEC)) != 0)
+    {
+        this->us_fec = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_OMCI_PORT_ID)) != 0)
+    {
+        this->omci_port_id = (bcmolt_gpon_gem_id) 65535U;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_DS_BER_REPORTING_INTERVAL)) != 0)
+    {
+        this->ds_ber_reporting_interval = (bcmolt_ber_interval) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_AES_ENCRYPTION_KEY)) != 0)
+    {
+        memset(this->aes_encryption_key.bytes, 0, sizeof(this->aes_encryption_key.bytes));
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_ALARM_STATE)) != 0)
+    {
+        this->alarm_state.losi = BCMOLT_STATUS_OFF;
+        this->alarm_state.lofi = BCMOLT_STATUS_OFF;
+        this->alarm_state.loami = BCMOLT_STATUS_OFF;
+        this->alarm_state.dgi = BCMOLT_STATUS_OFF;
+        this->alarm_state.tiwi = BCMOLT_STATUS_OFF;
+        this->alarm_state.dowi = BCMOLT_STATUS_OFF;
+        this->alarm_state.sufi = BCMOLT_STATUS_OFF;
+        this->alarm_state.sfi = BCMOLT_STATUS_OFF;
+        this->alarm_state.sdi = BCMOLT_STATUS_OFF;
+        this->alarm_state.dfi = BCMOLT_STATUS_OFF;
+        this->alarm_state.loai = BCMOLT_STATUS_OFF;
+        this->alarm_state.loki = BCMOLT_STATUS_OFF;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_RANGING_TIME)) != 0)
+    {
+        this->ranging_time = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_DISABLED_AFTER_DISCOVERY)) != 0)
+    {
+        this->disabled_after_discovery = BCMOLT_STATUS_OFF;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_DEACTIVATION_REASON)) != 0)
+    {
+        this->deactivation_reason = BCMOLT_DEACTIVATION_REASON_NONE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_ALL_GEM_PORTS)) != 0)
+    {
+        this->all_gem_ports.len = 0;
+        this->all_gem_ports.val = NULL;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_ALL_ALLOCS)) != 0)
+    {
+        this->all_allocs.len = 0;
+        this->all_allocs.val = NULL;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_ONU_PS_TYPE_C)) != 0)
+    {
+        this->onu_ps_type_c = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_EXTENDED_GUARD_TIME)) != 0)
+    {
+        this->extended_guard_time.additional_preburst_guard_time = 0;
+        this->extended_guard_time.additional_postburst_guard_time = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_cfg_data_pack(const bcmolt_gpon_onu_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_ONU_STATE)) != 0)
+    {
+        if (!bcmolt_onu_state_pack(this->onu_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmolt_serial_number_pack(&this->serial_number, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_PASSWORD)) != 0)
+    {
+        if (!bcmolt_arr_u8_10_pack(&this->password, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_AUTO_PASSWORD_LEARNING)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->auto_password_learning))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_US_FEC)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->us_fec))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_OMCI_PORT_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->omci_port_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_DS_BER_REPORTING_INTERVAL)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, (uint32_t) this->ds_ber_reporting_interval))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_AES_ENCRYPTION_KEY)) != 0)
+    {
+        if (!bcmolt_aes_key_pack(&this->aes_encryption_key, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_ALARM_STATE)) != 0)
+    {
+        if (!bcmolt_gpon_onu_alarm_state_pack(&this->alarm_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_RANGING_TIME)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->ranging_time))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_DISABLED_AFTER_DISCOVERY)) != 0)
+    {
+        if (!bcmolt_status_pack(this->disabled_after_discovery, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_DEACTIVATION_REASON)) != 0)
+    {
+        if (!bcmolt_deactivation_reason_pack(this->deactivation_reason, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_ALL_GEM_PORTS)) != 0)
+    {
+        if (!bcmolt_gpon_gem_port_with_state_list_u16_max_256_pack(&this->all_gem_ports, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_ALL_ALLOCS)) != 0)
+    {
+        if (!bcmolt_gpon_alloc_with_state_list_u16_max_32_pack(&this->all_allocs, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_ONU_PS_TYPE_C)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->onu_ps_type_c))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_EXTENDED_GUARD_TIME)) != 0)
+    {
+        if (!bcmolt_extended_guard_time_pack(&this->extended_guard_time, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_cfg_data_get_packed_length(const bcmolt_gpon_onu_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_ONU_STATE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_SERIAL_NUMBER)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_PASSWORD)) != 0)
+    {
+        count += 10;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_AUTO_PASSWORD_LEARNING)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_US_FEC)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_OMCI_PORT_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_DS_BER_REPORTING_INTERVAL)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_AES_ENCRYPTION_KEY)) != 0)
+    {
+        count += 16;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_ALARM_STATE)) != 0)
+    {
+        count += 12;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_RANGING_TIME)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_DISABLED_AFTER_DISCOVERY)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_DEACTIVATION_REASON)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_ALL_GEM_PORTS)) != 0)
+    {
+        count += bcmolt_gpon_gem_port_with_state_list_u16_max_256_get_packed_length(&this->all_gem_ports);
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_ALL_ALLOCS)) != 0)
+    {
+        count += bcmolt_gpon_alloc_with_state_list_u16_max_32_get_packed_length(&this->all_allocs);
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_ONU_PS_TYPE_C)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_EXTENDED_GUARD_TIME)) != 0)
+    {
+        count += 8;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_cfg_data_unpack(bcmolt_gpon_onu_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_ONU_STATE)) != 0)
+    {
+        if (!bcmolt_onu_state_unpack(&this->onu_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmolt_serial_number_unpack(&this->serial_number, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_PASSWORD)) != 0)
+    {
+        if (!bcmolt_arr_u8_10_unpack(&this->password, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_AUTO_PASSWORD_LEARNING)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->auto_password_learning))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_US_FEC)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->us_fec))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_OMCI_PORT_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->omci_port_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_DS_BER_REPORTING_INTERVAL)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, (uint32_t *) &this->ds_ber_reporting_interval))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_AES_ENCRYPTION_KEY)) != 0)
+    {
+        if (!bcmolt_aes_key_unpack(&this->aes_encryption_key, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_ALARM_STATE)) != 0)
+    {
+        if (!bcmolt_gpon_onu_alarm_state_unpack(&this->alarm_state, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_RANGING_TIME)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->ranging_time))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_DISABLED_AFTER_DISCOVERY)) != 0)
+    {
+        if (!bcmolt_status_unpack(&this->disabled_after_discovery, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_DEACTIVATION_REASON)) != 0)
+    {
+        if (!bcmolt_deactivation_reason_unpack(&this->deactivation_reason, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_ALL_GEM_PORTS)) != 0)
+    {
+        if (!bcmolt_gpon_gem_port_with_state_list_u16_max_256_unpack(&this->all_gem_ports, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_ALL_ALLOCS)) != 0)
+    {
+        if (!bcmolt_gpon_alloc_with_state_list_u16_max_32_unpack(&this->all_allocs, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_ONU_PS_TYPE_C)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->onu_ps_type_c))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_EXTENDED_GUARD_TIME)) != 0)
+    {
+        if (!bcmolt_extended_guard_time_unpack(&this->extended_guard_time, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_ONU_STATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_PASSWORD)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 10))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_AUTO_PASSWORD_LEARNING)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_US_FEC)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_OMCI_PORT_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_DS_BER_REPORTING_INTERVAL)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_AES_ENCRYPTION_KEY)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 16))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_ALARM_STATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 12))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_RANGING_TIME)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_DISABLED_AFTER_DISCOVERY)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_DEACTIVATION_REASON)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_ALL_GEM_PORTS)) != 0)
+    {
+        if (!bcmolt_gpon_gem_port_with_state_list_u16_max_256_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_ALL_ALLOCS)) != 0)
+    {
+        if (!bcmolt_gpon_alloc_with_state_list_u16_max_32_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_ONU_PS_TYPE_C)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_EXTENDED_GUARD_TIME)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_cfg_data_bounds_check(const bcmolt_gpon_onu_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_ONU_STATE)) != 0)
+    {
+        switch (this->onu_state)
+        {
+            case BCMOLT_ONU_STATE_NOT_CONFIGURED:
+                break;
+            case BCMOLT_ONU_STATE_INACTIVE:
+                break;
+            case BCMOLT_ONU_STATE_ACTIVE:
+                break;
+            case BCMOLT_ONU_STATE_ACTIVE_STANDBY:
+                break;
+            case BCMOLT_ONU_STATE_DISABLED:
+                break;
+            case BCMOLT_ONU_STATE_AWAKE_FREE:
+                break;
+            case BCMOLT_ONU_STATE_PROCESSING:
+                break;
+            case BCMOLT_ONU_STATE_LOW_POWER_DOZE:
+                break;
+            case BCMOLT_ONU_STATE_LOW_POWER_SLEEP:
+                break;
+            case BCMOLT_ONU_STATE_LOW_POWER_WATCH:
+                break;
+            case BCMOLT_ONU_STATE_UNAWARE:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_ONU_CFG_ID_ONU_STATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmolt_serial_number_bounds_check(&this->serial_number))
+        {
+            *failed_prop = BCMOLT_GPON_ONU_CFG_ID_SERIAL_NUMBER;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_PASSWORD)) != 0)
+    {
+        if (!bcmolt_arr_u8_10_bounds_check(&this->password))
+        {
+            *failed_prop = BCMOLT_GPON_ONU_CFG_ID_PASSWORD;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_OMCI_PORT_ID)) != 0)
+    {
+        if (this->omci_port_id > (bcmolt_gpon_gem_id) 4095)
+        {
+            *failed_prop = BCMOLT_GPON_ONU_CFG_ID_OMCI_PORT_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_DS_BER_REPORTING_INTERVAL)) != 0)
+    {
+        if (this->ds_ber_reporting_interval > (bcmolt_ber_interval) 536870911UL)
+        {
+            *failed_prop = BCMOLT_GPON_ONU_CFG_ID_DS_BER_REPORTING_INTERVAL;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_AES_ENCRYPTION_KEY)) != 0)
+    {
+        if (!bcmolt_aes_key_bounds_check(&this->aes_encryption_key))
+        {
+            *failed_prop = BCMOLT_GPON_ONU_CFG_ID_AES_ENCRYPTION_KEY;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_ALARM_STATE)) != 0)
+    {
+        if (!bcmolt_gpon_onu_alarm_state_bounds_check(&this->alarm_state))
+        {
+            *failed_prop = BCMOLT_GPON_ONU_CFG_ID_ALARM_STATE;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_DISABLED_AFTER_DISCOVERY)) != 0)
+    {
+        switch (this->disabled_after_discovery)
+        {
+            case BCMOLT_STATUS_OFF:
+                break;
+            case BCMOLT_STATUS_ON:
+                break;
+            case BCMOLT_STATUS_NO_CHANGE:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_ONU_CFG_ID_DISABLED_AFTER_DISCOVERY;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_DEACTIVATION_REASON)) != 0)
+    {
+        switch (this->deactivation_reason)
+        {
+            case BCMOLT_DEACTIVATION_REASON_NONE:
+                break;
+            case BCMOLT_DEACTIVATION_REASON_DEACTIVATION:
+                break;
+            case BCMOLT_DEACTIVATION_REASON_ACK_TIMEOUT:
+                break;
+            case BCMOLT_DEACTIVATION_REASON_SFI:
+                break;
+            case BCMOLT_DEACTIVATION_REASON_TIWI:
+                break;
+            case BCMOLT_DEACTIVATION_REASON_PASSWORD_AUTHENTICATION:
+                break;
+            case BCMOLT_DEACTIVATION_REASON_ONU_ALARM:
+                break;
+            case BCMOLT_DEACTIVATION_REASON_LOS:
+                break;
+            case BCMOLT_DEACTIVATION_REASON_LOKI:
+                break;
+            case BCMOLT_DEACTIVATION_REASON_RERANGE_FAILURE:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_ONU_CFG_ID_DEACTIVATION_REASON;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_ALL_GEM_PORTS)) != 0)
+    {
+        if (this->all_gem_ports.len > 256)
+        {
+            return BCMOS_FALSE;
+        }
+
+        if (!bcmolt_gpon_gem_port_with_state_list_u16_max_256_bounds_check(&this->all_gem_ports))
+        {
+            *failed_prop = BCMOLT_GPON_ONU_CFG_ID_ALL_GEM_PORTS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_ALL_ALLOCS)) != 0)
+    {
+        if (this->all_allocs.len > 32)
+        {
+            return BCMOS_FALSE;
+        }
+
+        if (!bcmolt_gpon_alloc_with_state_list_u16_max_32_bounds_check(&this->all_allocs))
+        {
+            *failed_prop = BCMOLT_GPON_ONU_CFG_ID_ALL_ALLOCS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CFG_ID_EXTENDED_GUARD_TIME)) != 0)
+    {
+        if (!bcmolt_extended_guard_time_bounds_check(&this->extended_guard_time))
+        {
+            *failed_prop = BCMOLT_GPON_ONU_CFG_ID_EXTENDED_GUARD_TIME;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_stat_data_set_default(bcmolt_gpon_onu_stat_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_FEC_CODEWORDS)) != 0)
+    {
+        this->fec_codewords = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_FEC_BYTES_CORRECTED)) != 0)
+    {
+        this->fec_bytes_corrected = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_FEC_CODEWORDS_CORRECTED)) != 0)
+    {
+        this->fec_codewords_corrected = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_FEC_CODEWORDS_UNCORRECTED)) != 0)
+    {
+        this->fec_codewords_uncorrected = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_BIP8_BYTES)) != 0)
+    {
+        this->bip8_bytes = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_BIP8_ERRORS)) != 0)
+    {
+        this->bip8_errors = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_RX_PLOAMS_CRC_ERROR)) != 0)
+    {
+        this->rx_ploams_crc_error = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_RX_PLOAMS_NON_IDLE)) != 0)
+    {
+        this->rx_ploams_non_idle = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_POSITIVE_DRIFT)) != 0)
+    {
+        this->positive_drift = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_NEGATIVE_DRIFT)) != 0)
+    {
+        this->negative_drift = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_RX_OMCI)) != 0)
+    {
+        this->rx_omci = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR)) != 0)
+    {
+        this->rx_omci_packets_crc_error = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_BER_REPORTED)) != 0)
+    {
+        this->ber_reported = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_UNRECEIVED_BURST)) != 0)
+    {
+        this->unreceived_burst = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_LCDG_ERRORS)) != 0)
+    {
+        this->lcdg_errors = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_RDI_ERRORS)) != 0)
+    {
+        this->rdi_errors = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_RX_BYTES)) != 0)
+    {
+        this->rx_bytes = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_RX_PACKETS)) != 0)
+    {
+        this->rx_packets = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_TX_BYTES)) != 0)
+    {
+        this->tx_bytes = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_TX_PACKETS)) != 0)
+    {
+        this->tx_packets = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_stat_data_pack(const bcmolt_gpon_onu_stat_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_FEC_CODEWORDS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->fec_codewords))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_FEC_BYTES_CORRECTED)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->fec_bytes_corrected))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_FEC_CODEWORDS_CORRECTED)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->fec_codewords_corrected))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_FEC_CODEWORDS_UNCORRECTED)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->fec_codewords_uncorrected))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_BIP8_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->bip8_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_BIP8_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->bip8_errors))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_RX_PLOAMS_CRC_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_ploams_crc_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_RX_PLOAMS_NON_IDLE)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_ploams_non_idle))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_POSITIVE_DRIFT)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->positive_drift))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_NEGATIVE_DRIFT)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->negative_drift))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_RX_OMCI)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_omci))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_omci_packets_crc_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_BER_REPORTED)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->ber_reported))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_UNRECEIVED_BURST)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->unreceived_burst))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_LCDG_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->lcdg_errors))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_RDI_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rdi_errors))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_RX_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_RX_PACKETS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_packets))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_TX_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_TX_PACKETS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_packets))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_stat_data_get_packed_length(const bcmolt_gpon_onu_stat_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_FEC_CODEWORDS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_FEC_BYTES_CORRECTED)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_FEC_CODEWORDS_CORRECTED)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_FEC_CODEWORDS_UNCORRECTED)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_BIP8_BYTES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_BIP8_ERRORS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_RX_PLOAMS_CRC_ERROR)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_RX_PLOAMS_NON_IDLE)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_POSITIVE_DRIFT)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_NEGATIVE_DRIFT)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_RX_OMCI)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_BER_REPORTED)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_UNRECEIVED_BURST)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_LCDG_ERRORS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_RDI_ERRORS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_RX_BYTES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_RX_PACKETS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_TX_BYTES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_TX_PACKETS)) != 0)
+    {
+        count += 8;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_stat_data_unpack(bcmolt_gpon_onu_stat_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_FEC_CODEWORDS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->fec_codewords))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_FEC_BYTES_CORRECTED)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->fec_bytes_corrected))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_FEC_CODEWORDS_CORRECTED)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->fec_codewords_corrected))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_FEC_CODEWORDS_UNCORRECTED)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->fec_codewords_uncorrected))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_BIP8_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->bip8_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_BIP8_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->bip8_errors))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_RX_PLOAMS_CRC_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_ploams_crc_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_RX_PLOAMS_NON_IDLE)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_ploams_non_idle))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_POSITIVE_DRIFT)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->positive_drift))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_NEGATIVE_DRIFT)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->negative_drift))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_RX_OMCI)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_omci))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_omci_packets_crc_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_BER_REPORTED)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->ber_reported))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_UNRECEIVED_BURST)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->unreceived_burst))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_LCDG_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->lcdg_errors))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_RDI_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rdi_errors))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_RX_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_RX_PACKETS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_packets))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_TX_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_TX_PACKETS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_packets))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_stat_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_FEC_CODEWORDS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_FEC_BYTES_CORRECTED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_FEC_CODEWORDS_CORRECTED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_FEC_CODEWORDS_UNCORRECTED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_BIP8_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_BIP8_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_RX_PLOAMS_CRC_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_RX_PLOAMS_NON_IDLE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_POSITIVE_DRIFT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_NEGATIVE_DRIFT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_RX_OMCI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_BER_REPORTED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_UNRECEIVED_BURST)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_LCDG_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_RDI_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_RX_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_RX_PACKETS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_TX_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ID_TX_PACKETS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_stat_data_bounds_check(const bcmolt_gpon_onu_stat_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_stat_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_stat_cfg_data_set_default(bcmolt_gpon_onu_stat_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_CFG_ID_CFG)) != 0)
+    {
+        this->cfg.trigger.type = BCMOLT_STAT_CONDITION_TYPE_NONE;
+        this->cfg.soak.active_soak_time = 0;
+        this->cfg.soak.clear_soak_time = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_stat_cfg_data_pack(const bcmolt_gpon_onu_stat_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_pack(&this->cfg, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_stat_cfg_data_get_packed_length(const bcmolt_gpon_onu_stat_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_CFG_ID_CFG)) != 0)
+    {
+        count += bcmolt_stat_alarm_config_get_packed_length(&this->cfg);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_stat_cfg_data_unpack(bcmolt_gpon_onu_stat_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_unpack(&this->cfg, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_stat_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_stat_cfg_data_bounds_check(const bcmolt_gpon_onu_stat_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_stat_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_bounds_check(&this->cfg))
+        {
+            *failed_prop = BCMOLT_GPON_ONU_STAT_CFG_ID_CFG;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_ber_interval_configuration_completed_data_set_default(bcmolt_gpon_onu_ber_interval_configuration_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_BER_INTERVAL_CONFIGURATION_COMPLETED_ID_BER_INTERVAL)) != 0)
+    {
+        this->ber_interval = (bcmolt_ber_interval) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_BER_INTERVAL_CONFIGURATION_COMPLETED_ID_RESULT)) != 0)
+    {
+        this->result = BCMOLT_RESULT_SUCCESS;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_ber_interval_configuration_completed_data_pack(const bcmolt_gpon_onu_ber_interval_configuration_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_BER_INTERVAL_CONFIGURATION_COMPLETED_ID_BER_INTERVAL)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, (uint32_t) this->ber_interval))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_BER_INTERVAL_CONFIGURATION_COMPLETED_ID_RESULT)) != 0)
+    {
+        if (!bcmolt_result_pack(this->result, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_ber_interval_configuration_completed_data_get_packed_length(const bcmolt_gpon_onu_ber_interval_configuration_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_BER_INTERVAL_CONFIGURATION_COMPLETED_ID_BER_INTERVAL)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_BER_INTERVAL_CONFIGURATION_COMPLETED_ID_RESULT)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_ber_interval_configuration_completed_data_unpack(bcmolt_gpon_onu_ber_interval_configuration_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_BER_INTERVAL_CONFIGURATION_COMPLETED_ID_BER_INTERVAL)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, (uint32_t *) &this->ber_interval))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_BER_INTERVAL_CONFIGURATION_COMPLETED_ID_RESULT)) != 0)
+    {
+        if (!bcmolt_result_unpack(&this->result, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_ber_interval_configuration_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_BER_INTERVAL_CONFIGURATION_COMPLETED_ID_BER_INTERVAL)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_BER_INTERVAL_CONFIGURATION_COMPLETED_ID_RESULT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_ber_interval_configuration_completed_data_bounds_check(const bcmolt_gpon_onu_ber_interval_configuration_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_ber_interval_configuration_completed_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_BER_INTERVAL_CONFIGURATION_COMPLETED_ID_RESULT)) != 0)
+    {
+        switch (this->result)
+        {
+            case BCMOLT_RESULT_SUCCESS:
+                break;
+            case BCMOLT_RESULT_FAIL:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_ONU_BER_INTERVAL_CONFIGURATION_COMPLETED_ID_RESULT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_dfi_data_set_default(bcmolt_gpon_onu_dfi_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_DFI_ID_ALARM_STATUS)) != 0)
+    {
+        this->alarm_status = BCMOLT_STATUS_OFF;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_dfi_data_pack(const bcmolt_gpon_onu_dfi_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_DFI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_pack(this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_dfi_data_get_packed_length(const bcmolt_gpon_onu_dfi_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_DFI_ID_ALARM_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_dfi_data_unpack(bcmolt_gpon_onu_dfi_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_DFI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_unpack(&this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_dfi_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_DFI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_dfi_data_bounds_check(const bcmolt_gpon_onu_dfi_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_dfi_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_DFI_ID_ALARM_STATUS)) != 0)
+    {
+        switch (this->alarm_status)
+        {
+            case BCMOLT_STATUS_OFF:
+                break;
+            case BCMOLT_STATUS_ON:
+                break;
+            case BCMOLT_STATUS_NO_CHANGE:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_ONU_DFI_ID_ALARM_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_dgi_data_set_default(bcmolt_gpon_onu_dgi_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_DGI_ID_ALARM_STATUS)) != 0)
+    {
+        this->alarm_status = BCMOLT_STATUS_OFF;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_dgi_data_pack(const bcmolt_gpon_onu_dgi_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_DGI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_pack(this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_dgi_data_get_packed_length(const bcmolt_gpon_onu_dgi_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_DGI_ID_ALARM_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_dgi_data_unpack(bcmolt_gpon_onu_dgi_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_DGI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_unpack(&this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_dgi_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_DGI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_dgi_data_bounds_check(const bcmolt_gpon_onu_dgi_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_dgi_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_DGI_ID_ALARM_STATUS)) != 0)
+    {
+        switch (this->alarm_status)
+        {
+            case BCMOLT_STATUS_OFF:
+                break;
+            case BCMOLT_STATUS_ON:
+                break;
+            case BCMOLT_STATUS_NO_CHANGE:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_ONU_DGI_ID_ALARM_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_dowi_data_set_default(bcmolt_gpon_onu_dowi_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_DOWI_ID_ALARM_STATUS)) != 0)
+    {
+        this->alarm_status = BCMOLT_STATUS_OFF;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_DOWI_ID_DRIFT_VALUE)) != 0)
+    {
+        this->drift_value = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_DOWI_ID_NEW_EQD)) != 0)
+    {
+        this->new_eqd = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_dowi_data_pack(const bcmolt_gpon_onu_dowi_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_DOWI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_pack(this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_DOWI_ID_DRIFT_VALUE)) != 0)
+    {
+        if (!bcmolt_buf_write_s32(buf, this->drift_value))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_DOWI_ID_NEW_EQD)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->new_eqd))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_dowi_data_get_packed_length(const bcmolt_gpon_onu_dowi_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_DOWI_ID_ALARM_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_DOWI_ID_DRIFT_VALUE)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_DOWI_ID_NEW_EQD)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_dowi_data_unpack(bcmolt_gpon_onu_dowi_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_DOWI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_unpack(&this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_DOWI_ID_DRIFT_VALUE)) != 0)
+    {
+        if (!bcmolt_buf_read_s32(buf, &this->drift_value))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_DOWI_ID_NEW_EQD)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->new_eqd))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_dowi_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_DOWI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_DOWI_ID_DRIFT_VALUE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_DOWI_ID_NEW_EQD)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_dowi_data_bounds_check(const bcmolt_gpon_onu_dowi_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_dowi_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_DOWI_ID_ALARM_STATUS)) != 0)
+    {
+        switch (this->alarm_status)
+        {
+            case BCMOLT_STATUS_OFF:
+                break;
+            case BCMOLT_STATUS_ON:
+                break;
+            case BCMOLT_STATUS_NO_CHANGE:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_ONU_DOWI_ID_ALARM_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_err_data_set_default(bcmolt_gpon_onu_err_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ERR_ID_BIP8_ERRORS)) != 0)
+    {
+        this->bip8_errors = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_err_data_pack(const bcmolt_gpon_onu_err_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ERR_ID_BIP8_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->bip8_errors))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_err_data_get_packed_length(const bcmolt_gpon_onu_err_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ERR_ID_BIP8_ERRORS)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_err_data_unpack(bcmolt_gpon_onu_err_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ERR_ID_BIP8_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->bip8_errors))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_err_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ERR_ID_BIP8_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_err_data_bounds_check(const bcmolt_gpon_onu_err_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_err_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_invalid_dbru_report_data_set_default(bcmolt_gpon_onu_invalid_dbru_report_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_INVALID_DBRU_REPORT_ID_ALLOC_ID)) != 0)
+    {
+        this->alloc_id = (bcmolt_gpon_alloc_id) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_invalid_dbru_report_data_pack(const bcmolt_gpon_onu_invalid_dbru_report_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_INVALID_DBRU_REPORT_ID_ALLOC_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->alloc_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_invalid_dbru_report_data_get_packed_length(const bcmolt_gpon_onu_invalid_dbru_report_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_INVALID_DBRU_REPORT_ID_ALLOC_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_invalid_dbru_report_data_unpack(bcmolt_gpon_onu_invalid_dbru_report_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_INVALID_DBRU_REPORT_ID_ALLOC_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->alloc_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_invalid_dbru_report_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_INVALID_DBRU_REPORT_ID_ALLOC_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_invalid_dbru_report_data_bounds_check(const bcmolt_gpon_onu_invalid_dbru_report_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_invalid_dbru_report_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_INVALID_DBRU_REPORT_ID_ALLOC_ID)) != 0)
+    {
+        if (this->alloc_id > (bcmolt_gpon_alloc_id) 4095)
+        {
+            *failed_prop = BCMOLT_GPON_ONU_INVALID_DBRU_REPORT_ID_ALLOC_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_key_exchange_completed_data_set_default(bcmolt_gpon_onu_key_exchange_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_EXCHANGE_COMPLETED_ID_NEW_KEY)) != 0)
+    {
+        memset(this->new_key.bytes, 0, sizeof(this->new_key.bytes));
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_key_exchange_completed_data_pack(const bcmolt_gpon_onu_key_exchange_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_EXCHANGE_COMPLETED_ID_NEW_KEY)) != 0)
+    {
+        if (!bcmolt_aes_key_pack(&this->new_key, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_key_exchange_completed_data_get_packed_length(const bcmolt_gpon_onu_key_exchange_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_EXCHANGE_COMPLETED_ID_NEW_KEY)) != 0)
+    {
+        count += 16;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_key_exchange_completed_data_unpack(bcmolt_gpon_onu_key_exchange_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_EXCHANGE_COMPLETED_ID_NEW_KEY)) != 0)
+    {
+        if (!bcmolt_aes_key_unpack(&this->new_key, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_key_exchange_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_EXCHANGE_COMPLETED_ID_NEW_KEY)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 16))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_key_exchange_completed_data_bounds_check(const bcmolt_gpon_onu_key_exchange_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_key_exchange_completed_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_EXCHANGE_COMPLETED_ID_NEW_KEY)) != 0)
+    {
+        if (!bcmolt_aes_key_bounds_check(&this->new_key))
+        {
+            *failed_prop = BCMOLT_GPON_ONU_KEY_EXCHANGE_COMPLETED_ID_NEW_KEY;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_key_exchange_decrypt_required_data_set_default(bcmolt_gpon_onu_key_exchange_decrypt_required_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_EXCHANGE_DECRYPT_REQUIRED_ID_NEW_KEY)) != 0)
+    {
+        memset(this->new_key.bytes, 0, sizeof(this->new_key.bytes));
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_key_exchange_decrypt_required_data_pack(const bcmolt_gpon_onu_key_exchange_decrypt_required_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_EXCHANGE_DECRYPT_REQUIRED_ID_NEW_KEY)) != 0)
+    {
+        if (!bcmolt_aes_key_pack(&this->new_key, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_key_exchange_decrypt_required_data_get_packed_length(const bcmolt_gpon_onu_key_exchange_decrypt_required_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_EXCHANGE_DECRYPT_REQUIRED_ID_NEW_KEY)) != 0)
+    {
+        count += 16;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_key_exchange_decrypt_required_data_unpack(bcmolt_gpon_onu_key_exchange_decrypt_required_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_EXCHANGE_DECRYPT_REQUIRED_ID_NEW_KEY)) != 0)
+    {
+        if (!bcmolt_aes_key_unpack(&this->new_key, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_key_exchange_decrypt_required_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_EXCHANGE_DECRYPT_REQUIRED_ID_NEW_KEY)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 16))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_key_exchange_decrypt_required_data_bounds_check(const bcmolt_gpon_onu_key_exchange_decrypt_required_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_key_exchange_decrypt_required_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_EXCHANGE_DECRYPT_REQUIRED_ID_NEW_KEY)) != 0)
+    {
+        if (!bcmolt_aes_key_bounds_check(&this->new_key))
+        {
+            *failed_prop = BCMOLT_GPON_ONU_KEY_EXCHANGE_DECRYPT_REQUIRED_ID_NEW_KEY;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_key_exchange_key_mismatch_data_set_default(bcmolt_gpon_onu_key_exchange_key_mismatch_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID_EXPECTED_KEY)) != 0)
+    {
+        memset(this->expected_key.bytes, 0, sizeof(this->expected_key.bytes));
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID_RECEIVED_KEY)) != 0)
+    {
+        memset(this->received_key.bytes, 0, sizeof(this->received_key.bytes));
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_key_exchange_key_mismatch_data_pack(const bcmolt_gpon_onu_key_exchange_key_mismatch_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID_EXPECTED_KEY)) != 0)
+    {
+        if (!bcmolt_aes_key_pack(&this->expected_key, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID_RECEIVED_KEY)) != 0)
+    {
+        if (!bcmolt_aes_key_pack(&this->received_key, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_key_exchange_key_mismatch_data_get_packed_length(const bcmolt_gpon_onu_key_exchange_key_mismatch_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID_EXPECTED_KEY)) != 0)
+    {
+        count += 16;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID_RECEIVED_KEY)) != 0)
+    {
+        count += 16;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_key_exchange_key_mismatch_data_unpack(bcmolt_gpon_onu_key_exchange_key_mismatch_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID_EXPECTED_KEY)) != 0)
+    {
+        if (!bcmolt_aes_key_unpack(&this->expected_key, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID_RECEIVED_KEY)) != 0)
+    {
+        if (!bcmolt_aes_key_unpack(&this->received_key, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_key_exchange_key_mismatch_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID_EXPECTED_KEY)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 16))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID_RECEIVED_KEY)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 16))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_key_exchange_key_mismatch_data_bounds_check(const bcmolt_gpon_onu_key_exchange_key_mismatch_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_key_exchange_key_mismatch_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID_EXPECTED_KEY)) != 0)
+    {
+        if (!bcmolt_aes_key_bounds_check(&this->expected_key))
+        {
+            *failed_prop = BCMOLT_GPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID_EXPECTED_KEY;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID_RECEIVED_KEY)) != 0)
+    {
+        if (!bcmolt_aes_key_bounds_check(&this->received_key))
+        {
+            *failed_prop = BCMOLT_GPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID_RECEIVED_KEY;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_key_exchange_unconsecutive_index_data_set_default(bcmolt_gpon_onu_key_exchange_unconsecutive_index_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_EXCHANGE_UNCONSECUTIVE_INDEX_ID_EXPECTED_INDEX)) != 0)
+    {
+        this->expected_index = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_EXCHANGE_UNCONSECUTIVE_INDEX_ID_ACTUAL_INDEX)) != 0)
+    {
+        this->actual_index = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_key_exchange_unconsecutive_index_data_pack(const bcmolt_gpon_onu_key_exchange_unconsecutive_index_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_EXCHANGE_UNCONSECUTIVE_INDEX_ID_EXPECTED_INDEX)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->expected_index))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_EXCHANGE_UNCONSECUTIVE_INDEX_ID_ACTUAL_INDEX)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->actual_index))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_key_exchange_unconsecutive_index_data_get_packed_length(const bcmolt_gpon_onu_key_exchange_unconsecutive_index_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_EXCHANGE_UNCONSECUTIVE_INDEX_ID_EXPECTED_INDEX)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_EXCHANGE_UNCONSECUTIVE_INDEX_ID_ACTUAL_INDEX)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_key_exchange_unconsecutive_index_data_unpack(bcmolt_gpon_onu_key_exchange_unconsecutive_index_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_EXCHANGE_UNCONSECUTIVE_INDEX_ID_EXPECTED_INDEX)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->expected_index))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_EXCHANGE_UNCONSECUTIVE_INDEX_ID_ACTUAL_INDEX)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->actual_index))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_key_exchange_unconsecutive_index_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_EXCHANGE_UNCONSECUTIVE_INDEX_ID_EXPECTED_INDEX)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_KEY_EXCHANGE_UNCONSECUTIVE_INDEX_ID_ACTUAL_INDEX)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_key_exchange_unconsecutive_index_data_bounds_check(const bcmolt_gpon_onu_key_exchange_unconsecutive_index_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_key_exchange_unconsecutive_index_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_loai_data_set_default(bcmolt_gpon_onu_loai_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_LOAI_ID_ALARM_STATUS)) != 0)
+    {
+        this->alarm_status = BCMOLT_STATUS_OFF;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_loai_data_pack(const bcmolt_gpon_onu_loai_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_LOAI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_pack(this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_loai_data_get_packed_length(const bcmolt_gpon_onu_loai_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_LOAI_ID_ALARM_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_loai_data_unpack(bcmolt_gpon_onu_loai_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_LOAI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_unpack(&this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_loai_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_LOAI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_loai_data_bounds_check(const bcmolt_gpon_onu_loai_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_loai_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_LOAI_ID_ALARM_STATUS)) != 0)
+    {
+        switch (this->alarm_status)
+        {
+            case BCMOLT_STATUS_OFF:
+                break;
+            case BCMOLT_STATUS_ON:
+                break;
+            case BCMOLT_STATUS_NO_CHANGE:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_ONU_LOAI_ID_ALARM_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_loki_data_set_default(bcmolt_gpon_onu_loki_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_LOKI_ID_ALARM_STATUS)) != 0)
+    {
+        this->alarm_status = BCMOLT_STATUS_OFF;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_loki_data_pack(const bcmolt_gpon_onu_loki_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_LOKI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_pack(this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_loki_data_get_packed_length(const bcmolt_gpon_onu_loki_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_LOKI_ID_ALARM_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_loki_data_unpack(bcmolt_gpon_onu_loki_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_LOKI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_unpack(&this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_loki_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_LOKI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_loki_data_bounds_check(const bcmolt_gpon_onu_loki_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_loki_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_LOKI_ID_ALARM_STATUS)) != 0)
+    {
+        switch (this->alarm_status)
+        {
+            case BCMOLT_STATUS_OFF:
+                break;
+            case BCMOLT_STATUS_ON:
+                break;
+            case BCMOLT_STATUS_NO_CHANGE:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_ONU_LOKI_ID_ALARM_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_memi_data_set_default(bcmolt_gpon_onu_memi_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_MEMI_ID_PLOAM_BUFFER)) != 0)
+    {
+        memset(this->ploam_buffer.arr, 0, sizeof(this->ploam_buffer.arr));
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_memi_data_pack(const bcmolt_gpon_onu_memi_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_MEMI_ID_PLOAM_BUFFER)) != 0)
+    {
+        if (!bcmolt_arr_u8_13_pack(&this->ploam_buffer, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_memi_data_get_packed_length(const bcmolt_gpon_onu_memi_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_MEMI_ID_PLOAM_BUFFER)) != 0)
+    {
+        count += 13;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_memi_data_unpack(bcmolt_gpon_onu_memi_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_MEMI_ID_PLOAM_BUFFER)) != 0)
+    {
+        if (!bcmolt_arr_u8_13_unpack(&this->ploam_buffer, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_memi_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_MEMI_ID_PLOAM_BUFFER)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 13))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_memi_data_bounds_check(const bcmolt_gpon_onu_memi_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_memi_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_MEMI_ID_PLOAM_BUFFER)) != 0)
+    {
+        if (!bcmolt_arr_u8_13_bounds_check(&this->ploam_buffer))
+        {
+            *failed_prop = BCMOLT_GPON_ONU_MEMI_ID_PLOAM_BUFFER;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_omci_port_id_configuration_completed_data_set_default(bcmolt_gpon_onu_omci_port_id_configuration_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_OMCI_PORT_ID_CONFIGURATION_COMPLETED_ID_GEM_PORT)) != 0)
+    {
+        this->gem_port = (bcmolt_gpon_gem_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_OMCI_PORT_ID_CONFIGURATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        this->status = BCMOLT_RESULT_SUCCESS;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_OMCI_PORT_ID_CONFIGURATION_COMPLETED_ID_OPERATION)) != 0)
+    {
+        this->operation = BCMOLT_OMCI_PORT_ID_OPERATION_CONFIGURE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_omci_port_id_configuration_completed_data_pack(const bcmolt_gpon_onu_omci_port_id_configuration_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_OMCI_PORT_ID_CONFIGURATION_COMPLETED_ID_GEM_PORT)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->gem_port))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_OMCI_PORT_ID_CONFIGURATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_result_pack(this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_OMCI_PORT_ID_CONFIGURATION_COMPLETED_ID_OPERATION)) != 0)
+    {
+        if (!bcmolt_omci_port_id_operation_pack(this->operation, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_omci_port_id_configuration_completed_data_get_packed_length(const bcmolt_gpon_onu_omci_port_id_configuration_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_OMCI_PORT_ID_CONFIGURATION_COMPLETED_ID_GEM_PORT)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_OMCI_PORT_ID_CONFIGURATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_OMCI_PORT_ID_CONFIGURATION_COMPLETED_ID_OPERATION)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_omci_port_id_configuration_completed_data_unpack(bcmolt_gpon_onu_omci_port_id_configuration_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_OMCI_PORT_ID_CONFIGURATION_COMPLETED_ID_GEM_PORT)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->gem_port))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_OMCI_PORT_ID_CONFIGURATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_result_unpack(&this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_OMCI_PORT_ID_CONFIGURATION_COMPLETED_ID_OPERATION)) != 0)
+    {
+        if (!bcmolt_omci_port_id_operation_unpack(&this->operation, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_omci_port_id_configuration_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_OMCI_PORT_ID_CONFIGURATION_COMPLETED_ID_GEM_PORT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_OMCI_PORT_ID_CONFIGURATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_OMCI_PORT_ID_CONFIGURATION_COMPLETED_ID_OPERATION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_omci_port_id_configuration_completed_data_bounds_check(const bcmolt_gpon_onu_omci_port_id_configuration_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_omci_port_id_configuration_completed_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_OMCI_PORT_ID_CONFIGURATION_COMPLETED_ID_GEM_PORT)) != 0)
+    {
+        if (this->gem_port > (bcmolt_gpon_gem_id) 4095)
+        {
+            *failed_prop = BCMOLT_GPON_ONU_OMCI_PORT_ID_CONFIGURATION_COMPLETED_ID_GEM_PORT;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_OMCI_PORT_ID_CONFIGURATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        switch (this->status)
+        {
+            case BCMOLT_RESULT_SUCCESS:
+                break;
+            case BCMOLT_RESULT_FAIL:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_ONU_OMCI_PORT_ID_CONFIGURATION_COMPLETED_ID_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_OMCI_PORT_ID_CONFIGURATION_COMPLETED_ID_OPERATION)) != 0)
+    {
+        switch (this->operation)
+        {
+            case BCMOLT_OMCI_PORT_ID_OPERATION_CONFIGURE:
+                break;
+            case BCMOLT_OMCI_PORT_ID_OPERATION_REMOVE:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_ONU_OMCI_PORT_ID_CONFIGURATION_COMPLETED_ID_OPERATION;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_onu_activation_completed_data_set_default(bcmolt_gpon_onu_onu_activation_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ONU_ACTIVATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        this->status = BCMOLT_RESULT_SUCCESS;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ONU_ACTIVATION_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        this->fail_reason = BCMOLT_ACTIVATION_FAIL_REASON_NONE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_onu_activation_completed_data_pack(const bcmolt_gpon_onu_onu_activation_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ONU_ACTIVATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_result_pack(this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ONU_ACTIVATION_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        if (!bcmolt_activation_fail_reason_pack(this->fail_reason, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_onu_activation_completed_data_get_packed_length(const bcmolt_gpon_onu_onu_activation_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ONU_ACTIVATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ONU_ACTIVATION_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_onu_activation_completed_data_unpack(bcmolt_gpon_onu_onu_activation_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ONU_ACTIVATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_result_unpack(&this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ONU_ACTIVATION_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        if (!bcmolt_activation_fail_reason_unpack(&this->fail_reason, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_onu_activation_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ONU_ACTIVATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ONU_ACTIVATION_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_onu_activation_completed_data_bounds_check(const bcmolt_gpon_onu_onu_activation_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_onu_activation_completed_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ONU_ACTIVATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        switch (this->status)
+        {
+            case BCMOLT_RESULT_SUCCESS:
+                break;
+            case BCMOLT_RESULT_FAIL:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_ONU_ONU_ACTIVATION_COMPLETED_ID_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ONU_ACTIVATION_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        switch (this->fail_reason)
+        {
+            case BCMOLT_ACTIVATION_FAIL_REASON_NONE:
+                break;
+            case BCMOLT_ACTIVATION_FAIL_REASON_RANGING:
+                break;
+            case BCMOLT_ACTIVATION_FAIL_REASON_PASSWORD_AUTHENTICATION:
+                break;
+            case BCMOLT_ACTIVATION_FAIL_REASON_LOS:
+                break;
+            case BCMOLT_ACTIVATION_FAIL_REASON_ONU_ALARM:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_ONU_ONU_ACTIVATION_COMPLETED_ID_FAIL_REASON;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_onu_activation_standby_completed_data_set_default(bcmolt_gpon_onu_onu_activation_standby_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ONU_ACTIVATION_STANDBY_COMPLETED_ID_RESULT)) != 0)
+    {
+        this->result = BCMOLT_RESULT_SUCCESS;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_onu_activation_standby_completed_data_pack(const bcmolt_gpon_onu_onu_activation_standby_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ONU_ACTIVATION_STANDBY_COMPLETED_ID_RESULT)) != 0)
+    {
+        if (!bcmolt_result_pack(this->result, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_onu_activation_standby_completed_data_get_packed_length(const bcmolt_gpon_onu_onu_activation_standby_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ONU_ACTIVATION_STANDBY_COMPLETED_ID_RESULT)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_onu_activation_standby_completed_data_unpack(bcmolt_gpon_onu_onu_activation_standby_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ONU_ACTIVATION_STANDBY_COMPLETED_ID_RESULT)) != 0)
+    {
+        if (!bcmolt_result_unpack(&this->result, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_onu_activation_standby_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ONU_ACTIVATION_STANDBY_COMPLETED_ID_RESULT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_onu_activation_standby_completed_data_bounds_check(const bcmolt_gpon_onu_onu_activation_standby_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_onu_activation_standby_completed_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ONU_ACTIVATION_STANDBY_COMPLETED_ID_RESULT)) != 0)
+    {
+        switch (this->result)
+        {
+            case BCMOLT_RESULT_SUCCESS:
+                break;
+            case BCMOLT_RESULT_FAIL:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_ONU_ONU_ACTIVATION_STANDBY_COMPLETED_ID_RESULT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_onu_alarm_data_set_default(bcmolt_gpon_onu_onu_alarm_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ONU_ALARM_ID_ONU_ALARM)) != 0)
+    {
+        this->onu_alarm.losi = BCMOLT_STATUS_OFF;
+        this->onu_alarm.lofi = BCMOLT_STATUS_OFF;
+        this->onu_alarm.loami = BCMOLT_STATUS_OFF;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_onu_alarm_data_pack(const bcmolt_gpon_onu_onu_alarm_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ONU_ALARM_ID_ONU_ALARM)) != 0)
+    {
+        if (!bcmolt_gpon_onu_alarms_pack(&this->onu_alarm, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_onu_alarm_data_get_packed_length(const bcmolt_gpon_onu_onu_alarm_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ONU_ALARM_ID_ONU_ALARM)) != 0)
+    {
+        count += 3;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_onu_alarm_data_unpack(bcmolt_gpon_onu_onu_alarm_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ONU_ALARM_ID_ONU_ALARM)) != 0)
+    {
+        if (!bcmolt_gpon_onu_alarms_unpack(&this->onu_alarm, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_onu_alarm_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ONU_ALARM_ID_ONU_ALARM)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 3))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_onu_alarm_data_bounds_check(const bcmolt_gpon_onu_onu_alarm_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_onu_alarm_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ONU_ALARM_ID_ONU_ALARM)) != 0)
+    {
+        if (!bcmolt_gpon_onu_alarms_bounds_check(&this->onu_alarm))
+        {
+            *failed_prop = BCMOLT_GPON_ONU_ONU_ALARM_ID_ONU_ALARM;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_onu_deactivation_completed_data_set_default(bcmolt_gpon_onu_onu_deactivation_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ONU_DEACTIVATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        this->status = BCMOLT_RESULT_SUCCESS;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_onu_deactivation_completed_data_pack(const bcmolt_gpon_onu_onu_deactivation_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ONU_DEACTIVATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_result_pack(this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_onu_deactivation_completed_data_get_packed_length(const bcmolt_gpon_onu_onu_deactivation_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ONU_DEACTIVATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_onu_deactivation_completed_data_unpack(bcmolt_gpon_onu_onu_deactivation_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ONU_DEACTIVATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_result_unpack(&this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_onu_deactivation_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ONU_DEACTIVATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_onu_deactivation_completed_data_bounds_check(const bcmolt_gpon_onu_onu_deactivation_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_onu_deactivation_completed_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ONU_DEACTIVATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        switch (this->status)
+        {
+            case BCMOLT_RESULT_SUCCESS:
+                break;
+            case BCMOLT_RESULT_FAIL:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_ONU_ONU_DEACTIVATION_COMPLETED_ID_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_onu_disable_completed_data_set_default(bcmolt_gpon_onu_onu_disable_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ONU_DISABLE_COMPLETED_ID_SERIAL_NUMBER)) != 0)
+    {
+        memset(this->serial_number.vendor_id, 0, sizeof(this->serial_number.vendor_id));
+        memset(this->serial_number.vendor_specific, 0, sizeof(this->serial_number.vendor_specific));
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_onu_disable_completed_data_pack(const bcmolt_gpon_onu_onu_disable_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ONU_DISABLE_COMPLETED_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmolt_serial_number_pack(&this->serial_number, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_onu_disable_completed_data_get_packed_length(const bcmolt_gpon_onu_onu_disable_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ONU_DISABLE_COMPLETED_ID_SERIAL_NUMBER)) != 0)
+    {
+        count += 8;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_onu_disable_completed_data_unpack(bcmolt_gpon_onu_onu_disable_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ONU_DISABLE_COMPLETED_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmolt_serial_number_unpack(&this->serial_number, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_onu_disable_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ONU_DISABLE_COMPLETED_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_onu_disable_completed_data_bounds_check(const bcmolt_gpon_onu_onu_disable_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_onu_disable_completed_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ONU_DISABLE_COMPLETED_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmolt_serial_number_bounds_check(&this->serial_number))
+        {
+            *failed_prop = BCMOLT_GPON_ONU_ONU_DISABLE_COMPLETED_ID_SERIAL_NUMBER;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_onu_enable_completed_data_set_default(bcmolt_gpon_onu_onu_enable_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ONU_ENABLE_COMPLETED_ID_SERIAL_NUMBER)) != 0)
+    {
+        memset(this->serial_number.vendor_id, 0, sizeof(this->serial_number.vendor_id));
+        memset(this->serial_number.vendor_specific, 0, sizeof(this->serial_number.vendor_specific));
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_onu_enable_completed_data_pack(const bcmolt_gpon_onu_onu_enable_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ONU_ENABLE_COMPLETED_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmolt_serial_number_pack(&this->serial_number, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_onu_enable_completed_data_get_packed_length(const bcmolt_gpon_onu_onu_enable_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ONU_ENABLE_COMPLETED_ID_SERIAL_NUMBER)) != 0)
+    {
+        count += 8;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_onu_enable_completed_data_unpack(bcmolt_gpon_onu_onu_enable_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ONU_ENABLE_COMPLETED_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmolt_serial_number_unpack(&this->serial_number, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_onu_enable_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ONU_ENABLE_COMPLETED_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_onu_enable_completed_data_bounds_check(const bcmolt_gpon_onu_onu_enable_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_onu_enable_completed_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_ONU_ENABLE_COMPLETED_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmolt_serial_number_bounds_check(&this->serial_number))
+        {
+            *failed_prop = BCMOLT_GPON_ONU_ONU_ENABLE_COMPLETED_ID_SERIAL_NUMBER;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_password_authentication_completed_data_set_default(bcmolt_gpon_onu_password_authentication_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_PASSWORD_AUTHENTICATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        this->status = BCMOLT_RESULT_SUCCESS;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_PASSWORD_AUTHENTICATION_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        this->fail_reason = BCMOLT_PASSWORD_AUTHENTICATION_FAIL_REASON_NONE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_PASSWORD_AUTHENTICATION_COMPLETED_ID_PASSWORD)) != 0)
+    {
+        memset(this->password.arr, 0, sizeof(this->password.arr));
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_password_authentication_completed_data_pack(const bcmolt_gpon_onu_password_authentication_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_PASSWORD_AUTHENTICATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_result_pack(this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_PASSWORD_AUTHENTICATION_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        if (!bcmolt_password_authentication_fail_reason_pack(this->fail_reason, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_PASSWORD_AUTHENTICATION_COMPLETED_ID_PASSWORD)) != 0)
+    {
+        if (!bcmolt_arr_u8_10_pack(&this->password, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_password_authentication_completed_data_get_packed_length(const bcmolt_gpon_onu_password_authentication_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_PASSWORD_AUTHENTICATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_PASSWORD_AUTHENTICATION_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_PASSWORD_AUTHENTICATION_COMPLETED_ID_PASSWORD)) != 0)
+    {
+        count += 10;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_password_authentication_completed_data_unpack(bcmolt_gpon_onu_password_authentication_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_PASSWORD_AUTHENTICATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_result_unpack(&this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_PASSWORD_AUTHENTICATION_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        if (!bcmolt_password_authentication_fail_reason_unpack(&this->fail_reason, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_PASSWORD_AUTHENTICATION_COMPLETED_ID_PASSWORD)) != 0)
+    {
+        if (!bcmolt_arr_u8_10_unpack(&this->password, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_password_authentication_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_PASSWORD_AUTHENTICATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_PASSWORD_AUTHENTICATION_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_PASSWORD_AUTHENTICATION_COMPLETED_ID_PASSWORD)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 10))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_password_authentication_completed_data_bounds_check(const bcmolt_gpon_onu_password_authentication_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_password_authentication_completed_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_PASSWORD_AUTHENTICATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        switch (this->status)
+        {
+            case BCMOLT_RESULT_SUCCESS:
+                break;
+            case BCMOLT_RESULT_FAIL:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_ONU_PASSWORD_AUTHENTICATION_COMPLETED_ID_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_PASSWORD_AUTHENTICATION_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        switch (this->fail_reason)
+        {
+            case BCMOLT_PASSWORD_AUTHENTICATION_FAIL_REASON_NONE:
+                break;
+            case BCMOLT_PASSWORD_AUTHENTICATION_FAIL_REASON_PASSWORD_INCONSISTENCY:
+                break;
+            case BCMOLT_PASSWORD_AUTHENTICATION_FAIL_REASON_PASSWORD_MISMATCH:
+                break;
+            case BCMOLT_PASSWORD_AUTHENTICATION_FAIL_REASON_PASSWORD_AUTHENTICATION_TIMEOUT:
+                break;
+            case BCMOLT_PASSWORD_AUTHENTICATION_FAIL_REASON_ONU_ALARM:
+                break;
+            case BCMOLT_PASSWORD_AUTHENTICATION_FAIL_REASON_LOS_EVENT:
+                break;
+            case BCMOLT_PASSWORD_AUTHENTICATION_FAIL_REASON_DISABLE_EVENT:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_ONU_PASSWORD_AUTHENTICATION_COMPLETED_ID_FAIL_REASON;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_PASSWORD_AUTHENTICATION_COMPLETED_ID_PASSWORD)) != 0)
+    {
+        if (!bcmolt_arr_u8_10_bounds_check(&this->password))
+        {
+            *failed_prop = BCMOLT_GPON_ONU_PASSWORD_AUTHENTICATION_COMPLETED_ID_PASSWORD;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_pee_data_set_default(bcmolt_gpon_onu_pee_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_PEE_ID_ALARM_STATUS)) != 0)
+    {
+        this->alarm_status = BCMOLT_STATUS_OFF;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_pee_data_pack(const bcmolt_gpon_onu_pee_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_PEE_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_pack(this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_pee_data_get_packed_length(const bcmolt_gpon_onu_pee_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_PEE_ID_ALARM_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_pee_data_unpack(bcmolt_gpon_onu_pee_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_PEE_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_unpack(&this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_pee_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_PEE_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_pee_data_bounds_check(const bcmolt_gpon_onu_pee_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_pee_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_PEE_ID_ALARM_STATUS)) != 0)
+    {
+        switch (this->alarm_status)
+        {
+            case BCMOLT_STATUS_OFF:
+                break;
+            case BCMOLT_STATUS_ON:
+                break;
+            case BCMOLT_STATUS_NO_CHANGE:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_ONU_PEE_ID_ALARM_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_possible_drift_data_set_default(bcmolt_gpon_onu_possible_drift_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_POSSIBLE_DRIFT_ID_ALARM_STATUS)) != 0)
+    {
+        this->alarm_status = BCMOLT_STATUS_OFF;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_POSSIBLE_DRIFT_ID_ESTIMATED_DRIFT)) != 0)
+    {
+        this->estimated_drift = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_possible_drift_data_pack(const bcmolt_gpon_onu_possible_drift_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_POSSIBLE_DRIFT_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_pack(this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_POSSIBLE_DRIFT_ID_ESTIMATED_DRIFT)) != 0)
+    {
+        if (!bcmolt_buf_write_s32(buf, this->estimated_drift))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_possible_drift_data_get_packed_length(const bcmolt_gpon_onu_possible_drift_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_POSSIBLE_DRIFT_ID_ALARM_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_POSSIBLE_DRIFT_ID_ESTIMATED_DRIFT)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_possible_drift_data_unpack(bcmolt_gpon_onu_possible_drift_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_POSSIBLE_DRIFT_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_unpack(&this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_POSSIBLE_DRIFT_ID_ESTIMATED_DRIFT)) != 0)
+    {
+        if (!bcmolt_buf_read_s32(buf, &this->estimated_drift))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_possible_drift_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_POSSIBLE_DRIFT_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_POSSIBLE_DRIFT_ID_ESTIMATED_DRIFT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_possible_drift_data_bounds_check(const bcmolt_gpon_onu_possible_drift_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_possible_drift_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_POSSIBLE_DRIFT_ID_ALARM_STATUS)) != 0)
+    {
+        switch (this->alarm_status)
+        {
+            case BCMOLT_STATUS_OFF:
+                break;
+            case BCMOLT_STATUS_ON:
+                break;
+            case BCMOLT_STATUS_NO_CHANGE:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_ONU_POSSIBLE_DRIFT_ID_ALARM_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_power_management_state_change_data_set_default(bcmolt_gpon_onu_power_management_state_change_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_OLD_STATE)) != 0)
+    {
+        this->old_state = BCMOLT_ONU_STATE_NOT_CONFIGURED;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_NEW_STATE)) != 0)
+    {
+        this->new_state = BCMOLT_ONU_STATE_NOT_CONFIGURED;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_REASON)) != 0)
+    {
+        this->reason = BCMOLT_POWER_MANAGEMENT_TRANSITION_REASON_POWER_MANAGEMENT_ENABLED;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_power_management_state_change_data_pack(const bcmolt_gpon_onu_power_management_state_change_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_OLD_STATE)) != 0)
+    {
+        if (!bcmolt_onu_state_pack(this->old_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_NEW_STATE)) != 0)
+    {
+        if (!bcmolt_onu_state_pack(this->new_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_REASON)) != 0)
+    {
+        if (!bcmolt_power_management_transition_reason_pack(this->reason, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_power_management_state_change_data_get_packed_length(const bcmolt_gpon_onu_power_management_state_change_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_OLD_STATE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_NEW_STATE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_REASON)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_power_management_state_change_data_unpack(bcmolt_gpon_onu_power_management_state_change_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_OLD_STATE)) != 0)
+    {
+        if (!bcmolt_onu_state_unpack(&this->old_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_NEW_STATE)) != 0)
+    {
+        if (!bcmolt_onu_state_unpack(&this->new_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_REASON)) != 0)
+    {
+        if (!bcmolt_power_management_transition_reason_unpack(&this->reason, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_power_management_state_change_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_OLD_STATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_NEW_STATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_REASON)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_power_management_state_change_data_bounds_check(const bcmolt_gpon_onu_power_management_state_change_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_power_management_state_change_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_OLD_STATE)) != 0)
+    {
+        switch (this->old_state)
+        {
+            case BCMOLT_ONU_STATE_NOT_CONFIGURED:
+                break;
+            case BCMOLT_ONU_STATE_INACTIVE:
+                break;
+            case BCMOLT_ONU_STATE_ACTIVE:
+                break;
+            case BCMOLT_ONU_STATE_ACTIVE_STANDBY:
+                break;
+            case BCMOLT_ONU_STATE_DISABLED:
+                break;
+            case BCMOLT_ONU_STATE_AWAKE_FREE:
+                break;
+            case BCMOLT_ONU_STATE_PROCESSING:
+                break;
+            case BCMOLT_ONU_STATE_LOW_POWER_DOZE:
+                break;
+            case BCMOLT_ONU_STATE_LOW_POWER_SLEEP:
+                break;
+            case BCMOLT_ONU_STATE_LOW_POWER_WATCH:
+                break;
+            case BCMOLT_ONU_STATE_UNAWARE:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_OLD_STATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_NEW_STATE)) != 0)
+    {
+        switch (this->new_state)
+        {
+            case BCMOLT_ONU_STATE_NOT_CONFIGURED:
+                break;
+            case BCMOLT_ONU_STATE_INACTIVE:
+                break;
+            case BCMOLT_ONU_STATE_ACTIVE:
+                break;
+            case BCMOLT_ONU_STATE_ACTIVE_STANDBY:
+                break;
+            case BCMOLT_ONU_STATE_DISABLED:
+                break;
+            case BCMOLT_ONU_STATE_AWAKE_FREE:
+                break;
+            case BCMOLT_ONU_STATE_PROCESSING:
+                break;
+            case BCMOLT_ONU_STATE_LOW_POWER_DOZE:
+                break;
+            case BCMOLT_ONU_STATE_LOW_POWER_SLEEP:
+                break;
+            case BCMOLT_ONU_STATE_LOW_POWER_WATCH:
+                break;
+            case BCMOLT_ONU_STATE_UNAWARE:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_NEW_STATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_REASON)) != 0)
+    {
+        switch (this->reason)
+        {
+            case BCMOLT_POWER_MANAGEMENT_TRANSITION_REASON_POWER_MANAGEMENT_ENABLED:
+                break;
+            case BCMOLT_POWER_MANAGEMENT_TRANSITION_REASON_POWER_MANAGEMENT_DISABLED:
+                break;
+            case BCMOLT_POWER_MANAGEMENT_TRANSITION_REASON_SLEEP_REQUEST_AWAKE:
+                break;
+            case BCMOLT_POWER_MANAGEMENT_TRANSITION_REASON_SLEEP_REQUEST_DOZE:
+                break;
+            case BCMOLT_POWER_MANAGEMENT_TRANSITION_REASON_SLEEP_REQUEST_SLEEP:
+                break;
+            case BCMOLT_POWER_MANAGEMENT_TRANSITION_REASON_SLEEP_REQUEST_WATCH:
+                break;
+            case BCMOLT_POWER_MANAGEMENT_TRANSITION_REASON_TERI_EXPIRED:
+                break;
+            case BCMOLT_POWER_MANAGEMENT_TRANSITION_REASON_TALERTED_EXPIRED:
+                break;
+            case BCMOLT_POWER_MANAGEMENT_TRANSITION_REASON_ALARM:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_REASON;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_pst_data_set_default(bcmolt_gpon_onu_pst_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_PST_ID_LINK_NUMBER)) != 0)
+    {
+        this->link_number = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_PST_ID_K1)) != 0)
+    {
+        this->k1 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_PST_ID_K2)) != 0)
+    {
+        this->k2 = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_pst_data_pack(const bcmolt_gpon_onu_pst_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_PST_ID_LINK_NUMBER)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->link_number))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_PST_ID_K1)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->k1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_PST_ID_K2)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->k2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_pst_data_get_packed_length(const bcmolt_gpon_onu_pst_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_PST_ID_LINK_NUMBER)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_PST_ID_K1)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_PST_ID_K2)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_pst_data_unpack(bcmolt_gpon_onu_pst_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_PST_ID_LINK_NUMBER)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->link_number))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_PST_ID_K1)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->k1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_PST_ID_K2)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->k2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_pst_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_PST_ID_LINK_NUMBER)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_PST_ID_K1)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_PST_ID_K2)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_pst_data_bounds_check(const bcmolt_gpon_onu_pst_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_pst_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_ranging_completed_data_set_default(bcmolt_gpon_onu_ranging_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_STATUS)) != 0)
+    {
+        this->status = BCMOLT_RESULT_SUCCESS;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        this->fail_reason = BCMOLT_RANGING_FAIL_REASON_NONE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_NUMBER_OF_PLOAMS)) != 0)
+    {
+        this->number_of_ploams = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_EQD)) != 0)
+    {
+        this->eqd = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_POWER_LEVEL)) != 0)
+    {
+        this->power_level = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_ranging_completed_data_pack(const bcmolt_gpon_onu_ranging_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_result_pack(this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        if (!bcmolt_ranging_fail_reason_pack(this->fail_reason, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_NUMBER_OF_PLOAMS)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->number_of_ploams))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_EQD)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->eqd))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_POWER_LEVEL)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->power_level))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_ranging_completed_data_get_packed_length(const bcmolt_gpon_onu_ranging_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_NUMBER_OF_PLOAMS)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_EQD)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_POWER_LEVEL)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_ranging_completed_data_unpack(bcmolt_gpon_onu_ranging_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_result_unpack(&this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        if (!bcmolt_ranging_fail_reason_unpack(&this->fail_reason, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_NUMBER_OF_PLOAMS)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->number_of_ploams))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_EQD)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->eqd))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_POWER_LEVEL)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->power_level))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_ranging_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_NUMBER_OF_PLOAMS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_EQD)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_POWER_LEVEL)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_ranging_completed_data_bounds_check(const bcmolt_gpon_onu_ranging_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_ranging_completed_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_STATUS)) != 0)
+    {
+        switch (this->status)
+        {
+            case BCMOLT_RESULT_SUCCESS:
+                break;
+            case BCMOLT_RESULT_FAIL:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        switch (this->fail_reason)
+        {
+            case BCMOLT_RANGING_FAIL_REASON_NONE:
+                break;
+            case BCMOLT_RANGING_FAIL_REASON_RANGING_ACK_TIMEOUT:
+                break;
+            case BCMOLT_RANGING_FAIL_REASON_PLOAM_DATA_MISMATCH:
+                break;
+            case BCMOLT_RANGING_FAIL_REASON_PLOAM_TYPE_MISMATCH:
+                break;
+            case BCMOLT_RANGING_FAIL_REASON_PLOAM_ONU_ID_MISMATCH:
+                break;
+            case BCMOLT_RANGING_FAIL_REASON_DRIFT_EXCEEDED:
+                break;
+            case BCMOLT_RANGING_FAIL_REASON_NO_PLOAM_RECEIVED:
+                break;
+            case BCMOLT_RANGING_FAIL_REASON_LOS:
+                break;
+            case BCMOLT_RANGING_FAIL_REASON_ALARMS:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_FAIL_REASON;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_rei_data_set_default(bcmolt_gpon_onu_rei_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_REI_ID_BIP8_ERRORS)) != 0)
+    {
+        this->bip8_errors = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_rei_data_pack(const bcmolt_gpon_onu_rei_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_REI_ID_BIP8_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->bip8_errors))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_rei_data_get_packed_length(const bcmolt_gpon_onu_rei_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_REI_ID_BIP8_ERRORS)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_rei_data_unpack(bcmolt_gpon_onu_rei_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_REI_ID_BIP8_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->bip8_errors))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_rei_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_REI_ID_BIP8_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_rei_data_bounds_check(const bcmolt_gpon_onu_rei_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_rei_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_rssi_measurement_completed_data_set_default(bcmolt_gpon_onu_rssi_measurement_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID_STATUS)) != 0)
+    {
+        this->status = BCMOLT_RESULT_SUCCESS;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        this->fail_reason = BCMOLT_RSSI_MEASUREMENT_FAIL_REASON_NONE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_rssi_measurement_completed_data_pack(const bcmolt_gpon_onu_rssi_measurement_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_result_pack(this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        if (!bcmolt_rssi_measurement_fail_reason_pack(this->fail_reason, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_rssi_measurement_completed_data_get_packed_length(const bcmolt_gpon_onu_rssi_measurement_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_rssi_measurement_completed_data_unpack(bcmolt_gpon_onu_rssi_measurement_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_result_unpack(&this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        if (!bcmolt_rssi_measurement_fail_reason_unpack(&this->fail_reason, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_rssi_measurement_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_rssi_measurement_completed_data_bounds_check(const bcmolt_gpon_onu_rssi_measurement_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_rssi_measurement_completed_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID_STATUS)) != 0)
+    {
+        switch (this->status)
+        {
+            case BCMOLT_RESULT_SUCCESS:
+                break;
+            case BCMOLT_RESULT_FAIL:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        switch (this->fail_reason)
+        {
+            case BCMOLT_RSSI_MEASUREMENT_FAIL_REASON_NONE:
+                break;
+            case BCMOLT_RSSI_MEASUREMENT_FAIL_REASON_NO_DELIMITER:
+                break;
+            case BCMOLT_RSSI_MEASUREMENT_FAIL_REASON_NO_ACCESS:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID_FAIL_REASON;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_sdi_data_set_default(bcmolt_gpon_onu_sdi_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_SDI_ID_ALARM_STATUS)) != 0)
+    {
+        this->alarm_status = BCMOLT_STATUS_OFF;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_SDI_ID_BER)) != 0)
+    {
+        this->ber = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_sdi_data_pack(const bcmolt_gpon_onu_sdi_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_SDI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_pack(this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_SDI_ID_BER)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->ber))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_sdi_data_get_packed_length(const bcmolt_gpon_onu_sdi_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_SDI_ID_ALARM_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_SDI_ID_BER)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_sdi_data_unpack(bcmolt_gpon_onu_sdi_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_SDI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_unpack(&this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_SDI_ID_BER)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->ber))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_sdi_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_SDI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_SDI_ID_BER)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_sdi_data_bounds_check(const bcmolt_gpon_onu_sdi_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_sdi_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_SDI_ID_ALARM_STATUS)) != 0)
+    {
+        switch (this->alarm_status)
+        {
+            case BCMOLT_STATUS_OFF:
+                break;
+            case BCMOLT_STATUS_ON:
+                break;
+            case BCMOLT_STATUS_NO_CHANGE:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_ONU_SDI_ID_ALARM_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_sfi_data_set_default(bcmolt_gpon_onu_sfi_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_SFI_ID_ALARM_STATUS)) != 0)
+    {
+        this->alarm_status = BCMOLT_STATUS_OFF;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_SFI_ID_BER)) != 0)
+    {
+        this->ber = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_sfi_data_pack(const bcmolt_gpon_onu_sfi_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_SFI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_pack(this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_SFI_ID_BER)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->ber))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_sfi_data_get_packed_length(const bcmolt_gpon_onu_sfi_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_SFI_ID_ALARM_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_SFI_ID_BER)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_sfi_data_unpack(bcmolt_gpon_onu_sfi_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_SFI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_unpack(&this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_SFI_ID_BER)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->ber))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_sfi_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_SFI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_SFI_ID_BER)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_sfi_data_bounds_check(const bcmolt_gpon_onu_sfi_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_sfi_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_SFI_ID_ALARM_STATUS)) != 0)
+    {
+        switch (this->alarm_status)
+        {
+            case BCMOLT_STATUS_OFF:
+                break;
+            case BCMOLT_STATUS_ON:
+                break;
+            case BCMOLT_STATUS_NO_CHANGE:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_ONU_SFI_ID_ALARM_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_stat_alarm_cleared_data_set_default(bcmolt_gpon_onu_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        this->stat = BCMOLT_GPON_ONU_STAT_ID_FEC_CODEWORDS;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_stat_alarm_cleared_data_pack(const bcmolt_gpon_onu_stat_alarm_cleared_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_gpon_onu_stat_id_pack(this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_stat_alarm_cleared_data_get_packed_length(const bcmolt_gpon_onu_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_stat_alarm_cleared_data_unpack(bcmolt_gpon_onu_stat_alarm_cleared_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_gpon_onu_stat_id_unpack(&this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_stat_alarm_cleared_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_stat_alarm_cleared_data_bounds_check(const bcmolt_gpon_onu_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_stat_alarm_cleared_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        switch (this->stat)
+        {
+            case BCMOLT_GPON_ONU_STAT_ID_FEC_CODEWORDS:
+                break;
+            case BCMOLT_GPON_ONU_STAT_ID_FEC_BYTES_CORRECTED:
+                break;
+            case BCMOLT_GPON_ONU_STAT_ID_FEC_CODEWORDS_CORRECTED:
+                break;
+            case BCMOLT_GPON_ONU_STAT_ID_FEC_CODEWORDS_UNCORRECTED:
+                break;
+            case BCMOLT_GPON_ONU_STAT_ID_BIP8_BYTES:
+                break;
+            case BCMOLT_GPON_ONU_STAT_ID_BIP8_ERRORS:
+                break;
+            case BCMOLT_GPON_ONU_STAT_ID_RX_PLOAMS_CRC_ERROR:
+                break;
+            case BCMOLT_GPON_ONU_STAT_ID_RX_PLOAMS_NON_IDLE:
+                break;
+            case BCMOLT_GPON_ONU_STAT_ID_POSITIVE_DRIFT:
+                break;
+            case BCMOLT_GPON_ONU_STAT_ID_NEGATIVE_DRIFT:
+                break;
+            case BCMOLT_GPON_ONU_STAT_ID_RX_OMCI:
+                break;
+            case BCMOLT_GPON_ONU_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR:
+                break;
+            case BCMOLT_GPON_ONU_STAT_ID_BER_REPORTED:
+                break;
+            case BCMOLT_GPON_ONU_STAT_ID_UNRECEIVED_BURST:
+                break;
+            case BCMOLT_GPON_ONU_STAT_ID_LCDG_ERRORS:
+                break;
+            case BCMOLT_GPON_ONU_STAT_ID_RDI_ERRORS:
+                break;
+            case BCMOLT_GPON_ONU_STAT_ID_RX_BYTES:
+                break;
+            case BCMOLT_GPON_ONU_STAT_ID_RX_PACKETS:
+                break;
+            case BCMOLT_GPON_ONU_STAT_ID_TX_BYTES:
+                break;
+            case BCMOLT_GPON_ONU_STAT_ID_TX_PACKETS:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_ONU_STAT_ALARM_CLEARED_ID_STAT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_stat_alarm_raised_data_set_default(bcmolt_gpon_onu_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        this->stat = BCMOLT_GPON_ONU_STAT_ID_FEC_CODEWORDS;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_stat_alarm_raised_data_pack(const bcmolt_gpon_onu_stat_alarm_raised_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_gpon_onu_stat_id_pack(this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_stat_alarm_raised_data_get_packed_length(const bcmolt_gpon_onu_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_stat_alarm_raised_data_unpack(bcmolt_gpon_onu_stat_alarm_raised_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_gpon_onu_stat_id_unpack(&this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_stat_alarm_raised_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_stat_alarm_raised_data_bounds_check(const bcmolt_gpon_onu_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_stat_alarm_raised_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        switch (this->stat)
+        {
+            case BCMOLT_GPON_ONU_STAT_ID_FEC_CODEWORDS:
+                break;
+            case BCMOLT_GPON_ONU_STAT_ID_FEC_BYTES_CORRECTED:
+                break;
+            case BCMOLT_GPON_ONU_STAT_ID_FEC_CODEWORDS_CORRECTED:
+                break;
+            case BCMOLT_GPON_ONU_STAT_ID_FEC_CODEWORDS_UNCORRECTED:
+                break;
+            case BCMOLT_GPON_ONU_STAT_ID_BIP8_BYTES:
+                break;
+            case BCMOLT_GPON_ONU_STAT_ID_BIP8_ERRORS:
+                break;
+            case BCMOLT_GPON_ONU_STAT_ID_RX_PLOAMS_CRC_ERROR:
+                break;
+            case BCMOLT_GPON_ONU_STAT_ID_RX_PLOAMS_NON_IDLE:
+                break;
+            case BCMOLT_GPON_ONU_STAT_ID_POSITIVE_DRIFT:
+                break;
+            case BCMOLT_GPON_ONU_STAT_ID_NEGATIVE_DRIFT:
+                break;
+            case BCMOLT_GPON_ONU_STAT_ID_RX_OMCI:
+                break;
+            case BCMOLT_GPON_ONU_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR:
+                break;
+            case BCMOLT_GPON_ONU_STAT_ID_BER_REPORTED:
+                break;
+            case BCMOLT_GPON_ONU_STAT_ID_UNRECEIVED_BURST:
+                break;
+            case BCMOLT_GPON_ONU_STAT_ID_LCDG_ERRORS:
+                break;
+            case BCMOLT_GPON_ONU_STAT_ID_RDI_ERRORS:
+                break;
+            case BCMOLT_GPON_ONU_STAT_ID_RX_BYTES:
+                break;
+            case BCMOLT_GPON_ONU_STAT_ID_RX_PACKETS:
+                break;
+            case BCMOLT_GPON_ONU_STAT_ID_TX_BYTES:
+                break;
+            case BCMOLT_GPON_ONU_STAT_ID_TX_PACKETS:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_ONU_STAT_ALARM_RAISED_ID_STAT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_sufi_data_set_default(bcmolt_gpon_onu_sufi_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_SUFI_ID_ALARM_STATUS)) != 0)
+    {
+        this->alarm_status = BCMOLT_STATUS_OFF;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_sufi_data_pack(const bcmolt_gpon_onu_sufi_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_SUFI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_pack(this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_sufi_data_get_packed_length(const bcmolt_gpon_onu_sufi_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_SUFI_ID_ALARM_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_sufi_data_unpack(bcmolt_gpon_onu_sufi_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_SUFI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_unpack(&this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_sufi_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_SUFI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_sufi_data_bounds_check(const bcmolt_gpon_onu_sufi_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_sufi_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_SUFI_ID_ALARM_STATUS)) != 0)
+    {
+        switch (this->alarm_status)
+        {
+            case BCMOLT_STATUS_OFF:
+                break;
+            case BCMOLT_STATUS_ON:
+                break;
+            case BCMOLT_STATUS_NO_CHANGE:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_ONU_SUFI_ID_ALARM_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_tiwi_data_set_default(bcmolt_gpon_onu_tiwi_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_TIWI_ID_ALARM_STATUS)) != 0)
+    {
+        this->alarm_status = BCMOLT_STATUS_OFF;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_TIWI_ID_DRIFT_VALUE)) != 0)
+    {
+        this->drift_value = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_tiwi_data_pack(const bcmolt_gpon_onu_tiwi_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_TIWI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_pack(this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_TIWI_ID_DRIFT_VALUE)) != 0)
+    {
+        if (!bcmolt_buf_write_s32(buf, this->drift_value))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_tiwi_data_get_packed_length(const bcmolt_gpon_onu_tiwi_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_TIWI_ID_ALARM_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_TIWI_ID_DRIFT_VALUE)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_tiwi_data_unpack(bcmolt_gpon_onu_tiwi_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_TIWI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_unpack(&this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_TIWI_ID_DRIFT_VALUE)) != 0)
+    {
+        if (!bcmolt_buf_read_s32(buf, &this->drift_value))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_tiwi_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_TIWI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_TIWI_ID_DRIFT_VALUE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_tiwi_data_bounds_check(const bcmolt_gpon_onu_tiwi_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_tiwi_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_TIWI_ID_ALARM_STATUS)) != 0)
+    {
+        switch (this->alarm_status)
+        {
+            case BCMOLT_STATUS_OFF:
+                break;
+            case BCMOLT_STATUS_ON:
+                break;
+            case BCMOLT_STATUS_NO_CHANGE:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_ONU_TIWI_ID_ALARM_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_auto_cfg_data_set_default(bcmolt_gpon_onu_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_BER_INTERVAL_CONFIGURATION_COMPLETED)) != 0)
+    {
+        this->ber_interval_configuration_completed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_DFI)) != 0)
+    {
+        this->dfi = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_DGI)) != 0)
+    {
+        this->dgi = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_DOWI)) != 0)
+    {
+        this->dowi = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_ERR)) != 0)
+    {
+        this->err = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_INVALID_DBRU_REPORT)) != 0)
+    {
+        this->invalid_dbru_report = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_COMPLETED)) != 0)
+    {
+        this->key_exchange_completed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_CYCLE_SKIPPED)) != 0)
+    {
+        this->key_exchange_cycle_skipped = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_DECRYPT_REQUIRED)) != 0)
+    {
+        this->key_exchange_decrypt_required = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_KEY_MISMATCH)) != 0)
+    {
+        this->key_exchange_key_mismatch = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_KEY_REQUEST_TIMEOUT)) != 0)
+    {
+        this->key_exchange_key_request_timeout = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_UNCONSECUTIVE_INDEX)) != 0)
+    {
+        this->key_exchange_unconsecutive_index = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_LOAI)) != 0)
+    {
+        this->loai = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_LOKI)) != 0)
+    {
+        this->loki = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_MEMI)) != 0)
+    {
+        this->memi = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_OMCI_PORT_ID_CONFIGURATION_COMPLETED)) != 0)
+    {
+        this->omci_port_id_configuration_completed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_ACTIVATION_COMPLETED)) != 0)
+    {
+        this->onu_activation_completed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_ACTIVATION_STANDBY_COMPLETED)) != 0)
+    {
+        this->onu_activation_standby_completed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_ALARM)) != 0)
+    {
+        this->onu_alarm = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_DEACTIVATION_COMPLETED)) != 0)
+    {
+        this->onu_deactivation_completed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_DISABLE_COMPLETED)) != 0)
+    {
+        this->onu_disable_completed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_ENABLE_COMPLETED)) != 0)
+    {
+        this->onu_enable_completed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_OPTICAL_REFLECTION)) != 0)
+    {
+        this->optical_reflection = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_PASSWORD_AUTHENTICATION_COMPLETED)) != 0)
+    {
+        this->password_authentication_completed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_PEE)) != 0)
+    {
+        this->pee = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_POSSIBLE_DRIFT)) != 0)
+    {
+        this->possible_drift = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_POWER_MANAGEMENT_STATE_CHANGE)) != 0)
+    {
+        this->power_management_state_change = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_PST)) != 0)
+    {
+        this->pst = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_RANGING_COMPLETED)) != 0)
+    {
+        this->ranging_completed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_REI)) != 0)
+    {
+        this->rei = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_RSSI_MEASUREMENT_COMPLETED)) != 0)
+    {
+        this->rssi_measurement_completed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_SDI)) != 0)
+    {
+        this->sdi = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_SFI)) != 0)
+    {
+        this->sfi = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        this->stat_alarm_cleared = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        this->stat_alarm_raised = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_SUFI)) != 0)
+    {
+        this->sufi = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_TIWI)) != 0)
+    {
+        this->tiwi = BCMOS_FALSE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_auto_cfg_data_pack(const bcmolt_gpon_onu_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_BER_INTERVAL_CONFIGURATION_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->ber_interval_configuration_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_DFI)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->dfi))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_DGI)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->dgi))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_DOWI)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->dowi))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_ERR)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->err))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_INVALID_DBRU_REPORT)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->invalid_dbru_report))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->key_exchange_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_CYCLE_SKIPPED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->key_exchange_cycle_skipped))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_DECRYPT_REQUIRED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->key_exchange_decrypt_required))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_KEY_MISMATCH)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->key_exchange_key_mismatch))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_KEY_REQUEST_TIMEOUT)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->key_exchange_key_request_timeout))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_UNCONSECUTIVE_INDEX)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->key_exchange_unconsecutive_index))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_LOAI)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->loai))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_LOKI)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->loki))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_MEMI)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->memi))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_OMCI_PORT_ID_CONFIGURATION_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->omci_port_id_configuration_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_ACTIVATION_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->onu_activation_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_ACTIVATION_STANDBY_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->onu_activation_standby_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_ALARM)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->onu_alarm))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_DEACTIVATION_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->onu_deactivation_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_DISABLE_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->onu_disable_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_ENABLE_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->onu_enable_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_OPTICAL_REFLECTION)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->optical_reflection))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_PASSWORD_AUTHENTICATION_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->password_authentication_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_PEE)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->pee))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_POSSIBLE_DRIFT)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->possible_drift))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_POWER_MANAGEMENT_STATE_CHANGE)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->power_management_state_change))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_PST)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->pst))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_RANGING_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->ranging_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_REI)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->rei))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_RSSI_MEASUREMENT_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->rssi_measurement_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_SDI)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->sdi))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_SFI)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->sfi))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->stat_alarm_cleared))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->stat_alarm_raised))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_SUFI)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->sufi))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_TIWI)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->tiwi))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_auto_cfg_data_get_packed_length(const bcmolt_gpon_onu_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_BER_INTERVAL_CONFIGURATION_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_DFI)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_DGI)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_DOWI)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_ERR)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_INVALID_DBRU_REPORT)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_CYCLE_SKIPPED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_DECRYPT_REQUIRED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_KEY_MISMATCH)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_KEY_REQUEST_TIMEOUT)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_UNCONSECUTIVE_INDEX)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_LOAI)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_LOKI)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_MEMI)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_OMCI_PORT_ID_CONFIGURATION_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_ACTIVATION_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_ACTIVATION_STANDBY_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_ALARM)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_DEACTIVATION_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_DISABLE_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_ENABLE_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_OPTICAL_REFLECTION)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_PASSWORD_AUTHENTICATION_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_PEE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_POSSIBLE_DRIFT)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_POWER_MANAGEMENT_STATE_CHANGE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_PST)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_RANGING_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_REI)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_RSSI_MEASUREMENT_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_SDI)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_SFI)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_SUFI)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_TIWI)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_auto_cfg_data_unpack(bcmolt_gpon_onu_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_BER_INTERVAL_CONFIGURATION_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->ber_interval_configuration_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_DFI)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->dfi))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_DGI)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->dgi))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_DOWI)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->dowi))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_ERR)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->err))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_INVALID_DBRU_REPORT)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->invalid_dbru_report))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->key_exchange_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_CYCLE_SKIPPED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->key_exchange_cycle_skipped))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_DECRYPT_REQUIRED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->key_exchange_decrypt_required))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_KEY_MISMATCH)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->key_exchange_key_mismatch))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_KEY_REQUEST_TIMEOUT)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->key_exchange_key_request_timeout))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_UNCONSECUTIVE_INDEX)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->key_exchange_unconsecutive_index))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_LOAI)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->loai))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_LOKI)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->loki))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_MEMI)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->memi))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_OMCI_PORT_ID_CONFIGURATION_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->omci_port_id_configuration_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_ACTIVATION_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->onu_activation_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_ACTIVATION_STANDBY_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->onu_activation_standby_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_ALARM)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->onu_alarm))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_DEACTIVATION_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->onu_deactivation_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_DISABLE_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->onu_disable_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_ENABLE_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->onu_enable_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_OPTICAL_REFLECTION)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->optical_reflection))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_PASSWORD_AUTHENTICATION_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->password_authentication_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_PEE)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->pee))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_POSSIBLE_DRIFT)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->possible_drift))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_POWER_MANAGEMENT_STATE_CHANGE)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->power_management_state_change))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_PST)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->pst))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_RANGING_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->ranging_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_REI)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->rei))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_RSSI_MEASUREMENT_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->rssi_measurement_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_SDI)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->sdi))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_SFI)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->sfi))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->stat_alarm_cleared))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->stat_alarm_raised))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_SUFI)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->sufi))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_TIWI)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->tiwi))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_BER_INTERVAL_CONFIGURATION_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_DFI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_DGI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_DOWI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_ERR)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_INVALID_DBRU_REPORT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_CYCLE_SKIPPED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_DECRYPT_REQUIRED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_KEY_MISMATCH)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_KEY_REQUEST_TIMEOUT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_UNCONSECUTIVE_INDEX)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_LOAI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_LOKI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_MEMI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_OMCI_PORT_ID_CONFIGURATION_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_ACTIVATION_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_ACTIVATION_STANDBY_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_ALARM)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_DEACTIVATION_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_DISABLE_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_ENABLE_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_OPTICAL_REFLECTION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_PASSWORD_AUTHENTICATION_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_PEE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_POSSIBLE_DRIFT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_POWER_MANAGEMENT_STATE_CHANGE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_PST)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_RANGING_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_REI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_RSSI_MEASUREMENT_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_SDI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_SFI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_SUFI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_AUTO_CFG_ID_TIWI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_auto_cfg_data_bounds_check(const bcmolt_gpon_onu_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_auto_cfg_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_change_power_level_data_set_default(bcmolt_gpon_onu_change_power_level_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CHANGE_POWER_LEVEL_ID_POWER_LEVEL_ACTION)) != 0)
+    {
+        this->power_level_action = BCMOLT_ONU_POWER_LEVEL_INCREASE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_change_power_level_data_pack(const bcmolt_gpon_onu_change_power_level_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CHANGE_POWER_LEVEL_ID_POWER_LEVEL_ACTION)) != 0)
+    {
+        if (!bcmolt_onu_power_level_pack(this->power_level_action, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_change_power_level_data_get_packed_length(const bcmolt_gpon_onu_change_power_level_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CHANGE_POWER_LEVEL_ID_POWER_LEVEL_ACTION)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_change_power_level_data_unpack(bcmolt_gpon_onu_change_power_level_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CHANGE_POWER_LEVEL_ID_POWER_LEVEL_ACTION)) != 0)
+    {
+        if (!bcmolt_onu_power_level_unpack(&this->power_level_action, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_change_power_level_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CHANGE_POWER_LEVEL_ID_POWER_LEVEL_ACTION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_change_power_level_data_bounds_check(const bcmolt_gpon_onu_change_power_level_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_change_power_level_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CHANGE_POWER_LEVEL_ID_POWER_LEVEL_ACTION)) != 0)
+    {
+        switch (this->power_level_action)
+        {
+            case BCMOLT_ONU_POWER_LEVEL_INCREASE:
+                break;
+            case BCMOLT_ONU_POWER_LEVEL_DECREASE:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_ONU_CHANGE_POWER_LEVEL_ID_POWER_LEVEL_ACTION;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_set_onu_state_data_set_default(bcmolt_gpon_onu_set_onu_state_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_SET_ONU_STATE_ID_ONU_STATE)) != 0)
+    {
+        this->onu_state = BCMOLT_ONU_OPERATION_INACTIVE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_set_onu_state_data_pack(const bcmolt_gpon_onu_set_onu_state_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_SET_ONU_STATE_ID_ONU_STATE)) != 0)
+    {
+        if (!bcmolt_onu_operation_pack(this->onu_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_set_onu_state_data_get_packed_length(const bcmolt_gpon_onu_set_onu_state_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_SET_ONU_STATE_ID_ONU_STATE)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_set_onu_state_data_unpack(bcmolt_gpon_onu_set_onu_state_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_SET_ONU_STATE_ID_ONU_STATE)) != 0)
+    {
+        if (!bcmolt_onu_operation_unpack(&this->onu_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_set_onu_state_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_SET_ONU_STATE_ID_ONU_STATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_set_onu_state_data_bounds_check(const bcmolt_gpon_onu_set_onu_state_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_set_onu_state_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_SET_ONU_STATE_ID_ONU_STATE)) != 0)
+    {
+        switch (this->onu_state)
+        {
+            case BCMOLT_ONU_OPERATION_INACTIVE:
+                break;
+            case BCMOLT_ONU_OPERATION_ACTIVE:
+                break;
+            case BCMOLT_ONU_OPERATION_DISABLE:
+                break;
+            case BCMOLT_ONU_OPERATION_ENABLE:
+                break;
+            case BCMOLT_ONU_OPERATION_ACTIVE_STANDBY:
+                break;
+            case BCMOLT_ONU_OPERATION_AWAKE_FREE:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_ONU_SET_ONU_STATE_ID_ONU_STATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_cpu_packets_data_set_default(bcmolt_gpon_onu_cpu_packets_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKETS_ID_PACKET_TYPE)) != 0)
+    {
+        this->packet_type = BCMOLT_PACKET_TYPE_CPU;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKETS_ID_CALC_CRC)) != 0)
+    {
+        this->calc_crc = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKETS_ID_NUMBER_OF_PACKETS)) != 0)
+    {
+        this->number_of_packets = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKETS_ID_PACKET_SIZE)) != 0)
+    {
+        this->packet_size = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKETS_ID_BUFFER)) != 0)
+    {
+        this->buffer.len = 0;
+        this->buffer.val = NULL;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_cpu_packets_data_pack(const bcmolt_gpon_onu_cpu_packets_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKETS_ID_PACKET_TYPE)) != 0)
+    {
+        if (!bcmolt_packet_type_pack(this->packet_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKETS_ID_CALC_CRC)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->calc_crc))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKETS_ID_NUMBER_OF_PACKETS)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->number_of_packets))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKETS_ID_PACKET_SIZE)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, this->packet_size))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKETS_ID_BUFFER)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_max_2048_pack(&this->buffer, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_cpu_packets_data_get_packed_length(const bcmolt_gpon_onu_cpu_packets_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKETS_ID_PACKET_TYPE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKETS_ID_CALC_CRC)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKETS_ID_NUMBER_OF_PACKETS)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKETS_ID_PACKET_SIZE)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKETS_ID_BUFFER)) != 0)
+    {
+        count += bcmolt_u8_list_u32_max_2048_get_packed_length(&this->buffer);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_cpu_packets_data_unpack(bcmolt_gpon_onu_cpu_packets_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKETS_ID_PACKET_TYPE)) != 0)
+    {
+        if (!bcmolt_packet_type_unpack(&this->packet_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKETS_ID_CALC_CRC)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->calc_crc))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKETS_ID_NUMBER_OF_PACKETS)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->number_of_packets))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKETS_ID_PACKET_SIZE)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, &this->packet_size))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKETS_ID_BUFFER)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_max_2048_unpack(&this->buffer, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_cpu_packets_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKETS_ID_PACKET_TYPE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKETS_ID_CALC_CRC)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKETS_ID_NUMBER_OF_PACKETS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKETS_ID_PACKET_SIZE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKETS_ID_BUFFER)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_max_2048_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_cpu_packets_data_bounds_check(const bcmolt_gpon_onu_cpu_packets_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_cpu_packets_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKETS_ID_PACKET_TYPE)) != 0)
+    {
+        switch (this->packet_type)
+        {
+            case BCMOLT_PACKET_TYPE_CPU:
+                break;
+            case BCMOLT_PACKET_TYPE_OMCI:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_ONU_CPU_PACKETS_ID_PACKET_TYPE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKETS_ID_NUMBER_OF_PACKETS)) != 0)
+    {
+        if (this->number_of_packets > 32)
+        {
+            *failed_prop = BCMOLT_GPON_ONU_CPU_PACKETS_ID_NUMBER_OF_PACKETS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKETS_ID_PACKET_SIZE)) != 0)
+    {
+        if (this->packet_size > 2000)
+        {
+            *failed_prop = BCMOLT_GPON_ONU_CPU_PACKETS_ID_PACKET_SIZE;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKETS_ID_BUFFER)) != 0)
+    {
+        if (this->buffer.len > 2048)
+        {
+            return BCMOS_FALSE;
+        }
+
+        if (!bcmolt_u8_list_u32_max_2048_bounds_check(&this->buffer))
+        {
+            *failed_prop = BCMOLT_GPON_ONU_CPU_PACKETS_ID_BUFFER;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_ploam_packet_data_set_default(bcmolt_gpon_onu_ploam_packet_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_PLOAM_PACKET_ID_PLOAM)) != 0)
+    {
+        memset(this->ploam.arr, 0, sizeof(this->ploam.arr));
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_ploam_packet_data_pack(const bcmolt_gpon_onu_ploam_packet_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_PLOAM_PACKET_ID_PLOAM)) != 0)
+    {
+        if (!bcmolt_arr_u8_12_pack(&this->ploam, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_ploam_packet_data_get_packed_length(const bcmolt_gpon_onu_ploam_packet_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_PLOAM_PACKET_ID_PLOAM)) != 0)
+    {
+        count += 12;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_ploam_packet_data_unpack(bcmolt_gpon_onu_ploam_packet_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_PLOAM_PACKET_ID_PLOAM)) != 0)
+    {
+        if (!bcmolt_arr_u8_12_unpack(&this->ploam, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_ploam_packet_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_PLOAM_PACKET_ID_PLOAM)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 12))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_ploam_packet_data_bounds_check(const bcmolt_gpon_onu_ploam_packet_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_ploam_packet_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_PLOAM_PACKET_ID_PLOAM)) != 0)
+    {
+        if (!bcmolt_arr_u8_12_bounds_check(&this->ploam))
+        {
+            *failed_prop = BCMOLT_GPON_ONU_PLOAM_PACKET_ID_PLOAM;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_cpu_packet_data_set_default(bcmolt_gpon_onu_cpu_packet_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKET_ID_PORT_ID)) != 0)
+    {
+        this->port_id = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKET_ID_CRC_OK)) != 0)
+    {
+        this->crc_ok = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKET_ID_PACKET_SIZE)) != 0)
+    {
+        this->packet_size = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKET_ID_BUFFER)) != 0)
+    {
+        this->buffer.len = 0;
+        this->buffer.val = NULL;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_cpu_packet_data_pack(const bcmolt_gpon_onu_cpu_packet_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKET_ID_PORT_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, this->port_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKET_ID_CRC_OK)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->crc_ok))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKET_ID_PACKET_SIZE)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->packet_size))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKET_ID_BUFFER)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_pack(&this->buffer, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_cpu_packet_data_get_packed_length(const bcmolt_gpon_onu_cpu_packet_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKET_ID_PORT_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKET_ID_CRC_OK)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKET_ID_PACKET_SIZE)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKET_ID_BUFFER)) != 0)
+    {
+        count += bcmolt_u8_list_u32_get_packed_length(&this->buffer);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_cpu_packet_data_unpack(bcmolt_gpon_onu_cpu_packet_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKET_ID_PORT_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, &this->port_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKET_ID_CRC_OK)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->crc_ok))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKET_ID_PACKET_SIZE)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->packet_size))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKET_ID_BUFFER)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_unpack(&this->buffer, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_cpu_packet_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKET_ID_PORT_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKET_ID_CRC_OK)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKET_ID_PACKET_SIZE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKET_ID_BUFFER)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_cpu_packet_data_bounds_check(const bcmolt_gpon_onu_cpu_packet_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_cpu_packet_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_CPU_PACKET_ID_BUFFER)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_bounds_check(&this->buffer))
+        {
+            *failed_prop = BCMOLT_GPON_ONU_CPU_PACKET_ID_BUFFER;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_onu_omci_packet_data_set_default(bcmolt_gpon_onu_omci_packet_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_OMCI_PACKET_ID_PORT_ID)) != 0)
+    {
+        this->port_id = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_OMCI_PACKET_ID_CRC_OK)) != 0)
+    {
+        this->crc_ok = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_OMCI_PACKET_ID_PACKET_SIZE)) != 0)
+    {
+        this->packet_size = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_OMCI_PACKET_ID_BUFFER)) != 0)
+    {
+        this->buffer.len = 0;
+        this->buffer.val = NULL;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_omci_packet_data_pack(const bcmolt_gpon_onu_omci_packet_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_OMCI_PACKET_ID_PORT_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, this->port_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_OMCI_PACKET_ID_CRC_OK)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->crc_ok))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_OMCI_PACKET_ID_PACKET_SIZE)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->packet_size))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_OMCI_PACKET_ID_BUFFER)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_pack(&this->buffer, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_onu_omci_packet_data_get_packed_length(const bcmolt_gpon_onu_omci_packet_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_OMCI_PACKET_ID_PORT_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_OMCI_PACKET_ID_CRC_OK)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_OMCI_PACKET_ID_PACKET_SIZE)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_OMCI_PACKET_ID_BUFFER)) != 0)
+    {
+        count += bcmolt_u8_list_u32_get_packed_length(&this->buffer);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_omci_packet_data_unpack(bcmolt_gpon_onu_omci_packet_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_OMCI_PACKET_ID_PORT_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, &this->port_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_OMCI_PACKET_ID_CRC_OK)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->crc_ok))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_OMCI_PACKET_ID_PACKET_SIZE)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->packet_size))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_OMCI_PACKET_ID_BUFFER)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_unpack(&this->buffer, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_omci_packet_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_OMCI_PACKET_ID_PORT_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_OMCI_PACKET_ID_CRC_OK)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_OMCI_PACKET_ID_PACKET_SIZE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_OMCI_PACKET_ID_BUFFER)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_onu_omci_packet_data_bounds_check(const bcmolt_gpon_onu_omci_packet_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_omci_packet_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_ONU_OMCI_PACKET_ID_BUFFER)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_bounds_check(&this->buffer))
+        {
+            *failed_prop = BCMOLT_GPON_ONU_OMCI_PACKET_ID_BUFFER;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_trx_key_set_default(bcmolt_gpon_trx_key *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_KEY_ID_PON_NI)) != 0)
+    {
+        this->pon_ni = (bcmolt_gpon_ni) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_trx_key_pack(const bcmolt_gpon_trx_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, (uint8_t) this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_trx_key_get_packed_length(const bcmolt_gpon_trx_key *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_KEY_ID_PON_NI)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_trx_key_unpack(bcmolt_gpon_trx_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, (uint8_t *) &this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_trx_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_trx_key_bounds_check(const bcmolt_gpon_trx_key *this, bcmolt_presence_mask fields_present, bcmolt_gpon_trx_key_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_KEY_ID_PON_NI)) != 0)
+    {
+        if (this->pon_ni > (bcmolt_gpon_ni) 15)
+        {
+            *failed_prop = BCMOLT_GPON_TRX_KEY_ID_PON_NI;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_gpon_trx_cfg_data_set_default(bcmolt_gpon_trx_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_TRANSCEIVER_TYPE)) != 0)
+    {
+        this->transceiver_type = BCMOLT_TRX_TYPE_LTE_3680_M;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_LA_CONFIGURATION)) != 0)
+    {
+        this->la_configuration.resync_control.start_pattern = 15;
+        this->la_configuration.resync_control.middle_pattern = 15;
+        this->la_configuration.resync_control.last_pattern = 15;
+        this->la_configuration.resync_control.middle_repetition = 0;
+        this->la_configuration.resync_control.location = 40;
+        this->la_configuration.ranging_resync_control.start_pattern = 15;
+        this->la_configuration.ranging_resync_control.middle_pattern = 15;
+        this->la_configuration.ranging_resync_control.last_pattern = 15;
+        this->la_configuration.ranging_resync_control.middle_repetition = 0;
+        this->la_configuration.ranging_resync_control.location = 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_BCDR)) != 0)
+    {
+        this->bcdr.resync_control.start_pattern = 15;
+        this->bcdr.resync_control.middle_pattern = 0;
+        this->bcdr.resync_control.last_pattern = 0;
+        this->bcdr.resync_control.middle_repetition = 0;
+        this->bcdr.resync_control.location = 34;
+        this->bcdr.ranging_resync_control.start_pattern = 15;
+        this->bcdr.ranging_resync_control.middle_pattern = 0;
+        this->bcdr.ranging_resync_control.last_pattern = 0;
+        this->bcdr.ranging_resync_control.middle_repetition = 0;
+        this->bcdr.ranging_resync_control.location = 7;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_LA_RANGING_AFTER_NO_ED_RESYNC)) != 0)
+    {
+        this->la_ranging_after_no_ed_resync.start_pattern = 0;
+        this->la_ranging_after_no_ed_resync.middle_pattern = 0;
+        this->la_ranging_after_no_ed_resync.last_pattern = 0;
+        this->la_ranging_after_no_ed_resync.middle_repetition = 0;
+        this->la_ranging_after_no_ed_resync.location = 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_BCDR_RANGING_AFTER_NO_ED_RESYNC)) != 0)
+    {
+        this->bcdr_ranging_after_no_ed_resync.start_pattern = 0;
+        this->bcdr_ranging_after_no_ed_resync.middle_pattern = 0;
+        this->bcdr_ranging_after_no_ed_resync.last_pattern = 0;
+        this->bcdr_ranging_after_no_ed_resync.middle_repetition = 0;
+        this->bcdr_ranging_after_no_ed_resync.location = 7;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_LA_RANGING_AFTER_ED_RESYNC)) != 0)
+    {
+        this->la_ranging_after_ed_resync.start_pattern = 0;
+        this->la_ranging_after_ed_resync.middle_pattern = 0;
+        this->la_ranging_after_ed_resync.last_pattern = 0;
+        this->la_ranging_after_ed_resync.middle_repetition = 0;
+        this->la_ranging_after_ed_resync.location = 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_BCDR_RANGING_AFTER_ED_RESYNC)) != 0)
+    {
+        this->bcdr_ranging_after_ed_resync.start_pattern = 15;
+        this->bcdr_ranging_after_ed_resync.middle_pattern = 0;
+        this->bcdr_ranging_after_ed_resync.last_pattern = 0;
+        this->bcdr_ranging_after_ed_resync.middle_repetition = 0;
+        this->bcdr_ranging_after_ed_resync.location = 7;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_LA_RESYNC_POLARITY)) != 0)
+    {
+        this->la_resync_polarity = BCMOLT_POLARITY_LOW;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_BCDR_RESYNC_POLARITY)) != 0)
+    {
+        this->bcdr_resync_polarity = BCMOLT_POLARITY_LOW;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_BCDR_RANGING_RESYNC_CONDITIONS)) != 0)
+    {
+        this->bcdr_ranging_resync_conditions.after_init = BCMOS_FALSE;
+        this->bcdr_ranging_resync_conditions.after_no_ed = BCMOS_FALSE;
+        this->bcdr_ranging_resync_conditions.after_ed = BCMOS_TRUE;
+        this->bcdr_ranging_resync_conditions.after_no_del = BCMOS_FALSE;
+        this->bcdr_ranging_resync_conditions.after_ranging_access = BCMOS_FALSE;
+        this->bcdr_ranging_resync_conditions.med_val = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_LA_RANGING_RESYNC_CONDITIONS)) != 0)
+    {
+        this->la_ranging_resync_conditions.after_init = BCMOS_TRUE;
+        this->la_ranging_resync_conditions.after_no_ed = BCMOS_FALSE;
+        this->la_ranging_resync_conditions.after_ed = BCMOS_FALSE;
+        this->la_ranging_resync_conditions.after_no_del = BCMOS_FALSE;
+        this->la_ranging_resync_conditions.after_ranging_access = BCMOS_TRUE;
+        this->la_ranging_resync_conditions.med_val = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_RX_CONFIGURATION)) != 0)
+    {
+        this->rx_configuration.wait_window_size = 0;
+        this->rx_configuration.ranging_access_window_size = 15;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_RANGING_CONTROL_STAGES_CONFIGURATION)) != 0)
+    {
+        this->ranging_control_stages_configuration.wait_state_1_window_size = 0;
+        this->ranging_control_stages_configuration.wait_state_2_window_size = 0;
+        this->ranging_control_stages_configuration.wait_after_resync_4 = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_ENERGY_DETECT)) != 0)
+    {
+        this->energy_detect.ranging_ed_source = BCMOLT_ENERGY_DETECT_SOURCE_TRX;
+        this->energy_detect.delimiter_ed_source = BCMOLT_ENERGY_DETECT_SOURCE_TRX;
+        this->energy_detect.minimum_threshold = 0;
+        this->energy_detect.maximum_threshold = 41;
+        this->energy_detect.ed_pattern = 170;
+        this->energy_detect.ed_pattern_size = 0;
+        this->energy_detect.window_size = 124;
+        this->energy_detect.inversion = BCMOS_FALSE;
+        this->energy_detect.no_ed_threshold = 127;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_END_OF_BURST_DATA_PATTERN)) != 0)
+    {
+        this->end_of_burst_data_pattern.start_pattern = 15;
+        this->end_of_burst_data_pattern.middle_pattern = 15;
+        this->end_of_burst_data_pattern.last_pattern = 15;
+        this->end_of_burst_data_pattern.middle_repetition = 0;
+        this->end_of_burst_data_pattern.location = 11;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_END_OF_BURST_RANGING_PATTERN)) != 0)
+    {
+        this->end_of_burst_ranging_pattern.start_pattern = 0;
+        this->end_of_burst_ranging_pattern.middle_pattern = 0;
+        this->end_of_burst_ranging_pattern.last_pattern = 0;
+        this->end_of_burst_ranging_pattern.middle_repetition = 0;
+        this->end_of_burst_ranging_pattern.location = 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_PREAMBLE)) != 0)
+    {
+        this->preamble.type_1_size = 0;
+        this->preamble.type_2_size = 0;
+        this->preamble.type_3_pre_ranging_size = 50;
+        this->preamble.type_3_post_ranging_size = 15;
+        this->preamble.type_3_pattern = 170;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_DELIMITER)) != 0)
+    {
+        this->delimiter.pattern[0] = 171;
+        this->delimiter.pattern[1] = 89;
+        this->delimiter.pattern[2] = 131;
+        this->delimiter.size = 3;
+        this->delimiter.window_size = 124;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_GUARD_BITS)) != 0)
+    {
+        this->guard_bits = 64;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_SERDES_CONFIGURATION)) != 0)
+    {
+        this->serdes_configuration.ranging_mode = BCMOLT_SERDES_RANGING_MODE_BCDR_RESET_MODE;
+        this->serdes_configuration.multi_ed_mode = BCMOS_FALSE;
+        this->serdes_configuration.burst_enable_start_offset = 0;
+        this->serdes_configuration.burst_enable_end_offset = 0;
+        this->serdes_configuration.ed_invertion = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_PLO_RANGING)) != 0)
+    {
+        this->plo_ranging = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_PLO_DATA)) != 0)
+    {
+        this->plo_data = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_RSSI_NORMAL_CONFIG)) != 0)
+    {
+        this->rssi_normal_config.location = 20;
+        this->rssi_normal_config.location_sign = BCMOLT_RSSI_LOCATION_SIGN_BEFORE;
+        this->rssi_normal_config.start_pattern = 15;
+        this->rssi_normal_config.middle_pattern = 15;
+        this->rssi_normal_config.last_pattern = 15;
+        this->rssi_normal_config.middle_repertition = 50;
+        this->rssi_normal_config.minimum_burst = 55;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_RANGING_RSSI_RESYNC_CONTROL)) != 0)
+    {
+        this->ranging_rssi_resync_control.after_no_ed = BCMOS_FALSE;
+        this->ranging_rssi_resync_control.after_ed = BCMOS_FALSE;
+        this->ranging_rssi_resync_control.after_reset_3 = BCMOS_FALSE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_trx_cfg_data_pack(const bcmolt_gpon_trx_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_TRANSCEIVER_TYPE)) != 0)
+    {
+        if (!bcmolt_trx_type_pack(this->transceiver_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_LA_CONFIGURATION)) != 0)
+    {
+        if (!bcmolt_la_resync_pattern_configuration_pack(&this->la_configuration, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_BCDR)) != 0)
+    {
+        if (!bcmolt_bcdr_resync_pattern_configuration_pack(&this->bcdr, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_LA_RANGING_AFTER_NO_ED_RESYNC)) != 0)
+    {
+        if (!bcmolt_resync_control_pack(&this->la_ranging_after_no_ed_resync, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_BCDR_RANGING_AFTER_NO_ED_RESYNC)) != 0)
+    {
+        if (!bcmolt_resync_control_pack(&this->bcdr_ranging_after_no_ed_resync, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_LA_RANGING_AFTER_ED_RESYNC)) != 0)
+    {
+        if (!bcmolt_resync_control_pack(&this->la_ranging_after_ed_resync, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_BCDR_RANGING_AFTER_ED_RESYNC)) != 0)
+    {
+        if (!bcmolt_resync_control_pack(&this->bcdr_ranging_after_ed_resync, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_LA_RESYNC_POLARITY)) != 0)
+    {
+        if (!bcmolt_polarity_pack(this->la_resync_polarity, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_BCDR_RESYNC_POLARITY)) != 0)
+    {
+        if (!bcmolt_polarity_pack(this->bcdr_resync_polarity, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_BCDR_RANGING_RESYNC_CONDITIONS)) != 0)
+    {
+        if (!bcmolt_ranging_resync_conditions_pack(&this->bcdr_ranging_resync_conditions, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_LA_RANGING_RESYNC_CONDITIONS)) != 0)
+    {
+        if (!bcmolt_ranging_resync_conditions_pack(&this->la_ranging_resync_conditions, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_RX_CONFIGURATION)) != 0)
+    {
+        if (!bcmolt_trx_rx_configuration_pack(&this->rx_configuration, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_RANGING_CONTROL_STAGES_CONFIGURATION)) != 0)
+    {
+        if (!bcmolt_ranging_control_configuration_pack(&this->ranging_control_stages_configuration, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_ENERGY_DETECT)) != 0)
+    {
+        if (!bcmolt_trx_energy_detect_pack(&this->energy_detect, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_END_OF_BURST_DATA_PATTERN)) != 0)
+    {
+        if (!bcmolt_resync_control_pack(&this->end_of_burst_data_pattern, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_END_OF_BURST_RANGING_PATTERN)) != 0)
+    {
+        if (!bcmolt_resync_control_pack(&this->end_of_burst_ranging_pattern, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_PREAMBLE)) != 0)
+    {
+        if (!bcmolt_trx_preamble_pack(&this->preamble, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_DELIMITER)) != 0)
+    {
+        if (!bcmolt_trx_delimiter_pack(&this->delimiter, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_GUARD_BITS)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->guard_bits))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_SERDES_CONFIGURATION)) != 0)
+    {
+        if (!bcmolt_serdes_configuration_pack(&this->serdes_configuration, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_PLO_RANGING)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->plo_ranging))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_PLO_DATA)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->plo_data))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_RSSI_NORMAL_CONFIG)) != 0)
+    {
+        if (!bcmolt_gpon_rssi_general_configuration_pack(&this->rssi_normal_config, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_RANGING_RSSI_RESYNC_CONTROL)) != 0)
+    {
+        if (!bcmolt_ranging_rssi_control_pack(&this->ranging_rssi_resync_control, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_gpon_trx_cfg_data_get_packed_length(const bcmolt_gpon_trx_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_TRANSCEIVER_TYPE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_LA_CONFIGURATION)) != 0)
+    {
+        count += 10;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_BCDR)) != 0)
+    {
+        count += 10;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_LA_RANGING_AFTER_NO_ED_RESYNC)) != 0)
+    {
+        count += 5;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_BCDR_RANGING_AFTER_NO_ED_RESYNC)) != 0)
+    {
+        count += 5;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_LA_RANGING_AFTER_ED_RESYNC)) != 0)
+    {
+        count += 5;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_BCDR_RANGING_AFTER_ED_RESYNC)) != 0)
+    {
+        count += 5;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_LA_RESYNC_POLARITY)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_BCDR_RESYNC_POLARITY)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_BCDR_RANGING_RESYNC_CONDITIONS)) != 0)
+    {
+        count += 7;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_LA_RANGING_RESYNC_CONDITIONS)) != 0)
+    {
+        count += 7;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_RX_CONFIGURATION)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_RANGING_CONTROL_STAGES_CONFIGURATION)) != 0)
+    {
+        count += 3;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_ENERGY_DETECT)) != 0)
+    {
+        count += 9;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_END_OF_BURST_DATA_PATTERN)) != 0)
+    {
+        count += 5;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_END_OF_BURST_RANGING_PATTERN)) != 0)
+    {
+        count += 5;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_PREAMBLE)) != 0)
+    {
+        count += 5;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_DELIMITER)) != 0)
+    {
+        count += 5;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_GUARD_BITS)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_SERDES_CONFIGURATION)) != 0)
+    {
+        count += 7;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_PLO_RANGING)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_PLO_DATA)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_RSSI_NORMAL_CONFIG)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_RANGING_RSSI_RESYNC_CONTROL)) != 0)
+    {
+        count += 3;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_trx_cfg_data_unpack(bcmolt_gpon_trx_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_TRANSCEIVER_TYPE)) != 0)
+    {
+        if (!bcmolt_trx_type_unpack(&this->transceiver_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_LA_CONFIGURATION)) != 0)
+    {
+        if (!bcmolt_la_resync_pattern_configuration_unpack(&this->la_configuration, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_BCDR)) != 0)
+    {
+        if (!bcmolt_bcdr_resync_pattern_configuration_unpack(&this->bcdr, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_LA_RANGING_AFTER_NO_ED_RESYNC)) != 0)
+    {
+        if (!bcmolt_resync_control_unpack(&this->la_ranging_after_no_ed_resync, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_BCDR_RANGING_AFTER_NO_ED_RESYNC)) != 0)
+    {
+        if (!bcmolt_resync_control_unpack(&this->bcdr_ranging_after_no_ed_resync, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_LA_RANGING_AFTER_ED_RESYNC)) != 0)
+    {
+        if (!bcmolt_resync_control_unpack(&this->la_ranging_after_ed_resync, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_BCDR_RANGING_AFTER_ED_RESYNC)) != 0)
+    {
+        if (!bcmolt_resync_control_unpack(&this->bcdr_ranging_after_ed_resync, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_LA_RESYNC_POLARITY)) != 0)
+    {
+        if (!bcmolt_polarity_unpack(&this->la_resync_polarity, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_BCDR_RESYNC_POLARITY)) != 0)
+    {
+        if (!bcmolt_polarity_unpack(&this->bcdr_resync_polarity, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_BCDR_RANGING_RESYNC_CONDITIONS)) != 0)
+    {
+        if (!bcmolt_ranging_resync_conditions_unpack(&this->bcdr_ranging_resync_conditions, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_LA_RANGING_RESYNC_CONDITIONS)) != 0)
+    {
+        if (!bcmolt_ranging_resync_conditions_unpack(&this->la_ranging_resync_conditions, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_RX_CONFIGURATION)) != 0)
+    {
+        if (!bcmolt_trx_rx_configuration_unpack(&this->rx_configuration, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_RANGING_CONTROL_STAGES_CONFIGURATION)) != 0)
+    {
+        if (!bcmolt_ranging_control_configuration_unpack(&this->ranging_control_stages_configuration, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_ENERGY_DETECT)) != 0)
+    {
+        if (!bcmolt_trx_energy_detect_unpack(&this->energy_detect, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_END_OF_BURST_DATA_PATTERN)) != 0)
+    {
+        if (!bcmolt_resync_control_unpack(&this->end_of_burst_data_pattern, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_END_OF_BURST_RANGING_PATTERN)) != 0)
+    {
+        if (!bcmolt_resync_control_unpack(&this->end_of_burst_ranging_pattern, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_PREAMBLE)) != 0)
+    {
+        if (!bcmolt_trx_preamble_unpack(&this->preamble, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_DELIMITER)) != 0)
+    {
+        if (!bcmolt_trx_delimiter_unpack(&this->delimiter, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_GUARD_BITS)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->guard_bits))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_SERDES_CONFIGURATION)) != 0)
+    {
+        if (!bcmolt_serdes_configuration_unpack(&this->serdes_configuration, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_PLO_RANGING)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->plo_ranging))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_PLO_DATA)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->plo_data))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_RSSI_NORMAL_CONFIG)) != 0)
+    {
+        if (!bcmolt_gpon_rssi_general_configuration_unpack(&this->rssi_normal_config, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_RANGING_RSSI_RESYNC_CONTROL)) != 0)
+    {
+        if (!bcmolt_ranging_rssi_control_unpack(&this->ranging_rssi_resync_control, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_trx_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_TRANSCEIVER_TYPE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_LA_CONFIGURATION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 10))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_BCDR)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 10))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_LA_RANGING_AFTER_NO_ED_RESYNC)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 5))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_BCDR_RANGING_AFTER_NO_ED_RESYNC)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 5))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_LA_RANGING_AFTER_ED_RESYNC)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 5))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_BCDR_RANGING_AFTER_ED_RESYNC)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 5))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_LA_RESYNC_POLARITY)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_BCDR_RESYNC_POLARITY)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_BCDR_RANGING_RESYNC_CONDITIONS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 7))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_LA_RANGING_RESYNC_CONDITIONS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 7))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_RX_CONFIGURATION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_RANGING_CONTROL_STAGES_CONFIGURATION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 3))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_ENERGY_DETECT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 9))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_END_OF_BURST_DATA_PATTERN)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 5))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_END_OF_BURST_RANGING_PATTERN)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 5))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_PREAMBLE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 5))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_DELIMITER)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 5))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_GUARD_BITS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_SERDES_CONFIGURATION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 7))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_PLO_RANGING)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_PLO_DATA)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_RSSI_NORMAL_CONFIG)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_RANGING_RSSI_RESYNC_CONTROL)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 3))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_gpon_trx_cfg_data_bounds_check(const bcmolt_gpon_trx_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_trx_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_TRANSCEIVER_TYPE)) != 0)
+    {
+        switch (this->transceiver_type)
+        {
+            case BCMOLT_TRX_TYPE_SPS_43_48_H_HP_CDE_SD_2013:
+                break;
+            case BCMOLT_TRX_TYPE_SOG_4321_PSGB:
+                break;
+            case BCMOLT_TRX_TYPE_LTE_3680_M:
+                break;
+            case BCMOLT_TRX_TYPE_SOURCE_PHOTONICS:
+                break;
+            case BCMOLT_TRX_TYPE_LTE_3680_P_TYPE_C_PLUS:
+                break;
+            case BCMOLT_TRX_TYPE_ANY:
+                break;
+            case BCMOLT_TRX_TYPE_ANY_RESET_GUARD:
+                break;
+            case BCMOLT_TRX_TYPE_ANY_RESET_PREAMBLE:
+                break;
+            case BCMOLT_TRX_TYPE_WTD_RTXM_167_526_CPLUS:
+                break;
+            case BCMOLT_TRX_TYPE_WTD_RTXM_167_522_BPLUS:
+                break;
+            case BCMOLT_TRX_TYPE_LTE_3680_P_BC:
+                break;
+            case BCMOLT_TRX_TYPE_SOGQ_4321_PSGB_C_PLUS:
+                break;
+            case BCMOLT_TRX_TYPE_WTD_RTXM167_521:
+                break;
+            case BCMOLT_TRX_TYPE_LTE3678:
+                break;
+            case BCMOLT_TRX_TYPE_SOGP_4321_PSGA:
+                break;
+            case BCMOLT_TRX_TYPE_GPON_GENERAL_1:
+                break;
+            case BCMOLT_TRX_TYPE_GPON_GENERAL_2:
+                break;
+            case BCMOLT_TRX_TYPE_GPON_GENERAL_3:
+                break;
+            case BCMOLT_TRX_TYPE_GPON_GENERAL_4:
+                break;
+            case BCMOLT_TRX_TYPE_GPON_GENERAL_5:
+                break;
+            case BCMOLT_TRX_TYPE_GPON_GENERAL_6:
+                break;
+            case BCMOLT_TRX_TYPE_GPON_GENERAL_7:
+                break;
+            case BCMOLT_TRX_TYPE_GPON_GENERAL_8:
+                break;
+            case BCMOLT_TRX_TYPE_GPON_GENERAL_9:
+                break;
+            case BCMOLT_TRX_TYPE_GPON_GENERAL_10:
+                break;
+            case BCMOLT_TRX_TYPE_GPON_GENERAL_11:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_TRX_CFG_ID_TRANSCEIVER_TYPE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_LA_CONFIGURATION)) != 0)
+    {
+        if (!bcmolt_la_resync_pattern_configuration_bounds_check(&this->la_configuration))
+        {
+            *failed_prop = BCMOLT_GPON_TRX_CFG_ID_LA_CONFIGURATION;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_BCDR)) != 0)
+    {
+        if (!bcmolt_bcdr_resync_pattern_configuration_bounds_check(&this->bcdr))
+        {
+            *failed_prop = BCMOLT_GPON_TRX_CFG_ID_BCDR;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_LA_RANGING_AFTER_NO_ED_RESYNC)) != 0)
+    {
+        if (!bcmolt_resync_control_bounds_check(&this->la_ranging_after_no_ed_resync))
+        {
+            *failed_prop = BCMOLT_GPON_TRX_CFG_ID_LA_RANGING_AFTER_NO_ED_RESYNC;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_BCDR_RANGING_AFTER_NO_ED_RESYNC)) != 0)
+    {
+        if (!bcmolt_resync_control_bounds_check(&this->bcdr_ranging_after_no_ed_resync))
+        {
+            *failed_prop = BCMOLT_GPON_TRX_CFG_ID_BCDR_RANGING_AFTER_NO_ED_RESYNC;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_LA_RANGING_AFTER_ED_RESYNC)) != 0)
+    {
+        if (!bcmolt_resync_control_bounds_check(&this->la_ranging_after_ed_resync))
+        {
+            *failed_prop = BCMOLT_GPON_TRX_CFG_ID_LA_RANGING_AFTER_ED_RESYNC;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_BCDR_RANGING_AFTER_ED_RESYNC)) != 0)
+    {
+        if (!bcmolt_resync_control_bounds_check(&this->bcdr_ranging_after_ed_resync))
+        {
+            *failed_prop = BCMOLT_GPON_TRX_CFG_ID_BCDR_RANGING_AFTER_ED_RESYNC;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_LA_RESYNC_POLARITY)) != 0)
+    {
+        switch (this->la_resync_polarity)
+        {
+            case BCMOLT_POLARITY_LOW:
+                break;
+            case BCMOLT_POLARITY_HIGH:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_TRX_CFG_ID_LA_RESYNC_POLARITY;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_BCDR_RESYNC_POLARITY)) != 0)
+    {
+        switch (this->bcdr_resync_polarity)
+        {
+            case BCMOLT_POLARITY_LOW:
+                break;
+            case BCMOLT_POLARITY_HIGH:
+                break;
+            default:
+                *failed_prop = BCMOLT_GPON_TRX_CFG_ID_BCDR_RESYNC_POLARITY;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_BCDR_RANGING_RESYNC_CONDITIONS)) != 0)
+    {
+        if (!bcmolt_ranging_resync_conditions_bounds_check(&this->bcdr_ranging_resync_conditions))
+        {
+            *failed_prop = BCMOLT_GPON_TRX_CFG_ID_BCDR_RANGING_RESYNC_CONDITIONS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_LA_RANGING_RESYNC_CONDITIONS)) != 0)
+    {
+        if (!bcmolt_ranging_resync_conditions_bounds_check(&this->la_ranging_resync_conditions))
+        {
+            *failed_prop = BCMOLT_GPON_TRX_CFG_ID_LA_RANGING_RESYNC_CONDITIONS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_RX_CONFIGURATION)) != 0)
+    {
+        if (!bcmolt_trx_rx_configuration_bounds_check(&this->rx_configuration))
+        {
+            *failed_prop = BCMOLT_GPON_TRX_CFG_ID_RX_CONFIGURATION;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_RANGING_CONTROL_STAGES_CONFIGURATION)) != 0)
+    {
+        if (!bcmolt_ranging_control_configuration_bounds_check(&this->ranging_control_stages_configuration))
+        {
+            *failed_prop = BCMOLT_GPON_TRX_CFG_ID_RANGING_CONTROL_STAGES_CONFIGURATION;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_ENERGY_DETECT)) != 0)
+    {
+        if (!bcmolt_trx_energy_detect_bounds_check(&this->energy_detect))
+        {
+            *failed_prop = BCMOLT_GPON_TRX_CFG_ID_ENERGY_DETECT;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_END_OF_BURST_DATA_PATTERN)) != 0)
+    {
+        if (!bcmolt_resync_control_bounds_check(&this->end_of_burst_data_pattern))
+        {
+            *failed_prop = BCMOLT_GPON_TRX_CFG_ID_END_OF_BURST_DATA_PATTERN;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_END_OF_BURST_RANGING_PATTERN)) != 0)
+    {
+        if (!bcmolt_resync_control_bounds_check(&this->end_of_burst_ranging_pattern))
+        {
+            *failed_prop = BCMOLT_GPON_TRX_CFG_ID_END_OF_BURST_RANGING_PATTERN;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_PREAMBLE)) != 0)
+    {
+        if (!bcmolt_trx_preamble_bounds_check(&this->preamble))
+        {
+            *failed_prop = BCMOLT_GPON_TRX_CFG_ID_PREAMBLE;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_DELIMITER)) != 0)
+    {
+        if (!bcmolt_trx_delimiter_bounds_check(&this->delimiter))
+        {
+            *failed_prop = BCMOLT_GPON_TRX_CFG_ID_DELIMITER;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_SERDES_CONFIGURATION)) != 0)
+    {
+        if (!bcmolt_serdes_configuration_bounds_check(&this->serdes_configuration))
+        {
+            *failed_prop = BCMOLT_GPON_TRX_CFG_ID_SERDES_CONFIGURATION;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_RSSI_NORMAL_CONFIG)) != 0)
+    {
+        if (!bcmolt_gpon_rssi_general_configuration_bounds_check(&this->rssi_normal_config))
+        {
+            *failed_prop = BCMOLT_GPON_TRX_CFG_ID_RSSI_NORMAL_CONFIG;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_GPON_TRX_CFG_ID_RANGING_RSSI_RESYNC_CONTROL)) != 0)
+    {
+        if (!bcmolt_ranging_rssi_control_bounds_check(&this->ranging_rssi_resync_control))
+        {
+            *failed_prop = BCMOLT_GPON_TRX_CFG_ID_RANGING_RSSI_RESYNC_CONTROL;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_log_entry_key_set_default(bcmolt_log_entry_key *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_KEY_ID_LOG_ID)) != 0)
+    {
+        this->log_id = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_KEY_ID_RESERVED)) != 0)
+    {
+        this->reserved = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_KEY_ID_NAME)) != 0)
+    {
+        memset(this->name.str, 0, 100);
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_entry_key_pack(const bcmolt_log_entry_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_KEY_ID_LOG_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->log_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_KEY_ID_RESERVED)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->reserved))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_KEY_ID_NAME)) != 0)
+    {
+        if (!bcmolt_str_100_pack(&this->name, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_log_entry_key_get_packed_length(const bcmolt_log_entry_key *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_KEY_ID_LOG_ID)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_KEY_ID_RESERVED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_KEY_ID_NAME)) != 0)
+    {
+        count += 100;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_entry_key_unpack(bcmolt_log_entry_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_KEY_ID_LOG_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->log_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_KEY_ID_RESERVED)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->reserved))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_KEY_ID_NAME)) != 0)
+    {
+        if (!bcmolt_str_100_unpack(&this->name, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_entry_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_KEY_ID_LOG_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_KEY_ID_RESERVED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_KEY_ID_NAME)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 100))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_entry_key_bounds_check(const bcmolt_log_entry_key *this, bcmolt_presence_mask fields_present, bcmolt_log_entry_key_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_KEY_ID_NAME)) != 0)
+    {
+        if (!bcmolt_str_100_bounds_check(&this->name))
+        {
+            *failed_prop = BCMOLT_LOG_ENTRY_KEY_ID_NAME;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_log_entry_cfg_data_set_default(bcmolt_log_entry_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_CFG_ID_DEFAULT_LOG_LEVEL)) != 0)
+    {
+        this->default_log_level = BCMOLT_LOG_LEVEL_NO_LOG;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_CFG_ID_DEFAULT_LOG_TYPE)) != 0)
+    {
+        this->default_log_type = BCMOLT_LOG_TYPE_NONE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_CFG_ID_LOG_LEVEL_PRINT)) != 0)
+    {
+        this->log_level_print = BCMOLT_LOG_LEVEL_NO_LOG;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_CFG_ID_LOG_LEVEL_SAVE)) != 0)
+    {
+        this->log_level_save = BCMOLT_LOG_LEVEL_NO_LOG;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_CFG_ID_LOG_TYPE)) != 0)
+    {
+        this->log_type = BCMOLT_LOG_TYPE_NONE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_CFG_ID_LOG_STYLE)) != 0)
+    {
+        this->log_style = BCMOLT_LOG_STYLE_NORMAL;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_CFG_ID_LOG_NAME)) != 0)
+    {
+        memset(this->log_name.str, 0, 100);
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_entry_cfg_data_pack(const bcmolt_log_entry_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_CFG_ID_DEFAULT_LOG_LEVEL)) != 0)
+    {
+        if (!bcmolt_log_level_pack(this->default_log_level, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_CFG_ID_DEFAULT_LOG_TYPE)) != 0)
+    {
+        if (!bcmolt_log_type_pack(this->default_log_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_CFG_ID_LOG_LEVEL_PRINT)) != 0)
+    {
+        if (!bcmolt_log_level_pack(this->log_level_print, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_CFG_ID_LOG_LEVEL_SAVE)) != 0)
+    {
+        if (!bcmolt_log_level_pack(this->log_level_save, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_CFG_ID_LOG_TYPE)) != 0)
+    {
+        if (!bcmolt_log_type_pack(this->log_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_CFG_ID_LOG_STYLE)) != 0)
+    {
+        if (!bcmolt_log_style_pack(this->log_style, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_CFG_ID_LOG_NAME)) != 0)
+    {
+        if (!bcmolt_str_100_pack(&this->log_name, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_log_entry_cfg_data_get_packed_length(const bcmolt_log_entry_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_CFG_ID_DEFAULT_LOG_LEVEL)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_CFG_ID_DEFAULT_LOG_TYPE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_CFG_ID_LOG_LEVEL_PRINT)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_CFG_ID_LOG_LEVEL_SAVE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_CFG_ID_LOG_TYPE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_CFG_ID_LOG_STYLE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_CFG_ID_LOG_NAME)) != 0)
+    {
+        count += 100;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_entry_cfg_data_unpack(bcmolt_log_entry_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_CFG_ID_DEFAULT_LOG_LEVEL)) != 0)
+    {
+        if (!bcmolt_log_level_unpack(&this->default_log_level, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_CFG_ID_DEFAULT_LOG_TYPE)) != 0)
+    {
+        if (!bcmolt_log_type_unpack(&this->default_log_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_CFG_ID_LOG_LEVEL_PRINT)) != 0)
+    {
+        if (!bcmolt_log_level_unpack(&this->log_level_print, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_CFG_ID_LOG_LEVEL_SAVE)) != 0)
+    {
+        if (!bcmolt_log_level_unpack(&this->log_level_save, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_CFG_ID_LOG_TYPE)) != 0)
+    {
+        if (!bcmolt_log_type_unpack(&this->log_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_CFG_ID_LOG_STYLE)) != 0)
+    {
+        if (!bcmolt_log_style_unpack(&this->log_style, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_CFG_ID_LOG_NAME)) != 0)
+    {
+        if (!bcmolt_str_100_unpack(&this->log_name, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_entry_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_CFG_ID_DEFAULT_LOG_LEVEL)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_CFG_ID_DEFAULT_LOG_TYPE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_CFG_ID_LOG_LEVEL_PRINT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_CFG_ID_LOG_LEVEL_SAVE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_CFG_ID_LOG_TYPE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_CFG_ID_LOG_STYLE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_CFG_ID_LOG_NAME)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 100))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_entry_cfg_data_bounds_check(const bcmolt_log_entry_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_log_entry_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_CFG_ID_DEFAULT_LOG_LEVEL)) != 0)
+    {
+        switch (this->default_log_level)
+        {
+            case BCMOLT_LOG_LEVEL_NO_LOG:
+                break;
+            case BCMOLT_LOG_LEVEL_FATAL:
+                break;
+            case BCMOLT_LOG_LEVEL_ERROR:
+                break;
+            case BCMOLT_LOG_LEVEL_WARNING:
+                break;
+            case BCMOLT_LOG_LEVEL_INFO:
+                break;
+            case BCMOLT_LOG_LEVEL_DEBUG:
+                break;
+            default:
+                *failed_prop = BCMOLT_LOG_ENTRY_CFG_ID_DEFAULT_LOG_LEVEL;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_CFG_ID_DEFAULT_LOG_TYPE)) != 0)
+    {
+        switch (this->default_log_type)
+        {
+            case BCMOLT_LOG_TYPE_NONE:
+                break;
+            case BCMOLT_LOG_TYPE_PRINT:
+                break;
+            case BCMOLT_LOG_TYPE_SAVE:
+                break;
+            case BCMOLT_LOG_TYPE_BOTH:
+                break;
+            default:
+                *failed_prop = BCMOLT_LOG_ENTRY_CFG_ID_DEFAULT_LOG_TYPE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_CFG_ID_LOG_LEVEL_PRINT)) != 0)
+    {
+        switch (this->log_level_print)
+        {
+            case BCMOLT_LOG_LEVEL_NO_LOG:
+                break;
+            case BCMOLT_LOG_LEVEL_FATAL:
+                break;
+            case BCMOLT_LOG_LEVEL_ERROR:
+                break;
+            case BCMOLT_LOG_LEVEL_WARNING:
+                break;
+            case BCMOLT_LOG_LEVEL_INFO:
+                break;
+            case BCMOLT_LOG_LEVEL_DEBUG:
+                break;
+            default:
+                *failed_prop = BCMOLT_LOG_ENTRY_CFG_ID_LOG_LEVEL_PRINT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_CFG_ID_LOG_LEVEL_SAVE)) != 0)
+    {
+        switch (this->log_level_save)
+        {
+            case BCMOLT_LOG_LEVEL_NO_LOG:
+                break;
+            case BCMOLT_LOG_LEVEL_FATAL:
+                break;
+            case BCMOLT_LOG_LEVEL_ERROR:
+                break;
+            case BCMOLT_LOG_LEVEL_WARNING:
+                break;
+            case BCMOLT_LOG_LEVEL_INFO:
+                break;
+            case BCMOLT_LOG_LEVEL_DEBUG:
+                break;
+            default:
+                *failed_prop = BCMOLT_LOG_ENTRY_CFG_ID_LOG_LEVEL_SAVE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_CFG_ID_LOG_TYPE)) != 0)
+    {
+        switch (this->log_type)
+        {
+            case BCMOLT_LOG_TYPE_NONE:
+                break;
+            case BCMOLT_LOG_TYPE_PRINT:
+                break;
+            case BCMOLT_LOG_TYPE_SAVE:
+                break;
+            case BCMOLT_LOG_TYPE_BOTH:
+                break;
+            default:
+                *failed_prop = BCMOLT_LOG_ENTRY_CFG_ID_LOG_TYPE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_CFG_ID_LOG_STYLE)) != 0)
+    {
+        switch (this->log_style)
+        {
+            case BCMOLT_LOG_STYLE_NORMAL:
+                break;
+            case BCMOLT_LOG_STYLE_BOLD:
+                break;
+            case BCMOLT_LOG_STYLE_UNDERLINE:
+                break;
+            case BCMOLT_LOG_STYLE_BLINK:
+                break;
+            case BCMOLT_LOG_STYLE_REVERSE_VIDEO:
+                break;
+            default:
+                *failed_prop = BCMOLT_LOG_ENTRY_CFG_ID_LOG_STYLE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_CFG_ID_LOG_NAME)) != 0)
+    {
+        if (!bcmolt_str_100_bounds_check(&this->log_name))
+        {
+            *failed_prop = BCMOLT_LOG_ENTRY_CFG_ID_LOG_NAME;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_log_entry_stat_data_set_default(bcmolt_log_entry_stat_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_STAT_ID_MSG_COUNT)) != 0)
+    {
+        memset(this->msg_count.arr, 0, sizeof(this->msg_count.arr));
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_STAT_ID_LOST_MSG_COUNT)) != 0)
+    {
+        this->lost_msg_count = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_entry_stat_data_pack(const bcmolt_log_entry_stat_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_STAT_ID_MSG_COUNT)) != 0)
+    {
+        if (!bcmolt_arr_u32_6_pack(&this->msg_count, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_STAT_ID_LOST_MSG_COUNT)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->lost_msg_count))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_log_entry_stat_data_get_packed_length(const bcmolt_log_entry_stat_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_STAT_ID_MSG_COUNT)) != 0)
+    {
+        count += 24;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_STAT_ID_LOST_MSG_COUNT)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_entry_stat_data_unpack(bcmolt_log_entry_stat_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_STAT_ID_MSG_COUNT)) != 0)
+    {
+        if (!bcmolt_arr_u32_6_unpack(&this->msg_count, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_STAT_ID_LOST_MSG_COUNT)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->lost_msg_count))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_entry_stat_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_STAT_ID_MSG_COUNT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 24))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_STAT_ID_LOST_MSG_COUNT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_entry_stat_data_bounds_check(const bcmolt_log_entry_stat_data *this, bcmolt_presence_mask fields_present, bcmolt_log_entry_stat_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_STAT_ID_MSG_COUNT)) != 0)
+    {
+        if (!bcmolt_arr_u32_6_bounds_check(&this->msg_count))
+        {
+            *failed_prop = BCMOLT_LOG_ENTRY_STAT_ID_MSG_COUNT;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_log_entry_stat_cfg_data_set_default(bcmolt_log_entry_stat_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_STAT_CFG_ID_CFG)) != 0)
+    {
+        this->cfg.trigger.type = BCMOLT_STAT_CONDITION_TYPE_NONE;
+        this->cfg.soak.active_soak_time = 0;
+        this->cfg.soak.clear_soak_time = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_entry_stat_cfg_data_pack(const bcmolt_log_entry_stat_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_pack(&this->cfg, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_log_entry_stat_cfg_data_get_packed_length(const bcmolt_log_entry_stat_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_STAT_CFG_ID_CFG)) != 0)
+    {
+        count += bcmolt_stat_alarm_config_get_packed_length(&this->cfg);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_entry_stat_cfg_data_unpack(bcmolt_log_entry_stat_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_unpack(&this->cfg, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_entry_stat_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_entry_stat_cfg_data_bounds_check(const bcmolt_log_entry_stat_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_log_entry_stat_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_bounds_check(&this->cfg))
+        {
+            *failed_prop = BCMOLT_LOG_ENTRY_STAT_CFG_ID_CFG;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_log_entry_stat_alarm_cleared_data_set_default(bcmolt_log_entry_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        this->stat = BCMOLT_LOG_ENTRY_STAT_ID_MSG_COUNT;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_entry_stat_alarm_cleared_data_pack(const bcmolt_log_entry_stat_alarm_cleared_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_log_entry_stat_id_pack(this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_log_entry_stat_alarm_cleared_data_get_packed_length(const bcmolt_log_entry_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_entry_stat_alarm_cleared_data_unpack(bcmolt_log_entry_stat_alarm_cleared_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_log_entry_stat_id_unpack(&this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_entry_stat_alarm_cleared_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_entry_stat_alarm_cleared_data_bounds_check(const bcmolt_log_entry_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present, bcmolt_log_entry_stat_alarm_cleared_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        switch (this->stat)
+        {
+            case BCMOLT_LOG_ENTRY_STAT_ID_MSG_COUNT:
+                break;
+            case BCMOLT_LOG_ENTRY_STAT_ID_LOST_MSG_COUNT:
+                break;
+            default:
+                *failed_prop = BCMOLT_LOG_ENTRY_STAT_ALARM_CLEARED_ID_STAT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_log_entry_stat_alarm_raised_data_set_default(bcmolt_log_entry_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        this->stat = BCMOLT_LOG_ENTRY_STAT_ID_MSG_COUNT;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_entry_stat_alarm_raised_data_pack(const bcmolt_log_entry_stat_alarm_raised_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_log_entry_stat_id_pack(this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_log_entry_stat_alarm_raised_data_get_packed_length(const bcmolt_log_entry_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_entry_stat_alarm_raised_data_unpack(bcmolt_log_entry_stat_alarm_raised_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_log_entry_stat_id_unpack(&this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_entry_stat_alarm_raised_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_entry_stat_alarm_raised_data_bounds_check(const bcmolt_log_entry_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present, bcmolt_log_entry_stat_alarm_raised_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        switch (this->stat)
+        {
+            case BCMOLT_LOG_ENTRY_STAT_ID_MSG_COUNT:
+                break;
+            case BCMOLT_LOG_ENTRY_STAT_ID_LOST_MSG_COUNT:
+                break;
+            default:
+                *failed_prop = BCMOLT_LOG_ENTRY_STAT_ALARM_RAISED_ID_STAT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_log_entry_auto_cfg_data_set_default(bcmolt_log_entry_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        this->stat_alarm_cleared = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        this->stat_alarm_raised = BCMOS_FALSE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_entry_auto_cfg_data_pack(const bcmolt_log_entry_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->stat_alarm_cleared))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->stat_alarm_raised))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_log_entry_auto_cfg_data_get_packed_length(const bcmolt_log_entry_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_entry_auto_cfg_data_unpack(bcmolt_log_entry_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->stat_alarm_cleared))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->stat_alarm_raised))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_entry_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOG_ENTRY_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_log_entry_auto_cfg_data_bounds_check(const bcmolt_log_entry_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_log_entry_auto_cfg_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_logger_key_set_default(bcmolt_logger_key *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_KEY_ID_RESERVED)) != 0)
+    {
+        this->reserved = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_KEY_ID_FILE_ID)) != 0)
+    {
+        this->file_id = BCMOLT_LOG_FILE_ID_SRAM;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_logger_key_pack(const bcmolt_logger_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_KEY_ID_RESERVED)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->reserved))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_KEY_ID_FILE_ID)) != 0)
+    {
+        if (!bcmolt_log_file_id_pack(this->file_id, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_logger_key_get_packed_length(const bcmolt_logger_key *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_KEY_ID_RESERVED)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_KEY_ID_FILE_ID)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_logger_key_unpack(bcmolt_logger_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_KEY_ID_RESERVED)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->reserved))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_KEY_ID_FILE_ID)) != 0)
+    {
+        if (!bcmolt_log_file_id_unpack(&this->file_id, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_logger_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_KEY_ID_RESERVED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_KEY_ID_FILE_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_logger_key_bounds_check(const bcmolt_logger_key *this, bcmolt_presence_mask fields_present, bcmolt_logger_key_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_KEY_ID_FILE_ID)) != 0)
+    {
+        switch (this->file_id)
+        {
+            case BCMOLT_LOG_FILE_ID_SRAM:
+                break;
+            case BCMOLT_LOG_FILE_ID_DDR:
+                break;
+            default:
+                *failed_prop = BCMOLT_LOGGER_KEY_ID_FILE_ID;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_logger_cfg_data_set_default(bcmolt_logger_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_CFG_ID_BUFFER)) != 0)
+    {
+        memset(this->buffer.buff, 0, 2048);
+        this->buffer.msg_to_read = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_CFG_ID_WRAP_AROUND)) != 0)
+    {
+        this->wrap_around = BCMOS_TRUE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_CFG_ID_CLEAR_AFTER_READ)) != 0)
+    {
+        this->clear_after_read = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_CFG_ID_ENABLE_LOG)) != 0)
+    {
+        this->enable_log = BCMOS_TRUE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_CFG_ID_LOG_NAMES)) != 0)
+    {
+        memset(this->log_names.str, 0, 1000);
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_logger_cfg_data_pack(const bcmolt_logger_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_CFG_ID_BUFFER)) != 0)
+    {
+        if (!bcmolt_log_buffer_pack(&this->buffer, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_CFG_ID_WRAP_AROUND)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->wrap_around))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_CFG_ID_CLEAR_AFTER_READ)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->clear_after_read))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_CFG_ID_ENABLE_LOG)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->enable_log))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_CFG_ID_LOG_NAMES)) != 0)
+    {
+        if (!bcmolt_str_1000_pack(&this->log_names, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_logger_cfg_data_get_packed_length(const bcmolt_logger_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_CFG_ID_BUFFER)) != 0)
+    {
+        count += 2052;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_CFG_ID_WRAP_AROUND)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_CFG_ID_CLEAR_AFTER_READ)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_CFG_ID_ENABLE_LOG)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_CFG_ID_LOG_NAMES)) != 0)
+    {
+        count += 1000;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_logger_cfg_data_unpack(bcmolt_logger_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_CFG_ID_BUFFER)) != 0)
+    {
+        if (!bcmolt_log_buffer_unpack(&this->buffer, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_CFG_ID_WRAP_AROUND)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->wrap_around))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_CFG_ID_CLEAR_AFTER_READ)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->clear_after_read))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_CFG_ID_ENABLE_LOG)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->enable_log))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_CFG_ID_LOG_NAMES)) != 0)
+    {
+        if (!bcmolt_str_1000_unpack(&this->log_names, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_logger_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_CFG_ID_BUFFER)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2052))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_CFG_ID_WRAP_AROUND)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_CFG_ID_CLEAR_AFTER_READ)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_CFG_ID_ENABLE_LOG)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_CFG_ID_LOG_NAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1000))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_logger_cfg_data_bounds_check(const bcmolt_logger_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_logger_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_CFG_ID_BUFFER)) != 0)
+    {
+        if (!bcmolt_log_buffer_bounds_check(&this->buffer))
+        {
+            *failed_prop = BCMOLT_LOGGER_CFG_ID_BUFFER;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_CFG_ID_LOG_NAMES)) != 0)
+    {
+        if (!bcmolt_str_1000_bounds_check(&this->log_names))
+        {
+            *failed_prop = BCMOLT_LOGGER_CFG_ID_LOG_NAMES;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_logger_stat_data_set_default(bcmolt_logger_stat_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_STAT_ID_LINES_IN_LOG)) != 0)
+    {
+        this->lines_in_log = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_logger_stat_data_pack(const bcmolt_logger_stat_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_STAT_ID_LINES_IN_LOG)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->lines_in_log))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_logger_stat_data_get_packed_length(const bcmolt_logger_stat_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_STAT_ID_LINES_IN_LOG)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_logger_stat_data_unpack(bcmolt_logger_stat_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_STAT_ID_LINES_IN_LOG)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->lines_in_log))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_logger_stat_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_STAT_ID_LINES_IN_LOG)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_logger_stat_data_bounds_check(const bcmolt_logger_stat_data *this, bcmolt_presence_mask fields_present, bcmolt_logger_stat_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_logger_stat_cfg_data_set_default(bcmolt_logger_stat_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_STAT_CFG_ID_CFG)) != 0)
+    {
+        this->cfg.trigger.type = BCMOLT_STAT_CONDITION_TYPE_NONE;
+        this->cfg.soak.active_soak_time = 0;
+        this->cfg.soak.clear_soak_time = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_logger_stat_cfg_data_pack(const bcmolt_logger_stat_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_pack(&this->cfg, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_logger_stat_cfg_data_get_packed_length(const bcmolt_logger_stat_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_STAT_CFG_ID_CFG)) != 0)
+    {
+        count += bcmolt_stat_alarm_config_get_packed_length(&this->cfg);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_logger_stat_cfg_data_unpack(bcmolt_logger_stat_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_unpack(&this->cfg, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_logger_stat_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_logger_stat_cfg_data_bounds_check(const bcmolt_logger_stat_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_logger_stat_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_bounds_check(&this->cfg))
+        {
+            *failed_prop = BCMOLT_LOGGER_STAT_CFG_ID_CFG;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_logger_stat_alarm_cleared_data_set_default(bcmolt_logger_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        this->stat = BCMOLT_LOGGER_STAT_ID_LINES_IN_LOG;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_logger_stat_alarm_cleared_data_pack(const bcmolt_logger_stat_alarm_cleared_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_logger_stat_id_pack(this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_logger_stat_alarm_cleared_data_get_packed_length(const bcmolt_logger_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_logger_stat_alarm_cleared_data_unpack(bcmolt_logger_stat_alarm_cleared_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_logger_stat_id_unpack(&this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_logger_stat_alarm_cleared_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_logger_stat_alarm_cleared_data_bounds_check(const bcmolt_logger_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present, bcmolt_logger_stat_alarm_cleared_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        switch (this->stat)
+        {
+            case BCMOLT_LOGGER_STAT_ID_LINES_IN_LOG:
+                break;
+            default:
+                *failed_prop = BCMOLT_LOGGER_STAT_ALARM_CLEARED_ID_STAT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_logger_stat_alarm_raised_data_set_default(bcmolt_logger_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        this->stat = BCMOLT_LOGGER_STAT_ID_LINES_IN_LOG;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_logger_stat_alarm_raised_data_pack(const bcmolt_logger_stat_alarm_raised_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_logger_stat_id_pack(this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_logger_stat_alarm_raised_data_get_packed_length(const bcmolt_logger_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_logger_stat_alarm_raised_data_unpack(bcmolt_logger_stat_alarm_raised_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_logger_stat_id_unpack(&this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_logger_stat_alarm_raised_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_logger_stat_alarm_raised_data_bounds_check(const bcmolt_logger_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present, bcmolt_logger_stat_alarm_raised_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        switch (this->stat)
+        {
+            case BCMOLT_LOGGER_STAT_ID_LINES_IN_LOG:
+                break;
+            default:
+                *failed_prop = BCMOLT_LOGGER_STAT_ALARM_RAISED_ID_STAT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_logger_auto_cfg_data_set_default(bcmolt_logger_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        this->stat_alarm_cleared = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        this->stat_alarm_raised = BCMOS_FALSE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_logger_auto_cfg_data_pack(const bcmolt_logger_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->stat_alarm_cleared))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->stat_alarm_raised))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_logger_auto_cfg_data_get_packed_length(const bcmolt_logger_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_logger_auto_cfg_data_unpack(bcmolt_logger_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->stat_alarm_cleared))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->stat_alarm_raised))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_logger_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_LOGGER_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_logger_auto_cfg_data_bounds_check(const bcmolt_logger_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_logger_auto_cfg_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_nni_key_set_default(bcmolt_nni_key *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_KEY_ID_PON_NI)) != 0)
+    {
+        this->pon_ni = (bcmolt_pon_ni) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_key_pack(const bcmolt_nni_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, (uint8_t) this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_nni_key_get_packed_length(const bcmolt_nni_key *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_NNI_KEY_ID_PON_NI)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_key_unpack(bcmolt_nni_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, (uint8_t *) &this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_key_bounds_check(const bcmolt_nni_key *this, bcmolt_presence_mask fields_present, bcmolt_nni_key_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_KEY_ID_PON_NI)) != 0)
+    {
+        if (this->pon_ni > (bcmolt_pon_ni) 15)
+        {
+            *failed_prop = BCMOLT_NNI_KEY_ID_PON_NI;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_nni_cfg_data_set_default(bcmolt_nni_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_REMOTE_LOOPBACK)) != 0)
+    {
+        this->remote_loopback = BCMOLT_CONTROL_STATE_DISABLE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_LINE_LOOPBACK)) != 0)
+    {
+        this->line_loopback = BCMOLT_CONTROL_STATE_DISABLE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_MAC_ADDRESS)) != 0)
+    {
+        bcmos_mac_address_init(&this->mac_address);
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_NNI_STATUS)) != 0)
+    {
+        this->nni_status.link_status = BCMOLT_TRIVALENT_FALSE;
+        this->nni_status.signal_detected = BCMOLT_TRIVALENT_FALSE;
+        this->nni_status.pmd_locked = BCMOLT_TRIVALENT_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_NNI_BACKUP_STATUS)) != 0)
+    {
+        this->nni_backup_status.link_status = BCMOLT_TRIVALENT_FALSE;
+        this->nni_backup_status.signal_detected = BCMOLT_TRIVALENT_FALSE;
+        this->nni_backup_status.pmd_locked = BCMOLT_TRIVALENT_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_ACTIVE_NNI)) != 0)
+    {
+        this->active_nni = BCMOLT_NNI_CONNECTION_PRIMARY;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_NNI_STATUS_POLLING_INTERVAL_MS)) != 0)
+    {
+        this->nni_status_polling_interval_ms = 50;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_AUTOSWITCH)) != 0)
+    {
+        this->autoswitch = BCMOS_TRUE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_FLOW_CONTROL)) != 0)
+    {
+        this->flow_control = BCMOLT_CONTROL_STATE_ENABLE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_cfg_data_pack(const bcmolt_nni_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_REMOTE_LOOPBACK)) != 0)
+    {
+        if (!bcmolt_control_state_pack(this->remote_loopback, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_LINE_LOOPBACK)) != 0)
+    {
+        if (!bcmolt_control_state_pack(this->line_loopback, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_MAC_ADDRESS)) != 0)
+    {
+        if (!bcmolt_buf_write_mac_address(buf, this->mac_address))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_NNI_STATUS)) != 0)
+    {
+        if (!bcmolt_nni_link_status_pack(&this->nni_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_NNI_BACKUP_STATUS)) != 0)
+    {
+        if (!bcmolt_nni_link_status_pack(&this->nni_backup_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_ACTIVE_NNI)) != 0)
+    {
+        if (!bcmolt_nni_connection_pack(this->active_nni, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_NNI_STATUS_POLLING_INTERVAL_MS)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->nni_status_polling_interval_ms))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_AUTOSWITCH)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->autoswitch))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_FLOW_CONTROL)) != 0)
+    {
+        if (!bcmolt_control_state_pack(this->flow_control, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_nni_cfg_data_get_packed_length(const bcmolt_nni_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_REMOTE_LOOPBACK)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_LINE_LOOPBACK)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_MAC_ADDRESS)) != 0)
+    {
+        count += 6;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_NNI_STATUS)) != 0)
+    {
+        count += 3;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_NNI_BACKUP_STATUS)) != 0)
+    {
+        count += 3;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_ACTIVE_NNI)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_NNI_STATUS_POLLING_INTERVAL_MS)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_AUTOSWITCH)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_FLOW_CONTROL)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_cfg_data_unpack(bcmolt_nni_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_REMOTE_LOOPBACK)) != 0)
+    {
+        if (!bcmolt_control_state_unpack(&this->remote_loopback, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_LINE_LOOPBACK)) != 0)
+    {
+        if (!bcmolt_control_state_unpack(&this->line_loopback, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_MAC_ADDRESS)) != 0)
+    {
+        if (!bcmolt_buf_read_mac_address(buf, &this->mac_address))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_NNI_STATUS)) != 0)
+    {
+        if (!bcmolt_nni_link_status_unpack(&this->nni_status, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_NNI_BACKUP_STATUS)) != 0)
+    {
+        if (!bcmolt_nni_link_status_unpack(&this->nni_backup_status, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_ACTIVE_NNI)) != 0)
+    {
+        if (!bcmolt_nni_connection_unpack(&this->active_nni, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_NNI_STATUS_POLLING_INTERVAL_MS)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->nni_status_polling_interval_ms))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_AUTOSWITCH)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->autoswitch))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_FLOW_CONTROL)) != 0)
+    {
+        if (!bcmolt_control_state_unpack(&this->flow_control, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_REMOTE_LOOPBACK)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_LINE_LOOPBACK)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_MAC_ADDRESS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 6))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_NNI_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 3))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_NNI_BACKUP_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 3))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_ACTIVE_NNI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_NNI_STATUS_POLLING_INTERVAL_MS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_AUTOSWITCH)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_FLOW_CONTROL)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_cfg_data_bounds_check(const bcmolt_nni_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_nni_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_REMOTE_LOOPBACK)) != 0)
+    {
+        switch (this->remote_loopback)
+        {
+            case BCMOLT_CONTROL_STATE_DISABLE:
+                break;
+            case BCMOLT_CONTROL_STATE_ENABLE:
+                break;
+            default:
+                *failed_prop = BCMOLT_NNI_CFG_ID_REMOTE_LOOPBACK;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_LINE_LOOPBACK)) != 0)
+    {
+        switch (this->line_loopback)
+        {
+            case BCMOLT_CONTROL_STATE_DISABLE:
+                break;
+            case BCMOLT_CONTROL_STATE_ENABLE:
+                break;
+            default:
+                *failed_prop = BCMOLT_NNI_CFG_ID_LINE_LOOPBACK;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_NNI_STATUS)) != 0)
+    {
+        if (!bcmolt_nni_link_status_bounds_check(&this->nni_status))
+        {
+            *failed_prop = BCMOLT_NNI_CFG_ID_NNI_STATUS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_NNI_BACKUP_STATUS)) != 0)
+    {
+        if (!bcmolt_nni_link_status_bounds_check(&this->nni_backup_status))
+        {
+            *failed_prop = BCMOLT_NNI_CFG_ID_NNI_BACKUP_STATUS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_ACTIVE_NNI)) != 0)
+    {
+        switch (this->active_nni)
+        {
+            case BCMOLT_NNI_CONNECTION_PRIMARY:
+                break;
+            case BCMOLT_NNI_CONNECTION_BACKUP:
+                break;
+            default:
+                *failed_prop = BCMOLT_NNI_CFG_ID_ACTIVE_NNI;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_NNI_STATUS_POLLING_INTERVAL_MS)) != 0)
+    {
+        if (this->nni_status_polling_interval_ms > 3600000UL)
+        {
+            *failed_prop = BCMOLT_NNI_CFG_ID_NNI_STATUS_POLLING_INTERVAL_MS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_CFG_ID_FLOW_CONTROL)) != 0)
+    {
+        switch (this->flow_control)
+        {
+            case BCMOLT_CONTROL_STATE_DISABLE:
+                break;
+            case BCMOLT_CONTROL_STATE_ENABLE:
+                break;
+            default:
+                *failed_prop = BCMOLT_NNI_CFG_ID_FLOW_CONTROL;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_nni_stat_data_set_default(bcmolt_nni_stat_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_64)) != 0)
+    {
+        this->rx_frames_64 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_65_127)) != 0)
+    {
+        this->rx_frames_65_127 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_128_255)) != 0)
+    {
+        this->rx_frames_128_255 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_256_511)) != 0)
+    {
+        this->rx_frames_256_511 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_512_1023)) != 0)
+    {
+        this->rx_frames_512_1023 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_1024_1518)) != 0)
+    {
+        this->rx_frames_1024_1518 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_1519_2047)) != 0)
+    {
+        this->rx_frames_1519_2047 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_2048_4095)) != 0)
+    {
+        this->rx_frames_2048_4095 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_4096_9216)) != 0)
+    {
+        this->rx_frames_4096_9216 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_9217_16383)) != 0)
+    {
+        this->rx_frames_9217_16383 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES)) != 0)
+    {
+        this->rx_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_BYTES)) != 0)
+    {
+        this->rx_bytes = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_GOOD_FRAMES)) != 0)
+    {
+        this->rx_good_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_UNICAST_FRAMES)) != 0)
+    {
+        this->rx_unicast_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_MULTICAST_FRAMES)) != 0)
+    {
+        this->rx_multicast_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_BROADCAST_FRAMES)) != 0)
+    {
+        this->rx_broadcast_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FCS_ERRORS)) != 0)
+    {
+        this->rx_fcs_errors = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_CONTROL_FRAMES)) != 0)
+    {
+        this->rx_control_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_PAUSE_FRAMES)) != 0)
+    {
+        this->rx_pause_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_PFC_FRAMES)) != 0)
+    {
+        this->rx_pfc_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_UNSUPPORTED_OPCODE)) != 0)
+    {
+        this->rx_unsupported_opcode = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_UNSUPPORTED_DA)) != 0)
+    {
+        this->rx_unsupported_da = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_ALIGNMENT_ERRORS)) != 0)
+    {
+        this->rx_alignment_errors = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_LENGTH_OUT_OF_RANGE)) != 0)
+    {
+        this->rx_length_out_of_range = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_CODE_ERRORS)) != 0)
+    {
+        this->rx_code_errors = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_OVERSIZED_FRAMES)) != 0)
+    {
+        this->rx_oversized_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_JABBER_FRAMES)) != 0)
+    {
+        this->rx_jabber_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_MTU_CHECK_ERRORS)) != 0)
+    {
+        this->rx_mtu_check_errors = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_PROMISCUOUS_FRAMES)) != 0)
+    {
+        this->rx_promiscuous_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_VLAN_FRAMES)) != 0)
+    {
+        this->rx_vlan_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_DOUBLE_VLAN_FRAMES)) != 0)
+    {
+        this->rx_double_vlan_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_TRUNCATED_FRAMES)) != 0)
+    {
+        this->rx_truncated_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_UNDERSIZE_FRAMES)) != 0)
+    {
+        this->rx_undersize_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAGMENTED_FRAMES)) != 0)
+    {
+        this->rx_fragmented_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_RUNT_FRAMES)) != 0)
+    {
+        this->rx_runt_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_64)) != 0)
+    {
+        this->tx_frames_64 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_65_127)) != 0)
+    {
+        this->tx_frames_65_127 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_128_255)) != 0)
+    {
+        this->tx_frames_128_255 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_256_511)) != 0)
+    {
+        this->tx_frames_256_511 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_512_1023)) != 0)
+    {
+        this->tx_frames_512_1023 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_1024_1518)) != 0)
+    {
+        this->tx_frames_1024_1518 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_1519_2047)) != 0)
+    {
+        this->tx_frames_1519_2047 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_2048_4095)) != 0)
+    {
+        this->tx_frames_2048_4095 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_4096_9216)) != 0)
+    {
+        this->tx_frames_4096_9216 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_9217_16383)) != 0)
+    {
+        this->tx_frames_9217_16383 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES)) != 0)
+    {
+        this->tx_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_BYTES)) != 0)
+    {
+        this->tx_bytes = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_GOOD_FRAMES)) != 0)
+    {
+        this->tx_good_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_UNICAST_FRAMES)) != 0)
+    {
+        this->tx_unicast_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_MULTICAST_FRAMES)) != 0)
+    {
+        this->tx_multicast_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_BROADCAST_FRAMES)) != 0)
+    {
+        this->tx_broadcast_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_PAUSE_FRAMES)) != 0)
+    {
+        this->tx_pause_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_PFC_FRAMES)) != 0)
+    {
+        this->tx_pfc_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_JABBER_FRAMES)) != 0)
+    {
+        this->tx_jabber_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FCS_ERRORS)) != 0)
+    {
+        this->tx_fcs_errors = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_CONTROL_FRAMES)) != 0)
+    {
+        this->tx_control_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_OVERSIZE_FRAMES)) != 0)
+    {
+        this->tx_oversize_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAGMENTED_FRAMES)) != 0)
+    {
+        this->tx_fragmented_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_ERROR_FRAMES)) != 0)
+    {
+        this->tx_error_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_VLAN_FRAMES)) != 0)
+    {
+        this->tx_vlan_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_DOUBLE_VLAN_FRAMES)) != 0)
+    {
+        this->tx_double_vlan_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_RUNT_FRAMES)) != 0)
+    {
+        this->tx_runt_frames = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_UNDERRUN_FRAMES)) != 0)
+    {
+        this->tx_underrun_frames = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_stat_data_pack(const bcmolt_nni_stat_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_64)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_frames_64))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_65_127)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_frames_65_127))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_128_255)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_frames_128_255))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_256_511)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_frames_256_511))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_512_1023)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_frames_512_1023))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_1024_1518)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_frames_1024_1518))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_1519_2047)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_frames_1519_2047))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_2048_4095)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_frames_2048_4095))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_4096_9216)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_frames_4096_9216))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_9217_16383)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_frames_9217_16383))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_GOOD_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_good_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_UNICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_unicast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_MULTICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_multicast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_BROADCAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_broadcast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FCS_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_fcs_errors))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_CONTROL_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_control_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_PAUSE_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_pause_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_PFC_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_pfc_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_UNSUPPORTED_OPCODE)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_unsupported_opcode))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_UNSUPPORTED_DA)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_unsupported_da))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_ALIGNMENT_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_alignment_errors))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_LENGTH_OUT_OF_RANGE)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_length_out_of_range))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_CODE_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_code_errors))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_OVERSIZED_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_oversized_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_JABBER_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_jabber_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_MTU_CHECK_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_mtu_check_errors))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_PROMISCUOUS_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_promiscuous_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_VLAN_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_vlan_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_DOUBLE_VLAN_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_double_vlan_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_TRUNCATED_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_truncated_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_UNDERSIZE_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_undersize_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAGMENTED_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_fragmented_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_RUNT_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_runt_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_64)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_frames_64))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_65_127)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_frames_65_127))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_128_255)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_frames_128_255))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_256_511)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_frames_256_511))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_512_1023)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_frames_512_1023))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_1024_1518)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_frames_1024_1518))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_1519_2047)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_frames_1519_2047))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_2048_4095)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_frames_2048_4095))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_4096_9216)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_frames_4096_9216))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_9217_16383)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_frames_9217_16383))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_GOOD_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_good_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_UNICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_unicast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_MULTICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_multicast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_BROADCAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_broadcast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_PAUSE_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_pause_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_PFC_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_pfc_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_JABBER_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_jabber_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FCS_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_fcs_errors))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_CONTROL_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_control_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_OVERSIZE_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_oversize_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAGMENTED_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_fragmented_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_ERROR_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_error_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_VLAN_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_vlan_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_DOUBLE_VLAN_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_double_vlan_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_RUNT_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_runt_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_UNDERRUN_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_underrun_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_nni_stat_data_get_packed_length(const bcmolt_nni_stat_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_64)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_65_127)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_128_255)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_256_511)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_512_1023)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_1024_1518)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_1519_2047)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_2048_4095)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_4096_9216)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_9217_16383)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_BYTES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_GOOD_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_UNICAST_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_MULTICAST_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_BROADCAST_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FCS_ERRORS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_CONTROL_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_PAUSE_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_PFC_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_UNSUPPORTED_OPCODE)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_UNSUPPORTED_DA)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_ALIGNMENT_ERRORS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_LENGTH_OUT_OF_RANGE)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_CODE_ERRORS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_OVERSIZED_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_JABBER_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_MTU_CHECK_ERRORS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_PROMISCUOUS_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_VLAN_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_DOUBLE_VLAN_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_TRUNCATED_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_UNDERSIZE_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAGMENTED_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_RUNT_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_64)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_65_127)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_128_255)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_256_511)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_512_1023)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_1024_1518)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_1519_2047)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_2048_4095)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_4096_9216)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_9217_16383)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_BYTES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_GOOD_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_UNICAST_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_MULTICAST_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_BROADCAST_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_PAUSE_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_PFC_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_JABBER_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FCS_ERRORS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_CONTROL_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_OVERSIZE_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAGMENTED_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_ERROR_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_VLAN_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_DOUBLE_VLAN_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_RUNT_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_UNDERRUN_FRAMES)) != 0)
+    {
+        count += 8;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_stat_data_unpack(bcmolt_nni_stat_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_64)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_frames_64))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_65_127)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_frames_65_127))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_128_255)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_frames_128_255))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_256_511)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_frames_256_511))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_512_1023)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_frames_512_1023))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_1024_1518)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_frames_1024_1518))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_1519_2047)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_frames_1519_2047))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_2048_4095)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_frames_2048_4095))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_4096_9216)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_frames_4096_9216))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_9217_16383)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_frames_9217_16383))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_GOOD_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_good_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_UNICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_unicast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_MULTICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_multicast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_BROADCAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_broadcast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FCS_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_fcs_errors))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_CONTROL_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_control_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_PAUSE_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_pause_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_PFC_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_pfc_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_UNSUPPORTED_OPCODE)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_unsupported_opcode))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_UNSUPPORTED_DA)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_unsupported_da))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_ALIGNMENT_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_alignment_errors))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_LENGTH_OUT_OF_RANGE)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_length_out_of_range))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_CODE_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_code_errors))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_OVERSIZED_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_oversized_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_JABBER_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_jabber_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_MTU_CHECK_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_mtu_check_errors))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_PROMISCUOUS_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_promiscuous_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_VLAN_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_vlan_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_DOUBLE_VLAN_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_double_vlan_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_TRUNCATED_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_truncated_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_UNDERSIZE_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_undersize_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAGMENTED_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_fragmented_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_RUNT_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_runt_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_64)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_frames_64))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_65_127)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_frames_65_127))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_128_255)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_frames_128_255))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_256_511)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_frames_256_511))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_512_1023)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_frames_512_1023))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_1024_1518)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_frames_1024_1518))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_1519_2047)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_frames_1519_2047))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_2048_4095)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_frames_2048_4095))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_4096_9216)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_frames_4096_9216))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_9217_16383)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_frames_9217_16383))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_GOOD_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_good_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_UNICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_unicast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_MULTICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_multicast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_BROADCAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_broadcast_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_PAUSE_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_pause_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_PFC_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_pfc_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_JABBER_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_jabber_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FCS_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_fcs_errors))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_CONTROL_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_control_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_OVERSIZE_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_oversize_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAGMENTED_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_fragmented_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_ERROR_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_error_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_VLAN_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_vlan_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_DOUBLE_VLAN_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_double_vlan_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_RUNT_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_runt_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_UNDERRUN_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_underrun_frames))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_stat_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_64)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_65_127)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_128_255)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_256_511)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_512_1023)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_1024_1518)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_1519_2047)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_2048_4095)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_4096_9216)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES_9217_16383)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_GOOD_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_UNICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_MULTICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_BROADCAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FCS_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_CONTROL_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_PAUSE_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_PFC_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_UNSUPPORTED_OPCODE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_UNSUPPORTED_DA)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_ALIGNMENT_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_LENGTH_OUT_OF_RANGE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_CODE_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_OVERSIZED_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_JABBER_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_MTU_CHECK_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_PROMISCUOUS_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_VLAN_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_DOUBLE_VLAN_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_TRUNCATED_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_UNDERSIZE_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_FRAGMENTED_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_RX_RUNT_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_64)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_65_127)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_128_255)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_256_511)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_512_1023)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_1024_1518)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_1519_2047)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_2048_4095)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_4096_9216)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES_9217_16383)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_GOOD_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_UNICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_MULTICAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_BROADCAST_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_PAUSE_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_PFC_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_JABBER_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FCS_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_CONTROL_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_OVERSIZE_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_FRAGMENTED_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_ERROR_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_VLAN_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_DOUBLE_VLAN_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_RUNT_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ID_TX_UNDERRUN_FRAMES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_stat_data_bounds_check(const bcmolt_nni_stat_data *this, bcmolt_presence_mask fields_present, bcmolt_nni_stat_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_nni_stat_cfg_data_set_default(bcmolt_nni_stat_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_CFG_ID_CFG)) != 0)
+    {
+        this->cfg.trigger.type = BCMOLT_STAT_CONDITION_TYPE_NONE;
+        this->cfg.soak.active_soak_time = 0;
+        this->cfg.soak.clear_soak_time = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_stat_cfg_data_pack(const bcmolt_nni_stat_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_pack(&this->cfg, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_nni_stat_cfg_data_get_packed_length(const bcmolt_nni_stat_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_CFG_ID_CFG)) != 0)
+    {
+        count += bcmolt_stat_alarm_config_get_packed_length(&this->cfg);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_stat_cfg_data_unpack(bcmolt_nni_stat_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_unpack(&this->cfg, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_stat_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_stat_cfg_data_bounds_check(const bcmolt_nni_stat_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_nni_stat_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_bounds_check(&this->cfg))
+        {
+            *failed_prop = BCMOLT_NNI_STAT_CFG_ID_CFG;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_nni_stat_alarm_cleared_data_set_default(bcmolt_nni_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        this->stat = BCMOLT_NNI_STAT_ID_RX_FRAMES_64;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_stat_alarm_cleared_data_pack(const bcmolt_nni_stat_alarm_cleared_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_nni_stat_id_pack(this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_nni_stat_alarm_cleared_data_get_packed_length(const bcmolt_nni_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_stat_alarm_cleared_data_unpack(bcmolt_nni_stat_alarm_cleared_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_nni_stat_id_unpack(&this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_stat_alarm_cleared_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_stat_alarm_cleared_data_bounds_check(const bcmolt_nni_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present, bcmolt_nni_stat_alarm_cleared_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        switch (this->stat)
+        {
+            case BCMOLT_NNI_STAT_ID_RX_FRAMES_64:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_FRAMES_65_127:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_FRAMES_128_255:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_FRAMES_256_511:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_FRAMES_512_1023:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_FRAMES_1024_1518:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_FRAMES_1519_2047:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_FRAMES_2048_4095:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_FRAMES_4096_9216:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_FRAMES_9217_16383:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_BYTES:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_GOOD_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_UNICAST_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_MULTICAST_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_BROADCAST_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_FCS_ERRORS:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_CONTROL_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_PAUSE_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_PFC_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_UNSUPPORTED_OPCODE:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_UNSUPPORTED_DA:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_ALIGNMENT_ERRORS:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_LENGTH_OUT_OF_RANGE:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_CODE_ERRORS:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_OVERSIZED_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_JABBER_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_MTU_CHECK_ERRORS:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_PROMISCUOUS_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_VLAN_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_DOUBLE_VLAN_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_TRUNCATED_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_UNDERSIZE_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_FRAGMENTED_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_RUNT_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_FRAMES_64:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_FRAMES_65_127:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_FRAMES_128_255:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_FRAMES_256_511:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_FRAMES_512_1023:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_FRAMES_1024_1518:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_FRAMES_1519_2047:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_FRAMES_2048_4095:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_FRAMES_4096_9216:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_FRAMES_9217_16383:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_BYTES:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_GOOD_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_UNICAST_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_MULTICAST_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_BROADCAST_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_PAUSE_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_PFC_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_JABBER_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_FCS_ERRORS:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_CONTROL_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_OVERSIZE_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_FRAGMENTED_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_ERROR_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_VLAN_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_DOUBLE_VLAN_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_RUNT_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_UNDERRUN_FRAMES:
+                break;
+            default:
+                *failed_prop = BCMOLT_NNI_STAT_ALARM_CLEARED_ID_STAT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_nni_stat_alarm_raised_data_set_default(bcmolt_nni_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        this->stat = BCMOLT_NNI_STAT_ID_RX_FRAMES_64;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_stat_alarm_raised_data_pack(const bcmolt_nni_stat_alarm_raised_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_nni_stat_id_pack(this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_nni_stat_alarm_raised_data_get_packed_length(const bcmolt_nni_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_stat_alarm_raised_data_unpack(bcmolt_nni_stat_alarm_raised_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_nni_stat_id_unpack(&this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_stat_alarm_raised_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_stat_alarm_raised_data_bounds_check(const bcmolt_nni_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present, bcmolt_nni_stat_alarm_raised_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        switch (this->stat)
+        {
+            case BCMOLT_NNI_STAT_ID_RX_FRAMES_64:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_FRAMES_65_127:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_FRAMES_128_255:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_FRAMES_256_511:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_FRAMES_512_1023:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_FRAMES_1024_1518:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_FRAMES_1519_2047:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_FRAMES_2048_4095:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_FRAMES_4096_9216:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_FRAMES_9217_16383:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_BYTES:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_GOOD_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_UNICAST_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_MULTICAST_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_BROADCAST_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_FCS_ERRORS:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_CONTROL_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_PAUSE_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_PFC_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_UNSUPPORTED_OPCODE:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_UNSUPPORTED_DA:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_ALIGNMENT_ERRORS:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_LENGTH_OUT_OF_RANGE:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_CODE_ERRORS:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_OVERSIZED_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_JABBER_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_MTU_CHECK_ERRORS:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_PROMISCUOUS_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_VLAN_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_DOUBLE_VLAN_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_TRUNCATED_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_UNDERSIZE_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_FRAGMENTED_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_RX_RUNT_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_FRAMES_64:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_FRAMES_65_127:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_FRAMES_128_255:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_FRAMES_256_511:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_FRAMES_512_1023:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_FRAMES_1024_1518:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_FRAMES_1519_2047:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_FRAMES_2048_4095:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_FRAMES_4096_9216:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_FRAMES_9217_16383:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_BYTES:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_GOOD_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_UNICAST_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_MULTICAST_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_BROADCAST_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_PAUSE_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_PFC_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_JABBER_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_FCS_ERRORS:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_CONTROL_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_OVERSIZE_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_FRAGMENTED_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_ERROR_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_VLAN_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_DOUBLE_VLAN_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_RUNT_FRAMES:
+                break;
+            case BCMOLT_NNI_STAT_ID_TX_UNDERRUN_FRAMES:
+                break;
+            default:
+                *failed_prop = BCMOLT_NNI_STAT_ALARM_RAISED_ID_STAT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_nni_status_changed_data_set_default(bcmolt_nni_status_changed_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_STATUS_CHANGED_ID_NEW_STATUS)) != 0)
+    {
+        this->new_status = BCMOLT_STATUS_OFF;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STATUS_CHANGED_ID_LINK)) != 0)
+    {
+        this->link = BCMOLT_NNI_CONNECTION_PRIMARY;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STATUS_CHANGED_ID_PREVIOUS_ACTIVE)) != 0)
+    {
+        this->previous_active = BCMOLT_NNI_CONNECTION_PRIMARY;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STATUS_CHANGED_ID_NEW_ACTIVE)) != 0)
+    {
+        this->new_active = BCMOLT_NNI_CONNECTION_PRIMARY;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_status_changed_data_pack(const bcmolt_nni_status_changed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_STATUS_CHANGED_ID_NEW_STATUS)) != 0)
+    {
+        if (!bcmolt_status_pack(this->new_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STATUS_CHANGED_ID_LINK)) != 0)
+    {
+        if (!bcmolt_nni_connection_pack(this->link, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STATUS_CHANGED_ID_PREVIOUS_ACTIVE)) != 0)
+    {
+        if (!bcmolt_nni_connection_pack(this->previous_active, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STATUS_CHANGED_ID_NEW_ACTIVE)) != 0)
+    {
+        if (!bcmolt_nni_connection_pack(this->new_active, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_nni_status_changed_data_get_packed_length(const bcmolt_nni_status_changed_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_NNI_STATUS_CHANGED_ID_NEW_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STATUS_CHANGED_ID_LINK)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STATUS_CHANGED_ID_PREVIOUS_ACTIVE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STATUS_CHANGED_ID_NEW_ACTIVE)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_status_changed_data_unpack(bcmolt_nni_status_changed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_STATUS_CHANGED_ID_NEW_STATUS)) != 0)
+    {
+        if (!bcmolt_status_unpack(&this->new_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STATUS_CHANGED_ID_LINK)) != 0)
+    {
+        if (!bcmolt_nni_connection_unpack(&this->link, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STATUS_CHANGED_ID_PREVIOUS_ACTIVE)) != 0)
+    {
+        if (!bcmolt_nni_connection_unpack(&this->previous_active, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STATUS_CHANGED_ID_NEW_ACTIVE)) != 0)
+    {
+        if (!bcmolt_nni_connection_unpack(&this->new_active, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_status_changed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_STATUS_CHANGED_ID_NEW_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STATUS_CHANGED_ID_LINK)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STATUS_CHANGED_ID_PREVIOUS_ACTIVE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STATUS_CHANGED_ID_NEW_ACTIVE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_status_changed_data_bounds_check(const bcmolt_nni_status_changed_data *this, bcmolt_presence_mask fields_present, bcmolt_nni_status_changed_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_STATUS_CHANGED_ID_NEW_STATUS)) != 0)
+    {
+        switch (this->new_status)
+        {
+            case BCMOLT_STATUS_OFF:
+                break;
+            case BCMOLT_STATUS_ON:
+                break;
+            case BCMOLT_STATUS_NO_CHANGE:
+                break;
+            default:
+                *failed_prop = BCMOLT_NNI_STATUS_CHANGED_ID_NEW_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STATUS_CHANGED_ID_LINK)) != 0)
+    {
+        switch (this->link)
+        {
+            case BCMOLT_NNI_CONNECTION_PRIMARY:
+                break;
+            case BCMOLT_NNI_CONNECTION_BACKUP:
+                break;
+            default:
+                *failed_prop = BCMOLT_NNI_STATUS_CHANGED_ID_LINK;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STATUS_CHANGED_ID_PREVIOUS_ACTIVE)) != 0)
+    {
+        switch (this->previous_active)
+        {
+            case BCMOLT_NNI_CONNECTION_PRIMARY:
+                break;
+            case BCMOLT_NNI_CONNECTION_BACKUP:
+                break;
+            default:
+                *failed_prop = BCMOLT_NNI_STATUS_CHANGED_ID_PREVIOUS_ACTIVE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_STATUS_CHANGED_ID_NEW_ACTIVE)) != 0)
+    {
+        switch (this->new_active)
+        {
+            case BCMOLT_NNI_CONNECTION_PRIMARY:
+                break;
+            case BCMOLT_NNI_CONNECTION_BACKUP:
+                break;
+            default:
+                *failed_prop = BCMOLT_NNI_STATUS_CHANGED_ID_NEW_ACTIVE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_nni_auto_cfg_data_set_default(bcmolt_nni_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        this->stat_alarm_cleared = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        this->stat_alarm_raised = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_AUTO_CFG_ID_STATUS_CHANGED)) != 0)
+    {
+        this->status_changed = BCMOS_FALSE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_auto_cfg_data_pack(const bcmolt_nni_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->stat_alarm_cleared))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->stat_alarm_raised))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_AUTO_CFG_ID_STATUS_CHANGED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->status_changed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_nni_auto_cfg_data_get_packed_length(const bcmolt_nni_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_NNI_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_AUTO_CFG_ID_STATUS_CHANGED)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_auto_cfg_data_unpack(bcmolt_nni_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->stat_alarm_cleared))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->stat_alarm_raised))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_AUTO_CFG_ID_STATUS_CHANGED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->status_changed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_AUTO_CFG_ID_STATUS_CHANGED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_auto_cfg_data_bounds_check(const bcmolt_nni_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_nni_auto_cfg_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_nni_serdes_key_set_default(bcmolt_nni_serdes_key *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_KEY_ID_PON_NI)) != 0)
+    {
+        this->pon_ni = (bcmolt_pon_ni) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_KEY_ID_INSTANCE)) != 0)
+    {
+        this->instance = BCMOLT_SERDES_INSTANCE_INSTANCE_0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_serdes_key_pack(const bcmolt_nni_serdes_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, (uint8_t) this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_KEY_ID_INSTANCE)) != 0)
+    {
+        if (!bcmolt_serdes_instance_pack(this->instance, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_nni_serdes_key_get_packed_length(const bcmolt_nni_serdes_key *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_KEY_ID_PON_NI)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_KEY_ID_INSTANCE)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_serdes_key_unpack(bcmolt_nni_serdes_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, (uint8_t *) &this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_KEY_ID_INSTANCE)) != 0)
+    {
+        if (!bcmolt_serdes_instance_unpack(&this->instance, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_serdes_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_KEY_ID_INSTANCE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_serdes_key_bounds_check(const bcmolt_nni_serdes_key *this, bcmolt_presence_mask fields_present, bcmolt_nni_serdes_key_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_KEY_ID_PON_NI)) != 0)
+    {
+        if (this->pon_ni > (bcmolt_pon_ni) 15)
+        {
+            *failed_prop = BCMOLT_NNI_SERDES_KEY_ID_PON_NI;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_KEY_ID_INSTANCE)) != 0)
+    {
+        switch (this->instance)
+        {
+            case BCMOLT_SERDES_INSTANCE_INSTANCE_0:
+                break;
+            case BCMOLT_SERDES_INSTANCE_INSTANCE_1:
+                break;
+            default:
+                *failed_prop = BCMOLT_NNI_SERDES_KEY_ID_INSTANCE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_nni_serdes_cfg_data_set_default(bcmolt_nni_serdes_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_VGA)) != 0)
+    {
+        this->rx_vga = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_PF)) != 0)
+    {
+        this->rx_pf = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_LFPF)) != 0)
+    {
+        this->rx_lfpf = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_DFE1)) != 0)
+    {
+        this->rx_dfe1 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_DFE2)) != 0)
+    {
+        this->rx_dfe2 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_DFE3)) != 0)
+    {
+        this->rx_dfe3 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_DFE4)) != 0)
+    {
+        this->rx_dfe4 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_DFE5)) != 0)
+    {
+        this->rx_dfe5 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_TX_PRE)) != 0)
+    {
+        this->tx_pre = 12;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_TX_MAIN)) != 0)
+    {
+        this->tx_main = 102;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_TX_POST1)) != 0)
+    {
+        this->tx_post1 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_TX_POST2)) != 0)
+    {
+        this->tx_post2 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_TX_POST3)) != 0)
+    {
+        this->tx_post3 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_TX_AMP)) != 0)
+    {
+        this->tx_amp = 12;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_serdes_cfg_data_pack(const bcmolt_nni_serdes_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_VGA)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->rx_vga))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_PF)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->rx_pf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_LFPF)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->rx_lfpf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_DFE1)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->rx_dfe1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_DFE2)) != 0)
+    {
+        if (!bcmolt_buf_write_s8(buf, this->rx_dfe2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_DFE3)) != 0)
+    {
+        if (!bcmolt_buf_write_s8(buf, this->rx_dfe3))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_DFE4)) != 0)
+    {
+        if (!bcmolt_buf_write_s8(buf, this->rx_dfe4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_DFE5)) != 0)
+    {
+        if (!bcmolt_buf_write_s8(buf, this->rx_dfe5))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_TX_PRE)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->tx_pre))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_TX_MAIN)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->tx_main))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_TX_POST1)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->tx_post1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_TX_POST2)) != 0)
+    {
+        if (!bcmolt_buf_write_s8(buf, this->tx_post2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_TX_POST3)) != 0)
+    {
+        if (!bcmolt_buf_write_s8(buf, this->tx_post3))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_TX_AMP)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->tx_amp))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_nni_serdes_cfg_data_get_packed_length(const bcmolt_nni_serdes_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_VGA)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_PF)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_LFPF)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_DFE1)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_DFE2)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_DFE3)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_DFE4)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_DFE5)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_TX_PRE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_TX_MAIN)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_TX_POST1)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_TX_POST2)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_TX_POST3)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_TX_AMP)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_serdes_cfg_data_unpack(bcmolt_nni_serdes_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_VGA)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->rx_vga))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_PF)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->rx_pf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_LFPF)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->rx_lfpf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_DFE1)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->rx_dfe1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_DFE2)) != 0)
+    {
+        if (!bcmolt_buf_read_s8(buf, &this->rx_dfe2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_DFE3)) != 0)
+    {
+        if (!bcmolt_buf_read_s8(buf, &this->rx_dfe3))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_DFE4)) != 0)
+    {
+        if (!bcmolt_buf_read_s8(buf, &this->rx_dfe4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_DFE5)) != 0)
+    {
+        if (!bcmolt_buf_read_s8(buf, &this->rx_dfe5))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_TX_PRE)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->tx_pre))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_TX_MAIN)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->tx_main))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_TX_POST1)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->tx_post1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_TX_POST2)) != 0)
+    {
+        if (!bcmolt_buf_read_s8(buf, &this->tx_post2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_TX_POST3)) != 0)
+    {
+        if (!bcmolt_buf_read_s8(buf, &this->tx_post3))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_TX_AMP)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->tx_amp))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_serdes_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_VGA)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_PF)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_LFPF)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_DFE1)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_DFE2)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_DFE3)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_DFE4)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_DFE5)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_TX_PRE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_TX_MAIN)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_TX_POST1)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_TX_POST2)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_TX_POST3)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_TX_AMP)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_nni_serdes_cfg_data_bounds_check(const bcmolt_nni_serdes_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_nni_serdes_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_VGA)) != 0)
+    {
+        if (this->rx_vga > 45)
+        {
+            *failed_prop = BCMOLT_NNI_SERDES_CFG_ID_RX_VGA;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_PF)) != 0)
+    {
+        if (this->rx_pf > 15)
+        {
+            *failed_prop = BCMOLT_NNI_SERDES_CFG_ID_RX_PF;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_LFPF)) != 0)
+    {
+        if (this->rx_lfpf > 7)
+        {
+            *failed_prop = BCMOLT_NNI_SERDES_CFG_ID_RX_LFPF;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_DFE1)) != 0)
+    {
+        if (this->rx_dfe1 > 63)
+        {
+            *failed_prop = BCMOLT_NNI_SERDES_CFG_ID_RX_DFE1;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_DFE2)) != 0)
+    {
+        if (this->rx_dfe2 < -31)
+        {
+            *failed_prop = BCMOLT_NNI_SERDES_CFG_ID_RX_DFE2;
+            return BCMOS_FALSE;
+        }
+
+        if (this->rx_dfe2 > 31)
+        {
+            *failed_prop = BCMOLT_NNI_SERDES_CFG_ID_RX_DFE2;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_DFE3)) != 0)
+    {
+        if (this->rx_dfe3 < -31)
+        {
+            *failed_prop = BCMOLT_NNI_SERDES_CFG_ID_RX_DFE3;
+            return BCMOS_FALSE;
+        }
+
+        if (this->rx_dfe3 > 31)
+        {
+            *failed_prop = BCMOLT_NNI_SERDES_CFG_ID_RX_DFE3;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_DFE4)) != 0)
+    {
+        if (this->rx_dfe4 < -15)
+        {
+            *failed_prop = BCMOLT_NNI_SERDES_CFG_ID_RX_DFE4;
+            return BCMOS_FALSE;
+        }
+
+        if (this->rx_dfe4 > 15)
+        {
+            *failed_prop = BCMOLT_NNI_SERDES_CFG_ID_RX_DFE4;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_RX_DFE5)) != 0)
+    {
+        if (this->rx_dfe5 < -15)
+        {
+            *failed_prop = BCMOLT_NNI_SERDES_CFG_ID_RX_DFE5;
+            return BCMOS_FALSE;
+        }
+
+        if (this->rx_dfe5 > 15)
+        {
+            *failed_prop = BCMOLT_NNI_SERDES_CFG_ID_RX_DFE5;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_TX_PRE)) != 0)
+    {
+        if (this->tx_pre > 31)
+        {
+            *failed_prop = BCMOLT_NNI_SERDES_CFG_ID_TX_PRE;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_TX_MAIN)) != 0)
+    {
+        if (this->tx_main > 112)
+        {
+            *failed_prop = BCMOLT_NNI_SERDES_CFG_ID_TX_MAIN;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_TX_POST1)) != 0)
+    {
+        if (this->tx_post1 > 63)
+        {
+            *failed_prop = BCMOLT_NNI_SERDES_CFG_ID_TX_POST1;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_TX_POST2)) != 0)
+    {
+        if (this->tx_post2 < -15)
+        {
+            *failed_prop = BCMOLT_NNI_SERDES_CFG_ID_TX_POST2;
+            return BCMOS_FALSE;
+        }
+
+        if (this->tx_post2 > 15)
+        {
+            *failed_prop = BCMOLT_NNI_SERDES_CFG_ID_TX_POST2;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_TX_POST3)) != 0)
+    {
+        if (this->tx_post3 < -7)
+        {
+            *failed_prop = BCMOLT_NNI_SERDES_CFG_ID_TX_POST3;
+            return BCMOS_FALSE;
+        }
+
+        if (this->tx_post3 > 7)
+        {
+            *failed_prop = BCMOLT_NNI_SERDES_CFG_ID_TX_POST3;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_NNI_SERDES_CFG_ID_TX_AMP)) != 0)
+    {
+        if (this->tx_amp > 15)
+        {
+            *failed_prop = BCMOLT_NNI_SERDES_CFG_ID_TX_AMP;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_software_error_key_set_default(bcmolt_software_error_key *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_SOFTWARE_ERROR_KEY_ID_RESERVED)) != 0)
+    {
+        this->reserved = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_SOFTWARE_ERROR_KEY_ID_IDX)) != 0)
+    {
+        this->idx = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_software_error_key_pack(const bcmolt_software_error_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_SOFTWARE_ERROR_KEY_ID_RESERVED)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->reserved))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_SOFTWARE_ERROR_KEY_ID_IDX)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->idx))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_software_error_key_get_packed_length(const bcmolt_software_error_key *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_SOFTWARE_ERROR_KEY_ID_RESERVED)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_SOFTWARE_ERROR_KEY_ID_IDX)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_software_error_key_unpack(bcmolt_software_error_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_SOFTWARE_ERROR_KEY_ID_RESERVED)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->reserved))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_SOFTWARE_ERROR_KEY_ID_IDX)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->idx))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_software_error_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_SOFTWARE_ERROR_KEY_ID_RESERVED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_SOFTWARE_ERROR_KEY_ID_IDX)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_software_error_key_bounds_check(const bcmolt_software_error_key *this, bcmolt_presence_mask fields_present, bcmolt_software_error_key_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_software_error_cfg_data_set_default(bcmolt_software_error_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_SOFTWARE_ERROR_CFG_ID_ENTRY)) != 0)
+    {
+        this->entry.first_error_time_us = 0;
+        this->entry.last_error_time_us = 0;
+        this->entry.line_number = 0;
+        this->entry.error_counter = 0;
+        this->entry.instance = 0;
+        memset(this->entry.filename, 0, 64);
+        memset(this->entry.task_name, 0, 64);
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_software_error_cfg_data_pack(const bcmolt_software_error_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_SOFTWARE_ERROR_CFG_ID_ENTRY)) != 0)
+    {
+        if (!bcmolt_sw_error_pack(&this->entry, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_software_error_cfg_data_get_packed_length(const bcmolt_software_error_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_SOFTWARE_ERROR_CFG_ID_ENTRY)) != 0)
+    {
+        count += 156;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_software_error_cfg_data_unpack(bcmolt_software_error_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_SOFTWARE_ERROR_CFG_ID_ENTRY)) != 0)
+    {
+        if (!bcmolt_sw_error_unpack(&this->entry, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_software_error_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_SOFTWARE_ERROR_CFG_ID_ENTRY)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 156))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_software_error_cfg_data_bounds_check(const bcmolt_software_error_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_software_error_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_SOFTWARE_ERROR_CFG_ID_ENTRY)) != 0)
+    {
+        if (!bcmolt_sw_error_bounds_check(&this->entry))
+        {
+            *failed_prop = BCMOLT_SOFTWARE_ERROR_CFG_ID_ENTRY;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_trx_calibration_key_set_default(bcmolt_trx_calibration_key *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_KEY_ID_RESERVED)) != 0)
+    {
+        this->reserved = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_calibration_key_pack(const bcmolt_trx_calibration_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_KEY_ID_RESERVED)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->reserved))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_trx_calibration_key_get_packed_length(const bcmolt_trx_calibration_key *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_KEY_ID_RESERVED)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_calibration_key_unpack(bcmolt_trx_calibration_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_KEY_ID_RESERVED)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->reserved))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_calibration_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_KEY_ID_RESERVED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_calibration_key_bounds_check(const bcmolt_trx_calibration_key *this, bcmolt_presence_mask fields_present, bcmolt_trx_calibration_key_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_trx_calibration_capture_window_and_statistic_completed_data_set_default(bcmolt_trx_calibration_capture_window_and_statistic_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_DATA_WINDOW)) != 0)
+    {
+        this->data_window.len = 0;
+        this->data_window.val = NULL;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_STROBE_WINDOW)) != 0)
+    {
+        this->strobe_window.len = 0;
+        this->strobe_window.val = NULL;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_RISE_MIN_MIN)) != 0)
+    {
+        this->edge_rise_min_min = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_RISE_MIN_MAX)) != 0)
+    {
+        this->edge_rise_min_max = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_RISE_MAX_MIN)) != 0)
+    {
+        this->edge_rise_max_min = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_RISE_MAX_MAX)) != 0)
+    {
+        this->edge_rise_max_max = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_FALL_MIN_MIN)) != 0)
+    {
+        this->edge_fall_min_min = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_FALL_MIN_MAX)) != 0)
+    {
+        this->edge_fall_min_max = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_FALL_MAX_MIN)) != 0)
+    {
+        this->edge_fall_max_min = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_FALL_MAX_MAX)) != 0)
+    {
+        this->edge_fall_max_max = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_RESULT)) != 0)
+    {
+        this->result = BCMOLT_RESULT_SUCCESS;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_calibration_capture_window_and_statistic_completed_data_pack(const bcmolt_trx_calibration_capture_window_and_statistic_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_DATA_WINDOW)) != 0)
+    {
+        if (!bcmolt_u32_list_u32_max_500_hex_pack(&this->data_window, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_STROBE_WINDOW)) != 0)
+    {
+        if (!bcmolt_u32_list_u32_max_500_hex_pack(&this->strobe_window, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_RISE_MIN_MIN)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->edge_rise_min_min))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_RISE_MIN_MAX)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->edge_rise_min_max))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_RISE_MAX_MIN)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->edge_rise_max_min))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_RISE_MAX_MAX)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->edge_rise_max_max))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_FALL_MIN_MIN)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->edge_fall_min_min))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_FALL_MIN_MAX)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->edge_fall_min_max))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_FALL_MAX_MIN)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->edge_fall_max_min))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_FALL_MAX_MAX)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->edge_fall_max_max))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_RESULT)) != 0)
+    {
+        if (!bcmolt_result_pack(this->result, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_trx_calibration_capture_window_and_statistic_completed_data_get_packed_length(const bcmolt_trx_calibration_capture_window_and_statistic_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_DATA_WINDOW)) != 0)
+    {
+        count += bcmolt_u32_list_u32_max_500_hex_get_packed_length(&this->data_window);
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_STROBE_WINDOW)) != 0)
+    {
+        count += bcmolt_u32_list_u32_max_500_hex_get_packed_length(&this->strobe_window);
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_RISE_MIN_MIN)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_RISE_MIN_MAX)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_RISE_MAX_MIN)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_RISE_MAX_MAX)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_FALL_MIN_MIN)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_FALL_MIN_MAX)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_FALL_MAX_MIN)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_FALL_MAX_MAX)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_RESULT)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_calibration_capture_window_and_statistic_completed_data_unpack(bcmolt_trx_calibration_capture_window_and_statistic_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_DATA_WINDOW)) != 0)
+    {
+        if (!bcmolt_u32_list_u32_max_500_hex_unpack(&this->data_window, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_STROBE_WINDOW)) != 0)
+    {
+        if (!bcmolt_u32_list_u32_max_500_hex_unpack(&this->strobe_window, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_RISE_MIN_MIN)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->edge_rise_min_min))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_RISE_MIN_MAX)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->edge_rise_min_max))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_RISE_MAX_MIN)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->edge_rise_max_min))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_RISE_MAX_MAX)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->edge_rise_max_max))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_FALL_MIN_MIN)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->edge_fall_min_min))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_FALL_MIN_MAX)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->edge_fall_min_max))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_FALL_MAX_MIN)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->edge_fall_max_min))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_FALL_MAX_MAX)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->edge_fall_max_max))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_RESULT)) != 0)
+    {
+        if (!bcmolt_result_unpack(&this->result, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_calibration_capture_window_and_statistic_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_DATA_WINDOW)) != 0)
+    {
+        if (!bcmolt_u32_list_u32_max_500_hex_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_STROBE_WINDOW)) != 0)
+    {
+        if (!bcmolt_u32_list_u32_max_500_hex_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_RISE_MIN_MIN)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_RISE_MIN_MAX)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_RISE_MAX_MIN)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_RISE_MAX_MAX)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_FALL_MIN_MIN)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_FALL_MIN_MAX)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_FALL_MAX_MIN)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_FALL_MAX_MAX)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_RESULT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_calibration_capture_window_and_statistic_completed_data_bounds_check(const bcmolt_trx_calibration_capture_window_and_statistic_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_trx_calibration_capture_window_and_statistic_completed_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_DATA_WINDOW)) != 0)
+    {
+        if (this->data_window.len < 2)
+        {
+            return BCMOS_FALSE;
+        }
+
+        if (this->data_window.len > 500)
+        {
+            return BCMOS_FALSE;
+        }
+
+        if (!bcmolt_u32_list_u32_max_500_hex_bounds_check(&this->data_window))
+        {
+            *failed_prop = BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_DATA_WINDOW;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_STROBE_WINDOW)) != 0)
+    {
+        if (this->strobe_window.len < 2)
+        {
+            return BCMOS_FALSE;
+        }
+
+        if (this->strobe_window.len > 500)
+        {
+            return BCMOS_FALSE;
+        }
+
+        if (!bcmolt_u32_list_u32_max_500_hex_bounds_check(&this->strobe_window))
+        {
+            *failed_prop = BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_STROBE_WINDOW;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_RESULT)) != 0)
+    {
+        switch (this->result)
+        {
+            case BCMOLT_RESULT_SUCCESS:
+                break;
+            case BCMOLT_RESULT_FAIL:
+                break;
+            default:
+                *failed_prop = BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_RESULT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_trx_calibration_auto_cfg_data_set_default(bcmolt_trx_calibration_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_AUTO_CFG_ID_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED)) != 0)
+    {
+        this->capture_window_and_statistic_completed = BCMOS_FALSE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_calibration_auto_cfg_data_pack(const bcmolt_trx_calibration_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_AUTO_CFG_ID_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->capture_window_and_statistic_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_trx_calibration_auto_cfg_data_get_packed_length(const bcmolt_trx_calibration_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_AUTO_CFG_ID_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_calibration_auto_cfg_data_unpack(bcmolt_trx_calibration_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_AUTO_CFG_ID_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->capture_window_and_statistic_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_calibration_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_AUTO_CFG_ID_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_calibration_auto_cfg_data_bounds_check(const bcmolt_trx_calibration_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_trx_calibration_auto_cfg_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_trx_calibration_start_capture_window_data_set_default(bcmolt_trx_calibration_start_capture_window_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_PON_NI)) != 0)
+    {
+        this->pon_ni = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_TRIGGER)) != 0)
+    {
+        this->trigger = BCMOLT_TRX_CALIBRATION_TRIGGER_EPON_STAT;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_STROBE)) != 0)
+    {
+        this->strobe = BCMOLT_CAPTURE_STROBE_SIGNAL_GPON_BCDR_RESET;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_WINDOW_MODE)) != 0)
+    {
+        this->window_mode = BCMOLT_TRX_CALIBRATION_WINDOW_MODE_RANGING;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_ONU_ID)) != 0)
+    {
+        this->onu_id = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_TRIGGER_POSITION)) != 0)
+    {
+        this->trigger_position = BCMOLT_TRX_CALIBRATION_TRIGGER_POSITION_RISING;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_STOP_DUE_TO_CORRUPT_STROBE)) != 0)
+    {
+        this->stop_due_to_corrupt_strobe = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_START_OFFSET)) != 0)
+    {
+        this->start_offset = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_END_OFFSET)) != 0)
+    {
+        this->end_offset = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_NUMBER_OF_CYCLES)) != 0)
+    {
+        this->number_of_cycles = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_calibration_start_capture_window_data_pack(const bcmolt_trx_calibration_start_capture_window_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_TRIGGER)) != 0)
+    {
+        if (!bcmolt_trx_calibration_trigger_pack(this->trigger, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_STROBE)) != 0)
+    {
+        if (!bcmolt_capture_strobe_signal_pack(this->strobe, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_WINDOW_MODE)) != 0)
+    {
+        if (!bcmolt_trx_calibration_window_mode_pack(this->window_mode, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, this->onu_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_TRIGGER_POSITION)) != 0)
+    {
+        if (!bcmolt_trx_calibration_trigger_position_pack(this->trigger_position, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_STOP_DUE_TO_CORRUPT_STROBE)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->stop_due_to_corrupt_strobe))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_START_OFFSET)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, this->start_offset))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_END_OFFSET)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, this->end_offset))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_NUMBER_OF_CYCLES)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->number_of_cycles))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_trx_calibration_start_capture_window_data_get_packed_length(const bcmolt_trx_calibration_start_capture_window_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_PON_NI)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_TRIGGER)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_STROBE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_WINDOW_MODE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_ONU_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_TRIGGER_POSITION)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_STOP_DUE_TO_CORRUPT_STROBE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_START_OFFSET)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_END_OFFSET)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_NUMBER_OF_CYCLES)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_calibration_start_capture_window_data_unpack(bcmolt_trx_calibration_start_capture_window_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_TRIGGER)) != 0)
+    {
+        if (!bcmolt_trx_calibration_trigger_unpack(&this->trigger, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_STROBE)) != 0)
+    {
+        if (!bcmolt_capture_strobe_signal_unpack(&this->strobe, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_WINDOW_MODE)) != 0)
+    {
+        if (!bcmolt_trx_calibration_window_mode_unpack(&this->window_mode, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, &this->onu_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_TRIGGER_POSITION)) != 0)
+    {
+        if (!bcmolt_trx_calibration_trigger_position_unpack(&this->trigger_position, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_STOP_DUE_TO_CORRUPT_STROBE)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->stop_due_to_corrupt_strobe))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_START_OFFSET)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, &this->start_offset))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_END_OFFSET)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, &this->end_offset))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_NUMBER_OF_CYCLES)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->number_of_cycles))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_calibration_start_capture_window_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_TRIGGER)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_STROBE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_WINDOW_MODE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_TRIGGER_POSITION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_STOP_DUE_TO_CORRUPT_STROBE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_START_OFFSET)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_END_OFFSET)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_NUMBER_OF_CYCLES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_calibration_start_capture_window_data_bounds_check(const bcmolt_trx_calibration_start_capture_window_data *this, bcmolt_presence_mask fields_present, bcmolt_trx_calibration_start_capture_window_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_TRIGGER)) != 0)
+    {
+        switch (this->trigger)
+        {
+            case BCMOLT_TRX_CALIBRATION_TRIGGER_EPON_STAT:
+                break;
+            case BCMOLT_TRX_CALIBRATION_TRIGGER_GPON_BCDR_RESET:
+                break;
+            case BCMOLT_TRX_CALIBRATION_TRIGGER_GPON_TRX_RESET:
+                break;
+            case BCMOLT_TRX_CALIBRATION_TRIGGER_GPON_TRX_ED:
+                break;
+            case BCMOLT_TRX_CALIBRATION_TRIGGER_GPON_RSSI:
+                break;
+            case BCMOLT_TRX_CALIBRATION_TRIGGER_GPON_EOB:
+                break;
+            case BCMOLT_TRX_CALIBRATION_TRIGGER_GPON_RANGING:
+                break;
+            case BCMOLT_TRX_CALIBRATION_TRIGGER_SERDES_BURST_EN:
+                break;
+            default:
+                *failed_prop = BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_TRIGGER;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_STROBE)) != 0)
+    {
+        switch (this->strobe)
+        {
+            case BCMOLT_CAPTURE_STROBE_SIGNAL_GPON_BCDR_RESET:
+                break;
+            case BCMOLT_CAPTURE_STROBE_SIGNAL_GPON_TRX_ED:
+                break;
+            case BCMOLT_CAPTURE_STROBE_SIGNAL_GPON_RSSI:
+                break;
+            case BCMOLT_CAPTURE_STROBE_SIGNAL_GPON_EOB:
+                break;
+            case BCMOLT_CAPTURE_STROBE_SIGNAL_SERDES_BURST_EN:
+                break;
+            case BCMOLT_CAPTURE_STROBE_SIGNAL_SERDES_RX_LOCK:
+                break;
+            default:
+                *failed_prop = BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_STROBE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_WINDOW_MODE)) != 0)
+    {
+        switch (this->window_mode)
+        {
+            case BCMOLT_TRX_CALIBRATION_WINDOW_MODE_RANGING:
+                break;
+            case BCMOLT_TRX_CALIBRATION_WINDOW_MODE_NON_RANGING:
+                break;
+            case BCMOLT_TRX_CALIBRATION_WINDOW_MODE_BOTH:
+                break;
+            default:
+                *failed_prop = BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_WINDOW_MODE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_TRIGGER_POSITION)) != 0)
+    {
+        switch (this->trigger_position)
+        {
+            case BCMOLT_TRX_CALIBRATION_TRIGGER_POSITION_RISING:
+                break;
+            case BCMOLT_TRX_CALIBRATION_TRIGGER_POSITION_FALLING:
+                break;
+            default:
+                *failed_prop = BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_TRIGGER_POSITION;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_trx_calibration_stop_capture_window_data_set_default(bcmolt_trx_calibration_stop_capture_window_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_STOP_CAPTURE_WINDOW_ID_PON_NI)) != 0)
+    {
+        this->pon_ni = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_calibration_stop_capture_window_data_pack(const bcmolt_trx_calibration_stop_capture_window_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_STOP_CAPTURE_WINDOW_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_trx_calibration_stop_capture_window_data_get_packed_length(const bcmolt_trx_calibration_stop_capture_window_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_STOP_CAPTURE_WINDOW_ID_PON_NI)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_calibration_stop_capture_window_data_unpack(bcmolt_trx_calibration_stop_capture_window_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_STOP_CAPTURE_WINDOW_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_calibration_stop_capture_window_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_TRX_CALIBRATION_STOP_CAPTURE_WINDOW_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_trx_calibration_stop_capture_window_data_bounds_check(const bcmolt_trx_calibration_stop_capture_window_data *this, bcmolt_presence_mask fields_present, bcmolt_trx_calibration_stop_capture_window_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_alloc_key_set_default(bcmolt_xgpon_alloc_key *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_KEY_ID_PON_NI)) != 0)
+    {
+        this->pon_ni = (bcmolt_xgpon_ni) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_KEY_ID_ALLOC_ID)) != 0)
+    {
+        this->alloc_id = (bcmolt_xgpon_alloc_id) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_key_pack(const bcmolt_xgpon_alloc_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, (uint8_t) this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_KEY_ID_ALLOC_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->alloc_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_alloc_key_get_packed_length(const bcmolt_xgpon_alloc_key *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_KEY_ID_PON_NI)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_KEY_ID_ALLOC_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_key_unpack(bcmolt_xgpon_alloc_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, (uint8_t *) &this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_KEY_ID_ALLOC_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->alloc_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_KEY_ID_ALLOC_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_key_bounds_check(const bcmolt_xgpon_alloc_key *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_alloc_key_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_KEY_ID_PON_NI)) != 0)
+    {
+        if (this->pon_ni > (bcmolt_xgpon_ni) 7)
+        {
+            *failed_prop = BCMOLT_XGPON_ALLOC_KEY_ID_PON_NI;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_KEY_ID_ALLOC_ID)) != 0)
+    {
+        if (this->alloc_id > (bcmolt_xgpon_alloc_id) 16383)
+        {
+            *failed_prop = BCMOLT_XGPON_ALLOC_KEY_ID_ALLOC_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_alloc_cfg_data_set_default(bcmolt_xgpon_alloc_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_CFG_ID_STATE)) != 0)
+    {
+        this->state = BCMOLT_ALLOC_STATE_NOT_CONFIGURED;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_CFG_ID_SLA)) != 0)
+    {
+        this->sla.cbr_rt_bw = 0;
+        this->sla.cbr_nrt_bw = 0;
+        this->sla.guaranteed_bw = 0;
+        this->sla.maximum_bw = 0;
+        this->sla.additional_bw_eligibility = BCMOLT_ADDITIONAL_BW_ELIGIBILITY_NONE;
+        this->sla.cbr_rt_compensation = BCMOS_FALSE;
+        this->sla.cbr_rt_ap_index = 0;
+        this->sla.cbr_nrt_ap_index = 0;
+        this->sla.alloc_type = BCMOLT_ALLOC_TYPE_NONE;
+        this->sla.weight = 0;
+        this->sla.priority = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_CFG_ID_ONU_ID)) != 0)
+    {
+        this->onu_id = (bcmolt_xgpon_onu_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_CFG_ID_COLLECT_STATS)) != 0)
+    {
+        this->collect_stats = BCMOS_FALSE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_cfg_data_pack(const bcmolt_xgpon_alloc_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_CFG_ID_STATE)) != 0)
+    {
+        if (!bcmolt_alloc_state_pack(this->state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_CFG_ID_SLA)) != 0)
+    {
+        if (!bcmolt_pon_alloc_sla_pack(&this->sla, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_CFG_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->onu_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_CFG_ID_COLLECT_STATS)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->collect_stats))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_alloc_cfg_data_get_packed_length(const bcmolt_xgpon_alloc_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_CFG_ID_STATE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_CFG_ID_SLA)) != 0)
+    {
+        count += 23;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_CFG_ID_ONU_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_CFG_ID_COLLECT_STATS)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_cfg_data_unpack(bcmolt_xgpon_alloc_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_CFG_ID_STATE)) != 0)
+    {
+        if (!bcmolt_alloc_state_unpack(&this->state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_CFG_ID_SLA)) != 0)
+    {
+        if (!bcmolt_pon_alloc_sla_unpack(&this->sla, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_CFG_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->onu_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_CFG_ID_COLLECT_STATS)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->collect_stats))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_CFG_ID_STATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_CFG_ID_SLA)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 23))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_CFG_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_CFG_ID_COLLECT_STATS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_cfg_data_bounds_check(const bcmolt_xgpon_alloc_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_alloc_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_CFG_ID_STATE)) != 0)
+    {
+        switch (this->state)
+        {
+            case BCMOLT_ALLOC_STATE_NOT_CONFIGURED:
+                break;
+            case BCMOLT_ALLOC_STATE_INACTIVE:
+                break;
+            case BCMOLT_ALLOC_STATE_PROCESSING:
+                break;
+            case BCMOLT_ALLOC_STATE_ACTIVE:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ALLOC_CFG_ID_STATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_CFG_ID_SLA)) != 0)
+    {
+        if (!bcmolt_pon_alloc_sla_bounds_check(&this->sla))
+        {
+            *failed_prop = BCMOLT_XGPON_ALLOC_CFG_ID_SLA;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_CFG_ID_ONU_ID)) != 0)
+    {
+        if (this->onu_id > (bcmolt_xgpon_onu_id) 511)
+        {
+            *failed_prop = BCMOLT_XGPON_ALLOC_CFG_ID_ONU_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_alloc_stat_data_set_default(bcmolt_xgpon_alloc_stat_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_STAT_ID_RX_BYTES)) != 0)
+    {
+        this->rx_bytes = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_stat_data_pack(const bcmolt_xgpon_alloc_stat_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_STAT_ID_RX_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_alloc_stat_data_get_packed_length(const bcmolt_xgpon_alloc_stat_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_STAT_ID_RX_BYTES)) != 0)
+    {
+        count += 8;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_stat_data_unpack(bcmolt_xgpon_alloc_stat_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_STAT_ID_RX_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_stat_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_STAT_ID_RX_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_stat_data_bounds_check(const bcmolt_xgpon_alloc_stat_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_alloc_stat_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_alloc_stat_cfg_data_set_default(bcmolt_xgpon_alloc_stat_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_STAT_CFG_ID_CFG)) != 0)
+    {
+        this->cfg.trigger.type = BCMOLT_STAT_CONDITION_TYPE_NONE;
+        this->cfg.soak.active_soak_time = 0;
+        this->cfg.soak.clear_soak_time = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_stat_cfg_data_pack(const bcmolt_xgpon_alloc_stat_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_pack(&this->cfg, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_alloc_stat_cfg_data_get_packed_length(const bcmolt_xgpon_alloc_stat_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_STAT_CFG_ID_CFG)) != 0)
+    {
+        count += bcmolt_stat_alarm_config_get_packed_length(&this->cfg);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_stat_cfg_data_unpack(bcmolt_xgpon_alloc_stat_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_unpack(&this->cfg, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_stat_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_stat_cfg_data_bounds_check(const bcmolt_xgpon_alloc_stat_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_alloc_stat_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_bounds_check(&this->cfg))
+        {
+            *failed_prop = BCMOLT_XGPON_ALLOC_STAT_CFG_ID_CFG;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_alloc_configuration_completed_data_set_default(bcmolt_xgpon_alloc_configuration_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_CONFIGURATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        this->status = BCMOLT_RESULT_SUCCESS;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_CONFIGURATION_COMPLETED_ID_NEW_STATE)) != 0)
+    {
+        this->new_state = BCMOLT_ALLOC_STATE_NOT_CONFIGURED;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_configuration_completed_data_pack(const bcmolt_xgpon_alloc_configuration_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_CONFIGURATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_result_pack(this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_CONFIGURATION_COMPLETED_ID_NEW_STATE)) != 0)
+    {
+        if (!bcmolt_alloc_state_pack(this->new_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_alloc_configuration_completed_data_get_packed_length(const bcmolt_xgpon_alloc_configuration_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_CONFIGURATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_CONFIGURATION_COMPLETED_ID_NEW_STATE)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_configuration_completed_data_unpack(bcmolt_xgpon_alloc_configuration_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_CONFIGURATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_result_unpack(&this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_CONFIGURATION_COMPLETED_ID_NEW_STATE)) != 0)
+    {
+        if (!bcmolt_alloc_state_unpack(&this->new_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_configuration_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_CONFIGURATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_CONFIGURATION_COMPLETED_ID_NEW_STATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_configuration_completed_data_bounds_check(const bcmolt_xgpon_alloc_configuration_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_alloc_configuration_completed_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_CONFIGURATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        switch (this->status)
+        {
+            case BCMOLT_RESULT_SUCCESS:
+                break;
+            case BCMOLT_RESULT_FAIL:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ALLOC_CONFIGURATION_COMPLETED_ID_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_CONFIGURATION_COMPLETED_ID_NEW_STATE)) != 0)
+    {
+        switch (this->new_state)
+        {
+            case BCMOLT_ALLOC_STATE_NOT_CONFIGURED:
+                break;
+            case BCMOLT_ALLOC_STATE_INACTIVE:
+                break;
+            case BCMOLT_ALLOC_STATE_PROCESSING:
+                break;
+            case BCMOLT_ALLOC_STATE_ACTIVE:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ALLOC_CONFIGURATION_COMPLETED_ID_NEW_STATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_alloc_get_alloc_stats_completed_data_set_default(bcmolt_xgpon_alloc_get_alloc_stats_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_STATUS)) != 0)
+    {
+        this->status = BCMOLT_RESULT_SUCCESS;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_NSR_USED)) != 0)
+    {
+        this->average_nsr_used = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_NSR_ALLOCATED)) != 0)
+    {
+        this->average_nsr_allocated = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_SR_REPORT)) != 0)
+    {
+        this->average_sr_report = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_get_alloc_stats_completed_data_pack(const bcmolt_xgpon_alloc_get_alloc_stats_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_result_pack(this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_NSR_USED)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->average_nsr_used))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_NSR_ALLOCATED)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->average_nsr_allocated))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_SR_REPORT)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->average_sr_report))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_alloc_get_alloc_stats_completed_data_get_packed_length(const bcmolt_xgpon_alloc_get_alloc_stats_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_NSR_USED)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_NSR_ALLOCATED)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_SR_REPORT)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_get_alloc_stats_completed_data_unpack(bcmolt_xgpon_alloc_get_alloc_stats_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_result_unpack(&this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_NSR_USED)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->average_nsr_used))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_NSR_ALLOCATED)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->average_nsr_allocated))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_SR_REPORT)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->average_sr_report))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_get_alloc_stats_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_NSR_USED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_NSR_ALLOCATED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_SR_REPORT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_get_alloc_stats_completed_data_bounds_check(const bcmolt_xgpon_alloc_get_alloc_stats_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_alloc_get_alloc_stats_completed_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_STATUS)) != 0)
+    {
+        switch (this->status)
+        {
+            case BCMOLT_RESULT_SUCCESS:
+                break;
+            case BCMOLT_RESULT_FAIL:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_alloc_stat_alarm_cleared_data_set_default(bcmolt_xgpon_alloc_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        this->stat = BCMOLT_XGPON_ALLOC_STAT_ID_RX_BYTES;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_stat_alarm_cleared_data_pack(const bcmolt_xgpon_alloc_stat_alarm_cleared_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_xgpon_alloc_stat_id_pack(this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_alloc_stat_alarm_cleared_data_get_packed_length(const bcmolt_xgpon_alloc_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_stat_alarm_cleared_data_unpack(bcmolt_xgpon_alloc_stat_alarm_cleared_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_xgpon_alloc_stat_id_unpack(&this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_stat_alarm_cleared_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_stat_alarm_cleared_data_bounds_check(const bcmolt_xgpon_alloc_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_alloc_stat_alarm_cleared_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        switch (this->stat)
+        {
+            case BCMOLT_XGPON_ALLOC_STAT_ID_RX_BYTES:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ALLOC_STAT_ALARM_CLEARED_ID_STAT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_alloc_stat_alarm_raised_data_set_default(bcmolt_xgpon_alloc_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        this->stat = BCMOLT_XGPON_ALLOC_STAT_ID_RX_BYTES;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_stat_alarm_raised_data_pack(const bcmolt_xgpon_alloc_stat_alarm_raised_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_xgpon_alloc_stat_id_pack(this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_alloc_stat_alarm_raised_data_get_packed_length(const bcmolt_xgpon_alloc_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_stat_alarm_raised_data_unpack(bcmolt_xgpon_alloc_stat_alarm_raised_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_xgpon_alloc_stat_id_unpack(&this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_stat_alarm_raised_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_stat_alarm_raised_data_bounds_check(const bcmolt_xgpon_alloc_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_alloc_stat_alarm_raised_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        switch (this->stat)
+        {
+            case BCMOLT_XGPON_ALLOC_STAT_ID_RX_BYTES:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ALLOC_STAT_ALARM_RAISED_ID_STAT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_alloc_auto_cfg_data_set_default(bcmolt_xgpon_alloc_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_AUTO_CFG_ID_CONFIGURATION_COMPLETED)) != 0)
+    {
+        this->configuration_completed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_AUTO_CFG_ID_GET_ALLOC_STATS_COMPLETED)) != 0)
+    {
+        this->get_alloc_stats_completed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        this->stat_alarm_cleared = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        this->stat_alarm_raised = BCMOS_FALSE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_auto_cfg_data_pack(const bcmolt_xgpon_alloc_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_AUTO_CFG_ID_CONFIGURATION_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->configuration_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_AUTO_CFG_ID_GET_ALLOC_STATS_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->get_alloc_stats_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->stat_alarm_cleared))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->stat_alarm_raised))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_alloc_auto_cfg_data_get_packed_length(const bcmolt_xgpon_alloc_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_AUTO_CFG_ID_CONFIGURATION_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_AUTO_CFG_ID_GET_ALLOC_STATS_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_auto_cfg_data_unpack(bcmolt_xgpon_alloc_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_AUTO_CFG_ID_CONFIGURATION_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->configuration_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_AUTO_CFG_ID_GET_ALLOC_STATS_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->get_alloc_stats_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->stat_alarm_cleared))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->stat_alarm_raised))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_AUTO_CFG_ID_CONFIGURATION_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_AUTO_CFG_ID_GET_ALLOC_STATS_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_auto_cfg_data_bounds_check(const bcmolt_xgpon_alloc_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_alloc_auto_cfg_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_alloc_get_stats_data_set_default(bcmolt_xgpon_alloc_get_stats_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_GET_STATS_ID_NUM_OF_CYCLES)) != 0)
+    {
+        this->num_of_cycles = 1;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_get_stats_data_pack(const bcmolt_xgpon_alloc_get_stats_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_GET_STATS_ID_NUM_OF_CYCLES)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->num_of_cycles))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_alloc_get_stats_data_get_packed_length(const bcmolt_xgpon_alloc_get_stats_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_GET_STATS_ID_NUM_OF_CYCLES)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_get_stats_data_unpack(bcmolt_xgpon_alloc_get_stats_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_GET_STATS_ID_NUM_OF_CYCLES)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->num_of_cycles))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_get_stats_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_GET_STATS_ID_NUM_OF_CYCLES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_get_stats_data_bounds_check(const bcmolt_xgpon_alloc_get_stats_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_alloc_get_stats_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_GET_STATS_ID_NUM_OF_CYCLES)) != 0)
+    {
+        if (this->num_of_cycles < 1)
+        {
+            *failed_prop = BCMOLT_XGPON_ALLOC_GET_STATS_ID_NUM_OF_CYCLES;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_alloc_set_state_data_set_default(bcmolt_xgpon_alloc_set_state_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_SET_STATE_ID_STATE)) != 0)
+    {
+        this->state = BCMOLT_ALLOC_OPERATION_ACTIVATE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_set_state_data_pack(const bcmolt_xgpon_alloc_set_state_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_SET_STATE_ID_STATE)) != 0)
+    {
+        if (!bcmolt_alloc_operation_pack(this->state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_alloc_set_state_data_get_packed_length(const bcmolt_xgpon_alloc_set_state_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_SET_STATE_ID_STATE)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_set_state_data_unpack(bcmolt_xgpon_alloc_set_state_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_SET_STATE_ID_STATE)) != 0)
+    {
+        if (!bcmolt_alloc_operation_unpack(&this->state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_set_state_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_SET_STATE_ID_STATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_alloc_set_state_data_bounds_check(const bcmolt_xgpon_alloc_set_state_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_alloc_set_state_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ALLOC_SET_STATE_ID_STATE)) != 0)
+    {
+        switch (this->state)
+        {
+            case BCMOLT_ALLOC_OPERATION_ACTIVATE:
+                break;
+            case BCMOLT_ALLOC_OPERATION_DEACTIVATE:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ALLOC_SET_STATE_ID_STATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_gem_port_key_set_default(bcmolt_xgpon_gem_port_key *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_KEY_ID_PON_NI)) != 0)
+    {
+        this->pon_ni = (bcmolt_xgpon_ni) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_KEY_ID_GEM_PORT_ID)) != 0)
+    {
+        this->gem_port_id = (bcmolt_xgpon_gem_id) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_key_pack(const bcmolt_xgpon_gem_port_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, (uint8_t) this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_KEY_ID_GEM_PORT_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->gem_port_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_gem_port_key_get_packed_length(const bcmolt_xgpon_gem_port_key *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_KEY_ID_PON_NI)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_KEY_ID_GEM_PORT_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_key_unpack(bcmolt_xgpon_gem_port_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, (uint8_t *) &this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_KEY_ID_GEM_PORT_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->gem_port_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_KEY_ID_GEM_PORT_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_key_bounds_check(const bcmolt_xgpon_gem_port_key *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_gem_port_key_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_KEY_ID_PON_NI)) != 0)
+    {
+        if (this->pon_ni > (bcmolt_xgpon_ni) 7)
+        {
+            *failed_prop = BCMOLT_XGPON_GEM_PORT_KEY_ID_PON_NI;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_KEY_ID_GEM_PORT_ID)) != 0)
+    {
+        if (this->gem_port_id > (bcmolt_xgpon_gem_id) 65533U)
+        {
+            *failed_prop = BCMOLT_XGPON_GEM_PORT_KEY_ID_GEM_PORT_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_gem_port_cfg_data_set_default(bcmolt_xgpon_gem_port_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_CFG_ID_CONFIGURATION)) != 0)
+    {
+        this->configuration.direction = BCMOLT_GEM_PORT_DIRECTION_DOWNSTREAM;
+        this->configuration.type = BCMOLT_GEM_PORT_TYPE_UNICAST;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_CFG_ID_ONU_ID)) != 0)
+    {
+        this->onu_id = (bcmolt_xgpon_onu_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_CFG_ID_GEM_PORT_STATE)) != 0)
+    {
+        this->gem_port_state = BCMOLT_XGPON_GEM_PORT_STATE_NOT_CONFIGURED;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_CFG_ID_ENCRYPTION_MODE)) != 0)
+    {
+        this->encryption_mode = BCMOLT_CONTROL_STATE_DISABLE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_CFG_ID_UPSTREAM_DESTINATION_QUEUE)) != 0)
+    {
+        this->upstream_destination_queue = BCMOLT_US_GEM_PORT_DESTINATION_DATA;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_CFG_ID_CONTROL)) != 0)
+    {
+        this->control = BCMOLT_CONTROL_STATE_DISABLE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_cfg_data_pack(const bcmolt_xgpon_gem_port_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_CFG_ID_CONFIGURATION)) != 0)
+    {
+        if (!bcmolt_gem_port_configuration_pack(&this->configuration, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_CFG_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->onu_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_CFG_ID_GEM_PORT_STATE)) != 0)
+    {
+        if (!bcmolt_xgpon_gem_port_state_pack(this->gem_port_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_CFG_ID_ENCRYPTION_MODE)) != 0)
+    {
+        if (!bcmolt_control_state_pack(this->encryption_mode, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_CFG_ID_UPSTREAM_DESTINATION_QUEUE)) != 0)
+    {
+        if (!bcmolt_us_gem_port_destination_pack(this->upstream_destination_queue, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_CFG_ID_CONTROL)) != 0)
+    {
+        if (!bcmolt_control_state_pack(this->control, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_gem_port_cfg_data_get_packed_length(const bcmolt_xgpon_gem_port_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_CFG_ID_CONFIGURATION)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_CFG_ID_ONU_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_CFG_ID_GEM_PORT_STATE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_CFG_ID_ENCRYPTION_MODE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_CFG_ID_UPSTREAM_DESTINATION_QUEUE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_CFG_ID_CONTROL)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_cfg_data_unpack(bcmolt_xgpon_gem_port_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_CFG_ID_CONFIGURATION)) != 0)
+    {
+        if (!bcmolt_gem_port_configuration_unpack(&this->configuration, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_CFG_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->onu_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_CFG_ID_GEM_PORT_STATE)) != 0)
+    {
+        if (!bcmolt_xgpon_gem_port_state_unpack(&this->gem_port_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_CFG_ID_ENCRYPTION_MODE)) != 0)
+    {
+        if (!bcmolt_control_state_unpack(&this->encryption_mode, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_CFG_ID_UPSTREAM_DESTINATION_QUEUE)) != 0)
+    {
+        if (!bcmolt_us_gem_port_destination_unpack(&this->upstream_destination_queue, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_CFG_ID_CONTROL)) != 0)
+    {
+        if (!bcmolt_control_state_unpack(&this->control, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_CFG_ID_CONFIGURATION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_CFG_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_CFG_ID_GEM_PORT_STATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_CFG_ID_ENCRYPTION_MODE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_CFG_ID_UPSTREAM_DESTINATION_QUEUE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_CFG_ID_CONTROL)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_cfg_data_bounds_check(const bcmolt_xgpon_gem_port_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_gem_port_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_CFG_ID_CONFIGURATION)) != 0)
+    {
+        if (!bcmolt_gem_port_configuration_bounds_check(&this->configuration))
+        {
+            *failed_prop = BCMOLT_XGPON_GEM_PORT_CFG_ID_CONFIGURATION;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_CFG_ID_ONU_ID)) != 0)
+    {
+        if (this->onu_id > (bcmolt_xgpon_onu_id) 511)
+        {
+            *failed_prop = BCMOLT_XGPON_GEM_PORT_CFG_ID_ONU_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_CFG_ID_GEM_PORT_STATE)) != 0)
+    {
+        switch (this->gem_port_state)
+        {
+            case BCMOLT_XGPON_GEM_PORT_STATE_NOT_CONFIGURED:
+                break;
+            case BCMOLT_XGPON_GEM_PORT_STATE_INACTIVE:
+                break;
+            case BCMOLT_XGPON_GEM_PORT_STATE_ACTIVE:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_GEM_PORT_CFG_ID_GEM_PORT_STATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_CFG_ID_ENCRYPTION_MODE)) != 0)
+    {
+        switch (this->encryption_mode)
+        {
+            case BCMOLT_CONTROL_STATE_DISABLE:
+                break;
+            case BCMOLT_CONTROL_STATE_ENABLE:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_GEM_PORT_CFG_ID_ENCRYPTION_MODE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_CFG_ID_UPSTREAM_DESTINATION_QUEUE)) != 0)
+    {
+        switch (this->upstream_destination_queue)
+        {
+            case BCMOLT_US_GEM_PORT_DESTINATION_DATA:
+                break;
+            case BCMOLT_US_GEM_PORT_DESTINATION_CPU:
+                break;
+            case BCMOLT_US_GEM_PORT_DESTINATION_OMCI:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_GEM_PORT_CFG_ID_UPSTREAM_DESTINATION_QUEUE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_CFG_ID_CONTROL)) != 0)
+    {
+        switch (this->control)
+        {
+            case BCMOLT_CONTROL_STATE_DISABLE:
+                break;
+            case BCMOLT_CONTROL_STATE_ENABLE:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_GEM_PORT_CFG_ID_CONTROL;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_gem_port_stat_data_set_default(bcmolt_xgpon_gem_port_stat_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_STAT_ID_TX_BYTES)) != 0)
+    {
+        this->tx_bytes = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_STAT_ID_TX_PACKETS)) != 0)
+    {
+        this->tx_packets = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_STAT_ID_RX_PACKETS)) != 0)
+    {
+        this->rx_packets = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_STAT_ID_RX_BYTES)) != 0)
+    {
+        this->rx_bytes = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_stat_data_pack(const bcmolt_xgpon_gem_port_stat_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_STAT_ID_TX_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_STAT_ID_TX_PACKETS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_packets))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_STAT_ID_RX_PACKETS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_packets))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_STAT_ID_RX_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_gem_port_stat_data_get_packed_length(const bcmolt_xgpon_gem_port_stat_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_STAT_ID_TX_BYTES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_STAT_ID_TX_PACKETS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_STAT_ID_RX_PACKETS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_STAT_ID_RX_BYTES)) != 0)
+    {
+        count += 8;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_stat_data_unpack(bcmolt_xgpon_gem_port_stat_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_STAT_ID_TX_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_STAT_ID_TX_PACKETS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_packets))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_STAT_ID_RX_PACKETS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_packets))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_STAT_ID_RX_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_stat_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_STAT_ID_TX_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_STAT_ID_TX_PACKETS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_STAT_ID_RX_PACKETS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_STAT_ID_RX_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_stat_data_bounds_check(const bcmolt_xgpon_gem_port_stat_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_gem_port_stat_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_gem_port_stat_cfg_data_set_default(bcmolt_xgpon_gem_port_stat_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_STAT_CFG_ID_CFG)) != 0)
+    {
+        this->cfg.trigger.type = BCMOLT_STAT_CONDITION_TYPE_NONE;
+        this->cfg.soak.active_soak_time = 0;
+        this->cfg.soak.clear_soak_time = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_stat_cfg_data_pack(const bcmolt_xgpon_gem_port_stat_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_pack(&this->cfg, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_gem_port_stat_cfg_data_get_packed_length(const bcmolt_xgpon_gem_port_stat_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_STAT_CFG_ID_CFG)) != 0)
+    {
+        count += bcmolt_stat_alarm_config_get_packed_length(&this->cfg);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_stat_cfg_data_unpack(bcmolt_xgpon_gem_port_stat_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_unpack(&this->cfg, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_stat_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_stat_cfg_data_bounds_check(const bcmolt_xgpon_gem_port_stat_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_gem_port_stat_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_bounds_check(&this->cfg))
+        {
+            *failed_prop = BCMOLT_XGPON_GEM_PORT_STAT_CFG_ID_CFG;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_gem_port_stat_alarm_cleared_data_set_default(bcmolt_xgpon_gem_port_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        this->stat = BCMOLT_XGPON_GEM_PORT_STAT_ID_TX_BYTES;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_stat_alarm_cleared_data_pack(const bcmolt_xgpon_gem_port_stat_alarm_cleared_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_xgpon_gem_port_stat_id_pack(this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_gem_port_stat_alarm_cleared_data_get_packed_length(const bcmolt_xgpon_gem_port_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_stat_alarm_cleared_data_unpack(bcmolt_xgpon_gem_port_stat_alarm_cleared_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_xgpon_gem_port_stat_id_unpack(&this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_stat_alarm_cleared_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_stat_alarm_cleared_data_bounds_check(const bcmolt_xgpon_gem_port_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_gem_port_stat_alarm_cleared_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        switch (this->stat)
+        {
+            case BCMOLT_XGPON_GEM_PORT_STAT_ID_TX_BYTES:
+                break;
+            case BCMOLT_XGPON_GEM_PORT_STAT_ID_TX_PACKETS:
+                break;
+            case BCMOLT_XGPON_GEM_PORT_STAT_ID_RX_PACKETS:
+                break;
+            case BCMOLT_XGPON_GEM_PORT_STAT_ID_RX_BYTES:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_GEM_PORT_STAT_ALARM_CLEARED_ID_STAT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_gem_port_stat_alarm_raised_data_set_default(bcmolt_xgpon_gem_port_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        this->stat = BCMOLT_XGPON_GEM_PORT_STAT_ID_TX_BYTES;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_stat_alarm_raised_data_pack(const bcmolt_xgpon_gem_port_stat_alarm_raised_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_xgpon_gem_port_stat_id_pack(this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_gem_port_stat_alarm_raised_data_get_packed_length(const bcmolt_xgpon_gem_port_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_stat_alarm_raised_data_unpack(bcmolt_xgpon_gem_port_stat_alarm_raised_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_xgpon_gem_port_stat_id_unpack(&this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_stat_alarm_raised_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_stat_alarm_raised_data_bounds_check(const bcmolt_xgpon_gem_port_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_gem_port_stat_alarm_raised_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        switch (this->stat)
+        {
+            case BCMOLT_XGPON_GEM_PORT_STAT_ID_TX_BYTES:
+                break;
+            case BCMOLT_XGPON_GEM_PORT_STAT_ID_TX_PACKETS:
+                break;
+            case BCMOLT_XGPON_GEM_PORT_STAT_ID_RX_PACKETS:
+                break;
+            case BCMOLT_XGPON_GEM_PORT_STAT_ID_RX_BYTES:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_GEM_PORT_STAT_ALARM_RAISED_ID_STAT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_gem_port_auto_cfg_data_set_default(bcmolt_xgpon_gem_port_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        this->stat_alarm_cleared = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        this->stat_alarm_raised = BCMOS_FALSE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_auto_cfg_data_pack(const bcmolt_xgpon_gem_port_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->stat_alarm_cleared))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->stat_alarm_raised))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_gem_port_auto_cfg_data_get_packed_length(const bcmolt_xgpon_gem_port_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_auto_cfg_data_unpack(bcmolt_xgpon_gem_port_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->stat_alarm_cleared))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->stat_alarm_raised))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_GEM_PORT_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_gem_port_auto_cfg_data_bounds_check(const bcmolt_xgpon_gem_port_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_gem_port_auto_cfg_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_iwf_key_set_default(bcmolt_xgpon_iwf_key *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_IWF_KEY_ID_PON_NI)) != 0)
+    {
+        this->pon_ni = (bcmolt_xgpon_ni) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_iwf_key_pack(const bcmolt_xgpon_iwf_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_IWF_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, (uint8_t) this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_iwf_key_get_packed_length(const bcmolt_xgpon_iwf_key *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_IWF_KEY_ID_PON_NI)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_iwf_key_unpack(bcmolt_xgpon_iwf_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_IWF_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, (uint8_t *) &this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_iwf_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_IWF_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_iwf_key_bounds_check(const bcmolt_xgpon_iwf_key *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_iwf_key_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_IWF_KEY_ID_PON_NI)) != 0)
+    {
+        if (this->pon_ni > (bcmolt_xgpon_ni) 7)
+        {
+            *failed_prop = BCMOLT_XGPON_IWF_KEY_ID_PON_NI;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_iwf_cfg_data_set_default(bcmolt_xgpon_iwf_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_IWF_CFG_ID_US_OTAG_DIRECT_TPID)) != 0)
+    {
+        this->us_otag_direct_tpid = 33024U;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_IWF_CFG_ID_DS_TPID)) != 0)
+    {
+        this->ds_tpid.arr[0] = 33024U;
+        this->ds_tpid.arr[1] = 34984U;
+        this->ds_tpid.arr[2] = 37120U;
+        this->ds_tpid.arr[3] = 37376U;
+        this->ds_tpid.arr[4] = 33024U;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_iwf_cfg_data_pack(const bcmolt_xgpon_iwf_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_IWF_CFG_ID_US_OTAG_DIRECT_TPID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, this->us_otag_direct_tpid))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_IWF_CFG_ID_DS_TPID)) != 0)
+    {
+        if (!bcmolt_arr_u16_5_hex_pack(&this->ds_tpid, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_iwf_cfg_data_get_packed_length(const bcmolt_xgpon_iwf_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_IWF_CFG_ID_US_OTAG_DIRECT_TPID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_IWF_CFG_ID_DS_TPID)) != 0)
+    {
+        count += 10;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_iwf_cfg_data_unpack(bcmolt_xgpon_iwf_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_IWF_CFG_ID_US_OTAG_DIRECT_TPID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, &this->us_otag_direct_tpid))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_IWF_CFG_ID_DS_TPID)) != 0)
+    {
+        if (!bcmolt_arr_u16_5_hex_unpack(&this->ds_tpid, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_iwf_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_IWF_CFG_ID_US_OTAG_DIRECT_TPID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_IWF_CFG_ID_DS_TPID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 10))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_iwf_cfg_data_bounds_check(const bcmolt_xgpon_iwf_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_iwf_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_IWF_CFG_ID_DS_TPID)) != 0)
+    {
+        if (!bcmolt_arr_u16_5_hex_bounds_check(&this->ds_tpid))
+        {
+            *failed_prop = BCMOLT_XGPON_IWF_CFG_ID_DS_TPID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_ni_key_set_default(bcmolt_xgpon_ni_key *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_KEY_ID_PON_NI)) != 0)
+    {
+        this->pon_ni = (bcmolt_xgpon_ni) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_key_pack(const bcmolt_xgpon_ni_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, (uint8_t) this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_ni_key_get_packed_length(const bcmolt_xgpon_ni_key *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_KEY_ID_PON_NI)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_key_unpack(bcmolt_xgpon_ni_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, (uint8_t *) &this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_key_bounds_check(const bcmolt_xgpon_ni_key *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_key_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_KEY_ID_PON_NI)) != 0)
+    {
+        if (this->pon_ni > (bcmolt_xgpon_ni) 7)
+        {
+            *failed_prop = BCMOLT_XGPON_NI_KEY_ID_PON_NI;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_ni_cfg_data_set_default(bcmolt_xgpon_ni_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_HW_PON_ID)) != 0)
+    {
+        this->hw_pon_id.pon_id_1 = 0;
+        this->hw_pon_id.pon_id_2 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_AVAILABLE_BANDWIDTH)) != 0)
+    {
+        this->available_bandwidth.cbr_bw = 0;
+        this->available_bandwidth.total_bw = 0;
+        this->available_bandwidth.next_onu_total_bw = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_NUMBER_OF_ACTIVE_ONUS)) != 0)
+    {
+        this->number_of_active_onus = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PON_STATUS)) != 0)
+    {
+        this->pon_status.state = BCMOLT_PON_STATE_INACTIVE;
+        this->pon_status.los_status = BCMOLT_STATUS_OFF;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PON_DISTANCE)) != 0)
+    {
+        this->pon_distance.max_log_distance = 20;
+        this->pon_distance.max_diff_reach = 20;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_RANGING_WINDOW_SIZE)) != 0)
+    {
+        this->ranging_window_size = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_EQD_CYCLES_NUMBER)) != 0)
+    {
+        this->eqd_cycles_number = 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_DRIFT_CONTROL)) != 0)
+    {
+        this->drift_control.drift_interval = 1000;
+        this->drift_control.drift_limit = 8;
+        this->drift_control.transmission_control_limit = 16;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_LOS_ALARM_THRESHOLD)) != 0)
+    {
+        this->los_alarm_threshold = 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_LOS_INITIAL_VALUE)) != 0)
+    {
+        this->los_initial_value = BCMOLT_STATUS_OFF;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_ONU_ALARMS_THRESHOLDS)) != 0)
+    {
+        this->onu_alarms_thresholds.losi = 4;
+        this->onu_alarms_thresholds.lobi = 4;
+        this->onu_alarms_thresholds.looci = 3;
+        this->onu_alarms_thresholds.lopci = 3;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_BER_MONITOR)) != 0)
+    {
+        this->ber_monitor.us_ber_interval = 5000;
+        this->ber_monitor.sf_threshold = 3;
+        this->ber_monitor.sd_threshold = 5;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_ONU_ACTIVATION)) != 0)
+    {
+        this->onu_activation.key_exchange = BCMOLT_CONTROL_STATE_DISABLE;
+        this->onu_activation.fail_due_to_regis_auto_fail = BCMOLT_CONTROL_STATE_ENABLE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_SN_ACQUISITION)) != 0)
+    {
+        this->sn_acquisition.interval = 1000;
+        this->sn_acquisition.control = BCMOLT_CONTROL_STATE_DISABLE;
+        this->sn_acquisition.onu_post_discovery_mode = BCMOLT_ONU_POST_DISCOVERY_MODE_NONE;
+        this->sn_acquisition.burst_profile = (bcmolt_burst_profile_index) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_KEY_EXCHANGE)) != 0)
+    {
+        this->key_exchange.interval = 10000;
+        this->key_exchange.control = BCMOLT_CONTROL_STATE_DISABLE;
+        this->key_exchange.encrypted_ports_only = BCMOLT_CONTROL_STATE_DISABLE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PROTECTION_SWITCHING)) != 0)
+    {
+        this->protection_switching.timeout = 100;
+        this->protection_switching.gpio_pin = BCMOLT_GPIO_PIN_UNCONFIGURED;
+        this->protection_switching.fast_ranging = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PROTECTION_SWITCHING_DEBUG)) != 0)
+    {
+        this->protection_switching_debug.data_map_delay_ms = 0;
+        this->protection_switching_debug.rerange_send_ranging_time = BCMOS_FALSE;
+        this->protection_switching_debug.rerange_send_ranging_time_delay = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_CBR_RT_ALLOCATION_PROFILE)) != 0)
+    {
+        this->cbr_rt_allocation_profile.ma_7 = 64;
+        this->cbr_rt_allocation_profile.ma_3 = 256;
+        this->cbr_rt_allocation_profile.ma_1 = 512;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_CBR_NRT_ALLOCATION_PROFILE)) != 0)
+    {
+        this->cbr_nrt_allocation_profile.arr[0] = 4096;
+        this->cbr_nrt_allocation_profile.arr[1] = 8192;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_POWER_MANAGEMENT)) != 0)
+    {
+        this->power_management.ilowpower = 1600;
+        this->power_management.iaware = 160;
+        this->power_management.itransinit = 80;
+        this->power_management.itxinit = 40;
+        this->power_management.irxoff = 1600;
+        this->power_management.low_power_clobi = 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_ROGUE_ONU_DETECTION_PROCESS)) != 0)
+    {
+        this->rogue_onu_detection_process.control = BCMOLT_CONTROL_STATE_DISABLE;
+        this->rogue_onu_detection_process.detection_algorithm.algorithm_type = BCMOLT_ROGUE_DETECTION_ALGORITHM_TYPE_EARLY_ROGUE_DETECTION;
+        this->rogue_onu_detection_process.detection_algorithm.u.early_rogue_detection.measurement_type = BCMOLT_ROGUE_DETECTION_WINDOW_SILENT_WINDOW;
+        this->rogue_onu_detection_process.detection_algorithm.u.early_rogue_detection.interval = 10000;
+        this->rogue_onu_detection_process.detection_algorithm.u.early_rogue_detection.second_ranging_window = BCMOS_FALSE;
+        this->rogue_onu_detection_process.detection_algorithm.u.early_rogue_detection.alloc_type_to_scan = BCMOLT_ALLOC_TYPE_TO_SCAN_ALL;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PERIODIC_STANDBY_PON_MONITORING)) != 0)
+    {
+        this->periodic_standby_pon_monitoring.interval = 5000;
+        this->periodic_standby_pon_monitoring.control = BCMOLT_CONTROL_STATE_DISABLE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_DBA_MODE)) != 0)
+    {
+        this->dba_mode = BCMOLT_DBA_MODE_NORMAL;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PLOAM_HANDLING)) != 0)
+    {
+        this->ploam_handling.ack_timeout = 2000;
+        this->ploam_handling.retrans_ranging_time = 0;
+        this->ploam_handling.retrans_assign_alloc_id = 0;
+        this->ploam_handling.retrans_key_control = 0;
+        this->ploam_handling.retrans_request_registration = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_MIN_DATA_ALLOC_ID)) != 0)
+    {
+        this->min_data_alloc_id = (bcmolt_xgpon_alloc_id) 1024;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_MIN_DATA_GEM_PORT_ID)) != 0)
+    {
+        this->min_data_gem_port_id = (bcmolt_xgpon_gem_id) 1024;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_MULTICAST_KEY)) != 0)
+    {
+        memset(this->multicast_key.key.bytes, 0, sizeof(this->multicast_key.key.bytes));
+        this->multicast_key.key_control = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PRBS_CHECKER)) != 0)
+    {
+        this->prbs_checker.polynom = BCMOLT_PRBS_POLYNOMIAL_PRBS_7;
+        this->prbs_checker.mode = BCMOLT_PRBS_CHECKER_MODE_SELF_SYNC;
+        this->prbs_checker.data_invert = BCMOS_FALSE;
+        this->prbs_checker.control = BCMOLT_CONTROL_STATE_DISABLE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PRBS_GENERATOR)) != 0)
+    {
+        this->prbs_generator.polynom = BCMOLT_PRBS_POLYNOMIAL_PRBS_7;
+        this->prbs_generator.error_insert = BCMOS_FALSE;
+        this->prbs_generator.invert = BCMOS_FALSE;
+        this->prbs_generator.control = BCMOLT_CONTROL_STATE_DISABLE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PRBS_STATUS)) != 0)
+    {
+        this->prbs_status.lock_state = BCMOLT_PRBS_LOCK_STATE_UNLOCKED;
+        this->prbs_status.error_counts = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_AUTOMATIC_ONU_DEACTIVATION)) != 0)
+    {
+        this->automatic_onu_deactivation.los = BCMOS_FALSE;
+        this->automatic_onu_deactivation.onu_alarms = BCMOS_FALSE;
+        this->automatic_onu_deactivation.tiwi = BCMOS_FALSE;
+        this->automatic_onu_deactivation.ack_timeout = BCMOS_FALSE;
+        this->automatic_onu_deactivation.sfi = BCMOS_FALSE;
+        this->automatic_onu_deactivation.loki = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_US_BANDWIDTH_LIMIT)) != 0)
+    {
+        this->us_bandwidth_limit = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_ALL_ONUS)) != 0)
+    {
+        this->all_onus.len = 0;
+        this->all_onus.val = NULL;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_ALL_MCAST_GEM_PORTS)) != 0)
+    {
+        this->all_mcast_gem_ports.len = 0;
+        this->all_mcast_gem_ports.val = NULL;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_DEBUG)) != 0)
+    {
+        this->debug.increase_available_cbr_bw = BCMOS_FALSE;
+        this->debug.inter_burst_gap_in_bytes = 512;
+        this->debug.number_of_gem_ports_per_onu = 64;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_ONU_UPGRADE_PARAMS)) != 0)
+    {
+        this->onu_upgrade_params.response_timeout_ms = 1000;
+        this->onu_upgrade_params.max_retry_count = 23;
+        this->onu_upgrade_params.omci_format = BCMOLT_OMCI_DEVICE_ID_EXTENDED;
+        this->onu_upgrade_params.window_size = 32;
+        this->onu_upgrade_params.activate_commit = BCMOS_FALSE;
+        this->onu_upgrade_params.delay_for_commit_ms = 40000UL;
+        this->onu_upgrade_params.max_activation_attempts = 23;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_DS_FEC_MODE)) != 0)
+    {
+        this->ds_fec_mode = BCMOLT_CONTROL_STATE_ENABLE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_DBA_TYPE)) != 0)
+    {
+        this->dba_type = BCMOLT_DBA_TYPE_INTERNAL;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_ONU_TUNING)) != 0)
+    {
+        this->onu_tuning.tsource = 1000;
+        this->onu_tuning.ttarget = 1000;
+        this->onu_tuning.request_registration_required = BCMOS_TRUE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_cfg_data_pack(const bcmolt_xgpon_ni_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_HW_PON_ID)) != 0)
+    {
+        if (!bcmolt_hw_pon_id_pack(&this->hw_pon_id, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_AVAILABLE_BANDWIDTH)) != 0)
+    {
+        if (!bcmolt_pon_available_bandwidth_pack(&this->available_bandwidth, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_NUMBER_OF_ACTIVE_ONUS)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, this->number_of_active_onus))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PON_STATUS)) != 0)
+    {
+        if (!bcmolt_pon_status_pack(&this->pon_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PON_DISTANCE)) != 0)
+    {
+        if (!bcmolt_pon_distance_pack(&this->pon_distance, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_RANGING_WINDOW_SIZE)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->ranging_window_size))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_EQD_CYCLES_NUMBER)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->eqd_cycles_number))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_DRIFT_CONTROL)) != 0)
+    {
+        if (!bcmolt_pon_drift_control_pack(&this->drift_control, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_LOS_ALARM_THRESHOLD)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->los_alarm_threshold))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_LOS_INITIAL_VALUE)) != 0)
+    {
+        if (!bcmolt_status_pack(this->los_initial_value, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_ONU_ALARMS_THRESHOLDS)) != 0)
+    {
+        if (!bcmolt_xgpon_onu_alarms_thresholds_pack(&this->onu_alarms_thresholds, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_BER_MONITOR)) != 0)
+    {
+        if (!bcmolt_ber_monitor_params_pack(&this->ber_monitor, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_ONU_ACTIVATION)) != 0)
+    {
+        if (!bcmolt_xgpon_onu_activation_pack(&this->onu_activation, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_SN_ACQUISITION)) != 0)
+    {
+        if (!bcmolt_xgpon_sn_acquisition_pack(&this->sn_acquisition, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_KEY_EXCHANGE)) != 0)
+    {
+        if (!bcmolt_xgpon_key_exchange_pack(&this->key_exchange, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PROTECTION_SWITCHING)) != 0)
+    {
+        if (!bcmolt_xgpon_protection_switching_pack(&this->protection_switching, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PROTECTION_SWITCHING_DEBUG)) != 0)
+    {
+        if (!bcmolt_xgpon_protection_switching_debug_pack(&this->protection_switching_debug, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_CBR_RT_ALLOCATION_PROFILE)) != 0)
+    {
+        if (!bcmolt_cbr_rt_allocation_profile_pack(&this->cbr_rt_allocation_profile, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_CBR_NRT_ALLOCATION_PROFILE)) != 0)
+    {
+        if (!bcmolt_arr_u16_2_pack(&this->cbr_nrt_allocation_profile, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_POWER_MANAGEMENT)) != 0)
+    {
+        if (!bcmolt_onu_power_management_configuration_pack(&this->power_management, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_ROGUE_ONU_DETECTION_PROCESS)) != 0)
+    {
+        if (!bcmolt_rogue_onu_detection_process_pack(&this->rogue_onu_detection_process, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PERIODIC_STANDBY_PON_MONITORING)) != 0)
+    {
+        if (!bcmolt_periodic_standby_pon_monitoring_pack(&this->periodic_standby_pon_monitoring, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_DBA_MODE)) != 0)
+    {
+        if (!bcmolt_dba_mode_pack(this->dba_mode, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PLOAM_HANDLING)) != 0)
+    {
+        if (!bcmolt_xgpon_ploam_handling_pack(&this->ploam_handling, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_MIN_DATA_ALLOC_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->min_data_alloc_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_MIN_DATA_GEM_PORT_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->min_data_gem_port_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_MULTICAST_KEY)) != 0)
+    {
+        if (!bcmolt_xgpon_multicast_key_pack(&this->multicast_key, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PRBS_CHECKER)) != 0)
+    {
+        if (!bcmolt_prbs_checker_config_pack(&this->prbs_checker, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PRBS_GENERATOR)) != 0)
+    {
+        if (!bcmolt_prbs_generator_config_pack(&this->prbs_generator, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PRBS_STATUS)) != 0)
+    {
+        if (!bcmolt_prbs_status_pack(&this->prbs_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_AUTOMATIC_ONU_DEACTIVATION)) != 0)
+    {
+        if (!bcmolt_automatic_onu_deactivation_pack(&this->automatic_onu_deactivation, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_US_BANDWIDTH_LIMIT)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->us_bandwidth_limit))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_ALL_ONUS)) != 0)
+    {
+        if (!bcmolt_xgpon_onu_with_state_list_u16_max_510_pack(&this->all_onus, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_ALL_MCAST_GEM_PORTS)) != 0)
+    {
+        if (!bcmolt_xgpon_gem_port_with_state_list_u16_max_128_pack(&this->all_mcast_gem_ports, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_DEBUG)) != 0)
+    {
+        if (!bcmolt_xgpon_ni_debug_pack(&this->debug, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_ONU_UPGRADE_PARAMS)) != 0)
+    {
+        if (!bcmolt_gpon_onu_upgrade_params_pack(&this->onu_upgrade_params, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_DS_FEC_MODE)) != 0)
+    {
+        if (!bcmolt_control_state_pack(this->ds_fec_mode, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_DBA_TYPE)) != 0)
+    {
+        if (!bcmolt_dba_type_pack(this->dba_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_ONU_TUNING)) != 0)
+    {
+        if (!bcmolt_onu_tuning_configuration_pack(&this->onu_tuning, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_ni_cfg_data_get_packed_length(const bcmolt_xgpon_ni_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_HW_PON_ID)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_AVAILABLE_BANDWIDTH)) != 0)
+    {
+        count += 12;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_NUMBER_OF_ACTIVE_ONUS)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PON_STATUS)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PON_DISTANCE)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_RANGING_WINDOW_SIZE)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_EQD_CYCLES_NUMBER)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_DRIFT_CONTROL)) != 0)
+    {
+        count += 6;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_LOS_ALARM_THRESHOLD)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_LOS_INITIAL_VALUE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_ONU_ALARMS_THRESHOLDS)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_BER_MONITOR)) != 0)
+    {
+        count += 6;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_ONU_ACTIVATION)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_SN_ACQUISITION)) != 0)
+    {
+        count += 7;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_KEY_EXCHANGE)) != 0)
+    {
+        count += 6;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PROTECTION_SWITCHING)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PROTECTION_SWITCHING_DEBUG)) != 0)
+    {
+        count += 5;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_CBR_RT_ALLOCATION_PROFILE)) != 0)
+    {
+        count += 6;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_CBR_NRT_ALLOCATION_PROFILE)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_POWER_MANAGEMENT)) != 0)
+    {
+        count += 18;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_ROGUE_ONU_DETECTION_PROCESS)) != 0)
+    {
+        count += bcmolt_rogue_onu_detection_process_get_packed_length(&this->rogue_onu_detection_process);
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PERIODIC_STANDBY_PON_MONITORING)) != 0)
+    {
+        count += 5;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_DBA_MODE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PLOAM_HANDLING)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_MIN_DATA_ALLOC_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_MIN_DATA_GEM_PORT_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_MULTICAST_KEY)) != 0)
+    {
+        count += 17;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PRBS_CHECKER)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PRBS_GENERATOR)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PRBS_STATUS)) != 0)
+    {
+        count += 5;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_AUTOMATIC_ONU_DEACTIVATION)) != 0)
+    {
+        count += 6;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_US_BANDWIDTH_LIMIT)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_ALL_ONUS)) != 0)
+    {
+        count += bcmolt_xgpon_onu_with_state_list_u16_max_510_get_packed_length(&this->all_onus);
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_ALL_MCAST_GEM_PORTS)) != 0)
+    {
+        count += bcmolt_xgpon_gem_port_with_state_list_u16_max_128_get_packed_length(&this->all_mcast_gem_ports);
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_DEBUG)) != 0)
+    {
+        count += 5;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_ONU_UPGRADE_PARAMS)) != 0)
+    {
+        count += 14;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_DS_FEC_MODE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_DBA_TYPE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_ONU_TUNING)) != 0)
+    {
+        count += 9;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_cfg_data_unpack(bcmolt_xgpon_ni_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_HW_PON_ID)) != 0)
+    {
+        if (!bcmolt_hw_pon_id_unpack(&this->hw_pon_id, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_AVAILABLE_BANDWIDTH)) != 0)
+    {
+        if (!bcmolt_pon_available_bandwidth_unpack(&this->available_bandwidth, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_NUMBER_OF_ACTIVE_ONUS)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, &this->number_of_active_onus))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PON_STATUS)) != 0)
+    {
+        if (!bcmolt_pon_status_unpack(&this->pon_status, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PON_DISTANCE)) != 0)
+    {
+        if (!bcmolt_pon_distance_unpack(&this->pon_distance, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_RANGING_WINDOW_SIZE)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->ranging_window_size))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_EQD_CYCLES_NUMBER)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->eqd_cycles_number))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_DRIFT_CONTROL)) != 0)
+    {
+        if (!bcmolt_pon_drift_control_unpack(&this->drift_control, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_LOS_ALARM_THRESHOLD)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->los_alarm_threshold))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_LOS_INITIAL_VALUE)) != 0)
+    {
+        if (!bcmolt_status_unpack(&this->los_initial_value, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_ONU_ALARMS_THRESHOLDS)) != 0)
+    {
+        if (!bcmolt_xgpon_onu_alarms_thresholds_unpack(&this->onu_alarms_thresholds, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_BER_MONITOR)) != 0)
+    {
+        if (!bcmolt_ber_monitor_params_unpack(&this->ber_monitor, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_ONU_ACTIVATION)) != 0)
+    {
+        if (!bcmolt_xgpon_onu_activation_unpack(&this->onu_activation, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_SN_ACQUISITION)) != 0)
+    {
+        if (!bcmolt_xgpon_sn_acquisition_unpack(&this->sn_acquisition, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_KEY_EXCHANGE)) != 0)
+    {
+        if (!bcmolt_xgpon_key_exchange_unpack(&this->key_exchange, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PROTECTION_SWITCHING)) != 0)
+    {
+        if (!bcmolt_xgpon_protection_switching_unpack(&this->protection_switching, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PROTECTION_SWITCHING_DEBUG)) != 0)
+    {
+        if (!bcmolt_xgpon_protection_switching_debug_unpack(&this->protection_switching_debug, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_CBR_RT_ALLOCATION_PROFILE)) != 0)
+    {
+        if (!bcmolt_cbr_rt_allocation_profile_unpack(&this->cbr_rt_allocation_profile, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_CBR_NRT_ALLOCATION_PROFILE)) != 0)
+    {
+        if (!bcmolt_arr_u16_2_unpack(&this->cbr_nrt_allocation_profile, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_POWER_MANAGEMENT)) != 0)
+    {
+        if (!bcmolt_onu_power_management_configuration_unpack(&this->power_management, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_ROGUE_ONU_DETECTION_PROCESS)) != 0)
+    {
+        if (!bcmolt_rogue_onu_detection_process_unpack(&this->rogue_onu_detection_process, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PERIODIC_STANDBY_PON_MONITORING)) != 0)
+    {
+        if (!bcmolt_periodic_standby_pon_monitoring_unpack(&this->periodic_standby_pon_monitoring, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_DBA_MODE)) != 0)
+    {
+        if (!bcmolt_dba_mode_unpack(&this->dba_mode, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PLOAM_HANDLING)) != 0)
+    {
+        if (!bcmolt_xgpon_ploam_handling_unpack(&this->ploam_handling, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_MIN_DATA_ALLOC_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->min_data_alloc_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_MIN_DATA_GEM_PORT_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->min_data_gem_port_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_MULTICAST_KEY)) != 0)
+    {
+        if (!bcmolt_xgpon_multicast_key_unpack(&this->multicast_key, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PRBS_CHECKER)) != 0)
+    {
+        if (!bcmolt_prbs_checker_config_unpack(&this->prbs_checker, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PRBS_GENERATOR)) != 0)
+    {
+        if (!bcmolt_prbs_generator_config_unpack(&this->prbs_generator, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PRBS_STATUS)) != 0)
+    {
+        if (!bcmolt_prbs_status_unpack(&this->prbs_status, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_AUTOMATIC_ONU_DEACTIVATION)) != 0)
+    {
+        if (!bcmolt_automatic_onu_deactivation_unpack(&this->automatic_onu_deactivation, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_US_BANDWIDTH_LIMIT)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->us_bandwidth_limit))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_ALL_ONUS)) != 0)
+    {
+        if (!bcmolt_xgpon_onu_with_state_list_u16_max_510_unpack(&this->all_onus, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_ALL_MCAST_GEM_PORTS)) != 0)
+    {
+        if (!bcmolt_xgpon_gem_port_with_state_list_u16_max_128_unpack(&this->all_mcast_gem_ports, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_DEBUG)) != 0)
+    {
+        if (!bcmolt_xgpon_ni_debug_unpack(&this->debug, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_ONU_UPGRADE_PARAMS)) != 0)
+    {
+        if (!bcmolt_gpon_onu_upgrade_params_unpack(&this->onu_upgrade_params, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_DS_FEC_MODE)) != 0)
+    {
+        if (!bcmolt_control_state_unpack(&this->ds_fec_mode, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_DBA_TYPE)) != 0)
+    {
+        if (!bcmolt_dba_type_unpack(&this->dba_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_ONU_TUNING)) != 0)
+    {
+        if (!bcmolt_onu_tuning_configuration_unpack(&this->onu_tuning, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_HW_PON_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_AVAILABLE_BANDWIDTH)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 12))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_NUMBER_OF_ACTIVE_ONUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PON_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PON_DISTANCE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_RANGING_WINDOW_SIZE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_EQD_CYCLES_NUMBER)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_DRIFT_CONTROL)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 6))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_LOS_ALARM_THRESHOLD)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_LOS_INITIAL_VALUE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_ONU_ALARMS_THRESHOLDS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_BER_MONITOR)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 6))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_ONU_ACTIVATION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_SN_ACQUISITION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 7))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_KEY_EXCHANGE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 6))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PROTECTION_SWITCHING)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PROTECTION_SWITCHING_DEBUG)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 5))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_CBR_RT_ALLOCATION_PROFILE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 6))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_CBR_NRT_ALLOCATION_PROFILE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_POWER_MANAGEMENT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 18))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_ROGUE_ONU_DETECTION_PROCESS)) != 0)
+    {
+        if (!bcmolt_rogue_onu_detection_process_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PERIODIC_STANDBY_PON_MONITORING)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 5))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_DBA_MODE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PLOAM_HANDLING)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_MIN_DATA_ALLOC_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_MIN_DATA_GEM_PORT_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_MULTICAST_KEY)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 17))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PRBS_CHECKER)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PRBS_GENERATOR)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PRBS_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 5))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_AUTOMATIC_ONU_DEACTIVATION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 6))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_US_BANDWIDTH_LIMIT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_ALL_ONUS)) != 0)
+    {
+        if (!bcmolt_xgpon_onu_with_state_list_u16_max_510_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_ALL_MCAST_GEM_PORTS)) != 0)
+    {
+        if (!bcmolt_xgpon_gem_port_with_state_list_u16_max_128_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_DEBUG)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 5))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_ONU_UPGRADE_PARAMS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 14))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_DS_FEC_MODE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_DBA_TYPE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_ONU_TUNING)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 9))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_cfg_data_bounds_check(const bcmolt_xgpon_ni_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_HW_PON_ID)) != 0)
+    {
+        if (!bcmolt_hw_pon_id_bounds_check(&this->hw_pon_id))
+        {
+            *failed_prop = BCMOLT_XGPON_NI_CFG_ID_HW_PON_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_AVAILABLE_BANDWIDTH)) != 0)
+    {
+        if (!bcmolt_pon_available_bandwidth_bounds_check(&this->available_bandwidth))
+        {
+            *failed_prop = BCMOLT_XGPON_NI_CFG_ID_AVAILABLE_BANDWIDTH;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PON_STATUS)) != 0)
+    {
+        if (!bcmolt_pon_status_bounds_check(&this->pon_status))
+        {
+            *failed_prop = BCMOLT_XGPON_NI_CFG_ID_PON_STATUS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PON_DISTANCE)) != 0)
+    {
+        if (!bcmolt_pon_distance_bounds_check(&this->pon_distance))
+        {
+            *failed_prop = BCMOLT_XGPON_NI_CFG_ID_PON_DISTANCE;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_EQD_CYCLES_NUMBER)) != 0)
+    {
+        if (this->eqd_cycles_number > 255)
+        {
+            *failed_prop = BCMOLT_XGPON_NI_CFG_ID_EQD_CYCLES_NUMBER;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_DRIFT_CONTROL)) != 0)
+    {
+        if (!bcmolt_pon_drift_control_bounds_check(&this->drift_control))
+        {
+            *failed_prop = BCMOLT_XGPON_NI_CFG_ID_DRIFT_CONTROL;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_LOS_INITIAL_VALUE)) != 0)
+    {
+        switch (this->los_initial_value)
+        {
+            case BCMOLT_STATUS_OFF:
+                break;
+            case BCMOLT_STATUS_ON:
+                break;
+            case BCMOLT_STATUS_NO_CHANGE:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_NI_CFG_ID_LOS_INITIAL_VALUE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_ONU_ALARMS_THRESHOLDS)) != 0)
+    {
+        if (!bcmolt_xgpon_onu_alarms_thresholds_bounds_check(&this->onu_alarms_thresholds))
+        {
+            *failed_prop = BCMOLT_XGPON_NI_CFG_ID_ONU_ALARMS_THRESHOLDS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_BER_MONITOR)) != 0)
+    {
+        if (!bcmolt_ber_monitor_params_bounds_check(&this->ber_monitor))
+        {
+            *failed_prop = BCMOLT_XGPON_NI_CFG_ID_BER_MONITOR;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_ONU_ACTIVATION)) != 0)
+    {
+        if (!bcmolt_xgpon_onu_activation_bounds_check(&this->onu_activation))
+        {
+            *failed_prop = BCMOLT_XGPON_NI_CFG_ID_ONU_ACTIVATION;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_SN_ACQUISITION)) != 0)
+    {
+        if (!bcmolt_xgpon_sn_acquisition_bounds_check(&this->sn_acquisition))
+        {
+            *failed_prop = BCMOLT_XGPON_NI_CFG_ID_SN_ACQUISITION;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_KEY_EXCHANGE)) != 0)
+    {
+        if (!bcmolt_xgpon_key_exchange_bounds_check(&this->key_exchange))
+        {
+            *failed_prop = BCMOLT_XGPON_NI_CFG_ID_KEY_EXCHANGE;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PROTECTION_SWITCHING)) != 0)
+    {
+        if (!bcmolt_xgpon_protection_switching_bounds_check(&this->protection_switching))
+        {
+            *failed_prop = BCMOLT_XGPON_NI_CFG_ID_PROTECTION_SWITCHING;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PROTECTION_SWITCHING_DEBUG)) != 0)
+    {
+        if (!bcmolt_xgpon_protection_switching_debug_bounds_check(&this->protection_switching_debug))
+        {
+            *failed_prop = BCMOLT_XGPON_NI_CFG_ID_PROTECTION_SWITCHING_DEBUG;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_CBR_RT_ALLOCATION_PROFILE)) != 0)
+    {
+        if (!bcmolt_cbr_rt_allocation_profile_bounds_check(&this->cbr_rt_allocation_profile))
+        {
+            *failed_prop = BCMOLT_XGPON_NI_CFG_ID_CBR_RT_ALLOCATION_PROFILE;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_CBR_NRT_ALLOCATION_PROFILE)) != 0)
+    {
+        if (!bcmolt_arr_u16_2_bounds_check(&this->cbr_nrt_allocation_profile))
+        {
+            *failed_prop = BCMOLT_XGPON_NI_CFG_ID_CBR_NRT_ALLOCATION_PROFILE;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_POWER_MANAGEMENT)) != 0)
+    {
+        if (!bcmolt_onu_power_management_configuration_bounds_check(&this->power_management))
+        {
+            *failed_prop = BCMOLT_XGPON_NI_CFG_ID_POWER_MANAGEMENT;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_ROGUE_ONU_DETECTION_PROCESS)) != 0)
+    {
+        if (!bcmolt_rogue_onu_detection_process_bounds_check(&this->rogue_onu_detection_process))
+        {
+            *failed_prop = BCMOLT_XGPON_NI_CFG_ID_ROGUE_ONU_DETECTION_PROCESS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PERIODIC_STANDBY_PON_MONITORING)) != 0)
+    {
+        if (!bcmolt_periodic_standby_pon_monitoring_bounds_check(&this->periodic_standby_pon_monitoring))
+        {
+            *failed_prop = BCMOLT_XGPON_NI_CFG_ID_PERIODIC_STANDBY_PON_MONITORING;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_DBA_MODE)) != 0)
+    {
+        switch (this->dba_mode)
+        {
+            case BCMOLT_DBA_MODE_NORMAL:
+                break;
+            case BCMOLT_DBA_MODE_EXTENDED:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_NI_CFG_ID_DBA_MODE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PLOAM_HANDLING)) != 0)
+    {
+        if (!bcmolt_xgpon_ploam_handling_bounds_check(&this->ploam_handling))
+        {
+            *failed_prop = BCMOLT_XGPON_NI_CFG_ID_PLOAM_HANDLING;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_MIN_DATA_ALLOC_ID)) != 0)
+    {
+        if (this->min_data_alloc_id < (bcmolt_xgpon_alloc_id) 1024)
+        {
+            *failed_prop = BCMOLT_XGPON_NI_CFG_ID_MIN_DATA_ALLOC_ID;
+            return BCMOS_FALSE;
+        }
+
+        if (this->min_data_alloc_id > (bcmolt_xgpon_alloc_id) 14591)
+        {
+            *failed_prop = BCMOLT_XGPON_NI_CFG_ID_MIN_DATA_ALLOC_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_MIN_DATA_GEM_PORT_ID)) != 0)
+    {
+        if (this->min_data_gem_port_id < (bcmolt_xgpon_gem_id) 1024)
+        {
+            *failed_prop = BCMOLT_XGPON_NI_CFG_ID_MIN_DATA_GEM_PORT_ID;
+            return BCMOS_FALSE;
+        }
+
+        if (this->min_data_gem_port_id > (bcmolt_xgpon_gem_id) 57598U)
+        {
+            *failed_prop = BCMOLT_XGPON_NI_CFG_ID_MIN_DATA_GEM_PORT_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_MULTICAST_KEY)) != 0)
+    {
+        if (!bcmolt_xgpon_multicast_key_bounds_check(&this->multicast_key))
+        {
+            *failed_prop = BCMOLT_XGPON_NI_CFG_ID_MULTICAST_KEY;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PRBS_CHECKER)) != 0)
+    {
+        if (!bcmolt_prbs_checker_config_bounds_check(&this->prbs_checker))
+        {
+            *failed_prop = BCMOLT_XGPON_NI_CFG_ID_PRBS_CHECKER;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PRBS_GENERATOR)) != 0)
+    {
+        if (!bcmolt_prbs_generator_config_bounds_check(&this->prbs_generator))
+        {
+            *failed_prop = BCMOLT_XGPON_NI_CFG_ID_PRBS_GENERATOR;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_PRBS_STATUS)) != 0)
+    {
+        if (!bcmolt_prbs_status_bounds_check(&this->prbs_status))
+        {
+            *failed_prop = BCMOLT_XGPON_NI_CFG_ID_PRBS_STATUS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_AUTOMATIC_ONU_DEACTIVATION)) != 0)
+    {
+        if (!bcmolt_automatic_onu_deactivation_bounds_check(&this->automatic_onu_deactivation))
+        {
+            *failed_prop = BCMOLT_XGPON_NI_CFG_ID_AUTOMATIC_ONU_DEACTIVATION;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_ALL_ONUS)) != 0)
+    {
+        if (this->all_onus.len > 510)
+        {
+            return BCMOS_FALSE;
+        }
+
+        if (!bcmolt_xgpon_onu_with_state_list_u16_max_510_bounds_check(&this->all_onus))
+        {
+            *failed_prop = BCMOLT_XGPON_NI_CFG_ID_ALL_ONUS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_ALL_MCAST_GEM_PORTS)) != 0)
+    {
+        if (this->all_mcast_gem_ports.len > 128)
+        {
+            return BCMOS_FALSE;
+        }
+
+        if (!bcmolt_xgpon_gem_port_with_state_list_u16_max_128_bounds_check(&this->all_mcast_gem_ports))
+        {
+            *failed_prop = BCMOLT_XGPON_NI_CFG_ID_ALL_MCAST_GEM_PORTS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_DEBUG)) != 0)
+    {
+        if (!bcmolt_xgpon_ni_debug_bounds_check(&this->debug))
+        {
+            *failed_prop = BCMOLT_XGPON_NI_CFG_ID_DEBUG;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_ONU_UPGRADE_PARAMS)) != 0)
+    {
+        if (!bcmolt_gpon_onu_upgrade_params_bounds_check(&this->onu_upgrade_params))
+        {
+            *failed_prop = BCMOLT_XGPON_NI_CFG_ID_ONU_UPGRADE_PARAMS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_DS_FEC_MODE)) != 0)
+    {
+        switch (this->ds_fec_mode)
+        {
+            case BCMOLT_CONTROL_STATE_DISABLE:
+                break;
+            case BCMOLT_CONTROL_STATE_ENABLE:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_NI_CFG_ID_DS_FEC_MODE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_DBA_TYPE)) != 0)
+    {
+        switch (this->dba_type)
+        {
+            case BCMOLT_DBA_TYPE_INTERNAL:
+                break;
+            case BCMOLT_DBA_TYPE_PARTIAL_EXTERNAL:
+                break;
+            case BCMOLT_DBA_TYPE_EXTERNAL:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_NI_CFG_ID_DBA_TYPE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CFG_ID_ONU_TUNING)) != 0)
+    {
+        if (!bcmolt_onu_tuning_configuration_bounds_check(&this->onu_tuning))
+        {
+            *failed_prop = BCMOLT_XGPON_NI_CFG_ID_ONU_TUNING;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_ni_stat_data_set_default(bcmolt_xgpon_ni_stat_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_FEC_CODEWORDS)) != 0)
+    {
+        this->fec_codewords = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_BIP32_BYTES)) != 0)
+    {
+        this->bip32_bytes = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_BIP32_ERRORS)) != 0)
+    {
+        this->bip32_errors = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_XGTC_HEADERS)) != 0)
+    {
+        this->rx_xgtc_headers = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_XGTC_CORRECTED)) != 0)
+    {
+        this->rx_xgtc_corrected = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_XGTC_UNCORRECTED)) != 0)
+    {
+        this->rx_xgtc_uncorrected = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_XGEM)) != 0)
+    {
+        this->rx_xgem = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_XGEM_DROPPED)) != 0)
+    {
+        this->rx_xgem_dropped = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_XGEM_IDLE)) != 0)
+    {
+        this->rx_xgem_idle = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_XGEM_CORRECTED)) != 0)
+    {
+        this->rx_xgem_corrected = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_CRC_ERROR)) != 0)
+    {
+        this->rx_crc_error = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_FRAGMENT_ERROR)) != 0)
+    {
+        this->rx_fragment_error = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_PACKETS_DROPPED)) != 0)
+    {
+        this->rx_packets_dropped = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_DROPPED_TOO_SHORT)) != 0)
+    {
+        this->rx_dropped_too_short = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_DROPPED_TOO_LONG)) != 0)
+    {
+        this->rx_dropped_too_long = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_KEY_ERROR)) != 0)
+    {
+        this->rx_key_error = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_TX_PLOAMS)) != 0)
+    {
+        this->tx_ploams = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS_DROPPED)) != 0)
+    {
+        this->rx_ploams_dropped = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_ALLOCATIONS_VALID)) != 0)
+    {
+        this->rx_allocations_valid = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_ALLOCATIONS_INVALID)) != 0)
+    {
+        this->rx_allocations_invalid = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_ALLOCATIONS_DISABLED)) != 0)
+    {
+        this->rx_allocations_disabled = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS)) != 0)
+    {
+        this->rx_ploams = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS_NON_IDLE)) != 0)
+    {
+        this->rx_ploams_non_idle = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS_ERROR)) != 0)
+    {
+        this->rx_ploams_error = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_CPU)) != 0)
+    {
+        this->rx_cpu = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_OMCI)) != 0)
+    {
+        this->rx_omci = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR)) != 0)
+    {
+        this->rx_omci_packets_crc_error = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_TX_PACKETS)) != 0)
+    {
+        this->tx_packets = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_TX_XGEM)) != 0)
+    {
+        this->tx_xgem = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_TX_CPU)) != 0)
+    {
+        this->tx_cpu = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_TX_OMCI)) != 0)
+    {
+        this->tx_omci = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_TX_CPU_OMCI_PACKETS_DROPPED)) != 0)
+    {
+        this->tx_cpu_omci_packets_dropped = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_TX_DROPPED_ILLEGAL_LENGTH)) != 0)
+    {
+        this->tx_dropped_illegal_length = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_TX_DROPPED_TPID_MISS)) != 0)
+    {
+        this->tx_dropped_tpid_miss = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_TX_DROPPED_VID_MISS)) != 0)
+    {
+        this->tx_dropped_vid_miss = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_stat_data_pack(const bcmolt_xgpon_ni_stat_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_FEC_CODEWORDS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->fec_codewords))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_BIP32_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->bip32_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_BIP32_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->bip32_errors))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_XGTC_HEADERS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_xgtc_headers))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_XGTC_CORRECTED)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_xgtc_corrected))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_XGTC_UNCORRECTED)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_xgtc_uncorrected))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_XGEM)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_xgem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_XGEM_DROPPED)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_xgem_dropped))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_XGEM_IDLE)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_xgem_idle))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_XGEM_CORRECTED)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_xgem_corrected))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_CRC_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_crc_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_FRAGMENT_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_fragment_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_PACKETS_DROPPED)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_packets_dropped))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_DROPPED_TOO_SHORT)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_dropped_too_short))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_DROPPED_TOO_LONG)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_dropped_too_long))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_KEY_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_key_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_TX_PLOAMS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_ploams))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS_DROPPED)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_ploams_dropped))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_ALLOCATIONS_VALID)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_allocations_valid))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_ALLOCATIONS_INVALID)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_allocations_invalid))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_ALLOCATIONS_DISABLED)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_allocations_disabled))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_ploams))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS_NON_IDLE)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_ploams_non_idle))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_ploams_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_CPU)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_cpu))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_OMCI)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_omci))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_omci_packets_crc_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_TX_PACKETS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_packets))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_TX_XGEM)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_xgem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_TX_CPU)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_cpu))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_TX_OMCI)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_omci))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_TX_CPU_OMCI_PACKETS_DROPPED)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->tx_cpu_omci_packets_dropped))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_TX_DROPPED_ILLEGAL_LENGTH)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_dropped_illegal_length))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_TX_DROPPED_TPID_MISS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_dropped_tpid_miss))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_TX_DROPPED_VID_MISS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_dropped_vid_miss))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_ni_stat_data_get_packed_length(const bcmolt_xgpon_ni_stat_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_FEC_CODEWORDS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_BIP32_BYTES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_BIP32_ERRORS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_XGTC_HEADERS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_XGTC_CORRECTED)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_XGTC_UNCORRECTED)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_XGEM)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_XGEM_DROPPED)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_XGEM_IDLE)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_XGEM_CORRECTED)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_CRC_ERROR)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_FRAGMENT_ERROR)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_PACKETS_DROPPED)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_DROPPED_TOO_SHORT)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_DROPPED_TOO_LONG)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_KEY_ERROR)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_TX_PLOAMS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS_DROPPED)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_ALLOCATIONS_VALID)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_ALLOCATIONS_INVALID)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_ALLOCATIONS_DISABLED)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS_NON_IDLE)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS_ERROR)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_CPU)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_OMCI)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_TX_PACKETS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_TX_XGEM)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_TX_CPU)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_TX_OMCI)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_TX_CPU_OMCI_PACKETS_DROPPED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_TX_DROPPED_ILLEGAL_LENGTH)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_TX_DROPPED_TPID_MISS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_TX_DROPPED_VID_MISS)) != 0)
+    {
+        count += 8;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_stat_data_unpack(bcmolt_xgpon_ni_stat_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_FEC_CODEWORDS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->fec_codewords))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_BIP32_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->bip32_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_BIP32_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->bip32_errors))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_XGTC_HEADERS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_xgtc_headers))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_XGTC_CORRECTED)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_xgtc_corrected))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_XGTC_UNCORRECTED)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_xgtc_uncorrected))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_XGEM)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_xgem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_XGEM_DROPPED)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_xgem_dropped))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_XGEM_IDLE)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_xgem_idle))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_XGEM_CORRECTED)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_xgem_corrected))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_CRC_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_crc_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_FRAGMENT_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_fragment_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_PACKETS_DROPPED)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_packets_dropped))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_DROPPED_TOO_SHORT)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_dropped_too_short))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_DROPPED_TOO_LONG)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_dropped_too_long))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_KEY_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_key_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_TX_PLOAMS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_ploams))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS_DROPPED)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_ploams_dropped))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_ALLOCATIONS_VALID)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_allocations_valid))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_ALLOCATIONS_INVALID)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_allocations_invalid))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_ALLOCATIONS_DISABLED)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_allocations_disabled))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_ploams))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS_NON_IDLE)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_ploams_non_idle))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_ploams_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_CPU)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_cpu))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_OMCI)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_omci))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_omci_packets_crc_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_TX_PACKETS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_packets))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_TX_XGEM)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_xgem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_TX_CPU)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_cpu))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_TX_OMCI)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_omci))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_TX_CPU_OMCI_PACKETS_DROPPED)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->tx_cpu_omci_packets_dropped))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_TX_DROPPED_ILLEGAL_LENGTH)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_dropped_illegal_length))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_TX_DROPPED_TPID_MISS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_dropped_tpid_miss))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_TX_DROPPED_VID_MISS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_dropped_vid_miss))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_stat_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_FEC_CODEWORDS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_BIP32_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_BIP32_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_XGTC_HEADERS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_XGTC_CORRECTED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_XGTC_UNCORRECTED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_XGEM)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_XGEM_DROPPED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_XGEM_IDLE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_XGEM_CORRECTED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_CRC_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_FRAGMENT_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_PACKETS_DROPPED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_DROPPED_TOO_SHORT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_DROPPED_TOO_LONG)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_KEY_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_TX_PLOAMS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS_DROPPED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_ALLOCATIONS_VALID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_ALLOCATIONS_INVALID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_ALLOCATIONS_DISABLED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS_NON_IDLE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_CPU)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_OMCI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_TX_PACKETS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_TX_XGEM)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_TX_CPU)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_TX_OMCI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_TX_CPU_OMCI_PACKETS_DROPPED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_TX_DROPPED_ILLEGAL_LENGTH)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_TX_DROPPED_TPID_MISS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ID_TX_DROPPED_VID_MISS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_stat_data_bounds_check(const bcmolt_xgpon_ni_stat_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_stat_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_ni_stat_cfg_data_set_default(bcmolt_xgpon_ni_stat_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_CFG_ID_CFG)) != 0)
+    {
+        this->cfg.trigger.type = BCMOLT_STAT_CONDITION_TYPE_NONE;
+        this->cfg.soak.active_soak_time = 0;
+        this->cfg.soak.clear_soak_time = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_stat_cfg_data_pack(const bcmolt_xgpon_ni_stat_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_pack(&this->cfg, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_ni_stat_cfg_data_get_packed_length(const bcmolt_xgpon_ni_stat_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_CFG_ID_CFG)) != 0)
+    {
+        count += bcmolt_stat_alarm_config_get_packed_length(&this->cfg);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_stat_cfg_data_unpack(bcmolt_xgpon_ni_stat_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_unpack(&this->cfg, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_stat_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_stat_cfg_data_bounds_check(const bcmolt_xgpon_ni_stat_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_stat_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_bounds_check(&this->cfg))
+        {
+            *failed_prop = BCMOLT_XGPON_NI_STAT_CFG_ID_CFG;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_ni_cpu_packets_failure_data_set_default(bcmolt_xgpon_ni_cpu_packets_failure_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CPU_PACKETS_FAILURE_ID_ERROR)) != 0)
+    {
+        this->error = BCMOLT_PACKET_INJECTION_ERROR_GEM_PORT_NOT_ACTIVE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CPU_PACKETS_FAILURE_ID_GEM_PORT_ID)) != 0)
+    {
+        this->gem_port_id = (bcmolt_xgpon_gem_id) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_cpu_packets_failure_data_pack(const bcmolt_xgpon_ni_cpu_packets_failure_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CPU_PACKETS_FAILURE_ID_ERROR)) != 0)
+    {
+        if (!bcmolt_packet_injection_error_pack(this->error, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CPU_PACKETS_FAILURE_ID_GEM_PORT_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->gem_port_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_ni_cpu_packets_failure_data_get_packed_length(const bcmolt_xgpon_ni_cpu_packets_failure_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CPU_PACKETS_FAILURE_ID_ERROR)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CPU_PACKETS_FAILURE_ID_GEM_PORT_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_cpu_packets_failure_data_unpack(bcmolt_xgpon_ni_cpu_packets_failure_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CPU_PACKETS_FAILURE_ID_ERROR)) != 0)
+    {
+        if (!bcmolt_packet_injection_error_unpack(&this->error, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CPU_PACKETS_FAILURE_ID_GEM_PORT_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->gem_port_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_cpu_packets_failure_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CPU_PACKETS_FAILURE_ID_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CPU_PACKETS_FAILURE_ID_GEM_PORT_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_cpu_packets_failure_data_bounds_check(const bcmolt_xgpon_ni_cpu_packets_failure_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_cpu_packets_failure_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CPU_PACKETS_FAILURE_ID_ERROR)) != 0)
+    {
+        switch (this->error)
+        {
+            case BCMOLT_PACKET_INJECTION_ERROR_GEM_PORT_NOT_ACTIVE:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_NI_CPU_PACKETS_FAILURE_ID_ERROR;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CPU_PACKETS_FAILURE_ID_GEM_PORT_ID)) != 0)
+    {
+        if (this->gem_port_id > (bcmolt_xgpon_gem_id) 65533U)
+        {
+            *failed_prop = BCMOLT_XGPON_NI_CPU_PACKETS_FAILURE_ID_GEM_PORT_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_ni_los_data_set_default(bcmolt_xgpon_ni_los_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_LOS_ID_STATUS)) != 0)
+    {
+        this->status = BCMOLT_STATUS_OFF;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_los_data_pack(const bcmolt_xgpon_ni_los_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_LOS_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_status_pack(this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_ni_los_data_get_packed_length(const bcmolt_xgpon_ni_los_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_LOS_ID_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_los_data_unpack(bcmolt_xgpon_ni_los_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_LOS_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_status_unpack(&this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_los_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_LOS_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_los_data_bounds_check(const bcmolt_xgpon_ni_los_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_los_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_LOS_ID_STATUS)) != 0)
+    {
+        switch (this->status)
+        {
+            case BCMOLT_STATUS_OFF:
+                break;
+            case BCMOLT_STATUS_ON:
+                break;
+            case BCMOLT_STATUS_NO_CHANGE:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_NI_LOS_ID_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_ni_onu_discovered_data_set_default(bcmolt_xgpon_ni_onu_discovered_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_SERIAL_NUMBER)) != 0)
+    {
+        memset(this->serial_number.vendor_id, 0, sizeof(this->serial_number.vendor_id));
+        memset(this->serial_number.vendor_specific, 0, sizeof(this->serial_number.vendor_specific));
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_RANGING_TIME)) != 0)
+    {
+        this->ranging_time = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_ONU_ID)) != 0)
+    {
+        this->onu_id = (bcmolt_xgpon_onu_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_UPSTREAM_LINE_RATE_CAPABILITIES)) != 0)
+    {
+        this->upstream_line_rate_capabilities = BCMOLT_UPSTREAM_LINE_RATE_CAPABILITIES_RATE_2_P_5_G;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_CURRENT_DOWNSTREAM_PON_ID)) != 0)
+    {
+        this->current_downstream_pon_id = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_CURRENT_UPSTREAM_PON_ID)) != 0)
+    {
+        this->current_upstream_pon_id = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_CALIBRATION_RECORD)) != 0)
+    {
+        memset(this->calibration_record.arr, 0, sizeof(this->calibration_record.arr));
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_TUNING_GRANULARITY)) != 0)
+    {
+        this->tuning_granularity = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_STEP_TUNING_TIME)) != 0)
+    {
+        this->step_tuning_time = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_ATTENUATION)) != 0)
+    {
+        this->attenuation = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_POWER_LEVELLING_CAPABILITIES)) != 0)
+    {
+        this->power_levelling_capabilities = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_onu_discovered_data_pack(const bcmolt_xgpon_ni_onu_discovered_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmolt_serial_number_pack(&this->serial_number, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_RANGING_TIME)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->ranging_time))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->onu_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_UPSTREAM_LINE_RATE_CAPABILITIES)) != 0)
+    {
+        if (!bcmolt_upstream_line_rate_capabilities_pack(this->upstream_line_rate_capabilities, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_CURRENT_DOWNSTREAM_PON_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->current_downstream_pon_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_CURRENT_UPSTREAM_PON_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->current_upstream_pon_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_CALIBRATION_RECORD)) != 0)
+    {
+        if (!bcmolt_arr_calibration_record_8_pack(&this->calibration_record, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_TUNING_GRANULARITY)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->tuning_granularity))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_STEP_TUNING_TIME)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->step_tuning_time))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_ATTENUATION)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->attenuation))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_POWER_LEVELLING_CAPABILITIES)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->power_levelling_capabilities))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_ni_onu_discovered_data_get_packed_length(const bcmolt_xgpon_ni_onu_discovered_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_SERIAL_NUMBER)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_RANGING_TIME)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_ONU_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_UPSTREAM_LINE_RATE_CAPABILITIES)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_CURRENT_DOWNSTREAM_PON_ID)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_CURRENT_UPSTREAM_PON_ID)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_CALIBRATION_RECORD)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_TUNING_GRANULARITY)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_STEP_TUNING_TIME)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_ATTENUATION)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_POWER_LEVELLING_CAPABILITIES)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_onu_discovered_data_unpack(bcmolt_xgpon_ni_onu_discovered_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmolt_serial_number_unpack(&this->serial_number, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_RANGING_TIME)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->ranging_time))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->onu_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_UPSTREAM_LINE_RATE_CAPABILITIES)) != 0)
+    {
+        if (!bcmolt_upstream_line_rate_capabilities_unpack(&this->upstream_line_rate_capabilities, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_CURRENT_DOWNSTREAM_PON_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->current_downstream_pon_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_CURRENT_UPSTREAM_PON_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->current_upstream_pon_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_CALIBRATION_RECORD)) != 0)
+    {
+        if (!bcmolt_arr_calibration_record_8_unpack(&this->calibration_record, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_TUNING_GRANULARITY)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->tuning_granularity))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_STEP_TUNING_TIME)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->step_tuning_time))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_ATTENUATION)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->attenuation))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_POWER_LEVELLING_CAPABILITIES)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->power_levelling_capabilities))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_onu_discovered_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_RANGING_TIME)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_UPSTREAM_LINE_RATE_CAPABILITIES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_CURRENT_DOWNSTREAM_PON_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_CURRENT_UPSTREAM_PON_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_CALIBRATION_RECORD)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_TUNING_GRANULARITY)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_STEP_TUNING_TIME)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_ATTENUATION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_POWER_LEVELLING_CAPABILITIES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_onu_discovered_data_bounds_check(const bcmolt_xgpon_ni_onu_discovered_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_onu_discovered_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmolt_serial_number_bounds_check(&this->serial_number))
+        {
+            *failed_prop = BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_SERIAL_NUMBER;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_ONU_ID)) != 0)
+    {
+        if (this->onu_id > (bcmolt_xgpon_onu_id) 511)
+        {
+            *failed_prop = BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_ONU_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_UPSTREAM_LINE_RATE_CAPABILITIES)) != 0)
+    {
+        switch (this->upstream_line_rate_capabilities)
+        {
+            case BCMOLT_UPSTREAM_LINE_RATE_CAPABILITIES_RATE_2_P_5_G:
+                break;
+            case BCMOLT_UPSTREAM_LINE_RATE_CAPABILITIES_RATE_10_G:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_UPSTREAM_LINE_RATE_CAPABILITIES;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_CALIBRATION_RECORD)) != 0)
+    {
+        if (!bcmolt_arr_calibration_record_8_bounds_check(&this->calibration_record))
+        {
+            *failed_prop = BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_CALIBRATION_RECORD;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_ATTENUATION)) != 0)
+    {
+        if (this->attenuation > 7)
+        {
+            *failed_prop = BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_ATTENUATION;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_POWER_LEVELLING_CAPABILITIES)) != 0)
+    {
+        if (this->power_levelling_capabilities > 127)
+        {
+            *failed_prop = BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_POWER_LEVELLING_CAPABILITIES;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_ni_onu_upgrade_complete_data_set_default(bcmolt_xgpon_ni_onu_upgrade_complete_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_UPGRADE_COMPLETE_ID_STATUS)) != 0)
+    {
+        this->status = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_UPGRADE_COMPLETE_ID_LIST_OF_FAILED_ENTITIES)) != 0)
+    {
+        this->list_of_failed_entities.len = 0;
+        this->list_of_failed_entities.val = NULL;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_onu_upgrade_complete_data_pack(const bcmolt_xgpon_ni_onu_upgrade_complete_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_UPGRADE_COMPLETE_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->status))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_UPGRADE_COMPLETE_ID_LIST_OF_FAILED_ENTITIES)) != 0)
+    {
+        if (!bcmolt_gpon_onu_upgrade_status_list_u32_pack(&this->list_of_failed_entities, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_ni_onu_upgrade_complete_data_get_packed_length(const bcmolt_xgpon_ni_onu_upgrade_complete_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_UPGRADE_COMPLETE_ID_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_UPGRADE_COMPLETE_ID_LIST_OF_FAILED_ENTITIES)) != 0)
+    {
+        count += bcmolt_gpon_onu_upgrade_status_list_u32_get_packed_length(&this->list_of_failed_entities);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_onu_upgrade_complete_data_unpack(bcmolt_xgpon_ni_onu_upgrade_complete_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_UPGRADE_COMPLETE_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->status))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_UPGRADE_COMPLETE_ID_LIST_OF_FAILED_ENTITIES)) != 0)
+    {
+        if (!bcmolt_gpon_onu_upgrade_status_list_u32_unpack(&this->list_of_failed_entities, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_onu_upgrade_complete_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_UPGRADE_COMPLETE_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_UPGRADE_COMPLETE_ID_LIST_OF_FAILED_ENTITIES)) != 0)
+    {
+        if (!bcmolt_gpon_onu_upgrade_status_list_u32_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_onu_upgrade_complete_data_bounds_check(const bcmolt_xgpon_ni_onu_upgrade_complete_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_onu_upgrade_complete_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ONU_UPGRADE_COMPLETE_ID_LIST_OF_FAILED_ENTITIES)) != 0)
+    {
+        if (!bcmolt_gpon_onu_upgrade_status_list_u32_bounds_check(&this->list_of_failed_entities))
+        {
+            *failed_prop = BCMOLT_XGPON_NI_ONU_UPGRADE_COMPLETE_ID_LIST_OF_FAILED_ENTITIES;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_ni_protection_switching_onus_ranged_data_set_default(bcmolt_xgpon_ni_protection_switching_onus_ranged_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_PROTECTION_SWITCHING_ONUS_RANGED_ID_ONUS)) != 0)
+    {
+        this->onus.len = 0;
+        this->onus.val = NULL;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_protection_switching_onus_ranged_data_pack(const bcmolt_xgpon_ni_protection_switching_onus_ranged_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_PROTECTION_SWITCHING_ONUS_RANGED_ID_ONUS)) != 0)
+    {
+        if (!bcmolt_xgpon_onu_eqd_list_u32_pack(&this->onus, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_ni_protection_switching_onus_ranged_data_get_packed_length(const bcmolt_xgpon_ni_protection_switching_onus_ranged_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_PROTECTION_SWITCHING_ONUS_RANGED_ID_ONUS)) != 0)
+    {
+        count += bcmolt_xgpon_onu_eqd_list_u32_get_packed_length(&this->onus);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_protection_switching_onus_ranged_data_unpack(bcmolt_xgpon_ni_protection_switching_onus_ranged_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_PROTECTION_SWITCHING_ONUS_RANGED_ID_ONUS)) != 0)
+    {
+        if (!bcmolt_xgpon_onu_eqd_list_u32_unpack(&this->onus, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_protection_switching_onus_ranged_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_PROTECTION_SWITCHING_ONUS_RANGED_ID_ONUS)) != 0)
+    {
+        if (!bcmolt_xgpon_onu_eqd_list_u32_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_protection_switching_onus_ranged_data_bounds_check(const bcmolt_xgpon_ni_protection_switching_onus_ranged_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_protection_switching_onus_ranged_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_PROTECTION_SWITCHING_ONUS_RANGED_ID_ONUS)) != 0)
+    {
+        if (!bcmolt_xgpon_onu_eqd_list_u32_bounds_check(&this->onus))
+        {
+            *failed_prop = BCMOLT_XGPON_NI_PROTECTION_SWITCHING_ONUS_RANGED_ID_ONUS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_ni_protection_switching_switchover_completed_data_set_default(bcmolt_xgpon_ni_protection_switching_switchover_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED_ID_RESULT)) != 0)
+    {
+        this->result = BCMOLT_RESULT_SUCCESS;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_protection_switching_switchover_completed_data_pack(const bcmolt_xgpon_ni_protection_switching_switchover_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED_ID_RESULT)) != 0)
+    {
+        if (!bcmolt_result_pack(this->result, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_ni_protection_switching_switchover_completed_data_get_packed_length(const bcmolt_xgpon_ni_protection_switching_switchover_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED_ID_RESULT)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_protection_switching_switchover_completed_data_unpack(bcmolt_xgpon_ni_protection_switching_switchover_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED_ID_RESULT)) != 0)
+    {
+        if (!bcmolt_result_unpack(&this->result, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_protection_switching_switchover_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED_ID_RESULT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_protection_switching_switchover_completed_data_bounds_check(const bcmolt_xgpon_ni_protection_switching_switchover_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_protection_switching_switchover_completed_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED_ID_RESULT)) != 0)
+    {
+        switch (this->result)
+        {
+            case BCMOLT_RESULT_SUCCESS:
+                break;
+            case BCMOLT_RESULT_FAIL:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_NI_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED_ID_RESULT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_ni_protection_switching_traffic_resume_data_set_default(bcmolt_xgpon_ni_protection_switching_traffic_resume_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_PROTECTION_SWITCHING_TRAFFIC_RESUME_ID_RESULT)) != 0)
+    {
+        this->result = BCMOLT_TRAFFIC_RESUME_RESULT_SUCCESS;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_protection_switching_traffic_resume_data_pack(const bcmolt_xgpon_ni_protection_switching_traffic_resume_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_PROTECTION_SWITCHING_TRAFFIC_RESUME_ID_RESULT)) != 0)
+    {
+        if (!bcmolt_traffic_resume_result_pack(this->result, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_ni_protection_switching_traffic_resume_data_get_packed_length(const bcmolt_xgpon_ni_protection_switching_traffic_resume_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_PROTECTION_SWITCHING_TRAFFIC_RESUME_ID_RESULT)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_protection_switching_traffic_resume_data_unpack(bcmolt_xgpon_ni_protection_switching_traffic_resume_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_PROTECTION_SWITCHING_TRAFFIC_RESUME_ID_RESULT)) != 0)
+    {
+        if (!bcmolt_traffic_resume_result_unpack(&this->result, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_protection_switching_traffic_resume_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_PROTECTION_SWITCHING_TRAFFIC_RESUME_ID_RESULT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_protection_switching_traffic_resume_data_bounds_check(const bcmolt_xgpon_ni_protection_switching_traffic_resume_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_protection_switching_traffic_resume_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_PROTECTION_SWITCHING_TRAFFIC_RESUME_ID_RESULT)) != 0)
+    {
+        switch (this->result)
+        {
+            case BCMOLT_TRAFFIC_RESUME_RESULT_SUCCESS:
+                break;
+            case BCMOLT_TRAFFIC_RESUME_RESULT_FAILURE:
+                break;
+            case BCMOLT_TRAFFIC_RESUME_RESULT_SUSPECTED_LOS:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_NI_PROTECTION_SWITCHING_TRAFFIC_RESUME_ID_RESULT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_ni_rogue_detection_completed_data_set_default(bcmolt_xgpon_ni_rogue_detection_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_WINDOW_TYPE)) != 0)
+    {
+        this->window_type = BCMOLT_ROGUE_DETECTION_WINDOW_SILENT_WINDOW;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_MEASUREMENT_STATUS)) != 0)
+    {
+        this->measurement_status = BCMOLT_ROGUE_MEASUREMENT_RESULT_RSSI_COMPLETE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_ALLOC_ID)) != 0)
+    {
+        this->alloc_id = (bcmolt_xgpon_alloc_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_ONU_ID)) != 0)
+    {
+        this->onu_id = (bcmolt_xgpon_onu_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_IS_DELINEATION)) != 0)
+    {
+        this->is_delineation = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_IS_ED)) != 0)
+    {
+        this->is_ed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_RX_DATA)) != 0)
+    {
+        this->rx_data.len = 0;
+        this->rx_data.val = NULL;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_PLOAM_RECEIVED_ONU_ID)) != 0)
+    {
+        this->ploam_received_onu_id = (bcmolt_xgpon_onu_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_PLOAM_RECEIVED_MIC_ERROR)) != 0)
+    {
+        this->ploam_received_mic_error = BCMOS_FALSE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_rogue_detection_completed_data_pack(const bcmolt_xgpon_ni_rogue_detection_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_WINDOW_TYPE)) != 0)
+    {
+        if (!bcmolt_rogue_detection_window_pack(this->window_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_MEASUREMENT_STATUS)) != 0)
+    {
+        if (!bcmolt_rogue_measurement_result_pack(this->measurement_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_ALLOC_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->alloc_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->onu_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_IS_DELINEATION)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->is_delineation))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_IS_ED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->is_ed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_RX_DATA)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_pack(&this->rx_data, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_PLOAM_RECEIVED_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->ploam_received_onu_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_PLOAM_RECEIVED_MIC_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->ploam_received_mic_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_ni_rogue_detection_completed_data_get_packed_length(const bcmolt_xgpon_ni_rogue_detection_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_WINDOW_TYPE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_MEASUREMENT_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_ALLOC_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_ONU_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_IS_DELINEATION)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_IS_ED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_RX_DATA)) != 0)
+    {
+        count += bcmolt_u8_list_u32_get_packed_length(&this->rx_data);
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_PLOAM_RECEIVED_ONU_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_PLOAM_RECEIVED_MIC_ERROR)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_rogue_detection_completed_data_unpack(bcmolt_xgpon_ni_rogue_detection_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_WINDOW_TYPE)) != 0)
+    {
+        if (!bcmolt_rogue_detection_window_unpack(&this->window_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_MEASUREMENT_STATUS)) != 0)
+    {
+        if (!bcmolt_rogue_measurement_result_unpack(&this->measurement_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_ALLOC_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->alloc_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->onu_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_IS_DELINEATION)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->is_delineation))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_IS_ED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->is_ed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_RX_DATA)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_unpack(&this->rx_data, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_PLOAM_RECEIVED_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->ploam_received_onu_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_PLOAM_RECEIVED_MIC_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->ploam_received_mic_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_rogue_detection_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_WINDOW_TYPE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_MEASUREMENT_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_ALLOC_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_IS_DELINEATION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_IS_ED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_RX_DATA)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_PLOAM_RECEIVED_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_PLOAM_RECEIVED_MIC_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_rogue_detection_completed_data_bounds_check(const bcmolt_xgpon_ni_rogue_detection_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_rogue_detection_completed_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_WINDOW_TYPE)) != 0)
+    {
+        switch (this->window_type)
+        {
+            case BCMOLT_ROGUE_DETECTION_WINDOW_SILENT_WINDOW:
+                break;
+            case BCMOLT_ROGUE_DETECTION_WINDOW_CUT_OFF_WINDOW:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_WINDOW_TYPE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_MEASUREMENT_STATUS)) != 0)
+    {
+        switch (this->measurement_status)
+        {
+            case BCMOLT_ROGUE_MEASUREMENT_RESULT_RSSI_COMPLETE:
+                break;
+            case BCMOLT_ROGUE_MEASUREMENT_RESULT_NOT_PERFORMED:
+                break;
+            case BCMOLT_ROGUE_MEASUREMENT_RESULT_ROGUE_CYCLE_STOP:
+                break;
+            case BCMOLT_ROGUE_MEASUREMENT_RESULT_RSSI_ERROR:
+                break;
+            case BCMOLT_ROGUE_MEASUREMENT_RESULT_RSSI_NOT_COMPLETE:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_MEASUREMENT_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_ALLOC_ID)) != 0)
+    {
+        if (this->alloc_id > (bcmolt_xgpon_alloc_id) 16383)
+        {
+            *failed_prop = BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_ALLOC_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_ONU_ID)) != 0)
+    {
+        if (this->onu_id > (bcmolt_xgpon_onu_id) 511)
+        {
+            *failed_prop = BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_ONU_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_RX_DATA)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_bounds_check(&this->rx_data))
+        {
+            *failed_prop = BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_RX_DATA;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_PLOAM_RECEIVED_ONU_ID)) != 0)
+    {
+        if (this->ploam_received_onu_id > (bcmolt_xgpon_onu_id) 511)
+        {
+            *failed_prop = BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_PLOAM_RECEIVED_ONU_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data_set_default(bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID_NUMBER_OF_DETECTED_DELIMITER)) != 0)
+    {
+        this->number_of_detected_delimiter = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID_ENERGY_DETECT_SIGNAL)) != 0)
+    {
+        this->energy_detect_signal = BCMOLT_STATUS_OFF;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data_pack(const bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID_NUMBER_OF_DETECTED_DELIMITER)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->number_of_detected_delimiter))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID_ENERGY_DETECT_SIGNAL)) != 0)
+    {
+        if (!bcmolt_status_pack(this->energy_detect_signal, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data_get_packed_length(const bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID_NUMBER_OF_DETECTED_DELIMITER)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID_ENERGY_DETECT_SIGNAL)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data_unpack(bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID_NUMBER_OF_DETECTED_DELIMITER)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->number_of_detected_delimiter))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID_ENERGY_DETECT_SIGNAL)) != 0)
+    {
+        if (!bcmolt_status_unpack(&this->energy_detect_signal, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID_NUMBER_OF_DETECTED_DELIMITER)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID_ENERGY_DETECT_SIGNAL)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data_bounds_check(const bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID_ENERGY_DETECT_SIGNAL)) != 0)
+    {
+        switch (this->energy_detect_signal)
+        {
+            case BCMOLT_STATUS_OFF:
+                break;
+            case BCMOLT_STATUS_ON:
+                break;
+            case BCMOLT_STATUS_NO_CHANGE:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID_ENERGY_DETECT_SIGNAL;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_ni_stat_alarm_cleared_data_set_default(bcmolt_xgpon_ni_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        this->stat = BCMOLT_XGPON_NI_STAT_ID_FEC_CODEWORDS;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_stat_alarm_cleared_data_pack(const bcmolt_xgpon_ni_stat_alarm_cleared_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_xgpon_ni_stat_id_pack(this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_ni_stat_alarm_cleared_data_get_packed_length(const bcmolt_xgpon_ni_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_stat_alarm_cleared_data_unpack(bcmolt_xgpon_ni_stat_alarm_cleared_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_xgpon_ni_stat_id_unpack(&this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_stat_alarm_cleared_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_stat_alarm_cleared_data_bounds_check(const bcmolt_xgpon_ni_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_stat_alarm_cleared_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        switch (this->stat)
+        {
+            case BCMOLT_XGPON_NI_STAT_ID_FEC_CODEWORDS:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_BIP32_BYTES:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_BIP32_ERRORS:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_XGTC_HEADERS:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_XGTC_CORRECTED:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_XGTC_UNCORRECTED:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_XGEM:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_XGEM_DROPPED:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_XGEM_IDLE:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_XGEM_CORRECTED:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_CRC_ERROR:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_FRAGMENT_ERROR:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_PACKETS_DROPPED:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_DROPPED_TOO_SHORT:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_DROPPED_TOO_LONG:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_KEY_ERROR:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_TX_PLOAMS:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS_DROPPED:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_ALLOCATIONS_VALID:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_ALLOCATIONS_INVALID:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_ALLOCATIONS_DISABLED:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS_NON_IDLE:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS_ERROR:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_CPU:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_OMCI:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_TX_PACKETS:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_TX_XGEM:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_TX_CPU:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_TX_OMCI:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_TX_CPU_OMCI_PACKETS_DROPPED:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_TX_DROPPED_ILLEGAL_LENGTH:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_TX_DROPPED_TPID_MISS:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_TX_DROPPED_VID_MISS:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_NI_STAT_ALARM_CLEARED_ID_STAT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_ni_stat_alarm_raised_data_set_default(bcmolt_xgpon_ni_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        this->stat = BCMOLT_XGPON_NI_STAT_ID_FEC_CODEWORDS;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_stat_alarm_raised_data_pack(const bcmolt_xgpon_ni_stat_alarm_raised_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_xgpon_ni_stat_id_pack(this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_ni_stat_alarm_raised_data_get_packed_length(const bcmolt_xgpon_ni_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_stat_alarm_raised_data_unpack(bcmolt_xgpon_ni_stat_alarm_raised_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_xgpon_ni_stat_id_unpack(&this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_stat_alarm_raised_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_stat_alarm_raised_data_bounds_check(const bcmolt_xgpon_ni_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_stat_alarm_raised_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        switch (this->stat)
+        {
+            case BCMOLT_XGPON_NI_STAT_ID_FEC_CODEWORDS:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_BIP32_BYTES:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_BIP32_ERRORS:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_XGTC_HEADERS:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_XGTC_CORRECTED:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_XGTC_UNCORRECTED:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_XGEM:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_XGEM_DROPPED:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_XGEM_IDLE:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_XGEM_CORRECTED:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_CRC_ERROR:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_FRAGMENT_ERROR:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_PACKETS_DROPPED:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_DROPPED_TOO_SHORT:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_DROPPED_TOO_LONG:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_KEY_ERROR:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_TX_PLOAMS:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS_DROPPED:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_ALLOCATIONS_VALID:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_ALLOCATIONS_INVALID:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_ALLOCATIONS_DISABLED:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS_NON_IDLE:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS_ERROR:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_CPU:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_OMCI:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_TX_PACKETS:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_TX_XGEM:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_TX_CPU:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_TX_OMCI:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_TX_CPU_OMCI_PACKETS_DROPPED:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_TX_DROPPED_ILLEGAL_LENGTH:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_TX_DROPPED_TPID_MISS:
+                break;
+            case BCMOLT_XGPON_NI_STAT_ID_TX_DROPPED_VID_MISS:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_NI_STAT_ALARM_RAISED_ID_STAT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_ni_state_change_completed_data_set_default(bcmolt_xgpon_ni_state_change_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STATE_CHANGE_COMPLETED_ID_RESULT)) != 0)
+    {
+        this->result = BCMOLT_RESULT_SUCCESS;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STATE_CHANGE_COMPLETED_ID_PREVIOUS_STATE)) != 0)
+    {
+        this->previous_state = BCMOLT_PON_STATE_INACTIVE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STATE_CHANGE_COMPLETED_ID_NEW_STATE)) != 0)
+    {
+        this->new_state = BCMOLT_PON_STATE_INACTIVE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_state_change_completed_data_pack(const bcmolt_xgpon_ni_state_change_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STATE_CHANGE_COMPLETED_ID_RESULT)) != 0)
+    {
+        if (!bcmolt_result_pack(this->result, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STATE_CHANGE_COMPLETED_ID_PREVIOUS_STATE)) != 0)
+    {
+        if (!bcmolt_pon_state_pack(this->previous_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STATE_CHANGE_COMPLETED_ID_NEW_STATE)) != 0)
+    {
+        if (!bcmolt_pon_state_pack(this->new_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_ni_state_change_completed_data_get_packed_length(const bcmolt_xgpon_ni_state_change_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STATE_CHANGE_COMPLETED_ID_RESULT)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STATE_CHANGE_COMPLETED_ID_PREVIOUS_STATE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STATE_CHANGE_COMPLETED_ID_NEW_STATE)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_state_change_completed_data_unpack(bcmolt_xgpon_ni_state_change_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STATE_CHANGE_COMPLETED_ID_RESULT)) != 0)
+    {
+        if (!bcmolt_result_unpack(&this->result, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STATE_CHANGE_COMPLETED_ID_PREVIOUS_STATE)) != 0)
+    {
+        if (!bcmolt_pon_state_unpack(&this->previous_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STATE_CHANGE_COMPLETED_ID_NEW_STATE)) != 0)
+    {
+        if (!bcmolt_pon_state_unpack(&this->new_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_state_change_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STATE_CHANGE_COMPLETED_ID_RESULT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STATE_CHANGE_COMPLETED_ID_PREVIOUS_STATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STATE_CHANGE_COMPLETED_ID_NEW_STATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_state_change_completed_data_bounds_check(const bcmolt_xgpon_ni_state_change_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_state_change_completed_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STATE_CHANGE_COMPLETED_ID_RESULT)) != 0)
+    {
+        switch (this->result)
+        {
+            case BCMOLT_RESULT_SUCCESS:
+                break;
+            case BCMOLT_RESULT_FAIL:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_NI_STATE_CHANGE_COMPLETED_ID_RESULT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STATE_CHANGE_COMPLETED_ID_PREVIOUS_STATE)) != 0)
+    {
+        switch (this->previous_state)
+        {
+            case BCMOLT_PON_STATE_INACTIVE:
+                break;
+            case BCMOLT_PON_STATE_PROCESSING:
+                break;
+            case BCMOLT_PON_STATE_ACTIVE_WORKING:
+                break;
+            case BCMOLT_PON_STATE_ACTIVE_STANDBY:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_NI_STATE_CHANGE_COMPLETED_ID_PREVIOUS_STATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_STATE_CHANGE_COMPLETED_ID_NEW_STATE)) != 0)
+    {
+        switch (this->new_state)
+        {
+            case BCMOLT_PON_STATE_INACTIVE:
+                break;
+            case BCMOLT_PON_STATE_PROCESSING:
+                break;
+            case BCMOLT_PON_STATE_ACTIVE_WORKING:
+                break;
+            case BCMOLT_PON_STATE_ACTIVE_STANDBY:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_NI_STATE_CHANGE_COMPLETED_ID_NEW_STATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_ni_tod_request_completed_data_set_default(bcmolt_xgpon_ni_tod_request_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_TOD_STRING)) != 0)
+    {
+        memset(this->tod_string.str, 0, 64);
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_SFC)) != 0)
+    {
+        this->sfc = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_RTC_OFFSET_SEC)) != 0)
+    {
+        this->rtc_offset_sec = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_RTC_OFFSET_NSEC)) != 0)
+    {
+        this->rtc_offset_nsec = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_STATUS)) != 0)
+    {
+        this->status = BCMOLT_RESULT_SUCCESS;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_tod_request_completed_data_pack(const bcmolt_xgpon_ni_tod_request_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_TOD_STRING)) != 0)
+    {
+        if (!bcmolt_str_64_pack(&this->tod_string, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_SFC)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->sfc))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_RTC_OFFSET_SEC)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rtc_offset_sec))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_RTC_OFFSET_NSEC)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->rtc_offset_nsec))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_result_pack(this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_ni_tod_request_completed_data_get_packed_length(const bcmolt_xgpon_ni_tod_request_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_TOD_STRING)) != 0)
+    {
+        count += 64;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_SFC)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_RTC_OFFSET_SEC)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_RTC_OFFSET_NSEC)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_tod_request_completed_data_unpack(bcmolt_xgpon_ni_tod_request_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_TOD_STRING)) != 0)
+    {
+        if (!bcmolt_str_64_unpack(&this->tod_string, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_SFC)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->sfc))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_RTC_OFFSET_SEC)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rtc_offset_sec))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_RTC_OFFSET_NSEC)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->rtc_offset_nsec))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_result_unpack(&this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_tod_request_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_TOD_STRING)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 64))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_SFC)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_RTC_OFFSET_SEC)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_RTC_OFFSET_NSEC)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_tod_request_completed_data_bounds_check(const bcmolt_xgpon_ni_tod_request_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_tod_request_completed_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_TOD_STRING)) != 0)
+    {
+        if (!bcmolt_str_64_bounds_check(&this->tod_string))
+        {
+            *failed_prop = BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_TOD_STRING;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_STATUS)) != 0)
+    {
+        switch (this->status)
+        {
+            case BCMOLT_RESULT_SUCCESS:
+                break;
+            case BCMOLT_RESULT_FAIL:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_ni_auto_cfg_data_set_default(bcmolt_xgpon_ni_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_ACTIVATE_ALL_ONUS_COMPLETED)) != 0)
+    {
+        this->activate_all_onus_completed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_CPU_PACKETS_FAILURE)) != 0)
+    {
+        this->cpu_packets_failure = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_DEACTIVATE_ALL_ONUS_COMPLETED)) != 0)
+    {
+        this->deactivate_all_onus_completed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_DISABLE_ALL_ONUS_COMPLETED)) != 0)
+    {
+        this->disable_all_onus_completed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_ENABLE_ALL_ONUS_COMPLETED)) != 0)
+    {
+        this->enable_all_onus_completed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_LOS)) != 0)
+    {
+        this->los = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_ONU_DISCOVERED)) != 0)
+    {
+        this->onu_discovered = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_ONU_UPGRADE_COMPLETE)) != 0)
+    {
+        this->onu_upgrade_complete = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_ONUS_RANGED)) != 0)
+    {
+        this->protection_switching_onus_ranged = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED)) != 0)
+    {
+        this->protection_switching_switchover_completed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_TRAFFIC_RESUME)) != 0)
+    {
+        this->protection_switching_traffic_resume = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_ROGUE_DETECTION_COMPLETED)) != 0)
+    {
+        this->rogue_detection_completed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_ROGUE_ONU_SPECIAL_MAP_CYCLE_START)) != 0)
+    {
+        this->rogue_onu_special_map_cycle_start = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_SERIAL_NUMBER_ACQUISITION_CYCLE_START)) != 0)
+    {
+        this->serial_number_acquisition_cycle_start = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_STANDBY_PON_MONITORING_CYCLE_COMPLETED)) != 0)
+    {
+        this->standby_pon_monitoring_cycle_completed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        this->stat_alarm_cleared = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        this->stat_alarm_raised = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_STATE_CHANGE_COMPLETED)) != 0)
+    {
+        this->state_change_completed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_TOD_REQUEST_COMPLETED)) != 0)
+    {
+        this->tod_request_completed = BCMOS_FALSE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_auto_cfg_data_pack(const bcmolt_xgpon_ni_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_ACTIVATE_ALL_ONUS_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->activate_all_onus_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_CPU_PACKETS_FAILURE)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->cpu_packets_failure))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_DEACTIVATE_ALL_ONUS_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->deactivate_all_onus_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_DISABLE_ALL_ONUS_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->disable_all_onus_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_ENABLE_ALL_ONUS_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->enable_all_onus_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_LOS)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->los))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_ONU_DISCOVERED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->onu_discovered))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_ONU_UPGRADE_COMPLETE)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->onu_upgrade_complete))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_ONUS_RANGED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->protection_switching_onus_ranged))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->protection_switching_switchover_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_TRAFFIC_RESUME)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->protection_switching_traffic_resume))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_ROGUE_DETECTION_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->rogue_detection_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_ROGUE_ONU_SPECIAL_MAP_CYCLE_START)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->rogue_onu_special_map_cycle_start))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_SERIAL_NUMBER_ACQUISITION_CYCLE_START)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->serial_number_acquisition_cycle_start))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_STANDBY_PON_MONITORING_CYCLE_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->standby_pon_monitoring_cycle_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->stat_alarm_cleared))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->stat_alarm_raised))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_STATE_CHANGE_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->state_change_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_TOD_REQUEST_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->tod_request_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_ni_auto_cfg_data_get_packed_length(const bcmolt_xgpon_ni_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_ACTIVATE_ALL_ONUS_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_CPU_PACKETS_FAILURE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_DEACTIVATE_ALL_ONUS_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_DISABLE_ALL_ONUS_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_ENABLE_ALL_ONUS_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_LOS)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_ONU_DISCOVERED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_ONU_UPGRADE_COMPLETE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_ONUS_RANGED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_TRAFFIC_RESUME)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_ROGUE_DETECTION_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_ROGUE_ONU_SPECIAL_MAP_CYCLE_START)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_SERIAL_NUMBER_ACQUISITION_CYCLE_START)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_STANDBY_PON_MONITORING_CYCLE_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_STATE_CHANGE_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_TOD_REQUEST_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_auto_cfg_data_unpack(bcmolt_xgpon_ni_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_ACTIVATE_ALL_ONUS_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->activate_all_onus_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_CPU_PACKETS_FAILURE)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->cpu_packets_failure))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_DEACTIVATE_ALL_ONUS_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->deactivate_all_onus_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_DISABLE_ALL_ONUS_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->disable_all_onus_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_ENABLE_ALL_ONUS_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->enable_all_onus_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_LOS)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->los))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_ONU_DISCOVERED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->onu_discovered))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_ONU_UPGRADE_COMPLETE)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->onu_upgrade_complete))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_ONUS_RANGED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->protection_switching_onus_ranged))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->protection_switching_switchover_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_TRAFFIC_RESUME)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->protection_switching_traffic_resume))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_ROGUE_DETECTION_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->rogue_detection_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_ROGUE_ONU_SPECIAL_MAP_CYCLE_START)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->rogue_onu_special_map_cycle_start))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_SERIAL_NUMBER_ACQUISITION_CYCLE_START)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->serial_number_acquisition_cycle_start))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_STANDBY_PON_MONITORING_CYCLE_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->standby_pon_monitoring_cycle_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->stat_alarm_cleared))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->stat_alarm_raised))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_STATE_CHANGE_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->state_change_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_TOD_REQUEST_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->tod_request_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_ACTIVATE_ALL_ONUS_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_CPU_PACKETS_FAILURE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_DEACTIVATE_ALL_ONUS_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_DISABLE_ALL_ONUS_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_ENABLE_ALL_ONUS_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_LOS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_ONU_DISCOVERED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_ONU_UPGRADE_COMPLETE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_ONUS_RANGED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_TRAFFIC_RESUME)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_ROGUE_DETECTION_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_ROGUE_ONU_SPECIAL_MAP_CYCLE_START)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_SERIAL_NUMBER_ACQUISITION_CYCLE_START)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_STANDBY_PON_MONITORING_CYCLE_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_STATE_CHANGE_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_AUTO_CFG_ID_TOD_REQUEST_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_auto_cfg_data_bounds_check(const bcmolt_xgpon_ni_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_auto_cfg_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_ni_adjust_tx_wavelength_data_set_default(bcmolt_xgpon_ni_adjust_tx_wavelength_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ADJUST_TX_WAVELENGTH_ID_SERIAL_NUMBER)) != 0)
+    {
+        memset(this->serial_number.vendor_id, 0, sizeof(this->serial_number.vendor_id));
+        memset(this->serial_number.vendor_specific, 0, sizeof(this->serial_number.vendor_specific));
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ADJUST_TX_WAVELENGTH_ID_FREQENCY_ADJUSTMENT_DIRECTION)) != 0)
+    {
+        this->freqency_adjustment_direction = BCMOLT_FREQUENCY_ADJUSTMENT_DIRECTION_LOWER;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ADJUST_TX_WAVELENGTH_ID_FREQUENCY_ADJUSTMENT_SIZE)) != 0)
+    {
+        this->frequency_adjustment_size = 1;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_adjust_tx_wavelength_data_pack(const bcmolt_xgpon_ni_adjust_tx_wavelength_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ADJUST_TX_WAVELENGTH_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmolt_serial_number_pack(&this->serial_number, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ADJUST_TX_WAVELENGTH_ID_FREQENCY_ADJUSTMENT_DIRECTION)) != 0)
+    {
+        if (!bcmolt_frequency_adjustment_direction_pack(this->freqency_adjustment_direction, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ADJUST_TX_WAVELENGTH_ID_FREQUENCY_ADJUSTMENT_SIZE)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->frequency_adjustment_size))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_ni_adjust_tx_wavelength_data_get_packed_length(const bcmolt_xgpon_ni_adjust_tx_wavelength_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ADJUST_TX_WAVELENGTH_ID_SERIAL_NUMBER)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ADJUST_TX_WAVELENGTH_ID_FREQENCY_ADJUSTMENT_DIRECTION)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ADJUST_TX_WAVELENGTH_ID_FREQUENCY_ADJUSTMENT_SIZE)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_adjust_tx_wavelength_data_unpack(bcmolt_xgpon_ni_adjust_tx_wavelength_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ADJUST_TX_WAVELENGTH_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmolt_serial_number_unpack(&this->serial_number, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ADJUST_TX_WAVELENGTH_ID_FREQENCY_ADJUSTMENT_DIRECTION)) != 0)
+    {
+        if (!bcmolt_frequency_adjustment_direction_unpack(&this->freqency_adjustment_direction, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ADJUST_TX_WAVELENGTH_ID_FREQUENCY_ADJUSTMENT_SIZE)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->frequency_adjustment_size))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_adjust_tx_wavelength_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ADJUST_TX_WAVELENGTH_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ADJUST_TX_WAVELENGTH_ID_FREQENCY_ADJUSTMENT_DIRECTION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ADJUST_TX_WAVELENGTH_ID_FREQUENCY_ADJUSTMENT_SIZE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_adjust_tx_wavelength_data_bounds_check(const bcmolt_xgpon_ni_adjust_tx_wavelength_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_adjust_tx_wavelength_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ADJUST_TX_WAVELENGTH_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmolt_serial_number_bounds_check(&this->serial_number))
+        {
+            *failed_prop = BCMOLT_XGPON_NI_ADJUST_TX_WAVELENGTH_ID_SERIAL_NUMBER;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ADJUST_TX_WAVELENGTH_ID_FREQENCY_ADJUSTMENT_DIRECTION)) != 0)
+    {
+        switch (this->freqency_adjustment_direction)
+        {
+            case BCMOLT_FREQUENCY_ADJUSTMENT_DIRECTION_LOWER:
+                break;
+            case BCMOLT_FREQUENCY_ADJUSTMENT_DIRECTION_HIGHER:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_NI_ADJUST_TX_WAVELENGTH_ID_FREQENCY_ADJUSTMENT_DIRECTION;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ADJUST_TX_WAVELENGTH_ID_FREQUENCY_ADJUSTMENT_SIZE)) != 0)
+    {
+        if (this->frequency_adjustment_size > 10)
+        {
+            *failed_prop = BCMOLT_XGPON_NI_ADJUST_TX_WAVELENGTH_ID_FREQUENCY_ADJUSTMENT_SIZE;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_ni_disable_serial_number_data_set_default(bcmolt_xgpon_ni_disable_serial_number_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_DISABLE_SERIAL_NUMBER_ID_CONTROL)) != 0)
+    {
+        this->control = BCMOLT_DISABLE_SERIAL_NUMBER_CONTROL_UNICAST_DISABLE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_DISABLE_SERIAL_NUMBER_ID_SERIAL_NUMBER)) != 0)
+    {
+        memset(this->serial_number.vendor_id, 0, sizeof(this->serial_number.vendor_id));
+        memset(this->serial_number.vendor_specific, 0, sizeof(this->serial_number.vendor_specific));
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_disable_serial_number_data_pack(const bcmolt_xgpon_ni_disable_serial_number_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_DISABLE_SERIAL_NUMBER_ID_CONTROL)) != 0)
+    {
+        if (!bcmolt_disable_serial_number_control_pack(this->control, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_DISABLE_SERIAL_NUMBER_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmolt_serial_number_pack(&this->serial_number, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_ni_disable_serial_number_data_get_packed_length(const bcmolt_xgpon_ni_disable_serial_number_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_DISABLE_SERIAL_NUMBER_ID_CONTROL)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_DISABLE_SERIAL_NUMBER_ID_SERIAL_NUMBER)) != 0)
+    {
+        count += 8;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_disable_serial_number_data_unpack(bcmolt_xgpon_ni_disable_serial_number_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_DISABLE_SERIAL_NUMBER_ID_CONTROL)) != 0)
+    {
+        if (!bcmolt_disable_serial_number_control_unpack(&this->control, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_DISABLE_SERIAL_NUMBER_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmolt_serial_number_unpack(&this->serial_number, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_disable_serial_number_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_DISABLE_SERIAL_NUMBER_ID_CONTROL)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_DISABLE_SERIAL_NUMBER_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_disable_serial_number_data_bounds_check(const bcmolt_xgpon_ni_disable_serial_number_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_disable_serial_number_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_DISABLE_SERIAL_NUMBER_ID_CONTROL)) != 0)
+    {
+        switch (this->control)
+        {
+            case BCMOLT_DISABLE_SERIAL_NUMBER_CONTROL_UNICAST_DISABLE:
+                break;
+            case BCMOLT_DISABLE_SERIAL_NUMBER_CONTROL_UNICAST_ENABLE:
+                break;
+            case BCMOLT_DISABLE_SERIAL_NUMBER_CONTROL_BROADCAST_ENABLE:
+                break;
+            case BCMOLT_DISABLE_SERIAL_NUMBER_CONTROL_BROADCAST_DISABLE:
+                break;
+            case BCMOLT_DISABLE_SERIAL_NUMBER_CONTROL_DISABLE_DISCOVERY:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_NI_DISABLE_SERIAL_NUMBER_ID_CONTROL;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_DISABLE_SERIAL_NUMBER_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmolt_serial_number_bounds_check(&this->serial_number))
+        {
+            *failed_prop = BCMOLT_XGPON_NI_DISABLE_SERIAL_NUMBER_ID_SERIAL_NUMBER;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_ni_rogue_detection_window_data_set_default(bcmolt_xgpon_ni_rogue_detection_window_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_WINDOW_TYPE)) != 0)
+    {
+        this->window_type = BCMOLT_ROGUE_DETECTION_WINDOW_SILENT_WINDOW;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_ALLOC_ID)) != 0)
+    {
+        this->alloc_id = (bcmolt_xgpon_alloc_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_ONU_ID)) != 0)
+    {
+        this->onu_id = (bcmolt_xgpon_onu_id) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_SECOND_RANGING_WINDOW)) != 0)
+    {
+        this->second_ranging_window = BCMOS_FALSE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_rogue_detection_window_data_pack(const bcmolt_xgpon_ni_rogue_detection_window_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_WINDOW_TYPE)) != 0)
+    {
+        if (!bcmolt_rogue_detection_window_pack(this->window_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_ALLOC_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->alloc_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->onu_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_SECOND_RANGING_WINDOW)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->second_ranging_window))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_ni_rogue_detection_window_data_get_packed_length(const bcmolt_xgpon_ni_rogue_detection_window_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_WINDOW_TYPE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_ALLOC_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_ONU_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_SECOND_RANGING_WINDOW)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_rogue_detection_window_data_unpack(bcmolt_xgpon_ni_rogue_detection_window_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_WINDOW_TYPE)) != 0)
+    {
+        if (!bcmolt_rogue_detection_window_unpack(&this->window_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_ALLOC_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->alloc_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->onu_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_SECOND_RANGING_WINDOW)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->second_ranging_window))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_rogue_detection_window_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_WINDOW_TYPE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_ALLOC_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_SECOND_RANGING_WINDOW)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_rogue_detection_window_data_bounds_check(const bcmolt_xgpon_ni_rogue_detection_window_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_rogue_detection_window_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_WINDOW_TYPE)) != 0)
+    {
+        switch (this->window_type)
+        {
+            case BCMOLT_ROGUE_DETECTION_WINDOW_SILENT_WINDOW:
+                break;
+            case BCMOLT_ROGUE_DETECTION_WINDOW_CUT_OFF_WINDOW:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_WINDOW_TYPE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_ALLOC_ID)) != 0)
+    {
+        if (this->alloc_id > (bcmolt_xgpon_alloc_id) 16383)
+        {
+            *failed_prop = BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_ALLOC_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_ONU_ID)) != 0)
+    {
+        if (this->onu_id > (bcmolt_xgpon_onu_id) 511)
+        {
+            *failed_prop = BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_ONU_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_ni_run_special_bw_map_data_set_default(bcmolt_xgpon_ni_run_special_bw_map_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_RUN_SPECIAL_BW_MAP_ID_NUMBER_OF_CYCLE)) != 0)
+    {
+        this->number_of_cycle = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_RUN_SPECIAL_BW_MAP_ID_ALLOCATION_NUMBER)) != 0)
+    {
+        this->allocation_number = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_RUN_SPECIAL_BW_MAP_ID_BW_MAP_ARRAY)) != 0)
+    {
+        this->bw_map_array = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_run_special_bw_map_data_pack(const bcmolt_xgpon_ni_run_special_bw_map_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_RUN_SPECIAL_BW_MAP_ID_NUMBER_OF_CYCLE)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->number_of_cycle))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_RUN_SPECIAL_BW_MAP_ID_ALLOCATION_NUMBER)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->allocation_number))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_RUN_SPECIAL_BW_MAP_ID_BW_MAP_ARRAY)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->bw_map_array))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_ni_run_special_bw_map_data_get_packed_length(const bcmolt_xgpon_ni_run_special_bw_map_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_RUN_SPECIAL_BW_MAP_ID_NUMBER_OF_CYCLE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_RUN_SPECIAL_BW_MAP_ID_ALLOCATION_NUMBER)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_RUN_SPECIAL_BW_MAP_ID_BW_MAP_ARRAY)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_run_special_bw_map_data_unpack(bcmolt_xgpon_ni_run_special_bw_map_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_RUN_SPECIAL_BW_MAP_ID_NUMBER_OF_CYCLE)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->number_of_cycle))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_RUN_SPECIAL_BW_MAP_ID_ALLOCATION_NUMBER)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->allocation_number))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_RUN_SPECIAL_BW_MAP_ID_BW_MAP_ARRAY)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->bw_map_array))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_run_special_bw_map_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_RUN_SPECIAL_BW_MAP_ID_NUMBER_OF_CYCLE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_RUN_SPECIAL_BW_MAP_ID_ALLOCATION_NUMBER)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_RUN_SPECIAL_BW_MAP_ID_BW_MAP_ARRAY)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_run_special_bw_map_data_bounds_check(const bcmolt_xgpon_ni_run_special_bw_map_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_run_special_bw_map_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_ni_set_onu_state_data_set_default(bcmolt_xgpon_ni_set_onu_state_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_SET_ONU_STATE_ID_ONU_STATE)) != 0)
+    {
+        this->onu_state = BCMOLT_ONU_OPERATION_INACTIVE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_set_onu_state_data_pack(const bcmolt_xgpon_ni_set_onu_state_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_SET_ONU_STATE_ID_ONU_STATE)) != 0)
+    {
+        if (!bcmolt_onu_operation_pack(this->onu_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_ni_set_onu_state_data_get_packed_length(const bcmolt_xgpon_ni_set_onu_state_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_SET_ONU_STATE_ID_ONU_STATE)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_set_onu_state_data_unpack(bcmolt_xgpon_ni_set_onu_state_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_SET_ONU_STATE_ID_ONU_STATE)) != 0)
+    {
+        if (!bcmolt_onu_operation_unpack(&this->onu_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_set_onu_state_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_SET_ONU_STATE_ID_ONU_STATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_set_onu_state_data_bounds_check(const bcmolt_xgpon_ni_set_onu_state_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_set_onu_state_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_SET_ONU_STATE_ID_ONU_STATE)) != 0)
+    {
+        switch (this->onu_state)
+        {
+            case BCMOLT_ONU_OPERATION_INACTIVE:
+                break;
+            case BCMOLT_ONU_OPERATION_ACTIVE:
+                break;
+            case BCMOLT_ONU_OPERATION_DISABLE:
+                break;
+            case BCMOLT_ONU_OPERATION_ENABLE:
+                break;
+            case BCMOLT_ONU_OPERATION_ACTIVE_STANDBY:
+                break;
+            case BCMOLT_ONU_OPERATION_AWAKE_FREE:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_NI_SET_ONU_STATE_ID_ONU_STATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_ni_set_pon_state_data_set_default(bcmolt_xgpon_ni_set_pon_state_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_SET_PON_STATE_ID_PON_STATE)) != 0)
+    {
+        this->pon_state = BCMOLT_PON_OPERATION_INACTIVE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_set_pon_state_data_pack(const bcmolt_xgpon_ni_set_pon_state_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_SET_PON_STATE_ID_PON_STATE)) != 0)
+    {
+        if (!bcmolt_pon_operation_pack(this->pon_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_ni_set_pon_state_data_get_packed_length(const bcmolt_xgpon_ni_set_pon_state_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_SET_PON_STATE_ID_PON_STATE)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_set_pon_state_data_unpack(bcmolt_xgpon_ni_set_pon_state_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_SET_PON_STATE_ID_PON_STATE)) != 0)
+    {
+        if (!bcmolt_pon_operation_unpack(&this->pon_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_set_pon_state_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_SET_PON_STATE_ID_PON_STATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_set_pon_state_data_bounds_check(const bcmolt_xgpon_ni_set_pon_state_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_set_pon_state_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_SET_PON_STATE_ID_PON_STATE)) != 0)
+    {
+        switch (this->pon_state)
+        {
+            case BCMOLT_PON_OPERATION_INACTIVE:
+                break;
+            case BCMOLT_PON_OPERATION_ACTIVE_WORKING:
+                break;
+            case BCMOLT_PON_OPERATION_ACTIVE_STANDBY:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_NI_SET_PON_STATE_ID_PON_STATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_ni_start_onu_upgrade_data_set_default(bcmolt_xgpon_ni_start_onu_upgrade_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_START_ONU_UPGRADE_ID_LIST_OF_ONU_IDS)) != 0)
+    {
+        this->list_of_onu_ids.len = 0;
+        this->list_of_onu_ids.val = NULL;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_start_onu_upgrade_data_pack(const bcmolt_xgpon_ni_start_onu_upgrade_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_START_ONU_UPGRADE_ID_LIST_OF_ONU_IDS)) != 0)
+    {
+        if (!bcmolt_pon_onu_id_list_u32_pack(&this->list_of_onu_ids, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_ni_start_onu_upgrade_data_get_packed_length(const bcmolt_xgpon_ni_start_onu_upgrade_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_START_ONU_UPGRADE_ID_LIST_OF_ONU_IDS)) != 0)
+    {
+        count += bcmolt_pon_onu_id_list_u32_get_packed_length(&this->list_of_onu_ids);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_start_onu_upgrade_data_unpack(bcmolt_xgpon_ni_start_onu_upgrade_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_START_ONU_UPGRADE_ID_LIST_OF_ONU_IDS)) != 0)
+    {
+        if (!bcmolt_pon_onu_id_list_u32_unpack(&this->list_of_onu_ids, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_start_onu_upgrade_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_START_ONU_UPGRADE_ID_LIST_OF_ONU_IDS)) != 0)
+    {
+        if (!bcmolt_pon_onu_id_list_u32_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_start_onu_upgrade_data_bounds_check(const bcmolt_xgpon_ni_start_onu_upgrade_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_start_onu_upgrade_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_START_ONU_UPGRADE_ID_LIST_OF_ONU_IDS)) != 0)
+    {
+        if (!bcmolt_pon_onu_id_list_u32_bounds_check(&this->list_of_onu_ids))
+        {
+            *failed_prop = BCMOLT_XGPON_NI_START_ONU_UPGRADE_ID_LIST_OF_ONU_IDS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_ni_broadcast_ploam_packet_data_set_default(bcmolt_xgpon_ni_broadcast_ploam_packet_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_BROADCAST_PLOAM_PACKET_ID_PLOAM)) != 0)
+    {
+        memset(this->ploam.arr, 0, sizeof(this->ploam.arr));
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_broadcast_ploam_packet_data_pack(const bcmolt_xgpon_ni_broadcast_ploam_packet_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_BROADCAST_PLOAM_PACKET_ID_PLOAM)) != 0)
+    {
+        if (!bcmolt_arr_u8_40_pack(&this->ploam, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_ni_broadcast_ploam_packet_data_get_packed_length(const bcmolt_xgpon_ni_broadcast_ploam_packet_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_BROADCAST_PLOAM_PACKET_ID_PLOAM)) != 0)
+    {
+        count += 40;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_broadcast_ploam_packet_data_unpack(bcmolt_xgpon_ni_broadcast_ploam_packet_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_BROADCAST_PLOAM_PACKET_ID_PLOAM)) != 0)
+    {
+        if (!bcmolt_arr_u8_40_unpack(&this->ploam, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_broadcast_ploam_packet_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_BROADCAST_PLOAM_PACKET_ID_PLOAM)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 40))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_broadcast_ploam_packet_data_bounds_check(const bcmolt_xgpon_ni_broadcast_ploam_packet_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_broadcast_ploam_packet_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_BROADCAST_PLOAM_PACKET_ID_PLOAM)) != 0)
+    {
+        if (!bcmolt_arr_u8_40_bounds_check(&this->ploam))
+        {
+            *failed_prop = BCMOLT_XGPON_NI_BROADCAST_PLOAM_PACKET_ID_PLOAM;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_ni_cpu_packets_data_set_default(bcmolt_xgpon_ni_cpu_packets_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CPU_PACKETS_ID_PACKET_TYPE)) != 0)
+    {
+        this->packet_type = BCMOLT_PACKET_TYPE_CPU;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CPU_PACKETS_ID_CALC_CRC)) != 0)
+    {
+        this->calc_crc = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CPU_PACKETS_ID_GEM_PORT_LIST)) != 0)
+    {
+        this->gem_port_list.len = 0;
+        this->gem_port_list.val = NULL;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CPU_PACKETS_ID_BUFFER)) != 0)
+    {
+        this->buffer.len = 0;
+        this->buffer.val = NULL;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_cpu_packets_data_pack(const bcmolt_xgpon_ni_cpu_packets_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CPU_PACKETS_ID_PACKET_TYPE)) != 0)
+    {
+        if (!bcmolt_packet_type_pack(this->packet_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CPU_PACKETS_ID_CALC_CRC)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->calc_crc))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CPU_PACKETS_ID_GEM_PORT_LIST)) != 0)
+    {
+        if (!bcmolt_xgpon_gem_id_list_u8_max_16_pack(&this->gem_port_list, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CPU_PACKETS_ID_BUFFER)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_max_2048_pack(&this->buffer, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_ni_cpu_packets_data_get_packed_length(const bcmolt_xgpon_ni_cpu_packets_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CPU_PACKETS_ID_PACKET_TYPE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CPU_PACKETS_ID_CALC_CRC)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CPU_PACKETS_ID_GEM_PORT_LIST)) != 0)
+    {
+        count += bcmolt_xgpon_gem_id_list_u8_max_16_get_packed_length(&this->gem_port_list);
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CPU_PACKETS_ID_BUFFER)) != 0)
+    {
+        count += bcmolt_u8_list_u32_max_2048_get_packed_length(&this->buffer);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_cpu_packets_data_unpack(bcmolt_xgpon_ni_cpu_packets_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CPU_PACKETS_ID_PACKET_TYPE)) != 0)
+    {
+        if (!bcmolt_packet_type_unpack(&this->packet_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CPU_PACKETS_ID_CALC_CRC)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->calc_crc))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CPU_PACKETS_ID_GEM_PORT_LIST)) != 0)
+    {
+        if (!bcmolt_xgpon_gem_id_list_u8_max_16_unpack(&this->gem_port_list, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CPU_PACKETS_ID_BUFFER)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_max_2048_unpack(&this->buffer, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_cpu_packets_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CPU_PACKETS_ID_PACKET_TYPE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CPU_PACKETS_ID_CALC_CRC)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CPU_PACKETS_ID_GEM_PORT_LIST)) != 0)
+    {
+        if (!bcmolt_xgpon_gem_id_list_u8_max_16_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CPU_PACKETS_ID_BUFFER)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_max_2048_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_ni_cpu_packets_data_bounds_check(const bcmolt_xgpon_ni_cpu_packets_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_cpu_packets_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CPU_PACKETS_ID_PACKET_TYPE)) != 0)
+    {
+        switch (this->packet_type)
+        {
+            case BCMOLT_PACKET_TYPE_CPU:
+                break;
+            case BCMOLT_PACKET_TYPE_OMCI:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_NI_CPU_PACKETS_ID_PACKET_TYPE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CPU_PACKETS_ID_GEM_PORT_LIST)) != 0)
+    {
+        if (this->gem_port_list.len > 16)
+        {
+            return BCMOS_FALSE;
+        }
+
+        if (!bcmolt_xgpon_gem_id_list_u8_max_16_bounds_check(&this->gem_port_list))
+        {
+            *failed_prop = BCMOLT_XGPON_NI_CPU_PACKETS_ID_GEM_PORT_LIST;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_NI_CPU_PACKETS_ID_BUFFER)) != 0)
+    {
+        if (this->buffer.len > 2048)
+        {
+            return BCMOS_FALSE;
+        }
+
+        if (!bcmolt_u8_list_u32_max_2048_bounds_check(&this->buffer))
+        {
+            *failed_prop = BCMOLT_XGPON_NI_CPU_PACKETS_ID_BUFFER;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_key_set_default(bcmolt_xgpon_onu_key *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_KEY_ID_PON_NI)) != 0)
+    {
+        this->pon_ni = (bcmolt_xgpon_ni) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_KEY_ID_ONU_ID)) != 0)
+    {
+        this->onu_id = (bcmolt_xgpon_onu_id) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_key_pack(const bcmolt_xgpon_onu_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, (uint8_t) this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_KEY_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->onu_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_key_get_packed_length(const bcmolt_xgpon_onu_key *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_KEY_ID_PON_NI)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_KEY_ID_ONU_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_key_unpack(bcmolt_xgpon_onu_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, (uint8_t *) &this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_KEY_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->onu_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_KEY_ID_ONU_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_key_bounds_check(const bcmolt_xgpon_onu_key *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_key_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_KEY_ID_PON_NI)) != 0)
+    {
+        if (this->pon_ni > (bcmolt_xgpon_ni) 7)
+        {
+            *failed_prop = BCMOLT_XGPON_ONU_KEY_ID_PON_NI;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_KEY_ID_ONU_ID)) != 0)
+    {
+        if (this->onu_id > (bcmolt_xgpon_onu_id) 511)
+        {
+            *failed_prop = BCMOLT_XGPON_ONU_KEY_ID_ONU_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_cfg_data_set_default(bcmolt_xgpon_onu_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_ONU_STATE)) != 0)
+    {
+        this->onu_state = BCMOLT_ONU_STATE_NOT_CONFIGURED;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_ONU_OLD_STATE)) != 0)
+    {
+        this->onu_old_state = BCMOLT_ONU_STATE_NOT_CONFIGURED;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_ALARM_STATE)) != 0)
+    {
+        this->alarm_state.losi = BCMOLT_STATUS_OFF;
+        this->alarm_state.lobi = BCMOLT_STATUS_OFF;
+        this->alarm_state.lopci = BCMOLT_STATUS_OFF;
+        this->alarm_state.lopci_mic_error = BCMOLT_STATUS_OFF;
+        this->alarm_state.looci = BCMOLT_STATUS_OFF;
+        this->alarm_state.tiwi = BCMOLT_STATUS_OFF;
+        this->alarm_state.dowi = BCMOLT_STATUS_OFF;
+        this->alarm_state.sufi = BCMOLT_STATUS_OFF;
+        this->alarm_state.sfi = BCMOLT_STATUS_OFF;
+        this->alarm_state.sdi = BCMOLT_STATUS_OFF;
+        this->alarm_state.dfi = BCMOLT_STATUS_OFF;
+        this->alarm_state.dgi = BCMOLT_STATUS_OFF;
+        this->alarm_state.pqsi = BCMOLT_STATUS_OFF;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_REGISTRATION_ENCRYPTION_KEYS)) != 0)
+    {
+        memset(this->registration_encryption_keys.ploam_ik.bytes, 0, sizeof(this->registration_encryption_keys.ploam_ik.bytes));
+        memset(this->registration_encryption_keys.omci_ik.bytes, 0, sizeof(this->registration_encryption_keys.omci_ik.bytes));
+        memset(this->registration_encryption_keys.omci_k1.bytes, 0, sizeof(this->registration_encryption_keys.omci_k1.bytes));
+        memset(this->registration_encryption_keys.omci_k2.bytes, 0, sizeof(this->registration_encryption_keys.omci_k2.bytes));
+        memset(this->registration_encryption_keys.kek.bytes, 0, sizeof(this->registration_encryption_keys.kek.bytes));
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_CURRENT_ENCRYPTION_KEY)) != 0)
+    {
+        memset(this->current_encryption_key.encryption_key.bytes, 0, sizeof(this->current_encryption_key.encryption_key.bytes));
+        this->current_encryption_key.key_index = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_SERIAL_NUMBER)) != 0)
+    {
+        memset(this->serial_number.vendor_id, 0, sizeof(this->serial_number.vendor_id));
+        memset(this->serial_number.vendor_specific, 0, sizeof(this->serial_number.vendor_specific));
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_REGISTRATION_ID)) != 0)
+    {
+        memset(this->registration_id.arr, 0, sizeof(this->registration_id.arr));
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_REGISTRATION_ID_AUTO_LEARNING)) != 0)
+    {
+        this->registration_id_auto_learning = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_RANGING_BURST_PROFILE)) != 0)
+    {
+        this->ranging_burst_profile = (bcmolt_burst_profile_index) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_DATA_BURST_PROFILE)) != 0)
+    {
+        this->data_burst_profile = (bcmolt_burst_profile_index) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_RANGING_TIME)) != 0)
+    {
+        this->ranging_time = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_DISABLED_AFTER_DISCOVERY)) != 0)
+    {
+        this->disabled_after_discovery = BCMOLT_STATUS_OFF;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_DEACTIVATION_REASON)) != 0)
+    {
+        this->deactivation_reason = BCMOLT_DEACTIVATION_REASON_NONE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_ALL_GEM_PORTS)) != 0)
+    {
+        this->all_gem_ports.len = 0;
+        this->all_gem_ports.val = NULL;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_ALL_ALLOCS)) != 0)
+    {
+        this->all_allocs.len = 0;
+        this->all_allocs.val = NULL;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_EXTENDED_GUARD_TIME)) != 0)
+    {
+        this->extended_guard_time.additional_preburst_guard_time = 0;
+        this->extended_guard_time.additional_postburst_guard_time = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_US_LINE_RATE)) != 0)
+    {
+        this->us_line_rate = BCMOLT_UPSTREAM_LINE_RATE_CAPABILITIES_RATE_2_P_5_G;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_CALIBRATION_RECORD)) != 0)
+    {
+        memset(this->calibration_record.arr, 0, sizeof(this->calibration_record.arr));
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_TUNING_GRANULARITY)) != 0)
+    {
+        this->tuning_granularity = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_STEP_TUNING_TIME)) != 0)
+    {
+        this->step_tuning_time = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_POWER_LEVELLING_CAPABILITIES)) != 0)
+    {
+        this->power_levelling_capabilities = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_REQUEST_REGISTRATION_STATUS)) != 0)
+    {
+        this->request_registration_status.request_registration_state = BCMOLT_CONTROL_STATE_DISABLE;
+        this->request_registration_status.sma_flag = BCMOS_FALSE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_cfg_data_pack(const bcmolt_xgpon_onu_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_ONU_STATE)) != 0)
+    {
+        if (!bcmolt_onu_state_pack(this->onu_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_ONU_OLD_STATE)) != 0)
+    {
+        if (!bcmolt_onu_state_pack(this->onu_old_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_ALARM_STATE)) != 0)
+    {
+        if (!bcmolt_xgpon_onu_alarm_state_pack(&this->alarm_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_REGISTRATION_ENCRYPTION_KEYS)) != 0)
+    {
+        if (!bcmolt_xgpon_onu_registration_keys_pack(&this->registration_encryption_keys, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_CURRENT_ENCRYPTION_KEY)) != 0)
+    {
+        if (!bcmolt_xgpon_onu_aes_key_pack(&this->current_encryption_key, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmolt_serial_number_pack(&this->serial_number, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_REGISTRATION_ID)) != 0)
+    {
+        if (!bcmolt_arr_u8_36_pack(&this->registration_id, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_REGISTRATION_ID_AUTO_LEARNING)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->registration_id_auto_learning))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_RANGING_BURST_PROFILE)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, (uint8_t) this->ranging_burst_profile))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_DATA_BURST_PROFILE)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, (uint8_t) this->data_burst_profile))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_RANGING_TIME)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->ranging_time))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_DISABLED_AFTER_DISCOVERY)) != 0)
+    {
+        if (!bcmolt_status_pack(this->disabled_after_discovery, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_DEACTIVATION_REASON)) != 0)
+    {
+        if (!bcmolt_deactivation_reason_pack(this->deactivation_reason, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_ALL_GEM_PORTS)) != 0)
+    {
+        if (!bcmolt_xgpon_gem_port_with_state_list_u16_max_256_pack(&this->all_gem_ports, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_ALL_ALLOCS)) != 0)
+    {
+        if (!bcmolt_xgpon_alloc_with_state_list_u16_max_32_pack(&this->all_allocs, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_EXTENDED_GUARD_TIME)) != 0)
+    {
+        if (!bcmolt_extended_guard_time_pack(&this->extended_guard_time, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_US_LINE_RATE)) != 0)
+    {
+        if (!bcmolt_upstream_line_rate_capabilities_pack(this->us_line_rate, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_CALIBRATION_RECORD)) != 0)
+    {
+        if (!bcmolt_arr_calibration_record_8_pack(&this->calibration_record, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_TUNING_GRANULARITY)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->tuning_granularity))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_STEP_TUNING_TIME)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->step_tuning_time))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_POWER_LEVELLING_CAPABILITIES)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->power_levelling_capabilities))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_REQUEST_REGISTRATION_STATUS)) != 0)
+    {
+        if (!bcmolt_request_registration_status_pack(&this->request_registration_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_cfg_data_get_packed_length(const bcmolt_xgpon_onu_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_ONU_STATE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_ONU_OLD_STATE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_ALARM_STATE)) != 0)
+    {
+        count += 13;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_REGISTRATION_ENCRYPTION_KEYS)) != 0)
+    {
+        count += 80;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_CURRENT_ENCRYPTION_KEY)) != 0)
+    {
+        count += 17;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_SERIAL_NUMBER)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_REGISTRATION_ID)) != 0)
+    {
+        count += 36;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_REGISTRATION_ID_AUTO_LEARNING)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_RANGING_BURST_PROFILE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_DATA_BURST_PROFILE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_RANGING_TIME)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_DISABLED_AFTER_DISCOVERY)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_DEACTIVATION_REASON)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_ALL_GEM_PORTS)) != 0)
+    {
+        count += bcmolt_xgpon_gem_port_with_state_list_u16_max_256_get_packed_length(&this->all_gem_ports);
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_ALL_ALLOCS)) != 0)
+    {
+        count += bcmolt_xgpon_alloc_with_state_list_u16_max_32_get_packed_length(&this->all_allocs);
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_EXTENDED_GUARD_TIME)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_US_LINE_RATE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_CALIBRATION_RECORD)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_TUNING_GRANULARITY)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_STEP_TUNING_TIME)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_POWER_LEVELLING_CAPABILITIES)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_REQUEST_REGISTRATION_STATUS)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_cfg_data_unpack(bcmolt_xgpon_onu_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_ONU_STATE)) != 0)
+    {
+        if (!bcmolt_onu_state_unpack(&this->onu_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_ONU_OLD_STATE)) != 0)
+    {
+        if (!bcmolt_onu_state_unpack(&this->onu_old_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_ALARM_STATE)) != 0)
+    {
+        if (!bcmolt_xgpon_onu_alarm_state_unpack(&this->alarm_state, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_REGISTRATION_ENCRYPTION_KEYS)) != 0)
+    {
+        if (!bcmolt_xgpon_onu_registration_keys_unpack(&this->registration_encryption_keys, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_CURRENT_ENCRYPTION_KEY)) != 0)
+    {
+        if (!bcmolt_xgpon_onu_aes_key_unpack(&this->current_encryption_key, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmolt_serial_number_unpack(&this->serial_number, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_REGISTRATION_ID)) != 0)
+    {
+        if (!bcmolt_arr_u8_36_unpack(&this->registration_id, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_REGISTRATION_ID_AUTO_LEARNING)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->registration_id_auto_learning))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_RANGING_BURST_PROFILE)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, (uint8_t *) &this->ranging_burst_profile))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_DATA_BURST_PROFILE)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, (uint8_t *) &this->data_burst_profile))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_RANGING_TIME)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->ranging_time))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_DISABLED_AFTER_DISCOVERY)) != 0)
+    {
+        if (!bcmolt_status_unpack(&this->disabled_after_discovery, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_DEACTIVATION_REASON)) != 0)
+    {
+        if (!bcmolt_deactivation_reason_unpack(&this->deactivation_reason, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_ALL_GEM_PORTS)) != 0)
+    {
+        if (!bcmolt_xgpon_gem_port_with_state_list_u16_max_256_unpack(&this->all_gem_ports, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_ALL_ALLOCS)) != 0)
+    {
+        if (!bcmolt_xgpon_alloc_with_state_list_u16_max_32_unpack(&this->all_allocs, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_EXTENDED_GUARD_TIME)) != 0)
+    {
+        if (!bcmolt_extended_guard_time_unpack(&this->extended_guard_time, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_US_LINE_RATE)) != 0)
+    {
+        if (!bcmolt_upstream_line_rate_capabilities_unpack(&this->us_line_rate, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_CALIBRATION_RECORD)) != 0)
+    {
+        if (!bcmolt_arr_calibration_record_8_unpack(&this->calibration_record, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_TUNING_GRANULARITY)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->tuning_granularity))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_STEP_TUNING_TIME)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->step_tuning_time))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_POWER_LEVELLING_CAPABILITIES)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->power_levelling_capabilities))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_REQUEST_REGISTRATION_STATUS)) != 0)
+    {
+        if (!bcmolt_request_registration_status_unpack(&this->request_registration_status, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_ONU_STATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_ONU_OLD_STATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_ALARM_STATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 13))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_REGISTRATION_ENCRYPTION_KEYS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 80))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_CURRENT_ENCRYPTION_KEY)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 17))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_REGISTRATION_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 36))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_REGISTRATION_ID_AUTO_LEARNING)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_RANGING_BURST_PROFILE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_DATA_BURST_PROFILE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_RANGING_TIME)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_DISABLED_AFTER_DISCOVERY)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_DEACTIVATION_REASON)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_ALL_GEM_PORTS)) != 0)
+    {
+        if (!bcmolt_xgpon_gem_port_with_state_list_u16_max_256_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_ALL_ALLOCS)) != 0)
+    {
+        if (!bcmolt_xgpon_alloc_with_state_list_u16_max_32_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_EXTENDED_GUARD_TIME)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_US_LINE_RATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_CALIBRATION_RECORD)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_TUNING_GRANULARITY)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_STEP_TUNING_TIME)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_POWER_LEVELLING_CAPABILITIES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_REQUEST_REGISTRATION_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_cfg_data_bounds_check(const bcmolt_xgpon_onu_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_ONU_STATE)) != 0)
+    {
+        switch (this->onu_state)
+        {
+            case BCMOLT_ONU_STATE_NOT_CONFIGURED:
+                break;
+            case BCMOLT_ONU_STATE_INACTIVE:
+                break;
+            case BCMOLT_ONU_STATE_ACTIVE:
+                break;
+            case BCMOLT_ONU_STATE_ACTIVE_STANDBY:
+                break;
+            case BCMOLT_ONU_STATE_DISABLED:
+                break;
+            case BCMOLT_ONU_STATE_AWAKE_FREE:
+                break;
+            case BCMOLT_ONU_STATE_PROCESSING:
+                break;
+            case BCMOLT_ONU_STATE_LOW_POWER_DOZE:
+                break;
+            case BCMOLT_ONU_STATE_LOW_POWER_SLEEP:
+                break;
+            case BCMOLT_ONU_STATE_LOW_POWER_WATCH:
+                break;
+            case BCMOLT_ONU_STATE_UNAWARE:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ONU_CFG_ID_ONU_STATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_ONU_OLD_STATE)) != 0)
+    {
+        switch (this->onu_old_state)
+        {
+            case BCMOLT_ONU_STATE_NOT_CONFIGURED:
+                break;
+            case BCMOLT_ONU_STATE_INACTIVE:
+                break;
+            case BCMOLT_ONU_STATE_ACTIVE:
+                break;
+            case BCMOLT_ONU_STATE_ACTIVE_STANDBY:
+                break;
+            case BCMOLT_ONU_STATE_DISABLED:
+                break;
+            case BCMOLT_ONU_STATE_AWAKE_FREE:
+                break;
+            case BCMOLT_ONU_STATE_PROCESSING:
+                break;
+            case BCMOLT_ONU_STATE_LOW_POWER_DOZE:
+                break;
+            case BCMOLT_ONU_STATE_LOW_POWER_SLEEP:
+                break;
+            case BCMOLT_ONU_STATE_LOW_POWER_WATCH:
+                break;
+            case BCMOLT_ONU_STATE_UNAWARE:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ONU_CFG_ID_ONU_OLD_STATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_ALARM_STATE)) != 0)
+    {
+        if (!bcmolt_xgpon_onu_alarm_state_bounds_check(&this->alarm_state))
+        {
+            *failed_prop = BCMOLT_XGPON_ONU_CFG_ID_ALARM_STATE;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_REGISTRATION_ENCRYPTION_KEYS)) != 0)
+    {
+        if (!bcmolt_xgpon_onu_registration_keys_bounds_check(&this->registration_encryption_keys))
+        {
+            *failed_prop = BCMOLT_XGPON_ONU_CFG_ID_REGISTRATION_ENCRYPTION_KEYS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_CURRENT_ENCRYPTION_KEY)) != 0)
+    {
+        if (!bcmolt_xgpon_onu_aes_key_bounds_check(&this->current_encryption_key))
+        {
+            *failed_prop = BCMOLT_XGPON_ONU_CFG_ID_CURRENT_ENCRYPTION_KEY;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmolt_serial_number_bounds_check(&this->serial_number))
+        {
+            *failed_prop = BCMOLT_XGPON_ONU_CFG_ID_SERIAL_NUMBER;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_REGISTRATION_ID)) != 0)
+    {
+        if (!bcmolt_arr_u8_36_bounds_check(&this->registration_id))
+        {
+            *failed_prop = BCMOLT_XGPON_ONU_CFG_ID_REGISTRATION_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_RANGING_BURST_PROFILE)) != 0)
+    {
+        if (this->ranging_burst_profile > (bcmolt_burst_profile_index) 3)
+        {
+            *failed_prop = BCMOLT_XGPON_ONU_CFG_ID_RANGING_BURST_PROFILE;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_DATA_BURST_PROFILE)) != 0)
+    {
+        if (this->data_burst_profile > (bcmolt_burst_profile_index) 3)
+        {
+            *failed_prop = BCMOLT_XGPON_ONU_CFG_ID_DATA_BURST_PROFILE;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_DISABLED_AFTER_DISCOVERY)) != 0)
+    {
+        switch (this->disabled_after_discovery)
+        {
+            case BCMOLT_STATUS_OFF:
+                break;
+            case BCMOLT_STATUS_ON:
+                break;
+            case BCMOLT_STATUS_NO_CHANGE:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ONU_CFG_ID_DISABLED_AFTER_DISCOVERY;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_DEACTIVATION_REASON)) != 0)
+    {
+        switch (this->deactivation_reason)
+        {
+            case BCMOLT_DEACTIVATION_REASON_NONE:
+                break;
+            case BCMOLT_DEACTIVATION_REASON_DEACTIVATION:
+                break;
+            case BCMOLT_DEACTIVATION_REASON_ACK_TIMEOUT:
+                break;
+            case BCMOLT_DEACTIVATION_REASON_SFI:
+                break;
+            case BCMOLT_DEACTIVATION_REASON_TIWI:
+                break;
+            case BCMOLT_DEACTIVATION_REASON_PASSWORD_AUTHENTICATION:
+                break;
+            case BCMOLT_DEACTIVATION_REASON_ONU_ALARM:
+                break;
+            case BCMOLT_DEACTIVATION_REASON_LOS:
+                break;
+            case BCMOLT_DEACTIVATION_REASON_LOKI:
+                break;
+            case BCMOLT_DEACTIVATION_REASON_RERANGE_FAILURE:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ONU_CFG_ID_DEACTIVATION_REASON;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_ALL_GEM_PORTS)) != 0)
+    {
+        if (this->all_gem_ports.len > 256)
+        {
+            return BCMOS_FALSE;
+        }
+
+        if (!bcmolt_xgpon_gem_port_with_state_list_u16_max_256_bounds_check(&this->all_gem_ports))
+        {
+            *failed_prop = BCMOLT_XGPON_ONU_CFG_ID_ALL_GEM_PORTS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_ALL_ALLOCS)) != 0)
+    {
+        if (this->all_allocs.len > 32)
+        {
+            return BCMOS_FALSE;
+        }
+
+        if (!bcmolt_xgpon_alloc_with_state_list_u16_max_32_bounds_check(&this->all_allocs))
+        {
+            *failed_prop = BCMOLT_XGPON_ONU_CFG_ID_ALL_ALLOCS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_EXTENDED_GUARD_TIME)) != 0)
+    {
+        if (!bcmolt_extended_guard_time_bounds_check(&this->extended_guard_time))
+        {
+            *failed_prop = BCMOLT_XGPON_ONU_CFG_ID_EXTENDED_GUARD_TIME;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_US_LINE_RATE)) != 0)
+    {
+        switch (this->us_line_rate)
+        {
+            case BCMOLT_UPSTREAM_LINE_RATE_CAPABILITIES_RATE_2_P_5_G:
+                break;
+            case BCMOLT_UPSTREAM_LINE_RATE_CAPABILITIES_RATE_10_G:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ONU_CFG_ID_US_LINE_RATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_CALIBRATION_RECORD)) != 0)
+    {
+        if (!bcmolt_arr_calibration_record_8_bounds_check(&this->calibration_record))
+        {
+            *failed_prop = BCMOLT_XGPON_ONU_CFG_ID_CALIBRATION_RECORD;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CFG_ID_REQUEST_REGISTRATION_STATUS)) != 0)
+    {
+        if (!bcmolt_request_registration_status_bounds_check(&this->request_registration_status))
+        {
+            *failed_prop = BCMOLT_XGPON_ONU_CFG_ID_REQUEST_REGISTRATION_STATUS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_stat_data_set_default(bcmolt_xgpon_onu_stat_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_POSITIVE_DRIFT)) != 0)
+    {
+        this->positive_drift = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_NEGATIVE_DRIFT)) != 0)
+    {
+        this->negative_drift = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_DELIMITER_MISS_DETECTION)) != 0)
+    {
+        this->delimiter_miss_detection = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_BIP32_ERRORS)) != 0)
+    {
+        this->bip32_errors = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_RX_WORDS)) != 0)
+    {
+        this->rx_words = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_FEC_CORRECTED_SYMBOLS)) != 0)
+    {
+        this->fec_corrected_symbols = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_FEC_CORRECTED_CODEWORDS)) != 0)
+    {
+        this->fec_corrected_codewords = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_FEC_UNCORRECTABLE_CODEWORDS)) != 0)
+    {
+        this->fec_uncorrectable_codewords = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_FEC_CODEWORDS)) != 0)
+    {
+        this->fec_codewords = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_FEC_CORRECTED_BITS)) != 0)
+    {
+        this->fec_corrected_bits = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_XGEM_KEY_ERRORS)) != 0)
+    {
+        this->xgem_key_errors = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_XGEM_LOSS)) != 0)
+    {
+        this->xgem_loss = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_RX_PLOAMS_MIC_ERROR)) != 0)
+    {
+        this->rx_ploams_mic_error = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_RX_PLOAMS_NON_IDLE)) != 0)
+    {
+        this->rx_ploams_non_idle = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_RX_OMCI)) != 0)
+    {
+        this->rx_omci = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR)) != 0)
+    {
+        this->rx_omci_packets_crc_error = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_RX_BYTES)) != 0)
+    {
+        this->rx_bytes = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_RX_PACKETS)) != 0)
+    {
+        this->rx_packets = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_TX_BYTES)) != 0)
+    {
+        this->tx_bytes = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_TX_PACKETS)) != 0)
+    {
+        this->tx_packets = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_stat_data_pack(const bcmolt_xgpon_onu_stat_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_POSITIVE_DRIFT)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->positive_drift))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_NEGATIVE_DRIFT)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->negative_drift))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_DELIMITER_MISS_DETECTION)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->delimiter_miss_detection))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_BIP32_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->bip32_errors))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_RX_WORDS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_words))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_FEC_CORRECTED_SYMBOLS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->fec_corrected_symbols))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_FEC_CORRECTED_CODEWORDS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->fec_corrected_codewords))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_FEC_UNCORRECTABLE_CODEWORDS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->fec_uncorrectable_codewords))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_FEC_CODEWORDS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->fec_codewords))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_FEC_CORRECTED_BITS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->fec_corrected_bits))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_XGEM_KEY_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->xgem_key_errors))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_XGEM_LOSS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->xgem_loss))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_RX_PLOAMS_MIC_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_ploams_mic_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_RX_PLOAMS_NON_IDLE)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_ploams_non_idle))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_RX_OMCI)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_omci))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_omci_packets_crc_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_RX_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_RX_PACKETS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->rx_packets))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_TX_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_TX_PACKETS)) != 0)
+    {
+        if (!bcmolt_buf_write_u64(buf, this->tx_packets))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_stat_data_get_packed_length(const bcmolt_xgpon_onu_stat_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_POSITIVE_DRIFT)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_NEGATIVE_DRIFT)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_DELIMITER_MISS_DETECTION)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_BIP32_ERRORS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_RX_WORDS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_FEC_CORRECTED_SYMBOLS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_FEC_CORRECTED_CODEWORDS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_FEC_UNCORRECTABLE_CODEWORDS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_FEC_CODEWORDS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_FEC_CORRECTED_BITS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_XGEM_KEY_ERRORS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_XGEM_LOSS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_RX_PLOAMS_MIC_ERROR)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_RX_PLOAMS_NON_IDLE)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_RX_OMCI)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_RX_BYTES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_RX_PACKETS)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_TX_BYTES)) != 0)
+    {
+        count += 8;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_TX_PACKETS)) != 0)
+    {
+        count += 8;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_stat_data_unpack(bcmolt_xgpon_onu_stat_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_POSITIVE_DRIFT)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->positive_drift))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_NEGATIVE_DRIFT)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->negative_drift))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_DELIMITER_MISS_DETECTION)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->delimiter_miss_detection))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_BIP32_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->bip32_errors))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_RX_WORDS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_words))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_FEC_CORRECTED_SYMBOLS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->fec_corrected_symbols))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_FEC_CORRECTED_CODEWORDS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->fec_corrected_codewords))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_FEC_UNCORRECTABLE_CODEWORDS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->fec_uncorrectable_codewords))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_FEC_CODEWORDS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->fec_codewords))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_FEC_CORRECTED_BITS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->fec_corrected_bits))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_XGEM_KEY_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->xgem_key_errors))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_XGEM_LOSS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->xgem_loss))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_RX_PLOAMS_MIC_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_ploams_mic_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_RX_PLOAMS_NON_IDLE)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_ploams_non_idle))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_RX_OMCI)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_omci))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_omci_packets_crc_error))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_RX_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_RX_PACKETS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->rx_packets))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_TX_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_bytes))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_TX_PACKETS)) != 0)
+    {
+        if (!bcmolt_buf_read_u64(buf, &this->tx_packets))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_stat_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_POSITIVE_DRIFT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_NEGATIVE_DRIFT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_DELIMITER_MISS_DETECTION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_BIP32_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_RX_WORDS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_FEC_CORRECTED_SYMBOLS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_FEC_CORRECTED_CODEWORDS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_FEC_UNCORRECTABLE_CODEWORDS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_FEC_CODEWORDS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_FEC_CORRECTED_BITS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_XGEM_KEY_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_XGEM_LOSS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_RX_PLOAMS_MIC_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_RX_PLOAMS_NON_IDLE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_RX_OMCI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_RX_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_RX_PACKETS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_TX_BYTES)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ID_TX_PACKETS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_stat_data_bounds_check(const bcmolt_xgpon_onu_stat_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_stat_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_stat_cfg_data_set_default(bcmolt_xgpon_onu_stat_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_CFG_ID_CFG)) != 0)
+    {
+        this->cfg.trigger.type = BCMOLT_STAT_CONDITION_TYPE_NONE;
+        this->cfg.soak.active_soak_time = 0;
+        this->cfg.soak.clear_soak_time = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_stat_cfg_data_pack(const bcmolt_xgpon_onu_stat_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_pack(&this->cfg, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_stat_cfg_data_get_packed_length(const bcmolt_xgpon_onu_stat_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_CFG_ID_CFG)) != 0)
+    {
+        count += bcmolt_stat_alarm_config_get_packed_length(&this->cfg);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_stat_cfg_data_unpack(bcmolt_xgpon_onu_stat_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_unpack(&this->cfg, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_stat_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_stat_cfg_data_bounds_check(const bcmolt_xgpon_onu_stat_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_stat_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_CFG_ID_CFG)) != 0)
+    {
+        if (!bcmolt_stat_alarm_config_bounds_check(&this->cfg))
+        {
+            *failed_prop = BCMOLT_XGPON_ONU_STAT_CFG_ID_CFG;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_dfi_data_set_default(bcmolt_xgpon_onu_dfi_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_DFI_ID_ALARM_STATUS)) != 0)
+    {
+        this->alarm_status = BCMOLT_STATUS_OFF;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_dfi_data_pack(const bcmolt_xgpon_onu_dfi_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_DFI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_pack(this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_dfi_data_get_packed_length(const bcmolt_xgpon_onu_dfi_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_DFI_ID_ALARM_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_dfi_data_unpack(bcmolt_xgpon_onu_dfi_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_DFI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_unpack(&this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_dfi_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_DFI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_dfi_data_bounds_check(const bcmolt_xgpon_onu_dfi_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_dfi_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_DFI_ID_ALARM_STATUS)) != 0)
+    {
+        switch (this->alarm_status)
+        {
+            case BCMOLT_STATUS_OFF:
+                break;
+            case BCMOLT_STATUS_ON:
+                break;
+            case BCMOLT_STATUS_NO_CHANGE:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ONU_DFI_ID_ALARM_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_dgi_data_set_default(bcmolt_xgpon_onu_dgi_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_DGI_ID_ALARM_STATUS)) != 0)
+    {
+        this->alarm_status = BCMOLT_STATUS_OFF;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_dgi_data_pack(const bcmolt_xgpon_onu_dgi_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_DGI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_pack(this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_dgi_data_get_packed_length(const bcmolt_xgpon_onu_dgi_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_DGI_ID_ALARM_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_dgi_data_unpack(bcmolt_xgpon_onu_dgi_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_DGI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_unpack(&this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_dgi_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_DGI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_dgi_data_bounds_check(const bcmolt_xgpon_onu_dgi_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_dgi_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_DGI_ID_ALARM_STATUS)) != 0)
+    {
+        switch (this->alarm_status)
+        {
+            case BCMOLT_STATUS_OFF:
+                break;
+            case BCMOLT_STATUS_ON:
+                break;
+            case BCMOLT_STATUS_NO_CHANGE:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ONU_DGI_ID_ALARM_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_dowi_data_set_default(bcmolt_xgpon_onu_dowi_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_DOWI_ID_ALARM_STATUS)) != 0)
+    {
+        this->alarm_status = BCMOLT_STATUS_OFF;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_DOWI_ID_DRIFT_VALUE)) != 0)
+    {
+        this->drift_value = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_DOWI_ID_NEW_EQD)) != 0)
+    {
+        this->new_eqd = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_dowi_data_pack(const bcmolt_xgpon_onu_dowi_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_DOWI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_pack(this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_DOWI_ID_DRIFT_VALUE)) != 0)
+    {
+        if (!bcmolt_buf_write_s32(buf, this->drift_value))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_DOWI_ID_NEW_EQD)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->new_eqd))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_dowi_data_get_packed_length(const bcmolt_xgpon_onu_dowi_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_DOWI_ID_ALARM_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_DOWI_ID_DRIFT_VALUE)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_DOWI_ID_NEW_EQD)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_dowi_data_unpack(bcmolt_xgpon_onu_dowi_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_DOWI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_unpack(&this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_DOWI_ID_DRIFT_VALUE)) != 0)
+    {
+        if (!bcmolt_buf_read_s32(buf, &this->drift_value))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_DOWI_ID_NEW_EQD)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->new_eqd))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_dowi_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_DOWI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_DOWI_ID_DRIFT_VALUE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_DOWI_ID_NEW_EQD)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_dowi_data_bounds_check(const bcmolt_xgpon_onu_dowi_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_dowi_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_DOWI_ID_ALARM_STATUS)) != 0)
+    {
+        switch (this->alarm_status)
+        {
+            case BCMOLT_STATUS_OFF:
+                break;
+            case BCMOLT_STATUS_ON:
+                break;
+            case BCMOLT_STATUS_NO_CHANGE:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ONU_DOWI_ID_ALARM_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_invalid_dbru_report_data_set_default(bcmolt_xgpon_onu_invalid_dbru_report_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_INVALID_DBRU_REPORT_ID_ALLOC_ID)) != 0)
+    {
+        this->alloc_id = (bcmolt_xgpon_alloc_id) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_invalid_dbru_report_data_pack(const bcmolt_xgpon_onu_invalid_dbru_report_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_INVALID_DBRU_REPORT_ID_ALLOC_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, (uint16_t) this->alloc_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_invalid_dbru_report_data_get_packed_length(const bcmolt_xgpon_onu_invalid_dbru_report_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_INVALID_DBRU_REPORT_ID_ALLOC_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_invalid_dbru_report_data_unpack(bcmolt_xgpon_onu_invalid_dbru_report_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_INVALID_DBRU_REPORT_ID_ALLOC_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, (uint16_t *) &this->alloc_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_invalid_dbru_report_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_INVALID_DBRU_REPORT_ID_ALLOC_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_invalid_dbru_report_data_bounds_check(const bcmolt_xgpon_onu_invalid_dbru_report_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_invalid_dbru_report_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_INVALID_DBRU_REPORT_ID_ALLOC_ID)) != 0)
+    {
+        if (this->alloc_id > (bcmolt_xgpon_alloc_id) 16383)
+        {
+            *failed_prop = BCMOLT_XGPON_ONU_INVALID_DBRU_REPORT_ID_ALLOC_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_key_exchange_completed_data_set_default(bcmolt_xgpon_onu_key_exchange_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_KEY_EXCHANGE_COMPLETED_ID_NEW_KEY)) != 0)
+    {
+        memset(this->new_key.encryption_key.bytes, 0, sizeof(this->new_key.encryption_key.bytes));
+        this->new_key.key_index = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_key_exchange_completed_data_pack(const bcmolt_xgpon_onu_key_exchange_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_KEY_EXCHANGE_COMPLETED_ID_NEW_KEY)) != 0)
+    {
+        if (!bcmolt_xgpon_onu_aes_key_pack(&this->new_key, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_key_exchange_completed_data_get_packed_length(const bcmolt_xgpon_onu_key_exchange_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_KEY_EXCHANGE_COMPLETED_ID_NEW_KEY)) != 0)
+    {
+        count += 17;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_key_exchange_completed_data_unpack(bcmolt_xgpon_onu_key_exchange_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_KEY_EXCHANGE_COMPLETED_ID_NEW_KEY)) != 0)
+    {
+        if (!bcmolt_xgpon_onu_aes_key_unpack(&this->new_key, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_key_exchange_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_KEY_EXCHANGE_COMPLETED_ID_NEW_KEY)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 17))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_key_exchange_completed_data_bounds_check(const bcmolt_xgpon_onu_key_exchange_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_key_exchange_completed_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_KEY_EXCHANGE_COMPLETED_ID_NEW_KEY)) != 0)
+    {
+        if (!bcmolt_xgpon_onu_aes_key_bounds_check(&this->new_key))
+        {
+            *failed_prop = BCMOLT_XGPON_ONU_KEY_EXCHANGE_COMPLETED_ID_NEW_KEY;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_key_exchange_key_mismatch_data_set_default(bcmolt_xgpon_onu_key_exchange_key_mismatch_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID_EXPECTED_KEY)) != 0)
+    {
+        memset(this->expected_key.bytes, 0, sizeof(this->expected_key.bytes));
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID_RECEIVED_KEY)) != 0)
+    {
+        memset(this->received_key.bytes, 0, sizeof(this->received_key.bytes));
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_key_exchange_key_mismatch_data_pack(const bcmolt_xgpon_onu_key_exchange_key_mismatch_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID_EXPECTED_KEY)) != 0)
+    {
+        if (!bcmolt_aes_key_pack(&this->expected_key, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID_RECEIVED_KEY)) != 0)
+    {
+        if (!bcmolt_aes_key_pack(&this->received_key, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_key_exchange_key_mismatch_data_get_packed_length(const bcmolt_xgpon_onu_key_exchange_key_mismatch_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID_EXPECTED_KEY)) != 0)
+    {
+        count += 16;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID_RECEIVED_KEY)) != 0)
+    {
+        count += 16;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_key_exchange_key_mismatch_data_unpack(bcmolt_xgpon_onu_key_exchange_key_mismatch_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID_EXPECTED_KEY)) != 0)
+    {
+        if (!bcmolt_aes_key_unpack(&this->expected_key, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID_RECEIVED_KEY)) != 0)
+    {
+        if (!bcmolt_aes_key_unpack(&this->received_key, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_key_exchange_key_mismatch_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID_EXPECTED_KEY)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 16))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID_RECEIVED_KEY)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 16))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_key_exchange_key_mismatch_data_bounds_check(const bcmolt_xgpon_onu_key_exchange_key_mismatch_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_key_exchange_key_mismatch_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID_EXPECTED_KEY)) != 0)
+    {
+        if (!bcmolt_aes_key_bounds_check(&this->expected_key))
+        {
+            *failed_prop = BCMOLT_XGPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID_EXPECTED_KEY;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID_RECEIVED_KEY)) != 0)
+    {
+        if (!bcmolt_aes_key_bounds_check(&this->received_key))
+        {
+            *failed_prop = BCMOLT_XGPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID_RECEIVED_KEY;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_looci_data_set_default(bcmolt_xgpon_onu_looci_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_LOOCI_ID_ALARM_STATUS)) != 0)
+    {
+        this->alarm_status = BCMOLT_STATUS_OFF;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_looci_data_pack(const bcmolt_xgpon_onu_looci_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_LOOCI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_pack(this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_looci_data_get_packed_length(const bcmolt_xgpon_onu_looci_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_LOOCI_ID_ALARM_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_looci_data_unpack(bcmolt_xgpon_onu_looci_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_LOOCI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_unpack(&this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_looci_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_LOOCI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_looci_data_bounds_check(const bcmolt_xgpon_onu_looci_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_looci_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_LOOCI_ID_ALARM_STATUS)) != 0)
+    {
+        switch (this->alarm_status)
+        {
+            case BCMOLT_STATUS_OFF:
+                break;
+            case BCMOLT_STATUS_ON:
+                break;
+            case BCMOLT_STATUS_NO_CHANGE:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ONU_LOOCI_ID_ALARM_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_onu_activation_completed_data_set_default(bcmolt_xgpon_onu_onu_activation_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        this->status = BCMOLT_RESULT_SUCCESS;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        this->fail_reason = BCMOLT_ACTIVATION_FAIL_REASON_NONE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID_REGISTRATION_ID)) != 0)
+    {
+        memset(this->registration_id.arr, 0, sizeof(this->registration_id.arr));
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID_REGISTRATION_ENCRYPTION_KEYS)) != 0)
+    {
+        memset(this->registration_encryption_keys.ploam_ik.bytes, 0, sizeof(this->registration_encryption_keys.ploam_ik.bytes));
+        memset(this->registration_encryption_keys.omci_ik.bytes, 0, sizeof(this->registration_encryption_keys.omci_ik.bytes));
+        memset(this->registration_encryption_keys.omci_k1.bytes, 0, sizeof(this->registration_encryption_keys.omci_k1.bytes));
+        memset(this->registration_encryption_keys.omci_k2.bytes, 0, sizeof(this->registration_encryption_keys.omci_k2.bytes));
+        memset(this->registration_encryption_keys.kek.bytes, 0, sizeof(this->registration_encryption_keys.kek.bytes));
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_activation_completed_data_pack(const bcmolt_xgpon_onu_onu_activation_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_result_pack(this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        if (!bcmolt_activation_fail_reason_pack(this->fail_reason, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID_REGISTRATION_ID)) != 0)
+    {
+        if (!bcmolt_arr_u8_36_pack(&this->registration_id, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID_REGISTRATION_ENCRYPTION_KEYS)) != 0)
+    {
+        if (!bcmolt_xgpon_onu_registration_keys_pack(&this->registration_encryption_keys, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_onu_activation_completed_data_get_packed_length(const bcmolt_xgpon_onu_onu_activation_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID_REGISTRATION_ID)) != 0)
+    {
+        count += 36;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID_REGISTRATION_ENCRYPTION_KEYS)) != 0)
+    {
+        count += 80;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_activation_completed_data_unpack(bcmolt_xgpon_onu_onu_activation_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_result_unpack(&this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        if (!bcmolt_activation_fail_reason_unpack(&this->fail_reason, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID_REGISTRATION_ID)) != 0)
+    {
+        if (!bcmolt_arr_u8_36_unpack(&this->registration_id, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID_REGISTRATION_ENCRYPTION_KEYS)) != 0)
+    {
+        if (!bcmolt_xgpon_onu_registration_keys_unpack(&this->registration_encryption_keys, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_activation_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID_REGISTRATION_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 36))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID_REGISTRATION_ENCRYPTION_KEYS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 80))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_activation_completed_data_bounds_check(const bcmolt_xgpon_onu_onu_activation_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_onu_activation_completed_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        switch (this->status)
+        {
+            case BCMOLT_RESULT_SUCCESS:
+                break;
+            case BCMOLT_RESULT_FAIL:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        switch (this->fail_reason)
+        {
+            case BCMOLT_ACTIVATION_FAIL_REASON_NONE:
+                break;
+            case BCMOLT_ACTIVATION_FAIL_REASON_RANGING:
+                break;
+            case BCMOLT_ACTIVATION_FAIL_REASON_PASSWORD_AUTHENTICATION:
+                break;
+            case BCMOLT_ACTIVATION_FAIL_REASON_LOS:
+                break;
+            case BCMOLT_ACTIVATION_FAIL_REASON_ONU_ALARM:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID_FAIL_REASON;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID_REGISTRATION_ID)) != 0)
+    {
+        if (!bcmolt_arr_u8_36_bounds_check(&this->registration_id))
+        {
+            *failed_prop = BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID_REGISTRATION_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID_REGISTRATION_ENCRYPTION_KEYS)) != 0)
+    {
+        if (!bcmolt_xgpon_onu_registration_keys_bounds_check(&this->registration_encryption_keys))
+        {
+            *failed_prop = BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID_REGISTRATION_ENCRYPTION_KEYS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_onu_alarm_data_set_default(bcmolt_xgpon_onu_onu_alarm_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_ALARM_ID_ONU_ALARM)) != 0)
+    {
+        this->onu_alarm.losi = BCMOLT_STATUS_OFF;
+        this->onu_alarm.lobi = BCMOLT_STATUS_OFF;
+        this->onu_alarm.lopci_miss = BCMOLT_STATUS_OFF;
+        this->onu_alarm.lopci_mic_error = BCMOLT_STATUS_OFF;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_alarm_data_pack(const bcmolt_xgpon_onu_onu_alarm_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_ALARM_ID_ONU_ALARM)) != 0)
+    {
+        if (!bcmolt_xgpon_onu_alarms_pack(&this->onu_alarm, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_onu_alarm_data_get_packed_length(const bcmolt_xgpon_onu_onu_alarm_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_ALARM_ID_ONU_ALARM)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_alarm_data_unpack(bcmolt_xgpon_onu_onu_alarm_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_ALARM_ID_ONU_ALARM)) != 0)
+    {
+        if (!bcmolt_xgpon_onu_alarms_unpack(&this->onu_alarm, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_alarm_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_ALARM_ID_ONU_ALARM)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_alarm_data_bounds_check(const bcmolt_xgpon_onu_onu_alarm_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_onu_alarm_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_ALARM_ID_ONU_ALARM)) != 0)
+    {
+        if (!bcmolt_xgpon_onu_alarms_bounds_check(&this->onu_alarm))
+        {
+            *failed_prop = BCMOLT_XGPON_ONU_ONU_ALARM_ID_ONU_ALARM;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_onu_deactivation_completed_data_set_default(bcmolt_xgpon_onu_onu_deactivation_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_DEACTIVATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        this->status = BCMOLT_RESULT_SUCCESS;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_deactivation_completed_data_pack(const bcmolt_xgpon_onu_onu_deactivation_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_DEACTIVATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_result_pack(this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_onu_deactivation_completed_data_get_packed_length(const bcmolt_xgpon_onu_onu_deactivation_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_DEACTIVATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_deactivation_completed_data_unpack(bcmolt_xgpon_onu_onu_deactivation_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_DEACTIVATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_result_unpack(&this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_deactivation_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_DEACTIVATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_deactivation_completed_data_bounds_check(const bcmolt_xgpon_onu_onu_deactivation_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_onu_deactivation_completed_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_DEACTIVATION_COMPLETED_ID_STATUS)) != 0)
+    {
+        switch (this->status)
+        {
+            case BCMOLT_RESULT_SUCCESS:
+                break;
+            case BCMOLT_RESULT_FAIL:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ONU_ONU_DEACTIVATION_COMPLETED_ID_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_onu_disable_completed_data_set_default(bcmolt_xgpon_onu_onu_disable_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_DISABLE_COMPLETED_ID_SERIAL_NUMBER)) != 0)
+    {
+        memset(this->serial_number.vendor_id, 0, sizeof(this->serial_number.vendor_id));
+        memset(this->serial_number.vendor_specific, 0, sizeof(this->serial_number.vendor_specific));
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_disable_completed_data_pack(const bcmolt_xgpon_onu_onu_disable_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_DISABLE_COMPLETED_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmolt_serial_number_pack(&this->serial_number, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_onu_disable_completed_data_get_packed_length(const bcmolt_xgpon_onu_onu_disable_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_DISABLE_COMPLETED_ID_SERIAL_NUMBER)) != 0)
+    {
+        count += 8;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_disable_completed_data_unpack(bcmolt_xgpon_onu_onu_disable_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_DISABLE_COMPLETED_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmolt_serial_number_unpack(&this->serial_number, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_disable_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_DISABLE_COMPLETED_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_disable_completed_data_bounds_check(const bcmolt_xgpon_onu_onu_disable_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_onu_disable_completed_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_DISABLE_COMPLETED_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmolt_serial_number_bounds_check(&this->serial_number))
+        {
+            *failed_prop = BCMOLT_XGPON_ONU_ONU_DISABLE_COMPLETED_ID_SERIAL_NUMBER;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_onu_enable_completed_data_set_default(bcmolt_xgpon_onu_onu_enable_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_ENABLE_COMPLETED_ID_SERIAL_NUMBER)) != 0)
+    {
+        memset(this->serial_number.vendor_id, 0, sizeof(this->serial_number.vendor_id));
+        memset(this->serial_number.vendor_specific, 0, sizeof(this->serial_number.vendor_specific));
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_enable_completed_data_pack(const bcmolt_xgpon_onu_onu_enable_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_ENABLE_COMPLETED_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmolt_serial_number_pack(&this->serial_number, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_onu_enable_completed_data_get_packed_length(const bcmolt_xgpon_onu_onu_enable_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_ENABLE_COMPLETED_ID_SERIAL_NUMBER)) != 0)
+    {
+        count += 8;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_enable_completed_data_unpack(bcmolt_xgpon_onu_onu_enable_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_ENABLE_COMPLETED_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmolt_serial_number_unpack(&this->serial_number, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_enable_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_ENABLE_COMPLETED_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 8))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_enable_completed_data_bounds_check(const bcmolt_xgpon_onu_onu_enable_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_onu_enable_completed_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_ENABLE_COMPLETED_ID_SERIAL_NUMBER)) != 0)
+    {
+        if (!bcmolt_serial_number_bounds_check(&this->serial_number))
+        {
+            *failed_prop = BCMOLT_XGPON_ONU_ONU_ENABLE_COMPLETED_ID_SERIAL_NUMBER;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_onu_tuning_in_completed_data_set_default(bcmolt_xgpon_onu_onu_tuning_in_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_IN_COMPLETED_ID_RESULT)) != 0)
+    {
+        this->result = BCMOLT_RESULT_SUCCESS;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_IN_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        this->fail_reason = BCMOLT_TUNE_IN_FAIL_REASON_NONE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_tuning_in_completed_data_pack(const bcmolt_xgpon_onu_onu_tuning_in_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_IN_COMPLETED_ID_RESULT)) != 0)
+    {
+        if (!bcmolt_result_pack(this->result, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_IN_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        if (!bcmolt_tune_in_fail_reason_pack(this->fail_reason, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_onu_tuning_in_completed_data_get_packed_length(const bcmolt_xgpon_onu_onu_tuning_in_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_IN_COMPLETED_ID_RESULT)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_IN_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_tuning_in_completed_data_unpack(bcmolt_xgpon_onu_onu_tuning_in_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_IN_COMPLETED_ID_RESULT)) != 0)
+    {
+        if (!bcmolt_result_unpack(&this->result, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_IN_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        if (!bcmolt_tune_in_fail_reason_unpack(&this->fail_reason, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_tuning_in_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_IN_COMPLETED_ID_RESULT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_IN_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_tuning_in_completed_data_bounds_check(const bcmolt_xgpon_onu_onu_tuning_in_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_onu_tuning_in_completed_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_IN_COMPLETED_ID_RESULT)) != 0)
+    {
+        switch (this->result)
+        {
+            case BCMOLT_RESULT_SUCCESS:
+                break;
+            case BCMOLT_RESULT_FAIL:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ONU_ONU_TUNING_IN_COMPLETED_ID_RESULT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_IN_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        switch (this->fail_reason)
+        {
+            case BCMOLT_TUNE_IN_FAIL_REASON_NONE:
+                break;
+            case BCMOLT_TUNE_IN_FAIL_REASON_NO_TUNING_RESPONSE_PLOAM_RECEIVED:
+                break;
+            case BCMOLT_TUNE_IN_FAIL_REASON_ONU_ACTIVATION_FAILED:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ONU_ONU_TUNING_IN_COMPLETED_ID_FAIL_REASON;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_onu_tuning_out_completed_data_set_default(bcmolt_xgpon_onu_onu_tuning_out_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_OUT_COMPLETED_ID_RESULT)) != 0)
+    {
+        this->result = BCMOLT_RESULT_SUCCESS;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_OUT_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        this->fail_reason = BCMOLT_TUNE_OUT_FAIL_REASON_NONE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_tuning_out_completed_data_pack(const bcmolt_xgpon_onu_onu_tuning_out_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_OUT_COMPLETED_ID_RESULT)) != 0)
+    {
+        if (!bcmolt_result_pack(this->result, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_OUT_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        if (!bcmolt_tune_out_fail_reason_pack(this->fail_reason, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_onu_tuning_out_completed_data_get_packed_length(const bcmolt_xgpon_onu_onu_tuning_out_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_OUT_COMPLETED_ID_RESULT)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_OUT_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_tuning_out_completed_data_unpack(bcmolt_xgpon_onu_onu_tuning_out_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_OUT_COMPLETED_ID_RESULT)) != 0)
+    {
+        if (!bcmolt_result_unpack(&this->result, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_OUT_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        if (!bcmolt_tune_out_fail_reason_unpack(&this->fail_reason, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_tuning_out_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_OUT_COMPLETED_ID_RESULT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_OUT_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_tuning_out_completed_data_bounds_check(const bcmolt_xgpon_onu_onu_tuning_out_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_onu_tuning_out_completed_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_OUT_COMPLETED_ID_RESULT)) != 0)
+    {
+        switch (this->result)
+        {
+            case BCMOLT_RESULT_SUCCESS:
+                break;
+            case BCMOLT_RESULT_FAIL:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ONU_ONU_TUNING_OUT_COMPLETED_ID_RESULT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_OUT_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        switch (this->fail_reason)
+        {
+            case BCMOLT_TUNE_OUT_FAIL_REASON_NONE:
+                break;
+            case BCMOLT_TUNE_OUT_FAIL_REASON_NACK_PLOAM_RECEIVED:
+                break;
+            case BCMOLT_TUNE_OUT_FAIL_REASON_NO_TUNING_RESPONSE_PLOAM_RECEIVED:
+                break;
+            case BCMOLT_TUNE_OUT_FAIL_REASON_TSOURCE_TIMEOUT:
+                break;
+            case BCMOLT_TUNE_OUT_FAIL_REASON_ROLLBACK_REQUEST:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ONU_ONU_TUNING_OUT_COMPLETED_ID_FAIL_REASON;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_possible_drift_data_set_default(bcmolt_xgpon_onu_possible_drift_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_POSSIBLE_DRIFT_ID_ALARM_STATUS)) != 0)
+    {
+        this->alarm_status = BCMOLT_STATUS_OFF;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_POSSIBLE_DRIFT_ID_ESTIMATED_DRIFT)) != 0)
+    {
+        this->estimated_drift = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_possible_drift_data_pack(const bcmolt_xgpon_onu_possible_drift_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_POSSIBLE_DRIFT_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_pack(this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_POSSIBLE_DRIFT_ID_ESTIMATED_DRIFT)) != 0)
+    {
+        if (!bcmolt_buf_write_s32(buf, this->estimated_drift))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_possible_drift_data_get_packed_length(const bcmolt_xgpon_onu_possible_drift_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_POSSIBLE_DRIFT_ID_ALARM_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_POSSIBLE_DRIFT_ID_ESTIMATED_DRIFT)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_possible_drift_data_unpack(bcmolt_xgpon_onu_possible_drift_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_POSSIBLE_DRIFT_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_unpack(&this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_POSSIBLE_DRIFT_ID_ESTIMATED_DRIFT)) != 0)
+    {
+        if (!bcmolt_buf_read_s32(buf, &this->estimated_drift))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_possible_drift_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_POSSIBLE_DRIFT_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_POSSIBLE_DRIFT_ID_ESTIMATED_DRIFT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_possible_drift_data_bounds_check(const bcmolt_xgpon_onu_possible_drift_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_possible_drift_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_POSSIBLE_DRIFT_ID_ALARM_STATUS)) != 0)
+    {
+        switch (this->alarm_status)
+        {
+            case BCMOLT_STATUS_OFF:
+                break;
+            case BCMOLT_STATUS_ON:
+                break;
+            case BCMOLT_STATUS_NO_CHANGE:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ONU_POSSIBLE_DRIFT_ID_ALARM_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_power_consumption_report_data_set_default(bcmolt_xgpon_onu_power_consumption_report_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_POWER_CONSUMPTION_REPORT_ID_POWER_CONSUMPTION_REPORT)) != 0)
+    {
+        memset(this->power_consumption_report.arr, 0, sizeof(this->power_consumption_report.arr));
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_power_consumption_report_data_pack(const bcmolt_xgpon_onu_power_consumption_report_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_POWER_CONSUMPTION_REPORT_ID_POWER_CONSUMPTION_REPORT)) != 0)
+    {
+        if (!bcmolt_arr_power_consumption_channel_report_8_pack(&this->power_consumption_report, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_power_consumption_report_data_get_packed_length(const bcmolt_xgpon_onu_power_consumption_report_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_POWER_CONSUMPTION_REPORT_ID_POWER_CONSUMPTION_REPORT)) != 0)
+    {
+        count += 32;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_power_consumption_report_data_unpack(bcmolt_xgpon_onu_power_consumption_report_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_POWER_CONSUMPTION_REPORT_ID_POWER_CONSUMPTION_REPORT)) != 0)
+    {
+        if (!bcmolt_arr_power_consumption_channel_report_8_unpack(&this->power_consumption_report, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_power_consumption_report_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_POWER_CONSUMPTION_REPORT_ID_POWER_CONSUMPTION_REPORT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 32))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_power_consumption_report_data_bounds_check(const bcmolt_xgpon_onu_power_consumption_report_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_power_consumption_report_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_POWER_CONSUMPTION_REPORT_ID_POWER_CONSUMPTION_REPORT)) != 0)
+    {
+        if (!bcmolt_arr_power_consumption_channel_report_8_bounds_check(&this->power_consumption_report))
+        {
+            *failed_prop = BCMOLT_XGPON_ONU_POWER_CONSUMPTION_REPORT_ID_POWER_CONSUMPTION_REPORT;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_power_level_report_data_set_default(bcmolt_xgpon_onu_power_level_report_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_POWER_LEVEL_REPORT_ID_ATTENUATION)) != 0)
+    {
+        this->attenuation = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_POWER_LEVEL_REPORT_ID_POWER_LEVELLING_CAPABILITY)) != 0)
+    {
+        this->power_levelling_capability = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_power_level_report_data_pack(const bcmolt_xgpon_onu_power_level_report_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_POWER_LEVEL_REPORT_ID_ATTENUATION)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->attenuation))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_POWER_LEVEL_REPORT_ID_POWER_LEVELLING_CAPABILITY)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->power_levelling_capability))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_power_level_report_data_get_packed_length(const bcmolt_xgpon_onu_power_level_report_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_POWER_LEVEL_REPORT_ID_ATTENUATION)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_POWER_LEVEL_REPORT_ID_POWER_LEVELLING_CAPABILITY)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_power_level_report_data_unpack(bcmolt_xgpon_onu_power_level_report_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_POWER_LEVEL_REPORT_ID_ATTENUATION)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->attenuation))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_POWER_LEVEL_REPORT_ID_POWER_LEVELLING_CAPABILITY)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->power_levelling_capability))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_power_level_report_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_POWER_LEVEL_REPORT_ID_ATTENUATION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_POWER_LEVEL_REPORT_ID_POWER_LEVELLING_CAPABILITY)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_power_level_report_data_bounds_check(const bcmolt_xgpon_onu_power_level_report_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_power_level_report_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_power_management_state_change_data_set_default(bcmolt_xgpon_onu_power_management_state_change_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_OLD_STATE)) != 0)
+    {
+        this->old_state = BCMOLT_ONU_STATE_NOT_CONFIGURED;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_NEW_STATE)) != 0)
+    {
+        this->new_state = BCMOLT_ONU_STATE_NOT_CONFIGURED;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_REASON)) != 0)
+    {
+        this->reason = BCMOLT_POWER_MANAGEMENT_TRANSITION_REASON_POWER_MANAGEMENT_ENABLED;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_power_management_state_change_data_pack(const bcmolt_xgpon_onu_power_management_state_change_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_OLD_STATE)) != 0)
+    {
+        if (!bcmolt_onu_state_pack(this->old_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_NEW_STATE)) != 0)
+    {
+        if (!bcmolt_onu_state_pack(this->new_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_REASON)) != 0)
+    {
+        if (!bcmolt_power_management_transition_reason_pack(this->reason, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_power_management_state_change_data_get_packed_length(const bcmolt_xgpon_onu_power_management_state_change_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_OLD_STATE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_NEW_STATE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_REASON)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_power_management_state_change_data_unpack(bcmolt_xgpon_onu_power_management_state_change_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_OLD_STATE)) != 0)
+    {
+        if (!bcmolt_onu_state_unpack(&this->old_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_NEW_STATE)) != 0)
+    {
+        if (!bcmolt_onu_state_unpack(&this->new_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_REASON)) != 0)
+    {
+        if (!bcmolt_power_management_transition_reason_unpack(&this->reason, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_power_management_state_change_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_OLD_STATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_NEW_STATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_REASON)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_power_management_state_change_data_bounds_check(const bcmolt_xgpon_onu_power_management_state_change_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_power_management_state_change_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_OLD_STATE)) != 0)
+    {
+        switch (this->old_state)
+        {
+            case BCMOLT_ONU_STATE_NOT_CONFIGURED:
+                break;
+            case BCMOLT_ONU_STATE_INACTIVE:
+                break;
+            case BCMOLT_ONU_STATE_ACTIVE:
+                break;
+            case BCMOLT_ONU_STATE_ACTIVE_STANDBY:
+                break;
+            case BCMOLT_ONU_STATE_DISABLED:
+                break;
+            case BCMOLT_ONU_STATE_AWAKE_FREE:
+                break;
+            case BCMOLT_ONU_STATE_PROCESSING:
+                break;
+            case BCMOLT_ONU_STATE_LOW_POWER_DOZE:
+                break;
+            case BCMOLT_ONU_STATE_LOW_POWER_SLEEP:
+                break;
+            case BCMOLT_ONU_STATE_LOW_POWER_WATCH:
+                break;
+            case BCMOLT_ONU_STATE_UNAWARE:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_OLD_STATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_NEW_STATE)) != 0)
+    {
+        switch (this->new_state)
+        {
+            case BCMOLT_ONU_STATE_NOT_CONFIGURED:
+                break;
+            case BCMOLT_ONU_STATE_INACTIVE:
+                break;
+            case BCMOLT_ONU_STATE_ACTIVE:
+                break;
+            case BCMOLT_ONU_STATE_ACTIVE_STANDBY:
+                break;
+            case BCMOLT_ONU_STATE_DISABLED:
+                break;
+            case BCMOLT_ONU_STATE_AWAKE_FREE:
+                break;
+            case BCMOLT_ONU_STATE_PROCESSING:
+                break;
+            case BCMOLT_ONU_STATE_LOW_POWER_DOZE:
+                break;
+            case BCMOLT_ONU_STATE_LOW_POWER_SLEEP:
+                break;
+            case BCMOLT_ONU_STATE_LOW_POWER_WATCH:
+                break;
+            case BCMOLT_ONU_STATE_UNAWARE:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_NEW_STATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_REASON)) != 0)
+    {
+        switch (this->reason)
+        {
+            case BCMOLT_POWER_MANAGEMENT_TRANSITION_REASON_POWER_MANAGEMENT_ENABLED:
+                break;
+            case BCMOLT_POWER_MANAGEMENT_TRANSITION_REASON_POWER_MANAGEMENT_DISABLED:
+                break;
+            case BCMOLT_POWER_MANAGEMENT_TRANSITION_REASON_SLEEP_REQUEST_AWAKE:
+                break;
+            case BCMOLT_POWER_MANAGEMENT_TRANSITION_REASON_SLEEP_REQUEST_DOZE:
+                break;
+            case BCMOLT_POWER_MANAGEMENT_TRANSITION_REASON_SLEEP_REQUEST_SLEEP:
+                break;
+            case BCMOLT_POWER_MANAGEMENT_TRANSITION_REASON_SLEEP_REQUEST_WATCH:
+                break;
+            case BCMOLT_POWER_MANAGEMENT_TRANSITION_REASON_TERI_EXPIRED:
+                break;
+            case BCMOLT_POWER_MANAGEMENT_TRANSITION_REASON_TALERTED_EXPIRED:
+                break;
+            case BCMOLT_POWER_MANAGEMENT_TRANSITION_REASON_ALARM:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_REASON;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_pqsi_data_set_default(bcmolt_xgpon_onu_pqsi_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_PQSI_ID_ALARM_STATUS)) != 0)
+    {
+        this->alarm_status = BCMOLT_STATUS_OFF;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_pqsi_data_pack(const bcmolt_xgpon_onu_pqsi_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_PQSI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_pack(this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_pqsi_data_get_packed_length(const bcmolt_xgpon_onu_pqsi_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_PQSI_ID_ALARM_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_pqsi_data_unpack(bcmolt_xgpon_onu_pqsi_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_PQSI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_unpack(&this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_pqsi_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_PQSI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_pqsi_data_bounds_check(const bcmolt_xgpon_onu_pqsi_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_pqsi_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_PQSI_ID_ALARM_STATUS)) != 0)
+    {
+        switch (this->alarm_status)
+        {
+            case BCMOLT_STATUS_OFF:
+                break;
+            case BCMOLT_STATUS_ON:
+                break;
+            case BCMOLT_STATUS_NO_CHANGE:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ONU_PQSI_ID_ALARM_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_ranging_completed_data_set_default(bcmolt_xgpon_onu_ranging_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_STATUS)) != 0)
+    {
+        this->status = BCMOLT_RESULT_SUCCESS;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        this->fail_reason = BCMOLT_RANGING_FAIL_REASON_NONE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_EQD)) != 0)
+    {
+        this->eqd = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_NUMBER_OF_PLOAMS)) != 0)
+    {
+        this->number_of_ploams = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_POWER_LEVEL)) != 0)
+    {
+        this->power_level = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_ranging_completed_data_pack(const bcmolt_xgpon_onu_ranging_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_result_pack(this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        if (!bcmolt_ranging_fail_reason_pack(this->fail_reason, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_EQD)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->eqd))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_NUMBER_OF_PLOAMS)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->number_of_ploams))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_POWER_LEVEL)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->power_level))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_ranging_completed_data_get_packed_length(const bcmolt_xgpon_onu_ranging_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_EQD)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_NUMBER_OF_PLOAMS)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_POWER_LEVEL)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_ranging_completed_data_unpack(bcmolt_xgpon_onu_ranging_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_result_unpack(&this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        if (!bcmolt_ranging_fail_reason_unpack(&this->fail_reason, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_EQD)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->eqd))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_NUMBER_OF_PLOAMS)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->number_of_ploams))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_POWER_LEVEL)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->power_level))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_ranging_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_EQD)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_NUMBER_OF_PLOAMS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_POWER_LEVEL)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_ranging_completed_data_bounds_check(const bcmolt_xgpon_onu_ranging_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_ranging_completed_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_STATUS)) != 0)
+    {
+        switch (this->status)
+        {
+            case BCMOLT_RESULT_SUCCESS:
+                break;
+            case BCMOLT_RESULT_FAIL:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        switch (this->fail_reason)
+        {
+            case BCMOLT_RANGING_FAIL_REASON_NONE:
+                break;
+            case BCMOLT_RANGING_FAIL_REASON_RANGING_ACK_TIMEOUT:
+                break;
+            case BCMOLT_RANGING_FAIL_REASON_PLOAM_DATA_MISMATCH:
+                break;
+            case BCMOLT_RANGING_FAIL_REASON_PLOAM_TYPE_MISMATCH:
+                break;
+            case BCMOLT_RANGING_FAIL_REASON_PLOAM_ONU_ID_MISMATCH:
+                break;
+            case BCMOLT_RANGING_FAIL_REASON_DRIFT_EXCEEDED:
+                break;
+            case BCMOLT_RANGING_FAIL_REASON_NO_PLOAM_RECEIVED:
+                break;
+            case BCMOLT_RANGING_FAIL_REASON_LOS:
+                break;
+            case BCMOLT_RANGING_FAIL_REASON_ALARMS:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_FAIL_REASON;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_registration_id_data_set_default(bcmolt_xgpon_onu_registration_id_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_REGISTRATION_ID_ID_REGISTRATION_ID)) != 0)
+    {
+        memset(this->registration_id.arr, 0, sizeof(this->registration_id.arr));
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_REGISTRATION_ID_ID_REQUEST_REGISTRATION_STATUS)) != 0)
+    {
+        this->request_registration_status = BCMOLT_RESULT_SUCCESS;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_REGISTRATION_ID_ID_REQUEST_REGISTRATION_FAIL_REASON)) != 0)
+    {
+        this->request_registration_fail_reason = BCMOLT_REQUEST_REGISTRATION_FAIL_REASON_NONE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_registration_id_data_pack(const bcmolt_xgpon_onu_registration_id_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_REGISTRATION_ID_ID_REGISTRATION_ID)) != 0)
+    {
+        if (!bcmolt_arr_u8_36_pack(&this->registration_id, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_REGISTRATION_ID_ID_REQUEST_REGISTRATION_STATUS)) != 0)
+    {
+        if (!bcmolt_result_pack(this->request_registration_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_REGISTRATION_ID_ID_REQUEST_REGISTRATION_FAIL_REASON)) != 0)
+    {
+        if (!bcmolt_request_registration_fail_reason_pack(this->request_registration_fail_reason, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_registration_id_data_get_packed_length(const bcmolt_xgpon_onu_registration_id_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_REGISTRATION_ID_ID_REGISTRATION_ID)) != 0)
+    {
+        count += 36;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_REGISTRATION_ID_ID_REQUEST_REGISTRATION_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_REGISTRATION_ID_ID_REQUEST_REGISTRATION_FAIL_REASON)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_registration_id_data_unpack(bcmolt_xgpon_onu_registration_id_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_REGISTRATION_ID_ID_REGISTRATION_ID)) != 0)
+    {
+        if (!bcmolt_arr_u8_36_unpack(&this->registration_id, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_REGISTRATION_ID_ID_REQUEST_REGISTRATION_STATUS)) != 0)
+    {
+        if (!bcmolt_result_unpack(&this->request_registration_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_REGISTRATION_ID_ID_REQUEST_REGISTRATION_FAIL_REASON)) != 0)
+    {
+        if (!bcmolt_request_registration_fail_reason_unpack(&this->request_registration_fail_reason, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_registration_id_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_REGISTRATION_ID_ID_REGISTRATION_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 36))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_REGISTRATION_ID_ID_REQUEST_REGISTRATION_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_REGISTRATION_ID_ID_REQUEST_REGISTRATION_FAIL_REASON)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_registration_id_data_bounds_check(const bcmolt_xgpon_onu_registration_id_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_registration_id_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_REGISTRATION_ID_ID_REGISTRATION_ID)) != 0)
+    {
+        if (!bcmolt_arr_u8_36_bounds_check(&this->registration_id))
+        {
+            *failed_prop = BCMOLT_XGPON_ONU_REGISTRATION_ID_ID_REGISTRATION_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_REGISTRATION_ID_ID_REQUEST_REGISTRATION_STATUS)) != 0)
+    {
+        switch (this->request_registration_status)
+        {
+            case BCMOLT_RESULT_SUCCESS:
+                break;
+            case BCMOLT_RESULT_FAIL:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ONU_REGISTRATION_ID_ID_REQUEST_REGISTRATION_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_REGISTRATION_ID_ID_REQUEST_REGISTRATION_FAIL_REASON)) != 0)
+    {
+        switch (this->request_registration_fail_reason)
+        {
+            case BCMOLT_REQUEST_REGISTRATION_FAIL_REASON_NONE:
+                break;
+            case BCMOLT_REQUEST_REGISTRATION_FAIL_REASON_REGISTRATION_PLOAM_TIMEOUT:
+                break;
+            case BCMOLT_REQUEST_REGISTRATION_FAIL_REASON_ONU_ALARM:
+                break;
+            case BCMOLT_REQUEST_REGISTRATION_FAIL_REASON_DEACTIVATION:
+                break;
+            case BCMOLT_REQUEST_REGISTRATION_FAIL_REASON_DISABLE:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ONU_REGISTRATION_ID_ID_REQUEST_REGISTRATION_FAIL_REASON;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_rssi_measurement_completed_data_set_default(bcmolt_xgpon_onu_rssi_measurement_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID_STATUS)) != 0)
+    {
+        this->status = BCMOLT_RESULT_SUCCESS;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        this->fail_reason = BCMOLT_RSSI_MEASUREMENT_FAIL_REASON_NONE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_rssi_measurement_completed_data_pack(const bcmolt_xgpon_onu_rssi_measurement_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_result_pack(this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        if (!bcmolt_rssi_measurement_fail_reason_pack(this->fail_reason, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_rssi_measurement_completed_data_get_packed_length(const bcmolt_xgpon_onu_rssi_measurement_completed_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_rssi_measurement_completed_data_unpack(bcmolt_xgpon_onu_rssi_measurement_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_result_unpack(&this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        if (!bcmolt_rssi_measurement_fail_reason_unpack(&this->fail_reason, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_rssi_measurement_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_rssi_measurement_completed_data_bounds_check(const bcmolt_xgpon_onu_rssi_measurement_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_rssi_measurement_completed_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID_STATUS)) != 0)
+    {
+        switch (this->status)
+        {
+            case BCMOLT_RESULT_SUCCESS:
+                break;
+            case BCMOLT_RESULT_FAIL:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID_FAIL_REASON)) != 0)
+    {
+        switch (this->fail_reason)
+        {
+            case BCMOLT_RSSI_MEASUREMENT_FAIL_REASON_NONE:
+                break;
+            case BCMOLT_RSSI_MEASUREMENT_FAIL_REASON_NO_DELIMITER:
+                break;
+            case BCMOLT_RSSI_MEASUREMENT_FAIL_REASON_NO_ACCESS:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID_FAIL_REASON;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_sdi_data_set_default(bcmolt_xgpon_onu_sdi_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SDI_ID_ALARM_STATUS)) != 0)
+    {
+        this->alarm_status = BCMOLT_STATUS_OFF;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SDI_ID_BER)) != 0)
+    {
+        this->ber = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_sdi_data_pack(const bcmolt_xgpon_onu_sdi_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SDI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_pack(this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SDI_ID_BER)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->ber))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_sdi_data_get_packed_length(const bcmolt_xgpon_onu_sdi_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SDI_ID_ALARM_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SDI_ID_BER)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_sdi_data_unpack(bcmolt_xgpon_onu_sdi_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SDI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_unpack(&this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SDI_ID_BER)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->ber))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_sdi_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SDI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SDI_ID_BER)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_sdi_data_bounds_check(const bcmolt_xgpon_onu_sdi_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_sdi_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SDI_ID_ALARM_STATUS)) != 0)
+    {
+        switch (this->alarm_status)
+        {
+            case BCMOLT_STATUS_OFF:
+                break;
+            case BCMOLT_STATUS_ON:
+                break;
+            case BCMOLT_STATUS_NO_CHANGE:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ONU_SDI_ID_ALARM_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_secure_mutual_authentication_failure_data_set_default(bcmolt_xgpon_onu_secure_mutual_authentication_failure_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_FAILURE_ID_STATUS)) != 0)
+    {
+        this->status = BCMOLT_RESULT_SUCCESS;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_FAILURE_ID_FAIL_REASON)) != 0)
+    {
+        this->fail_reason = BCMOLT_SECURE_MUTUAL_AUTHENTICATION_FAIL_REASON_TIMEOUT;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_secure_mutual_authentication_failure_data_pack(const bcmolt_xgpon_onu_secure_mutual_authentication_failure_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_FAILURE_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_result_pack(this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_FAILURE_ID_FAIL_REASON)) != 0)
+    {
+        if (!bcmolt_secure_mutual_authentication_fail_reason_pack(this->fail_reason, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_secure_mutual_authentication_failure_data_get_packed_length(const bcmolt_xgpon_onu_secure_mutual_authentication_failure_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_FAILURE_ID_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_FAILURE_ID_FAIL_REASON)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_secure_mutual_authentication_failure_data_unpack(bcmolt_xgpon_onu_secure_mutual_authentication_failure_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_FAILURE_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_result_unpack(&this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_FAILURE_ID_FAIL_REASON)) != 0)
+    {
+        if (!bcmolt_secure_mutual_authentication_fail_reason_unpack(&this->fail_reason, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_secure_mutual_authentication_failure_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_FAILURE_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_FAILURE_ID_FAIL_REASON)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_secure_mutual_authentication_failure_data_bounds_check(const bcmolt_xgpon_onu_secure_mutual_authentication_failure_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_secure_mutual_authentication_failure_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_FAILURE_ID_STATUS)) != 0)
+    {
+        switch (this->status)
+        {
+            case BCMOLT_RESULT_SUCCESS:
+                break;
+            case BCMOLT_RESULT_FAIL:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_FAILURE_ID_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_FAILURE_ID_FAIL_REASON)) != 0)
+    {
+        switch (this->fail_reason)
+        {
+            case BCMOLT_SECURE_MUTUAL_AUTHENTICATION_FAIL_REASON_TIMEOUT:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_FAILURE_ID_FAIL_REASON;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_sfi_data_set_default(bcmolt_xgpon_onu_sfi_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SFI_ID_ALARM_STATUS)) != 0)
+    {
+        this->alarm_status = BCMOLT_STATUS_OFF;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SFI_ID_BER)) != 0)
+    {
+        this->ber = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_sfi_data_pack(const bcmolt_xgpon_onu_sfi_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SFI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_pack(this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SFI_ID_BER)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->ber))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_sfi_data_get_packed_length(const bcmolt_xgpon_onu_sfi_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SFI_ID_ALARM_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SFI_ID_BER)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_sfi_data_unpack(bcmolt_xgpon_onu_sfi_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SFI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_unpack(&this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SFI_ID_BER)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->ber))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_sfi_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SFI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SFI_ID_BER)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_sfi_data_bounds_check(const bcmolt_xgpon_onu_sfi_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_sfi_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SFI_ID_ALARM_STATUS)) != 0)
+    {
+        switch (this->alarm_status)
+        {
+            case BCMOLT_STATUS_OFF:
+                break;
+            case BCMOLT_STATUS_ON:
+                break;
+            case BCMOLT_STATUS_NO_CHANGE:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ONU_SFI_ID_ALARM_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_stat_alarm_cleared_data_set_default(bcmolt_xgpon_onu_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        this->stat = BCMOLT_XGPON_ONU_STAT_ID_POSITIVE_DRIFT;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_stat_alarm_cleared_data_pack(const bcmolt_xgpon_onu_stat_alarm_cleared_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_xgpon_onu_stat_id_pack(this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_stat_alarm_cleared_data_get_packed_length(const bcmolt_xgpon_onu_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_stat_alarm_cleared_data_unpack(bcmolt_xgpon_onu_stat_alarm_cleared_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_xgpon_onu_stat_id_unpack(&this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_stat_alarm_cleared_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_stat_alarm_cleared_data_bounds_check(const bcmolt_xgpon_onu_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_stat_alarm_cleared_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ALARM_CLEARED_ID_STAT)) != 0)
+    {
+        switch (this->stat)
+        {
+            case BCMOLT_XGPON_ONU_STAT_ID_POSITIVE_DRIFT:
+                break;
+            case BCMOLT_XGPON_ONU_STAT_ID_NEGATIVE_DRIFT:
+                break;
+            case BCMOLT_XGPON_ONU_STAT_ID_DELIMITER_MISS_DETECTION:
+                break;
+            case BCMOLT_XGPON_ONU_STAT_ID_BIP32_ERRORS:
+                break;
+            case BCMOLT_XGPON_ONU_STAT_ID_RX_WORDS:
+                break;
+            case BCMOLT_XGPON_ONU_STAT_ID_FEC_CORRECTED_SYMBOLS:
+                break;
+            case BCMOLT_XGPON_ONU_STAT_ID_FEC_CORRECTED_CODEWORDS:
+                break;
+            case BCMOLT_XGPON_ONU_STAT_ID_FEC_UNCORRECTABLE_CODEWORDS:
+                break;
+            case BCMOLT_XGPON_ONU_STAT_ID_FEC_CODEWORDS:
+                break;
+            case BCMOLT_XGPON_ONU_STAT_ID_FEC_CORRECTED_BITS:
+                break;
+            case BCMOLT_XGPON_ONU_STAT_ID_XGEM_KEY_ERRORS:
+                break;
+            case BCMOLT_XGPON_ONU_STAT_ID_XGEM_LOSS:
+                break;
+            case BCMOLT_XGPON_ONU_STAT_ID_RX_PLOAMS_MIC_ERROR:
+                break;
+            case BCMOLT_XGPON_ONU_STAT_ID_RX_PLOAMS_NON_IDLE:
+                break;
+            case BCMOLT_XGPON_ONU_STAT_ID_RX_OMCI:
+                break;
+            case BCMOLT_XGPON_ONU_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR:
+                break;
+            case BCMOLT_XGPON_ONU_STAT_ID_RX_BYTES:
+                break;
+            case BCMOLT_XGPON_ONU_STAT_ID_RX_PACKETS:
+                break;
+            case BCMOLT_XGPON_ONU_STAT_ID_TX_BYTES:
+                break;
+            case BCMOLT_XGPON_ONU_STAT_ID_TX_PACKETS:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ONU_STAT_ALARM_CLEARED_ID_STAT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_stat_alarm_raised_data_set_default(bcmolt_xgpon_onu_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        this->stat = BCMOLT_XGPON_ONU_STAT_ID_POSITIVE_DRIFT;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_stat_alarm_raised_data_pack(const bcmolt_xgpon_onu_stat_alarm_raised_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_xgpon_onu_stat_id_pack(this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_stat_alarm_raised_data_get_packed_length(const bcmolt_xgpon_onu_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        count += 2;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_stat_alarm_raised_data_unpack(bcmolt_xgpon_onu_stat_alarm_raised_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_xgpon_onu_stat_id_unpack(&this->stat, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_stat_alarm_raised_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_stat_alarm_raised_data_bounds_check(const bcmolt_xgpon_onu_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_stat_alarm_raised_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_STAT_ALARM_RAISED_ID_STAT)) != 0)
+    {
+        switch (this->stat)
+        {
+            case BCMOLT_XGPON_ONU_STAT_ID_POSITIVE_DRIFT:
+                break;
+            case BCMOLT_XGPON_ONU_STAT_ID_NEGATIVE_DRIFT:
+                break;
+            case BCMOLT_XGPON_ONU_STAT_ID_DELIMITER_MISS_DETECTION:
+                break;
+            case BCMOLT_XGPON_ONU_STAT_ID_BIP32_ERRORS:
+                break;
+            case BCMOLT_XGPON_ONU_STAT_ID_RX_WORDS:
+                break;
+            case BCMOLT_XGPON_ONU_STAT_ID_FEC_CORRECTED_SYMBOLS:
+                break;
+            case BCMOLT_XGPON_ONU_STAT_ID_FEC_CORRECTED_CODEWORDS:
+                break;
+            case BCMOLT_XGPON_ONU_STAT_ID_FEC_UNCORRECTABLE_CODEWORDS:
+                break;
+            case BCMOLT_XGPON_ONU_STAT_ID_FEC_CODEWORDS:
+                break;
+            case BCMOLT_XGPON_ONU_STAT_ID_FEC_CORRECTED_BITS:
+                break;
+            case BCMOLT_XGPON_ONU_STAT_ID_XGEM_KEY_ERRORS:
+                break;
+            case BCMOLT_XGPON_ONU_STAT_ID_XGEM_LOSS:
+                break;
+            case BCMOLT_XGPON_ONU_STAT_ID_RX_PLOAMS_MIC_ERROR:
+                break;
+            case BCMOLT_XGPON_ONU_STAT_ID_RX_PLOAMS_NON_IDLE:
+                break;
+            case BCMOLT_XGPON_ONU_STAT_ID_RX_OMCI:
+                break;
+            case BCMOLT_XGPON_ONU_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR:
+                break;
+            case BCMOLT_XGPON_ONU_STAT_ID_RX_BYTES:
+                break;
+            case BCMOLT_XGPON_ONU_STAT_ID_RX_PACKETS:
+                break;
+            case BCMOLT_XGPON_ONU_STAT_ID_TX_BYTES:
+                break;
+            case BCMOLT_XGPON_ONU_STAT_ID_TX_PACKETS:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ONU_STAT_ALARM_RAISED_ID_STAT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_sufi_data_set_default(bcmolt_xgpon_onu_sufi_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SUFI_ID_ALARM_STATUS)) != 0)
+    {
+        this->alarm_status = BCMOLT_STATUS_OFF;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_sufi_data_pack(const bcmolt_xgpon_onu_sufi_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SUFI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_pack(this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_sufi_data_get_packed_length(const bcmolt_xgpon_onu_sufi_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SUFI_ID_ALARM_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_sufi_data_unpack(bcmolt_xgpon_onu_sufi_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SUFI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_unpack(&this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_sufi_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SUFI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_sufi_data_bounds_check(const bcmolt_xgpon_onu_sufi_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_sufi_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SUFI_ID_ALARM_STATUS)) != 0)
+    {
+        switch (this->alarm_status)
+        {
+            case BCMOLT_STATUS_OFF:
+                break;
+            case BCMOLT_STATUS_ON:
+                break;
+            case BCMOLT_STATUS_NO_CHANGE:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ONU_SUFI_ID_ALARM_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_tiwi_data_set_default(bcmolt_xgpon_onu_tiwi_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_TIWI_ID_ALARM_STATUS)) != 0)
+    {
+        this->alarm_status = BCMOLT_STATUS_OFF;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_TIWI_ID_DRIFT_VALUE)) != 0)
+    {
+        this->drift_value = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_tiwi_data_pack(const bcmolt_xgpon_onu_tiwi_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_TIWI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_pack(this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_TIWI_ID_DRIFT_VALUE)) != 0)
+    {
+        if (!bcmolt_buf_write_s32(buf, this->drift_value))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_tiwi_data_get_packed_length(const bcmolt_xgpon_onu_tiwi_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_TIWI_ID_ALARM_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_TIWI_ID_DRIFT_VALUE)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_tiwi_data_unpack(bcmolt_xgpon_onu_tiwi_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_TIWI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_status_unpack(&this->alarm_status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_TIWI_ID_DRIFT_VALUE)) != 0)
+    {
+        if (!bcmolt_buf_read_s32(buf, &this->drift_value))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_tiwi_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_TIWI_ID_ALARM_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_TIWI_ID_DRIFT_VALUE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_tiwi_data_bounds_check(const bcmolt_xgpon_onu_tiwi_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_tiwi_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_TIWI_ID_ALARM_STATUS)) != 0)
+    {
+        switch (this->alarm_status)
+        {
+            case BCMOLT_STATUS_OFF:
+                break;
+            case BCMOLT_STATUS_ON:
+                break;
+            case BCMOLT_STATUS_NO_CHANGE:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ONU_TIWI_ID_ALARM_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_tuning_response_data_set_default(bcmolt_xgpon_onu_tuning_response_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_TUNING_RESPONSE_ID_ACK)) != 0)
+    {
+        this->ack = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_TUNING_RESPONSE_ID_RESULT)) != 0)
+    {
+        this->result = BCMOLT_RESULT_SUCCESS;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_tuning_response_data_pack(const bcmolt_xgpon_onu_tuning_response_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_TUNING_RESPONSE_ID_ACK)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->ack))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_TUNING_RESPONSE_ID_RESULT)) != 0)
+    {
+        if (!bcmolt_result_pack(this->result, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_tuning_response_data_get_packed_length(const bcmolt_xgpon_onu_tuning_response_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_TUNING_RESPONSE_ID_ACK)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_TUNING_RESPONSE_ID_RESULT)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_tuning_response_data_unpack(bcmolt_xgpon_onu_tuning_response_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_TUNING_RESPONSE_ID_ACK)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->ack))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_TUNING_RESPONSE_ID_RESULT)) != 0)
+    {
+        if (!bcmolt_result_unpack(&this->result, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_tuning_response_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_TUNING_RESPONSE_ID_ACK)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_TUNING_RESPONSE_ID_RESULT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_tuning_response_data_bounds_check(const bcmolt_xgpon_onu_tuning_response_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_tuning_response_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_TUNING_RESPONSE_ID_RESULT)) != 0)
+    {
+        switch (this->result)
+        {
+            case BCMOLT_RESULT_SUCCESS:
+                break;
+            case BCMOLT_RESULT_FAIL:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ONU_TUNING_RESPONSE_ID_RESULT;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_auto_cfg_data_set_default(bcmolt_xgpon_onu_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_DFI)) != 0)
+    {
+        this->dfi = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_DGI)) != 0)
+    {
+        this->dgi = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_DOWI)) != 0)
+    {
+        this->dowi = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_INVALID_DBRU_REPORT)) != 0)
+    {
+        this->invalid_dbru_report = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_COMPLETED)) != 0)
+    {
+        this->key_exchange_completed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_CYCLE_SKIPPED)) != 0)
+    {
+        this->key_exchange_cycle_skipped = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_KEY_MISMATCH)) != 0)
+    {
+        this->key_exchange_key_mismatch = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_KEY_REQUEST_TIMEOUT)) != 0)
+    {
+        this->key_exchange_key_request_timeout = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_LOOCI)) != 0)
+    {
+        this->looci = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_ACTIVATION_COMPLETED)) != 0)
+    {
+        this->onu_activation_completed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_ALARM)) != 0)
+    {
+        this->onu_alarm = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_DEACTIVATION_COMPLETED)) != 0)
+    {
+        this->onu_deactivation_completed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_DISABLE_COMPLETED)) != 0)
+    {
+        this->onu_disable_completed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_ENABLE_COMPLETED)) != 0)
+    {
+        this->onu_enable_completed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_TUNING_IN_COMPLETED)) != 0)
+    {
+        this->onu_tuning_in_completed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_TUNING_OUT_COMPLETED)) != 0)
+    {
+        this->onu_tuning_out_completed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_OPTICAL_REFLECTION)) != 0)
+    {
+        this->optical_reflection = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_POSSIBLE_DRIFT)) != 0)
+    {
+        this->possible_drift = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_POWER_CONSUMPTION_REPORT)) != 0)
+    {
+        this->power_consumption_report = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_POWER_LEVEL_REPORT)) != 0)
+    {
+        this->power_level_report = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_POWER_MANAGEMENT_STATE_CHANGE)) != 0)
+    {
+        this->power_management_state_change = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_PQSI)) != 0)
+    {
+        this->pqsi = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_RANGING_COMPLETED)) != 0)
+    {
+        this->ranging_completed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_REGISTRATION_ID)) != 0)
+    {
+        this->registration_id = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_RSSI_MEASUREMENT_COMPLETED)) != 0)
+    {
+        this->rssi_measurement_completed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_SDI)) != 0)
+    {
+        this->sdi = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_SECURE_MUTUAL_AUTHENTICATION_FAILURE)) != 0)
+    {
+        this->secure_mutual_authentication_failure = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_SFI)) != 0)
+    {
+        this->sfi = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        this->stat_alarm_cleared = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        this->stat_alarm_raised = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_SUFI)) != 0)
+    {
+        this->sufi = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_TIWI)) != 0)
+    {
+        this->tiwi = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_TUNING_RESPONSE)) != 0)
+    {
+        this->tuning_response = BCMOS_FALSE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_auto_cfg_data_pack(const bcmolt_xgpon_onu_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_DFI)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->dfi))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_DGI)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->dgi))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_DOWI)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->dowi))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_INVALID_DBRU_REPORT)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->invalid_dbru_report))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->key_exchange_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_CYCLE_SKIPPED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->key_exchange_cycle_skipped))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_KEY_MISMATCH)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->key_exchange_key_mismatch))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_KEY_REQUEST_TIMEOUT)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->key_exchange_key_request_timeout))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_LOOCI)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->looci))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_ACTIVATION_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->onu_activation_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_ALARM)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->onu_alarm))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_DEACTIVATION_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->onu_deactivation_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_DISABLE_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->onu_disable_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_ENABLE_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->onu_enable_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_TUNING_IN_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->onu_tuning_in_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_TUNING_OUT_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->onu_tuning_out_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_OPTICAL_REFLECTION)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->optical_reflection))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_POSSIBLE_DRIFT)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->possible_drift))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_POWER_CONSUMPTION_REPORT)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->power_consumption_report))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_POWER_LEVEL_REPORT)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->power_level_report))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_POWER_MANAGEMENT_STATE_CHANGE)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->power_management_state_change))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_PQSI)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->pqsi))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_RANGING_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->ranging_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_REGISTRATION_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->registration_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_RSSI_MEASUREMENT_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->rssi_measurement_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_SDI)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->sdi))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_SECURE_MUTUAL_AUTHENTICATION_FAILURE)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->secure_mutual_authentication_failure))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_SFI)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->sfi))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->stat_alarm_cleared))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->stat_alarm_raised))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_SUFI)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->sufi))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_TIWI)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->tiwi))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_TUNING_RESPONSE)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->tuning_response))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_auto_cfg_data_get_packed_length(const bcmolt_xgpon_onu_auto_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_DFI)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_DGI)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_DOWI)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_INVALID_DBRU_REPORT)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_CYCLE_SKIPPED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_KEY_MISMATCH)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_KEY_REQUEST_TIMEOUT)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_LOOCI)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_ACTIVATION_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_ALARM)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_DEACTIVATION_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_DISABLE_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_ENABLE_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_TUNING_IN_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_TUNING_OUT_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_OPTICAL_REFLECTION)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_POSSIBLE_DRIFT)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_POWER_CONSUMPTION_REPORT)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_POWER_LEVEL_REPORT)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_POWER_MANAGEMENT_STATE_CHANGE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_PQSI)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_RANGING_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_REGISTRATION_ID)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_RSSI_MEASUREMENT_COMPLETED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_SDI)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_SECURE_MUTUAL_AUTHENTICATION_FAILURE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_SFI)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_SUFI)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_TIWI)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_TUNING_RESPONSE)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_auto_cfg_data_unpack(bcmolt_xgpon_onu_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_DFI)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->dfi))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_DGI)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->dgi))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_DOWI)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->dowi))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_INVALID_DBRU_REPORT)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->invalid_dbru_report))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->key_exchange_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_CYCLE_SKIPPED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->key_exchange_cycle_skipped))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_KEY_MISMATCH)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->key_exchange_key_mismatch))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_KEY_REQUEST_TIMEOUT)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->key_exchange_key_request_timeout))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_LOOCI)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->looci))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_ACTIVATION_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->onu_activation_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_ALARM)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->onu_alarm))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_DEACTIVATION_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->onu_deactivation_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_DISABLE_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->onu_disable_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_ENABLE_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->onu_enable_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_TUNING_IN_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->onu_tuning_in_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_TUNING_OUT_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->onu_tuning_out_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_OPTICAL_REFLECTION)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->optical_reflection))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_POSSIBLE_DRIFT)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->possible_drift))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_POWER_CONSUMPTION_REPORT)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->power_consumption_report))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_POWER_LEVEL_REPORT)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->power_level_report))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_POWER_MANAGEMENT_STATE_CHANGE)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->power_management_state_change))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_PQSI)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->pqsi))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_RANGING_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->ranging_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_REGISTRATION_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->registration_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_RSSI_MEASUREMENT_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->rssi_measurement_completed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_SDI)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->sdi))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_SECURE_MUTUAL_AUTHENTICATION_FAILURE)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->secure_mutual_authentication_failure))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_SFI)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->sfi))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->stat_alarm_cleared))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->stat_alarm_raised))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_SUFI)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->sufi))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_TIWI)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->tiwi))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_TUNING_RESPONSE)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->tuning_response))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_DFI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_DGI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_DOWI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_INVALID_DBRU_REPORT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_CYCLE_SKIPPED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_KEY_MISMATCH)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_KEY_REQUEST_TIMEOUT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_LOOCI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_ACTIVATION_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_ALARM)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_DEACTIVATION_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_DISABLE_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_ENABLE_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_TUNING_IN_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_TUNING_OUT_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_OPTICAL_REFLECTION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_POSSIBLE_DRIFT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_POWER_CONSUMPTION_REPORT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_POWER_LEVEL_REPORT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_POWER_MANAGEMENT_STATE_CHANGE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_PQSI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_RANGING_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_REGISTRATION_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_RSSI_MEASUREMENT_COMPLETED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_SDI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_SECURE_MUTUAL_AUTHENTICATION_FAILURE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_SFI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_STAT_ALARM_CLEARED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_STAT_ALARM_RAISED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_SUFI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_TIWI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_AUTO_CFG_ID_TUNING_RESPONSE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_auto_cfg_data_bounds_check(const bcmolt_xgpon_onu_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_auto_cfg_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_adjust_tx_wavelength_data_set_default(bcmolt_xgpon_onu_adjust_tx_wavelength_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ADJUST_TX_WAVELENGTH_ID_FREQUENCY_ADJUSTMENT_DIRECTION)) != 0)
+    {
+        this->frequency_adjustment_direction = BCMOLT_FREQUENCY_ADJUSTMENT_DIRECTION_LOWER;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ADJUST_TX_WAVELENGTH_ID_FREQUENCY_ADJUSTMENT_SIZE)) != 0)
+    {
+        this->frequency_adjustment_size = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_adjust_tx_wavelength_data_pack(const bcmolt_xgpon_onu_adjust_tx_wavelength_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ADJUST_TX_WAVELENGTH_ID_FREQUENCY_ADJUSTMENT_DIRECTION)) != 0)
+    {
+        if (!bcmolt_frequency_adjustment_direction_pack(this->frequency_adjustment_direction, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ADJUST_TX_WAVELENGTH_ID_FREQUENCY_ADJUSTMENT_SIZE)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->frequency_adjustment_size))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_adjust_tx_wavelength_data_get_packed_length(const bcmolt_xgpon_onu_adjust_tx_wavelength_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ADJUST_TX_WAVELENGTH_ID_FREQUENCY_ADJUSTMENT_DIRECTION)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ADJUST_TX_WAVELENGTH_ID_FREQUENCY_ADJUSTMENT_SIZE)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_adjust_tx_wavelength_data_unpack(bcmolt_xgpon_onu_adjust_tx_wavelength_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ADJUST_TX_WAVELENGTH_ID_FREQUENCY_ADJUSTMENT_DIRECTION)) != 0)
+    {
+        if (!bcmolt_frequency_adjustment_direction_unpack(&this->frequency_adjustment_direction, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ADJUST_TX_WAVELENGTH_ID_FREQUENCY_ADJUSTMENT_SIZE)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->frequency_adjustment_size))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_adjust_tx_wavelength_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ADJUST_TX_WAVELENGTH_ID_FREQUENCY_ADJUSTMENT_DIRECTION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ADJUST_TX_WAVELENGTH_ID_FREQUENCY_ADJUSTMENT_SIZE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_adjust_tx_wavelength_data_bounds_check(const bcmolt_xgpon_onu_adjust_tx_wavelength_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_adjust_tx_wavelength_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ADJUST_TX_WAVELENGTH_ID_FREQUENCY_ADJUSTMENT_DIRECTION)) != 0)
+    {
+        switch (this->frequency_adjustment_direction)
+        {
+            case BCMOLT_FREQUENCY_ADJUSTMENT_DIRECTION_LOWER:
+                break;
+            case BCMOLT_FREQUENCY_ADJUSTMENT_DIRECTION_HIGHER:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ONU_ADJUST_TX_WAVELENGTH_ID_FREQUENCY_ADJUSTMENT_DIRECTION;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_change_power_levelling_data_set_default(bcmolt_xgpon_onu_change_power_levelling_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CHANGE_POWER_LEVELLING_ID_CONTROL)) != 0)
+    {
+        this->control = BCMOLT_POWER_LEVELLING_CONTROL_DIRECT;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CHANGE_POWER_LEVELLING_ID_ATTENUATION)) != 0)
+    {
+        this->attenuation = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_change_power_levelling_data_pack(const bcmolt_xgpon_onu_change_power_levelling_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CHANGE_POWER_LEVELLING_ID_CONTROL)) != 0)
+    {
+        if (!bcmolt_power_levelling_control_pack(this->control, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CHANGE_POWER_LEVELLING_ID_ATTENUATION)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->attenuation))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_change_power_levelling_data_get_packed_length(const bcmolt_xgpon_onu_change_power_levelling_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CHANGE_POWER_LEVELLING_ID_CONTROL)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CHANGE_POWER_LEVELLING_ID_ATTENUATION)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_change_power_levelling_data_unpack(bcmolt_xgpon_onu_change_power_levelling_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CHANGE_POWER_LEVELLING_ID_CONTROL)) != 0)
+    {
+        if (!bcmolt_power_levelling_control_unpack(&this->control, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CHANGE_POWER_LEVELLING_ID_ATTENUATION)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->attenuation))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_change_power_levelling_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CHANGE_POWER_LEVELLING_ID_CONTROL)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CHANGE_POWER_LEVELLING_ID_ATTENUATION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_change_power_levelling_data_bounds_check(const bcmolt_xgpon_onu_change_power_levelling_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_change_power_levelling_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CHANGE_POWER_LEVELLING_ID_CONTROL)) != 0)
+    {
+        switch (this->control)
+        {
+            case BCMOLT_POWER_LEVELLING_CONTROL_DIRECT:
+                break;
+            case BCMOLT_POWER_LEVELLING_CONTROL_DECREASE:
+                break;
+            case BCMOLT_POWER_LEVELLING_CONTROL_INCREASE:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ONU_CHANGE_POWER_LEVELLING_ID_CONTROL;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_onu_tuning_out_data_set_default(bcmolt_xgpon_onu_onu_tuning_out_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_TARGET_DS_PON_ID)) != 0)
+    {
+        this->target_ds_pon_id.administrative_label = 0;
+        this->target_ds_pon_id.dwlch_id = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_TARGET_US_PON_ID)) != 0)
+    {
+        this->target_us_pon_id.administrative_label = 0;
+        this->target_us_pon_id.dwlch_id = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_TIME_TO_SWITCH)) != 0)
+    {
+        this->time_to_switch = 500;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_ROLLBACK)) != 0)
+    {
+        this->rollback = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_STATUS)) != 0)
+    {
+        this->status = BCMOLT_STATUS_OFF;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_tuning_out_data_pack(const bcmolt_xgpon_onu_onu_tuning_out_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_TARGET_DS_PON_ID)) != 0)
+    {
+        if (!bcmolt_pon_id_pack(&this->target_ds_pon_id, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_TARGET_US_PON_ID)) != 0)
+    {
+        if (!bcmolt_pon_id_pack(&this->target_us_pon_id, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_TIME_TO_SWITCH)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->time_to_switch))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_ROLLBACK)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->rollback))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_status_pack(this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_onu_tuning_out_data_get_packed_length(const bcmolt_xgpon_onu_onu_tuning_out_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_TARGET_DS_PON_ID)) != 0)
+    {
+        count += 5;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_TARGET_US_PON_ID)) != 0)
+    {
+        count += 5;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_TIME_TO_SWITCH)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_ROLLBACK)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_STATUS)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_tuning_out_data_unpack(bcmolt_xgpon_onu_onu_tuning_out_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_TARGET_DS_PON_ID)) != 0)
+    {
+        if (!bcmolt_pon_id_unpack(&this->target_ds_pon_id, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_TARGET_US_PON_ID)) != 0)
+    {
+        if (!bcmolt_pon_id_unpack(&this->target_us_pon_id, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_TIME_TO_SWITCH)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->time_to_switch))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_ROLLBACK)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->rollback))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_status_unpack(&this->status, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_tuning_out_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_TARGET_DS_PON_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 5))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_TARGET_US_PON_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 5))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_TIME_TO_SWITCH)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_ROLLBACK)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_STATUS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_onu_tuning_out_data_bounds_check(const bcmolt_xgpon_onu_onu_tuning_out_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_onu_tuning_out_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_TARGET_DS_PON_ID)) != 0)
+    {
+        if (!bcmolt_pon_id_bounds_check(&this->target_ds_pon_id))
+        {
+            *failed_prop = BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_TARGET_DS_PON_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_TARGET_US_PON_ID)) != 0)
+    {
+        if (!bcmolt_pon_id_bounds_check(&this->target_us_pon_id))
+        {
+            *failed_prop = BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_TARGET_US_PON_ID;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_TIME_TO_SWITCH)) != 0)
+    {
+        if (this->time_to_switch < 500)
+        {
+            *failed_prop = BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_TIME_TO_SWITCH;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_STATUS)) != 0)
+    {
+        switch (this->status)
+        {
+            case BCMOLT_STATUS_OFF:
+                break;
+            case BCMOLT_STATUS_ON:
+                break;
+            case BCMOLT_STATUS_NO_CHANGE:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_STATUS;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_request_registration_data_set_default(bcmolt_xgpon_onu_request_registration_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_REQUEST_REGISTRATION_ID_SMA_FLAG)) != 0)
+    {
+        this->sma_flag = BCMOS_FALSE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_request_registration_data_pack(const bcmolt_xgpon_onu_request_registration_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_REQUEST_REGISTRATION_ID_SMA_FLAG)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->sma_flag))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_request_registration_data_get_packed_length(const bcmolt_xgpon_onu_request_registration_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_REQUEST_REGISTRATION_ID_SMA_FLAG)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_request_registration_data_unpack(bcmolt_xgpon_onu_request_registration_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_REQUEST_REGISTRATION_ID_SMA_FLAG)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->sma_flag))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_request_registration_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_REQUEST_REGISTRATION_ID_SMA_FLAG)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_request_registration_data_bounds_check(const bcmolt_xgpon_onu_request_registration_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_request_registration_id *failed_prop)
+{
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_secure_mutual_authentication_data_set_default(bcmolt_xgpon_onu_secure_mutual_authentication_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_ID_MASTER_KEY)) != 0)
+    {
+        memset(this->master_key.bytes, 0, sizeof(this->master_key.bytes));
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_ID_BUFFER)) != 0)
+    {
+        this->buffer.len = 0;
+        this->buffer.val = NULL;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_ID_MIC)) != 0)
+    {
+        this->mic = 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_secure_mutual_authentication_data_pack(const bcmolt_xgpon_onu_secure_mutual_authentication_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_ID_MASTER_KEY)) != 0)
+    {
+        if (!bcmolt_aes_key_pack(&this->master_key, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_ID_BUFFER)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_max_2048_pack(&this->buffer, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_ID_MIC)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->mic))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_secure_mutual_authentication_data_get_packed_length(const bcmolt_xgpon_onu_secure_mutual_authentication_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_ID_MASTER_KEY)) != 0)
+    {
+        count += 16;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_ID_BUFFER)) != 0)
+    {
+        count += bcmolt_u8_list_u32_max_2048_get_packed_length(&this->buffer);
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_ID_MIC)) != 0)
+    {
+        count += 4;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_secure_mutual_authentication_data_unpack(bcmolt_xgpon_onu_secure_mutual_authentication_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_ID_MASTER_KEY)) != 0)
+    {
+        if (!bcmolt_aes_key_unpack(&this->master_key, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_ID_BUFFER)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_max_2048_unpack(&this->buffer, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_ID_MIC)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->mic))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_secure_mutual_authentication_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_ID_MASTER_KEY)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 16))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_ID_BUFFER)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_max_2048_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_ID_MIC)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_secure_mutual_authentication_data_bounds_check(const bcmolt_xgpon_onu_secure_mutual_authentication_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_secure_mutual_authentication_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_ID_MASTER_KEY)) != 0)
+    {
+        if (!bcmolt_aes_key_bounds_check(&this->master_key))
+        {
+            *failed_prop = BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_ID_MASTER_KEY;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_ID_BUFFER)) != 0)
+    {
+        if (this->buffer.len > 2048)
+        {
+            return BCMOS_FALSE;
+        }
+
+        if (!bcmolt_u8_list_u32_max_2048_bounds_check(&this->buffer))
+        {
+            *failed_prop = BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_ID_BUFFER;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_set_onu_state_data_set_default(bcmolt_xgpon_onu_set_onu_state_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SET_ONU_STATE_ID_ONU_STATE)) != 0)
+    {
+        this->onu_state = BCMOLT_ONU_OPERATION_INACTIVE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_set_onu_state_data_pack(const bcmolt_xgpon_onu_set_onu_state_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SET_ONU_STATE_ID_ONU_STATE)) != 0)
+    {
+        if (!bcmolt_onu_operation_pack(this->onu_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_set_onu_state_data_get_packed_length(const bcmolt_xgpon_onu_set_onu_state_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SET_ONU_STATE_ID_ONU_STATE)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_set_onu_state_data_unpack(bcmolt_xgpon_onu_set_onu_state_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SET_ONU_STATE_ID_ONU_STATE)) != 0)
+    {
+        if (!bcmolt_onu_operation_unpack(&this->onu_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_set_onu_state_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SET_ONU_STATE_ID_ONU_STATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_set_onu_state_data_bounds_check(const bcmolt_xgpon_onu_set_onu_state_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_set_onu_state_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_SET_ONU_STATE_ID_ONU_STATE)) != 0)
+    {
+        switch (this->onu_state)
+        {
+            case BCMOLT_ONU_OPERATION_INACTIVE:
+                break;
+            case BCMOLT_ONU_OPERATION_ACTIVE:
+                break;
+            case BCMOLT_ONU_OPERATION_DISABLE:
+                break;
+            case BCMOLT_ONU_OPERATION_ENABLE:
+                break;
+            case BCMOLT_ONU_OPERATION_ACTIVE_STANDBY:
+                break;
+            case BCMOLT_ONU_OPERATION_AWAKE_FREE:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ONU_SET_ONU_STATE_ID_ONU_STATE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_cpu_packets_data_set_default(bcmolt_xgpon_onu_cpu_packets_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKETS_ID_PACKET_TYPE)) != 0)
+    {
+        this->packet_type = BCMOLT_PACKET_TYPE_CPU;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKETS_ID_CALC_CRC)) != 0)
+    {
+        this->calc_crc = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKETS_ID_NUMBER_OF_PACKETS)) != 0)
+    {
+        this->number_of_packets = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKETS_ID_PACKET_SIZE)) != 0)
+    {
+        this->packet_size = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKETS_ID_BUFFER)) != 0)
+    {
+        this->buffer.len = 0;
+        this->buffer.val = NULL;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_cpu_packets_data_pack(const bcmolt_xgpon_onu_cpu_packets_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKETS_ID_PACKET_TYPE)) != 0)
+    {
+        if (!bcmolt_packet_type_pack(this->packet_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKETS_ID_CALC_CRC)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->calc_crc))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKETS_ID_NUMBER_OF_PACKETS)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->number_of_packets))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKETS_ID_PACKET_SIZE)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, this->packet_size))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKETS_ID_BUFFER)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_max_2048_pack(&this->buffer, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_cpu_packets_data_get_packed_length(const bcmolt_xgpon_onu_cpu_packets_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKETS_ID_PACKET_TYPE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKETS_ID_CALC_CRC)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKETS_ID_NUMBER_OF_PACKETS)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKETS_ID_PACKET_SIZE)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKETS_ID_BUFFER)) != 0)
+    {
+        count += bcmolt_u8_list_u32_max_2048_get_packed_length(&this->buffer);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_cpu_packets_data_unpack(bcmolt_xgpon_onu_cpu_packets_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKETS_ID_PACKET_TYPE)) != 0)
+    {
+        if (!bcmolt_packet_type_unpack(&this->packet_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKETS_ID_CALC_CRC)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->calc_crc))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKETS_ID_NUMBER_OF_PACKETS)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->number_of_packets))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKETS_ID_PACKET_SIZE)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, &this->packet_size))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKETS_ID_BUFFER)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_max_2048_unpack(&this->buffer, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_cpu_packets_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKETS_ID_PACKET_TYPE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKETS_ID_CALC_CRC)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKETS_ID_NUMBER_OF_PACKETS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKETS_ID_PACKET_SIZE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKETS_ID_BUFFER)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_max_2048_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_cpu_packets_data_bounds_check(const bcmolt_xgpon_onu_cpu_packets_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_cpu_packets_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKETS_ID_PACKET_TYPE)) != 0)
+    {
+        switch (this->packet_type)
+        {
+            case BCMOLT_PACKET_TYPE_CPU:
+                break;
+            case BCMOLT_PACKET_TYPE_OMCI:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_ONU_CPU_PACKETS_ID_PACKET_TYPE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKETS_ID_NUMBER_OF_PACKETS)) != 0)
+    {
+        if (this->number_of_packets > 32)
+        {
+            *failed_prop = BCMOLT_XGPON_ONU_CPU_PACKETS_ID_NUMBER_OF_PACKETS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKETS_ID_PACKET_SIZE)) != 0)
+    {
+        if (this->packet_size > 2000)
+        {
+            *failed_prop = BCMOLT_XGPON_ONU_CPU_PACKETS_ID_PACKET_SIZE;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKETS_ID_BUFFER)) != 0)
+    {
+        if (this->buffer.len > 2048)
+        {
+            return BCMOS_FALSE;
+        }
+
+        if (!bcmolt_u8_list_u32_max_2048_bounds_check(&this->buffer))
+        {
+            *failed_prop = BCMOLT_XGPON_ONU_CPU_PACKETS_ID_BUFFER;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_ploam_packet_data_set_default(bcmolt_xgpon_onu_ploam_packet_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_PLOAM_PACKET_ID_DEFAULT_KEY)) != 0)
+    {
+        this->default_key = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_PLOAM_PACKET_ID_PLOAM)) != 0)
+    {
+        memset(this->ploam.arr, 0, sizeof(this->ploam.arr));
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_ploam_packet_data_pack(const bcmolt_xgpon_onu_ploam_packet_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_PLOAM_PACKET_ID_DEFAULT_KEY)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->default_key))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_PLOAM_PACKET_ID_PLOAM)) != 0)
+    {
+        if (!bcmolt_arr_u8_40_pack(&this->ploam, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_ploam_packet_data_get_packed_length(const bcmolt_xgpon_onu_ploam_packet_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_PLOAM_PACKET_ID_DEFAULT_KEY)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_PLOAM_PACKET_ID_PLOAM)) != 0)
+    {
+        count += 40;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_ploam_packet_data_unpack(bcmolt_xgpon_onu_ploam_packet_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_PLOAM_PACKET_ID_DEFAULT_KEY)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->default_key))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_PLOAM_PACKET_ID_PLOAM)) != 0)
+    {
+        if (!bcmolt_arr_u8_40_unpack(&this->ploam, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_ploam_packet_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_PLOAM_PACKET_ID_DEFAULT_KEY)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_PLOAM_PACKET_ID_PLOAM)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 40))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_ploam_packet_data_bounds_check(const bcmolt_xgpon_onu_ploam_packet_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_ploam_packet_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_PLOAM_PACKET_ID_PLOAM)) != 0)
+    {
+        if (!bcmolt_arr_u8_40_bounds_check(&this->ploam))
+        {
+            *failed_prop = BCMOLT_XGPON_ONU_PLOAM_PACKET_ID_PLOAM;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_cpu_packet_data_set_default(bcmolt_xgpon_onu_cpu_packet_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKET_ID_PORT_ID)) != 0)
+    {
+        this->port_id = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKET_ID_CRC_OK)) != 0)
+    {
+        this->crc_ok = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKET_ID_PACKET_SIZE)) != 0)
+    {
+        this->packet_size = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKET_ID_BUFFER)) != 0)
+    {
+        this->buffer.len = 0;
+        this->buffer.val = NULL;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_cpu_packet_data_pack(const bcmolt_xgpon_onu_cpu_packet_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKET_ID_PORT_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, this->port_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKET_ID_CRC_OK)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->crc_ok))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKET_ID_PACKET_SIZE)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->packet_size))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKET_ID_BUFFER)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_pack(&this->buffer, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_cpu_packet_data_get_packed_length(const bcmolt_xgpon_onu_cpu_packet_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKET_ID_PORT_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKET_ID_CRC_OK)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKET_ID_PACKET_SIZE)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKET_ID_BUFFER)) != 0)
+    {
+        count += bcmolt_u8_list_u32_get_packed_length(&this->buffer);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_cpu_packet_data_unpack(bcmolt_xgpon_onu_cpu_packet_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKET_ID_PORT_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, &this->port_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKET_ID_CRC_OK)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->crc_ok))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKET_ID_PACKET_SIZE)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->packet_size))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKET_ID_BUFFER)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_unpack(&this->buffer, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_cpu_packet_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKET_ID_PORT_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKET_ID_CRC_OK)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKET_ID_PACKET_SIZE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKET_ID_BUFFER)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_cpu_packet_data_bounds_check(const bcmolt_xgpon_onu_cpu_packet_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_cpu_packet_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_CPU_PACKET_ID_BUFFER)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_bounds_check(&this->buffer))
+        {
+            *failed_prop = BCMOLT_XGPON_ONU_CPU_PACKET_ID_BUFFER;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_onu_omci_packet_data_set_default(bcmolt_xgpon_onu_omci_packet_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_OMCI_PACKET_ID_PORT_ID)) != 0)
+    {
+        this->port_id = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_OMCI_PACKET_ID_CRC_OK)) != 0)
+    {
+        this->crc_ok = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_OMCI_PACKET_ID_PACKET_SIZE)) != 0)
+    {
+        this->packet_size = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_OMCI_PACKET_ID_BUFFER)) != 0)
+    {
+        this->buffer.len = 0;
+        this->buffer.val = NULL;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_omci_packet_data_pack(const bcmolt_xgpon_onu_omci_packet_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_OMCI_PACKET_ID_PORT_ID)) != 0)
+    {
+        if (!bcmolt_buf_write_u16(buf, this->port_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_OMCI_PACKET_ID_CRC_OK)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->crc_ok))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_OMCI_PACKET_ID_PACKET_SIZE)) != 0)
+    {
+        if (!bcmolt_buf_write_u32(buf, this->packet_size))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_OMCI_PACKET_ID_BUFFER)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_pack(&this->buffer, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_onu_omci_packet_data_get_packed_length(const bcmolt_xgpon_onu_omci_packet_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_OMCI_PACKET_ID_PORT_ID)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_OMCI_PACKET_ID_CRC_OK)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_OMCI_PACKET_ID_PACKET_SIZE)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_OMCI_PACKET_ID_BUFFER)) != 0)
+    {
+        count += bcmolt_u8_list_u32_get_packed_length(&this->buffer);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_omci_packet_data_unpack(bcmolt_xgpon_onu_omci_packet_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_OMCI_PACKET_ID_PORT_ID)) != 0)
+    {
+        if (!bcmolt_buf_read_u16(buf, &this->port_id))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_OMCI_PACKET_ID_CRC_OK)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->crc_ok))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_OMCI_PACKET_ID_PACKET_SIZE)) != 0)
+    {
+        if (!bcmolt_buf_read_u32(buf, &this->packet_size))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_OMCI_PACKET_ID_BUFFER)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_unpack(&this->buffer, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_omci_packet_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_OMCI_PACKET_ID_PORT_ID)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_OMCI_PACKET_ID_CRC_OK)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_OMCI_PACKET_ID_PACKET_SIZE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_OMCI_PACKET_ID_BUFFER)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_onu_omci_packet_data_bounds_check(const bcmolt_xgpon_onu_omci_packet_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_omci_packet_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_ONU_OMCI_PACKET_ID_BUFFER)) != 0)
+    {
+        if (!bcmolt_u8_list_u32_bounds_check(&this->buffer))
+        {
+            *failed_prop = BCMOLT_XGPON_ONU_OMCI_PACKET_ID_BUFFER;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_trx_key_set_default(bcmolt_xgpon_trx_key *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_KEY_ID_PON_NI)) != 0)
+    {
+        this->pon_ni = (bcmolt_xgpon_ni) 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_trx_key_pack(const bcmolt_xgpon_trx_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, (uint8_t) this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_trx_key_get_packed_length(const bcmolt_xgpon_trx_key *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_KEY_ID_PON_NI)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_trx_key_unpack(bcmolt_xgpon_trx_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, (uint8_t *) &this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_trx_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_trx_key_bounds_check(const bcmolt_xgpon_trx_key *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_trx_key_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_KEY_ID_PON_NI)) != 0)
+    {
+        if (this->pon_ni > (bcmolt_xgpon_ni) 7)
+        {
+            *failed_prop = BCMOLT_XGPON_TRX_KEY_ID_PON_NI;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xgpon_trx_cfg_data_set_default(bcmolt_xgpon_trx_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_BURST_PROFILE)) != 0)
+    {
+        this->burst_profile.arr[0].profile_version = 0;
+        this->burst_profile.arr[0].is_fec_on = BCMOS_FALSE;
+        this->burst_profile.arr[0].delimiter_size_in_bytes = 8;
+        this->burst_profile.arr[0].delimiter_pattern_high = 3015562000UL;
+        this->burst_profile.arr[0].delimiter_pattern_low = 2999259041UL;
+        this->burst_profile.arr[0].preamble_length_in_bytes = 8;
+        this->burst_profile.arr[0].preamble_repeats_count = 20;
+        this->burst_profile.arr[0].preamble_pattern_high = 2863311530UL;
+        this->burst_profile.arr[0].preamble_pattern_low = 2863311530UL;
+        this->burst_profile.arr[0].pon_tag = 0;
+        this->burst_profile.arr[0].num_of_guard_bytes = 16;
+        this->burst_profile.arr[0].is_profile_valid = BCMOS_TRUE;
+        this->burst_profile.arr[0].burst_overhead_size_in_words = 78;
+        this->burst_profile.arr[1].profile_version = 0;
+        this->burst_profile.arr[1].is_fec_on = BCMOS_FALSE;
+        this->burst_profile.arr[1].delimiter_size_in_bytes = 8;
+        this->burst_profile.arr[1].delimiter_pattern_high = 3015562000UL;
+        this->burst_profile.arr[1].delimiter_pattern_low = 2999259041UL;
+        this->burst_profile.arr[1].preamble_length_in_bytes = 8;
+        this->burst_profile.arr[1].preamble_repeats_count = 9;
+        this->burst_profile.arr[1].preamble_pattern_high = 2863311530UL;
+        this->burst_profile.arr[1].preamble_pattern_low = 2863311530UL;
+        this->burst_profile.arr[1].pon_tag = 0;
+        this->burst_profile.arr[1].num_of_guard_bytes = 16;
+        this->burst_profile.arr[1].is_profile_valid = BCMOS_TRUE;
+        this->burst_profile.arr[1].burst_overhead_size_in_words = 56;
+        this->burst_profile.arr[2].profile_version = 0;
+        this->burst_profile.arr[2].is_fec_on = BCMOS_TRUE;
+        this->burst_profile.arr[2].delimiter_size_in_bytes = 8;
+        this->burst_profile.arr[2].delimiter_pattern_high = 3015562000UL;
+        this->burst_profile.arr[2].delimiter_pattern_low = 2999259041UL;
+        this->burst_profile.arr[2].preamble_length_in_bytes = 8;
+        this->burst_profile.arr[2].preamble_repeats_count = 20;
+        this->burst_profile.arr[2].preamble_pattern_high = 2863311530UL;
+        this->burst_profile.arr[2].preamble_pattern_low = 2863311530UL;
+        this->burst_profile.arr[2].pon_tag = 0;
+        this->burst_profile.arr[2].num_of_guard_bytes = 16;
+        this->burst_profile.arr[2].is_profile_valid = BCMOS_TRUE;
+        this->burst_profile.arr[2].burst_overhead_size_in_words = 78;
+        this->burst_profile.arr[3].profile_version = 0;
+        this->burst_profile.arr[3].is_fec_on = BCMOS_TRUE;
+        this->burst_profile.arr[3].delimiter_size_in_bytes = 8;
+        this->burst_profile.arr[3].delimiter_pattern_high = 3015562000UL;
+        this->burst_profile.arr[3].delimiter_pattern_low = 2999259041UL;
+        this->burst_profile.arr[3].preamble_length_in_bytes = 8;
+        this->burst_profile.arr[3].preamble_repeats_count = 9;
+        this->burst_profile.arr[3].preamble_pattern_high = 2863311530UL;
+        this->burst_profile.arr[3].preamble_pattern_low = 2863311530UL;
+        this->burst_profile.arr[3].pon_tag = 0;
+        this->burst_profile.arr[3].num_of_guard_bytes = 16;
+        this->burst_profile.arr[3].is_profile_valid = BCMOS_TRUE;
+        this->burst_profile.arr[3].burst_overhead_size_in_words = 56;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_TRANSCEIVER_CONFIG)) != 0)
+    {
+        this->transceiver_config.arr[0].trx_reset_pattern_first = 0;
+        this->transceiver_config.arr[0].trx_reset_pattern_middle = 4294967295UL;
+        this->transceiver_config.arr[0].trx_reset_pattern_last = 0;
+        this->transceiver_config.arr[0].trx_reset_middle_repeats_count = 4;
+        this->transceiver_config.arr[0].trx_reset_location = 0;
+        this->transceiver_config.arr[0].trx_reset_polarity = BCMOS_FALSE;
+        this->transceiver_config.arr[0].bcdr_reset_pattern_first = 0;
+        this->transceiver_config.arr[0].bcdr_reset_pattern_middle = 255;
+        this->transceiver_config.arr[0].bcdr_reset_pattern_last = 0;
+        this->transceiver_config.arr[0].bcdr_reset_middle_repeats_count = 1;
+        this->transceiver_config.arr[0].bcdr_reset_location = 20;
+        this->transceiver_config.arr[0].bcdr_reset_polarity = BCMOS_FALSE;
+        this->transceiver_config.arr[1].trx_reset_pattern_first = 0;
+        this->transceiver_config.arr[1].trx_reset_pattern_middle = 4294967295UL;
+        this->transceiver_config.arr[1].trx_reset_pattern_last = 0;
+        this->transceiver_config.arr[1].trx_reset_middle_repeats_count = 4;
+        this->transceiver_config.arr[1].trx_reset_location = 33;
+        this->transceiver_config.arr[1].trx_reset_polarity = BCMOS_FALSE;
+        this->transceiver_config.arr[1].bcdr_reset_pattern_first = 0;
+        this->transceiver_config.arr[1].bcdr_reset_pattern_middle = 255;
+        this->transceiver_config.arr[1].bcdr_reset_pattern_last = 0;
+        this->transceiver_config.arr[1].bcdr_reset_middle_repeats_count = 1;
+        this->transceiver_config.arr[1].bcdr_reset_location = 23;
+        this->transceiver_config.arr[1].bcdr_reset_polarity = BCMOS_FALSE;
+        this->transceiver_config.arr[2].trx_reset_pattern_first = 0;
+        this->transceiver_config.arr[2].trx_reset_pattern_middle = 4294967295UL;
+        this->transceiver_config.arr[2].trx_reset_pattern_last = 0;
+        this->transceiver_config.arr[2].trx_reset_middle_repeats_count = 4;
+        this->transceiver_config.arr[2].trx_reset_location = 0;
+        this->transceiver_config.arr[2].trx_reset_polarity = BCMOS_FALSE;
+        this->transceiver_config.arr[2].bcdr_reset_pattern_first = 0;
+        this->transceiver_config.arr[2].bcdr_reset_pattern_middle = 255;
+        this->transceiver_config.arr[2].bcdr_reset_pattern_last = 0;
+        this->transceiver_config.arr[2].bcdr_reset_middle_repeats_count = 1;
+        this->transceiver_config.arr[2].bcdr_reset_location = 20;
+        this->transceiver_config.arr[2].bcdr_reset_polarity = BCMOS_FALSE;
+        this->transceiver_config.arr[3].trx_reset_pattern_first = 0;
+        this->transceiver_config.arr[3].trx_reset_pattern_middle = 4294967295UL;
+        this->transceiver_config.arr[3].trx_reset_pattern_last = 0;
+        this->transceiver_config.arr[3].trx_reset_middle_repeats_count = 4;
+        this->transceiver_config.arr[3].trx_reset_location = 33;
+        this->transceiver_config.arr[3].trx_reset_polarity = BCMOS_FALSE;
+        this->transceiver_config.arr[3].bcdr_reset_pattern_first = 0;
+        this->transceiver_config.arr[3].bcdr_reset_pattern_middle = 255;
+        this->transceiver_config.arr[3].bcdr_reset_pattern_last = 0;
+        this->transceiver_config.arr[3].bcdr_reset_middle_repeats_count = 1;
+        this->transceiver_config.arr[3].bcdr_reset_location = 23;
+        this->transceiver_config.arr[3].bcdr_reset_polarity = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_TRANSCEIVER_TYPE)) != 0)
+    {
+        this->transceiver_type = BCMOLT_XGPON_TRX_TYPE_LTH_7222_PC;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_DEBUG)) != 0)
+    {
+        this->debug.rx_reversed_polarity = BCMOLT_CONTROL_STATE_DISABLE;
+        this->debug.neg_out_bit = BCMOLT_CONTROL_STATE_DISABLE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_RSSI_NORMAL_CONFIG)) != 0)
+    {
+        this->rssi_normal_config.polarity = BCMOLT_POLARITY_LOW;
+        this->rssi_normal_config.location = 35;
+        this->rssi_normal_config.location_sign = BCMOLT_SIGN_POSITIVE;
+        this->rssi_normal_config.pulse_width = 80;
+        this->rssi_normal_config.minimum_burst = 200;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_RSSI_RANGING_CONFIG)) != 0)
+    {
+        this->rssi_ranging_config.start_on_ed = BCMOS_TRUE;
+        this->rssi_ranging_config.frame_delay = 0;
+        this->rssi_ranging_config.word_delay = 20;
+        this->rssi_ranging_config.frame_delay_after_ed = 0;
+        this->rssi_ranging_config.word_delay_after_ed = 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_SERDES_CONFIGURATION)) != 0)
+    {
+        this->serdes_configuration.multi_ed_mode = BCMOS_FALSE;
+        this->serdes_configuration.ranging_mode = BCMOLT_XGPON_SERDES_RANGING_MODE_BCDR;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_BURST_PROFILE_DELIMITER_MAX_ERRORS)) != 0)
+    {
+        this->burst_profile_delimiter_max_errors.arr[0] = 7;
+        this->burst_profile_delimiter_max_errors.arr[1] = 7;
+        this->burst_profile_delimiter_max_errors.arr[2] = 7;
+        this->burst_profile_delimiter_max_errors.arr[3] = 7;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_RANGING_SM_PATTERNS_AT_INIT)) != 0)
+    {
+        this->ranging_sm_patterns_at_init.trx_reset_pattern_first = 4294967295UL;
+        this->ranging_sm_patterns_at_init.trx_reset_pattern_middle = 4294967295UL;
+        this->ranging_sm_patterns_at_init.trx_reset_pattern_last = 4294967295UL;
+        this->ranging_sm_patterns_at_init.trx_reset_middle_repeats = 8;
+        this->ranging_sm_patterns_at_init.trx_reset_location = 2;
+        this->ranging_sm_patterns_at_init.bcdr_reset_pattern_first = 4294967295UL;
+        this->ranging_sm_patterns_at_init.bcdr_reset_pattern_middle = 4294967295UL;
+        this->ranging_sm_patterns_at_init.bcdr_reset_pattern_last = 4294967295UL;
+        this->ranging_sm_patterns_at_init.bcdr_reset_middle_repeats = 4;
+        this->ranging_sm_patterns_at_init.bcdr_reset_location = 2;
+        this->ranging_sm_patterns_at_init.bcdr_reset_polarity = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_RANGING_SM_PATTERNS_ED_FAILURE)) != 0)
+    {
+        this->ranging_sm_patterns_ed_failure.trx_reset_pattern_first = 0;
+        this->ranging_sm_patterns_ed_failure.trx_reset_pattern_middle = 0;
+        this->ranging_sm_patterns_ed_failure.trx_reset_pattern_last = 0;
+        this->ranging_sm_patterns_ed_failure.trx_reset_middle_repeats = 0;
+        this->ranging_sm_patterns_ed_failure.trx_reset_location = 0;
+        this->ranging_sm_patterns_ed_failure.bcdr_reset_pattern_first = 0;
+        this->ranging_sm_patterns_ed_failure.bcdr_reset_pattern_middle = 0;
+        this->ranging_sm_patterns_ed_failure.bcdr_reset_pattern_last = 0;
+        this->ranging_sm_patterns_ed_failure.bcdr_reset_middle_repeats = 0;
+        this->ranging_sm_patterns_ed_failure.bcdr_reset_location = 0;
+        this->ranging_sm_patterns_ed_failure.bcdr_reset_polarity = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_RESET_ON_DEL_MISS)) != 0)
+    {
+        this->reset_on_del_miss = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_ED_STATE)) != 0)
+    {
+        this->ed_state.reset_on_ed_fail = BCMOS_FALSE;
+        this->ed_state.reset_on_ed_success = BCMOS_TRUE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_INVERT_ED)) != 0)
+    {
+        this->invert_ed = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_END_OF_BURST_RESET)) != 0)
+    {
+        this->end_of_burst_reset = BCMOS_FALSE;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_TRX_RST_POLARITY)) != 0)
+    {
+        this->trx_rst_polarity = BCMOS_FALSE;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_trx_cfg_data_pack(const bcmolt_xgpon_trx_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_BURST_PROFILE)) != 0)
+    {
+        if (!bcmolt_arr_xgpon_burst_profile_4_pack(&this->burst_profile, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_TRANSCEIVER_CONFIG)) != 0)
+    {
+        if (!bcmolt_arr_xgpon_trx_configuration_4_pack(&this->transceiver_config, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_TRANSCEIVER_TYPE)) != 0)
+    {
+        if (!bcmolt_xgpon_trx_type_pack(this->transceiver_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_DEBUG)) != 0)
+    {
+        if (!bcmolt_xgpon_trx_debug_pack(&this->debug, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_RSSI_NORMAL_CONFIG)) != 0)
+    {
+        if (!bcmolt_xgpon_rssi_normal_config_pack(&this->rssi_normal_config, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_RSSI_RANGING_CONFIG)) != 0)
+    {
+        if (!bcmolt_xgpon_rssi_ranging_config_pack(&this->rssi_ranging_config, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_SERDES_CONFIGURATION)) != 0)
+    {
+        if (!bcmolt_xgpon_serdes_configuration_pack(&this->serdes_configuration, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_BURST_PROFILE_DELIMITER_MAX_ERRORS)) != 0)
+    {
+        if (!bcmolt_arr_u8_4_pack(&this->burst_profile_delimiter_max_errors, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_RANGING_SM_PATTERNS_AT_INIT)) != 0)
+    {
+        if (!bcmolt_xgpon_rx_ranging_sm_pattern_pack(&this->ranging_sm_patterns_at_init, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_RANGING_SM_PATTERNS_ED_FAILURE)) != 0)
+    {
+        if (!bcmolt_xgpon_rx_ranging_sm_pattern_pack(&this->ranging_sm_patterns_ed_failure, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_RESET_ON_DEL_MISS)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->reset_on_del_miss))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_ED_STATE)) != 0)
+    {
+        if (!bcmolt_xgpon_ed_state_pack(&this->ed_state, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_INVERT_ED)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->invert_ed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_END_OF_BURST_RESET)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->end_of_burst_reset))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_TRX_RST_POLARITY)) != 0)
+    {
+        if (!bcmolt_buf_write_bool(buf, this->trx_rst_polarity))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xgpon_trx_cfg_data_get_packed_length(const bcmolt_xgpon_trx_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_BURST_PROFILE)) != 0)
+    {
+        count += 152;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_TRANSCEIVER_CONFIG)) != 0)
+    {
+        count += 124;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_TRANSCEIVER_TYPE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_DEBUG)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_RSSI_NORMAL_CONFIG)) != 0)
+    {
+        count += 7;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_RSSI_RANGING_CONFIG)) != 0)
+    {
+        count += 7;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_SERDES_CONFIGURATION)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_BURST_PROFILE_DELIMITER_MAX_ERRORS)) != 0)
+    {
+        count += 4;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_RANGING_SM_PATTERNS_AT_INIT)) != 0)
+    {
+        count += 29;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_RANGING_SM_PATTERNS_ED_FAILURE)) != 0)
+    {
+        count += 29;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_RESET_ON_DEL_MISS)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_ED_STATE)) != 0)
+    {
+        count += 2;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_INVERT_ED)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_END_OF_BURST_RESET)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_TRX_RST_POLARITY)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_trx_cfg_data_unpack(bcmolt_xgpon_trx_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_BURST_PROFILE)) != 0)
+    {
+        if (!bcmolt_arr_xgpon_burst_profile_4_unpack(&this->burst_profile, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_TRANSCEIVER_CONFIG)) != 0)
+    {
+        if (!bcmolt_arr_xgpon_trx_configuration_4_unpack(&this->transceiver_config, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_TRANSCEIVER_TYPE)) != 0)
+    {
+        if (!bcmolt_xgpon_trx_type_unpack(&this->transceiver_type, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_DEBUG)) != 0)
+    {
+        if (!bcmolt_xgpon_trx_debug_unpack(&this->debug, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_RSSI_NORMAL_CONFIG)) != 0)
+    {
+        if (!bcmolt_xgpon_rssi_normal_config_unpack(&this->rssi_normal_config, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_RSSI_RANGING_CONFIG)) != 0)
+    {
+        if (!bcmolt_xgpon_rssi_ranging_config_unpack(&this->rssi_ranging_config, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_SERDES_CONFIGURATION)) != 0)
+    {
+        if (!bcmolt_xgpon_serdes_configuration_unpack(&this->serdes_configuration, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_BURST_PROFILE_DELIMITER_MAX_ERRORS)) != 0)
+    {
+        if (!bcmolt_arr_u8_4_unpack(&this->burst_profile_delimiter_max_errors, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_RANGING_SM_PATTERNS_AT_INIT)) != 0)
+    {
+        if (!bcmolt_xgpon_rx_ranging_sm_pattern_unpack(&this->ranging_sm_patterns_at_init, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_RANGING_SM_PATTERNS_ED_FAILURE)) != 0)
+    {
+        if (!bcmolt_xgpon_rx_ranging_sm_pattern_unpack(&this->ranging_sm_patterns_ed_failure, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_RESET_ON_DEL_MISS)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->reset_on_del_miss))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_ED_STATE)) != 0)
+    {
+        if (!bcmolt_xgpon_ed_state_unpack(&this->ed_state, buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_INVERT_ED)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->invert_ed))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_END_OF_BURST_RESET)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->end_of_burst_reset))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_TRX_RST_POLARITY)) != 0)
+    {
+        if (!bcmolt_buf_read_bool(buf, &this->trx_rst_polarity))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_trx_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_BURST_PROFILE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 152))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_TRANSCEIVER_CONFIG)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 124))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_TRANSCEIVER_TYPE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_DEBUG)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_RSSI_NORMAL_CONFIG)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 7))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_RSSI_RANGING_CONFIG)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 7))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_SERDES_CONFIGURATION)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_BURST_PROFILE_DELIMITER_MAX_ERRORS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_RANGING_SM_PATTERNS_AT_INIT)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 29))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_RANGING_SM_PATTERNS_ED_FAILURE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 29))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_RESET_ON_DEL_MISS)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_ED_STATE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_INVERT_ED)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_END_OF_BURST_RESET)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_TRX_RST_POLARITY)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xgpon_trx_cfg_data_bounds_check(const bcmolt_xgpon_trx_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_trx_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_BURST_PROFILE)) != 0)
+    {
+        if (!bcmolt_arr_xgpon_burst_profile_4_bounds_check(&this->burst_profile))
+        {
+            *failed_prop = BCMOLT_XGPON_TRX_CFG_ID_BURST_PROFILE;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_TRANSCEIVER_CONFIG)) != 0)
+    {
+        if (!bcmolt_arr_xgpon_trx_configuration_4_bounds_check(&this->transceiver_config))
+        {
+            *failed_prop = BCMOLT_XGPON_TRX_CFG_ID_TRANSCEIVER_CONFIG;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_TRANSCEIVER_TYPE)) != 0)
+    {
+        switch (this->transceiver_type)
+        {
+            case BCMOLT_XGPON_TRX_TYPE_LTH_7222_PC:
+                break;
+            case BCMOLT_XGPON_TRX_TYPE_USER_DEFINED:
+                break;
+            case BCMOLT_XGPON_TRX_TYPE_WTD_RTXM266_702:
+                break;
+            case BCMOLT_XGPON_TRX_TYPE_LTH_7222_BC_PLUS:
+                break;
+            case BCMOLT_XGPON_TRX_TYPE_LTH_7226_PC:
+                break;
+            case BCMOLT_XGPON_TRX_TYPE_LTH_5302_PC:
+                break;
+            case BCMOLT_XGPON_TRX_TYPE_XGPON_GENERAL_1:
+                break;
+            case BCMOLT_XGPON_TRX_TYPE_XGPON_GENERAL_2:
+                break;
+            case BCMOLT_XGPON_TRX_TYPE_LTW_627_X_PC:
+                break;
+            case BCMOLT_XGPON_TRX_TYPE_XPP_XE_R_3_CDFB:
+                break;
+            default:
+                *failed_prop = BCMOLT_XGPON_TRX_CFG_ID_TRANSCEIVER_TYPE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_DEBUG)) != 0)
+    {
+        if (!bcmolt_xgpon_trx_debug_bounds_check(&this->debug))
+        {
+            *failed_prop = BCMOLT_XGPON_TRX_CFG_ID_DEBUG;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_RSSI_NORMAL_CONFIG)) != 0)
+    {
+        if (!bcmolt_xgpon_rssi_normal_config_bounds_check(&this->rssi_normal_config))
+        {
+            *failed_prop = BCMOLT_XGPON_TRX_CFG_ID_RSSI_NORMAL_CONFIG;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_RSSI_RANGING_CONFIG)) != 0)
+    {
+        if (!bcmolt_xgpon_rssi_ranging_config_bounds_check(&this->rssi_ranging_config))
+        {
+            *failed_prop = BCMOLT_XGPON_TRX_CFG_ID_RSSI_RANGING_CONFIG;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_SERDES_CONFIGURATION)) != 0)
+    {
+        if (!bcmolt_xgpon_serdes_configuration_bounds_check(&this->serdes_configuration))
+        {
+            *failed_prop = BCMOLT_XGPON_TRX_CFG_ID_SERDES_CONFIGURATION;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_BURST_PROFILE_DELIMITER_MAX_ERRORS)) != 0)
+    {
+        if (!bcmolt_arr_u8_4_bounds_check(&this->burst_profile_delimiter_max_errors))
+        {
+            *failed_prop = BCMOLT_XGPON_TRX_CFG_ID_BURST_PROFILE_DELIMITER_MAX_ERRORS;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_RANGING_SM_PATTERNS_AT_INIT)) != 0)
+    {
+        if (!bcmolt_xgpon_rx_ranging_sm_pattern_bounds_check(&this->ranging_sm_patterns_at_init))
+        {
+            *failed_prop = BCMOLT_XGPON_TRX_CFG_ID_RANGING_SM_PATTERNS_AT_INIT;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_RANGING_SM_PATTERNS_ED_FAILURE)) != 0)
+    {
+        if (!bcmolt_xgpon_rx_ranging_sm_pattern_bounds_check(&this->ranging_sm_patterns_ed_failure))
+        {
+            *failed_prop = BCMOLT_XGPON_TRX_CFG_ID_RANGING_SM_PATTERNS_ED_FAILURE;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XGPON_TRX_CFG_ID_ED_STATE)) != 0)
+    {
+        if (!bcmolt_xgpon_ed_state_bounds_check(&this->ed_state))
+        {
+            *failed_prop = BCMOLT_XGPON_TRX_CFG_ID_ED_STATE;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xpon_serdes_key_set_default(bcmolt_xpon_serdes_key *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_KEY_ID_PON_NI)) != 0)
+    {
+        this->pon_ni = (bcmolt_pon_ni) 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_KEY_ID_INSTANCE)) != 0)
+    {
+        this->instance = BCMOLT_SERDES_INSTANCE_INSTANCE_0;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xpon_serdes_key_pack(const bcmolt_xpon_serdes_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, (uint8_t) this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_KEY_ID_INSTANCE)) != 0)
+    {
+        if (!bcmolt_serdes_instance_pack(this->instance, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xpon_serdes_key_get_packed_length(const bcmolt_xpon_serdes_key *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_KEY_ID_PON_NI)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_KEY_ID_INSTANCE)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xpon_serdes_key_unpack(bcmolt_xpon_serdes_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, (uint8_t *) &this->pon_ni))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_KEY_ID_INSTANCE)) != 0)
+    {
+        if (!bcmolt_serdes_instance_unpack(&this->instance, buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xpon_serdes_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_KEY_ID_PON_NI)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_KEY_ID_INSTANCE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xpon_serdes_key_bounds_check(const bcmolt_xpon_serdes_key *this, bcmolt_presence_mask fields_present, bcmolt_xpon_serdes_key_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_KEY_ID_PON_NI)) != 0)
+    {
+        if (this->pon_ni > (bcmolt_pon_ni) 15)
+        {
+            *failed_prop = BCMOLT_XPON_SERDES_KEY_ID_PON_NI;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_KEY_ID_INSTANCE)) != 0)
+    {
+        switch (this->instance)
+        {
+            case BCMOLT_SERDES_INSTANCE_INSTANCE_0:
+                break;
+            case BCMOLT_SERDES_INSTANCE_INSTANCE_1:
+                break;
+            default:
+                *failed_prop = BCMOLT_XPON_SERDES_KEY_ID_INSTANCE;
+                return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmolt_xpon_serdes_cfg_data_set_default(bcmolt_xpon_serdes_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_VGA)) != 0)
+    {
+        this->rx_vga = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_PF)) != 0)
+    {
+        this->rx_pf = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_LFPF)) != 0)
+    {
+        this->rx_lfpf = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_DFE1)) != 0)
+    {
+        this->rx_dfe1 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_DFE2)) != 0)
+    {
+        this->rx_dfe2 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_DFE3)) != 0)
+    {
+        this->rx_dfe3 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_DFE4)) != 0)
+    {
+        this->rx_dfe4 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_DFE5)) != 0)
+    {
+        this->rx_dfe5 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_TX_PRE)) != 0)
+    {
+        this->tx_pre = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_TX_MAIN)) != 0)
+    {
+        this->tx_main = 43;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_TX_POST1)) != 0)
+    {
+        this->tx_post1 = 5;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_TX_POST2)) != 0)
+    {
+        this->tx_post2 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_TX_POST3)) != 0)
+    {
+        this->tx_post3 = 0;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_TX_AMP)) != 0)
+    {
+        this->tx_amp = 12;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xpon_serdes_cfg_data_pack(const bcmolt_xpon_serdes_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_VGA)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->rx_vga))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_PF)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->rx_pf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_LFPF)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->rx_lfpf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_DFE1)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->rx_dfe1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_DFE2)) != 0)
+    {
+        if (!bcmolt_buf_write_s8(buf, this->rx_dfe2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_DFE3)) != 0)
+    {
+        if (!bcmolt_buf_write_s8(buf, this->rx_dfe3))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_DFE4)) != 0)
+    {
+        if (!bcmolt_buf_write_s8(buf, this->rx_dfe4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_DFE5)) != 0)
+    {
+        if (!bcmolt_buf_write_s8(buf, this->rx_dfe5))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_TX_PRE)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->tx_pre))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_TX_MAIN)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->tx_main))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_TX_POST1)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->tx_post1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_TX_POST2)) != 0)
+    {
+        if (!bcmolt_buf_write_s8(buf, this->tx_post2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_TX_POST3)) != 0)
+    {
+        if (!bcmolt_buf_write_s8(buf, this->tx_post3))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_TX_AMP)) != 0)
+    {
+        if (!bcmolt_buf_write_u8(buf, this->tx_amp))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_xpon_serdes_cfg_data_get_packed_length(const bcmolt_xpon_serdes_cfg_data *this, bcmolt_presence_mask fields_present)
+{
+    uint32_t count = 0;
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_VGA)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_PF)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_LFPF)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_DFE1)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_DFE2)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_DFE3)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_DFE4)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_DFE5)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_TX_PRE)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_TX_MAIN)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_TX_POST1)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_TX_POST2)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_TX_POST3)) != 0)
+    {
+        count += 1;
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_TX_AMP)) != 0)
+    {
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xpon_serdes_cfg_data_unpack(bcmolt_xpon_serdes_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_VGA)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->rx_vga))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_PF)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->rx_pf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_LFPF)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->rx_lfpf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_DFE1)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->rx_dfe1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_DFE2)) != 0)
+    {
+        if (!bcmolt_buf_read_s8(buf, &this->rx_dfe2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_DFE3)) != 0)
+    {
+        if (!bcmolt_buf_read_s8(buf, &this->rx_dfe3))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_DFE4)) != 0)
+    {
+        if (!bcmolt_buf_read_s8(buf, &this->rx_dfe4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_DFE5)) != 0)
+    {
+        if (!bcmolt_buf_read_s8(buf, &this->rx_dfe5))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_TX_PRE)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->tx_pre))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_TX_MAIN)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->tx_main))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_TX_POST1)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->tx_post1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_TX_POST2)) != 0)
+    {
+        if (!bcmolt_buf_read_s8(buf, &this->tx_post2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_TX_POST3)) != 0)
+    {
+        if (!bcmolt_buf_read_s8(buf, &this->tx_post3))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_TX_AMP)) != 0)
+    {
+        if (!bcmolt_buf_read_u8(buf, &this->tx_amp))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xpon_serdes_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present)
+{
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_VGA)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_PF)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_LFPF)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_DFE1)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_DFE2)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_DFE3)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_DFE4)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_DFE5)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_TX_PRE)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_TX_MAIN)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_TX_POST1)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_TX_POST2)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_TX_POST3)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_TX_AMP)) != 0)
+    {
+        if (!bcmolt_buf_skip(packed, 1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_xpon_serdes_cfg_data_bounds_check(const bcmolt_xpon_serdes_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_xpon_serdes_cfg_id *failed_prop)
+{
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_VGA)) != 0)
+    {
+        if (this->rx_vga > 45)
+        {
+            *failed_prop = BCMOLT_XPON_SERDES_CFG_ID_RX_VGA;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_PF)) != 0)
+    {
+        if (this->rx_pf > 15)
+        {
+            *failed_prop = BCMOLT_XPON_SERDES_CFG_ID_RX_PF;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_LFPF)) != 0)
+    {
+        if (this->rx_lfpf > 7)
+        {
+            *failed_prop = BCMOLT_XPON_SERDES_CFG_ID_RX_LFPF;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_DFE1)) != 0)
+    {
+        if (this->rx_dfe1 > 63)
+        {
+            *failed_prop = BCMOLT_XPON_SERDES_CFG_ID_RX_DFE1;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_DFE2)) != 0)
+    {
+        if (this->rx_dfe2 < -31)
+        {
+            *failed_prop = BCMOLT_XPON_SERDES_CFG_ID_RX_DFE2;
+            return BCMOS_FALSE;
+        }
+
+        if (this->rx_dfe2 > 31)
+        {
+            *failed_prop = BCMOLT_XPON_SERDES_CFG_ID_RX_DFE2;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_DFE3)) != 0)
+    {
+        if (this->rx_dfe3 < -31)
+        {
+            *failed_prop = BCMOLT_XPON_SERDES_CFG_ID_RX_DFE3;
+            return BCMOS_FALSE;
+        }
+
+        if (this->rx_dfe3 > 31)
+        {
+            *failed_prop = BCMOLT_XPON_SERDES_CFG_ID_RX_DFE3;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_DFE4)) != 0)
+    {
+        if (this->rx_dfe4 < -15)
+        {
+            *failed_prop = BCMOLT_XPON_SERDES_CFG_ID_RX_DFE4;
+            return BCMOS_FALSE;
+        }
+
+        if (this->rx_dfe4 > 15)
+        {
+            *failed_prop = BCMOLT_XPON_SERDES_CFG_ID_RX_DFE4;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_RX_DFE5)) != 0)
+    {
+        if (this->rx_dfe5 < -15)
+        {
+            *failed_prop = BCMOLT_XPON_SERDES_CFG_ID_RX_DFE5;
+            return BCMOS_FALSE;
+        }
+
+        if (this->rx_dfe5 > 15)
+        {
+            *failed_prop = BCMOLT_XPON_SERDES_CFG_ID_RX_DFE5;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_TX_PRE)) != 0)
+    {
+        if (this->tx_pre > 31)
+        {
+            *failed_prop = BCMOLT_XPON_SERDES_CFG_ID_TX_PRE;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_TX_MAIN)) != 0)
+    {
+        if (this->tx_main > 112)
+        {
+            *failed_prop = BCMOLT_XPON_SERDES_CFG_ID_TX_MAIN;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_TX_POST1)) != 0)
+    {
+        if (this->tx_post1 > 63)
+        {
+            *failed_prop = BCMOLT_XPON_SERDES_CFG_ID_TX_POST1;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_TX_POST2)) != 0)
+    {
+        if (this->tx_post2 < -15)
+        {
+            *failed_prop = BCMOLT_XPON_SERDES_CFG_ID_TX_POST2;
+            return BCMOS_FALSE;
+        }
+
+        if (this->tx_post2 > 15)
+        {
+            *failed_prop = BCMOLT_XPON_SERDES_CFG_ID_TX_POST2;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_TX_POST3)) != 0)
+    {
+        if (this->tx_post3 < -7)
+        {
+            *failed_prop = BCMOLT_XPON_SERDES_CFG_ID_TX_POST3;
+            return BCMOS_FALSE;
+        }
+
+        if (this->tx_post3 > 7)
+        {
+            *failed_prop = BCMOLT_XPON_SERDES_CFG_ID_TX_POST3;
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((fields_present & (1ULL << BCMOLT_XPON_SERDES_CFG_ID_TX_AMP)) != 0)
+    {
+        if (this->tx_amp > 15)
+        {
+            *failed_prop = BCMOLT_XPON_SERDES_CFG_ID_TX_AMP;
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+bcmos_bool bcmolt_obj_has_tag(bcmolt_obj_id obj, bcmolt_obj_tag tag)
+{
+    switch (obj)
+    {
+        case BCMOLT_OBJ_ID_AE_NI:
+            return (tag == BCMOLT_OBJ_TAG_AE);
+        case BCMOLT_OBJ_ID_AE_PATH_DS:
+            return (tag == BCMOLT_OBJ_TAG_AE);
+        case BCMOLT_OBJ_ID_AE_PATH_US:
+            return (tag == BCMOLT_OBJ_TAG_AE);
+        case BCMOLT_OBJ_ID_CHANNEL:
+            return (tag == BCMOLT_OBJ_TAG_XGPON);
+        case BCMOLT_OBJ_ID_DEBUG:
+            return (((tag == BCMOLT_OBJ_TAG_EPON) || (tag == BCMOLT_OBJ_TAG_GPON)) || (tag == BCMOLT_OBJ_TAG_XGPON));
+        case BCMOLT_OBJ_ID_DEVICE:
+            return ((((tag == BCMOLT_OBJ_TAG_EPON) || (tag == BCMOLT_OBJ_TAG_GPON)) || (tag == BCMOLT_OBJ_TAG_XGPON)) || (tag == BCMOLT_OBJ_TAG_AE));
+        case BCMOLT_OBJ_ID_EPON_DENIED_LINK:
+            return (tag == BCMOLT_OBJ_TAG_EPON);
+        case BCMOLT_OBJ_ID_EPON_LINK:
+            return (tag == BCMOLT_OBJ_TAG_EPON);
+        case BCMOLT_OBJ_ID_EPON_NI:
+            return (tag == BCMOLT_OBJ_TAG_EPON);
+        case BCMOLT_OBJ_ID_EPON_ONU_10G_US:
+            return (tag == BCMOLT_OBJ_TAG_EPON);
+        case BCMOLT_OBJ_ID_EPON_ONU_1G_US:
+            return (tag == BCMOLT_OBJ_TAG_EPON);
+        case BCMOLT_OBJ_ID_EPON_PATH_10G_DS:
+            return (tag == BCMOLT_OBJ_TAG_EPON);
+        case BCMOLT_OBJ_ID_EPON_PATH_10G_US:
+            return (tag == BCMOLT_OBJ_TAG_EPON);
+        case BCMOLT_OBJ_ID_EPON_PATH_1G_DS:
+            return (tag == BCMOLT_OBJ_TAG_EPON);
+        case BCMOLT_OBJ_ID_EPON_PATH_1G_US:
+            return (tag == BCMOLT_OBJ_TAG_EPON);
+        case BCMOLT_OBJ_ID_EPON_RP:
+            return (tag == BCMOLT_OBJ_TAG_EPON);
+        case BCMOLT_OBJ_ID_GPIO:
+            return ((((tag == BCMOLT_OBJ_TAG_EPON) || (tag == BCMOLT_OBJ_TAG_GPON)) || (tag == BCMOLT_OBJ_TAG_XGPON)) || (tag == BCMOLT_OBJ_TAG_AE));
+        case BCMOLT_OBJ_ID_GPON_ALLOC:
+            return (tag == BCMOLT_OBJ_TAG_GPON);
+        case BCMOLT_OBJ_ID_GPON_GEM_PORT:
+            return (tag == BCMOLT_OBJ_TAG_GPON);
+        case BCMOLT_OBJ_ID_GPON_IWF:
+            return (tag == BCMOLT_OBJ_TAG_GPON);
+        case BCMOLT_OBJ_ID_GPON_IWF_DS_EGRESS_FLOW:
+            return (tag == BCMOLT_OBJ_TAG_GPON);
+        case BCMOLT_OBJ_ID_GPON_IWF_DS_INGRESS_FLOW:
+            return (tag == BCMOLT_OBJ_TAG_GPON);
+        case BCMOLT_OBJ_ID_GPON_IWF_MAC_TABLE:
+            return (tag == BCMOLT_OBJ_TAG_GPON);
+        case BCMOLT_OBJ_ID_GPON_IWF_US_FLOW:
+            return (tag == BCMOLT_OBJ_TAG_GPON);
+        case BCMOLT_OBJ_ID_GPON_NI:
+            return (tag == BCMOLT_OBJ_TAG_GPON);
+        case BCMOLT_OBJ_ID_GPON_ONU:
+            return (tag == BCMOLT_OBJ_TAG_GPON);
+        case BCMOLT_OBJ_ID_GPON_TRX:
+            return (tag == BCMOLT_OBJ_TAG_GPON);
+        case BCMOLT_OBJ_ID_LOG_ENTRY:
+            return (((tag == BCMOLT_OBJ_TAG_XGPON) || (tag == BCMOLT_OBJ_TAG_GPON)) || (tag == BCMOLT_OBJ_TAG_EPON));
+        case BCMOLT_OBJ_ID_LOGGER:
+            return (((tag == BCMOLT_OBJ_TAG_GPON) || (tag == BCMOLT_OBJ_TAG_XGPON)) || (tag == BCMOLT_OBJ_TAG_EPON));
+        case BCMOLT_OBJ_ID_NNI:
+            return ((((tag == BCMOLT_OBJ_TAG_GPON) || (tag == BCMOLT_OBJ_TAG_XGPON)) || (tag == BCMOLT_OBJ_TAG_EPON)) || (tag == BCMOLT_OBJ_TAG_AE));
+        case BCMOLT_OBJ_ID_NNI_SERDES:
+            return ((((tag == BCMOLT_OBJ_TAG_GPON) || (tag == BCMOLT_OBJ_TAG_XGPON)) || (tag == BCMOLT_OBJ_TAG_EPON)) || (tag == BCMOLT_OBJ_TAG_AE));
+        case BCMOLT_OBJ_ID_SOFTWARE_ERROR:
+            return ((((tag == BCMOLT_OBJ_TAG_GPON) || (tag == BCMOLT_OBJ_TAG_XGPON)) || (tag == BCMOLT_OBJ_TAG_EPON)) || (tag == BCMOLT_OBJ_TAG_AE));
+        case BCMOLT_OBJ_ID_TRX_CALIBRATION:
+            return (((tag == BCMOLT_OBJ_TAG_GPON) || (tag == BCMOLT_OBJ_TAG_XGPON)) || (tag == BCMOLT_OBJ_TAG_EPON));
+        case BCMOLT_OBJ_ID_XGPON_ALLOC:
+            return (tag == BCMOLT_OBJ_TAG_XGPON);
+        case BCMOLT_OBJ_ID_XGPON_GEM_PORT:
+            return (tag == BCMOLT_OBJ_TAG_XGPON);
+        case BCMOLT_OBJ_ID_XGPON_IWF:
+            return (tag == BCMOLT_OBJ_TAG_XGPON);
+        case BCMOLT_OBJ_ID_XGPON_NI:
+            return (tag == BCMOLT_OBJ_TAG_XGPON);
+        case BCMOLT_OBJ_ID_XGPON_ONU:
+            return (tag == BCMOLT_OBJ_TAG_XGPON);
+        case BCMOLT_OBJ_ID_XGPON_TRX:
+            return (tag == BCMOLT_OBJ_TAG_XGPON);
+        case BCMOLT_OBJ_ID_XPON_SERDES:
+            return ((((tag == BCMOLT_OBJ_TAG_GPON) || (tag == BCMOLT_OBJ_TAG_XGPON)) || (tag == BCMOLT_OBJ_TAG_EPON)) || (tag == BCMOLT_OBJ_TAG_AE));
+        default:
+            return BCMOS_FALSE;
+    }
+}
+
+/* Maple device selected as a target for CLI commands */
+bcmolt_devid current_device;
+
+/* System mode */
+static bcmolt_system_mode device_system_mode[BCMTR_MAX_OLTS];
+
+/** Set system mode
+ * \param[in]  dev            Device id
+ * \param[in]  system_mode    System mode
+ * \returns BCM_ERR_OK, BCM_ERR_NOT_SUPPORTED
+ */
+bcmos_errno bcmolt_system_mode_set(bcmolt_devid dev, bcmolt_system_mode system_mode)
+{
+    if (dev >= BCMTR_MAX_OLTS) return BCM_ERR_PARM;
+    device_system_mode[dev] = system_mode;
+    return BCM_ERR_OK;
+}
+
+/** Get system mode
+ * \param[in]  dev            Device id
+ * \param[in]  system_mode    System mode
+ * \returns BCM_ERR_OK
+ */
+bcmos_errno bcmolt_system_mode_get(bcmolt_devid dev, bcmolt_system_mode *system_mode)
+{
+    if (dev >= BCMTR_MAX_OLTS) return BCM_ERR_PARM;
+    *system_mode = device_system_mode[dev];
+    return BCM_ERR_OK;
+}
+
+/** Mapping of system mode to object tag.
+ * This function is hand-written and must be updated whenever a new system mode is added or object tags change.
+ */
+bcmos_bool bcmolt_obj_tag_valid_for_system_mode(bcmolt_system_mode system_mode, bcmolt_obj_tag tag)
+{
+    switch (system_mode)
+    {
+        case BCMOLT_SYSTEM_MODE_GPON__16_X: /* Fall-through */
+        case BCMOLT_SYSTEM_MODE_GPON__8_X:
+        case BCMOLT_SYSTEM_MODE_GPON__4_X:
+            return tag == BCMOLT_OBJ_TAG_GPON;
+        case BCMOLT_SYSTEM_MODE_EPON__16_X:
+        case BCMOLT_SYSTEM_MODE_EPON__8_X:
+        case BCMOLT_SYSTEM_MODE_EPON__4_X:
+        case BCMOLT_SYSTEM_MODE_EPON__8_X_COEXISTENCE_TDMA:
+        case BCMOLT_SYSTEM_MODE_EPON__4_X_COEXISTENCE_TDMA:
+        case BCMOLT_SYSTEM_MODE_EPON__8_X_10_G:
+        case BCMOLT_SYSTEM_MODE_EPON__4_X_10_G:
+        case BCMOLT_SYSTEM_MODE_EPON__2_X_10_G:
+            return tag == BCMOLT_OBJ_TAG_EPON;
+        case BCMOLT_SYSTEM_MODE_XGPON_1__8_X:
+        case BCMOLT_SYSTEM_MODE_XGPON_1__4_X:
+        case BCMOLT_SYSTEM_MODE_XGS__2_X_10_G:
+        case BCMOLT_SYSTEM_MODE_NGPON2__2_X_10_G:
+        case BCMOLT_SYSTEM_MODE_NGPON2__8_X_2_P_5_G:
+            return tag == BCMOLT_OBJ_TAG_XGPON;
+        case BCMOLT_SYSTEM_MODE_GPON_8_XGPON_4_X_COEXISTENCE:
+            return tag == BCMOLT_OBJ_TAG_GPON || tag == BCMOLT_OBJ_TAG_XGPON;
+        case BCMOLT_SYSTEM_MODE_AE_8_X:
+            return tag == BCMOLT_OBJ_TAG_AE;
+        default:
+            return BCMOS_FALSE;
+    }
+}
+
+bcmos_bool bcmolt_object_is_supported(bcmolt_system_mode system_mode, bcmolt_obj_id obj)
+{
+    bcmolt_obj_tag tag;
+
+    for (tag = 0; tag < BCMOLT_OBJ_TAG__NUM_OF; tag++)
+    {
+        if (bcmolt_obj_tag_valid_for_system_mode(system_mode, tag) && bcmolt_obj_has_tag(obj, tag))
+        {
+            return BCMOS_TRUE;
+        }
+    }
+
+    return BCMOS_FALSE;
+}
+
+const char *bcmolt_system_mode_name(bcmolt_system_mode mode)
+{
+    static const char *mode_name[] = { [BCMOLT_SYSTEM_MODE_GPON__16_X] = "GPON_16", [BCMOLT_SYSTEM_MODE_GPON__8_X] = "GPON_8", [BCMOLT_SYSTEM_MODE_GPON__4_X] = "GPON_4", [BCMOLT_SYSTEM_MODE_EPON__16_X] = "EPON_16", [BCMOLT_SYSTEM_MODE_EPON__8_X] = "EPON_8", [BCMOLT_SYSTEM_MODE_EPON__4_X] = "EPON_4", [BCMOLT_SYSTEM_MODE_XGPON_1__8_X] = "XGPON1_8", [BCMOLT_SYSTEM_MODE_EPON__8_X_COEXISTENCE_TDMA] = "EPON_8_TDMA", [BCMOLT_SYSTEM_MODE_EPON__4_X_COEXISTENCE_TDMA] = "EPON_4_TDMA", [BCMOLT_SYSTEM_MODE_EPON__8_X_10_G] = "EPON_8_10G", [BCMOLT_SYSTEM_MODE_EPON__4_X_10_G] = "EPON_4_10G", [BCMOLT_SYSTEM_MODE_GPON_8_XGPON_4_X_COEXISTENCE] = "GPON_8_XGPON_4", [BCMOLT_SYSTEM_MODE_AE_8_X] = "AE_8", [BCMOLT_SYSTEM_MODE_XGS__2_X_10_G] = "XGS_2_10G", [BCMOLT_SYSTEM_MODE_NGPON2__2_X_10_G] = "NGPON2_2_10G", [BCMOLT_SYSTEM_MODE_NGPON2__8_X_2_P_5_G] = "NGPON2_2_2_5G", [BCMOLT_SYSTEM_MODE_XGPON_1__4_X] = "XGPON1_4", [BCMOLT_SYSTEM_MODE_EPON__2_X_10_G] = "EPON_2_10G", };
+
+    const char *unset = "*unconfigured*";
+    const char *invalid = "*invalid*";
+
+    if (mode >= BCMOLT_SYSTEM_MODE__NUM_OF)
+    {
+        return unset;
+    }
+
+    if (mode_name[mode] == NULL)
+    {
+        return invalid;
+    }
+
+    return mode_name[mode];
+}
+
+/* XGPON num of onus */
+static bcmolt_xgpon_num_of_onus device_xgpon_num_of_onus[BCMTR_MAX_OLTS];
+
+/** Set xgpon num of onus
+ * \param[in]  dev            Device id
+ * \param[in]  xgpon_num_of_onus    XGPON num of onus
+ * \returns BCM_ERR_OK, BCM_ERR_PARM
+ */
+bcmos_errno bcmolt_xgpon_num_of_onus_set(bcmolt_devid dev, bcmolt_xgpon_num_of_onus xgpon_num_of_onus)
+{
+    if (dev >= BCMTR_MAX_OLTS) return BCM_ERR_PARM;
+    device_xgpon_num_of_onus[dev] = xgpon_num_of_onus;
+    return BCM_ERR_OK;
+}
+
+/** Get xgpon num of onus
+ * \param[in]  dev            Device id
+ * \param[in]  xgpon_num_of_onus    XGPON num of onus
+ * \returns BCM_ERR_OK, BCM_ERR_PARM
+ */
+bcmos_errno bcmolt_xgpon_num_of_onus_get(bcmolt_devid dev, bcmolt_xgpon_num_of_onus *xgpon_num_of_onus)
+{
+    if (dev >= BCMTR_MAX_OLTS) return BCM_ERR_PARM;
+    *xgpon_num_of_onus = device_xgpon_num_of_onus[dev];
+    return BCM_ERR_OK;
+}
diff --git a/bcm68620_release/release/host_driver/model/bcmolt_model_types.h b/bcm68620_release/release/host_driver/model/bcmolt_model_types.h
new file mode 100644
index 0000000..3785b02
--- /dev/null
+++ b/bcm68620_release/release/host_driver/model/bcmolt_model_types.h
@@ -0,0 +1,46987 @@
+/*
+<:copyright-BRCM:2016:proprietary:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+This program is the proprietary software of Broadcom Corporation and/or its
+licensors, and may only be used, duplicated, modified or distributed pursuant
+to the terms and conditions of a separate, written license agreement executed
+between you and Broadcom (an "Authorized License").  Except as set forth in
+an Authorized License, Broadcom grants no license (express or implied), right
+to use, or waiver of any kind with respect to the Software, and Broadcom
+expressly reserves all rights in and to the Software and all intellectual
+property rights therein.  IF YOU HAVE NO AUTHORIZED LICENSE, THEN YOU HAVE
+NO RIGHT TO USE THIS SOFTWARE IN ANY WAY, AND SHOULD IMMEDIATELY NOTIFY
+BROADCOM AND DISCONTINUE ALL USE OF THE SOFTWARE.
+
+Except as expressly set forth in the Authorized License,
+
+1. This program, including its structure, sequence and organization,
+    constitutes the valuable trade secrets of Broadcom, and you shall use
+    all reasonable efforts to protect the confidentiality thereof, and to
+    use this information only in connection with your use of Broadcom
+    integrated circuit products.
+
+2. TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
+    AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES, REPRESENTATIONS OR
+    WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH
+    RESPECT TO THE SOFTWARE.  BROADCOM SPECIFICALLY DISCLAIMS ANY AND
+    ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY, NONINFRINGEMENT,
+    FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES, ACCURACY OR
+    COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR CORRESPONDENCE
+    TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING OUT OF USE OR
+    PERFORMANCE OF THE SOFTWARE.
+
+3. TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM OR
+    ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL, INCIDENTAL, SPECIAL,
+    INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER ARISING OUT OF OR IN ANY
+    WAY RELATING TO YOUR USE OF OR INABILITY TO USE THE SOFTWARE EVEN
+    IF BROADCOM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES;
+    OR (ii) ANY AMOUNT IN EXCESS OF THE AMOUNT ACTUALLY PAID FOR THE
+    SOFTWARE ITSELF OR U.S. $1, WHICHEVER IS GREATER. THESE LIMITATIONS
+    SHALL APPLY NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY
+    LIMITED REMEDY.
+:>
+*/
+#ifndef BCMOLT_MODEL_TYPES_H_
+#define BCMOLT_MODEL_TYPES_H_
+
+#include "bcmos_system.h"
+#include "bcmos_errno.h"
+#include "bcmolt_buf.h"
+#include "bcmolt_msg.h"
+#include "bcmolt_model_data.h"
+
+/** \addtogroup object_model
+ * @{
+ */
+
+/** Structure definition for the "key" group of the "ae_ni" object. 
+ */
+typedef struct bcmolt_ae_ni_key
+{
+    bcmolt_ae_ni ae_ni; /**< The index of a specific AE NI instance as seen by the host. */
+} bcmolt_ae_ni_key;
+
+/** Structure definition for the "cfg" group of the "ae_ni" object. 
+ */
+typedef struct bcmolt_ae_ni_cfg_data
+{
+    bcmos_mac_address mac_address;  /**< The MAC address used for all frames generated by the OLT on the network.  This value must be set before AE_NI is first enabled, and cannot be changed while the AE_NI is enabled. */
+    bcmolt_ae_ni_en_state ae_ni_en; /**< Indicates the enable state of the AE NI. */
+    uint16_t mtu_10g;               /**< Maximum frame size (including FCS) on the 10G path. This attribute cannot be changed on an enabled AE_NI. */
+    bcmolt_prbs_generator_config prbs_generator;    /**< DS PRBS generator configuration */
+    bcmolt_prbs_checker_config prbs_checker;        /**< US PRBS checker configuration */
+    bcmolt_prbs_status prbs_status;                 /**< Result of US PRBS checker */
+} bcmolt_ae_ni_cfg_data;
+
+/** Transport message definition for "cfg" group of "ae_ni" object. 
+ */
+typedef struct bcmolt_ae_ni_cfg
+{
+    bcmolt_cfg hdr;             /**< Transport header. */
+    bcmolt_ae_ni_key key;       /**< Object key. */
+    bcmolt_ae_ni_cfg_data data; /**< All properties that must be set by the user. */
+} bcmolt_ae_ni_cfg;
+
+/** Structure definition for the "set_ae_ni_en_state" group of the "ae_ni" 
+ * object. 
+ *
+ * Set the AE NI enable state. 
+ */
+typedef struct bcmolt_ae_ni_set_ae_ni_en_state_data
+{
+    bcmolt_ae_ni_en_state new_state;    /**< New EPON NI enable state. */
+} bcmolt_ae_ni_set_ae_ni_en_state_data;
+
+/** Transport message definition for "set_ae_ni_en_state" group of "ae_ni" 
+ * object. 
+ */
+typedef struct bcmolt_ae_ni_set_ae_ni_en_state
+{
+    bcmolt_oper hdr;        /**< Transport header. */
+    bcmolt_ae_ni_key key;   /**< Object key. */
+    bcmolt_ae_ni_set_ae_ni_en_state_data data;  /**< All properties that must be set by the user. */
+} bcmolt_ae_ni_set_ae_ni_en_state;
+
+/** Structure definition for the "key" group of the "ae_path_ds" object. 
+ */
+typedef struct bcmolt_ae_path_ds_key
+{
+    bcmolt_ae_ni ae_ni; /**< AE NI associated with this 10G downstream path. */
+} bcmolt_ae_path_ds_key;
+
+/** Structure definition for the "stat" group of the "ae_path_ds" object. 
+ */
+typedef struct bcmolt_ae_path_ds_stat_data
+{
+    uint64_t bytes;             /**< The number of bytes transmitted on this 10g downstream path. */
+    uint64_t frames;            /**< The number of frames transmitted on this 10g downstream path. */
+    uint64_t frames_64;         /**< The number of 64 byte frames transmitted on this 10g downstream path. */
+    uint64_t frames_65_127;     /**< The number of 65 to 127 byte frames transmitted on this 10g downstream path. */
+    uint64_t frames_128_255;    /**< The number of 128 to 255 byte frames transmitted on this 10g downstream path. */
+    uint64_t frames_256_511;    /**< The number of 256 to 511 byte frames transmitted on this 10g downstream path. */
+    uint64_t frames_512_1023;   /**< The number of 512 to 1023 byte frames transmitted on this 10g downstream path. */
+    uint64_t frames_1024_1518;  /**< The number of 1024 to 1518 byte frames transmitted on this 10g downstream path. */
+    uint64_t frames_1519_2047;  /**< The number of 1519 to 2047 byte frames transmitted on this 10g downstream path. */
+    uint64_t frames_2048_4095;  /**< The number of 2048 to 4095 byte frames transmitted on this 10g downstream path. */
+    uint64_t frames_4096_9216;  /**< The number of 4096 to 9216 byte frames transmitted on this 10g downstream path. */
+    uint64_t frames_9217_16383; /**< The number of 9217 to 16383 byte frames transmitted on this 10g downstream path. */
+    uint64_t broadcast_frames;  /**< The number of broadcast frames transmitted on this 10g downstream path. */
+    uint64_t data_bytes;        /**< The number of data bytes transmitted on this 10g downstream path. */
+    uint64_t multicast_frames;  /**< The number of multicast frames transmitted on this 10g downstream path. */
+    uint64_t unicast_frames;    /**< The number of unicast frames transmitted on this 10g downstream path. */
+    uint64_t abort_frames;      /**< Number of abort frames transmitted on this 10g downstream path. */
+} bcmolt_ae_path_ds_stat_data;
+
+/** Transport message definition for "stat" group of "ae_path_ds" object. 
+ */
+typedef struct bcmolt_ae_path_ds_stat
+{
+    bcmolt_stat hdr;                    /**< Transport header. */
+    bcmolt_ae_path_ds_key key;          /**< Object key. */
+    bcmolt_ae_path_ds_stat_data data;   /**< All properties that must be set by the user. */
+} bcmolt_ae_path_ds_stat;
+
+/** Structure definition for the "stat_cfg" group of the "ae_path_ds" object. 
+ */
+typedef struct bcmolt_ae_path_ds_stat_cfg_data
+{
+    bcmolt_stat_alarm_config cfg;   /**< Statistic alarm configuration. */
+} bcmolt_ae_path_ds_stat_cfg_data;
+
+/** Transport message definition for "stat_cfg" group of "ae_path_ds" object. 
+ */
+typedef struct bcmolt_ae_path_ds_stat_cfg
+{
+    bcmolt_stat_cfg hdr;        /**< Transport header. */
+    bcmolt_ae_path_ds_key key;  /**< Object key. */
+    bcmolt_ae_path_ds_stat_cfg_data data;   /**< All properties that must be set by the user. */
+} bcmolt_ae_path_ds_stat_cfg;
+
+/** Structure definition for the "stat_alarm_cleared" group of the "ae_path_ds" 
+ * object. 
+ *
+ * Sent when a configured statistic alarm condition is no longer met. 
+ */
+typedef struct bcmolt_ae_path_ds_stat_alarm_cleared_data
+{
+    bcmolt_ae_path_ds_stat_id stat; /**< Statistic identifier. */
+} bcmolt_ae_path_ds_stat_alarm_cleared_data;
+
+/** Transport message definition for "stat_alarm_cleared" group of "ae_path_ds" 
+ * object. 
+ */
+typedef struct bcmolt_ae_path_ds_stat_alarm_cleared
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_ae_path_ds_key key;  /**< Object key. */
+    bcmolt_ae_path_ds_stat_alarm_cleared_data data; /**< All properties that must be set by the user. */
+} bcmolt_ae_path_ds_stat_alarm_cleared;
+
+/** Structure definition for the "stat_alarm_raised" group of the "ae_path_ds" 
+ * object. 
+ *
+ * Sent when a configured statistic alarm condition has been met. 
+ */
+typedef struct bcmolt_ae_path_ds_stat_alarm_raised_data
+{
+    bcmolt_ae_path_ds_stat_id stat; /**< Statistic identifier. */
+} bcmolt_ae_path_ds_stat_alarm_raised_data;
+
+/** Transport message definition for "stat_alarm_raised" group of "ae_path_ds" 
+ * object. 
+ */
+typedef struct bcmolt_ae_path_ds_stat_alarm_raised
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_ae_path_ds_key key;  /**< Object key. */
+    bcmolt_ae_path_ds_stat_alarm_raised_data data;  /**< All properties that must be set by the user. */
+} bcmolt_ae_path_ds_stat_alarm_raised;
+
+/** Structure definition for the "auto_cfg" group of the "ae_path_ds" object. 
+ */
+typedef struct bcmolt_ae_path_ds_auto_cfg_data
+{
+    bcmos_bool stat_alarm_cleared;  /**< If true, indications of type "stat_alarm_cleared" will be generated. */
+    bcmos_bool stat_alarm_raised;   /**< If true, indications of type "stat_alarm_raised" will be generated. */
+} bcmolt_ae_path_ds_auto_cfg_data;
+
+/** Transport message definition for "auto_cfg" group of "ae_path_ds" object. 
+ */
+typedef struct bcmolt_ae_path_ds_auto_cfg
+{
+    bcmolt_auto_cfg hdr;                    /**< Transport header. */
+    bcmolt_ae_path_ds_key key;              /**< Object key. */
+    bcmolt_ae_path_ds_auto_cfg_data data;   /**< All properties that must be set by the user. */
+} bcmolt_ae_path_ds_auto_cfg;
+
+/** Structure definition for the "key" group of the "ae_path_us" object. 
+ */
+typedef struct bcmolt_ae_path_us_key
+{
+    bcmolt_ae_ni ae_ni; /**< AE NI associated with this 10G upstream path. */
+} bcmolt_ae_path_us_key;
+
+/** Structure definition for the "stat" group of the "ae_path_us" object. 
+ */
+typedef struct bcmolt_ae_path_us_stat_data
+{
+    uint64_t bytes;             /**< The number of bytes received on this 10g upstream path. */
+    uint64_t frames;            /**< The number of frames received on this 10g upstream path. */
+    uint64_t frames_64;         /**< The number of 64 byte frames received on this 10g upstream path. */
+    uint64_t frames_65_127;     /**< The number of 65 to 127 byte frames received on this 10g upstream path. */
+    uint64_t frames_128_255;    /**< The number of 128 to 255 byte frames received on this 10g upstream path. */
+    uint64_t frames_256_511;    /**< The number of 256 to 511 byte frames received on this 10g upstream path. */
+    uint64_t frames_512_1023;   /**< The number of 512 to 1023 byte frames received on this 10g upstream path. */
+    uint64_t frames_1024_1518;  /**< The number of 1024 to 1518 byte frames received on this 10g upstream path. */
+    uint64_t frames_1519_2047;  /**< The number of 1519 to 2047 byte frames received on this 10g upstream path. */
+    uint64_t frames_2048_4095;  /**< The number of 2048 to 4095 byte frames received on this 10g upstream path. */
+    uint64_t frames_4096_9216;  /**< The number of 4096 to 9216 byte frames received on this 10g upstream path. */
+    uint64_t frames_9217_16383; /**< The number of 9217 to 16383 byte frames received on this 10g upstream path. */
+    uint64_t broadcast_frames;  /**< The number of broadcast frames received on this 10g upstream path. */
+    uint64_t data_bytes;        /**< The number of data bytes received on this 10g upstream path. */
+    uint64_t multicast_frames;  /**< The number of multicast frames received on this 10g upstream path. */
+    uint64_t unicast_frames;    /**< The number of unicast frames received on this 10g upstream path. */
+    uint64_t abort_frames;      /**< The number of abort frames received on this 10g upstream path. */
+    uint64_t fcs_error;         /**< The number of bad FCS errors received on this 10g upstream path. */
+    uint64_t oversize_error;    /**< The number of oversize errors received on this 10g upstream path. */
+    uint64_t runt_error;        /**< The number of runt errors received on this 10g upstream path. */
+} bcmolt_ae_path_us_stat_data;
+
+/** Transport message definition for "stat" group of "ae_path_us" object. 
+ */
+typedef struct bcmolt_ae_path_us_stat
+{
+    bcmolt_stat hdr;                    /**< Transport header. */
+    bcmolt_ae_path_us_key key;          /**< Object key. */
+    bcmolt_ae_path_us_stat_data data;   /**< All properties that must be set by the user. */
+} bcmolt_ae_path_us_stat;
+
+/** Structure definition for the "stat_cfg" group of the "ae_path_us" object. 
+ */
+typedef struct bcmolt_ae_path_us_stat_cfg_data
+{
+    bcmolt_stat_alarm_config cfg;   /**< Statistic alarm configuration. */
+} bcmolt_ae_path_us_stat_cfg_data;
+
+/** Transport message definition for "stat_cfg" group of "ae_path_us" object. 
+ */
+typedef struct bcmolt_ae_path_us_stat_cfg
+{
+    bcmolt_stat_cfg hdr;        /**< Transport header. */
+    bcmolt_ae_path_us_key key;  /**< Object key. */
+    bcmolt_ae_path_us_stat_cfg_data data;   /**< All properties that must be set by the user. */
+} bcmolt_ae_path_us_stat_cfg;
+
+/** Structure definition for the "stat_alarm_cleared" group of the "ae_path_us" 
+ * object. 
+ *
+ * Sent when a configured statistic alarm condition is no longer met. 
+ */
+typedef struct bcmolt_ae_path_us_stat_alarm_cleared_data
+{
+    bcmolt_ae_path_us_stat_id stat; /**< Statistic identifier. */
+} bcmolt_ae_path_us_stat_alarm_cleared_data;
+
+/** Transport message definition for "stat_alarm_cleared" group of "ae_path_us" 
+ * object. 
+ */
+typedef struct bcmolt_ae_path_us_stat_alarm_cleared
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_ae_path_us_key key;  /**< Object key. */
+    bcmolt_ae_path_us_stat_alarm_cleared_data data; /**< All properties that must be set by the user. */
+} bcmolt_ae_path_us_stat_alarm_cleared;
+
+/** Structure definition for the "stat_alarm_raised" group of the "ae_path_us" 
+ * object. 
+ *
+ * Sent when a configured statistic alarm condition has been met. 
+ */
+typedef struct bcmolt_ae_path_us_stat_alarm_raised_data
+{
+    bcmolt_ae_path_us_stat_id stat; /**< Statistic identifier. */
+} bcmolt_ae_path_us_stat_alarm_raised_data;
+
+/** Transport message definition for "stat_alarm_raised" group of "ae_path_us" 
+ * object. 
+ */
+typedef struct bcmolt_ae_path_us_stat_alarm_raised
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_ae_path_us_key key;  /**< Object key. */
+    bcmolt_ae_path_us_stat_alarm_raised_data data;  /**< All properties that must be set by the user. */
+} bcmolt_ae_path_us_stat_alarm_raised;
+
+/** Structure definition for the "auto_cfg" group of the "ae_path_us" object. 
+ */
+typedef struct bcmolt_ae_path_us_auto_cfg_data
+{
+    bcmos_bool stat_alarm_cleared;  /**< If true, indications of type "stat_alarm_cleared" will be generated. */
+    bcmos_bool stat_alarm_raised;   /**< If true, indications of type "stat_alarm_raised" will be generated. */
+} bcmolt_ae_path_us_auto_cfg_data;
+
+/** Transport message definition for "auto_cfg" group of "ae_path_us" object. 
+ */
+typedef struct bcmolt_ae_path_us_auto_cfg
+{
+    bcmolt_auto_cfg hdr;                    /**< Transport header. */
+    bcmolt_ae_path_us_key key;              /**< Object key. */
+    bcmolt_ae_path_us_auto_cfg_data data;   /**< All properties that must be set by the user. */
+} bcmolt_ae_path_us_auto_cfg;
+
+/** Structure definition for the "key" group of the "channel" object. 
+ */
+typedef struct bcmolt_channel_key
+{
+    bcmolt_pon_ni pon_ni;   /**< PON network interface. */
+} bcmolt_channel_key;
+
+/** Structure definition for the "cfg" group of the "channel" object. 
+ */
+typedef struct bcmolt_channel_cfg_data
+{
+    bcmolt_operation_control operation_control; /**< Operation control. */
+    uint16_t tol;   /**< Transmit Optical Level. An indication of the current OLT CT transceiver channel launch power into the ODN */
+    bcmolt_system_profile system_profile;           /**< System profile. */
+#define BCMOLT_CHANNEL_CFG_DATA_CHANNEL_PROFILE_LEN 8
+    bcmolt_arr_channel_profile_8 channel_profile;   /**< Channel profile. */
+} bcmolt_channel_cfg_data;
+
+/** Transport message definition for "cfg" group of "channel" object. 
+ */
+typedef struct bcmolt_channel_cfg
+{
+    bcmolt_cfg hdr;                 /**< Transport header. */
+    bcmolt_channel_key key;         /**< Object key. */
+    bcmolt_channel_cfg_data data;   /**< All properties that must be set by the user. */
+} bcmolt_channel_cfg;
+
+/** Structure definition for the "key" group of the "debug" object. 
+ */
+typedef struct bcmolt_debug_key
+{
+    uint32_t reserved;  /**< Reserved (set to 0) */
+} bcmolt_debug_key;
+
+/** Structure definition for the "cfg" group of the "debug" object. 
+ */
+typedef struct bcmolt_debug_cfg_data
+{
+    bcmolt_console_redirection console_redirection;             /**< Log output redirection */
+    uint32_t indications_dropped;                               /**< Number of indications dropped due to congestion / shaping. */
+    uint8_t file_used_percent;                                  /**< DDR log file used percent */
+    bcmolt_api_capture_config api_capture_cfg;                  /**< Configuration for API capture. */
+    bcmolt_api_capture_stats api_capture_stats;                 /**< Statistics on the most recent API capture. */
+    bcmolt_api_capture_buffer_reader api_capture_buffer_read;   /**< Controls what portion of the capture buffer is returned when performing a cfg_get. */
+    bcmolt_u8_list_u32 api_capture_buffer;                      /**< The portion of the capture buffer currently specified by api_capture_buffer_read. */
+} bcmolt_debug_cfg_data;
+
+/** Transport message definition for "cfg" group of "debug" object. 
+ */
+typedef struct bcmolt_debug_cfg
+{
+    bcmolt_cfg hdr;             /**< Transport header. */
+    bcmolt_debug_key key;       /**< Object key. */
+    bcmolt_debug_cfg_data data; /**< All properties that must be set by the user. */
+} bcmolt_debug_cfg;
+
+/** Structure definition for the "cli_output" group of the "debug" object. 
+ *
+ * CLI Output String 
+ */
+typedef struct bcmolt_debug_cli_output_data
+{
+    bcmolt_u8_list_u32 data;    /**< output data */
+} bcmolt_debug_cli_output_data;
+
+/** Transport message definition for "cli_output" group of "debug" object. 
+ */
+typedef struct bcmolt_debug_cli_output
+{
+    bcmolt_auto hdr;                    /**< Transport header. */
+    bcmolt_debug_key key;               /**< Object key. */
+    bcmolt_debug_cli_output_data data;  /**< All properties that must be set by the user. */
+} bcmolt_debug_cli_output;
+
+/** Transport message definition for "file_almost_full" group of "debug" object. 
+ */
+typedef struct bcmolt_debug_file_almost_full
+{
+    bcmolt_auto hdr;        /**< Transport header. */
+    bcmolt_debug_key key;   /**< Object key. */
+} bcmolt_debug_file_almost_full;
+
+/** Structure definition for the "auto_cfg" group of the "debug" object. 
+ */
+typedef struct bcmolt_debug_auto_cfg_data
+{
+    bcmos_bool cli_output;          /**< If true, indications of type "cli_output" will be generated. */
+    bcmos_bool file_almost_full;    /**< If true, indications of type "file_almost_full" will be generated. */
+} bcmolt_debug_auto_cfg_data;
+
+/** Transport message definition for "auto_cfg" group of "debug" object. 
+ */
+typedef struct bcmolt_debug_auto_cfg
+{
+    bcmolt_auto_cfg hdr;                /**< Transport header. */
+    bcmolt_debug_key key;               /**< Object key. */
+    bcmolt_debug_auto_cfg_data data;    /**< All properties that must be set by the user. */
+} bcmolt_debug_auto_cfg;
+
+/** Structure definition for the "cli_input" group of the "debug" object. 
+ *
+ * CLI Input String 
+ */
+typedef struct bcmolt_debug_cli_input_data
+{
+    bcmolt_u8_list_u32 data;    /**< Input String */
+} bcmolt_debug_cli_input_data;
+
+/** Transport message definition for "cli_input" group of "debug" object. 
+ */
+typedef struct bcmolt_debug_cli_input
+{
+    bcmolt_oper hdr;                    /**< Transport header. */
+    bcmolt_debug_key key;               /**< Object key. */
+    bcmolt_debug_cli_input_data data;   /**< All properties that must be set by the user. */
+} bcmolt_debug_cli_input;
+
+/** Transport message definition for "reset_api_capture" group of "debug" 
+ * object. 
+ */
+typedef struct bcmolt_debug_reset_api_capture
+{
+    bcmolt_oper hdr;        /**< Transport header. */
+    bcmolt_debug_key key;   /**< Object key. */
+} bcmolt_debug_reset_api_capture;
+
+/** Transport message definition for "start_api_capture" group of "debug" 
+ * object. 
+ */
+typedef struct bcmolt_debug_start_api_capture
+{
+    bcmolt_oper hdr;        /**< Transport header. */
+    bcmolt_debug_key key;   /**< Object key. */
+} bcmolt_debug_start_api_capture;
+
+/** Transport message definition for "stop_api_capture" group of "debug" object. 
+ */
+typedef struct bcmolt_debug_stop_api_capture
+{
+    bcmolt_oper hdr;        /**< Transport header. */
+    bcmolt_debug_key key;   /**< Object key. */
+} bcmolt_debug_stop_api_capture;
+
+/** Structure definition for the "key" group of the "device" object. 
+ */
+typedef struct bcmolt_device_key
+{
+    uint32_t reserved;  /**< Reserved (set to 0). */
+} bcmolt_device_key;
+
+/** Structure definition for the "cfg" group of the "device" object. 
+ */
+typedef struct bcmolt_device_cfg_data
+{
+    bcmolt_system_mode system_mode; /**< System mode - this must be set by the host when initially provisioning the system.  Setting this also sets the "nni_speed" property, unless it is overridden. */
+    uint32_t keepalive_interval;    /**< Keepalive Interval in Seconds  (0 = Disable) */
+    uint32_t keepalive_tolerance;   /**< How many keepalive messages can be lost before triggering a disconnect sequence  */
+    bcmolt_firmware_sw_version firmware_sw_version;             /**< Firmware SW Version */
+    bcmolt_host_sw_version host_sw_version;                     /**< Host SW Version */
+    bcmolt_device_chip_revision chip_revision;                  /**< Revision of the BCM68620 device. */
+    bcmolt_device_state state;                                  /**< Device state */
+    bcmolt_debug_device_cfg debug;                              /**< Device configuration debug parameters */
+    bcmolt_device_nni_speed nni_speed;                          /**< Speed of the NNI interface.  This is calculated automatically when the "system_mode" property is set, but can be overridden by the host. */
+    bcmolt_ext_irq protection_switching_ext_irq;                /**< The selected external IRQ for protection switching */
+    uint32_t epon_clock_transport_sample_delay;                 /**< The time (in TQ) that it takes from when a pulse is generated at the external source to when we sample it. */
+    bcmolt_indication_shaping indication_shaping;               /**< Shaping / rate limiting for the indication channel. */
+    uint32_t chip_temperature;                                  /**< Current die temperature. */
+    bcmolt_control_state gpon_xgpon_tod_enable;                 /**< GPON/XGPON ToD control state */
+    bcmolt_gpio_pin gpon_xgpon_tod_gpio_pin;                    /**< GPON/XGPON ToD GIO pin */
+    bcmos_bool gpon_xgpon_tod_connected_internally;             /**< GPON/XGPON is ToD internally */
+    bcmolt_str_256 epon_8021_as_tod_format;                     /**< The format of the 802.1AS ToD string. */
+    bcmolt_shaper_mode epon_shaper_mode;                        /**< Controls EPON shaper behavior. */
+    bcmolt_embedded_image_entry_list_u8 embedded_image_list;    /**< List of all file images stored in the OLT. */
+    uint32_t chip_voltage;                      /**< Chip voltage in mV */
+    bcmolt_str_256 epon_tod_string;             /**< The current ToD string to be used for clock transport (EPON only). */
+    bcmolt_xgpon_num_of_onus xgpon_num_of_onus; /**< xgpon num of onus. */
+    bcmos_ipv4_address device_ip_address;       /**< The IP Address of the device */
+    uint16_t device_udp_port;                   /**< The UDP port of the Device */
+    bcmolt_uart_baudrate tod_uart_baudrate;     /**< UART baud rate */
+    uint8_t gpon_xgpon_tod_string_length;       /**< GPON/XGPON ToD string length */
+} bcmolt_device_cfg_data;
+
+/** Transport message definition for "cfg" group of "device" object. 
+ */
+typedef struct bcmolt_device_cfg
+{
+    bcmolt_cfg hdr;                 /**< Transport header. */
+    bcmolt_device_key key;          /**< Object key. */
+    bcmolt_device_cfg_data data;    /**< All properties that must be set by the user. */
+} bcmolt_device_cfg;
+
+/** Structure definition for the "connection_complete" group of the "device" 
+ * object. 
+ *
+ * The host successfully connected to the device.  The device has either been 
+ * reprogrammed with new firmware, or a connection was established with an 
+ * existing device (see the "standalone" field). 
+ */
+typedef struct bcmolt_device_connection_complete_data
+{
+    bcmos_bool standalone;  /**< If true, the device was previously running in standalone mode before this connection was established.  If false, the device was booted from reset with new firmware, etc. */
+} bcmolt_device_connection_complete_data;
+
+/** Transport message definition for "connection_complete" group of "device" 
+ * object. 
+ */
+typedef struct bcmolt_device_connection_complete
+{
+    bcmolt_auto hdr;        /**< Transport header. */
+    bcmolt_device_key key;  /**< Object key. */
+    bcmolt_device_connection_complete_data data;    /**< All properties that must be set by the user. */
+} bcmolt_device_connection_complete;
+
+/** Transport message definition for "connection_established" group of "device" 
+ * object. 
+ */
+typedef struct bcmolt_device_connection_established
+{
+    bcmolt_auto hdr;        /**< Transport header. */
+    bcmolt_device_key key;  /**< Object key. */
+} bcmolt_device_connection_established;
+
+/** Structure definition for the "connection_failure" group of the "device" 
+ * object. 
+ *
+ * The host failed to connect to the device. 
+ */
+typedef struct bcmolt_device_connection_failure_data
+{
+    bcmolt_host_connection_fail_reason reason;  /**< Connection fail reason. */
+} bcmolt_device_connection_failure_data;
+
+/** Transport message definition for "connection_failure" group of "device" 
+ * object. 
+ */
+typedef struct bcmolt_device_connection_failure
+{
+    bcmolt_auto hdr;        /**< Transport header. */
+    bcmolt_device_key key;  /**< Object key. */
+    bcmolt_device_connection_failure_data data; /**< All properties that must be set by the user. */
+} bcmolt_device_connection_failure;
+
+/** Structure definition for the "ddr_test_complete" group of the "device" 
+ * object. 
+ *
+ * The DDR Test has completed 
+ */
+typedef struct bcmolt_device_ddr_test_complete_data
+{
+    bcmolt_ddr_test_completed ddr_test; /**< Results of the DDR Test */
+} bcmolt_device_ddr_test_complete_data;
+
+/** Transport message definition for "ddr_test_complete" group of "device" 
+ * object. 
+ */
+typedef struct bcmolt_device_ddr_test_complete
+{
+    bcmolt_auto hdr;        /**< Transport header. */
+    bcmolt_device_key key;  /**< Object key. */
+    bcmolt_device_ddr_test_complete_data data;  /**< All properties that must be set by the user. */
+} bcmolt_device_ddr_test_complete;
+
+/** Structure definition for the "device_keep_alive" group of the "device" 
+ * object. 
+ *
+ * Keep alive message from the device to the host - used by the device control 
+ * library (not sent to the host application). 
+ */
+typedef struct bcmolt_device_device_keep_alive_data
+{
+    uint32_t sequence_number;   /**< sequence number */
+    uint32_t time_stamp;        /**< time stamp */
+} bcmolt_device_device_keep_alive_data;
+
+/** Transport message definition for "device_keep_alive" group of "device" 
+ * object. 
+ */
+typedef struct bcmolt_device_device_keep_alive
+{
+    bcmolt_auto hdr;        /**< Transport header. */
+    bcmolt_device_key key;  /**< Object key. */
+    bcmolt_device_device_keep_alive_data data;  /**< All properties that must be set by the user. */
+} bcmolt_device_device_keep_alive;
+
+/** Structure definition for the "device_ready" group of the "device" object. 
+ *
+ * Device ready indication used by the device control library (not sent to the 
+ * host application). 
+ */
+typedef struct bcmolt_device_device_ready_data
+{
+    bcmolt_firmware_sw_version firmware_sw_version; /**< Software Version. */
+    bcmolt_system_mode system_mode;                 /**< System Mode. */
+    bcmolt_device_nni_speed nni_speed;              /**< NNI Speed. */
+    bcmolt_device_chip_revision chip_revision;      /**< Chip Revision. */
+    bcmolt_control_state tod_enable;                /**< ToD control. */
+    bcmolt_gpio_pin tod_gpio_pin;                   /**< GPIO pin is used when ToD UART is not connected to the embedded, and TOD value is obtained by the host. */
+} bcmolt_device_device_ready_data;
+
+/** Transport message definition for "device_ready" group of "device" object. 
+ */
+typedef struct bcmolt_device_device_ready
+{
+    bcmolt_auto hdr;                        /**< Transport header. */
+    bcmolt_device_key key;                  /**< Object key. */
+    bcmolt_device_device_ready_data data;   /**< All properties that must be set by the user. */
+} bcmolt_device_device_ready;
+
+/** Transport message definition for "disconnection_complete" group of "device" 
+ * object. 
+ */
+typedef struct bcmolt_device_disconnection_complete
+{
+    bcmolt_auto hdr;        /**< Transport header. */
+    bcmolt_device_key key;  /**< Object key. */
+} bcmolt_device_disconnection_complete;
+
+/** Structure definition for the "image_transfer_complete" group of the "device" 
+ * object. 
+ */
+typedef struct bcmolt_device_image_transfer_complete_data
+{
+    bcmolt_device_image_type image_type;    /**< Image type. */
+    uint32_t block_number;                  /**< Block number. */
+    bcmolt_image_transfer_status status;    /**< Image transfer status. */
+} bcmolt_device_image_transfer_complete_data;
+
+/** Transport message definition for "image_transfer_complete" group of "device" 
+ * object. 
+ */
+typedef struct bcmolt_device_image_transfer_complete
+{
+    bcmolt_auto hdr;        /**< Transport header. */
+    bcmolt_device_key key;  /**< Object key. */
+    bcmolt_device_image_transfer_complete_data data;    /**< All properties that must be set by the user. */
+} bcmolt_device_image_transfer_complete;
+
+/** Structure definition for the "indications_dropped" group of the "device" 
+ * object. 
+ *
+ * Sent when indications are dropped due to congestion / shaping. 
+ */
+typedef struct bcmolt_device_indications_dropped_data
+{
+    uint32_t total_count;   /**< Total number of indications dropped since the system was started. */
+} bcmolt_device_indications_dropped_data;
+
+/** Transport message definition for "indications_dropped" group of "device" 
+ * object. 
+ */
+typedef struct bcmolt_device_indications_dropped
+{
+    bcmolt_auto hdr;        /**< Transport header. */
+    bcmolt_device_key key;  /**< Object key. */
+    bcmolt_device_indications_dropped_data data;    /**< All properties that must be set by the user. */
+} bcmolt_device_indications_dropped;
+
+/** Structure definition for the "sw_error" group of the "device" object. 
+ */
+typedef struct bcmolt_device_sw_error_data
+{
+    bcmolt_str_100 task_name;   /**< task name. */
+    bcmolt_str_100 file_name;   /**< file name. */
+    uint32_t line_number;       /**< line number. */
+    uint8_t pon_ni;             /**< pon_ni. */
+} bcmolt_device_sw_error_data;
+
+/** Transport message definition for "sw_error" group of "device" object. 
+ */
+typedef struct bcmolt_device_sw_error
+{
+    bcmolt_auto hdr;                    /**< Transport header. */
+    bcmolt_device_key key;              /**< Object key. */
+    bcmolt_device_sw_error_data data;   /**< All properties that must be set by the user. */
+} bcmolt_device_sw_error;
+
+/** Structure definition for the "sw_exception" group of the "device" object. 
+ */
+typedef struct bcmolt_device_sw_exception_data
+{
+    uint8_t cpu_id;         /**< CPU ID. */
+    bcmolt_str_2000 text;   /**< text. */
+} bcmolt_device_sw_exception_data;
+
+/** Transport message definition for "sw_exception" group of "device" object. 
+ */
+typedef struct bcmolt_device_sw_exception
+{
+    bcmolt_auto hdr;        /**< Transport header. */
+    bcmolt_device_key key;  /**< Object key. */
+    bcmolt_device_sw_exception_data data;   /**< All properties that must be set by the user. */
+} bcmolt_device_sw_exception;
+
+/** Structure definition for the "auto_cfg" group of the "device" object. 
+ */
+typedef struct bcmolt_device_auto_cfg_data
+{
+    bcmos_bool connection_complete;     /**< If true, indications of type "connection_complete" will be generated. */
+    bcmos_bool connection_established;  /**< If true, indications of type "connection_established" will be generated. */
+    bcmos_bool connection_failure;      /**< If true, indications of type "connection_failure" will be generated. */
+    bcmos_bool ddr_test_complete;       /**< If true, indications of type "ddr_test_complete" will be generated. */
+    bcmos_bool device_keep_alive;       /**< If true, indications of type "device_keep_alive" will be generated. */
+    bcmos_bool device_ready;            /**< If true, indications of type "device_ready" will be generated. */
+    bcmos_bool disconnection_complete;  /**< If true, indications of type "disconnection_complete" will be generated. */
+    bcmos_bool image_transfer_complete; /**< If true, indications of type "image_transfer_complete" will be generated. */
+    bcmos_bool indications_dropped;     /**< If true, indications of type "indications_dropped" will be generated. */
+    bcmos_bool sw_error;                /**< If true, indications of type "sw_error" will be generated. */
+    bcmos_bool sw_exception;            /**< If true, indications of type "sw_exception" will be generated. */
+} bcmolt_device_auto_cfg_data;
+
+/** Transport message definition for "auto_cfg" group of "device" object. 
+ */
+typedef struct bcmolt_device_auto_cfg
+{
+    bcmolt_auto_cfg hdr;                /**< Transport header. */
+    bcmolt_device_key key;              /**< Object key. */
+    bcmolt_device_auto_cfg_data data;   /**< All properties that must be set by the user. */
+} bcmolt_device_auto_cfg;
+
+/** Transport message definition for "connect" group of "device" object. 
+ */
+typedef struct bcmolt_device_connect
+{
+    bcmolt_oper hdr;        /**< Transport header. */
+    bcmolt_device_key key;  /**< Object key. */
+} bcmolt_device_connect;
+
+/** Transport message definition for "disconnect" group of "device" object. 
+ */
+typedef struct bcmolt_device_disconnect
+{
+    bcmolt_oper hdr;        /**< Transport header. */
+    bcmolt_device_key key;  /**< Object key. */
+} bcmolt_device_disconnect;
+
+/** Structure definition for the "host_keep_alive" group of the "device" object. 
+ *
+ * Keep alive message from the host to the device - used by the device control 
+ * library (should not be sent by the host application). 
+ */
+typedef struct bcmolt_device_host_keep_alive_data
+{
+    uint32_t sequence_number;   /**< sequence number */
+    uint32_t time_stamp;        /**< time stamp */
+} bcmolt_device_host_keep_alive_data;
+
+/** Transport message definition for "host_keep_alive" group of "device" object. 
+ */
+typedef struct bcmolt_device_host_keep_alive
+{
+    bcmolt_oper hdr;        /**< Transport header. */
+    bcmolt_device_key key;  /**< Object key. */
+    bcmolt_device_host_keep_alive_data data;    /**< All properties that must be set by the user. */
+} bcmolt_device_host_keep_alive;
+
+/** Structure definition for the "image_transfer_data" group of the "device" 
+ * object. 
+ *
+ * used for transferring the actual data from/to the OLT.   not to be directly 
+ * called by the user. 
+ */
+typedef struct bcmolt_device_image_transfer_data_data
+{
+    uint32_t block_number;          /**< Block number. */
+    bcmos_bool more_data;           /**< Specifies that there are more data to come. */
+    bcmolt_u8_list_u16_hex data;    /**< Data. */
+} bcmolt_device_image_transfer_data_data;
+
+/** Transport message definition for "image_transfer_data" group of "device" 
+ * object. 
+ */
+typedef struct bcmolt_device_image_transfer_data
+{
+    bcmolt_oper hdr;        /**< Transport header. */
+    bcmolt_device_key key;  /**< Object key. */
+    bcmolt_device_image_transfer_data_data data;    /**< All properties that must be set by the user. */
+} bcmolt_device_image_transfer_data;
+
+/** Structure definition for the "image_transfer_start" group of the "device" 
+ * object. 
+ *
+ * This API message informs the OLT of the start of image transfer, and 
+ * provides the information of the file image. 
+ */
+typedef struct bcmolt_device_image_transfer_start_data
+{
+    bcmolt_device_image_type image_type;    /**< File type. */
+    uint32_t image_size;                    /**< Size of the file image.  Ignored for RRQ operation. */
+    uint32_t crc32;             /**< CRC32 checksum of the entire file image. */
+    bcmolt_str_64 image_name;   /**< Name of the file image.  Null-terminated string.  This is required for the DPoE ONU only.  DPoE requires the write request OAM contains the name of the file. */
+} bcmolt_device_image_transfer_start_data;
+
+/** Transport message definition for "image_transfer_start" group of "device" 
+ * object. 
+ */
+typedef struct bcmolt_device_image_transfer_start
+{
+    bcmolt_oper hdr;        /**< Transport header. */
+    bcmolt_device_key key;  /**< Object key. */
+    bcmolt_device_image_transfer_start_data data;   /**< All properties that must be set by the user. */
+} bcmolt_device_image_transfer_start;
+
+/** Structure definition for the "reset" group of the "device" object. 
+ *
+ * Resets the host/device. 
+ */
+typedef struct bcmolt_device_reset_data
+{
+    bcmolt_device_reset_mode mode;  /**< Options to control what should be reset. */
+} bcmolt_device_reset_data;
+
+/** Transport message definition for "reset" group of "device" object. 
+ */
+typedef struct bcmolt_device_reset
+{
+    bcmolt_oper hdr;                /**< Transport header. */
+    bcmolt_device_key key;          /**< Object key. */
+    bcmolt_device_reset_data data;  /**< All properties that must be set by the user. */
+} bcmolt_device_reset;
+
+/** Structure definition for the "run_ddr_test" group of the "device" object. 
+ *
+ * Run a test on one or more of the DDR components. 
+ */
+typedef struct bcmolt_device_run_ddr_test_data
+{
+    bcmos_bool cpu;     /**< Whether or not to test the CPU DDR */
+    bcmos_bool ras_0;   /**< Whether or not to test RAS 0 DDR */
+    bcmos_bool ras_1;   /**< Whether or not to test RAS 1 DDR */
+} bcmolt_device_run_ddr_test_data;
+
+/** Transport message definition for "run_ddr_test" group of "device" object. 
+ */
+typedef struct bcmolt_device_run_ddr_test
+{
+    bcmolt_oper hdr;        /**< Transport header. */
+    bcmolt_device_key key;  /**< Object key. */
+    bcmolt_device_run_ddr_test_data data;   /**< All properties that must be set by the user. */
+} bcmolt_device_run_ddr_test;
+
+/** Transport message definition for "sw_upgrade_activate" group of "device" 
+ * object. 
+ */
+typedef struct bcmolt_device_sw_upgrade_activate
+{
+    bcmolt_oper hdr;        /**< Transport header. */
+    bcmolt_device_key key;  /**< Object key. */
+} bcmolt_device_sw_upgrade_activate;
+
+/** Structure definition for the "key" group of the "epon_denied_link" object. 
+ */
+typedef struct bcmolt_epon_denied_link_key
+{
+    bcmolt_epon_ni epon_ni;         /**< Uniquely identifies the EPON NI containing the link. */
+    bcmos_mac_address mac_address;  /**< The MAC address associated with the EPON link. */
+} bcmolt_epon_denied_link_key;
+
+/** Structure definition for the "cfg" group of the "epon_denied_link" object. 
+ */
+typedef struct bcmolt_epon_denied_link_cfg_data
+{
+    bcmolt_epon_denied_link_alarm_state alarm_state;    /**< The state of the alarms on this link. */
+} bcmolt_epon_denied_link_cfg_data;
+
+/** Transport message definition for "cfg" group of "epon_denied_link" object. 
+ */
+typedef struct bcmolt_epon_denied_link_cfg
+{
+    bcmolt_cfg hdr;                     /**< Transport header. */
+    bcmolt_epon_denied_link_key key;    /**< Object key. */
+    bcmolt_epon_denied_link_cfg_data data;  /**< All properties that must be set by the user. */
+} bcmolt_epon_denied_link_cfg;
+
+/** Structure definition for the "laser_on_off_violation" group of the 
+ * "epon_denied_link" object. 
+ *
+ * This is when a link tries to reigster with an impossible laser on or off 
+ * time. 
+ */
+typedef struct bcmolt_epon_denied_link_laser_on_off_violation_data
+{
+    bcmolt_laser_on_off_status alarm_status;    /**< Alarm Status. */
+} bcmolt_epon_denied_link_laser_on_off_violation_data;
+
+/** Transport message definition for "laser_on_off_violation" group of 
+ * "epon_denied_link" object. 
+ */
+typedef struct bcmolt_epon_denied_link_laser_on_off_violation
+{
+    bcmolt_auto hdr;                    /**< Transport header. */
+    bcmolt_epon_denied_link_key key;    /**< Object key. */
+    bcmolt_epon_denied_link_laser_on_off_violation_data data;   /**< All properties that must be set by the user. */
+} bcmolt_epon_denied_link_laser_on_off_violation;
+
+/** Structure definition for the "llid_pool_empty_violation" group of the 
+ * "epon_denied_link" object. 
+ *
+ * A link tried to register and it there are no LLIDs available. If this 
+ * occurs, it is possible there is an issue with your 'max links' and/or 'Base 
+ * LLID' fields on your RP. 
+ */
+typedef struct bcmolt_epon_denied_link_llid_pool_empty_violation_data
+{
+    bcmolt_status alarm_status; /**< Alarm Status. */
+} bcmolt_epon_denied_link_llid_pool_empty_violation_data;
+
+/** Transport message definition for "llid_pool_empty_violation" group of 
+ * "epon_denied_link" object. 
+ */
+typedef struct bcmolt_epon_denied_link_llid_pool_empty_violation
+{
+    bcmolt_auto hdr;                    /**< Transport header. */
+    bcmolt_epon_denied_link_key key;    /**< Object key. */
+    bcmolt_epon_denied_link_llid_pool_empty_violation_data data;    /**< All properties that must be set by the user. */
+} bcmolt_epon_denied_link_llid_pool_empty_violation;
+
+/** Structure definition for the "max_link_violation" group of the 
+ * "epon_denied_link" object. 
+ *
+ * A link tried to register and it would have put us over the provisioned max 
+ * links for the corresponding EPON NI. 
+ */
+typedef struct bcmolt_epon_denied_link_max_link_violation_data
+{
+    bcmolt_status alarm_status; /**< Alarm Status. */
+} bcmolt_epon_denied_link_max_link_violation_data;
+
+/** Transport message definition for "max_link_violation" group of 
+ * "epon_denied_link" object. 
+ */
+typedef struct bcmolt_epon_denied_link_max_link_violation
+{
+    bcmolt_auto hdr;                    /**< Transport header. */
+    bcmolt_epon_denied_link_key key;    /**< Object key. */
+    bcmolt_epon_denied_link_max_link_violation_data data;   /**< All properties that must be set by the user. */
+} bcmolt_epon_denied_link_max_link_violation;
+
+/** Structure definition for the "overhead_profile_violation" group of the 
+ * "epon_denied_link" object. 
+ *
+ * This is when link tries to register and there are already too many existing 
+ * laser on/off combinations. 
+ */
+typedef struct bcmolt_epon_denied_link_overhead_profile_violation_data
+{
+    bcmolt_status alarm_status; /**< Alarm status. */
+} bcmolt_epon_denied_link_overhead_profile_violation_data;
+
+/** Transport message definition for "overhead_profile_violation" group of 
+ * "epon_denied_link" object. 
+ */
+typedef struct bcmolt_epon_denied_link_overhead_profile_violation
+{
+    bcmolt_auto hdr;                    /**< Transport header. */
+    bcmolt_epon_denied_link_key key;    /**< Object key. */
+    bcmolt_epon_denied_link_overhead_profile_violation_data data;   /**< All properties that must be set by the user. */
+} bcmolt_epon_denied_link_overhead_profile_violation;
+
+/** Structure definition for the "range_violation" group of the 
+ * "epon_denied_link" object. 
+ *
+ * A link tried to register with a range value that was outside of the min/max 
+ * fiber length. 
+ */
+typedef struct bcmolt_epon_denied_link_range_violation_data
+{
+    bcmolt_range_status alarm_status;   /**< Alarm Status. */
+} bcmolt_epon_denied_link_range_violation_data;
+
+/** Transport message definition for "range_violation" group of 
+ * "epon_denied_link" object. 
+ */
+typedef struct bcmolt_epon_denied_link_range_violation
+{
+    bcmolt_auto hdr;                    /**< Transport header. */
+    bcmolt_epon_denied_link_key key;    /**< Object key. */
+    bcmolt_epon_denied_link_range_violation_data data;  /**< All properties that must be set by the user. */
+} bcmolt_epon_denied_link_range_violation;
+
+/** Structure definition for the "rogue_violation" group of the 
+ * "epon_denied_link" object. 
+ *
+ * A Rogue ONU was detected on this link/LLID.  
+ */
+typedef struct bcmolt_epon_denied_link_rogue_violation_data
+{
+    bcmolt_rogue_status alarm_status;   /**< Alarm Status. */
+} bcmolt_epon_denied_link_rogue_violation_data;
+
+/** Transport message definition for "rogue_violation" group of 
+ * "epon_denied_link" object. 
+ */
+typedef struct bcmolt_epon_denied_link_rogue_violation
+{
+    bcmolt_auto hdr;                    /**< Transport header. */
+    bcmolt_epon_denied_link_key key;    /**< Object key. */
+    bcmolt_epon_denied_link_rogue_violation_data data;  /**< All properties that must be set by the user. */
+} bcmolt_epon_denied_link_rogue_violation;
+
+/** Structure definition for the "system_resource_violation" group of the 
+ * "epon_denied_link" object. 
+ *
+ * A link tried to register and we were unable to allocate system resources for 
+ * it. 
+ */
+typedef struct bcmolt_epon_denied_link_system_resource_violation_data
+{
+    bcmolt_status alarm_status; /**< Alarm Status. */
+} bcmolt_epon_denied_link_system_resource_violation_data;
+
+/** Transport message definition for "system_resource_violation" group of 
+ * "epon_denied_link" object. 
+ */
+typedef struct bcmolt_epon_denied_link_system_resource_violation
+{
+    bcmolt_auto hdr;                    /**< Transport header. */
+    bcmolt_epon_denied_link_key key;    /**< Object key. */
+    bcmolt_epon_denied_link_system_resource_violation_data data;    /**< All properties that must be set by the user. */
+} bcmolt_epon_denied_link_system_resource_violation;
+
+/** Structure definition for the "tdm_channels_exhausted" group of the 
+ * "epon_denied_link" object. 
+ */
+typedef struct bcmolt_epon_denied_link_tdm_channels_exhausted_data
+{
+    bcmolt_status alarm_status; /**< Alarm Status. */
+} bcmolt_epon_denied_link_tdm_channels_exhausted_data;
+
+/** Transport message definition for "tdm_channels_exhausted" group of 
+ * "epon_denied_link" object. 
+ */
+typedef struct bcmolt_epon_denied_link_tdm_channels_exhausted
+{
+    bcmolt_auto hdr;                    /**< Transport header. */
+    bcmolt_epon_denied_link_key key;    /**< Object key. */
+    bcmolt_epon_denied_link_tdm_channels_exhausted_data data;   /**< All properties that must be set by the user. */
+} bcmolt_epon_denied_link_tdm_channels_exhausted;
+
+/** Structure definition for the "unknown_link_violation" group of the 
+ * "epon_denied_link" object. 
+ *
+ * A link tried to register while the PON was set to "notify unknown" 
+ * registration behavior and this link was not pre-provisioned. 
+ */
+typedef struct bcmolt_epon_denied_link_unknown_link_violation_data
+{
+    bcmolt_unknown_link_status alarm_status;    /**< Alarm Status. */
+} bcmolt_epon_denied_link_unknown_link_violation_data;
+
+/** Transport message definition for "unknown_link_violation" group of 
+ * "epon_denied_link" object. 
+ */
+typedef struct bcmolt_epon_denied_link_unknown_link_violation
+{
+    bcmolt_auto hdr;                    /**< Transport header. */
+    bcmolt_epon_denied_link_key key;    /**< Object key. */
+    bcmolt_epon_denied_link_unknown_link_violation_data data;   /**< All properties that must be set by the user. */
+} bcmolt_epon_denied_link_unknown_link_violation;
+
+/** Structure definition for the "upstream_bandwidth_violation" group of the 
+ * "epon_denied_link" object. 
+ *
+ * This link failed to register because there was insufficient upstream 
+ * bandwidth available to provide the default UBD. 
+ */
+typedef struct bcmolt_epon_denied_link_upstream_bandwidth_violation_data
+{
+    bcmolt_status alarm_status; /**< Alarm Status. */
+} bcmolt_epon_denied_link_upstream_bandwidth_violation_data;
+
+/** Transport message definition for "upstream_bandwidth_violation" group of 
+ * "epon_denied_link" object. 
+ */
+typedef struct bcmolt_epon_denied_link_upstream_bandwidth_violation
+{
+    bcmolt_auto hdr;                    /**< Transport header. */
+    bcmolt_epon_denied_link_key key;    /**< Object key. */
+    bcmolt_epon_denied_link_upstream_bandwidth_violation_data data; /**< All properties that must be set by the user. */
+} bcmolt_epon_denied_link_upstream_bandwidth_violation;
+
+/** Structure definition for the "auto_cfg" group of the "epon_denied_link" 
+ * object. 
+ */
+typedef struct bcmolt_epon_denied_link_auto_cfg_data
+{
+    bcmos_bool laser_on_off_violation;          /**< If true, indications of type "laser_on_off_violation" will be generated. */
+    bcmos_bool llid_pool_empty_violation;       /**< If true, indications of type "llid_pool_empty_violation" will be generated. */
+    bcmos_bool max_link_violation;              /**< If true, indications of type "max_link_violation" will be generated. */
+    bcmos_bool overhead_profile_violation;      /**< If true, indications of type "overhead_profile_violation" will be generated. */
+    bcmos_bool range_violation;                 /**< If true, indications of type "range_violation" will be generated. */
+    bcmos_bool rogue_violation;                 /**< If true, indications of type "rogue_violation" will be generated. */
+    bcmos_bool system_resource_violation;       /**< If true, indications of type "system_resource_violation" will be generated. */
+    bcmos_bool tdm_channels_exhausted;          /**< If true, indications of type "tdm_channels_exhausted" will be generated. */
+    bcmos_bool unknown_link_violation;          /**< If true, indications of type "unknown_link_violation" will be generated. */
+    bcmos_bool upstream_bandwidth_violation;    /**< If true, indications of type "upstream_bandwidth_violation" will be generated. */
+} bcmolt_epon_denied_link_auto_cfg_data;
+
+/** Transport message definition for "auto_cfg" group of "epon_denied_link" 
+ * object. 
+ */
+typedef struct bcmolt_epon_denied_link_auto_cfg
+{
+    bcmolt_auto_cfg hdr;                        /**< Transport header. */
+    bcmolt_epon_denied_link_key key;            /**< Object key. */
+    bcmolt_epon_denied_link_auto_cfg_data data; /**< All properties that must be set by the user. */
+} bcmolt_epon_denied_link_auto_cfg;
+
+/** Structure definition for the "key" group of the "epon_link" object. 
+ */
+typedef struct bcmolt_epon_link_key
+{
+    bcmolt_epon_ni epon_ni;         /**< Uniquely identifies the EPON NI containing the link. */
+    bcmos_mac_address mac_address;  /**< The MAC address associated with the EPON link. */
+} bcmolt_epon_link_key;
+
+/** Structure definition for the "cfg" group of the "epon_link" object. 
+ */
+typedef struct bcmolt_epon_link_cfg_data
+{
+    bcmolt_epon_link_rate link_rate;            /**< This link's downstream and upstream rate. */
+    bcmolt_epon_link_state_flags state_flags;   /**< EPON link state flags reflect the current status of the link.   Registered state flag is controled by the static registration operation for links on a protected-standby PON. */
+    bcmolt_epon_llid llid;                      /**< LLID associated with this link. */
+    bcmolt_time_quanta laser_on_time_tq;        /**< Laser-on time in time quanta. */
+    bcmolt_time_quanta laser_off_time_tq;       /**< Laser-off time in time quanta. */
+    bcmolt_time_quanta range_value_tq;          /**< Range value used for this link - in time quanta. */
+    bcmolt_meters distance;                     /**< Distance to the ONU (Differs from range value in that this ignores internal delays) */
+    bcmolt_epon_link_alarm_state alarm_state;   /**< The state of the alarms on this link. */
+    bcmolt_epon_tunnel_id tunnel_id;            /**< Upstream and downstream tunnel ID for this link. */
+    bcmolt_epon_onu_id onu_id;                  /**< ONU associated with this EPON link.  A value of 0xFF indicates that the link has not been associated with an ONU. */
+    bcmolt_epon_laser_overhead_parameters min_laser_overhead;   /**< For 1G ONUs ,these values will override the standard values of 32. */
+    bcmolt_epon_key_exchange_config key_exchange_config;        /**< Encryption key exchange configuration for this link. */
+    bcmolt_epon_encryption_config epon_encryption;              /**< Encryption configuration for this link. */
+    bcmolt_epon_link_fec_en fec_enable;                 /**< FEC enable state for this link. */
+    bcmolt_oam_heartbeat_config oam_heartbeat_config;   /**< OAM heartbeat configuration.  This includes the frame to transmit to the link, and the expected frame/mask from the ONU.   */
+    bcmolt_upstream_bandwidth_distribution upstream_bandwidth;  /**< Upstream Bandwidth. */
+    bcmolt_ubd_info ubd_info;           /**< Returns the actual values from the UBD. Useful if you want to see what value the firmware chose for a field set to 'automatic'. */
+    bcmos_bool clock_transport_enable;  /**< Whether or not to enable clock transport on this link. */
+    uint8_t pending_grants;             /**< The number of pending grants. */
+    bcmolt_epon_link_type link_type;    /**< Link Type. */
+} bcmolt_epon_link_cfg_data;
+
+/** Transport message definition for "cfg" group of "epon_link" object. 
+ */
+typedef struct bcmolt_epon_link_cfg
+{
+    bcmolt_cfg hdr;                 /**< Transport header. */
+    bcmolt_epon_link_key key;       /**< Object key. */
+    bcmolt_epon_link_cfg_data data; /**< All properties that must be set by the user. */
+} bcmolt_epon_link_cfg;
+
+/** Structure definition for the "stat" group of the "epon_link" object. 
+ */
+typedef struct bcmolt_epon_link_stat_data
+{
+    uint64_t rx_data_bytes;             /**< The number of data bytes received on this EPON link. */
+    uint64_t rx_data_frames;            /**< The number of data frames received on this EPON link. */
+    uint64_t rx_frames_64;              /**< The number of 64 byte frames received on this EPON Link */
+    uint64_t rx_frames_65_127;          /**< The number of 65 to 127 byte frames received on this EPON Link */
+    uint64_t rx_frames_128_255;         /**< The number of 128 to 255 byte frames received on this EPON Link */
+    uint64_t rx_frames_256_511;         /**< The number of 256 to 511 byte frames received on this EPON Link */
+    uint64_t rx_frames_512_1023;        /**< The number of 512 to 1023 byte frames received on this EPON Link */
+    uint64_t rx_frames_1024_1518;       /**< The number of 1024 to 1518 byte frames received on this EPON Link */
+    uint64_t rx_frames_1519_2047;       /**< The number of 1519 to 2047 byte frames received on this EPON Link */
+    uint64_t rx_frames_2048_4095;       /**< The number of 2048 to 4095 byte frames received on this EPON Link */
+    uint64_t rx_frames_4096_9216;       /**< The number of 4096 to 9216 byte frames received on this EPON Link */
+    uint64_t rx_frames_9217_16383;      /**< The number of 9217 to 16383 byte frames received on this EPON Link */
+    uint64_t rx_oam_bytes;              /**< The number of OAM bytes received on this EPON link. */
+    uint64_t rx_oam_frames;             /**< The number of OAM frames received on this EPON link. */
+    uint64_t rx_mpcp_frames;            /**< The number of MPCP frames received on this EPON link. */
+    uint64_t rx_broadcast_frames;       /**< The number of broadcast frames received on this EPON link. */
+    uint64_t rx_unicast_frames;         /**< The number of unicast frames received on this EPON link. */
+    uint64_t rx_multicast_frames;       /**< The number of multicast frames received on this EPON link. */
+    uint64_t rx_report_frames;          /**< The number of report frames received on this EPON link. */
+    uint64_t rx_fcs_error;              /**< The number of bad FCS errors received on this EPON Link */
+    uint64_t rx_oversize_error;         /**< The number of oversize errors received on this EPON Link */
+    uint64_t rx_runt_error;             /**< The number of runt errors received on this EPON Link */
+    uint64_t rx_line_code_error;        /**< The number of line code errors received on this EPON Link */
+    uint64_t rx_line_code_error_max;    /**< The number of line code errors max received on this EPON Link */
+    uint64_t tx_data_bytes;             /**< The number of data bytes transmitted on this EPON link. */
+    uint64_t tx_data_frames;            /**< The number of data frames transmitted on this EPON link. */
+    uint64_t tx_frames_64;              /**< The number of 64 byte frames transmitted on this EPON Link */
+    uint64_t tx_frames_65_127;          /**< The number of 65 to 127 byte frames transmitted on this EPON Link */
+    uint64_t tx_frames_128_255;         /**< The number of 128 to 255 byte frames transmitted on this EPON Link */
+    uint64_t tx_frames_256_511;         /**< The number of 256 to 511 byte frames transmitted on this EPON Link */
+    uint64_t tx_frames_512_1023;        /**< The number of 512 to 1023 byte frames transmitted on this EPON Link */
+    uint64_t tx_frames_1024_1518;       /**< The number of 1024 to 1518 byte frames transmitted on this EPON Link */
+    uint64_t tx_frames_1519_2047;       /**< The number of 1519 to 2047 byte frames transmitted on this EPON Link */
+    uint64_t tx_frames_2048_4095;       /**< The number of 2048 to 4095 byte frames transmitted on this EPON Link */
+    uint64_t tx_frames_4096_9216;       /**< The number of 4096 to 9216 byte frames transmitted on this EPON Link */
+    uint64_t tx_frames_9217_16383;      /**< The number of 9217 to 16383 byte frames transmitted on this EPON Link */
+    uint64_t tx_oam_bytes;              /**< The number of OAM bytes transmitted on this EPON link. */
+    uint64_t tx_oam_frames;             /**< The number of OAM frames transmitted on this EPON link. */
+    uint64_t tx_mpcp_frames;            /**< The number of MPCP frames transmitted on this EPON link. */
+    uint64_t tx_broadcast_frames;       /**< The number of broadcast frames transmitted on this EPON link. */
+    uint64_t tx_unicast_frames;         /**< The number of unicast frames transmitted on this EPON link. */
+    uint64_t tx_multicast_frames;       /**< The number of multicast frames transmitted on this EPON link. */
+    uint64_t tx_gates;                  /**< The number of gates transmitted on this EPON link. */
+} bcmolt_epon_link_stat_data;
+
+/** Transport message definition for "stat" group of "epon_link" object. 
+ */
+typedef struct bcmolt_epon_link_stat
+{
+    bcmolt_stat hdr;                    /**< Transport header. */
+    bcmolt_epon_link_key key;           /**< Object key. */
+    bcmolt_epon_link_stat_data data;    /**< All properties that must be set by the user. */
+} bcmolt_epon_link_stat;
+
+/** Structure definition for the "stat_cfg" group of the "epon_link" object. 
+ */
+typedef struct bcmolt_epon_link_stat_cfg_data
+{
+    bcmolt_stat_alarm_config cfg;   /**< Statistic alarm configuration. */
+} bcmolt_epon_link_stat_cfg_data;
+
+/** Transport message definition for "stat_cfg" group of "epon_link" object. 
+ */
+typedef struct bcmolt_epon_link_stat_cfg
+{
+    bcmolt_stat_cfg hdr;        /**< Transport header. */
+    bcmolt_epon_link_key key;   /**< Object key. */
+    bcmolt_epon_link_stat_cfg_data data;    /**< All properties that must be set by the user. */
+} bcmolt_epon_link_stat_cfg;
+
+/** Structure definition for the "duplicate_mpcp_registration_request" group of 
+ * the "epon_link" object. 
+ *
+ * A register requested was received for a link with the same MAC address as a 
+ * link that has already registered. 
+ */
+typedef struct bcmolt_epon_link_duplicate_mpcp_registration_request_data
+{
+    bcmolt_time_quanta initial_range_tq;    /**< Range as calculated from the first frame received. */
+    bcmolt_time_quanta current_range_tq;    /**< Range as calculated from the current frame. */
+} bcmolt_epon_link_duplicate_mpcp_registration_request_data;
+
+/** Transport message definition for "duplicate_mpcp_registration_request" group 
+ * of "epon_link" object. 
+ */
+typedef struct bcmolt_epon_link_duplicate_mpcp_registration_request
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_epon_link_key key;   /**< Object key. */
+    bcmolt_epon_link_duplicate_mpcp_registration_request_data data; /**< All properties that must be set by the user. */
+} bcmolt_epon_link_duplicate_mpcp_registration_request;
+
+/** Transport message definition for "encryption_enabled" group of "epon_link" 
+ * object. 
+ */
+typedef struct bcmolt_epon_link_encryption_enabled
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_epon_link_key key;   /**< Object key. */
+} bcmolt_epon_link_encryption_enabled;
+
+/** Structure definition for the "key_exchange_failure" group of the "epon_link" 
+ * object. 
+ *
+ * The OLT failed to receive an updated encryption key within the expected time 
+ * period after encryption key exchange has been initiated. 
+ */
+typedef struct bcmolt_epon_link_key_exchange_failure_data
+{
+    bcmolt_status alarm_status; /**< alarm status. */
+} bcmolt_epon_link_key_exchange_failure_data;
+
+/** Transport message definition for "key_exchange_failure" group of "epon_link" 
+ * object. 
+ */
+typedef struct bcmolt_epon_link_key_exchange_failure
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_epon_link_key key;   /**< Object key. */
+    bcmolt_epon_link_key_exchange_failure_data data;    /**< All properties that must be set by the user. */
+} bcmolt_epon_link_key_exchange_failure;
+
+/** Transport message definition for "key_exchange_started" group of "epon_link" 
+ * object. 
+ */
+typedef struct bcmolt_epon_link_key_exchange_started
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_epon_link_key key;   /**< Object key. */
+} bcmolt_epon_link_key_exchange_started;
+
+/** Transport message definition for "key_exchange_stopped" group of "epon_link" 
+ * object. 
+ */
+typedef struct bcmolt_epon_link_key_exchange_stopped
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_epon_link_key key;   /**< Object key. */
+} bcmolt_epon_link_key_exchange_stopped;
+
+/** Transport message definition for "link_deleted" group of "epon_link" object. 
+ */
+typedef struct bcmolt_epon_link_link_deleted
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_epon_link_key key;   /**< Object key. */
+} bcmolt_epon_link_link_deleted;
+
+/** Structure definition for the "link_speed_mismatch" group of the "epon_link" 
+ * object. 
+ *
+ * Host will receive this indication if a link registers then attempts to 
+ * register later at a different speed, or if the link registers at a different 
+ * speed than the speed with which it was pre-provisioned. 
+ */
+typedef struct bcmolt_epon_link_link_speed_mismatch_data
+{
+    bcmolt_epon_link_rate previous_rate;    /**< PON rate link initially registered */
+    bcmolt_epon_link_rate current_rate;     /**< PON rate link is currently attempting to register at */
+} bcmolt_epon_link_link_speed_mismatch_data;
+
+/** Transport message definition for "link_speed_mismatch" group of "epon_link" 
+ * object. 
+ */
+typedef struct bcmolt_epon_link_link_speed_mismatch
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_epon_link_key key;   /**< Object key. */
+    bcmolt_epon_link_link_speed_mismatch_data data; /**< All properties that must be set by the user. */
+} bcmolt_epon_link_link_speed_mismatch;
+
+/** Transport message definition for "mpcp_deregistered" group of "epon_link" 
+ * object. 
+ */
+typedef struct bcmolt_epon_link_mpcp_deregistered
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_epon_link_key key;   /**< Object key. */
+} bcmolt_epon_link_mpcp_deregistered;
+
+/** Structure definition for the "mpcp_discovered" group of the "epon_link" 
+ * object. 
+ *
+ * A link has completed MPCP link registration. 
+ */
+typedef struct bcmolt_epon_link_mpcp_discovered_data
+{
+    bcmolt_epon_link_info link_info;    /**< Information associated with the discovered link. */
+} bcmolt_epon_link_mpcp_discovered_data;
+
+/** Transport message definition for "mpcp_discovered" group of "epon_link" 
+ * object. 
+ */
+typedef struct bcmolt_epon_link_mpcp_discovered
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_epon_link_key key;   /**< Object key. */
+    bcmolt_epon_link_mpcp_discovered_data data; /**< All properties that must be set by the user. */
+} bcmolt_epon_link_mpcp_discovered;
+
+/** Transport message definition for "mpcp_reg_ack_timeout" group of "epon_link" 
+ * object. 
+ */
+typedef struct bcmolt_epon_link_mpcp_reg_ack_timeout
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_epon_link_key key;   /**< Object key. */
+} bcmolt_epon_link_mpcp_reg_ack_timeout;
+
+/** Structure definition for the "mpcp_report_timeout" group of the "epon_link" 
+ * object. 
+ *
+ * The provisioned limit between reports for the specified link has been 
+ * exceeded.  This link will be de-registered, and the alarm_status set when 
+ * this occurs.  The alarm_status will be cleared when the link attempts to 
+ * register again. 
+ */
+typedef struct bcmolt_epon_link_mpcp_report_timeout_data
+{
+    bcmolt_status alarm_status; /**< Alarm Status. */
+} bcmolt_epon_link_mpcp_report_timeout_data;
+
+/** Transport message definition for "mpcp_report_timeout" group of "epon_link" 
+ * object. 
+ */
+typedef struct bcmolt_epon_link_mpcp_report_timeout
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_epon_link_key key;   /**< Object key. */
+    bcmolt_epon_link_mpcp_report_timeout_data data; /**< All properties that must be set by the user. */
+} bcmolt_epon_link_mpcp_report_timeout;
+
+/** Structure definition for the "oam_keepalive_timeout" group of the 
+ * "epon_link" object. 
+ *
+ * The provisioned time limit between receiving upstream info frames has been 
+ * exceeded.  Normally an ONU will reset its OAM state machine when this 
+ * occurrs and the host must re-negotiate OAM and reprovision the link. 
+ */
+typedef struct bcmolt_epon_link_oam_keepalive_timeout_data
+{
+    bcmolt_status alarm_status; /**< Alarm Status. */
+} bcmolt_epon_link_oam_keepalive_timeout_data;
+
+/** Transport message definition for "oam_keepalive_timeout" group of 
+ * "epon_link" object. 
+ */
+typedef struct bcmolt_epon_link_oam_keepalive_timeout
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_epon_link_key key;   /**< Object key. */
+    bcmolt_epon_link_oam_keepalive_timeout_data data;   /**< All properties that must be set by the user. */
+} bcmolt_epon_link_oam_keepalive_timeout;
+
+/** Transport message definition for "oam_keepalive_timer_started" group of 
+ * "epon_link" object. 
+ */
+typedef struct bcmolt_epon_link_oam_keepalive_timer_started
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_epon_link_key key;   /**< Object key. */
+} bcmolt_epon_link_oam_keepalive_timer_started;
+
+/** Transport message definition for "oam_keepalive_timer_stopped" group of 
+ * "epon_link" object. 
+ */
+typedef struct bcmolt_epon_link_oam_keepalive_timer_stopped
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_epon_link_key key;   /**< Object key. */
+} bcmolt_epon_link_oam_keepalive_timer_stopped;
+
+/** Structure definition for the "preprovisioned_link_created" group of the 
+ * "epon_link" object. 
+ *
+ * Raised after an 'add_link' operation on an EPON NI completes successfully 
+ */
+typedef struct bcmolt_epon_link_preprovisioned_link_created_data
+{
+    bcmolt_epon_link_info link_info;    /**< Information associated with the link. */
+} bcmolt_epon_link_preprovisioned_link_created_data;
+
+/** Transport message definition for "preprovisioned_link_created" group of 
+ * "epon_link" object. 
+ */
+typedef struct bcmolt_epon_link_preprovisioned_link_created
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_epon_link_key key;   /**< Object key. */
+    bcmolt_epon_link_preprovisioned_link_created_data data; /**< All properties that must be set by the user. */
+} bcmolt_epon_link_preprovisioned_link_created;
+
+/** Structure definition for the "protection_switch_occurred" group of the 
+ * "epon_link" object. 
+ *
+ * The link has undergone a protection switch event. 
+ */
+typedef struct bcmolt_epon_link_protection_switch_occurred_data
+{
+    bcmolt_epon_protection_state protection_status; /**< The link's post-switch role (working or standby). */
+    bcmolt_time_quanta range_value_tq;              /**< Current range value in time quanta. */
+} bcmolt_epon_link_protection_switch_occurred_data;
+
+/** Transport message definition for "protection_switch_occurred" group of 
+ * "epon_link" object. 
+ */
+typedef struct bcmolt_epon_link_protection_switch_occurred
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_epon_link_key key;   /**< Object key. */
+    bcmolt_epon_link_protection_switch_occurred_data data;  /**< All properties that must be set by the user. */
+} bcmolt_epon_link_protection_switch_occurred;
+
+/** Structure definition for the "range_value_changed" group of the "epon_link" 
+ * object. 
+ *
+ * Indication sent when a range value has been changed. 
+ */
+typedef struct bcmolt_epon_link_range_value_changed_data
+{
+    bcmolt_time_quanta range_value_tq;  /**< New range value. */
+} bcmolt_epon_link_range_value_changed_data;
+
+/** Transport message definition for "range_value_changed" group of "epon_link" 
+ * object. 
+ */
+typedef struct bcmolt_epon_link_range_value_changed
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_epon_link_key key;   /**< Object key. */
+    bcmolt_epon_link_range_value_changed_data data; /**< All properties that must be set by the user. */
+} bcmolt_epon_link_range_value_changed;
+
+/** Transport message definition for "rerange_failure" group of "epon_link" 
+ * object. 
+ */
+typedef struct bcmolt_epon_link_rerange_failure
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_epon_link_key key;   /**< Object key. */
+} bcmolt_epon_link_rerange_failure;
+
+/** Structure definition for the "stat_alarm_cleared" group of the "epon_link" 
+ * object. 
+ *
+ * Sent when a configured statistic alarm condition is no longer met. 
+ */
+typedef struct bcmolt_epon_link_stat_alarm_cleared_data
+{
+    bcmolt_epon_link_stat_id stat;  /**< Statistic identifier. */
+} bcmolt_epon_link_stat_alarm_cleared_data;
+
+/** Transport message definition for "stat_alarm_cleared" group of "epon_link" 
+ * object. 
+ */
+typedef struct bcmolt_epon_link_stat_alarm_cleared
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_epon_link_key key;   /**< Object key. */
+    bcmolt_epon_link_stat_alarm_cleared_data data;  /**< All properties that must be set by the user. */
+} bcmolt_epon_link_stat_alarm_cleared;
+
+/** Structure definition for the "stat_alarm_raised" group of the "epon_link" 
+ * object. 
+ *
+ * Sent when a configured statistic alarm condition has been met. 
+ */
+typedef struct bcmolt_epon_link_stat_alarm_raised_data
+{
+    bcmolt_epon_link_stat_id stat;  /**< Statistic identifier. */
+} bcmolt_epon_link_stat_alarm_raised_data;
+
+/** Transport message definition for "stat_alarm_raised" group of "epon_link" 
+ * object. 
+ */
+typedef struct bcmolt_epon_link_stat_alarm_raised
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_epon_link_key key;   /**< Object key. */
+    bcmolt_epon_link_stat_alarm_raised_data data;   /**< All properties that must be set by the user. */
+} bcmolt_epon_link_stat_alarm_raised;
+
+/** Transport message definition for "static_registration_done" group of 
+ * "epon_link" object. 
+ */
+typedef struct bcmolt_epon_link_static_registration_done
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_epon_link_key key;   /**< Object key. */
+} bcmolt_epon_link_static_registration_done;
+
+/** Structure definition for the "auto_cfg" group of the "epon_link" object. 
+ */
+typedef struct bcmolt_epon_link_auto_cfg_data
+{
+    bcmos_bool duplicate_mpcp_registration_request; /**< If true, indications of type "duplicate_mpcp_registration_request" will be generated. */
+    bcmos_bool encryption_enabled;                  /**< If true, indications of type "encryption_enabled" will be generated. */
+    bcmos_bool key_exchange_failure;                /**< If true, indications of type "key_exchange_failure" will be generated. */
+    bcmos_bool key_exchange_started;                /**< If true, indications of type "key_exchange_started" will be generated. */
+    bcmos_bool key_exchange_stopped;                /**< If true, indications of type "key_exchange_stopped" will be generated. */
+    bcmos_bool link_deleted;                        /**< If true, indications of type "link_deleted" will be generated. */
+    bcmos_bool link_speed_mismatch;                 /**< If true, indications of type "link_speed_mismatch" will be generated. */
+    bcmos_bool mpcp_deregistered;                   /**< If true, indications of type "mpcp_deregistered" will be generated. */
+    bcmos_bool mpcp_discovered;                     /**< If true, indications of type "mpcp_discovered" will be generated. */
+    bcmos_bool mpcp_reg_ack_timeout;                /**< If true, indications of type "mpcp_reg_ack_timeout" will be generated. */
+    bcmos_bool mpcp_report_timeout;                 /**< If true, indications of type "mpcp_report_timeout" will be generated. */
+    bcmos_bool oam_keepalive_timeout;               /**< If true, indications of type "oam_keepalive_timeout" will be generated. */
+    bcmos_bool oam_keepalive_timer_started;         /**< If true, indications of type "oam_keepalive_timer_started" will be generated. */
+    bcmos_bool oam_keepalive_timer_stopped;         /**< If true, indications of type "oam_keepalive_timer_stopped" will be generated. */
+    bcmos_bool preprovisioned_link_created;         /**< If true, indications of type "preprovisioned_link_created" will be generated. */
+    bcmos_bool protection_switch_occurred;          /**< If true, indications of type "protection_switch_occurred" will be generated. */
+    bcmos_bool range_value_changed;                 /**< If true, indications of type "range_value_changed" will be generated. */
+    bcmos_bool rerange_failure;                     /**< If true, indications of type "rerange_failure" will be generated. */
+    bcmos_bool stat_alarm_cleared;                  /**< If true, indications of type "stat_alarm_cleared" will be generated. */
+    bcmos_bool stat_alarm_raised;                   /**< If true, indications of type "stat_alarm_raised" will be generated. */
+    bcmos_bool static_registration_done;            /**< If true, indications of type "static_registration_done" will be generated. */
+} bcmolt_epon_link_auto_cfg_data;
+
+/** Transport message definition for "auto_cfg" group of "epon_link" object. 
+ */
+typedef struct bcmolt_epon_link_auto_cfg
+{
+    bcmolt_auto_cfg hdr;                    /**< Transport header. */
+    bcmolt_epon_link_key key;               /**< Object key. */
+    bcmolt_epon_link_auto_cfg_data data;    /**< All properties that must be set by the user. */
+} bcmolt_epon_link_auto_cfg;
+
+/** Transport message definition for "delete_link" group of "epon_link" object. 
+ */
+typedef struct bcmolt_epon_link_delete_link
+{
+    bcmolt_oper hdr;            /**< Transport header. */
+    bcmolt_epon_link_key key;   /**< Object key. */
+} bcmolt_epon_link_delete_link;
+
+/** Transport message definition for "force_rediscovery" group of "epon_link" 
+ * object. 
+ */
+typedef struct bcmolt_epon_link_force_rediscovery
+{
+    bcmolt_oper hdr;            /**< Transport header. */
+    bcmolt_epon_link_key key;   /**< Object key. */
+} bcmolt_epon_link_force_rediscovery;
+
+/** Structure definition for the "key_exchange_start" group of the "epon_link" 
+ * object. 
+ *
+ * Apply the corresponding provisioning for 'epon_link.key_exchange_config' 
+ * against this link and then start key exchange timer with the given period. 
+ */
+typedef struct bcmolt_epon_link_key_exchange_start_data
+{
+    uint16_t period;    /**< Key exchange period in seconds. */
+} bcmolt_epon_link_key_exchange_start_data;
+
+/** Transport message definition for "key_exchange_start" group of "epon_link" 
+ * object. 
+ */
+typedef struct bcmolt_epon_link_key_exchange_start
+{
+    bcmolt_oper hdr;            /**< Transport header. */
+    bcmolt_epon_link_key key;   /**< Object key. */
+    bcmolt_epon_link_key_exchange_start_data data;  /**< All properties that must be set by the user. */
+} bcmolt_epon_link_key_exchange_start;
+
+/** Transport message definition for "key_exchange_stop" group of "epon_link" 
+ * object. 
+ */
+typedef struct bcmolt_epon_link_key_exchange_stop
+{
+    bcmolt_oper hdr;            /**< Transport header. */
+    bcmolt_epon_link_key key;   /**< Object key. */
+} bcmolt_epon_link_key_exchange_stop;
+
+/** Structure definition for the "oam_keepalive_timer_start" group of the 
+ * "epon_link" object. 
+ *
+ * Start the OAM keepalive timer against this link. 
+ */
+typedef struct bcmolt_epon_link_oam_keepalive_timer_start_data
+{
+    uint16_t send_period;   /**< The period at which to send OAM info frames (in seconds). */
+} bcmolt_epon_link_oam_keepalive_timer_start_data;
+
+/** Transport message definition for "oam_keepalive_timer_start" group of 
+ * "epon_link" object. 
+ */
+typedef struct bcmolt_epon_link_oam_keepalive_timer_start
+{
+    bcmolt_oper hdr;            /**< Transport header. */
+    bcmolt_epon_link_key key;   /**< Object key. */
+    bcmolt_epon_link_oam_keepalive_timer_start_data data;   /**< All properties that must be set by the user. */
+} bcmolt_epon_link_oam_keepalive_timer_start;
+
+/** Transport message definition for "oam_keepalive_timer_stop" group of 
+ * "epon_link" object. 
+ */
+typedef struct bcmolt_epon_link_oam_keepalive_timer_stop
+{
+    bcmolt_oper hdr;            /**< Transport header. */
+    bcmolt_epon_link_key key;   /**< Object key. */
+} bcmolt_epon_link_oam_keepalive_timer_stop;
+
+/** Structure definition for the "static_registration" group of the "epon_link" 
+ * object. 
+ *
+ * Statically registers the logical link 
+ */
+typedef struct bcmolt_epon_link_static_registration_data
+{
+    bcmolt_time_quanta laseron_time_tq;     /**< Laser-on time in time quanta.\ */
+    bcmolt_time_quanta laseroff_time_tq;    /**< Laser-off time in time quanta. */
+    bcmolt_time_quanta range_value_tq;      /**< Range value used for this link - in time quanta. */
+    uint8_t pending_grants;                 /**< The number of pending grants. */
+} bcmolt_epon_link_static_registration_data;
+
+/** Transport message definition for "static_registration" group of "epon_link" 
+ * object. 
+ */
+typedef struct bcmolt_epon_link_static_registration
+{
+    bcmolt_oper hdr;            /**< Transport header. */
+    bcmolt_epon_link_key key;   /**< Object key. */
+    bcmolt_epon_link_static_registration_data data; /**< All properties that must be set by the user. */
+} bcmolt_epon_link_static_registration;
+
+/** Structure definition for the "inject_frame" group of the "epon_link" object. 
+ *
+ * Send an arbitrary frame across the specified link. 
+ */
+typedef struct bcmolt_epon_link_inject_frame_data
+{
+    bcmolt_ethernet_frame_unmasked frame;   /**< Complete contents of the frame beginning with the DA up through but not including the CRC. */
+} bcmolt_epon_link_inject_frame_data;
+
+/** Transport message definition for "inject_frame" group of "epon_link" object. 
+ */
+typedef struct bcmolt_epon_link_inject_frame
+{
+    bcmolt_proxy hdr;           /**< Transport header. */
+    bcmolt_epon_link_key key;   /**< Object key. */
+    bcmolt_epon_link_inject_frame_data data;    /**< All properties that must be set by the user. */
+} bcmolt_epon_link_inject_frame;
+
+/** Structure definition for the "frame_captured" group of the "epon_link" 
+ * object. 
+ *
+ * A frame matching host-specified criteria was received. 
+ */
+typedef struct bcmolt_epon_link_frame_captured_data
+{
+    bcmolt_u8_list_u32 frame;   /**< Contents of the frame. */
+} bcmolt_epon_link_frame_captured_data;
+
+/** Transport message definition for "frame_captured" group of "epon_link" 
+ * object. 
+ */
+typedef struct bcmolt_epon_link_frame_captured
+{
+    bcmolt_proxy_rx hdr;                        /**< Transport header. */
+    bcmolt_epon_link_key key;                   /**< Object key. */
+    bcmolt_epon_link_frame_captured_data data;  /**< All properties that must be set by the user. */
+} bcmolt_epon_link_frame_captured;
+
+/** Structure definition for the "key" group of the "epon_ni" object. 
+ */
+typedef struct bcmolt_epon_ni_key
+{
+    bcmolt_epon_ni epon_ni; /**< The index of a specific EPON NI instance as seen by the host. */
+} bcmolt_epon_ni_key;
+
+/** Structure definition for the "cfg" group of the "epon_ni" object. 
+ */
+typedef struct bcmolt_epon_ni_cfg_data
+{
+    bcmos_mac_address mac_address;      /**< The MAC address used for all frames generated by the OLT on the PON.  This value must be set before EPON_NI is first enabled, and cannot be changed while the EPON_NI is enabled. */
+    bcmolt_epon_ni_en_state epon_ni_en; /**< Indicates the enable state of the EPON NI. */
+    bcmolt_registration_behavior registration_behavior; /**< Determines how registration requests from unknown links are handled.  Set to 'Notify Unknown' to force all links to be pre-provisioned.  If in 'Notify Unknown' mode, MPCP Registration of an unknown link will be denied, and a 'White List Violation" will be sent to the host. If set to 'Automatic', the link registers fully without host interaction.  */
+    uint16_t mtu_1g;                        /**< Maximum frame size (including FCS) on the 1G path. This attribute cannot be changed on an enabled EPON_NI. This attribute cannot be an odd value. */
+    uint16_t mtu_10g;                       /**< Maximum frame size (including FCS) on the 10G path. This attribute cannot be changed on an enabled EPON_NI. This attribute cannot be an odd value. */
+    bcmolt_meters minimum_fiber_length;     /**< The minimum fiber length, in meters, at which we expect to find an ONU. Notes: The difference between the minimum and maximum fiber length cannot exceed 100 km. This attribute cannot be changed on an enabled EPON_NI. Some ONUs can register at distances that are less than the provisioned minimum. */
+    bcmolt_meters maximum_fiber_length;     /**< The maximum fiber length, in meters, at which we expect to find an ONU. Notes: The difference between the minimum and maximum fiber length cannot exceed 100 km. This attribute cannot be changed on an enabled EPON_NI. Some ONUs can register at distances that are greater than the provisioned maximum. */
+    bcmolt_time_quanta grant_spacing_tq;    /**< The dead time on the PON between upstream bursts.  This attribute cannot be changed on an enabled EPON_NI. */
+    bcmolt_epon_logical_link_options epon_logical_link_options; /**< Configuration related to EPON links registration and reporting. This value cannot be changed on an enabled EPON_NI. */
+    uint32_t mpcp_discovery_period_ms;              /**< Period of MPCP discovery windows.  In this time period, one discovery gate will be sent for every enabled RP.  The discovery gates will be spaced equally across the time period. */
+    bcmolt_epon_ni_alarm_state alarm_state;         /**< The state of the alarms on this EPON NI. */
+    bcmolt_macaddress_list_u32_max_2048 all_links;  /**< List of all links on the EPON NI. */
+    bcmolt_epon_ni_encryption_cfg encryption_cfg;   /**< Encryption configuration that applies to the EPON NI as a whole. */
+    bcmolt_epon_protection_switching_configuration protection_switching_cfg;    /**< Protection switching configuration. */
+    bcmolt_epon_clock_transport_configuration clock_transport_cfg;              /**< Clock transport configuration. */
+#define BCMOLT_EPON_NI_CFG_DATA_DROPDOWN_WEIGHTS_LEN    7
+    bcmolt_arr_u16_7 dropdown_weights;                  /**< The solicited scheduling drop down weights for priorities 0-6 (percentages relative to that priority). Priority 7 has no drop-down, as it is the lowest priority. The drop-down weights are how much bandwidth to allocate to solicited schedulers at the next lower priority level (even when elements at this level are still active).  This is NOT the percentage allocated to the drop down, it is the ratio between a priority and its dropdown */
+#define BCMOLT_EPON_NI_CFG_DATA_APPROXIMATE_SOLICITED_USAGE_LEN 8
+    bcmolt_arr_bounds_8 approximate_solicited_usage;    /**< The approximate percentage of the PON time necessary to schedule all elements at or above each priority. */
+    uint32_t approximate_tdm_usage;                     /**< The approximate percentage of the PON time necessary to accomodate all TDM grants. */
+    uint16_t no_reports_soak_time;                      /**< Period of time after last report received to send no reports alarm (in ms). */
+    bcmolt_pon_aggregate_shaper pon_aggregate_shaper;   /**< PON Aggregate Shaper. */
+#define BCMOLT_EPON_NI_CFG_DATA_ESTIMATED_PON_LATENCY_TQ_LEN    8
+    bcmolt_arr_bounds_8 estimated_pon_latency_tq;       /**< The estimated time between when the OLT receives a non-zero report from an ONU and when the OLT will generate a grant to that ONU for each priority level. */
+    bcmolt_epon_onu_upgrade_params onu_upgrade_params;  /**< ONU upgrade params. */
+    bcmos_bool auto_rogue_detect_10g_en;                /**< Enable 10G Autonomous Rogue Dection during discovery window */
+    bcmos_bool auto_rogue_detect_1g_en;                 /**< Enable 1G Autonomous Rogue Dection during discovery window */
+    uint8_t auto_rogue_detect_10g_threshold;            /**< Set threshold for number of SyncPatterns received without a Burst Delimiter to trigger the fault. */
+} bcmolt_epon_ni_cfg_data;
+
+/** Transport message definition for "cfg" group of "epon_ni" object. 
+ */
+typedef struct bcmolt_epon_ni_cfg
+{
+    bcmolt_cfg hdr;                 /**< Transport header. */
+    bcmolt_epon_ni_key key;         /**< Object key. */
+    bcmolt_epon_ni_cfg_data data;   /**< All properties that must be set by the user. */
+} bcmolt_epon_ni_cfg;
+
+/** Transport message definition for "auto_rogue_scan_10g_failure" group of 
+ * "epon_ni" object. 
+ */
+typedef struct bcmolt_epon_ni_auto_rogue_scan_10g_failure
+{
+    bcmolt_auto hdr;        /**< Transport header. */
+    bcmolt_epon_ni_key key; /**< Object key. */
+} bcmolt_epon_ni_auto_rogue_scan_10g_failure;
+
+/** Transport message definition for "auto_rogue_scan_1g_failure" group of 
+ * "epon_ni" object. 
+ */
+typedef struct bcmolt_epon_ni_auto_rogue_scan_1g_failure
+{
+    bcmolt_auto hdr;        /**< Transport header. */
+    bcmolt_epon_ni_key key; /**< Object key. */
+} bcmolt_epon_ni_auto_rogue_scan_1g_failure;
+
+/** Structure definition for the "llid_quarantined" group of the "epon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_epon_ni_llid_quarantined_data
+{
+    bcmolt_epon_llid llid;              /**< LLID. */
+    bcmolt_epon_link_rate link_rate;    /**< Link Rate. */
+    bcmos_mac_address link_mac;         /**< Link MAC. */
+    bcmolt_time_quanta range_value_tq;  /**< Range value in time quanta. */
+} bcmolt_epon_ni_llid_quarantined_data;
+
+/** Transport message definition for "llid_quarantined" group of "epon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_epon_ni_llid_quarantined
+{
+    bcmolt_auto hdr;        /**< Transport header. */
+    bcmolt_epon_ni_key key; /**< Object key. */
+    bcmolt_epon_ni_llid_quarantined_data data;  /**< All properties that must be set by the user. */
+} bcmolt_epon_ni_llid_quarantined;
+
+/** Structure definition for the "mpcp_timestamp_changed" group of the "epon_ni" 
+ * object. 
+ *
+ * A clock transport pulse was received at the given MPCP timestamp. 
+ */
+typedef struct bcmolt_epon_ni_mpcp_timestamp_changed_data
+{
+    uint32_t mpcp_timestamp;    /**< The MPCP time at which the pulse was received. */
+} bcmolt_epon_ni_mpcp_timestamp_changed_data;
+
+/** Transport message definition for "mpcp_timestamp_changed" group of "epon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_epon_ni_mpcp_timestamp_changed
+{
+    bcmolt_auto hdr;        /**< Transport header. */
+    bcmolt_epon_ni_key key; /**< Object key. */
+    bcmolt_epon_ni_mpcp_timestamp_changed_data data;    /**< All properties that must be set by the user. */
+} bcmolt_epon_ni_mpcp_timestamp_changed;
+
+/** Structure definition for the "no_reports" group of the "epon_ni" object. 
+ *
+ * Loss of all reports on all links on the EPON NI 
+ */
+typedef struct bcmolt_epon_ni_no_reports_data
+{
+    bcmolt_status alarm_status; /**< Alarm Status. */
+} bcmolt_epon_ni_no_reports_data;
+
+/** Transport message definition for "no_reports" group of "epon_ni" object. 
+ */
+typedef struct bcmolt_epon_ni_no_reports
+{
+    bcmolt_auto hdr;                        /**< Transport header. */
+    bcmolt_epon_ni_key key;                 /**< Object key. */
+    bcmolt_epon_ni_no_reports_data data;    /**< All properties that must be set by the user. */
+} bcmolt_epon_ni_no_reports;
+
+/** Structure definition for the "onu_upgrade_complete" group of the "epon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_epon_ni_onu_upgrade_complete_data
+{
+    bcmos_bool status;  /**< Success or failure.  Against entire upgrade process. */
+    bcmolt_epon_onu_upgrade_status_list_u32 list_of_failed_entities;    /**< List of ONU-IDs the upgrade failed for. */
+} bcmolt_epon_ni_onu_upgrade_complete_data;
+
+/** Transport message definition for "onu_upgrade_complete" group of "epon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_epon_ni_onu_upgrade_complete
+{
+    bcmolt_auto hdr;        /**< Transport header. */
+    bcmolt_epon_ni_key key; /**< Object key. */
+    bcmolt_epon_ni_onu_upgrade_complete_data data;  /**< All properties that must be set by the user. */
+} bcmolt_epon_ni_onu_upgrade_complete;
+
+/** Transport message definition for "rerange_failure" group of "epon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_epon_ni_rerange_failure
+{
+    bcmolt_auto hdr;        /**< Transport header. */
+    bcmolt_epon_ni_key key; /**< Object key. */
+} bcmolt_epon_ni_rerange_failure;
+
+/** Structure definition for the "rogue_scan_complete" group of the "epon_ni" 
+ * object. 
+ *
+ * Indciation that a scan is complete, any error is also returned.  
+ */
+typedef struct bcmolt_epon_ni_rogue_scan_complete_data
+{
+    bcmolt_rogue_scan_status return_ind_status; /**< Status of completed scan. */
+} bcmolt_epon_ni_rogue_scan_complete_data;
+
+/** Transport message definition for "rogue_scan_complete" group of "epon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_epon_ni_rogue_scan_complete
+{
+    bcmolt_auto hdr;        /**< Transport header. */
+    bcmolt_epon_ni_key key; /**< Object key. */
+    bcmolt_epon_ni_rogue_scan_complete_data data;   /**< All properties that must be set by the user. */
+} bcmolt_epon_ni_rogue_scan_complete;
+
+/** Structure definition for the "rssi_measurement_completed" group of the 
+ * "epon_ni" object. 
+ */
+typedef struct bcmolt_epon_ni_rssi_measurement_completed_data
+{
+    bcmolt_result status;       /**< status. */
+    bcmolt_epon_llid llid;      /**< LLID. */
+    bcmos_mac_address link_mac; /**< Link MAC . */
+} bcmolt_epon_ni_rssi_measurement_completed_data;
+
+/** Transport message definition for "rssi_measurement_completed" group of 
+ * "epon_ni" object. 
+ */
+typedef struct bcmolt_epon_ni_rssi_measurement_completed
+{
+    bcmolt_auto hdr;        /**< Transport header. */
+    bcmolt_epon_ni_key key; /**< Object key. */
+    bcmolt_epon_ni_rssi_measurement_completed_data data;    /**< All properties that must be set by the user. */
+} bcmolt_epon_ni_rssi_measurement_completed;
+
+/** Structure definition for the "state_change_completed" group of the "epon_ni" 
+ * object. 
+ *
+ * Sent after a 'set_epon_ni_en_state' operation has completed. 
+ */
+typedef struct bcmolt_epon_ni_state_change_completed_data
+{
+    bcmolt_epon_ni_en_state new_state;  /**< New EPON NI enable state. */
+} bcmolt_epon_ni_state_change_completed_data;
+
+/** Transport message definition for "state_change_completed" group of "epon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_epon_ni_state_change_completed
+{
+    bcmolt_auto hdr;        /**< Transport header. */
+    bcmolt_epon_ni_key key; /**< Object key. */
+    bcmolt_epon_ni_state_change_completed_data data;    /**< All properties that must be set by the user. */
+} bcmolt_epon_ni_state_change_completed;
+
+/** Structure definition for the "auto_cfg" group of the "epon_ni" object. 
+ */
+typedef struct bcmolt_epon_ni_auto_cfg_data
+{
+    bcmos_bool auto_rogue_scan_10g_failure; /**< If true, indications of type "auto_rogue_scan_10g_failure" will be generated. */
+    bcmos_bool auto_rogue_scan_1g_failure;  /**< If true, indications of type "auto_rogue_scan_1g_failure" will be generated. */
+    bcmos_bool llid_quarantined;            /**< If true, indications of type "llid_quarantined" will be generated. */
+    bcmos_bool mpcp_timestamp_changed;      /**< If true, indications of type "mpcp_timestamp_changed" will be generated. */
+    bcmos_bool no_reports;                  /**< If true, indications of type "no_reports" will be generated. */
+    bcmos_bool onu_upgrade_complete;        /**< If true, indications of type "onu_upgrade_complete" will be generated. */
+    bcmos_bool rerange_failure;             /**< If true, indications of type "rerange_failure" will be generated. */
+    bcmos_bool rogue_scan_complete;         /**< If true, indications of type "rogue_scan_complete" will be generated. */
+    bcmos_bool rssi_measurement_completed;  /**< If true, indications of type "rssi_measurement_completed" will be generated. */
+    bcmos_bool state_change_completed;      /**< If true, indications of type "state_change_completed" will be generated. */
+} bcmolt_epon_ni_auto_cfg_data;
+
+/** Transport message definition for "auto_cfg" group of "epon_ni" object. 
+ */
+typedef struct bcmolt_epon_ni_auto_cfg
+{
+    bcmolt_auto_cfg hdr;                /**< Transport header. */
+    bcmolt_epon_ni_key key;             /**< Object key. */
+    bcmolt_epon_ni_auto_cfg_data data;  /**< All properties that must be set by the user. */
+} bcmolt_epon_ni_auto_cfg;
+
+/** Structure definition for the "add_link" group of the "epon_ni" object. 
+ *
+ * Pre-provision an EPON link. 
+ */
+typedef struct bcmolt_epon_ni_add_link_data
+{
+    bcmos_mac_address mac_address;  /**< The MAC address of the EPON link. */
+    bcmolt_epon_link_rate rate;     /**< Rate of link to pre-provision. */
+} bcmolt_epon_ni_add_link_data;
+
+/** Transport message definition for "add_link" group of "epon_ni" object. 
+ */
+typedef struct bcmolt_epon_ni_add_link
+{
+    bcmolt_oper hdr;                    /**< Transport header. */
+    bcmolt_epon_ni_key key;             /**< Object key. */
+    bcmolt_epon_ni_add_link_data data;  /**< All properties that must be set by the user. */
+} bcmolt_epon_ni_add_link;
+
+/** Structure definition for the "add_multicast_link" group of the "epon_ni" 
+ * object. 
+ *
+ * Pre-provision an EPON multicast link. 
+ */
+typedef struct bcmolt_epon_ni_add_multicast_link_data
+{
+    bcmos_mac_address mac_address;  /**< The MAC address of the EPON link. */
+    bcmolt_epon_link_rate rate;     /**< Rate of link to pre-provision. */
+} bcmolt_epon_ni_add_multicast_link_data;
+
+/** Transport message definition for "add_multicast_link" group of "epon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_epon_ni_add_multicast_link
+{
+    bcmolt_oper hdr;        /**< Transport header. */
+    bcmolt_epon_ni_key key; /**< Object key. */
+    bcmolt_epon_ni_add_multicast_link_data data;    /**< All properties that must be set by the user. */
+} bcmolt_epon_ni_add_multicast_link;
+
+/** Structure definition for the "add_protected_standby_link" group of the 
+ * "epon_ni" object. 
+ *
+ * Adds a protected standby link.  Once it has been created, the link is 
+ * considered "standby" for the puposes of protection switching. 
+ */
+typedef struct bcmolt_epon_ni_add_protected_standby_link_data
+{
+    bcmos_mac_address mac_address;              /**< The MAC address of the EPON link. */
+    bcmolt_epon_link_info working_link_info;    /**< Link info for the associated working link. */
+} bcmolt_epon_ni_add_protected_standby_link_data;
+
+/** Transport message definition for "add_protected_standby_link" group of 
+ * "epon_ni" object. 
+ */
+typedef struct bcmolt_epon_ni_add_protected_standby_link
+{
+    bcmolt_oper hdr;        /**< Transport header. */
+    bcmolt_epon_ni_key key; /**< Object key. */
+    bcmolt_epon_ni_add_protected_standby_link_data data;    /**< All properties that must be set by the user. */
+} bcmolt_epon_ni_add_protected_standby_link;
+
+/** Structure definition for the "issue_rssi_grant" group of the "epon_ni" 
+ * object. 
+ *
+ * Issues an RSSI grant to read RX Power 
+ */
+typedef struct bcmolt_epon_ni_issue_rssi_grant_data
+{
+    bcmos_mac_address granted_link; /**< Logical link to grant, which should either be associated with a particular unicast link of interest on the PON or, 0 for idle power measurement. 0 will use a link that will not result in upstream transmission by any device on the PON. */
+    uint16_t trigger_width;         /**< RSSI Trigger Width (Tw) in ns, Desired width of RSSI Trigger based on the Optical Module Specifications. */
+    uint16_t trigger_delay;         /**< RSSI Trigger Delay(Td), in ns, for this link to meet the (Td) delay timing requirement of the Optical Module Specifications. */
+    uint16_t sample_period;         /**< Sample period in us, internal I2C hold/prohibit time where access to device is not allowed. */
+} bcmolt_epon_ni_issue_rssi_grant_data;
+
+/** Transport message definition for "issue_rssi_grant" group of "epon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_epon_ni_issue_rssi_grant
+{
+    bcmolt_oper hdr;        /**< Transport header. */
+    bcmolt_epon_ni_key key; /**< Object key. */
+    bcmolt_epon_ni_issue_rssi_grant_data data;  /**< All properties that must be set by the user. */
+} bcmolt_epon_ni_issue_rssi_grant;
+
+/** Structure definition for the "protection_switching_apply_rerange_delta" 
+ * group of the "epon_ni" object. 
+ */
+typedef struct bcmolt_epon_ni_protection_switching_apply_rerange_delta_data
+{
+    uint32_t rerange_delta; /**< Re-range delta. */
+} bcmolt_epon_ni_protection_switching_apply_rerange_delta_data;
+
+/** Transport message definition for "protection_switching_apply_rerange_delta" 
+ * group of "epon_ni" object. 
+ */
+typedef struct bcmolt_epon_ni_protection_switching_apply_rerange_delta
+{
+    bcmolt_oper hdr;        /**< Transport header. */
+    bcmolt_epon_ni_key key; /**< Object key. */
+    bcmolt_epon_ni_protection_switching_apply_rerange_delta_data data;  /**< All properties that must be set by the user. */
+} bcmolt_epon_ni_protection_switching_apply_rerange_delta;
+
+/** Structure definition for the "rogue_llid_scan" group of the "epon_ni" 
+ * object. 
+ *
+ * Issue a request to scan all LLIDs or a specific LLID on a PON 
+ */
+typedef struct bcmolt_epon_ni_rogue_llid_scan_data
+{
+    bcmos_bool mode;        /**< True = Scan all LLIDS on the PON */
+    bcmolt_epon_llid llid;  /**< Specific LLID to scan or 0 to scan all when mode is ALL */
+} bcmolt_epon_ni_rogue_llid_scan_data;
+
+/** Transport message definition for "rogue_llid_scan" group of "epon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_epon_ni_rogue_llid_scan
+{
+    bcmolt_oper hdr;        /**< Transport header. */
+    bcmolt_epon_ni_key key; /**< Object key. */
+    bcmolt_epon_ni_rogue_llid_scan_data data;   /**< All properties that must be set by the user. */
+} bcmolt_epon_ni_rogue_llid_scan;
+
+/** Structure definition for the "set_epon_ni_en_state" group of the "epon_ni" 
+ * object. 
+ *
+ * Set the EPON NI enable state. 
+ */
+typedef struct bcmolt_epon_ni_set_epon_ni_en_state_data
+{
+    bcmolt_epon_ni_en_state new_state;  /**< New EPON NI enable state. */
+} bcmolt_epon_ni_set_epon_ni_en_state_data;
+
+/** Transport message definition for "set_epon_ni_en_state" group of "epon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_epon_ni_set_epon_ni_en_state
+{
+    bcmolt_oper hdr;        /**< Transport header. */
+    bcmolt_epon_ni_key key; /**< Object key. */
+    bcmolt_epon_ni_set_epon_ni_en_state_data data;  /**< All properties that must be set by the user. */
+} bcmolt_epon_ni_set_epon_ni_en_state;
+
+/** Structure definition for the "start_onu_upgrade" group of the "epon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_epon_ni_start_onu_upgrade_data
+{
+    bcmolt_macaddress_list_u32 list_of_onu_ids; /**< List of ONUs to upgrade the firmware. */
+} bcmolt_epon_ni_start_onu_upgrade_data;
+
+/** Transport message definition for "start_onu_upgrade" group of "epon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_epon_ni_start_onu_upgrade
+{
+    bcmolt_oper hdr;        /**< Transport header. */
+    bcmolt_epon_ni_key key; /**< Object key. */
+    bcmolt_epon_ni_start_onu_upgrade_data data; /**< All properties that must be set by the user. */
+} bcmolt_epon_ni_start_onu_upgrade;
+
+/** Structure definition for the "key" group of the "epon_onu_10g_us" object. 
+ */
+typedef struct bcmolt_epon_onu_10g_us_key
+{
+    bcmolt_epon_ni epon_ni;     /**< EPON NI with which this ONU interface is associated. */
+    bcmolt_epon_onu_id onu_id;  /**< Unique identifier of the ONU interface within its EPON NI. */
+} bcmolt_epon_onu_10g_us_key;
+
+/** Structure definition for the "cfg" group of the "epon_onu_10g_us" object. 
+ */
+typedef struct bcmolt_epon_onu_10g_us_cfg_data
+{
+    bcmolt_macaddress_list_u32_max_2048 all_links;  /**< List of MAC Addresses for all links on the ONU Id. */
+} bcmolt_epon_onu_10g_us_cfg_data;
+
+/** Transport message definition for "cfg" group of "epon_onu_10g_us" object. 
+ */
+typedef struct bcmolt_epon_onu_10g_us_cfg
+{
+    bcmolt_cfg hdr;                 /**< Transport header. */
+    bcmolt_epon_onu_10g_us_key key; /**< Object key. */
+    bcmolt_epon_onu_10g_us_cfg_data data;   /**< All properties that must be set by the user. */
+} bcmolt_epon_onu_10g_us_cfg;
+
+/** Structure definition for the "stat" group of the "epon_onu_10g_us" object. 
+ */
+typedef struct bcmolt_epon_onu_10g_us_stat_data
+{
+    uint64_t fec_code_words_total;          /**< FEC stats code words total */
+    uint64_t fec_code_words_decode_fails;   /**< FEC stats code words decode fails */
+    uint64_t fec_zeroes_corrected;          /**< FEC stats zeros corrected */
+    uint64_t fec_ones_corrected;            /**< FEC stats ones corected */
+} bcmolt_epon_onu_10g_us_stat_data;
+
+/** Transport message definition for "stat" group of "epon_onu_10g_us" object. 
+ */
+typedef struct bcmolt_epon_onu_10g_us_stat
+{
+    bcmolt_stat hdr;                        /**< Transport header. */
+    bcmolt_epon_onu_10g_us_key key;         /**< Object key. */
+    bcmolt_epon_onu_10g_us_stat_data data;  /**< All properties that must be set by the user. */
+} bcmolt_epon_onu_10g_us_stat;
+
+/** Structure definition for the "stat_cfg" group of the "epon_onu_10g_us" 
+ * object. 
+ */
+typedef struct bcmolt_epon_onu_10g_us_stat_cfg_data
+{
+    bcmolt_stat_alarm_config cfg;   /**< Statistic alarm configuration. */
+} bcmolt_epon_onu_10g_us_stat_cfg_data;
+
+/** Transport message definition for "stat_cfg" group of "epon_onu_10g_us" 
+ * object. 
+ */
+typedef struct bcmolt_epon_onu_10g_us_stat_cfg
+{
+    bcmolt_stat_cfg hdr;            /**< Transport header. */
+    bcmolt_epon_onu_10g_us_key key; /**< Object key. */
+    bcmolt_epon_onu_10g_us_stat_cfg_data data;  /**< All properties that must be set by the user. */
+} bcmolt_epon_onu_10g_us_stat_cfg;
+
+/** Structure definition for the "stat_alarm_cleared" group of the 
+ * "epon_onu_10g_us" object. 
+ *
+ * Sent when a configured statistic alarm condition is no longer met. 
+ */
+typedef struct bcmolt_epon_onu_10g_us_stat_alarm_cleared_data
+{
+    bcmolt_epon_onu_10g_us_stat_id stat;    /**< Statistic identifier. */
+} bcmolt_epon_onu_10g_us_stat_alarm_cleared_data;
+
+/** Transport message definition for "stat_alarm_cleared" group of 
+ * "epon_onu_10g_us" object. 
+ */
+typedef struct bcmolt_epon_onu_10g_us_stat_alarm_cleared
+{
+    bcmolt_auto hdr;                /**< Transport header. */
+    bcmolt_epon_onu_10g_us_key key; /**< Object key. */
+    bcmolt_epon_onu_10g_us_stat_alarm_cleared_data data;    /**< All properties that must be set by the user. */
+} bcmolt_epon_onu_10g_us_stat_alarm_cleared;
+
+/** Structure definition for the "stat_alarm_raised" group of the 
+ * "epon_onu_10g_us" object. 
+ *
+ * Sent when a configured statistic alarm condition has been met. 
+ */
+typedef struct bcmolt_epon_onu_10g_us_stat_alarm_raised_data
+{
+    bcmolt_epon_onu_10g_us_stat_id stat;    /**< Statistic identifier. */
+} bcmolt_epon_onu_10g_us_stat_alarm_raised_data;
+
+/** Transport message definition for "stat_alarm_raised" group of 
+ * "epon_onu_10g_us" object. 
+ */
+typedef struct bcmolt_epon_onu_10g_us_stat_alarm_raised
+{
+    bcmolt_auto hdr;                /**< Transport header. */
+    bcmolt_epon_onu_10g_us_key key; /**< Object key. */
+    bcmolt_epon_onu_10g_us_stat_alarm_raised_data data; /**< All properties that must be set by the user. */
+} bcmolt_epon_onu_10g_us_stat_alarm_raised;
+
+/** Structure definition for the "auto_cfg" group of the "epon_onu_10g_us" 
+ * object. 
+ */
+typedef struct bcmolt_epon_onu_10g_us_auto_cfg_data
+{
+    bcmos_bool stat_alarm_cleared;  /**< If true, indications of type "stat_alarm_cleared" will be generated. */
+    bcmos_bool stat_alarm_raised;   /**< If true, indications of type "stat_alarm_raised" will be generated. */
+} bcmolt_epon_onu_10g_us_auto_cfg_data;
+
+/** Transport message definition for "auto_cfg" group of "epon_onu_10g_us" 
+ * object. 
+ */
+typedef struct bcmolt_epon_onu_10g_us_auto_cfg
+{
+    bcmolt_auto_cfg hdr;                        /**< Transport header. */
+    bcmolt_epon_onu_10g_us_key key;             /**< Object key. */
+    bcmolt_epon_onu_10g_us_auto_cfg_data data;  /**< All properties that must be set by the user. */
+} bcmolt_epon_onu_10g_us_auto_cfg;
+
+/** Structure definition for the "key" group of the "epon_onu_1g_us" object. 
+ */
+typedef struct bcmolt_epon_onu_1g_us_key
+{
+    bcmolt_epon_ni epon_ni;     /**< EPON NI with which this ONU interface is associated. */
+    bcmolt_epon_onu_id onu_id;  /**< Unique identifier of the ONU interface within its EPON NI. */
+} bcmolt_epon_onu_1g_us_key;
+
+/** Structure definition for the "cfg" group of the "epon_onu_1g_us" object. 
+ */
+typedef struct bcmolt_epon_onu_1g_us_cfg_data
+{
+    bcmolt_macaddress_list_u32 all_links;   /**< List of MAC Addresses for all links on the ONU Id. */
+} bcmolt_epon_onu_1g_us_cfg_data;
+
+/** Transport message definition for "cfg" group of "epon_onu_1g_us" object. 
+ */
+typedef struct bcmolt_epon_onu_1g_us_cfg
+{
+    bcmolt_cfg hdr;                 /**< Transport header. */
+    bcmolt_epon_onu_1g_us_key key;  /**< Object key. */
+    bcmolt_epon_onu_1g_us_cfg_data data;    /**< All properties that must be set by the user. */
+} bcmolt_epon_onu_1g_us_cfg;
+
+/** Structure definition for the "stat" group of the "epon_onu_1g_us" object. 
+ */
+typedef struct bcmolt_epon_onu_1g_us_stat_data
+{
+    uint64_t good_frames;           /**< Good Frame Count, including nonFEC and FEC */
+    uint64_t good_bytes;            /**< Good Byte Count, including nonFEC and FEC */
+    uint64_t oversz_frames;         /**< Oversized frame count (frames larger than 2000 bytes) */
+    uint64_t non_fec_good_frames;   /**< Non FEC Good Frame Count */
+    uint64_t non_fec_good_bytes;    /**< Non FEC Good Byte Count */
+    uint64_t fec_good_frames;       /**< FEC Good Frame Count */
+    uint64_t fec_good_bytes;        /**< FEC Good Byte Count */
+    uint64_t fec_frames_exc_errs;   /**< FEC Frames which exceeded 8 symbol errors */
+    uint64_t fec_blks_no_errs;      /**< FEC Blocks with no errors */
+    uint64_t fec_blks_corr_errs;    /**< FEC Blocks with correctable errors */
+    uint64_t fec_blks_uncorr_errs;  /**< FEC Blocks with uncorrectable errors */
+    uint64_t fec_corr_bytes;        /**< FEC Corrected Bytes/Symbols */
+    uint64_t fec_corr_zeroes;       /**< FEC Corrected Zeroes, 8b domain */
+    uint64_t fec_corr_ones;         /**< FEC Corrected Ones, 8b domain */
+    uint64_t undersz_frames;        /**< Undersize frame count (frames less than 64 bytes) */
+    uint64_t errorsz_frames;        /**< Errored frame  */
+} bcmolt_epon_onu_1g_us_stat_data;
+
+/** Transport message definition for "stat" group of "epon_onu_1g_us" object. 
+ */
+typedef struct bcmolt_epon_onu_1g_us_stat
+{
+    bcmolt_stat hdr;                        /**< Transport header. */
+    bcmolt_epon_onu_1g_us_key key;          /**< Object key. */
+    bcmolt_epon_onu_1g_us_stat_data data;   /**< All properties that must be set by the user. */
+} bcmolt_epon_onu_1g_us_stat;
+
+/** Structure definition for the "stat_cfg" group of the "epon_onu_1g_us" 
+ * object. 
+ */
+typedef struct bcmolt_epon_onu_1g_us_stat_cfg_data
+{
+    bcmolt_stat_alarm_config cfg;   /**< Statistic alarm configuration. */
+} bcmolt_epon_onu_1g_us_stat_cfg_data;
+
+/** Transport message definition for "stat_cfg" group of "epon_onu_1g_us" 
+ * object. 
+ */
+typedef struct bcmolt_epon_onu_1g_us_stat_cfg
+{
+    bcmolt_stat_cfg hdr;            /**< Transport header. */
+    bcmolt_epon_onu_1g_us_key key;  /**< Object key. */
+    bcmolt_epon_onu_1g_us_stat_cfg_data data;   /**< All properties that must be set by the user. */
+} bcmolt_epon_onu_1g_us_stat_cfg;
+
+/** Structure definition for the "stat_alarm_cleared" group of the 
+ * "epon_onu_1g_us" object. 
+ *
+ * Sent when a configured statistic alarm condition is no longer met. 
+ */
+typedef struct bcmolt_epon_onu_1g_us_stat_alarm_cleared_data
+{
+    bcmolt_epon_onu_1g_us_stat_id stat; /**< Statistic identifier. */
+} bcmolt_epon_onu_1g_us_stat_alarm_cleared_data;
+
+/** Transport message definition for "stat_alarm_cleared" group of 
+ * "epon_onu_1g_us" object. 
+ */
+typedef struct bcmolt_epon_onu_1g_us_stat_alarm_cleared
+{
+    bcmolt_auto hdr;                /**< Transport header. */
+    bcmolt_epon_onu_1g_us_key key;  /**< Object key. */
+    bcmolt_epon_onu_1g_us_stat_alarm_cleared_data data; /**< All properties that must be set by the user. */
+} bcmolt_epon_onu_1g_us_stat_alarm_cleared;
+
+/** Structure definition for the "stat_alarm_raised" group of the 
+ * "epon_onu_1g_us" object. 
+ *
+ * Sent when a configured statistic alarm condition has been met. 
+ */
+typedef struct bcmolt_epon_onu_1g_us_stat_alarm_raised_data
+{
+    bcmolt_epon_onu_1g_us_stat_id stat; /**< Statistic identifier. */
+} bcmolt_epon_onu_1g_us_stat_alarm_raised_data;
+
+/** Transport message definition for "stat_alarm_raised" group of 
+ * "epon_onu_1g_us" object. 
+ */
+typedef struct bcmolt_epon_onu_1g_us_stat_alarm_raised
+{
+    bcmolt_auto hdr;                /**< Transport header. */
+    bcmolt_epon_onu_1g_us_key key;  /**< Object key. */
+    bcmolt_epon_onu_1g_us_stat_alarm_raised_data data;  /**< All properties that must be set by the user. */
+} bcmolt_epon_onu_1g_us_stat_alarm_raised;
+
+/** Structure definition for the "auto_cfg" group of the "epon_onu_1g_us" 
+ * object. 
+ */
+typedef struct bcmolt_epon_onu_1g_us_auto_cfg_data
+{
+    bcmos_bool stat_alarm_cleared;  /**< If true, indications of type "stat_alarm_cleared" will be generated. */
+    bcmos_bool stat_alarm_raised;   /**< If true, indications of type "stat_alarm_raised" will be generated. */
+} bcmolt_epon_onu_1g_us_auto_cfg_data;
+
+/** Transport message definition for "auto_cfg" group of "epon_onu_1g_us" 
+ * object. 
+ */
+typedef struct bcmolt_epon_onu_1g_us_auto_cfg
+{
+    bcmolt_auto_cfg hdr;                        /**< Transport header. */
+    bcmolt_epon_onu_1g_us_key key;              /**< Object key. */
+    bcmolt_epon_onu_1g_us_auto_cfg_data data;   /**< All properties that must be set by the user. */
+} bcmolt_epon_onu_1g_us_auto_cfg;
+
+/** Structure definition for the "key" group of the "epon_path_10g_ds" object. 
+ */
+typedef struct bcmolt_epon_path_10g_ds_key
+{
+    bcmolt_epon_ni epon_ni; /**< EPON NI associated with this 10G downstream path. */
+} bcmolt_epon_path_10g_ds_key;
+
+/** Structure definition for the "cfg" group of the "epon_path_10g_ds" object. 
+ */
+typedef struct bcmolt_epon_path_10g_ds_cfg_data
+{
+    bcmolt_epon_fec_en_state fec_state; /**< FEC enable state for the 10G downstream path on this EPON NI.  This attribute cannot be changed while the EPON_NI is enabled. */
+    bcmolt_prbs_generator_config prbs_generator;    /**< DS PRBS generator configuration */
+} bcmolt_epon_path_10g_ds_cfg_data;
+
+/** Transport message definition for "cfg" group of "epon_path_10g_ds" object. 
+ */
+typedef struct bcmolt_epon_path_10g_ds_cfg
+{
+    bcmolt_cfg hdr;                     /**< Transport header. */
+    bcmolt_epon_path_10g_ds_key key;    /**< Object key. */
+    bcmolt_epon_path_10g_ds_cfg_data data;  /**< All properties that must be set by the user. */
+} bcmolt_epon_path_10g_ds_cfg;
+
+/** Structure definition for the "stat" group of the "epon_path_10g_ds" object. 
+ */
+typedef struct bcmolt_epon_path_10g_ds_stat_data
+{
+    uint64_t bytes;             /**< The number of bytes transmitted on this 10g downstream path. */
+    uint64_t frames;            /**< The number of frames transmitted on this 10g downstream path. */
+    uint64_t frames_64;         /**< The number of 64 byte frames transmitted on this 10g downstream path. */
+    uint64_t frames_65_127;     /**< The number of 65 to 127 byte frames transmitted on this 10g downstream path. */
+    uint64_t frames_128_255;    /**< The number of 128 to 255 byte frames transmitted on this 10g downstream path. */
+    uint64_t frames_256_511;    /**< The number of 256 to 511 byte frames transmitted on this 10g downstream path. */
+    uint64_t frames_512_1023;   /**< The number of 512 to 1023 byte frames transmitted on this 10g downstream path. */
+    uint64_t frames_1024_1518;  /**< The number of 1024 to 1518 byte frames transmitted on this 10g downstream path. */
+    uint64_t frames_1519_2047;  /**< The number of 1519 to 2047 byte frames transmitted on this 10g downstream path. */
+    uint64_t frames_2048_4095;  /**< The number of 2048 to 4095 byte frames transmitted on this 10g downstream path. */
+    uint64_t frames_4096_9216;  /**< The number of 4096 to 9216 byte frames transmitted on this 10g downstream path. */
+    uint64_t frames_9217_16383; /**< The number of 9217 to 16383 byte frames transmitted on this 10g downstream path. */
+    uint64_t broadcast_frames;  /**< The number of broadcast frames transmitted on this 10g downstream path. */
+    uint64_t data_bytes;        /**< The number of data bytes transmitted on this 10g downstream path. */
+    uint64_t multicast_frames;  /**< The number of multicast frames transmitted on this 10g downstream path. */
+    uint64_t unicast_frames;    /**< The number of unicast frames transmitted on this 10g downstream path. */
+    uint64_t oam_bytes;         /**< Number of OAM bytes transmitted on this 10g downstream path. */
+    uint64_t oam_frames;        /**< Number of OAM frames transmitted on this 10g downstream path. */
+    uint64_t gate_frames;       /**< Number of gate frames transmitted on this 10g downstream path. */
+    uint64_t mpcp_frames;       /**< Number of MPCP frames transmitted on this 10g downstream path. */
+    uint64_t abort_frames;      /**< Number of abort frames transmitted on this 10g downstream path. */
+} bcmolt_epon_path_10g_ds_stat_data;
+
+/** Transport message definition for "stat" group of "epon_path_10g_ds" object. 
+ */
+typedef struct bcmolt_epon_path_10g_ds_stat
+{
+    bcmolt_stat hdr;                    /**< Transport header. */
+    bcmolt_epon_path_10g_ds_key key;    /**< Object key. */
+    bcmolt_epon_path_10g_ds_stat_data data; /**< All properties that must be set by the user. */
+} bcmolt_epon_path_10g_ds_stat;
+
+/** Structure definition for the "stat_cfg" group of the "epon_path_10g_ds" 
+ * object. 
+ */
+typedef struct bcmolt_epon_path_10g_ds_stat_cfg_data
+{
+    bcmolt_stat_alarm_config cfg;   /**< Statistic alarm configuration. */
+} bcmolt_epon_path_10g_ds_stat_cfg_data;
+
+/** Transport message definition for "stat_cfg" group of "epon_path_10g_ds" 
+ * object. 
+ */
+typedef struct bcmolt_epon_path_10g_ds_stat_cfg
+{
+    bcmolt_stat_cfg hdr;                        /**< Transport header. */
+    bcmolt_epon_path_10g_ds_key key;            /**< Object key. */
+    bcmolt_epon_path_10g_ds_stat_cfg_data data; /**< All properties that must be set by the user. */
+} bcmolt_epon_path_10g_ds_stat_cfg;
+
+/** Structure definition for the "stat_alarm_cleared" group of the 
+ * "epon_path_10g_ds" object. 
+ *
+ * Sent when a configured statistic alarm condition is no longer met. 
+ */
+typedef struct bcmolt_epon_path_10g_ds_stat_alarm_cleared_data
+{
+    bcmolt_epon_path_10g_ds_stat_id stat;   /**< Statistic identifier. */
+} bcmolt_epon_path_10g_ds_stat_alarm_cleared_data;
+
+/** Transport message definition for "stat_alarm_cleared" group of 
+ * "epon_path_10g_ds" object. 
+ */
+typedef struct bcmolt_epon_path_10g_ds_stat_alarm_cleared
+{
+    bcmolt_auto hdr;                    /**< Transport header. */
+    bcmolt_epon_path_10g_ds_key key;    /**< Object key. */
+    bcmolt_epon_path_10g_ds_stat_alarm_cleared_data data;   /**< All properties that must be set by the user. */
+} bcmolt_epon_path_10g_ds_stat_alarm_cleared;
+
+/** Structure definition for the "stat_alarm_raised" group of the 
+ * "epon_path_10g_ds" object. 
+ *
+ * Sent when a configured statistic alarm condition has been met. 
+ */
+typedef struct bcmolt_epon_path_10g_ds_stat_alarm_raised_data
+{
+    bcmolt_epon_path_10g_ds_stat_id stat;   /**< Statistic identifier. */
+} bcmolt_epon_path_10g_ds_stat_alarm_raised_data;
+
+/** Transport message definition for "stat_alarm_raised" group of 
+ * "epon_path_10g_ds" object. 
+ */
+typedef struct bcmolt_epon_path_10g_ds_stat_alarm_raised
+{
+    bcmolt_auto hdr;                    /**< Transport header. */
+    bcmolt_epon_path_10g_ds_key key;    /**< Object key. */
+    bcmolt_epon_path_10g_ds_stat_alarm_raised_data data;    /**< All properties that must be set by the user. */
+} bcmolt_epon_path_10g_ds_stat_alarm_raised;
+
+/** Structure definition for the "auto_cfg" group of the "epon_path_10g_ds" 
+ * object. 
+ */
+typedef struct bcmolt_epon_path_10g_ds_auto_cfg_data
+{
+    bcmos_bool stat_alarm_cleared;  /**< If true, indications of type "stat_alarm_cleared" will be generated. */
+    bcmos_bool stat_alarm_raised;   /**< If true, indications of type "stat_alarm_raised" will be generated. */
+} bcmolt_epon_path_10g_ds_auto_cfg_data;
+
+/** Transport message definition for "auto_cfg" group of "epon_path_10g_ds" 
+ * object. 
+ */
+typedef struct bcmolt_epon_path_10g_ds_auto_cfg
+{
+    bcmolt_auto_cfg hdr;                        /**< Transport header. */
+    bcmolt_epon_path_10g_ds_key key;            /**< Object key. */
+    bcmolt_epon_path_10g_ds_auto_cfg_data data; /**< All properties that must be set by the user. */
+} bcmolt_epon_path_10g_ds_auto_cfg;
+
+/** Structure definition for the "key" group of the "epon_path_10g_us" object. 
+ */
+typedef struct bcmolt_epon_path_10g_us_key
+{
+    bcmolt_epon_ni epon_ni; /**< EPON NI associated with this 10G upstream path. */
+} bcmolt_epon_path_10g_us_key;
+
+/** Structure definition for the "cfg" group of the "epon_path_10g_us" object. 
+ */
+typedef struct bcmolt_epon_path_10g_us_cfg_data
+{
+    bcmolt_epon_fec_en_state fec_state;         /**< FEC enable state for the 10G upstream path on this EPON NI.  This attribute cannot be changed while the EPON_NI is enabled. */
+    bcmolt_time_quanta sync_time_tq;            /**< Time quanta of sync at start of US burst.  This attribute cannot be changed while the EPON_NI is enabled. */
+    bcmolt_prbs_checker_config prbs_checker;    /**< US PRBS checker configuration */
+    bcmolt_prbs_status prbs_status;             /**< Result of US PRBS checker */
+} bcmolt_epon_path_10g_us_cfg_data;
+
+/** Transport message definition for "cfg" group of "epon_path_10g_us" object. 
+ */
+typedef struct bcmolt_epon_path_10g_us_cfg
+{
+    bcmolt_cfg hdr;                     /**< Transport header. */
+    bcmolt_epon_path_10g_us_key key;    /**< Object key. */
+    bcmolt_epon_path_10g_us_cfg_data data;  /**< All properties that must be set by the user. */
+} bcmolt_epon_path_10g_us_cfg;
+
+/** Structure definition for the "stat" group of the "epon_path_10g_us" object. 
+ */
+typedef struct bcmolt_epon_path_10g_us_stat_data
+{
+    uint64_t bytes;             /**< The number of bytes received on this 10g upstream path. */
+    uint64_t frames;            /**< The number of frames received on this 10g upstream path. */
+    uint64_t frames_64;         /**< The number of 64 byte frames received on this 10g upstream path. */
+    uint64_t frames_65_127;     /**< The number of 65 to 127 byte frames received on this 10g upstream path. */
+    uint64_t frames_128_255;    /**< The number of 128 to 255 byte frames received on this 10g upstream path. */
+    uint64_t frames_256_511;    /**< The number of 256 to 511 byte frames received on this 10g upstream path. */
+    uint64_t frames_512_1023;   /**< The number of 512 to 1023 byte frames received on this 10g upstream path. */
+    uint64_t frames_1024_1518;  /**< The number of 1024 to 1518 byte frames received on this 10g upstream path. */
+    uint64_t frames_1519_2047;  /**< The number of 1519 to 2047 byte frames received on this 10g upstream path. */
+    uint64_t frames_2048_4095;  /**< The number of 2048 to 4095 byte frames received on this 10g upstream path. */
+    uint64_t frames_4096_9216;  /**< The number of 4096 to 9216 byte frames received on this 10g upstream path. */
+    uint64_t frames_9217_16383; /**< The number of 9217 to 16383 byte frames received on this 10g upstream path. */
+    uint64_t broadcast_frames;  /**< The number of broadcast frames received on this 10g upstream path. */
+    uint64_t data_bytes;        /**< The number of data bytes received on this 10g upstream path. */
+    uint64_t multicast_frames;  /**< The number of multicast frames received on this 10g upstream path. */
+    uint64_t unicast_frames;    /**< The number of unicast frames received on this 10g upstream path. */
+    uint64_t mpcp_frames;       /**< The number of MPCP frames received on this 10g upstream path. */
+    uint64_t oam_bytes;         /**< The number of OAM bytes received on this 10g upstream path. */
+    uint64_t oam_frames;        /**< The number of OAM frames received on this 10g upstream path. */
+    uint64_t report_frames;     /**< The number of report frames received on this 10g upstream path. */
+    uint64_t abort_frames;      /**< The number of abort frames received on this 10g upstream path. */
+    uint64_t fcs_error;         /**< The number of bad FCS errors received on this 10g upstream path. */
+    uint64_t crc_8_error;       /**< The number of CRC8 errors received on this 10g upstream path. */
+    uint64_t out_of_slot;       /**< The number of out of slot errors received on this 10g upstream path. */
+    uint64_t oversize_error;    /**< The number of oversize errors received on this 10g upstream path. */
+    uint64_t runt_error;        /**< The number of runt errors received on this 10g upstream path. */
+} bcmolt_epon_path_10g_us_stat_data;
+
+/** Transport message definition for "stat" group of "epon_path_10g_us" object. 
+ */
+typedef struct bcmolt_epon_path_10g_us_stat
+{
+    bcmolt_stat hdr;                    /**< Transport header. */
+    bcmolt_epon_path_10g_us_key key;    /**< Object key. */
+    bcmolt_epon_path_10g_us_stat_data data; /**< All properties that must be set by the user. */
+} bcmolt_epon_path_10g_us_stat;
+
+/** Structure definition for the "stat_cfg" group of the "epon_path_10g_us" 
+ * object. 
+ */
+typedef struct bcmolt_epon_path_10g_us_stat_cfg_data
+{
+    bcmolt_stat_alarm_config cfg;   /**< Statistic alarm configuration. */
+} bcmolt_epon_path_10g_us_stat_cfg_data;
+
+/** Transport message definition for "stat_cfg" group of "epon_path_10g_us" 
+ * object. 
+ */
+typedef struct bcmolt_epon_path_10g_us_stat_cfg
+{
+    bcmolt_stat_cfg hdr;                        /**< Transport header. */
+    bcmolt_epon_path_10g_us_key key;            /**< Object key. */
+    bcmolt_epon_path_10g_us_stat_cfg_data data; /**< All properties that must be set by the user. */
+} bcmolt_epon_path_10g_us_stat_cfg;
+
+/** Structure definition for the "stat_alarm_cleared" group of the 
+ * "epon_path_10g_us" object. 
+ *
+ * Sent when a configured statistic alarm condition is no longer met. 
+ */
+typedef struct bcmolt_epon_path_10g_us_stat_alarm_cleared_data
+{
+    bcmolt_epon_path_10g_us_stat_id stat;   /**< Statistic identifier. */
+} bcmolt_epon_path_10g_us_stat_alarm_cleared_data;
+
+/** Transport message definition for "stat_alarm_cleared" group of 
+ * "epon_path_10g_us" object. 
+ */
+typedef struct bcmolt_epon_path_10g_us_stat_alarm_cleared
+{
+    bcmolt_auto hdr;                    /**< Transport header. */
+    bcmolt_epon_path_10g_us_key key;    /**< Object key. */
+    bcmolt_epon_path_10g_us_stat_alarm_cleared_data data;   /**< All properties that must be set by the user. */
+} bcmolt_epon_path_10g_us_stat_alarm_cleared;
+
+/** Structure definition for the "stat_alarm_raised" group of the 
+ * "epon_path_10g_us" object. 
+ *
+ * Sent when a configured statistic alarm condition has been met. 
+ */
+typedef struct bcmolt_epon_path_10g_us_stat_alarm_raised_data
+{
+    bcmolt_epon_path_10g_us_stat_id stat;   /**< Statistic identifier. */
+} bcmolt_epon_path_10g_us_stat_alarm_raised_data;
+
+/** Transport message definition for "stat_alarm_raised" group of 
+ * "epon_path_10g_us" object. 
+ */
+typedef struct bcmolt_epon_path_10g_us_stat_alarm_raised
+{
+    bcmolt_auto hdr;                    /**< Transport header. */
+    bcmolt_epon_path_10g_us_key key;    /**< Object key. */
+    bcmolt_epon_path_10g_us_stat_alarm_raised_data data;    /**< All properties that must be set by the user. */
+} bcmolt_epon_path_10g_us_stat_alarm_raised;
+
+/** Structure definition for the "auto_cfg" group of the "epon_path_10g_us" 
+ * object. 
+ */
+typedef struct bcmolt_epon_path_10g_us_auto_cfg_data
+{
+    bcmos_bool stat_alarm_cleared;  /**< If true, indications of type "stat_alarm_cleared" will be generated. */
+    bcmos_bool stat_alarm_raised;   /**< If true, indications of type "stat_alarm_raised" will be generated. */
+} bcmolt_epon_path_10g_us_auto_cfg_data;
+
+/** Transport message definition for "auto_cfg" group of "epon_path_10g_us" 
+ * object. 
+ */
+typedef struct bcmolt_epon_path_10g_us_auto_cfg
+{
+    bcmolt_auto_cfg hdr;                        /**< Transport header. */
+    bcmolt_epon_path_10g_us_key key;            /**< Object key. */
+    bcmolt_epon_path_10g_us_auto_cfg_data data; /**< All properties that must be set by the user. */
+} bcmolt_epon_path_10g_us_auto_cfg;
+
+/** Structure definition for the "key" group of the "epon_path_1g_ds" object. 
+ */
+typedef struct bcmolt_epon_path_1g_ds_key
+{
+    bcmolt_epon_ni epon_ni; /**< EPON NI associated with this 1G downstream path. */
+} bcmolt_epon_path_1g_ds_key;
+
+/** Structure definition for the "cfg" group of the "epon_path_1g_ds" object. 
+ */
+typedef struct bcmolt_epon_path_1g_ds_cfg_data
+{
+    bcmolt_epon_fec_en_state default_fec_state; /**< Default FEC enable state for the 1G downstream path on this EPON NI.  This attribute cannot be changed while the EPON_NI is enabled. */
+    bcmolt_raman_mitigation_mode raman_mode;    /**< Raman mitigation mode for the 1G downstream path on this EPON NI.  Raman mitigation cannot coexist with turbo mode.  This attribute cannot be changed while the EPON_NI is enabled. */
+    bcmolt_epon_1g_turbo_mode turbo_2g_mode;    /**< Operate the 1G downstream path at the turbo 2G data rate on this EPON NI.  Raman mitigation cannot coexist with turbo mode.  This attribute cannot be changed while the EPON_NI is enabled. */
+    bcmolt_prbs_generator_config prbs_generator;    /**< DS PRBS generator configuration */
+} bcmolt_epon_path_1g_ds_cfg_data;
+
+/** Transport message definition for "cfg" group of "epon_path_1g_ds" object. 
+ */
+typedef struct bcmolt_epon_path_1g_ds_cfg
+{
+    bcmolt_cfg hdr;                 /**< Transport header. */
+    bcmolt_epon_path_1g_ds_key key; /**< Object key. */
+    bcmolt_epon_path_1g_ds_cfg_data data;   /**< All properties that must be set by the user. */
+} bcmolt_epon_path_1g_ds_cfg;
+
+/** Structure definition for the "stat" group of the "epon_path_1g_ds" object. 
+ */
+typedef struct bcmolt_epon_path_1g_ds_stat_data
+{
+    uint64_t bytes;             /**< The number of bytes transmitted on this 1g downstream path. */
+    uint64_t frames;            /**< The number of frames transmitted on this 1g downstream path. */
+    uint64_t frames_64;         /**< The number of 64 byte frames transmitted on this 1g downstream path. */
+    uint64_t frames_65_127;     /**< The number of 65 to 127 byte frames transmitted on this 1g downstream path. */
+    uint64_t frames_128_255;    /**< The number of 128 to 255 byte frames transmitted on this 1g downstream path. */
+    uint64_t frames_256_511;    /**< The number of 256 to 511 byte frames transmitted on this 1g downstream path. */
+    uint64_t frames_512_1023;   /**< The number of 512 to 1023 byte frames transmitted on this 1g downstream path. */
+    uint64_t frames_1024_1518;  /**< The number of 1024 to 1518 byte frames transmitted on this 1g downstream path. */
+    uint64_t frames_1519_2047;  /**< The number of 1519 to 2047 byte frames transmitted on this 1g downstream path. */
+    uint64_t frames_2048_4095;  /**< The number of 2048 to 4095 byte frames transmitted on this 1g downstream path. */
+    uint64_t frames_4096_9216;  /**< The number of 4096 to 9216 byte frames transmitted on this 1g downstream path. */
+    uint64_t frames_9217_16383; /**< The number of 9217 to 16383 byte frames transmitted on this 1g downstream path. */
+    uint64_t broadcast_frames;  /**< The number of broadcast frames transmitted on this 1g downstream path. */
+    uint64_t data_bytes;        /**< The number of data bytes transmitted on this 1g downstream path. */
+    uint64_t multicast_frames;  /**< The number of multicast frames transmitted on this 1g downstream path. */
+    uint64_t unicast_frames;    /**< The number of unicast frames transmitted on this 1g downstream path. */
+    uint64_t oam_bytes;         /**< Number of OAM bytes transmitted on this 1g downstream path. */
+    uint64_t oam_frames;        /**< Number of OAM frames transmitted on this 1g downstream path. */
+    uint64_t gate_frames;       /**< Number of gate frames transmitted on this 1g downstream path. */
+    uint64_t mpcp_frames;       /**< Number of MPCP frames transmitted on this 1g downstream path. */
+    uint64_t abort_frames;      /**< Number of abort frames transmitted on this 1g downstream path. */
+} bcmolt_epon_path_1g_ds_stat_data;
+
+/** Transport message definition for "stat" group of "epon_path_1g_ds" object. 
+ */
+typedef struct bcmolt_epon_path_1g_ds_stat
+{
+    bcmolt_stat hdr;                /**< Transport header. */
+    bcmolt_epon_path_1g_ds_key key; /**< Object key. */
+    bcmolt_epon_path_1g_ds_stat_data data;  /**< All properties that must be set by the user. */
+} bcmolt_epon_path_1g_ds_stat;
+
+/** Structure definition for the "stat_cfg" group of the "epon_path_1g_ds" 
+ * object. 
+ */
+typedef struct bcmolt_epon_path_1g_ds_stat_cfg_data
+{
+    bcmolt_stat_alarm_config cfg;   /**< Statistic alarm configuration. */
+} bcmolt_epon_path_1g_ds_stat_cfg_data;
+
+/** Transport message definition for "stat_cfg" group of "epon_path_1g_ds" 
+ * object. 
+ */
+typedef struct bcmolt_epon_path_1g_ds_stat_cfg
+{
+    bcmolt_stat_cfg hdr;                        /**< Transport header. */
+    bcmolt_epon_path_1g_ds_key key;             /**< Object key. */
+    bcmolt_epon_path_1g_ds_stat_cfg_data data;  /**< All properties that must be set by the user. */
+} bcmolt_epon_path_1g_ds_stat_cfg;
+
+/** Structure definition for the "stat_alarm_cleared" group of the 
+ * "epon_path_1g_ds" object. 
+ *
+ * Sent when a configured statistic alarm condition is no longer met. 
+ */
+typedef struct bcmolt_epon_path_1g_ds_stat_alarm_cleared_data
+{
+    bcmolt_epon_path_1g_ds_stat_id stat;    /**< Statistic identifier. */
+} bcmolt_epon_path_1g_ds_stat_alarm_cleared_data;
+
+/** Transport message definition for "stat_alarm_cleared" group of 
+ * "epon_path_1g_ds" object. 
+ */
+typedef struct bcmolt_epon_path_1g_ds_stat_alarm_cleared
+{
+    bcmolt_auto hdr;                /**< Transport header. */
+    bcmolt_epon_path_1g_ds_key key; /**< Object key. */
+    bcmolt_epon_path_1g_ds_stat_alarm_cleared_data data;    /**< All properties that must be set by the user. */
+} bcmolt_epon_path_1g_ds_stat_alarm_cleared;
+
+/** Structure definition for the "stat_alarm_raised" group of the 
+ * "epon_path_1g_ds" object. 
+ *
+ * Sent when a configured statistic alarm condition has been met. 
+ */
+typedef struct bcmolt_epon_path_1g_ds_stat_alarm_raised_data
+{
+    bcmolt_epon_path_1g_ds_stat_id stat;    /**< Statistic identifier. */
+} bcmolt_epon_path_1g_ds_stat_alarm_raised_data;
+
+/** Transport message definition for "stat_alarm_raised" group of 
+ * "epon_path_1g_ds" object. 
+ */
+typedef struct bcmolt_epon_path_1g_ds_stat_alarm_raised
+{
+    bcmolt_auto hdr;                /**< Transport header. */
+    bcmolt_epon_path_1g_ds_key key; /**< Object key. */
+    bcmolt_epon_path_1g_ds_stat_alarm_raised_data data; /**< All properties that must be set by the user. */
+} bcmolt_epon_path_1g_ds_stat_alarm_raised;
+
+/** Structure definition for the "auto_cfg" group of the "epon_path_1g_ds" 
+ * object. 
+ */
+typedef struct bcmolt_epon_path_1g_ds_auto_cfg_data
+{
+    bcmos_bool stat_alarm_cleared;  /**< If true, indications of type "stat_alarm_cleared" will be generated. */
+    bcmos_bool stat_alarm_raised;   /**< If true, indications of type "stat_alarm_raised" will be generated. */
+} bcmolt_epon_path_1g_ds_auto_cfg_data;
+
+/** Transport message definition for "auto_cfg" group of "epon_path_1g_ds" 
+ * object. 
+ */
+typedef struct bcmolt_epon_path_1g_ds_auto_cfg
+{
+    bcmolt_auto_cfg hdr;                        /**< Transport header. */
+    bcmolt_epon_path_1g_ds_key key;             /**< Object key. */
+    bcmolt_epon_path_1g_ds_auto_cfg_data data;  /**< All properties that must be set by the user. */
+} bcmolt_epon_path_1g_ds_auto_cfg;
+
+/** Structure definition for the "key" group of the "epon_path_1g_us" object. 
+ */
+typedef struct bcmolt_epon_path_1g_us_key
+{
+    bcmolt_epon_ni epon_ni; /**< EPON NI associated with this 1G upstream path. */
+} bcmolt_epon_path_1g_us_key;
+
+/** Structure definition for the "cfg" group of the "epon_path_1g_us" object. 
+ */
+typedef struct bcmolt_epon_path_1g_us_cfg_data
+{
+    bcmolt_epon_fec_en_state default_fec_state; /**< Default FEC enable state for the 1G upstream path on this EPON NI.  This attribute cannot be changed while the EPON_NI is enabled. */
+    bcmolt_time_quanta sync_time_tq;            /**< Time quanta of sync at start of US burst.  This attribute cannot be changed while the EPON_NI is enabled. */
+    bcmolt_prbs_checker_config prbs_checker;    /**< US PRBS checker configuration */
+    bcmolt_prbs_status prbs_status;             /**< Result of US PRBS checker */
+} bcmolt_epon_path_1g_us_cfg_data;
+
+/** Transport message definition for "cfg" group of "epon_path_1g_us" object. 
+ */
+typedef struct bcmolt_epon_path_1g_us_cfg
+{
+    bcmolt_cfg hdr;                 /**< Transport header. */
+    bcmolt_epon_path_1g_us_key key; /**< Object key. */
+    bcmolt_epon_path_1g_us_cfg_data data;   /**< All properties that must be set by the user. */
+} bcmolt_epon_path_1g_us_cfg;
+
+/** Structure definition for the "stat" group of the "epon_path_1g_us" object. 
+ */
+typedef struct bcmolt_epon_path_1g_us_stat_data
+{
+    uint64_t bytes;             /**< The number of bytes received on this 1g upstream path. */
+    uint64_t frames;            /**< The number of frames received on this 1g upstream path. */
+    uint64_t frames_64;         /**< The number of 64 byte frames received on this 1g upstream path. */
+    uint64_t frames_65_127;     /**< The number of 65 to 127 byte frames received on this 1g upstream path. */
+    uint64_t frames_128_255;    /**< The number of 128 to 255 byte frames received on this 1g upstream path. */
+    uint64_t frames_256_511;    /**< The number of 256 to 511 byte frames received on this 1g upstream path. */
+    uint64_t frames_512_1023;   /**< The number of 512 to 1023 byte frames received on this 1g upstream path. */
+    uint64_t frames_1024_1518;  /**< The number of 1024 to 1518 byte frames received on this 1g upstream path. */
+    uint64_t frames_1519_2047;  /**< The number of 1519 to 2047 byte frames received on this 1g upstream path. */
+    uint64_t frames_2048_4095;  /**< The number of 2048 to 4095 byte frames received on this 1g upstream path. */
+    uint64_t frames_4096_9216;  /**< The number of 4096 to 9216 byte frames received on this 1g upstream path. */
+    uint64_t frames_9217_16383; /**< The number of 9217 to 16383 byte frames received on this 1g upstream path. */
+    uint64_t broadcast_frames;  /**< The number of broadcast frames received on this 1g upstream path. */
+    uint64_t data_bytes;        /**< The number of data bytes received on this 1g upstream path. */
+    uint64_t multicast_frames;  /**< The number of multicast frames received on this 1g upstream path. */
+    uint64_t unicast_frames;    /**< The number of unicast frames received on this 1g upstream path. */
+    uint64_t mpcp_frames;       /**< The number of MPCP frames received on this 1g upstream path. */
+    uint64_t oam_bytes;         /**< The number of OAM bytes received on this 1g upstream path. */
+    uint64_t oam_frames;        /**< The number of OAM frames received on this 1g upstream path. */
+    uint64_t report_frames;     /**< The number of report frames received on this 1g upstream path. */
+    uint64_t abort_frames;      /**< The number of abort frames received on this 1g upstream path. */
+    uint64_t fcs_error;         /**< The number of bad FCS errors received on this 1g upstream path. */
+    uint64_t crc_8_error;       /**< The number of CRC8 errors received on this 1g upstream path. */
+    uint64_t out_of_slot;       /**< The number of out of slot errors received on this 1g upstream path. */
+    uint64_t oversize_error;    /**< The number of oversize errors received on this 1g upstream path. */
+    uint64_t runt_error;        /**< The number of runt errors received on this 1g upstream path. */
+} bcmolt_epon_path_1g_us_stat_data;
+
+/** Transport message definition for "stat" group of "epon_path_1g_us" object. 
+ */
+typedef struct bcmolt_epon_path_1g_us_stat
+{
+    bcmolt_stat hdr;                /**< Transport header. */
+    bcmolt_epon_path_1g_us_key key; /**< Object key. */
+    bcmolt_epon_path_1g_us_stat_data data;  /**< All properties that must be set by the user. */
+} bcmolt_epon_path_1g_us_stat;
+
+/** Structure definition for the "stat_cfg" group of the "epon_path_1g_us" 
+ * object. 
+ */
+typedef struct bcmolt_epon_path_1g_us_stat_cfg_data
+{
+    bcmolt_stat_alarm_config cfg;   /**< Statistic alarm configuration. */
+} bcmolt_epon_path_1g_us_stat_cfg_data;
+
+/** Transport message definition for "stat_cfg" group of "epon_path_1g_us" 
+ * object. 
+ */
+typedef struct bcmolt_epon_path_1g_us_stat_cfg
+{
+    bcmolt_stat_cfg hdr;                        /**< Transport header. */
+    bcmolt_epon_path_1g_us_key key;             /**< Object key. */
+    bcmolt_epon_path_1g_us_stat_cfg_data data;  /**< All properties that must be set by the user. */
+} bcmolt_epon_path_1g_us_stat_cfg;
+
+/** Structure definition for the "stat_alarm_cleared" group of the 
+ * "epon_path_1g_us" object. 
+ *
+ * Sent when a configured statistic alarm condition is no longer met. 
+ */
+typedef struct bcmolt_epon_path_1g_us_stat_alarm_cleared_data
+{
+    bcmolt_epon_path_1g_us_stat_id stat;    /**< Statistic identifier. */
+} bcmolt_epon_path_1g_us_stat_alarm_cleared_data;
+
+/** Transport message definition for "stat_alarm_cleared" group of 
+ * "epon_path_1g_us" object. 
+ */
+typedef struct bcmolt_epon_path_1g_us_stat_alarm_cleared
+{
+    bcmolt_auto hdr;                /**< Transport header. */
+    bcmolt_epon_path_1g_us_key key; /**< Object key. */
+    bcmolt_epon_path_1g_us_stat_alarm_cleared_data data;    /**< All properties that must be set by the user. */
+} bcmolt_epon_path_1g_us_stat_alarm_cleared;
+
+/** Structure definition for the "stat_alarm_raised" group of the 
+ * "epon_path_1g_us" object. 
+ *
+ * Sent when a configured statistic alarm condition has been met. 
+ */
+typedef struct bcmolt_epon_path_1g_us_stat_alarm_raised_data
+{
+    bcmolt_epon_path_1g_us_stat_id stat;    /**< Statistic identifier. */
+} bcmolt_epon_path_1g_us_stat_alarm_raised_data;
+
+/** Transport message definition for "stat_alarm_raised" group of 
+ * "epon_path_1g_us" object. 
+ */
+typedef struct bcmolt_epon_path_1g_us_stat_alarm_raised
+{
+    bcmolt_auto hdr;                /**< Transport header. */
+    bcmolt_epon_path_1g_us_key key; /**< Object key. */
+    bcmolt_epon_path_1g_us_stat_alarm_raised_data data; /**< All properties that must be set by the user. */
+} bcmolt_epon_path_1g_us_stat_alarm_raised;
+
+/** Structure definition for the "auto_cfg" group of the "epon_path_1g_us" 
+ * object. 
+ */
+typedef struct bcmolt_epon_path_1g_us_auto_cfg_data
+{
+    bcmos_bool stat_alarm_cleared;  /**< If true, indications of type "stat_alarm_cleared" will be generated. */
+    bcmos_bool stat_alarm_raised;   /**< If true, indications of type "stat_alarm_raised" will be generated. */
+} bcmolt_epon_path_1g_us_auto_cfg_data;
+
+/** Transport message definition for "auto_cfg" group of "epon_path_1g_us" 
+ * object. 
+ */
+typedef struct bcmolt_epon_path_1g_us_auto_cfg
+{
+    bcmolt_auto_cfg hdr;                        /**< Transport header. */
+    bcmolt_epon_path_1g_us_key key;             /**< Object key. */
+    bcmolt_epon_path_1g_us_auto_cfg_data data;  /**< All properties that must be set by the user. */
+} bcmolt_epon_path_1g_us_auto_cfg;
+
+/** Structure definition for the "key" group of the "epon_rp" object. 
+ */
+typedef struct bcmolt_epon_rp_key
+{
+    bcmolt_epon_ni epon_ni;             /**< EPON NI containing this RP. */
+    bcmolt_epon_link_rate link_rate;    /**< Link rate associated with this RP.  Must be one of 10/10, 10/1, or 1/1. */
+} bcmolt_epon_rp_key;
+
+/** Structure definition for the "cfg" group of the "epon_rp" object. 
+ */
+typedef struct bcmolt_epon_rp_cfg_data
+{
+    bcmolt_epon_llid base_llid;                 /**< Base (lowest) logical link identifier for this RP.  This attribute cannot be changed while the EPON_NI is enabled, nor while any non-system links exist.  The sum of this value and max_links for this RP must be 0x7eff or smaller. */
+    bcmos_bool mpcp_disc_en;                    /**< Governs whether discovery gates for this RP are issued  */
+    bcmolt_time_quanta mpcp_disc_gnt_len_tq;    /**< Length of discovery grants in time quanta for this RP. */
+    uint16_t mpcp_report_timeout;               /**< Number of ms before links are deregistered due to no report received. */
+    uint16_t max_mpcp_reg_per_disc_window;      /**< Maximum number of MPCP registrations per discovery window on this RP (0 indicates unlimited). */
+    uint16_t max_links; /**< Maximum number of links to register on this EPON_RP.  This attribute cannot be changed while the EPON_NI is enabled, nor while any non-system links exist.  The actual limit is dependent on the system mode. */
+    bcmolt_upstream_bandwidth_distribution default_upstream_bandwidth;  /**< Default upstream bandwidth for newly created links. */
+    double rate_of_refraction;  /**< These are magic numbers derived using the process defined in ITU-T G.984.3 Appendix VII (http://www.itu.int/rec/T-REC-G.984.3-200911-S!Amd2/en) and ITU-T G.987.3 Appendix II (http://www.itu.int/rec/T-REC-G.987.3-201010-S/en) */
+} bcmolt_epon_rp_cfg_data;
+
+/** Transport message definition for "cfg" group of "epon_rp" object. 
+ */
+typedef struct bcmolt_epon_rp_cfg
+{
+    bcmolt_cfg hdr;                 /**< Transport header. */
+    bcmolt_epon_rp_key key;         /**< Object key. */
+    bcmolt_epon_rp_cfg_data data;   /**< All properties that must be set by the user. */
+} bcmolt_epon_rp_cfg;
+
+/** Structure definition for the "key" group of the "gpio" object. 
+ */
+typedef struct bcmolt_gpio_key
+{
+    uint32_t reserved;          /**< Reserved (set to 0). */
+    bcmolt_gpio_pin gpio_id;    /**< GPIO ID. */
+} bcmolt_gpio_key;
+
+/** Structure definition for the "cfg" group of the "gpio" object. 
+ */
+typedef struct bcmolt_gpio_cfg_data
+{
+    bcmolt_gpio_pin_dir direction;  /**< GPIO PIN direction (input or output) */
+    bcmolt_gpio_value value;        /**< Value to write. */
+} bcmolt_gpio_cfg_data;
+
+/** Transport message definition for "cfg" group of "gpio" object. 
+ */
+typedef struct bcmolt_gpio_cfg
+{
+    bcmolt_cfg hdr;             /**< Transport header. */
+    bcmolt_gpio_key key;        /**< Object key. */
+    bcmolt_gpio_cfg_data data;  /**< All properties that must be set by the user. */
+} bcmolt_gpio_cfg;
+
+/** Structure definition for the "key" group of the "gpon_alloc" object. 
+ */
+typedef struct bcmolt_gpon_alloc_key
+{
+    bcmolt_gpon_ni pon_ni;          /**< PON network interface. */
+    bcmolt_gpon_alloc_id alloc_id;  /**< Alloc ID. */
+} bcmolt_gpon_alloc_key;
+
+/** Structure definition for the "cfg" group of the "gpon_alloc" object. 
+ */
+typedef struct bcmolt_gpon_alloc_cfg_data
+{
+    bcmolt_alloc_state state;   /**< Current Alloc ID state */
+    bcmolt_pon_alloc_sla sla;   /**< Alloc ID SLA */
+    bcmolt_gpon_onu_id onu_id;  /**< ONU ID the alloc ID is assigned to */
+    bcmos_bool collect_stats;   /**< Enable statistics collection for this alloc ID */
+} bcmolt_gpon_alloc_cfg_data;
+
+/** Transport message definition for "cfg" group of "gpon_alloc" object. 
+ */
+typedef struct bcmolt_gpon_alloc_cfg
+{
+    bcmolt_cfg hdr;                     /**< Transport header. */
+    bcmolt_gpon_alloc_key key;          /**< Object key. */
+    bcmolt_gpon_alloc_cfg_data data;    /**< All properties that must be set by the user. */
+} bcmolt_gpon_alloc_cfg;
+
+/** Structure definition for the "stat" group of the "gpon_alloc" object. 
+ */
+typedef struct bcmolt_gpon_alloc_stat_data
+{
+    uint64_t rx_bytes;  /**< Number of alloc ID received bytes. */
+} bcmolt_gpon_alloc_stat_data;
+
+/** Transport message definition for "stat" group of "gpon_alloc" object. 
+ */
+typedef struct bcmolt_gpon_alloc_stat
+{
+    bcmolt_stat hdr;                    /**< Transport header. */
+    bcmolt_gpon_alloc_key key;          /**< Object key. */
+    bcmolt_gpon_alloc_stat_data data;   /**< All properties that must be set by the user. */
+} bcmolt_gpon_alloc_stat;
+
+/** Structure definition for the "stat_cfg" group of the "gpon_alloc" object. 
+ */
+typedef struct bcmolt_gpon_alloc_stat_cfg_data
+{
+    bcmolt_stat_alarm_config cfg;   /**< Statistic alarm configuration. */
+} bcmolt_gpon_alloc_stat_cfg_data;
+
+/** Transport message definition for "stat_cfg" group of "gpon_alloc" object. 
+ */
+typedef struct bcmolt_gpon_alloc_stat_cfg
+{
+    bcmolt_stat_cfg hdr;        /**< Transport header. */
+    bcmolt_gpon_alloc_key key;  /**< Object key. */
+    bcmolt_gpon_alloc_stat_cfg_data data;   /**< All properties that must be set by the user. */
+} bcmolt_gpon_alloc_stat_cfg;
+
+/** Structure definition for the "configuration_completed" group of the 
+ * "gpon_alloc" object. 
+ */
+typedef struct bcmolt_gpon_alloc_configuration_completed_data
+{
+    bcmolt_result status;           /**< Status. */
+    bcmolt_alloc_state new_state;   /**< new state. */
+} bcmolt_gpon_alloc_configuration_completed_data;
+
+/** Transport message definition for "configuration_completed" group of 
+ * "gpon_alloc" object. 
+ */
+typedef struct bcmolt_gpon_alloc_configuration_completed
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_gpon_alloc_key key;  /**< Object key. */
+    bcmolt_gpon_alloc_configuration_completed_data data;    /**< All properties that must be set by the user. */
+} bcmolt_gpon_alloc_configuration_completed;
+
+/** Structure definition for the "get_alloc_stats_completed" group of the 
+ * "gpon_alloc" object. 
+ *
+ * Collected alloc ID statistics from get_stats operation 
+ */
+typedef struct bcmolt_gpon_alloc_get_alloc_stats_completed_data
+{
+    bcmolt_result status;           /**< status. */
+    uint32_t average_nsr_used;      /**< Average NSR used bytes. */
+    uint32_t average_nsr_allocated; /**< Average NSR allocated bytes. */
+    uint32_t average_sr_report;     /**< Average SR report. */
+} bcmolt_gpon_alloc_get_alloc_stats_completed_data;
+
+/** Transport message definition for "get_alloc_stats_completed" group of 
+ * "gpon_alloc" object. 
+ */
+typedef struct bcmolt_gpon_alloc_get_alloc_stats_completed
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_gpon_alloc_key key;  /**< Object key. */
+    bcmolt_gpon_alloc_get_alloc_stats_completed_data data;  /**< All properties that must be set by the user. */
+} bcmolt_gpon_alloc_get_alloc_stats_completed;
+
+/** Structure definition for the "stat_alarm_cleared" group of the "gpon_alloc" 
+ * object. 
+ *
+ * Sent when a configured statistic alarm condition is no longer met. 
+ */
+typedef struct bcmolt_gpon_alloc_stat_alarm_cleared_data
+{
+    bcmolt_gpon_alloc_stat_id stat; /**< Statistic identifier. */
+} bcmolt_gpon_alloc_stat_alarm_cleared_data;
+
+/** Transport message definition for "stat_alarm_cleared" group of "gpon_alloc" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_alloc_stat_alarm_cleared
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_gpon_alloc_key key;  /**< Object key. */
+    bcmolt_gpon_alloc_stat_alarm_cleared_data data; /**< All properties that must be set by the user. */
+} bcmolt_gpon_alloc_stat_alarm_cleared;
+
+/** Structure definition for the "stat_alarm_raised" group of the "gpon_alloc" 
+ * object. 
+ *
+ * Sent when a configured statistic alarm condition has been met. 
+ */
+typedef struct bcmolt_gpon_alloc_stat_alarm_raised_data
+{
+    bcmolt_gpon_alloc_stat_id stat; /**< Statistic identifier. */
+} bcmolt_gpon_alloc_stat_alarm_raised_data;
+
+/** Transport message definition for "stat_alarm_raised" group of "gpon_alloc" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_alloc_stat_alarm_raised
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_gpon_alloc_key key;  /**< Object key. */
+    bcmolt_gpon_alloc_stat_alarm_raised_data data;  /**< All properties that must be set by the user. */
+} bcmolt_gpon_alloc_stat_alarm_raised;
+
+/** Structure definition for the "auto_cfg" group of the "gpon_alloc" object. 
+ */
+typedef struct bcmolt_gpon_alloc_auto_cfg_data
+{
+    bcmos_bool configuration_completed;     /**< If true, indications of type "configuration_completed" will be generated. */
+    bcmos_bool get_alloc_stats_completed;   /**< If true, indications of type "get_alloc_stats_completed" will be generated. */
+    bcmos_bool stat_alarm_cleared;          /**< If true, indications of type "stat_alarm_cleared" will be generated. */
+    bcmos_bool stat_alarm_raised;           /**< If true, indications of type "stat_alarm_raised" will be generated. */
+} bcmolt_gpon_alloc_auto_cfg_data;
+
+/** Transport message definition for "auto_cfg" group of "gpon_alloc" object. 
+ */
+typedef struct bcmolt_gpon_alloc_auto_cfg
+{
+    bcmolt_auto_cfg hdr;                    /**< Transport header. */
+    bcmolt_gpon_alloc_key key;              /**< Object key. */
+    bcmolt_gpon_alloc_auto_cfg_data data;   /**< All properties that must be set by the user. */
+} bcmolt_gpon_alloc_auto_cfg;
+
+/** Structure definition for the "get_stats" group of the "gpon_alloc" object. 
+ *
+ * Run statistics collection for a given period of time 
+ */
+typedef struct bcmolt_gpon_alloc_get_stats_data
+{
+    uint32_t num_of_cycles; /**< The number of cycles to run statistics collection */
+} bcmolt_gpon_alloc_get_stats_data;
+
+/** Transport message definition for "get_stats" group of "gpon_alloc" object. 
+ */
+typedef struct bcmolt_gpon_alloc_get_stats
+{
+    bcmolt_oper hdr;                        /**< Transport header. */
+    bcmolt_gpon_alloc_key key;              /**< Object key. */
+    bcmolt_gpon_alloc_get_stats_data data;  /**< All properties that must be set by the user. */
+} bcmolt_gpon_alloc_get_stats;
+
+/** Structure definition for the "set_state" group of the "gpon_alloc" object. 
+ *
+ * Sets the alloc's activation state.  This is only used for protection 
+ * switching on an active-standby PON.  In normal operation, this isn't 
+ * necessary since allocs are activated/deactivated automatically along with 
+ * the ONU. 
+ */
+typedef struct bcmolt_gpon_alloc_set_state_data
+{
+    bcmolt_alloc_operation state;   /**< State. */
+} bcmolt_gpon_alloc_set_state_data;
+
+/** Transport message definition for "set_state" group of "gpon_alloc" object. 
+ */
+typedef struct bcmolt_gpon_alloc_set_state
+{
+    bcmolt_oper hdr;                        /**< Transport header. */
+    bcmolt_gpon_alloc_key key;              /**< Object key. */
+    bcmolt_gpon_alloc_set_state_data data;  /**< All properties that must be set by the user. */
+} bcmolt_gpon_alloc_set_state;
+
+/** Structure definition for the "key" group of the "gpon_gem_port" object. 
+ */
+typedef struct bcmolt_gpon_gem_port_key
+{
+    bcmolt_gpon_ni pon_ni;          /**< PON network interface. */
+    bcmolt_gpon_gem_id gem_port_id; /**< GEM Port ID. */
+} bcmolt_gpon_gem_port_key;
+
+/** Structure definition for the "cfg" group of the "gpon_gem_port" object. 
+ */
+typedef struct bcmolt_gpon_gem_port_cfg_data
+{
+    bcmolt_gem_port_configuration configuration;                /**< GEM port configuration parameters */
+    bcmolt_gpon_onu_id onu_id;                                  /**< ONU ID this GEM port is assigned to */
+    bcmolt_gpon_gem_port_state gem_port_state;                  /**< Current GEM port state */
+    bcmolt_control_state downstream_encryption_mode;            /**< Enable/Disable the downstream encryption mode of the GEM Port */
+    bcmolt_us_gem_port_destination upstream_destination_queue;  /**< The destination queue of the packets arriving on this GEM Port on the upstream direction */
+    bcmolt_control_state control;                       /**< Enable/Disable the GEM Port ID in the OLT */
+    bcmolt_gpon_debug_flow_config debug_flow_config;    /**< Traffic flow debug options */
+    uint16_t mac_table_entry_limit;                     /**< The maximum number of MAC table entries allowed for this GEM port (0 = no limit). */
+} bcmolt_gpon_gem_port_cfg_data;
+
+/** Transport message definition for "cfg" group of "gpon_gem_port" object. 
+ */
+typedef struct bcmolt_gpon_gem_port_cfg
+{
+    bcmolt_cfg hdr;                     /**< Transport header. */
+    bcmolt_gpon_gem_port_key key;       /**< Object key. */
+    bcmolt_gpon_gem_port_cfg_data data; /**< All properties that must be set by the user. */
+} bcmolt_gpon_gem_port_cfg;
+
+/** Structure definition for the "stat" group of the "gpon_gem_port" object. 
+ */
+typedef struct bcmolt_gpon_gem_port_stat_data
+{
+    uint64_t rx_packets;    /**< Received GEM frames. */
+    uint64_t rx_bytes;      /**< Received bytes. */
+    uint64_t tx_packets;    /**< Transmitted GEM frames. */
+    uint64_t tx_bytes;      /**< Transmitted bytes. */
+} bcmolt_gpon_gem_port_stat_data;
+
+/** Transport message definition for "stat" group of "gpon_gem_port" object. 
+ */
+typedef struct bcmolt_gpon_gem_port_stat
+{
+    bcmolt_stat hdr;                /**< Transport header. */
+    bcmolt_gpon_gem_port_key key;   /**< Object key. */
+    bcmolt_gpon_gem_port_stat_data data;    /**< All properties that must be set by the user. */
+} bcmolt_gpon_gem_port_stat;
+
+/** Structure definition for the "stat_cfg" group of the "gpon_gem_port" object. 
+ */
+typedef struct bcmolt_gpon_gem_port_stat_cfg_data
+{
+    bcmolt_stat_alarm_config cfg;   /**< Statistic alarm configuration. */
+} bcmolt_gpon_gem_port_stat_cfg_data;
+
+/** Transport message definition for "stat_cfg" group of "gpon_gem_port" object. 
+ */
+typedef struct bcmolt_gpon_gem_port_stat_cfg
+{
+    bcmolt_stat_cfg hdr;                        /**< Transport header. */
+    bcmolt_gpon_gem_port_key key;               /**< Object key. */
+    bcmolt_gpon_gem_port_stat_cfg_data data;    /**< All properties that must be set by the user. */
+} bcmolt_gpon_gem_port_stat_cfg;
+
+/** Structure definition for the "configuration_completed" group of the 
+ * "gpon_gem_port" object. 
+ */
+typedef struct bcmolt_gpon_gem_port_configuration_completed_data
+{
+    bcmolt_result status;                   /**< status. */
+    bcmolt_gpon_gem_port_state new_state;   /**< new state. */
+} bcmolt_gpon_gem_port_configuration_completed_data;
+
+/** Transport message definition for "configuration_completed" group of 
+ * "gpon_gem_port" object. 
+ */
+typedef struct bcmolt_gpon_gem_port_configuration_completed
+{
+    bcmolt_auto hdr;                /**< Transport header. */
+    bcmolt_gpon_gem_port_key key;   /**< Object key. */
+    bcmolt_gpon_gem_port_configuration_completed_data data; /**< All properties that must be set by the user. */
+} bcmolt_gpon_gem_port_configuration_completed;
+
+/** Structure definition for the "stat_alarm_cleared" group of the 
+ * "gpon_gem_port" object. 
+ *
+ * Sent when a configured statistic alarm condition is no longer met. 
+ */
+typedef struct bcmolt_gpon_gem_port_stat_alarm_cleared_data
+{
+    bcmolt_gpon_gem_port_stat_id stat;  /**< Statistic identifier. */
+} bcmolt_gpon_gem_port_stat_alarm_cleared_data;
+
+/** Transport message definition for "stat_alarm_cleared" group of 
+ * "gpon_gem_port" object. 
+ */
+typedef struct bcmolt_gpon_gem_port_stat_alarm_cleared
+{
+    bcmolt_auto hdr;                /**< Transport header. */
+    bcmolt_gpon_gem_port_key key;   /**< Object key. */
+    bcmolt_gpon_gem_port_stat_alarm_cleared_data data;  /**< All properties that must be set by the user. */
+} bcmolt_gpon_gem_port_stat_alarm_cleared;
+
+/** Structure definition for the "stat_alarm_raised" group of the 
+ * "gpon_gem_port" object. 
+ *
+ * Sent when a configured statistic alarm condition has been met. 
+ */
+typedef struct bcmolt_gpon_gem_port_stat_alarm_raised_data
+{
+    bcmolt_gpon_gem_port_stat_id stat;  /**< Statistic identifier. */
+} bcmolt_gpon_gem_port_stat_alarm_raised_data;
+
+/** Transport message definition for "stat_alarm_raised" group of 
+ * "gpon_gem_port" object. 
+ */
+typedef struct bcmolt_gpon_gem_port_stat_alarm_raised
+{
+    bcmolt_auto hdr;                /**< Transport header. */
+    bcmolt_gpon_gem_port_key key;   /**< Object key. */
+    bcmolt_gpon_gem_port_stat_alarm_raised_data data;   /**< All properties that must be set by the user. */
+} bcmolt_gpon_gem_port_stat_alarm_raised;
+
+/** Structure definition for the "auto_cfg" group of the "gpon_gem_port" object. 
+ */
+typedef struct bcmolt_gpon_gem_port_auto_cfg_data
+{
+    bcmos_bool configuration_completed; /**< If true, indications of type "configuration_completed" will be generated. */
+    bcmos_bool stat_alarm_cleared;      /**< If true, indications of type "stat_alarm_cleared" will be generated. */
+    bcmos_bool stat_alarm_raised;       /**< If true, indications of type "stat_alarm_raised" will be generated. */
+} bcmolt_gpon_gem_port_auto_cfg_data;
+
+/** Transport message definition for "auto_cfg" group of "gpon_gem_port" object. 
+ */
+typedef struct bcmolt_gpon_gem_port_auto_cfg
+{
+    bcmolt_auto_cfg hdr;                        /**< Transport header. */
+    bcmolt_gpon_gem_port_key key;               /**< Object key. */
+    bcmolt_gpon_gem_port_auto_cfg_data data;    /**< All properties that must be set by the user. */
+} bcmolt_gpon_gem_port_auto_cfg;
+
+/** Structure definition for the "set_state" group of the "gpon_gem_port" 
+ * object. 
+ *
+ * Sets the GEM port's activation state.  This is only used for protection 
+ * switching on an active-standby PON.  In normal operation, this isn't 
+ * necessary since GEM ports are activated/deactivated automatically along with 
+ * the ONU. 
+ */
+typedef struct bcmolt_gpon_gem_port_set_state_data
+{
+    bcmolt_gem_port_operation state;    /**< State. */
+} bcmolt_gpon_gem_port_set_state_data;
+
+/** Transport message definition for "set_state" group of "gpon_gem_port" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_gem_port_set_state
+{
+    bcmolt_oper hdr;                /**< Transport header. */
+    bcmolt_gpon_gem_port_key key;   /**< Object key. */
+    bcmolt_gpon_gem_port_set_state_data data;   /**< All properties that must be set by the user. */
+} bcmolt_gpon_gem_port_set_state;
+
+/** Structure definition for the "key" group of the "gpon_iwf" object. 
+ */
+typedef struct bcmolt_gpon_iwf_key
+{
+    bcmolt_gpon_ni pon_ni;  /**< PON network interface. */
+} bcmolt_gpon_iwf_key;
+
+/** Structure definition for the "cfg" group of the "gpon_iwf" object. 
+ */
+typedef struct bcmolt_gpon_iwf_cfg_data
+{
+    bcmolt_iwf_mode iwf_mode;               /**< IWF mapping mode */
+#define BCMOLT_GPON_IWF_CFG_DATA_US_TPID_PER_FLOW_LEN   2
+    bcmolt_arr_u16_2_hex us_tpid_per_flow;  /**< TPID value of the VLAN tag added to upstream packet when IWF mode is set to per flow */
+    uint16_t us_otag_direct_tpid;           /**< TPID value of the VLAN tag added to upstream packet when IWF mode is set to direct mode */
+    uint8_t us_otag_direct_pbit;            /**< P-bit value of the VLAN tag added to upstream packet when IWF mode is set to direct mode */
+#define BCMOLT_GPON_IWF_CFG_DATA_DS_TPID_LEN    5
+    bcmolt_arr_u16_5_hex ds_tpid;           /**< Packets marked with one of the five configured DS TPID options will be forwarded, all the rest will be dropped */
+    bcmolt_mac_table_configuration mac_table_configuration;     /**< MAC table configuration */
+    bcmolt_gpon_iwf_debug_flow_config debug_flow_configuration; /**< MAC table configuration */
+    uint16_t mac_table_count;                       /**< Number of MAC table entries configured in the MAC table */
+    uint16_t forbidden_vlan_flow_gem_range_start;   /**< Forbidden range for Vlans, Flows and Gems start value */
+} bcmolt_gpon_iwf_cfg_data;
+
+/** Transport message definition for "cfg" group of "gpon_iwf" object. 
+ */
+typedef struct bcmolt_gpon_iwf_cfg
+{
+    bcmolt_cfg hdr;                 /**< Transport header. */
+    bcmolt_gpon_iwf_key key;        /**< Object key. */
+    bcmolt_gpon_iwf_cfg_data data;  /**< All properties that must be set by the user. */
+} bcmolt_gpon_iwf_cfg;
+
+/** Structure definition for the "stat" group of the "gpon_iwf" object. 
+ */
+typedef struct bcmolt_gpon_iwf_stat_data
+{
+    uint64_t ds_hit_event;              /**< DS hit event. */
+    uint64_t ds_miss_event;             /**< DS miss event. */
+    uint64_t ds_drop_due_to_miss_event; /**< DS drop due to miss event. */
+    uint64_t ds_drop_due_to_hit_event;  /**< DS drop due to hit event. */
+    uint64_t ds_drop_to_disabled_gem;   /**< DS drop to disabled GEM. */
+    uint64_t new_mac_discovered;        /**< New MAC discovered. */
+    uint64_t move_event;                /**< Move event. */
+    uint64_t new_mac_drop_due_to_fifo_full; /**< New MAC drop due to fifo full. */
+} bcmolt_gpon_iwf_stat_data;
+
+/** Transport message definition for "stat" group of "gpon_iwf" object. 
+ */
+typedef struct bcmolt_gpon_iwf_stat
+{
+    bcmolt_stat hdr;                /**< Transport header. */
+    bcmolt_gpon_iwf_key key;        /**< Object key. */
+    bcmolt_gpon_iwf_stat_data data; /**< All properties that must be set by the user. */
+} bcmolt_gpon_iwf_stat;
+
+/** Structure definition for the "stat_cfg" group of the "gpon_iwf" object. 
+ */
+typedef struct bcmolt_gpon_iwf_stat_cfg_data
+{
+    bcmolt_stat_alarm_config cfg;   /**< Statistic alarm configuration. */
+} bcmolt_gpon_iwf_stat_cfg_data;
+
+/** Transport message definition for "stat_cfg" group of "gpon_iwf" object. 
+ */
+typedef struct bcmolt_gpon_iwf_stat_cfg
+{
+    bcmolt_stat_cfg hdr;                /**< Transport header. */
+    bcmolt_gpon_iwf_key key;            /**< Object key. */
+    bcmolt_gpon_iwf_stat_cfg_data data; /**< All properties that must be set by the user. */
+} bcmolt_gpon_iwf_stat_cfg;
+
+/** Transport message definition for "flush_mac_table_completed" group of 
+ * "gpon_iwf" object. 
+ */
+typedef struct bcmolt_gpon_iwf_flush_mac_table_completed
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_gpon_iwf_key key;    /**< Object key. */
+} bcmolt_gpon_iwf_flush_mac_table_completed;
+
+/** Structure definition for the "scan_mac_table_completed" group of the 
+ * "gpon_iwf" object. 
+ *
+ * A MAC table scan initiated using the "scan_mac_table" operation is complete. 
+ */
+typedef struct bcmolt_gpon_iwf_scan_mac_table_completed_data
+{
+    bcmos_mac_address mac_address;  /**< Entry MAC address. */
+    bcmolt_gpon_mac_table_scan_result_list_u16 entries; /**< Scan results for this entry.  If this list is empty, the MAC address was not found in the table. */
+} bcmolt_gpon_iwf_scan_mac_table_completed_data;
+
+/** Transport message definition for "scan_mac_table_completed" group of 
+ * "gpon_iwf" object. 
+ */
+typedef struct bcmolt_gpon_iwf_scan_mac_table_completed
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_gpon_iwf_key key;    /**< Object key. */
+    bcmolt_gpon_iwf_scan_mac_table_completed_data data; /**< All properties that must be set by the user. */
+} bcmolt_gpon_iwf_scan_mac_table_completed;
+
+/** Structure definition for the "stat_alarm_cleared" group of the "gpon_iwf" 
+ * object. 
+ *
+ * Sent when a configured statistic alarm condition is no longer met. 
+ */
+typedef struct bcmolt_gpon_iwf_stat_alarm_cleared_data
+{
+    bcmolt_gpon_iwf_stat_id stat;   /**< Statistic identifier. */
+} bcmolt_gpon_iwf_stat_alarm_cleared_data;
+
+/** Transport message definition for "stat_alarm_cleared" group of "gpon_iwf" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_iwf_stat_alarm_cleared
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_gpon_iwf_key key;    /**< Object key. */
+    bcmolt_gpon_iwf_stat_alarm_cleared_data data;   /**< All properties that must be set by the user. */
+} bcmolt_gpon_iwf_stat_alarm_cleared;
+
+/** Structure definition for the "stat_alarm_raised" group of the "gpon_iwf" 
+ * object. 
+ *
+ * Sent when a configured statistic alarm condition has been met. 
+ */
+typedef struct bcmolt_gpon_iwf_stat_alarm_raised_data
+{
+    bcmolt_gpon_iwf_stat_id stat;   /**< Statistic identifier. */
+} bcmolt_gpon_iwf_stat_alarm_raised_data;
+
+/** Transport message definition for "stat_alarm_raised" group of "gpon_iwf" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_iwf_stat_alarm_raised
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_gpon_iwf_key key;    /**< Object key. */
+    bcmolt_gpon_iwf_stat_alarm_raised_data data;    /**< All properties that must be set by the user. */
+} bcmolt_gpon_iwf_stat_alarm_raised;
+
+/** Structure definition for the "auto_cfg" group of the "gpon_iwf" object. 
+ */
+typedef struct bcmolt_gpon_iwf_auto_cfg_data
+{
+    bcmos_bool flush_mac_table_completed;   /**< If true, indications of type "flush_mac_table_completed" will be generated. */
+    bcmos_bool scan_mac_table_completed;    /**< If true, indications of type "scan_mac_table_completed" will be generated. */
+    bcmos_bool stat_alarm_cleared;          /**< If true, indications of type "stat_alarm_cleared" will be generated. */
+    bcmos_bool stat_alarm_raised;           /**< If true, indications of type "stat_alarm_raised" will be generated. */
+} bcmolt_gpon_iwf_auto_cfg_data;
+
+/** Transport message definition for "auto_cfg" group of "gpon_iwf" object. 
+ */
+typedef struct bcmolt_gpon_iwf_auto_cfg
+{
+    bcmolt_auto_cfg hdr;                /**< Transport header. */
+    bcmolt_gpon_iwf_key key;            /**< Object key. */
+    bcmolt_gpon_iwf_auto_cfg_data data; /**< All properties that must be set by the user. */
+} bcmolt_gpon_iwf_auto_cfg;
+
+/** Structure definition for the "flush_mac_table" group of the "gpon_iwf" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_iwf_flush_mac_table_data
+{
+    bcmolt_flush_mac_table_option control;  /**< control. */
+    bcmolt_vlan_id vid;                     /**< VID. */
+    bcmolt_flow_id flow_id;                 /**< FLOW ID. */
+} bcmolt_gpon_iwf_flush_mac_table_data;
+
+/** Transport message definition for "flush_mac_table" group of "gpon_iwf" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_iwf_flush_mac_table
+{
+    bcmolt_oper hdr;            /**< Transport header. */
+    bcmolt_gpon_iwf_key key;    /**< Object key. */
+    bcmolt_gpon_iwf_flush_mac_table_data data;  /**< All properties that must be set by the user. */
+} bcmolt_gpon_iwf_flush_mac_table;
+
+/** Structure definition for the "scan_mac_table" group of the "gpon_iwf" 
+ * object. 
+ *
+ * Scans MAC table for a given MAC address then returns the associated 
+ * information 
+ */
+typedef struct bcmolt_gpon_iwf_scan_mac_table_data
+{
+    bcmos_mac_address mac_address;  /**< Entry MAC address. */
+} bcmolt_gpon_iwf_scan_mac_table_data;
+
+/** Transport message definition for "scan_mac_table" group of "gpon_iwf" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_iwf_scan_mac_table
+{
+    bcmolt_oper hdr;            /**< Transport header. */
+    bcmolt_gpon_iwf_key key;    /**< Object key. */
+    bcmolt_gpon_iwf_scan_mac_table_data data;   /**< All properties that must be set by the user. */
+} bcmolt_gpon_iwf_scan_mac_table;
+
+/** Structure definition for the "key" group of the "gpon_iwf_ds_egress_flow" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_iwf_ds_egress_flow_key
+{
+    bcmolt_gpon_ni pon_ni;  /**< PON network interface. */
+    bcmolt_flow_id flow_id; /**< Flow ID. */
+} bcmolt_gpon_iwf_ds_egress_flow_key;
+
+/** Structure definition for the "cfg" group of the "gpon_iwf_ds_egress_flow" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_iwf_ds_egress_flow_cfg_data
+{
+    bcmolt_gpon_gem_id gem_port;    /**< GEM port ID */
+    bcmos_bool pbit_control;        /**< If enabled, the Pbits value is taken from the mapping VLAN tag (Inner/Outer) VLAN Pbits location and added to the configured GEM port ID value to create the Final GEM ID */
+} bcmolt_gpon_iwf_ds_egress_flow_cfg_data;
+
+/** Transport message definition for "cfg" group of "gpon_iwf_ds_egress_flow" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_iwf_ds_egress_flow_cfg
+{
+    bcmolt_cfg hdr; /**< Transport header. */
+    bcmolt_gpon_iwf_ds_egress_flow_key key;         /**< Object key. */
+    bcmolt_gpon_iwf_ds_egress_flow_cfg_data data;   /**< All properties that must be set by the user. */
+} bcmolt_gpon_iwf_ds_egress_flow_cfg;
+
+/** Structure definition for the "key" group of the "gpon_iwf_ds_ingress_flow" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_iwf_ds_ingress_flow_key
+{
+    bcmolt_gpon_ni pon_ni;  /**< PON network interface. */
+    bcmolt_vlan_id vlan_id; /**< vlan ID. */
+} bcmolt_gpon_iwf_ds_ingress_flow_key;
+
+/** Structure definition for the "cfg" group of the "gpon_iwf_ds_ingress_flow" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_iwf_ds_ingress_flow_cfg_data
+{
+    bcmolt_vlan_to_flow_mapping_method mapping_method;  /**< The Mapping method defines how the flow ID will be determined */
+    bcmolt_mapping_tag_method mapping_tag;              /**< Define if the outer or the inner VLAN tag of the packet will determine the flow ID */
+    bcmolt_ds_vlan_action vlan_action;                  /**< Define the outer VLAN tag manipulation on the packet: transparent or remove */
+} bcmolt_gpon_iwf_ds_ingress_flow_cfg_data;
+
+/** Transport message definition for "cfg" group of "gpon_iwf_ds_ingress_flow" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_iwf_ds_ingress_flow_cfg
+{
+    bcmolt_cfg hdr; /**< Transport header. */
+    bcmolt_gpon_iwf_ds_ingress_flow_key key;        /**< Object key. */
+    bcmolt_gpon_iwf_ds_ingress_flow_cfg_data data;  /**< All properties that must be set by the user. */
+} bcmolt_gpon_iwf_ds_ingress_flow_cfg;
+
+/** Structure definition for the "key" group of the "gpon_iwf_mac_table" object. 
+ */
+typedef struct bcmolt_gpon_iwf_mac_table_key
+{
+    bcmolt_gpon_ni pon_ni;          /**< PON network interface. */
+    bcmos_mac_address mac_address;  /**< MAC address. */
+    bcmolt_vlan_id vlan;            /**< VLAN. */
+} bcmolt_gpon_iwf_mac_table_key;
+
+/** Structure definition for the "cfg" group of the "gpon_iwf_mac_table" object. 
+ */
+typedef struct bcmolt_gpon_iwf_mac_table_cfg_data
+{
+    bcmolt_flow_id flow_id;         /**< The flow ID assigned to traffic that matches this MAC table entry. */
+    bcmos_bool stat;                /**< Whether or not the MAC entry is static.  Static entries don't age. */
+    bcmolt_gpon_gem_id gem_port_id; /**< The GEM port ID of the traffic that created this table entry.  This only applies to automatically-learned entries.  Manually-added entries will have the value BCMOLT_PON_GEM_PORT_ID_INVALID. */
+    bcmolt_gpon_onu_id onu_id;      /**< The ONU ID for the traffic that created this table entry.  This only valid if gem_port_id is valid.  Otherwise this will be set to BCMOLT_GPON_ONU_ID_INVALID. */
+} bcmolt_gpon_iwf_mac_table_cfg_data;
+
+/** Transport message definition for "cfg" group of "gpon_iwf_mac_table" object. 
+ */
+typedef struct bcmolt_gpon_iwf_mac_table_cfg
+{
+    bcmolt_cfg hdr;                     /**< Transport header. */
+    bcmolt_gpon_iwf_mac_table_key key;  /**< Object key. */
+    bcmolt_gpon_iwf_mac_table_cfg_data data;    /**< All properties that must be set by the user. */
+} bcmolt_gpon_iwf_mac_table_cfg;
+
+/** Transport message definition for "mac_aged" group of "gpon_iwf_mac_table" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_iwf_mac_table_mac_aged
+{
+    bcmolt_auto hdr;                    /**< Transport header. */
+    bcmolt_gpon_iwf_mac_table_key key;  /**< Object key. */
+} bcmolt_gpon_iwf_mac_table_mac_aged;
+
+/** Structure definition for the "mac_dropped" group of the "gpon_iwf_mac_table" 
+ * object. 
+ *
+ * Sent when an entry cannot be learned since the MAC table is full. 
+ */
+typedef struct bcmolt_gpon_iwf_mac_table_mac_dropped_data
+{
+    bcmolt_flow_id flow_id; /**< The flow ID of the entry that was dropped. */
+} bcmolt_gpon_iwf_mac_table_mac_dropped_data;
+
+/** Transport message definition for "mac_dropped" group of "gpon_iwf_mac_table" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_iwf_mac_table_mac_dropped
+{
+    bcmolt_auto hdr;                    /**< Transport header. */
+    bcmolt_gpon_iwf_mac_table_key key;  /**< Object key. */
+    bcmolt_gpon_iwf_mac_table_mac_dropped_data data;    /**< All properties that must be set by the user. */
+} bcmolt_gpon_iwf_mac_table_mac_dropped;
+
+/** Structure definition for the "mac_move" group of the "gpon_iwf_mac_table" 
+ * object. 
+ *
+ * Sent when the MAC table is in move mode and a packet is seen that matches on 
+ * MAC address / VID but doesn't match on flow ID. 
+ */
+typedef struct bcmolt_gpon_iwf_mac_table_mac_move_data
+{
+    bcmolt_flow_id old_flow_id; /**< The flow ID in the current MAC table entry. */
+    bcmolt_flow_id new_flow_id; /**< The flow ID seen in the traffic stream. */
+} bcmolt_gpon_iwf_mac_table_mac_move_data;
+
+/** Transport message definition for "mac_move" group of "gpon_iwf_mac_table" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_iwf_mac_table_mac_move
+{
+    bcmolt_auto hdr;                    /**< Transport header. */
+    bcmolt_gpon_iwf_mac_table_key key;  /**< Object key. */
+    bcmolt_gpon_iwf_mac_table_mac_move_data data;   /**< All properties that must be set by the user. */
+} bcmolt_gpon_iwf_mac_table_mac_move;
+
+/** Structure definition for the "new_mac" group of the "gpon_iwf_mac_table" 
+ * object. 
+ *
+ * Sent when a new MAC address / VID combination is seen in the upstream 
+ * traffic stream. 
+ */
+typedef struct bcmolt_gpon_iwf_mac_table_new_mac_data
+{
+    bcmolt_flow_id flow_id; /**< The flow ID associated with the new entry. */
+} bcmolt_gpon_iwf_mac_table_new_mac_data;
+
+/** Transport message definition for "new_mac" group of "gpon_iwf_mac_table" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_iwf_mac_table_new_mac
+{
+    bcmolt_auto hdr;                    /**< Transport header. */
+    bcmolt_gpon_iwf_mac_table_key key;  /**< Object key. */
+    bcmolt_gpon_iwf_mac_table_new_mac_data data;    /**< All properties that must be set by the user. */
+} bcmolt_gpon_iwf_mac_table_new_mac;
+
+/** Structure definition for the "auto_cfg" group of the "gpon_iwf_mac_table" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_iwf_mac_table_auto_cfg_data
+{
+    bcmos_bool mac_aged;    /**< If true, indications of type "mac_aged" will be generated. */
+    bcmos_bool mac_dropped; /**< If true, indications of type "mac_dropped" will be generated. */
+    bcmos_bool mac_move;    /**< If true, indications of type "mac_move" will be generated. */
+    bcmos_bool new_mac;     /**< If true, indications of type "new_mac" will be generated. */
+} bcmolt_gpon_iwf_mac_table_auto_cfg_data;
+
+/** Transport message definition for "auto_cfg" group of "gpon_iwf_mac_table" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_iwf_mac_table_auto_cfg
+{
+    bcmolt_auto_cfg hdr;                /**< Transport header. */
+    bcmolt_gpon_iwf_mac_table_key key;  /**< Object key. */
+    bcmolt_gpon_iwf_mac_table_auto_cfg_data data;   /**< All properties that must be set by the user. */
+} bcmolt_gpon_iwf_mac_table_auto_cfg;
+
+/** Structure definition for the "key" group of the "gpon_iwf_us_flow" object. 
+ */
+typedef struct bcmolt_gpon_iwf_us_flow_key
+{
+    bcmolt_gpon_ni pon_ni;          /**< PON network interface. */
+    bcmolt_gpon_gem_id gem_port_id; /**< GEM Port  ID. */
+} bcmolt_gpon_iwf_us_flow_key;
+
+/** Structure definition for the "cfg" group of the "gpon_iwf_us_flow" object. 
+ */
+typedef struct bcmolt_gpon_iwf_us_flow_cfg_data
+{
+    bcmolt_flow_id flow_id;             /**< Flow ID. */
+    bcmos_bool mac_learning;            /**< MAC learning. */
+    bcmolt_us_vlan_action vlan_action;  /**< VLAN action. */
+    bcmolt_vlan_tag vlan_tag;           /**< Vlan tag. */
+    uint8_t tpid_index;                 /**< TPID index. */
+} bcmolt_gpon_iwf_us_flow_cfg_data;
+
+/** Transport message definition for "cfg" group of "gpon_iwf_us_flow" object. 
+ */
+typedef struct bcmolt_gpon_iwf_us_flow_cfg
+{
+    bcmolt_cfg hdr;                     /**< Transport header. */
+    bcmolt_gpon_iwf_us_flow_key key;    /**< Object key. */
+    bcmolt_gpon_iwf_us_flow_cfg_data data;  /**< All properties that must be set by the user. */
+} bcmolt_gpon_iwf_us_flow_cfg;
+
+/** Structure definition for the "key" group of the "gpon_ni" object. 
+ */
+typedef struct bcmolt_gpon_ni_key
+{
+    bcmolt_gpon_ni pon_ni;  /**< PON network interface. */
+} bcmolt_gpon_ni_key;
+
+/** Structure definition for the "cfg" group of the "gpon_ni" object. 
+ */
+typedef struct bcmolt_gpon_ni_cfg_data
+{
+    bcmolt_pon_status pon_status;   /**< PON status parameters */
+    bcmolt_pon_available_bandwidth available_bandwidth; /**< PON available bandwidth parameters */
+    uint16_t number_of_active_onus;                     /**< Number of active ONUs on the PON */
+    uint16_t number_of_active_standby_onus;             /**< number of active standby onus. */
+    bcmolt_prbs_status prbs_status;                     /**< Result of US PRBS checker */
+    bcmolt_pon_distance pon_distance;                   /**< PON distance */
+    uint32_t ranging_window_size;                       /**< Ranging window size */
+    uint32_t preassigned_equalization_delay;            /**< ONU pre-assigned equalization delay */
+    uint32_t eqd_cycles_number;                     /**< How many ranging windows are opened during a single ONU activation process */
+    bcmolt_pon_power_level power_level;             /**< ONU power level configuration */
+    bcmolt_control_state ds_fec_mode;               /**< DS FEC mode */
+    bcmolt_pon_drift_control drift_control;         /**< Drift control process configuration */
+    bcmolt_ber_interval ds_ber_reporting_interval;  /**< DS BER reporting interval */
+    uint8_t los_alarm_threshold;                    /**< LOS alarm threshold */
+    bcmolt_status los_initial_value;                /**< LOS initial value following PON activation */
+    bcmolt_gpon_onu_alarms_thresholds onu_alarms_thresholds;    /**< ONU alarms thresholds configuration */
+    bcmolt_ber_monitor_params ber_monitor;                      /**< BER monitor process configuration */
+    uint16_t ploam_ack_timeout;                 /**< Timeout for receiving ACK ploam */
+    bcmolt_gpon_onu_activation onu_activation;  /**< ONU activation control parameters */
+    bcmolt_gpon_sn_acquisition sn_acquisition;  /**< Serial Number process configuration */
+    bcmolt_gpon_key_exchange key_exchange;      /**< Key Exchange process configuration */
+    bcmolt_pon_protection_switching protection_switching;       /**< Protection switching control */
+    bcmolt_cbr_rt_allocation_profile cbr_rt_allocation_profile; /**< CBR Real Time allocation profile */
+#define BCMOLT_GPON_NI_CFG_DATA_CBR_NRT_ALLOCATION_PROFILE_LEN  2
+    bcmolt_arr_u16_2 cbr_nrt_allocation_profile;                /**< CBR non Real Time allocation profile */
+    bcmolt_pon_dba dba; /**< DBA configuration */
+    bcmolt_onu_power_management_configuration power_management;             /**< ONU power management control */
+    bcmolt_rogue_onu_detection_process rogue_onu_detection_process;         /**< Rogue ONU detection process configuration */
+    bcmolt_periodic_standby_pon_monitoring periodic_standby_pon_monitoring; /**< Periodic Standby PON monitoring */
+    bcmolt_prbs_checker_config prbs_checker;                        /**< US PRBS checker configuration */
+    bcmolt_prbs_generator_config prbs_generator;                    /**< DS PRBS generator configuration */
+    bcmolt_gpon_alloc_id min_data_alloc_id;                         /**< Min data Alloc ID value */
+    bcmolt_automatic_onu_deactivation automatic_onu_deactivation;   /**< Option to disable the automatic deactivation of ONUs due to alarms */
+    uint32_t us_bandwidth_limit;    /**< Total PON upstream bandwidth limit in bytes per second. */
+    bcmolt_gpon_onu_with_state_list_u16_max_128 all_onus;                   /**< All ONUs currently provisioned on this PON. */
+    bcmolt_gpon_gem_port_with_state_list_u16_max_128 all_mcast_gem_ports;   /**< All multicast GEM ports currently provisioned on this PON. */
+    bcmolt_gpon_ni_debug debug; /**< PON NI debug parameters */
+    bcmolt_gpon_onu_upgrade_params onu_upgrade_params;  /**< ONU upgrade params. */
+    uint16_t ps_c_wait_before_deactivation_timeout;     /**< PS type C timeout in milliseconds */
+    bcmolt_control_state bip32_indication_control;      /**< Option to disable the bip32 indication when the value is zero */
+} bcmolt_gpon_ni_cfg_data;
+
+/** Transport message definition for "cfg" group of "gpon_ni" object. 
+ */
+typedef struct bcmolt_gpon_ni_cfg
+{
+    bcmolt_cfg hdr;                 /**< Transport header. */
+    bcmolt_gpon_ni_key key;         /**< Object key. */
+    bcmolt_gpon_ni_cfg_data data;   /**< All properties that must be set by the user. */
+} bcmolt_gpon_ni_cfg;
+
+/** Structure definition for the "stat" group of the "gpon_ni" object. 
+ */
+typedef struct bcmolt_gpon_ni_stat_data
+{
+    uint64_t fec_codewords;             /**< Received FEC codewords. */
+    uint64_t fec_codewords_uncorrected; /**< Received uncorrected FEC codewords. */
+    uint64_t bip8_bytes;                /**< Received bytes protected by bip8. */
+    uint64_t bip8_errors;               /**< Received bip8 errors. */
+    uint64_t rx_gem_packets;            /**< Received GEM frames. */
+    uint64_t rx_gem_dropped;            /**< Received dropped GEM ID packets. */
+    uint64_t rx_gem_idle;               /**< Received idle GEM frames. */
+    uint64_t rx_gem_corrected;          /**< Received corrected GEM frames. */
+    uint64_t rx_gem_illegal;            /**< Received illegal GEM frames. */
+    uint64_t rx_allocations_valid;      /**< Received valid allocations. */
+    uint64_t rx_allocations_invalid;    /**< Received invalid allocations. */
+    uint64_t rx_allocations_disabled;   /**< Received disabled allocations. */
+    uint64_t rx_ploams;                 /**< Received Ploams. */
+    uint64_t rx_ploams_non_idle;        /**< Received non idle Ploams. */
+    uint64_t rx_ploams_error;           /**< Received error Ploams. */
+    uint64_t rx_ploams_dropped;         /**< Received dropped Ploams. */
+    uint64_t rx_cpu;                    /**< Received CPU packets. */
+    uint64_t rx_omci;                   /**< Received OMCI packets. */
+    uint64_t rx_omci_packets_crc_error; /**< Received OMCI packets with CRC errors. */
+    uint64_t rx_dropped_too_short;      /**< Received packets dropped due to length too short. */
+    uint64_t rx_dropped_too_long;       /**< Received packet dropped due to length too long. */
+    uint64_t rx_crc_errors;             /**< Received packet dropped due to crc error. */
+    uint64_t rx_key_errors;             /**< Received packet dropped due to key error. */
+    uint64_t rx_fragments_errors;       /**< Received packet dropped due to fragmentation error. */
+    uint64_t rx_packets_dropped;        /**< Global dropped packets. */
+    uint64_t tx_gem;                    /**< Transmitted GEM frames. */
+    uint64_t tx_ploams;                 /**< Transmitted Ploams. */
+    uint64_t tx_gem_fragments;          /**< Transmitted GEM fragments. */
+    uint64_t tx_cpu;                    /**< Transmitted CPU packets. */
+    uint64_t tx_omci;                   /**< Transmitted OMCI packets. */
+    uint8_t tx_cpu_omci_packets_dropped;    /**< Transmit packets dropped due to illegal length. */
+    uint64_t tx_dropped_illegal_length;     /**< Transmitted packet dropped due to illegal length. */
+    uint64_t tx_dropped_tpid_miss;          /**< Dropped because of TPID miss. */
+    uint64_t tx_dropped_vid_miss;           /**< Dropped because of VID miss. */
+} bcmolt_gpon_ni_stat_data;
+
+/** Transport message definition for "stat" group of "gpon_ni" object. 
+ */
+typedef struct bcmolt_gpon_ni_stat
+{
+    bcmolt_stat hdr;                /**< Transport header. */
+    bcmolt_gpon_ni_key key;         /**< Object key. */
+    bcmolt_gpon_ni_stat_data data;  /**< All properties that must be set by the user. */
+} bcmolt_gpon_ni_stat;
+
+/** Structure definition for the "stat_cfg" group of the "gpon_ni" object. 
+ */
+typedef struct bcmolt_gpon_ni_stat_cfg_data
+{
+    bcmolt_stat_alarm_config cfg;   /**< Statistic alarm configuration. */
+} bcmolt_gpon_ni_stat_cfg_data;
+
+/** Transport message definition for "stat_cfg" group of "gpon_ni" object. 
+ */
+typedef struct bcmolt_gpon_ni_stat_cfg
+{
+    bcmolt_stat_cfg hdr;                /**< Transport header. */
+    bcmolt_gpon_ni_key key;             /**< Object key. */
+    bcmolt_gpon_ni_stat_cfg_data data;  /**< All properties that must be set by the user. */
+} bcmolt_gpon_ni_stat_cfg;
+
+/** Transport message definition for "activate_all_onus_completed" group of 
+ * "gpon_ni" object. 
+ */
+typedef struct bcmolt_gpon_ni_activate_all_onus_completed
+{
+    bcmolt_auto hdr;        /**< Transport header. */
+    bcmolt_gpon_ni_key key; /**< Object key. */
+} bcmolt_gpon_ni_activate_all_onus_completed;
+
+/** Structure definition for the "cpu_packets_failure" group of the "gpon_ni" 
+ * object. 
+ *
+ * A failure was encountered during the "cpu_packets" proxy operation. 
+ */
+typedef struct bcmolt_gpon_ni_cpu_packets_failure_data
+{
+    bcmolt_packet_injection_error error;    /**< The error that was encountered. */
+    bcmolt_gpon_gem_id gem_port_id;         /**< The GEM port that caused the error. */
+} bcmolt_gpon_ni_cpu_packets_failure_data;
+
+/** Transport message definition for "cpu_packets_failure" group of "gpon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_ni_cpu_packets_failure
+{
+    bcmolt_auto hdr;        /**< Transport header. */
+    bcmolt_gpon_ni_key key; /**< Object key. */
+    bcmolt_gpon_ni_cpu_packets_failure_data data;   /**< All properties that must be set by the user. */
+} bcmolt_gpon_ni_cpu_packets_failure;
+
+/** Transport message definition for "deactivate_all_onus_completed" group of 
+ * "gpon_ni" object. 
+ */
+typedef struct bcmolt_gpon_ni_deactivate_all_onus_completed
+{
+    bcmolt_auto hdr;        /**< Transport header. */
+    bcmolt_gpon_ni_key key; /**< Object key. */
+} bcmolt_gpon_ni_deactivate_all_onus_completed;
+
+/** Transport message definition for "disable_all_onus_completed" group of 
+ * "gpon_ni" object. 
+ */
+typedef struct bcmolt_gpon_ni_disable_all_onus_completed
+{
+    bcmolt_auto hdr;        /**< Transport header. */
+    bcmolt_gpon_ni_key key; /**< Object key. */
+} bcmolt_gpon_ni_disable_all_onus_completed;
+
+/** Transport message definition for "enable_all_onus_completed" group of 
+ * "gpon_ni" object. 
+ */
+typedef struct bcmolt_gpon_ni_enable_all_onus_completed
+{
+    bcmolt_auto hdr;        /**< Transport header. */
+    bcmolt_gpon_ni_key key; /**< Object key. */
+} bcmolt_gpon_ni_enable_all_onus_completed;
+
+/** Structure definition for the "los" group of the "gpon_ni" object. 
+ */
+typedef struct bcmolt_gpon_ni_los_data
+{
+    bcmolt_status status;   /**< status. */
+} bcmolt_gpon_ni_los_data;
+
+/** Transport message definition for "los" group of "gpon_ni" object. 
+ */
+typedef struct bcmolt_gpon_ni_los
+{
+    bcmolt_auto hdr;                /**< Transport header. */
+    bcmolt_gpon_ni_key key;         /**< Object key. */
+    bcmolt_gpon_ni_los_data data;   /**< All properties that must be set by the user. */
+} bcmolt_gpon_ni_los;
+
+/** Structure definition for the "onu_discovered" group of the "gpon_ni" object. 
+ */
+typedef struct bcmolt_gpon_ni_onu_discovered_data
+{
+    bcmolt_serial_number serial_number; /**< serial number. */
+    uint32_t ranging_time;              /**< ranging time. */
+    bcmolt_gpon_onu_id onu_id;          /**< onu_id. */
+} bcmolt_gpon_ni_onu_discovered_data;
+
+/** Transport message definition for "onu_discovered" group of "gpon_ni" object. 
+ */
+typedef struct bcmolt_gpon_ni_onu_discovered
+{
+    bcmolt_auto hdr;        /**< Transport header. */
+    bcmolt_gpon_ni_key key; /**< Object key. */
+    bcmolt_gpon_ni_onu_discovered_data data;    /**< All properties that must be set by the user. */
+} bcmolt_gpon_ni_onu_discovered;
+
+/** Structure definition for the "onu_upgrade_complete" group of the "gpon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_ni_onu_upgrade_complete_data
+{
+    bcmos_bool status;  /**< Success or failure.  Against entire upgrade process. */
+    bcmolt_gpon_onu_upgrade_status_list_u32 list_of_failed_entities;    /**< List of ONU-IDs the upgrade failed for. */
+} bcmolt_gpon_ni_onu_upgrade_complete_data;
+
+/** Transport message definition for "onu_upgrade_complete" group of "gpon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_ni_onu_upgrade_complete
+{
+    bcmolt_auto hdr;        /**< Transport header. */
+    bcmolt_gpon_ni_key key; /**< Object key. */
+    bcmolt_gpon_ni_onu_upgrade_complete_data data;  /**< All properties that must be set by the user. */
+} bcmolt_gpon_ni_onu_upgrade_complete;
+
+/** Structure definition for the "protection_switching_onus_ranged" group of the 
+ * "gpon_ni" object. 
+ *
+ * After a switchover is complete and all ONU ranging times have stabilized, 
+ * this indication is sent to inform the host of all new ONU EQDs. 
+ */
+typedef struct bcmolt_gpon_ni_protection_switching_onus_ranged_data
+{
+    bcmolt_gpon_onu_eqd_list_u32 onus;  /**< ONUs. */
+} bcmolt_gpon_ni_protection_switching_onus_ranged_data;
+
+/** Transport message definition for "protection_switching_onus_ranged" group of 
+ * "gpon_ni" object. 
+ */
+typedef struct bcmolt_gpon_ni_protection_switching_onus_ranged
+{
+    bcmolt_auto hdr;        /**< Transport header. */
+    bcmolt_gpon_ni_key key; /**< Object key. */
+    bcmolt_gpon_ni_protection_switching_onus_ranged_data data;  /**< All properties that must be set by the user. */
+} bcmolt_gpon_ni_protection_switching_onus_ranged;
+
+/** Structure definition for the "protection_switching_switchover_completed" 
+ * group of the "gpon_ni" object. 
+ */
+typedef struct bcmolt_gpon_ni_protection_switching_switchover_completed_data
+{
+    bcmolt_result result;   /**< Result. */
+} bcmolt_gpon_ni_protection_switching_switchover_completed_data;
+
+/** Transport message definition for "protection_switching_switchover_completed" 
+ * group of "gpon_ni" object. 
+ */
+typedef struct bcmolt_gpon_ni_protection_switching_switchover_completed
+{
+    bcmolt_auto hdr;        /**< Transport header. */
+    bcmolt_gpon_ni_key key; /**< Object key. */
+    bcmolt_gpon_ni_protection_switching_switchover_completed_data data; /**< All properties that must be set by the user. */
+} bcmolt_gpon_ni_protection_switching_switchover_completed;
+
+/** Structure definition for the "protection_switching_traffic_resume" group of 
+ * the "gpon_ni" object. 
+ */
+typedef struct bcmolt_gpon_ni_protection_switching_traffic_resume_data
+{
+    bcmolt_traffic_resume_result result;    /**< Result. */
+} bcmolt_gpon_ni_protection_switching_traffic_resume_data;
+
+/** Transport message definition for "protection_switching_traffic_resume" group 
+ * of "gpon_ni" object. 
+ */
+typedef struct bcmolt_gpon_ni_protection_switching_traffic_resume
+{
+    bcmolt_auto hdr;        /**< Transport header. */
+    bcmolt_gpon_ni_key key; /**< Object key. */
+    bcmolt_gpon_ni_protection_switching_traffic_resume_data data;   /**< All properties that must be set by the user. */
+} bcmolt_gpon_ni_protection_switching_traffic_resume;
+
+/** Structure definition for the "rogue_detection_completed" group of the 
+ * "gpon_ni" object. 
+ */
+typedef struct bcmolt_gpon_ni_rogue_detection_completed_data
+{
+    bcmolt_rogue_detection_window window_type;          /**< Silent Window or Cut off Window */
+    bcmolt_rogue_measurement_result measurement_status; /**< Status of the rogue ONU detection result. */
+    bcmolt_gpon_alloc_id alloc_id;                      /**< Alloc-ID */
+    bcmolt_gpon_onu_id onu_id;                  /**< ONU-ID */
+    bcmos_bool is_delineation;                  /**< Burst Delineation detected during the rogue ONU detection. */
+    bcmos_bool is_ed;                           /**< Is ED. */
+    bcmolt_u8_list_u32 rx_data;                 /**< Captured PLOAMu message if the burst delinieation was detected. */
+    bcmolt_gpon_onu_id ploam_received_onu_id;   /**< ONU ID received in the ploam */
+    bcmos_bool ploam_received_crc_error;        /**< Crc error in the received ploam */
+} bcmolt_gpon_ni_rogue_detection_completed_data;
+
+/** Transport message definition for "rogue_detection_completed" group of 
+ * "gpon_ni" object. 
+ */
+typedef struct bcmolt_gpon_ni_rogue_detection_completed
+{
+    bcmolt_auto hdr;        /**< Transport header. */
+    bcmolt_gpon_ni_key key; /**< Object key. */
+    bcmolt_gpon_ni_rogue_detection_completed_data data; /**< All properties that must be set by the user. */
+} bcmolt_gpon_ni_rogue_detection_completed;
+
+/** Transport message definition for "rogue_onu_special_map_cycle_start" group 
+ * of "gpon_ni" object. 
+ */
+typedef struct bcmolt_gpon_ni_rogue_onu_special_map_cycle_start
+{
+    bcmolt_auto hdr;        /**< Transport header. */
+    bcmolt_gpon_ni_key key; /**< Object key. */
+} bcmolt_gpon_ni_rogue_onu_special_map_cycle_start;
+
+/** Transport message definition for "serial_number_acquisition_cycle_start" 
+ * group of "gpon_ni" object. 
+ */
+typedef struct bcmolt_gpon_ni_serial_number_acquisition_cycle_start
+{
+    bcmolt_auto hdr;        /**< Transport header. */
+    bcmolt_gpon_ni_key key; /**< Object key. */
+} bcmolt_gpon_ni_serial_number_acquisition_cycle_start;
+
+/** Structure definition for the "standby_pon_monitoring_cycle_completed" group 
+ * of the "gpon_ni" object. 
+ */
+typedef struct bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data
+{
+    uint32_t number_of_detected_delimiter;  /**< number of detected delimiter. */
+    bcmolt_status energy_detect_signal;     /**< energy detect signal. */
+} bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data;
+
+/** Transport message definition for "standby_pon_monitoring_cycle_completed" 
+ * group of "gpon_ni" object. 
+ */
+typedef struct bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed
+{
+    bcmolt_auto hdr;        /**< Transport header. */
+    bcmolt_gpon_ni_key key; /**< Object key. */
+    bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data data;    /**< All properties that must be set by the user. */
+} bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed;
+
+/** Structure definition for the "stat_alarm_cleared" group of the "gpon_ni" 
+ * object. 
+ *
+ * Sent when a configured statistic alarm condition is no longer met. 
+ */
+typedef struct bcmolt_gpon_ni_stat_alarm_cleared_data
+{
+    bcmolt_gpon_ni_stat_id stat;    /**< Statistic identifier. */
+} bcmolt_gpon_ni_stat_alarm_cleared_data;
+
+/** Transport message definition for "stat_alarm_cleared" group of "gpon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_ni_stat_alarm_cleared
+{
+    bcmolt_auto hdr;        /**< Transport header. */
+    bcmolt_gpon_ni_key key; /**< Object key. */
+    bcmolt_gpon_ni_stat_alarm_cleared_data data;    /**< All properties that must be set by the user. */
+} bcmolt_gpon_ni_stat_alarm_cleared;
+
+/** Structure definition for the "stat_alarm_raised" group of the "gpon_ni" 
+ * object. 
+ *
+ * Sent when a configured statistic alarm condition has been met. 
+ */
+typedef struct bcmolt_gpon_ni_stat_alarm_raised_data
+{
+    bcmolt_gpon_ni_stat_id stat;    /**< Statistic identifier. */
+} bcmolt_gpon_ni_stat_alarm_raised_data;
+
+/** Transport message definition for "stat_alarm_raised" group of "gpon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_ni_stat_alarm_raised
+{
+    bcmolt_auto hdr;        /**< Transport header. */
+    bcmolt_gpon_ni_key key; /**< Object key. */
+    bcmolt_gpon_ni_stat_alarm_raised_data data; /**< All properties that must be set by the user. */
+} bcmolt_gpon_ni_stat_alarm_raised;
+
+/** Structure definition for the "state_change_completed" group of the "gpon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_ni_state_change_completed_data
+{
+    bcmolt_result result;               /**< Result. */
+    bcmolt_pon_state previous_state;    /**< Previous state. */
+    bcmolt_pon_state new_state;         /**< New state. */
+} bcmolt_gpon_ni_state_change_completed_data;
+
+/** Transport message definition for "state_change_completed" group of "gpon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_ni_state_change_completed
+{
+    bcmolt_auto hdr;        /**< Transport header. */
+    bcmolt_gpon_ni_key key; /**< Object key. */
+    bcmolt_gpon_ni_state_change_completed_data data;    /**< All properties that must be set by the user. */
+} bcmolt_gpon_ni_state_change_completed;
+
+/** Structure definition for the "tod_request_completed" group of the "gpon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_ni_tod_request_completed_data
+{
+    bcmolt_str_64 tod_string;   /**< tod_string. */
+    uint32_t sfc;               /**< sfc. */
+    uint64_t rtc_offset_sec;    /**< rtc_offset_sec. */
+    uint32_t rtc_offset_nsec;   /**< rtc_offset_nsec. */
+    bcmolt_result status;       /**< status. */
+} bcmolt_gpon_ni_tod_request_completed_data;
+
+/** Transport message definition for "tod_request_completed" group of "gpon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_ni_tod_request_completed
+{
+    bcmolt_auto hdr;        /**< Transport header. */
+    bcmolt_gpon_ni_key key; /**< Object key. */
+    bcmolt_gpon_ni_tod_request_completed_data data; /**< All properties that must be set by the user. */
+} bcmolt_gpon_ni_tod_request_completed;
+
+/** Structure definition for the "auto_cfg" group of the "gpon_ni" object. 
+ */
+typedef struct bcmolt_gpon_ni_auto_cfg_data
+{
+    bcmos_bool activate_all_onus_completed;     /**< If true, indications of type "activate_all_onus_completed" will be generated. */
+    bcmos_bool cpu_packets_failure;             /**< If true, indications of type "cpu_packets_failure" will be generated. */
+    bcmos_bool deactivate_all_onus_completed;   /**< If true, indications of type "deactivate_all_onus_completed" will be generated. */
+    bcmos_bool disable_all_onus_completed;      /**< If true, indications of type "disable_all_onus_completed" will be generated. */
+    bcmos_bool enable_all_onus_completed;       /**< If true, indications of type "enable_all_onus_completed" will be generated. */
+    bcmos_bool los;                     /**< If true, indications of type "los" will be generated. */
+    bcmos_bool onu_discovered;          /**< If true, indications of type "onu_discovered" will be generated. */
+    bcmos_bool onu_upgrade_complete;    /**< If true, indications of type "onu_upgrade_complete" will be generated. */
+    bcmos_bool protection_switching_onus_ranged;            /**< If true, indications of type "protection_switching_onus_ranged" will be generated. */
+    bcmos_bool protection_switching_switchover_completed;   /**< If true, indications of type "protection_switching_switchover_completed" will be generated. */
+    bcmos_bool protection_switching_traffic_resume;         /**< If true, indications of type "protection_switching_traffic_resume" will be generated. */
+    bcmos_bool rogue_detection_completed;                   /**< If true, indications of type "rogue_detection_completed" will be generated. */
+    bcmos_bool rogue_onu_special_map_cycle_start;           /**< If true, indications of type "rogue_onu_special_map_cycle_start" will be generated. */
+    bcmos_bool serial_number_acquisition_cycle_start;       /**< If true, indications of type "serial_number_acquisition_cycle_start" will be generated. */
+    bcmos_bool standby_pon_monitoring_cycle_completed;      /**< If true, indications of type "standby_pon_monitoring_cycle_completed" will be generated. */
+    bcmos_bool stat_alarm_cleared;      /**< If true, indications of type "stat_alarm_cleared" will be generated. */
+    bcmos_bool stat_alarm_raised;       /**< If true, indications of type "stat_alarm_raised" will be generated. */
+    bcmos_bool state_change_completed;  /**< If true, indications of type "state_change_completed" will be generated. */
+    bcmos_bool tod_request_completed;   /**< If true, indications of type "tod_request_completed" will be generated. */
+} bcmolt_gpon_ni_auto_cfg_data;
+
+/** Transport message definition for "auto_cfg" group of "gpon_ni" object. 
+ */
+typedef struct bcmolt_gpon_ni_auto_cfg
+{
+    bcmolt_auto_cfg hdr;                /**< Transport header. */
+    bcmolt_gpon_ni_key key;             /**< Object key. */
+    bcmolt_gpon_ni_auto_cfg_data data;  /**< All properties that must be set by the user. */
+} bcmolt_gpon_ni_auto_cfg;
+
+/** Structure definition for the "disable_serial_number" group of the "gpon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_ni_disable_serial_number_data
+{
+    bcmolt_disable_serial_number_control control;   /**< control. */
+    bcmolt_serial_number serial_number;             /**< serial number. */
+} bcmolt_gpon_ni_disable_serial_number_data;
+
+/** Transport message definition for "disable_serial_number" group of "gpon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_ni_disable_serial_number
+{
+    bcmolt_oper hdr;        /**< Transport header. */
+    bcmolt_gpon_ni_key key; /**< Object key. */
+    bcmolt_gpon_ni_disable_serial_number_data data; /**< All properties that must be set by the user. */
+} bcmolt_gpon_ni_disable_serial_number;
+
+/** Structure definition for the 
+ * "protection_switching_type_c_set_multiple_onu_state" group of the "gpon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data
+{
+    bcmolt_switch_over_type_c_onu_state onu_state;  /**< onu state. */
+    bcmolt_gpon_onu_id_list_u32_max_256 onu_list;   /**< onu list. */
+} bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data;
+
+/** Transport message definition for 
+ * "protection_switching_type_c_set_multiple_onu_state" group of "gpon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state
+{
+    bcmolt_oper hdr;        /**< Transport header. */
+    bcmolt_gpon_ni_key key; /**< Object key. */
+    bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data data;    /**< All properties that must be set by the user. */
+} bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state;
+
+/** Transport message definition for "reset" group of "gpon_ni" object. 
+ */
+typedef struct bcmolt_gpon_ni_reset
+{
+    bcmolt_oper hdr;        /**< Transport header. */
+    bcmolt_gpon_ni_key key; /**< Object key. */
+} bcmolt_gpon_ni_reset;
+
+/** Structure definition for the "rogue_detection_window" group of the "gpon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_ni_rogue_detection_window_data
+{
+    bcmolt_rogue_detection_window window_type;  /**< Type of silent measurement to execute */
+    bcmolt_gpon_alloc_id alloc_id;              /**< ALLOC ID to scan */
+    bcmolt_gpon_onu_id onu_id;                  /**< ONU ID to scan */
+    bcmos_bool second_ranging_window;           /**< Not currently supported */
+} bcmolt_gpon_ni_rogue_detection_window_data;
+
+/** Transport message definition for "rogue_detection_window" group of "gpon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_ni_rogue_detection_window
+{
+    bcmolt_oper hdr;        /**< Transport header. */
+    bcmolt_gpon_ni_key key; /**< Object key. */
+    bcmolt_gpon_ni_rogue_detection_window_data data;    /**< All properties that must be set by the user. */
+} bcmolt_gpon_ni_rogue_detection_window;
+
+/** Structure definition for the "set_onu_state" group of the "gpon_ni" object. 
+ *
+ * Set the operation state of all ONUs. 
+ */
+typedef struct bcmolt_gpon_ni_set_onu_state_data
+{
+    bcmolt_onu_operation onu_state; /**< New operation state of all ONUs.  The default operation may be configured by the GPON NI configuration object : gpon_ni.cfg.sn_acquisition. */
+} bcmolt_gpon_ni_set_onu_state_data;
+
+/** Transport message definition for "set_onu_state" group of "gpon_ni" object. 
+ */
+typedef struct bcmolt_gpon_ni_set_onu_state
+{
+    bcmolt_oper hdr;                        /**< Transport header. */
+    bcmolt_gpon_ni_key key;                 /**< Object key. */
+    bcmolt_gpon_ni_set_onu_state_data data; /**< All properties that must be set by the user. */
+} bcmolt_gpon_ni_set_onu_state;
+
+/** Structure definition for the "set_pon_state" group of the "gpon_ni" object. 
+ */
+typedef struct bcmolt_gpon_ni_set_pon_state_data
+{
+    bcmolt_pon_operation pon_state; /**< PON state. */
+} bcmolt_gpon_ni_set_pon_state_data;
+
+/** Transport message definition for "set_pon_state" group of "gpon_ni" object. 
+ */
+typedef struct bcmolt_gpon_ni_set_pon_state
+{
+    bcmolt_oper hdr;                        /**< Transport header. */
+    bcmolt_gpon_ni_key key;                 /**< Object key. */
+    bcmolt_gpon_ni_set_pon_state_data data; /**< All properties that must be set by the user. */
+} bcmolt_gpon_ni_set_pon_state;
+
+/** Transport message definition for "single_request_standby_pon_monitoring" 
+ * group of "gpon_ni" object. 
+ */
+typedef struct bcmolt_gpon_ni_single_request_standby_pon_monitoring
+{
+    bcmolt_oper hdr;        /**< Transport header. */
+    bcmolt_gpon_ni_key key; /**< Object key. */
+} bcmolt_gpon_ni_single_request_standby_pon_monitoring;
+
+/** Structure definition for the "start_onu_upgrade" group of the "gpon_ni" 
+ * object. 
+ *
+ * OLT to ONU firmware transfer 
+ */
+typedef struct bcmolt_gpon_ni_start_onu_upgrade_data
+{
+    bcmolt_pon_onu_id_list_u32 list_of_onu_ids; /**< List of ONU IDs to upgrade the firmware. */
+} bcmolt_gpon_ni_start_onu_upgrade_data;
+
+/** Transport message definition for "start_onu_upgrade" group of "gpon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_ni_start_onu_upgrade
+{
+    bcmolt_oper hdr;        /**< Transport header. */
+    bcmolt_gpon_ni_key key; /**< Object key. */
+    bcmolt_gpon_ni_start_onu_upgrade_data data; /**< All properties that must be set by the user. */
+} bcmolt_gpon_ni_start_onu_upgrade;
+
+/** Transport message definition for "tod_request" group of "gpon_ni" object. 
+ */
+typedef struct bcmolt_gpon_ni_tod_request
+{
+    bcmolt_oper hdr;        /**< Transport header. */
+    bcmolt_gpon_ni_key key; /**< Object key. */
+} bcmolt_gpon_ni_tod_request;
+
+/** Structure definition for the "broadcast_ploam_packet" group of the "gpon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_ni_broadcast_ploam_packet_data
+{
+#define BCMOLT_GPON_NI_BROADCAST_PLOAM_PACKET_DATA_PLOAM_LEN    12
+    bcmolt_arr_u8_12 ploam; /**< ploam. */
+} bcmolt_gpon_ni_broadcast_ploam_packet_data;
+
+/** Transport message definition for "broadcast_ploam_packet" group of "gpon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_ni_broadcast_ploam_packet
+{
+    bcmolt_proxy hdr;       /**< Transport header. */
+    bcmolt_gpon_ni_key key; /**< Object key. */
+    bcmolt_gpon_ni_broadcast_ploam_packet_data data;    /**< All properties that must be set by the user. */
+} bcmolt_gpon_ni_broadcast_ploam_packet;
+
+/** Structure definition for the "cpu_packets" group of the "gpon_ni" object. 
+ */
+typedef struct bcmolt_gpon_ni_cpu_packets_data
+{
+    bcmolt_packet_type packet_type;                     /**< packet type. */
+    bcmos_bool calc_crc;                                /**< calc crc. */
+    bcmolt_gpon_gem_id_list_u8_max_16 gem_port_list;    /**< gem port list. */
+    bcmolt_u8_list_u32_max_2048 buffer;                 /**< buffer. */
+} bcmolt_gpon_ni_cpu_packets_data;
+
+/** Transport message definition for "cpu_packets" group of "gpon_ni" object. 
+ */
+typedef struct bcmolt_gpon_ni_cpu_packets
+{
+    bcmolt_proxy hdr;                       /**< Transport header. */
+    bcmolt_gpon_ni_key key;                 /**< Object key. */
+    bcmolt_gpon_ni_cpu_packets_data data;   /**< All properties that must be set by the user. */
+} bcmolt_gpon_ni_cpu_packets;
+
+/** Structure definition for the "key" group of the "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_key
+{
+    bcmolt_gpon_ni pon_ni;      /**< PON network interface. */
+    bcmolt_gpon_onu_id onu_id;  /**< ONU ID. */
+} bcmolt_gpon_onu_key;
+
+/** Structure definition for the "cfg" group of the "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_cfg_data
+{
+    bcmolt_onu_state onu_state;         /**< Current ONU state */
+    bcmolt_serial_number serial_number; /**< ONU serial number */
+#define BCMOLT_GPON_ONU_CFG_DATA_PASSWORD_LEN   10
+    bcmolt_arr_u8_10 password;          /**< ONU password */
+    bcmos_bool auto_password_learning;  /**< Enable\Disable automatic password learning */
+    bcmos_bool us_fec;                  /**< Enable\Disable US FEC for ONU */
+    bcmolt_gpon_gem_id omci_port_id;    /**< OMCI port ID  */
+    bcmolt_ber_interval ds_ber_reporting_interval;  /**< DS BER reporting interval */
+    bcmolt_aes_key aes_encryption_key;              /**< AES encryption key.  */
+    bcmolt_gpon_onu_alarm_state alarm_state;        /**< State of all ONU alarms.  This is normally read-only and can only be written when the PON is in active-standby mode to keep the ONU in sync. */
+    uint32_t ranging_time;                  /**< ONU ranging time.  This is normally read-only and can only be written when the PON is in active-standby mode to keep the ONU in sync. */
+    bcmolt_status disabled_after_discovery; /**< This ONU was disabled after SN discovery */
+    bcmolt_deactivation_reason deactivation_reason;                 /**< Reason for the last ONU deactivation */
+    bcmolt_gpon_gem_port_with_state_list_u16_max_256 all_gem_ports; /**< All unicast GEM ports currently provisioned on this ONU. */
+    bcmolt_gpon_alloc_with_state_list_u16_max_32 all_allocs;        /**< All alloc IDs currently provisioned on this ONU. */
+    bcmos_bool onu_ps_type_c;                       /**< onu protection switching type c. */
+    bcmolt_extended_guard_time extended_guard_time; /**< Additional guard time (in bytes) for this ONU. */
+} bcmolt_gpon_onu_cfg_data;
+
+/** Transport message definition for "cfg" group of "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_cfg
+{
+    bcmolt_cfg hdr;                 /**< Transport header. */
+    bcmolt_gpon_onu_key key;        /**< Object key. */
+    bcmolt_gpon_onu_cfg_data data;  /**< All properties that must be set by the user. */
+} bcmolt_gpon_onu_cfg;
+
+/** Structure definition for the "stat" group of the "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_stat_data
+{
+    uint64_t fec_codewords;             /**< Total received FEC codewords. */
+    uint64_t fec_bytes_corrected;       /**< FEC codewords corrected bytes. */
+    uint64_t fec_codewords_corrected;   /**< FEC corrected codewords error . */
+    uint64_t fec_codewords_uncorrected; /**< FEC not corrected codewords error. */
+    uint64_t bip8_bytes;                /**< Received bytes for BIP8. */
+    uint64_t bip8_errors;               /**< Bit error according to BIP8. */
+    uint64_t rx_ploams_crc_error;       /**< Received PLOAMs with CRC error. */
+    uint64_t rx_ploams_non_idle;        /**< Received non idle PLOAMs. */
+    uint64_t positive_drift;            /**< Positive drift. */
+    uint64_t negative_drift;            /**< Negative drift. */
+    uint64_t rx_omci;                   /**< Received OMCI packets. */
+    uint64_t rx_omci_packets_crc_error; /**< Received OMCI packets with CRC errors. */
+    uint64_t ber_reported;              /**< BER reported. */
+    uint64_t unreceived_burst;          /**< Unreceived burst. */
+    uint64_t lcdg_errors;               /**< LCDG errors. */
+    uint64_t rdi_errors;                /**< RDI errors. */
+    uint64_t rx_bytes;                  /**< rx bytes. */
+    uint64_t rx_packets;                /**< rx packets. */
+    uint64_t tx_bytes;                  /**< tx bytes. */
+    uint64_t tx_packets;                /**< tx packets. */
+} bcmolt_gpon_onu_stat_data;
+
+/** Transport message definition for "stat" group of "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_stat
+{
+    bcmolt_stat hdr;                /**< Transport header. */
+    bcmolt_gpon_onu_key key;        /**< Object key. */
+    bcmolt_gpon_onu_stat_data data; /**< All properties that must be set by the user. */
+} bcmolt_gpon_onu_stat;
+
+/** Structure definition for the "stat_cfg" group of the "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_stat_cfg_data
+{
+    bcmolt_stat_alarm_config cfg;   /**< Statistic alarm configuration. */
+} bcmolt_gpon_onu_stat_cfg_data;
+
+/** Transport message definition for "stat_cfg" group of "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_stat_cfg
+{
+    bcmolt_stat_cfg hdr;                /**< Transport header. */
+    bcmolt_gpon_onu_key key;            /**< Object key. */
+    bcmolt_gpon_onu_stat_cfg_data data; /**< All properties that must be set by the user. */
+} bcmolt_gpon_onu_stat_cfg;
+
+/** Structure definition for the "ber_interval_configuration_completed" group of 
+ * the "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_ber_interval_configuration_completed_data
+{
+    bcmolt_ber_interval ber_interval;   /**< BER interval in ms. */
+    bcmolt_result result;               /**< Result. */
+} bcmolt_gpon_onu_ber_interval_configuration_completed_data;
+
+/** Transport message definition for "ber_interval_configuration_completed" 
+ * group of "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_ber_interval_configuration_completed
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_gpon_onu_key key;    /**< Object key. */
+    bcmolt_gpon_onu_ber_interval_configuration_completed_data data; /**< All properties that must be set by the user. */
+} bcmolt_gpon_onu_ber_interval_configuration_completed;
+
+/** Structure definition for the "dfi" group of the "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_dfi_data
+{
+    bcmolt_status alarm_status; /**< alarm status. */
+} bcmolt_gpon_onu_dfi_data;
+
+/** Transport message definition for "dfi" group of "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_dfi
+{
+    bcmolt_auto hdr;                /**< Transport header. */
+    bcmolt_gpon_onu_key key;        /**< Object key. */
+    bcmolt_gpon_onu_dfi_data data;  /**< All properties that must be set by the user. */
+} bcmolt_gpon_onu_dfi;
+
+/** Structure definition for the "dgi" group of the "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_dgi_data
+{
+    bcmolt_status alarm_status; /**< alarm status. */
+} bcmolt_gpon_onu_dgi_data;
+
+/** Transport message definition for "dgi" group of "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_dgi
+{
+    bcmolt_auto hdr;                /**< Transport header. */
+    bcmolt_gpon_onu_key key;        /**< Object key. */
+    bcmolt_gpon_onu_dgi_data data;  /**< All properties that must be set by the user. */
+} bcmolt_gpon_onu_dgi;
+
+/** Structure definition for the "dowi" group of the "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_dowi_data
+{
+    bcmolt_status alarm_status; /**< Alarm status. */
+    int32_t drift_value;        /**< Calculated amount of drift (positive + negative as a signed value). */
+    uint32_t new_eqd;           /**< New EQD after drift is corrected (only valid if status is 'on'). */
+} bcmolt_gpon_onu_dowi_data;
+
+/** Transport message definition for "dowi" group of "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_dowi
+{
+    bcmolt_auto hdr;                /**< Transport header. */
+    bcmolt_gpon_onu_key key;        /**< Object key. */
+    bcmolt_gpon_onu_dowi_data data; /**< All properties that must be set by the user. */
+} bcmolt_gpon_onu_dowi;
+
+/** Structure definition for the "err" group of the "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_err_data
+{
+    uint8_t bip8_errors;    /**< BIP8 errors. */
+} bcmolt_gpon_onu_err_data;
+
+/** Transport message definition for "err" group of "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_err
+{
+    bcmolt_auto hdr;                /**< Transport header. */
+    bcmolt_gpon_onu_key key;        /**< Object key. */
+    bcmolt_gpon_onu_err_data data;  /**< All properties that must be set by the user. */
+} bcmolt_gpon_onu_err;
+
+/** Structure definition for the "invalid_dbru_report" group of the "gpon_onu" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_onu_invalid_dbru_report_data
+{
+    bcmolt_gpon_alloc_id alloc_id;  /**< Alloc-ID. */
+} bcmolt_gpon_onu_invalid_dbru_report_data;
+
+/** Transport message definition for "invalid_dbru_report" group of "gpon_onu" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_onu_invalid_dbru_report
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_gpon_onu_key key;    /**< Object key. */
+    bcmolt_gpon_onu_invalid_dbru_report_data data;  /**< All properties that must be set by the user. */
+} bcmolt_gpon_onu_invalid_dbru_report;
+
+/** Structure definition for the "key_exchange_completed" group of the 
+ * "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_key_exchange_completed_data
+{
+    bcmolt_aes_key new_key; /**< new key. */
+} bcmolt_gpon_onu_key_exchange_completed_data;
+
+/** Transport message definition for "key_exchange_completed" group of 
+ * "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_key_exchange_completed
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_gpon_onu_key key;    /**< Object key. */
+    bcmolt_gpon_onu_key_exchange_completed_data data;   /**< All properties that must be set by the user. */
+} bcmolt_gpon_onu_key_exchange_completed;
+
+/** Transport message definition for "key_exchange_cycle_skipped" group of 
+ * "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_key_exchange_cycle_skipped
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_gpon_onu_key key;    /**< Object key. */
+} bcmolt_gpon_onu_key_exchange_cycle_skipped;
+
+/** Structure definition for the "key_exchange_decrypt_required" group of the 
+ * "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_key_exchange_decrypt_required_data
+{
+    bcmolt_aes_key new_key; /**< new key. */
+} bcmolt_gpon_onu_key_exchange_decrypt_required_data;
+
+/** Transport message definition for "key_exchange_decrypt_required" group of 
+ * "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_key_exchange_decrypt_required
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_gpon_onu_key key;    /**< Object key. */
+    bcmolt_gpon_onu_key_exchange_decrypt_required_data data;    /**< All properties that must be set by the user. */
+} bcmolt_gpon_onu_key_exchange_decrypt_required;
+
+/** Structure definition for the "key_exchange_key_mismatch" group of the 
+ * "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_key_exchange_key_mismatch_data
+{
+    bcmolt_aes_key expected_key;    /**< expected key. */
+    bcmolt_aes_key received_key;    /**< received key. */
+} bcmolt_gpon_onu_key_exchange_key_mismatch_data;
+
+/** Transport message definition for "key_exchange_key_mismatch" group of 
+ * "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_key_exchange_key_mismatch
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_gpon_onu_key key;    /**< Object key. */
+    bcmolt_gpon_onu_key_exchange_key_mismatch_data data;    /**< All properties that must be set by the user. */
+} bcmolt_gpon_onu_key_exchange_key_mismatch;
+
+/** Transport message definition for "key_exchange_key_request_timeout" group of 
+ * "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_key_exchange_key_request_timeout
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_gpon_onu_key key;    /**< Object key. */
+} bcmolt_gpon_onu_key_exchange_key_request_timeout;
+
+/** Structure definition for the "key_exchange_unconsecutive_index" group of the 
+ * "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_key_exchange_unconsecutive_index_data
+{
+    uint32_t expected_index;    /**< expected index. */
+    uint32_t actual_index;      /**< actual index. */
+} bcmolt_gpon_onu_key_exchange_unconsecutive_index_data;
+
+/** Transport message definition for "key_exchange_unconsecutive_index" group of 
+ * "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_key_exchange_unconsecutive_index
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_gpon_onu_key key;    /**< Object key. */
+    bcmolt_gpon_onu_key_exchange_unconsecutive_index_data data; /**< All properties that must be set by the user. */
+} bcmolt_gpon_onu_key_exchange_unconsecutive_index;
+
+/** Structure definition for the "loai" group of the "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_loai_data
+{
+    bcmolt_status alarm_status; /**< alarm status. */
+} bcmolt_gpon_onu_loai_data;
+
+/** Transport message definition for "loai" group of "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_loai
+{
+    bcmolt_auto hdr;                /**< Transport header. */
+    bcmolt_gpon_onu_key key;        /**< Object key. */
+    bcmolt_gpon_onu_loai_data data; /**< All properties that must be set by the user. */
+} bcmolt_gpon_onu_loai;
+
+/** Structure definition for the "loki" group of the "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_loki_data
+{
+    bcmolt_status alarm_status; /**< alarm status. */
+} bcmolt_gpon_onu_loki_data;
+
+/** Transport message definition for "loki" group of "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_loki
+{
+    bcmolt_auto hdr;                /**< Transport header. */
+    bcmolt_gpon_onu_key key;        /**< Object key. */
+    bcmolt_gpon_onu_loki_data data; /**< All properties that must be set by the user. */
+} bcmolt_gpon_onu_loki;
+
+/** Structure definition for the "memi" group of the "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_memi_data
+{
+#define BCMOLT_GPON_ONU_MEMI_DATA_PLOAM_BUFFER_LEN  13
+    bcmolt_arr_u8_13 ploam_buffer;  /**< PLOAM buffer. */
+} bcmolt_gpon_onu_memi_data;
+
+/** Transport message definition for "memi" group of "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_memi
+{
+    bcmolt_auto hdr;                /**< Transport header. */
+    bcmolt_gpon_onu_key key;        /**< Object key. */
+    bcmolt_gpon_onu_memi_data data; /**< All properties that must be set by the user. */
+} bcmolt_gpon_onu_memi;
+
+/** Structure definition for the "omci_port_id_configuration_completed" group of 
+ * the "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_omci_port_id_configuration_completed_data
+{
+    bcmolt_gpon_gem_id gem_port;    /**< GEM Port ID. */
+    bcmolt_result status;           /**< status. */
+    bcmolt_omci_port_id_operation operation;    /**< Operation. */
+} bcmolt_gpon_onu_omci_port_id_configuration_completed_data;
+
+/** Transport message definition for "omci_port_id_configuration_completed" 
+ * group of "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_omci_port_id_configuration_completed
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_gpon_onu_key key;    /**< Object key. */
+    bcmolt_gpon_onu_omci_port_id_configuration_completed_data data; /**< All properties that must be set by the user. */
+} bcmolt_gpon_onu_omci_port_id_configuration_completed;
+
+/** Structure definition for the "onu_activation_completed" group of the 
+ * "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_onu_activation_completed_data
+{
+    bcmolt_result status;                       /**< status. */
+    bcmolt_activation_fail_reason fail_reason;  /**< fail reason. */
+} bcmolt_gpon_onu_onu_activation_completed_data;
+
+/** Transport message definition for "onu_activation_completed" group of 
+ * "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_onu_activation_completed
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_gpon_onu_key key;    /**< Object key. */
+    bcmolt_gpon_onu_onu_activation_completed_data data; /**< All properties that must be set by the user. */
+} bcmolt_gpon_onu_onu_activation_completed;
+
+/** Structure definition for the "onu_activation_standby_completed" group of the 
+ * "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_onu_activation_standby_completed_data
+{
+    bcmolt_result result;   /**< result. */
+} bcmolt_gpon_onu_onu_activation_standby_completed_data;
+
+/** Transport message definition for "onu_activation_standby_completed" group of 
+ * "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_onu_activation_standby_completed
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_gpon_onu_key key;    /**< Object key. */
+    bcmolt_gpon_onu_onu_activation_standby_completed_data data; /**< All properties that must be set by the user. */
+} bcmolt_gpon_onu_onu_activation_standby_completed;
+
+/** Structure definition for the "onu_alarm" group of the "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_onu_alarm_data
+{
+    bcmolt_gpon_onu_alarms onu_alarm;   /**< onu alarm. */
+} bcmolt_gpon_onu_onu_alarm_data;
+
+/** Transport message definition for "onu_alarm" group of "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_onu_alarm
+{
+    bcmolt_auto hdr;                        /**< Transport header. */
+    bcmolt_gpon_onu_key key;                /**< Object key. */
+    bcmolt_gpon_onu_onu_alarm_data data;    /**< All properties that must be set by the user. */
+} bcmolt_gpon_onu_onu_alarm;
+
+/** Structure definition for the "onu_deactivation_completed" group of the 
+ * "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_onu_deactivation_completed_data
+{
+    bcmolt_result status;   /**< status. */
+} bcmolt_gpon_onu_onu_deactivation_completed_data;
+
+/** Transport message definition for "onu_deactivation_completed" group of 
+ * "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_onu_deactivation_completed
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_gpon_onu_key key;    /**< Object key. */
+    bcmolt_gpon_onu_onu_deactivation_completed_data data;   /**< All properties that must be set by the user. */
+} bcmolt_gpon_onu_onu_deactivation_completed;
+
+/** Structure definition for the "onu_disable_completed" group of the "gpon_onu" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_onu_onu_disable_completed_data
+{
+    bcmolt_serial_number serial_number; /**< serial number. */
+} bcmolt_gpon_onu_onu_disable_completed_data;
+
+/** Transport message definition for "onu_disable_completed" group of "gpon_onu" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_onu_onu_disable_completed
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_gpon_onu_key key;    /**< Object key. */
+    bcmolt_gpon_onu_onu_disable_completed_data data;    /**< All properties that must be set by the user. */
+} bcmolt_gpon_onu_onu_disable_completed;
+
+/** Structure definition for the "onu_enable_completed" group of the "gpon_onu" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_onu_onu_enable_completed_data
+{
+    bcmolt_serial_number serial_number; /**< serial number. */
+} bcmolt_gpon_onu_onu_enable_completed_data;
+
+/** Transport message definition for "onu_enable_completed" group of "gpon_onu" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_onu_onu_enable_completed
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_gpon_onu_key key;    /**< Object key. */
+    bcmolt_gpon_onu_onu_enable_completed_data data; /**< All properties that must be set by the user. */
+} bcmolt_gpon_onu_onu_enable_completed;
+
+/** Transport message definition for "optical_reflection" group of "gpon_onu" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_onu_optical_reflection
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_gpon_onu_key key;    /**< Object key. */
+} bcmolt_gpon_onu_optical_reflection;
+
+/** Structure definition for the "password_authentication_completed" group of 
+ * the "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_password_authentication_completed_data
+{
+    bcmolt_result status;   /**< status. */
+    bcmolt_password_authentication_fail_reason fail_reason; /**< fail reason. */
+#define BCMOLT_GPON_ONU_PASSWORD_AUTHENTICATION_COMPLETED_DATA_PASSWORD_LEN 10
+    bcmolt_arr_u8_10 password;  /**< password. */
+} bcmolt_gpon_onu_password_authentication_completed_data;
+
+/** Transport message definition for "password_authentication_completed" group 
+ * of "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_password_authentication_completed
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_gpon_onu_key key;    /**< Object key. */
+    bcmolt_gpon_onu_password_authentication_completed_data data;    /**< All properties that must be set by the user. */
+} bcmolt_gpon_onu_password_authentication_completed;
+
+/** Structure definition for the "pee" group of the "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_pee_data
+{
+    bcmolt_status alarm_status; /**< alarm status. */
+} bcmolt_gpon_onu_pee_data;
+
+/** Transport message definition for "pee" group of "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_pee
+{
+    bcmolt_auto hdr;                /**< Transport header. */
+    bcmolt_gpon_onu_key key;        /**< Object key. */
+    bcmolt_gpon_onu_pee_data data;  /**< All properties that must be set by the user. */
+} bcmolt_gpon_onu_pee;
+
+/** Structure definition for the "possible_drift" group of the "gpon_onu" 
+ * object. 
+ *
+ * An ONU in a low power state may be experiencing drift beyond the configured 
+ * threshold. The estimate may be inaccurate depending on ONU behavior. Actual 
+ * drift may be less than estimated. 
+ */
+typedef struct bcmolt_gpon_onu_possible_drift_data
+{
+    bcmolt_status alarm_status; /**< On: estimated drift has exceeded the configured threshold. */
+    int32_t estimated_drift;    /**< If status is on, the estimated drift value, otherwise zero (0). */
+} bcmolt_gpon_onu_possible_drift_data;
+
+/** Transport message definition for "possible_drift" group of "gpon_onu" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_onu_possible_drift
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_gpon_onu_key key;    /**< Object key. */
+    bcmolt_gpon_onu_possible_drift_data data;   /**< All properties that must be set by the user. */
+} bcmolt_gpon_onu_possible_drift;
+
+/** Structure definition for the "power_management_state_change" group of the 
+ * "gpon_onu" object. 
+ *
+ * Notification that an ONUs power management state has changed. 
+ */
+typedef struct bcmolt_gpon_onu_power_management_state_change_data
+{
+    bcmolt_onu_state old_state; /**< The state the ONU was previously in. */
+    bcmolt_onu_state new_state; /**< The state the ONU is currently in. */
+    bcmolt_power_management_transition_reason reason;   /**< The reason for the state change. */
+} bcmolt_gpon_onu_power_management_state_change_data;
+
+/** Transport message definition for "power_management_state_change" group of 
+ * "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_power_management_state_change
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_gpon_onu_key key;    /**< Object key. */
+    bcmolt_gpon_onu_power_management_state_change_data data;    /**< All properties that must be set by the user. */
+} bcmolt_gpon_onu_power_management_state_change;
+
+/** Structure definition for the "pst" group of the "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_pst_data
+{
+    uint32_t link_number;   /**< link number. */
+    uint8_t k1;             /**< K1. */
+    uint8_t k2;             /**< K2. */
+} bcmolt_gpon_onu_pst_data;
+
+/** Transport message definition for "pst" group of "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_pst
+{
+    bcmolt_auto hdr;                /**< Transport header. */
+    bcmolt_gpon_onu_key key;        /**< Object key. */
+    bcmolt_gpon_onu_pst_data data;  /**< All properties that must be set by the user. */
+} bcmolt_gpon_onu_pst;
+
+/** Structure definition for the "ranging_completed" group of the "gpon_onu" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_onu_ranging_completed_data
+{
+    bcmolt_result status;                   /**< status. */
+    bcmolt_ranging_fail_reason fail_reason; /**< fail reason. */
+    uint8_t number_of_ploams;               /**< number of PLOAMs. */
+    uint32_t eqd;           /**< EQD. */
+    uint8_t power_level;    /**< Power Level. */
+} bcmolt_gpon_onu_ranging_completed_data;
+
+/** Transport message definition for "ranging_completed" group of "gpon_onu" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_onu_ranging_completed
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_gpon_onu_key key;    /**< Object key. */
+    bcmolt_gpon_onu_ranging_completed_data data;    /**< All properties that must be set by the user. */
+} bcmolt_gpon_onu_ranging_completed;
+
+/** Structure definition for the "rei" group of the "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_rei_data
+{
+    uint32_t bip8_errors;   /**< BIP8 errors. */
+} bcmolt_gpon_onu_rei_data;
+
+/** Transport message definition for "rei" group of "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_rei
+{
+    bcmolt_auto hdr;                /**< Transport header. */
+    bcmolt_gpon_onu_key key;        /**< Object key. */
+    bcmolt_gpon_onu_rei_data data;  /**< All properties that must be set by the user. */
+} bcmolt_gpon_onu_rei;
+
+/** Structure definition for the "rssi_measurement_completed" group of the 
+ * "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_rssi_measurement_completed_data
+{
+    bcmolt_result status;   /**< status. */
+    bcmolt_rssi_measurement_fail_reason fail_reason;    /**< fail reason. */
+} bcmolt_gpon_onu_rssi_measurement_completed_data;
+
+/** Transport message definition for "rssi_measurement_completed" group of 
+ * "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_rssi_measurement_completed
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_gpon_onu_key key;    /**< Object key. */
+    bcmolt_gpon_onu_rssi_measurement_completed_data data;   /**< All properties that must be set by the user. */
+} bcmolt_gpon_onu_rssi_measurement_completed;
+
+/** Structure definition for the "sdi" group of the "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_sdi_data
+{
+    bcmolt_status alarm_status; /**< alarm status. */
+    uint32_t ber;               /**< Inverse bit error rate (e.g. if this number is 1000, the BER is 1/1000). */
+} bcmolt_gpon_onu_sdi_data;
+
+/** Transport message definition for "sdi" group of "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_sdi
+{
+    bcmolt_auto hdr;                /**< Transport header. */
+    bcmolt_gpon_onu_key key;        /**< Object key. */
+    bcmolt_gpon_onu_sdi_data data;  /**< All properties that must be set by the user. */
+} bcmolt_gpon_onu_sdi;
+
+/** Structure definition for the "sfi" group of the "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_sfi_data
+{
+    bcmolt_status alarm_status; /**< alarm status. */
+    uint32_t ber;               /**< Inverse bit error rate (e.g. if this number is 1000, the BER is 1/1000). */
+} bcmolt_gpon_onu_sfi_data;
+
+/** Transport message definition for "sfi" group of "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_sfi
+{
+    bcmolt_auto hdr;                /**< Transport header. */
+    bcmolt_gpon_onu_key key;        /**< Object key. */
+    bcmolt_gpon_onu_sfi_data data;  /**< All properties that must be set by the user. */
+} bcmolt_gpon_onu_sfi;
+
+/** Structure definition for the "stat_alarm_cleared" group of the "gpon_onu" 
+ * object. 
+ *
+ * Sent when a configured statistic alarm condition is no longer met. 
+ */
+typedef struct bcmolt_gpon_onu_stat_alarm_cleared_data
+{
+    bcmolt_gpon_onu_stat_id stat;   /**< Statistic identifier. */
+} bcmolt_gpon_onu_stat_alarm_cleared_data;
+
+/** Transport message definition for "stat_alarm_cleared" group of "gpon_onu" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_onu_stat_alarm_cleared
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_gpon_onu_key key;    /**< Object key. */
+    bcmolt_gpon_onu_stat_alarm_cleared_data data;   /**< All properties that must be set by the user. */
+} bcmolt_gpon_onu_stat_alarm_cleared;
+
+/** Structure definition for the "stat_alarm_raised" group of the "gpon_onu" 
+ * object. 
+ *
+ * Sent when a configured statistic alarm condition has been met. 
+ */
+typedef struct bcmolt_gpon_onu_stat_alarm_raised_data
+{
+    bcmolt_gpon_onu_stat_id stat;   /**< Statistic identifier. */
+} bcmolt_gpon_onu_stat_alarm_raised_data;
+
+/** Transport message definition for "stat_alarm_raised" group of "gpon_onu" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_onu_stat_alarm_raised
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_gpon_onu_key key;    /**< Object key. */
+    bcmolt_gpon_onu_stat_alarm_raised_data data;    /**< All properties that must be set by the user. */
+} bcmolt_gpon_onu_stat_alarm_raised;
+
+/** Structure definition for the "sufi" group of the "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_sufi_data
+{
+    bcmolt_status alarm_status; /**< alarm status. */
+} bcmolt_gpon_onu_sufi_data;
+
+/** Transport message definition for "sufi" group of "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_sufi
+{
+    bcmolt_auto hdr;                /**< Transport header. */
+    bcmolt_gpon_onu_key key;        /**< Object key. */
+    bcmolt_gpon_onu_sufi_data data; /**< All properties that must be set by the user. */
+} bcmolt_gpon_onu_sufi;
+
+/** Structure definition for the "tiwi" group of the "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_tiwi_data
+{
+    bcmolt_status alarm_status; /**< Alarm status. */
+    int32_t drift_value;        /**< Calculated amount of drift (positive + negative as a signed value). */
+} bcmolt_gpon_onu_tiwi_data;
+
+/** Transport message definition for "tiwi" group of "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_tiwi
+{
+    bcmolt_auto hdr;                /**< Transport header. */
+    bcmolt_gpon_onu_key key;        /**< Object key. */
+    bcmolt_gpon_onu_tiwi_data data; /**< All properties that must be set by the user. */
+} bcmolt_gpon_onu_tiwi;
+
+/** Structure definition for the "auto_cfg" group of the "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_auto_cfg_data
+{
+    bcmos_bool ber_interval_configuration_completed;    /**< If true, indications of type "ber_interval_configuration_completed" will be generated. */
+    bcmos_bool dfi;                     /**< If true, indications of type "dfi" will be generated. */
+    bcmos_bool dgi;                     /**< If true, indications of type "dgi" will be generated. */
+    bcmos_bool dowi;                    /**< If true, indications of type "dowi" will be generated. */
+    bcmos_bool err;                     /**< If true, indications of type "err" will be generated. */
+    bcmos_bool invalid_dbru_report;     /**< If true, indications of type "invalid_dbru_report" will be generated. */
+    bcmos_bool key_exchange_completed;  /**< If true, indications of type "key_exchange_completed" will be generated. */
+    bcmos_bool key_exchange_cycle_skipped;          /**< If true, indications of type "key_exchange_cycle_skipped" will be generated. */
+    bcmos_bool key_exchange_decrypt_required;       /**< If true, indications of type "key_exchange_decrypt_required" will be generated. */
+    bcmos_bool key_exchange_key_mismatch;           /**< If true, indications of type "key_exchange_key_mismatch" will be generated. */
+    bcmos_bool key_exchange_key_request_timeout;    /**< If true, indications of type "key_exchange_key_request_timeout" will be generated. */
+    bcmos_bool key_exchange_unconsecutive_index;    /**< If true, indications of type "key_exchange_unconsecutive_index" will be generated. */
+    bcmos_bool loai;    /**< If true, indications of type "loai" will be generated. */
+    bcmos_bool loki;    /**< If true, indications of type "loki" will be generated. */
+    bcmos_bool memi;    /**< If true, indications of type "memi" will be generated. */
+    bcmos_bool omci_port_id_configuration_completed;    /**< If true, indications of type "omci_port_id_configuration_completed" will be generated. */
+    bcmos_bool onu_activation_completed;                /**< If true, indications of type "onu_activation_completed" will be generated. */
+    bcmos_bool onu_activation_standby_completed;        /**< If true, indications of type "onu_activation_standby_completed" will be generated. */
+    bcmos_bool onu_alarm;                   /**< If true, indications of type "onu_alarm" will be generated. */
+    bcmos_bool onu_deactivation_completed;  /**< If true, indications of type "onu_deactivation_completed" will be generated. */
+    bcmos_bool onu_disable_completed;       /**< If true, indications of type "onu_disable_completed" will be generated. */
+    bcmos_bool onu_enable_completed;        /**< If true, indications of type "onu_enable_completed" will be generated. */
+    bcmos_bool optical_reflection;          /**< If true, indications of type "optical_reflection" will be generated. */
+    bcmos_bool password_authentication_completed;   /**< If true, indications of type "password_authentication_completed" will be generated. */
+    bcmos_bool pee;             /**< If true, indications of type "pee" will be generated. */
+    bcmos_bool possible_drift;  /**< If true, indications of type "possible_drift" will be generated. */
+    bcmos_bool power_management_state_change;   /**< If true, indications of type "power_management_state_change" will be generated. */
+    bcmos_bool pst;                 /**< If true, indications of type "pst" will be generated. */
+    bcmos_bool ranging_completed;   /**< If true, indications of type "ranging_completed" will be generated. */
+    bcmos_bool rei;                 /**< If true, indications of type "rei" will be generated. */
+    bcmos_bool rssi_measurement_completed;  /**< If true, indications of type "rssi_measurement_completed" will be generated. */
+    bcmos_bool sdi;                 /**< If true, indications of type "sdi" will be generated. */
+    bcmos_bool sfi;                 /**< If true, indications of type "sfi" will be generated. */
+    bcmos_bool stat_alarm_cleared;  /**< If true, indications of type "stat_alarm_cleared" will be generated. */
+    bcmos_bool stat_alarm_raised;   /**< If true, indications of type "stat_alarm_raised" will be generated. */
+    bcmos_bool sufi;                /**< If true, indications of type "sufi" will be generated. */
+    bcmos_bool tiwi;                /**< If true, indications of type "tiwi" will be generated. */
+} bcmolt_gpon_onu_auto_cfg_data;
+
+/** Transport message definition for "auto_cfg" group of "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_auto_cfg
+{
+    bcmolt_auto_cfg hdr;                /**< Transport header. */
+    bcmolt_gpon_onu_key key;            /**< Object key. */
+    bcmolt_gpon_onu_auto_cfg_data data; /**< All properties that must be set by the user. */
+} bcmolt_gpon_onu_auto_cfg;
+
+/** Structure definition for the "change_power_level" group of the "gpon_onu" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_onu_change_power_level_data
+{
+    bcmolt_onu_power_level power_level_action;  /**< power level action. */
+} bcmolt_gpon_onu_change_power_level_data;
+
+/** Transport message definition for "change_power_level" group of "gpon_onu" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_onu_change_power_level
+{
+    bcmolt_oper hdr;            /**< Transport header. */
+    bcmolt_gpon_onu_key key;    /**< Object key. */
+    bcmolt_gpon_onu_change_power_level_data data;   /**< All properties that must be set by the user. */
+} bcmolt_gpon_onu_change_power_level;
+
+/** Transport message definition for "rssi_measurement" group of "gpon_onu" 
+ * object. 
+ */
+typedef struct bcmolt_gpon_onu_rssi_measurement
+{
+    bcmolt_oper hdr;            /**< Transport header. */
+    bcmolt_gpon_onu_key key;    /**< Object key. */
+} bcmolt_gpon_onu_rssi_measurement;
+
+/** Structure definition for the "set_onu_state" group of the "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_set_onu_state_data
+{
+    bcmolt_onu_operation onu_state; /**< ONU state. */
+} bcmolt_gpon_onu_set_onu_state_data;
+
+/** Transport message definition for "set_onu_state" group of "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_set_onu_state
+{
+    bcmolt_oper hdr;            /**< Transport header. */
+    bcmolt_gpon_onu_key key;    /**< Object key. */
+    bcmolt_gpon_onu_set_onu_state_data data;    /**< All properties that must be set by the user. */
+} bcmolt_gpon_onu_set_onu_state;
+
+/** Structure definition for the "cpu_packets" group of the "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_cpu_packets_data
+{
+    bcmolt_packet_type packet_type;     /**< packet type. */
+    bcmos_bool calc_crc;                /**< calc crc. */
+    uint8_t number_of_packets;          /**< number of packets. */
+    uint16_t packet_size;               /**< Single packet size. */
+    bcmolt_u8_list_u32_max_2048 buffer; /**< buffer. */
+} bcmolt_gpon_onu_cpu_packets_data;
+
+/** Transport message definition for "cpu_packets" group of "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_cpu_packets
+{
+    bcmolt_proxy hdr;                       /**< Transport header. */
+    bcmolt_gpon_onu_key key;                /**< Object key. */
+    bcmolt_gpon_onu_cpu_packets_data data;  /**< All properties that must be set by the user. */
+} bcmolt_gpon_onu_cpu_packets;
+
+/** Structure definition for the "ploam_packet" group of the "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_ploam_packet_data
+{
+#define BCMOLT_GPON_ONU_PLOAM_PACKET_DATA_PLOAM_LEN 12
+    bcmolt_arr_u8_12 ploam; /**< ploam. */
+} bcmolt_gpon_onu_ploam_packet_data;
+
+/** Transport message definition for "ploam_packet" group of "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_ploam_packet
+{
+    bcmolt_proxy hdr;                       /**< Transport header. */
+    bcmolt_gpon_onu_key key;                /**< Object key. */
+    bcmolt_gpon_onu_ploam_packet_data data; /**< All properties that must be set by the user. */
+} bcmolt_gpon_onu_ploam_packet;
+
+/** Structure definition for the "cpu_packet" group of the "gpon_onu" object. 
+ *
+ * Indicates CPU packet was received on the US from this ONU id 
+ */
+typedef struct bcmolt_gpon_onu_cpu_packet_data
+{
+    uint16_t port_id;           /**< port_id. */
+    bcmos_bool crc_ok;          /**< crc_ok. */
+    uint32_t packet_size;       /**< packet_size. */
+    bcmolt_u8_list_u32 buffer;  /**< buffer. */
+} bcmolt_gpon_onu_cpu_packet_data;
+
+/** Transport message definition for "cpu_packet" group of "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_cpu_packet
+{
+    bcmolt_proxy_rx hdr;                    /**< Transport header. */
+    bcmolt_gpon_onu_key key;                /**< Object key. */
+    bcmolt_gpon_onu_cpu_packet_data data;   /**< All properties that must be set by the user. */
+} bcmolt_gpon_onu_cpu_packet;
+
+/** Structure definition for the "omci_packet" group of the "gpon_onu" object. 
+ *
+ * Indicates OMCI packet was received on the US from this ONU id 
+ */
+typedef struct bcmolt_gpon_onu_omci_packet_data
+{
+    uint16_t port_id;           /**< port_id. */
+    bcmos_bool crc_ok;          /**< crc_ok. */
+    uint32_t packet_size;       /**< packet_size. */
+    bcmolt_u8_list_u32 buffer;  /**< buffer. */
+} bcmolt_gpon_onu_omci_packet_data;
+
+/** Transport message definition for "omci_packet" group of "gpon_onu" object. 
+ */
+typedef struct bcmolt_gpon_onu_omci_packet
+{
+    bcmolt_proxy_rx hdr;                    /**< Transport header. */
+    bcmolt_gpon_onu_key key;                /**< Object key. */
+    bcmolt_gpon_onu_omci_packet_data data;  /**< All properties that must be set by the user. */
+} bcmolt_gpon_onu_omci_packet;
+
+/** Structure definition for the "key" group of the "gpon_trx" object. 
+ */
+typedef struct bcmolt_gpon_trx_key
+{
+    bcmolt_gpon_ni pon_ni;  /**< PON network interface. */
+} bcmolt_gpon_trx_key;
+
+/** Structure definition for the "cfg" group of the "gpon_trx" object. 
+ */
+typedef struct bcmolt_gpon_trx_cfg_data
+{
+    bcmolt_trx_type transceiver_type;   /**< transceiver type. */
+    bcmolt_la_resync_pattern_configuration la_configuration;    /**< LA configuration. */
+    bcmolt_bcdr_resync_pattern_configuration bcdr;              /**< BCDR. */
+    bcmolt_resync_control la_ranging_after_no_ed_resync;        /**< LA ranging after no ed resync . */
+    bcmolt_resync_control bcdr_ranging_after_no_ed_resync;      /**< used in ranging mode after no ed found */
+    bcmolt_resync_control la_ranging_after_ed_resync;           /**< LA ranging after ed resync . */
+    bcmolt_resync_control bcdr_ranging_after_ed_resync;         /**< BCDR ranging after ed resync. */
+    bcmolt_polarity la_resync_polarity;     /**< la resync polarity. */
+    bcmolt_polarity bcdr_resync_polarity;   /**< BCDR resync polarity. */
+    bcmolt_ranging_resync_conditions bcdr_ranging_resync_conditions;            /**< bcdr ranging resync conditions. */
+    bcmolt_ranging_resync_conditions la_ranging_resync_conditions;              /**< la ranging resync conditions. */
+    bcmolt_trx_rx_configuration rx_configuration;                               /**< RX configuration. */
+    bcmolt_ranging_control_configuration ranging_control_stages_configuration;  /**< ranging control stages configuration. */
+    bcmolt_trx_energy_detect energy_detect;             /**< Energy Detect. */
+    bcmolt_resync_control end_of_burst_data_pattern;    /**< end of burst data pattern . */
+    bcmolt_resync_control end_of_burst_ranging_pattern; /**< end of burst ranging pattern. */
+    bcmolt_trx_preamble preamble;                       /**< Preamble. */
+    bcmolt_trx_delimiter delimiter;                     /**< Delimiter. */
+    uint32_t guard_bits;    /**< Guard bits. */
+    bcmolt_serdes_configuration serdes_configuration;   /**< serdes configuration. */
+    uint32_t plo_ranging;   /**< PLO for ranging. */
+    uint32_t plo_data;      /**< PLO for data. */
+    bcmolt_gpon_rssi_general_configuration rssi_normal_config;  /**< rssi normal config. */
+    bcmolt_ranging_rssi_control ranging_rssi_resync_control;    /**< ranging rssi resync control. */
+} bcmolt_gpon_trx_cfg_data;
+
+/** Transport message definition for "cfg" group of "gpon_trx" object. 
+ */
+typedef struct bcmolt_gpon_trx_cfg
+{
+    bcmolt_cfg hdr;                 /**< Transport header. */
+    bcmolt_gpon_trx_key key;        /**< Object key. */
+    bcmolt_gpon_trx_cfg_data data;  /**< All properties that must be set by the user. */
+} bcmolt_gpon_trx_cfg;
+
+/** Structure definition for the "key" group of the "log_entry" object. 
+ */
+typedef struct bcmolt_log_entry_key
+{
+    uint32_t log_id;        /**< log id. */
+    uint8_t reserved;       /**< reserved. */
+    bcmolt_str_100 name;    /**< name. */
+} bcmolt_log_entry_key;
+
+/** Structure definition for the "cfg" group of the "log_entry" object. 
+ */
+typedef struct bcmolt_log_entry_cfg_data
+{
+    bcmolt_log_level default_log_level; /**< default log level. */
+    bcmolt_log_type default_log_type;   /**< default log type. */
+    bcmolt_log_level log_level_print;   /**< log level print. */
+    bcmolt_log_level log_level_save;    /**< log level save. */
+    bcmolt_log_type log_type;           /**< log type. */
+    bcmolt_log_style log_style;         /**< log_style. */
+    bcmolt_str_100 log_name;            /**< log name. */
+} bcmolt_log_entry_cfg_data;
+
+/** Transport message definition for "cfg" group of "log_entry" object. 
+ */
+typedef struct bcmolt_log_entry_cfg
+{
+    bcmolt_cfg hdr;                 /**< Transport header. */
+    bcmolt_log_entry_key key;       /**< Object key. */
+    bcmolt_log_entry_cfg_data data; /**< All properties that must be set by the user. */
+} bcmolt_log_entry_cfg;
+
+/** Structure definition for the "stat" group of the "log_entry" object. 
+ */
+typedef struct bcmolt_log_entry_stat_data
+{
+#define BCMOLT_LOG_ENTRY_STAT_DATA_MSG_COUNT_LEN    6
+    bcmolt_arr_u32_6 msg_count; /**< msg count. */
+    uint32_t lost_msg_count;    /**< lost msg count. */
+} bcmolt_log_entry_stat_data;
+
+/** Transport message definition for "stat" group of "log_entry" object. 
+ */
+typedef struct bcmolt_log_entry_stat
+{
+    bcmolt_stat hdr;                    /**< Transport header. */
+    bcmolt_log_entry_key key;           /**< Object key. */
+    bcmolt_log_entry_stat_data data;    /**< All properties that must be set by the user. */
+} bcmolt_log_entry_stat;
+
+/** Structure definition for the "stat_cfg" group of the "log_entry" object. 
+ */
+typedef struct bcmolt_log_entry_stat_cfg_data
+{
+    bcmolt_stat_alarm_config cfg;   /**< Statistic alarm configuration. */
+} bcmolt_log_entry_stat_cfg_data;
+
+/** Transport message definition for "stat_cfg" group of "log_entry" object. 
+ */
+typedef struct bcmolt_log_entry_stat_cfg
+{
+    bcmolt_stat_cfg hdr;        /**< Transport header. */
+    bcmolt_log_entry_key key;   /**< Object key. */
+    bcmolt_log_entry_stat_cfg_data data;    /**< All properties that must be set by the user. */
+} bcmolt_log_entry_stat_cfg;
+
+/** Structure definition for the "stat_alarm_cleared" group of the "log_entry" 
+ * object. 
+ *
+ * Sent when a configured statistic alarm condition is no longer met. 
+ */
+typedef struct bcmolt_log_entry_stat_alarm_cleared_data
+{
+    bcmolt_log_entry_stat_id stat;  /**< Statistic identifier. */
+} bcmolt_log_entry_stat_alarm_cleared_data;
+
+/** Transport message definition for "stat_alarm_cleared" group of "log_entry" 
+ * object. 
+ */
+typedef struct bcmolt_log_entry_stat_alarm_cleared
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_log_entry_key key;   /**< Object key. */
+    bcmolt_log_entry_stat_alarm_cleared_data data;  /**< All properties that must be set by the user. */
+} bcmolt_log_entry_stat_alarm_cleared;
+
+/** Structure definition for the "stat_alarm_raised" group of the "log_entry" 
+ * object. 
+ *
+ * Sent when a configured statistic alarm condition has been met. 
+ */
+typedef struct bcmolt_log_entry_stat_alarm_raised_data
+{
+    bcmolt_log_entry_stat_id stat;  /**< Statistic identifier. */
+} bcmolt_log_entry_stat_alarm_raised_data;
+
+/** Transport message definition for "stat_alarm_raised" group of "log_entry" 
+ * object. 
+ */
+typedef struct bcmolt_log_entry_stat_alarm_raised
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_log_entry_key key;   /**< Object key. */
+    bcmolt_log_entry_stat_alarm_raised_data data;   /**< All properties that must be set by the user. */
+} bcmolt_log_entry_stat_alarm_raised;
+
+/** Structure definition for the "auto_cfg" group of the "log_entry" object. 
+ */
+typedef struct bcmolt_log_entry_auto_cfg_data
+{
+    bcmos_bool stat_alarm_cleared;  /**< If true, indications of type "stat_alarm_cleared" will be generated. */
+    bcmos_bool stat_alarm_raised;   /**< If true, indications of type "stat_alarm_raised" will be generated. */
+} bcmolt_log_entry_auto_cfg_data;
+
+/** Transport message definition for "auto_cfg" group of "log_entry" object. 
+ */
+typedef struct bcmolt_log_entry_auto_cfg
+{
+    bcmolt_auto_cfg hdr;                    /**< Transport header. */
+    bcmolt_log_entry_key key;               /**< Object key. */
+    bcmolt_log_entry_auto_cfg_data data;    /**< All properties that must be set by the user. */
+} bcmolt_log_entry_auto_cfg;
+
+/** Structure definition for the "key" group of the "logger" object. 
+ */
+typedef struct bcmolt_logger_key
+{
+    uint32_t reserved;          /**< reserved. */
+    bcmolt_log_file_id file_id; /**< should be 0 */
+} bcmolt_logger_key;
+
+/** Structure definition for the "cfg" group of the "logger" object. 
+ */
+typedef struct bcmolt_logger_cfg_data
+{
+    bcmolt_log_buffer buffer;       /**< Contains "next" log records read by "bcmolt_cfg_get() API */
+    bcmos_bool wrap_around;         /**< Log file wrap-around option. TRUE=wrap around when full. FALSE=stop when full */
+    bcmos_bool clear_after_read;    /**< Clear log after last record has been read */
+    bcmos_bool enable_log;          /**< Enable logger */
+    bcmolt_str_1000 log_names;      /**< log_names. */
+} bcmolt_logger_cfg_data;
+
+/** Transport message definition for "cfg" group of "logger" object. 
+ */
+typedef struct bcmolt_logger_cfg
+{
+    bcmolt_cfg hdr;                 /**< Transport header. */
+    bcmolt_logger_key key;          /**< Object key. */
+    bcmolt_logger_cfg_data data;    /**< All properties that must be set by the user. */
+} bcmolt_logger_cfg;
+
+/** Structure definition for the "stat" group of the "logger" object. 
+ */
+typedef struct bcmolt_logger_stat_data
+{
+    uint32_t lines_in_log;  /**< lines in log. */
+} bcmolt_logger_stat_data;
+
+/** Transport message definition for "stat" group of "logger" object. 
+ */
+typedef struct bcmolt_logger_stat
+{
+    bcmolt_stat hdr;                /**< Transport header. */
+    bcmolt_logger_key key;          /**< Object key. */
+    bcmolt_logger_stat_data data;   /**< All properties that must be set by the user. */
+} bcmolt_logger_stat;
+
+/** Structure definition for the "stat_cfg" group of the "logger" object. 
+ */
+typedef struct bcmolt_logger_stat_cfg_data
+{
+    bcmolt_stat_alarm_config cfg;   /**< Statistic alarm configuration. */
+} bcmolt_logger_stat_cfg_data;
+
+/** Transport message definition for "stat_cfg" group of "logger" object. 
+ */
+typedef struct bcmolt_logger_stat_cfg
+{
+    bcmolt_stat_cfg hdr;                /**< Transport header. */
+    bcmolt_logger_key key;              /**< Object key. */
+    bcmolt_logger_stat_cfg_data data;   /**< All properties that must be set by the user. */
+} bcmolt_logger_stat_cfg;
+
+/** Structure definition for the "stat_alarm_cleared" group of the "logger" 
+ * object. 
+ *
+ * Sent when a configured statistic alarm condition is no longer met. 
+ */
+typedef struct bcmolt_logger_stat_alarm_cleared_data
+{
+    bcmolt_logger_stat_id stat; /**< Statistic identifier. */
+} bcmolt_logger_stat_alarm_cleared_data;
+
+/** Transport message definition for "stat_alarm_cleared" group of "logger" 
+ * object. 
+ */
+typedef struct bcmolt_logger_stat_alarm_cleared
+{
+    bcmolt_auto hdr;        /**< Transport header. */
+    bcmolt_logger_key key;  /**< Object key. */
+    bcmolt_logger_stat_alarm_cleared_data data; /**< All properties that must be set by the user. */
+} bcmolt_logger_stat_alarm_cleared;
+
+/** Structure definition for the "stat_alarm_raised" group of the "logger" 
+ * object. 
+ *
+ * Sent when a configured statistic alarm condition has been met. 
+ */
+typedef struct bcmolt_logger_stat_alarm_raised_data
+{
+    bcmolt_logger_stat_id stat; /**< Statistic identifier. */
+} bcmolt_logger_stat_alarm_raised_data;
+
+/** Transport message definition for "stat_alarm_raised" group of "logger" 
+ * object. 
+ */
+typedef struct bcmolt_logger_stat_alarm_raised
+{
+    bcmolt_auto hdr;        /**< Transport header. */
+    bcmolt_logger_key key;  /**< Object key. */
+    bcmolt_logger_stat_alarm_raised_data data;  /**< All properties that must be set by the user. */
+} bcmolt_logger_stat_alarm_raised;
+
+/** Structure definition for the "auto_cfg" group of the "logger" object. 
+ */
+typedef struct bcmolt_logger_auto_cfg_data
+{
+    bcmos_bool stat_alarm_cleared;  /**< If true, indications of type "stat_alarm_cleared" will be generated. */
+    bcmos_bool stat_alarm_raised;   /**< If true, indications of type "stat_alarm_raised" will be generated. */
+} bcmolt_logger_auto_cfg_data;
+
+/** Transport message definition for "auto_cfg" group of "logger" object. 
+ */
+typedef struct bcmolt_logger_auto_cfg
+{
+    bcmolt_auto_cfg hdr;                /**< Transport header. */
+    bcmolt_logger_key key;              /**< Object key. */
+    bcmolt_logger_auto_cfg_data data;   /**< All properties that must be set by the user. */
+} bcmolt_logger_auto_cfg;
+
+/** Transport message definition for "clear_log" group of "logger" object. 
+ */
+typedef struct bcmolt_logger_clear_log
+{
+    bcmolt_oper hdr;        /**< Transport header. */
+    bcmolt_logger_key key;  /**< Object key. */
+} bcmolt_logger_clear_log;
+
+/** Structure definition for the "key" group of the "nni" object. 
+ */
+typedef struct bcmolt_nni_key
+{
+    bcmolt_pon_ni pon_ni;   /**< PON NI. */
+} bcmolt_nni_key;
+
+/** Structure definition for the "cfg" group of the "nni" object. 
+ */
+typedef struct bcmolt_nni_cfg_data
+{
+    bcmolt_control_state remote_loopback;   /**< Incoming packets coming from the PON (upstream) and going back to the PON (Downstream)  */
+    bcmolt_control_state line_loopback;     /**< Incoming packets coming from the NNI interface to the PM and going back towards the NNI interface */
+    bcmos_mac_address mac_address;          /**< Mac address to be used for this NNI. */
+    bcmolt_nni_link_status nni_status;      /**< NNI status */
+    bcmolt_nni_link_status nni_backup_status;   /**< Status of the backup NNI. */
+    bcmolt_nni_connection active_nni;           /**< Which NNI is currently active. */
+    uint32_t nni_status_polling_interval_ms;    /**< How often to check the status of the primary and backup NNIs (units: ms). Zero (0) disables status polling. */
+    bcmos_bool autoswitch;                      /**< Should firmware automatically switch between primary/backup NNIs when Loss of Link is detected? */
+    bcmolt_control_state flow_control;          /**< NNI Flow control. */
+} bcmolt_nni_cfg_data;
+
+/** Transport message definition for "cfg" group of "nni" object. 
+ */
+typedef struct bcmolt_nni_cfg
+{
+    bcmolt_cfg hdr;             /**< Transport header. */
+    bcmolt_nni_key key;         /**< Object key. */
+    bcmolt_nni_cfg_data data;   /**< All properties that must be set by the user. */
+} bcmolt_nni_cfg;
+
+/** Structure definition for the "stat" group of the "nni" object. 
+ */
+typedef struct bcmolt_nni_stat_data
+{
+    uint64_t rx_frames_64;              /**< The count of RX 64 byte frames on this NNI. */
+    uint64_t rx_frames_65_127;          /**< The count of RX 65 to 127 byte frames on this NNI. */
+    uint64_t rx_frames_128_255;         /**< The count of RX 128 to 255 byte frames on this NNI. */
+    uint64_t rx_frames_256_511;         /**< The count of RX 256 to 511 byte frames on this NNI. */
+    uint64_t rx_frames_512_1023;        /**< The count of RX 512 to 1023 byte frames on this NNI. */
+    uint64_t rx_frames_1024_1518;       /**< The count of RX 1024 to 1518 byte frames on this NNI. */
+    uint64_t rx_frames_1519_2047;       /**< The count of RX 1519 to 2047 byte frames on this NNI. */
+    uint64_t rx_frames_2048_4095;       /**< The count of RX 2048 to 4095 byte frames on this NNI. */
+    uint64_t rx_frames_4096_9216;       /**< The count of RX 4096 to 9216 byte frames on this NNI. */
+    uint64_t rx_frames_9217_16383;      /**< The count of RX 9217 to 16383 byte frames on this NNI. */
+    uint64_t rx_frames;                 /**< The number of received frames on this NNI. This includes all errored frames as well. */
+    uint64_t rx_bytes;                  /**< The number of received bytes on this NNI. This includes all errored frames as well. */
+    uint64_t rx_good_frames;            /**< The number of received good frames on this NNI. */
+    uint64_t rx_unicast_frames;         /**< The number of received unicast frames on this NNI. */
+    uint64_t rx_multicast_frames;       /**< The number of received multicast frames on this NNI. */
+    uint64_t rx_broadcast_frames;       /**< The number of received broadcast frames on this NNI. */
+    uint64_t rx_fcs_errors;             /**< The number of received FCS errors on this NNI. */
+    uint64_t rx_control_frames;         /**< The number of received control frames on this NNI. */
+    uint64_t rx_pause_frames;           /**< The number of received pause frames on this NNI. */
+    uint64_t rx_pfc_frames;             /**< The number of received PFC frames on this NNI. */
+    uint64_t rx_unsupported_opcode;     /**< The number of received Unsupported Opcode frames on this NNI. */
+    uint64_t rx_unsupported_da;         /**< The number of received unsupported DA frames on this NNI. */
+    uint64_t rx_alignment_errors;       /**< The number of received alignment errors on this NNI. */
+    uint64_t rx_length_out_of_range;    /**< The number of received length out of range errors on this NNI. */
+    uint64_t rx_code_errors;            /**< The number of received code errors on this NNI. */
+    uint64_t rx_oversized_frames;       /**< The number of received oversized frames on this NNI. */
+    uint64_t rx_jabber_frames;          /**< The number of received jabber frames on this NNI. these are oversized frames that also contain an invalid CRC, code error, or IEEE length check error. */
+    uint64_t rx_mtu_check_errors;       /**< The number of received MTU Check Errors on this NNI. */
+    uint64_t rx_promiscuous_frames;     /**< The number of received frames on this NNI that are not control packets and have a DA that is not matching with the RX SA. */
+    uint64_t rx_vlan_frames;            /**< The number of received VLAN tagged frames on this NNI (with TPID 8100). This counts both single and double tagged frames. */
+    uint64_t rx_double_vlan_frames;     /**< The number of received double VLAN tagged frames on this NNI (with TPID 8100).  */
+    uint64_t rx_truncated_frames;       /**< The number of received truncated frames on this NNI. This is likely due to RX FIFO Full.  */
+    uint64_t rx_undersize_frames;       /**< The number of received undersized frames on this NNI. */
+    uint64_t rx_fragmented_frames;      /**< The number of received fragmented frames on this NNI. */
+    uint64_t rx_runt_frames;            /**< The number of received runt frames on this NNI. */
+    uint64_t tx_frames_64;              /**< The count of TX 64 byte frames on this NNI. */
+    uint64_t tx_frames_65_127;          /**< The count of TX 65 to 127 byte frames on this NNI. */
+    uint64_t tx_frames_128_255;         /**< The count of TX 128 to 255 byte frames on this NNI. */
+    uint64_t tx_frames_256_511;         /**< The count of TX 256 to 511 byte frames on this NNI. */
+    uint64_t tx_frames_512_1023;        /**< The count of TX 512 to 1023 byte frames on this NNI. */
+    uint64_t tx_frames_1024_1518;       /**< The count of TX 1024 to 1518 byte frames on this NNI. */
+    uint64_t tx_frames_1519_2047;       /**< The count of TX 1519 to 2047 byte frames on this NNI. */
+    uint64_t tx_frames_2048_4095;       /**< The count of TX 2048 to 4095 byte frames on this NNI. */
+    uint64_t tx_frames_4096_9216;       /**< The count of TX 4096 to 9216 byte frames on this NNI. */
+    uint64_t tx_frames_9217_16383;      /**< The count of TX 9217 to 16383 byte frames on this NNI. */
+    uint64_t tx_frames;                 /**< The number of transmitted frames on this NNI. This includes all errored frames as well. */
+    uint64_t tx_bytes;                  /**< The number of transmitted bytes on this NNI. This includes all errored frames as well. */
+    uint64_t tx_good_frames;            /**< The number of transmitted good frames on this NNI. */
+    uint64_t tx_unicast_frames;         /**< The number of transmitted unicast frames on this NNI. */
+    uint64_t tx_multicast_frames;       /**< The number of transmitted multicast frames on this NNI. */
+    uint64_t tx_broadcast_frames;       /**< The number of transmitted broadcast frames on this NNI. */
+    uint64_t tx_pause_frames;           /**< The number of transmitted pause frames on this NNI. */
+    uint64_t tx_pfc_frames;             /**< The number of transmitted PFC frames on this NNI. */
+    uint64_t tx_jabber_frames;          /**< The number of transmitted jabber frames on this NNI. These are oversized frames that also contain an invalid FCS. */
+    uint64_t tx_fcs_errors;             /**< The number of transmitted FCS errors on this NNI.  */
+    uint64_t tx_control_frames;         /**< The number of transmitted control frames on this NNI.  */
+    uint64_t tx_oversize_frames;        /**< The number of transmitted oversized frames on this NNI.  */
+    uint64_t tx_fragmented_frames;      /**< The number of transmitted fragmented frames on this NNI.  */
+    uint64_t tx_error_frames;           /**< The number of transmitted errored frames on this NNI.  */
+    uint64_t tx_vlan_frames;            /**< The number of transmitted VLAN tagged frames on this NNI (with TPID 8100). This counts both single and double tagged frames. */
+    uint64_t tx_double_vlan_frames;     /**< The number of transmitted double VLAN tagged frames on this NNI (with TPID 8100).  */
+    uint64_t tx_runt_frames;            /**< The number of transmitted runt frames on this NNI.  */
+    uint64_t tx_underrun_frames;        /**< The number of transmitted underrun frames on this NNI. Thus happens when a frame encounters a MAC underrun (Tx Sync FIFO runs out of data before the end of packet). */
+} bcmolt_nni_stat_data;
+
+/** Transport message definition for "stat" group of "nni" object. 
+ */
+typedef struct bcmolt_nni_stat
+{
+    bcmolt_stat hdr;            /**< Transport header. */
+    bcmolt_nni_key key;         /**< Object key. */
+    bcmolt_nni_stat_data data;  /**< All properties that must be set by the user. */
+} bcmolt_nni_stat;
+
+/** Structure definition for the "stat_cfg" group of the "nni" object. 
+ */
+typedef struct bcmolt_nni_stat_cfg_data
+{
+    bcmolt_stat_alarm_config cfg;   /**< Statistic alarm configuration. */
+} bcmolt_nni_stat_cfg_data;
+
+/** Transport message definition for "stat_cfg" group of "nni" object. 
+ */
+typedef struct bcmolt_nni_stat_cfg
+{
+    bcmolt_stat_cfg hdr;            /**< Transport header. */
+    bcmolt_nni_key key;             /**< Object key. */
+    bcmolt_nni_stat_cfg_data data;  /**< All properties that must be set by the user. */
+} bcmolt_nni_stat_cfg;
+
+/** Structure definition for the "stat_alarm_cleared" group of the "nni" object. 
+ *
+ * Sent when a configured statistic alarm condition is no longer met. 
+ */
+typedef struct bcmolt_nni_stat_alarm_cleared_data
+{
+    bcmolt_nni_stat_id stat;    /**< Statistic identifier. */
+} bcmolt_nni_stat_alarm_cleared_data;
+
+/** Transport message definition for "stat_alarm_cleared" group of "nni" object. 
+ */
+typedef struct bcmolt_nni_stat_alarm_cleared
+{
+    bcmolt_auto hdr;    /**< Transport header. */
+    bcmolt_nni_key key; /**< Object key. */
+    bcmolt_nni_stat_alarm_cleared_data data;    /**< All properties that must be set by the user. */
+} bcmolt_nni_stat_alarm_cleared;
+
+/** Structure definition for the "stat_alarm_raised" group of the "nni" object. 
+ *
+ * Sent when a configured statistic alarm condition has been met. 
+ */
+typedef struct bcmolt_nni_stat_alarm_raised_data
+{
+    bcmolt_nni_stat_id stat;    /**< Statistic identifier. */
+} bcmolt_nni_stat_alarm_raised_data;
+
+/** Transport message definition for "stat_alarm_raised" group of "nni" object. 
+ */
+typedef struct bcmolt_nni_stat_alarm_raised
+{
+    bcmolt_auto hdr;                        /**< Transport header. */
+    bcmolt_nni_key key;                     /**< Object key. */
+    bcmolt_nni_stat_alarm_raised_data data; /**< All properties that must be set by the user. */
+} bcmolt_nni_stat_alarm_raised;
+
+/** Structure definition for the "status_changed" group of the "nni" object. 
+ *
+ * NNI Link status changed 
+ */
+typedef struct bcmolt_nni_status_changed_data
+{
+    bcmolt_status new_status;               /**< New NNI Link Status */
+    bcmolt_nni_connection link;             /**< Which NNI this indication pertains to. */
+    bcmolt_nni_connection previous_active;  /**< Which NNI was active before this status change. */
+    bcmolt_nni_connection new_active;       /**< Which NNI is now active after this status change. */
+} bcmolt_nni_status_changed_data;
+
+/** Transport message definition for "status_changed" group of "nni" object. 
+ */
+typedef struct bcmolt_nni_status_changed
+{
+    bcmolt_auto hdr;                        /**< Transport header. */
+    bcmolt_nni_key key;                     /**< Object key. */
+    bcmolt_nni_status_changed_data data;    /**< All properties that must be set by the user. */
+} bcmolt_nni_status_changed;
+
+/** Structure definition for the "auto_cfg" group of the "nni" object. 
+ */
+typedef struct bcmolt_nni_auto_cfg_data
+{
+    bcmos_bool stat_alarm_cleared;  /**< If true, indications of type "stat_alarm_cleared" will be generated. */
+    bcmos_bool stat_alarm_raised;   /**< If true, indications of type "stat_alarm_raised" will be generated. */
+    bcmos_bool status_changed;      /**< If true, indications of type "status_changed" will be generated. */
+} bcmolt_nni_auto_cfg_data;
+
+/** Transport message definition for "auto_cfg" group of "nni" object. 
+ */
+typedef struct bcmolt_nni_auto_cfg
+{
+    bcmolt_auto_cfg hdr;            /**< Transport header. */
+    bcmolt_nni_key key;             /**< Object key. */
+    bcmolt_nni_auto_cfg_data data;  /**< All properties that must be set by the user. */
+} bcmolt_nni_auto_cfg;
+
+/** Structure definition for the "key" group of the "nni_serdes" object. 
+ */
+typedef struct bcmolt_nni_serdes_key
+{
+    bcmolt_pon_ni pon_ni;               /**< PON NI. */
+    bcmolt_serdes_instance instance;    /**< SerDes instance.: 0 = Primary, 1 = Secondary. */
+} bcmolt_nni_serdes_key;
+
+/** Structure definition for the "cfg" group of the "nni_serdes" object. 
+ */
+typedef struct bcmolt_nni_serdes_cfg_data
+{
+    uint8_t rx_vga;     /**< Rx Vga. */
+    uint8_t rx_pf;      /**< Peaking Filter */
+    uint8_t rx_lfpf;    /**< Low Frequency Peaking Filter */
+    uint8_t rx_dfe1;    /**< Rx DFE1. */
+    int8_t rx_dfe2;     /**< Rx DFE2. */
+    int8_t rx_dfe3;     /**< Rx DFE3. */
+    int8_t rx_dfe4;     /**< Rx DFE4. */
+    int8_t rx_dfe5;     /**< Rx DFE5. */
+    uint8_t tx_pre;     /**< Tx Pre. */
+    uint8_t tx_main;    /**< Tx Main. */
+    uint8_t tx_post1;   /**< Tx Post1. */
+    int8_t tx_post2;    /**< Tx Post2. */
+    int8_t tx_post3;    /**< Tx Post3. */
+    uint8_t tx_amp;     /**< Tx Amp. */
+} bcmolt_nni_serdes_cfg_data;
+
+/** Transport message definition for "cfg" group of "nni_serdes" object. 
+ */
+typedef struct bcmolt_nni_serdes_cfg
+{
+    bcmolt_cfg hdr;                     /**< Transport header. */
+    bcmolt_nni_serdes_key key;          /**< Object key. */
+    bcmolt_nni_serdes_cfg_data data;    /**< All properties that must be set by the user. */
+} bcmolt_nni_serdes_cfg;
+
+/** Structure definition for the "key" group of the "software_error" object. 
+ */
+typedef struct bcmolt_software_error_key
+{
+    uint32_t reserved;  /**< Reserved (set to 0). */
+    uint32_t idx;       /**< Index. */
+} bcmolt_software_error_key;
+
+/** Structure definition for the "cfg" group of the "software_error" object. 
+ */
+typedef struct bcmolt_software_error_cfg_data
+{
+    bcmolt_sw_error entry;  /**< Entry. */
+} bcmolt_software_error_cfg_data;
+
+/** Transport message definition for "cfg" group of "software_error" object. 
+ */
+typedef struct bcmolt_software_error_cfg
+{
+    bcmolt_cfg hdr;                 /**< Transport header. */
+    bcmolt_software_error_key key;  /**< Object key. */
+    bcmolt_software_error_cfg_data data;    /**< All properties that must be set by the user. */
+} bcmolt_software_error_cfg;
+
+/** Structure definition for the "key" group of the "trx_calibration" object. 
+ */
+typedef struct bcmolt_trx_calibration_key
+{
+    uint32_t reserved;  /**< Reserved (set to 0) */
+} bcmolt_trx_calibration_key;
+
+/** Structure definition for the "capture_window_and_statistic_completed" group 
+ * of the "trx_calibration" object. 
+ */
+typedef struct bcmolt_trx_calibration_capture_window_and_statistic_completed_data
+{
+    bcmolt_u32_list_u32_max_500_hex data_window;    /**< data window. */
+    bcmolt_u32_list_u32_max_500_hex strobe_window;  /**< strobe window. */
+    uint64_t edge_rise_min_min;                     /**< edge rise min min. */
+    uint64_t edge_rise_min_max;                     /**< edge rise min max. */
+    uint64_t edge_rise_max_min;                     /**< edge rise max min. */
+    uint64_t edge_rise_max_max;                     /**< edge rise max max. */
+    uint64_t edge_fall_min_min;                     /**< edge fall min min . */
+    uint64_t edge_fall_min_max;                     /**< edge fall min max. */
+    uint64_t edge_fall_max_min;                     /**< edge fall max min. */
+    uint64_t edge_fall_max_max;                     /**< edge fall max max. */
+    bcmolt_result result;   /**< result. */
+} bcmolt_trx_calibration_capture_window_and_statistic_completed_data;
+
+/** Transport message definition for "capture_window_and_statistic_completed" 
+ * group of "trx_calibration" object. 
+ */
+typedef struct bcmolt_trx_calibration_capture_window_and_statistic_completed
+{
+    bcmolt_auto hdr;                /**< Transport header. */
+    bcmolt_trx_calibration_key key; /**< Object key. */
+    bcmolt_trx_calibration_capture_window_and_statistic_completed_data data;    /**< All properties that must be set by the user. */
+} bcmolt_trx_calibration_capture_window_and_statistic_completed;
+
+/** Structure definition for the "auto_cfg" group of the "trx_calibration" 
+ * object. 
+ */
+typedef struct bcmolt_trx_calibration_auto_cfg_data
+{
+    bcmos_bool capture_window_and_statistic_completed;  /**< If true, indications of type "capture_window_and_statistic_completed" will be generated. */
+} bcmolt_trx_calibration_auto_cfg_data;
+
+/** Transport message definition for "auto_cfg" group of "trx_calibration" 
+ * object. 
+ */
+typedef struct bcmolt_trx_calibration_auto_cfg
+{
+    bcmolt_auto_cfg hdr;                        /**< Transport header. */
+    bcmolt_trx_calibration_key key;             /**< Object key. */
+    bcmolt_trx_calibration_auto_cfg_data data;  /**< All properties that must be set by the user. */
+} bcmolt_trx_calibration_auto_cfg;
+
+/** Structure definition for the "start_capture_window" group of the 
+ * "trx_calibration" object. 
+ */
+typedef struct bcmolt_trx_calibration_start_capture_window_data
+{
+    uint8_t pon_ni; /**< pon_ni. */
+    bcmolt_trx_calibration_trigger trigger;         /**< trigger. */
+    bcmolt_capture_strobe_signal strobe;            /**< strobe. */
+    bcmolt_trx_calibration_window_mode window_mode; /**< window mode. */
+    uint16_t onu_id;    /**< onu id. */
+    bcmolt_trx_calibration_trigger_position trigger_position;   /**< trigger position. */
+    bcmos_bool stop_due_to_corrupt_strobe;                      /**< enable/disable corrupt strobe from MAC to terminate stat window */
+    uint16_t start_offset;      /**< start offset. */
+    uint16_t end_offset;        /**< end offset. */
+    uint8_t number_of_cycles;   /**< number of cycles. */
+} bcmolt_trx_calibration_start_capture_window_data;
+
+/** Transport message definition for "start_capture_window" group of 
+ * "trx_calibration" object. 
+ */
+typedef struct bcmolt_trx_calibration_start_capture_window
+{
+    bcmolt_oper hdr;                /**< Transport header. */
+    bcmolt_trx_calibration_key key; /**< Object key. */
+    bcmolt_trx_calibration_start_capture_window_data data;  /**< All properties that must be set by the user. */
+} bcmolt_trx_calibration_start_capture_window;
+
+/** Structure definition for the "stop_capture_window" group of the 
+ * "trx_calibration" object. 
+ */
+typedef struct bcmolt_trx_calibration_stop_capture_window_data
+{
+    uint8_t pon_ni; /**< pon_ni. */
+} bcmolt_trx_calibration_stop_capture_window_data;
+
+/** Transport message definition for "stop_capture_window" group of 
+ * "trx_calibration" object. 
+ */
+typedef struct bcmolt_trx_calibration_stop_capture_window
+{
+    bcmolt_oper hdr;                /**< Transport header. */
+    bcmolt_trx_calibration_key key; /**< Object key. */
+    bcmolt_trx_calibration_stop_capture_window_data data;   /**< All properties that must be set by the user. */
+} bcmolt_trx_calibration_stop_capture_window;
+
+/** Structure definition for the "key" group of the "xgpon_alloc" object. 
+ */
+typedef struct bcmolt_xgpon_alloc_key
+{
+    bcmolt_xgpon_ni pon_ni;         /**< PON network interface. */
+    bcmolt_xgpon_alloc_id alloc_id; /**< Alloc ID. */
+} bcmolt_xgpon_alloc_key;
+
+/** Structure definition for the "cfg" group of the "xgpon_alloc" object. 
+ */
+typedef struct bcmolt_xgpon_alloc_cfg_data
+{
+    bcmolt_alloc_state state;   /**< Current Alloc ID state */
+    bcmolt_pon_alloc_sla sla;   /**< Alloc ID SLA */
+    bcmolt_xgpon_onu_id onu_id; /**< ONU ID the alloc ID is assigned to */
+    bcmos_bool collect_stats;   /**< Enable statistics collection for this alloc ID */
+} bcmolt_xgpon_alloc_cfg_data;
+
+/** Transport message definition for "cfg" group of "xgpon_alloc" object. 
+ */
+typedef struct bcmolt_xgpon_alloc_cfg
+{
+    bcmolt_cfg hdr;                     /**< Transport header. */
+    bcmolt_xgpon_alloc_key key;         /**< Object key. */
+    bcmolt_xgpon_alloc_cfg_data data;   /**< All properties that must be set by the user. */
+} bcmolt_xgpon_alloc_cfg;
+
+/** Structure definition for the "stat" group of the "xgpon_alloc" object. 
+ */
+typedef struct bcmolt_xgpon_alloc_stat_data
+{
+    uint64_t rx_bytes;  /**< Number of alloc ID received bytes. */
+} bcmolt_xgpon_alloc_stat_data;
+
+/** Transport message definition for "stat" group of "xgpon_alloc" object. 
+ */
+typedef struct bcmolt_xgpon_alloc_stat
+{
+    bcmolt_stat hdr;                    /**< Transport header. */
+    bcmolt_xgpon_alloc_key key;         /**< Object key. */
+    bcmolt_xgpon_alloc_stat_data data;  /**< All properties that must be set by the user. */
+} bcmolt_xgpon_alloc_stat;
+
+/** Structure definition for the "stat_cfg" group of the "xgpon_alloc" object. 
+ */
+typedef struct bcmolt_xgpon_alloc_stat_cfg_data
+{
+    bcmolt_stat_alarm_config cfg;   /**< Statistic alarm configuration. */
+} bcmolt_xgpon_alloc_stat_cfg_data;
+
+/** Transport message definition for "stat_cfg" group of "xgpon_alloc" object. 
+ */
+typedef struct bcmolt_xgpon_alloc_stat_cfg
+{
+    bcmolt_stat_cfg hdr;        /**< Transport header. */
+    bcmolt_xgpon_alloc_key key; /**< Object key. */
+    bcmolt_xgpon_alloc_stat_cfg_data data;  /**< All properties that must be set by the user. */
+} bcmolt_xgpon_alloc_stat_cfg;
+
+/** Structure definition for the "configuration_completed" group of the 
+ * "xgpon_alloc" object. 
+ */
+typedef struct bcmolt_xgpon_alloc_configuration_completed_data
+{
+    bcmolt_result status;           /**< status. */
+    bcmolt_alloc_state new_state;   /**< new state. */
+} bcmolt_xgpon_alloc_configuration_completed_data;
+
+/** Transport message definition for "configuration_completed" group of 
+ * "xgpon_alloc" object. 
+ */
+typedef struct bcmolt_xgpon_alloc_configuration_completed
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_xgpon_alloc_key key; /**< Object key. */
+    bcmolt_xgpon_alloc_configuration_completed_data data;   /**< All properties that must be set by the user. */
+} bcmolt_xgpon_alloc_configuration_completed;
+
+/** Structure definition for the "get_alloc_stats_completed" group of the 
+ * "xgpon_alloc" object. 
+ *
+ * Collected alloc ID statistics from get_stats operation 
+ */
+typedef struct bcmolt_xgpon_alloc_get_alloc_stats_completed_data
+{
+    bcmolt_result status;           /**< status. */
+    uint32_t average_nsr_used;      /**< Average NSR used words. */
+    uint32_t average_nsr_allocated; /**< Average NSR allocated words. */
+    uint32_t average_sr_report;     /**< Average SR report. */
+} bcmolt_xgpon_alloc_get_alloc_stats_completed_data;
+
+/** Transport message definition for "get_alloc_stats_completed" group of 
+ * "xgpon_alloc" object. 
+ */
+typedef struct bcmolt_xgpon_alloc_get_alloc_stats_completed
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_xgpon_alloc_key key; /**< Object key. */
+    bcmolt_xgpon_alloc_get_alloc_stats_completed_data data; /**< All properties that must be set by the user. */
+} bcmolt_xgpon_alloc_get_alloc_stats_completed;
+
+/** Structure definition for the "stat_alarm_cleared" group of the "xgpon_alloc" 
+ * object. 
+ *
+ * Sent when a configured statistic alarm condition is no longer met. 
+ */
+typedef struct bcmolt_xgpon_alloc_stat_alarm_cleared_data
+{
+    bcmolt_xgpon_alloc_stat_id stat;    /**< Statistic identifier. */
+} bcmolt_xgpon_alloc_stat_alarm_cleared_data;
+
+/** Transport message definition for "stat_alarm_cleared" group of "xgpon_alloc" 
+ * object. 
+ */
+typedef struct bcmolt_xgpon_alloc_stat_alarm_cleared
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_xgpon_alloc_key key; /**< Object key. */
+    bcmolt_xgpon_alloc_stat_alarm_cleared_data data;    /**< All properties that must be set by the user. */
+} bcmolt_xgpon_alloc_stat_alarm_cleared;
+
+/** Structure definition for the "stat_alarm_raised" group of the "xgpon_alloc" 
+ * object. 
+ *
+ * Sent when a configured statistic alarm condition has been met. 
+ */
+typedef struct bcmolt_xgpon_alloc_stat_alarm_raised_data
+{
+    bcmolt_xgpon_alloc_stat_id stat;    /**< Statistic identifier. */
+} bcmolt_xgpon_alloc_stat_alarm_raised_data;
+
+/** Transport message definition for "stat_alarm_raised" group of "xgpon_alloc" 
+ * object. 
+ */
+typedef struct bcmolt_xgpon_alloc_stat_alarm_raised
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_xgpon_alloc_key key; /**< Object key. */
+    bcmolt_xgpon_alloc_stat_alarm_raised_data data; /**< All properties that must be set by the user. */
+} bcmolt_xgpon_alloc_stat_alarm_raised;
+
+/** Structure definition for the "auto_cfg" group of the "xgpon_alloc" object. 
+ */
+typedef struct bcmolt_xgpon_alloc_auto_cfg_data
+{
+    bcmos_bool configuration_completed;     /**< If true, indications of type "configuration_completed" will be generated. */
+    bcmos_bool get_alloc_stats_completed;   /**< If true, indications of type "get_alloc_stats_completed" will be generated. */
+    bcmos_bool stat_alarm_cleared;          /**< If true, indications of type "stat_alarm_cleared" will be generated. */
+    bcmos_bool stat_alarm_raised;           /**< If true, indications of type "stat_alarm_raised" will be generated. */
+} bcmolt_xgpon_alloc_auto_cfg_data;
+
+/** Transport message definition for "auto_cfg" group of "xgpon_alloc" object. 
+ */
+typedef struct bcmolt_xgpon_alloc_auto_cfg
+{
+    bcmolt_auto_cfg hdr;                    /**< Transport header. */
+    bcmolt_xgpon_alloc_key key;             /**< Object key. */
+    bcmolt_xgpon_alloc_auto_cfg_data data;  /**< All properties that must be set by the user. */
+} bcmolt_xgpon_alloc_auto_cfg;
+
+/** Structure definition for the "get_stats" group of the "xgpon_alloc" object. 
+ *
+ * Run statistics collection for a given period of time 
+ */
+typedef struct bcmolt_xgpon_alloc_get_stats_data
+{
+    uint32_t num_of_cycles; /**< The number of cycles to run statistics collection */
+} bcmolt_xgpon_alloc_get_stats_data;
+
+/** Transport message definition for "get_stats" group of "xgpon_alloc" object. 
+ */
+typedef struct bcmolt_xgpon_alloc_get_stats
+{
+    bcmolt_oper hdr;                        /**< Transport header. */
+    bcmolt_xgpon_alloc_key key;             /**< Object key. */
+    bcmolt_xgpon_alloc_get_stats_data data; /**< All properties that must be set by the user. */
+} bcmolt_xgpon_alloc_get_stats;
+
+/** Structure definition for the "set_state" group of the "xgpon_alloc" object. 
+ *
+ * Sets the alloc's activation state.  This is only used for protection 
+ * switching on an active-standby PON.  In normal operation, this isn't 
+ * necessary since allocs are activated/deactivated automatically along with 
+ * the ONU. 
+ */
+typedef struct bcmolt_xgpon_alloc_set_state_data
+{
+    bcmolt_alloc_operation state;   /**< State. */
+} bcmolt_xgpon_alloc_set_state_data;
+
+/** Transport message definition for "set_state" group of "xgpon_alloc" object. 
+ */
+typedef struct bcmolt_xgpon_alloc_set_state
+{
+    bcmolt_oper hdr;                        /**< Transport header. */
+    bcmolt_xgpon_alloc_key key;             /**< Object key. */
+    bcmolt_xgpon_alloc_set_state_data data; /**< All properties that must be set by the user. */
+} bcmolt_xgpon_alloc_set_state;
+
+/** Structure definition for the "key" group of the "xgpon_gem_port" object. 
+ */
+typedef struct bcmolt_xgpon_gem_port_key
+{
+    bcmolt_xgpon_ni pon_ni;             /**< PON network interface. */
+    bcmolt_xgpon_gem_id gem_port_id;    /**< GEM PORT ID. */
+} bcmolt_xgpon_gem_port_key;
+
+/** Structure definition for the "cfg" group of the "xgpon_gem_port" object. 
+ */
+typedef struct bcmolt_xgpon_gem_port_cfg_data
+{
+    bcmolt_gem_port_configuration configuration;                /**< GEM port configuration parameters */
+    bcmolt_xgpon_onu_id onu_id;                                 /**< ONU ID this GEM port is assigned to */
+    bcmolt_xgpon_gem_port_state gem_port_state;                 /**< Current GEM port state */
+    bcmolt_control_state encryption_mode;                       /**< Enable/Disable the downstream encryption mode of the GEM Port */
+    bcmolt_us_gem_port_destination upstream_destination_queue;  /**< The destination queue of the packets arriving on this GEM Port on the upstream direction */
+    bcmolt_control_state control;   /**< Enable/Disable the GEM Port ID in the OLT */
+} bcmolt_xgpon_gem_port_cfg_data;
+
+/** Transport message definition for "cfg" group of "xgpon_gem_port" object. 
+ */
+typedef struct bcmolt_xgpon_gem_port_cfg
+{
+    bcmolt_cfg hdr;                 /**< Transport header. */
+    bcmolt_xgpon_gem_port_key key;  /**< Object key. */
+    bcmolt_xgpon_gem_port_cfg_data data;    /**< All properties that must be set by the user. */
+} bcmolt_xgpon_gem_port_cfg;
+
+/** Structure definition for the "stat" group of the "xgpon_gem_port" object. 
+ */
+typedef struct bcmolt_xgpon_gem_port_stat_data
+{
+    uint64_t tx_bytes;      /**< TX bytes. */
+    uint64_t tx_packets;    /**< TX packets. */
+    uint64_t rx_packets;    /**< RX packets. */
+    uint64_t rx_bytes;      /**< RX bytes. */
+} bcmolt_xgpon_gem_port_stat_data;
+
+/** Transport message definition for "stat" group of "xgpon_gem_port" object. 
+ */
+typedef struct bcmolt_xgpon_gem_port_stat
+{
+    bcmolt_stat hdr;                        /**< Transport header. */
+    bcmolt_xgpon_gem_port_key key;          /**< Object key. */
+    bcmolt_xgpon_gem_port_stat_data data;   /**< All properties that must be set by the user. */
+} bcmolt_xgpon_gem_port_stat;
+
+/** Structure definition for the "stat_cfg" group of the "xgpon_gem_port" 
+ * object. 
+ */
+typedef struct bcmolt_xgpon_gem_port_stat_cfg_data
+{
+    bcmolt_stat_alarm_config cfg;   /**< Statistic alarm configuration. */
+} bcmolt_xgpon_gem_port_stat_cfg_data;
+
+/** Transport message definition for "stat_cfg" group of "xgpon_gem_port" 
+ * object. 
+ */
+typedef struct bcmolt_xgpon_gem_port_stat_cfg
+{
+    bcmolt_stat_cfg hdr;            /**< Transport header. */
+    bcmolt_xgpon_gem_port_key key;  /**< Object key. */
+    bcmolt_xgpon_gem_port_stat_cfg_data data;   /**< All properties that must be set by the user. */
+} bcmolt_xgpon_gem_port_stat_cfg;
+
+/** Structure definition for the "stat_alarm_cleared" group of the 
+ * "xgpon_gem_port" object. 
+ *
+ * Sent when a configured statistic alarm condition is no longer met. 
+ */
+typedef struct bcmolt_xgpon_gem_port_stat_alarm_cleared_data
+{
+    bcmolt_xgpon_gem_port_stat_id stat; /**< Statistic identifier. */
+} bcmolt_xgpon_gem_port_stat_alarm_cleared_data;
+
+/** Transport message definition for "stat_alarm_cleared" group of 
+ * "xgpon_gem_port" object. 
+ */
+typedef struct bcmolt_xgpon_gem_port_stat_alarm_cleared
+{
+    bcmolt_auto hdr;                /**< Transport header. */
+    bcmolt_xgpon_gem_port_key key;  /**< Object key. */
+    bcmolt_xgpon_gem_port_stat_alarm_cleared_data data; /**< All properties that must be set by the user. */
+} bcmolt_xgpon_gem_port_stat_alarm_cleared;
+
+/** Structure definition for the "stat_alarm_raised" group of the 
+ * "xgpon_gem_port" object. 
+ *
+ * Sent when a configured statistic alarm condition has been met. 
+ */
+typedef struct bcmolt_xgpon_gem_port_stat_alarm_raised_data
+{
+    bcmolt_xgpon_gem_port_stat_id stat; /**< Statistic identifier. */
+} bcmolt_xgpon_gem_port_stat_alarm_raised_data;
+
+/** Transport message definition for "stat_alarm_raised" group of 
+ * "xgpon_gem_port" object. 
+ */
+typedef struct bcmolt_xgpon_gem_port_stat_alarm_raised
+{
+    bcmolt_auto hdr;                /**< Transport header. */
+    bcmolt_xgpon_gem_port_key key;  /**< Object key. */
+    bcmolt_xgpon_gem_port_stat_alarm_raised_data data;  /**< All properties that must be set by the user. */
+} bcmolt_xgpon_gem_port_stat_alarm_raised;
+
+/** Structure definition for the "auto_cfg" group of the "xgpon_gem_port" 
+ * object. 
+ */
+typedef struct bcmolt_xgpon_gem_port_auto_cfg_data
+{
+    bcmos_bool stat_alarm_cleared;  /**< If true, indications of type "stat_alarm_cleared" will be generated. */
+    bcmos_bool stat_alarm_raised;   /**< If true, indications of type "stat_alarm_raised" will be generated. */
+} bcmolt_xgpon_gem_port_auto_cfg_data;
+
+/** Transport message definition for "auto_cfg" group of "xgpon_gem_port" 
+ * object. 
+ */
+typedef struct bcmolt_xgpon_gem_port_auto_cfg
+{
+    bcmolt_auto_cfg hdr;                        /**< Transport header. */
+    bcmolt_xgpon_gem_port_key key;              /**< Object key. */
+    bcmolt_xgpon_gem_port_auto_cfg_data data;   /**< All properties that must be set by the user. */
+} bcmolt_xgpon_gem_port_auto_cfg;
+
+/** Structure definition for the "key" group of the "xgpon_iwf" object. 
+ */
+typedef struct bcmolt_xgpon_iwf_key
+{
+    bcmolt_xgpon_ni pon_ni; /**< PON network interface. */
+} bcmolt_xgpon_iwf_key;
+
+/** Structure definition for the "cfg" group of the "xgpon_iwf" object. 
+ */
+typedef struct bcmolt_xgpon_iwf_cfg_data
+{
+    uint16_t us_otag_direct_tpid;   /**< TPID value of the VLAN tag added to upstream packet */
+#define BCMOLT_XGPON_IWF_CFG_DATA_DS_TPID_LEN   5
+    bcmolt_arr_u16_5_hex ds_tpid;   /**< Packets marked with one of the five configured DS TPID options will be forwarded, all the rest will be dropped */
+} bcmolt_xgpon_iwf_cfg_data;
+
+/** Transport message definition for "cfg" group of "xgpon_iwf" object. 
+ */
+typedef struct bcmolt_xgpon_iwf_cfg
+{
+    bcmolt_cfg hdr;                 /**< Transport header. */
+    bcmolt_xgpon_iwf_key key;       /**< Object key. */
+    bcmolt_xgpon_iwf_cfg_data data; /**< All properties that must be set by the user. */
+} bcmolt_xgpon_iwf_cfg;
+
+/** Structure definition for the "key" group of the "xgpon_ni" object. 
+ */
+typedef struct bcmolt_xgpon_ni_key
+{
+    bcmolt_xgpon_ni pon_ni; /**< PON network interface. */
+} bcmolt_xgpon_ni_key;
+
+/** Structure definition for the "cfg" group of the "xgpon_ni" object. 
+ */
+typedef struct bcmolt_xgpon_ni_cfg_data
+{
+    bcmolt_hw_pon_id hw_pon_id; /**< 51 bit PON identifier. This attribute is part of the downstream physical synchronization block (PSBd) */
+    bcmolt_pon_available_bandwidth available_bandwidth; /**< PON available bandwidth parameters */
+    uint16_t number_of_active_onus;                     /**< Number of active ONUs on the PON */
+    bcmolt_pon_status pon_status;                       /**< PON status parameters */
+    bcmolt_pon_distance pon_distance;                   /**< PON distance */
+    uint32_t ranging_window_size;                       /**< Ranging window size in BW units (4-byte words for 2.5G upstream, 16-byte blocks for 10G upstream) */
+    uint32_t eqd_cycles_number;             /**< How many ranging windows are opened during a single ONU activation process */
+    bcmolt_pon_drift_control drift_control; /**< Drift control process configuration */
+    uint8_t los_alarm_threshold;            /**< LOS alarm threshold */
+    bcmolt_status los_initial_value;        /**< LOS initial value following PON activation */
+    bcmolt_xgpon_onu_alarms_thresholds onu_alarms_thresholds;               /**< ONU alarms thresholds configuration */
+    bcmolt_ber_monitor_params ber_monitor;                                  /**< BER monitor process configuration */
+    bcmolt_xgpon_onu_activation onu_activation;                             /**< ONU activation control parameters */
+    bcmolt_xgpon_sn_acquisition sn_acquisition;                             /**< Serial Number process configuration */
+    bcmolt_xgpon_key_exchange key_exchange;                                 /**< Key Exchange process configuration */
+    bcmolt_xgpon_protection_switching protection_switching;                 /**< Protection switching control */
+    bcmolt_xgpon_protection_switching_debug protection_switching_debug;     /**< protection switching debug . */
+    bcmolt_cbr_rt_allocation_profile cbr_rt_allocation_profile;             /**< CBR Real Time allocation profile */
+#define BCMOLT_XGPON_NI_CFG_DATA_CBR_NRT_ALLOCATION_PROFILE_LEN 2
+    bcmolt_arr_u16_2 cbr_nrt_allocation_profile;                            /**< CBR non Real Time allocation profile */
+    bcmolt_onu_power_management_configuration power_management;             /**< ONU power management control */
+    bcmolt_rogue_onu_detection_process rogue_onu_detection_process;         /**< TBD */
+    bcmolt_periodic_standby_pon_monitoring periodic_standby_pon_monitoring; /**< Periodic Standby PON monitoring */
+    bcmolt_dba_mode dba_mode;                       /**< DBA mode */
+    bcmolt_xgpon_ploam_handling ploam_handling;     /**< Ploam handling configuration */
+    bcmolt_xgpon_alloc_id min_data_alloc_id;        /**< Min data Alloc ID value */
+    bcmolt_xgpon_gem_id min_data_gem_port_id;       /**< Min data XGEM port ID value */
+    bcmolt_xgpon_multicast_key multicast_key;       /**< Multicast XGEM ports encryption control */
+    bcmolt_prbs_checker_config prbs_checker;        /**< US PRBS checker configuration */
+    bcmolt_prbs_generator_config prbs_generator;    /**< DS PRBS generator configuration */
+    bcmolt_prbs_status prbs_status;                 /**< Result of US PRBS checker */
+    bcmolt_automatic_onu_deactivation automatic_onu_deactivation;   /**< Option to disable the automatic deactivation of ONUs due to alarms */
+    uint32_t us_bandwidth_limit;    /**< Total PON upstream bandwidth limit in bytes per second. */
+    bcmolt_xgpon_onu_with_state_list_u16_max_510 all_onus;                  /**< All ONUs currently provisioned on this PON. */
+    bcmolt_xgpon_gem_port_with_state_list_u16_max_128 all_mcast_gem_ports;  /**< All multicast GEM ports currently provisioned on this PON. */
+    bcmolt_xgpon_ni_debug debug;                        /**< PON NI debug parameters */
+    bcmolt_gpon_onu_upgrade_params onu_upgrade_params;  /**< ONU upgrade params. */
+    bcmolt_control_state ds_fec_mode;                   /**< DS FEC mode. */
+    bcmolt_dba_type dba_type;                   /**< DBA implementation type */
+    bcmolt_onu_tuning_configuration onu_tuning; /**< onu tuning. */
+} bcmolt_xgpon_ni_cfg_data;
+
+/** Transport message definition for "cfg" group of "xgpon_ni" object. 
+ */
+typedef struct bcmolt_xgpon_ni_cfg
+{
+    bcmolt_cfg hdr;                 /**< Transport header. */
+    bcmolt_xgpon_ni_key key;        /**< Object key. */
+    bcmolt_xgpon_ni_cfg_data data;  /**< All properties that must be set by the user. */
+} bcmolt_xgpon_ni_cfg;
+
+/** Structure definition for the "stat" group of the "xgpon_ni" object. 
+ */
+typedef struct bcmolt_xgpon_ni_stat_data
+{
+    uint64_t fec_codewords;             /**< Receive FEC codewords. */
+    uint64_t bip32_bytes;               /**< Received bytes protected by bip32. */
+    uint64_t bip32_errors;              /**< Received bip32 errors. */
+    uint64_t rx_xgtc_headers;           /**< Received valid XGTC headers. */
+    uint64_t rx_xgtc_corrected;         /**< Received corrected XGTC headers. */
+    uint64_t rx_xgtc_uncorrected;       /**< Received uncorrected XGTC headers. */
+    uint64_t rx_xgem;                   /**< Received valid XGEM frames. */
+    uint64_t rx_xgem_dropped;           /**< Received dropped XGEM ID frames. */
+    uint64_t rx_xgem_idle;              /**< Received idle XGEM frames. */
+    uint64_t rx_xgem_corrected;         /**< Received corrected XGEM frames. */
+    uint64_t rx_crc_error;              /**< Received packets with CRC error. */
+    uint64_t rx_fragment_error;         /**< Received fragment errors. */
+    uint64_t rx_packets_dropped;        /**< Global dropped packets. */
+    uint64_t rx_dropped_too_short;      /**< Received packets dropped due to length too short. */
+    uint64_t rx_dropped_too_long;       /**< Received packet dropped due to length too long. */
+    uint64_t rx_key_error;              /**< Received key errors. */
+    uint64_t tx_ploams;                 /**< Transmitted Ploams. */
+    uint64_t rx_ploams_dropped;         /**< Received dropped Ploams. */
+    uint64_t rx_allocations_valid;      /**< Received valid allocations. */
+    uint64_t rx_allocations_invalid;    /**< Received invalid allocations. */
+    uint64_t rx_allocations_disabled;   /**< Received disabled allocations. */
+    uint64_t rx_ploams;                 /**< Received Ploams. */
+    uint64_t rx_ploams_non_idle;        /**< Received non idle Ploams. */
+    uint64_t rx_ploams_error;           /**< Received error Ploams. */
+    uint64_t rx_cpu;                    /**< Received CPU packets. */
+    uint64_t rx_omci;                   /**< Received OMCI packets. */
+    uint64_t rx_omci_packets_crc_error; /**< Received OMCI packets with CRC errors. */
+    uint64_t tx_packets;                /**< Transmitted packets. */
+    uint64_t tx_xgem;                   /**< Transmitted XGEM fragments. */
+    uint64_t tx_cpu;                    /**< Transmitted CPU packets. */
+    uint64_t tx_omci;                   /**< Transmitted OMCI packets. */
+    uint8_t tx_cpu_omci_packets_dropped;    /**< Transmit packets dropped due to illegal length. */
+    uint64_t tx_dropped_illegal_length;     /**< Transmit packets dropped due to illegal length. */
+    uint64_t tx_dropped_tpid_miss;          /**< Transmit packets dropped due to TPID miss. */
+    uint64_t tx_dropped_vid_miss;           /**< Transmit packets droped due to VID miss. */
+} bcmolt_xgpon_ni_stat_data;
+
+/** Transport message definition for "stat" group of "xgpon_ni" object. 
+ */
+typedef struct bcmolt_xgpon_ni_stat
+{
+    bcmolt_stat hdr;                /**< Transport header. */
+    bcmolt_xgpon_ni_key key;        /**< Object key. */
+    bcmolt_xgpon_ni_stat_data data; /**< All properties that must be set by the user. */
+} bcmolt_xgpon_ni_stat;
+
+/** Structure definition for the "stat_cfg" group of the "xgpon_ni" object. 
+ */
+typedef struct bcmolt_xgpon_ni_stat_cfg_data
+{
+    bcmolt_stat_alarm_config cfg;   /**< Statistic alarm configuration. */
+} bcmolt_xgpon_ni_stat_cfg_data;
+
+/** Transport message definition for "stat_cfg" group of "xgpon_ni" object. 
+ */
+typedef struct bcmolt_xgpon_ni_stat_cfg
+{
+    bcmolt_stat_cfg hdr;                /**< Transport header. */
+    bcmolt_xgpon_ni_key key;            /**< Object key. */
+    bcmolt_xgpon_ni_stat_cfg_data data; /**< All properties that must be set by the user. */
+} bcmolt_xgpon_ni_stat_cfg;
+
+/** Transport message definition for "activate_all_onus_completed" group of 
+ * "xgpon_ni" object. 
+ */
+typedef struct bcmolt_xgpon_ni_activate_all_onus_completed
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_xgpon_ni_key key;    /**< Object key. */
+} bcmolt_xgpon_ni_activate_all_onus_completed;
+
+/** Structure definition for the "cpu_packets_failure" group of the "xgpon_ni" 
+ * object. 
+ *
+ * A failure was encountered during the "cpu_packets" proxy operation. 
+ */
+typedef struct bcmolt_xgpon_ni_cpu_packets_failure_data
+{
+    bcmolt_packet_injection_error error;    /**< The error that was encountered. */
+    bcmolt_xgpon_gem_id gem_port_id;        /**< The GEM port that caused the error. */
+} bcmolt_xgpon_ni_cpu_packets_failure_data;
+
+/** Transport message definition for "cpu_packets_failure" group of "xgpon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_xgpon_ni_cpu_packets_failure
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_xgpon_ni_key key;    /**< Object key. */
+    bcmolt_xgpon_ni_cpu_packets_failure_data data;  /**< All properties that must be set by the user. */
+} bcmolt_xgpon_ni_cpu_packets_failure;
+
+/** Transport message definition for "deactivate_all_onus_completed" group of 
+ * "xgpon_ni" object. 
+ */
+typedef struct bcmolt_xgpon_ni_deactivate_all_onus_completed
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_xgpon_ni_key key;    /**< Object key. */
+} bcmolt_xgpon_ni_deactivate_all_onus_completed;
+
+/** Transport message definition for "disable_all_onus_completed" group of 
+ * "xgpon_ni" object. 
+ */
+typedef struct bcmolt_xgpon_ni_disable_all_onus_completed
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_xgpon_ni_key key;    /**< Object key. */
+} bcmolt_xgpon_ni_disable_all_onus_completed;
+
+/** Transport message definition for "enable_all_onus_completed" group of 
+ * "xgpon_ni" object. 
+ */
+typedef struct bcmolt_xgpon_ni_enable_all_onus_completed
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_xgpon_ni_key key;    /**< Object key. */
+} bcmolt_xgpon_ni_enable_all_onus_completed;
+
+/** Structure definition for the "los" group of the "xgpon_ni" object. 
+ */
+typedef struct bcmolt_xgpon_ni_los_data
+{
+    bcmolt_status status;   /**< status. */
+} bcmolt_xgpon_ni_los_data;
+
+/** Transport message definition for "los" group of "xgpon_ni" object. 
+ */
+typedef struct bcmolt_xgpon_ni_los
+{
+    bcmolt_auto hdr;                /**< Transport header. */
+    bcmolt_xgpon_ni_key key;        /**< Object key. */
+    bcmolt_xgpon_ni_los_data data;  /**< All properties that must be set by the user. */
+} bcmolt_xgpon_ni_los;
+
+/** Structure definition for the "onu_discovered" group of the "xgpon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_xgpon_ni_onu_discovered_data
+{
+    bcmolt_serial_number serial_number; /**< serial number. */
+    uint32_t ranging_time;              /**< ranging time. */
+    bcmolt_xgpon_onu_id onu_id;         /**< onu_id. */
+    bcmolt_upstream_line_rate_capabilities upstream_line_rate_capabilities; /**< Upstream line rate capabilities */
+    uint8_t current_downstream_pon_id;                  /**< The PON-ID received by the ONU in its current downstream wavelength channel */
+    uint8_t current_upstream_pon_id;                    /**< The PON-ID of the Channel Profile containing the descriptor of the upstream wavelength channel in which the ONU is transmitting */
+#define BCMOLT_XGPON_NI_ONU_DISCOVERED_DATA_CALIBRATION_RECORD_LEN  8
+    bcmolt_arr_calibration_record_8 calibration_record; /**< Calibration record */
+    uint8_t tuning_granularity;             /**< The tuning granularity of the ONU transmitted expressed in units of 1Ghz. Value of 0 indicates that the ONU does not support fine tuning / dithering */
+    uint8_t step_tuning_time;               /**< The value of the tuning time for a single granularity step, expressed in unit of PHY frames. The value 0 indicates that the ONU does not support fine tuning / dithering */
+    uint8_t attenuation;                    /**< The ONU attenuation in steps of 3dB at the time of the message transmission as part of the power levelling report. Value of 0 represents un-attenuated transmission */
+    uint8_t power_levelling_capabilities;   /**< The ONU supports attenuation level in step of 3dB */
+} bcmolt_xgpon_ni_onu_discovered_data;
+
+/** Transport message definition for "onu_discovered" group of "xgpon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_xgpon_ni_onu_discovered
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_xgpon_ni_key key;    /**< Object key. */
+    bcmolt_xgpon_ni_onu_discovered_data data;   /**< All properties that must be set by the user. */
+} bcmolt_xgpon_ni_onu_discovered;
+
+/** Structure definition for the "onu_upgrade_complete" group of the "xgpon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_xgpon_ni_onu_upgrade_complete_data
+{
+    bcmos_bool status;  /**< Success or failure.  Against entire upgrade process.  This is added per Anat's request. */
+    bcmolt_gpon_onu_upgrade_status_list_u32 list_of_failed_entities;    /**< List of ONU-IDs the upgrade failed for. */
+} bcmolt_xgpon_ni_onu_upgrade_complete_data;
+
+/** Transport message definition for "onu_upgrade_complete" group of "xgpon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_xgpon_ni_onu_upgrade_complete
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_xgpon_ni_key key;    /**< Object key. */
+    bcmolt_xgpon_ni_onu_upgrade_complete_data data; /**< All properties that must be set by the user. */
+} bcmolt_xgpon_ni_onu_upgrade_complete;
+
+/** Structure definition for the "protection_switching_onus_ranged" group of the 
+ * "xgpon_ni" object. 
+ *
+ * After a switchover is complete and all ONU ranging times have stabilized, 
+ * this indication is sent to inform the host of all new ONU EQDs. 
+ */
+typedef struct bcmolt_xgpon_ni_protection_switching_onus_ranged_data
+{
+    bcmolt_xgpon_onu_eqd_list_u32 onus; /**< ONUs. */
+} bcmolt_xgpon_ni_protection_switching_onus_ranged_data;
+
+/** Transport message definition for "protection_switching_onus_ranged" group of 
+ * "xgpon_ni" object. 
+ */
+typedef struct bcmolt_xgpon_ni_protection_switching_onus_ranged
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_xgpon_ni_key key;    /**< Object key. */
+    bcmolt_xgpon_ni_protection_switching_onus_ranged_data data; /**< All properties that must be set by the user. */
+} bcmolt_xgpon_ni_protection_switching_onus_ranged;
+
+/** Structure definition for the "protection_switching_switchover_completed" 
+ * group of the "xgpon_ni" object. 
+ */
+typedef struct bcmolt_xgpon_ni_protection_switching_switchover_completed_data
+{
+    bcmolt_result result;   /**< Result. */
+} bcmolt_xgpon_ni_protection_switching_switchover_completed_data;
+
+/** Transport message definition for "protection_switching_switchover_completed" 
+ * group of "xgpon_ni" object. 
+ */
+typedef struct bcmolt_xgpon_ni_protection_switching_switchover_completed
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_xgpon_ni_key key;    /**< Object key. */
+    bcmolt_xgpon_ni_protection_switching_switchover_completed_data data;    /**< All properties that must be set by the user. */
+} bcmolt_xgpon_ni_protection_switching_switchover_completed;
+
+/** Structure definition for the "protection_switching_traffic_resume" group of 
+ * the "xgpon_ni" object. 
+ */
+typedef struct bcmolt_xgpon_ni_protection_switching_traffic_resume_data
+{
+    bcmolt_traffic_resume_result result;    /**< Result. */
+} bcmolt_xgpon_ni_protection_switching_traffic_resume_data;
+
+/** Transport message definition for "protection_switching_traffic_resume" group 
+ * of "xgpon_ni" object. 
+ */
+typedef struct bcmolt_xgpon_ni_protection_switching_traffic_resume
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_xgpon_ni_key key;    /**< Object key. */
+    bcmolt_xgpon_ni_protection_switching_traffic_resume_data data;  /**< All properties that must be set by the user. */
+} bcmolt_xgpon_ni_protection_switching_traffic_resume;
+
+/** Structure definition for the "rogue_detection_completed" group of the 
+ * "xgpon_ni" object. 
+ */
+typedef struct bcmolt_xgpon_ni_rogue_detection_completed_data
+{
+    bcmolt_rogue_detection_window window_type;          /**< Silent Window or Cut off Window */
+    bcmolt_rogue_measurement_result measurement_status; /**< Status of the rogue ONU detection result. */
+    bcmolt_xgpon_alloc_id alloc_id;                     /**< Alloc-ID */
+    bcmolt_xgpon_onu_id onu_id;                 /**< ONU-ID */
+    bcmos_bool is_delineation;                  /**< Burst Delineation detected during the rogue ONU detection. */
+    bcmos_bool is_ed;                           /**< Is ED. */
+    bcmolt_u8_list_u32 rx_data;                 /**< Captured PLOAMu message if the burst delinieation was detected. */
+    bcmolt_xgpon_onu_id ploam_received_onu_id;  /**< ONU ID received in the ploam */
+    bcmos_bool ploam_received_mic_error;        /**< Mic error in the received ploam */
+} bcmolt_xgpon_ni_rogue_detection_completed_data;
+
+/** Transport message definition for "rogue_detection_completed" group of 
+ * "xgpon_ni" object. 
+ */
+typedef struct bcmolt_xgpon_ni_rogue_detection_completed
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_xgpon_ni_key key;    /**< Object key. */
+    bcmolt_xgpon_ni_rogue_detection_completed_data data;    /**< All properties that must be set by the user. */
+} bcmolt_xgpon_ni_rogue_detection_completed;
+
+/** Transport message definition for "rogue_onu_special_map_cycle_start" group 
+ * of "xgpon_ni" object. 
+ */
+typedef struct bcmolt_xgpon_ni_rogue_onu_special_map_cycle_start
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_xgpon_ni_key key;    /**< Object key. */
+} bcmolt_xgpon_ni_rogue_onu_special_map_cycle_start;
+
+/** Transport message definition for "serial_number_acquisition_cycle_start" 
+ * group of "xgpon_ni" object. 
+ */
+typedef struct bcmolt_xgpon_ni_serial_number_acquisition_cycle_start
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_xgpon_ni_key key;    /**< Object key. */
+} bcmolt_xgpon_ni_serial_number_acquisition_cycle_start;
+
+/** Structure definition for the "standby_pon_monitoring_cycle_completed" group 
+ * of the "xgpon_ni" object. 
+ */
+typedef struct bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data
+{
+    uint32_t number_of_detected_delimiter;  /**< number of detected delimiter. */
+    bcmolt_status energy_detect_signal;     /**< energy detect signal. */
+} bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data;
+
+/** Transport message definition for "standby_pon_monitoring_cycle_completed" 
+ * group of "xgpon_ni" object. 
+ */
+typedef struct bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_xgpon_ni_key key;    /**< Object key. */
+    bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data data;   /**< All properties that must be set by the user. */
+} bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed;
+
+/** Structure definition for the "stat_alarm_cleared" group of the "xgpon_ni" 
+ * object. 
+ *
+ * Sent when a configured statistic alarm condition is no longer met. 
+ */
+typedef struct bcmolt_xgpon_ni_stat_alarm_cleared_data
+{
+    bcmolt_xgpon_ni_stat_id stat;   /**< Statistic identifier. */
+} bcmolt_xgpon_ni_stat_alarm_cleared_data;
+
+/** Transport message definition for "stat_alarm_cleared" group of "xgpon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_xgpon_ni_stat_alarm_cleared
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_xgpon_ni_key key;    /**< Object key. */
+    bcmolt_xgpon_ni_stat_alarm_cleared_data data;   /**< All properties that must be set by the user. */
+} bcmolt_xgpon_ni_stat_alarm_cleared;
+
+/** Structure definition for the "stat_alarm_raised" group of the "xgpon_ni" 
+ * object. 
+ *
+ * Sent when a configured statistic alarm condition has been met. 
+ */
+typedef struct bcmolt_xgpon_ni_stat_alarm_raised_data
+{
+    bcmolt_xgpon_ni_stat_id stat;   /**< Statistic identifier. */
+} bcmolt_xgpon_ni_stat_alarm_raised_data;
+
+/** Transport message definition for "stat_alarm_raised" group of "xgpon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_xgpon_ni_stat_alarm_raised
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_xgpon_ni_key key;    /**< Object key. */
+    bcmolt_xgpon_ni_stat_alarm_raised_data data;    /**< All properties that must be set by the user. */
+} bcmolt_xgpon_ni_stat_alarm_raised;
+
+/** Structure definition for the "state_change_completed" group of the 
+ * "xgpon_ni" object. 
+ */
+typedef struct bcmolt_xgpon_ni_state_change_completed_data
+{
+    bcmolt_result result;               /**< Result. */
+    bcmolt_pon_state previous_state;    /**< Previous state. */
+    bcmolt_pon_state new_state;         /**< new state. */
+} bcmolt_xgpon_ni_state_change_completed_data;
+
+/** Transport message definition for "state_change_completed" group of 
+ * "xgpon_ni" object. 
+ */
+typedef struct bcmolt_xgpon_ni_state_change_completed
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_xgpon_ni_key key;    /**< Object key. */
+    bcmolt_xgpon_ni_state_change_completed_data data;   /**< All properties that must be set by the user. */
+} bcmolt_xgpon_ni_state_change_completed;
+
+/** Structure definition for the "tod_request_completed" group of the "xgpon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_xgpon_ni_tod_request_completed_data
+{
+    bcmolt_str_64 tod_string;   /**< tod_string. */
+    uint64_t sfc;               /**< sfc. */
+    uint64_t rtc_offset_sec;    /**< rtc_offset_sec. */
+    uint32_t rtc_offset_nsec;   /**< rtc_offset_nsec. */
+    bcmolt_result status;       /**< status. */
+} bcmolt_xgpon_ni_tod_request_completed_data;
+
+/** Transport message definition for "tod_request_completed" group of "xgpon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_xgpon_ni_tod_request_completed
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_xgpon_ni_key key;    /**< Object key. */
+    bcmolt_xgpon_ni_tod_request_completed_data data;    /**< All properties that must be set by the user. */
+} bcmolt_xgpon_ni_tod_request_completed;
+
+/** Structure definition for the "auto_cfg" group of the "xgpon_ni" object. 
+ */
+typedef struct bcmolt_xgpon_ni_auto_cfg_data
+{
+    bcmos_bool activate_all_onus_completed;     /**< If true, indications of type "activate_all_onus_completed" will be generated. */
+    bcmos_bool cpu_packets_failure;             /**< If true, indications of type "cpu_packets_failure" will be generated. */
+    bcmos_bool deactivate_all_onus_completed;   /**< If true, indications of type "deactivate_all_onus_completed" will be generated. */
+    bcmos_bool disable_all_onus_completed;      /**< If true, indications of type "disable_all_onus_completed" will be generated. */
+    bcmos_bool enable_all_onus_completed;       /**< If true, indications of type "enable_all_onus_completed" will be generated. */
+    bcmos_bool los;                     /**< If true, indications of type "los" will be generated. */
+    bcmos_bool onu_discovered;          /**< If true, indications of type "onu_discovered" will be generated. */
+    bcmos_bool onu_upgrade_complete;    /**< If true, indications of type "onu_upgrade_complete" will be generated. */
+    bcmos_bool protection_switching_onus_ranged;            /**< If true, indications of type "protection_switching_onus_ranged" will be generated. */
+    bcmos_bool protection_switching_switchover_completed;   /**< If true, indications of type "protection_switching_switchover_completed" will be generated. */
+    bcmos_bool protection_switching_traffic_resume;         /**< If true, indications of type "protection_switching_traffic_resume" will be generated. */
+    bcmos_bool rogue_detection_completed;                   /**< If true, indications of type "rogue_detection_completed" will be generated. */
+    bcmos_bool rogue_onu_special_map_cycle_start;           /**< If true, indications of type "rogue_onu_special_map_cycle_start" will be generated. */
+    bcmos_bool serial_number_acquisition_cycle_start;       /**< If true, indications of type "serial_number_acquisition_cycle_start" will be generated. */
+    bcmos_bool standby_pon_monitoring_cycle_completed;      /**< If true, indications of type "standby_pon_monitoring_cycle_completed" will be generated. */
+    bcmos_bool stat_alarm_cleared;      /**< If true, indications of type "stat_alarm_cleared" will be generated. */
+    bcmos_bool stat_alarm_raised;       /**< If true, indications of type "stat_alarm_raised" will be generated. */
+    bcmos_bool state_change_completed;  /**< If true, indications of type "state_change_completed" will be generated. */
+    bcmos_bool tod_request_completed;   /**< If true, indications of type "tod_request_completed" will be generated. */
+} bcmolt_xgpon_ni_auto_cfg_data;
+
+/** Transport message definition for "auto_cfg" group of "xgpon_ni" object. 
+ */
+typedef struct bcmolt_xgpon_ni_auto_cfg
+{
+    bcmolt_auto_cfg hdr;                /**< Transport header. */
+    bcmolt_xgpon_ni_key key;            /**< Object key. */
+    bcmolt_xgpon_ni_auto_cfg_data data; /**< All properties that must be set by the user. */
+} bcmolt_xgpon_ni_auto_cfg;
+
+/** Structure definition for the "adjust_tx_wavelength" group of the "xgpon_ni" 
+ * object. 
+ *
+ * Instruct an unassigned ONU to adjust its upstream transmitter wavelength 
+ */
+typedef struct bcmolt_xgpon_ni_adjust_tx_wavelength_data
+{
+    bcmolt_serial_number serial_number; /**< Serial number */
+    bcmolt_frequency_adjustment_direction freqency_adjustment_direction;    /**< Frequency adjustment direction */
+    uint8_t frequency_adjustment_size;  /**< The size of the frequncy adjustment in units of 0.1 Ghz */
+} bcmolt_xgpon_ni_adjust_tx_wavelength_data;
+
+/** Transport message definition for "adjust_tx_wavelength" group of "xgpon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_xgpon_ni_adjust_tx_wavelength
+{
+    bcmolt_oper hdr;            /**< Transport header. */
+    bcmolt_xgpon_ni_key key;    /**< Object key. */
+    bcmolt_xgpon_ni_adjust_tx_wavelength_data data; /**< All properties that must be set by the user. */
+} bcmolt_xgpon_ni_adjust_tx_wavelength;
+
+/** Structure definition for the "disable_serial_number" group of the "xgpon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_xgpon_ni_disable_serial_number_data
+{
+    bcmolt_disable_serial_number_control control;   /**< control. */
+    bcmolt_serial_number serial_number;             /**< serial number. */
+} bcmolt_xgpon_ni_disable_serial_number_data;
+
+/** Transport message definition for "disable_serial_number" group of "xgpon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_xgpon_ni_disable_serial_number
+{
+    bcmolt_oper hdr;            /**< Transport header. */
+    bcmolt_xgpon_ni_key key;    /**< Object key. */
+    bcmolt_xgpon_ni_disable_serial_number_data data;    /**< All properties that must be set by the user. */
+} bcmolt_xgpon_ni_disable_serial_number;
+
+/** Transport message definition for "reset" group of "xgpon_ni" object. 
+ */
+typedef struct bcmolt_xgpon_ni_reset
+{
+    bcmolt_oper hdr;            /**< Transport header. */
+    bcmolt_xgpon_ni_key key;    /**< Object key. */
+} bcmolt_xgpon_ni_reset;
+
+/** Structure definition for the "rogue_detection_window" group of the 
+ * "xgpon_ni" object. 
+ */
+typedef struct bcmolt_xgpon_ni_rogue_detection_window_data
+{
+    bcmolt_rogue_detection_window window_type;  /**< Type of silent measurement to execute */
+    bcmolt_xgpon_alloc_id alloc_id;             /**< ALLOC ID to scan */
+    bcmolt_xgpon_onu_id onu_id;                 /**< ONU ID to scan */
+    bcmos_bool second_ranging_window;           /**< Not currently supported */
+} bcmolt_xgpon_ni_rogue_detection_window_data;
+
+/** Transport message definition for "rogue_detection_window" group of 
+ * "xgpon_ni" object. 
+ */
+typedef struct bcmolt_xgpon_ni_rogue_detection_window
+{
+    bcmolt_oper hdr;            /**< Transport header. */
+    bcmolt_xgpon_ni_key key;    /**< Object key. */
+    bcmolt_xgpon_ni_rogue_detection_window_data data;   /**< All properties that must be set by the user. */
+} bcmolt_xgpon_ni_rogue_detection_window;
+
+/** Structure definition for the "run_special_bw_map" group of the "xgpon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_xgpon_ni_run_special_bw_map_data
+{
+    uint8_t number_of_cycle;    /**< number of cycle. */
+    uint8_t allocation_number;  /**< allocation number. */
+    uint8_t bw_map_array;       /**< bw map array. */
+} bcmolt_xgpon_ni_run_special_bw_map_data;
+
+/** Transport message definition for "run_special_bw_map" group of "xgpon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_xgpon_ni_run_special_bw_map
+{
+    bcmolt_oper hdr;            /**< Transport header. */
+    bcmolt_xgpon_ni_key key;    /**< Object key. */
+    bcmolt_xgpon_ni_run_special_bw_map_data data;   /**< All properties that must be set by the user. */
+} bcmolt_xgpon_ni_run_special_bw_map;
+
+/** Structure definition for the "set_onu_state" group of the "xgpon_ni" object. 
+ *
+ * Set the operation state of all ONUs. 
+ */
+typedef struct bcmolt_xgpon_ni_set_onu_state_data
+{
+    bcmolt_onu_operation onu_state; /**< New operation state of all ONUs.  The default operation may be configured by the XGPON NI configuration object : xgpon_ni.cfg.sn_acquisition. */
+} bcmolt_xgpon_ni_set_onu_state_data;
+
+/** Transport message definition for "set_onu_state" group of "xgpon_ni" object. 
+ */
+typedef struct bcmolt_xgpon_ni_set_onu_state
+{
+    bcmolt_oper hdr;            /**< Transport header. */
+    bcmolt_xgpon_ni_key key;    /**< Object key. */
+    bcmolt_xgpon_ni_set_onu_state_data data;    /**< All properties that must be set by the user. */
+} bcmolt_xgpon_ni_set_onu_state;
+
+/** Structure definition for the "set_pon_state" group of the "xgpon_ni" object. 
+ */
+typedef struct bcmolt_xgpon_ni_set_pon_state_data
+{
+    bcmolt_pon_operation pon_state; /**< PON state. */
+} bcmolt_xgpon_ni_set_pon_state_data;
+
+/** Transport message definition for "set_pon_state" group of "xgpon_ni" object. 
+ */
+typedef struct bcmolt_xgpon_ni_set_pon_state
+{
+    bcmolt_oper hdr;            /**< Transport header. */
+    bcmolt_xgpon_ni_key key;    /**< Object key. */
+    bcmolt_xgpon_ni_set_pon_state_data data;    /**< All properties that must be set by the user. */
+} bcmolt_xgpon_ni_set_pon_state;
+
+/** Transport message definition for "single_request_standby_pon_monitoring" 
+ * group of "xgpon_ni" object. 
+ */
+typedef struct bcmolt_xgpon_ni_single_request_standby_pon_monitoring
+{
+    bcmolt_oper hdr;            /**< Transport header. */
+    bcmolt_xgpon_ni_key key;    /**< Object key. */
+} bcmolt_xgpon_ni_single_request_standby_pon_monitoring;
+
+/** Structure definition for the "start_onu_upgrade" group of the "xgpon_ni" 
+ * object. 
+ *
+ * OLT to ONU firmware transfer 
+ */
+typedef struct bcmolt_xgpon_ni_start_onu_upgrade_data
+{
+    bcmolt_pon_onu_id_list_u32 list_of_onu_ids; /**< List of ONU IDs to upgrade the firmware. */
+} bcmolt_xgpon_ni_start_onu_upgrade_data;
+
+/** Transport message definition for "start_onu_upgrade" group of "xgpon_ni" 
+ * object. 
+ */
+typedef struct bcmolt_xgpon_ni_start_onu_upgrade
+{
+    bcmolt_oper hdr;            /**< Transport header. */
+    bcmolt_xgpon_ni_key key;    /**< Object key. */
+    bcmolt_xgpon_ni_start_onu_upgrade_data data;    /**< All properties that must be set by the user. */
+} bcmolt_xgpon_ni_start_onu_upgrade;
+
+/** Transport message definition for "tod_request" group of "xgpon_ni" object. 
+ */
+typedef struct bcmolt_xgpon_ni_tod_request
+{
+    bcmolt_oper hdr;            /**< Transport header. */
+    bcmolt_xgpon_ni_key key;    /**< Object key. */
+} bcmolt_xgpon_ni_tod_request;
+
+/** Structure definition for the "broadcast_ploam_packet" group of the 
+ * "xgpon_ni" object. 
+ */
+typedef struct bcmolt_xgpon_ni_broadcast_ploam_packet_data
+{
+#define BCMOLT_XGPON_NI_BROADCAST_PLOAM_PACKET_DATA_PLOAM_LEN   40
+    bcmolt_arr_u8_40 ploam; /**< ploam. */
+} bcmolt_xgpon_ni_broadcast_ploam_packet_data;
+
+/** Transport message definition for "broadcast_ploam_packet" group of 
+ * "xgpon_ni" object. 
+ */
+typedef struct bcmolt_xgpon_ni_broadcast_ploam_packet
+{
+    bcmolt_proxy hdr;           /**< Transport header. */
+    bcmolt_xgpon_ni_key key;    /**< Object key. */
+    bcmolt_xgpon_ni_broadcast_ploam_packet_data data;   /**< All properties that must be set by the user. */
+} bcmolt_xgpon_ni_broadcast_ploam_packet;
+
+/** Structure definition for the "cpu_packets" group of the "xgpon_ni" object. 
+ */
+typedef struct bcmolt_xgpon_ni_cpu_packets_data
+{
+    bcmolt_packet_type packet_type;                     /**< packet type. */
+    bcmos_bool calc_crc;                                /**< calc crc. */
+    bcmolt_xgpon_gem_id_list_u8_max_16 gem_port_list;   /**< gem port list. */
+    bcmolt_u8_list_u32_max_2048 buffer;                 /**< buffer. */
+} bcmolt_xgpon_ni_cpu_packets_data;
+
+/** Transport message definition for "cpu_packets" group of "xgpon_ni" object. 
+ */
+typedef struct bcmolt_xgpon_ni_cpu_packets
+{
+    bcmolt_proxy hdr;                       /**< Transport header. */
+    bcmolt_xgpon_ni_key key;                /**< Object key. */
+    bcmolt_xgpon_ni_cpu_packets_data data;  /**< All properties that must be set by the user. */
+} bcmolt_xgpon_ni_cpu_packets;
+
+/** Structure definition for the "key" group of the "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_key
+{
+    bcmolt_xgpon_ni pon_ni;     /**< PON network interface. */
+    bcmolt_xgpon_onu_id onu_id; /**< onu id. */
+} bcmolt_xgpon_onu_key;
+
+/** Structure definition for the "cfg" group of the "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_cfg_data
+{
+    bcmolt_onu_state onu_state;     /**< Current ONU state */
+    bcmolt_onu_state onu_old_state; /**< onu old state. */
+    bcmolt_xgpon_onu_alarm_state alarm_state;   /**< State of all ONU alarms.  This is normally read-only and can only be written when the PON is in active-standby mode to keep the ONU in sync. */
+    bcmolt_xgpon_onu_registration_keys registration_encryption_keys;    /**< AES encryption keys learned during ONU registration.  This is normally read-only and can only be written when the PON is in active-standby mode to keep the ONU in sync. */
+    bcmolt_xgpon_onu_aes_key current_encryption_key;                    /**< Current AES encryption key.  This is normally read-only and can only be written when the PON is in active-standby mode to keep the ONU in sync. */
+    bcmolt_serial_number serial_number;                 /**< ONU serial number */
+#define BCMOLT_XGPON_ONU_CFG_DATA_REGISTRATION_ID_LEN   36
+    bcmolt_arr_u8_36 registration_id;                   /**< ONU registration ID */
+    bcmos_bool registration_id_auto_learning;           /**< Enable\Disable automatic registration learning */
+    bcmolt_burst_profile_index ranging_burst_profile;   /**< Burst profile index for ranging allocations */
+    bcmolt_burst_profile_index data_burst_profile;      /**< Burst profile index for data allocations */
+    uint32_t ranging_time;                  /**< ONU ranging time.  This is normally read-only and can only be written when the PON is in active-standby mode to keep the ONU in sync. */
+    bcmolt_status disabled_after_discovery; /**< This ONU was disabled after SN discovery */
+    bcmolt_deactivation_reason deactivation_reason;                     /**< deactivation reason. */
+    bcmolt_xgpon_gem_port_with_state_list_u16_max_256 all_gem_ports;    /**< All unicast GEM ports currently provisioned on this ONU. */
+    bcmolt_xgpon_alloc_with_state_list_u16_max_32 all_allocs;           /**< All alloc IDs currently provisioned on this ONU. */
+    bcmolt_extended_guard_time extended_guard_time;                     /**< Additional guard time (in bytes) for this ONU. */
+    bcmolt_upstream_line_rate_capabilities us_line_rate;                /**< US line rate. */
+#define BCMOLT_XGPON_ONU_CFG_DATA_CALIBRATION_RECORD_LEN    8
+    bcmolt_arr_calibration_record_8 calibration_record;                 /**< Calibration record. */
+    uint8_t tuning_granularity;             /**< The tuning granularity of the ONU transmitted expressed in units of 1GHz. Value of 0 indicates that the ONU does not support fine tuning/dithering */
+    uint8_t step_tuning_time;               /**< The value of the tuning time for a single granularity step, expressed in units of PHY frames. */
+    uint8_t power_levelling_capabilities;   /**< Power levelling capabilities. */
+    bcmolt_request_registration_status request_registration_status; /**< This value indicate that the onu is in the middle of request registration process */
+} bcmolt_xgpon_onu_cfg_data;
+
+/** Transport message definition for "cfg" group of "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_cfg
+{
+    bcmolt_cfg hdr;                 /**< Transport header. */
+    bcmolt_xgpon_onu_key key;       /**< Object key. */
+    bcmolt_xgpon_onu_cfg_data data; /**< All properties that must be set by the user. */
+} bcmolt_xgpon_onu_cfg;
+
+/** Structure definition for the "stat" group of the "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_stat_data
+{
+    uint64_t positive_drift;            /**< positive drift. */
+    uint64_t negative_drift;            /**< negative drift. */
+    uint64_t delimiter_miss_detection;  /**< delimiter miss detection. */
+    uint64_t bip32_errors;              /**< bip32 errors. */
+    uint64_t rx_words;                  /**< Number of 4-byte words received (word size is 4 bytes regardless of upstream data rate). */
+    uint64_t fec_corrected_symbols;     /**< fec corrected symbols. */
+    uint64_t fec_corrected_codewords;   /**< fec corrected codewords. */
+    uint64_t fec_uncorrectable_codewords;   /**< fec uncorrectable codewords. */
+    uint64_t fec_codewords;                 /**< fec total codewords. */
+    uint64_t fec_corrected_bits;            /**< fec corrected bits. */
+    uint64_t xgem_key_errors;               /**< xgem key error. */
+    uint64_t xgem_loss;                     /**< xgem loss . */
+    uint64_t rx_ploams_mic_error;           /**< mic error ploam. */
+    uint64_t rx_ploams_non_idle;            /**< non idle ploam. */
+    uint64_t rx_omci;                       /**< Received OMCI packets. */
+    uint64_t rx_omci_packets_crc_error;     /**< Received OMCI packets with CRC errors. */
+    uint64_t rx_bytes;                      /**< rx bytes. */
+    uint64_t rx_packets;                    /**< rx packets. */
+    uint64_t tx_bytes;                      /**< tx bytes. */
+    uint64_t tx_packets;                    /**< tx packets. */
+} bcmolt_xgpon_onu_stat_data;
+
+/** Transport message definition for "stat" group of "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_stat
+{
+    bcmolt_stat hdr;                    /**< Transport header. */
+    bcmolt_xgpon_onu_key key;           /**< Object key. */
+    bcmolt_xgpon_onu_stat_data data;    /**< All properties that must be set by the user. */
+} bcmolt_xgpon_onu_stat;
+
+/** Structure definition for the "stat_cfg" group of the "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_stat_cfg_data
+{
+    bcmolt_stat_alarm_config cfg;   /**< Statistic alarm configuration. */
+} bcmolt_xgpon_onu_stat_cfg_data;
+
+/** Transport message definition for "stat_cfg" group of "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_stat_cfg
+{
+    bcmolt_stat_cfg hdr;                    /**< Transport header. */
+    bcmolt_xgpon_onu_key key;               /**< Object key. */
+    bcmolt_xgpon_onu_stat_cfg_data data;    /**< All properties that must be set by the user. */
+} bcmolt_xgpon_onu_stat_cfg;
+
+/** Structure definition for the "dfi" group of the "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_dfi_data
+{
+    bcmolt_status alarm_status; /**< alarm status. */
+} bcmolt_xgpon_onu_dfi_data;
+
+/** Transport message definition for "dfi" group of "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_dfi
+{
+    bcmolt_auto hdr;                /**< Transport header. */
+    bcmolt_xgpon_onu_key key;       /**< Object key. */
+    bcmolt_xgpon_onu_dfi_data data; /**< All properties that must be set by the user. */
+} bcmolt_xgpon_onu_dfi;
+
+/** Structure definition for the "dgi" group of the "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_dgi_data
+{
+    bcmolt_status alarm_status; /**< alarm status. */
+} bcmolt_xgpon_onu_dgi_data;
+
+/** Transport message definition for "dgi" group of "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_dgi
+{
+    bcmolt_auto hdr;                /**< Transport header. */
+    bcmolt_xgpon_onu_key key;       /**< Object key. */
+    bcmolt_xgpon_onu_dgi_data data; /**< All properties that must be set by the user. */
+} bcmolt_xgpon_onu_dgi;
+
+/** Structure definition for the "dowi" group of the "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_dowi_data
+{
+    bcmolt_status alarm_status; /**< Alarm status. */
+    int32_t drift_value;        /**< Calculated amount of drift (positive + negative as a signed value). */
+    uint32_t new_eqd;           /**< New EQD after drift is corrected (only valid if status is 'on'). */
+} bcmolt_xgpon_onu_dowi_data;
+
+/** Transport message definition for "dowi" group of "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_dowi
+{
+    bcmolt_auto hdr;                    /**< Transport header. */
+    bcmolt_xgpon_onu_key key;           /**< Object key. */
+    bcmolt_xgpon_onu_dowi_data data;    /**< All properties that must be set by the user. */
+} bcmolt_xgpon_onu_dowi;
+
+/** Structure definition for the "invalid_dbru_report" group of the "xgpon_onu" 
+ * object. 
+ */
+typedef struct bcmolt_xgpon_onu_invalid_dbru_report_data
+{
+    bcmolt_xgpon_alloc_id alloc_id; /**< Alloc-ID. */
+} bcmolt_xgpon_onu_invalid_dbru_report_data;
+
+/** Transport message definition for "invalid_dbru_report" group of "xgpon_onu" 
+ * object. 
+ */
+typedef struct bcmolt_xgpon_onu_invalid_dbru_report
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_xgpon_onu_key key;   /**< Object key. */
+    bcmolt_xgpon_onu_invalid_dbru_report_data data; /**< All properties that must be set by the user. */
+} bcmolt_xgpon_onu_invalid_dbru_report;
+
+/** Structure definition for the "key_exchange_completed" group of the 
+ * "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_key_exchange_completed_data
+{
+    bcmolt_xgpon_onu_aes_key new_key;   /**< new key. */
+} bcmolt_xgpon_onu_key_exchange_completed_data;
+
+/** Transport message definition for "key_exchange_completed" group of 
+ * "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_key_exchange_completed
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_xgpon_onu_key key;   /**< Object key. */
+    bcmolt_xgpon_onu_key_exchange_completed_data data;  /**< All properties that must be set by the user. */
+} bcmolt_xgpon_onu_key_exchange_completed;
+
+/** Transport message definition for "key_exchange_cycle_skipped" group of 
+ * "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_key_exchange_cycle_skipped
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_xgpon_onu_key key;   /**< Object key. */
+} bcmolt_xgpon_onu_key_exchange_cycle_skipped;
+
+/** Structure definition for the "key_exchange_key_mismatch" group of the 
+ * "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_key_exchange_key_mismatch_data
+{
+    bcmolt_aes_key expected_key;    /**< expected key. */
+    bcmolt_aes_key received_key;    /**< received key. */
+} bcmolt_xgpon_onu_key_exchange_key_mismatch_data;
+
+/** Transport message definition for "key_exchange_key_mismatch" group of 
+ * "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_key_exchange_key_mismatch
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_xgpon_onu_key key;   /**< Object key. */
+    bcmolt_xgpon_onu_key_exchange_key_mismatch_data data;   /**< All properties that must be set by the user. */
+} bcmolt_xgpon_onu_key_exchange_key_mismatch;
+
+/** Transport message definition for "key_exchange_key_request_timeout" group of 
+ * "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_key_exchange_key_request_timeout
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_xgpon_onu_key key;   /**< Object key. */
+} bcmolt_xgpon_onu_key_exchange_key_request_timeout;
+
+/** Structure definition for the "looci" group of the "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_looci_data
+{
+    bcmolt_status alarm_status; /**< alarm status. */
+} bcmolt_xgpon_onu_looci_data;
+
+/** Transport message definition for "looci" group of "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_looci
+{
+    bcmolt_auto hdr;                    /**< Transport header. */
+    bcmolt_xgpon_onu_key key;           /**< Object key. */
+    bcmolt_xgpon_onu_looci_data data;   /**< All properties that must be set by the user. */
+} bcmolt_xgpon_onu_looci;
+
+/** Structure definition for the "onu_activation_completed" group of the 
+ * "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_onu_activation_completed_data
+{
+    bcmolt_result status;   /**< status. */
+    bcmolt_activation_fail_reason fail_reason;  /**< fail reason. */
+#define BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_DATA_REGISTRATION_ID_LEN  36
+    bcmolt_arr_u8_36 registration_id;           /**< registration id. */
+    bcmolt_xgpon_onu_registration_keys registration_encryption_keys;    /**< registration encryption keys. */
+} bcmolt_xgpon_onu_onu_activation_completed_data;
+
+/** Transport message definition for "onu_activation_completed" group of 
+ * "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_onu_activation_completed
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_xgpon_onu_key key;   /**< Object key. */
+    bcmolt_xgpon_onu_onu_activation_completed_data data;    /**< All properties that must be set by the user. */
+} bcmolt_xgpon_onu_onu_activation_completed;
+
+/** Structure definition for the "onu_alarm" group of the "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_onu_alarm_data
+{
+    bcmolt_xgpon_onu_alarms onu_alarm;  /**< onu alarm. */
+} bcmolt_xgpon_onu_onu_alarm_data;
+
+/** Transport message definition for "onu_alarm" group of "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_onu_alarm
+{
+    bcmolt_auto hdr;                        /**< Transport header. */
+    bcmolt_xgpon_onu_key key;               /**< Object key. */
+    bcmolt_xgpon_onu_onu_alarm_data data;   /**< All properties that must be set by the user. */
+} bcmolt_xgpon_onu_onu_alarm;
+
+/** Structure definition for the "onu_deactivation_completed" group of the 
+ * "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_onu_deactivation_completed_data
+{
+    bcmolt_result status;   /**< Status. */
+} bcmolt_xgpon_onu_onu_deactivation_completed_data;
+
+/** Transport message definition for "onu_deactivation_completed" group of 
+ * "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_onu_deactivation_completed
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_xgpon_onu_key key;   /**< Object key. */
+    bcmolt_xgpon_onu_onu_deactivation_completed_data data;  /**< All properties that must be set by the user. */
+} bcmolt_xgpon_onu_onu_deactivation_completed;
+
+/** Structure definition for the "onu_disable_completed" group of the 
+ * "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_onu_disable_completed_data
+{
+    bcmolt_serial_number serial_number; /**< serial number. */
+} bcmolt_xgpon_onu_onu_disable_completed_data;
+
+/** Transport message definition for "onu_disable_completed" group of 
+ * "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_onu_disable_completed
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_xgpon_onu_key key;   /**< Object key. */
+    bcmolt_xgpon_onu_onu_disable_completed_data data;   /**< All properties that must be set by the user. */
+} bcmolt_xgpon_onu_onu_disable_completed;
+
+/** Structure definition for the "onu_enable_completed" group of the "xgpon_onu" 
+ * object. 
+ */
+typedef struct bcmolt_xgpon_onu_onu_enable_completed_data
+{
+    bcmolt_serial_number serial_number; /**< serial number. */
+} bcmolt_xgpon_onu_onu_enable_completed_data;
+
+/** Transport message definition for "onu_enable_completed" group of "xgpon_onu" 
+ * object. 
+ */
+typedef struct bcmolt_xgpon_onu_onu_enable_completed
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_xgpon_onu_key key;   /**< Object key. */
+    bcmolt_xgpon_onu_onu_enable_completed_data data;    /**< All properties that must be set by the user. */
+} bcmolt_xgpon_onu_onu_enable_completed;
+
+/** Structure definition for the "onu_tuning_in_completed" group of the 
+ * "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_onu_tuning_in_completed_data
+{
+    bcmolt_result result;                   /**< result. */
+    bcmolt_tune_in_fail_reason fail_reason; /**< fail reason. */
+} bcmolt_xgpon_onu_onu_tuning_in_completed_data;
+
+/** Transport message definition for "onu_tuning_in_completed" group of 
+ * "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_onu_tuning_in_completed
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_xgpon_onu_key key;   /**< Object key. */
+    bcmolt_xgpon_onu_onu_tuning_in_completed_data data; /**< All properties that must be set by the user. */
+} bcmolt_xgpon_onu_onu_tuning_in_completed;
+
+/** Structure definition for the "onu_tuning_out_completed" group of the 
+ * "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_onu_tuning_out_completed_data
+{
+    bcmolt_result result;                       /**< result. */
+    bcmolt_tune_out_fail_reason fail_reason;    /**< fail reason. */
+} bcmolt_xgpon_onu_onu_tuning_out_completed_data;
+
+/** Transport message definition for "onu_tuning_out_completed" group of 
+ * "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_onu_tuning_out_completed
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_xgpon_onu_key key;   /**< Object key. */
+    bcmolt_xgpon_onu_onu_tuning_out_completed_data data;    /**< All properties that must be set by the user. */
+} bcmolt_xgpon_onu_onu_tuning_out_completed;
+
+/** Transport message definition for "optical_reflection" group of "xgpon_onu" 
+ * object. 
+ */
+typedef struct bcmolt_xgpon_onu_optical_reflection
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_xgpon_onu_key key;   /**< Object key. */
+} bcmolt_xgpon_onu_optical_reflection;
+
+/** Structure definition for the "possible_drift" group of the "xgpon_onu" 
+ * object. 
+ *
+ * An ONU in a low power state may be experiencing drift beyond the configured 
+ * threshold. The estimate may be inaccurate depending on ONU behavior. Actual 
+ * drift may be less than estimated. 
+ */
+typedef struct bcmolt_xgpon_onu_possible_drift_data
+{
+    bcmolt_status alarm_status; /**< On: estimated drift has exceeded the configured threshold. */
+    int32_t estimated_drift;    /**< If status is on, the estimated drift value, otherwise zero (0). */
+} bcmolt_xgpon_onu_possible_drift_data;
+
+/** Transport message definition for "possible_drift" group of "xgpon_onu" 
+ * object. 
+ */
+typedef struct bcmolt_xgpon_onu_possible_drift
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_xgpon_onu_key key;   /**< Object key. */
+    bcmolt_xgpon_onu_possible_drift_data data;  /**< All properties that must be set by the user. */
+} bcmolt_xgpon_onu_possible_drift;
+
+/** Structure definition for the "power_consumption_report" group of the 
+ * "xgpon_onu" object. 
+ *
+ * Power consumption report 
+ */
+typedef struct bcmolt_xgpon_onu_power_consumption_report_data
+{
+#define BCMOLT_XGPON_ONU_POWER_CONSUMPTION_REPORT_DATA_POWER_CONSUMPTION_REPORT_LEN 8
+    bcmolt_arr_power_consumption_channel_report_8 power_consumption_report; /**< power consumption report. */
+} bcmolt_xgpon_onu_power_consumption_report_data;
+
+/** Transport message definition for "power_consumption_report" group of 
+ * "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_power_consumption_report
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_xgpon_onu_key key;   /**< Object key. */
+    bcmolt_xgpon_onu_power_consumption_report_data data;    /**< All properties that must be set by the user. */
+} bcmolt_xgpon_onu_power_consumption_report;
+
+/** Structure definition for the "power_level_report" group of the "xgpon_onu" 
+ * object. 
+ *
+ * Power level report 
+ */
+typedef struct bcmolt_xgpon_onu_power_level_report_data
+{
+    uint8_t attenuation;                /**< Attenuation. */
+    uint8_t power_levelling_capability; /**< Power levelling capability. */
+} bcmolt_xgpon_onu_power_level_report_data;
+
+/** Transport message definition for "power_level_report" group of "xgpon_onu" 
+ * object. 
+ */
+typedef struct bcmolt_xgpon_onu_power_level_report
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_xgpon_onu_key key;   /**< Object key. */
+    bcmolt_xgpon_onu_power_level_report_data data;  /**< All properties that must be set by the user. */
+} bcmolt_xgpon_onu_power_level_report;
+
+/** Structure definition for the "power_management_state_change" group of the 
+ * "xgpon_onu" object. 
+ *
+ * Notification that an ONUs power management state has changed. 
+ */
+typedef struct bcmolt_xgpon_onu_power_management_state_change_data
+{
+    bcmolt_onu_state old_state; /**< The state the ONU was previously in. */
+    bcmolt_onu_state new_state; /**< The state the ONU is currently in. */
+    bcmolt_power_management_transition_reason reason;   /**< The reason for the state change. */
+} bcmolt_xgpon_onu_power_management_state_change_data;
+
+/** Transport message definition for "power_management_state_change" group of 
+ * "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_power_management_state_change
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_xgpon_onu_key key;   /**< Object key. */
+    bcmolt_xgpon_onu_power_management_state_change_data data;   /**< All properties that must be set by the user. */
+} bcmolt_xgpon_onu_power_management_state_change;
+
+/** Structure definition for the "pqsi" group of the "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_pqsi_data
+{
+    bcmolt_status alarm_status; /**< alarm status. */
+} bcmolt_xgpon_onu_pqsi_data;
+
+/** Transport message definition for "pqsi" group of "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_pqsi
+{
+    bcmolt_auto hdr;                    /**< Transport header. */
+    bcmolt_xgpon_onu_key key;           /**< Object key. */
+    bcmolt_xgpon_onu_pqsi_data data;    /**< All properties that must be set by the user. */
+} bcmolt_xgpon_onu_pqsi;
+
+/** Structure definition for the "ranging_completed" group of the "xgpon_onu" 
+ * object. 
+ */
+typedef struct bcmolt_xgpon_onu_ranging_completed_data
+{
+    bcmolt_result status;                   /**< status. */
+    bcmolt_ranging_fail_reason fail_reason; /**< fail reason. */
+    uint32_t eqd;               /**< EQD. */
+    uint8_t number_of_ploams;   /**< number of ploams. */
+    uint8_t power_level;        /**< power level. */
+} bcmolt_xgpon_onu_ranging_completed_data;
+
+/** Transport message definition for "ranging_completed" group of "xgpon_onu" 
+ * object. 
+ */
+typedef struct bcmolt_xgpon_onu_ranging_completed
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_xgpon_onu_key key;   /**< Object key. */
+    bcmolt_xgpon_onu_ranging_completed_data data;   /**< All properties that must be set by the user. */
+} bcmolt_xgpon_onu_ranging_completed;
+
+/** Structure definition for the "registration_id" group of the "xgpon_onu" 
+ * object. 
+ *
+ * Registration ID 
+ */
+typedef struct bcmolt_xgpon_onu_registration_id_data
+{
+#define BCMOLT_XGPON_ONU_REGISTRATION_ID_DATA_REGISTRATION_ID_LEN   36
+    bcmolt_arr_u8_36 registration_id;           /**< Registration ID. */
+    bcmolt_result request_registration_status;  /**< request registration status. */
+    bcmolt_request_registration_fail_reason request_registration_fail_reason;   /**< request registration fail reason. */
+} bcmolt_xgpon_onu_registration_id_data;
+
+/** Transport message definition for "registration_id" group of "xgpon_onu" 
+ * object. 
+ */
+typedef struct bcmolt_xgpon_onu_registration_id
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_xgpon_onu_key key;   /**< Object key. */
+    bcmolt_xgpon_onu_registration_id_data data; /**< All properties that must be set by the user. */
+} bcmolt_xgpon_onu_registration_id;
+
+/** Structure definition for the "rssi_measurement_completed" group of the 
+ * "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_rssi_measurement_completed_data
+{
+    bcmolt_result status;   /**< status. */
+    bcmolt_rssi_measurement_fail_reason fail_reason;    /**< fail reason. */
+} bcmolt_xgpon_onu_rssi_measurement_completed_data;
+
+/** Transport message definition for "rssi_measurement_completed" group of 
+ * "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_rssi_measurement_completed
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_xgpon_onu_key key;   /**< Object key. */
+    bcmolt_xgpon_onu_rssi_measurement_completed_data data;  /**< All properties that must be set by the user. */
+} bcmolt_xgpon_onu_rssi_measurement_completed;
+
+/** Structure definition for the "sdi" group of the "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_sdi_data
+{
+    bcmolt_status alarm_status; /**< alarm status. */
+    uint32_t ber;               /**< Inverse bit error rate (e.g. if this number is 1000, the BER is 1/1000). */
+} bcmolt_xgpon_onu_sdi_data;
+
+/** Transport message definition for "sdi" group of "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_sdi
+{
+    bcmolt_auto hdr;                /**< Transport header. */
+    bcmolt_xgpon_onu_key key;       /**< Object key. */
+    bcmolt_xgpon_onu_sdi_data data; /**< All properties that must be set by the user. */
+} bcmolt_xgpon_onu_sdi;
+
+/** Structure definition for the "secure_mutual_authentication_failure" group of 
+ * the "xgpon_onu" object. 
+ *
+ * Failure of secure mutual authentication due to MIC error 
+ */
+typedef struct bcmolt_xgpon_onu_secure_mutual_authentication_failure_data
+{
+    bcmolt_result status;   /**< status. */
+    bcmolt_secure_mutual_authentication_fail_reason fail_reason;    /**< secure mutual authentication fail reason. */
+} bcmolt_xgpon_onu_secure_mutual_authentication_failure_data;
+
+/** Transport message definition for "secure_mutual_authentication_failure" 
+ * group of "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_secure_mutual_authentication_failure
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_xgpon_onu_key key;   /**< Object key. */
+    bcmolt_xgpon_onu_secure_mutual_authentication_failure_data data;    /**< All properties that must be set by the user. */
+} bcmolt_xgpon_onu_secure_mutual_authentication_failure;
+
+/** Structure definition for the "sfi" group of the "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_sfi_data
+{
+    bcmolt_status alarm_status; /**< alarm status. */
+    uint32_t ber;               /**< Inverse bit error rate (e.g. if this number is 1000, the BER is 1/1000). */
+} bcmolt_xgpon_onu_sfi_data;
+
+/** Transport message definition for "sfi" group of "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_sfi
+{
+    bcmolt_auto hdr;                /**< Transport header. */
+    bcmolt_xgpon_onu_key key;       /**< Object key. */
+    bcmolt_xgpon_onu_sfi_data data; /**< All properties that must be set by the user. */
+} bcmolt_xgpon_onu_sfi;
+
+/** Structure definition for the "stat_alarm_cleared" group of the "xgpon_onu" 
+ * object. 
+ *
+ * Sent when a configured statistic alarm condition is no longer met. 
+ */
+typedef struct bcmolt_xgpon_onu_stat_alarm_cleared_data
+{
+    bcmolt_xgpon_onu_stat_id stat;  /**< Statistic identifier. */
+} bcmolt_xgpon_onu_stat_alarm_cleared_data;
+
+/** Transport message definition for "stat_alarm_cleared" group of "xgpon_onu" 
+ * object. 
+ */
+typedef struct bcmolt_xgpon_onu_stat_alarm_cleared
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_xgpon_onu_key key;   /**< Object key. */
+    bcmolt_xgpon_onu_stat_alarm_cleared_data data;  /**< All properties that must be set by the user. */
+} bcmolt_xgpon_onu_stat_alarm_cleared;
+
+/** Structure definition for the "stat_alarm_raised" group of the "xgpon_onu" 
+ * object. 
+ *
+ * Sent when a configured statistic alarm condition has been met. 
+ */
+typedef struct bcmolt_xgpon_onu_stat_alarm_raised_data
+{
+    bcmolt_xgpon_onu_stat_id stat;  /**< Statistic identifier. */
+} bcmolt_xgpon_onu_stat_alarm_raised_data;
+
+/** Transport message definition for "stat_alarm_raised" group of "xgpon_onu" 
+ * object. 
+ */
+typedef struct bcmolt_xgpon_onu_stat_alarm_raised
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_xgpon_onu_key key;   /**< Object key. */
+    bcmolt_xgpon_onu_stat_alarm_raised_data data;   /**< All properties that must be set by the user. */
+} bcmolt_xgpon_onu_stat_alarm_raised;
+
+/** Structure definition for the "sufi" group of the "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_sufi_data
+{
+    bcmolt_status alarm_status; /**< alarm status. */
+} bcmolt_xgpon_onu_sufi_data;
+
+/** Transport message definition for "sufi" group of "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_sufi
+{
+    bcmolt_auto hdr;                    /**< Transport header. */
+    bcmolt_xgpon_onu_key key;           /**< Object key. */
+    bcmolt_xgpon_onu_sufi_data data;    /**< All properties that must be set by the user. */
+} bcmolt_xgpon_onu_sufi;
+
+/** Structure definition for the "tiwi" group of the "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_tiwi_data
+{
+    bcmolt_status alarm_status; /**< Alarm status. */
+    int32_t drift_value;        /**< Calculated amount of drift (positive + negative as a signed value). */
+} bcmolt_xgpon_onu_tiwi_data;
+
+/** Transport message definition for "tiwi" group of "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_tiwi
+{
+    bcmolt_auto hdr;                    /**< Transport header. */
+    bcmolt_xgpon_onu_key key;           /**< Object key. */
+    bcmolt_xgpon_onu_tiwi_data data;    /**< All properties that must be set by the user. */
+} bcmolt_xgpon_onu_tiwi;
+
+/** Structure definition for the "tuning_response" group of the "xgpon_onu" 
+ * object. 
+ */
+typedef struct bcmolt_xgpon_onu_tuning_response_data
+{
+    bcmos_bool ack;         /**< is tuning response received with ack or nack */
+    bcmolt_result result;   /**< result. */
+} bcmolt_xgpon_onu_tuning_response_data;
+
+/** Transport message definition for "tuning_response" group of "xgpon_onu" 
+ * object. 
+ */
+typedef struct bcmolt_xgpon_onu_tuning_response
+{
+    bcmolt_auto hdr;            /**< Transport header. */
+    bcmolt_xgpon_onu_key key;   /**< Object key. */
+    bcmolt_xgpon_onu_tuning_response_data data; /**< All properties that must be set by the user. */
+} bcmolt_xgpon_onu_tuning_response;
+
+/** Structure definition for the "auto_cfg" group of the "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_auto_cfg_data
+{
+    bcmos_bool dfi;                     /**< If true, indications of type "dfi" will be generated. */
+    bcmos_bool dgi;                     /**< If true, indications of type "dgi" will be generated. */
+    bcmos_bool dowi;                    /**< If true, indications of type "dowi" will be generated. */
+    bcmos_bool invalid_dbru_report;     /**< If true, indications of type "invalid_dbru_report" will be generated. */
+    bcmos_bool key_exchange_completed;  /**< If true, indications of type "key_exchange_completed" will be generated. */
+    bcmos_bool key_exchange_cycle_skipped;          /**< If true, indications of type "key_exchange_cycle_skipped" will be generated. */
+    bcmos_bool key_exchange_key_mismatch;           /**< If true, indications of type "key_exchange_key_mismatch" will be generated. */
+    bcmos_bool key_exchange_key_request_timeout;    /**< If true, indications of type "key_exchange_key_request_timeout" will be generated. */
+    bcmos_bool looci;                       /**< If true, indications of type "looci" will be generated. */
+    bcmos_bool onu_activation_completed;    /**< If true, indications of type "onu_activation_completed" will be generated. */
+    bcmos_bool onu_alarm;                   /**< If true, indications of type "onu_alarm" will be generated. */
+    bcmos_bool onu_deactivation_completed;  /**< If true, indications of type "onu_deactivation_completed" will be generated. */
+    bcmos_bool onu_disable_completed;       /**< If true, indications of type "onu_disable_completed" will be generated. */
+    bcmos_bool onu_enable_completed;        /**< If true, indications of type "onu_enable_completed" will be generated. */
+    bcmos_bool onu_tuning_in_completed;     /**< If true, indications of type "onu_tuning_in_completed" will be generated. */
+    bcmos_bool onu_tuning_out_completed;    /**< If true, indications of type "onu_tuning_out_completed" will be generated. */
+    bcmos_bool optical_reflection;          /**< If true, indications of type "optical_reflection" will be generated. */
+    bcmos_bool possible_drift;              /**< If true, indications of type "possible_drift" will be generated. */
+    bcmos_bool power_consumption_report;    /**< If true, indications of type "power_consumption_report" will be generated. */
+    bcmos_bool power_level_report;          /**< If true, indications of type "power_level_report" will be generated. */
+    bcmos_bool power_management_state_change;   /**< If true, indications of type "power_management_state_change" will be generated. */
+    bcmos_bool pqsi;                        /**< If true, indications of type "pqsi" will be generated. */
+    bcmos_bool ranging_completed;           /**< If true, indications of type "ranging_completed" will be generated. */
+    bcmos_bool registration_id;             /**< If true, indications of type "registration_id" will be generated. */
+    bcmos_bool rssi_measurement_completed;  /**< If true, indications of type "rssi_measurement_completed" will be generated. */
+    bcmos_bool sdi; /**< If true, indications of type "sdi" will be generated. */
+    bcmos_bool secure_mutual_authentication_failure;    /**< If true, indications of type "secure_mutual_authentication_failure" will be generated. */
+    bcmos_bool sfi;                 /**< If true, indications of type "sfi" will be generated. */
+    bcmos_bool stat_alarm_cleared;  /**< If true, indications of type "stat_alarm_cleared" will be generated. */
+    bcmos_bool stat_alarm_raised;   /**< If true, indications of type "stat_alarm_raised" will be generated. */
+    bcmos_bool sufi;                /**< If true, indications of type "sufi" will be generated. */
+    bcmos_bool tiwi;                /**< If true, indications of type "tiwi" will be generated. */
+    bcmos_bool tuning_response;     /**< If true, indications of type "tuning_response" will be generated. */
+} bcmolt_xgpon_onu_auto_cfg_data;
+
+/** Transport message definition for "auto_cfg" group of "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_auto_cfg
+{
+    bcmolt_auto_cfg hdr;        /**< Transport header. */
+    bcmolt_xgpon_onu_key key;   /**< Object key. */
+    bcmolt_xgpon_onu_auto_cfg_data data;    /**< All properties that must be set by the user. */
+} bcmolt_xgpon_onu_auto_cfg;
+
+/** Structure definition for the "adjust_tx_wavelength" group of the "xgpon_onu" 
+ * object. 
+ *
+ * Instruct the ONU to adjust its upstream transmitter wavelength 
+ */
+typedef struct bcmolt_xgpon_onu_adjust_tx_wavelength_data
+{
+    bcmolt_frequency_adjustment_direction frequency_adjustment_direction;   /**< Frequency adjustment direction. */
+    uint8_t frequency_adjustment_size;  /**< The size of the frequency adjustment in units of 0.1GHz */
+} bcmolt_xgpon_onu_adjust_tx_wavelength_data;
+
+/** Transport message definition for "adjust_tx_wavelength" group of "xgpon_onu" 
+ * object. 
+ */
+typedef struct bcmolt_xgpon_onu_adjust_tx_wavelength
+{
+    bcmolt_oper hdr;            /**< Transport header. */
+    bcmolt_xgpon_onu_key key;   /**< Object key. */
+    bcmolt_xgpon_onu_adjust_tx_wavelength_data data;    /**< All properties that must be set by the user. */
+} bcmolt_xgpon_onu_adjust_tx_wavelength;
+
+/** Structure definition for the "change_power_levelling" group of the 
+ * "xgpon_onu" object. 
+ *
+ * Change power levelling 
+ */
+typedef struct bcmolt_xgpon_onu_change_power_levelling_data
+{
+    bcmolt_power_levelling_control control; /**< control. */
+    uint8_t attenuation;                    /**< The requested attenuation in steps of 3dB as part of power levelling instruction */
+} bcmolt_xgpon_onu_change_power_levelling_data;
+
+/** Transport message definition for "change_power_levelling" group of 
+ * "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_change_power_levelling
+{
+    bcmolt_oper hdr;            /**< Transport header. */
+    bcmolt_xgpon_onu_key key;   /**< Object key. */
+    bcmolt_xgpon_onu_change_power_levelling_data data;  /**< All properties that must be set by the user. */
+} bcmolt_xgpon_onu_change_power_levelling;
+
+/** Transport message definition for "get_power_consumption" group of 
+ * "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_get_power_consumption
+{
+    bcmolt_oper hdr;            /**< Transport header. */
+    bcmolt_xgpon_onu_key key;   /**< Object key. */
+} bcmolt_xgpon_onu_get_power_consumption;
+
+/** Transport message definition for "get_power_level" group of "xgpon_onu" 
+ * object. 
+ */
+typedef struct bcmolt_xgpon_onu_get_power_level
+{
+    bcmolt_oper hdr;            /**< Transport header. */
+    bcmolt_xgpon_onu_key key;   /**< Object key. */
+} bcmolt_xgpon_onu_get_power_level;
+
+/** Transport message definition for "onu_tuning_in" group of "xgpon_onu" 
+ * object. 
+ */
+typedef struct bcmolt_xgpon_onu_onu_tuning_in
+{
+    bcmolt_oper hdr;            /**< Transport header. */
+    bcmolt_xgpon_onu_key key;   /**< Object key. */
+} bcmolt_xgpon_onu_onu_tuning_in;
+
+/** Structure definition for the "onu_tuning_out" group of the "xgpon_onu" 
+ * object. 
+ */
+typedef struct bcmolt_xgpon_onu_onu_tuning_out_data
+{
+    bcmolt_pon_id target_ds_pon_id; /**< target ds pon id. */
+    bcmolt_pon_id target_us_pon_id; /**< target us pon id. */
+    uint32_t time_to_switch;        /**< Time to switch in ms */
+    bcmos_bool rollback;            /**< rollback. */
+    bcmolt_status status;           /**< on- to start tuning out off- to stop tuning out */
+} bcmolt_xgpon_onu_onu_tuning_out_data;
+
+/** Transport message definition for "onu_tuning_out" group of "xgpon_onu" 
+ * object. 
+ */
+typedef struct bcmolt_xgpon_onu_onu_tuning_out
+{
+    bcmolt_oper hdr;            /**< Transport header. */
+    bcmolt_xgpon_onu_key key;   /**< Object key. */
+    bcmolt_xgpon_onu_onu_tuning_out_data data;  /**< All properties that must be set by the user. */
+} bcmolt_xgpon_onu_onu_tuning_out;
+
+/** Structure definition for the "request_registration" group of the "xgpon_onu" 
+ * object. 
+ *
+ * Request the ONU to send its Registration ID 
+ */
+typedef struct bcmolt_xgpon_onu_request_registration_data
+{
+    bcmos_bool sma_flag;    /**< Is the request registration process is part of the SMA process */
+} bcmolt_xgpon_onu_request_registration_data;
+
+/** Transport message definition for "request_registration" group of "xgpon_onu" 
+ * object. 
+ */
+typedef struct bcmolt_xgpon_onu_request_registration
+{
+    bcmolt_oper hdr;            /**< Transport header. */
+    bcmolt_xgpon_onu_key key;   /**< Object key. */
+    bcmolt_xgpon_onu_request_registration_data data;    /**< All properties that must be set by the user. */
+} bcmolt_xgpon_onu_request_registration;
+
+/** Transport message definition for "rssi_measurement" group of "xgpon_onu" 
+ * object. 
+ */
+typedef struct bcmolt_xgpon_onu_rssi_measurement
+{
+    bcmolt_oper hdr;            /**< Transport header. */
+    bcmolt_xgpon_onu_key key;   /**< Object key. */
+} bcmolt_xgpon_onu_rssi_measurement;
+
+/** Structure definition for the "secure_mutual_authentication" group of the 
+ * "xgpon_onu" object. 
+ *
+ * OMCI base secure mutual authentication 
+ */
+typedef struct bcmolt_xgpon_onu_secure_mutual_authentication_data
+{
+    bcmolt_aes_key master_key;          /**< master key. */
+    bcmolt_u8_list_u32_max_2048 buffer; /**< OMCI data buffer. */
+    uint32_t mic;                       /**< mic. */
+} bcmolt_xgpon_onu_secure_mutual_authentication_data;
+
+/** Transport message definition for "secure_mutual_authentication" group of 
+ * "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_secure_mutual_authentication
+{
+    bcmolt_oper hdr;            /**< Transport header. */
+    bcmolt_xgpon_onu_key key;   /**< Object key. */
+    bcmolt_xgpon_onu_secure_mutual_authentication_data data;    /**< All properties that must be set by the user. */
+} bcmolt_xgpon_onu_secure_mutual_authentication;
+
+/** Structure definition for the "set_onu_state" group of the "xgpon_onu" 
+ * object. 
+ */
+typedef struct bcmolt_xgpon_onu_set_onu_state_data
+{
+    bcmolt_onu_operation onu_state; /**< ONU state. */
+} bcmolt_xgpon_onu_set_onu_state_data;
+
+/** Transport message definition for "set_onu_state" group of "xgpon_onu" 
+ * object. 
+ */
+typedef struct bcmolt_xgpon_onu_set_onu_state
+{
+    bcmolt_oper hdr;            /**< Transport header. */
+    bcmolt_xgpon_onu_key key;   /**< Object key. */
+    bcmolt_xgpon_onu_set_onu_state_data data;   /**< All properties that must be set by the user. */
+} bcmolt_xgpon_onu_set_onu_state;
+
+/** Structure definition for the "cpu_packets" group of the "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_cpu_packets_data
+{
+    bcmolt_packet_type packet_type;     /**< packet type. */
+    bcmos_bool calc_crc;                /**< calc crc. */
+    uint8_t number_of_packets;          /**< number of packets. */
+    uint16_t packet_size;               /**< Single packet size. */
+    bcmolt_u8_list_u32_max_2048 buffer; /**< buffer. */
+} bcmolt_xgpon_onu_cpu_packets_data;
+
+/** Transport message definition for "cpu_packets" group of "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_cpu_packets
+{
+    bcmolt_proxy hdr;                       /**< Transport header. */
+    bcmolt_xgpon_onu_key key;               /**< Object key. */
+    bcmolt_xgpon_onu_cpu_packets_data data; /**< All properties that must be set by the user. */
+} bcmolt_xgpon_onu_cpu_packets;
+
+/** Structure definition for the "ploam_packet" group of the "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_ploam_packet_data
+{
+    bcmos_bool default_key; /**< default key. */
+#define BCMOLT_XGPON_ONU_PLOAM_PACKET_DATA_PLOAM_LEN    40
+    bcmolt_arr_u8_40 ploam; /**< ploam. */
+} bcmolt_xgpon_onu_ploam_packet_data;
+
+/** Transport message definition for "ploam_packet" group of "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_ploam_packet
+{
+    bcmolt_proxy hdr;           /**< Transport header. */
+    bcmolt_xgpon_onu_key key;   /**< Object key. */
+    bcmolt_xgpon_onu_ploam_packet_data data;    /**< All properties that must be set by the user. */
+} bcmolt_xgpon_onu_ploam_packet;
+
+/** Structure definition for the "cpu_packet" group of the "xgpon_onu" object. 
+ *
+ * Indicates CPU packet was received on the US from this ONU id 
+ */
+typedef struct bcmolt_xgpon_onu_cpu_packet_data
+{
+    uint16_t port_id;           /**< port id. */
+    bcmos_bool crc_ok;          /**< crc ok. */
+    uint32_t packet_size;       /**< packet size. */
+    bcmolt_u8_list_u32 buffer;  /**< buffer. */
+} bcmolt_xgpon_onu_cpu_packet_data;
+
+/** Transport message definition for "cpu_packet" group of "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_cpu_packet
+{
+    bcmolt_proxy_rx hdr;                    /**< Transport header. */
+    bcmolt_xgpon_onu_key key;               /**< Object key. */
+    bcmolt_xgpon_onu_cpu_packet_data data;  /**< All properties that must be set by the user. */
+} bcmolt_xgpon_onu_cpu_packet;
+
+/** Structure definition for the "omci_packet" group of the "xgpon_onu" object. 
+ *
+ * Indicates OMCI packet was received on the US from this ONU id 
+ */
+typedef struct bcmolt_xgpon_onu_omci_packet_data
+{
+    uint16_t port_id;           /**< port id. */
+    bcmos_bool crc_ok;          /**< crc ok. */
+    uint32_t packet_size;       /**< packet size. */
+    bcmolt_u8_list_u32 buffer;  /**< buffer. */
+} bcmolt_xgpon_onu_omci_packet_data;
+
+/** Transport message definition for "omci_packet" group of "xgpon_onu" object. 
+ */
+typedef struct bcmolt_xgpon_onu_omci_packet
+{
+    bcmolt_proxy_rx hdr;                    /**< Transport header. */
+    bcmolt_xgpon_onu_key key;               /**< Object key. */
+    bcmolt_xgpon_onu_omci_packet_data data; /**< All properties that must be set by the user. */
+} bcmolt_xgpon_onu_omci_packet;
+
+/** Structure definition for the "key" group of the "xgpon_trx" object. 
+ */
+typedef struct bcmolt_xgpon_trx_key
+{
+    bcmolt_xgpon_ni pon_ni; /**< PON network interface. */
+} bcmolt_xgpon_trx_key;
+
+/** Structure definition for the "cfg" group of the "xgpon_trx" object. 
+ */
+typedef struct bcmolt_xgpon_trx_cfg_data
+{
+#define BCMOLT_XGPON_TRX_CFG_DATA_BURST_PROFILE_LEN 4
+    bcmolt_arr_xgpon_burst_profile_4 burst_profile;             /**< burst profile. */
+#define BCMOLT_XGPON_TRX_CFG_DATA_TRANSCEIVER_CONFIG_LEN    4
+    bcmolt_arr_xgpon_trx_configuration_4 transceiver_config;    /**< transceiver config. */
+    bcmolt_xgpon_trx_type transceiver_type;                     /**< trx type. */
+    bcmolt_xgpon_trx_debug debug;                       /**< debug. */
+    bcmolt_xgpon_rssi_normal_config rssi_normal_config; /**< rssi normal config. */
+    bcmolt_xgpon_rssi_ranging_config rssi_ranging_config;               /**< rssi ranging config. */
+    bcmolt_xgpon_serdes_configuration serdes_configuration;             /**< serdes configuration. */
+#define BCMOLT_XGPON_TRX_CFG_DATA_BURST_PROFILE_DELIMITER_MAX_ERRORS_LEN    4
+    bcmolt_arr_u8_4 burst_profile_delimiter_max_errors;                 /**< burst profile delimiter max errors. */
+    bcmolt_xgpon_rx_ranging_sm_pattern ranging_sm_patterns_at_init;     /**< Reset patterns used at Init of Ranging-Window and after Access */
+    bcmolt_xgpon_rx_ranging_sm_pattern ranging_sm_patterns_ed_failure;  /**< ranging sm patterns ED failure. */
+    bcmos_bool reset_on_del_miss;   /**< reset on del miss. */
+    bcmolt_xgpon_ed_state ed_state; /**< ed state. */
+    bcmos_bool invert_ed;           /**< invert ED. */
+    bcmos_bool end_of_burst_reset;  /**< end of burst reset. */
+    bcmos_bool trx_rst_polarity;    /**< TRX reset polarity. */
+} bcmolt_xgpon_trx_cfg_data;
+
+/** Transport message definition for "cfg" group of "xgpon_trx" object. 
+ */
+typedef struct bcmolt_xgpon_trx_cfg
+{
+    bcmolt_cfg hdr;                 /**< Transport header. */
+    bcmolt_xgpon_trx_key key;       /**< Object key. */
+    bcmolt_xgpon_trx_cfg_data data; /**< All properties that must be set by the user. */
+} bcmolt_xgpon_trx_cfg;
+
+/** Structure definition for the "key" group of the "xpon_serdes" object. 
+ */
+typedef struct bcmolt_xpon_serdes_key
+{
+    bcmolt_pon_ni pon_ni;               /**< PON NI. */
+    bcmolt_serdes_instance instance;    /**< SerDes instance: */
+} bcmolt_xpon_serdes_key;
+
+/** Structure definition for the "cfg" group of the "xpon_serdes" object. 
+ */
+typedef struct bcmolt_xpon_serdes_cfg_data
+{
+    uint8_t rx_vga;     /**< Rx Vga. */
+    uint8_t rx_pf;      /**< Peaking Filter */
+    uint8_t rx_lfpf;    /**< Low Frequency Peaking Filter */
+    uint8_t rx_dfe1;    /**< Rx DFE1. */
+    int8_t rx_dfe2;     /**< Rx DFE2. */
+    int8_t rx_dfe3;     /**< Rx DFE3. */
+    int8_t rx_dfe4;     /**< Rx DFE4. */
+    int8_t rx_dfe5;     /**< Rx DFE5. */
+    uint8_t tx_pre;     /**< Tx Pre. */
+    uint8_t tx_main;    /**< Tx Main. */
+    uint8_t tx_post1;   /**< Tx Post1. */
+    int8_t tx_post2;    /**< Tx Post2. */
+    int8_t tx_post3;    /**< Tx Post3. */
+    uint8_t tx_amp;     /**< Tx Amp. */
+} bcmolt_xpon_serdes_cfg_data;
+
+/** Transport message definition for "cfg" group of "xpon_serdes" object. 
+ */
+typedef struct bcmolt_xpon_serdes_cfg
+{
+    bcmolt_cfg hdr;                     /**< Transport header. */
+    bcmolt_xpon_serdes_key key;         /**< Object key. */
+    bcmolt_xpon_serdes_cfg_data data;   /**< All properties that must be set by the user. */
+} bcmolt_xpon_serdes_cfg;
+
+/** @} */
+
+/** Packs a bcmolt_activation_fail_reason to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_activation_fail_reason_pack(bcmolt_activation_fail_reason this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_activation_fail_reason from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_activation_fail_reason_unpack(bcmolt_activation_fail_reason *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_additional_bw_eligibility to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_additional_bw_eligibility_pack(bcmolt_additional_bw_eligibility this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_additional_bw_eligibility from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_additional_bw_eligibility_unpack(bcmolt_additional_bw_eligibility *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_ae_ni_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_ae_ni_cfg_id_pack(bcmolt_ae_ni_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_ae_ni_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_ae_ni_cfg_id_unpack(bcmolt_ae_ni_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_ae_ni_en_state to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_ae_ni_en_state_pack(bcmolt_ae_ni_en_state this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_ae_ni_en_state from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_ae_ni_en_state_unpack(bcmolt_ae_ni_en_state *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_ae_ni_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_ae_ni_key_id_pack(bcmolt_ae_ni_key_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_ae_ni_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_ae_ni_key_id_unpack(bcmolt_ae_ni_key_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_ae_ni_set_ae_ni_en_state_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_ae_ni_set_ae_ni_en_state_id_pack(bcmolt_ae_ni_set_ae_ni_en_state_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_ae_ni_set_ae_ni_en_state_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_ae_ni_set_ae_ni_en_state_id_unpack(bcmolt_ae_ni_set_ae_ni_en_state_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_ae_path_ds_auto_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_ae_path_ds_auto_cfg_id_pack(bcmolt_ae_path_ds_auto_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_ae_path_ds_auto_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_ae_path_ds_auto_cfg_id_unpack(bcmolt_ae_path_ds_auto_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_ae_path_ds_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_ae_path_ds_key_id_pack(bcmolt_ae_path_ds_key_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_ae_path_ds_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_ae_path_ds_key_id_unpack(bcmolt_ae_path_ds_key_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_ae_path_ds_stat_alarm_cleared_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_ae_path_ds_stat_alarm_cleared_id_pack(bcmolt_ae_path_ds_stat_alarm_cleared_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_ae_path_ds_stat_alarm_cleared_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_ae_path_ds_stat_alarm_cleared_id_unpack(bcmolt_ae_path_ds_stat_alarm_cleared_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_ae_path_ds_stat_alarm_raised_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_ae_path_ds_stat_alarm_raised_id_pack(bcmolt_ae_path_ds_stat_alarm_raised_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_ae_path_ds_stat_alarm_raised_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_ae_path_ds_stat_alarm_raised_id_unpack(bcmolt_ae_path_ds_stat_alarm_raised_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_ae_path_ds_stat_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_ae_path_ds_stat_cfg_id_pack(bcmolt_ae_path_ds_stat_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_ae_path_ds_stat_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_ae_path_ds_stat_cfg_id_unpack(bcmolt_ae_path_ds_stat_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_ae_path_ds_stat_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_ae_path_ds_stat_id_pack(bcmolt_ae_path_ds_stat_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_ae_path_ds_stat_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_ae_path_ds_stat_id_unpack(bcmolt_ae_path_ds_stat_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_ae_path_us_auto_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_ae_path_us_auto_cfg_id_pack(bcmolt_ae_path_us_auto_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_ae_path_us_auto_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_ae_path_us_auto_cfg_id_unpack(bcmolt_ae_path_us_auto_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_ae_path_us_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_ae_path_us_key_id_pack(bcmolt_ae_path_us_key_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_ae_path_us_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_ae_path_us_key_id_unpack(bcmolt_ae_path_us_key_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_ae_path_us_stat_alarm_cleared_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_ae_path_us_stat_alarm_cleared_id_pack(bcmolt_ae_path_us_stat_alarm_cleared_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_ae_path_us_stat_alarm_cleared_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_ae_path_us_stat_alarm_cleared_id_unpack(bcmolt_ae_path_us_stat_alarm_cleared_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_ae_path_us_stat_alarm_raised_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_ae_path_us_stat_alarm_raised_id_pack(bcmolt_ae_path_us_stat_alarm_raised_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_ae_path_us_stat_alarm_raised_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_ae_path_us_stat_alarm_raised_id_unpack(bcmolt_ae_path_us_stat_alarm_raised_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_ae_path_us_stat_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_ae_path_us_stat_cfg_id_pack(bcmolt_ae_path_us_stat_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_ae_path_us_stat_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_ae_path_us_stat_cfg_id_unpack(bcmolt_ae_path_us_stat_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_ae_path_us_stat_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_ae_path_us_stat_id_pack(bcmolt_ae_path_us_stat_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_ae_path_us_stat_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_ae_path_us_stat_id_unpack(bcmolt_ae_path_us_stat_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_alloc_operation to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_alloc_operation_pack(bcmolt_alloc_operation this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_alloc_operation from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_alloc_operation_unpack(bcmolt_alloc_operation *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_alloc_state to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_alloc_state_pack(bcmolt_alloc_state this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_alloc_state from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_alloc_state_unpack(bcmolt_alloc_state *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_alloc_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_alloc_type_pack(bcmolt_alloc_type this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_alloc_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_alloc_type_unpack(bcmolt_alloc_type *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_alloc_type_to_scan to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_alloc_type_to_scan_pack(bcmolt_alloc_type_to_scan this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_alloc_type_to_scan from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_alloc_type_to_scan_unpack(bcmolt_alloc_type_to_scan *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_api_capture_buffer_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_api_capture_buffer_mode_pack(bcmolt_api_capture_buffer_mode this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_api_capture_buffer_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_api_capture_buffer_mode_unpack(bcmolt_api_capture_buffer_mode *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_api_capture_location to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_api_capture_location_pack(bcmolt_api_capture_location this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_api_capture_location from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_api_capture_location_unpack(bcmolt_api_capture_location *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_calibration_record to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_calibration_record_pack(bcmolt_calibration_record this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_calibration_record from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_calibration_record_unpack(bcmolt_calibration_record *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_sign to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_sign_pack(bcmolt_sign this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_sign from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_sign_unpack(bcmolt_sign *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_upstream_line_rate_capabilities to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_upstream_line_rate_capabilities_pack(bcmolt_upstream_line_rate_capabilities this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_upstream_line_rate_capabilities from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_upstream_line_rate_capabilities_unpack(bcmolt_upstream_line_rate_capabilities *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_link_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_link_type_pack(bcmolt_link_type this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_link_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_link_type_unpack(bcmolt_link_type *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_capture_strobe_signal to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_capture_strobe_signal_pack(bcmolt_capture_strobe_signal this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_capture_strobe_signal from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_capture_strobe_signal_unpack(bcmolt_capture_strobe_signal *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_channel_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_channel_cfg_id_pack(bcmolt_channel_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_channel_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_channel_cfg_id_unpack(bcmolt_channel_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_channel_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_channel_key_id_pack(bcmolt_channel_key_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_channel_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_channel_key_id_unpack(bcmolt_channel_key_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_console_redirection to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_console_redirection_pack(bcmolt_console_redirection this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_console_redirection from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_console_redirection_unpack(bcmolt_console_redirection *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_control_state to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_control_state_pack(bcmolt_control_state this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_control_state from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_control_state_unpack(bcmolt_control_state *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_dba_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_dba_mode_pack(bcmolt_dba_mode this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_dba_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_dba_mode_unpack(bcmolt_dba_mode *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_dba_ram to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_dba_ram_pack(bcmolt_dba_ram this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_dba_ram from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_dba_ram_unpack(bcmolt_dba_ram *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_dba_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_dba_type_pack(bcmolt_dba_type this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_dba_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_dba_type_unpack(bcmolt_dba_type *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_ddr_test_status to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_ddr_test_status_pack(bcmolt_ddr_test_status this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_ddr_test_status from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_ddr_test_status_unpack(bcmolt_ddr_test_status *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_ddr_test_result to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_ddr_test_result_pack(bcmolt_ddr_test_result this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_ddr_test_result from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_ddr_test_result_unpack(bcmolt_ddr_test_result *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_host_connection_fail_reason to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_host_connection_fail_reason_pack(bcmolt_host_connection_fail_reason this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_host_connection_fail_reason from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_host_connection_fail_reason_unpack(bcmolt_host_connection_fail_reason *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_deactivation_reason to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_deactivation_reason_pack(bcmolt_deactivation_reason this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_deactivation_reason from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_deactivation_reason_unpack(bcmolt_deactivation_reason *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_debug_auto_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_debug_auto_cfg_id_pack(bcmolt_debug_auto_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_debug_auto_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_debug_auto_cfg_id_unpack(bcmolt_debug_auto_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_debug_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_debug_cfg_id_pack(bcmolt_debug_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_debug_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_debug_cfg_id_unpack(bcmolt_debug_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_debug_cli_input_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_debug_cli_input_id_pack(bcmolt_debug_cli_input_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_debug_cli_input_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_debug_cli_input_id_unpack(bcmolt_debug_cli_input_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_debug_cli_output_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_debug_cli_output_id_pack(bcmolt_debug_cli_output_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_debug_cli_output_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_debug_cli_output_id_unpack(bcmolt_debug_cli_output_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_debug_file_almost_full_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_debug_file_almost_full_id_pack(bcmolt_debug_file_almost_full_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_debug_file_almost_full_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_debug_file_almost_full_id_unpack(bcmolt_debug_file_almost_full_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_debug_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_debug_key_id_pack(bcmolt_debug_key_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_debug_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_debug_key_id_unpack(bcmolt_debug_key_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_debug_reset_api_capture_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_debug_reset_api_capture_id_pack(bcmolt_debug_reset_api_capture_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_debug_reset_api_capture_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_debug_reset_api_capture_id_unpack(bcmolt_debug_reset_api_capture_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_debug_start_api_capture_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_debug_start_api_capture_id_pack(bcmolt_debug_start_api_capture_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_debug_start_api_capture_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_debug_start_api_capture_id_unpack(bcmolt_debug_start_api_capture_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_debug_stop_api_capture_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_debug_stop_api_capture_id_pack(bcmolt_debug_stop_api_capture_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_debug_stop_api_capture_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_debug_stop_api_capture_id_unpack(bcmolt_debug_stop_api_capture_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_device_auto_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_device_auto_cfg_id_pack(bcmolt_device_auto_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_device_auto_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_device_auto_cfg_id_unpack(bcmolt_device_auto_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_device_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_device_cfg_id_pack(bcmolt_device_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_device_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_device_cfg_id_unpack(bcmolt_device_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_device_chip_revision to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_device_chip_revision_pack(bcmolt_device_chip_revision this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_device_chip_revision from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_device_chip_revision_unpack(bcmolt_device_chip_revision *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_device_connect_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_device_connect_id_pack(bcmolt_device_connect_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_device_connect_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_device_connect_id_unpack(bcmolt_device_connect_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_device_connection_complete_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_device_connection_complete_id_pack(bcmolt_device_connection_complete_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_device_connection_complete_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_device_connection_complete_id_unpack(bcmolt_device_connection_complete_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_device_connection_established_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_device_connection_established_id_pack(bcmolt_device_connection_established_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_device_connection_established_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_device_connection_established_id_unpack(bcmolt_device_connection_established_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_device_connection_failure_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_device_connection_failure_id_pack(bcmolt_device_connection_failure_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_device_connection_failure_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_device_connection_failure_id_unpack(bcmolt_device_connection_failure_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_device_ddr_test_complete_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_device_ddr_test_complete_id_pack(bcmolt_device_ddr_test_complete_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_device_ddr_test_complete_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_device_ddr_test_complete_id_unpack(bcmolt_device_ddr_test_complete_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_device_device_keep_alive_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_device_device_keep_alive_id_pack(bcmolt_device_device_keep_alive_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_device_device_keep_alive_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_device_device_keep_alive_id_unpack(bcmolt_device_device_keep_alive_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_device_device_ready_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_device_device_ready_id_pack(bcmolt_device_device_ready_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_device_device_ready_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_device_device_ready_id_unpack(bcmolt_device_device_ready_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_device_disconnect_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_device_disconnect_id_pack(bcmolt_device_disconnect_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_device_disconnect_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_device_disconnect_id_unpack(bcmolt_device_disconnect_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_device_disconnection_complete_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_device_disconnection_complete_id_pack(bcmolt_device_disconnection_complete_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_device_disconnection_complete_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_device_disconnection_complete_id_unpack(bcmolt_device_disconnection_complete_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_device_host_keep_alive_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_device_host_keep_alive_id_pack(bcmolt_device_host_keep_alive_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_device_host_keep_alive_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_device_host_keep_alive_id_unpack(bcmolt_device_host_keep_alive_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_device_image_transfer_complete_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_device_image_transfer_complete_id_pack(bcmolt_device_image_transfer_complete_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_device_image_transfer_complete_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_device_image_transfer_complete_id_unpack(bcmolt_device_image_transfer_complete_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_device_image_transfer_data_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_device_image_transfer_data_id_pack(bcmolt_device_image_transfer_data_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_device_image_transfer_data_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_device_image_transfer_data_id_unpack(bcmolt_device_image_transfer_data_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_device_image_transfer_start_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_device_image_transfer_start_id_pack(bcmolt_device_image_transfer_start_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_device_image_transfer_start_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_device_image_transfer_start_id_unpack(bcmolt_device_image_transfer_start_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_device_image_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_device_image_type_pack(bcmolt_device_image_type this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_device_image_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_device_image_type_unpack(bcmolt_device_image_type *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_device_indications_dropped_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_device_indications_dropped_id_pack(bcmolt_device_indications_dropped_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_device_indications_dropped_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_device_indications_dropped_id_unpack(bcmolt_device_indications_dropped_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_device_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_device_key_id_pack(bcmolt_device_key_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_device_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_device_key_id_unpack(bcmolt_device_key_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_nni_speed to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_nni_speed_pack(bcmolt_nni_speed this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_nni_speed from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_nni_speed_unpack(bcmolt_nni_speed *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_device_reset_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_device_reset_id_pack(bcmolt_device_reset_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_device_reset_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_device_reset_id_unpack(bcmolt_device_reset_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_device_reset_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_device_reset_mode_pack(bcmolt_device_reset_mode this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_device_reset_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_device_reset_mode_unpack(bcmolt_device_reset_mode *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_device_run_ddr_test_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_device_run_ddr_test_id_pack(bcmolt_device_run_ddr_test_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_device_run_ddr_test_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_device_run_ddr_test_id_unpack(bcmolt_device_run_ddr_test_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_device_state to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_device_state_pack(bcmolt_device_state this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_device_state from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_device_state_unpack(bcmolt_device_state *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_device_sw_error_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_device_sw_error_id_pack(bcmolt_device_sw_error_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_device_sw_error_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_device_sw_error_id_unpack(bcmolt_device_sw_error_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_device_sw_exception_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_device_sw_exception_id_pack(bcmolt_device_sw_exception_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_device_sw_exception_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_device_sw_exception_id_unpack(bcmolt_device_sw_exception_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_device_sw_upgrade_activate_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_device_sw_upgrade_activate_id_pack(bcmolt_device_sw_upgrade_activate_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_device_sw_upgrade_activate_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_device_sw_upgrade_activate_id_unpack(bcmolt_device_sw_upgrade_activate_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_disable_serial_number_control to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_disable_serial_number_control_pack(bcmolt_disable_serial_number_control this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_disable_serial_number_control from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_disable_serial_number_control_unpack(bcmolt_disable_serial_number_control *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_drv_icf_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_drv_icf_id_pack(bcmolt_drv_icf_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_drv_icf_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_drv_icf_id_unpack(bcmolt_drv_icf_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_drv_sgb_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_drv_sgb_id_pack(bcmolt_drv_sgb_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_drv_sgb_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_drv_sgb_id_unpack(bcmolt_drv_sgb_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_ds_vlan_action to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_ds_vlan_action_pack(bcmolt_ds_vlan_action this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_ds_vlan_action from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_ds_vlan_action_unpack(bcmolt_ds_vlan_action *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_tfb_trap_behavior to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_tfb_trap_behavior_pack(bcmolt_tfb_trap_behavior this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_tfb_trap_behavior from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_tfb_trap_behavior_unpack(bcmolt_tfb_trap_behavior *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_tfb_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_tfb_mode_pack(bcmolt_tfb_mode this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_tfb_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_tfb_mode_unpack(bcmolt_tfb_mode *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_lim_sec_mode_up to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_lim_sec_mode_up_pack(bcmolt_lim_sec_mode_up this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_lim_sec_mode_up from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_lim_sec_mode_up_unpack(bcmolt_lim_sec_mode_up *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_lim_sec_mode_dn to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_lim_sec_mode_dn_pack(bcmolt_lim_sec_mode_dn this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_lim_sec_mode_dn from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_lim_sec_mode_dn_unpack(bcmolt_lim_sec_mode_dn *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xim_sec_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xim_sec_mode_pack(bcmolt_xim_sec_mode this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xim_sec_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xim_sec_mode_unpack(bcmolt_xim_sec_mode *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_hsc_ram to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_hsc_ram_pack(bcmolt_hsc_ram this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_hsc_ram from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_hsc_ram_unpack(bcmolt_hsc_ram *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_lim_ram to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_lim_ram_pack(bcmolt_lim_ram this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_lim_ram from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_lim_ram_unpack(bcmolt_lim_ram *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_lky_ram to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_lky_ram_pack(bcmolt_lky_ram this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_lky_ram from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_lky_ram_unpack(bcmolt_lky_ram *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_mic_ram to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_mic_ram_pack(bcmolt_mic_ram this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_mic_ram from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_mic_ram_unpack(bcmolt_mic_ram *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xpcsrm_ram to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xpcsrm_ram_pack(bcmolt_xpcsrm_ram this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xpcsrm_ram from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xpcsrm_ram_unpack(bcmolt_xpcsrm_ram *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_embedded_image_transfer_status to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_embedded_image_transfer_status_pack(bcmolt_embedded_image_transfer_status this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_embedded_image_transfer_status from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_embedded_image_transfer_status_unpack(bcmolt_embedded_image_transfer_status *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_encryption_information_format to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_encryption_information_format_pack(bcmolt_epon_encryption_information_format this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_encryption_information_format from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_encryption_information_format_unpack(bcmolt_epon_encryption_information_format *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_energy_detect_source to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_energy_detect_source_pack(bcmolt_energy_detect_source this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_energy_detect_source from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_energy_detect_source_unpack(bcmolt_energy_detect_source *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_1g_turbo_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_1g_turbo_mode_pack(bcmolt_epon_1g_turbo_mode this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_1g_turbo_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_1g_turbo_mode_unpack(bcmolt_epon_1g_turbo_mode *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_clock_transport_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_clock_transport_mode_pack(bcmolt_epon_clock_transport_mode this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_clock_transport_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_clock_transport_mode_unpack(bcmolt_epon_clock_transport_mode *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_dba_reporting_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_dba_reporting_mode_pack(bcmolt_epon_dba_reporting_mode this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_dba_reporting_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_dba_reporting_mode_unpack(bcmolt_epon_dba_reporting_mode *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_link_rate to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_link_rate_pack(bcmolt_epon_link_rate this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_link_rate from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_link_rate_unpack(bcmolt_epon_link_rate *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_status to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_status_pack(bcmolt_status this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_status from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_status_unpack(bcmolt_status *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_denied_link_auto_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_denied_link_auto_cfg_id_pack(bcmolt_epon_denied_link_auto_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_denied_link_auto_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_denied_link_auto_cfg_id_unpack(bcmolt_epon_denied_link_auto_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_denied_link_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_denied_link_cfg_id_pack(bcmolt_epon_denied_link_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_denied_link_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_denied_link_cfg_id_unpack(bcmolt_epon_denied_link_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_denied_link_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_denied_link_key_id_pack(bcmolt_epon_denied_link_key_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_denied_link_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_denied_link_key_id_unpack(bcmolt_epon_denied_link_key_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_denied_link_laser_on_off_violation_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_denied_link_laser_on_off_violation_id_pack(bcmolt_epon_denied_link_laser_on_off_violation_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_denied_link_laser_on_off_violation_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_denied_link_laser_on_off_violation_id_unpack(bcmolt_epon_denied_link_laser_on_off_violation_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_denied_link_llid_pool_empty_violation_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_denied_link_llid_pool_empty_violation_id_pack(bcmolt_epon_denied_link_llid_pool_empty_violation_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_denied_link_llid_pool_empty_violation_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_denied_link_llid_pool_empty_violation_id_unpack(bcmolt_epon_denied_link_llid_pool_empty_violation_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_denied_link_max_link_violation_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_denied_link_max_link_violation_id_pack(bcmolt_epon_denied_link_max_link_violation_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_denied_link_max_link_violation_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_denied_link_max_link_violation_id_unpack(bcmolt_epon_denied_link_max_link_violation_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_denied_link_overhead_profile_violation_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_denied_link_overhead_profile_violation_id_pack(bcmolt_epon_denied_link_overhead_profile_violation_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_denied_link_overhead_profile_violation_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_denied_link_overhead_profile_violation_id_unpack(bcmolt_epon_denied_link_overhead_profile_violation_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_denied_link_range_violation_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_denied_link_range_violation_id_pack(bcmolt_epon_denied_link_range_violation_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_denied_link_range_violation_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_denied_link_range_violation_id_unpack(bcmolt_epon_denied_link_range_violation_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_denied_link_rogue_violation_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_denied_link_rogue_violation_id_pack(bcmolt_epon_denied_link_rogue_violation_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_denied_link_rogue_violation_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_denied_link_rogue_violation_id_unpack(bcmolt_epon_denied_link_rogue_violation_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_denied_link_system_resource_violation_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_denied_link_system_resource_violation_id_pack(bcmolt_epon_denied_link_system_resource_violation_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_denied_link_system_resource_violation_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_denied_link_system_resource_violation_id_unpack(bcmolt_epon_denied_link_system_resource_violation_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_denied_link_tdm_channels_exhausted_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_denied_link_tdm_channels_exhausted_id_pack(bcmolt_epon_denied_link_tdm_channels_exhausted_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_denied_link_tdm_channels_exhausted_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_denied_link_tdm_channels_exhausted_id_unpack(bcmolt_epon_denied_link_tdm_channels_exhausted_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_denied_link_unknown_link_violation_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_denied_link_unknown_link_violation_id_pack(bcmolt_epon_denied_link_unknown_link_violation_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_denied_link_unknown_link_violation_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_denied_link_unknown_link_violation_id_unpack(bcmolt_epon_denied_link_unknown_link_violation_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_denied_link_upstream_bandwidth_violation_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_denied_link_upstream_bandwidth_violation_id_pack(bcmolt_epon_denied_link_upstream_bandwidth_violation_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_denied_link_upstream_bandwidth_violation_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_denied_link_upstream_bandwidth_violation_id_unpack(bcmolt_epon_denied_link_upstream_bandwidth_violation_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_encryption_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_encryption_mode_pack(bcmolt_epon_encryption_mode this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_encryption_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_encryption_mode_unpack(bcmolt_epon_encryption_mode *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_key_choice to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_key_choice_pack(bcmolt_epon_key_choice this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_key_choice from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_key_choice_unpack(bcmolt_epon_key_choice *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_encryption_direction to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_encryption_direction_pack(bcmolt_epon_encryption_direction this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_encryption_direction from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_encryption_direction_unpack(bcmolt_epon_encryption_direction *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_fec_en_state to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_fec_en_state_pack(bcmolt_epon_fec_en_state this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_fec_en_state from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_fec_en_state_unpack(bcmolt_epon_fec_en_state *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_oam_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_type_pack(bcmolt_epon_oam_type this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_type_unpack(bcmolt_epon_oam_type *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_link_auto_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_link_auto_cfg_id_pack(bcmolt_epon_link_auto_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_link_auto_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_link_auto_cfg_id_unpack(bcmolt_epon_link_auto_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_link_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_link_cfg_id_pack(bcmolt_epon_link_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_link_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_link_cfg_id_unpack(bcmolt_epon_link_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_link_delete_link_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_link_delete_link_id_pack(bcmolt_epon_link_delete_link_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_link_delete_link_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_link_delete_link_id_unpack(bcmolt_epon_link_delete_link_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_link_duplicate_mpcp_registration_request_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_link_duplicate_mpcp_registration_request_id_pack(bcmolt_epon_link_duplicate_mpcp_registration_request_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_link_duplicate_mpcp_registration_request_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_link_duplicate_mpcp_registration_request_id_unpack(bcmolt_epon_link_duplicate_mpcp_registration_request_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_link_encryption_enabled_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_link_encryption_enabled_id_pack(bcmolt_epon_link_encryption_enabled_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_link_encryption_enabled_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_link_encryption_enabled_id_unpack(bcmolt_epon_link_encryption_enabled_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_link_fec_state to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_link_fec_state_pack(bcmolt_epon_link_fec_state this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_link_fec_state from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_link_fec_state_unpack(bcmolt_epon_link_fec_state *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_link_force_rediscovery_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_link_force_rediscovery_id_pack(bcmolt_epon_link_force_rediscovery_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_link_force_rediscovery_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_link_force_rediscovery_id_unpack(bcmolt_epon_link_force_rediscovery_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_link_frame_captured_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_link_frame_captured_id_pack(bcmolt_epon_link_frame_captured_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_link_frame_captured_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_link_frame_captured_id_unpack(bcmolt_epon_link_frame_captured_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_link_status to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_link_status_pack(bcmolt_epon_link_status this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_link_status from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_link_status_unpack(bcmolt_epon_link_status *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_mpcp_discovery_info to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_mpcp_discovery_info_pack(bcmolt_mpcp_discovery_info this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_mpcp_discovery_info from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_mpcp_discovery_info_unpack(bcmolt_mpcp_discovery_info *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_link_inject_frame_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_link_inject_frame_id_pack(bcmolt_epon_link_inject_frame_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_link_inject_frame_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_link_inject_frame_id_unpack(bcmolt_epon_link_inject_frame_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_link_key_exchange_failure_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_link_key_exchange_failure_id_pack(bcmolt_epon_link_key_exchange_failure_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_link_key_exchange_failure_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_link_key_exchange_failure_id_unpack(bcmolt_epon_link_key_exchange_failure_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_link_key_exchange_start_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_link_key_exchange_start_id_pack(bcmolt_epon_link_key_exchange_start_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_link_key_exchange_start_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_link_key_exchange_start_id_unpack(bcmolt_epon_link_key_exchange_start_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_link_key_exchange_started_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_link_key_exchange_started_id_pack(bcmolt_epon_link_key_exchange_started_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_link_key_exchange_started_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_link_key_exchange_started_id_unpack(bcmolt_epon_link_key_exchange_started_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_link_key_exchange_stop_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_link_key_exchange_stop_id_pack(bcmolt_epon_link_key_exchange_stop_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_link_key_exchange_stop_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_link_key_exchange_stop_id_unpack(bcmolt_epon_link_key_exchange_stop_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_link_key_exchange_stopped_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_link_key_exchange_stopped_id_pack(bcmolt_epon_link_key_exchange_stopped_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_link_key_exchange_stopped_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_link_key_exchange_stopped_id_unpack(bcmolt_epon_link_key_exchange_stopped_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_link_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_link_key_id_pack(bcmolt_epon_link_key_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_link_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_link_key_id_unpack(bcmolt_epon_link_key_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_link_link_deleted_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_link_link_deleted_id_pack(bcmolt_epon_link_link_deleted_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_link_link_deleted_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_link_link_deleted_id_unpack(bcmolt_epon_link_link_deleted_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_link_link_speed_mismatch_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_link_link_speed_mismatch_id_pack(bcmolt_epon_link_link_speed_mismatch_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_link_link_speed_mismatch_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_link_link_speed_mismatch_id_unpack(bcmolt_epon_link_link_speed_mismatch_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_link_mpcp_deregistered_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_link_mpcp_deregistered_id_pack(bcmolt_epon_link_mpcp_deregistered_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_link_mpcp_deregistered_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_link_mpcp_deregistered_id_unpack(bcmolt_epon_link_mpcp_deregistered_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_link_mpcp_discovered_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_link_mpcp_discovered_id_pack(bcmolt_epon_link_mpcp_discovered_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_link_mpcp_discovered_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_link_mpcp_discovered_id_unpack(bcmolt_epon_link_mpcp_discovered_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_link_mpcp_reg_ack_timeout_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_link_mpcp_reg_ack_timeout_id_pack(bcmolt_epon_link_mpcp_reg_ack_timeout_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_link_mpcp_reg_ack_timeout_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_link_mpcp_reg_ack_timeout_id_unpack(bcmolt_epon_link_mpcp_reg_ack_timeout_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_link_mpcp_report_timeout_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_link_mpcp_report_timeout_id_pack(bcmolt_epon_link_mpcp_report_timeout_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_link_mpcp_report_timeout_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_link_mpcp_report_timeout_id_unpack(bcmolt_epon_link_mpcp_report_timeout_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_link_oam_keepalive_timeout_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_link_oam_keepalive_timeout_id_pack(bcmolt_epon_link_oam_keepalive_timeout_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_link_oam_keepalive_timeout_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_link_oam_keepalive_timeout_id_unpack(bcmolt_epon_link_oam_keepalive_timeout_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_link_oam_keepalive_timer_start_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_link_oam_keepalive_timer_start_id_pack(bcmolt_epon_link_oam_keepalive_timer_start_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_link_oam_keepalive_timer_start_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_link_oam_keepalive_timer_start_id_unpack(bcmolt_epon_link_oam_keepalive_timer_start_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_link_oam_keepalive_timer_started_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_link_oam_keepalive_timer_started_id_pack(bcmolt_epon_link_oam_keepalive_timer_started_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_link_oam_keepalive_timer_started_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_link_oam_keepalive_timer_started_id_unpack(bcmolt_epon_link_oam_keepalive_timer_started_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_link_oam_keepalive_timer_stop_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_link_oam_keepalive_timer_stop_id_pack(bcmolt_epon_link_oam_keepalive_timer_stop_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_link_oam_keepalive_timer_stop_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_link_oam_keepalive_timer_stop_id_unpack(bcmolt_epon_link_oam_keepalive_timer_stop_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_link_oam_keepalive_timer_stopped_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_link_oam_keepalive_timer_stopped_id_pack(bcmolt_epon_link_oam_keepalive_timer_stopped_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_link_oam_keepalive_timer_stopped_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_link_oam_keepalive_timer_stopped_id_unpack(bcmolt_epon_link_oam_keepalive_timer_stopped_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_link_preprovisioned_link_created_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_link_preprovisioned_link_created_id_pack(bcmolt_epon_link_preprovisioned_link_created_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_link_preprovisioned_link_created_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_link_preprovisioned_link_created_id_unpack(bcmolt_epon_link_preprovisioned_link_created_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_link_protection_switch_occurred_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_link_protection_switch_occurred_id_pack(bcmolt_epon_link_protection_switch_occurred_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_link_protection_switch_occurred_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_link_protection_switch_occurred_id_unpack(bcmolt_epon_link_protection_switch_occurred_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_link_range_value_changed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_link_range_value_changed_id_pack(bcmolt_epon_link_range_value_changed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_link_range_value_changed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_link_range_value_changed_id_unpack(bcmolt_epon_link_range_value_changed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_link_rerange_failure_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_link_rerange_failure_id_pack(bcmolt_epon_link_rerange_failure_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_link_rerange_failure_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_link_rerange_failure_id_unpack(bcmolt_epon_link_rerange_failure_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_link_stat_alarm_cleared_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_link_stat_alarm_cleared_id_pack(bcmolt_epon_link_stat_alarm_cleared_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_link_stat_alarm_cleared_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_link_stat_alarm_cleared_id_unpack(bcmolt_epon_link_stat_alarm_cleared_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_link_stat_alarm_raised_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_link_stat_alarm_raised_id_pack(bcmolt_epon_link_stat_alarm_raised_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_link_stat_alarm_raised_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_link_stat_alarm_raised_id_unpack(bcmolt_epon_link_stat_alarm_raised_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_link_stat_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_link_stat_cfg_id_pack(bcmolt_epon_link_stat_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_link_stat_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_link_stat_cfg_id_unpack(bcmolt_epon_link_stat_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_link_stat_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_link_stat_id_pack(bcmolt_epon_link_stat_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_link_stat_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_link_stat_id_unpack(bcmolt_epon_link_stat_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_link_state_flags to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_link_state_flags_pack(bcmolt_epon_link_state_flags this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_link_state_flags from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_link_state_flags_unpack(bcmolt_epon_link_state_flags *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_link_static_registration_done_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_link_static_registration_done_id_pack(bcmolt_epon_link_static_registration_done_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_link_static_registration_done_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_link_static_registration_done_id_unpack(bcmolt_epon_link_static_registration_done_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_link_static_registration_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_link_static_registration_id_pack(bcmolt_epon_link_static_registration_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_link_static_registration_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_link_static_registration_id_unpack(bcmolt_epon_link_static_registration_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_link_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_link_type_pack(bcmolt_epon_link_type this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_link_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_link_type_unpack(bcmolt_epon_link_type *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_mpcp_gate_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_mpcp_gate_mode_pack(bcmolt_mpcp_gate_mode this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_mpcp_gate_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_mpcp_gate_mode_unpack(bcmolt_mpcp_gate_mode *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_mpcp_registration_gate_flags to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_mpcp_registration_gate_flags_pack(bcmolt_mpcp_registration_gate_flags this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_mpcp_registration_gate_flags from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_mpcp_registration_gate_flags_unpack(bcmolt_mpcp_registration_gate_flags *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_ni_add_link_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_ni_add_link_id_pack(bcmolt_epon_ni_add_link_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_ni_add_link_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_ni_add_link_id_unpack(bcmolt_epon_ni_add_link_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_ni_add_multicast_link_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_ni_add_multicast_link_id_pack(bcmolt_epon_ni_add_multicast_link_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_ni_add_multicast_link_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_ni_add_multicast_link_id_unpack(bcmolt_epon_ni_add_multicast_link_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_ni_add_protected_standby_link_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_ni_add_protected_standby_link_id_pack(bcmolt_epon_ni_add_protected_standby_link_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_ni_add_protected_standby_link_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_ni_add_protected_standby_link_id_unpack(bcmolt_epon_ni_add_protected_standby_link_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_ni_auto_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_ni_auto_cfg_id_pack(bcmolt_epon_ni_auto_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_ni_auto_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_ni_auto_cfg_id_unpack(bcmolt_epon_ni_auto_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_ni_auto_rogue_scan_10g_failure_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_ni_auto_rogue_scan_10g_failure_id_pack(bcmolt_epon_ni_auto_rogue_scan_10g_failure_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_ni_auto_rogue_scan_10g_failure_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_ni_auto_rogue_scan_10g_failure_id_unpack(bcmolt_epon_ni_auto_rogue_scan_10g_failure_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_ni_auto_rogue_scan_1g_failure_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_ni_auto_rogue_scan_1g_failure_id_pack(bcmolt_epon_ni_auto_rogue_scan_1g_failure_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_ni_auto_rogue_scan_1g_failure_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_ni_auto_rogue_scan_1g_failure_id_unpack(bcmolt_epon_ni_auto_rogue_scan_1g_failure_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_ni_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_ni_cfg_id_pack(bcmolt_epon_ni_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_ni_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_ni_cfg_id_unpack(bcmolt_epon_ni_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_ni_en_state to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_ni_en_state_pack(bcmolt_epon_ni_en_state this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_ni_en_state from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_ni_en_state_unpack(bcmolt_epon_ni_en_state *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_ni_issue_rssi_grant_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_ni_issue_rssi_grant_id_pack(bcmolt_epon_ni_issue_rssi_grant_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_ni_issue_rssi_grant_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_ni_issue_rssi_grant_id_unpack(bcmolt_epon_ni_issue_rssi_grant_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_ni_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_ni_key_id_pack(bcmolt_epon_ni_key_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_ni_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_ni_key_id_unpack(bcmolt_epon_ni_key_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_ni_llid_quarantined_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_ni_llid_quarantined_id_pack(bcmolt_epon_ni_llid_quarantined_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_ni_llid_quarantined_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_ni_llid_quarantined_id_unpack(bcmolt_epon_ni_llid_quarantined_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_ni_mpcp_timestamp_changed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_ni_mpcp_timestamp_changed_id_pack(bcmolt_epon_ni_mpcp_timestamp_changed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_ni_mpcp_timestamp_changed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_ni_mpcp_timestamp_changed_id_unpack(bcmolt_epon_ni_mpcp_timestamp_changed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_ni_no_reports_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_ni_no_reports_id_pack(bcmolt_epon_ni_no_reports_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_ni_no_reports_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_ni_no_reports_id_unpack(bcmolt_epon_ni_no_reports_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_ni_onu_upgrade_complete_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_ni_onu_upgrade_complete_id_pack(bcmolt_epon_ni_onu_upgrade_complete_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_ni_onu_upgrade_complete_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_ni_onu_upgrade_complete_id_unpack(bcmolt_epon_ni_onu_upgrade_complete_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_ni_protection_switching_apply_rerange_delta_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_ni_protection_switching_apply_rerange_delta_id_pack(bcmolt_epon_ni_protection_switching_apply_rerange_delta_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_ni_protection_switching_apply_rerange_delta_id from 
+ * bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_ni_protection_switching_apply_rerange_delta_id_unpack(bcmolt_epon_ni_protection_switching_apply_rerange_delta_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_ni_rerange_failure_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_ni_rerange_failure_id_pack(bcmolt_epon_ni_rerange_failure_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_ni_rerange_failure_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_ni_rerange_failure_id_unpack(bcmolt_epon_ni_rerange_failure_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_ni_rogue_llid_scan_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_ni_rogue_llid_scan_id_pack(bcmolt_epon_ni_rogue_llid_scan_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_ni_rogue_llid_scan_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_ni_rogue_llid_scan_id_unpack(bcmolt_epon_ni_rogue_llid_scan_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_ni_rogue_scan_complete_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_ni_rogue_scan_complete_id_pack(bcmolt_epon_ni_rogue_scan_complete_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_ni_rogue_scan_complete_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_ni_rogue_scan_complete_id_unpack(bcmolt_epon_ni_rogue_scan_complete_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_ni_rssi_measurement_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_ni_rssi_measurement_completed_id_pack(bcmolt_epon_ni_rssi_measurement_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_ni_rssi_measurement_completed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_ni_rssi_measurement_completed_id_unpack(bcmolt_epon_ni_rssi_measurement_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_ni_set_epon_ni_en_state_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_ni_set_epon_ni_en_state_id_pack(bcmolt_epon_ni_set_epon_ni_en_state_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_ni_set_epon_ni_en_state_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_ni_set_epon_ni_en_state_id_unpack(bcmolt_epon_ni_set_epon_ni_en_state_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_ni_start_onu_upgrade_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_ni_start_onu_upgrade_id_pack(bcmolt_epon_ni_start_onu_upgrade_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_ni_start_onu_upgrade_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_ni_start_onu_upgrade_id_unpack(bcmolt_epon_ni_start_onu_upgrade_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_ni_state_change_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_ni_state_change_completed_id_pack(bcmolt_epon_ni_state_change_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_ni_state_change_completed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_ni_state_change_completed_id_unpack(bcmolt_epon_ni_state_change_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_oam_extension_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_extension_type_pack(bcmolt_epon_oam_extension_type this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_extension_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_extension_type_unpack(bcmolt_epon_oam_extension_type *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_onu_10g_us_auto_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_onu_10g_us_auto_cfg_id_pack(bcmolt_epon_onu_10g_us_auto_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_onu_10g_us_auto_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_onu_10g_us_auto_cfg_id_unpack(bcmolt_epon_onu_10g_us_auto_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_onu_10g_us_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_onu_10g_us_cfg_id_pack(bcmolt_epon_onu_10g_us_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_onu_10g_us_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_onu_10g_us_cfg_id_unpack(bcmolt_epon_onu_10g_us_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_onu_10g_us_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_onu_10g_us_key_id_pack(bcmolt_epon_onu_10g_us_key_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_onu_10g_us_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_onu_10g_us_key_id_unpack(bcmolt_epon_onu_10g_us_key_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_onu_10g_us_stat_alarm_cleared_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_onu_10g_us_stat_alarm_cleared_id_pack(bcmolt_epon_onu_10g_us_stat_alarm_cleared_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_onu_10g_us_stat_alarm_cleared_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_onu_10g_us_stat_alarm_cleared_id_unpack(bcmolt_epon_onu_10g_us_stat_alarm_cleared_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_onu_10g_us_stat_alarm_raised_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_onu_10g_us_stat_alarm_raised_id_pack(bcmolt_epon_onu_10g_us_stat_alarm_raised_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_onu_10g_us_stat_alarm_raised_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_onu_10g_us_stat_alarm_raised_id_unpack(bcmolt_epon_onu_10g_us_stat_alarm_raised_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_onu_10g_us_stat_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_onu_10g_us_stat_cfg_id_pack(bcmolt_epon_onu_10g_us_stat_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_onu_10g_us_stat_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_onu_10g_us_stat_cfg_id_unpack(bcmolt_epon_onu_10g_us_stat_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_onu_10g_us_stat_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_onu_10g_us_stat_id_pack(bcmolt_epon_onu_10g_us_stat_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_onu_10g_us_stat_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_onu_10g_us_stat_id_unpack(bcmolt_epon_onu_10g_us_stat_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_onu_1g_us_auto_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_onu_1g_us_auto_cfg_id_pack(bcmolt_epon_onu_1g_us_auto_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_onu_1g_us_auto_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_onu_1g_us_auto_cfg_id_unpack(bcmolt_epon_onu_1g_us_auto_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_onu_1g_us_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_onu_1g_us_cfg_id_pack(bcmolt_epon_onu_1g_us_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_onu_1g_us_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_onu_1g_us_cfg_id_unpack(bcmolt_epon_onu_1g_us_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_onu_1g_us_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_onu_1g_us_key_id_pack(bcmolt_epon_onu_1g_us_key_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_onu_1g_us_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_onu_1g_us_key_id_unpack(bcmolt_epon_onu_1g_us_key_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_onu_1g_us_stat_alarm_cleared_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_onu_1g_us_stat_alarm_cleared_id_pack(bcmolt_epon_onu_1g_us_stat_alarm_cleared_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_onu_1g_us_stat_alarm_cleared_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_onu_1g_us_stat_alarm_cleared_id_unpack(bcmolt_epon_onu_1g_us_stat_alarm_cleared_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_onu_1g_us_stat_alarm_raised_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_onu_1g_us_stat_alarm_raised_id_pack(bcmolt_epon_onu_1g_us_stat_alarm_raised_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_onu_1g_us_stat_alarm_raised_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_onu_1g_us_stat_alarm_raised_id_unpack(bcmolt_epon_onu_1g_us_stat_alarm_raised_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_onu_1g_us_stat_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_onu_1g_us_stat_cfg_id_pack(bcmolt_epon_onu_1g_us_stat_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_onu_1g_us_stat_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_onu_1g_us_stat_cfg_id_unpack(bcmolt_epon_onu_1g_us_stat_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_onu_1g_us_stat_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_onu_1g_us_stat_id_pack(bcmolt_epon_onu_1g_us_stat_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_onu_1g_us_stat_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_onu_1g_us_stat_id_unpack(bcmolt_epon_onu_1g_us_stat_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_onu_upgrade_onu_response_code to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_onu_upgrade_onu_response_code_pack(bcmolt_epon_onu_upgrade_onu_response_code this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_onu_upgrade_onu_response_code from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_onu_upgrade_onu_response_code_unpack(bcmolt_epon_onu_upgrade_onu_response_code *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_onu_upgrade_return_code to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_onu_upgrade_return_code_pack(bcmolt_epon_onu_upgrade_return_code this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_onu_upgrade_return_code from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_onu_upgrade_return_code_unpack(bcmolt_epon_onu_upgrade_return_code *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_path_10g_ds_auto_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_path_10g_ds_auto_cfg_id_pack(bcmolt_epon_path_10g_ds_auto_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_path_10g_ds_auto_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_path_10g_ds_auto_cfg_id_unpack(bcmolt_epon_path_10g_ds_auto_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_path_10g_ds_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_path_10g_ds_cfg_id_pack(bcmolt_epon_path_10g_ds_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_path_10g_ds_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_path_10g_ds_cfg_id_unpack(bcmolt_epon_path_10g_ds_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_path_10g_ds_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_path_10g_ds_key_id_pack(bcmolt_epon_path_10g_ds_key_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_path_10g_ds_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_path_10g_ds_key_id_unpack(bcmolt_epon_path_10g_ds_key_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_path_10g_ds_stat_alarm_cleared_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_path_10g_ds_stat_alarm_cleared_id_pack(bcmolt_epon_path_10g_ds_stat_alarm_cleared_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_path_10g_ds_stat_alarm_cleared_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_path_10g_ds_stat_alarm_cleared_id_unpack(bcmolt_epon_path_10g_ds_stat_alarm_cleared_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_path_10g_ds_stat_alarm_raised_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_path_10g_ds_stat_alarm_raised_id_pack(bcmolt_epon_path_10g_ds_stat_alarm_raised_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_path_10g_ds_stat_alarm_raised_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_path_10g_ds_stat_alarm_raised_id_unpack(bcmolt_epon_path_10g_ds_stat_alarm_raised_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_path_10g_ds_stat_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_path_10g_ds_stat_cfg_id_pack(bcmolt_epon_path_10g_ds_stat_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_path_10g_ds_stat_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_path_10g_ds_stat_cfg_id_unpack(bcmolt_epon_path_10g_ds_stat_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_path_10g_ds_stat_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_path_10g_ds_stat_id_pack(bcmolt_epon_path_10g_ds_stat_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_path_10g_ds_stat_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_path_10g_ds_stat_id_unpack(bcmolt_epon_path_10g_ds_stat_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_path_10g_us_auto_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_path_10g_us_auto_cfg_id_pack(bcmolt_epon_path_10g_us_auto_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_path_10g_us_auto_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_path_10g_us_auto_cfg_id_unpack(bcmolt_epon_path_10g_us_auto_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_path_10g_us_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_path_10g_us_cfg_id_pack(bcmolt_epon_path_10g_us_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_path_10g_us_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_path_10g_us_cfg_id_unpack(bcmolt_epon_path_10g_us_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_path_10g_us_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_path_10g_us_key_id_pack(bcmolt_epon_path_10g_us_key_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_path_10g_us_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_path_10g_us_key_id_unpack(bcmolt_epon_path_10g_us_key_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_path_10g_us_stat_alarm_cleared_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_path_10g_us_stat_alarm_cleared_id_pack(bcmolt_epon_path_10g_us_stat_alarm_cleared_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_path_10g_us_stat_alarm_cleared_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_path_10g_us_stat_alarm_cleared_id_unpack(bcmolt_epon_path_10g_us_stat_alarm_cleared_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_path_10g_us_stat_alarm_raised_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_path_10g_us_stat_alarm_raised_id_pack(bcmolt_epon_path_10g_us_stat_alarm_raised_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_path_10g_us_stat_alarm_raised_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_path_10g_us_stat_alarm_raised_id_unpack(bcmolt_epon_path_10g_us_stat_alarm_raised_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_path_10g_us_stat_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_path_10g_us_stat_cfg_id_pack(bcmolt_epon_path_10g_us_stat_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_path_10g_us_stat_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_path_10g_us_stat_cfg_id_unpack(bcmolt_epon_path_10g_us_stat_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_path_10g_us_stat_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_path_10g_us_stat_id_pack(bcmolt_epon_path_10g_us_stat_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_path_10g_us_stat_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_path_10g_us_stat_id_unpack(bcmolt_epon_path_10g_us_stat_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_path_1g_ds_auto_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_path_1g_ds_auto_cfg_id_pack(bcmolt_epon_path_1g_ds_auto_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_path_1g_ds_auto_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_path_1g_ds_auto_cfg_id_unpack(bcmolt_epon_path_1g_ds_auto_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_path_1g_ds_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_path_1g_ds_cfg_id_pack(bcmolt_epon_path_1g_ds_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_path_1g_ds_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_path_1g_ds_cfg_id_unpack(bcmolt_epon_path_1g_ds_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_path_1g_ds_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_path_1g_ds_key_id_pack(bcmolt_epon_path_1g_ds_key_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_path_1g_ds_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_path_1g_ds_key_id_unpack(bcmolt_epon_path_1g_ds_key_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_path_1g_ds_stat_alarm_cleared_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_path_1g_ds_stat_alarm_cleared_id_pack(bcmolt_epon_path_1g_ds_stat_alarm_cleared_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_path_1g_ds_stat_alarm_cleared_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_path_1g_ds_stat_alarm_cleared_id_unpack(bcmolt_epon_path_1g_ds_stat_alarm_cleared_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_path_1g_ds_stat_alarm_raised_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_path_1g_ds_stat_alarm_raised_id_pack(bcmolt_epon_path_1g_ds_stat_alarm_raised_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_path_1g_ds_stat_alarm_raised_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_path_1g_ds_stat_alarm_raised_id_unpack(bcmolt_epon_path_1g_ds_stat_alarm_raised_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_path_1g_ds_stat_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_path_1g_ds_stat_cfg_id_pack(bcmolt_epon_path_1g_ds_stat_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_path_1g_ds_stat_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_path_1g_ds_stat_cfg_id_unpack(bcmolt_epon_path_1g_ds_stat_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_path_1g_ds_stat_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_path_1g_ds_stat_id_pack(bcmolt_epon_path_1g_ds_stat_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_path_1g_ds_stat_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_path_1g_ds_stat_id_unpack(bcmolt_epon_path_1g_ds_stat_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_path_1g_us_auto_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_path_1g_us_auto_cfg_id_pack(bcmolt_epon_path_1g_us_auto_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_path_1g_us_auto_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_path_1g_us_auto_cfg_id_unpack(bcmolt_epon_path_1g_us_auto_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_path_1g_us_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_path_1g_us_cfg_id_pack(bcmolt_epon_path_1g_us_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_path_1g_us_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_path_1g_us_cfg_id_unpack(bcmolt_epon_path_1g_us_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_path_1g_us_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_path_1g_us_key_id_pack(bcmolt_epon_path_1g_us_key_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_path_1g_us_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_path_1g_us_key_id_unpack(bcmolt_epon_path_1g_us_key_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_path_1g_us_stat_alarm_cleared_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_path_1g_us_stat_alarm_cleared_id_pack(bcmolt_epon_path_1g_us_stat_alarm_cleared_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_path_1g_us_stat_alarm_cleared_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_path_1g_us_stat_alarm_cleared_id_unpack(bcmolt_epon_path_1g_us_stat_alarm_cleared_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_path_1g_us_stat_alarm_raised_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_path_1g_us_stat_alarm_raised_id_pack(bcmolt_epon_path_1g_us_stat_alarm_raised_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_path_1g_us_stat_alarm_raised_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_path_1g_us_stat_alarm_raised_id_unpack(bcmolt_epon_path_1g_us_stat_alarm_raised_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_path_1g_us_stat_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_path_1g_us_stat_cfg_id_pack(bcmolt_epon_path_1g_us_stat_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_path_1g_us_stat_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_path_1g_us_stat_cfg_id_unpack(bcmolt_epon_path_1g_us_stat_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_path_1g_us_stat_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_path_1g_us_stat_id_pack(bcmolt_epon_path_1g_us_stat_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_path_1g_us_stat_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_path_1g_us_stat_id_unpack(bcmolt_epon_path_1g_us_stat_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_protection_state to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_protection_state_pack(bcmolt_epon_protection_state this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_protection_state from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_protection_state_unpack(bcmolt_epon_protection_state *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_protection_switching_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_protection_switching_type_pack(bcmolt_epon_protection_switching_type this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_protection_switching_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_protection_switching_type_unpack(bcmolt_epon_protection_switching_type *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_protection_switching_detection_options to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_protection_switching_detection_options_pack(bcmolt_protection_switching_detection_options this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_protection_switching_detection_options from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_protection_switching_detection_options_unpack(bcmolt_protection_switching_detection_options *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_protection_switching_reranging_options to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_protection_switching_reranging_options_pack(bcmolt_epon_protection_switching_reranging_options this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_protection_switching_reranging_options from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_protection_switching_reranging_options_unpack(bcmolt_epon_protection_switching_reranging_options *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpio_pin to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpio_pin_pack(bcmolt_gpio_pin this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpio_pin from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpio_pin_unpack(bcmolt_gpio_pin *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpio_polarity to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpio_polarity_pack(bcmolt_gpio_polarity this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpio_polarity from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpio_polarity_unpack(bcmolt_gpio_polarity *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_rp_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_rp_cfg_id_pack(bcmolt_epon_rp_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_rp_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_rp_cfg_id_unpack(bcmolt_epon_rp_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_epon_rp_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_rp_key_id_pack(bcmolt_epon_rp_key_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_rp_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_rp_key_id_unpack(bcmolt_epon_rp_key_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_ext_irq to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_ext_irq_pack(bcmolt_ext_irq this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_ext_irq from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_ext_irq_unpack(bcmolt_ext_irq *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_flush_mac_table_option to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_flush_mac_table_option_pack(bcmolt_flush_mac_table_option this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_flush_mac_table_option from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_flush_mac_table_option_unpack(bcmolt_flush_mac_table_option *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_frequency_adjustment_direction to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_frequency_adjustment_direction_pack(bcmolt_frequency_adjustment_direction this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_frequency_adjustment_direction from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_frequency_adjustment_direction_unpack(bcmolt_frequency_adjustment_direction *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gem_port_direction to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gem_port_direction_pack(bcmolt_gem_port_direction this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gem_port_direction from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gem_port_direction_unpack(bcmolt_gem_port_direction *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gem_port_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gem_port_type_pack(bcmolt_gem_port_type this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gem_port_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gem_port_type_unpack(bcmolt_gem_port_type *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gem_port_operation to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gem_port_operation_pack(bcmolt_gem_port_operation this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gem_port_operation from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gem_port_operation_unpack(bcmolt_gem_port_operation *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpio_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpio_cfg_id_pack(bcmolt_gpio_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpio_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpio_cfg_id_unpack(bcmolt_gpio_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpio_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpio_key_id_pack(bcmolt_gpio_key_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpio_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpio_key_id_unpack(bcmolt_gpio_key_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpio_pin_dir to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpio_pin_dir_pack(bcmolt_gpio_pin_dir this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpio_pin_dir from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpio_pin_dir_unpack(bcmolt_gpio_pin_dir *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpio_value to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpio_value_pack(bcmolt_gpio_value this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpio_value from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpio_value_unpack(bcmolt_gpio_value *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_alloc_auto_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_alloc_auto_cfg_id_pack(bcmolt_gpon_alloc_auto_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_alloc_auto_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_alloc_auto_cfg_id_unpack(bcmolt_gpon_alloc_auto_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_alloc_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_alloc_cfg_id_pack(bcmolt_gpon_alloc_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_alloc_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_alloc_cfg_id_unpack(bcmolt_gpon_alloc_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_alloc_configuration_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_alloc_configuration_completed_id_pack(bcmolt_gpon_alloc_configuration_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_alloc_configuration_completed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_alloc_configuration_completed_id_unpack(bcmolt_gpon_alloc_configuration_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_alloc_get_alloc_stats_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_alloc_get_alloc_stats_completed_id_pack(bcmolt_gpon_alloc_get_alloc_stats_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_alloc_get_alloc_stats_completed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_alloc_get_alloc_stats_completed_id_unpack(bcmolt_gpon_alloc_get_alloc_stats_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_alloc_get_stats_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_alloc_get_stats_id_pack(bcmolt_gpon_alloc_get_stats_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_alloc_get_stats_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_alloc_get_stats_id_unpack(bcmolt_gpon_alloc_get_stats_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_alloc_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_alloc_key_id_pack(bcmolt_gpon_alloc_key_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_alloc_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_alloc_key_id_unpack(bcmolt_gpon_alloc_key_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_alloc_set_state_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_alloc_set_state_id_pack(bcmolt_gpon_alloc_set_state_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_alloc_set_state_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_alloc_set_state_id_unpack(bcmolt_gpon_alloc_set_state_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_alloc_stat_alarm_cleared_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_alloc_stat_alarm_cleared_id_pack(bcmolt_gpon_alloc_stat_alarm_cleared_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_alloc_stat_alarm_cleared_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_alloc_stat_alarm_cleared_id_unpack(bcmolt_gpon_alloc_stat_alarm_cleared_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_alloc_stat_alarm_raised_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_alloc_stat_alarm_raised_id_pack(bcmolt_gpon_alloc_stat_alarm_raised_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_alloc_stat_alarm_raised_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_alloc_stat_alarm_raised_id_unpack(bcmolt_gpon_alloc_stat_alarm_raised_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_alloc_stat_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_alloc_stat_cfg_id_pack(bcmolt_gpon_alloc_stat_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_alloc_stat_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_alloc_stat_cfg_id_unpack(bcmolt_gpon_alloc_stat_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_alloc_stat_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_alloc_stat_id_pack(bcmolt_gpon_alloc_stat_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_alloc_stat_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_alloc_stat_id_unpack(bcmolt_gpon_alloc_stat_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_gem_port_auto_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_gem_port_auto_cfg_id_pack(bcmolt_gpon_gem_port_auto_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_gem_port_auto_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_gem_port_auto_cfg_id_unpack(bcmolt_gpon_gem_port_auto_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_gem_port_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_gem_port_cfg_id_pack(bcmolt_gpon_gem_port_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_gem_port_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_gem_port_cfg_id_unpack(bcmolt_gpon_gem_port_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_gem_port_configuration_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_gem_port_configuration_completed_id_pack(bcmolt_gpon_gem_port_configuration_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_gem_port_configuration_completed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_gem_port_configuration_completed_id_unpack(bcmolt_gpon_gem_port_configuration_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_gem_port_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_gem_port_key_id_pack(bcmolt_gpon_gem_port_key_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_gem_port_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_gem_port_key_id_unpack(bcmolt_gpon_gem_port_key_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_gem_port_set_state_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_gem_port_set_state_id_pack(bcmolt_gpon_gem_port_set_state_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_gem_port_set_state_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_gem_port_set_state_id_unpack(bcmolt_gpon_gem_port_set_state_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_gem_port_stat_alarm_cleared_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_gem_port_stat_alarm_cleared_id_pack(bcmolt_gpon_gem_port_stat_alarm_cleared_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_gem_port_stat_alarm_cleared_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_gem_port_stat_alarm_cleared_id_unpack(bcmolt_gpon_gem_port_stat_alarm_cleared_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_gem_port_stat_alarm_raised_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_gem_port_stat_alarm_raised_id_pack(bcmolt_gpon_gem_port_stat_alarm_raised_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_gem_port_stat_alarm_raised_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_gem_port_stat_alarm_raised_id_unpack(bcmolt_gpon_gem_port_stat_alarm_raised_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_gem_port_stat_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_gem_port_stat_cfg_id_pack(bcmolt_gpon_gem_port_stat_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_gem_port_stat_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_gem_port_stat_cfg_id_unpack(bcmolt_gpon_gem_port_stat_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_gem_port_stat_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_gem_port_stat_id_pack(bcmolt_gpon_gem_port_stat_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_gem_port_stat_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_gem_port_stat_id_unpack(bcmolt_gpon_gem_port_stat_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_gem_port_state to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_gem_port_state_pack(bcmolt_gpon_gem_port_state this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_gem_port_state from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_gem_port_state_unpack(bcmolt_gpon_gem_port_state *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_iwf_auto_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_auto_cfg_id_pack(bcmolt_gpon_iwf_auto_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_iwf_auto_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_auto_cfg_id_unpack(bcmolt_gpon_iwf_auto_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_iwf_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_cfg_id_pack(bcmolt_gpon_iwf_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_iwf_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_cfg_id_unpack(bcmolt_gpon_iwf_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_iwf_ds_egress_flow_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_ds_egress_flow_cfg_id_pack(bcmolt_gpon_iwf_ds_egress_flow_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_iwf_ds_egress_flow_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_ds_egress_flow_cfg_id_unpack(bcmolt_gpon_iwf_ds_egress_flow_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_iwf_ds_egress_flow_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_ds_egress_flow_key_id_pack(bcmolt_gpon_iwf_ds_egress_flow_key_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_iwf_ds_egress_flow_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_ds_egress_flow_key_id_unpack(bcmolt_gpon_iwf_ds_egress_flow_key_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_iwf_ds_ingress_flow_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_ds_ingress_flow_cfg_id_pack(bcmolt_gpon_iwf_ds_ingress_flow_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_iwf_ds_ingress_flow_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_ds_ingress_flow_cfg_id_unpack(bcmolt_gpon_iwf_ds_ingress_flow_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_iwf_ds_ingress_flow_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_ds_ingress_flow_key_id_pack(bcmolt_gpon_iwf_ds_ingress_flow_key_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_iwf_ds_ingress_flow_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_ds_ingress_flow_key_id_unpack(bcmolt_gpon_iwf_ds_ingress_flow_key_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_iwf_flush_mac_table_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_flush_mac_table_completed_id_pack(bcmolt_gpon_iwf_flush_mac_table_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_iwf_flush_mac_table_completed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_flush_mac_table_completed_id_unpack(bcmolt_gpon_iwf_flush_mac_table_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_iwf_flush_mac_table_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_flush_mac_table_id_pack(bcmolt_gpon_iwf_flush_mac_table_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_iwf_flush_mac_table_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_flush_mac_table_id_unpack(bcmolt_gpon_iwf_flush_mac_table_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_iwf_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_key_id_pack(bcmolt_gpon_iwf_key_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_iwf_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_key_id_unpack(bcmolt_gpon_iwf_key_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_iwf_mac_table_auto_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_mac_table_auto_cfg_id_pack(bcmolt_gpon_iwf_mac_table_auto_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_iwf_mac_table_auto_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_mac_table_auto_cfg_id_unpack(bcmolt_gpon_iwf_mac_table_auto_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_iwf_mac_table_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_mac_table_cfg_id_pack(bcmolt_gpon_iwf_mac_table_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_iwf_mac_table_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_mac_table_cfg_id_unpack(bcmolt_gpon_iwf_mac_table_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_iwf_mac_table_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_mac_table_key_id_pack(bcmolt_gpon_iwf_mac_table_key_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_iwf_mac_table_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_mac_table_key_id_unpack(bcmolt_gpon_iwf_mac_table_key_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_iwf_mac_table_mac_aged_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_mac_table_mac_aged_id_pack(bcmolt_gpon_iwf_mac_table_mac_aged_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_iwf_mac_table_mac_aged_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_mac_table_mac_aged_id_unpack(bcmolt_gpon_iwf_mac_table_mac_aged_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_iwf_mac_table_mac_dropped_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_mac_table_mac_dropped_id_pack(bcmolt_gpon_iwf_mac_table_mac_dropped_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_iwf_mac_table_mac_dropped_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_mac_table_mac_dropped_id_unpack(bcmolt_gpon_iwf_mac_table_mac_dropped_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_iwf_mac_table_mac_move_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_mac_table_mac_move_id_pack(bcmolt_gpon_iwf_mac_table_mac_move_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_iwf_mac_table_mac_move_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_mac_table_mac_move_id_unpack(bcmolt_gpon_iwf_mac_table_mac_move_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_iwf_mac_table_new_mac_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_mac_table_new_mac_id_pack(bcmolt_gpon_iwf_mac_table_new_mac_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_iwf_mac_table_new_mac_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_mac_table_new_mac_id_unpack(bcmolt_gpon_iwf_mac_table_new_mac_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_iwf_scan_mac_table_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_scan_mac_table_completed_id_pack(bcmolt_gpon_iwf_scan_mac_table_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_iwf_scan_mac_table_completed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_scan_mac_table_completed_id_unpack(bcmolt_gpon_iwf_scan_mac_table_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_iwf_scan_mac_table_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_scan_mac_table_id_pack(bcmolt_gpon_iwf_scan_mac_table_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_iwf_scan_mac_table_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_scan_mac_table_id_unpack(bcmolt_gpon_iwf_scan_mac_table_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_iwf_stat_alarm_cleared_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_stat_alarm_cleared_id_pack(bcmolt_gpon_iwf_stat_alarm_cleared_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_iwf_stat_alarm_cleared_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_stat_alarm_cleared_id_unpack(bcmolt_gpon_iwf_stat_alarm_cleared_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_iwf_stat_alarm_raised_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_stat_alarm_raised_id_pack(bcmolt_gpon_iwf_stat_alarm_raised_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_iwf_stat_alarm_raised_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_stat_alarm_raised_id_unpack(bcmolt_gpon_iwf_stat_alarm_raised_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_iwf_stat_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_stat_cfg_id_pack(bcmolt_gpon_iwf_stat_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_iwf_stat_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_stat_cfg_id_unpack(bcmolt_gpon_iwf_stat_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_iwf_stat_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_stat_id_pack(bcmolt_gpon_iwf_stat_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_iwf_stat_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_stat_id_unpack(bcmolt_gpon_iwf_stat_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_iwf_us_flow_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_us_flow_cfg_id_pack(bcmolt_gpon_iwf_us_flow_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_iwf_us_flow_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_us_flow_cfg_id_unpack(bcmolt_gpon_iwf_us_flow_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_iwf_us_flow_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_us_flow_key_id_pack(bcmolt_gpon_iwf_us_flow_key_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_iwf_us_flow_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_iwf_us_flow_key_id_unpack(bcmolt_gpon_iwf_us_flow_key_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_key_exchange_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_key_exchange_mode_pack(bcmolt_key_exchange_mode this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_key_exchange_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_key_exchange_mode_unpack(bcmolt_key_exchange_mode *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_ni_activate_all_onus_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_activate_all_onus_completed_id_pack(bcmolt_gpon_ni_activate_all_onus_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_ni_activate_all_onus_completed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_activate_all_onus_completed_id_unpack(bcmolt_gpon_ni_activate_all_onus_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_ni_auto_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_auto_cfg_id_pack(bcmolt_gpon_ni_auto_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_ni_auto_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_auto_cfg_id_unpack(bcmolt_gpon_ni_auto_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_ni_broadcast_ploam_packet_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_broadcast_ploam_packet_id_pack(bcmolt_gpon_ni_broadcast_ploam_packet_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_ni_broadcast_ploam_packet_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_broadcast_ploam_packet_id_unpack(bcmolt_gpon_ni_broadcast_ploam_packet_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_ni_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_cfg_id_pack(bcmolt_gpon_ni_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_ni_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_cfg_id_unpack(bcmolt_gpon_ni_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_ni_cpu_packets_failure_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_cpu_packets_failure_id_pack(bcmolt_gpon_ni_cpu_packets_failure_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_ni_cpu_packets_failure_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_cpu_packets_failure_id_unpack(bcmolt_gpon_ni_cpu_packets_failure_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_ni_cpu_packets_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_cpu_packets_id_pack(bcmolt_gpon_ni_cpu_packets_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_ni_cpu_packets_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_cpu_packets_id_unpack(bcmolt_gpon_ni_cpu_packets_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_ni_deactivate_all_onus_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_deactivate_all_onus_completed_id_pack(bcmolt_gpon_ni_deactivate_all_onus_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_ni_deactivate_all_onus_completed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_deactivate_all_onus_completed_id_unpack(bcmolt_gpon_ni_deactivate_all_onus_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_ni_disable_all_onus_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_disable_all_onus_completed_id_pack(bcmolt_gpon_ni_disable_all_onus_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_ni_disable_all_onus_completed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_disable_all_onus_completed_id_unpack(bcmolt_gpon_ni_disable_all_onus_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_ni_disable_serial_number_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_disable_serial_number_id_pack(bcmolt_gpon_ni_disable_serial_number_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_ni_disable_serial_number_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_disable_serial_number_id_unpack(bcmolt_gpon_ni_disable_serial_number_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_ni_enable_all_onus_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_enable_all_onus_completed_id_pack(bcmolt_gpon_ni_enable_all_onus_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_ni_enable_all_onus_completed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_enable_all_onus_completed_id_unpack(bcmolt_gpon_ni_enable_all_onus_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_ni_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_key_id_pack(bcmolt_gpon_ni_key_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_ni_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_key_id_unpack(bcmolt_gpon_ni_key_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_ni_los_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_los_id_pack(bcmolt_gpon_ni_los_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_ni_los_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_los_id_unpack(bcmolt_gpon_ni_los_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_ni_onu_discovered_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_onu_discovered_id_pack(bcmolt_gpon_ni_onu_discovered_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_ni_onu_discovered_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_onu_discovered_id_unpack(bcmolt_gpon_ni_onu_discovered_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_ni_onu_upgrade_complete_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_onu_upgrade_complete_id_pack(bcmolt_gpon_ni_onu_upgrade_complete_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_ni_onu_upgrade_complete_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_onu_upgrade_complete_id_unpack(bcmolt_gpon_ni_onu_upgrade_complete_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_ni_protection_switching_onus_ranged_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_protection_switching_onus_ranged_id_pack(bcmolt_gpon_ni_protection_switching_onus_ranged_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_ni_protection_switching_onus_ranged_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_protection_switching_onus_ranged_id_unpack(bcmolt_gpon_ni_protection_switching_onus_ranged_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_ni_protection_switching_switchover_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_protection_switching_switchover_completed_id_pack(bcmolt_gpon_ni_protection_switching_switchover_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_ni_protection_switching_switchover_completed_id from 
+ * bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_protection_switching_switchover_completed_id_unpack(bcmolt_gpon_ni_protection_switching_switchover_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_ni_protection_switching_traffic_resume_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_protection_switching_traffic_resume_id_pack(bcmolt_gpon_ni_protection_switching_traffic_resume_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_ni_protection_switching_traffic_resume_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_protection_switching_traffic_resume_id_unpack(bcmolt_gpon_ni_protection_switching_traffic_resume_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_id 
+ * to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_id_pack(bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_id this, bcmolt_buf *buf);
+
+/** Unpacks a 
+ * bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_id from 
+ * bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_id_unpack(bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_ni_reset_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_reset_id_pack(bcmolt_gpon_ni_reset_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_ni_reset_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_reset_id_unpack(bcmolt_gpon_ni_reset_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_ni_rogue_detection_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_rogue_detection_completed_id_pack(bcmolt_gpon_ni_rogue_detection_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_ni_rogue_detection_completed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_rogue_detection_completed_id_unpack(bcmolt_gpon_ni_rogue_detection_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_ni_rogue_detection_window_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_rogue_detection_window_id_pack(bcmolt_gpon_ni_rogue_detection_window_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_ni_rogue_detection_window_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_rogue_detection_window_id_unpack(bcmolt_gpon_ni_rogue_detection_window_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_ni_rogue_onu_special_map_cycle_start_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_rogue_onu_special_map_cycle_start_id_pack(bcmolt_gpon_ni_rogue_onu_special_map_cycle_start_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_ni_rogue_onu_special_map_cycle_start_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_rogue_onu_special_map_cycle_start_id_unpack(bcmolt_gpon_ni_rogue_onu_special_map_cycle_start_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_ni_serial_number_acquisition_cycle_start_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_serial_number_acquisition_cycle_start_id_pack(bcmolt_gpon_ni_serial_number_acquisition_cycle_start_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_ni_serial_number_acquisition_cycle_start_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_serial_number_acquisition_cycle_start_id_unpack(bcmolt_gpon_ni_serial_number_acquisition_cycle_start_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_ni_set_onu_state_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_set_onu_state_id_pack(bcmolt_gpon_ni_set_onu_state_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_ni_set_onu_state_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_set_onu_state_id_unpack(bcmolt_gpon_ni_set_onu_state_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_ni_set_pon_state_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_set_pon_state_id_pack(bcmolt_gpon_ni_set_pon_state_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_ni_set_pon_state_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_set_pon_state_id_unpack(bcmolt_gpon_ni_set_pon_state_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_ni_single_request_standby_pon_monitoring_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_single_request_standby_pon_monitoring_id_pack(bcmolt_gpon_ni_single_request_standby_pon_monitoring_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_ni_single_request_standby_pon_monitoring_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_single_request_standby_pon_monitoring_id_unpack(bcmolt_gpon_ni_single_request_standby_pon_monitoring_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_id_pack(bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_id from 
+ * bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_id_unpack(bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_ni_start_onu_upgrade_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_start_onu_upgrade_id_pack(bcmolt_gpon_ni_start_onu_upgrade_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_ni_start_onu_upgrade_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_start_onu_upgrade_id_unpack(bcmolt_gpon_ni_start_onu_upgrade_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_ni_stat_alarm_cleared_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_stat_alarm_cleared_id_pack(bcmolt_gpon_ni_stat_alarm_cleared_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_ni_stat_alarm_cleared_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_stat_alarm_cleared_id_unpack(bcmolt_gpon_ni_stat_alarm_cleared_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_ni_stat_alarm_raised_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_stat_alarm_raised_id_pack(bcmolt_gpon_ni_stat_alarm_raised_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_ni_stat_alarm_raised_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_stat_alarm_raised_id_unpack(bcmolt_gpon_ni_stat_alarm_raised_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_ni_stat_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_stat_cfg_id_pack(bcmolt_gpon_ni_stat_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_ni_stat_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_stat_cfg_id_unpack(bcmolt_gpon_ni_stat_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_ni_stat_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_stat_id_pack(bcmolt_gpon_ni_stat_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_ni_stat_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_stat_id_unpack(bcmolt_gpon_ni_stat_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_ni_state_change_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_state_change_completed_id_pack(bcmolt_gpon_ni_state_change_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_ni_state_change_completed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_state_change_completed_id_unpack(bcmolt_gpon_ni_state_change_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_ni_tod_request_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_tod_request_completed_id_pack(bcmolt_gpon_ni_tod_request_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_ni_tod_request_completed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_tod_request_completed_id_unpack(bcmolt_gpon_ni_tod_request_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_ni_tod_request_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_tod_request_id_pack(bcmolt_gpon_ni_tod_request_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_ni_tod_request_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_ni_tod_request_id_unpack(bcmolt_gpon_ni_tod_request_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_auto_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_auto_cfg_id_pack(bcmolt_gpon_onu_auto_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_auto_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_auto_cfg_id_unpack(bcmolt_gpon_onu_auto_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_ber_interval_configuration_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_ber_interval_configuration_completed_id_pack(bcmolt_gpon_onu_ber_interval_configuration_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_ber_interval_configuration_completed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_ber_interval_configuration_completed_id_unpack(bcmolt_gpon_onu_ber_interval_configuration_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_cfg_id_pack(bcmolt_gpon_onu_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_cfg_id_unpack(bcmolt_gpon_onu_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_change_power_level_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_change_power_level_id_pack(bcmolt_gpon_onu_change_power_level_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_change_power_level_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_change_power_level_id_unpack(bcmolt_gpon_onu_change_power_level_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_cpu_packet_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_cpu_packet_id_pack(bcmolt_gpon_onu_cpu_packet_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_cpu_packet_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_cpu_packet_id_unpack(bcmolt_gpon_onu_cpu_packet_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_cpu_packets_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_cpu_packets_id_pack(bcmolt_gpon_onu_cpu_packets_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_cpu_packets_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_cpu_packets_id_unpack(bcmolt_gpon_onu_cpu_packets_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_dfi_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_dfi_id_pack(bcmolt_gpon_onu_dfi_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_dfi_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_dfi_id_unpack(bcmolt_gpon_onu_dfi_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_dgi_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_dgi_id_pack(bcmolt_gpon_onu_dgi_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_dgi_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_dgi_id_unpack(bcmolt_gpon_onu_dgi_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_dowi_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_dowi_id_pack(bcmolt_gpon_onu_dowi_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_dowi_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_dowi_id_unpack(bcmolt_gpon_onu_dowi_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_err_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_err_id_pack(bcmolt_gpon_onu_err_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_err_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_err_id_unpack(bcmolt_gpon_onu_err_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_invalid_dbru_report_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_invalid_dbru_report_id_pack(bcmolt_gpon_onu_invalid_dbru_report_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_invalid_dbru_report_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_invalid_dbru_report_id_unpack(bcmolt_gpon_onu_invalid_dbru_report_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_key_exchange_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_key_exchange_completed_id_pack(bcmolt_gpon_onu_key_exchange_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_key_exchange_completed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_key_exchange_completed_id_unpack(bcmolt_gpon_onu_key_exchange_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_key_exchange_cycle_skipped_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_key_exchange_cycle_skipped_id_pack(bcmolt_gpon_onu_key_exchange_cycle_skipped_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_key_exchange_cycle_skipped_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_key_exchange_cycle_skipped_id_unpack(bcmolt_gpon_onu_key_exchange_cycle_skipped_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_key_exchange_decrypt_required_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_key_exchange_decrypt_required_id_pack(bcmolt_gpon_onu_key_exchange_decrypt_required_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_key_exchange_decrypt_required_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_key_exchange_decrypt_required_id_unpack(bcmolt_gpon_onu_key_exchange_decrypt_required_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_key_exchange_key_mismatch_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_key_exchange_key_mismatch_id_pack(bcmolt_gpon_onu_key_exchange_key_mismatch_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_key_exchange_key_mismatch_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_key_exchange_key_mismatch_id_unpack(bcmolt_gpon_onu_key_exchange_key_mismatch_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_key_exchange_key_request_timeout_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_key_exchange_key_request_timeout_id_pack(bcmolt_gpon_onu_key_exchange_key_request_timeout_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_key_exchange_key_request_timeout_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_key_exchange_key_request_timeout_id_unpack(bcmolt_gpon_onu_key_exchange_key_request_timeout_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_key_exchange_unconsecutive_index_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_key_exchange_unconsecutive_index_id_pack(bcmolt_gpon_onu_key_exchange_unconsecutive_index_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_key_exchange_unconsecutive_index_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_key_exchange_unconsecutive_index_id_unpack(bcmolt_gpon_onu_key_exchange_unconsecutive_index_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_key_id_pack(bcmolt_gpon_onu_key_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_key_id_unpack(bcmolt_gpon_onu_key_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_loai_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_loai_id_pack(bcmolt_gpon_onu_loai_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_loai_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_loai_id_unpack(bcmolt_gpon_onu_loai_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_loki_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_loki_id_pack(bcmolt_gpon_onu_loki_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_loki_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_loki_id_unpack(bcmolt_gpon_onu_loki_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_memi_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_memi_id_pack(bcmolt_gpon_onu_memi_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_memi_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_memi_id_unpack(bcmolt_gpon_onu_memi_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_omci_packet_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_omci_packet_id_pack(bcmolt_gpon_onu_omci_packet_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_omci_packet_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_omci_packet_id_unpack(bcmolt_gpon_onu_omci_packet_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_omci_port_id_configuration_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_omci_port_id_configuration_completed_id_pack(bcmolt_gpon_onu_omci_port_id_configuration_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_omci_port_id_configuration_completed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_omci_port_id_configuration_completed_id_unpack(bcmolt_gpon_onu_omci_port_id_configuration_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_onu_activation_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_onu_activation_completed_id_pack(bcmolt_gpon_onu_onu_activation_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_onu_activation_completed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_onu_activation_completed_id_unpack(bcmolt_gpon_onu_onu_activation_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_onu_activation_standby_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_onu_activation_standby_completed_id_pack(bcmolt_gpon_onu_onu_activation_standby_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_onu_activation_standby_completed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_onu_activation_standby_completed_id_unpack(bcmolt_gpon_onu_onu_activation_standby_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_onu_alarm_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_onu_alarm_id_pack(bcmolt_gpon_onu_onu_alarm_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_onu_alarm_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_onu_alarm_id_unpack(bcmolt_gpon_onu_onu_alarm_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_onu_deactivation_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_onu_deactivation_completed_id_pack(bcmolt_gpon_onu_onu_deactivation_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_onu_deactivation_completed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_onu_deactivation_completed_id_unpack(bcmolt_gpon_onu_onu_deactivation_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_onu_disable_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_onu_disable_completed_id_pack(bcmolt_gpon_onu_onu_disable_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_onu_disable_completed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_onu_disable_completed_id_unpack(bcmolt_gpon_onu_onu_disable_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_onu_enable_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_onu_enable_completed_id_pack(bcmolt_gpon_onu_onu_enable_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_onu_enable_completed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_onu_enable_completed_id_unpack(bcmolt_gpon_onu_onu_enable_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_optical_reflection_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_optical_reflection_id_pack(bcmolt_gpon_onu_optical_reflection_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_optical_reflection_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_optical_reflection_id_unpack(bcmolt_gpon_onu_optical_reflection_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_password_authentication_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_password_authentication_completed_id_pack(bcmolt_gpon_onu_password_authentication_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_password_authentication_completed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_password_authentication_completed_id_unpack(bcmolt_gpon_onu_password_authentication_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_pee_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_pee_id_pack(bcmolt_gpon_onu_pee_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_pee_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_pee_id_unpack(bcmolt_gpon_onu_pee_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_ploam_packet_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_ploam_packet_id_pack(bcmolt_gpon_onu_ploam_packet_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_ploam_packet_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_ploam_packet_id_unpack(bcmolt_gpon_onu_ploam_packet_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_possible_drift_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_possible_drift_id_pack(bcmolt_gpon_onu_possible_drift_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_possible_drift_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_possible_drift_id_unpack(bcmolt_gpon_onu_possible_drift_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_power_management_state_change_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_power_management_state_change_id_pack(bcmolt_gpon_onu_power_management_state_change_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_power_management_state_change_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_power_management_state_change_id_unpack(bcmolt_gpon_onu_power_management_state_change_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_pst_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_pst_id_pack(bcmolt_gpon_onu_pst_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_pst_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_pst_id_unpack(bcmolt_gpon_onu_pst_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_ranging_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_ranging_completed_id_pack(bcmolt_gpon_onu_ranging_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_ranging_completed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_ranging_completed_id_unpack(bcmolt_gpon_onu_ranging_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_rei_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_rei_id_pack(bcmolt_gpon_onu_rei_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_rei_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_rei_id_unpack(bcmolt_gpon_onu_rei_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_rssi_measurement_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_rssi_measurement_completed_id_pack(bcmolt_gpon_onu_rssi_measurement_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_rssi_measurement_completed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_rssi_measurement_completed_id_unpack(bcmolt_gpon_onu_rssi_measurement_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_rssi_measurement_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_rssi_measurement_id_pack(bcmolt_gpon_onu_rssi_measurement_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_rssi_measurement_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_rssi_measurement_id_unpack(bcmolt_gpon_onu_rssi_measurement_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_sdi_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_sdi_id_pack(bcmolt_gpon_onu_sdi_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_sdi_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_sdi_id_unpack(bcmolt_gpon_onu_sdi_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_set_onu_state_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_set_onu_state_id_pack(bcmolt_gpon_onu_set_onu_state_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_set_onu_state_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_set_onu_state_id_unpack(bcmolt_gpon_onu_set_onu_state_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_sfi_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_sfi_id_pack(bcmolt_gpon_onu_sfi_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_sfi_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_sfi_id_unpack(bcmolt_gpon_onu_sfi_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_stat_alarm_cleared_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_stat_alarm_cleared_id_pack(bcmolt_gpon_onu_stat_alarm_cleared_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_stat_alarm_cleared_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_stat_alarm_cleared_id_unpack(bcmolt_gpon_onu_stat_alarm_cleared_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_stat_alarm_raised_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_stat_alarm_raised_id_pack(bcmolt_gpon_onu_stat_alarm_raised_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_stat_alarm_raised_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_stat_alarm_raised_id_unpack(bcmolt_gpon_onu_stat_alarm_raised_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_stat_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_stat_cfg_id_pack(bcmolt_gpon_onu_stat_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_stat_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_stat_cfg_id_unpack(bcmolt_gpon_onu_stat_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_stat_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_stat_id_pack(bcmolt_gpon_onu_stat_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_stat_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_stat_id_unpack(bcmolt_gpon_onu_stat_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_sufi_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_sufi_id_pack(bcmolt_gpon_onu_sufi_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_sufi_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_sufi_id_unpack(bcmolt_gpon_onu_sufi_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_tiwi_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_tiwi_id_pack(bcmolt_gpon_onu_tiwi_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_tiwi_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_tiwi_id_unpack(bcmolt_gpon_onu_tiwi_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_omci_device_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_omci_device_id_pack(bcmolt_omci_device_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_omci_device_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_omci_device_id_unpack(bcmolt_omci_device_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_onu_upgrade_return_code to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_upgrade_return_code_pack(bcmolt_gpon_onu_upgrade_return_code this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_upgrade_return_code from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_onu_upgrade_return_code_unpack(bcmolt_gpon_onu_upgrade_return_code *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_omci_result_code to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_omci_result_code_pack(bcmolt_omci_result_code this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_omci_result_code from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_omci_result_code_unpack(bcmolt_omci_result_code *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_onu_state to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_onu_state_pack(bcmolt_onu_state this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_onu_state from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_onu_state_unpack(bcmolt_onu_state *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_rssi_location_sign to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_rssi_location_sign_pack(bcmolt_rssi_location_sign this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_rssi_location_sign from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_rssi_location_sign_unpack(bcmolt_rssi_location_sign *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_onu_post_discovery_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_onu_post_discovery_mode_pack(bcmolt_onu_post_discovery_mode this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_onu_post_discovery_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_onu_post_discovery_mode_unpack(bcmolt_onu_post_discovery_mode *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_trx_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_trx_cfg_id_pack(bcmolt_gpon_trx_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_trx_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_trx_cfg_id_unpack(bcmolt_gpon_trx_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_gpon_trx_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_gpon_trx_key_id_pack(bcmolt_gpon_trx_key_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_trx_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_gpon_trx_key_id_unpack(bcmolt_gpon_trx_key_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_image_transfer_status to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_image_transfer_status_pack(bcmolt_image_transfer_status this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_image_transfer_status from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_image_transfer_status_unpack(bcmolt_image_transfer_status *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_iwf_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_iwf_mode_pack(bcmolt_iwf_mode this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_iwf_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_iwf_mode_unpack(bcmolt_iwf_mode *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_log_entry_auto_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_log_entry_auto_cfg_id_pack(bcmolt_log_entry_auto_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_log_entry_auto_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_log_entry_auto_cfg_id_unpack(bcmolt_log_entry_auto_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_log_entry_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_log_entry_cfg_id_pack(bcmolt_log_entry_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_log_entry_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_log_entry_cfg_id_unpack(bcmolt_log_entry_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_log_entry_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_log_entry_key_id_pack(bcmolt_log_entry_key_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_log_entry_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_log_entry_key_id_unpack(bcmolt_log_entry_key_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_log_entry_stat_alarm_cleared_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_log_entry_stat_alarm_cleared_id_pack(bcmolt_log_entry_stat_alarm_cleared_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_log_entry_stat_alarm_cleared_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_log_entry_stat_alarm_cleared_id_unpack(bcmolt_log_entry_stat_alarm_cleared_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_log_entry_stat_alarm_raised_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_log_entry_stat_alarm_raised_id_pack(bcmolt_log_entry_stat_alarm_raised_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_log_entry_stat_alarm_raised_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_log_entry_stat_alarm_raised_id_unpack(bcmolt_log_entry_stat_alarm_raised_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_log_entry_stat_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_log_entry_stat_cfg_id_pack(bcmolt_log_entry_stat_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_log_entry_stat_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_log_entry_stat_cfg_id_unpack(bcmolt_log_entry_stat_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_log_entry_stat_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_log_entry_stat_id_pack(bcmolt_log_entry_stat_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_log_entry_stat_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_log_entry_stat_id_unpack(bcmolt_log_entry_stat_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_log_file_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_log_file_id_pack(bcmolt_log_file_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_log_file_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_log_file_id_unpack(bcmolt_log_file_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_log_level to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_log_level_pack(bcmolt_log_level this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_log_level from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_log_level_unpack(bcmolt_log_level *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_log_style to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_log_style_pack(bcmolt_log_style this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_log_style from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_log_style_unpack(bcmolt_log_style *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_log_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_log_type_pack(bcmolt_log_type this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_log_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_log_type_unpack(bcmolt_log_type *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_logger_auto_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_logger_auto_cfg_id_pack(bcmolt_logger_auto_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_logger_auto_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_logger_auto_cfg_id_unpack(bcmolt_logger_auto_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_logger_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_logger_cfg_id_pack(bcmolt_logger_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_logger_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_logger_cfg_id_unpack(bcmolt_logger_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_logger_clear_log_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_logger_clear_log_id_pack(bcmolt_logger_clear_log_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_logger_clear_log_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_logger_clear_log_id_unpack(bcmolt_logger_clear_log_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_logger_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_logger_key_id_pack(bcmolt_logger_key_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_logger_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_logger_key_id_unpack(bcmolt_logger_key_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_logger_stat_alarm_cleared_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_logger_stat_alarm_cleared_id_pack(bcmolt_logger_stat_alarm_cleared_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_logger_stat_alarm_cleared_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_logger_stat_alarm_cleared_id_unpack(bcmolt_logger_stat_alarm_cleared_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_logger_stat_alarm_raised_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_logger_stat_alarm_raised_id_pack(bcmolt_logger_stat_alarm_raised_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_logger_stat_alarm_raised_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_logger_stat_alarm_raised_id_unpack(bcmolt_logger_stat_alarm_raised_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_logger_stat_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_logger_stat_cfg_id_pack(bcmolt_logger_stat_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_logger_stat_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_logger_stat_cfg_id_unpack(bcmolt_logger_stat_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_logger_stat_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_logger_stat_id_pack(bcmolt_logger_stat_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_logger_stat_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_logger_stat_id_unpack(bcmolt_logger_stat_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_mac_table_miss_fallback to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_mac_table_miss_fallback_pack(bcmolt_mac_table_miss_fallback this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_mac_table_miss_fallback from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_mac_table_miss_fallback_unpack(bcmolt_mac_table_miss_fallback *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_mac_table_learning_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_mac_table_learning_mode_pack(bcmolt_mac_table_learning_mode this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_mac_table_learning_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_mac_table_learning_mode_unpack(bcmolt_mac_table_learning_mode *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_mapping_tag_method to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_mapping_tag_method_pack(bcmolt_mapping_tag_method this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_mapping_tag_method from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_mapping_tag_method_unpack(bcmolt_mapping_tag_method *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_nni_auto_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_nni_auto_cfg_id_pack(bcmolt_nni_auto_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_nni_auto_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_nni_auto_cfg_id_unpack(bcmolt_nni_auto_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_nni_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_nni_cfg_id_pack(bcmolt_nni_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_nni_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_nni_cfg_id_unpack(bcmolt_nni_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_nni_connection to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_nni_connection_pack(bcmolt_nni_connection this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_nni_connection from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_nni_connection_unpack(bcmolt_nni_connection *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_nni_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_nni_key_id_pack(bcmolt_nni_key_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_nni_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_nni_key_id_unpack(bcmolt_nni_key_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_trivalent to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_trivalent_pack(bcmolt_trivalent this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_trivalent from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_trivalent_unpack(bcmolt_trivalent *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_nni_serdes_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_nni_serdes_cfg_id_pack(bcmolt_nni_serdes_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_nni_serdes_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_nni_serdes_cfg_id_unpack(bcmolt_nni_serdes_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_nni_serdes_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_nni_serdes_key_id_pack(bcmolt_nni_serdes_key_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_nni_serdes_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_nni_serdes_key_id_unpack(bcmolt_nni_serdes_key_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_nni_stat_alarm_cleared_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_nni_stat_alarm_cleared_id_pack(bcmolt_nni_stat_alarm_cleared_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_nni_stat_alarm_cleared_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_nni_stat_alarm_cleared_id_unpack(bcmolt_nni_stat_alarm_cleared_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_nni_stat_alarm_raised_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_nni_stat_alarm_raised_id_pack(bcmolt_nni_stat_alarm_raised_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_nni_stat_alarm_raised_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_nni_stat_alarm_raised_id_unpack(bcmolt_nni_stat_alarm_raised_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_nni_stat_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_nni_stat_cfg_id_pack(bcmolt_nni_stat_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_nni_stat_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_nni_stat_cfg_id_unpack(bcmolt_nni_stat_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_nni_stat_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_nni_stat_id_pack(bcmolt_nni_stat_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_nni_stat_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_nni_stat_id_unpack(bcmolt_nni_stat_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_nni_status_changed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_nni_status_changed_id_pack(bcmolt_nni_status_changed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_nni_status_changed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_nni_status_changed_id_unpack(bcmolt_nni_status_changed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_odn_class to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_odn_class_pack(bcmolt_odn_class this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_odn_class from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_odn_class_unpack(bcmolt_odn_class *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_omci_port_id_operation to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_omci_port_id_operation_pack(bcmolt_omci_port_id_operation this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_omci_port_id_operation from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_omci_port_id_operation_unpack(bcmolt_omci_port_id_operation *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_onu_operation to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_onu_operation_pack(bcmolt_onu_operation this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_onu_operation from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_onu_operation_unpack(bcmolt_onu_operation *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_onu_power_level to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_onu_power_level_pack(bcmolt_onu_power_level this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_onu_power_level from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_onu_power_level_unpack(bcmolt_onu_power_level *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_tc_protocol to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_tc_protocol_pack(bcmolt_tc_protocol this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_tc_protocol from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_tc_protocol_unpack(bcmolt_tc_protocol *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_packet_injection_error to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_packet_injection_error_pack(bcmolt_packet_injection_error this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_packet_injection_error from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_packet_injection_error_unpack(bcmolt_packet_injection_error *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_packet_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_packet_type_pack(bcmolt_packet_type this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_packet_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_packet_type_unpack(bcmolt_packet_type *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_password_authentication_fail_reason to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_password_authentication_fail_reason_pack(bcmolt_password_authentication_fail_reason this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_password_authentication_fail_reason from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_password_authentication_fail_reason_unpack(bcmolt_password_authentication_fail_reason *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_polarity to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_polarity_pack(bcmolt_polarity this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_polarity from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_polarity_unpack(bcmolt_polarity *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_polling_interval to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_polling_interval_pack(bcmolt_polling_interval this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_polling_interval from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_polling_interval_unpack(bcmolt_polling_interval *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_pon_operation to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_pon_operation_pack(bcmolt_pon_operation this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_pon_operation from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_pon_operation_unpack(bcmolt_pon_operation *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_pon_protection_switching_options to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_pon_protection_switching_options_pack(bcmolt_pon_protection_switching_options this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_pon_protection_switching_options from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_pon_protection_switching_options_unpack(bcmolt_pon_protection_switching_options *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_pon_state to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_pon_state_pack(bcmolt_pon_state this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_pon_state from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_pon_state_unpack(bcmolt_pon_state *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_power_levelling_control to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_power_levelling_control_pack(bcmolt_power_levelling_control this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_power_levelling_control from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_power_levelling_control_unpack(bcmolt_power_levelling_control *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_power_management_transition_reason to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_power_management_transition_reason_pack(bcmolt_power_management_transition_reason this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_power_management_transition_reason from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_power_management_transition_reason_unpack(bcmolt_power_management_transition_reason *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_prbs_polynomial to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_prbs_polynomial_pack(bcmolt_prbs_polynomial this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_prbs_polynomial from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_prbs_polynomial_unpack(bcmolt_prbs_polynomial *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_prbs_checker_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_prbs_checker_mode_pack(bcmolt_prbs_checker_mode this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_prbs_checker_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_prbs_checker_mode_unpack(bcmolt_prbs_checker_mode *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_prbs_lock_state to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_prbs_lock_state_pack(bcmolt_prbs_lock_state this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_prbs_lock_state from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_prbs_lock_state_unpack(bcmolt_prbs_lock_state *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_raman_mitigation_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_raman_mitigation_mode_pack(bcmolt_raman_mitigation_mode this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_raman_mitigation_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_raman_mitigation_mode_unpack(bcmolt_raman_mitigation_mode *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_ranging_fail_reason to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_ranging_fail_reason_pack(bcmolt_ranging_fail_reason this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_ranging_fail_reason from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_ranging_fail_reason_unpack(bcmolt_ranging_fail_reason *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_registration_behavior to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_registration_behavior_pack(bcmolt_registration_behavior this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_registration_behavior from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_registration_behavior_unpack(bcmolt_registration_behavior *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_request_registration_fail_reason to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_request_registration_fail_reason_pack(bcmolt_request_registration_fail_reason this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_request_registration_fail_reason from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_request_registration_fail_reason_unpack(bcmolt_request_registration_fail_reason *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_result to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_result_pack(bcmolt_result this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_result from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_result_unpack(bcmolt_result *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_rogue_detection_algorithm_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_rogue_detection_algorithm_type_pack(bcmolt_rogue_detection_algorithm_type this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_rogue_detection_algorithm_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_rogue_detection_algorithm_type_unpack(bcmolt_rogue_detection_algorithm_type *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_rogue_detection_window to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_rogue_detection_window_pack(bcmolt_rogue_detection_window this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_rogue_detection_window from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_rogue_detection_window_unpack(bcmolt_rogue_detection_window *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_rogue_measurement_result to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_rogue_measurement_result_pack(bcmolt_rogue_measurement_result this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_rogue_measurement_result from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_rogue_measurement_result_unpack(bcmolt_rogue_measurement_result *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_rogue_scan_status to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_rogue_scan_status_pack(bcmolt_rogue_scan_status this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_rogue_scan_status from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_rogue_scan_status_unpack(bcmolt_rogue_scan_status *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_rssi_measurement_fail_reason to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_rssi_measurement_fail_reason_pack(bcmolt_rssi_measurement_fail_reason this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_rssi_measurement_fail_reason from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_rssi_measurement_fail_reason_unpack(bcmolt_rssi_measurement_fail_reason *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_secure_mutual_authentication_fail_reason to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_secure_mutual_authentication_fail_reason_pack(bcmolt_secure_mutual_authentication_fail_reason this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_secure_mutual_authentication_fail_reason from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_secure_mutual_authentication_fail_reason_unpack(bcmolt_secure_mutual_authentication_fail_reason *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_serdes_ranging_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_serdes_ranging_mode_pack(bcmolt_serdes_ranging_mode this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_serdes_ranging_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_serdes_ranging_mode_unpack(bcmolt_serdes_ranging_mode *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_serdes_instance to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_serdes_instance_pack(bcmolt_serdes_instance this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_serdes_instance from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_serdes_instance_unpack(bcmolt_serdes_instance *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_shaper_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_shaper_mode_pack(bcmolt_shaper_mode this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_shaper_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_shaper_mode_unpack(bcmolt_shaper_mode *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_software_error_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_software_error_cfg_id_pack(bcmolt_software_error_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_software_error_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_software_error_cfg_id_unpack(bcmolt_software_error_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_software_error_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_software_error_key_id_pack(bcmolt_software_error_key_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_software_error_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_software_error_key_id_unpack(bcmolt_software_error_key_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_stat_condition_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_stat_condition_type_pack(bcmolt_stat_condition_type this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_stat_condition_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_stat_condition_type_unpack(bcmolt_stat_condition_type *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_switch_over_type_c_onu_state to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_switch_over_type_c_onu_state_pack(bcmolt_switch_over_type_c_onu_state this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_switch_over_type_c_onu_state from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_switch_over_type_c_onu_state_unpack(bcmolt_switch_over_type_c_onu_state *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_system_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_system_mode_pack(bcmolt_system_mode this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_system_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_system_mode_unpack(bcmolt_system_mode *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_us_operating_wavelength_bands to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_us_operating_wavelength_bands_pack(bcmolt_us_operating_wavelength_bands this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_us_operating_wavelength_bands from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_us_operating_wavelength_bands_unpack(bcmolt_us_operating_wavelength_bands *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_traffic_resume_result to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_traffic_resume_result_pack(bcmolt_traffic_resume_result this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_traffic_resume_result from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_traffic_resume_result_unpack(bcmolt_traffic_resume_result *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_trx_calibration_auto_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_trx_calibration_auto_cfg_id_pack(bcmolt_trx_calibration_auto_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_trx_calibration_auto_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_trx_calibration_auto_cfg_id_unpack(bcmolt_trx_calibration_auto_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_trx_calibration_capture_window_and_statistic_completed_id to 
+ * bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_trx_calibration_capture_window_and_statistic_completed_id_pack(bcmolt_trx_calibration_capture_window_and_statistic_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_trx_calibration_capture_window_and_statistic_completed_id 
+ * from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_trx_calibration_capture_window_and_statistic_completed_id_unpack(bcmolt_trx_calibration_capture_window_and_statistic_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_trx_calibration_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_trx_calibration_key_id_pack(bcmolt_trx_calibration_key_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_trx_calibration_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_trx_calibration_key_id_unpack(bcmolt_trx_calibration_key_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_trx_calibration_start_capture_window_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_trx_calibration_start_capture_window_id_pack(bcmolt_trx_calibration_start_capture_window_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_trx_calibration_start_capture_window_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_trx_calibration_start_capture_window_id_unpack(bcmolt_trx_calibration_start_capture_window_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_trx_calibration_stop_capture_window_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_trx_calibration_stop_capture_window_id_pack(bcmolt_trx_calibration_stop_capture_window_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_trx_calibration_stop_capture_window_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_trx_calibration_stop_capture_window_id_unpack(bcmolt_trx_calibration_stop_capture_window_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_trx_calibration_trigger to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_trx_calibration_trigger_pack(bcmolt_trx_calibration_trigger this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_trx_calibration_trigger from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_trx_calibration_trigger_unpack(bcmolt_trx_calibration_trigger *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_trx_calibration_trigger_position to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_trx_calibration_trigger_position_pack(bcmolt_trx_calibration_trigger_position this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_trx_calibration_trigger_position from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_trx_calibration_trigger_position_unpack(bcmolt_trx_calibration_trigger_position *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_trx_calibration_window_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_trx_calibration_window_mode_pack(bcmolt_trx_calibration_window_mode this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_trx_calibration_window_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_trx_calibration_window_mode_unpack(bcmolt_trx_calibration_window_mode *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_trx_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_trx_type_pack(bcmolt_trx_type this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_trx_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_trx_type_unpack(bcmolt_trx_type *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_tune_in_fail_reason to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_tune_in_fail_reason_pack(bcmolt_tune_in_fail_reason this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_tune_in_fail_reason from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_tune_in_fail_reason_unpack(bcmolt_tune_in_fail_reason *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_tune_out_fail_reason to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_tune_out_fail_reason_pack(bcmolt_tune_out_fail_reason this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_tune_out_fail_reason from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_tune_out_fail_reason_unpack(bcmolt_tune_out_fail_reason *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_uart_baudrate to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_uart_baudrate_pack(bcmolt_uart_baudrate this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_uart_baudrate from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_uart_baudrate_unpack(bcmolt_uart_baudrate *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_us_gem_port_destination to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_us_gem_port_destination_pack(bcmolt_us_gem_port_destination this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_us_gem_port_destination from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_us_gem_port_destination_unpack(bcmolt_us_gem_port_destination *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_us_vlan_action to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_us_vlan_action_pack(bcmolt_us_vlan_action this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_us_vlan_action from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_us_vlan_action_unpack(bcmolt_us_vlan_action *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_vlan_to_flow_mapping_method to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_vlan_to_flow_mapping_method_pack(bcmolt_vlan_to_flow_mapping_method this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_vlan_to_flow_mapping_method from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_vlan_to_flow_mapping_method_unpack(bcmolt_vlan_to_flow_mapping_method *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_alloc_auto_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_alloc_auto_cfg_id_pack(bcmolt_xgpon_alloc_auto_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_alloc_auto_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_alloc_auto_cfg_id_unpack(bcmolt_xgpon_alloc_auto_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_alloc_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_alloc_cfg_id_pack(bcmolt_xgpon_alloc_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_alloc_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_alloc_cfg_id_unpack(bcmolt_xgpon_alloc_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_alloc_configuration_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_alloc_configuration_completed_id_pack(bcmolt_xgpon_alloc_configuration_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_alloc_configuration_completed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_alloc_configuration_completed_id_unpack(bcmolt_xgpon_alloc_configuration_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_alloc_get_alloc_stats_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_alloc_get_alloc_stats_completed_id_pack(bcmolt_xgpon_alloc_get_alloc_stats_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_alloc_get_alloc_stats_completed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_alloc_get_alloc_stats_completed_id_unpack(bcmolt_xgpon_alloc_get_alloc_stats_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_alloc_get_stats_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_alloc_get_stats_id_pack(bcmolt_xgpon_alloc_get_stats_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_alloc_get_stats_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_alloc_get_stats_id_unpack(bcmolt_xgpon_alloc_get_stats_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_alloc_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_alloc_key_id_pack(bcmolt_xgpon_alloc_key_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_alloc_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_alloc_key_id_unpack(bcmolt_xgpon_alloc_key_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_alloc_set_state_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_alloc_set_state_id_pack(bcmolt_xgpon_alloc_set_state_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_alloc_set_state_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_alloc_set_state_id_unpack(bcmolt_xgpon_alloc_set_state_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_alloc_stat_alarm_cleared_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_alloc_stat_alarm_cleared_id_pack(bcmolt_xgpon_alloc_stat_alarm_cleared_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_alloc_stat_alarm_cleared_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_alloc_stat_alarm_cleared_id_unpack(bcmolt_xgpon_alloc_stat_alarm_cleared_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_alloc_stat_alarm_raised_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_alloc_stat_alarm_raised_id_pack(bcmolt_xgpon_alloc_stat_alarm_raised_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_alloc_stat_alarm_raised_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_alloc_stat_alarm_raised_id_unpack(bcmolt_xgpon_alloc_stat_alarm_raised_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_alloc_stat_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_alloc_stat_cfg_id_pack(bcmolt_xgpon_alloc_stat_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_alloc_stat_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_alloc_stat_cfg_id_unpack(bcmolt_xgpon_alloc_stat_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_alloc_stat_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_alloc_stat_id_pack(bcmolt_xgpon_alloc_stat_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_alloc_stat_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_alloc_stat_id_unpack(bcmolt_xgpon_alloc_stat_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_gem_port_auto_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_auto_cfg_id_pack(bcmolt_xgpon_gem_port_auto_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_gem_port_auto_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_auto_cfg_id_unpack(bcmolt_xgpon_gem_port_auto_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_gem_port_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_cfg_id_pack(bcmolt_xgpon_gem_port_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_gem_port_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_cfg_id_unpack(bcmolt_xgpon_gem_port_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_gem_port_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_key_id_pack(bcmolt_xgpon_gem_port_key_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_gem_port_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_key_id_unpack(bcmolt_xgpon_gem_port_key_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_gem_port_stat_alarm_cleared_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_stat_alarm_cleared_id_pack(bcmolt_xgpon_gem_port_stat_alarm_cleared_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_gem_port_stat_alarm_cleared_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_stat_alarm_cleared_id_unpack(bcmolt_xgpon_gem_port_stat_alarm_cleared_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_gem_port_stat_alarm_raised_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_stat_alarm_raised_id_pack(bcmolt_xgpon_gem_port_stat_alarm_raised_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_gem_port_stat_alarm_raised_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_stat_alarm_raised_id_unpack(bcmolt_xgpon_gem_port_stat_alarm_raised_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_gem_port_stat_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_stat_cfg_id_pack(bcmolt_xgpon_gem_port_stat_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_gem_port_stat_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_stat_cfg_id_unpack(bcmolt_xgpon_gem_port_stat_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_gem_port_stat_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_stat_id_pack(bcmolt_xgpon_gem_port_stat_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_gem_port_stat_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_stat_id_unpack(bcmolt_xgpon_gem_port_stat_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_gem_port_state to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_state_pack(bcmolt_xgpon_gem_port_state this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_gem_port_state from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_state_unpack(bcmolt_xgpon_gem_port_state *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_iwf_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_iwf_cfg_id_pack(bcmolt_xgpon_iwf_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_iwf_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_iwf_cfg_id_unpack(bcmolt_xgpon_iwf_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_iwf_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_iwf_key_id_pack(bcmolt_xgpon_iwf_key_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_iwf_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_iwf_key_id_unpack(bcmolt_xgpon_iwf_key_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_ni_activate_all_onus_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_activate_all_onus_completed_id_pack(bcmolt_xgpon_ni_activate_all_onus_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_ni_activate_all_onus_completed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_activate_all_onus_completed_id_unpack(bcmolt_xgpon_ni_activate_all_onus_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_ni_adjust_tx_wavelength_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_adjust_tx_wavelength_id_pack(bcmolt_xgpon_ni_adjust_tx_wavelength_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_ni_adjust_tx_wavelength_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_adjust_tx_wavelength_id_unpack(bcmolt_xgpon_ni_adjust_tx_wavelength_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_ni_auto_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_auto_cfg_id_pack(bcmolt_xgpon_ni_auto_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_ni_auto_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_auto_cfg_id_unpack(bcmolt_xgpon_ni_auto_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_ni_broadcast_ploam_packet_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_broadcast_ploam_packet_id_pack(bcmolt_xgpon_ni_broadcast_ploam_packet_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_ni_broadcast_ploam_packet_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_broadcast_ploam_packet_id_unpack(bcmolt_xgpon_ni_broadcast_ploam_packet_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_ni_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_cfg_id_pack(bcmolt_xgpon_ni_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_ni_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_cfg_id_unpack(bcmolt_xgpon_ni_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_ni_cpu_packets_failure_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_cpu_packets_failure_id_pack(bcmolt_xgpon_ni_cpu_packets_failure_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_ni_cpu_packets_failure_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_cpu_packets_failure_id_unpack(bcmolt_xgpon_ni_cpu_packets_failure_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_ni_cpu_packets_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_cpu_packets_id_pack(bcmolt_xgpon_ni_cpu_packets_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_ni_cpu_packets_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_cpu_packets_id_unpack(bcmolt_xgpon_ni_cpu_packets_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_ni_deactivate_all_onus_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_deactivate_all_onus_completed_id_pack(bcmolt_xgpon_ni_deactivate_all_onus_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_ni_deactivate_all_onus_completed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_deactivate_all_onus_completed_id_unpack(bcmolt_xgpon_ni_deactivate_all_onus_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_ni_disable_all_onus_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_disable_all_onus_completed_id_pack(bcmolt_xgpon_ni_disable_all_onus_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_ni_disable_all_onus_completed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_disable_all_onus_completed_id_unpack(bcmolt_xgpon_ni_disable_all_onus_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_ni_disable_serial_number_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_disable_serial_number_id_pack(bcmolt_xgpon_ni_disable_serial_number_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_ni_disable_serial_number_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_disable_serial_number_id_unpack(bcmolt_xgpon_ni_disable_serial_number_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_ni_enable_all_onus_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_enable_all_onus_completed_id_pack(bcmolt_xgpon_ni_enable_all_onus_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_ni_enable_all_onus_completed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_enable_all_onus_completed_id_unpack(bcmolt_xgpon_ni_enable_all_onus_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_ni_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_key_id_pack(bcmolt_xgpon_ni_key_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_ni_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_key_id_unpack(bcmolt_xgpon_ni_key_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_ni_los_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_los_id_pack(bcmolt_xgpon_ni_los_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_ni_los_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_los_id_unpack(bcmolt_xgpon_ni_los_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_ni_onu_discovered_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_onu_discovered_id_pack(bcmolt_xgpon_ni_onu_discovered_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_ni_onu_discovered_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_onu_discovered_id_unpack(bcmolt_xgpon_ni_onu_discovered_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_ni_onu_upgrade_complete_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_onu_upgrade_complete_id_pack(bcmolt_xgpon_ni_onu_upgrade_complete_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_ni_onu_upgrade_complete_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_onu_upgrade_complete_id_unpack(bcmolt_xgpon_ni_onu_upgrade_complete_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_ni_protection_switching_onus_ranged_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_protection_switching_onus_ranged_id_pack(bcmolt_xgpon_ni_protection_switching_onus_ranged_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_ni_protection_switching_onus_ranged_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_protection_switching_onus_ranged_id_unpack(bcmolt_xgpon_ni_protection_switching_onus_ranged_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_ni_protection_switching_switchover_completed_id to 
+ * bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_protection_switching_switchover_completed_id_pack(bcmolt_xgpon_ni_protection_switching_switchover_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_ni_protection_switching_switchover_completed_id from 
+ * bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_protection_switching_switchover_completed_id_unpack(bcmolt_xgpon_ni_protection_switching_switchover_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_ni_protection_switching_traffic_resume_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_protection_switching_traffic_resume_id_pack(bcmolt_xgpon_ni_protection_switching_traffic_resume_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_ni_protection_switching_traffic_resume_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_protection_switching_traffic_resume_id_unpack(bcmolt_xgpon_ni_protection_switching_traffic_resume_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_ni_reset_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_reset_id_pack(bcmolt_xgpon_ni_reset_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_ni_reset_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_reset_id_unpack(bcmolt_xgpon_ni_reset_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_ni_rogue_detection_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_rogue_detection_completed_id_pack(bcmolt_xgpon_ni_rogue_detection_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_ni_rogue_detection_completed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_rogue_detection_completed_id_unpack(bcmolt_xgpon_ni_rogue_detection_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_ni_rogue_detection_window_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_rogue_detection_window_id_pack(bcmolt_xgpon_ni_rogue_detection_window_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_ni_rogue_detection_window_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_rogue_detection_window_id_unpack(bcmolt_xgpon_ni_rogue_detection_window_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_ni_rogue_onu_special_map_cycle_start_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_rogue_onu_special_map_cycle_start_id_pack(bcmolt_xgpon_ni_rogue_onu_special_map_cycle_start_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_ni_rogue_onu_special_map_cycle_start_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_rogue_onu_special_map_cycle_start_id_unpack(bcmolt_xgpon_ni_rogue_onu_special_map_cycle_start_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_ni_run_special_bw_map_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_run_special_bw_map_id_pack(bcmolt_xgpon_ni_run_special_bw_map_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_ni_run_special_bw_map_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_run_special_bw_map_id_unpack(bcmolt_xgpon_ni_run_special_bw_map_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_ni_serial_number_acquisition_cycle_start_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_serial_number_acquisition_cycle_start_id_pack(bcmolt_xgpon_ni_serial_number_acquisition_cycle_start_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_ni_serial_number_acquisition_cycle_start_id from 
+ * bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_serial_number_acquisition_cycle_start_id_unpack(bcmolt_xgpon_ni_serial_number_acquisition_cycle_start_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_ni_set_onu_state_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_set_onu_state_id_pack(bcmolt_xgpon_ni_set_onu_state_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_ni_set_onu_state_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_set_onu_state_id_unpack(bcmolt_xgpon_ni_set_onu_state_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_ni_set_pon_state_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_set_pon_state_id_pack(bcmolt_xgpon_ni_set_pon_state_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_ni_set_pon_state_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_set_pon_state_id_unpack(bcmolt_xgpon_ni_set_pon_state_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_ni_single_request_standby_pon_monitoring_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_single_request_standby_pon_monitoring_id_pack(bcmolt_xgpon_ni_single_request_standby_pon_monitoring_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_ni_single_request_standby_pon_monitoring_id from 
+ * bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_single_request_standby_pon_monitoring_id_unpack(bcmolt_xgpon_ni_single_request_standby_pon_monitoring_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_id_pack(bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_id from 
+ * bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_id_unpack(bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_ni_start_onu_upgrade_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_start_onu_upgrade_id_pack(bcmolt_xgpon_ni_start_onu_upgrade_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_ni_start_onu_upgrade_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_start_onu_upgrade_id_unpack(bcmolt_xgpon_ni_start_onu_upgrade_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_ni_stat_alarm_cleared_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_stat_alarm_cleared_id_pack(bcmolt_xgpon_ni_stat_alarm_cleared_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_ni_stat_alarm_cleared_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_stat_alarm_cleared_id_unpack(bcmolt_xgpon_ni_stat_alarm_cleared_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_ni_stat_alarm_raised_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_stat_alarm_raised_id_pack(bcmolt_xgpon_ni_stat_alarm_raised_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_ni_stat_alarm_raised_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_stat_alarm_raised_id_unpack(bcmolt_xgpon_ni_stat_alarm_raised_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_ni_stat_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_stat_cfg_id_pack(bcmolt_xgpon_ni_stat_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_ni_stat_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_stat_cfg_id_unpack(bcmolt_xgpon_ni_stat_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_ni_stat_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_stat_id_pack(bcmolt_xgpon_ni_stat_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_ni_stat_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_stat_id_unpack(bcmolt_xgpon_ni_stat_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_ni_state_change_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_state_change_completed_id_pack(bcmolt_xgpon_ni_state_change_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_ni_state_change_completed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_state_change_completed_id_unpack(bcmolt_xgpon_ni_state_change_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_ni_tod_request_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_tod_request_completed_id_pack(bcmolt_xgpon_ni_tod_request_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_ni_tod_request_completed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_tod_request_completed_id_unpack(bcmolt_xgpon_ni_tod_request_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_ni_tod_request_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_tod_request_id_pack(bcmolt_xgpon_ni_tod_request_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_ni_tod_request_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_ni_tod_request_id_unpack(bcmolt_xgpon_ni_tod_request_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_num_of_onus to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_num_of_onus_pack(bcmolt_xgpon_num_of_onus this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_num_of_onus from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_num_of_onus_unpack(bcmolt_xgpon_num_of_onus *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_adjust_tx_wavelength_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_adjust_tx_wavelength_id_pack(bcmolt_xgpon_onu_adjust_tx_wavelength_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_adjust_tx_wavelength_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_adjust_tx_wavelength_id_unpack(bcmolt_xgpon_onu_adjust_tx_wavelength_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_auto_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_auto_cfg_id_pack(bcmolt_xgpon_onu_auto_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_auto_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_auto_cfg_id_unpack(bcmolt_xgpon_onu_auto_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_cfg_id_pack(bcmolt_xgpon_onu_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_cfg_id_unpack(bcmolt_xgpon_onu_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_change_power_levelling_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_change_power_levelling_id_pack(bcmolt_xgpon_onu_change_power_levelling_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_change_power_levelling_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_change_power_levelling_id_unpack(bcmolt_xgpon_onu_change_power_levelling_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_cpu_packet_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_cpu_packet_id_pack(bcmolt_xgpon_onu_cpu_packet_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_cpu_packet_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_cpu_packet_id_unpack(bcmolt_xgpon_onu_cpu_packet_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_cpu_packets_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_cpu_packets_id_pack(bcmolt_xgpon_onu_cpu_packets_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_cpu_packets_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_cpu_packets_id_unpack(bcmolt_xgpon_onu_cpu_packets_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_dfi_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_dfi_id_pack(bcmolt_xgpon_onu_dfi_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_dfi_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_dfi_id_unpack(bcmolt_xgpon_onu_dfi_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_dgi_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_dgi_id_pack(bcmolt_xgpon_onu_dgi_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_dgi_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_dgi_id_unpack(bcmolt_xgpon_onu_dgi_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_dowi_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_dowi_id_pack(bcmolt_xgpon_onu_dowi_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_dowi_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_dowi_id_unpack(bcmolt_xgpon_onu_dowi_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_get_power_consumption_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_get_power_consumption_id_pack(bcmolt_xgpon_onu_get_power_consumption_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_get_power_consumption_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_get_power_consumption_id_unpack(bcmolt_xgpon_onu_get_power_consumption_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_get_power_level_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_get_power_level_id_pack(bcmolt_xgpon_onu_get_power_level_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_get_power_level_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_get_power_level_id_unpack(bcmolt_xgpon_onu_get_power_level_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_invalid_dbru_report_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_invalid_dbru_report_id_pack(bcmolt_xgpon_onu_invalid_dbru_report_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_invalid_dbru_report_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_invalid_dbru_report_id_unpack(bcmolt_xgpon_onu_invalid_dbru_report_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_key_exchange_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_key_exchange_completed_id_pack(bcmolt_xgpon_onu_key_exchange_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_key_exchange_completed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_key_exchange_completed_id_unpack(bcmolt_xgpon_onu_key_exchange_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_key_exchange_cycle_skipped_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_key_exchange_cycle_skipped_id_pack(bcmolt_xgpon_onu_key_exchange_cycle_skipped_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_key_exchange_cycle_skipped_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_key_exchange_cycle_skipped_id_unpack(bcmolt_xgpon_onu_key_exchange_cycle_skipped_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_key_exchange_key_mismatch_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_key_exchange_key_mismatch_id_pack(bcmolt_xgpon_onu_key_exchange_key_mismatch_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_key_exchange_key_mismatch_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_key_exchange_key_mismatch_id_unpack(bcmolt_xgpon_onu_key_exchange_key_mismatch_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_key_exchange_key_request_timeout_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_key_exchange_key_request_timeout_id_pack(bcmolt_xgpon_onu_key_exchange_key_request_timeout_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_key_exchange_key_request_timeout_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_key_exchange_key_request_timeout_id_unpack(bcmolt_xgpon_onu_key_exchange_key_request_timeout_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_key_id_pack(bcmolt_xgpon_onu_key_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_key_id_unpack(bcmolt_xgpon_onu_key_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_looci_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_looci_id_pack(bcmolt_xgpon_onu_looci_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_looci_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_looci_id_unpack(bcmolt_xgpon_onu_looci_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_omci_packet_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_omci_packet_id_pack(bcmolt_xgpon_onu_omci_packet_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_omci_packet_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_omci_packet_id_unpack(bcmolt_xgpon_onu_omci_packet_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_onu_activation_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_activation_completed_id_pack(bcmolt_xgpon_onu_onu_activation_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_onu_activation_completed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_activation_completed_id_unpack(bcmolt_xgpon_onu_onu_activation_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_onu_alarm_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_alarm_id_pack(bcmolt_xgpon_onu_onu_alarm_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_onu_alarm_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_alarm_id_unpack(bcmolt_xgpon_onu_onu_alarm_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_onu_deactivation_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_deactivation_completed_id_pack(bcmolt_xgpon_onu_onu_deactivation_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_onu_deactivation_completed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_deactivation_completed_id_unpack(bcmolt_xgpon_onu_onu_deactivation_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_onu_disable_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_disable_completed_id_pack(bcmolt_xgpon_onu_onu_disable_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_onu_disable_completed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_disable_completed_id_unpack(bcmolt_xgpon_onu_onu_disable_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_onu_enable_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_enable_completed_id_pack(bcmolt_xgpon_onu_onu_enable_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_onu_enable_completed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_enable_completed_id_unpack(bcmolt_xgpon_onu_onu_enable_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_onu_tuning_in_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_tuning_in_completed_id_pack(bcmolt_xgpon_onu_onu_tuning_in_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_onu_tuning_in_completed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_tuning_in_completed_id_unpack(bcmolt_xgpon_onu_onu_tuning_in_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_onu_tuning_in_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_tuning_in_id_pack(bcmolt_xgpon_onu_onu_tuning_in_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_onu_tuning_in_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_tuning_in_id_unpack(bcmolt_xgpon_onu_onu_tuning_in_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_onu_tuning_out_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_tuning_out_completed_id_pack(bcmolt_xgpon_onu_onu_tuning_out_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_onu_tuning_out_completed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_tuning_out_completed_id_unpack(bcmolt_xgpon_onu_onu_tuning_out_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_onu_tuning_out_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_tuning_out_id_pack(bcmolt_xgpon_onu_onu_tuning_out_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_onu_tuning_out_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_tuning_out_id_unpack(bcmolt_xgpon_onu_onu_tuning_out_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_optical_reflection_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_optical_reflection_id_pack(bcmolt_xgpon_onu_optical_reflection_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_optical_reflection_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_optical_reflection_id_unpack(bcmolt_xgpon_onu_optical_reflection_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_ploam_packet_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_ploam_packet_id_pack(bcmolt_xgpon_onu_ploam_packet_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_ploam_packet_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_ploam_packet_id_unpack(bcmolt_xgpon_onu_ploam_packet_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_possible_drift_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_possible_drift_id_pack(bcmolt_xgpon_onu_possible_drift_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_possible_drift_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_possible_drift_id_unpack(bcmolt_xgpon_onu_possible_drift_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_power_consumption_report_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_power_consumption_report_id_pack(bcmolt_xgpon_onu_power_consumption_report_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_power_consumption_report_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_power_consumption_report_id_unpack(bcmolt_xgpon_onu_power_consumption_report_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_power_level_report_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_power_level_report_id_pack(bcmolt_xgpon_onu_power_level_report_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_power_level_report_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_power_level_report_id_unpack(bcmolt_xgpon_onu_power_level_report_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_power_management_state_change_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_power_management_state_change_id_pack(bcmolt_xgpon_onu_power_management_state_change_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_power_management_state_change_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_power_management_state_change_id_unpack(bcmolt_xgpon_onu_power_management_state_change_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_pqsi_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_pqsi_id_pack(bcmolt_xgpon_onu_pqsi_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_pqsi_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_pqsi_id_unpack(bcmolt_xgpon_onu_pqsi_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_ranging_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_ranging_completed_id_pack(bcmolt_xgpon_onu_ranging_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_ranging_completed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_ranging_completed_id_unpack(bcmolt_xgpon_onu_ranging_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_registration_id_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_registration_id_id_pack(bcmolt_xgpon_onu_registration_id_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_registration_id_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_registration_id_id_unpack(bcmolt_xgpon_onu_registration_id_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_request_registration_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_request_registration_id_pack(bcmolt_xgpon_onu_request_registration_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_request_registration_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_request_registration_id_unpack(bcmolt_xgpon_onu_request_registration_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_rssi_measurement_completed_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_rssi_measurement_completed_id_pack(bcmolt_xgpon_onu_rssi_measurement_completed_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_rssi_measurement_completed_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_rssi_measurement_completed_id_unpack(bcmolt_xgpon_onu_rssi_measurement_completed_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_rssi_measurement_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_rssi_measurement_id_pack(bcmolt_xgpon_onu_rssi_measurement_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_rssi_measurement_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_rssi_measurement_id_unpack(bcmolt_xgpon_onu_rssi_measurement_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_sdi_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_sdi_id_pack(bcmolt_xgpon_onu_sdi_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_sdi_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_sdi_id_unpack(bcmolt_xgpon_onu_sdi_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_secure_mutual_authentication_failure_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_secure_mutual_authentication_failure_id_pack(bcmolt_xgpon_onu_secure_mutual_authentication_failure_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_secure_mutual_authentication_failure_id from 
+ * bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_secure_mutual_authentication_failure_id_unpack(bcmolt_xgpon_onu_secure_mutual_authentication_failure_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_secure_mutual_authentication_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_secure_mutual_authentication_id_pack(bcmolt_xgpon_onu_secure_mutual_authentication_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_secure_mutual_authentication_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_secure_mutual_authentication_id_unpack(bcmolt_xgpon_onu_secure_mutual_authentication_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_set_onu_state_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_set_onu_state_id_pack(bcmolt_xgpon_onu_set_onu_state_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_set_onu_state_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_set_onu_state_id_unpack(bcmolt_xgpon_onu_set_onu_state_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_sfi_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_sfi_id_pack(bcmolt_xgpon_onu_sfi_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_sfi_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_sfi_id_unpack(bcmolt_xgpon_onu_sfi_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_stat_alarm_cleared_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_stat_alarm_cleared_id_pack(bcmolt_xgpon_onu_stat_alarm_cleared_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_stat_alarm_cleared_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_stat_alarm_cleared_id_unpack(bcmolt_xgpon_onu_stat_alarm_cleared_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_stat_alarm_raised_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_stat_alarm_raised_id_pack(bcmolt_xgpon_onu_stat_alarm_raised_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_stat_alarm_raised_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_stat_alarm_raised_id_unpack(bcmolt_xgpon_onu_stat_alarm_raised_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_stat_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_stat_cfg_id_pack(bcmolt_xgpon_onu_stat_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_stat_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_stat_cfg_id_unpack(bcmolt_xgpon_onu_stat_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_stat_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_stat_id_pack(bcmolt_xgpon_onu_stat_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_stat_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_stat_id_unpack(bcmolt_xgpon_onu_stat_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_sufi_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_sufi_id_pack(bcmolt_xgpon_onu_sufi_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_sufi_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_sufi_id_unpack(bcmolt_xgpon_onu_sufi_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_tiwi_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_tiwi_id_pack(bcmolt_xgpon_onu_tiwi_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_tiwi_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_tiwi_id_unpack(bcmolt_xgpon_onu_tiwi_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_onu_tuning_response_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_tuning_response_id_pack(bcmolt_xgpon_onu_tuning_response_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_tuning_response_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_onu_tuning_response_id_unpack(bcmolt_xgpon_onu_tuning_response_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_serdes_ranging_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_serdes_ranging_mode_pack(bcmolt_xgpon_serdes_ranging_mode this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_serdes_ranging_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_serdes_ranging_mode_unpack(bcmolt_xgpon_serdes_ranging_mode *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_trx_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_trx_cfg_id_pack(bcmolt_xgpon_trx_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_trx_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_trx_cfg_id_unpack(bcmolt_xgpon_trx_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_trx_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_trx_key_id_pack(bcmolt_xgpon_trx_key_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_trx_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_trx_key_id_unpack(bcmolt_xgpon_trx_key_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xgpon_trx_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xgpon_trx_type_pack(bcmolt_xgpon_trx_type this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_trx_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xgpon_trx_type_unpack(bcmolt_xgpon_trx_type *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xpon_serdes_cfg_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xpon_serdes_cfg_id_pack(bcmolt_xpon_serdes_cfg_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xpon_serdes_cfg_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xpon_serdes_cfg_id_unpack(bcmolt_xpon_serdes_cfg_id *this, bcmolt_buf *buf);
+
+/** Packs a bcmolt_xpon_serdes_key_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_xpon_serdes_key_id_pack(bcmolt_xpon_serdes_key_id this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xpon_serdes_key_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_xpon_serdes_key_id_unpack(bcmolt_xpon_serdes_key_id *this, bcmolt_buf *buf);
+
+/** Initializes a bcmolt_actual_schedulershaper struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_actual_schedulershaper_set_default(bcmolt_actual_schedulershaper *this);
+
+/** Packs a bcmolt_actual_schedulershaper to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_actual_schedulershaper_pack(const bcmolt_actual_schedulershaper *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_actual_schedulershaper from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_actual_schedulershaper_unpack(bcmolt_actual_schedulershaper *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_actual_schedulershaper struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_actual_schedulershaper_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_actual_schedulershaper is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_actual_schedulershaper_bounds_check(const bcmolt_actual_schedulershaper *this);
+
+/** Initializes a bcmolt_aes_key struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_aes_key_set_default(bcmolt_aes_key *this);
+
+/** Packs a bcmolt_aes_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_aes_key_pack(const bcmolt_aes_key *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_aes_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_aes_key_unpack(bcmolt_aes_key *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_aes_key struct and collects memory requirements 
+ * above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_aes_key_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_aes_key is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_aes_key_bounds_check(const bcmolt_aes_key *this);
+
+/** Initializes a bcmolt_api_capture_buffer_reader struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_api_capture_buffer_reader_set_default(bcmolt_api_capture_buffer_reader *this);
+
+/** Packs a bcmolt_api_capture_buffer_reader to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_api_capture_buffer_reader_pack(const bcmolt_api_capture_buffer_reader *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_api_capture_buffer_reader from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_api_capture_buffer_reader_unpack(bcmolt_api_capture_buffer_reader *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_api_capture_buffer_reader struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_api_capture_buffer_reader_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_api_capture_buffer_reader is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_api_capture_buffer_reader_bounds_check(const bcmolt_api_capture_buffer_reader *this);
+
+/** Initializes a bcmolt_api_capture_config struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_api_capture_config_set_default(bcmolt_api_capture_config *this);
+
+/** Packs a bcmolt_api_capture_config to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_api_capture_config_pack(const bcmolt_api_capture_config *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_api_capture_config from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_api_capture_config_unpack(bcmolt_api_capture_config *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_api_capture_config struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_api_capture_config_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_api_capture_config is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_api_capture_config_bounds_check(const bcmolt_api_capture_config *this);
+
+/** Initializes a bcmolt_api_capture_stats struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_api_capture_stats_set_default(bcmolt_api_capture_stats *this);
+
+/** Packs a bcmolt_api_capture_stats to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_api_capture_stats_pack(const bcmolt_api_capture_stats *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_api_capture_stats from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_api_capture_stats_unpack(bcmolt_api_capture_stats *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_api_capture_stats struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_api_capture_stats_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_api_capture_stats is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_api_capture_stats_bounds_check(const bcmolt_api_capture_stats *this);
+
+/** Initializes a bcmolt_bounds struct.  This sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_bounds_set_default(bcmolt_bounds *this);
+
+/** Packs a bcmolt_bounds to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_bounds_pack(const bcmolt_bounds *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_bounds from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_bounds_unpack(bcmolt_bounds *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_bounds struct and collects memory requirements 
+ * above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_bounds_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_bounds is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_bounds_bounds_check(const bcmolt_bounds *this);
+
+/** Initializes a bcmolt_arr_bounds_8 struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_arr_bounds_8_set_default(bcmolt_arr_bounds_8 *this);
+
+/** Packs a bcmolt_arr_bounds_8 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_bounds_8_pack(const bcmolt_arr_bounds_8 *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_arr_bounds_8 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_bounds_8_unpack(bcmolt_arr_bounds_8 *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_arr_bounds_8 struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_arr_bounds_8_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_arr_bounds_8 is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_bounds_8_bounds_check(const bcmolt_arr_bounds_8 *this);
+
+/** Initializes a bcmolt_arr_calibration_record_8 struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_arr_calibration_record_8_set_default(bcmolt_arr_calibration_record_8 *this);
+
+/** Packs a bcmolt_arr_calibration_record_8 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_calibration_record_8_pack(const bcmolt_arr_calibration_record_8 *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_arr_calibration_record_8 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_calibration_record_8_unpack(bcmolt_arr_calibration_record_8 *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_arr_calibration_record_8 struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_arr_calibration_record_8_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_arr_calibration_record_8 is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_calibration_record_8_bounds_check(const bcmolt_arr_calibration_record_8 *this);
+
+/** Initializes a bcmolt_ds_frequency_offset struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_ds_frequency_offset_set_default(bcmolt_ds_frequency_offset *this);
+
+/** Packs a bcmolt_ds_frequency_offset to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ds_frequency_offset_pack(const bcmolt_ds_frequency_offset *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_ds_frequency_offset from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ds_frequency_offset_unpack(bcmolt_ds_frequency_offset *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_ds_frequency_offset struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_ds_frequency_offset_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_ds_frequency_offset is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ds_frequency_offset_bounds_check(const bcmolt_ds_frequency_offset *this);
+
+/** Initializes a bcmolt_channel_profile struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_channel_profile_set_default(bcmolt_channel_profile *this);
+
+/** Packs a bcmolt_channel_profile to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_channel_profile_pack(const bcmolt_channel_profile *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_channel_profile from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_channel_profile_unpack(bcmolt_channel_profile *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_channel_profile struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_channel_profile_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_channel_profile is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_channel_profile_bounds_check(const bcmolt_channel_profile *this);
+
+/** Initializes a bcmolt_arr_channel_profile_8 struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_arr_channel_profile_8_set_default(bcmolt_arr_channel_profile_8 *this);
+
+/** Packs a bcmolt_arr_channel_profile_8 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_channel_profile_8_pack(const bcmolt_arr_channel_profile_8 *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_arr_channel_profile_8 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_channel_profile_8_unpack(bcmolt_arr_channel_profile_8 *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_arr_channel_profile_8 struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_arr_channel_profile_8_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_arr_channel_profile_8 is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_channel_profile_8_bounds_check(const bcmolt_arr_channel_profile_8 *this);
+
+/** Initializes a bcmolt_power_consumption_channel_report struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_power_consumption_channel_report_set_default(bcmolt_power_consumption_channel_report *this);
+
+/** Packs a bcmolt_power_consumption_channel_report to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_power_consumption_channel_report_pack(const bcmolt_power_consumption_channel_report *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_power_consumption_channel_report from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_power_consumption_channel_report_unpack(bcmolt_power_consumption_channel_report *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_power_consumption_channel_report struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_power_consumption_channel_report_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_power_consumption_channel_report is out of 
+ * bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_power_consumption_channel_report_bounds_check(const bcmolt_power_consumption_channel_report *this);
+
+/** Initializes a bcmolt_arr_power_consumption_channel_report_8 struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_arr_power_consumption_channel_report_8_set_default(bcmolt_arr_power_consumption_channel_report_8 *this);
+
+/** Packs a bcmolt_arr_power_consumption_channel_report_8 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_power_consumption_channel_report_8_pack(const bcmolt_arr_power_consumption_channel_report_8 *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_arr_power_consumption_channel_report_8 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_power_consumption_channel_report_8_unpack(bcmolt_arr_power_consumption_channel_report_8 *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_arr_power_consumption_channel_report_8 struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_arr_power_consumption_channel_report_8_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_arr_power_consumption_channel_report_8 is 
+ * out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_power_consumption_channel_report_8_bounds_check(const bcmolt_arr_power_consumption_channel_report_8 *this);
+
+/** Initializes a bcmolt_arr_u16_2 struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_arr_u16_2_set_default(bcmolt_arr_u16_2 *this);
+
+/** Packs a bcmolt_arr_u16_2 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_u16_2_pack(const bcmolt_arr_u16_2 *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_arr_u16_2 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_u16_2_unpack(bcmolt_arr_u16_2 *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_arr_u16_2 struct and collects memory requirements 
+ * above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_arr_u16_2_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_arr_u16_2 is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_u16_2_bounds_check(const bcmolt_arr_u16_2 *this);
+
+/** Initializes a bcmolt_arr_u16_2_hex struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_arr_u16_2_hex_set_default(bcmolt_arr_u16_2_hex *this);
+
+/** Packs a bcmolt_arr_u16_2_hex to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_u16_2_hex_pack(const bcmolt_arr_u16_2_hex *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_arr_u16_2_hex from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_u16_2_hex_unpack(bcmolt_arr_u16_2_hex *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_arr_u16_2_hex struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_arr_u16_2_hex_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_arr_u16_2_hex is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_u16_2_hex_bounds_check(const bcmolt_arr_u16_2_hex *this);
+
+/** Initializes a bcmolt_arr_u16_5_hex struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_arr_u16_5_hex_set_default(bcmolt_arr_u16_5_hex *this);
+
+/** Packs a bcmolt_arr_u16_5_hex to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_u16_5_hex_pack(const bcmolt_arr_u16_5_hex *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_arr_u16_5_hex from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_u16_5_hex_unpack(bcmolt_arr_u16_5_hex *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_arr_u16_5_hex struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_arr_u16_5_hex_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_arr_u16_5_hex is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_u16_5_hex_bounds_check(const bcmolt_arr_u16_5_hex *this);
+
+/** Initializes a bcmolt_arr_u16_7 struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_arr_u16_7_set_default(bcmolt_arr_u16_7 *this);
+
+/** Packs a bcmolt_arr_u16_7 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_u16_7_pack(const bcmolt_arr_u16_7 *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_arr_u16_7 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_u16_7_unpack(bcmolt_arr_u16_7 *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_arr_u16_7 struct and collects memory requirements 
+ * above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_arr_u16_7_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_arr_u16_7 is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_u16_7_bounds_check(const bcmolt_arr_u16_7 *this);
+
+/** Initializes a bcmolt_arr_u32_6 struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_arr_u32_6_set_default(bcmolt_arr_u32_6 *this);
+
+/** Packs a bcmolt_arr_u32_6 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_u32_6_pack(const bcmolt_arr_u32_6 *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_arr_u32_6 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_u32_6_unpack(bcmolt_arr_u32_6 *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_arr_u32_6 struct and collects memory requirements 
+ * above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_arr_u32_6_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_arr_u32_6 is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_u32_6_bounds_check(const bcmolt_arr_u32_6 *this);
+
+/** Initializes a bcmolt_arr_u8_10 struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_arr_u8_10_set_default(bcmolt_arr_u8_10 *this);
+
+/** Packs a bcmolt_arr_u8_10 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_u8_10_pack(const bcmolt_arr_u8_10 *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_arr_u8_10 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_u8_10_unpack(bcmolt_arr_u8_10 *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_arr_u8_10 struct and collects memory requirements 
+ * above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_arr_u8_10_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_arr_u8_10 is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_u8_10_bounds_check(const bcmolt_arr_u8_10 *this);
+
+/** Initializes a bcmolt_arr_u8_12 struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_arr_u8_12_set_default(bcmolt_arr_u8_12 *this);
+
+/** Packs a bcmolt_arr_u8_12 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_u8_12_pack(const bcmolt_arr_u8_12 *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_arr_u8_12 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_u8_12_unpack(bcmolt_arr_u8_12 *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_arr_u8_12 struct and collects memory requirements 
+ * above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_arr_u8_12_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_arr_u8_12 is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_u8_12_bounds_check(const bcmolt_arr_u8_12 *this);
+
+/** Initializes a bcmolt_arr_u8_13 struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_arr_u8_13_set_default(bcmolt_arr_u8_13 *this);
+
+/** Packs a bcmolt_arr_u8_13 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_u8_13_pack(const bcmolt_arr_u8_13 *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_arr_u8_13 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_u8_13_unpack(bcmolt_arr_u8_13 *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_arr_u8_13 struct and collects memory requirements 
+ * above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_arr_u8_13_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_arr_u8_13 is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_u8_13_bounds_check(const bcmolt_arr_u8_13 *this);
+
+/** Initializes a bcmolt_arr_u8_36 struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_arr_u8_36_set_default(bcmolt_arr_u8_36 *this);
+
+/** Packs a bcmolt_arr_u8_36 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_u8_36_pack(const bcmolt_arr_u8_36 *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_arr_u8_36 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_u8_36_unpack(bcmolt_arr_u8_36 *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_arr_u8_36 struct and collects memory requirements 
+ * above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_arr_u8_36_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_arr_u8_36 is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_u8_36_bounds_check(const bcmolt_arr_u8_36 *this);
+
+/** Initializes a bcmolt_arr_u8_4 struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_arr_u8_4_set_default(bcmolt_arr_u8_4 *this);
+
+/** Packs a bcmolt_arr_u8_4 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_u8_4_pack(const bcmolt_arr_u8_4 *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_arr_u8_4 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_u8_4_unpack(bcmolt_arr_u8_4 *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_arr_u8_4 struct and collects memory requirements 
+ * above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_arr_u8_4_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_arr_u8_4 is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_u8_4_bounds_check(const bcmolt_arr_u8_4 *this);
+
+/** Initializes a bcmolt_arr_u8_40 struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_arr_u8_40_set_default(bcmolt_arr_u8_40 *this);
+
+/** Packs a bcmolt_arr_u8_40 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_u8_40_pack(const bcmolt_arr_u8_40 *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_arr_u8_40 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_u8_40_unpack(bcmolt_arr_u8_40 *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_arr_u8_40 struct and collects memory requirements 
+ * above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_arr_u8_40_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_arr_u8_40 is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_u8_40_bounds_check(const bcmolt_arr_u8_40 *this);
+
+/** Initializes a bcmolt_xgpon_burst_profile struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_xgpon_burst_profile_set_default(bcmolt_xgpon_burst_profile *this);
+
+/** Packs a bcmolt_xgpon_burst_profile to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_burst_profile_pack(const bcmolt_xgpon_burst_profile *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_burst_profile from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_burst_profile_unpack(bcmolt_xgpon_burst_profile *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_xgpon_burst_profile struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_burst_profile_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_xgpon_burst_profile is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_burst_profile_bounds_check(const bcmolt_xgpon_burst_profile *this);
+
+/** Initializes a bcmolt_arr_xgpon_burst_profile_4 struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_arr_xgpon_burst_profile_4_set_default(bcmolt_arr_xgpon_burst_profile_4 *this);
+
+/** Packs a bcmolt_arr_xgpon_burst_profile_4 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_xgpon_burst_profile_4_pack(const bcmolt_arr_xgpon_burst_profile_4 *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_arr_xgpon_burst_profile_4 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_xgpon_burst_profile_4_unpack(bcmolt_arr_xgpon_burst_profile_4 *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_arr_xgpon_burst_profile_4 struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_arr_xgpon_burst_profile_4_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_arr_xgpon_burst_profile_4 is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_xgpon_burst_profile_4_bounds_check(const bcmolt_arr_xgpon_burst_profile_4 *this);
+
+/** Initializes a bcmolt_xgpon_trx_configuration struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_xgpon_trx_configuration_set_default(bcmolt_xgpon_trx_configuration *this);
+
+/** Packs a bcmolt_xgpon_trx_configuration to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_trx_configuration_pack(const bcmolt_xgpon_trx_configuration *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_trx_configuration from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_trx_configuration_unpack(bcmolt_xgpon_trx_configuration *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_xgpon_trx_configuration struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_trx_configuration_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_xgpon_trx_configuration is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_trx_configuration_bounds_check(const bcmolt_xgpon_trx_configuration *this);
+
+/** Initializes a bcmolt_arr_xgpon_trx_configuration_4 struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_arr_xgpon_trx_configuration_4_set_default(bcmolt_arr_xgpon_trx_configuration_4 *this);
+
+/** Packs a bcmolt_arr_xgpon_trx_configuration_4 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_xgpon_trx_configuration_4_pack(const bcmolt_arr_xgpon_trx_configuration_4 *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_arr_xgpon_trx_configuration_4 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_xgpon_trx_configuration_4_unpack(bcmolt_arr_xgpon_trx_configuration_4 *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_arr_xgpon_trx_configuration_4 struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_arr_xgpon_trx_configuration_4_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_arr_xgpon_trx_configuration_4 is out of 
+ * bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_arr_xgpon_trx_configuration_4_bounds_check(const bcmolt_arr_xgpon_trx_configuration_4 *this);
+
+/** Initializes a bcmolt_automatic_onu_deactivation struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_automatic_onu_deactivation_set_default(bcmolt_automatic_onu_deactivation *this);
+
+/** Packs a bcmolt_automatic_onu_deactivation to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_automatic_onu_deactivation_pack(const bcmolt_automatic_onu_deactivation *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_automatic_onu_deactivation from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_automatic_onu_deactivation_unpack(bcmolt_automatic_onu_deactivation *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_automatic_onu_deactivation struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_automatic_onu_deactivation_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_automatic_onu_deactivation is out of 
+ * bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_automatic_onu_deactivation_bounds_check(const bcmolt_automatic_onu_deactivation *this);
+
+/** Initializes a bcmolt_resync_control struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_resync_control_set_default(bcmolt_resync_control *this);
+
+/** Packs a bcmolt_resync_control to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_resync_control_pack(const bcmolt_resync_control *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_resync_control from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_resync_control_unpack(bcmolt_resync_control *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_resync_control struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_resync_control_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_resync_control is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_resync_control_bounds_check(const bcmolt_resync_control *this);
+
+/** Initializes a bcmolt_bcdr_resync_pattern_configuration struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_bcdr_resync_pattern_configuration_set_default(bcmolt_bcdr_resync_pattern_configuration *this);
+
+/** Packs a bcmolt_bcdr_resync_pattern_configuration to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_bcdr_resync_pattern_configuration_pack(const bcmolt_bcdr_resync_pattern_configuration *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_bcdr_resync_pattern_configuration from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_bcdr_resync_pattern_configuration_unpack(bcmolt_bcdr_resync_pattern_configuration *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_bcdr_resync_pattern_configuration struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_bcdr_resync_pattern_configuration_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_bcdr_resync_pattern_configuration is out 
+ * of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_bcdr_resync_pattern_configuration_bounds_check(const bcmolt_bcdr_resync_pattern_configuration *this);
+
+/** Initializes a bcmolt_ber_monitor_params struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_ber_monitor_params_set_default(bcmolt_ber_monitor_params *this);
+
+/** Packs a bcmolt_ber_monitor_params to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ber_monitor_params_pack(const bcmolt_ber_monitor_params *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_ber_monitor_params from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ber_monitor_params_unpack(bcmolt_ber_monitor_params *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_ber_monitor_params struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_ber_monitor_params_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_ber_monitor_params is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ber_monitor_params_bounds_check(const bcmolt_ber_monitor_params *this);
+
+/** Initializes a bcmolt_cbr_rt_allocation_profile struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_cbr_rt_allocation_profile_set_default(bcmolt_cbr_rt_allocation_profile *this);
+
+/** Packs a bcmolt_cbr_rt_allocation_profile to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_cbr_rt_allocation_profile_pack(const bcmolt_cbr_rt_allocation_profile *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_cbr_rt_allocation_profile from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_cbr_rt_allocation_profile_unpack(bcmolt_cbr_rt_allocation_profile *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_cbr_rt_allocation_profile struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_cbr_rt_allocation_profile_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_cbr_rt_allocation_profile is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_cbr_rt_allocation_profile_bounds_check(const bcmolt_cbr_rt_allocation_profile *this);
+
+/** Initializes a bcmolt_ddr_test_completed struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_ddr_test_completed_set_default(bcmolt_ddr_test_completed *this);
+
+/** Packs a bcmolt_ddr_test_completed to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ddr_test_completed_pack(const bcmolt_ddr_test_completed *this, bcmolt_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_ddr_test_completed would occupy on 
+ * the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_ddr_test_completed_get_packed_length(const bcmolt_ddr_test_completed *this);
+
+/** Unpacks a bcmolt_ddr_test_completed from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ddr_test_completed_unpack(bcmolt_ddr_test_completed *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_ddr_test_completed struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_ddr_test_completed_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_ddr_test_completed is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ddr_test_completed_bounds_check(const bcmolt_ddr_test_completed *this);
+
+/** Initializes a bcmolt_debug_device_cfg struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_debug_device_cfg_set_default(bcmolt_debug_device_cfg *this);
+
+/** Packs a bcmolt_debug_device_cfg to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_debug_device_cfg_pack(const bcmolt_debug_device_cfg *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_debug_device_cfg from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_debug_device_cfg_unpack(bcmolt_debug_device_cfg *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_debug_device_cfg struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_debug_device_cfg_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_debug_device_cfg is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_debug_device_cfg_bounds_check(const bcmolt_debug_device_cfg *this);
+
+/** Initializes a bcmolt_device_nni_speed struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_device_nni_speed_set_default(bcmolt_device_nni_speed *this);
+
+/** Packs a bcmolt_device_nni_speed to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_nni_speed_pack(const bcmolt_device_nni_speed *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_device_nni_speed from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_nni_speed_unpack(bcmolt_device_nni_speed *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_device_nni_speed struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_device_nni_speed_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_device_nni_speed is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_nni_speed_bounds_check(const bcmolt_device_nni_speed *this);
+
+/* \cond UNDOCUMENTED_SYMBOLS */
+
+/** Initializes a bcmolt_dummy_struct_for_embedded_types struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_dummy_struct_for_embedded_types_set_default(bcmolt_dummy_struct_for_embedded_types *this);
+
+/** Packs a bcmolt_dummy_struct_for_embedded_types to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_dummy_struct_for_embedded_types_pack(const bcmolt_dummy_struct_for_embedded_types *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_dummy_struct_for_embedded_types from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_dummy_struct_for_embedded_types_unpack(bcmolt_dummy_struct_for_embedded_types *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_dummy_struct_for_embedded_types struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_dummy_struct_for_embedded_types_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_dummy_struct_for_embedded_types is out of 
+ * bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_dummy_struct_for_embedded_types_bounds_check(const bcmolt_dummy_struct_for_embedded_types *this);
+
+/* \endcond */
+
+/** Initializes a bcmolt_embedded_image_entry struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_embedded_image_entry_set_default(bcmolt_embedded_image_entry *this);
+
+/** Packs a bcmolt_embedded_image_entry to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_embedded_image_entry_pack(const bcmolt_embedded_image_entry *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_embedded_image_entry from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_embedded_image_entry_unpack(bcmolt_embedded_image_entry *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_embedded_image_entry struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_embedded_image_entry_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_embedded_image_entry is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_embedded_image_entry_bounds_check(const bcmolt_embedded_image_entry *this);
+
+/** Initializes a bcmolt_embedded_image_entry_list_u8 struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_embedded_image_entry_list_u8_set_default(bcmolt_embedded_image_entry_list_u8 *this);
+
+/** Packs a bcmolt_embedded_image_entry_list_u8 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_embedded_image_entry_list_u8_pack(const bcmolt_embedded_image_entry_list_u8 *this, bcmolt_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_embedded_image_entry_list_u8 would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_embedded_image_entry_list_u8_get_packed_length(const bcmolt_embedded_image_entry_list_u8 *this);
+
+/** Unpacks a bcmolt_embedded_image_entry_list_u8 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_embedded_image_entry_list_u8_unpack(bcmolt_embedded_image_entry_list_u8 *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_embedded_image_entry_list_u8 struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_embedded_image_entry_list_u8_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_embedded_image_entry_list_u8 is out of 
+ * bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_embedded_image_entry_list_u8_bounds_check(const bcmolt_embedded_image_entry_list_u8 *this);
+
+/** Initializes a bcmolt_encryption_information_container struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_encryption_information_container_set_default(bcmolt_encryption_information_container *this);
+
+/** Packs a bcmolt_encryption_information_container to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_encryption_information_container_pack(const bcmolt_encryption_information_container *this, bcmolt_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_encryption_information_container 
+ * would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_encryption_information_container_get_packed_length(const bcmolt_encryption_information_container *this);
+
+/** Unpacks a bcmolt_encryption_information_container from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_encryption_information_container_unpack(bcmolt_encryption_information_container *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_encryption_information_container struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_encryption_information_container_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_encryption_information_container is out of 
+ * bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_encryption_information_container_bounds_check(const bcmolt_encryption_information_container *this);
+
+/** Initializes a bcmolt_epon_clock_transport_configuration struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_epon_clock_transport_configuration_set_default(bcmolt_epon_clock_transport_configuration *this);
+
+/** Packs a bcmolt_epon_clock_transport_configuration to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_clock_transport_configuration_pack(const bcmolt_epon_clock_transport_configuration *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_clock_transport_configuration from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_clock_transport_configuration_unpack(bcmolt_epon_clock_transport_configuration *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_clock_transport_configuration struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_clock_transport_configuration_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_epon_clock_transport_configuration is out 
+ * of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_clock_transport_configuration_bounds_check(const bcmolt_epon_clock_transport_configuration *this);
+
+/** Initializes a bcmolt_unknown_link_status struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_unknown_link_status_set_default(bcmolt_unknown_link_status *this);
+
+/** Packs a bcmolt_unknown_link_status to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_unknown_link_status_pack(const bcmolt_unknown_link_status *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_unknown_link_status from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_unknown_link_status_unpack(bcmolt_unknown_link_status *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_unknown_link_status struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_unknown_link_status_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_unknown_link_status is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_unknown_link_status_bounds_check(const bcmolt_unknown_link_status *this);
+
+/** Initializes a bcmolt_laser_on_off_status struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_laser_on_off_status_set_default(bcmolt_laser_on_off_status *this);
+
+/** Packs a bcmolt_laser_on_off_status to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_laser_on_off_status_pack(const bcmolt_laser_on_off_status *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_laser_on_off_status from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_laser_on_off_status_unpack(bcmolt_laser_on_off_status *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_laser_on_off_status struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_laser_on_off_status_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_laser_on_off_status is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_laser_on_off_status_bounds_check(const bcmolt_laser_on_off_status *this);
+
+/** Initializes a bcmolt_range_status struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_range_status_set_default(bcmolt_range_status *this);
+
+/** Packs a bcmolt_range_status to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_range_status_pack(const bcmolt_range_status *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_range_status from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_range_status_unpack(bcmolt_range_status *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_range_status struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_range_status_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_range_status is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_range_status_bounds_check(const bcmolt_range_status *this);
+
+/** Initializes a bcmolt_rogue_status struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_rogue_status_set_default(bcmolt_rogue_status *this);
+
+/** Packs a bcmolt_rogue_status to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_rogue_status_pack(const bcmolt_rogue_status *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_rogue_status from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_rogue_status_unpack(bcmolt_rogue_status *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_rogue_status struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_rogue_status_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_rogue_status is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_rogue_status_bounds_check(const bcmolt_rogue_status *this);
+
+/** Initializes a bcmolt_epon_denied_link_alarm_state struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_epon_denied_link_alarm_state_set_default(bcmolt_epon_denied_link_alarm_state *this);
+
+/** Packs a bcmolt_epon_denied_link_alarm_state to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_denied_link_alarm_state_pack(const bcmolt_epon_denied_link_alarm_state *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_denied_link_alarm_state from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_denied_link_alarm_state_unpack(bcmolt_epon_denied_link_alarm_state *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_denied_link_alarm_state struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_denied_link_alarm_state_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_epon_denied_link_alarm_state is out of 
+ * bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_denied_link_alarm_state_bounds_check(const bcmolt_epon_denied_link_alarm_state *this);
+
+/** Initializes a bcmolt_epon_encryption_config struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_epon_encryption_config_set_default(bcmolt_epon_encryption_config *this);
+
+/** Packs a bcmolt_epon_encryption_config to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_encryption_config_pack(const bcmolt_epon_encryption_config *this, bcmolt_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_encryption_config would occupy 
+ * on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_encryption_config_get_packed_length(const bcmolt_epon_encryption_config *this);
+
+/** Unpacks a bcmolt_epon_encryption_config from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_encryption_config_unpack(bcmolt_epon_encryption_config *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_encryption_config struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_encryption_config_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_epon_encryption_config is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_encryption_config_bounds_check(const bcmolt_epon_encryption_config *this);
+
+/** Initializes a bcmolt_epon_key_exchange_config struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_epon_key_exchange_config_set_default(bcmolt_epon_key_exchange_config *this);
+
+/** Packs a bcmolt_epon_key_exchange_config to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_key_exchange_config_pack(const bcmolt_epon_key_exchange_config *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_key_exchange_config from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_key_exchange_config_unpack(bcmolt_epon_key_exchange_config *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_key_exchange_config struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_key_exchange_config_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_epon_key_exchange_config is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_key_exchange_config_bounds_check(const bcmolt_epon_key_exchange_config *this);
+
+/** Initializes a bcmolt_epon_laser_overhead_parameters struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_epon_laser_overhead_parameters_set_default(bcmolt_epon_laser_overhead_parameters *this);
+
+/** Packs a bcmolt_epon_laser_overhead_parameters to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_laser_overhead_parameters_pack(const bcmolt_epon_laser_overhead_parameters *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_laser_overhead_parameters from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_laser_overhead_parameters_unpack(bcmolt_epon_laser_overhead_parameters *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_laser_overhead_parameters struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_laser_overhead_parameters_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_epon_laser_overhead_parameters is out of 
+ * bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_laser_overhead_parameters_bounds_check(const bcmolt_epon_laser_overhead_parameters *this);
+
+/** Initializes a bcmolt_epon_link_alarm_state struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_epon_link_alarm_state_set_default(bcmolt_epon_link_alarm_state *this);
+
+/** Packs a bcmolt_epon_link_alarm_state to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_alarm_state_pack(const bcmolt_epon_link_alarm_state *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_link_alarm_state from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_alarm_state_unpack(bcmolt_epon_link_alarm_state *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_link_alarm_state struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_link_alarm_state_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_epon_link_alarm_state is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_alarm_state_bounds_check(const bcmolt_epon_link_alarm_state *this);
+
+/** Initializes a bcmolt_epon_link_fec_en struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_epon_link_fec_en_set_default(bcmolt_epon_link_fec_en *this);
+
+/** Packs a bcmolt_epon_link_fec_en to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_fec_en_pack(const bcmolt_epon_link_fec_en *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_link_fec_en from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_fec_en_unpack(bcmolt_epon_link_fec_en *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_link_fec_en struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_link_fec_en_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_epon_link_fec_en is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_fec_en_bounds_check(const bcmolt_epon_link_fec_en *this);
+
+/** Initializes a bcmolt_epon_link_info struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_epon_link_info_set_default(bcmolt_epon_link_info *this);
+
+/** Packs a bcmolt_epon_link_info to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_info_pack(const bcmolt_epon_link_info *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_link_info from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_info_unpack(bcmolt_epon_link_info *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_link_info struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_link_info_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_epon_link_info is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_info_bounds_check(const bcmolt_epon_link_info *this);
+
+/** Initializes a bcmolt_gate_parameters struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_gate_parameters_set_default(bcmolt_gate_parameters *this);
+
+/** Packs a bcmolt_gate_parameters to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gate_parameters_pack(const bcmolt_gate_parameters *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gate_parameters from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gate_parameters_unpack(bcmolt_gate_parameters *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_gate_parameters struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gate_parameters_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_gate_parameters is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gate_parameters_bounds_check(const bcmolt_gate_parameters *this);
+
+/** Initializes a bcmolt_gate_parameters_list_u32 struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_gate_parameters_list_u32_set_default(bcmolt_gate_parameters_list_u32 *this);
+
+/** Packs a bcmolt_gate_parameters_list_u32 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gate_parameters_list_u32_pack(const bcmolt_gate_parameters_list_u32 *this, bcmolt_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_gate_parameters_list_u32 would occupy 
+ * on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gate_parameters_list_u32_get_packed_length(const bcmolt_gate_parameters_list_u32 *this);
+
+/** Unpacks a bcmolt_gate_parameters_list_u32 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gate_parameters_list_u32_unpack(bcmolt_gate_parameters_list_u32 *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_gate_parameters_list_u32 struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gate_parameters_list_u32_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_gate_parameters_list_u32 is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gate_parameters_list_u32_bounds_check(const bcmolt_gate_parameters_list_u32 *this);
+
+/** Initializes a bcmolt_epon_registration_gate_mode struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_epon_registration_gate_mode_set_default(bcmolt_epon_registration_gate_mode *this);
+
+/** Packs a bcmolt_epon_registration_gate_mode to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_registration_gate_mode_pack(const bcmolt_epon_registration_gate_mode *this, bcmolt_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_registration_gate_mode would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_registration_gate_mode_get_packed_length(const bcmolt_epon_registration_gate_mode *this);
+
+/** Unpacks a bcmolt_epon_registration_gate_mode from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_registration_gate_mode_unpack(bcmolt_epon_registration_gate_mode *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_registration_gate_mode struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_registration_gate_mode_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_epon_registration_gate_mode is out of 
+ * bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_registration_gate_mode_bounds_check(const bcmolt_epon_registration_gate_mode *this);
+
+/** Initializes a bcmolt_epon_logical_link_options struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_epon_logical_link_options_set_default(bcmolt_epon_logical_link_options *this);
+
+/** Packs a bcmolt_epon_logical_link_options to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_logical_link_options_pack(const bcmolt_epon_logical_link_options *this, bcmolt_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_logical_link_options would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_logical_link_options_get_packed_length(const bcmolt_epon_logical_link_options *this);
+
+/** Unpacks a bcmolt_epon_logical_link_options from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_logical_link_options_unpack(bcmolt_epon_logical_link_options *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_logical_link_options struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_logical_link_options_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_epon_logical_link_options is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_logical_link_options_bounds_check(const bcmolt_epon_logical_link_options *this);
+
+/** Initializes a bcmolt_epon_ni_alarm_state struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_epon_ni_alarm_state_set_default(bcmolt_epon_ni_alarm_state *this);
+
+/** Packs a bcmolt_epon_ni_alarm_state to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_alarm_state_pack(const bcmolt_epon_ni_alarm_state *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_ni_alarm_state from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_alarm_state_unpack(bcmolt_epon_ni_alarm_state *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_ni_alarm_state struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_ni_alarm_state_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_epon_ni_alarm_state is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_alarm_state_bounds_check(const bcmolt_epon_ni_alarm_state *this);
+
+/** Initializes a bcmolt_epon_ni_encryption_cfg struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_epon_ni_encryption_cfg_set_default(bcmolt_epon_ni_encryption_cfg *this);
+
+/** Packs a bcmolt_epon_ni_encryption_cfg to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_encryption_cfg_pack(const bcmolt_epon_ni_encryption_cfg *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_ni_encryption_cfg from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_encryption_cfg_unpack(bcmolt_epon_ni_encryption_cfg *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_ni_encryption_cfg struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_ni_encryption_cfg_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_epon_ni_encryption_cfg is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_encryption_cfg_bounds_check(const bcmolt_epon_ni_encryption_cfg *this);
+
+/** Initializes a bcmolt_epon_onu_upgrade_params struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_epon_onu_upgrade_params_set_default(bcmolt_epon_onu_upgrade_params *this);
+
+/** Packs a bcmolt_epon_onu_upgrade_params to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_upgrade_params_pack(const bcmolt_epon_onu_upgrade_params *this, bcmolt_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_onu_upgrade_params would occupy 
+ * on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_onu_upgrade_params_get_packed_length(const bcmolt_epon_onu_upgrade_params *this);
+
+/** Unpacks a bcmolt_epon_onu_upgrade_params from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_upgrade_params_unpack(bcmolt_epon_onu_upgrade_params *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_onu_upgrade_params struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_onu_upgrade_params_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_epon_onu_upgrade_params is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_upgrade_params_bounds_check(const bcmolt_epon_onu_upgrade_params *this);
+
+/** Initializes a bcmolt_epon_onu_upgrade_status struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_epon_onu_upgrade_status_set_default(bcmolt_epon_onu_upgrade_status *this);
+
+/** Packs a bcmolt_epon_onu_upgrade_status to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_upgrade_status_pack(const bcmolt_epon_onu_upgrade_status *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_onu_upgrade_status from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_upgrade_status_unpack(bcmolt_epon_onu_upgrade_status *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_onu_upgrade_status struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_onu_upgrade_status_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_epon_onu_upgrade_status is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_upgrade_status_bounds_check(const bcmolt_epon_onu_upgrade_status *this);
+
+/** Initializes a bcmolt_epon_onu_upgrade_status_list_u32 struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_epon_onu_upgrade_status_list_u32_set_default(bcmolt_epon_onu_upgrade_status_list_u32 *this);
+
+/** Packs a bcmolt_epon_onu_upgrade_status_list_u32 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_upgrade_status_list_u32_pack(const bcmolt_epon_onu_upgrade_status_list_u32 *this, bcmolt_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_onu_upgrade_status_list_u32 
+ * would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_onu_upgrade_status_list_u32_get_packed_length(const bcmolt_epon_onu_upgrade_status_list_u32 *this);
+
+/** Unpacks a bcmolt_epon_onu_upgrade_status_list_u32 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_upgrade_status_list_u32_unpack(bcmolt_epon_onu_upgrade_status_list_u32 *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_onu_upgrade_status_list_u32 struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_onu_upgrade_status_list_u32_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_epon_onu_upgrade_status_list_u32 is out of 
+ * bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_upgrade_status_list_u32_bounds_check(const bcmolt_epon_onu_upgrade_status_list_u32 *this);
+
+/** Initializes a bcmolt_epon_protection_switching_configuration struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_epon_protection_switching_configuration_set_default(bcmolt_epon_protection_switching_configuration *this);
+
+/** Packs a bcmolt_epon_protection_switching_configuration to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_protection_switching_configuration_pack(const bcmolt_epon_protection_switching_configuration *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_epon_protection_switching_configuration from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_protection_switching_configuration_unpack(bcmolt_epon_protection_switching_configuration *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_protection_switching_configuration struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_protection_switching_configuration_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_epon_protection_switching_configuration is 
+ * out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_protection_switching_configuration_bounds_check(const bcmolt_epon_protection_switching_configuration *this);
+
+/** Initializes a bcmolt_u8_list_u16 struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_u8_list_u16_set_default(bcmolt_u8_list_u16 *this);
+
+/** Packs a bcmolt_u8_list_u16 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_u8_list_u16_pack(const bcmolt_u8_list_u16 *this, bcmolt_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_u8_list_u16 would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_u8_list_u16_get_packed_length(const bcmolt_u8_list_u16 *this);
+
+/** Unpacks a bcmolt_u8_list_u16 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_u8_list_u16_unpack(bcmolt_u8_list_u16 *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_u8_list_u16 struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_u8_list_u16_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_u8_list_u16 is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_u8_list_u16_bounds_check(const bcmolt_u8_list_u16 *this);
+
+/** Initializes a bcmolt_ethernet_frame_masked struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_ethernet_frame_masked_set_default(bcmolt_ethernet_frame_masked *this);
+
+/** Packs a bcmolt_ethernet_frame_masked to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ethernet_frame_masked_pack(const bcmolt_ethernet_frame_masked *this, bcmolt_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_ethernet_frame_masked would occupy on 
+ * the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_ethernet_frame_masked_get_packed_length(const bcmolt_ethernet_frame_masked *this);
+
+/** Unpacks a bcmolt_ethernet_frame_masked from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ethernet_frame_masked_unpack(bcmolt_ethernet_frame_masked *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_ethernet_frame_masked struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_ethernet_frame_masked_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_ethernet_frame_masked is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ethernet_frame_masked_bounds_check(const bcmolt_ethernet_frame_masked *this);
+
+/** Initializes a bcmolt_ethernet_frame_unmasked struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_ethernet_frame_unmasked_set_default(bcmolt_ethernet_frame_unmasked *this);
+
+/** Packs a bcmolt_ethernet_frame_unmasked to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ethernet_frame_unmasked_pack(const bcmolt_ethernet_frame_unmasked *this, bcmolt_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_ethernet_frame_unmasked would occupy 
+ * on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_ethernet_frame_unmasked_get_packed_length(const bcmolt_ethernet_frame_unmasked *this);
+
+/** Unpacks a bcmolt_ethernet_frame_unmasked from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ethernet_frame_unmasked_unpack(bcmolt_ethernet_frame_unmasked *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_ethernet_frame_unmasked struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_ethernet_frame_unmasked_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_ethernet_frame_unmasked is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ethernet_frame_unmasked_bounds_check(const bcmolt_ethernet_frame_unmasked *this);
+
+/** Initializes a bcmolt_extended_guard_time struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_extended_guard_time_set_default(bcmolt_extended_guard_time *this);
+
+/** Packs a bcmolt_extended_guard_time to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_extended_guard_time_pack(const bcmolt_extended_guard_time *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_extended_guard_time from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_extended_guard_time_unpack(bcmolt_extended_guard_time *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_extended_guard_time struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_extended_guard_time_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_extended_guard_time is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_extended_guard_time_bounds_check(const bcmolt_extended_guard_time *this);
+
+/** Initializes a bcmolt_firmware_sw_version struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_firmware_sw_version_set_default(bcmolt_firmware_sw_version *this);
+
+/** Packs a bcmolt_firmware_sw_version to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_firmware_sw_version_pack(const bcmolt_firmware_sw_version *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_firmware_sw_version from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_firmware_sw_version_unpack(bcmolt_firmware_sw_version *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_firmware_sw_version struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_firmware_sw_version_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_firmware_sw_version is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_firmware_sw_version_bounds_check(const bcmolt_firmware_sw_version *this);
+
+/** Initializes a bcmolt_gem_port_configuration struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_gem_port_configuration_set_default(bcmolt_gem_port_configuration *this);
+
+/** Packs a bcmolt_gem_port_configuration to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gem_port_configuration_pack(const bcmolt_gem_port_configuration *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gem_port_configuration from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gem_port_configuration_unpack(bcmolt_gem_port_configuration *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_gem_port_configuration struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gem_port_configuration_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_gem_port_configuration is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gem_port_configuration_bounds_check(const bcmolt_gem_port_configuration *this);
+
+/** Initializes a bcmolt_gpon_alloc_with_state struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_gpon_alloc_with_state_set_default(bcmolt_gpon_alloc_with_state *this);
+
+/** Packs a bcmolt_gpon_alloc_with_state to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_alloc_with_state_pack(const bcmolt_gpon_alloc_with_state *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_alloc_with_state from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_alloc_with_state_unpack(bcmolt_gpon_alloc_with_state *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_gpon_alloc_with_state struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_alloc_with_state_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_gpon_alloc_with_state is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_alloc_with_state_bounds_check(const bcmolt_gpon_alloc_with_state *this);
+
+/** Initializes a bcmolt_gpon_alloc_with_state_list_u16_max_32 struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_gpon_alloc_with_state_list_u16_max_32_set_default(bcmolt_gpon_alloc_with_state_list_u16_max_32 *this);
+
+/** Packs a bcmolt_gpon_alloc_with_state_list_u16_max_32 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_alloc_with_state_list_u16_max_32_pack(const bcmolt_gpon_alloc_with_state_list_u16_max_32 *this, bcmolt_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_gpon_alloc_with_state_list_u16_max_32 
+ * would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_alloc_with_state_list_u16_max_32_get_packed_length(const bcmolt_gpon_alloc_with_state_list_u16_max_32 *this);
+
+/** Unpacks a bcmolt_gpon_alloc_with_state_list_u16_max_32 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_alloc_with_state_list_u16_max_32_unpack(bcmolt_gpon_alloc_with_state_list_u16_max_32 *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_gpon_alloc_with_state_list_u16_max_32 struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_alloc_with_state_list_u16_max_32_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_gpon_alloc_with_state_list_u16_max_32 is 
+ * out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_alloc_with_state_list_u16_max_32_bounds_check(const bcmolt_gpon_alloc_with_state_list_u16_max_32 *this);
+
+/** Initializes a bcmolt_gpon_debug_flow_config struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_gpon_debug_flow_config_set_default(bcmolt_gpon_debug_flow_config *this);
+
+/** Packs a bcmolt_gpon_debug_flow_config to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_debug_flow_config_pack(const bcmolt_gpon_debug_flow_config *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_debug_flow_config from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_debug_flow_config_unpack(bcmolt_gpon_debug_flow_config *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_gpon_debug_flow_config struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_debug_flow_config_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_gpon_debug_flow_config is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_debug_flow_config_bounds_check(const bcmolt_gpon_debug_flow_config *this);
+
+/** Initializes a bcmolt_gpon_gem_id_list_u8_max_16 struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_gpon_gem_id_list_u8_max_16_set_default(bcmolt_gpon_gem_id_list_u8_max_16 *this);
+
+/** Packs a bcmolt_gpon_gem_id_list_u8_max_16 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_gem_id_list_u8_max_16_pack(const bcmolt_gpon_gem_id_list_u8_max_16 *this, bcmolt_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_gpon_gem_id_list_u8_max_16 would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_gem_id_list_u8_max_16_get_packed_length(const bcmolt_gpon_gem_id_list_u8_max_16 *this);
+
+/** Unpacks a bcmolt_gpon_gem_id_list_u8_max_16 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_gem_id_list_u8_max_16_unpack(bcmolt_gpon_gem_id_list_u8_max_16 *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_gpon_gem_id_list_u8_max_16 struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_gem_id_list_u8_max_16_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_gpon_gem_id_list_u8_max_16 is out of 
+ * bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_gem_id_list_u8_max_16_bounds_check(const bcmolt_gpon_gem_id_list_u8_max_16 *this);
+
+/** Initializes a bcmolt_gpon_gem_port_with_state struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_gpon_gem_port_with_state_set_default(bcmolt_gpon_gem_port_with_state *this);
+
+/** Packs a bcmolt_gpon_gem_port_with_state to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_gem_port_with_state_pack(const bcmolt_gpon_gem_port_with_state *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_gem_port_with_state from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_gem_port_with_state_unpack(bcmolt_gpon_gem_port_with_state *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_gpon_gem_port_with_state struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_gem_port_with_state_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_gpon_gem_port_with_state is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_gem_port_with_state_bounds_check(const bcmolt_gpon_gem_port_with_state *this);
+
+/** Initializes a bcmolt_gpon_gem_port_with_state_list_u16_max_128 struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_gpon_gem_port_with_state_list_u16_max_128_set_default(bcmolt_gpon_gem_port_with_state_list_u16_max_128 *this);
+
+/** Packs a bcmolt_gpon_gem_port_with_state_list_u16_max_128 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_gem_port_with_state_list_u16_max_128_pack(const bcmolt_gpon_gem_port_with_state_list_u16_max_128 *this, bcmolt_buf *buf);
+
+/** Gets the number of bytes that a 
+ * bcmolt_gpon_gem_port_with_state_list_u16_max_128 would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_gem_port_with_state_list_u16_max_128_get_packed_length(const bcmolt_gpon_gem_port_with_state_list_u16_max_128 *this);
+
+/** Unpacks a bcmolt_gpon_gem_port_with_state_list_u16_max_128 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_gem_port_with_state_list_u16_max_128_unpack(bcmolt_gpon_gem_port_with_state_list_u16_max_128 *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_gpon_gem_port_with_state_list_u16_max_128 struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_gem_port_with_state_list_u16_max_128_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_gpon_gem_port_with_state_list_u16_max_128 
+ * is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_gem_port_with_state_list_u16_max_128_bounds_check(const bcmolt_gpon_gem_port_with_state_list_u16_max_128 *this);
+
+/** Initializes a bcmolt_gpon_gem_port_with_state_list_u16_max_256 struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_gpon_gem_port_with_state_list_u16_max_256_set_default(bcmolt_gpon_gem_port_with_state_list_u16_max_256 *this);
+
+/** Packs a bcmolt_gpon_gem_port_with_state_list_u16_max_256 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_gem_port_with_state_list_u16_max_256_pack(const bcmolt_gpon_gem_port_with_state_list_u16_max_256 *this, bcmolt_buf *buf);
+
+/** Gets the number of bytes that a 
+ * bcmolt_gpon_gem_port_with_state_list_u16_max_256 would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_gem_port_with_state_list_u16_max_256_get_packed_length(const bcmolt_gpon_gem_port_with_state_list_u16_max_256 *this);
+
+/** Unpacks a bcmolt_gpon_gem_port_with_state_list_u16_max_256 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_gem_port_with_state_list_u16_max_256_unpack(bcmolt_gpon_gem_port_with_state_list_u16_max_256 *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_gpon_gem_port_with_state_list_u16_max_256 struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_gem_port_with_state_list_u16_max_256_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_gpon_gem_port_with_state_list_u16_max_256 
+ * is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_gem_port_with_state_list_u16_max_256_bounds_check(const bcmolt_gpon_gem_port_with_state_list_u16_max_256 *this);
+
+/** Initializes a bcmolt_gpon_iwf_debug_flow_config struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_gpon_iwf_debug_flow_config_set_default(bcmolt_gpon_iwf_debug_flow_config *this);
+
+/** Packs a bcmolt_gpon_iwf_debug_flow_config to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_debug_flow_config_pack(const bcmolt_gpon_iwf_debug_flow_config *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_iwf_debug_flow_config from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_debug_flow_config_unpack(bcmolt_gpon_iwf_debug_flow_config *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_gpon_iwf_debug_flow_config struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_iwf_debug_flow_config_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_gpon_iwf_debug_flow_config is out of 
+ * bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_debug_flow_config_bounds_check(const bcmolt_gpon_iwf_debug_flow_config *this);
+
+/** Initializes a bcmolt_gpon_key_exchange struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_gpon_key_exchange_set_default(bcmolt_gpon_key_exchange *this);
+
+/** Packs a bcmolt_gpon_key_exchange to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_key_exchange_pack(const bcmolt_gpon_key_exchange *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_key_exchange from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_key_exchange_unpack(bcmolt_gpon_key_exchange *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_gpon_key_exchange struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_key_exchange_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_gpon_key_exchange is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_key_exchange_bounds_check(const bcmolt_gpon_key_exchange *this);
+
+/** Initializes a bcmolt_gpon_mac_table_scan_result struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_gpon_mac_table_scan_result_set_default(bcmolt_gpon_mac_table_scan_result *this);
+
+/** Packs a bcmolt_gpon_mac_table_scan_result to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_mac_table_scan_result_pack(const bcmolt_gpon_mac_table_scan_result *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_mac_table_scan_result from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_mac_table_scan_result_unpack(bcmolt_gpon_mac_table_scan_result *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_gpon_mac_table_scan_result struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_mac_table_scan_result_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_gpon_mac_table_scan_result is out of 
+ * bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_mac_table_scan_result_bounds_check(const bcmolt_gpon_mac_table_scan_result *this);
+
+/** Initializes a bcmolt_gpon_mac_table_scan_result_list_u16 struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_gpon_mac_table_scan_result_list_u16_set_default(bcmolt_gpon_mac_table_scan_result_list_u16 *this);
+
+/** Packs a bcmolt_gpon_mac_table_scan_result_list_u16 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_mac_table_scan_result_list_u16_pack(const bcmolt_gpon_mac_table_scan_result_list_u16 *this, bcmolt_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_gpon_mac_table_scan_result_list_u16 
+ * would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_mac_table_scan_result_list_u16_get_packed_length(const bcmolt_gpon_mac_table_scan_result_list_u16 *this);
+
+/** Unpacks a bcmolt_gpon_mac_table_scan_result_list_u16 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_mac_table_scan_result_list_u16_unpack(bcmolt_gpon_mac_table_scan_result_list_u16 *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_gpon_mac_table_scan_result_list_u16 struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_mac_table_scan_result_list_u16_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_gpon_mac_table_scan_result_list_u16 is out 
+ * of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_mac_table_scan_result_list_u16_bounds_check(const bcmolt_gpon_mac_table_scan_result_list_u16 *this);
+
+/** Initializes a bcmolt_gpon_ni_debug struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_gpon_ni_debug_set_default(bcmolt_gpon_ni_debug *this);
+
+/** Packs a bcmolt_gpon_ni_debug to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_debug_pack(const bcmolt_gpon_ni_debug *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_ni_debug from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_debug_unpack(bcmolt_gpon_ni_debug *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_gpon_ni_debug struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_ni_debug_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_gpon_ni_debug is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_debug_bounds_check(const bcmolt_gpon_ni_debug *this);
+
+/** Initializes a bcmolt_gpon_onu_activation struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_gpon_onu_activation_set_default(bcmolt_gpon_onu_activation *this);
+
+/** Packs a bcmolt_gpon_onu_activation to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_activation_pack(const bcmolt_gpon_onu_activation *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_activation from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_activation_unpack(bcmolt_gpon_onu_activation *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_gpon_onu_activation struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_activation_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_gpon_onu_activation is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_activation_bounds_check(const bcmolt_gpon_onu_activation *this);
+
+/** Initializes a bcmolt_gpon_onu_alarm_state struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_gpon_onu_alarm_state_set_default(bcmolt_gpon_onu_alarm_state *this);
+
+/** Packs a bcmolt_gpon_onu_alarm_state to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_alarm_state_pack(const bcmolt_gpon_onu_alarm_state *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_alarm_state from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_alarm_state_unpack(bcmolt_gpon_onu_alarm_state *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_gpon_onu_alarm_state struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_alarm_state_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_gpon_onu_alarm_state is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_alarm_state_bounds_check(const bcmolt_gpon_onu_alarm_state *this);
+
+/** Initializes a bcmolt_gpon_onu_alarms struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_gpon_onu_alarms_set_default(bcmolt_gpon_onu_alarms *this);
+
+/** Packs a bcmolt_gpon_onu_alarms to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_alarms_pack(const bcmolt_gpon_onu_alarms *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_alarms from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_alarms_unpack(bcmolt_gpon_onu_alarms *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_gpon_onu_alarms struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_alarms_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_gpon_onu_alarms is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_alarms_bounds_check(const bcmolt_gpon_onu_alarms *this);
+
+/** Initializes a bcmolt_gpon_onu_alarms_thresholds struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_gpon_onu_alarms_thresholds_set_default(bcmolt_gpon_onu_alarms_thresholds *this);
+
+/** Packs a bcmolt_gpon_onu_alarms_thresholds to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_alarms_thresholds_pack(const bcmolt_gpon_onu_alarms_thresholds *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_alarms_thresholds from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_alarms_thresholds_unpack(bcmolt_gpon_onu_alarms_thresholds *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_gpon_onu_alarms_thresholds struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_alarms_thresholds_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_gpon_onu_alarms_thresholds is out of 
+ * bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_alarms_thresholds_bounds_check(const bcmolt_gpon_onu_alarms_thresholds *this);
+
+/** Initializes a bcmolt_gpon_onu_eqd struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_gpon_onu_eqd_set_default(bcmolt_gpon_onu_eqd *this);
+
+/** Packs a bcmolt_gpon_onu_eqd to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_eqd_pack(const bcmolt_gpon_onu_eqd *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_eqd from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_eqd_unpack(bcmolt_gpon_onu_eqd *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_gpon_onu_eqd struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_eqd_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_gpon_onu_eqd is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_eqd_bounds_check(const bcmolt_gpon_onu_eqd *this);
+
+/** Initializes a bcmolt_gpon_onu_eqd_list_u32 struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_gpon_onu_eqd_list_u32_set_default(bcmolt_gpon_onu_eqd_list_u32 *this);
+
+/** Packs a bcmolt_gpon_onu_eqd_list_u32 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_eqd_list_u32_pack(const bcmolt_gpon_onu_eqd_list_u32 *this, bcmolt_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_gpon_onu_eqd_list_u32 would occupy on 
+ * the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_eqd_list_u32_get_packed_length(const bcmolt_gpon_onu_eqd_list_u32 *this);
+
+/** Unpacks a bcmolt_gpon_onu_eqd_list_u32 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_eqd_list_u32_unpack(bcmolt_gpon_onu_eqd_list_u32 *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_gpon_onu_eqd_list_u32 struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_eqd_list_u32_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_gpon_onu_eqd_list_u32 is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_eqd_list_u32_bounds_check(const bcmolt_gpon_onu_eqd_list_u32 *this);
+
+/** Initializes a bcmolt_gpon_onu_id_list_u32_max_256 struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_gpon_onu_id_list_u32_max_256_set_default(bcmolt_gpon_onu_id_list_u32_max_256 *this);
+
+/** Packs a bcmolt_gpon_onu_id_list_u32_max_256 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_id_list_u32_max_256_pack(const bcmolt_gpon_onu_id_list_u32_max_256 *this, bcmolt_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_gpon_onu_id_list_u32_max_256 would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_id_list_u32_max_256_get_packed_length(const bcmolt_gpon_onu_id_list_u32_max_256 *this);
+
+/** Unpacks a bcmolt_gpon_onu_id_list_u32_max_256 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_id_list_u32_max_256_unpack(bcmolt_gpon_onu_id_list_u32_max_256 *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_gpon_onu_id_list_u32_max_256 struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_id_list_u32_max_256_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_gpon_onu_id_list_u32_max_256 is out of 
+ * bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_id_list_u32_max_256_bounds_check(const bcmolt_gpon_onu_id_list_u32_max_256 *this);
+
+/** Initializes a bcmolt_gpon_onu_upgrade_params struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_gpon_onu_upgrade_params_set_default(bcmolt_gpon_onu_upgrade_params *this);
+
+/** Packs a bcmolt_gpon_onu_upgrade_params to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_upgrade_params_pack(const bcmolt_gpon_onu_upgrade_params *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_upgrade_params from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_upgrade_params_unpack(bcmolt_gpon_onu_upgrade_params *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_gpon_onu_upgrade_params struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_upgrade_params_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_gpon_onu_upgrade_params is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_upgrade_params_bounds_check(const bcmolt_gpon_onu_upgrade_params *this);
+
+/** Initializes a bcmolt_gpon_onu_upgrade_status struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_gpon_onu_upgrade_status_set_default(bcmolt_gpon_onu_upgrade_status *this);
+
+/** Packs a bcmolt_gpon_onu_upgrade_status to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_upgrade_status_pack(const bcmolt_gpon_onu_upgrade_status *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_upgrade_status from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_upgrade_status_unpack(bcmolt_gpon_onu_upgrade_status *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_gpon_onu_upgrade_status struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_upgrade_status_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_gpon_onu_upgrade_status is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_upgrade_status_bounds_check(const bcmolt_gpon_onu_upgrade_status *this);
+
+/** Initializes a bcmolt_gpon_onu_upgrade_status_list_u32 struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_gpon_onu_upgrade_status_list_u32_set_default(bcmolt_gpon_onu_upgrade_status_list_u32 *this);
+
+/** Packs a bcmolt_gpon_onu_upgrade_status_list_u32 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_upgrade_status_list_u32_pack(const bcmolt_gpon_onu_upgrade_status_list_u32 *this, bcmolt_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_gpon_onu_upgrade_status_list_u32 
+ * would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_upgrade_status_list_u32_get_packed_length(const bcmolt_gpon_onu_upgrade_status_list_u32 *this);
+
+/** Unpacks a bcmolt_gpon_onu_upgrade_status_list_u32 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_upgrade_status_list_u32_unpack(bcmolt_gpon_onu_upgrade_status_list_u32 *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_gpon_onu_upgrade_status_list_u32 struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_upgrade_status_list_u32_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_gpon_onu_upgrade_status_list_u32 is out of 
+ * bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_upgrade_status_list_u32_bounds_check(const bcmolt_gpon_onu_upgrade_status_list_u32 *this);
+
+/** Initializes a bcmolt_gpon_onu_with_state struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_gpon_onu_with_state_set_default(bcmolt_gpon_onu_with_state *this);
+
+/** Packs a bcmolt_gpon_onu_with_state to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_with_state_pack(const bcmolt_gpon_onu_with_state *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_onu_with_state from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_with_state_unpack(bcmolt_gpon_onu_with_state *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_gpon_onu_with_state struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_with_state_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_gpon_onu_with_state is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_with_state_bounds_check(const bcmolt_gpon_onu_with_state *this);
+
+/** Initializes a bcmolt_gpon_onu_with_state_list_u16_max_128 struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_gpon_onu_with_state_list_u16_max_128_set_default(bcmolt_gpon_onu_with_state_list_u16_max_128 *this);
+
+/** Packs a bcmolt_gpon_onu_with_state_list_u16_max_128 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_with_state_list_u16_max_128_pack(const bcmolt_gpon_onu_with_state_list_u16_max_128 *this, bcmolt_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_gpon_onu_with_state_list_u16_max_128 
+ * would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_with_state_list_u16_max_128_get_packed_length(const bcmolt_gpon_onu_with_state_list_u16_max_128 *this);
+
+/** Unpacks a bcmolt_gpon_onu_with_state_list_u16_max_128 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_with_state_list_u16_max_128_unpack(bcmolt_gpon_onu_with_state_list_u16_max_128 *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_gpon_onu_with_state_list_u16_max_128 struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_with_state_list_u16_max_128_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_gpon_onu_with_state_list_u16_max_128 is 
+ * out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_with_state_list_u16_max_128_bounds_check(const bcmolt_gpon_onu_with_state_list_u16_max_128 *this);
+
+/** Initializes a bcmolt_gpon_rssi_general_configuration struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_gpon_rssi_general_configuration_set_default(bcmolt_gpon_rssi_general_configuration *this);
+
+/** Packs a bcmolt_gpon_rssi_general_configuration to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_rssi_general_configuration_pack(const bcmolt_gpon_rssi_general_configuration *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_rssi_general_configuration from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_rssi_general_configuration_unpack(bcmolt_gpon_rssi_general_configuration *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_gpon_rssi_general_configuration struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_rssi_general_configuration_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_gpon_rssi_general_configuration is out of 
+ * bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_rssi_general_configuration_bounds_check(const bcmolt_gpon_rssi_general_configuration *this);
+
+/** Initializes a bcmolt_gpon_sn_acquisition struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_gpon_sn_acquisition_set_default(bcmolt_gpon_sn_acquisition *this);
+
+/** Packs a bcmolt_gpon_sn_acquisition to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_sn_acquisition_pack(const bcmolt_gpon_sn_acquisition *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_gpon_sn_acquisition from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_sn_acquisition_unpack(bcmolt_gpon_sn_acquisition *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_gpon_sn_acquisition struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_sn_acquisition_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_gpon_sn_acquisition is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_sn_acquisition_bounds_check(const bcmolt_gpon_sn_acquisition *this);
+
+/** Initializes a bcmolt_host_sw_version struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_host_sw_version_set_default(bcmolt_host_sw_version *this);
+
+/** Packs a bcmolt_host_sw_version to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_host_sw_version_pack(const bcmolt_host_sw_version *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_host_sw_version from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_host_sw_version_unpack(bcmolt_host_sw_version *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_host_sw_version struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_host_sw_version_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_host_sw_version is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_host_sw_version_bounds_check(const bcmolt_host_sw_version *this);
+
+/** Initializes a bcmolt_hw_pon_id struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_hw_pon_id_set_default(bcmolt_hw_pon_id *this);
+
+/** Packs a bcmolt_hw_pon_id to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_hw_pon_id_pack(const bcmolt_hw_pon_id *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_hw_pon_id from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_hw_pon_id_unpack(bcmolt_hw_pon_id *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_hw_pon_id struct and collects memory requirements 
+ * above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_hw_pon_id_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_hw_pon_id is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_hw_pon_id_bounds_check(const bcmolt_hw_pon_id *this);
+
+/** Initializes a bcmolt_ieee_8021as_port_identity struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_ieee_8021as_port_identity_set_default(bcmolt_ieee_8021as_port_identity *this);
+
+/** Packs a bcmolt_ieee_8021as_port_identity to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ieee_8021as_port_identity_pack(const bcmolt_ieee_8021as_port_identity *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_ieee_8021as_port_identity from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ieee_8021as_port_identity_unpack(bcmolt_ieee_8021as_port_identity *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_ieee_8021as_port_identity struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_ieee_8021as_port_identity_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_ieee_8021as_port_identity is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ieee_8021as_port_identity_bounds_check(const bcmolt_ieee_8021as_port_identity *this);
+
+/** Initializes a bcmolt_ieee_8021as_timestamp struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_ieee_8021as_timestamp_set_default(bcmolt_ieee_8021as_timestamp *this);
+
+/** Packs a bcmolt_ieee_8021as_timestamp to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ieee_8021as_timestamp_pack(const bcmolt_ieee_8021as_timestamp *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_ieee_8021as_timestamp from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ieee_8021as_timestamp_unpack(bcmolt_ieee_8021as_timestamp *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_ieee_8021as_timestamp struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_ieee_8021as_timestamp_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_ieee_8021as_timestamp is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ieee_8021as_timestamp_bounds_check(const bcmolt_ieee_8021as_timestamp *this);
+
+/** Initializes a bcmolt_ieee_8021as_time_sync struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_ieee_8021as_time_sync_set_default(bcmolt_ieee_8021as_time_sync *this);
+
+/** Packs a bcmolt_ieee_8021as_time_sync to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ieee_8021as_time_sync_pack(const bcmolt_ieee_8021as_time_sync *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_ieee_8021as_time_sync from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ieee_8021as_time_sync_unpack(bcmolt_ieee_8021as_time_sync *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_ieee_8021as_time_sync struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_ieee_8021as_time_sync_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_ieee_8021as_time_sync is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ieee_8021as_time_sync_bounds_check(const bcmolt_ieee_8021as_time_sync *this);
+
+/** Initializes a bcmolt_indication_shaping struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_indication_shaping_set_default(bcmolt_indication_shaping *this);
+
+/** Packs a bcmolt_indication_shaping to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_indication_shaping_pack(const bcmolt_indication_shaping *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_indication_shaping from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_indication_shaping_unpack(bcmolt_indication_shaping *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_indication_shaping struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_indication_shaping_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_indication_shaping is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_indication_shaping_bounds_check(const bcmolt_indication_shaping *this);
+
+/** Initializes a bcmolt_la_resync_pattern_configuration struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_la_resync_pattern_configuration_set_default(bcmolt_la_resync_pattern_configuration *this);
+
+/** Packs a bcmolt_la_resync_pattern_configuration to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_la_resync_pattern_configuration_pack(const bcmolt_la_resync_pattern_configuration *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_la_resync_pattern_configuration from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_la_resync_pattern_configuration_unpack(bcmolt_la_resync_pattern_configuration *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_la_resync_pattern_configuration struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_la_resync_pattern_configuration_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_la_resync_pattern_configuration is out of 
+ * bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_la_resync_pattern_configuration_bounds_check(const bcmolt_la_resync_pattern_configuration *this);
+
+/** Initializes a bcmolt_log_buffer struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_log_buffer_set_default(bcmolt_log_buffer *this);
+
+/** Packs a bcmolt_log_buffer to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_log_buffer_pack(const bcmolt_log_buffer *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_log_buffer from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_log_buffer_unpack(bcmolt_log_buffer *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_log_buffer struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_log_buffer_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_log_buffer is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_log_buffer_bounds_check(const bcmolt_log_buffer *this);
+
+/** Initializes a bcmolt_mac_table_configuration struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_mac_table_configuration_set_default(bcmolt_mac_table_configuration *this);
+
+/** Packs a bcmolt_mac_table_configuration to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_mac_table_configuration_pack(const bcmolt_mac_table_configuration *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_mac_table_configuration from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_mac_table_configuration_unpack(bcmolt_mac_table_configuration *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_mac_table_configuration struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_mac_table_configuration_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_mac_table_configuration is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_mac_table_configuration_bounds_check(const bcmolt_mac_table_configuration *this);
+
+/** Initializes a bcmolt_macaddress_list_u32 struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_macaddress_list_u32_set_default(bcmolt_macaddress_list_u32 *this);
+
+/** Packs a bcmolt_macaddress_list_u32 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_macaddress_list_u32_pack(const bcmolt_macaddress_list_u32 *this, bcmolt_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_macaddress_list_u32 would occupy on 
+ * the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_macaddress_list_u32_get_packed_length(const bcmolt_macaddress_list_u32 *this);
+
+/** Unpacks a bcmolt_macaddress_list_u32 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_macaddress_list_u32_unpack(bcmolt_macaddress_list_u32 *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_macaddress_list_u32 struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_macaddress_list_u32_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_macaddress_list_u32 is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_macaddress_list_u32_bounds_check(const bcmolt_macaddress_list_u32 *this);
+
+/** Initializes a bcmolt_macaddress_list_u32_max_2048 struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_macaddress_list_u32_max_2048_set_default(bcmolt_macaddress_list_u32_max_2048 *this);
+
+/** Packs a bcmolt_macaddress_list_u32_max_2048 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_macaddress_list_u32_max_2048_pack(const bcmolt_macaddress_list_u32_max_2048 *this, bcmolt_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_macaddress_list_u32_max_2048 would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_macaddress_list_u32_max_2048_get_packed_length(const bcmolt_macaddress_list_u32_max_2048 *this);
+
+/** Unpacks a bcmolt_macaddress_list_u32_max_2048 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_macaddress_list_u32_max_2048_unpack(bcmolt_macaddress_list_u32_max_2048 *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_macaddress_list_u32_max_2048 struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_macaddress_list_u32_max_2048_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_macaddress_list_u32_max_2048 is out of 
+ * bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_macaddress_list_u32_max_2048_bounds_check(const bcmolt_macaddress_list_u32_max_2048 *this);
+
+/** Initializes a bcmolt_nni_link_status struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_nni_link_status_set_default(bcmolt_nni_link_status *this);
+
+/** Packs a bcmolt_nni_link_status to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_nni_link_status_pack(const bcmolt_nni_link_status *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_nni_link_status from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_nni_link_status_unpack(bcmolt_nni_link_status *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_nni_link_status struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_nni_link_status_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_nni_link_status is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_nni_link_status_bounds_check(const bcmolt_nni_link_status *this);
+
+/** Initializes a bcmolt_oam_heartbeat_config struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_oam_heartbeat_config_set_default(bcmolt_oam_heartbeat_config *this);
+
+/** Packs a bcmolt_oam_heartbeat_config to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_oam_heartbeat_config_pack(const bcmolt_oam_heartbeat_config *this, bcmolt_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_oam_heartbeat_config would occupy on 
+ * the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_oam_heartbeat_config_get_packed_length(const bcmolt_oam_heartbeat_config *this);
+
+/** Unpacks a bcmolt_oam_heartbeat_config from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_oam_heartbeat_config_unpack(bcmolt_oam_heartbeat_config *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_oam_heartbeat_config struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_oam_heartbeat_config_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_oam_heartbeat_config is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_oam_heartbeat_config_bounds_check(const bcmolt_oam_heartbeat_config *this);
+
+/** Initializes a bcmolt_onu_power_management_configuration struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_onu_power_management_configuration_set_default(bcmolt_onu_power_management_configuration *this);
+
+/** Packs a bcmolt_onu_power_management_configuration to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_onu_power_management_configuration_pack(const bcmolt_onu_power_management_configuration *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_onu_power_management_configuration from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_onu_power_management_configuration_unpack(bcmolt_onu_power_management_configuration *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_onu_power_management_configuration struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_onu_power_management_configuration_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_onu_power_management_configuration is out 
+ * of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_onu_power_management_configuration_bounds_check(const bcmolt_onu_power_management_configuration *this);
+
+/** Initializes a bcmolt_onu_tuning_configuration struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_onu_tuning_configuration_set_default(bcmolt_onu_tuning_configuration *this);
+
+/** Packs a bcmolt_onu_tuning_configuration to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_onu_tuning_configuration_pack(const bcmolt_onu_tuning_configuration *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_onu_tuning_configuration from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_onu_tuning_configuration_unpack(bcmolt_onu_tuning_configuration *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_onu_tuning_configuration struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_onu_tuning_configuration_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_onu_tuning_configuration is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_onu_tuning_configuration_bounds_check(const bcmolt_onu_tuning_configuration *this);
+
+/** Initializes a bcmolt_pon_id struct.  This sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_pon_id_set_default(bcmolt_pon_id *this);
+
+/** Packs a bcmolt_pon_id to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_pon_id_pack(const bcmolt_pon_id *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_pon_id from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_pon_id_unpack(bcmolt_pon_id *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_pon_id struct and collects memory requirements 
+ * above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_pon_id_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_pon_id is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_pon_id_bounds_check(const bcmolt_pon_id *this);
+
+/** Initializes a bcmolt_operation_control struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_operation_control_set_default(bcmolt_operation_control *this);
+
+/** Packs a bcmolt_operation_control to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_operation_control_pack(const bcmolt_operation_control *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_operation_control from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_operation_control_unpack(bcmolt_operation_control *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_operation_control struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_operation_control_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_operation_control is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_operation_control_bounds_check(const bcmolt_operation_control *this);
+
+/** Initializes a bcmolt_periodic_standby_pon_monitoring struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_periodic_standby_pon_monitoring_set_default(bcmolt_periodic_standby_pon_monitoring *this);
+
+/** Packs a bcmolt_periodic_standby_pon_monitoring to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_periodic_standby_pon_monitoring_pack(const bcmolt_periodic_standby_pon_monitoring *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_periodic_standby_pon_monitoring from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_periodic_standby_pon_monitoring_unpack(bcmolt_periodic_standby_pon_monitoring *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_periodic_standby_pon_monitoring struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_periodic_standby_pon_monitoring_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_periodic_standby_pon_monitoring is out of 
+ * bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_periodic_standby_pon_monitoring_bounds_check(const bcmolt_periodic_standby_pon_monitoring *this);
+
+/** Initializes a bcmolt_pon_aggregate_shaper struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_pon_aggregate_shaper_set_default(bcmolt_pon_aggregate_shaper *this);
+
+/** Packs a bcmolt_pon_aggregate_shaper to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_pon_aggregate_shaper_pack(const bcmolt_pon_aggregate_shaper *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_pon_aggregate_shaper from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_pon_aggregate_shaper_unpack(bcmolt_pon_aggregate_shaper *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_pon_aggregate_shaper struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_pon_aggregate_shaper_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_pon_aggregate_shaper is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_pon_aggregate_shaper_bounds_check(const bcmolt_pon_aggregate_shaper *this);
+
+/** Initializes a bcmolt_pon_alloc_sla struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_pon_alloc_sla_set_default(bcmolt_pon_alloc_sla *this);
+
+/** Packs a bcmolt_pon_alloc_sla to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_pon_alloc_sla_pack(const bcmolt_pon_alloc_sla *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_pon_alloc_sla from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_pon_alloc_sla_unpack(bcmolt_pon_alloc_sla *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_pon_alloc_sla struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_pon_alloc_sla_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_pon_alloc_sla is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_pon_alloc_sla_bounds_check(const bcmolt_pon_alloc_sla *this);
+
+/** Initializes a bcmolt_pon_available_bandwidth struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_pon_available_bandwidth_set_default(bcmolt_pon_available_bandwidth *this);
+
+/** Packs a bcmolt_pon_available_bandwidth to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_pon_available_bandwidth_pack(const bcmolt_pon_available_bandwidth *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_pon_available_bandwidth from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_pon_available_bandwidth_unpack(bcmolt_pon_available_bandwidth *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_pon_available_bandwidth struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_pon_available_bandwidth_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_pon_available_bandwidth is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_pon_available_bandwidth_bounds_check(const bcmolt_pon_available_bandwidth *this);
+
+/** Initializes a bcmolt_pon_dba struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_pon_dba_set_default(bcmolt_pon_dba *this);
+
+/** Packs a bcmolt_pon_dba to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_pon_dba_pack(const bcmolt_pon_dba *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_pon_dba from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_pon_dba_unpack(bcmolt_pon_dba *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_pon_dba struct and collects memory requirements 
+ * above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_pon_dba_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_pon_dba is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_pon_dba_bounds_check(const bcmolt_pon_dba *this);
+
+/** Initializes a bcmolt_pon_distance struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_pon_distance_set_default(bcmolt_pon_distance *this);
+
+/** Packs a bcmolt_pon_distance to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_pon_distance_pack(const bcmolt_pon_distance *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_pon_distance from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_pon_distance_unpack(bcmolt_pon_distance *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_pon_distance struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_pon_distance_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_pon_distance is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_pon_distance_bounds_check(const bcmolt_pon_distance *this);
+
+/** Initializes a bcmolt_pon_drift_control struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_pon_drift_control_set_default(bcmolt_pon_drift_control *this);
+
+/** Packs a bcmolt_pon_drift_control to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_pon_drift_control_pack(const bcmolt_pon_drift_control *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_pon_drift_control from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_pon_drift_control_unpack(bcmolt_pon_drift_control *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_pon_drift_control struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_pon_drift_control_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_pon_drift_control is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_pon_drift_control_bounds_check(const bcmolt_pon_drift_control *this);
+
+/** Initializes a bcmolt_pon_onu_id_list_u32 struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_pon_onu_id_list_u32_set_default(bcmolt_pon_onu_id_list_u32 *this);
+
+/** Packs a bcmolt_pon_onu_id_list_u32 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_pon_onu_id_list_u32_pack(const bcmolt_pon_onu_id_list_u32 *this, bcmolt_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_pon_onu_id_list_u32 would occupy on 
+ * the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_pon_onu_id_list_u32_get_packed_length(const bcmolt_pon_onu_id_list_u32 *this);
+
+/** Unpacks a bcmolt_pon_onu_id_list_u32 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_pon_onu_id_list_u32_unpack(bcmolt_pon_onu_id_list_u32 *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_pon_onu_id_list_u32 struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_pon_onu_id_list_u32_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_pon_onu_id_list_u32 is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_pon_onu_id_list_u32_bounds_check(const bcmolt_pon_onu_id_list_u32 *this);
+
+/** Initializes a bcmolt_pon_power_level struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_pon_power_level_set_default(bcmolt_pon_power_level *this);
+
+/** Packs a bcmolt_pon_power_level to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_pon_power_level_pack(const bcmolt_pon_power_level *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_pon_power_level from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_pon_power_level_unpack(bcmolt_pon_power_level *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_pon_power_level struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_pon_power_level_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_pon_power_level is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_pon_power_level_bounds_check(const bcmolt_pon_power_level *this);
+
+/** Initializes a bcmolt_pon_protection_switching struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_pon_protection_switching_set_default(bcmolt_pon_protection_switching *this);
+
+/** Packs a bcmolt_pon_protection_switching to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_pon_protection_switching_pack(const bcmolt_pon_protection_switching *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_pon_protection_switching from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_pon_protection_switching_unpack(bcmolt_pon_protection_switching *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_pon_protection_switching struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_pon_protection_switching_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_pon_protection_switching is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_pon_protection_switching_bounds_check(const bcmolt_pon_protection_switching *this);
+
+/** Initializes a bcmolt_pon_status struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_pon_status_set_default(bcmolt_pon_status *this);
+
+/** Packs a bcmolt_pon_status to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_pon_status_pack(const bcmolt_pon_status *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_pon_status from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_pon_status_unpack(bcmolt_pon_status *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_pon_status struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_pon_status_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_pon_status is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_pon_status_bounds_check(const bcmolt_pon_status *this);
+
+/** Initializes a bcmolt_prbs_checker_config struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_prbs_checker_config_set_default(bcmolt_prbs_checker_config *this);
+
+/** Packs a bcmolt_prbs_checker_config to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_prbs_checker_config_pack(const bcmolt_prbs_checker_config *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_prbs_checker_config from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_prbs_checker_config_unpack(bcmolt_prbs_checker_config *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_prbs_checker_config struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_prbs_checker_config_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_prbs_checker_config is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_prbs_checker_config_bounds_check(const bcmolt_prbs_checker_config *this);
+
+/** Initializes a bcmolt_prbs_generator_config struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_prbs_generator_config_set_default(bcmolt_prbs_generator_config *this);
+
+/** Packs a bcmolt_prbs_generator_config to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_prbs_generator_config_pack(const bcmolt_prbs_generator_config *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_prbs_generator_config from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_prbs_generator_config_unpack(bcmolt_prbs_generator_config *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_prbs_generator_config struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_prbs_generator_config_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_prbs_generator_config is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_prbs_generator_config_bounds_check(const bcmolt_prbs_generator_config *this);
+
+/** Initializes a bcmolt_prbs_status struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_prbs_status_set_default(bcmolt_prbs_status *this);
+
+/** Packs a bcmolt_prbs_status to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_prbs_status_pack(const bcmolt_prbs_status *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_prbs_status from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_prbs_status_unpack(bcmolt_prbs_status *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_prbs_status struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_prbs_status_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_prbs_status is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_prbs_status_bounds_check(const bcmolt_prbs_status *this);
+
+/** Initializes a bcmolt_ranging_control_configuration struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_ranging_control_configuration_set_default(bcmolt_ranging_control_configuration *this);
+
+/** Packs a bcmolt_ranging_control_configuration to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ranging_control_configuration_pack(const bcmolt_ranging_control_configuration *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_ranging_control_configuration from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ranging_control_configuration_unpack(bcmolt_ranging_control_configuration *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_ranging_control_configuration struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_ranging_control_configuration_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_ranging_control_configuration is out of 
+ * bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ranging_control_configuration_bounds_check(const bcmolt_ranging_control_configuration *this);
+
+/** Initializes a bcmolt_ranging_resync_conditions struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_ranging_resync_conditions_set_default(bcmolt_ranging_resync_conditions *this);
+
+/** Packs a bcmolt_ranging_resync_conditions to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ranging_resync_conditions_pack(const bcmolt_ranging_resync_conditions *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_ranging_resync_conditions from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ranging_resync_conditions_unpack(bcmolt_ranging_resync_conditions *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_ranging_resync_conditions struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_ranging_resync_conditions_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_ranging_resync_conditions is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ranging_resync_conditions_bounds_check(const bcmolt_ranging_resync_conditions *this);
+
+/** Initializes a bcmolt_ranging_rssi_control struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_ranging_rssi_control_set_default(bcmolt_ranging_rssi_control *this);
+
+/** Packs a bcmolt_ranging_rssi_control to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ranging_rssi_control_pack(const bcmolt_ranging_rssi_control *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_ranging_rssi_control from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ranging_rssi_control_unpack(bcmolt_ranging_rssi_control *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_ranging_rssi_control struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_ranging_rssi_control_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_ranging_rssi_control is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ranging_rssi_control_bounds_check(const bcmolt_ranging_rssi_control *this);
+
+/** Initializes a bcmolt_request_registration_status struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_request_registration_status_set_default(bcmolt_request_registration_status *this);
+
+/** Packs a bcmolt_request_registration_status to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_request_registration_status_pack(const bcmolt_request_registration_status *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_request_registration_status from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_request_registration_status_unpack(bcmolt_request_registration_status *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_request_registration_status struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_request_registration_status_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_request_registration_status is out of 
+ * bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_request_registration_status_bounds_check(const bcmolt_request_registration_status *this);
+
+/** Initializes a bcmolt_rogue_detection_special_map struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_rogue_detection_special_map_set_default(bcmolt_rogue_detection_special_map *this);
+
+/** Packs a bcmolt_rogue_detection_special_map to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_rogue_detection_special_map_pack(const bcmolt_rogue_detection_special_map *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_rogue_detection_special_map from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_rogue_detection_special_map_unpack(bcmolt_rogue_detection_special_map *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_rogue_detection_special_map struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_rogue_detection_special_map_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_rogue_detection_special_map is out of 
+ * bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_rogue_detection_special_map_bounds_check(const bcmolt_rogue_detection_special_map *this);
+
+/** Initializes a bcmolt_rogue_detection_special_map_list_u32_max_8 struct.  
+ * This sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_rogue_detection_special_map_list_u32_max_8_set_default(bcmolt_rogue_detection_special_map_list_u32_max_8 *this);
+
+/** Packs a bcmolt_rogue_detection_special_map_list_u32_max_8 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_rogue_detection_special_map_list_u32_max_8_pack(const bcmolt_rogue_detection_special_map_list_u32_max_8 *this, bcmolt_buf *buf);
+
+/** Gets the number of bytes that a 
+ * bcmolt_rogue_detection_special_map_list_u32_max_8 would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_rogue_detection_special_map_list_u32_max_8_get_packed_length(const bcmolt_rogue_detection_special_map_list_u32_max_8 *this);
+
+/** Unpacks a bcmolt_rogue_detection_special_map_list_u32_max_8 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_rogue_detection_special_map_list_u32_max_8_unpack(bcmolt_rogue_detection_special_map_list_u32_max_8 *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_rogue_detection_special_map_list_u32_max_8 struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_rogue_detection_special_map_list_u32_max_8_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_rogue_detection_special_map_list_u32_max_8 
+ * is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_rogue_detection_special_map_list_u32_max_8_bounds_check(const bcmolt_rogue_detection_special_map_list_u32_max_8 *this);
+
+/** Initializes a bcmolt_rogue_detection_algorithm struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_rogue_detection_algorithm_set_default(bcmolt_rogue_detection_algorithm *this);
+
+/** Packs a bcmolt_rogue_detection_algorithm to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_rogue_detection_algorithm_pack(const bcmolt_rogue_detection_algorithm *this, bcmolt_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_rogue_detection_algorithm would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_rogue_detection_algorithm_get_packed_length(const bcmolt_rogue_detection_algorithm *this);
+
+/** Unpacks a bcmolt_rogue_detection_algorithm from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_rogue_detection_algorithm_unpack(bcmolt_rogue_detection_algorithm *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_rogue_detection_algorithm struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_rogue_detection_algorithm_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_rogue_detection_algorithm is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_rogue_detection_algorithm_bounds_check(const bcmolt_rogue_detection_algorithm *this);
+
+/** Initializes a bcmolt_rogue_onu_detection_process struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_rogue_onu_detection_process_set_default(bcmolt_rogue_onu_detection_process *this);
+
+/** Packs a bcmolt_rogue_onu_detection_process to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_rogue_onu_detection_process_pack(const bcmolt_rogue_onu_detection_process *this, bcmolt_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_rogue_onu_detection_process would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_rogue_onu_detection_process_get_packed_length(const bcmolt_rogue_onu_detection_process *this);
+
+/** Unpacks a bcmolt_rogue_onu_detection_process from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_rogue_onu_detection_process_unpack(bcmolt_rogue_onu_detection_process *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_rogue_onu_detection_process struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_rogue_onu_detection_process_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_rogue_onu_detection_process is out of 
+ * bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_rogue_onu_detection_process_bounds_check(const bcmolt_rogue_onu_detection_process *this);
+
+/** Initializes a bcmolt_serdes_configuration struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_serdes_configuration_set_default(bcmolt_serdes_configuration *this);
+
+/** Packs a bcmolt_serdes_configuration to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_serdes_configuration_pack(const bcmolt_serdes_configuration *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_serdes_configuration from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_serdes_configuration_unpack(bcmolt_serdes_configuration *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_serdes_configuration struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_serdes_configuration_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_serdes_configuration is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_serdes_configuration_bounds_check(const bcmolt_serdes_configuration *this);
+
+/** Initializes a bcmolt_serial_number struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_serial_number_set_default(bcmolt_serial_number *this);
+
+/** Packs a bcmolt_serial_number to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_serial_number_pack(const bcmolt_serial_number *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_serial_number from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_serial_number_unpack(bcmolt_serial_number *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_serial_number struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_serial_number_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_serial_number is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_serial_number_bounds_check(const bcmolt_serial_number *this);
+
+/** Initializes a bcmolt_solicited_scheduler struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_solicited_scheduler_set_default(bcmolt_solicited_scheduler *this);
+
+/** Packs a bcmolt_solicited_scheduler to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_solicited_scheduler_pack(const bcmolt_solicited_scheduler *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_solicited_scheduler from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_solicited_scheduler_unpack(bcmolt_solicited_scheduler *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_solicited_scheduler struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_solicited_scheduler_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_solicited_scheduler is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_solicited_scheduler_bounds_check(const bcmolt_solicited_scheduler *this);
+
+/** Initializes a bcmolt_stat_alarm_trigger_config struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_stat_alarm_trigger_config_set_default(bcmolt_stat_alarm_trigger_config *this);
+
+/** Packs a bcmolt_stat_alarm_trigger_config to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_stat_alarm_trigger_config_pack(const bcmolt_stat_alarm_trigger_config *this, bcmolt_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_stat_alarm_trigger_config would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_stat_alarm_trigger_config_get_packed_length(const bcmolt_stat_alarm_trigger_config *this);
+
+/** Unpacks a bcmolt_stat_alarm_trigger_config from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_stat_alarm_trigger_config_unpack(bcmolt_stat_alarm_trigger_config *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_stat_alarm_trigger_config struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_stat_alarm_trigger_config_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_stat_alarm_trigger_config is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_stat_alarm_trigger_config_bounds_check(const bcmolt_stat_alarm_trigger_config *this);
+
+/** Initializes a bcmolt_stat_alarm_soak_config struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_stat_alarm_soak_config_set_default(bcmolt_stat_alarm_soak_config *this);
+
+/** Packs a bcmolt_stat_alarm_soak_config to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_stat_alarm_soak_config_pack(const bcmolt_stat_alarm_soak_config *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_stat_alarm_soak_config from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_stat_alarm_soak_config_unpack(bcmolt_stat_alarm_soak_config *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_stat_alarm_soak_config struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_stat_alarm_soak_config_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_stat_alarm_soak_config is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_stat_alarm_soak_config_bounds_check(const bcmolt_stat_alarm_soak_config *this);
+
+/** Initializes a bcmolt_stat_alarm_config struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_stat_alarm_config_set_default(bcmolt_stat_alarm_config *this);
+
+/** Packs a bcmolt_stat_alarm_config to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_stat_alarm_config_pack(const bcmolt_stat_alarm_config *this, bcmolt_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_stat_alarm_config would occupy on the 
+ * wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_stat_alarm_config_get_packed_length(const bcmolt_stat_alarm_config *this);
+
+/** Unpacks a bcmolt_stat_alarm_config from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_stat_alarm_config_unpack(bcmolt_stat_alarm_config *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_stat_alarm_config struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_stat_alarm_config_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_stat_alarm_config is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_stat_alarm_config_bounds_check(const bcmolt_stat_alarm_config *this);
+
+/** Initializes a bcmolt_str_100 struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_str_100_set_default(bcmolt_str_100 *this);
+
+/** Packs a bcmolt_str_100 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_str_100_pack(const bcmolt_str_100 *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_str_100 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_str_100_unpack(bcmolt_str_100 *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_str_100 struct and collects memory requirements 
+ * above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_str_100_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_str_100 is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_str_100_bounds_check(const bcmolt_str_100 *this);
+
+/** Initializes a bcmolt_str_1000 struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_str_1000_set_default(bcmolt_str_1000 *this);
+
+/** Packs a bcmolt_str_1000 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_str_1000_pack(const bcmolt_str_1000 *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_str_1000 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_str_1000_unpack(bcmolt_str_1000 *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_str_1000 struct and collects memory requirements 
+ * above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_str_1000_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_str_1000 is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_str_1000_bounds_check(const bcmolt_str_1000 *this);
+
+/** Initializes a bcmolt_str_2000 struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_str_2000_set_default(bcmolt_str_2000 *this);
+
+/** Packs a bcmolt_str_2000 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_str_2000_pack(const bcmolt_str_2000 *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_str_2000 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_str_2000_unpack(bcmolt_str_2000 *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_str_2000 struct and collects memory requirements 
+ * above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_str_2000_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_str_2000 is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_str_2000_bounds_check(const bcmolt_str_2000 *this);
+
+/** Initializes a bcmolt_str_256 struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_str_256_set_default(bcmolt_str_256 *this);
+
+/** Packs a bcmolt_str_256 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_str_256_pack(const bcmolt_str_256 *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_str_256 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_str_256_unpack(bcmolt_str_256 *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_str_256 struct and collects memory requirements 
+ * above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_str_256_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_str_256 is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_str_256_bounds_check(const bcmolt_str_256 *this);
+
+/** Initializes a bcmolt_str_64 struct.  This sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_str_64_set_default(bcmolt_str_64 *this);
+
+/** Packs a bcmolt_str_64 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_str_64_pack(const bcmolt_str_64 *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_str_64 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_str_64_unpack(bcmolt_str_64 *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_str_64 struct and collects memory requirements 
+ * above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_str_64_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_str_64 is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_str_64_bounds_check(const bcmolt_str_64 *this);
+
+/** Initializes a bcmolt_sw_error struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_sw_error_set_default(bcmolt_sw_error *this);
+
+/** Packs a bcmolt_sw_error to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_sw_error_pack(const bcmolt_sw_error *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_sw_error from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_sw_error_unpack(bcmolt_sw_error *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_sw_error struct and collects memory requirements 
+ * above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_sw_error_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_sw_error is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_sw_error_bounds_check(const bcmolt_sw_error *this);
+
+/** Initializes a bcmolt_system_profile struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_system_profile_set_default(bcmolt_system_profile *this);
+
+/** Packs a bcmolt_system_profile to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_system_profile_pack(const bcmolt_system_profile *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_system_profile from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_system_profile_unpack(bcmolt_system_profile *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_system_profile struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_system_profile_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_system_profile is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_system_profile_bounds_check(const bcmolt_system_profile *this);
+
+/** Initializes a bcmolt_trx_delimiter struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_trx_delimiter_set_default(bcmolt_trx_delimiter *this);
+
+/** Packs a bcmolt_trx_delimiter to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_trx_delimiter_pack(const bcmolt_trx_delimiter *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_trx_delimiter from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_trx_delimiter_unpack(bcmolt_trx_delimiter *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_trx_delimiter struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_trx_delimiter_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_trx_delimiter is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_trx_delimiter_bounds_check(const bcmolt_trx_delimiter *this);
+
+/** Initializes a bcmolt_trx_energy_detect struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_trx_energy_detect_set_default(bcmolt_trx_energy_detect *this);
+
+/** Packs a bcmolt_trx_energy_detect to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_trx_energy_detect_pack(const bcmolt_trx_energy_detect *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_trx_energy_detect from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_trx_energy_detect_unpack(bcmolt_trx_energy_detect *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_trx_energy_detect struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_trx_energy_detect_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_trx_energy_detect is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_trx_energy_detect_bounds_check(const bcmolt_trx_energy_detect *this);
+
+/** Initializes a bcmolt_trx_preamble struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_trx_preamble_set_default(bcmolt_trx_preamble *this);
+
+/** Packs a bcmolt_trx_preamble to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_trx_preamble_pack(const bcmolt_trx_preamble *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_trx_preamble from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_trx_preamble_unpack(bcmolt_trx_preamble *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_trx_preamble struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_trx_preamble_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_trx_preamble is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_trx_preamble_bounds_check(const bcmolt_trx_preamble *this);
+
+/** Initializes a bcmolt_trx_rx_configuration struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_trx_rx_configuration_set_default(bcmolt_trx_rx_configuration *this);
+
+/** Packs a bcmolt_trx_rx_configuration to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_trx_rx_configuration_pack(const bcmolt_trx_rx_configuration *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_trx_rx_configuration from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_trx_rx_configuration_unpack(bcmolt_trx_rx_configuration *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_trx_rx_configuration struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_trx_rx_configuration_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_trx_rx_configuration is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_trx_rx_configuration_bounds_check(const bcmolt_trx_rx_configuration *this);
+
+/** Initializes a bcmolt_u32_list_u32_max_500_hex struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_u32_list_u32_max_500_hex_set_default(bcmolt_u32_list_u32_max_500_hex *this);
+
+/** Packs a bcmolt_u32_list_u32_max_500_hex to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_u32_list_u32_max_500_hex_pack(const bcmolt_u32_list_u32_max_500_hex *this, bcmolt_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_u32_list_u32_max_500_hex would occupy 
+ * on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_u32_list_u32_max_500_hex_get_packed_length(const bcmolt_u32_list_u32_max_500_hex *this);
+
+/** Unpacks a bcmolt_u32_list_u32_max_500_hex from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_u32_list_u32_max_500_hex_unpack(bcmolt_u32_list_u32_max_500_hex *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_u32_list_u32_max_500_hex struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_u32_list_u32_max_500_hex_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_u32_list_u32_max_500_hex is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_u32_list_u32_max_500_hex_bounds_check(const bcmolt_u32_list_u32_max_500_hex *this);
+
+/** Initializes a bcmolt_u8_list_u16_hex struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_u8_list_u16_hex_set_default(bcmolt_u8_list_u16_hex *this);
+
+/** Packs a bcmolt_u8_list_u16_hex to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_u8_list_u16_hex_pack(const bcmolt_u8_list_u16_hex *this, bcmolt_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_u8_list_u16_hex would occupy on the 
+ * wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_u8_list_u16_hex_get_packed_length(const bcmolt_u8_list_u16_hex *this);
+
+/** Unpacks a bcmolt_u8_list_u16_hex from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_u8_list_u16_hex_unpack(bcmolt_u8_list_u16_hex *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_u8_list_u16_hex struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_u8_list_u16_hex_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_u8_list_u16_hex is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_u8_list_u16_hex_bounds_check(const bcmolt_u8_list_u16_hex *this);
+
+/** Initializes a bcmolt_u8_list_u32 struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_u8_list_u32_set_default(bcmolt_u8_list_u32 *this);
+
+/** Packs a bcmolt_u8_list_u32 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_u8_list_u32_pack(const bcmolt_u8_list_u32 *this, bcmolt_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_u8_list_u32 would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_u8_list_u32_get_packed_length(const bcmolt_u8_list_u32 *this);
+
+/** Unpacks a bcmolt_u8_list_u32 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_u8_list_u32_unpack(bcmolt_u8_list_u32 *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_u8_list_u32 struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_u8_list_u32_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_u8_list_u32 is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_u8_list_u32_bounds_check(const bcmolt_u8_list_u32 *this);
+
+/** Initializes a bcmolt_u8_list_u32_max_2048 struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_u8_list_u32_max_2048_set_default(bcmolt_u8_list_u32_max_2048 *this);
+
+/** Packs a bcmolt_u8_list_u32_max_2048 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_u8_list_u32_max_2048_pack(const bcmolt_u8_list_u32_max_2048 *this, bcmolt_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_u8_list_u32_max_2048 would occupy on 
+ * the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_u8_list_u32_max_2048_get_packed_length(const bcmolt_u8_list_u32_max_2048 *this);
+
+/** Unpacks a bcmolt_u8_list_u32_max_2048 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_u8_list_u32_max_2048_unpack(bcmolt_u8_list_u32_max_2048 *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_u8_list_u32_max_2048 struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_u8_list_u32_max_2048_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_u8_list_u32_max_2048 is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_u8_list_u32_max_2048_bounds_check(const bcmolt_u8_list_u32_max_2048 *this);
+
+/** Initializes a bcmolt_ubd_info struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_ubd_info_set_default(bcmolt_ubd_info *this);
+
+/** Packs a bcmolt_ubd_info to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ubd_info_pack(const bcmolt_ubd_info *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_ubd_info from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ubd_info_unpack(bcmolt_ubd_info *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_ubd_info struct and collects memory requirements 
+ * above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_ubd_info_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_ubd_info is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ubd_info_bounds_check(const bcmolt_ubd_info *this);
+
+/** Initializes a bcmolt_upstream_bandwidth_distribution struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_upstream_bandwidth_distribution_set_default(bcmolt_upstream_bandwidth_distribution *this);
+
+/** Packs a bcmolt_upstream_bandwidth_distribution to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_upstream_bandwidth_distribution_pack(const bcmolt_upstream_bandwidth_distribution *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_upstream_bandwidth_distribution from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_upstream_bandwidth_distribution_unpack(bcmolt_upstream_bandwidth_distribution *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_upstream_bandwidth_distribution struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_upstream_bandwidth_distribution_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_upstream_bandwidth_distribution is out of 
+ * bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_upstream_bandwidth_distribution_bounds_check(const bcmolt_upstream_bandwidth_distribution *this);
+
+/** Initializes a bcmolt_vlan_tag struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_vlan_tag_set_default(bcmolt_vlan_tag *this);
+
+/** Packs a bcmolt_vlan_tag to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_vlan_tag_pack(const bcmolt_vlan_tag *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_vlan_tag from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_vlan_tag_unpack(bcmolt_vlan_tag *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_vlan_tag struct and collects memory requirements 
+ * above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_vlan_tag_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_vlan_tag is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_vlan_tag_bounds_check(const bcmolt_vlan_tag *this);
+
+/** Initializes a bcmolt_xgpon_alloc_with_state struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_xgpon_alloc_with_state_set_default(bcmolt_xgpon_alloc_with_state *this);
+
+/** Packs a bcmolt_xgpon_alloc_with_state to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_alloc_with_state_pack(const bcmolt_xgpon_alloc_with_state *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_alloc_with_state from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_alloc_with_state_unpack(bcmolt_xgpon_alloc_with_state *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_xgpon_alloc_with_state struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_alloc_with_state_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_xgpon_alloc_with_state is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_alloc_with_state_bounds_check(const bcmolt_xgpon_alloc_with_state *this);
+
+/** Initializes a bcmolt_xgpon_alloc_with_state_list_u16_max_32 struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_xgpon_alloc_with_state_list_u16_max_32_set_default(bcmolt_xgpon_alloc_with_state_list_u16_max_32 *this);
+
+/** Packs a bcmolt_xgpon_alloc_with_state_list_u16_max_32 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_alloc_with_state_list_u16_max_32_pack(const bcmolt_xgpon_alloc_with_state_list_u16_max_32 *this, bcmolt_buf *buf);
+
+/** Gets the number of bytes that a 
+ * bcmolt_xgpon_alloc_with_state_list_u16_max_32 would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_alloc_with_state_list_u16_max_32_get_packed_length(const bcmolt_xgpon_alloc_with_state_list_u16_max_32 *this);
+
+/** Unpacks a bcmolt_xgpon_alloc_with_state_list_u16_max_32 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_alloc_with_state_list_u16_max_32_unpack(bcmolt_xgpon_alloc_with_state_list_u16_max_32 *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_xgpon_alloc_with_state_list_u16_max_32 struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_alloc_with_state_list_u16_max_32_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_xgpon_alloc_with_state_list_u16_max_32 is 
+ * out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_alloc_with_state_list_u16_max_32_bounds_check(const bcmolt_xgpon_alloc_with_state_list_u16_max_32 *this);
+
+/** Initializes a bcmolt_xgpon_ed_state struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_xgpon_ed_state_set_default(bcmolt_xgpon_ed_state *this);
+
+/** Packs a bcmolt_xgpon_ed_state to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ed_state_pack(const bcmolt_xgpon_ed_state *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_ed_state from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ed_state_unpack(bcmolt_xgpon_ed_state *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_xgpon_ed_state struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_ed_state_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_xgpon_ed_state is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ed_state_bounds_check(const bcmolt_xgpon_ed_state *this);
+
+/** Initializes a bcmolt_xgpon_gem_id_list_u8_max_16 struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_xgpon_gem_id_list_u8_max_16_set_default(bcmolt_xgpon_gem_id_list_u8_max_16 *this);
+
+/** Packs a bcmolt_xgpon_gem_id_list_u8_max_16 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_gem_id_list_u8_max_16_pack(const bcmolt_xgpon_gem_id_list_u8_max_16 *this, bcmolt_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_xgpon_gem_id_list_u8_max_16 would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_gem_id_list_u8_max_16_get_packed_length(const bcmolt_xgpon_gem_id_list_u8_max_16 *this);
+
+/** Unpacks a bcmolt_xgpon_gem_id_list_u8_max_16 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_gem_id_list_u8_max_16_unpack(bcmolt_xgpon_gem_id_list_u8_max_16 *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_xgpon_gem_id_list_u8_max_16 struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_gem_id_list_u8_max_16_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_xgpon_gem_id_list_u8_max_16 is out of 
+ * bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_gem_id_list_u8_max_16_bounds_check(const bcmolt_xgpon_gem_id_list_u8_max_16 *this);
+
+/** Initializes a bcmolt_xgpon_gem_port_with_state struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_xgpon_gem_port_with_state_set_default(bcmolt_xgpon_gem_port_with_state *this);
+
+/** Packs a bcmolt_xgpon_gem_port_with_state to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_with_state_pack(const bcmolt_xgpon_gem_port_with_state *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_gem_port_with_state from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_with_state_unpack(bcmolt_xgpon_gem_port_with_state *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_xgpon_gem_port_with_state struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_with_state_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_xgpon_gem_port_with_state is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_with_state_bounds_check(const bcmolt_xgpon_gem_port_with_state *this);
+
+/** Initializes a bcmolt_xgpon_gem_port_with_state_list_u16_max_128 struct.  
+ * This sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_xgpon_gem_port_with_state_list_u16_max_128_set_default(bcmolt_xgpon_gem_port_with_state_list_u16_max_128 *this);
+
+/** Packs a bcmolt_xgpon_gem_port_with_state_list_u16_max_128 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_with_state_list_u16_max_128_pack(const bcmolt_xgpon_gem_port_with_state_list_u16_max_128 *this, bcmolt_buf *buf);
+
+/** Gets the number of bytes that a 
+ * bcmolt_xgpon_gem_port_with_state_list_u16_max_128 would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_gem_port_with_state_list_u16_max_128_get_packed_length(const bcmolt_xgpon_gem_port_with_state_list_u16_max_128 *this);
+
+/** Unpacks a bcmolt_xgpon_gem_port_with_state_list_u16_max_128 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_with_state_list_u16_max_128_unpack(bcmolt_xgpon_gem_port_with_state_list_u16_max_128 *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_xgpon_gem_port_with_state_list_u16_max_128 struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_with_state_list_u16_max_128_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_xgpon_gem_port_with_state_list_u16_max_128 
+ * is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_with_state_list_u16_max_128_bounds_check(const bcmolt_xgpon_gem_port_with_state_list_u16_max_128 *this);
+
+/** Initializes a bcmolt_xgpon_gem_port_with_state_list_u16_max_256 struct.  
+ * This sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_xgpon_gem_port_with_state_list_u16_max_256_set_default(bcmolt_xgpon_gem_port_with_state_list_u16_max_256 *this);
+
+/** Packs a bcmolt_xgpon_gem_port_with_state_list_u16_max_256 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_with_state_list_u16_max_256_pack(const bcmolt_xgpon_gem_port_with_state_list_u16_max_256 *this, bcmolt_buf *buf);
+
+/** Gets the number of bytes that a 
+ * bcmolt_xgpon_gem_port_with_state_list_u16_max_256 would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_gem_port_with_state_list_u16_max_256_get_packed_length(const bcmolt_xgpon_gem_port_with_state_list_u16_max_256 *this);
+
+/** Unpacks a bcmolt_xgpon_gem_port_with_state_list_u16_max_256 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_with_state_list_u16_max_256_unpack(bcmolt_xgpon_gem_port_with_state_list_u16_max_256 *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_xgpon_gem_port_with_state_list_u16_max_256 struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_with_state_list_u16_max_256_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_xgpon_gem_port_with_state_list_u16_max_256 
+ * is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_with_state_list_u16_max_256_bounds_check(const bcmolt_xgpon_gem_port_with_state_list_u16_max_256 *this);
+
+/** Initializes a bcmolt_xgpon_key_exchange struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_xgpon_key_exchange_set_default(bcmolt_xgpon_key_exchange *this);
+
+/** Packs a bcmolt_xgpon_key_exchange to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_key_exchange_pack(const bcmolt_xgpon_key_exchange *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_key_exchange from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_key_exchange_unpack(bcmolt_xgpon_key_exchange *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_xgpon_key_exchange struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_key_exchange_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_xgpon_key_exchange is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_key_exchange_bounds_check(const bcmolt_xgpon_key_exchange *this);
+
+/** Initializes a bcmolt_xgpon_multicast_key struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_xgpon_multicast_key_set_default(bcmolt_xgpon_multicast_key *this);
+
+/** Packs a bcmolt_xgpon_multicast_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_multicast_key_pack(const bcmolt_xgpon_multicast_key *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_multicast_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_multicast_key_unpack(bcmolt_xgpon_multicast_key *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_xgpon_multicast_key struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_multicast_key_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_xgpon_multicast_key is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_multicast_key_bounds_check(const bcmolt_xgpon_multicast_key *this);
+
+/** Initializes a bcmolt_xgpon_ni_debug struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_xgpon_ni_debug_set_default(bcmolt_xgpon_ni_debug *this);
+
+/** Packs a bcmolt_xgpon_ni_debug to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_debug_pack(const bcmolt_xgpon_ni_debug *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_ni_debug from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_debug_unpack(bcmolt_xgpon_ni_debug *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_xgpon_ni_debug struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_ni_debug_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_xgpon_ni_debug is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_debug_bounds_check(const bcmolt_xgpon_ni_debug *this);
+
+/** Initializes a bcmolt_xgpon_onu_activation struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_xgpon_onu_activation_set_default(bcmolt_xgpon_onu_activation *this);
+
+/** Packs a bcmolt_xgpon_onu_activation to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_activation_pack(const bcmolt_xgpon_onu_activation *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_activation from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_activation_unpack(bcmolt_xgpon_onu_activation *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_xgpon_onu_activation struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_activation_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_xgpon_onu_activation is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_activation_bounds_check(const bcmolt_xgpon_onu_activation *this);
+
+/** Initializes a bcmolt_xgpon_onu_aes_key struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_xgpon_onu_aes_key_set_default(bcmolt_xgpon_onu_aes_key *this);
+
+/** Packs a bcmolt_xgpon_onu_aes_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_aes_key_pack(const bcmolt_xgpon_onu_aes_key *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_aes_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_aes_key_unpack(bcmolt_xgpon_onu_aes_key *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_xgpon_onu_aes_key struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_aes_key_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_xgpon_onu_aes_key is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_aes_key_bounds_check(const bcmolt_xgpon_onu_aes_key *this);
+
+/** Initializes a bcmolt_xgpon_onu_alarm_state struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_xgpon_onu_alarm_state_set_default(bcmolt_xgpon_onu_alarm_state *this);
+
+/** Packs a bcmolt_xgpon_onu_alarm_state to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_alarm_state_pack(const bcmolt_xgpon_onu_alarm_state *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_alarm_state from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_alarm_state_unpack(bcmolt_xgpon_onu_alarm_state *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_xgpon_onu_alarm_state struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_alarm_state_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_xgpon_onu_alarm_state is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_alarm_state_bounds_check(const bcmolt_xgpon_onu_alarm_state *this);
+
+/** Initializes a bcmolt_xgpon_onu_alarms struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_xgpon_onu_alarms_set_default(bcmolt_xgpon_onu_alarms *this);
+
+/** Packs a bcmolt_xgpon_onu_alarms to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_alarms_pack(const bcmolt_xgpon_onu_alarms *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_alarms from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_alarms_unpack(bcmolt_xgpon_onu_alarms *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_xgpon_onu_alarms struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_alarms_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_xgpon_onu_alarms is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_alarms_bounds_check(const bcmolt_xgpon_onu_alarms *this);
+
+/** Initializes a bcmolt_xgpon_onu_alarms_thresholds struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_xgpon_onu_alarms_thresholds_set_default(bcmolt_xgpon_onu_alarms_thresholds *this);
+
+/** Packs a bcmolt_xgpon_onu_alarms_thresholds to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_alarms_thresholds_pack(const bcmolt_xgpon_onu_alarms_thresholds *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_alarms_thresholds from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_alarms_thresholds_unpack(bcmolt_xgpon_onu_alarms_thresholds *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_xgpon_onu_alarms_thresholds struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_alarms_thresholds_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_xgpon_onu_alarms_thresholds is out of 
+ * bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_alarms_thresholds_bounds_check(const bcmolt_xgpon_onu_alarms_thresholds *this);
+
+/** Initializes a bcmolt_xgpon_onu_eqd struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_xgpon_onu_eqd_set_default(bcmolt_xgpon_onu_eqd *this);
+
+/** Packs a bcmolt_xgpon_onu_eqd to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_eqd_pack(const bcmolt_xgpon_onu_eqd *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_eqd from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_eqd_unpack(bcmolt_xgpon_onu_eqd *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_xgpon_onu_eqd struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_eqd_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_xgpon_onu_eqd is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_eqd_bounds_check(const bcmolt_xgpon_onu_eqd *this);
+
+/** Initializes a bcmolt_xgpon_onu_eqd_list_u32 struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_xgpon_onu_eqd_list_u32_set_default(bcmolt_xgpon_onu_eqd_list_u32 *this);
+
+/** Packs a bcmolt_xgpon_onu_eqd_list_u32 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_eqd_list_u32_pack(const bcmolt_xgpon_onu_eqd_list_u32 *this, bcmolt_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_xgpon_onu_eqd_list_u32 would occupy 
+ * on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_eqd_list_u32_get_packed_length(const bcmolt_xgpon_onu_eqd_list_u32 *this);
+
+/** Unpacks a bcmolt_xgpon_onu_eqd_list_u32 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_eqd_list_u32_unpack(bcmolt_xgpon_onu_eqd_list_u32 *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_xgpon_onu_eqd_list_u32 struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_eqd_list_u32_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_xgpon_onu_eqd_list_u32 is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_eqd_list_u32_bounds_check(const bcmolt_xgpon_onu_eqd_list_u32 *this);
+
+/** Initializes a bcmolt_xgpon_onu_registration_keys struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_xgpon_onu_registration_keys_set_default(bcmolt_xgpon_onu_registration_keys *this);
+
+/** Packs a bcmolt_xgpon_onu_registration_keys to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_registration_keys_pack(const bcmolt_xgpon_onu_registration_keys *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_registration_keys from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_registration_keys_unpack(bcmolt_xgpon_onu_registration_keys *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_xgpon_onu_registration_keys struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_registration_keys_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_xgpon_onu_registration_keys is out of 
+ * bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_registration_keys_bounds_check(const bcmolt_xgpon_onu_registration_keys *this);
+
+/** Initializes a bcmolt_xgpon_onu_with_state struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_xgpon_onu_with_state_set_default(bcmolt_xgpon_onu_with_state *this);
+
+/** Packs a bcmolt_xgpon_onu_with_state to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_with_state_pack(const bcmolt_xgpon_onu_with_state *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_onu_with_state from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_with_state_unpack(bcmolt_xgpon_onu_with_state *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_xgpon_onu_with_state struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_with_state_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_xgpon_onu_with_state is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_with_state_bounds_check(const bcmolt_xgpon_onu_with_state *this);
+
+/** Initializes a bcmolt_xgpon_onu_with_state_list_u16_max_510 struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_xgpon_onu_with_state_list_u16_max_510_set_default(bcmolt_xgpon_onu_with_state_list_u16_max_510 *this);
+
+/** Packs a bcmolt_xgpon_onu_with_state_list_u16_max_510 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_with_state_list_u16_max_510_pack(const bcmolt_xgpon_onu_with_state_list_u16_max_510 *this, bcmolt_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_xgpon_onu_with_state_list_u16_max_510 
+ * would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_with_state_list_u16_max_510_get_packed_length(const bcmolt_xgpon_onu_with_state_list_u16_max_510 *this);
+
+/** Unpacks a bcmolt_xgpon_onu_with_state_list_u16_max_510 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_with_state_list_u16_max_510_unpack(bcmolt_xgpon_onu_with_state_list_u16_max_510 *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_xgpon_onu_with_state_list_u16_max_510 struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_with_state_list_u16_max_510_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_xgpon_onu_with_state_list_u16_max_510 is 
+ * out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_with_state_list_u16_max_510_bounds_check(const bcmolt_xgpon_onu_with_state_list_u16_max_510 *this);
+
+/** Initializes a bcmolt_xgpon_ploam_handling struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_xgpon_ploam_handling_set_default(bcmolt_xgpon_ploam_handling *this);
+
+/** Packs a bcmolt_xgpon_ploam_handling to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ploam_handling_pack(const bcmolt_xgpon_ploam_handling *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_ploam_handling from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ploam_handling_unpack(bcmolt_xgpon_ploam_handling *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_xgpon_ploam_handling struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_ploam_handling_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_xgpon_ploam_handling is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ploam_handling_bounds_check(const bcmolt_xgpon_ploam_handling *this);
+
+/** Initializes a bcmolt_xgpon_protection_switching struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_xgpon_protection_switching_set_default(bcmolt_xgpon_protection_switching *this);
+
+/** Packs a bcmolt_xgpon_protection_switching to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_protection_switching_pack(const bcmolt_xgpon_protection_switching *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_protection_switching from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_protection_switching_unpack(bcmolt_xgpon_protection_switching *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_xgpon_protection_switching struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_protection_switching_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_xgpon_protection_switching is out of 
+ * bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_protection_switching_bounds_check(const bcmolt_xgpon_protection_switching *this);
+
+/** Initializes a bcmolt_xgpon_protection_switching_debug struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_xgpon_protection_switching_debug_set_default(bcmolt_xgpon_protection_switching_debug *this);
+
+/** Packs a bcmolt_xgpon_protection_switching_debug to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_protection_switching_debug_pack(const bcmolt_xgpon_protection_switching_debug *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_protection_switching_debug from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_protection_switching_debug_unpack(bcmolt_xgpon_protection_switching_debug *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_xgpon_protection_switching_debug struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_protection_switching_debug_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_xgpon_protection_switching_debug is out of 
+ * bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_protection_switching_debug_bounds_check(const bcmolt_xgpon_protection_switching_debug *this);
+
+/** Initializes a bcmolt_xgpon_rssi_normal_config struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_xgpon_rssi_normal_config_set_default(bcmolt_xgpon_rssi_normal_config *this);
+
+/** Packs a bcmolt_xgpon_rssi_normal_config to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_rssi_normal_config_pack(const bcmolt_xgpon_rssi_normal_config *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_rssi_normal_config from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_rssi_normal_config_unpack(bcmolt_xgpon_rssi_normal_config *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_xgpon_rssi_normal_config struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_rssi_normal_config_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_xgpon_rssi_normal_config is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_rssi_normal_config_bounds_check(const bcmolt_xgpon_rssi_normal_config *this);
+
+/** Initializes a bcmolt_xgpon_rssi_ranging_config struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_xgpon_rssi_ranging_config_set_default(bcmolt_xgpon_rssi_ranging_config *this);
+
+/** Packs a bcmolt_xgpon_rssi_ranging_config to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_rssi_ranging_config_pack(const bcmolt_xgpon_rssi_ranging_config *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_rssi_ranging_config from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_rssi_ranging_config_unpack(bcmolt_xgpon_rssi_ranging_config *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_xgpon_rssi_ranging_config struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_rssi_ranging_config_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_xgpon_rssi_ranging_config is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_rssi_ranging_config_bounds_check(const bcmolt_xgpon_rssi_ranging_config *this);
+
+/** Initializes a bcmolt_xgpon_rx_ranging_sm_pattern struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_xgpon_rx_ranging_sm_pattern_set_default(bcmolt_xgpon_rx_ranging_sm_pattern *this);
+
+/** Packs a bcmolt_xgpon_rx_ranging_sm_pattern to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_rx_ranging_sm_pattern_pack(const bcmolt_xgpon_rx_ranging_sm_pattern *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_rx_ranging_sm_pattern from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_rx_ranging_sm_pattern_unpack(bcmolt_xgpon_rx_ranging_sm_pattern *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_xgpon_rx_ranging_sm_pattern struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_rx_ranging_sm_pattern_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_xgpon_rx_ranging_sm_pattern is out of 
+ * bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_rx_ranging_sm_pattern_bounds_check(const bcmolt_xgpon_rx_ranging_sm_pattern *this);
+
+/** Initializes a bcmolt_xgpon_serdes_configuration struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_xgpon_serdes_configuration_set_default(bcmolt_xgpon_serdes_configuration *this);
+
+/** Packs a bcmolt_xgpon_serdes_configuration to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_serdes_configuration_pack(const bcmolt_xgpon_serdes_configuration *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_serdes_configuration from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_serdes_configuration_unpack(bcmolt_xgpon_serdes_configuration *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_xgpon_serdes_configuration struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_serdes_configuration_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_xgpon_serdes_configuration is out of 
+ * bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_serdes_configuration_bounds_check(const bcmolt_xgpon_serdes_configuration *this);
+
+/** Initializes a bcmolt_xgpon_sn_acquisition struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_xgpon_sn_acquisition_set_default(bcmolt_xgpon_sn_acquisition *this);
+
+/** Packs a bcmolt_xgpon_sn_acquisition to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_sn_acquisition_pack(const bcmolt_xgpon_sn_acquisition *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_sn_acquisition from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_sn_acquisition_unpack(bcmolt_xgpon_sn_acquisition *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_xgpon_sn_acquisition struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_sn_acquisition_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_xgpon_sn_acquisition is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_sn_acquisition_bounds_check(const bcmolt_xgpon_sn_acquisition *this);
+
+/** Initializes a bcmolt_xgpon_trx_debug struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ */
+void bcmolt_xgpon_trx_debug_set_default(bcmolt_xgpon_trx_debug *this);
+
+/** Packs a bcmolt_xgpon_trx_debug to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_trx_debug_pack(const bcmolt_xgpon_trx_debug *this, bcmolt_buf *buf);
+
+/** Unpacks a bcmolt_xgpon_trx_debug from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_trx_debug_unpack(bcmolt_xgpon_trx_debug *this, bcmolt_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_xgpon_trx_debug struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_trx_debug_scan(bcmolt_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmolt_xgpon_trx_debug is out of bounds 
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_trx_debug_bounds_check(const bcmolt_xgpon_trx_debug *this);
+
+/** Initializes a bcmolt_ae_ni_key struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_ae_ni_key_set_default(bcmolt_ae_ni_key *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_ae_ni_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ae_ni_key_pack(const bcmolt_ae_ni_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_ae_ni_key would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_ae_ni_key_get_packed_length(const bcmolt_ae_ni_key *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_ae_ni_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ae_ni_key_unpack(bcmolt_ae_ni_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_ae_ni_key struct and collects memory requirements 
+ * above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_ae_ni_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_ae_ni_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ae_ni_key_bounds_check(const bcmolt_ae_ni_key *this, bcmolt_presence_mask fields_present, bcmolt_ae_ni_key_id *failed_prop);
+
+/** Initializes a bcmolt_ae_ni_cfg_data struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_ae_ni_cfg_data_set_default(bcmolt_ae_ni_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_ae_ni_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ae_ni_cfg_data_pack(const bcmolt_ae_ni_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_ae_ni_cfg_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_ae_ni_cfg_data_get_packed_length(const bcmolt_ae_ni_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_ae_ni_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ae_ni_cfg_data_unpack(bcmolt_ae_ni_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_ae_ni_cfg_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_ae_ni_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_ae_ni_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ae_ni_cfg_data_bounds_check(const bcmolt_ae_ni_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_ae_ni_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_ae_ni_set_ae_ni_en_state_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_ae_ni_set_ae_ni_en_state_data_set_default(bcmolt_ae_ni_set_ae_ni_en_state_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_ae_ni_set_ae_ni_en_state_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ae_ni_set_ae_ni_en_state_data_pack(const bcmolt_ae_ni_set_ae_ni_en_state_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_ae_ni_set_ae_ni_en_state_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_ae_ni_set_ae_ni_en_state_data_get_packed_length(const bcmolt_ae_ni_set_ae_ni_en_state_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_ae_ni_set_ae_ni_en_state_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ae_ni_set_ae_ni_en_state_data_unpack(bcmolt_ae_ni_set_ae_ni_en_state_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_ae_ni_set_ae_ni_en_state_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_ae_ni_set_ae_ni_en_state_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_ae_ni_set_ae_ni_en_state_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ae_ni_set_ae_ni_en_state_data_bounds_check(const bcmolt_ae_ni_set_ae_ni_en_state_data *this, bcmolt_presence_mask fields_present, bcmolt_ae_ni_set_ae_ni_en_state_id *failed_prop);
+
+/** Initializes a bcmolt_ae_path_ds_key struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_ae_path_ds_key_set_default(bcmolt_ae_path_ds_key *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_ae_path_ds_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ae_path_ds_key_pack(const bcmolt_ae_path_ds_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_ae_path_ds_key would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_ae_path_ds_key_get_packed_length(const bcmolt_ae_path_ds_key *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_ae_path_ds_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ae_path_ds_key_unpack(bcmolt_ae_path_ds_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_ae_path_ds_key struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_ae_path_ds_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_ae_path_ds_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ae_path_ds_key_bounds_check(const bcmolt_ae_path_ds_key *this, bcmolt_presence_mask fields_present, bcmolt_ae_path_ds_key_id *failed_prop);
+
+/** Initializes a bcmolt_ae_path_ds_stat_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_ae_path_ds_stat_data_set_default(bcmolt_ae_path_ds_stat_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_ae_path_ds_stat_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ae_path_ds_stat_data_pack(const bcmolt_ae_path_ds_stat_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_ae_path_ds_stat_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_ae_path_ds_stat_data_get_packed_length(const bcmolt_ae_path_ds_stat_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_ae_path_ds_stat_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ae_path_ds_stat_data_unpack(bcmolt_ae_path_ds_stat_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_ae_path_ds_stat_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_ae_path_ds_stat_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_ae_path_ds_stat_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ae_path_ds_stat_data_bounds_check(const bcmolt_ae_path_ds_stat_data *this, bcmolt_presence_mask fields_present, bcmolt_ae_path_ds_stat_id *failed_prop);
+
+/** Initializes a bcmolt_ae_path_ds_stat_cfg_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_ae_path_ds_stat_cfg_data_set_default(bcmolt_ae_path_ds_stat_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_ae_path_ds_stat_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ae_path_ds_stat_cfg_data_pack(const bcmolt_ae_path_ds_stat_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_ae_path_ds_stat_cfg_data would occupy 
+ * on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_ae_path_ds_stat_cfg_data_get_packed_length(const bcmolt_ae_path_ds_stat_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_ae_path_ds_stat_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ae_path_ds_stat_cfg_data_unpack(bcmolt_ae_path_ds_stat_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_ae_path_ds_stat_cfg_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_ae_path_ds_stat_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_ae_path_ds_stat_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ae_path_ds_stat_cfg_data_bounds_check(const bcmolt_ae_path_ds_stat_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_ae_path_ds_stat_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_ae_path_ds_stat_alarm_cleared_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_ae_path_ds_stat_alarm_cleared_data_set_default(bcmolt_ae_path_ds_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_ae_path_ds_stat_alarm_cleared_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ae_path_ds_stat_alarm_cleared_data_pack(const bcmolt_ae_path_ds_stat_alarm_cleared_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_ae_path_ds_stat_alarm_cleared_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_ae_path_ds_stat_alarm_cleared_data_get_packed_length(const bcmolt_ae_path_ds_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_ae_path_ds_stat_alarm_cleared_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ae_path_ds_stat_alarm_cleared_data_unpack(bcmolt_ae_path_ds_stat_alarm_cleared_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_ae_path_ds_stat_alarm_cleared_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_ae_path_ds_stat_alarm_cleared_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_ae_path_ds_stat_alarm_cleared_data is out 
+ * of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ae_path_ds_stat_alarm_cleared_data_bounds_check(const bcmolt_ae_path_ds_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present, bcmolt_ae_path_ds_stat_alarm_cleared_id *failed_prop);
+
+/** Initializes a bcmolt_ae_path_ds_stat_alarm_raised_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_ae_path_ds_stat_alarm_raised_data_set_default(bcmolt_ae_path_ds_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_ae_path_ds_stat_alarm_raised_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ae_path_ds_stat_alarm_raised_data_pack(const bcmolt_ae_path_ds_stat_alarm_raised_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_ae_path_ds_stat_alarm_raised_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_ae_path_ds_stat_alarm_raised_data_get_packed_length(const bcmolt_ae_path_ds_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_ae_path_ds_stat_alarm_raised_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ae_path_ds_stat_alarm_raised_data_unpack(bcmolt_ae_path_ds_stat_alarm_raised_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_ae_path_ds_stat_alarm_raised_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_ae_path_ds_stat_alarm_raised_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_ae_path_ds_stat_alarm_raised_data is out 
+ * of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ae_path_ds_stat_alarm_raised_data_bounds_check(const bcmolt_ae_path_ds_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present, bcmolt_ae_path_ds_stat_alarm_raised_id *failed_prop);
+
+/** Initializes a bcmolt_ae_path_ds_auto_cfg_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_ae_path_ds_auto_cfg_data_set_default(bcmolt_ae_path_ds_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_ae_path_ds_auto_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ae_path_ds_auto_cfg_data_pack(const bcmolt_ae_path_ds_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_ae_path_ds_auto_cfg_data would occupy 
+ * on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_ae_path_ds_auto_cfg_data_get_packed_length(const bcmolt_ae_path_ds_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_ae_path_ds_auto_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ae_path_ds_auto_cfg_data_unpack(bcmolt_ae_path_ds_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_ae_path_ds_auto_cfg_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_ae_path_ds_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_ae_path_ds_auto_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ae_path_ds_auto_cfg_data_bounds_check(const bcmolt_ae_path_ds_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_ae_path_ds_auto_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_ae_path_us_key struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_ae_path_us_key_set_default(bcmolt_ae_path_us_key *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_ae_path_us_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ae_path_us_key_pack(const bcmolt_ae_path_us_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_ae_path_us_key would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_ae_path_us_key_get_packed_length(const bcmolt_ae_path_us_key *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_ae_path_us_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ae_path_us_key_unpack(bcmolt_ae_path_us_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_ae_path_us_key struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_ae_path_us_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_ae_path_us_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ae_path_us_key_bounds_check(const bcmolt_ae_path_us_key *this, bcmolt_presence_mask fields_present, bcmolt_ae_path_us_key_id *failed_prop);
+
+/** Initializes a bcmolt_ae_path_us_stat_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_ae_path_us_stat_data_set_default(bcmolt_ae_path_us_stat_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_ae_path_us_stat_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ae_path_us_stat_data_pack(const bcmolt_ae_path_us_stat_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_ae_path_us_stat_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_ae_path_us_stat_data_get_packed_length(const bcmolt_ae_path_us_stat_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_ae_path_us_stat_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ae_path_us_stat_data_unpack(bcmolt_ae_path_us_stat_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_ae_path_us_stat_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_ae_path_us_stat_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_ae_path_us_stat_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ae_path_us_stat_data_bounds_check(const bcmolt_ae_path_us_stat_data *this, bcmolt_presence_mask fields_present, bcmolt_ae_path_us_stat_id *failed_prop);
+
+/** Initializes a bcmolt_ae_path_us_stat_cfg_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_ae_path_us_stat_cfg_data_set_default(bcmolt_ae_path_us_stat_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_ae_path_us_stat_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ae_path_us_stat_cfg_data_pack(const bcmolt_ae_path_us_stat_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_ae_path_us_stat_cfg_data would occupy 
+ * on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_ae_path_us_stat_cfg_data_get_packed_length(const bcmolt_ae_path_us_stat_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_ae_path_us_stat_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ae_path_us_stat_cfg_data_unpack(bcmolt_ae_path_us_stat_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_ae_path_us_stat_cfg_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_ae_path_us_stat_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_ae_path_us_stat_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ae_path_us_stat_cfg_data_bounds_check(const bcmolt_ae_path_us_stat_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_ae_path_us_stat_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_ae_path_us_stat_alarm_cleared_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_ae_path_us_stat_alarm_cleared_data_set_default(bcmolt_ae_path_us_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_ae_path_us_stat_alarm_cleared_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ae_path_us_stat_alarm_cleared_data_pack(const bcmolt_ae_path_us_stat_alarm_cleared_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_ae_path_us_stat_alarm_cleared_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_ae_path_us_stat_alarm_cleared_data_get_packed_length(const bcmolt_ae_path_us_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_ae_path_us_stat_alarm_cleared_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ae_path_us_stat_alarm_cleared_data_unpack(bcmolt_ae_path_us_stat_alarm_cleared_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_ae_path_us_stat_alarm_cleared_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_ae_path_us_stat_alarm_cleared_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_ae_path_us_stat_alarm_cleared_data is out 
+ * of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ae_path_us_stat_alarm_cleared_data_bounds_check(const bcmolt_ae_path_us_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present, bcmolt_ae_path_us_stat_alarm_cleared_id *failed_prop);
+
+/** Initializes a bcmolt_ae_path_us_stat_alarm_raised_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_ae_path_us_stat_alarm_raised_data_set_default(bcmolt_ae_path_us_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_ae_path_us_stat_alarm_raised_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ae_path_us_stat_alarm_raised_data_pack(const bcmolt_ae_path_us_stat_alarm_raised_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_ae_path_us_stat_alarm_raised_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_ae_path_us_stat_alarm_raised_data_get_packed_length(const bcmolt_ae_path_us_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_ae_path_us_stat_alarm_raised_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ae_path_us_stat_alarm_raised_data_unpack(bcmolt_ae_path_us_stat_alarm_raised_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_ae_path_us_stat_alarm_raised_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_ae_path_us_stat_alarm_raised_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_ae_path_us_stat_alarm_raised_data is out 
+ * of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ae_path_us_stat_alarm_raised_data_bounds_check(const bcmolt_ae_path_us_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present, bcmolt_ae_path_us_stat_alarm_raised_id *failed_prop);
+
+/** Initializes a bcmolt_ae_path_us_auto_cfg_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_ae_path_us_auto_cfg_data_set_default(bcmolt_ae_path_us_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_ae_path_us_auto_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ae_path_us_auto_cfg_data_pack(const bcmolt_ae_path_us_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_ae_path_us_auto_cfg_data would occupy 
+ * on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_ae_path_us_auto_cfg_data_get_packed_length(const bcmolt_ae_path_us_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_ae_path_us_auto_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ae_path_us_auto_cfg_data_unpack(bcmolt_ae_path_us_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_ae_path_us_auto_cfg_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_ae_path_us_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_ae_path_us_auto_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_ae_path_us_auto_cfg_data_bounds_check(const bcmolt_ae_path_us_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_ae_path_us_auto_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_channel_key struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_channel_key_set_default(bcmolt_channel_key *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_channel_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_channel_key_pack(const bcmolt_channel_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_channel_key would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_channel_key_get_packed_length(const bcmolt_channel_key *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_channel_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_channel_key_unpack(bcmolt_channel_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_channel_key struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_channel_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_channel_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_channel_key_bounds_check(const bcmolt_channel_key *this, bcmolt_presence_mask fields_present, bcmolt_channel_key_id *failed_prop);
+
+/** Initializes a bcmolt_channel_cfg_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_channel_cfg_data_set_default(bcmolt_channel_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_channel_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_channel_cfg_data_pack(const bcmolt_channel_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_channel_cfg_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_channel_cfg_data_get_packed_length(const bcmolt_channel_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_channel_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_channel_cfg_data_unpack(bcmolt_channel_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_channel_cfg_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_channel_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_channel_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_channel_cfg_data_bounds_check(const bcmolt_channel_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_channel_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_debug_key struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_debug_key_set_default(bcmolt_debug_key *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_debug_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_debug_key_pack(const bcmolt_debug_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_debug_key would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_debug_key_get_packed_length(const bcmolt_debug_key *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_debug_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_debug_key_unpack(bcmolt_debug_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_debug_key struct and collects memory requirements 
+ * above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_debug_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_debug_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_debug_key_bounds_check(const bcmolt_debug_key *this, bcmolt_presence_mask fields_present, bcmolt_debug_key_id *failed_prop);
+
+/** Initializes a bcmolt_debug_cfg_data struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_debug_cfg_data_set_default(bcmolt_debug_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_debug_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_debug_cfg_data_pack(const bcmolt_debug_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_debug_cfg_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_debug_cfg_data_get_packed_length(const bcmolt_debug_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_debug_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_debug_cfg_data_unpack(bcmolt_debug_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_debug_cfg_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_debug_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_debug_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_debug_cfg_data_bounds_check(const bcmolt_debug_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_debug_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_debug_cli_output_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_debug_cli_output_data_set_default(bcmolt_debug_cli_output_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_debug_cli_output_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_debug_cli_output_data_pack(const bcmolt_debug_cli_output_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_debug_cli_output_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_debug_cli_output_data_get_packed_length(const bcmolt_debug_cli_output_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_debug_cli_output_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_debug_cli_output_data_unpack(bcmolt_debug_cli_output_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_debug_cli_output_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_debug_cli_output_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_debug_cli_output_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_debug_cli_output_data_bounds_check(const bcmolt_debug_cli_output_data *this, bcmolt_presence_mask fields_present, bcmolt_debug_cli_output_id *failed_prop);
+
+/** Initializes a bcmolt_debug_auto_cfg_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_debug_auto_cfg_data_set_default(bcmolt_debug_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_debug_auto_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_debug_auto_cfg_data_pack(const bcmolt_debug_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_debug_auto_cfg_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_debug_auto_cfg_data_get_packed_length(const bcmolt_debug_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_debug_auto_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_debug_auto_cfg_data_unpack(bcmolt_debug_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_debug_auto_cfg_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_debug_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_debug_auto_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_debug_auto_cfg_data_bounds_check(const bcmolt_debug_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_debug_auto_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_debug_cli_input_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_debug_cli_input_data_set_default(bcmolt_debug_cli_input_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_debug_cli_input_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_debug_cli_input_data_pack(const bcmolt_debug_cli_input_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_debug_cli_input_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_debug_cli_input_data_get_packed_length(const bcmolt_debug_cli_input_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_debug_cli_input_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_debug_cli_input_data_unpack(bcmolt_debug_cli_input_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_debug_cli_input_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_debug_cli_input_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_debug_cli_input_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_debug_cli_input_data_bounds_check(const bcmolt_debug_cli_input_data *this, bcmolt_presence_mask fields_present, bcmolt_debug_cli_input_id *failed_prop);
+
+/** Initializes a bcmolt_device_key struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_device_key_set_default(bcmolt_device_key *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_device_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_key_pack(const bcmolt_device_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_device_key would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_device_key_get_packed_length(const bcmolt_device_key *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_device_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_key_unpack(bcmolt_device_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_device_key struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_device_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_device_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_key_bounds_check(const bcmolt_device_key *this, bcmolt_presence_mask fields_present, bcmolt_device_key_id *failed_prop);
+
+/** Initializes a bcmolt_device_cfg_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_device_cfg_data_set_default(bcmolt_device_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_device_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_cfg_data_pack(const bcmolt_device_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_device_cfg_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_device_cfg_data_get_packed_length(const bcmolt_device_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_device_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_cfg_data_unpack(bcmolt_device_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_device_cfg_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_device_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_device_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_cfg_data_bounds_check(const bcmolt_device_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_device_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_device_connection_complete_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_device_connection_complete_data_set_default(bcmolt_device_connection_complete_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_device_connection_complete_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_connection_complete_data_pack(const bcmolt_device_connection_complete_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_device_connection_complete_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_device_connection_complete_data_get_packed_length(const bcmolt_device_connection_complete_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_device_connection_complete_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_connection_complete_data_unpack(bcmolt_device_connection_complete_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_device_connection_complete_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_device_connection_complete_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_device_connection_complete_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_connection_complete_data_bounds_check(const bcmolt_device_connection_complete_data *this, bcmolt_presence_mask fields_present, bcmolt_device_connection_complete_id *failed_prop);
+
+/** Initializes a bcmolt_device_connection_failure_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_device_connection_failure_data_set_default(bcmolt_device_connection_failure_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_device_connection_failure_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_connection_failure_data_pack(const bcmolt_device_connection_failure_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_device_connection_failure_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_device_connection_failure_data_get_packed_length(const bcmolt_device_connection_failure_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_device_connection_failure_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_connection_failure_data_unpack(bcmolt_device_connection_failure_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_device_connection_failure_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_device_connection_failure_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_device_connection_failure_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_connection_failure_data_bounds_check(const bcmolt_device_connection_failure_data *this, bcmolt_presence_mask fields_present, bcmolt_device_connection_failure_id *failed_prop);
+
+/** Initializes a bcmolt_device_ddr_test_complete_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_device_ddr_test_complete_data_set_default(bcmolt_device_ddr_test_complete_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_device_ddr_test_complete_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_ddr_test_complete_data_pack(const bcmolt_device_ddr_test_complete_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_device_ddr_test_complete_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_device_ddr_test_complete_data_get_packed_length(const bcmolt_device_ddr_test_complete_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_device_ddr_test_complete_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_ddr_test_complete_data_unpack(bcmolt_device_ddr_test_complete_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_device_ddr_test_complete_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_device_ddr_test_complete_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_device_ddr_test_complete_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_ddr_test_complete_data_bounds_check(const bcmolt_device_ddr_test_complete_data *this, bcmolt_presence_mask fields_present, bcmolt_device_ddr_test_complete_id *failed_prop);
+
+/** Initializes a bcmolt_device_device_keep_alive_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_device_device_keep_alive_data_set_default(bcmolt_device_device_keep_alive_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_device_device_keep_alive_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_device_keep_alive_data_pack(const bcmolt_device_device_keep_alive_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_device_device_keep_alive_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_device_device_keep_alive_data_get_packed_length(const bcmolt_device_device_keep_alive_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_device_device_keep_alive_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_device_keep_alive_data_unpack(bcmolt_device_device_keep_alive_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_device_device_keep_alive_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_device_device_keep_alive_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_device_device_keep_alive_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_device_keep_alive_data_bounds_check(const bcmolt_device_device_keep_alive_data *this, bcmolt_presence_mask fields_present, bcmolt_device_device_keep_alive_id *failed_prop);
+
+/** Initializes a bcmolt_device_device_ready_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_device_device_ready_data_set_default(bcmolt_device_device_ready_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_device_device_ready_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_device_ready_data_pack(const bcmolt_device_device_ready_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_device_device_ready_data would occupy 
+ * on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_device_device_ready_data_get_packed_length(const bcmolt_device_device_ready_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_device_device_ready_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_device_ready_data_unpack(bcmolt_device_device_ready_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_device_device_ready_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_device_device_ready_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_device_device_ready_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_device_ready_data_bounds_check(const bcmolt_device_device_ready_data *this, bcmolt_presence_mask fields_present, bcmolt_device_device_ready_id *failed_prop);
+
+/** Initializes a bcmolt_device_image_transfer_complete_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_device_image_transfer_complete_data_set_default(bcmolt_device_image_transfer_complete_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_device_image_transfer_complete_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_image_transfer_complete_data_pack(const bcmolt_device_image_transfer_complete_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_device_image_transfer_complete_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_device_image_transfer_complete_data_get_packed_length(const bcmolt_device_image_transfer_complete_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_device_image_transfer_complete_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_image_transfer_complete_data_unpack(bcmolt_device_image_transfer_complete_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_device_image_transfer_complete_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_device_image_transfer_complete_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_device_image_transfer_complete_data is out 
+ * of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_image_transfer_complete_data_bounds_check(const bcmolt_device_image_transfer_complete_data *this, bcmolt_presence_mask fields_present, bcmolt_device_image_transfer_complete_id *failed_prop);
+
+/** Initializes a bcmolt_device_indications_dropped_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_device_indications_dropped_data_set_default(bcmolt_device_indications_dropped_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_device_indications_dropped_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_indications_dropped_data_pack(const bcmolt_device_indications_dropped_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_device_indications_dropped_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_device_indications_dropped_data_get_packed_length(const bcmolt_device_indications_dropped_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_device_indications_dropped_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_indications_dropped_data_unpack(bcmolt_device_indications_dropped_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_device_indications_dropped_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_device_indications_dropped_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_device_indications_dropped_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_indications_dropped_data_bounds_check(const bcmolt_device_indications_dropped_data *this, bcmolt_presence_mask fields_present, bcmolt_device_indications_dropped_id *failed_prop);
+
+/** Initializes a bcmolt_device_sw_error_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_device_sw_error_data_set_default(bcmolt_device_sw_error_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_device_sw_error_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_sw_error_data_pack(const bcmolt_device_sw_error_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_device_sw_error_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_device_sw_error_data_get_packed_length(const bcmolt_device_sw_error_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_device_sw_error_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_sw_error_data_unpack(bcmolt_device_sw_error_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_device_sw_error_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_device_sw_error_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_device_sw_error_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_sw_error_data_bounds_check(const bcmolt_device_sw_error_data *this, bcmolt_presence_mask fields_present, bcmolt_device_sw_error_id *failed_prop);
+
+/** Initializes a bcmolt_device_sw_exception_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_device_sw_exception_data_set_default(bcmolt_device_sw_exception_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_device_sw_exception_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_sw_exception_data_pack(const bcmolt_device_sw_exception_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_device_sw_exception_data would occupy 
+ * on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_device_sw_exception_data_get_packed_length(const bcmolt_device_sw_exception_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_device_sw_exception_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_sw_exception_data_unpack(bcmolt_device_sw_exception_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_device_sw_exception_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_device_sw_exception_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_device_sw_exception_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_sw_exception_data_bounds_check(const bcmolt_device_sw_exception_data *this, bcmolt_presence_mask fields_present, bcmolt_device_sw_exception_id *failed_prop);
+
+/** Initializes a bcmolt_device_auto_cfg_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_device_auto_cfg_data_set_default(bcmolt_device_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_device_auto_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_auto_cfg_data_pack(const bcmolt_device_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_device_auto_cfg_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_device_auto_cfg_data_get_packed_length(const bcmolt_device_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_device_auto_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_auto_cfg_data_unpack(bcmolt_device_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_device_auto_cfg_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_device_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_device_auto_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_auto_cfg_data_bounds_check(const bcmolt_device_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_device_auto_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_device_host_keep_alive_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_device_host_keep_alive_data_set_default(bcmolt_device_host_keep_alive_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_device_host_keep_alive_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_host_keep_alive_data_pack(const bcmolt_device_host_keep_alive_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_device_host_keep_alive_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_device_host_keep_alive_data_get_packed_length(const bcmolt_device_host_keep_alive_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_device_host_keep_alive_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_host_keep_alive_data_unpack(bcmolt_device_host_keep_alive_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_device_host_keep_alive_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_device_host_keep_alive_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_device_host_keep_alive_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_host_keep_alive_data_bounds_check(const bcmolt_device_host_keep_alive_data *this, bcmolt_presence_mask fields_present, bcmolt_device_host_keep_alive_id *failed_prop);
+
+/** Initializes a bcmolt_device_image_transfer_data_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_device_image_transfer_data_data_set_default(bcmolt_device_image_transfer_data_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_device_image_transfer_data_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_image_transfer_data_data_pack(const bcmolt_device_image_transfer_data_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_device_image_transfer_data_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_device_image_transfer_data_data_get_packed_length(const bcmolt_device_image_transfer_data_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_device_image_transfer_data_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_image_transfer_data_data_unpack(bcmolt_device_image_transfer_data_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_device_image_transfer_data_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_device_image_transfer_data_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_device_image_transfer_data_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_image_transfer_data_data_bounds_check(const bcmolt_device_image_transfer_data_data *this, bcmolt_presence_mask fields_present, bcmolt_device_image_transfer_data_id *failed_prop);
+
+/** Initializes a bcmolt_device_image_transfer_start_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_device_image_transfer_start_data_set_default(bcmolt_device_image_transfer_start_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_device_image_transfer_start_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_image_transfer_start_data_pack(const bcmolt_device_image_transfer_start_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_device_image_transfer_start_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_device_image_transfer_start_data_get_packed_length(const bcmolt_device_image_transfer_start_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_device_image_transfer_start_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_image_transfer_start_data_unpack(bcmolt_device_image_transfer_start_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_device_image_transfer_start_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_device_image_transfer_start_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_device_image_transfer_start_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_image_transfer_start_data_bounds_check(const bcmolt_device_image_transfer_start_data *this, bcmolt_presence_mask fields_present, bcmolt_device_image_transfer_start_id *failed_prop);
+
+/** Initializes a bcmolt_device_reset_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_device_reset_data_set_default(bcmolt_device_reset_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_device_reset_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_reset_data_pack(const bcmolt_device_reset_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_device_reset_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_device_reset_data_get_packed_length(const bcmolt_device_reset_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_device_reset_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_reset_data_unpack(bcmolt_device_reset_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_device_reset_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_device_reset_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_device_reset_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_reset_data_bounds_check(const bcmolt_device_reset_data *this, bcmolt_presence_mask fields_present, bcmolt_device_reset_id *failed_prop);
+
+/** Initializes a bcmolt_device_run_ddr_test_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_device_run_ddr_test_data_set_default(bcmolt_device_run_ddr_test_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_device_run_ddr_test_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_run_ddr_test_data_pack(const bcmolt_device_run_ddr_test_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_device_run_ddr_test_data would occupy 
+ * on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_device_run_ddr_test_data_get_packed_length(const bcmolt_device_run_ddr_test_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_device_run_ddr_test_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_run_ddr_test_data_unpack(bcmolt_device_run_ddr_test_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_device_run_ddr_test_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_device_run_ddr_test_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_device_run_ddr_test_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_device_run_ddr_test_data_bounds_check(const bcmolt_device_run_ddr_test_data *this, bcmolt_presence_mask fields_present, bcmolt_device_run_ddr_test_id *failed_prop);
+
+/** Initializes a bcmolt_epon_denied_link_key struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_denied_link_key_set_default(bcmolt_epon_denied_link_key *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_denied_link_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_denied_link_key_pack(const bcmolt_epon_denied_link_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_denied_link_key would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_denied_link_key_get_packed_length(const bcmolt_epon_denied_link_key *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_denied_link_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_denied_link_key_unpack(bcmolt_epon_denied_link_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_denied_link_key struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_denied_link_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_denied_link_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_denied_link_key_bounds_check(const bcmolt_epon_denied_link_key *this, bcmolt_presence_mask fields_present, bcmolt_epon_denied_link_key_id *failed_prop);
+
+/** Initializes a bcmolt_epon_denied_link_cfg_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_denied_link_cfg_data_set_default(bcmolt_epon_denied_link_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_denied_link_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_denied_link_cfg_data_pack(const bcmolt_epon_denied_link_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_denied_link_cfg_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_denied_link_cfg_data_get_packed_length(const bcmolt_epon_denied_link_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_denied_link_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_denied_link_cfg_data_unpack(bcmolt_epon_denied_link_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_denied_link_cfg_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_denied_link_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_denied_link_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_denied_link_cfg_data_bounds_check(const bcmolt_epon_denied_link_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_denied_link_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_epon_denied_link_laser_on_off_violation_data struct.  
+ * This sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_denied_link_laser_on_off_violation_data_set_default(bcmolt_epon_denied_link_laser_on_off_violation_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_denied_link_laser_on_off_violation_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_denied_link_laser_on_off_violation_data_pack(const bcmolt_epon_denied_link_laser_on_off_violation_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_epon_denied_link_laser_on_off_violation_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_denied_link_laser_on_off_violation_data_get_packed_length(const bcmolt_epon_denied_link_laser_on_off_violation_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_denied_link_laser_on_off_violation_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_denied_link_laser_on_off_violation_data_unpack(bcmolt_epon_denied_link_laser_on_off_violation_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_denied_link_laser_on_off_violation_data 
+ * struct and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_denied_link_laser_on_off_violation_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the 
+ * bcmolt_epon_denied_link_laser_on_off_violation_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_denied_link_laser_on_off_violation_data_bounds_check(const bcmolt_epon_denied_link_laser_on_off_violation_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_denied_link_laser_on_off_violation_id *failed_prop);
+
+/** Initializes a bcmolt_epon_denied_link_llid_pool_empty_violation_data struct. 
+ *  This sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_denied_link_llid_pool_empty_violation_data_set_default(bcmolt_epon_denied_link_llid_pool_empty_violation_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_denied_link_llid_pool_empty_violation_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_denied_link_llid_pool_empty_violation_data_pack(const bcmolt_epon_denied_link_llid_pool_empty_violation_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_epon_denied_link_llid_pool_empty_violation_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_denied_link_llid_pool_empty_violation_data_get_packed_length(const bcmolt_epon_denied_link_llid_pool_empty_violation_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_denied_link_llid_pool_empty_violation_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_denied_link_llid_pool_empty_violation_data_unpack(bcmolt_epon_denied_link_llid_pool_empty_violation_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_denied_link_llid_pool_empty_violation_data 
+ * struct and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_denied_link_llid_pool_empty_violation_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the 
+ * bcmolt_epon_denied_link_llid_pool_empty_violation_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_denied_link_llid_pool_empty_violation_data_bounds_check(const bcmolt_epon_denied_link_llid_pool_empty_violation_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_denied_link_llid_pool_empty_violation_id *failed_prop);
+
+/** Initializes a bcmolt_epon_denied_link_max_link_violation_data struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_denied_link_max_link_violation_data_set_default(bcmolt_epon_denied_link_max_link_violation_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_denied_link_max_link_violation_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_denied_link_max_link_violation_data_pack(const bcmolt_epon_denied_link_max_link_violation_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_epon_denied_link_max_link_violation_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_denied_link_max_link_violation_data_get_packed_length(const bcmolt_epon_denied_link_max_link_violation_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_denied_link_max_link_violation_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_denied_link_max_link_violation_data_unpack(bcmolt_epon_denied_link_max_link_violation_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_denied_link_max_link_violation_data struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_denied_link_max_link_violation_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_denied_link_max_link_violation_data 
+ * is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_denied_link_max_link_violation_data_bounds_check(const bcmolt_epon_denied_link_max_link_violation_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_denied_link_max_link_violation_id *failed_prop);
+
+/** Initializes a bcmolt_epon_denied_link_overhead_profile_violation_data 
+ * struct.  This sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_denied_link_overhead_profile_violation_data_set_default(bcmolt_epon_denied_link_overhead_profile_violation_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_denied_link_overhead_profile_violation_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_denied_link_overhead_profile_violation_data_pack(const bcmolt_epon_denied_link_overhead_profile_violation_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_epon_denied_link_overhead_profile_violation_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_denied_link_overhead_profile_violation_data_get_packed_length(const bcmolt_epon_denied_link_overhead_profile_violation_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_denied_link_overhead_profile_violation_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_denied_link_overhead_profile_violation_data_unpack(bcmolt_epon_denied_link_overhead_profile_violation_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_denied_link_overhead_profile_violation_data 
+ * struct and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_denied_link_overhead_profile_violation_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the 
+ * bcmolt_epon_denied_link_overhead_profile_violation_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_denied_link_overhead_profile_violation_data_bounds_check(const bcmolt_epon_denied_link_overhead_profile_violation_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_denied_link_overhead_profile_violation_id *failed_prop);
+
+/** Initializes a bcmolt_epon_denied_link_range_violation_data struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_denied_link_range_violation_data_set_default(bcmolt_epon_denied_link_range_violation_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_denied_link_range_violation_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_denied_link_range_violation_data_pack(const bcmolt_epon_denied_link_range_violation_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_denied_link_range_violation_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_denied_link_range_violation_data_get_packed_length(const bcmolt_epon_denied_link_range_violation_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_denied_link_range_violation_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_denied_link_range_violation_data_unpack(bcmolt_epon_denied_link_range_violation_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_denied_link_range_violation_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_denied_link_range_violation_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_denied_link_range_violation_data is 
+ * out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_denied_link_range_violation_data_bounds_check(const bcmolt_epon_denied_link_range_violation_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_denied_link_range_violation_id *failed_prop);
+
+/** Initializes a bcmolt_epon_denied_link_rogue_violation_data struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_denied_link_rogue_violation_data_set_default(bcmolt_epon_denied_link_rogue_violation_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_denied_link_rogue_violation_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_denied_link_rogue_violation_data_pack(const bcmolt_epon_denied_link_rogue_violation_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_denied_link_rogue_violation_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_denied_link_rogue_violation_data_get_packed_length(const bcmolt_epon_denied_link_rogue_violation_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_denied_link_rogue_violation_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_denied_link_rogue_violation_data_unpack(bcmolt_epon_denied_link_rogue_violation_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_denied_link_rogue_violation_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_denied_link_rogue_violation_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_denied_link_rogue_violation_data is 
+ * out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_denied_link_rogue_violation_data_bounds_check(const bcmolt_epon_denied_link_rogue_violation_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_denied_link_rogue_violation_id *failed_prop);
+
+/** Initializes a bcmolt_epon_denied_link_system_resource_violation_data struct. 
+ *  This sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_denied_link_system_resource_violation_data_set_default(bcmolt_epon_denied_link_system_resource_violation_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_denied_link_system_resource_violation_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_denied_link_system_resource_violation_data_pack(const bcmolt_epon_denied_link_system_resource_violation_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_epon_denied_link_system_resource_violation_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_denied_link_system_resource_violation_data_get_packed_length(const bcmolt_epon_denied_link_system_resource_violation_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_denied_link_system_resource_violation_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_denied_link_system_resource_violation_data_unpack(bcmolt_epon_denied_link_system_resource_violation_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_denied_link_system_resource_violation_data 
+ * struct and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_denied_link_system_resource_violation_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the 
+ * bcmolt_epon_denied_link_system_resource_violation_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_denied_link_system_resource_violation_data_bounds_check(const bcmolt_epon_denied_link_system_resource_violation_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_denied_link_system_resource_violation_id *failed_prop);
+
+/** Initializes a bcmolt_epon_denied_link_tdm_channels_exhausted_data struct.  
+ * This sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_denied_link_tdm_channels_exhausted_data_set_default(bcmolt_epon_denied_link_tdm_channels_exhausted_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_denied_link_tdm_channels_exhausted_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_denied_link_tdm_channels_exhausted_data_pack(const bcmolt_epon_denied_link_tdm_channels_exhausted_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_epon_denied_link_tdm_channels_exhausted_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_denied_link_tdm_channels_exhausted_data_get_packed_length(const bcmolt_epon_denied_link_tdm_channels_exhausted_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_denied_link_tdm_channels_exhausted_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_denied_link_tdm_channels_exhausted_data_unpack(bcmolt_epon_denied_link_tdm_channels_exhausted_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_denied_link_tdm_channels_exhausted_data 
+ * struct and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_denied_link_tdm_channels_exhausted_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the 
+ * bcmolt_epon_denied_link_tdm_channels_exhausted_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_denied_link_tdm_channels_exhausted_data_bounds_check(const bcmolt_epon_denied_link_tdm_channels_exhausted_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_denied_link_tdm_channels_exhausted_id *failed_prop);
+
+/** Initializes a bcmolt_epon_denied_link_unknown_link_violation_data struct.  
+ * This sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_denied_link_unknown_link_violation_data_set_default(bcmolt_epon_denied_link_unknown_link_violation_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_denied_link_unknown_link_violation_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_denied_link_unknown_link_violation_data_pack(const bcmolt_epon_denied_link_unknown_link_violation_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_epon_denied_link_unknown_link_violation_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_denied_link_unknown_link_violation_data_get_packed_length(const bcmolt_epon_denied_link_unknown_link_violation_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_denied_link_unknown_link_violation_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_denied_link_unknown_link_violation_data_unpack(bcmolt_epon_denied_link_unknown_link_violation_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_denied_link_unknown_link_violation_data 
+ * struct and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_denied_link_unknown_link_violation_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the 
+ * bcmolt_epon_denied_link_unknown_link_violation_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_denied_link_unknown_link_violation_data_bounds_check(const bcmolt_epon_denied_link_unknown_link_violation_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_denied_link_unknown_link_violation_id *failed_prop);
+
+/** Initializes a bcmolt_epon_denied_link_upstream_bandwidth_violation_data 
+ * struct.  This sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_denied_link_upstream_bandwidth_violation_data_set_default(bcmolt_epon_denied_link_upstream_bandwidth_violation_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_denied_link_upstream_bandwidth_violation_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_denied_link_upstream_bandwidth_violation_data_pack(const bcmolt_epon_denied_link_upstream_bandwidth_violation_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_epon_denied_link_upstream_bandwidth_violation_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_denied_link_upstream_bandwidth_violation_data_get_packed_length(const bcmolt_epon_denied_link_upstream_bandwidth_violation_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_denied_link_upstream_bandwidth_violation_data from 
+ * bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_denied_link_upstream_bandwidth_violation_data_unpack(bcmolt_epon_denied_link_upstream_bandwidth_violation_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed 
+ * bcmolt_epon_denied_link_upstream_bandwidth_violation_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_denied_link_upstream_bandwidth_violation_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the 
+ * bcmolt_epon_denied_link_upstream_bandwidth_violation_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_denied_link_upstream_bandwidth_violation_data_bounds_check(const bcmolt_epon_denied_link_upstream_bandwidth_violation_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_denied_link_upstream_bandwidth_violation_id *failed_prop);
+
+/** Initializes a bcmolt_epon_denied_link_auto_cfg_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_denied_link_auto_cfg_data_set_default(bcmolt_epon_denied_link_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_denied_link_auto_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_denied_link_auto_cfg_data_pack(const bcmolt_epon_denied_link_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_denied_link_auto_cfg_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_denied_link_auto_cfg_data_get_packed_length(const bcmolt_epon_denied_link_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_denied_link_auto_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_denied_link_auto_cfg_data_unpack(bcmolt_epon_denied_link_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_denied_link_auto_cfg_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_denied_link_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_denied_link_auto_cfg_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_denied_link_auto_cfg_data_bounds_check(const bcmolt_epon_denied_link_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_denied_link_auto_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_epon_link_key struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_link_key_set_default(bcmolt_epon_link_key *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_link_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_key_pack(const bcmolt_epon_link_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_link_key would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_link_key_get_packed_length(const bcmolt_epon_link_key *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_link_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_key_unpack(bcmolt_epon_link_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_link_key struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_link_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_link_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_key_bounds_check(const bcmolt_epon_link_key *this, bcmolt_presence_mask fields_present, bcmolt_epon_link_key_id *failed_prop);
+
+/** Initializes a bcmolt_epon_link_cfg_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_link_cfg_data_set_default(bcmolt_epon_link_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_link_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_cfg_data_pack(const bcmolt_epon_link_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_link_cfg_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_link_cfg_data_get_packed_length(const bcmolt_epon_link_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_link_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_cfg_data_unpack(bcmolt_epon_link_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_link_cfg_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_link_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_link_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_cfg_data_bounds_check(const bcmolt_epon_link_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_link_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_epon_link_stat_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_link_stat_data_set_default(bcmolt_epon_link_stat_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_link_stat_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_stat_data_pack(const bcmolt_epon_link_stat_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_link_stat_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_link_stat_data_get_packed_length(const bcmolt_epon_link_stat_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_link_stat_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_stat_data_unpack(bcmolt_epon_link_stat_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_link_stat_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_link_stat_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_link_stat_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_stat_data_bounds_check(const bcmolt_epon_link_stat_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_link_stat_id *failed_prop);
+
+/** Initializes a bcmolt_epon_link_stat_cfg_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_link_stat_cfg_data_set_default(bcmolt_epon_link_stat_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_link_stat_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_stat_cfg_data_pack(const bcmolt_epon_link_stat_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_link_stat_cfg_data would occupy 
+ * on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_link_stat_cfg_data_get_packed_length(const bcmolt_epon_link_stat_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_link_stat_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_stat_cfg_data_unpack(bcmolt_epon_link_stat_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_link_stat_cfg_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_link_stat_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_link_stat_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_stat_cfg_data_bounds_check(const bcmolt_epon_link_stat_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_link_stat_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_epon_link_duplicate_mpcp_registration_request_data 
+ * struct.  This sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_link_duplicate_mpcp_registration_request_data_set_default(bcmolt_epon_link_duplicate_mpcp_registration_request_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_link_duplicate_mpcp_registration_request_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_duplicate_mpcp_registration_request_data_pack(const bcmolt_epon_link_duplicate_mpcp_registration_request_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_epon_link_duplicate_mpcp_registration_request_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_link_duplicate_mpcp_registration_request_data_get_packed_length(const bcmolt_epon_link_duplicate_mpcp_registration_request_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_link_duplicate_mpcp_registration_request_data from 
+ * bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_duplicate_mpcp_registration_request_data_unpack(bcmolt_epon_link_duplicate_mpcp_registration_request_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed 
+ * bcmolt_epon_link_duplicate_mpcp_registration_request_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_link_duplicate_mpcp_registration_request_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the 
+ * bcmolt_epon_link_duplicate_mpcp_registration_request_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_duplicate_mpcp_registration_request_data_bounds_check(const bcmolt_epon_link_duplicate_mpcp_registration_request_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_link_duplicate_mpcp_registration_request_id *failed_prop);
+
+/** Initializes a bcmolt_epon_link_key_exchange_failure_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_link_key_exchange_failure_data_set_default(bcmolt_epon_link_key_exchange_failure_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_link_key_exchange_failure_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_key_exchange_failure_data_pack(const bcmolt_epon_link_key_exchange_failure_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_link_key_exchange_failure_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_link_key_exchange_failure_data_get_packed_length(const bcmolt_epon_link_key_exchange_failure_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_link_key_exchange_failure_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_key_exchange_failure_data_unpack(bcmolt_epon_link_key_exchange_failure_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_link_key_exchange_failure_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_link_key_exchange_failure_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_link_key_exchange_failure_data is out 
+ * of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_key_exchange_failure_data_bounds_check(const bcmolt_epon_link_key_exchange_failure_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_link_key_exchange_failure_id *failed_prop);
+
+/** Initializes a bcmolt_epon_link_link_speed_mismatch_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_link_link_speed_mismatch_data_set_default(bcmolt_epon_link_link_speed_mismatch_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_link_link_speed_mismatch_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_link_speed_mismatch_data_pack(const bcmolt_epon_link_link_speed_mismatch_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_link_link_speed_mismatch_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_link_link_speed_mismatch_data_get_packed_length(const bcmolt_epon_link_link_speed_mismatch_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_link_link_speed_mismatch_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_link_speed_mismatch_data_unpack(bcmolt_epon_link_link_speed_mismatch_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_link_link_speed_mismatch_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_link_link_speed_mismatch_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_link_link_speed_mismatch_data is out 
+ * of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_link_speed_mismatch_data_bounds_check(const bcmolt_epon_link_link_speed_mismatch_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_link_link_speed_mismatch_id *failed_prop);
+
+/** Initializes a bcmolt_epon_link_mpcp_discovered_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_link_mpcp_discovered_data_set_default(bcmolt_epon_link_mpcp_discovered_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_link_mpcp_discovered_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_mpcp_discovered_data_pack(const bcmolt_epon_link_mpcp_discovered_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_link_mpcp_discovered_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_link_mpcp_discovered_data_get_packed_length(const bcmolt_epon_link_mpcp_discovered_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_link_mpcp_discovered_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_mpcp_discovered_data_unpack(bcmolt_epon_link_mpcp_discovered_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_link_mpcp_discovered_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_link_mpcp_discovered_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_link_mpcp_discovered_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_mpcp_discovered_data_bounds_check(const bcmolt_epon_link_mpcp_discovered_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_link_mpcp_discovered_id *failed_prop);
+
+/** Initializes a bcmolt_epon_link_mpcp_report_timeout_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_link_mpcp_report_timeout_data_set_default(bcmolt_epon_link_mpcp_report_timeout_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_link_mpcp_report_timeout_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_mpcp_report_timeout_data_pack(const bcmolt_epon_link_mpcp_report_timeout_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_link_mpcp_report_timeout_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_link_mpcp_report_timeout_data_get_packed_length(const bcmolt_epon_link_mpcp_report_timeout_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_link_mpcp_report_timeout_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_mpcp_report_timeout_data_unpack(bcmolt_epon_link_mpcp_report_timeout_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_link_mpcp_report_timeout_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_link_mpcp_report_timeout_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_link_mpcp_report_timeout_data is out 
+ * of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_mpcp_report_timeout_data_bounds_check(const bcmolt_epon_link_mpcp_report_timeout_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_link_mpcp_report_timeout_id *failed_prop);
+
+/** Initializes a bcmolt_epon_link_oam_keepalive_timeout_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_link_oam_keepalive_timeout_data_set_default(bcmolt_epon_link_oam_keepalive_timeout_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_link_oam_keepalive_timeout_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_oam_keepalive_timeout_data_pack(const bcmolt_epon_link_oam_keepalive_timeout_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_link_oam_keepalive_timeout_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_link_oam_keepalive_timeout_data_get_packed_length(const bcmolt_epon_link_oam_keepalive_timeout_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_link_oam_keepalive_timeout_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_oam_keepalive_timeout_data_unpack(bcmolt_epon_link_oam_keepalive_timeout_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_link_oam_keepalive_timeout_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_link_oam_keepalive_timeout_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_link_oam_keepalive_timeout_data is 
+ * out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_oam_keepalive_timeout_data_bounds_check(const bcmolt_epon_link_oam_keepalive_timeout_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_link_oam_keepalive_timeout_id *failed_prop);
+
+/** Initializes a bcmolt_epon_link_preprovisioned_link_created_data struct.  
+ * This sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_link_preprovisioned_link_created_data_set_default(bcmolt_epon_link_preprovisioned_link_created_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_link_preprovisioned_link_created_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_preprovisioned_link_created_data_pack(const bcmolt_epon_link_preprovisioned_link_created_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_epon_link_preprovisioned_link_created_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_link_preprovisioned_link_created_data_get_packed_length(const bcmolt_epon_link_preprovisioned_link_created_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_link_preprovisioned_link_created_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_preprovisioned_link_created_data_unpack(bcmolt_epon_link_preprovisioned_link_created_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_link_preprovisioned_link_created_data struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_link_preprovisioned_link_created_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_link_preprovisioned_link_created_data 
+ * is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_preprovisioned_link_created_data_bounds_check(const bcmolt_epon_link_preprovisioned_link_created_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_link_preprovisioned_link_created_id *failed_prop);
+
+/** Initializes a bcmolt_epon_link_protection_switch_occurred_data struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_link_protection_switch_occurred_data_set_default(bcmolt_epon_link_protection_switch_occurred_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_link_protection_switch_occurred_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_protection_switch_occurred_data_pack(const bcmolt_epon_link_protection_switch_occurred_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_epon_link_protection_switch_occurred_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_link_protection_switch_occurred_data_get_packed_length(const bcmolt_epon_link_protection_switch_occurred_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_link_protection_switch_occurred_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_protection_switch_occurred_data_unpack(bcmolt_epon_link_protection_switch_occurred_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_link_protection_switch_occurred_data struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_link_protection_switch_occurred_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_link_protection_switch_occurred_data 
+ * is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_protection_switch_occurred_data_bounds_check(const bcmolt_epon_link_protection_switch_occurred_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_link_protection_switch_occurred_id *failed_prop);
+
+/** Initializes a bcmolt_epon_link_range_value_changed_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_link_range_value_changed_data_set_default(bcmolt_epon_link_range_value_changed_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_link_range_value_changed_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_range_value_changed_data_pack(const bcmolt_epon_link_range_value_changed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_link_range_value_changed_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_link_range_value_changed_data_get_packed_length(const bcmolt_epon_link_range_value_changed_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_link_range_value_changed_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_range_value_changed_data_unpack(bcmolt_epon_link_range_value_changed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_link_range_value_changed_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_link_range_value_changed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_link_range_value_changed_data is out 
+ * of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_range_value_changed_data_bounds_check(const bcmolt_epon_link_range_value_changed_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_link_range_value_changed_id *failed_prop);
+
+/** Initializes a bcmolt_epon_link_stat_alarm_cleared_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_link_stat_alarm_cleared_data_set_default(bcmolt_epon_link_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_link_stat_alarm_cleared_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_stat_alarm_cleared_data_pack(const bcmolt_epon_link_stat_alarm_cleared_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_link_stat_alarm_cleared_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_link_stat_alarm_cleared_data_get_packed_length(const bcmolt_epon_link_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_link_stat_alarm_cleared_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_stat_alarm_cleared_data_unpack(bcmolt_epon_link_stat_alarm_cleared_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_link_stat_alarm_cleared_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_link_stat_alarm_cleared_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_link_stat_alarm_cleared_data is out 
+ * of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_stat_alarm_cleared_data_bounds_check(const bcmolt_epon_link_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_link_stat_alarm_cleared_id *failed_prop);
+
+/** Initializes a bcmolt_epon_link_stat_alarm_raised_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_link_stat_alarm_raised_data_set_default(bcmolt_epon_link_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_link_stat_alarm_raised_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_stat_alarm_raised_data_pack(const bcmolt_epon_link_stat_alarm_raised_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_link_stat_alarm_raised_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_link_stat_alarm_raised_data_get_packed_length(const bcmolt_epon_link_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_link_stat_alarm_raised_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_stat_alarm_raised_data_unpack(bcmolt_epon_link_stat_alarm_raised_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_link_stat_alarm_raised_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_link_stat_alarm_raised_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_link_stat_alarm_raised_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_stat_alarm_raised_data_bounds_check(const bcmolt_epon_link_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_link_stat_alarm_raised_id *failed_prop);
+
+/** Initializes a bcmolt_epon_link_auto_cfg_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_link_auto_cfg_data_set_default(bcmolt_epon_link_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_link_auto_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_auto_cfg_data_pack(const bcmolt_epon_link_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_link_auto_cfg_data would occupy 
+ * on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_link_auto_cfg_data_get_packed_length(const bcmolt_epon_link_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_link_auto_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_auto_cfg_data_unpack(bcmolt_epon_link_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_link_auto_cfg_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_link_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_link_auto_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_auto_cfg_data_bounds_check(const bcmolt_epon_link_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_link_auto_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_epon_link_key_exchange_start_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_link_key_exchange_start_data_set_default(bcmolt_epon_link_key_exchange_start_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_link_key_exchange_start_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_key_exchange_start_data_pack(const bcmolt_epon_link_key_exchange_start_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_link_key_exchange_start_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_link_key_exchange_start_data_get_packed_length(const bcmolt_epon_link_key_exchange_start_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_link_key_exchange_start_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_key_exchange_start_data_unpack(bcmolt_epon_link_key_exchange_start_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_link_key_exchange_start_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_link_key_exchange_start_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_link_key_exchange_start_data is out 
+ * of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_key_exchange_start_data_bounds_check(const bcmolt_epon_link_key_exchange_start_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_link_key_exchange_start_id *failed_prop);
+
+/** Initializes a bcmolt_epon_link_oam_keepalive_timer_start_data struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_link_oam_keepalive_timer_start_data_set_default(bcmolt_epon_link_oam_keepalive_timer_start_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_link_oam_keepalive_timer_start_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_oam_keepalive_timer_start_data_pack(const bcmolt_epon_link_oam_keepalive_timer_start_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_epon_link_oam_keepalive_timer_start_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_link_oam_keepalive_timer_start_data_get_packed_length(const bcmolt_epon_link_oam_keepalive_timer_start_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_link_oam_keepalive_timer_start_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_oam_keepalive_timer_start_data_unpack(bcmolt_epon_link_oam_keepalive_timer_start_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_link_oam_keepalive_timer_start_data struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_link_oam_keepalive_timer_start_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_link_oam_keepalive_timer_start_data 
+ * is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_oam_keepalive_timer_start_data_bounds_check(const bcmolt_epon_link_oam_keepalive_timer_start_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_link_oam_keepalive_timer_start_id *failed_prop);
+
+/** Initializes a bcmolt_epon_link_static_registration_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_link_static_registration_data_set_default(bcmolt_epon_link_static_registration_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_link_static_registration_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_static_registration_data_pack(const bcmolt_epon_link_static_registration_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_link_static_registration_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_link_static_registration_data_get_packed_length(const bcmolt_epon_link_static_registration_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_link_static_registration_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_static_registration_data_unpack(bcmolt_epon_link_static_registration_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_link_static_registration_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_link_static_registration_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_link_static_registration_data is out 
+ * of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_static_registration_data_bounds_check(const bcmolt_epon_link_static_registration_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_link_static_registration_id *failed_prop);
+
+/** Initializes a bcmolt_epon_link_inject_frame_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_link_inject_frame_data_set_default(bcmolt_epon_link_inject_frame_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_link_inject_frame_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_inject_frame_data_pack(const bcmolt_epon_link_inject_frame_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_link_inject_frame_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_link_inject_frame_data_get_packed_length(const bcmolt_epon_link_inject_frame_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_link_inject_frame_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_inject_frame_data_unpack(bcmolt_epon_link_inject_frame_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_link_inject_frame_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_link_inject_frame_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_link_inject_frame_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_inject_frame_data_bounds_check(const bcmolt_epon_link_inject_frame_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_link_inject_frame_id *failed_prop);
+
+/** Initializes a bcmolt_epon_link_frame_captured_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_link_frame_captured_data_set_default(bcmolt_epon_link_frame_captured_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_link_frame_captured_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_frame_captured_data_pack(const bcmolt_epon_link_frame_captured_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_link_frame_captured_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_link_frame_captured_data_get_packed_length(const bcmolt_epon_link_frame_captured_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_link_frame_captured_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_frame_captured_data_unpack(bcmolt_epon_link_frame_captured_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_link_frame_captured_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_link_frame_captured_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_link_frame_captured_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_link_frame_captured_data_bounds_check(const bcmolt_epon_link_frame_captured_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_link_frame_captured_id *failed_prop);
+
+/** Initializes a bcmolt_epon_ni_key struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_ni_key_set_default(bcmolt_epon_ni_key *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_ni_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_key_pack(const bcmolt_epon_ni_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_ni_key would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_ni_key_get_packed_length(const bcmolt_epon_ni_key *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_ni_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_key_unpack(bcmolt_epon_ni_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_ni_key struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_ni_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_ni_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_key_bounds_check(const bcmolt_epon_ni_key *this, bcmolt_presence_mask fields_present, bcmolt_epon_ni_key_id *failed_prop);
+
+/** Initializes a bcmolt_epon_ni_cfg_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_ni_cfg_data_set_default(bcmolt_epon_ni_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_ni_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_cfg_data_pack(const bcmolt_epon_ni_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_ni_cfg_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_ni_cfg_data_get_packed_length(const bcmolt_epon_ni_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_ni_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_cfg_data_unpack(bcmolt_epon_ni_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_ni_cfg_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_ni_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_ni_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_cfg_data_bounds_check(const bcmolt_epon_ni_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_ni_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_epon_ni_llid_quarantined_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_ni_llid_quarantined_data_set_default(bcmolt_epon_ni_llid_quarantined_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_ni_llid_quarantined_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_llid_quarantined_data_pack(const bcmolt_epon_ni_llid_quarantined_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_ni_llid_quarantined_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_ni_llid_quarantined_data_get_packed_length(const bcmolt_epon_ni_llid_quarantined_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_ni_llid_quarantined_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_llid_quarantined_data_unpack(bcmolt_epon_ni_llid_quarantined_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_ni_llid_quarantined_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_ni_llid_quarantined_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_ni_llid_quarantined_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_llid_quarantined_data_bounds_check(const bcmolt_epon_ni_llid_quarantined_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_ni_llid_quarantined_id *failed_prop);
+
+/** Initializes a bcmolt_epon_ni_mpcp_timestamp_changed_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_ni_mpcp_timestamp_changed_data_set_default(bcmolt_epon_ni_mpcp_timestamp_changed_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_ni_mpcp_timestamp_changed_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_mpcp_timestamp_changed_data_pack(const bcmolt_epon_ni_mpcp_timestamp_changed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_ni_mpcp_timestamp_changed_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_ni_mpcp_timestamp_changed_data_get_packed_length(const bcmolt_epon_ni_mpcp_timestamp_changed_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_ni_mpcp_timestamp_changed_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_mpcp_timestamp_changed_data_unpack(bcmolt_epon_ni_mpcp_timestamp_changed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_ni_mpcp_timestamp_changed_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_ni_mpcp_timestamp_changed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_ni_mpcp_timestamp_changed_data is out 
+ * of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_mpcp_timestamp_changed_data_bounds_check(const bcmolt_epon_ni_mpcp_timestamp_changed_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_ni_mpcp_timestamp_changed_id *failed_prop);
+
+/** Initializes a bcmolt_epon_ni_no_reports_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_ni_no_reports_data_set_default(bcmolt_epon_ni_no_reports_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_ni_no_reports_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_no_reports_data_pack(const bcmolt_epon_ni_no_reports_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_ni_no_reports_data would occupy 
+ * on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_ni_no_reports_data_get_packed_length(const bcmolt_epon_ni_no_reports_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_ni_no_reports_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_no_reports_data_unpack(bcmolt_epon_ni_no_reports_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_ni_no_reports_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_ni_no_reports_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_ni_no_reports_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_no_reports_data_bounds_check(const bcmolt_epon_ni_no_reports_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_ni_no_reports_id *failed_prop);
+
+/** Initializes a bcmolt_epon_ni_onu_upgrade_complete_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_ni_onu_upgrade_complete_data_set_default(bcmolt_epon_ni_onu_upgrade_complete_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_ni_onu_upgrade_complete_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_onu_upgrade_complete_data_pack(const bcmolt_epon_ni_onu_upgrade_complete_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_ni_onu_upgrade_complete_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_ni_onu_upgrade_complete_data_get_packed_length(const bcmolt_epon_ni_onu_upgrade_complete_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_ni_onu_upgrade_complete_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_onu_upgrade_complete_data_unpack(bcmolt_epon_ni_onu_upgrade_complete_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_ni_onu_upgrade_complete_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_ni_onu_upgrade_complete_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_ni_onu_upgrade_complete_data is out 
+ * of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_onu_upgrade_complete_data_bounds_check(const bcmolt_epon_ni_onu_upgrade_complete_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_ni_onu_upgrade_complete_id *failed_prop);
+
+/** Initializes a bcmolt_epon_ni_rogue_scan_complete_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_ni_rogue_scan_complete_data_set_default(bcmolt_epon_ni_rogue_scan_complete_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_ni_rogue_scan_complete_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_rogue_scan_complete_data_pack(const bcmolt_epon_ni_rogue_scan_complete_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_ni_rogue_scan_complete_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_ni_rogue_scan_complete_data_get_packed_length(const bcmolt_epon_ni_rogue_scan_complete_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_ni_rogue_scan_complete_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_rogue_scan_complete_data_unpack(bcmolt_epon_ni_rogue_scan_complete_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_ni_rogue_scan_complete_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_ni_rogue_scan_complete_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_ni_rogue_scan_complete_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_rogue_scan_complete_data_bounds_check(const bcmolt_epon_ni_rogue_scan_complete_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_ni_rogue_scan_complete_id *failed_prop);
+
+/** Initializes a bcmolt_epon_ni_rssi_measurement_completed_data struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_ni_rssi_measurement_completed_data_set_default(bcmolt_epon_ni_rssi_measurement_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_ni_rssi_measurement_completed_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_rssi_measurement_completed_data_pack(const bcmolt_epon_ni_rssi_measurement_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_epon_ni_rssi_measurement_completed_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_ni_rssi_measurement_completed_data_get_packed_length(const bcmolt_epon_ni_rssi_measurement_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_ni_rssi_measurement_completed_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_rssi_measurement_completed_data_unpack(bcmolt_epon_ni_rssi_measurement_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_ni_rssi_measurement_completed_data struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_ni_rssi_measurement_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_ni_rssi_measurement_completed_data is 
+ * out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_rssi_measurement_completed_data_bounds_check(const bcmolt_epon_ni_rssi_measurement_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_ni_rssi_measurement_completed_id *failed_prop);
+
+/** Initializes a bcmolt_epon_ni_state_change_completed_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_ni_state_change_completed_data_set_default(bcmolt_epon_ni_state_change_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_ni_state_change_completed_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_state_change_completed_data_pack(const bcmolt_epon_ni_state_change_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_ni_state_change_completed_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_ni_state_change_completed_data_get_packed_length(const bcmolt_epon_ni_state_change_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_ni_state_change_completed_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_state_change_completed_data_unpack(bcmolt_epon_ni_state_change_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_ni_state_change_completed_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_ni_state_change_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_ni_state_change_completed_data is out 
+ * of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_state_change_completed_data_bounds_check(const bcmolt_epon_ni_state_change_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_ni_state_change_completed_id *failed_prop);
+
+/** Initializes a bcmolt_epon_ni_auto_cfg_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_ni_auto_cfg_data_set_default(bcmolt_epon_ni_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_ni_auto_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_auto_cfg_data_pack(const bcmolt_epon_ni_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_ni_auto_cfg_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_ni_auto_cfg_data_get_packed_length(const bcmolt_epon_ni_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_ni_auto_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_auto_cfg_data_unpack(bcmolt_epon_ni_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_ni_auto_cfg_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_ni_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_ni_auto_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_auto_cfg_data_bounds_check(const bcmolt_epon_ni_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_ni_auto_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_epon_ni_add_link_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_ni_add_link_data_set_default(bcmolt_epon_ni_add_link_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_ni_add_link_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_add_link_data_pack(const bcmolt_epon_ni_add_link_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_ni_add_link_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_ni_add_link_data_get_packed_length(const bcmolt_epon_ni_add_link_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_ni_add_link_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_add_link_data_unpack(bcmolt_epon_ni_add_link_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_ni_add_link_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_ni_add_link_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_ni_add_link_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_add_link_data_bounds_check(const bcmolt_epon_ni_add_link_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_ni_add_link_id *failed_prop);
+
+/** Initializes a bcmolt_epon_ni_add_multicast_link_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_ni_add_multicast_link_data_set_default(bcmolt_epon_ni_add_multicast_link_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_ni_add_multicast_link_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_add_multicast_link_data_pack(const bcmolt_epon_ni_add_multicast_link_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_ni_add_multicast_link_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_ni_add_multicast_link_data_get_packed_length(const bcmolt_epon_ni_add_multicast_link_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_ni_add_multicast_link_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_add_multicast_link_data_unpack(bcmolt_epon_ni_add_multicast_link_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_ni_add_multicast_link_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_ni_add_multicast_link_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_ni_add_multicast_link_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_add_multicast_link_data_bounds_check(const bcmolt_epon_ni_add_multicast_link_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_ni_add_multicast_link_id *failed_prop);
+
+/** Initializes a bcmolt_epon_ni_add_protected_standby_link_data struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_ni_add_protected_standby_link_data_set_default(bcmolt_epon_ni_add_protected_standby_link_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_ni_add_protected_standby_link_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_add_protected_standby_link_data_pack(const bcmolt_epon_ni_add_protected_standby_link_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_epon_ni_add_protected_standby_link_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_ni_add_protected_standby_link_data_get_packed_length(const bcmolt_epon_ni_add_protected_standby_link_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_ni_add_protected_standby_link_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_add_protected_standby_link_data_unpack(bcmolt_epon_ni_add_protected_standby_link_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_ni_add_protected_standby_link_data struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_ni_add_protected_standby_link_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_ni_add_protected_standby_link_data is 
+ * out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_add_protected_standby_link_data_bounds_check(const bcmolt_epon_ni_add_protected_standby_link_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_ni_add_protected_standby_link_id *failed_prop);
+
+/** Initializes a bcmolt_epon_ni_issue_rssi_grant_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_ni_issue_rssi_grant_data_set_default(bcmolt_epon_ni_issue_rssi_grant_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_ni_issue_rssi_grant_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_issue_rssi_grant_data_pack(const bcmolt_epon_ni_issue_rssi_grant_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_ni_issue_rssi_grant_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_ni_issue_rssi_grant_data_get_packed_length(const bcmolt_epon_ni_issue_rssi_grant_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_ni_issue_rssi_grant_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_issue_rssi_grant_data_unpack(bcmolt_epon_ni_issue_rssi_grant_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_ni_issue_rssi_grant_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_ni_issue_rssi_grant_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_ni_issue_rssi_grant_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_issue_rssi_grant_data_bounds_check(const bcmolt_epon_ni_issue_rssi_grant_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_ni_issue_rssi_grant_id *failed_prop);
+
+/** Initializes a bcmolt_epon_ni_protection_switching_apply_rerange_delta_data 
+ * struct.  This sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_ni_protection_switching_apply_rerange_delta_data_set_default(bcmolt_epon_ni_protection_switching_apply_rerange_delta_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_ni_protection_switching_apply_rerange_delta_data to 
+ * bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_protection_switching_apply_rerange_delta_data_pack(const bcmolt_epon_ni_protection_switching_apply_rerange_delta_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_epon_ni_protection_switching_apply_rerange_delta_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_ni_protection_switching_apply_rerange_delta_data_get_packed_length(const bcmolt_epon_ni_protection_switching_apply_rerange_delta_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_ni_protection_switching_apply_rerange_delta_data from 
+ * bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_protection_switching_apply_rerange_delta_data_unpack(bcmolt_epon_ni_protection_switching_apply_rerange_delta_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed 
+ * bcmolt_epon_ni_protection_switching_apply_rerange_delta_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_ni_protection_switching_apply_rerange_delta_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the 
+ * bcmolt_epon_ni_protection_switching_apply_rerange_delta_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_protection_switching_apply_rerange_delta_data_bounds_check(const bcmolt_epon_ni_protection_switching_apply_rerange_delta_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_ni_protection_switching_apply_rerange_delta_id *failed_prop);
+
+/** Initializes a bcmolt_epon_ni_rogue_llid_scan_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_ni_rogue_llid_scan_data_set_default(bcmolt_epon_ni_rogue_llid_scan_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_ni_rogue_llid_scan_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_rogue_llid_scan_data_pack(const bcmolt_epon_ni_rogue_llid_scan_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_ni_rogue_llid_scan_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_ni_rogue_llid_scan_data_get_packed_length(const bcmolt_epon_ni_rogue_llid_scan_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_ni_rogue_llid_scan_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_rogue_llid_scan_data_unpack(bcmolt_epon_ni_rogue_llid_scan_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_ni_rogue_llid_scan_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_ni_rogue_llid_scan_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_ni_rogue_llid_scan_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_rogue_llid_scan_data_bounds_check(const bcmolt_epon_ni_rogue_llid_scan_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_ni_rogue_llid_scan_id *failed_prop);
+
+/** Initializes a bcmolt_epon_ni_set_epon_ni_en_state_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_ni_set_epon_ni_en_state_data_set_default(bcmolt_epon_ni_set_epon_ni_en_state_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_ni_set_epon_ni_en_state_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_set_epon_ni_en_state_data_pack(const bcmolt_epon_ni_set_epon_ni_en_state_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_ni_set_epon_ni_en_state_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_ni_set_epon_ni_en_state_data_get_packed_length(const bcmolt_epon_ni_set_epon_ni_en_state_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_ni_set_epon_ni_en_state_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_set_epon_ni_en_state_data_unpack(bcmolt_epon_ni_set_epon_ni_en_state_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_ni_set_epon_ni_en_state_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_ni_set_epon_ni_en_state_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_ni_set_epon_ni_en_state_data is out 
+ * of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_set_epon_ni_en_state_data_bounds_check(const bcmolt_epon_ni_set_epon_ni_en_state_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_ni_set_epon_ni_en_state_id *failed_prop);
+
+/** Initializes a bcmolt_epon_ni_start_onu_upgrade_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_ni_start_onu_upgrade_data_set_default(bcmolt_epon_ni_start_onu_upgrade_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_ni_start_onu_upgrade_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_start_onu_upgrade_data_pack(const bcmolt_epon_ni_start_onu_upgrade_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_ni_start_onu_upgrade_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_ni_start_onu_upgrade_data_get_packed_length(const bcmolt_epon_ni_start_onu_upgrade_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_ni_start_onu_upgrade_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_start_onu_upgrade_data_unpack(bcmolt_epon_ni_start_onu_upgrade_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_ni_start_onu_upgrade_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_ni_start_onu_upgrade_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_ni_start_onu_upgrade_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_ni_start_onu_upgrade_data_bounds_check(const bcmolt_epon_ni_start_onu_upgrade_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_ni_start_onu_upgrade_id *failed_prop);
+
+/** Initializes a bcmolt_epon_onu_10g_us_key struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_onu_10g_us_key_set_default(bcmolt_epon_onu_10g_us_key *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_onu_10g_us_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_10g_us_key_pack(const bcmolt_epon_onu_10g_us_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_onu_10g_us_key would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_onu_10g_us_key_get_packed_length(const bcmolt_epon_onu_10g_us_key *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_onu_10g_us_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_10g_us_key_unpack(bcmolt_epon_onu_10g_us_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_onu_10g_us_key struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_onu_10g_us_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_onu_10g_us_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_10g_us_key_bounds_check(const bcmolt_epon_onu_10g_us_key *this, bcmolt_presence_mask fields_present, bcmolt_epon_onu_10g_us_key_id *failed_prop);
+
+/** Initializes a bcmolt_epon_onu_10g_us_cfg_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_onu_10g_us_cfg_data_set_default(bcmolt_epon_onu_10g_us_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_onu_10g_us_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_10g_us_cfg_data_pack(const bcmolt_epon_onu_10g_us_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_onu_10g_us_cfg_data would occupy 
+ * on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_onu_10g_us_cfg_data_get_packed_length(const bcmolt_epon_onu_10g_us_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_onu_10g_us_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_10g_us_cfg_data_unpack(bcmolt_epon_onu_10g_us_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_onu_10g_us_cfg_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_onu_10g_us_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_onu_10g_us_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_10g_us_cfg_data_bounds_check(const bcmolt_epon_onu_10g_us_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_onu_10g_us_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_epon_onu_10g_us_stat_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_onu_10g_us_stat_data_set_default(bcmolt_epon_onu_10g_us_stat_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_onu_10g_us_stat_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_10g_us_stat_data_pack(const bcmolt_epon_onu_10g_us_stat_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_onu_10g_us_stat_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_onu_10g_us_stat_data_get_packed_length(const bcmolt_epon_onu_10g_us_stat_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_onu_10g_us_stat_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_10g_us_stat_data_unpack(bcmolt_epon_onu_10g_us_stat_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_onu_10g_us_stat_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_onu_10g_us_stat_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_onu_10g_us_stat_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_10g_us_stat_data_bounds_check(const bcmolt_epon_onu_10g_us_stat_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_onu_10g_us_stat_id *failed_prop);
+
+/** Initializes a bcmolt_epon_onu_10g_us_stat_cfg_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_onu_10g_us_stat_cfg_data_set_default(bcmolt_epon_onu_10g_us_stat_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_onu_10g_us_stat_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_10g_us_stat_cfg_data_pack(const bcmolt_epon_onu_10g_us_stat_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_onu_10g_us_stat_cfg_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_onu_10g_us_stat_cfg_data_get_packed_length(const bcmolt_epon_onu_10g_us_stat_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_onu_10g_us_stat_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_10g_us_stat_cfg_data_unpack(bcmolt_epon_onu_10g_us_stat_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_onu_10g_us_stat_cfg_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_onu_10g_us_stat_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_onu_10g_us_stat_cfg_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_10g_us_stat_cfg_data_bounds_check(const bcmolt_epon_onu_10g_us_stat_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_onu_10g_us_stat_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_epon_onu_10g_us_stat_alarm_cleared_data struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_onu_10g_us_stat_alarm_cleared_data_set_default(bcmolt_epon_onu_10g_us_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_onu_10g_us_stat_alarm_cleared_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_10g_us_stat_alarm_cleared_data_pack(const bcmolt_epon_onu_10g_us_stat_alarm_cleared_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_epon_onu_10g_us_stat_alarm_cleared_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_onu_10g_us_stat_alarm_cleared_data_get_packed_length(const bcmolt_epon_onu_10g_us_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_onu_10g_us_stat_alarm_cleared_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_10g_us_stat_alarm_cleared_data_unpack(bcmolt_epon_onu_10g_us_stat_alarm_cleared_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_onu_10g_us_stat_alarm_cleared_data struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_onu_10g_us_stat_alarm_cleared_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_onu_10g_us_stat_alarm_cleared_data is 
+ * out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_10g_us_stat_alarm_cleared_data_bounds_check(const bcmolt_epon_onu_10g_us_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_onu_10g_us_stat_alarm_cleared_id *failed_prop);
+
+/** Initializes a bcmolt_epon_onu_10g_us_stat_alarm_raised_data struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_onu_10g_us_stat_alarm_raised_data_set_default(bcmolt_epon_onu_10g_us_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_onu_10g_us_stat_alarm_raised_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_10g_us_stat_alarm_raised_data_pack(const bcmolt_epon_onu_10g_us_stat_alarm_raised_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_epon_onu_10g_us_stat_alarm_raised_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_onu_10g_us_stat_alarm_raised_data_get_packed_length(const bcmolt_epon_onu_10g_us_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_onu_10g_us_stat_alarm_raised_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_10g_us_stat_alarm_raised_data_unpack(bcmolt_epon_onu_10g_us_stat_alarm_raised_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_onu_10g_us_stat_alarm_raised_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_onu_10g_us_stat_alarm_raised_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_onu_10g_us_stat_alarm_raised_data is 
+ * out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_10g_us_stat_alarm_raised_data_bounds_check(const bcmolt_epon_onu_10g_us_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_onu_10g_us_stat_alarm_raised_id *failed_prop);
+
+/** Initializes a bcmolt_epon_onu_10g_us_auto_cfg_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_onu_10g_us_auto_cfg_data_set_default(bcmolt_epon_onu_10g_us_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_onu_10g_us_auto_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_10g_us_auto_cfg_data_pack(const bcmolt_epon_onu_10g_us_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_onu_10g_us_auto_cfg_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_onu_10g_us_auto_cfg_data_get_packed_length(const bcmolt_epon_onu_10g_us_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_onu_10g_us_auto_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_10g_us_auto_cfg_data_unpack(bcmolt_epon_onu_10g_us_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_onu_10g_us_auto_cfg_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_onu_10g_us_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_onu_10g_us_auto_cfg_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_10g_us_auto_cfg_data_bounds_check(const bcmolt_epon_onu_10g_us_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_onu_10g_us_auto_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_epon_onu_1g_us_key struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_onu_1g_us_key_set_default(bcmolt_epon_onu_1g_us_key *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_onu_1g_us_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_1g_us_key_pack(const bcmolt_epon_onu_1g_us_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_onu_1g_us_key would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_onu_1g_us_key_get_packed_length(const bcmolt_epon_onu_1g_us_key *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_onu_1g_us_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_1g_us_key_unpack(bcmolt_epon_onu_1g_us_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_onu_1g_us_key struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_onu_1g_us_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_onu_1g_us_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_1g_us_key_bounds_check(const bcmolt_epon_onu_1g_us_key *this, bcmolt_presence_mask fields_present, bcmolt_epon_onu_1g_us_key_id *failed_prop);
+
+/** Initializes a bcmolt_epon_onu_1g_us_cfg_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_onu_1g_us_cfg_data_set_default(bcmolt_epon_onu_1g_us_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_onu_1g_us_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_1g_us_cfg_data_pack(const bcmolt_epon_onu_1g_us_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_onu_1g_us_cfg_data would occupy 
+ * on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_onu_1g_us_cfg_data_get_packed_length(const bcmolt_epon_onu_1g_us_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_onu_1g_us_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_1g_us_cfg_data_unpack(bcmolt_epon_onu_1g_us_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_onu_1g_us_cfg_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_onu_1g_us_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_onu_1g_us_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_1g_us_cfg_data_bounds_check(const bcmolt_epon_onu_1g_us_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_onu_1g_us_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_epon_onu_1g_us_stat_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_onu_1g_us_stat_data_set_default(bcmolt_epon_onu_1g_us_stat_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_onu_1g_us_stat_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_1g_us_stat_data_pack(const bcmolt_epon_onu_1g_us_stat_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_onu_1g_us_stat_data would occupy 
+ * on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_onu_1g_us_stat_data_get_packed_length(const bcmolt_epon_onu_1g_us_stat_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_onu_1g_us_stat_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_1g_us_stat_data_unpack(bcmolt_epon_onu_1g_us_stat_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_onu_1g_us_stat_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_onu_1g_us_stat_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_onu_1g_us_stat_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_1g_us_stat_data_bounds_check(const bcmolt_epon_onu_1g_us_stat_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_onu_1g_us_stat_id *failed_prop);
+
+/** Initializes a bcmolt_epon_onu_1g_us_stat_cfg_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_onu_1g_us_stat_cfg_data_set_default(bcmolt_epon_onu_1g_us_stat_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_onu_1g_us_stat_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_1g_us_stat_cfg_data_pack(const bcmolt_epon_onu_1g_us_stat_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_onu_1g_us_stat_cfg_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_onu_1g_us_stat_cfg_data_get_packed_length(const bcmolt_epon_onu_1g_us_stat_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_onu_1g_us_stat_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_1g_us_stat_cfg_data_unpack(bcmolt_epon_onu_1g_us_stat_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_onu_1g_us_stat_cfg_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_onu_1g_us_stat_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_onu_1g_us_stat_cfg_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_1g_us_stat_cfg_data_bounds_check(const bcmolt_epon_onu_1g_us_stat_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_onu_1g_us_stat_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_epon_onu_1g_us_stat_alarm_cleared_data struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_onu_1g_us_stat_alarm_cleared_data_set_default(bcmolt_epon_onu_1g_us_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_onu_1g_us_stat_alarm_cleared_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_1g_us_stat_alarm_cleared_data_pack(const bcmolt_epon_onu_1g_us_stat_alarm_cleared_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_epon_onu_1g_us_stat_alarm_cleared_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_onu_1g_us_stat_alarm_cleared_data_get_packed_length(const bcmolt_epon_onu_1g_us_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_onu_1g_us_stat_alarm_cleared_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_1g_us_stat_alarm_cleared_data_unpack(bcmolt_epon_onu_1g_us_stat_alarm_cleared_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_onu_1g_us_stat_alarm_cleared_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_onu_1g_us_stat_alarm_cleared_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_onu_1g_us_stat_alarm_cleared_data is 
+ * out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_1g_us_stat_alarm_cleared_data_bounds_check(const bcmolt_epon_onu_1g_us_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_onu_1g_us_stat_alarm_cleared_id *failed_prop);
+
+/** Initializes a bcmolt_epon_onu_1g_us_stat_alarm_raised_data struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_onu_1g_us_stat_alarm_raised_data_set_default(bcmolt_epon_onu_1g_us_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_onu_1g_us_stat_alarm_raised_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_1g_us_stat_alarm_raised_data_pack(const bcmolt_epon_onu_1g_us_stat_alarm_raised_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_onu_1g_us_stat_alarm_raised_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_onu_1g_us_stat_alarm_raised_data_get_packed_length(const bcmolt_epon_onu_1g_us_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_onu_1g_us_stat_alarm_raised_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_1g_us_stat_alarm_raised_data_unpack(bcmolt_epon_onu_1g_us_stat_alarm_raised_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_onu_1g_us_stat_alarm_raised_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_onu_1g_us_stat_alarm_raised_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_onu_1g_us_stat_alarm_raised_data is 
+ * out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_1g_us_stat_alarm_raised_data_bounds_check(const bcmolt_epon_onu_1g_us_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_onu_1g_us_stat_alarm_raised_id *failed_prop);
+
+/** Initializes a bcmolt_epon_onu_1g_us_auto_cfg_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_onu_1g_us_auto_cfg_data_set_default(bcmolt_epon_onu_1g_us_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_onu_1g_us_auto_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_1g_us_auto_cfg_data_pack(const bcmolt_epon_onu_1g_us_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_onu_1g_us_auto_cfg_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_onu_1g_us_auto_cfg_data_get_packed_length(const bcmolt_epon_onu_1g_us_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_onu_1g_us_auto_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_1g_us_auto_cfg_data_unpack(bcmolt_epon_onu_1g_us_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_onu_1g_us_auto_cfg_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_onu_1g_us_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_onu_1g_us_auto_cfg_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_onu_1g_us_auto_cfg_data_bounds_check(const bcmolt_epon_onu_1g_us_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_onu_1g_us_auto_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_epon_path_10g_ds_key struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_path_10g_ds_key_set_default(bcmolt_epon_path_10g_ds_key *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_path_10g_ds_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_10g_ds_key_pack(const bcmolt_epon_path_10g_ds_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_path_10g_ds_key would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_path_10g_ds_key_get_packed_length(const bcmolt_epon_path_10g_ds_key *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_path_10g_ds_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_10g_ds_key_unpack(bcmolt_epon_path_10g_ds_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_path_10g_ds_key struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_path_10g_ds_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_path_10g_ds_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_10g_ds_key_bounds_check(const bcmolt_epon_path_10g_ds_key *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_10g_ds_key_id *failed_prop);
+
+/** Initializes a bcmolt_epon_path_10g_ds_cfg_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_path_10g_ds_cfg_data_set_default(bcmolt_epon_path_10g_ds_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_path_10g_ds_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_10g_ds_cfg_data_pack(const bcmolt_epon_path_10g_ds_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_path_10g_ds_cfg_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_path_10g_ds_cfg_data_get_packed_length(const bcmolt_epon_path_10g_ds_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_path_10g_ds_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_10g_ds_cfg_data_unpack(bcmolt_epon_path_10g_ds_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_path_10g_ds_cfg_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_path_10g_ds_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_path_10g_ds_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_10g_ds_cfg_data_bounds_check(const bcmolt_epon_path_10g_ds_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_10g_ds_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_epon_path_10g_ds_stat_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_path_10g_ds_stat_data_set_default(bcmolt_epon_path_10g_ds_stat_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_path_10g_ds_stat_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_10g_ds_stat_data_pack(const bcmolt_epon_path_10g_ds_stat_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_path_10g_ds_stat_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_path_10g_ds_stat_data_get_packed_length(const bcmolt_epon_path_10g_ds_stat_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_path_10g_ds_stat_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_10g_ds_stat_data_unpack(bcmolt_epon_path_10g_ds_stat_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_path_10g_ds_stat_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_path_10g_ds_stat_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_path_10g_ds_stat_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_10g_ds_stat_data_bounds_check(const bcmolt_epon_path_10g_ds_stat_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_10g_ds_stat_id *failed_prop);
+
+/** Initializes a bcmolt_epon_path_10g_ds_stat_cfg_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_path_10g_ds_stat_cfg_data_set_default(bcmolt_epon_path_10g_ds_stat_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_path_10g_ds_stat_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_10g_ds_stat_cfg_data_pack(const bcmolt_epon_path_10g_ds_stat_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_path_10g_ds_stat_cfg_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_path_10g_ds_stat_cfg_data_get_packed_length(const bcmolt_epon_path_10g_ds_stat_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_path_10g_ds_stat_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_10g_ds_stat_cfg_data_unpack(bcmolt_epon_path_10g_ds_stat_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_path_10g_ds_stat_cfg_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_path_10g_ds_stat_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_path_10g_ds_stat_cfg_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_10g_ds_stat_cfg_data_bounds_check(const bcmolt_epon_path_10g_ds_stat_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_10g_ds_stat_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_epon_path_10g_ds_stat_alarm_cleared_data struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_path_10g_ds_stat_alarm_cleared_data_set_default(bcmolt_epon_path_10g_ds_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_path_10g_ds_stat_alarm_cleared_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_10g_ds_stat_alarm_cleared_data_pack(const bcmolt_epon_path_10g_ds_stat_alarm_cleared_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_epon_path_10g_ds_stat_alarm_cleared_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_path_10g_ds_stat_alarm_cleared_data_get_packed_length(const bcmolt_epon_path_10g_ds_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_path_10g_ds_stat_alarm_cleared_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_10g_ds_stat_alarm_cleared_data_unpack(bcmolt_epon_path_10g_ds_stat_alarm_cleared_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_path_10g_ds_stat_alarm_cleared_data struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_path_10g_ds_stat_alarm_cleared_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_path_10g_ds_stat_alarm_cleared_data 
+ * is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_10g_ds_stat_alarm_cleared_data_bounds_check(const bcmolt_epon_path_10g_ds_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_10g_ds_stat_alarm_cleared_id *failed_prop);
+
+/** Initializes a bcmolt_epon_path_10g_ds_stat_alarm_raised_data struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_path_10g_ds_stat_alarm_raised_data_set_default(bcmolt_epon_path_10g_ds_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_path_10g_ds_stat_alarm_raised_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_10g_ds_stat_alarm_raised_data_pack(const bcmolt_epon_path_10g_ds_stat_alarm_raised_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_epon_path_10g_ds_stat_alarm_raised_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_path_10g_ds_stat_alarm_raised_data_get_packed_length(const bcmolt_epon_path_10g_ds_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_path_10g_ds_stat_alarm_raised_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_10g_ds_stat_alarm_raised_data_unpack(bcmolt_epon_path_10g_ds_stat_alarm_raised_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_path_10g_ds_stat_alarm_raised_data struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_path_10g_ds_stat_alarm_raised_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_path_10g_ds_stat_alarm_raised_data is 
+ * out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_10g_ds_stat_alarm_raised_data_bounds_check(const bcmolt_epon_path_10g_ds_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_10g_ds_stat_alarm_raised_id *failed_prop);
+
+/** Initializes a bcmolt_epon_path_10g_ds_auto_cfg_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_path_10g_ds_auto_cfg_data_set_default(bcmolt_epon_path_10g_ds_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_path_10g_ds_auto_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_10g_ds_auto_cfg_data_pack(const bcmolt_epon_path_10g_ds_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_path_10g_ds_auto_cfg_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_path_10g_ds_auto_cfg_data_get_packed_length(const bcmolt_epon_path_10g_ds_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_path_10g_ds_auto_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_10g_ds_auto_cfg_data_unpack(bcmolt_epon_path_10g_ds_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_path_10g_ds_auto_cfg_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_path_10g_ds_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_path_10g_ds_auto_cfg_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_10g_ds_auto_cfg_data_bounds_check(const bcmolt_epon_path_10g_ds_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_10g_ds_auto_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_epon_path_10g_us_key struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_path_10g_us_key_set_default(bcmolt_epon_path_10g_us_key *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_path_10g_us_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_10g_us_key_pack(const bcmolt_epon_path_10g_us_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_path_10g_us_key would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_path_10g_us_key_get_packed_length(const bcmolt_epon_path_10g_us_key *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_path_10g_us_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_10g_us_key_unpack(bcmolt_epon_path_10g_us_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_path_10g_us_key struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_path_10g_us_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_path_10g_us_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_10g_us_key_bounds_check(const bcmolt_epon_path_10g_us_key *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_10g_us_key_id *failed_prop);
+
+/** Initializes a bcmolt_epon_path_10g_us_cfg_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_path_10g_us_cfg_data_set_default(bcmolt_epon_path_10g_us_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_path_10g_us_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_10g_us_cfg_data_pack(const bcmolt_epon_path_10g_us_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_path_10g_us_cfg_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_path_10g_us_cfg_data_get_packed_length(const bcmolt_epon_path_10g_us_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_path_10g_us_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_10g_us_cfg_data_unpack(bcmolt_epon_path_10g_us_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_path_10g_us_cfg_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_path_10g_us_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_path_10g_us_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_10g_us_cfg_data_bounds_check(const bcmolt_epon_path_10g_us_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_10g_us_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_epon_path_10g_us_stat_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_path_10g_us_stat_data_set_default(bcmolt_epon_path_10g_us_stat_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_path_10g_us_stat_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_10g_us_stat_data_pack(const bcmolt_epon_path_10g_us_stat_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_path_10g_us_stat_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_path_10g_us_stat_data_get_packed_length(const bcmolt_epon_path_10g_us_stat_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_path_10g_us_stat_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_10g_us_stat_data_unpack(bcmolt_epon_path_10g_us_stat_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_path_10g_us_stat_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_path_10g_us_stat_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_path_10g_us_stat_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_10g_us_stat_data_bounds_check(const bcmolt_epon_path_10g_us_stat_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_10g_us_stat_id *failed_prop);
+
+/** Initializes a bcmolt_epon_path_10g_us_stat_cfg_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_path_10g_us_stat_cfg_data_set_default(bcmolt_epon_path_10g_us_stat_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_path_10g_us_stat_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_10g_us_stat_cfg_data_pack(const bcmolt_epon_path_10g_us_stat_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_path_10g_us_stat_cfg_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_path_10g_us_stat_cfg_data_get_packed_length(const bcmolt_epon_path_10g_us_stat_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_path_10g_us_stat_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_10g_us_stat_cfg_data_unpack(bcmolt_epon_path_10g_us_stat_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_path_10g_us_stat_cfg_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_path_10g_us_stat_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_path_10g_us_stat_cfg_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_10g_us_stat_cfg_data_bounds_check(const bcmolt_epon_path_10g_us_stat_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_10g_us_stat_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_epon_path_10g_us_stat_alarm_cleared_data struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_path_10g_us_stat_alarm_cleared_data_set_default(bcmolt_epon_path_10g_us_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_path_10g_us_stat_alarm_cleared_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_10g_us_stat_alarm_cleared_data_pack(const bcmolt_epon_path_10g_us_stat_alarm_cleared_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_epon_path_10g_us_stat_alarm_cleared_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_path_10g_us_stat_alarm_cleared_data_get_packed_length(const bcmolt_epon_path_10g_us_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_path_10g_us_stat_alarm_cleared_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_10g_us_stat_alarm_cleared_data_unpack(bcmolt_epon_path_10g_us_stat_alarm_cleared_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_path_10g_us_stat_alarm_cleared_data struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_path_10g_us_stat_alarm_cleared_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_path_10g_us_stat_alarm_cleared_data 
+ * is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_10g_us_stat_alarm_cleared_data_bounds_check(const bcmolt_epon_path_10g_us_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_10g_us_stat_alarm_cleared_id *failed_prop);
+
+/** Initializes a bcmolt_epon_path_10g_us_stat_alarm_raised_data struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_path_10g_us_stat_alarm_raised_data_set_default(bcmolt_epon_path_10g_us_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_path_10g_us_stat_alarm_raised_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_10g_us_stat_alarm_raised_data_pack(const bcmolt_epon_path_10g_us_stat_alarm_raised_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_epon_path_10g_us_stat_alarm_raised_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_path_10g_us_stat_alarm_raised_data_get_packed_length(const bcmolt_epon_path_10g_us_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_path_10g_us_stat_alarm_raised_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_10g_us_stat_alarm_raised_data_unpack(bcmolt_epon_path_10g_us_stat_alarm_raised_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_path_10g_us_stat_alarm_raised_data struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_path_10g_us_stat_alarm_raised_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_path_10g_us_stat_alarm_raised_data is 
+ * out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_10g_us_stat_alarm_raised_data_bounds_check(const bcmolt_epon_path_10g_us_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_10g_us_stat_alarm_raised_id *failed_prop);
+
+/** Initializes a bcmolt_epon_path_10g_us_auto_cfg_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_path_10g_us_auto_cfg_data_set_default(bcmolt_epon_path_10g_us_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_path_10g_us_auto_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_10g_us_auto_cfg_data_pack(const bcmolt_epon_path_10g_us_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_path_10g_us_auto_cfg_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_path_10g_us_auto_cfg_data_get_packed_length(const bcmolt_epon_path_10g_us_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_path_10g_us_auto_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_10g_us_auto_cfg_data_unpack(bcmolt_epon_path_10g_us_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_path_10g_us_auto_cfg_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_path_10g_us_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_path_10g_us_auto_cfg_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_10g_us_auto_cfg_data_bounds_check(const bcmolt_epon_path_10g_us_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_10g_us_auto_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_epon_path_1g_ds_key struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_path_1g_ds_key_set_default(bcmolt_epon_path_1g_ds_key *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_path_1g_ds_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_1g_ds_key_pack(const bcmolt_epon_path_1g_ds_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_path_1g_ds_key would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_path_1g_ds_key_get_packed_length(const bcmolt_epon_path_1g_ds_key *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_path_1g_ds_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_1g_ds_key_unpack(bcmolt_epon_path_1g_ds_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_path_1g_ds_key struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_path_1g_ds_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_path_1g_ds_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_1g_ds_key_bounds_check(const bcmolt_epon_path_1g_ds_key *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_1g_ds_key_id *failed_prop);
+
+/** Initializes a bcmolt_epon_path_1g_ds_cfg_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_path_1g_ds_cfg_data_set_default(bcmolt_epon_path_1g_ds_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_path_1g_ds_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_1g_ds_cfg_data_pack(const bcmolt_epon_path_1g_ds_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_path_1g_ds_cfg_data would occupy 
+ * on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_path_1g_ds_cfg_data_get_packed_length(const bcmolt_epon_path_1g_ds_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_path_1g_ds_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_1g_ds_cfg_data_unpack(bcmolt_epon_path_1g_ds_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_path_1g_ds_cfg_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_path_1g_ds_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_path_1g_ds_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_1g_ds_cfg_data_bounds_check(const bcmolt_epon_path_1g_ds_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_1g_ds_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_epon_path_1g_ds_stat_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_path_1g_ds_stat_data_set_default(bcmolt_epon_path_1g_ds_stat_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_path_1g_ds_stat_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_1g_ds_stat_data_pack(const bcmolt_epon_path_1g_ds_stat_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_path_1g_ds_stat_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_path_1g_ds_stat_data_get_packed_length(const bcmolt_epon_path_1g_ds_stat_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_path_1g_ds_stat_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_1g_ds_stat_data_unpack(bcmolt_epon_path_1g_ds_stat_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_path_1g_ds_stat_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_path_1g_ds_stat_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_path_1g_ds_stat_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_1g_ds_stat_data_bounds_check(const bcmolt_epon_path_1g_ds_stat_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_1g_ds_stat_id *failed_prop);
+
+/** Initializes a bcmolt_epon_path_1g_ds_stat_cfg_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_path_1g_ds_stat_cfg_data_set_default(bcmolt_epon_path_1g_ds_stat_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_path_1g_ds_stat_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_1g_ds_stat_cfg_data_pack(const bcmolt_epon_path_1g_ds_stat_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_path_1g_ds_stat_cfg_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_path_1g_ds_stat_cfg_data_get_packed_length(const bcmolt_epon_path_1g_ds_stat_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_path_1g_ds_stat_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_1g_ds_stat_cfg_data_unpack(bcmolt_epon_path_1g_ds_stat_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_path_1g_ds_stat_cfg_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_path_1g_ds_stat_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_path_1g_ds_stat_cfg_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_1g_ds_stat_cfg_data_bounds_check(const bcmolt_epon_path_1g_ds_stat_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_1g_ds_stat_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_epon_path_1g_ds_stat_alarm_cleared_data struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_path_1g_ds_stat_alarm_cleared_data_set_default(bcmolt_epon_path_1g_ds_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_path_1g_ds_stat_alarm_cleared_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_1g_ds_stat_alarm_cleared_data_pack(const bcmolt_epon_path_1g_ds_stat_alarm_cleared_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_epon_path_1g_ds_stat_alarm_cleared_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_path_1g_ds_stat_alarm_cleared_data_get_packed_length(const bcmolt_epon_path_1g_ds_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_path_1g_ds_stat_alarm_cleared_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_1g_ds_stat_alarm_cleared_data_unpack(bcmolt_epon_path_1g_ds_stat_alarm_cleared_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_path_1g_ds_stat_alarm_cleared_data struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_path_1g_ds_stat_alarm_cleared_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_path_1g_ds_stat_alarm_cleared_data is 
+ * out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_1g_ds_stat_alarm_cleared_data_bounds_check(const bcmolt_epon_path_1g_ds_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_1g_ds_stat_alarm_cleared_id *failed_prop);
+
+/** Initializes a bcmolt_epon_path_1g_ds_stat_alarm_raised_data struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_path_1g_ds_stat_alarm_raised_data_set_default(bcmolt_epon_path_1g_ds_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_path_1g_ds_stat_alarm_raised_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_1g_ds_stat_alarm_raised_data_pack(const bcmolt_epon_path_1g_ds_stat_alarm_raised_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_epon_path_1g_ds_stat_alarm_raised_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_path_1g_ds_stat_alarm_raised_data_get_packed_length(const bcmolt_epon_path_1g_ds_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_path_1g_ds_stat_alarm_raised_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_1g_ds_stat_alarm_raised_data_unpack(bcmolt_epon_path_1g_ds_stat_alarm_raised_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_path_1g_ds_stat_alarm_raised_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_path_1g_ds_stat_alarm_raised_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_path_1g_ds_stat_alarm_raised_data is 
+ * out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_1g_ds_stat_alarm_raised_data_bounds_check(const bcmolt_epon_path_1g_ds_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_1g_ds_stat_alarm_raised_id *failed_prop);
+
+/** Initializes a bcmolt_epon_path_1g_ds_auto_cfg_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_path_1g_ds_auto_cfg_data_set_default(bcmolt_epon_path_1g_ds_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_path_1g_ds_auto_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_1g_ds_auto_cfg_data_pack(const bcmolt_epon_path_1g_ds_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_path_1g_ds_auto_cfg_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_path_1g_ds_auto_cfg_data_get_packed_length(const bcmolt_epon_path_1g_ds_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_path_1g_ds_auto_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_1g_ds_auto_cfg_data_unpack(bcmolt_epon_path_1g_ds_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_path_1g_ds_auto_cfg_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_path_1g_ds_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_path_1g_ds_auto_cfg_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_1g_ds_auto_cfg_data_bounds_check(const bcmolt_epon_path_1g_ds_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_1g_ds_auto_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_epon_path_1g_us_key struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_path_1g_us_key_set_default(bcmolt_epon_path_1g_us_key *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_path_1g_us_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_1g_us_key_pack(const bcmolt_epon_path_1g_us_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_path_1g_us_key would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_path_1g_us_key_get_packed_length(const bcmolt_epon_path_1g_us_key *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_path_1g_us_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_1g_us_key_unpack(bcmolt_epon_path_1g_us_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_path_1g_us_key struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_path_1g_us_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_path_1g_us_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_1g_us_key_bounds_check(const bcmolt_epon_path_1g_us_key *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_1g_us_key_id *failed_prop);
+
+/** Initializes a bcmolt_epon_path_1g_us_cfg_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_path_1g_us_cfg_data_set_default(bcmolt_epon_path_1g_us_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_path_1g_us_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_1g_us_cfg_data_pack(const bcmolt_epon_path_1g_us_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_path_1g_us_cfg_data would occupy 
+ * on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_path_1g_us_cfg_data_get_packed_length(const bcmolt_epon_path_1g_us_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_path_1g_us_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_1g_us_cfg_data_unpack(bcmolt_epon_path_1g_us_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_path_1g_us_cfg_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_path_1g_us_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_path_1g_us_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_1g_us_cfg_data_bounds_check(const bcmolt_epon_path_1g_us_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_1g_us_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_epon_path_1g_us_stat_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_path_1g_us_stat_data_set_default(bcmolt_epon_path_1g_us_stat_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_path_1g_us_stat_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_1g_us_stat_data_pack(const bcmolt_epon_path_1g_us_stat_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_path_1g_us_stat_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_path_1g_us_stat_data_get_packed_length(const bcmolt_epon_path_1g_us_stat_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_path_1g_us_stat_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_1g_us_stat_data_unpack(bcmolt_epon_path_1g_us_stat_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_path_1g_us_stat_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_path_1g_us_stat_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_path_1g_us_stat_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_1g_us_stat_data_bounds_check(const bcmolt_epon_path_1g_us_stat_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_1g_us_stat_id *failed_prop);
+
+/** Initializes a bcmolt_epon_path_1g_us_stat_cfg_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_path_1g_us_stat_cfg_data_set_default(bcmolt_epon_path_1g_us_stat_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_path_1g_us_stat_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_1g_us_stat_cfg_data_pack(const bcmolt_epon_path_1g_us_stat_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_path_1g_us_stat_cfg_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_path_1g_us_stat_cfg_data_get_packed_length(const bcmolt_epon_path_1g_us_stat_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_path_1g_us_stat_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_1g_us_stat_cfg_data_unpack(bcmolt_epon_path_1g_us_stat_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_path_1g_us_stat_cfg_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_path_1g_us_stat_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_path_1g_us_stat_cfg_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_1g_us_stat_cfg_data_bounds_check(const bcmolt_epon_path_1g_us_stat_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_1g_us_stat_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_epon_path_1g_us_stat_alarm_cleared_data struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_path_1g_us_stat_alarm_cleared_data_set_default(bcmolt_epon_path_1g_us_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_path_1g_us_stat_alarm_cleared_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_1g_us_stat_alarm_cleared_data_pack(const bcmolt_epon_path_1g_us_stat_alarm_cleared_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_epon_path_1g_us_stat_alarm_cleared_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_path_1g_us_stat_alarm_cleared_data_get_packed_length(const bcmolt_epon_path_1g_us_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_path_1g_us_stat_alarm_cleared_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_1g_us_stat_alarm_cleared_data_unpack(bcmolt_epon_path_1g_us_stat_alarm_cleared_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_path_1g_us_stat_alarm_cleared_data struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_path_1g_us_stat_alarm_cleared_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_path_1g_us_stat_alarm_cleared_data is 
+ * out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_1g_us_stat_alarm_cleared_data_bounds_check(const bcmolt_epon_path_1g_us_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_1g_us_stat_alarm_cleared_id *failed_prop);
+
+/** Initializes a bcmolt_epon_path_1g_us_stat_alarm_raised_data struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_path_1g_us_stat_alarm_raised_data_set_default(bcmolt_epon_path_1g_us_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_path_1g_us_stat_alarm_raised_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_1g_us_stat_alarm_raised_data_pack(const bcmolt_epon_path_1g_us_stat_alarm_raised_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_epon_path_1g_us_stat_alarm_raised_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_path_1g_us_stat_alarm_raised_data_get_packed_length(const bcmolt_epon_path_1g_us_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_path_1g_us_stat_alarm_raised_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_1g_us_stat_alarm_raised_data_unpack(bcmolt_epon_path_1g_us_stat_alarm_raised_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_path_1g_us_stat_alarm_raised_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_path_1g_us_stat_alarm_raised_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_path_1g_us_stat_alarm_raised_data is 
+ * out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_1g_us_stat_alarm_raised_data_bounds_check(const bcmolt_epon_path_1g_us_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_1g_us_stat_alarm_raised_id *failed_prop);
+
+/** Initializes a bcmolt_epon_path_1g_us_auto_cfg_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_path_1g_us_auto_cfg_data_set_default(bcmolt_epon_path_1g_us_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_path_1g_us_auto_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_1g_us_auto_cfg_data_pack(const bcmolt_epon_path_1g_us_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_path_1g_us_auto_cfg_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_path_1g_us_auto_cfg_data_get_packed_length(const bcmolt_epon_path_1g_us_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_path_1g_us_auto_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_1g_us_auto_cfg_data_unpack(bcmolt_epon_path_1g_us_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_path_1g_us_auto_cfg_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_path_1g_us_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_path_1g_us_auto_cfg_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_path_1g_us_auto_cfg_data_bounds_check(const bcmolt_epon_path_1g_us_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_path_1g_us_auto_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_epon_rp_key struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_rp_key_set_default(bcmolt_epon_rp_key *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_rp_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_rp_key_pack(const bcmolt_epon_rp_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_rp_key would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_rp_key_get_packed_length(const bcmolt_epon_rp_key *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_rp_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_rp_key_unpack(bcmolt_epon_rp_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_rp_key struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_rp_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_rp_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_rp_key_bounds_check(const bcmolt_epon_rp_key *this, bcmolt_presence_mask fields_present, bcmolt_epon_rp_key_id *failed_prop);
+
+/** Initializes a bcmolt_epon_rp_cfg_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_epon_rp_cfg_data_set_default(bcmolt_epon_rp_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_epon_rp_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_rp_cfg_data_pack(const bcmolt_epon_rp_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_epon_rp_cfg_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_rp_cfg_data_get_packed_length(const bcmolt_epon_rp_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_epon_rp_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_rp_cfg_data_unpack(bcmolt_epon_rp_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_epon_rp_cfg_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_rp_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_epon_rp_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_rp_cfg_data_bounds_check(const bcmolt_epon_rp_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_epon_rp_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_gpio_key struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpio_key_set_default(bcmolt_gpio_key *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpio_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpio_key_pack(const bcmolt_gpio_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpio_key would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpio_key_get_packed_length(const bcmolt_gpio_key *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpio_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpio_key_unpack(bcmolt_gpio_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpio_key struct and collects memory requirements 
+ * above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpio_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpio_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpio_key_bounds_check(const bcmolt_gpio_key *this, bcmolt_presence_mask fields_present, bcmolt_gpio_key_id *failed_prop);
+
+/** Initializes a bcmolt_gpio_cfg_data struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpio_cfg_data_set_default(bcmolt_gpio_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpio_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpio_cfg_data_pack(const bcmolt_gpio_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpio_cfg_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpio_cfg_data_get_packed_length(const bcmolt_gpio_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpio_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpio_cfg_data_unpack(bcmolt_gpio_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpio_cfg_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpio_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpio_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpio_cfg_data_bounds_check(const bcmolt_gpio_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_gpio_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_alloc_key struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_alloc_key_set_default(bcmolt_gpon_alloc_key *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_alloc_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_alloc_key_pack(const bcmolt_gpon_alloc_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_alloc_key would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_alloc_key_get_packed_length(const bcmolt_gpon_alloc_key *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_alloc_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_alloc_key_unpack(bcmolt_gpon_alloc_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_alloc_key struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_alloc_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_alloc_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_alloc_key_bounds_check(const bcmolt_gpon_alloc_key *this, bcmolt_presence_mask fields_present, bcmolt_gpon_alloc_key_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_alloc_cfg_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_alloc_cfg_data_set_default(bcmolt_gpon_alloc_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_alloc_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_alloc_cfg_data_pack(const bcmolt_gpon_alloc_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_alloc_cfg_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_alloc_cfg_data_get_packed_length(const bcmolt_gpon_alloc_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_alloc_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_alloc_cfg_data_unpack(bcmolt_gpon_alloc_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_alloc_cfg_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_alloc_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_alloc_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_alloc_cfg_data_bounds_check(const bcmolt_gpon_alloc_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_alloc_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_alloc_stat_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_alloc_stat_data_set_default(bcmolt_gpon_alloc_stat_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_alloc_stat_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_alloc_stat_data_pack(const bcmolt_gpon_alloc_stat_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_alloc_stat_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_alloc_stat_data_get_packed_length(const bcmolt_gpon_alloc_stat_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_alloc_stat_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_alloc_stat_data_unpack(bcmolt_gpon_alloc_stat_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_alloc_stat_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_alloc_stat_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_alloc_stat_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_alloc_stat_data_bounds_check(const bcmolt_gpon_alloc_stat_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_alloc_stat_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_alloc_stat_cfg_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_alloc_stat_cfg_data_set_default(bcmolt_gpon_alloc_stat_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_alloc_stat_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_alloc_stat_cfg_data_pack(const bcmolt_gpon_alloc_stat_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_alloc_stat_cfg_data would occupy 
+ * on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_alloc_stat_cfg_data_get_packed_length(const bcmolt_gpon_alloc_stat_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_alloc_stat_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_alloc_stat_cfg_data_unpack(bcmolt_gpon_alloc_stat_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_alloc_stat_cfg_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_alloc_stat_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_alloc_stat_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_alloc_stat_cfg_data_bounds_check(const bcmolt_gpon_alloc_stat_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_alloc_stat_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_alloc_configuration_completed_data struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_alloc_configuration_completed_data_set_default(bcmolt_gpon_alloc_configuration_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_alloc_configuration_completed_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_alloc_configuration_completed_data_pack(const bcmolt_gpon_alloc_configuration_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_gpon_alloc_configuration_completed_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_alloc_configuration_completed_data_get_packed_length(const bcmolt_gpon_alloc_configuration_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_alloc_configuration_completed_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_alloc_configuration_completed_data_unpack(bcmolt_gpon_alloc_configuration_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_alloc_configuration_completed_data struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_alloc_configuration_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_alloc_configuration_completed_data is 
+ * out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_alloc_configuration_completed_data_bounds_check(const bcmolt_gpon_alloc_configuration_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_alloc_configuration_completed_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_alloc_get_alloc_stats_completed_data struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_alloc_get_alloc_stats_completed_data_set_default(bcmolt_gpon_alloc_get_alloc_stats_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_alloc_get_alloc_stats_completed_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_alloc_get_alloc_stats_completed_data_pack(const bcmolt_gpon_alloc_get_alloc_stats_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_gpon_alloc_get_alloc_stats_completed_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_alloc_get_alloc_stats_completed_data_get_packed_length(const bcmolt_gpon_alloc_get_alloc_stats_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_alloc_get_alloc_stats_completed_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_alloc_get_alloc_stats_completed_data_unpack(bcmolt_gpon_alloc_get_alloc_stats_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_alloc_get_alloc_stats_completed_data struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_alloc_get_alloc_stats_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_alloc_get_alloc_stats_completed_data 
+ * is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_alloc_get_alloc_stats_completed_data_bounds_check(const bcmolt_gpon_alloc_get_alloc_stats_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_alloc_get_alloc_stats_completed_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_alloc_stat_alarm_cleared_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_alloc_stat_alarm_cleared_data_set_default(bcmolt_gpon_alloc_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_alloc_stat_alarm_cleared_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_alloc_stat_alarm_cleared_data_pack(const bcmolt_gpon_alloc_stat_alarm_cleared_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_alloc_stat_alarm_cleared_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_alloc_stat_alarm_cleared_data_get_packed_length(const bcmolt_gpon_alloc_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_alloc_stat_alarm_cleared_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_alloc_stat_alarm_cleared_data_unpack(bcmolt_gpon_alloc_stat_alarm_cleared_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_alloc_stat_alarm_cleared_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_alloc_stat_alarm_cleared_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_alloc_stat_alarm_cleared_data is out 
+ * of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_alloc_stat_alarm_cleared_data_bounds_check(const bcmolt_gpon_alloc_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_alloc_stat_alarm_cleared_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_alloc_stat_alarm_raised_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_alloc_stat_alarm_raised_data_set_default(bcmolt_gpon_alloc_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_alloc_stat_alarm_raised_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_alloc_stat_alarm_raised_data_pack(const bcmolt_gpon_alloc_stat_alarm_raised_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_alloc_stat_alarm_raised_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_alloc_stat_alarm_raised_data_get_packed_length(const bcmolt_gpon_alloc_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_alloc_stat_alarm_raised_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_alloc_stat_alarm_raised_data_unpack(bcmolt_gpon_alloc_stat_alarm_raised_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_alloc_stat_alarm_raised_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_alloc_stat_alarm_raised_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_alloc_stat_alarm_raised_data is out 
+ * of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_alloc_stat_alarm_raised_data_bounds_check(const bcmolt_gpon_alloc_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_alloc_stat_alarm_raised_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_alloc_auto_cfg_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_alloc_auto_cfg_data_set_default(bcmolt_gpon_alloc_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_alloc_auto_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_alloc_auto_cfg_data_pack(const bcmolt_gpon_alloc_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_alloc_auto_cfg_data would occupy 
+ * on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_alloc_auto_cfg_data_get_packed_length(const bcmolt_gpon_alloc_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_alloc_auto_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_alloc_auto_cfg_data_unpack(bcmolt_gpon_alloc_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_alloc_auto_cfg_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_alloc_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_alloc_auto_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_alloc_auto_cfg_data_bounds_check(const bcmolt_gpon_alloc_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_alloc_auto_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_alloc_get_stats_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_alloc_get_stats_data_set_default(bcmolt_gpon_alloc_get_stats_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_alloc_get_stats_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_alloc_get_stats_data_pack(const bcmolt_gpon_alloc_get_stats_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_alloc_get_stats_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_alloc_get_stats_data_get_packed_length(const bcmolt_gpon_alloc_get_stats_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_alloc_get_stats_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_alloc_get_stats_data_unpack(bcmolt_gpon_alloc_get_stats_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_alloc_get_stats_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_alloc_get_stats_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_alloc_get_stats_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_alloc_get_stats_data_bounds_check(const bcmolt_gpon_alloc_get_stats_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_alloc_get_stats_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_alloc_set_state_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_alloc_set_state_data_set_default(bcmolt_gpon_alloc_set_state_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_alloc_set_state_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_alloc_set_state_data_pack(const bcmolt_gpon_alloc_set_state_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_alloc_set_state_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_alloc_set_state_data_get_packed_length(const bcmolt_gpon_alloc_set_state_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_alloc_set_state_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_alloc_set_state_data_unpack(bcmolt_gpon_alloc_set_state_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_alloc_set_state_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_alloc_set_state_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_alloc_set_state_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_alloc_set_state_data_bounds_check(const bcmolt_gpon_alloc_set_state_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_alloc_set_state_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_gem_port_key struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_gem_port_key_set_default(bcmolt_gpon_gem_port_key *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_gem_port_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_gem_port_key_pack(const bcmolt_gpon_gem_port_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_gem_port_key would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_gem_port_key_get_packed_length(const bcmolt_gpon_gem_port_key *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_gem_port_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_gem_port_key_unpack(bcmolt_gpon_gem_port_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_gem_port_key struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_gem_port_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_gem_port_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_gem_port_key_bounds_check(const bcmolt_gpon_gem_port_key *this, bcmolt_presence_mask fields_present, bcmolt_gpon_gem_port_key_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_gem_port_cfg_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_gem_port_cfg_data_set_default(bcmolt_gpon_gem_port_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_gem_port_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_gem_port_cfg_data_pack(const bcmolt_gpon_gem_port_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_gem_port_cfg_data would occupy 
+ * on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_gem_port_cfg_data_get_packed_length(const bcmolt_gpon_gem_port_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_gem_port_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_gem_port_cfg_data_unpack(bcmolt_gpon_gem_port_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_gem_port_cfg_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_gem_port_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_gem_port_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_gem_port_cfg_data_bounds_check(const bcmolt_gpon_gem_port_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_gem_port_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_gem_port_stat_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_gem_port_stat_data_set_default(bcmolt_gpon_gem_port_stat_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_gem_port_stat_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_gem_port_stat_data_pack(const bcmolt_gpon_gem_port_stat_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_gem_port_stat_data would occupy 
+ * on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_gem_port_stat_data_get_packed_length(const bcmolt_gpon_gem_port_stat_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_gem_port_stat_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_gem_port_stat_data_unpack(bcmolt_gpon_gem_port_stat_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_gem_port_stat_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_gem_port_stat_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_gem_port_stat_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_gem_port_stat_data_bounds_check(const bcmolt_gpon_gem_port_stat_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_gem_port_stat_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_gem_port_stat_cfg_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_gem_port_stat_cfg_data_set_default(bcmolt_gpon_gem_port_stat_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_gem_port_stat_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_gem_port_stat_cfg_data_pack(const bcmolt_gpon_gem_port_stat_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_gem_port_stat_cfg_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_gem_port_stat_cfg_data_get_packed_length(const bcmolt_gpon_gem_port_stat_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_gem_port_stat_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_gem_port_stat_cfg_data_unpack(bcmolt_gpon_gem_port_stat_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_gem_port_stat_cfg_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_gem_port_stat_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_gem_port_stat_cfg_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_gem_port_stat_cfg_data_bounds_check(const bcmolt_gpon_gem_port_stat_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_gem_port_stat_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_gem_port_configuration_completed_data struct.  
+ * This sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_gem_port_configuration_completed_data_set_default(bcmolt_gpon_gem_port_configuration_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_gem_port_configuration_completed_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_gem_port_configuration_completed_data_pack(const bcmolt_gpon_gem_port_configuration_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_gpon_gem_port_configuration_completed_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_gem_port_configuration_completed_data_get_packed_length(const bcmolt_gpon_gem_port_configuration_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_gem_port_configuration_completed_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_gem_port_configuration_completed_data_unpack(bcmolt_gpon_gem_port_configuration_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_gem_port_configuration_completed_data struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_gem_port_configuration_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_gem_port_configuration_completed_data 
+ * is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_gem_port_configuration_completed_data_bounds_check(const bcmolt_gpon_gem_port_configuration_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_gem_port_configuration_completed_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_gem_port_stat_alarm_cleared_data struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_gem_port_stat_alarm_cleared_data_set_default(bcmolt_gpon_gem_port_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_gem_port_stat_alarm_cleared_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_gem_port_stat_alarm_cleared_data_pack(const bcmolt_gpon_gem_port_stat_alarm_cleared_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_gem_port_stat_alarm_cleared_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_gem_port_stat_alarm_cleared_data_get_packed_length(const bcmolt_gpon_gem_port_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_gem_port_stat_alarm_cleared_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_gem_port_stat_alarm_cleared_data_unpack(bcmolt_gpon_gem_port_stat_alarm_cleared_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_gem_port_stat_alarm_cleared_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_gem_port_stat_alarm_cleared_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_gem_port_stat_alarm_cleared_data is 
+ * out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_gem_port_stat_alarm_cleared_data_bounds_check(const bcmolt_gpon_gem_port_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_gem_port_stat_alarm_cleared_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_gem_port_stat_alarm_raised_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_gem_port_stat_alarm_raised_data_set_default(bcmolt_gpon_gem_port_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_gem_port_stat_alarm_raised_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_gem_port_stat_alarm_raised_data_pack(const bcmolt_gpon_gem_port_stat_alarm_raised_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_gem_port_stat_alarm_raised_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_gem_port_stat_alarm_raised_data_get_packed_length(const bcmolt_gpon_gem_port_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_gem_port_stat_alarm_raised_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_gem_port_stat_alarm_raised_data_unpack(bcmolt_gpon_gem_port_stat_alarm_raised_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_gem_port_stat_alarm_raised_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_gem_port_stat_alarm_raised_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_gem_port_stat_alarm_raised_data is 
+ * out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_gem_port_stat_alarm_raised_data_bounds_check(const bcmolt_gpon_gem_port_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_gem_port_stat_alarm_raised_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_gem_port_auto_cfg_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_gem_port_auto_cfg_data_set_default(bcmolt_gpon_gem_port_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_gem_port_auto_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_gem_port_auto_cfg_data_pack(const bcmolt_gpon_gem_port_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_gem_port_auto_cfg_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_gem_port_auto_cfg_data_get_packed_length(const bcmolt_gpon_gem_port_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_gem_port_auto_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_gem_port_auto_cfg_data_unpack(bcmolt_gpon_gem_port_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_gem_port_auto_cfg_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_gem_port_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_gem_port_auto_cfg_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_gem_port_auto_cfg_data_bounds_check(const bcmolt_gpon_gem_port_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_gem_port_auto_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_gem_port_set_state_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_gem_port_set_state_data_set_default(bcmolt_gpon_gem_port_set_state_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_gem_port_set_state_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_gem_port_set_state_data_pack(const bcmolt_gpon_gem_port_set_state_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_gem_port_set_state_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_gem_port_set_state_data_get_packed_length(const bcmolt_gpon_gem_port_set_state_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_gem_port_set_state_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_gem_port_set_state_data_unpack(bcmolt_gpon_gem_port_set_state_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_gem_port_set_state_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_gem_port_set_state_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_gem_port_set_state_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_gem_port_set_state_data_bounds_check(const bcmolt_gpon_gem_port_set_state_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_gem_port_set_state_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_iwf_key struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_iwf_key_set_default(bcmolt_gpon_iwf_key *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_iwf_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_key_pack(const bcmolt_gpon_iwf_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_iwf_key would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_iwf_key_get_packed_length(const bcmolt_gpon_iwf_key *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_iwf_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_key_unpack(bcmolt_gpon_iwf_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_iwf_key struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_iwf_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_iwf_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_key_bounds_check(const bcmolt_gpon_iwf_key *this, bcmolt_presence_mask fields_present, bcmolt_gpon_iwf_key_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_iwf_cfg_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_iwf_cfg_data_set_default(bcmolt_gpon_iwf_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_iwf_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_cfg_data_pack(const bcmolt_gpon_iwf_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_iwf_cfg_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_iwf_cfg_data_get_packed_length(const bcmolt_gpon_iwf_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_iwf_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_cfg_data_unpack(bcmolt_gpon_iwf_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_iwf_cfg_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_iwf_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_iwf_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_cfg_data_bounds_check(const bcmolt_gpon_iwf_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_iwf_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_iwf_stat_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_iwf_stat_data_set_default(bcmolt_gpon_iwf_stat_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_iwf_stat_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_stat_data_pack(const bcmolt_gpon_iwf_stat_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_iwf_stat_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_iwf_stat_data_get_packed_length(const bcmolt_gpon_iwf_stat_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_iwf_stat_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_stat_data_unpack(bcmolt_gpon_iwf_stat_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_iwf_stat_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_iwf_stat_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_iwf_stat_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_stat_data_bounds_check(const bcmolt_gpon_iwf_stat_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_iwf_stat_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_iwf_stat_cfg_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_iwf_stat_cfg_data_set_default(bcmolt_gpon_iwf_stat_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_iwf_stat_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_stat_cfg_data_pack(const bcmolt_gpon_iwf_stat_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_iwf_stat_cfg_data would occupy 
+ * on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_iwf_stat_cfg_data_get_packed_length(const bcmolt_gpon_iwf_stat_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_iwf_stat_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_stat_cfg_data_unpack(bcmolt_gpon_iwf_stat_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_iwf_stat_cfg_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_iwf_stat_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_iwf_stat_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_stat_cfg_data_bounds_check(const bcmolt_gpon_iwf_stat_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_iwf_stat_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_iwf_scan_mac_table_completed_data struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_iwf_scan_mac_table_completed_data_set_default(bcmolt_gpon_iwf_scan_mac_table_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_iwf_scan_mac_table_completed_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_scan_mac_table_completed_data_pack(const bcmolt_gpon_iwf_scan_mac_table_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_gpon_iwf_scan_mac_table_completed_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_iwf_scan_mac_table_completed_data_get_packed_length(const bcmolt_gpon_iwf_scan_mac_table_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_iwf_scan_mac_table_completed_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_scan_mac_table_completed_data_unpack(bcmolt_gpon_iwf_scan_mac_table_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_iwf_scan_mac_table_completed_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_iwf_scan_mac_table_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_iwf_scan_mac_table_completed_data is 
+ * out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_scan_mac_table_completed_data_bounds_check(const bcmolt_gpon_iwf_scan_mac_table_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_iwf_scan_mac_table_completed_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_iwf_stat_alarm_cleared_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_iwf_stat_alarm_cleared_data_set_default(bcmolt_gpon_iwf_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_iwf_stat_alarm_cleared_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_stat_alarm_cleared_data_pack(const bcmolt_gpon_iwf_stat_alarm_cleared_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_iwf_stat_alarm_cleared_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_iwf_stat_alarm_cleared_data_get_packed_length(const bcmolt_gpon_iwf_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_iwf_stat_alarm_cleared_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_stat_alarm_cleared_data_unpack(bcmolt_gpon_iwf_stat_alarm_cleared_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_iwf_stat_alarm_cleared_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_iwf_stat_alarm_cleared_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_iwf_stat_alarm_cleared_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_stat_alarm_cleared_data_bounds_check(const bcmolt_gpon_iwf_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_iwf_stat_alarm_cleared_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_iwf_stat_alarm_raised_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_iwf_stat_alarm_raised_data_set_default(bcmolt_gpon_iwf_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_iwf_stat_alarm_raised_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_stat_alarm_raised_data_pack(const bcmolt_gpon_iwf_stat_alarm_raised_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_iwf_stat_alarm_raised_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_iwf_stat_alarm_raised_data_get_packed_length(const bcmolt_gpon_iwf_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_iwf_stat_alarm_raised_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_stat_alarm_raised_data_unpack(bcmolt_gpon_iwf_stat_alarm_raised_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_iwf_stat_alarm_raised_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_iwf_stat_alarm_raised_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_iwf_stat_alarm_raised_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_stat_alarm_raised_data_bounds_check(const bcmolt_gpon_iwf_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_iwf_stat_alarm_raised_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_iwf_auto_cfg_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_iwf_auto_cfg_data_set_default(bcmolt_gpon_iwf_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_iwf_auto_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_auto_cfg_data_pack(const bcmolt_gpon_iwf_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_iwf_auto_cfg_data would occupy 
+ * on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_iwf_auto_cfg_data_get_packed_length(const bcmolt_gpon_iwf_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_iwf_auto_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_auto_cfg_data_unpack(bcmolt_gpon_iwf_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_iwf_auto_cfg_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_iwf_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_iwf_auto_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_auto_cfg_data_bounds_check(const bcmolt_gpon_iwf_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_iwf_auto_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_iwf_flush_mac_table_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_iwf_flush_mac_table_data_set_default(bcmolt_gpon_iwf_flush_mac_table_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_iwf_flush_mac_table_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_flush_mac_table_data_pack(const bcmolt_gpon_iwf_flush_mac_table_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_iwf_flush_mac_table_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_iwf_flush_mac_table_data_get_packed_length(const bcmolt_gpon_iwf_flush_mac_table_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_iwf_flush_mac_table_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_flush_mac_table_data_unpack(bcmolt_gpon_iwf_flush_mac_table_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_iwf_flush_mac_table_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_iwf_flush_mac_table_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_iwf_flush_mac_table_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_flush_mac_table_data_bounds_check(const bcmolt_gpon_iwf_flush_mac_table_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_iwf_flush_mac_table_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_iwf_scan_mac_table_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_iwf_scan_mac_table_data_set_default(bcmolt_gpon_iwf_scan_mac_table_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_iwf_scan_mac_table_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_scan_mac_table_data_pack(const bcmolt_gpon_iwf_scan_mac_table_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_iwf_scan_mac_table_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_iwf_scan_mac_table_data_get_packed_length(const bcmolt_gpon_iwf_scan_mac_table_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_iwf_scan_mac_table_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_scan_mac_table_data_unpack(bcmolt_gpon_iwf_scan_mac_table_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_iwf_scan_mac_table_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_iwf_scan_mac_table_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_iwf_scan_mac_table_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_scan_mac_table_data_bounds_check(const bcmolt_gpon_iwf_scan_mac_table_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_iwf_scan_mac_table_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_iwf_ds_egress_flow_key struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_iwf_ds_egress_flow_key_set_default(bcmolt_gpon_iwf_ds_egress_flow_key *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_iwf_ds_egress_flow_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_ds_egress_flow_key_pack(const bcmolt_gpon_iwf_ds_egress_flow_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_iwf_ds_egress_flow_key would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_iwf_ds_egress_flow_key_get_packed_length(const bcmolt_gpon_iwf_ds_egress_flow_key *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_iwf_ds_egress_flow_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_ds_egress_flow_key_unpack(bcmolt_gpon_iwf_ds_egress_flow_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_iwf_ds_egress_flow_key struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_iwf_ds_egress_flow_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_iwf_ds_egress_flow_key is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_ds_egress_flow_key_bounds_check(const bcmolt_gpon_iwf_ds_egress_flow_key *this, bcmolt_presence_mask fields_present, bcmolt_gpon_iwf_ds_egress_flow_key_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_iwf_ds_egress_flow_cfg_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_iwf_ds_egress_flow_cfg_data_set_default(bcmolt_gpon_iwf_ds_egress_flow_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_iwf_ds_egress_flow_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_ds_egress_flow_cfg_data_pack(const bcmolt_gpon_iwf_ds_egress_flow_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_iwf_ds_egress_flow_cfg_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_iwf_ds_egress_flow_cfg_data_get_packed_length(const bcmolt_gpon_iwf_ds_egress_flow_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_iwf_ds_egress_flow_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_ds_egress_flow_cfg_data_unpack(bcmolt_gpon_iwf_ds_egress_flow_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_iwf_ds_egress_flow_cfg_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_iwf_ds_egress_flow_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_iwf_ds_egress_flow_cfg_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_ds_egress_flow_cfg_data_bounds_check(const bcmolt_gpon_iwf_ds_egress_flow_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_iwf_ds_egress_flow_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_iwf_ds_ingress_flow_key struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_iwf_ds_ingress_flow_key_set_default(bcmolt_gpon_iwf_ds_ingress_flow_key *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_iwf_ds_ingress_flow_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_ds_ingress_flow_key_pack(const bcmolt_gpon_iwf_ds_ingress_flow_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_iwf_ds_ingress_flow_key would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_iwf_ds_ingress_flow_key_get_packed_length(const bcmolt_gpon_iwf_ds_ingress_flow_key *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_iwf_ds_ingress_flow_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_ds_ingress_flow_key_unpack(bcmolt_gpon_iwf_ds_ingress_flow_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_iwf_ds_ingress_flow_key struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_iwf_ds_ingress_flow_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_iwf_ds_ingress_flow_key is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_ds_ingress_flow_key_bounds_check(const bcmolt_gpon_iwf_ds_ingress_flow_key *this, bcmolt_presence_mask fields_present, bcmolt_gpon_iwf_ds_ingress_flow_key_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_iwf_ds_ingress_flow_cfg_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_iwf_ds_ingress_flow_cfg_data_set_default(bcmolt_gpon_iwf_ds_ingress_flow_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_iwf_ds_ingress_flow_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_ds_ingress_flow_cfg_data_pack(const bcmolt_gpon_iwf_ds_ingress_flow_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_iwf_ds_ingress_flow_cfg_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_iwf_ds_ingress_flow_cfg_data_get_packed_length(const bcmolt_gpon_iwf_ds_ingress_flow_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_iwf_ds_ingress_flow_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_ds_ingress_flow_cfg_data_unpack(bcmolt_gpon_iwf_ds_ingress_flow_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_iwf_ds_ingress_flow_cfg_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_iwf_ds_ingress_flow_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_iwf_ds_ingress_flow_cfg_data is out 
+ * of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_ds_ingress_flow_cfg_data_bounds_check(const bcmolt_gpon_iwf_ds_ingress_flow_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_iwf_ds_ingress_flow_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_iwf_mac_table_key struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_iwf_mac_table_key_set_default(bcmolt_gpon_iwf_mac_table_key *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_iwf_mac_table_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_mac_table_key_pack(const bcmolt_gpon_iwf_mac_table_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_iwf_mac_table_key would occupy 
+ * on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_iwf_mac_table_key_get_packed_length(const bcmolt_gpon_iwf_mac_table_key *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_iwf_mac_table_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_mac_table_key_unpack(bcmolt_gpon_iwf_mac_table_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_iwf_mac_table_key struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_iwf_mac_table_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_iwf_mac_table_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_mac_table_key_bounds_check(const bcmolt_gpon_iwf_mac_table_key *this, bcmolt_presence_mask fields_present, bcmolt_gpon_iwf_mac_table_key_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_iwf_mac_table_cfg_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_iwf_mac_table_cfg_data_set_default(bcmolt_gpon_iwf_mac_table_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_iwf_mac_table_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_mac_table_cfg_data_pack(const bcmolt_gpon_iwf_mac_table_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_iwf_mac_table_cfg_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_iwf_mac_table_cfg_data_get_packed_length(const bcmolt_gpon_iwf_mac_table_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_iwf_mac_table_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_mac_table_cfg_data_unpack(bcmolt_gpon_iwf_mac_table_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_iwf_mac_table_cfg_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_iwf_mac_table_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_iwf_mac_table_cfg_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_mac_table_cfg_data_bounds_check(const bcmolt_gpon_iwf_mac_table_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_iwf_mac_table_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_iwf_mac_table_mac_dropped_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_iwf_mac_table_mac_dropped_data_set_default(bcmolt_gpon_iwf_mac_table_mac_dropped_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_iwf_mac_table_mac_dropped_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_mac_table_mac_dropped_data_pack(const bcmolt_gpon_iwf_mac_table_mac_dropped_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_iwf_mac_table_mac_dropped_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_iwf_mac_table_mac_dropped_data_get_packed_length(const bcmolt_gpon_iwf_mac_table_mac_dropped_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_iwf_mac_table_mac_dropped_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_mac_table_mac_dropped_data_unpack(bcmolt_gpon_iwf_mac_table_mac_dropped_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_iwf_mac_table_mac_dropped_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_iwf_mac_table_mac_dropped_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_iwf_mac_table_mac_dropped_data is out 
+ * of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_mac_table_mac_dropped_data_bounds_check(const bcmolt_gpon_iwf_mac_table_mac_dropped_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_iwf_mac_table_mac_dropped_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_iwf_mac_table_mac_move_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_iwf_mac_table_mac_move_data_set_default(bcmolt_gpon_iwf_mac_table_mac_move_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_iwf_mac_table_mac_move_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_mac_table_mac_move_data_pack(const bcmolt_gpon_iwf_mac_table_mac_move_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_iwf_mac_table_mac_move_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_iwf_mac_table_mac_move_data_get_packed_length(const bcmolt_gpon_iwf_mac_table_mac_move_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_iwf_mac_table_mac_move_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_mac_table_mac_move_data_unpack(bcmolt_gpon_iwf_mac_table_mac_move_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_iwf_mac_table_mac_move_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_iwf_mac_table_mac_move_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_iwf_mac_table_mac_move_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_mac_table_mac_move_data_bounds_check(const bcmolt_gpon_iwf_mac_table_mac_move_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_iwf_mac_table_mac_move_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_iwf_mac_table_new_mac_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_iwf_mac_table_new_mac_data_set_default(bcmolt_gpon_iwf_mac_table_new_mac_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_iwf_mac_table_new_mac_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_mac_table_new_mac_data_pack(const bcmolt_gpon_iwf_mac_table_new_mac_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_iwf_mac_table_new_mac_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_iwf_mac_table_new_mac_data_get_packed_length(const bcmolt_gpon_iwf_mac_table_new_mac_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_iwf_mac_table_new_mac_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_mac_table_new_mac_data_unpack(bcmolt_gpon_iwf_mac_table_new_mac_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_iwf_mac_table_new_mac_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_iwf_mac_table_new_mac_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_iwf_mac_table_new_mac_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_mac_table_new_mac_data_bounds_check(const bcmolt_gpon_iwf_mac_table_new_mac_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_iwf_mac_table_new_mac_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_iwf_mac_table_auto_cfg_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_iwf_mac_table_auto_cfg_data_set_default(bcmolt_gpon_iwf_mac_table_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_iwf_mac_table_auto_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_mac_table_auto_cfg_data_pack(const bcmolt_gpon_iwf_mac_table_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_iwf_mac_table_auto_cfg_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_iwf_mac_table_auto_cfg_data_get_packed_length(const bcmolt_gpon_iwf_mac_table_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_iwf_mac_table_auto_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_mac_table_auto_cfg_data_unpack(bcmolt_gpon_iwf_mac_table_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_iwf_mac_table_auto_cfg_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_iwf_mac_table_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_iwf_mac_table_auto_cfg_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_mac_table_auto_cfg_data_bounds_check(const bcmolt_gpon_iwf_mac_table_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_iwf_mac_table_auto_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_iwf_us_flow_key struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_iwf_us_flow_key_set_default(bcmolt_gpon_iwf_us_flow_key *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_iwf_us_flow_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_us_flow_key_pack(const bcmolt_gpon_iwf_us_flow_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_iwf_us_flow_key would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_iwf_us_flow_key_get_packed_length(const bcmolt_gpon_iwf_us_flow_key *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_iwf_us_flow_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_us_flow_key_unpack(bcmolt_gpon_iwf_us_flow_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_iwf_us_flow_key struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_iwf_us_flow_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_iwf_us_flow_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_us_flow_key_bounds_check(const bcmolt_gpon_iwf_us_flow_key *this, bcmolt_presence_mask fields_present, bcmolt_gpon_iwf_us_flow_key_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_iwf_us_flow_cfg_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_iwf_us_flow_cfg_data_set_default(bcmolt_gpon_iwf_us_flow_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_iwf_us_flow_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_us_flow_cfg_data_pack(const bcmolt_gpon_iwf_us_flow_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_iwf_us_flow_cfg_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_iwf_us_flow_cfg_data_get_packed_length(const bcmolt_gpon_iwf_us_flow_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_iwf_us_flow_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_us_flow_cfg_data_unpack(bcmolt_gpon_iwf_us_flow_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_iwf_us_flow_cfg_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_iwf_us_flow_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_iwf_us_flow_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_iwf_us_flow_cfg_data_bounds_check(const bcmolt_gpon_iwf_us_flow_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_iwf_us_flow_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_ni_key struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_ni_key_set_default(bcmolt_gpon_ni_key *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_ni_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_key_pack(const bcmolt_gpon_ni_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_ni_key would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_ni_key_get_packed_length(const bcmolt_gpon_ni_key *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_ni_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_key_unpack(bcmolt_gpon_ni_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_ni_key struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_ni_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_ni_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_key_bounds_check(const bcmolt_gpon_ni_key *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_key_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_ni_cfg_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_ni_cfg_data_set_default(bcmolt_gpon_ni_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_ni_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_cfg_data_pack(const bcmolt_gpon_ni_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_ni_cfg_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_ni_cfg_data_get_packed_length(const bcmolt_gpon_ni_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_ni_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_cfg_data_unpack(bcmolt_gpon_ni_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_ni_cfg_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_ni_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_ni_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_cfg_data_bounds_check(const bcmolt_gpon_ni_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_ni_stat_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_ni_stat_data_set_default(bcmolt_gpon_ni_stat_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_ni_stat_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_stat_data_pack(const bcmolt_gpon_ni_stat_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_ni_stat_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_ni_stat_data_get_packed_length(const bcmolt_gpon_ni_stat_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_ni_stat_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_stat_data_unpack(bcmolt_gpon_ni_stat_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_ni_stat_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_ni_stat_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_ni_stat_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_stat_data_bounds_check(const bcmolt_gpon_ni_stat_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_stat_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_ni_stat_cfg_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_ni_stat_cfg_data_set_default(bcmolt_gpon_ni_stat_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_ni_stat_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_stat_cfg_data_pack(const bcmolt_gpon_ni_stat_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_ni_stat_cfg_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_ni_stat_cfg_data_get_packed_length(const bcmolt_gpon_ni_stat_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_ni_stat_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_stat_cfg_data_unpack(bcmolt_gpon_ni_stat_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_ni_stat_cfg_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_ni_stat_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_ni_stat_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_stat_cfg_data_bounds_check(const bcmolt_gpon_ni_stat_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_stat_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_ni_cpu_packets_failure_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_ni_cpu_packets_failure_data_set_default(bcmolt_gpon_ni_cpu_packets_failure_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_ni_cpu_packets_failure_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_cpu_packets_failure_data_pack(const bcmolt_gpon_ni_cpu_packets_failure_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_ni_cpu_packets_failure_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_ni_cpu_packets_failure_data_get_packed_length(const bcmolt_gpon_ni_cpu_packets_failure_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_ni_cpu_packets_failure_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_cpu_packets_failure_data_unpack(bcmolt_gpon_ni_cpu_packets_failure_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_ni_cpu_packets_failure_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_ni_cpu_packets_failure_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_ni_cpu_packets_failure_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_cpu_packets_failure_data_bounds_check(const bcmolt_gpon_ni_cpu_packets_failure_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_cpu_packets_failure_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_ni_los_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_ni_los_data_set_default(bcmolt_gpon_ni_los_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_ni_los_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_los_data_pack(const bcmolt_gpon_ni_los_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_ni_los_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_ni_los_data_get_packed_length(const bcmolt_gpon_ni_los_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_ni_los_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_los_data_unpack(bcmolt_gpon_ni_los_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_ni_los_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_ni_los_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_ni_los_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_los_data_bounds_check(const bcmolt_gpon_ni_los_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_los_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_ni_onu_discovered_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_ni_onu_discovered_data_set_default(bcmolt_gpon_ni_onu_discovered_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_ni_onu_discovered_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_onu_discovered_data_pack(const bcmolt_gpon_ni_onu_discovered_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_ni_onu_discovered_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_ni_onu_discovered_data_get_packed_length(const bcmolt_gpon_ni_onu_discovered_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_ni_onu_discovered_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_onu_discovered_data_unpack(bcmolt_gpon_ni_onu_discovered_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_ni_onu_discovered_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_ni_onu_discovered_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_ni_onu_discovered_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_onu_discovered_data_bounds_check(const bcmolt_gpon_ni_onu_discovered_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_onu_discovered_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_ni_onu_upgrade_complete_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_ni_onu_upgrade_complete_data_set_default(bcmolt_gpon_ni_onu_upgrade_complete_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_ni_onu_upgrade_complete_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_onu_upgrade_complete_data_pack(const bcmolt_gpon_ni_onu_upgrade_complete_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_ni_onu_upgrade_complete_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_ni_onu_upgrade_complete_data_get_packed_length(const bcmolt_gpon_ni_onu_upgrade_complete_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_ni_onu_upgrade_complete_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_onu_upgrade_complete_data_unpack(bcmolt_gpon_ni_onu_upgrade_complete_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_ni_onu_upgrade_complete_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_ni_onu_upgrade_complete_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_ni_onu_upgrade_complete_data is out 
+ * of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_onu_upgrade_complete_data_bounds_check(const bcmolt_gpon_ni_onu_upgrade_complete_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_onu_upgrade_complete_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_ni_protection_switching_onus_ranged_data struct.  
+ * This sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_ni_protection_switching_onus_ranged_data_set_default(bcmolt_gpon_ni_protection_switching_onus_ranged_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_ni_protection_switching_onus_ranged_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_protection_switching_onus_ranged_data_pack(const bcmolt_gpon_ni_protection_switching_onus_ranged_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_gpon_ni_protection_switching_onus_ranged_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_ni_protection_switching_onus_ranged_data_get_packed_length(const bcmolt_gpon_ni_protection_switching_onus_ranged_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_ni_protection_switching_onus_ranged_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_protection_switching_onus_ranged_data_unpack(bcmolt_gpon_ni_protection_switching_onus_ranged_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_ni_protection_switching_onus_ranged_data 
+ * struct and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_ni_protection_switching_onus_ranged_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the 
+ * bcmolt_gpon_ni_protection_switching_onus_ranged_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_protection_switching_onus_ranged_data_bounds_check(const bcmolt_gpon_ni_protection_switching_onus_ranged_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_protection_switching_onus_ranged_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_ni_protection_switching_switchover_completed_data 
+ * struct.  This sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_ni_protection_switching_switchover_completed_data_set_default(bcmolt_gpon_ni_protection_switching_switchover_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_ni_protection_switching_switchover_completed_data to 
+ * bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_protection_switching_switchover_completed_data_pack(const bcmolt_gpon_ni_protection_switching_switchover_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_gpon_ni_protection_switching_switchover_completed_data would occupy 
+ * on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_ni_protection_switching_switchover_completed_data_get_packed_length(const bcmolt_gpon_ni_protection_switching_switchover_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_ni_protection_switching_switchover_completed_data from 
+ * bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_protection_switching_switchover_completed_data_unpack(bcmolt_gpon_ni_protection_switching_switchover_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed 
+ * bcmolt_gpon_ni_protection_switching_switchover_completed_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_ni_protection_switching_switchover_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the 
+ * bcmolt_gpon_ni_protection_switching_switchover_completed_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_protection_switching_switchover_completed_data_bounds_check(const bcmolt_gpon_ni_protection_switching_switchover_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_protection_switching_switchover_completed_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_ni_protection_switching_traffic_resume_data 
+ * struct.  This sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_ni_protection_switching_traffic_resume_data_set_default(bcmolt_gpon_ni_protection_switching_traffic_resume_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_ni_protection_switching_traffic_resume_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_protection_switching_traffic_resume_data_pack(const bcmolt_gpon_ni_protection_switching_traffic_resume_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_gpon_ni_protection_switching_traffic_resume_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_ni_protection_switching_traffic_resume_data_get_packed_length(const bcmolt_gpon_ni_protection_switching_traffic_resume_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_ni_protection_switching_traffic_resume_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_protection_switching_traffic_resume_data_unpack(bcmolt_gpon_ni_protection_switching_traffic_resume_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_ni_protection_switching_traffic_resume_data 
+ * struct and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_ni_protection_switching_traffic_resume_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the 
+ * bcmolt_gpon_ni_protection_switching_traffic_resume_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_protection_switching_traffic_resume_data_bounds_check(const bcmolt_gpon_ni_protection_switching_traffic_resume_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_protection_switching_traffic_resume_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_ni_rogue_detection_completed_data struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_ni_rogue_detection_completed_data_set_default(bcmolt_gpon_ni_rogue_detection_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_ni_rogue_detection_completed_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_rogue_detection_completed_data_pack(const bcmolt_gpon_ni_rogue_detection_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_gpon_ni_rogue_detection_completed_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_ni_rogue_detection_completed_data_get_packed_length(const bcmolt_gpon_ni_rogue_detection_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_ni_rogue_detection_completed_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_rogue_detection_completed_data_unpack(bcmolt_gpon_ni_rogue_detection_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_ni_rogue_detection_completed_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_ni_rogue_detection_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_ni_rogue_detection_completed_data is 
+ * out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_rogue_detection_completed_data_bounds_check(const bcmolt_gpon_ni_rogue_detection_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_rogue_detection_completed_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data 
+ * struct.  This sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data_set_default(bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data_pack(const bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data_get_packed_length(const bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data from 
+ * bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data_unpack(bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed 
+ * bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the 
+ * bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data_bounds_check(const bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_ni_stat_alarm_cleared_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_ni_stat_alarm_cleared_data_set_default(bcmolt_gpon_ni_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_ni_stat_alarm_cleared_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_stat_alarm_cleared_data_pack(const bcmolt_gpon_ni_stat_alarm_cleared_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_ni_stat_alarm_cleared_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_ni_stat_alarm_cleared_data_get_packed_length(const bcmolt_gpon_ni_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_ni_stat_alarm_cleared_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_stat_alarm_cleared_data_unpack(bcmolt_gpon_ni_stat_alarm_cleared_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_ni_stat_alarm_cleared_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_ni_stat_alarm_cleared_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_ni_stat_alarm_cleared_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_stat_alarm_cleared_data_bounds_check(const bcmolt_gpon_ni_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_stat_alarm_cleared_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_ni_stat_alarm_raised_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_ni_stat_alarm_raised_data_set_default(bcmolt_gpon_ni_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_ni_stat_alarm_raised_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_stat_alarm_raised_data_pack(const bcmolt_gpon_ni_stat_alarm_raised_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_ni_stat_alarm_raised_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_ni_stat_alarm_raised_data_get_packed_length(const bcmolt_gpon_ni_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_ni_stat_alarm_raised_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_stat_alarm_raised_data_unpack(bcmolt_gpon_ni_stat_alarm_raised_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_ni_stat_alarm_raised_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_ni_stat_alarm_raised_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_ni_stat_alarm_raised_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_stat_alarm_raised_data_bounds_check(const bcmolt_gpon_ni_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_stat_alarm_raised_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_ni_state_change_completed_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_ni_state_change_completed_data_set_default(bcmolt_gpon_ni_state_change_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_ni_state_change_completed_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_state_change_completed_data_pack(const bcmolt_gpon_ni_state_change_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_ni_state_change_completed_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_ni_state_change_completed_data_get_packed_length(const bcmolt_gpon_ni_state_change_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_ni_state_change_completed_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_state_change_completed_data_unpack(bcmolt_gpon_ni_state_change_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_ni_state_change_completed_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_ni_state_change_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_ni_state_change_completed_data is out 
+ * of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_state_change_completed_data_bounds_check(const bcmolt_gpon_ni_state_change_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_state_change_completed_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_ni_tod_request_completed_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_ni_tod_request_completed_data_set_default(bcmolt_gpon_ni_tod_request_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_ni_tod_request_completed_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_tod_request_completed_data_pack(const bcmolt_gpon_ni_tod_request_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_ni_tod_request_completed_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_ni_tod_request_completed_data_get_packed_length(const bcmolt_gpon_ni_tod_request_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_ni_tod_request_completed_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_tod_request_completed_data_unpack(bcmolt_gpon_ni_tod_request_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_ni_tod_request_completed_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_ni_tod_request_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_ni_tod_request_completed_data is out 
+ * of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_tod_request_completed_data_bounds_check(const bcmolt_gpon_ni_tod_request_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_tod_request_completed_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_ni_auto_cfg_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_ni_auto_cfg_data_set_default(bcmolt_gpon_ni_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_ni_auto_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_auto_cfg_data_pack(const bcmolt_gpon_ni_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_ni_auto_cfg_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_ni_auto_cfg_data_get_packed_length(const bcmolt_gpon_ni_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_ni_auto_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_auto_cfg_data_unpack(bcmolt_gpon_ni_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_ni_auto_cfg_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_ni_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_ni_auto_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_auto_cfg_data_bounds_check(const bcmolt_gpon_ni_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_auto_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_ni_disable_serial_number_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_ni_disable_serial_number_data_set_default(bcmolt_gpon_ni_disable_serial_number_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_ni_disable_serial_number_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_disable_serial_number_data_pack(const bcmolt_gpon_ni_disable_serial_number_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_ni_disable_serial_number_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_ni_disable_serial_number_data_get_packed_length(const bcmolt_gpon_ni_disable_serial_number_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_ni_disable_serial_number_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_disable_serial_number_data_unpack(bcmolt_gpon_ni_disable_serial_number_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_ni_disable_serial_number_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_ni_disable_serial_number_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_ni_disable_serial_number_data is out 
+ * of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_disable_serial_number_data_bounds_check(const bcmolt_gpon_ni_disable_serial_number_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_disable_serial_number_id *failed_prop);
+
+/** Initializes a 
+ * bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data 
+ * struct.  This sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data_set_default(bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a 
+ * bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data to 
+ * bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data_pack(const bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data_get_packed_length(const bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a 
+ * bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data from 
+ * bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data_unpack(bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed 
+ * bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data 
+ * struct and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the 
+ * bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data is 
+ * out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data_bounds_check(const bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_ni_rogue_detection_window_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_ni_rogue_detection_window_data_set_default(bcmolt_gpon_ni_rogue_detection_window_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_ni_rogue_detection_window_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_rogue_detection_window_data_pack(const bcmolt_gpon_ni_rogue_detection_window_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_ni_rogue_detection_window_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_ni_rogue_detection_window_data_get_packed_length(const bcmolt_gpon_ni_rogue_detection_window_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_ni_rogue_detection_window_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_rogue_detection_window_data_unpack(bcmolt_gpon_ni_rogue_detection_window_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_ni_rogue_detection_window_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_ni_rogue_detection_window_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_ni_rogue_detection_window_data is out 
+ * of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_rogue_detection_window_data_bounds_check(const bcmolt_gpon_ni_rogue_detection_window_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_rogue_detection_window_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_ni_set_onu_state_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_ni_set_onu_state_data_set_default(bcmolt_gpon_ni_set_onu_state_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_ni_set_onu_state_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_set_onu_state_data_pack(const bcmolt_gpon_ni_set_onu_state_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_ni_set_onu_state_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_ni_set_onu_state_data_get_packed_length(const bcmolt_gpon_ni_set_onu_state_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_ni_set_onu_state_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_set_onu_state_data_unpack(bcmolt_gpon_ni_set_onu_state_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_ni_set_onu_state_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_ni_set_onu_state_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_ni_set_onu_state_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_set_onu_state_data_bounds_check(const bcmolt_gpon_ni_set_onu_state_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_set_onu_state_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_ni_set_pon_state_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_ni_set_pon_state_data_set_default(bcmolt_gpon_ni_set_pon_state_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_ni_set_pon_state_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_set_pon_state_data_pack(const bcmolt_gpon_ni_set_pon_state_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_ni_set_pon_state_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_ni_set_pon_state_data_get_packed_length(const bcmolt_gpon_ni_set_pon_state_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_ni_set_pon_state_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_set_pon_state_data_unpack(bcmolt_gpon_ni_set_pon_state_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_ni_set_pon_state_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_ni_set_pon_state_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_ni_set_pon_state_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_set_pon_state_data_bounds_check(const bcmolt_gpon_ni_set_pon_state_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_set_pon_state_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_ni_start_onu_upgrade_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_ni_start_onu_upgrade_data_set_default(bcmolt_gpon_ni_start_onu_upgrade_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_ni_start_onu_upgrade_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_start_onu_upgrade_data_pack(const bcmolt_gpon_ni_start_onu_upgrade_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_ni_start_onu_upgrade_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_ni_start_onu_upgrade_data_get_packed_length(const bcmolt_gpon_ni_start_onu_upgrade_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_ni_start_onu_upgrade_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_start_onu_upgrade_data_unpack(bcmolt_gpon_ni_start_onu_upgrade_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_ni_start_onu_upgrade_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_ni_start_onu_upgrade_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_ni_start_onu_upgrade_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_start_onu_upgrade_data_bounds_check(const bcmolt_gpon_ni_start_onu_upgrade_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_start_onu_upgrade_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_ni_broadcast_ploam_packet_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_ni_broadcast_ploam_packet_data_set_default(bcmolt_gpon_ni_broadcast_ploam_packet_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_ni_broadcast_ploam_packet_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_broadcast_ploam_packet_data_pack(const bcmolt_gpon_ni_broadcast_ploam_packet_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_ni_broadcast_ploam_packet_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_ni_broadcast_ploam_packet_data_get_packed_length(const bcmolt_gpon_ni_broadcast_ploam_packet_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_ni_broadcast_ploam_packet_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_broadcast_ploam_packet_data_unpack(bcmolt_gpon_ni_broadcast_ploam_packet_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_ni_broadcast_ploam_packet_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_ni_broadcast_ploam_packet_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_ni_broadcast_ploam_packet_data is out 
+ * of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_broadcast_ploam_packet_data_bounds_check(const bcmolt_gpon_ni_broadcast_ploam_packet_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_broadcast_ploam_packet_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_ni_cpu_packets_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_ni_cpu_packets_data_set_default(bcmolt_gpon_ni_cpu_packets_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_ni_cpu_packets_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_cpu_packets_data_pack(const bcmolt_gpon_ni_cpu_packets_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_ni_cpu_packets_data would occupy 
+ * on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_ni_cpu_packets_data_get_packed_length(const bcmolt_gpon_ni_cpu_packets_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_ni_cpu_packets_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_cpu_packets_data_unpack(bcmolt_gpon_ni_cpu_packets_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_ni_cpu_packets_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_ni_cpu_packets_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_ni_cpu_packets_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_ni_cpu_packets_data_bounds_check(const bcmolt_gpon_ni_cpu_packets_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_ni_cpu_packets_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_onu_key struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_onu_key_set_default(bcmolt_gpon_onu_key *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_onu_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_key_pack(const bcmolt_gpon_onu_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_onu_key would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_key_get_packed_length(const bcmolt_gpon_onu_key *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_onu_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_key_unpack(bcmolt_gpon_onu_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_onu_key struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_onu_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_key_bounds_check(const bcmolt_gpon_onu_key *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_key_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_onu_cfg_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_onu_cfg_data_set_default(bcmolt_gpon_onu_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_onu_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_cfg_data_pack(const bcmolt_gpon_onu_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_onu_cfg_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_cfg_data_get_packed_length(const bcmolt_gpon_onu_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_onu_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_cfg_data_unpack(bcmolt_gpon_onu_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_onu_cfg_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_onu_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_cfg_data_bounds_check(const bcmolt_gpon_onu_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_onu_stat_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_onu_stat_data_set_default(bcmolt_gpon_onu_stat_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_onu_stat_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_stat_data_pack(const bcmolt_gpon_onu_stat_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_onu_stat_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_stat_data_get_packed_length(const bcmolt_gpon_onu_stat_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_onu_stat_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_stat_data_unpack(bcmolt_gpon_onu_stat_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_onu_stat_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_stat_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_onu_stat_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_stat_data_bounds_check(const bcmolt_gpon_onu_stat_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_stat_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_onu_stat_cfg_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_onu_stat_cfg_data_set_default(bcmolt_gpon_onu_stat_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_onu_stat_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_stat_cfg_data_pack(const bcmolt_gpon_onu_stat_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_onu_stat_cfg_data would occupy 
+ * on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_stat_cfg_data_get_packed_length(const bcmolt_gpon_onu_stat_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_onu_stat_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_stat_cfg_data_unpack(bcmolt_gpon_onu_stat_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_onu_stat_cfg_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_stat_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_onu_stat_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_stat_cfg_data_bounds_check(const bcmolt_gpon_onu_stat_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_stat_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_onu_ber_interval_configuration_completed_data 
+ * struct.  This sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_onu_ber_interval_configuration_completed_data_set_default(bcmolt_gpon_onu_ber_interval_configuration_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_onu_ber_interval_configuration_completed_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_ber_interval_configuration_completed_data_pack(const bcmolt_gpon_onu_ber_interval_configuration_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_gpon_onu_ber_interval_configuration_completed_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_ber_interval_configuration_completed_data_get_packed_length(const bcmolt_gpon_onu_ber_interval_configuration_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_onu_ber_interval_configuration_completed_data from 
+ * bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_ber_interval_configuration_completed_data_unpack(bcmolt_gpon_onu_ber_interval_configuration_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed 
+ * bcmolt_gpon_onu_ber_interval_configuration_completed_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_ber_interval_configuration_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the 
+ * bcmolt_gpon_onu_ber_interval_configuration_completed_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_ber_interval_configuration_completed_data_bounds_check(const bcmolt_gpon_onu_ber_interval_configuration_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_ber_interval_configuration_completed_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_onu_dfi_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_onu_dfi_data_set_default(bcmolt_gpon_onu_dfi_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_onu_dfi_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_dfi_data_pack(const bcmolt_gpon_onu_dfi_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_onu_dfi_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_dfi_data_get_packed_length(const bcmolt_gpon_onu_dfi_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_onu_dfi_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_dfi_data_unpack(bcmolt_gpon_onu_dfi_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_onu_dfi_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_dfi_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_onu_dfi_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_dfi_data_bounds_check(const bcmolt_gpon_onu_dfi_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_dfi_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_onu_dgi_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_onu_dgi_data_set_default(bcmolt_gpon_onu_dgi_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_onu_dgi_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_dgi_data_pack(const bcmolt_gpon_onu_dgi_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_onu_dgi_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_dgi_data_get_packed_length(const bcmolt_gpon_onu_dgi_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_onu_dgi_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_dgi_data_unpack(bcmolt_gpon_onu_dgi_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_onu_dgi_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_dgi_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_onu_dgi_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_dgi_data_bounds_check(const bcmolt_gpon_onu_dgi_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_dgi_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_onu_dowi_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_onu_dowi_data_set_default(bcmolt_gpon_onu_dowi_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_onu_dowi_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_dowi_data_pack(const bcmolt_gpon_onu_dowi_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_onu_dowi_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_dowi_data_get_packed_length(const bcmolt_gpon_onu_dowi_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_onu_dowi_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_dowi_data_unpack(bcmolt_gpon_onu_dowi_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_onu_dowi_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_dowi_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_onu_dowi_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_dowi_data_bounds_check(const bcmolt_gpon_onu_dowi_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_dowi_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_onu_err_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_onu_err_data_set_default(bcmolt_gpon_onu_err_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_onu_err_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_err_data_pack(const bcmolt_gpon_onu_err_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_onu_err_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_err_data_get_packed_length(const bcmolt_gpon_onu_err_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_onu_err_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_err_data_unpack(bcmolt_gpon_onu_err_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_onu_err_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_err_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_onu_err_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_err_data_bounds_check(const bcmolt_gpon_onu_err_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_err_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_onu_invalid_dbru_report_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_onu_invalid_dbru_report_data_set_default(bcmolt_gpon_onu_invalid_dbru_report_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_onu_invalid_dbru_report_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_invalid_dbru_report_data_pack(const bcmolt_gpon_onu_invalid_dbru_report_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_onu_invalid_dbru_report_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_invalid_dbru_report_data_get_packed_length(const bcmolt_gpon_onu_invalid_dbru_report_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_onu_invalid_dbru_report_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_invalid_dbru_report_data_unpack(bcmolt_gpon_onu_invalid_dbru_report_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_onu_invalid_dbru_report_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_invalid_dbru_report_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_onu_invalid_dbru_report_data is out 
+ * of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_invalid_dbru_report_data_bounds_check(const bcmolt_gpon_onu_invalid_dbru_report_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_invalid_dbru_report_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_onu_key_exchange_completed_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_onu_key_exchange_completed_data_set_default(bcmolt_gpon_onu_key_exchange_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_onu_key_exchange_completed_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_key_exchange_completed_data_pack(const bcmolt_gpon_onu_key_exchange_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_onu_key_exchange_completed_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_key_exchange_completed_data_get_packed_length(const bcmolt_gpon_onu_key_exchange_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_onu_key_exchange_completed_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_key_exchange_completed_data_unpack(bcmolt_gpon_onu_key_exchange_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_onu_key_exchange_completed_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_key_exchange_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_onu_key_exchange_completed_data is 
+ * out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_key_exchange_completed_data_bounds_check(const bcmolt_gpon_onu_key_exchange_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_key_exchange_completed_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_onu_key_exchange_decrypt_required_data struct.  
+ * This sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_onu_key_exchange_decrypt_required_data_set_default(bcmolt_gpon_onu_key_exchange_decrypt_required_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_onu_key_exchange_decrypt_required_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_key_exchange_decrypt_required_data_pack(const bcmolt_gpon_onu_key_exchange_decrypt_required_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_gpon_onu_key_exchange_decrypt_required_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_key_exchange_decrypt_required_data_get_packed_length(const bcmolt_gpon_onu_key_exchange_decrypt_required_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_onu_key_exchange_decrypt_required_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_key_exchange_decrypt_required_data_unpack(bcmolt_gpon_onu_key_exchange_decrypt_required_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_onu_key_exchange_decrypt_required_data 
+ * struct and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_key_exchange_decrypt_required_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the 
+ * bcmolt_gpon_onu_key_exchange_decrypt_required_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_key_exchange_decrypt_required_data_bounds_check(const bcmolt_gpon_onu_key_exchange_decrypt_required_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_key_exchange_decrypt_required_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_onu_key_exchange_key_mismatch_data struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_onu_key_exchange_key_mismatch_data_set_default(bcmolt_gpon_onu_key_exchange_key_mismatch_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_onu_key_exchange_key_mismatch_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_key_exchange_key_mismatch_data_pack(const bcmolt_gpon_onu_key_exchange_key_mismatch_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_gpon_onu_key_exchange_key_mismatch_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_key_exchange_key_mismatch_data_get_packed_length(const bcmolt_gpon_onu_key_exchange_key_mismatch_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_onu_key_exchange_key_mismatch_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_key_exchange_key_mismatch_data_unpack(bcmolt_gpon_onu_key_exchange_key_mismatch_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_onu_key_exchange_key_mismatch_data struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_key_exchange_key_mismatch_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_onu_key_exchange_key_mismatch_data is 
+ * out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_key_exchange_key_mismatch_data_bounds_check(const bcmolt_gpon_onu_key_exchange_key_mismatch_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_key_exchange_key_mismatch_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_onu_key_exchange_unconsecutive_index_data struct.  
+ * This sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_onu_key_exchange_unconsecutive_index_data_set_default(bcmolt_gpon_onu_key_exchange_unconsecutive_index_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_onu_key_exchange_unconsecutive_index_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_key_exchange_unconsecutive_index_data_pack(const bcmolt_gpon_onu_key_exchange_unconsecutive_index_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_gpon_onu_key_exchange_unconsecutive_index_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_key_exchange_unconsecutive_index_data_get_packed_length(const bcmolt_gpon_onu_key_exchange_unconsecutive_index_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_onu_key_exchange_unconsecutive_index_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_key_exchange_unconsecutive_index_data_unpack(bcmolt_gpon_onu_key_exchange_unconsecutive_index_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_onu_key_exchange_unconsecutive_index_data 
+ * struct and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_key_exchange_unconsecutive_index_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the 
+ * bcmolt_gpon_onu_key_exchange_unconsecutive_index_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_key_exchange_unconsecutive_index_data_bounds_check(const bcmolt_gpon_onu_key_exchange_unconsecutive_index_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_key_exchange_unconsecutive_index_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_onu_loai_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_onu_loai_data_set_default(bcmolt_gpon_onu_loai_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_onu_loai_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_loai_data_pack(const bcmolt_gpon_onu_loai_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_onu_loai_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_loai_data_get_packed_length(const bcmolt_gpon_onu_loai_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_onu_loai_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_loai_data_unpack(bcmolt_gpon_onu_loai_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_onu_loai_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_loai_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_onu_loai_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_loai_data_bounds_check(const bcmolt_gpon_onu_loai_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_loai_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_onu_loki_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_onu_loki_data_set_default(bcmolt_gpon_onu_loki_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_onu_loki_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_loki_data_pack(const bcmolt_gpon_onu_loki_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_onu_loki_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_loki_data_get_packed_length(const bcmolt_gpon_onu_loki_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_onu_loki_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_loki_data_unpack(bcmolt_gpon_onu_loki_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_onu_loki_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_loki_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_onu_loki_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_loki_data_bounds_check(const bcmolt_gpon_onu_loki_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_loki_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_onu_memi_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_onu_memi_data_set_default(bcmolt_gpon_onu_memi_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_onu_memi_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_memi_data_pack(const bcmolt_gpon_onu_memi_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_onu_memi_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_memi_data_get_packed_length(const bcmolt_gpon_onu_memi_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_onu_memi_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_memi_data_unpack(bcmolt_gpon_onu_memi_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_onu_memi_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_memi_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_onu_memi_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_memi_data_bounds_check(const bcmolt_gpon_onu_memi_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_memi_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_onu_omci_port_id_configuration_completed_data 
+ * struct.  This sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_onu_omci_port_id_configuration_completed_data_set_default(bcmolt_gpon_onu_omci_port_id_configuration_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_onu_omci_port_id_configuration_completed_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_omci_port_id_configuration_completed_data_pack(const bcmolt_gpon_onu_omci_port_id_configuration_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_gpon_onu_omci_port_id_configuration_completed_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_omci_port_id_configuration_completed_data_get_packed_length(const bcmolt_gpon_onu_omci_port_id_configuration_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_onu_omci_port_id_configuration_completed_data from 
+ * bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_omci_port_id_configuration_completed_data_unpack(bcmolt_gpon_onu_omci_port_id_configuration_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed 
+ * bcmolt_gpon_onu_omci_port_id_configuration_completed_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_omci_port_id_configuration_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the 
+ * bcmolt_gpon_onu_omci_port_id_configuration_completed_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_omci_port_id_configuration_completed_data_bounds_check(const bcmolt_gpon_onu_omci_port_id_configuration_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_omci_port_id_configuration_completed_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_onu_onu_activation_completed_data struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_onu_onu_activation_completed_data_set_default(bcmolt_gpon_onu_onu_activation_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_onu_onu_activation_completed_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_onu_activation_completed_data_pack(const bcmolt_gpon_onu_onu_activation_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_gpon_onu_onu_activation_completed_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_onu_activation_completed_data_get_packed_length(const bcmolt_gpon_onu_onu_activation_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_onu_onu_activation_completed_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_onu_activation_completed_data_unpack(bcmolt_gpon_onu_onu_activation_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_onu_onu_activation_completed_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_onu_activation_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_onu_onu_activation_completed_data is 
+ * out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_onu_activation_completed_data_bounds_check(const bcmolt_gpon_onu_onu_activation_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_onu_activation_completed_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_onu_onu_activation_standby_completed_data struct.  
+ * This sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_onu_onu_activation_standby_completed_data_set_default(bcmolt_gpon_onu_onu_activation_standby_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_onu_onu_activation_standby_completed_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_onu_activation_standby_completed_data_pack(const bcmolt_gpon_onu_onu_activation_standby_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_gpon_onu_onu_activation_standby_completed_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_onu_activation_standby_completed_data_get_packed_length(const bcmolt_gpon_onu_onu_activation_standby_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_onu_onu_activation_standby_completed_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_onu_activation_standby_completed_data_unpack(bcmolt_gpon_onu_onu_activation_standby_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_onu_onu_activation_standby_completed_data 
+ * struct and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_onu_activation_standby_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the 
+ * bcmolt_gpon_onu_onu_activation_standby_completed_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_onu_activation_standby_completed_data_bounds_check(const bcmolt_gpon_onu_onu_activation_standby_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_onu_activation_standby_completed_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_onu_onu_alarm_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_onu_onu_alarm_data_set_default(bcmolt_gpon_onu_onu_alarm_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_onu_onu_alarm_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_onu_alarm_data_pack(const bcmolt_gpon_onu_onu_alarm_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_onu_onu_alarm_data would occupy 
+ * on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_onu_alarm_data_get_packed_length(const bcmolt_gpon_onu_onu_alarm_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_onu_onu_alarm_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_onu_alarm_data_unpack(bcmolt_gpon_onu_onu_alarm_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_onu_onu_alarm_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_onu_alarm_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_onu_onu_alarm_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_onu_alarm_data_bounds_check(const bcmolt_gpon_onu_onu_alarm_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_onu_alarm_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_onu_onu_deactivation_completed_data struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_onu_onu_deactivation_completed_data_set_default(bcmolt_gpon_onu_onu_deactivation_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_onu_onu_deactivation_completed_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_onu_deactivation_completed_data_pack(const bcmolt_gpon_onu_onu_deactivation_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_gpon_onu_onu_deactivation_completed_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_onu_deactivation_completed_data_get_packed_length(const bcmolt_gpon_onu_onu_deactivation_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_onu_onu_deactivation_completed_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_onu_deactivation_completed_data_unpack(bcmolt_gpon_onu_onu_deactivation_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_onu_onu_deactivation_completed_data struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_onu_deactivation_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_onu_onu_deactivation_completed_data 
+ * is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_onu_deactivation_completed_data_bounds_check(const bcmolt_gpon_onu_onu_deactivation_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_onu_deactivation_completed_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_onu_onu_disable_completed_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_onu_onu_disable_completed_data_set_default(bcmolt_gpon_onu_onu_disable_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_onu_onu_disable_completed_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_onu_disable_completed_data_pack(const bcmolt_gpon_onu_onu_disable_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_onu_onu_disable_completed_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_onu_disable_completed_data_get_packed_length(const bcmolt_gpon_onu_onu_disable_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_onu_onu_disable_completed_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_onu_disable_completed_data_unpack(bcmolt_gpon_onu_onu_disable_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_onu_onu_disable_completed_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_onu_disable_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_onu_onu_disable_completed_data is out 
+ * of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_onu_disable_completed_data_bounds_check(const bcmolt_gpon_onu_onu_disable_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_onu_disable_completed_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_onu_onu_enable_completed_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_onu_onu_enable_completed_data_set_default(bcmolt_gpon_onu_onu_enable_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_onu_onu_enable_completed_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_onu_enable_completed_data_pack(const bcmolt_gpon_onu_onu_enable_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_onu_onu_enable_completed_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_onu_enable_completed_data_get_packed_length(const bcmolt_gpon_onu_onu_enable_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_onu_onu_enable_completed_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_onu_enable_completed_data_unpack(bcmolt_gpon_onu_onu_enable_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_onu_onu_enable_completed_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_onu_enable_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_onu_onu_enable_completed_data is out 
+ * of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_onu_enable_completed_data_bounds_check(const bcmolt_gpon_onu_onu_enable_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_onu_enable_completed_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_onu_password_authentication_completed_data struct. 
+ *  This sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_onu_password_authentication_completed_data_set_default(bcmolt_gpon_onu_password_authentication_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_onu_password_authentication_completed_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_password_authentication_completed_data_pack(const bcmolt_gpon_onu_password_authentication_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_gpon_onu_password_authentication_completed_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_password_authentication_completed_data_get_packed_length(const bcmolt_gpon_onu_password_authentication_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_onu_password_authentication_completed_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_password_authentication_completed_data_unpack(bcmolt_gpon_onu_password_authentication_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_onu_password_authentication_completed_data 
+ * struct and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_password_authentication_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the 
+ * bcmolt_gpon_onu_password_authentication_completed_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_password_authentication_completed_data_bounds_check(const bcmolt_gpon_onu_password_authentication_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_password_authentication_completed_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_onu_pee_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_onu_pee_data_set_default(bcmolt_gpon_onu_pee_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_onu_pee_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_pee_data_pack(const bcmolt_gpon_onu_pee_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_onu_pee_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_pee_data_get_packed_length(const bcmolt_gpon_onu_pee_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_onu_pee_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_pee_data_unpack(bcmolt_gpon_onu_pee_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_onu_pee_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_pee_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_onu_pee_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_pee_data_bounds_check(const bcmolt_gpon_onu_pee_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_pee_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_onu_possible_drift_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_onu_possible_drift_data_set_default(bcmolt_gpon_onu_possible_drift_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_onu_possible_drift_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_possible_drift_data_pack(const bcmolt_gpon_onu_possible_drift_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_onu_possible_drift_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_possible_drift_data_get_packed_length(const bcmolt_gpon_onu_possible_drift_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_onu_possible_drift_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_possible_drift_data_unpack(bcmolt_gpon_onu_possible_drift_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_onu_possible_drift_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_possible_drift_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_onu_possible_drift_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_possible_drift_data_bounds_check(const bcmolt_gpon_onu_possible_drift_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_possible_drift_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_onu_power_management_state_change_data struct.  
+ * This sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_onu_power_management_state_change_data_set_default(bcmolt_gpon_onu_power_management_state_change_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_onu_power_management_state_change_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_power_management_state_change_data_pack(const bcmolt_gpon_onu_power_management_state_change_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_gpon_onu_power_management_state_change_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_power_management_state_change_data_get_packed_length(const bcmolt_gpon_onu_power_management_state_change_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_onu_power_management_state_change_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_power_management_state_change_data_unpack(bcmolt_gpon_onu_power_management_state_change_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_onu_power_management_state_change_data 
+ * struct and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_power_management_state_change_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the 
+ * bcmolt_gpon_onu_power_management_state_change_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_power_management_state_change_data_bounds_check(const bcmolt_gpon_onu_power_management_state_change_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_power_management_state_change_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_onu_pst_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_onu_pst_data_set_default(bcmolt_gpon_onu_pst_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_onu_pst_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_pst_data_pack(const bcmolt_gpon_onu_pst_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_onu_pst_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_pst_data_get_packed_length(const bcmolt_gpon_onu_pst_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_onu_pst_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_pst_data_unpack(bcmolt_gpon_onu_pst_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_onu_pst_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_pst_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_onu_pst_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_pst_data_bounds_check(const bcmolt_gpon_onu_pst_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_pst_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_onu_ranging_completed_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_onu_ranging_completed_data_set_default(bcmolt_gpon_onu_ranging_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_onu_ranging_completed_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_ranging_completed_data_pack(const bcmolt_gpon_onu_ranging_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_onu_ranging_completed_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_ranging_completed_data_get_packed_length(const bcmolt_gpon_onu_ranging_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_onu_ranging_completed_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_ranging_completed_data_unpack(bcmolt_gpon_onu_ranging_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_onu_ranging_completed_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_ranging_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_onu_ranging_completed_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_ranging_completed_data_bounds_check(const bcmolt_gpon_onu_ranging_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_ranging_completed_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_onu_rei_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_onu_rei_data_set_default(bcmolt_gpon_onu_rei_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_onu_rei_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_rei_data_pack(const bcmolt_gpon_onu_rei_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_onu_rei_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_rei_data_get_packed_length(const bcmolt_gpon_onu_rei_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_onu_rei_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_rei_data_unpack(bcmolt_gpon_onu_rei_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_onu_rei_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_rei_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_onu_rei_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_rei_data_bounds_check(const bcmolt_gpon_onu_rei_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_rei_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_onu_rssi_measurement_completed_data struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_onu_rssi_measurement_completed_data_set_default(bcmolt_gpon_onu_rssi_measurement_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_onu_rssi_measurement_completed_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_rssi_measurement_completed_data_pack(const bcmolt_gpon_onu_rssi_measurement_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_gpon_onu_rssi_measurement_completed_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_rssi_measurement_completed_data_get_packed_length(const bcmolt_gpon_onu_rssi_measurement_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_onu_rssi_measurement_completed_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_rssi_measurement_completed_data_unpack(bcmolt_gpon_onu_rssi_measurement_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_onu_rssi_measurement_completed_data struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_rssi_measurement_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_onu_rssi_measurement_completed_data 
+ * is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_rssi_measurement_completed_data_bounds_check(const bcmolt_gpon_onu_rssi_measurement_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_rssi_measurement_completed_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_onu_sdi_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_onu_sdi_data_set_default(bcmolt_gpon_onu_sdi_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_onu_sdi_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_sdi_data_pack(const bcmolt_gpon_onu_sdi_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_onu_sdi_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_sdi_data_get_packed_length(const bcmolt_gpon_onu_sdi_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_onu_sdi_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_sdi_data_unpack(bcmolt_gpon_onu_sdi_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_onu_sdi_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_sdi_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_onu_sdi_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_sdi_data_bounds_check(const bcmolt_gpon_onu_sdi_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_sdi_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_onu_sfi_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_onu_sfi_data_set_default(bcmolt_gpon_onu_sfi_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_onu_sfi_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_sfi_data_pack(const bcmolt_gpon_onu_sfi_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_onu_sfi_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_sfi_data_get_packed_length(const bcmolt_gpon_onu_sfi_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_onu_sfi_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_sfi_data_unpack(bcmolt_gpon_onu_sfi_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_onu_sfi_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_sfi_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_onu_sfi_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_sfi_data_bounds_check(const bcmolt_gpon_onu_sfi_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_sfi_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_onu_stat_alarm_cleared_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_onu_stat_alarm_cleared_data_set_default(bcmolt_gpon_onu_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_onu_stat_alarm_cleared_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_stat_alarm_cleared_data_pack(const bcmolt_gpon_onu_stat_alarm_cleared_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_onu_stat_alarm_cleared_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_stat_alarm_cleared_data_get_packed_length(const bcmolt_gpon_onu_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_onu_stat_alarm_cleared_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_stat_alarm_cleared_data_unpack(bcmolt_gpon_onu_stat_alarm_cleared_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_onu_stat_alarm_cleared_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_stat_alarm_cleared_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_onu_stat_alarm_cleared_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_stat_alarm_cleared_data_bounds_check(const bcmolt_gpon_onu_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_stat_alarm_cleared_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_onu_stat_alarm_raised_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_onu_stat_alarm_raised_data_set_default(bcmolt_gpon_onu_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_onu_stat_alarm_raised_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_stat_alarm_raised_data_pack(const bcmolt_gpon_onu_stat_alarm_raised_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_onu_stat_alarm_raised_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_stat_alarm_raised_data_get_packed_length(const bcmolt_gpon_onu_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_onu_stat_alarm_raised_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_stat_alarm_raised_data_unpack(bcmolt_gpon_onu_stat_alarm_raised_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_onu_stat_alarm_raised_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_stat_alarm_raised_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_onu_stat_alarm_raised_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_stat_alarm_raised_data_bounds_check(const bcmolt_gpon_onu_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_stat_alarm_raised_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_onu_sufi_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_onu_sufi_data_set_default(bcmolt_gpon_onu_sufi_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_onu_sufi_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_sufi_data_pack(const bcmolt_gpon_onu_sufi_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_onu_sufi_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_sufi_data_get_packed_length(const bcmolt_gpon_onu_sufi_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_onu_sufi_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_sufi_data_unpack(bcmolt_gpon_onu_sufi_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_onu_sufi_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_sufi_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_onu_sufi_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_sufi_data_bounds_check(const bcmolt_gpon_onu_sufi_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_sufi_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_onu_tiwi_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_onu_tiwi_data_set_default(bcmolt_gpon_onu_tiwi_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_onu_tiwi_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_tiwi_data_pack(const bcmolt_gpon_onu_tiwi_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_onu_tiwi_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_tiwi_data_get_packed_length(const bcmolt_gpon_onu_tiwi_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_onu_tiwi_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_tiwi_data_unpack(bcmolt_gpon_onu_tiwi_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_onu_tiwi_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_tiwi_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_onu_tiwi_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_tiwi_data_bounds_check(const bcmolt_gpon_onu_tiwi_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_tiwi_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_onu_auto_cfg_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_onu_auto_cfg_data_set_default(bcmolt_gpon_onu_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_onu_auto_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_auto_cfg_data_pack(const bcmolt_gpon_onu_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_onu_auto_cfg_data would occupy 
+ * on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_auto_cfg_data_get_packed_length(const bcmolt_gpon_onu_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_onu_auto_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_auto_cfg_data_unpack(bcmolt_gpon_onu_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_onu_auto_cfg_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_onu_auto_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_auto_cfg_data_bounds_check(const bcmolt_gpon_onu_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_auto_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_onu_change_power_level_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_onu_change_power_level_data_set_default(bcmolt_gpon_onu_change_power_level_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_onu_change_power_level_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_change_power_level_data_pack(const bcmolt_gpon_onu_change_power_level_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_onu_change_power_level_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_change_power_level_data_get_packed_length(const bcmolt_gpon_onu_change_power_level_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_onu_change_power_level_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_change_power_level_data_unpack(bcmolt_gpon_onu_change_power_level_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_onu_change_power_level_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_change_power_level_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_onu_change_power_level_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_change_power_level_data_bounds_check(const bcmolt_gpon_onu_change_power_level_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_change_power_level_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_onu_set_onu_state_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_onu_set_onu_state_data_set_default(bcmolt_gpon_onu_set_onu_state_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_onu_set_onu_state_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_set_onu_state_data_pack(const bcmolt_gpon_onu_set_onu_state_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_onu_set_onu_state_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_set_onu_state_data_get_packed_length(const bcmolt_gpon_onu_set_onu_state_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_onu_set_onu_state_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_set_onu_state_data_unpack(bcmolt_gpon_onu_set_onu_state_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_onu_set_onu_state_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_set_onu_state_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_onu_set_onu_state_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_set_onu_state_data_bounds_check(const bcmolt_gpon_onu_set_onu_state_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_set_onu_state_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_onu_cpu_packets_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_onu_cpu_packets_data_set_default(bcmolt_gpon_onu_cpu_packets_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_onu_cpu_packets_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_cpu_packets_data_pack(const bcmolt_gpon_onu_cpu_packets_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_onu_cpu_packets_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_cpu_packets_data_get_packed_length(const bcmolt_gpon_onu_cpu_packets_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_onu_cpu_packets_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_cpu_packets_data_unpack(bcmolt_gpon_onu_cpu_packets_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_onu_cpu_packets_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_cpu_packets_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_onu_cpu_packets_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_cpu_packets_data_bounds_check(const bcmolt_gpon_onu_cpu_packets_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_cpu_packets_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_onu_ploam_packet_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_onu_ploam_packet_data_set_default(bcmolt_gpon_onu_ploam_packet_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_onu_ploam_packet_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_ploam_packet_data_pack(const bcmolt_gpon_onu_ploam_packet_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_onu_ploam_packet_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_ploam_packet_data_get_packed_length(const bcmolt_gpon_onu_ploam_packet_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_onu_ploam_packet_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_ploam_packet_data_unpack(bcmolt_gpon_onu_ploam_packet_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_onu_ploam_packet_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_ploam_packet_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_onu_ploam_packet_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_ploam_packet_data_bounds_check(const bcmolt_gpon_onu_ploam_packet_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_ploam_packet_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_onu_cpu_packet_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_onu_cpu_packet_data_set_default(bcmolt_gpon_onu_cpu_packet_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_onu_cpu_packet_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_cpu_packet_data_pack(const bcmolt_gpon_onu_cpu_packet_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_onu_cpu_packet_data would occupy 
+ * on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_cpu_packet_data_get_packed_length(const bcmolt_gpon_onu_cpu_packet_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_onu_cpu_packet_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_cpu_packet_data_unpack(bcmolt_gpon_onu_cpu_packet_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_onu_cpu_packet_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_cpu_packet_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_onu_cpu_packet_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_cpu_packet_data_bounds_check(const bcmolt_gpon_onu_cpu_packet_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_cpu_packet_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_onu_omci_packet_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_onu_omci_packet_data_set_default(bcmolt_gpon_onu_omci_packet_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_onu_omci_packet_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_omci_packet_data_pack(const bcmolt_gpon_onu_omci_packet_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_onu_omci_packet_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_onu_omci_packet_data_get_packed_length(const bcmolt_gpon_onu_omci_packet_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_onu_omci_packet_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_omci_packet_data_unpack(bcmolt_gpon_onu_omci_packet_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_onu_omci_packet_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_onu_omci_packet_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_onu_omci_packet_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_onu_omci_packet_data_bounds_check(const bcmolt_gpon_onu_omci_packet_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_onu_omci_packet_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_trx_key struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_trx_key_set_default(bcmolt_gpon_trx_key *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_trx_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_trx_key_pack(const bcmolt_gpon_trx_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_trx_key would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_trx_key_get_packed_length(const bcmolt_gpon_trx_key *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_trx_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_trx_key_unpack(bcmolt_gpon_trx_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_trx_key struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_trx_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_trx_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_trx_key_bounds_check(const bcmolt_gpon_trx_key *this, bcmolt_presence_mask fields_present, bcmolt_gpon_trx_key_id *failed_prop);
+
+/** Initializes a bcmolt_gpon_trx_cfg_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_gpon_trx_cfg_data_set_default(bcmolt_gpon_trx_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_gpon_trx_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_trx_cfg_data_pack(const bcmolt_gpon_trx_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_gpon_trx_cfg_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_gpon_trx_cfg_data_get_packed_length(const bcmolt_gpon_trx_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_gpon_trx_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_trx_cfg_data_unpack(bcmolt_gpon_trx_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_gpon_trx_cfg_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_gpon_trx_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_gpon_trx_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_gpon_trx_cfg_data_bounds_check(const bcmolt_gpon_trx_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_gpon_trx_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_log_entry_key struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_log_entry_key_set_default(bcmolt_log_entry_key *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_log_entry_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_log_entry_key_pack(const bcmolt_log_entry_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_log_entry_key would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_log_entry_key_get_packed_length(const bcmolt_log_entry_key *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_log_entry_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_log_entry_key_unpack(bcmolt_log_entry_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_log_entry_key struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_log_entry_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_log_entry_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_log_entry_key_bounds_check(const bcmolt_log_entry_key *this, bcmolt_presence_mask fields_present, bcmolt_log_entry_key_id *failed_prop);
+
+/** Initializes a bcmolt_log_entry_cfg_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_log_entry_cfg_data_set_default(bcmolt_log_entry_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_log_entry_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_log_entry_cfg_data_pack(const bcmolt_log_entry_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_log_entry_cfg_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_log_entry_cfg_data_get_packed_length(const bcmolt_log_entry_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_log_entry_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_log_entry_cfg_data_unpack(bcmolt_log_entry_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_log_entry_cfg_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_log_entry_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_log_entry_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_log_entry_cfg_data_bounds_check(const bcmolt_log_entry_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_log_entry_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_log_entry_stat_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_log_entry_stat_data_set_default(bcmolt_log_entry_stat_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_log_entry_stat_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_log_entry_stat_data_pack(const bcmolt_log_entry_stat_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_log_entry_stat_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_log_entry_stat_data_get_packed_length(const bcmolt_log_entry_stat_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_log_entry_stat_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_log_entry_stat_data_unpack(bcmolt_log_entry_stat_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_log_entry_stat_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_log_entry_stat_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_log_entry_stat_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_log_entry_stat_data_bounds_check(const bcmolt_log_entry_stat_data *this, bcmolt_presence_mask fields_present, bcmolt_log_entry_stat_id *failed_prop);
+
+/** Initializes a bcmolt_log_entry_stat_cfg_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_log_entry_stat_cfg_data_set_default(bcmolt_log_entry_stat_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_log_entry_stat_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_log_entry_stat_cfg_data_pack(const bcmolt_log_entry_stat_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_log_entry_stat_cfg_data would occupy 
+ * on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_log_entry_stat_cfg_data_get_packed_length(const bcmolt_log_entry_stat_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_log_entry_stat_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_log_entry_stat_cfg_data_unpack(bcmolt_log_entry_stat_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_log_entry_stat_cfg_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_log_entry_stat_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_log_entry_stat_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_log_entry_stat_cfg_data_bounds_check(const bcmolt_log_entry_stat_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_log_entry_stat_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_log_entry_stat_alarm_cleared_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_log_entry_stat_alarm_cleared_data_set_default(bcmolt_log_entry_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_log_entry_stat_alarm_cleared_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_log_entry_stat_alarm_cleared_data_pack(const bcmolt_log_entry_stat_alarm_cleared_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_log_entry_stat_alarm_cleared_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_log_entry_stat_alarm_cleared_data_get_packed_length(const bcmolt_log_entry_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_log_entry_stat_alarm_cleared_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_log_entry_stat_alarm_cleared_data_unpack(bcmolt_log_entry_stat_alarm_cleared_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_log_entry_stat_alarm_cleared_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_log_entry_stat_alarm_cleared_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_log_entry_stat_alarm_cleared_data is out 
+ * of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_log_entry_stat_alarm_cleared_data_bounds_check(const bcmolt_log_entry_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present, bcmolt_log_entry_stat_alarm_cleared_id *failed_prop);
+
+/** Initializes a bcmolt_log_entry_stat_alarm_raised_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_log_entry_stat_alarm_raised_data_set_default(bcmolt_log_entry_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_log_entry_stat_alarm_raised_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_log_entry_stat_alarm_raised_data_pack(const bcmolt_log_entry_stat_alarm_raised_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_log_entry_stat_alarm_raised_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_log_entry_stat_alarm_raised_data_get_packed_length(const bcmolt_log_entry_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_log_entry_stat_alarm_raised_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_log_entry_stat_alarm_raised_data_unpack(bcmolt_log_entry_stat_alarm_raised_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_log_entry_stat_alarm_raised_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_log_entry_stat_alarm_raised_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_log_entry_stat_alarm_raised_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_log_entry_stat_alarm_raised_data_bounds_check(const bcmolt_log_entry_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present, bcmolt_log_entry_stat_alarm_raised_id *failed_prop);
+
+/** Initializes a bcmolt_log_entry_auto_cfg_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_log_entry_auto_cfg_data_set_default(bcmolt_log_entry_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_log_entry_auto_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_log_entry_auto_cfg_data_pack(const bcmolt_log_entry_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_log_entry_auto_cfg_data would occupy 
+ * on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_log_entry_auto_cfg_data_get_packed_length(const bcmolt_log_entry_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_log_entry_auto_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_log_entry_auto_cfg_data_unpack(bcmolt_log_entry_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_log_entry_auto_cfg_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_log_entry_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_log_entry_auto_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_log_entry_auto_cfg_data_bounds_check(const bcmolt_log_entry_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_log_entry_auto_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_logger_key struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_logger_key_set_default(bcmolt_logger_key *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_logger_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_logger_key_pack(const bcmolt_logger_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_logger_key would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_logger_key_get_packed_length(const bcmolt_logger_key *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_logger_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_logger_key_unpack(bcmolt_logger_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_logger_key struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_logger_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_logger_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_logger_key_bounds_check(const bcmolt_logger_key *this, bcmolt_presence_mask fields_present, bcmolt_logger_key_id *failed_prop);
+
+/** Initializes a bcmolt_logger_cfg_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_logger_cfg_data_set_default(bcmolt_logger_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_logger_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_logger_cfg_data_pack(const bcmolt_logger_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_logger_cfg_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_logger_cfg_data_get_packed_length(const bcmolt_logger_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_logger_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_logger_cfg_data_unpack(bcmolt_logger_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_logger_cfg_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_logger_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_logger_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_logger_cfg_data_bounds_check(const bcmolt_logger_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_logger_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_logger_stat_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_logger_stat_data_set_default(bcmolt_logger_stat_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_logger_stat_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_logger_stat_data_pack(const bcmolt_logger_stat_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_logger_stat_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_logger_stat_data_get_packed_length(const bcmolt_logger_stat_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_logger_stat_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_logger_stat_data_unpack(bcmolt_logger_stat_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_logger_stat_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_logger_stat_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_logger_stat_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_logger_stat_data_bounds_check(const bcmolt_logger_stat_data *this, bcmolt_presence_mask fields_present, bcmolt_logger_stat_id *failed_prop);
+
+/** Initializes a bcmolt_logger_stat_cfg_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_logger_stat_cfg_data_set_default(bcmolt_logger_stat_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_logger_stat_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_logger_stat_cfg_data_pack(const bcmolt_logger_stat_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_logger_stat_cfg_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_logger_stat_cfg_data_get_packed_length(const bcmolt_logger_stat_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_logger_stat_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_logger_stat_cfg_data_unpack(bcmolt_logger_stat_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_logger_stat_cfg_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_logger_stat_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_logger_stat_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_logger_stat_cfg_data_bounds_check(const bcmolt_logger_stat_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_logger_stat_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_logger_stat_alarm_cleared_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_logger_stat_alarm_cleared_data_set_default(bcmolt_logger_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_logger_stat_alarm_cleared_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_logger_stat_alarm_cleared_data_pack(const bcmolt_logger_stat_alarm_cleared_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_logger_stat_alarm_cleared_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_logger_stat_alarm_cleared_data_get_packed_length(const bcmolt_logger_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_logger_stat_alarm_cleared_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_logger_stat_alarm_cleared_data_unpack(bcmolt_logger_stat_alarm_cleared_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_logger_stat_alarm_cleared_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_logger_stat_alarm_cleared_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_logger_stat_alarm_cleared_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_logger_stat_alarm_cleared_data_bounds_check(const bcmolt_logger_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present, bcmolt_logger_stat_alarm_cleared_id *failed_prop);
+
+/** Initializes a bcmolt_logger_stat_alarm_raised_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_logger_stat_alarm_raised_data_set_default(bcmolt_logger_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_logger_stat_alarm_raised_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_logger_stat_alarm_raised_data_pack(const bcmolt_logger_stat_alarm_raised_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_logger_stat_alarm_raised_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_logger_stat_alarm_raised_data_get_packed_length(const bcmolt_logger_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_logger_stat_alarm_raised_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_logger_stat_alarm_raised_data_unpack(bcmolt_logger_stat_alarm_raised_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_logger_stat_alarm_raised_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_logger_stat_alarm_raised_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_logger_stat_alarm_raised_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_logger_stat_alarm_raised_data_bounds_check(const bcmolt_logger_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present, bcmolt_logger_stat_alarm_raised_id *failed_prop);
+
+/** Initializes a bcmolt_logger_auto_cfg_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_logger_auto_cfg_data_set_default(bcmolt_logger_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_logger_auto_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_logger_auto_cfg_data_pack(const bcmolt_logger_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_logger_auto_cfg_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_logger_auto_cfg_data_get_packed_length(const bcmolt_logger_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_logger_auto_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_logger_auto_cfg_data_unpack(bcmolt_logger_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_logger_auto_cfg_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_logger_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_logger_auto_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_logger_auto_cfg_data_bounds_check(const bcmolt_logger_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_logger_auto_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_nni_key struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_nni_key_set_default(bcmolt_nni_key *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_nni_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_nni_key_pack(const bcmolt_nni_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_nni_key would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_nni_key_get_packed_length(const bcmolt_nni_key *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_nni_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_nni_key_unpack(bcmolt_nni_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_nni_key struct and collects memory requirements 
+ * above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_nni_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_nni_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_nni_key_bounds_check(const bcmolt_nni_key *this, bcmolt_presence_mask fields_present, bcmolt_nni_key_id *failed_prop);
+
+/** Initializes a bcmolt_nni_cfg_data struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_nni_cfg_data_set_default(bcmolt_nni_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_nni_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_nni_cfg_data_pack(const bcmolt_nni_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_nni_cfg_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_nni_cfg_data_get_packed_length(const bcmolt_nni_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_nni_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_nni_cfg_data_unpack(bcmolt_nni_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_nni_cfg_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_nni_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_nni_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_nni_cfg_data_bounds_check(const bcmolt_nni_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_nni_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_nni_stat_data struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_nni_stat_data_set_default(bcmolt_nni_stat_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_nni_stat_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_nni_stat_data_pack(const bcmolt_nni_stat_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_nni_stat_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_nni_stat_data_get_packed_length(const bcmolt_nni_stat_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_nni_stat_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_nni_stat_data_unpack(bcmolt_nni_stat_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_nni_stat_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_nni_stat_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_nni_stat_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_nni_stat_data_bounds_check(const bcmolt_nni_stat_data *this, bcmolt_presence_mask fields_present, bcmolt_nni_stat_id *failed_prop);
+
+/** Initializes a bcmolt_nni_stat_cfg_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_nni_stat_cfg_data_set_default(bcmolt_nni_stat_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_nni_stat_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_nni_stat_cfg_data_pack(const bcmolt_nni_stat_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_nni_stat_cfg_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_nni_stat_cfg_data_get_packed_length(const bcmolt_nni_stat_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_nni_stat_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_nni_stat_cfg_data_unpack(bcmolt_nni_stat_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_nni_stat_cfg_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_nni_stat_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_nni_stat_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_nni_stat_cfg_data_bounds_check(const bcmolt_nni_stat_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_nni_stat_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_nni_stat_alarm_cleared_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_nni_stat_alarm_cleared_data_set_default(bcmolt_nni_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_nni_stat_alarm_cleared_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_nni_stat_alarm_cleared_data_pack(const bcmolt_nni_stat_alarm_cleared_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_nni_stat_alarm_cleared_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_nni_stat_alarm_cleared_data_get_packed_length(const bcmolt_nni_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_nni_stat_alarm_cleared_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_nni_stat_alarm_cleared_data_unpack(bcmolt_nni_stat_alarm_cleared_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_nni_stat_alarm_cleared_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_nni_stat_alarm_cleared_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_nni_stat_alarm_cleared_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_nni_stat_alarm_cleared_data_bounds_check(const bcmolt_nni_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present, bcmolt_nni_stat_alarm_cleared_id *failed_prop);
+
+/** Initializes a bcmolt_nni_stat_alarm_raised_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_nni_stat_alarm_raised_data_set_default(bcmolt_nni_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_nni_stat_alarm_raised_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_nni_stat_alarm_raised_data_pack(const bcmolt_nni_stat_alarm_raised_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_nni_stat_alarm_raised_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_nni_stat_alarm_raised_data_get_packed_length(const bcmolt_nni_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_nni_stat_alarm_raised_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_nni_stat_alarm_raised_data_unpack(bcmolt_nni_stat_alarm_raised_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_nni_stat_alarm_raised_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_nni_stat_alarm_raised_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_nni_stat_alarm_raised_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_nni_stat_alarm_raised_data_bounds_check(const bcmolt_nni_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present, bcmolt_nni_stat_alarm_raised_id *failed_prop);
+
+/** Initializes a bcmolt_nni_status_changed_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_nni_status_changed_data_set_default(bcmolt_nni_status_changed_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_nni_status_changed_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_nni_status_changed_data_pack(const bcmolt_nni_status_changed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_nni_status_changed_data would occupy 
+ * on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_nni_status_changed_data_get_packed_length(const bcmolt_nni_status_changed_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_nni_status_changed_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_nni_status_changed_data_unpack(bcmolt_nni_status_changed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_nni_status_changed_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_nni_status_changed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_nni_status_changed_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_nni_status_changed_data_bounds_check(const bcmolt_nni_status_changed_data *this, bcmolt_presence_mask fields_present, bcmolt_nni_status_changed_id *failed_prop);
+
+/** Initializes a bcmolt_nni_auto_cfg_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_nni_auto_cfg_data_set_default(bcmolt_nni_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_nni_auto_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_nni_auto_cfg_data_pack(const bcmolt_nni_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_nni_auto_cfg_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_nni_auto_cfg_data_get_packed_length(const bcmolt_nni_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_nni_auto_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_nni_auto_cfg_data_unpack(bcmolt_nni_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_nni_auto_cfg_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_nni_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_nni_auto_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_nni_auto_cfg_data_bounds_check(const bcmolt_nni_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_nni_auto_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_nni_serdes_key struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_nni_serdes_key_set_default(bcmolt_nni_serdes_key *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_nni_serdes_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_nni_serdes_key_pack(const bcmolt_nni_serdes_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_nni_serdes_key would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_nni_serdes_key_get_packed_length(const bcmolt_nni_serdes_key *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_nni_serdes_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_nni_serdes_key_unpack(bcmolt_nni_serdes_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_nni_serdes_key struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_nni_serdes_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_nni_serdes_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_nni_serdes_key_bounds_check(const bcmolt_nni_serdes_key *this, bcmolt_presence_mask fields_present, bcmolt_nni_serdes_key_id *failed_prop);
+
+/** Initializes a bcmolt_nni_serdes_cfg_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_nni_serdes_cfg_data_set_default(bcmolt_nni_serdes_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_nni_serdes_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_nni_serdes_cfg_data_pack(const bcmolt_nni_serdes_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_nni_serdes_cfg_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_nni_serdes_cfg_data_get_packed_length(const bcmolt_nni_serdes_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_nni_serdes_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_nni_serdes_cfg_data_unpack(bcmolt_nni_serdes_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_nni_serdes_cfg_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_nni_serdes_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_nni_serdes_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_nni_serdes_cfg_data_bounds_check(const bcmolt_nni_serdes_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_nni_serdes_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_software_error_key struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_software_error_key_set_default(bcmolt_software_error_key *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_software_error_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_software_error_key_pack(const bcmolt_software_error_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_software_error_key would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_software_error_key_get_packed_length(const bcmolt_software_error_key *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_software_error_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_software_error_key_unpack(bcmolt_software_error_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_software_error_key struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_software_error_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_software_error_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_software_error_key_bounds_check(const bcmolt_software_error_key *this, bcmolt_presence_mask fields_present, bcmolt_software_error_key_id *failed_prop);
+
+/** Initializes a bcmolt_software_error_cfg_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_software_error_cfg_data_set_default(bcmolt_software_error_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_software_error_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_software_error_cfg_data_pack(const bcmolt_software_error_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_software_error_cfg_data would occupy 
+ * on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_software_error_cfg_data_get_packed_length(const bcmolt_software_error_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_software_error_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_software_error_cfg_data_unpack(bcmolt_software_error_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_software_error_cfg_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_software_error_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_software_error_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_software_error_cfg_data_bounds_check(const bcmolt_software_error_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_software_error_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_trx_calibration_key struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_trx_calibration_key_set_default(bcmolt_trx_calibration_key *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_trx_calibration_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_trx_calibration_key_pack(const bcmolt_trx_calibration_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_trx_calibration_key would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_trx_calibration_key_get_packed_length(const bcmolt_trx_calibration_key *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_trx_calibration_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_trx_calibration_key_unpack(bcmolt_trx_calibration_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_trx_calibration_key struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_trx_calibration_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_trx_calibration_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_trx_calibration_key_bounds_check(const bcmolt_trx_calibration_key *this, bcmolt_presence_mask fields_present, bcmolt_trx_calibration_key_id *failed_prop);
+
+/** Initializes a 
+ * bcmolt_trx_calibration_capture_window_and_statistic_completed_data struct.  
+ * This sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_trx_calibration_capture_window_and_statistic_completed_data_set_default(bcmolt_trx_calibration_capture_window_and_statistic_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_trx_calibration_capture_window_and_statistic_completed_data 
+ * to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_trx_calibration_capture_window_and_statistic_completed_data_pack(const bcmolt_trx_calibration_capture_window_and_statistic_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_trx_calibration_capture_window_and_statistic_completed_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_trx_calibration_capture_window_and_statistic_completed_data_get_packed_length(const bcmolt_trx_calibration_capture_window_and_statistic_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_trx_calibration_capture_window_and_statistic_completed_data 
+ * from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_trx_calibration_capture_window_and_statistic_completed_data_unpack(bcmolt_trx_calibration_capture_window_and_statistic_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed 
+ * bcmolt_trx_calibration_capture_window_and_statistic_completed_data struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_trx_calibration_capture_window_and_statistic_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the 
+ * bcmolt_trx_calibration_capture_window_and_statistic_completed_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_trx_calibration_capture_window_and_statistic_completed_data_bounds_check(const bcmolt_trx_calibration_capture_window_and_statistic_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_trx_calibration_capture_window_and_statistic_completed_id *failed_prop);
+
+/** Initializes a bcmolt_trx_calibration_auto_cfg_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_trx_calibration_auto_cfg_data_set_default(bcmolt_trx_calibration_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_trx_calibration_auto_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_trx_calibration_auto_cfg_data_pack(const bcmolt_trx_calibration_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_trx_calibration_auto_cfg_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_trx_calibration_auto_cfg_data_get_packed_length(const bcmolt_trx_calibration_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_trx_calibration_auto_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_trx_calibration_auto_cfg_data_unpack(bcmolt_trx_calibration_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_trx_calibration_auto_cfg_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_trx_calibration_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_trx_calibration_auto_cfg_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_trx_calibration_auto_cfg_data_bounds_check(const bcmolt_trx_calibration_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_trx_calibration_auto_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_trx_calibration_start_capture_window_data struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_trx_calibration_start_capture_window_data_set_default(bcmolt_trx_calibration_start_capture_window_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_trx_calibration_start_capture_window_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_trx_calibration_start_capture_window_data_pack(const bcmolt_trx_calibration_start_capture_window_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_trx_calibration_start_capture_window_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_trx_calibration_start_capture_window_data_get_packed_length(const bcmolt_trx_calibration_start_capture_window_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_trx_calibration_start_capture_window_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_trx_calibration_start_capture_window_data_unpack(bcmolt_trx_calibration_start_capture_window_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_trx_calibration_start_capture_window_data struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_trx_calibration_start_capture_window_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_trx_calibration_start_capture_window_data 
+ * is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_trx_calibration_start_capture_window_data_bounds_check(const bcmolt_trx_calibration_start_capture_window_data *this, bcmolt_presence_mask fields_present, bcmolt_trx_calibration_start_capture_window_id *failed_prop);
+
+/** Initializes a bcmolt_trx_calibration_stop_capture_window_data struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_trx_calibration_stop_capture_window_data_set_default(bcmolt_trx_calibration_stop_capture_window_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_trx_calibration_stop_capture_window_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_trx_calibration_stop_capture_window_data_pack(const bcmolt_trx_calibration_stop_capture_window_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_trx_calibration_stop_capture_window_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_trx_calibration_stop_capture_window_data_get_packed_length(const bcmolt_trx_calibration_stop_capture_window_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_trx_calibration_stop_capture_window_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_trx_calibration_stop_capture_window_data_unpack(bcmolt_trx_calibration_stop_capture_window_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_trx_calibration_stop_capture_window_data struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_trx_calibration_stop_capture_window_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_trx_calibration_stop_capture_window_data 
+ * is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_trx_calibration_stop_capture_window_data_bounds_check(const bcmolt_trx_calibration_stop_capture_window_data *this, bcmolt_presence_mask fields_present, bcmolt_trx_calibration_stop_capture_window_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_alloc_key struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_alloc_key_set_default(bcmolt_xgpon_alloc_key *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_alloc_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_alloc_key_pack(const bcmolt_xgpon_alloc_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_alloc_key would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_alloc_key_get_packed_length(const bcmolt_xgpon_alloc_key *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_alloc_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_alloc_key_unpack(bcmolt_xgpon_alloc_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_alloc_key struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_alloc_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_alloc_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_alloc_key_bounds_check(const bcmolt_xgpon_alloc_key *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_alloc_key_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_alloc_cfg_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_alloc_cfg_data_set_default(bcmolt_xgpon_alloc_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_alloc_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_alloc_cfg_data_pack(const bcmolt_xgpon_alloc_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_alloc_cfg_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_alloc_cfg_data_get_packed_length(const bcmolt_xgpon_alloc_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_alloc_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_alloc_cfg_data_unpack(bcmolt_xgpon_alloc_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_alloc_cfg_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_alloc_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_alloc_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_alloc_cfg_data_bounds_check(const bcmolt_xgpon_alloc_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_alloc_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_alloc_stat_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_alloc_stat_data_set_default(bcmolt_xgpon_alloc_stat_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_alloc_stat_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_alloc_stat_data_pack(const bcmolt_xgpon_alloc_stat_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_alloc_stat_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_alloc_stat_data_get_packed_length(const bcmolt_xgpon_alloc_stat_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_alloc_stat_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_alloc_stat_data_unpack(bcmolt_xgpon_alloc_stat_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_alloc_stat_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_alloc_stat_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_alloc_stat_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_alloc_stat_data_bounds_check(const bcmolt_xgpon_alloc_stat_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_alloc_stat_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_alloc_stat_cfg_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_alloc_stat_cfg_data_set_default(bcmolt_xgpon_alloc_stat_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_alloc_stat_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_alloc_stat_cfg_data_pack(const bcmolt_xgpon_alloc_stat_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_alloc_stat_cfg_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_alloc_stat_cfg_data_get_packed_length(const bcmolt_xgpon_alloc_stat_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_alloc_stat_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_alloc_stat_cfg_data_unpack(bcmolt_xgpon_alloc_stat_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_alloc_stat_cfg_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_alloc_stat_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_alloc_stat_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_alloc_stat_cfg_data_bounds_check(const bcmolt_xgpon_alloc_stat_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_alloc_stat_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_alloc_configuration_completed_data struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_alloc_configuration_completed_data_set_default(bcmolt_xgpon_alloc_configuration_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_alloc_configuration_completed_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_alloc_configuration_completed_data_pack(const bcmolt_xgpon_alloc_configuration_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_xgpon_alloc_configuration_completed_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_alloc_configuration_completed_data_get_packed_length(const bcmolt_xgpon_alloc_configuration_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_alloc_configuration_completed_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_alloc_configuration_completed_data_unpack(bcmolt_xgpon_alloc_configuration_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_alloc_configuration_completed_data struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_alloc_configuration_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_alloc_configuration_completed_data 
+ * is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_alloc_configuration_completed_data_bounds_check(const bcmolt_xgpon_alloc_configuration_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_alloc_configuration_completed_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_alloc_get_alloc_stats_completed_data struct.  
+ * This sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_alloc_get_alloc_stats_completed_data_set_default(bcmolt_xgpon_alloc_get_alloc_stats_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_alloc_get_alloc_stats_completed_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_alloc_get_alloc_stats_completed_data_pack(const bcmolt_xgpon_alloc_get_alloc_stats_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_xgpon_alloc_get_alloc_stats_completed_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_alloc_get_alloc_stats_completed_data_get_packed_length(const bcmolt_xgpon_alloc_get_alloc_stats_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_alloc_get_alloc_stats_completed_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_alloc_get_alloc_stats_completed_data_unpack(bcmolt_xgpon_alloc_get_alloc_stats_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_alloc_get_alloc_stats_completed_data struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_alloc_get_alloc_stats_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_alloc_get_alloc_stats_completed_data 
+ * is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_alloc_get_alloc_stats_completed_data_bounds_check(const bcmolt_xgpon_alloc_get_alloc_stats_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_alloc_get_alloc_stats_completed_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_alloc_stat_alarm_cleared_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_alloc_stat_alarm_cleared_data_set_default(bcmolt_xgpon_alloc_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_alloc_stat_alarm_cleared_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_alloc_stat_alarm_cleared_data_pack(const bcmolt_xgpon_alloc_stat_alarm_cleared_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_alloc_stat_alarm_cleared_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_alloc_stat_alarm_cleared_data_get_packed_length(const bcmolt_xgpon_alloc_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_alloc_stat_alarm_cleared_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_alloc_stat_alarm_cleared_data_unpack(bcmolt_xgpon_alloc_stat_alarm_cleared_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_alloc_stat_alarm_cleared_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_alloc_stat_alarm_cleared_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_alloc_stat_alarm_cleared_data is out 
+ * of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_alloc_stat_alarm_cleared_data_bounds_check(const bcmolt_xgpon_alloc_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_alloc_stat_alarm_cleared_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_alloc_stat_alarm_raised_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_alloc_stat_alarm_raised_data_set_default(bcmolt_xgpon_alloc_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_alloc_stat_alarm_raised_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_alloc_stat_alarm_raised_data_pack(const bcmolt_xgpon_alloc_stat_alarm_raised_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_alloc_stat_alarm_raised_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_alloc_stat_alarm_raised_data_get_packed_length(const bcmolt_xgpon_alloc_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_alloc_stat_alarm_raised_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_alloc_stat_alarm_raised_data_unpack(bcmolt_xgpon_alloc_stat_alarm_raised_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_alloc_stat_alarm_raised_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_alloc_stat_alarm_raised_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_alloc_stat_alarm_raised_data is out 
+ * of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_alloc_stat_alarm_raised_data_bounds_check(const bcmolt_xgpon_alloc_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_alloc_stat_alarm_raised_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_alloc_auto_cfg_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_alloc_auto_cfg_data_set_default(bcmolt_xgpon_alloc_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_alloc_auto_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_alloc_auto_cfg_data_pack(const bcmolt_xgpon_alloc_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_alloc_auto_cfg_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_alloc_auto_cfg_data_get_packed_length(const bcmolt_xgpon_alloc_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_alloc_auto_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_alloc_auto_cfg_data_unpack(bcmolt_xgpon_alloc_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_alloc_auto_cfg_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_alloc_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_alloc_auto_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_alloc_auto_cfg_data_bounds_check(const bcmolt_xgpon_alloc_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_alloc_auto_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_alloc_get_stats_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_alloc_get_stats_data_set_default(bcmolt_xgpon_alloc_get_stats_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_alloc_get_stats_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_alloc_get_stats_data_pack(const bcmolt_xgpon_alloc_get_stats_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_alloc_get_stats_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_alloc_get_stats_data_get_packed_length(const bcmolt_xgpon_alloc_get_stats_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_alloc_get_stats_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_alloc_get_stats_data_unpack(bcmolt_xgpon_alloc_get_stats_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_alloc_get_stats_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_alloc_get_stats_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_alloc_get_stats_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_alloc_get_stats_data_bounds_check(const bcmolt_xgpon_alloc_get_stats_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_alloc_get_stats_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_alloc_set_state_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_alloc_set_state_data_set_default(bcmolt_xgpon_alloc_set_state_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_alloc_set_state_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_alloc_set_state_data_pack(const bcmolt_xgpon_alloc_set_state_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_alloc_set_state_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_alloc_set_state_data_get_packed_length(const bcmolt_xgpon_alloc_set_state_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_alloc_set_state_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_alloc_set_state_data_unpack(bcmolt_xgpon_alloc_set_state_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_alloc_set_state_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_alloc_set_state_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_alloc_set_state_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_alloc_set_state_data_bounds_check(const bcmolt_xgpon_alloc_set_state_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_alloc_set_state_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_gem_port_key struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_gem_port_key_set_default(bcmolt_xgpon_gem_port_key *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_gem_port_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_key_pack(const bcmolt_xgpon_gem_port_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_gem_port_key would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_gem_port_key_get_packed_length(const bcmolt_xgpon_gem_port_key *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_gem_port_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_key_unpack(bcmolt_xgpon_gem_port_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_gem_port_key struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_gem_port_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_key_bounds_check(const bcmolt_xgpon_gem_port_key *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_gem_port_key_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_gem_port_cfg_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_gem_port_cfg_data_set_default(bcmolt_xgpon_gem_port_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_gem_port_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_cfg_data_pack(const bcmolt_xgpon_gem_port_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_gem_port_cfg_data would occupy 
+ * on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_gem_port_cfg_data_get_packed_length(const bcmolt_xgpon_gem_port_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_gem_port_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_cfg_data_unpack(bcmolt_xgpon_gem_port_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_gem_port_cfg_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_gem_port_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_cfg_data_bounds_check(const bcmolt_xgpon_gem_port_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_gem_port_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_gem_port_stat_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_gem_port_stat_data_set_default(bcmolt_xgpon_gem_port_stat_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_gem_port_stat_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_stat_data_pack(const bcmolt_xgpon_gem_port_stat_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_gem_port_stat_data would occupy 
+ * on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_gem_port_stat_data_get_packed_length(const bcmolt_xgpon_gem_port_stat_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_gem_port_stat_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_stat_data_unpack(bcmolt_xgpon_gem_port_stat_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_gem_port_stat_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_stat_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_gem_port_stat_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_stat_data_bounds_check(const bcmolt_xgpon_gem_port_stat_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_gem_port_stat_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_gem_port_stat_cfg_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_gem_port_stat_cfg_data_set_default(bcmolt_xgpon_gem_port_stat_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_gem_port_stat_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_stat_cfg_data_pack(const bcmolt_xgpon_gem_port_stat_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_gem_port_stat_cfg_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_gem_port_stat_cfg_data_get_packed_length(const bcmolt_xgpon_gem_port_stat_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_gem_port_stat_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_stat_cfg_data_unpack(bcmolt_xgpon_gem_port_stat_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_gem_port_stat_cfg_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_stat_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_gem_port_stat_cfg_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_stat_cfg_data_bounds_check(const bcmolt_xgpon_gem_port_stat_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_gem_port_stat_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_gem_port_stat_alarm_cleared_data struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_gem_port_stat_alarm_cleared_data_set_default(bcmolt_xgpon_gem_port_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_gem_port_stat_alarm_cleared_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_stat_alarm_cleared_data_pack(const bcmolt_xgpon_gem_port_stat_alarm_cleared_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_xgpon_gem_port_stat_alarm_cleared_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_gem_port_stat_alarm_cleared_data_get_packed_length(const bcmolt_xgpon_gem_port_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_gem_port_stat_alarm_cleared_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_stat_alarm_cleared_data_unpack(bcmolt_xgpon_gem_port_stat_alarm_cleared_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_gem_port_stat_alarm_cleared_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_stat_alarm_cleared_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_gem_port_stat_alarm_cleared_data is 
+ * out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_stat_alarm_cleared_data_bounds_check(const bcmolt_xgpon_gem_port_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_gem_port_stat_alarm_cleared_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_gem_port_stat_alarm_raised_data struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_gem_port_stat_alarm_raised_data_set_default(bcmolt_xgpon_gem_port_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_gem_port_stat_alarm_raised_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_stat_alarm_raised_data_pack(const bcmolt_xgpon_gem_port_stat_alarm_raised_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_gem_port_stat_alarm_raised_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_gem_port_stat_alarm_raised_data_get_packed_length(const bcmolt_xgpon_gem_port_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_gem_port_stat_alarm_raised_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_stat_alarm_raised_data_unpack(bcmolt_xgpon_gem_port_stat_alarm_raised_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_gem_port_stat_alarm_raised_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_stat_alarm_raised_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_gem_port_stat_alarm_raised_data is 
+ * out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_stat_alarm_raised_data_bounds_check(const bcmolt_xgpon_gem_port_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_gem_port_stat_alarm_raised_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_gem_port_auto_cfg_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_gem_port_auto_cfg_data_set_default(bcmolt_xgpon_gem_port_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_gem_port_auto_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_auto_cfg_data_pack(const bcmolt_xgpon_gem_port_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_gem_port_auto_cfg_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_gem_port_auto_cfg_data_get_packed_length(const bcmolt_xgpon_gem_port_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_gem_port_auto_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_auto_cfg_data_unpack(bcmolt_xgpon_gem_port_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_gem_port_auto_cfg_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_gem_port_auto_cfg_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_gem_port_auto_cfg_data_bounds_check(const bcmolt_xgpon_gem_port_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_gem_port_auto_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_iwf_key struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_iwf_key_set_default(bcmolt_xgpon_iwf_key *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_iwf_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_iwf_key_pack(const bcmolt_xgpon_iwf_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_iwf_key would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_iwf_key_get_packed_length(const bcmolt_xgpon_iwf_key *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_iwf_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_iwf_key_unpack(bcmolt_xgpon_iwf_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_iwf_key struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_iwf_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_iwf_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_iwf_key_bounds_check(const bcmolt_xgpon_iwf_key *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_iwf_key_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_iwf_cfg_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_iwf_cfg_data_set_default(bcmolt_xgpon_iwf_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_iwf_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_iwf_cfg_data_pack(const bcmolt_xgpon_iwf_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_iwf_cfg_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_iwf_cfg_data_get_packed_length(const bcmolt_xgpon_iwf_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_iwf_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_iwf_cfg_data_unpack(bcmolt_xgpon_iwf_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_iwf_cfg_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_iwf_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_iwf_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_iwf_cfg_data_bounds_check(const bcmolt_xgpon_iwf_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_iwf_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_ni_key struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_ni_key_set_default(bcmolt_xgpon_ni_key *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_ni_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_key_pack(const bcmolt_xgpon_ni_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_ni_key would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_ni_key_get_packed_length(const bcmolt_xgpon_ni_key *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_ni_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_key_unpack(bcmolt_xgpon_ni_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_ni_key struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_ni_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_ni_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_key_bounds_check(const bcmolt_xgpon_ni_key *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_key_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_ni_cfg_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_ni_cfg_data_set_default(bcmolt_xgpon_ni_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_ni_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_cfg_data_pack(const bcmolt_xgpon_ni_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_ni_cfg_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_ni_cfg_data_get_packed_length(const bcmolt_xgpon_ni_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_ni_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_cfg_data_unpack(bcmolt_xgpon_ni_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_ni_cfg_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_ni_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_ni_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_cfg_data_bounds_check(const bcmolt_xgpon_ni_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_ni_stat_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_ni_stat_data_set_default(bcmolt_xgpon_ni_stat_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_ni_stat_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_stat_data_pack(const bcmolt_xgpon_ni_stat_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_ni_stat_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_ni_stat_data_get_packed_length(const bcmolt_xgpon_ni_stat_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_ni_stat_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_stat_data_unpack(bcmolt_xgpon_ni_stat_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_ni_stat_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_ni_stat_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_ni_stat_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_stat_data_bounds_check(const bcmolt_xgpon_ni_stat_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_stat_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_ni_stat_cfg_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_ni_stat_cfg_data_set_default(bcmolt_xgpon_ni_stat_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_ni_stat_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_stat_cfg_data_pack(const bcmolt_xgpon_ni_stat_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_ni_stat_cfg_data would occupy 
+ * on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_ni_stat_cfg_data_get_packed_length(const bcmolt_xgpon_ni_stat_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_ni_stat_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_stat_cfg_data_unpack(bcmolt_xgpon_ni_stat_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_ni_stat_cfg_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_ni_stat_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_ni_stat_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_stat_cfg_data_bounds_check(const bcmolt_xgpon_ni_stat_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_stat_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_ni_cpu_packets_failure_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_ni_cpu_packets_failure_data_set_default(bcmolt_xgpon_ni_cpu_packets_failure_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_ni_cpu_packets_failure_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_cpu_packets_failure_data_pack(const bcmolt_xgpon_ni_cpu_packets_failure_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_ni_cpu_packets_failure_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_ni_cpu_packets_failure_data_get_packed_length(const bcmolt_xgpon_ni_cpu_packets_failure_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_ni_cpu_packets_failure_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_cpu_packets_failure_data_unpack(bcmolt_xgpon_ni_cpu_packets_failure_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_ni_cpu_packets_failure_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_ni_cpu_packets_failure_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_ni_cpu_packets_failure_data is out 
+ * of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_cpu_packets_failure_data_bounds_check(const bcmolt_xgpon_ni_cpu_packets_failure_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_cpu_packets_failure_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_ni_los_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_ni_los_data_set_default(bcmolt_xgpon_ni_los_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_ni_los_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_los_data_pack(const bcmolt_xgpon_ni_los_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_ni_los_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_ni_los_data_get_packed_length(const bcmolt_xgpon_ni_los_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_ni_los_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_los_data_unpack(bcmolt_xgpon_ni_los_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_ni_los_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_ni_los_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_ni_los_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_los_data_bounds_check(const bcmolt_xgpon_ni_los_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_los_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_ni_onu_discovered_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_ni_onu_discovered_data_set_default(bcmolt_xgpon_ni_onu_discovered_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_ni_onu_discovered_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_onu_discovered_data_pack(const bcmolt_xgpon_ni_onu_discovered_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_ni_onu_discovered_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_ni_onu_discovered_data_get_packed_length(const bcmolt_xgpon_ni_onu_discovered_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_ni_onu_discovered_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_onu_discovered_data_unpack(bcmolt_xgpon_ni_onu_discovered_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_ni_onu_discovered_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_ni_onu_discovered_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_ni_onu_discovered_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_onu_discovered_data_bounds_check(const bcmolt_xgpon_ni_onu_discovered_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_onu_discovered_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_ni_onu_upgrade_complete_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_ni_onu_upgrade_complete_data_set_default(bcmolt_xgpon_ni_onu_upgrade_complete_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_ni_onu_upgrade_complete_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_onu_upgrade_complete_data_pack(const bcmolt_xgpon_ni_onu_upgrade_complete_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_ni_onu_upgrade_complete_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_ni_onu_upgrade_complete_data_get_packed_length(const bcmolt_xgpon_ni_onu_upgrade_complete_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_ni_onu_upgrade_complete_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_onu_upgrade_complete_data_unpack(bcmolt_xgpon_ni_onu_upgrade_complete_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_ni_onu_upgrade_complete_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_ni_onu_upgrade_complete_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_ni_onu_upgrade_complete_data is out 
+ * of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_onu_upgrade_complete_data_bounds_check(const bcmolt_xgpon_ni_onu_upgrade_complete_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_onu_upgrade_complete_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_ni_protection_switching_onus_ranged_data struct.  
+ * This sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_ni_protection_switching_onus_ranged_data_set_default(bcmolt_xgpon_ni_protection_switching_onus_ranged_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_ni_protection_switching_onus_ranged_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_protection_switching_onus_ranged_data_pack(const bcmolt_xgpon_ni_protection_switching_onus_ranged_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_xgpon_ni_protection_switching_onus_ranged_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_ni_protection_switching_onus_ranged_data_get_packed_length(const bcmolt_xgpon_ni_protection_switching_onus_ranged_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_ni_protection_switching_onus_ranged_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_protection_switching_onus_ranged_data_unpack(bcmolt_xgpon_ni_protection_switching_onus_ranged_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_ni_protection_switching_onus_ranged_data 
+ * struct and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_ni_protection_switching_onus_ranged_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the 
+ * bcmolt_xgpon_ni_protection_switching_onus_ranged_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_protection_switching_onus_ranged_data_bounds_check(const bcmolt_xgpon_ni_protection_switching_onus_ranged_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_protection_switching_onus_ranged_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_ni_protection_switching_switchover_completed_data 
+ * struct.  This sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_ni_protection_switching_switchover_completed_data_set_default(bcmolt_xgpon_ni_protection_switching_switchover_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_ni_protection_switching_switchover_completed_data to 
+ * bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_protection_switching_switchover_completed_data_pack(const bcmolt_xgpon_ni_protection_switching_switchover_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_xgpon_ni_protection_switching_switchover_completed_data would occupy 
+ * on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_ni_protection_switching_switchover_completed_data_get_packed_length(const bcmolt_xgpon_ni_protection_switching_switchover_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_ni_protection_switching_switchover_completed_data 
+ * from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_protection_switching_switchover_completed_data_unpack(bcmolt_xgpon_ni_protection_switching_switchover_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed 
+ * bcmolt_xgpon_ni_protection_switching_switchover_completed_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_ni_protection_switching_switchover_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the 
+ * bcmolt_xgpon_ni_protection_switching_switchover_completed_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_protection_switching_switchover_completed_data_bounds_check(const bcmolt_xgpon_ni_protection_switching_switchover_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_protection_switching_switchover_completed_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_ni_protection_switching_traffic_resume_data 
+ * struct.  This sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_ni_protection_switching_traffic_resume_data_set_default(bcmolt_xgpon_ni_protection_switching_traffic_resume_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_ni_protection_switching_traffic_resume_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_protection_switching_traffic_resume_data_pack(const bcmolt_xgpon_ni_protection_switching_traffic_resume_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_xgpon_ni_protection_switching_traffic_resume_data would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_ni_protection_switching_traffic_resume_data_get_packed_length(const bcmolt_xgpon_ni_protection_switching_traffic_resume_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_ni_protection_switching_traffic_resume_data from 
+ * bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_protection_switching_traffic_resume_data_unpack(bcmolt_xgpon_ni_protection_switching_traffic_resume_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_ni_protection_switching_traffic_resume_data 
+ * struct and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_ni_protection_switching_traffic_resume_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the 
+ * bcmolt_xgpon_ni_protection_switching_traffic_resume_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_protection_switching_traffic_resume_data_bounds_check(const bcmolt_xgpon_ni_protection_switching_traffic_resume_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_protection_switching_traffic_resume_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_ni_rogue_detection_completed_data struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_ni_rogue_detection_completed_data_set_default(bcmolt_xgpon_ni_rogue_detection_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_ni_rogue_detection_completed_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_rogue_detection_completed_data_pack(const bcmolt_xgpon_ni_rogue_detection_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_xgpon_ni_rogue_detection_completed_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_ni_rogue_detection_completed_data_get_packed_length(const bcmolt_xgpon_ni_rogue_detection_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_ni_rogue_detection_completed_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_rogue_detection_completed_data_unpack(bcmolt_xgpon_ni_rogue_detection_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_ni_rogue_detection_completed_data struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_ni_rogue_detection_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_ni_rogue_detection_completed_data is 
+ * out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_rogue_detection_completed_data_bounds_check(const bcmolt_xgpon_ni_rogue_detection_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_rogue_detection_completed_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data 
+ * struct.  This sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data_set_default(bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data_pack(const bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data_get_packed_length(const bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data from 
+ * bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data_unpack(bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed 
+ * bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the 
+ * bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data_bounds_check(const bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_ni_stat_alarm_cleared_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_ni_stat_alarm_cleared_data_set_default(bcmolt_xgpon_ni_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_ni_stat_alarm_cleared_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_stat_alarm_cleared_data_pack(const bcmolt_xgpon_ni_stat_alarm_cleared_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_ni_stat_alarm_cleared_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_ni_stat_alarm_cleared_data_get_packed_length(const bcmolt_xgpon_ni_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_ni_stat_alarm_cleared_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_stat_alarm_cleared_data_unpack(bcmolt_xgpon_ni_stat_alarm_cleared_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_ni_stat_alarm_cleared_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_ni_stat_alarm_cleared_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_ni_stat_alarm_cleared_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_stat_alarm_cleared_data_bounds_check(const bcmolt_xgpon_ni_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_stat_alarm_cleared_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_ni_stat_alarm_raised_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_ni_stat_alarm_raised_data_set_default(bcmolt_xgpon_ni_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_ni_stat_alarm_raised_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_stat_alarm_raised_data_pack(const bcmolt_xgpon_ni_stat_alarm_raised_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_ni_stat_alarm_raised_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_ni_stat_alarm_raised_data_get_packed_length(const bcmolt_xgpon_ni_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_ni_stat_alarm_raised_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_stat_alarm_raised_data_unpack(bcmolt_xgpon_ni_stat_alarm_raised_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_ni_stat_alarm_raised_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_ni_stat_alarm_raised_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_ni_stat_alarm_raised_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_stat_alarm_raised_data_bounds_check(const bcmolt_xgpon_ni_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_stat_alarm_raised_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_ni_state_change_completed_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_ni_state_change_completed_data_set_default(bcmolt_xgpon_ni_state_change_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_ni_state_change_completed_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_state_change_completed_data_pack(const bcmolt_xgpon_ni_state_change_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_ni_state_change_completed_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_ni_state_change_completed_data_get_packed_length(const bcmolt_xgpon_ni_state_change_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_ni_state_change_completed_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_state_change_completed_data_unpack(bcmolt_xgpon_ni_state_change_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_ni_state_change_completed_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_ni_state_change_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_ni_state_change_completed_data is 
+ * out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_state_change_completed_data_bounds_check(const bcmolt_xgpon_ni_state_change_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_state_change_completed_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_ni_tod_request_completed_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_ni_tod_request_completed_data_set_default(bcmolt_xgpon_ni_tod_request_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_ni_tod_request_completed_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_tod_request_completed_data_pack(const bcmolt_xgpon_ni_tod_request_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_ni_tod_request_completed_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_ni_tod_request_completed_data_get_packed_length(const bcmolt_xgpon_ni_tod_request_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_ni_tod_request_completed_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_tod_request_completed_data_unpack(bcmolt_xgpon_ni_tod_request_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_ni_tod_request_completed_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_ni_tod_request_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_ni_tod_request_completed_data is out 
+ * of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_tod_request_completed_data_bounds_check(const bcmolt_xgpon_ni_tod_request_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_tod_request_completed_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_ni_auto_cfg_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_ni_auto_cfg_data_set_default(bcmolt_xgpon_ni_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_ni_auto_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_auto_cfg_data_pack(const bcmolt_xgpon_ni_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_ni_auto_cfg_data would occupy 
+ * on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_ni_auto_cfg_data_get_packed_length(const bcmolt_xgpon_ni_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_ni_auto_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_auto_cfg_data_unpack(bcmolt_xgpon_ni_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_ni_auto_cfg_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_ni_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_ni_auto_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_auto_cfg_data_bounds_check(const bcmolt_xgpon_ni_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_auto_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_ni_adjust_tx_wavelength_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_ni_adjust_tx_wavelength_data_set_default(bcmolt_xgpon_ni_adjust_tx_wavelength_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_ni_adjust_tx_wavelength_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_adjust_tx_wavelength_data_pack(const bcmolt_xgpon_ni_adjust_tx_wavelength_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_ni_adjust_tx_wavelength_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_ni_adjust_tx_wavelength_data_get_packed_length(const bcmolt_xgpon_ni_adjust_tx_wavelength_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_ni_adjust_tx_wavelength_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_adjust_tx_wavelength_data_unpack(bcmolt_xgpon_ni_adjust_tx_wavelength_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_ni_adjust_tx_wavelength_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_ni_adjust_tx_wavelength_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_ni_adjust_tx_wavelength_data is out 
+ * of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_adjust_tx_wavelength_data_bounds_check(const bcmolt_xgpon_ni_adjust_tx_wavelength_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_adjust_tx_wavelength_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_ni_disable_serial_number_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_ni_disable_serial_number_data_set_default(bcmolt_xgpon_ni_disable_serial_number_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_ni_disable_serial_number_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_disable_serial_number_data_pack(const bcmolt_xgpon_ni_disable_serial_number_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_ni_disable_serial_number_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_ni_disable_serial_number_data_get_packed_length(const bcmolt_xgpon_ni_disable_serial_number_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_ni_disable_serial_number_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_disable_serial_number_data_unpack(bcmolt_xgpon_ni_disable_serial_number_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_ni_disable_serial_number_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_ni_disable_serial_number_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_ni_disable_serial_number_data is out 
+ * of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_disable_serial_number_data_bounds_check(const bcmolt_xgpon_ni_disable_serial_number_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_disable_serial_number_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_ni_rogue_detection_window_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_ni_rogue_detection_window_data_set_default(bcmolt_xgpon_ni_rogue_detection_window_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_ni_rogue_detection_window_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_rogue_detection_window_data_pack(const bcmolt_xgpon_ni_rogue_detection_window_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_ni_rogue_detection_window_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_ni_rogue_detection_window_data_get_packed_length(const bcmolt_xgpon_ni_rogue_detection_window_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_ni_rogue_detection_window_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_rogue_detection_window_data_unpack(bcmolt_xgpon_ni_rogue_detection_window_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_ni_rogue_detection_window_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_ni_rogue_detection_window_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_ni_rogue_detection_window_data is 
+ * out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_rogue_detection_window_data_bounds_check(const bcmolt_xgpon_ni_rogue_detection_window_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_rogue_detection_window_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_ni_run_special_bw_map_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_ni_run_special_bw_map_data_set_default(bcmolt_xgpon_ni_run_special_bw_map_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_ni_run_special_bw_map_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_run_special_bw_map_data_pack(const bcmolt_xgpon_ni_run_special_bw_map_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_ni_run_special_bw_map_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_ni_run_special_bw_map_data_get_packed_length(const bcmolt_xgpon_ni_run_special_bw_map_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_ni_run_special_bw_map_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_run_special_bw_map_data_unpack(bcmolt_xgpon_ni_run_special_bw_map_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_ni_run_special_bw_map_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_ni_run_special_bw_map_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_ni_run_special_bw_map_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_run_special_bw_map_data_bounds_check(const bcmolt_xgpon_ni_run_special_bw_map_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_run_special_bw_map_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_ni_set_onu_state_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_ni_set_onu_state_data_set_default(bcmolt_xgpon_ni_set_onu_state_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_ni_set_onu_state_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_set_onu_state_data_pack(const bcmolt_xgpon_ni_set_onu_state_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_ni_set_onu_state_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_ni_set_onu_state_data_get_packed_length(const bcmolt_xgpon_ni_set_onu_state_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_ni_set_onu_state_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_set_onu_state_data_unpack(bcmolt_xgpon_ni_set_onu_state_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_ni_set_onu_state_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_ni_set_onu_state_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_ni_set_onu_state_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_set_onu_state_data_bounds_check(const bcmolt_xgpon_ni_set_onu_state_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_set_onu_state_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_ni_set_pon_state_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_ni_set_pon_state_data_set_default(bcmolt_xgpon_ni_set_pon_state_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_ni_set_pon_state_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_set_pon_state_data_pack(const bcmolt_xgpon_ni_set_pon_state_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_ni_set_pon_state_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_ni_set_pon_state_data_get_packed_length(const bcmolt_xgpon_ni_set_pon_state_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_ni_set_pon_state_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_set_pon_state_data_unpack(bcmolt_xgpon_ni_set_pon_state_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_ni_set_pon_state_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_ni_set_pon_state_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_ni_set_pon_state_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_set_pon_state_data_bounds_check(const bcmolt_xgpon_ni_set_pon_state_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_set_pon_state_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_ni_start_onu_upgrade_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_ni_start_onu_upgrade_data_set_default(bcmolt_xgpon_ni_start_onu_upgrade_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_ni_start_onu_upgrade_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_start_onu_upgrade_data_pack(const bcmolt_xgpon_ni_start_onu_upgrade_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_ni_start_onu_upgrade_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_ni_start_onu_upgrade_data_get_packed_length(const bcmolt_xgpon_ni_start_onu_upgrade_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_ni_start_onu_upgrade_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_start_onu_upgrade_data_unpack(bcmolt_xgpon_ni_start_onu_upgrade_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_ni_start_onu_upgrade_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_ni_start_onu_upgrade_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_ni_start_onu_upgrade_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_start_onu_upgrade_data_bounds_check(const bcmolt_xgpon_ni_start_onu_upgrade_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_start_onu_upgrade_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_ni_broadcast_ploam_packet_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_ni_broadcast_ploam_packet_data_set_default(bcmolt_xgpon_ni_broadcast_ploam_packet_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_ni_broadcast_ploam_packet_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_broadcast_ploam_packet_data_pack(const bcmolt_xgpon_ni_broadcast_ploam_packet_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_ni_broadcast_ploam_packet_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_ni_broadcast_ploam_packet_data_get_packed_length(const bcmolt_xgpon_ni_broadcast_ploam_packet_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_ni_broadcast_ploam_packet_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_broadcast_ploam_packet_data_unpack(bcmolt_xgpon_ni_broadcast_ploam_packet_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_ni_broadcast_ploam_packet_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_ni_broadcast_ploam_packet_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_ni_broadcast_ploam_packet_data is 
+ * out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_broadcast_ploam_packet_data_bounds_check(const bcmolt_xgpon_ni_broadcast_ploam_packet_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_broadcast_ploam_packet_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_ni_cpu_packets_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_ni_cpu_packets_data_set_default(bcmolt_xgpon_ni_cpu_packets_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_ni_cpu_packets_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_cpu_packets_data_pack(const bcmolt_xgpon_ni_cpu_packets_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_ni_cpu_packets_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_ni_cpu_packets_data_get_packed_length(const bcmolt_xgpon_ni_cpu_packets_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_ni_cpu_packets_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_cpu_packets_data_unpack(bcmolt_xgpon_ni_cpu_packets_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_ni_cpu_packets_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_ni_cpu_packets_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_ni_cpu_packets_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_ni_cpu_packets_data_bounds_check(const bcmolt_xgpon_ni_cpu_packets_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_ni_cpu_packets_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_onu_key struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_onu_key_set_default(bcmolt_xgpon_onu_key *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_onu_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_key_pack(const bcmolt_xgpon_onu_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_onu_key would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_key_get_packed_length(const bcmolt_xgpon_onu_key *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_onu_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_key_unpack(bcmolt_xgpon_onu_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_onu_key struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_onu_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_key_bounds_check(const bcmolt_xgpon_onu_key *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_key_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_onu_cfg_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_onu_cfg_data_set_default(bcmolt_xgpon_onu_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_onu_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_cfg_data_pack(const bcmolt_xgpon_onu_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_onu_cfg_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_cfg_data_get_packed_length(const bcmolt_xgpon_onu_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_onu_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_cfg_data_unpack(bcmolt_xgpon_onu_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_onu_cfg_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_onu_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_cfg_data_bounds_check(const bcmolt_xgpon_onu_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_onu_stat_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_onu_stat_data_set_default(bcmolt_xgpon_onu_stat_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_onu_stat_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_stat_data_pack(const bcmolt_xgpon_onu_stat_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_onu_stat_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_stat_data_get_packed_length(const bcmolt_xgpon_onu_stat_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_onu_stat_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_stat_data_unpack(bcmolt_xgpon_onu_stat_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_onu_stat_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_stat_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_onu_stat_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_stat_data_bounds_check(const bcmolt_xgpon_onu_stat_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_stat_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_onu_stat_cfg_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_onu_stat_cfg_data_set_default(bcmolt_xgpon_onu_stat_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_onu_stat_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_stat_cfg_data_pack(const bcmolt_xgpon_onu_stat_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_onu_stat_cfg_data would occupy 
+ * on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_stat_cfg_data_get_packed_length(const bcmolt_xgpon_onu_stat_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_onu_stat_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_stat_cfg_data_unpack(bcmolt_xgpon_onu_stat_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_onu_stat_cfg_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_stat_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_onu_stat_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_stat_cfg_data_bounds_check(const bcmolt_xgpon_onu_stat_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_stat_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_onu_dfi_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_onu_dfi_data_set_default(bcmolt_xgpon_onu_dfi_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_onu_dfi_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_dfi_data_pack(const bcmolt_xgpon_onu_dfi_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_onu_dfi_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_dfi_data_get_packed_length(const bcmolt_xgpon_onu_dfi_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_onu_dfi_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_dfi_data_unpack(bcmolt_xgpon_onu_dfi_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_onu_dfi_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_dfi_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_onu_dfi_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_dfi_data_bounds_check(const bcmolt_xgpon_onu_dfi_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_dfi_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_onu_dgi_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_onu_dgi_data_set_default(bcmolt_xgpon_onu_dgi_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_onu_dgi_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_dgi_data_pack(const bcmolt_xgpon_onu_dgi_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_onu_dgi_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_dgi_data_get_packed_length(const bcmolt_xgpon_onu_dgi_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_onu_dgi_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_dgi_data_unpack(bcmolt_xgpon_onu_dgi_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_onu_dgi_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_dgi_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_onu_dgi_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_dgi_data_bounds_check(const bcmolt_xgpon_onu_dgi_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_dgi_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_onu_dowi_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_onu_dowi_data_set_default(bcmolt_xgpon_onu_dowi_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_onu_dowi_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_dowi_data_pack(const bcmolt_xgpon_onu_dowi_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_onu_dowi_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_dowi_data_get_packed_length(const bcmolt_xgpon_onu_dowi_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_onu_dowi_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_dowi_data_unpack(bcmolt_xgpon_onu_dowi_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_onu_dowi_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_dowi_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_onu_dowi_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_dowi_data_bounds_check(const bcmolt_xgpon_onu_dowi_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_dowi_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_onu_invalid_dbru_report_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_onu_invalid_dbru_report_data_set_default(bcmolt_xgpon_onu_invalid_dbru_report_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_onu_invalid_dbru_report_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_invalid_dbru_report_data_pack(const bcmolt_xgpon_onu_invalid_dbru_report_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_onu_invalid_dbru_report_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_invalid_dbru_report_data_get_packed_length(const bcmolt_xgpon_onu_invalid_dbru_report_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_onu_invalid_dbru_report_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_invalid_dbru_report_data_unpack(bcmolt_xgpon_onu_invalid_dbru_report_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_onu_invalid_dbru_report_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_invalid_dbru_report_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_onu_invalid_dbru_report_data is out 
+ * of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_invalid_dbru_report_data_bounds_check(const bcmolt_xgpon_onu_invalid_dbru_report_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_invalid_dbru_report_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_onu_key_exchange_completed_data struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_onu_key_exchange_completed_data_set_default(bcmolt_xgpon_onu_key_exchange_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_onu_key_exchange_completed_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_key_exchange_completed_data_pack(const bcmolt_xgpon_onu_key_exchange_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_onu_key_exchange_completed_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_key_exchange_completed_data_get_packed_length(const bcmolt_xgpon_onu_key_exchange_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_onu_key_exchange_completed_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_key_exchange_completed_data_unpack(bcmolt_xgpon_onu_key_exchange_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_onu_key_exchange_completed_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_key_exchange_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_onu_key_exchange_completed_data is 
+ * out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_key_exchange_completed_data_bounds_check(const bcmolt_xgpon_onu_key_exchange_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_key_exchange_completed_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_onu_key_exchange_key_mismatch_data struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_onu_key_exchange_key_mismatch_data_set_default(bcmolt_xgpon_onu_key_exchange_key_mismatch_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_onu_key_exchange_key_mismatch_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_key_exchange_key_mismatch_data_pack(const bcmolt_xgpon_onu_key_exchange_key_mismatch_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_xgpon_onu_key_exchange_key_mismatch_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_key_exchange_key_mismatch_data_get_packed_length(const bcmolt_xgpon_onu_key_exchange_key_mismatch_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_onu_key_exchange_key_mismatch_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_key_exchange_key_mismatch_data_unpack(bcmolt_xgpon_onu_key_exchange_key_mismatch_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_onu_key_exchange_key_mismatch_data struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_key_exchange_key_mismatch_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_onu_key_exchange_key_mismatch_data 
+ * is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_key_exchange_key_mismatch_data_bounds_check(const bcmolt_xgpon_onu_key_exchange_key_mismatch_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_key_exchange_key_mismatch_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_onu_looci_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_onu_looci_data_set_default(bcmolt_xgpon_onu_looci_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_onu_looci_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_looci_data_pack(const bcmolt_xgpon_onu_looci_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_onu_looci_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_looci_data_get_packed_length(const bcmolt_xgpon_onu_looci_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_onu_looci_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_looci_data_unpack(bcmolt_xgpon_onu_looci_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_onu_looci_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_looci_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_onu_looci_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_looci_data_bounds_check(const bcmolt_xgpon_onu_looci_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_looci_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_onu_onu_activation_completed_data struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_onu_onu_activation_completed_data_set_default(bcmolt_xgpon_onu_onu_activation_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_onu_onu_activation_completed_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_activation_completed_data_pack(const bcmolt_xgpon_onu_onu_activation_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_xgpon_onu_onu_activation_completed_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_onu_activation_completed_data_get_packed_length(const bcmolt_xgpon_onu_onu_activation_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_onu_onu_activation_completed_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_activation_completed_data_unpack(bcmolt_xgpon_onu_onu_activation_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_onu_onu_activation_completed_data struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_activation_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_onu_onu_activation_completed_data is 
+ * out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_activation_completed_data_bounds_check(const bcmolt_xgpon_onu_onu_activation_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_onu_activation_completed_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_onu_onu_alarm_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_onu_onu_alarm_data_set_default(bcmolt_xgpon_onu_onu_alarm_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_onu_onu_alarm_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_alarm_data_pack(const bcmolt_xgpon_onu_onu_alarm_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_onu_onu_alarm_data would occupy 
+ * on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_onu_alarm_data_get_packed_length(const bcmolt_xgpon_onu_onu_alarm_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_onu_onu_alarm_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_alarm_data_unpack(bcmolt_xgpon_onu_onu_alarm_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_onu_onu_alarm_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_alarm_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_onu_onu_alarm_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_alarm_data_bounds_check(const bcmolt_xgpon_onu_onu_alarm_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_onu_alarm_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_onu_onu_deactivation_completed_data struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_onu_onu_deactivation_completed_data_set_default(bcmolt_xgpon_onu_onu_deactivation_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_onu_onu_deactivation_completed_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_deactivation_completed_data_pack(const bcmolt_xgpon_onu_onu_deactivation_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_xgpon_onu_onu_deactivation_completed_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_onu_deactivation_completed_data_get_packed_length(const bcmolt_xgpon_onu_onu_deactivation_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_onu_onu_deactivation_completed_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_deactivation_completed_data_unpack(bcmolt_xgpon_onu_onu_deactivation_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_onu_onu_deactivation_completed_data struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_deactivation_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_onu_onu_deactivation_completed_data 
+ * is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_deactivation_completed_data_bounds_check(const bcmolt_xgpon_onu_onu_deactivation_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_onu_deactivation_completed_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_onu_onu_disable_completed_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_onu_onu_disable_completed_data_set_default(bcmolt_xgpon_onu_onu_disable_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_onu_onu_disable_completed_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_disable_completed_data_pack(const bcmolt_xgpon_onu_onu_disable_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_onu_onu_disable_completed_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_onu_disable_completed_data_get_packed_length(const bcmolt_xgpon_onu_onu_disable_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_onu_onu_disable_completed_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_disable_completed_data_unpack(bcmolt_xgpon_onu_onu_disable_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_onu_onu_disable_completed_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_disable_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_onu_onu_disable_completed_data is 
+ * out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_disable_completed_data_bounds_check(const bcmolt_xgpon_onu_onu_disable_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_onu_disable_completed_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_onu_onu_enable_completed_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_onu_onu_enable_completed_data_set_default(bcmolt_xgpon_onu_onu_enable_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_onu_onu_enable_completed_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_enable_completed_data_pack(const bcmolt_xgpon_onu_onu_enable_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_onu_onu_enable_completed_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_onu_enable_completed_data_get_packed_length(const bcmolt_xgpon_onu_onu_enable_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_onu_onu_enable_completed_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_enable_completed_data_unpack(bcmolt_xgpon_onu_onu_enable_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_onu_onu_enable_completed_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_enable_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_onu_onu_enable_completed_data is out 
+ * of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_enable_completed_data_bounds_check(const bcmolt_xgpon_onu_onu_enable_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_onu_enable_completed_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_onu_onu_tuning_in_completed_data struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_onu_onu_tuning_in_completed_data_set_default(bcmolt_xgpon_onu_onu_tuning_in_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_onu_onu_tuning_in_completed_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_tuning_in_completed_data_pack(const bcmolt_xgpon_onu_onu_tuning_in_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_xgpon_onu_onu_tuning_in_completed_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_onu_tuning_in_completed_data_get_packed_length(const bcmolt_xgpon_onu_onu_tuning_in_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_onu_onu_tuning_in_completed_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_tuning_in_completed_data_unpack(bcmolt_xgpon_onu_onu_tuning_in_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_onu_onu_tuning_in_completed_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_tuning_in_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_onu_onu_tuning_in_completed_data is 
+ * out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_tuning_in_completed_data_bounds_check(const bcmolt_xgpon_onu_onu_tuning_in_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_onu_tuning_in_completed_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_onu_onu_tuning_out_completed_data struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_onu_onu_tuning_out_completed_data_set_default(bcmolt_xgpon_onu_onu_tuning_out_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_onu_onu_tuning_out_completed_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_tuning_out_completed_data_pack(const bcmolt_xgpon_onu_onu_tuning_out_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_xgpon_onu_onu_tuning_out_completed_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_onu_tuning_out_completed_data_get_packed_length(const bcmolt_xgpon_onu_onu_tuning_out_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_onu_onu_tuning_out_completed_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_tuning_out_completed_data_unpack(bcmolt_xgpon_onu_onu_tuning_out_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_onu_onu_tuning_out_completed_data struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_tuning_out_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_onu_onu_tuning_out_completed_data is 
+ * out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_tuning_out_completed_data_bounds_check(const bcmolt_xgpon_onu_onu_tuning_out_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_onu_tuning_out_completed_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_onu_possible_drift_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_onu_possible_drift_data_set_default(bcmolt_xgpon_onu_possible_drift_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_onu_possible_drift_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_possible_drift_data_pack(const bcmolt_xgpon_onu_possible_drift_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_onu_possible_drift_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_possible_drift_data_get_packed_length(const bcmolt_xgpon_onu_possible_drift_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_onu_possible_drift_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_possible_drift_data_unpack(bcmolt_xgpon_onu_possible_drift_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_onu_possible_drift_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_possible_drift_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_onu_possible_drift_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_possible_drift_data_bounds_check(const bcmolt_xgpon_onu_possible_drift_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_possible_drift_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_onu_power_consumption_report_data struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_onu_power_consumption_report_data_set_default(bcmolt_xgpon_onu_power_consumption_report_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_onu_power_consumption_report_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_power_consumption_report_data_pack(const bcmolt_xgpon_onu_power_consumption_report_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_xgpon_onu_power_consumption_report_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_power_consumption_report_data_get_packed_length(const bcmolt_xgpon_onu_power_consumption_report_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_onu_power_consumption_report_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_power_consumption_report_data_unpack(bcmolt_xgpon_onu_power_consumption_report_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_onu_power_consumption_report_data struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_power_consumption_report_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_onu_power_consumption_report_data is 
+ * out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_power_consumption_report_data_bounds_check(const bcmolt_xgpon_onu_power_consumption_report_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_power_consumption_report_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_onu_power_level_report_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_onu_power_level_report_data_set_default(bcmolt_xgpon_onu_power_level_report_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_onu_power_level_report_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_power_level_report_data_pack(const bcmolt_xgpon_onu_power_level_report_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_onu_power_level_report_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_power_level_report_data_get_packed_length(const bcmolt_xgpon_onu_power_level_report_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_onu_power_level_report_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_power_level_report_data_unpack(bcmolt_xgpon_onu_power_level_report_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_onu_power_level_report_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_power_level_report_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_onu_power_level_report_data is out 
+ * of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_power_level_report_data_bounds_check(const bcmolt_xgpon_onu_power_level_report_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_power_level_report_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_onu_power_management_state_change_data struct.  
+ * This sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_onu_power_management_state_change_data_set_default(bcmolt_xgpon_onu_power_management_state_change_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_onu_power_management_state_change_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_power_management_state_change_data_pack(const bcmolt_xgpon_onu_power_management_state_change_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_xgpon_onu_power_management_state_change_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_power_management_state_change_data_get_packed_length(const bcmolt_xgpon_onu_power_management_state_change_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_onu_power_management_state_change_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_power_management_state_change_data_unpack(bcmolt_xgpon_onu_power_management_state_change_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_onu_power_management_state_change_data 
+ * struct and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_power_management_state_change_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the 
+ * bcmolt_xgpon_onu_power_management_state_change_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_power_management_state_change_data_bounds_check(const bcmolt_xgpon_onu_power_management_state_change_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_power_management_state_change_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_onu_pqsi_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_onu_pqsi_data_set_default(bcmolt_xgpon_onu_pqsi_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_onu_pqsi_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_pqsi_data_pack(const bcmolt_xgpon_onu_pqsi_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_onu_pqsi_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_pqsi_data_get_packed_length(const bcmolt_xgpon_onu_pqsi_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_onu_pqsi_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_pqsi_data_unpack(bcmolt_xgpon_onu_pqsi_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_onu_pqsi_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_pqsi_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_onu_pqsi_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_pqsi_data_bounds_check(const bcmolt_xgpon_onu_pqsi_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_pqsi_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_onu_ranging_completed_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_onu_ranging_completed_data_set_default(bcmolt_xgpon_onu_ranging_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_onu_ranging_completed_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_ranging_completed_data_pack(const bcmolt_xgpon_onu_ranging_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_onu_ranging_completed_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_ranging_completed_data_get_packed_length(const bcmolt_xgpon_onu_ranging_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_onu_ranging_completed_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_ranging_completed_data_unpack(bcmolt_xgpon_onu_ranging_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_onu_ranging_completed_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_ranging_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_onu_ranging_completed_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_ranging_completed_data_bounds_check(const bcmolt_xgpon_onu_ranging_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_ranging_completed_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_onu_registration_id_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_onu_registration_id_data_set_default(bcmolt_xgpon_onu_registration_id_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_onu_registration_id_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_registration_id_data_pack(const bcmolt_xgpon_onu_registration_id_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_onu_registration_id_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_registration_id_data_get_packed_length(const bcmolt_xgpon_onu_registration_id_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_onu_registration_id_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_registration_id_data_unpack(bcmolt_xgpon_onu_registration_id_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_onu_registration_id_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_registration_id_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_onu_registration_id_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_registration_id_data_bounds_check(const bcmolt_xgpon_onu_registration_id_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_registration_id_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_onu_rssi_measurement_completed_data struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_onu_rssi_measurement_completed_data_set_default(bcmolt_xgpon_onu_rssi_measurement_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_onu_rssi_measurement_completed_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_rssi_measurement_completed_data_pack(const bcmolt_xgpon_onu_rssi_measurement_completed_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_xgpon_onu_rssi_measurement_completed_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_rssi_measurement_completed_data_get_packed_length(const bcmolt_xgpon_onu_rssi_measurement_completed_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_onu_rssi_measurement_completed_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_rssi_measurement_completed_data_unpack(bcmolt_xgpon_onu_rssi_measurement_completed_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_onu_rssi_measurement_completed_data struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_rssi_measurement_completed_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_onu_rssi_measurement_completed_data 
+ * is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_rssi_measurement_completed_data_bounds_check(const bcmolt_xgpon_onu_rssi_measurement_completed_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_rssi_measurement_completed_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_onu_sdi_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_onu_sdi_data_set_default(bcmolt_xgpon_onu_sdi_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_onu_sdi_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_sdi_data_pack(const bcmolt_xgpon_onu_sdi_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_onu_sdi_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_sdi_data_get_packed_length(const bcmolt_xgpon_onu_sdi_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_onu_sdi_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_sdi_data_unpack(bcmolt_xgpon_onu_sdi_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_onu_sdi_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_sdi_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_onu_sdi_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_sdi_data_bounds_check(const bcmolt_xgpon_onu_sdi_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_sdi_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_onu_secure_mutual_authentication_failure_data 
+ * struct.  This sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_onu_secure_mutual_authentication_failure_data_set_default(bcmolt_xgpon_onu_secure_mutual_authentication_failure_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_onu_secure_mutual_authentication_failure_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_secure_mutual_authentication_failure_data_pack(const bcmolt_xgpon_onu_secure_mutual_authentication_failure_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_xgpon_onu_secure_mutual_authentication_failure_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_secure_mutual_authentication_failure_data_get_packed_length(const bcmolt_xgpon_onu_secure_mutual_authentication_failure_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_onu_secure_mutual_authentication_failure_data from 
+ * bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_secure_mutual_authentication_failure_data_unpack(bcmolt_xgpon_onu_secure_mutual_authentication_failure_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed 
+ * bcmolt_xgpon_onu_secure_mutual_authentication_failure_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_secure_mutual_authentication_failure_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the 
+ * bcmolt_xgpon_onu_secure_mutual_authentication_failure_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_secure_mutual_authentication_failure_data_bounds_check(const bcmolt_xgpon_onu_secure_mutual_authentication_failure_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_secure_mutual_authentication_failure_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_onu_sfi_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_onu_sfi_data_set_default(bcmolt_xgpon_onu_sfi_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_onu_sfi_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_sfi_data_pack(const bcmolt_xgpon_onu_sfi_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_onu_sfi_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_sfi_data_get_packed_length(const bcmolt_xgpon_onu_sfi_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_onu_sfi_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_sfi_data_unpack(bcmolt_xgpon_onu_sfi_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_onu_sfi_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_sfi_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_onu_sfi_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_sfi_data_bounds_check(const bcmolt_xgpon_onu_sfi_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_sfi_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_onu_stat_alarm_cleared_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_onu_stat_alarm_cleared_data_set_default(bcmolt_xgpon_onu_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_onu_stat_alarm_cleared_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_stat_alarm_cleared_data_pack(const bcmolt_xgpon_onu_stat_alarm_cleared_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_onu_stat_alarm_cleared_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_stat_alarm_cleared_data_get_packed_length(const bcmolt_xgpon_onu_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_onu_stat_alarm_cleared_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_stat_alarm_cleared_data_unpack(bcmolt_xgpon_onu_stat_alarm_cleared_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_onu_stat_alarm_cleared_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_stat_alarm_cleared_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_onu_stat_alarm_cleared_data is out 
+ * of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_stat_alarm_cleared_data_bounds_check(const bcmolt_xgpon_onu_stat_alarm_cleared_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_stat_alarm_cleared_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_onu_stat_alarm_raised_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_onu_stat_alarm_raised_data_set_default(bcmolt_xgpon_onu_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_onu_stat_alarm_raised_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_stat_alarm_raised_data_pack(const bcmolt_xgpon_onu_stat_alarm_raised_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_onu_stat_alarm_raised_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_stat_alarm_raised_data_get_packed_length(const bcmolt_xgpon_onu_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_onu_stat_alarm_raised_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_stat_alarm_raised_data_unpack(bcmolt_xgpon_onu_stat_alarm_raised_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_onu_stat_alarm_raised_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_stat_alarm_raised_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_onu_stat_alarm_raised_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_stat_alarm_raised_data_bounds_check(const bcmolt_xgpon_onu_stat_alarm_raised_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_stat_alarm_raised_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_onu_sufi_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_onu_sufi_data_set_default(bcmolt_xgpon_onu_sufi_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_onu_sufi_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_sufi_data_pack(const bcmolt_xgpon_onu_sufi_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_onu_sufi_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_sufi_data_get_packed_length(const bcmolt_xgpon_onu_sufi_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_onu_sufi_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_sufi_data_unpack(bcmolt_xgpon_onu_sufi_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_onu_sufi_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_sufi_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_onu_sufi_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_sufi_data_bounds_check(const bcmolt_xgpon_onu_sufi_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_sufi_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_onu_tiwi_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_onu_tiwi_data_set_default(bcmolt_xgpon_onu_tiwi_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_onu_tiwi_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_tiwi_data_pack(const bcmolt_xgpon_onu_tiwi_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_onu_tiwi_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_tiwi_data_get_packed_length(const bcmolt_xgpon_onu_tiwi_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_onu_tiwi_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_tiwi_data_unpack(bcmolt_xgpon_onu_tiwi_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_onu_tiwi_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_tiwi_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_onu_tiwi_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_tiwi_data_bounds_check(const bcmolt_xgpon_onu_tiwi_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_tiwi_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_onu_tuning_response_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_onu_tuning_response_data_set_default(bcmolt_xgpon_onu_tuning_response_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_onu_tuning_response_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_tuning_response_data_pack(const bcmolt_xgpon_onu_tuning_response_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_onu_tuning_response_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_tuning_response_data_get_packed_length(const bcmolt_xgpon_onu_tuning_response_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_onu_tuning_response_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_tuning_response_data_unpack(bcmolt_xgpon_onu_tuning_response_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_onu_tuning_response_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_tuning_response_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_onu_tuning_response_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_tuning_response_data_bounds_check(const bcmolt_xgpon_onu_tuning_response_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_tuning_response_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_onu_auto_cfg_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_onu_auto_cfg_data_set_default(bcmolt_xgpon_onu_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_onu_auto_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_auto_cfg_data_pack(const bcmolt_xgpon_onu_auto_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_onu_auto_cfg_data would occupy 
+ * on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_auto_cfg_data_get_packed_length(const bcmolt_xgpon_onu_auto_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_onu_auto_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_auto_cfg_data_unpack(bcmolt_xgpon_onu_auto_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_onu_auto_cfg_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_auto_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_onu_auto_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_auto_cfg_data_bounds_check(const bcmolt_xgpon_onu_auto_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_auto_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_onu_adjust_tx_wavelength_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_onu_adjust_tx_wavelength_data_set_default(bcmolt_xgpon_onu_adjust_tx_wavelength_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_onu_adjust_tx_wavelength_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_adjust_tx_wavelength_data_pack(const bcmolt_xgpon_onu_adjust_tx_wavelength_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_onu_adjust_tx_wavelength_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_adjust_tx_wavelength_data_get_packed_length(const bcmolt_xgpon_onu_adjust_tx_wavelength_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_onu_adjust_tx_wavelength_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_adjust_tx_wavelength_data_unpack(bcmolt_xgpon_onu_adjust_tx_wavelength_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_onu_adjust_tx_wavelength_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_adjust_tx_wavelength_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_onu_adjust_tx_wavelength_data is out 
+ * of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_adjust_tx_wavelength_data_bounds_check(const bcmolt_xgpon_onu_adjust_tx_wavelength_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_adjust_tx_wavelength_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_onu_change_power_levelling_data struct.  This 
+ * sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_onu_change_power_levelling_data_set_default(bcmolt_xgpon_onu_change_power_levelling_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_onu_change_power_levelling_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_change_power_levelling_data_pack(const bcmolt_xgpon_onu_change_power_levelling_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_onu_change_power_levelling_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_change_power_levelling_data_get_packed_length(const bcmolt_xgpon_onu_change_power_levelling_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_onu_change_power_levelling_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_change_power_levelling_data_unpack(bcmolt_xgpon_onu_change_power_levelling_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_onu_change_power_levelling_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_change_power_levelling_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_onu_change_power_levelling_data is 
+ * out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_change_power_levelling_data_bounds_check(const bcmolt_xgpon_onu_change_power_levelling_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_change_power_levelling_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_onu_onu_tuning_out_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_onu_onu_tuning_out_data_set_default(bcmolt_xgpon_onu_onu_tuning_out_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_onu_onu_tuning_out_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_tuning_out_data_pack(const bcmolt_xgpon_onu_onu_tuning_out_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_onu_onu_tuning_out_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_onu_tuning_out_data_get_packed_length(const bcmolt_xgpon_onu_onu_tuning_out_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_onu_onu_tuning_out_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_tuning_out_data_unpack(bcmolt_xgpon_onu_onu_tuning_out_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_onu_onu_tuning_out_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_tuning_out_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_onu_onu_tuning_out_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_onu_tuning_out_data_bounds_check(const bcmolt_xgpon_onu_onu_tuning_out_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_onu_tuning_out_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_onu_request_registration_data struct.  This sets 
+ * all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_onu_request_registration_data_set_default(bcmolt_xgpon_onu_request_registration_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_onu_request_registration_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_request_registration_data_pack(const bcmolt_xgpon_onu_request_registration_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_onu_request_registration_data 
+ * would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_request_registration_data_get_packed_length(const bcmolt_xgpon_onu_request_registration_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_onu_request_registration_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_request_registration_data_unpack(bcmolt_xgpon_onu_request_registration_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_onu_request_registration_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_request_registration_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_onu_request_registration_data is out 
+ * of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_request_registration_data_bounds_check(const bcmolt_xgpon_onu_request_registration_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_request_registration_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_onu_secure_mutual_authentication_data struct.  
+ * This sets all fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_onu_secure_mutual_authentication_data_set_default(bcmolt_xgpon_onu_secure_mutual_authentication_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_onu_secure_mutual_authentication_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_secure_mutual_authentication_data_pack(const bcmolt_xgpon_onu_secure_mutual_authentication_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a 
+ * bcmolt_xgpon_onu_secure_mutual_authentication_data would occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_secure_mutual_authentication_data_get_packed_length(const bcmolt_xgpon_onu_secure_mutual_authentication_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_onu_secure_mutual_authentication_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_secure_mutual_authentication_data_unpack(bcmolt_xgpon_onu_secure_mutual_authentication_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_onu_secure_mutual_authentication_data 
+ * struct and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_secure_mutual_authentication_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the 
+ * bcmolt_xgpon_onu_secure_mutual_authentication_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_secure_mutual_authentication_data_bounds_check(const bcmolt_xgpon_onu_secure_mutual_authentication_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_secure_mutual_authentication_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_onu_set_onu_state_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_onu_set_onu_state_data_set_default(bcmolt_xgpon_onu_set_onu_state_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_onu_set_onu_state_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_set_onu_state_data_pack(const bcmolt_xgpon_onu_set_onu_state_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_onu_set_onu_state_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_set_onu_state_data_get_packed_length(const bcmolt_xgpon_onu_set_onu_state_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_onu_set_onu_state_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_set_onu_state_data_unpack(bcmolt_xgpon_onu_set_onu_state_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_onu_set_onu_state_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_set_onu_state_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_onu_set_onu_state_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_set_onu_state_data_bounds_check(const bcmolt_xgpon_onu_set_onu_state_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_set_onu_state_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_onu_cpu_packets_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_onu_cpu_packets_data_set_default(bcmolt_xgpon_onu_cpu_packets_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_onu_cpu_packets_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_cpu_packets_data_pack(const bcmolt_xgpon_onu_cpu_packets_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_onu_cpu_packets_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_cpu_packets_data_get_packed_length(const bcmolt_xgpon_onu_cpu_packets_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_onu_cpu_packets_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_cpu_packets_data_unpack(bcmolt_xgpon_onu_cpu_packets_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_onu_cpu_packets_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_cpu_packets_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_onu_cpu_packets_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_cpu_packets_data_bounds_check(const bcmolt_xgpon_onu_cpu_packets_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_cpu_packets_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_onu_ploam_packet_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_onu_ploam_packet_data_set_default(bcmolt_xgpon_onu_ploam_packet_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_onu_ploam_packet_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_ploam_packet_data_pack(const bcmolt_xgpon_onu_ploam_packet_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_onu_ploam_packet_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_ploam_packet_data_get_packed_length(const bcmolt_xgpon_onu_ploam_packet_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_onu_ploam_packet_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_ploam_packet_data_unpack(bcmolt_xgpon_onu_ploam_packet_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_onu_ploam_packet_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_ploam_packet_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_onu_ploam_packet_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_ploam_packet_data_bounds_check(const bcmolt_xgpon_onu_ploam_packet_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_ploam_packet_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_onu_cpu_packet_data struct.  This sets all fields 
+ * to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_onu_cpu_packet_data_set_default(bcmolt_xgpon_onu_cpu_packet_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_onu_cpu_packet_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_cpu_packet_data_pack(const bcmolt_xgpon_onu_cpu_packet_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_onu_cpu_packet_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_cpu_packet_data_get_packed_length(const bcmolt_xgpon_onu_cpu_packet_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_onu_cpu_packet_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_cpu_packet_data_unpack(bcmolt_xgpon_onu_cpu_packet_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_onu_cpu_packet_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_cpu_packet_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_onu_cpu_packet_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_cpu_packet_data_bounds_check(const bcmolt_xgpon_onu_cpu_packet_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_cpu_packet_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_onu_omci_packet_data struct.  This sets all 
+ * fields to default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_onu_omci_packet_data_set_default(bcmolt_xgpon_onu_omci_packet_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_onu_omci_packet_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_omci_packet_data_pack(const bcmolt_xgpon_onu_omci_packet_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_onu_omci_packet_data would 
+ * occupy on the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_onu_omci_packet_data_get_packed_length(const bcmolt_xgpon_onu_omci_packet_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_onu_omci_packet_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_omci_packet_data_unpack(bcmolt_xgpon_onu_omci_packet_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_onu_omci_packet_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_onu_omci_packet_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_onu_omci_packet_data is out of 
+ * bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_onu_omci_packet_data_bounds_check(const bcmolt_xgpon_onu_omci_packet_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_onu_omci_packet_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_trx_key struct.  This sets all fields to default 
+ * values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_trx_key_set_default(bcmolt_xgpon_trx_key *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_trx_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_trx_key_pack(const bcmolt_xgpon_trx_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_trx_key would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_trx_key_get_packed_length(const bcmolt_xgpon_trx_key *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_trx_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_trx_key_unpack(bcmolt_xgpon_trx_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_trx_key struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_trx_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_trx_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_trx_key_bounds_check(const bcmolt_xgpon_trx_key *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_trx_key_id *failed_prop);
+
+/** Initializes a bcmolt_xgpon_trx_cfg_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xgpon_trx_cfg_data_set_default(bcmolt_xgpon_trx_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xgpon_trx_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_trx_cfg_data_pack(const bcmolt_xgpon_trx_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xgpon_trx_cfg_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xgpon_trx_cfg_data_get_packed_length(const bcmolt_xgpon_trx_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xgpon_trx_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_trx_cfg_data_unpack(bcmolt_xgpon_trx_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xgpon_trx_cfg_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xgpon_trx_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xgpon_trx_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xgpon_trx_cfg_data_bounds_check(const bcmolt_xgpon_trx_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_xgpon_trx_cfg_id *failed_prop);
+
+/** Initializes a bcmolt_xpon_serdes_key struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xpon_serdes_key_set_default(bcmolt_xpon_serdes_key *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xpon_serdes_key to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xpon_serdes_key_pack(const bcmolt_xpon_serdes_key *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xpon_serdes_key would occupy on the 
+ * wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xpon_serdes_key_get_packed_length(const bcmolt_xpon_serdes_key *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xpon_serdes_key from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xpon_serdes_key_unpack(bcmolt_xpon_serdes_key *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xpon_serdes_key struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xpon_serdes_key_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xpon_serdes_key is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xpon_serdes_key_bounds_check(const bcmolt_xpon_serdes_key *this, bcmolt_presence_mask fields_present, bcmolt_xpon_serdes_key_id *failed_prop);
+
+/** Initializes a bcmolt_xpon_serdes_cfg_data struct.  This sets all fields to 
+ * default values. 
+ *
+ * \param this Pointer to the structure 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ */
+void bcmolt_xpon_serdes_cfg_data_set_default(bcmolt_xpon_serdes_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Packs a bcmolt_xpon_serdes_cfg_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xpon_serdes_cfg_data_pack(const bcmolt_xpon_serdes_cfg_data *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmolt_xpon_serdes_cfg_data would occupy on 
+ * the wire 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_xpon_serdes_cfg_data_get_packed_length(const bcmolt_xpon_serdes_cfg_data *this, bcmolt_presence_mask fields_present);
+
+/** Unpacks a bcmolt_xpon_serdes_cfg_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xpon_serdes_cfg_data_unpack(bcmolt_xpon_serdes_cfg_data *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+
+/** Scans past a packed bcmolt_xpon_serdes_cfg_data struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_xpon_serdes_cfg_data_scan(bcmolt_buf *packed, uint32_t *extra_mem, bcmolt_presence_mask fields_present);
+
+/** Checks if any field in the bcmolt_xpon_serdes_cfg_data is out of bounds 
+ *
+ * \param fields_present Bitmask of which fields are present in the structure. 
+ * \param failed_prop Reference to the property that was out of range (only set 
+ * on failure) 
+ * \return TRUE if all fields are in the correct range, FALSE otherwise 
+ */
+bcmos_bool bcmolt_xpon_serdes_cfg_data_bounds_check(const bcmolt_xpon_serdes_cfg_data *this, bcmolt_presence_mask fields_present, bcmolt_xpon_serdes_cfg_id *failed_prop);
+
+/* Maple device selected as a target for CLI commands */
+extern bcmolt_devid current_device;
+
+/** Set system mode
+ * \param[in]  dev            Device id
+ * \param[in]  system_mode    System mode
+ * \returns BCM_ERR_OK, BCM_ERR_NOT_SUPPORTED
+ */
+bcmos_errno bcmolt_system_mode_set(bcmolt_devid dev, bcmolt_system_mode system_mode);
+
+/** Get system mode
+ * \param[in]  dev            Device id
+ * \param[in]  system_mode    System mode
+ * \returns BCM_ERR_OK
+ */
+bcmos_errno bcmolt_system_mode_get(bcmolt_devid dev, bcmolt_system_mode *system_mode);
+
+/** Checks if objects with the given tag are valid in the given system mode. */
+bcmos_bool bcmolt_obj_tag_valid_for_system_mode(bcmolt_system_mode system_mode, bcmolt_obj_tag tag);
+
+/** Checks if the given object is supported in the given system mode.
+ * \param[in] system_mode System mode
+ * \param[in] obj         Object ID
+ * \return true if the object is supported in the given system mode, false otherwise.
+ */
+bcmos_bool bcmolt_object_is_supported(bcmolt_system_mode system_mode, bcmolt_obj_id obj);
+
+/** Gets the name of the given system mode as a string. */
+const char *bcmolt_system_mode_name(bcmolt_system_mode mode);
+
+/** Set xgpon num of onus
+ * \param[in]  dev            Device id
+ * \param[in]  xgpon_num_of_onus    XGPON num of onus
+ * \returns BCM_ERR_OK, BCM_ERR_NOT_SUPPORTED
+ */
+bcmos_errno bcmolt_xgpon_num_of_onus_set(bcmolt_devid dev, bcmolt_xgpon_num_of_onus xgpon_num_of_onus);
+
+/** Get xgpon num of onus
+ * \param[in]  dev            Device id
+ * \param[in]  xgpon_num_of_onus    XGPON num of onus
+ * \returns BCM_ERR_OK
+ */
+bcmos_errno bcmolt_xgpon_num_of_onus_get(bcmolt_devid dev, bcmolt_xgpon_num_of_onus *xgpon_num_of_onus);
+#endif /* BCMOLT_MODEL_TYPES_H_ */
diff --git a/bcm68620_release/release/host_driver/model/bcmolt_msg_pack.c b/bcm68620_release/release/host_driver/model/bcmolt_msg_pack.c
new file mode 100644
index 0000000..b417f95
--- /dev/null
+++ b/bcm68620_release/release/host_driver/model/bcmolt_msg_pack.c
@@ -0,0 +1,2145 @@
+/*
+<:copyright-BRCM:2016:proprietary:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+This program is the proprietary software of Broadcom Corporation and/or its
+licensors, and may only be used, duplicated, modified or distributed pursuant
+to the terms and conditions of a separate, written license agreement executed
+between you and Broadcom (an "Authorized License").  Except as set forth in
+an Authorized License, Broadcom grants no license (express or implied), right
+to use, or waiver of any kind with respect to the Software, and Broadcom
+expressly reserves all rights in and to the Software and all intellectual
+property rights therein.  IF YOU HAVE NO AUTHORIZED LICENSE, THEN YOU HAVE
+NO RIGHT TO USE THIS SOFTWARE IN ANY WAY, AND SHOULD IMMEDIATELY NOTIFY
+BROADCOM AND DISCONTINUE ALL USE OF THE SOFTWARE.
+
+Except as expressly set forth in the Authorized License,
+
+1. This program, including its structure, sequence and organization,
+    constitutes the valuable trade secrets of Broadcom, and you shall use
+    all reasonable efforts to protect the confidentiality thereof, and to
+    use this information only in connection with your use of Broadcom
+    integrated circuit products.
+
+2. TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
+    AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES, REPRESENTATIONS OR
+    WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH
+    RESPECT TO THE SOFTWARE.  BROADCOM SPECIFICALLY DISCLAIMS ANY AND
+    ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY, NONINFRINGEMENT,
+    FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES, ACCURACY OR
+    COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR CORRESPONDENCE
+    TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING OUT OF USE OR
+    PERFORMANCE OF THE SOFTWARE.
+
+3. TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM OR
+    ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL, INCIDENTAL, SPECIAL,
+    INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER ARISING OUT OF OR IN ANY
+    WAY RELATING TO YOUR USE OF OR INABILITY TO USE THE SOFTWARE EVEN
+    IF BROADCOM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES;
+    OR (ii) ANY AMOUNT IN EXCESS OF THE AMOUNT ACTUALLY PAID FOR THE
+    SOFTWARE ITSELF OR U.S. $1, WHICHEVER IS GREATER. THESE LIMITATIONS
+    SHALL APPLY NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY
+    LIMITED REMEDY.
+:>
+*/
+#include <bcmolt_buf.h>
+#include <bcmolt_msg.h>
+#include "bcmolt_msg_pack.h"
+
+typedef uint32_t (*bcmolt_func_packed_len) (void *this, bcmolt_presence_mask fields_present);
+typedef bcmos_bool (*bcmolt_func_pack) (void *this, bcmolt_buf *buf, bcmolt_presence_mask fields_present);
+typedef bcmos_bool (*bcmolt_func_unpack) (void *this, bcmolt_buf *buf, void **extra_mem, bcmolt_presence_mask fields_present);
+typedef bcmos_bool (*bcmolt_func_mem_scan) (bcmolt_buf * buf, uint32_t * extra_mem, bcmolt_presence_mask fields_present);
+
+/******************************************************************************/
+typedef struct bcmolt_group_info
+{
+    bcmolt_obj_id obj_type;
+    bcmolt_mgt_group group;
+    uint16_t subgroup;
+    uint32_t size;
+    uint32_t container_size;    /* sizeof() the key/data container struct (0 for key groups) */
+    uint32_t data_offset;       /* offsetof() data field within container struct (0 for key groups) */
+    bcmolt_func_packed_len get_packed_length;
+    bcmolt_func_pack pack;
+    bcmolt_func_unpack unpack;
+    bcmolt_func_mem_scan mem_scan;
+} bcmolt_group_info;
+
+/******************************************************************************/
+typedef struct bcmolt_group_ids
+{
+    uint32_t subgroup_count;
+    bcmolt_group_id *subgroup_ids;
+} bcmolt_group_ids;
+
+/******************************************************************************/
+typedef struct bcmolt_instance_info
+{
+    int8_t offset;
+    int8_t size;
+} bcmolt_instance_info;
+
+/******************************************************************************/
+static bcmolt_group_info group_info_ae_ni_key = { BCMOLT_OBJ_ID_AE_NI, BCMOLT_MGT_GROUP_KEY, 0, sizeof(bcmolt_ae_ni_key), 0, 0, (bcmolt_func_packed_len) bcmolt_ae_ni_key_get_packed_length, (bcmolt_func_pack) bcmolt_ae_ni_key_pack, (bcmolt_func_unpack) bcmolt_ae_ni_key_unpack, bcmolt_ae_ni_key_scan };
+static bcmolt_group_info group_info_ae_ni_cfg = { BCMOLT_OBJ_ID_AE_NI, BCMOLT_MGT_GROUP_CFG, 0, sizeof(bcmolt_ae_ni_cfg_data), sizeof(bcmolt_ae_ni_cfg), offsetof(bcmolt_ae_ni_cfg, data), (bcmolt_func_packed_len) bcmolt_ae_ni_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_ae_ni_cfg_data_pack, (bcmolt_func_unpack) bcmolt_ae_ni_cfg_data_unpack, bcmolt_ae_ni_cfg_data_scan };
+static bcmolt_group_info group_info_ae_ni_set_ae_ni_en_state = { BCMOLT_OBJ_ID_AE_NI, BCMOLT_MGT_GROUP_OPER, 0, sizeof(bcmolt_ae_ni_set_ae_ni_en_state_data), sizeof(bcmolt_ae_ni_set_ae_ni_en_state), offsetof(bcmolt_ae_ni_set_ae_ni_en_state, data), (bcmolt_func_packed_len) bcmolt_ae_ni_set_ae_ni_en_state_data_get_packed_length, (bcmolt_func_pack) bcmolt_ae_ni_set_ae_ni_en_state_data_pack, (bcmolt_func_unpack) bcmolt_ae_ni_set_ae_ni_en_state_data_unpack, bcmolt_ae_ni_set_ae_ni_en_state_data_scan };
+static bcmolt_group_info group_info_ae_path_ds_key = { BCMOLT_OBJ_ID_AE_PATH_DS, BCMOLT_MGT_GROUP_KEY, 0, sizeof(bcmolt_ae_path_ds_key), 0, 0, (bcmolt_func_packed_len) bcmolt_ae_path_ds_key_get_packed_length, (bcmolt_func_pack) bcmolt_ae_path_ds_key_pack, (bcmolt_func_unpack) bcmolt_ae_path_ds_key_unpack, bcmolt_ae_path_ds_key_scan };
+static bcmolt_group_info group_info_ae_path_ds_stat = { BCMOLT_OBJ_ID_AE_PATH_DS, BCMOLT_MGT_GROUP_STAT, 0, sizeof(bcmolt_ae_path_ds_stat_data), sizeof(bcmolt_ae_path_ds_stat), offsetof(bcmolt_ae_path_ds_stat, data), (bcmolt_func_packed_len) bcmolt_ae_path_ds_stat_data_get_packed_length, (bcmolt_func_pack) bcmolt_ae_path_ds_stat_data_pack, (bcmolt_func_unpack) bcmolt_ae_path_ds_stat_data_unpack, bcmolt_ae_path_ds_stat_data_scan };
+static bcmolt_group_info group_info_ae_path_ds_stat_cfg = { BCMOLT_OBJ_ID_AE_PATH_DS, BCMOLT_MGT_GROUP_STAT_CFG, 0, sizeof(bcmolt_ae_path_ds_stat_cfg_data), sizeof(bcmolt_ae_path_ds_stat_cfg), offsetof(bcmolt_ae_path_ds_stat_cfg, data), (bcmolt_func_packed_len) bcmolt_ae_path_ds_stat_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_ae_path_ds_stat_cfg_data_pack, (bcmolt_func_unpack) bcmolt_ae_path_ds_stat_cfg_data_unpack, bcmolt_ae_path_ds_stat_cfg_data_scan };
+static bcmolt_group_info group_info_ae_path_ds_stat_alarm_cleared = { BCMOLT_OBJ_ID_AE_PATH_DS, BCMOLT_MGT_GROUP_AUTO, 0, sizeof(bcmolt_ae_path_ds_stat_alarm_cleared_data), sizeof(bcmolt_ae_path_ds_stat_alarm_cleared), offsetof(bcmolt_ae_path_ds_stat_alarm_cleared, data), (bcmolt_func_packed_len) bcmolt_ae_path_ds_stat_alarm_cleared_data_get_packed_length, (bcmolt_func_pack) bcmolt_ae_path_ds_stat_alarm_cleared_data_pack, (bcmolt_func_unpack) bcmolt_ae_path_ds_stat_alarm_cleared_data_unpack, bcmolt_ae_path_ds_stat_alarm_cleared_data_scan };
+static bcmolt_group_info group_info_ae_path_ds_stat_alarm_raised = { BCMOLT_OBJ_ID_AE_PATH_DS, BCMOLT_MGT_GROUP_AUTO, 1, sizeof(bcmolt_ae_path_ds_stat_alarm_raised_data), sizeof(bcmolt_ae_path_ds_stat_alarm_raised), offsetof(bcmolt_ae_path_ds_stat_alarm_raised, data), (bcmolt_func_packed_len) bcmolt_ae_path_ds_stat_alarm_raised_data_get_packed_length, (bcmolt_func_pack) bcmolt_ae_path_ds_stat_alarm_raised_data_pack, (bcmolt_func_unpack) bcmolt_ae_path_ds_stat_alarm_raised_data_unpack, bcmolt_ae_path_ds_stat_alarm_raised_data_scan };
+static bcmolt_group_info group_info_ae_path_ds_auto_cfg = { BCMOLT_OBJ_ID_AE_PATH_DS, BCMOLT_MGT_GROUP_AUTO_CFG, 0, sizeof(bcmolt_ae_path_ds_auto_cfg_data), sizeof(bcmolt_ae_path_ds_auto_cfg), offsetof(bcmolt_ae_path_ds_auto_cfg, data), (bcmolt_func_packed_len) bcmolt_ae_path_ds_auto_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_ae_path_ds_auto_cfg_data_pack, (bcmolt_func_unpack) bcmolt_ae_path_ds_auto_cfg_data_unpack, bcmolt_ae_path_ds_auto_cfg_data_scan };
+static bcmolt_group_info group_info_ae_path_us_key = { BCMOLT_OBJ_ID_AE_PATH_US, BCMOLT_MGT_GROUP_KEY, 0, sizeof(bcmolt_ae_path_us_key), 0, 0, (bcmolt_func_packed_len) bcmolt_ae_path_us_key_get_packed_length, (bcmolt_func_pack) bcmolt_ae_path_us_key_pack, (bcmolt_func_unpack) bcmolt_ae_path_us_key_unpack, bcmolt_ae_path_us_key_scan };
+static bcmolt_group_info group_info_ae_path_us_stat = { BCMOLT_OBJ_ID_AE_PATH_US, BCMOLT_MGT_GROUP_STAT, 0, sizeof(bcmolt_ae_path_us_stat_data), sizeof(bcmolt_ae_path_us_stat), offsetof(bcmolt_ae_path_us_stat, data), (bcmolt_func_packed_len) bcmolt_ae_path_us_stat_data_get_packed_length, (bcmolt_func_pack) bcmolt_ae_path_us_stat_data_pack, (bcmolt_func_unpack) bcmolt_ae_path_us_stat_data_unpack, bcmolt_ae_path_us_stat_data_scan };
+static bcmolt_group_info group_info_ae_path_us_stat_cfg = { BCMOLT_OBJ_ID_AE_PATH_US, BCMOLT_MGT_GROUP_STAT_CFG, 0, sizeof(bcmolt_ae_path_us_stat_cfg_data), sizeof(bcmolt_ae_path_us_stat_cfg), offsetof(bcmolt_ae_path_us_stat_cfg, data), (bcmolt_func_packed_len) bcmolt_ae_path_us_stat_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_ae_path_us_stat_cfg_data_pack, (bcmolt_func_unpack) bcmolt_ae_path_us_stat_cfg_data_unpack, bcmolt_ae_path_us_stat_cfg_data_scan };
+static bcmolt_group_info group_info_ae_path_us_stat_alarm_cleared = { BCMOLT_OBJ_ID_AE_PATH_US, BCMOLT_MGT_GROUP_AUTO, 0, sizeof(bcmolt_ae_path_us_stat_alarm_cleared_data), sizeof(bcmolt_ae_path_us_stat_alarm_cleared), offsetof(bcmolt_ae_path_us_stat_alarm_cleared, data), (bcmolt_func_packed_len) bcmolt_ae_path_us_stat_alarm_cleared_data_get_packed_length, (bcmolt_func_pack) bcmolt_ae_path_us_stat_alarm_cleared_data_pack, (bcmolt_func_unpack) bcmolt_ae_path_us_stat_alarm_cleared_data_unpack, bcmolt_ae_path_us_stat_alarm_cleared_data_scan };
+static bcmolt_group_info group_info_ae_path_us_stat_alarm_raised = { BCMOLT_OBJ_ID_AE_PATH_US, BCMOLT_MGT_GROUP_AUTO, 1, sizeof(bcmolt_ae_path_us_stat_alarm_raised_data), sizeof(bcmolt_ae_path_us_stat_alarm_raised), offsetof(bcmolt_ae_path_us_stat_alarm_raised, data), (bcmolt_func_packed_len) bcmolt_ae_path_us_stat_alarm_raised_data_get_packed_length, (bcmolt_func_pack) bcmolt_ae_path_us_stat_alarm_raised_data_pack, (bcmolt_func_unpack) bcmolt_ae_path_us_stat_alarm_raised_data_unpack, bcmolt_ae_path_us_stat_alarm_raised_data_scan };
+static bcmolt_group_info group_info_ae_path_us_auto_cfg = { BCMOLT_OBJ_ID_AE_PATH_US, BCMOLT_MGT_GROUP_AUTO_CFG, 0, sizeof(bcmolt_ae_path_us_auto_cfg_data), sizeof(bcmolt_ae_path_us_auto_cfg), offsetof(bcmolt_ae_path_us_auto_cfg, data), (bcmolt_func_packed_len) bcmolt_ae_path_us_auto_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_ae_path_us_auto_cfg_data_pack, (bcmolt_func_unpack) bcmolt_ae_path_us_auto_cfg_data_unpack, bcmolt_ae_path_us_auto_cfg_data_scan };
+static bcmolt_group_info group_info_channel_key = { BCMOLT_OBJ_ID_CHANNEL, BCMOLT_MGT_GROUP_KEY, 0, sizeof(bcmolt_channel_key), 0, 0, (bcmolt_func_packed_len) bcmolt_channel_key_get_packed_length, (bcmolt_func_pack) bcmolt_channel_key_pack, (bcmolt_func_unpack) bcmolt_channel_key_unpack, bcmolt_channel_key_scan };
+static bcmolt_group_info group_info_channel_cfg = { BCMOLT_OBJ_ID_CHANNEL, BCMOLT_MGT_GROUP_CFG, 0, sizeof(bcmolt_channel_cfg_data), sizeof(bcmolt_channel_cfg), offsetof(bcmolt_channel_cfg, data), (bcmolt_func_packed_len) bcmolt_channel_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_channel_cfg_data_pack, (bcmolt_func_unpack) bcmolt_channel_cfg_data_unpack, bcmolt_channel_cfg_data_scan };
+static bcmolt_group_info group_info_debug_key = { BCMOLT_OBJ_ID_DEBUG, BCMOLT_MGT_GROUP_KEY, 0, sizeof(bcmolt_debug_key), 0, 0, (bcmolt_func_packed_len) bcmolt_debug_key_get_packed_length, (bcmolt_func_pack) bcmolt_debug_key_pack, (bcmolt_func_unpack) bcmolt_debug_key_unpack, bcmolt_debug_key_scan };
+static bcmolt_group_info group_info_debug_cfg = { BCMOLT_OBJ_ID_DEBUG, BCMOLT_MGT_GROUP_CFG, 0, sizeof(bcmolt_debug_cfg_data), sizeof(bcmolt_debug_cfg), offsetof(bcmolt_debug_cfg, data), (bcmolt_func_packed_len) bcmolt_debug_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_debug_cfg_data_pack, (bcmolt_func_unpack) bcmolt_debug_cfg_data_unpack, bcmolt_debug_cfg_data_scan };
+static bcmolt_group_info group_info_debug_cli_output = { BCMOLT_OBJ_ID_DEBUG, BCMOLT_MGT_GROUP_AUTO, 0, sizeof(bcmolt_debug_cli_output_data), sizeof(bcmolt_debug_cli_output), offsetof(bcmolt_debug_cli_output, data), (bcmolt_func_packed_len) bcmolt_debug_cli_output_data_get_packed_length, (bcmolt_func_pack) bcmolt_debug_cli_output_data_pack, (bcmolt_func_unpack) bcmolt_debug_cli_output_data_unpack, bcmolt_debug_cli_output_data_scan };
+static bcmolt_group_info group_info_debug_file_almost_full = { BCMOLT_OBJ_ID_DEBUG, BCMOLT_MGT_GROUP_AUTO, 1, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_debug_auto_cfg = { BCMOLT_OBJ_ID_DEBUG, BCMOLT_MGT_GROUP_AUTO_CFG, 0, sizeof(bcmolt_debug_auto_cfg_data), sizeof(bcmolt_debug_auto_cfg), offsetof(bcmolt_debug_auto_cfg, data), (bcmolt_func_packed_len) bcmolt_debug_auto_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_debug_auto_cfg_data_pack, (bcmolt_func_unpack) bcmolt_debug_auto_cfg_data_unpack, bcmolt_debug_auto_cfg_data_scan };
+static bcmolt_group_info group_info_debug_cli_input = { BCMOLT_OBJ_ID_DEBUG, BCMOLT_MGT_GROUP_OPER, 0, sizeof(bcmolt_debug_cli_input_data), sizeof(bcmolt_debug_cli_input), offsetof(bcmolt_debug_cli_input, data), (bcmolt_func_packed_len) bcmolt_debug_cli_input_data_get_packed_length, (bcmolt_func_pack) bcmolt_debug_cli_input_data_pack, (bcmolt_func_unpack) bcmolt_debug_cli_input_data_unpack, bcmolt_debug_cli_input_data_scan };
+static bcmolt_group_info group_info_debug_reset_api_capture = { BCMOLT_OBJ_ID_DEBUG, BCMOLT_MGT_GROUP_OPER, 1, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_debug_start_api_capture = { BCMOLT_OBJ_ID_DEBUG, BCMOLT_MGT_GROUP_OPER, 2, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_debug_stop_api_capture = { BCMOLT_OBJ_ID_DEBUG, BCMOLT_MGT_GROUP_OPER, 3, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_device_key = { BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_KEY, 0, sizeof(bcmolt_device_key), 0, 0, (bcmolt_func_packed_len) bcmolt_device_key_get_packed_length, (bcmolt_func_pack) bcmolt_device_key_pack, (bcmolt_func_unpack) bcmolt_device_key_unpack, bcmolt_device_key_scan };
+static bcmolt_group_info group_info_device_cfg = { BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, sizeof(bcmolt_device_cfg_data), sizeof(bcmolt_device_cfg), offsetof(bcmolt_device_cfg, data), (bcmolt_func_packed_len) bcmolt_device_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_device_cfg_data_pack, (bcmolt_func_unpack) bcmolt_device_cfg_data_unpack, bcmolt_device_cfg_data_scan };
+static bcmolt_group_info group_info_device_connection_complete = { BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_AUTO, 0, sizeof(bcmolt_device_connection_complete_data), sizeof(bcmolt_device_connection_complete), offsetof(bcmolt_device_connection_complete, data), (bcmolt_func_packed_len) bcmolt_device_connection_complete_data_get_packed_length, (bcmolt_func_pack) bcmolt_device_connection_complete_data_pack, (bcmolt_func_unpack) bcmolt_device_connection_complete_data_unpack, bcmolt_device_connection_complete_data_scan };
+static bcmolt_group_info group_info_device_connection_established = { BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_AUTO, 1, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_device_connection_failure = { BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_AUTO, 2, sizeof(bcmolt_device_connection_failure_data), sizeof(bcmolt_device_connection_failure), offsetof(bcmolt_device_connection_failure, data), (bcmolt_func_packed_len) bcmolt_device_connection_failure_data_get_packed_length, (bcmolt_func_pack) bcmolt_device_connection_failure_data_pack, (bcmolt_func_unpack) bcmolt_device_connection_failure_data_unpack, bcmolt_device_connection_failure_data_scan };
+static bcmolt_group_info group_info_device_ddr_test_complete = { BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_AUTO, 3, sizeof(bcmolt_device_ddr_test_complete_data), sizeof(bcmolt_device_ddr_test_complete), offsetof(bcmolt_device_ddr_test_complete, data), (bcmolt_func_packed_len) bcmolt_device_ddr_test_complete_data_get_packed_length, (bcmolt_func_pack) bcmolt_device_ddr_test_complete_data_pack, (bcmolt_func_unpack) bcmolt_device_ddr_test_complete_data_unpack, bcmolt_device_ddr_test_complete_data_scan };
+static bcmolt_group_info group_info_device_device_keep_alive = { BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_AUTO, 4, sizeof(bcmolt_device_device_keep_alive_data), sizeof(bcmolt_device_device_keep_alive), offsetof(bcmolt_device_device_keep_alive, data), (bcmolt_func_packed_len) bcmolt_device_device_keep_alive_data_get_packed_length, (bcmolt_func_pack) bcmolt_device_device_keep_alive_data_pack, (bcmolt_func_unpack) bcmolt_device_device_keep_alive_data_unpack, bcmolt_device_device_keep_alive_data_scan };
+static bcmolt_group_info group_info_device_device_ready = { BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_AUTO, 5, sizeof(bcmolt_device_device_ready_data), sizeof(bcmolt_device_device_ready), offsetof(bcmolt_device_device_ready, data), (bcmolt_func_packed_len) bcmolt_device_device_ready_data_get_packed_length, (bcmolt_func_pack) bcmolt_device_device_ready_data_pack, (bcmolt_func_unpack) bcmolt_device_device_ready_data_unpack, bcmolt_device_device_ready_data_scan };
+static bcmolt_group_info group_info_device_disconnection_complete = { BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_AUTO, 6, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_device_image_transfer_complete = { BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_AUTO, 7, sizeof(bcmolt_device_image_transfer_complete_data), sizeof(bcmolt_device_image_transfer_complete), offsetof(bcmolt_device_image_transfer_complete, data), (bcmolt_func_packed_len) bcmolt_device_image_transfer_complete_data_get_packed_length, (bcmolt_func_pack) bcmolt_device_image_transfer_complete_data_pack, (bcmolt_func_unpack) bcmolt_device_image_transfer_complete_data_unpack, bcmolt_device_image_transfer_complete_data_scan };
+static bcmolt_group_info group_info_device_indications_dropped = { BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_AUTO, 8, sizeof(bcmolt_device_indications_dropped_data), sizeof(bcmolt_device_indications_dropped), offsetof(bcmolt_device_indications_dropped, data), (bcmolt_func_packed_len) bcmolt_device_indications_dropped_data_get_packed_length, (bcmolt_func_pack) bcmolt_device_indications_dropped_data_pack, (bcmolt_func_unpack) bcmolt_device_indications_dropped_data_unpack, bcmolt_device_indications_dropped_data_scan };
+static bcmolt_group_info group_info_device_sw_error = { BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_AUTO, 9, sizeof(bcmolt_device_sw_error_data), sizeof(bcmolt_device_sw_error), offsetof(bcmolt_device_sw_error, data), (bcmolt_func_packed_len) bcmolt_device_sw_error_data_get_packed_length, (bcmolt_func_pack) bcmolt_device_sw_error_data_pack, (bcmolt_func_unpack) bcmolt_device_sw_error_data_unpack, bcmolt_device_sw_error_data_scan };
+static bcmolt_group_info group_info_device_sw_exception = { BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_AUTO, 10, sizeof(bcmolt_device_sw_exception_data), sizeof(bcmolt_device_sw_exception), offsetof(bcmolt_device_sw_exception, data), (bcmolt_func_packed_len) bcmolt_device_sw_exception_data_get_packed_length, (bcmolt_func_pack) bcmolt_device_sw_exception_data_pack, (bcmolt_func_unpack) bcmolt_device_sw_exception_data_unpack, bcmolt_device_sw_exception_data_scan };
+static bcmolt_group_info group_info_device_auto_cfg = { BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_AUTO_CFG, 0, sizeof(bcmolt_device_auto_cfg_data), sizeof(bcmolt_device_auto_cfg), offsetof(bcmolt_device_auto_cfg, data), (bcmolt_func_packed_len) bcmolt_device_auto_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_device_auto_cfg_data_pack, (bcmolt_func_unpack) bcmolt_device_auto_cfg_data_unpack, bcmolt_device_auto_cfg_data_scan };
+static bcmolt_group_info group_info_device_connect = { BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_OPER, 0, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_device_disconnect = { BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_OPER, 1, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_device_host_keep_alive = { BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_OPER, 2, sizeof(bcmolt_device_host_keep_alive_data), sizeof(bcmolt_device_host_keep_alive), offsetof(bcmolt_device_host_keep_alive, data), (bcmolt_func_packed_len) bcmolt_device_host_keep_alive_data_get_packed_length, (bcmolt_func_pack) bcmolt_device_host_keep_alive_data_pack, (bcmolt_func_unpack) bcmolt_device_host_keep_alive_data_unpack, bcmolt_device_host_keep_alive_data_scan };
+static bcmolt_group_info group_info_device_image_transfer_data = { BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_OPER, 3, sizeof(bcmolt_device_image_transfer_data_data), sizeof(bcmolt_device_image_transfer_data), offsetof(bcmolt_device_image_transfer_data, data), (bcmolt_func_packed_len) bcmolt_device_image_transfer_data_data_get_packed_length, (bcmolt_func_pack) bcmolt_device_image_transfer_data_data_pack, (bcmolt_func_unpack) bcmolt_device_image_transfer_data_data_unpack, bcmolt_device_image_transfer_data_data_scan };
+static bcmolt_group_info group_info_device_image_transfer_start = { BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_OPER, 4, sizeof(bcmolt_device_image_transfer_start_data), sizeof(bcmolt_device_image_transfer_start), offsetof(bcmolt_device_image_transfer_start, data), (bcmolt_func_packed_len) bcmolt_device_image_transfer_start_data_get_packed_length, (bcmolt_func_pack) bcmolt_device_image_transfer_start_data_pack, (bcmolt_func_unpack) bcmolt_device_image_transfer_start_data_unpack, bcmolt_device_image_transfer_start_data_scan };
+static bcmolt_group_info group_info_device_reset = { BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_OPER, 5, sizeof(bcmolt_device_reset_data), sizeof(bcmolt_device_reset), offsetof(bcmolt_device_reset, data), (bcmolt_func_packed_len) bcmolt_device_reset_data_get_packed_length, (bcmolt_func_pack) bcmolt_device_reset_data_pack, (bcmolt_func_unpack) bcmolt_device_reset_data_unpack, bcmolt_device_reset_data_scan };
+static bcmolt_group_info group_info_device_run_ddr_test = { BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_OPER, 6, sizeof(bcmolt_device_run_ddr_test_data), sizeof(bcmolt_device_run_ddr_test), offsetof(bcmolt_device_run_ddr_test, data), (bcmolt_func_packed_len) bcmolt_device_run_ddr_test_data_get_packed_length, (bcmolt_func_pack) bcmolt_device_run_ddr_test_data_pack, (bcmolt_func_unpack) bcmolt_device_run_ddr_test_data_unpack, bcmolt_device_run_ddr_test_data_scan };
+static bcmolt_group_info group_info_device_sw_upgrade_activate = { BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_OPER, 7, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_epon_denied_link_key = { BCMOLT_OBJ_ID_EPON_DENIED_LINK, BCMOLT_MGT_GROUP_KEY, 0, sizeof(bcmolt_epon_denied_link_key), 0, 0, (bcmolt_func_packed_len) bcmolt_epon_denied_link_key_get_packed_length, (bcmolt_func_pack) bcmolt_epon_denied_link_key_pack, (bcmolt_func_unpack) bcmolt_epon_denied_link_key_unpack, bcmolt_epon_denied_link_key_scan };
+static bcmolt_group_info group_info_epon_denied_link_cfg = { BCMOLT_OBJ_ID_EPON_DENIED_LINK, BCMOLT_MGT_GROUP_CFG, 0, sizeof(bcmolt_epon_denied_link_cfg_data), sizeof(bcmolt_epon_denied_link_cfg), offsetof(bcmolt_epon_denied_link_cfg, data), (bcmolt_func_packed_len) bcmolt_epon_denied_link_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_denied_link_cfg_data_pack, (bcmolt_func_unpack) bcmolt_epon_denied_link_cfg_data_unpack, bcmolt_epon_denied_link_cfg_data_scan };
+static bcmolt_group_info group_info_epon_denied_link_laser_on_off_violation = { BCMOLT_OBJ_ID_EPON_DENIED_LINK, BCMOLT_MGT_GROUP_AUTO, 0, sizeof(bcmolt_epon_denied_link_laser_on_off_violation_data), sizeof(bcmolt_epon_denied_link_laser_on_off_violation), offsetof(bcmolt_epon_denied_link_laser_on_off_violation, data), (bcmolt_func_packed_len) bcmolt_epon_denied_link_laser_on_off_violation_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_denied_link_laser_on_off_violation_data_pack, (bcmolt_func_unpack) bcmolt_epon_denied_link_laser_on_off_violation_data_unpack, bcmolt_epon_denied_link_laser_on_off_violation_data_scan };
+static bcmolt_group_info group_info_epon_denied_link_llid_pool_empty_violation = { BCMOLT_OBJ_ID_EPON_DENIED_LINK, BCMOLT_MGT_GROUP_AUTO, 1, sizeof(bcmolt_epon_denied_link_llid_pool_empty_violation_data), sizeof(bcmolt_epon_denied_link_llid_pool_empty_violation), offsetof(bcmolt_epon_denied_link_llid_pool_empty_violation, data), (bcmolt_func_packed_len) bcmolt_epon_denied_link_llid_pool_empty_violation_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_denied_link_llid_pool_empty_violation_data_pack, (bcmolt_func_unpack) bcmolt_epon_denied_link_llid_pool_empty_violation_data_unpack, bcmolt_epon_denied_link_llid_pool_empty_violation_data_scan };
+static bcmolt_group_info group_info_epon_denied_link_max_link_violation = { BCMOLT_OBJ_ID_EPON_DENIED_LINK, BCMOLT_MGT_GROUP_AUTO, 2, sizeof(bcmolt_epon_denied_link_max_link_violation_data), sizeof(bcmolt_epon_denied_link_max_link_violation), offsetof(bcmolt_epon_denied_link_max_link_violation, data), (bcmolt_func_packed_len) bcmolt_epon_denied_link_max_link_violation_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_denied_link_max_link_violation_data_pack, (bcmolt_func_unpack) bcmolt_epon_denied_link_max_link_violation_data_unpack, bcmolt_epon_denied_link_max_link_violation_data_scan };
+static bcmolt_group_info group_info_epon_denied_link_overhead_profile_violation = { BCMOLT_OBJ_ID_EPON_DENIED_LINK, BCMOLT_MGT_GROUP_AUTO, 3, sizeof(bcmolt_epon_denied_link_overhead_profile_violation_data), sizeof(bcmolt_epon_denied_link_overhead_profile_violation), offsetof(bcmolt_epon_denied_link_overhead_profile_violation, data), (bcmolt_func_packed_len) bcmolt_epon_denied_link_overhead_profile_violation_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_denied_link_overhead_profile_violation_data_pack, (bcmolt_func_unpack) bcmolt_epon_denied_link_overhead_profile_violation_data_unpack, bcmolt_epon_denied_link_overhead_profile_violation_data_scan };
+static bcmolt_group_info group_info_epon_denied_link_range_violation = { BCMOLT_OBJ_ID_EPON_DENIED_LINK, BCMOLT_MGT_GROUP_AUTO, 4, sizeof(bcmolt_epon_denied_link_range_violation_data), sizeof(bcmolt_epon_denied_link_range_violation), offsetof(bcmolt_epon_denied_link_range_violation, data), (bcmolt_func_packed_len) bcmolt_epon_denied_link_range_violation_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_denied_link_range_violation_data_pack, (bcmolt_func_unpack) bcmolt_epon_denied_link_range_violation_data_unpack, bcmolt_epon_denied_link_range_violation_data_scan };
+static bcmolt_group_info group_info_epon_denied_link_rogue_violation = { BCMOLT_OBJ_ID_EPON_DENIED_LINK, BCMOLT_MGT_GROUP_AUTO, 5, sizeof(bcmolt_epon_denied_link_rogue_violation_data), sizeof(bcmolt_epon_denied_link_rogue_violation), offsetof(bcmolt_epon_denied_link_rogue_violation, data), (bcmolt_func_packed_len) bcmolt_epon_denied_link_rogue_violation_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_denied_link_rogue_violation_data_pack, (bcmolt_func_unpack) bcmolt_epon_denied_link_rogue_violation_data_unpack, bcmolt_epon_denied_link_rogue_violation_data_scan };
+static bcmolt_group_info group_info_epon_denied_link_system_resource_violation = { BCMOLT_OBJ_ID_EPON_DENIED_LINK, BCMOLT_MGT_GROUP_AUTO, 6, sizeof(bcmolt_epon_denied_link_system_resource_violation_data), sizeof(bcmolt_epon_denied_link_system_resource_violation), offsetof(bcmolt_epon_denied_link_system_resource_violation, data), (bcmolt_func_packed_len) bcmolt_epon_denied_link_system_resource_violation_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_denied_link_system_resource_violation_data_pack, (bcmolt_func_unpack) bcmolt_epon_denied_link_system_resource_violation_data_unpack, bcmolt_epon_denied_link_system_resource_violation_data_scan };
+static bcmolt_group_info group_info_epon_denied_link_tdm_channels_exhausted = { BCMOLT_OBJ_ID_EPON_DENIED_LINK, BCMOLT_MGT_GROUP_AUTO, 7, sizeof(bcmolt_epon_denied_link_tdm_channels_exhausted_data), sizeof(bcmolt_epon_denied_link_tdm_channels_exhausted), offsetof(bcmolt_epon_denied_link_tdm_channels_exhausted, data), (bcmolt_func_packed_len) bcmolt_epon_denied_link_tdm_channels_exhausted_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_denied_link_tdm_channels_exhausted_data_pack, (bcmolt_func_unpack) bcmolt_epon_denied_link_tdm_channels_exhausted_data_unpack, bcmolt_epon_denied_link_tdm_channels_exhausted_data_scan };
+static bcmolt_group_info group_info_epon_denied_link_unknown_link_violation = { BCMOLT_OBJ_ID_EPON_DENIED_LINK, BCMOLT_MGT_GROUP_AUTO, 8, sizeof(bcmolt_epon_denied_link_unknown_link_violation_data), sizeof(bcmolt_epon_denied_link_unknown_link_violation), offsetof(bcmolt_epon_denied_link_unknown_link_violation, data), (bcmolt_func_packed_len) bcmolt_epon_denied_link_unknown_link_violation_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_denied_link_unknown_link_violation_data_pack, (bcmolt_func_unpack) bcmolt_epon_denied_link_unknown_link_violation_data_unpack, bcmolt_epon_denied_link_unknown_link_violation_data_scan };
+static bcmolt_group_info group_info_epon_denied_link_upstream_bandwidth_violation = { BCMOLT_OBJ_ID_EPON_DENIED_LINK, BCMOLT_MGT_GROUP_AUTO, 9, sizeof(bcmolt_epon_denied_link_upstream_bandwidth_violation_data), sizeof(bcmolt_epon_denied_link_upstream_bandwidth_violation), offsetof(bcmolt_epon_denied_link_upstream_bandwidth_violation, data), (bcmolt_func_packed_len) bcmolt_epon_denied_link_upstream_bandwidth_violation_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_denied_link_upstream_bandwidth_violation_data_pack, (bcmolt_func_unpack) bcmolt_epon_denied_link_upstream_bandwidth_violation_data_unpack, bcmolt_epon_denied_link_upstream_bandwidth_violation_data_scan };
+static bcmolt_group_info group_info_epon_denied_link_auto_cfg = { BCMOLT_OBJ_ID_EPON_DENIED_LINK, BCMOLT_MGT_GROUP_AUTO_CFG, 0, sizeof(bcmolt_epon_denied_link_auto_cfg_data), sizeof(bcmolt_epon_denied_link_auto_cfg), offsetof(bcmolt_epon_denied_link_auto_cfg, data), (bcmolt_func_packed_len) bcmolt_epon_denied_link_auto_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_denied_link_auto_cfg_data_pack, (bcmolt_func_unpack) bcmolt_epon_denied_link_auto_cfg_data_unpack, bcmolt_epon_denied_link_auto_cfg_data_scan };
+static bcmolt_group_info group_info_epon_link_key = { BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_KEY, 0, sizeof(bcmolt_epon_link_key), 0, 0, (bcmolt_func_packed_len) bcmolt_epon_link_key_get_packed_length, (bcmolt_func_pack) bcmolt_epon_link_key_pack, (bcmolt_func_unpack) bcmolt_epon_link_key_unpack, bcmolt_epon_link_key_scan };
+static bcmolt_group_info group_info_epon_link_cfg = { BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_CFG, 0, sizeof(bcmolt_epon_link_cfg_data), sizeof(bcmolt_epon_link_cfg), offsetof(bcmolt_epon_link_cfg, data), (bcmolt_func_packed_len) bcmolt_epon_link_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_link_cfg_data_pack, (bcmolt_func_unpack) bcmolt_epon_link_cfg_data_unpack, bcmolt_epon_link_cfg_data_scan };
+static bcmolt_group_info group_info_epon_link_stat = { BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_STAT, 0, sizeof(bcmolt_epon_link_stat_data), sizeof(bcmolt_epon_link_stat), offsetof(bcmolt_epon_link_stat, data), (bcmolt_func_packed_len) bcmolt_epon_link_stat_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_link_stat_data_pack, (bcmolt_func_unpack) bcmolt_epon_link_stat_data_unpack, bcmolt_epon_link_stat_data_scan };
+static bcmolt_group_info group_info_epon_link_stat_cfg = { BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_STAT_CFG, 0, sizeof(bcmolt_epon_link_stat_cfg_data), sizeof(bcmolt_epon_link_stat_cfg), offsetof(bcmolt_epon_link_stat_cfg, data), (bcmolt_func_packed_len) bcmolt_epon_link_stat_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_link_stat_cfg_data_pack, (bcmolt_func_unpack) bcmolt_epon_link_stat_cfg_data_unpack, bcmolt_epon_link_stat_cfg_data_scan };
+static bcmolt_group_info group_info_epon_link_duplicate_mpcp_registration_request = { BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_AUTO, 0, sizeof(bcmolt_epon_link_duplicate_mpcp_registration_request_data), sizeof(bcmolt_epon_link_duplicate_mpcp_registration_request), offsetof(bcmolt_epon_link_duplicate_mpcp_registration_request, data), (bcmolt_func_packed_len) bcmolt_epon_link_duplicate_mpcp_registration_request_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_link_duplicate_mpcp_registration_request_data_pack, (bcmolt_func_unpack) bcmolt_epon_link_duplicate_mpcp_registration_request_data_unpack, bcmolt_epon_link_duplicate_mpcp_registration_request_data_scan };
+static bcmolt_group_info group_info_epon_link_encryption_enabled = { BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_AUTO, 1, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_epon_link_key_exchange_failure = { BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_AUTO, 2, sizeof(bcmolt_epon_link_key_exchange_failure_data), sizeof(bcmolt_epon_link_key_exchange_failure), offsetof(bcmolt_epon_link_key_exchange_failure, data), (bcmolt_func_packed_len) bcmolt_epon_link_key_exchange_failure_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_link_key_exchange_failure_data_pack, (bcmolt_func_unpack) bcmolt_epon_link_key_exchange_failure_data_unpack, bcmolt_epon_link_key_exchange_failure_data_scan };
+static bcmolt_group_info group_info_epon_link_key_exchange_started = { BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_AUTO, 3, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_epon_link_key_exchange_stopped = { BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_AUTO, 4, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_epon_link_link_deleted = { BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_AUTO, 5, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_epon_link_link_speed_mismatch = { BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_AUTO, 6, sizeof(bcmolt_epon_link_link_speed_mismatch_data), sizeof(bcmolt_epon_link_link_speed_mismatch), offsetof(bcmolt_epon_link_link_speed_mismatch, data), (bcmolt_func_packed_len) bcmolt_epon_link_link_speed_mismatch_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_link_link_speed_mismatch_data_pack, (bcmolt_func_unpack) bcmolt_epon_link_link_speed_mismatch_data_unpack, bcmolt_epon_link_link_speed_mismatch_data_scan };
+static bcmolt_group_info group_info_epon_link_mpcp_deregistered = { BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_AUTO, 7, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_epon_link_mpcp_discovered = { BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_AUTO, 8, sizeof(bcmolt_epon_link_mpcp_discovered_data), sizeof(bcmolt_epon_link_mpcp_discovered), offsetof(bcmolt_epon_link_mpcp_discovered, data), (bcmolt_func_packed_len) bcmolt_epon_link_mpcp_discovered_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_link_mpcp_discovered_data_pack, (bcmolt_func_unpack) bcmolt_epon_link_mpcp_discovered_data_unpack, bcmolt_epon_link_mpcp_discovered_data_scan };
+static bcmolt_group_info group_info_epon_link_mpcp_reg_ack_timeout = { BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_AUTO, 9, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_epon_link_mpcp_report_timeout = { BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_AUTO, 10, sizeof(bcmolt_epon_link_mpcp_report_timeout_data), sizeof(bcmolt_epon_link_mpcp_report_timeout), offsetof(bcmolt_epon_link_mpcp_report_timeout, data), (bcmolt_func_packed_len) bcmolt_epon_link_mpcp_report_timeout_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_link_mpcp_report_timeout_data_pack, (bcmolt_func_unpack) bcmolt_epon_link_mpcp_report_timeout_data_unpack, bcmolt_epon_link_mpcp_report_timeout_data_scan };
+static bcmolt_group_info group_info_epon_link_oam_keepalive_timeout = { BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_AUTO, 11, sizeof(bcmolt_epon_link_oam_keepalive_timeout_data), sizeof(bcmolt_epon_link_oam_keepalive_timeout), offsetof(bcmolt_epon_link_oam_keepalive_timeout, data), (bcmolt_func_packed_len) bcmolt_epon_link_oam_keepalive_timeout_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_link_oam_keepalive_timeout_data_pack, (bcmolt_func_unpack) bcmolt_epon_link_oam_keepalive_timeout_data_unpack, bcmolt_epon_link_oam_keepalive_timeout_data_scan };
+static bcmolt_group_info group_info_epon_link_oam_keepalive_timer_started = { BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_AUTO, 12, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_epon_link_oam_keepalive_timer_stopped = { BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_AUTO, 13, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_epon_link_preprovisioned_link_created = { BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_AUTO, 14, sizeof(bcmolt_epon_link_preprovisioned_link_created_data), sizeof(bcmolt_epon_link_preprovisioned_link_created), offsetof(bcmolt_epon_link_preprovisioned_link_created, data), (bcmolt_func_packed_len) bcmolt_epon_link_preprovisioned_link_created_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_link_preprovisioned_link_created_data_pack, (bcmolt_func_unpack) bcmolt_epon_link_preprovisioned_link_created_data_unpack, bcmolt_epon_link_preprovisioned_link_created_data_scan };
+static bcmolt_group_info group_info_epon_link_protection_switch_occurred = { BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_AUTO, 15, sizeof(bcmolt_epon_link_protection_switch_occurred_data), sizeof(bcmolt_epon_link_protection_switch_occurred), offsetof(bcmolt_epon_link_protection_switch_occurred, data), (bcmolt_func_packed_len) bcmolt_epon_link_protection_switch_occurred_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_link_protection_switch_occurred_data_pack, (bcmolt_func_unpack) bcmolt_epon_link_protection_switch_occurred_data_unpack, bcmolt_epon_link_protection_switch_occurred_data_scan };
+static bcmolt_group_info group_info_epon_link_range_value_changed = { BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_AUTO, 16, sizeof(bcmolt_epon_link_range_value_changed_data), sizeof(bcmolt_epon_link_range_value_changed), offsetof(bcmolt_epon_link_range_value_changed, data), (bcmolt_func_packed_len) bcmolt_epon_link_range_value_changed_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_link_range_value_changed_data_pack, (bcmolt_func_unpack) bcmolt_epon_link_range_value_changed_data_unpack, bcmolt_epon_link_range_value_changed_data_scan };
+static bcmolt_group_info group_info_epon_link_rerange_failure = { BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_AUTO, 17, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_epon_link_stat_alarm_cleared = { BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_AUTO, 18, sizeof(bcmolt_epon_link_stat_alarm_cleared_data), sizeof(bcmolt_epon_link_stat_alarm_cleared), offsetof(bcmolt_epon_link_stat_alarm_cleared, data), (bcmolt_func_packed_len) bcmolt_epon_link_stat_alarm_cleared_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_link_stat_alarm_cleared_data_pack, (bcmolt_func_unpack) bcmolt_epon_link_stat_alarm_cleared_data_unpack, bcmolt_epon_link_stat_alarm_cleared_data_scan };
+static bcmolt_group_info group_info_epon_link_stat_alarm_raised = { BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_AUTO, 19, sizeof(bcmolt_epon_link_stat_alarm_raised_data), sizeof(bcmolt_epon_link_stat_alarm_raised), offsetof(bcmolt_epon_link_stat_alarm_raised, data), (bcmolt_func_packed_len) bcmolt_epon_link_stat_alarm_raised_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_link_stat_alarm_raised_data_pack, (bcmolt_func_unpack) bcmolt_epon_link_stat_alarm_raised_data_unpack, bcmolt_epon_link_stat_alarm_raised_data_scan };
+static bcmolt_group_info group_info_epon_link_static_registration_done = { BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_AUTO, 20, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_epon_link_auto_cfg = { BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_AUTO_CFG, 0, sizeof(bcmolt_epon_link_auto_cfg_data), sizeof(bcmolt_epon_link_auto_cfg), offsetof(bcmolt_epon_link_auto_cfg, data), (bcmolt_func_packed_len) bcmolt_epon_link_auto_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_link_auto_cfg_data_pack, (bcmolt_func_unpack) bcmolt_epon_link_auto_cfg_data_unpack, bcmolt_epon_link_auto_cfg_data_scan };
+static bcmolt_group_info group_info_epon_link_delete_link = { BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_OPER, 0, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_epon_link_force_rediscovery = { BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_OPER, 1, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_epon_link_key_exchange_start = { BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_OPER, 2, sizeof(bcmolt_epon_link_key_exchange_start_data), sizeof(bcmolt_epon_link_key_exchange_start), offsetof(bcmolt_epon_link_key_exchange_start, data), (bcmolt_func_packed_len) bcmolt_epon_link_key_exchange_start_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_link_key_exchange_start_data_pack, (bcmolt_func_unpack) bcmolt_epon_link_key_exchange_start_data_unpack, bcmolt_epon_link_key_exchange_start_data_scan };
+static bcmolt_group_info group_info_epon_link_key_exchange_stop = { BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_OPER, 3, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_epon_link_oam_keepalive_timer_start = { BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_OPER, 4, sizeof(bcmolt_epon_link_oam_keepalive_timer_start_data), sizeof(bcmolt_epon_link_oam_keepalive_timer_start), offsetof(bcmolt_epon_link_oam_keepalive_timer_start, data), (bcmolt_func_packed_len) bcmolt_epon_link_oam_keepalive_timer_start_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_link_oam_keepalive_timer_start_data_pack, (bcmolt_func_unpack) bcmolt_epon_link_oam_keepalive_timer_start_data_unpack, bcmolt_epon_link_oam_keepalive_timer_start_data_scan };
+static bcmolt_group_info group_info_epon_link_oam_keepalive_timer_stop = { BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_OPER, 5, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_epon_link_static_registration = { BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_OPER, 6, sizeof(bcmolt_epon_link_static_registration_data), sizeof(bcmolt_epon_link_static_registration), offsetof(bcmolt_epon_link_static_registration, data), (bcmolt_func_packed_len) bcmolt_epon_link_static_registration_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_link_static_registration_data_pack, (bcmolt_func_unpack) bcmolt_epon_link_static_registration_data_unpack, bcmolt_epon_link_static_registration_data_scan };
+static bcmolt_group_info group_info_epon_link_inject_frame = { BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_PROXY, 0, sizeof(bcmolt_epon_link_inject_frame_data), sizeof(bcmolt_epon_link_inject_frame), offsetof(bcmolt_epon_link_inject_frame, data), (bcmolt_func_packed_len) bcmolt_epon_link_inject_frame_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_link_inject_frame_data_pack, (bcmolt_func_unpack) bcmolt_epon_link_inject_frame_data_unpack, bcmolt_epon_link_inject_frame_data_scan };
+static bcmolt_group_info group_info_epon_link_frame_captured = { BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_PROXY_RX, 0, sizeof(bcmolt_epon_link_frame_captured_data), sizeof(bcmolt_epon_link_frame_captured), offsetof(bcmolt_epon_link_frame_captured, data), (bcmolt_func_packed_len) bcmolt_epon_link_frame_captured_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_link_frame_captured_data_pack, (bcmolt_func_unpack) bcmolt_epon_link_frame_captured_data_unpack, bcmolt_epon_link_frame_captured_data_scan };
+static bcmolt_group_info group_info_epon_ni_key = { BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_KEY, 0, sizeof(bcmolt_epon_ni_key), 0, 0, (bcmolt_func_packed_len) bcmolt_epon_ni_key_get_packed_length, (bcmolt_func_pack) bcmolt_epon_ni_key_pack, (bcmolt_func_unpack) bcmolt_epon_ni_key_unpack, bcmolt_epon_ni_key_scan };
+static bcmolt_group_info group_info_epon_ni_cfg = { BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, 0, sizeof(bcmolt_epon_ni_cfg_data), sizeof(bcmolt_epon_ni_cfg), offsetof(bcmolt_epon_ni_cfg, data), (bcmolt_func_packed_len) bcmolt_epon_ni_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_ni_cfg_data_pack, (bcmolt_func_unpack) bcmolt_epon_ni_cfg_data_unpack, bcmolt_epon_ni_cfg_data_scan };
+static bcmolt_group_info group_info_epon_ni_auto_rogue_scan_10g_failure = { BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_AUTO, 0, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_epon_ni_auto_rogue_scan_1g_failure = { BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_AUTO, 1, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_epon_ni_llid_quarantined = { BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_AUTO, 2, sizeof(bcmolt_epon_ni_llid_quarantined_data), sizeof(bcmolt_epon_ni_llid_quarantined), offsetof(bcmolt_epon_ni_llid_quarantined, data), (bcmolt_func_packed_len) bcmolt_epon_ni_llid_quarantined_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_ni_llid_quarantined_data_pack, (bcmolt_func_unpack) bcmolt_epon_ni_llid_quarantined_data_unpack, bcmolt_epon_ni_llid_quarantined_data_scan };
+static bcmolt_group_info group_info_epon_ni_mpcp_timestamp_changed = { BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_AUTO, 3, sizeof(bcmolt_epon_ni_mpcp_timestamp_changed_data), sizeof(bcmolt_epon_ni_mpcp_timestamp_changed), offsetof(bcmolt_epon_ni_mpcp_timestamp_changed, data), (bcmolt_func_packed_len) bcmolt_epon_ni_mpcp_timestamp_changed_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_ni_mpcp_timestamp_changed_data_pack, (bcmolt_func_unpack) bcmolt_epon_ni_mpcp_timestamp_changed_data_unpack, bcmolt_epon_ni_mpcp_timestamp_changed_data_scan };
+static bcmolt_group_info group_info_epon_ni_no_reports = { BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_AUTO, 4, sizeof(bcmolt_epon_ni_no_reports_data), sizeof(bcmolt_epon_ni_no_reports), offsetof(bcmolt_epon_ni_no_reports, data), (bcmolt_func_packed_len) bcmolt_epon_ni_no_reports_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_ni_no_reports_data_pack, (bcmolt_func_unpack) bcmolt_epon_ni_no_reports_data_unpack, bcmolt_epon_ni_no_reports_data_scan };
+static bcmolt_group_info group_info_epon_ni_onu_upgrade_complete = { BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_AUTO, 5, sizeof(bcmolt_epon_ni_onu_upgrade_complete_data), sizeof(bcmolt_epon_ni_onu_upgrade_complete), offsetof(bcmolt_epon_ni_onu_upgrade_complete, data), (bcmolt_func_packed_len) bcmolt_epon_ni_onu_upgrade_complete_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_ni_onu_upgrade_complete_data_pack, (bcmolt_func_unpack) bcmolt_epon_ni_onu_upgrade_complete_data_unpack, bcmolt_epon_ni_onu_upgrade_complete_data_scan };
+static bcmolt_group_info group_info_epon_ni_rerange_failure = { BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_AUTO, 6, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_epon_ni_rogue_scan_complete = { BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_AUTO, 7, sizeof(bcmolt_epon_ni_rogue_scan_complete_data), sizeof(bcmolt_epon_ni_rogue_scan_complete), offsetof(bcmolt_epon_ni_rogue_scan_complete, data), (bcmolt_func_packed_len) bcmolt_epon_ni_rogue_scan_complete_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_ni_rogue_scan_complete_data_pack, (bcmolt_func_unpack) bcmolt_epon_ni_rogue_scan_complete_data_unpack, bcmolt_epon_ni_rogue_scan_complete_data_scan };
+static bcmolt_group_info group_info_epon_ni_rssi_measurement_completed = { BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_AUTO, 8, sizeof(bcmolt_epon_ni_rssi_measurement_completed_data), sizeof(bcmolt_epon_ni_rssi_measurement_completed), offsetof(bcmolt_epon_ni_rssi_measurement_completed, data), (bcmolt_func_packed_len) bcmolt_epon_ni_rssi_measurement_completed_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_ni_rssi_measurement_completed_data_pack, (bcmolt_func_unpack) bcmolt_epon_ni_rssi_measurement_completed_data_unpack, bcmolt_epon_ni_rssi_measurement_completed_data_scan };
+static bcmolt_group_info group_info_epon_ni_state_change_completed = { BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_AUTO, 9, sizeof(bcmolt_epon_ni_state_change_completed_data), sizeof(bcmolt_epon_ni_state_change_completed), offsetof(bcmolt_epon_ni_state_change_completed, data), (bcmolt_func_packed_len) bcmolt_epon_ni_state_change_completed_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_ni_state_change_completed_data_pack, (bcmolt_func_unpack) bcmolt_epon_ni_state_change_completed_data_unpack, bcmolt_epon_ni_state_change_completed_data_scan };
+static bcmolt_group_info group_info_epon_ni_auto_cfg = { BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, sizeof(bcmolt_epon_ni_auto_cfg_data), sizeof(bcmolt_epon_ni_auto_cfg), offsetof(bcmolt_epon_ni_auto_cfg, data), (bcmolt_func_packed_len) bcmolt_epon_ni_auto_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_ni_auto_cfg_data_pack, (bcmolt_func_unpack) bcmolt_epon_ni_auto_cfg_data_unpack, bcmolt_epon_ni_auto_cfg_data_scan };
+static bcmolt_group_info group_info_epon_ni_add_link = { BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_OPER, 0, sizeof(bcmolt_epon_ni_add_link_data), sizeof(bcmolt_epon_ni_add_link), offsetof(bcmolt_epon_ni_add_link, data), (bcmolt_func_packed_len) bcmolt_epon_ni_add_link_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_ni_add_link_data_pack, (bcmolt_func_unpack) bcmolt_epon_ni_add_link_data_unpack, bcmolt_epon_ni_add_link_data_scan };
+static bcmolt_group_info group_info_epon_ni_add_multicast_link = { BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_OPER, 1, sizeof(bcmolt_epon_ni_add_multicast_link_data), sizeof(bcmolt_epon_ni_add_multicast_link), offsetof(bcmolt_epon_ni_add_multicast_link, data), (bcmolt_func_packed_len) bcmolt_epon_ni_add_multicast_link_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_ni_add_multicast_link_data_pack, (bcmolt_func_unpack) bcmolt_epon_ni_add_multicast_link_data_unpack, bcmolt_epon_ni_add_multicast_link_data_scan };
+static bcmolt_group_info group_info_epon_ni_add_protected_standby_link = { BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_OPER, 2, sizeof(bcmolt_epon_ni_add_protected_standby_link_data), sizeof(bcmolt_epon_ni_add_protected_standby_link), offsetof(bcmolt_epon_ni_add_protected_standby_link, data), (bcmolt_func_packed_len) bcmolt_epon_ni_add_protected_standby_link_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_ni_add_protected_standby_link_data_pack, (bcmolt_func_unpack) bcmolt_epon_ni_add_protected_standby_link_data_unpack, bcmolt_epon_ni_add_protected_standby_link_data_scan };
+static bcmolt_group_info group_info_epon_ni_issue_rssi_grant = { BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_OPER, 3, sizeof(bcmolt_epon_ni_issue_rssi_grant_data), sizeof(bcmolt_epon_ni_issue_rssi_grant), offsetof(bcmolt_epon_ni_issue_rssi_grant, data), (bcmolt_func_packed_len) bcmolt_epon_ni_issue_rssi_grant_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_ni_issue_rssi_grant_data_pack, (bcmolt_func_unpack) bcmolt_epon_ni_issue_rssi_grant_data_unpack, bcmolt_epon_ni_issue_rssi_grant_data_scan };
+static bcmolt_group_info group_info_epon_ni_protection_switching_apply_rerange_delta = { BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_OPER, 4, sizeof(bcmolt_epon_ni_protection_switching_apply_rerange_delta_data), sizeof(bcmolt_epon_ni_protection_switching_apply_rerange_delta), offsetof(bcmolt_epon_ni_protection_switching_apply_rerange_delta, data), (bcmolt_func_packed_len) bcmolt_epon_ni_protection_switching_apply_rerange_delta_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_ni_protection_switching_apply_rerange_delta_data_pack, (bcmolt_func_unpack) bcmolt_epon_ni_protection_switching_apply_rerange_delta_data_unpack, bcmolt_epon_ni_protection_switching_apply_rerange_delta_data_scan };
+static bcmolt_group_info group_info_epon_ni_rogue_llid_scan = { BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_OPER, 5, sizeof(bcmolt_epon_ni_rogue_llid_scan_data), sizeof(bcmolt_epon_ni_rogue_llid_scan), offsetof(bcmolt_epon_ni_rogue_llid_scan, data), (bcmolt_func_packed_len) bcmolt_epon_ni_rogue_llid_scan_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_ni_rogue_llid_scan_data_pack, (bcmolt_func_unpack) bcmolt_epon_ni_rogue_llid_scan_data_unpack, bcmolt_epon_ni_rogue_llid_scan_data_scan };
+static bcmolt_group_info group_info_epon_ni_set_epon_ni_en_state = { BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_OPER, 6, sizeof(bcmolt_epon_ni_set_epon_ni_en_state_data), sizeof(bcmolt_epon_ni_set_epon_ni_en_state), offsetof(bcmolt_epon_ni_set_epon_ni_en_state, data), (bcmolt_func_packed_len) bcmolt_epon_ni_set_epon_ni_en_state_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_ni_set_epon_ni_en_state_data_pack, (bcmolt_func_unpack) bcmolt_epon_ni_set_epon_ni_en_state_data_unpack, bcmolt_epon_ni_set_epon_ni_en_state_data_scan };
+static bcmolt_group_info group_info_epon_ni_start_onu_upgrade = { BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_OPER, 7, sizeof(bcmolt_epon_ni_start_onu_upgrade_data), sizeof(bcmolt_epon_ni_start_onu_upgrade), offsetof(bcmolt_epon_ni_start_onu_upgrade, data), (bcmolt_func_packed_len) bcmolt_epon_ni_start_onu_upgrade_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_ni_start_onu_upgrade_data_pack, (bcmolt_func_unpack) bcmolt_epon_ni_start_onu_upgrade_data_unpack, bcmolt_epon_ni_start_onu_upgrade_data_scan };
+static bcmolt_group_info group_info_epon_onu_10g_us_key = { BCMOLT_OBJ_ID_EPON_ONU_10G_US, BCMOLT_MGT_GROUP_KEY, 0, sizeof(bcmolt_epon_onu_10g_us_key), 0, 0, (bcmolt_func_packed_len) bcmolt_epon_onu_10g_us_key_get_packed_length, (bcmolt_func_pack) bcmolt_epon_onu_10g_us_key_pack, (bcmolt_func_unpack) bcmolt_epon_onu_10g_us_key_unpack, bcmolt_epon_onu_10g_us_key_scan };
+static bcmolt_group_info group_info_epon_onu_10g_us_cfg = { BCMOLT_OBJ_ID_EPON_ONU_10G_US, BCMOLT_MGT_GROUP_CFG, 0, sizeof(bcmolt_epon_onu_10g_us_cfg_data), sizeof(bcmolt_epon_onu_10g_us_cfg), offsetof(bcmolt_epon_onu_10g_us_cfg, data), (bcmolt_func_packed_len) bcmolt_epon_onu_10g_us_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_onu_10g_us_cfg_data_pack, (bcmolt_func_unpack) bcmolt_epon_onu_10g_us_cfg_data_unpack, bcmolt_epon_onu_10g_us_cfg_data_scan };
+static bcmolt_group_info group_info_epon_onu_10g_us_stat = { BCMOLT_OBJ_ID_EPON_ONU_10G_US, BCMOLT_MGT_GROUP_STAT, 0, sizeof(bcmolt_epon_onu_10g_us_stat_data), sizeof(bcmolt_epon_onu_10g_us_stat), offsetof(bcmolt_epon_onu_10g_us_stat, data), (bcmolt_func_packed_len) bcmolt_epon_onu_10g_us_stat_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_onu_10g_us_stat_data_pack, (bcmolt_func_unpack) bcmolt_epon_onu_10g_us_stat_data_unpack, bcmolt_epon_onu_10g_us_stat_data_scan };
+static bcmolt_group_info group_info_epon_onu_10g_us_stat_cfg = { BCMOLT_OBJ_ID_EPON_ONU_10G_US, BCMOLT_MGT_GROUP_STAT_CFG, 0, sizeof(bcmolt_epon_onu_10g_us_stat_cfg_data), sizeof(bcmolt_epon_onu_10g_us_stat_cfg), offsetof(bcmolt_epon_onu_10g_us_stat_cfg, data), (bcmolt_func_packed_len) bcmolt_epon_onu_10g_us_stat_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_onu_10g_us_stat_cfg_data_pack, (bcmolt_func_unpack) bcmolt_epon_onu_10g_us_stat_cfg_data_unpack, bcmolt_epon_onu_10g_us_stat_cfg_data_scan };
+static bcmolt_group_info group_info_epon_onu_10g_us_stat_alarm_cleared = { BCMOLT_OBJ_ID_EPON_ONU_10G_US, BCMOLT_MGT_GROUP_AUTO, 0, sizeof(bcmolt_epon_onu_10g_us_stat_alarm_cleared_data), sizeof(bcmolt_epon_onu_10g_us_stat_alarm_cleared), offsetof(bcmolt_epon_onu_10g_us_stat_alarm_cleared, data), (bcmolt_func_packed_len) bcmolt_epon_onu_10g_us_stat_alarm_cleared_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_onu_10g_us_stat_alarm_cleared_data_pack, (bcmolt_func_unpack) bcmolt_epon_onu_10g_us_stat_alarm_cleared_data_unpack, bcmolt_epon_onu_10g_us_stat_alarm_cleared_data_scan };
+static bcmolt_group_info group_info_epon_onu_10g_us_stat_alarm_raised = { BCMOLT_OBJ_ID_EPON_ONU_10G_US, BCMOLT_MGT_GROUP_AUTO, 1, sizeof(bcmolt_epon_onu_10g_us_stat_alarm_raised_data), sizeof(bcmolt_epon_onu_10g_us_stat_alarm_raised), offsetof(bcmolt_epon_onu_10g_us_stat_alarm_raised, data), (bcmolt_func_packed_len) bcmolt_epon_onu_10g_us_stat_alarm_raised_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_onu_10g_us_stat_alarm_raised_data_pack, (bcmolt_func_unpack) bcmolt_epon_onu_10g_us_stat_alarm_raised_data_unpack, bcmolt_epon_onu_10g_us_stat_alarm_raised_data_scan };
+static bcmolt_group_info group_info_epon_onu_10g_us_auto_cfg = { BCMOLT_OBJ_ID_EPON_ONU_10G_US, BCMOLT_MGT_GROUP_AUTO_CFG, 0, sizeof(bcmolt_epon_onu_10g_us_auto_cfg_data), sizeof(bcmolt_epon_onu_10g_us_auto_cfg), offsetof(bcmolt_epon_onu_10g_us_auto_cfg, data), (bcmolt_func_packed_len) bcmolt_epon_onu_10g_us_auto_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_onu_10g_us_auto_cfg_data_pack, (bcmolt_func_unpack) bcmolt_epon_onu_10g_us_auto_cfg_data_unpack, bcmolt_epon_onu_10g_us_auto_cfg_data_scan };
+static bcmolt_group_info group_info_epon_onu_1g_us_key = { BCMOLT_OBJ_ID_EPON_ONU_1G_US, BCMOLT_MGT_GROUP_KEY, 0, sizeof(bcmolt_epon_onu_1g_us_key), 0, 0, (bcmolt_func_packed_len) bcmolt_epon_onu_1g_us_key_get_packed_length, (bcmolt_func_pack) bcmolt_epon_onu_1g_us_key_pack, (bcmolt_func_unpack) bcmolt_epon_onu_1g_us_key_unpack, bcmolt_epon_onu_1g_us_key_scan };
+static bcmolt_group_info group_info_epon_onu_1g_us_cfg = { BCMOLT_OBJ_ID_EPON_ONU_1G_US, BCMOLT_MGT_GROUP_CFG, 0, sizeof(bcmolt_epon_onu_1g_us_cfg_data), sizeof(bcmolt_epon_onu_1g_us_cfg), offsetof(bcmolt_epon_onu_1g_us_cfg, data), (bcmolt_func_packed_len) bcmolt_epon_onu_1g_us_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_onu_1g_us_cfg_data_pack, (bcmolt_func_unpack) bcmolt_epon_onu_1g_us_cfg_data_unpack, bcmolt_epon_onu_1g_us_cfg_data_scan };
+static bcmolt_group_info group_info_epon_onu_1g_us_stat = { BCMOLT_OBJ_ID_EPON_ONU_1G_US, BCMOLT_MGT_GROUP_STAT, 0, sizeof(bcmolt_epon_onu_1g_us_stat_data), sizeof(bcmolt_epon_onu_1g_us_stat), offsetof(bcmolt_epon_onu_1g_us_stat, data), (bcmolt_func_packed_len) bcmolt_epon_onu_1g_us_stat_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_onu_1g_us_stat_data_pack, (bcmolt_func_unpack) bcmolt_epon_onu_1g_us_stat_data_unpack, bcmolt_epon_onu_1g_us_stat_data_scan };
+static bcmolt_group_info group_info_epon_onu_1g_us_stat_cfg = { BCMOLT_OBJ_ID_EPON_ONU_1G_US, BCMOLT_MGT_GROUP_STAT_CFG, 0, sizeof(bcmolt_epon_onu_1g_us_stat_cfg_data), sizeof(bcmolt_epon_onu_1g_us_stat_cfg), offsetof(bcmolt_epon_onu_1g_us_stat_cfg, data), (bcmolt_func_packed_len) bcmolt_epon_onu_1g_us_stat_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_onu_1g_us_stat_cfg_data_pack, (bcmolt_func_unpack) bcmolt_epon_onu_1g_us_stat_cfg_data_unpack, bcmolt_epon_onu_1g_us_stat_cfg_data_scan };
+static bcmolt_group_info group_info_epon_onu_1g_us_stat_alarm_cleared = { BCMOLT_OBJ_ID_EPON_ONU_1G_US, BCMOLT_MGT_GROUP_AUTO, 0, sizeof(bcmolt_epon_onu_1g_us_stat_alarm_cleared_data), sizeof(bcmolt_epon_onu_1g_us_stat_alarm_cleared), offsetof(bcmolt_epon_onu_1g_us_stat_alarm_cleared, data), (bcmolt_func_packed_len) bcmolt_epon_onu_1g_us_stat_alarm_cleared_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_onu_1g_us_stat_alarm_cleared_data_pack, (bcmolt_func_unpack) bcmolt_epon_onu_1g_us_stat_alarm_cleared_data_unpack, bcmolt_epon_onu_1g_us_stat_alarm_cleared_data_scan };
+static bcmolt_group_info group_info_epon_onu_1g_us_stat_alarm_raised = { BCMOLT_OBJ_ID_EPON_ONU_1G_US, BCMOLT_MGT_GROUP_AUTO, 1, sizeof(bcmolt_epon_onu_1g_us_stat_alarm_raised_data), sizeof(bcmolt_epon_onu_1g_us_stat_alarm_raised), offsetof(bcmolt_epon_onu_1g_us_stat_alarm_raised, data), (bcmolt_func_packed_len) bcmolt_epon_onu_1g_us_stat_alarm_raised_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_onu_1g_us_stat_alarm_raised_data_pack, (bcmolt_func_unpack) bcmolt_epon_onu_1g_us_stat_alarm_raised_data_unpack, bcmolt_epon_onu_1g_us_stat_alarm_raised_data_scan };
+static bcmolt_group_info group_info_epon_onu_1g_us_auto_cfg = { BCMOLT_OBJ_ID_EPON_ONU_1G_US, BCMOLT_MGT_GROUP_AUTO_CFG, 0, sizeof(bcmolt_epon_onu_1g_us_auto_cfg_data), sizeof(bcmolt_epon_onu_1g_us_auto_cfg), offsetof(bcmolt_epon_onu_1g_us_auto_cfg, data), (bcmolt_func_packed_len) bcmolt_epon_onu_1g_us_auto_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_onu_1g_us_auto_cfg_data_pack, (bcmolt_func_unpack) bcmolt_epon_onu_1g_us_auto_cfg_data_unpack, bcmolt_epon_onu_1g_us_auto_cfg_data_scan };
+static bcmolt_group_info group_info_epon_path_10g_ds_key = { BCMOLT_OBJ_ID_EPON_PATH_10G_DS, BCMOLT_MGT_GROUP_KEY, 0, sizeof(bcmolt_epon_path_10g_ds_key), 0, 0, (bcmolt_func_packed_len) bcmolt_epon_path_10g_ds_key_get_packed_length, (bcmolt_func_pack) bcmolt_epon_path_10g_ds_key_pack, (bcmolt_func_unpack) bcmolt_epon_path_10g_ds_key_unpack, bcmolt_epon_path_10g_ds_key_scan };
+static bcmolt_group_info group_info_epon_path_10g_ds_cfg = { BCMOLT_OBJ_ID_EPON_PATH_10G_DS, BCMOLT_MGT_GROUP_CFG, 0, sizeof(bcmolt_epon_path_10g_ds_cfg_data), sizeof(bcmolt_epon_path_10g_ds_cfg), offsetof(bcmolt_epon_path_10g_ds_cfg, data), (bcmolt_func_packed_len) bcmolt_epon_path_10g_ds_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_path_10g_ds_cfg_data_pack, (bcmolt_func_unpack) bcmolt_epon_path_10g_ds_cfg_data_unpack, bcmolt_epon_path_10g_ds_cfg_data_scan };
+static bcmolt_group_info group_info_epon_path_10g_ds_stat = { BCMOLT_OBJ_ID_EPON_PATH_10G_DS, BCMOLT_MGT_GROUP_STAT, 0, sizeof(bcmolt_epon_path_10g_ds_stat_data), sizeof(bcmolt_epon_path_10g_ds_stat), offsetof(bcmolt_epon_path_10g_ds_stat, data), (bcmolt_func_packed_len) bcmolt_epon_path_10g_ds_stat_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_path_10g_ds_stat_data_pack, (bcmolt_func_unpack) bcmolt_epon_path_10g_ds_stat_data_unpack, bcmolt_epon_path_10g_ds_stat_data_scan };
+static bcmolt_group_info group_info_epon_path_10g_ds_stat_cfg = { BCMOLT_OBJ_ID_EPON_PATH_10G_DS, BCMOLT_MGT_GROUP_STAT_CFG, 0, sizeof(bcmolt_epon_path_10g_ds_stat_cfg_data), sizeof(bcmolt_epon_path_10g_ds_stat_cfg), offsetof(bcmolt_epon_path_10g_ds_stat_cfg, data), (bcmolt_func_packed_len) bcmolt_epon_path_10g_ds_stat_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_path_10g_ds_stat_cfg_data_pack, (bcmolt_func_unpack) bcmolt_epon_path_10g_ds_stat_cfg_data_unpack, bcmolt_epon_path_10g_ds_stat_cfg_data_scan };
+static bcmolt_group_info group_info_epon_path_10g_ds_stat_alarm_cleared = { BCMOLT_OBJ_ID_EPON_PATH_10G_DS, BCMOLT_MGT_GROUP_AUTO, 0, sizeof(bcmolt_epon_path_10g_ds_stat_alarm_cleared_data), sizeof(bcmolt_epon_path_10g_ds_stat_alarm_cleared), offsetof(bcmolt_epon_path_10g_ds_stat_alarm_cleared, data), (bcmolt_func_packed_len) bcmolt_epon_path_10g_ds_stat_alarm_cleared_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_path_10g_ds_stat_alarm_cleared_data_pack, (bcmolt_func_unpack) bcmolt_epon_path_10g_ds_stat_alarm_cleared_data_unpack, bcmolt_epon_path_10g_ds_stat_alarm_cleared_data_scan };
+static bcmolt_group_info group_info_epon_path_10g_ds_stat_alarm_raised = { BCMOLT_OBJ_ID_EPON_PATH_10G_DS, BCMOLT_MGT_GROUP_AUTO, 1, sizeof(bcmolt_epon_path_10g_ds_stat_alarm_raised_data), sizeof(bcmolt_epon_path_10g_ds_stat_alarm_raised), offsetof(bcmolt_epon_path_10g_ds_stat_alarm_raised, data), (bcmolt_func_packed_len) bcmolt_epon_path_10g_ds_stat_alarm_raised_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_path_10g_ds_stat_alarm_raised_data_pack, (bcmolt_func_unpack) bcmolt_epon_path_10g_ds_stat_alarm_raised_data_unpack, bcmolt_epon_path_10g_ds_stat_alarm_raised_data_scan };
+static bcmolt_group_info group_info_epon_path_10g_ds_auto_cfg = { BCMOLT_OBJ_ID_EPON_PATH_10G_DS, BCMOLT_MGT_GROUP_AUTO_CFG, 0, sizeof(bcmolt_epon_path_10g_ds_auto_cfg_data), sizeof(bcmolt_epon_path_10g_ds_auto_cfg), offsetof(bcmolt_epon_path_10g_ds_auto_cfg, data), (bcmolt_func_packed_len) bcmolt_epon_path_10g_ds_auto_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_path_10g_ds_auto_cfg_data_pack, (bcmolt_func_unpack) bcmolt_epon_path_10g_ds_auto_cfg_data_unpack, bcmolt_epon_path_10g_ds_auto_cfg_data_scan };
+static bcmolt_group_info group_info_epon_path_10g_us_key = { BCMOLT_OBJ_ID_EPON_PATH_10G_US, BCMOLT_MGT_GROUP_KEY, 0, sizeof(bcmolt_epon_path_10g_us_key), 0, 0, (bcmolt_func_packed_len) bcmolt_epon_path_10g_us_key_get_packed_length, (bcmolt_func_pack) bcmolt_epon_path_10g_us_key_pack, (bcmolt_func_unpack) bcmolt_epon_path_10g_us_key_unpack, bcmolt_epon_path_10g_us_key_scan };
+static bcmolt_group_info group_info_epon_path_10g_us_cfg = { BCMOLT_OBJ_ID_EPON_PATH_10G_US, BCMOLT_MGT_GROUP_CFG, 0, sizeof(bcmolt_epon_path_10g_us_cfg_data), sizeof(bcmolt_epon_path_10g_us_cfg), offsetof(bcmolt_epon_path_10g_us_cfg, data), (bcmolt_func_packed_len) bcmolt_epon_path_10g_us_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_path_10g_us_cfg_data_pack, (bcmolt_func_unpack) bcmolt_epon_path_10g_us_cfg_data_unpack, bcmolt_epon_path_10g_us_cfg_data_scan };
+static bcmolt_group_info group_info_epon_path_10g_us_stat = { BCMOLT_OBJ_ID_EPON_PATH_10G_US, BCMOLT_MGT_GROUP_STAT, 0, sizeof(bcmolt_epon_path_10g_us_stat_data), sizeof(bcmolt_epon_path_10g_us_stat), offsetof(bcmolt_epon_path_10g_us_stat, data), (bcmolt_func_packed_len) bcmolt_epon_path_10g_us_stat_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_path_10g_us_stat_data_pack, (bcmolt_func_unpack) bcmolt_epon_path_10g_us_stat_data_unpack, bcmolt_epon_path_10g_us_stat_data_scan };
+static bcmolt_group_info group_info_epon_path_10g_us_stat_cfg = { BCMOLT_OBJ_ID_EPON_PATH_10G_US, BCMOLT_MGT_GROUP_STAT_CFG, 0, sizeof(bcmolt_epon_path_10g_us_stat_cfg_data), sizeof(bcmolt_epon_path_10g_us_stat_cfg), offsetof(bcmolt_epon_path_10g_us_stat_cfg, data), (bcmolt_func_packed_len) bcmolt_epon_path_10g_us_stat_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_path_10g_us_stat_cfg_data_pack, (bcmolt_func_unpack) bcmolt_epon_path_10g_us_stat_cfg_data_unpack, bcmolt_epon_path_10g_us_stat_cfg_data_scan };
+static bcmolt_group_info group_info_epon_path_10g_us_stat_alarm_cleared = { BCMOLT_OBJ_ID_EPON_PATH_10G_US, BCMOLT_MGT_GROUP_AUTO, 0, sizeof(bcmolt_epon_path_10g_us_stat_alarm_cleared_data), sizeof(bcmolt_epon_path_10g_us_stat_alarm_cleared), offsetof(bcmolt_epon_path_10g_us_stat_alarm_cleared, data), (bcmolt_func_packed_len) bcmolt_epon_path_10g_us_stat_alarm_cleared_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_path_10g_us_stat_alarm_cleared_data_pack, (bcmolt_func_unpack) bcmolt_epon_path_10g_us_stat_alarm_cleared_data_unpack, bcmolt_epon_path_10g_us_stat_alarm_cleared_data_scan };
+static bcmolt_group_info group_info_epon_path_10g_us_stat_alarm_raised = { BCMOLT_OBJ_ID_EPON_PATH_10G_US, BCMOLT_MGT_GROUP_AUTO, 1, sizeof(bcmolt_epon_path_10g_us_stat_alarm_raised_data), sizeof(bcmolt_epon_path_10g_us_stat_alarm_raised), offsetof(bcmolt_epon_path_10g_us_stat_alarm_raised, data), (bcmolt_func_packed_len) bcmolt_epon_path_10g_us_stat_alarm_raised_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_path_10g_us_stat_alarm_raised_data_pack, (bcmolt_func_unpack) bcmolt_epon_path_10g_us_stat_alarm_raised_data_unpack, bcmolt_epon_path_10g_us_stat_alarm_raised_data_scan };
+static bcmolt_group_info group_info_epon_path_10g_us_auto_cfg = { BCMOLT_OBJ_ID_EPON_PATH_10G_US, BCMOLT_MGT_GROUP_AUTO_CFG, 0, sizeof(bcmolt_epon_path_10g_us_auto_cfg_data), sizeof(bcmolt_epon_path_10g_us_auto_cfg), offsetof(bcmolt_epon_path_10g_us_auto_cfg, data), (bcmolt_func_packed_len) bcmolt_epon_path_10g_us_auto_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_path_10g_us_auto_cfg_data_pack, (bcmolt_func_unpack) bcmolt_epon_path_10g_us_auto_cfg_data_unpack, bcmolt_epon_path_10g_us_auto_cfg_data_scan };
+static bcmolt_group_info group_info_epon_path_1g_ds_key = { BCMOLT_OBJ_ID_EPON_PATH_1G_DS, BCMOLT_MGT_GROUP_KEY, 0, sizeof(bcmolt_epon_path_1g_ds_key), 0, 0, (bcmolt_func_packed_len) bcmolt_epon_path_1g_ds_key_get_packed_length, (bcmolt_func_pack) bcmolt_epon_path_1g_ds_key_pack, (bcmolt_func_unpack) bcmolt_epon_path_1g_ds_key_unpack, bcmolt_epon_path_1g_ds_key_scan };
+static bcmolt_group_info group_info_epon_path_1g_ds_cfg = { BCMOLT_OBJ_ID_EPON_PATH_1G_DS, BCMOLT_MGT_GROUP_CFG, 0, sizeof(bcmolt_epon_path_1g_ds_cfg_data), sizeof(bcmolt_epon_path_1g_ds_cfg), offsetof(bcmolt_epon_path_1g_ds_cfg, data), (bcmolt_func_packed_len) bcmolt_epon_path_1g_ds_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_path_1g_ds_cfg_data_pack, (bcmolt_func_unpack) bcmolt_epon_path_1g_ds_cfg_data_unpack, bcmolt_epon_path_1g_ds_cfg_data_scan };
+static bcmolt_group_info group_info_epon_path_1g_ds_stat = { BCMOLT_OBJ_ID_EPON_PATH_1G_DS, BCMOLT_MGT_GROUP_STAT, 0, sizeof(bcmolt_epon_path_1g_ds_stat_data), sizeof(bcmolt_epon_path_1g_ds_stat), offsetof(bcmolt_epon_path_1g_ds_stat, data), (bcmolt_func_packed_len) bcmolt_epon_path_1g_ds_stat_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_path_1g_ds_stat_data_pack, (bcmolt_func_unpack) bcmolt_epon_path_1g_ds_stat_data_unpack, bcmolt_epon_path_1g_ds_stat_data_scan };
+static bcmolt_group_info group_info_epon_path_1g_ds_stat_cfg = { BCMOLT_OBJ_ID_EPON_PATH_1G_DS, BCMOLT_MGT_GROUP_STAT_CFG, 0, sizeof(bcmolt_epon_path_1g_ds_stat_cfg_data), sizeof(bcmolt_epon_path_1g_ds_stat_cfg), offsetof(bcmolt_epon_path_1g_ds_stat_cfg, data), (bcmolt_func_packed_len) bcmolt_epon_path_1g_ds_stat_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_path_1g_ds_stat_cfg_data_pack, (bcmolt_func_unpack) bcmolt_epon_path_1g_ds_stat_cfg_data_unpack, bcmolt_epon_path_1g_ds_stat_cfg_data_scan };
+static bcmolt_group_info group_info_epon_path_1g_ds_stat_alarm_cleared = { BCMOLT_OBJ_ID_EPON_PATH_1G_DS, BCMOLT_MGT_GROUP_AUTO, 0, sizeof(bcmolt_epon_path_1g_ds_stat_alarm_cleared_data), sizeof(bcmolt_epon_path_1g_ds_stat_alarm_cleared), offsetof(bcmolt_epon_path_1g_ds_stat_alarm_cleared, data), (bcmolt_func_packed_len) bcmolt_epon_path_1g_ds_stat_alarm_cleared_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_path_1g_ds_stat_alarm_cleared_data_pack, (bcmolt_func_unpack) bcmolt_epon_path_1g_ds_stat_alarm_cleared_data_unpack, bcmolt_epon_path_1g_ds_stat_alarm_cleared_data_scan };
+static bcmolt_group_info group_info_epon_path_1g_ds_stat_alarm_raised = { BCMOLT_OBJ_ID_EPON_PATH_1G_DS, BCMOLT_MGT_GROUP_AUTO, 1, sizeof(bcmolt_epon_path_1g_ds_stat_alarm_raised_data), sizeof(bcmolt_epon_path_1g_ds_stat_alarm_raised), offsetof(bcmolt_epon_path_1g_ds_stat_alarm_raised, data), (bcmolt_func_packed_len) bcmolt_epon_path_1g_ds_stat_alarm_raised_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_path_1g_ds_stat_alarm_raised_data_pack, (bcmolt_func_unpack) bcmolt_epon_path_1g_ds_stat_alarm_raised_data_unpack, bcmolt_epon_path_1g_ds_stat_alarm_raised_data_scan };
+static bcmolt_group_info group_info_epon_path_1g_ds_auto_cfg = { BCMOLT_OBJ_ID_EPON_PATH_1G_DS, BCMOLT_MGT_GROUP_AUTO_CFG, 0, sizeof(bcmolt_epon_path_1g_ds_auto_cfg_data), sizeof(bcmolt_epon_path_1g_ds_auto_cfg), offsetof(bcmolt_epon_path_1g_ds_auto_cfg, data), (bcmolt_func_packed_len) bcmolt_epon_path_1g_ds_auto_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_path_1g_ds_auto_cfg_data_pack, (bcmolt_func_unpack) bcmolt_epon_path_1g_ds_auto_cfg_data_unpack, bcmolt_epon_path_1g_ds_auto_cfg_data_scan };
+static bcmolt_group_info group_info_epon_path_1g_us_key = { BCMOLT_OBJ_ID_EPON_PATH_1G_US, BCMOLT_MGT_GROUP_KEY, 0, sizeof(bcmolt_epon_path_1g_us_key), 0, 0, (bcmolt_func_packed_len) bcmolt_epon_path_1g_us_key_get_packed_length, (bcmolt_func_pack) bcmolt_epon_path_1g_us_key_pack, (bcmolt_func_unpack) bcmolt_epon_path_1g_us_key_unpack, bcmolt_epon_path_1g_us_key_scan };
+static bcmolt_group_info group_info_epon_path_1g_us_cfg = { BCMOLT_OBJ_ID_EPON_PATH_1G_US, BCMOLT_MGT_GROUP_CFG, 0, sizeof(bcmolt_epon_path_1g_us_cfg_data), sizeof(bcmolt_epon_path_1g_us_cfg), offsetof(bcmolt_epon_path_1g_us_cfg, data), (bcmolt_func_packed_len) bcmolt_epon_path_1g_us_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_path_1g_us_cfg_data_pack, (bcmolt_func_unpack) bcmolt_epon_path_1g_us_cfg_data_unpack, bcmolt_epon_path_1g_us_cfg_data_scan };
+static bcmolt_group_info group_info_epon_path_1g_us_stat = { BCMOLT_OBJ_ID_EPON_PATH_1G_US, BCMOLT_MGT_GROUP_STAT, 0, sizeof(bcmolt_epon_path_1g_us_stat_data), sizeof(bcmolt_epon_path_1g_us_stat), offsetof(bcmolt_epon_path_1g_us_stat, data), (bcmolt_func_packed_len) bcmolt_epon_path_1g_us_stat_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_path_1g_us_stat_data_pack, (bcmolt_func_unpack) bcmolt_epon_path_1g_us_stat_data_unpack, bcmolt_epon_path_1g_us_stat_data_scan };
+static bcmolt_group_info group_info_epon_path_1g_us_stat_cfg = { BCMOLT_OBJ_ID_EPON_PATH_1G_US, BCMOLT_MGT_GROUP_STAT_CFG, 0, sizeof(bcmolt_epon_path_1g_us_stat_cfg_data), sizeof(bcmolt_epon_path_1g_us_stat_cfg), offsetof(bcmolt_epon_path_1g_us_stat_cfg, data), (bcmolt_func_packed_len) bcmolt_epon_path_1g_us_stat_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_path_1g_us_stat_cfg_data_pack, (bcmolt_func_unpack) bcmolt_epon_path_1g_us_stat_cfg_data_unpack, bcmolt_epon_path_1g_us_stat_cfg_data_scan };
+static bcmolt_group_info group_info_epon_path_1g_us_stat_alarm_cleared = { BCMOLT_OBJ_ID_EPON_PATH_1G_US, BCMOLT_MGT_GROUP_AUTO, 0, sizeof(bcmolt_epon_path_1g_us_stat_alarm_cleared_data), sizeof(bcmolt_epon_path_1g_us_stat_alarm_cleared), offsetof(bcmolt_epon_path_1g_us_stat_alarm_cleared, data), (bcmolt_func_packed_len) bcmolt_epon_path_1g_us_stat_alarm_cleared_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_path_1g_us_stat_alarm_cleared_data_pack, (bcmolt_func_unpack) bcmolt_epon_path_1g_us_stat_alarm_cleared_data_unpack, bcmolt_epon_path_1g_us_stat_alarm_cleared_data_scan };
+static bcmolt_group_info group_info_epon_path_1g_us_stat_alarm_raised = { BCMOLT_OBJ_ID_EPON_PATH_1G_US, BCMOLT_MGT_GROUP_AUTO, 1, sizeof(bcmolt_epon_path_1g_us_stat_alarm_raised_data), sizeof(bcmolt_epon_path_1g_us_stat_alarm_raised), offsetof(bcmolt_epon_path_1g_us_stat_alarm_raised, data), (bcmolt_func_packed_len) bcmolt_epon_path_1g_us_stat_alarm_raised_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_path_1g_us_stat_alarm_raised_data_pack, (bcmolt_func_unpack) bcmolt_epon_path_1g_us_stat_alarm_raised_data_unpack, bcmolt_epon_path_1g_us_stat_alarm_raised_data_scan };
+static bcmolt_group_info group_info_epon_path_1g_us_auto_cfg = { BCMOLT_OBJ_ID_EPON_PATH_1G_US, BCMOLT_MGT_GROUP_AUTO_CFG, 0, sizeof(bcmolt_epon_path_1g_us_auto_cfg_data), sizeof(bcmolt_epon_path_1g_us_auto_cfg), offsetof(bcmolt_epon_path_1g_us_auto_cfg, data), (bcmolt_func_packed_len) bcmolt_epon_path_1g_us_auto_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_path_1g_us_auto_cfg_data_pack, (bcmolt_func_unpack) bcmolt_epon_path_1g_us_auto_cfg_data_unpack, bcmolt_epon_path_1g_us_auto_cfg_data_scan };
+static bcmolt_group_info group_info_epon_rp_key = { BCMOLT_OBJ_ID_EPON_RP, BCMOLT_MGT_GROUP_KEY, 0, sizeof(bcmolt_epon_rp_key), 0, 0, (bcmolt_func_packed_len) bcmolt_epon_rp_key_get_packed_length, (bcmolt_func_pack) bcmolt_epon_rp_key_pack, (bcmolt_func_unpack) bcmolt_epon_rp_key_unpack, bcmolt_epon_rp_key_scan };
+static bcmolt_group_info group_info_epon_rp_cfg = { BCMOLT_OBJ_ID_EPON_RP, BCMOLT_MGT_GROUP_CFG, 0, sizeof(bcmolt_epon_rp_cfg_data), sizeof(bcmolt_epon_rp_cfg), offsetof(bcmolt_epon_rp_cfg, data), (bcmolt_func_packed_len) bcmolt_epon_rp_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_epon_rp_cfg_data_pack, (bcmolt_func_unpack) bcmolt_epon_rp_cfg_data_unpack, bcmolt_epon_rp_cfg_data_scan };
+static bcmolt_group_info group_info_gpio_key = { BCMOLT_OBJ_ID_GPIO, BCMOLT_MGT_GROUP_KEY, 0, sizeof(bcmolt_gpio_key), 0, 0, (bcmolt_func_packed_len) bcmolt_gpio_key_get_packed_length, (bcmolt_func_pack) bcmolt_gpio_key_pack, (bcmolt_func_unpack) bcmolt_gpio_key_unpack, bcmolt_gpio_key_scan };
+static bcmolt_group_info group_info_gpio_cfg = { BCMOLT_OBJ_ID_GPIO, BCMOLT_MGT_GROUP_CFG, 0, sizeof(bcmolt_gpio_cfg_data), sizeof(bcmolt_gpio_cfg), offsetof(bcmolt_gpio_cfg, data), (bcmolt_func_packed_len) bcmolt_gpio_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpio_cfg_data_pack, (bcmolt_func_unpack) bcmolt_gpio_cfg_data_unpack, bcmolt_gpio_cfg_data_scan };
+static bcmolt_group_info group_info_gpon_alloc_key = { BCMOLT_OBJ_ID_GPON_ALLOC, BCMOLT_MGT_GROUP_KEY, 0, sizeof(bcmolt_gpon_alloc_key), 0, 0, (bcmolt_func_packed_len) bcmolt_gpon_alloc_key_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_alloc_key_pack, (bcmolt_func_unpack) bcmolt_gpon_alloc_key_unpack, bcmolt_gpon_alloc_key_scan };
+static bcmolt_group_info group_info_gpon_alloc_cfg = { BCMOLT_OBJ_ID_GPON_ALLOC, BCMOLT_MGT_GROUP_CFG, 0, sizeof(bcmolt_gpon_alloc_cfg_data), sizeof(bcmolt_gpon_alloc_cfg), offsetof(bcmolt_gpon_alloc_cfg, data), (bcmolt_func_packed_len) bcmolt_gpon_alloc_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_alloc_cfg_data_pack, (bcmolt_func_unpack) bcmolt_gpon_alloc_cfg_data_unpack, bcmolt_gpon_alloc_cfg_data_scan };
+static bcmolt_group_info group_info_gpon_alloc_stat = { BCMOLT_OBJ_ID_GPON_ALLOC, BCMOLT_MGT_GROUP_STAT, 0, sizeof(bcmolt_gpon_alloc_stat_data), sizeof(bcmolt_gpon_alloc_stat), offsetof(bcmolt_gpon_alloc_stat, data), (bcmolt_func_packed_len) bcmolt_gpon_alloc_stat_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_alloc_stat_data_pack, (bcmolt_func_unpack) bcmolt_gpon_alloc_stat_data_unpack, bcmolt_gpon_alloc_stat_data_scan };
+static bcmolt_group_info group_info_gpon_alloc_stat_cfg = { BCMOLT_OBJ_ID_GPON_ALLOC, BCMOLT_MGT_GROUP_STAT_CFG, 0, sizeof(bcmolt_gpon_alloc_stat_cfg_data), sizeof(bcmolt_gpon_alloc_stat_cfg), offsetof(bcmolt_gpon_alloc_stat_cfg, data), (bcmolt_func_packed_len) bcmolt_gpon_alloc_stat_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_alloc_stat_cfg_data_pack, (bcmolt_func_unpack) bcmolt_gpon_alloc_stat_cfg_data_unpack, bcmolt_gpon_alloc_stat_cfg_data_scan };
+static bcmolt_group_info group_info_gpon_alloc_configuration_completed = { BCMOLT_OBJ_ID_GPON_ALLOC, BCMOLT_MGT_GROUP_AUTO, 0, sizeof(bcmolt_gpon_alloc_configuration_completed_data), sizeof(bcmolt_gpon_alloc_configuration_completed), offsetof(bcmolt_gpon_alloc_configuration_completed, data), (bcmolt_func_packed_len) bcmolt_gpon_alloc_configuration_completed_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_alloc_configuration_completed_data_pack, (bcmolt_func_unpack) bcmolt_gpon_alloc_configuration_completed_data_unpack, bcmolt_gpon_alloc_configuration_completed_data_scan };
+static bcmolt_group_info group_info_gpon_alloc_get_alloc_stats_completed = { BCMOLT_OBJ_ID_GPON_ALLOC, BCMOLT_MGT_GROUP_AUTO, 1, sizeof(bcmolt_gpon_alloc_get_alloc_stats_completed_data), sizeof(bcmolt_gpon_alloc_get_alloc_stats_completed), offsetof(bcmolt_gpon_alloc_get_alloc_stats_completed, data), (bcmolt_func_packed_len) bcmolt_gpon_alloc_get_alloc_stats_completed_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_alloc_get_alloc_stats_completed_data_pack, (bcmolt_func_unpack) bcmolt_gpon_alloc_get_alloc_stats_completed_data_unpack, bcmolt_gpon_alloc_get_alloc_stats_completed_data_scan };
+static bcmolt_group_info group_info_gpon_alloc_stat_alarm_cleared = { BCMOLT_OBJ_ID_GPON_ALLOC, BCMOLT_MGT_GROUP_AUTO, 2, sizeof(bcmolt_gpon_alloc_stat_alarm_cleared_data), sizeof(bcmolt_gpon_alloc_stat_alarm_cleared), offsetof(bcmolt_gpon_alloc_stat_alarm_cleared, data), (bcmolt_func_packed_len) bcmolt_gpon_alloc_stat_alarm_cleared_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_alloc_stat_alarm_cleared_data_pack, (bcmolt_func_unpack) bcmolt_gpon_alloc_stat_alarm_cleared_data_unpack, bcmolt_gpon_alloc_stat_alarm_cleared_data_scan };
+static bcmolt_group_info group_info_gpon_alloc_stat_alarm_raised = { BCMOLT_OBJ_ID_GPON_ALLOC, BCMOLT_MGT_GROUP_AUTO, 3, sizeof(bcmolt_gpon_alloc_stat_alarm_raised_data), sizeof(bcmolt_gpon_alloc_stat_alarm_raised), offsetof(bcmolt_gpon_alloc_stat_alarm_raised, data), (bcmolt_func_packed_len) bcmolt_gpon_alloc_stat_alarm_raised_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_alloc_stat_alarm_raised_data_pack, (bcmolt_func_unpack) bcmolt_gpon_alloc_stat_alarm_raised_data_unpack, bcmolt_gpon_alloc_stat_alarm_raised_data_scan };
+static bcmolt_group_info group_info_gpon_alloc_auto_cfg = { BCMOLT_OBJ_ID_GPON_ALLOC, BCMOLT_MGT_GROUP_AUTO_CFG, 0, sizeof(bcmolt_gpon_alloc_auto_cfg_data), sizeof(bcmolt_gpon_alloc_auto_cfg), offsetof(bcmolt_gpon_alloc_auto_cfg, data), (bcmolt_func_packed_len) bcmolt_gpon_alloc_auto_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_alloc_auto_cfg_data_pack, (bcmolt_func_unpack) bcmolt_gpon_alloc_auto_cfg_data_unpack, bcmolt_gpon_alloc_auto_cfg_data_scan };
+static bcmolt_group_info group_info_gpon_alloc_get_stats = { BCMOLT_OBJ_ID_GPON_ALLOC, BCMOLT_MGT_GROUP_OPER, 0, sizeof(bcmolt_gpon_alloc_get_stats_data), sizeof(bcmolt_gpon_alloc_get_stats), offsetof(bcmolt_gpon_alloc_get_stats, data), (bcmolt_func_packed_len) bcmolt_gpon_alloc_get_stats_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_alloc_get_stats_data_pack, (bcmolt_func_unpack) bcmolt_gpon_alloc_get_stats_data_unpack, bcmolt_gpon_alloc_get_stats_data_scan };
+static bcmolt_group_info group_info_gpon_alloc_set_state = { BCMOLT_OBJ_ID_GPON_ALLOC, BCMOLT_MGT_GROUP_OPER, 1, sizeof(bcmolt_gpon_alloc_set_state_data), sizeof(bcmolt_gpon_alloc_set_state), offsetof(bcmolt_gpon_alloc_set_state, data), (bcmolt_func_packed_len) bcmolt_gpon_alloc_set_state_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_alloc_set_state_data_pack, (bcmolt_func_unpack) bcmolt_gpon_alloc_set_state_data_unpack, bcmolt_gpon_alloc_set_state_data_scan };
+static bcmolt_group_info group_info_gpon_gem_port_key = { BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_KEY, 0, sizeof(bcmolt_gpon_gem_port_key), 0, 0, (bcmolt_func_packed_len) bcmolt_gpon_gem_port_key_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_gem_port_key_pack, (bcmolt_func_unpack) bcmolt_gpon_gem_port_key_unpack, bcmolt_gpon_gem_port_key_scan };
+static bcmolt_group_info group_info_gpon_gem_port_cfg = { BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_CFG, 0, sizeof(bcmolt_gpon_gem_port_cfg_data), sizeof(bcmolt_gpon_gem_port_cfg), offsetof(bcmolt_gpon_gem_port_cfg, data), (bcmolt_func_packed_len) bcmolt_gpon_gem_port_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_gem_port_cfg_data_pack, (bcmolt_func_unpack) bcmolt_gpon_gem_port_cfg_data_unpack, bcmolt_gpon_gem_port_cfg_data_scan };
+static bcmolt_group_info group_info_gpon_gem_port_stat = { BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_STAT, 0, sizeof(bcmolt_gpon_gem_port_stat_data), sizeof(bcmolt_gpon_gem_port_stat), offsetof(bcmolt_gpon_gem_port_stat, data), (bcmolt_func_packed_len) bcmolt_gpon_gem_port_stat_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_gem_port_stat_data_pack, (bcmolt_func_unpack) bcmolt_gpon_gem_port_stat_data_unpack, bcmolt_gpon_gem_port_stat_data_scan };
+static bcmolt_group_info group_info_gpon_gem_port_stat_cfg = { BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_STAT_CFG, 0, sizeof(bcmolt_gpon_gem_port_stat_cfg_data), sizeof(bcmolt_gpon_gem_port_stat_cfg), offsetof(bcmolt_gpon_gem_port_stat_cfg, data), (bcmolt_func_packed_len) bcmolt_gpon_gem_port_stat_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_gem_port_stat_cfg_data_pack, (bcmolt_func_unpack) bcmolt_gpon_gem_port_stat_cfg_data_unpack, bcmolt_gpon_gem_port_stat_cfg_data_scan };
+static bcmolt_group_info group_info_gpon_gem_port_configuration_completed = { BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_AUTO, 0, sizeof(bcmolt_gpon_gem_port_configuration_completed_data), sizeof(bcmolt_gpon_gem_port_configuration_completed), offsetof(bcmolt_gpon_gem_port_configuration_completed, data), (bcmolt_func_packed_len) bcmolt_gpon_gem_port_configuration_completed_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_gem_port_configuration_completed_data_pack, (bcmolt_func_unpack) bcmolt_gpon_gem_port_configuration_completed_data_unpack, bcmolt_gpon_gem_port_configuration_completed_data_scan };
+static bcmolt_group_info group_info_gpon_gem_port_stat_alarm_cleared = { BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_AUTO, 1, sizeof(bcmolt_gpon_gem_port_stat_alarm_cleared_data), sizeof(bcmolt_gpon_gem_port_stat_alarm_cleared), offsetof(bcmolt_gpon_gem_port_stat_alarm_cleared, data), (bcmolt_func_packed_len) bcmolt_gpon_gem_port_stat_alarm_cleared_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_gem_port_stat_alarm_cleared_data_pack, (bcmolt_func_unpack) bcmolt_gpon_gem_port_stat_alarm_cleared_data_unpack, bcmolt_gpon_gem_port_stat_alarm_cleared_data_scan };
+static bcmolt_group_info group_info_gpon_gem_port_stat_alarm_raised = { BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_AUTO, 2, sizeof(bcmolt_gpon_gem_port_stat_alarm_raised_data), sizeof(bcmolt_gpon_gem_port_stat_alarm_raised), offsetof(bcmolt_gpon_gem_port_stat_alarm_raised, data), (bcmolt_func_packed_len) bcmolt_gpon_gem_port_stat_alarm_raised_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_gem_port_stat_alarm_raised_data_pack, (bcmolt_func_unpack) bcmolt_gpon_gem_port_stat_alarm_raised_data_unpack, bcmolt_gpon_gem_port_stat_alarm_raised_data_scan };
+static bcmolt_group_info group_info_gpon_gem_port_auto_cfg = { BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_AUTO_CFG, 0, sizeof(bcmolt_gpon_gem_port_auto_cfg_data), sizeof(bcmolt_gpon_gem_port_auto_cfg), offsetof(bcmolt_gpon_gem_port_auto_cfg, data), (bcmolt_func_packed_len) bcmolt_gpon_gem_port_auto_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_gem_port_auto_cfg_data_pack, (bcmolt_func_unpack) bcmolt_gpon_gem_port_auto_cfg_data_unpack, bcmolt_gpon_gem_port_auto_cfg_data_scan };
+static bcmolt_group_info group_info_gpon_gem_port_set_state = { BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_OPER, 0, sizeof(bcmolt_gpon_gem_port_set_state_data), sizeof(bcmolt_gpon_gem_port_set_state), offsetof(bcmolt_gpon_gem_port_set_state, data), (bcmolt_func_packed_len) bcmolt_gpon_gem_port_set_state_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_gem_port_set_state_data_pack, (bcmolt_func_unpack) bcmolt_gpon_gem_port_set_state_data_unpack, bcmolt_gpon_gem_port_set_state_data_scan };
+static bcmolt_group_info group_info_gpon_iwf_key = { BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_KEY, 0, sizeof(bcmolt_gpon_iwf_key), 0, 0, (bcmolt_func_packed_len) bcmolt_gpon_iwf_key_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_iwf_key_pack, (bcmolt_func_unpack) bcmolt_gpon_iwf_key_unpack, bcmolt_gpon_iwf_key_scan };
+static bcmolt_group_info group_info_gpon_iwf_cfg = { BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_CFG, 0, sizeof(bcmolt_gpon_iwf_cfg_data), sizeof(bcmolt_gpon_iwf_cfg), offsetof(bcmolt_gpon_iwf_cfg, data), (bcmolt_func_packed_len) bcmolt_gpon_iwf_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_iwf_cfg_data_pack, (bcmolt_func_unpack) bcmolt_gpon_iwf_cfg_data_unpack, bcmolt_gpon_iwf_cfg_data_scan };
+static bcmolt_group_info group_info_gpon_iwf_stat = { BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_STAT, 0, sizeof(bcmolt_gpon_iwf_stat_data), sizeof(bcmolt_gpon_iwf_stat), offsetof(bcmolt_gpon_iwf_stat, data), (bcmolt_func_packed_len) bcmolt_gpon_iwf_stat_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_iwf_stat_data_pack, (bcmolt_func_unpack) bcmolt_gpon_iwf_stat_data_unpack, bcmolt_gpon_iwf_stat_data_scan };
+static bcmolt_group_info group_info_gpon_iwf_stat_cfg = { BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_STAT_CFG, 0, sizeof(bcmolt_gpon_iwf_stat_cfg_data), sizeof(bcmolt_gpon_iwf_stat_cfg), offsetof(bcmolt_gpon_iwf_stat_cfg, data), (bcmolt_func_packed_len) bcmolt_gpon_iwf_stat_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_iwf_stat_cfg_data_pack, (bcmolt_func_unpack) bcmolt_gpon_iwf_stat_cfg_data_unpack, bcmolt_gpon_iwf_stat_cfg_data_scan };
+static bcmolt_group_info group_info_gpon_iwf_flush_mac_table_completed = { BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_AUTO, 0, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_gpon_iwf_scan_mac_table_completed = { BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_AUTO, 1, sizeof(bcmolt_gpon_iwf_scan_mac_table_completed_data), sizeof(bcmolt_gpon_iwf_scan_mac_table_completed), offsetof(bcmolt_gpon_iwf_scan_mac_table_completed, data), (bcmolt_func_packed_len) bcmolt_gpon_iwf_scan_mac_table_completed_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_iwf_scan_mac_table_completed_data_pack, (bcmolt_func_unpack) bcmolt_gpon_iwf_scan_mac_table_completed_data_unpack, bcmolt_gpon_iwf_scan_mac_table_completed_data_scan };
+static bcmolt_group_info group_info_gpon_iwf_stat_alarm_cleared = { BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_AUTO, 2, sizeof(bcmolt_gpon_iwf_stat_alarm_cleared_data), sizeof(bcmolt_gpon_iwf_stat_alarm_cleared), offsetof(bcmolt_gpon_iwf_stat_alarm_cleared, data), (bcmolt_func_packed_len) bcmolt_gpon_iwf_stat_alarm_cleared_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_iwf_stat_alarm_cleared_data_pack, (bcmolt_func_unpack) bcmolt_gpon_iwf_stat_alarm_cleared_data_unpack, bcmolt_gpon_iwf_stat_alarm_cleared_data_scan };
+static bcmolt_group_info group_info_gpon_iwf_stat_alarm_raised = { BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_AUTO, 3, sizeof(bcmolt_gpon_iwf_stat_alarm_raised_data), sizeof(bcmolt_gpon_iwf_stat_alarm_raised), offsetof(bcmolt_gpon_iwf_stat_alarm_raised, data), (bcmolt_func_packed_len) bcmolt_gpon_iwf_stat_alarm_raised_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_iwf_stat_alarm_raised_data_pack, (bcmolt_func_unpack) bcmolt_gpon_iwf_stat_alarm_raised_data_unpack, bcmolt_gpon_iwf_stat_alarm_raised_data_scan };
+static bcmolt_group_info group_info_gpon_iwf_auto_cfg = { BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_AUTO_CFG, 0, sizeof(bcmolt_gpon_iwf_auto_cfg_data), sizeof(bcmolt_gpon_iwf_auto_cfg), offsetof(bcmolt_gpon_iwf_auto_cfg, data), (bcmolt_func_packed_len) bcmolt_gpon_iwf_auto_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_iwf_auto_cfg_data_pack, (bcmolt_func_unpack) bcmolt_gpon_iwf_auto_cfg_data_unpack, bcmolt_gpon_iwf_auto_cfg_data_scan };
+static bcmolt_group_info group_info_gpon_iwf_flush_mac_table = { BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_OPER, 0, sizeof(bcmolt_gpon_iwf_flush_mac_table_data), sizeof(bcmolt_gpon_iwf_flush_mac_table), offsetof(bcmolt_gpon_iwf_flush_mac_table, data), (bcmolt_func_packed_len) bcmolt_gpon_iwf_flush_mac_table_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_iwf_flush_mac_table_data_pack, (bcmolt_func_unpack) bcmolt_gpon_iwf_flush_mac_table_data_unpack, bcmolt_gpon_iwf_flush_mac_table_data_scan };
+static bcmolt_group_info group_info_gpon_iwf_scan_mac_table = { BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_OPER, 1, sizeof(bcmolt_gpon_iwf_scan_mac_table_data), sizeof(bcmolt_gpon_iwf_scan_mac_table), offsetof(bcmolt_gpon_iwf_scan_mac_table, data), (bcmolt_func_packed_len) bcmolt_gpon_iwf_scan_mac_table_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_iwf_scan_mac_table_data_pack, (bcmolt_func_unpack) bcmolt_gpon_iwf_scan_mac_table_data_unpack, bcmolt_gpon_iwf_scan_mac_table_data_scan };
+static bcmolt_group_info group_info_gpon_iwf_ds_egress_flow_key = { BCMOLT_OBJ_ID_GPON_IWF_DS_EGRESS_FLOW, BCMOLT_MGT_GROUP_KEY, 0, sizeof(bcmolt_gpon_iwf_ds_egress_flow_key), 0, 0, (bcmolt_func_packed_len) bcmolt_gpon_iwf_ds_egress_flow_key_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_iwf_ds_egress_flow_key_pack, (bcmolt_func_unpack) bcmolt_gpon_iwf_ds_egress_flow_key_unpack, bcmolt_gpon_iwf_ds_egress_flow_key_scan };
+static bcmolt_group_info group_info_gpon_iwf_ds_egress_flow_cfg = { BCMOLT_OBJ_ID_GPON_IWF_DS_EGRESS_FLOW, BCMOLT_MGT_GROUP_CFG, 0, sizeof(bcmolt_gpon_iwf_ds_egress_flow_cfg_data), sizeof(bcmolt_gpon_iwf_ds_egress_flow_cfg), offsetof(bcmolt_gpon_iwf_ds_egress_flow_cfg, data), (bcmolt_func_packed_len) bcmolt_gpon_iwf_ds_egress_flow_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_iwf_ds_egress_flow_cfg_data_pack, (bcmolt_func_unpack) bcmolt_gpon_iwf_ds_egress_flow_cfg_data_unpack, bcmolt_gpon_iwf_ds_egress_flow_cfg_data_scan };
+static bcmolt_group_info group_info_gpon_iwf_ds_ingress_flow_key = { BCMOLT_OBJ_ID_GPON_IWF_DS_INGRESS_FLOW, BCMOLT_MGT_GROUP_KEY, 0, sizeof(bcmolt_gpon_iwf_ds_ingress_flow_key), 0, 0, (bcmolt_func_packed_len) bcmolt_gpon_iwf_ds_ingress_flow_key_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_iwf_ds_ingress_flow_key_pack, (bcmolt_func_unpack) bcmolt_gpon_iwf_ds_ingress_flow_key_unpack, bcmolt_gpon_iwf_ds_ingress_flow_key_scan };
+static bcmolt_group_info group_info_gpon_iwf_ds_ingress_flow_cfg = { BCMOLT_OBJ_ID_GPON_IWF_DS_INGRESS_FLOW, BCMOLT_MGT_GROUP_CFG, 0, sizeof(bcmolt_gpon_iwf_ds_ingress_flow_cfg_data), sizeof(bcmolt_gpon_iwf_ds_ingress_flow_cfg), offsetof(bcmolt_gpon_iwf_ds_ingress_flow_cfg, data), (bcmolt_func_packed_len) bcmolt_gpon_iwf_ds_ingress_flow_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_iwf_ds_ingress_flow_cfg_data_pack, (bcmolt_func_unpack) bcmolt_gpon_iwf_ds_ingress_flow_cfg_data_unpack, bcmolt_gpon_iwf_ds_ingress_flow_cfg_data_scan };
+static bcmolt_group_info group_info_gpon_iwf_mac_table_key = { BCMOLT_OBJ_ID_GPON_IWF_MAC_TABLE, BCMOLT_MGT_GROUP_KEY, 0, sizeof(bcmolt_gpon_iwf_mac_table_key), 0, 0, (bcmolt_func_packed_len) bcmolt_gpon_iwf_mac_table_key_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_iwf_mac_table_key_pack, (bcmolt_func_unpack) bcmolt_gpon_iwf_mac_table_key_unpack, bcmolt_gpon_iwf_mac_table_key_scan };
+static bcmolt_group_info group_info_gpon_iwf_mac_table_cfg = { BCMOLT_OBJ_ID_GPON_IWF_MAC_TABLE, BCMOLT_MGT_GROUP_CFG, 0, sizeof(bcmolt_gpon_iwf_mac_table_cfg_data), sizeof(bcmolt_gpon_iwf_mac_table_cfg), offsetof(bcmolt_gpon_iwf_mac_table_cfg, data), (bcmolt_func_packed_len) bcmolt_gpon_iwf_mac_table_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_iwf_mac_table_cfg_data_pack, (bcmolt_func_unpack) bcmolt_gpon_iwf_mac_table_cfg_data_unpack, bcmolt_gpon_iwf_mac_table_cfg_data_scan };
+static bcmolt_group_info group_info_gpon_iwf_mac_table_mac_aged = { BCMOLT_OBJ_ID_GPON_IWF_MAC_TABLE, BCMOLT_MGT_GROUP_AUTO, 0, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_gpon_iwf_mac_table_mac_dropped = { BCMOLT_OBJ_ID_GPON_IWF_MAC_TABLE, BCMOLT_MGT_GROUP_AUTO, 1, sizeof(bcmolt_gpon_iwf_mac_table_mac_dropped_data), sizeof(bcmolt_gpon_iwf_mac_table_mac_dropped), offsetof(bcmolt_gpon_iwf_mac_table_mac_dropped, data), (bcmolt_func_packed_len) bcmolt_gpon_iwf_mac_table_mac_dropped_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_iwf_mac_table_mac_dropped_data_pack, (bcmolt_func_unpack) bcmolt_gpon_iwf_mac_table_mac_dropped_data_unpack, bcmolt_gpon_iwf_mac_table_mac_dropped_data_scan };
+static bcmolt_group_info group_info_gpon_iwf_mac_table_mac_move = { BCMOLT_OBJ_ID_GPON_IWF_MAC_TABLE, BCMOLT_MGT_GROUP_AUTO, 2, sizeof(bcmolt_gpon_iwf_mac_table_mac_move_data), sizeof(bcmolt_gpon_iwf_mac_table_mac_move), offsetof(bcmolt_gpon_iwf_mac_table_mac_move, data), (bcmolt_func_packed_len) bcmolt_gpon_iwf_mac_table_mac_move_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_iwf_mac_table_mac_move_data_pack, (bcmolt_func_unpack) bcmolt_gpon_iwf_mac_table_mac_move_data_unpack, bcmolt_gpon_iwf_mac_table_mac_move_data_scan };
+static bcmolt_group_info group_info_gpon_iwf_mac_table_new_mac = { BCMOLT_OBJ_ID_GPON_IWF_MAC_TABLE, BCMOLT_MGT_GROUP_AUTO, 3, sizeof(bcmolt_gpon_iwf_mac_table_new_mac_data), sizeof(bcmolt_gpon_iwf_mac_table_new_mac), offsetof(bcmolt_gpon_iwf_mac_table_new_mac, data), (bcmolt_func_packed_len) bcmolt_gpon_iwf_mac_table_new_mac_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_iwf_mac_table_new_mac_data_pack, (bcmolt_func_unpack) bcmolt_gpon_iwf_mac_table_new_mac_data_unpack, bcmolt_gpon_iwf_mac_table_new_mac_data_scan };
+static bcmolt_group_info group_info_gpon_iwf_mac_table_auto_cfg = { BCMOLT_OBJ_ID_GPON_IWF_MAC_TABLE, BCMOLT_MGT_GROUP_AUTO_CFG, 0, sizeof(bcmolt_gpon_iwf_mac_table_auto_cfg_data), sizeof(bcmolt_gpon_iwf_mac_table_auto_cfg), offsetof(bcmolt_gpon_iwf_mac_table_auto_cfg, data), (bcmolt_func_packed_len) bcmolt_gpon_iwf_mac_table_auto_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_iwf_mac_table_auto_cfg_data_pack, (bcmolt_func_unpack) bcmolt_gpon_iwf_mac_table_auto_cfg_data_unpack, bcmolt_gpon_iwf_mac_table_auto_cfg_data_scan };
+static bcmolt_group_info group_info_gpon_iwf_us_flow_key = { BCMOLT_OBJ_ID_GPON_IWF_US_FLOW, BCMOLT_MGT_GROUP_KEY, 0, sizeof(bcmolt_gpon_iwf_us_flow_key), 0, 0, (bcmolt_func_packed_len) bcmolt_gpon_iwf_us_flow_key_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_iwf_us_flow_key_pack, (bcmolt_func_unpack) bcmolt_gpon_iwf_us_flow_key_unpack, bcmolt_gpon_iwf_us_flow_key_scan };
+static bcmolt_group_info group_info_gpon_iwf_us_flow_cfg = { BCMOLT_OBJ_ID_GPON_IWF_US_FLOW, BCMOLT_MGT_GROUP_CFG, 0, sizeof(bcmolt_gpon_iwf_us_flow_cfg_data), sizeof(bcmolt_gpon_iwf_us_flow_cfg), offsetof(bcmolt_gpon_iwf_us_flow_cfg, data), (bcmolt_func_packed_len) bcmolt_gpon_iwf_us_flow_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_iwf_us_flow_cfg_data_pack, (bcmolt_func_unpack) bcmolt_gpon_iwf_us_flow_cfg_data_unpack, bcmolt_gpon_iwf_us_flow_cfg_data_scan };
+static bcmolt_group_info group_info_gpon_ni_key = { BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_KEY, 0, sizeof(bcmolt_gpon_ni_key), 0, 0, (bcmolt_func_packed_len) bcmolt_gpon_ni_key_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_ni_key_pack, (bcmolt_func_unpack) bcmolt_gpon_ni_key_unpack, bcmolt_gpon_ni_key_scan };
+static bcmolt_group_info group_info_gpon_ni_cfg = { BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, sizeof(bcmolt_gpon_ni_cfg_data), sizeof(bcmolt_gpon_ni_cfg), offsetof(bcmolt_gpon_ni_cfg, data), (bcmolt_func_packed_len) bcmolt_gpon_ni_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_ni_cfg_data_pack, (bcmolt_func_unpack) bcmolt_gpon_ni_cfg_data_unpack, bcmolt_gpon_ni_cfg_data_scan };
+static bcmolt_group_info group_info_gpon_ni_stat = { BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_STAT, 0, sizeof(bcmolt_gpon_ni_stat_data), sizeof(bcmolt_gpon_ni_stat), offsetof(bcmolt_gpon_ni_stat, data), (bcmolt_func_packed_len) bcmolt_gpon_ni_stat_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_ni_stat_data_pack, (bcmolt_func_unpack) bcmolt_gpon_ni_stat_data_unpack, bcmolt_gpon_ni_stat_data_scan };
+static bcmolt_group_info group_info_gpon_ni_stat_cfg = { BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_STAT_CFG, 0, sizeof(bcmolt_gpon_ni_stat_cfg_data), sizeof(bcmolt_gpon_ni_stat_cfg), offsetof(bcmolt_gpon_ni_stat_cfg, data), (bcmolt_func_packed_len) bcmolt_gpon_ni_stat_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_ni_stat_cfg_data_pack, (bcmolt_func_unpack) bcmolt_gpon_ni_stat_cfg_data_unpack, bcmolt_gpon_ni_stat_cfg_data_scan };
+static bcmolt_group_info group_info_gpon_ni_activate_all_onus_completed = { BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_AUTO, 0, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_gpon_ni_cpu_packets_failure = { BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_AUTO, 1, sizeof(bcmolt_gpon_ni_cpu_packets_failure_data), sizeof(bcmolt_gpon_ni_cpu_packets_failure), offsetof(bcmolt_gpon_ni_cpu_packets_failure, data), (bcmolt_func_packed_len) bcmolt_gpon_ni_cpu_packets_failure_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_ni_cpu_packets_failure_data_pack, (bcmolt_func_unpack) bcmolt_gpon_ni_cpu_packets_failure_data_unpack, bcmolt_gpon_ni_cpu_packets_failure_data_scan };
+static bcmolt_group_info group_info_gpon_ni_deactivate_all_onus_completed = { BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_AUTO, 2, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_gpon_ni_disable_all_onus_completed = { BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_AUTO, 3, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_gpon_ni_enable_all_onus_completed = { BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_AUTO, 4, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_gpon_ni_los = { BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_AUTO, 5, sizeof(bcmolt_gpon_ni_los_data), sizeof(bcmolt_gpon_ni_los), offsetof(bcmolt_gpon_ni_los, data), (bcmolt_func_packed_len) bcmolt_gpon_ni_los_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_ni_los_data_pack, (bcmolt_func_unpack) bcmolt_gpon_ni_los_data_unpack, bcmolt_gpon_ni_los_data_scan };
+static bcmolt_group_info group_info_gpon_ni_onu_discovered = { BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_AUTO, 6, sizeof(bcmolt_gpon_ni_onu_discovered_data), sizeof(bcmolt_gpon_ni_onu_discovered), offsetof(bcmolt_gpon_ni_onu_discovered, data), (bcmolt_func_packed_len) bcmolt_gpon_ni_onu_discovered_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_ni_onu_discovered_data_pack, (bcmolt_func_unpack) bcmolt_gpon_ni_onu_discovered_data_unpack, bcmolt_gpon_ni_onu_discovered_data_scan };
+static bcmolt_group_info group_info_gpon_ni_onu_upgrade_complete = { BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_AUTO, 7, sizeof(bcmolt_gpon_ni_onu_upgrade_complete_data), sizeof(bcmolt_gpon_ni_onu_upgrade_complete), offsetof(bcmolt_gpon_ni_onu_upgrade_complete, data), (bcmolt_func_packed_len) bcmolt_gpon_ni_onu_upgrade_complete_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_ni_onu_upgrade_complete_data_pack, (bcmolt_func_unpack) bcmolt_gpon_ni_onu_upgrade_complete_data_unpack, bcmolt_gpon_ni_onu_upgrade_complete_data_scan };
+static bcmolt_group_info group_info_gpon_ni_protection_switching_onus_ranged = { BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_AUTO, 8, sizeof(bcmolt_gpon_ni_protection_switching_onus_ranged_data), sizeof(bcmolt_gpon_ni_protection_switching_onus_ranged), offsetof(bcmolt_gpon_ni_protection_switching_onus_ranged, data), (bcmolt_func_packed_len) bcmolt_gpon_ni_protection_switching_onus_ranged_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_ni_protection_switching_onus_ranged_data_pack, (bcmolt_func_unpack) bcmolt_gpon_ni_protection_switching_onus_ranged_data_unpack, bcmolt_gpon_ni_protection_switching_onus_ranged_data_scan };
+static bcmolt_group_info group_info_gpon_ni_protection_switching_switchover_completed = { BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_AUTO, 9, sizeof(bcmolt_gpon_ni_protection_switching_switchover_completed_data), sizeof(bcmolt_gpon_ni_protection_switching_switchover_completed), offsetof(bcmolt_gpon_ni_protection_switching_switchover_completed, data), (bcmolt_func_packed_len) bcmolt_gpon_ni_protection_switching_switchover_completed_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_ni_protection_switching_switchover_completed_data_pack, (bcmolt_func_unpack) bcmolt_gpon_ni_protection_switching_switchover_completed_data_unpack, bcmolt_gpon_ni_protection_switching_switchover_completed_data_scan };
+static bcmolt_group_info group_info_gpon_ni_protection_switching_traffic_resume = { BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_AUTO, 10, sizeof(bcmolt_gpon_ni_protection_switching_traffic_resume_data), sizeof(bcmolt_gpon_ni_protection_switching_traffic_resume), offsetof(bcmolt_gpon_ni_protection_switching_traffic_resume, data), (bcmolt_func_packed_len) bcmolt_gpon_ni_protection_switching_traffic_resume_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_ni_protection_switching_traffic_resume_data_pack, (bcmolt_func_unpack) bcmolt_gpon_ni_protection_switching_traffic_resume_data_unpack, bcmolt_gpon_ni_protection_switching_traffic_resume_data_scan };
+static bcmolt_group_info group_info_gpon_ni_rogue_detection_completed = { BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_AUTO, 11, sizeof(bcmolt_gpon_ni_rogue_detection_completed_data), sizeof(bcmolt_gpon_ni_rogue_detection_completed), offsetof(bcmolt_gpon_ni_rogue_detection_completed, data), (bcmolt_func_packed_len) bcmolt_gpon_ni_rogue_detection_completed_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_ni_rogue_detection_completed_data_pack, (bcmolt_func_unpack) bcmolt_gpon_ni_rogue_detection_completed_data_unpack, bcmolt_gpon_ni_rogue_detection_completed_data_scan };
+static bcmolt_group_info group_info_gpon_ni_rogue_onu_special_map_cycle_start = { BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_AUTO, 12, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_gpon_ni_serial_number_acquisition_cycle_start = { BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_AUTO, 13, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_gpon_ni_standby_pon_monitoring_cycle_completed = { BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_AUTO, 14, sizeof(bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data), sizeof(bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed), offsetof(bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed, data), (bcmolt_func_packed_len) bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data_pack, (bcmolt_func_unpack) bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data_unpack, bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data_scan };
+static bcmolt_group_info group_info_gpon_ni_stat_alarm_cleared = { BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_AUTO, 15, sizeof(bcmolt_gpon_ni_stat_alarm_cleared_data), sizeof(bcmolt_gpon_ni_stat_alarm_cleared), offsetof(bcmolt_gpon_ni_stat_alarm_cleared, data), (bcmolt_func_packed_len) bcmolt_gpon_ni_stat_alarm_cleared_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_ni_stat_alarm_cleared_data_pack, (bcmolt_func_unpack) bcmolt_gpon_ni_stat_alarm_cleared_data_unpack, bcmolt_gpon_ni_stat_alarm_cleared_data_scan };
+static bcmolt_group_info group_info_gpon_ni_stat_alarm_raised = { BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_AUTO, 16, sizeof(bcmolt_gpon_ni_stat_alarm_raised_data), sizeof(bcmolt_gpon_ni_stat_alarm_raised), offsetof(bcmolt_gpon_ni_stat_alarm_raised, data), (bcmolt_func_packed_len) bcmolt_gpon_ni_stat_alarm_raised_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_ni_stat_alarm_raised_data_pack, (bcmolt_func_unpack) bcmolt_gpon_ni_stat_alarm_raised_data_unpack, bcmolt_gpon_ni_stat_alarm_raised_data_scan };
+static bcmolt_group_info group_info_gpon_ni_state_change_completed = { BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_AUTO, 17, sizeof(bcmolt_gpon_ni_state_change_completed_data), sizeof(bcmolt_gpon_ni_state_change_completed), offsetof(bcmolt_gpon_ni_state_change_completed, data), (bcmolt_func_packed_len) bcmolt_gpon_ni_state_change_completed_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_ni_state_change_completed_data_pack, (bcmolt_func_unpack) bcmolt_gpon_ni_state_change_completed_data_unpack, bcmolt_gpon_ni_state_change_completed_data_scan };
+static bcmolt_group_info group_info_gpon_ni_tod_request_completed = { BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_AUTO, 18, sizeof(bcmolt_gpon_ni_tod_request_completed_data), sizeof(bcmolt_gpon_ni_tod_request_completed), offsetof(bcmolt_gpon_ni_tod_request_completed, data), (bcmolt_func_packed_len) bcmolt_gpon_ni_tod_request_completed_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_ni_tod_request_completed_data_pack, (bcmolt_func_unpack) bcmolt_gpon_ni_tod_request_completed_data_unpack, bcmolt_gpon_ni_tod_request_completed_data_scan };
+static bcmolt_group_info group_info_gpon_ni_auto_cfg = { BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, sizeof(bcmolt_gpon_ni_auto_cfg_data), sizeof(bcmolt_gpon_ni_auto_cfg), offsetof(bcmolt_gpon_ni_auto_cfg, data), (bcmolt_func_packed_len) bcmolt_gpon_ni_auto_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_ni_auto_cfg_data_pack, (bcmolt_func_unpack) bcmolt_gpon_ni_auto_cfg_data_unpack, bcmolt_gpon_ni_auto_cfg_data_scan };
+static bcmolt_group_info group_info_gpon_ni_disable_serial_number = { BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_OPER, 0, sizeof(bcmolt_gpon_ni_disable_serial_number_data), sizeof(bcmolt_gpon_ni_disable_serial_number), offsetof(bcmolt_gpon_ni_disable_serial_number, data), (bcmolt_func_packed_len) bcmolt_gpon_ni_disable_serial_number_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_ni_disable_serial_number_data_pack, (bcmolt_func_unpack) bcmolt_gpon_ni_disable_serial_number_data_unpack, bcmolt_gpon_ni_disable_serial_number_data_scan };
+static bcmolt_group_info group_info_gpon_ni_protection_switching_type_c_set_multiple_onu_state = { BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_OPER, 1, sizeof(bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data), sizeof(bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state), offsetof(bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state, data), (bcmolt_func_packed_len) bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data_pack, (bcmolt_func_unpack) bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data_unpack, bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data_scan };
+static bcmolt_group_info group_info_gpon_ni_reset = { BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_OPER, 2, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_gpon_ni_rogue_detection_window = { BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_OPER, 3, sizeof(bcmolt_gpon_ni_rogue_detection_window_data), sizeof(bcmolt_gpon_ni_rogue_detection_window), offsetof(bcmolt_gpon_ni_rogue_detection_window, data), (bcmolt_func_packed_len) bcmolt_gpon_ni_rogue_detection_window_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_ni_rogue_detection_window_data_pack, (bcmolt_func_unpack) bcmolt_gpon_ni_rogue_detection_window_data_unpack, bcmolt_gpon_ni_rogue_detection_window_data_scan };
+static bcmolt_group_info group_info_gpon_ni_set_onu_state = { BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_OPER, 4, sizeof(bcmolt_gpon_ni_set_onu_state_data), sizeof(bcmolt_gpon_ni_set_onu_state), offsetof(bcmolt_gpon_ni_set_onu_state, data), (bcmolt_func_packed_len) bcmolt_gpon_ni_set_onu_state_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_ni_set_onu_state_data_pack, (bcmolt_func_unpack) bcmolt_gpon_ni_set_onu_state_data_unpack, bcmolt_gpon_ni_set_onu_state_data_scan };
+static bcmolt_group_info group_info_gpon_ni_set_pon_state = { BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_OPER, 5, sizeof(bcmolt_gpon_ni_set_pon_state_data), sizeof(bcmolt_gpon_ni_set_pon_state), offsetof(bcmolt_gpon_ni_set_pon_state, data), (bcmolt_func_packed_len) bcmolt_gpon_ni_set_pon_state_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_ni_set_pon_state_data_pack, (bcmolt_func_unpack) bcmolt_gpon_ni_set_pon_state_data_unpack, bcmolt_gpon_ni_set_pon_state_data_scan };
+static bcmolt_group_info group_info_gpon_ni_single_request_standby_pon_monitoring = { BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_OPER, 6, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_gpon_ni_start_onu_upgrade = { BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_OPER, 7, sizeof(bcmolt_gpon_ni_start_onu_upgrade_data), sizeof(bcmolt_gpon_ni_start_onu_upgrade), offsetof(bcmolt_gpon_ni_start_onu_upgrade, data), (bcmolt_func_packed_len) bcmolt_gpon_ni_start_onu_upgrade_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_ni_start_onu_upgrade_data_pack, (bcmolt_func_unpack) bcmolt_gpon_ni_start_onu_upgrade_data_unpack, bcmolt_gpon_ni_start_onu_upgrade_data_scan };
+static bcmolt_group_info group_info_gpon_ni_tod_request = { BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_OPER, 8, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_gpon_ni_broadcast_ploam_packet = { BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_PROXY, 0, sizeof(bcmolt_gpon_ni_broadcast_ploam_packet_data), sizeof(bcmolt_gpon_ni_broadcast_ploam_packet), offsetof(bcmolt_gpon_ni_broadcast_ploam_packet, data), (bcmolt_func_packed_len) bcmolt_gpon_ni_broadcast_ploam_packet_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_ni_broadcast_ploam_packet_data_pack, (bcmolt_func_unpack) bcmolt_gpon_ni_broadcast_ploam_packet_data_unpack, bcmolt_gpon_ni_broadcast_ploam_packet_data_scan };
+static bcmolt_group_info group_info_gpon_ni_cpu_packets = { BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_PROXY, 1, sizeof(bcmolt_gpon_ni_cpu_packets_data), sizeof(bcmolt_gpon_ni_cpu_packets), offsetof(bcmolt_gpon_ni_cpu_packets, data), (bcmolt_func_packed_len) bcmolt_gpon_ni_cpu_packets_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_ni_cpu_packets_data_pack, (bcmolt_func_unpack) bcmolt_gpon_ni_cpu_packets_data_unpack, bcmolt_gpon_ni_cpu_packets_data_scan };
+static bcmolt_group_info group_info_gpon_onu_key = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, sizeof(bcmolt_gpon_onu_key), 0, 0, (bcmolt_func_packed_len) bcmolt_gpon_onu_key_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_onu_key_pack, (bcmolt_func_unpack) bcmolt_gpon_onu_key_unpack, bcmolt_gpon_onu_key_scan };
+static bcmolt_group_info group_info_gpon_onu_cfg = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, sizeof(bcmolt_gpon_onu_cfg_data), sizeof(bcmolt_gpon_onu_cfg), offsetof(bcmolt_gpon_onu_cfg, data), (bcmolt_func_packed_len) bcmolt_gpon_onu_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_onu_cfg_data_pack, (bcmolt_func_unpack) bcmolt_gpon_onu_cfg_data_unpack, bcmolt_gpon_onu_cfg_data_scan };
+static bcmolt_group_info group_info_gpon_onu_stat = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_STAT, 0, sizeof(bcmolt_gpon_onu_stat_data), sizeof(bcmolt_gpon_onu_stat), offsetof(bcmolt_gpon_onu_stat, data), (bcmolt_func_packed_len) bcmolt_gpon_onu_stat_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_onu_stat_data_pack, (bcmolt_func_unpack) bcmolt_gpon_onu_stat_data_unpack, bcmolt_gpon_onu_stat_data_scan };
+static bcmolt_group_info group_info_gpon_onu_stat_cfg = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_STAT_CFG, 0, sizeof(bcmolt_gpon_onu_stat_cfg_data), sizeof(bcmolt_gpon_onu_stat_cfg), offsetof(bcmolt_gpon_onu_stat_cfg, data), (bcmolt_func_packed_len) bcmolt_gpon_onu_stat_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_onu_stat_cfg_data_pack, (bcmolt_func_unpack) bcmolt_gpon_onu_stat_cfg_data_unpack, bcmolt_gpon_onu_stat_cfg_data_scan };
+static bcmolt_group_info group_info_gpon_onu_ber_interval_configuration_completed = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO, 0, sizeof(bcmolt_gpon_onu_ber_interval_configuration_completed_data), sizeof(bcmolt_gpon_onu_ber_interval_configuration_completed), offsetof(bcmolt_gpon_onu_ber_interval_configuration_completed, data), (bcmolt_func_packed_len) bcmolt_gpon_onu_ber_interval_configuration_completed_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_onu_ber_interval_configuration_completed_data_pack, (bcmolt_func_unpack) bcmolt_gpon_onu_ber_interval_configuration_completed_data_unpack, bcmolt_gpon_onu_ber_interval_configuration_completed_data_scan };
+static bcmolt_group_info group_info_gpon_onu_dfi = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO, 1, sizeof(bcmolt_gpon_onu_dfi_data), sizeof(bcmolt_gpon_onu_dfi), offsetof(bcmolt_gpon_onu_dfi, data), (bcmolt_func_packed_len) bcmolt_gpon_onu_dfi_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_onu_dfi_data_pack, (bcmolt_func_unpack) bcmolt_gpon_onu_dfi_data_unpack, bcmolt_gpon_onu_dfi_data_scan };
+static bcmolt_group_info group_info_gpon_onu_dgi = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO, 2, sizeof(bcmolt_gpon_onu_dgi_data), sizeof(bcmolt_gpon_onu_dgi), offsetof(bcmolt_gpon_onu_dgi, data), (bcmolt_func_packed_len) bcmolt_gpon_onu_dgi_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_onu_dgi_data_pack, (bcmolt_func_unpack) bcmolt_gpon_onu_dgi_data_unpack, bcmolt_gpon_onu_dgi_data_scan };
+static bcmolt_group_info group_info_gpon_onu_dowi = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO, 3, sizeof(bcmolt_gpon_onu_dowi_data), sizeof(bcmolt_gpon_onu_dowi), offsetof(bcmolt_gpon_onu_dowi, data), (bcmolt_func_packed_len) bcmolt_gpon_onu_dowi_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_onu_dowi_data_pack, (bcmolt_func_unpack) bcmolt_gpon_onu_dowi_data_unpack, bcmolt_gpon_onu_dowi_data_scan };
+static bcmolt_group_info group_info_gpon_onu_err = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO, 4, sizeof(bcmolt_gpon_onu_err_data), sizeof(bcmolt_gpon_onu_err), offsetof(bcmolt_gpon_onu_err, data), (bcmolt_func_packed_len) bcmolt_gpon_onu_err_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_onu_err_data_pack, (bcmolt_func_unpack) bcmolt_gpon_onu_err_data_unpack, bcmolt_gpon_onu_err_data_scan };
+static bcmolt_group_info group_info_gpon_onu_invalid_dbru_report = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO, 5, sizeof(bcmolt_gpon_onu_invalid_dbru_report_data), sizeof(bcmolt_gpon_onu_invalid_dbru_report), offsetof(bcmolt_gpon_onu_invalid_dbru_report, data), (bcmolt_func_packed_len) bcmolt_gpon_onu_invalid_dbru_report_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_onu_invalid_dbru_report_data_pack, (bcmolt_func_unpack) bcmolt_gpon_onu_invalid_dbru_report_data_unpack, bcmolt_gpon_onu_invalid_dbru_report_data_scan };
+static bcmolt_group_info group_info_gpon_onu_key_exchange_completed = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO, 6, sizeof(bcmolt_gpon_onu_key_exchange_completed_data), sizeof(bcmolt_gpon_onu_key_exchange_completed), offsetof(bcmolt_gpon_onu_key_exchange_completed, data), (bcmolt_func_packed_len) bcmolt_gpon_onu_key_exchange_completed_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_onu_key_exchange_completed_data_pack, (bcmolt_func_unpack) bcmolt_gpon_onu_key_exchange_completed_data_unpack, bcmolt_gpon_onu_key_exchange_completed_data_scan };
+static bcmolt_group_info group_info_gpon_onu_key_exchange_cycle_skipped = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO, 7, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_gpon_onu_key_exchange_decrypt_required = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO, 8, sizeof(bcmolt_gpon_onu_key_exchange_decrypt_required_data), sizeof(bcmolt_gpon_onu_key_exchange_decrypt_required), offsetof(bcmolt_gpon_onu_key_exchange_decrypt_required, data), (bcmolt_func_packed_len) bcmolt_gpon_onu_key_exchange_decrypt_required_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_onu_key_exchange_decrypt_required_data_pack, (bcmolt_func_unpack) bcmolt_gpon_onu_key_exchange_decrypt_required_data_unpack, bcmolt_gpon_onu_key_exchange_decrypt_required_data_scan };
+static bcmolt_group_info group_info_gpon_onu_key_exchange_key_mismatch = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO, 9, sizeof(bcmolt_gpon_onu_key_exchange_key_mismatch_data), sizeof(bcmolt_gpon_onu_key_exchange_key_mismatch), offsetof(bcmolt_gpon_onu_key_exchange_key_mismatch, data), (bcmolt_func_packed_len) bcmolt_gpon_onu_key_exchange_key_mismatch_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_onu_key_exchange_key_mismatch_data_pack, (bcmolt_func_unpack) bcmolt_gpon_onu_key_exchange_key_mismatch_data_unpack, bcmolt_gpon_onu_key_exchange_key_mismatch_data_scan };
+static bcmolt_group_info group_info_gpon_onu_key_exchange_key_request_timeout = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO, 10, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_gpon_onu_key_exchange_unconsecutive_index = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO, 11, sizeof(bcmolt_gpon_onu_key_exchange_unconsecutive_index_data), sizeof(bcmolt_gpon_onu_key_exchange_unconsecutive_index), offsetof(bcmolt_gpon_onu_key_exchange_unconsecutive_index, data), (bcmolt_func_packed_len) bcmolt_gpon_onu_key_exchange_unconsecutive_index_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_onu_key_exchange_unconsecutive_index_data_pack, (bcmolt_func_unpack) bcmolt_gpon_onu_key_exchange_unconsecutive_index_data_unpack, bcmolt_gpon_onu_key_exchange_unconsecutive_index_data_scan };
+static bcmolt_group_info group_info_gpon_onu_loai = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO, 12, sizeof(bcmolt_gpon_onu_loai_data), sizeof(bcmolt_gpon_onu_loai), offsetof(bcmolt_gpon_onu_loai, data), (bcmolt_func_packed_len) bcmolt_gpon_onu_loai_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_onu_loai_data_pack, (bcmolt_func_unpack) bcmolt_gpon_onu_loai_data_unpack, bcmolt_gpon_onu_loai_data_scan };
+static bcmolt_group_info group_info_gpon_onu_loki = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO, 13, sizeof(bcmolt_gpon_onu_loki_data), sizeof(bcmolt_gpon_onu_loki), offsetof(bcmolt_gpon_onu_loki, data), (bcmolt_func_packed_len) bcmolt_gpon_onu_loki_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_onu_loki_data_pack, (bcmolt_func_unpack) bcmolt_gpon_onu_loki_data_unpack, bcmolt_gpon_onu_loki_data_scan };
+static bcmolt_group_info group_info_gpon_onu_memi = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO, 14, sizeof(bcmolt_gpon_onu_memi_data), sizeof(bcmolt_gpon_onu_memi), offsetof(bcmolt_gpon_onu_memi, data), (bcmolt_func_packed_len) bcmolt_gpon_onu_memi_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_onu_memi_data_pack, (bcmolt_func_unpack) bcmolt_gpon_onu_memi_data_unpack, bcmolt_gpon_onu_memi_data_scan };
+static bcmolt_group_info group_info_gpon_onu_omci_port_id_configuration_completed = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO, 15, sizeof(bcmolt_gpon_onu_omci_port_id_configuration_completed_data), sizeof(bcmolt_gpon_onu_omci_port_id_configuration_completed), offsetof(bcmolt_gpon_onu_omci_port_id_configuration_completed, data), (bcmolt_func_packed_len) bcmolt_gpon_onu_omci_port_id_configuration_completed_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_onu_omci_port_id_configuration_completed_data_pack, (bcmolt_func_unpack) bcmolt_gpon_onu_omci_port_id_configuration_completed_data_unpack, bcmolt_gpon_onu_omci_port_id_configuration_completed_data_scan };
+static bcmolt_group_info group_info_gpon_onu_onu_activation_completed = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO, 16, sizeof(bcmolt_gpon_onu_onu_activation_completed_data), sizeof(bcmolt_gpon_onu_onu_activation_completed), offsetof(bcmolt_gpon_onu_onu_activation_completed, data), (bcmolt_func_packed_len) bcmolt_gpon_onu_onu_activation_completed_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_onu_onu_activation_completed_data_pack, (bcmolt_func_unpack) bcmolt_gpon_onu_onu_activation_completed_data_unpack, bcmolt_gpon_onu_onu_activation_completed_data_scan };
+static bcmolt_group_info group_info_gpon_onu_onu_activation_standby_completed = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO, 17, sizeof(bcmolt_gpon_onu_onu_activation_standby_completed_data), sizeof(bcmolt_gpon_onu_onu_activation_standby_completed), offsetof(bcmolt_gpon_onu_onu_activation_standby_completed, data), (bcmolt_func_packed_len) bcmolt_gpon_onu_onu_activation_standby_completed_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_onu_onu_activation_standby_completed_data_pack, (bcmolt_func_unpack) bcmolt_gpon_onu_onu_activation_standby_completed_data_unpack, bcmolt_gpon_onu_onu_activation_standby_completed_data_scan };
+static bcmolt_group_info group_info_gpon_onu_onu_alarm = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO, 18, sizeof(bcmolt_gpon_onu_onu_alarm_data), sizeof(bcmolt_gpon_onu_onu_alarm), offsetof(bcmolt_gpon_onu_onu_alarm, data), (bcmolt_func_packed_len) bcmolt_gpon_onu_onu_alarm_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_onu_onu_alarm_data_pack, (bcmolt_func_unpack) bcmolt_gpon_onu_onu_alarm_data_unpack, bcmolt_gpon_onu_onu_alarm_data_scan };
+static bcmolt_group_info group_info_gpon_onu_onu_deactivation_completed = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO, 19, sizeof(bcmolt_gpon_onu_onu_deactivation_completed_data), sizeof(bcmolt_gpon_onu_onu_deactivation_completed), offsetof(bcmolt_gpon_onu_onu_deactivation_completed, data), (bcmolt_func_packed_len) bcmolt_gpon_onu_onu_deactivation_completed_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_onu_onu_deactivation_completed_data_pack, (bcmolt_func_unpack) bcmolt_gpon_onu_onu_deactivation_completed_data_unpack, bcmolt_gpon_onu_onu_deactivation_completed_data_scan };
+static bcmolt_group_info group_info_gpon_onu_onu_disable_completed = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO, 20, sizeof(bcmolt_gpon_onu_onu_disable_completed_data), sizeof(bcmolt_gpon_onu_onu_disable_completed), offsetof(bcmolt_gpon_onu_onu_disable_completed, data), (bcmolt_func_packed_len) bcmolt_gpon_onu_onu_disable_completed_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_onu_onu_disable_completed_data_pack, (bcmolt_func_unpack) bcmolt_gpon_onu_onu_disable_completed_data_unpack, bcmolt_gpon_onu_onu_disable_completed_data_scan };
+static bcmolt_group_info group_info_gpon_onu_onu_enable_completed = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO, 21, sizeof(bcmolt_gpon_onu_onu_enable_completed_data), sizeof(bcmolt_gpon_onu_onu_enable_completed), offsetof(bcmolt_gpon_onu_onu_enable_completed, data), (bcmolt_func_packed_len) bcmolt_gpon_onu_onu_enable_completed_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_onu_onu_enable_completed_data_pack, (bcmolt_func_unpack) bcmolt_gpon_onu_onu_enable_completed_data_unpack, bcmolt_gpon_onu_onu_enable_completed_data_scan };
+static bcmolt_group_info group_info_gpon_onu_optical_reflection = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO, 22, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_gpon_onu_password_authentication_completed = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO, 23, sizeof(bcmolt_gpon_onu_password_authentication_completed_data), sizeof(bcmolt_gpon_onu_password_authentication_completed), offsetof(bcmolt_gpon_onu_password_authentication_completed, data), (bcmolt_func_packed_len) bcmolt_gpon_onu_password_authentication_completed_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_onu_password_authentication_completed_data_pack, (bcmolt_func_unpack) bcmolt_gpon_onu_password_authentication_completed_data_unpack, bcmolt_gpon_onu_password_authentication_completed_data_scan };
+static bcmolt_group_info group_info_gpon_onu_pee = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO, 24, sizeof(bcmolt_gpon_onu_pee_data), sizeof(bcmolt_gpon_onu_pee), offsetof(bcmolt_gpon_onu_pee, data), (bcmolt_func_packed_len) bcmolt_gpon_onu_pee_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_onu_pee_data_pack, (bcmolt_func_unpack) bcmolt_gpon_onu_pee_data_unpack, bcmolt_gpon_onu_pee_data_scan };
+static bcmolt_group_info group_info_gpon_onu_possible_drift = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO, 25, sizeof(bcmolt_gpon_onu_possible_drift_data), sizeof(bcmolt_gpon_onu_possible_drift), offsetof(bcmolt_gpon_onu_possible_drift, data), (bcmolt_func_packed_len) bcmolt_gpon_onu_possible_drift_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_onu_possible_drift_data_pack, (bcmolt_func_unpack) bcmolt_gpon_onu_possible_drift_data_unpack, bcmolt_gpon_onu_possible_drift_data_scan };
+static bcmolt_group_info group_info_gpon_onu_power_management_state_change = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO, 26, sizeof(bcmolt_gpon_onu_power_management_state_change_data), sizeof(bcmolt_gpon_onu_power_management_state_change), offsetof(bcmolt_gpon_onu_power_management_state_change, data), (bcmolt_func_packed_len) bcmolt_gpon_onu_power_management_state_change_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_onu_power_management_state_change_data_pack, (bcmolt_func_unpack) bcmolt_gpon_onu_power_management_state_change_data_unpack, bcmolt_gpon_onu_power_management_state_change_data_scan };
+static bcmolt_group_info group_info_gpon_onu_pst = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO, 27, sizeof(bcmolt_gpon_onu_pst_data), sizeof(bcmolt_gpon_onu_pst), offsetof(bcmolt_gpon_onu_pst, data), (bcmolt_func_packed_len) bcmolt_gpon_onu_pst_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_onu_pst_data_pack, (bcmolt_func_unpack) bcmolt_gpon_onu_pst_data_unpack, bcmolt_gpon_onu_pst_data_scan };
+static bcmolt_group_info group_info_gpon_onu_ranging_completed = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO, 28, sizeof(bcmolt_gpon_onu_ranging_completed_data), sizeof(bcmolt_gpon_onu_ranging_completed), offsetof(bcmolt_gpon_onu_ranging_completed, data), (bcmolt_func_packed_len) bcmolt_gpon_onu_ranging_completed_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_onu_ranging_completed_data_pack, (bcmolt_func_unpack) bcmolt_gpon_onu_ranging_completed_data_unpack, bcmolt_gpon_onu_ranging_completed_data_scan };
+static bcmolt_group_info group_info_gpon_onu_rei = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO, 29, sizeof(bcmolt_gpon_onu_rei_data), sizeof(bcmolt_gpon_onu_rei), offsetof(bcmolt_gpon_onu_rei, data), (bcmolt_func_packed_len) bcmolt_gpon_onu_rei_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_onu_rei_data_pack, (bcmolt_func_unpack) bcmolt_gpon_onu_rei_data_unpack, bcmolt_gpon_onu_rei_data_scan };
+static bcmolt_group_info group_info_gpon_onu_rssi_measurement_completed = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO, 30, sizeof(bcmolt_gpon_onu_rssi_measurement_completed_data), sizeof(bcmolt_gpon_onu_rssi_measurement_completed), offsetof(bcmolt_gpon_onu_rssi_measurement_completed, data), (bcmolt_func_packed_len) bcmolt_gpon_onu_rssi_measurement_completed_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_onu_rssi_measurement_completed_data_pack, (bcmolt_func_unpack) bcmolt_gpon_onu_rssi_measurement_completed_data_unpack, bcmolt_gpon_onu_rssi_measurement_completed_data_scan };
+static bcmolt_group_info group_info_gpon_onu_sdi = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO, 31, sizeof(bcmolt_gpon_onu_sdi_data), sizeof(bcmolt_gpon_onu_sdi), offsetof(bcmolt_gpon_onu_sdi, data), (bcmolt_func_packed_len) bcmolt_gpon_onu_sdi_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_onu_sdi_data_pack, (bcmolt_func_unpack) bcmolt_gpon_onu_sdi_data_unpack, bcmolt_gpon_onu_sdi_data_scan };
+static bcmolt_group_info group_info_gpon_onu_sfi = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO, 32, sizeof(bcmolt_gpon_onu_sfi_data), sizeof(bcmolt_gpon_onu_sfi), offsetof(bcmolt_gpon_onu_sfi, data), (bcmolt_func_packed_len) bcmolt_gpon_onu_sfi_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_onu_sfi_data_pack, (bcmolt_func_unpack) bcmolt_gpon_onu_sfi_data_unpack, bcmolt_gpon_onu_sfi_data_scan };
+static bcmolt_group_info group_info_gpon_onu_stat_alarm_cleared = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO, 33, sizeof(bcmolt_gpon_onu_stat_alarm_cleared_data), sizeof(bcmolt_gpon_onu_stat_alarm_cleared), offsetof(bcmolt_gpon_onu_stat_alarm_cleared, data), (bcmolt_func_packed_len) bcmolt_gpon_onu_stat_alarm_cleared_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_onu_stat_alarm_cleared_data_pack, (bcmolt_func_unpack) bcmolt_gpon_onu_stat_alarm_cleared_data_unpack, bcmolt_gpon_onu_stat_alarm_cleared_data_scan };
+static bcmolt_group_info group_info_gpon_onu_stat_alarm_raised = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO, 34, sizeof(bcmolt_gpon_onu_stat_alarm_raised_data), sizeof(bcmolt_gpon_onu_stat_alarm_raised), offsetof(bcmolt_gpon_onu_stat_alarm_raised, data), (bcmolt_func_packed_len) bcmolt_gpon_onu_stat_alarm_raised_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_onu_stat_alarm_raised_data_pack, (bcmolt_func_unpack) bcmolt_gpon_onu_stat_alarm_raised_data_unpack, bcmolt_gpon_onu_stat_alarm_raised_data_scan };
+static bcmolt_group_info group_info_gpon_onu_sufi = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO, 35, sizeof(bcmolt_gpon_onu_sufi_data), sizeof(bcmolt_gpon_onu_sufi), offsetof(bcmolt_gpon_onu_sufi, data), (bcmolt_func_packed_len) bcmolt_gpon_onu_sufi_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_onu_sufi_data_pack, (bcmolt_func_unpack) bcmolt_gpon_onu_sufi_data_unpack, bcmolt_gpon_onu_sufi_data_scan };
+static bcmolt_group_info group_info_gpon_onu_tiwi = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO, 36, sizeof(bcmolt_gpon_onu_tiwi_data), sizeof(bcmolt_gpon_onu_tiwi), offsetof(bcmolt_gpon_onu_tiwi, data), (bcmolt_func_packed_len) bcmolt_gpon_onu_tiwi_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_onu_tiwi_data_pack, (bcmolt_func_unpack) bcmolt_gpon_onu_tiwi_data_unpack, bcmolt_gpon_onu_tiwi_data_scan };
+static bcmolt_group_info group_info_gpon_onu_auto_cfg = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, sizeof(bcmolt_gpon_onu_auto_cfg_data), sizeof(bcmolt_gpon_onu_auto_cfg), offsetof(bcmolt_gpon_onu_auto_cfg, data), (bcmolt_func_packed_len) bcmolt_gpon_onu_auto_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_onu_auto_cfg_data_pack, (bcmolt_func_unpack) bcmolt_gpon_onu_auto_cfg_data_unpack, bcmolt_gpon_onu_auto_cfg_data_scan };
+static bcmolt_group_info group_info_gpon_onu_change_power_level = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_OPER, 0, sizeof(bcmolt_gpon_onu_change_power_level_data), sizeof(bcmolt_gpon_onu_change_power_level), offsetof(bcmolt_gpon_onu_change_power_level, data), (bcmolt_func_packed_len) bcmolt_gpon_onu_change_power_level_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_onu_change_power_level_data_pack, (bcmolt_func_unpack) bcmolt_gpon_onu_change_power_level_data_unpack, bcmolt_gpon_onu_change_power_level_data_scan };
+static bcmolt_group_info group_info_gpon_onu_rssi_measurement = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_OPER, 1, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_gpon_onu_set_onu_state = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_OPER, 2, sizeof(bcmolt_gpon_onu_set_onu_state_data), sizeof(bcmolt_gpon_onu_set_onu_state), offsetof(bcmolt_gpon_onu_set_onu_state, data), (bcmolt_func_packed_len) bcmolt_gpon_onu_set_onu_state_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_onu_set_onu_state_data_pack, (bcmolt_func_unpack) bcmolt_gpon_onu_set_onu_state_data_unpack, bcmolt_gpon_onu_set_onu_state_data_scan };
+static bcmolt_group_info group_info_gpon_onu_cpu_packets = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_PROXY, 0, sizeof(bcmolt_gpon_onu_cpu_packets_data), sizeof(bcmolt_gpon_onu_cpu_packets), offsetof(bcmolt_gpon_onu_cpu_packets, data), (bcmolt_func_packed_len) bcmolt_gpon_onu_cpu_packets_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_onu_cpu_packets_data_pack, (bcmolt_func_unpack) bcmolt_gpon_onu_cpu_packets_data_unpack, bcmolt_gpon_onu_cpu_packets_data_scan };
+static bcmolt_group_info group_info_gpon_onu_ploam_packet = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_PROXY, 1, sizeof(bcmolt_gpon_onu_ploam_packet_data), sizeof(bcmolt_gpon_onu_ploam_packet), offsetof(bcmolt_gpon_onu_ploam_packet, data), (bcmolt_func_packed_len) bcmolt_gpon_onu_ploam_packet_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_onu_ploam_packet_data_pack, (bcmolt_func_unpack) bcmolt_gpon_onu_ploam_packet_data_unpack, bcmolt_gpon_onu_ploam_packet_data_scan };
+static bcmolt_group_info group_info_gpon_onu_cpu_packet = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_PROXY_RX, 0, sizeof(bcmolt_gpon_onu_cpu_packet_data), sizeof(bcmolt_gpon_onu_cpu_packet), offsetof(bcmolt_gpon_onu_cpu_packet, data), (bcmolt_func_packed_len) bcmolt_gpon_onu_cpu_packet_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_onu_cpu_packet_data_pack, (bcmolt_func_unpack) bcmolt_gpon_onu_cpu_packet_data_unpack, bcmolt_gpon_onu_cpu_packet_data_scan };
+static bcmolt_group_info group_info_gpon_onu_omci_packet = { BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_PROXY_RX, 1, sizeof(bcmolt_gpon_onu_omci_packet_data), sizeof(bcmolt_gpon_onu_omci_packet), offsetof(bcmolt_gpon_onu_omci_packet, data), (bcmolt_func_packed_len) bcmolt_gpon_onu_omci_packet_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_onu_omci_packet_data_pack, (bcmolt_func_unpack) bcmolt_gpon_onu_omci_packet_data_unpack, bcmolt_gpon_onu_omci_packet_data_scan };
+static bcmolt_group_info group_info_gpon_trx_key = { BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_KEY, 0, sizeof(bcmolt_gpon_trx_key), 0, 0, (bcmolt_func_packed_len) bcmolt_gpon_trx_key_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_trx_key_pack, (bcmolt_func_unpack) bcmolt_gpon_trx_key_unpack, bcmolt_gpon_trx_key_scan };
+static bcmolt_group_info group_info_gpon_trx_cfg = { BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, sizeof(bcmolt_gpon_trx_cfg_data), sizeof(bcmolt_gpon_trx_cfg), offsetof(bcmolt_gpon_trx_cfg, data), (bcmolt_func_packed_len) bcmolt_gpon_trx_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_gpon_trx_cfg_data_pack, (bcmolt_func_unpack) bcmolt_gpon_trx_cfg_data_unpack, bcmolt_gpon_trx_cfg_data_scan };
+static bcmolt_group_info group_info_log_entry_key = { BCMOLT_OBJ_ID_LOG_ENTRY, BCMOLT_MGT_GROUP_KEY, 0, sizeof(bcmolt_log_entry_key), 0, 0, (bcmolt_func_packed_len) bcmolt_log_entry_key_get_packed_length, (bcmolt_func_pack) bcmolt_log_entry_key_pack, (bcmolt_func_unpack) bcmolt_log_entry_key_unpack, bcmolt_log_entry_key_scan };
+static bcmolt_group_info group_info_log_entry_cfg = { BCMOLT_OBJ_ID_LOG_ENTRY, BCMOLT_MGT_GROUP_CFG, 0, sizeof(bcmolt_log_entry_cfg_data), sizeof(bcmolt_log_entry_cfg), offsetof(bcmolt_log_entry_cfg, data), (bcmolt_func_packed_len) bcmolt_log_entry_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_log_entry_cfg_data_pack, (bcmolt_func_unpack) bcmolt_log_entry_cfg_data_unpack, bcmolt_log_entry_cfg_data_scan };
+static bcmolt_group_info group_info_log_entry_stat = { BCMOLT_OBJ_ID_LOG_ENTRY, BCMOLT_MGT_GROUP_STAT, 0, sizeof(bcmolt_log_entry_stat_data), sizeof(bcmolt_log_entry_stat), offsetof(bcmolt_log_entry_stat, data), (bcmolt_func_packed_len) bcmolt_log_entry_stat_data_get_packed_length, (bcmolt_func_pack) bcmolt_log_entry_stat_data_pack, (bcmolt_func_unpack) bcmolt_log_entry_stat_data_unpack, bcmolt_log_entry_stat_data_scan };
+static bcmolt_group_info group_info_log_entry_stat_cfg = { BCMOLT_OBJ_ID_LOG_ENTRY, BCMOLT_MGT_GROUP_STAT_CFG, 0, sizeof(bcmolt_log_entry_stat_cfg_data), sizeof(bcmolt_log_entry_stat_cfg), offsetof(bcmolt_log_entry_stat_cfg, data), (bcmolt_func_packed_len) bcmolt_log_entry_stat_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_log_entry_stat_cfg_data_pack, (bcmolt_func_unpack) bcmolt_log_entry_stat_cfg_data_unpack, bcmolt_log_entry_stat_cfg_data_scan };
+static bcmolt_group_info group_info_log_entry_stat_alarm_cleared = { BCMOLT_OBJ_ID_LOG_ENTRY, BCMOLT_MGT_GROUP_AUTO, 0, sizeof(bcmolt_log_entry_stat_alarm_cleared_data), sizeof(bcmolt_log_entry_stat_alarm_cleared), offsetof(bcmolt_log_entry_stat_alarm_cleared, data), (bcmolt_func_packed_len) bcmolt_log_entry_stat_alarm_cleared_data_get_packed_length, (bcmolt_func_pack) bcmolt_log_entry_stat_alarm_cleared_data_pack, (bcmolt_func_unpack) bcmolt_log_entry_stat_alarm_cleared_data_unpack, bcmolt_log_entry_stat_alarm_cleared_data_scan };
+static bcmolt_group_info group_info_log_entry_stat_alarm_raised = { BCMOLT_OBJ_ID_LOG_ENTRY, BCMOLT_MGT_GROUP_AUTO, 1, sizeof(bcmolt_log_entry_stat_alarm_raised_data), sizeof(bcmolt_log_entry_stat_alarm_raised), offsetof(bcmolt_log_entry_stat_alarm_raised, data), (bcmolt_func_packed_len) bcmolt_log_entry_stat_alarm_raised_data_get_packed_length, (bcmolt_func_pack) bcmolt_log_entry_stat_alarm_raised_data_pack, (bcmolt_func_unpack) bcmolt_log_entry_stat_alarm_raised_data_unpack, bcmolt_log_entry_stat_alarm_raised_data_scan };
+static bcmolt_group_info group_info_log_entry_auto_cfg = { BCMOLT_OBJ_ID_LOG_ENTRY, BCMOLT_MGT_GROUP_AUTO_CFG, 0, sizeof(bcmolt_log_entry_auto_cfg_data), sizeof(bcmolt_log_entry_auto_cfg), offsetof(bcmolt_log_entry_auto_cfg, data), (bcmolt_func_packed_len) bcmolt_log_entry_auto_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_log_entry_auto_cfg_data_pack, (bcmolt_func_unpack) bcmolt_log_entry_auto_cfg_data_unpack, bcmolt_log_entry_auto_cfg_data_scan };
+static bcmolt_group_info group_info_logger_key = { BCMOLT_OBJ_ID_LOGGER, BCMOLT_MGT_GROUP_KEY, 0, sizeof(bcmolt_logger_key), 0, 0, (bcmolt_func_packed_len) bcmolt_logger_key_get_packed_length, (bcmolt_func_pack) bcmolt_logger_key_pack, (bcmolt_func_unpack) bcmolt_logger_key_unpack, bcmolt_logger_key_scan };
+static bcmolt_group_info group_info_logger_cfg = { BCMOLT_OBJ_ID_LOGGER, BCMOLT_MGT_GROUP_CFG, 0, sizeof(bcmolt_logger_cfg_data), sizeof(bcmolt_logger_cfg), offsetof(bcmolt_logger_cfg, data), (bcmolt_func_packed_len) bcmolt_logger_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_logger_cfg_data_pack, (bcmolt_func_unpack) bcmolt_logger_cfg_data_unpack, bcmolt_logger_cfg_data_scan };
+static bcmolt_group_info group_info_logger_stat = { BCMOLT_OBJ_ID_LOGGER, BCMOLT_MGT_GROUP_STAT, 0, sizeof(bcmolt_logger_stat_data), sizeof(bcmolt_logger_stat), offsetof(bcmolt_logger_stat, data), (bcmolt_func_packed_len) bcmolt_logger_stat_data_get_packed_length, (bcmolt_func_pack) bcmolt_logger_stat_data_pack, (bcmolt_func_unpack) bcmolt_logger_stat_data_unpack, bcmolt_logger_stat_data_scan };
+static bcmolt_group_info group_info_logger_stat_cfg = { BCMOLT_OBJ_ID_LOGGER, BCMOLT_MGT_GROUP_STAT_CFG, 0, sizeof(bcmolt_logger_stat_cfg_data), sizeof(bcmolt_logger_stat_cfg), offsetof(bcmolt_logger_stat_cfg, data), (bcmolt_func_packed_len) bcmolt_logger_stat_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_logger_stat_cfg_data_pack, (bcmolt_func_unpack) bcmolt_logger_stat_cfg_data_unpack, bcmolt_logger_stat_cfg_data_scan };
+static bcmolt_group_info group_info_logger_stat_alarm_cleared = { BCMOLT_OBJ_ID_LOGGER, BCMOLT_MGT_GROUP_AUTO, 0, sizeof(bcmolt_logger_stat_alarm_cleared_data), sizeof(bcmolt_logger_stat_alarm_cleared), offsetof(bcmolt_logger_stat_alarm_cleared, data), (bcmolt_func_packed_len) bcmolt_logger_stat_alarm_cleared_data_get_packed_length, (bcmolt_func_pack) bcmolt_logger_stat_alarm_cleared_data_pack, (bcmolt_func_unpack) bcmolt_logger_stat_alarm_cleared_data_unpack, bcmolt_logger_stat_alarm_cleared_data_scan };
+static bcmolt_group_info group_info_logger_stat_alarm_raised = { BCMOLT_OBJ_ID_LOGGER, BCMOLT_MGT_GROUP_AUTO, 1, sizeof(bcmolt_logger_stat_alarm_raised_data), sizeof(bcmolt_logger_stat_alarm_raised), offsetof(bcmolt_logger_stat_alarm_raised, data), (bcmolt_func_packed_len) bcmolt_logger_stat_alarm_raised_data_get_packed_length, (bcmolt_func_pack) bcmolt_logger_stat_alarm_raised_data_pack, (bcmolt_func_unpack) bcmolt_logger_stat_alarm_raised_data_unpack, bcmolt_logger_stat_alarm_raised_data_scan };
+static bcmolt_group_info group_info_logger_auto_cfg = { BCMOLT_OBJ_ID_LOGGER, BCMOLT_MGT_GROUP_AUTO_CFG, 0, sizeof(bcmolt_logger_auto_cfg_data), sizeof(bcmolt_logger_auto_cfg), offsetof(bcmolt_logger_auto_cfg, data), (bcmolt_func_packed_len) bcmolt_logger_auto_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_logger_auto_cfg_data_pack, (bcmolt_func_unpack) bcmolt_logger_auto_cfg_data_unpack, bcmolt_logger_auto_cfg_data_scan };
+static bcmolt_group_info group_info_logger_clear_log = { BCMOLT_OBJ_ID_LOGGER, BCMOLT_MGT_GROUP_OPER, 0, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_nni_key = { BCMOLT_OBJ_ID_NNI, BCMOLT_MGT_GROUP_KEY, 0, sizeof(bcmolt_nni_key), 0, 0, (bcmolt_func_packed_len) bcmolt_nni_key_get_packed_length, (bcmolt_func_pack) bcmolt_nni_key_pack, (bcmolt_func_unpack) bcmolt_nni_key_unpack, bcmolt_nni_key_scan };
+static bcmolt_group_info group_info_nni_cfg = { BCMOLT_OBJ_ID_NNI, BCMOLT_MGT_GROUP_CFG, 0, sizeof(bcmolt_nni_cfg_data), sizeof(bcmolt_nni_cfg), offsetof(bcmolt_nni_cfg, data), (bcmolt_func_packed_len) bcmolt_nni_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_nni_cfg_data_pack, (bcmolt_func_unpack) bcmolt_nni_cfg_data_unpack, bcmolt_nni_cfg_data_scan };
+static bcmolt_group_info group_info_nni_stat = { BCMOLT_OBJ_ID_NNI, BCMOLT_MGT_GROUP_STAT, 0, sizeof(bcmolt_nni_stat_data), sizeof(bcmolt_nni_stat), offsetof(bcmolt_nni_stat, data), (bcmolt_func_packed_len) bcmolt_nni_stat_data_get_packed_length, (bcmolt_func_pack) bcmolt_nni_stat_data_pack, (bcmolt_func_unpack) bcmolt_nni_stat_data_unpack, bcmolt_nni_stat_data_scan };
+static bcmolt_group_info group_info_nni_stat_cfg = { BCMOLT_OBJ_ID_NNI, BCMOLT_MGT_GROUP_STAT_CFG, 0, sizeof(bcmolt_nni_stat_cfg_data), sizeof(bcmolt_nni_stat_cfg), offsetof(bcmolt_nni_stat_cfg, data), (bcmolt_func_packed_len) bcmolt_nni_stat_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_nni_stat_cfg_data_pack, (bcmolt_func_unpack) bcmolt_nni_stat_cfg_data_unpack, bcmolt_nni_stat_cfg_data_scan };
+static bcmolt_group_info group_info_nni_stat_alarm_cleared = { BCMOLT_OBJ_ID_NNI, BCMOLT_MGT_GROUP_AUTO, 0, sizeof(bcmolt_nni_stat_alarm_cleared_data), sizeof(bcmolt_nni_stat_alarm_cleared), offsetof(bcmolt_nni_stat_alarm_cleared, data), (bcmolt_func_packed_len) bcmolt_nni_stat_alarm_cleared_data_get_packed_length, (bcmolt_func_pack) bcmolt_nni_stat_alarm_cleared_data_pack, (bcmolt_func_unpack) bcmolt_nni_stat_alarm_cleared_data_unpack, bcmolt_nni_stat_alarm_cleared_data_scan };
+static bcmolt_group_info group_info_nni_stat_alarm_raised = { BCMOLT_OBJ_ID_NNI, BCMOLT_MGT_GROUP_AUTO, 1, sizeof(bcmolt_nni_stat_alarm_raised_data), sizeof(bcmolt_nni_stat_alarm_raised), offsetof(bcmolt_nni_stat_alarm_raised, data), (bcmolt_func_packed_len) bcmolt_nni_stat_alarm_raised_data_get_packed_length, (bcmolt_func_pack) bcmolt_nni_stat_alarm_raised_data_pack, (bcmolt_func_unpack) bcmolt_nni_stat_alarm_raised_data_unpack, bcmolt_nni_stat_alarm_raised_data_scan };
+static bcmolt_group_info group_info_nni_status_changed = { BCMOLT_OBJ_ID_NNI, BCMOLT_MGT_GROUP_AUTO, 2, sizeof(bcmolt_nni_status_changed_data), sizeof(bcmolt_nni_status_changed), offsetof(bcmolt_nni_status_changed, data), (bcmolt_func_packed_len) bcmolt_nni_status_changed_data_get_packed_length, (bcmolt_func_pack) bcmolt_nni_status_changed_data_pack, (bcmolt_func_unpack) bcmolt_nni_status_changed_data_unpack, bcmolt_nni_status_changed_data_scan };
+static bcmolt_group_info group_info_nni_auto_cfg = { BCMOLT_OBJ_ID_NNI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, sizeof(bcmolt_nni_auto_cfg_data), sizeof(bcmolt_nni_auto_cfg), offsetof(bcmolt_nni_auto_cfg, data), (bcmolt_func_packed_len) bcmolt_nni_auto_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_nni_auto_cfg_data_pack, (bcmolt_func_unpack) bcmolt_nni_auto_cfg_data_unpack, bcmolt_nni_auto_cfg_data_scan };
+static bcmolt_group_info group_info_nni_serdes_key = { BCMOLT_OBJ_ID_NNI_SERDES, BCMOLT_MGT_GROUP_KEY, 0, sizeof(bcmolt_nni_serdes_key), 0, 0, (bcmolt_func_packed_len) bcmolt_nni_serdes_key_get_packed_length, (bcmolt_func_pack) bcmolt_nni_serdes_key_pack, (bcmolt_func_unpack) bcmolt_nni_serdes_key_unpack, bcmolt_nni_serdes_key_scan };
+static bcmolt_group_info group_info_nni_serdes_cfg = { BCMOLT_OBJ_ID_NNI_SERDES, BCMOLT_MGT_GROUP_CFG, 0, sizeof(bcmolt_nni_serdes_cfg_data), sizeof(bcmolt_nni_serdes_cfg), offsetof(bcmolt_nni_serdes_cfg, data), (bcmolt_func_packed_len) bcmolt_nni_serdes_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_nni_serdes_cfg_data_pack, (bcmolt_func_unpack) bcmolt_nni_serdes_cfg_data_unpack, bcmolt_nni_serdes_cfg_data_scan };
+static bcmolt_group_info group_info_software_error_key = { BCMOLT_OBJ_ID_SOFTWARE_ERROR, BCMOLT_MGT_GROUP_KEY, 0, sizeof(bcmolt_software_error_key), 0, 0, (bcmolt_func_packed_len) bcmolt_software_error_key_get_packed_length, (bcmolt_func_pack) bcmolt_software_error_key_pack, (bcmolt_func_unpack) bcmolt_software_error_key_unpack, bcmolt_software_error_key_scan };
+static bcmolt_group_info group_info_software_error_cfg = { BCMOLT_OBJ_ID_SOFTWARE_ERROR, BCMOLT_MGT_GROUP_CFG, 0, sizeof(bcmolt_software_error_cfg_data), sizeof(bcmolt_software_error_cfg), offsetof(bcmolt_software_error_cfg, data), (bcmolt_func_packed_len) bcmolt_software_error_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_software_error_cfg_data_pack, (bcmolt_func_unpack) bcmolt_software_error_cfg_data_unpack, bcmolt_software_error_cfg_data_scan };
+static bcmolt_group_info group_info_trx_calibration_key = { BCMOLT_OBJ_ID_TRX_CALIBRATION, BCMOLT_MGT_GROUP_KEY, 0, sizeof(bcmolt_trx_calibration_key), 0, 0, (bcmolt_func_packed_len) bcmolt_trx_calibration_key_get_packed_length, (bcmolt_func_pack) bcmolt_trx_calibration_key_pack, (bcmolt_func_unpack) bcmolt_trx_calibration_key_unpack, bcmolt_trx_calibration_key_scan };
+static bcmolt_group_info group_info_trx_calibration_capture_window_and_statistic_completed = { BCMOLT_OBJ_ID_TRX_CALIBRATION, BCMOLT_MGT_GROUP_AUTO, 0, sizeof(bcmolt_trx_calibration_capture_window_and_statistic_completed_data), sizeof(bcmolt_trx_calibration_capture_window_and_statistic_completed), offsetof(bcmolt_trx_calibration_capture_window_and_statistic_completed, data), (bcmolt_func_packed_len) bcmolt_trx_calibration_capture_window_and_statistic_completed_data_get_packed_length, (bcmolt_func_pack) bcmolt_trx_calibration_capture_window_and_statistic_completed_data_pack, (bcmolt_func_unpack) bcmolt_trx_calibration_capture_window_and_statistic_completed_data_unpack, bcmolt_trx_calibration_capture_window_and_statistic_completed_data_scan };
+static bcmolt_group_info group_info_trx_calibration_auto_cfg = { BCMOLT_OBJ_ID_TRX_CALIBRATION, BCMOLT_MGT_GROUP_AUTO_CFG, 0, sizeof(bcmolt_trx_calibration_auto_cfg_data), sizeof(bcmolt_trx_calibration_auto_cfg), offsetof(bcmolt_trx_calibration_auto_cfg, data), (bcmolt_func_packed_len) bcmolt_trx_calibration_auto_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_trx_calibration_auto_cfg_data_pack, (bcmolt_func_unpack) bcmolt_trx_calibration_auto_cfg_data_unpack, bcmolt_trx_calibration_auto_cfg_data_scan };
+static bcmolt_group_info group_info_trx_calibration_start_capture_window = { BCMOLT_OBJ_ID_TRX_CALIBRATION, BCMOLT_MGT_GROUP_OPER, 0, sizeof(bcmolt_trx_calibration_start_capture_window_data), sizeof(bcmolt_trx_calibration_start_capture_window), offsetof(bcmolt_trx_calibration_start_capture_window, data), (bcmolt_func_packed_len) bcmolt_trx_calibration_start_capture_window_data_get_packed_length, (bcmolt_func_pack) bcmolt_trx_calibration_start_capture_window_data_pack, (bcmolt_func_unpack) bcmolt_trx_calibration_start_capture_window_data_unpack, bcmolt_trx_calibration_start_capture_window_data_scan };
+static bcmolt_group_info group_info_trx_calibration_stop_capture_window = { BCMOLT_OBJ_ID_TRX_CALIBRATION, BCMOLT_MGT_GROUP_OPER, 1, sizeof(bcmolt_trx_calibration_stop_capture_window_data), sizeof(bcmolt_trx_calibration_stop_capture_window), offsetof(bcmolt_trx_calibration_stop_capture_window, data), (bcmolt_func_packed_len) bcmolt_trx_calibration_stop_capture_window_data_get_packed_length, (bcmolt_func_pack) bcmolt_trx_calibration_stop_capture_window_data_pack, (bcmolt_func_unpack) bcmolt_trx_calibration_stop_capture_window_data_unpack, bcmolt_trx_calibration_stop_capture_window_data_scan };
+static bcmolt_group_info group_info_xgpon_alloc_key = { BCMOLT_OBJ_ID_XGPON_ALLOC, BCMOLT_MGT_GROUP_KEY, 0, sizeof(bcmolt_xgpon_alloc_key), 0, 0, (bcmolt_func_packed_len) bcmolt_xgpon_alloc_key_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_alloc_key_pack, (bcmolt_func_unpack) bcmolt_xgpon_alloc_key_unpack, bcmolt_xgpon_alloc_key_scan };
+static bcmolt_group_info group_info_xgpon_alloc_cfg = { BCMOLT_OBJ_ID_XGPON_ALLOC, BCMOLT_MGT_GROUP_CFG, 0, sizeof(bcmolt_xgpon_alloc_cfg_data), sizeof(bcmolt_xgpon_alloc_cfg), offsetof(bcmolt_xgpon_alloc_cfg, data), (bcmolt_func_packed_len) bcmolt_xgpon_alloc_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_alloc_cfg_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_alloc_cfg_data_unpack, bcmolt_xgpon_alloc_cfg_data_scan };
+static bcmolt_group_info group_info_xgpon_alloc_stat = { BCMOLT_OBJ_ID_XGPON_ALLOC, BCMOLT_MGT_GROUP_STAT, 0, sizeof(bcmolt_xgpon_alloc_stat_data), sizeof(bcmolt_xgpon_alloc_stat), offsetof(bcmolt_xgpon_alloc_stat, data), (bcmolt_func_packed_len) bcmolt_xgpon_alloc_stat_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_alloc_stat_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_alloc_stat_data_unpack, bcmolt_xgpon_alloc_stat_data_scan };
+static bcmolt_group_info group_info_xgpon_alloc_stat_cfg = { BCMOLT_OBJ_ID_XGPON_ALLOC, BCMOLT_MGT_GROUP_STAT_CFG, 0, sizeof(bcmolt_xgpon_alloc_stat_cfg_data), sizeof(bcmolt_xgpon_alloc_stat_cfg), offsetof(bcmolt_xgpon_alloc_stat_cfg, data), (bcmolt_func_packed_len) bcmolt_xgpon_alloc_stat_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_alloc_stat_cfg_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_alloc_stat_cfg_data_unpack, bcmolt_xgpon_alloc_stat_cfg_data_scan };
+static bcmolt_group_info group_info_xgpon_alloc_configuration_completed = { BCMOLT_OBJ_ID_XGPON_ALLOC, BCMOLT_MGT_GROUP_AUTO, 0, sizeof(bcmolt_xgpon_alloc_configuration_completed_data), sizeof(bcmolt_xgpon_alloc_configuration_completed), offsetof(bcmolt_xgpon_alloc_configuration_completed, data), (bcmolt_func_packed_len) bcmolt_xgpon_alloc_configuration_completed_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_alloc_configuration_completed_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_alloc_configuration_completed_data_unpack, bcmolt_xgpon_alloc_configuration_completed_data_scan };
+static bcmolt_group_info group_info_xgpon_alloc_get_alloc_stats_completed = { BCMOLT_OBJ_ID_XGPON_ALLOC, BCMOLT_MGT_GROUP_AUTO, 1, sizeof(bcmolt_xgpon_alloc_get_alloc_stats_completed_data), sizeof(bcmolt_xgpon_alloc_get_alloc_stats_completed), offsetof(bcmolt_xgpon_alloc_get_alloc_stats_completed, data), (bcmolt_func_packed_len) bcmolt_xgpon_alloc_get_alloc_stats_completed_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_alloc_get_alloc_stats_completed_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_alloc_get_alloc_stats_completed_data_unpack, bcmolt_xgpon_alloc_get_alloc_stats_completed_data_scan };
+static bcmolt_group_info group_info_xgpon_alloc_stat_alarm_cleared = { BCMOLT_OBJ_ID_XGPON_ALLOC, BCMOLT_MGT_GROUP_AUTO, 2, sizeof(bcmolt_xgpon_alloc_stat_alarm_cleared_data), sizeof(bcmolt_xgpon_alloc_stat_alarm_cleared), offsetof(bcmolt_xgpon_alloc_stat_alarm_cleared, data), (bcmolt_func_packed_len) bcmolt_xgpon_alloc_stat_alarm_cleared_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_alloc_stat_alarm_cleared_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_alloc_stat_alarm_cleared_data_unpack, bcmolt_xgpon_alloc_stat_alarm_cleared_data_scan };
+static bcmolt_group_info group_info_xgpon_alloc_stat_alarm_raised = { BCMOLT_OBJ_ID_XGPON_ALLOC, BCMOLT_MGT_GROUP_AUTO, 3, sizeof(bcmolt_xgpon_alloc_stat_alarm_raised_data), sizeof(bcmolt_xgpon_alloc_stat_alarm_raised), offsetof(bcmolt_xgpon_alloc_stat_alarm_raised, data), (bcmolt_func_packed_len) bcmolt_xgpon_alloc_stat_alarm_raised_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_alloc_stat_alarm_raised_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_alloc_stat_alarm_raised_data_unpack, bcmolt_xgpon_alloc_stat_alarm_raised_data_scan };
+static bcmolt_group_info group_info_xgpon_alloc_auto_cfg = { BCMOLT_OBJ_ID_XGPON_ALLOC, BCMOLT_MGT_GROUP_AUTO_CFG, 0, sizeof(bcmolt_xgpon_alloc_auto_cfg_data), sizeof(bcmolt_xgpon_alloc_auto_cfg), offsetof(bcmolt_xgpon_alloc_auto_cfg, data), (bcmolt_func_packed_len) bcmolt_xgpon_alloc_auto_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_alloc_auto_cfg_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_alloc_auto_cfg_data_unpack, bcmolt_xgpon_alloc_auto_cfg_data_scan };
+static bcmolt_group_info group_info_xgpon_alloc_get_stats = { BCMOLT_OBJ_ID_XGPON_ALLOC, BCMOLT_MGT_GROUP_OPER, 0, sizeof(bcmolt_xgpon_alloc_get_stats_data), sizeof(bcmolt_xgpon_alloc_get_stats), offsetof(bcmolt_xgpon_alloc_get_stats, data), (bcmolt_func_packed_len) bcmolt_xgpon_alloc_get_stats_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_alloc_get_stats_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_alloc_get_stats_data_unpack, bcmolt_xgpon_alloc_get_stats_data_scan };
+static bcmolt_group_info group_info_xgpon_alloc_set_state = { BCMOLT_OBJ_ID_XGPON_ALLOC, BCMOLT_MGT_GROUP_OPER, 1, sizeof(bcmolt_xgpon_alloc_set_state_data), sizeof(bcmolt_xgpon_alloc_set_state), offsetof(bcmolt_xgpon_alloc_set_state, data), (bcmolt_func_packed_len) bcmolt_xgpon_alloc_set_state_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_alloc_set_state_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_alloc_set_state_data_unpack, bcmolt_xgpon_alloc_set_state_data_scan };
+static bcmolt_group_info group_info_xgpon_gem_port_key = { BCMOLT_OBJ_ID_XGPON_GEM_PORT, BCMOLT_MGT_GROUP_KEY, 0, sizeof(bcmolt_xgpon_gem_port_key), 0, 0, (bcmolt_func_packed_len) bcmolt_xgpon_gem_port_key_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_gem_port_key_pack, (bcmolt_func_unpack) bcmolt_xgpon_gem_port_key_unpack, bcmolt_xgpon_gem_port_key_scan };
+static bcmolt_group_info group_info_xgpon_gem_port_cfg = { BCMOLT_OBJ_ID_XGPON_GEM_PORT, BCMOLT_MGT_GROUP_CFG, 0, sizeof(bcmolt_xgpon_gem_port_cfg_data), sizeof(bcmolt_xgpon_gem_port_cfg), offsetof(bcmolt_xgpon_gem_port_cfg, data), (bcmolt_func_packed_len) bcmolt_xgpon_gem_port_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_gem_port_cfg_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_gem_port_cfg_data_unpack, bcmolt_xgpon_gem_port_cfg_data_scan };
+static bcmolt_group_info group_info_xgpon_gem_port_stat = { BCMOLT_OBJ_ID_XGPON_GEM_PORT, BCMOLT_MGT_GROUP_STAT, 0, sizeof(bcmolt_xgpon_gem_port_stat_data), sizeof(bcmolt_xgpon_gem_port_stat), offsetof(bcmolt_xgpon_gem_port_stat, data), (bcmolt_func_packed_len) bcmolt_xgpon_gem_port_stat_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_gem_port_stat_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_gem_port_stat_data_unpack, bcmolt_xgpon_gem_port_stat_data_scan };
+static bcmolt_group_info group_info_xgpon_gem_port_stat_cfg = { BCMOLT_OBJ_ID_XGPON_GEM_PORT, BCMOLT_MGT_GROUP_STAT_CFG, 0, sizeof(bcmolt_xgpon_gem_port_stat_cfg_data), sizeof(bcmolt_xgpon_gem_port_stat_cfg), offsetof(bcmolt_xgpon_gem_port_stat_cfg, data), (bcmolt_func_packed_len) bcmolt_xgpon_gem_port_stat_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_gem_port_stat_cfg_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_gem_port_stat_cfg_data_unpack, bcmolt_xgpon_gem_port_stat_cfg_data_scan };
+static bcmolt_group_info group_info_xgpon_gem_port_stat_alarm_cleared = { BCMOLT_OBJ_ID_XGPON_GEM_PORT, BCMOLT_MGT_GROUP_AUTO, 0, sizeof(bcmolt_xgpon_gem_port_stat_alarm_cleared_data), sizeof(bcmolt_xgpon_gem_port_stat_alarm_cleared), offsetof(bcmolt_xgpon_gem_port_stat_alarm_cleared, data), (bcmolt_func_packed_len) bcmolt_xgpon_gem_port_stat_alarm_cleared_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_gem_port_stat_alarm_cleared_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_gem_port_stat_alarm_cleared_data_unpack, bcmolt_xgpon_gem_port_stat_alarm_cleared_data_scan };
+static bcmolt_group_info group_info_xgpon_gem_port_stat_alarm_raised = { BCMOLT_OBJ_ID_XGPON_GEM_PORT, BCMOLT_MGT_GROUP_AUTO, 1, sizeof(bcmolt_xgpon_gem_port_stat_alarm_raised_data), sizeof(bcmolt_xgpon_gem_port_stat_alarm_raised), offsetof(bcmolt_xgpon_gem_port_stat_alarm_raised, data), (bcmolt_func_packed_len) bcmolt_xgpon_gem_port_stat_alarm_raised_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_gem_port_stat_alarm_raised_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_gem_port_stat_alarm_raised_data_unpack, bcmolt_xgpon_gem_port_stat_alarm_raised_data_scan };
+static bcmolt_group_info group_info_xgpon_gem_port_auto_cfg = { BCMOLT_OBJ_ID_XGPON_GEM_PORT, BCMOLT_MGT_GROUP_AUTO_CFG, 0, sizeof(bcmolt_xgpon_gem_port_auto_cfg_data), sizeof(bcmolt_xgpon_gem_port_auto_cfg), offsetof(bcmolt_xgpon_gem_port_auto_cfg, data), (bcmolt_func_packed_len) bcmolt_xgpon_gem_port_auto_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_gem_port_auto_cfg_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_gem_port_auto_cfg_data_unpack, bcmolt_xgpon_gem_port_auto_cfg_data_scan };
+static bcmolt_group_info group_info_xgpon_iwf_key = { BCMOLT_OBJ_ID_XGPON_IWF, BCMOLT_MGT_GROUP_KEY, 0, sizeof(bcmolt_xgpon_iwf_key), 0, 0, (bcmolt_func_packed_len) bcmolt_xgpon_iwf_key_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_iwf_key_pack, (bcmolt_func_unpack) bcmolt_xgpon_iwf_key_unpack, bcmolt_xgpon_iwf_key_scan };
+static bcmolt_group_info group_info_xgpon_iwf_cfg = { BCMOLT_OBJ_ID_XGPON_IWF, BCMOLT_MGT_GROUP_CFG, 0, sizeof(bcmolt_xgpon_iwf_cfg_data), sizeof(bcmolt_xgpon_iwf_cfg), offsetof(bcmolt_xgpon_iwf_cfg, data), (bcmolt_func_packed_len) bcmolt_xgpon_iwf_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_iwf_cfg_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_iwf_cfg_data_unpack, bcmolt_xgpon_iwf_cfg_data_scan };
+static bcmolt_group_info group_info_xgpon_ni_key = { BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_KEY, 0, sizeof(bcmolt_xgpon_ni_key), 0, 0, (bcmolt_func_packed_len) bcmolt_xgpon_ni_key_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_ni_key_pack, (bcmolt_func_unpack) bcmolt_xgpon_ni_key_unpack, bcmolt_xgpon_ni_key_scan };
+static bcmolt_group_info group_info_xgpon_ni_cfg = { BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, sizeof(bcmolt_xgpon_ni_cfg_data), sizeof(bcmolt_xgpon_ni_cfg), offsetof(bcmolt_xgpon_ni_cfg, data), (bcmolt_func_packed_len) bcmolt_xgpon_ni_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_ni_cfg_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_ni_cfg_data_unpack, bcmolt_xgpon_ni_cfg_data_scan };
+static bcmolt_group_info group_info_xgpon_ni_stat = { BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_STAT, 0, sizeof(bcmolt_xgpon_ni_stat_data), sizeof(bcmolt_xgpon_ni_stat), offsetof(bcmolt_xgpon_ni_stat, data), (bcmolt_func_packed_len) bcmolt_xgpon_ni_stat_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_ni_stat_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_ni_stat_data_unpack, bcmolt_xgpon_ni_stat_data_scan };
+static bcmolt_group_info group_info_xgpon_ni_stat_cfg = { BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_STAT_CFG, 0, sizeof(bcmolt_xgpon_ni_stat_cfg_data), sizeof(bcmolt_xgpon_ni_stat_cfg), offsetof(bcmolt_xgpon_ni_stat_cfg, data), (bcmolt_func_packed_len) bcmolt_xgpon_ni_stat_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_ni_stat_cfg_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_ni_stat_cfg_data_unpack, bcmolt_xgpon_ni_stat_cfg_data_scan };
+static bcmolt_group_info group_info_xgpon_ni_activate_all_onus_completed = { BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_AUTO, 0, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_xgpon_ni_cpu_packets_failure = { BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_AUTO, 1, sizeof(bcmolt_xgpon_ni_cpu_packets_failure_data), sizeof(bcmolt_xgpon_ni_cpu_packets_failure), offsetof(bcmolt_xgpon_ni_cpu_packets_failure, data), (bcmolt_func_packed_len) bcmolt_xgpon_ni_cpu_packets_failure_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_ni_cpu_packets_failure_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_ni_cpu_packets_failure_data_unpack, bcmolt_xgpon_ni_cpu_packets_failure_data_scan };
+static bcmolt_group_info group_info_xgpon_ni_deactivate_all_onus_completed = { BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_AUTO, 2, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_xgpon_ni_disable_all_onus_completed = { BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_AUTO, 3, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_xgpon_ni_enable_all_onus_completed = { BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_AUTO, 4, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_xgpon_ni_los = { BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_AUTO, 5, sizeof(bcmolt_xgpon_ni_los_data), sizeof(bcmolt_xgpon_ni_los), offsetof(bcmolt_xgpon_ni_los, data), (bcmolt_func_packed_len) bcmolt_xgpon_ni_los_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_ni_los_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_ni_los_data_unpack, bcmolt_xgpon_ni_los_data_scan };
+static bcmolt_group_info group_info_xgpon_ni_onu_discovered = { BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_AUTO, 6, sizeof(bcmolt_xgpon_ni_onu_discovered_data), sizeof(bcmolt_xgpon_ni_onu_discovered), offsetof(bcmolt_xgpon_ni_onu_discovered, data), (bcmolt_func_packed_len) bcmolt_xgpon_ni_onu_discovered_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_ni_onu_discovered_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_ni_onu_discovered_data_unpack, bcmolt_xgpon_ni_onu_discovered_data_scan };
+static bcmolt_group_info group_info_xgpon_ni_onu_upgrade_complete = { BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_AUTO, 7, sizeof(bcmolt_xgpon_ni_onu_upgrade_complete_data), sizeof(bcmolt_xgpon_ni_onu_upgrade_complete), offsetof(bcmolt_xgpon_ni_onu_upgrade_complete, data), (bcmolt_func_packed_len) bcmolt_xgpon_ni_onu_upgrade_complete_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_ni_onu_upgrade_complete_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_ni_onu_upgrade_complete_data_unpack, bcmolt_xgpon_ni_onu_upgrade_complete_data_scan };
+static bcmolt_group_info group_info_xgpon_ni_protection_switching_onus_ranged = { BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_AUTO, 8, sizeof(bcmolt_xgpon_ni_protection_switching_onus_ranged_data), sizeof(bcmolt_xgpon_ni_protection_switching_onus_ranged), offsetof(bcmolt_xgpon_ni_protection_switching_onus_ranged, data), (bcmolt_func_packed_len) bcmolt_xgpon_ni_protection_switching_onus_ranged_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_ni_protection_switching_onus_ranged_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_ni_protection_switching_onus_ranged_data_unpack, bcmolt_xgpon_ni_protection_switching_onus_ranged_data_scan };
+static bcmolt_group_info group_info_xgpon_ni_protection_switching_switchover_completed = { BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_AUTO, 9, sizeof(bcmolt_xgpon_ni_protection_switching_switchover_completed_data), sizeof(bcmolt_xgpon_ni_protection_switching_switchover_completed), offsetof(bcmolt_xgpon_ni_protection_switching_switchover_completed, data), (bcmolt_func_packed_len) bcmolt_xgpon_ni_protection_switching_switchover_completed_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_ni_protection_switching_switchover_completed_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_ni_protection_switching_switchover_completed_data_unpack, bcmolt_xgpon_ni_protection_switching_switchover_completed_data_scan };
+static bcmolt_group_info group_info_xgpon_ni_protection_switching_traffic_resume = { BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_AUTO, 10, sizeof(bcmolt_xgpon_ni_protection_switching_traffic_resume_data), sizeof(bcmolt_xgpon_ni_protection_switching_traffic_resume), offsetof(bcmolt_xgpon_ni_protection_switching_traffic_resume, data), (bcmolt_func_packed_len) bcmolt_xgpon_ni_protection_switching_traffic_resume_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_ni_protection_switching_traffic_resume_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_ni_protection_switching_traffic_resume_data_unpack, bcmolt_xgpon_ni_protection_switching_traffic_resume_data_scan };
+static bcmolt_group_info group_info_xgpon_ni_rogue_detection_completed = { BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_AUTO, 11, sizeof(bcmolt_xgpon_ni_rogue_detection_completed_data), sizeof(bcmolt_xgpon_ni_rogue_detection_completed), offsetof(bcmolt_xgpon_ni_rogue_detection_completed, data), (bcmolt_func_packed_len) bcmolt_xgpon_ni_rogue_detection_completed_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_ni_rogue_detection_completed_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_ni_rogue_detection_completed_data_unpack, bcmolt_xgpon_ni_rogue_detection_completed_data_scan };
+static bcmolt_group_info group_info_xgpon_ni_rogue_onu_special_map_cycle_start = { BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_AUTO, 12, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_xgpon_ni_serial_number_acquisition_cycle_start = { BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_AUTO, 13, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_xgpon_ni_standby_pon_monitoring_cycle_completed = { BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_AUTO, 14, sizeof(bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data), sizeof(bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed), offsetof(bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed, data), (bcmolt_func_packed_len) bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data_unpack, bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data_scan };
+static bcmolt_group_info group_info_xgpon_ni_stat_alarm_cleared = { BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_AUTO, 15, sizeof(bcmolt_xgpon_ni_stat_alarm_cleared_data), sizeof(bcmolt_xgpon_ni_stat_alarm_cleared), offsetof(bcmolt_xgpon_ni_stat_alarm_cleared, data), (bcmolt_func_packed_len) bcmolt_xgpon_ni_stat_alarm_cleared_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_ni_stat_alarm_cleared_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_ni_stat_alarm_cleared_data_unpack, bcmolt_xgpon_ni_stat_alarm_cleared_data_scan };
+static bcmolt_group_info group_info_xgpon_ni_stat_alarm_raised = { BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_AUTO, 16, sizeof(bcmolt_xgpon_ni_stat_alarm_raised_data), sizeof(bcmolt_xgpon_ni_stat_alarm_raised), offsetof(bcmolt_xgpon_ni_stat_alarm_raised, data), (bcmolt_func_packed_len) bcmolt_xgpon_ni_stat_alarm_raised_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_ni_stat_alarm_raised_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_ni_stat_alarm_raised_data_unpack, bcmolt_xgpon_ni_stat_alarm_raised_data_scan };
+static bcmolt_group_info group_info_xgpon_ni_state_change_completed = { BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_AUTO, 17, sizeof(bcmolt_xgpon_ni_state_change_completed_data), sizeof(bcmolt_xgpon_ni_state_change_completed), offsetof(bcmolt_xgpon_ni_state_change_completed, data), (bcmolt_func_packed_len) bcmolt_xgpon_ni_state_change_completed_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_ni_state_change_completed_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_ni_state_change_completed_data_unpack, bcmolt_xgpon_ni_state_change_completed_data_scan };
+static bcmolt_group_info group_info_xgpon_ni_tod_request_completed = { BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_AUTO, 18, sizeof(bcmolt_xgpon_ni_tod_request_completed_data), sizeof(bcmolt_xgpon_ni_tod_request_completed), offsetof(bcmolt_xgpon_ni_tod_request_completed, data), (bcmolt_func_packed_len) bcmolt_xgpon_ni_tod_request_completed_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_ni_tod_request_completed_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_ni_tod_request_completed_data_unpack, bcmolt_xgpon_ni_tod_request_completed_data_scan };
+static bcmolt_group_info group_info_xgpon_ni_auto_cfg = { BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, sizeof(bcmolt_xgpon_ni_auto_cfg_data), sizeof(bcmolt_xgpon_ni_auto_cfg), offsetof(bcmolt_xgpon_ni_auto_cfg, data), (bcmolt_func_packed_len) bcmolt_xgpon_ni_auto_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_ni_auto_cfg_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_ni_auto_cfg_data_unpack, bcmolt_xgpon_ni_auto_cfg_data_scan };
+static bcmolt_group_info group_info_xgpon_ni_adjust_tx_wavelength = { BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_OPER, 0, sizeof(bcmolt_xgpon_ni_adjust_tx_wavelength_data), sizeof(bcmolt_xgpon_ni_adjust_tx_wavelength), offsetof(bcmolt_xgpon_ni_adjust_tx_wavelength, data), (bcmolt_func_packed_len) bcmolt_xgpon_ni_adjust_tx_wavelength_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_ni_adjust_tx_wavelength_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_ni_adjust_tx_wavelength_data_unpack, bcmolt_xgpon_ni_adjust_tx_wavelength_data_scan };
+static bcmolt_group_info group_info_xgpon_ni_disable_serial_number = { BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_OPER, 1, sizeof(bcmolt_xgpon_ni_disable_serial_number_data), sizeof(bcmolt_xgpon_ni_disable_serial_number), offsetof(bcmolt_xgpon_ni_disable_serial_number, data), (bcmolt_func_packed_len) bcmolt_xgpon_ni_disable_serial_number_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_ni_disable_serial_number_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_ni_disable_serial_number_data_unpack, bcmolt_xgpon_ni_disable_serial_number_data_scan };
+static bcmolt_group_info group_info_xgpon_ni_reset = { BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_OPER, 2, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_xgpon_ni_rogue_detection_window = { BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_OPER, 3, sizeof(bcmolt_xgpon_ni_rogue_detection_window_data), sizeof(bcmolt_xgpon_ni_rogue_detection_window), offsetof(bcmolt_xgpon_ni_rogue_detection_window, data), (bcmolt_func_packed_len) bcmolt_xgpon_ni_rogue_detection_window_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_ni_rogue_detection_window_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_ni_rogue_detection_window_data_unpack, bcmolt_xgpon_ni_rogue_detection_window_data_scan };
+static bcmolt_group_info group_info_xgpon_ni_run_special_bw_map = { BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_OPER, 4, sizeof(bcmolt_xgpon_ni_run_special_bw_map_data), sizeof(bcmolt_xgpon_ni_run_special_bw_map), offsetof(bcmolt_xgpon_ni_run_special_bw_map, data), (bcmolt_func_packed_len) bcmolt_xgpon_ni_run_special_bw_map_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_ni_run_special_bw_map_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_ni_run_special_bw_map_data_unpack, bcmolt_xgpon_ni_run_special_bw_map_data_scan };
+static bcmolt_group_info group_info_xgpon_ni_set_onu_state = { BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_OPER, 5, sizeof(bcmolt_xgpon_ni_set_onu_state_data), sizeof(bcmolt_xgpon_ni_set_onu_state), offsetof(bcmolt_xgpon_ni_set_onu_state, data), (bcmolt_func_packed_len) bcmolt_xgpon_ni_set_onu_state_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_ni_set_onu_state_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_ni_set_onu_state_data_unpack, bcmolt_xgpon_ni_set_onu_state_data_scan };
+static bcmolt_group_info group_info_xgpon_ni_set_pon_state = { BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_OPER, 6, sizeof(bcmolt_xgpon_ni_set_pon_state_data), sizeof(bcmolt_xgpon_ni_set_pon_state), offsetof(bcmolt_xgpon_ni_set_pon_state, data), (bcmolt_func_packed_len) bcmolt_xgpon_ni_set_pon_state_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_ni_set_pon_state_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_ni_set_pon_state_data_unpack, bcmolt_xgpon_ni_set_pon_state_data_scan };
+static bcmolt_group_info group_info_xgpon_ni_single_request_standby_pon_monitoring = { BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_OPER, 7, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_xgpon_ni_start_onu_upgrade = { BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_OPER, 8, sizeof(bcmolt_xgpon_ni_start_onu_upgrade_data), sizeof(bcmolt_xgpon_ni_start_onu_upgrade), offsetof(bcmolt_xgpon_ni_start_onu_upgrade, data), (bcmolt_func_packed_len) bcmolt_xgpon_ni_start_onu_upgrade_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_ni_start_onu_upgrade_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_ni_start_onu_upgrade_data_unpack, bcmolt_xgpon_ni_start_onu_upgrade_data_scan };
+static bcmolt_group_info group_info_xgpon_ni_tod_request = { BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_OPER, 9, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_xgpon_ni_broadcast_ploam_packet = { BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_PROXY, 0, sizeof(bcmolt_xgpon_ni_broadcast_ploam_packet_data), sizeof(bcmolt_xgpon_ni_broadcast_ploam_packet), offsetof(bcmolt_xgpon_ni_broadcast_ploam_packet, data), (bcmolt_func_packed_len) bcmolt_xgpon_ni_broadcast_ploam_packet_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_ni_broadcast_ploam_packet_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_ni_broadcast_ploam_packet_data_unpack, bcmolt_xgpon_ni_broadcast_ploam_packet_data_scan };
+static bcmolt_group_info group_info_xgpon_ni_cpu_packets = { BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_PROXY, 1, sizeof(bcmolt_xgpon_ni_cpu_packets_data), sizeof(bcmolt_xgpon_ni_cpu_packets), offsetof(bcmolt_xgpon_ni_cpu_packets, data), (bcmolt_func_packed_len) bcmolt_xgpon_ni_cpu_packets_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_ni_cpu_packets_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_ni_cpu_packets_data_unpack, bcmolt_xgpon_ni_cpu_packets_data_scan };
+static bcmolt_group_info group_info_xgpon_onu_key = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, sizeof(bcmolt_xgpon_onu_key), 0, 0, (bcmolt_func_packed_len) bcmolt_xgpon_onu_key_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_onu_key_pack, (bcmolt_func_unpack) bcmolt_xgpon_onu_key_unpack, bcmolt_xgpon_onu_key_scan };
+static bcmolt_group_info group_info_xgpon_onu_cfg = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, sizeof(bcmolt_xgpon_onu_cfg_data), sizeof(bcmolt_xgpon_onu_cfg), offsetof(bcmolt_xgpon_onu_cfg, data), (bcmolt_func_packed_len) bcmolt_xgpon_onu_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_onu_cfg_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_onu_cfg_data_unpack, bcmolt_xgpon_onu_cfg_data_scan };
+static bcmolt_group_info group_info_xgpon_onu_stat = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_STAT, 0, sizeof(bcmolt_xgpon_onu_stat_data), sizeof(bcmolt_xgpon_onu_stat), offsetof(bcmolt_xgpon_onu_stat, data), (bcmolt_func_packed_len) bcmolt_xgpon_onu_stat_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_onu_stat_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_onu_stat_data_unpack, bcmolt_xgpon_onu_stat_data_scan };
+static bcmolt_group_info group_info_xgpon_onu_stat_cfg = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_STAT_CFG, 0, sizeof(bcmolt_xgpon_onu_stat_cfg_data), sizeof(bcmolt_xgpon_onu_stat_cfg), offsetof(bcmolt_xgpon_onu_stat_cfg, data), (bcmolt_func_packed_len) bcmolt_xgpon_onu_stat_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_onu_stat_cfg_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_onu_stat_cfg_data_unpack, bcmolt_xgpon_onu_stat_cfg_data_scan };
+static bcmolt_group_info group_info_xgpon_onu_dfi = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO, 0, sizeof(bcmolt_xgpon_onu_dfi_data), sizeof(bcmolt_xgpon_onu_dfi), offsetof(bcmolt_xgpon_onu_dfi, data), (bcmolt_func_packed_len) bcmolt_xgpon_onu_dfi_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_onu_dfi_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_onu_dfi_data_unpack, bcmolt_xgpon_onu_dfi_data_scan };
+static bcmolt_group_info group_info_xgpon_onu_dgi = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO, 1, sizeof(bcmolt_xgpon_onu_dgi_data), sizeof(bcmolt_xgpon_onu_dgi), offsetof(bcmolt_xgpon_onu_dgi, data), (bcmolt_func_packed_len) bcmolt_xgpon_onu_dgi_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_onu_dgi_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_onu_dgi_data_unpack, bcmolt_xgpon_onu_dgi_data_scan };
+static bcmolt_group_info group_info_xgpon_onu_dowi = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO, 2, sizeof(bcmolt_xgpon_onu_dowi_data), sizeof(bcmolt_xgpon_onu_dowi), offsetof(bcmolt_xgpon_onu_dowi, data), (bcmolt_func_packed_len) bcmolt_xgpon_onu_dowi_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_onu_dowi_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_onu_dowi_data_unpack, bcmolt_xgpon_onu_dowi_data_scan };
+static bcmolt_group_info group_info_xgpon_onu_invalid_dbru_report = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO, 3, sizeof(bcmolt_xgpon_onu_invalid_dbru_report_data), sizeof(bcmolt_xgpon_onu_invalid_dbru_report), offsetof(bcmolt_xgpon_onu_invalid_dbru_report, data), (bcmolt_func_packed_len) bcmolt_xgpon_onu_invalid_dbru_report_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_onu_invalid_dbru_report_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_onu_invalid_dbru_report_data_unpack, bcmolt_xgpon_onu_invalid_dbru_report_data_scan };
+static bcmolt_group_info group_info_xgpon_onu_key_exchange_completed = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO, 4, sizeof(bcmolt_xgpon_onu_key_exchange_completed_data), sizeof(bcmolt_xgpon_onu_key_exchange_completed), offsetof(bcmolt_xgpon_onu_key_exchange_completed, data), (bcmolt_func_packed_len) bcmolt_xgpon_onu_key_exchange_completed_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_onu_key_exchange_completed_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_onu_key_exchange_completed_data_unpack, bcmolt_xgpon_onu_key_exchange_completed_data_scan };
+static bcmolt_group_info group_info_xgpon_onu_key_exchange_cycle_skipped = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO, 5, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_xgpon_onu_key_exchange_key_mismatch = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO, 6, sizeof(bcmolt_xgpon_onu_key_exchange_key_mismatch_data), sizeof(bcmolt_xgpon_onu_key_exchange_key_mismatch), offsetof(bcmolt_xgpon_onu_key_exchange_key_mismatch, data), (bcmolt_func_packed_len) bcmolt_xgpon_onu_key_exchange_key_mismatch_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_onu_key_exchange_key_mismatch_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_onu_key_exchange_key_mismatch_data_unpack, bcmolt_xgpon_onu_key_exchange_key_mismatch_data_scan };
+static bcmolt_group_info group_info_xgpon_onu_key_exchange_key_request_timeout = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO, 7, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_xgpon_onu_looci = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO, 8, sizeof(bcmolt_xgpon_onu_looci_data), sizeof(bcmolt_xgpon_onu_looci), offsetof(bcmolt_xgpon_onu_looci, data), (bcmolt_func_packed_len) bcmolt_xgpon_onu_looci_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_onu_looci_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_onu_looci_data_unpack, bcmolt_xgpon_onu_looci_data_scan };
+static bcmolt_group_info group_info_xgpon_onu_onu_activation_completed = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO, 9, sizeof(bcmolt_xgpon_onu_onu_activation_completed_data), sizeof(bcmolt_xgpon_onu_onu_activation_completed), offsetof(bcmolt_xgpon_onu_onu_activation_completed, data), (bcmolt_func_packed_len) bcmolt_xgpon_onu_onu_activation_completed_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_onu_onu_activation_completed_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_onu_onu_activation_completed_data_unpack, bcmolt_xgpon_onu_onu_activation_completed_data_scan };
+static bcmolt_group_info group_info_xgpon_onu_onu_alarm = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO, 10, sizeof(bcmolt_xgpon_onu_onu_alarm_data), sizeof(bcmolt_xgpon_onu_onu_alarm), offsetof(bcmolt_xgpon_onu_onu_alarm, data), (bcmolt_func_packed_len) bcmolt_xgpon_onu_onu_alarm_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_onu_onu_alarm_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_onu_onu_alarm_data_unpack, bcmolt_xgpon_onu_onu_alarm_data_scan };
+static bcmolt_group_info group_info_xgpon_onu_onu_deactivation_completed = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO, 11, sizeof(bcmolt_xgpon_onu_onu_deactivation_completed_data), sizeof(bcmolt_xgpon_onu_onu_deactivation_completed), offsetof(bcmolt_xgpon_onu_onu_deactivation_completed, data), (bcmolt_func_packed_len) bcmolt_xgpon_onu_onu_deactivation_completed_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_onu_onu_deactivation_completed_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_onu_onu_deactivation_completed_data_unpack, bcmolt_xgpon_onu_onu_deactivation_completed_data_scan };
+static bcmolt_group_info group_info_xgpon_onu_onu_disable_completed = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO, 12, sizeof(bcmolt_xgpon_onu_onu_disable_completed_data), sizeof(bcmolt_xgpon_onu_onu_disable_completed), offsetof(bcmolt_xgpon_onu_onu_disable_completed, data), (bcmolt_func_packed_len) bcmolt_xgpon_onu_onu_disable_completed_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_onu_onu_disable_completed_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_onu_onu_disable_completed_data_unpack, bcmolt_xgpon_onu_onu_disable_completed_data_scan };
+static bcmolt_group_info group_info_xgpon_onu_onu_enable_completed = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO, 13, sizeof(bcmolt_xgpon_onu_onu_enable_completed_data), sizeof(bcmolt_xgpon_onu_onu_enable_completed), offsetof(bcmolt_xgpon_onu_onu_enable_completed, data), (bcmolt_func_packed_len) bcmolt_xgpon_onu_onu_enable_completed_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_onu_onu_enable_completed_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_onu_onu_enable_completed_data_unpack, bcmolt_xgpon_onu_onu_enable_completed_data_scan };
+static bcmolt_group_info group_info_xgpon_onu_onu_tuning_in_completed = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO, 14, sizeof(bcmolt_xgpon_onu_onu_tuning_in_completed_data), sizeof(bcmolt_xgpon_onu_onu_tuning_in_completed), offsetof(bcmolt_xgpon_onu_onu_tuning_in_completed, data), (bcmolt_func_packed_len) bcmolt_xgpon_onu_onu_tuning_in_completed_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_onu_onu_tuning_in_completed_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_onu_onu_tuning_in_completed_data_unpack, bcmolt_xgpon_onu_onu_tuning_in_completed_data_scan };
+static bcmolt_group_info group_info_xgpon_onu_onu_tuning_out_completed = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO, 15, sizeof(bcmolt_xgpon_onu_onu_tuning_out_completed_data), sizeof(bcmolt_xgpon_onu_onu_tuning_out_completed), offsetof(bcmolt_xgpon_onu_onu_tuning_out_completed, data), (bcmolt_func_packed_len) bcmolt_xgpon_onu_onu_tuning_out_completed_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_onu_onu_tuning_out_completed_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_onu_onu_tuning_out_completed_data_unpack, bcmolt_xgpon_onu_onu_tuning_out_completed_data_scan };
+static bcmolt_group_info group_info_xgpon_onu_optical_reflection = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO, 16, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_xgpon_onu_possible_drift = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO, 17, sizeof(bcmolt_xgpon_onu_possible_drift_data), sizeof(bcmolt_xgpon_onu_possible_drift), offsetof(bcmolt_xgpon_onu_possible_drift, data), (bcmolt_func_packed_len) bcmolt_xgpon_onu_possible_drift_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_onu_possible_drift_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_onu_possible_drift_data_unpack, bcmolt_xgpon_onu_possible_drift_data_scan };
+static bcmolt_group_info group_info_xgpon_onu_power_consumption_report = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO, 18, sizeof(bcmolt_xgpon_onu_power_consumption_report_data), sizeof(bcmolt_xgpon_onu_power_consumption_report), offsetof(bcmolt_xgpon_onu_power_consumption_report, data), (bcmolt_func_packed_len) bcmolt_xgpon_onu_power_consumption_report_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_onu_power_consumption_report_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_onu_power_consumption_report_data_unpack, bcmolt_xgpon_onu_power_consumption_report_data_scan };
+static bcmolt_group_info group_info_xgpon_onu_power_level_report = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO, 19, sizeof(bcmolt_xgpon_onu_power_level_report_data), sizeof(bcmolt_xgpon_onu_power_level_report), offsetof(bcmolt_xgpon_onu_power_level_report, data), (bcmolt_func_packed_len) bcmolt_xgpon_onu_power_level_report_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_onu_power_level_report_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_onu_power_level_report_data_unpack, bcmolt_xgpon_onu_power_level_report_data_scan };
+static bcmolt_group_info group_info_xgpon_onu_power_management_state_change = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO, 20, sizeof(bcmolt_xgpon_onu_power_management_state_change_data), sizeof(bcmolt_xgpon_onu_power_management_state_change), offsetof(bcmolt_xgpon_onu_power_management_state_change, data), (bcmolt_func_packed_len) bcmolt_xgpon_onu_power_management_state_change_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_onu_power_management_state_change_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_onu_power_management_state_change_data_unpack, bcmolt_xgpon_onu_power_management_state_change_data_scan };
+static bcmolt_group_info group_info_xgpon_onu_pqsi = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO, 21, sizeof(bcmolt_xgpon_onu_pqsi_data), sizeof(bcmolt_xgpon_onu_pqsi), offsetof(bcmolt_xgpon_onu_pqsi, data), (bcmolt_func_packed_len) bcmolt_xgpon_onu_pqsi_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_onu_pqsi_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_onu_pqsi_data_unpack, bcmolt_xgpon_onu_pqsi_data_scan };
+static bcmolt_group_info group_info_xgpon_onu_ranging_completed = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO, 22, sizeof(bcmolt_xgpon_onu_ranging_completed_data), sizeof(bcmolt_xgpon_onu_ranging_completed), offsetof(bcmolt_xgpon_onu_ranging_completed, data), (bcmolt_func_packed_len) bcmolt_xgpon_onu_ranging_completed_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_onu_ranging_completed_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_onu_ranging_completed_data_unpack, bcmolt_xgpon_onu_ranging_completed_data_scan };
+static bcmolt_group_info group_info_xgpon_onu_registration_id = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO, 23, sizeof(bcmolt_xgpon_onu_registration_id_data), sizeof(bcmolt_xgpon_onu_registration_id), offsetof(bcmolt_xgpon_onu_registration_id, data), (bcmolt_func_packed_len) bcmolt_xgpon_onu_registration_id_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_onu_registration_id_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_onu_registration_id_data_unpack, bcmolt_xgpon_onu_registration_id_data_scan };
+static bcmolt_group_info group_info_xgpon_onu_rssi_measurement_completed = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO, 24, sizeof(bcmolt_xgpon_onu_rssi_measurement_completed_data), sizeof(bcmolt_xgpon_onu_rssi_measurement_completed), offsetof(bcmolt_xgpon_onu_rssi_measurement_completed, data), (bcmolt_func_packed_len) bcmolt_xgpon_onu_rssi_measurement_completed_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_onu_rssi_measurement_completed_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_onu_rssi_measurement_completed_data_unpack, bcmolt_xgpon_onu_rssi_measurement_completed_data_scan };
+static bcmolt_group_info group_info_xgpon_onu_sdi = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO, 25, sizeof(bcmolt_xgpon_onu_sdi_data), sizeof(bcmolt_xgpon_onu_sdi), offsetof(bcmolt_xgpon_onu_sdi, data), (bcmolt_func_packed_len) bcmolt_xgpon_onu_sdi_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_onu_sdi_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_onu_sdi_data_unpack, bcmolt_xgpon_onu_sdi_data_scan };
+static bcmolt_group_info group_info_xgpon_onu_secure_mutual_authentication_failure = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO, 26, sizeof(bcmolt_xgpon_onu_secure_mutual_authentication_failure_data), sizeof(bcmolt_xgpon_onu_secure_mutual_authentication_failure), offsetof(bcmolt_xgpon_onu_secure_mutual_authentication_failure, data), (bcmolt_func_packed_len) bcmolt_xgpon_onu_secure_mutual_authentication_failure_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_onu_secure_mutual_authentication_failure_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_onu_secure_mutual_authentication_failure_data_unpack, bcmolt_xgpon_onu_secure_mutual_authentication_failure_data_scan };
+static bcmolt_group_info group_info_xgpon_onu_sfi = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO, 27, sizeof(bcmolt_xgpon_onu_sfi_data), sizeof(bcmolt_xgpon_onu_sfi), offsetof(bcmolt_xgpon_onu_sfi, data), (bcmolt_func_packed_len) bcmolt_xgpon_onu_sfi_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_onu_sfi_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_onu_sfi_data_unpack, bcmolt_xgpon_onu_sfi_data_scan };
+static bcmolt_group_info group_info_xgpon_onu_stat_alarm_cleared = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO, 28, sizeof(bcmolt_xgpon_onu_stat_alarm_cleared_data), sizeof(bcmolt_xgpon_onu_stat_alarm_cleared), offsetof(bcmolt_xgpon_onu_stat_alarm_cleared, data), (bcmolt_func_packed_len) bcmolt_xgpon_onu_stat_alarm_cleared_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_onu_stat_alarm_cleared_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_onu_stat_alarm_cleared_data_unpack, bcmolt_xgpon_onu_stat_alarm_cleared_data_scan };
+static bcmolt_group_info group_info_xgpon_onu_stat_alarm_raised = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO, 29, sizeof(bcmolt_xgpon_onu_stat_alarm_raised_data), sizeof(bcmolt_xgpon_onu_stat_alarm_raised), offsetof(bcmolt_xgpon_onu_stat_alarm_raised, data), (bcmolt_func_packed_len) bcmolt_xgpon_onu_stat_alarm_raised_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_onu_stat_alarm_raised_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_onu_stat_alarm_raised_data_unpack, bcmolt_xgpon_onu_stat_alarm_raised_data_scan };
+static bcmolt_group_info group_info_xgpon_onu_sufi = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO, 30, sizeof(bcmolt_xgpon_onu_sufi_data), sizeof(bcmolt_xgpon_onu_sufi), offsetof(bcmolt_xgpon_onu_sufi, data), (bcmolt_func_packed_len) bcmolt_xgpon_onu_sufi_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_onu_sufi_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_onu_sufi_data_unpack, bcmolt_xgpon_onu_sufi_data_scan };
+static bcmolt_group_info group_info_xgpon_onu_tiwi = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO, 31, sizeof(bcmolt_xgpon_onu_tiwi_data), sizeof(bcmolt_xgpon_onu_tiwi), offsetof(bcmolt_xgpon_onu_tiwi, data), (bcmolt_func_packed_len) bcmolt_xgpon_onu_tiwi_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_onu_tiwi_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_onu_tiwi_data_unpack, bcmolt_xgpon_onu_tiwi_data_scan };
+static bcmolt_group_info group_info_xgpon_onu_tuning_response = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO, 32, sizeof(bcmolt_xgpon_onu_tuning_response_data), sizeof(bcmolt_xgpon_onu_tuning_response), offsetof(bcmolt_xgpon_onu_tuning_response, data), (bcmolt_func_packed_len) bcmolt_xgpon_onu_tuning_response_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_onu_tuning_response_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_onu_tuning_response_data_unpack, bcmolt_xgpon_onu_tuning_response_data_scan };
+static bcmolt_group_info group_info_xgpon_onu_auto_cfg = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, sizeof(bcmolt_xgpon_onu_auto_cfg_data), sizeof(bcmolt_xgpon_onu_auto_cfg), offsetof(bcmolt_xgpon_onu_auto_cfg, data), (bcmolt_func_packed_len) bcmolt_xgpon_onu_auto_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_onu_auto_cfg_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_onu_auto_cfg_data_unpack, bcmolt_xgpon_onu_auto_cfg_data_scan };
+static bcmolt_group_info group_info_xgpon_onu_adjust_tx_wavelength = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_OPER, 0, sizeof(bcmolt_xgpon_onu_adjust_tx_wavelength_data), sizeof(bcmolt_xgpon_onu_adjust_tx_wavelength), offsetof(bcmolt_xgpon_onu_adjust_tx_wavelength, data), (bcmolt_func_packed_len) bcmolt_xgpon_onu_adjust_tx_wavelength_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_onu_adjust_tx_wavelength_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_onu_adjust_tx_wavelength_data_unpack, bcmolt_xgpon_onu_adjust_tx_wavelength_data_scan };
+static bcmolt_group_info group_info_xgpon_onu_change_power_levelling = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_OPER, 1, sizeof(bcmolt_xgpon_onu_change_power_levelling_data), sizeof(bcmolt_xgpon_onu_change_power_levelling), offsetof(bcmolt_xgpon_onu_change_power_levelling, data), (bcmolt_func_packed_len) bcmolt_xgpon_onu_change_power_levelling_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_onu_change_power_levelling_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_onu_change_power_levelling_data_unpack, bcmolt_xgpon_onu_change_power_levelling_data_scan };
+static bcmolt_group_info group_info_xgpon_onu_get_power_consumption = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_OPER, 2, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_xgpon_onu_get_power_level = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_OPER, 3, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_xgpon_onu_onu_tuning_in = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_OPER, 4, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_xgpon_onu_onu_tuning_out = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_OPER, 5, sizeof(bcmolt_xgpon_onu_onu_tuning_out_data), sizeof(bcmolt_xgpon_onu_onu_tuning_out), offsetof(bcmolt_xgpon_onu_onu_tuning_out, data), (bcmolt_func_packed_len) bcmolt_xgpon_onu_onu_tuning_out_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_onu_onu_tuning_out_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_onu_onu_tuning_out_data_unpack, bcmolt_xgpon_onu_onu_tuning_out_data_scan };
+static bcmolt_group_info group_info_xgpon_onu_request_registration = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_OPER, 6, sizeof(bcmolt_xgpon_onu_request_registration_data), sizeof(bcmolt_xgpon_onu_request_registration), offsetof(bcmolt_xgpon_onu_request_registration, data), (bcmolt_func_packed_len) bcmolt_xgpon_onu_request_registration_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_onu_request_registration_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_onu_request_registration_data_unpack, bcmolt_xgpon_onu_request_registration_data_scan };
+static bcmolt_group_info group_info_xgpon_onu_rssi_measurement = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_OPER, 7, 0, 0, 0, NULL, NULL, NULL };
+static bcmolt_group_info group_info_xgpon_onu_secure_mutual_authentication = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_OPER, 8, sizeof(bcmolt_xgpon_onu_secure_mutual_authentication_data), sizeof(bcmolt_xgpon_onu_secure_mutual_authentication), offsetof(bcmolt_xgpon_onu_secure_mutual_authentication, data), (bcmolt_func_packed_len) bcmolt_xgpon_onu_secure_mutual_authentication_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_onu_secure_mutual_authentication_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_onu_secure_mutual_authentication_data_unpack, bcmolt_xgpon_onu_secure_mutual_authentication_data_scan };
+static bcmolt_group_info group_info_xgpon_onu_set_onu_state = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_OPER, 9, sizeof(bcmolt_xgpon_onu_set_onu_state_data), sizeof(bcmolt_xgpon_onu_set_onu_state), offsetof(bcmolt_xgpon_onu_set_onu_state, data), (bcmolt_func_packed_len) bcmolt_xgpon_onu_set_onu_state_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_onu_set_onu_state_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_onu_set_onu_state_data_unpack, bcmolt_xgpon_onu_set_onu_state_data_scan };
+static bcmolt_group_info group_info_xgpon_onu_cpu_packets = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_PROXY, 0, sizeof(bcmolt_xgpon_onu_cpu_packets_data), sizeof(bcmolt_xgpon_onu_cpu_packets), offsetof(bcmolt_xgpon_onu_cpu_packets, data), (bcmolt_func_packed_len) bcmolt_xgpon_onu_cpu_packets_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_onu_cpu_packets_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_onu_cpu_packets_data_unpack, bcmolt_xgpon_onu_cpu_packets_data_scan };
+static bcmolt_group_info group_info_xgpon_onu_ploam_packet = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_PROXY, 1, sizeof(bcmolt_xgpon_onu_ploam_packet_data), sizeof(bcmolt_xgpon_onu_ploam_packet), offsetof(bcmolt_xgpon_onu_ploam_packet, data), (bcmolt_func_packed_len) bcmolt_xgpon_onu_ploam_packet_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_onu_ploam_packet_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_onu_ploam_packet_data_unpack, bcmolt_xgpon_onu_ploam_packet_data_scan };
+static bcmolt_group_info group_info_xgpon_onu_cpu_packet = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_PROXY_RX, 0, sizeof(bcmolt_xgpon_onu_cpu_packet_data), sizeof(bcmolt_xgpon_onu_cpu_packet), offsetof(bcmolt_xgpon_onu_cpu_packet, data), (bcmolt_func_packed_len) bcmolt_xgpon_onu_cpu_packet_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_onu_cpu_packet_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_onu_cpu_packet_data_unpack, bcmolt_xgpon_onu_cpu_packet_data_scan };
+static bcmolt_group_info group_info_xgpon_onu_omci_packet = { BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_PROXY_RX, 1, sizeof(bcmolt_xgpon_onu_omci_packet_data), sizeof(bcmolt_xgpon_onu_omci_packet), offsetof(bcmolt_xgpon_onu_omci_packet, data), (bcmolt_func_packed_len) bcmolt_xgpon_onu_omci_packet_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_onu_omci_packet_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_onu_omci_packet_data_unpack, bcmolt_xgpon_onu_omci_packet_data_scan };
+static bcmolt_group_info group_info_xgpon_trx_key = { BCMOLT_OBJ_ID_XGPON_TRX, BCMOLT_MGT_GROUP_KEY, 0, sizeof(bcmolt_xgpon_trx_key), 0, 0, (bcmolt_func_packed_len) bcmolt_xgpon_trx_key_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_trx_key_pack, (bcmolt_func_unpack) bcmolt_xgpon_trx_key_unpack, bcmolt_xgpon_trx_key_scan };
+static bcmolt_group_info group_info_xgpon_trx_cfg = { BCMOLT_OBJ_ID_XGPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, sizeof(bcmolt_xgpon_trx_cfg_data), sizeof(bcmolt_xgpon_trx_cfg), offsetof(bcmolt_xgpon_trx_cfg, data), (bcmolt_func_packed_len) bcmolt_xgpon_trx_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_xgpon_trx_cfg_data_pack, (bcmolt_func_unpack) bcmolt_xgpon_trx_cfg_data_unpack, bcmolt_xgpon_trx_cfg_data_scan };
+static bcmolt_group_info group_info_xpon_serdes_key = { BCMOLT_OBJ_ID_XPON_SERDES, BCMOLT_MGT_GROUP_KEY, 0, sizeof(bcmolt_xpon_serdes_key), 0, 0, (bcmolt_func_packed_len) bcmolt_xpon_serdes_key_get_packed_length, (bcmolt_func_pack) bcmolt_xpon_serdes_key_pack, (bcmolt_func_unpack) bcmolt_xpon_serdes_key_unpack, bcmolt_xpon_serdes_key_scan };
+static bcmolt_group_info group_info_xpon_serdes_cfg = { BCMOLT_OBJ_ID_XPON_SERDES, BCMOLT_MGT_GROUP_CFG, 0, sizeof(bcmolt_xpon_serdes_cfg_data), sizeof(bcmolt_xpon_serdes_cfg), offsetof(bcmolt_xpon_serdes_cfg, data), (bcmolt_func_packed_len) bcmolt_xpon_serdes_cfg_data_get_packed_length, (bcmolt_func_pack) bcmolt_xpon_serdes_cfg_data_pack, (bcmolt_func_unpack) bcmolt_xpon_serdes_cfg_data_unpack, bcmolt_xpon_serdes_cfg_data_scan };
+static bcmolt_group_info *group_info[] =
+{
+    &group_info_ae_ni_key,
+    &group_info_ae_ni_cfg,
+    &group_info_ae_ni_set_ae_ni_en_state,
+    &group_info_ae_path_ds_key,
+    &group_info_ae_path_ds_stat,
+    &group_info_ae_path_ds_stat_cfg,
+    &group_info_ae_path_ds_stat_cfg,
+    &group_info_ae_path_ds_stat_cfg,
+    &group_info_ae_path_ds_stat_cfg,
+    &group_info_ae_path_ds_stat_cfg,
+    &group_info_ae_path_ds_stat_cfg,
+    &group_info_ae_path_ds_stat_cfg,
+    &group_info_ae_path_ds_stat_cfg,
+    &group_info_ae_path_ds_stat_cfg,
+    &group_info_ae_path_ds_stat_cfg,
+    &group_info_ae_path_ds_stat_cfg,
+    &group_info_ae_path_ds_stat_cfg,
+    &group_info_ae_path_ds_stat_cfg,
+    &group_info_ae_path_ds_stat_cfg,
+    &group_info_ae_path_ds_stat_cfg,
+    &group_info_ae_path_ds_stat_cfg,
+    &group_info_ae_path_ds_stat_cfg,
+    &group_info_ae_path_ds_stat_alarm_cleared,
+    &group_info_ae_path_ds_stat_alarm_raised,
+    &group_info_ae_path_ds_auto_cfg,
+    &group_info_ae_path_us_key,
+    &group_info_ae_path_us_stat,
+    &group_info_ae_path_us_stat_cfg,
+    &group_info_ae_path_us_stat_cfg,
+    &group_info_ae_path_us_stat_cfg,
+    &group_info_ae_path_us_stat_cfg,
+    &group_info_ae_path_us_stat_cfg,
+    &group_info_ae_path_us_stat_cfg,
+    &group_info_ae_path_us_stat_cfg,
+    &group_info_ae_path_us_stat_cfg,
+    &group_info_ae_path_us_stat_cfg,
+    &group_info_ae_path_us_stat_cfg,
+    &group_info_ae_path_us_stat_cfg,
+    &group_info_ae_path_us_stat_cfg,
+    &group_info_ae_path_us_stat_cfg,
+    &group_info_ae_path_us_stat_cfg,
+    &group_info_ae_path_us_stat_cfg,
+    &group_info_ae_path_us_stat_cfg,
+    &group_info_ae_path_us_stat_cfg,
+    &group_info_ae_path_us_stat_cfg,
+    &group_info_ae_path_us_stat_cfg,
+    &group_info_ae_path_us_stat_cfg,
+    &group_info_ae_path_us_stat_alarm_cleared,
+    &group_info_ae_path_us_stat_alarm_raised,
+    &group_info_ae_path_us_auto_cfg,
+    &group_info_channel_key,
+    &group_info_channel_cfg,
+    &group_info_debug_key,
+    &group_info_debug_cfg,
+    &group_info_debug_cli_output,
+    &group_info_debug_file_almost_full,
+    &group_info_debug_auto_cfg,
+    &group_info_debug_cli_input,
+    &group_info_debug_reset_api_capture,
+    &group_info_debug_start_api_capture,
+    &group_info_debug_stop_api_capture,
+    &group_info_device_key,
+    &group_info_device_cfg,
+    &group_info_device_connection_complete,
+    &group_info_device_connection_established,
+    &group_info_device_connection_failure,
+    &group_info_device_ddr_test_complete,
+    &group_info_device_device_keep_alive,
+    &group_info_device_device_ready,
+    &group_info_device_disconnection_complete,
+    &group_info_device_image_transfer_complete,
+    &group_info_device_indications_dropped,
+    &group_info_device_sw_error,
+    &group_info_device_sw_exception,
+    &group_info_device_auto_cfg,
+    &group_info_device_connect,
+    &group_info_device_disconnect,
+    &group_info_device_host_keep_alive,
+    &group_info_device_image_transfer_data,
+    &group_info_device_image_transfer_start,
+    &group_info_device_reset,
+    &group_info_device_run_ddr_test,
+    &group_info_device_sw_upgrade_activate,
+    &group_info_epon_denied_link_key,
+    &group_info_epon_denied_link_cfg,
+    &group_info_epon_denied_link_laser_on_off_violation,
+    &group_info_epon_denied_link_llid_pool_empty_violation,
+    &group_info_epon_denied_link_max_link_violation,
+    &group_info_epon_denied_link_overhead_profile_violation,
+    &group_info_epon_denied_link_range_violation,
+    &group_info_epon_denied_link_rogue_violation,
+    &group_info_epon_denied_link_system_resource_violation,
+    &group_info_epon_denied_link_tdm_channels_exhausted,
+    &group_info_epon_denied_link_unknown_link_violation,
+    &group_info_epon_denied_link_upstream_bandwidth_violation,
+    &group_info_epon_denied_link_auto_cfg,
+    &group_info_epon_link_key,
+    &group_info_epon_link_cfg,
+    &group_info_epon_link_stat,
+    &group_info_epon_link_stat_cfg,
+    &group_info_epon_link_stat_cfg,
+    &group_info_epon_link_stat_cfg,
+    &group_info_epon_link_stat_cfg,
+    &group_info_epon_link_stat_cfg,
+    &group_info_epon_link_stat_cfg,
+    &group_info_epon_link_stat_cfg,
+    &group_info_epon_link_stat_cfg,
+    &group_info_epon_link_stat_cfg,
+    &group_info_epon_link_stat_cfg,
+    &group_info_epon_link_stat_cfg,
+    &group_info_epon_link_stat_cfg,
+    &group_info_epon_link_stat_cfg,
+    &group_info_epon_link_stat_cfg,
+    &group_info_epon_link_stat_cfg,
+    &group_info_epon_link_stat_cfg,
+    &group_info_epon_link_stat_cfg,
+    &group_info_epon_link_stat_cfg,
+    &group_info_epon_link_stat_cfg,
+    &group_info_epon_link_stat_cfg,
+    &group_info_epon_link_stat_cfg,
+    &group_info_epon_link_stat_cfg,
+    &group_info_epon_link_stat_cfg,
+    &group_info_epon_link_stat_cfg,
+    &group_info_epon_link_stat_cfg,
+    &group_info_epon_link_stat_cfg,
+    &group_info_epon_link_stat_cfg,
+    &group_info_epon_link_stat_cfg,
+    &group_info_epon_link_stat_cfg,
+    &group_info_epon_link_stat_cfg,
+    &group_info_epon_link_stat_cfg,
+    &group_info_epon_link_stat_cfg,
+    &group_info_epon_link_stat_cfg,
+    &group_info_epon_link_stat_cfg,
+    &group_info_epon_link_stat_cfg,
+    &group_info_epon_link_stat_cfg,
+    &group_info_epon_link_stat_cfg,
+    &group_info_epon_link_stat_cfg,
+    &group_info_epon_link_stat_cfg,
+    &group_info_epon_link_stat_cfg,
+    &group_info_epon_link_stat_cfg,
+    &group_info_epon_link_stat_cfg,
+    &group_info_epon_link_stat_cfg,
+    &group_info_epon_link_duplicate_mpcp_registration_request,
+    &group_info_epon_link_encryption_enabled,
+    &group_info_epon_link_key_exchange_failure,
+    &group_info_epon_link_key_exchange_started,
+    &group_info_epon_link_key_exchange_stopped,
+    &group_info_epon_link_link_deleted,
+    &group_info_epon_link_link_speed_mismatch,
+    &group_info_epon_link_mpcp_deregistered,
+    &group_info_epon_link_mpcp_discovered,
+    &group_info_epon_link_mpcp_reg_ack_timeout,
+    &group_info_epon_link_mpcp_report_timeout,
+    &group_info_epon_link_oam_keepalive_timeout,
+    &group_info_epon_link_oam_keepalive_timer_started,
+    &group_info_epon_link_oam_keepalive_timer_stopped,
+    &group_info_epon_link_preprovisioned_link_created,
+    &group_info_epon_link_protection_switch_occurred,
+    &group_info_epon_link_range_value_changed,
+    &group_info_epon_link_rerange_failure,
+    &group_info_epon_link_stat_alarm_cleared,
+    &group_info_epon_link_stat_alarm_raised,
+    &group_info_epon_link_static_registration_done,
+    &group_info_epon_link_auto_cfg,
+    &group_info_epon_link_delete_link,
+    &group_info_epon_link_force_rediscovery,
+    &group_info_epon_link_key_exchange_start,
+    &group_info_epon_link_key_exchange_stop,
+    &group_info_epon_link_oam_keepalive_timer_start,
+    &group_info_epon_link_oam_keepalive_timer_stop,
+    &group_info_epon_link_static_registration,
+    &group_info_epon_link_inject_frame,
+    &group_info_epon_link_frame_captured,
+    &group_info_epon_ni_key,
+    &group_info_epon_ni_cfg,
+    &group_info_epon_ni_auto_rogue_scan_10g_failure,
+    &group_info_epon_ni_auto_rogue_scan_1g_failure,
+    &group_info_epon_ni_llid_quarantined,
+    &group_info_epon_ni_mpcp_timestamp_changed,
+    &group_info_epon_ni_no_reports,
+    &group_info_epon_ni_onu_upgrade_complete,
+    &group_info_epon_ni_rerange_failure,
+    &group_info_epon_ni_rogue_scan_complete,
+    &group_info_epon_ni_rssi_measurement_completed,
+    &group_info_epon_ni_state_change_completed,
+    &group_info_epon_ni_auto_cfg,
+    &group_info_epon_ni_add_link,
+    &group_info_epon_ni_add_multicast_link,
+    &group_info_epon_ni_add_protected_standby_link,
+    &group_info_epon_ni_issue_rssi_grant,
+    &group_info_epon_ni_protection_switching_apply_rerange_delta,
+    &group_info_epon_ni_rogue_llid_scan,
+    &group_info_epon_ni_set_epon_ni_en_state,
+    &group_info_epon_ni_start_onu_upgrade,
+    &group_info_epon_onu_10g_us_key,
+    &group_info_epon_onu_10g_us_cfg,
+    &group_info_epon_onu_10g_us_stat,
+    &group_info_epon_onu_10g_us_stat_cfg,
+    &group_info_epon_onu_10g_us_stat_cfg,
+    &group_info_epon_onu_10g_us_stat_cfg,
+    &group_info_epon_onu_10g_us_stat_cfg,
+    &group_info_epon_onu_10g_us_stat_alarm_cleared,
+    &group_info_epon_onu_10g_us_stat_alarm_raised,
+    &group_info_epon_onu_10g_us_auto_cfg,
+    &group_info_epon_onu_1g_us_key,
+    &group_info_epon_onu_1g_us_cfg,
+    &group_info_epon_onu_1g_us_stat,
+    &group_info_epon_onu_1g_us_stat_cfg,
+    &group_info_epon_onu_1g_us_stat_cfg,
+    &group_info_epon_onu_1g_us_stat_cfg,
+    &group_info_epon_onu_1g_us_stat_cfg,
+    &group_info_epon_onu_1g_us_stat_cfg,
+    &group_info_epon_onu_1g_us_stat_cfg,
+    &group_info_epon_onu_1g_us_stat_cfg,
+    &group_info_epon_onu_1g_us_stat_cfg,
+    &group_info_epon_onu_1g_us_stat_cfg,
+    &group_info_epon_onu_1g_us_stat_cfg,
+    &group_info_epon_onu_1g_us_stat_cfg,
+    &group_info_epon_onu_1g_us_stat_cfg,
+    &group_info_epon_onu_1g_us_stat_cfg,
+    &group_info_epon_onu_1g_us_stat_cfg,
+    &group_info_epon_onu_1g_us_stat_cfg,
+    &group_info_epon_onu_1g_us_stat_cfg,
+    &group_info_epon_onu_1g_us_stat_alarm_cleared,
+    &group_info_epon_onu_1g_us_stat_alarm_raised,
+    &group_info_epon_onu_1g_us_auto_cfg,
+    &group_info_epon_path_10g_ds_key,
+    &group_info_epon_path_10g_ds_cfg,
+    &group_info_epon_path_10g_ds_stat,
+    &group_info_epon_path_10g_ds_stat_cfg,
+    &group_info_epon_path_10g_ds_stat_cfg,
+    &group_info_epon_path_10g_ds_stat_cfg,
+    &group_info_epon_path_10g_ds_stat_cfg,
+    &group_info_epon_path_10g_ds_stat_cfg,
+    &group_info_epon_path_10g_ds_stat_cfg,
+    &group_info_epon_path_10g_ds_stat_cfg,
+    &group_info_epon_path_10g_ds_stat_cfg,
+    &group_info_epon_path_10g_ds_stat_cfg,
+    &group_info_epon_path_10g_ds_stat_cfg,
+    &group_info_epon_path_10g_ds_stat_cfg,
+    &group_info_epon_path_10g_ds_stat_cfg,
+    &group_info_epon_path_10g_ds_stat_cfg,
+    &group_info_epon_path_10g_ds_stat_cfg,
+    &group_info_epon_path_10g_ds_stat_cfg,
+    &group_info_epon_path_10g_ds_stat_cfg,
+    &group_info_epon_path_10g_ds_stat_cfg,
+    &group_info_epon_path_10g_ds_stat_cfg,
+    &group_info_epon_path_10g_ds_stat_cfg,
+    &group_info_epon_path_10g_ds_stat_cfg,
+    &group_info_epon_path_10g_ds_stat_cfg,
+    &group_info_epon_path_10g_ds_stat_alarm_cleared,
+    &group_info_epon_path_10g_ds_stat_alarm_raised,
+    &group_info_epon_path_10g_ds_auto_cfg,
+    &group_info_epon_path_10g_us_key,
+    &group_info_epon_path_10g_us_cfg,
+    &group_info_epon_path_10g_us_stat,
+    &group_info_epon_path_10g_us_stat_cfg,
+    &group_info_epon_path_10g_us_stat_cfg,
+    &group_info_epon_path_10g_us_stat_cfg,
+    &group_info_epon_path_10g_us_stat_cfg,
+    &group_info_epon_path_10g_us_stat_cfg,
+    &group_info_epon_path_10g_us_stat_cfg,
+    &group_info_epon_path_10g_us_stat_cfg,
+    &group_info_epon_path_10g_us_stat_cfg,
+    &group_info_epon_path_10g_us_stat_cfg,
+    &group_info_epon_path_10g_us_stat_cfg,
+    &group_info_epon_path_10g_us_stat_cfg,
+    &group_info_epon_path_10g_us_stat_cfg,
+    &group_info_epon_path_10g_us_stat_cfg,
+    &group_info_epon_path_10g_us_stat_cfg,
+    &group_info_epon_path_10g_us_stat_cfg,
+    &group_info_epon_path_10g_us_stat_cfg,
+    &group_info_epon_path_10g_us_stat_cfg,
+    &group_info_epon_path_10g_us_stat_cfg,
+    &group_info_epon_path_10g_us_stat_cfg,
+    &group_info_epon_path_10g_us_stat_cfg,
+    &group_info_epon_path_10g_us_stat_cfg,
+    &group_info_epon_path_10g_us_stat_cfg,
+    &group_info_epon_path_10g_us_stat_cfg,
+    &group_info_epon_path_10g_us_stat_cfg,
+    &group_info_epon_path_10g_us_stat_cfg,
+    &group_info_epon_path_10g_us_stat_cfg,
+    &group_info_epon_path_10g_us_stat_alarm_cleared,
+    &group_info_epon_path_10g_us_stat_alarm_raised,
+    &group_info_epon_path_10g_us_auto_cfg,
+    &group_info_epon_path_1g_ds_key,
+    &group_info_epon_path_1g_ds_cfg,
+    &group_info_epon_path_1g_ds_stat,
+    &group_info_epon_path_1g_ds_stat_cfg,
+    &group_info_epon_path_1g_ds_stat_cfg,
+    &group_info_epon_path_1g_ds_stat_cfg,
+    &group_info_epon_path_1g_ds_stat_cfg,
+    &group_info_epon_path_1g_ds_stat_cfg,
+    &group_info_epon_path_1g_ds_stat_cfg,
+    &group_info_epon_path_1g_ds_stat_cfg,
+    &group_info_epon_path_1g_ds_stat_cfg,
+    &group_info_epon_path_1g_ds_stat_cfg,
+    &group_info_epon_path_1g_ds_stat_cfg,
+    &group_info_epon_path_1g_ds_stat_cfg,
+    &group_info_epon_path_1g_ds_stat_cfg,
+    &group_info_epon_path_1g_ds_stat_cfg,
+    &group_info_epon_path_1g_ds_stat_cfg,
+    &group_info_epon_path_1g_ds_stat_cfg,
+    &group_info_epon_path_1g_ds_stat_cfg,
+    &group_info_epon_path_1g_ds_stat_cfg,
+    &group_info_epon_path_1g_ds_stat_cfg,
+    &group_info_epon_path_1g_ds_stat_cfg,
+    &group_info_epon_path_1g_ds_stat_cfg,
+    &group_info_epon_path_1g_ds_stat_cfg,
+    &group_info_epon_path_1g_ds_stat_alarm_cleared,
+    &group_info_epon_path_1g_ds_stat_alarm_raised,
+    &group_info_epon_path_1g_ds_auto_cfg,
+    &group_info_epon_path_1g_us_key,
+    &group_info_epon_path_1g_us_cfg,
+    &group_info_epon_path_1g_us_stat,
+    &group_info_epon_path_1g_us_stat_cfg,
+    &group_info_epon_path_1g_us_stat_cfg,
+    &group_info_epon_path_1g_us_stat_cfg,
+    &group_info_epon_path_1g_us_stat_cfg,
+    &group_info_epon_path_1g_us_stat_cfg,
+    &group_info_epon_path_1g_us_stat_cfg,
+    &group_info_epon_path_1g_us_stat_cfg,
+    &group_info_epon_path_1g_us_stat_cfg,
+    &group_info_epon_path_1g_us_stat_cfg,
+    &group_info_epon_path_1g_us_stat_cfg,
+    &group_info_epon_path_1g_us_stat_cfg,
+    &group_info_epon_path_1g_us_stat_cfg,
+    &group_info_epon_path_1g_us_stat_cfg,
+    &group_info_epon_path_1g_us_stat_cfg,
+    &group_info_epon_path_1g_us_stat_cfg,
+    &group_info_epon_path_1g_us_stat_cfg,
+    &group_info_epon_path_1g_us_stat_cfg,
+    &group_info_epon_path_1g_us_stat_cfg,
+    &group_info_epon_path_1g_us_stat_cfg,
+    &group_info_epon_path_1g_us_stat_cfg,
+    &group_info_epon_path_1g_us_stat_cfg,
+    &group_info_epon_path_1g_us_stat_cfg,
+    &group_info_epon_path_1g_us_stat_cfg,
+    &group_info_epon_path_1g_us_stat_cfg,
+    &group_info_epon_path_1g_us_stat_cfg,
+    &group_info_epon_path_1g_us_stat_cfg,
+    &group_info_epon_path_1g_us_stat_alarm_cleared,
+    &group_info_epon_path_1g_us_stat_alarm_raised,
+    &group_info_epon_path_1g_us_auto_cfg,
+    &group_info_epon_rp_key,
+    &group_info_epon_rp_cfg,
+    &group_info_gpio_key,
+    &group_info_gpio_cfg,
+    &group_info_gpon_alloc_key,
+    &group_info_gpon_alloc_cfg,
+    &group_info_gpon_alloc_stat,
+    &group_info_gpon_alloc_stat_cfg,
+    &group_info_gpon_alloc_configuration_completed,
+    &group_info_gpon_alloc_get_alloc_stats_completed,
+    &group_info_gpon_alloc_stat_alarm_cleared,
+    &group_info_gpon_alloc_stat_alarm_raised,
+    &group_info_gpon_alloc_auto_cfg,
+    &group_info_gpon_alloc_get_stats,
+    &group_info_gpon_alloc_set_state,
+    &group_info_gpon_gem_port_key,
+    &group_info_gpon_gem_port_cfg,
+    &group_info_gpon_gem_port_stat,
+    &group_info_gpon_gem_port_stat_cfg,
+    &group_info_gpon_gem_port_stat_cfg,
+    &group_info_gpon_gem_port_stat_cfg,
+    &group_info_gpon_gem_port_stat_cfg,
+    &group_info_gpon_gem_port_configuration_completed,
+    &group_info_gpon_gem_port_stat_alarm_cleared,
+    &group_info_gpon_gem_port_stat_alarm_raised,
+    &group_info_gpon_gem_port_auto_cfg,
+    &group_info_gpon_gem_port_set_state,
+    &group_info_gpon_iwf_key,
+    &group_info_gpon_iwf_cfg,
+    &group_info_gpon_iwf_stat,
+    &group_info_gpon_iwf_stat_cfg,
+    &group_info_gpon_iwf_stat_cfg,
+    &group_info_gpon_iwf_stat_cfg,
+    &group_info_gpon_iwf_stat_cfg,
+    &group_info_gpon_iwf_stat_cfg,
+    &group_info_gpon_iwf_stat_cfg,
+    &group_info_gpon_iwf_stat_cfg,
+    &group_info_gpon_iwf_stat_cfg,
+    &group_info_gpon_iwf_flush_mac_table_completed,
+    &group_info_gpon_iwf_scan_mac_table_completed,
+    &group_info_gpon_iwf_stat_alarm_cleared,
+    &group_info_gpon_iwf_stat_alarm_raised,
+    &group_info_gpon_iwf_auto_cfg,
+    &group_info_gpon_iwf_flush_mac_table,
+    &group_info_gpon_iwf_scan_mac_table,
+    &group_info_gpon_iwf_ds_egress_flow_key,
+    &group_info_gpon_iwf_ds_egress_flow_cfg,
+    &group_info_gpon_iwf_ds_ingress_flow_key,
+    &group_info_gpon_iwf_ds_ingress_flow_cfg,
+    &group_info_gpon_iwf_mac_table_key,
+    &group_info_gpon_iwf_mac_table_cfg,
+    &group_info_gpon_iwf_mac_table_mac_aged,
+    &group_info_gpon_iwf_mac_table_mac_dropped,
+    &group_info_gpon_iwf_mac_table_mac_move,
+    &group_info_gpon_iwf_mac_table_new_mac,
+    &group_info_gpon_iwf_mac_table_auto_cfg,
+    &group_info_gpon_iwf_us_flow_key,
+    &group_info_gpon_iwf_us_flow_cfg,
+    &group_info_gpon_ni_key,
+    &group_info_gpon_ni_cfg,
+    &group_info_gpon_ni_stat,
+    &group_info_gpon_ni_stat_cfg,
+    &group_info_gpon_ni_stat_cfg,
+    &group_info_gpon_ni_stat_cfg,
+    &group_info_gpon_ni_stat_cfg,
+    &group_info_gpon_ni_stat_cfg,
+    &group_info_gpon_ni_stat_cfg,
+    &group_info_gpon_ni_stat_cfg,
+    &group_info_gpon_ni_stat_cfg,
+    &group_info_gpon_ni_stat_cfg,
+    &group_info_gpon_ni_stat_cfg,
+    &group_info_gpon_ni_stat_cfg,
+    &group_info_gpon_ni_stat_cfg,
+    &group_info_gpon_ni_stat_cfg,
+    &group_info_gpon_ni_stat_cfg,
+    &group_info_gpon_ni_stat_cfg,
+    &group_info_gpon_ni_stat_cfg,
+    &group_info_gpon_ni_stat_cfg,
+    &group_info_gpon_ni_stat_cfg,
+    &group_info_gpon_ni_stat_cfg,
+    &group_info_gpon_ni_stat_cfg,
+    &group_info_gpon_ni_stat_cfg,
+    &group_info_gpon_ni_stat_cfg,
+    &group_info_gpon_ni_stat_cfg,
+    &group_info_gpon_ni_stat_cfg,
+    &group_info_gpon_ni_stat_cfg,
+    &group_info_gpon_ni_stat_cfg,
+    &group_info_gpon_ni_stat_cfg,
+    &group_info_gpon_ni_stat_cfg,
+    &group_info_gpon_ni_stat_cfg,
+    &group_info_gpon_ni_stat_cfg,
+    &group_info_gpon_ni_stat_cfg,
+    &group_info_gpon_ni_stat_cfg,
+    &group_info_gpon_ni_stat_cfg,
+    &group_info_gpon_ni_stat_cfg,
+    &group_info_gpon_ni_activate_all_onus_completed,
+    &group_info_gpon_ni_cpu_packets_failure,
+    &group_info_gpon_ni_deactivate_all_onus_completed,
+    &group_info_gpon_ni_disable_all_onus_completed,
+    &group_info_gpon_ni_enable_all_onus_completed,
+    &group_info_gpon_ni_los,
+    &group_info_gpon_ni_onu_discovered,
+    &group_info_gpon_ni_onu_upgrade_complete,
+    &group_info_gpon_ni_protection_switching_onus_ranged,
+    &group_info_gpon_ni_protection_switching_switchover_completed,
+    &group_info_gpon_ni_protection_switching_traffic_resume,
+    &group_info_gpon_ni_rogue_detection_completed,
+    &group_info_gpon_ni_rogue_onu_special_map_cycle_start,
+    &group_info_gpon_ni_serial_number_acquisition_cycle_start,
+    &group_info_gpon_ni_standby_pon_monitoring_cycle_completed,
+    &group_info_gpon_ni_stat_alarm_cleared,
+    &group_info_gpon_ni_stat_alarm_raised,
+    &group_info_gpon_ni_state_change_completed,
+    &group_info_gpon_ni_tod_request_completed,
+    &group_info_gpon_ni_auto_cfg,
+    &group_info_gpon_ni_disable_serial_number,
+    &group_info_gpon_ni_protection_switching_type_c_set_multiple_onu_state,
+    &group_info_gpon_ni_reset,
+    &group_info_gpon_ni_rogue_detection_window,
+    &group_info_gpon_ni_set_onu_state,
+    &group_info_gpon_ni_set_pon_state,
+    &group_info_gpon_ni_single_request_standby_pon_monitoring,
+    &group_info_gpon_ni_start_onu_upgrade,
+    &group_info_gpon_ni_tod_request,
+    &group_info_gpon_ni_broadcast_ploam_packet,
+    &group_info_gpon_ni_cpu_packets,
+    &group_info_gpon_onu_key,
+    &group_info_gpon_onu_cfg,
+    &group_info_gpon_onu_stat,
+    &group_info_gpon_onu_stat_cfg,
+    &group_info_gpon_onu_stat_cfg,
+    &group_info_gpon_onu_stat_cfg,
+    &group_info_gpon_onu_stat_cfg,
+    &group_info_gpon_onu_stat_cfg,
+    &group_info_gpon_onu_stat_cfg,
+    &group_info_gpon_onu_stat_cfg,
+    &group_info_gpon_onu_stat_cfg,
+    &group_info_gpon_onu_stat_cfg,
+    &group_info_gpon_onu_stat_cfg,
+    &group_info_gpon_onu_stat_cfg,
+    &group_info_gpon_onu_stat_cfg,
+    &group_info_gpon_onu_stat_cfg,
+    &group_info_gpon_onu_stat_cfg,
+    &group_info_gpon_onu_stat_cfg,
+    &group_info_gpon_onu_stat_cfg,
+    &group_info_gpon_onu_stat_cfg,
+    &group_info_gpon_onu_stat_cfg,
+    &group_info_gpon_onu_stat_cfg,
+    &group_info_gpon_onu_stat_cfg,
+    &group_info_gpon_onu_ber_interval_configuration_completed,
+    &group_info_gpon_onu_dfi,
+    &group_info_gpon_onu_dgi,
+    &group_info_gpon_onu_dowi,
+    &group_info_gpon_onu_err,
+    &group_info_gpon_onu_invalid_dbru_report,
+    &group_info_gpon_onu_key_exchange_completed,
+    &group_info_gpon_onu_key_exchange_cycle_skipped,
+    &group_info_gpon_onu_key_exchange_decrypt_required,
+    &group_info_gpon_onu_key_exchange_key_mismatch,
+    &group_info_gpon_onu_key_exchange_key_request_timeout,
+    &group_info_gpon_onu_key_exchange_unconsecutive_index,
+    &group_info_gpon_onu_loai,
+    &group_info_gpon_onu_loki,
+    &group_info_gpon_onu_memi,
+    &group_info_gpon_onu_omci_port_id_configuration_completed,
+    &group_info_gpon_onu_onu_activation_completed,
+    &group_info_gpon_onu_onu_activation_standby_completed,
+    &group_info_gpon_onu_onu_alarm,
+    &group_info_gpon_onu_onu_deactivation_completed,
+    &group_info_gpon_onu_onu_disable_completed,
+    &group_info_gpon_onu_onu_enable_completed,
+    &group_info_gpon_onu_optical_reflection,
+    &group_info_gpon_onu_password_authentication_completed,
+    &group_info_gpon_onu_pee,
+    &group_info_gpon_onu_possible_drift,
+    &group_info_gpon_onu_power_management_state_change,
+    &group_info_gpon_onu_pst,
+    &group_info_gpon_onu_ranging_completed,
+    &group_info_gpon_onu_rei,
+    &group_info_gpon_onu_rssi_measurement_completed,
+    &group_info_gpon_onu_sdi,
+    &group_info_gpon_onu_sfi,
+    &group_info_gpon_onu_stat_alarm_cleared,
+    &group_info_gpon_onu_stat_alarm_raised,
+    &group_info_gpon_onu_sufi,
+    &group_info_gpon_onu_tiwi,
+    &group_info_gpon_onu_auto_cfg,
+    &group_info_gpon_onu_change_power_level,
+    &group_info_gpon_onu_rssi_measurement,
+    &group_info_gpon_onu_set_onu_state,
+    &group_info_gpon_onu_cpu_packets,
+    &group_info_gpon_onu_ploam_packet,
+    &group_info_gpon_onu_cpu_packet,
+    &group_info_gpon_onu_omci_packet,
+    &group_info_gpon_trx_key,
+    &group_info_gpon_trx_cfg,
+    &group_info_log_entry_key,
+    &group_info_log_entry_cfg,
+    &group_info_log_entry_stat,
+    &group_info_log_entry_stat_cfg,
+    &group_info_log_entry_stat_cfg,
+    &group_info_log_entry_stat_alarm_cleared,
+    &group_info_log_entry_stat_alarm_raised,
+    &group_info_log_entry_auto_cfg,
+    &group_info_logger_key,
+    &group_info_logger_cfg,
+    &group_info_logger_stat,
+    &group_info_logger_stat_cfg,
+    &group_info_logger_stat_alarm_cleared,
+    &group_info_logger_stat_alarm_raised,
+    &group_info_logger_auto_cfg,
+    &group_info_logger_clear_log,
+    &group_info_nni_key,
+    &group_info_nni_cfg,
+    &group_info_nni_stat,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_cfg,
+    &group_info_nni_stat_alarm_cleared,
+    &group_info_nni_stat_alarm_raised,
+    &group_info_nni_status_changed,
+    &group_info_nni_auto_cfg,
+    &group_info_nni_serdes_key,
+    &group_info_nni_serdes_cfg,
+    &group_info_software_error_key,
+    &group_info_software_error_cfg,
+    &group_info_trx_calibration_key,
+    &group_info_trx_calibration_capture_window_and_statistic_completed,
+    &group_info_trx_calibration_auto_cfg,
+    &group_info_trx_calibration_start_capture_window,
+    &group_info_trx_calibration_stop_capture_window,
+    &group_info_xgpon_alloc_key,
+    &group_info_xgpon_alloc_cfg,
+    &group_info_xgpon_alloc_stat,
+    &group_info_xgpon_alloc_stat_cfg,
+    &group_info_xgpon_alloc_configuration_completed,
+    &group_info_xgpon_alloc_get_alloc_stats_completed,
+    &group_info_xgpon_alloc_stat_alarm_cleared,
+    &group_info_xgpon_alloc_stat_alarm_raised,
+    &group_info_xgpon_alloc_auto_cfg,
+    &group_info_xgpon_alloc_get_stats,
+    &group_info_xgpon_alloc_set_state,
+    &group_info_xgpon_gem_port_key,
+    &group_info_xgpon_gem_port_cfg,
+    &group_info_xgpon_gem_port_stat,
+    &group_info_xgpon_gem_port_stat_cfg,
+    &group_info_xgpon_gem_port_stat_cfg,
+    &group_info_xgpon_gem_port_stat_cfg,
+    &group_info_xgpon_gem_port_stat_cfg,
+    &group_info_xgpon_gem_port_stat_alarm_cleared,
+    &group_info_xgpon_gem_port_stat_alarm_raised,
+    &group_info_xgpon_gem_port_auto_cfg,
+    &group_info_xgpon_iwf_key,
+    &group_info_xgpon_iwf_cfg,
+    &group_info_xgpon_ni_key,
+    &group_info_xgpon_ni_cfg,
+    &group_info_xgpon_ni_stat,
+    &group_info_xgpon_ni_stat_cfg,
+    &group_info_xgpon_ni_stat_cfg,
+    &group_info_xgpon_ni_stat_cfg,
+    &group_info_xgpon_ni_stat_cfg,
+    &group_info_xgpon_ni_stat_cfg,
+    &group_info_xgpon_ni_stat_cfg,
+    &group_info_xgpon_ni_stat_cfg,
+    &group_info_xgpon_ni_stat_cfg,
+    &group_info_xgpon_ni_stat_cfg,
+    &group_info_xgpon_ni_stat_cfg,
+    &group_info_xgpon_ni_stat_cfg,
+    &group_info_xgpon_ni_stat_cfg,
+    &group_info_xgpon_ni_stat_cfg,
+    &group_info_xgpon_ni_stat_cfg,
+    &group_info_xgpon_ni_stat_cfg,
+    &group_info_xgpon_ni_stat_cfg,
+    &group_info_xgpon_ni_stat_cfg,
+    &group_info_xgpon_ni_stat_cfg,
+    &group_info_xgpon_ni_stat_cfg,
+    &group_info_xgpon_ni_stat_cfg,
+    &group_info_xgpon_ni_stat_cfg,
+    &group_info_xgpon_ni_stat_cfg,
+    &group_info_xgpon_ni_stat_cfg,
+    &group_info_xgpon_ni_stat_cfg,
+    &group_info_xgpon_ni_stat_cfg,
+    &group_info_xgpon_ni_stat_cfg,
+    &group_info_xgpon_ni_stat_cfg,
+    &group_info_xgpon_ni_stat_cfg,
+    &group_info_xgpon_ni_stat_cfg,
+    &group_info_xgpon_ni_stat_cfg,
+    &group_info_xgpon_ni_stat_cfg,
+    &group_info_xgpon_ni_stat_cfg,
+    &group_info_xgpon_ni_stat_cfg,
+    &group_info_xgpon_ni_stat_cfg,
+    &group_info_xgpon_ni_stat_cfg,
+    &group_info_xgpon_ni_activate_all_onus_completed,
+    &group_info_xgpon_ni_cpu_packets_failure,
+    &group_info_xgpon_ni_deactivate_all_onus_completed,
+    &group_info_xgpon_ni_disable_all_onus_completed,
+    &group_info_xgpon_ni_enable_all_onus_completed,
+    &group_info_xgpon_ni_los,
+    &group_info_xgpon_ni_onu_discovered,
+    &group_info_xgpon_ni_onu_upgrade_complete,
+    &group_info_xgpon_ni_protection_switching_onus_ranged,
+    &group_info_xgpon_ni_protection_switching_switchover_completed,
+    &group_info_xgpon_ni_protection_switching_traffic_resume,
+    &group_info_xgpon_ni_rogue_detection_completed,
+    &group_info_xgpon_ni_rogue_onu_special_map_cycle_start,
+    &group_info_xgpon_ni_serial_number_acquisition_cycle_start,
+    &group_info_xgpon_ni_standby_pon_monitoring_cycle_completed,
+    &group_info_xgpon_ni_stat_alarm_cleared,
+    &group_info_xgpon_ni_stat_alarm_raised,
+    &group_info_xgpon_ni_state_change_completed,
+    &group_info_xgpon_ni_tod_request_completed,
+    &group_info_xgpon_ni_auto_cfg,
+    &group_info_xgpon_ni_adjust_tx_wavelength,
+    &group_info_xgpon_ni_disable_serial_number,
+    &group_info_xgpon_ni_reset,
+    &group_info_xgpon_ni_rogue_detection_window,
+    &group_info_xgpon_ni_run_special_bw_map,
+    &group_info_xgpon_ni_set_onu_state,
+    &group_info_xgpon_ni_set_pon_state,
+    &group_info_xgpon_ni_single_request_standby_pon_monitoring,
+    &group_info_xgpon_ni_start_onu_upgrade,
+    &group_info_xgpon_ni_tod_request,
+    &group_info_xgpon_ni_broadcast_ploam_packet,
+    &group_info_xgpon_ni_cpu_packets,
+    &group_info_xgpon_onu_key,
+    &group_info_xgpon_onu_cfg,
+    &group_info_xgpon_onu_stat,
+    &group_info_xgpon_onu_stat_cfg,
+    &group_info_xgpon_onu_stat_cfg,
+    &group_info_xgpon_onu_stat_cfg,
+    &group_info_xgpon_onu_stat_cfg,
+    &group_info_xgpon_onu_stat_cfg,
+    &group_info_xgpon_onu_stat_cfg,
+    &group_info_xgpon_onu_stat_cfg,
+    &group_info_xgpon_onu_stat_cfg,
+    &group_info_xgpon_onu_stat_cfg,
+    &group_info_xgpon_onu_stat_cfg,
+    &group_info_xgpon_onu_stat_cfg,
+    &group_info_xgpon_onu_stat_cfg,
+    &group_info_xgpon_onu_stat_cfg,
+    &group_info_xgpon_onu_stat_cfg,
+    &group_info_xgpon_onu_stat_cfg,
+    &group_info_xgpon_onu_stat_cfg,
+    &group_info_xgpon_onu_stat_cfg,
+    &group_info_xgpon_onu_stat_cfg,
+    &group_info_xgpon_onu_stat_cfg,
+    &group_info_xgpon_onu_stat_cfg,
+    &group_info_xgpon_onu_dfi,
+    &group_info_xgpon_onu_dgi,
+    &group_info_xgpon_onu_dowi,
+    &group_info_xgpon_onu_invalid_dbru_report,
+    &group_info_xgpon_onu_key_exchange_completed,
+    &group_info_xgpon_onu_key_exchange_cycle_skipped,
+    &group_info_xgpon_onu_key_exchange_key_mismatch,
+    &group_info_xgpon_onu_key_exchange_key_request_timeout,
+    &group_info_xgpon_onu_looci,
+    &group_info_xgpon_onu_onu_activation_completed,
+    &group_info_xgpon_onu_onu_alarm,
+    &group_info_xgpon_onu_onu_deactivation_completed,
+    &group_info_xgpon_onu_onu_disable_completed,
+    &group_info_xgpon_onu_onu_enable_completed,
+    &group_info_xgpon_onu_onu_tuning_in_completed,
+    &group_info_xgpon_onu_onu_tuning_out_completed,
+    &group_info_xgpon_onu_optical_reflection,
+    &group_info_xgpon_onu_possible_drift,
+    &group_info_xgpon_onu_power_consumption_report,
+    &group_info_xgpon_onu_power_level_report,
+    &group_info_xgpon_onu_power_management_state_change,
+    &group_info_xgpon_onu_pqsi,
+    &group_info_xgpon_onu_ranging_completed,
+    &group_info_xgpon_onu_registration_id,
+    &group_info_xgpon_onu_rssi_measurement_completed,
+    &group_info_xgpon_onu_sdi,
+    &group_info_xgpon_onu_secure_mutual_authentication_failure,
+    &group_info_xgpon_onu_sfi,
+    &group_info_xgpon_onu_stat_alarm_cleared,
+    &group_info_xgpon_onu_stat_alarm_raised,
+    &group_info_xgpon_onu_sufi,
+    &group_info_xgpon_onu_tiwi,
+    &group_info_xgpon_onu_tuning_response,
+    &group_info_xgpon_onu_auto_cfg,
+    &group_info_xgpon_onu_adjust_tx_wavelength,
+    &group_info_xgpon_onu_change_power_levelling,
+    &group_info_xgpon_onu_get_power_consumption,
+    &group_info_xgpon_onu_get_power_level,
+    &group_info_xgpon_onu_onu_tuning_in,
+    &group_info_xgpon_onu_onu_tuning_out,
+    &group_info_xgpon_onu_request_registration,
+    &group_info_xgpon_onu_rssi_measurement,
+    &group_info_xgpon_onu_secure_mutual_authentication,
+    &group_info_xgpon_onu_set_onu_state,
+    &group_info_xgpon_onu_cpu_packets,
+    &group_info_xgpon_onu_ploam_packet,
+    &group_info_xgpon_onu_cpu_packet,
+    &group_info_xgpon_onu_omci_packet,
+    &group_info_xgpon_trx_key,
+    &group_info_xgpon_trx_cfg,
+    &group_info_xpon_serdes_key,
+    &group_info_xpon_serdes_cfg
+};
+static bcmolt_group_id group_ids_ae_ni_key[] = { BCMOLT_GROUP_ID_AE_NI_KEY };
+static bcmolt_group_id group_ids_ae_ni_cfg[] = { BCMOLT_GROUP_ID_AE_NI_CFG };
+static bcmolt_group_id group_ids_ae_ni_oper[] = { BCMOLT_GROUP_ID_AE_NI_SET_AE_NI_EN_STATE };
+static bcmolt_group_id group_ids_ae_path_ds_key[] = { BCMOLT_GROUP_ID_AE_PATH_DS_KEY };
+static bcmolt_group_id group_ids_ae_path_ds_stat[] = { BCMOLT_GROUP_ID_AE_PATH_DS_STAT };
+static bcmolt_group_id group_ids_ae_path_ds_stat_cfg[] = { BCMOLT_GROUP_ID_AE_PATH_DS_STAT_CFG_BYTES, BCMOLT_GROUP_ID_AE_PATH_DS_STAT_CFG_FRAMES, BCMOLT_GROUP_ID_AE_PATH_DS_STAT_CFG_FRAMES_64, BCMOLT_GROUP_ID_AE_PATH_DS_STAT_CFG_FRAMES_65_127, BCMOLT_GROUP_ID_AE_PATH_DS_STAT_CFG_FRAMES_128_255, BCMOLT_GROUP_ID_AE_PATH_DS_STAT_CFG_FRAMES_256_511, BCMOLT_GROUP_ID_AE_PATH_DS_STAT_CFG_FRAMES_512_1023, BCMOLT_GROUP_ID_AE_PATH_DS_STAT_CFG_FRAMES_1024_1518, BCMOLT_GROUP_ID_AE_PATH_DS_STAT_CFG_FRAMES_1519_2047, BCMOLT_GROUP_ID_AE_PATH_DS_STAT_CFG_FRAMES_2048_4095, BCMOLT_GROUP_ID_AE_PATH_DS_STAT_CFG_FRAMES_4096_9216, BCMOLT_GROUP_ID_AE_PATH_DS_STAT_CFG_FRAMES_9217_16383, BCMOLT_GROUP_ID_AE_PATH_DS_STAT_CFG_BROADCAST_FRAMES, BCMOLT_GROUP_ID_AE_PATH_DS_STAT_CFG_DATA_BYTES, BCMOLT_GROUP_ID_AE_PATH_DS_STAT_CFG_MULTICAST_FRAMES, BCMOLT_GROUP_ID_AE_PATH_DS_STAT_CFG_UNICAST_FRAMES, BCMOLT_GROUP_ID_AE_PATH_DS_STAT_CFG_ABORT_FRAMES };
+static bcmolt_group_id group_ids_ae_path_ds_auto[] = { BCMOLT_GROUP_ID_AE_PATH_DS_STAT_ALARM_CLEARED, BCMOLT_GROUP_ID_AE_PATH_DS_STAT_ALARM_RAISED };
+static bcmolt_group_id group_ids_ae_path_ds_auto_cfg[] = { BCMOLT_GROUP_ID_AE_PATH_DS_AUTO_CFG };
+static bcmolt_group_id group_ids_ae_path_us_key[] = { BCMOLT_GROUP_ID_AE_PATH_US_KEY };
+static bcmolt_group_id group_ids_ae_path_us_stat[] = { BCMOLT_GROUP_ID_AE_PATH_US_STAT };
+static bcmolt_group_id group_ids_ae_path_us_stat_cfg[] = { BCMOLT_GROUP_ID_AE_PATH_US_STAT_CFG_BYTES, BCMOLT_GROUP_ID_AE_PATH_US_STAT_CFG_FRAMES, BCMOLT_GROUP_ID_AE_PATH_US_STAT_CFG_FRAMES_64, BCMOLT_GROUP_ID_AE_PATH_US_STAT_CFG_FRAMES_65_127, BCMOLT_GROUP_ID_AE_PATH_US_STAT_CFG_FRAMES_128_255, BCMOLT_GROUP_ID_AE_PATH_US_STAT_CFG_FRAMES_256_511, BCMOLT_GROUP_ID_AE_PATH_US_STAT_CFG_FRAMES_512_1023, BCMOLT_GROUP_ID_AE_PATH_US_STAT_CFG_FRAMES_1024_1518, BCMOLT_GROUP_ID_AE_PATH_US_STAT_CFG_FRAMES_1519_2047, BCMOLT_GROUP_ID_AE_PATH_US_STAT_CFG_FRAMES_2048_4095, BCMOLT_GROUP_ID_AE_PATH_US_STAT_CFG_FRAMES_4096_9216, BCMOLT_GROUP_ID_AE_PATH_US_STAT_CFG_FRAMES_9217_16383, BCMOLT_GROUP_ID_AE_PATH_US_STAT_CFG_BROADCAST_FRAMES, BCMOLT_GROUP_ID_AE_PATH_US_STAT_CFG_DATA_BYTES, BCMOLT_GROUP_ID_AE_PATH_US_STAT_CFG_MULTICAST_FRAMES, BCMOLT_GROUP_ID_AE_PATH_US_STAT_CFG_UNICAST_FRAMES, BCMOLT_GROUP_ID_AE_PATH_US_STAT_CFG_ABORT_FRAMES, BCMOLT_GROUP_ID_AE_PATH_US_STAT_CFG_FCS_ERROR, BCMOLT_GROUP_ID_AE_PATH_US_STAT_CFG_OVERSIZE_ERROR, BCMOLT_GROUP_ID_AE_PATH_US_STAT_CFG_RUNT_ERROR };
+static bcmolt_group_id group_ids_ae_path_us_auto[] = { BCMOLT_GROUP_ID_AE_PATH_US_STAT_ALARM_CLEARED, BCMOLT_GROUP_ID_AE_PATH_US_STAT_ALARM_RAISED };
+static bcmolt_group_id group_ids_ae_path_us_auto_cfg[] = { BCMOLT_GROUP_ID_AE_PATH_US_AUTO_CFG };
+static bcmolt_group_id group_ids_channel_key[] = { BCMOLT_GROUP_ID_CHANNEL_KEY };
+static bcmolt_group_id group_ids_channel_cfg[] = { BCMOLT_GROUP_ID_CHANNEL_CFG };
+static bcmolt_group_id group_ids_debug_key[] = { BCMOLT_GROUP_ID_DEBUG_KEY };
+static bcmolt_group_id group_ids_debug_cfg[] = { BCMOLT_GROUP_ID_DEBUG_CFG };
+static bcmolt_group_id group_ids_debug_auto[] = { BCMOLT_GROUP_ID_DEBUG_CLI_OUTPUT, BCMOLT_GROUP_ID_DEBUG_FILE_ALMOST_FULL };
+static bcmolt_group_id group_ids_debug_auto_cfg[] = { BCMOLT_GROUP_ID_DEBUG_AUTO_CFG };
+static bcmolt_group_id group_ids_debug_oper[] = { BCMOLT_GROUP_ID_DEBUG_CLI_INPUT, BCMOLT_GROUP_ID_DEBUG_RESET_API_CAPTURE, BCMOLT_GROUP_ID_DEBUG_START_API_CAPTURE, BCMOLT_GROUP_ID_DEBUG_STOP_API_CAPTURE };
+static bcmolt_group_id group_ids_device_key[] = { BCMOLT_GROUP_ID_DEVICE_KEY };
+static bcmolt_group_id group_ids_device_cfg[] = { BCMOLT_GROUP_ID_DEVICE_CFG };
+static bcmolt_group_id group_ids_device_auto[] = { BCMOLT_GROUP_ID_DEVICE_CONNECTION_COMPLETE, BCMOLT_GROUP_ID_DEVICE_CONNECTION_ESTABLISHED, BCMOLT_GROUP_ID_DEVICE_CONNECTION_FAILURE, BCMOLT_GROUP_ID_DEVICE_DDR_TEST_COMPLETE, BCMOLT_GROUP_ID_DEVICE_DEVICE_KEEP_ALIVE, BCMOLT_GROUP_ID_DEVICE_DEVICE_READY, BCMOLT_GROUP_ID_DEVICE_DISCONNECTION_COMPLETE, BCMOLT_GROUP_ID_DEVICE_IMAGE_TRANSFER_COMPLETE, BCMOLT_GROUP_ID_DEVICE_INDICATIONS_DROPPED, BCMOLT_GROUP_ID_DEVICE_SW_ERROR, BCMOLT_GROUP_ID_DEVICE_SW_EXCEPTION };
+static bcmolt_group_id group_ids_device_auto_cfg[] = { BCMOLT_GROUP_ID_DEVICE_AUTO_CFG };
+static bcmolt_group_id group_ids_device_oper[] = { BCMOLT_GROUP_ID_DEVICE_CONNECT, BCMOLT_GROUP_ID_DEVICE_DISCONNECT, BCMOLT_GROUP_ID_DEVICE_HOST_KEEP_ALIVE, BCMOLT_GROUP_ID_DEVICE_IMAGE_TRANSFER_DATA, BCMOLT_GROUP_ID_DEVICE_IMAGE_TRANSFER_START, BCMOLT_GROUP_ID_DEVICE_RESET, BCMOLT_GROUP_ID_DEVICE_RUN_DDR_TEST, BCMOLT_GROUP_ID_DEVICE_SW_UPGRADE_ACTIVATE };
+static bcmolt_group_id group_ids_epon_denied_link_key[] = { BCMOLT_GROUP_ID_EPON_DENIED_LINK_KEY };
+static bcmolt_group_id group_ids_epon_denied_link_cfg[] = { BCMOLT_GROUP_ID_EPON_DENIED_LINK_CFG };
+static bcmolt_group_id group_ids_epon_denied_link_auto[] = { BCMOLT_GROUP_ID_EPON_DENIED_LINK_LASER_ON_OFF_VIOLATION, BCMOLT_GROUP_ID_EPON_DENIED_LINK_LLID_POOL_EMPTY_VIOLATION, BCMOLT_GROUP_ID_EPON_DENIED_LINK_MAX_LINK_VIOLATION, BCMOLT_GROUP_ID_EPON_DENIED_LINK_OVERHEAD_PROFILE_VIOLATION, BCMOLT_GROUP_ID_EPON_DENIED_LINK_RANGE_VIOLATION, BCMOLT_GROUP_ID_EPON_DENIED_LINK_ROGUE_VIOLATION, BCMOLT_GROUP_ID_EPON_DENIED_LINK_SYSTEM_RESOURCE_VIOLATION, BCMOLT_GROUP_ID_EPON_DENIED_LINK_TDM_CHANNELS_EXHAUSTED, BCMOLT_GROUP_ID_EPON_DENIED_LINK_UNKNOWN_LINK_VIOLATION, BCMOLT_GROUP_ID_EPON_DENIED_LINK_UPSTREAM_BANDWIDTH_VIOLATION };
+static bcmolt_group_id group_ids_epon_denied_link_auto_cfg[] = { BCMOLT_GROUP_ID_EPON_DENIED_LINK_AUTO_CFG };
+static bcmolt_group_id group_ids_epon_link_key[] = { BCMOLT_GROUP_ID_EPON_LINK_KEY };
+static bcmolt_group_id group_ids_epon_link_cfg[] = { BCMOLT_GROUP_ID_EPON_LINK_CFG };
+static bcmolt_group_id group_ids_epon_link_stat[] = { BCMOLT_GROUP_ID_EPON_LINK_STAT };
+static bcmolt_group_id group_ids_epon_link_stat_cfg[] = { BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_DATA_BYTES, BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_DATA_FRAMES, BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_FRAMES_64, BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_FRAMES_65_127, BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_FRAMES_128_255, BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_FRAMES_256_511, BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_FRAMES_512_1023, BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_FRAMES_1024_1518, BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_FRAMES_1519_2047, BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_FRAMES_2048_4095, BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_FRAMES_4096_9216, BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_FRAMES_9217_16383, BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_OAM_BYTES, BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_OAM_FRAMES, BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_MPCP_FRAMES, BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_BROADCAST_FRAMES, BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_UNICAST_FRAMES, BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_MULTICAST_FRAMES, BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_REPORT_FRAMES, BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_FCS_ERROR, BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_OVERSIZE_ERROR, BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_RUNT_ERROR, BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_LINE_CODE_ERROR, BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_RX_LINE_CODE_ERROR_MAX, BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_TX_DATA_BYTES, BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_TX_DATA_FRAMES, BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_TX_FRAMES_64, BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_TX_FRAMES_65_127, BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_TX_FRAMES_128_255, BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_TX_FRAMES_256_511, BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_TX_FRAMES_512_1023, BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_TX_FRAMES_1024_1518, BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_TX_FRAMES_1519_2047, BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_TX_FRAMES_2048_4095, BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_TX_FRAMES_4096_9216, BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_TX_FRAMES_9217_16383, BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_TX_OAM_BYTES, BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_TX_OAM_FRAMES, BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_TX_MPCP_FRAMES, BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_TX_BROADCAST_FRAMES, BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_TX_UNICAST_FRAMES, BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_TX_MULTICAST_FRAMES, BCMOLT_GROUP_ID_EPON_LINK_STAT_CFG_TX_GATES };
+static bcmolt_group_id group_ids_epon_link_auto[] = { BCMOLT_GROUP_ID_EPON_LINK_DUPLICATE_MPCP_REGISTRATION_REQUEST, BCMOLT_GROUP_ID_EPON_LINK_ENCRYPTION_ENABLED, BCMOLT_GROUP_ID_EPON_LINK_KEY_EXCHANGE_FAILURE, BCMOLT_GROUP_ID_EPON_LINK_KEY_EXCHANGE_STARTED, BCMOLT_GROUP_ID_EPON_LINK_KEY_EXCHANGE_STOPPED, BCMOLT_GROUP_ID_EPON_LINK_LINK_DELETED, BCMOLT_GROUP_ID_EPON_LINK_LINK_SPEED_MISMATCH, BCMOLT_GROUP_ID_EPON_LINK_MPCP_DEREGISTERED, BCMOLT_GROUP_ID_EPON_LINK_MPCP_DISCOVERED, BCMOLT_GROUP_ID_EPON_LINK_MPCP_REG_ACK_TIMEOUT, BCMOLT_GROUP_ID_EPON_LINK_MPCP_REPORT_TIMEOUT, BCMOLT_GROUP_ID_EPON_LINK_OAM_KEEPALIVE_TIMEOUT, BCMOLT_GROUP_ID_EPON_LINK_OAM_KEEPALIVE_TIMER_STARTED, BCMOLT_GROUP_ID_EPON_LINK_OAM_KEEPALIVE_TIMER_STOPPED, BCMOLT_GROUP_ID_EPON_LINK_PREPROVISIONED_LINK_CREATED, BCMOLT_GROUP_ID_EPON_LINK_PROTECTION_SWITCH_OCCURRED, BCMOLT_GROUP_ID_EPON_LINK_RANGE_VALUE_CHANGED, BCMOLT_GROUP_ID_EPON_LINK_RERANGE_FAILURE, BCMOLT_GROUP_ID_EPON_LINK_STAT_ALARM_CLEARED, BCMOLT_GROUP_ID_EPON_LINK_STAT_ALARM_RAISED, BCMOLT_GROUP_ID_EPON_LINK_STATIC_REGISTRATION_DONE };
+static bcmolt_group_id group_ids_epon_link_auto_cfg[] = { BCMOLT_GROUP_ID_EPON_LINK_AUTO_CFG };
+static bcmolt_group_id group_ids_epon_link_oper[] = { BCMOLT_GROUP_ID_EPON_LINK_DELETE_LINK, BCMOLT_GROUP_ID_EPON_LINK_FORCE_REDISCOVERY, BCMOLT_GROUP_ID_EPON_LINK_KEY_EXCHANGE_START, BCMOLT_GROUP_ID_EPON_LINK_KEY_EXCHANGE_STOP, BCMOLT_GROUP_ID_EPON_LINK_OAM_KEEPALIVE_TIMER_START, BCMOLT_GROUP_ID_EPON_LINK_OAM_KEEPALIVE_TIMER_STOP, BCMOLT_GROUP_ID_EPON_LINK_STATIC_REGISTRATION };
+static bcmolt_group_id group_ids_epon_link_proxy[] = { BCMOLT_GROUP_ID_EPON_LINK_INJECT_FRAME };
+static bcmolt_group_id group_ids_epon_link_proxy_rx[] = { BCMOLT_GROUP_ID_EPON_LINK_FRAME_CAPTURED };
+static bcmolt_group_id group_ids_epon_ni_key[] = { BCMOLT_GROUP_ID_EPON_NI_KEY };
+static bcmolt_group_id group_ids_epon_ni_cfg[] = { BCMOLT_GROUP_ID_EPON_NI_CFG };
+static bcmolt_group_id group_ids_epon_ni_auto[] = { BCMOLT_GROUP_ID_EPON_NI_AUTO_ROGUE_SCAN_10G_FAILURE, BCMOLT_GROUP_ID_EPON_NI_AUTO_ROGUE_SCAN_1G_FAILURE, BCMOLT_GROUP_ID_EPON_NI_LLID_QUARANTINED, BCMOLT_GROUP_ID_EPON_NI_MPCP_TIMESTAMP_CHANGED, BCMOLT_GROUP_ID_EPON_NI_NO_REPORTS, BCMOLT_GROUP_ID_EPON_NI_ONU_UPGRADE_COMPLETE, BCMOLT_GROUP_ID_EPON_NI_RERANGE_FAILURE, BCMOLT_GROUP_ID_EPON_NI_ROGUE_SCAN_COMPLETE, BCMOLT_GROUP_ID_EPON_NI_RSSI_MEASUREMENT_COMPLETED, BCMOLT_GROUP_ID_EPON_NI_STATE_CHANGE_COMPLETED };
+static bcmolt_group_id group_ids_epon_ni_auto_cfg[] = { BCMOLT_GROUP_ID_EPON_NI_AUTO_CFG };
+static bcmolt_group_id group_ids_epon_ni_oper[] = { BCMOLT_GROUP_ID_EPON_NI_ADD_LINK, BCMOLT_GROUP_ID_EPON_NI_ADD_MULTICAST_LINK, BCMOLT_GROUP_ID_EPON_NI_ADD_PROTECTED_STANDBY_LINK, BCMOLT_GROUP_ID_EPON_NI_ISSUE_RSSI_GRANT, BCMOLT_GROUP_ID_EPON_NI_PROTECTION_SWITCHING_APPLY_RERANGE_DELTA, BCMOLT_GROUP_ID_EPON_NI_ROGUE_LLID_SCAN, BCMOLT_GROUP_ID_EPON_NI_SET_EPON_NI_EN_STATE, BCMOLT_GROUP_ID_EPON_NI_START_ONU_UPGRADE };
+static bcmolt_group_id group_ids_epon_onu_10g_us_key[] = { BCMOLT_GROUP_ID_EPON_ONU_10G_US_KEY };
+static bcmolt_group_id group_ids_epon_onu_10g_us_cfg[] = { BCMOLT_GROUP_ID_EPON_ONU_10G_US_CFG };
+static bcmolt_group_id group_ids_epon_onu_10g_us_stat[] = { BCMOLT_GROUP_ID_EPON_ONU_10G_US_STAT };
+static bcmolt_group_id group_ids_epon_onu_10g_us_stat_cfg[] = { BCMOLT_GROUP_ID_EPON_ONU_10G_US_STAT_CFG_FEC_CODE_WORDS_TOTAL, BCMOLT_GROUP_ID_EPON_ONU_10G_US_STAT_CFG_FEC_CODE_WORDS_DECODE_FAILS, BCMOLT_GROUP_ID_EPON_ONU_10G_US_STAT_CFG_FEC_ZEROES_CORRECTED, BCMOLT_GROUP_ID_EPON_ONU_10G_US_STAT_CFG_FEC_ONES_CORRECTED };
+static bcmolt_group_id group_ids_epon_onu_10g_us_auto[] = { BCMOLT_GROUP_ID_EPON_ONU_10G_US_STAT_ALARM_CLEARED, BCMOLT_GROUP_ID_EPON_ONU_10G_US_STAT_ALARM_RAISED };
+static bcmolt_group_id group_ids_epon_onu_10g_us_auto_cfg[] = { BCMOLT_GROUP_ID_EPON_ONU_10G_US_AUTO_CFG };
+static bcmolt_group_id group_ids_epon_onu_1g_us_key[] = { BCMOLT_GROUP_ID_EPON_ONU_1G_US_KEY };
+static bcmolt_group_id group_ids_epon_onu_1g_us_cfg[] = { BCMOLT_GROUP_ID_EPON_ONU_1G_US_CFG };
+static bcmolt_group_id group_ids_epon_onu_1g_us_stat[] = { BCMOLT_GROUP_ID_EPON_ONU_1G_US_STAT };
+static bcmolt_group_id group_ids_epon_onu_1g_us_stat_cfg[] = { BCMOLT_GROUP_ID_EPON_ONU_1G_US_STAT_CFG_GOOD_FRAMES, BCMOLT_GROUP_ID_EPON_ONU_1G_US_STAT_CFG_GOOD_BYTES, BCMOLT_GROUP_ID_EPON_ONU_1G_US_STAT_CFG_OVERSZ_FRAMES, BCMOLT_GROUP_ID_EPON_ONU_1G_US_STAT_CFG_NON_FEC_GOOD_FRAMES, BCMOLT_GROUP_ID_EPON_ONU_1G_US_STAT_CFG_NON_FEC_GOOD_BYTES, BCMOLT_GROUP_ID_EPON_ONU_1G_US_STAT_CFG_FEC_GOOD_FRAMES, BCMOLT_GROUP_ID_EPON_ONU_1G_US_STAT_CFG_FEC_GOOD_BYTES, BCMOLT_GROUP_ID_EPON_ONU_1G_US_STAT_CFG_FEC_FRAMES_EXC_ERRS, BCMOLT_GROUP_ID_EPON_ONU_1G_US_STAT_CFG_FEC_BLKS_NO_ERRS, BCMOLT_GROUP_ID_EPON_ONU_1G_US_STAT_CFG_FEC_BLKS_CORR_ERRS, BCMOLT_GROUP_ID_EPON_ONU_1G_US_STAT_CFG_FEC_BLKS_UNCORR_ERRS, BCMOLT_GROUP_ID_EPON_ONU_1G_US_STAT_CFG_FEC_CORR_BYTES, BCMOLT_GROUP_ID_EPON_ONU_1G_US_STAT_CFG_FEC_CORR_ZEROES, BCMOLT_GROUP_ID_EPON_ONU_1G_US_STAT_CFG_FEC_CORR_ONES, BCMOLT_GROUP_ID_EPON_ONU_1G_US_STAT_CFG_UNDERSZ_FRAMES, BCMOLT_GROUP_ID_EPON_ONU_1G_US_STAT_CFG_ERRORSZ_FRAMES };
+static bcmolt_group_id group_ids_epon_onu_1g_us_auto[] = { BCMOLT_GROUP_ID_EPON_ONU_1G_US_STAT_ALARM_CLEARED, BCMOLT_GROUP_ID_EPON_ONU_1G_US_STAT_ALARM_RAISED };
+static bcmolt_group_id group_ids_epon_onu_1g_us_auto_cfg[] = { BCMOLT_GROUP_ID_EPON_ONU_1G_US_AUTO_CFG };
+static bcmolt_group_id group_ids_epon_path_10g_ds_key[] = { BCMOLT_GROUP_ID_EPON_PATH_10G_DS_KEY };
+static bcmolt_group_id group_ids_epon_path_10g_ds_cfg[] = { BCMOLT_GROUP_ID_EPON_PATH_10G_DS_CFG };
+static bcmolt_group_id group_ids_epon_path_10g_ds_stat[] = { BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT };
+static bcmolt_group_id group_ids_epon_path_10g_ds_stat_cfg[] = { BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_CFG_BYTES, BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_CFG_FRAMES, BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_CFG_FRAMES_64, BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_CFG_FRAMES_65_127, BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_CFG_FRAMES_128_255, BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_CFG_FRAMES_256_511, BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_CFG_FRAMES_512_1023, BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_CFG_FRAMES_1024_1518, BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_CFG_FRAMES_1519_2047, BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_CFG_FRAMES_2048_4095, BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_CFG_FRAMES_4096_9216, BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_CFG_FRAMES_9217_16383, BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_CFG_BROADCAST_FRAMES, BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_CFG_DATA_BYTES, BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_CFG_MULTICAST_FRAMES, BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_CFG_UNICAST_FRAMES, BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_CFG_OAM_BYTES, BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_CFG_OAM_FRAMES, BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_CFG_GATE_FRAMES, BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_CFG_MPCP_FRAMES, BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_CFG_ABORT_FRAMES };
+static bcmolt_group_id group_ids_epon_path_10g_ds_auto[] = { BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_ALARM_CLEARED, BCMOLT_GROUP_ID_EPON_PATH_10G_DS_STAT_ALARM_RAISED };
+static bcmolt_group_id group_ids_epon_path_10g_ds_auto_cfg[] = { BCMOLT_GROUP_ID_EPON_PATH_10G_DS_AUTO_CFG };
+static bcmolt_group_id group_ids_epon_path_10g_us_key[] = { BCMOLT_GROUP_ID_EPON_PATH_10G_US_KEY };
+static bcmolt_group_id group_ids_epon_path_10g_us_cfg[] = { BCMOLT_GROUP_ID_EPON_PATH_10G_US_CFG };
+static bcmolt_group_id group_ids_epon_path_10g_us_stat[] = { BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT };
+static bcmolt_group_id group_ids_epon_path_10g_us_stat_cfg[] = { BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_BYTES, BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_FRAMES, BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_FRAMES_64, BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_FRAMES_65_127, BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_FRAMES_128_255, BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_FRAMES_256_511, BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_FRAMES_512_1023, BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_FRAMES_1024_1518, BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_FRAMES_1519_2047, BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_FRAMES_2048_4095, BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_FRAMES_4096_9216, BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_FRAMES_9217_16383, BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_BROADCAST_FRAMES, BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_DATA_BYTES, BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_MULTICAST_FRAMES, BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_UNICAST_FRAMES, BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_MPCP_FRAMES, BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_OAM_BYTES, BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_OAM_FRAMES, BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_REPORT_FRAMES, BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_ABORT_FRAMES, BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_FCS_ERROR, BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_CRC_8_ERROR, BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_OUT_OF_SLOT, BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_OVERSIZE_ERROR, BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_CFG_RUNT_ERROR };
+static bcmolt_group_id group_ids_epon_path_10g_us_auto[] = { BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_ALARM_CLEARED, BCMOLT_GROUP_ID_EPON_PATH_10G_US_STAT_ALARM_RAISED };
+static bcmolt_group_id group_ids_epon_path_10g_us_auto_cfg[] = { BCMOLT_GROUP_ID_EPON_PATH_10G_US_AUTO_CFG };
+static bcmolt_group_id group_ids_epon_path_1g_ds_key[] = { BCMOLT_GROUP_ID_EPON_PATH_1G_DS_KEY };
+static bcmolt_group_id group_ids_epon_path_1g_ds_cfg[] = { BCMOLT_GROUP_ID_EPON_PATH_1G_DS_CFG };
+static bcmolt_group_id group_ids_epon_path_1g_ds_stat[] = { BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT };
+static bcmolt_group_id group_ids_epon_path_1g_ds_stat_cfg[] = { BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_CFG_BYTES, BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_CFG_FRAMES, BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_CFG_FRAMES_64, BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_CFG_FRAMES_65_127, BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_CFG_FRAMES_128_255, BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_CFG_FRAMES_256_511, BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_CFG_FRAMES_512_1023, BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_CFG_FRAMES_1024_1518, BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_CFG_FRAMES_1519_2047, BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_CFG_FRAMES_2048_4095, BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_CFG_FRAMES_4096_9216, BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_CFG_FRAMES_9217_16383, BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_CFG_BROADCAST_FRAMES, BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_CFG_DATA_BYTES, BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_CFG_MULTICAST_FRAMES, BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_CFG_UNICAST_FRAMES, BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_CFG_OAM_BYTES, BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_CFG_OAM_FRAMES, BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_CFG_GATE_FRAMES, BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_CFG_MPCP_FRAMES, BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_CFG_ABORT_FRAMES };
+static bcmolt_group_id group_ids_epon_path_1g_ds_auto[] = { BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_ALARM_CLEARED, BCMOLT_GROUP_ID_EPON_PATH_1G_DS_STAT_ALARM_RAISED };
+static bcmolt_group_id group_ids_epon_path_1g_ds_auto_cfg[] = { BCMOLT_GROUP_ID_EPON_PATH_1G_DS_AUTO_CFG };
+static bcmolt_group_id group_ids_epon_path_1g_us_key[] = { BCMOLT_GROUP_ID_EPON_PATH_1G_US_KEY };
+static bcmolt_group_id group_ids_epon_path_1g_us_cfg[] = { BCMOLT_GROUP_ID_EPON_PATH_1G_US_CFG };
+static bcmolt_group_id group_ids_epon_path_1g_us_stat[] = { BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT };
+static bcmolt_group_id group_ids_epon_path_1g_us_stat_cfg[] = { BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_BYTES, BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_FRAMES, BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_FRAMES_64, BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_FRAMES_65_127, BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_FRAMES_128_255, BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_FRAMES_256_511, BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_FRAMES_512_1023, BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_FRAMES_1024_1518, BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_FRAMES_1519_2047, BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_FRAMES_2048_4095, BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_FRAMES_4096_9216, BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_FRAMES_9217_16383, BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_BROADCAST_FRAMES, BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_DATA_BYTES, BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_MULTICAST_FRAMES, BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_UNICAST_FRAMES, BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_MPCP_FRAMES, BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_OAM_BYTES, BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_OAM_FRAMES, BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_REPORT_FRAMES, BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_ABORT_FRAMES, BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_FCS_ERROR, BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_CRC_8_ERROR, BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_OUT_OF_SLOT, BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_OVERSIZE_ERROR, BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_CFG_RUNT_ERROR };
+static bcmolt_group_id group_ids_epon_path_1g_us_auto[] = { BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_ALARM_CLEARED, BCMOLT_GROUP_ID_EPON_PATH_1G_US_STAT_ALARM_RAISED };
+static bcmolt_group_id group_ids_epon_path_1g_us_auto_cfg[] = { BCMOLT_GROUP_ID_EPON_PATH_1G_US_AUTO_CFG };
+static bcmolt_group_id group_ids_epon_rp_key[] = { BCMOLT_GROUP_ID_EPON_RP_KEY };
+static bcmolt_group_id group_ids_epon_rp_cfg[] = { BCMOLT_GROUP_ID_EPON_RP_CFG };
+static bcmolt_group_id group_ids_gpio_key[] = { BCMOLT_GROUP_ID_GPIO_KEY };
+static bcmolt_group_id group_ids_gpio_cfg[] = { BCMOLT_GROUP_ID_GPIO_CFG };
+static bcmolt_group_id group_ids_gpon_alloc_key[] = { BCMOLT_GROUP_ID_GPON_ALLOC_KEY };
+static bcmolt_group_id group_ids_gpon_alloc_cfg[] = { BCMOLT_GROUP_ID_GPON_ALLOC_CFG };
+static bcmolt_group_id group_ids_gpon_alloc_stat[] = { BCMOLT_GROUP_ID_GPON_ALLOC_STAT };
+static bcmolt_group_id group_ids_gpon_alloc_stat_cfg[] = { BCMOLT_GROUP_ID_GPON_ALLOC_STAT_CFG_RX_BYTES };
+static bcmolt_group_id group_ids_gpon_alloc_auto[] = { BCMOLT_GROUP_ID_GPON_ALLOC_CONFIGURATION_COMPLETED, BCMOLT_GROUP_ID_GPON_ALLOC_GET_ALLOC_STATS_COMPLETED, BCMOLT_GROUP_ID_GPON_ALLOC_STAT_ALARM_CLEARED, BCMOLT_GROUP_ID_GPON_ALLOC_STAT_ALARM_RAISED };
+static bcmolt_group_id group_ids_gpon_alloc_auto_cfg[] = { BCMOLT_GROUP_ID_GPON_ALLOC_AUTO_CFG };
+static bcmolt_group_id group_ids_gpon_alloc_oper[] = { BCMOLT_GROUP_ID_GPON_ALLOC_GET_STATS, BCMOLT_GROUP_ID_GPON_ALLOC_SET_STATE };
+static bcmolt_group_id group_ids_gpon_gem_port_key[] = { BCMOLT_GROUP_ID_GPON_GEM_PORT_KEY };
+static bcmolt_group_id group_ids_gpon_gem_port_cfg[] = { BCMOLT_GROUP_ID_GPON_GEM_PORT_CFG };
+static bcmolt_group_id group_ids_gpon_gem_port_stat[] = { BCMOLT_GROUP_ID_GPON_GEM_PORT_STAT };
+static bcmolt_group_id group_ids_gpon_gem_port_stat_cfg[] = { BCMOLT_GROUP_ID_GPON_GEM_PORT_STAT_CFG_RX_PACKETS, BCMOLT_GROUP_ID_GPON_GEM_PORT_STAT_CFG_RX_BYTES, BCMOLT_GROUP_ID_GPON_GEM_PORT_STAT_CFG_TX_PACKETS, BCMOLT_GROUP_ID_GPON_GEM_PORT_STAT_CFG_TX_BYTES };
+static bcmolt_group_id group_ids_gpon_gem_port_auto[] = { BCMOLT_GROUP_ID_GPON_GEM_PORT_CONFIGURATION_COMPLETED, BCMOLT_GROUP_ID_GPON_GEM_PORT_STAT_ALARM_CLEARED, BCMOLT_GROUP_ID_GPON_GEM_PORT_STAT_ALARM_RAISED };
+static bcmolt_group_id group_ids_gpon_gem_port_auto_cfg[] = { BCMOLT_GROUP_ID_GPON_GEM_PORT_AUTO_CFG };
+static bcmolt_group_id group_ids_gpon_gem_port_oper[] = { BCMOLT_GROUP_ID_GPON_GEM_PORT_SET_STATE };
+static bcmolt_group_id group_ids_gpon_iwf_key[] = { BCMOLT_GROUP_ID_GPON_IWF_KEY };
+static bcmolt_group_id group_ids_gpon_iwf_cfg[] = { BCMOLT_GROUP_ID_GPON_IWF_CFG };
+static bcmolt_group_id group_ids_gpon_iwf_stat[] = { BCMOLT_GROUP_ID_GPON_IWF_STAT };
+static bcmolt_group_id group_ids_gpon_iwf_stat_cfg[] = { BCMOLT_GROUP_ID_GPON_IWF_STAT_CFG_DS_HIT_EVENT, BCMOLT_GROUP_ID_GPON_IWF_STAT_CFG_DS_MISS_EVENT, BCMOLT_GROUP_ID_GPON_IWF_STAT_CFG_DS_DROP_DUE_TO_MISS_EVENT, BCMOLT_GROUP_ID_GPON_IWF_STAT_CFG_DS_DROP_DUE_TO_HIT_EVENT, BCMOLT_GROUP_ID_GPON_IWF_STAT_CFG_DS_DROP_TO_DISABLED_GEM, BCMOLT_GROUP_ID_GPON_IWF_STAT_CFG_NEW_MAC_DISCOVERED, BCMOLT_GROUP_ID_GPON_IWF_STAT_CFG_MOVE_EVENT, BCMOLT_GROUP_ID_GPON_IWF_STAT_CFG_NEW_MAC_DROP_DUE_TO_FIFO_FULL };
+static bcmolt_group_id group_ids_gpon_iwf_auto[] = { BCMOLT_GROUP_ID_GPON_IWF_FLUSH_MAC_TABLE_COMPLETED, BCMOLT_GROUP_ID_GPON_IWF_SCAN_MAC_TABLE_COMPLETED, BCMOLT_GROUP_ID_GPON_IWF_STAT_ALARM_CLEARED, BCMOLT_GROUP_ID_GPON_IWF_STAT_ALARM_RAISED };
+static bcmolt_group_id group_ids_gpon_iwf_auto_cfg[] = { BCMOLT_GROUP_ID_GPON_IWF_AUTO_CFG };
+static bcmolt_group_id group_ids_gpon_iwf_oper[] = { BCMOLT_GROUP_ID_GPON_IWF_FLUSH_MAC_TABLE, BCMOLT_GROUP_ID_GPON_IWF_SCAN_MAC_TABLE };
+static bcmolt_group_id group_ids_gpon_iwf_ds_egress_flow_key[] = { BCMOLT_GROUP_ID_GPON_IWF_DS_EGRESS_FLOW_KEY };
+static bcmolt_group_id group_ids_gpon_iwf_ds_egress_flow_cfg[] = { BCMOLT_GROUP_ID_GPON_IWF_DS_EGRESS_FLOW_CFG };
+static bcmolt_group_id group_ids_gpon_iwf_ds_ingress_flow_key[] = { BCMOLT_GROUP_ID_GPON_IWF_DS_INGRESS_FLOW_KEY };
+static bcmolt_group_id group_ids_gpon_iwf_ds_ingress_flow_cfg[] = { BCMOLT_GROUP_ID_GPON_IWF_DS_INGRESS_FLOW_CFG };
+static bcmolt_group_id group_ids_gpon_iwf_mac_table_key[] = { BCMOLT_GROUP_ID_GPON_IWF_MAC_TABLE_KEY };
+static bcmolt_group_id group_ids_gpon_iwf_mac_table_cfg[] = { BCMOLT_GROUP_ID_GPON_IWF_MAC_TABLE_CFG };
+static bcmolt_group_id group_ids_gpon_iwf_mac_table_auto[] = { BCMOLT_GROUP_ID_GPON_IWF_MAC_TABLE_MAC_AGED, BCMOLT_GROUP_ID_GPON_IWF_MAC_TABLE_MAC_DROPPED, BCMOLT_GROUP_ID_GPON_IWF_MAC_TABLE_MAC_MOVE, BCMOLT_GROUP_ID_GPON_IWF_MAC_TABLE_NEW_MAC };
+static bcmolt_group_id group_ids_gpon_iwf_mac_table_auto_cfg[] = { BCMOLT_GROUP_ID_GPON_IWF_MAC_TABLE_AUTO_CFG };
+static bcmolt_group_id group_ids_gpon_iwf_us_flow_key[] = { BCMOLT_GROUP_ID_GPON_IWF_US_FLOW_KEY };
+static bcmolt_group_id group_ids_gpon_iwf_us_flow_cfg[] = { BCMOLT_GROUP_ID_GPON_IWF_US_FLOW_CFG };
+static bcmolt_group_id group_ids_gpon_ni_key[] = { BCMOLT_GROUP_ID_GPON_NI_KEY };
+static bcmolt_group_id group_ids_gpon_ni_cfg[] = { BCMOLT_GROUP_ID_GPON_NI_CFG };
+static bcmolt_group_id group_ids_gpon_ni_stat[] = { BCMOLT_GROUP_ID_GPON_NI_STAT };
+static bcmolt_group_id group_ids_gpon_ni_stat_cfg[] = { BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_FEC_CODEWORDS, BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_FEC_CODEWORDS_UNCORRECTED, BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_BIP8_BYTES, BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_BIP8_ERRORS, BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_RX_GEM_PACKETS, BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_RX_GEM_DROPPED, BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_RX_GEM_IDLE, BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_RX_GEM_CORRECTED, BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_RX_GEM_ILLEGAL, BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_RX_ALLOCATIONS_VALID, BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_RX_ALLOCATIONS_INVALID, BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_RX_ALLOCATIONS_DISABLED, BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_RX_PLOAMS, BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_RX_PLOAMS_NON_IDLE, BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_RX_PLOAMS_ERROR, BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_RX_PLOAMS_DROPPED, BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_RX_CPU, BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_RX_OMCI, BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_RX_OMCI_PACKETS_CRC_ERROR, BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_RX_DROPPED_TOO_SHORT, BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_RX_DROPPED_TOO_LONG, BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_RX_CRC_ERRORS, BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_RX_KEY_ERRORS, BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_RX_FRAGMENTS_ERRORS, BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_RX_PACKETS_DROPPED, BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_TX_GEM, BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_TX_PLOAMS, BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_TX_GEM_FRAGMENTS, BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_TX_CPU, BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_TX_OMCI, BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_TX_CPU_OMCI_PACKETS_DROPPED, BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_TX_DROPPED_ILLEGAL_LENGTH, BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_TX_DROPPED_TPID_MISS, BCMOLT_GROUP_ID_GPON_NI_STAT_CFG_TX_DROPPED_VID_MISS };
+static bcmolt_group_id group_ids_gpon_ni_auto[] = { BCMOLT_GROUP_ID_GPON_NI_ACTIVATE_ALL_ONUS_COMPLETED, BCMOLT_GROUP_ID_GPON_NI_CPU_PACKETS_FAILURE, BCMOLT_GROUP_ID_GPON_NI_DEACTIVATE_ALL_ONUS_COMPLETED, BCMOLT_GROUP_ID_GPON_NI_DISABLE_ALL_ONUS_COMPLETED, BCMOLT_GROUP_ID_GPON_NI_ENABLE_ALL_ONUS_COMPLETED, BCMOLT_GROUP_ID_GPON_NI_LOS, BCMOLT_GROUP_ID_GPON_NI_ONU_DISCOVERED, BCMOLT_GROUP_ID_GPON_NI_ONU_UPGRADE_COMPLETE, BCMOLT_GROUP_ID_GPON_NI_PROTECTION_SWITCHING_ONUS_RANGED, BCMOLT_GROUP_ID_GPON_NI_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED, BCMOLT_GROUP_ID_GPON_NI_PROTECTION_SWITCHING_TRAFFIC_RESUME, BCMOLT_GROUP_ID_GPON_NI_ROGUE_DETECTION_COMPLETED, BCMOLT_GROUP_ID_GPON_NI_ROGUE_ONU_SPECIAL_MAP_CYCLE_START, BCMOLT_GROUP_ID_GPON_NI_SERIAL_NUMBER_ACQUISITION_CYCLE_START, BCMOLT_GROUP_ID_GPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED, BCMOLT_GROUP_ID_GPON_NI_STAT_ALARM_CLEARED, BCMOLT_GROUP_ID_GPON_NI_STAT_ALARM_RAISED, BCMOLT_GROUP_ID_GPON_NI_STATE_CHANGE_COMPLETED, BCMOLT_GROUP_ID_GPON_NI_TOD_REQUEST_COMPLETED };
+static bcmolt_group_id group_ids_gpon_ni_auto_cfg[] = { BCMOLT_GROUP_ID_GPON_NI_AUTO_CFG };
+static bcmolt_group_id group_ids_gpon_ni_oper[] = { BCMOLT_GROUP_ID_GPON_NI_DISABLE_SERIAL_NUMBER, BCMOLT_GROUP_ID_GPON_NI_PROTECTION_SWITCHING_TYPE_C_SET_MULTIPLE_ONU_STATE, BCMOLT_GROUP_ID_GPON_NI_RESET, BCMOLT_GROUP_ID_GPON_NI_ROGUE_DETECTION_WINDOW, BCMOLT_GROUP_ID_GPON_NI_SET_ONU_STATE, BCMOLT_GROUP_ID_GPON_NI_SET_PON_STATE, BCMOLT_GROUP_ID_GPON_NI_SINGLE_REQUEST_STANDBY_PON_MONITORING, BCMOLT_GROUP_ID_GPON_NI_START_ONU_UPGRADE, BCMOLT_GROUP_ID_GPON_NI_TOD_REQUEST };
+static bcmolt_group_id group_ids_gpon_ni_proxy[] = { BCMOLT_GROUP_ID_GPON_NI_BROADCAST_PLOAM_PACKET, BCMOLT_GROUP_ID_GPON_NI_CPU_PACKETS };
+static bcmolt_group_id group_ids_gpon_onu_key[] = { BCMOLT_GROUP_ID_GPON_ONU_KEY };
+static bcmolt_group_id group_ids_gpon_onu_cfg[] = { BCMOLT_GROUP_ID_GPON_ONU_CFG };
+static bcmolt_group_id group_ids_gpon_onu_stat[] = { BCMOLT_GROUP_ID_GPON_ONU_STAT };
+static bcmolt_group_id group_ids_gpon_onu_stat_cfg[] = { BCMOLT_GROUP_ID_GPON_ONU_STAT_CFG_FEC_CODEWORDS, BCMOLT_GROUP_ID_GPON_ONU_STAT_CFG_FEC_BYTES_CORRECTED, BCMOLT_GROUP_ID_GPON_ONU_STAT_CFG_FEC_CODEWORDS_CORRECTED, BCMOLT_GROUP_ID_GPON_ONU_STAT_CFG_FEC_CODEWORDS_UNCORRECTED, BCMOLT_GROUP_ID_GPON_ONU_STAT_CFG_BIP8_BYTES, BCMOLT_GROUP_ID_GPON_ONU_STAT_CFG_BIP8_ERRORS, BCMOLT_GROUP_ID_GPON_ONU_STAT_CFG_RX_PLOAMS_CRC_ERROR, BCMOLT_GROUP_ID_GPON_ONU_STAT_CFG_RX_PLOAMS_NON_IDLE, BCMOLT_GROUP_ID_GPON_ONU_STAT_CFG_POSITIVE_DRIFT, BCMOLT_GROUP_ID_GPON_ONU_STAT_CFG_NEGATIVE_DRIFT, BCMOLT_GROUP_ID_GPON_ONU_STAT_CFG_RX_OMCI, BCMOLT_GROUP_ID_GPON_ONU_STAT_CFG_RX_OMCI_PACKETS_CRC_ERROR, BCMOLT_GROUP_ID_GPON_ONU_STAT_CFG_BER_REPORTED, BCMOLT_GROUP_ID_GPON_ONU_STAT_CFG_UNRECEIVED_BURST, BCMOLT_GROUP_ID_GPON_ONU_STAT_CFG_LCDG_ERRORS, BCMOLT_GROUP_ID_GPON_ONU_STAT_CFG_RDI_ERRORS, BCMOLT_GROUP_ID_GPON_ONU_STAT_CFG_RX_BYTES, BCMOLT_GROUP_ID_GPON_ONU_STAT_CFG_RX_PACKETS, BCMOLT_GROUP_ID_GPON_ONU_STAT_CFG_TX_BYTES, BCMOLT_GROUP_ID_GPON_ONU_STAT_CFG_TX_PACKETS };
+static bcmolt_group_id group_ids_gpon_onu_auto[] = { BCMOLT_GROUP_ID_GPON_ONU_BER_INTERVAL_CONFIGURATION_COMPLETED, BCMOLT_GROUP_ID_GPON_ONU_DFI, BCMOLT_GROUP_ID_GPON_ONU_DGI, BCMOLT_GROUP_ID_GPON_ONU_DOWI, BCMOLT_GROUP_ID_GPON_ONU_ERR, BCMOLT_GROUP_ID_GPON_ONU_INVALID_DBRU_REPORT, BCMOLT_GROUP_ID_GPON_ONU_KEY_EXCHANGE_COMPLETED, BCMOLT_GROUP_ID_GPON_ONU_KEY_EXCHANGE_CYCLE_SKIPPED, BCMOLT_GROUP_ID_GPON_ONU_KEY_EXCHANGE_DECRYPT_REQUIRED, BCMOLT_GROUP_ID_GPON_ONU_KEY_EXCHANGE_KEY_MISMATCH, BCMOLT_GROUP_ID_GPON_ONU_KEY_EXCHANGE_KEY_REQUEST_TIMEOUT, BCMOLT_GROUP_ID_GPON_ONU_KEY_EXCHANGE_UNCONSECUTIVE_INDEX, BCMOLT_GROUP_ID_GPON_ONU_LOAI, BCMOLT_GROUP_ID_GPON_ONU_LOKI, BCMOLT_GROUP_ID_GPON_ONU_MEMI, BCMOLT_GROUP_ID_GPON_ONU_OMCI_PORT_ID_CONFIGURATION_COMPLETED, BCMOLT_GROUP_ID_GPON_ONU_ONU_ACTIVATION_COMPLETED, BCMOLT_GROUP_ID_GPON_ONU_ONU_ACTIVATION_STANDBY_COMPLETED, BCMOLT_GROUP_ID_GPON_ONU_ONU_ALARM, BCMOLT_GROUP_ID_GPON_ONU_ONU_DEACTIVATION_COMPLETED, BCMOLT_GROUP_ID_GPON_ONU_ONU_DISABLE_COMPLETED, BCMOLT_GROUP_ID_GPON_ONU_ONU_ENABLE_COMPLETED, BCMOLT_GROUP_ID_GPON_ONU_OPTICAL_REFLECTION, BCMOLT_GROUP_ID_GPON_ONU_PASSWORD_AUTHENTICATION_COMPLETED, BCMOLT_GROUP_ID_GPON_ONU_PEE, BCMOLT_GROUP_ID_GPON_ONU_POSSIBLE_DRIFT, BCMOLT_GROUP_ID_GPON_ONU_POWER_MANAGEMENT_STATE_CHANGE, BCMOLT_GROUP_ID_GPON_ONU_PST, BCMOLT_GROUP_ID_GPON_ONU_RANGING_COMPLETED, BCMOLT_GROUP_ID_GPON_ONU_REI, BCMOLT_GROUP_ID_GPON_ONU_RSSI_MEASUREMENT_COMPLETED, BCMOLT_GROUP_ID_GPON_ONU_SDI, BCMOLT_GROUP_ID_GPON_ONU_SFI, BCMOLT_GROUP_ID_GPON_ONU_STAT_ALARM_CLEARED, BCMOLT_GROUP_ID_GPON_ONU_STAT_ALARM_RAISED, BCMOLT_GROUP_ID_GPON_ONU_SUFI, BCMOLT_GROUP_ID_GPON_ONU_TIWI };
+static bcmolt_group_id group_ids_gpon_onu_auto_cfg[] = { BCMOLT_GROUP_ID_GPON_ONU_AUTO_CFG };
+static bcmolt_group_id group_ids_gpon_onu_oper[] = { BCMOLT_GROUP_ID_GPON_ONU_CHANGE_POWER_LEVEL, BCMOLT_GROUP_ID_GPON_ONU_RSSI_MEASUREMENT, BCMOLT_GROUP_ID_GPON_ONU_SET_ONU_STATE };
+static bcmolt_group_id group_ids_gpon_onu_proxy[] = { BCMOLT_GROUP_ID_GPON_ONU_CPU_PACKETS, BCMOLT_GROUP_ID_GPON_ONU_PLOAM_PACKET };
+static bcmolt_group_id group_ids_gpon_onu_proxy_rx[] = { BCMOLT_GROUP_ID_GPON_ONU_CPU_PACKET, BCMOLT_GROUP_ID_GPON_ONU_OMCI_PACKET };
+static bcmolt_group_id group_ids_gpon_trx_key[] = { BCMOLT_GROUP_ID_GPON_TRX_KEY };
+static bcmolt_group_id group_ids_gpon_trx_cfg[] = { BCMOLT_GROUP_ID_GPON_TRX_CFG };
+static bcmolt_group_id group_ids_log_entry_key[] = { BCMOLT_GROUP_ID_LOG_ENTRY_KEY };
+static bcmolt_group_id group_ids_log_entry_cfg[] = { BCMOLT_GROUP_ID_LOG_ENTRY_CFG };
+static bcmolt_group_id group_ids_log_entry_stat[] = { BCMOLT_GROUP_ID_LOG_ENTRY_STAT };
+static bcmolt_group_id group_ids_log_entry_stat_cfg[] = { BCMOLT_GROUP_ID_LOG_ENTRY_STAT_CFG_MSG_COUNT, BCMOLT_GROUP_ID_LOG_ENTRY_STAT_CFG_LOST_MSG_COUNT };
+static bcmolt_group_id group_ids_log_entry_auto[] = { BCMOLT_GROUP_ID_LOG_ENTRY_STAT_ALARM_CLEARED, BCMOLT_GROUP_ID_LOG_ENTRY_STAT_ALARM_RAISED };
+static bcmolt_group_id group_ids_log_entry_auto_cfg[] = { BCMOLT_GROUP_ID_LOG_ENTRY_AUTO_CFG };
+static bcmolt_group_id group_ids_logger_key[] = { BCMOLT_GROUP_ID_LOGGER_KEY };
+static bcmolt_group_id group_ids_logger_cfg[] = { BCMOLT_GROUP_ID_LOGGER_CFG };
+static bcmolt_group_id group_ids_logger_stat[] = { BCMOLT_GROUP_ID_LOGGER_STAT };
+static bcmolt_group_id group_ids_logger_stat_cfg[] = { BCMOLT_GROUP_ID_LOGGER_STAT_CFG_LINES_IN_LOG };
+static bcmolt_group_id group_ids_logger_auto[] = { BCMOLT_GROUP_ID_LOGGER_STAT_ALARM_CLEARED, BCMOLT_GROUP_ID_LOGGER_STAT_ALARM_RAISED };
+static bcmolt_group_id group_ids_logger_auto_cfg[] = { BCMOLT_GROUP_ID_LOGGER_AUTO_CFG };
+static bcmolt_group_id group_ids_logger_oper[] = { BCMOLT_GROUP_ID_LOGGER_CLEAR_LOG };
+static bcmolt_group_id group_ids_nni_key[] = { BCMOLT_GROUP_ID_NNI_KEY };
+static bcmolt_group_id group_ids_nni_cfg[] = { BCMOLT_GROUP_ID_NNI_CFG };
+static bcmolt_group_id group_ids_nni_stat[] = { BCMOLT_GROUP_ID_NNI_STAT };
+static bcmolt_group_id group_ids_nni_stat_cfg[] = { BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_FRAMES_64, BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_FRAMES_65_127, BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_FRAMES_128_255, BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_FRAMES_256_511, BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_FRAMES_512_1023, BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_FRAMES_1024_1518, BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_FRAMES_1519_2047, BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_FRAMES_2048_4095, BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_FRAMES_4096_9216, BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_FRAMES_9217_16383, BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_FRAMES, BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_BYTES, BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_GOOD_FRAMES, BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_UNICAST_FRAMES, BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_MULTICAST_FRAMES, BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_BROADCAST_FRAMES, BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_FCS_ERRORS, BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_CONTROL_FRAMES, BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_PAUSE_FRAMES, BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_PFC_FRAMES, BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_UNSUPPORTED_OPCODE, BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_UNSUPPORTED_DA, BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_ALIGNMENT_ERRORS, BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_LENGTH_OUT_OF_RANGE, BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_CODE_ERRORS, BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_OVERSIZED_FRAMES, BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_JABBER_FRAMES, BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_MTU_CHECK_ERRORS, BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_PROMISCUOUS_FRAMES, BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_VLAN_FRAMES, BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_DOUBLE_VLAN_FRAMES, BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_TRUNCATED_FRAMES, BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_UNDERSIZE_FRAMES, BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_FRAGMENTED_FRAMES, BCMOLT_GROUP_ID_NNI_STAT_CFG_RX_RUNT_FRAMES, BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_FRAMES_64, BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_FRAMES_65_127, BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_FRAMES_128_255, BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_FRAMES_256_511, BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_FRAMES_512_1023, BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_FRAMES_1024_1518, BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_FRAMES_1519_2047, BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_FRAMES_2048_4095, BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_FRAMES_4096_9216, BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_FRAMES_9217_16383, BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_FRAMES, BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_BYTES, BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_GOOD_FRAMES, BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_UNICAST_FRAMES, BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_MULTICAST_FRAMES, BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_BROADCAST_FRAMES, BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_PAUSE_FRAMES, BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_PFC_FRAMES, BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_JABBER_FRAMES, BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_FCS_ERRORS, BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_CONTROL_FRAMES, BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_OVERSIZE_FRAMES, BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_FRAGMENTED_FRAMES, BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_ERROR_FRAMES, BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_VLAN_FRAMES, BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_DOUBLE_VLAN_FRAMES, BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_RUNT_FRAMES, BCMOLT_GROUP_ID_NNI_STAT_CFG_TX_UNDERRUN_FRAMES };
+static bcmolt_group_id group_ids_nni_auto[] = { BCMOLT_GROUP_ID_NNI_STAT_ALARM_CLEARED, BCMOLT_GROUP_ID_NNI_STAT_ALARM_RAISED, BCMOLT_GROUP_ID_NNI_STATUS_CHANGED };
+static bcmolt_group_id group_ids_nni_auto_cfg[] = { BCMOLT_GROUP_ID_NNI_AUTO_CFG };
+static bcmolt_group_id group_ids_nni_serdes_key[] = { BCMOLT_GROUP_ID_NNI_SERDES_KEY };
+static bcmolt_group_id group_ids_nni_serdes_cfg[] = { BCMOLT_GROUP_ID_NNI_SERDES_CFG };
+static bcmolt_group_id group_ids_software_error_key[] = { BCMOLT_GROUP_ID_SOFTWARE_ERROR_KEY };
+static bcmolt_group_id group_ids_software_error_cfg[] = { BCMOLT_GROUP_ID_SOFTWARE_ERROR_CFG };
+static bcmolt_group_id group_ids_trx_calibration_key[] = { BCMOLT_GROUP_ID_TRX_CALIBRATION_KEY };
+static bcmolt_group_id group_ids_trx_calibration_auto[] = { BCMOLT_GROUP_ID_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED };
+static bcmolt_group_id group_ids_trx_calibration_auto_cfg[] = { BCMOLT_GROUP_ID_TRX_CALIBRATION_AUTO_CFG };
+static bcmolt_group_id group_ids_trx_calibration_oper[] = { BCMOLT_GROUP_ID_TRX_CALIBRATION_START_CAPTURE_WINDOW, BCMOLT_GROUP_ID_TRX_CALIBRATION_STOP_CAPTURE_WINDOW };
+static bcmolt_group_id group_ids_xgpon_alloc_key[] = { BCMOLT_GROUP_ID_XGPON_ALLOC_KEY };
+static bcmolt_group_id group_ids_xgpon_alloc_cfg[] = { BCMOLT_GROUP_ID_XGPON_ALLOC_CFG };
+static bcmolt_group_id group_ids_xgpon_alloc_stat[] = { BCMOLT_GROUP_ID_XGPON_ALLOC_STAT };
+static bcmolt_group_id group_ids_xgpon_alloc_stat_cfg[] = { BCMOLT_GROUP_ID_XGPON_ALLOC_STAT_CFG_RX_BYTES };
+static bcmolt_group_id group_ids_xgpon_alloc_auto[] = { BCMOLT_GROUP_ID_XGPON_ALLOC_CONFIGURATION_COMPLETED, BCMOLT_GROUP_ID_XGPON_ALLOC_GET_ALLOC_STATS_COMPLETED, BCMOLT_GROUP_ID_XGPON_ALLOC_STAT_ALARM_CLEARED, BCMOLT_GROUP_ID_XGPON_ALLOC_STAT_ALARM_RAISED };
+static bcmolt_group_id group_ids_xgpon_alloc_auto_cfg[] = { BCMOLT_GROUP_ID_XGPON_ALLOC_AUTO_CFG };
+static bcmolt_group_id group_ids_xgpon_alloc_oper[] = { BCMOLT_GROUP_ID_XGPON_ALLOC_GET_STATS, BCMOLT_GROUP_ID_XGPON_ALLOC_SET_STATE };
+static bcmolt_group_id group_ids_xgpon_gem_port_key[] = { BCMOLT_GROUP_ID_XGPON_GEM_PORT_KEY };
+static bcmolt_group_id group_ids_xgpon_gem_port_cfg[] = { BCMOLT_GROUP_ID_XGPON_GEM_PORT_CFG };
+static bcmolt_group_id group_ids_xgpon_gem_port_stat[] = { BCMOLT_GROUP_ID_XGPON_GEM_PORT_STAT };
+static bcmolt_group_id group_ids_xgpon_gem_port_stat_cfg[] = { BCMOLT_GROUP_ID_XGPON_GEM_PORT_STAT_CFG_TX_BYTES, BCMOLT_GROUP_ID_XGPON_GEM_PORT_STAT_CFG_TX_PACKETS, BCMOLT_GROUP_ID_XGPON_GEM_PORT_STAT_CFG_RX_PACKETS, BCMOLT_GROUP_ID_XGPON_GEM_PORT_STAT_CFG_RX_BYTES };
+static bcmolt_group_id group_ids_xgpon_gem_port_auto[] = { BCMOLT_GROUP_ID_XGPON_GEM_PORT_STAT_ALARM_CLEARED, BCMOLT_GROUP_ID_XGPON_GEM_PORT_STAT_ALARM_RAISED };
+static bcmolt_group_id group_ids_xgpon_gem_port_auto_cfg[] = { BCMOLT_GROUP_ID_XGPON_GEM_PORT_AUTO_CFG };
+static bcmolt_group_id group_ids_xgpon_iwf_key[] = { BCMOLT_GROUP_ID_XGPON_IWF_KEY };
+static bcmolt_group_id group_ids_xgpon_iwf_cfg[] = { BCMOLT_GROUP_ID_XGPON_IWF_CFG };
+static bcmolt_group_id group_ids_xgpon_ni_key[] = { BCMOLT_GROUP_ID_XGPON_NI_KEY };
+static bcmolt_group_id group_ids_xgpon_ni_cfg[] = { BCMOLT_GROUP_ID_XGPON_NI_CFG };
+static bcmolt_group_id group_ids_xgpon_ni_stat[] = { BCMOLT_GROUP_ID_XGPON_NI_STAT };
+static bcmolt_group_id group_ids_xgpon_ni_stat_cfg[] = { BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_FEC_CODEWORDS, BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_BIP32_BYTES, BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_BIP32_ERRORS, BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_XGTC_HEADERS, BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_XGTC_CORRECTED, BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_XGTC_UNCORRECTED, BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_XGEM, BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_XGEM_DROPPED, BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_XGEM_IDLE, BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_XGEM_CORRECTED, BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_CRC_ERROR, BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_FRAGMENT_ERROR, BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_PACKETS_DROPPED, BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_DROPPED_TOO_SHORT, BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_DROPPED_TOO_LONG, BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_KEY_ERROR, BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_TX_PLOAMS, BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_PLOAMS_DROPPED, BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_ALLOCATIONS_VALID, BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_ALLOCATIONS_INVALID, BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_ALLOCATIONS_DISABLED, BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_PLOAMS, BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_PLOAMS_NON_IDLE, BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_PLOAMS_ERROR, BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_CPU, BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_OMCI, BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_RX_OMCI_PACKETS_CRC_ERROR, BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_TX_PACKETS, BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_TX_XGEM, BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_TX_CPU, BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_TX_OMCI, BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_TX_CPU_OMCI_PACKETS_DROPPED, BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_TX_DROPPED_ILLEGAL_LENGTH, BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_TX_DROPPED_TPID_MISS, BCMOLT_GROUP_ID_XGPON_NI_STAT_CFG_TX_DROPPED_VID_MISS };
+static bcmolt_group_id group_ids_xgpon_ni_auto[] = { BCMOLT_GROUP_ID_XGPON_NI_ACTIVATE_ALL_ONUS_COMPLETED, BCMOLT_GROUP_ID_XGPON_NI_CPU_PACKETS_FAILURE, BCMOLT_GROUP_ID_XGPON_NI_DEACTIVATE_ALL_ONUS_COMPLETED, BCMOLT_GROUP_ID_XGPON_NI_DISABLE_ALL_ONUS_COMPLETED, BCMOLT_GROUP_ID_XGPON_NI_ENABLE_ALL_ONUS_COMPLETED, BCMOLT_GROUP_ID_XGPON_NI_LOS, BCMOLT_GROUP_ID_XGPON_NI_ONU_DISCOVERED, BCMOLT_GROUP_ID_XGPON_NI_ONU_UPGRADE_COMPLETE, BCMOLT_GROUP_ID_XGPON_NI_PROTECTION_SWITCHING_ONUS_RANGED, BCMOLT_GROUP_ID_XGPON_NI_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED, BCMOLT_GROUP_ID_XGPON_NI_PROTECTION_SWITCHING_TRAFFIC_RESUME, BCMOLT_GROUP_ID_XGPON_NI_ROGUE_DETECTION_COMPLETED, BCMOLT_GROUP_ID_XGPON_NI_ROGUE_ONU_SPECIAL_MAP_CYCLE_START, BCMOLT_GROUP_ID_XGPON_NI_SERIAL_NUMBER_ACQUISITION_CYCLE_START, BCMOLT_GROUP_ID_XGPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED, BCMOLT_GROUP_ID_XGPON_NI_STAT_ALARM_CLEARED, BCMOLT_GROUP_ID_XGPON_NI_STAT_ALARM_RAISED, BCMOLT_GROUP_ID_XGPON_NI_STATE_CHANGE_COMPLETED, BCMOLT_GROUP_ID_XGPON_NI_TOD_REQUEST_COMPLETED };
+static bcmolt_group_id group_ids_xgpon_ni_auto_cfg[] = { BCMOLT_GROUP_ID_XGPON_NI_AUTO_CFG };
+static bcmolt_group_id group_ids_xgpon_ni_oper[] = { BCMOLT_GROUP_ID_XGPON_NI_ADJUST_TX_WAVELENGTH, BCMOLT_GROUP_ID_XGPON_NI_DISABLE_SERIAL_NUMBER, BCMOLT_GROUP_ID_XGPON_NI_RESET, BCMOLT_GROUP_ID_XGPON_NI_ROGUE_DETECTION_WINDOW, BCMOLT_GROUP_ID_XGPON_NI_RUN_SPECIAL_BW_MAP, BCMOLT_GROUP_ID_XGPON_NI_SET_ONU_STATE, BCMOLT_GROUP_ID_XGPON_NI_SET_PON_STATE, BCMOLT_GROUP_ID_XGPON_NI_SINGLE_REQUEST_STANDBY_PON_MONITORING, BCMOLT_GROUP_ID_XGPON_NI_START_ONU_UPGRADE, BCMOLT_GROUP_ID_XGPON_NI_TOD_REQUEST };
+static bcmolt_group_id group_ids_xgpon_ni_proxy[] = { BCMOLT_GROUP_ID_XGPON_NI_BROADCAST_PLOAM_PACKET, BCMOLT_GROUP_ID_XGPON_NI_CPU_PACKETS };
+static bcmolt_group_id group_ids_xgpon_onu_key[] = { BCMOLT_GROUP_ID_XGPON_ONU_KEY };
+static bcmolt_group_id group_ids_xgpon_onu_cfg[] = { BCMOLT_GROUP_ID_XGPON_ONU_CFG };
+static bcmolt_group_id group_ids_xgpon_onu_stat[] = { BCMOLT_GROUP_ID_XGPON_ONU_STAT };
+static bcmolt_group_id group_ids_xgpon_onu_stat_cfg[] = { BCMOLT_GROUP_ID_XGPON_ONU_STAT_CFG_POSITIVE_DRIFT, BCMOLT_GROUP_ID_XGPON_ONU_STAT_CFG_NEGATIVE_DRIFT, BCMOLT_GROUP_ID_XGPON_ONU_STAT_CFG_DELIMITER_MISS_DETECTION, BCMOLT_GROUP_ID_XGPON_ONU_STAT_CFG_BIP32_ERRORS, BCMOLT_GROUP_ID_XGPON_ONU_STAT_CFG_RX_WORDS, BCMOLT_GROUP_ID_XGPON_ONU_STAT_CFG_FEC_CORRECTED_SYMBOLS, BCMOLT_GROUP_ID_XGPON_ONU_STAT_CFG_FEC_CORRECTED_CODEWORDS, BCMOLT_GROUP_ID_XGPON_ONU_STAT_CFG_FEC_UNCORRECTABLE_CODEWORDS, BCMOLT_GROUP_ID_XGPON_ONU_STAT_CFG_FEC_CODEWORDS, BCMOLT_GROUP_ID_XGPON_ONU_STAT_CFG_FEC_CORRECTED_BITS, BCMOLT_GROUP_ID_XGPON_ONU_STAT_CFG_XGEM_KEY_ERRORS, BCMOLT_GROUP_ID_XGPON_ONU_STAT_CFG_XGEM_LOSS, BCMOLT_GROUP_ID_XGPON_ONU_STAT_CFG_RX_PLOAMS_MIC_ERROR, BCMOLT_GROUP_ID_XGPON_ONU_STAT_CFG_RX_PLOAMS_NON_IDLE, BCMOLT_GROUP_ID_XGPON_ONU_STAT_CFG_RX_OMCI, BCMOLT_GROUP_ID_XGPON_ONU_STAT_CFG_RX_OMCI_PACKETS_CRC_ERROR, BCMOLT_GROUP_ID_XGPON_ONU_STAT_CFG_RX_BYTES, BCMOLT_GROUP_ID_XGPON_ONU_STAT_CFG_RX_PACKETS, BCMOLT_GROUP_ID_XGPON_ONU_STAT_CFG_TX_BYTES, BCMOLT_GROUP_ID_XGPON_ONU_STAT_CFG_TX_PACKETS };
+static bcmolt_group_id group_ids_xgpon_onu_auto[] = { BCMOLT_GROUP_ID_XGPON_ONU_DFI, BCMOLT_GROUP_ID_XGPON_ONU_DGI, BCMOLT_GROUP_ID_XGPON_ONU_DOWI, BCMOLT_GROUP_ID_XGPON_ONU_INVALID_DBRU_REPORT, BCMOLT_GROUP_ID_XGPON_ONU_KEY_EXCHANGE_COMPLETED, BCMOLT_GROUP_ID_XGPON_ONU_KEY_EXCHANGE_CYCLE_SKIPPED, BCMOLT_GROUP_ID_XGPON_ONU_KEY_EXCHANGE_KEY_MISMATCH, BCMOLT_GROUP_ID_XGPON_ONU_KEY_EXCHANGE_KEY_REQUEST_TIMEOUT, BCMOLT_GROUP_ID_XGPON_ONU_LOOCI, BCMOLT_GROUP_ID_XGPON_ONU_ONU_ACTIVATION_COMPLETED, BCMOLT_GROUP_ID_XGPON_ONU_ONU_ALARM, BCMOLT_GROUP_ID_XGPON_ONU_ONU_DEACTIVATION_COMPLETED, BCMOLT_GROUP_ID_XGPON_ONU_ONU_DISABLE_COMPLETED, BCMOLT_GROUP_ID_XGPON_ONU_ONU_ENABLE_COMPLETED, BCMOLT_GROUP_ID_XGPON_ONU_ONU_TUNING_IN_COMPLETED, BCMOLT_GROUP_ID_XGPON_ONU_ONU_TUNING_OUT_COMPLETED, BCMOLT_GROUP_ID_XGPON_ONU_OPTICAL_REFLECTION, BCMOLT_GROUP_ID_XGPON_ONU_POSSIBLE_DRIFT, BCMOLT_GROUP_ID_XGPON_ONU_POWER_CONSUMPTION_REPORT, BCMOLT_GROUP_ID_XGPON_ONU_POWER_LEVEL_REPORT, BCMOLT_GROUP_ID_XGPON_ONU_POWER_MANAGEMENT_STATE_CHANGE, BCMOLT_GROUP_ID_XGPON_ONU_PQSI, BCMOLT_GROUP_ID_XGPON_ONU_RANGING_COMPLETED, BCMOLT_GROUP_ID_XGPON_ONU_REGISTRATION_ID, BCMOLT_GROUP_ID_XGPON_ONU_RSSI_MEASUREMENT_COMPLETED, BCMOLT_GROUP_ID_XGPON_ONU_SDI, BCMOLT_GROUP_ID_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_FAILURE, BCMOLT_GROUP_ID_XGPON_ONU_SFI, BCMOLT_GROUP_ID_XGPON_ONU_STAT_ALARM_CLEARED, BCMOLT_GROUP_ID_XGPON_ONU_STAT_ALARM_RAISED, BCMOLT_GROUP_ID_XGPON_ONU_SUFI, BCMOLT_GROUP_ID_XGPON_ONU_TIWI, BCMOLT_GROUP_ID_XGPON_ONU_TUNING_RESPONSE };
+static bcmolt_group_id group_ids_xgpon_onu_auto_cfg[] = { BCMOLT_GROUP_ID_XGPON_ONU_AUTO_CFG };
+static bcmolt_group_id group_ids_xgpon_onu_oper[] = { BCMOLT_GROUP_ID_XGPON_ONU_ADJUST_TX_WAVELENGTH, BCMOLT_GROUP_ID_XGPON_ONU_CHANGE_POWER_LEVELLING, BCMOLT_GROUP_ID_XGPON_ONU_GET_POWER_CONSUMPTION, BCMOLT_GROUP_ID_XGPON_ONU_GET_POWER_LEVEL, BCMOLT_GROUP_ID_XGPON_ONU_ONU_TUNING_IN, BCMOLT_GROUP_ID_XGPON_ONU_ONU_TUNING_OUT, BCMOLT_GROUP_ID_XGPON_ONU_REQUEST_REGISTRATION, BCMOLT_GROUP_ID_XGPON_ONU_RSSI_MEASUREMENT, BCMOLT_GROUP_ID_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION, BCMOLT_GROUP_ID_XGPON_ONU_SET_ONU_STATE };
+static bcmolt_group_id group_ids_xgpon_onu_proxy[] = { BCMOLT_GROUP_ID_XGPON_ONU_CPU_PACKETS, BCMOLT_GROUP_ID_XGPON_ONU_PLOAM_PACKET };
+static bcmolt_group_id group_ids_xgpon_onu_proxy_rx[] = { BCMOLT_GROUP_ID_XGPON_ONU_CPU_PACKET, BCMOLT_GROUP_ID_XGPON_ONU_OMCI_PACKET };
+static bcmolt_group_id group_ids_xgpon_trx_key[] = { BCMOLT_GROUP_ID_XGPON_TRX_KEY };
+static bcmolt_group_id group_ids_xgpon_trx_cfg[] = { BCMOLT_GROUP_ID_XGPON_TRX_CFG };
+static bcmolt_group_id group_ids_xpon_serdes_key[] = { BCMOLT_GROUP_ID_XPON_SERDES_KEY };
+static bcmolt_group_id group_ids_xpon_serdes_cfg[] = { BCMOLT_GROUP_ID_XPON_SERDES_CFG };
+static bcmolt_group_ids group_ids_obj_ae_ni[] = { { 1, group_ids_ae_ni_key }, { 1, group_ids_ae_ni_cfg }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 1, group_ids_ae_ni_oper }, { 0, NULL }, { 0, NULL } };
+static bcmolt_group_ids group_ids_obj_ae_path_ds[] = { { 1, group_ids_ae_path_ds_key }, { 0, NULL }, { 1, group_ids_ae_path_ds_stat }, { 17, group_ids_ae_path_ds_stat_cfg }, { 2, group_ids_ae_path_ds_auto }, { 1, group_ids_ae_path_ds_auto_cfg }, { 0, NULL }, { 0, NULL }, { 0, NULL } };
+static bcmolt_group_ids group_ids_obj_ae_path_us[] = { { 1, group_ids_ae_path_us_key }, { 0, NULL }, { 1, group_ids_ae_path_us_stat }, { 20, group_ids_ae_path_us_stat_cfg }, { 2, group_ids_ae_path_us_auto }, { 1, group_ids_ae_path_us_auto_cfg }, { 0, NULL }, { 0, NULL }, { 0, NULL } };
+static bcmolt_group_ids group_ids_obj_channel[] = { { 1, group_ids_channel_key }, { 1, group_ids_channel_cfg }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL } };
+static bcmolt_group_ids group_ids_obj_debug[] = { { 1, group_ids_debug_key }, { 1, group_ids_debug_cfg }, { 0, NULL }, { 0, NULL }, { 2, group_ids_debug_auto }, { 1, group_ids_debug_auto_cfg }, { 4, group_ids_debug_oper }, { 0, NULL }, { 0, NULL } };
+static bcmolt_group_ids group_ids_obj_device[] = { { 1, group_ids_device_key }, { 1, group_ids_device_cfg }, { 0, NULL }, { 0, NULL }, { 11, group_ids_device_auto }, { 1, group_ids_device_auto_cfg }, { 8, group_ids_device_oper }, { 0, NULL }, { 0, NULL } };
+static bcmolt_group_ids group_ids_obj_epon_denied_link[] = { { 1, group_ids_epon_denied_link_key }, { 1, group_ids_epon_denied_link_cfg }, { 0, NULL }, { 0, NULL }, { 10, group_ids_epon_denied_link_auto }, { 1, group_ids_epon_denied_link_auto_cfg }, { 0, NULL }, { 0, NULL }, { 0, NULL } };
+static bcmolt_group_ids group_ids_obj_epon_link[] = { { 1, group_ids_epon_link_key }, { 1, group_ids_epon_link_cfg }, { 1, group_ids_epon_link_stat }, { 43, group_ids_epon_link_stat_cfg }, { 21, group_ids_epon_link_auto }, { 1, group_ids_epon_link_auto_cfg }, { 7, group_ids_epon_link_oper }, { 1, group_ids_epon_link_proxy }, { 1, group_ids_epon_link_proxy_rx } };
+static bcmolt_group_ids group_ids_obj_epon_ni[] = { { 1, group_ids_epon_ni_key }, { 1, group_ids_epon_ni_cfg }, { 0, NULL }, { 0, NULL }, { 10, group_ids_epon_ni_auto }, { 1, group_ids_epon_ni_auto_cfg }, { 8, group_ids_epon_ni_oper }, { 0, NULL }, { 0, NULL } };
+static bcmolt_group_ids group_ids_obj_epon_onu_10g_us[] = { { 1, group_ids_epon_onu_10g_us_key }, { 1, group_ids_epon_onu_10g_us_cfg }, { 1, group_ids_epon_onu_10g_us_stat }, { 4, group_ids_epon_onu_10g_us_stat_cfg }, { 2, group_ids_epon_onu_10g_us_auto }, { 1, group_ids_epon_onu_10g_us_auto_cfg }, { 0, NULL }, { 0, NULL }, { 0, NULL } };
+static bcmolt_group_ids group_ids_obj_epon_onu_1g_us[] = { { 1, group_ids_epon_onu_1g_us_key }, { 1, group_ids_epon_onu_1g_us_cfg }, { 1, group_ids_epon_onu_1g_us_stat }, { 16, group_ids_epon_onu_1g_us_stat_cfg }, { 2, group_ids_epon_onu_1g_us_auto }, { 1, group_ids_epon_onu_1g_us_auto_cfg }, { 0, NULL }, { 0, NULL }, { 0, NULL } };
+static bcmolt_group_ids group_ids_obj_epon_path_10g_ds[] = { { 1, group_ids_epon_path_10g_ds_key }, { 1, group_ids_epon_path_10g_ds_cfg }, { 1, group_ids_epon_path_10g_ds_stat }, { 21, group_ids_epon_path_10g_ds_stat_cfg }, { 2, group_ids_epon_path_10g_ds_auto }, { 1, group_ids_epon_path_10g_ds_auto_cfg }, { 0, NULL }, { 0, NULL }, { 0, NULL } };
+static bcmolt_group_ids group_ids_obj_epon_path_10g_us[] = { { 1, group_ids_epon_path_10g_us_key }, { 1, group_ids_epon_path_10g_us_cfg }, { 1, group_ids_epon_path_10g_us_stat }, { 26, group_ids_epon_path_10g_us_stat_cfg }, { 2, group_ids_epon_path_10g_us_auto }, { 1, group_ids_epon_path_10g_us_auto_cfg }, { 0, NULL }, { 0, NULL }, { 0, NULL } };
+static bcmolt_group_ids group_ids_obj_epon_path_1g_ds[] = { { 1, group_ids_epon_path_1g_ds_key }, { 1, group_ids_epon_path_1g_ds_cfg }, { 1, group_ids_epon_path_1g_ds_stat }, { 21, group_ids_epon_path_1g_ds_stat_cfg }, { 2, group_ids_epon_path_1g_ds_auto }, { 1, group_ids_epon_path_1g_ds_auto_cfg }, { 0, NULL }, { 0, NULL }, { 0, NULL } };
+static bcmolt_group_ids group_ids_obj_epon_path_1g_us[] = { { 1, group_ids_epon_path_1g_us_key }, { 1, group_ids_epon_path_1g_us_cfg }, { 1, group_ids_epon_path_1g_us_stat }, { 26, group_ids_epon_path_1g_us_stat_cfg }, { 2, group_ids_epon_path_1g_us_auto }, { 1, group_ids_epon_path_1g_us_auto_cfg }, { 0, NULL }, { 0, NULL }, { 0, NULL } };
+static bcmolt_group_ids group_ids_obj_epon_rp[] = { { 1, group_ids_epon_rp_key }, { 1, group_ids_epon_rp_cfg }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL } };
+static bcmolt_group_ids group_ids_obj_gpio[] = { { 1, group_ids_gpio_key }, { 1, group_ids_gpio_cfg }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL } };
+static bcmolt_group_ids group_ids_obj_gpon_alloc[] = { { 1, group_ids_gpon_alloc_key }, { 1, group_ids_gpon_alloc_cfg }, { 1, group_ids_gpon_alloc_stat }, { 1, group_ids_gpon_alloc_stat_cfg }, { 4, group_ids_gpon_alloc_auto }, { 1, group_ids_gpon_alloc_auto_cfg }, { 2, group_ids_gpon_alloc_oper }, { 0, NULL }, { 0, NULL } };
+static bcmolt_group_ids group_ids_obj_gpon_gem_port[] = { { 1, group_ids_gpon_gem_port_key }, { 1, group_ids_gpon_gem_port_cfg }, { 1, group_ids_gpon_gem_port_stat }, { 4, group_ids_gpon_gem_port_stat_cfg }, { 3, group_ids_gpon_gem_port_auto }, { 1, group_ids_gpon_gem_port_auto_cfg }, { 1, group_ids_gpon_gem_port_oper }, { 0, NULL }, { 0, NULL } };
+static bcmolt_group_ids group_ids_obj_gpon_iwf[] = { { 1, group_ids_gpon_iwf_key }, { 1, group_ids_gpon_iwf_cfg }, { 1, group_ids_gpon_iwf_stat }, { 8, group_ids_gpon_iwf_stat_cfg }, { 4, group_ids_gpon_iwf_auto }, { 1, group_ids_gpon_iwf_auto_cfg }, { 2, group_ids_gpon_iwf_oper }, { 0, NULL }, { 0, NULL } };
+static bcmolt_group_ids group_ids_obj_gpon_iwf_ds_egress_flow[] = { { 1, group_ids_gpon_iwf_ds_egress_flow_key }, { 1, group_ids_gpon_iwf_ds_egress_flow_cfg }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL } };
+static bcmolt_group_ids group_ids_obj_gpon_iwf_ds_ingress_flow[] = { { 1, group_ids_gpon_iwf_ds_ingress_flow_key }, { 1, group_ids_gpon_iwf_ds_ingress_flow_cfg }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL } };
+static bcmolt_group_ids group_ids_obj_gpon_iwf_mac_table[] = { { 1, group_ids_gpon_iwf_mac_table_key }, { 1, group_ids_gpon_iwf_mac_table_cfg }, { 0, NULL }, { 0, NULL }, { 4, group_ids_gpon_iwf_mac_table_auto }, { 1, group_ids_gpon_iwf_mac_table_auto_cfg }, { 0, NULL }, { 0, NULL }, { 0, NULL } };
+static bcmolt_group_ids group_ids_obj_gpon_iwf_us_flow[] = { { 1, group_ids_gpon_iwf_us_flow_key }, { 1, group_ids_gpon_iwf_us_flow_cfg }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL } };
+static bcmolt_group_ids group_ids_obj_gpon_ni[] = { { 1, group_ids_gpon_ni_key }, { 1, group_ids_gpon_ni_cfg }, { 1, group_ids_gpon_ni_stat }, { 34, group_ids_gpon_ni_stat_cfg }, { 19, group_ids_gpon_ni_auto }, { 1, group_ids_gpon_ni_auto_cfg }, { 9, group_ids_gpon_ni_oper }, { 2, group_ids_gpon_ni_proxy }, { 0, NULL } };
+static bcmolt_group_ids group_ids_obj_gpon_onu[] = { { 1, group_ids_gpon_onu_key }, { 1, group_ids_gpon_onu_cfg }, { 1, group_ids_gpon_onu_stat }, { 20, group_ids_gpon_onu_stat_cfg }, { 37, group_ids_gpon_onu_auto }, { 1, group_ids_gpon_onu_auto_cfg }, { 3, group_ids_gpon_onu_oper }, { 2, group_ids_gpon_onu_proxy }, { 2, group_ids_gpon_onu_proxy_rx } };
+static bcmolt_group_ids group_ids_obj_gpon_trx[] = { { 1, group_ids_gpon_trx_key }, { 1, group_ids_gpon_trx_cfg }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL } };
+static bcmolt_group_ids group_ids_obj_log_entry[] = { { 1, group_ids_log_entry_key }, { 1, group_ids_log_entry_cfg }, { 1, group_ids_log_entry_stat }, { 2, group_ids_log_entry_stat_cfg }, { 2, group_ids_log_entry_auto }, { 1, group_ids_log_entry_auto_cfg }, { 0, NULL }, { 0, NULL }, { 0, NULL } };
+static bcmolt_group_ids group_ids_obj_logger[] = { { 1, group_ids_logger_key }, { 1, group_ids_logger_cfg }, { 1, group_ids_logger_stat }, { 1, group_ids_logger_stat_cfg }, { 2, group_ids_logger_auto }, { 1, group_ids_logger_auto_cfg }, { 1, group_ids_logger_oper }, { 0, NULL }, { 0, NULL } };
+static bcmolt_group_ids group_ids_obj_nni[] = { { 1, group_ids_nni_key }, { 1, group_ids_nni_cfg }, { 1, group_ids_nni_stat }, { 63, group_ids_nni_stat_cfg }, { 3, group_ids_nni_auto }, { 1, group_ids_nni_auto_cfg }, { 0, NULL }, { 0, NULL }, { 0, NULL } };
+static bcmolt_group_ids group_ids_obj_nni_serdes[] = { { 1, group_ids_nni_serdes_key }, { 1, group_ids_nni_serdes_cfg }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL } };
+static bcmolt_group_ids group_ids_obj_software_error[] = { { 1, group_ids_software_error_key }, { 1, group_ids_software_error_cfg }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL } };
+static bcmolt_group_ids group_ids_obj_trx_calibration[] = { { 1, group_ids_trx_calibration_key }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 1, group_ids_trx_calibration_auto }, { 1, group_ids_trx_calibration_auto_cfg }, { 2, group_ids_trx_calibration_oper }, { 0, NULL }, { 0, NULL } };
+static bcmolt_group_ids group_ids_obj_xgpon_alloc[] = { { 1, group_ids_xgpon_alloc_key }, { 1, group_ids_xgpon_alloc_cfg }, { 1, group_ids_xgpon_alloc_stat }, { 1, group_ids_xgpon_alloc_stat_cfg }, { 4, group_ids_xgpon_alloc_auto }, { 1, group_ids_xgpon_alloc_auto_cfg }, { 2, group_ids_xgpon_alloc_oper }, { 0, NULL }, { 0, NULL } };
+static bcmolt_group_ids group_ids_obj_xgpon_gem_port[] = { { 1, group_ids_xgpon_gem_port_key }, { 1, group_ids_xgpon_gem_port_cfg }, { 1, group_ids_xgpon_gem_port_stat }, { 4, group_ids_xgpon_gem_port_stat_cfg }, { 2, group_ids_xgpon_gem_port_auto }, { 1, group_ids_xgpon_gem_port_auto_cfg }, { 0, NULL }, { 0, NULL }, { 0, NULL } };
+static bcmolt_group_ids group_ids_obj_xgpon_iwf[] = { { 1, group_ids_xgpon_iwf_key }, { 1, group_ids_xgpon_iwf_cfg }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL } };
+static bcmolt_group_ids group_ids_obj_xgpon_ni[] = { { 1, group_ids_xgpon_ni_key }, { 1, group_ids_xgpon_ni_cfg }, { 1, group_ids_xgpon_ni_stat }, { 35, group_ids_xgpon_ni_stat_cfg }, { 19, group_ids_xgpon_ni_auto }, { 1, group_ids_xgpon_ni_auto_cfg }, { 10, group_ids_xgpon_ni_oper }, { 2, group_ids_xgpon_ni_proxy }, { 0, NULL } };
+static bcmolt_group_ids group_ids_obj_xgpon_onu[] = { { 1, group_ids_xgpon_onu_key }, { 1, group_ids_xgpon_onu_cfg }, { 1, group_ids_xgpon_onu_stat }, { 20, group_ids_xgpon_onu_stat_cfg }, { 33, group_ids_xgpon_onu_auto }, { 1, group_ids_xgpon_onu_auto_cfg }, { 10, group_ids_xgpon_onu_oper }, { 2, group_ids_xgpon_onu_proxy }, { 2, group_ids_xgpon_onu_proxy_rx } };
+static bcmolt_group_ids group_ids_obj_xgpon_trx[] = { { 1, group_ids_xgpon_trx_key }, { 1, group_ids_xgpon_trx_cfg }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL } };
+static bcmolt_group_ids group_ids_obj_xpon_serdes[] = { { 1, group_ids_xpon_serdes_key }, { 1, group_ids_xpon_serdes_cfg }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL }, { 0, NULL } };
+static bcmolt_group_ids *group_ids[] = { group_ids_obj_ae_ni, group_ids_obj_ae_path_ds, group_ids_obj_ae_path_us, group_ids_obj_channel, group_ids_obj_debug, group_ids_obj_device, group_ids_obj_epon_denied_link, group_ids_obj_epon_link, group_ids_obj_epon_ni, group_ids_obj_epon_onu_10g_us, group_ids_obj_epon_onu_1g_us, group_ids_obj_epon_path_10g_ds, group_ids_obj_epon_path_10g_us, group_ids_obj_epon_path_1g_ds, group_ids_obj_epon_path_1g_us, group_ids_obj_epon_rp, group_ids_obj_gpio, group_ids_obj_gpon_alloc, group_ids_obj_gpon_gem_port, group_ids_obj_gpon_iwf, group_ids_obj_gpon_iwf_ds_egress_flow, group_ids_obj_gpon_iwf_ds_ingress_flow, group_ids_obj_gpon_iwf_mac_table, group_ids_obj_gpon_iwf_us_flow, group_ids_obj_gpon_ni, group_ids_obj_gpon_onu, group_ids_obj_gpon_trx, group_ids_obj_log_entry, group_ids_obj_logger, group_ids_obj_nni, group_ids_obj_nni_serdes, group_ids_obj_software_error, group_ids_obj_trx_calibration, group_ids_obj_xgpon_alloc, group_ids_obj_xgpon_gem_port, group_ids_obj_xgpon_iwf, group_ids_obj_xgpon_ni, group_ids_obj_xgpon_onu, group_ids_obj_xgpon_trx, group_ids_obj_xpon_serdes };
+static bcmolt_presence_mask readonly_prop_mask[] = { (1ULL << BCMOLT_AE_NI_CFG_ID_AE_NI_EN) | (1ULL << BCMOLT_AE_NI_CFG_ID_PRBS_STATUS), 0, 0, 0, (((1ULL << BCMOLT_DEBUG_CFG_ID_INDICATIONS_DROPPED) | (1ULL << BCMOLT_DEBUG_CFG_ID_FILE_USED_PERCENT)) | (1ULL << BCMOLT_DEBUG_CFG_ID_API_CAPTURE_STATS)) | (1ULL << BCMOLT_DEBUG_CFG_ID_API_CAPTURE_BUFFER), ((((((1ULL << BCMOLT_DEVICE_CFG_ID_FIRMWARE_SW_VERSION) | (1ULL << BCMOLT_DEVICE_CFG_ID_HOST_SW_VERSION)) | (1ULL << BCMOLT_DEVICE_CFG_ID_CHIP_REVISION)) | (1ULL << BCMOLT_DEVICE_CFG_ID_STATE)) | (1ULL << BCMOLT_DEVICE_CFG_ID_CHIP_TEMPERATURE)) | (1ULL << BCMOLT_DEVICE_CFG_ID_EMBEDDED_IMAGE_LIST)) | (1ULL << BCMOLT_DEVICE_CFG_ID_CHIP_VOLTAGE), 1ULL << BCMOLT_EPON_DENIED_LINK_CFG_ID_ALARM_STATE, ((((((((((1ULL << BCMOLT_EPON_LINK_CFG_ID_LINK_RATE) | (1ULL << BCMOLT_EPON_LINK_CFG_ID_STATE_FLAGS)) | (1ULL << BCMOLT_EPON_LINK_CFG_ID_LLID)) | (1ULL << BCMOLT_EPON_LINK_CFG_ID_LASER_ON_TIME_TQ)) | (1ULL << BCMOLT_EPON_LINK_CFG_ID_LASER_OFF_TIME_TQ)) | (1ULL << BCMOLT_EPON_LINK_CFG_ID_RANGE_VALUE_TQ)) | (1ULL << BCMOLT_EPON_LINK_CFG_ID_DISTANCE)) | (1ULL << BCMOLT_EPON_LINK_CFG_ID_ALARM_STATE)) | (1ULL << BCMOLT_EPON_LINK_CFG_ID_UBD_INFO)) | (1ULL << BCMOLT_EPON_LINK_CFG_ID_PENDING_GRANTS)) | (1ULL << BCMOLT_EPON_LINK_CFG_ID_LINK_TYPE), (((((1ULL << BCMOLT_EPON_NI_CFG_ID_EPON_NI_EN) | (1ULL << BCMOLT_EPON_NI_CFG_ID_ALARM_STATE)) | (1ULL << BCMOLT_EPON_NI_CFG_ID_ALL_LINKS)) | (1ULL << BCMOLT_EPON_NI_CFG_ID_APPROXIMATE_SOLICITED_USAGE)) | (1ULL << BCMOLT_EPON_NI_CFG_ID_APPROXIMATE_TDM_USAGE)) | (1ULL << BCMOLT_EPON_NI_CFG_ID_ESTIMATED_PON_LATENCY_TQ), 1ULL << BCMOLT_EPON_ONU_10G_US_CFG_ID_ALL_LINKS, 1ULL << BCMOLT_EPON_ONU_1G_US_CFG_ID_ALL_LINKS, 0, 1ULL << BCMOLT_EPON_PATH_10G_US_CFG_ID_PRBS_STATUS, 0, 1ULL << BCMOLT_EPON_PATH_1G_US_CFG_ID_PRBS_STATUS, 0, 0, 1ULL << BCMOLT_GPON_ALLOC_CFG_ID_STATE, 1ULL << BCMOLT_GPON_GEM_PORT_CFG_ID_GEM_PORT_STATE, 1ULL << BCMOLT_GPON_IWF_CFG_ID_MAC_TABLE_COUNT, 0, 0, (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_GEM_PORT_ID) | (1ULL << BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_ONU_ID), 0, (((((((1ULL << BCMOLT_GPON_NI_CFG_ID_PON_STATUS) | (1ULL << BCMOLT_GPON_NI_CFG_ID_AVAILABLE_BANDWIDTH)) | (1ULL << BCMOLT_GPON_NI_CFG_ID_NUMBER_OF_ACTIVE_ONUS)) | (1ULL << BCMOLT_GPON_NI_CFG_ID_NUMBER_OF_ACTIVE_STANDBY_ONUS)) | (1ULL << BCMOLT_GPON_NI_CFG_ID_PRBS_STATUS)) | (1ULL << BCMOLT_GPON_NI_CFG_ID_RANGING_WINDOW_SIZE)) | (1ULL << BCMOLT_GPON_NI_CFG_ID_ALL_ONUS)) | (1ULL << BCMOLT_GPON_NI_CFG_ID_ALL_MCAST_GEM_PORTS), ((((1ULL << BCMOLT_GPON_ONU_CFG_ID_ONU_STATE) | (1ULL << BCMOLT_GPON_ONU_CFG_ID_DISABLED_AFTER_DISCOVERY)) | (1ULL << BCMOLT_GPON_ONU_CFG_ID_DEACTIVATION_REASON)) | (1ULL << BCMOLT_GPON_ONU_CFG_ID_ALL_GEM_PORTS)) | (1ULL << BCMOLT_GPON_ONU_CFG_ID_ALL_ALLOCS), (1ULL << BCMOLT_GPON_TRX_CFG_ID_PLO_RANGING) | (1ULL << BCMOLT_GPON_TRX_CFG_ID_PLO_DATA), ((1ULL << BCMOLT_LOG_ENTRY_CFG_ID_DEFAULT_LOG_LEVEL) | (1ULL << BCMOLT_LOG_ENTRY_CFG_ID_DEFAULT_LOG_TYPE)) | (1ULL << BCMOLT_LOG_ENTRY_CFG_ID_LOG_NAME), (1ULL << BCMOLT_LOGGER_CFG_ID_BUFFER) | (1ULL << BCMOLT_LOGGER_CFG_ID_LOG_NAMES), (1ULL << BCMOLT_NNI_CFG_ID_NNI_STATUS) | (1ULL << BCMOLT_NNI_CFG_ID_NNI_BACKUP_STATUS), 0, 1ULL << BCMOLT_SOFTWARE_ERROR_CFG_ID_ENTRY, 0, 1ULL << BCMOLT_XGPON_ALLOC_CFG_ID_STATE, 1ULL << BCMOLT_XGPON_GEM_PORT_CFG_ID_GEM_PORT_STATE, 0, ((((((1ULL << BCMOLT_XGPON_NI_CFG_ID_AVAILABLE_BANDWIDTH) | (1ULL << BCMOLT_XGPON_NI_CFG_ID_NUMBER_OF_ACTIVE_ONUS)) | (1ULL << BCMOLT_XGPON_NI_CFG_ID_PON_STATUS)) | (1ULL << BCMOLT_XGPON_NI_CFG_ID_RANGING_WINDOW_SIZE)) | (1ULL << BCMOLT_XGPON_NI_CFG_ID_PRBS_STATUS)) | (1ULL << BCMOLT_XGPON_NI_CFG_ID_ALL_ONUS)) | (1ULL << BCMOLT_XGPON_NI_CFG_ID_ALL_MCAST_GEM_PORTS), (((((1ULL << BCMOLT_XGPON_ONU_CFG_ID_ONU_OLD_STATE) | (1ULL << BCMOLT_XGPON_ONU_CFG_ID_DISABLED_AFTER_DISCOVERY)) | (1ULL << BCMOLT_XGPON_ONU_CFG_ID_DEACTIVATION_REASON)) | (1ULL << BCMOLT_XGPON_ONU_CFG_ID_ALL_GEM_PORTS)) | (1ULL << BCMOLT_XGPON_ONU_CFG_ID_ALL_ALLOCS)) | (1ULL << BCMOLT_XGPON_ONU_CFG_ID_REQUEST_REGISTRATION_STATUS), 0, 0 };
+static bcmolt_instance_info instance_info[] = { { offsetof(bcmolt_ae_ni_key, ae_ni), sizeof(bcmolt_ae_ni) }, { offsetof(bcmolt_ae_path_ds_key, ae_ni), sizeof(bcmolt_ae_ni) }, { offsetof(bcmolt_ae_path_us_key, ae_ni), sizeof(bcmolt_ae_ni) }, { offsetof(bcmolt_channel_key, pon_ni), sizeof(bcmolt_pon_ni) }, { offsetof(bcmolt_debug_key, reserved), sizeof(uint32_t) }, { offsetof(bcmolt_device_key, reserved), sizeof(uint32_t) }, { offsetof(bcmolt_epon_denied_link_key, epon_ni), sizeof(bcmolt_epon_ni) }, { offsetof(bcmolt_epon_link_key, epon_ni), sizeof(bcmolt_epon_ni) }, { offsetof(bcmolt_epon_ni_key, epon_ni), sizeof(bcmolt_epon_ni) }, { offsetof(bcmolt_epon_onu_10g_us_key, epon_ni), sizeof(bcmolt_epon_ni) }, { offsetof(bcmolt_epon_onu_1g_us_key, epon_ni), sizeof(bcmolt_epon_ni) }, { offsetof(bcmolt_epon_path_10g_ds_key, epon_ni), sizeof(bcmolt_epon_ni) }, { offsetof(bcmolt_epon_path_10g_us_key, epon_ni), sizeof(bcmolt_epon_ni) }, { offsetof(bcmolt_epon_path_1g_ds_key, epon_ni), sizeof(bcmolt_epon_ni) }, { offsetof(bcmolt_epon_path_1g_us_key, epon_ni), sizeof(bcmolt_epon_ni) }, { offsetof(bcmolt_epon_rp_key, epon_ni), sizeof(bcmolt_epon_ni) }, { offsetof(bcmolt_gpio_key, reserved), sizeof(uint32_t) }, { offsetof(bcmolt_gpon_alloc_key, pon_ni), sizeof(bcmolt_gpon_ni) }, { offsetof(bcmolt_gpon_gem_port_key, pon_ni), sizeof(bcmolt_gpon_ni) }, { offsetof(bcmolt_gpon_iwf_key, pon_ni), sizeof(bcmolt_gpon_ni) }, { offsetof(bcmolt_gpon_iwf_ds_egress_flow_key, pon_ni), sizeof(bcmolt_gpon_ni) }, { offsetof(bcmolt_gpon_iwf_ds_ingress_flow_key, pon_ni), sizeof(bcmolt_gpon_ni) }, { offsetof(bcmolt_gpon_iwf_mac_table_key, pon_ni), sizeof(bcmolt_gpon_ni) }, { offsetof(bcmolt_gpon_iwf_us_flow_key, pon_ni), sizeof(bcmolt_gpon_ni) }, { offsetof(bcmolt_gpon_ni_key, pon_ni), sizeof(bcmolt_gpon_ni) }, { offsetof(bcmolt_gpon_onu_key, pon_ni), sizeof(bcmolt_gpon_ni) }, { offsetof(bcmolt_gpon_trx_key, pon_ni), sizeof(bcmolt_gpon_ni) }, { offsetof(bcmolt_log_entry_key, reserved), sizeof(uint8_t) }, { offsetof(bcmolt_logger_key, reserved), sizeof(uint32_t) }, { offsetof(bcmolt_nni_key, pon_ni), sizeof(bcmolt_pon_ni) }, { offsetof(bcmolt_nni_serdes_key, pon_ni), sizeof(bcmolt_pon_ni) }, { offsetof(bcmolt_software_error_key, reserved), sizeof(uint32_t) }, { offsetof(bcmolt_trx_calibration_key, reserved), sizeof(uint32_t) }, { offsetof(bcmolt_xgpon_alloc_key, pon_ni), sizeof(bcmolt_xgpon_ni) }, { offsetof(bcmolt_xgpon_gem_port_key, pon_ni), sizeof(bcmolt_xgpon_ni) }, { offsetof(bcmolt_xgpon_iwf_key, pon_ni), sizeof(bcmolt_xgpon_ni) }, { offsetof(bcmolt_xgpon_ni_key, pon_ni), sizeof(bcmolt_xgpon_ni) }, { offsetof(bcmolt_xgpon_onu_key, pon_ni), sizeof(bcmolt_xgpon_ni) }, { offsetof(bcmolt_xgpon_trx_key, pon_ni), sizeof(bcmolt_xgpon_ni) }, { offsetof(bcmolt_xpon_serdes_key, pon_ni), sizeof(bcmolt_pon_ni) } };
+
+/******************************************************************************/
+static bcmos_bool bcmolt_get_group_info(const bcmolt_msg *msg, bcmolt_group_info **group, bcmolt_group_info **key)
+{
+    bcmolt_group_id group_id;
+    bcmolt_group_id key_id;
+    bcmos_errno err;
+
+    err = bcmolt_group_id_combine(msg->obj_type, msg->group, msg->subgroup, &group_id);
+    if (err != BCM_ERR_OK)
+    {
+        return BCMOS_FALSE;
+    }
+
+    err = bcmolt_group_id_combine(msg->obj_type, BCMOLT_MGT_GROUP_KEY, 0, &key_id);
+    if (err != BCM_ERR_OK)
+    {
+        return BCMOS_FALSE;
+    }
+
+    *group = group_info[group_id];
+    *key = group_info[key_id];
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+int32_t bcmolt_msg_get_packed_length(bcmolt_msg *msg)
+{
+    uint8_t *key_ptr;
+    bcmolt_group_info *group;
+    bcmolt_group_info *key;
+
+    int32_t ret = bcmolt_msg_hdr_get_packed_length(msg);
+    if (ret < 0)
+    {
+        return ret;
+    }
+
+    if (!bcmolt_get_group_info(msg, &group, &key))
+    {
+        return (int32_t) BCM_ERR_MSG_ERROR;
+    }
+
+    key_ptr = (uint8_t *) (msg + 1);
+    ret += key->get_packed_length(key_ptr, BCMOLT_PRESENCE_MASK_ALL);
+
+    if (bcmolt_msg_should_pack_data(msg) && (group->get_packed_length != NULL))
+    {
+        uint8_t *data_ptr = (uint8_t *) ((long)msg + group->data_offset);
+        ret += group->get_packed_length(data_ptr, msg->presence_mask);
+    }
+
+    if (msg->type & BCMOLT_MSG_TYPE_MULTI)
+    {
+        if (msg->msg_set == NULL)
+        {
+            return (int32_t) BCM_ERR_NULL;
+        }
+
+        if (msg->dir == BCMOLT_MSG_DIR_REQUEST)
+        {
+            ret += 19;  /* group: 1, max_instances: 2, presence_mask: 8, filter_flags: 8 */
+        }
+        else
+        {
+            int i;
+            int32_t sub_msg_ret;
+
+            ret += 3;   /* group: num_instances: 2, more: 1 */
+            ret += key->get_packed_length(key_ptr, BCMOLT_PRESENCE_MASK_ALL);   /* next key */
+            for (i = 0; i < msg->msg_set->num_instances; i++)
+            {
+                if (msg->msg_set->msg[i] == NULL)
+                {
+                    return (int32_t) BCM_ERR_INTERNAL;
+                }
+
+                sub_msg_ret = bcmolt_msg_get_packed_length(msg->msg_set->msg[i]);
+                if (sub_msg_ret < 0)
+                {
+                    return sub_msg_ret;
+                }
+
+                ret += sub_msg_ret;
+            }
+        }
+    }
+
+    return ret;
+}
+
+/* Create message set */
+bcmos_errno bcmolt_msg_set_alloc(bcmolt_obj_id obj, bcmolt_mgt_group group, uint32_t max_instances, bcmolt_msg_set **msg_set)
+{
+    bcmolt_msg hdr = { };
+    uint32_t size;
+    bcmolt_group_info *grp;
+    bcmolt_group_info *key;
+
+    if (msg_set == NULL)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_PARM, "msg_set parameter must be set\n");
+    }
+
+    if (group != BCMOLT_MGT_GROUP_CFG && group != BCMOLT_MGT_GROUP_STAT)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_NOT_SUPPORTED, "group must be BCMOLT_MGT_GROUP_CFG or BCMOLT_MGT_GROUP_STAT\n");
+    }
+
+    /* Calculate message set size */
+    hdr.obj_type = obj;
+    hdr.group = group;
+    hdr.dir = BCMOLT_MSG_DIR_REQUEST;
+    if (!bcmolt_get_group_info(&hdr, &grp, &key))
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_NOT_SUPPORTED, "Not supported for the object\n");
+    }
+
+    size = sizeof(bcmolt_msg_set) + key->size + max_instances * sizeof(bcmolt_msg *);
+    *msg_set = bcmos_calloc(size);
+    if (*msg_set == NULL)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_NOMEM, "Can't allocate message set\n");
+    }
+    (*msg_set)->group = group;
+    (*msg_set)->max_instances = max_instances;
+    (*msg_set)->next_key = (void *)(&((*msg_set)->msg[max_instances]));
+
+    return BCM_ERR_OK;
+}
+
+/* Release message set
+ * \param[in]   msg_set
+ */
+void bcmolt_msg_set_free(bcmolt_msg_set *msg_set)
+{
+    uint32_t i;
+
+    for (i = 0; i < msg_set->max_instances && msg_set->msg[i] != NULL; i++)
+    {
+        bcmolt_msg_free(msg_set->msg[i]);
+    }
+
+    bcmos_free(msg_set);
+}
+
+/* Pack message set, excluding the filter-header which is already packed */
+static bcmos_errno bcmolt_msg_set_pack(const bcmolt_msg *msg, bcmolt_buf *buf, const bcmolt_group_info *key_info)
+{
+    bcmolt_msg_set *msg_set = msg->msg_set;
+    int i;
+    bcmos_bool ret;
+    bcmos_errno err = BCM_ERR_OK;
+
+    if (!msg_set)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_INTERNAL, "msh->msg_set == NULL\n");
+    }
+
+    /* REQUEST:
+     * - filter (already packed at this point, contains first key to check)
+     * - group (FFU)
+     * - max_instances
+     * - presence_mask
+     * - filter_flags
+     *
+     * RESPONSE:
+     * - filter (already packed at this point)
+     * - num_instances
+     * - more
+     * - next_key
+     * - num_instances * msg
+     */
+    if (msg->dir == BCMOLT_MSG_DIR_REQUEST)
+    {
+        ret = bcmolt_buf_write_u8(buf, (uint8_t) msg_set->group);
+        ret = ret && bcmolt_buf_write_u16(buf, msg_set->max_instances);
+        ret = ret && bcmolt_buf_write_u64(buf, msg_set->presence_mask);
+        ret = ret && bcmolt_buf_write_u64(buf, msg_set->filter_flags);
+        if (!ret) err = BCM_ERR_OVERFLOW;
+    }
+    else
+    {
+        ret = bcmolt_buf_write_u16(buf, msg_set->num_instances);
+        ret = ret && bcmolt_buf_write_u8(buf, (uint8_t) msg_set->more);
+        ret = ret && key_info->pack(msg_set->next_key, buf, BCMOLT_PRESENCE_MASK_ALL);
+        if (!ret) return BCM_ERR_OVERFLOW;
+
+        for (i = 0; i < msg_set->num_instances && err == BCM_ERR_OK; i++)
+        {
+            if (msg_set->msg[i] == NULL)
+            {
+                err = BCM_ERR_INTERNAL;
+                break;
+            }
+
+            err = bcmolt_msg_pack(msg_set->msg[i], buf);
+        }
+    }
+
+    return err;
+}
+
+/******************************************************************************/
+bcmos_errno bcmolt_msg_pack(bcmolt_msg *msg, bcmolt_buf *buf)
+{
+    uint8_t *key_ptr;
+    bcmos_errno err;
+    bcmolt_group_info *group;
+    bcmolt_group_info *key;
+
+    if (!bcmolt_get_group_info(msg, &group, &key))
+    {
+        return BCM_ERR_MSG_ERROR;
+    }
+
+    err = bcmolt_msg_hdr_pack(msg, buf);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    key_ptr = (uint8_t *) (msg + 1);
+    if (!key->pack(key_ptr, buf, BCMOLT_PRESENCE_MASK_ALL))
+    {
+        return BCM_ERR_OVERFLOW;
+    }
+
+    if (bcmolt_msg_should_pack_data(msg) && (group->pack != NULL))
+    {
+        uint8_t *data_ptr = (uint8_t *) ((long)msg + group->data_offset);
+        if (!group->pack(data_ptr, buf, msg->presence_mask))
+        {
+            return BCM_ERR_OVERFLOW;
+        }
+    }
+
+    /* If it is a multi-message pack what follows the rest of the set */
+    if (msg->type & BCMOLT_MSG_TYPE_MULTI)
+    {
+        err = bcmolt_msg_set_pack(msg, buf, key);
+    }
+
+    return err;
+}
+
+/* scan the input buffer to determine how much memory will be required to unpack variable-sized lists */
+static bcmos_errno bcmolt_msg_list_mem_scan(bcmolt_buf *buf, const bcmolt_msg *hdr, const bcmolt_group_info *group, const bcmolt_group_info *key, uint32_t *size)
+{
+    uint32_t pos_before_scan = bcmolt_buf_get_used(buf);
+
+    if (!key->mem_scan(buf, size, BCMOLT_PRESENCE_MASK_ALL))
+    {
+        return BCM_ERR_OVERFLOW;
+    }
+
+    if (bcmolt_msg_should_pack_data(hdr) && (group->mem_scan != NULL) && !group->mem_scan(buf, size, hdr->presence_mask))
+    {
+        return BCM_ERR_OVERFLOW;
+    }
+
+    if (!bcmolt_buf_rewind(buf, bcmolt_buf_get_used(buf) - pos_before_scan))
+    {
+        return BCM_ERR_OVERFLOW;
+    }
+
+    return BCM_ERR_OK;
+}
+
+/* Pack message set, excluding the filter-header which is already packed */
+static bcmos_errno bcmolt_msg_set_unpack(bcmolt_msg *msg, bcmolt_buf *buf, const bcmolt_group_info *key_info)
+{
+    bcmolt_msg_set *msg_set;
+    int i;
+    bcmos_bool ret;
+    bcmos_errno err = BCM_ERR_OK;
+
+    /*
+     * See encoding in bcmolt_msg_set_pack()
+     */
+    if (msg->dir == BCMOLT_MSG_DIR_REQUEST)
+    {
+        uint8_t group;
+        uint16_t max_instances;
+        uint64_t filter_flags;
+
+        ret = bcmolt_buf_read_u8(buf, &group);
+        ret = ret && bcmolt_buf_read_u16(buf, &max_instances);
+        if (!ret)
+        {
+            return BCM_ERR_OVERFLOW;
+        }
+
+        err = bcmolt_msg_set_alloc(msg->obj_type, group, max_instances, &msg_set);
+        if (err) return err;
+
+        ret = ret && bcmolt_buf_read_u64(buf, &msg_set->presence_mask);
+        ret = ret && bcmolt_buf_read_u64(buf, &filter_flags);
+        if (!ret)
+        {
+            bcmolt_msg_set_free(msg_set);
+            return BCM_ERR_OVERFLOW;
+        }
+
+        msg_set->filter_flags = filter_flags;
+        msg->msg_set = msg_set;
+    }
+    else
+    {
+        uint8_t is_more;
+        uint16_t num_instances;
+
+        ret = bcmolt_buf_read_u16(buf, &num_instances);
+        if (!ret)
+        {
+            return BCM_ERR_OVERFLOW;
+        }
+
+        if (msg->msg_set == NULL)
+        {
+            err = bcmolt_msg_set_alloc(msg->obj_type, msg->group, num_instances, &msg->msg_set);
+            if (BCM_ERR_OK != err)
+            {
+                return err;
+            }
+        }
+
+        msg_set = msg->msg_set;
+        msg_set->num_instances = num_instances;
+        ret = ret && bcmolt_buf_read_u8(buf, &is_more);
+        ret = ret && key_info->unpack(msg_set->next_key, buf, NULL, BCMOLT_PRESENCE_MASK_ALL);
+        if (!ret)
+        {
+            return BCM_ERR_OVERFLOW;
+        }
+
+        msg_set->more = (bcmos_bool) is_more;
+        if (msg_set->num_instances > msg_set->max_instances)
+        {
+            BCMOS_TRACE_RETURN(BCM_ERR_INTERNAL, "msg_set unpack: num_instances %u > max_instances %u\n", msg_set->num_instances, msg_set->max_instances);
+        }
+
+        for (i = 0; i < msg_set->num_instances && err == BCM_ERR_OK; i++)
+        {
+            err = bcmolt_msg_unpack(buf, &msg_set->msg[i]);
+        }
+    }
+
+    return err;
+}
+
+/******************************************************************************/
+bcmos_errno bcmolt_msg_unpack(bcmolt_buf *buf, bcmolt_msg **unpacked)
+{
+    bcmolt_msg hdr = { };
+    bcmos_errno err;
+    bcmolt_group_info *group;
+    bcmolt_group_info *key;
+    bcmos_bool did_malloc = BCMOS_FALSE;
+    uint8_t *key_ptr;
+    void *list_mem = NULL;
+    void **list_mem_ptr = NULL;
+
+    err = bcmolt_msg_hdr_unpack(&hdr, buf);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    if (!bcmolt_get_group_info(&hdr, &group, &key))
+    {
+        return BCM_ERR_MSG_ERROR;
+    }
+
+    if (*unpacked == NULL)
+    {
+        uint32_t size = group->container_size == 0 ? sizeof(bcmolt_msg) + key->size : group->container_size;
+        err = bcmolt_msg_list_mem_scan(buf, &hdr, group, key, &size);
+        if (err != BCM_ERR_OK)
+        {
+            return err;
+        }
+
+        *unpacked = bcmos_calloc(size);
+        if (*unpacked == NULL)
+        {
+            return BCM_ERR_NOMEM;
+        }
+
+        list_mem = (uint8_t *) (*unpacked) + group->container_size;
+        list_mem_ptr = &list_mem;
+        did_malloc = BCMOS_TRUE;
+    }
+    else
+    {
+        if ((*unpacked)->list_buf != NULL)
+        {
+            uint32_t size = 0;
+            err = bcmolt_msg_list_mem_scan(buf, &hdr, group, key, &size);
+            if (err != BCM_ERR_OK)
+            {
+                return err;
+            }
+
+            if (size > (*unpacked)->list_buf_size)
+            {
+                return BCM_ERR_INSUFFICIENT_LIST_MEM;
+            }
+
+            list_mem = (*unpacked)->list_buf;
+            list_mem_ptr = &list_mem;
+        }
+    }
+
+    hdr.msg_set = (*unpacked)->msg_set;
+    **unpacked = hdr;
+
+    key_ptr = (uint8_t *) (*unpacked + 1);
+    if (!key->unpack(key_ptr, buf, list_mem_ptr, BCMOLT_PRESENCE_MASK_ALL))
+    {
+        if (did_malloc)
+        {
+            bcmos_free(*unpacked);
+        }
+
+        return BCM_ERR_OVERFLOW;
+    }
+
+    if (bcmolt_msg_should_pack_data(&hdr))
+    {
+        uint8_t *data_ptr = (uint8_t *) (*unpacked) + group->data_offset;
+        if ((group->unpack != NULL) && !group->unpack(data_ptr, buf, list_mem_ptr, hdr.presence_mask))
+        {
+            if (did_malloc)
+            {
+                bcmos_free(*unpacked);
+            }
+
+            return BCM_ERR_OVERFLOW;
+        }
+    }
+
+    /* If it is a multi-message pack what follows the rest of the set */
+    if (hdr.type & BCMOLT_MSG_TYPE_MULTI)
+    {
+        err = bcmolt_msg_set_unpack(*unpacked, buf, key);
+        if (err != BCM_ERR_OK)
+        {
+            if (did_malloc)
+            {
+                bcmos_free(*unpacked);
+            }
+
+            return err;
+        }
+    }
+
+    return BCM_ERR_OK;
+}
+
+/******************************************************************************/
+bcmos_errno bcmolt_group_id_split(bcmolt_group_id group_id, bcmolt_obj_id *obj, bcmolt_mgt_group *group, uint16_t *subgroup)
+{
+    if ((group_id >= BCMOLT_GROUP_ID__NUM_OF) || (group_info[group_id] == NULL))
+    {
+        return BCM_ERR_RANGE;
+    }
+
+    *obj = group_info[group_id]->obj_type;
+    *group = group_info[group_id]->group;
+    *subgroup = group_info[group_id]->subgroup;
+    return BCM_ERR_OK;
+}
+
+/******************************************************************************/
+bcmos_errno bcmolt_group_id_combine(bcmolt_obj_id obj, bcmolt_mgt_group group, uint16_t subgroup, bcmolt_group_id *group_id)
+{
+    if ((obj >= BCMOLT_OBJ_ID__NUM_OF) || (group >= BCMOLT_MGT_GROUP__NUM_OF) || (group_ids[obj] == NULL) || (subgroup >= group_ids[obj][group].subgroup_count))
+    {
+        return BCM_ERR_RANGE;
+    }
+
+    *group_id = group_ids[obj][group].subgroup_ids[subgroup];
+    return BCM_ERR_OK;
+}
+
+/******************************************************************************/
+uint8_t bcmolt_msg_instance(const bcmolt_msg *msg)
+{
+    const void *val_ptr;
+
+    if (msg->obj_type >= BCMOLT_OBJ_ID__NUM_OF)
+    {
+        return 0;
+    }
+
+    if (instance_info[msg->obj_type].offset < 0)
+    {
+        return 0;
+    }
+
+    val_ptr = ((const uint8_t *)(msg + 1)) + instance_info[msg->obj_type].offset;
+
+    /** This is probably not the smartest way to do this... TODO: revisit */
+    switch (instance_info[msg->obj_type].size)
+    {
+        case 1:
+            return *((const uint8_t *)val_ptr);
+        case 2:
+            return (uint8_t) (*((const uint16_t *)val_ptr));
+        case 4:
+            return (uint8_t) (*((const uint32_t *)val_ptr));
+        case 8:
+            return (uint8_t) (*((const uint64_t *)val_ptr));
+        default:
+            return 0;
+    }
+}
+
+/******************************************************************************/
+bcmos_errno bcmolt_msg_clone(bcmolt_msg **dest, bcmolt_msg *src)
+{
+    bcmos_errno err;
+    int32_t packed_len;
+    uint8_t *mem;
+    bcmolt_buf buf;
+
+    packed_len = bcmolt_msg_get_packed_length(src);
+    if (packed_len < 0)
+    {
+        return (bcmos_errno) packed_len;
+    }
+
+    mem = bcmos_calloc((uint32_t) packed_len);
+    if (mem == NULL)
+    {
+        return BCM_ERR_NOMEM;
+    }
+
+    bcmolt_buf_init(&buf, (uint32_t) packed_len, mem, BCMOLT_BUF_ENDIAN_FIXED);
+    err = bcmolt_msg_pack(src, &buf);
+    if (err != BCM_ERR_OK)
+    {
+        bcmos_free(mem);
+        return err;
+    }
+
+    buf.curr = buf.start;
+    err = bcmolt_msg_unpack(&buf, dest);
+    bcmos_free(mem);
+    return err;
+}
+
+/******************************************************************************/
+bcmos_errno bcmolt_get_prop_readonly_mask(bcmolt_obj_id obj, bcmolt_presence_mask *mask)
+{
+    if (obj >= BCMOLT_OBJ_ID__NUM_OF)
+    {
+        return BCM_ERR_RANGE;
+    }
+
+    *mask = readonly_prop_mask[obj];
+    return BCM_ERR_OK;
+}
+
+#ifdef __KERNEL__
+EXPORT_SYMBOL(bcmolt_msg_get_packed_length);
+EXPORT_SYMBOL(bcmolt_msg_pack);
+EXPORT_SYMBOL(bcmolt_msg_unpack);
+EXPORT_SYMBOL(bcmolt_group_id_split);
+EXPORT_SYMBOL(bcmolt_group_id_combine);
+EXPORT_SYMBOL(bcmolt_msg_instance);
+EXPORT_SYMBOL(bcmolt_get_prop_readonly_mask);
+EXPORT_SYMBOL(bcmolt_msg_set_alloc);
+EXPORT_SYMBOL(bcmolt_msg_set_free);
+
+MODULE_LICENSE("Dual BSD/GPL");
+#endif
diff --git a/bcm68620_release/release/host_driver/model/bcmolt_msg_pack.h b/bcm68620_release/release/host_driver/model/bcmolt_msg_pack.h
new file mode 100644
index 0000000..bc01bff
--- /dev/null
+++ b/bcm68620_release/release/host_driver/model/bcmolt_msg_pack.h
@@ -0,0 +1,143 @@
+/*
+<:copyright-BRCM:2016:proprietary:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+This program is the proprietary software of Broadcom Corporation and/or its
+licensors, and may only be used, duplicated, modified or distributed pursuant
+to the terms and conditions of a separate, written license agreement executed
+between you and Broadcom (an "Authorized License").  Except as set forth in
+an Authorized License, Broadcom grants no license (express or implied), right
+to use, or waiver of any kind with respect to the Software, and Broadcom
+expressly reserves all rights in and to the Software and all intellectual
+property rights therein.  IF YOU HAVE NO AUTHORIZED LICENSE, THEN YOU HAVE
+NO RIGHT TO USE THIS SOFTWARE IN ANY WAY, AND SHOULD IMMEDIATELY NOTIFY
+BROADCOM AND DISCONTINUE ALL USE OF THE SOFTWARE.
+
+Except as expressly set forth in the Authorized License,
+
+1. This program, including its structure, sequence and organization,
+    constitutes the valuable trade secrets of Broadcom, and you shall use
+    all reasonable efforts to protect the confidentiality thereof, and to
+    use this information only in connection with your use of Broadcom
+    integrated circuit products.
+
+2. TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
+    AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES, REPRESENTATIONS OR
+    WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH
+    RESPECT TO THE SOFTWARE.  BROADCOM SPECIFICALLY DISCLAIMS ANY AND
+    ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY, NONINFRINGEMENT,
+    FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES, ACCURACY OR
+    COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR CORRESPONDENCE
+    TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING OUT OF USE OR
+    PERFORMANCE OF THE SOFTWARE.
+
+3. TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM OR
+    ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL, INCIDENTAL, SPECIAL,
+    INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER ARISING OUT OF OR IN ANY
+    WAY RELATING TO YOUR USE OF OR INABILITY TO USE THE SOFTWARE EVEN
+    IF BROADCOM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES;
+    OR (ii) ANY AMOUNT IN EXCESS OF THE AMOUNT ACTUALLY PAID FOR THE
+    SOFTWARE ITSELF OR U.S. $1, WHICHEVER IS GREATER. THESE LIMITATIONS
+    SHALL APPLY NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY
+    LIMITED REMEDY.
+:>
+*/
+
+#ifndef BCMOLT_MSG_PACK_H_
+#define BCMOLT_MSG_PACK_H_
+
+#include "bcmos_system.h"
+#include "bcmos_common.h"
+#include "bcmos_errno.h"
+#include "bcmolt_buf.h"
+#include "bcmolt_msg.h"
+#include "bcmolt_model_types.h"
+
+/** Gets the number of bytes a message would occupy when packed.
+ *
+ * \param this The message to scan.
+ * \return The size in bytes if > 0, or an error as defined in bcmos_errno.
+ */
+int32_t bcmolt_msg_get_packed_length(bcmolt_msg *this);
+
+/** Packs a message to a byte stream.
+ *
+ * \param this The message to pack.
+ * \param buf The stream to pack into.
+ * \return An error code or BCM_ERR_OK for success.
+ */
+bcmos_errno bcmolt_msg_pack(bcmolt_msg *this, bcmolt_buf *buf);
+
+/** Unpacks a message from a byte stream.
+ *
+ * This unpacks the message from the packed form into the struct following the "unpacked" pointer.  There are several
+ * special cases:
+ *
+ * if *unpacked == NULL:
+ *   *unpacked will be allocated dynamically via bcmos_calloc, in a contiguous block of memory with the struct
+ *   itself followed by the memory required for all variable-sized lists.
+ *
+ * if (*unpacked)->list_buf != NULL:
+ *   When a variable-length list is encountered in the input stream, and the array field we're unpacking into is NULL,
+ *   memory will be allocated starting from (*unpacked)->list_buf.  If multiple such lists exist, they will share this
+ *   buffer.  If the (*unpacked)->list_buf_size is not large enough, this will return BCM_ERR_INSUFFICIENT_LIST_MEM.
+ *
+ * \param buf           The stream to unpack from.
+ * \param unpacked      A pointer to the message to unpack.
+ * \return An error as defined in bcmos_errno.
+ */
+bcmos_errno bcmolt_msg_unpack(bcmolt_buf *buf, bcmolt_msg **unpacked);
+
+/** Converts a generic group ID into a specific object type, group and subgroup.
+ *
+ * \param group_id The generic group ID.
+ * \param obj The object type that corresponds to the group ID.
+ * \param group The group type that corresponds to the group ID.
+ * \param subgroup The subgroup index that corresponds to the group ID.
+ * \return An error code or BCM_ERR_OK for success.
+ */
+bcmos_errno bcmolt_group_id_split(bcmolt_group_id group_id,
+                                  bcmolt_obj_id *obj,
+                                  bcmolt_mgt_group *group,
+                                  uint16_t *subgroup);
+
+/** Converts a specific object type, group and subgroup into a generic group ID.
+ *
+ * \param obj The object type that corresponds to the group ID.
+ * \param group The group type that corresponds to the group ID.
+ * \param subgroup The subgroup index that corresponds to the group ID.
+ * \param group_id The generic group ID.
+ * \return An error code or BCM_ERR_OK for success.
+ */
+bcmos_errno bcmolt_group_id_combine(bcmolt_obj_id obj,
+                                    bcmolt_mgt_group group,
+                                    uint16_t subgroup,
+                                    bcmolt_group_id *group_id);
+
+/** Returns the instance number of a given message, as determined by the object key.
+ *
+ * \param msg The message to check.
+ * \return The instance number of the message.
+ */
+uint8_t bcmolt_msg_instance(const bcmolt_msg *msg);
+
+/** Gets a mask of all readonly properties for an object's cfg group.
+ *
+ * \param obj The objecct to check.
+ * \param mask A mask of bits set to 1 per read-only property.
+ * \return An error code or BCM_ERR_OK for success.
+ */
+bcmos_errno bcmolt_get_prop_readonly_mask(bcmolt_obj_id obj, bcmolt_presence_mask *mask);
+
+/** Clones a message by packing it to a buffer then unpacking it into the destination message.
+ * This uses bcmolt_msg_unpack, so if *dest is NULL, memory will by allocated dynamically using bcmos_calloc.
+ *
+ * \param dest A pointer to the location in memory that will hold the cloned message.
+ * \param src The message that should be copied.
+ * \return An error code or BCM_ERR_OK for success.
+ */
+bcmos_errno bcmolt_msg_clone(bcmolt_msg **dest, bcmolt_msg *src);
+
+#endif /* BCMOLT_MSG_PACK_H_ */
diff --git a/bcm68620_release/release/host_driver/pcie/Makefile b/bcm68620_release/release/host_driver/pcie/Makefile
new file mode 100644
index 0000000..c8cc18b
--- /dev/null
+++ b/bcm68620_release/release/host_driver/pcie/Makefile
@@ -0,0 +1,35 @@
+# PCIe driver
+# - low-level PCIe driver (send/rx functions)
+#
+MOD_NAME = pcie
+
+ifeq ("$(OS_KERNEL)", "linux")
+MOD_TYPE = linux_lib
+else
+MOD_TYPE = lib
+endif
+
+MOD_DEFS = -DCHECK_PARAM
+#MOD_DEFS += -DHARDWARE_TEST1
+
+ifeq ("$(SUBSYSTEM)", "embedded")
+    MOD_INC_DIRS = $(SRC_DIR) embedded/sys/drv
+else
+    ifneq ("$(RELEASE_BUILD)", "y")
+        MOD_INC_DIRS = $(SRC_DIR) host/driver/$(PLATFORM)/pcie
+    endif
+endif
+
+# If called by linux kernel builder - add include paths manually.
+# It is not elegant, but we'll not have many linux modules
+ifneq ("$(KBUILD_SRC)", "")
+	-include $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
+endif
+
+ifneq ("$(RAW_TRANSPORT_VIA_UDP)", "y")
+    srcs = bcmtr_pcie.c
+endif
+
+USE_LINT = yes
+
+
diff --git a/bcm68620_release/release/host_driver/pcie/bcmolt_tr_pcie_specific.c b/bcm68620_release/release/host_driver/pcie/bcmolt_tr_pcie_specific.c
new file mode 100755
index 0000000..94102bc
--- /dev/null
+++ b/bcm68620_release/release/host_driver/pcie/bcmolt_tr_pcie_specific.c
@@ -0,0 +1,106 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#include "bcmos_system.h"
+#include "bcmtr_pcie.h"
+#include "bcmolt_tr_pcie_specific.h"
+
+extern f_bcmtr_int bcmtr_pcie_rx_irq_handler;
+extern f_bcmtr_int bcmtr_pcie_tx_irq_handler;
+static bcmos_fastlock isr_lock;
+
+/***************************************************************/
+/* need to pass thru all the devices - check if irq is SHARED */
+/***************************************************************/
+static int bcmtr_rx_isr(int irq, void *isr_info)
+{
+    uint32_t isr_reg;
+    uint32_t mask_reg;
+    long flags;
+    int handled = 0;
+    bcm_pcied_isr_data *isr_data = (bcm_pcied_isr_data *)isr_info;
+
+    flags = bcmos_fastlock_lock(&isr_lock);
+
+    isr_reg = bcm_pci_read32((uint32_t*)(isr_data->pcie_reg_base + DMA_INTR_STATUS));
+    mask_reg = ~bcm_pci_read32((uint32_t*)(isr_data->pcie_reg_base + DMA_INTR_MASK_STATUS));
+
+    if ((isr_reg & mask_reg)& DMA_TX_DONE_MASK)
+    {
+        /* handle TX DONE interrupt */
+        isr_data->tx_done_num++;
+
+        if (bcmtr_pcie_tx_irq_handler)
+            bcmtr_pcie_tx_irq_handler(isr_data->device);
+
+        handled = 1;
+    }
+
+    if ((isr_reg & mask_reg ) & DMA_RX_DONE_MASK)
+    {
+        /* handle RX DONE interrupt */
+        isr_data->rx_done_num++;
+
+        if (bcmtr_pcie_rx_irq_handler)
+            bcmtr_pcie_rx_irq_handler(isr_data->device);
+
+        handled = 1;
+    }
+
+    if (isr_reg & (DMA_RX_ERROR_MASK | DMA_TX_ERROR_MASK))
+    {
+        if (isr_reg & DMA_RX_ERROR_MASK)
+            isr_data->rx_err_num++;
+        if (isr_reg & DMA_TX_ERROR_MASK)
+            isr_data->tx_err_num++;
+        /* clear interrupt error interrupt */
+        bcm_pci_write32((uint32_t*)(isr_data->pcie_reg_base + DMA_INTR_CLEAR), DMA_RX_ERROR_MASK | DMA_TX_ERROR_MASK);
+        handled = 1;
+    }
+
+    bcmos_fastlock_unlock(&isr_lock, flags);
+
+    return handled;
+}
+
+void bcmtr_connect_isr(void *isr_info)
+{
+    uint32_t    flags = 0;
+
+    bcm_pcied_isr_data *isr_data = (bcm_pcied_isr_data *)isr_info;
+    bcmos_fastlock_init(&isr_lock, flags);
+    /* connect interrupt to system cpu - 0 */
+    bcmos_int_connect((int)isr_data->rx_irq, 0, BCMOS_IRQ_SHARED, bcmtr_rx_isr, "dmaisr", isr_data);
+}
+
+#ifdef __KERNEL__
+EXPORT_SYMBOL(bcmtr_connect_isr);
+#endif
+
+
diff --git a/bcm68620_release/release/host_driver/pcie/bcmolt_tr_pcie_specific.h b/bcm68620_release/release/host_driver/pcie/bcmolt_tr_pcie_specific.h
new file mode 100644
index 0000000..c8c8ac1
--- /dev/null
+++ b/bcm68620_release/release/host_driver/pcie/bcmolt_tr_pcie_specific.h
@@ -0,0 +1,113 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef BCMOLT_TR_PCIE_SPECIFIC_H_
+#define BCMOLT_TR_PCIE_SPECIFIC_H_
+
+#include "bcmos_system.h"
+#include "bcmtr_pcie.h"
+
+#define DESCRIPTOR_CONTROL      0x00064410 /* Tx Software Descriptor List Control and Status */
+#define WAKEUP_DMA              0x00064414 /* Tx Wake Control */
+#define ERROR_STATUS            0x00064418 /* Tx Engine Error Status */
+
+#define INTR2_PCI_STATUS        0x00064318 /* PCI interrupt Status Register */
+
+#define DMA_TX_SW_DESC_LIST_CTRL_STS_TX_DMA_RUN_STOP_MASK   0x00000001
+#define DMA_TX_WAKE_CTRL_WAKE_MASK                          0x00000001
+
+#define DMA_INTR_STATUS	        0x00064318 /* PCI interrupt Status Register */
+#define DMA_INTR_CLEAR          0x00064320 /* PCI interrupt Clear Register */
+#define DMA_INTR_MASK_SET       0x00064328 /* PCI interrupt Mask Set Register */
+#define DMA_INTR_MASK_CLEAR     0x0006432c /* PCI interrupt Mask Clear Register */
+#define DMA_INTR_MASK_STATUS    0x00064324 /* PCI interrupt Mask & Status Register */
+
+#define DMA_RX_ERROR_MASK       0x00000008
+#define DMA_RX_DONE_MASK        0x00000004
+#define DMA_TX_DONE_MASK        0x00000001
+#define DMA_TX_ERROR_MASK       0x00000002
+
+#define PCIE_L2_INTR_MASK       0x00000020 /* L2 interrupt bit in L1 interrupt status */
+
+#define DMA_INTR1_STATUS        0x00069300 /* Interrupt Status Register */
+#define DMA_INTR1_MASK_CLEAR    0x0006930c /* Interrupt Mask Clear Register */
+#define DMA_INTR1_MASK_SET      0x00069308 /* Interrupt Mask Set Register */
+#define DMA_INTA_MASK           0x00000002
+#define DMA_INTA_SHIFT          1
+#define PCIE_STATUS_OFFSET      0x00064068 /* PCIE_PCIE_PCIE_0_PCIE_PCIE_0_MISC_PCIE_STATUS */
+
+void bcmtr_connect_isr(void *isr_info);
+
+/* first parameter is the dest PD, the second parameter is the source field */
+static inline void bcmtr_set_dest_buffer_address(uint32_t *pd, void *value)
+{
+    uint64_t tmp = bcmos_virt_to_phys(value);
+
+    bcm_pci_write32(&pd[PCI_PACKET_LOW_INDEX],  (uint32_t)( tmp & 0xffffffffUL));
+    bcm_pci_write32(&pd[PCI_PACKET_HIGH_INDEX], (uint32_t)((tmp >> 32) & 0xffffffffUL));
+}
+
+/* first parameter is the dest PD, the second parameter is the source field */
+static inline void bcmtr_set_source_buffer_address(uint32_t *pd, void *value)
+{
+    uint64_t tmp = bcmos_virt_to_phys(value);
+
+    bcm_pci_write32(&pd[PCI_PACKET_LOW_INDEX],  (uint32_t)( tmp & 0xffffffffUL));
+    bcm_pci_write32(&pd[PCI_PACKET_HIGH_INDEX], (uint32_t)((tmp >> 32) & 0xffffffffUL));
+}
+
+static inline bcmos_errno bcmtr_create_tu_rings(uint32_t txlength, uint32_t rxlength,
+                                          void **txptr, void **rxptr,
+                                          void **txptr_orig, void **rxptr_orig,
+                                          unsigned long pcie_reg_base)
+{
+    *txptr      = NULL;
+    *rxptr_orig = NULL;
+    *txptr      = NULL;
+    *rxptr_orig = NULL;
+
+    return BCM_ERR_OK;
+}
+static inline void bcmtr_pcie_specific_init(unsigned long pcie_reg_base) {}
+static inline void bcmtr_pcie_free_rings(uint32_t device, uint32_t *tx_ptr, uint32_t * rx_ptr){}
+static inline void bcmtr_pcie_free_irq(uint32_t irq, void *priv)
+{
+#ifndef SIMULATION_BUILD
+    bcmos_int_disconnect((int)irq, priv);
+#endif
+}
+
+#define TX_LOCKDEF         bcmos_mutex  tx_lock;
+#define CREATE_TXLOCK(i)   bcmos_mutex_create(&bcmtr_pcie_data[i].tx_lock, 0, NULL)
+#define DESTROY_TXLOCK(i)  bcmos_mutex_destroy(&bcmtr_pcie_data[i].tx_lock)
+#define LOCK_TX()          bcmos_mutex_lock(&current_device->tx_lock)
+#define UNLOCK_TX()        bcmos_mutex_unlock(&current_device->tx_lock)
+
+#endif
+
diff --git a/bcm68620_release/release/host_driver/pcie/bcmtr_pcie.c b/bcm68620_release/release/host_driver/pcie/bcmtr_pcie.c
new file mode 100644
index 0000000..b7b572f
--- /dev/null
+++ b/bcm68620_release/release/host_driver/pcie/bcmtr_pcie.c
@@ -0,0 +1,1256 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+#include "bcmtr_pcie.h"
+#include "bcmolt_tr_pcie_specific.h"
+
+
+/*
+    Synchronization flow of DMA data base between Host and Maple
+    The process takes place after Maple is loaded and run from DDR.
+    ========================================================
+    Host                                              Maple
+    ========================================================
+
+    write to SRAM its TX and RX queue size
+    write to SRAM DDR_FINISH indication
+    wait for PRM_BIT from Maple                      run from DDR
+                                                     get from SRAM host tx and rx queue size
+                                                     calls pre_connect
+                                                     write to SRAM opaque data
+                                                     write to SRAM PRM_BIT
+    read from SRAM opaque data                       calls connect
+    clear PRM_BIT from Maple                         wait for PRM_BIT from Host
+    calls pre_connect
+    calls connect
+    write to SRAM PRM_BIT
+    register rx interrupt handler                    register rx interrupt handler
+    ========================================================
+          Both ready to send/receive packets thru DMA:
+    ========================================================
+*/
+/* misc local_bd info structure
+ _____________________________________________________
+|___31 - 25_____|   24  |____23 -16_____|____15-0_____|
+|__reserved_____|__OWN__|___chanal ID___|____length___|
+
+*/
+#define BCM_PCIED_BD_OWNERSHIP_SHIFT        24
+#define BCM_PCIED_BD_OWNERSHIP_MASK         (0x1UL << BCM_PCIED_BD_OWNERSHIP_SHIFT)
+
+#define BCM_PCIED_BD_CHANNEL_ID_SHIFT       16
+#define BCM_PCIED_BD_CHANNEL_ID_MASK        (0xffUL << BCM_PCIED_BD_CHANNEL_ID_SHIFT)
+
+#define BCM_PCIED_BD_PKT_LENGTH_MASK        0xffff
+
+/* length_and_isrenable */
+#define BCM_PCIED_INTR_ENABLE_SHIFT         31
+#define BCM_PCIED_INTR_ENABLE_MASK          (0x1UL << BCM_PCIED_INTR_ENABLE_SHIFT)
+
+#define BCM_PCIED_TRANSFER_SIZE_MASK        0x01ffffffUL
+#define BCM_PCIED_TRANSFER_SIZE_SHIFT       0
+
+/* last_next_indicator */
+#define BCM_PCIED_LAST_RECORD_SHIFT         31
+#define BCM_PCIED_LAST_RECORD_MASK          (0x1UL << BCM_PCIED_LAST_RECORD_SHIFT)
+
+
+#define BCM_PCIED_NEXT_CONTINOUS_SHIFT      2
+#define BCM_PCIED_NEXT_CONTINOUS_MASK       (0x1UL << BCM_PCIED_NEXT_CONTINOUS_SHIFT)
+
+#define BCM_PCIE_ALL_DMA_INTERRUPTS_MASK    (DMA_RX_DONE_MASK | DMA_RX_ERROR_MASK | DMA_TX_DONE_MASK | DMA_TX_ERROR_MASK)
+
+/* packet descriptor - used by HW DMA mechanism , defined by HW do not change it */
+typedef struct
+{
+    uint32_t    ddr_buff_address_low;   /* Maple address - word[0]*/
+    uint32_t    pcie_pkt_address_low;   /* Host address  - word[1]*/
+    uint32_t    pcie_pkt_address_high;  /*               - word[2]*/
+    uint32_t    length_and_isrenable;   /* bit 31 - interrupt enable; bits 24:2 - transfer length */
+    uint32_t    last_next_indicator;    /* bit 31 - last indicator; bit 30 - direction; bit 2 - next descriptor, if 1 -> continuous */
+    uint32_t    next_pd_address_low;
+    uint32_t    next_pd_address_high;
+    uint32_t    ddr_buff_address_high;  /*               - word[7]*/
+} bcm_pcied_pd;
+
+/* transfer unit for TX/RX */
+typedef struct
+{
+    bcm_pcied_pd    data_pd;            /* PD used to transfer data packet */
+    bcm_pcied_pd    remote_to_local_pd; /* PD used to transfer shadow_rbd field from local CPU
+                                            to local_bd field on peer CPU   */
+} bcm_pcied_tu;
+
+/* opaque data, in current implementation will be sent from the Maple to Host only.
+   Provide offsets from the start of Maple DDR window for tx and rx TU rings (where tx and rx rings in term of Host)
+*/
+struct bcmtr_pcie_opaque_data
+{
+    uint32_t    tx_tu_ring_offset;
+    uint32_t    rx_tu_ring_offset;
+};
+
+/* main structure of the driver */
+typedef struct
+{
+    bcm_pcied_tu        *tx_tu_ring;        /* TX DMA ring */
+    bcm_pcied_tu        *rx_tu_ring;        /* RX DMA ring */
+
+    uint32_t            *local_bd;          /* used for receive, updated by peer in tx */
+    uint32_t            *shadow_rbd;         /* used by local in tx as just buffer for update remote local_bd */
+
+    uint32_t            *tx_owner;          /* used for local in tx for lookup that tu mine, updated by local and peer */
+    uint32_t            *peer_tx_owner;     /* used in rx for update tx_owner of the remote*/
+
+    bcmos_buf           **tx_nbuff_save;    /* array of network buffers pointers, used by TX, to store sent buffers */
+    bcmos_buf           **rx_nbuff_save;    /* array of network buffers pointers, used by RX, to store allocated for rx buffers */
+
+    uint32_t            current_tx;         /* index of current tx tu */
+    uint32_t            conf_tx;            /* index of the last reclaimed tx tu */
+    uint32_t            current_rx;         /* index of current rx tu */
+    int32_t             prev_tx;
+
+    uint32_t            max_tx_index;
+    uint32_t            max_rx_index;
+
+    uint32_t            max_mtu;
+
+    unsigned long       ddr_win_base;
+    bcm_pcied_isr_data  isrdata;            /* includes pcie register base, id and irq number */
+
+    TX_LOCKDEF
+
+    /* counters  */
+    uint32_t            rx_counter;
+    uint32_t            tx_counter;
+    uint32_t            rx_pcie_empty_counter;
+    uint32_t            tx_pcie_full_counter;
+
+    /* saved meta-data */
+    uint32_t            txq_length;
+    uint32_t            rxq_length;
+    uint32_t            *tx_tu_ring_orig;   /* TX DMA ring */
+    uint32_t            *rx_tu_ring_orig;   /* RX DMA ring */
+
+} bcm_pcied_comm_data;
+
+f_bcmtr_int bcmtr_pcie_rx_irq_handler;
+f_bcmtr_int bcmtr_pcie_tx_irq_handler;
+
+static void default_tx_done_callback(uint8_t device, bcmos_buf *buf);
+
+static f_bcmtr_done tx_done_handler = default_tx_done_callback;
+
+/* used for error messages */
+#if defined(__KERNEL__)
+#define pcie_print(fmt, args...) printk("%s: %d: " fmt, __FUNCTION__ , __LINE__, ##args)
+#else
+#define pcie_print bcmos_printf
+#endif
+
+#define LOCAL_OWNER           0
+#define REMOTE_OWNER          1
+
+#define INCREMENT_RECEIVED(device)      bcmtr_pcie_data[device].rx_counter++
+#define INCREMENT_TRANSMITED(device)    bcmtr_pcie_data[device].tx_counter++
+
+/* set next index into a DMA ring */
+#define NEXT_INDEX(maxindex, index) \
+do{                                 \
+    index++;                        \
+    if (index > maxindex)           \
+        index = 0;                  \
+} while(0)
+
+/* calculate register address according to registers'base and offset */
+#define PCI_REG_ADDRESS(reg)               (uint32_t *)(bcmtr_pcie_data[device].isrdata.pcie_reg_base + reg)
+
+/* Just for avoid of using this "BCM_ERR_OK"  stupid  define , i can not understand how "error" can be "ok" (D.B.) */
+#define BCMTR_SUCCESS  BCM_ERR_OK
+
+#define BCMTR_PARANOID_CHECK()                 \
+    do {                                       \
+        if (!bcmtr_pcie_data)                  \
+            return BCM_ERR_NORES;              \
+        if (device >= bcmtr_max_devices_number)\
+            return BCM_ERR_RANGE;              \
+    } while(0)
+
+#define BCMTR_PARANOID_CHECK_TYPE(t)           \
+    do {                                       \
+        if (!bcmtr_pcie_data)                  \
+            return (t)BCM_ERR_NORES;           \
+        if (device >= bcmtr_max_devices_number)\
+            return (t)BCM_ERR_RANGE;           \
+    } while(0)
+
+#define BCMTR_PARANOID_CHECK_EXT()             \
+    do {                                       \
+        if (!bcmtr_pcie_data)                  \
+            return BCM_ERR_NORES;              \
+        if (device >= bcmtr_max_devices_number)\
+            return BCM_ERR_RANGE;              \
+        if (!bcmtr_pcie_data[device].isrdata.pcie_reg_base)\
+            return BCM_ERR_NORES;              \
+    } while(0)
+
+    /* device data array */
+static bcm_pcied_comm_data *bcmtr_pcie_data;
+
+static uint32_t bcmtr_max_devices_number;
+
+/* stop one dma engine */
+static inline void stop_dma(uint8_t device)
+{
+    volatile uint32_t value;
+
+    value = bcm_pci_read32(PCI_REG_ADDRESS((uint32_t)DESCRIPTOR_CONTROL));
+    value &= ~DMA_TX_SW_DESC_LIST_CTRL_STS_TX_DMA_RUN_STOP_MASK;
+    bcm_pci_write32(PCI_REG_ADDRESS(DESCRIPTOR_CONTROL), value);
+}
+
+/* Default tx-done callback */
+static void default_tx_done_callback(uint8_t device, bcmos_buf *buf)
+{
+    bcmos_free(buf);
+}
+
+/* free all allocated buffers */
+static bcmos_errno free_buffers(uint8_t device, const char *error_string)
+{
+    uint32_t i;
+    bcm_pcied_comm_data *current_device = &bcmtr_pcie_data[device];
+
+    pcie_print("%s", error_string);
+
+    if (current_device->rx_nbuff_save)
+    {
+        for (i = 0; i < current_device->rxq_length; i++)
+        {
+            if (current_device->rx_nbuff_save[i])
+                bcmos_buf_free(current_device->rx_nbuff_save[i]);
+        }
+        bcmos_free(current_device->rx_nbuff_save);
+    }
+
+    if (current_device->tx_nbuff_save)
+    {
+        for (i = 0; i < current_device->txq_length; i++)
+        {
+            if (current_device->tx_nbuff_save[i])
+                bcmos_buf_free(current_device->tx_nbuff_save[i]);
+        }
+        bcmos_free(current_device->tx_nbuff_save);
+    }
+
+    if (current_device->local_bd)
+        bcmos_dma_free(device, current_device->local_bd);
+
+    if (current_device->shadow_rbd)
+        bcmos_dma_free(device, current_device->shadow_rbd);
+
+    DESTROY_TXLOCK(device);
+
+    bcmtr_pcie_free_rings(device, current_device->tx_tu_ring_orig, current_device->rx_tu_ring_orig);
+
+    memset(&bcmtr_pcie_data[device], 0, sizeof(bcm_pcied_comm_data));
+
+    return BCM_ERR_NOMEM;
+}
+
+bcmos_errno bcmtr_pcie_init(uint8_t max_devices)
+{
+    bcmtr_max_devices_number = max_devices;
+
+    bcmtr_pcie_data = (bcm_pcied_comm_data *)bcmos_calloc(bcmtr_max_devices_number * sizeof(bcm_pcied_comm_data));
+    if (!bcmtr_pcie_data)
+    {
+        pcie_print("Driver cannot be initialized\n");
+        return BCM_ERR_NOMEM;
+    }
+
+    return BCMTR_SUCCESS;
+}
+
+bcmos_errno bcmtr_pcie_pre_connect(uint8_t device, const bcmtr_pcie_pre_connect_cfg *cfg, bcmtr_pcie_opaque_data *opaque_data)
+{
+    bcm_pcied_comm_data *current_device;
+    bcmos_errno         ret_code;
+    uint32_t            i;
+
+    BCMTR_PARANOID_CHECK();
+
+    if (!cfg)
+    {
+        pcie_print("Second parameter(config) is NULL pointer\n");
+        return BCM_ERR_NULL;
+    }
+
+    if (!opaque_data)
+    {
+        pcie_print("Return area pointer(Third parameter) is NULL\n");
+        return BCM_ERR_NULL;
+    }
+
+    current_device = &bcmtr_pcie_data[device];
+
+    CREATE_TXLOCK(device);
+
+    /* copy user's data to internal data base */
+    current_device->txq_length              = cfg->txq_size;
+    current_device->rxq_length              = cfg->rxq_size;
+    current_device->max_tx_index            = cfg->txq_size - 1;
+    current_device->max_rx_index            = cfg->rxq_size - 1;
+    current_device->max_mtu                 = cfg->max_mtu;
+    current_device->isrdata.device          = device;
+    current_device->isrdata.rx_irq          = cfg->rx_irq;
+    current_device->isrdata.pcie_reg_base   = cfg->pcie_reg_base;
+    current_device->ddr_win_base            = cfg->ddr_win_base;
+    current_device->prev_tx                 = -1;
+
+    /**********************/
+    /* allocate data base */
+    /**********************/
+
+    bcmtr_pcie_specific_init(current_device->isrdata.pcie_reg_base);
+
+    ret_code =  bcmtr_create_tu_rings(current_device->txq_length, current_device->rxq_length,
+                                     (void **)&current_device->tx_tu_ring, (void **)&current_device->rx_tu_ring,
+                                     (void **)&current_device->tx_tu_ring_orig, (void **)&current_device->rx_tu_ring_orig,
+                                     current_device->isrdata.pcie_reg_base);
+    if (ret_code != BCMTR_SUCCESS)
+    {
+        pcie_print("Failed to create transfer unit rings : (error=%d)\n",ret_code);
+        return ret_code;
+    }
+
+    /* allocate array of local_bd for RX chain */
+    current_device->local_bd = (uint32_t *)bcmos_dma_alloc(device, sizeof(*current_device->local_bd) * current_device->rxq_length);
+    if (!current_device->local_bd)
+        return free_buffers(device, "Failed to allocate local_bd for RX ring\n");
+
+     /* set remote side as owner for all local_bd */
+    for (i = 0; i < current_device->rxq_length; i++)
+        *(uint32_t*)(&current_device->local_bd[i])=
+            BCMOS_ENDIAN_CPU_TO_LITTLE_U32((uint32_t)(REMOTE_OWNER << BCM_PCIED_BD_OWNERSHIP_SHIFT));
+
+    /* allocate array of local_bd for TX chain */
+    current_device->shadow_rbd = (uint32_t *)bcmos_dma_alloc(device, sizeof(*current_device->shadow_rbd) * current_device->txq_length);
+    if (!current_device->shadow_rbd )
+       return  free_buffers(device, "Failed to allocate shadow_rbd for TX ring\n");
+    /* clear all shadow_rbd , actualy no need but suatble for debugging */
+    memset(current_device->shadow_rbd, 0, sizeof(*current_device->shadow_rbd) * current_device->txq_length);
+
+    /* allocate netowrk buffer pointers arraies */
+    current_device->tx_nbuff_save = (bcmos_buf**)bcmos_calloc(sizeof(bcmos_buf*) * current_device->txq_length);
+    if (!current_device->tx_nbuff_save)
+        return free_buffers(device,"Failed to allocate array for TX buffers pointers\n");
+
+    current_device->rx_nbuff_save = (bcmos_buf**)bcmos_calloc(sizeof(bcmos_buf*) * current_device->rxq_length);
+    if (!current_device->rx_nbuff_save)
+        return free_buffers(device, "Failed to allocate array for RX buffers pointers\n");
+
+    /* update return value, cross tx and rx for peer
+        If we do not allocate the corresponded area just send zero to peer for indicate it
+    */
+    if (current_device->tx_tu_ring)
+        opaque_data->rx_tu_ring_offset = (unsigned long)current_device->tx_tu_ring - current_device->ddr_win_base;
+
+    if (current_device->rx_tu_ring)
+        opaque_data->tx_tu_ring_offset = (unsigned long)current_device->rx_tu_ring - current_device->ddr_win_base;
+
+    return BCMTR_SUCCESS;
+}
+
+bcmos_errno bcmtr_pcie_connect(uint8_t device, const bcmtr_pcie_opaque_data *opaque_data)
+{
+    uint32_t            i;
+    bcm_pcied_comm_data *current_device;
+    bcm_pcied_tu        *tu_ptr = NULL;
+    uint8_t             *pkt_ptr;
+
+    BCMTR_PARANOID_CHECK();
+
+    current_device = &bcmtr_pcie_data[device];
+
+    /* update local tu_rings pointers , no need cross since we already do in pre-connect
+        update only not zero pointers */
+    if (!current_device->rx_tu_ring)
+        current_device->rx_tu_ring = (bcm_pcied_tu*)(opaque_data->rx_tu_ring_offset + current_device->ddr_win_base);
+    else
+    {
+        /* set next to point to the beginning of the ring */
+        tu_ptr = &current_device->rx_tu_ring[current_device->max_rx_index];
+        bcm_pci_write32(&(tu_ptr->remote_to_local_pd.next_pd_address_low), (uint32_t)bcmos_virt_to_phys(current_device->rx_tu_ring));
+    }
+
+    if (!current_device->tx_tu_ring)
+        current_device->tx_tu_ring = (bcm_pcied_tu*)(opaque_data->tx_tu_ring_offset + current_device->ddr_win_base);
+    else
+    {
+        /* set next to point to the beginning of the ring */
+        tu_ptr = &current_device->tx_tu_ring[current_device->max_tx_index];
+        bcm_pci_write32(&(tu_ptr->remote_to_local_pd.next_pd_address_low), (uint32_t)bcmos_virt_to_phys(current_device->tx_tu_ring));
+    }
+
+    /* now all tu_rings allocated and synchronize  , time to set the tx_owner and peer_tx_owner */
+    current_device->tx_owner      = (uint32_t*)((unsigned long)current_device->tx_tu_ring + sizeof(bcm_pcied_tu) * current_device->txq_length);
+    current_device->peer_tx_owner = (uint32_t*)((unsigned long)current_device->rx_tu_ring + sizeof(bcm_pcied_tu) * current_device->rxq_length);
+
+    /* preallocate rx net buffers */
+    for (i = 0; i < current_device->rxq_length; i++)
+    {
+        current_device->rx_nbuff_save[i] = bcmos_buf_alloc(current_device->max_mtu);
+        if (!current_device->rx_nbuff_save[i])
+            return free_buffers(device, "Failed to allocate buffer for RX\n");
+    }
+    /**********************************************
+    OK , now we are ready to initialize tu_rings
+    NOTE: all stuff related to create rings (last_next_indicator,next_pd_address_lowr/high already
+    done by bcmtr_create_tu_rings
+    ***********************************************/
+
+    /*Fill TX ring, fill only fields which I "know",
+     all peer related pointers will be updated by peer */
+    for (i = 0, tu_ptr = current_device->tx_tu_ring; i < current_device->txq_length; i++, tu_ptr++)
+    {
+        /* fill the remote_to_local_pd - only last indicator */
+        if (i == current_device->max_tx_index)
+            bcm_pci_write32(&(tu_ptr->remote_to_local_pd.last_next_indicator), BCM_PCIED_LAST_RECORD_MASK);
+        else
+            bcm_pci_write32(&(tu_ptr->remote_to_local_pd.last_next_indicator), (BCM_PCIED_LAST_RECORD_MASK | BCM_PCIED_NEXT_CONTINOUS_MASK));
+
+        /************************
+         fill data_pd
+         - leave length_and_isrenable in zero , will be set during tx
+         - leave source data buffer  pointers in zero, will be set in during tx
+         - dest. data buffer will be set by peer
+        *************************/
+
+        /************************
+         fill remote_to_local_pd
+             dest. data buffer will be set by peer
+        *************************/
+        bcmtr_set_source_buffer_address((uint32_t *)&tu_ptr->remote_to_local_pd, &current_device->shadow_rbd[i]);
+
+        /* set last indicator for the current tu */
+        bcm_pci_write32(&tu_ptr->data_pd.last_next_indicator, BCM_PCIED_NEXT_CONTINOUS_MASK);
+        bcm_pci_write32(&(tu_ptr->remote_to_local_pd.last_next_indicator), BCM_PCIED_NEXT_CONTINOUS_MASK);
+
+        /* set the length and interrupt indicator  */
+        bcm_pci_write32(&tu_ptr->remote_to_local_pd.length_and_isrenable, (BCM_PCIED_INTR_ENABLE_MASK | (sizeof(uint32_t) << BCM_PCIED_TRANSFER_SIZE_SHIFT)));
+    }
+
+    /*Fill RX ring, fill only fields which I "know",
+     all peer related pointers will be updated by peer */
+    for (i = 0, tu_ptr = current_device->rx_tu_ring; i < current_device->rxq_length; i++, tu_ptr++)
+    {
+        /* fill the remote_to_local_pd - only last indicator */
+        if (i == current_device->max_rx_index)
+            bcm_pci_write32(&(tu_ptr->remote_to_local_pd.last_next_indicator), BCM_PCIED_LAST_RECORD_MASK);
+        else
+            bcm_pci_write32(&(tu_ptr->remote_to_local_pd.last_next_indicator), (BCM_PCIED_LAST_RECORD_MASK | BCM_PCIED_NEXT_CONTINOUS_MASK));
+
+        /************************
+        fill data_pd
+        - leave length_and_isrenable in zero , will be set  by peer during tx
+        - leave source data buffer  pointers in zero, will be set by peer during tx
+        *************************/
+
+        /* take data pointer  from nbuf saved in rx_nbuff_save*/
+        pkt_ptr = bcmos_buf_data(current_device->rx_nbuff_save[i]);
+
+        /* invalidate cache for the data buffers */
+        bcmos_prepare_for_dma_read(pkt_ptr, current_device->max_mtu);
+
+        /* set destination data buffer */
+        bcmtr_set_dest_buffer_address((uint32_t *)&tu_ptr->data_pd, pkt_ptr);
+
+        /************************
+            fill remote_to_local_pd
+            - remote_to_local_pd.length_and_isrenable already set by peer
+            - last_next_indicator will be set by peer during tx
+        ************************/
+
+        /* set destination for the BD */
+        bcmtr_set_dest_buffer_address((uint32_t *)&tu_ptr->remote_to_local_pd, &current_device->local_bd[i]);
+
+        /* set next PD next pd indicator for both parts of the transfer unit */
+        bcm_pci_write32(&tu_ptr->data_pd.last_next_indicator,            BCM_PCIED_NEXT_CONTINOUS_MASK);
+        bcm_pci_write32(&tu_ptr->remote_to_local_pd.last_next_indicator, BCM_PCIED_NEXT_CONTINOUS_MASK);
+
+        /* set the length and interrupt indicator  */
+        bcm_pci_write32(&tu_ptr->remote_to_local_pd.length_and_isrenable, (BCM_PCIED_INTR_ENABLE_MASK | (sizeof(uint32_t) << BCM_PCIED_TRANSFER_SIZE_SHIFT)));
+
+    }
+#ifndef SIMULATION_BUILD
+    bcmtr_connect_isr(&current_device->isrdata);
+#endif
+
+    /* Clear and disable all interrupts at L2 */
+    bcm_pci_write32(PCI_REG_ADDRESS(DMA_INTR_MASK_SET), BCM_PCIE_ALL_DMA_INTERRUPTS_MASK);
+    bcm_pci_write32(PCI_REG_ADDRESS(DMA_INTR_CLEAR), BCM_PCIE_ALL_DMA_INTERRUPTS_MASK);
+
+    /* Enable L2 interrupts at L1 */
+    bcm_pci_write32(PCI_REG_ADDRESS(DMA_INTR1_MASK_CLEAR), PCIE_L2_INTR_MASK);
+
+    return BCMTR_SUCCESS;
+}
+
+bcmos_errno bcmtr_pcie_send(uint8_t device, uint8_t channel, bcmos_buf *net_buff)
+{
+    bcm_pcied_comm_data *current_device;
+    bcm_pcied_tu        *current_tu;
+    uint32_t            current_tx;
+    uint32_t            next_tx;
+    uint32_t            length;
+    uint8_t             *pkt_ptr;
+#ifdef CHECK_PARAM
+    BCMTR_PARANOID_CHECK();
+
+    if(!net_buff)
+    {
+        pcie_print("Network buffer is null\n");
+        return BCM_ERR_NULL;
+    }
+#endif
+
+    current_device = &bcmtr_pcie_data[device];
+
+    length = bcmos_buf_length(net_buff);
+    if((length > current_device->max_mtu) || (length == 0))
+    {
+        pcie_print("Packet length %d error (MTU=%d)\n", length, current_device->max_mtu);
+        return BCM_ERR_RANGE;
+    }
+
+    LOCK_TX();
+
+    current_tx = current_device->current_tx;
+
+    /* check owner in tx_owner list*/
+    if(bcm_pci_read32(&current_device->tx_owner[current_tx]) != LOCAL_OWNER)
+    {
+        UNLOCK_TX();
+        bcmtr_pcie_data[device].tx_pcie_full_counter++;
+        return BCM_ERR_QUEUE_FULL;
+    }
+
+    /* Do not forget change owner */
+    bcm_pci_write32(&current_device->tx_owner[current_tx], REMOTE_OWNER);
+
+    /* Prepare shadow_rbd */
+    *(uint32_t*)(&current_device->shadow_rbd[current_tx])=
+        BCMOS_ENDIAN_CPU_TO_LITTLE_U32((uint32_t)(length | channel << BCM_PCIED_BD_CHANNEL_ID_SHIFT | LOCAL_OWNER << BCM_PCIED_BD_OWNERSHIP_SHIFT));
+
+    current_tu = &current_device->tx_tu_ring[current_tx];
+
+    /* take data buffer from nbuffer */
+    pkt_ptr = bcmos_buf_data(net_buff);
+
+    /* set data_pd destination data buffer*/
+    bcmtr_set_source_buffer_address((uint32_t *)&current_tu->data_pd, pkt_ptr);
+
+#ifndef HARDWARE_TEST1
+    /* flush the cashe for the data buffer */
+    bcmos_prepare_for_dma_write(pkt_ptr, length);
+#endif
+
+    /* set data_pd length_and_isrenable (no need enable interrupt for data_pd */
+    bcm_pci_write32(&current_tu->data_pd.length_and_isrenable, length << BCM_PCIED_TRANSFER_SIZE_SHIFT);
+
+    /* set 'last_indicator' bit into current TU, takes care of wrapping */
+    if(current_tx == current_device->max_tx_index)
+        bcm_pci_write32(&current_tu->remote_to_local_pd.last_next_indicator, BCM_PCIED_LAST_RECORD_MASK);
+    else
+        bcm_pci_write32(&current_tu->remote_to_local_pd.last_next_indicator, BCM_PCIED_LAST_RECORD_MASK | BCM_PCIED_NEXT_CONTINOUS_MASK);
+
+    bcmos_barrier();
+
+    /* clear 'last_indicator' bit into previous_TU, takes care of wrapping */
+    if (current_device->prev_tx != current_device->max_tx_index)
+        bcm_pci_write32(&(current_device->tx_tu_ring[current_device->prev_tx].remote_to_local_pd.last_next_indicator), BCM_PCIED_NEXT_CONTINOUS_MASK);
+    else
+        bcm_pci_write32(&(current_device->tx_tu_ring[current_device->prev_tx].remote_to_local_pd.last_next_indicator), 0);
+
+    bcmos_barrier();
+
+    /* set WAKE bit in DMA registers */
+    bcm_pci_write32(PCI_REG_ADDRESS(WAKEUP_DMA), DMA_TX_WAKE_CTRL_WAKE_MASK);
+
+    INCREMENT_TRANSMITED(device);
+
+    next_tx = current_tx + 1;
+    if (next_tx > current_device->max_tx_index)
+        next_tx = 0;
+
+#ifndef HARDWARE_TEST1
+    /* release previous network buffer */
+    if (current_device->tx_nbuff_save[current_tx])
+    {
+        tx_done_handler(device, current_device->tx_nbuff_save[current_tx]);
+        current_device->conf_tx = next_tx;
+    }
+
+    /* store network buffer pointer */
+    current_device->tx_nbuff_save[current_device->current_tx] = net_buff;
+#endif
+    /* move current_tx index */
+    current_device->prev_tx = (int32_t)current_device->current_tx;
+    current_device->current_tx = next_tx;
+
+    UNLOCK_TX();
+    return BCMTR_SUCCESS;
+}
+
+/** Reclaim buffers that have already been transmitted
+ * \param[in]   device    Maple device index
+ * \returns: number of reclaimed TX buffers >= 0 or bcmos_errno error code <0
+ */
+int bcmtr_pcie_tx_collect(uint8_t device)
+{
+    bcm_pcied_comm_data *current_device;
+    uint32_t            conf_tx;
+    int n = 0;
+
+#ifdef CHECK_PARAM
+    BCMTR_PARANOID_CHECK_TYPE(int);
+#endif
+
+    current_device = &bcmtr_pcie_data[device];
+
+    LOCK_TX();
+
+    conf_tx = current_device->conf_tx;
+    while (bcm_pci_read32(&current_device->tx_owner[conf_tx]) == LOCAL_OWNER &&
+           current_device->tx_nbuff_save[conf_tx])
+    {
+        ++n;
+
+        /* release previous network buffer */
+        tx_done_handler(device, current_device->tx_nbuff_save[conf_tx]);
+        current_device->tx_nbuff_save[conf_tx] = NULL;
+
+        conf_tx++;
+        if (conf_tx > current_device->max_tx_index)
+            conf_tx = 0;
+    }
+    current_device->conf_tx = conf_tx;
+
+    UNLOCK_TX();
+
+    return n;
+}
+
+/*
+    Receive a data packet
+    returns channel and pointer to network buffer containing the data
+*/
+bcmos_errno bcmtr_pcie_receive(uint8_t device, uint8_t *channel, bcmos_buf **buf)
+{
+    bcm_pcied_comm_data *current_device;
+    bcm_pcied_tu        *current_tu;
+    uint32_t            bd_info;
+    uint32_t            length;
+    uint32_t            current_rx;
+
+#ifndef HARDWARE_TEST1
+    bcmos_buf           *net_ptr = NULL;
+    uint8_t             *pkt_ptr = NULL;
+#endif
+
+#ifdef CHECK_PARAM
+    BCMTR_PARANOID_CHECK_EXT();
+    if (!channel || !buf)
+        return BCM_ERR_NULL;
+#endif
+    *buf = NULL;
+
+    current_device = &bcmtr_pcie_data[device];
+
+    current_rx = current_device->current_rx;
+    current_tu = &current_device->rx_tu_ring[current_rx];
+
+    /* Read local_bd to local variable */
+    bd_info = BCMOS_ENDIAN_LITTLE_TO_CPU_U32(*(uint32_t*)(&current_device->local_bd[current_rx]));
+
+    /* check owner in local_bd, it is updated by the peer */
+    if ((bd_info & BCM_PCIED_BD_OWNERSHIP_MASK) >> BCM_PCIED_BD_OWNERSHIP_SHIFT != LOCAL_OWNER)
+    {
+        bcmtr_pcie_data[device].rx_pcie_empty_counter++;
+        return BCM_ERR_QUEUE_EMPTY;
+    }
+
+    /* change the owner in local_bd to the remote side */
+    *(uint32_t*)(&current_device->local_bd[current_rx])=
+        BCMOS_ENDIAN_CPU_TO_LITTLE_U32((uint32_t)((REMOTE_OWNER << BCM_PCIED_BD_OWNERSHIP_SHIFT) | bd_info));
+
+    /* take the  packet length from local_bd */
+    length = bd_info & BCM_PCIED_BD_PKT_LENGTH_MASK;
+
+    if ((length == 0) || (length > current_device->max_mtu))
+    {
+        pcie_print("Packet length error : %d\n", length);
+
+        /* update remote side */
+        bcm_pci_write32(&current_device->peer_tx_owner[current_rx], LOCAL_OWNER);
+
+        /* move current rx */
+        NEXT_INDEX(current_device->max_rx_index, current_device->current_rx);
+
+        return BCM_ERR_MSG_ERROR;
+    }
+
+    /* update packet channel id */
+    *channel = (bd_info & BCM_PCIED_BD_CHANNEL_ID_MASK) >> BCM_PCIED_BD_CHANNEL_ID_SHIFT;
+
+#ifndef HARDWARE_TEST1
+    /* allocate new buffer to receive packet */
+    net_ptr = bcmos_buf_alloc(current_device->max_mtu);
+
+    /* If not successes do clean-up */
+    if (!net_ptr)
+    {
+        /* update remote side */
+        bcm_pci_write32(&current_device->peer_tx_owner[current_rx], LOCAL_OWNER);
+
+        /* move current rx */
+        NEXT_INDEX(current_device->max_rx_index, current_device->current_rx);
+
+        return BCM_ERR_NOMEM;
+    }
+#endif
+    /* take the data pointer */
+    *buf = current_device->rx_nbuff_save[current_rx];
+
+    /* invalidate received network buffer for cache */
+    bcmos_prepare_for_dma_read(bcmos_buf_data(*buf), length);
+
+    /* fill network buffer */
+    bcmos_buf_length_set(*buf, length);
+
+    /* update statistics */
+    INCREMENT_RECEIVED(device);
+
+#ifndef HARDWARE_TEST1
+    pkt_ptr = bcmos_buf_data(net_ptr);
+
+    /* invalidate network buffer for cache */
+    bcmos_prepare_for_dma_read(pkt_ptr, current_device->max_mtu);
+
+    /* update rx network buffer with the new packet */
+    current_device->rx_nbuff_save[current_rx] = net_ptr;
+
+    /* set data_pd destination data buffer*/
+    bcmtr_set_dest_buffer_address((uint32_t *)&current_tu->data_pd, pkt_ptr);
+#endif
+    /* update remote side */
+    bcm_pci_write32(&current_device->peer_tx_owner[current_rx], LOCAL_OWNER);
+
+    /* move current rx */
+    NEXT_INDEX(current_device->max_rx_index, current_device->current_rx);
+
+    return BCMTR_SUCCESS;
+}
+
+/* enable level 2 RX interrupts */
+bcmos_errno bcmtr_pcie_rxint_enable(uint8_t device)
+{
+#ifdef CHECK_PARAM
+    BCMTR_PARANOID_CHECK_EXT();
+#endif
+    bcm_pci_write32(PCI_REG_ADDRESS(DMA_INTR_MASK_CLEAR), DMA_RX_ERROR_MASK | DMA_RX_DONE_MASK);
+
+    return BCMTR_SUCCESS;
+}
+
+/* disable level 2 RX interrupts */
+bcmos_errno bcmtr_pcie_rxint_disable(uint8_t device)
+{
+#ifdef CHECK_PARAM
+    BCMTR_PARANOID_CHECK_EXT();
+#endif
+    bcm_pci_write32(PCI_REG_ADDRESS(DMA_INTR_MASK_SET), DMA_RX_ERROR_MASK | DMA_RX_DONE_MASK);
+
+    return BCMTR_SUCCESS;
+}
+
+bcmos_errno bcmtr_pcie_rxint_clear(uint8_t device)
+{
+#ifdef CHECK_PARAM
+    BCMTR_PARANOID_CHECK_EXT();
+#endif
+    bcm_pci_write32(PCI_REG_ADDRESS(DMA_INTR_CLEAR), DMA_RX_ERROR_MASK | DMA_RX_DONE_MASK);
+
+    return BCMTR_SUCCESS;
+}
+
+/* Enable Level 2 "TX handled" interrupt */
+bcmos_errno bcmtr_pcie_txint_enable(uint8_t device)
+{
+#ifdef CHECK_PARAM
+    BCMTR_PARANOID_CHECK_EXT();
+#endif
+    bcm_pci_write32(PCI_REG_ADDRESS(DMA_INTR_MASK_CLEAR), DMA_TX_ERROR_MASK | DMA_TX_DONE_MASK);
+
+    return BCMTR_SUCCESS;
+}
+
+/* Disable level 2 "TX handled" interrupt */
+bcmos_errno bcmtr_pcie_txint_disable(uint8_t device)
+{
+#ifdef CHECK_PARAM
+    BCMTR_PARANOID_CHECK_EXT();
+#endif
+    bcm_pci_write32(PCI_REG_ADDRESS(DMA_INTR_MASK_SET), DMA_TX_ERROR_MASK | DMA_TX_DONE_MASK);
+
+    return BCMTR_SUCCESS;
+}
+
+/* Clear level 2 "TX handled" interrupt */
+bcmos_errno bcmtr_pcie_txint_clear(uint8_t device)
+{
+#ifdef CHECK_PARAM
+    BCMTR_PARANOID_CHECK_EXT();
+#endif
+    bcm_pci_write32(PCI_REG_ADDRESS(DMA_INTR_CLEAR), DMA_TX_ERROR_MASK | DMA_TX_DONE_MASK);
+
+    return BCMTR_SUCCESS;
+}
+
+bcmos_errno bcmtr_pcie_disconnect(uint8_t device)
+{
+    BCMTR_PARANOID_CHECK_EXT();
+
+    stop_dma(device);
+
+    /* disable interrupts */
+    bcmtr_pcie_rxint_disable(device);
+    bcmtr_pcie_txint_disable(device);
+
+    /* clear DMA interrupts */
+    bcmtr_pcie_rxint_clear(device);
+    bcmtr_pcie_txint_clear(device);
+
+    /* Disable in L1 controller */
+    bcm_pci_write32(PCI_REG_ADDRESS(DMA_INTR1_MASK_SET), PCIE_L2_INTR_MASK);
+
+    /* free irq - on host (if it is shared) must not free it */
+    bcmtr_pcie_free_irq(bcmtr_pcie_data[device].isrdata.rx_irq, &bcmtr_pcie_data[device].isrdata);
+
+    free_buffers(device, "PCIE disconnected\n");
+
+    return BCMTR_SUCCESS;
+}
+
+bcmos_errno bcmtr_pcie_rx_irq_cblk_register(f_bcmtr_int rx_isr_clbk)
+{
+    bcmtr_pcie_rx_irq_handler = rx_isr_clbk;
+
+    return BCMTR_SUCCESS;
+}
+
+bcmos_errno bcmtr_pcie_rx_irq_cblk_unregister(void)
+{
+    bcmtr_pcie_rx_irq_handler = NULL;
+
+    return BCMTR_SUCCESS;
+}
+
+bcmos_errno bcmtr_pcie_tx_irq_cblk_register(f_bcmtr_int rx_isr_clbk)
+{
+    bcmtr_pcie_tx_irq_handler = rx_isr_clbk;
+
+    return BCMTR_SUCCESS;
+}
+
+bcmos_errno bcmtr_pcie_tx_irq_cblk_unregister(void)
+{
+    bcmtr_pcie_tx_irq_handler = NULL;
+
+    return BCMTR_SUCCESS;
+}
+
+bcmos_errno bcmtr_pcie_tx_done_cblk_register(f_bcmtr_done tx_done_cb)
+{
+    tx_done_handler = tx_done_cb;
+
+    return BCMTR_SUCCESS;
+}
+
+bcmos_errno bcmtr_pcie_tx_done_cblk_unregister(void)
+{
+    tx_done_handler = default_tx_done_callback;
+
+    return BCMTR_SUCCESS;
+}
+
+void bcmtr_pcie_exit(void)
+{
+    uint32_t i;
+
+    if (bcmtr_pcie_data)
+    {
+        for (i = 0; i < bcmtr_max_devices_number; i ++)
+        {
+            bcmtr_pcie_disconnect(i);
+        }
+        bcmos_free(bcmtr_pcie_data);
+    }
+    bcmtr_pcie_data = NULL;
+}
+
+bcmos_errno bcmtr_pcie_get_statistics(uint8_t device, uint32_t clear, bcm_pcied_stat *stat)
+{
+    bcm_pcied_comm_data *current_device = &bcmtr_pcie_data[device];
+
+    BCMTR_PARANOID_CHECK();
+
+   if (!stat)
+       return BCM_ERR_NULL;
+
+    stat->rx_counter    = current_device->rx_counter;
+    stat->tx_counter    = current_device->tx_counter;
+    stat->rx_done_isr_counter   = current_device->isrdata.rx_done_num;
+    stat->rx_err_isr_counter   = current_device->isrdata.rx_err_num;
+    stat->tx_done_isr_counter   = current_device->isrdata.tx_done_num;
+    stat->tx_err_isr_counter   = current_device->isrdata.tx_err_num;
+    stat->rx_pcie_empty_counter  = current_device->rx_pcie_empty_counter;
+    stat->tx_pcie_full_counter  = current_device->tx_pcie_full_counter;
+    if (clear)
+    {
+        current_device->rx_counter       = 0;
+        current_device->tx_counter       = 0;
+        current_device->isrdata.rx_done_num = 0;
+        current_device->isrdata.rx_err_num  = 0;
+        current_device->isrdata.tx_done_num = 0;
+        current_device->isrdata.tx_err_num  = 0;
+        current_device->rx_pcie_empty_counter = 0;
+        current_device->tx_pcie_full_counter = 0;
+    }
+
+    return BCMTR_SUCCESS;
+}
+
+/*=============================================*/
+
+/* used by dump procedures - may write to std output or user buffer */
+#define pcie_bprint(buffer, fmt, args...)  \
+    {\
+      if (!buffer)\
+        pcie_print(fmt, ##args);\
+      else\
+        sprintf(buffer, fmt, ##args);\
+    }
+
+static inline void dump_bd(char *output, char *title, uint32_t bd)
+{
+    uint32_t owner, chn, length;
+
+    owner = (bd & BCM_PCIED_BD_OWNERSHIP_MASK) >> BCM_PCIED_BD_OWNERSHIP_SHIFT;
+    chn = (bd & BCM_PCIED_BD_CHANNEL_ID_MASK) >> BCM_PCIED_BD_CHANNEL_ID_SHIFT;
+    length = bd & BCM_PCIED_BD_PKT_LENGTH_MASK;
+
+    pcie_bprint(output, "\t%s: (0x%08x) owner = %s channel = 0x%x(%d) length = 0x%x(%d)\n",
+        title, (unsigned int)bd, owner == 0 ? "local" : "peer", (unsigned int)chn, chn, (unsigned int)length, length);
+}
+
+static inline void dump_owner(char *output, char *title, uint32_t *current_entry)
+{
+    uint32_t owner, entry;
+
+    entry = bcm_pci_read32(current_entry);
+    owner = (entry & BCM_PCIED_BD_OWNERSHIP_MASK) >> BCM_PCIED_BD_OWNERSHIP_SHIFT;
+    pcie_bprint(output, "\t%s: owner = %s\n", title, owner == 0 ? "local" : "peer");
+}
+
+static inline void dump_pd(char *output, bcm_pcied_pd *current_pd)
+{
+    uint32_t ddrl,ddrh,pktl,pkth,len,last,nextl,nexth;
+
+    ddrl  = bcm_pci_read32((uint32_t *)&current_pd->ddr_buff_address_low);
+    pktl  = bcm_pci_read32((uint32_t *)&current_pd->pcie_pkt_address_low);
+    pkth  = bcm_pci_read32((uint32_t *)&current_pd->pcie_pkt_address_high);
+    len   = bcm_pci_read32((uint32_t *)&current_pd->length_and_isrenable);
+    last  = bcm_pci_read32((uint32_t *)&current_pd->last_next_indicator);
+    nextl = bcm_pci_read32((uint32_t *)&current_pd->next_pd_address_low);
+    nexth = bcm_pci_read32((uint32_t *)&current_pd->next_pd_address_high);
+    ddrh  = bcm_pci_read32((uint32_t *)&current_pd->ddr_buff_address_high);
+
+    pcie_bprint(output,
+                "\t\t%-20s = 0x%08x\n"
+                "\t\t%-20s = 0x%08x\n"
+                "\t\t%-20s = 0x%08x\n"
+                "\t\t%-20s = 0x%08x\n"
+                "\t\t%-20s = 0x%08x\n"
+                "\t\t%-20s = 0x%08x\n"
+                "\t\t%-20s = 0x%08x\n"
+                "\t\t%-20s = 0x%08x\n",
+                "ddr_low", ddrl,
+                "pkt_low", pktl,
+                "pkt_high", pkth,
+                "length_and_isrenable", len,
+                "last_next_indicator", last,
+                "next_low", nextl,
+                "next_high", nexth,
+                "ddr_high", ddrh);
+}
+
+
+static int32_t dump_one_tx(char *output, uint8_t device, uint32_t current_index)
+{
+    bcm_pcied_tu        *current_tu;
+    bcm_pcied_comm_data *current_device;
+    char                *buffer = output;
+
+    current_device = &bcmtr_pcie_data[device];
+    current_tu = &current_device->tx_tu_ring[current_index];
+    dump_bd(buffer, "SBD", BCMOS_ENDIAN_LITTLE_TO_CPU_U32(*(uint32_t*)&current_device->shadow_rbd[current_index]));
+    if (buffer)
+        buffer += strlen(buffer);
+
+    dump_owner(buffer, "tx_owner", &current_device->tx_owner[current_index]);
+    if (buffer)
+        buffer += strlen(buffer);
+
+    pcie_bprint(buffer, "\tPD data = 0x%lx\n", (unsigned long)&current_tu->data_pd);
+    if (buffer)
+        buffer += strlen(buffer);
+
+    dump_pd(buffer, &current_tu->data_pd);
+    if (buffer)
+        buffer += strlen(buffer);
+
+    pcie_bprint(buffer, "\tPD shadow_rbd = 0x%lx\n", (unsigned long)&current_tu->remote_to_local_pd);
+    if (buffer)
+        buffer += strlen(buffer);
+
+    dump_pd(buffer, &current_tu->remote_to_local_pd);
+    if (buffer)
+        buffer += strlen(buffer);
+
+    pcie_bprint(buffer, "\tTX netbuff = 0x%lx\n",(unsigned long)current_device->tx_nbuff_save[current_index]);
+
+    if (output)
+        return strlen(output);
+
+    return 0;
+}
+
+static int32_t dump_one_rx(char *output, uint8_t device, uint32_t current_index)
+{
+    bcm_pcied_tu        *current_tu;
+    bcm_pcied_comm_data *current_device;
+    char                *buffer = output;
+
+    current_device = &bcmtr_pcie_data[device];
+    current_tu = &current_device->rx_tu_ring[current_index];
+
+    dump_bd(buffer, "BD", BCMOS_ENDIAN_LITTLE_TO_CPU_U32(*(uint32_t*)&current_device->local_bd[current_index]));
+    if (buffer)
+        buffer += strlen(buffer);
+
+    dump_owner(buffer, "peer_tx_owner", &current_device->peer_tx_owner[current_index]);
+    if (buffer)
+        buffer += strlen(buffer);
+
+    pcie_bprint(buffer, "\tPD data = 0x%lx\n", (unsigned long)&current_tu->data_pd);
+    if (buffer)
+        buffer += strlen(buffer);
+
+    dump_pd(buffer, &current_tu->data_pd);
+    if (buffer)
+        buffer += strlen(buffer);
+
+    pcie_bprint(buffer, "\tPD shadow_rbd = 0x%lx\n", (unsigned long)&current_tu->remote_to_local_pd);
+    if (buffer)
+        buffer += strlen(buffer);
+
+    dump_pd(buffer, &current_tu->remote_to_local_pd);
+    if (buffer)
+        buffer += strlen(buffer);
+
+    pcie_bprint(buffer, "\tRX netbuff = 0x%lx\n",(unsigned long)current_device->rx_nbuff_save[current_index]);
+
+    if (output)
+        return strlen(output);
+    return 0;
+}
+
+bcmos_errno bcmtr_pcie_tx_dump(char *output, uint8_t device, int32_t start, int32_t number_of_entries)
+{
+    int32_t i;
+    int32_t len = 0;
+    char *buffer = output;
+    int32_t from = start;
+    int32_t to;
+
+    pcie_bprint(buffer, "Dump Tx ring\n");
+    if (!bcmtr_pcie_data)
+    {
+        pcie_print("Driver is not initialized\n");
+        return BCM_ERR_NORES;
+    }
+
+    if (device >= bcmtr_max_devices_number)
+    {
+        pcie_print("Device parameter is greater than maximum devices(%d)\n", bcmtr_max_devices_number);
+        return BCM_ERR_RANGE;
+    }
+
+    if (device != bcmtr_pcie_data[device].isrdata.device)
+    {
+        pcie_print("*** Data Corrupted ***\n");
+        return BCM_ERR_RANGE;
+    }
+
+    if (start == -1) /* from current, number of entries */
+        from = bcmtr_pcie_data[device].current_tx;
+
+    to = from + number_of_entries;
+
+    if (to == from)
+        to++;
+
+    if (to > bcmtr_pcie_data[device].txq_length)
+        to = bcmtr_pcie_data[device].txq_length;
+
+    if (buffer)
+        len = strlen(buffer);
+
+    for (i = from; i < to; i++)
+    {
+        if (buffer)
+            buffer = output + len; /* move buffer to the next space */
+
+        if (i == bcmtr_pcie_data[device].current_tx)
+        {
+            pcie_bprint(buffer, "Current = %d\n", i);
+        }
+        else
+        {
+            pcie_bprint(buffer, "Index = %d\n", i);
+        }
+
+        if (buffer)
+        {
+            /* add to len the next line - buffer contains only the last line */
+            len += strlen(buffer);
+            buffer = output + len;
+        }
+        /* returns the length of the last lines */
+        len += dump_one_tx(buffer, device, i);
+    }
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcmtr_pcie_rx_dump(char *output, uint8_t device, int32_t start, int32_t number_of_entries)
+{
+    int32_t i;
+    int32_t len = 0;
+    char *buffer = output;
+    int32_t from = start;
+    int32_t to;
+
+    pcie_bprint(buffer, "Dump Rx ring\n");
+    if (!bcmtr_pcie_data)
+    {
+        pcie_print("Driver is not initialized\n");
+        return BCM_ERR_NORES;
+    }
+
+    if (device >= bcmtr_max_devices_number)
+    {
+        pcie_print("Device parameter is greater than maximum devices(%d)\n", bcmtr_max_devices_number);
+        return BCM_ERR_RANGE;
+    }
+
+    if (device != bcmtr_pcie_data[device].isrdata.device)
+    {
+        pcie_print("*** Data Corrupted ***\n");
+        return BCM_ERR_RANGE;
+    }
+
+    if (start == -1) /* from current number of entries */
+        from = bcmtr_pcie_data[device].current_rx;
+    to = from + number_of_entries;
+    if (to == from)
+        to++;
+    if (to > bcmtr_pcie_data[device].rxq_length)
+        to = bcmtr_pcie_data[device].rxq_length;
+
+    if (buffer)
+        len = strlen(buffer);
+    for (i = from; i < to; i++)
+    {
+        if (buffer)
+            buffer = output + len;
+        if (i == bcmtr_pcie_data[device].current_rx)
+        {
+            pcie_bprint(buffer, "Current = %d\n", i);
+        }
+        else
+        {
+            pcie_bprint(buffer, "Index = %d\n", i);
+        }
+        if (buffer)
+        {
+            /* add to len the next line - buffer contains only the last line */
+            len += strlen(buffer);
+            buffer = output + len;
+        }
+        /* returns the length of the last lines */
+        len += dump_one_rx(buffer, device, i);
+    }
+
+    return BCM_ERR_OK;
+}
+
+#ifdef __KERNEL__
+EXPORT_SYMBOL(bcmtr_pcie_receive);
+EXPORT_SYMBOL(bcmtr_pcie_init);
+EXPORT_SYMBOL(bcmtr_pcie_exit);
+EXPORT_SYMBOL(bcmtr_pcie_pre_connect);
+EXPORT_SYMBOL(bcmtr_pcie_connect);
+EXPORT_SYMBOL(bcmtr_pcie_disconnect);
+EXPORT_SYMBOL(bcmtr_pcie_rx_irq_cblk_register);
+EXPORT_SYMBOL(bcmtr_pcie_rx_irq_cblk_unregister);
+EXPORT_SYMBOL(bcmtr_pcie_tx_irq_cblk_register);
+EXPORT_SYMBOL(bcmtr_pcie_tx_irq_cblk_unregister);
+EXPORT_SYMBOL(bcmtr_pcie_send);
+EXPORT_SYMBOL(bcmtr_pcie_tx_dump);
+EXPORT_SYMBOL(bcmtr_pcie_rx_dump);
+EXPORT_SYMBOL(bcmtr_pcie_rxint_enable);
+EXPORT_SYMBOL(bcmtr_pcie_rxint_disable);
+EXPORT_SYMBOL(bcmtr_pcie_rxint_clear);
+EXPORT_SYMBOL(bcmtr_pcie_rx_irq_handler);
+EXPORT_SYMBOL(bcmtr_pcie_tx_irq_handler);
+EXPORT_SYMBOL(bcmtr_pcie_get_statistics);
+#endif
+
diff --git a/bcm68620_release/release/host_driver/pcie/bcmtr_pcie.h b/bcm68620_release/release/host_driver/pcie/bcmtr_pcie.h
new file mode 100644
index 0000000..11e27b8
--- /dev/null
+++ b/bcm68620_release/release/host_driver/pcie/bcmtr_pcie.h
@@ -0,0 +1,249 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef BCMTR_PCIE_H_
+#define BCMTR_PCIE_H_
+
+#include "bcmos_system.h"
+
+#define DDR_PACKET_LOW_INDEX        0
+#define DDR_PACKET_HIGH_INDEX       7
+#define PCI_PACKET_LOW_INDEX        1
+#define PCI_PACKET_HIGH_INDEX       2
+
+typedef struct
+{
+    uint32_t    rx_counter;
+    uint32_t    tx_counter;
+    uint32_t    rx_done_isr_counter;
+    uint32_t    rx_err_isr_counter;
+    uint32_t    tx_done_isr_counter;
+    uint32_t    tx_err_isr_counter;
+    uint32_t    rx_pcie_empty_counter;
+    uint32_t    tx_pcie_full_counter;
+} bcm_pcied_stat;
+
+typedef struct
+{
+    unsigned long       pcie_reg_base;
+    uint32_t            rx_irq;
+    uint32_t            device;
+    uint32_t            rx_done_num;
+    uint32_t            rx_err_num;
+    uint32_t            tx_done_num;
+    uint32_t            tx_err_num;
+} bcm_pcied_isr_data;
+
+/** Initialize PCIe low level transport module
+ * \returns: 0 in case of success or error code < 0
+ */
+#ifdef IN_BAND 
+    bcmos_errno bcmtr_pcie_init(uint8_t device, bcmos_ipv4_address ip_address, uint16_t udp_port);
+#else
+    bcmos_errno bcmtr_pcie_init(uint8_t max_devices);
+#endif
+
+/** Cleanup PCIe low level transport module
+ * \returns: 0 in case of success or error code < 0
+ */
+void bcmtr_pcie_exit(void);
+
+/** PCIe pre-connect configuration parameters */
+typedef struct
+{
+    uint32_t txq_size;  /**< Transmit queue size */
+    uint32_t rxq_size;  /**< Receive queue size */
+    uint32_t max_mtu;   /**< Max MTU size */
+    uint32_t rx_irq;    /**< Rx interrupt number */
+    unsigned long pcie_reg_base;   /**< Maple PCIe register block address in host addrss space */
+    unsigned long ddr_win_base;   /**< Maple DDR address in host addrss space */
+} bcmtr_pcie_pre_connect_cfg;
+
+/** PCIe pre-connect data - information returned by bcmtr_pcie_pre_connect().
+ * Device control driver should store data from this structure
+ * in the boot record in Maple SRAM
+ */
+typedef struct bcmtr_pcie_opaque_data bcmtr_pcie_opaque_data;
+
+/** Prepare to connect
+ *      On Maple returns into opaque_data pointers of the
+ *  	transmit and receive PacketDescriptors
+ *  	On Host opaque_data is NULL
+ * \param[in]      device            Maple device index
+ * \param[in]      cfg               Connection configuration
+ * \param[out]     opaque_data       Pointer to memory block
+ *  	 where pcie driver put opaque data to be conveyed to the
+ *  	 other side
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtr_pcie_pre_connect(uint8_t device, const bcmtr_pcie_pre_connect_cfg *cfg,
+    bcmtr_pcie_opaque_data *data);
+
+/** Connect
+ *  	On Maple opaque_data is NULL
+ *  	On Host opaque_data contains the pointers to PDs in
+ *  	Maple
+ * \param[in]  device       Maple device index
+ * \param[in] opaque_data  Pointer to opaque data block
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtr_pcie_connect(uint8_t device, const bcmtr_pcie_opaque_data *data);
+
+/** Disconnect. All buffers are released
+ * \param[in]   device       Maple device index
+ * \param[in]   opaque_data  Pointer to opaque data block
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtr_pcie_disconnect(uint8_t device);
+
+/*
+ * Receive callback registration.
+ * Attention PCIe driver implementer!!
+ * Received packets must stay in the queue until receive callback is registered.
+ */
+
+/** PCIe interface interrupt receive callback */
+typedef void (*f_bcmtr_int)(uint8_t device);
+
+/** Register receive callback
+ * \param[in]   rx_isr    Interrupt Receive callback
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtr_pcie_rx_irq_cblk_register(f_bcmtr_int user_rx_isr_clbk);
+
+/** Unregister receive callback.
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtr_pcie_rx_irq_cblk_unregister(void);
+
+/** Register transmit completion interrupt callback
+ * \param[in]   tx_isr    Transfer completed interrupt callback
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtr_pcie_tx_irq_cblk_register(f_bcmtr_int user_tx_isr_clbk);
+
+/** Unregister transmit completed interrupt callback.
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtr_pcie_tx_irq_cblk_unregister(void);
+
+/** Tx done callback */
+typedef void (*f_bcmtr_done)(uint8_t device, bcmos_buf *buf);
+
+/** Register buffer transmit completion callback
+ * \param[in]   tx_done   Transfer completed callback
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtr_pcie_tx_done_cblk_register(f_bcmtr_done tx_done_cb);
+
+/** Unregister buffer transmit completion callback
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtr_pcie_tx_done_cblk_unregister(void);
+
+/** Send buffer to the peer
+ * \param[in]   device    Maple device index
+ * \param[in]   channel   Channel id (opaque to the bcmtr_pcie driver)
+ * \param[in]   buf       Buffer to be transferred
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtr_pcie_send(uint8_t device, uint8_t channel, bcmos_buf *buf);
+
+/** Reclaim buffers that have already been transmitted
+ * \param[in]   device    Maple device index
+ * \returns: number of reclaimed TX buffers >= 0 or bcmos_errno error code <0
+ */
+int bcmtr_pcie_tx_collect(uint8_t device);
+
+/** Fetch received buffer from h/w queue
+ * \param[in]   device          Maple device index
+ * \param[out]  channel         message channel from the BD
+ * \param[out]  buf             pointer to network buffer containing the received packet
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtr_pcie_receive(uint8_t device, uint8_t *channel, bcmos_buf **buf);
+
+/** Enable DMA_RX interrupt
+ * \param[in]   device  Maple device index
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtr_pcie_rxint_enable(uint8_t device);
+
+/** Disable DMA_RX interrupt
+ * \param[in]   device  Maple device index
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtr_pcie_rxint_disable(uint8_t device);
+
+/** Clear DMA_RX interrupt
+ * \param[in]   device  Maple device index
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtr_pcie_rxint_clear(uint8_t device);
+
+/** Enable "TX handled" interrupt
+ * \param[in]   device  Maple device index
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtr_pcie_txint_enable(uint8_t device);
+
+/** Disable "TX handled" interrupt
+ * \param[in]   device  Maple device index
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtr_pcie_txint_disable(uint8_t device);
+
+/** Clear "TX handled" interrupt
+ * \param[in]   device  Maple device index
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtr_pcie_txint_clear(uint8_t device);
+
+/** Returns statistics
+ * \param[in]   device  Maple device index
+ * \param[in]   clear   if set, clear statistics, otherwise
+ *       accumulate
+ */
+bcmos_errno bcmtr_pcie_get_statistics(uint8_t device, uint32_t clear, bcm_pcied_stat *stat);
+
+/** Dump data base
+ * \param[in]   output  NULL(will print to stdout) or pointer to
+ *       buffer
+ * \param[in]   device  Maple device index
+ * \param[in]   start   index of the start entry in ring, -1
+ *       means current
+ * \param[in]   number_of_entries  how many entries from the
+ *       start
+ * \returns: 0 if output is NULL or buffer length
+ */
+bcmos_errno bcmtr_pcie_tx_dump(char *output, uint8_t device, int32_t start, int32_t number_of_entries);
+bcmos_errno bcmtr_pcie_rx_dump(char *output, uint8_t device, int32_t start, int32_t number_of_entries);
+
+
+#endif /* BCMTR_PCIE_H_ */
diff --git a/bcm68620_release/release/host_driver/sw_error/bcmolt_sw_error.h b/bcm68620_release/release/host_driver/sw_error/bcmolt_sw_error.h
new file mode 100644
index 0000000..f5e5ebf
--- /dev/null
+++ b/bcm68620_release/release/host_driver/sw_error/bcmolt_sw_error.h
@@ -0,0 +1,57 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef _BCMOLT_SW_ERROR_H_
+#define _BCMOLT_SW_ERROR_H_
+
+#define BCMOLT_SW_ERROR_MAX_FILE_NAME_LEN 64
+#define BCMOLT_SW_ERROR_MAX_TASK_NAME_LEN 64
+
+typedef struct __PACKED_ATTR_START__
+{
+    uint64_t first_error_time;
+    uint64_t last_error_time;
+    uint32_t line_number;
+    uint32_t error_counter;
+    uint32_t instance;
+    char file_name[BCMOLT_SW_ERROR_MAX_FILE_NAME_LEN];
+    char task_name[BCMOLT_SW_ERROR_MAX_TASK_NAME_LEN];
+} __PACKED_ATTR_END__ bcmos_sw_error;
+
+typedef struct __PACKED_ATTR_START__
+{
+    uint32_t count;
+#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /**< Check whether C99 is supported */
+    bcmos_sw_error error[];
+#else
+    bcmos_sw_error error[1];
+#endif
+} __PACKED_ATTR_END__ bcmos_sw_error_table;
+
+#endif /* _BCMOLT_SW_ERROR_H_ */
diff --git a/bcm68620_release/release/host_driver/sw_version/bcmolt_host_sw_version.h b/bcm68620_release/release/host_driver/sw_version/bcmolt_host_sw_version.h
new file mode 100644
index 0000000..90752ff
--- /dev/null
+++ b/bcm68620_release/release/host_driver/sw_version/bcmolt_host_sw_version.h
@@ -0,0 +1,38 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef BCMOLT_HOST_SW_VERSION_H_
+#define BCMOLT_HOST_SW_VERSION_H_
+
+#define BCMOLT_HOST_MAJOR_VER    2
+#define BCMOLT_HOST_MINOR_VER    2
+#define BCMOLT_HOST_REVISION_VER 2
+
+
+#endif /* BCMOLT_HOST_SW_VERSION_H_ */
diff --git a/bcm68620_release/release/host_driver/transport/Makefile b/bcm68620_release/release/host_driver/transport/Makefile
new file mode 100644
index 0000000..3fd7dda
--- /dev/null
+++ b/bcm68620_release/release/host_driver/transport/Makefile
@@ -0,0 +1,47 @@
+# Transport
+#
+MOD_NAME = transport
+MOD_TYPE = lib
+MOD_DEPS = utils cli model common_api tr_plugin dev_log
+
+ifeq ("$(RELEASE_BUILD)", "y")
+    MOD_DEPS += api_cli
+    TR_PERF_TEST = n
+else
+    MOD_DEPS += api_cli_helpers
+endif
+
+ifeq ("$(SUBSYSTEM)", "host")
+    MOD_DEPS += device_selector
+endif
+
+ifeq ("$(OS_KERNEL)", "linux")
+   MOD_DEPS += dev_log_linux
+endif
+
+srcs = bcmtr_transport.c bcmtr_config.c bcmtr_debug.c
+
+ifeq ("$(ENABLE_CLI)", "y")
+	srcs += bcmtr_transport_cli.c bcmtr_debug_cli.c
+else
+    TR_PERF_TEST = n
+endif
+
+CONFIG_TRANSPORT_RAW ?= n
+CONFIG_TRANSPORT_UDP ?= y
+
+# Extra configuration
+ifeq ("$(CONFIG_TRANSPORT_RAW)", "y")
+	MOD_DEPS += tr_plugin_mux
+	CONFIG_TRANSPORT_UDP = n
+endif
+ifeq ("$(CONFIG_TRANSPORT_UDP)", "y")
+	MOD_DEPS += tr_plugin_udp
+endif
+
+TR_PERF_TEST ?= y
+ifeq ("$(TR_PERF_TEST)", "y")
+    EXTRA_DEFINES += -DBCMTR_PERFTEST
+    EXTRA_INCLUDES += -I$(SRC_DIR)/test
+    srcs += test/bcmtr_perftest.c
+endif
diff --git a/bcm68620_release/release/host_driver/transport/bcmtr_config.c b/bcm68620_release/release/host_driver/transport/bcmtr_config.c
new file mode 100644
index 0000000..4fc4749
--- /dev/null
+++ b/bcm68620_release/release/host_driver/transport/bcmtr_config.c
@@ -0,0 +1,82 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#include "bcmtr_internal.h"
+#include "bcmtr_interface.h"
+#include "bcmtr_plugin.h"
+
+
+#ifdef BCMTR_UDP_SUPPORT
+
+uint32_t bcmtr_host_ip = BCMTR_TR_UDP_HOST_IP;
+uint16_t bcmtr_host_udp_port = BCMTR_TR_UDP_HOST_PORT;
+uint32_t bcmtr_olt_ip[BCMTR_MAX_OLTS];
+uint16_t bcmtr_olt_udp_port[BCMTR_MAX_OLTS];
+
+#endif
+
+/* Fetch configuration
+ * set-up transport driver plugin
+ * Eventually this function can read from config file or device control driver.
+ * For now - hardcode
+ */
+bcmos_errno bcmtr_cfg_get(bcmolt_devid device, bcmtr_cfg *cfg, bcmtr_driver *driver)
+{
+    bcmos_errno rc = BCM_ERR_NOT_SUPPORTED;
+
+    cfg->max_retries = BCMTR_MAX_RETRIES;
+    cfg->msg_timeout = BCMTR_MSG_TIMEOUT;
+    cfg->max_fragments = BCMTR_MAX_FRAGMENTS;
+    cfg->max_requests = BCMTR_MAX_REQUESTS;
+    cfg->max_autos = BCMTR_MAX_AUTOS;
+    cfg->max_mtu = BCMTR_MAX_MTU_SIZE;
+    cfg->msg_wait_timeout = BCMTR_MSG_WAIT_MS;
+    cfg->msg_ready_timeout = BCMTR_MSG_READY_MS;
+    cfg->plugin_cfg.type = BCMTR_TR_TYPE;
+    cfg->rx_thread_priority = TASK_PRIORITY_TRANSPORT_RX;
+
+#ifdef BCMTR_UDP_SUPPORT
+#ifdef BCM_SUBSYSTEM_HOST
+    cfg->plugin_cfg.x.udp.my_ip = bcmtr_host_ip;
+    cfg->plugin_cfg.x.udp.remote_ip = bcmtr_olt_ip[device];
+    cfg->plugin_cfg.x.udp.my_port = bcmtr_host_udp_port + device;
+    cfg->plugin_cfg.x.udp.remote_port = bcmtr_olt_udp_port[device];
+#else
+    cfg->plugin_cfg.x.udp.my_ip = bcmtr_olt_ip[device];
+    cfg->plugin_cfg.x.udp.remote_ip = bcmtr_host_ip;
+    cfg->plugin_cfg.x.udp.my_port = bcmtr_olt_udp_port[device];
+    cfg->plugin_cfg.x.udp.remote_port = bcmtr_host_udp_port + device;
+#endif
+#endif
+
+    rc = bcmtr_plugin_init(&cfg->plugin_cfg, driver);
+
+    return rc;
+}
+
diff --git a/bcm68620_release/release/host_driver/transport/bcmtr_debug.c b/bcm68620_release/release/host_driver/transport/bcmtr_debug.c
new file mode 100644
index 0000000..889630c
--- /dev/null
+++ b/bcm68620_release/release/host_driver/transport/bcmtr_debug.c
@@ -0,0 +1,876 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#include <bcmos_system.h>
+#include <bcmtr_debug.h>
+#include <bcmcli_session.h>
+#include <bcm_api_cli_helpers.h>
+#include <bcmolt_math.h>
+
+#ifdef ENABLE_LOG
+#include <bcm_dev_log.h>
+#endif
+
+#ifdef ENABLE_CLI
+#include <bcmtr_debug_cli.h>
+#endif
+
+/* Messages are recorded in the following format:
+ * uint32_t - event type
+ * uint32_t - timestamp
+ * uint32_t - message data size
+ * <message data> - padded to the nearest 4 bytes
+ * uint32_t - total size - total capture entry size, including control info
+ */
+
+/* Overhead size: entry header + uint32_t suffix */
+#define BCMTR_CAPTURE_OVERHEAD_SIZE  (sizeof(bcmtr_capture_entry) + sizeof(uint32_t))
+
+#define BCMTR_CAPTURE_ENTRY_FIELDS  (sizeof(bcmtr_capture_entry) / sizeof(uint32_t))
+
+/* Maximum total number of characters for a message dump */
+#define BCMTR_MAX_MSG_DUMP_STR_SIZE 4096
+
+/* Capture control block */
+typedef struct
+{
+    bcmtr_capture_parm parm;            /* Capture configuration */
+    bcmos_bool active;
+
+    uint8_t *start;
+    uint8_t *end;
+    uint8_t *cur;
+    uint32_t size;                      /* Buffer size */
+    uint32_t used;                      /* Bytes used */
+    uint32_t wa;                        /* Number of times buffer wrapped around */
+    uint32_t events;                    /* Number of capture events */
+} bcmtr_capture_buf;
+
+static bcmtr_capture_buf capture_buf[BCMTR_MAX_OLTS];
+
+/* CLI session where to dump */
+static bcmcli_session *bcmtr_cld_session;
+
+#ifdef ENABLE_LOG
+/* Logger used for BCMTR_CLD_LOG */
+static dev_log_id bcmtr_cld_log_id;
+#endif
+
+/* Global variable: per msg_id CLD level */
+bcmtr_cld_type bcmtr_cld_active_level[BCMTR_MAX_OLTS][BCMOLT_GROUP_ID__NUM_OF];
+
+/* Create a dummy CLI session so we can print to a buffer internally before printing to the real CLI.
+ * This way, the output can't be interrupted by another print. */
+static char bcmtr_cld_scratch_buf[BCMTR_MAX_MSG_DUMP_STR_SIZE];
+static uint32_t bcmtr_cld_scratch_pos = 0;
+static bcmcli_session *bcmtr_cld_scratch_session;
+
+/*
+ * Internal functions
+ */
+
+/* CLI session print callback for the scratch buffer */
+static int bcmtr_log_cli_print(bcmcli_session *session, const char *buf, uint32_t size)
+{
+    size = MIN(size, BCMTR_MAX_MSG_DUMP_STR_SIZE - bcmtr_cld_scratch_pos);
+    if (size > 0)
+    {
+        memcpy(&bcmtr_cld_scratch_buf[bcmtr_cld_scratch_pos], buf, size);
+    }
+    bcmtr_cld_scratch_pos += size;
+    return size;
+}
+
+/* Get message event name */
+static inline const char *bcmtr_cld_event_name(bcmtr_cld_event_type ev)
+{
+    static const char *ev_name[] = {
+        [BCMTR_CLD_EV_SEND]     = "tx",
+        [BCMTR_CLD_EV_RESEND]   = "re-tx",
+        [BCMTR_CLD_EV_RECV]     = "rx",
+        [BCMTR_CLD_EV_RECV_DISCARD] = "rx-discard",
+        [BCMTR_CLD_EV_TIMEOUT] = "timeout"
+    };
+    return ev_name[ev];
+}
+
+/* Store data in capture buffer */
+static inline void _bcmtr_capture_store(bcmtr_capture_buf *tb, const void *data, uint32_t size)
+{
+    int32_t left = (int32_t)(tb->end - tb->cur);
+    if (left >= (int32_t)size)
+    {
+        memcpy(tb->cur, data, size);
+        tb->cur += size;
+    }
+    else
+    {
+        memcpy(tb->cur, data, left);
+        memcpy(tb->start, (const uint8_t *)data + left, size - left);
+        tb->cur = tb->start + size - left;
+        ++tb->wa;
+    }
+    tb->used += size;
+    if (tb->used > tb->size)
+        tb->used = tb->size;
+}
+
+
+/* Get capture entry size and start pointer given pointer right after the entry */
+static void _bcmtr_capture_get_prev(bcmtr_capture_buf *tb, uint8_t *ptr, uint32_t *prev_size, uint8_t **prev_ptr)
+{
+    uint32_t size;
+    uint8_t *prev;
+
+    if (ptr == tb->start)
+        ptr = tb->end;
+    size = *(((uint32_t *)(long)ptr) - 1);
+    BUG_ON(!size || size > 0xffff || (size & 0x3));
+    prev = ptr - size;
+    if (prev < tb->start)
+        prev = tb->end - (size - (ptr - tb->start));
+    *prev_size = size;
+    *prev_ptr = prev;
+}
+
+/* Get number of complete messages stored in capture buffer */
+static uint32_t _bcmtr_capture_nmsgs(bcmtr_capture_buf *tb)
+{
+    uint32_t n = 0;
+    uint32_t prev_length;
+    uint8_t *prev_start = tb->cur;
+
+    if (!tb->used)
+        return 0;
+
+    /* Unwind capture buffer backward */
+    while (n < tb->events)
+    {
+        uint8_t *prev = prev_start;
+        _bcmtr_capture_get_prev(tb, prev, &prev_length, &prev_start);
+        if (prev_start >= prev)
+            break;
+        ++n;
+    }
+
+    /* If buffer has wrapped around - continue unwinding */
+    if (tb->wa)
+    {
+        while (prev_start >= tb->cur)
+        {
+            _bcmtr_capture_get_prev(tb, prev_start, &prev_length, &prev_start);
+            ++n;
+        }
+    }
+
+    return n;
+}
+
+static inline void _bcmtr_capture_wrap(uint8_t **cur, bcmtr_capture_buf *tb)
+{
+    if (*cur > tb->end)
+    {
+        *cur = tb->start + (*cur - tb->end);
+    }
+}
+static void _bcmtr_capture_unwind(bcmtr_capture_buf *tb, uint8_t **start, uint32_t *count)
+{
+    uint32_t prev_length;
+    uint8_t *prev_start;
+    uint32_t n = 0;
+    uint8_t *cur_hdr = NULL;
+
+    prev_start = tb->cur;
+    while (n < tb->events)
+    {
+        uint8_t *prev = prev_start;
+        _bcmtr_capture_get_prev(tb, prev, &prev_length, &prev_start);
+        if (prev_start >= prev)
+            break;
+        ++n;
+        cur_hdr = prev_start;
+    }
+
+    /* If buffer has wrapped around - continue unwinding */
+    if (tb->wa)
+    {
+        while (prev_start >= tb->cur)
+        {
+            cur_hdr = prev_start;
+            _bcmtr_capture_get_prev(tb, prev_start, &prev_length, &prev_start);
+            ++n;
+        }
+    }
+
+    *start = cur_hdr;
+    *count = n;
+}
+
+static inline uint32_t _bcmtr_capture_msg_size_get(uint8_t *buf)
+{
+    /* WARNING: do NOT access any members of bcmtr_capture_entry other than msg_size (the first member) as they may
+       have been wrapped to the beginning of the buffer. */
+    return ((bcmtr_capture_entry *)(long)buf)->msg_size;
+}
+
+static void _bcmtr_capture_copy(
+    bcmtr_capture_buf *tb,
+    uint8_t **dst,
+    uint8_t *src,
+    uint32_t to_copy,
+    uint32_t *remaining)
+{
+    uint32_t left;
+
+    left = tb->end - src;
+    if (left < to_copy)
+    {
+        memcpy(*dst, src, left);
+        memcpy((*dst) + left, tb->start, to_copy - left);
+    }
+    else
+    {
+        memcpy(*dst, src, to_copy);
+    }
+    (*dst) += to_copy;
+    (*remaining) -= to_copy;
+}
+
+static void _bcmtr_capture_copy_bounded(
+    bcmtr_capture_buf *tb,
+    uint8_t **dst,
+    uint8_t *src,
+    uint32_t to_copy,
+    uint32_t *remaining,
+    uint32_t bound)
+{
+    if (bound < to_copy)
+    {
+        src += to_copy - bound;
+        to_copy = bound;
+    }
+    if ((*remaining) < to_copy)
+    {
+        to_copy = *remaining;
+    }
+    _bcmtr_capture_copy(tb, dst, src, to_copy, remaining);
+}
+
+/* Set capture, log, debug for selected messages */
+bcmos_errno bcmtr_cld_level_set(bcmolt_devid device, const bcmtr_cld_filter *filter, bcmtr_cld_type cld_level)
+{
+    bcmolt_group_id msg_id;
+    bcmos_errno rc;
+
+    if ((unsigned)device >= BCMTR_MAX_OLTS || !filter)
+    {
+        return BCM_ERR_PARM;
+    }
+
+    /* Handle wildcard object */
+    if (filter->object == BCMOLT_OBJECT_ANY)
+    {
+        bcmtr_cld_filter f = *filter;
+
+        for (f.object = 0; f.object <= BCMOLT_OBJ_ID__NUM_OF; f.object++)
+        {
+            bcmtr_cld_level_set(device, &f, cld_level);
+        }
+        return BCM_ERR_OK;
+    }
+
+    /* Handle wildcard group */
+    if (filter->group == BCMOLT_MGT_GROUP_ANY)
+    {
+        bcmtr_cld_filter f = *filter;
+
+        f.subgroup = BCMOLT_SUBGROUP_ANY;
+        for (f.group = BCMOLT_MGT_GROUP_CFG; f.group <= BCMOLT_MGT_GROUP__NUM_OF; f.group++)
+        {
+            bcmtr_cld_level_set(device, &f, cld_level);
+        }
+        return BCM_ERR_OK;
+    }
+
+    /* Handle wildcard subgroup */
+    if (filter->group == BCMOLT_MGT_GROUP_ANY || filter->subgroup == BCMOLT_SUBGROUP_ANY)
+    {
+        bcmtr_cld_filter f = *filter;
+
+        f.subgroup = 0;
+        for (f.subgroup = 0;
+            bcmolt_group_id_combine(f.object, f.group, f.subgroup, &msg_id) == BCM_ERR_OK;
+            f.subgroup++)
+        {
+            bcmtr_cld_level_set(device, &f, cld_level);
+        }
+        return BCM_ERR_OK;
+    }
+
+    /* If we are here - it is not a wildcard */
+    rc = bcmolt_group_id_combine(filter->object, filter->group, filter->subgroup, &msg_id);
+    if (rc)
+        return rc;
+
+    BUG_ON((unsigned)msg_id >= BCMOLT_GROUP_ID__NUM_OF);
+    bcmtr_cld_active_level[device][msg_id] = cld_level;
+    return BCM_ERR_OK;
+}
+
+/* Get capture, log, debug for selected message */
+bcmos_errno bcmtr_cld_level_get(bcmolt_devid device, const bcmtr_cld_filter *filter, bcmtr_cld_type *cld_level)
+{
+    bcmolt_group_id msg_id;
+    bcmos_errno rc;
+    if ((unsigned)device >= BCMTR_MAX_OLTS || !filter)
+    {
+        return BCM_ERR_PARM;
+    }
+    rc = bcmolt_group_id_combine(filter->object, filter->group, filter->subgroup, &msg_id);
+    if (rc)
+        return rc;
+    BUG_ON((unsigned)msg_id >= BCMOLT_GROUP_ID__NUM_OF);
+    *cld_level = bcmtr_cld_active_level[device][msg_id];
+    return BCM_ERR_OK;
+}
+
+/** Initialize capture */
+bcmos_errno bcmtr_capture_init(bcmolt_devid olt, const bcmtr_capture_parm *parm)
+{
+    bcmtr_capture_buf *tb;
+
+    if (olt >= BCMTR_MAX_OLTS || !parm)
+        return BCM_ERR_PARM;
+    if (capture_buf[olt].start)
+    {
+        bcmcli_session_print(bcmtr_cld_session, "TRACE/%d: already initialized\n", olt);
+        return BCM_ERR_PARM;
+    }
+
+    if (parm->size < BCMTR_CAPTURE_MIN_BUF_SIZE)
+    {
+        bcmcli_session_print(bcmtr_cld_session, "TRACE/%d: capture buffer is too small (%u < %d)\n",
+            olt, parm->size, BCMTR_CAPTURE_MIN_BUF_SIZE);
+        return BCM_ERR_PARM;
+    }
+
+    tb = &capture_buf[olt];
+    tb->size = parm->size & ~0x3;
+    /* User-supplied or dynamically allocated buffer ? */
+    if (parm->ptr)
+        tb->start = parm->ptr;
+    else
+    {
+        tb->start = bcmos_alloc(parm->size);
+        if (!tb->start)
+        {
+            bcmcli_session_print(bcmtr_cld_session, "TRACE/%d: can't allocate capture buffer\n", olt);
+            tb->size = 0;
+            return BCM_ERR_NOMEM;
+        }
+    }
+    tb->end = (void *)((long)tb->start + parm->size);
+    tb->cur = tb->start;
+    tb->used = tb->wa = 0;
+    tb->active = parm->activate;
+    tb->parm = *parm;
+
+    return BCM_ERR_OK;
+}
+
+/** Destroy capture buffer */
+void bcmtr_capture_destroy(bcmolt_devid olt)
+{
+    bcmtr_capture_buf *tb;
+
+    if (olt >= BCMTR_MAX_OLTS)
+        return;
+    tb = &capture_buf[olt];
+    tb->active = BCMOS_FALSE;
+    if (tb->start && !tb->parm.ptr)
+        bcmos_free(tb->start);
+    memset(tb, 0, sizeof(*tb));
+}
+
+/** Get capture recording info */
+bcmos_errno bcmtr_capture_info_get(bcmolt_devid olt, bcmtr_capture_info *info)
+{
+    bcmtr_capture_buf *tb;
+
+    if (olt >= BCMTR_MAX_OLTS || !info)
+        return BCM_ERR_PARM;
+    tb = &capture_buf[olt];
+    if (tb->active)
+    {
+        bcmcli_session_print(bcmtr_cld_session, "TRACE/%d: must stop first\n", olt);
+        return BCM_ERR_PARM;
+    }
+    info->size = tb->size;
+    info->used = tb->used;
+    info->wa   = tb->wa;
+    info->msgs = _bcmtr_capture_nmsgs(tb);
+    info->lost = tb->events - info->msgs;
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcmtr_capture_size_get(bcmolt_devid olt, uint32_t *size)
+{
+    bcmtr_capture_buf *tb;
+    uint32_t n = 0;
+    uint8_t *cur_hdr = NULL;
+    uint32_t i;
+
+    *size = 0;
+    if (olt >= BCMTR_MAX_OLTS)
+    {
+        return BCM_ERR_PARM;
+    }
+    tb = &capture_buf[olt];
+    if (!tb->start)
+    {
+        bcmcli_session_print(bcmtr_cld_session, "TRACE/%d: not initialized\n", olt);
+        return BCM_ERR_PARM;
+    }
+    if (tb->active)
+    {
+        bcmcli_session_print(bcmtr_cld_session, "TRACE/%d: must stop first\n", olt);
+        return BCM_ERR_PARM;
+    }
+
+    if (!tb->used)
+    {
+        return BCM_ERR_OK;
+    }
+
+    /* Unwind capture buffer backward to get to the 1st recorded message */
+    _bcmtr_capture_unwind(tb, &cur_hdr, &n);
+
+    /* "first" points to the 1st recorded entry and "n" contains number of messages.
+     * Now go forward and copy to the user buffer
+     */
+    BUG_ON(!cur_hdr);
+    for (i = 0; i < n; i++)
+    {
+        uint32_t msg_size = _bcmtr_capture_msg_size_get(cur_hdr) + sizeof(bcmtr_capture_entry);
+        uint32_t rounded_size = BCMOS_ROUND_UP(msg_size, sizeof(uint32_t));
+
+        (*size) += msg_size;
+
+        /* Move to the next entry in capture buffer */
+        cur_hdr += rounded_size + sizeof(uint32_t);
+        _bcmtr_capture_wrap(&cur_hdr, tb);
+    }
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcmtr_capture_read(bcmolt_devid olt, uint8_t *buf, uint32_t offset, uint32_t *length)
+{
+    bcmtr_capture_buf *tb;
+    uint32_t n = 0;
+    uint8_t *cur_hdr = NULL;
+    uint32_t cur_offset = 0;
+    uint32_t i;
+
+    if (olt >= BCMTR_MAX_OLTS || !buf)
+    {
+        return BCM_ERR_PARM;
+    }
+    tb = &capture_buf[olt];
+    if (!tb->start)
+    {
+        bcmcli_session_print(bcmtr_cld_session, "TRACE/%d: not initialized\n", olt);
+        return BCM_ERR_PARM;
+    }
+    if (tb->active)
+    {
+        bcmcli_session_print(bcmtr_cld_session, "TRACE/%d: must stop first\n", olt);
+        return BCM_ERR_PARM;
+    }
+
+    if (!tb->used)
+    {
+        return BCM_ERR_OK;
+    }
+
+    /* Unwind capture buffer backward to get to the 1st recorded message */
+    _bcmtr_capture_unwind(tb, &cur_hdr, &n);
+
+    /* "first" points to the 1st recorded entry and "n" contains number of messages.
+     * Now go forward and copy to the user buffer
+     */
+    BUG_ON(!cur_hdr);
+    for (i = 0; (i < n) && ((*length) > 0); i++)
+    {
+        uint32_t msg_size = _bcmtr_capture_msg_size_get(cur_hdr);
+        uint32_t rounded_size = BCMOS_ROUND_UP(msg_size, sizeof(uint32_t));
+
+        cur_offset += sizeof(bcmtr_capture_entry);
+        if (cur_offset > offset)
+        {
+            uint32_t temp[BCMTR_CAPTURE_ENTRY_FIELDS];
+            uint8_t j;
+
+            for (j = 0; j < BCMTR_CAPTURE_ENTRY_FIELDS; j++)
+            {
+                temp[j] = BCMOLT_BUF_ENDIAN_CPU_TO_BUF(U32, *((uint32_t*)(long)cur_hdr));
+                cur_hdr += sizeof(uint32_t);
+                _bcmtr_capture_wrap(&cur_hdr, tb);
+            }
+
+            _bcmtr_capture_copy_bounded(
+                tb,
+                &buf,
+                (uint8_t*)temp,
+                sizeof(bcmtr_capture_entry),
+                length,
+                cur_offset - offset);
+        }
+        else
+        {
+            cur_hdr += sizeof(bcmtr_capture_entry);
+        }
+
+        cur_offset += msg_size;
+        if (cur_offset > offset)
+        {
+            _bcmtr_capture_copy_bounded(
+                tb,
+                &buf,
+                cur_hdr,
+                msg_size,
+                length,
+                cur_offset - offset);
+        }
+
+        /* Move to the next entry in capture buffer */
+        cur_hdr += rounded_size + sizeof(uint32_t);
+        _bcmtr_capture_wrap(&cur_hdr, tb);
+    }
+
+    return BCM_ERR_OK;
+}
+
+bcmos_bool bcmtr_capture_entry_get_next(bcmolt_buf *buf, bcmtr_capture_entry *hdr, uint8_t **msg)
+{
+    bcmos_bool valid;
+
+    BUG_ON(buf == NULL);
+    BUG_ON(hdr == NULL);
+
+    valid = bcmtr_capture_entry_unpack(buf, hdr);
+    if (msg != NULL)
+    {
+        *msg = bcmolt_buf_snap_get(buf);
+    }
+    return valid && bcmolt_buf_skip(buf, hdr->msg_size);
+}
+
+/** Decode and dump capture recording */
+bcmos_errno bcmtr_capture_dump(bcmcli_session *session, bcmolt_devid olt, uint32_t *nmsgs)
+{
+    bcmtr_capture_entry hdr;
+    uint8_t *msg_start;
+    bcmolt_buf buf;
+    uint8_t *data;
+    uint32_t length;
+    uint32_t remaining;
+    bcmos_errno rc;
+
+    rc = bcmtr_capture_size_get(olt, &length);
+    BCMOS_CHECK_RETURN_ERROR(BCM_ERR_OK != rc, rc);
+
+    /* Allocate temp buffer and read data into it */
+    data = bcmos_calloc(length);
+    if (data == NULL)
+    {
+        bcmcli_session_print(session, "TRACE/%d: no memory\n", olt);
+        return BCM_ERR_NOMEM;
+    }
+
+    remaining = length;
+    rc = bcmtr_capture_read(olt, data, 0, &remaining);
+    if (BCM_ERR_OK != rc)
+    {
+        bcmos_free(data);
+        return rc;
+    }
+
+    /* Dump */
+    bcmolt_buf_init(&buf, length - remaining, data, BCMOLT_BUF_ENDIAN_FIXED);
+    while (bcmtr_capture_entry_get_next(&buf, &hdr, &msg_start))
+    {
+        bcmolt_buf msg_buf;
+        bcmolt_msg *msg = NULL;
+        bcmos_errno err;
+
+        bcmcli_session_print(session, "\n%08x %s:\n", hdr.timestamp, bcmtr_cld_event_name(hdr.event));
+        bcmolt_buf_init(&msg_buf, hdr.msg_size, msg_start, BCMOLT_BUF_ENDIAN_FIXED);
+        err = bcmolt_msg_unpack(&msg_buf, &msg);
+        if (BCM_ERR_OK == err)
+        {
+            (void)apicli_msg_dump(session, msg);
+            bcmolt_msg_free(msg);
+        }
+        else
+        {
+            bcmcli_session_hexdump(session, msg_start, 0, hdr.msg_size, NULL);
+        }
+    }
+
+    bcmos_free(data);
+
+    *nmsgs = _bcmtr_capture_nmsgs(&capture_buf[olt]);
+
+    return BCM_ERR_OK;
+}
+
+/** (Re)start / Suspend capture recording */
+bcmos_errno bcmtr_capture_start_stop(bcmolt_devid olt, bcmos_bool start)
+{
+    if (olt >= BCMTR_MAX_OLTS)
+        return BCM_ERR_PARM;
+    if (!capture_buf[olt].start && start)
+    {
+        bcmcli_session_print(bcmtr_cld_session,
+            "TRACE/%d: Can't start recording - must initialize first\n", olt);
+        return BCM_ERR_PARM;
+    }
+    capture_buf[olt].active = start;
+    return BCM_ERR_OK;
+}
+
+bcmos_bool bcmtr_capture_is_active(bcmolt_devid olt)
+{
+    return capture_buf[olt].active;
+}
+
+bcmos_bool bcmtr_capture_entry_unpack(bcmolt_buf *buf, bcmtr_capture_entry *entry)
+{
+    return
+        bcmolt_buf_read_u32(buf, &entry->msg_size) &&
+        bcmolt_buf_read_u32(buf, &entry->event) &&
+        bcmolt_buf_read_u32(buf, &entry->timestamp);
+}
+
+/* Notify message to capture module - called from the transport layer */
+static void bcmtr_capture_notify(bcmolt_devid device, const bcmtr_hdr *trhdr,
+    bcmtr_cld_event_type ev, uint32_t ts,
+    const void *packed, uint32_t packed_length, bcmolt_msg *msg)
+{
+    bcmtr_capture_buf *tb;
+    bcmtr_capture_entry hdr;
+    uint32_t rounded_size;
+
+    tb = &capture_buf[device];
+
+    /* Sanity */
+    if (!packed)
+        return;
+    hdr.msg_size = packed_length;
+    /* Enable & overflow checks */
+    if (!tb->active)
+        return;
+    if (tb->parm.stop_on_full && (tb->used + hdr.msg_size + BCMTR_CAPTURE_OVERHEAD_SIZE > tb->size))
+        return;
+    hdr.timestamp = ts;
+    hdr.event = ev;
+    rounded_size = BCMOS_ROUND_UP(hdr.msg_size, sizeof(uint32_t));
+    _bcmtr_capture_store(tb, &hdr, sizeof(hdr));
+    _bcmtr_capture_store(tb, packed, rounded_size); /* overflow by up to 3 bytes; is this safe? */
+    rounded_size += sizeof(bcmtr_capture_entry) + sizeof(uint32_t);
+    _bcmtr_capture_store(tb, &rounded_size, sizeof(rounded_size));
+    ++tb->events;
+}
+
+/* Notify message to logger */
+static void bcmtr_log_notify(bcmolt_devid device, const bcmtr_hdr *hdr,
+    bcmtr_cld_event_type ev, uint32_t ts,
+    const void *packed, uint32_t packed_length, bcmolt_msg *msg)
+{
+#ifdef ENABLE_LOG
+    bcmos_errno err;
+    bcmolt_obj_id obj;
+    bcmolt_mgt_group group;
+    uint16_t subgroup;
+    const char *obj_name;
+    const char *subgroup_name;
+    const char *dummy_str;
+
+    err = bcmolt_group_id_split(hdr->msg_id, &obj, &group, &subgroup);
+    BCMOS_CHECK_RETURN(err != BCM_ERR_OK, err,);
+
+    err = api_cli_object_name(obj, &obj_name, &dummy_str);
+    BCMOS_CHECK_RETURN(err != BCM_ERR_OK, err,);
+
+    err = api_cli_object_subgroup_name(obj, group, subgroup, &subgroup_name, &dummy_str);
+    BCMOS_CHECK_RETURN(err != BCM_ERR_OK, err,);
+
+    /* log with the header but without file/line number (file/line number isn't helpful here). */
+    bcm_dev_log_log(
+        bcmtr_cld_log_id,
+        DEV_LOG_LEVEL_INFO,
+        BCM_LOG_FLAG_NONE,
+        "%s %s: corr_tag=%u instance=%d obj=%s group=%s subgrp=%s org_ts=%u err=%s\n",
+        bcmtr_cld_event_name(ev),
+        hdr->dir == BCMOLT_MSG_DIR_RESPONSE ? "response" : "request",
+        hdr->corr_tag,
+        hdr->instance,
+        obj_name,
+        apicli_mgt_group_to_str(group),
+        subgroup_name,
+        ts,
+        msg ? bcmos_strerror(msg->err) : "N/A");
+#endif
+}
+
+/* Dump message header and/or body */
+static void bcmtr_dump_notify(
+    bcmolt_devid device,
+    const bcmtr_hdr *hdr,
+    bcmtr_cld_event_type ev,
+    uint32_t ts,
+    const void *packed,
+    uint32_t packed_length,
+    bcmolt_msg *msg)
+{
+    bcmos_errno err;
+    bcmtr_cld_type val = bcmtr_cld_active_level[device][hdr->msg_id];
+    bcmolt_obj_id obj;
+    bcmolt_mgt_group group;
+    uint16_t subgroup;
+    const char *obj_name;
+    const char *subgroup_name;
+    const char *dummy_str;
+
+    err = bcmolt_group_id_split(hdr->msg_id, &obj, &group, &subgroup);
+    BCMOS_CHECK_RETURN(err != BCM_ERR_OK, err,);
+
+    err = api_cli_object_name(obj, &obj_name, &dummy_str);
+    BCMOS_CHECK_RETURN(err != BCM_ERR_OK, err,);
+
+    err = api_cli_object_subgroup_name(obj, group, subgroup, &subgroup_name, &dummy_str);
+    BCMOS_CHECK_RETURN(err != BCM_ERR_OK, err,);
+
+    /* always dump the message header to the scratch CLI session */
+    bcmcli_session_print(
+        bcmtr_cld_scratch_session,
+        "[-- CLD: %s %s: corr_tag=%u instance=%d msg_id=%d obj=%s(%d) group=%s(%d) subgrp=%s(%d)",
+        bcmtr_cld_event_name(ev),
+        hdr->dir == BCMOLT_MSG_DIR_RESPONSE ? "response" : "request",
+        hdr->corr_tag,
+        hdr->instance,
+        hdr->msg_id,
+        obj_name, obj,
+        apicli_mgt_group_to_str(group), group,
+        subgroup_name, subgroup);
+
+    if (hdr->more_fragments || (hdr->frag_number != 0))
+    {
+        bcmcli_session_print(
+            bcmtr_cld_scratch_session,
+            " more_fragments=%d fragment_number=%u",
+            hdr->more_fragments,
+            hdr->frag_number);
+    }
+
+    bcmcli_session_print(bcmtr_cld_scratch_session, " --]\n");
+
+    /* if configured for a full message dump, write the message data to the scratch session */
+    if ((val & BCMTR_CLD_DUMP) == BCMTR_CLD_DUMP)
+    {
+        if (msg != NULL)
+        {
+            bcmcli_session_print(bcmtr_cld_scratch_session, "[-- CLD Message Dump Start --]\n");
+            apicli_msg_dump(bcmtr_cld_scratch_session, msg);
+        }
+        else
+        {
+            bcmcli_session_print(bcmtr_cld_scratch_session, "[-- CLD Message Hex Dump Start --]\n");
+            bcmcli_session_hexdump(bcmtr_cld_scratch_session, packed, 0, packed_length, NULL);
+        }
+        bcmcli_session_print(bcmtr_cld_scratch_session, "[-- CLD Message Dump End --]\n");
+    }
+
+    /* Write the scratch session's buffer to the real CLI and reset it */
+    bcmcli_session_write(bcmtr_cld_session, bcmtr_cld_scratch_buf, bcmtr_cld_scratch_pos);
+    bcmtr_cld_scratch_pos = 0;
+}
+
+/* Notify capture, log, debug */
+void bcmtr_cld_notify(bcmolt_devid device, const bcmtr_hdr *hdr,
+    bcmtr_cld_event_type ev, uint32_t ts, const uint8_t *packed, uint32_t packed_length,
+    bcmolt_msg *msg)
+{
+    bcmtr_cld_type val = bcmtr_cld_active_level[device][hdr->msg_id];
+
+    if ((val & BCMTR_CLD_CAPTURE))
+        bcmtr_capture_notify(device, hdr, ev, ts, packed, packed_length, msg);
+    if ((val & BCMTR_CLD_LOG))
+        bcmtr_log_notify(device, hdr, ev, ts, packed, packed_length, msg);
+    if ((val & BCMTR_CLD_DUMP))
+        bcmtr_dump_notify(device, hdr, ev, ts, packed, packed_length, msg);
+}
+
+
+bcmos_errno bcmtr_cld_init(bcmcli_session *session)
+{
+    bcmos_errno err;
+    bcmcli_session_parm scratch_session_parm = { .write = bcmtr_log_cli_print };
+
+    err = bcmcli_session_open_user(&scratch_session_parm, &bcmtr_cld_scratch_session);
+    BCMOS_CHECK_RETURN_ERROR(err != BCM_ERR_OK, err);
+
+    bcmtr_cld_session = session;
+
+#ifdef ENABLE_LOG
+    bcmtr_cld_log_id = bcm_dev_log_id_register("cld", DEV_LOG_LEVEL_INFO, DEV_LOG_ID_TYPE_BOTH);
+#endif
+
+#ifdef ENABLE_CLI
+    err = bcmtr_cld_cli_init();
+    BCMOS_CHECK_RETURN_ERROR(err != BCM_ERR_OK, err);
+#endif
+
+    return BCM_ERR_OK;
+}
+
+/** Clean up transport capture, log, debug service
+ */
+void bcmtr_cld_exit(void)
+{
+#ifdef ENABLE_CLI
+    bcmtr_cld_cli_exit();
+#endif
+    if (bcmtr_cld_scratch_session)
+    {
+        bcmcli_session_close(bcmtr_cld_scratch_session);
+        bcmtr_cld_scratch_session = NULL;
+    }
+}
diff --git a/bcm68620_release/release/host_driver/transport/bcmtr_debug.h b/bcm68620_release/release/host_driver/transport/bcmtr_debug.h
new file mode 100644
index 0000000..4690748
--- /dev/null
+++ b/bcm68620_release/release/host_driver/transport/bcmtr_debug.h
@@ -0,0 +1,257 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef BCMTR_DEBUG_H_
+#define BCMTR_DEBUG_H_
+
+#include <bcm_config.h>
+#include <bcmolt_msg_pack.h>
+#include <bcmtr_header.h>
+#include <bcmolt_msg.h>
+#include <bcmcli.h>
+
+/* CLD stands for capture,log,debug */
+
+/** Capture, log, debug type */
+typedef enum
+{
+    BCMTR_CLD_NONE      = 0,            /**< Off */
+    BCMTR_CLD_CAPTURE   = 0x01,         /**< Message capture */
+    BCMTR_CLD_LOG       = 0x02,         /**< Message logging */
+    BCMTR_CLD_DUMP_HDR  = 0x04,         /**< Message header dump */
+    BCMTR_CLD_DUMP      = 0x0C,         /**< Message header and body dump */
+} bcmtr_cld_type;
+
+/** Event type */
+typedef enum
+{
+    BCMTR_CLD_EV_SEND,                  /**< Send message */
+    BCMTR_CLD_EV_RESEND,                /**< Retransmit message */
+    BCMTR_CLD_EV_RECV,                  /**< Receive message */
+    BCMTR_CLD_EV_RECV_DISCARD,          /**< Receive message discarded */
+    BCMTR_CLD_EV_TIMEOUT,               /**< Request timed out waiting for response */
+} bcmtr_cld_event_type;
+
+/** Capture, log, debug filter */
+typedef struct
+{
+    bcmolt_mgt_group group;     /**< Message group. Can be BCMOLT_MGT_GROUP_ANY */
+    bcmolt_obj_id object;       /**< Object. Can be BCMOLT_OBJECT_ANY */
+    uint16_t subgroup;          /**< Message subgroup. Can be BCMOLT_SUBGROUP_ANY */
+} bcmtr_cld_filter;
+
+/** Initialize transport capture,log, debug service
+ * \param[in]   parent  Parent CLI directory. Can be NULL
+ * \returns BCM_ERR_OK or error code
+ */
+bcmos_errno bcmtr_cld_init(bcmcli_session *session);
+
+/** Clean up transport capture, log, debug service
+ */
+void bcmtr_cld_exit(void);
+
+/** Set capture, log, debug for selected messages
+ * \param[in]   device          Device id
+ * \param[in]   filter          Message filter
+ * \param[in]   cld_level       Capture, log, debug level. Can be a combination of BCMTR_CLD_.. constants
+ * \returns BCM_ERR_OK or error code
+ */
+bcmos_errno bcmtr_cld_level_set(bcmolt_devid device, const bcmtr_cld_filter *filter, bcmtr_cld_type cld_level);
+
+/** Get capture, log, debug for selected message
+ * \param[in]   device          Device id
+ * \param[in]   filter          Message filter. Wildcards are not allowed.
+ * \param[out]  cld_level       Capture, log, debug level
+ * \returns BCM_ERR_OK or error code
+ */
+bcmos_errno bcmtr_cld_level_get(bcmolt_devid device, const bcmtr_cld_filter *filter, bcmtr_cld_type *cld_level);
+
+/*
+ * Message capture functions
+ */
+
+/**
+ * Message capture facility allows capturing messages between the host
+ * and OLT at real time. The recorded trace can be dumped in
+ * human readable format or "played back" in order to reproduce
+ * the configuration under test.
+ * @{
+ */
+
+/** Minimal trace buffer size (bytes) */
+#define BCMTR_CAPTURE_MIN_BUF_SIZE          (16*1024)
+
+/** Capture buffer configuration parameters */
+typedef struct bcmtr_capture_parm
+{
+    uint32_t size;              /**< Capture buffer size. Must be at least \ref BCMTR_CAPTURE_MIN_BUF_SIZE bytes */
+    void *ptr;                  /**< Optional capture buffer pointer. Allocated automatically if NULL */
+    bcmos_bool stop_on_full;    /**< TRUE-stop recording when buffer is full. FALSE=circular buffer */
+    bcmos_bool activate;        /**< Auto-activate capture immediately after init */
+} bcmtr_capture_parm;
+
+/** Capture info record */
+typedef struct bcmtr_capture_info
+{
+    uint32_t size;              /**< Capture buffer size */
+    uint32_t used;              /**< Used bytes */
+    uint32_t wa;                /**< Number of times capture buffer wrapped around */
+    uint32_t msgs;              /**< Number of complete messages stored in the capture buffer */
+    uint32_t lost;              /**< Number of messages lost due to buffer overflow */
+} bcmtr_capture_info;
+
+/* Capture entry header
+ *
+ * Followed by msg_size bytes of message data
+ */
+typedef struct
+{
+    uint32_t msg_size;          /**< Message size (bytes); MUST be the first member */
+    uint32_t event;             /**< bcmtr_cld_event_type event */
+    uint32_t timestamp;         /**< Message timestamp (us) */
+    /* Followed by message data padded to the nearest 4 bytes */
+} bcmtr_capture_entry;
+
+/** Initialize capture buffer
+ *
+ * This function must be called first.
+ * \param[in]   olt     Olt index
+ * \param[in]   cfg     Capture configuration parameters
+ * \return 0=success or error code
+ */
+bcmos_errno bcmtr_capture_init(bcmolt_devid olt, const bcmtr_capture_parm *parm);
+
+/** Destroy capture buffer
+ *
+ * Destroy buffer initialized by bcmtr_capture_Init().
+ * \param[in]   olt     Olt index
+ * Following this call all recording is lost.
+ */
+void bcmtr_capture_destroy(bcmolt_devid olt);
+
+/** Get capture recording info
+ *
+ * \param[in]   olt     Olt index
+ * \param[out]  info    Capture information
+ * \return 0=success or error code
+ */
+bcmos_errno bcmtr_capture_info_get(bcmolt_devid olt, bcmtr_capture_info *info);
+
+/** Get the number of readable bytes in the capture buffer
+ *
+ * \param[in]   olt             OLT index
+ * \param[out]  size            Number of readable bytes
+ */
+bcmos_errno bcmtr_capture_size_get(bcmolt_devid olt, uint32_t *size);
+
+/** Read portion of capture
+ *
+ * This function reads recorded data into a user buffer starting at the specified offset from the beginning of the
+ * capture up to the specified length. Applications can use this function in order to save capture into file or dump it.
+ *
+ * \param[in]   olt             OLT index
+ * \param[out]  buf             User buffer
+ * \param[in]   offset          Buffer offset to start read (bytes)
+ * \param[in/out]  length       in: Maximum number of bytes to read into the user buffer
+ *                              out: Remaining unused bytes in user buffer
+ * \return 0=success or error code
+ */
+bcmos_errno bcmtr_capture_read(bcmolt_devid olt, uint8_t *buf, uint32_t offset, uint32_t *length);
+
+/** Advance buffer to next capture entry
+ *
+ * Helper function used to scan buffer read by bcmtr_capture_read()
+ *
+ * \param[in/out]   buf         Capture buffer
+ * \param[out]      hdr         Capture entry header
+ * \param[out]      msg         Pointer to packed message
+ */
+bcmos_bool bcmtr_capture_entry_get_next(bcmolt_buf *buf, bcmtr_capture_entry *hdr, uint8_t **msg);
+
+/** Decode and dump capture recording
+ *
+ * This function interprets and dumps capture recording.
+ *
+ * \param[in]   session CLI session
+ * \param[in]   olt     OLT index
+ * \param[out]  nmsgs   Number of messages dumped
+ * \return 0=success or error code
+ */
+bcmos_errno bcmtr_capture_dump(bcmcli_session *session, bcmolt_devid olt, uint32_t *nmsgs);
+
+/** (Re)start / Suspend capture recording
+ *
+ * \param[in]   olt     OLT index
+ * \param[in]   start   TRUE=start, FALSE=suspend
+ * \return 0=success or error code
+ */
+bcmos_errno bcmtr_capture_start_stop(bcmolt_devid olt, bcmos_bool start);
+
+/** Are we actively capturing?
+ *
+ * \param[in]   olt     OLT index
+ * \return TRUE=actively capturing, FALSE=NOT capturing
+ */
+bcmos_bool bcmtr_capture_is_active(bcmolt_devid olt);
+
+/** Convert entry to platform specific format
+ *
+ * \param[in/out]   buf     Capture buffer
+ * \param[out]      entry   Capture entry header
+ *
+ * \return TRUE if success, FALSE otherwise
+ */
+bcmos_bool bcmtr_capture_entry_unpack(bcmolt_buf *buf, bcmtr_capture_entry *entry);
+
+/*
+ * Internal functions - called from transport level
+ */
+
+/* Per-OLT, per-command combined trace,log,debug level */
+extern bcmtr_cld_type bcmtr_cld_active_level[BCMTR_MAX_OLTS][BCMOLT_GROUP_ID__NUM_OF];
+
+/* Notify message.
+ * Called by transport layer
+ */
+void bcmtr_cld_notify(bcmolt_devid device, const bcmtr_hdr *hdr,
+    bcmtr_cld_event_type ev, uint32_t ts, const uint8_t *packed, uint32_t packed_length,
+    bcmolt_msg *msg);
+
+/* Check if CLD is enabled for the message and record if yes
+ * Called by transport layer
+ */
+#define BCMTR_CLD_CHECK_NOTIFY(_device, _hdr, _ev, _ts, _packed, _packed_length, _msg) \
+    do {\
+        if (bcmtr_cld_active_level[_device][(_hdr)->msg_id]) \
+        { \
+            bcmtr_cld_notify(_device, _hdr, _ev, _ts, _packed, _packed_length, _msg); \
+        } \
+    } while (0)
+
+#endif /* BCMTR_DEBUG_H_ */
diff --git a/bcm68620_release/release/host_driver/transport/bcmtr_debug_cli.c b/bcm68620_release/release/host_driver/transport/bcmtr_debug_cli.c
new file mode 100644
index 0000000..6db7d82
--- /dev/null
+++ b/bcm68620_release/release/host_driver/transport/bcmtr_debug_cli.c
@@ -0,0 +1,440 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#include <bcmos_system.h>
+#include <bcmtr_debug.h>
+#include <bcmtr_debug_cli.h>
+#include <bcm_api_cli_helpers.h>
+#ifdef BCM_SUBSYSTEM_HOST
+#include <bcmolt_dev_selector.h>
+#endif
+
+#define BCMTR_CLD_CAST_DISCARD_CONST(p, type)       (type)((long)(p))
+
+static bcmcli_entry *cld_cli_dir;
+
+static bcmos_errno _bcmtr_cld_cli_create(void);
+static void _bcmtr_cld_cli_destroy(void);
+
+/*
+ * CLI handlers
+ */
+
+static bcmos_errno _bcmtr_cld_cli_setget_level(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    bcmcli_number obj = bcmcli_parm_get(session, "object")->value.number;
+    bcmcli_cmd_parm *grp_parm = bcmcli_parm_get(session, "group");
+    bcmcli_number group = grp_parm ? grp_parm->value.number : -1;
+    bcmcli_cmd_parm *subgrp_parm = bcmcli_parm_get(session, "subgroup");
+    bcmcli_number subgroup = subgrp_parm ? subgrp_parm->value.number : -1;
+    bcmtr_cld_type level = bcmcli_parm_get(session, "level")->value.number;
+    bcmtr_cld_filter filter = {};
+    bcmos_errno rc;
+
+    if (obj == -1 || !bcmcli_parm_is_set(session, bcmcli_parm_get(session, "object")))
+    {
+        filter.object = BCMOLT_OBJECT_ANY;
+    }
+    else
+    {
+        filter.object = obj;
+    }
+
+    if (group == -1 || !grp_parm || !bcmcli_parm_is_set(session, grp_parm))
+    {
+        filter.group = BCMOLT_MGT_GROUP_ANY;
+    }
+    else
+    {
+        filter.group = group;
+    }
+
+    if (subgroup == -1 || !subgrp_parm || !bcmcli_parm_is_set(session, subgrp_parm))
+    {
+        filter.subgroup = BCMOLT_SUBGROUP_ANY;
+    }
+    else
+    {
+        filter.subgroup = subgroup;
+    }
+
+    /* Get or set level ? */
+    if (bcmcli_parm_is_set(session, bcmcli_parm_get(session, "level")))
+    {
+        rc = bcmtr_cld_level_set(current_device, &filter, level);
+    }
+    else
+    {
+        rc = bcmtr_cld_level_get(current_device, &filter, &level);
+        if (rc == BCM_ERR_OK)
+        {
+            bcmcli_session_print(session, "capture:%s log:%s dump:%s\n",
+                (level & BCMTR_CLD_CAPTURE) ? "on" : "off",
+                (level & BCMTR_CLD_LOG) ? "on" : "off",
+                ((level & BCMTR_CLD_DUMP) == BCMTR_CLD_DUMP) ? "all" :
+                    (level & BCMTR_CLD_DUMP_HDR) ? "headers" : "off");
+        }
+    }
+
+    return rc;
+}
+
+static bcmos_errno _bcmtr_cld_cli_capture_init(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    bcmcli_number size = bcmcli_parm_get(session, "size")->value.number;
+    bcmos_bool stop_on_full = bcmcli_parm_get(session, "stop_on_full")->value.number;
+    bcmos_bool autostart = bcmcli_parm_get(session, "autostart")->value.number;
+    bcmtr_capture_parm p = {};
+
+    p.size = size;
+    p.stop_on_full = stop_on_full;
+    p.activate = autostart;
+
+    return bcmtr_capture_init(current_device, &p);
+}
+
+static bcmos_errno _bcmtr_cld_cli_capture_delete(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    bcmtr_capture_destroy(current_device);
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno _bcmtr_cld_cli_capture_start(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    return bcmtr_capture_start_stop(current_device, BCMOS_TRUE);
+}
+
+static bcmos_errno _bcmtr_cld_cli_capture_stop(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    return bcmtr_capture_start_stop(current_device, BCMOS_FALSE);
+}
+
+static bcmos_errno _bcmtr_cld_cli_capture_dump(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    uint32_t nmsgs;
+    bcmos_errno rc;
+
+    rc = bcmtr_capture_dump(session, current_device, &nmsgs);
+    if (!rc)
+    {
+        bcmcli_session_print(session, "Dumped %u messages\n", nmsgs);
+    }
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno _bcmtr_cld_cli_capture_info(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    bcmtr_capture_info info;
+    bcmos_errno rc;
+
+    rc = bcmtr_capture_info_get(current_device, &info);
+    if (!rc)
+    {
+        bcmcli_session_print(session, "Buffer: size=%u used=%u. Events: recorded=%u lost=%d. Wraps around:%u\n",
+            info.size, info.used, info.msgs, info.lost, info.wa);
+    }
+
+    return BCM_ERR_OK;
+}
+
+
+#ifdef BCM_SUBSYSTEM_HOST
+/* Current device change indication */
+static void _bcmtr_cld_device_change_ind(bcmcli_session *session, bcmolt_devid dev)
+{
+    bcmcli_entry *cur_dir = bcmcli_dir_get(session);
+    bcmos_bool is_cld_cur_dir = (cur_dir && cur_dir == cld_cli_dir);
+    bcmos_errno rc;
+
+    /* Destroy and re-create CLD CLI directory */
+    _bcmtr_cld_cli_destroy();
+    rc = _bcmtr_cld_cli_create();
+
+    /* Restore current CLI directory to CLD */
+    if (!rc && is_cld_cur_dir)
+        bcmcli_dir_set(session, cld_cli_dir);
+}
+#endif
+
+/* allocate memory for name and description and copy to to parm */
+static bcmos_errno _bcmtr_cld_copy_parm_name(bcmcli_cmd_parm *parm, const char *name, const char *descr)
+{
+    parm->name = bcmos_alloc(strlen(name) + 1);
+    parm->description = bcmos_alloc(strlen(descr) + 1);
+    if ((parm->name == NULL) || (parm->description == NULL))
+    {
+        /* Successful allocation if any will be released by common cleanup
+         * along with the rest of dynamic parameter fields */
+        return BCM_ERR_NOMEM;
+    }
+    strcpy(BCMTR_CLD_CAST_DISCARD_CONST(parm->name, void *), name);
+    strcpy(BCMTR_CLD_CAST_DISCARD_CONST(parm->description, void *), descr);
+    return BCM_ERR_OK;
+}
+
+/* Free "level" command parameters. both name and description are allocated dynamically */
+static void _bcmtr_cld_free_level_parms(bcmcli_cmd_parm *parms)
+{
+    bcmcli_cmd_parm *p = parms;
+
+    while (p->name)
+    {
+        if (p->type == BCMCLI_PARM_ENUM && p->enum_table)
+        {
+            if ((p->flags & BCMCLI_PARM_FLAG_SELECTOR))
+            {
+                bcmcli_enum_val *e = p->enum_table;
+                while(e->name)
+                {
+                    if (e->parms)
+                    {
+                        _bcmtr_cld_free_level_parms(e->parms);
+                    }
+                    ++e;
+                }
+            }
+            bcmos_free(p->enum_table);
+        }
+        if (p->description)
+            bcmos_free(BCMTR_CLD_CAST_DISCARD_CONST(p->description, void *));
+        if (p->name)
+            bcmos_free(BCMTR_CLD_CAST_DISCARD_CONST(p->name, void *));
+
+        ++p;
+    }
+    bcmos_free(parms);
+}
+
+/* Add "level" command */
+static bcmos_errno _bcmtr_cld_add_level_cmd(bcmcli_entry *dir)
+{
+    /* object:            *all, object list
+     * group:   selector: *all, group list
+     * subgroup:          *all, subgroup list
+     * level:   bitmask
+     */
+    bcmcli_cmd_extra_parm cmd_extras = { .free_parms = _bcmtr_cld_free_level_parms };
+    bcmcli_enum_val *obj_selector;
+    bcmcli_cmd_parm *cmd_parms;
+    static const char *all_name = "*all";
+    bcmolt_system_mode current_system_mode;
+    int n_obj = 0;
+    bcmolt_obj_id o;
+    bcmos_errno rc = BCM_ERR_NOMEM;
+
+    /* Allocate top level parameters: object selector, level, terminator */
+    cmd_parms = bcmos_calloc(sizeof(bcmcli_cmd_parm) * 3);
+    if (!cmd_parms)
+    {
+        return BCM_ERR_NOMEM;
+    }
+
+    /* Allocate object enum table. 2 extra entries for *all and terminator */
+    obj_selector = bcmos_calloc(sizeof(bcmcli_enum_val) * (BCMOLT_OBJ_ID__NUM_OF + 2));
+    if (!obj_selector)
+    {
+        goto cleanup;
+    }
+
+    /* Fill up parameters */
+    rc = _bcmtr_cld_copy_parm_name(&cmd_parms[0], "object", "Object Name");
+    cmd_parms[0].type = BCMCLI_PARM_ENUM;
+    cmd_parms[0].flags = BCMCLI_PARM_FLAG_SELECTOR;
+    cmd_parms[0].enum_table = obj_selector;
+
+    rc = rc ? rc : _bcmtr_cld_copy_parm_name(&cmd_parms[1], "level", "Level bitmask: 1=capture,2=log,4=print hdr,8=print body");
+    cmd_parms[1].type = BCMCLI_PARM_DECIMAL;
+    cmd_parms[1].flags = BCMCLI_PARM_FLAG_OPTIONAL;
+
+    /* obj_selector[0] is reserved for *all */
+    obj_selector[0].name = all_name;
+    obj_selector[0].val = -1;
+
+    /* Go over objects */
+    bcmolt_system_mode_get(current_device, &current_system_mode);
+    for (o = 0; o < BCMOLT_OBJ_ID__NUM_OF; o++)
+    {
+        bcmcli_enum_val *grp_selector;
+        bcmcli_cmd_parm *grp_parm;
+        bcmolt_mgt_group g;
+        int n_grp = 0;
+
+        if (!bcmolt_object_is_supported(current_system_mode, o))
+            continue;
+
+        /* Allocate group parameter and selector */
+        ++n_obj;
+        obj_selector[n_obj].val = o;
+        rc = api_cli_object_name(o, &obj_selector[n_obj].name, NULL);
+        if (rc != BCM_ERR_OK)
+            goto cleanup;
+
+        obj_selector[n_obj].parms = grp_parm = bcmos_calloc(sizeof(bcmcli_cmd_parm)*2);
+        if (!grp_parm)
+            goto cleanup;
+        rc = _bcmtr_cld_copy_parm_name(grp_parm, "group", "Message group");
+        grp_parm->type = BCMCLI_PARM_ENUM;
+        grp_parm->flags = BCMCLI_PARM_FLAG_SELECTOR;
+        grp_parm->enum_table = grp_selector = bcmos_calloc(sizeof(bcmcli_enum_val) * (BCMOLT_MGT_GROUP__NUM_OF + 1));
+        if (!grp_selector)
+            goto cleanup;
+
+        /* Selector 0 is reserved for *all */
+        grp_selector[0].name = all_name;
+        grp_selector[0].val = -1;
+
+        /* Go over groups */
+        for (g = 1; g < BCMOLT_MGT_GROUP__NUM_OF; g++)
+        {
+            uint16_t subgroup_count = api_cli_get_subgroup_count(o, g);
+            bcmcli_enum_val *subgrp_table;
+            bcmcli_cmd_parm *subgrp_parm;
+            uint16_t s;
+            int sg_table_idx;
+
+            if (subgroup_count == 0)
+                continue;
+
+            ++n_grp;
+            grp_selector[n_grp].name = apicli_mgt_group_to_str(g);
+            grp_selector[n_grp].val = g;
+
+            /* Skip subgroup selector for groups that don't support it */
+            if (g != BCMOLT_MGT_GROUP_AUTO      &&
+                g != BCMOLT_MGT_GROUP_OPER      &&
+                g != BCMOLT_MGT_GROUP_PROXY     &&
+                g != BCMOLT_MGT_GROUP_PROXY_RX)
+            {
+                continue;
+            }
+
+            grp_selector[n_grp].parms = subgrp_parm = bcmos_calloc(sizeof(bcmcli_cmd_parm)*2);
+            if (!subgrp_parm)
+                goto cleanup;
+            rc = rc ? rc : _bcmtr_cld_copy_parm_name(subgrp_parm, "subgroup", "Message sub-group");
+            subgrp_parm->type = BCMCLI_PARM_ENUM;
+            subgrp_parm->enum_table = subgrp_table = bcmos_calloc(sizeof(bcmcli_enum_val) * (subgroup_count + 2));
+            if (!subgrp_table)
+                goto cleanup;
+            subgrp_table[0].name = all_name;
+            subgrp_table[0].val = -1;
+
+            sg_table_idx = 1;
+            for (s = 0; s < subgroup_count; s++)
+            {
+                if (api_cli_object_subgroup_name(o, g, s, &subgrp_table[sg_table_idx].name, NULL) == BCM_ERR_OK)
+                {
+                    subgrp_table[sg_table_idx].val = s;
+                    ++sg_table_idx;
+                }
+            }
+        }
+    }
+
+    /* Finally add command */
+    rc = bcmcli_cmd_add(dir, "level", _bcmtr_cld_cli_setget_level, "Set/get cld level", BCMCLI_ACCESS_ADMIN,
+        &cmd_extras, cmd_parms);
+    if (rc)
+        goto cleanup;
+    return BCM_ERR_OK;
+
+cleanup:
+    _bcmtr_cld_free_level_parms(cmd_parms);
+    return rc;
+}
+
+/* Create CLI commands */
+static bcmos_errno _bcmtr_cld_cli_create(void)
+{
+    bcmcli_entry *dir;
+    bcmos_errno err;
+
+    dir = bcmcli_dir_add(NULL, "cld", "Transport Capture, Log, Debug", BCMCLI_ACCESS_ADMIN, NULL);
+    BCMOS_CHECK_RETURN_ERROR(dir == NULL, BCM_ERR_NOMEM);
+
+    err = _bcmtr_cld_add_level_cmd(dir);
+    if (err)
+        return err;
+
+    BCMCLI_MAKE_CMD(dir, "init", "Initialize capture buffer", _bcmtr_cld_cli_capture_init,
+        BCMCLI_MAKE_PARM("size", "Buffer size (bytes)", BCMCLI_PARM_UDECIMAL, 0),
+        BCMCLI_MAKE_PARM_ENUM("stop_on_full", "Stop capture when buffer is full (yes) or wrap-around (no)",
+            bcmcli_enum_bool_table, 0),
+        BCMCLI_MAKE_PARM_ENUM("autostart", "Autostart", bcmcli_enum_bool_table, 0) );
+
+    BCMCLI_MAKE_CMD_NOPARM(dir, "delete", "Destroy buffer", _bcmtr_cld_cli_capture_delete);
+
+    BCMCLI_MAKE_CMD_NOPARM(dir, "start", "Start capture", _bcmtr_cld_cli_capture_start);
+
+    BCMCLI_MAKE_CMD_NOPARM(dir, "stop", "Stop capture", _bcmtr_cld_cli_capture_stop);
+
+    BCMCLI_MAKE_CMD_NOPARM(dir, "dump", "Dump capture buffer", _bcmtr_cld_cli_capture_dump);
+
+    BCMCLI_MAKE_CMD_NOPARM(dir, "info", "Capture info", _bcmtr_cld_cli_capture_info);
+
+    cld_cli_dir = dir;
+
+    return BCM_ERR_OK;
+
+}
+
+/* Destroy CLI commands */
+static void _bcmtr_cld_cli_destroy(void)
+{
+    if (cld_cli_dir)
+    {
+        bcmcli_token_destroy(cld_cli_dir);
+        cld_cli_dir = NULL;
+    }
+}
+
+
+/** Initialize CLD CLI commands
+ * \returns BCM_ERR_OK (0) if successful
+ */
+bcmos_errno bcmtr_cld_cli_init(void)
+{
+    bcmos_errno err = BCM_ERR_OK;
+
+#ifdef BCM_SUBSYSTEM_HOST
+    /* Subscribe for device change indication */
+    err = bcmolt_dev_sel_ind_register(_bcmtr_cld_device_change_ind);
+#endif
+
+    err = err ? err : _bcmtr_cld_cli_create();
+
+    return err;
+}
+
+/** Clean-up CLD CLI commands */
+void bcmtr_cld_cli_exit(void)
+{
+    _bcmtr_cld_cli_destroy();
+}
diff --git a/bcm68620_release/release/host_driver/transport/bcmtr_debug_cli.h b/bcm68620_release/release/host_driver/transport/bcmtr_debug_cli.h
new file mode 100644
index 0000000..46b7e20
--- /dev/null
+++ b/bcm68620_release/release/host_driver/transport/bcmtr_debug_cli.h
@@ -0,0 +1,41 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef BCMTR_DEBUG_CLI_H_
+#define BCMTR_DEBUG_CLI_H_
+
+/** Initialize CLD CLI commands
+ * \returns BCM_ERR_OK (0) if successful
+ */
+bcmos_errno bcmtr_cld_cli_init(void);
+
+/** Clean-up CLD CLI commands */
+void bcmtr_cld_cli_exit(void);
+
+#endif /* BCMTR_DEBUG_CLI_H_ */
diff --git a/bcm68620_release/release/host_driver/transport/bcmtr_header.h b/bcm68620_release/release/host_driver/transport/bcmtr_header.h
new file mode 100644
index 0000000..a662535
--- /dev/null
+++ b/bcm68620_release/release/host_driver/transport/bcmtr_header.h
@@ -0,0 +1,142 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef BCMTR_HEADER_H_
+#define BCMTR_HEADER_H_
+
+#include <bcmolt_buf.h>
+#include <bcmolt_msg_pack.h>
+
+/** Endianess of numbers written to the transport buffer.
+ * Currently bcmolt_buf service doesn't support setting
+ * endianness dynamically. Transport buffer direction must be the same
+ * as selected at compile time in bcmolt_buf.h
+ */
+#define BCMTR_BUF_ENDIAN        BCMOLT_BUF_ENDIAN_FIXED
+
+#define BCMTR_ENDIAN_CPU_TO_BUF_U32(n) BCMOLT_BUF_ENDIAN_CPU_TO_BUF(U32, n)
+#define BCMTR_ENDIAN_BUF_TO_CPU_U32(n) BCMOLT_BUF_ENDIAN_BUF_TO_CPU(U32, n)
+
+/** Transport header.
+ * Inserted in each packet transmitted on the line
+ */
+typedef struct bcmtr_hdr
+{
+    bcmolt_msg_dir dir;         /**< Message direction: request/response */
+    bcmos_bool more_fragments;  /**< TRUE=more fragments to follow */
+    bcmos_bool auto_proxy_reg;  /**< TRUE=message is auto / proxy registration */
+    bcmos_bool auto_proxy_unreg;/**< TRUE=message is auto / proxy un-registration */
+    uint8_t instance;           /**< Message instance */
+    bcmolt_group_id msg_id;     /**< Message id: object+group+subgroup */
+    uint16_t corr_tag;          /**< correlation tag */
+    uint16_t frag_number;       /**< fragment number */
+} bcmtr_hdr;
+
+#define BCMTR_HDR_SIZE  8
+
+/* Shifts and widths of transport header fields */
+#define BCMTR_HDR_DIR_S         31
+#define BCMTR_HDR_DIR_W         1
+#define BCMTR_HDR_REG_S         26
+#define BCMTR_HDR_REG_W         1
+#define BCMTR_HDR_UNREG_S       25
+#define BCMTR_HDR_UNREG_W       1
+#define BCMTR_HDR_MORE_FRAGS_S  24
+#define BCMTR_HDR_MORE_FRAGS_W  1
+#define BCMTR_HDR_INSTANCE_S    16
+#define BCMTR_HDR_INSTANCE_W    8
+#define BCMTR_HDR_MSG_ID_S      0
+#define BCMTR_HDR_MSG_ID_W      16
+#define BCMTR_HDR_CORR_TAG_S    16
+#define BCMTR_HDR_CORR_TAG_W    16
+#define BCMTR_HDR_FRAG_S        0
+#define BCMTR_HDR_FRAG_W        16
+
+/* Pack transport header
+ *
+ * \param[in]   hdr             Unpacked transport header
+ * \param[out]  packed_hdr      Packed header
+ */
+static inline void bcmtr_header_pack(const bcmtr_hdr *hdr, uint8_t *packed_hdr)
+{
+    uint32_t w[2];
+
+    w[0] = (hdr->dir << BCMTR_HDR_DIR_S)                |
+        (hdr->more_fragments << BCMTR_HDR_MORE_FRAGS_S) |
+        (hdr->instance << BCMTR_HDR_INSTANCE_S)         |
+        (hdr->auto_proxy_reg << BCMTR_HDR_REG_S)        |
+        (hdr->auto_proxy_unreg << BCMTR_HDR_UNREG_S)    |
+        hdr->msg_id;
+    w[1] = (hdr->corr_tag << BCMTR_HDR_CORR_TAG_S) | hdr->frag_number;
+    w[0] = BCMTR_ENDIAN_CPU_TO_BUF_U32(w[0]);
+    w[1] = BCMTR_ENDIAN_CPU_TO_BUF_U32(w[1]);
+    memcpy(packed_hdr, w, BCMTR_HDR_SIZE);
+}
+
+/* Unpack transport header
+ *
+ * \param[in]   packed_hdr      Packed header
+ * \param[out]  hdr             Unpacked transport header
+ * Buffer current pointer is incremented by the header side.
+ */
+static inline void bcmtr_header_unpack(const uint8_t *packed_hdr, bcmtr_hdr *hdr)
+{
+    uint32_t w[2];
+    memcpy(w, packed_hdr, BCMTR_HDR_SIZE);
+    w[0] = BCMTR_ENDIAN_BUF_TO_CPU_U32(w[0]);
+    w[1] = BCMTR_ENDIAN_BUF_TO_CPU_U32(w[1]);
+    hdr->dir = BCM_FIELD_GET(w[0], BCMTR_HDR_DIR);
+    hdr->more_fragments = BCM_FIELD_GET(w[0], BCMTR_HDR_MORE_FRAGS);
+    hdr->instance = BCM_FIELD_GET(w[0], BCMTR_HDR_INSTANCE);
+    hdr->msg_id = BCM_FIELD_GET(w[0], BCMTR_HDR_MSG_ID);
+    hdr->auto_proxy_reg = BCM_FIELD_GET(w[0], BCMTR_HDR_REG);
+    hdr->auto_proxy_unreg = BCM_FIELD_GET(w[0], BCMTR_HDR_UNREG);
+    hdr->corr_tag = BCM_FIELD_GET(w[1], BCMTR_HDR_CORR_TAG);
+    hdr->frag_number = BCM_FIELD_GET(w[1], BCMTR_HDR_FRAG);
+}
+
+/* Fill transport header
+ */
+static inline bcmos_errno bcmtr_header_fill(const bcmolt_msg *msg, bcmtr_hdr *hdr)
+{
+    bcmos_errno err;
+
+    hdr->dir = msg->dir;
+    hdr->more_fragments = BCMOS_FALSE;
+    err = bcmolt_group_id_combine(msg->obj_type, msg->group, msg->subgroup, &hdr->msg_id);
+    if (err)
+        return err;
+    hdr->instance = bcmolt_msg_instance(msg);
+    hdr->corr_tag = msg->corr_tag;
+    hdr->frag_number = 0;
+    return BCM_ERR_OK;
+}
+
+
+#endif /* BCMTR_HEADER_H_ */
diff --git a/bcm68620_release/release/host_driver/transport/bcmtr_interface.h b/bcm68620_release/release/host_driver/transport/bcmtr_interface.h
new file mode 100644
index 0000000..b66c8cb
--- /dev/null
+++ b/bcm68620_release/release/host_driver/transport/bcmtr_interface.h
@@ -0,0 +1,241 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef BCMTR_INTERFACE_H_
+#define BCMTR_INTERFACE_H_
+
+#include <bcmos_system.h>
+#include <bcmolt_model_types.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** Transport statistics */
+typedef struct bcmtr_stat
+{
+    uint32_t msg_sent;                  /**< Messages sent */
+    uint32_t msg_resp_received;         /**< Valid responses received */
+    uint32_t msg_req_auto_received;     /**< Request or Autonomous message received */
+    uint32_t msg_req_timeout;           /**< Number of requests that timed out */
+    uint32_t msg_reass_timeout;         /**< Number of messages discarded due to reassemble timeout */
+    uint32_t msg_no_req;                /**< Number of responses discarded because there was no matching request */
+    uint32_t msg_no_mem;                /**< Number of memory allocation failures */
+    uint32_t msg_comm_err;              /**< Messages discarded because of communication error */
+    uint32_t msg_ready_timeout;         /**< Responses that have been reported to application but not peaked up */
+    uint32_t msg_too_many_req;          /**< Number of requests discarded because there were too many outstanding requests */
+    uint32_t msg_too_many_auto;         /**< Number of autonomous messages discarded because there were too many being reassembled */
+    uint32_t not_connected;             /**< Number of TX messages discarded because connection was lost */
+    uint32_t frag_received;             /**< Valid fragments received */
+    uint32_t frag_invalid;              /**< Fragments discarded */
+    uint32_t pack_errors;               /**< Message pack errors */
+    uint32_t unpack_errors;             /**< Message unpack errors */
+    uint32_t no_rx_handler;             /**< Message discarded because there was no rx handler */
+} bcmtr_stat;
+
+/** Transport message control block */
+typedef struct bcmtr_msg bcmtr_msg;
+
+/** Channel id */
+typedef uint8_t bcmtr_channel_id;
+
+/** Send flags */
+typedef enum
+{
+    BCMTR_SEND_FLAGS_NONE               = 0,            /**< None */
+    BCMTR_SEND_FLAGS_CALL               = 0x0001,       /**< Request/Response sequence */
+
+    BCMTR_SEND_FLAGS_PRI_NORMAL         = 0,            /**< Normal priority */
+    BCMTR_SEND_FLAGS_PRI_HI             = 0x0010,       /**< High priority */
+
+    BCMTR_SEND_FLAGS_LONG_WAIT          = 0x0100,       /**< Enable long wait until there is room in tx queue */
+    BCMTR_SEND_FLAGS_SHORT_WAIT         = 0x0200,       /**< Enable short wait until there is room in tx queue */
+    BCMTR_SEND_FLAGS_DO_NOT_WAIT        = 0x0400,       /**< Drop packet if TX q is full */
+
+} bcmtr_send_flags;
+
+#define BCMTR_SEND_FLAGS_WAIT_MASK (BCMTR_SEND_FLAGS_LONG_WAIT | BCMTR_SEND_FLAGS_SHORT_WAIT | BCMTR_SEND_FLAGS_DO_NOT_WAIT)
+
+/** Transport handler registration parameters */
+typedef struct bcmtr_handler_parm
+{
+    uint8_t instance;           /**< Instance (i.e, link) */
+    bcmolt_mgt_group group;     /**< Message group */
+    bcmolt_obj_id object;       /**< Object. Can be BCMOLT_OBJECT_ANY */
+    uint16_t subgroup;          /**< Message subgroup. Can be BCMOLT_SUBGROUP_ANY */
+    f_bcmolt_msg_handler app_cb;/**< Message handler */
+    bcmolt_auto_flags flags;    /**< Flags. app_cb is called in context of transport task
+                                     or app module, depending on the flags */
+    bcmos_module_id module;     /**< Target module id. Relevant only if flags == BCMOLT_AUTO_FLAGS_DISPATCH.
+                                     BCMOS_MODULE_ID_NONE is replaced by the module calling registration function */
+} bcmtr_handler_parm;
+
+/** Initialize transport library.
+ * \returns BCM_ERR_OK or error code
+ */
+bcmos_errno bcmtr_init(void);
+
+/** Release resources used by transport library.
+ * \returns BCM_ERR_OK or error code
+ */
+bcmos_errno bcmtr_exit(void);
+
+/** Send message. Do not wait for response
+ *
+ * Set-up connection if necessary, pack message and send it to the remote side.
+ * This function is intended for proxy and autonomous messages.
+ *
+ * \param[in]   device  OLT device index
+ * \param[in]   msg     Application message to be sent
+ * \param[in]   flags   flags (request/auto or reply)
+ *
+ * \returns BCM_ERR_OK or error code
+ */
+bcmos_errno bcmtr_send(bcmolt_devid device, bcmolt_msg *msg, bcmtr_send_flags flags);
+
+/** Send response message
+ *
+ * Set-up connection if necessary, pack message and send it to the remote side.
+ * This function is intended for proxy and autonomous messages.
+ *
+ * \param[in]   device  OLT device index
+ * \param[in]   msg     Application message to be sent
+ * \param[in]   flags   flags (request/auto or reply)
+ *
+ * \returns BCM_ERR_OK or error code
+ */
+static inline bcmos_errno bcmtr_send_response(bcmolt_devid device, bcmolt_msg *msg)
+{
+    msg->dir = BCMOLT_MSG_DIR_RESPONSE;
+    return bcmtr_send(device, msg, BCMTR_SEND_FLAGS_CALL | BCMTR_SEND_FLAGS_SHORT_WAIT);
+}
+
+/** Send request and wait for reply
+ *
+ * Set-up connection if necessary, pack message and send it to the remote side.
+ * Wait for reply or timeout, unpack the reply and return.
+ *
+ * \param[in]        device  OLT device index
+ * \param[in, out]   msg     Application message
+ * \returns BCM_ERR_OK or error code
+ */
+bcmos_errno bcmtr_call(bcmolt_devid device, bcmolt_msg *msg);
+
+/** Register message handler
+ *
+ * \param[in]   device          OLT device index
+ * \param[in]   parm            Registration parameters
+ * \returns BCM_ERR_OK or error code
+ */
+bcmos_errno bcmtr_msg_handler_register(bcmolt_devid device, const bcmtr_handler_parm *parm);
+
+/** Unregister message handler
+ *
+ * \param[in]   device          OLT device index
+ * \param[in]   parm            Registration parameters
+ * \returns BCM_ERR_OK or error code
+ */
+bcmos_errno bcmtr_msg_handler_unregister(bcmolt_devid device, const bcmtr_handler_parm *parm);
+
+/** Get registration info
+ *
+ * \param[in]           device          OLT device index
+ * \param[in,out]       parm            Registration parameters.
+ *                                      instance, group, object, subgroup must be set
+ * \returns BCM_ERR_OK or error code
+ */
+bcmos_errno bcmtr_msg_handler_register_get(bcmolt_devid device, bcmtr_handler_parm *parm);
+
+/** Get transport statistics
+ *
+ * \param[in]   device          OLT device index
+ * \param[out]  stat            Statistics
+ * \returns BCM_ERR_OK or error code
+ */
+bcmos_errno bcmtr_stat_get(bcmolt_devid device, bcmtr_stat *stat);
+
+/* Query whether or not the device is currently connected */
+bcmos_errno bcmtr_is_connected(bcmolt_devid device, bcmos_bool *is_connected);
+
+/* Connect device */
+bcmos_errno bcmtr_connect(bcmolt_devid device);
+
+/* Disconnect device */
+bcmos_errno bcmtr_disconnect(bcmolt_devid device);
+
+/* Low-level disconnect that breaks "physical" connection, but doesn't destroy connection structure and registrations */
+bcmos_errno bcmtr_driver_disconnect(bcmolt_devid device);
+
+/* Repair/reconnect the driver-level connection for an already-connected device */
+bcmos_errno bcmtr_driver_reconnect(bcmolt_devid device);
+
+/* "dropped because of tx_queue overflow" indication */
+typedef void (*F_bcmtr_tx_overflow)(bcmolt_devid device, bcmtr_send_flags send_flags);
+
+/* Register for notification that transmit failed because
+ * tx_queue was full
+ * \param[in]   device          OLT device index
+ * \param[in]   cb              Callback to be called. NULL=unregister
+ * \returns 0=OK or error code < 0
+ */
+bcmos_errno bcmtr_tx_overflow_cb_register(bcmolt_devid device, F_bcmtr_tx_overflow cb);
+
+/*
+ * The following functions are useful for proxy daemon.
+ * They provide direct interface to transport plugin
+ */
+
+/* Connect device in raw mode
+ * Receive task is NOT created
+ * \param[in]   device          OLT device index
+ * \parm[out]   headroom        Headroom that should be reserved in buffer when transmitting
+ * \returns 0=OK or error code < 0
+ */
+bcmos_errno bcmtr_proxy_connect(bcmolt_devid device, uint32_t *headroom);
+
+/* Send data to device
+ * \param[in]   device          OLT device index
+ * \param[in]   txb             Transmit buffer
+ * \returns 0=OK or error code < 0
+ */
+bcmos_errno bcmtr_proxy_send(bcmolt_devid device, bcmolt_buf *tx_buf);
+
+/* Receive data from device
+ * \param[in]   device          OLT device index
+ * \param[in]   rxb             Receive buffer
+ * \returns 0=OK, BCM_ERR_TIMEOUT-timeout and no message, other errors <0
+ */
+bcmos_errno bcmtr_proxy_receive(bcmolt_devid device, bcmolt_buf *rx_buf);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* BCMTR_INTERFACE_H_ */
diff --git a/bcm68620_release/release/host_driver/transport/bcmtr_internal.h b/bcm68620_release/release/host_driver/transport/bcmtr_internal.h
new file mode 100644
index 0000000..3b03e29
--- /dev/null
+++ b/bcm68620_release/release/host_driver/transport/bcmtr_internal.h
@@ -0,0 +1,151 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef BCMTR_INTERNAL_H_
+#define BCMTR_INTERNAL_H_
+
+#include <bcmos_system.h>
+#include <bcmolt_buf.h>
+#include <bcmolt_msg_pack.h>
+#include <bcmtr_interface.h>
+#include <bcmtr_plugin.h>
+#include <bcm_config.h>
+
+#include "bcmtr_header.h"
+
+/** Transport configuration parameters */
+typedef struct
+{
+    bcmtr_plugin_cfg plugin_cfg;        /**< Transport plugin configuration parameters */
+
+    /** Limits and timeouts.
+     * If not set, the appropriate BCM_TR_default defined in bcmConfig.h is used
+     */
+    uint32_t max_retries;       /**< Max number of request retransmissions */
+    uint32_t msg_timeout;       /**< Max time to wait for response or next message part (ms) */
+    uint32_t max_requests;      /**< Max number of outstanding requests */
+    uint32_t max_autos;         /**< Max number of multi-part autonomous messages */
+    uint32_t max_fragments;     /**< Max number of multi-part message fragments */
+    uint32_t msg_wait_timeout;  /**< Message waiting timeout (ms) */
+    uint32_t msg_ready_timeout; /**< Time that transaction is kept after notifying application that it finished (ms) */
+    uint32_t max_mtu;           /**< Max MTU size (bytes) */
+
+    int rx_thread_priority;     /**< Receive thread priority. If set -1, Rx thread is NOT created */
+} bcmtr_cfg;
+
+/** Transport connection control block */
+typedef struct bcmtr_conn bcmtr_conn;
+
+/** Reassemble block */
+typedef struct bcmtr_reass
+{
+    bcmolt_buf *fragments;              /** Array of bcmtr_cfg.max_fragments */
+    uint32_t num_fragments;             /** Number of fragments filled in fragments array */
+    uint32_t max_fragment;              /** Max fragment number. Set when last fragment is received */
+    uint32_t total_size;                /** Total size of received fragments */
+} bcmtr_reass;
+
+/** Transport header list head */
+typedef TAILQ_HEAD(bcmtr_msg_list, bcmtr_msg) bcmtr_msg_list;
+
+/** Transport transaction control block */
+struct bcmtr_msg
+{
+    bcmolt_buf tx_buf;                  /**< Transmit buffer info (request only) */
+    bcmolt_buf rx_buf;                  /**< Receive buffer info (response or autonomous) */
+    uint32_t timestamp;                 /**< Message timestamp. Tx or last Rx */
+    uint16_t tx_count;                  /**< Number of times message was transmitted */
+    bcmtr_hdr hdr;                      /**< Transport header */
+    TAILQ_ENTRY(bcmtr_msg) l;           /**< Transport message list entry */
+    bcmtr_reass *segm;                  /**< Segmentation block */
+    bcmtr_reass *reass;                 /**< Reassemble block */
+    bcmolt_msg *msg;                    /**< Message reference */
+    bcmolt_subchannel subch;            /**< Sub-channel via which message was received */
+    bcmos_errno err;                    /**< Transport status */
+
+    /* Transport header is cleared up to this point when released.
+     * "err" field is the last in the section that gets cleared.
+     * Do not move fields below above "err"!
+     */
+#define BCMTR_HDR_CLEAR_SIZE   (offsetof(bcmtr_msg, err) + sizeof(bcmos_errno))
+    bcmtr_msg_list *free_list;          /**< Free list head reference */
+    bcmtr_conn *conn;                   /**< Connection back reference */
+    bcmos_sem sem;                      /**< "wait for response" semaphore */
+    bcmos_msg ipc_hdr;                  /**< IPC message header */
+};
+
+/** Message handler context */
+typedef struct bcmtr_handler
+{
+    f_bcmolt_msg_handler app_cb;        /**< Application callback function */
+    bcmolt_auto_flags flags;            /**< Registration flag: call in context of transport rx thread or app module */
+    bcmos_module_id module;             /**< Optional module to dispatch received message to */
+} bcmtr_handler;
+
+/** Transport connection control block */
+struct bcmtr_conn
+{
+    char name[16];                      /**< Transport name */
+    bcmolt_devid device;                /**< Device index */
+    bcmtr_channel_id channel;           /**< Channels served by this transport */
+    bcmtr_cfg cfg;                      /**< Transport configuration parameters */
+    bcmtr_driver driver;                /**< Transport driver */
+    bcmtr_plugin_channel drv_priv;      /**< Plugin driver private data */
+    bcmos_task rx_thread;               /**< RX thread handle */
+    bcmos_mutex mutex;                  /**< Mutex protecting the transport structure */
+    uint32_t last_timeout_check;        /**< Last timeout check timestamp */
+    uint32_t timeout_check_period;      /**< Time-out check period */
+    bcmtr_msg_list msg_list;            /**< Message list head */
+    bcmtr_msg_list free_req_list;       /**< Free request block list */
+    bcmtr_msg_list free_auto_list;      /**< Free autonomous block list */
+    bcmtr_msg *tmsg_array;              /**< Pre-allocated array of transport headers */
+    bcmtr_stat stat;                    /**< Statistics */
+    bcmos_bool connected;               /**< Transport state */
+    uint16_t num_requests;              /**< Number of outstanding requests */
+    uint16_t num_auto;                  /**< Number of autonomous messages being reassembled */
+    uint16_t corr_tag;                  /**< Last used correlation tag */
+    bcmos_bool rx_thread_created;       /**< TRUE=RX thread was created */
+    int kill_request;                   /**< Transport thread is commanded to die */
+    int kill_done;                      /**< Transport thread is dead */
+};
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+bcmos_errno bcmtr_cfg_get(bcmolt_devid device, bcmtr_cfg *cfg, bcmtr_driver *driver);
+
+bcmos_errno _bcmtr_conn_get(bcmolt_devid device, bcmtr_conn **conn);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* BCMTR_INTERNAL_H_ */
diff --git a/bcm68620_release/release/host_driver/transport/bcmtr_transport.c b/bcm68620_release/release/host_driver/transport/bcmtr_transport.c
new file mode 100644
index 0000000..029158e
--- /dev/null
+++ b/bcm68620_release/release/host_driver/transport/bcmtr_transport.c
@@ -0,0 +1,1713 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#include <bcmos_system.h>
+#include <bcmtr_interface.h>
+#include <bcmtr_debug.h>
+
+#include "bcmtr_header.h"
+#include "bcmtr_internal.h"
+
+typedef struct
+{
+    bcmtr_conn *conn; /**< Connection dynamic info (allocated on connect) */
+    bcmtr_handler msg_handler[BCMOLT_GROUP_ID__NUM_OF][BCMTR_MAX_INSTANCES];
+    F_bcmtr_tx_overflow overflow_cb;    /**< Callback to be called in case of tx drop because of queue overflow */
+} bcmtr_conn_info;
+
+static bcmtr_conn_info conn_info[BCMTR_MAX_OLTS]; /* Store connection info separately per OLT */
+
+static bcmos_errno _bcmtr_connect(bcmolt_devid device, bcmtr_conn **conn, bcmos_bool raw_mode);
+
+static bcmos_mutex conn_lock;
+
+/* Get existing connection. If none - setup new.
+ * If raw_mode is TRUE, the connection is intended for use by raw interface
+ * bcmtr_proxy_xx(). In this case RX task is not created
+ */
+static bcmos_errno _bcmtr_conn_get_any(bcmolt_devid device, bcmtr_conn **conn, bcmos_bool is_raw)
+{
+    bcmos_errno err;
+    if (device >= BCMTR_MAX_OLTS)
+    {
+        return BCM_ERR_RANGE;
+    }
+    *conn = conn_info[device].conn;
+    if (*conn)
+    {
+        return BCM_ERR_OK;
+    }
+    err = _bcmtr_connect(device, &conn_info[device].conn, is_raw);
+    *conn = conn_info[device].conn;
+    return err;
+}
+
+/* Get existing connection. If none - setup new */
+bcmos_errno _bcmtr_conn_get(bcmolt_devid device, bcmtr_conn **conn)
+{
+    return _bcmtr_conn_get_any(device, conn, BCMOS_FALSE);
+}
+
+/* Free reassemble block */
+static void _bcmtr_reass_block_free(bcmtr_reass **prb)
+{
+    bcmtr_reass *reass = *prb;
+    int i;
+
+    for (i=0; i<reass->num_fragments; i++)
+    {
+        bcmolt_buf_free(&reass->fragments[i]);
+    }
+    bcmos_free(reass);
+    *prb = NULL;
+}
+
+/* Free transport header. Called under transport lock */
+static void _bcmtr_tmsg_free(bcmtr_msg *tmsg, bcmtr_msg_list *cur_list)
+{
+    /* Remove from the list it is in, if any */
+    if (cur_list)
+        TAILQ_REMOVE(cur_list, tmsg, l);
+
+    bcmolt_buf_free(&tmsg->tx_buf);
+    bcmolt_buf_free(&tmsg->rx_buf);
+    if (tmsg->reass)
+        _bcmtr_reass_block_free(&tmsg->reass);
+    memset(tmsg, 0, BCMTR_HDR_CLEAR_SIZE);
+
+    /* Request-response or autonomous ? */
+    TAILQ_INSERT_TAIL(tmsg->free_list, tmsg, l);
+}
+
+/* Unpack message. *unpacked is set=NULL in case of error */
+static inline bcmos_errno _bcmtr_msg_unpack(bcmtr_conn *conn, bcmolt_buf *buf, bcmtr_hdr *hdr, uint32_t ts, bcmolt_msg **msg)
+{
+    int16_t err;
+    uint8_t *packed = buf->curr;
+    uint32_t packed_length = bcmolt_buf_get_remaining_size(buf);
+
+    /* Unpack */
+    BUG_ON(!buf->start);
+    err = bcmolt_msg_unpack(buf, msg);
+    if (err < 0)
+    {
+        BCMTR_CLD_CHECK_NOTIFY(conn->device, hdr, BCMTR_CLD_EV_RECV_DISCARD, ts, packed, packed_length, NULL);
+        ++conn->stat.unpack_errors;
+        return err;
+    }
+
+    BCMTR_CLD_CHECK_NOTIFY(conn->device, hdr, BCMTR_CLD_EV_RECV, ts, packed, packed_length, *msg);
+
+    return BCM_ERR_OK;
+}
+
+/* Transport IPC release callback */
+static void _bcmtr_ipc_msg_release(bcmos_msg *m)
+{
+    BCMOS_TRACE_ERR("We shouldn't be here!\n");
+}
+
+/* Transport IPC message handler.
+ * Called in context of the target module as part
+ * of dispatching message to the user task.
+ * It unpacks message, releases transport header and calls user callback
+ */
+static void _bcmtr_ipc_msg_handler(bcmos_module_id module_id, bcmos_msg *m)
+{
+    bcmos_errno err;
+
+    bcmtr_msg *tmsg = m->data;
+    bcmtr_conn *conn = tmsg->conn;
+    bcmolt_msg *msg = NULL;
+
+    /* Unpack */
+    err = _bcmtr_msg_unpack(conn, &tmsg->rx_buf, &tmsg->hdr, tmsg->timestamp, &msg);
+    if (err != BCM_ERR_OK)
+    {
+        BCMOS_TRACE_ERR(
+            "Unpack error for module %d. Error %s (%d)\n",
+            module_id,
+            bcmos_strerror(err),
+            err);
+        msg = NULL;
+    }
+
+    if (msg != NULL)
+    {
+        bcmtr_handler *h = &conn_info[conn->device].msg_handler[tmsg->hdr.msg_id][tmsg->hdr.instance];
+        msg->subch = tmsg->subch;
+        if (h->app_cb)
+        {
+            msg->corr_tag = tmsg->hdr.corr_tag;
+            h->app_cb(conn->device, msg);
+        }
+        else
+        {
+            bcmolt_msg_free(msg);
+            ++conn->stat.no_rx_handler;
+        }
+    }
+
+    /* Release transport header under conn lock */
+    bcmos_mutex_lock(&conn->mutex);
+    _bcmtr_tmsg_free(tmsg, NULL);
+    bcmos_mutex_unlock(&conn->mutex);
+}
+
+/* Init IPC header in transport message */
+static void _bcmtr_tmsg_ipc_init(bcmtr_msg *tmsg)
+{
+    tmsg->ipc_hdr.start = tmsg->ipc_hdr.data = tmsg;
+    tmsg->ipc_hdr.type = BCMOS_MSG_ID_INTERNAL_IPC;
+    tmsg->ipc_hdr.release = _bcmtr_ipc_msg_release;
+    tmsg->ipc_hdr.handler = _bcmtr_ipc_msg_handler;
+}
+
+/* Pre-allocate transport header array, put all blocks on free lists */
+static int _bcmtr_tmsg_list_alloc(bcmtr_conn *conn)
+{
+    int n_hdr, i;
+    bcmtr_msg *tmsg;
+
+    n_hdr = conn->cfg.max_requests + conn->cfg.max_autos;
+    conn->tmsg_array = bcmos_calloc(sizeof(bcmtr_msg) * n_hdr);
+    if (!conn->tmsg_array)
+        return BCM_ERR_NOMEM;
+
+    tmsg = conn->tmsg_array;
+    for (i=0; i<conn->cfg.max_requests; i++, tmsg++)
+    {
+        bcmos_errno rc;
+
+        TAILQ_INSERT_TAIL(&conn->free_req_list, tmsg, l);
+        tmsg->free_list = &conn->free_req_list;
+        rc = bcmos_sem_create(&tmsg->sem, 0, 0, NULL);
+        if (rc != BCM_ERR_OK)
+            return rc;
+        _bcmtr_tmsg_ipc_init(tmsg);
+        tmsg->conn = conn;
+    }
+    for (i=0; i<conn->cfg.max_autos; i++, tmsg++)
+    {
+        TAILQ_INSERT_TAIL(&conn->free_auto_list, tmsg, l);
+        tmsg->free_list = &conn->free_auto_list;
+        _bcmtr_tmsg_ipc_init(tmsg);
+        tmsg->conn = conn;
+    }
+    return BCM_ERR_OK;
+}
+
+/* Cleanup function - free transport headers */
+static void _bcmtr_tmsg_list_free(bcmtr_conn *conn)
+{
+    bcmtr_msg *tmsg, *tmp_tmsg;
+
+    if (!conn->tmsg_array)
+        return;
+
+    TAILQ_FOREACH_SAFE(tmsg, &conn->msg_list, l, tmp_tmsg)
+    {
+        bcmolt_msg *msg = tmsg->msg;
+        /* Release waiting task if request-response */
+        if (msg && tmsg->err == BCM_ERR_IN_PROGRESS)
+        {
+            msg->err = BCM_ERR_COMM_FAIL;
+            bcmos_sem_post(&tmsg->sem);
+        }
+    }
+    TAILQ_FOREACH_SAFE(tmsg, &conn->free_req_list, l, tmp_tmsg)
+    {
+        bcmos_sem_destroy(&tmsg->sem);
+    }
+    bcmos_free(conn->tmsg_array);
+}
+
+/* Allocate transport header from the given free list.
+ * Must be called under lock
+ */
+static inline bcmtr_msg *_bcmtr_msg_get_free(bcmtr_msg_list *free_list)
+{
+    bcmtr_msg *tmsg = TAILQ_FIRST(free_list);
+    if (tmsg)
+        TAILQ_REMOVE(free_list, tmsg, l);
+    return tmsg;
+}
+
+/* Find message by correlation tag
+ * Called under lock
+ */
+static bcmtr_msg *_bcmtr_msg_get_by_corr_tag(const bcmtr_conn *conn, const bcmtr_hdr *hdr)
+{
+    bcmtr_msg *tmsg;
+
+    TAILQ_FOREACH(tmsg, &conn->msg_list, l)
+    {
+        if (tmsg->hdr.corr_tag==hdr->corr_tag && tmsg->hdr.msg_id==hdr->msg_id && tmsg->err == BCM_ERR_IN_PROGRESS)
+            break;
+    }
+    return tmsg;
+}
+
+/* Message reassembler. Returns TRUE if message reassembling is completed */
+static bcmos_bool _bcmtr_reassemble(bcmtr_conn *conn, bcmtr_msg *tmsg, bcmolt_buf *buf)
+{
+    bcmtr_hdr *hdr = &tmsg->hdr;
+    uint16_t frag_num = hdr->frag_number;
+    bcmos_bool done = BCMOS_FALSE;
+    bcmos_bool is_last;
+
+    is_last = !hdr->more_fragments;
+
+    /* Single-buffer message ? */
+    if (is_last && !frag_num)
+    {
+        tmsg->rx_buf = *buf;
+        tmsg->err = BCM_ERR_OK;
+        buf->start = NULL;
+        return BCMOS_TRUE;
+    }
+
+    /*
+     * Multi-part message
+     */
+
+    /* Discard if invalid fragment number or duplicate */
+    if (frag_num >= conn->cfg.max_fragments ||
+        (tmsg->reass && tmsg->reass->fragments[frag_num].start) )
+    {
+        bcmolt_buf_free(buf);
+        /* If last out-of range fragment was received report it.
+         * We want to avoid request retransmission in this case */
+        if (frag_num >= conn->cfg.max_fragments)
+        {
+            tmsg->err = BCM_ERR_TOO_MANY_FRAGS;
+            return is_last;
+        }
+        ++conn->stat.frag_invalid;
+        return BCMOS_FALSE;
+    }
+
+    /* Allocate reassembly buffer if not done yet and store fragment */
+    if (!tmsg->reass)
+    {
+        tmsg->reass = bcmos_calloc(sizeof(bcmtr_reass) + conn->cfg.max_fragments * sizeof(bcmolt_buf));
+        if (!tmsg->reass)
+        {
+            tmsg->err = BCM_ERR_NOMEM;
+            ++conn->stat.msg_no_mem;
+            bcmolt_buf_free(buf);
+            return BCMOS_FALSE;
+        }
+        tmsg->reass->fragments = (bcmolt_buf *)((long)tmsg->reass + sizeof(bcmtr_reass));
+    }
+    tmsg->reass->total_size += bcmolt_buf_get_remaining_size(buf);
+    tmsg->reass->fragments[frag_num] = *buf;
+    buf->start = NULL;
+    tmsg->reass->num_fragments++;
+    if (is_last)
+        tmsg->reass->max_fragment = frag_num;
+    done = (tmsg->reass->max_fragment && (tmsg->reass->num_fragments > tmsg->reass->max_fragment));
+    ++conn->stat.frag_received;
+
+    /* Reassemble if done */
+    if (done)
+    {
+        /* Allocate big flat buffer */
+        if (bcmolt_buf_alloc(&tmsg->rx_buf, tmsg->reass->total_size, BCMTR_BUF_ENDIAN) == BCM_ERR_OK)
+        {
+            int i;
+            uint8_t *body = tmsg->rx_buf.start;
+
+            for (i=0; i<tmsg->reass->num_fragments; i++)
+            {
+                uint32_t frag_size = bcmolt_buf_get_remaining_size(&tmsg->reass->fragments[i]);
+                BUG_ON(!tmsg->reass->fragments[i].curr);
+                memcpy(body, tmsg->reass->fragments[i].curr, frag_size);
+                body += frag_size;
+            }
+            tmsg->err = BCM_ERR_OK;
+        }
+        else
+        {
+            /* Reassembly buffer allocation failed */
+            tmsg->err = BCM_ERR_NOMEM;
+        }
+    }
+    else
+    {
+        /* More fragments expected. Update timestamp to prolong timing out */
+        tmsg->timestamp = bcmos_timestamp();
+    }
+
+    return done;
+}
+
+/* Notify application that message is ready */
+static inline void _bcmtr_notify_ready(bcmtr_conn *conn, bcmtr_msg *tmsg)
+{
+    bcmos_sem_post(&tmsg->sem);
+}
+
+/* Notify rx request/response message
+ * called under connection lock
+ */
+static inline void _bcmtr_notify_rx_response(bcmtr_conn *conn, bcmtr_msg *tmsg)
+{
+    ++conn->stat.msg_resp_received;
+
+    /* Now unlock and notify application. Autonomous handler is only called if message is OK.
+       The lock has been taken in _bcmtr_rx_packet */
+    bcmos_mutex_unlock(&conn->mutex);
+
+    /* Release waiting application. It will take care of unpacking */
+    _bcmtr_notify_ready(conn, tmsg);
+}
+
+/* Notify rx autonomous message
+ * called under connection lock
+ */
+static inline void _bcmtr_notify_rx_req_auto(bcmtr_conn *conn, bcmtr_msg *tmsg)
+{
+    bcmolt_buf rx_buf;
+    bcmolt_msg *msg = NULL;
+    bcmolt_group_id msg_id = tmsg->hdr.msg_id;
+    bcmtr_handler *h;
+    uint16_t corr_tag;
+    bcmtr_hdr hdr = tmsg->hdr;
+    uint32_t ts = tmsg->timestamp;
+    bcmolt_subchannel subch = tmsg->subch;
+    bcmos_errno err;
+
+    if (msg_id >= BCMOLT_GROUP_ID__NUM_OF)
+    {
+        BCMOS_TRACE_ERR("Unexpected msg group id: %u\n", tmsg->hdr.msg_id);
+        _bcmtr_tmsg_free(tmsg, NULL);
+        bcmos_mutex_unlock(&conn->mutex);
+        return;
+    }
+    if (tmsg->hdr.instance >= BCMTR_MAX_INSTANCES)
+    {
+        BCMOS_TRACE_ERR("Unexpected instance id: %u\n", tmsg->hdr.instance);
+        _bcmtr_tmsg_free(tmsg, NULL);
+        bcmos_mutex_unlock(&conn->mutex);
+        return;
+    }
+    h = &conn_info[conn->device].msg_handler[tmsg->hdr.msg_id][tmsg->hdr.instance];
+    BUG_ON(!h->app_cb);
+    ++conn->stat.msg_req_auto_received;
+
+    /* If dispatch is required - do it.
+     * The message will be unpacked in the context of the receiver
+     */
+    if ((h->flags & BCMOLT_AUTO_FLAGS_DISPATCH))
+    {
+        err = bcmos_msg_send_to_module(h->module, &tmsg->ipc_hdr, 0);
+        if (err)
+        {
+            BCMOS_TRACE_ERR("Can't deliver message to module %d. Error %s(%d)\n",
+                h->module, bcmos_strerror(err), err);
+            _bcmtr_tmsg_free(tmsg, NULL);
+        }
+        bcmos_mutex_unlock(&conn->mutex);
+        return;
+    }
+
+    /* No dispatch. Unpacking in the context of rx thread */
+    corr_tag = tmsg->hdr.corr_tag;
+    /* Make sure that rx_buf is not released by the following _bcmtr_msg_free.
+     * It is needed for unpack and will be released separately later. */
+    rx_buf = tmsg->rx_buf;
+    tmsg->rx_buf.start = NULL;
+    _bcmtr_tmsg_free(tmsg, NULL);
+
+    /* Release connection lock taken in _bcmtr_rx_packet */
+    bcmos_mutex_unlock(&conn->mutex);
+
+    /* Unpack and deliver */
+    _bcmtr_msg_unpack(conn, &rx_buf, &hdr, ts, &msg);
+
+    bcmolt_buf_free(&rx_buf);
+
+    if (msg)
+    {
+        msg->corr_tag = corr_tag;
+        msg->subch = subch;
+        h->app_cb(conn->device, msg);
+    }
+}
+
+/* Handle rx data. Returns number of messages that was identified and reassembled. Can be 0 or 1 */
+static int _bcmtr_rx_packet(bcmtr_conn *conn, bcmolt_subchannel subch, bcmolt_buf *buf)
+{
+    bcmtr_hdr hdr;
+    bcmtr_msg *tmsg;
+    bcmos_bool msg_done;
+    bcmos_bool is_response;
+
+    /* Transport lock. This lock is needed to
+     * - allocate/release transport header
+     * - update statistics
+     */
+    bcmos_mutex_lock(&conn->mutex);
+
+    /* If some data was received - handle it */
+    if (buf->len < BCMTR_HDR_SIZE)
+    {
+        /* Message is too short */
+        ++conn->stat.msg_comm_err;
+        goto rx_free_buf_and_error_exit;
+    }
+
+    if (NULL == buf->curr)
+    {
+        BCMOS_TRACE_ERR("Invalid buffer received!\n");
+        goto rx_done;
+    }
+
+    bcmtr_header_unpack(buf->curr, &hdr);
+    bcmolt_buf_skip(buf, BCMTR_HDR_SIZE);
+    is_response = (hdr.dir == BCMOLT_MSG_DIR_RESPONSE);
+
+    /* Find transport header. If not found - allocate new for autonomous message */
+    tmsg = _bcmtr_msg_get_by_corr_tag(conn, &hdr);
+    if (!tmsg)
+    {
+        if (!is_response)
+        {
+            /* Allocate new transport block */
+            tmsg = _bcmtr_msg_get_free(&conn->free_auto_list);
+            if (!tmsg)
+            {
+                ++conn->stat.msg_too_many_auto;
+                goto rx_free_buf_and_error_exit;
+            }
+            tmsg->err = BCM_ERR_IN_PROGRESS;
+            TAILQ_INSERT_TAIL(&conn->msg_list, tmsg, l);
+        }
+        else
+        {
+            /* Response, but no request - discard */
+            ++conn->stat.msg_no_req;
+            BCMTR_CLD_CHECK_NOTIFY(conn->device, &hdr, BCMTR_CLD_EV_RECV_DISCARD,
+                bcmos_timestamp(), buf->curr, bcmolt_buf_get_remaining_size(buf), NULL);
+            goto rx_free_buf_and_error_exit;
+        }
+    }
+
+    /* Reassemble. "buf" should not be used following this call */
+    tmsg->hdr = hdr;
+    tmsg->subch = subch;
+    msg_done = _bcmtr_reassemble(conn, tmsg, buf);
+
+    /* If expects more parts - nothing more to do here */
+    if (!msg_done)
+        goto rx_done;
+
+    if (tmsg->err && !is_response)
+    {
+        _bcmtr_tmsg_free(tmsg, &conn->msg_list);
+        goto rx_done;
+    }
+
+    /* Done with the message. Get it out of pending message queue to avoid race condition
+     * when timeout happens while the message is in flight to the destination task.
+     */
+    TAILQ_REMOVE(&conn->msg_list, tmsg, l);
+
+    /* Notify rx. conn->mutex is still taken. It will be released
+       inside _bcmtr_notify_rx_response(), _bcmtr_notify_rx_req_auto() */
+    tmsg->timestamp = bcmos_timestamp();
+    if (is_response)
+    {
+        _bcmtr_notify_rx_response(conn, tmsg);
+    }
+    else
+    {
+        _bcmtr_notify_rx_req_auto(conn, tmsg);
+    }
+
+    return 1;
+
+    /* Error return */
+rx_free_buf_and_error_exit:
+    bcmos_mutex_unlock(&conn->mutex);
+    bcmolt_buf_free(buf);
+    return 0;
+
+    /* return without a buffer */
+rx_done:
+    bcmos_mutex_unlock(&conn->mutex);
+    return 0;
+}
+
+/*
+ * Low-level fragment and send function.
+ * It allocates a series of buffers up to MAX_MTU size, copies original data into them and sends.
+ * The original buffer stays intact - in case it should be retransmitted
+ */
+static bcmos_errno _bcmtr_fragment_and_send(bcmtr_conn *conn, bcmtr_msg *tmsg, bcmtr_send_flags flags)
+{
+    uint32_t frag_number = 0;
+    bcmos_errno err = BCM_ERR_OK;
+    uint32_t data_offset = conn->cfg.plugin_cfg.headroom + BCMTR_HDR_SIZE;
+    uint32_t data_len = bcmolt_buf_get_used(&tmsg->tx_buf) - data_offset;
+    uint8_t *data = tmsg->tx_buf.start + data_offset;
+
+    do
+    {
+        uint32_t send_len = data_len + BCMTR_HDR_SIZE;
+        bcmolt_buf frag;
+
+        if (send_len > conn->cfg.max_mtu)
+        {
+            send_len = conn->cfg.max_mtu;
+            tmsg->hdr.more_fragments = BCMOS_TRUE;
+        }
+        else
+        {
+            tmsg->hdr.more_fragments = BCMOS_FALSE;
+        }
+
+        err = bcmolt_buf_alloc(&frag, send_len + conn->cfg.plugin_cfg.headroom, BCMTR_BUF_ENDIAN);
+        if (err)
+            break;
+
+        tmsg->hdr.frag_number = frag_number++;
+
+        /* Pack correlation tag, command and length */
+        bcmtr_header_pack(&tmsg->hdr, frag.start + conn->cfg.plugin_cfg.headroom);
+        bcmolt_buf_skip(&frag, data_offset);
+        if (bcmolt_buf_write(&frag, data, send_len - BCMTR_HDR_SIZE))
+        {
+            /* Send using customer-provided driver */
+            err = conn->driver.send(conn->drv_priv, tmsg->msg->subch, &frag, flags);
+        }
+        else
+        {
+            err = BCM_ERR_OVERFLOW;
+        }
+        bcmolt_buf_free(&frag);
+        if (err)
+        {
+            break;
+        }
+
+        data_len -= (send_len - BCMTR_HDR_SIZE);
+        data += (send_len - BCMTR_HDR_SIZE);
+
+    } while (data_len);
+
+    return err;
+}
+
+/* Check for time-outs. returns number of messages timed out */
+static int _bcmtr_check_timeout(bcmtr_conn *conn)
+{
+    bcmtr_msg *tmsg, *tmp;
+    uint32_t now;
+    int nmsg = 0;
+    bcmos_errno err;
+
+    /* Transport lock */
+    bcmos_mutex_lock(&conn->mutex);
+
+    now = bcmos_timestamp();
+    TAILQ_FOREACH_SAFE(tmsg, &conn->msg_list, l, tmp)
+    {
+        bcmolt_msg *msg = tmsg->msg;
+
+        if (now - tmsg->timestamp <= conn->cfg.msg_timeout)
+            continue;
+
+        /* Retransmit ? */
+        if (msg && tmsg->tx_count <= conn->cfg.max_retries)
+        {
+            tmsg->timestamp = bcmos_timestamp();
+            BCMTR_CLD_CHECK_NOTIFY(
+                conn->device,
+                &tmsg->hdr,
+                BCMTR_CLD_EV_RESEND,
+                tmsg->timestamp,
+                tmsg->tx_buf.start + conn->cfg.plugin_cfg.headroom + BCMTR_HDR_SIZE,
+                tmsg->tx_buf.len - (conn->cfg.plugin_cfg.headroom + BCMTR_HDR_SIZE),
+                msg);
+
+            /* Fragment and send or send directly, depending on message length */
+            if (bcmolt_buf_get_used(&tmsg->tx_buf) > conn->cfg.max_mtu)
+            {
+                err = _bcmtr_fragment_and_send(conn, tmsg, BCMTR_SEND_FLAGS_PRI_NORMAL);
+            }
+            else
+            {
+                err = conn->driver.send(conn->drv_priv, msg->subch, &tmsg->tx_buf, BCMTR_SEND_FLAGS_PRI_NORMAL);
+            }
+            if (err)
+            {
+                ++conn->stat.msg_comm_err;
+            }
+            ++tmsg->tx_count;
+            continue;
+        }
+
+        /* Giving up */
+        /* Release waiting task if request-response - unless it has already been done */
+        if (msg)
+        {
+            if (tmsg->err == BCM_ERR_IN_PROGRESS)
+            {
+                tmsg->err = BCM_ERR_TIMEOUT;
+            }
+            BCMTR_CLD_CHECK_NOTIFY(
+                conn->device,
+                &tmsg->hdr,
+                BCMTR_CLD_EV_TIMEOUT,
+                bcmos_timestamp(),
+                tmsg->tx_buf.start + conn->cfg.plugin_cfg.headroom + BCMTR_HDR_SIZE,
+                tmsg->tx_buf.len - (conn->cfg.plugin_cfg.headroom + BCMTR_HDR_SIZE),
+                msg);
+            TAILQ_REMOVE(&conn->msg_list, tmsg, l);
+            _bcmtr_notify_ready(conn, tmsg);
+            ++conn->stat.msg_req_timeout;
+        }
+        else
+        {
+            _bcmtr_tmsg_free(tmsg, &conn->msg_list);
+            ++conn->stat.msg_reass_timeout;
+        }
+        ++nmsg;
+    }
+    conn->last_timeout_check = bcmos_timestamp();
+
+    /* Release transport lock */
+    bcmos_mutex_unlock(&conn->mutex);
+
+    return nmsg;
+}
+
+/* Check for receive and timeouts */
+static int _bcmtr_rx_poll(bcmtr_conn *conn, int *pnmsg)
+{
+    bcmolt_buf buf;
+    int nmsg = 0, nmsg_prev;
+    bcmos_errno rc = BCM_ERR_OK;
+    bcmolt_subchannel subch;
+
+    do
+    {
+        nmsg_prev = nmsg;
+
+        /* Plugin driver's recv - get pending rx packet is any.
+         * The function is not allowed to block for more then BCMTR_MSG_TIMEOUT ms
+         */
+        rc = conn->driver.recv(conn->drv_priv, &subch, &buf);
+        if (rc != BCM_ERR_OK)
+        {
+            if (rc == BCM_ERR_NOMEM)
+            {
+                ++conn->stat.msg_no_mem;
+            }
+        }
+        else
+        {
+            nmsg += _bcmtr_rx_packet(conn, subch, &buf);
+        }
+
+        /* Check for timeouts if any */
+        if (bcmos_timestamp() - conn->last_timeout_check > conn->timeout_check_period)
+        {
+            /* Check requests waiting for acknowledge and multy-part messages for timeout.
+             * Timed-out requests are retransmitted.
+             */
+            nmsg += _bcmtr_check_timeout(conn);
+        }
+    } while(nmsg_prev != nmsg);
+
+    *pnmsg = nmsg;
+
+    return rc;
+}
+
+/* Rx thread handler */
+static int _bcmtr_rx_thread_handler(long arg)
+{
+    bcmtr_conn *conn = (bcmtr_conn *)arg;
+    int nmsgs;
+    int rc;
+
+    while(!conn->kill_request)
+    {
+        rc = _bcmtr_rx_poll(conn, &nmsgs);
+        if (rc == BCM_ERR_COMM_FAIL)
+            bcmos_usleep(1000);
+    }
+    conn->kill_done = 1;
+
+    return 0;
+}
+
+/*
+ * Internal transport interface
+ */
+
+
+/** Default message handler - discard */
+static void _bcmtr_dft_msg_handler(bcmolt_devid olt, bcmolt_msg *msg)
+{
+    bcmtr_conn *conn = conn_info[olt].conn;
+
+    /* ToDo: log */
+
+    if (conn)
+        ++conn->stat.no_rx_handler;
+
+    bcmolt_msg_free(msg);
+}
+
+static bcmos_errno _bcmtr_create_rx_thread(bcmtr_conn *conn, bcmos_bool raw_mode)
+{
+    bcmos_errno err = BCM_ERR_OK;
+
+    if (conn->cfg.rx_thread_priority >= 0 && !raw_mode)
+    {
+        bcmos_task_parm parm = {
+            .priority = conn->cfg.rx_thread_priority,
+            .stack_size = BCMTR_RX_THREAD_STACK,
+            .handler = _bcmtr_rx_thread_handler,
+            .name = conn->name,
+            .data = (long)conn
+        };
+        conn->kill_request = BCMOS_FALSE;
+        conn->kill_done = BCMOS_FALSE;
+        err = bcmos_task_create(&conn->rx_thread, &parm);
+        if (err == BCM_ERR_OK)
+            conn->rx_thread_created = BCMOS_TRUE;
+    }
+
+    return err;
+}
+
+static void _bcmtr_destroy_rx_thread(bcmtr_conn *conn)
+{
+    /* Kill rx thread if any */
+    if (conn->rx_thread_created)
+    {
+        conn->kill_request = 1;
+        while(!conn->kill_done)
+            bcmos_usleep(1000);
+        bcmos_task_destroy(&conn->rx_thread);
+    }
+}
+
+static bcmos_errno _bcmtr_connect(bcmolt_devid device, bcmtr_conn **pconn, bcmos_bool raw_mode)
+{
+    bcmtr_conn *conn;
+    bcmos_errno err = BCM_ERR_OK;
+
+    /* Init OS abstraction - just in case */
+    err = bcmos_init();
+    if (err != BCM_ERR_OK && err != BCM_ERR_ALREADY)
+    {
+        return err;
+    }
+
+    bcmos_mutex_lock(&conn_lock);
+
+    /* Allocate */
+    conn = bcmos_calloc(sizeof(*conn));
+    if (!conn)
+    {
+        bcmos_mutex_unlock(&conn_lock);
+        return BCM_ERR_NOMEM;
+    }
+
+    /* Get configuration */
+    err = bcmtr_cfg_get(device, &conn->cfg, &conn->driver);
+    if (err)
+    {
+        bcmos_mutex_unlock(&conn_lock);
+        bcmos_free(conn);
+        return err;
+    }
+
+    snprintf(conn->name, sizeof(conn->name), "tr_rx%u", device);
+    TAILQ_INIT(&conn->free_req_list);
+    TAILQ_INIT(&conn->free_auto_list);
+    TAILQ_INIT(&conn->msg_list);
+    bcmos_mutex_create(&conn->mutex, 0, NULL);
+
+    /* Convert timeouts to us */
+    conn->cfg.msg_timeout *= 1000;
+    conn->cfg.msg_ready_timeout *= 1000;
+    conn->cfg.msg_wait_timeout *= 1000;
+
+    /* Set defaults */
+    conn->timeout_check_period = conn->cfg.msg_wait_timeout;
+    conn->last_timeout_check = bcmos_timestamp();
+
+    /* Allocate and initialize transport blocks and put onto free request and autonomous lists */
+    err = _bcmtr_tmsg_list_alloc(conn);
+
+    /* Open/connect on driver level */
+    err = err ? err : conn->driver.open(device, &conn->cfg.plugin_cfg, &conn->drv_priv);
+    if (err)
+    {
+        bcmos_mutex_destroy(&conn->mutex);
+        goto cleanup;
+    }
+
+    conn->connected = BCMOS_TRUE;
+
+    /* Create rx thread if necessary */
+    err = _bcmtr_create_rx_thread(conn, raw_mode);
+    if (err)
+    {
+        conn->driver.close(conn->drv_priv);
+        bcmos_mutex_destroy(&conn->mutex);
+        goto cleanup;
+    }
+    conn->device = device;
+
+    *pconn = conn;
+    bcmos_mutex_unlock(&conn_lock);
+
+    return BCM_ERR_OK;
+
+cleanup:
+    _bcmtr_tmsg_list_free(conn);
+    bcmos_free(conn);
+    bcmos_mutex_unlock(&conn_lock);
+    return err;
+}
+
+/** Query whether or not the device is currently connected */
+bcmos_errno bcmtr_is_connected(bcmolt_devid device, bcmos_bool *is_connected)
+{
+    bcmtr_conn *conn;
+    if (device >= BCMTR_MAX_OLTS)
+    {
+        return BCM_ERR_RANGE;
+    }
+    conn = conn_info[device].conn;
+    *is_connected = (conn != NULL && conn->connected);
+    return BCM_ERR_OK;
+}
+
+/** Open transport channel */
+bcmos_errno bcmtr_connect(bcmolt_devid device)
+{
+    bcmtr_conn *conn;
+    return _bcmtr_conn_get(device, &conn);
+}
+
+/** Close transport channel */
+bcmos_errno bcmtr_disconnect(bcmolt_devid device)
+{
+    bcmtr_conn *conn;
+
+    if (device >= BCMTR_MAX_OLTS)
+    {
+        return BCM_ERR_RANGE;
+    }
+    bcmos_mutex_lock(&conn_lock);
+    conn = conn_info[device].conn;
+    if (!conn)
+    {
+        bcmos_mutex_unlock(&conn_lock);
+        return BCM_ERR_NOT_CONNECTED;
+    }
+    conn_info[device].conn = NULL;
+
+    /* Kill rx thread if any */
+    _bcmtr_destroy_rx_thread(conn);
+
+    bcmos_mutex_lock(&conn->mutex);
+    /* Close connection */
+    if (conn->driver.close)
+    {
+        conn->driver.close(conn->drv_priv);
+    }
+
+    /* Release all pending messages */
+    bcmos_usleep(100000);
+    _bcmtr_tmsg_list_free(conn);
+
+    bcmos_mutex_unlock(&conn->mutex);
+    bcmos_mutex_destroy(&conn->mutex);
+    bcmos_free(conn);
+
+    bcmos_mutex_unlock(&conn_lock);
+
+    return BCM_ERR_OK;
+}
+
+/* Low-level disconnect that breaks "physical" connection, but doesn't destroy connection structure and registrations */
+bcmos_errno bcmtr_driver_disconnect(bcmolt_devid device)
+{
+    bcmtr_conn *conn;
+    bcmos_errno err = BCM_ERR_OK;
+
+    if (device >= BCMTR_MAX_OLTS)
+    {
+        return BCM_ERR_RANGE;
+    }
+
+    bcmos_mutex_lock(&conn_lock);
+
+    conn = conn_info[device].conn;
+    if (conn == NULL || !conn->connected)
+    {
+        bcmos_mutex_unlock(&conn_lock);
+        return BCM_ERR_NOT_CONNECTED;
+    }
+
+    _bcmtr_destroy_rx_thread(conn);
+
+    bcmos_mutex_lock(&conn->mutex);
+
+    /* Close driver connection */
+    if (conn->driver.close != NULL)
+    {
+        err = conn->driver.close(conn->drv_priv);
+        if (err != BCM_ERR_OK)
+        {
+            BCMOS_TRACE_ERR("Failed to close transport driver: %s (%d)\n", bcmos_strerror(err), err);
+        }
+    }
+
+    conn->connected = BCMOS_FALSE;
+
+    bcmos_mutex_unlock(&conn->mutex);
+
+    bcmos_mutex_unlock(&conn_lock);
+
+    return err;
+}
+
+/* Repair/reconnect the driver-level connection for an already-connected device */
+bcmos_errno bcmtr_driver_reconnect(bcmolt_devid device)
+{
+    bcmtr_conn *conn;
+    bcmos_errno err;
+
+    if (device >= BCMTR_MAX_OLTS)
+    {
+        return BCM_ERR_RANGE;
+    }
+    bcmos_mutex_lock(&conn_lock);
+    conn = conn_info[device].conn;
+    if (conn == NULL)
+    {
+        bcmos_mutex_unlock(&conn_lock);
+        return BCM_ERR_NOT_CONNECTED;
+    }
+
+    if (conn->connected)
+    {
+        bcmtr_driver_disconnect(device);
+    }
+    bcmos_mutex_lock(&conn->mutex);
+
+    /* Re-open driver connection */
+    err = conn->driver.open(device, &conn->cfg.plugin_cfg, &conn->drv_priv);
+    if (err != BCM_ERR_OK)
+    {
+        BCMOS_TRACE_ERR("Failed to re-open transport driver: %s (%d)\n", bcmos_strerror(err), err);
+    }
+
+    err = _bcmtr_create_rx_thread(conn, BCMOS_FALSE);
+    if (err != BCM_ERR_OK)
+    {
+        BCMOS_TRACE_ERR("Failed to create RX transport task: %s (%d)\n", bcmos_strerror(err), err);
+        conn->driver.close(conn->drv_priv);
+    }
+    conn->connected = BCMOS_TRUE;
+
+    bcmos_mutex_unlock(&conn->mutex);
+
+    bcmos_mutex_unlock(&conn_lock);
+
+    return err;
+}
+
+/* Register for notification that transmit failed because tx_queue was full */
+bcmos_errno bcmtr_tx_overflow_cb_register(bcmolt_devid device, F_bcmtr_tx_overflow cb)
+{
+    if (device >= BCMTR_MAX_OLTS)
+    {
+        return BCM_ERR_RANGE;
+    }
+
+    conn_info[device].overflow_cb = cb;
+    return BCM_ERR_OK;
+}
+
+/* Send message.
+ * Internal function. Called under connection lock
+ */
+static bcmos_errno _bcmtr_send(bcmtr_conn *conn, bcmolt_msg *msg, bcmolt_buf *tx_buf, bcmtr_send_flags flags, bcmtr_msg **ptmsg)
+{
+    bcmtr_msg *tmsg;
+    bcmos_errno err;
+
+    if (!conn->connected)
+    {
+        ++conn->stat.not_connected;
+        return BCM_ERR_NOT_CONNECTED;
+    }
+
+    /* Allocate message transport header */
+    tmsg = _bcmtr_msg_get_free(&conn->free_req_list);
+    if (!tmsg)
+    {
+        ++conn->stat.msg_no_mem;
+        return BCM_ERR_TOO_MANY_REQS;
+    }
+    tmsg->msg = msg;
+
+    /* Fill transport header */
+    err = bcmtr_header_fill(tmsg->msg, &tmsg->hdr);
+    if (err)
+        return err;
+
+    tmsg->err = BCM_ERR_IN_PROGRESS;
+    tmsg->tx_count = 1;
+
+    /* Save transmit buffer. It will be released together with transport header */
+    tmsg->tx_buf = *tx_buf;
+
+    tmsg->timestamp = bcmos_timestamp();
+
+    if (bcmolt_buf_get_used(tx_buf) > conn->cfg.max_mtu)
+    {
+        err = _bcmtr_fragment_and_send(conn, tmsg, flags);
+    }
+    else
+    {
+        /* Pack correlation tag, command and length */
+        bcmtr_header_pack(&tmsg->hdr, tmsg->tx_buf.start + conn->cfg.plugin_cfg.headroom);
+
+        /* Send using customer-provided driver */
+        err = conn->driver.send(conn->drv_priv, msg->subch, &tmsg->tx_buf, flags);
+    }
+    BCMTR_CLD_CHECK_NOTIFY(
+        conn->device,
+        &tmsg->hdr,
+        BCMTR_CLD_EV_SEND,
+        tmsg->timestamp,
+        tmsg->tx_buf.start + conn->cfg.plugin_cfg.headroom + BCMTR_HDR_SIZE,
+        tmsg->tx_buf.len - (conn->cfg.plugin_cfg.headroom + BCMTR_HDR_SIZE),
+        msg);
+    if (err != BCM_ERR_OK)
+    {
+        ++conn->stat.msg_comm_err;
+        goto cleanup;
+    }
+
+    tx_buf->start = NULL; /* Ownership passed to tmsg */
+    ++conn->stat.msg_sent;
+
+    if (ptmsg)
+    {
+        *ptmsg = tmsg;
+    }
+    else
+    {
+        _bcmtr_tmsg_free(tmsg, NULL);
+    }
+
+    return BCM_ERR_OK;
+
+    /* error */
+cleanup:
+    tmsg->tx_buf.start = NULL; /* prevent tx buffer de-allocation */
+    _bcmtr_tmsg_free(tmsg, NULL);
+    return err;
+}
+
+
+/* Allocate tx buffer and pack */
+static bcmos_errno _bcmtr_pack(const bcmtr_conn *conn, bcmolt_msg *msg, bcmolt_buf *buf)
+{
+    int32_t len = bcmolt_msg_get_packed_length(msg);
+    uint32_t headroom = conn->cfg.plugin_cfg.headroom;
+    bcmos_errno err;
+
+    if (len < 0)
+        return (bcmos_errno)len;
+
+    /* Reallocate if too big */
+    len += BCMTR_HDR_SIZE + headroom;
+    if (buf->start)
+    {
+        if (buf->len < len)
+        {
+            /* ToDo: reallocate */
+            return BCM_ERR_OVERFLOW;
+        }
+        else
+        {
+            bcmolt_buf_init(buf, len, buf->start, BCMTR_BUF_ENDIAN);
+        }
+    }
+    else
+    {
+        err = bcmolt_buf_alloc(buf, len, BCMTR_BUF_ENDIAN);
+        if (err)
+        {
+            return err;
+        }
+    }
+
+    /* Reserve room for header */
+    buf->curr = buf->start + BCMTR_HDR_SIZE + headroom;
+
+    /* Pack */
+    err = bcmolt_msg_pack(msg, buf);
+
+    return err;
+}
+
+/*
+ * External message interface
+ */
+
+/* Send message. Don't expect response. */
+bcmos_errno bcmtr_send(bcmolt_devid device, bcmolt_msg *msg, bcmtr_send_flags flags)
+{
+    bcmtr_conn *conn;
+    bcmos_errno err;
+    bcmolt_buf tx_buf = {};
+
+    err = _bcmtr_conn_get(device, &conn);
+    if (err)
+        return err;
+
+    /* Allocate transport buffer and pack */
+    err = _bcmtr_pack(conn, msg, &tx_buf);
+    if (err)
+    {
+        bcmolt_buf_free(&tx_buf);
+        return err;
+    }
+
+    bcmos_mutex_lock(&conn->mutex);
+    err = _bcmtr_send(conn, msg, &tx_buf, flags, NULL);
+    bcmos_mutex_unlock(&conn->mutex);
+    if (err)
+    {
+        bcmolt_buf_free(&tx_buf);
+        if (err == BCM_ERR_QUEUE_FULL && conn_info[device].overflow_cb)
+            conn_info[device].overflow_cb(conn->device, flags);
+    }
+
+    return err;
+}
+
+static bcmos_errno bcmtr_call_err(bcmolt_msg *msg, bcmos_errno err, const char *err_text)
+{
+    msg->dir = BCMOLT_MSG_DIR_RESPONSE;
+    msg->err = err;
+    if (err_text != NULL)
+    {
+        strncpy(msg->err_text, err_text, BCMOLT_MAX_ERR_TEXT_LENGTH-1);
+        msg->err_text[BCMOLT_MAX_ERR_TEXT_LENGTH-1] = 0;
+    }
+    return err;
+}
+
+/* Send message and wait for response */
+bcmos_errno bcmtr_call(bcmolt_devid device, bcmolt_msg *msg)
+{
+    static uint32_t corr_tag = 0;
+    bcmos_task *task;
+    bcmtr_msg *tmsg = NULL;
+    bcmtr_conn *conn;
+    bcmolt_buf tx_buf = {};
+    bcmos_errno err;
+    uint8_t instance;
+
+    msg->err = BCM_ERR_OK;
+    msg->dir = BCMOLT_MSG_DIR_REQUEST;
+    msg->corr_tag = ++corr_tag;
+
+    err = _bcmtr_conn_get(device, &conn);
+    if (err)
+    {
+        return bcmtr_call_err(msg, err, NULL);
+    }
+
+    /* prevent sleeping in RX thread (this would cause it to never wake up) */
+    task = bcmos_task_current();
+    if (task == &conn->rx_thread)
+    {
+        return bcmtr_call_err(msg, BCM_ERR_COMM_FAIL, "Cannot call API functions from PCI RX thread");
+    }
+
+    instance = bcmolt_msg_instance(msg);
+    if (instance >= BCMTR_MAX_INSTANCES)
+    {
+        return bcmtr_call_err(msg, BCM_ERR_KEY_RANGE, "Invalid PON index");
+    }
+
+    /* Allocate transport buffer and pack */
+    err = _bcmtr_pack(conn, msg, &tx_buf);
+    if (err)
+    {
+        bcmolt_buf_free(&tx_buf);
+        return bcmtr_call_err(msg, err, NULL);
+    }
+
+    /* transmit request under connection lock */
+    bcmos_mutex_lock(&conn->mutex);
+    err = _bcmtr_send(conn, msg, &tx_buf, BCMTR_SEND_FLAGS_CALL, &tmsg);
+    if (!tmsg)
+    {
+        bcmos_mutex_unlock(&conn->mutex);
+        bcmolt_buf_free(&tx_buf);
+        return bcmtr_call_err(msg, err, NULL);
+    }
+    TAILQ_INSERT_TAIL(&conn->msg_list, tmsg, l);
+    bcmos_mutex_unlock(&conn->mutex);
+
+    /* Wait for response or timeout.
+     * Message timeout is enforced by audit rather than semaphore timeout option
+     */
+    bcmos_sem_wait(&tmsg->sem, BCMOS_WAIT_FOREVER);
+
+    /* Connection could've been killed while we are waiting here.
+     * It is indicated by COMM_FAILURE in msg->err.
+     * In this case transport header (tmsg) is already released
+     */
+    if (msg->err == BCM_ERR_COMM_FAIL)
+    {
+        return bcmtr_call_err(msg, msg->err, NULL);
+    }
+
+    err = tmsg->err;
+    if (!err)
+    {
+        err = _bcmtr_msg_unpack(conn, &tmsg->rx_buf, &tmsg->hdr, tmsg->timestamp, &msg);
+    }
+
+    /* Take connection lock again in order to release transport header safely */
+    bcmos_mutex_lock(&conn->mutex);
+    _bcmtr_tmsg_free(tmsg, NULL);
+    bcmos_mutex_unlock(&conn->mutex);
+
+    return bcmtr_call_err(msg, err ? err : msg->err, NULL);
+}
+
+
+#ifdef BCM_SUBSYSTEM_HOST
+/* Send (un)registration info to the mux */
+static bcmos_errno _bcmtr_send_to_mux(bcmtr_conn *conn, bcmtr_hdr *hdr)
+{
+    bcmolt_buf buf;
+    uint8_t packed_hdr[BCMTR_HDR_SIZE];
+    bcmos_errno err;
+
+    err = bcmolt_buf_alloc(&buf, BCMTR_HDR_SIZE + conn->cfg.plugin_cfg.headroom, BCMTR_BUF_ENDIAN);
+    if (err)
+    {
+        return err;
+    }
+    bcmolt_buf_skip(&buf, conn->cfg.plugin_cfg.headroom);
+    bcmtr_header_pack(hdr, packed_hdr);
+    if (bcmolt_buf_write(&buf, packed_hdr, BCMTR_HDR_SIZE))
+        err = conn->driver.send(conn->drv_priv, 0, &buf, BCMTR_SEND_FLAGS_PRI_NORMAL);
+    else
+        err = BCM_ERR_OVERFLOW;
+    bcmolt_buf_free(&buf);
+    return err;
+}
+#endif
+
+/** Register message handler
+ *
+ * \param[in]   device          OLT device index
+ * \param[in]   parm            Registration parameters
+ * \returns BCM_ERR_OK or error code
+ */
+bcmos_errno bcmtr_msg_handler_register(bcmolt_devid device, const bcmtr_handler_parm *parm)
+{
+    bcmtr_conn *conn;
+    bcmos_errno err = BCM_ERR_OK;
+    bcmolt_group_id msg_id;
+    bcmtr_handler *h;
+
+    if (device >= BCMTR_MAX_OLTS || !parm || !parm->app_cb || parm->instance >= BCMTR_MAX_INSTANCES)
+    {
+        return BCM_ERR_PARM;
+    }
+
+    if ((unsigned)parm->object >= BCMOLT_OBJ_ID__NUM_OF)
+    {
+        bcmtr_handler_parm p1 = *parm;
+
+        for (p1.object = 0; p1.object < BCMOLT_OBJ_ID__NUM_OF && !err; p1.object++)
+        {
+            err = bcmtr_msg_handler_register(device, &p1);
+            /* Ignore RANGE error that indicates that the object being iterated doesn't have this group */
+            /* Ignore ALREADY error that indicates that registration is already present for specific message and was skipped */
+            if ((err == BCM_ERR_RANGE) || (err == BCM_ERR_ALREADY))
+            {
+                err = BCM_ERR_OK;
+            }
+        }
+        return err;
+    }
+
+    if ((unsigned)parm->subgroup == BCMOLT_SUBGROUP_ANY)
+    {
+        bcmtr_handler_parm p1 = *parm;
+
+        for (p1.subgroup = 0;
+            bcmolt_group_id_combine(p1.object, p1.group, p1.subgroup, &msg_id) == BCM_ERR_OK &&
+                (err == BCM_ERR_OK || err == BCM_ERR_ALREADY);
+            p1.subgroup++)
+        {
+            err = bcmtr_msg_handler_register(device, &p1);
+        }
+        if (err == BCM_ERR_ALREADY)
+        {
+            err = BCM_ERR_OK;
+        }
+        return err;
+    }
+
+    /* Specific object/group/subgroup */
+    err = bcmolt_group_id_combine(parm->object, parm->group, parm->subgroup, &msg_id);
+    if (err)
+        return err;
+    h = &conn_info[device].msg_handler[msg_id][parm->instance];
+
+    /* Refuse new registration if already registered */
+    if (h->app_cb != _bcmtr_dft_msg_handler)
+    {
+        return BCM_ERR_ALREADY;
+    }
+
+    h->app_cb = parm->app_cb;
+    h->flags = parm->flags;
+    if ((parm->flags & BCMOLT_AUTO_FLAGS_DISPATCH))
+    {
+        if (parm->module != BCMOS_MODULE_ID_NONE)
+        {
+            h->module = parm->module;
+        }
+        else
+        {
+            h->module = bcmos_module_current();
+        }
+    }
+    else
+    {
+        h->module = BCMOS_MODULE_ID_NONE;
+    }
+
+#ifdef BCM_SUBSYSTEM_HOST
+    /* On the host, automatically connect on message handler registration */
+    err = _bcmtr_conn_get(device, &conn);
+    if (err)
+        return err;
+
+    /* Registration with tr-mux is per device, per-instance, per-object */
+    if (!parm->subgroup)
+    {
+        /* Send registration info to the mux driver. It is just a header */
+        bcmtr_hdr hdr;
+        memset(&hdr, 0, sizeof(hdr));
+        hdr.msg_id = msg_id;
+        hdr.auto_proxy_reg = 1;
+        hdr.instance = parm->instance;
+        err = _bcmtr_send_to_mux(conn, &hdr);
+        if (err)
+        {
+            bcmtr_msg_handler_unregister(device, parm);
+        }
+    }
+#else
+    (void)conn;
+#endif
+
+    return err;
+}
+
+/* Unregister autonomous message handler */
+bcmos_errno bcmtr_msg_handler_unregister(bcmolt_devid device, const bcmtr_handler_parm *parm)
+{
+    bcmtr_conn *conn;
+    bcmos_errno err = BCM_ERR_OK;
+    bcmolt_group_id msg_id;
+    bcmtr_handler *h;
+
+    if (device >= BCMTR_MAX_OLTS || !parm || parm->instance >= BCMTR_MAX_INSTANCES)
+    {
+        return BCM_ERR_PARM;
+    }
+
+    if ((unsigned)parm->object >= BCMOLT_OBJ_ID__NUM_OF)
+    {
+        bcmtr_handler_parm p1 = *parm;
+        for (p1.object = 0; p1.object < BCMOLT_OBJ_ID__NUM_OF && !err; p1.object++)
+        {
+            err = bcmtr_msg_handler_unregister(device, &p1);
+            /* Ignore RANGE error that indicates that the object being iterated doesn't have this group */
+            if (err == BCM_ERR_RANGE)
+            {
+                err = BCM_ERR_OK;
+            }
+        }
+        return err;
+    }
+
+    if ((unsigned)parm->subgroup == BCMOLT_SUBGROUP_ANY)
+    {
+        bcmtr_handler_parm p1 = *parm;
+
+        for (p1.subgroup = 0;
+            bcmolt_group_id_combine(p1.object, p1.group, p1.subgroup, &msg_id) == BCM_ERR_OK && !err;
+            p1.subgroup++)
+        {
+            err = bcmtr_msg_handler_unregister(device, &p1);
+        }
+        return err;
+    }
+
+    err = bcmolt_group_id_combine(parm->object, parm->group, parm->subgroup, &msg_id);
+    if (err)
+        return err;
+
+    h = &conn_info[device].msg_handler[msg_id][parm->instance];
+    h->app_cb = _bcmtr_dft_msg_handler;
+    h->flags = BCMOLT_AUTO_FLAGS_NONE;
+    h->module = BCMOS_MODULE_ID_NONE;
+
+#ifdef BCM_SUBSYSTEM_HOST
+    /* On the host, automatically connect on message handler (de)registration */
+    err = _bcmtr_conn_get(device, &conn);
+    if (err)
+        return err;
+
+    /* Registration with tr-mux is per device, per-instance, per-object */
+    if (!parm->subgroup)
+    {
+        /* Send un-registration info to the mux driver. It is just a header */
+        bcmtr_hdr hdr;
+        memset(&hdr, 0, sizeof(hdr));
+        hdr.msg_id = msg_id;
+        hdr.auto_proxy_unreg = 1;
+        hdr.instance = parm->instance;
+        err = _bcmtr_send_to_mux(conn, &hdr);
+    }
+#else
+    (void)conn;
+#endif
+
+    return err;
+}
+
+/** Get registration info
+ *
+ * \param[in]           device          OLT device index
+ * \param[in,out]       parm            Registration parameters.
+ *                                      instance, group, object, subgroup must be set
+ * \returns BCM_ERR_OK or error code
+ */
+bcmos_errno bcmtr_msg_handler_register_get(bcmolt_devid device, bcmtr_handler_parm *parm)
+{
+    bcmos_errno err;
+    bcmolt_group_id msg_id;
+    bcmtr_handler *h;
+
+    if (device >= BCMTR_MAX_OLTS ||
+        !parm ||
+        parm->instance >= BCMTR_MAX_INSTANCES ||
+        (unsigned)parm->object >= BCMOLT_OBJ_ID__NUM_OF ||
+        (unsigned)parm->subgroup == BCMOLT_SUBGROUP_ANY)
+    {
+        return BCM_ERR_PARM;
+    }
+
+    err = bcmolt_group_id_combine(parm->object, parm->group, parm->subgroup, &msg_id);
+    if (err)
+        return err;
+
+    h = &conn_info[device].msg_handler[msg_id][parm->instance];
+    parm->app_cb = (h->app_cb == _bcmtr_dft_msg_handler) ? NULL : h->app_cb;
+    parm->flags = h->flags;
+    parm->module = h->module;
+
+    return BCM_ERR_OK;
+}
+
+/* Get transport statistics */
+bcmos_errno bcmtr_stat_get(bcmolt_devid device, bcmtr_stat *stat)
+{
+    bcmtr_conn *conn;
+    bcmos_errno err;
+
+    if (!stat)
+    {
+        return BCM_ERR_PARM;
+    }
+    err = _bcmtr_conn_get(device, &conn);
+    if (err)
+    {
+        return err;
+    }
+    bcmos_mutex_lock(&conn->mutex);
+    *stat = conn->stat;
+    memset(&conn->stat, 0, sizeof(conn->stat));
+    bcmos_mutex_unlock(&conn->mutex);
+
+    return BCM_ERR_OK;
+}
+
+#if defined(SIMULATION_BUILD) && defined(LINUX_USER_SPACE) && defined(BCM_SUBSYSTEM_EMBEDDED) && defined(BCMTR_UDP_SUPPORT)
+static int _bcmtr_assign_random_port(void)
+{
+    int port;
+
+    srand(bcmos_timestamp());
+    port = rand() % 50000;
+    if (port < 20000)
+    {
+        port += 20000;
+    }
+
+    return port;
+}
+#endif
+
+/* Connect device in raw mode. Receive task is NOT created */
+bcmos_errno bcmtr_proxy_connect(bcmolt_devid device, uint32_t *headroom)
+{
+    bcmtr_conn *conn;
+    bcmos_errno rc;
+
+    rc = _bcmtr_conn_get_any(device, &conn, BCMOS_TRUE);
+    if (!rc)
+    {
+        *headroom = conn->cfg.plugin_cfg.headroom;
+    }
+    return rc;
+}
+
+/* Send data to device in raw mode */
+bcmos_errno bcmtr_proxy_send(bcmolt_devid device, bcmolt_buf *tx_buf)
+{
+    bcmtr_conn *conn;
+    bcmos_errno rc;
+    rc = _bcmtr_conn_get_any(device, &conn, BCMOS_TRUE);
+    if (rc)
+        return rc;
+    rc = conn->driver.send(conn->drv_priv, 0, tx_buf, BCMTR_SEND_FLAGS_NONE);
+    return rc;
+}
+
+/* Receive data from device in raw mode */
+bcmos_errno bcmtr_proxy_receive(bcmolt_devid device, bcmolt_buf *rx_buf)
+{
+    bcmtr_conn *conn;
+    bcmolt_subchannel subch;
+    bcmos_errno rc;
+    rc = _bcmtr_conn_get_any(device, &conn, BCMOS_TRUE);
+    if (rc)
+        return rc;
+    rc = conn->driver.recv(conn->drv_priv, &subch, rx_buf);
+    return rc;
+}
+
+/** Initialize transport library.
+ * \returns BCM_ERR_OK or error code
+ */
+bcmos_errno bcmtr_init(void)
+{
+    bcmos_errno err = BCM_ERR_OK;
+    bcmolt_devid device;
+
+    bcmos_printf("bcmtr_init: init transport library\n");
+
+#if defined(BCMTR_UDP_SUPPORT)
+
+    /* Set defaults and add configuration command */
+    if (!bcmtr_host_ip)
+        bcmtr_host_ip = BCMTR_TR_UDP_HOST_IP;
+    if (!bcmtr_host_udp_port)
+        bcmtr_host_udp_port = BCMTR_TR_UDP_HOST_PORT;
+    for (device = 0; device < BCMTR_MAX_OLTS; device++)
+    {
+        if (!bcmtr_olt_ip[device])
+            bcmtr_olt_ip[device] = BCMTR_TR_UDP_OLT_IP + device;
+        if (!bcmtr_olt_udp_port[device])
+            bcmtr_olt_udp_port[device] = BCMTR_TR_UDP_OLT_PORT;
+    }
+
+    /* A hack to allow multiple simulations run on the same PC */
+#if defined(SIMULATION_BUILD) && defined(LINUX_USER_SPACE) && defined(BCM_SUBSYSTEM_EMBEDDED)
+    {
+        bcmtr_olt_udp_port[0] = _bcmtr_assign_random_port();
+    }
+#endif
+#endif
+
+    /* Initialize handlers */
+    for (device = 0; device < BCMTR_MAX_OLTS; device++)
+    {
+        bcmolt_group_id group;
+        for (group = 0; group < BCMOLT_GROUP_ID__NUM_OF; group++)
+        {
+            int inst;
+            for (inst = 0; inst < BCMTR_MAX_INSTANCES; inst++)
+            {
+                conn_info[device].msg_handler[group][inst].app_cb = _bcmtr_dft_msg_handler;
+            }
+        }
+    }
+
+    bcmos_mutex_create(&conn_lock, 0, NULL);
+
+    return err;
+}
+
+/** Release resources used by transport library.
+ * \returns BCM_ERR_OK or error code
+ */
+bcmos_errno bcmtr_exit(void)
+{
+    int i;
+
+    for (i = 0; i < BCMTR_MAX_OLTS; i++)
+        bcmtr_disconnect(i);
+
+    bcmos_mutex_destroy(&conn_lock);
+
+    return BCM_ERR_OK;
+}
diff --git a/bcm68620_release/release/host_driver/transport/bcmtr_transport_cli.c b/bcm68620_release/release/host_driver/transport/bcmtr_transport_cli.c
new file mode 100644
index 0000000..e6d007a
--- /dev/null
+++ b/bcm68620_release/release/host_driver/transport/bcmtr_transport_cli.c
@@ -0,0 +1,307 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#include <bcmos_system.h>
+#include <bcmcli.h>
+#include <bcmtr_interface.h>
+#include <bcmtr_internal.h>
+#include <bcmtr_transport_cli.h>
+#include <bcm_api_cli_helpers.h>
+#ifdef BCMTR_PERFTEST
+#include <test/bcmtr_perftest.h>
+#endif
+
+#ifdef BCMTR_PLUGIN_TASK_FORWARDER
+extern uint32_t raw_tx_drop_count;
+#endif
+
+/*
+ * CLI support
+ */
+static bcmcli_entry *trcli_dir;
+
+#ifdef BCMTR_UDP_SUPPORT
+
+/* Display/set host IP+port
+   BCMCLI_MAKE_PARM("ip_addr", "IP address", BCMCLI_PARM_IP, BCMCLI_PARM_FLAG_OPTIONAL),
+   BCMCLI_MAKE_PARM_RANGE("udp_port", "UDP port", BCMCLI_PARM_NUMBER, BCMCLI_PARM_FLAG_OPTIONAL,
+   */
+static bcmos_errno _bcmtr_cli_host_udp(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    if (!nparms)
+    {
+        bcmcli_session_print(session, "Host Address:port = %d.%d.%d.%d:%d\n",
+            (bcmtr_host_ip >> 24) & 0xff, (bcmtr_host_ip >> 16) & 0xff,
+            (bcmtr_host_ip >> 8) & 0xff, bcmtr_host_ip & 0xff, bcmtr_host_udp_port);
+    }
+    else
+    {
+        if (bcmcli_parm_is_set(session, &parm[0]))
+        {
+            bcmtr_host_ip = parm[0].value.number;
+        }
+        if (bcmcli_parm_is_set(session, &parm[1]))
+        {
+            bcmtr_host_udp_port = parm[1].value.number;
+        }
+    }
+
+    return BCM_ERR_OK;
+}
+
+/* Display/Set OLT IP+port
+   BCMCLI_MAKE_PARM_RANGE("device", "Device index", BCMCLI_PARM_DECIMAL, 0,
+   BCMCLI_MAKE_PARM("ip_addr", "IP address", BCMCLI_PARM_IP, BCMCLI_PARM_FLAG_OPTIONAL),
+   BCMCLI_MAKE_PARM_RANGE("udp_port", "UDP port", BCMCLI_PARM_NUMBER, BCMCLI_PARM_FLAG_OPTIONAL,
+   */
+static bcmos_errno _bcmtr_cli_olt_udp(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    bcmolt_devid device = (bcmolt_devid)parm[0].value.number;
+
+    if (nparms == 1)
+    {
+        bcmcli_session_print(session, "OLT[%d] Address:port = %d.%d.%d.%d:%d\n",
+            device,
+            (bcmtr_olt_ip[device] >> 24) & 0xff, (bcmtr_olt_ip[device] >> 16) & 0xff,
+            (bcmtr_olt_ip[device] >> 8) & 0xff, bcmtr_olt_ip[device] & 0xff,
+            bcmtr_olt_udp_port[device]);
+    }
+    else
+    {
+        if (bcmcli_parm_is_set(session, &parm[1]))
+        {
+            bcmtr_olt_ip[device] = parm[1].value.number;
+        }
+        if (bcmcli_parm_is_set(session, &parm[2]))
+        {
+            bcmtr_olt_udp_port[device] = parm[2].value.number;
+        }
+    }
+
+    return BCM_ERR_OK;
+}
+
+#endif /* #ifdef BCMTR_UDP_SUPPORT */
+
+/* Connect
+   BCMCLI_MAKE_PARM_RANGE("device", "Device index", BCMCLI_PARM_DECIMAL, 0,
+   */
+static bcmos_errno _bcmtr_cli_connect(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    bcmolt_devid device = (bcmolt_devid)parm[0].value.number;
+    return bcmtr_connect(device);
+}
+
+/* Disconnect
+   BCMCLI_MAKE_PARM_RANGE("device", "Device index", BCMCLI_PARM_DECIMAL, 0,
+   */
+static bcmos_errno _bcmtr_cli_disconnect(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    bcmolt_devid device = (bcmolt_devid)parm[0].value.number;
+    return bcmtr_disconnect(device);
+}
+
+/* Reconnect
+   BCMCLI_MAKE_PARM_RANGE("device", "Device index", BCMCLI_PARM_DECIMAL, 0,
+   */
+static bcmos_errno _bcmtr_cli_reconnect(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    bcmolt_devid device = (bcmolt_devid)parm[0].value.number;
+    return bcmtr_driver_reconnect(device);
+}
+
+/* Stat
+   BCMCLI_MAKE_PARM_RANGE("device", "Device index", BCMCLI_PARM_DECIMAL, 0,
+   */
+static bcmos_errno _bcmtr_cli_stat(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    bcmolt_devid device = (bcmolt_devid)parm[0].value.number;
+    bcmtr_stat stat;
+    bcmos_errno err;
+#ifdef BCMTR_PLUGIN_TASK_FORWARDER
+    static uint32_t prev_raw_tx_drop_count;
+    uint32_t new_raw_tx_drop_count = raw_tx_drop_count;
+#endif
+
+    err = bcmtr_stat_get(device, &stat);
+    if (err)
+        return err;
+
+    bcmcli_session_print(session, "%-24s : %d\n", "msg_sent", stat.msg_sent);
+    bcmcli_session_print(session, "%-24s : %d\n", "msg_resp_received", stat.msg_resp_received);
+    bcmcli_session_print(session, "%-24s : %d\n", "msg_req_auto_received", stat.msg_req_auto_received);
+    bcmcli_session_print(session, "%-24s : %d\n", "msg_req_timeout", stat.msg_req_timeout);
+    bcmcli_session_print(session, "%-24s : %d\n", "msg_reass_timeout", stat.msg_reass_timeout);
+    bcmcli_session_print(session, "%-24s : %d\n", "msg_no_req", stat.msg_no_req);
+    bcmcli_session_print(session, "%-24s : %d\n", "msg_no_mem", stat.msg_no_mem);
+    bcmcli_session_print(session, "%-24s : %d\n", "msg_comm_err", stat.msg_comm_err);
+    bcmcli_session_print(session, "%-24s : %d\n", "msg_ready_timeout", stat.msg_ready_timeout);
+    bcmcli_session_print(session, "%-24s : %d\n", "msg_too_many_req", stat.msg_too_many_req);
+    bcmcli_session_print(session, "%-24s : %d\n", "msg_too_many_auto", stat.msg_too_many_auto);
+    bcmcli_session_print(session, "%-24s : %d\n", "frag_received", stat.frag_received);
+    bcmcli_session_print(session, "%-24s : %d\n", "frag_invalid", stat.frag_invalid);
+    bcmcli_session_print(session, "%-24s : %d\n", "unpack_errors", stat.unpack_errors);
+    bcmcli_session_print(session, "%-24s : %d\n", "pack_errors", stat.pack_errors);
+    bcmcli_session_print(session, "%-24s : %d\n", "no_rx_handler", stat.no_rx_handler);
+    bcmcli_session_print(session, "%-24s : %d\n", "not_connected", stat.not_connected);
+#ifdef BCMTR_PLUGIN_TASK_FORWARDER
+    bcmcli_session_print(session, "%-24s : %d\n", "raw_tx_drop", new_raw_tx_drop_count - prev_raw_tx_drop_count);
+    prev_raw_tx_drop_count = new_raw_tx_drop_count;
+#endif
+    return BCM_ERR_OK;
+}
+
+/* Register
+   BCMCLI_MAKE_PARM_RANGE("device", "Device index", BCMCLI_PARM_DECIMAL, 0,
+   */
+static bcmos_errno _bcmtr_cli_register_info(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    bcmolt_devid device = (bcmolt_devid)parm[0].value.number;
+    bcmtr_handler_parm p =
+    {
+        .instance = (uint8_t)parm[1].value.number,
+        .group = (bcmolt_mgt_group)parm[2].value.number,
+    };
+
+    if (p.instance >= BCMTR_MAX_INSTANCES)
+    {
+        return BCM_ERR_PARM;
+    }
+
+    for (p.object = BCMOLT_OBJ_ID_DEVICE; p.object < BCMOLT_OBJ_ID__NUM_OF; p.object++)
+    {
+        bcmolt_group_id group_id;
+        const char *obj_name, *obj_descr;
+        const char *sub_name, *sub_descr;
+
+        if (api_cli_object_name(p.object, &obj_name, &obj_descr) != BCM_ERR_OK)
+            continue;
+
+        for (p.subgroup = 0; bcmtr_msg_handler_register_get(device, &p) == BCM_ERR_OK; p.subgroup++)
+        {
+            bcmolt_group_id_combine(p.object, p.group, p.subgroup, &group_id);
+            api_cli_object_subgroup_name(p.object, p.group, p.subgroup, &sub_name, &sub_descr);
+
+            bcmcli_session_print(session, "%s - %s : msg_id=%u ", obj_name, sub_name, group_id);
+            if (p.app_cb)
+            {
+                bcmcli_session_print(session, "module:%d func:%p\n", p.module, p.app_cb);
+            }
+            else
+            {
+                bcmcli_session_print(session, "NONE\n");
+            }
+        }
+    }
+    return BCM_ERR_OK;
+}
+
+
+bcmos_errno bcmtr_cli_init(void)
+{
+    if ((trcli_dir=bcmcli_dir_find(NULL, "transport")) != NULL)
+        return BCM_ERR_ALREADY;
+    trcli_dir = bcmcli_dir_add(NULL, "transport", "Maple Transport", BCMCLI_ACCESS_GUEST, NULL);
+    if (!trcli_dir)
+    {
+        printf("Can't create transport directory\n");
+        return BCM_ERR_INTERNAL;
+    }
+
+#ifdef BCMTR_UDP_SUPPORT
+
+    BCMCLI_MAKE_CMD(trcli_dir, "host_udp", "Host IP and UDP port parameters", _bcmtr_cli_host_udp,
+        BCMCLI_MAKE_PARM("ip_addr", "IP address", BCMCLI_PARM_IP, BCMCLI_PARM_FLAG_OPTIONAL),
+        BCMCLI_MAKE_PARM_RANGE("udp_port", "UDP port", BCMCLI_PARM_NUMBER, BCMCLI_PARM_FLAG_OPTIONAL,
+        0, 0xffff));
+    BCMCLI_MAKE_CMD(trcli_dir, "olt_udp", "OLT IP and UDP port parameters", _bcmtr_cli_olt_udp,
+        BCMCLI_MAKE_PARM_RANGE("device", "Device index", BCMCLI_PARM_DECIMAL, 0,
+        0, BCMTR_MAX_OLTS-1),
+        BCMCLI_MAKE_PARM("ip_addr", "IP address", BCMCLI_PARM_IP, BCMCLI_PARM_FLAG_OPTIONAL),
+        BCMCLI_MAKE_PARM_RANGE("udp_port", "UDP port", BCMCLI_PARM_NUMBER, BCMCLI_PARM_FLAG_OPTIONAL,
+        0, 0xffff));
+#endif
+
+    BCMCLI_MAKE_CMD(trcli_dir, "connect", "Connect", _bcmtr_cli_connect,
+        BCMCLI_MAKE_PARM_RANGE("device", "Device index", BCMCLI_PARM_DECIMAL, 0,
+        0, BCMTR_MAX_OLTS-1));
+
+    BCMCLI_MAKE_CMD(trcli_dir, "disconnect", "Disconnect", _bcmtr_cli_disconnect,
+        BCMCLI_MAKE_PARM_RANGE("device", "Device index", BCMCLI_PARM_DECIMAL, 0,
+        0, BCMTR_MAX_OLTS-1));
+
+    BCMCLI_MAKE_CMD(trcli_dir, "reconnect", "Reconnect", _bcmtr_cli_reconnect,
+        BCMCLI_MAKE_PARM_RANGE("device", "Device index", BCMCLI_PARM_DECIMAL, 0,
+        0, BCMTR_MAX_OLTS-1));
+
+    BCMCLI_MAKE_CMD(trcli_dir, "stat", "Transport statistics", _bcmtr_cli_stat,
+        BCMCLI_MAKE_PARM_RANGE("device", "Device index", BCMCLI_PARM_DECIMAL, 0,
+        0, BCMTR_MAX_OLTS-1));
+
+    {
+        static bcmcli_enum_val groups[] =
+        {
+#ifdef BCM_SUBSYSTEM_HOST
+            { .name = "auto", .val = BCMOLT_MGT_GROUP_CFG },
+            { .name = "proxy_rx", .val = BCMOLT_MGT_GROUP_PROXY_RX },
+#else
+            { .name = "cfg", .val = BCMOLT_MGT_GROUP_CFG },
+            { .name = "stat", .val = BCMOLT_MGT_GROUP_STAT },
+            { .name = "stat_cfg", .val = BCMOLT_MGT_GROUP_STAT_CFG },
+            { .name = "oper", .val = BCMOLT_MGT_GROUP_OPER },
+            { .name = "auto_cfg", .val = BCMOLT_MGT_GROUP_AUTO_CFG },
+            { .name = "proxy", .val = BCMOLT_MGT_GROUP_PROXY },
+#endif
+            { .name = NULL }
+
+        };
+        BCMCLI_MAKE_CMD(trcli_dir, "registration", "Transport RX registration info", _bcmtr_cli_register_info,
+            BCMCLI_MAKE_PARM_RANGE("device", "Device index", BCMCLI_PARM_DECIMAL, 0,
+            0, BCMTR_MAX_OLTS-1),
+            BCMCLI_MAKE_PARM_RANGE("pon_ni", "PON NI", BCMCLI_PARM_DECIMAL, 0,
+            0, BCMTR_MAX_INSTANCES-1),
+            BCMCLI_MAKE_PARM_ENUM("group", "Management group", groups, 0) );
+    }
+
+    /* Performance testing directory */
+#ifdef BCMTR_PERFTEST
+    bcmtr_test_init();
+#endif
+
+    return BCM_ERR_OK;
+}
+
+void bcmtr_cli_exit(void)
+{
+    if (trcli_dir)
+    {
+        bcmcli_token_destroy(trcli_dir);
+        trcli_dir = NULL;
+    }
+}
diff --git a/bcm68620_release/release/host_driver/transport/bcmtr_transport_cli.h b/bcm68620_release/release/host_driver/transport/bcmtr_transport_cli.h
new file mode 100644
index 0000000..3ebffaa
--- /dev/null
+++ b/bcm68620_release/release/host_driver/transport/bcmtr_transport_cli.h
@@ -0,0 +1,41 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef BCMTR_TRANSPORT_CLI_H_
+#define BCMTR_TRANSPORT_CLI_H_
+
+#include <bcmos_system.h>
+
+#ifdef ENABLE_CLI
+bcmos_errno bcmtr_cli_init(void);
+void bcmtr_cli_exit(void);
+#endif
+
+#endif
+
diff --git a/bcm68620_release/release/host_driver/transport/inband/Makefile b/bcm68620_release/release/host_driver/transport/inband/Makefile
new file mode 100644
index 0000000..31c6c00
--- /dev/null
+++ b/bcm68620_release/release/host_driver/transport/inband/Makefile
@@ -0,0 +1,10 @@
+# Inband Transport
+#
+
+MOD_NAME = inband_driver
+MOD_TYPE = lib
+MOD_DEFS = -DIN_BAND
+
+USE_LINT = yes
+
+srcs = bcmtr_inband.c
diff --git a/bcm68620_release/release/host_driver/transport/inband/bcmtr_inband.c b/bcm68620_release/release/host_driver/transport/inband/bcmtr_inband.c
new file mode 100644
index 0000000..bab77ca
--- /dev/null
+++ b/bcm68620_release/release/host_driver/transport/inband/bcmtr_inband.c
@@ -0,0 +1,276 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+/*
+ * bcmtr_inband.c - In-band transport driver
+ */
+#include <bcmos_system.h>
+#include <bcmtr_inband.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+
+typedef struct device_info
+{
+    bcmos_ipv4_address remote_ip;
+    uint16_t remote_port;
+    uint8_t channel;
+    int tr_udp_sock;
+} device_info;
+
+static device_info dev_info[BCMTR_MAX_OLTS];
+
+#define DEBUG_ONLY 0
+
+/** Initialize in-band transport driver
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtr_ib_init(void)
+{
+    return BCM_ERR_OK;
+}
+
+/** Cleanup in-band transport driver
+ * \returns: 0 in case of success or error code < 0
+ */
+void bcmtr_ib_exit(void)
+{
+    int i;
+
+    for (i=0; i<BCMTR_MAX_OLTS; i++)
+    {
+        bcmtr_ib_disconnect(i);
+    }
+}
+
+/* Receive packet */
+static bcmos_errno _bcmtr_ib_rx(uint32_t device, int s, bcmos_buf **buf, uint8_t *ch)
+{
+    struct sockaddr_in sa;
+#if 0
+    struct iovec iov = {.iov_len = BCMTR_MAX_MTU_SIZE};
+    struct msghdr msg = {
+        .msg_iov = &iov, .msg_iovlen = 1,
+        .msg_name = &sa, .msg_namelen = sizeof(sa)
+    };
+#endif
+    bcmos_buf *b;
+    ssize_t len;
+
+    b = bcmos_buf_alloc(BCMTR_MAX_MTU_SIZE);
+    if (!b)
+    {
+        bcmos_printf("%s: Failed to allocate buffer\n", __FUNCTION__);
+        return BCM_ERR_NOMEM;
+    }
+#if 0
+    iov.iov_base = bcmos_buf_data(b);
+#endif
+    memset(&sa, 0, sizeof(sa));
+    len = recv(s, bcmos_buf_data(b), BCMTR_MAX_MTU_SIZE, 0);
+    if (len <= 0)
+    {
+        bcmos_printf("%s: recvmsg() --> %d\n", __FUNCTION__, len);
+        bcmos_buf_free(b);
+        return BCM_ERR_COMM_FAIL;
+    }
+
+    *ch = dev_info[device].channel;
+    dev_info[device].channel = 0;
+    bcmos_buf_length_set(b, (int)len);
+    *buf = b;
+
+#if DEBUG_ONLY
+    bcmos_printf("\nReceived to %d bytes from channel %d/%d port", len, *ch, sa.sin_port);
+
+    {
+        int ii = 0;
+        unsigned char *c = bcmos_buf_data(b);
+        int size = (int)len;
+
+        for (ii=0; ii<size; ii++)
+        {
+            if (0==(ii%16)) bcmos_printf("\n");
+            if (0==(ii%8)) bcmos_printf("  ");
+            bcmos_printf(" %02x", *c);
+            c++;
+        }
+        bcmos_printf("\n");
+    }
+#endif
+
+    return BCM_ERR_OK;
+}
+
+/** Connect to maple device */
+bcmos_errno bcmtr_ib_connect(uint8_t device, bcmos_ipv4_address ip_address, uint16_t udp_port)
+{
+    int r = 0;
+    int s = 0;
+    struct sockaddr_in sa;
+
+    /*Check for valid device*/
+    BUG_ON((unsigned)device >= BCMTR_MAX_OLTS);
+
+    if (dev_info[device].tr_udp_sock)
+        return BCM_ERR_ALREADY;
+
+    dev_info[device].remote_ip = ip_address;
+    dev_info[device].remote_port = udp_port;
+
+    /*check that ip address and port have been initialized*/
+    if(dev_info[device].remote_port == 0  || dev_info[device].remote_ip.u32 == 0)
+    {
+        bcmos_printf("%s: IP address and port not initialized. Error %d\n", __FUNCTION__, r);
+        return BCM_ERR_RANGE;
+    }
+
+    /* Create socket */
+    s = socket(AF_INET, SOCK_DGRAM, 0);
+    if (!s)
+    {
+        bcmos_printf("%s: Failed to create socket. Error %d\n", __FUNCTION__, s);
+        return BCM_ERR_COMM_FAIL;
+    }
+
+    /* Connect to remote */
+    memset(&sa, 0, sizeof(sa));
+    sa.sin_family = AF_INET;
+    sa.sin_port = (in_port_t)htons(dev_info[device].remote_port);
+    sa.sin_addr.s_addr = (in_addr_t)htonl(dev_info[device].remote_ip.u32);
+    r = connect(s, (struct sockaddr*)&sa, sizeof(sa));
+    if (r)
+    {
+        bcmos_printf("%s: Failed to connect socket. Error %d\n", __FUNCTION__, r);
+        close(s);
+        return BCM_ERR_COMM_FAIL;
+    }
+
+    {
+        socklen_t slen;
+        if (getsockname(s, (struct sockaddr *)&sa, &slen) < 0)
+        {
+        bcmos_printf("%s: Connected socket invalid. Error %d\n", __FUNCTION__, r);
+        close(s);
+        return BCM_ERR_COMM_FAIL;
+        }
+
+        bcmos_printf("%s: device %d: socket (port %d) connected to %d.%d.%d.%d:%d\n",
+                     __FUNCTION__, device, ntohs((uint16_t)sa.sin_port),
+                     (int)(dev_info[device].remote_ip.u32 >> 24), (int)((dev_info[device].remote_ip.u32 >> 16) & 0xff),
+                     (int)((dev_info[device].remote_ip.u32 >> 8) & 0xff), (int)(dev_info[device].remote_ip.u32 & 0xff),
+                     (int)dev_info[device].remote_port);
+    }
+
+    dev_info[device].tr_udp_sock = s;
+
+    return BCM_ERR_OK;
+}
+
+/** Disconnect. All buffers are released
+ * \param[in]   device          Maple device index
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtr_ib_disconnect(uint8_t device)
+{
+    BUG_ON((unsigned)device >= BCMTR_MAX_OLTS);
+
+    bcmos_printf("%s: disconnecting %d..", __FUNCTION__, device);
+    if (dev_info[device].tr_udp_sock)
+    {
+        int s = dev_info[device].tr_udp_sock;
+        dev_info[device].tr_udp_sock = 0;
+        close(s);
+    }
+    bcmos_printf("done\n");
+    return BCM_ERR_OK;
+}
+
+/** Send packet to device via in-band interface
+ * \param[in]   device  Mapole device index
+ * \param[in]   channel Logical channel
+ * \param[in]   buf     Buffer to be transmitted
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtr_ib_send(uint8_t device, uint8_t channel, bcmos_buf *buf)
+{
+    int buflen = bcmos_buf_length(buf);
+    struct iovec iov = { .iov_base = bcmos_buf_data(buf), .iov_len = buflen };
+    struct msghdr msg = {
+        .msg_iov = &iov, .msg_iovlen = 1, .msg_flags=MSG_DONTWAIT,
+        .msg_name = NULL, .msg_namelen = 0
+    };
+    ssize_t len;
+
+    dev_info[device].channel = channel;
+
+    len = sendmsg(dev_info[device].tr_udp_sock, &msg, 0);
+    if ((int)len < buflen)
+    {
+        bcmos_printf("%s: sendmsg(%u) --> %d\n", __FUNCTION__, buflen, len);
+        bcmos_buf_free(buf);
+        return BCM_ERR_NOT_CONNECTED;
+    }
+
+#if 1
+    {
+        int ii = 0;
+        unsigned char *c = bcmos_buf_data(buf);
+        struct sockaddr_in sa;
+        socklen_t slen;
+
+        for (ii=0; ii<(int)len; ii++)
+        {
+            if (0==(ii%16)) bcmos_printf("\n");
+            if (0==(ii%8)) bcmos_printf("  ");
+            bcmos_printf(" %02x", *c);
+            c++;
+        }
+
+        if (getsockname(dev_info[device].tr_udp_sock, (struct sockaddr *)&sa, &slen) < 0)
+        {
+            bcmos_printf("%s: Connected socket invalid\n", __FUNCTION__);
+            return BCM_ERR_COMM_FAIL;
+        }
+        bcmos_printf("\nSent %d bytes to channel %d from port %d\t", len, channel, sa.sin_port);
+    }
+#endif
+
+    return BCM_ERR_OK;
+}
+
+/* Receive packet from device */
+bcmos_errno bcmtr_ib_receive(uint32_t device, uint8_t *channel, bcmos_buf **buf)
+{
+    if (device >= BCMTR_MAX_OLTS || !  dev_info[device].tr_udp_sock)
+    {
+        return BCM_ERR_PARM;
+    }
+
+    return _bcmtr_ib_rx(device, dev_info[device].tr_udp_sock, buf, channel);
+}
diff --git a/bcm68620_release/release/host_driver/transport/inband/bcmtr_inband.h b/bcm68620_release/release/host_driver/transport/inband/bcmtr_inband.h
new file mode 100644
index 0000000..10f3d7d
--- /dev/null
+++ b/bcm68620_release/release/host_driver/transport/inband/bcmtr_inband.h
@@ -0,0 +1,74 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+/*
+ * bcmtr_inband.h - Inband host-maple communication interface
+ */
+
+#ifndef _BCMTR_INBAND_H_
+#define _BCMTR_INBAND_H_
+
+
+/** Initialize in-band transport driver
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtr_ib_init(void);
+
+
+/** Cleanup in-band transport driver
+ * \returns: 0 in case of success or error code < 0
+ */
+void bcmtr_ib_exit(void);
+
+/** Connect
+ * \param[in]  device          Maple device index
+ * \param[in]  ip_address      Maple IP address
+ * \param[in]  udp_port        Maple UDP port
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtr_ib_connect(uint8_t device, bcmos_ipv4_address ip_address, uint16_t udp_port);
+
+/** Disconnect. All buffers are released
+ * \param[in]   device          Maple device index
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtr_ib_disconnect(uint8_t device);
+
+/** Send packet to device via in-band interface
+ * \param[in]   device  Mapole device index
+ * \param[in]   channel Logical channel
+ * \param[in]   buf     Buffer to be transmitted
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtr_ib_send(uint8_t device, uint8_t channel, bcmos_buf *buf);
+
+/* Receive packet from device */
+bcmos_errno bcmtr_ib_receive(uint32_t device, uint8_t *channel, bcmos_buf **buf);
+
+#endif /* _BCMTR_INBAND_H_ */
diff --git a/bcm68620_release/release/host_driver/transport/mux/Makefile b/bcm68620_release/release/host_driver/transport/mux/Makefile
new file mode 100644
index 0000000..8a45a97
--- /dev/null
+++ b/bcm68620_release/release/host_driver/transport/mux/Makefile
@@ -0,0 +1,35 @@
+# PCIe transport
+# Consists of 2 components
+# - low-level PCIe driver (send/rx functions)
+# - multiplexer
+#
+MOD_NAME = trmux
+MOD_DEPS = transport model pcie pcie_mod ll_pcie fld pcie_sw_queue
+
+ifeq ("$(RELEASE_BUILD)", "y")
+    MOD_DEPS += common_api
+else
+    MOD_DEPS += api
+endif
+
+ifeq ("$(RAW_TRANSPORT_VIA_UDP)", "y")
+MOD_DEPS += trpcie
+endif
+
+ifeq ("$(OS_KERNEL)", "linux")
+MOD_TYPE = linux_lib
+else
+MOD_TYPE = lib
+endif
+
+# If called by linux kernel builder - add include paths manually.
+# It is not elegant, but we'll not have many linux modules
+ifneq ("$(KBUILD_SRC)", "")
+	-include $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
+endif
+
+srcs = bcmolt_tr_mux.c 
+
+USE_LINT = yes
+
+
diff --git a/bcm68620_release/release/host_driver/transport/mux/bcmolt_tr_mux.c b/bcm68620_release/release/host_driver/transport/mux/bcmolt_tr_mux.c
new file mode 100644
index 0000000..b73e650
--- /dev/null
+++ b/bcm68620_release/release/host_driver/transport/mux/bcmolt_tr_mux.c
@@ -0,0 +1,1092 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+/*
+ * bcmtr_mux.c
+ *
+ * Transport Multiplexer
+ * - PCIe/in-band channel multiplexer
+ * - locally/remotely - terminated message multiplexer
+ * - autonomous messages de-multiplexer
+ */
+#include <bcmos_system.h>
+#include <bcmolt_msg.h>
+#include <bcmolt_buf.h>
+#include <bcmolt_msg_pack.h>
+#include <bcmtr_header.h>
+#include <bcmolt_tr_mux.h>
+#ifdef IN_BAND
+#include <bcmtr_inband.h>
+#else
+#include <bcmtr_pcie.h>
+#include <bcmolt_llpcie.h>
+#include <bcmolt_fld.h>
+#include <bcm_fld_common.h>
+#include <bcmtr_pcie_sw_queue.h>
+#endif
+#include <bcmolt_api.h>
+#include <bcmolt_model_types.h>
+#include <bcmolt_model_ids.h>
+
+#define BCMTRMUX_MAX_TX_DELAY   500     /* max transmit delay (us) */
+#define BCMTRMUX_MAX_RX_DELAY   5000    /* max receive delay (us) */
+
+#ifdef __KERNEL__
+#define BCMTRMUX_LOG printk
+#else
+#define BCMTRMUX_LOG BCMOS_TRACE_INFO
+#endif
+
+/* Channel registration info */
+typedef struct
+{
+    f_bcmtr_rx_handler rx;
+    void *data;
+} bcmtrmux_rx_info;
+
+typedef struct
+{
+    f_bcmtr_local_rx_handler rx;
+    void *data;
+} bcmtrmux_local_rx_info;
+
+/* Registration arrays */
+static bcmtrmux_rx_info bcmtrmux_rx_info_array[BCMTR_MAX_OLTS][BCMTRMUX_MAX_CHANNELS];
+static bcmtrmux_local_rx_info bcmtrmux_local_rx_info_array[BCMTR_MAX_OLTS];
+static bcmtrmux_channel bcmtrmux_auto_channels[BCMTR_MAX_OLTS][BCMTR_MAX_INSTANCES][BCMOLT_OBJ_ID__NUM_OF];
+static bcmtrmux_channel bcmtrmux_proxy_channels[BCMTR_MAX_OLTS][BCMTR_MAX_INSTANCES][BCMOLT_OBJ_ID__NUM_OF];
+static bcmos_bool bcmtr_mux_connected[BCMTR_MAX_OLTS];
+static bcmos_bool bcmtr_mux_terminated[BCMTR_MAX_OLTS];
+static bcmos_bool bcmtrmux_dev_ctrl_intercept[BCMTR_MAX_OLTS][BCMOLT_GROUP_ID__NUM_OF];
+
+#ifndef IN_BAND
+
+/* Number of registered high-priority channels */
+static bcmtrmux_channel num_urgent_channels[BCMTR_MAX_OLTS];
+
+/* Receive semaphore */
+static bcmos_sem bcmtrmux_rx_lock[BCMTR_MAX_OLTS];
+
+#endif
+
+/* Statistics */
+static bcmtrmux_stat bcmtrmux_stat_array[BCMTR_MAX_OLTS];
+
+/* Receive tasks */
+static bcmos_task bcmtrmux_rx_task[BCMTR_MAX_OLTS];
+
+/* Registration protection */
+static bcmos_fastlock bcmtrmux_lock;
+
+static void bcmtrmux_rx_auto_proxy(bcmolt_devid device, bcmos_buf *buf, bcmtrmux_channel channel, void *data);
+static void bcmtrmux_rx_local(bcmolt_devid device, bcmos_buf *buf, bcmtrmux_channel channel, void *data);
+
+static bcmtrmux_msg_filter_cb_t bcmtrmux_msg_filter_cb;
+
+/* discard packet for which there is no registration */
+static void bcmtrmux_rx_discard(bcmolt_devid device, bcmos_buf *buf, bcmtrmux_channel channel, void *data)
+{
+    uint32_t *counter = (uint32_t *)data;
+    ++(*counter);
+    bcmos_buf_free(buf);
+}
+
+/* discard unpacked message for which there is no registration */
+static void bcmtrmux_local_rx_discard(bcmolt_devid device, bcmolt_msg *msg, void *data)
+{
+    uint32_t *counter = (uint32_t *)data;
+    ++(*counter);
+    bcmolt_msg_free(msg);
+}
+
+/* Find free channel. returns channel id >= 0 or BCMTRMUX_MAX_CHANNELS if no free channels */
+static int bcmtrmux_channel_get_free(bcmolt_devid device)
+{
+    int i;
+    /* Start from BCMTRMUX_CHANNEL_FIRST_FREE. Channel 0 is reserved for indications/proxy , Channel 1 is for Keep Alive*/
+    for (i=BCMTRMUX_CHANNEL_FIRST_FREE; i<BCMTRMUX_FIRST_URGENT_CHANNEL; i++)
+    {
+        if (bcmtrmux_rx_info_array[device][i].rx == bcmtrmux_rx_discard)
+            break;
+    }
+    return i;
+}
+
+#ifndef IN_BAND
+/* PCIe Receive handler */
+static int _bcmtrmux_pcie_rx_handler(long device)
+{
+    bcmos_errno rc;
+    bcmos_buf *buf;
+    uint32_t nbuf[BCMTR_PCIE_PRTY__NUM_OF] = {};
+    uint8_t ch;
+
+    BUG_ON(device >= BCMTR_MAX_OLTS);
+
+    BCMTRMUX_LOG("rx_task(%ld) - started\n", device);
+
+    /* Enable rx interrupt */
+
+    while (1)
+    {
+        bcmtr_pcie_rxint_enable(device);
+        bcmos_sem_wait(&bcmtrmux_rx_lock[device], BCMTRMUX_MAX_RX_DELAY);
+
+        if (!bcmtr_mux_connected[device])
+        {
+            break;
+        }
+        /* Wait for receive */
+        do
+        {
+            buf = NULL;
+            rc = bcmtr_swq_receive(device, BCMTR_PCIE_PRTY_NORMAL, &ch, &buf);
+            if (rc)
+            {
+                /* If DMA is not shared with urgent service, poll RXQ here,
+                 * don't wait for interrupt
+                 */
+                if (rc == BCM_ERR_QUEUE_EMPTY && !num_urgent_channels[device])
+                {
+                    bcmtr_pcie_rxint_disable(device);
+                    bcmtr_swq_rx_poll(device, nbuf);
+                    bcmtrmux_stat_array[device].rx_poll_normal += nbuf[BCMTR_PCIE_PRTY_NORMAL];
+                }
+                /* Wait for interrupt or semaphore timeout */
+                break;
+            }
+            bcmtrmux_rx_from_line((bcmolt_devid)device, (bcmtrmux_channel)ch, buf);
+        } while (bcmtr_mux_connected[device]);
+    }
+    BCMTRMUX_LOG("rx_task(%ld) - terminated\n", device);
+    bcmtr_mux_terminated[device] = BCMOS_TRUE;
+
+    return 0;
+}
+
+static void bcmtrmux_rx_irq(bcmolt_devid device)
+{
+    bcmos_buf *buf;
+    uint8_t ch;
+    uint32_t nbuf[BCMTR_PCIE_PRTY__NUM_OF] = {};
+
+    bcmtr_pcie_rxint_disable(device);
+    bcmtr_pcie_rxint_clear(device);
+    bcmtr_swq_rx_poll(device, nbuf);
+
+    /* Got some packets. Deliver high priority from interrupt level */
+    if (nbuf[BCMTR_PCIE_PRTY_URGENT])
+    {
+        bcmtrmux_stat_array[device].rx_poll_urgent += nbuf[BCMTR_PCIE_PRTY_URGENT];
+        while (bcmtr_swq_receive(device, BCMTR_PCIE_PRTY_URGENT, &ch, &buf) == BCM_ERR_OK)
+        {
+            bcmtrmux_rx_from_line(device, ch, buf);
+        }
+    }
+
+    /* Check normal priority */
+    if (nbuf[BCMTR_PCIE_PRTY_NORMAL])
+    {
+        bcmtrmux_stat_array[device].rx_poll_normal += nbuf[BCMTR_PCIE_PRTY_NORMAL];
+        bcmos_sem_post(&bcmtrmux_rx_lock[device]);
+    }
+
+    /* Enable rx interrupt */
+    bcmtr_pcie_rxint_enable(device);
+
+    return;
+}
+
+/* Tx confirmation interrupt handler.
+ * Used only if there are urgent channels
+ */
+static void bcmtrmux_tx_irq(bcmolt_devid device)
+{
+    /* Disable and clear transmit completion interrupts */
+    bcmtr_pcie_txint_disable(device);
+    bcmtr_pcie_txint_clear(device);
+    /* Submit buffers pending in sw queue to the h/w queue */
+    bcmtr_swq_tx_submit(device);
+    /* Re-enable tx completion interrupt */
+    bcmtr_pcie_txint_enable(device);
+    return;
+}
+
+/* Init PCIE transport */
+static bcmos_errno bcmtrmux_pcie_init(bcmolt_devid device, uint32_t txq_size, uint32_t rxq_size)
+{
+    uint32_t pcie_cookie[BCMOS_ROUND_UP(PCIE_OPAQUE_DATA_SIZE, sizeof(uint32_t))/sizeof(uint32_t)];
+    bcmtr_pcie_pre_connect_cfg cfg;
+    bcm_ll_dev_info ll_info;
+    int niter = 0;
+    bcmos_errno err;
+    bcmos_bool status;
+
+#ifndef SIMULATION_BUILD
+    err = bcm_ll_pcie_query(device, &ll_info);
+    if (err)
+    {
+        BCMOS_TRACE_RETURN(err, "bcm_ll_pcie_query() failed\n");
+    }
+#endif
+
+    BCMTRMUX_LOG("Waiting for BCM68620 application\n");
+    bcm_fld_set_rings_size(device, txq_size, rxq_size);
+    status = bcm_fld_test_device_bootrecord_flag(device);
+
+    /* Wait for embedded handshake. BCMTR_PCIE_START_TIMEOUT is in ms */
+    for (niter = 0;
+         niter < BCMTR_PCIE_START_TIMEOUT / 10 && !(status = bcm_fld_test_device_bootrecord_flag(device));
+         niter++)
+    {
+        bcmos_usleep(10000);
+    }
+    if (!status)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_IO, "BCM68620 application timeout\n");
+    }
+
+    err = bcm_fld_get_device_bootrecord(device, pcie_cookie);
+    if (err != BCM_ERR_OK)
+    {
+        BCMOS_TRACE_RETURN(err, "bcm_fld_get_device_bootrecord() failed\n");
+    }
+
+    /* set host prm bit - indicate host ready to send/receive DMA */
+    bcm_fld_clear_device_bootrecord_flag(device);
+
+    cfg.txq_size = txq_size;             /* Transmit queue size */
+    cfg.rxq_size = rxq_size;             /* Receive queue size */
+    cfg.max_mtu = BCMTR_MAX_MTU_SIZE;    /* Max MTU size */
+    cfg.pcie_reg_base = ll_info.soc_regs_base;
+    cfg.ddr_win_base = ll_info.soc_ddr_base;
+    cfg.rx_irq = ll_info.irq;
+
+    err = bcmtr_pcie_pre_connect(device, &cfg, (bcmtr_pcie_opaque_data *)pcie_cookie);
+    if (err)
+    {
+        BCMOS_TRACE_RETURN(err, "bcmtr_pcie_pre_connect() failed\n");
+    }
+
+    err = bcmtr_pcie_connect(device,(bcmtr_pcie_opaque_data *)pcie_cookie);
+    if (err)
+    {
+        BCMOS_TRACE_RETURN(err, "bcmtr_pcie_connect() failed\n");
+    }
+
+    bcm_fld_set_host_bootrecord_flag(device);
+
+    /* Wait for embedded handshake. BCMTR_PCIE_CONNECT_TIMEOUT is in ms */
+    for (niter = 0;
+         niter < BCMTR_PCIE_CONNECT_TIMEOUT / 10 && (status = bcm_fld_test_host_bootrecord_flag(device));
+         niter++)
+    {
+        bcmos_usleep(10000);
+    }
+    if (status)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_IO, "BCM68620 connect timeout\n");
+    }
+
+    BCMTRMUX_LOG("PCI transport: initialized\n");
+
+    return BCM_ERR_OK;
+}
+
+#else /* #ifndef IN_BAND */
+
+/* IN-BAND receive handler */
+static int _bcmtrmux_ib_rx_handler(long device)
+{
+    bcmos_errno rc;
+    bcmos_buf *buf;
+    uint8_t ch;
+
+    BUG_ON(device >= BCMTR_MAX_OLTS);
+
+    BCMTRMUX_LOG("rx_task(%ld) - started\n", device);
+
+    while (bcmtr_mux_connected[device])
+    {
+        /* Wait for receive */
+        buf = NULL;
+        rc = bcmtr_ib_receive(device, &ch, &buf);
+        if (rc == BCM_ERR_OK)
+        {
+            bcmtrmux_rx_from_line((bcmolt_devid)device, (bcmtrmux_channel)ch, buf);
+        }
+    }
+
+    BCMTRMUX_LOG("rx_task(%ld) - terminated\n", device);
+    bcmtr_mux_terminated[device] = BCMOS_TRUE;
+
+    return 0;
+}
+
+static bcmos_errno bcmtrmux_ib_connect(bcmolt_devid device,  bcmos_ipv4_address ip_address, uint16_t udp_port)
+{
+    bcmos_errno rc;
+
+    rc = bcmtr_ib_connect((uint8_t)device, ip_address, udp_port);
+    if (rc)
+    {
+        BCMTRMUX_LOG("%s: Failed to connect. Error %d\n", __FUNCTION__, rc);
+        return rc;
+    }
+    return rc;
+}
+
+#endif /* #ifndef IN_BAND */
+
+
+/** Initialize mux service
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtrmux_init(bcmtrmux_msg_filter_cb_t msg_filter_cb)
+{
+    static bcmos_bool initialized = BCMOS_FALSE;
+    int i, j;
+    bcmos_errno rc;
+
+    bcmtrmux_msg_filter_cb = msg_filter_cb;
+
+    BCMTRMUX_LOG("Initialising transport MUX subsystem\n");
+    if (initialized)
+    {
+        return BCM_ERR_ALREADY;
+    }
+
+    for (i=0; i<BCMTR_MAX_OLTS; i++)
+    {
+        for (j=0; j<BCMTRMUX_MAX_CHANNELS; j++)
+        {
+            bcmtrmux_rx_info_array[i][j].rx = bcmtrmux_rx_discard;
+            bcmtrmux_rx_info_array[i][j].data = &bcmtrmux_stat_array[i].rx_disc_remote;
+        }
+        bcmtrmux_rx_info_array[i][BCMTRMUX_CHANNEL_AUTO_PROXY].rx = bcmtrmux_rx_auto_proxy;
+        bcmtrmux_rx_info_array[i][BCMTRMUX_CHANNEL_AUTO_PROXY].data = NULL;
+        bcmtrmux_rx_info_array[i][BCMTRMUX_CHANNEL_DEV_CONTROL].rx = bcmtrmux_rx_local;
+        bcmtrmux_rx_info_array[i][BCMTRMUX_CHANNEL_DEV_CONTROL].data = NULL;
+        for (j=0; j<BCMTR_MAX_INSTANCES; j++)
+        {
+            bcmolt_obj_id k;
+            for (k=0; k<BCMOLT_OBJ_ID__NUM_OF; k++)
+            {
+                bcmtrmux_auto_channels[i][j][k] = BCMTRMUX_MAX_CHANNELS;
+                bcmtrmux_proxy_channels[i][j][k] = BCMTRMUX_MAX_CHANNELS;
+            }
+        }
+        bcmtrmux_local_rx_info_array[i].rx = bcmtrmux_local_rx_discard;
+        bcmtrmux_local_rx_info_array[i].data = &bcmtrmux_stat_array[i].tx_disc_local;
+    }
+
+    bcmos_fastlock_init(&bcmtrmux_lock, 0);
+
+    /*Don't initialize at this time for User Space dev ctrl,
+      don't have enough information*/
+#ifndef IN_BAND
+    rc = bcmtr_pcie_init(BCMTR_MAX_OLTS);
+    if (rc)
+    {
+        BCMOS_TRACE_RETURN(rc, "bcmtr_pcie_init() failed\n");
+    }
+
+    rc = bcmtr_swq_init();
+    if (rc)
+    {
+        BCMOS_TRACE_RETURN(rc, "bcmtr_swq_init() failed\n");
+    }
+
+    /* Register rx callback in PCIe driver */
+    bcmtr_pcie_rx_irq_cblk_register(bcmtrmux_rx_irq);
+    bcmtr_pcie_tx_irq_cblk_register(bcmtrmux_tx_irq);
+#else
+
+    rc = bcmtr_ib_init();
+    if (rc)
+    {
+        BCMOS_TRACE_RETURN(rc, "bcmtr_ib_init() failed\n");
+    }
+
+#endif /* #ifndef IN_BAND */
+
+    BCMTRMUX_LOG("Transport MUX init done\n");
+
+    return rc;
+}
+
+/** Notify mux driver that low-level transport connection is ready
+ * \returns: 0 in case of success or error code < 0
+ */
+#ifdef IN_BAND
+bcmos_errno bcmtrmux_connect(bcmolt_devid device,  bcmos_ipv4_address ip_address, uint16_t udp_port)
+#else
+bcmos_errno bcmtrmux_connect(bcmolt_devid device, uint32_t txq_size, uint32_t rxq_size)
+#endif
+{
+    static char task_name[BCMTR_MAX_OLTS][16];
+    bcmos_task_parm taskp = {};
+    bcmos_errno rc;
+
+    if (bcmtr_mux_connected[device])
+    {
+        return BCM_ERR_ALREADY;
+    }
+
+    snprintf(task_name[device], sizeof(task_name[device]), "bcmtr_rx%d", device);
+    taskp.data = (long)device;
+    taskp.name = task_name[device];
+
+#ifdef IN_BAND
+    rc = bcmtrmux_ib_connect(device, ip_address, udp_port);
+    if (rc)
+    {
+        BCMTRMUX_LOG("%s: Failed to init inband device. Error %d\n", __FUNCTION__, rc);
+        return rc;
+    }
+    taskp.handler = _bcmtrmux_ib_rx_handler;
+#else
+    rc = bcmos_sem_create(&bcmtrmux_rx_lock[device], 0, 0, NULL);
+    if (rc)
+    {
+        BCMTRMUX_LOG("%s: Failed to create rx lock. Error %d\n", __FUNCTION__, rc);
+        return rc;
+    }
+
+    /* Initialize low-level PCIe transport */
+    rc = bcmtrmux_pcie_init(device, txq_size, rxq_size);
+    if (rc)
+    {
+        bcmos_sem_destroy(&bcmtrmux_rx_lock[device]);
+        BCMTRMUX_LOG("%s: Failed to init low-level PCIe transport. Error %d\n", __FUNCTION__, rc);
+        return rc;
+    }
+    taskp.handler = _bcmtrmux_pcie_rx_handler;
+
+    rc = bcmtr_swq_device_init(device);
+    if (rc)
+    {
+        bcmos_sem_destroy(&bcmtrmux_rx_lock[device]);
+        BCMTRMUX_LOG("%s: Failed to init pcie_swq. Error %d\n", __FUNCTION__, rc);
+        return rc;
+    }
+
+#endif
+    bcmtr_mux_connected[device] = BCMOS_TRUE;
+    bcmtr_mux_terminated[device] = BCMOS_FALSE;
+
+    rc = bcmos_task_create(&bcmtrmux_rx_task[device], &taskp);
+    if (rc)
+    {
+#ifndef IN_BAND
+        bcmos_sem_destroy(&bcmtrmux_rx_lock[device]);
+#endif
+        bcmtr_mux_connected[device] = BCMOS_FALSE;
+        BCMTRMUX_LOG("%s: Failed to create rx task. Error %d\n", __FUNCTION__, rc);
+        return rc;
+    }
+
+    return BCM_ERR_OK;
+}
+
+/** Notify mux driver that low-level transport connection is disconnected
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtrmux_disconnect(bcmolt_devid device)
+{
+    if (!bcmtr_mux_connected[device])
+    {
+        return BCM_ERR_ALREADY;
+    }
+    bcmtr_mux_connected[device] = BCMOS_FALSE;
+#ifdef IN_BAND
+    bcmtr_ib_disconnect((uint8_t)device);
+#else
+    bcmos_sem_post(&bcmtrmux_rx_lock[device]);
+#endif
+    while (!bcmtr_mux_terminated[device])
+    {
+        bcmos_usleep(10000);
+    }
+    bcmos_task_destroy(&bcmtrmux_rx_task[device]);
+#ifndef IN_BAND
+    bcmos_sem_destroy(&bcmtrmux_rx_lock[device]);
+    bcmtr_swq_device_exit(device);
+    bcmtr_pcie_disconnect((uint8_t)device);
+#endif
+    return BCM_ERR_OK;
+}
+
+/** Cleanup and exit
+ */
+void bcmtrmux_exit(void)
+{
+    int i;
+
+    BCMTRMUX_LOG("Cleaning up transport MUX subsystem\n");
+#ifndef IN_BAND
+    bcmtr_swq_exit();
+    bcmtr_pcie_rx_irq_cblk_unregister();
+    bcmtr_pcie_tx_irq_cblk_unregister();
+#endif
+    /* kill receive tasks */
+    for (i=0; i<BCMTR_MAX_OLTS; i++)
+    {
+        bcmtrmux_disconnect((bcmolt_devid)i);
+    }
+#ifdef IN_BAND
+    bcmtr_ib_exit();
+#else
+    bcmtr_pcie_exit();
+#endif
+    BCMTRMUX_LOG("Transport MUX cleanup done\n");
+}
+
+/** Register PCIe channel owner */
+bcmos_errno bcmtrmux_channel_register(bcmolt_devid device, bcmtrmux_channel *channel,
+    f_bcmtr_rx_handler rx, void *data)
+{
+    bcmtrmux_channel ch;
+    long flags;
+
+    if ((unsigned)device >= BCMTR_MAX_OLTS || !channel || !rx)
+    {
+        return BCM_ERR_PARM;
+    }
+    ch = *channel;
+
+    flags = bcmos_fastlock_lock(&bcmtrmux_lock);
+
+    if (ch == BCMTRMUX_CHANNEL_AUTO_ASSIGN)
+    {
+        /* Auto-assign free channel */
+        ch = (bcmtrmux_channel)bcmtrmux_channel_get_free(device);
+        if (ch >= BCMTRMUX_MAX_CHANNELS)
+        {
+            bcmos_fastlock_unlock(&bcmtrmux_lock, flags);
+            return BCM_ERR_NORES;
+        }
+    }
+
+    /* Make sure that channel is valid and not busy */
+    if ((unsigned)ch >= BCMTRMUX_MAX_CHANNELS)
+    {
+        bcmos_fastlock_unlock(&bcmtrmux_lock, flags);
+        return BCM_ERR_PARM;
+    }
+    if (bcmtrmux_rx_info_array[device][ch].rx != bcmtrmux_rx_discard)
+    {
+        bcmos_fastlock_unlock(&bcmtrmux_lock, flags);
+        return BCM_ERR_ALREADY;
+    }
+
+    /* Assign channel */
+    bcmtrmux_rx_info_array[device][ch].rx = rx;
+    bcmtrmux_rx_info_array[device][ch].data = data;
+
+#ifndef IN_BAND
+    /* Urgent channels are not supported for IN-BAND management */
+    if (ch >= BCMTRMUX_FIRST_URGENT_CHANNEL)
+    {
+        /* We use transmit confirmation interrupt to kick transmission
+         * if PCI bus is shared between high and low-priority channels
+         */
+        if (!num_urgent_channels[device])
+            bcmtr_pcie_txint_enable(device);
+        ++num_urgent_channels[device];
+    }
+#endif
+
+    bcmos_fastlock_unlock(&bcmtrmux_lock, flags);
+
+    *channel = ch;
+
+    return BCM_ERR_OK;
+}
+
+
+/** Release PCIe channel allocated by bcmtrmux_channel_register()
+ *
+ * \param[in]   device  Maple device index
+ * \param[in]   channel
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtrmux_channel_unregister(bcmolt_devid device, bcmtrmux_channel channel)
+{
+    long flags;
+
+    if ((unsigned)device >= BCMTR_MAX_OLTS || (unsigned)channel >= BCMTRMUX_MAX_CHANNELS)
+    {
+        return BCM_ERR_PARM;
+    }
+
+    flags = bcmos_fastlock_lock(&bcmtrmux_lock);
+
+    if (bcmtrmux_rx_info_array[device][channel].rx == bcmtrmux_rx_discard)
+    {
+        bcmos_fastlock_unlock(&bcmtrmux_lock, flags);
+        return BCM_ERR_NOENT;
+    }
+
+    bcmtrmux_rx_info_array[device][channel].rx = bcmtrmux_rx_discard;
+    bcmtrmux_rx_info_array[device][channel].data = &bcmtrmux_stat_array[device].rx_disc_remote;
+
+#ifndef IN_BAND
+    /* Urgent channels are not supported for IN-BAND management */
+    if (channel >= BCMTRMUX_FIRST_URGENT_CHANNEL)
+    {
+        --num_urgent_channels[device];
+        /* If PCI bus is not shared between normal and urgent channels,
+         * transmit confirmation mechanism is not needed
+         */
+        if (!num_urgent_channels[device])
+            bcmtr_pcie_txint_disable(device);
+    }
+#endif
+
+    bcmos_fastlock_unlock(&bcmtrmux_lock, flags);
+
+    return BCM_ERR_OK;
+}
+
+/*
+ * Local termination handler
+ */
+
+/* Register local termination handler. */
+bcmos_errno bcmtrmux_local_handler_register(bcmolt_devid device, f_bcmtr_local_rx_handler rx, void *data)
+{
+    long flags;
+
+    if ((unsigned)device >= BCMTR_MAX_OLTS || !rx)
+    {
+        return BCM_ERR_PARM;
+    }
+    flags = bcmos_fastlock_lock(&bcmtrmux_lock);
+    if (bcmtrmux_local_rx_info_array[device].rx != bcmtrmux_local_rx_discard)
+    {
+        bcmos_fastlock_unlock(&bcmtrmux_lock, flags);
+        return BCM_ERR_ALREADY;
+    }
+    bcmtrmux_local_rx_info_array[device].rx = rx;
+    bcmtrmux_local_rx_info_array[device].data = data;
+    bcmos_fastlock_unlock(&bcmtrmux_lock, flags);
+    return BCM_ERR_OK;
+}
+
+
+/* Unregister local termination handler registered by bcmtrmux_local_handler_register() */
+bcmos_errno bcmtrmux_local_handler_unregister(bcmolt_devid device)
+{
+    long flags;
+
+    if ((unsigned)device >= BCMTR_MAX_OLTS)
+    {
+        return BCM_ERR_PARM;
+    }
+    flags = bcmos_fastlock_lock(&bcmtrmux_lock);
+    if (bcmtrmux_local_rx_info_array[device].rx == bcmtrmux_local_rx_discard)
+    {
+        bcmos_fastlock_unlock(&bcmtrmux_lock, flags);
+        return BCM_ERR_NOENT;
+    }
+    bcmtrmux_local_rx_info_array[device].data = &bcmtrmux_stat_array[device].tx_disc_local;
+    bcmtrmux_local_rx_info_array[device].rx = bcmtrmux_local_rx_discard;
+    bcmos_fastlock_unlock(&bcmtrmux_lock, flags);
+    return BCM_ERR_OK;
+}
+
+/* Deliver message to local destination */
+static bcmos_bool bcmtrmux_deliver_to_local(bcmolt_devid device, bcmtrmux_channel channel, bcmos_buf *buf, bcmtr_hdr *hdr)
+{
+    bcmtrmux_local_rx_info *rx_info;
+    bcmolt_msg *msg = NULL;
+    bcmolt_buf ubuf;
+    bcmos_errno err;
+
+    /* Unpack */
+    bcmolt_buf_init(&ubuf, bcmos_buf_length(buf), bcmos_buf_data(buf), BCMTR_BUF_ENDIAN);
+    bcmolt_buf_skip(&ubuf, BCMTR_HDR_SIZE);
+    err = bcmolt_msg_unpack(&ubuf, &msg);
+    bcmos_buf_free(buf);
+    if (err < 0)
+    {
+        BCMOS_TRACE_ERR("Message unpack error %s (%d)\n", bcmos_strerror(err), err);
+        ++bcmtrmux_stat_array[device].tx_disc_local;
+        return BCMOS_TRUE;
+    }
+    msg->corr_tag = hdr->corr_tag;
+    msg->subch = (bcmolt_subchannel)channel;
+    ++bcmtrmux_stat_array[device].tx_local;
+
+    rx_info = &bcmtrmux_local_rx_info_array[device];
+    rx_info->rx(device, msg, rx_info->data);
+    return BCMOS_TRUE;
+}
+
+/* send to line with repetitive attempts if pcie buffer is full */
+static void bcmtrmux_send_to_line(bcmolt_devid device, bcmtrmux_channel channel, bcmos_buf *buf)
+{
+    bcmos_errno rc;
+
+#ifdef IN_BAND
+    rc = bcmtr_ib_send((uint8_t)device, (uint8_t)channel, buf);
+#else
+    rc = bcmtr_swq_send((uint8_t)device, channel, buf);
+#endif
+    if (rc != BCM_ERR_OK)
+    {
+        /* Failed */
+        ++bcmtrmux_stat_array[device].tx_disc_remote;
+        bcmos_buf_free(buf);
+    }
+}
+
+/* Receive message from host application */
+void bcmtrmux_rx_from_host(bcmolt_devid device, bcmtrmux_channel channel, bcmos_buf *buf)
+{
+    bcmtr_hdr hdr;
+    bcmolt_obj_id obj;
+    bcmolt_mgt_group group;
+    uint16_t subgroup;
+    bcmos_errno rc;
+
+    /* Validate parameters */
+    BUG_ON((unsigned)device >= BCMTR_MAX_OLTS);
+    BUG_ON((unsigned)channel >= BCMTRMUX_MAX_CHANNELS);
+
+    /* Peek in transport header. It contains enough info to decide what to do with the message */
+    bcmtr_header_unpack(bcmos_buf_data(buf), &hdr);
+
+    rc = bcmolt_group_id_split(hdr.msg_id, &obj, &group, &subgroup);
+    if (rc)
+    {
+        BCMOS_TRACE_ERR("Can't decode group_id %u. Error %s (%d)\n", hdr.msg_id, bcmos_strerror(rc), rc);
+        ++bcmtrmux_stat_array[device].tx_disc_remote;
+        bcmos_buf_free(buf);
+        return;
+    }
+
+    /* Filter auto/proxy (un)registration.
+     * This message is terminated here.
+     */
+    if (hdr.auto_proxy_reg || hdr.auto_proxy_unreg)
+    {
+        bcmtrmux_channel *p_ch = (group == BCMOLT_MGT_GROUP_AUTO) ?
+            &bcmtrmux_auto_channels[device][hdr.instance][obj] : &bcmtrmux_proxy_channels[device][hdr.instance][obj];
+
+        bcmos_buf_free(buf);
+
+        /* Sanity check */
+        if (hdr.instance >= BCMTR_MAX_INSTANCES || obj >= BCMOLT_OBJ_ID__NUM_OF)
+        {
+            BCMOS_TRACE_ERR("Instance %u or object %d is insane\n", hdr.instance, obj);
+            return;
+        }
+
+        /* Do not override bcmolt_dev_ctrl filters */
+        if (*p_ch != BCMTRMUX_CHANNEL_DEV_CONTROL)
+        {
+            *p_ch = hdr.auto_proxy_reg ? channel : BCMTRMUX_MAX_CHANNELS;
+        }
+
+        return;
+    }
+
+    /* Filter message that should go to local destination (device control) */
+    if (bcmtrmux_msg_filter_cb && bcmtrmux_msg_filter_cb(device, obj, group, subgroup) == BCMTRMUX_DEST_LOCAL)
+    {
+        if (bcmtrmux_deliver_to_local(device, channel, buf, &hdr) == BCMOS_TRUE)
+            return;
+    }
+
+    /* Handle Remote message */
+    ++bcmtrmux_stat_array[device].tx_remote;
+    bcmtrmux_send_to_line(device, channel, buf);
+}
+
+
+/* Receive packet from the line or local control process.
+ * Parameters are expected to be checked beforehand.
+ * The function de-muxes
+ * - replies based on channel
+ * - autonomous/proxy messages based on registration info
+ */
+static void bcmtrmux_rx(bcmolt_devid device, bcmtrmux_channel channel, bcmos_buf *buf)
+{
+    bcmtrmux_rx_info *rx_info;
+    rx_info = &bcmtrmux_rx_info_array[device][channel];
+    rx_info->rx(device, buf, channel, rx_info->data);
+}
+
+
+/* Receive packet from PCIe interface */
+void bcmtrmux_rx_from_line(bcmolt_devid device, bcmtrmux_channel channel, bcmos_buf *buf)
+{
+    BUG_ON((unsigned)device >= BCMTR_MAX_OLTS);
+
+    if ((unsigned)channel >= BCMTRMUX_MAX_CHANNELS)
+    {
+        ++bcmtrmux_stat_array[device].rx_disc_inv_ch;
+        bcmos_buf_free(buf);
+        return;
+    }
+
+    ++bcmtrmux_stat_array[device].rx_remote;
+
+    bcmtrmux_rx(device, channel, buf);
+}
+
+/* Handle message received via Auto/Proxy channel */
+static void bcmtrmux_rx_auto_proxy(bcmolt_devid device, bcmos_buf *buf, bcmtrmux_channel channel, void *data)
+{
+    bcmtr_hdr hdr;
+    bcmolt_obj_id obj;
+    bcmolt_mgt_group group;
+    uint16_t subgroup;
+    bcmos_errno rc;
+
+    /* Peek in transport header. It contains enough info to decide what to do with the message */
+    bcmtr_header_unpack(bcmos_buf_data(buf), &hdr);
+
+    rc = bcmolt_group_id_split(hdr.msg_id, &obj, &group, &subgroup);
+    if (rc)
+    {
+        BCMOS_TRACE_ERR("Can't decode group_id %u. Error %s (%d)\n", hdr.msg_id, bcmos_strerror(rc), rc);
+        ++bcmtrmux_stat_array[device].rx_disc_auto;
+        bcmos_buf_free(buf);
+        return;
+    }
+
+    /* Sanity check */
+    if (hdr.instance >= BCMTR_MAX_INSTANCES || obj >= BCMOLT_OBJ_ID__NUM_OF)
+    {
+        BCMOS_TRACE_ERR("Instance %u or object %d is insane\n", hdr.instance, obj);
+        ++bcmtrmux_stat_array[device].rx_disc_auto;
+        bcmos_buf_free(buf);
+        return;
+    }
+
+    /* Dispatch based on object id */
+    /* Handle dev_ctrl intercept */
+    if (bcmtrmux_dev_ctrl_intercept[device][hdr.msg_id])
+    {
+        channel = BCMTRMUX_CHANNEL_DEV_CONTROL;
+    }
+    else
+    {
+        channel = (group == BCMOLT_MGT_GROUP_AUTO) ?
+            bcmtrmux_auto_channels[device][hdr.instance][obj] : bcmtrmux_proxy_channels[device][hdr.instance][obj];
+    }
+
+    /* If no registration - discard */
+    if (channel >= BCMTRMUX_MAX_CHANNELS)
+    {
+        ++bcmtrmux_stat_array[device].rx_disc_auto;
+        bcmos_buf_free(buf);
+        return;
+    }
+    bcmtrmux_rx(device, channel, buf);
+}
+
+/* Handle message received via DEV_CONTROL channel */
+static void bcmtrmux_rx_local(bcmolt_devid device, bcmos_buf *buf, bcmtrmux_channel channel, void *data)
+{
+    bcmtrmux_local_rx_info *rx_info;
+    bcmtr_hdr hdr;
+    bcmolt_buf ubuf;
+    bcmolt_msg *msg = NULL;
+    bcmos_errno err;
+
+    bcmtr_header_unpack(bcmos_buf_data(buf), &hdr);
+
+    bcmolt_buf_init(&ubuf, bcmos_buf_length(buf), bcmos_buf_data(buf), BCMTR_BUF_ENDIAN);
+    bcmolt_buf_skip(&ubuf, BCMTR_HDR_SIZE);
+    err = bcmolt_msg_unpack(&ubuf, &msg);
+    bcmos_buf_free(buf);
+    if (err < 0)
+    {
+        BCMOS_TRACE_ERR("Message unpack error %s (%d)\n", bcmos_strerror(err), err);
+        ++bcmtrmux_stat_array[device].rx_disc_remote;
+        return;
+    }
+
+    msg->corr_tag = hdr.corr_tag;
+    msg->subch = (bcmolt_subchannel)channel;
+    ++bcmtrmux_stat_array[device].rx_local;
+
+    rx_info = &bcmtrmux_local_rx_info_array[device];
+    rx_info->rx(device, msg, rx_info->data);
+}
+
+static bcmos_errno bcmtrmux_msg_pack(bcmolt_devid device, bcmolt_msg *msg, bcmos_buf **p_buf)
+{
+    int32_t len = bcmolt_msg_get_packed_length(msg);
+    bcmos_buf *buf;
+    bcmolt_buf ubuf;
+    bcmos_errno rc = BCM_ERR_OK;
+    bcmtr_hdr thdr = {};
+
+    if (len < 0)
+    {
+        BCMOS_TRACE_ERR("Can't calculate packet length. Error %s (%d)\n", bcmos_strerror(rc), len);
+        return BCM_ERR_PARM;
+    }
+    rc = bcmtr_header_fill(msg, &thdr);
+    if (rc)
+    {
+        BCMOS_TRACE_ERR("Can't create transport header. Error %s (%d)\n", bcmos_strerror(rc), rc);
+        return BCM_ERR_PARM;
+    }
+
+    len += BCMTR_HDR_SIZE;
+    buf = bcmos_buf_alloc(len);
+    if (!buf)
+    {
+        BCMOS_TRACE_ERR("Can't allocate packet buffer\n");
+        return BCM_ERR_NOMEM;
+    }
+    bcmolt_buf_init(&ubuf, len, bcmos_buf_data(buf), BCMTR_BUF_ENDIAN);
+    bcmolt_buf_skip(&ubuf, BCMTR_HDR_SIZE);
+
+    /* Pack transport header */
+    bcmtr_header_pack(&thdr, ubuf.start);
+
+    /* Pack message */
+    rc = bcmolt_msg_pack(msg, &ubuf);
+    if (rc)
+    {
+        BCMOS_TRACE_ERR("Message pack failed. Error %s (%d)\n", bcmos_strerror(rc), rc);
+        bcmos_buf_free(buf);
+        return BCM_ERR_PARM;
+    }
+    bcmos_buf_length_set(buf, len);
+
+    *p_buf = buf;
+
+    return BCM_ERR_OK;
+}
+
+/* Send packet from local control process to the host application */
+bcmos_errno bcmtrmux_control_to_host(bcmolt_devid device, bcmolt_msg *msg)
+{
+    bcmtrmux_channel channel = (bcmtrmux_channel)msg->subch;
+    bcmos_buf *buf;
+    bcmos_errno rc;
+
+    BUG_ON((unsigned)channel >= BCMTRMUX_MAX_CHANNELS);
+    BUG_ON((unsigned)device >= BCMTR_MAX_OLTS);
+
+    ++bcmtrmux_stat_array[device].control_to_host;
+
+    rc = bcmtrmux_msg_pack(device, msg, &buf);
+    if (rc)
+    {
+        return rc;
+    }
+    bcmtrmux_rx(device, channel, buf);
+    return BCM_ERR_OK;
+}
+
+/* Send packet from local control process to the embedded system */
+bcmos_errno bcmtrmux_control_to_line(bcmolt_devid device, bcmolt_msg *msg)
+{
+    bcmos_buf *buf;
+    bcmos_errno err;
+
+    BUG_ON((unsigned)device >= BCMTR_MAX_OLTS);
+
+    ++bcmtrmux_stat_array[device].control_to_line;
+
+    err = bcmtrmux_msg_pack(device, msg, &buf);
+    if (err)
+    {
+        return err;
+    }
+
+    bcmtrmux_send_to_line(device, BCMTRMUX_CHANNEL_DEV_CONTROL, buf);
+
+    return err;
+}
+
+/* Register message for intercept by bcmolt_dev_ctrl */
+bcmos_errno bcmtrmux_control_auto_intercept_filter(bcmolt_devid device,  bcmolt_obj_id object, uint16_t subgroup)
+{
+    bcmos_errno err;
+    bcmolt_group_id msg_id;
+
+    if ((unsigned)device >= BCMTR_MAX_OLTS)
+    {
+        return BCM_ERR_PARM;
+    }
+    err = bcmolt_group_id_combine(object, BCMOLT_MGT_GROUP_AUTO, subgroup, &msg_id);
+    if (err)
+    {
+        BCMOS_TRACE_ERR("Can't identify operation %d for object %d. Error %s (%d)\n",
+            (int)subgroup, (int)object, bcmos_strerror(err), err);
+        return err;
+    }
+    bcmtrmux_dev_ctrl_intercept[device][msg_id] = BCMOS_TRUE;
+    return BCM_ERR_OK;
+}
+
+
+/** Get transport mux statistics.
+ *
+ * \param[in]   device  Maple device index
+ * \param[out]  stat    Statistics
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtrmux_stat_get(bcmolt_devid device, bcmtrmux_stat *stat)
+{
+    if ((unsigned)device >= BCMTR_MAX_OLTS || !stat)
+    {
+        return BCM_ERR_PARM;
+    }
+    *stat = bcmtrmux_stat_array[device];
+    return BCM_ERR_OK;
+}
+
+#ifdef __KERNEL__
+
+EXPORT_SYMBOL(bcmtrmux_init);
+EXPORT_SYMBOL(bcmtrmux_connect);
+EXPORT_SYMBOL(bcmtrmux_disconnect);
+EXPORT_SYMBOL(bcmtrmux_channel_register);
+EXPORT_SYMBOL(bcmtrmux_channel_unregister);
+EXPORT_SYMBOL(bcmtrmux_local_handler_register);
+EXPORT_SYMBOL(bcmtrmux_local_handler_unregister);
+EXPORT_SYMBOL(bcmtrmux_rx_from_host);
+EXPORT_SYMBOL(bcmtrmux_rx_from_line);
+EXPORT_SYMBOL(bcmtrmux_control_to_host);
+EXPORT_SYMBOL(bcmtrmux_control_to_line);
+EXPORT_SYMBOL(bcmtrmux_control_auto_intercept_filter);
+EXPORT_SYMBOL(bcmtrmux_stat_get);
+
+#endif
diff --git a/bcm68620_release/release/host_driver/transport/mux/bcmolt_tr_mux.h b/bcm68620_release/release/host_driver/transport/mux/bcmolt_tr_mux.h
new file mode 100644
index 0000000..f837375
--- /dev/null
+++ b/bcm68620_release/release/host_driver/transport/mux/bcmolt_tr_mux.h
@@ -0,0 +1,252 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef BCMOLT_TR_MUX_H_
+#define BCMOLT_TR_MUX_H_
+
+/** \defgroup tr_mux Transport Multiplexer
+ * - PCIe channel multiplexer
+ * - locally/remotely - terminated message multiplexer
+ * - autonomous messages de-multiplexer
+ * @{
+ */
+
+#include <bcmolt_msg.h>
+#ifndef IN_BAND
+#include <bcmtr_pcie_sw_queue.h>
+#endif
+
+
+/* Message destination: local or remote */
+typedef enum
+{
+    BCMTRMUX_DEST_LOCAL,
+    BCMTRMUX_DEST_REMOTE,
+} bcmtrmux_msg_dest;
+
+typedef bcmtrmux_msg_dest (*bcmtrmux_msg_filter_cb_t)(bcmolt_devid, bcmolt_obj_id obj, bcmolt_mgt_group group, uint16_t subgroup);
+
+/** Initialize mux service
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtrmux_init(bcmtrmux_msg_filter_cb_t msg_filter_cb);
+
+/** Notify mux driver that low-level transport connection is ready
+ * \returns: 0 in case of success or error code < 0
+ */
+#ifdef IN_BAND 
+bcmos_errno bcmtrmux_connect(bcmolt_devid device,  bcmos_ipv4_address ip_address, uint16_t udp_port);
+#else
+bcmos_errno bcmtrmux_connect(bcmolt_devid device, uint32_t txq_size, uint32_t rxq_size);
+#endif
+
+/** Notify mux driver that low-level transport connection is disconnected
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtrmux_disconnect(bcmolt_devid device);
+
+/** Cleanup and exit
+ */
+void bcmtrmux_exit(void);
+
+/*
+ * PCIe channel multiplexer
+ */
+
+/** Logical channel id */
+typedef int bcmtrmux_channel;
+
+/** Mux statistics */
+typedef struct bcmtrmux_stat
+{
+    uint32_t tx_remote;         /**< Attempted transmit to device (incuding discards) */
+    uint32_t tx_local;          /**< Attempted "transmit" to device control */
+    uint32_t tx_disc_remote;    /**< Discarded when transmitting to remote device (not ready or queue overflow) */
+    uint32_t tx_disc_local;     /**< Couldn't deliver to device control. No handler */
+    uint32_t rx_remote;         /**< Received from device */
+    uint32_t rx_local;          /**< Message from the line intercepted by device control */
+    uint32_t rx_auto;           /**< Received autonomous messages */
+    uint32_t control_to_host;   /**< Sent by device control to the host */
+    uint32_t control_to_line;   /**< Sent by device control to line */
+    uint32_t rx_disc_remote;    /**< Discarded packets received from device. Can't demux channel */
+    uint32_t rx_disc_auto;      /**< Discarded autonomous messages. Can't demux auto message */
+    uint32_t rx_disc_local;     /**< Discarded packets received from device control. Can't demux channel */
+    uint32_t rx_disc_inv_ch;    /**< Discarded because channel is invalid */
+    uint32_t rx_poll_urgent;    /**< Urgent buffers counted by bcmtr_sw_queue_rx_poll() */
+    uint32_t rx_poll_normal;    /**< Normal buffers counted by bcmtr_sw_queue_rx_poll() */
+} bcmtrmux_stat;
+
+
+/** Max number of channels per device */
+#define BCMTRMUX_MAX_CHANNELS   32
+
+/** First urgent channel */
+#ifndef IN_BAND
+#define BCMTRMUX_FIRST_URGENT_CHANNEL BCMTR_SWQ_FIRST_URGENT_CHANNEL
+#if BCMTRMUX_FIRST_URGENT_CHANNEL >= BCMTRMUX_MAX_CHANNELS
+    #error BCMTRMUX_FIRST_URGENT_CHANNEL and BCMTRMUX_MAX_CHANNELS settings are inconsistent
+#endif
+
+#else
+
+#define BCMTRMUX_FIRST_URGENT_CHANNEL (BCMTRMUX_MAX_CHANNELS - 1)        /* Urgent channel is not supported for INBAND. */
+
+#endif
+
+
+/** Auto-assign channel */
+#define BCMTRMUX_CHANNEL_AUTO_ASSIGN   (-1)
+
+/** Channel id reserved for autonomous/proxy messages */
+#define BCMTRMUX_CHANNEL_AUTO_PROXY     0
+
+/** Channel id reserved for device control */
+#define BCMTRMUX_CHANNEL_DEV_CONTROL    1
+
+/** First channel id that is not reserved */
+#define BCMTRMUX_CHANNEL_FIRST_FREE     (BCMTRMUX_CHANNEL_DEV_CONTROL + 1)
+
+/** Receive message handler */
+typedef void (*f_bcmtr_rx_handler)(bcmolt_devid device, bcmos_buf *buf, bcmtrmux_channel channel, void *data);
+
+/** Local receive message handler */
+typedef void (*f_bcmtr_local_rx_handler)(bcmolt_devid device, bcmolt_msg *msg, void *data);
+
+/** Register PCIe channel owner
+ *
+ * \param[in]           device  Maple device index
+ * \param[in,out]       channel Logical PCIe channel id.
+ *                              If BCMTRMUX_CHANNEL_AUTO_ASSIGN, unused channel is allocated internally.
+ * \param[in]           rx      Receive callback that should be used for packets received over channel
+ * \param[in]           data    Data to be passed to receive callback
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtrmux_channel_register(bcmolt_devid device, bcmtrmux_channel *channel,
+    f_bcmtr_rx_handler rx, void *data);
+
+
+/** Release PCIe channel allocated by bcmtrmux_channel_register()
+ *
+ * \param[in]   device  Maple device index
+ * \param[in]   channel
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtrmux_channel_unregister(bcmolt_devid device, bcmtrmux_channel channel);
+
+
+/** Receive message from host application
+ *
+ * This function is called for messages transmitted from the host.
+ * Message can be locally or remotely terminated
+ * \param[in]   device  Maple device index
+ * \param[in]   channel Logical channel
+ * \param[in]   buf     Buffer to be transmitted
+ */
+void bcmtrmux_rx_from_host(bcmolt_devid device, bcmtrmux_channel channel, bcmos_buf *buf);
+
+/** Receive packet from PCIe interface
+ *
+ * \param[in]   device  Maple device index
+ * \param[in]   channel Logical channel
+ * \param[in]   buf     Buffer to be forwarded to application.
+ *                      It is de-allocated automatically
+ */
+void bcmtrmux_rx_from_line(bcmolt_devid device, bcmtrmux_channel channel, bcmos_buf *buf);
+
+/** Send packet from local control process to the host application
+ *
+ * \param[in]   device  Maple device index
+ * \param[in]   msg     Message to be sent to host application.
+ *                      Attention! It is responsibility of the caller to release the message
+ *                      after return from this function - if necessary.
+ *                      The reason for this is that it is expected that often msg will be allocated on stack.
+ *                      It is also responsibility of the caller to make sure that msg->subch is set correctly
+ *                      - preserved for request/response exchange
+ *                      - set = BCMTRMUX_CHANNEL_AUTO_PROXY for autonomous indications
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtrmux_control_to_host(bcmolt_devid device, bcmolt_msg *msg);
+
+/** Send packet from local control process to the embedded system
+ *
+ * \param[in]   device  Maple device index
+ * \param[in]   msg     Message to be sent to the embedded system.
+ *                      Attention! It is responsibility of the caller to release the message
+ *                      after return from this function - if necessary.
+ *                      The reason for this is that it is expected that often msg will be allocated on stack.
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtrmux_control_to_line(bcmolt_devid device, bcmolt_msg *msg);
+
+/** Register message for intercept by dev_ctrl
+ *
+ * Matched message receive from the line will be intercepted and
+ * delivered to callback registered using bcmtrmux_local_handler_register()
+ *
+ * \param[in]   device   Maple device index
+ * \param[in]   object   Object for which message is to be intercepted
+ * \param[in]   subgroup Message subgroup
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtrmux_control_auto_intercept_filter(bcmolt_devid device,  bcmolt_obj_id object, uint16_t subgroup);
+
+/*
+ * Local termination handler
+ */
+
+/** Register local termination handler.
+ *
+ * This handler is called for messages transmitted by host application
+ * that should be terminated locally by device control driver and
+ * for messages received from the line that match bcmtrmux_control_auto_intercept_filter()
+ *
+ * \param[in]   device  Maple device index
+ * \param[in]   rx      Receive callback that should be used for locally-terminated packets.
+ *                      It must release the buffer when no longer needed
+ * \param[in]   data    Data to be passed to receive callback
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtrmux_local_handler_register(bcmolt_devid device, f_bcmtr_local_rx_handler rx, void *data);
+
+/** Unregister local termination handler registered by bcmtrmux_local_handler_register()
+ *
+ * \param[in]   device  Maple device index
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtrmux_local_handler_unregister(bcmolt_devid device);
+
+/** Get transport mux statistics.
+ *
+ * \param[in]   device  Maple device index
+ * \param[out]  stat    Statistics
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtrmux_stat_get(bcmolt_devid device, bcmtrmux_stat *stat);
+
+#endif
diff --git a/bcm68620_release/release/host_driver/transport/mux/daemon/Makefile b/bcm68620_release/release/host_driver/transport/mux/daemon/Makefile
new file mode 100644
index 0000000..f3f9fc3
--- /dev/null
+++ b/bcm68620_release/release/host_driver/transport/mux/daemon/Makefile
@@ -0,0 +1,27 @@
+# In Band transport
+# Consists of 2 components
+# - low-level driver (send/rx functions)
+# - multiplexer
+#
+ifneq ("$(SIMULATION_BUILD)", "y")
+MOD_NAME = trmux_daemon
+
+MOD_DEPS = transport model trmux inband_driver
+
+MOD_DEFS += -DIN_BAND
+
+ifeq ("$(RELEASE_BUILD)", "y")
+    MOD_DEPS += common_api
+else
+    MOD_DEPS += api
+endif
+
+MOD_TYPE = lib
+
+srcs = ../bcmolt_tr_mux.c 
+
+USE_LINT = yes
+
+endif
+
+
diff --git a/bcm68620_release/release/host_driver/transport/pcie_sw_queue/Makefile b/bcm68620_release/release/host_driver/transport/pcie_sw_queue/Makefile
new file mode 100644
index 0000000..1e36d57
--- /dev/null
+++ b/bcm68620_release/release/host_driver/transport/pcie_sw_queue/Makefile
@@ -0,0 +1,21 @@
+# PCIe Software Queue driver
+# - Software layer on top of low level PCIe driver that adds support
+#   for s/w queue and priority
+#
+MOD_NAME = pcie_sw_queue
+
+MOD_DEPS = pcie
+
+ifeq ("$(OS_KERNEL)", "linux")
+MOD_TYPE = linux_lib
+else
+MOD_TYPE = lib
+endif
+
+ifneq ("$(RAW_TRANSPORT_VIA_UDP)", "y")
+    srcs = bcmtr_pcie_sw_queue.c
+endif
+
+USE_LINT = yes
+
+
diff --git a/bcm68620_release/release/host_driver/transport/pcie_sw_queue/bcmtr_pcie_sw_queue.c b/bcm68620_release/release/host_driver/transport/pcie_sw_queue/bcmtr_pcie_sw_queue.c
new file mode 100644
index 0000000..624101e
--- /dev/null
+++ b/bcm68620_release/release/host_driver/transport/pcie_sw_queue/bcmtr_pcie_sw_queue.c
@@ -0,0 +1,389 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+#include <bcmtr_pcie.h>
+#include <bcmolt_tr_pcie_specific.h>
+#include "bcmtr_pcie_sw_queue.h"
+
+/*
+ * bcm_pcie_sw_queue.c
+ * Software layer on top of low level PCIe driver that adds support
+ * for s/w queue and priority
+ */
+typedef struct
+{
+    bcmos_buf_queue txq;           /* Transmit queue */
+    bcmos_buf_queue rxq;           /* Receive queue */
+    uint32_t max_hwq_size;
+    uint32_t max_swq_size;
+    bcmtr_swq_rx_cb rx_cb;         /* Optional rx_cb for callback-based RX buffer delivery */
+} pcie_swq;
+
+static pcie_swq swq_info[BCMTR_MAX_OLTS][BCMTR_PCIE_PRTY__NUM_OF];
+static uint32_t hwq_occupancy[BCMTR_MAX_OLTS];  /* Number of unacknowledged buffers in hw tx queue */
+static bcmos_bool swq_initialized[BCMTR_MAX_OLTS];
+static bcmos_fastlock tx_lock[BCMTR_MAX_OLTS];
+static bcmos_fastlock rx_lock[BCMTR_MAX_OLTS];
+
+#define BCMTR_SWQ_GET_RETURN_IF_ERROR(device,prty,swq)   \
+    do {                                        \
+        if (device >= BCMTR_MAX_OLTS)           \
+            return BCM_ERR_PARM;                \
+        swq = &swq_info[device][prty];          \
+    } while (0)
+
+static inline long _bcmtr_swq_tx_lock(uint8_t device)
+{
+    return bcmos_fastlock_lock(&tx_lock[device]);
+}
+
+static inline void _bcmtr_swq_tx_unlock(uint8_t device, long flags)
+{
+    bcmos_fastlock_unlock(&tx_lock[device], flags);
+}
+
+static inline long _bcmtr_swq_rx_lock(uint8_t device)
+{
+    return bcmos_fastlock_lock(&rx_lock[device]);
+}
+
+static inline void _bcmtr_swq_rx_unlock(uint8_t device, long flags)
+{
+    bcmos_fastlock_unlock(&rx_lock[device], flags);
+}
+
+/** Tx done callback.
+ * Must be called under tx_lock
+ */
+static void _bcmtr_swq_tx_done_cb(uint8_t device, bcmos_buf *buf)
+{
+    BUG_ON(!hwq_occupancy[device]);
+    --hwq_occupancy[device];
+    bcmos_buf_free(buf);
+}
+
+/* Initialize PCI software queue module */
+bcmos_errno bcmtr_swq_init(void)
+{
+    return bcmtr_pcie_tx_done_cblk_register(_bcmtr_swq_tx_done_cb);
+}
+
+/* Cleanup software queue module
+ */
+void bcmtr_swq_exit(void)
+{
+    int i;
+
+    /* Unregister from bcmtr_pcie driver */
+    bcmtr_pcie_tx_done_cblk_unregister();
+
+    for (i = 0; i < BCMTR_MAX_OLTS; i++)
+        bcmtr_swq_device_exit(i);
+}
+
+/* Initialize PCI software queue module */
+bcmos_errno bcmtr_swq_device_init(uint8_t device)
+{
+    bcmtr_pcie_prty prty;
+
+    if (device >= BCMTR_MAX_OLTS)
+        return BCM_ERR_PARM;
+
+    if (swq_initialized[device])
+        return BCM_ERR_ALREADY;
+
+    bcmos_fastlock_init(&tx_lock[device], 0);
+    bcmos_fastlock_init(&rx_lock[device], 0);
+    for (prty = 0; prty < BCMTR_PCIE_PRTY__NUM_OF; prty++)
+    {
+        pcie_swq *swq = &swq_info[device][prty];
+        bcmos_buf_queue_init(&swq->txq);
+        bcmos_buf_queue_init(&swq->rxq);
+        swq->rx_cb = NULL;
+        swq->max_hwq_size = swq->max_swq_size = 0;
+    }
+    swq_initialized[device] = BCMOS_TRUE;
+
+    return BCM_ERR_OK;
+}
+
+/* Cleanup software queue module */
+void bcmtr_swq_device_exit(uint8_t device)
+{
+    bcmtr_pcie_prty prty;
+
+    if (!swq_initialized[device])
+        return;
+
+    for (prty = 0; prty < BCMTR_PCIE_PRTY__NUM_OF; prty++)
+    {
+        pcie_swq *swq = &swq_info[device][prty];
+        bcmos_buf *buf;
+
+        while ((buf=bcmos_buf_queue_get(&swq->txq)))
+            bcmos_buf_free(buf);
+        while ((buf=bcmos_buf_queue_get(&swq->rxq)))
+            bcmos_buf_free(buf);
+    }
+    swq_initialized[device] = BCMOS_FALSE;
+
+    return;
+}
+
+/** Send buffer to the peer
+ * \param[in]   device    Maple device index
+ * \param[in]   channel   Channel id (opaque to the bcmtr_pcie driver)
+ * \param[in]   buf       Buffer to be transferred
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtr_swq_send(uint8_t device, uint8_t channel, bcmos_buf *buf)
+{
+    bcmtr_pcie_prty prty = (channel >= BCMTR_SWQ_FIRST_URGENT_CHANNEL) ?
+        BCMTR_PCIE_PRTY_URGENT : BCMTR_PCIE_PRTY_NORMAL;
+    pcie_swq *swq;
+    bcmos_bool was_empty;
+    bcmos_bool hw_queue_full;
+    bcmos_errno err;
+    long flags;
+
+    BCMTR_SWQ_GET_RETURN_IF_ERROR(device, prty, swq);
+
+    /* Store channel in the buffer */
+    bcmos_buf_channel_set(buf, channel);
+
+    /* Prevent concurrent access to the queue */
+    flags = _bcmtr_swq_tx_lock(device);
+
+    /* Store q-was-empty status */
+    was_empty = bcmos_buf_queue_is_empty(&swq->txq);
+
+    /* Check if max h/w queue occupancy isn't exceeded. If it isn't and s/w queue is empty
+     * submit directly to the h/w queue.
+     */
+    hw_queue_full = (swq->max_hwq_size && hwq_occupancy[device] >= swq->max_hwq_size);
+    if (was_empty && !hw_queue_full)
+    {
+        ++hwq_occupancy[device];
+        _bcmtr_swq_tx_unlock(device, flags);
+        err = bcmtr_pcie_send(device, channel, buf);
+        if (err)
+        {
+            flags = _bcmtr_swq_tx_lock(device);
+            --hwq_occupancy[device];
+            /* If sw q is enabled, enque the buffer, otherwise, just return */
+            if (swq->max_swq_size || swq->max_hwq_size)
+            {
+                bcmos_buf_queue_put(&swq->txq, buf);
+                err = BCM_ERR_OK;
+            }
+            _bcmtr_swq_tx_unlock(device, flags);
+        }
+    }
+    else
+    {
+        bcmos_buf_queue_put(&swq->txq, buf);
+        _bcmtr_swq_tx_unlock(device, flags);
+        err = BCM_ERR_OK;
+    }
+
+
+    return err;
+}
+
+/** Receive packet from device
+ * \param[in]   device          Maple device index
+ * \param[in]   prty            Priority
+ * \param[out]  channel         message channel from the BD
+ * \param[out]  buf  pointer to network buffer containing the
+ *       received packet
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtr_swq_receive(uint8_t device, bcmtr_pcie_prty prty, uint8_t *channel, bcmos_buf **buf)
+{
+    pcie_swq *swq;
+    long flags;
+    bcmos_errno err;
+
+    BCMTR_SWQ_GET_RETURN_IF_ERROR(device, prty, swq);
+
+    /* Peevent concurent access to the queue */
+    flags = _bcmtr_swq_rx_lock(device);
+    *buf = bcmos_buf_queue_get(&swq->rxq);
+    if (*buf)
+    {
+        *channel = bcmos_buf_channel(*buf);
+        err = BCM_ERR_OK;
+    }
+    else
+    {
+        err = BCM_ERR_QUEUE_EMPTY;
+    }
+    _bcmtr_swq_rx_unlock(device, flags);
+
+    return err;
+}
+
+/** Configure TX queue.
+ */
+bcmos_errno bcmtr_swq_tx_queue_cfg(uint8_t device, bcmtr_pcie_prty prty, uint32_t hardq_size, uint32_t softq_size)
+{
+    pcie_swq *swq;
+
+    BCMTR_SWQ_GET_RETURN_IF_ERROR(device, prty, swq);
+
+    swq->max_hwq_size = hardq_size;
+    swq->max_swq_size = softq_size;
+
+    return BCM_ERR_OK;
+}
+
+/** Register for "data received indication"
+ * \param[in]   device          Maple device index
+ * \param[in]   prty            Priority
+ * \param[in]   cb              Callback pointer
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtr_swq_rx_cb_register(uint8_t device, bcmtr_pcie_prty prty, bcmtr_swq_rx_cb rx_cb)
+{
+    if (device >= BCMTR_MAX_OLTS)
+        return BCM_ERR_PARM;
+    swq_info[device][prty].rx_cb = rx_cb;
+
+    return BCM_ERR_OK;
+}
+
+/** Unregister "data received indication" callback
+ * \param[in]   device          Maple device index
+ * \param[in]   prty            Priority
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtr_swq_rx_cb_unregister(uint8_t device, bcmtr_pcie_prty prty)
+{
+    if (device >= BCMTR_MAX_OLTS)
+        return BCM_ERR_PARM;
+    swq_info[device][prty].rx_cb = NULL;
+
+    return BCM_ERR_OK;
+}
+
+/* Fetch data from the hw to the sw queue. */
+void bcmtr_swq_rx_poll(uint8_t device, uint32_t nbuf[])
+{
+    uint8_t channel;
+    bcmos_buf *buf;
+    int n[BCMTR_PCIE_PRTY__NUM_OF] = {};
+    long flags;
+    bcmos_errno err;
+
+    do
+    {
+        bcmtr_pcie_prty prty;
+        pcie_swq *swq;
+
+        err = bcmtr_pcie_receive(device, &channel, &buf);
+        if (err != BCM_ERR_OK)
+            break;
+        prty = (channel >= BCMTR_SWQ_FIRST_URGENT_CHANNEL) ?
+            BCMTR_PCIE_PRTY_URGENT : BCMTR_PCIE_PRTY_NORMAL;
+        /* If callback based delivery - deliver buffer now, otherwise, place on s/w queue */
+        swq = &swq_info[device][prty];
+        if (swq->rx_cb)
+        {
+            swq->rx_cb(device, channel, buf);
+        }
+        else
+        {
+            bcmos_buf_channel_set(buf, channel);
+            flags = _bcmtr_swq_rx_lock(device);
+            bcmos_buf_queue_put(&swq->rxq, buf);
+            _bcmtr_swq_rx_unlock(device, flags);
+        }
+        ++n[prty];
+    } while (BCMOS_TRUE);
+
+
+    nbuf[0] = n[0];
+    nbuf[1] = n[1];
+}
+
+/* Submit data from the sw TX queue to the h/w */
+static void _bcmtr_swq_tx_submit_prty(uint8_t device, bcmtr_pcie_prty prty)
+{
+    bcmos_errno err = BCM_ERR_OK;
+    pcie_swq *swq;
+    bcmos_buf *buf;
+    uint8_t channel;
+    bcmos_bool hw_queue_full;
+    long flags;
+
+    swq = &swq_info[device][prty];
+    do
+    {
+        flags = _bcmtr_swq_tx_lock(device);
+
+        /* Check if not over limit */
+        hw_queue_full = (swq->max_hwq_size && hwq_occupancy[device] >= swq->max_hwq_size);
+        if (hw_queue_full)
+        {
+            _bcmtr_swq_tx_unlock(device, flags);
+            break;
+        }
+
+        /* Get from s/w queue and submit to the h/w queue */
+        buf = bcmos_buf_queue_peek(&swq->rxq);
+        _bcmtr_swq_tx_unlock(device, flags);
+        if (!buf)
+            break;
+
+        channel = bcmos_buf_channel(buf);
+        err = bcmtr_pcie_send(device, channel, buf);
+        if (err != BCM_ERR_OK)
+            break;
+
+        flags = _bcmtr_swq_tx_lock(device);
+        ++hwq_occupancy[device];
+        bcmos_buf_queue_get(&swq->txq);
+        _bcmtr_swq_tx_unlock(device, flags);
+
+    } while (BCMOS_TRUE);
+}
+
+/* Submit data from the sw TX queue to the h/w */
+void bcmtr_swq_tx_submit(uint8_t device)
+{
+    if (bcmtr_pcie_tx_collect(device) > 0)
+    {
+        _bcmtr_swq_tx_submit_prty(device, BCMTR_PCIE_PRTY_URGENT);
+        _bcmtr_swq_tx_submit_prty(device, BCMTR_PCIE_PRTY_NORMAL);
+    }
+}
+
+#ifdef __KERNEL__
+EXPORT_SYMBOL(bcmtr_swq_tx_queue_cfg);
+EXPORT_SYMBOL(bcmtr_swq_send);
+#endif
diff --git a/bcm68620_release/release/host_driver/transport/pcie_sw_queue/bcmtr_pcie_sw_queue.h b/bcm68620_release/release/host_driver/transport/pcie_sw_queue/bcmtr_pcie_sw_queue.h
new file mode 100644
index 0000000..1cf6c23
--- /dev/null
+++ b/bcm68620_release/release/host_driver/transport/pcie_sw_queue/bcmtr_pcie_sw_queue.h
@@ -0,0 +1,115 @@
+/*
+ * bcm_pcie_sw_queue.h
+ *
+ *  Created on: 31 Jan 2017
+ *      Author: igort
+ */
+
+#ifndef _BCM_PCIE_SW_QUEUE_H_
+#define _BCM_PCIE_SW_QUEUE_H_
+
+#include <bcmos_system.h>
+#include <bcmtr_pcie.h>
+
+/* Message priority */
+typedef enum
+{
+    BCMTR_PCIE_PRTY_URGENT = 0,
+    BCMTR_PCIE_PRTY_NORMAL = 1,
+
+    BCMTR_PCIE_PRTY__NUM_OF
+} bcmtr_pcie_prty;
+
+/* First urgent channel id */
+#define BCMTR_SWQ_FIRST_URGENT_CHANNEL     30
+
+/** Initialize PCI software queue module
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtr_swq_init(void);
+
+/* Cleanup software queue module
+ */
+void bcmtr_swq_exit(void);
+
+/** Initialize PCI software queue module for a device
+ * \param[in]   device    Maple device index
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtr_swq_device_init(uint8_t device);
+
+/* Cleanup software queue module for a device
+ * \param[in]   device    Maple device index
+ */
+void bcmtr_swq_device_exit(uint8_t device);
+
+/** Configure TX queue.
+ * \param[in]   device      Maple device index
+ * \param[in]   prty        Priority
+ * \param[in]   hardq_size  Max number of buffers that can be submitted to the h/w queue.
+ *              0=unlimited.
+ * \param[in]   softq_size  Max number of buffers to be queued. 0=unlimited.
+ * \returns: 0 in case of success or error code < 0
+ * BCM_ERR_OVERFLOW - max_softq_size buffer is waiting to be handling by the receiver
+ */
+bcmos_errno bcmtr_swq_tx_queue_cfg(uint8_t device, bcmtr_pcie_prty prty, uint32_t hardq_size, uint32_t softq_size);
+
+/** Send buffer to the peer
+ * \param[in]   device    Maple device index
+ * \param[in]   prty      Priority
+ * \param[in]   channel   Channel id
+ * \param[in]   buf       Buffer to be transferred
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtr_swq_send(uint8_t device, uint8_t channel, bcmos_buf *buf);
+
+/** Receive packet from device
+ * \param[in]   device          Maple device index
+ * \param[in]   prty            Priority
+ * \param[out]  channel         message channel from the BD
+ * \param[out]  buf  pointer to network buffer containing the
+ *       received packet
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtr_swq_receive(uint8_t device, bcmtr_pcie_prty prty, uint8_t *channel, bcmos_buf **buf);
+
+/** data_received callback enables callback-based receive buffer delivery
+ * instead of / in addition to bcmtr_swq_receive() function.
+ * This callback takes buffer ownership
+ */
+typedef void (*bcmtr_swq_rx_cb)(uint8_t device, uint8_t channel, bcmos_buf *buf);
+
+/** Register for "data received" indication"
+ * \param[in]   device          Maple device index
+ * \param[in]   prty            Priority
+ * \param[in]   cb              Callback pointer
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtr_swq_rx_cb_register(uint8_t device, bcmtr_pcie_prty prty, bcmtr_swq_rx_cb rx_cb);
+
+/** Unregister "data received indication" callback
+ * \param[in]   device          Maple device index
+ * \param[in]   prty            Priority
+ * \returns: 0 in case of success or error code < 0
+ */
+bcmos_errno bcmtr_swq_rx_cb_unregister(uint8_t device, bcmtr_pcie_prty prty);
+
+/** Fetch data from the hw to the sw queue.
+ *
+ * It is expected that this function should be triggered by RX interrupt
+ *
+ * \param[in]   device          Maple device index
+ * \param[out]  nbuf            Per priority array with number of buffers
+ */
+void bcmtr_swq_rx_poll(uint8_t device, uint32_t nbuf[]);
+
+/** Submit data from the sw TX queue to the h/w
+ *
+ * It is expected that this function should be triggered by TX
+ * completion interrupt
+ *
+ * \param[in]   device          Maple device index
+ */
+void bcmtr_swq_tx_submit(uint8_t device);
+
+#endif /* _BCM_PCIE_SW_QUEUE_H_ */
diff --git a/bcm68620_release/release/host_driver/utils/Makefile b/bcm68620_release/release/host_driver/utils/Makefile
new file mode 100644
index 0000000..9c905ec
--- /dev/null
+++ b/bcm68620_release/release/host_driver/utils/Makefile
@@ -0,0 +1,8 @@
+# Common utilities
+#
+MOD_NAME = utils
+MOD_TYPE = lib
+ifeq ("$(OS_KERNEL)", "linux")
+    MOD_DEPS = utils_linux
+endif
+srcs = bcmolt_utils.c bcmolt_buf.c bcmolt_bit_utils.c bcmolt_conv.c bcmolt_string.c
diff --git a/bcm68620_release/release/host_driver/utils/bcmolt_bit_utils.c b/bcm68620_release/release/host_driver/utils/bcmolt_bit_utils.c
new file mode 100644
index 0000000..130c07e
--- /dev/null
+++ b/bcm68620_release/release/host_driver/utils/bcmolt_bit_utils.c
@@ -0,0 +1,370 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+
+#include "bcmos_system.h"
+#include "math.h"
+#include "bcmolt_bit_utils.h"
+
+
+/** dynamically allocate space for an array of `nbits' bits and initalize
+ *  the bits to all be zero.
+ *
+ * \param[out]  bv      pointer to a bit_vector struct.
+ * \param[in]   nbits   number of bits to allocate.
+ * \return      FALSE if space was not available, otherwise TRUE.
+ */
+bcmos_bool bcmolt_bv_new(bit_vector *bv, const uint32_t nbits)
+{
+    uint32_t nwords = BCMOS_DIVIDE_ROUND_UP(nbits, (BITS_SZ));
+
+    bv->nbits  = nbits;
+    bv->vector = (bv_bits *)calloc(nwords, sizeof(bv_bits));
+    return (bv->vector != NULL);
+}
+
+
+/** return the value of the `offset'th bit element of the bit vector.
+ *
+ * \param[in]   bv      pointer to a bit_vector struct.
+ * \param[in]   offset  offset of bit to test.
+ * \return      FALSE if the bit offset is out of range, otherwise TRUE.
+ */
+bcmos_bool bcmolt_bv_get(const bit_vector *bv, const uint32_t offset)
+{
+    bcmos_bool    rv = BCMOS_FALSE;
+
+    if (offset <= bv->nbits)
+    {
+        rv = test_bits_set(bv->vector[(offset / BITS_SZ)],
+                           (1 << (offset % BITS_SZ)));
+    }
+    else
+    {
+        BCMOS_TRACE_ERR("out of range %u\n", offset);
+    }
+    return rv;
+}
+
+
+/** set or clear the bit in position `offset' of the bit vector.
+ *  bv->vector[bit_pos] is to be set (assigned to 1) if value is TRUE,
+ *  otherwise it is to be cleared (assigned to 0).
+ *
+ * \param[in]   bv      pointer to a bit_vector struct.
+ * \param[in]   offset  offset of bit to set or clear.
+ * \param[in]   value   boolean value. TRUE for set, BCMOS_FALSE for clear.
+ * \return      FALSE if the bit offset is out of range, otherwise TRUE.
+ */
+void bcmolt_bv_assign(bit_vector       *bv,
+                      const uint32_t    offset,
+                      const bcmos_bool  value)
+{
+    if (offset <= bv->nbits)
+    {
+        if (value)
+        {
+            bv->vector[offset / BITS_SZ] |= (1 << (offset % BITS_SZ));
+        }
+        else
+        {
+            bv->vector[offset / BITS_SZ] &= ~(1 << (offset % BITS_SZ));
+        }
+    }
+    else
+    {
+        BCMOS_TRACE_ERR("out of range %u\n", offset);
+    }
+}
+
+
+/** toggle the bit in position `offset' of the bit vector.
+ *  i.e. if it was 1 it is 0; if it was 0 it is 1.
+ *
+ * \param[in]   bv      pointer to a bit_vector struct.
+ * \param[in]   offset  offset of bit to toggle.
+ * \return      FALSE if the bit offset is out of range, otherwise TRUE.
+ */
+void bcmolt_bv_toggle(bit_vector *bv, const uint32_t offset)
+{
+    if (offset <= bv->nbits)
+    {
+        bv->vector[offset / BITS_SZ] ^= (1 << (offset % BITS_SZ));
+    }
+    else
+    {
+        BCMOS_TRACE_ERR("out of range %u\n", offset);
+    }
+}
+
+
+/** copy bit vector from 'src' to 'dst'.
+ *
+ * \param[out]  dst     pointer to a bit_vector struct to copy to.
+ * \param[in]   src     pointer to a bit_vector struct to copy from.
+ * \param[in]   nbits   number of bits to copy.
+ * \return      none.
+ */
+void bcmolt_bv_copy(bit_vector        *dst, 
+                    const bit_vector  *src, 
+                    const uint32_t     nbits)
+{
+    uint32_t  i;
+    uint32_t  nwords    = nbits / BITS_SZ;
+    bv_bits   bit_remainder = nbits % BITS_SZ;
+
+    if ((nbits <= dst->nbits) && (nbits <= src->nbits))
+    {
+        for (i = 0; i < nwords; i++)
+        {
+            dst->vector[i] = src->vector[i];
+        }
+
+        if (0 != bit_remainder)
+        {
+            dst->vector[nwords] = (dst->vector[nwords] & ~((2^bit_remainder) - 1)) |
+                (src->vector[nwords] & ((2^bit_remainder) - 1));
+        }
+    }
+    else
+    {
+        BCMOS_TRACE_ERR("out of range %u\n", nbits);
+    }
+}
+
+
+/** Print bit pattern of word FORMATTED to string.
+ *
+ * \param[in]   value   value to transform to bit string.
+ * \param[in]   bitcnt  count of bits to be shown.
+ * \param[out]  outstr  pointer to a output buffer to store the string.
+ * \return      none
+ * \warning     this fn doesn't check the size of 'outstr'.
+ *              the caller should ensure 'outstr' has enough room for the
+ *              bit string, space characters and null terminator.
+ */
+void bcmolt_bit_string(const bv_bits value, const uint32_t bitcnt, char *outstr)
+{
+    uint32_t  offset;
+
+    if (bitcnt <= BITS_SZ)
+    {
+        for (offset = 0; offset < bitcnt; offset++)
+        {
+            *outstr++ = ((value >> offset) & 1) + '0';
+            if ((((offset + 1) % 4) == 0))
+            {
+                *outstr++ = ' ';
+            }
+        }
+    }
+
+    *outstr = '\0';
+}
+
+
+/** Print all bits in the bit vector.
+ *
+ * \param[in]   bv      pointer to a bit_vector struct.
+ * \return      none.
+ */
+void bcmolt_bv_dump(const bit_vector *bv)
+{
+    uint32_t  idx;                        /* word idx */
+    char      outstr[BITS_SZ + 8 + 1];    /* 8 spaces + null */
+
+    for (idx = 0; idx < (bv->nbits / BITS_SZ); idx++)
+    {
+        bcmolt_bit_string(bv->vector[idx], BITS_SZ, outstr);
+        bcmos_printf("%s\n", outstr);
+    }
+
+    if (0 != (bv->nbits % BITS_SZ))
+    {
+        bcmolt_bit_string(bv->vector[idx], (bv->nbits % BITS_SZ), outstr);
+        bcmos_printf("%s\n", outstr);
+    }
+}
+
+
+/** Count the number of bits set in a long integer.
+ *
+ * \param[in]   num     integer value.
+ * \return      number of bits set.
+ */
+uint32_t bcmolt_bit_count(uint32_t num)
+{
+    num = ((num & 0xAAAAAAAAL) >>  1) + (num & 0x55555555L);
+    num = ((num & 0xCCCCCCCCL) >>  2) + (num & 0x33333333L);
+    num = ((num & 0xF0F0F0F0L) >>  4) + (num & 0x0F0F0F0FL);
+    num = ((num & 0xFF00FF00L) >>  8) + (num & 0x00FF00FFL);
+    num = ((num & 0xFFFF0000L) >> 16) + (num & 0x0000FFFFL);
+    return num;
+}
+
+
+/** Count the number of bits set in the whole bit vector.
+ *
+ * \param[in]   bv      pointer to the bit vector struct.
+ * \return      number of bits set.
+ */
+uint32_t bcmolt_bv_bit_count(const bit_vector *bv)
+{
+    uint32_t  nwords = BCMOS_DIVIDE_ROUND_UP(bv->nbits, (BITS_SZ));
+    uint32_t  cnt = 0;
+
+    while (0 != nwords--)
+    {
+        cnt += bcmolt_bit_count(bv->vector[nwords]);
+    }
+
+    return cnt;
+}
+
+
+
+/** Copy bit range from a 32-bit word array to an arbitrary bit position of
+ *  the destination 32-bit word array.
+ *
+ * \param[in]   dst             destination buffer
+ * \param[in]   dst_bytes       destination buffer size in bytes
+ * \param[in]   dst_bit_pos     least bit position to dest
+ * \param[in]   src             source buffer
+ * \param[in]   n_bits          how many bits to copy from source
+ * \note        src is in little endian and dst is in big endian.
+ */
+void bcmos_bit_range_set(uint32_t *dst, uint32_t dst_bytes, uint16_t dst_bit_pos,
+                         uint32_t *src, uint16_t n_bits)
+{
+    uint16_t    bp = dst_bit_pos;
+    uint16_t    len;
+    uint32_t    wp;
+    uint32_t    mask;
+    uint32_t    src_idx;
+    uint32_t    dst_idx;
+
+    wp = bp / 32;
+    bp = bp & (32 - 1);
+    src_idx = 0;
+
+    for (len = n_bits; len > 0; len -= 32)
+    {
+        if (bp != 0)
+        {
+            mask = (len < 32) ? (1 << len) - 1 : 0xFFFFFFFF;
+            dst_idx = wp;
+            dst[dst_idx] &= ~(mask << bp);
+            dst[dst_idx] |= src[src_idx] << bp;
+            wp++;
+            if (len > (32 - bp))
+            {
+                dst_idx = wp;
+                dst[dst_idx] &= ~(mask >> (32 - bp));
+                dst[dst_idx] |= src[src_idx] >> (32 - bp) & ((1 << bp) - 1);
+            }
+        }
+        else
+        {
+            dst_idx = wp;
+            if (len < 32)
+            {
+                mask = (1 << len) - 1;
+                dst[dst_idx] &= ~mask;
+                dst[dst_idx] |= src[src_idx] << bp;
+            }
+            else
+            {
+                dst[dst_idx] = src[src_idx];
+            }
+            wp++;
+        }
+        src_idx++;
+    }
+}
+
+
+/** Get bit range at an arbitrary bit position of a 32-bit word array
+ * 
+ * \param[in]   src             source buffer (e.g. dataport)
+ * \param[in]   src_bytes       source buffer size in bytes
+ * \param[in]   src_bit_pos     least bit position of the source
+ * \param[in]   dst             destination buffer to store the bit value
+ * \param[in]   n_bits          how many bits to copy from srouce
+ * \note        src is in big endian and dst is in little endian.
+ */
+void bcmos_bit_range_get(const uint32_t *src, uint32_t src_bytes,
+                         uint16_t src_bit_pos, uint32_t *dst, uint16_t n_bits)
+{
+    uint16_t    bp = src_bit_pos;   /* for readability */
+    uint16_t    len = n_bits;
+    uint32_t    wp;
+    uint32_t    src_idx;
+    uint32_t    dst_idx;
+
+    if (n_bits == 1)
+    {
+        wp = bp / 32;
+        bp = bp & (32 - 1);
+        src_idx = BCMOS_DIVIDE_ROUND_UP(src_bytes, 4) - 1 - wp;
+        dst[0] = ((src[src_idx] & (1 << bp)) != 0) ? 1: 0;
+        return;
+    }
+
+    wp = bp / 32;
+    bp = bp & (32 - 1);
+    dst_idx = 0;
+
+    for (; len > 0; len -= 32)
+    {
+        if (bp != 0)
+        {
+            src_idx = BCMOS_DIVIDE_ROUND_UP(src_bytes, 4) - 1 - wp;
+            dst[dst_idx] = src[src_idx] >> bp & ((1 << (32 - bp)) - 1);
+            wp++;
+            if (len > (32 - bp))
+            {
+                src_idx = BCMOS_DIVIDE_ROUND_UP(src_bytes, 4) - 1 - wp;
+                dst[dst_idx] |= src[src_idx] << (32 - bp);
+            }
+        }
+        else
+        {
+            src_idx = BCMOS_DIVIDE_ROUND_UP(src_bytes, 4) - 1 - wp;
+            dst[dst_idx] = src[src_idx];
+            wp++;
+        }
+
+        if (len < 32)
+        {
+            dst[dst_idx] &= ((1 << len) - 1);
+        }
+        dst_idx++;
+    }
+}
+
diff --git a/bcm68620_release/release/host_driver/utils/bcmolt_bit_utils.h b/bcm68620_release/release/host_driver/utils/bcmolt_bit_utils.h
new file mode 100644
index 0000000..9971292
--- /dev/null
+++ b/bcm68620_release/release/host_driver/utils/bcmolt_bit_utils.h
@@ -0,0 +1,242 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+/**
+ * bcmolt_bit_utils.h
+ *  Created on: 03/10/2014
+ *      Author: cpark1
+ *
+ * This bit vector implementation is used for the EPON encryption.
+ * There is a certain hardware restriction that the global encryption mode
+ * can not be changed when a link encryption is configured for a different
+ * encryption mode.
+ * Likewise, the link encryption mode can not be changed if the global
+ * encryption mode is set to other mode.
+ * Therefore, when the host tries to change any of them, the OLT needs to
+ * check either the global encryption mode or the link encryption mode
+ * before applying the change.
+ * In the old implementation (like Pioneer), the firmware iterates through
+ * every link records of each PON port and check the encryption mode of each.
+ * This is very inefficient and time consuming.
+ * The host may want to know how many links are enabled for the encryption,
+ * or which link is enabled, etc.
+ * I thought that a bit vector implementation is best satisfies.
+ * Also, this implementation exactly reflects the IC implementation, so we
+ * can use it to mirror the hardware status.
+ *
+ */
+
+#ifndef BCMOLT_BIT_UTILS_H
+#define BCMOLT_BIT_UTILS_H
+
+
+#include "bcmos_system.h"
+
+
+/* the current (draft) design of the ASIC uses 32-bit bitmap data port */
+typedef uint32_t    bv_bits;
+
+typedef struct
+{
+    uint32_t  nbits;
+    bv_bits  *vector;
+} bit_vector;
+
+
+#define BITS_SZ     (sizeof(bv_bits) * CHAR_BIT)
+
+#define BITS_SET(val, mask) (((val) & (mask)) == (mask))
+
+/** Test if all given bits are set in the given data word
+ * \param[in]   word    Given data word to test
+ * \param[in]   mask    Test mask
+ * \return      TRUE if all the bits in the bitMask are set
+ */
+static inline bcmos_bool test_bits_set(uint32_t word, uint32_t mask)
+{
+    return ((word & mask) == mask);
+}
+
+/** Test if all given bits are clear in the given data word
+ * \param       word    Given word to test
+ * \param       mask Test mask
+ * \return      TRUE if all the bits given by bitMask are clear
+ */
+static inline bcmos_bool test_bits_clear(uint32_t word, uint32_t mask)
+{
+    return (word & mask) == 0;
+}
+
+/** Test whether any of the given bits are set in a value
+ * \param[in]   val     The value to test
+ * \param[in]   bits    The bits to test for
+ * \return      TRUE if any of the bits are set in the value, FALSE otherwise
+ */
+static inline bcmos_bool test_bits_any(uint32_t val, uint32_t bits)
+{
+    return (val & bits) != 0;
+}
+
+
+/** return true if only one bit is set for a given integer.
+ */
+static inline bcmos_bool is_one_bit_set(uint32_t number)
+{
+    return (number & (number - 1)) == 0;
+}
+
+
+
+/** dynamically allocate space for an array of `nbits' bits and initalize
+ *  the bits to all be zero.
+ *
+ * \param[out]  bv      pointer to a bit_vector struct.
+ * \param[in]   nbits   number of bits to allocate.
+ * \return      FALSE if space was not available, otherwise TRUE.
+ */
+bcmos_bool bcmolt_bv_new(bit_vector *bv, const uint32_t nbits);
+
+
+/** return the value of the `offset'th bit element of the bit vector.
+ *
+ * \param[in]   bv      pointer to a bit_vector struct.
+ * \param[in]   offset  offset of bit to test.
+ * \return      FALSE if the bit offset is out of range, otherwise TRUE.
+ */
+bcmos_bool bcmolt_bv_get(const bit_vector *bv, const uint32_t offset);
+
+
+/** set or clear the bit in position `offset' of the bit vector.
+ *  bv->vector[bit_pos] is to be set (assigned to 1) if value is TRUE,
+ *  otherwise it is to be cleared (assigned to 0).
+ *
+ * \param[in]   bv      pointer to a bit_vector struct.
+ * \param[in]   offset  offset of bit to set or clear.
+ * \param[in]   value   boolean value. TRUE for set, FALSE for clear.
+ * \return      FALSE if the bit offset is out of range, otherwise TRUE.
+ */
+void bcmolt_bv_assign(bit_vector *bv, const uint32_t offset, const bcmos_bool value);
+
+
+/** set or clear 'nbits' bits of given bit vector.
+ *
+ * \param[in]   bv      pointer to a bit_vector struct.
+ * \param[in]   nbits   number of bits to set or clear.
+ * \param[in]   value   boolean value. TRUE for set, FALSE for clear.
+ * \return      FALSE if the bit offset is out of range, otherwise TRUE.
+ */
+void bv_assign_nbits(bit_vector *bv, const uint32_t nbits,
+                     const bcmos_bool value);
+
+
+/** toggle the bit in position `offset' of the bit vector.
+ *  i.e. if it was 1 it is 0; if it was 0 it is 1.
+ *
+ * \param[in]   bv      pointer to a bit_vector struct.
+ * \param[in]   offset  offset of bit to toggle.
+ * \return      FALSE if the bit offset is out of range, otherwise TRUE.
+ */
+void bcmolt_bv_toggle(bit_vector *bv, const uint32_t offset);
+
+
+/** copy bit vector from 'src' to 'dst'.
+ *
+ * \param[out]  dst     pointer to a bit_vector struct to copy to.
+ * \param[in]   src     pointer to a bit_vector struct to copy from.
+ * \param[in]   nbits   number of bits to copy.
+ * \return      none.
+ */
+void bcmolt_bv_copy(bit_vector *dst, const bit_vector *src, const uint32_t nbits);
+
+
+/** Print bit pattern of word FORMATTED to string.
+ *
+ * \param[in]   value   value to transform to bit string.
+ * \param[in]   bitcnt  count of bits to be shown.
+ * \param[out]  outstr  pointer to a output buffer to store the string.
+ * \return      none
+ * \warning     this fn doesn't check the size of 'outstr'.
+ *              the caller should ensure 'outstr' has enough room for the
+ *              bit string, space characters and null terminator.
+ */
+void bcmolt_bit_string(const bv_bits value, const uint32_t bitcnt, char *outstr);
+
+
+/** Print all bits in the bit vector.
+ *
+ * \param[in]   bv      pointer to a bit_vector struct.
+ * \return      none.
+ */
+void bcmolt_bv_dump(const bit_vector *bv);
+
+
+/** Count the number of bits set in a long integer.
+ *
+ * \param[in]   num     integer value.
+ * \return      number of bits set.
+ */
+uint32_t bcmolt_bit_count(uint32_t num);
+
+
+/** Count the number of bits set in the whole bit vector.
+ *
+ * \param[in]   bv      pointer to the bit vector struct.
+ * \return      number of bits set.
+ */
+uint32_t bcmolt_bv_bit_count(const bit_vector *bv);
+
+
+/** Copy bit range from a 32-bit word array to an arbitrary bit position of
+ *  the destination 32-bit word array.
+ *
+ * \param[in]   dst             destination buffer
+ * \param[in]   dst_bytes       destination buffer size in bytes
+ * \param[in]   dst_bit_pos     least bit position to dest
+ * \param[in]   src             source buffer
+ * \param[in]   src_bits        many bits to copy from source
+ * \note        src is in little endian and dst is in big endian.
+ */
+void bcmos_bit_range_set(uint32_t *dst, uint32_t dst_bytes, uint16_t dst_bit_pos,
+                         uint32_t *src, uint16_t n_bits);
+
+/** Get bit range at an arbitrary bit position of a 32-bit word array
+ *
+ * \param[in]   src             source buffer (e.g. dataport)
+ * \param[in]   src_bytes       source buffer size in bytes
+ * \param[in]   src_bit_pos     least bit position of the source
+ * \param[in]   dst             destination buffer to store the bit value
+ * \param[in]   n_bits          how many bits to copy from srouce
+ * \note        src is in big endian and dst is in little endian.
+ */
+void bcmos_bit_range_get(const uint32_t *src, uint32_t src_bytes,
+                         uint16_t src_bit_pos, uint32_t *dst, uint16_t n_bits);
+
+
+#endif  /* BCMOLT_BIT_UTILS_H */
+
diff --git a/bcm68620_release/release/host_driver/utils/bcmolt_buf.c b/bcm68620_release/release/host_driver/utils/bcmolt_buf.c
new file mode 100644
index 0000000..cb57fe9
--- /dev/null
+++ b/bcm68620_release/release/host_driver/utils/bcmolt_buf.c
@@ -0,0 +1,247 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#include "bcmolt_buf.h"
+#include "bcmos_system.h"
+
+/** Initalize a bcmolt_buf stream
+ *
+ * \param buf 
+ * \param size 
+ * \param start
+ * \param endian Endianness of numbers in the resulting stream
+ */
+void bcmolt_buf_init(bcmolt_buf *buf, uint32_t size, uint8_t *start, bcmos_endian endian)
+{
+    buf->len = size;
+    buf->curr = start;
+    buf->start = start;
+    buf->free = NULL;
+    buf->bh = NULL;
+    /* Currently, we only support reading/writing numbers in a single endianness. */
+    BUG_ON(endian != BCMOLT_BUF_ENDIAN_FIXED);
+}
+
+/** Allocate data buffer and initialize bcmolt_buf stream
+ *
+ * \param buf
+ * \param size
+ * \param endian Endianness of numbers in the resulting stream
+ * \return BCM_ERR_OK or BCM_ERR_NOMEM
+ */
+bcmos_errno bcmolt_buf_alloc(bcmolt_buf *buf, uint32_t size, bcmos_endian endian)
+{
+    buf->start = bcmos_alloc(size);
+    if (buf->start == NULL)
+    {
+        return BCM_ERR_NOMEM;
+    }
+    bcmolt_buf_init(buf, size, buf->start, endian);
+    return BCM_ERR_OK;
+}
+
+/** Release data buffer pointed by bcmolt_buf stream
+ * \param[in,out] buf
+ */
+void bcmolt_buf_free(bcmolt_buf *buf)
+{
+    if (buf->start != NULL)
+    {
+        if (buf->free)
+        {
+            buf->free(buf->bh);
+            buf->free = NULL;
+            buf->bh = NULL;
+        }
+        else
+        {
+            bcmos_free(buf->start);
+        }
+        buf->start = NULL;
+    }
+    buf->len = 0;
+    buf->curr = NULL;
+}
+
+/** Read from the buffer
+ *
+ * \param buf    bcmolt_buf instance
+ * \param to     Where to read to
+ * \param len    Number of bytes to copy
+ *
+ * \return       BCMOS_TRUE if successfully copied
+ */
+bcmos_bool bcmolt_buf_read(bcmolt_buf *buf, void *to, size_t len)
+{
+    if ((buf->start + buf->len) >= (buf->curr + len))
+    {
+        memcpy(to, buf->curr, len);
+        buf->curr += len;
+        return BCMOS_TRUE;
+    }
+
+    return BCMOS_FALSE;
+}
+
+/** Transfer bytes from one buf to another
+ *
+ * \param *from    Source buffer
+ * \param *to      Destination buffer
+ * \param bytes    Number of bytes to transfer
+ * \return         BCMOS_TRUE if successfully transferred
+ */
+bcmos_bool bcmolt_buf_transfer_bytes(bcmolt_buf *from, bcmolt_buf *to, uint32_t bytes)
+{
+    uint8_t tmp[256];
+    uint32_t toRead;
+    while (bytes != 0)
+    {
+        toRead = bytes > sizeof(tmp) ? sizeof(tmp) : bytes;
+        if (!bcmolt_buf_read(from, tmp, toRead) || !bcmolt_buf_write(to, tmp, toRead))
+        {
+            return BCMOS_FALSE;
+        }
+
+        bytes -= toRead;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/** Write to the buffer
+ *
+ * \param buf    bcmolt_buf instance
+ * \param from   Source, to copy from
+ * \param len    Number of bytes to copy
+ *
+ * \return       BCMOS_TRUE if successfully copied
+ */
+bcmos_bool bcmolt_buf_write(bcmolt_buf *buf, const void *from, size_t len)
+{
+    if ((buf->start + buf->len) >= (buf->curr + len))
+    {
+        memcpy(buf->curr, from, len);
+        buf->curr += len;
+        return BCMOS_TRUE;
+    }
+    else
+    {
+        return BCMOS_FALSE;
+    }
+}
+
+/** Move the current pointer to a given position in the buffer
+ *
+ * \param pos    Byte position in the buffer to move the current pointer to
+ *
+ * \param *buf   Input buffer
+ * \return       BCMOS_FALSE if len takes us past the end of buffer
+ */
+bcmos_bool bcmolt_buf_set_pos(bcmolt_buf *buf, uint32_t pos)
+{
+    if (pos <= buf->len)
+    {
+        buf->curr = buf->start + pos;
+        return BCMOS_TRUE;
+    }
+
+    return BCMOS_FALSE;
+}
+
+/** Move the current pointer ahead by given number of bytes
+ *
+ * \param buf    bcmolt_buf instance
+ * \param len    Number of bytes to skip
+ *
+ * \return       BCMOS_FALSE if len takes us past the end of buffer
+ */
+bcmos_bool bcmolt_buf_skip(bcmolt_buf *buf, uint32_t len)
+{
+    if ((buf->start + buf->len) >= (buf->curr + len))
+    {
+        buf->curr += len;
+        return BCMOS_TRUE;
+    }
+
+    return BCMOS_FALSE;
+}
+
+/** Move the current pointer back by given number of bytes
+ *
+ * \param buf    bcmolt_buf instance
+ * \param len    Number of bytes to go back
+ *
+ * \return       BCMOS_FALSE if len takes us past the start of buffer
+ */
+bcmos_bool bcmolt_buf_rewind(bcmolt_buf *buf, uint32_t len)
+{
+    if (buf->curr >= (buf->start + len))
+    {
+        buf->curr -= len;
+        return BCMOS_TRUE;
+    }
+
+    return BCMOS_FALSE;
+}
+
+/** Reads a boolean from a buffer
+ *
+ * \param *buf
+ * \param *val
+ */
+bcmos_bool bcmolt_buf_read_bool(bcmolt_buf *buf, bcmos_bool *val)
+{
+    /* this function isn't inlined like the rest because it's too complex to inline cleanly */
+    uint8_t tmp;
+    if (bcmolt_buf_read_u8(buf, &tmp))
+    {
+        *val = (tmp != 0);
+        return BCMOS_TRUE;
+    }
+    else
+    {
+        return BCMOS_FALSE;
+    }
+}
+
+
+#ifdef __KERNEL__
+EXPORT_SYMBOL(bcmolt_buf_init);
+EXPORT_SYMBOL(bcmolt_buf_alloc);
+EXPORT_SYMBOL(bcmolt_buf_free);
+EXPORT_SYMBOL(bcmolt_buf_read);
+EXPORT_SYMBOL(bcmolt_buf_transfer_bytes);
+EXPORT_SYMBOL(bcmolt_buf_write);
+EXPORT_SYMBOL(bcmolt_buf_set_pos);
+EXPORT_SYMBOL(bcmolt_buf_skip);
+EXPORT_SYMBOL(bcmolt_buf_rewind);
+EXPORT_SYMBOL(bcmolt_buf_read_bool);
+
+MODULE_LICENSE("Dual BSD/GPL");
+#endif
diff --git a/bcm68620_release/release/host_driver/utils/bcmolt_buf.h b/bcm68620_release/release/host_driver/utils/bcmolt_buf.h
new file mode 100644
index 0000000..206337a
--- /dev/null
+++ b/bcm68620_release/release/host_driver/utils/bcmolt_buf.h
@@ -0,0 +1,733 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef BCMOLT_BUF_H_
+#define BCMOLT_BUF_H_
+
+#include "bcmos_system.h"
+
+/** Generic memory stream object */
+typedef struct bcmolt_buf bcmolt_buf;
+
+struct bcmolt_buf
+{
+    uint8_t *start;  /**< Pointer to the start of the buffer */
+    uint8_t *curr;   /**< Pointer to the current position in the buffer */
+    uint32_t len;    /**< Total Length of buffer */
+    /* The following 2 fields enable foreign buffer encapsulation */
+    void (*free)(void *bh);  /**< Foreign buffer release callback */
+    void *bh;        /**< Foreign buffer handle */
+};
+
+/* Serialization buffer endianness */
+#define BCMOLT_BUF_ENDIAN_FIXED BCMOS_ENDIAN_BIG
+
+#if BCMOLT_BUF_ENDIAN_FIXED == BCMOS_ENDIAN_BIG
+    #define BCMOLT_BUF_ENDIAN_BUF_TO_CPU(size, n) BCMOS_ENDIAN_BIG_TO_CPU_##size(n)
+    #define BCMOLT_BUF_ENDIAN_CPU_TO_BUF(size, n) BCMOS_ENDIAN_CPU_TO_BIG_##size(n)
+#else
+    #define BCMOLT_BUF_ENDIAN_BUF_TO_CPU(size, n) BCMOS_ENDIAN_LITTLE_TO_CPU_##size(n)
+    #define BCMOLT_BUF_ENDIAN_CPU_TO_BUF(size, n) BCMOS_ENDIAN_CPU_TO_LITTLE_##size(n)
+#endif
+
+/** Initalize a bcmolt_buf stream
+ *
+ * \param buf
+ * \param size
+ * \param start
+ * \param endian Endianness of numbers in the resulting stream.
+ *               This parameter is only for sanity check. Buffer endianness is
+ *               set at compile time. Application MUST NOT rely on default buffer endianness
+ *               being Big Endian.
+ *               If Big Endian buffer is required, application must use
+ *               access functions with "_be" designator (bcmolt_buf_read_u16_be(), etc.)
+ */
+void bcmolt_buf_init(bcmolt_buf *buf, uint32_t size, uint8_t *start, bcmos_endian endian);
+
+/** Allocate data buffer and initialize bcmolt_buf stream
+ *
+ * \param buf
+ * \param size
+ * \param endian Endianness of numbers in the resulting stream.
+ *               See explanation in bcmolt_buf_alloc()
+ * \return BCM_ERR_OK or BCM_ERR_NOMEM
+ */
+bcmos_errno bcmolt_buf_alloc(bcmolt_buf *buf, uint32_t size, bcmos_endian endian);
+
+/** Release data buffer pointed by bcmolt_buf stream
+ * \param[in,out] buf
+ */
+void bcmolt_buf_free(bcmolt_buf *buf);
+
+/** Read from the buffer
+ *
+ * \param buf    bcmolt_buf instance
+ * \param to     Where to read to
+ * \param len    Number of bytes to copy
+ *
+ * \return       BCMOS_TRUE if successfully copied
+ */
+bcmos_bool bcmolt_buf_read(bcmolt_buf *buf, void *to, size_t len);
+
+/** Transfer bytes from one buf to another
+ *
+ * \param *from    Source buffer
+ * \param *to      Destination buffer
+ * \param bytes    Number of bytes to transfer
+ * \return         BCMOS_TRUE if successfully transferred
+ */
+bcmos_bool bcmolt_buf_transfer_bytes(bcmolt_buf *from, bcmolt_buf *to, uint32_t bytes);
+
+/** Write to the buffer
+ *
+ * \param buf    bcmolt_buf instance
+ * \param from   Source, to copy from
+ * \param len    Number of bytes to copy
+ *
+ * \return       BCMOS_TRUE if successfully copied
+ */
+bcmos_bool bcmolt_buf_write(bcmolt_buf *buf, const void *from, size_t len);
+
+/** Move the current pointer to a given position in the buffer
+ *
+ * \param pos    Byte position in the buffer to move the current pointer to
+ *
+ * \param *buf   Input buffer
+ * \return       BCMOS_FALSE if len takes us past the end of buffer
+ */
+bcmos_bool bcmolt_buf_set_pos(bcmolt_buf *buf, uint32_t pos);
+
+/** Move the current pointer ahead by given number of bytes
+ *
+ * \param buf    bcmolt_buf instance
+ * \param len    Number of bytes to skip
+ *
+ * \return       BCMOS_FALSE if len takes us past the end of buffer
+ */
+bcmos_bool bcmolt_buf_skip(bcmolt_buf *buf, uint32_t len);
+
+/** Move the current pointer back by given number of bytes
+ *
+ * \param buf    bcmolt_buf instance
+ * \param len    Number of bytes to go back
+ *
+ * \return       BCMOS_FALSE if len takes us past the start of buffer
+ */
+bcmos_bool bcmolt_buf_rewind(bcmolt_buf *buf, uint32_t len);
+
+/** Get the current buffer pointer
+ *
+ * \param buf   bcmolt_buf instance
+ *
+ * \return      the current buffer pointer
+ */
+static inline uint8_t *bcmolt_buf_snap_get(const bcmolt_buf *buf)
+{
+    return buf->curr;
+}
+
+/** Move the current pointer to a snapped location
+ *
+ * \param buf   bcmolt_buf instance
+ * \param snap  snapped location
+ */
+static inline void bcmolt_buf_snap_restore(bcmolt_buf *buf, uint8_t *snap)
+{
+    buf->curr = snap;
+}
+
+/** Get the length of unprocessed bytes in given stream
+ *
+ * \param buf    Input buffer
+ *
+ * \return       The number of remaining bytes in the buffer
+ */
+static inline uint32_t bcmolt_buf_get_remaining_size(const bcmolt_buf *buf)
+{
+    return (uint32_t)((buf->start + buf->len) - buf->curr);
+}
+
+/** Get amount of buf that has been read or written so far
+ *
+ * \param buf     Input buffer
+ * \return        Amount of buffer used
+ */
+static inline uint32_t bcmolt_buf_get_used(const bcmolt_buf *buf)
+{
+    return (uint32_t)(buf->curr - buf->start);
+}
+
+/** Reads a uint8_t from a buffer
+ *
+ * \param buf Buffer to read from
+ * \param val uint8_t to read
+ *
+ * \return BCMOS_TRUE if read successful
+ */
+static inline bcmos_bool bcmolt_buf_read_u8(bcmolt_buf *buf, uint8_t *val)
+{
+    return bcmolt_buf_read(buf, val, sizeof(*val));
+}
+
+/** Writes a uint8_t to a buffer
+ *
+ * \param buf    Buffer to write to
+ * \param val    uint8_t to write
+ *
+ * \return       BCMOS_TRUE if write successful
+ */
+static inline bcmos_bool bcmolt_buf_write_u8(bcmolt_buf *buf, uint8_t val)
+{
+    return bcmolt_buf_write(buf, &val, sizeof(val));
+}
+
+/** Reads a boolean from a buffer
+ *
+ * \param *buf
+ * \param *val
+ */
+bcmos_bool bcmolt_buf_read_bool(bcmolt_buf *buf, bcmos_bool *val);
+
+/** Writes a bcmos_bool to a buffer
+ *
+ * \param buf    Buffer to write to
+ * \param val    uint8_t to write
+ *
+ * \return       BCMOS_TRUE if write successful
+ */
+static inline bcmos_bool bcmolt_buf_write_bool(bcmolt_buf *buf, bcmos_bool val)
+{
+    return bcmolt_buf_write_u8(buf, val ? 1 : 0);
+}
+
+/** Reads a int8_t from a buffer
+ *
+ * \param buf Buffer to read from
+ * \param val int8_t to read
+ *
+ * \return BCMOS_TRUE if read successful
+ */
+static inline bcmos_bool bcmolt_buf_read_s8(bcmolt_buf *buf, int8_t *val)
+{
+    return bcmolt_buf_read_u8(buf, (uint8_t *)val);
+}
+
+/** Writes a int8_t to a buffer
+ *
+ * \param buf    Buffer to write to
+ * \param val    int8_t to write
+ *
+ * \return       BCMOS_TRUE if write successful
+ */
+static inline bcmos_bool bcmolt_buf_write_s8(bcmolt_buf *buf, int8_t val)
+{
+    return bcmolt_buf_write_u8(buf, (uint8_t)val);
+}
+
+/** Reads a uint16_t from a buffer
+ *
+ * \param buf Buffer to read from
+ * \param val uint16_t to read
+ *
+ * \return BCMOS_TRUE if read successful
+ */
+static inline bcmos_bool bcmolt_buf_read_u16(bcmolt_buf *buf, uint16_t *val)
+{
+    bcmos_bool res = bcmolt_buf_read(buf, val, sizeof(*val));
+    *val = BCMOLT_BUF_ENDIAN_BUF_TO_CPU(U16, *val);
+    return res;
+}
+
+/** Reads a uint16_t from a Big Endian buffer
+ *
+ * \param buf Buffer to read from
+ * \param val uint16_t to read
+ *
+ * \return BCMOS_TRUE if read successful
+ */
+static inline bcmos_bool bcmolt_buf_read_u16_be(bcmolt_buf *buf, uint16_t *val)
+{
+    bcmos_bool res = bcmolt_buf_read(buf, val, sizeof(*val));
+    *val = BCMOS_ENDIAN_BIG_TO_CPU_U16(*val);
+    return res;
+}
+
+/** Writes a uint16_t to a buffer
+ *
+ * \param buf    Buffer to write to
+ * \param val    uint16_t to write
+ *
+ * \return       BCMOS_TRUE if write successful
+ */
+static inline bcmos_bool bcmolt_buf_write_u16(bcmolt_buf *buf, uint16_t val)
+{
+    val = BCMOLT_BUF_ENDIAN_CPU_TO_BUF(U16, val);
+    return bcmolt_buf_write(buf, &val, sizeof(val));
+}
+
+/** Writes a uint16_t to a Big Endian buffer
+ *
+ * \param buf    Buffer to write to
+ * \param val    uint16_t to write
+ *
+ * \return       BCMOS_TRUE if write successful
+ */
+static inline bcmos_bool bcmolt_buf_write_u16_be(bcmolt_buf *buf, uint16_t val)
+{
+    val = BCMOS_ENDIAN_CPU_TO_BIG_U16(val);
+    return bcmolt_buf_write(buf, &val, sizeof(val));
+}
+
+/** Reads a int16_t from a buffer
+ *
+ * \param buf Buffer to read from
+ * \param val int16_t to read
+ *
+ * \return BCMOS_TRUE if read successful
+ */
+static inline bcmos_bool bcmolt_buf_read_s16(bcmolt_buf *buf, int16_t *val)
+{
+    return bcmolt_buf_read_u16(buf, (uint16_t *)val);
+}
+
+/** Reads a int16_t from a Big Endian buffer
+ *
+ * \param buf Buffer to read from
+ * \param val int16_t to read
+ *
+ * \return BCMOS_TRUE if read successful
+ */
+static inline bcmos_bool bcmolt_buf_read_s16_be(bcmolt_buf *buf, int16_t *val)
+{
+    return bcmolt_buf_read_u16_be(buf, (uint16_t *)val);
+}
+
+/** Writes int16_t to a buffer
+ *
+ * \param buf    Buffer to write to
+ * \param val    int16_t to write
+ *
+ * \return       BCMOS_TRUE if write successful
+ */
+static inline bcmos_bool bcmolt_buf_write_s16(bcmolt_buf *buf, int16_t val)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t)val);
+}
+
+/** Writes int16_t to a Big Endian buffer
+ *
+ * \param buf    Buffer to write to
+ * \param val    int16_t to write
+ *
+ * \return       BCMOS_TRUE if write successful
+ */
+static inline bcmos_bool bcmolt_buf_write_s16_be(bcmolt_buf *buf, int16_t val)
+{
+    return bcmolt_buf_write_u16_be(buf, (uint16_t)val);
+}
+
+/** Reads a bcmos_u24 from a buffer
+ *
+ * \param buf Buffer to read from
+ * \param val bcmos_u24 to read
+ *
+ * \return BCMOS_TRUE if read successful
+ */
+static inline bcmos_bool bcmolt_buf_read_u24(bcmolt_buf *buf, uint24_t *val)
+{
+    return bcmolt_buf_read_u8(buf, &(val->low_hi.hi)) &&
+           bcmolt_buf_read_u8(buf, &(val->low_hi.mid)) &&
+           bcmolt_buf_read_u8(buf, &(val->low_hi.low));
+}
+
+/** Writes a bcmos_u24 to a buffer
+ *
+ * \param buf    Buffer to write to
+ * \param val    bcmos_u24 to write
+ *
+ * \return       BCMOS_TRUE if write successful
+ */
+static inline bcmos_bool bcmolt_buf_write_u24(bcmolt_buf *buf, uint24_t val)
+{
+    return bcmolt_buf_write_u8(buf, val.low_hi.hi) &&
+           bcmolt_buf_write_u8(buf, val.low_hi.mid) &&
+           bcmolt_buf_write_u8(buf, val.low_hi.low);
+}
+
+/** Reads a uint32_t from a buffer
+ *
+ * \param buf Buffer to read from
+ * \param val uint32_t to read
+ *
+ * \return BCMOS_TRUE if read successful
+ */
+static inline bcmos_bool bcmolt_buf_read_u32(bcmolt_buf *buf, uint32_t *val)
+{
+    bcmos_bool res = bcmolt_buf_read(buf, val, sizeof(*val));
+    *val = BCMOLT_BUF_ENDIAN_BUF_TO_CPU(U32, *val);
+    return res;
+}
+
+/** Reads a uint32_t from a Big Endian buffer
+ *
+ * \param buf Buffer to read from
+ * \param val uint32_t to read
+ *
+ * \return BCMOS_TRUE if read successful
+ */
+static inline bcmos_bool bcmolt_buf_read_u32_be(bcmolt_buf *buf, uint32_t *val)
+{
+    bcmos_bool res = bcmolt_buf_read(buf, val, sizeof(*val));
+    *val = BCMOS_ENDIAN_BIG_TO_CPU_U32(*val);
+    return res;
+}
+
+/** Writes a uint32_t to a buffer
+ *
+ * \param buf    Buffer to write to
+ * \param val    uint32_t to write
+ *
+ * \return       BCMOS_TRUE if write successful
+ */
+static inline bcmos_bool bcmolt_buf_write_u32(bcmolt_buf *buf, uint32_t val)
+{
+    val = BCMOLT_BUF_ENDIAN_CPU_TO_BUF(U32, val);
+    return bcmolt_buf_write(buf, &val, sizeof(val));
+}
+
+/** Writes a uint32_t to a Big Endian buffer
+ *
+ * \param buf    Buffer to write to
+ * \param val    uint32_t to write
+ *
+ * \return       BCMOS_TRUE if write successful
+ */
+static inline bcmos_bool bcmolt_buf_write_u32_be(bcmolt_buf *buf, uint32_t val)
+{
+    val = BCMOS_ENDIAN_CPU_TO_BIG_U32(val);
+    return bcmolt_buf_write(buf, &val, sizeof(val));
+}
+
+/** Reads a int32_t from a buffer
+ *
+ * \param buf Buffer to read from
+ * \param val int32_t to read
+ *
+ * \return BCMOS_TRUE if read successful
+ */
+static inline bcmos_bool bcmolt_buf_read_s32(bcmolt_buf *buf, int32_t *val)
+{
+    return bcmolt_buf_read_u32(buf, (uint32_t *)val);
+}
+
+/** Reads a int32_t from a big endian buffer
+ *
+ * \param buf Buffer to read from
+ * \param val int32_t to read
+ *
+ * \return BCMOS_TRUE if read successful
+ */
+static inline bcmos_bool bcmolt_buf_read_s32_be(bcmolt_buf *buf, int32_t *val)
+{
+    return bcmolt_buf_read_u32_be(buf, (uint32_t *)val);
+}
+
+/** Writes a int32_t to a buffer
+ *
+ * \param buf    Buffer to write to
+ * \param val    int32_t to write
+ *
+ * \return       BCMOS_TRUE if write successful
+ */
+static inline bcmos_bool bcmolt_buf_write_s32(bcmolt_buf *buf, int32_t val)
+{
+    return bcmolt_buf_write_u32(buf, (uint32_t)val);
+}
+
+/** Writes a int32_t to a Big Endian buffer
+ *
+ * \param buf    Buffer to write to
+ * \param val    int32_t to write
+ *
+ * \return       BCMOS_TRUE if write successful
+ */
+static inline bcmos_bool bcmolt_buf_write_s32_be(bcmolt_buf *buf, int32_t val)
+{
+    return bcmolt_buf_write_u32_be(buf, (uint32_t)val);
+}
+
+/** Reads a uint64_t from a buffer
+ *
+ * \param buf Buffer to read from
+ * \param val uint64_t to read
+ *
+ * \return BCMOS_TRUE if read successful
+ */
+static inline bcmos_bool bcmolt_buf_read_u64(bcmolt_buf *buf, uint64_t *val)
+{
+    bcmos_bool res = bcmolt_buf_read(buf, val, sizeof(*val));
+    *val = BCMOLT_BUF_ENDIAN_BUF_TO_CPU(U64, *val);
+    return res;
+}
+
+/** Reads a uint64_t from a Big Endian buffer
+ *
+ * \param buf Buffer to read from
+ * \param val uint64_t to read
+ *
+ * \return BCMOS_TRUE if read successful
+ */
+static inline bcmos_bool bcmolt_buf_read_u64_be(bcmolt_buf *buf, uint64_t *val)
+{
+    bcmos_bool res = bcmolt_buf_read(buf, val, sizeof(*val));
+    *val = BCMOS_ENDIAN_BIG_TO_CPU_U64(*val);
+    return res;
+}
+
+/** Writes a uint64_t to a buffer
+ *
+ * \param buf    Buffer to write to
+ * \param val    uint64_t to write
+ *
+ * \return       BCMOS_TRUE if write successful
+ */
+static inline bcmos_bool bcmolt_buf_write_u64(bcmolt_buf *buf, uint64_t val)
+{
+    val = BCMOLT_BUF_ENDIAN_CPU_TO_BUF(U64, val);
+    return bcmolt_buf_write(buf, &val, sizeof(val));
+}
+
+/** Writes a uint64_t to a Big Endian buffer
+ *
+ * \param buf    Buffer to write to
+ * \param val    uint64_t to write
+ *
+ * \return       BCMOS_TRUE if write successful
+ */
+static inline bcmos_bool bcmolt_buf_write_u64_be(bcmolt_buf *buf, uint64_t val)
+{
+    val = BCMOS_ENDIAN_CPU_TO_BIG_U64(val);
+    return bcmolt_buf_write(buf, &val, sizeof(val));
+}
+
+/** Reads a int64_t from a buffer
+ *
+ * \param buf Buffer to read from
+ * \param val int64_t to read
+ *
+ * \return BCMOS_TRUE if read successful
+ */
+static inline bcmos_bool bcmolt_buf_read_s64(bcmolt_buf *buf, int64_t *val)
+{
+    return bcmolt_buf_read_u64(buf, (uint64_t *)val);
+}
+
+/** Reads a int64_t from a Big Endian buffer
+ *
+ * \param buf Buffer to read from
+ * \param val int64_t to read
+ *
+ * \return BCMOS_TRUE if read successful
+ */
+static inline bcmos_bool bcmolt_buf_read_s64_be(bcmolt_buf *buf, int64_t *val)
+{
+    return bcmolt_buf_read_u64_be(buf, (uint64_t *)val);
+}
+
+/** Writes a int64_t to a buffer
+ *
+ * \param buf    Buffer to write to
+ * \param val    int64_t to write
+ *
+ * \return       BCMOS_TRUE if write successful
+ */
+static inline bcmos_bool bcmolt_buf_write_s64(bcmolt_buf *buf, int64_t val)
+{
+    return bcmolt_buf_write_u64(buf, (uint64_t)val);
+}
+
+/** Writes a int64_t to a Big Endian buffer
+ *
+ * \param buf    Buffer to write to
+ * \param val    int64_t to write
+ *
+ * \return       BCMOS_TRUE if write successful
+ */
+static inline bcmos_bool bcmolt_buf_write_s64_be(bcmolt_buf *buf, int64_t val)
+{
+    return bcmolt_buf_write_u64_be(buf, (uint64_t)val);
+}
+
+/** Reads a float from a buffer
+ *
+ * \param buf Buffer to read from
+ * \param val float to read
+ *
+ * \return BCMOS_TRUE if read successful
+ */
+static inline bcmos_bool bcmolt_buf_read_float(bcmolt_buf *buf, float *val)
+{
+    return bcmolt_buf_read_u32(buf, (uint32_t *)val);
+}
+
+/** Writes a float to a buffer
+ *
+ * \param buf    Buffer to write to
+ * \param val    float to write
+ *
+ * \return       BCMOS_TRUE if write successful
+ */
+static inline bcmos_bool bcmolt_buf_write_float(bcmolt_buf *buf, float val)
+{
+    uint32_t *num = (uint32_t *)&val;
+    return bcmolt_buf_write_u32(buf, *num);
+}
+
+/** Reads a double from a buffer
+ *
+ * \param buf Buffer to read from
+ * \param val double to read
+ *
+ * \return BCMOS_TRUE if read successful
+ */
+static inline bcmos_bool bcmolt_buf_read_double(bcmolt_buf *buf, double *val)
+{
+    return bcmolt_buf_read_u64(buf, (uint64_t *)val);
+}
+
+/** Writes a double to a buffer
+ *
+ * \param buf    Buffer to write to
+ * \param val    double to write
+ *
+ * \return       BCMOS_TRUE if write successful
+ */
+static inline bcmos_bool bcmolt_buf_write_double(bcmolt_buf *buf, double val)
+{
+    uint64_t *num = (uint64_t *)&val;
+    return bcmolt_buf_write_u64(buf, *num);
+}
+
+/** Reads a bcmos_vlan_tag from a buffer
+ *
+ * \param buf Buffer to read from
+ * \param val bcmos_vlan_tag to read
+ *
+ * \return BCMOS_TRUE if read successful
+ */
+static inline bcmos_bool bcmolt_buf_read_vlan_tag(bcmolt_buf *buf, bcmos_vlan_tag *val)
+{
+    return bcmolt_buf_read_u16(buf, (uint16_t *)val);
+}
+
+/** Writes a bcmos_vlan_tag to a buffer
+ *
+ * \param buf Buffer to write to
+ * \param val bcmos_vlan_tag to write
+ *
+ * \return BCMOS_TRUE if write successful
+ */
+static inline bcmos_bool bcmolt_buf_write_vlan_tag(bcmolt_buf *buf, bcmos_vlan_tag val)
+{
+    return bcmolt_buf_write_u16(buf, (uint16_t)val);
+}
+
+/** Reads a bcmos_mac_address from a buffer
+ *
+ * \param buf Buffer to read from
+ * \param val bcmos_mac_address to read
+ *
+ * \return BCMOS_TRUE if read successful
+ */
+static inline bcmos_bool bcmolt_buf_read_mac_address(bcmolt_buf *buf, bcmos_mac_address *val)
+{
+    return bcmolt_buf_read(buf, val, sizeof(bcmos_mac_address));
+}
+
+/** Writes a bcmos_mac_address to a buffer
+ *
+ * \param buf Buffer to write to
+ * \param val bcmos_mac_address to write
+ *
+ * \return BCMOS_TRUE if write successful
+ */
+static inline bcmos_bool bcmolt_buf_write_mac_address(bcmolt_buf *buf, bcmos_mac_address val)
+{
+    return bcmolt_buf_write(buf, &val, sizeof(bcmos_mac_address));
+}
+
+/** Reads a bcmos_ipv4_address from a buffer
+ *
+ * \param buf Buffer to read from
+ * \param val bcmos_ipv4_address to read
+ *
+ * \return BCMOS_TRUE if read successful
+ */
+static inline bcmos_bool bcmolt_buf_read_ipv4_address(bcmolt_buf *buf, bcmos_ipv4_address *val)
+{
+    return bcmolt_buf_read(buf, val->u8, sizeof(bcmos_ipv4_address));
+}
+
+/** Writes a bcmos_ipv4_address to a buffer
+ *
+ * \param buf Buffer to write to
+ * \param val bcmos_ipv4_address to write
+ *
+ * \return BCMOS_TRUE if write successful
+ */
+static inline bcmos_bool bcmolt_buf_write_ipv4_address(bcmolt_buf *buf, bcmos_ipv4_address val)
+{
+    return bcmolt_buf_write(buf, val.u8, sizeof(bcmos_ipv4_address));
+}
+
+/** Reads a bcmos_ipv6_address from a buffer
+ *
+ * \param buf Buffer to read from
+ * \param val bcmos_ipv6_address to read
+ *
+ * \return BCMOS_TRUE if read successful
+ */
+static inline bcmos_bool bcmolt_buf_read_ipv6_address(bcmolt_buf *buf, bcmos_ipv6_address *val)
+{
+    return bcmolt_buf_read(buf, *val, sizeof(bcmos_ipv6_address));
+}
+
+/** Writes a bcmos_ipv6_address to a buffer
+ *
+ * \param buf Buffer to write to
+ * \param val bcmos_ipv6_address to write
+ *
+ * \return BCMOS_TRUE if write successful
+ */
+static inline bcmos_bool bcmolt_buf_write_ipv6_address(bcmolt_buf *buf, bcmos_ipv6_address val)
+{
+    return bcmolt_buf_write(buf, val, sizeof(bcmos_ipv6_address));
+}
+
+#endif /* BCMOLT_BUF_H_ */
diff --git a/bcm68620_release/release/host_driver/utils/bcmolt_conv.c b/bcm68620_release/release/host_driver/utils/bcmolt_conv.c
new file mode 100644
index 0000000..7472c21
--- /dev/null
+++ b/bcm68620_release/release/host_driver/utils/bcmolt_conv.c
@@ -0,0 +1,59 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#include <bcmos_system.h>
+#include <bcmolt_utils.h>
+#include "bcmolt_conv.h"
+
+char *bcmolt_strftime(char *time_str, time_t t, const char *timezone_str)
+{
+    struct tm ts;
+    int32_t tz_hour;
+    uint32_t tz_min;
+    
+    ts = *localtime(&t);
+    if (timezone_str && *timezone_str)
+    {
+        if (sscanf(timezone_str, "%03d:%02u", &tz_hour, &tz_min) < 2)
+        {
+            tz_hour = 0;
+            tz_min = 0;
+        }
+        else
+        {
+            ts.tm_hour += tz_hour;
+            ts.tm_min += tz_min;
+        }
+    }
+
+    strftime(time_str, BCMOLT_TIME_STR_MAX_LEN, "%a %Y-%m-%d %H:%M:%S", &ts);
+
+    return time_str;
+}
+
diff --git a/bcm68620_release/release/host_driver/utils/bcmolt_conv.h b/bcm68620_release/release/host_driver/utils/bcmolt_conv.h
new file mode 100644
index 0000000..50c8a0b
--- /dev/null
+++ b/bcm68620_release/release/host_driver/utils/bcmolt_conv.h
@@ -0,0 +1,186 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef _BCMOLT_CONV_H_
+#define _BCMOLT_CONV_H_
+
+#ifndef CFE_BUILD
+#include <bcmolt_utils.h>
+#endif
+
+/* Macro for generating a generic conversion from type A to type B.
+ * Example:
+ *
+ *      BCMOLT_TYPE2TYPE(bws_dba_control_id, bws_dba_control_cb, static)
+ *
+ * will expand to:
+ *
+ *     typedef struct
+ *     {
+ *         bws_dba_control_id from;
+ *         bws_dba_control_cb to;
+ *     }
+ *     bws_dba_control_id2bws_dba_control_cb_t;
+ *     
+ *     static bws_dba_control_id2bws_dba_control_cb_t bws_dba_control_id2bws_dba_control_cb[];
+ *     
+ *     static inline bws_dba_control_cb bws_dba_control_id2bws_dba_control_cb_conv(bws_dba_control_id from)
+ *     {
+ *         const bws_dba_control_id2bws_dba_control_cb_t *arr = bws_dba_control_id2bws_dba_control_cb;
+ *         for (; arr->from != (bws_dba_control_id)-1 && arr->from != from; arr++);
+ *         return arr->to;
+ *     }
+ */
+#define BCMOLT_TYPE2TYPE(from_type, to_type, scope) \
+    typedef struct \
+    { \
+        from_type from; \
+        to_type to; \
+    } \
+    from_type##2##to_type##_t; \
+    scope from_type##2##to_type##_t from_type##2##to_type[]; \
+    static inline to_type from_type##2##to_type##_conv(from_type from) \
+    { \
+        const from_type##2##to_type##_t *arr = from_type##2##to_type; \
+        for (; arr->from != (from_type)-1 && arr->from != from; arr++); \
+        return arr->to; \
+    }
+
+/* Macro for generating a generic conversion from type A to a constant string.
+ * Example:
+ *
+ *      BCMOLT_TYPE2STR(pon_mode, extern)
+ *
+ * will expand to:
+ *
+ *     typedef struct
+ *     {
+ *         pon_mode from;
+ *         const char *to;
+ *     }
+ *     pon_mode2str_t;
+ *
+ *     extern pon_mode2str_t pon_mode2str[];
+ *
+ *     static inline const char *pon_mode2str_conv(pon_mode from)
+ *     {
+ *         const pon_mode2str_t *arr = pon_mode2str;
+ *         for (; arr->from != (pon_mode)-1 && arr->from != from; arr++);
+ *         return arr->to;
+ *     }
+ */
+#define BCMOLT_TYPE2STR(from_type, scope) \
+    typedef struct \
+    { \
+        from_type from; \
+        const char *to; \
+    } \
+    from_type##2str_t; \
+    scope from_type##2str_t from_type##2str[]; \
+    static inline const char *from_type##2str_conv(from_type from) \
+    { \
+        const from_type##2str_t *arr = from_type##2str; \
+        for (; arr->from != (from_type)-1 && arr->from != from; arr++); \
+        return arr->to; \
+    }
+
+/* Macro for generating a generic conversion from type A to an integer.
+ * Example:
+ *
+ *      BCMOLT_TYPE2INT(ploam_ds_gpon_message_id, repetitions, extern)
+ *
+ * will expand to:
+ * 
+ *     typedef struct
+ *     {
+ *         ploam_ds_gpon_message_id from;
+ *         int to;
+ *     }
+ *     ploam_ds_gpon_message_id2repetitions_t;
+ *
+ *     extern ploam_ds_gpon_message_id2repetitions_t ploam_ds_gpon_message_id2repetitions[];
+ *
+ *     static inline int ploam_ds_gpon_message_id2repetitions_conv(ploam_ds_gpon_message_id from)
+ *     {
+ *         const ploam_ds_gpon_message_id2repetitions_t *arr = ploam_ds_gpon_message_id2repetitions;
+ *         for (; arr->from != (ploam_ds_gpon_message_id)-1 && arr->from != from; arr++);
+ *         return arr->to;
+ *     }
+ */
+#define BCMOLT_TYPE2INT(from_type, to_name, scope) \
+    typedef struct \
+    { \
+        from_type from; \
+        int to; \
+    } \
+    from_type##2##to_name##_t; \
+    scope from_type##2##to_name##_t from_type##2##to_name[]; \
+    static inline int from_type##2##to_name##_conv(from_type from) \
+    { \
+        const from_type##2##to_name##_t *arr = from_type##2##to_name; \
+        for (; arr->from != (from_type)-1 && arr->from != from; arr++); \
+        return arr->to; \
+    }
+
+/* Although we have BCMOLT_TYPE2STR, int2str_t is still required when the same generic pointer needs to point to 2 different types (e.g: one specific for GPON and
+ * the other specific for XGPON). */
+typedef struct
+{
+    int from;
+    const char *to;
+}
+int2str_t;
+
+static inline const char *int2str(const int2str_t *arr, int from)
+{
+    for (; arr->from != -1 && arr->from != from; arr++);
+    return arr->to;
+}
+
+/* Although we have BCMOLT_TYPE2INT, int2int_t is still required when the same generic pointer needs to point to 2 different types (e.g: one specific for GPON and
+ * the other specific for XGPON). */
+typedef struct
+{
+    int from;
+    int to;
+}
+int2int_t;
+
+static inline int int2int(const int2int_t *arr, int from)
+{
+    for (; arr->from != -1 && arr->from != from; arr++);
+    return arr->to;
+}
+
+#ifndef CFE_BUILD
+char *bcmolt_strftime(char *time_str, time_t t, const char *timezone_str);
+#endif
+
+#endif
+
diff --git a/bcm68620_release/release/host_driver/utils/bcmolt_firmware_envelope.h b/bcm68620_release/release/host_driver/utils/bcmolt_firmware_envelope.h
new file mode 100644
index 0000000..fd4d6d0
--- /dev/null
+++ b/bcm68620_release/release/host_driver/utils/bcmolt_firmware_envelope.h
@@ -0,0 +1,95 @@
+/*
+<:copyright-BRCM:2016:proprietary:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+This program is the proprietary software of Broadcom Corporation and/or its
+licensors, and may only be used, duplicated, modified or distributed pursuant
+to the terms and conditions of a separate, written license agreement executed
+between you and Broadcom (an "Authorized License").  Except as set forth in
+an Authorized License, Broadcom grants no license (express or implied), right
+to use, or waiver of any kind with respect to the Software, and Broadcom
+expressly reserves all rights in and to the Software and all intellectual
+property rights therein.  IF YOU HAVE NO AUTHORIZED LICENSE, THEN YOU HAVE
+NO RIGHT TO USE THIS SOFTWARE IN ANY WAY, AND SHOULD IMMEDIATELY NOTIFY
+BROADCOM AND DISCONTINUE ALL USE OF THE SOFTWARE.
+
+Except as expressly set forth in the Authorized License,
+
+1. This program, including its structure, sequence and organization,
+    constitutes the valuable trade secrets of Broadcom, and you shall use
+    all reasonable efforts to protect the confidentiality thereof, and to
+    use this information only in connection with your use of Broadcom
+    integrated circuit products.
+
+2. TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
+    AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES, REPRESENTATIONS OR
+    WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH
+    RESPECT TO THE SOFTWARE.  BROADCOM SPECIFICALLY DISCLAIMS ANY AND
+    ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY, NONINFRINGEMENT,
+    FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES, ACCURACY OR
+    COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR CORRESPONDENCE
+    TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING OUT OF USE OR
+    PERFORMANCE OF THE SOFTWARE.
+
+3. TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM OR
+    ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL, INCIDENTAL, SPECIAL,
+    INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER ARISING OUT OF OR IN ANY
+    WAY RELATING TO YOUR USE OF OR INABILITY TO USE THE SOFTWARE EVEN
+    IF BROADCOM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES;
+    OR (ii) ANY AMOUNT IN EXCESS OF THE AMOUNT ACTUALLY PAID FOR THE
+    SOFTWARE ITSELF OR U.S. $1, WHICHEVER IS GREATER. THESE LIMITATIONS
+    SHALL APPLY NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY
+    LIMITED REMEDY.
+:>
+*/
+#ifndef _BCMOLT_FIRMWARE_ENVELOPE_H_
+#define _BCMOLT_FIRMWARE_ENVELOPE_H_
+
+#include <bcmos_system.h>
+
+#define BCMOLT_FIRMWARE_ENVELOPE_DESC_MAX_SIZE 128
+#define BCMOLT_FIRMWARE_ENVELOPE_TIME_ZONE_SIZE 7
+#define BCMOLT_FIRMWARE_ENVELOPE_MD5_CHECKSUM_SIZE 16
+
+/* Normalized form of a firmware revision for comparison purposes. */
+#define DEVICE_MGMT_REVISION_RELEASE_MAJOR_ID_SHIFT 24
+#define DEVICE_MGMT_REVISION_RELEASE_MINOR_ID_SHIFT 16
+#define DEVICE_MGMT_REVISION_RELEASE_REVISION_ID_SHIFT 8
+#define DEVICE_MGMT_REVISION_MODEL_ID_SHIFT 0
+
+#define BCMOLT_FIRMWARE_ENVELOPE_NORMALIZE(rev_a) \
+    (((rev_a)->release_major_id << DEVICE_MGMT_REVISION_RELEASE_MAJOR_ID_SHIFT) | \
+    ((rev_a)->release_minor_id << DEVICE_MGMT_REVISION_RELEASE_MINOR_ID_SHIFT) | \
+    ((rev_a)->release_revision_id << DEVICE_MGMT_REVISION_RELEASE_REVISION_ID_SHIFT) | \
+    ((rev_a)->model_id << DEVICE_MGMT_REVISION_MODEL_ID_SHIFT))
+
+typedef struct __PACKED_ATTR_START__
+{
+    uint8_t release_major_id;
+    uint8_t release_minor_id;
+    uint8_t release_revision_id;
+    uint32_t model_id;
+} __PACKED_ATTR_END__ bcmolt_firmware_envelope_revision;
+
+typedef struct __PACKED_ATTR_START__
+{
+    uint8_t envelope_revision; /* The envelope itself can be changed over time, so this explains why we need an envelope revision field. */
+    bcmolt_firmware_envelope_revision revision; /* Revision information */
+    uint32_t block_issu_enforce; /* Every time a change in the code cannot be supported in ISSU and requires a regular upgrade (e.g.: SGB/SERDES firmware upgrade), this integer number will 
+                                  * be incremented. If revision validation function detects a change in this integer between two revisions, then it will block ISSU. */
+    uint32_t p4_change_set; /* This is purely informative field that should have no impact on validation. */
+    uint32_t build_time; /* This is purely informative field that should have no impact on validation. It contains the date/time of the image itself, expressed as seconds since the EPOCH. */
+    char build_time_zone[BCMOLT_FIRMWARE_ENVELOPE_TIME_ZONE_SIZE]; /* This is purely informative field that should have no impact on validation. It goes along with build time option and
+                                                                    * provides time zone information, as the embedded side does not know anything about time zone (without that, the build
+                                                                    * time converted to a string will always yield GMT time, not local time). */
+    uint8_t desc[BCMOLT_FIRMWARE_ENVELOPE_DESC_MAX_SIZE]; /* This is purely informative field that should have no impact on validation. */
+    uint8_t md5_checksum[BCMOLT_FIRMWARE_ENVELOPE_MD5_CHECKSUM_SIZE]; /* The MD5 checksum should be applied on the image itself, not on the envelope. This may be redundant because we
+                                                                       * automatically do CRC inherently as part of image transfer mechanism. However, this may have some future use. */
+    uint32_t image_len; /* The size in bytes of the image itself, not with the envelope. 4 bytes should be big enough to accommodate image length up to 4GB, which is far beyond what we
+                         * really need. */
+} __PACKED_ATTR_END__ bcmolt_firmware_envelope;
+
+#endif
+
diff --git a/bcm68620_release/release/host_driver/utils/bcmolt_math.h b/bcm68620_release/release/host_driver/utils/bcmolt_math.h
new file mode 100644
index 0000000..fb52a00
--- /dev/null
+++ b/bcm68620_release/release/host_driver/utils/bcmolt_math.h
@@ -0,0 +1,71 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef _BCMOLT_MATH_H_
+#define _BCMOLT_MATH_H_
+
+#include <math.h>
+
+#define ROUND_U32(size_in_bytes) ((uint32_t)((size_in_bytes) + 0.5))
+#define CEIL_U32(size_in_bytes) (((size_in_bytes)-(uint32_t)(size_in_bytes)) > 0 ? ((uint32_t)(size_in_bytes)+1) : (uint32_t)(size_in_bytes))
+#define SQUARE(x) ((x) * (x))
+#define PERCENT(percent, x) (((float)(percent) * (x)) / 100)
+
+/*
+ * Unit Conversion
+ */
+#define BITS_TO_BYTES(bits) ((bits) >> 3)
+#define BYTES_TO_BITS(bytes) ((bytes) << 3)
+
+/* Quantization */
+
+/*
+ * VAL_TO_BIN classifies the value of val to the proper bin
+ * val - a value in the range [0, maxval]
+ * bin - a value in the range [0, bins-1] (result of macro)
+ */
+#define VAL_TO_BIN(val, maxval, bins) ((val) < (maxval) ? ((val) * (bins)) / (maxval) : (bins) - 1)
+
+/* If a value is in a certain bin, it is in the range [min_bin_val, max_bin_val]
+ * min_bin_val - minimum value that belongs to bin
+ * max_bin_val - maximum value that belongs to bin
+ */
+#define BIN_TO_MIN_BIN_VAL(bin, maxval, bins) ((bin) * ((double)(maxval) / (bins)))
+#define BIN_TO_MAX_BIN_VAL(bin, maxval, bins) (((bin) + 1) * ((double)(maxval) / (bins)))
+
+#define GET_MASK(width)             ((1 << (width)) - 1)
+
+#define MAX(a, b) ((a) > (b) ? (a) : (b))
+#define MIN(a, b) ((a) < (b) ? (a) : (b))
+#define MAX3(a, b, c) MAX(MAX(a, b), c)
+#define MIN3(a, b, c) MIN(MIN(a, b), c)
+
+#define CEILING(a, b)   (((a) + ((b) - 1)) / (b))
+
+#endif /* _BCMOLT_MATH_H_ */
diff --git a/bcm68620_release/release/host_driver/utils/bcmolt_module.h b/bcm68620_release/release/host_driver/utils/bcmolt_module.h
new file mode 100644
index 0000000..ad513e9
--- /dev/null
+++ b/bcm68620_release/release/host_driver/utils/bcmolt_module.h
@@ -0,0 +1,52 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef _BCMOLT_MODULE_H_
+#define _BCMOLT_MODULE_H_
+
+#include <bcmos_system.h>
+#include <bcmolt_model_types.h>
+#include <bcm_dev_log.h>
+
+/* The following structure can be used by probably all modules in our system. */
+typedef struct
+{
+    bcmos_task task;
+    bcmos_bool is_enabled;
+    char task_name[MAX_TASK_NAME_SIZE];
+    dev_log_id log_id;
+    bcmolt_pon_ni pon_id;
+    char msg_queue_name[MAX_MSG_QUEUE_NAME_SIZE];
+    bcmos_msg_pool msg_pool;
+    bcmos_module_id module_id;
+    void *context;
+} bcmolt_module_gen_params;
+
+#endif
+
diff --git a/bcm68620_release/release/host_driver/utils/bcmolt_string.c b/bcm68620_release/release/host_driver/utils/bcmolt_string.c
new file mode 100644
index 0000000..a10fa20
--- /dev/null
+++ b/bcm68620_release/release/host_driver/utils/bcmolt_string.c
@@ -0,0 +1,102 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#include "bcmolt_string.h"
+#include "bcmolt_math.h"
+
+struct bcmolt_string
+{
+    char *str;
+    uint32_t max_len;
+    char *curr;
+    int32_t remaining;
+};
+
+int bcmolt_string_copy(bcmolt_string *str, const char *buf, uint32_t size)
+{
+    int to_copy = MIN(size, str->remaining);
+    memcpy(str->curr, buf, to_copy);
+    str->remaining -= to_copy;
+    str->curr += to_copy;
+    str->curr[0] = '\0';
+    return to_copy;
+}
+
+int bcmolt_string_append(bcmolt_string *str, const char *fmt, ...)
+{
+    int n;
+    va_list args;
+
+    va_start(args, fmt);
+    n = vsnprintf(str->curr, str->remaining, fmt, args);
+    va_end(args);
+    if (n > 0)
+    {
+        if (n > str->remaining)
+        {
+            n = str->remaining;
+        }
+        str->remaining -= n;
+        str->curr += n;
+    }
+
+    return n;
+}
+
+const char *bcmolt_string_get(bcmolt_string *str)
+{
+    return str->str;
+}
+
+void bcmolt_string_reset(bcmolt_string *str)
+{
+    str->str[0] = '\0';
+    str->curr = str->str;
+    str->remaining = str->max_len;
+}
+
+bcmos_errno bcmolt_string_create(bcmolt_string **str, uint32_t max_len)
+{
+    *str = bcmos_calloc(sizeof(bcmolt_string) + max_len + 1);
+    if (*str != NULL)
+    {
+        (*str)->str = (char*)((*str) + 1);
+        (*str)->max_len = max_len;
+        bcmolt_string_reset(*str);
+        return BCM_ERR_OK;
+    }
+
+    return BCM_ERR_NOMEM;
+}
+
+void bcmolt_string_destroy(bcmolt_string *str)
+{
+    bcmos_free(str);
+}
+
diff --git a/bcm68620_release/release/host_driver/utils/bcmolt_string.h b/bcm68620_release/release/host_driver/utils/bcmolt_string.h
new file mode 100644
index 0000000..01fcaa2
--- /dev/null
+++ b/bcm68620_release/release/host_driver/utils/bcmolt_string.h
@@ -0,0 +1,49 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef _BCMOLT_STRING_H_
+#define _BCMOLT_STRING_H_
+
+#include "bcmos_system.h"
+
+typedef struct bcmolt_string bcmolt_string;
+
+int bcmolt_string_copy(bcmolt_string *str, const char *buf, uint32_t size);
+
+int bcmolt_string_append(bcmolt_string *str, const char *fmt, ...);
+
+const char *bcmolt_string_get(bcmolt_string *str);
+
+void bcmolt_string_reset(bcmolt_string *str);
+
+bcmos_errno bcmolt_string_create(bcmolt_string **str, uint32_t max_len);
+
+void bcmolt_string_destroy(bcmolt_string *str);
+
+#endif /* _BCMOLT_STRING_H_ */
diff --git a/bcm68620_release/release/host_driver/utils/bcmolt_utils.c b/bcm68620_release/release/host_driver/utils/bcmolt_utils.c
new file mode 100644
index 0000000..b8a8994
--- /dev/null
+++ b/bcm68620_release/release/host_driver/utils/bcmolt_utils.c
@@ -0,0 +1,204 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#include "bcmolt_utils.h"
+
+/* HexPrint a single line */
+#define BYTES_IN_LINE 16
+
+#define b2a(c)  (isprint(c)?c:'.')
+
+static void _hexprint1(bcmos_msg_print_cb print_cb, void *context, uint16_t o, const uint8_t *p_data, uint16_t count, const char *indent)
+{
+    int i;
+
+    if (indent)
+        print_cb(context, "%s", indent);
+
+    print_cb(context, "%04x: ", o);
+    for (i=0; i<count; i++)
+    {
+        print_cb(context, "%02x", p_data[i]);
+        if (!((i+1)%4))
+            print_cb(context, " ");
+    }
+    for (; i<BYTES_IN_LINE; i++)
+    {
+        if (!((i+1)%4))
+            print_cb(context, "   ");
+        else
+            print_cb(context, "  ");
+    }
+    for (i=0; i<count; i++)
+        print_cb(context, "%c", b2a(p_data[i]));
+    print_cb(context, "\n");
+}
+
+void bcmos_hexdump(bcmos_msg_print_cb print_cb, void *context, const void *buffer, uint32_t offset, uint32_t count, const char *indent)
+{
+    const uint8_t *p_data = buffer;
+    uint16_t n;
+
+    while (count)
+    {
+        n = (count > BYTES_IN_LINE) ? BYTES_IN_LINE : count;
+        _hexprint1(print_cb, context, offset, p_data, n, indent);
+        count -= n;
+        p_data += n;
+        offset += n;
+    }
+}
+
+void bcmos_hexdump_one_line(const char *funcname,     /* __FUNCTION__ */
+    uint32_t lineno,       /* __LINE__ */
+    bcmos_msg_print_cb print_cb,
+    void *context,
+    const void *buffer, /* start of memory region to dump */
+    uint32_t start_offset, /* start offset into the region */
+    uint32_t byte_count, /* number of bytes in region to dump */
+    const char *prefix, /* optional prefix string */
+    const char *suffix) /* optional suffix string */
+{
+    const uint8_t *p_data = buffer;
+    uint32_t data_offset = start_offset;
+    size_t max_buf_size = 8000; /* room enough to dump ~2600 bytes with shortish prefixes/suffixes */
+    char *out_buf = bcmos_calloc(max_buf_size);
+    size_t out_buf_offset = 0;
+    uint32_t tmp_num_chars = 0;
+
+    BUG_UNLESS(out_buf);
+
+    memset(out_buf, 0, max_buf_size);
+
+    if (prefix)
+    {
+        tmp_num_chars = snprintf(out_buf + out_buf_offset, /* out_buf start offset */
+            max_buf_size - out_buf_offset, /* remaining space in out_buf */
+            "\n%40s:%-5u  %s", funcname, lineno, prefix);
+    }
+    else
+    {
+        tmp_num_chars = snprintf(out_buf + out_buf_offset, /* out_buf start offset */
+            max_buf_size - out_buf_offset, /* remaining space in out_buf */
+            "\n");
+    }
+    out_buf_offset += tmp_num_chars;
+
+    while ((data_offset < (start_offset + byte_count)) && (out_buf_offset < max_buf_size))
+    {
+        tmp_num_chars = snprintf(out_buf + out_buf_offset, /* out_buf start offset */
+            max_buf_size - out_buf_offset, /* remaining space in out_buf */
+            "%02x ",
+            p_data[data_offset++]); /* byte to dump */
+        BUG_UNLESS(3 == tmp_num_chars);
+        out_buf_offset += tmp_num_chars;
+    }
+
+    if (tmp_num_chars < max_buf_size)
+    {
+        if (suffix)
+        {
+            tmp_num_chars = snprintf(out_buf + out_buf_offset, /* out_buf start offset */
+                max_buf_size - out_buf_offset, /* remaining space in out_buf */
+                "%s", suffix);
+        }
+        else
+        {
+            tmp_num_chars = snprintf(out_buf + out_buf_offset, /* out_buf start offset */
+                max_buf_size - out_buf_offset, /* remaining space in out_buf */
+                "\n");
+        }
+        out_buf_offset += tmp_num_chars;
+        BUG_UNLESS(out_buf_offset < max_buf_size);
+    }
+
+    print_cb(context, "%s", out_buf);
+    bcmos_free(out_buf);
+}
+
+static uint32_t eth_crc32_tab[] =
+{
+    0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f,
+    0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
+    0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2,
+    0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
+    0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
+    0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
+    0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c,
+    0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
+    0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423,
+    0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
+    0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106,
+    0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
+    0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d,
+    0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
+    0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
+    0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
+    0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7,
+    0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
+    0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa,
+    0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
+    0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81,
+    0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
+    0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84,
+    0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
+    0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
+    0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
+    0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e,
+    0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
+    0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55,
+    0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
+    0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28,
+    0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
+    0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f,
+    0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
+    0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
+    0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
+    0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69,
+    0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
+    0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc,
+    0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
+    0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693,
+    0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
+    0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
+};
+
+uint32_t eth_calc_crc32(uint32_t crc, const void *buf, size_t size)
+{
+    const uint8_t *p;
+
+    p = buf;
+    crc = crc ^ ~0U;
+
+    while (size--)
+        crc = eth_crc32_tab[(crc ^ *p++) & 0xFF] ^ (crc >> 8);
+
+    return crc ^ ~0U;
+}
+
diff --git a/bcm68620_release/release/host_driver/utils/bcmolt_utils.h b/bcm68620_release/release/host_driver/utils/bcmolt_utils.h
new file mode 100644
index 0000000..b8a5a2d
--- /dev/null
+++ b/bcm68620_release/release/host_driver/utils/bcmolt_utils.h
@@ -0,0 +1,134 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef _BCMOLT_UTILS_H_
+#define _BCMOLT_UTILS_H_
+
+#include "bcmos_system.h"
+
+#define BCMOS_MACADDR_FMT_STR "%02X:%02X:%02X:%02X:%02X:%02X"
+#define BCMOS_MACADDR_PARAMS(mac) (mac)->u8[0],(mac)->u8[1],(mac)->u8[2],(mac)->u8[3],(mac)->u8[4],(mac)->u8[5]
+
+#define MAC_STR_LEN 18
+
+#define BYTES_IN_MEGABYTE(bytes) ((bytes) / (1024 * 1024))
+
+static inline char *bcmos_mac_2_str(const bcmos_mac_address *mac, char *buf)
+{
+    snprintf(buf, MAC_STR_LEN, BCMOS_MACADDR_FMT_STR, BCMOS_MACADDR_PARAMS(mac));
+    return buf;
+}
+
+/** Swap a byte string of any length.
+ *
+ * \param[in]   ptr     pointer to a memory space.
+ * \param[in]   len     length
+ * \note
+ *      {0, 1, 2, 3} becomes {3, 2, 1, 0}
+ */
+static inline void bcmos_swap_bytes_in_place(uint8_t *ptr, uint32_t len)
+{
+    int  ii;
+    char tmp;
+
+    for (ii = 0; ii < (len / 2); ii++)
+    {
+        tmp = ptr[len - ii - 1];
+        ptr[len - ii - 1] = ptr[ii];
+        ptr[ii] = tmp;
+    }
+}
+
+/** Swap a byte string of any length.
+ *
+ * \param[out]      dst     pointer to a memory space for the swapped bytes.
+ * \param[in]       src     pointer to a memory space for bytes to be swapped.
+ * \param[in]       len     length in bytes
+ * \note
+ *      {0, 1, 2, 3} becomes {3, 2, 1, 0}
+ */
+static inline void bcmos_swap_bytes(uint8_t *dst, const uint8_t *src, const uint32_t len)
+{
+    int  ii;
+
+    for (ii = 0; ii < len; ii++)
+    {
+        dst[ii] = src[len - ii - 1];
+    }
+}
+
+/** Copy bits from a given range of the source to a different range of the
+ *  destination
+ *
+ * \param[in]   dst         destination value to be merged to
+ * \param[in]   dst_hi      high bit position
+ * \param[in]   dst_lo      low bit position
+ * \param[in]   src         source value to copy the bits from
+ * \param[in]   src_hi      high bit position
+ * \param[in]   src_lo      low bit position
+ *
+ * \return      destination value
+ */
+static inline uint32_t bcmos_bits_copy_u32(uint32_t dst, uint8_t dst_hi, uint8_t dst_lo,
+    uint32_t src, uint8_t src_hi, uint8_t src_lo)
+{
+    dst &= (~(((1 << ((dst_hi - dst_lo) + 1)) - 1) << dst_lo));
+    src &= (((1 << ((src_hi - src_lo) + 1)) - 1) << src_lo);
+    dst |= ((dst_lo >= src_lo)? (src << (dst_lo - src_lo)): (src >> (src_lo - dst_lo)));
+    return dst;
+}
+
+/* network to host on unaligned array of uint32_t elements. Treat pointer p as a pointer to an array of uint32_t elements. Get element i.  */
+#define N2H32(p, i) ((((const uint8_t *)(p))[(i) * 4]<<24) | (((const uint8_t *)(p))[(i) * 4+1]<<16) | (((const uint8_t *)(p))[(i) * 4+2]<<8) | (((const uint8_t *)(p))[(i) * 4+3]))
+/* network to host on unaligned array of uint16_t elements. Treat pointer p as a pointer to an array of uint16_t elements. Get element i. */
+#define N2H16(p, i) ((((const uint8_t *)(p))[(i) * 2]<<8) | (((const uint8_t *)(p))[(i) * 2+1]))
+/* network to host on unaligned array of uint8_t elements. Treat pointer p as a pointer to an array of uint8_t elements. Get element i. */
+#define N2H8(p, i) (((const uint8_t *)(p))[(i)])
+
+/* For internal use by the following H2N* macros */
+#define H2N8(p, v)   *((uint8_t *)p) = (uint8_t)(v)
+/* host to network conversion of a uint16_t with support for non 16 bit aligned destination address. p is a (uint8_t *) destination pointer. v is a uint16_t value. v can be written to p even if p is unaligned to 16 bits. */
+#define H2N16(p, v)  (H2N8((p), (v) >> 8), H2N8(((uint8_t *)(p) + 1), (v)))
+/* host to network conversion of a uint32_t with support for non 32 bit aligned destination address. p is a (uint8_t *) destination pointer. v is a uint32_t value. v can be written to p even if p is unaligned to 32 bits. */
+#define H2N32(p, v)  (H2N16((p), (v) >> 16), H2N16(((uint8_t *)(p) + 2), (v)))
+
+#define NUM_ELEM(array)     (sizeof(array) / sizeof((array)[0]))
+
+typedef void (*bcmos_msg_print_cb)(void *context, const char *fmt, ...);
+
+void bcmos_hexdump(bcmos_msg_print_cb print_cb, void *context, const void *buffer, uint32_t offset, uint32_t count, const char *indent);
+void bcmos_hexdump_one_line(const char *funcname, uint32_t lineno, bcmos_msg_print_cb print_cb, void *context, const void *buffer, uint32_t offset, uint32_t count, const char *prefix,
+    const char *suffix);
+
+uint32_t eth_calc_crc32(uint32_t crc, const void *buf, size_t size);
+
+#define BCMOLT_TIME_STR_MAX_LEN 80
+
+#endif /* BCMOLT_UTILS_H */
+
diff --git a/bcm68620_release/release/host_reference/api_cli/Makefile b/bcm68620_release/release/host_reference/api_cli/Makefile
new file mode 100644
index 0000000..4a08628
--- /dev/null
+++ b/bcm68620_release/release/host_reference/api_cli/Makefile
@@ -0,0 +1,9 @@
+# Maple API CLI
+#
+ifeq ($(ENABLE_CLI), y)
+    MOD_NAME = api_cli
+    MOD_TYPE = lib
+    MOD_DEPS = common_api model device_selector
+    
+    srcs = bcm_api_cli.c bcm_api_cli_dump.c bcm_api_cli_handlers.c bcm_api_cli_helpers.c 
+endif
diff --git a/bcm68620_release/release/host_reference/api_cli/bcm_api_cli.c b/bcm68620_release/release/host_reference/api_cli/bcm_api_cli.c
new file mode 100644
index 0000000..2e2666f
--- /dev/null
+++ b/bcm68620_release/release/host_reference/api_cli/bcm_api_cli.c
@@ -0,0 +1,1211 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#include <bcmos_system.h>
+#include <bcmcli.h>
+#include <bcmolt_api.h>
+#include <bcmolt_model_types.h>
+#include <bcmos_types.h>
+
+#include "bcm_api_cli.h"
+#include "bcm_api_cli_helpers.h"
+#include "bcm_api_cli_handlers.h"
+#ifdef BCM_SUBSYSTEM_HOST
+#include <bcmolt_dev_selector.h>
+#endif
+
+#define APICLI_CAST_DISCARD_CONST(p, type)       (type)((long)(p))
+
+/* bool enum table */
+static bcmcli_enum_val bool_enum[] =
+{
+    { .name = "yes", .val = 1 },
+    { .name = "no", .val = 0 },
+    BCMCLI_ENUM_LAST
+};
+
+static bcmcli_type_descr bool_type_descr = {
+    .name = "bool",
+    .descr = "Boolean",
+    .base_type = BCMOLT_BASE_TYPE_ID_ENUM,
+    .size = sizeof(bcmos_bool),
+    .x = {.e = bool_enum}
+};
+
+/* parameter data */
+typedef struct
+{
+    const bcmcli_prop_descr *prop;      /* property */
+    const bcmcli_field_descr *field;    /* field or NULL */
+    const bcmcli_field_descr *array_fd; /* array field descriptor or NULL */
+    uint16_t offset;                    /* offset from the beginning of the property */
+    uint16_t array_fd_offset;           /* offset of array_fd from the beginning of the property */
+    bcmolt_mgt_group group;             /* management group */
+} apicli_parm_data;
+
+typedef enum
+{
+    API_CLI_FLAGS_NONE = 0,
+    API_CLI_FLAGS_IGNORE_FIELDS = 1 << 0,
+    API_CLI_FLAGS_MULTI = 1 << 1
+} api_cli_flags;
+
+/* Operation: set, get, modify */
+typedef enum
+{
+    API_CLI_OPER_SET,
+    API_CLI_OPER_GET,
+    API_CLI_OPER_MODIFY,
+} api_cli_oper;
+
+/* Current session */
+static bcmcli_session *current_session;
+
+/* Current system mode */
+static bcmolt_system_mode current_system_mode;
+
+/* Parent directory */
+static bcmcli_entry *api_parent_dir;
+
+/*
+ * helpers
+ */
+
+/* calculate number of fields in type */
+static uint32_t _api_cli_get_num_fields_in_type(const bcmcli_type_descr *td)
+{
+    uint16_t f;
+    uint32_t nf = 0;
+
+
+    switch (td->base_type)
+    {
+        case BCMOLT_BASE_TYPE_ID_STRUCT:
+        {
+            if (!td->x.s.num_fields)
+                return 0;
+            BUG_ON(!td->x.s.fields);
+            for (f = 0; f < td->x.s.num_fields; f++)
+            {
+                nf +=  _api_cli_get_num_fields_in_type(td->x.s.fields[f].type);
+            }
+            break;
+        }
+
+        case BCMOLT_BASE_TYPE_ID_UNION:
+        {
+            /* Union. Count only common fields */
+            nf = td->x.u.num_common_fields;
+            break;
+        }
+
+        case BCMOLT_BASE_TYPE_ID_ARR_FIXED:
+        {
+            nf = _api_cli_get_num_fields_in_type(td->x.arr_fixed.elem_type);
+            break;
+        }
+
+        case BCMOLT_BASE_TYPE_ID_ARR_DYN:
+        {
+            nf = _api_cli_get_num_fields_in_type(td->x.arr_dyn.elem_type);
+            break;
+        }
+
+        default:
+        {
+            nf = 1;
+            break;
+        }
+    }
+
+    return nf;
+}
+
+/* calculate number of property fields for given object+group+subgroup+access. simple property=single field */
+static bcmos_errno _api_cli_get_num_fields_in_group(bcmolt_obj_id o, bcmolt_mgt_group group, uint16_t subgroup,
+    bcmolt_prop_access_id access_level, uint32_t *nfields)
+{
+    uint32_t nf = 0;
+    int i;
+    bcmos_errno rc = BCM_ERR_OK;
+
+    for (i = 0; rc != BCM_ERR_RANGE; i++)
+    {
+        const bcmcli_prop_descr *pd;
+        rc = api_cli_object_property(o, group, subgroup, i, &pd);
+        if (rc == BCM_ERR_OK && (pd->access & access_level))
+        {
+            /* Calculate number of fields if write access. Count only properties for read access */
+            if ((access_level & BCMOLT_PROP_ACCESS_ID_W) != 0)
+            {
+                BUG_ON(!pd->type);
+                nf += _api_cli_get_num_fields_in_type(pd->type);
+            }
+            else
+            {
+                ++nf;
+            }
+        }
+    }
+    *nfields = nf;
+
+    return BCM_ERR_OK;
+}
+
+/*
+ * Command handlers
+ */
+
+static bcmos_errno _apicli_objects_handler(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    int rc;
+    bcmolt_obj_id o;
+    const char *name, *descr;
+
+    bcmcli_print(session, "System Object Types:\n");
+    bcmcli_print(session, "=======================================\n");
+    bcmcli_print(session, "Id   Name                   Description\n");
+    bcmcli_print(session, "=======================================\n");
+    for (o = 0; o < BCMOLT_OBJ_ID__NUM_OF; o++)
+    {
+
+        if (current_system_mode < BCMOLT_SYSTEM_MODE__NUM_OF && !bcmolt_object_is_supported(current_system_mode, o))
+            continue;
+
+        rc = api_cli_object_name(o, &name, &descr);
+        if (!rc)
+            bcmcli_print(session, "%.4d %-22s %s\n", o, name, descr);
+    }
+
+    return 0;
+}
+
+static bcmos_errno _apicli_set_handler(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    return bcmolt_cli_api_call(current_device, BCMOLT_MGT_GROUP_CFG, BCMOLT_MSG_TYPE_SET, session);
+}
+
+static bcmos_errno _apicli_get_handler(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    return bcmolt_cli_api_call(current_device, BCMOLT_MGT_GROUP_CFG, BCMOLT_MSG_TYPE_GET, session);
+}
+
+static bcmos_errno _apicli_clear_handler(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    return bcmolt_cli_api_call(current_device, BCMOLT_MGT_GROUP_CFG, BCMOLT_MSG_TYPE_CLEAR, session);
+}
+
+static bcmos_errno _apicli_stat_handler(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    return bcmolt_cli_api_call(current_device, BCMOLT_MGT_GROUP_STAT, BCMOLT_MSG_TYPE_GET, session);
+}
+
+static bcmos_errno _apicli_oper_handler(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    return bcmolt_cli_api_call(current_device, BCMOLT_MGT_GROUP_OPER, BCMOLT_MSG_TYPE_SET, session);
+}
+
+static bcmos_errno _apicli_send_handler(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    return bcmolt_cli_api_call(current_device, BCMOLT_MGT_GROUP_PROXY, BCMOLT_MSG_TYPE_SET, session);
+}
+
+static bcmos_errno _apicli_stat_cfg_set_handler(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    return bcmolt_cli_api_call(current_device, BCMOLT_MGT_GROUP_STAT_CFG, BCMOLT_MSG_TYPE_SET, session);
+}
+
+static bcmos_errno _apicli_stat_cfg_get_handler(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    return bcmolt_cli_api_call(current_device, BCMOLT_MGT_GROUP_STAT_CFG, BCMOLT_MSG_TYPE_GET, session);
+}
+
+static bcmos_errno _apicli_auto_cfg_set_handler(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    return bcmolt_cli_api_call(current_device, BCMOLT_MGT_GROUP_AUTO_CFG, BCMOLT_MSG_TYPE_SET, session);
+}
+
+static bcmos_errno _apicli_auto_cfg_get_handler(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    return bcmolt_cli_api_call(current_device, BCMOLT_MGT_GROUP_AUTO_CFG, BCMOLT_MSG_TYPE_GET, session);
+}
+
+static bcmos_errno _apicli_auto_cfg_get_multi_handler(
+    bcmcli_session *session,
+    const bcmcli_cmd_parm parm[],
+    uint16_t nparms)
+{
+    return bcmolt_cli_api_call(current_device, BCMOLT_MGT_GROUP_CFG, BCMOLT_MSG_TYPE_GET_MULTI, session);
+}
+
+/*
+ * Init-time helpers
+ */
+
+/* map to CLI type */
+static bcmos_errno _api_cli_map_type(const bcmcli_type_descr *td, const bcmcli_type_descr *array_td, bcmcli_cmd_parm *cmd_parm)
+{
+    apicli_parm_data *parm_data = cmd_parm->user_data;
+    bcmos_errno rc = BCM_ERR_OK;
+
+    /* Map type */
+    switch(td->base_type)
+    {
+    case BCMOLT_BASE_TYPE_ID_SNUM:
+        cmd_parm->type = BCMCLI_PARM_NUMBER;
+        break;
+    case BCMOLT_BASE_TYPE_ID_UNUM:
+        cmd_parm->type = BCMCLI_PARM_UNUMBER;
+        break;
+    case BCMOLT_BASE_TYPE_ID_UNUM_HEX:
+        cmd_parm->type = BCMCLI_PARM_HEX;
+        break;
+    case BCMOLT_BASE_TYPE_ID_BOOL:
+        cmd_parm->type = BCMCLI_PARM_ENUM;
+        cmd_parm->enum_table = bool_enum;
+        break;
+    case BCMOLT_BASE_TYPE_ID_FLOAT:
+        cmd_parm->type = td->size == sizeof(double) ? BCMCLI_PARM_DOUBLE : BCMCLI_PARM_FLOAT;
+        break;
+    case BCMOLT_BASE_TYPE_ID_STRING:
+        cmd_parm->type = BCMCLI_PARM_STRING;
+        break;
+    case BCMOLT_BASE_TYPE_ID_IPV4:
+        cmd_parm->type = BCMCLI_PARM_IP;
+        break;
+    case BCMOLT_BASE_TYPE_ID_MAC:
+        cmd_parm->type = BCMCLI_PARM_MAC;
+        break;
+    case BCMOLT_BASE_TYPE_ID_ENUM:
+        cmd_parm->type = BCMCLI_PARM_ENUM;
+        cmd_parm->enum_table = td->x.e;
+        break;
+    case BCMOLT_BASE_TYPE_ID_ENUM_MASK:
+        cmd_parm->type = BCMCLI_PARM_ENUM_MASK;
+        cmd_parm->enum_table = td->x.e;
+        break;
+    default:
+        bcmcli_print(current_session, "*** can't map type %s (%d)\n", td->name, (int)td->base_type);
+        rc = BCM_ERR_NOT_SUPPORTED;
+        break;
+    }
+
+    /* Map uint8_t array to buffer if it is independent (not structure field) */
+    if (array_td &&
+        td->size == 1 &&
+        (td->base_type == BCMOLT_BASE_TYPE_ID_UNUM || td->base_type == BCMOLT_BASE_TYPE_ID_UNUM_HEX) &&
+        (parm_data->array_fd == parm_data->field || !parm_data->field))
+    {
+        cmd_parm->type = BCMCLI_PARM_BUFFER;
+    }
+
+    return rc;
+}
+
+/* allocate memory for name and description and copy to to parm */
+static bcmos_errno _api_cli_copy_parm_name(bcmcli_cmd_parm *parm, const char *name, const char *descr)
+{
+    parm->name = bcmos_alloc(strlen(name) + 1);
+    parm->description = bcmos_alloc(strlen(descr) + 1);
+    if ((parm->name == NULL) || (parm->description == NULL))
+    {
+        /* Successful allocation if any will be released by common cleanup
+         * along with the rest of dynamic parameter fields */
+        return BCM_ERR_NOMEM;
+    }
+    strcpy(APICLI_CAST_DISCARD_CONST(parm->name, void *), name);
+    strcpy(APICLI_CAST_DISCARD_CONST(parm->description, void *), descr);
+    return BCM_ERR_OK;
+}
+
+/* populate single parameter */
+static int _api_cli_populate_parm1(const bcmcli_prop_descr *pd, const bcmcli_field_descr *fd, const bcmcli_type_descr *td,
+    const bcmcli_field_descr *array_fd, uint32_t offset, uint32_t array_fd_offset,
+    bcmcli_cmd_parm *cmd_parm, uint32_t cmd_flags, char *name, char *help)
+{
+    apicli_parm_data *parm_data = cmd_parm->user_data;
+    int rc;
+
+    parm_data->prop = pd;
+    parm_data->field = fd;
+    parm_data->offset = offset;
+    parm_data->array_fd = array_fd;
+    parm_data->array_fd_offset = array_fd_offset;
+
+    rc = _api_cli_copy_parm_name(cmd_parm, name, help);
+    if (rc)
+    {
+        return rc;
+    }
+    cmd_parm->flags = cmd_flags;
+    if (td->min_val != td->max_val || td->min_val)
+    {
+        cmd_parm->flags |= BCMCLI_PARM_FLAG_RANGE;
+        cmd_parm->low_val = td->min_val;
+        cmd_parm->hi_val = td->max_val;
+    }
+    rc = _api_cli_map_type(td, array_fd ? array_fd->type : NULL, cmd_parm);
+    if (rc < 0)
+    {
+        return rc;
+    }
+
+    /* Arrays require more work.
+     * - Calculate size. Known for fixed arrays, hard-coded max for dynamic
+     * - Allocate either buffer or array of values based on CLI parameter type
+     * - Calculate offset from the beginning of array entry
+     */
+    if (array_fd)
+    {
+        uint32_t array_size;
+
+        if (array_fd->type->base_type == BCMOLT_BASE_TYPE_ID_ARR_FIXED)
+        {
+            array_size = array_fd->type->x.arr_fixed.size;
+        }
+        else
+        {
+            array_size = array_fd->type->x.arr_dyn.max_size;
+        }
+        if (!array_size)
+        {
+            bcmcli_print(current_session, "*** Error in %s array descriptor. Size is not set.\n", array_fd->name);
+            return BCM_ERR_INTERNAL;
+        }
+        if (cmd_parm->type == BCMCLI_PARM_BUFFER)
+        {
+            rc = bcmolt_buf_alloc(&cmd_parm->value.buffer, array_size, BCMOLT_BUF_ENDIAN_FIXED);
+            if (rc)
+            {
+                return rc;
+            }
+        }
+        else
+        {
+            cmd_parm->values = bcmos_calloc(sizeof(bcmcli_parm_value) * array_size);
+            if (!cmd_parm->values)
+            {
+                return BCM_ERR_NOMEM;
+            }
+            cmd_parm->max_array_size = array_size;
+        }
+    }
+
+    return 1;
+}
+
+
+/* populate name buf and help buf */
+static void _api_cli_populate_name_help(const bcmcli_field_descr *fld, char *name_buf0, char *help_buf0,
+    char *name_buf, char *help_buf)
+{
+    name_buf[0] = 0;
+    help_buf[0] = 0;
+    bcmcli_strncpy(name_buf, name_buf0, APICLI_MAX_PARM_NAME_LENGTH);
+    if (strlen(name_buf))
+        bcmcli_strncat(name_buf, ".", APICLI_MAX_PARM_NAME_LENGTH);
+    bcmcli_strncat(name_buf, fld->cli_name ? fld->cli_name : fld->name, APICLI_MAX_PARM_NAME_LENGTH);
+    bcmcli_strncpy(help_buf, help_buf0, APICLI_MAX_PARM_HELP_LENGTH);
+    bcmcli_strncat(help_buf, " - ", APICLI_MAX_PARM_HELP_LENGTH);
+    bcmcli_strncat(help_buf, fld->descr ? fld->descr : fld->name, APICLI_MAX_PARM_HELP_LENGTH);
+}
+
+/* Allocate CLI parameter array. Set up parm->data */
+static bcmcli_cmd_parm *_api_cli_parm_alloc(int nparms)
+{
+    uint32_t size;
+    bcmcli_cmd_parm *parms;
+    apicli_parm_data *parm_data;
+    int i;
+
+    /* Allocate parameter table and populate it */
+    size = (sizeof(bcmcli_cmd_parm) + sizeof(apicli_parm_data)) * (nparms + 1);
+    parms = bcmos_calloc(size);
+    if (!parms)
+        return NULL;
+
+    /* Associate parameter_data structs with parameters */
+    parm_data = (apicli_parm_data *)(parms + nparms + 1);
+    for (i = 0; i < nparms; i++)
+    {
+        parms[i].user_data = &parm_data[i];
+    }
+    return parms;
+}
+
+/* clone enum table */
+static bcmcli_enum_val *_api_cli_clone_enum_table(bcmcli_cmd_parm *parm)
+{
+    bcmcli_enum_val *org_table = parm->enum_table;
+    bcmcli_enum_val *val = org_table;
+    bcmcli_enum_val *clone_table = org_table;
+    int i, n;
+
+    BUG_ON(parm->type != BCMCLI_PARM_ENUM);
+    while (val && val->name)
+    {
+        ++val;
+    }
+    n = val - org_table;
+
+    clone_table = bcmos_calloc(sizeof(bcmcli_enum_val) * (n + 1));
+    if (!clone_table)
+    {
+        return NULL;
+    }
+    for (i = 0; i < n; i++)
+    {
+        clone_table[i].name = org_table[i].name;
+        clone_table[i].val = org_table[i].val;
+    }
+    return clone_table;
+}
+
+
+/* populate CLI parameter(s) from a single property. Can be multiple parameters
+ * if property contains multiple fields.
+ * Returns number of parameters populated >= 0 or error < 0
+ */
+static int _api_cli_populate_parms_from_property(const bcmcli_prop_descr *pd, const bcmcli_field_descr *fd,
+    const bcmcli_field_descr *array_fd, uint32_t offset, uint32_t array_fd_offset, bcmcli_cmd_parm *parms,
+    bcmolt_prop_access_id access_level, uint32_t cmd_flags, char *name_buf0, char *help_buf0)
+{
+    const bcmcli_type_descr *td = fd ? fd->type : pd->type;
+    uint32_t nf = 0;
+    char name_buf[APICLI_MAX_PARM_NAME_LENGTH];
+    char help_buf[APICLI_MAX_PARM_HELP_LENGTH];
+    int rc = 0;
+
+    /* At top level take name from property */
+    if (td == pd->type)
+    {
+        /* In case there's a global prefix */
+        char *top_name_buf = name_buf0;
+        uint32_t top_name_buf_len = APICLI_MAX_PARM_NAME_LENGTH;
+        uint32_t prefix_len = strlen(name_buf0);
+        if (prefix_len > 0)
+        {
+            top_name_buf += prefix_len;
+            top_name_buf_len -= prefix_len;
+        }
+
+        bcmcli_strncpy(top_name_buf, pd->cli_name ? pd->cli_name : pd->name, top_name_buf_len);
+        bcmcli_strncpy(help_buf0, pd->descr ? pd->descr : pd->name, APICLI_MAX_PARM_HELP_LENGTH);
+    }
+
+    /* For read access we only mark whether read property or not. It is not field-by-field operation */
+    if (access_level == BCMOLT_PROP_ACCESS_ID_R)
+    {
+        td = &bool_type_descr;
+    }
+
+    /* In case of arrays we should
+     * - check that there is no array in array. It is not supported
+     * - store array type descriptor FFU and replace the "current" type descriptor with element type
+     * - reset offset because for array fields it should be calculated from array base rather than property
+     */
+    if (td->base_type == BCMOLT_BASE_TYPE_ID_ARR_DYN || td->base_type == BCMOLT_BASE_TYPE_ID_ARR_FIXED)
+    {
+        if (array_fd)
+        {
+            bcmcli_print(current_session, "*** %s in %s: arrays-in-arrays are not supported\n", pd->name, array_fd->name);
+            return BCM_ERR_NOT_SUPPORTED;
+        }
+        /* store array type and fetch element type */
+        array_fd = fd ? fd : (const bcmcli_field_descr *)pd;
+        if (td->base_type == BCMOLT_BASE_TYPE_ID_ARR_DYN)
+        {
+            td = td->x.arr_dyn.elem_type;
+        }
+        else
+        {
+            td = td->x.arr_fixed.elem_type;
+        }
+        array_fd_offset = offset;
+        offset = 0;
+    }
+
+    if (td->base_type == BCMOLT_BASE_TYPE_ID_STRUCT)
+    {
+        uint16_t f;
+        if (!td->x.s.num_fields)
+            return 0;
+        BUG_ON(!td->x.s.fields);
+        for (f = 0; f < td->x.s.num_fields; f++)
+        {
+            const bcmcli_field_descr *fld = &td->x.s.fields[f];
+            _api_cli_populate_name_help(fld, name_buf0, help_buf0, name_buf, help_buf);
+            rc = _api_cli_populate_parms_from_property(pd, fld, array_fd, offset+fld->offset,
+                array_fd_offset, &parms[nf], access_level, cmd_flags, name_buf, help_buf);
+            if (rc > 0)
+                nf +=  rc;
+        }
+    }
+    else if (td->base_type == BCMOLT_BASE_TYPE_ID_UNION)
+    {
+        /* Union */
+        uint16_t f;
+        const bcmcli_field_descr *fld;
+        bcmcli_cmd_parm *sel_parm;
+        apicli_parm_data *sel_data;
+        bcmcli_enum_val *e;
+
+        if (!td->x.u.num_common_fields)
+            return 0;
+        BUG_ON(!td->x.u.common_fields);
+
+        /* Populate parameters preceding the union selector */
+        for (f = 0; f < td->x.u.classifier_idx; f++)
+        {
+            fld = &td->x.u.common_fields[f];
+            _api_cli_populate_name_help(fld, name_buf0, help_buf0, name_buf, help_buf);
+            rc =  _api_cli_populate_parms_from_property(pd, fld, array_fd,
+                offset+fld->offset, array_fd_offset, &parms[nf], access_level, cmd_flags, name_buf, help_buf);
+            if (rc > 0)
+                nf += rc;
+        }
+
+        /* Now populate parameter for selector */
+        sel_parm = &parms[nf];
+        fld = &td->x.u.common_fields[f];
+        _api_cli_populate_name_help(fld, name_buf0, help_buf0, name_buf, help_buf);
+        rc = _api_cli_populate_parms_from_property(pd, fld, array_fd,
+            offset+fld->offset, array_fd_offset, sel_parm, access_level, cmd_flags, name_buf, help_buf);
+        if (rc > 0)
+            nf += rc;
+        /* Clone enum table in order to allow modifying it */
+        if (rc >= 1)
+        {
+            sel_parm->enum_table = _api_cli_clone_enum_table(sel_parm);
+            if (!sel_parm->enum_table)
+            {
+                rc = BCM_ERR_NOMEM;
+            }
+        }
+
+        /* Now set-up selector */
+        sel_parm->flags |= BCMCLI_PARM_FLAG_SELECTOR;
+        sel_data = sel_parm->user_data;
+        e = sel_parm->enum_table;
+        while (e && e->name && rc >= 0)
+        {
+            fld = &td->x.u.union_fields[e - sel_parm->enum_table];
+            if (fld->type)
+            {
+                int np = _api_cli_get_num_fields_in_type(fld->type);
+                int i;
+
+                e->parms = _api_cli_parm_alloc(np);
+                if (!e->parms)
+                {
+                    rc = BCM_ERR_NOMEM;
+                    break;
+                }
+                for (i = 0; i < np; i++)
+                {
+                    apicli_parm_data *data = e->parms[i].user_data;
+                    data->group = sel_data->group;
+                }
+                /* Collapse substructure name */
+                if (fld->type->base_type == BCMOLT_BASE_TYPE_ID_STRUCT ||
+                    fld->type->base_type == BCMOLT_BASE_TYPE_ID_UNION)
+                {
+                    bcmcli_strncpy(name_buf, name_buf0, sizeof(name_buf));
+                    bcmcli_strncpy(help_buf, help_buf0, sizeof(help_buf));
+                }
+                else
+                {
+                    _api_cli_populate_name_help(fld, name_buf0, help_buf0, name_buf, help_buf);
+                }
+                rc = _api_cli_populate_parms_from_property(pd, fld, array_fd,
+                    offset+fld->offset, array_fd_offset, e->parms, access_level, cmd_flags, name_buf, help_buf);
+            }
+            ++e;
+        }
+
+        /* Finally populate parameters following the selector parameter */
+        for (f = td->x.u.classifier_idx + 1; f < td->x.u.num_common_fields && rc >= 0; f++)
+        {
+            fld = &td->x.u.common_fields[f];
+            _api_cli_populate_name_help(fld, name_buf0, help_buf0, name_buf, help_buf);
+            rc = _api_cli_populate_parms_from_property(pd, fld, array_fd,
+                offset+fld->offset, array_fd_offset, &parms[nf], access_level, cmd_flags, name_buf, help_buf);
+            if (rc > 0)
+                nf += rc;
+        }
+    }
+    else
+    {
+        /* Finally! Simple type that maps to a single CLI parameter */
+        nf = _api_cli_populate_parm1(pd, fd, td, array_fd, offset, array_fd_offset,
+            &parms[0], cmd_flags, name_buf0, help_buf0);
+    }
+    return (rc >= 0) ? nf : rc;
+}
+
+/* populate CLI parameter table */
+static int _api_cli_populate_parms(
+    bcmolt_obj_id o,
+    bcmolt_mgt_group group,
+    uint16_t subgroup,
+    bcmolt_prop_access_id access_level,
+    bcmcli_cmd_parm *parms,
+    uint32_t cmd_flags,
+    const char *prefix)
+{
+    int nf = 0;
+    int i;
+    bcmos_errno rc = BCM_ERR_OK;
+
+    for (i = 0; rc != BCM_ERR_RANGE; i++)
+    {
+        const bcmcli_prop_descr *pd;
+        char name_buf[APICLI_MAX_PARM_NAME_LENGTH] = "";
+        char help_buf[APICLI_MAX_PARM_HELP_LENGTH] = "";
+
+        strncpy(name_buf, prefix, APICLI_MAX_PARM_NAME_LENGTH-1);
+        name_buf[APICLI_MAX_PARM_NAME_LENGTH-1] = 0;
+
+        rc = api_cli_object_property(o, group, subgroup, i, &pd);
+        if (rc == BCM_ERR_OK && (pd->access & access_level))
+        {
+            rc = _api_cli_populate_parms_from_property(pd, NULL, NULL, 0, 0, &parms[nf],
+                access_level, cmd_flags, name_buf, help_buf);
+            if (rc > 0)
+                nf += rc;
+        }
+    }
+    return nf;
+}
+
+
+/* compact selector table. squeeze out values that don't have parameter table attached */
+static void _api_cli_compact_selector(bcmcli_enum_val *selector, int size)
+{
+    int i, j;
+
+    for (i = 0; i < size; i++)
+    {
+        if (!selector[i].parms)
+        {
+            for ( j = i + 1; j < size && !selector[j].parms; j ++)
+                ;
+            if (j < size)
+            {
+                memcpy(&selector[i], &selector[j], sizeof(bcmcli_enum_val));
+                memset(&selector[j], 0, sizeof(bcmcli_enum_val));
+            }
+            else
+            {
+                memset(&selector[i], 0, sizeof(bcmcli_enum_val));
+            }
+        }
+    }
+}
+
+/* Free CLI parameters. both name and description are allocated dynamically */
+static void _api_cli_free_parms(bcmcli_cmd_parm *parms)
+{
+    bcmcli_cmd_parm *p = parms;
+
+    while (p->name)
+    {
+        if ((p->flags & BCMCLI_PARM_FLAG_SELECTOR))
+        {
+            /* Remove selector table */
+            bcmcli_enum_val *sel = p->enum_table;
+            if (sel)
+            {
+                bcmcli_enum_val *e = sel;
+                while(e->name)
+                {
+                    if (e->parms)
+                    {
+                        _api_cli_free_parms(e->parms);
+                    }
+                    ++e;
+                }
+                bcmos_free(sel);
+            }
+        }
+        if (p->description)
+            bcmos_free(APICLI_CAST_DISCARD_CONST(p->description, void *));
+        if (p->name)
+            bcmos_free(APICLI_CAST_DISCARD_CONST(p->name, void *));
+        if (p->max_array_size && p->values)
+            bcmos_free(p->values);
+        if (p->value.buffer.start)
+            bcmolt_buf_free(&p->value.buffer);
+
+        ++p;
+    }
+    bcmos_free(parms);
+}
+
+static uint8_t _apicli_get_num_cmd_parms(bcmolt_mgt_group group, api_cli_flags flags)
+{
+    if (group == BCMOLT_MGT_GROUP_STAT)
+        return 2; /* object + stat ID */
+    else if (group == BCMOLT_MGT_GROUP_CFG && (flags & API_CLI_FLAGS_MULTI) != API_CLI_FLAGS_NONE)
+        return 3; /* object + max msgs + invert flag */
+    else
+        return 1; /* object */
+}
+
+/* Read generated info and add CLI command */
+static bcmos_errno _api_cli_add(bcmcli_entry *dir, const char *cmd_name, const char *cmd_descr,
+    bcmolt_mgt_group group, bcmolt_prop_access_id access_level, bcmcli_cmd_cb cmd_handler, api_cli_flags flags)
+{
+    bcmcli_cmd_extra_parm cmd_extras = { .free_parms = _api_cli_free_parms };
+    bcmcli_cmd_parm *cmd_parms;
+    bcmcli_enum_val *obj_selector;
+    bcmolt_obj_id o;
+    bcmos_errno rc = BCM_ERR_OK;
+    uint32_t cmd_flags = 0;
+    uint8_t num_cmd_parms = _apicli_get_num_cmd_parms(group, flags);
+    int n_obj;
+    int i;
+
+    /* Command flags: parameters in the following groups are optional */
+    if (group == BCMOLT_MGT_GROUP_CFG || group == BCMOLT_MGT_GROUP_STAT || group == BCMOLT_MGT_GROUP_AUTO_CFG)
+        cmd_flags = BCMCLI_PARM_FLAG_OPTIONAL;
+
+    /* command parameters are:
+     * - object_name (selector)
+     * - object_key_fields
+     * - object_per_group_fields filtered by access
+     * Therefore, there is 1 top-level enum parameter (object type) with per-value parameter tables
+     * In the case of operations or proxy messages, there is also a top-level enum parameter for the oper/proxy name
+     */
+
+    /* Allocate enum table based on max number of objects. Will be compacted in the end */
+    cmd_parms = bcmos_calloc(sizeof(bcmcli_cmd_parm) * (num_cmd_parms + 1));
+    if (!cmd_parms)
+        return BCM_ERR_NOMEM;
+
+    /* Allocate enough space for all object entries as well as a terminator entry (which is left NULL) */
+    obj_selector = bcmos_calloc(sizeof(bcmcli_enum_val) * (BCMOLT_OBJ_ID__NUM_OF + 1));
+    if (!obj_selector)
+        goto nomem_cleanup;
+
+    /* Allocate parameter table */
+    n_obj = 0;
+    for (o = 0; o < BCMOLT_OBJ_ID__NUM_OF; o++)
+    {
+        uint32_t nkeyfields = 0;
+        uint32_t nfields = 0;
+        uint32_t nfilterfields = 0;
+        uint32_t size;
+        uint16_t s;
+        uint16_t subgroup_count = api_cli_get_subgroup_count(o, group);
+        bcmcli_enum_val *sub_selector;
+
+        if (!bcmolt_object_is_supported(current_system_mode, o) && o != BCMOLT_OBJ_ID_DEVICE)
+            continue;
+
+        if (subgroup_count == 0)
+            continue;
+
+        obj_selector[n_obj].val = o;
+        rc = api_cli_object_name(o, &obj_selector[n_obj].name, NULL);
+        if (rc)
+            continue;
+
+        /* Get number of key fields and save it */
+        if (group == BCMOLT_MGT_GROUP_AUTO_CFG)
+        {
+            nkeyfields = 0;
+        }
+        else
+        {
+            _api_cli_get_num_fields_in_group(o, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_PROP_ACCESS_ID_W, &nkeyfields);
+        }
+
+        /* Allocate subgroup enum table */
+        sub_selector = bcmos_calloc(sizeof(bcmcli_enum_val) * (subgroup_count + 1));
+        if (!sub_selector)
+            goto nomem_cleanup;
+
+        /* Allocate single subgroup command parameter */
+        size = sizeof(bcmcli_cmd_parm) * 2;
+        obj_selector[n_obj].parms = bcmos_calloc(size);
+        if (!obj_selector[n_obj].parms)
+        {
+            bcmos_free(sub_selector);
+            goto nomem_cleanup;
+        }
+
+        /* Setup single subgroup command parameter */
+        obj_selector[n_obj].parms[0].type = BCMCLI_PARM_ENUM;
+        obj_selector[n_obj].parms[0].flags = BCMCLI_PARM_FLAG_SELECTOR;
+        obj_selector[n_obj].parms[0].enum_table = sub_selector;
+        rc = _api_cli_copy_parm_name(&obj_selector[n_obj].parms[0],
+                                 "sub",
+                                 "Subgroup (specific operation / proxy msg)");
+        if (rc)
+            goto nomem_cleanup;
+
+        for (s = 0; s < subgroup_count; ++s)
+        {
+            const char *sub_name;
+            bcmcli_cmd_parm *parm_ptr;
+
+            /* Get name of specific subgroup */
+            rc = api_cli_object_subgroup_name(o, group, s, &sub_name, NULL);
+            if (rc)
+                continue;
+
+            /* Setup entry in subgroup enum table */
+            sub_selector[s].name = sub_name;
+            sub_selector[s].val = s;
+
+            /* Get number of group fields */
+            rc = _api_cli_get_num_fields_in_group(o, group, s, access_level, &nfields);
+            if (rc)
+                continue;
+
+            /* For multi-object GET messages, populate the filter fields just like a SET (except that all read-only
+               fields are also settable) */
+            if ((flags & API_CLI_FLAGS_MULTI) != API_CLI_FLAGS_NONE)
+            {
+                rc = _api_cli_get_num_fields_in_group(o, group, s, BCMOLT_PROP_ACCESS_ID_RW, &nfilterfields);
+                if (rc)
+                    continue;
+            }
+
+
+            if ((flags & API_CLI_FLAGS_IGNORE_FIELDS) != API_CLI_FLAGS_NONE)
+            {
+                nfilterfields = 0;
+                nfields = 0;
+            }
+
+
+            /* Allocate parameter table and populate it */
+            sub_selector[s].parms = _api_cli_parm_alloc(nfields + nkeyfields + nfilterfields);
+            if (!sub_selector[s].parms)
+            {
+                rc = BCM_ERR_NOMEM;
+                goto nomem_cleanup;
+            }
+            for (i = 0; i < nkeyfields + nfields + nfilterfields; i++)
+            {
+                apicli_parm_data *parm_data = sub_selector[s].parms[i].user_data;
+                parm_data->group = (i < nkeyfields) ? BCMOLT_MGT_GROUP_KEY : group;
+            }
+
+            parm_ptr = sub_selector[s].parms;
+            if (nkeyfields)
+            {
+                rc = _api_cli_populate_parms(o, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_PROP_ACCESS_ID_W, parm_ptr, 0, "");
+                if (rc < 0)
+                    goto nomem_cleanup;
+                parm_ptr += rc;
+            }
+            if (nfilterfields)
+            {
+                rc = _api_cli_populate_parms(o, group, s, BCMOLT_PROP_ACCESS_ID_RW, parm_ptr, cmd_flags, "filter.");
+                if (rc < 0)
+                    goto nomem_cleanup;
+                parm_ptr += rc;
+            }
+            if (nfields)
+            {
+                rc = _api_cli_populate_parms(o, group, s, access_level, parm_ptr, cmd_flags, "");
+                if (rc < 0)
+                    goto nomem_cleanup;
+                parm_ptr += rc;
+            }
+        }
+
+        /* Compact sub_selector enum. Removes holes (values without parameter table) */
+        _api_cli_compact_selector(sub_selector, subgroup_count);
+
+        /* If the group type doesn't support subgroups, remove the subgroup param entry */
+        if (group == BCMOLT_MGT_GROUP_CFG || group == BCMOLT_MGT_GROUP_STAT || group == BCMOLT_MGT_GROUP_AUTO_CFG)
+        {
+            /* Free the memory associated with the (single) subgroup param */
+            bcmos_free(APICLI_CAST_DISCARD_CONST(obj_selector[n_obj].parms[0].name, void *));
+            bcmos_free(APICLI_CAST_DISCARD_CONST(obj_selector[n_obj].parms[0].description, void *));
+            bcmos_free(obj_selector[n_obj].parms);
+            /* Assign the subgroup params to the root object params */
+            obj_selector[n_obj].parms = sub_selector[0].parms;
+            bcmos_free(sub_selector);
+        }
+
+        ++n_obj; /* number of configured objects */
+    }
+
+    /* Compact obj_selector enum. Removes holes (values without parameter table) */
+    _api_cli_compact_selector(obj_selector, BCMOLT_OBJ_ID__NUM_OF);
+
+    /* Add a 'clear on read' to stats group */
+    if (group == BCMOLT_MGT_GROUP_STAT)
+    {
+        cmd_parms[0].type = BCMCLI_PARM_ENUM;
+        cmd_parms[0].enum_table = bool_enum;
+        rc = _api_cli_copy_parm_name(&cmd_parms[0], "clear", "clear on read");
+        if (rc)
+            goto nomem_cleanup;
+    }
+
+    /* Add 'max number of messages to read' and 'invert filter' to cfg get_multi msgs */
+    if (group == BCMOLT_MGT_GROUP_CFG && (flags & API_CLI_FLAGS_MULTI) != API_CLI_FLAGS_NONE)
+    {
+        cmd_parms[0].type = BCMCLI_PARM_UNUMBER;
+        rc = _api_cli_copy_parm_name(&cmd_parms[0], "max_msgs", "max number of API GET messages to receive per call");
+        if (rc)
+            goto nomem_cleanup;
+
+        cmd_parms[1].type = BCMCLI_PARM_ENUM;
+        cmd_parms[1].enum_table = bool_enum;
+        rc = _api_cli_copy_parm_name(&cmd_parms[1], "filter_invert", "invert filter (select objects that don't match)");
+        if (rc)
+            goto nomem_cleanup;
+    }
+
+    /* We are ready to add this command */
+    cmd_parms[num_cmd_parms - 1].type = BCMCLI_PARM_ENUM;
+    cmd_parms[num_cmd_parms - 1].flags = BCMCLI_PARM_FLAG_SELECTOR;
+    cmd_parms[num_cmd_parms - 1].enum_table = obj_selector;
+    rc = _api_cli_copy_parm_name(&cmd_parms[num_cmd_parms - 1], "object", "Object Type");
+    if (rc)
+        goto nomem_cleanup;
+    rc = bcmcli_cmd_add(dir, cmd_name, cmd_handler, cmd_descr,
+        (access_level == BCMOLT_PROP_ACCESS_ID_W) ? BCMCLI_ACCESS_ADMIN : BCMCLI_ACCESS_GUEST,
+        &cmd_extras, cmd_parms);
+    if (rc)
+        goto nomem_cleanup;
+    return 0;
+
+nomem_cleanup:
+    if (obj_selector)
+    {
+        for (o = 0; o < BCMOLT_OBJ_ID__NUM_OF; o++)
+        {
+            if (obj_selector[o].parms)
+                _api_cli_free_parms(obj_selector[o].parms);
+        }
+        bcmos_free(obj_selector);
+    }
+    bcmos_free(cmd_parms);
+    return rc;
+}
+
+#ifdef BCM_SUBSYSTEM_HOST
+
+/* Current device change indication */
+static void _api_cli_device_change_ind(bcmcli_session *session, bcmolt_devid dev)
+{
+    api_cli_set_commands(session);
+}
+
+#ifdef LINUX_USER_SPACE
+
+static bcmcli_session *_apicli_log;
+static FILE *_apicli_log_file;
+
+static int _apicli_log_write_cb(bcmcli_session *session, const char *buf, uint32_t size)
+{
+    if (_apicli_log_file == NULL || buf == NULL)
+        return BCM_ERR_INTERNAL;
+    fwrite(buf, 1, size, _apicli_log_file);
+    fflush(_apicli_log_file);
+    return BCM_ERR_OK;
+}
+
+/* Enable/disable API logging
+ *       BCMCLI_MAKE_PARM("file", "Log file. Use \"-\" to disable logging", BCMCLI_PARM_STRING, 0));
+ */
+static bcmos_errno _apicli_log_handler(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    const char *fname = parm[0].value.string;
+    bcmcli_session_parm session_params =
+    {
+        .write = _apicli_log_write_cb,
+        .name = "api_log"
+    };
+    bcmos_errno rc;
+    time_t start_time;
+
+    /* Close existing log session if any */
+    if (_apicli_log)
+    {
+        bcmcli_log_set(BCMCLI_LOG_NONE, NULL);
+        bcmcli_session_close(_apicli_log);
+        fclose(_apicli_log_file);
+        _apicli_log = NULL;
+        _apicli_log_file = NULL;
+    }
+
+    if (!strcmp(fname, "-"))
+        return BCM_ERR_OK;
+
+    /* Starting a new log session */
+    _apicli_log_file = fopen(fname, "a");
+    if (_apicli_log_file == NULL)
+    {
+        bcmcli_print(session, "Can't open file %s for logging\n", fname);
+        return BCM_ERR_PARM;
+    }
+    rc = bcmcli_session_open_user(&session_params, &_apicli_log);
+    if (rc)
+    {
+        fclose(_apicli_log_file);
+        _apicli_log_file = NULL;
+        bcmcli_print(session, "Can't open log session. Error %s\n", bcmos_strerror(rc));
+        return rc;
+    }
+    time(&start_time);
+    bcmcli_log_set(BCMCLI_LOG_C_COMMENT, _apicli_log);
+    bcmcli_log("/* API logging session started. %s */\n", ctime(&start_time));
+    return BCM_ERR_OK;
+}
+#endif /* #ifdef LINUX_USER_SPACE */
+
+#endif /* #ifdef BCM_SUBSYSTEM_HOST */
+
+static void api_cli_find_del_cmd(bcmcli_entry *dir, const char *cmd_name)
+{
+    bcmcli_entry *cmd;
+    cmd = bcmcli_cmd_find(dir, cmd_name);
+    if (cmd)
+    {
+        bcmcli_token_destroy(cmd);
+    }
+}
+
+/* Unregisters commands and directories */
+static void api_cli_del_commands(bcmcli_session *session)
+{
+    bcmcli_entry *dir;
+
+    dir = bcmcli_dir_find(api_parent_dir, "api");
+    if (!dir)
+    {
+        return;
+    }
+    api_cli_find_del_cmd(dir, "set");
+    api_cli_find_del_cmd(dir, "get");
+    api_cli_find_del_cmd(dir, "multiget");
+    api_cli_find_del_cmd(dir, "clear");
+    api_cli_find_del_cmd(dir, "modify");
+    api_cli_find_del_cmd(dir, "stat");
+    api_cli_find_del_cmd(dir, "oper");
+    api_cli_find_del_cmd(dir, "send");
+    api_cli_find_del_cmd(dir, "saset");
+    api_cli_find_del_cmd(dir, "saget");
+    api_cli_find_del_cmd(dir, "acset");
+    api_cli_find_del_cmd(dir, "acget");
+    api_cli_find_del_cmd(dir, "objects");
+#ifdef BCM_SUBSYSTEM_HOST
+    api_cli_find_del_cmd(dir, "log");
+#endif
+}
+
+/* Registers commands and directories */
+static bcmos_errno api_cli_add_commands(bcmcli_session *session)
+{
+    bcmcli_entry *api_dir;
+    bcmos_errno rc;
+
+    if ((api_dir = bcmcli_dir_find(api_parent_dir, "api")) == NULL)
+    {
+        api_dir = bcmcli_dir_add(api_parent_dir, "api", "Maple API", BCMCLI_ACCESS_GUEST, NULL);
+        if (api_dir == NULL)
+        {
+            bcmcli_session_print(session, "Can't create api directory\n");
+            return BCM_ERR_INTERNAL;
+        }
+    }
+
+    current_session = session;
+    bcmolt_system_mode_get(current_device, &current_system_mode);
+
+    /* Now generate and add commands */
+    rc = _api_cli_add(api_dir, "set", "Set object configuration", BCMOLT_MGT_GROUP_CFG,
+        BCMOLT_PROP_ACCESS_ID_W, _apicli_set_handler, API_CLI_FLAGS_NONE);
+    rc = rc ? rc : _api_cli_add(api_dir, "get", "Get object configuration", BCMOLT_MGT_GROUP_CFG,
+        BCMOLT_PROP_ACCESS_ID_R, _apicli_get_handler, API_CLI_FLAGS_NONE);
+    rc = rc ? rc : _api_cli_add(api_dir, "clear", "Clear object configuration", BCMOLT_MGT_GROUP_CFG,
+        BCMOLT_PROP_ACCESS_ID_R, _apicli_clear_handler, API_CLI_FLAGS_IGNORE_FIELDS);
+    rc = rc ? rc : _api_cli_add(api_dir, "stat", "Get statistics", BCMOLT_MGT_GROUP_STAT, BCMOLT_PROP_ACCESS_ID_R,
+        _apicli_stat_handler, API_CLI_FLAGS_NONE);
+    rc = rc ? rc : _api_cli_add(api_dir, "oper", "Initiate Operation", BCMOLT_MGT_GROUP_OPER,
+        BCMOLT_PROP_ACCESS_ID_W, _apicli_oper_handler, API_CLI_FLAGS_NONE);
+    rc = rc ? rc : _api_cli_add(api_dir, "send", "Send message to ONU", BCMOLT_MGT_GROUP_PROXY,
+        BCMOLT_PROP_ACCESS_ID_W, _apicli_send_handler, API_CLI_FLAGS_NONE);
+    rc = rc ? rc : _api_cli_add(api_dir, "saset", "Set statistic alarm configuration",
+        BCMOLT_MGT_GROUP_STAT_CFG, BCMOLT_PROP_ACCESS_ID_W, _apicli_stat_cfg_set_handler, API_CLI_FLAGS_NONE);
+    rc = rc ? rc : _api_cli_add(api_dir, "saget", "Get statistic alarm configuration",
+        BCMOLT_MGT_GROUP_STAT_CFG, BCMOLT_PROP_ACCESS_ID_R, _apicli_stat_cfg_get_handler, API_CLI_FLAGS_IGNORE_FIELDS);
+    rc = rc ? rc : _api_cli_add(api_dir, "acset", "Set autonomous message configuration",
+        BCMOLT_MGT_GROUP_AUTO_CFG, BCMOLT_PROP_ACCESS_ID_W, _apicli_auto_cfg_set_handler, API_CLI_FLAGS_NONE);
+    rc = rc ? rc : _api_cli_add(api_dir, "acget", "Get autonomous message configuration",
+        BCMOLT_MGT_GROUP_AUTO_CFG, BCMOLT_PROP_ACCESS_ID_R, _apicli_auto_cfg_get_handler, API_CLI_FLAGS_NONE);
+    rc = rc ? rc : _api_cli_add(api_dir, "multiget", "Get configuration for multiple objects",
+        BCMOLT_MGT_GROUP_CFG, BCMOLT_PROP_ACCESS_ID_R, _apicli_auto_cfg_get_multi_handler, API_CLI_FLAGS_MULTI);
+
+    /* List all system objects */
+    rc = rc ? rc : bcmcli_cmd_add(api_dir, "objects", _apicli_objects_handler,
+        "Object Types", BCMCLI_ACCESS_GUEST, NULL, NULL);
+
+#if defined(BCM_SUBSYSTEM_HOST) && defined(LINUX_USER_SPACE)
+    BCMCLI_MAKE_CMD(api_dir, "log", "Log API calls", _apicli_log_handler,
+        BCMCLI_MAKE_PARM("file", "Log file. Use \"-\" to disable logging", BCMCLI_PARM_STRING, 0));
+#endif
+
+    return rc;
+}
+
+/* Update API CLI commands for the current device */
+bcmos_errno api_cli_set_commands(bcmcli_session *session)
+{
+    bcmos_errno rc;
+    api_cli_del_commands(session);
+    rc = api_cli_add_commands(session);
+    return rc;
+}
+
+/* Init API CLI commands for the current device */
+bcmos_errno api_cli_init(bcmcli_entry *parent_dir, bcmcli_session *session)
+{
+    bcmos_errno rc;
+
+    api_parent_dir = parent_dir;
+
+    rc = api_cli_set_commands(session);
+
+#ifdef BCM_SUBSYSTEM_HOST
+    /* Subscribe for device change indication */
+    rc = rc ? rc : bcmolt_dev_sel_ind_register(_api_cli_device_change_ind);
+#endif
+
+    return rc;
+}
diff --git a/bcm68620_release/release/host_reference/api_cli/bcm_api_cli.h b/bcm68620_release/release/host_reference/api_cli/bcm_api_cli.h
new file mode 100644
index 0000000..e29df57
--- /dev/null
+++ b/bcm68620_release/release/host_reference/api_cli/bcm_api_cli.h
@@ -0,0 +1,49 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef MAPLE_CLI_API_H_
+#define MAPLE_CLI_API_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <bcmolt_msg.h>
+
+/* Initialize API CLI */
+bcmos_errno api_cli_init(bcmcli_entry *parent_dir, bcmcli_session *session);
+
+/* Update API CLI commands for the current device */
+bcmos_errno api_cli_set_commands(bcmcli_session *session);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* MAPLE_CLI_API_H_ */
diff --git a/bcm68620_release/release/host_reference/api_cli/bcm_api_cli_dump.c b/bcm68620_release/release/host_reference/api_cli/bcm_api_cli_dump.c
new file mode 100644
index 0000000..a96db26
--- /dev/null
+++ b/bcm68620_release/release/host_reference/api_cli/bcm_api_cli_dump.c
@@ -0,0 +1,954 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#include <bcmos_system.h>
+#include <bcmolt_msg.h>
+#include <bcmcli.h>
+
+#include "bcm_api_cli_helpers.h"
+
+typedef enum
+{
+    APICLI_OUTPUT_STYLE_STD,
+    APICLI_OUTPUT_STYLE_C_INIT
+} apicli_output_style;
+
+typedef struct
+{
+    const bcmcli_type_descr *type;
+    void *data;
+    uint8_t bit;
+} apicli_presence_mask_info;
+
+static bcmos_errno _apicli_dump_array(
+    bcmcli_session *session,
+    const bcmcli_type_descr *td,
+    void *data,
+    uint32_t size,
+    const char *name,
+    apicli_output_style style,
+    const apicli_presence_mask_info *presence_mask,
+    const char *prefix,
+    const char *suffix);
+
+static bcmos_errno _apicli_read_snum(bcmcli_session *session, const bcmcli_type_descr *td, void *data, int64_t *n)
+{
+    switch (td->size)
+    {
+    case 1:
+    {
+        int8_t n1 = *(int8_t *)data;
+        *n = n1;
+        break;
+    }
+    case 2:
+    {
+        int16_t n2 = *(int16_t *)data;
+        *n = n2;
+        break;
+    }
+    case 4:
+    {
+        int32_t n4 = *(int32_t *)data;
+        *n = n4;
+        break;
+    }
+    case 8:
+    {
+        memcpy(n, data, sizeof(*n));
+        break;
+    }
+    default:
+        bcmcli_print(session, "*** number size %u is not supported\n", td->size);
+        return BCM_ERR_NOT_SUPPORTED;
+    }
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno _apicli_read_unum(bcmcli_session *session, const bcmcli_type_descr *td, void *data, uint64_t *n)
+{
+    switch (td->size)
+    {
+    case 1:
+    {
+        uint8_t n1 = *(uint8_t *)data;
+        *n = n1;
+        break;
+    }
+    case 2:
+    {
+        uint16_t n2 = *(uint16_t *)data;
+        *n = n2;
+        break;
+    }
+    case 4:
+    {
+        uint32_t n4 = *(uint32_t *)data;
+        *n = n4;
+        break;
+    }
+    case 8:
+    {
+        memcpy(n, data, sizeof(*n));
+        break;
+    }
+    default:
+        bcmcli_print(session, "*** number size %u is not supported\n", td->size);
+        return BCM_ERR_NOT_SUPPORTED;
+    }
+    return BCM_ERR_OK;
+}
+
+static void _apicli_strcat_upper(char *dest, uint32_t dest_len, const char *src, uint32_t src_len)
+{
+    uint32_t src_idx;
+    uint32_t dest_idx;
+
+    for (dest_idx = 0; dest_idx < dest_len - 1; ++dest_idx)
+    {
+        if (dest[dest_idx] == '\0')
+        {
+            break;
+        }
+    }
+
+    for (src_idx = 0; src_idx < src_len && dest_idx < dest_len - 1; ++src_idx, ++dest_idx)
+    {
+        dest[dest_idx] = src[src_idx];
+        if (dest[dest_idx] >= 'a' && dest[dest_idx] <= 'z')
+        {
+            dest[dest_idx] = 'A' + (dest[dest_idx] - 'a');
+        }
+    }
+
+    dest[dest_idx] = '\0';
+}
+
+static const char *_apicli_get_c_enum_id(const bcmcli_type_descr *td, const char *name)
+{
+    static char full_name_buf[256];
+    full_name_buf[0] = '\0';
+    _apicli_strcat_upper(full_name_buf, sizeof(full_name_buf), td->name, strlen(td->name));
+    _apicli_strcat_upper(full_name_buf, sizeof(full_name_buf), "_", 1);
+    _apicli_strcat_upper(full_name_buf, sizeof(full_name_buf), name, strlen(name));
+    return full_name_buf;
+}
+
+static bcmos_errno _apicli_dump_simple_data_type(
+    bcmcli_session *session,
+    const bcmcli_type_descr *td,
+    void *data,
+    const char *name,
+    apicli_output_style style)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+
+    switch (td->base_type)
+    {
+    case BCMOLT_BASE_TYPE_ID_SNUM:       /* signed number */
+    {
+        int64_t n = 0;
+        rc = _apicli_read_snum(session, td, data, &n);
+        bcmcli_print(session, "%lld", (long long)n);
+        break;
+    }
+
+    case BCMOLT_BASE_TYPE_ID_UNUM:       /* unsigned number */
+    {
+        uint64_t n = 0;
+        rc = _apicli_read_unum(session, td, data, &n);
+        bcmcli_print(session, "%llu", (unsigned long long)n);
+        break;
+    }
+
+    case BCMOLT_BASE_TYPE_ID_UNUM_HEX:   /* unsigned number printed in hex */
+    {
+        uint64_t n = 0;
+        rc = _apicli_read_unum(session, td, data, &n);
+        bcmcli_print(session, "0x%llx", (unsigned long long)n);
+        break;
+    }
+
+    case BCMOLT_BASE_TYPE_ID_FLOAT:      /* floating-point number */
+    {
+        if (td->size == sizeof(float))
+        {
+            bcmcli_print(session, "%f", *(float *)data);
+        }
+        else if (td->size == sizeof(double))
+        {
+            bcmcli_print(session, "%f", *(double *)data);
+        }
+        else
+        {
+            bcmcli_print(session, "*** floating-point number of width %u is not supported\n", td->size);
+            rc = BCM_ERR_NOT_SUPPORTED;
+        }
+        break;
+    }
+
+    case BCMOLT_BASE_TYPE_ID_BOOL:
+    {
+        const char *no_str = style == APICLI_OUTPUT_STYLE_C_INIT ? "BCMOS_FALSE" : "no";
+        const char *yes_str = style == APICLI_OUTPUT_STYLE_C_INIT ? "BCMOS_TRUE" : "yes";
+        uint64_t n = 0;
+        rc = _apicli_read_unum(session, td, data, &n);
+        bcmcli_print(session, "%s", n == 0 ? no_str : yes_str);
+        break;
+    }
+
+    case BCMOLT_BASE_TYPE_ID_STRING:     /* string */
+    {
+        if (td->size == 0)
+        {
+            bcmcli_print(session, "\"%s\"", (char *)data);
+        }
+        else
+        {
+            /* we know the size of the buffer */
+            bcmcli_print(session, "\"%.*s\"", td->size, (char *)data);
+        }
+        break;
+    }
+
+    case BCMOLT_BASE_TYPE_ID_IPV4:       /* IPv4 address */
+    {
+        uint32_t ip;
+        memcpy(&ip, data, sizeof(ip));
+        bcmcli_print(
+            session,
+            style == APICLI_OUTPUT_STYLE_C_INIT ? "{ %d,%d,%d,%d }" : "%d.%d.%d.%d",
+            (ip >> 24) & 0xff, (ip >> 16) & 0xff, (ip >> 8) & 0xff, ip & 0xff);
+        break;
+    }
+
+    case BCMOLT_BASE_TYPE_ID_MAC:        /* MAC address */
+    {
+        bcmos_mac_address mac;
+        memcpy(mac.u8, data, sizeof(mac.u8));
+        bcmcli_print(
+            session,
+            style == APICLI_OUTPUT_STYLE_C_INIT ?
+                "{{ 0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x }}" :
+                "%02x:%02x:%02x:%02x:%02x:%02x",
+            mac.u8[0], mac.u8[1], mac.u8[2], mac.u8[3], mac.u8[4], mac.u8[5]);
+        break;
+    }
+
+    case BCMOLT_BASE_TYPE_ID_ENUM:       /* enum */
+    {
+        uint64_t n = 0;
+        const char *s;
+        rc = _apicli_read_unum(session, td, data, &n);
+        BUG_ON(td->x.e == NULL);
+        s = bcmcli_enum_stringval(td->x.e, (long)n);
+        if (style == APICLI_OUTPUT_STYLE_C_INIT)
+        {
+            s = _apicli_get_c_enum_id(td, s);
+        }
+        bcmcli_print(session, "%s", s);
+        break;
+    }
+
+    case BCMOLT_BASE_TYPE_ID_ENUM_MASK:
+    {
+        uint64_t n = 0;
+        const char *s;
+        const char *none = NULL;
+        bcmcli_enum_val *value = td->x.e;
+        bcmos_bool first = BCMOS_TRUE;
+        BUG_ON(value == NULL);
+        rc = _apicli_read_unum(session, td, data, &n);
+        while (value->name != NULL)
+        {
+            if (value->val == 0)
+            {
+                none = value->name;
+            }
+            if ((value->val & n) != 0)
+            {
+                s = value->name;
+                if (style == APICLI_OUTPUT_STYLE_C_INIT)
+                {
+                    s = _apicli_get_c_enum_id(td, s);
+                }
+                bcmcli_print(session, "%s%s", first ? "" : (style == APICLI_OUTPUT_STYLE_C_INIT ? "|" : BCMCLI_ENUM_MASK_DEL_STR), s);
+                first = BCMOS_FALSE;
+                n -= value->val;
+            }
+            ++value;
+        }
+        if (first)
+        {
+            bcmcli_print(session, "%s", (style == APICLI_OUTPUT_STYLE_C_INIT) || (NULL == none) ? "0" : none);
+        }
+        break;
+    }
+
+    default:
+        bcmcli_print(session, "*** type %d is not supported\n", (int)td->base_type);
+        rc = BCM_ERR_NOT_SUPPORTED;
+        break;
+    }
+    return rc;
+}
+
+
+/* calculate number of enum values */
+static int _api_cli_get_num_enum_vals(const bcmcli_enum_val *vals)
+{
+    const bcmcli_enum_val *v = vals;
+    while (v && v->name)
+    {
+        ++v;
+    }
+    return (v - vals);
+}
+
+/* helper function to skip the "u." in front of union field names */
+static inline const char *_apicli_skip_union_prefix(const char *name)
+{
+    if (name[0] == 'u' && name[1] == '.')
+    {
+        name += 2;
+    }
+    return name;
+}
+
+static bcmos_bool _apicli_is_value_set(bcmcli_session *session, const apicli_presence_mask_info *presence_mask)
+{
+    uint64_t pm_value_num = 0;
+    if (!presence_mask || !presence_mask->type)
+    {
+        /* no presence mask - all values are implicitly set */
+        return BCMOS_TRUE;
+    }
+    _apicli_read_unum(session, presence_mask->type, presence_mask->data, &pm_value_num);
+    return ((pm_value_num >> presence_mask->bit) & 1) != 0;
+}
+
+static bcmos_errno _apicli_arr_dyn_len_get(const bcmcli_type_descr *td, void *data, uint32_t *array_size)
+{
+    switch (td->x.arr_dyn.len_size)
+    {
+    case 1: *array_size = *(uint8_t *)data; break;
+    case 2: *array_size = *(uint16_t *)data; break;
+    case 4: *array_size = *(uint32_t *)data; break;
+    default: return BCM_ERR_NOT_SUPPORTED;
+    }
+
+    return BCM_ERR_OK;
+}
+
+static void *_apicli_arr_dyn_data_get(const bcmcli_type_descr *td, void *data)
+{
+    return *(void**)BCMOS_ROUND_UP((long)data + td->x.arr_dyn.len_size, sizeof(void *));
+}
+
+/* Dump data type */
+static bcmos_errno _apicli_dump_data_type(
+    bcmcli_session *session,
+    const bcmcli_type_descr *td,
+    void *data,
+    const char *name,
+    uint32_t num_entries,
+    uint32_t entry_size,
+    apicli_output_style style,
+    const apicli_presence_mask_info *presence_mask,
+    const char *prefix,
+    const char *suffix)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+
+    switch (td->base_type)
+    {
+        case BCMOLT_BASE_TYPE_ID_STRUCT:
+        {
+            uint16_t f;
+            char full_name[APICLI_MAX_PARM_NAME_LENGTH];
+            if (!td->x.s.num_fields)
+                return 0;
+            BUG_ON(!td->x.s.fields);
+            if (style == APICLI_OUTPUT_STYLE_C_INIT)
+            {
+                bcmcli_print(session, "{ ");
+            }
+            for (f = 0; f < td->x.s.num_fields; f++)
+            {
+                const bcmcli_field_descr *fld = &td->x.s.fields[f];
+                void *fdata = (void *)((long)data + fld->offset);
+                apicli_presence_mask_info field_pm = {};
+                if (((td->x.s.fields[0].flags & BCMCLI_FIELD_DESCR_FLAGS_PRESENCE_MASK) != 0) &&
+                    style != APICLI_OUTPUT_STYLE_C_INIT)
+                {
+                    /* If the struct has a presence mask, skip the presence mask field itself, then record the position
+                     * of the presence mask so we can check it later for each entry. */
+                    if (f == 0)
+                    {
+                        continue;
+                    }
+
+                    field_pm.type = td->x.s.fields[0].type;
+                    field_pm.data = (uint8_t *)data + td->x.s.fields[0].offset;
+                    field_pm.bit = (uint8_t)(f - 1);
+                }
+                if (style == APICLI_OUTPUT_STYLE_C_INIT && f > 0)
+                {
+                    bcmcli_print(session, ", ");
+                }
+                bcmcli_strncpy(full_name, name, sizeof(full_name));
+                bcmcli_strncat(full_name, ".", sizeof(full_name));
+                bcmcli_strncat(full_name, fld->name, sizeof(full_name));
+                rc = _apicli_dump_data_type(session, fld->type, fdata, full_name, num_entries, entry_size, style, &field_pm, prefix, suffix);
+            }
+            if (style == APICLI_OUTPUT_STYLE_C_INIT)
+            {
+                bcmcli_print(session, " }");
+            }
+            break;
+        }
+
+        case BCMOLT_BASE_TYPE_ID_UNION:
+        {
+            /* Print fields up to selector, then selector, then selected sub-structure */
+            uint16_t f;
+            char full_name[APICLI_MAX_PARM_NAME_LENGTH];
+            const bcmcli_field_descr *fld;
+            void *fdata;
+            int64_t selector_val = 0;
+            int num_union_vals;
+
+            if (!td->x.u.num_common_fields)
+                return 0;
+            BUG_ON(!td->x.u.common_fields);
+            if (style == APICLI_OUTPUT_STYLE_C_INIT)
+            {
+                bcmcli_print(session, "{ ");
+            }
+            /* Common fields, including selector */
+            for (f = 0; f <= td->x.u.classifier_idx && !rc; f++)
+            {
+                fld = &td->x.u.common_fields[f];
+                fdata = (void *)((long)data + fld->offset);
+
+                bcmcli_strncpy(full_name, name, sizeof(full_name));
+                if (fld->name && strlen(fld->name))
+                {
+                    bcmcli_strncat(full_name, ".", sizeof(full_name));
+                    bcmcli_strncat(full_name, fld->name, sizeof(full_name));
+                }
+                rc = _apicli_dump_data_type(session, fld->type, fdata, full_name, num_entries, entry_size, style, presence_mask, prefix, suffix);
+                if (f == td->x.u.classifier_idx)
+                {
+                    rc = rc ? rc : _apicli_read_snum(session, fld->type, fdata, &selector_val);
+                }
+                if (style == APICLI_OUTPUT_STYLE_C_INIT)
+                {
+                    bcmcli_print(session, ", ");
+                }
+            }
+            if (rc)
+            {
+                bcmcli_print(session, "***internal error when dumping field %s\n",
+                    td->x.u.common_fields[f].name);
+                return rc;
+            }
+
+            num_union_vals = _api_cli_get_num_enum_vals(td->x.u.common_fields[td->x.u.classifier_idx].type->x.e);
+            if ((unsigned)selector_val >= num_union_vals)
+            {
+                bcmcli_print(session, "***invalid union selector value %lld\n", (long long)selector_val);
+                return BCM_ERR_INTERNAL;
+            }
+
+            /* Common fields following selector */
+            for (; f < td->x.u.num_common_fields; f++)
+            {
+                fld = &td->x.u.common_fields[f];
+                fdata = (void *)((long)data + fld->offset);
+
+                if (style == APICLI_OUTPUT_STYLE_C_INIT)
+                {
+                    bcmcli_print(session, ", ");
+                }
+                bcmcli_strncpy(full_name, name, sizeof(full_name));
+                if (fld->name && strlen(fld->name))
+                {
+                    bcmcli_strncat(full_name, ".", sizeof(full_name));
+                    bcmcli_strncat(full_name, fld->name, sizeof(full_name));
+                }
+                rc = _apicli_dump_data_type(session, fld->type, fdata, full_name, num_entries, entry_size, style, presence_mask, prefix, suffix);
+            }
+
+            /* Selected field */
+            fld = &td->x.u.union_fields[selector_val];
+            if (fld->type)
+            {
+                if (style == APICLI_OUTPUT_STYLE_C_INIT)
+                {
+                    bcmcli_print(session, "{ .%s = ", _apicli_skip_union_prefix(fld->name));
+                }
+                fdata = (void *)((long)data + fld->offset);
+
+                bcmcli_strncpy(full_name, name, sizeof(full_name));
+                if (fld->name && strlen(fld->name))
+                {
+                    bcmcli_strncat(full_name, ".", sizeof(full_name));
+                    bcmcli_strncat(full_name, fld->name, sizeof(full_name));
+                }
+                rc = _apicli_dump_data_type(session, fld->type, fdata, full_name, num_entries, entry_size, style, presence_mask, prefix, suffix);
+                if (style == APICLI_OUTPUT_STYLE_C_INIT)
+                {
+                    bcmcli_print(session, " }");
+                }
+            }
+            if (style == APICLI_OUTPUT_STYLE_C_INIT)
+            {
+                bcmcli_print(session, " }");
+            }
+            break;
+        }
+
+        case BCMOLT_BASE_TYPE_ID_ARR_FIXED: /* fixed array */
+        {
+            rc = _apicli_dump_array(session, td->x.arr_fixed.elem_type, data, td->x.arr_fixed.size, name, style, presence_mask, prefix, suffix);
+            break;
+        }
+
+        case BCMOLT_BASE_TYPE_ID_ARR_DYN:   /* dynamic array that should be printed as buffer */
+        {
+            /* Read length */
+            uint32_t array_size;
+
+            rc = _apicli_arr_dyn_len_get(td, data, &array_size);
+            if (BCM_ERR_OK != rc)
+            {
+                    bcmcli_print(session, "*** %s: dyn array len_size %u is not supported\n", name, td->x.arr_dyn.len_size);
+                return rc;
+            }
+
+            if (style == APICLI_OUTPUT_STYLE_C_INIT)
+            {
+                const char *field_name = strrchr(name, '.');
+                if (field_name == NULL)
+                {
+                    field_name = name;
+                }
+                else
+                {
+                    ++field_name;
+                }
+                bcmcli_print(session, "{ %u, %s }", array_size, field_name);
+            }
+            else
+            {
+            data = _apicli_arr_dyn_data_get(td, data);
+            rc = _apicli_dump_array(session, td->x.arr_dyn.elem_type, data, array_size, name, style, presence_mask, prefix, suffix);
+            }
+            break;
+        }
+
+        default:
+        {
+            /* Finally! Simple type that maps to a single CLI parameter */
+            int n;
+            apicli_presence_mask_info local_pm;
+
+            /* If we have a single value and that value is not included in the presence mask, just skip it entirely */
+            if (num_entries == 1 && !_apicli_is_value_set(session, presence_mask))
+            {
+                break;
+            }
+
+            if (style != APICLI_OUTPUT_STYLE_C_INIT)
+            {
+                if (name)
+                {
+                    bcmcli_print(session, "%s%s=", prefix, name);
+                }
+                if (!num_entries)
+                {
+                    bcmcli_print(session, BCMCLI_ARRAY_EMPTY);
+                }
+            }
+
+            /* Dump simple value or array of simple values */
+            local_pm = presence_mask ? *presence_mask : (apicli_presence_mask_info){};
+            for (n = 0; n < num_entries; n++)
+            {
+                if (n)
+                {
+                    bcmcli_print(session, ",");
+                }
+
+                /* If we have a presence mask, make sure to print a special token if the value is unset */
+                if (_apicli_is_value_set(session, &local_pm))
+                {
+                    rc = _apicli_dump_simple_data_type(session, td, data, name, style);
+                }
+                else
+                {
+                    bcmcli_print(session, BCMCLI_PARM_NO_VALUE);
+                }
+
+                data = (void *)((long)data + entry_size);
+                local_pm.data = (void *)((long)local_pm.data + entry_size);
+            }
+            bcmcli_print(session, "%s", suffix);
+            break;
+        }
+    }
+    return rc;
+}
+
+/* Dump array */
+static bcmos_errno _apicli_dump_array(
+    bcmcli_session *session,
+    const bcmcli_type_descr *td,
+    void *data,
+    uint32_t size,
+    const char *name,
+    apicli_output_style style,
+    const apicli_presence_mask_info *presence_mask,
+    const char *prefix,
+    const char *suffix)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+
+    /* Print as buffer or element by element ? */
+    if (style == APICLI_OUTPUT_STYLE_C_INIT)
+    {
+        bcmcli_print(session, "{ ");
+        rc = _apicli_dump_data_type(session, td, data, name, size, td->size, style, presence_mask, prefix, suffix);
+        bcmcli_print(session, " }");
+    }
+    else if ((td->base_type == BCMOLT_BASE_TYPE_ID_UNUM || td->base_type == BCMOLT_BASE_TYPE_ID_UNUM_HEX) && td->size == 1)
+    {
+        if (_apicli_is_value_set(session, presence_mask))
+        {
+            uint32_t i;
+
+            bcmcli_print(session, "%s%s=", prefix, name);
+            for (i = 0; i < size; ++i)
+            {
+                bcmcli_print(session, "%02x", ((uint8_t*)data)[i]);
+            }
+            bcmcli_print(session, "%s", suffix);
+        }
+    }
+    else
+    {
+        rc = _apicli_dump_data_type(session, td, data, name, size, td->size, style, presence_mask, prefix, suffix);
+    }
+    return rc;
+}
+
+/* Dump property */
+bcmos_errno apicli_dump_prop(bcmcli_session *session, const bcmcli_prop_descr *pd, void *prop_data)
+{
+    return _apicli_dump_data_type(session, pd->type, prop_data, pd->name, 1, 0, APICLI_OUTPUT_STYLE_STD, NULL, "   ", "\n");
+}
+
+/* Dump a single property value in C initializer format */
+bcmos_errno apicli_dump_prop_initializer(bcmcli_session *session, const bcmcli_prop_descr *pd, void *prop_data)
+{
+    return _apicli_dump_data_type(session, pd->type, prop_data, pd->name, 1, 0, APICLI_OUTPUT_STYLE_C_INIT, NULL, "", "");
+}
+
+bcmos_errno apicli_dump_dyn_array(
+    bcmcli_session *session,
+    const bcmcli_type_descr *td,
+    void *data,
+    const char *name)
+{
+    bcmos_errno rc;
+    uint32_t array_size;
+
+    rc = _apicli_arr_dyn_len_get(td, data, &array_size);
+    BCMOS_RETURN_IF_ERROR(rc);
+    return _apicli_dump_array(
+        session,
+        td->x.arr_dyn.elem_type,
+        _apicli_arr_dyn_data_get(td, data),
+        array_size,
+        name,
+        APICLI_OUTPUT_STYLE_C_INIT,
+        NULL,
+        "",
+        "");
+}
+
+/* Dump property as CLI parameters */
+bcmos_errno apicli_dump_prop_param(bcmcli_session *session, const bcmcli_prop_descr *pd, void *prop_data, const char *prefix)
+{
+    return _apicli_dump_data_type(session, pd->type, prop_data, pd->name, 1, 0, APICLI_OUTPUT_STYLE_STD, NULL, prefix, "");
+}
+
+/* Calculate property pointer given the group data pointer and property description */
+static inline void *_apicli_prop_data_ptr(void *group_ptr, const bcmcli_prop_descr *pd)
+{
+    return (void *)((long)group_ptr + pd->offset);
+}
+
+/* Dump object data */
+static bcmos_errno _apicli_dump_data(bcmcli_session *session, bcmolt_msg *msg, void *data, uint32_t data_size)
+{
+    uint16_t prop;
+    bcmos_errno rc = BCM_ERR_OK;
+    const bcmcli_prop_descr *pd;
+
+    bcmcli_print(session, "data:\n");
+    for (prop = 0;
+         api_cli_object_property(msg->obj_type, msg->group, msg->subgroup, prop, &pd) == BCM_ERR_OK;
+         ++prop)
+    {
+        void *prop_data = _apicli_prop_data_ptr(data, pd);
+        if (!(msg->presence_mask & (1LL << prop)))
+            continue;
+        if (!prop_data)
+        {
+            continue;
+        }
+        BUG_ON(pd->offset > data_size);
+        rc = apicli_dump_prop(session, pd, prop_data);
+        if (rc != BCM_ERR_OK)
+        {
+            break;
+        }
+    }
+    return rc;
+}
+
+/* Dump object key */
+static bcmos_errno _apicli_dump_key(bcmcli_session *session, bcmolt_msg *msg, void *key, uint32_t key_size)
+{
+    uint16_t prop;
+    bcmos_errno rc = BCM_ERR_OK;
+    const bcmcli_prop_descr *pd;
+
+    bcmcli_print(session, "key:\n");
+    for (prop = 0;
+         api_cli_object_property(msg->obj_type, BCMOLT_MGT_GROUP_KEY, 0, prop, &pd) == BCM_ERR_OK;
+         ++prop)
+    {
+        void *prop_data = _apicli_prop_data_ptr(key, pd);
+        if (!prop_data)
+        {
+            continue;
+        }
+        BUG_ON(pd->offset > key_size);
+        rc = apicli_dump_prop(session, pd, prop_data);
+        if (rc != BCM_ERR_OK)
+        {
+            break;
+        }
+    }
+    return rc;
+}
+
+const char *apicli_mgt_group_to_str(bcmolt_mgt_group group)
+{
+    static const char *str_table[BCMOLT_MGT_GROUP__NUM_OF] =
+    {
+        [BCMOLT_MGT_GROUP_KEY]      = "key",
+        [BCMOLT_MGT_GROUP_CFG]      = "cfg",
+        [BCMOLT_MGT_GROUP_STAT]     = "stat",
+        [BCMOLT_MGT_GROUP_STAT_CFG] = "stat_cfg",
+        [BCMOLT_MGT_GROUP_AUTO]     = "auto",
+        [BCMOLT_MGT_GROUP_AUTO_CFG] = "auto_cfg",
+        [BCMOLT_MGT_GROUP_OPER]     = "oper",
+        [BCMOLT_MGT_GROUP_PROXY]    = "proxy",
+        [BCMOLT_MGT_GROUP_PROXY_RX] = "proxy_rx"
+    };
+    return (group >= BCMOLT_MGT_GROUP__NUM_OF) ? "<unknown>" : str_table[group];
+}
+
+/* Dump message set returned by multi-object GET */
+static bcmos_errno _apicli_dump_msgset(
+    bcmcli_session *session,
+    bcmolt_msg *msg,
+    uint32_t key_size,
+    uint32_t data_size,
+    uint32_t data_offset)
+{
+    uint16_t inst;
+    bcmos_errno rc;
+    void *key = NULL;
+    void *data = NULL;
+
+    if (msg->msg_set == NULL)
+    {
+        return BCM_ERR_NULL;
+    }
+
+    bcmcli_print(session, "more: %s\n", msg->msg_set->more ? "yes" : "no");
+    if (msg->msg_set->more)
+    {
+        bcmcli_print(session, "next ");
+        _apicli_dump_key(session, msg, msg->msg_set->next_key, key_size);
+    }
+
+    bcmcli_print(session, "number of objects returned: %d\n", msg->msg_set->num_instances);
+    for (inst = 0; inst < msg->msg_set->num_instances; inst++)
+    {
+        bcmcli_print(session, "object %d:\n", inst);
+
+        key = (void *)((long)msg->msg_set->msg[inst] + sizeof(bcmolt_msg));
+        rc = _apicli_dump_key(session, msg->msg_set->msg[inst], key, key_size);
+        if (rc != BCM_ERR_OK)
+        {
+            return rc;
+        }
+
+        data = (void *)((long)msg->msg_set->msg[inst] + data_offset);
+        rc = _apicli_dump_data(session, msg->msg_set->msg[inst], data, data_size);
+        if (rc)
+        {
+            return rc;
+        }
+    }
+
+    return BCM_ERR_OK;
+}
+
+/* Dump message */
+bcmos_errno apicli_msg_dump(bcmcli_session *session, bcmolt_msg *msg)
+{
+    bcmos_errno rc;
+    const char *name, *descr;
+    uint32_t key_size;
+    uint32_t key_offset;
+    uint32_t data_size;
+    uint32_t data_offset;
+    void *key = NULL;
+    void *data = NULL;
+
+    rc = api_cli_object_name(msg->obj_type, &name, &descr);
+    if (rc)
+    {
+        goto dump_error;
+    }
+
+    bcmcli_print(session, "object: ");
+    if (name)
+    {
+        bcmcli_print(session, "%s", name);
+    }
+    if (descr)
+    {
+        bcmcli_print(session, " - %s", descr);
+    }
+    bcmcli_print(session, "\n");
+    rc = api_cli_object_struct_size(
+        msg->obj_type,
+        msg->group,
+        msg->subgroup,
+        &key_size,
+        &key_offset,
+        &data_size,
+        &data_offset);
+    if (rc)
+    {
+        goto dump_error;
+    }
+
+    bcmcli_print(session, (msg->type & BCMOLT_MSG_TYPE_GET) != 0 ? "get" : "set");
+    if ((msg->type & BCMOLT_MSG_TYPE_CLEAR) != 0)
+    {
+        bcmcli_print(session, ",clear");
+    }
+    if ((msg->type & BCMOLT_MSG_TYPE_MULTI) != 0)
+    {
+        bcmcli_print(session, ",multi");
+    }
+    bcmcli_print(session, " %s ", apicli_mgt_group_to_str(msg->group));
+
+    if (msg->group != BCMOLT_MGT_GROUP_CFG && msg->group != BCMOLT_MGT_GROUP_STAT &&
+        msg->group != BCMOLT_MGT_GROUP_AUTO_CFG && msg->group != BCMOLT_MGT_GROUP_STAT_CFG)
+    {
+        const char *sub_name, *sub_descr;
+        /* Get name of specific subgroup */
+        rc = api_cli_object_subgroup_name(msg->obj_type, msg->group, msg->subgroup, &sub_name, &sub_descr);
+        if (rc)
+        {
+            goto dump_error;
+        }
+        bcmcli_print(session, "subgroup: %s-%s ", sub_name ? sub_name : "?", sub_descr ? sub_descr : "");
+    }
+    if (msg->dir == BCMOLT_MSG_DIR_REQUEST)
+    {
+        bcmcli_print(session, "request\n");
+    }
+    else
+    {
+        bcmcli_print(session, "response: %s %s\n", bcmos_strerror(msg->err), msg->err_text);
+    }
+
+    if (msg->dir == BCMOLT_MSG_DIR_RESPONSE && (msg->type & BCMOLT_MSG_TYPE_MULTI) != 0)
+    {
+        rc = _apicli_dump_msgset(session, msg, key_size, data_size, data_offset);
+        if (rc)
+        {
+            goto dump_error;
+        }
+    }
+    else
+    {
+        if ((msg->group != BCMOLT_MGT_GROUP_AUTO_CFG) && key_size)
+        {
+            key = (void *)((long)msg + key_offset);
+            rc = _apicli_dump_key(session, msg, key, key_size);
+            if (rc)
+            {
+                goto dump_error;
+            }
+        }
+        if (data_size &&
+             (  ((msg->dir == BCMOLT_MSG_DIR_REQUEST) && (msg->type & BCMOLT_MSG_TYPE_SET))  ||
+                ((msg->dir == BCMOLT_MSG_DIR_RESPONSE) && (msg->type & BCMOLT_MSG_TYPE_GET)) ||
+                (msg->group == BCMOLT_MGT_GROUP_AUTO)                                        ||
+                (msg->group == BCMOLT_MGT_GROUP_PROXY_RX)
+             )
+           )
+        {
+            data = (void *)((long)msg + data_offset);
+            rc = _apicli_dump_data(session, msg, data, data_size);
+            if (rc)
+            {
+                goto dump_error;
+            }
+        }
+    }
+    return BCM_ERR_OK;
+
+dump_error:
+    bcmcli_print(session, "*** Object dump error %s (%d)\n", bcmos_strerror(rc), rc);
+    return rc;
+}
+
diff --git a/bcm68620_release/release/host_reference/api_cli/bcm_api_cli_handlers.c b/bcm68620_release/release/host_reference/api_cli/bcm_api_cli_handlers.c
new file mode 100644
index 0000000..ed9bfef
--- /dev/null
+++ b/bcm68620_release/release/host_reference/api_cli/bcm_api_cli_handlers.c
@@ -0,0 +1,67731 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+*/
+#include <bcmos_system.h>
+#include <bcmolt_api.h>
+#include <bcmcli.h>
+#include <bcmolt_model_types.h>
+#include <bcm_api_cli_helpers.h>
+#include "bcm_api_cli_handlers.h"
+
+bcmcli_session *apicli_cli_log_session = NULL;
+
+typedef struct
+{
+    uint8_t *start;
+    uint32_t used;
+    bcmolt_msg_set *msg_set;    /* used for multi-object get messages */
+} apicli_byte_pool;
+
+/* only store 1 message set at a time so it's easy to clean up after */
+static bcmos_errno apicli_byte_pool_create(apicli_byte_pool *buf)
+{
+    buf->used = 0;
+    buf->start = bcmos_calloc(APICLI_DYNAMIC_LIST_BUFFER_SIZE);
+    buf->msg_set = NULL;
+    return (buf->start == NULL) ? BCM_ERR_NOMEM : BCM_ERR_OK;
+}
+
+static void apicli_byte_pool_destroy(apicli_byte_pool *buf)
+{
+    if (buf->msg_set != NULL)
+    {
+        bcmolt_msg_set_free(buf->msg_set);
+    }
+
+    bcmos_free(buf->start);
+}
+
+static void *apicli_byte_pool_calloc(apicli_byte_pool *buf, uint32_t num_bytes)
+{
+    void *ret;
+    if (buf->used + num_bytes > APICLI_DYNAMIC_LIST_BUFFER_SIZE)
+    {
+        return NULL;
+    }
+
+    ret = buf->start + buf->used;
+    buf->used += num_bytes;
+    memset(ret, 0, num_bytes);
+    return ret;
+}
+
+static bcmos_errno apicli_msg_set_alloc(apicli_byte_pool *buf, bcmolt_obj_id obj, bcmolt_mgt_group group, uint32_t max_instances, bcmolt_msg_set **msg_set)
+{
+    bcmos_errno err;
+    if (buf->msg_set != NULL)
+    {
+        return BCM_ERR_NOMEM;   /* only one at a time */
+    }
+
+    err = bcmolt_msg_set_alloc(obj, group, max_instances, &buf->msg_set);
+    *msg_set = buf->msg_set;
+    return err;
+}
+
+/*
+ * Start/end banners - these are specially formatted so listening apps can easily tell where API handling starts/ends.
+ */
+static void apicli_print_start(bcmcli_session *session, const char *api_name)
+{
+    bcmcli_print(session, "[-- API Start: %s --]\n", api_name);
+}
+
+static void apicli_print_data_start(bcmcli_session *session)
+{
+    bcmcli_print(session, "[-- API Message Data --]\n");
+}
+
+static void apicli_print_complete(bcmcli_session *session, bcmos_errno err, const char *err_text)
+{
+    if (err != BCM_ERR_OK && err_text != NULL && err_text[0] != '\0')
+    {
+        bcmcli_print(session, "ERROR: %s", err_text);
+    }
+
+    bcmcli_print(session, "[-- API Complete: %d (%s) --]\n", err, bcmos_strerror(err));
+}
+
+static int apicli_cli_session_write_cb(bcmcli_session *cli_session, const char *buf, uint32_t size)
+{
+    bcmcli_log(buf, "%.*s", size, buf);
+    return (int)size;
+}
+
+/* Logs a property value to the CLI log in such a way that it is a valid RHS in an initializer.  For a primitve, this
+ * will just print the value (e.g. "42").  For a struct, it will emit all members in between curly braces. */
+static void apicli_log_prop_val(bcmolt_obj_id obj, bcmolt_mgt_group group, uint16_t subgroup, uint16_t prop, void *value)
+{
+    bcmos_errno err;
+    const bcmcli_prop_descr *prop_descr;
+
+    if (apicli_cli_log_session == NULL)
+    {
+        static bcmcli_session_parm session_params = { .write = apicli_cli_session_write_cb };
+
+        err = bcmcli_session_open(&session_params, &apicli_cli_log_session);
+        if (err != BCM_ERR_OK)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error opening session: %s", bcmos_strerror(err));
+            return;
+        }
+    }
+
+    err = api_cli_object_property(obj, group, subgroup, prop, &prop_descr);
+    if (err != BCM_ERR_OK)
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error getting info for property: %s", bcmos_strerror(err));
+        return;
+    }
+
+    err = apicli_dump_prop_initializer(apicli_cli_log_session, prop_descr, value);
+    if (err != BCM_ERR_OK)
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error printing property: %s", bcmos_strerror(err));
+    }
+}
+
+static bcmos_ipv4_address apicli_unumber_to_ipv4(uint32_t num)
+{
+    bcmos_ipv4_address ip;
+    ip.u32 = num;
+    return ip;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_ae_ni_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_ae_ni_cfg cfg;       /**< declare main API struct */
+    bcmolt_ae_ni_key key = { }; /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_ae_ni_cfg cfg;\n");
+    bcmcli_log("bcmolt_ae_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "ae_ni");
+    if (cli_parm != NULL)
+    {
+        key.ae_ni = (bcmolt_ae_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "ae_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.ae_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_AE_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_AE_NI_KEY_ID_AE_NI, &key.ae_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, ae_ni, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, ae_ni, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "mac_address");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, ae_ni, mac_address);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, ae_ni, mac_address);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ae_ni_en");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, ae_ni, ae_ni_en);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, ae_ni, ae_ni_en);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mtu_10g");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, ae_ni, mtu_10g);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, ae_ni, mtu_10g);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "prbs_generator");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, ae_ni, prbs_generator);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, ae_ni, prbs_generator);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "prbs_checker");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, ae_ni, prbs_checker);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, ae_ni, prbs_checker);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "prbs_status");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, ae_ni, prbs_status);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, ae_ni, prbs_status);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_CFG_PROP_IS_SET(&cfg, ae_ni, mac_address) && !BCMOLT_CFG_PROP_IS_SET(&cfg, ae_ni, ae_ni_en) && !BCMOLT_CFG_PROP_IS_SET(&cfg, ae_ni, mtu_10g) && !BCMOLT_CFG_PROP_IS_SET(&cfg, ae_ni, prbs_generator) && !BCMOLT_CFG_PROP_IS_SET(&cfg, ae_ni, prbs_checker) && !BCMOLT_CFG_PROP_IS_SET(&cfg, ae_ni, prbs_status))
+    {
+        BCMOLT_CFG_PROP_GET(&cfg, ae_ni, all_properties);
+        bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, ae_ni, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_get(device_id, &cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_ae_ni_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_ae_ni_cfg cfg;       /**< declare main API struct */
+    bcmolt_ae_ni_key key = { }; /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_ae_ni_cfg cfg;\n");
+    bcmcli_log("bcmolt_ae_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "ae_ni");
+    if (cli_parm != NULL)
+    {
+        key.ae_ni = (bcmolt_ae_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "ae_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.ae_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_AE_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_AE_NI_KEY_ID_AE_NI, &key.ae_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, ae_ni, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, ae_ni, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "mac_address");
+    if (cli_parm != NULL)
+    {
+        bcmos_mac_address val;
+        val = cli_parm->value.mac;
+        BCMOLT_CFG_PROP_SET(&cfg, ae_ni, mac_address, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, ae_ni, mac_address, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_AE_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_AE_NI_CFG_ID_MAC_ADDRESS, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mtu_10g");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, ae_ni, mtu_10g, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, ae_ni, mtu_10g, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_AE_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_AE_NI_CFG_ID_MTU_10G, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "prbs_generator.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_prbs_generator_config val = { };
+        cli_parm = bcmcli_find_named_parm(session, "prbs_generator.polynom");
+        if (cli_parm != NULL)
+        {
+            val.polynom = (bcmolt_prbs_polynomial) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "prbs_generator.polynom is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "prbs_generator.error_insert");
+        if (cli_parm != NULL)
+        {
+            val.error_insert = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "prbs_generator.error_insert is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "prbs_generator.invert");
+        if (cli_parm != NULL)
+        {
+            val.invert = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "prbs_generator.invert is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "prbs_generator.control");
+        if (cli_parm != NULL)
+        {
+            val.control = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "prbs_generator.control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, ae_ni, prbs_generator, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_prbs_generator_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_AE_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_AE_NI_CFG_ID_PRBS_GENERATOR, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, ae_ni, prbs_generator, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "prbs_checker.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_prbs_checker_config val = { };
+        cli_parm = bcmcli_find_named_parm(session, "prbs_checker.polynom");
+        if (cli_parm != NULL)
+        {
+            val.polynom = (bcmolt_prbs_polynomial) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "prbs_checker.polynom is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "prbs_checker.mode");
+        if (cli_parm != NULL)
+        {
+            val.mode = (bcmolt_prbs_checker_mode) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "prbs_checker.mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "prbs_checker.data_invert");
+        if (cli_parm != NULL)
+        {
+            val.data_invert = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "prbs_checker.data_invert is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "prbs_checker.control");
+        if (cli_parm != NULL)
+        {
+            val.control = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "prbs_checker.control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, ae_ni, prbs_checker, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_prbs_checker_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_AE_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_AE_NI_CFG_ID_PRBS_CHECKER, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, ae_ni, prbs_checker, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_set(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_set(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_ae_ni_cfg_clear(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_ae_ni_cfg cfg;       /**< declare main API struct */
+    bcmolt_ae_ni_key key = { }; /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_ae_ni_cfg cfg;\n");
+    bcmcli_log("bcmolt_ae_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_clear");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "ae_ni");
+    if (cli_parm != NULL)
+    {
+        key.ae_ni = (bcmolt_ae_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "ae_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.ae_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_AE_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_AE_NI_KEY_ID_AE_NI, &key.ae_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, ae_ni, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, ae_ni, key);\n");
+
+    /* call API */
+    err = bcmolt_cfg_clear(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_clear(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_ae_ni_cfg_get_multi(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_ae_ni_cfg cfg;           /**< declare main API struct */
+    bcmolt_ae_ni_key key = { };     /**< declare key */
+    bcmolt_msg_set *msg_set = NULL; /**< declare message set */
+    uint32_t max_msgs;              /**< declare max number of msgs to get */
+    bcmos_bool invert_filter;       /**< declare filter invert flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_ae_ni_cfg cfg;\n");
+    bcmcli_log("bcmolt_ae_ni_key key = {  };\n");
+    bcmcli_log("bcmolt_msg_set* msg_set = NULL;\n");
+    bcmcli_log("uint32_t max_msgs;\n");
+    bcmcli_log("bcmos_bool invert_filter;\n");
+    apicli_print_start(session, "bcmolt_cfg_get_multi");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "ae_ni");
+    if (cli_parm != NULL)
+    {
+        key.ae_ni = (bcmolt_ae_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "ae_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.ae_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_AE_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_AE_NI_KEY_ID_AE_NI, &key.ae_ni);
+    bcmcli_log(";\n");
+
+    /* set max number of msgs from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "max_msgs");
+    if (cli_parm != NULL)
+    {
+        max_msgs = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "max_msgs is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("max_msgs = %d;\n", max_msgs);
+
+    /* set filter invert flag from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "filter_invert");
+    if (cli_parm != NULL)
+    {
+        invert_filter = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "filter_invert is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("invert_filter = %s;\n", (invert_filter) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* allocate message set */
+    err = apicli_msg_set_alloc(byte_pool, BCMOLT_OBJ_ID_AE_NI, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    bcmcli_log("bcmolt_msg_set_alloc(BCMOLT_OBJ_ID_AE_NI, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, ae_ni, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, ae_ni, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "filter.mac_address");
+    if (cli_parm != NULL)
+    {
+        bcmos_mac_address val;
+        val = cli_parm->value.mac;
+        BCMOLT_CFG_PROP_SET(&cfg, ae_ni, mac_address, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, ae_ni, mac_address, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_AE_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_AE_NI_CFG_ID_MAC_ADDRESS, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mac_address");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, ae_ni, mac_address);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, ae_ni, mac_address);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.ae_ni_en");
+    if (cli_parm != NULL)
+    {
+        bcmolt_ae_ni_en_state val;
+        val = (bcmolt_ae_ni_en_state) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, ae_ni, ae_ni_en, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, ae_ni, ae_ni_en, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_AE_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_AE_NI_CFG_ID_AE_NI_EN, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ae_ni_en");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, ae_ni, ae_ni_en);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, ae_ni, ae_ni_en);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.mtu_10g");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, ae_ni, mtu_10g, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, ae_ni, mtu_10g, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_AE_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_AE_NI_CFG_ID_MTU_10G, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mtu_10g");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, ae_ni, mtu_10g);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, ae_ni, mtu_10g);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.prbs_generator.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_prbs_generator_config val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_generator.polynom");
+        if (cli_parm != NULL)
+        {
+            val.polynom = (bcmolt_prbs_polynomial) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_generator.polynom is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_generator.error_insert");
+        if (cli_parm != NULL)
+        {
+            val.error_insert = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_generator.error_insert is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_generator.invert");
+        if (cli_parm != NULL)
+        {
+            val.invert = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_generator.invert is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_generator.control");
+        if (cli_parm != NULL)
+        {
+            val.control = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_generator.control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, ae_ni, prbs_generator, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_prbs_generator_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_AE_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_AE_NI_CFG_ID_PRBS_GENERATOR, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, ae_ni, prbs_generator, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "prbs_generator");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, ae_ni, prbs_generator);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, ae_ni, prbs_generator);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.prbs_checker.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_prbs_checker_config val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_checker.polynom");
+        if (cli_parm != NULL)
+        {
+            val.polynom = (bcmolt_prbs_polynomial) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_checker.polynom is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_checker.mode");
+        if (cli_parm != NULL)
+        {
+            val.mode = (bcmolt_prbs_checker_mode) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_checker.mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_checker.data_invert");
+        if (cli_parm != NULL)
+        {
+            val.data_invert = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_checker.data_invert is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_checker.control");
+        if (cli_parm != NULL)
+        {
+            val.control = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_checker.control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, ae_ni, prbs_checker, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_prbs_checker_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_AE_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_AE_NI_CFG_ID_PRBS_CHECKER, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, ae_ni, prbs_checker, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "prbs_checker");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, ae_ni, prbs_checker);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, ae_ni, prbs_checker);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.prbs_status.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_prbs_status val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_status.lock_state");
+        if (cli_parm != NULL)
+        {
+            val.lock_state = (bcmolt_prbs_lock_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_status.lock_state is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_status.error_counts");
+        if (cli_parm != NULL)
+        {
+            val.error_counts = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_status.error_counts is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, ae_ni, prbs_status, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_prbs_status val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_AE_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_AE_NI_CFG_ID_PRBS_STATUS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, ae_ni, prbs_status, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "prbs_status");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, ae_ni, prbs_status);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, ae_ni, prbs_status);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, ae_ni, mac_address) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, ae_ni, ae_ni_en) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, ae_ni, mtu_10g) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, ae_ni, prbs_generator) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, ae_ni, prbs_checker) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, ae_ni, prbs_status))
+    {
+        BCMOLT_MSGSET_CFG_PROP_GET(msg_set, ae_ni, all_properties);
+        bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, ae_ni, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);
+    bcmcli_log("bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_ae_ni_oper_set_ae_ni_en_state_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_ae_ni_set_ae_ni_en_state oper;   /**< declare main API struct */
+    bcmolt_ae_ni_key key = { };             /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_ae_ni_set_ae_ni_en_state oper;\n");
+    bcmcli_log("bcmolt_ae_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "ae_ni");
+    if (cli_parm != NULL)
+    {
+        key.ae_ni = (bcmolt_ae_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "ae_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.ae_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_AE_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_AE_NI_KEY_ID_AE_NI, &key.ae_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, ae_ni, set_ae_ni_en_state, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, ae_ni, set_ae_ni_en_state, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "new_state");
+    if (cli_parm != NULL)
+    {
+        bcmolt_ae_ni_en_state val;
+        val = (bcmolt_ae_ni_en_state) cli_parm->value.enum_val;
+        BCMOLT_OPER_PROP_SET(&oper, ae_ni, set_ae_ni_en_state, new_state, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, ae_ni, set_ae_ni_en_state, new_state, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_AE_NI, BCMOLT_MGT_GROUP_OPER, BCMOLT_AE_NI_OPER_ID_SET_AE_NI_EN_STATE, BCMOLT_AE_NI_SET_AE_NI_EN_STATE_ID_NEW_STATE, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_ae_path_ds_stat_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_ae_path_ds_stat stat;        /**< declare main API struct */
+    bcmolt_ae_path_ds_key key = { };    /**< declare key */
+    bcmos_bool clear_on_read;           /**< declare 'clear on read' flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_ae_path_ds_stat stat;\n");
+    bcmcli_log("bcmolt_ae_path_ds_key key = {  };\n");
+    bcmcli_log("bcmos_bool clear_on_read;\n");
+    apicli_print_start(session, "bcmolt_stat_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "ae_ni");
+    if (cli_parm != NULL)
+    {
+        key.ae_ni = (bcmolt_ae_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "ae_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.ae_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_AE_PATH_DS, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_AE_PATH_DS_KEY_ID_AE_NI, &key.ae_ni);
+    bcmcli_log(";\n");
+
+    /* set stat flags from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "clear");
+    if (cli_parm != NULL)
+    {
+        clear_on_read = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "clear is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("clear_on_read = %s;\n", (clear_on_read) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* init the API struct */
+    BCMOLT_STAT_INIT(&stat, ae_path_ds, key);
+    bcmcli_log("BCMOLT_STAT_INIT(&stat, ae_path_ds, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "bytes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, ae_path_ds, bytes);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, ae_path_ds, bytes);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, ae_path_ds, frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, ae_path_ds, frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_64");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, ae_path_ds, frames_64);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, ae_path_ds, frames_64);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_65_127");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, ae_path_ds, frames_65_127);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, ae_path_ds, frames_65_127);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_128_255");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, ae_path_ds, frames_128_255);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, ae_path_ds, frames_128_255);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_256_511");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, ae_path_ds, frames_256_511);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, ae_path_ds, frames_256_511);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_512_1023");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, ae_path_ds, frames_512_1023);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, ae_path_ds, frames_512_1023);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_1024_1518");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, ae_path_ds, frames_1024_1518);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, ae_path_ds, frames_1024_1518);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_1519_2047");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, ae_path_ds, frames_1519_2047);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, ae_path_ds, frames_1519_2047);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_2048_4095");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, ae_path_ds, frames_2048_4095);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, ae_path_ds, frames_2048_4095);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_4096_9216");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, ae_path_ds, frames_4096_9216);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, ae_path_ds, frames_4096_9216);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_9217_16383");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, ae_path_ds, frames_9217_16383);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, ae_path_ds, frames_9217_16383);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "broadcast_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, ae_path_ds, broadcast_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, ae_path_ds, broadcast_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "data_bytes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, ae_path_ds, data_bytes);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, ae_path_ds, data_bytes);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "multicast_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, ae_path_ds, multicast_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, ae_path_ds, multicast_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "unicast_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, ae_path_ds, unicast_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, ae_path_ds, unicast_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "abort_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, ae_path_ds, abort_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, ae_path_ds, abort_frames);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_STAT_PROP_IS_SET(&stat, ae_path_ds, bytes) && !BCMOLT_STAT_PROP_IS_SET(&stat, ae_path_ds, frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, ae_path_ds, frames_64) && !BCMOLT_STAT_PROP_IS_SET(&stat, ae_path_ds, frames_65_127) && !BCMOLT_STAT_PROP_IS_SET(&stat, ae_path_ds, frames_128_255) && !BCMOLT_STAT_PROP_IS_SET(&stat, ae_path_ds, frames_256_511) && !BCMOLT_STAT_PROP_IS_SET(&stat, ae_path_ds, frames_512_1023) && !BCMOLT_STAT_PROP_IS_SET(&stat, ae_path_ds, frames_1024_1518) && !BCMOLT_STAT_PROP_IS_SET(&stat, ae_path_ds, frames_1519_2047) && !BCMOLT_STAT_PROP_IS_SET(&stat, ae_path_ds, frames_2048_4095) && !BCMOLT_STAT_PROP_IS_SET(&stat, ae_path_ds, frames_4096_9216) && !BCMOLT_STAT_PROP_IS_SET(&stat, ae_path_ds, frames_9217_16383) && !BCMOLT_STAT_PROP_IS_SET(&stat, ae_path_ds, broadcast_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, ae_path_ds, data_bytes) && !BCMOLT_STAT_PROP_IS_SET(&stat, ae_path_ds, multicast_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, ae_path_ds, unicast_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, ae_path_ds, abort_frames))
+    {
+        BCMOLT_STAT_PROP_GET(&stat, ae_path_ds, all_properties);
+        bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, ae_path_ds, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_stat_get(device_id, &stat.hdr, clear_on_read);
+    bcmcli_log("bcmolt_stat_get(device_id, &stat.hdr, clear_on_read);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &stat.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, stat.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_ae_path_ds_stat_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_ae_path_ds_stat_cfg stat_cfg;    /**< declare main API struct */
+    bcmolt_ae_path_ds_key key = { };        /**< declare key */
+    bcmolt_ae_path_ds_stat_id stat_id;      /**< declare stat ID */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_ae_path_ds_stat_cfg stat_cfg;\n");
+    bcmcli_log("bcmolt_ae_path_ds_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_stat_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "ae_ni");
+    if (cli_parm != NULL)
+    {
+        key.ae_ni = (bcmolt_ae_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "ae_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.ae_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_AE_PATH_DS, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_AE_PATH_DS_KEY_ID_AE_NI, &key.ae_ni);
+    bcmcli_log(";\n");
+
+    /* set stat ID from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "sub");
+    if (cli_parm != NULL)
+    {
+        stat_id = (bcmolt_ae_path_ds_stat_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    /* init the API struct */
+    switch (stat_id)
+    {
+        case BCMOLT_AE_PATH_DS_STAT_ID_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, bytes, key);\n");
+            break;
+        case BCMOLT_AE_PATH_DS_STAT_ID_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, frames, key);\n");
+            break;
+        case BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_64:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, frames_64, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, frames_64, key);\n");
+            break;
+        case BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_65_127:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, frames_65_127, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, frames_65_127, key);\n");
+            break;
+        case BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_128_255:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, frames_128_255, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, frames_128_255, key);\n");
+            break;
+        case BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_256_511:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, frames_256_511, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, frames_256_511, key);\n");
+            break;
+        case BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_512_1023:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, frames_512_1023, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, frames_512_1023, key);\n");
+            break;
+        case BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_1024_1518:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, frames_1024_1518, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, frames_1024_1518, key);\n");
+            break;
+        case BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_1519_2047:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, frames_1519_2047, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, frames_1519_2047, key);\n");
+            break;
+        case BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_2048_4095:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, frames_2048_4095, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, frames_2048_4095, key);\n");
+            break;
+        case BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_4096_9216:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, frames_4096_9216, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, frames_4096_9216, key);\n");
+            break;
+        case BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_9217_16383:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, frames_9217_16383, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, frames_9217_16383, key);\n");
+            break;
+        case BCMOLT_AE_PATH_DS_STAT_ID_BROADCAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, broadcast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, broadcast_frames, key);\n");
+            break;
+        case BCMOLT_AE_PATH_DS_STAT_ID_DATA_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, data_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, data_bytes, key);\n");
+            break;
+        case BCMOLT_AE_PATH_DS_STAT_ID_MULTICAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, multicast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, multicast_frames, key);\n");
+            break;
+        case BCMOLT_AE_PATH_DS_STAT_ID_UNICAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, unicast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, unicast_frames, key);\n");
+            break;
+        case BCMOLT_AE_PATH_DS_STAT_ID_ABORT_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, abort_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, abort_frames, key);\n");
+            break;
+        default:
+            apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+            return BCM_ERR_RANGE;
+    }
+
+    /* call API */
+    err = bcmolt_stat_cfg_get(device_id, &stat_cfg.hdr);
+    bcmcli_log("bcmolt_stat_cfg_get(device_id, &stat_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &stat_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, stat_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_ae_path_ds_stat_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_ae_path_ds_stat_cfg stat_cfg;    /**< declare main API struct */
+    bcmolt_ae_path_ds_key key = { };        /**< declare key */
+    bcmolt_ae_path_ds_stat_id stat_id;      /**< declare stat ID */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_ae_path_ds_stat_cfg stat_cfg;\n");
+    bcmcli_log("bcmolt_ae_path_ds_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_stat_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "ae_ni");
+    if (cli_parm != NULL)
+    {
+        key.ae_ni = (bcmolt_ae_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "ae_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.ae_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_AE_PATH_DS, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_AE_PATH_DS_KEY_ID_AE_NI, &key.ae_ni);
+    bcmcli_log(";\n");
+
+    /* set stat ID from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "sub");
+    if (cli_parm != NULL)
+    {
+        stat_id = (bcmolt_ae_path_ds_stat_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    /* init the API struct */
+    switch (stat_id)
+    {
+        case BCMOLT_AE_PATH_DS_STAT_ID_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, bytes, key);\n");
+            break;
+        case BCMOLT_AE_PATH_DS_STAT_ID_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, frames, key);\n");
+            break;
+        case BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_64:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, frames_64, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, frames_64, key);\n");
+            break;
+        case BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_65_127:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, frames_65_127, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, frames_65_127, key);\n");
+            break;
+        case BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_128_255:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, frames_128_255, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, frames_128_255, key);\n");
+            break;
+        case BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_256_511:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, frames_256_511, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, frames_256_511, key);\n");
+            break;
+        case BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_512_1023:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, frames_512_1023, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, frames_512_1023, key);\n");
+            break;
+        case BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_1024_1518:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, frames_1024_1518, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, frames_1024_1518, key);\n");
+            break;
+        case BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_1519_2047:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, frames_1519_2047, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, frames_1519_2047, key);\n");
+            break;
+        case BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_2048_4095:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, frames_2048_4095, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, frames_2048_4095, key);\n");
+            break;
+        case BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_4096_9216:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, frames_4096_9216, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, frames_4096_9216, key);\n");
+            break;
+        case BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_9217_16383:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, frames_9217_16383, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, frames_9217_16383, key);\n");
+            break;
+        case BCMOLT_AE_PATH_DS_STAT_ID_BROADCAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, broadcast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, broadcast_frames, key);\n");
+            break;
+        case BCMOLT_AE_PATH_DS_STAT_ID_DATA_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, data_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, data_bytes, key);\n");
+            break;
+        case BCMOLT_AE_PATH_DS_STAT_ID_MULTICAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, multicast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, multicast_frames, key);\n");
+            break;
+        case BCMOLT_AE_PATH_DS_STAT_ID_UNICAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, unicast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, unicast_frames, key);\n");
+            break;
+        case BCMOLT_AE_PATH_DS_STAT_ID_ABORT_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, abort_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_ds, abort_frames, key);\n");
+            break;
+        default:
+            apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+            return BCM_ERR_RANGE;
+    }
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_stat_alarm_config val = { };
+        cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.trigger.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.type");
+            if (cli_parm != NULL)
+            {
+                val.trigger.type = (bcmolt_stat_condition_type) cli_parm->value.enum_val;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.type is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            switch (val.trigger.type)
+            {
+                case BCMOLT_STAT_CONDITION_TYPE_RATE_THRESHOLD:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.rising");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_threshold.rising = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.rising is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.falling");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_threshold.falling = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.falling is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_RATE_RANGE:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.upper");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_range.upper = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.upper is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.lower");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_range.lower = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.lower is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_VALUE_THRESHOLD:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.limit");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.value_threshold.limit = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.limit is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_NONE:
+                    break;
+                default:
+                    apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+                    return BCM_ERR_RANGE;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.soak.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "cfg.soak.active_soak_time");
+            if (cli_parm != NULL)
+            {
+                val.soak.active_soak_time = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak.active_soak_time is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "cfg.soak.clear_soak_time");
+            if (cli_parm != NULL)
+            {
+                val.soak.clear_soak_time = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak.clear_soak_time is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_STAT_CFG_PROP_SET(&stat_cfg, ae_path_ds, cfg, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_stat_alarm_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_AE_PATH_DS, BCMOLT_MGT_GROUP_STAT_CFG, 0, BCMOLT_AE_PATH_DS_STAT_CFG_ID_CFG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_STAT_CFG_PROP_SET(&stat_cfg, ae_path_ds, cfg, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_stat_cfg_set(device_id, &stat_cfg.hdr);
+    bcmcli_log("bcmolt_stat_cfg_set(device_id, &stat_cfg.hdr);\n");
+    apicli_print_complete(session, err, stat_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_ae_path_ds_auto_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_ae_path_ds_auto_cfg auto_cfg;    /**< declare main API struct */
+    bcmolt_ae_path_ds_key key = { };        /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_ae_path_ds_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_ae_path_ds_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_get");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, ae_path_ds, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, ae_path_ds, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_cleared");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, ae_path_ds, stat_alarm_cleared);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, ae_path_ds, stat_alarm_cleared);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_raised");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, ae_path_ds, stat_alarm_raised);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, ae_path_ds, stat_alarm_raised);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, ae_path_ds, stat_alarm_cleared) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, ae_path_ds, stat_alarm_raised))
+    {
+        BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, ae_path_ds, all_properties);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, ae_path_ds, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &auto_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_ae_path_ds_auto_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_ae_path_ds_auto_cfg auto_cfg;    /**< declare main API struct */
+    bcmolt_ae_path_ds_key key = { };        /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_ae_path_ds_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_ae_path_ds_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_set");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, ae_path_ds, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, ae_path_ds, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_cleared");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, ae_path_ds, stat_alarm_cleared, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, ae_path_ds, stat_alarm_cleared, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_AE_PATH_DS, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_AE_PATH_DS_AUTO_CFG_ID_STAT_ALARM_CLEARED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_raised");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, ae_path_ds, stat_alarm_raised, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, ae_path_ds, stat_alarm_raised, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_AE_PATH_DS, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_AE_PATH_DS_AUTO_CFG_ID_STAT_ALARM_RAISED, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);\n");
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_ae_path_us_stat_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_ae_path_us_stat stat;        /**< declare main API struct */
+    bcmolt_ae_path_us_key key = { };    /**< declare key */
+    bcmos_bool clear_on_read;           /**< declare 'clear on read' flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_ae_path_us_stat stat;\n");
+    bcmcli_log("bcmolt_ae_path_us_key key = {  };\n");
+    bcmcli_log("bcmos_bool clear_on_read;\n");
+    apicli_print_start(session, "bcmolt_stat_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "ae_ni");
+    if (cli_parm != NULL)
+    {
+        key.ae_ni = (bcmolt_ae_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "ae_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.ae_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_AE_PATH_US, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_AE_PATH_US_KEY_ID_AE_NI, &key.ae_ni);
+    bcmcli_log(";\n");
+
+    /* set stat flags from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "clear");
+    if (cli_parm != NULL)
+    {
+        clear_on_read = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "clear is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("clear_on_read = %s;\n", (clear_on_read) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* init the API struct */
+    BCMOLT_STAT_INIT(&stat, ae_path_us, key);
+    bcmcli_log("BCMOLT_STAT_INIT(&stat, ae_path_us, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "bytes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, ae_path_us, bytes);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, ae_path_us, bytes);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, ae_path_us, frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, ae_path_us, frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_64");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, ae_path_us, frames_64);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, ae_path_us, frames_64);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_65_127");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, ae_path_us, frames_65_127);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, ae_path_us, frames_65_127);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_128_255");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, ae_path_us, frames_128_255);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, ae_path_us, frames_128_255);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_256_511");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, ae_path_us, frames_256_511);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, ae_path_us, frames_256_511);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_512_1023");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, ae_path_us, frames_512_1023);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, ae_path_us, frames_512_1023);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_1024_1518");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, ae_path_us, frames_1024_1518);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, ae_path_us, frames_1024_1518);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_1519_2047");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, ae_path_us, frames_1519_2047);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, ae_path_us, frames_1519_2047);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_2048_4095");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, ae_path_us, frames_2048_4095);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, ae_path_us, frames_2048_4095);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_4096_9216");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, ae_path_us, frames_4096_9216);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, ae_path_us, frames_4096_9216);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_9217_16383");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, ae_path_us, frames_9217_16383);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, ae_path_us, frames_9217_16383);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "broadcast_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, ae_path_us, broadcast_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, ae_path_us, broadcast_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "data_bytes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, ae_path_us, data_bytes);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, ae_path_us, data_bytes);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "multicast_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, ae_path_us, multicast_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, ae_path_us, multicast_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "unicast_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, ae_path_us, unicast_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, ae_path_us, unicast_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "abort_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, ae_path_us, abort_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, ae_path_us, abort_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "fcs_error");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, ae_path_us, fcs_error);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, ae_path_us, fcs_error);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "oversize_error");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, ae_path_us, oversize_error);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, ae_path_us, oversize_error);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "runt_error");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, ae_path_us, runt_error);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, ae_path_us, runt_error);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_STAT_PROP_IS_SET(&stat, ae_path_us, bytes) && !BCMOLT_STAT_PROP_IS_SET(&stat, ae_path_us, frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, ae_path_us, frames_64) && !BCMOLT_STAT_PROP_IS_SET(&stat, ae_path_us, frames_65_127) && !BCMOLT_STAT_PROP_IS_SET(&stat, ae_path_us, frames_128_255) && !BCMOLT_STAT_PROP_IS_SET(&stat, ae_path_us, frames_256_511) && !BCMOLT_STAT_PROP_IS_SET(&stat, ae_path_us, frames_512_1023) && !BCMOLT_STAT_PROP_IS_SET(&stat, ae_path_us, frames_1024_1518) && !BCMOLT_STAT_PROP_IS_SET(&stat, ae_path_us, frames_1519_2047) && !BCMOLT_STAT_PROP_IS_SET(&stat, ae_path_us, frames_2048_4095) && !BCMOLT_STAT_PROP_IS_SET(&stat, ae_path_us, frames_4096_9216) && !BCMOLT_STAT_PROP_IS_SET(&stat, ae_path_us, frames_9217_16383) && !BCMOLT_STAT_PROP_IS_SET(&stat, ae_path_us, broadcast_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, ae_path_us, data_bytes) && !BCMOLT_STAT_PROP_IS_SET(&stat, ae_path_us, multicast_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, ae_path_us, unicast_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, ae_path_us, abort_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, ae_path_us, fcs_error) && !BCMOLT_STAT_PROP_IS_SET(&stat, ae_path_us, oversize_error) && !BCMOLT_STAT_PROP_IS_SET(&stat, ae_path_us, runt_error))
+    {
+        BCMOLT_STAT_PROP_GET(&stat, ae_path_us, all_properties);
+        bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, ae_path_us, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_stat_get(device_id, &stat.hdr, clear_on_read);
+    bcmcli_log("bcmolt_stat_get(device_id, &stat.hdr, clear_on_read);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &stat.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, stat.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_ae_path_us_stat_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_ae_path_us_stat_cfg stat_cfg;    /**< declare main API struct */
+    bcmolt_ae_path_us_key key = { };        /**< declare key */
+    bcmolt_ae_path_us_stat_id stat_id;      /**< declare stat ID */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_ae_path_us_stat_cfg stat_cfg;\n");
+    bcmcli_log("bcmolt_ae_path_us_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_stat_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "ae_ni");
+    if (cli_parm != NULL)
+    {
+        key.ae_ni = (bcmolt_ae_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "ae_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.ae_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_AE_PATH_US, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_AE_PATH_US_KEY_ID_AE_NI, &key.ae_ni);
+    bcmcli_log(";\n");
+
+    /* set stat ID from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "sub");
+    if (cli_parm != NULL)
+    {
+        stat_id = (bcmolt_ae_path_us_stat_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    /* init the API struct */
+    switch (stat_id)
+    {
+        case BCMOLT_AE_PATH_US_STAT_ID_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, bytes, key);\n");
+            break;
+        case BCMOLT_AE_PATH_US_STAT_ID_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, frames, key);\n");
+            break;
+        case BCMOLT_AE_PATH_US_STAT_ID_FRAMES_64:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, frames_64, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, frames_64, key);\n");
+            break;
+        case BCMOLT_AE_PATH_US_STAT_ID_FRAMES_65_127:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, frames_65_127, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, frames_65_127, key);\n");
+            break;
+        case BCMOLT_AE_PATH_US_STAT_ID_FRAMES_128_255:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, frames_128_255, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, frames_128_255, key);\n");
+            break;
+        case BCMOLT_AE_PATH_US_STAT_ID_FRAMES_256_511:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, frames_256_511, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, frames_256_511, key);\n");
+            break;
+        case BCMOLT_AE_PATH_US_STAT_ID_FRAMES_512_1023:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, frames_512_1023, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, frames_512_1023, key);\n");
+            break;
+        case BCMOLT_AE_PATH_US_STAT_ID_FRAMES_1024_1518:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, frames_1024_1518, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, frames_1024_1518, key);\n");
+            break;
+        case BCMOLT_AE_PATH_US_STAT_ID_FRAMES_1519_2047:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, frames_1519_2047, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, frames_1519_2047, key);\n");
+            break;
+        case BCMOLT_AE_PATH_US_STAT_ID_FRAMES_2048_4095:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, frames_2048_4095, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, frames_2048_4095, key);\n");
+            break;
+        case BCMOLT_AE_PATH_US_STAT_ID_FRAMES_4096_9216:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, frames_4096_9216, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, frames_4096_9216, key);\n");
+            break;
+        case BCMOLT_AE_PATH_US_STAT_ID_FRAMES_9217_16383:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, frames_9217_16383, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, frames_9217_16383, key);\n");
+            break;
+        case BCMOLT_AE_PATH_US_STAT_ID_BROADCAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, broadcast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, broadcast_frames, key);\n");
+            break;
+        case BCMOLT_AE_PATH_US_STAT_ID_DATA_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, data_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, data_bytes, key);\n");
+            break;
+        case BCMOLT_AE_PATH_US_STAT_ID_MULTICAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, multicast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, multicast_frames, key);\n");
+            break;
+        case BCMOLT_AE_PATH_US_STAT_ID_UNICAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, unicast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, unicast_frames, key);\n");
+            break;
+        case BCMOLT_AE_PATH_US_STAT_ID_ABORT_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, abort_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, abort_frames, key);\n");
+            break;
+        case BCMOLT_AE_PATH_US_STAT_ID_FCS_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, fcs_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, fcs_error, key);\n");
+            break;
+        case BCMOLT_AE_PATH_US_STAT_ID_OVERSIZE_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, oversize_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, oversize_error, key);\n");
+            break;
+        case BCMOLT_AE_PATH_US_STAT_ID_RUNT_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, runt_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, runt_error, key);\n");
+            break;
+        default:
+            apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+            return BCM_ERR_RANGE;
+    }
+
+    /* call API */
+    err = bcmolt_stat_cfg_get(device_id, &stat_cfg.hdr);
+    bcmcli_log("bcmolt_stat_cfg_get(device_id, &stat_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &stat_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, stat_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_ae_path_us_stat_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_ae_path_us_stat_cfg stat_cfg;    /**< declare main API struct */
+    bcmolt_ae_path_us_key key = { };        /**< declare key */
+    bcmolt_ae_path_us_stat_id stat_id;      /**< declare stat ID */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_ae_path_us_stat_cfg stat_cfg;\n");
+    bcmcli_log("bcmolt_ae_path_us_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_stat_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "ae_ni");
+    if (cli_parm != NULL)
+    {
+        key.ae_ni = (bcmolt_ae_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "ae_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.ae_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_AE_PATH_US, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_AE_PATH_US_KEY_ID_AE_NI, &key.ae_ni);
+    bcmcli_log(";\n");
+
+    /* set stat ID from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "sub");
+    if (cli_parm != NULL)
+    {
+        stat_id = (bcmolt_ae_path_us_stat_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    /* init the API struct */
+    switch (stat_id)
+    {
+        case BCMOLT_AE_PATH_US_STAT_ID_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, bytes, key);\n");
+            break;
+        case BCMOLT_AE_PATH_US_STAT_ID_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, frames, key);\n");
+            break;
+        case BCMOLT_AE_PATH_US_STAT_ID_FRAMES_64:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, frames_64, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, frames_64, key);\n");
+            break;
+        case BCMOLT_AE_PATH_US_STAT_ID_FRAMES_65_127:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, frames_65_127, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, frames_65_127, key);\n");
+            break;
+        case BCMOLT_AE_PATH_US_STAT_ID_FRAMES_128_255:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, frames_128_255, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, frames_128_255, key);\n");
+            break;
+        case BCMOLT_AE_PATH_US_STAT_ID_FRAMES_256_511:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, frames_256_511, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, frames_256_511, key);\n");
+            break;
+        case BCMOLT_AE_PATH_US_STAT_ID_FRAMES_512_1023:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, frames_512_1023, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, frames_512_1023, key);\n");
+            break;
+        case BCMOLT_AE_PATH_US_STAT_ID_FRAMES_1024_1518:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, frames_1024_1518, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, frames_1024_1518, key);\n");
+            break;
+        case BCMOLT_AE_PATH_US_STAT_ID_FRAMES_1519_2047:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, frames_1519_2047, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, frames_1519_2047, key);\n");
+            break;
+        case BCMOLT_AE_PATH_US_STAT_ID_FRAMES_2048_4095:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, frames_2048_4095, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, frames_2048_4095, key);\n");
+            break;
+        case BCMOLT_AE_PATH_US_STAT_ID_FRAMES_4096_9216:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, frames_4096_9216, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, frames_4096_9216, key);\n");
+            break;
+        case BCMOLT_AE_PATH_US_STAT_ID_FRAMES_9217_16383:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, frames_9217_16383, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, frames_9217_16383, key);\n");
+            break;
+        case BCMOLT_AE_PATH_US_STAT_ID_BROADCAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, broadcast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, broadcast_frames, key);\n");
+            break;
+        case BCMOLT_AE_PATH_US_STAT_ID_DATA_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, data_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, data_bytes, key);\n");
+            break;
+        case BCMOLT_AE_PATH_US_STAT_ID_MULTICAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, multicast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, multicast_frames, key);\n");
+            break;
+        case BCMOLT_AE_PATH_US_STAT_ID_UNICAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, unicast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, unicast_frames, key);\n");
+            break;
+        case BCMOLT_AE_PATH_US_STAT_ID_ABORT_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, abort_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, abort_frames, key);\n");
+            break;
+        case BCMOLT_AE_PATH_US_STAT_ID_FCS_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, fcs_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, fcs_error, key);\n");
+            break;
+        case BCMOLT_AE_PATH_US_STAT_ID_OVERSIZE_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, oversize_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, oversize_error, key);\n");
+            break;
+        case BCMOLT_AE_PATH_US_STAT_ID_RUNT_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, runt_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, ae_path_us, runt_error, key);\n");
+            break;
+        default:
+            apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+            return BCM_ERR_RANGE;
+    }
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_stat_alarm_config val = { };
+        cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.trigger.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.type");
+            if (cli_parm != NULL)
+            {
+                val.trigger.type = (bcmolt_stat_condition_type) cli_parm->value.enum_val;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.type is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            switch (val.trigger.type)
+            {
+                case BCMOLT_STAT_CONDITION_TYPE_RATE_THRESHOLD:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.rising");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_threshold.rising = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.rising is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.falling");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_threshold.falling = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.falling is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_RATE_RANGE:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.upper");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_range.upper = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.upper is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.lower");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_range.lower = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.lower is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_VALUE_THRESHOLD:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.limit");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.value_threshold.limit = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.limit is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_NONE:
+                    break;
+                default:
+                    apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+                    return BCM_ERR_RANGE;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.soak.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "cfg.soak.active_soak_time");
+            if (cli_parm != NULL)
+            {
+                val.soak.active_soak_time = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak.active_soak_time is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "cfg.soak.clear_soak_time");
+            if (cli_parm != NULL)
+            {
+                val.soak.clear_soak_time = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak.clear_soak_time is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_STAT_CFG_PROP_SET(&stat_cfg, ae_path_us, cfg, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_stat_alarm_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_AE_PATH_US, BCMOLT_MGT_GROUP_STAT_CFG, 0, BCMOLT_AE_PATH_US_STAT_CFG_ID_CFG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_STAT_CFG_PROP_SET(&stat_cfg, ae_path_us, cfg, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_stat_cfg_set(device_id, &stat_cfg.hdr);
+    bcmcli_log("bcmolt_stat_cfg_set(device_id, &stat_cfg.hdr);\n");
+    apicli_print_complete(session, err, stat_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_ae_path_us_auto_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_ae_path_us_auto_cfg auto_cfg;    /**< declare main API struct */
+    bcmolt_ae_path_us_key key = { };        /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_ae_path_us_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_ae_path_us_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_get");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, ae_path_us, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, ae_path_us, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_cleared");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, ae_path_us, stat_alarm_cleared);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, ae_path_us, stat_alarm_cleared);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_raised");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, ae_path_us, stat_alarm_raised);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, ae_path_us, stat_alarm_raised);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, ae_path_us, stat_alarm_cleared) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, ae_path_us, stat_alarm_raised))
+    {
+        BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, ae_path_us, all_properties);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, ae_path_us, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &auto_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_ae_path_us_auto_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_ae_path_us_auto_cfg auto_cfg;    /**< declare main API struct */
+    bcmolt_ae_path_us_key key = { };        /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_ae_path_us_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_ae_path_us_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_set");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, ae_path_us, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, ae_path_us, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_cleared");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, ae_path_us, stat_alarm_cleared, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, ae_path_us, stat_alarm_cleared, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_AE_PATH_US, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_AE_PATH_US_AUTO_CFG_ID_STAT_ALARM_CLEARED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_raised");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, ae_path_us, stat_alarm_raised, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, ae_path_us, stat_alarm_raised, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_AE_PATH_US, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_AE_PATH_US_AUTO_CFG_ID_STAT_ALARM_RAISED, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);\n");
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_channel_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_channel_cfg cfg;         /**< declare main API struct */
+    bcmolt_channel_key key = { };   /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_channel_cfg cfg;\n");
+    bcmcli_log("bcmolt_channel_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_pon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_CHANNEL, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_CHANNEL_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, channel, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, channel, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "operation_control");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, channel, operation_control);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, channel, operation_control);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tol");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, channel, tol);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, channel, tol);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "system_profile");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, channel, system_profile);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, channel, system_profile);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "channel_profile");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, channel, channel_profile);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, channel, channel_profile);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_CFG_PROP_IS_SET(&cfg, channel, operation_control) && !BCMOLT_CFG_PROP_IS_SET(&cfg, channel, tol) && !BCMOLT_CFG_PROP_IS_SET(&cfg, channel, system_profile) && !BCMOLT_CFG_PROP_IS_SET(&cfg, channel, channel_profile))
+    {
+        BCMOLT_CFG_PROP_GET(&cfg, channel, all_properties);
+        bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, channel, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_get(device_id, &cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_channel_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_channel_cfg cfg;         /**< declare main API struct */
+    bcmolt_channel_key key = { };   /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_channel_cfg cfg;\n");
+    bcmcli_log("bcmolt_channel_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_pon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_CHANNEL, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_CHANNEL_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, channel, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, channel, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "operation_control.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_operation_control val = { };
+        cli_parm = bcmcli_find_named_parm(session, "operation_control.re");
+        if (cli_parm != NULL)
+        {
+            val.re = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "operation_control.re is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "operation_control.odn_class");
+        if (cli_parm != NULL)
+        {
+            val.odn_class = (bcmolt_odn_class) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "operation_control.odn_class is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "operation_control.ds_fec_mode");
+        if (cli_parm != NULL)
+        {
+            val.ds_fec_mode = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "operation_control.ds_fec_mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "operation_control.protocol");
+        if (cli_parm != NULL)
+        {
+            val.protocol = (bcmolt_tc_protocol) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "operation_control.protocol is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "operation_control.ds_link_type");
+        if (cli_parm != NULL)
+        {
+            val.ds_link_type = (bcmolt_link_type) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "operation_control.ds_link_type is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "operation_control.pon_id.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "operation_control.pon_id.administrative_label");
+            if (cli_parm != NULL)
+            {
+                val.pon_id.administrative_label = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "operation_control.pon_id.administrative_label is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "operation_control.pon_id.dwlch_id");
+            if (cli_parm != NULL)
+            {
+                val.pon_id.dwlch_id = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "operation_control.pon_id.dwlch_id is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "operation_control.pon_id is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "operation_control.c");
+        if (cli_parm != NULL)
+        {
+            val.c = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "operation_control.c is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, channel, operation_control, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_operation_control val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_CHANNEL, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_CHANNEL_CFG_ID_OPERATION_CONTROL, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, channel, operation_control, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tol");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, channel, tol, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, channel, tol, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_CHANNEL, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_CHANNEL_CFG_ID_TOL, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "system_profile.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_system_profile val = { };
+        cli_parm = bcmcli_find_named_parm(session, "system_profile.ng_2_sys_id");
+        if (cli_parm != NULL)
+        {
+            val.ng_2_sys_id = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "system_profile.ng_2_sys_id is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "system_profile.version");
+        if (cli_parm != NULL)
+        {
+            val.version = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "system_profile.version is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "system_profile.channel_spacing");
+        if (cli_parm != NULL)
+        {
+            val.channel_spacing = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "system_profile.channel_spacing is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "system_profile.us_operating_wavelength_bands");
+        if (cli_parm != NULL)
+        {
+            val.us_operating_wavelength_bands = (bcmolt_us_operating_wavelength_bands) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "system_profile.us_operating_wavelength_bands is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "system_profile.us_mse");
+        if (cli_parm != NULL)
+        {
+            val.us_mse = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "system_profile.us_mse is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "system_profile.loose_calibration_bound");
+        if (cli_parm != NULL)
+        {
+            val.loose_calibration_bound = (bcmolt_calibration_record) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "system_profile.loose_calibration_bound is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "system_profile.fsr");
+        if (cli_parm != NULL)
+        {
+            val.fsr = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "system_profile.fsr is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "system_profile.twdm_channel_count");
+        if (cli_parm != NULL)
+        {
+            val.twdm_channel_count = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "system_profile.twdm_channel_count is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, channel, system_profile, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_system_profile val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_CHANNEL, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_CHANNEL_CFG_ID_SYSTEM_PROFILE, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, channel, system_profile, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "channel_profile.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_arr_channel_profile_8 val = { };
+        cli_parm = bcmcli_find_parm_by_prefix(session, "channel_profile.arr.");
+        if (cli_parm != NULL)
+        {
+            int32_t i0;
+            if (cli_parm->array_size != 8)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "array channel_profile.arr must have 8 elements\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "channel_profile.arr.version");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 8)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "channel_profile.arr.version is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 8; i0++)
+                {
+                    val.arr[i0].version = cli_parm->values[i0].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "channel_profile.arr.channel_index");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 8)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "channel_profile.arr.channel_index is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 8; i0++)
+                {
+                    val.arr[i0].channel_index = cli_parm->values[i0].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "channel_profile.arr.ds_frequency_offset.sign");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 8)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "channel_profile.arr.ds_frequency_offset.sign is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 8; i0++)
+                {
+                    val.arr[i0].ds_frequency_offset.sign = (bcmolt_sign) cli_parm->values[i0].enum_val;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "channel_profile.arr.ds_frequency_offset.value");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 8)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "channel_profile.arr.ds_frequency_offset.value is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 8; i0++)
+                {
+                    val.arr[i0].ds_frequency_offset.value = cli_parm->values[i0].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "channel_profile.arr.channel_partition");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 8)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "channel_profile.arr.channel_partition is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 8; i0++)
+                {
+                    val.arr[i0].channel_partition = cli_parm->values[i0].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "channel_profile.arr.uwlch_id");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 8)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "channel_profile.arr.uwlch_id is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 8; i0++)
+                {
+                    val.arr[i0].uwlch_id = cli_parm->values[i0].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "channel_profile.arr.us_frequency");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 8)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "channel_profile.arr.us_frequency is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 8; i0++)
+                {
+                    val.arr[i0].us_frequency = cli_parm->values[i0].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "channel_profile.arr.us_rate");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 8)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "channel_profile.arr.us_rate is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 8; i0++)
+                {
+                    val.arr[i0].us_rate = (bcmolt_upstream_line_rate_capabilities) cli_parm->values[i0].enum_val;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "channel_profile.arr.default_onu_attenuation");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 8)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "channel_profile.arr.default_onu_attenuation is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 8; i0++)
+                {
+                    val.arr[i0].default_onu_attenuation = cli_parm->values[i0].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "channel_profile.arr.response_threshold");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 8)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "channel_profile.arr.response_threshold is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 8; i0++)
+                {
+                    val.arr[i0].response_threshold = cli_parm->values[i0].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "channel_profile.arr.us_link_type");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 8)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "channel_profile.arr.us_link_type is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 8; i0++)
+                {
+                    val.arr[i0].us_link_type = (bcmolt_link_type) cli_parm->values[i0].enum_val;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "channel_profile.arr.is_valid");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 8)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "channel_profile.arr.is_valid is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 8; i0++)
+                {
+                    val.arr[i0].is_valid = cli_parm->values[i0].number;
+                }
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "channel_profile.arr is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, channel, channel_profile, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_arr_channel_profile_8 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_CHANNEL, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_CHANNEL_CFG_ID_CHANNEL_PROFILE, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, channel, channel_profile, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_set(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_set(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_channel_cfg_clear(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_channel_cfg cfg;         /**< declare main API struct */
+    bcmolt_channel_key key = { };   /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_channel_cfg cfg;\n");
+    bcmcli_log("bcmolt_channel_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_clear");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_pon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_CHANNEL, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_CHANNEL_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, channel, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, channel, key);\n");
+
+    /* call API */
+    err = bcmolt_cfg_clear(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_clear(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_channel_cfg_get_multi(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_channel_cfg cfg;         /**< declare main API struct */
+    bcmolt_channel_key key = { };   /**< declare key */
+    bcmolt_msg_set *msg_set = NULL; /**< declare message set */
+    uint32_t max_msgs;              /**< declare max number of msgs to get */
+    bcmos_bool invert_filter;       /**< declare filter invert flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_channel_cfg cfg;\n");
+    bcmcli_log("bcmolt_channel_key key = {  };\n");
+    bcmcli_log("bcmolt_msg_set* msg_set = NULL;\n");
+    bcmcli_log("uint32_t max_msgs;\n");
+    bcmcli_log("bcmos_bool invert_filter;\n");
+    apicli_print_start(session, "bcmolt_cfg_get_multi");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_pon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_CHANNEL, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_CHANNEL_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* set max number of msgs from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "max_msgs");
+    if (cli_parm != NULL)
+    {
+        max_msgs = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "max_msgs is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("max_msgs = %d;\n", max_msgs);
+
+    /* set filter invert flag from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "filter_invert");
+    if (cli_parm != NULL)
+    {
+        invert_filter = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "filter_invert is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("invert_filter = %s;\n", (invert_filter) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* allocate message set */
+    err = apicli_msg_set_alloc(byte_pool, BCMOLT_OBJ_ID_CHANNEL, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    bcmcli_log("bcmolt_msg_set_alloc(BCMOLT_OBJ_ID_CHANNEL, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, channel, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, channel, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.operation_control.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_operation_control val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.operation_control.re");
+        if (cli_parm != NULL)
+        {
+            val.re = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.operation_control.re is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.operation_control.odn_class");
+        if (cli_parm != NULL)
+        {
+            val.odn_class = (bcmolt_odn_class) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.operation_control.odn_class is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.operation_control.ds_fec_mode");
+        if (cli_parm != NULL)
+        {
+            val.ds_fec_mode = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.operation_control.ds_fec_mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.operation_control.protocol");
+        if (cli_parm != NULL)
+        {
+            val.protocol = (bcmolt_tc_protocol) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.operation_control.protocol is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.operation_control.ds_link_type");
+        if (cli_parm != NULL)
+        {
+            val.ds_link_type = (bcmolt_link_type) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.operation_control.ds_link_type is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "filter.operation_control.pon_id.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "filter.operation_control.pon_id.administrative_label");
+            if (cli_parm != NULL)
+            {
+                val.pon_id.administrative_label = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.operation_control.pon_id.administrative_label is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.operation_control.pon_id.dwlch_id");
+            if (cli_parm != NULL)
+            {
+                val.pon_id.dwlch_id = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.operation_control.pon_id.dwlch_id is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.operation_control.pon_id is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.operation_control.c");
+        if (cli_parm != NULL)
+        {
+            val.c = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.operation_control.c is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, channel, operation_control, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_operation_control val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_CHANNEL, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_CHANNEL_CFG_ID_OPERATION_CONTROL, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, channel, operation_control, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "operation_control");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, channel, operation_control);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, channel, operation_control);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.tol");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, channel, tol, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, channel, tol, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_CHANNEL, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_CHANNEL_CFG_ID_TOL, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tol");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, channel, tol);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, channel, tol);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.system_profile.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_system_profile val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.system_profile.ng_2_sys_id");
+        if (cli_parm != NULL)
+        {
+            val.ng_2_sys_id = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.system_profile.ng_2_sys_id is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.system_profile.version");
+        if (cli_parm != NULL)
+        {
+            val.version = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.system_profile.version is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.system_profile.channel_spacing");
+        if (cli_parm != NULL)
+        {
+            val.channel_spacing = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.system_profile.channel_spacing is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.system_profile.us_operating_wavelength_bands");
+        if (cli_parm != NULL)
+        {
+            val.us_operating_wavelength_bands = (bcmolt_us_operating_wavelength_bands) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.system_profile.us_operating_wavelength_bands is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.system_profile.us_mse");
+        if (cli_parm != NULL)
+        {
+            val.us_mse = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.system_profile.us_mse is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.system_profile.loose_calibration_bound");
+        if (cli_parm != NULL)
+        {
+            val.loose_calibration_bound = (bcmolt_calibration_record) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.system_profile.loose_calibration_bound is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.system_profile.fsr");
+        if (cli_parm != NULL)
+        {
+            val.fsr = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.system_profile.fsr is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.system_profile.twdm_channel_count");
+        if (cli_parm != NULL)
+        {
+            val.twdm_channel_count = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.system_profile.twdm_channel_count is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, channel, system_profile, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_system_profile val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_CHANNEL, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_CHANNEL_CFG_ID_SYSTEM_PROFILE, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, channel, system_profile, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "system_profile");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, channel, system_profile);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, channel, system_profile);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.channel_profile.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_arr_channel_profile_8 val = { };
+        cli_parm = bcmcli_find_parm_by_prefix(session, "filter.channel_profile.arr.");
+        if (cli_parm != NULL)
+        {
+            int32_t i0;
+            if (cli_parm->array_size != 8)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "array filter.channel_profile.arr must have 8 elements\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.channel_profile.arr.version");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 8)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.channel_profile.arr.version is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 8; i0++)
+                {
+                    val.arr[i0].version = cli_parm->values[i0].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.channel_profile.arr.channel_index");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 8)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.channel_profile.arr.channel_index is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 8; i0++)
+                {
+                    val.arr[i0].channel_index = cli_parm->values[i0].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.channel_profile.arr.ds_frequency_offset.sign");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 8)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.channel_profile.arr.ds_frequency_offset.sign is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 8; i0++)
+                {
+                    val.arr[i0].ds_frequency_offset.sign = (bcmolt_sign) cli_parm->values[i0].enum_val;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.channel_profile.arr.ds_frequency_offset.value");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 8)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.channel_profile.arr.ds_frequency_offset.value is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 8; i0++)
+                {
+                    val.arr[i0].ds_frequency_offset.value = cli_parm->values[i0].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.channel_profile.arr.channel_partition");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 8)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.channel_profile.arr.channel_partition is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 8; i0++)
+                {
+                    val.arr[i0].channel_partition = cli_parm->values[i0].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.channel_profile.arr.uwlch_id");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 8)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.channel_profile.arr.uwlch_id is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 8; i0++)
+                {
+                    val.arr[i0].uwlch_id = cli_parm->values[i0].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.channel_profile.arr.us_frequency");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 8)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.channel_profile.arr.us_frequency is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 8; i0++)
+                {
+                    val.arr[i0].us_frequency = cli_parm->values[i0].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.channel_profile.arr.us_rate");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 8)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.channel_profile.arr.us_rate is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 8; i0++)
+                {
+                    val.arr[i0].us_rate = (bcmolt_upstream_line_rate_capabilities) cli_parm->values[i0].enum_val;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.channel_profile.arr.default_onu_attenuation");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 8)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.channel_profile.arr.default_onu_attenuation is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 8; i0++)
+                {
+                    val.arr[i0].default_onu_attenuation = cli_parm->values[i0].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.channel_profile.arr.response_threshold");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 8)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.channel_profile.arr.response_threshold is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 8; i0++)
+                {
+                    val.arr[i0].response_threshold = cli_parm->values[i0].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.channel_profile.arr.us_link_type");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 8)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.channel_profile.arr.us_link_type is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 8; i0++)
+                {
+                    val.arr[i0].us_link_type = (bcmolt_link_type) cli_parm->values[i0].enum_val;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.channel_profile.arr.is_valid");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 8)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.channel_profile.arr.is_valid is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 8; i0++)
+                {
+                    val.arr[i0].is_valid = cli_parm->values[i0].number;
+                }
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.channel_profile.arr is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, channel, channel_profile, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_arr_channel_profile_8 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_CHANNEL, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_CHANNEL_CFG_ID_CHANNEL_PROFILE, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, channel, channel_profile, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "channel_profile");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, channel, channel_profile);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, channel, channel_profile);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, channel, operation_control) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, channel, tol) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, channel, system_profile) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, channel, channel_profile))
+    {
+        BCMOLT_MSGSET_CFG_PROP_GET(msg_set, channel, all_properties);
+        bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, channel, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);
+    bcmcli_log("bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_debug_oper_cli_input_submit(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_debug_cli_input oper;    /**< declare main API struct */
+    bcmolt_debug_key key = { };     /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_debug_cli_input oper;\n");
+    bcmcli_log("bcmolt_debug_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, debug, cli_input, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, debug, cli_input, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "data");
+    if (cli_parm != NULL)
+    {
+        bcmolt_u8_list_u32 val = { };
+        val.len = bcmolt_buf_get_used(&cli_parm->value.buffer);
+        val.val = apicli_byte_pool_calloc(byte_pool, val.len);
+        if (val.val == NULL)
+        {
+            apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+            return BCM_ERR_NOMEM;
+        }
+
+        bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+        bcmolt_buf_read(&cli_parm->value.buffer, val.val, val.len);
+        BCMOLT_OPER_PROP_SET(&oper, debug, cli_input, data, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_u8_list_u32 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEBUG, BCMOLT_MGT_GROUP_OPER, BCMOLT_DEBUG_OPER_ID_CLI_INPUT, BCMOLT_DEBUG_CLI_INPUT_ID_DATA, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, debug, cli_input, data, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_debug_cfg_get(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_debug_cfg cfg;       /**< declare main API struct */
+    bcmolt_debug_key key = { }; /**< declare key */
+    uint8_t *list_mem;          /**< declare memory buffer for variable-sized lists */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_debug_cfg cfg;\n");
+    bcmcli_log("bcmolt_debug_key key = {  };\n");
+    bcmcli_log("uint8_t* list_mem;\n");
+    apicli_print_start(session, "bcmolt_cfg_get");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, debug, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, debug, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "console_redirection");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, debug, console_redirection);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, debug, console_redirection);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "indications_dropped");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, debug, indications_dropped);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, debug, indications_dropped);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "file_used_percent");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, debug, file_used_percent);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, debug, file_used_percent);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "api_capture_cfg");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, debug, api_capture_cfg);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, debug, api_capture_cfg);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "api_capture_stats");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, debug, api_capture_stats);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, debug, api_capture_stats);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "api_capture_buffer_read");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, debug, api_capture_buffer_read);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, debug, api_capture_buffer_read);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "api_capture_buffer");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, debug, api_capture_buffer);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, debug, api_capture_buffer);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_CFG_PROP_IS_SET(&cfg, debug, console_redirection) && !BCMOLT_CFG_PROP_IS_SET(&cfg, debug, indications_dropped) && !BCMOLT_CFG_PROP_IS_SET(&cfg, debug, file_used_percent) && !BCMOLT_CFG_PROP_IS_SET(&cfg, debug, api_capture_cfg) && !BCMOLT_CFG_PROP_IS_SET(&cfg, debug, api_capture_stats) && !BCMOLT_CFG_PROP_IS_SET(&cfg, debug, api_capture_buffer_read) && !BCMOLT_CFG_PROP_IS_SET(&cfg, debug, api_capture_buffer))
+    {
+        BCMOLT_CFG_PROP_GET(&cfg, debug, all_properties);
+        bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, debug, all_properties);\n");
+    }
+
+    /* set memory to use for variable-sized lists */
+    list_mem = apicli_byte_pool_calloc(byte_pool, APICLI_DYNAMIC_LIST_BUFFER_SIZE);
+    if (list_mem == NULL)
+    {
+        apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+        return BCM_ERR_NOMEM;
+    }
+
+    bcmcli_log("list_mem = bcmos_calloc(APICLI_DYNAMIC_LIST_BUFFER_SIZE);\n");
+    BCMOLT_CFG_LIST_BUF_SET(&cfg, debug, list_mem, APICLI_DYNAMIC_LIST_BUFFER_SIZE);
+    bcmcli_log("BCMOLT_CFG_LIST_BUF_SET(&cfg, debug, list_mem, APICLI_DYNAMIC_LIST_BUFFER_SIZE);\n");
+
+    /* call API */
+    err = bcmolt_cfg_get(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_get(device_id, &cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_debug_cfg_set(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_debug_cfg cfg;       /**< declare main API struct */
+    bcmolt_debug_key key = { }; /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_debug_cfg cfg;\n");
+    bcmcli_log("bcmolt_debug_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_set");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, debug, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, debug, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "console_redirection");
+    if (cli_parm != NULL)
+    {
+        bcmolt_console_redirection val;
+        val = (bcmolt_console_redirection) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, debug, console_redirection, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, debug, console_redirection, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEBUG, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEBUG_CFG_ID_CONSOLE_REDIRECTION, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "api_capture_cfg.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_api_capture_config val = { };
+        cli_parm = bcmcli_find_named_parm(session, "api_capture_cfg.location");
+        if (cli_parm != NULL)
+        {
+            val.location = (bcmolt_api_capture_location) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "api_capture_cfg.location is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "api_capture_cfg.buffer_size_bytes");
+        if (cli_parm != NULL)
+        {
+            val.buffer_size_bytes = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "api_capture_cfg.buffer_size_bytes is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "api_capture_cfg.buffer_mode");
+        if (cli_parm != NULL)
+        {
+            val.buffer_mode = (bcmolt_api_capture_buffer_mode) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "api_capture_cfg.buffer_mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, debug, api_capture_cfg, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_api_capture_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEBUG, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEBUG_CFG_ID_API_CAPTURE_CFG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, debug, api_capture_cfg, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "api_capture_buffer_read.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_api_capture_buffer_reader val = { };
+        cli_parm = bcmcli_find_named_parm(session, "api_capture_buffer_read.offset");
+        if (cli_parm != NULL)
+        {
+            val.offset = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "api_capture_buffer_read.offset is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "api_capture_buffer_read.size");
+        if (cli_parm != NULL)
+        {
+            val.size = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "api_capture_buffer_read.size is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, debug, api_capture_buffer_read, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_api_capture_buffer_reader val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEBUG, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEBUG_CFG_ID_API_CAPTURE_BUFFER_READ, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, debug, api_capture_buffer_read, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_set(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_set(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_debug_cfg_clear(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmos_errno err;
+    bcmolt_debug_cfg cfg;       /**< declare main API struct */
+    bcmolt_debug_key key = { }; /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_debug_cfg cfg;\n");
+    bcmcli_log("bcmolt_debug_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_clear");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, debug, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, debug, key);\n");
+
+    /* call API */
+    err = bcmolt_cfg_clear(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_clear(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_debug_cfg_get_multi(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_debug_cfg cfg;           /**< declare main API struct */
+    bcmolt_debug_key key = { };     /**< declare key */
+    bcmolt_msg_set *msg_set = NULL; /**< declare message set */
+    uint32_t max_msgs;              /**< declare max number of msgs to get */
+    bcmos_bool invert_filter;       /**< declare filter invert flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_debug_cfg cfg;\n");
+    bcmcli_log("bcmolt_debug_key key = {  };\n");
+    bcmcli_log("bcmolt_msg_set* msg_set = NULL;\n");
+    bcmcli_log("uint32_t max_msgs;\n");
+    bcmcli_log("bcmos_bool invert_filter;\n");
+    apicli_print_start(session, "bcmolt_cfg_get_multi");
+
+    /* set max number of msgs from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "max_msgs");
+    if (cli_parm != NULL)
+    {
+        max_msgs = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "max_msgs is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("max_msgs = %d;\n", max_msgs);
+
+    /* set filter invert flag from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "filter_invert");
+    if (cli_parm != NULL)
+    {
+        invert_filter = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "filter_invert is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("invert_filter = %s;\n", (invert_filter) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* allocate message set */
+    err = apicli_msg_set_alloc(byte_pool, BCMOLT_OBJ_ID_DEBUG, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    bcmcli_log("bcmolt_msg_set_alloc(BCMOLT_OBJ_ID_DEBUG, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, debug, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, debug, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "filter.console_redirection");
+    if (cli_parm != NULL)
+    {
+        bcmolt_console_redirection val;
+        val = (bcmolt_console_redirection) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, debug, console_redirection, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, debug, console_redirection, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEBUG, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEBUG_CFG_ID_CONSOLE_REDIRECTION, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "console_redirection");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, debug, console_redirection);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, debug, console_redirection);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.indications_dropped");
+    if (cli_parm != NULL)
+    {
+        uint32_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, debug, indications_dropped, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, debug, indications_dropped, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEBUG, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEBUG_CFG_ID_INDICATIONS_DROPPED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "indications_dropped");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, debug, indications_dropped);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, debug, indications_dropped);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.file_used_percent");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, debug, file_used_percent, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, debug, file_used_percent, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEBUG, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEBUG_CFG_ID_FILE_USED_PERCENT, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "file_used_percent");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, debug, file_used_percent);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, debug, file_used_percent);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.api_capture_cfg.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_api_capture_config val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.api_capture_cfg.location");
+        if (cli_parm != NULL)
+        {
+            val.location = (bcmolt_api_capture_location) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.api_capture_cfg.location is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.api_capture_cfg.buffer_size_bytes");
+        if (cli_parm != NULL)
+        {
+            val.buffer_size_bytes = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.api_capture_cfg.buffer_size_bytes is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.api_capture_cfg.buffer_mode");
+        if (cli_parm != NULL)
+        {
+            val.buffer_mode = (bcmolt_api_capture_buffer_mode) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.api_capture_cfg.buffer_mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, debug, api_capture_cfg, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_api_capture_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEBUG, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEBUG_CFG_ID_API_CAPTURE_CFG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, debug, api_capture_cfg, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "api_capture_cfg");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, debug, api_capture_cfg);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, debug, api_capture_cfg);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.api_capture_stats.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_api_capture_stats val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.api_capture_stats.buffer_used_bytes");
+        if (cli_parm != NULL)
+        {
+            val.buffer_used_bytes = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.api_capture_stats.buffer_used_bytes is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.api_capture_stats.buffer_wrap_count");
+        if (cli_parm != NULL)
+        {
+            val.buffer_wrap_count = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.api_capture_stats.buffer_wrap_count is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.api_capture_stats.events_recorded");
+        if (cli_parm != NULL)
+        {
+            val.events_recorded = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.api_capture_stats.events_recorded is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.api_capture_stats.events_dropped");
+        if (cli_parm != NULL)
+        {
+            val.events_dropped = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.api_capture_stats.events_dropped is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.api_capture_stats.readable_bytes");
+        if (cli_parm != NULL)
+        {
+            val.readable_bytes = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.api_capture_stats.readable_bytes is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, debug, api_capture_stats, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_api_capture_stats val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEBUG, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEBUG_CFG_ID_API_CAPTURE_STATS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, debug, api_capture_stats, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "api_capture_stats");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, debug, api_capture_stats);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, debug, api_capture_stats);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.api_capture_buffer_read.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_api_capture_buffer_reader val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.api_capture_buffer_read.offset");
+        if (cli_parm != NULL)
+        {
+            val.offset = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.api_capture_buffer_read.offset is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.api_capture_buffer_read.size");
+        if (cli_parm != NULL)
+        {
+            val.size = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.api_capture_buffer_read.size is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, debug, api_capture_buffer_read, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_api_capture_buffer_reader val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEBUG, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEBUG_CFG_ID_API_CAPTURE_BUFFER_READ, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, debug, api_capture_buffer_read, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "api_capture_buffer_read");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, debug, api_capture_buffer_read);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, debug, api_capture_buffer_read);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.api_capture_buffer");
+    if (cli_parm != NULL)
+    {
+        bcmolt_u8_list_u32 val = { };
+        val.len = bcmolt_buf_get_used(&cli_parm->value.buffer);
+        val.val = apicli_byte_pool_calloc(byte_pool, val.len);
+        if (val.val == NULL)
+        {
+            apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+            return BCM_ERR_NOMEM;
+        }
+
+        bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+        bcmolt_buf_read(&cli_parm->value.buffer, val.val, val.len);
+        BCMOLT_CFG_PROP_SET(&cfg, debug, api_capture_buffer, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_u8_list_u32 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEBUG, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEBUG_CFG_ID_API_CAPTURE_BUFFER, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, debug, api_capture_buffer, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "api_capture_buffer");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, debug, api_capture_buffer);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, debug, api_capture_buffer);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, debug, console_redirection) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, debug, indications_dropped) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, debug, file_used_percent) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, debug, api_capture_cfg) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, debug, api_capture_stats) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, debug, api_capture_buffer_read) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, debug, api_capture_buffer))
+    {
+        BCMOLT_MSGSET_CFG_PROP_GET(msg_set, debug, all_properties);
+        bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, debug, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);
+    bcmcli_log("bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_debug_oper_start_api_capture_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmos_errno err;
+    bcmolt_debug_start_api_capture oper;    /**< declare main API struct */
+    bcmolt_debug_key key = { };             /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_debug_start_api_capture oper;\n");
+    bcmcli_log("bcmolt_debug_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, debug, start_api_capture, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, debug, start_api_capture, key);\n");
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_debug_oper_stop_api_capture_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmos_errno err;
+    bcmolt_debug_stop_api_capture oper; /**< declare main API struct */
+    bcmolt_debug_key key = { };         /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_debug_stop_api_capture oper;\n");
+    bcmcli_log("bcmolt_debug_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, debug, stop_api_capture, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, debug, stop_api_capture, key);\n");
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_debug_oper_reset_api_capture_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmos_errno err;
+    bcmolt_debug_reset_api_capture oper;    /**< declare main API struct */
+    bcmolt_debug_key key = { };             /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_debug_reset_api_capture oper;\n");
+    bcmcli_log("bcmolt_debug_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, debug, reset_api_capture, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, debug, reset_api_capture, key);\n");
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_debug_auto_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_debug_auto_cfg auto_cfg; /**< declare main API struct */
+    bcmolt_debug_key key = { };     /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_debug_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_debug_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_get");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, debug, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, debug, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "cli_output");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, debug, cli_output);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, debug, cli_output);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "file_almost_full");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, debug, file_almost_full);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, debug, file_almost_full);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, debug, cli_output) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, debug, file_almost_full))
+    {
+        BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, debug, all_properties);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, debug, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &auto_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_debug_auto_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_debug_auto_cfg auto_cfg; /**< declare main API struct */
+    bcmolt_debug_key key = { };     /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_debug_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_debug_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_set");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, debug, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, debug, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "cli_output");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, debug, cli_output, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, debug, cli_output, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEBUG, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_DEBUG_AUTO_CFG_ID_CLI_OUTPUT, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "file_almost_full");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, debug, file_almost_full, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, debug, file_almost_full, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEBUG, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_DEBUG_AUTO_CFG_ID_FILE_ALMOST_FULL, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);\n");
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_device_cfg_get(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_device_cfg cfg;          /**< declare main API struct */
+    bcmolt_device_key key = { };    /**< declare key */
+    uint8_t *list_mem;              /**< declare memory buffer for variable-sized lists */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_device_cfg cfg;\n");
+    bcmcli_log("bcmolt_device_key key = {  };\n");
+    bcmcli_log("uint8_t* list_mem;\n");
+    apicli_print_start(session, "bcmolt_cfg_get");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, device, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, device, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "system_mode");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, device, system_mode);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, device, system_mode);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "keepalive_interval");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, device, keepalive_interval);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, device, keepalive_interval);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "keepalive_tolerance");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, device, keepalive_tolerance);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, device, keepalive_tolerance);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "firmware_sw_version");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, device, firmware_sw_version);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, device, firmware_sw_version);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "host_sw_version");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, device, host_sw_version);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, device, host_sw_version);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "chip_revision");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, device, chip_revision);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, device, chip_revision);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "state");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, device, state);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, device, state);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "debug");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, device, debug);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, device, debug);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "nni_speed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, device, nni_speed);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, device, nni_speed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "protection_switching_ext_irq");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, device, protection_switching_ext_irq);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, device, protection_switching_ext_irq);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "epon_clock_transport_sample_delay");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, device, epon_clock_transport_sample_delay);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, device, epon_clock_transport_sample_delay);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "indication_shaping");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, device, indication_shaping);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, device, indication_shaping);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "chip_temperature");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, device, chip_temperature);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, device, chip_temperature);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "gpon_xgpon_tod_enable");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, device, gpon_xgpon_tod_enable);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, device, gpon_xgpon_tod_enable);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "gpon_xgpon_tod_gpio_pin");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, device, gpon_xgpon_tod_gpio_pin);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, device, gpon_xgpon_tod_gpio_pin);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "gpon_xgpon_tod_connected_internally");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, device, gpon_xgpon_tod_connected_internally);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, device, gpon_xgpon_tod_connected_internally);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "epon_8021_as_tod_format");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, device, epon_8021_as_tod_format);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, device, epon_8021_as_tod_format);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "epon_shaper_mode");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, device, epon_shaper_mode);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, device, epon_shaper_mode);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "embedded_image_list");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, device, embedded_image_list);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, device, embedded_image_list);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "chip_voltage");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, device, chip_voltage);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, device, chip_voltage);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "epon_tod_string");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, device, epon_tod_string);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, device, epon_tod_string);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "xgpon_num_of_onus");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, device, xgpon_num_of_onus);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, device, xgpon_num_of_onus);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "device_ip_address");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, device, device_ip_address);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, device, device_ip_address);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "device_udp_port");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, device, device_udp_port);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, device, device_udp_port);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tod_uart_baudrate");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, device, tod_uart_baudrate);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, device, tod_uart_baudrate);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "gpon_xgpon_tod_string_length");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, device, gpon_xgpon_tod_string_length);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, device, gpon_xgpon_tod_string_length);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_CFG_PROP_IS_SET(&cfg, device, system_mode) && !BCMOLT_CFG_PROP_IS_SET(&cfg, device, keepalive_interval) && !BCMOLT_CFG_PROP_IS_SET(&cfg, device, keepalive_tolerance) && !BCMOLT_CFG_PROP_IS_SET(&cfg, device, firmware_sw_version) && !BCMOLT_CFG_PROP_IS_SET(&cfg, device, host_sw_version) && !BCMOLT_CFG_PROP_IS_SET(&cfg, device, chip_revision) && !BCMOLT_CFG_PROP_IS_SET(&cfg, device, state) && !BCMOLT_CFG_PROP_IS_SET(&cfg, device, debug) && !BCMOLT_CFG_PROP_IS_SET(&cfg, device, nni_speed) && !BCMOLT_CFG_PROP_IS_SET(&cfg, device, protection_switching_ext_irq) && !BCMOLT_CFG_PROP_IS_SET(&cfg, device, epon_clock_transport_sample_delay) && !BCMOLT_CFG_PROP_IS_SET(&cfg, device, indication_shaping) && !BCMOLT_CFG_PROP_IS_SET(&cfg, device, chip_temperature) && !BCMOLT_CFG_PROP_IS_SET(&cfg, device, gpon_xgpon_tod_enable) && !BCMOLT_CFG_PROP_IS_SET(&cfg, device, gpon_xgpon_tod_gpio_pin) && !BCMOLT_CFG_PROP_IS_SET(&cfg, device, gpon_xgpon_tod_connected_internally) && !BCMOLT_CFG_PROP_IS_SET(&cfg, device, epon_8021_as_tod_format) && !BCMOLT_CFG_PROP_IS_SET(&cfg, device, epon_shaper_mode) && !BCMOLT_CFG_PROP_IS_SET(&cfg, device, embedded_image_list) && !BCMOLT_CFG_PROP_IS_SET(&cfg, device, chip_voltage) && !BCMOLT_CFG_PROP_IS_SET(&cfg, device, epon_tod_string) && !BCMOLT_CFG_PROP_IS_SET(&cfg, device, xgpon_num_of_onus) && !BCMOLT_CFG_PROP_IS_SET(&cfg, device, device_ip_address) && !BCMOLT_CFG_PROP_IS_SET(&cfg, device, device_udp_port) && !BCMOLT_CFG_PROP_IS_SET(&cfg, device, tod_uart_baudrate) && !BCMOLT_CFG_PROP_IS_SET(&cfg, device, gpon_xgpon_tod_string_length))
+    {
+        BCMOLT_CFG_PROP_GET(&cfg, device, all_properties);
+        bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, device, all_properties);\n");
+    }
+
+    /* set memory to use for variable-sized lists */
+    list_mem = apicli_byte_pool_calloc(byte_pool, APICLI_DYNAMIC_LIST_BUFFER_SIZE);
+    if (list_mem == NULL)
+    {
+        apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+        return BCM_ERR_NOMEM;
+    }
+
+    bcmcli_log("list_mem = bcmos_calloc(APICLI_DYNAMIC_LIST_BUFFER_SIZE);\n");
+    BCMOLT_CFG_LIST_BUF_SET(&cfg, device, list_mem, APICLI_DYNAMIC_LIST_BUFFER_SIZE);
+    bcmcli_log("BCMOLT_CFG_LIST_BUF_SET(&cfg, device, list_mem, APICLI_DYNAMIC_LIST_BUFFER_SIZE);\n");
+
+    /* call API */
+    err = bcmolt_cfg_get(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_get(device_id, &cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_device_cfg_set(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_device_cfg cfg;          /**< declare main API struct */
+    bcmolt_device_key key = { };    /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_device_cfg cfg;\n");
+    bcmcli_log("bcmolt_device_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_set");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, device, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, device, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "system_mode");
+    if (cli_parm != NULL)
+    {
+        bcmolt_system_mode val;
+        val = (bcmolt_system_mode) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, device, system_mode, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, device, system_mode, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEVICE_CFG_ID_SYSTEM_MODE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "keepalive_interval");
+    if (cli_parm != NULL)
+    {
+        uint32_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, device, keepalive_interval, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, device, keepalive_interval, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEVICE_CFG_ID_KEEPALIVE_INTERVAL, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "keepalive_tolerance");
+    if (cli_parm != NULL)
+    {
+        uint32_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, device, keepalive_tolerance, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, device, keepalive_tolerance, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEVICE_CFG_ID_KEEPALIVE_TOLERANCE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "debug.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_debug_device_cfg val = { };
+        cli_parm = bcmcli_find_named_parm(session, "debug.host_dma_rx_queue_size");
+        if (cli_parm != NULL)
+        {
+            val.host_dma_rx_queue_size = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "debug.host_dma_rx_queue_size is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "debug.host_dma_tx_queue_size");
+        if (cli_parm != NULL)
+        {
+            val.host_dma_tx_queue_size = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "debug.host_dma_tx_queue_size is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "debug.avs_control");
+        if (cli_parm != NULL)
+        {
+            val.avs_control = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "debug.avs_control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "debug.use_prev_pon_serdes_firmware");
+        if (cli_parm != NULL)
+        {
+            val.use_prev_pon_serdes_firmware = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "debug.use_prev_pon_serdes_firmware is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "debug.use_prev_nni_serdes_firmware");
+        if (cli_parm != NULL)
+        {
+            val.use_prev_nni_serdes_firmware = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "debug.use_prev_nni_serdes_firmware is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, device, debug, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_debug_device_cfg val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEVICE_CFG_ID_DEBUG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, device, debug, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "nni_speed.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_device_nni_speed val = { };
+        cli_parm = bcmcli_find_named_parm(session, "nni_speed.first_half");
+        if (cli_parm != NULL)
+        {
+            val.first_half = (bcmolt_nni_speed) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "nni_speed.first_half is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "nni_speed.second_half");
+        if (cli_parm != NULL)
+        {
+            val.second_half = (bcmolt_nni_speed) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "nni_speed.second_half is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, device, nni_speed, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_device_nni_speed val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEVICE_CFG_ID_NNI_SPEED, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, device, nni_speed, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "protection_switching_ext_irq");
+    if (cli_parm != NULL)
+    {
+        bcmolt_ext_irq val;
+        val = (bcmolt_ext_irq) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, device, protection_switching_ext_irq, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, device, protection_switching_ext_irq, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEVICE_CFG_ID_PROTECTION_SWITCHING_EXT_IRQ, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "epon_clock_transport_sample_delay");
+    if (cli_parm != NULL)
+    {
+        uint32_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, device, epon_clock_transport_sample_delay, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, device, epon_clock_transport_sample_delay, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEVICE_CFG_ID_EPON_CLOCK_TRANSPORT_SAMPLE_DELAY, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "indication_shaping.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_indication_shaping val = { };
+        cli_parm = bcmcli_find_named_parm(session, "indication_shaping.enabled");
+        if (cli_parm != NULL)
+        {
+            val.enabled = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "indication_shaping.enabled is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "indication_shaping.max_rate");
+        if (cli_parm != NULL)
+        {
+            val.max_rate = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "indication_shaping.max_rate is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "indication_shaping.max_burst");
+        if (cli_parm != NULL)
+        {
+            val.max_burst = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "indication_shaping.max_burst is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, device, indication_shaping, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_indication_shaping val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEVICE_CFG_ID_INDICATION_SHAPING, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, device, indication_shaping, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "gpon_xgpon_tod_enable");
+    if (cli_parm != NULL)
+    {
+        bcmolt_control_state val;
+        val = (bcmolt_control_state) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, device, gpon_xgpon_tod_enable, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, device, gpon_xgpon_tod_enable, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_ENABLE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "gpon_xgpon_tod_gpio_pin");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpio_pin val;
+        val = (bcmolt_gpio_pin) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, device, gpon_xgpon_tod_gpio_pin, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, device, gpon_xgpon_tod_gpio_pin, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_GPIO_PIN, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "gpon_xgpon_tod_connected_internally");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, device, gpon_xgpon_tod_connected_internally, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, device, gpon_xgpon_tod_connected_internally, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_CONNECTED_INTERNALLY, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "epon_8021_as_tod_format.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_str_256 val = { };
+        cli_parm = bcmcli_find_named_parm(session, "epon_8021_as_tod_format.str");
+        if (cli_parm != NULL)
+        {
+            snprintf(val.str, 256, "%s", cli_parm->value.string);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "epon_8021_as_tod_format.str is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, device, epon_8021_as_tod_format, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_str_256 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEVICE_CFG_ID_EPON_8021_AS_TOD_FORMAT, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, device, epon_8021_as_tod_format, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "epon_shaper_mode");
+    if (cli_parm != NULL)
+    {
+        bcmolt_shaper_mode val;
+        val = (bcmolt_shaper_mode) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, device, epon_shaper_mode, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, device, epon_shaper_mode, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEVICE_CFG_ID_EPON_SHAPER_MODE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "epon_tod_string.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_str_256 val = { };
+        cli_parm = bcmcli_find_named_parm(session, "epon_tod_string.str");
+        if (cli_parm != NULL)
+        {
+            snprintf(val.str, 256, "%s", cli_parm->value.string);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "epon_tod_string.str is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, device, epon_tod_string, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_str_256 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEVICE_CFG_ID_EPON_TOD_STRING, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, device, epon_tod_string, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "xgpon_num_of_onus");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_num_of_onus val;
+        val = (bcmolt_xgpon_num_of_onus) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, device, xgpon_num_of_onus, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, device, xgpon_num_of_onus, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEVICE_CFG_ID_XGPON_NUM_OF_ONUS, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "device_ip_address");
+    if (cli_parm != NULL)
+    {
+        bcmos_ipv4_address val;
+        val = apicli_unumber_to_ipv4(cli_parm->value.unumber);
+        BCMOLT_CFG_PROP_SET(&cfg, device, device_ip_address, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, device, device_ip_address, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEVICE_CFG_ID_DEVICE_IP_ADDRESS, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "device_udp_port");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, device, device_udp_port, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, device, device_udp_port, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEVICE_CFG_ID_DEVICE_UDP_PORT, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tod_uart_baudrate");
+    if (cli_parm != NULL)
+    {
+        bcmolt_uart_baudrate val;
+        val = (bcmolt_uart_baudrate) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, device, tod_uart_baudrate, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, device, tod_uart_baudrate, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEVICE_CFG_ID_TOD_UART_BAUDRATE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "gpon_xgpon_tod_string_length");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, device, gpon_xgpon_tod_string_length, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, device, gpon_xgpon_tod_string_length, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_STRING_LENGTH, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_set(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_set(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_device_cfg_clear(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmos_errno err;
+    bcmolt_device_cfg cfg;          /**< declare main API struct */
+    bcmolt_device_key key = { };    /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_device_cfg cfg;\n");
+    bcmcli_log("bcmolt_device_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_clear");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, device, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, device, key);\n");
+
+    /* call API */
+    err = bcmolt_cfg_clear(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_clear(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_device_cfg_get_multi(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_device_cfg cfg;          /**< declare main API struct */
+    bcmolt_device_key key = { };    /**< declare key */
+    bcmolt_msg_set *msg_set = NULL; /**< declare message set */
+    uint32_t max_msgs;              /**< declare max number of msgs to get */
+    bcmos_bool invert_filter;       /**< declare filter invert flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_device_cfg cfg;\n");
+    bcmcli_log("bcmolt_device_key key = {  };\n");
+    bcmcli_log("bcmolt_msg_set* msg_set = NULL;\n");
+    bcmcli_log("uint32_t max_msgs;\n");
+    bcmcli_log("bcmos_bool invert_filter;\n");
+    apicli_print_start(session, "bcmolt_cfg_get_multi");
+
+    /* set max number of msgs from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "max_msgs");
+    if (cli_parm != NULL)
+    {
+        max_msgs = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "max_msgs is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("max_msgs = %d;\n", max_msgs);
+
+    /* set filter invert flag from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "filter_invert");
+    if (cli_parm != NULL)
+    {
+        invert_filter = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "filter_invert is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("invert_filter = %s;\n", (invert_filter) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* allocate message set */
+    err = apicli_msg_set_alloc(byte_pool, BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    bcmcli_log("bcmolt_msg_set_alloc(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, device, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, device, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "filter.system_mode");
+    if (cli_parm != NULL)
+    {
+        bcmolt_system_mode val;
+        val = (bcmolt_system_mode) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, device, system_mode, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, device, system_mode, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEVICE_CFG_ID_SYSTEM_MODE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "system_mode");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, system_mode);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, system_mode);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.keepalive_interval");
+    if (cli_parm != NULL)
+    {
+        uint32_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, device, keepalive_interval, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, device, keepalive_interval, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEVICE_CFG_ID_KEEPALIVE_INTERVAL, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "keepalive_interval");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, keepalive_interval);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, keepalive_interval);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.keepalive_tolerance");
+    if (cli_parm != NULL)
+    {
+        uint32_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, device, keepalive_tolerance, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, device, keepalive_tolerance, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEVICE_CFG_ID_KEEPALIVE_TOLERANCE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "keepalive_tolerance");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, keepalive_tolerance);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, keepalive_tolerance);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.firmware_sw_version.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_firmware_sw_version val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.firmware_sw_version.major");
+        if (cli_parm != NULL)
+        {
+            val.major = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.firmware_sw_version.major is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.firmware_sw_version.minor");
+        if (cli_parm != NULL)
+        {
+            val.minor = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.firmware_sw_version.minor is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.firmware_sw_version.revision");
+        if (cli_parm != NULL)
+        {
+            val.revision = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.firmware_sw_version.revision is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.firmware_sw_version.model");
+        if (cli_parm != NULL)
+        {
+            val.model = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.firmware_sw_version.model is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.firmware_sw_version.build_time");
+        if (cli_parm != NULL)
+        {
+            snprintf(val.build_time, 32, "%s", cli_parm->value.string);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.firmware_sw_version.build_time is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, device, firmware_sw_version, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_firmware_sw_version val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEVICE_CFG_ID_FIRMWARE_SW_VERSION, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, device, firmware_sw_version, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "firmware_sw_version");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, firmware_sw_version);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, firmware_sw_version);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.host_sw_version.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_host_sw_version val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.host_sw_version.major");
+        if (cli_parm != NULL)
+        {
+            val.major = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.host_sw_version.major is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.host_sw_version.minor");
+        if (cli_parm != NULL)
+        {
+            val.minor = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.host_sw_version.minor is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.host_sw_version.revision");
+        if (cli_parm != NULL)
+        {
+            val.revision = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.host_sw_version.revision is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.host_sw_version.model");
+        if (cli_parm != NULL)
+        {
+            val.model = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.host_sw_version.model is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.host_sw_version.build_time");
+        if (cli_parm != NULL)
+        {
+            snprintf(val.build_time, 32, "%s", cli_parm->value.string);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.host_sw_version.build_time is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, device, host_sw_version, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_host_sw_version val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEVICE_CFG_ID_HOST_SW_VERSION, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, device, host_sw_version, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "host_sw_version");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, host_sw_version);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, host_sw_version);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.chip_revision");
+    if (cli_parm != NULL)
+    {
+        bcmolt_device_chip_revision val;
+        val = (bcmolt_device_chip_revision) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, device, chip_revision, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, device, chip_revision, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEVICE_CFG_ID_CHIP_REVISION, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "chip_revision");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, chip_revision);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, chip_revision);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.state");
+    if (cli_parm != NULL)
+    {
+        bcmolt_device_state val;
+        val = (bcmolt_device_state) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, device, state, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, device, state, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEVICE_CFG_ID_STATE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "state");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, state);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, state);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.debug.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_debug_device_cfg val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.debug.host_dma_rx_queue_size");
+        if (cli_parm != NULL)
+        {
+            val.host_dma_rx_queue_size = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.debug.host_dma_rx_queue_size is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.debug.host_dma_tx_queue_size");
+        if (cli_parm != NULL)
+        {
+            val.host_dma_tx_queue_size = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.debug.host_dma_tx_queue_size is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.debug.avs_control");
+        if (cli_parm != NULL)
+        {
+            val.avs_control = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.debug.avs_control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.debug.use_prev_pon_serdes_firmware");
+        if (cli_parm != NULL)
+        {
+            val.use_prev_pon_serdes_firmware = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.debug.use_prev_pon_serdes_firmware is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.debug.use_prev_nni_serdes_firmware");
+        if (cli_parm != NULL)
+        {
+            val.use_prev_nni_serdes_firmware = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.debug.use_prev_nni_serdes_firmware is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, device, debug, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_debug_device_cfg val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEVICE_CFG_ID_DEBUG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, device, debug, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "debug");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, debug);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, debug);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.nni_speed.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_device_nni_speed val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.nni_speed.first_half");
+        if (cli_parm != NULL)
+        {
+            val.first_half = (bcmolt_nni_speed) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.nni_speed.first_half is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.nni_speed.second_half");
+        if (cli_parm != NULL)
+        {
+            val.second_half = (bcmolt_nni_speed) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.nni_speed.second_half is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, device, nni_speed, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_device_nni_speed val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEVICE_CFG_ID_NNI_SPEED, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, device, nni_speed, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "nni_speed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, nni_speed);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, nni_speed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.protection_switching_ext_irq");
+    if (cli_parm != NULL)
+    {
+        bcmolt_ext_irq val;
+        val = (bcmolt_ext_irq) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, device, protection_switching_ext_irq, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, device, protection_switching_ext_irq, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEVICE_CFG_ID_PROTECTION_SWITCHING_EXT_IRQ, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "protection_switching_ext_irq");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, protection_switching_ext_irq);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, protection_switching_ext_irq);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.epon_clock_transport_sample_delay");
+    if (cli_parm != NULL)
+    {
+        uint32_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, device, epon_clock_transport_sample_delay, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, device, epon_clock_transport_sample_delay, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEVICE_CFG_ID_EPON_CLOCK_TRANSPORT_SAMPLE_DELAY, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "epon_clock_transport_sample_delay");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, epon_clock_transport_sample_delay);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, epon_clock_transport_sample_delay);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.indication_shaping.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_indication_shaping val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.indication_shaping.enabled");
+        if (cli_parm != NULL)
+        {
+            val.enabled = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.indication_shaping.enabled is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.indication_shaping.max_rate");
+        if (cli_parm != NULL)
+        {
+            val.max_rate = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.indication_shaping.max_rate is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.indication_shaping.max_burst");
+        if (cli_parm != NULL)
+        {
+            val.max_burst = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.indication_shaping.max_burst is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, device, indication_shaping, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_indication_shaping val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEVICE_CFG_ID_INDICATION_SHAPING, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, device, indication_shaping, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "indication_shaping");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, indication_shaping);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, indication_shaping);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.chip_temperature");
+    if (cli_parm != NULL)
+    {
+        uint32_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, device, chip_temperature, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, device, chip_temperature, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEVICE_CFG_ID_CHIP_TEMPERATURE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "chip_temperature");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, chip_temperature);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, chip_temperature);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.gpon_xgpon_tod_enable");
+    if (cli_parm != NULL)
+    {
+        bcmolt_control_state val;
+        val = (bcmolt_control_state) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, device, gpon_xgpon_tod_enable, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, device, gpon_xgpon_tod_enable, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_ENABLE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "gpon_xgpon_tod_enable");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, gpon_xgpon_tod_enable);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, gpon_xgpon_tod_enable);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.gpon_xgpon_tod_gpio_pin");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpio_pin val;
+        val = (bcmolt_gpio_pin) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, device, gpon_xgpon_tod_gpio_pin, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, device, gpon_xgpon_tod_gpio_pin, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_GPIO_PIN, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "gpon_xgpon_tod_gpio_pin");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, gpon_xgpon_tod_gpio_pin);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, gpon_xgpon_tod_gpio_pin);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.gpon_xgpon_tod_connected_internally");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, device, gpon_xgpon_tod_connected_internally, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, device, gpon_xgpon_tod_connected_internally, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_CONNECTED_INTERNALLY, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "gpon_xgpon_tod_connected_internally");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, gpon_xgpon_tod_connected_internally);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, gpon_xgpon_tod_connected_internally);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.epon_8021_as_tod_format.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_str_256 val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.epon_8021_as_tod_format.str");
+        if (cli_parm != NULL)
+        {
+            snprintf(val.str, 256, "%s", cli_parm->value.string);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.epon_8021_as_tod_format.str is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, device, epon_8021_as_tod_format, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_str_256 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEVICE_CFG_ID_EPON_8021_AS_TOD_FORMAT, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, device, epon_8021_as_tod_format, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "epon_8021_as_tod_format");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, epon_8021_as_tod_format);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, epon_8021_as_tod_format);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.epon_shaper_mode");
+    if (cli_parm != NULL)
+    {
+        bcmolt_shaper_mode val;
+        val = (bcmolt_shaper_mode) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, device, epon_shaper_mode, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, device, epon_shaper_mode, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEVICE_CFG_ID_EPON_SHAPER_MODE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "epon_shaper_mode");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, epon_shaper_mode);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, epon_shaper_mode);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.embedded_image_list.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_embedded_image_entry_list_u8 val = { };
+        int32_t i0;
+        val.val = apicli_byte_pool_calloc(byte_pool, cli_parm->array_size * sizeof(*val.val));
+        if (val.val == NULL)
+        {
+            apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+            return BCM_ERR_NOMEM;
+        }
+
+        val.len = cli_parm->array_size;
+        cli_parm = bcmcli_find_named_parm(session, "filter.embedded_image_list.image_type");
+        if (cli_parm != NULL)
+        {
+            if (cli_parm->array_size != val.len)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.embedded_image_list.image_type is a different size than other arrays in the struct\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i0 = 0; i0 < val.len; i0++)
+            {
+                val.val[i0].image_type = (bcmolt_device_image_type) cli_parm->values[i0].enum_val;
+            }
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.embedded_image_list.image_size");
+        if (cli_parm != NULL)
+        {
+            if (cli_parm->array_size != val.len)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.embedded_image_list.image_size is a different size than other arrays in the struct\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i0 = 0; i0 < val.len; i0++)
+            {
+                val.val[i0].image_size = cli_parm->values[i0].unumber;
+            }
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.embedded_image_list.crc32");
+        if (cli_parm != NULL)
+        {
+            if (cli_parm->array_size != val.len)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.embedded_image_list.crc32 is a different size than other arrays in the struct\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i0 = 0; i0 < val.len; i0++)
+            {
+                val.val[i0].crc32 = cli_parm->values[i0].unumber;
+            }
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.embedded_image_list.status");
+        if (cli_parm != NULL)
+        {
+            if (cli_parm->array_size != val.len)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.embedded_image_list.status is a different size than other arrays in the struct\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i0 = 0; i0 < val.len; i0++)
+            {
+                val.val[i0].status = (bcmolt_embedded_image_transfer_status) cli_parm->values[i0].enum_val;
+            }
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.embedded_image_list.image_name");
+        if (cli_parm != NULL)
+        {
+            if (cli_parm->array_size != val.len)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.embedded_image_list.image_name is a different size than other arrays in the struct\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i0 = 0; i0 < val.len; i0++)
+            {
+                snprintf(val.val[i0].image_name, 64, "%s", cli_parm->values[i0].string);
+            }
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, device, embedded_image_list, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_embedded_image_entry_list_u8 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEVICE_CFG_ID_EMBEDDED_IMAGE_LIST, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, device, embedded_image_list, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "embedded_image_list");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, embedded_image_list);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, embedded_image_list);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.chip_voltage");
+    if (cli_parm != NULL)
+    {
+        uint32_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, device, chip_voltage, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, device, chip_voltage, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEVICE_CFG_ID_CHIP_VOLTAGE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "chip_voltage");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, chip_voltage);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, chip_voltage);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.epon_tod_string.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_str_256 val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.epon_tod_string.str");
+        if (cli_parm != NULL)
+        {
+            snprintf(val.str, 256, "%s", cli_parm->value.string);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.epon_tod_string.str is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, device, epon_tod_string, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_str_256 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEVICE_CFG_ID_EPON_TOD_STRING, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, device, epon_tod_string, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "epon_tod_string");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, epon_tod_string);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, epon_tod_string);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.xgpon_num_of_onus");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_num_of_onus val;
+        val = (bcmolt_xgpon_num_of_onus) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, device, xgpon_num_of_onus, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, device, xgpon_num_of_onus, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEVICE_CFG_ID_XGPON_NUM_OF_ONUS, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "xgpon_num_of_onus");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, xgpon_num_of_onus);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, xgpon_num_of_onus);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.device_ip_address");
+    if (cli_parm != NULL)
+    {
+        bcmos_ipv4_address val;
+        val = apicli_unumber_to_ipv4(cli_parm->value.unumber);
+        BCMOLT_CFG_PROP_SET(&cfg, device, device_ip_address, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, device, device_ip_address, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEVICE_CFG_ID_DEVICE_IP_ADDRESS, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "device_ip_address");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, device_ip_address);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, device_ip_address);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.device_udp_port");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, device, device_udp_port, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, device, device_udp_port, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEVICE_CFG_ID_DEVICE_UDP_PORT, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "device_udp_port");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, device_udp_port);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, device_udp_port);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.tod_uart_baudrate");
+    if (cli_parm != NULL)
+    {
+        bcmolt_uart_baudrate val;
+        val = (bcmolt_uart_baudrate) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, device, tod_uart_baudrate, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, device, tod_uart_baudrate, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEVICE_CFG_ID_TOD_UART_BAUDRATE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tod_uart_baudrate");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, tod_uart_baudrate);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, tod_uart_baudrate);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.gpon_xgpon_tod_string_length");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, device, gpon_xgpon_tod_string_length, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, device, gpon_xgpon_tod_string_length, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_STRING_LENGTH, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "gpon_xgpon_tod_string_length");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, gpon_xgpon_tod_string_length);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, gpon_xgpon_tod_string_length);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, device, system_mode) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, device, keepalive_interval) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, device, keepalive_tolerance) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, device, firmware_sw_version) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, device, host_sw_version) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, device, chip_revision) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, device, state) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, device, debug) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, device, nni_speed) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, device, protection_switching_ext_irq) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, device, epon_clock_transport_sample_delay) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, device, indication_shaping) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, device, chip_temperature) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, device, gpon_xgpon_tod_enable) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, device, gpon_xgpon_tod_gpio_pin) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, device, gpon_xgpon_tod_connected_internally) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, device, epon_8021_as_tod_format) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, device, epon_shaper_mode) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, device, embedded_image_list) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, device, chip_voltage) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, device, epon_tod_string) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, device, xgpon_num_of_onus) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, device, device_ip_address) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, device, device_udp_port) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, device, tod_uart_baudrate) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, device, gpon_xgpon_tod_string_length))
+    {
+        BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, all_properties);
+        bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, device, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);
+    bcmcli_log("bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_device_oper_connect_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmos_errno err;
+    bcmolt_device_connect oper;     /**< declare main API struct */
+    bcmolt_device_key key = { };    /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_device_connect oper;\n");
+    bcmcli_log("bcmolt_device_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, device, connect, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, device, connect, key);\n");
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_device_oper_disconnect_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmos_errno err;
+    bcmolt_device_disconnect oper;  /**< declare main API struct */
+    bcmolt_device_key key = { };    /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_device_disconnect oper;\n");
+    bcmcli_log("bcmolt_device_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, device, disconnect, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, device, disconnect, key);\n");
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_device_oper_reset_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_device_reset oper;       /**< declare main API struct */
+    bcmolt_device_key key = { };    /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_device_reset oper;\n");
+    bcmcli_log("bcmolt_device_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, device, reset, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, device, reset, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "mode");
+    if (cli_parm != NULL)
+    {
+        bcmolt_device_reset_mode val;
+        val = (bcmolt_device_reset_mode) cli_parm->value.enum_val;
+        BCMOLT_OPER_PROP_SET(&oper, device, reset, mode, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, device, reset, mode, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_OPER, BCMOLT_DEVICE_OPER_ID_RESET, BCMOLT_DEVICE_RESET_ID_MODE, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_device_oper_host_keep_alive_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_device_host_keep_alive oper; /**< declare main API struct */
+    bcmolt_device_key key = { };        /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_device_host_keep_alive oper;\n");
+    bcmcli_log("bcmolt_device_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, device, host_keep_alive, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, device, host_keep_alive, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "sequence_number");
+    if (cli_parm != NULL)
+    {
+        uint32_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_OPER_PROP_SET(&oper, device, host_keep_alive, sequence_number, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, device, host_keep_alive, sequence_number, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_OPER, BCMOLT_DEVICE_OPER_ID_HOST_KEEP_ALIVE, BCMOLT_DEVICE_HOST_KEEP_ALIVE_ID_SEQUENCE_NUMBER, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "time_stamp");
+    if (cli_parm != NULL)
+    {
+        uint32_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_OPER_PROP_SET(&oper, device, host_keep_alive, time_stamp, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, device, host_keep_alive, time_stamp, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_OPER, BCMOLT_DEVICE_OPER_ID_HOST_KEEP_ALIVE, BCMOLT_DEVICE_HOST_KEEP_ALIVE_ID_TIME_STAMP, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_device_oper_sw_upgrade_activate_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmos_errno err;
+    bcmolt_device_sw_upgrade_activate oper; /**< declare main API struct */
+    bcmolt_device_key key = { };            /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_device_sw_upgrade_activate oper;\n");
+    bcmcli_log("bcmolt_device_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, device, sw_upgrade_activate, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, device, sw_upgrade_activate, key);\n");
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_device_oper_image_transfer_start_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_device_image_transfer_start oper;    /**< declare main API struct */
+    bcmolt_device_key key = { };                /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_device_image_transfer_start oper;\n");
+    bcmcli_log("bcmolt_device_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, device, image_transfer_start, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, device, image_transfer_start, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "image_type");
+    if (cli_parm != NULL)
+    {
+        bcmolt_device_image_type val;
+        val = (bcmolt_device_image_type) cli_parm->value.enum_val;
+        BCMOLT_OPER_PROP_SET(&oper, device, image_transfer_start, image_type, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, device, image_transfer_start, image_type, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_OPER, BCMOLT_DEVICE_OPER_ID_IMAGE_TRANSFER_START, BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID_IMAGE_TYPE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "image_size");
+    if (cli_parm != NULL)
+    {
+        uint32_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_OPER_PROP_SET(&oper, device, image_transfer_start, image_size, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, device, image_transfer_start, image_size, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_OPER, BCMOLT_DEVICE_OPER_ID_IMAGE_TRANSFER_START, BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID_IMAGE_SIZE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "crc32");
+    if (cli_parm != NULL)
+    {
+        uint32_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_OPER_PROP_SET(&oper, device, image_transfer_start, crc32, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, device, image_transfer_start, crc32, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_OPER, BCMOLT_DEVICE_OPER_ID_IMAGE_TRANSFER_START, BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID_CRC32, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "image_name.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_str_64 val = { };
+        cli_parm = bcmcli_find_named_parm(session, "image_name.str");
+        if (cli_parm != NULL)
+        {
+            snprintf(val.str, 64, "%s", cli_parm->value.string);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "image_name.str is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_OPER_PROP_SET(&oper, device, image_transfer_start, image_name, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_str_64 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_OPER, BCMOLT_DEVICE_OPER_ID_IMAGE_TRANSFER_START, BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID_IMAGE_NAME, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, device, image_transfer_start, image_name, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_device_oper_image_transfer_data_submit(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_device_image_transfer_data oper; /**< declare main API struct */
+    bcmolt_device_key key = { };            /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_device_image_transfer_data oper;\n");
+    bcmcli_log("bcmolt_device_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, device, image_transfer_data, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, device, image_transfer_data, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "block_number");
+    if (cli_parm != NULL)
+    {
+        uint32_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_OPER_PROP_SET(&oper, device, image_transfer_data, block_number, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, device, image_transfer_data, block_number, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_OPER, BCMOLT_DEVICE_OPER_ID_IMAGE_TRANSFER_DATA, BCMOLT_DEVICE_IMAGE_TRANSFER_DATA_ID_BLOCK_NUMBER, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "more_data");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_OPER_PROP_SET(&oper, device, image_transfer_data, more_data, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, device, image_transfer_data, more_data, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_OPER, BCMOLT_DEVICE_OPER_ID_IMAGE_TRANSFER_DATA, BCMOLT_DEVICE_IMAGE_TRANSFER_DATA_ID_MORE_DATA, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "data");
+    if (cli_parm != NULL)
+    {
+        bcmolt_u8_list_u16_hex val = { };
+        val.len = bcmolt_buf_get_used(&cli_parm->value.buffer);
+        val.val = apicli_byte_pool_calloc(byte_pool, val.len);
+        if (val.val == NULL)
+        {
+            apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+            return BCM_ERR_NOMEM;
+        }
+
+        bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+        bcmolt_buf_read(&cli_parm->value.buffer, val.val, val.len);
+        BCMOLT_OPER_PROP_SET(&oper, device, image_transfer_data, data, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_u8_list_u16_hex val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_OPER, BCMOLT_DEVICE_OPER_ID_IMAGE_TRANSFER_DATA, BCMOLT_DEVICE_IMAGE_TRANSFER_DATA_ID_DATA, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, device, image_transfer_data, data, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_device_oper_run_ddr_test_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_device_run_ddr_test oper;    /**< declare main API struct */
+    bcmolt_device_key key = { };        /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_device_run_ddr_test oper;\n");
+    bcmcli_log("bcmolt_device_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, device, run_ddr_test, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, device, run_ddr_test, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "cpu");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_OPER_PROP_SET(&oper, device, run_ddr_test, cpu, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, device, run_ddr_test, cpu, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_OPER, BCMOLT_DEVICE_OPER_ID_RUN_DDR_TEST, BCMOLT_DEVICE_RUN_DDR_TEST_ID_CPU, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ras_0");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_OPER_PROP_SET(&oper, device, run_ddr_test, ras_0, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, device, run_ddr_test, ras_0, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_OPER, BCMOLT_DEVICE_OPER_ID_RUN_DDR_TEST, BCMOLT_DEVICE_RUN_DDR_TEST_ID_RAS_0, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ras_1");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_OPER_PROP_SET(&oper, device, run_ddr_test, ras_1, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, device, run_ddr_test, ras_1, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_OPER, BCMOLT_DEVICE_OPER_ID_RUN_DDR_TEST, BCMOLT_DEVICE_RUN_DDR_TEST_ID_RAS_1, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_device_auto_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_device_auto_cfg auto_cfg;    /**< declare main API struct */
+    bcmolt_device_key key = { };        /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_device_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_device_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_get");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, device, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, device, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "connection_complete");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, device, connection_complete);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, device, connection_complete);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "connection_established");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, device, connection_established);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, device, connection_established);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "connection_failure");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, device, connection_failure);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, device, connection_failure);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ddr_test_complete");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, device, ddr_test_complete);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, device, ddr_test_complete);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "device_keep_alive");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, device, device_keep_alive);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, device, device_keep_alive);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "device_ready");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, device, device_ready);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, device, device_ready);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "disconnection_complete");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, device, disconnection_complete);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, device, disconnection_complete);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "image_transfer_complete");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, device, image_transfer_complete);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, device, image_transfer_complete);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "indications_dropped");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, device, indications_dropped);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, device, indications_dropped);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "sw_error");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, device, sw_error);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, device, sw_error);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "sw_exception");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, device, sw_exception);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, device, sw_exception);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, device, connection_complete) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, device, connection_established) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, device, connection_failure) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, device, ddr_test_complete) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, device, device_keep_alive) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, device, device_ready) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, device, disconnection_complete) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, device, image_transfer_complete) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, device, indications_dropped) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, device, sw_error) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, device, sw_exception))
+    {
+        BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, device, all_properties);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, device, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &auto_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_device_auto_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_device_auto_cfg auto_cfg;    /**< declare main API struct */
+    bcmolt_device_key key = { };        /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_device_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_device_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_set");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, device, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, device, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "connection_complete");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, device, connection_complete, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, device, connection_complete, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_DEVICE_AUTO_CFG_ID_CONNECTION_COMPLETE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "connection_established");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, device, connection_established, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, device, connection_established, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_DEVICE_AUTO_CFG_ID_CONNECTION_ESTABLISHED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "connection_failure");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, device, connection_failure, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, device, connection_failure, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_DEVICE_AUTO_CFG_ID_CONNECTION_FAILURE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ddr_test_complete");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, device, ddr_test_complete, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, device, ddr_test_complete, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_DEVICE_AUTO_CFG_ID_DDR_TEST_COMPLETE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "device_keep_alive");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, device, device_keep_alive, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, device, device_keep_alive, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_DEVICE_AUTO_CFG_ID_DEVICE_KEEP_ALIVE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "device_ready");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, device, device_ready, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, device, device_ready, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_DEVICE_AUTO_CFG_ID_DEVICE_READY, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "disconnection_complete");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, device, disconnection_complete, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, device, disconnection_complete, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_DEVICE_AUTO_CFG_ID_DISCONNECTION_COMPLETE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "image_transfer_complete");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, device, image_transfer_complete, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, device, image_transfer_complete, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_DEVICE_AUTO_CFG_ID_IMAGE_TRANSFER_COMPLETE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "indications_dropped");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, device, indications_dropped, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, device, indications_dropped, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_DEVICE_AUTO_CFG_ID_INDICATIONS_DROPPED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "sw_error");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, device, sw_error, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, device, sw_error, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_DEVICE_AUTO_CFG_ID_SW_ERROR, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "sw_exception");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, device, sw_exception, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, device, sw_exception, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_DEVICE, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_DEVICE_AUTO_CFG_ID_SW_EXCEPTION, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);\n");
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_denied_link_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_denied_link_cfg cfg;        /**< declare main API struct */
+    bcmolt_epon_denied_link_key key = { };  /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_denied_link_cfg cfg;\n");
+    bcmcli_log("bcmolt_epon_denied_link_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_DENIED_LINK, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_DENIED_LINK_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "mac_address");
+    if (cli_parm != NULL)
+    {
+        key.mac_address = cli_parm->value.mac;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "mac_address is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.mac_address = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_DENIED_LINK, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_DENIED_LINK_KEY_ID_MAC_ADDRESS, &key.mac_address);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, epon_denied_link, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, epon_denied_link, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "alarm_state");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_denied_link, alarm_state);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_denied_link, alarm_state);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_CFG_PROP_IS_SET(&cfg, epon_denied_link, alarm_state))
+    {
+        BCMOLT_CFG_PROP_GET(&cfg, epon_denied_link, all_properties);
+        bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_denied_link, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_get(device_id, &cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_denied_link_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_denied_link_cfg cfg;        /**< declare main API struct */
+    bcmolt_epon_denied_link_key key = { };  /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_denied_link_cfg cfg;\n");
+    bcmcli_log("bcmolt_epon_denied_link_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_DENIED_LINK, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_DENIED_LINK_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "mac_address");
+    if (cli_parm != NULL)
+    {
+        key.mac_address = cli_parm->value.mac;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "mac_address is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.mac_address = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_DENIED_LINK, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_DENIED_LINK_KEY_ID_MAC_ADDRESS, &key.mac_address);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, epon_denied_link, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, epon_denied_link, key);\n");
+
+    /* decode API parameters from CLI */
+
+    /* call API */
+    err = bcmolt_cfg_set(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_set(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_denied_link_cfg_clear(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_denied_link_cfg cfg;        /**< declare main API struct */
+    bcmolt_epon_denied_link_key key = { };  /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_denied_link_cfg cfg;\n");
+    bcmcli_log("bcmolt_epon_denied_link_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_clear");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_DENIED_LINK, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_DENIED_LINK_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "mac_address");
+    if (cli_parm != NULL)
+    {
+        key.mac_address = cli_parm->value.mac;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "mac_address is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.mac_address = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_DENIED_LINK, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_DENIED_LINK_KEY_ID_MAC_ADDRESS, &key.mac_address);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, epon_denied_link, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, epon_denied_link, key);\n");
+
+    /* call API */
+    err = bcmolt_cfg_clear(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_clear(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_denied_link_cfg_get_multi(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_denied_link_cfg cfg;        /**< declare main API struct */
+    bcmolt_epon_denied_link_key key = { };  /**< declare key */
+    bcmolt_msg_set *msg_set = NULL;         /**< declare message set */
+    uint32_t max_msgs;                      /**< declare max number of msgs to get */
+    bcmos_bool invert_filter;               /**< declare filter invert flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_denied_link_cfg cfg;\n");
+    bcmcli_log("bcmolt_epon_denied_link_key key = {  };\n");
+    bcmcli_log("bcmolt_msg_set* msg_set = NULL;\n");
+    bcmcli_log("uint32_t max_msgs;\n");
+    bcmcli_log("bcmos_bool invert_filter;\n");
+    apicli_print_start(session, "bcmolt_cfg_get_multi");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_DENIED_LINK, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_DENIED_LINK_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "mac_address");
+    if (cli_parm != NULL)
+    {
+        key.mac_address = cli_parm->value.mac;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "mac_address is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.mac_address = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_DENIED_LINK, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_DENIED_LINK_KEY_ID_MAC_ADDRESS, &key.mac_address);
+    bcmcli_log(";\n");
+
+    /* set max number of msgs from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "max_msgs");
+    if (cli_parm != NULL)
+    {
+        max_msgs = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "max_msgs is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("max_msgs = %d;\n", max_msgs);
+
+    /* set filter invert flag from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "filter_invert");
+    if (cli_parm != NULL)
+    {
+        invert_filter = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "filter_invert is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("invert_filter = %s;\n", (invert_filter) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* allocate message set */
+    err = apicli_msg_set_alloc(byte_pool, BCMOLT_OBJ_ID_EPON_DENIED_LINK, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    bcmcli_log("bcmolt_msg_set_alloc(BCMOLT_OBJ_ID_EPON_DENIED_LINK, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, epon_denied_link, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, epon_denied_link, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.alarm_state.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_denied_link_alarm_state val = { };
+        cli_parm = bcmcli_find_parm_by_prefix(session, "filter.alarm_state.unknown_link_violation.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.unknown_link_violation.link_rate");
+            if (cli_parm != NULL)
+            {
+                val.unknown_link_violation.link_rate = (bcmolt_epon_link_rate) cli_parm->value.enum_val;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.unknown_link_violation.link_rate is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.unknown_link_violation.alarm_status");
+            if (cli_parm != NULL)
+            {
+                val.unknown_link_violation.alarm_status = (bcmolt_status) cli_parm->value.enum_val;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.unknown_link_violation.alarm_status is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.unknown_link_violation is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.overhead_profile_violation");
+        if (cli_parm != NULL)
+        {
+            val.overhead_profile_violation = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.overhead_profile_violation is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.max_link_violation");
+        if (cli_parm != NULL)
+        {
+            val.max_link_violation = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.max_link_violation is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.llid_pool_empty_violation");
+        if (cli_parm != NULL)
+        {
+            val.llid_pool_empty_violation = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.llid_pool_empty_violation is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "filter.alarm_state.laser_on_off_violation.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.laser_on_off_violation.laser_on_time");
+            if (cli_parm != NULL)
+            {
+                val.laser_on_off_violation.laser_on_time = (bcmolt_time_quanta) cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.laser_on_off_violation.laser_on_time is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.laser_on_off_violation.laser_off_time");
+            if (cli_parm != NULL)
+            {
+                val.laser_on_off_violation.laser_off_time = (bcmolt_time_quanta) cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.laser_on_off_violation.laser_off_time is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.laser_on_off_violation.alarm_status");
+            if (cli_parm != NULL)
+            {
+                val.laser_on_off_violation.alarm_status = (bcmolt_status) cli_parm->value.enum_val;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.laser_on_off_violation.alarm_status is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.laser_on_off_violation is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.system_resource_violation");
+        if (cli_parm != NULL)
+        {
+            val.system_resource_violation = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.system_resource_violation is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "filter.alarm_state.range_violation.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.range_violation.range");
+            if (cli_parm != NULL)
+            {
+                val.range_violation.range = (bcmolt_time_quanta) cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.range_violation.range is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.range_violation.alarm_status");
+            if (cli_parm != NULL)
+            {
+                val.range_violation.alarm_status = (bcmolt_status) cli_parm->value.enum_val;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.range_violation.alarm_status is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.range_violation is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.tdm_channels_exhausted");
+        if (cli_parm != NULL)
+        {
+            val.tdm_channels_exhausted = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.tdm_channels_exhausted is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "filter.alarm_state.rogue_violation.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.rogue_violation.denied_llid");
+            if (cli_parm != NULL)
+            {
+                val.rogue_violation.denied_llid = (bcmolt_epon_llid) cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.rogue_violation.denied_llid is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.rogue_violation.denied_range");
+            if (cli_parm != NULL)
+            {
+                val.rogue_violation.denied_range = (bcmolt_time_quanta) cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.rogue_violation.denied_range is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.rogue_violation.alarm_status");
+            if (cli_parm != NULL)
+            {
+                val.rogue_violation.alarm_status = (bcmolt_status) cli_parm->value.enum_val;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.rogue_violation.alarm_status is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.rogue_violation is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.upstream_bandwidth_violation");
+        if (cli_parm != NULL)
+        {
+            val.upstream_bandwidth_violation = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.upstream_bandwidth_violation is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_denied_link, alarm_state, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_epon_denied_link_alarm_state val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_DENIED_LINK, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_DENIED_LINK_CFG_ID_ALARM_STATE, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_denied_link, alarm_state, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "alarm_state");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_denied_link, alarm_state);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_denied_link, alarm_state);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_denied_link, alarm_state))
+    {
+        BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_denied_link, all_properties);
+        bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_denied_link, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);
+    bcmcli_log("bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_denied_link_auto_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_denied_link_auto_cfg auto_cfg;  /**< declare main API struct */
+    bcmolt_epon_denied_link_key key = { };      /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_denied_link_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_epon_denied_link_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_get");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, epon_denied_link, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, epon_denied_link, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "laser_on_off_violation");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_denied_link, laser_on_off_violation);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_denied_link, laser_on_off_violation);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "llid_pool_empty_violation");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_denied_link, llid_pool_empty_violation);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_denied_link, llid_pool_empty_violation);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "max_link_violation");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_denied_link, max_link_violation);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_denied_link, max_link_violation);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "overhead_profile_violation");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_denied_link, overhead_profile_violation);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_denied_link, overhead_profile_violation);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "range_violation");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_denied_link, range_violation);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_denied_link, range_violation);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rogue_violation");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_denied_link, rogue_violation);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_denied_link, rogue_violation);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "system_resource_violation");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_denied_link, system_resource_violation);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_denied_link, system_resource_violation);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tdm_channels_exhausted");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_denied_link, tdm_channels_exhausted);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_denied_link, tdm_channels_exhausted);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "unknown_link_violation");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_denied_link, unknown_link_violation);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_denied_link, unknown_link_violation);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "upstream_bandwidth_violation");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_denied_link, upstream_bandwidth_violation);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_denied_link, upstream_bandwidth_violation);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_denied_link, laser_on_off_violation) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_denied_link, llid_pool_empty_violation) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_denied_link, max_link_violation) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_denied_link, overhead_profile_violation) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_denied_link, range_violation) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_denied_link, rogue_violation) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_denied_link, system_resource_violation) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_denied_link, tdm_channels_exhausted) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_denied_link, unknown_link_violation) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_denied_link, upstream_bandwidth_violation))
+    {
+        BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_denied_link, all_properties);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_denied_link, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &auto_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_denied_link_auto_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_denied_link_auto_cfg auto_cfg;  /**< declare main API struct */
+    bcmolt_epon_denied_link_key key = { };      /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_denied_link_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_epon_denied_link_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_set");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, epon_denied_link, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, epon_denied_link, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "laser_on_off_violation");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_denied_link, laser_on_off_violation, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_denied_link, laser_on_off_violation, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_DENIED_LINK, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_LASER_ON_OFF_VIOLATION, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "llid_pool_empty_violation");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_denied_link, llid_pool_empty_violation, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_denied_link, llid_pool_empty_violation, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_DENIED_LINK, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_LLID_POOL_EMPTY_VIOLATION, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "max_link_violation");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_denied_link, max_link_violation, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_denied_link, max_link_violation, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_DENIED_LINK, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_MAX_LINK_VIOLATION, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "overhead_profile_violation");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_denied_link, overhead_profile_violation, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_denied_link, overhead_profile_violation, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_DENIED_LINK, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_OVERHEAD_PROFILE_VIOLATION, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "range_violation");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_denied_link, range_violation, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_denied_link, range_violation, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_DENIED_LINK, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_RANGE_VIOLATION, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rogue_violation");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_denied_link, rogue_violation, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_denied_link, rogue_violation, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_DENIED_LINK, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_ROGUE_VIOLATION, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "system_resource_violation");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_denied_link, system_resource_violation, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_denied_link, system_resource_violation, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_DENIED_LINK, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_SYSTEM_RESOURCE_VIOLATION, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tdm_channels_exhausted");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_denied_link, tdm_channels_exhausted, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_denied_link, tdm_channels_exhausted, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_DENIED_LINK, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_TDM_CHANNELS_EXHAUSTED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "unknown_link_violation");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_denied_link, unknown_link_violation, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_denied_link, unknown_link_violation, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_DENIED_LINK, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_UNKNOWN_LINK_VIOLATION, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "upstream_bandwidth_violation");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_denied_link, upstream_bandwidth_violation, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_denied_link, upstream_bandwidth_violation, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_DENIED_LINK, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_UPSTREAM_BANDWIDTH_VIOLATION, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);\n");
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_link_cfg_get(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_link_cfg cfg;       /**< declare main API struct */
+    bcmolt_epon_link_key key = { }; /**< declare key */
+    uint8_t *list_mem;              /**< declare memory buffer for variable-sized lists */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_link_cfg cfg;\n");
+    bcmcli_log("bcmolt_epon_link_key key = {  };\n");
+    bcmcli_log("uint8_t* list_mem;\n");
+    apicli_print_start(session, "bcmolt_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_LINK_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "mac_address");
+    if (cli_parm != NULL)
+    {
+        key.mac_address = cli_parm->value.mac;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "mac_address is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.mac_address = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_LINK_KEY_ID_MAC_ADDRESS, &key.mac_address);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, epon_link, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, epon_link, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "link_rate");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_link, link_rate);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_link, link_rate);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "state_flags");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_link, state_flags);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_link, state_flags);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "llid");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_link, llid);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_link, llid);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "laser_on_time_tq");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_link, laser_on_time_tq);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_link, laser_on_time_tq);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "laser_off_time_tq");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_link, laser_off_time_tq);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_link, laser_off_time_tq);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "range_value_tq");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_link, range_value_tq);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_link, range_value_tq);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "distance");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_link, distance);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_link, distance);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "alarm_state");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_link, alarm_state);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_link, alarm_state);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tunnel_id");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_link, tunnel_id);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_link, tunnel_id);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_link, onu_id);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_link, onu_id);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "min_laser_overhead");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_link, min_laser_overhead);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_link, min_laser_overhead);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "key_exchange_config");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_link, key_exchange_config);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_link, key_exchange_config);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "epon_encryption");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_link, epon_encryption);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_link, epon_encryption);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "fec_enable");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_link, fec_enable);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_link, fec_enable);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "oam_heartbeat_config");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_link, oam_heartbeat_config);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_link, oam_heartbeat_config);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "upstream_bandwidth");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_link, upstream_bandwidth);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_link, upstream_bandwidth);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ubd_info");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_link, ubd_info);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_link, ubd_info);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "clock_transport_enable");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_link, clock_transport_enable);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_link, clock_transport_enable);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "pending_grants");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_link, pending_grants);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_link, pending_grants);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "link_type");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_link, link_type);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_link, link_type);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_CFG_PROP_IS_SET(&cfg, epon_link, link_rate) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_link, state_flags) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_link, llid) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_link, laser_on_time_tq) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_link, laser_off_time_tq) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_link, range_value_tq) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_link, distance) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_link, alarm_state) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_link, tunnel_id) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_link, onu_id) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_link, min_laser_overhead) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_link, key_exchange_config) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_link, epon_encryption) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_link, fec_enable) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_link, oam_heartbeat_config) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_link, upstream_bandwidth) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_link, ubd_info) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_link, clock_transport_enable) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_link, pending_grants) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_link, link_type))
+    {
+        BCMOLT_CFG_PROP_GET(&cfg, epon_link, all_properties);
+        bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_link, all_properties);\n");
+    }
+
+    /* set memory to use for variable-sized lists */
+    list_mem = apicli_byte_pool_calloc(byte_pool, APICLI_DYNAMIC_LIST_BUFFER_SIZE);
+    if (list_mem == NULL)
+    {
+        apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+        return BCM_ERR_NOMEM;
+    }
+
+    bcmcli_log("list_mem = bcmos_calloc(APICLI_DYNAMIC_LIST_BUFFER_SIZE);\n");
+    BCMOLT_CFG_LIST_BUF_SET(&cfg, epon_link, list_mem, APICLI_DYNAMIC_LIST_BUFFER_SIZE);
+    bcmcli_log("BCMOLT_CFG_LIST_BUF_SET(&cfg, epon_link, list_mem, APICLI_DYNAMIC_LIST_BUFFER_SIZE);\n");
+
+    /* call API */
+    err = bcmolt_cfg_get(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_get(device_id, &cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_link_cfg_set(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_link_cfg cfg;       /**< declare main API struct */
+    bcmolt_epon_link_key key = { }; /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_link_cfg cfg;\n");
+    bcmcli_log("bcmolt_epon_link_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_LINK_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "mac_address");
+    if (cli_parm != NULL)
+    {
+        key.mac_address = cli_parm->value.mac;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "mac_address is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.mac_address = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_LINK_KEY_ID_MAC_ADDRESS, &key.mac_address);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, epon_link, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, epon_link, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "tunnel_id");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_tunnel_id val;
+        val = (bcmolt_epon_tunnel_id) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_link, tunnel_id, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_link, tunnel_id, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_LINK_CFG_ID_TUNNEL_ID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_onu_id val;
+        val = (bcmolt_epon_onu_id) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_link, onu_id, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_link, onu_id, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_LINK_CFG_ID_ONU_ID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "min_laser_overhead.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_laser_overhead_parameters val = { };
+        cli_parm = bcmcli_find_named_parm(session, "min_laser_overhead.laser_on_time");
+        if (cli_parm != NULL)
+        {
+            val.laser_on_time = (bcmolt_time_quanta) cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "min_laser_overhead.laser_on_time is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "min_laser_overhead.laser_off_time");
+        if (cli_parm != NULL)
+        {
+            val.laser_off_time = (bcmolt_time_quanta) cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "min_laser_overhead.laser_off_time is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_link, min_laser_overhead, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_epon_laser_overhead_parameters val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_LINK_CFG_ID_MIN_LASER_OVERHEAD, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_link, min_laser_overhead, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "key_exchange_config.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_key_exchange_config val = { };
+        cli_parm = bcmcli_find_named_parm(session, "key_exchange_config.oam_type");
+        if (cli_parm != NULL)
+        {
+            val.oam_type = (bcmolt_epon_oam_type) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "key_exchange_config.oam_type is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "key_exchange_config.period");
+        if (cli_parm != NULL)
+        {
+            val.period = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "key_exchange_config.period is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "key_exchange_config.direction");
+        if (cli_parm != NULL)
+        {
+            val.direction = (bcmolt_epon_encryption_direction) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "key_exchange_config.direction is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_link, key_exchange_config, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_epon_key_exchange_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_LINK_CFG_ID_KEY_EXCHANGE_CONFIG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_link, key_exchange_config, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "epon_encryption.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_encryption_config val = { };
+        cli_parm = bcmcli_find_named_parm(session, "epon_encryption.downstream_mode");
+        if (cli_parm != NULL)
+        {
+            val.downstream_mode = (bcmolt_epon_encryption_mode) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "epon_encryption.downstream_mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "epon_encryption.downstream_key_choice");
+        if (cli_parm != NULL)
+        {
+            val.downstream_key_choice = (bcmolt_epon_key_choice) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "epon_encryption.downstream_key_choice is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "epon_encryption.downstream_encryption_information.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "epon_encryption.downstream_encryption_information.format");
+            if (cli_parm != NULL)
+            {
+                val.downstream_encryption_information.format = (bcmolt_epon_encryption_information_format) cli_parm->value.enum_val;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "epon_encryption.downstream_encryption_information.format is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            switch (val.downstream_encryption_information.format)
+            {
+                case BCMOLT_EPON_ENCRYPTION_INFORMATION_FORMAT_CFB:
+                    cli_parm = bcmcli_find_named_parm(session, "epon_encryption.downstream_encryption_information.key");
+                    if (cli_parm != NULL)
+                    {
+                        if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 16)
+                        {
+                            apicli_print_complete(session, BCM_ERR_PARM, "buffer epon_encryption.downstream_encryption_information.key must have 16 bytes\n");
+                            return BCM_ERR_PARM;
+                        }
+
+                        bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+                        bcmolt_buf_read(&cli_parm->value.buffer, val.downstream_encryption_information.u.cfb.key, 16);
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "epon_encryption.downstream_encryption_information.key is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_EPON_ENCRYPTION_INFORMATION_FORMAT_CTR:
+                    cli_parm = bcmcli_find_named_parm(session, "epon_encryption.downstream_encryption_information.key");
+                    if (cli_parm != NULL)
+                    {
+                        if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 16)
+                        {
+                            apicli_print_complete(session, BCM_ERR_PARM, "buffer epon_encryption.downstream_encryption_information.key must have 16 bytes\n");
+                            return BCM_ERR_PARM;
+                        }
+
+                        bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+                        bcmolt_buf_read(&cli_parm->value.buffer, val.downstream_encryption_information.u.ctr.key, 16);
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "epon_encryption.downstream_encryption_information.key is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "epon_encryption.downstream_encryption_information.sci");
+                    if (cli_parm != NULL)
+                    {
+                        if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 8)
+                        {
+                            apicli_print_complete(session, BCM_ERR_PARM, "buffer epon_encryption.downstream_encryption_information.sci must have 8 bytes\n");
+                            return BCM_ERR_PARM;
+                        }
+
+                        bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+                        bcmolt_buf_read(&cli_parm->value.buffer, val.downstream_encryption_information.u.ctr.sci, 8);
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "epon_encryption.downstream_encryption_information.sci is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                default:
+                    apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+                    return BCM_ERR_RANGE;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "epon_encryption.downstream_encryption_information is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "epon_encryption.upstream_mode");
+        if (cli_parm != NULL)
+        {
+            val.upstream_mode = (bcmolt_epon_encryption_mode) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "epon_encryption.upstream_mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "epon_encryption.upstream_key_choice");
+        if (cli_parm != NULL)
+        {
+            val.upstream_key_choice = (bcmolt_epon_key_choice) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "epon_encryption.upstream_key_choice is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "epon_encryption.upstream_encryption_information.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "epon_encryption.upstream_encryption_information.format");
+            if (cli_parm != NULL)
+            {
+                val.upstream_encryption_information.format = (bcmolt_epon_encryption_information_format) cli_parm->value.enum_val;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "epon_encryption.upstream_encryption_information.format is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            switch (val.upstream_encryption_information.format)
+            {
+                case BCMOLT_EPON_ENCRYPTION_INFORMATION_FORMAT_CFB:
+                    cli_parm = bcmcli_find_named_parm(session, "epon_encryption.upstream_encryption_information.key");
+                    if (cli_parm != NULL)
+                    {
+                        if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 16)
+                        {
+                            apicli_print_complete(session, BCM_ERR_PARM, "buffer epon_encryption.upstream_encryption_information.key must have 16 bytes\n");
+                            return BCM_ERR_PARM;
+                        }
+
+                        bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+                        bcmolt_buf_read(&cli_parm->value.buffer, val.upstream_encryption_information.u.cfb.key, 16);
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "epon_encryption.upstream_encryption_information.key is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_EPON_ENCRYPTION_INFORMATION_FORMAT_CTR:
+                    cli_parm = bcmcli_find_named_parm(session, "epon_encryption.upstream_encryption_information.key");
+                    if (cli_parm != NULL)
+                    {
+                        if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 16)
+                        {
+                            apicli_print_complete(session, BCM_ERR_PARM, "buffer epon_encryption.upstream_encryption_information.key must have 16 bytes\n");
+                            return BCM_ERR_PARM;
+                        }
+
+                        bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+                        bcmolt_buf_read(&cli_parm->value.buffer, val.upstream_encryption_information.u.ctr.key, 16);
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "epon_encryption.upstream_encryption_information.key is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "epon_encryption.upstream_encryption_information.sci");
+                    if (cli_parm != NULL)
+                    {
+                        if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 8)
+                        {
+                            apicli_print_complete(session, BCM_ERR_PARM, "buffer epon_encryption.upstream_encryption_information.sci must have 8 bytes\n");
+                            return BCM_ERR_PARM;
+                        }
+
+                        bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+                        bcmolt_buf_read(&cli_parm->value.buffer, val.upstream_encryption_information.u.ctr.sci, 8);
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "epon_encryption.upstream_encryption_information.sci is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                default:
+                    apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+                    return BCM_ERR_RANGE;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "epon_encryption.upstream_encryption_information is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_link, epon_encryption, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_epon_encryption_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_LINK_CFG_ID_EPON_ENCRYPTION, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_link, epon_encryption, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "fec_enable.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_link_fec_en val = { };
+        cli_parm = bcmcli_find_named_parm(session, "fec_enable.upstream");
+        if (cli_parm != NULL)
+        {
+            val.upstream = (bcmolt_epon_link_fec_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "fec_enable.upstream is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "fec_enable.downstream");
+        if (cli_parm != NULL)
+        {
+            val.downstream = (bcmolt_epon_link_fec_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "fec_enable.downstream is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_link, fec_enable, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_epon_link_fec_en val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_LINK_CFG_ID_FEC_ENABLE, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_link, fec_enable, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "oam_heartbeat_config.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_oam_heartbeat_config val = { };
+        cli_parm = bcmcli_find_named_parm(session, "oam_heartbeat_config.send_period");
+        if (cli_parm != NULL)
+        {
+            val.send_period = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "oam_heartbeat_config.send_period is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "oam_heartbeat_config.transmit_frame");
+        if (cli_parm != NULL)
+        {
+            val.transmit_frame.len = bcmolt_buf_get_used(&cli_parm->value.buffer);
+            val.transmit_frame.val = apicli_byte_pool_calloc(byte_pool, val.transmit_frame.len);
+            if (val.transmit_frame.val == NULL)
+            {
+                apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+                return BCM_ERR_NOMEM;
+            }
+
+            bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+            bcmolt_buf_read(&cli_parm->value.buffer, val.transmit_frame.val, val.transmit_frame.len);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "oam_heartbeat_config.transmit_frame is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "oam_heartbeat_config.ignored_receive_frame_template.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "oam_heartbeat_config.ignored_receive_frame_template.frame_octets");
+            if (cli_parm != NULL)
+            {
+                val.ignored_receive_frame_template.frame_octets.len = bcmolt_buf_get_used(&cli_parm->value.buffer);
+                val.ignored_receive_frame_template.frame_octets.val = apicli_byte_pool_calloc(byte_pool, val.ignored_receive_frame_template.frame_octets.len);
+                if (val.ignored_receive_frame_template.frame_octets.val == NULL)
+                {
+                    apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+                    return BCM_ERR_NOMEM;
+                }
+
+                bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+                bcmolt_buf_read(&cli_parm->value.buffer, val.ignored_receive_frame_template.frame_octets.val, val.ignored_receive_frame_template.frame_octets.len);
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "oam_heartbeat_config.ignored_receive_frame_template.frame_octets is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "oam_heartbeat_config.ignored_receive_frame_template.mask_octets");
+            if (cli_parm != NULL)
+            {
+                val.ignored_receive_frame_template.mask_octets.len = bcmolt_buf_get_used(&cli_parm->value.buffer);
+                val.ignored_receive_frame_template.mask_octets.val = apicli_byte_pool_calloc(byte_pool, val.ignored_receive_frame_template.mask_octets.len);
+                if (val.ignored_receive_frame_template.mask_octets.val == NULL)
+                {
+                    apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+                    return BCM_ERR_NOMEM;
+                }
+
+                bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+                bcmolt_buf_read(&cli_parm->value.buffer, val.ignored_receive_frame_template.mask_octets.val, val.ignored_receive_frame_template.mask_octets.len);
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "oam_heartbeat_config.ignored_receive_frame_template.mask_octets is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "oam_heartbeat_config.ignored_receive_frame_template is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "oam_heartbeat_config.receive_timeout");
+        if (cli_parm != NULL)
+        {
+            val.receive_timeout = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "oam_heartbeat_config.receive_timeout is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "oam_heartbeat_config.maximum_receive_size");
+        if (cli_parm != NULL)
+        {
+            val.maximum_receive_size = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "oam_heartbeat_config.maximum_receive_size is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_link, oam_heartbeat_config, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_oam_heartbeat_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_LINK_CFG_ID_OAM_HEARTBEAT_CONFIG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_link, oam_heartbeat_config, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "upstream_bandwidth.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_upstream_bandwidth_distribution val = { };
+        cli_parm = bcmcli_find_named_parm(session, "upstream_bandwidth.polling_interval_us");
+        if (cli_parm != NULL)
+        {
+            val.polling_interval_us = (bcmolt_polling_interval) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "upstream_bandwidth.polling_interval_us is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "upstream_bandwidth.grant_threshold_tq");
+        if (cli_parm != NULL)
+        {
+            val.grant_threshold_tq = (bcmolt_time_quanta) cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "upstream_bandwidth.grant_threshold_tq is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "upstream_bandwidth.min_schedulershaper.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "upstream_bandwidth.min_schedulershaper.bandwidth_Kbps");
+            if (cli_parm != NULL)
+            {
+                val.min_schedulershaper.bandwidth_Kbps = (bcmolt_bandwidth_Kbps) cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "upstream_bandwidth.min_schedulershaper.bandwidth_Kbps is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "upstream_bandwidth.min_schedulershaper.max_burst_size_tq");
+            if (cli_parm != NULL)
+            {
+                val.min_schedulershaper.max_burst_size_tq = (bcmolt_time_quanta) cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "upstream_bandwidth.min_schedulershaper.max_burst_size_tq is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "upstream_bandwidth.min_schedulershaper.priority");
+            if (cli_parm != NULL)
+            {
+                val.min_schedulershaper.priority = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "upstream_bandwidth.min_schedulershaper.priority is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "upstream_bandwidth.min_schedulershaper.weight_tq");
+            if (cli_parm != NULL)
+            {
+                val.min_schedulershaper.weight_tq = (bcmolt_time_quanta) cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "upstream_bandwidth.min_schedulershaper.weight_tq is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "upstream_bandwidth.min_schedulershaper is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "upstream_bandwidth.max_schedulershaper.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "upstream_bandwidth.max_schedulershaper.bandwidth_Kbps");
+            if (cli_parm != NULL)
+            {
+                val.max_schedulershaper.bandwidth_Kbps = (bcmolt_bandwidth_Kbps) cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "upstream_bandwidth.max_schedulershaper.bandwidth_Kbps is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "upstream_bandwidth.max_schedulershaper.max_burst_size_tq");
+            if (cli_parm != NULL)
+            {
+                val.max_schedulershaper.max_burst_size_tq = (bcmolt_time_quanta) cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "upstream_bandwidth.max_schedulershaper.max_burst_size_tq is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "upstream_bandwidth.max_schedulershaper.priority");
+            if (cli_parm != NULL)
+            {
+                val.max_schedulershaper.priority = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "upstream_bandwidth.max_schedulershaper.priority is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "upstream_bandwidth.max_schedulershaper.weight_tq");
+            if (cli_parm != NULL)
+            {
+                val.max_schedulershaper.weight_tq = (bcmolt_time_quanta) cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "upstream_bandwidth.max_schedulershaper.weight_tq is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "upstream_bandwidth.max_schedulershaper is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "upstream_bandwidth.tdm_grant_size_tq");
+        if (cli_parm != NULL)
+        {
+            val.tdm_grant_size_tq = (bcmolt_time_quanta) cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "upstream_bandwidth.tdm_grant_size_tq is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "upstream_bandwidth.tdm_grant_interval_us");
+        if (cli_parm != NULL)
+        {
+            val.tdm_grant_interval_us = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "upstream_bandwidth.tdm_grant_interval_us is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_link, upstream_bandwidth, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_upstream_bandwidth_distribution val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_LINK_CFG_ID_UPSTREAM_BANDWIDTH, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_link, upstream_bandwidth, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "clock_transport_enable");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_link, clock_transport_enable, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_link, clock_transport_enable, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_LINK_CFG_ID_CLOCK_TRANSPORT_ENABLE, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_set(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_set(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_link_cfg_clear(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_link_cfg cfg;       /**< declare main API struct */
+    bcmolt_epon_link_key key = { }; /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_link_cfg cfg;\n");
+    bcmcli_log("bcmolt_epon_link_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_clear");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_LINK_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "mac_address");
+    if (cli_parm != NULL)
+    {
+        key.mac_address = cli_parm->value.mac;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "mac_address is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.mac_address = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_LINK_KEY_ID_MAC_ADDRESS, &key.mac_address);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, epon_link, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, epon_link, key);\n");
+
+    /* call API */
+    err = bcmolt_cfg_clear(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_clear(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_link_cfg_get_multi(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_link_cfg cfg;       /**< declare main API struct */
+    bcmolt_epon_link_key key = { }; /**< declare key */
+    bcmolt_msg_set *msg_set = NULL; /**< declare message set */
+    uint32_t max_msgs;              /**< declare max number of msgs to get */
+    bcmos_bool invert_filter;       /**< declare filter invert flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_link_cfg cfg;\n");
+    bcmcli_log("bcmolt_epon_link_key key = {  };\n");
+    bcmcli_log("bcmolt_msg_set* msg_set = NULL;\n");
+    bcmcli_log("uint32_t max_msgs;\n");
+    bcmcli_log("bcmos_bool invert_filter;\n");
+    apicli_print_start(session, "bcmolt_cfg_get_multi");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_LINK_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "mac_address");
+    if (cli_parm != NULL)
+    {
+        key.mac_address = cli_parm->value.mac;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "mac_address is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.mac_address = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_LINK_KEY_ID_MAC_ADDRESS, &key.mac_address);
+    bcmcli_log(";\n");
+
+    /* set max number of msgs from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "max_msgs");
+    if (cli_parm != NULL)
+    {
+        max_msgs = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "max_msgs is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("max_msgs = %d;\n", max_msgs);
+
+    /* set filter invert flag from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "filter_invert");
+    if (cli_parm != NULL)
+    {
+        invert_filter = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "filter_invert is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("invert_filter = %s;\n", (invert_filter) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* allocate message set */
+    err = apicli_msg_set_alloc(byte_pool, BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    bcmcli_log("bcmolt_msg_set_alloc(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, epon_link, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, epon_link, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "filter.link_rate");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_link_rate val;
+        val = (bcmolt_epon_link_rate) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_link, link_rate, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_link, link_rate, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_LINK_CFG_ID_LINK_RATE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "link_rate");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_link, link_rate);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_link, link_rate);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.state_flags");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_link_state_flags val;
+        val = (bcmolt_epon_link_state_flags) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_link, state_flags, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_link, state_flags, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_LINK_CFG_ID_STATE_FLAGS, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "state_flags");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_link, state_flags);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_link, state_flags);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.llid");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_llid val;
+        val = (bcmolt_epon_llid) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_link, llid, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_link, llid, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_LINK_CFG_ID_LLID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "llid");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_link, llid);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_link, llid);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.laser_on_time_tq");
+    if (cli_parm != NULL)
+    {
+        bcmolt_time_quanta val;
+        val = (bcmolt_time_quanta) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_link, laser_on_time_tq, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_link, laser_on_time_tq, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_LINK_CFG_ID_LASER_ON_TIME_TQ, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "laser_on_time_tq");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_link, laser_on_time_tq);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_link, laser_on_time_tq);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.laser_off_time_tq");
+    if (cli_parm != NULL)
+    {
+        bcmolt_time_quanta val;
+        val = (bcmolt_time_quanta) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_link, laser_off_time_tq, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_link, laser_off_time_tq, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_LINK_CFG_ID_LASER_OFF_TIME_TQ, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "laser_off_time_tq");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_link, laser_off_time_tq);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_link, laser_off_time_tq);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.range_value_tq");
+    if (cli_parm != NULL)
+    {
+        bcmolt_time_quanta val;
+        val = (bcmolt_time_quanta) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_link, range_value_tq, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_link, range_value_tq, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_LINK_CFG_ID_RANGE_VALUE_TQ, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "range_value_tq");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_link, range_value_tq);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_link, range_value_tq);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.distance");
+    if (cli_parm != NULL)
+    {
+        bcmolt_meters val;
+        val = (bcmolt_meters) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_link, distance, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_link, distance, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_LINK_CFG_ID_DISTANCE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "distance");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_link, distance);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_link, distance);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.alarm_state.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_link_alarm_state val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.key_exchange_failure");
+        if (cli_parm != NULL)
+        {
+            val.key_exchange_failure = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.key_exchange_failure is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.invalid_mpcp_report_received");
+        if (cli_parm != NULL)
+        {
+            val.invalid_mpcp_report_received = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.invalid_mpcp_report_received is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.mpcp_report_timeout");
+        if (cli_parm != NULL)
+        {
+            val.mpcp_report_timeout = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.mpcp_report_timeout is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.oam_keepalive_timeout");
+        if (cli_parm != NULL)
+        {
+            val.oam_keepalive_timeout = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.oam_keepalive_timeout is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_link, alarm_state, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_epon_link_alarm_state val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_LINK_CFG_ID_ALARM_STATE, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_link, alarm_state, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "alarm_state");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_link, alarm_state);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_link, alarm_state);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.tunnel_id");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_tunnel_id val;
+        val = (bcmolt_epon_tunnel_id) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_link, tunnel_id, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_link, tunnel_id, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_LINK_CFG_ID_TUNNEL_ID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tunnel_id");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_link, tunnel_id);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_link, tunnel_id);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.onu_id");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_onu_id val;
+        val = (bcmolt_epon_onu_id) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_link, onu_id, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_link, onu_id, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_LINK_CFG_ID_ONU_ID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_link, onu_id);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_link, onu_id);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.min_laser_overhead.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_laser_overhead_parameters val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.min_laser_overhead.laser_on_time");
+        if (cli_parm != NULL)
+        {
+            val.laser_on_time = (bcmolt_time_quanta) cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.min_laser_overhead.laser_on_time is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.min_laser_overhead.laser_off_time");
+        if (cli_parm != NULL)
+        {
+            val.laser_off_time = (bcmolt_time_quanta) cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.min_laser_overhead.laser_off_time is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_link, min_laser_overhead, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_epon_laser_overhead_parameters val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_LINK_CFG_ID_MIN_LASER_OVERHEAD, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_link, min_laser_overhead, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "min_laser_overhead");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_link, min_laser_overhead);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_link, min_laser_overhead);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.key_exchange_config.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_key_exchange_config val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.key_exchange_config.oam_type");
+        if (cli_parm != NULL)
+        {
+            val.oam_type = (bcmolt_epon_oam_type) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.key_exchange_config.oam_type is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.key_exchange_config.period");
+        if (cli_parm != NULL)
+        {
+            val.period = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.key_exchange_config.period is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.key_exchange_config.direction");
+        if (cli_parm != NULL)
+        {
+            val.direction = (bcmolt_epon_encryption_direction) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.key_exchange_config.direction is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_link, key_exchange_config, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_epon_key_exchange_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_LINK_CFG_ID_KEY_EXCHANGE_CONFIG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_link, key_exchange_config, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "key_exchange_config");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_link, key_exchange_config);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_link, key_exchange_config);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.epon_encryption.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_encryption_config val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.epon_encryption.downstream_mode");
+        if (cli_parm != NULL)
+        {
+            val.downstream_mode = (bcmolt_epon_encryption_mode) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.epon_encryption.downstream_mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.epon_encryption.downstream_key_choice");
+        if (cli_parm != NULL)
+        {
+            val.downstream_key_choice = (bcmolt_epon_key_choice) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.epon_encryption.downstream_key_choice is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "filter.epon_encryption.downstream_encryption_information.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "filter.epon_encryption.downstream_encryption_information.format");
+            if (cli_parm != NULL)
+            {
+                val.downstream_encryption_information.format = (bcmolt_epon_encryption_information_format) cli_parm->value.enum_val;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.epon_encryption.downstream_encryption_information.format is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            switch (val.downstream_encryption_information.format)
+            {
+                case BCMOLT_EPON_ENCRYPTION_INFORMATION_FORMAT_CFB:
+                    cli_parm = bcmcli_find_named_parm(session, "filter.epon_encryption.downstream_encryption_information.key");
+                    if (cli_parm != NULL)
+                    {
+                        if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 16)
+                        {
+                            apicli_print_complete(session, BCM_ERR_PARM, "buffer filter.epon_encryption.downstream_encryption_information.key must have 16 bytes\n");
+                            return BCM_ERR_PARM;
+                        }
+
+                        bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+                        bcmolt_buf_read(&cli_parm->value.buffer, val.downstream_encryption_information.u.cfb.key, 16);
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "filter.epon_encryption.downstream_encryption_information.key is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_EPON_ENCRYPTION_INFORMATION_FORMAT_CTR:
+                    cli_parm = bcmcli_find_named_parm(session, "filter.epon_encryption.downstream_encryption_information.key");
+                    if (cli_parm != NULL)
+                    {
+                        if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 16)
+                        {
+                            apicli_print_complete(session, BCM_ERR_PARM, "buffer filter.epon_encryption.downstream_encryption_information.key must have 16 bytes\n");
+                            return BCM_ERR_PARM;
+                        }
+
+                        bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+                        bcmolt_buf_read(&cli_parm->value.buffer, val.downstream_encryption_information.u.ctr.key, 16);
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "filter.epon_encryption.downstream_encryption_information.key is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "filter.epon_encryption.downstream_encryption_information.sci");
+                    if (cli_parm != NULL)
+                    {
+                        if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 8)
+                        {
+                            apicli_print_complete(session, BCM_ERR_PARM, "buffer filter.epon_encryption.downstream_encryption_information.sci must have 8 bytes\n");
+                            return BCM_ERR_PARM;
+                        }
+
+                        bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+                        bcmolt_buf_read(&cli_parm->value.buffer, val.downstream_encryption_information.u.ctr.sci, 8);
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "filter.epon_encryption.downstream_encryption_information.sci is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                default:
+                    apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+                    return BCM_ERR_RANGE;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.epon_encryption.downstream_encryption_information is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.epon_encryption.upstream_mode");
+        if (cli_parm != NULL)
+        {
+            val.upstream_mode = (bcmolt_epon_encryption_mode) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.epon_encryption.upstream_mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.epon_encryption.upstream_key_choice");
+        if (cli_parm != NULL)
+        {
+            val.upstream_key_choice = (bcmolt_epon_key_choice) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.epon_encryption.upstream_key_choice is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "filter.epon_encryption.upstream_encryption_information.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "filter.epon_encryption.upstream_encryption_information.format");
+            if (cli_parm != NULL)
+            {
+                val.upstream_encryption_information.format = (bcmolt_epon_encryption_information_format) cli_parm->value.enum_val;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.epon_encryption.upstream_encryption_information.format is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            switch (val.upstream_encryption_information.format)
+            {
+                case BCMOLT_EPON_ENCRYPTION_INFORMATION_FORMAT_CFB:
+                    cli_parm = bcmcli_find_named_parm(session, "filter.epon_encryption.upstream_encryption_information.key");
+                    if (cli_parm != NULL)
+                    {
+                        if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 16)
+                        {
+                            apicli_print_complete(session, BCM_ERR_PARM, "buffer filter.epon_encryption.upstream_encryption_information.key must have 16 bytes\n");
+                            return BCM_ERR_PARM;
+                        }
+
+                        bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+                        bcmolt_buf_read(&cli_parm->value.buffer, val.upstream_encryption_information.u.cfb.key, 16);
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "filter.epon_encryption.upstream_encryption_information.key is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_EPON_ENCRYPTION_INFORMATION_FORMAT_CTR:
+                    cli_parm = bcmcli_find_named_parm(session, "filter.epon_encryption.upstream_encryption_information.key");
+                    if (cli_parm != NULL)
+                    {
+                        if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 16)
+                        {
+                            apicli_print_complete(session, BCM_ERR_PARM, "buffer filter.epon_encryption.upstream_encryption_information.key must have 16 bytes\n");
+                            return BCM_ERR_PARM;
+                        }
+
+                        bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+                        bcmolt_buf_read(&cli_parm->value.buffer, val.upstream_encryption_information.u.ctr.key, 16);
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "filter.epon_encryption.upstream_encryption_information.key is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "filter.epon_encryption.upstream_encryption_information.sci");
+                    if (cli_parm != NULL)
+                    {
+                        if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 8)
+                        {
+                            apicli_print_complete(session, BCM_ERR_PARM, "buffer filter.epon_encryption.upstream_encryption_information.sci must have 8 bytes\n");
+                            return BCM_ERR_PARM;
+                        }
+
+                        bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+                        bcmolt_buf_read(&cli_parm->value.buffer, val.upstream_encryption_information.u.ctr.sci, 8);
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "filter.epon_encryption.upstream_encryption_information.sci is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                default:
+                    apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+                    return BCM_ERR_RANGE;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.epon_encryption.upstream_encryption_information is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_link, epon_encryption, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_epon_encryption_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_LINK_CFG_ID_EPON_ENCRYPTION, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_link, epon_encryption, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "epon_encryption");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_link, epon_encryption);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_link, epon_encryption);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.fec_enable.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_link_fec_en val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.fec_enable.upstream");
+        if (cli_parm != NULL)
+        {
+            val.upstream = (bcmolt_epon_link_fec_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.fec_enable.upstream is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.fec_enable.downstream");
+        if (cli_parm != NULL)
+        {
+            val.downstream = (bcmolt_epon_link_fec_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.fec_enable.downstream is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_link, fec_enable, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_epon_link_fec_en val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_LINK_CFG_ID_FEC_ENABLE, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_link, fec_enable, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "fec_enable");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_link, fec_enable);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_link, fec_enable);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.oam_heartbeat_config.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_oam_heartbeat_config val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.oam_heartbeat_config.send_period");
+        if (cli_parm != NULL)
+        {
+            val.send_period = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.oam_heartbeat_config.send_period is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.oam_heartbeat_config.transmit_frame");
+        if (cli_parm != NULL)
+        {
+            val.transmit_frame.len = bcmolt_buf_get_used(&cli_parm->value.buffer);
+            val.transmit_frame.val = apicli_byte_pool_calloc(byte_pool, val.transmit_frame.len);
+            if (val.transmit_frame.val == NULL)
+            {
+                apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+                return BCM_ERR_NOMEM;
+            }
+
+            bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+            bcmolt_buf_read(&cli_parm->value.buffer, val.transmit_frame.val, val.transmit_frame.len);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.oam_heartbeat_config.transmit_frame is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "filter.oam_heartbeat_config.ignored_receive_frame_template.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "filter.oam_heartbeat_config.ignored_receive_frame_template.frame_octets");
+            if (cli_parm != NULL)
+            {
+                val.ignored_receive_frame_template.frame_octets.len = bcmolt_buf_get_used(&cli_parm->value.buffer);
+                val.ignored_receive_frame_template.frame_octets.val = apicli_byte_pool_calloc(byte_pool, val.ignored_receive_frame_template.frame_octets.len);
+                if (val.ignored_receive_frame_template.frame_octets.val == NULL)
+                {
+                    apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+                    return BCM_ERR_NOMEM;
+                }
+
+                bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+                bcmolt_buf_read(&cli_parm->value.buffer, val.ignored_receive_frame_template.frame_octets.val, val.ignored_receive_frame_template.frame_octets.len);
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.oam_heartbeat_config.ignored_receive_frame_template.frame_octets is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.oam_heartbeat_config.ignored_receive_frame_template.mask_octets");
+            if (cli_parm != NULL)
+            {
+                val.ignored_receive_frame_template.mask_octets.len = bcmolt_buf_get_used(&cli_parm->value.buffer);
+                val.ignored_receive_frame_template.mask_octets.val = apicli_byte_pool_calloc(byte_pool, val.ignored_receive_frame_template.mask_octets.len);
+                if (val.ignored_receive_frame_template.mask_octets.val == NULL)
+                {
+                    apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+                    return BCM_ERR_NOMEM;
+                }
+
+                bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+                bcmolt_buf_read(&cli_parm->value.buffer, val.ignored_receive_frame_template.mask_octets.val, val.ignored_receive_frame_template.mask_octets.len);
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.oam_heartbeat_config.ignored_receive_frame_template.mask_octets is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.oam_heartbeat_config.ignored_receive_frame_template is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.oam_heartbeat_config.receive_timeout");
+        if (cli_parm != NULL)
+        {
+            val.receive_timeout = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.oam_heartbeat_config.receive_timeout is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.oam_heartbeat_config.maximum_receive_size");
+        if (cli_parm != NULL)
+        {
+            val.maximum_receive_size = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.oam_heartbeat_config.maximum_receive_size is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_link, oam_heartbeat_config, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_oam_heartbeat_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_LINK_CFG_ID_OAM_HEARTBEAT_CONFIG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_link, oam_heartbeat_config, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "oam_heartbeat_config");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_link, oam_heartbeat_config);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_link, oam_heartbeat_config);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.upstream_bandwidth.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_upstream_bandwidth_distribution val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.upstream_bandwidth.polling_interval_us");
+        if (cli_parm != NULL)
+        {
+            val.polling_interval_us = (bcmolt_polling_interval) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.upstream_bandwidth.polling_interval_us is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.upstream_bandwidth.grant_threshold_tq");
+        if (cli_parm != NULL)
+        {
+            val.grant_threshold_tq = (bcmolt_time_quanta) cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.upstream_bandwidth.grant_threshold_tq is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "filter.upstream_bandwidth.min_schedulershaper.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "filter.upstream_bandwidth.min_schedulershaper.bandwidth_Kbps");
+            if (cli_parm != NULL)
+            {
+                val.min_schedulershaper.bandwidth_Kbps = (bcmolt_bandwidth_Kbps) cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.upstream_bandwidth.min_schedulershaper.bandwidth_Kbps is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.upstream_bandwidth.min_schedulershaper.max_burst_size_tq");
+            if (cli_parm != NULL)
+            {
+                val.min_schedulershaper.max_burst_size_tq = (bcmolt_time_quanta) cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.upstream_bandwidth.min_schedulershaper.max_burst_size_tq is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.upstream_bandwidth.min_schedulershaper.priority");
+            if (cli_parm != NULL)
+            {
+                val.min_schedulershaper.priority = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.upstream_bandwidth.min_schedulershaper.priority is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.upstream_bandwidth.min_schedulershaper.weight_tq");
+            if (cli_parm != NULL)
+            {
+                val.min_schedulershaper.weight_tq = (bcmolt_time_quanta) cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.upstream_bandwidth.min_schedulershaper.weight_tq is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.upstream_bandwidth.min_schedulershaper is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "filter.upstream_bandwidth.max_schedulershaper.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "filter.upstream_bandwidth.max_schedulershaper.bandwidth_Kbps");
+            if (cli_parm != NULL)
+            {
+                val.max_schedulershaper.bandwidth_Kbps = (bcmolt_bandwidth_Kbps) cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.upstream_bandwidth.max_schedulershaper.bandwidth_Kbps is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.upstream_bandwidth.max_schedulershaper.max_burst_size_tq");
+            if (cli_parm != NULL)
+            {
+                val.max_schedulershaper.max_burst_size_tq = (bcmolt_time_quanta) cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.upstream_bandwidth.max_schedulershaper.max_burst_size_tq is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.upstream_bandwidth.max_schedulershaper.priority");
+            if (cli_parm != NULL)
+            {
+                val.max_schedulershaper.priority = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.upstream_bandwidth.max_schedulershaper.priority is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.upstream_bandwidth.max_schedulershaper.weight_tq");
+            if (cli_parm != NULL)
+            {
+                val.max_schedulershaper.weight_tq = (bcmolt_time_quanta) cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.upstream_bandwidth.max_schedulershaper.weight_tq is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.upstream_bandwidth.max_schedulershaper is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.upstream_bandwidth.tdm_grant_size_tq");
+        if (cli_parm != NULL)
+        {
+            val.tdm_grant_size_tq = (bcmolt_time_quanta) cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.upstream_bandwidth.tdm_grant_size_tq is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.upstream_bandwidth.tdm_grant_interval_us");
+        if (cli_parm != NULL)
+        {
+            val.tdm_grant_interval_us = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.upstream_bandwidth.tdm_grant_interval_us is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_link, upstream_bandwidth, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_upstream_bandwidth_distribution val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_LINK_CFG_ID_UPSTREAM_BANDWIDTH, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_link, upstream_bandwidth, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "upstream_bandwidth");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_link, upstream_bandwidth);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_link, upstream_bandwidth);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.ubd_info.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_ubd_info val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.ubd_info.actual_polling_interval");
+        if (cli_parm != NULL)
+        {
+            val.actual_polling_interval = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ubd_info.actual_polling_interval is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.ubd_info.actual_grant_threshold_tq");
+        if (cli_parm != NULL)
+        {
+            val.actual_grant_threshold_tq = (bcmolt_time_quanta) cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ubd_info.actual_grant_threshold_tq is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "filter.ubd_info.actual_min_schedulershaper.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "filter.ubd_info.actual_min_schedulershaper.actual_mbs_tq");
+            if (cli_parm != NULL)
+            {
+                val.actual_min_schedulershaper.actual_mbs_tq = (bcmolt_time_quanta) cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.ubd_info.actual_min_schedulershaper.actual_mbs_tq is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.ubd_info.actual_min_schedulershaper.actual_weight_tq");
+            if (cli_parm != NULL)
+            {
+                val.actual_min_schedulershaper.actual_weight_tq = (bcmolt_time_quanta) cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.ubd_info.actual_min_schedulershaper.actual_weight_tq is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ubd_info.actual_min_schedulershaper is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "filter.ubd_info.actual_max_schedulershaper.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "filter.ubd_info.actual_max_schedulershaper.actual_mbs_tq");
+            if (cli_parm != NULL)
+            {
+                val.actual_max_schedulershaper.actual_mbs_tq = (bcmolt_time_quanta) cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.ubd_info.actual_max_schedulershaper.actual_mbs_tq is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.ubd_info.actual_max_schedulershaper.actual_weight_tq");
+            if (cli_parm != NULL)
+            {
+                val.actual_max_schedulershaper.actual_weight_tq = (bcmolt_time_quanta) cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.ubd_info.actual_max_schedulershaper.actual_weight_tq is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ubd_info.actual_max_schedulershaper is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_link, ubd_info, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_ubd_info val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_LINK_CFG_ID_UBD_INFO, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_link, ubd_info, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ubd_info");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_link, ubd_info);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_link, ubd_info);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.clock_transport_enable");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_link, clock_transport_enable, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_link, clock_transport_enable, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_LINK_CFG_ID_CLOCK_TRANSPORT_ENABLE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "clock_transport_enable");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_link, clock_transport_enable);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_link, clock_transport_enable);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.pending_grants");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_link, pending_grants, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_link, pending_grants, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_LINK_CFG_ID_PENDING_GRANTS, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "pending_grants");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_link, pending_grants);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_link, pending_grants);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.link_type");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_link_type val;
+        val = (bcmolt_epon_link_type) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_link, link_type, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_link, link_type, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_LINK_CFG_ID_LINK_TYPE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "link_type");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_link, link_type);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_link, link_type);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_link, link_rate) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_link, state_flags) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_link, llid) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_link, laser_on_time_tq) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_link, laser_off_time_tq) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_link, range_value_tq) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_link, distance) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_link, alarm_state) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_link, tunnel_id) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_link, onu_id) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_link, min_laser_overhead) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_link, key_exchange_config) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_link, epon_encryption) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_link, fec_enable) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_link, oam_heartbeat_config) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_link, upstream_bandwidth) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_link, ubd_info) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_link, clock_transport_enable) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_link, pending_grants) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_link, link_type))
+    {
+        BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_link, all_properties);
+        bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_link, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);
+    bcmcli_log("bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_link_stat_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_link_stat stat;     /**< declare main API struct */
+    bcmolt_epon_link_key key = { }; /**< declare key */
+    bcmos_bool clear_on_read;       /**< declare 'clear on read' flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_link_stat stat;\n");
+    bcmcli_log("bcmolt_epon_link_key key = {  };\n");
+    bcmcli_log("bcmos_bool clear_on_read;\n");
+    apicli_print_start(session, "bcmolt_stat_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_LINK_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "mac_address");
+    if (cli_parm != NULL)
+    {
+        key.mac_address = cli_parm->value.mac;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "mac_address is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.mac_address = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_LINK_KEY_ID_MAC_ADDRESS, &key.mac_address);
+    bcmcli_log(";\n");
+
+    /* set stat flags from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "clear");
+    if (cli_parm != NULL)
+    {
+        clear_on_read = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "clear is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("clear_on_read = %s;\n", (clear_on_read) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* init the API struct */
+    BCMOLT_STAT_INIT(&stat, epon_link, key);
+    bcmcli_log("BCMOLT_STAT_INIT(&stat, epon_link, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "rx_data_bytes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_data_bytes);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_data_bytes);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_data_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_data_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_data_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_frames_64");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_frames_64);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_frames_64);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_frames_65_127");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_frames_65_127);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_frames_65_127);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_frames_128_255");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_frames_128_255);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_frames_128_255);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_frames_256_511");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_frames_256_511);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_frames_256_511);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_frames_512_1023");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_frames_512_1023);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_frames_512_1023);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_frames_1024_1518");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_frames_1024_1518);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_frames_1024_1518);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_frames_1519_2047");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_frames_1519_2047);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_frames_1519_2047);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_frames_2048_4095");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_frames_2048_4095);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_frames_2048_4095);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_frames_4096_9216");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_frames_4096_9216);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_frames_4096_9216);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_frames_9217_16383");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_frames_9217_16383);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_frames_9217_16383);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_oam_bytes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_oam_bytes);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_oam_bytes);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_oam_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_oam_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_oam_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_mpcp_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_mpcp_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_mpcp_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_broadcast_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_broadcast_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_broadcast_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_unicast_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_unicast_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_unicast_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_multicast_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_multicast_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_multicast_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_report_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_report_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_report_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_fcs_error");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_fcs_error);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_fcs_error);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_oversize_error");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_oversize_error);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_oversize_error);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_runt_error");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_runt_error);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_runt_error);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_line_code_error");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_line_code_error);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_line_code_error);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_line_code_error_max");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_line_code_error_max);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_link, rx_line_code_error_max);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_data_bytes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_link, tx_data_bytes);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_link, tx_data_bytes);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_data_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_link, tx_data_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_link, tx_data_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_frames_64");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_link, tx_frames_64);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_link, tx_frames_64);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_frames_65_127");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_link, tx_frames_65_127);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_link, tx_frames_65_127);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_frames_128_255");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_link, tx_frames_128_255);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_link, tx_frames_128_255);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_frames_256_511");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_link, tx_frames_256_511);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_link, tx_frames_256_511);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_frames_512_1023");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_link, tx_frames_512_1023);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_link, tx_frames_512_1023);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_frames_1024_1518");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_link, tx_frames_1024_1518);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_link, tx_frames_1024_1518);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_frames_1519_2047");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_link, tx_frames_1519_2047);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_link, tx_frames_1519_2047);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_frames_2048_4095");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_link, tx_frames_2048_4095);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_link, tx_frames_2048_4095);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_frames_4096_9216");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_link, tx_frames_4096_9216);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_link, tx_frames_4096_9216);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_frames_9217_16383");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_link, tx_frames_9217_16383);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_link, tx_frames_9217_16383);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_oam_bytes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_link, tx_oam_bytes);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_link, tx_oam_bytes);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_oam_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_link, tx_oam_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_link, tx_oam_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_mpcp_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_link, tx_mpcp_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_link, tx_mpcp_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_broadcast_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_link, tx_broadcast_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_link, tx_broadcast_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_unicast_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_link, tx_unicast_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_link, tx_unicast_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_multicast_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_link, tx_multicast_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_link, tx_multicast_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_gates");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_link, tx_gates);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_link, tx_gates);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_STAT_PROP_IS_SET(&stat, epon_link, rx_data_bytes) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_link, rx_data_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_link, rx_frames_64) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_link, rx_frames_65_127) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_link, rx_frames_128_255) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_link, rx_frames_256_511) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_link, rx_frames_512_1023) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_link, rx_frames_1024_1518) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_link, rx_frames_1519_2047) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_link, rx_frames_2048_4095) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_link, rx_frames_4096_9216) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_link, rx_frames_9217_16383) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_link, rx_oam_bytes) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_link, rx_oam_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_link, rx_mpcp_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_link, rx_broadcast_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_link, rx_unicast_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_link, rx_multicast_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_link, rx_report_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_link, rx_fcs_error) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_link, rx_oversize_error) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_link, rx_runt_error) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_link, rx_line_code_error) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_link, rx_line_code_error_max) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_link, tx_data_bytes) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_link, tx_data_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_link, tx_frames_64) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_link, tx_frames_65_127) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_link, tx_frames_128_255) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_link, tx_frames_256_511) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_link, tx_frames_512_1023) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_link, tx_frames_1024_1518) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_link, tx_frames_1519_2047) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_link, tx_frames_2048_4095) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_link, tx_frames_4096_9216) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_link, tx_frames_9217_16383) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_link, tx_oam_bytes) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_link, tx_oam_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_link, tx_mpcp_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_link, tx_broadcast_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_link, tx_unicast_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_link, tx_multicast_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_link, tx_gates))
+    {
+        BCMOLT_STAT_PROP_GET(&stat, epon_link, all_properties);
+        bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_link, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_stat_get(device_id, &stat.hdr, clear_on_read);
+    bcmcli_log("bcmolt_stat_get(device_id, &stat.hdr, clear_on_read);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &stat.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, stat.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_link_oper_force_rediscovery_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_link_force_rediscovery oper;    /**< declare main API struct */
+    bcmolt_epon_link_key key = { };             /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_link_force_rediscovery oper;\n");
+    bcmcli_log("bcmolt_epon_link_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_LINK_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "mac_address");
+    if (cli_parm != NULL)
+    {
+        key.mac_address = cli_parm->value.mac;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "mac_address is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.mac_address = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_LINK_KEY_ID_MAC_ADDRESS, &key.mac_address);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, epon_link, force_rediscovery, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, epon_link, force_rediscovery, key);\n");
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_link_oper_delete_link_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_link_delete_link oper;  /**< declare main API struct */
+    bcmolt_epon_link_key key = { };     /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_link_delete_link oper;\n");
+    bcmcli_log("bcmolt_epon_link_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_LINK_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "mac_address");
+    if (cli_parm != NULL)
+    {
+        key.mac_address = cli_parm->value.mac;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "mac_address is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.mac_address = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_LINK_KEY_ID_MAC_ADDRESS, &key.mac_address);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, epon_link, delete_link, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, epon_link, delete_link, key);\n");
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_link_oper_oam_keepalive_timer_start_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_link_oam_keepalive_timer_start oper;    /**< declare main API struct */
+    bcmolt_epon_link_key key = { };                     /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_link_oam_keepalive_timer_start oper;\n");
+    bcmcli_log("bcmolt_epon_link_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_LINK_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "mac_address");
+    if (cli_parm != NULL)
+    {
+        key.mac_address = cli_parm->value.mac;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "mac_address is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.mac_address = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_LINK_KEY_ID_MAC_ADDRESS, &key.mac_address);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, epon_link, oam_keepalive_timer_start, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, epon_link, oam_keepalive_timer_start, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "send_period");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_OPER_PROP_SET(&oper, epon_link, oam_keepalive_timer_start, send_period, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, epon_link, oam_keepalive_timer_start, send_period, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_OPER, BCMOLT_EPON_LINK_OPER_ID_OAM_KEEPALIVE_TIMER_START, BCMOLT_EPON_LINK_OAM_KEEPALIVE_TIMER_START_ID_SEND_PERIOD, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_link_oper_oam_keepalive_timer_stop_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_link_oam_keepalive_timer_stop oper; /**< declare main API struct */
+    bcmolt_epon_link_key key = { };                 /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_link_oam_keepalive_timer_stop oper;\n");
+    bcmcli_log("bcmolt_epon_link_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_LINK_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "mac_address");
+    if (cli_parm != NULL)
+    {
+        key.mac_address = cli_parm->value.mac;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "mac_address is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.mac_address = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_LINK_KEY_ID_MAC_ADDRESS, &key.mac_address);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, epon_link, oam_keepalive_timer_stop, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, epon_link, oam_keepalive_timer_stop, key);\n");
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_link_oper_key_exchange_start_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_link_key_exchange_start oper;   /**< declare main API struct */
+    bcmolt_epon_link_key key = { };             /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_link_key_exchange_start oper;\n");
+    bcmcli_log("bcmolt_epon_link_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_LINK_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "mac_address");
+    if (cli_parm != NULL)
+    {
+        key.mac_address = cli_parm->value.mac;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "mac_address is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.mac_address = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_LINK_KEY_ID_MAC_ADDRESS, &key.mac_address);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, epon_link, key_exchange_start, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, epon_link, key_exchange_start, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "period");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_OPER_PROP_SET(&oper, epon_link, key_exchange_start, period, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, epon_link, key_exchange_start, period, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_OPER, BCMOLT_EPON_LINK_OPER_ID_KEY_EXCHANGE_START, BCMOLT_EPON_LINK_KEY_EXCHANGE_START_ID_PERIOD, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_link_oper_key_exchange_stop_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_link_key_exchange_stop oper;    /**< declare main API struct */
+    bcmolt_epon_link_key key = { };             /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_link_key_exchange_stop oper;\n");
+    bcmcli_log("bcmolt_epon_link_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_LINK_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "mac_address");
+    if (cli_parm != NULL)
+    {
+        key.mac_address = cli_parm->value.mac;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "mac_address is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.mac_address = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_LINK_KEY_ID_MAC_ADDRESS, &key.mac_address);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, epon_link, key_exchange_stop, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, epon_link, key_exchange_stop, key);\n");
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_link_oper_static_registration_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_link_static_registration oper;  /**< declare main API struct */
+    bcmolt_epon_link_key key = { };             /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_link_static_registration oper;\n");
+    bcmcli_log("bcmolt_epon_link_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_LINK_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "mac_address");
+    if (cli_parm != NULL)
+    {
+        key.mac_address = cli_parm->value.mac;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "mac_address is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.mac_address = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_LINK_KEY_ID_MAC_ADDRESS, &key.mac_address);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, epon_link, static_registration, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, epon_link, static_registration, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "laseron_time_tq");
+    if (cli_parm != NULL)
+    {
+        bcmolt_time_quanta val;
+        val = (bcmolt_time_quanta) cli_parm->value.unumber;
+        BCMOLT_OPER_PROP_SET(&oper, epon_link, static_registration, laseron_time_tq, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, epon_link, static_registration, laseron_time_tq, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_OPER, BCMOLT_EPON_LINK_OPER_ID_STATIC_REGISTRATION, BCMOLT_EPON_LINK_STATIC_REGISTRATION_ID_LASERON_TIME_TQ, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "laseroff_time_tq");
+    if (cli_parm != NULL)
+    {
+        bcmolt_time_quanta val;
+        val = (bcmolt_time_quanta) cli_parm->value.unumber;
+        BCMOLT_OPER_PROP_SET(&oper, epon_link, static_registration, laseroff_time_tq, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, epon_link, static_registration, laseroff_time_tq, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_OPER, BCMOLT_EPON_LINK_OPER_ID_STATIC_REGISTRATION, BCMOLT_EPON_LINK_STATIC_REGISTRATION_ID_LASEROFF_TIME_TQ, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "range_value_tq");
+    if (cli_parm != NULL)
+    {
+        bcmolt_time_quanta val;
+        val = (bcmolt_time_quanta) cli_parm->value.unumber;
+        BCMOLT_OPER_PROP_SET(&oper, epon_link, static_registration, range_value_tq, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, epon_link, static_registration, range_value_tq, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_OPER, BCMOLT_EPON_LINK_OPER_ID_STATIC_REGISTRATION, BCMOLT_EPON_LINK_STATIC_REGISTRATION_ID_RANGE_VALUE_TQ, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "pending_grants");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_OPER_PROP_SET(&oper, epon_link, static_registration, pending_grants, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, epon_link, static_registration, pending_grants, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_OPER, BCMOLT_EPON_LINK_OPER_ID_STATIC_REGISTRATION, BCMOLT_EPON_LINK_STATIC_REGISTRATION_ID_PENDING_GRANTS, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_link_proxy_inject_frame_send(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_link_inject_frame proxy;    /**< declare main API struct */
+    bcmolt_epon_link_key key = { };         /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_link_inject_frame proxy;\n");
+    bcmcli_log("bcmolt_epon_link_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_proxy_send");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_LINK_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "mac_address");
+    if (cli_parm != NULL)
+    {
+        key.mac_address = cli_parm->value.mac;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "mac_address is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.mac_address = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_LINK_KEY_ID_MAC_ADDRESS, &key.mac_address);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_PROXY_INIT(&proxy, epon_link, inject_frame, key);
+    bcmcli_log("BCMOLT_PROXY_INIT(&proxy, epon_link, inject_frame, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "frame.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_ethernet_frame_unmasked val = { };
+        cli_parm = bcmcli_find_named_parm(session, "frame.frame_octets");
+        if (cli_parm != NULL)
+        {
+            val.frame_octets.len = bcmolt_buf_get_used(&cli_parm->value.buffer);
+            val.frame_octets.val = apicli_byte_pool_calloc(byte_pool, val.frame_octets.len);
+            if (val.frame_octets.val == NULL)
+            {
+                apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+                return BCM_ERR_NOMEM;
+            }
+
+            bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+            bcmolt_buf_read(&cli_parm->value.buffer, val.frame_octets.val, val.frame_octets.len);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "frame.frame_octets is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_PROXY_PROP_SET(&proxy, epon_link, inject_frame, frame, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_ethernet_frame_unmasked val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_PROXY, BCMOLT_EPON_LINK_PROXY_ID_INJECT_FRAME, BCMOLT_EPON_LINK_INJECT_FRAME_ID_FRAME, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_PROXY_PROP_SET(&proxy, epon_link, inject_frame, frame, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_proxy_send(device_id, &proxy.hdr);
+    bcmcli_log("bcmolt_proxy_send(device_id, &proxy.hdr);\n");
+    apicli_print_complete(session, err, proxy.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_link_stat_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_link_stat_cfg stat_cfg; /**< declare main API struct */
+    bcmolt_epon_link_key key = { };     /**< declare key */
+    bcmolt_epon_link_stat_id stat_id;   /**< declare stat ID */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_link_stat_cfg stat_cfg;\n");
+    bcmcli_log("bcmolt_epon_link_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_stat_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_LINK_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "mac_address");
+    if (cli_parm != NULL)
+    {
+        key.mac_address = cli_parm->value.mac;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "mac_address is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.mac_address = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_LINK_KEY_ID_MAC_ADDRESS, &key.mac_address);
+    bcmcli_log(";\n");
+
+    /* set stat ID from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "sub");
+    if (cli_parm != NULL)
+    {
+        stat_id = (bcmolt_epon_link_stat_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    /* init the API struct */
+    switch (stat_id)
+    {
+        case BCMOLT_EPON_LINK_STAT_ID_RX_DATA_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_data_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_data_bytes, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_DATA_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_data_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_data_frames, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_64:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_frames_64, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_frames_64, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_65_127:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_frames_65_127, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_frames_65_127, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_128_255:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_frames_128_255, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_frames_128_255, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_256_511:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_frames_256_511, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_frames_256_511, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_512_1023:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_frames_512_1023, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_frames_512_1023, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_1024_1518:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_frames_1024_1518, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_frames_1024_1518, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_1519_2047:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_frames_1519_2047, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_frames_1519_2047, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_2048_4095:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_frames_2048_4095, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_frames_2048_4095, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_4096_9216:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_frames_4096_9216, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_frames_4096_9216, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_9217_16383:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_frames_9217_16383, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_frames_9217_16383, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_OAM_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_oam_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_oam_bytes, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_OAM_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_oam_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_oam_frames, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_MPCP_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_mpcp_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_mpcp_frames, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_BROADCAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_broadcast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_broadcast_frames, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_UNICAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_unicast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_unicast_frames, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_MULTICAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_multicast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_multicast_frames, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_REPORT_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_report_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_report_frames, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_FCS_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_fcs_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_fcs_error, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_OVERSIZE_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_oversize_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_oversize_error, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_RUNT_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_runt_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_runt_error, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_LINE_CODE_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_line_code_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_line_code_error, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_LINE_CODE_ERROR_MAX:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_line_code_error_max, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_line_code_error_max, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_TX_DATA_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_data_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_data_bytes, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_TX_DATA_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_data_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_data_frames, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_64:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_frames_64, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_frames_64, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_65_127:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_frames_65_127, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_frames_65_127, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_128_255:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_frames_128_255, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_frames_128_255, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_256_511:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_frames_256_511, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_frames_256_511, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_512_1023:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_frames_512_1023, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_frames_512_1023, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_1024_1518:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_frames_1024_1518, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_frames_1024_1518, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_1519_2047:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_frames_1519_2047, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_frames_1519_2047, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_2048_4095:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_frames_2048_4095, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_frames_2048_4095, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_4096_9216:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_frames_4096_9216, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_frames_4096_9216, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_9217_16383:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_frames_9217_16383, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_frames_9217_16383, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_TX_OAM_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_oam_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_oam_bytes, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_TX_OAM_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_oam_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_oam_frames, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_TX_MPCP_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_mpcp_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_mpcp_frames, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_TX_BROADCAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_broadcast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_broadcast_frames, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_TX_UNICAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_unicast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_unicast_frames, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_TX_MULTICAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_multicast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_multicast_frames, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_TX_GATES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_gates, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_gates, key);\n");
+            break;
+        default:
+            apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+            return BCM_ERR_RANGE;
+    }
+
+    /* call API */
+    err = bcmolt_stat_cfg_get(device_id, &stat_cfg.hdr);
+    bcmcli_log("bcmolt_stat_cfg_get(device_id, &stat_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &stat_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, stat_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_link_stat_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_link_stat_cfg stat_cfg; /**< declare main API struct */
+    bcmolt_epon_link_key key = { };     /**< declare key */
+    bcmolt_epon_link_stat_id stat_id;   /**< declare stat ID */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_link_stat_cfg stat_cfg;\n");
+    bcmcli_log("bcmolt_epon_link_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_stat_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_LINK_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "mac_address");
+    if (cli_parm != NULL)
+    {
+        key.mac_address = cli_parm->value.mac;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "mac_address is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.mac_address = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_LINK_KEY_ID_MAC_ADDRESS, &key.mac_address);
+    bcmcli_log(";\n");
+
+    /* set stat ID from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "sub");
+    if (cli_parm != NULL)
+    {
+        stat_id = (bcmolt_epon_link_stat_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    /* init the API struct */
+    switch (stat_id)
+    {
+        case BCMOLT_EPON_LINK_STAT_ID_RX_DATA_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_data_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_data_bytes, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_DATA_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_data_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_data_frames, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_64:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_frames_64, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_frames_64, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_65_127:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_frames_65_127, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_frames_65_127, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_128_255:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_frames_128_255, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_frames_128_255, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_256_511:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_frames_256_511, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_frames_256_511, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_512_1023:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_frames_512_1023, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_frames_512_1023, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_1024_1518:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_frames_1024_1518, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_frames_1024_1518, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_1519_2047:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_frames_1519_2047, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_frames_1519_2047, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_2048_4095:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_frames_2048_4095, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_frames_2048_4095, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_4096_9216:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_frames_4096_9216, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_frames_4096_9216, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_9217_16383:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_frames_9217_16383, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_frames_9217_16383, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_OAM_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_oam_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_oam_bytes, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_OAM_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_oam_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_oam_frames, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_MPCP_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_mpcp_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_mpcp_frames, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_BROADCAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_broadcast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_broadcast_frames, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_UNICAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_unicast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_unicast_frames, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_MULTICAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_multicast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_multicast_frames, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_REPORT_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_report_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_report_frames, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_FCS_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_fcs_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_fcs_error, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_OVERSIZE_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_oversize_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_oversize_error, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_RUNT_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_runt_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_runt_error, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_LINE_CODE_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_line_code_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_line_code_error, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_RX_LINE_CODE_ERROR_MAX:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_line_code_error_max, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, rx_line_code_error_max, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_TX_DATA_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_data_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_data_bytes, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_TX_DATA_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_data_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_data_frames, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_64:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_frames_64, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_frames_64, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_65_127:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_frames_65_127, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_frames_65_127, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_128_255:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_frames_128_255, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_frames_128_255, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_256_511:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_frames_256_511, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_frames_256_511, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_512_1023:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_frames_512_1023, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_frames_512_1023, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_1024_1518:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_frames_1024_1518, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_frames_1024_1518, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_1519_2047:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_frames_1519_2047, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_frames_1519_2047, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_2048_4095:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_frames_2048_4095, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_frames_2048_4095, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_4096_9216:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_frames_4096_9216, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_frames_4096_9216, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_9217_16383:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_frames_9217_16383, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_frames_9217_16383, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_TX_OAM_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_oam_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_oam_bytes, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_TX_OAM_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_oam_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_oam_frames, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_TX_MPCP_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_mpcp_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_mpcp_frames, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_TX_BROADCAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_broadcast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_broadcast_frames, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_TX_UNICAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_unicast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_unicast_frames, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_TX_MULTICAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_multicast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_multicast_frames, key);\n");
+            break;
+        case BCMOLT_EPON_LINK_STAT_ID_TX_GATES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_gates, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_link, tx_gates, key);\n");
+            break;
+        default:
+            apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+            return BCM_ERR_RANGE;
+    }
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_stat_alarm_config val = { };
+        cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.trigger.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.type");
+            if (cli_parm != NULL)
+            {
+                val.trigger.type = (bcmolt_stat_condition_type) cli_parm->value.enum_val;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.type is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            switch (val.trigger.type)
+            {
+                case BCMOLT_STAT_CONDITION_TYPE_RATE_THRESHOLD:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.rising");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_threshold.rising = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.rising is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.falling");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_threshold.falling = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.falling is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_RATE_RANGE:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.upper");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_range.upper = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.upper is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.lower");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_range.lower = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.lower is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_VALUE_THRESHOLD:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.limit");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.value_threshold.limit = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.limit is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_NONE:
+                    break;
+                default:
+                    apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+                    return BCM_ERR_RANGE;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.soak.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "cfg.soak.active_soak_time");
+            if (cli_parm != NULL)
+            {
+                val.soak.active_soak_time = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak.active_soak_time is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "cfg.soak.clear_soak_time");
+            if (cli_parm != NULL)
+            {
+                val.soak.clear_soak_time = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak.clear_soak_time is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_STAT_CFG_PROP_SET(&stat_cfg, epon_link, cfg, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_stat_alarm_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_STAT_CFG, 0, BCMOLT_EPON_LINK_STAT_CFG_ID_CFG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_STAT_CFG_PROP_SET(&stat_cfg, epon_link, cfg, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_stat_cfg_set(device_id, &stat_cfg.hdr);
+    bcmcli_log("bcmolt_stat_cfg_set(device_id, &stat_cfg.hdr);\n");
+    apicli_print_complete(session, err, stat_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_link_auto_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_link_auto_cfg auto_cfg; /**< declare main API struct */
+    bcmolt_epon_link_key key = { };     /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_link_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_epon_link_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_get");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, epon_link, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, epon_link, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "duplicate_mpcp_registration_request");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_link, duplicate_mpcp_registration_request);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_link, duplicate_mpcp_registration_request);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "encryption_enabled");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_link, encryption_enabled);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_link, encryption_enabled);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "key_exchange_failure");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_link, key_exchange_failure);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_link, key_exchange_failure);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "key_exchange_started");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_link, key_exchange_started);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_link, key_exchange_started);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "key_exchange_stopped");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_link, key_exchange_stopped);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_link, key_exchange_stopped);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "link_deleted");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_link, link_deleted);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_link, link_deleted);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "link_speed_mismatch");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_link, link_speed_mismatch);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_link, link_speed_mismatch);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mpcp_deregistered");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_link, mpcp_deregistered);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_link, mpcp_deregistered);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mpcp_discovered");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_link, mpcp_discovered);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_link, mpcp_discovered);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mpcp_reg_ack_timeout");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_link, mpcp_reg_ack_timeout);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_link, mpcp_reg_ack_timeout);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mpcp_report_timeout");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_link, mpcp_report_timeout);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_link, mpcp_report_timeout);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "oam_keepalive_timeout");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_link, oam_keepalive_timeout);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_link, oam_keepalive_timeout);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "oam_keepalive_timer_started");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_link, oam_keepalive_timer_started);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_link, oam_keepalive_timer_started);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "oam_keepalive_timer_stopped");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_link, oam_keepalive_timer_stopped);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_link, oam_keepalive_timer_stopped);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "preprovisioned_link_created");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_link, preprovisioned_link_created);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_link, preprovisioned_link_created);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "protection_switch_occurred");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_link, protection_switch_occurred);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_link, protection_switch_occurred);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "range_value_changed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_link, range_value_changed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_link, range_value_changed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rerange_failure");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_link, rerange_failure);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_link, rerange_failure);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_cleared");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_link, stat_alarm_cleared);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_link, stat_alarm_cleared);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_raised");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_link, stat_alarm_raised);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_link, stat_alarm_raised);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "static_registration_done");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_link, static_registration_done);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_link, static_registration_done);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_link, duplicate_mpcp_registration_request) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_link, encryption_enabled) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_link, key_exchange_failure) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_link, key_exchange_started) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_link, key_exchange_stopped) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_link, link_deleted) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_link, link_speed_mismatch) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_link, mpcp_deregistered) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_link, mpcp_discovered) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_link, mpcp_reg_ack_timeout) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_link, mpcp_report_timeout) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_link, oam_keepalive_timeout) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_link, oam_keepalive_timer_started) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_link, oam_keepalive_timer_stopped) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_link, preprovisioned_link_created) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_link, protection_switch_occurred) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_link, range_value_changed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_link, rerange_failure) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_link, stat_alarm_cleared) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_link, stat_alarm_raised) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_link, static_registration_done))
+    {
+        BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_link, all_properties);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_link, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &auto_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_link_auto_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_link_auto_cfg auto_cfg; /**< declare main API struct */
+    bcmolt_epon_link_key key = { };     /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_link_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_epon_link_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_set");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, epon_link, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, epon_link, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "duplicate_mpcp_registration_request");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_link, duplicate_mpcp_registration_request, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_link, duplicate_mpcp_registration_request, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_LINK_AUTO_CFG_ID_DUPLICATE_MPCP_REGISTRATION_REQUEST, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "encryption_enabled");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_link, encryption_enabled, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_link, encryption_enabled, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_LINK_AUTO_CFG_ID_ENCRYPTION_ENABLED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "key_exchange_failure");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_link, key_exchange_failure, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_link, key_exchange_failure, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_LINK_AUTO_CFG_ID_KEY_EXCHANGE_FAILURE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "key_exchange_started");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_link, key_exchange_started, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_link, key_exchange_started, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_LINK_AUTO_CFG_ID_KEY_EXCHANGE_STARTED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "key_exchange_stopped");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_link, key_exchange_stopped, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_link, key_exchange_stopped, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_LINK_AUTO_CFG_ID_KEY_EXCHANGE_STOPPED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "link_deleted");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_link, link_deleted, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_link, link_deleted, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_LINK_AUTO_CFG_ID_LINK_DELETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "link_speed_mismatch");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_link, link_speed_mismatch, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_link, link_speed_mismatch, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_LINK_AUTO_CFG_ID_LINK_SPEED_MISMATCH, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mpcp_deregistered");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_link, mpcp_deregistered, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_link, mpcp_deregistered, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_LINK_AUTO_CFG_ID_MPCP_DEREGISTERED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mpcp_discovered");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_link, mpcp_discovered, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_link, mpcp_discovered, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_LINK_AUTO_CFG_ID_MPCP_DISCOVERED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mpcp_reg_ack_timeout");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_link, mpcp_reg_ack_timeout, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_link, mpcp_reg_ack_timeout, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_LINK_AUTO_CFG_ID_MPCP_REG_ACK_TIMEOUT, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mpcp_report_timeout");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_link, mpcp_report_timeout, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_link, mpcp_report_timeout, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_LINK_AUTO_CFG_ID_MPCP_REPORT_TIMEOUT, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "oam_keepalive_timeout");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_link, oam_keepalive_timeout, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_link, oam_keepalive_timeout, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_LINK_AUTO_CFG_ID_OAM_KEEPALIVE_TIMEOUT, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "oam_keepalive_timer_started");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_link, oam_keepalive_timer_started, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_link, oam_keepalive_timer_started, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_LINK_AUTO_CFG_ID_OAM_KEEPALIVE_TIMER_STARTED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "oam_keepalive_timer_stopped");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_link, oam_keepalive_timer_stopped, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_link, oam_keepalive_timer_stopped, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_LINK_AUTO_CFG_ID_OAM_KEEPALIVE_TIMER_STOPPED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "preprovisioned_link_created");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_link, preprovisioned_link_created, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_link, preprovisioned_link_created, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_LINK_AUTO_CFG_ID_PREPROVISIONED_LINK_CREATED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "protection_switch_occurred");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_link, protection_switch_occurred, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_link, protection_switch_occurred, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_LINK_AUTO_CFG_ID_PROTECTION_SWITCH_OCCURRED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "range_value_changed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_link, range_value_changed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_link, range_value_changed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_LINK_AUTO_CFG_ID_RANGE_VALUE_CHANGED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rerange_failure");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_link, rerange_failure, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_link, rerange_failure, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_LINK_AUTO_CFG_ID_RERANGE_FAILURE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_cleared");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_link, stat_alarm_cleared, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_link, stat_alarm_cleared, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_LINK_AUTO_CFG_ID_STAT_ALARM_CLEARED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_raised");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_link, stat_alarm_raised, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_link, stat_alarm_raised, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_LINK_AUTO_CFG_ID_STAT_ALARM_RAISED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "static_registration_done");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_link, static_registration_done, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_link, static_registration_done, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_LINK_AUTO_CFG_ID_STATIC_REGISTRATION_DONE, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);\n");
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_ni_cfg_get(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_ni_cfg cfg;         /**< declare main API struct */
+    bcmolt_epon_ni_key key = { };   /**< declare key */
+    uint8_t *list_mem;              /**< declare memory buffer for variable-sized lists */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_ni_cfg cfg;\n");
+    bcmcli_log("bcmolt_epon_ni_key key = {  };\n");
+    bcmcli_log("uint8_t* list_mem;\n");
+    apicli_print_start(session, "bcmolt_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_NI_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, epon_ni, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, epon_ni, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "mac_address");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_ni, mac_address);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_ni, mac_address);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni_en");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_ni, epon_ni_en);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_ni, epon_ni_en);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "registration_behavior");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_ni, registration_behavior);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_ni, registration_behavior);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mtu_1g");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_ni, mtu_1g);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_ni, mtu_1g);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mtu_10g");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_ni, mtu_10g);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_ni, mtu_10g);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "minimum_fiber_length");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_ni, minimum_fiber_length);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_ni, minimum_fiber_length);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "maximum_fiber_length");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_ni, maximum_fiber_length);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_ni, maximum_fiber_length);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "grant_spacing_tq");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_ni, grant_spacing_tq);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_ni, grant_spacing_tq);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "epon_logical_link_options");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_ni, epon_logical_link_options);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_ni, epon_logical_link_options);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mpcp_discovery_period_ms");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_ni, mpcp_discovery_period_ms);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_ni, mpcp_discovery_period_ms);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "alarm_state");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_ni, alarm_state);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_ni, alarm_state);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "all_links");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_ni, all_links);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_ni, all_links);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "encryption_cfg");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_ni, encryption_cfg);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_ni, encryption_cfg);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "protection_switching_cfg");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_ni, protection_switching_cfg);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_ni, protection_switching_cfg);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "clock_transport_cfg");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_ni, clock_transport_cfg);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_ni, clock_transport_cfg);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "dropdown_weights");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_ni, dropdown_weights);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_ni, dropdown_weights);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "approximate_solicited_usage");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_ni, approximate_solicited_usage);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_ni, approximate_solicited_usage);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "approximate_tdm_usage");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_ni, approximate_tdm_usage);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_ni, approximate_tdm_usage);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "no_reports_soak_time");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_ni, no_reports_soak_time);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_ni, no_reports_soak_time);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "pon_aggregate_shaper");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_ni, pon_aggregate_shaper);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_ni, pon_aggregate_shaper);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "estimated_pon_latency_tq");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_ni, estimated_pon_latency_tq);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_ni, estimated_pon_latency_tq);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_upgrade_params");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_ni, onu_upgrade_params);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_ni, onu_upgrade_params);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "auto_rogue_detect_10g_en");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_ni, auto_rogue_detect_10g_en);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_ni, auto_rogue_detect_10g_en);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "auto_rogue_detect_1g_en");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_ni, auto_rogue_detect_1g_en);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_ni, auto_rogue_detect_1g_en);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "auto_rogue_detect_10g_threshold");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_ni, auto_rogue_detect_10g_threshold);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_ni, auto_rogue_detect_10g_threshold);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_CFG_PROP_IS_SET(&cfg, epon_ni, mac_address) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_ni, epon_ni_en) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_ni, registration_behavior) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_ni, mtu_1g) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_ni, mtu_10g) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_ni, minimum_fiber_length) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_ni, maximum_fiber_length) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_ni, grant_spacing_tq) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_ni, epon_logical_link_options) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_ni, mpcp_discovery_period_ms) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_ni, alarm_state) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_ni, all_links) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_ni, encryption_cfg) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_ni, protection_switching_cfg) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_ni, clock_transport_cfg) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_ni, dropdown_weights) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_ni, approximate_solicited_usage) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_ni, approximate_tdm_usage) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_ni, no_reports_soak_time) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_ni, pon_aggregate_shaper) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_ni, estimated_pon_latency_tq) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_ni, onu_upgrade_params) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_ni, auto_rogue_detect_10g_en) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_ni, auto_rogue_detect_1g_en) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_ni, auto_rogue_detect_10g_threshold))
+    {
+        BCMOLT_CFG_PROP_GET(&cfg, epon_ni, all_properties);
+        bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_ni, all_properties);\n");
+    }
+
+    /* set memory to use for variable-sized lists */
+    list_mem = apicli_byte_pool_calloc(byte_pool, APICLI_DYNAMIC_LIST_BUFFER_SIZE);
+    if (list_mem == NULL)
+    {
+        apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+        return BCM_ERR_NOMEM;
+    }
+
+    bcmcli_log("list_mem = bcmos_calloc(APICLI_DYNAMIC_LIST_BUFFER_SIZE);\n");
+    BCMOLT_CFG_LIST_BUF_SET(&cfg, epon_ni, list_mem, APICLI_DYNAMIC_LIST_BUFFER_SIZE);
+    bcmcli_log("BCMOLT_CFG_LIST_BUF_SET(&cfg, epon_ni, list_mem, APICLI_DYNAMIC_LIST_BUFFER_SIZE);\n");
+
+    /* call API */
+    err = bcmolt_cfg_get(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_get(device_id, &cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_ni_cfg_set(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_ni_cfg cfg;         /**< declare main API struct */
+    bcmolt_epon_ni_key key = { };   /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_ni_cfg cfg;\n");
+    bcmcli_log("bcmolt_epon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_NI_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, epon_ni, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, epon_ni, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "mac_address");
+    if (cli_parm != NULL)
+    {
+        bcmos_mac_address val;
+        val = cli_parm->value.mac;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_ni, mac_address, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_ni, mac_address, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_NI_CFG_ID_MAC_ADDRESS, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "registration_behavior");
+    if (cli_parm != NULL)
+    {
+        bcmolt_registration_behavior val;
+        val = (bcmolt_registration_behavior) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_ni, registration_behavior, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_ni, registration_behavior, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_NI_CFG_ID_REGISTRATION_BEHAVIOR, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mtu_1g");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_ni, mtu_1g, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_ni, mtu_1g, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_NI_CFG_ID_MTU_1G, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mtu_10g");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_ni, mtu_10g, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_ni, mtu_10g, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_NI_CFG_ID_MTU_10G, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "minimum_fiber_length");
+    if (cli_parm != NULL)
+    {
+        bcmolt_meters val;
+        val = (bcmolt_meters) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_ni, minimum_fiber_length, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_ni, minimum_fiber_length, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_NI_CFG_ID_MINIMUM_FIBER_LENGTH, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "maximum_fiber_length");
+    if (cli_parm != NULL)
+    {
+        bcmolt_meters val;
+        val = (bcmolt_meters) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_ni, maximum_fiber_length, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_ni, maximum_fiber_length, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_NI_CFG_ID_MAXIMUM_FIBER_LENGTH, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "grant_spacing_tq");
+    if (cli_parm != NULL)
+    {
+        bcmolt_time_quanta val;
+        val = (bcmolt_time_quanta) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_ni, grant_spacing_tq, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_ni, grant_spacing_tq, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_NI_CFG_ID_GRANT_SPACING_TQ, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "epon_logical_link_options.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_logical_link_options val = { };
+        cli_parm = bcmcli_find_parm_by_prefix(session, "epon_logical_link_options.registration_gate_mode.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "epon_logical_link_options.registration_gate_mode.registration_gate_mode");
+            if (cli_parm != NULL)
+            {
+                val.registration_gate_mode.registration_gate_mode = (bcmolt_mpcp_gate_mode) cli_parm->value.enum_val;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "epon_logical_link_options.registration_gate_mode.registration_gate_mode is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            switch (val.registration_gate_mode.registration_gate_mode)
+            {
+                case BCMOLT_MPCP_GATE_MODE_TEKNOVUS:
+                    cli_parm = bcmcli_find_named_parm(session, "epon_logical_link_options.registration_gate_mode.reg_ack_timeout_ms");
+                    if (cli_parm != NULL)
+                    {
+                        val.registration_gate_mode.u.teknovus.reg_ack_timeout_ms = cli_parm->value.unumber;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "epon_logical_link_options.registration_gate_mode.reg_ack_timeout_ms is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_MPCP_GATE_MODE_CUSTOM:
+                    cli_parm = bcmcli_find_parm_by_prefix(session, "epon_logical_link_options.registration_gate_mode.gates.");
+                    if (cli_parm != NULL)
+                    {
+                        int32_t i0;
+                        val.registration_gate_mode.u.custom.gates.val = apicli_byte_pool_calloc(byte_pool, cli_parm->array_size * sizeof(*val.registration_gate_mode.u.custom.gates.val));
+                        if (val.registration_gate_mode.u.custom.gates.val == NULL)
+                        {
+                            apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+                            return BCM_ERR_NOMEM;
+                        }
+
+                        val.registration_gate_mode.u.custom.gates.len = cli_parm->array_size;
+                        cli_parm = bcmcli_find_named_parm(session, "epon_logical_link_options.registration_gate_mode.gates.flags");
+                        if (cli_parm != NULL)
+                        {
+                            if (cli_parm->array_size != val.registration_gate_mode.u.custom.gates.len)
+                            {
+                                apicli_print_complete(session, BCM_ERR_PARM, "epon_logical_link_options.registration_gate_mode.gates.flags is a different size than other arrays in the struct\n");
+                                return BCM_ERR_PARM;
+                            }
+
+                            for (i0 = 0; i0 < val.registration_gate_mode.u.custom.gates.len; i0++)
+                            {
+                                val.registration_gate_mode.u.custom.gates.val[i0].flags = (bcmolt_mpcp_registration_gate_flags) cli_parm->values[i0].enum_val;
+                            }
+                        }
+
+                        cli_parm = bcmcli_find_named_parm(session, "epon_logical_link_options.registration_gate_mode.gates.delay_before_ms");
+                        if (cli_parm != NULL)
+                        {
+                            if (cli_parm->array_size != val.registration_gate_mode.u.custom.gates.len)
+                            {
+                                apicli_print_complete(session, BCM_ERR_PARM, "epon_logical_link_options.registration_gate_mode.gates.delay_before_ms is a different size than other arrays in the struct\n");
+                                return BCM_ERR_PARM;
+                            }
+
+                            for (i0 = 0; i0 < val.registration_gate_mode.u.custom.gates.len; i0++)
+                            {
+                                val.registration_gate_mode.u.custom.gates.val[i0].delay_before_ms = cli_parm->values[i0].unumber;
+                            }
+                        }
+
+                        cli_parm = bcmcli_find_named_parm(session, "epon_logical_link_options.registration_gate_mode.gates.gate_size_tq");
+                        if (cli_parm != NULL)
+                        {
+                            if (cli_parm->array_size != val.registration_gate_mode.u.custom.gates.len)
+                            {
+                                apicli_print_complete(session, BCM_ERR_PARM, "epon_logical_link_options.registration_gate_mode.gates.gate_size_tq is a different size than other arrays in the struct\n");
+                                return BCM_ERR_PARM;
+                            }
+
+                            for (i0 = 0; i0 < val.registration_gate_mode.u.custom.gates.len; i0++)
+                            {
+                                val.registration_gate_mode.u.custom.gates.val[i0].gate_size_tq = (bcmolt_time_quanta) cli_parm->values[i0].unumber;
+                            }
+                        }
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "epon_logical_link_options.registration_gate_mode.gates is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                default:
+                    apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+                    return BCM_ERR_RANGE;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "epon_logical_link_options.registration_gate_mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "epon_logical_link_options.reporting_mode");
+        if (cli_parm != NULL)
+        {
+            val.reporting_mode = (bcmolt_epon_dba_reporting_mode) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "epon_logical_link_options.reporting_mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "epon_logical_link_options.max_links");
+        if (cli_parm != NULL)
+        {
+            val.max_links = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "epon_logical_link_options.max_links is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_ni, epon_logical_link_options, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_epon_logical_link_options val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_NI_CFG_ID_EPON_LOGICAL_LINK_OPTIONS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_ni, epon_logical_link_options, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mpcp_discovery_period_ms");
+    if (cli_parm != NULL)
+    {
+        uint32_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_ni, mpcp_discovery_period_ms, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_ni, mpcp_discovery_period_ms, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_NI_CFG_ID_MPCP_DISCOVERY_PERIOD_MS, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "encryption_cfg.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_ni_encryption_cfg val = { };
+        cli_parm = bcmcli_find_named_parm(session, "encryption_cfg.downstream_encryption_mode");
+        if (cli_parm != NULL)
+        {
+            val.downstream_encryption_mode = (bcmolt_epon_encryption_mode) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "encryption_cfg.downstream_encryption_mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "encryption_cfg.upstream_encryption_mode");
+        if (cli_parm != NULL)
+        {
+            val.upstream_encryption_mode = (bcmolt_epon_encryption_mode) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "encryption_cfg.upstream_encryption_mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_ni, encryption_cfg, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_epon_ni_encryption_cfg val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_NI_CFG_ID_ENCRYPTION_CFG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_ni, encryption_cfg, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "protection_switching_cfg.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_protection_switching_configuration val = { };
+        cli_parm = bcmcli_find_named_parm(session, "protection_switching_cfg.protection_type");
+        if (cli_parm != NULL)
+        {
+            val.protection_type = (bcmolt_epon_protection_switching_type) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "protection_switching_cfg.protection_type is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "protection_switching_cfg.protection_switching_options");
+        if (cli_parm != NULL)
+        {
+            val.protection_switching_options = (bcmolt_protection_switching_detection_options) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "protection_switching_cfg.protection_switching_options is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "protection_switching_cfg.rerange_options");
+        if (cli_parm != NULL)
+        {
+            val.rerange_options = (bcmolt_epon_protection_switching_reranging_options) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "protection_switching_cfg.rerange_options is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "protection_switching_cfg.rerange_attempts");
+        if (cli_parm != NULL)
+        {
+            val.rerange_attempts = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "protection_switching_cfg.rerange_attempts is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "protection_switching_cfg.rerange_interval");
+        if (cli_parm != NULL)
+        {
+            val.rerange_interval = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "protection_switching_cfg.rerange_interval is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "protection_switching_cfg.sync_gate_duration");
+        if (cli_parm != NULL)
+        {
+            val.sync_gate_duration = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "protection_switching_cfg.sync_gate_duration is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "protection_switching_cfg.gpio_input");
+        if (cli_parm != NULL)
+        {
+            val.gpio_input = (bcmolt_gpio_pin) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "protection_switching_cfg.gpio_input is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "protection_switching_cfg.gpio_input_polarity");
+        if (cli_parm != NULL)
+        {
+            val.gpio_input_polarity = (bcmolt_gpio_polarity) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "protection_switching_cfg.gpio_input_polarity is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "protection_switching_cfg.gpio_output");
+        if (cli_parm != NULL)
+        {
+            val.gpio_output = (bcmolt_gpio_pin) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "protection_switching_cfg.gpio_output is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "protection_switching_cfg.gpio_output_polarity");
+        if (cli_parm != NULL)
+        {
+            val.gpio_output_polarity = (bcmolt_gpio_polarity) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "protection_switching_cfg.gpio_output_polarity is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_ni, protection_switching_cfg, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_epon_protection_switching_configuration val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_NI_CFG_ID_PROTECTION_SWITCHING_CFG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_ni, protection_switching_cfg, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "clock_transport_cfg.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_clock_transport_configuration val = { };
+        cli_parm = bcmcli_find_named_parm(session, "clock_transport_cfg.epon_clock_transport_mode");
+        if (cli_parm != NULL)
+        {
+            val.epon_clock_transport_mode = (bcmolt_epon_clock_transport_mode) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "clock_transport_cfg.epon_clock_transport_mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_ni, clock_transport_cfg, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_epon_clock_transport_configuration val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_NI_CFG_ID_CLOCK_TRANSPORT_CFG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_ni, clock_transport_cfg, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "dropdown_weights.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_arr_u16_7 val = { };
+        cli_parm = bcmcli_find_named_parm(session, "dropdown_weights.arr");
+        if (cli_parm != NULL)
+        {
+            int32_t i1;
+            if (cli_parm->array_size != 7)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "array dropdown_weights.arr must have 7 elements\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i1 = 0; i1 < 7; i1++)
+            {
+                val.arr[i1] = cli_parm->values[i1].unumber;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "dropdown_weights.arr is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_ni, dropdown_weights, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_arr_u16_7 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_NI_CFG_ID_DROPDOWN_WEIGHTS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_ni, dropdown_weights, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "no_reports_soak_time");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_ni, no_reports_soak_time, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_ni, no_reports_soak_time, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_NI_CFG_ID_NO_REPORTS_SOAK_TIME, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "pon_aggregate_shaper.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_pon_aggregate_shaper val = { };
+        cli_parm = bcmcli_find_named_parm(session, "pon_aggregate_shaper.bandwidth_kbps");
+        if (cli_parm != NULL)
+        {
+            val.bandwidth_kbps = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "pon_aggregate_shaper.bandwidth_kbps is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "pon_aggregate_shaper.mbs_kB");
+        if (cli_parm != NULL)
+        {
+            val.mbs_kB = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "pon_aggregate_shaper.mbs_kB is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_ni, pon_aggregate_shaper, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_pon_aggregate_shaper val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_NI_CFG_ID_PON_AGGREGATE_SHAPER, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_ni, pon_aggregate_shaper, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "onu_upgrade_params.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_onu_upgrade_params val = { };
+        cli_parm = bcmcli_find_named_parm(session, "onu_upgrade_params.oam_extension_type");
+        if (cli_parm != NULL)
+        {
+            val.oam_extension_type = (bcmolt_epon_oam_extension_type) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "onu_upgrade_params.oam_extension_type is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        switch (val.oam_extension_type)
+        {
+            case BCMOLT_EPON_OAM_EXTENSION_TYPE_RESERVED:
+                break;
+            case BCMOLT_EPON_OAM_EXTENSION_TYPE_BROADCOM:
+                cli_parm = bcmcli_find_named_parm(session, "onu_upgrade_params.response_timeout_ms");
+                if (cli_parm != NULL)
+                {
+                    val.u.broadcom.response_timeout_ms = cli_parm->value.unumber;
+                }
+                else
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "onu_upgrade_params.response_timeout_ms is not set\n");
+                    return BCM_ERR_PARM;
+                }
+                break;
+            case BCMOLT_EPON_OAM_EXTENSION_TYPE_CTC:
+                cli_parm = bcmcli_find_named_parm(session, "onu_upgrade_params.response_timeout_ms");
+                if (cli_parm != NULL)
+                {
+                    val.u.ctc.response_timeout_ms = cli_parm->value.unumber;
+                }
+                else
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "onu_upgrade_params.response_timeout_ms is not set\n");
+                    return BCM_ERR_PARM;
+                }
+                break;
+            case BCMOLT_EPON_OAM_EXTENSION_TYPE_DASAN:
+                cli_parm = bcmcli_find_named_parm(session, "onu_upgrade_params.response_timeout_ms");
+                if (cli_parm != NULL)
+                {
+                    val.u.dasan.response_timeout_ms = cli_parm->value.unumber;
+                }
+                else
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "onu_upgrade_params.response_timeout_ms is not set\n");
+                    return BCM_ERR_PARM;
+                }
+                break;
+            case BCMOLT_EPON_OAM_EXTENSION_TYPE_KT:
+                cli_parm = bcmcli_find_named_parm(session, "onu_upgrade_params.response_timeout_ms");
+                if (cli_parm != NULL)
+                {
+                    val.u.kt.response_timeout_ms = cli_parm->value.unumber;
+                }
+                else
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "onu_upgrade_params.response_timeout_ms is not set\n");
+                    return BCM_ERR_PARM;
+                }
+                break;
+            case BCMOLT_EPON_OAM_EXTENSION_TYPE_DPOE:
+                cli_parm = bcmcli_find_named_parm(session, "onu_upgrade_params.response_timeout_ms");
+                if (cli_parm != NULL)
+                {
+                    val.u.dpoe.response_timeout_ms = cli_parm->value.unumber;
+                }
+                else
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "onu_upgrade_params.response_timeout_ms is not set\n");
+                    return BCM_ERR_PARM;
+                }
+
+                cli_parm = bcmcli_find_named_parm(session, "onu_upgrade_params.block_size");
+                if (cli_parm != NULL)
+                {
+                    val.u.dpoe.block_size = cli_parm->value.unumber;
+                }
+                else
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "onu_upgrade_params.block_size is not set\n");
+                    return BCM_ERR_PARM;
+                }
+
+                cli_parm = bcmcli_find_named_parm(session, "onu_upgrade_params.final_ack_response_timeout");
+                if (cli_parm != NULL)
+                {
+                    val.u.dpoe.final_ack_response_timeout = cli_parm->value.unumber;
+                }
+                else
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "onu_upgrade_params.final_ack_response_timeout is not set\n");
+                    return BCM_ERR_PARM;
+                }
+                break;
+            default:
+                apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+                return BCM_ERR_RANGE;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_ni, onu_upgrade_params, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_epon_onu_upgrade_params val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_NI_CFG_ID_ONU_UPGRADE_PARAMS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_ni, onu_upgrade_params, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "auto_rogue_detect_10g_en");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_ni, auto_rogue_detect_10g_en, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_ni, auto_rogue_detect_10g_en, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_NI_CFG_ID_AUTO_ROGUE_DETECT_10G_EN, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "auto_rogue_detect_1g_en");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_ni, auto_rogue_detect_1g_en, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_ni, auto_rogue_detect_1g_en, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_NI_CFG_ID_AUTO_ROGUE_DETECT_1G_EN, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "auto_rogue_detect_10g_threshold");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_ni, auto_rogue_detect_10g_threshold, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_ni, auto_rogue_detect_10g_threshold, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_NI_CFG_ID_AUTO_ROGUE_DETECT_10G_THRESHOLD, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_set(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_set(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_ni_cfg_clear(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_ni_cfg cfg;         /**< declare main API struct */
+    bcmolt_epon_ni_key key = { };   /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_ni_cfg cfg;\n");
+    bcmcli_log("bcmolt_epon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_clear");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_NI_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, epon_ni, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, epon_ni, key);\n");
+
+    /* call API */
+    err = bcmolt_cfg_clear(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_clear(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_ni_cfg_get_multi(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_ni_cfg cfg;         /**< declare main API struct */
+    bcmolt_epon_ni_key key = { };   /**< declare key */
+    bcmolt_msg_set *msg_set = NULL; /**< declare message set */
+    uint32_t max_msgs;              /**< declare max number of msgs to get */
+    bcmos_bool invert_filter;       /**< declare filter invert flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_ni_cfg cfg;\n");
+    bcmcli_log("bcmolt_epon_ni_key key = {  };\n");
+    bcmcli_log("bcmolt_msg_set* msg_set = NULL;\n");
+    bcmcli_log("uint32_t max_msgs;\n");
+    bcmcli_log("bcmos_bool invert_filter;\n");
+    apicli_print_start(session, "bcmolt_cfg_get_multi");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_NI_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+
+    /* set max number of msgs from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "max_msgs");
+    if (cli_parm != NULL)
+    {
+        max_msgs = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "max_msgs is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("max_msgs = %d;\n", max_msgs);
+
+    /* set filter invert flag from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "filter_invert");
+    if (cli_parm != NULL)
+    {
+        invert_filter = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "filter_invert is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("invert_filter = %s;\n", (invert_filter) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* allocate message set */
+    err = apicli_msg_set_alloc(byte_pool, BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    bcmcli_log("bcmolt_msg_set_alloc(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, epon_ni, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, epon_ni, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "filter.mac_address");
+    if (cli_parm != NULL)
+    {
+        bcmos_mac_address val;
+        val = cli_parm->value.mac;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_ni, mac_address, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_ni, mac_address, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_NI_CFG_ID_MAC_ADDRESS, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mac_address");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, mac_address);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, mac_address);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.epon_ni_en");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_ni_en_state val;
+        val = (bcmolt_epon_ni_en_state) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_ni, epon_ni_en, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_ni, epon_ni_en, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_NI_CFG_ID_EPON_NI_EN, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni_en");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, epon_ni_en);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, epon_ni_en);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.registration_behavior");
+    if (cli_parm != NULL)
+    {
+        bcmolt_registration_behavior val;
+        val = (bcmolt_registration_behavior) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_ni, registration_behavior, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_ni, registration_behavior, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_NI_CFG_ID_REGISTRATION_BEHAVIOR, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "registration_behavior");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, registration_behavior);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, registration_behavior);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.mtu_1g");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_ni, mtu_1g, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_ni, mtu_1g, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_NI_CFG_ID_MTU_1G, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mtu_1g");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, mtu_1g);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, mtu_1g);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.mtu_10g");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_ni, mtu_10g, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_ni, mtu_10g, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_NI_CFG_ID_MTU_10G, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mtu_10g");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, mtu_10g);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, mtu_10g);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.minimum_fiber_length");
+    if (cli_parm != NULL)
+    {
+        bcmolt_meters val;
+        val = (bcmolt_meters) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_ni, minimum_fiber_length, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_ni, minimum_fiber_length, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_NI_CFG_ID_MINIMUM_FIBER_LENGTH, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "minimum_fiber_length");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, minimum_fiber_length);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, minimum_fiber_length);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.maximum_fiber_length");
+    if (cli_parm != NULL)
+    {
+        bcmolt_meters val;
+        val = (bcmolt_meters) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_ni, maximum_fiber_length, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_ni, maximum_fiber_length, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_NI_CFG_ID_MAXIMUM_FIBER_LENGTH, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "maximum_fiber_length");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, maximum_fiber_length);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, maximum_fiber_length);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.grant_spacing_tq");
+    if (cli_parm != NULL)
+    {
+        bcmolt_time_quanta val;
+        val = (bcmolt_time_quanta) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_ni, grant_spacing_tq, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_ni, grant_spacing_tq, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_NI_CFG_ID_GRANT_SPACING_TQ, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "grant_spacing_tq");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, grant_spacing_tq);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, grant_spacing_tq);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.epon_logical_link_options.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_logical_link_options val = { };
+        cli_parm = bcmcli_find_parm_by_prefix(session, "filter.epon_logical_link_options.registration_gate_mode.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "filter.epon_logical_link_options.registration_gate_mode.registration_gate_mode");
+            if (cli_parm != NULL)
+            {
+                val.registration_gate_mode.registration_gate_mode = (bcmolt_mpcp_gate_mode) cli_parm->value.enum_val;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.epon_logical_link_options.registration_gate_mode.registration_gate_mode is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            switch (val.registration_gate_mode.registration_gate_mode)
+            {
+                case BCMOLT_MPCP_GATE_MODE_TEKNOVUS:
+                    cli_parm = bcmcli_find_named_parm(session, "filter.epon_logical_link_options.registration_gate_mode.reg_ack_timeout_ms");
+                    if (cli_parm != NULL)
+                    {
+                        val.registration_gate_mode.u.teknovus.reg_ack_timeout_ms = cli_parm->value.unumber;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "filter.epon_logical_link_options.registration_gate_mode.reg_ack_timeout_ms is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_MPCP_GATE_MODE_CUSTOM:
+                    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.epon_logical_link_options.registration_gate_mode.gates.");
+                    if (cli_parm != NULL)
+                    {
+                        int32_t i0;
+                        val.registration_gate_mode.u.custom.gates.val = apicli_byte_pool_calloc(byte_pool, cli_parm->array_size * sizeof(*val.registration_gate_mode.u.custom.gates.val));
+                        if (val.registration_gate_mode.u.custom.gates.val == NULL)
+                        {
+                            apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+                            return BCM_ERR_NOMEM;
+                        }
+
+                        val.registration_gate_mode.u.custom.gates.len = cli_parm->array_size;
+                        cli_parm = bcmcli_find_named_parm(session, "filter.epon_logical_link_options.registration_gate_mode.gates.flags");
+                        if (cli_parm != NULL)
+                        {
+                            if (cli_parm->array_size != val.registration_gate_mode.u.custom.gates.len)
+                            {
+                                apicli_print_complete(session, BCM_ERR_PARM, "filter.epon_logical_link_options.registration_gate_mode.gates.flags is a different size than other arrays in the struct\n");
+                                return BCM_ERR_PARM;
+                            }
+
+                            for (i0 = 0; i0 < val.registration_gate_mode.u.custom.gates.len; i0++)
+                            {
+                                val.registration_gate_mode.u.custom.gates.val[i0].flags = (bcmolt_mpcp_registration_gate_flags) cli_parm->values[i0].enum_val;
+                            }
+                        }
+
+                        cli_parm = bcmcli_find_named_parm(session, "filter.epon_logical_link_options.registration_gate_mode.gates.delay_before_ms");
+                        if (cli_parm != NULL)
+                        {
+                            if (cli_parm->array_size != val.registration_gate_mode.u.custom.gates.len)
+                            {
+                                apicli_print_complete(session, BCM_ERR_PARM, "filter.epon_logical_link_options.registration_gate_mode.gates.delay_before_ms is a different size than other arrays in the struct\n");
+                                return BCM_ERR_PARM;
+                            }
+
+                            for (i0 = 0; i0 < val.registration_gate_mode.u.custom.gates.len; i0++)
+                            {
+                                val.registration_gate_mode.u.custom.gates.val[i0].delay_before_ms = cli_parm->values[i0].unumber;
+                            }
+                        }
+
+                        cli_parm = bcmcli_find_named_parm(session, "filter.epon_logical_link_options.registration_gate_mode.gates.gate_size_tq");
+                        if (cli_parm != NULL)
+                        {
+                            if (cli_parm->array_size != val.registration_gate_mode.u.custom.gates.len)
+                            {
+                                apicli_print_complete(session, BCM_ERR_PARM, "filter.epon_logical_link_options.registration_gate_mode.gates.gate_size_tq is a different size than other arrays in the struct\n");
+                                return BCM_ERR_PARM;
+                            }
+
+                            for (i0 = 0; i0 < val.registration_gate_mode.u.custom.gates.len; i0++)
+                            {
+                                val.registration_gate_mode.u.custom.gates.val[i0].gate_size_tq = (bcmolt_time_quanta) cli_parm->values[i0].unumber;
+                            }
+                        }
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "filter.epon_logical_link_options.registration_gate_mode.gates is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                default:
+                    apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+                    return BCM_ERR_RANGE;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.epon_logical_link_options.registration_gate_mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.epon_logical_link_options.reporting_mode");
+        if (cli_parm != NULL)
+        {
+            val.reporting_mode = (bcmolt_epon_dba_reporting_mode) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.epon_logical_link_options.reporting_mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.epon_logical_link_options.max_links");
+        if (cli_parm != NULL)
+        {
+            val.max_links = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.epon_logical_link_options.max_links is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_ni, epon_logical_link_options, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_epon_logical_link_options val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_NI_CFG_ID_EPON_LOGICAL_LINK_OPTIONS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_ni, epon_logical_link_options, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "epon_logical_link_options");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, epon_logical_link_options);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, epon_logical_link_options);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.mpcp_discovery_period_ms");
+    if (cli_parm != NULL)
+    {
+        uint32_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_ni, mpcp_discovery_period_ms, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_ni, mpcp_discovery_period_ms, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_NI_CFG_ID_MPCP_DISCOVERY_PERIOD_MS, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mpcp_discovery_period_ms");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, mpcp_discovery_period_ms);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, mpcp_discovery_period_ms);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.alarm_state.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_ni_alarm_state val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.no_reports");
+        if (cli_parm != NULL)
+        {
+            val.no_reports = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.no_reports is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_ni, alarm_state, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_epon_ni_alarm_state val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_NI_CFG_ID_ALARM_STATE, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_ni, alarm_state, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "alarm_state");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, alarm_state);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, alarm_state);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.all_links");
+    if (cli_parm != NULL)
+    {
+        bcmolt_macaddress_list_u32_max_2048 val = { };
+        int32_t i1;
+        val.val = apicli_byte_pool_calloc(byte_pool, cli_parm->array_size * sizeof(*val.val));
+        if (val.val == NULL)
+        {
+            apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+            return BCM_ERR_NOMEM;
+        }
+
+        val.len = cli_parm->array_size;
+        for (i1 = 0; i1 < val.len; i1++)
+        {
+            val.val[i1] = cli_parm->values[i1].mac;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_ni, all_links, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_macaddress_list_u32_max_2048 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_NI_CFG_ID_ALL_LINKS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_ni, all_links, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "all_links");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, all_links);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, all_links);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.encryption_cfg.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_ni_encryption_cfg val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.encryption_cfg.downstream_encryption_mode");
+        if (cli_parm != NULL)
+        {
+            val.downstream_encryption_mode = (bcmolt_epon_encryption_mode) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.encryption_cfg.downstream_encryption_mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.encryption_cfg.upstream_encryption_mode");
+        if (cli_parm != NULL)
+        {
+            val.upstream_encryption_mode = (bcmolt_epon_encryption_mode) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.encryption_cfg.upstream_encryption_mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_ni, encryption_cfg, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_epon_ni_encryption_cfg val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_NI_CFG_ID_ENCRYPTION_CFG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_ni, encryption_cfg, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "encryption_cfg");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, encryption_cfg);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, encryption_cfg);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.protection_switching_cfg.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_protection_switching_configuration val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.protection_switching_cfg.protection_type");
+        if (cli_parm != NULL)
+        {
+            val.protection_type = (bcmolt_epon_protection_switching_type) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.protection_switching_cfg.protection_type is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.protection_switching_cfg.protection_switching_options");
+        if (cli_parm != NULL)
+        {
+            val.protection_switching_options = (bcmolt_protection_switching_detection_options) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.protection_switching_cfg.protection_switching_options is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.protection_switching_cfg.rerange_options");
+        if (cli_parm != NULL)
+        {
+            val.rerange_options = (bcmolt_epon_protection_switching_reranging_options) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.protection_switching_cfg.rerange_options is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.protection_switching_cfg.rerange_attempts");
+        if (cli_parm != NULL)
+        {
+            val.rerange_attempts = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.protection_switching_cfg.rerange_attempts is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.protection_switching_cfg.rerange_interval");
+        if (cli_parm != NULL)
+        {
+            val.rerange_interval = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.protection_switching_cfg.rerange_interval is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.protection_switching_cfg.sync_gate_duration");
+        if (cli_parm != NULL)
+        {
+            val.sync_gate_duration = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.protection_switching_cfg.sync_gate_duration is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.protection_switching_cfg.gpio_input");
+        if (cli_parm != NULL)
+        {
+            val.gpio_input = (bcmolt_gpio_pin) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.protection_switching_cfg.gpio_input is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.protection_switching_cfg.gpio_input_polarity");
+        if (cli_parm != NULL)
+        {
+            val.gpio_input_polarity = (bcmolt_gpio_polarity) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.protection_switching_cfg.gpio_input_polarity is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.protection_switching_cfg.gpio_output");
+        if (cli_parm != NULL)
+        {
+            val.gpio_output = (bcmolt_gpio_pin) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.protection_switching_cfg.gpio_output is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.protection_switching_cfg.gpio_output_polarity");
+        if (cli_parm != NULL)
+        {
+            val.gpio_output_polarity = (bcmolt_gpio_polarity) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.protection_switching_cfg.gpio_output_polarity is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_ni, protection_switching_cfg, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_epon_protection_switching_configuration val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_NI_CFG_ID_PROTECTION_SWITCHING_CFG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_ni, protection_switching_cfg, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "protection_switching_cfg");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, protection_switching_cfg);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, protection_switching_cfg);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.clock_transport_cfg.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_clock_transport_configuration val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.clock_transport_cfg.epon_clock_transport_mode");
+        if (cli_parm != NULL)
+        {
+            val.epon_clock_transport_mode = (bcmolt_epon_clock_transport_mode) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.clock_transport_cfg.epon_clock_transport_mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_ni, clock_transport_cfg, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_epon_clock_transport_configuration val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_NI_CFG_ID_CLOCK_TRANSPORT_CFG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_ni, clock_transport_cfg, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "clock_transport_cfg");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, clock_transport_cfg);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, clock_transport_cfg);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.dropdown_weights.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_arr_u16_7 val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.dropdown_weights.arr");
+        if (cli_parm != NULL)
+        {
+            int32_t i2;
+            if (cli_parm->array_size != 7)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "array filter.dropdown_weights.arr must have 7 elements\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i2 = 0; i2 < 7; i2++)
+            {
+                val.arr[i2] = cli_parm->values[i2].unumber;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.dropdown_weights.arr is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_ni, dropdown_weights, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_arr_u16_7 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_NI_CFG_ID_DROPDOWN_WEIGHTS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_ni, dropdown_weights, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "dropdown_weights");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, dropdown_weights);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, dropdown_weights);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.approximate_solicited_usage.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_arr_bounds_8 val = { };
+        cli_parm = bcmcli_find_parm_by_prefix(session, "filter.approximate_solicited_usage.arr.");
+        if (cli_parm != NULL)
+        {
+            int32_t i3;
+            if (cli_parm->array_size != 8)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "array filter.approximate_solicited_usage.arr must have 8 elements\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.approximate_solicited_usage.arr.best_case");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 8)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.approximate_solicited_usage.arr.best_case is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i3 = 0; i3 < 8; i3++)
+                {
+                    val.arr[i3].best_case = cli_parm->values[i3].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.approximate_solicited_usage.arr.worst_case");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 8)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.approximate_solicited_usage.arr.worst_case is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i3 = 0; i3 < 8; i3++)
+                {
+                    val.arr[i3].worst_case = cli_parm->values[i3].unumber;
+                }
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.approximate_solicited_usage.arr is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_ni, approximate_solicited_usage, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_arr_bounds_8 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_NI_CFG_ID_APPROXIMATE_SOLICITED_USAGE, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_ni, approximate_solicited_usage, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "approximate_solicited_usage");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, approximate_solicited_usage);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, approximate_solicited_usage);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.approximate_tdm_usage");
+    if (cli_parm != NULL)
+    {
+        uint32_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_ni, approximate_tdm_usage, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_ni, approximate_tdm_usage, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_NI_CFG_ID_APPROXIMATE_TDM_USAGE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "approximate_tdm_usage");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, approximate_tdm_usage);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, approximate_tdm_usage);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.no_reports_soak_time");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_ni, no_reports_soak_time, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_ni, no_reports_soak_time, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_NI_CFG_ID_NO_REPORTS_SOAK_TIME, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "no_reports_soak_time");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, no_reports_soak_time);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, no_reports_soak_time);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.pon_aggregate_shaper.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_pon_aggregate_shaper val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.pon_aggregate_shaper.bandwidth_kbps");
+        if (cli_parm != NULL)
+        {
+            val.bandwidth_kbps = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.pon_aggregate_shaper.bandwidth_kbps is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.pon_aggregate_shaper.mbs_kB");
+        if (cli_parm != NULL)
+        {
+            val.mbs_kB = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.pon_aggregate_shaper.mbs_kB is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_ni, pon_aggregate_shaper, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_pon_aggregate_shaper val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_NI_CFG_ID_PON_AGGREGATE_SHAPER, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_ni, pon_aggregate_shaper, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "pon_aggregate_shaper");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, pon_aggregate_shaper);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, pon_aggregate_shaper);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.estimated_pon_latency_tq.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_arr_bounds_8 val = { };
+        cli_parm = bcmcli_find_parm_by_prefix(session, "filter.estimated_pon_latency_tq.arr.");
+        if (cli_parm != NULL)
+        {
+            int32_t i4;
+            if (cli_parm->array_size != 8)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "array filter.estimated_pon_latency_tq.arr must have 8 elements\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.estimated_pon_latency_tq.arr.best_case");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 8)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.estimated_pon_latency_tq.arr.best_case is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i4 = 0; i4 < 8; i4++)
+                {
+                    val.arr[i4].best_case = cli_parm->values[i4].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.estimated_pon_latency_tq.arr.worst_case");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 8)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.estimated_pon_latency_tq.arr.worst_case is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i4 = 0; i4 < 8; i4++)
+                {
+                    val.arr[i4].worst_case = cli_parm->values[i4].unumber;
+                }
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.estimated_pon_latency_tq.arr is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_ni, estimated_pon_latency_tq, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_arr_bounds_8 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_NI_CFG_ID_ESTIMATED_PON_LATENCY_TQ, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_ni, estimated_pon_latency_tq, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "estimated_pon_latency_tq");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, estimated_pon_latency_tq);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, estimated_pon_latency_tq);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.onu_upgrade_params.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_onu_upgrade_params val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.onu_upgrade_params.oam_extension_type");
+        if (cli_parm != NULL)
+        {
+            val.oam_extension_type = (bcmolt_epon_oam_extension_type) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.onu_upgrade_params.oam_extension_type is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        switch (val.oam_extension_type)
+        {
+            case BCMOLT_EPON_OAM_EXTENSION_TYPE_RESERVED:
+                break;
+            case BCMOLT_EPON_OAM_EXTENSION_TYPE_BROADCOM:
+                cli_parm = bcmcli_find_named_parm(session, "filter.onu_upgrade_params.response_timeout_ms");
+                if (cli_parm != NULL)
+                {
+                    val.u.broadcom.response_timeout_ms = cli_parm->value.unumber;
+                }
+                else
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.onu_upgrade_params.response_timeout_ms is not set\n");
+                    return BCM_ERR_PARM;
+                }
+                break;
+            case BCMOLT_EPON_OAM_EXTENSION_TYPE_CTC:
+                cli_parm = bcmcli_find_named_parm(session, "filter.onu_upgrade_params.response_timeout_ms");
+                if (cli_parm != NULL)
+                {
+                    val.u.ctc.response_timeout_ms = cli_parm->value.unumber;
+                }
+                else
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.onu_upgrade_params.response_timeout_ms is not set\n");
+                    return BCM_ERR_PARM;
+                }
+                break;
+            case BCMOLT_EPON_OAM_EXTENSION_TYPE_DASAN:
+                cli_parm = bcmcli_find_named_parm(session, "filter.onu_upgrade_params.response_timeout_ms");
+                if (cli_parm != NULL)
+                {
+                    val.u.dasan.response_timeout_ms = cli_parm->value.unumber;
+                }
+                else
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.onu_upgrade_params.response_timeout_ms is not set\n");
+                    return BCM_ERR_PARM;
+                }
+                break;
+            case BCMOLT_EPON_OAM_EXTENSION_TYPE_KT:
+                cli_parm = bcmcli_find_named_parm(session, "filter.onu_upgrade_params.response_timeout_ms");
+                if (cli_parm != NULL)
+                {
+                    val.u.kt.response_timeout_ms = cli_parm->value.unumber;
+                }
+                else
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.onu_upgrade_params.response_timeout_ms is not set\n");
+                    return BCM_ERR_PARM;
+                }
+                break;
+            case BCMOLT_EPON_OAM_EXTENSION_TYPE_DPOE:
+                cli_parm = bcmcli_find_named_parm(session, "filter.onu_upgrade_params.response_timeout_ms");
+                if (cli_parm != NULL)
+                {
+                    val.u.dpoe.response_timeout_ms = cli_parm->value.unumber;
+                }
+                else
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.onu_upgrade_params.response_timeout_ms is not set\n");
+                    return BCM_ERR_PARM;
+                }
+
+                cli_parm = bcmcli_find_named_parm(session, "filter.onu_upgrade_params.block_size");
+                if (cli_parm != NULL)
+                {
+                    val.u.dpoe.block_size = cli_parm->value.unumber;
+                }
+                else
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.onu_upgrade_params.block_size is not set\n");
+                    return BCM_ERR_PARM;
+                }
+
+                cli_parm = bcmcli_find_named_parm(session, "filter.onu_upgrade_params.final_ack_response_timeout");
+                if (cli_parm != NULL)
+                {
+                    val.u.dpoe.final_ack_response_timeout = cli_parm->value.unumber;
+                }
+                else
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.onu_upgrade_params.final_ack_response_timeout is not set\n");
+                    return BCM_ERR_PARM;
+                }
+                break;
+            default:
+                apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+                return BCM_ERR_RANGE;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_ni, onu_upgrade_params, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_epon_onu_upgrade_params val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_NI_CFG_ID_ONU_UPGRADE_PARAMS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_ni, onu_upgrade_params, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_upgrade_params");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, onu_upgrade_params);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, onu_upgrade_params);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.auto_rogue_detect_10g_en");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_ni, auto_rogue_detect_10g_en, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_ni, auto_rogue_detect_10g_en, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_NI_CFG_ID_AUTO_ROGUE_DETECT_10G_EN, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "auto_rogue_detect_10g_en");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, auto_rogue_detect_10g_en);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, auto_rogue_detect_10g_en);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.auto_rogue_detect_1g_en");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_ni, auto_rogue_detect_1g_en, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_ni, auto_rogue_detect_1g_en, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_NI_CFG_ID_AUTO_ROGUE_DETECT_1G_EN, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "auto_rogue_detect_1g_en");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, auto_rogue_detect_1g_en);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, auto_rogue_detect_1g_en);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.auto_rogue_detect_10g_threshold");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_ni, auto_rogue_detect_10g_threshold, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_ni, auto_rogue_detect_10g_threshold, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_NI_CFG_ID_AUTO_ROGUE_DETECT_10G_THRESHOLD, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "auto_rogue_detect_10g_threshold");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, auto_rogue_detect_10g_threshold);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, auto_rogue_detect_10g_threshold);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_ni, mac_address) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_ni, epon_ni_en) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_ni, registration_behavior) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_ni, mtu_1g) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_ni, mtu_10g) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_ni, minimum_fiber_length) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_ni, maximum_fiber_length) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_ni, grant_spacing_tq) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_ni, epon_logical_link_options) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_ni, mpcp_discovery_period_ms) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_ni, alarm_state) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_ni, all_links) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_ni, encryption_cfg) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_ni, protection_switching_cfg) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_ni, clock_transport_cfg) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_ni, dropdown_weights) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_ni, approximate_solicited_usage) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_ni, approximate_tdm_usage) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_ni, no_reports_soak_time) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_ni, pon_aggregate_shaper) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_ni, estimated_pon_latency_tq) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_ni, onu_upgrade_params) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_ni, auto_rogue_detect_10g_en) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_ni, auto_rogue_detect_1g_en) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_ni, auto_rogue_detect_10g_threshold))
+    {
+        BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, all_properties);
+        bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_ni, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);
+    bcmcli_log("bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_ni_oper_set_epon_ni_en_state_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_ni_set_epon_ni_en_state oper;   /**< declare main API struct */
+    bcmolt_epon_ni_key key = { };               /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_ni_set_epon_ni_en_state oper;\n");
+    bcmcli_log("bcmolt_epon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_NI_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, epon_ni, set_epon_ni_en_state, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, epon_ni, set_epon_ni_en_state, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "new_state");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_ni_en_state val;
+        val = (bcmolt_epon_ni_en_state) cli_parm->value.enum_val;
+        BCMOLT_OPER_PROP_SET(&oper, epon_ni, set_epon_ni_en_state, new_state, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, epon_ni, set_epon_ni_en_state, new_state, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_OPER, BCMOLT_EPON_NI_OPER_ID_SET_EPON_NI_EN_STATE, BCMOLT_EPON_NI_SET_EPON_NI_EN_STATE_ID_NEW_STATE, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_ni_oper_issue_rssi_grant_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_ni_issue_rssi_grant oper;   /**< declare main API struct */
+    bcmolt_epon_ni_key key = { };           /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_ni_issue_rssi_grant oper;\n");
+    bcmcli_log("bcmolt_epon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_NI_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, epon_ni, issue_rssi_grant, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, epon_ni, issue_rssi_grant, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "granted_link");
+    if (cli_parm != NULL)
+    {
+        bcmos_mac_address val;
+        val = cli_parm->value.mac;
+        BCMOLT_OPER_PROP_SET(&oper, epon_ni, issue_rssi_grant, granted_link, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, epon_ni, issue_rssi_grant, granted_link, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_OPER, BCMOLT_EPON_NI_OPER_ID_ISSUE_RSSI_GRANT, BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_GRANTED_LINK, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "trigger_width");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_OPER_PROP_SET(&oper, epon_ni, issue_rssi_grant, trigger_width, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, epon_ni, issue_rssi_grant, trigger_width, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_OPER, BCMOLT_EPON_NI_OPER_ID_ISSUE_RSSI_GRANT, BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_TRIGGER_WIDTH, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "trigger_delay");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_OPER_PROP_SET(&oper, epon_ni, issue_rssi_grant, trigger_delay, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, epon_ni, issue_rssi_grant, trigger_delay, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_OPER, BCMOLT_EPON_NI_OPER_ID_ISSUE_RSSI_GRANT, BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_TRIGGER_DELAY, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "sample_period");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_OPER_PROP_SET(&oper, epon_ni, issue_rssi_grant, sample_period, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, epon_ni, issue_rssi_grant, sample_period, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_OPER, BCMOLT_EPON_NI_OPER_ID_ISSUE_RSSI_GRANT, BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_SAMPLE_PERIOD, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_ni_oper_add_link_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_ni_add_link oper;   /**< declare main API struct */
+    bcmolt_epon_ni_key key = { };   /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_ni_add_link oper;\n");
+    bcmcli_log("bcmolt_epon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_NI_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, epon_ni, add_link, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, epon_ni, add_link, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "mac_address");
+    if (cli_parm != NULL)
+    {
+        bcmos_mac_address val;
+        val = cli_parm->value.mac;
+        BCMOLT_OPER_PROP_SET(&oper, epon_ni, add_link, mac_address, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, epon_ni, add_link, mac_address, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_OPER, BCMOLT_EPON_NI_OPER_ID_ADD_LINK, BCMOLT_EPON_NI_ADD_LINK_ID_MAC_ADDRESS, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rate");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_link_rate val;
+        val = (bcmolt_epon_link_rate) cli_parm->value.enum_val;
+        BCMOLT_OPER_PROP_SET(&oper, epon_ni, add_link, rate, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, epon_ni, add_link, rate, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_OPER, BCMOLT_EPON_NI_OPER_ID_ADD_LINK, BCMOLT_EPON_NI_ADD_LINK_ID_RATE, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_ni_oper_add_multicast_link_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_ni_add_multicast_link oper; /**< declare main API struct */
+    bcmolt_epon_ni_key key = { };           /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_ni_add_multicast_link oper;\n");
+    bcmcli_log("bcmolt_epon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_NI_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, epon_ni, add_multicast_link, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, epon_ni, add_multicast_link, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "mac_address");
+    if (cli_parm != NULL)
+    {
+        bcmos_mac_address val;
+        val = cli_parm->value.mac;
+        BCMOLT_OPER_PROP_SET(&oper, epon_ni, add_multicast_link, mac_address, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, epon_ni, add_multicast_link, mac_address, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_OPER, BCMOLT_EPON_NI_OPER_ID_ADD_MULTICAST_LINK, BCMOLT_EPON_NI_ADD_MULTICAST_LINK_ID_MAC_ADDRESS, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rate");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_link_rate val;
+        val = (bcmolt_epon_link_rate) cli_parm->value.enum_val;
+        BCMOLT_OPER_PROP_SET(&oper, epon_ni, add_multicast_link, rate, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, epon_ni, add_multicast_link, rate, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_OPER, BCMOLT_EPON_NI_OPER_ID_ADD_MULTICAST_LINK, BCMOLT_EPON_NI_ADD_MULTICAST_LINK_ID_RATE, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_ni_oper_add_protected_standby_link_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_ni_add_protected_standby_link oper; /**< declare main API struct */
+    bcmolt_epon_ni_key key = { };                   /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_ni_add_protected_standby_link oper;\n");
+    bcmcli_log("bcmolt_epon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_NI_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, epon_ni, add_protected_standby_link, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, epon_ni, add_protected_standby_link, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "mac_address");
+    if (cli_parm != NULL)
+    {
+        bcmos_mac_address val;
+        val = cli_parm->value.mac;
+        BCMOLT_OPER_PROP_SET(&oper, epon_ni, add_protected_standby_link, mac_address, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, epon_ni, add_protected_standby_link, mac_address, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_OPER, BCMOLT_EPON_NI_OPER_ID_ADD_PROTECTED_STANDBY_LINK, BCMOLT_EPON_NI_ADD_PROTECTED_STANDBY_LINK_ID_MAC_ADDRESS, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "working_link_info.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_link_info val = { };
+        cli_parm = bcmcli_find_named_parm(session, "working_link_info.link_status");
+        if (cli_parm != NULL)
+        {
+            val.link_status = (bcmolt_epon_link_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "working_link_info.link_status is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "working_link_info.rate");
+        if (cli_parm != NULL)
+        {
+            val.rate = (bcmolt_epon_link_rate) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "working_link_info.rate is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "working_link_info.llid");
+        if (cli_parm != NULL)
+        {
+            val.llid = (bcmolt_epon_llid) cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "working_link_info.llid is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "working_link_info.mpcp_discovery_info");
+        if (cli_parm != NULL)
+        {
+            val.mpcp_discovery_info = (bcmolt_mpcp_discovery_info) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "working_link_info.mpcp_discovery_info is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "working_link_info.onu_laser_on_time_tq");
+        if (cli_parm != NULL)
+        {
+            val.onu_laser_on_time_tq = (bcmolt_time_quanta) cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "working_link_info.onu_laser_on_time_tq is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "working_link_info.onu_laser_off_time_tq");
+        if (cli_parm != NULL)
+        {
+            val.onu_laser_off_time_tq = (bcmolt_time_quanta) cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "working_link_info.onu_laser_off_time_tq is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "working_link_info.pending_grants");
+        if (cli_parm != NULL)
+        {
+            val.pending_grants = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "working_link_info.pending_grants is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "working_link_info.range_value_tq");
+        if (cli_parm != NULL)
+        {
+            val.range_value_tq = (bcmolt_time_quanta) cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "working_link_info.range_value_tq is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "working_link_info.tunnel_id");
+        if (cli_parm != NULL)
+        {
+            val.tunnel_id = (bcmolt_epon_tunnel_id) cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "working_link_info.tunnel_id is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_OPER_PROP_SET(&oper, epon_ni, add_protected_standby_link, working_link_info, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_epon_link_info val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_OPER, BCMOLT_EPON_NI_OPER_ID_ADD_PROTECTED_STANDBY_LINK, BCMOLT_EPON_NI_ADD_PROTECTED_STANDBY_LINK_ID_WORKING_LINK_INFO, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, epon_ni, add_protected_standby_link, working_link_info, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_ni_oper_protection_switching_apply_rerange_delta_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_ni_protection_switching_apply_rerange_delta oper;   /**< declare main API struct */
+    bcmolt_epon_ni_key key = { };   /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_ni_protection_switching_apply_rerange_delta oper;\n");
+    bcmcli_log("bcmolt_epon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_NI_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, epon_ni, protection_switching_apply_rerange_delta, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, epon_ni, protection_switching_apply_rerange_delta, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "rerange_delta");
+    if (cli_parm != NULL)
+    {
+        uint32_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_OPER_PROP_SET(&oper, epon_ni, protection_switching_apply_rerange_delta, rerange_delta, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, epon_ni, protection_switching_apply_rerange_delta, rerange_delta, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_OPER, BCMOLT_EPON_NI_OPER_ID_PROTECTION_SWITCHING_APPLY_RERANGE_DELTA, BCMOLT_EPON_NI_PROTECTION_SWITCHING_APPLY_RERANGE_DELTA_ID_RERANGE_DELTA, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_ni_oper_rogue_llid_scan_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_ni_rogue_llid_scan oper;    /**< declare main API struct */
+    bcmolt_epon_ni_key key = { };           /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_ni_rogue_llid_scan oper;\n");
+    bcmcli_log("bcmolt_epon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_NI_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, epon_ni, rogue_llid_scan, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, epon_ni, rogue_llid_scan, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "mode");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_OPER_PROP_SET(&oper, epon_ni, rogue_llid_scan, mode, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, epon_ni, rogue_llid_scan, mode, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_OPER, BCMOLT_EPON_NI_OPER_ID_ROGUE_LLID_SCAN, BCMOLT_EPON_NI_ROGUE_LLID_SCAN_ID_MODE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "llid");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_llid val;
+        val = (bcmolt_epon_llid) cli_parm->value.unumber;
+        BCMOLT_OPER_PROP_SET(&oper, epon_ni, rogue_llid_scan, llid, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, epon_ni, rogue_llid_scan, llid, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_OPER, BCMOLT_EPON_NI_OPER_ID_ROGUE_LLID_SCAN, BCMOLT_EPON_NI_ROGUE_LLID_SCAN_ID_LLID, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_ni_oper_start_onu_upgrade_submit(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_ni_start_onu_upgrade oper;  /**< declare main API struct */
+    bcmolt_epon_ni_key key = { };           /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_ni_start_onu_upgrade oper;\n");
+    bcmcli_log("bcmolt_epon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_NI_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, epon_ni, start_onu_upgrade, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, epon_ni, start_onu_upgrade, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "list_of_onu_ids");
+    if (cli_parm != NULL)
+    {
+        bcmolt_macaddress_list_u32 val = { };
+        int32_t i0;
+        val.val = apicli_byte_pool_calloc(byte_pool, cli_parm->array_size * sizeof(*val.val));
+        if (val.val == NULL)
+        {
+            apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+            return BCM_ERR_NOMEM;
+        }
+
+        val.len = cli_parm->array_size;
+        for (i0 = 0; i0 < val.len; i0++)
+        {
+            val.val[i0] = cli_parm->values[i0].mac;
+        }
+
+        BCMOLT_OPER_PROP_SET(&oper, epon_ni, start_onu_upgrade, list_of_onu_ids, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_macaddress_list_u32 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_OPER, BCMOLT_EPON_NI_OPER_ID_START_ONU_UPGRADE, BCMOLT_EPON_NI_START_ONU_UPGRADE_ID_LIST_OF_ONU_IDS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, epon_ni, start_onu_upgrade, list_of_onu_ids, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_ni_auto_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_ni_auto_cfg auto_cfg;   /**< declare main API struct */
+    bcmolt_epon_ni_key key = { };       /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_ni_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_epon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_get");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, epon_ni, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, epon_ni, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "auto_rogue_scan_10g_failure");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_ni, auto_rogue_scan_10g_failure);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_ni, auto_rogue_scan_10g_failure);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "auto_rogue_scan_1g_failure");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_ni, auto_rogue_scan_1g_failure);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_ni, auto_rogue_scan_1g_failure);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "llid_quarantined");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_ni, llid_quarantined);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_ni, llid_quarantined);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mpcp_timestamp_changed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_ni, mpcp_timestamp_changed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_ni, mpcp_timestamp_changed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "no_reports");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_ni, no_reports);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_ni, no_reports);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_upgrade_complete");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_ni, onu_upgrade_complete);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_ni, onu_upgrade_complete);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rerange_failure");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_ni, rerange_failure);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_ni, rerange_failure);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rogue_scan_complete");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_ni, rogue_scan_complete);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_ni, rogue_scan_complete);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rssi_measurement_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_ni, rssi_measurement_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_ni, rssi_measurement_completed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "state_change_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_ni, state_change_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_ni, state_change_completed);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_ni, auto_rogue_scan_10g_failure) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_ni, auto_rogue_scan_1g_failure) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_ni, llid_quarantined) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_ni, mpcp_timestamp_changed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_ni, no_reports) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_ni, onu_upgrade_complete) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_ni, rerange_failure) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_ni, rogue_scan_complete) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_ni, rssi_measurement_completed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_ni, state_change_completed))
+    {
+        BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_ni, all_properties);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_ni, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &auto_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_ni_auto_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_ni_auto_cfg auto_cfg;   /**< declare main API struct */
+    bcmolt_epon_ni_key key = { };       /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_ni_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_epon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_set");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, epon_ni, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, epon_ni, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "auto_rogue_scan_10g_failure");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_ni, auto_rogue_scan_10g_failure, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_ni, auto_rogue_scan_10g_failure, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_NI_AUTO_CFG_ID_AUTO_ROGUE_SCAN_10G_FAILURE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "auto_rogue_scan_1g_failure");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_ni, auto_rogue_scan_1g_failure, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_ni, auto_rogue_scan_1g_failure, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_NI_AUTO_CFG_ID_AUTO_ROGUE_SCAN_1G_FAILURE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "llid_quarantined");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_ni, llid_quarantined, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_ni, llid_quarantined, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_NI_AUTO_CFG_ID_LLID_QUARANTINED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mpcp_timestamp_changed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_ni, mpcp_timestamp_changed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_ni, mpcp_timestamp_changed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_NI_AUTO_CFG_ID_MPCP_TIMESTAMP_CHANGED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "no_reports");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_ni, no_reports, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_ni, no_reports, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_NI_AUTO_CFG_ID_NO_REPORTS, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_upgrade_complete");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_ni, onu_upgrade_complete, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_ni, onu_upgrade_complete, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_NI_AUTO_CFG_ID_ONU_UPGRADE_COMPLETE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rerange_failure");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_ni, rerange_failure, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_ni, rerange_failure, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_NI_AUTO_CFG_ID_RERANGE_FAILURE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rogue_scan_complete");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_ni, rogue_scan_complete, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_ni, rogue_scan_complete, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_NI_AUTO_CFG_ID_ROGUE_SCAN_COMPLETE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rssi_measurement_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_ni, rssi_measurement_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_ni, rssi_measurement_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_NI_AUTO_CFG_ID_RSSI_MEASUREMENT_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "state_change_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_ni, state_change_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_ni, state_change_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_NI_AUTO_CFG_ID_STATE_CHANGE_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);\n");
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_onu_10g_us_stat_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_onu_10g_us_stat stat;       /**< declare main API struct */
+    bcmolt_epon_onu_10g_us_key key = { };   /**< declare key */
+    bcmos_bool clear_on_read;               /**< declare 'clear on read' flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_onu_10g_us_stat stat;\n");
+    bcmcli_log("bcmolt_epon_onu_10g_us_key key = {  };\n");
+    bcmcli_log("bcmos_bool clear_on_read;\n");
+    apicli_print_start(session, "bcmolt_stat_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_ONU_10G_US, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_ONU_10G_US_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        key.onu_id = (bcmolt_epon_onu_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "onu_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.onu_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_ONU_10G_US, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_ONU_10G_US_KEY_ID_ONU_ID, &key.onu_id);
+    bcmcli_log(";\n");
+
+    /* set stat flags from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "clear");
+    if (cli_parm != NULL)
+    {
+        clear_on_read = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "clear is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("clear_on_read = %s;\n", (clear_on_read) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* init the API struct */
+    BCMOLT_STAT_INIT(&stat, epon_onu_10g_us, key);
+    bcmcli_log("BCMOLT_STAT_INIT(&stat, epon_onu_10g_us, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "fec_code_words_total");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_onu_10g_us, fec_code_words_total);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_onu_10g_us, fec_code_words_total);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "fec_code_words_decode_fails");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_onu_10g_us, fec_code_words_decode_fails);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_onu_10g_us, fec_code_words_decode_fails);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "fec_zeroes_corrected");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_onu_10g_us, fec_zeroes_corrected);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_onu_10g_us, fec_zeroes_corrected);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "fec_ones_corrected");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_onu_10g_us, fec_ones_corrected);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_onu_10g_us, fec_ones_corrected);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_STAT_PROP_IS_SET(&stat, epon_onu_10g_us, fec_code_words_total) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_onu_10g_us, fec_code_words_decode_fails) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_onu_10g_us, fec_zeroes_corrected) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_onu_10g_us, fec_ones_corrected))
+    {
+        BCMOLT_STAT_PROP_GET(&stat, epon_onu_10g_us, all_properties);
+        bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_onu_10g_us, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_stat_get(device_id, &stat.hdr, clear_on_read);
+    bcmcli_log("bcmolt_stat_get(device_id, &stat.hdr, clear_on_read);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &stat.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, stat.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_onu_10g_us_cfg_get(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_onu_10g_us_cfg cfg;         /**< declare main API struct */
+    bcmolt_epon_onu_10g_us_key key = { };   /**< declare key */
+    uint8_t *list_mem;                      /**< declare memory buffer for variable-sized lists */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_onu_10g_us_cfg cfg;\n");
+    bcmcli_log("bcmolt_epon_onu_10g_us_key key = {  };\n");
+    bcmcli_log("uint8_t* list_mem;\n");
+    apicli_print_start(session, "bcmolt_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_ONU_10G_US, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_ONU_10G_US_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        key.onu_id = (bcmolt_epon_onu_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "onu_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.onu_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_ONU_10G_US, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_ONU_10G_US_KEY_ID_ONU_ID, &key.onu_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, epon_onu_10g_us, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, epon_onu_10g_us, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "all_links");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_onu_10g_us, all_links);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_onu_10g_us, all_links);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_CFG_PROP_IS_SET(&cfg, epon_onu_10g_us, all_links))
+    {
+        BCMOLT_CFG_PROP_GET(&cfg, epon_onu_10g_us, all_properties);
+        bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_onu_10g_us, all_properties);\n");
+    }
+
+    /* set memory to use for variable-sized lists */
+    list_mem = apicli_byte_pool_calloc(byte_pool, APICLI_DYNAMIC_LIST_BUFFER_SIZE);
+    if (list_mem == NULL)
+    {
+        apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+        return BCM_ERR_NOMEM;
+    }
+
+    bcmcli_log("list_mem = bcmos_calloc(APICLI_DYNAMIC_LIST_BUFFER_SIZE);\n");
+    BCMOLT_CFG_LIST_BUF_SET(&cfg, epon_onu_10g_us, list_mem, APICLI_DYNAMIC_LIST_BUFFER_SIZE);
+    bcmcli_log("BCMOLT_CFG_LIST_BUF_SET(&cfg, epon_onu_10g_us, list_mem, APICLI_DYNAMIC_LIST_BUFFER_SIZE);\n");
+
+    /* call API */
+    err = bcmolt_cfg_get(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_get(device_id, &cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_onu_10g_us_cfg_set(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_onu_10g_us_cfg cfg;         /**< declare main API struct */
+    bcmolt_epon_onu_10g_us_key key = { };   /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_onu_10g_us_cfg cfg;\n");
+    bcmcli_log("bcmolt_epon_onu_10g_us_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_ONU_10G_US, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_ONU_10G_US_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        key.onu_id = (bcmolt_epon_onu_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "onu_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.onu_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_ONU_10G_US, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_ONU_10G_US_KEY_ID_ONU_ID, &key.onu_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, epon_onu_10g_us, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, epon_onu_10g_us, key);\n");
+
+    /* decode API parameters from CLI */
+
+    /* call API */
+    err = bcmolt_cfg_set(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_set(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_onu_10g_us_cfg_clear(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_onu_10g_us_cfg cfg;         /**< declare main API struct */
+    bcmolt_epon_onu_10g_us_key key = { };   /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_onu_10g_us_cfg cfg;\n");
+    bcmcli_log("bcmolt_epon_onu_10g_us_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_clear");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_ONU_10G_US, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_ONU_10G_US_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        key.onu_id = (bcmolt_epon_onu_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "onu_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.onu_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_ONU_10G_US, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_ONU_10G_US_KEY_ID_ONU_ID, &key.onu_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, epon_onu_10g_us, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, epon_onu_10g_us, key);\n");
+
+    /* call API */
+    err = bcmolt_cfg_clear(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_clear(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_onu_10g_us_cfg_get_multi(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_onu_10g_us_cfg cfg;         /**< declare main API struct */
+    bcmolt_epon_onu_10g_us_key key = { };   /**< declare key */
+    bcmolt_msg_set *msg_set = NULL;         /**< declare message set */
+    uint32_t max_msgs;                      /**< declare max number of msgs to get */
+    bcmos_bool invert_filter;               /**< declare filter invert flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_onu_10g_us_cfg cfg;\n");
+    bcmcli_log("bcmolt_epon_onu_10g_us_key key = {  };\n");
+    bcmcli_log("bcmolt_msg_set* msg_set = NULL;\n");
+    bcmcli_log("uint32_t max_msgs;\n");
+    bcmcli_log("bcmos_bool invert_filter;\n");
+    apicli_print_start(session, "bcmolt_cfg_get_multi");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_ONU_10G_US, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_ONU_10G_US_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        key.onu_id = (bcmolt_epon_onu_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "onu_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.onu_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_ONU_10G_US, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_ONU_10G_US_KEY_ID_ONU_ID, &key.onu_id);
+    bcmcli_log(";\n");
+
+    /* set max number of msgs from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "max_msgs");
+    if (cli_parm != NULL)
+    {
+        max_msgs = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "max_msgs is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("max_msgs = %d;\n", max_msgs);
+
+    /* set filter invert flag from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "filter_invert");
+    if (cli_parm != NULL)
+    {
+        invert_filter = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "filter_invert is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("invert_filter = %s;\n", (invert_filter) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* allocate message set */
+    err = apicli_msg_set_alloc(byte_pool, BCMOLT_OBJ_ID_EPON_ONU_10G_US, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    bcmcli_log("bcmolt_msg_set_alloc(BCMOLT_OBJ_ID_EPON_ONU_10G_US, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, epon_onu_10g_us, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, epon_onu_10g_us, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "filter.all_links");
+    if (cli_parm != NULL)
+    {
+        bcmolt_macaddress_list_u32_max_2048 val = { };
+        int32_t i0;
+        val.val = apicli_byte_pool_calloc(byte_pool, cli_parm->array_size * sizeof(*val.val));
+        if (val.val == NULL)
+        {
+            apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+            return BCM_ERR_NOMEM;
+        }
+
+        val.len = cli_parm->array_size;
+        for (i0 = 0; i0 < val.len; i0++)
+        {
+            val.val[i0] = cli_parm->values[i0].mac;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_onu_10g_us, all_links, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_macaddress_list_u32_max_2048 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_ONU_10G_US, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_ONU_10G_US_CFG_ID_ALL_LINKS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_onu_10g_us, all_links, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "all_links");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_onu_10g_us, all_links);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_onu_10g_us, all_links);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_onu_10g_us, all_links))
+    {
+        BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_onu_10g_us, all_properties);
+        bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_onu_10g_us, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);
+    bcmcli_log("bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_onu_10g_us_stat_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_onu_10g_us_stat_cfg stat_cfg;   /**< declare main API struct */
+    bcmolt_epon_onu_10g_us_key key = { };       /**< declare key */
+    bcmolt_epon_onu_10g_us_stat_id stat_id;     /**< declare stat ID */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_onu_10g_us_stat_cfg stat_cfg;\n");
+    bcmcli_log("bcmolt_epon_onu_10g_us_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_stat_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_ONU_10G_US, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_ONU_10G_US_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        key.onu_id = (bcmolt_epon_onu_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "onu_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.onu_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_ONU_10G_US, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_ONU_10G_US_KEY_ID_ONU_ID, &key.onu_id);
+    bcmcli_log(";\n");
+
+    /* set stat ID from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "sub");
+    if (cli_parm != NULL)
+    {
+        stat_id = (bcmolt_epon_onu_10g_us_stat_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    /* init the API struct */
+    switch (stat_id)
+    {
+        case BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_CODE_WORDS_TOTAL:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_10g_us, fec_code_words_total, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_10g_us, fec_code_words_total, key);\n");
+            break;
+        case BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_CODE_WORDS_DECODE_FAILS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_10g_us, fec_code_words_decode_fails, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_10g_us, fec_code_words_decode_fails, key);\n");
+            break;
+        case BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_ZEROES_CORRECTED:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_10g_us, fec_zeroes_corrected, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_10g_us, fec_zeroes_corrected, key);\n");
+            break;
+        case BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_ONES_CORRECTED:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_10g_us, fec_ones_corrected, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_10g_us, fec_ones_corrected, key);\n");
+            break;
+        default:
+            apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+            return BCM_ERR_RANGE;
+    }
+
+    /* call API */
+    err = bcmolt_stat_cfg_get(device_id, &stat_cfg.hdr);
+    bcmcli_log("bcmolt_stat_cfg_get(device_id, &stat_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &stat_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, stat_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_onu_10g_us_stat_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_onu_10g_us_stat_cfg stat_cfg;   /**< declare main API struct */
+    bcmolt_epon_onu_10g_us_key key = { };       /**< declare key */
+    bcmolt_epon_onu_10g_us_stat_id stat_id;     /**< declare stat ID */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_onu_10g_us_stat_cfg stat_cfg;\n");
+    bcmcli_log("bcmolt_epon_onu_10g_us_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_stat_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_ONU_10G_US, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_ONU_10G_US_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        key.onu_id = (bcmolt_epon_onu_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "onu_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.onu_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_ONU_10G_US, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_ONU_10G_US_KEY_ID_ONU_ID, &key.onu_id);
+    bcmcli_log(";\n");
+
+    /* set stat ID from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "sub");
+    if (cli_parm != NULL)
+    {
+        stat_id = (bcmolt_epon_onu_10g_us_stat_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    /* init the API struct */
+    switch (stat_id)
+    {
+        case BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_CODE_WORDS_TOTAL:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_10g_us, fec_code_words_total, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_10g_us, fec_code_words_total, key);\n");
+            break;
+        case BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_CODE_WORDS_DECODE_FAILS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_10g_us, fec_code_words_decode_fails, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_10g_us, fec_code_words_decode_fails, key);\n");
+            break;
+        case BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_ZEROES_CORRECTED:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_10g_us, fec_zeroes_corrected, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_10g_us, fec_zeroes_corrected, key);\n");
+            break;
+        case BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_ONES_CORRECTED:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_10g_us, fec_ones_corrected, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_10g_us, fec_ones_corrected, key);\n");
+            break;
+        default:
+            apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+            return BCM_ERR_RANGE;
+    }
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_stat_alarm_config val = { };
+        cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.trigger.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.type");
+            if (cli_parm != NULL)
+            {
+                val.trigger.type = (bcmolt_stat_condition_type) cli_parm->value.enum_val;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.type is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            switch (val.trigger.type)
+            {
+                case BCMOLT_STAT_CONDITION_TYPE_RATE_THRESHOLD:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.rising");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_threshold.rising = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.rising is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.falling");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_threshold.falling = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.falling is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_RATE_RANGE:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.upper");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_range.upper = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.upper is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.lower");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_range.lower = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.lower is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_VALUE_THRESHOLD:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.limit");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.value_threshold.limit = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.limit is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_NONE:
+                    break;
+                default:
+                    apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+                    return BCM_ERR_RANGE;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.soak.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "cfg.soak.active_soak_time");
+            if (cli_parm != NULL)
+            {
+                val.soak.active_soak_time = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak.active_soak_time is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "cfg.soak.clear_soak_time");
+            if (cli_parm != NULL)
+            {
+                val.soak.clear_soak_time = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak.clear_soak_time is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_STAT_CFG_PROP_SET(&stat_cfg, epon_onu_10g_us, cfg, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_stat_alarm_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_ONU_10G_US, BCMOLT_MGT_GROUP_STAT_CFG, 0, BCMOLT_EPON_ONU_10G_US_STAT_CFG_ID_CFG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_STAT_CFG_PROP_SET(&stat_cfg, epon_onu_10g_us, cfg, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_stat_cfg_set(device_id, &stat_cfg.hdr);
+    bcmcli_log("bcmolt_stat_cfg_set(device_id, &stat_cfg.hdr);\n");
+    apicli_print_complete(session, err, stat_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_onu_10g_us_auto_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_onu_10g_us_auto_cfg auto_cfg;   /**< declare main API struct */
+    bcmolt_epon_onu_10g_us_key key = { };       /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_onu_10g_us_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_epon_onu_10g_us_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_get");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, epon_onu_10g_us, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, epon_onu_10g_us, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_cleared");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_onu_10g_us, stat_alarm_cleared);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_onu_10g_us, stat_alarm_cleared);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_raised");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_onu_10g_us, stat_alarm_raised);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_onu_10g_us, stat_alarm_raised);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_onu_10g_us, stat_alarm_cleared) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_onu_10g_us, stat_alarm_raised))
+    {
+        BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_onu_10g_us, all_properties);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_onu_10g_us, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &auto_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_onu_10g_us_auto_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_onu_10g_us_auto_cfg auto_cfg;   /**< declare main API struct */
+    bcmolt_epon_onu_10g_us_key key = { };       /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_onu_10g_us_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_epon_onu_10g_us_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_set");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, epon_onu_10g_us, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, epon_onu_10g_us, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_cleared");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_onu_10g_us, stat_alarm_cleared, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_onu_10g_us, stat_alarm_cleared, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_ONU_10G_US, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_ONU_10G_US_AUTO_CFG_ID_STAT_ALARM_CLEARED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_raised");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_onu_10g_us, stat_alarm_raised, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_onu_10g_us, stat_alarm_raised, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_ONU_10G_US, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_ONU_10G_US_AUTO_CFG_ID_STAT_ALARM_RAISED, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);\n");
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_onu_1g_us_stat_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_onu_1g_us_stat stat;        /**< declare main API struct */
+    bcmolt_epon_onu_1g_us_key key = { };    /**< declare key */
+    bcmos_bool clear_on_read;               /**< declare 'clear on read' flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_onu_1g_us_stat stat;\n");
+    bcmcli_log("bcmolt_epon_onu_1g_us_key key = {  };\n");
+    bcmcli_log("bcmos_bool clear_on_read;\n");
+    apicli_print_start(session, "bcmolt_stat_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_ONU_1G_US, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_ONU_1G_US_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        key.onu_id = (bcmolt_epon_onu_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "onu_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.onu_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_ONU_1G_US, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_ONU_1G_US_KEY_ID_ONU_ID, &key.onu_id);
+    bcmcli_log(";\n");
+
+    /* set stat flags from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "clear");
+    if (cli_parm != NULL)
+    {
+        clear_on_read = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "clear is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("clear_on_read = %s;\n", (clear_on_read) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* init the API struct */
+    BCMOLT_STAT_INIT(&stat, epon_onu_1g_us, key);
+    bcmcli_log("BCMOLT_STAT_INIT(&stat, epon_onu_1g_us, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "good_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_onu_1g_us, good_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_onu_1g_us, good_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "good_bytes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_onu_1g_us, good_bytes);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_onu_1g_us, good_bytes);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "oversz_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_onu_1g_us, oversz_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_onu_1g_us, oversz_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "non_fec_good_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_onu_1g_us, non_fec_good_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_onu_1g_us, non_fec_good_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "non_fec_good_bytes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_onu_1g_us, non_fec_good_bytes);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_onu_1g_us, non_fec_good_bytes);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "fec_good_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_onu_1g_us, fec_good_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_onu_1g_us, fec_good_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "fec_good_bytes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_onu_1g_us, fec_good_bytes);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_onu_1g_us, fec_good_bytes);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "fec_frames_exc_errs");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_onu_1g_us, fec_frames_exc_errs);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_onu_1g_us, fec_frames_exc_errs);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "fec_blks_no_errs");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_onu_1g_us, fec_blks_no_errs);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_onu_1g_us, fec_blks_no_errs);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "fec_blks_corr_errs");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_onu_1g_us, fec_blks_corr_errs);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_onu_1g_us, fec_blks_corr_errs);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "fec_blks_uncorr_errs");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_onu_1g_us, fec_blks_uncorr_errs);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_onu_1g_us, fec_blks_uncorr_errs);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "fec_corr_bytes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_onu_1g_us, fec_corr_bytes);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_onu_1g_us, fec_corr_bytes);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "fec_corr_zeroes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_onu_1g_us, fec_corr_zeroes);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_onu_1g_us, fec_corr_zeroes);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "fec_corr_ones");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_onu_1g_us, fec_corr_ones);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_onu_1g_us, fec_corr_ones);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "undersz_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_onu_1g_us, undersz_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_onu_1g_us, undersz_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "errorsz_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_onu_1g_us, errorsz_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_onu_1g_us, errorsz_frames);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_STAT_PROP_IS_SET(&stat, epon_onu_1g_us, good_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_onu_1g_us, good_bytes) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_onu_1g_us, oversz_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_onu_1g_us, non_fec_good_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_onu_1g_us, non_fec_good_bytes) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_onu_1g_us, fec_good_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_onu_1g_us, fec_good_bytes) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_onu_1g_us, fec_frames_exc_errs) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_onu_1g_us, fec_blks_no_errs) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_onu_1g_us, fec_blks_corr_errs) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_onu_1g_us, fec_blks_uncorr_errs) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_onu_1g_us, fec_corr_bytes) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_onu_1g_us, fec_corr_zeroes) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_onu_1g_us, fec_corr_ones) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_onu_1g_us, undersz_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_onu_1g_us, errorsz_frames))
+    {
+        BCMOLT_STAT_PROP_GET(&stat, epon_onu_1g_us, all_properties);
+        bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_onu_1g_us, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_stat_get(device_id, &stat.hdr, clear_on_read);
+    bcmcli_log("bcmolt_stat_get(device_id, &stat.hdr, clear_on_read);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &stat.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, stat.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_onu_1g_us_cfg_get(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_onu_1g_us_cfg cfg;          /**< declare main API struct */
+    bcmolt_epon_onu_1g_us_key key = { };    /**< declare key */
+    uint8_t *list_mem;                      /**< declare memory buffer for variable-sized lists */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_onu_1g_us_cfg cfg;\n");
+    bcmcli_log("bcmolt_epon_onu_1g_us_key key = {  };\n");
+    bcmcli_log("uint8_t* list_mem;\n");
+    apicli_print_start(session, "bcmolt_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_ONU_1G_US, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_ONU_1G_US_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        key.onu_id = (bcmolt_epon_onu_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "onu_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.onu_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_ONU_1G_US, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_ONU_1G_US_KEY_ID_ONU_ID, &key.onu_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, epon_onu_1g_us, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, epon_onu_1g_us, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "all_links");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_onu_1g_us, all_links);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_onu_1g_us, all_links);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_CFG_PROP_IS_SET(&cfg, epon_onu_1g_us, all_links))
+    {
+        BCMOLT_CFG_PROP_GET(&cfg, epon_onu_1g_us, all_properties);
+        bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_onu_1g_us, all_properties);\n");
+    }
+
+    /* set memory to use for variable-sized lists */
+    list_mem = apicli_byte_pool_calloc(byte_pool, APICLI_DYNAMIC_LIST_BUFFER_SIZE);
+    if (list_mem == NULL)
+    {
+        apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+        return BCM_ERR_NOMEM;
+    }
+
+    bcmcli_log("list_mem = bcmos_calloc(APICLI_DYNAMIC_LIST_BUFFER_SIZE);\n");
+    BCMOLT_CFG_LIST_BUF_SET(&cfg, epon_onu_1g_us, list_mem, APICLI_DYNAMIC_LIST_BUFFER_SIZE);
+    bcmcli_log("BCMOLT_CFG_LIST_BUF_SET(&cfg, epon_onu_1g_us, list_mem, APICLI_DYNAMIC_LIST_BUFFER_SIZE);\n");
+
+    /* call API */
+    err = bcmolt_cfg_get(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_get(device_id, &cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_onu_1g_us_cfg_set(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_onu_1g_us_cfg cfg;          /**< declare main API struct */
+    bcmolt_epon_onu_1g_us_key key = { };    /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_onu_1g_us_cfg cfg;\n");
+    bcmcli_log("bcmolt_epon_onu_1g_us_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_ONU_1G_US, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_ONU_1G_US_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        key.onu_id = (bcmolt_epon_onu_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "onu_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.onu_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_ONU_1G_US, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_ONU_1G_US_KEY_ID_ONU_ID, &key.onu_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, epon_onu_1g_us, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, epon_onu_1g_us, key);\n");
+
+    /* decode API parameters from CLI */
+
+    /* call API */
+    err = bcmolt_cfg_set(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_set(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_onu_1g_us_cfg_clear(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_onu_1g_us_cfg cfg;          /**< declare main API struct */
+    bcmolt_epon_onu_1g_us_key key = { };    /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_onu_1g_us_cfg cfg;\n");
+    bcmcli_log("bcmolt_epon_onu_1g_us_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_clear");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_ONU_1G_US, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_ONU_1G_US_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        key.onu_id = (bcmolt_epon_onu_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "onu_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.onu_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_ONU_1G_US, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_ONU_1G_US_KEY_ID_ONU_ID, &key.onu_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, epon_onu_1g_us, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, epon_onu_1g_us, key);\n");
+
+    /* call API */
+    err = bcmolt_cfg_clear(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_clear(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_onu_1g_us_cfg_get_multi(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_onu_1g_us_cfg cfg;          /**< declare main API struct */
+    bcmolt_epon_onu_1g_us_key key = { };    /**< declare key */
+    bcmolt_msg_set *msg_set = NULL;         /**< declare message set */
+    uint32_t max_msgs;                      /**< declare max number of msgs to get */
+    bcmos_bool invert_filter;               /**< declare filter invert flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_onu_1g_us_cfg cfg;\n");
+    bcmcli_log("bcmolt_epon_onu_1g_us_key key = {  };\n");
+    bcmcli_log("bcmolt_msg_set* msg_set = NULL;\n");
+    bcmcli_log("uint32_t max_msgs;\n");
+    bcmcli_log("bcmos_bool invert_filter;\n");
+    apicli_print_start(session, "bcmolt_cfg_get_multi");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_ONU_1G_US, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_ONU_1G_US_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        key.onu_id = (bcmolt_epon_onu_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "onu_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.onu_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_ONU_1G_US, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_ONU_1G_US_KEY_ID_ONU_ID, &key.onu_id);
+    bcmcli_log(";\n");
+
+    /* set max number of msgs from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "max_msgs");
+    if (cli_parm != NULL)
+    {
+        max_msgs = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "max_msgs is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("max_msgs = %d;\n", max_msgs);
+
+    /* set filter invert flag from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "filter_invert");
+    if (cli_parm != NULL)
+    {
+        invert_filter = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "filter_invert is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("invert_filter = %s;\n", (invert_filter) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* allocate message set */
+    err = apicli_msg_set_alloc(byte_pool, BCMOLT_OBJ_ID_EPON_ONU_1G_US, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    bcmcli_log("bcmolt_msg_set_alloc(BCMOLT_OBJ_ID_EPON_ONU_1G_US, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, epon_onu_1g_us, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, epon_onu_1g_us, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "filter.all_links");
+    if (cli_parm != NULL)
+    {
+        bcmolt_macaddress_list_u32 val = { };
+        int32_t i0;
+        val.val = apicli_byte_pool_calloc(byte_pool, cli_parm->array_size * sizeof(*val.val));
+        if (val.val == NULL)
+        {
+            apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+            return BCM_ERR_NOMEM;
+        }
+
+        val.len = cli_parm->array_size;
+        for (i0 = 0; i0 < val.len; i0++)
+        {
+            val.val[i0] = cli_parm->values[i0].mac;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_onu_1g_us, all_links, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_macaddress_list_u32 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_ONU_1G_US, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_ONU_1G_US_CFG_ID_ALL_LINKS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_onu_1g_us, all_links, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "all_links");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_onu_1g_us, all_links);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_onu_1g_us, all_links);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_onu_1g_us, all_links))
+    {
+        BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_onu_1g_us, all_properties);
+        bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_onu_1g_us, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);
+    bcmcli_log("bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_onu_1g_us_stat_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_onu_1g_us_stat_cfg stat_cfg;    /**< declare main API struct */
+    bcmolt_epon_onu_1g_us_key key = { };        /**< declare key */
+    bcmolt_epon_onu_1g_us_stat_id stat_id;      /**< declare stat ID */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_onu_1g_us_stat_cfg stat_cfg;\n");
+    bcmcli_log("bcmolt_epon_onu_1g_us_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_stat_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_ONU_1G_US, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_ONU_1G_US_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        key.onu_id = (bcmolt_epon_onu_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "onu_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.onu_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_ONU_1G_US, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_ONU_1G_US_KEY_ID_ONU_ID, &key.onu_id);
+    bcmcli_log(";\n");
+
+    /* set stat ID from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "sub");
+    if (cli_parm != NULL)
+    {
+        stat_id = (bcmolt_epon_onu_1g_us_stat_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    /* init the API struct */
+    switch (stat_id)
+    {
+        case BCMOLT_EPON_ONU_1G_US_STAT_ID_GOOD_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, good_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, good_frames, key);\n");
+            break;
+        case BCMOLT_EPON_ONU_1G_US_STAT_ID_GOOD_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, good_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, good_bytes, key);\n");
+            break;
+        case BCMOLT_EPON_ONU_1G_US_STAT_ID_OVERSZ_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, oversz_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, oversz_frames, key);\n");
+            break;
+        case BCMOLT_EPON_ONU_1G_US_STAT_ID_NON_FEC_GOOD_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, non_fec_good_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, non_fec_good_frames, key);\n");
+            break;
+        case BCMOLT_EPON_ONU_1G_US_STAT_ID_NON_FEC_GOOD_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, non_fec_good_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, non_fec_good_bytes, key);\n");
+            break;
+        case BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_GOOD_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, fec_good_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, fec_good_frames, key);\n");
+            break;
+        case BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_GOOD_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, fec_good_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, fec_good_bytes, key);\n");
+            break;
+        case BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_FRAMES_EXC_ERRS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, fec_frames_exc_errs, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, fec_frames_exc_errs, key);\n");
+            break;
+        case BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_BLKS_NO_ERRS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, fec_blks_no_errs, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, fec_blks_no_errs, key);\n");
+            break;
+        case BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_BLKS_CORR_ERRS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, fec_blks_corr_errs, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, fec_blks_corr_errs, key);\n");
+            break;
+        case BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_BLKS_UNCORR_ERRS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, fec_blks_uncorr_errs, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, fec_blks_uncorr_errs, key);\n");
+            break;
+        case BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_CORR_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, fec_corr_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, fec_corr_bytes, key);\n");
+            break;
+        case BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_CORR_ZEROES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, fec_corr_zeroes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, fec_corr_zeroes, key);\n");
+            break;
+        case BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_CORR_ONES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, fec_corr_ones, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, fec_corr_ones, key);\n");
+            break;
+        case BCMOLT_EPON_ONU_1G_US_STAT_ID_UNDERSZ_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, undersz_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, undersz_frames, key);\n");
+            break;
+        case BCMOLT_EPON_ONU_1G_US_STAT_ID_ERRORSZ_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, errorsz_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, errorsz_frames, key);\n");
+            break;
+        default:
+            apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+            return BCM_ERR_RANGE;
+    }
+
+    /* call API */
+    err = bcmolt_stat_cfg_get(device_id, &stat_cfg.hdr);
+    bcmcli_log("bcmolt_stat_cfg_get(device_id, &stat_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &stat_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, stat_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_onu_1g_us_stat_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_onu_1g_us_stat_cfg stat_cfg;    /**< declare main API struct */
+    bcmolt_epon_onu_1g_us_key key = { };        /**< declare key */
+    bcmolt_epon_onu_1g_us_stat_id stat_id;      /**< declare stat ID */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_onu_1g_us_stat_cfg stat_cfg;\n");
+    bcmcli_log("bcmolt_epon_onu_1g_us_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_stat_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_ONU_1G_US, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_ONU_1G_US_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        key.onu_id = (bcmolt_epon_onu_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "onu_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.onu_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_ONU_1G_US, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_ONU_1G_US_KEY_ID_ONU_ID, &key.onu_id);
+    bcmcli_log(";\n");
+
+    /* set stat ID from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "sub");
+    if (cli_parm != NULL)
+    {
+        stat_id = (bcmolt_epon_onu_1g_us_stat_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    /* init the API struct */
+    switch (stat_id)
+    {
+        case BCMOLT_EPON_ONU_1G_US_STAT_ID_GOOD_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, good_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, good_frames, key);\n");
+            break;
+        case BCMOLT_EPON_ONU_1G_US_STAT_ID_GOOD_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, good_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, good_bytes, key);\n");
+            break;
+        case BCMOLT_EPON_ONU_1G_US_STAT_ID_OVERSZ_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, oversz_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, oversz_frames, key);\n");
+            break;
+        case BCMOLT_EPON_ONU_1G_US_STAT_ID_NON_FEC_GOOD_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, non_fec_good_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, non_fec_good_frames, key);\n");
+            break;
+        case BCMOLT_EPON_ONU_1G_US_STAT_ID_NON_FEC_GOOD_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, non_fec_good_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, non_fec_good_bytes, key);\n");
+            break;
+        case BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_GOOD_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, fec_good_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, fec_good_frames, key);\n");
+            break;
+        case BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_GOOD_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, fec_good_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, fec_good_bytes, key);\n");
+            break;
+        case BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_FRAMES_EXC_ERRS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, fec_frames_exc_errs, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, fec_frames_exc_errs, key);\n");
+            break;
+        case BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_BLKS_NO_ERRS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, fec_blks_no_errs, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, fec_blks_no_errs, key);\n");
+            break;
+        case BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_BLKS_CORR_ERRS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, fec_blks_corr_errs, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, fec_blks_corr_errs, key);\n");
+            break;
+        case BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_BLKS_UNCORR_ERRS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, fec_blks_uncorr_errs, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, fec_blks_uncorr_errs, key);\n");
+            break;
+        case BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_CORR_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, fec_corr_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, fec_corr_bytes, key);\n");
+            break;
+        case BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_CORR_ZEROES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, fec_corr_zeroes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, fec_corr_zeroes, key);\n");
+            break;
+        case BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_CORR_ONES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, fec_corr_ones, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, fec_corr_ones, key);\n");
+            break;
+        case BCMOLT_EPON_ONU_1G_US_STAT_ID_UNDERSZ_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, undersz_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, undersz_frames, key);\n");
+            break;
+        case BCMOLT_EPON_ONU_1G_US_STAT_ID_ERRORSZ_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, errorsz_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_onu_1g_us, errorsz_frames, key);\n");
+            break;
+        default:
+            apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+            return BCM_ERR_RANGE;
+    }
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_stat_alarm_config val = { };
+        cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.trigger.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.type");
+            if (cli_parm != NULL)
+            {
+                val.trigger.type = (bcmolt_stat_condition_type) cli_parm->value.enum_val;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.type is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            switch (val.trigger.type)
+            {
+                case BCMOLT_STAT_CONDITION_TYPE_RATE_THRESHOLD:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.rising");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_threshold.rising = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.rising is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.falling");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_threshold.falling = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.falling is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_RATE_RANGE:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.upper");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_range.upper = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.upper is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.lower");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_range.lower = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.lower is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_VALUE_THRESHOLD:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.limit");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.value_threshold.limit = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.limit is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_NONE:
+                    break;
+                default:
+                    apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+                    return BCM_ERR_RANGE;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.soak.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "cfg.soak.active_soak_time");
+            if (cli_parm != NULL)
+            {
+                val.soak.active_soak_time = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak.active_soak_time is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "cfg.soak.clear_soak_time");
+            if (cli_parm != NULL)
+            {
+                val.soak.clear_soak_time = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak.clear_soak_time is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_STAT_CFG_PROP_SET(&stat_cfg, epon_onu_1g_us, cfg, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_stat_alarm_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_ONU_1G_US, BCMOLT_MGT_GROUP_STAT_CFG, 0, BCMOLT_EPON_ONU_1G_US_STAT_CFG_ID_CFG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_STAT_CFG_PROP_SET(&stat_cfg, epon_onu_1g_us, cfg, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_stat_cfg_set(device_id, &stat_cfg.hdr);
+    bcmcli_log("bcmolt_stat_cfg_set(device_id, &stat_cfg.hdr);\n");
+    apicli_print_complete(session, err, stat_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_onu_1g_us_auto_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_onu_1g_us_auto_cfg auto_cfg;    /**< declare main API struct */
+    bcmolt_epon_onu_1g_us_key key = { };        /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_onu_1g_us_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_epon_onu_1g_us_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_get");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, epon_onu_1g_us, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, epon_onu_1g_us, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_cleared");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_onu_1g_us, stat_alarm_cleared);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_onu_1g_us, stat_alarm_cleared);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_raised");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_onu_1g_us, stat_alarm_raised);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_onu_1g_us, stat_alarm_raised);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_onu_1g_us, stat_alarm_cleared) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_onu_1g_us, stat_alarm_raised))
+    {
+        BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_onu_1g_us, all_properties);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_onu_1g_us, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &auto_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_onu_1g_us_auto_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_onu_1g_us_auto_cfg auto_cfg;    /**< declare main API struct */
+    bcmolt_epon_onu_1g_us_key key = { };        /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_onu_1g_us_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_epon_onu_1g_us_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_set");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, epon_onu_1g_us, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, epon_onu_1g_us, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_cleared");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_onu_1g_us, stat_alarm_cleared, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_onu_1g_us, stat_alarm_cleared, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_ONU_1G_US, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_ONU_1G_US_AUTO_CFG_ID_STAT_ALARM_CLEARED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_raised");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_onu_1g_us, stat_alarm_raised, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_onu_1g_us, stat_alarm_raised, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_ONU_1G_US, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_ONU_1G_US_AUTO_CFG_ID_STAT_ALARM_RAISED, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);\n");
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_path_10g_ds_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_path_10g_ds_cfg cfg;        /**< declare main API struct */
+    bcmolt_epon_path_10g_ds_key key = { };  /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_path_10g_ds_cfg cfg;\n");
+    bcmcli_log("bcmolt_epon_path_10g_ds_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_10G_DS, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_PATH_10G_DS_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, epon_path_10g_ds, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, epon_path_10g_ds, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "fec_state");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_path_10g_ds, fec_state);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_path_10g_ds, fec_state);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "prbs_generator");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_path_10g_ds, prbs_generator);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_path_10g_ds, prbs_generator);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_CFG_PROP_IS_SET(&cfg, epon_path_10g_ds, fec_state) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_path_10g_ds, prbs_generator))
+    {
+        BCMOLT_CFG_PROP_GET(&cfg, epon_path_10g_ds, all_properties);
+        bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_path_10g_ds, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_get(device_id, &cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_path_10g_ds_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_path_10g_ds_cfg cfg;        /**< declare main API struct */
+    bcmolt_epon_path_10g_ds_key key = { };  /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_path_10g_ds_cfg cfg;\n");
+    bcmcli_log("bcmolt_epon_path_10g_ds_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_10G_DS, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_PATH_10G_DS_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, epon_path_10g_ds, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, epon_path_10g_ds, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "fec_state");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_fec_en_state val;
+        val = (bcmolt_epon_fec_en_state) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_path_10g_ds, fec_state, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_path_10g_ds, fec_state, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_10G_DS, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_PATH_10G_DS_CFG_ID_FEC_STATE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "prbs_generator.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_prbs_generator_config val = { };
+        cli_parm = bcmcli_find_named_parm(session, "prbs_generator.polynom");
+        if (cli_parm != NULL)
+        {
+            val.polynom = (bcmolt_prbs_polynomial) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "prbs_generator.polynom is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "prbs_generator.error_insert");
+        if (cli_parm != NULL)
+        {
+            val.error_insert = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "prbs_generator.error_insert is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "prbs_generator.invert");
+        if (cli_parm != NULL)
+        {
+            val.invert = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "prbs_generator.invert is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "prbs_generator.control");
+        if (cli_parm != NULL)
+        {
+            val.control = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "prbs_generator.control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_path_10g_ds, prbs_generator, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_prbs_generator_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_10G_DS, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_PATH_10G_DS_CFG_ID_PRBS_GENERATOR, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_path_10g_ds, prbs_generator, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_set(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_set(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_path_10g_ds_cfg_clear(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_path_10g_ds_cfg cfg;        /**< declare main API struct */
+    bcmolt_epon_path_10g_ds_key key = { };  /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_path_10g_ds_cfg cfg;\n");
+    bcmcli_log("bcmolt_epon_path_10g_ds_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_clear");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_10G_DS, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_PATH_10G_DS_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, epon_path_10g_ds, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, epon_path_10g_ds, key);\n");
+
+    /* call API */
+    err = bcmolt_cfg_clear(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_clear(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_path_10g_ds_cfg_get_multi(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_path_10g_ds_cfg cfg;        /**< declare main API struct */
+    bcmolt_epon_path_10g_ds_key key = { };  /**< declare key */
+    bcmolt_msg_set *msg_set = NULL;         /**< declare message set */
+    uint32_t max_msgs;                      /**< declare max number of msgs to get */
+    bcmos_bool invert_filter;               /**< declare filter invert flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_path_10g_ds_cfg cfg;\n");
+    bcmcli_log("bcmolt_epon_path_10g_ds_key key = {  };\n");
+    bcmcli_log("bcmolt_msg_set* msg_set = NULL;\n");
+    bcmcli_log("uint32_t max_msgs;\n");
+    bcmcli_log("bcmos_bool invert_filter;\n");
+    apicli_print_start(session, "bcmolt_cfg_get_multi");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_10G_DS, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_PATH_10G_DS_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+
+    /* set max number of msgs from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "max_msgs");
+    if (cli_parm != NULL)
+    {
+        max_msgs = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "max_msgs is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("max_msgs = %d;\n", max_msgs);
+
+    /* set filter invert flag from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "filter_invert");
+    if (cli_parm != NULL)
+    {
+        invert_filter = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "filter_invert is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("invert_filter = %s;\n", (invert_filter) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* allocate message set */
+    err = apicli_msg_set_alloc(byte_pool, BCMOLT_OBJ_ID_EPON_PATH_10G_DS, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    bcmcli_log("bcmolt_msg_set_alloc(BCMOLT_OBJ_ID_EPON_PATH_10G_DS, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, epon_path_10g_ds, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, epon_path_10g_ds, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "filter.fec_state");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_fec_en_state val;
+        val = (bcmolt_epon_fec_en_state) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_path_10g_ds, fec_state, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_path_10g_ds, fec_state, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_10G_DS, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_PATH_10G_DS_CFG_ID_FEC_STATE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "fec_state");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_path_10g_ds, fec_state);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_path_10g_ds, fec_state);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.prbs_generator.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_prbs_generator_config val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_generator.polynom");
+        if (cli_parm != NULL)
+        {
+            val.polynom = (bcmolt_prbs_polynomial) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_generator.polynom is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_generator.error_insert");
+        if (cli_parm != NULL)
+        {
+            val.error_insert = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_generator.error_insert is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_generator.invert");
+        if (cli_parm != NULL)
+        {
+            val.invert = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_generator.invert is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_generator.control");
+        if (cli_parm != NULL)
+        {
+            val.control = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_generator.control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_path_10g_ds, prbs_generator, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_prbs_generator_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_10G_DS, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_PATH_10G_DS_CFG_ID_PRBS_GENERATOR, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_path_10g_ds, prbs_generator, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "prbs_generator");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_path_10g_ds, prbs_generator);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_path_10g_ds, prbs_generator);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_path_10g_ds, fec_state) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_path_10g_ds, prbs_generator))
+    {
+        BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_path_10g_ds, all_properties);
+        bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_path_10g_ds, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);
+    bcmcli_log("bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_path_10g_ds_stat_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_path_10g_ds_stat stat;      /**< declare main API struct */
+    bcmolt_epon_path_10g_ds_key key = { };  /**< declare key */
+    bcmos_bool clear_on_read;               /**< declare 'clear on read' flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_path_10g_ds_stat stat;\n");
+    bcmcli_log("bcmolt_epon_path_10g_ds_key key = {  };\n");
+    bcmcli_log("bcmos_bool clear_on_read;\n");
+    apicli_print_start(session, "bcmolt_stat_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_10G_DS, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_PATH_10G_DS_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+
+    /* set stat flags from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "clear");
+    if (cli_parm != NULL)
+    {
+        clear_on_read = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "clear is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("clear_on_read = %s;\n", (clear_on_read) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* init the API struct */
+    BCMOLT_STAT_INIT(&stat, epon_path_10g_ds, key);
+    bcmcli_log("BCMOLT_STAT_INIT(&stat, epon_path_10g_ds, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "bytes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_ds, bytes);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_ds, bytes);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_ds, frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_ds, frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_64");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_ds, frames_64);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_ds, frames_64);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_65_127");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_ds, frames_65_127);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_ds, frames_65_127);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_128_255");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_ds, frames_128_255);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_ds, frames_128_255);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_256_511");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_ds, frames_256_511);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_ds, frames_256_511);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_512_1023");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_ds, frames_512_1023);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_ds, frames_512_1023);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_1024_1518");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_ds, frames_1024_1518);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_ds, frames_1024_1518);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_1519_2047");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_ds, frames_1519_2047);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_ds, frames_1519_2047);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_2048_4095");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_ds, frames_2048_4095);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_ds, frames_2048_4095);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_4096_9216");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_ds, frames_4096_9216);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_ds, frames_4096_9216);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_9217_16383");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_ds, frames_9217_16383);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_ds, frames_9217_16383);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "broadcast_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_ds, broadcast_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_ds, broadcast_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "data_bytes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_ds, data_bytes);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_ds, data_bytes);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "multicast_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_ds, multicast_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_ds, multicast_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "unicast_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_ds, unicast_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_ds, unicast_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "oam_bytes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_ds, oam_bytes);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_ds, oam_bytes);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "oam_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_ds, oam_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_ds, oam_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "gate_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_ds, gate_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_ds, gate_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mpcp_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_ds, mpcp_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_ds, mpcp_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "abort_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_ds, abort_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_ds, abort_frames);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_ds, bytes) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_ds, frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_ds, frames_64) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_ds, frames_65_127) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_ds, frames_128_255) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_ds, frames_256_511) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_ds, frames_512_1023) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_ds, frames_1024_1518) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_ds, frames_1519_2047) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_ds, frames_2048_4095) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_ds, frames_4096_9216) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_ds, frames_9217_16383) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_ds, broadcast_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_ds, data_bytes) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_ds, multicast_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_ds, unicast_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_ds, oam_bytes) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_ds, oam_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_ds, gate_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_ds, mpcp_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_ds, abort_frames))
+    {
+        BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_ds, all_properties);
+        bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_ds, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_stat_get(device_id, &stat.hdr, clear_on_read);
+    bcmcli_log("bcmolt_stat_get(device_id, &stat.hdr, clear_on_read);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &stat.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, stat.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_path_10g_ds_stat_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_path_10g_ds_stat_cfg stat_cfg;  /**< declare main API struct */
+    bcmolt_epon_path_10g_ds_key key = { };      /**< declare key */
+    bcmolt_epon_path_10g_ds_stat_id stat_id;    /**< declare stat ID */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_path_10g_ds_stat_cfg stat_cfg;\n");
+    bcmcli_log("bcmolt_epon_path_10g_ds_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_stat_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_10G_DS, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_PATH_10G_DS_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+
+    /* set stat ID from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "sub");
+    if (cli_parm != NULL)
+    {
+        stat_id = (bcmolt_epon_path_10g_ds_stat_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    /* init the API struct */
+    switch (stat_id)
+    {
+        case BCMOLT_EPON_PATH_10G_DS_STAT_ID_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, bytes, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_64:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, frames_64, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, frames_64, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_65_127:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, frames_65_127, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, frames_65_127, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_128_255:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, frames_128_255, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, frames_128_255, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_256_511:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, frames_256_511, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, frames_256_511, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_512_1023:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, frames_512_1023, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, frames_512_1023, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_1024_1518:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, frames_1024_1518, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, frames_1024_1518, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_1519_2047:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, frames_1519_2047, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, frames_1519_2047, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_2048_4095:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, frames_2048_4095, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, frames_2048_4095, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_4096_9216:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, frames_4096_9216, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, frames_4096_9216, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_9217_16383:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, frames_9217_16383, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, frames_9217_16383, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_DS_STAT_ID_BROADCAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, broadcast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, broadcast_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_DS_STAT_ID_DATA_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, data_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, data_bytes, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_DS_STAT_ID_MULTICAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, multicast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, multicast_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_DS_STAT_ID_UNICAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, unicast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, unicast_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_DS_STAT_ID_OAM_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, oam_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, oam_bytes, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_DS_STAT_ID_OAM_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, oam_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, oam_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_DS_STAT_ID_GATE_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, gate_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, gate_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_DS_STAT_ID_MPCP_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, mpcp_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, mpcp_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_DS_STAT_ID_ABORT_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, abort_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, abort_frames, key);\n");
+            break;
+        default:
+            apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+            return BCM_ERR_RANGE;
+    }
+
+    /* call API */
+    err = bcmolt_stat_cfg_get(device_id, &stat_cfg.hdr);
+    bcmcli_log("bcmolt_stat_cfg_get(device_id, &stat_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &stat_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, stat_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_path_10g_ds_stat_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_path_10g_ds_stat_cfg stat_cfg;  /**< declare main API struct */
+    bcmolt_epon_path_10g_ds_key key = { };      /**< declare key */
+    bcmolt_epon_path_10g_ds_stat_id stat_id;    /**< declare stat ID */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_path_10g_ds_stat_cfg stat_cfg;\n");
+    bcmcli_log("bcmolt_epon_path_10g_ds_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_stat_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_10G_DS, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_PATH_10G_DS_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+
+    /* set stat ID from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "sub");
+    if (cli_parm != NULL)
+    {
+        stat_id = (bcmolt_epon_path_10g_ds_stat_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    /* init the API struct */
+    switch (stat_id)
+    {
+        case BCMOLT_EPON_PATH_10G_DS_STAT_ID_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, bytes, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_64:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, frames_64, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, frames_64, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_65_127:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, frames_65_127, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, frames_65_127, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_128_255:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, frames_128_255, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, frames_128_255, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_256_511:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, frames_256_511, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, frames_256_511, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_512_1023:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, frames_512_1023, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, frames_512_1023, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_1024_1518:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, frames_1024_1518, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, frames_1024_1518, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_1519_2047:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, frames_1519_2047, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, frames_1519_2047, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_2048_4095:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, frames_2048_4095, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, frames_2048_4095, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_4096_9216:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, frames_4096_9216, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, frames_4096_9216, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_9217_16383:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, frames_9217_16383, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, frames_9217_16383, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_DS_STAT_ID_BROADCAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, broadcast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, broadcast_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_DS_STAT_ID_DATA_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, data_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, data_bytes, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_DS_STAT_ID_MULTICAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, multicast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, multicast_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_DS_STAT_ID_UNICAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, unicast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, unicast_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_DS_STAT_ID_OAM_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, oam_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, oam_bytes, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_DS_STAT_ID_OAM_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, oam_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, oam_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_DS_STAT_ID_GATE_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, gate_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, gate_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_DS_STAT_ID_MPCP_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, mpcp_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, mpcp_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_DS_STAT_ID_ABORT_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, abort_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_ds, abort_frames, key);\n");
+            break;
+        default:
+            apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+            return BCM_ERR_RANGE;
+    }
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_stat_alarm_config val = { };
+        cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.trigger.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.type");
+            if (cli_parm != NULL)
+            {
+                val.trigger.type = (bcmolt_stat_condition_type) cli_parm->value.enum_val;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.type is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            switch (val.trigger.type)
+            {
+                case BCMOLT_STAT_CONDITION_TYPE_RATE_THRESHOLD:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.rising");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_threshold.rising = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.rising is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.falling");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_threshold.falling = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.falling is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_RATE_RANGE:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.upper");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_range.upper = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.upper is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.lower");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_range.lower = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.lower is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_VALUE_THRESHOLD:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.limit");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.value_threshold.limit = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.limit is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_NONE:
+                    break;
+                default:
+                    apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+                    return BCM_ERR_RANGE;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.soak.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "cfg.soak.active_soak_time");
+            if (cli_parm != NULL)
+            {
+                val.soak.active_soak_time = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak.active_soak_time is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "cfg.soak.clear_soak_time");
+            if (cli_parm != NULL)
+            {
+                val.soak.clear_soak_time = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak.clear_soak_time is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_STAT_CFG_PROP_SET(&stat_cfg, epon_path_10g_ds, cfg, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_stat_alarm_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_10G_DS, BCMOLT_MGT_GROUP_STAT_CFG, 0, BCMOLT_EPON_PATH_10G_DS_STAT_CFG_ID_CFG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_STAT_CFG_PROP_SET(&stat_cfg, epon_path_10g_ds, cfg, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_stat_cfg_set(device_id, &stat_cfg.hdr);
+    bcmcli_log("bcmolt_stat_cfg_set(device_id, &stat_cfg.hdr);\n");
+    apicli_print_complete(session, err, stat_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_path_10g_ds_auto_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_path_10g_ds_auto_cfg auto_cfg;  /**< declare main API struct */
+    bcmolt_epon_path_10g_ds_key key = { };      /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_path_10g_ds_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_epon_path_10g_ds_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_get");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, epon_path_10g_ds, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, epon_path_10g_ds, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_cleared");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_path_10g_ds, stat_alarm_cleared);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_path_10g_ds, stat_alarm_cleared);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_raised");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_path_10g_ds, stat_alarm_raised);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_path_10g_ds, stat_alarm_raised);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_path_10g_ds, stat_alarm_cleared) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_path_10g_ds, stat_alarm_raised))
+    {
+        BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_path_10g_ds, all_properties);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_path_10g_ds, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &auto_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_path_10g_ds_auto_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_path_10g_ds_auto_cfg auto_cfg;  /**< declare main API struct */
+    bcmolt_epon_path_10g_ds_key key = { };      /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_path_10g_ds_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_epon_path_10g_ds_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_set");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, epon_path_10g_ds, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, epon_path_10g_ds, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_cleared");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_path_10g_ds, stat_alarm_cleared, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_path_10g_ds, stat_alarm_cleared, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_10G_DS, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_PATH_10G_DS_AUTO_CFG_ID_STAT_ALARM_CLEARED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_raised");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_path_10g_ds, stat_alarm_raised, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_path_10g_ds, stat_alarm_raised, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_10G_DS, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_PATH_10G_DS_AUTO_CFG_ID_STAT_ALARM_RAISED, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);\n");
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_path_10g_us_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_path_10g_us_cfg cfg;        /**< declare main API struct */
+    bcmolt_epon_path_10g_us_key key = { };  /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_path_10g_us_cfg cfg;\n");
+    bcmcli_log("bcmolt_epon_path_10g_us_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_10G_US, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_PATH_10G_US_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, epon_path_10g_us, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, epon_path_10g_us, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "fec_state");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_path_10g_us, fec_state);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_path_10g_us, fec_state);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "sync_time_tq");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_path_10g_us, sync_time_tq);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_path_10g_us, sync_time_tq);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "prbs_checker");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_path_10g_us, prbs_checker);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_path_10g_us, prbs_checker);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "prbs_status");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_path_10g_us, prbs_status);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_path_10g_us, prbs_status);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_CFG_PROP_IS_SET(&cfg, epon_path_10g_us, fec_state) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_path_10g_us, sync_time_tq) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_path_10g_us, prbs_checker) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_path_10g_us, prbs_status))
+    {
+        BCMOLT_CFG_PROP_GET(&cfg, epon_path_10g_us, all_properties);
+        bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_path_10g_us, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_get(device_id, &cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_path_10g_us_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_path_10g_us_cfg cfg;        /**< declare main API struct */
+    bcmolt_epon_path_10g_us_key key = { };  /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_path_10g_us_cfg cfg;\n");
+    bcmcli_log("bcmolt_epon_path_10g_us_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_10G_US, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_PATH_10G_US_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, epon_path_10g_us, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, epon_path_10g_us, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "fec_state");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_fec_en_state val;
+        val = (bcmolt_epon_fec_en_state) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_path_10g_us, fec_state, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_path_10g_us, fec_state, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_10G_US, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_PATH_10G_US_CFG_ID_FEC_STATE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "sync_time_tq");
+    if (cli_parm != NULL)
+    {
+        bcmolt_time_quanta val;
+        val = (bcmolt_time_quanta) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_path_10g_us, sync_time_tq, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_path_10g_us, sync_time_tq, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_10G_US, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_PATH_10G_US_CFG_ID_SYNC_TIME_TQ, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "prbs_checker.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_prbs_checker_config val = { };
+        cli_parm = bcmcli_find_named_parm(session, "prbs_checker.polynom");
+        if (cli_parm != NULL)
+        {
+            val.polynom = (bcmolt_prbs_polynomial) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "prbs_checker.polynom is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "prbs_checker.mode");
+        if (cli_parm != NULL)
+        {
+            val.mode = (bcmolt_prbs_checker_mode) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "prbs_checker.mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "prbs_checker.data_invert");
+        if (cli_parm != NULL)
+        {
+            val.data_invert = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "prbs_checker.data_invert is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "prbs_checker.control");
+        if (cli_parm != NULL)
+        {
+            val.control = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "prbs_checker.control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_path_10g_us, prbs_checker, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_prbs_checker_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_10G_US, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_PATH_10G_US_CFG_ID_PRBS_CHECKER, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_path_10g_us, prbs_checker, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_set(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_set(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_path_10g_us_cfg_clear(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_path_10g_us_cfg cfg;        /**< declare main API struct */
+    bcmolt_epon_path_10g_us_key key = { };  /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_path_10g_us_cfg cfg;\n");
+    bcmcli_log("bcmolt_epon_path_10g_us_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_clear");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_10G_US, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_PATH_10G_US_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, epon_path_10g_us, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, epon_path_10g_us, key);\n");
+
+    /* call API */
+    err = bcmolt_cfg_clear(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_clear(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_path_10g_us_cfg_get_multi(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_path_10g_us_cfg cfg;        /**< declare main API struct */
+    bcmolt_epon_path_10g_us_key key = { };  /**< declare key */
+    bcmolt_msg_set *msg_set = NULL;         /**< declare message set */
+    uint32_t max_msgs;                      /**< declare max number of msgs to get */
+    bcmos_bool invert_filter;               /**< declare filter invert flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_path_10g_us_cfg cfg;\n");
+    bcmcli_log("bcmolt_epon_path_10g_us_key key = {  };\n");
+    bcmcli_log("bcmolt_msg_set* msg_set = NULL;\n");
+    bcmcli_log("uint32_t max_msgs;\n");
+    bcmcli_log("bcmos_bool invert_filter;\n");
+    apicli_print_start(session, "bcmolt_cfg_get_multi");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_10G_US, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_PATH_10G_US_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+
+    /* set max number of msgs from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "max_msgs");
+    if (cli_parm != NULL)
+    {
+        max_msgs = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "max_msgs is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("max_msgs = %d;\n", max_msgs);
+
+    /* set filter invert flag from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "filter_invert");
+    if (cli_parm != NULL)
+    {
+        invert_filter = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "filter_invert is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("invert_filter = %s;\n", (invert_filter) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* allocate message set */
+    err = apicli_msg_set_alloc(byte_pool, BCMOLT_OBJ_ID_EPON_PATH_10G_US, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    bcmcli_log("bcmolt_msg_set_alloc(BCMOLT_OBJ_ID_EPON_PATH_10G_US, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, epon_path_10g_us, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, epon_path_10g_us, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "filter.fec_state");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_fec_en_state val;
+        val = (bcmolt_epon_fec_en_state) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_path_10g_us, fec_state, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_path_10g_us, fec_state, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_10G_US, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_PATH_10G_US_CFG_ID_FEC_STATE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "fec_state");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_path_10g_us, fec_state);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_path_10g_us, fec_state);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.sync_time_tq");
+    if (cli_parm != NULL)
+    {
+        bcmolt_time_quanta val;
+        val = (bcmolt_time_quanta) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_path_10g_us, sync_time_tq, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_path_10g_us, sync_time_tq, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_10G_US, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_PATH_10G_US_CFG_ID_SYNC_TIME_TQ, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "sync_time_tq");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_path_10g_us, sync_time_tq);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_path_10g_us, sync_time_tq);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.prbs_checker.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_prbs_checker_config val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_checker.polynom");
+        if (cli_parm != NULL)
+        {
+            val.polynom = (bcmolt_prbs_polynomial) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_checker.polynom is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_checker.mode");
+        if (cli_parm != NULL)
+        {
+            val.mode = (bcmolt_prbs_checker_mode) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_checker.mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_checker.data_invert");
+        if (cli_parm != NULL)
+        {
+            val.data_invert = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_checker.data_invert is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_checker.control");
+        if (cli_parm != NULL)
+        {
+            val.control = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_checker.control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_path_10g_us, prbs_checker, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_prbs_checker_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_10G_US, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_PATH_10G_US_CFG_ID_PRBS_CHECKER, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_path_10g_us, prbs_checker, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "prbs_checker");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_path_10g_us, prbs_checker);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_path_10g_us, prbs_checker);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.prbs_status.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_prbs_status val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_status.lock_state");
+        if (cli_parm != NULL)
+        {
+            val.lock_state = (bcmolt_prbs_lock_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_status.lock_state is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_status.error_counts");
+        if (cli_parm != NULL)
+        {
+            val.error_counts = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_status.error_counts is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_path_10g_us, prbs_status, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_prbs_status val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_10G_US, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_PATH_10G_US_CFG_ID_PRBS_STATUS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_path_10g_us, prbs_status, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "prbs_status");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_path_10g_us, prbs_status);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_path_10g_us, prbs_status);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_path_10g_us, fec_state) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_path_10g_us, sync_time_tq) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_path_10g_us, prbs_checker) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_path_10g_us, prbs_status))
+    {
+        BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_path_10g_us, all_properties);
+        bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_path_10g_us, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);
+    bcmcli_log("bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_path_10g_us_stat_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_path_10g_us_stat stat;      /**< declare main API struct */
+    bcmolt_epon_path_10g_us_key key = { };  /**< declare key */
+    bcmos_bool clear_on_read;               /**< declare 'clear on read' flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_path_10g_us_stat stat;\n");
+    bcmcli_log("bcmolt_epon_path_10g_us_key key = {  };\n");
+    bcmcli_log("bcmos_bool clear_on_read;\n");
+    apicli_print_start(session, "bcmolt_stat_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_10G_US, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_PATH_10G_US_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+
+    /* set stat flags from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "clear");
+    if (cli_parm != NULL)
+    {
+        clear_on_read = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "clear is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("clear_on_read = %s;\n", (clear_on_read) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* init the API struct */
+    BCMOLT_STAT_INIT(&stat, epon_path_10g_us, key);
+    bcmcli_log("BCMOLT_STAT_INIT(&stat, epon_path_10g_us, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "bytes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, bytes);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, bytes);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_64");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, frames_64);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, frames_64);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_65_127");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, frames_65_127);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, frames_65_127);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_128_255");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, frames_128_255);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, frames_128_255);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_256_511");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, frames_256_511);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, frames_256_511);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_512_1023");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, frames_512_1023);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, frames_512_1023);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_1024_1518");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, frames_1024_1518);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, frames_1024_1518);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_1519_2047");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, frames_1519_2047);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, frames_1519_2047);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_2048_4095");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, frames_2048_4095);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, frames_2048_4095);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_4096_9216");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, frames_4096_9216);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, frames_4096_9216);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_9217_16383");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, frames_9217_16383);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, frames_9217_16383);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "broadcast_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, broadcast_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, broadcast_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "data_bytes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, data_bytes);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, data_bytes);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "multicast_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, multicast_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, multicast_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "unicast_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, unicast_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, unicast_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mpcp_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, mpcp_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, mpcp_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "oam_bytes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, oam_bytes);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, oam_bytes);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "oam_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, oam_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, oam_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "report_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, report_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, report_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "abort_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, abort_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, abort_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "fcs_error");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, fcs_error);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, fcs_error);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "crc_8_error");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, crc_8_error);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, crc_8_error);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "out_of_slot");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, out_of_slot);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, out_of_slot);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "oversize_error");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, oversize_error);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, oversize_error);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "runt_error");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, runt_error);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, runt_error);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_us, bytes) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_us, frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_us, frames_64) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_us, frames_65_127) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_us, frames_128_255) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_us, frames_256_511) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_us, frames_512_1023) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_us, frames_1024_1518) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_us, frames_1519_2047) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_us, frames_2048_4095) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_us, frames_4096_9216) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_us, frames_9217_16383) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_us, broadcast_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_us, data_bytes) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_us, multicast_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_us, unicast_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_us, mpcp_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_us, oam_bytes) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_us, oam_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_us, report_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_us, abort_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_us, fcs_error) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_us, crc_8_error) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_us, out_of_slot) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_us, oversize_error) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_10g_us, runt_error))
+    {
+        BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, all_properties);
+        bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_10g_us, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_stat_get(device_id, &stat.hdr, clear_on_read);
+    bcmcli_log("bcmolt_stat_get(device_id, &stat.hdr, clear_on_read);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &stat.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, stat.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_path_10g_us_stat_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_path_10g_us_stat_cfg stat_cfg;  /**< declare main API struct */
+    bcmolt_epon_path_10g_us_key key = { };      /**< declare key */
+    bcmolt_epon_path_10g_us_stat_id stat_id;    /**< declare stat ID */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_path_10g_us_stat_cfg stat_cfg;\n");
+    bcmcli_log("bcmolt_epon_path_10g_us_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_stat_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_10G_US, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_PATH_10G_US_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+
+    /* set stat ID from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "sub");
+    if (cli_parm != NULL)
+    {
+        stat_id = (bcmolt_epon_path_10g_us_stat_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    /* init the API struct */
+    switch (stat_id)
+    {
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, bytes, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_64:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, frames_64, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, frames_64, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_65_127:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, frames_65_127, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, frames_65_127, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_128_255:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, frames_128_255, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, frames_128_255, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_256_511:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, frames_256_511, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, frames_256_511, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_512_1023:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, frames_512_1023, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, frames_512_1023, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_1024_1518:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, frames_1024_1518, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, frames_1024_1518, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_1519_2047:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, frames_1519_2047, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, frames_1519_2047, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_2048_4095:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, frames_2048_4095, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, frames_2048_4095, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_4096_9216:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, frames_4096_9216, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, frames_4096_9216, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_9217_16383:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, frames_9217_16383, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, frames_9217_16383, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_BROADCAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, broadcast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, broadcast_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_DATA_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, data_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, data_bytes, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_MULTICAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, multicast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, multicast_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_UNICAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, unicast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, unicast_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_MPCP_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, mpcp_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, mpcp_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_OAM_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, oam_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, oam_bytes, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_OAM_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, oam_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, oam_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_REPORT_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, report_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, report_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_ABORT_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, abort_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, abort_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_FCS_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, fcs_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, fcs_error, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_CRC_8_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, crc_8_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, crc_8_error, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_OUT_OF_SLOT:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, out_of_slot, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, out_of_slot, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_OVERSIZE_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, oversize_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, oversize_error, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_RUNT_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, runt_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, runt_error, key);\n");
+            break;
+        default:
+            apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+            return BCM_ERR_RANGE;
+    }
+
+    /* call API */
+    err = bcmolt_stat_cfg_get(device_id, &stat_cfg.hdr);
+    bcmcli_log("bcmolt_stat_cfg_get(device_id, &stat_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &stat_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, stat_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_path_10g_us_stat_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_path_10g_us_stat_cfg stat_cfg;  /**< declare main API struct */
+    bcmolt_epon_path_10g_us_key key = { };      /**< declare key */
+    bcmolt_epon_path_10g_us_stat_id stat_id;    /**< declare stat ID */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_path_10g_us_stat_cfg stat_cfg;\n");
+    bcmcli_log("bcmolt_epon_path_10g_us_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_stat_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_10G_US, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_PATH_10G_US_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+
+    /* set stat ID from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "sub");
+    if (cli_parm != NULL)
+    {
+        stat_id = (bcmolt_epon_path_10g_us_stat_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    /* init the API struct */
+    switch (stat_id)
+    {
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, bytes, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_64:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, frames_64, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, frames_64, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_65_127:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, frames_65_127, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, frames_65_127, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_128_255:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, frames_128_255, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, frames_128_255, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_256_511:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, frames_256_511, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, frames_256_511, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_512_1023:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, frames_512_1023, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, frames_512_1023, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_1024_1518:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, frames_1024_1518, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, frames_1024_1518, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_1519_2047:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, frames_1519_2047, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, frames_1519_2047, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_2048_4095:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, frames_2048_4095, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, frames_2048_4095, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_4096_9216:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, frames_4096_9216, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, frames_4096_9216, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_9217_16383:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, frames_9217_16383, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, frames_9217_16383, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_BROADCAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, broadcast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, broadcast_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_DATA_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, data_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, data_bytes, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_MULTICAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, multicast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, multicast_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_UNICAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, unicast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, unicast_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_MPCP_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, mpcp_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, mpcp_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_OAM_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, oam_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, oam_bytes, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_OAM_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, oam_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, oam_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_REPORT_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, report_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, report_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_ABORT_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, abort_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, abort_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_FCS_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, fcs_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, fcs_error, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_CRC_8_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, crc_8_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, crc_8_error, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_OUT_OF_SLOT:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, out_of_slot, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, out_of_slot, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_OVERSIZE_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, oversize_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, oversize_error, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_10G_US_STAT_ID_RUNT_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, runt_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_10g_us, runt_error, key);\n");
+            break;
+        default:
+            apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+            return BCM_ERR_RANGE;
+    }
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_stat_alarm_config val = { };
+        cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.trigger.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.type");
+            if (cli_parm != NULL)
+            {
+                val.trigger.type = (bcmolt_stat_condition_type) cli_parm->value.enum_val;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.type is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            switch (val.trigger.type)
+            {
+                case BCMOLT_STAT_CONDITION_TYPE_RATE_THRESHOLD:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.rising");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_threshold.rising = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.rising is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.falling");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_threshold.falling = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.falling is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_RATE_RANGE:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.upper");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_range.upper = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.upper is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.lower");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_range.lower = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.lower is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_VALUE_THRESHOLD:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.limit");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.value_threshold.limit = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.limit is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_NONE:
+                    break;
+                default:
+                    apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+                    return BCM_ERR_RANGE;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.soak.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "cfg.soak.active_soak_time");
+            if (cli_parm != NULL)
+            {
+                val.soak.active_soak_time = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak.active_soak_time is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "cfg.soak.clear_soak_time");
+            if (cli_parm != NULL)
+            {
+                val.soak.clear_soak_time = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak.clear_soak_time is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_STAT_CFG_PROP_SET(&stat_cfg, epon_path_10g_us, cfg, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_stat_alarm_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_10G_US, BCMOLT_MGT_GROUP_STAT_CFG, 0, BCMOLT_EPON_PATH_10G_US_STAT_CFG_ID_CFG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_STAT_CFG_PROP_SET(&stat_cfg, epon_path_10g_us, cfg, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_stat_cfg_set(device_id, &stat_cfg.hdr);
+    bcmcli_log("bcmolt_stat_cfg_set(device_id, &stat_cfg.hdr);\n");
+    apicli_print_complete(session, err, stat_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_path_10g_us_auto_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_path_10g_us_auto_cfg auto_cfg;  /**< declare main API struct */
+    bcmolt_epon_path_10g_us_key key = { };      /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_path_10g_us_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_epon_path_10g_us_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_get");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, epon_path_10g_us, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, epon_path_10g_us, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_cleared");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_path_10g_us, stat_alarm_cleared);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_path_10g_us, stat_alarm_cleared);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_raised");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_path_10g_us, stat_alarm_raised);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_path_10g_us, stat_alarm_raised);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_path_10g_us, stat_alarm_cleared) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_path_10g_us, stat_alarm_raised))
+    {
+        BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_path_10g_us, all_properties);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_path_10g_us, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &auto_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_path_10g_us_auto_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_path_10g_us_auto_cfg auto_cfg;  /**< declare main API struct */
+    bcmolt_epon_path_10g_us_key key = { };      /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_path_10g_us_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_epon_path_10g_us_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_set");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, epon_path_10g_us, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, epon_path_10g_us, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_cleared");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_path_10g_us, stat_alarm_cleared, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_path_10g_us, stat_alarm_cleared, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_10G_US, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_PATH_10G_US_AUTO_CFG_ID_STAT_ALARM_CLEARED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_raised");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_path_10g_us, stat_alarm_raised, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_path_10g_us, stat_alarm_raised, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_10G_US, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_PATH_10G_US_AUTO_CFG_ID_STAT_ALARM_RAISED, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);\n");
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_path_1g_ds_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_path_1g_ds_cfg cfg;         /**< declare main API struct */
+    bcmolt_epon_path_1g_ds_key key = { };   /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_path_1g_ds_cfg cfg;\n");
+    bcmcli_log("bcmolt_epon_path_1g_ds_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_1G_DS, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_PATH_1G_DS_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, epon_path_1g_ds, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, epon_path_1g_ds, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "default_fec_state");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_path_1g_ds, default_fec_state);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_path_1g_ds, default_fec_state);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "raman_mode");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_path_1g_ds, raman_mode);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_path_1g_ds, raman_mode);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "turbo_2g_mode");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_path_1g_ds, turbo_2g_mode);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_path_1g_ds, turbo_2g_mode);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "prbs_generator");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_path_1g_ds, prbs_generator);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_path_1g_ds, prbs_generator);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_CFG_PROP_IS_SET(&cfg, epon_path_1g_ds, default_fec_state) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_path_1g_ds, raman_mode) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_path_1g_ds, turbo_2g_mode) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_path_1g_ds, prbs_generator))
+    {
+        BCMOLT_CFG_PROP_GET(&cfg, epon_path_1g_ds, all_properties);
+        bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_path_1g_ds, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_get(device_id, &cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_path_1g_ds_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_path_1g_ds_cfg cfg;         /**< declare main API struct */
+    bcmolt_epon_path_1g_ds_key key = { };   /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_path_1g_ds_cfg cfg;\n");
+    bcmcli_log("bcmolt_epon_path_1g_ds_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_1G_DS, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_PATH_1G_DS_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, epon_path_1g_ds, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, epon_path_1g_ds, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "default_fec_state");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_fec_en_state val;
+        val = (bcmolt_epon_fec_en_state) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_path_1g_ds, default_fec_state, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_path_1g_ds, default_fec_state, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_1G_DS, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_PATH_1G_DS_CFG_ID_DEFAULT_FEC_STATE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "raman_mode");
+    if (cli_parm != NULL)
+    {
+        bcmolt_raman_mitigation_mode val;
+        val = (bcmolt_raman_mitigation_mode) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_path_1g_ds, raman_mode, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_path_1g_ds, raman_mode, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_1G_DS, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_PATH_1G_DS_CFG_ID_RAMAN_MODE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "turbo_2g_mode");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_1g_turbo_mode val;
+        val = (bcmolt_epon_1g_turbo_mode) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_path_1g_ds, turbo_2g_mode, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_path_1g_ds, turbo_2g_mode, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_1G_DS, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_PATH_1G_DS_CFG_ID_TURBO_2G_MODE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "prbs_generator.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_prbs_generator_config val = { };
+        cli_parm = bcmcli_find_named_parm(session, "prbs_generator.polynom");
+        if (cli_parm != NULL)
+        {
+            val.polynom = (bcmolt_prbs_polynomial) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "prbs_generator.polynom is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "prbs_generator.error_insert");
+        if (cli_parm != NULL)
+        {
+            val.error_insert = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "prbs_generator.error_insert is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "prbs_generator.invert");
+        if (cli_parm != NULL)
+        {
+            val.invert = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "prbs_generator.invert is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "prbs_generator.control");
+        if (cli_parm != NULL)
+        {
+            val.control = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "prbs_generator.control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_path_1g_ds, prbs_generator, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_prbs_generator_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_1G_DS, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_PATH_1G_DS_CFG_ID_PRBS_GENERATOR, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_path_1g_ds, prbs_generator, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_set(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_set(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_path_1g_ds_cfg_clear(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_path_1g_ds_cfg cfg;         /**< declare main API struct */
+    bcmolt_epon_path_1g_ds_key key = { };   /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_path_1g_ds_cfg cfg;\n");
+    bcmcli_log("bcmolt_epon_path_1g_ds_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_clear");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_1G_DS, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_PATH_1G_DS_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, epon_path_1g_ds, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, epon_path_1g_ds, key);\n");
+
+    /* call API */
+    err = bcmolt_cfg_clear(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_clear(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_path_1g_ds_cfg_get_multi(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_path_1g_ds_cfg cfg;         /**< declare main API struct */
+    bcmolt_epon_path_1g_ds_key key = { };   /**< declare key */
+    bcmolt_msg_set *msg_set = NULL;         /**< declare message set */
+    uint32_t max_msgs;                      /**< declare max number of msgs to get */
+    bcmos_bool invert_filter;               /**< declare filter invert flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_path_1g_ds_cfg cfg;\n");
+    bcmcli_log("bcmolt_epon_path_1g_ds_key key = {  };\n");
+    bcmcli_log("bcmolt_msg_set* msg_set = NULL;\n");
+    bcmcli_log("uint32_t max_msgs;\n");
+    bcmcli_log("bcmos_bool invert_filter;\n");
+    apicli_print_start(session, "bcmolt_cfg_get_multi");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_1G_DS, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_PATH_1G_DS_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+
+    /* set max number of msgs from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "max_msgs");
+    if (cli_parm != NULL)
+    {
+        max_msgs = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "max_msgs is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("max_msgs = %d;\n", max_msgs);
+
+    /* set filter invert flag from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "filter_invert");
+    if (cli_parm != NULL)
+    {
+        invert_filter = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "filter_invert is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("invert_filter = %s;\n", (invert_filter) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* allocate message set */
+    err = apicli_msg_set_alloc(byte_pool, BCMOLT_OBJ_ID_EPON_PATH_1G_DS, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    bcmcli_log("bcmolt_msg_set_alloc(BCMOLT_OBJ_ID_EPON_PATH_1G_DS, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, epon_path_1g_ds, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, epon_path_1g_ds, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "filter.default_fec_state");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_fec_en_state val;
+        val = (bcmolt_epon_fec_en_state) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_path_1g_ds, default_fec_state, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_path_1g_ds, default_fec_state, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_1G_DS, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_PATH_1G_DS_CFG_ID_DEFAULT_FEC_STATE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "default_fec_state");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_path_1g_ds, default_fec_state);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_path_1g_ds, default_fec_state);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.raman_mode");
+    if (cli_parm != NULL)
+    {
+        bcmolt_raman_mitigation_mode val;
+        val = (bcmolt_raman_mitigation_mode) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_path_1g_ds, raman_mode, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_path_1g_ds, raman_mode, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_1G_DS, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_PATH_1G_DS_CFG_ID_RAMAN_MODE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "raman_mode");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_path_1g_ds, raman_mode);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_path_1g_ds, raman_mode);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.turbo_2g_mode");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_1g_turbo_mode val;
+        val = (bcmolt_epon_1g_turbo_mode) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_path_1g_ds, turbo_2g_mode, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_path_1g_ds, turbo_2g_mode, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_1G_DS, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_PATH_1G_DS_CFG_ID_TURBO_2G_MODE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "turbo_2g_mode");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_path_1g_ds, turbo_2g_mode);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_path_1g_ds, turbo_2g_mode);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.prbs_generator.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_prbs_generator_config val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_generator.polynom");
+        if (cli_parm != NULL)
+        {
+            val.polynom = (bcmolt_prbs_polynomial) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_generator.polynom is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_generator.error_insert");
+        if (cli_parm != NULL)
+        {
+            val.error_insert = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_generator.error_insert is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_generator.invert");
+        if (cli_parm != NULL)
+        {
+            val.invert = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_generator.invert is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_generator.control");
+        if (cli_parm != NULL)
+        {
+            val.control = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_generator.control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_path_1g_ds, prbs_generator, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_prbs_generator_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_1G_DS, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_PATH_1G_DS_CFG_ID_PRBS_GENERATOR, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_path_1g_ds, prbs_generator, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "prbs_generator");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_path_1g_ds, prbs_generator);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_path_1g_ds, prbs_generator);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_path_1g_ds, default_fec_state) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_path_1g_ds, raman_mode) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_path_1g_ds, turbo_2g_mode) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_path_1g_ds, prbs_generator))
+    {
+        BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_path_1g_ds, all_properties);
+        bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_path_1g_ds, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);
+    bcmcli_log("bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_path_1g_ds_stat_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_path_1g_ds_stat stat;       /**< declare main API struct */
+    bcmolt_epon_path_1g_ds_key key = { };   /**< declare key */
+    bcmos_bool clear_on_read;               /**< declare 'clear on read' flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_path_1g_ds_stat stat;\n");
+    bcmcli_log("bcmolt_epon_path_1g_ds_key key = {  };\n");
+    bcmcli_log("bcmos_bool clear_on_read;\n");
+    apicli_print_start(session, "bcmolt_stat_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_1G_DS, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_PATH_1G_DS_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+
+    /* set stat flags from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "clear");
+    if (cli_parm != NULL)
+    {
+        clear_on_read = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "clear is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("clear_on_read = %s;\n", (clear_on_read) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* init the API struct */
+    BCMOLT_STAT_INIT(&stat, epon_path_1g_ds, key);
+    bcmcli_log("BCMOLT_STAT_INIT(&stat, epon_path_1g_ds, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "bytes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_ds, bytes);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_ds, bytes);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_ds, frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_ds, frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_64");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_ds, frames_64);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_ds, frames_64);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_65_127");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_ds, frames_65_127);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_ds, frames_65_127);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_128_255");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_ds, frames_128_255);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_ds, frames_128_255);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_256_511");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_ds, frames_256_511);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_ds, frames_256_511);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_512_1023");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_ds, frames_512_1023);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_ds, frames_512_1023);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_1024_1518");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_ds, frames_1024_1518);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_ds, frames_1024_1518);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_1519_2047");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_ds, frames_1519_2047);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_ds, frames_1519_2047);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_2048_4095");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_ds, frames_2048_4095);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_ds, frames_2048_4095);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_4096_9216");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_ds, frames_4096_9216);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_ds, frames_4096_9216);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_9217_16383");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_ds, frames_9217_16383);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_ds, frames_9217_16383);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "broadcast_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_ds, broadcast_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_ds, broadcast_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "data_bytes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_ds, data_bytes);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_ds, data_bytes);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "multicast_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_ds, multicast_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_ds, multicast_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "unicast_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_ds, unicast_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_ds, unicast_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "oam_bytes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_ds, oam_bytes);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_ds, oam_bytes);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "oam_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_ds, oam_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_ds, oam_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "gate_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_ds, gate_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_ds, gate_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mpcp_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_ds, mpcp_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_ds, mpcp_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "abort_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_ds, abort_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_ds, abort_frames);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_ds, bytes) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_ds, frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_ds, frames_64) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_ds, frames_65_127) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_ds, frames_128_255) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_ds, frames_256_511) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_ds, frames_512_1023) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_ds, frames_1024_1518) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_ds, frames_1519_2047) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_ds, frames_2048_4095) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_ds, frames_4096_9216) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_ds, frames_9217_16383) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_ds, broadcast_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_ds, data_bytes) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_ds, multicast_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_ds, unicast_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_ds, oam_bytes) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_ds, oam_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_ds, gate_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_ds, mpcp_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_ds, abort_frames))
+    {
+        BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_ds, all_properties);
+        bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_ds, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_stat_get(device_id, &stat.hdr, clear_on_read);
+    bcmcli_log("bcmolt_stat_get(device_id, &stat.hdr, clear_on_read);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &stat.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, stat.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_path_1g_ds_stat_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_path_1g_ds_stat_cfg stat_cfg;   /**< declare main API struct */
+    bcmolt_epon_path_1g_ds_key key = { };       /**< declare key */
+    bcmolt_epon_path_1g_ds_stat_id stat_id;     /**< declare stat ID */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_path_1g_ds_stat_cfg stat_cfg;\n");
+    bcmcli_log("bcmolt_epon_path_1g_ds_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_stat_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_1G_DS, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_PATH_1G_DS_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+
+    /* set stat ID from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "sub");
+    if (cli_parm != NULL)
+    {
+        stat_id = (bcmolt_epon_path_1g_ds_stat_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    /* init the API struct */
+    switch (stat_id)
+    {
+        case BCMOLT_EPON_PATH_1G_DS_STAT_ID_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, bytes, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_64:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, frames_64, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, frames_64, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_65_127:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, frames_65_127, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, frames_65_127, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_128_255:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, frames_128_255, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, frames_128_255, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_256_511:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, frames_256_511, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, frames_256_511, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_512_1023:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, frames_512_1023, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, frames_512_1023, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_1024_1518:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, frames_1024_1518, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, frames_1024_1518, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_1519_2047:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, frames_1519_2047, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, frames_1519_2047, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_2048_4095:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, frames_2048_4095, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, frames_2048_4095, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_4096_9216:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, frames_4096_9216, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, frames_4096_9216, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_9217_16383:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, frames_9217_16383, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, frames_9217_16383, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_DS_STAT_ID_BROADCAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, broadcast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, broadcast_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_DS_STAT_ID_DATA_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, data_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, data_bytes, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_DS_STAT_ID_MULTICAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, multicast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, multicast_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_DS_STAT_ID_UNICAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, unicast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, unicast_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_DS_STAT_ID_OAM_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, oam_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, oam_bytes, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_DS_STAT_ID_OAM_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, oam_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, oam_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_DS_STAT_ID_GATE_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, gate_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, gate_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_DS_STAT_ID_MPCP_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, mpcp_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, mpcp_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_DS_STAT_ID_ABORT_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, abort_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, abort_frames, key);\n");
+            break;
+        default:
+            apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+            return BCM_ERR_RANGE;
+    }
+
+    /* call API */
+    err = bcmolt_stat_cfg_get(device_id, &stat_cfg.hdr);
+    bcmcli_log("bcmolt_stat_cfg_get(device_id, &stat_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &stat_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, stat_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_path_1g_ds_stat_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_path_1g_ds_stat_cfg stat_cfg;   /**< declare main API struct */
+    bcmolt_epon_path_1g_ds_key key = { };       /**< declare key */
+    bcmolt_epon_path_1g_ds_stat_id stat_id;     /**< declare stat ID */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_path_1g_ds_stat_cfg stat_cfg;\n");
+    bcmcli_log("bcmolt_epon_path_1g_ds_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_stat_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_1G_DS, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_PATH_1G_DS_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+
+    /* set stat ID from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "sub");
+    if (cli_parm != NULL)
+    {
+        stat_id = (bcmolt_epon_path_1g_ds_stat_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    /* init the API struct */
+    switch (stat_id)
+    {
+        case BCMOLT_EPON_PATH_1G_DS_STAT_ID_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, bytes, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_64:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, frames_64, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, frames_64, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_65_127:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, frames_65_127, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, frames_65_127, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_128_255:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, frames_128_255, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, frames_128_255, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_256_511:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, frames_256_511, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, frames_256_511, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_512_1023:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, frames_512_1023, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, frames_512_1023, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_1024_1518:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, frames_1024_1518, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, frames_1024_1518, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_1519_2047:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, frames_1519_2047, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, frames_1519_2047, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_2048_4095:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, frames_2048_4095, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, frames_2048_4095, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_4096_9216:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, frames_4096_9216, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, frames_4096_9216, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_9217_16383:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, frames_9217_16383, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, frames_9217_16383, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_DS_STAT_ID_BROADCAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, broadcast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, broadcast_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_DS_STAT_ID_DATA_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, data_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, data_bytes, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_DS_STAT_ID_MULTICAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, multicast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, multicast_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_DS_STAT_ID_UNICAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, unicast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, unicast_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_DS_STAT_ID_OAM_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, oam_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, oam_bytes, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_DS_STAT_ID_OAM_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, oam_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, oam_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_DS_STAT_ID_GATE_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, gate_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, gate_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_DS_STAT_ID_MPCP_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, mpcp_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, mpcp_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_DS_STAT_ID_ABORT_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, abort_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_ds, abort_frames, key);\n");
+            break;
+        default:
+            apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+            return BCM_ERR_RANGE;
+    }
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_stat_alarm_config val = { };
+        cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.trigger.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.type");
+            if (cli_parm != NULL)
+            {
+                val.trigger.type = (bcmolt_stat_condition_type) cli_parm->value.enum_val;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.type is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            switch (val.trigger.type)
+            {
+                case BCMOLT_STAT_CONDITION_TYPE_RATE_THRESHOLD:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.rising");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_threshold.rising = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.rising is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.falling");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_threshold.falling = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.falling is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_RATE_RANGE:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.upper");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_range.upper = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.upper is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.lower");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_range.lower = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.lower is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_VALUE_THRESHOLD:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.limit");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.value_threshold.limit = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.limit is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_NONE:
+                    break;
+                default:
+                    apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+                    return BCM_ERR_RANGE;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.soak.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "cfg.soak.active_soak_time");
+            if (cli_parm != NULL)
+            {
+                val.soak.active_soak_time = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak.active_soak_time is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "cfg.soak.clear_soak_time");
+            if (cli_parm != NULL)
+            {
+                val.soak.clear_soak_time = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak.clear_soak_time is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_STAT_CFG_PROP_SET(&stat_cfg, epon_path_1g_ds, cfg, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_stat_alarm_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_1G_DS, BCMOLT_MGT_GROUP_STAT_CFG, 0, BCMOLT_EPON_PATH_1G_DS_STAT_CFG_ID_CFG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_STAT_CFG_PROP_SET(&stat_cfg, epon_path_1g_ds, cfg, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_stat_cfg_set(device_id, &stat_cfg.hdr);
+    bcmcli_log("bcmolt_stat_cfg_set(device_id, &stat_cfg.hdr);\n");
+    apicli_print_complete(session, err, stat_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_path_1g_ds_auto_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_path_1g_ds_auto_cfg auto_cfg;   /**< declare main API struct */
+    bcmolt_epon_path_1g_ds_key key = { };       /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_path_1g_ds_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_epon_path_1g_ds_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_get");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, epon_path_1g_ds, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, epon_path_1g_ds, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_cleared");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_path_1g_ds, stat_alarm_cleared);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_path_1g_ds, stat_alarm_cleared);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_raised");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_path_1g_ds, stat_alarm_raised);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_path_1g_ds, stat_alarm_raised);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_path_1g_ds, stat_alarm_cleared) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_path_1g_ds, stat_alarm_raised))
+    {
+        BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_path_1g_ds, all_properties);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_path_1g_ds, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &auto_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_path_1g_ds_auto_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_path_1g_ds_auto_cfg auto_cfg;   /**< declare main API struct */
+    bcmolt_epon_path_1g_ds_key key = { };       /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_path_1g_ds_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_epon_path_1g_ds_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_set");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, epon_path_1g_ds, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, epon_path_1g_ds, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_cleared");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_path_1g_ds, stat_alarm_cleared, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_path_1g_ds, stat_alarm_cleared, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_1G_DS, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_PATH_1G_DS_AUTO_CFG_ID_STAT_ALARM_CLEARED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_raised");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_path_1g_ds, stat_alarm_raised, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_path_1g_ds, stat_alarm_raised, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_1G_DS, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_PATH_1G_DS_AUTO_CFG_ID_STAT_ALARM_RAISED, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);\n");
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_path_1g_us_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_path_1g_us_cfg cfg;         /**< declare main API struct */
+    bcmolt_epon_path_1g_us_key key = { };   /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_path_1g_us_cfg cfg;\n");
+    bcmcli_log("bcmolt_epon_path_1g_us_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_1G_US, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_PATH_1G_US_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, epon_path_1g_us, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, epon_path_1g_us, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "default_fec_state");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_path_1g_us, default_fec_state);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_path_1g_us, default_fec_state);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "sync_time_tq");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_path_1g_us, sync_time_tq);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_path_1g_us, sync_time_tq);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "prbs_checker");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_path_1g_us, prbs_checker);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_path_1g_us, prbs_checker);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "prbs_status");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_path_1g_us, prbs_status);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_path_1g_us, prbs_status);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_CFG_PROP_IS_SET(&cfg, epon_path_1g_us, default_fec_state) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_path_1g_us, sync_time_tq) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_path_1g_us, prbs_checker) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_path_1g_us, prbs_status))
+    {
+        BCMOLT_CFG_PROP_GET(&cfg, epon_path_1g_us, all_properties);
+        bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_path_1g_us, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_get(device_id, &cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_path_1g_us_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_path_1g_us_cfg cfg;         /**< declare main API struct */
+    bcmolt_epon_path_1g_us_key key = { };   /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_path_1g_us_cfg cfg;\n");
+    bcmcli_log("bcmolt_epon_path_1g_us_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_1G_US, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_PATH_1G_US_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, epon_path_1g_us, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, epon_path_1g_us, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "default_fec_state");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_fec_en_state val;
+        val = (bcmolt_epon_fec_en_state) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_path_1g_us, default_fec_state, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_path_1g_us, default_fec_state, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_1G_US, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_PATH_1G_US_CFG_ID_DEFAULT_FEC_STATE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "sync_time_tq");
+    if (cli_parm != NULL)
+    {
+        bcmolt_time_quanta val;
+        val = (bcmolt_time_quanta) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_path_1g_us, sync_time_tq, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_path_1g_us, sync_time_tq, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_1G_US, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_PATH_1G_US_CFG_ID_SYNC_TIME_TQ, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "prbs_checker.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_prbs_checker_config val = { };
+        cli_parm = bcmcli_find_named_parm(session, "prbs_checker.polynom");
+        if (cli_parm != NULL)
+        {
+            val.polynom = (bcmolt_prbs_polynomial) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "prbs_checker.polynom is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "prbs_checker.mode");
+        if (cli_parm != NULL)
+        {
+            val.mode = (bcmolt_prbs_checker_mode) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "prbs_checker.mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "prbs_checker.data_invert");
+        if (cli_parm != NULL)
+        {
+            val.data_invert = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "prbs_checker.data_invert is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "prbs_checker.control");
+        if (cli_parm != NULL)
+        {
+            val.control = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "prbs_checker.control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_path_1g_us, prbs_checker, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_prbs_checker_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_1G_US, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_PATH_1G_US_CFG_ID_PRBS_CHECKER, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_path_1g_us, prbs_checker, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_set(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_set(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_path_1g_us_cfg_clear(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_path_1g_us_cfg cfg;         /**< declare main API struct */
+    bcmolt_epon_path_1g_us_key key = { };   /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_path_1g_us_cfg cfg;\n");
+    bcmcli_log("bcmolt_epon_path_1g_us_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_clear");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_1G_US, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_PATH_1G_US_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, epon_path_1g_us, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, epon_path_1g_us, key);\n");
+
+    /* call API */
+    err = bcmolt_cfg_clear(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_clear(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_path_1g_us_cfg_get_multi(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_path_1g_us_cfg cfg;         /**< declare main API struct */
+    bcmolt_epon_path_1g_us_key key = { };   /**< declare key */
+    bcmolt_msg_set *msg_set = NULL;         /**< declare message set */
+    uint32_t max_msgs;                      /**< declare max number of msgs to get */
+    bcmos_bool invert_filter;               /**< declare filter invert flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_path_1g_us_cfg cfg;\n");
+    bcmcli_log("bcmolt_epon_path_1g_us_key key = {  };\n");
+    bcmcli_log("bcmolt_msg_set* msg_set = NULL;\n");
+    bcmcli_log("uint32_t max_msgs;\n");
+    bcmcli_log("bcmos_bool invert_filter;\n");
+    apicli_print_start(session, "bcmolt_cfg_get_multi");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_1G_US, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_PATH_1G_US_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+
+    /* set max number of msgs from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "max_msgs");
+    if (cli_parm != NULL)
+    {
+        max_msgs = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "max_msgs is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("max_msgs = %d;\n", max_msgs);
+
+    /* set filter invert flag from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "filter_invert");
+    if (cli_parm != NULL)
+    {
+        invert_filter = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "filter_invert is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("invert_filter = %s;\n", (invert_filter) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* allocate message set */
+    err = apicli_msg_set_alloc(byte_pool, BCMOLT_OBJ_ID_EPON_PATH_1G_US, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    bcmcli_log("bcmolt_msg_set_alloc(BCMOLT_OBJ_ID_EPON_PATH_1G_US, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, epon_path_1g_us, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, epon_path_1g_us, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "filter.default_fec_state");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_fec_en_state val;
+        val = (bcmolt_epon_fec_en_state) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_path_1g_us, default_fec_state, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_path_1g_us, default_fec_state, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_1G_US, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_PATH_1G_US_CFG_ID_DEFAULT_FEC_STATE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "default_fec_state");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_path_1g_us, default_fec_state);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_path_1g_us, default_fec_state);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.sync_time_tq");
+    if (cli_parm != NULL)
+    {
+        bcmolt_time_quanta val;
+        val = (bcmolt_time_quanta) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_path_1g_us, sync_time_tq, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_path_1g_us, sync_time_tq, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_1G_US, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_PATH_1G_US_CFG_ID_SYNC_TIME_TQ, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "sync_time_tq");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_path_1g_us, sync_time_tq);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_path_1g_us, sync_time_tq);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.prbs_checker.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_prbs_checker_config val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_checker.polynom");
+        if (cli_parm != NULL)
+        {
+            val.polynom = (bcmolt_prbs_polynomial) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_checker.polynom is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_checker.mode");
+        if (cli_parm != NULL)
+        {
+            val.mode = (bcmolt_prbs_checker_mode) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_checker.mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_checker.data_invert");
+        if (cli_parm != NULL)
+        {
+            val.data_invert = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_checker.data_invert is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_checker.control");
+        if (cli_parm != NULL)
+        {
+            val.control = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_checker.control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_path_1g_us, prbs_checker, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_prbs_checker_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_1G_US, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_PATH_1G_US_CFG_ID_PRBS_CHECKER, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_path_1g_us, prbs_checker, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "prbs_checker");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_path_1g_us, prbs_checker);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_path_1g_us, prbs_checker);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.prbs_status.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_prbs_status val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_status.lock_state");
+        if (cli_parm != NULL)
+        {
+            val.lock_state = (bcmolt_prbs_lock_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_status.lock_state is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_status.error_counts");
+        if (cli_parm != NULL)
+        {
+            val.error_counts = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_status.error_counts is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_path_1g_us, prbs_status, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_prbs_status val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_1G_US, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_PATH_1G_US_CFG_ID_PRBS_STATUS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_path_1g_us, prbs_status, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "prbs_status");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_path_1g_us, prbs_status);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_path_1g_us, prbs_status);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_path_1g_us, default_fec_state) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_path_1g_us, sync_time_tq) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_path_1g_us, prbs_checker) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_path_1g_us, prbs_status))
+    {
+        BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_path_1g_us, all_properties);
+        bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_path_1g_us, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);
+    bcmcli_log("bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_path_1g_us_stat_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_path_1g_us_stat stat;       /**< declare main API struct */
+    bcmolt_epon_path_1g_us_key key = { };   /**< declare key */
+    bcmos_bool clear_on_read;               /**< declare 'clear on read' flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_path_1g_us_stat stat;\n");
+    bcmcli_log("bcmolt_epon_path_1g_us_key key = {  };\n");
+    bcmcli_log("bcmos_bool clear_on_read;\n");
+    apicli_print_start(session, "bcmolt_stat_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_1G_US, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_PATH_1G_US_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+
+    /* set stat flags from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "clear");
+    if (cli_parm != NULL)
+    {
+        clear_on_read = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "clear is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("clear_on_read = %s;\n", (clear_on_read) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* init the API struct */
+    BCMOLT_STAT_INIT(&stat, epon_path_1g_us, key);
+    bcmcli_log("BCMOLT_STAT_INIT(&stat, epon_path_1g_us, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "bytes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, bytes);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, bytes);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_64");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, frames_64);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, frames_64);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_65_127");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, frames_65_127);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, frames_65_127);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_128_255");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, frames_128_255);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, frames_128_255);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_256_511");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, frames_256_511);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, frames_256_511);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_512_1023");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, frames_512_1023);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, frames_512_1023);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_1024_1518");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, frames_1024_1518);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, frames_1024_1518);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_1519_2047");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, frames_1519_2047);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, frames_1519_2047);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_2048_4095");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, frames_2048_4095);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, frames_2048_4095);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_4096_9216");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, frames_4096_9216);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, frames_4096_9216);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frames_9217_16383");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, frames_9217_16383);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, frames_9217_16383);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "broadcast_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, broadcast_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, broadcast_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "data_bytes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, data_bytes);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, data_bytes);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "multicast_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, multicast_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, multicast_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "unicast_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, unicast_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, unicast_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mpcp_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, mpcp_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, mpcp_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "oam_bytes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, oam_bytes);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, oam_bytes);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "oam_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, oam_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, oam_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "report_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, report_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, report_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "abort_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, abort_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, abort_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "fcs_error");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, fcs_error);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, fcs_error);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "crc_8_error");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, crc_8_error);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, crc_8_error);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "out_of_slot");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, out_of_slot);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, out_of_slot);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "oversize_error");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, oversize_error);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, oversize_error);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "runt_error");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, runt_error);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, runt_error);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_us, bytes) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_us, frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_us, frames_64) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_us, frames_65_127) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_us, frames_128_255) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_us, frames_256_511) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_us, frames_512_1023) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_us, frames_1024_1518) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_us, frames_1519_2047) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_us, frames_2048_4095) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_us, frames_4096_9216) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_us, frames_9217_16383) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_us, broadcast_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_us, data_bytes) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_us, multicast_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_us, unicast_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_us, mpcp_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_us, oam_bytes) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_us, oam_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_us, report_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_us, abort_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_us, fcs_error) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_us, crc_8_error) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_us, out_of_slot) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_us, oversize_error) && !BCMOLT_STAT_PROP_IS_SET(&stat, epon_path_1g_us, runt_error))
+    {
+        BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, all_properties);
+        bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, epon_path_1g_us, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_stat_get(device_id, &stat.hdr, clear_on_read);
+    bcmcli_log("bcmolt_stat_get(device_id, &stat.hdr, clear_on_read);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &stat.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, stat.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_path_1g_us_stat_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_path_1g_us_stat_cfg stat_cfg;   /**< declare main API struct */
+    bcmolt_epon_path_1g_us_key key = { };       /**< declare key */
+    bcmolt_epon_path_1g_us_stat_id stat_id;     /**< declare stat ID */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_path_1g_us_stat_cfg stat_cfg;\n");
+    bcmcli_log("bcmolt_epon_path_1g_us_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_stat_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_1G_US, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_PATH_1G_US_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+
+    /* set stat ID from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "sub");
+    if (cli_parm != NULL)
+    {
+        stat_id = (bcmolt_epon_path_1g_us_stat_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    /* init the API struct */
+    switch (stat_id)
+    {
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, bytes, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_64:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, frames_64, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, frames_64, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_65_127:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, frames_65_127, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, frames_65_127, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_128_255:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, frames_128_255, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, frames_128_255, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_256_511:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, frames_256_511, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, frames_256_511, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_512_1023:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, frames_512_1023, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, frames_512_1023, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_1024_1518:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, frames_1024_1518, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, frames_1024_1518, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_1519_2047:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, frames_1519_2047, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, frames_1519_2047, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_2048_4095:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, frames_2048_4095, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, frames_2048_4095, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_4096_9216:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, frames_4096_9216, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, frames_4096_9216, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_9217_16383:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, frames_9217_16383, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, frames_9217_16383, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_BROADCAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, broadcast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, broadcast_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_DATA_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, data_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, data_bytes, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_MULTICAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, multicast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, multicast_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_UNICAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, unicast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, unicast_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_MPCP_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, mpcp_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, mpcp_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_OAM_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, oam_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, oam_bytes, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_OAM_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, oam_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, oam_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_REPORT_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, report_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, report_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_ABORT_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, abort_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, abort_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_FCS_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, fcs_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, fcs_error, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_CRC_8_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, crc_8_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, crc_8_error, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_OUT_OF_SLOT:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, out_of_slot, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, out_of_slot, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_OVERSIZE_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, oversize_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, oversize_error, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_RUNT_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, runt_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, runt_error, key);\n");
+            break;
+        default:
+            apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+            return BCM_ERR_RANGE;
+    }
+
+    /* call API */
+    err = bcmolt_stat_cfg_get(device_id, &stat_cfg.hdr);
+    bcmcli_log("bcmolt_stat_cfg_get(device_id, &stat_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &stat_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, stat_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_path_1g_us_stat_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_path_1g_us_stat_cfg stat_cfg;   /**< declare main API struct */
+    bcmolt_epon_path_1g_us_key key = { };       /**< declare key */
+    bcmolt_epon_path_1g_us_stat_id stat_id;     /**< declare stat ID */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_path_1g_us_stat_cfg stat_cfg;\n");
+    bcmcli_log("bcmolt_epon_path_1g_us_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_stat_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_1G_US, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_PATH_1G_US_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+
+    /* set stat ID from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "sub");
+    if (cli_parm != NULL)
+    {
+        stat_id = (bcmolt_epon_path_1g_us_stat_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    /* init the API struct */
+    switch (stat_id)
+    {
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, bytes, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_64:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, frames_64, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, frames_64, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_65_127:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, frames_65_127, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, frames_65_127, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_128_255:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, frames_128_255, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, frames_128_255, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_256_511:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, frames_256_511, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, frames_256_511, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_512_1023:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, frames_512_1023, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, frames_512_1023, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_1024_1518:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, frames_1024_1518, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, frames_1024_1518, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_1519_2047:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, frames_1519_2047, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, frames_1519_2047, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_2048_4095:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, frames_2048_4095, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, frames_2048_4095, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_4096_9216:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, frames_4096_9216, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, frames_4096_9216, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_9217_16383:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, frames_9217_16383, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, frames_9217_16383, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_BROADCAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, broadcast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, broadcast_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_DATA_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, data_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, data_bytes, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_MULTICAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, multicast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, multicast_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_UNICAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, unicast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, unicast_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_MPCP_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, mpcp_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, mpcp_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_OAM_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, oam_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, oam_bytes, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_OAM_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, oam_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, oam_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_REPORT_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, report_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, report_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_ABORT_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, abort_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, abort_frames, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_FCS_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, fcs_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, fcs_error, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_CRC_8_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, crc_8_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, crc_8_error, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_OUT_OF_SLOT:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, out_of_slot, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, out_of_slot, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_OVERSIZE_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, oversize_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, oversize_error, key);\n");
+            break;
+        case BCMOLT_EPON_PATH_1G_US_STAT_ID_RUNT_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, runt_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, epon_path_1g_us, runt_error, key);\n");
+            break;
+        default:
+            apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+            return BCM_ERR_RANGE;
+    }
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_stat_alarm_config val = { };
+        cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.trigger.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.type");
+            if (cli_parm != NULL)
+            {
+                val.trigger.type = (bcmolt_stat_condition_type) cli_parm->value.enum_val;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.type is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            switch (val.trigger.type)
+            {
+                case BCMOLT_STAT_CONDITION_TYPE_RATE_THRESHOLD:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.rising");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_threshold.rising = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.rising is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.falling");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_threshold.falling = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.falling is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_RATE_RANGE:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.upper");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_range.upper = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.upper is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.lower");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_range.lower = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.lower is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_VALUE_THRESHOLD:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.limit");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.value_threshold.limit = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.limit is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_NONE:
+                    break;
+                default:
+                    apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+                    return BCM_ERR_RANGE;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.soak.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "cfg.soak.active_soak_time");
+            if (cli_parm != NULL)
+            {
+                val.soak.active_soak_time = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak.active_soak_time is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "cfg.soak.clear_soak_time");
+            if (cli_parm != NULL)
+            {
+                val.soak.clear_soak_time = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak.clear_soak_time is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_STAT_CFG_PROP_SET(&stat_cfg, epon_path_1g_us, cfg, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_stat_alarm_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_1G_US, BCMOLT_MGT_GROUP_STAT_CFG, 0, BCMOLT_EPON_PATH_1G_US_STAT_CFG_ID_CFG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_STAT_CFG_PROP_SET(&stat_cfg, epon_path_1g_us, cfg, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_stat_cfg_set(device_id, &stat_cfg.hdr);
+    bcmcli_log("bcmolt_stat_cfg_set(device_id, &stat_cfg.hdr);\n");
+    apicli_print_complete(session, err, stat_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_path_1g_us_auto_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_path_1g_us_auto_cfg auto_cfg;   /**< declare main API struct */
+    bcmolt_epon_path_1g_us_key key = { };       /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_path_1g_us_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_epon_path_1g_us_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_get");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, epon_path_1g_us, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, epon_path_1g_us, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_cleared");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_path_1g_us, stat_alarm_cleared);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_path_1g_us, stat_alarm_cleared);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_raised");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_path_1g_us, stat_alarm_raised);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_path_1g_us, stat_alarm_raised);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_path_1g_us, stat_alarm_cleared) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, epon_path_1g_us, stat_alarm_raised))
+    {
+        BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_path_1g_us, all_properties);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, epon_path_1g_us, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &auto_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_path_1g_us_auto_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_path_1g_us_auto_cfg auto_cfg;   /**< declare main API struct */
+    bcmolt_epon_path_1g_us_key key = { };       /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_path_1g_us_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_epon_path_1g_us_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_set");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, epon_path_1g_us, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, epon_path_1g_us, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_cleared");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_path_1g_us, stat_alarm_cleared, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_path_1g_us, stat_alarm_cleared, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_1G_US, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_PATH_1G_US_AUTO_CFG_ID_STAT_ALARM_CLEARED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_raised");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_path_1g_us, stat_alarm_raised, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, epon_path_1g_us, stat_alarm_raised, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_PATH_1G_US, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_EPON_PATH_1G_US_AUTO_CFG_ID_STAT_ALARM_RAISED, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);\n");
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_rp_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_rp_cfg cfg;         /**< declare main API struct */
+    bcmolt_epon_rp_key key = { };   /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_rp_cfg cfg;\n");
+    bcmcli_log("bcmolt_epon_rp_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_RP, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_RP_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "link_rate");
+    if (cli_parm != NULL)
+    {
+        key.link_rate = (bcmolt_epon_link_rate) cli_parm->value.enum_val;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "link_rate is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.link_rate = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_RP, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_RP_KEY_ID_LINK_RATE, &key.link_rate);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, epon_rp, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, epon_rp, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "base_llid");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_rp, base_llid);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_rp, base_llid);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mpcp_disc_en");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_rp, mpcp_disc_en);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_rp, mpcp_disc_en);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mpcp_disc_gnt_len_tq");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_rp, mpcp_disc_gnt_len_tq);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_rp, mpcp_disc_gnt_len_tq);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mpcp_report_timeout");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_rp, mpcp_report_timeout);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_rp, mpcp_report_timeout);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "max_mpcp_reg_per_disc_window");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_rp, max_mpcp_reg_per_disc_window);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_rp, max_mpcp_reg_per_disc_window);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "max_links");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_rp, max_links);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_rp, max_links);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "default_upstream_bandwidth");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_rp, default_upstream_bandwidth);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_rp, default_upstream_bandwidth);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rate_of_refraction");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, epon_rp, rate_of_refraction);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_rp, rate_of_refraction);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_CFG_PROP_IS_SET(&cfg, epon_rp, base_llid) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_rp, mpcp_disc_en) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_rp, mpcp_disc_gnt_len_tq) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_rp, mpcp_report_timeout) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_rp, max_mpcp_reg_per_disc_window) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_rp, max_links) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_rp, default_upstream_bandwidth) && !BCMOLT_CFG_PROP_IS_SET(&cfg, epon_rp, rate_of_refraction))
+    {
+        BCMOLT_CFG_PROP_GET(&cfg, epon_rp, all_properties);
+        bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, epon_rp, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_get(device_id, &cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_rp_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_rp_cfg cfg;         /**< declare main API struct */
+    bcmolt_epon_rp_key key = { };   /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_rp_cfg cfg;\n");
+    bcmcli_log("bcmolt_epon_rp_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_RP, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_RP_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "link_rate");
+    if (cli_parm != NULL)
+    {
+        key.link_rate = (bcmolt_epon_link_rate) cli_parm->value.enum_val;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "link_rate is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.link_rate = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_RP, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_RP_KEY_ID_LINK_RATE, &key.link_rate);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, epon_rp, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, epon_rp, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "base_llid");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_llid val;
+        val = (bcmolt_epon_llid) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_rp, base_llid, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_rp, base_llid, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_RP, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_RP_CFG_ID_BASE_LLID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mpcp_disc_en");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_rp, mpcp_disc_en, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_rp, mpcp_disc_en, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_RP, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_RP_CFG_ID_MPCP_DISC_EN, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mpcp_disc_gnt_len_tq");
+    if (cli_parm != NULL)
+    {
+        bcmolt_time_quanta val;
+        val = (bcmolt_time_quanta) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_rp, mpcp_disc_gnt_len_tq, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_rp, mpcp_disc_gnt_len_tq, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_RP, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_RP_CFG_ID_MPCP_DISC_GNT_LEN_TQ, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mpcp_report_timeout");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_rp, mpcp_report_timeout, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_rp, mpcp_report_timeout, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_RP, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_RP_CFG_ID_MPCP_REPORT_TIMEOUT, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "max_mpcp_reg_per_disc_window");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_rp, max_mpcp_reg_per_disc_window, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_rp, max_mpcp_reg_per_disc_window, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_RP, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_RP_CFG_ID_MAX_MPCP_REG_PER_DISC_WINDOW, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "max_links");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_rp, max_links, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_rp, max_links, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_RP, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_RP_CFG_ID_MAX_LINKS, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "default_upstream_bandwidth.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_upstream_bandwidth_distribution val = { };
+        cli_parm = bcmcli_find_named_parm(session, "default_upstream_bandwidth.polling_interval_us");
+        if (cli_parm != NULL)
+        {
+            val.polling_interval_us = (bcmolt_polling_interval) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "default_upstream_bandwidth.polling_interval_us is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "default_upstream_bandwidth.grant_threshold_tq");
+        if (cli_parm != NULL)
+        {
+            val.grant_threshold_tq = (bcmolt_time_quanta) cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "default_upstream_bandwidth.grant_threshold_tq is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "default_upstream_bandwidth.min_schedulershaper.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "default_upstream_bandwidth.min_schedulershaper.bandwidth_Kbps");
+            if (cli_parm != NULL)
+            {
+                val.min_schedulershaper.bandwidth_Kbps = (bcmolt_bandwidth_Kbps) cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "default_upstream_bandwidth.min_schedulershaper.bandwidth_Kbps is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "default_upstream_bandwidth.min_schedulershaper.max_burst_size_tq");
+            if (cli_parm != NULL)
+            {
+                val.min_schedulershaper.max_burst_size_tq = (bcmolt_time_quanta) cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "default_upstream_bandwidth.min_schedulershaper.max_burst_size_tq is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "default_upstream_bandwidth.min_schedulershaper.priority");
+            if (cli_parm != NULL)
+            {
+                val.min_schedulershaper.priority = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "default_upstream_bandwidth.min_schedulershaper.priority is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "default_upstream_bandwidth.min_schedulershaper.weight_tq");
+            if (cli_parm != NULL)
+            {
+                val.min_schedulershaper.weight_tq = (bcmolt_time_quanta) cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "default_upstream_bandwidth.min_schedulershaper.weight_tq is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "default_upstream_bandwidth.min_schedulershaper is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "default_upstream_bandwidth.max_schedulershaper.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "default_upstream_bandwidth.max_schedulershaper.bandwidth_Kbps");
+            if (cli_parm != NULL)
+            {
+                val.max_schedulershaper.bandwidth_Kbps = (bcmolt_bandwidth_Kbps) cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "default_upstream_bandwidth.max_schedulershaper.bandwidth_Kbps is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "default_upstream_bandwidth.max_schedulershaper.max_burst_size_tq");
+            if (cli_parm != NULL)
+            {
+                val.max_schedulershaper.max_burst_size_tq = (bcmolt_time_quanta) cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "default_upstream_bandwidth.max_schedulershaper.max_burst_size_tq is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "default_upstream_bandwidth.max_schedulershaper.priority");
+            if (cli_parm != NULL)
+            {
+                val.max_schedulershaper.priority = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "default_upstream_bandwidth.max_schedulershaper.priority is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "default_upstream_bandwidth.max_schedulershaper.weight_tq");
+            if (cli_parm != NULL)
+            {
+                val.max_schedulershaper.weight_tq = (bcmolt_time_quanta) cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "default_upstream_bandwidth.max_schedulershaper.weight_tq is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "default_upstream_bandwidth.max_schedulershaper is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "default_upstream_bandwidth.tdm_grant_size_tq");
+        if (cli_parm != NULL)
+        {
+            val.tdm_grant_size_tq = (bcmolt_time_quanta) cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "default_upstream_bandwidth.tdm_grant_size_tq is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "default_upstream_bandwidth.tdm_grant_interval_us");
+        if (cli_parm != NULL)
+        {
+            val.tdm_grant_interval_us = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "default_upstream_bandwidth.tdm_grant_interval_us is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_rp, default_upstream_bandwidth, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_upstream_bandwidth_distribution val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_RP, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_RP_CFG_ID_DEFAULT_UPSTREAM_BANDWIDTH, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_rp, default_upstream_bandwidth, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rate_of_refraction");
+    if (cli_parm != NULL)
+    {
+        double val;
+        val = cli_parm->value.d;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_rp, rate_of_refraction, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_rp, rate_of_refraction, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_RP, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_RP_CFG_ID_RATE_OF_REFRACTION, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_set(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_set(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_rp_cfg_clear(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_rp_cfg cfg;         /**< declare main API struct */
+    bcmolt_epon_rp_key key = { };   /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_rp_cfg cfg;\n");
+    bcmcli_log("bcmolt_epon_rp_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_clear");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_RP, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_RP_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "link_rate");
+    if (cli_parm != NULL)
+    {
+        key.link_rate = (bcmolt_epon_link_rate) cli_parm->value.enum_val;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "link_rate is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.link_rate = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_RP, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_RP_KEY_ID_LINK_RATE, &key.link_rate);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, epon_rp, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, epon_rp, key);\n");
+
+    /* call API */
+    err = bcmolt_cfg_clear(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_clear(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_epon_rp_cfg_get_multi(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_epon_rp_cfg cfg;         /**< declare main API struct */
+    bcmolt_epon_rp_key key = { };   /**< declare key */
+    bcmolt_msg_set *msg_set = NULL; /**< declare message set */
+    uint32_t max_msgs;              /**< declare max number of msgs to get */
+    bcmos_bool invert_filter;       /**< declare filter invert flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_epon_rp_cfg cfg;\n");
+    bcmcli_log("bcmolt_epon_rp_key key = {  };\n");
+    bcmcli_log("bcmolt_msg_set* msg_set = NULL;\n");
+    bcmcli_log("uint32_t max_msgs;\n");
+    bcmcli_log("bcmos_bool invert_filter;\n");
+    apicli_print_start(session, "bcmolt_cfg_get_multi");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "epon_ni");
+    if (cli_parm != NULL)
+    {
+        key.epon_ni = (bcmolt_epon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "epon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.epon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_RP, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_RP_KEY_ID_EPON_NI, &key.epon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "link_rate");
+    if (cli_parm != NULL)
+    {
+        key.link_rate = (bcmolt_epon_link_rate) cli_parm->value.enum_val;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "link_rate is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.link_rate = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_RP, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_EPON_RP_KEY_ID_LINK_RATE, &key.link_rate);
+    bcmcli_log(";\n");
+
+    /* set max number of msgs from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "max_msgs");
+    if (cli_parm != NULL)
+    {
+        max_msgs = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "max_msgs is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("max_msgs = %d;\n", max_msgs);
+
+    /* set filter invert flag from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "filter_invert");
+    if (cli_parm != NULL)
+    {
+        invert_filter = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "filter_invert is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("invert_filter = %s;\n", (invert_filter) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* allocate message set */
+    err = apicli_msg_set_alloc(byte_pool, BCMOLT_OBJ_ID_EPON_RP, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    bcmcli_log("bcmolt_msg_set_alloc(BCMOLT_OBJ_ID_EPON_RP, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, epon_rp, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, epon_rp, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "filter.base_llid");
+    if (cli_parm != NULL)
+    {
+        bcmolt_epon_llid val;
+        val = (bcmolt_epon_llid) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_rp, base_llid, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_rp, base_llid, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_RP, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_RP_CFG_ID_BASE_LLID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "base_llid");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_rp, base_llid);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_rp, base_llid);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.mpcp_disc_en");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_rp, mpcp_disc_en, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_rp, mpcp_disc_en, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_RP, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_RP_CFG_ID_MPCP_DISC_EN, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mpcp_disc_en");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_rp, mpcp_disc_en);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_rp, mpcp_disc_en);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.mpcp_disc_gnt_len_tq");
+    if (cli_parm != NULL)
+    {
+        bcmolt_time_quanta val;
+        val = (bcmolt_time_quanta) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_rp, mpcp_disc_gnt_len_tq, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_rp, mpcp_disc_gnt_len_tq, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_RP, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_RP_CFG_ID_MPCP_DISC_GNT_LEN_TQ, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mpcp_disc_gnt_len_tq");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_rp, mpcp_disc_gnt_len_tq);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_rp, mpcp_disc_gnt_len_tq);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.mpcp_report_timeout");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_rp, mpcp_report_timeout, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_rp, mpcp_report_timeout, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_RP, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_RP_CFG_ID_MPCP_REPORT_TIMEOUT, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mpcp_report_timeout");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_rp, mpcp_report_timeout);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_rp, mpcp_report_timeout);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.max_mpcp_reg_per_disc_window");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_rp, max_mpcp_reg_per_disc_window, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_rp, max_mpcp_reg_per_disc_window, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_RP, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_RP_CFG_ID_MAX_MPCP_REG_PER_DISC_WINDOW, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "max_mpcp_reg_per_disc_window");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_rp, max_mpcp_reg_per_disc_window);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_rp, max_mpcp_reg_per_disc_window);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.max_links");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_rp, max_links, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_rp, max_links, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_RP, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_RP_CFG_ID_MAX_LINKS, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "max_links");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_rp, max_links);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_rp, max_links);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.default_upstream_bandwidth.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_upstream_bandwidth_distribution val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.default_upstream_bandwidth.polling_interval_us");
+        if (cli_parm != NULL)
+        {
+            val.polling_interval_us = (bcmolt_polling_interval) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.default_upstream_bandwidth.polling_interval_us is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.default_upstream_bandwidth.grant_threshold_tq");
+        if (cli_parm != NULL)
+        {
+            val.grant_threshold_tq = (bcmolt_time_quanta) cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.default_upstream_bandwidth.grant_threshold_tq is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "filter.default_upstream_bandwidth.min_schedulershaper.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "filter.default_upstream_bandwidth.min_schedulershaper.bandwidth_Kbps");
+            if (cli_parm != NULL)
+            {
+                val.min_schedulershaper.bandwidth_Kbps = (bcmolt_bandwidth_Kbps) cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.default_upstream_bandwidth.min_schedulershaper.bandwidth_Kbps is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.default_upstream_bandwidth.min_schedulershaper.max_burst_size_tq");
+            if (cli_parm != NULL)
+            {
+                val.min_schedulershaper.max_burst_size_tq = (bcmolt_time_quanta) cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.default_upstream_bandwidth.min_schedulershaper.max_burst_size_tq is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.default_upstream_bandwidth.min_schedulershaper.priority");
+            if (cli_parm != NULL)
+            {
+                val.min_schedulershaper.priority = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.default_upstream_bandwidth.min_schedulershaper.priority is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.default_upstream_bandwidth.min_schedulershaper.weight_tq");
+            if (cli_parm != NULL)
+            {
+                val.min_schedulershaper.weight_tq = (bcmolt_time_quanta) cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.default_upstream_bandwidth.min_schedulershaper.weight_tq is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.default_upstream_bandwidth.min_schedulershaper is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "filter.default_upstream_bandwidth.max_schedulershaper.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "filter.default_upstream_bandwidth.max_schedulershaper.bandwidth_Kbps");
+            if (cli_parm != NULL)
+            {
+                val.max_schedulershaper.bandwidth_Kbps = (bcmolt_bandwidth_Kbps) cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.default_upstream_bandwidth.max_schedulershaper.bandwidth_Kbps is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.default_upstream_bandwidth.max_schedulershaper.max_burst_size_tq");
+            if (cli_parm != NULL)
+            {
+                val.max_schedulershaper.max_burst_size_tq = (bcmolt_time_quanta) cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.default_upstream_bandwidth.max_schedulershaper.max_burst_size_tq is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.default_upstream_bandwidth.max_schedulershaper.priority");
+            if (cli_parm != NULL)
+            {
+                val.max_schedulershaper.priority = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.default_upstream_bandwidth.max_schedulershaper.priority is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.default_upstream_bandwidth.max_schedulershaper.weight_tq");
+            if (cli_parm != NULL)
+            {
+                val.max_schedulershaper.weight_tq = (bcmolt_time_quanta) cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.default_upstream_bandwidth.max_schedulershaper.weight_tq is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.default_upstream_bandwidth.max_schedulershaper is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.default_upstream_bandwidth.tdm_grant_size_tq");
+        if (cli_parm != NULL)
+        {
+            val.tdm_grant_size_tq = (bcmolt_time_quanta) cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.default_upstream_bandwidth.tdm_grant_size_tq is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.default_upstream_bandwidth.tdm_grant_interval_us");
+        if (cli_parm != NULL)
+        {
+            val.tdm_grant_interval_us = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.default_upstream_bandwidth.tdm_grant_interval_us is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, epon_rp, default_upstream_bandwidth, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_upstream_bandwidth_distribution val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_RP, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_RP_CFG_ID_DEFAULT_UPSTREAM_BANDWIDTH, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_rp, default_upstream_bandwidth, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "default_upstream_bandwidth");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_rp, default_upstream_bandwidth);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_rp, default_upstream_bandwidth);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.rate_of_refraction");
+    if (cli_parm != NULL)
+    {
+        double val;
+        val = cli_parm->value.d;
+        BCMOLT_CFG_PROP_SET(&cfg, epon_rp, rate_of_refraction, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, epon_rp, rate_of_refraction, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_EPON_RP, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_EPON_RP_CFG_ID_RATE_OF_REFRACTION, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rate_of_refraction");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_rp, rate_of_refraction);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_rp, rate_of_refraction);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_rp, base_llid) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_rp, mpcp_disc_en) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_rp, mpcp_disc_gnt_len_tq) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_rp, mpcp_report_timeout) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_rp, max_mpcp_reg_per_disc_window) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_rp, max_links) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_rp, default_upstream_bandwidth) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, epon_rp, rate_of_refraction))
+    {
+        BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_rp, all_properties);
+        bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_rp, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);
+    bcmcli_log("bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpio_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpio_cfg cfg;        /**< declare main API struct */
+    bcmolt_gpio_key key = { };  /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpio_cfg cfg;\n");
+    bcmcli_log("bcmolt_gpio_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "gpio_id");
+    if (cli_parm != NULL)
+    {
+        key.gpio_id = (bcmolt_gpio_pin) cli_parm->value.enum_val;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "gpio_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.gpio_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPIO, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPIO_KEY_ID_GPIO_ID, &key.gpio_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, gpio, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, gpio, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "direction");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpio, direction);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpio, direction);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "value");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpio, value);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpio, value);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_CFG_PROP_IS_SET(&cfg, gpio, direction) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpio, value))
+    {
+        BCMOLT_CFG_PROP_GET(&cfg, gpio, all_properties);
+        bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpio, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_get(device_id, &cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpio_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpio_cfg cfg;        /**< declare main API struct */
+    bcmolt_gpio_key key = { };  /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpio_cfg cfg;\n");
+    bcmcli_log("bcmolt_gpio_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "gpio_id");
+    if (cli_parm != NULL)
+    {
+        key.gpio_id = (bcmolt_gpio_pin) cli_parm->value.enum_val;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "gpio_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.gpio_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPIO, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPIO_KEY_ID_GPIO_ID, &key.gpio_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, gpio, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, gpio, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "direction");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpio_pin_dir val;
+        val = (bcmolt_gpio_pin_dir) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, gpio, direction, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpio, direction, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPIO, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPIO_CFG_ID_DIRECTION, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "value");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpio_value val;
+        val = (bcmolt_gpio_value) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, gpio, value, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpio, value, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPIO, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPIO_CFG_ID_VALUE, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_set(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_set(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpio_cfg_clear(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpio_cfg cfg;        /**< declare main API struct */
+    bcmolt_gpio_key key = { };  /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpio_cfg cfg;\n");
+    bcmcli_log("bcmolt_gpio_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_clear");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "gpio_id");
+    if (cli_parm != NULL)
+    {
+        key.gpio_id = (bcmolt_gpio_pin) cli_parm->value.enum_val;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "gpio_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.gpio_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPIO, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPIO_KEY_ID_GPIO_ID, &key.gpio_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, gpio, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, gpio, key);\n");
+
+    /* call API */
+    err = bcmolt_cfg_clear(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_clear(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpio_cfg_get_multi(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpio_cfg cfg;            /**< declare main API struct */
+    bcmolt_gpio_key key = { };      /**< declare key */
+    bcmolt_msg_set *msg_set = NULL; /**< declare message set */
+    uint32_t max_msgs;              /**< declare max number of msgs to get */
+    bcmos_bool invert_filter;       /**< declare filter invert flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpio_cfg cfg;\n");
+    bcmcli_log("bcmolt_gpio_key key = {  };\n");
+    bcmcli_log("bcmolt_msg_set* msg_set = NULL;\n");
+    bcmcli_log("uint32_t max_msgs;\n");
+    bcmcli_log("bcmos_bool invert_filter;\n");
+    apicli_print_start(session, "bcmolt_cfg_get_multi");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "gpio_id");
+    if (cli_parm != NULL)
+    {
+        key.gpio_id = (bcmolt_gpio_pin) cli_parm->value.enum_val;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "gpio_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.gpio_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPIO, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPIO_KEY_ID_GPIO_ID, &key.gpio_id);
+    bcmcli_log(";\n");
+
+    /* set max number of msgs from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "max_msgs");
+    if (cli_parm != NULL)
+    {
+        max_msgs = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "max_msgs is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("max_msgs = %d;\n", max_msgs);
+
+    /* set filter invert flag from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "filter_invert");
+    if (cli_parm != NULL)
+    {
+        invert_filter = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "filter_invert is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("invert_filter = %s;\n", (invert_filter) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* allocate message set */
+    err = apicli_msg_set_alloc(byte_pool, BCMOLT_OBJ_ID_GPIO, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    bcmcli_log("bcmolt_msg_set_alloc(BCMOLT_OBJ_ID_GPIO, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, gpio, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, gpio, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "filter.direction");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpio_pin_dir val;
+        val = (bcmolt_gpio_pin_dir) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, gpio, direction, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpio, direction, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPIO, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPIO_CFG_ID_DIRECTION, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "direction");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpio, direction);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpio, direction);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.value");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpio_value val;
+        val = (bcmolt_gpio_value) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, gpio, value, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpio, value, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPIO, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPIO_CFG_ID_VALUE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "value");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpio, value);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpio, value);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpio, direction) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpio, value))
+    {
+        BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpio, all_properties);
+        bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpio, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);
+    bcmcli_log("bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_alloc_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_alloc_cfg cfg;          /**< declare main API struct */
+    bcmolt_gpon_alloc_key key = { };    /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_alloc_cfg cfg;\n");
+    bcmcli_log("bcmolt_gpon_alloc_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ALLOC, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_ALLOC_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "alloc_id");
+    if (cli_parm != NULL)
+    {
+        key.alloc_id = (bcmolt_gpon_alloc_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "alloc_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.alloc_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ALLOC, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_ALLOC_KEY_ID_ALLOC_ID, &key.alloc_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, gpon_alloc, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, gpon_alloc, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "state");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_alloc, state);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_alloc, state);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "sla");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_alloc, sla);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_alloc, sla);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_alloc, onu_id);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_alloc, onu_id);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "collect_stats");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_alloc, collect_stats);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_alloc, collect_stats);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_alloc, state) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_alloc, sla) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_alloc, onu_id) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_alloc, collect_stats))
+    {
+        BCMOLT_CFG_PROP_GET(&cfg, gpon_alloc, all_properties);
+        bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_alloc, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_get(device_id, &cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_alloc_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_alloc_cfg cfg;          /**< declare main API struct */
+    bcmolt_gpon_alloc_key key = { };    /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_alloc_cfg cfg;\n");
+    bcmcli_log("bcmolt_gpon_alloc_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ALLOC, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_ALLOC_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "alloc_id");
+    if (cli_parm != NULL)
+    {
+        key.alloc_id = (bcmolt_gpon_alloc_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "alloc_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.alloc_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ALLOC, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_ALLOC_KEY_ID_ALLOC_ID, &key.alloc_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, gpon_alloc, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, gpon_alloc, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "sla.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_pon_alloc_sla val = { };
+        cli_parm = bcmcli_find_named_parm(session, "sla.cbr_rt_bw");
+        if (cli_parm != NULL)
+        {
+            val.cbr_rt_bw = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "sla.cbr_rt_bw is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "sla.cbr_nrt_bw");
+        if (cli_parm != NULL)
+        {
+            val.cbr_nrt_bw = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "sla.cbr_nrt_bw is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "sla.guaranteed_bw");
+        if (cli_parm != NULL)
+        {
+            val.guaranteed_bw = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "sla.guaranteed_bw is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "sla.maximum_bw");
+        if (cli_parm != NULL)
+        {
+            val.maximum_bw = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "sla.maximum_bw is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "sla.additional_bw_eligibility");
+        if (cli_parm != NULL)
+        {
+            val.additional_bw_eligibility = (bcmolt_additional_bw_eligibility) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "sla.additional_bw_eligibility is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "sla.cbr_rt_compensation");
+        if (cli_parm != NULL)
+        {
+            val.cbr_rt_compensation = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "sla.cbr_rt_compensation is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "sla.cbr_rt_ap_index");
+        if (cli_parm != NULL)
+        {
+            val.cbr_rt_ap_index = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "sla.cbr_rt_ap_index is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "sla.cbr_nrt_ap_index");
+        if (cli_parm != NULL)
+        {
+            val.cbr_nrt_ap_index = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "sla.cbr_nrt_ap_index is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "sla.alloc_type");
+        if (cli_parm != NULL)
+        {
+            val.alloc_type = (bcmolt_alloc_type) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "sla.alloc_type is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "sla.weight");
+        if (cli_parm != NULL)
+        {
+            val.weight = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "sla.weight is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "sla.priority");
+        if (cli_parm != NULL)
+        {
+            val.priority = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "sla.priority is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_alloc, sla, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_pon_alloc_sla val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ALLOC, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_ALLOC_CFG_ID_SLA, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_alloc, sla, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpon_onu_id val;
+        val = (bcmolt_gpon_onu_id) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_alloc, onu_id, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_alloc, onu_id, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ALLOC, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_ALLOC_CFG_ID_ONU_ID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "collect_stats");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_alloc, collect_stats, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_alloc, collect_stats, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ALLOC, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_ALLOC_CFG_ID_COLLECT_STATS, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_set(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_set(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_alloc_cfg_clear(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_alloc_cfg cfg;          /**< declare main API struct */
+    bcmolt_gpon_alloc_key key = { };    /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_alloc_cfg cfg;\n");
+    bcmcli_log("bcmolt_gpon_alloc_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_clear");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ALLOC, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_ALLOC_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "alloc_id");
+    if (cli_parm != NULL)
+    {
+        key.alloc_id = (bcmolt_gpon_alloc_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "alloc_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.alloc_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ALLOC, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_ALLOC_KEY_ID_ALLOC_ID, &key.alloc_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, gpon_alloc, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, gpon_alloc, key);\n");
+
+    /* call API */
+    err = bcmolt_cfg_clear(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_clear(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_alloc_cfg_get_multi(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_alloc_cfg cfg;          /**< declare main API struct */
+    bcmolt_gpon_alloc_key key = { };    /**< declare key */
+    bcmolt_msg_set *msg_set = NULL;     /**< declare message set */
+    uint32_t max_msgs;                  /**< declare max number of msgs to get */
+    bcmos_bool invert_filter;           /**< declare filter invert flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_alloc_cfg cfg;\n");
+    bcmcli_log("bcmolt_gpon_alloc_key key = {  };\n");
+    bcmcli_log("bcmolt_msg_set* msg_set = NULL;\n");
+    bcmcli_log("uint32_t max_msgs;\n");
+    bcmcli_log("bcmos_bool invert_filter;\n");
+    apicli_print_start(session, "bcmolt_cfg_get_multi");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ALLOC, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_ALLOC_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "alloc_id");
+    if (cli_parm != NULL)
+    {
+        key.alloc_id = (bcmolt_gpon_alloc_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "alloc_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.alloc_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ALLOC, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_ALLOC_KEY_ID_ALLOC_ID, &key.alloc_id);
+    bcmcli_log(";\n");
+
+    /* set max number of msgs from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "max_msgs");
+    if (cli_parm != NULL)
+    {
+        max_msgs = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "max_msgs is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("max_msgs = %d;\n", max_msgs);
+
+    /* set filter invert flag from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "filter_invert");
+    if (cli_parm != NULL)
+    {
+        invert_filter = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "filter_invert is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("invert_filter = %s;\n", (invert_filter) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* allocate message set */
+    err = apicli_msg_set_alloc(byte_pool, BCMOLT_OBJ_ID_GPON_ALLOC, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    bcmcli_log("bcmolt_msg_set_alloc(BCMOLT_OBJ_ID_GPON_ALLOC, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, gpon_alloc, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, gpon_alloc, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "filter.state");
+    if (cli_parm != NULL)
+    {
+        bcmolt_alloc_state val;
+        val = (bcmolt_alloc_state) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_alloc, state, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_alloc, state, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ALLOC, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_ALLOC_CFG_ID_STATE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "state");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_alloc, state);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_alloc, state);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.sla.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_pon_alloc_sla val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.sla.cbr_rt_bw");
+        if (cli_parm != NULL)
+        {
+            val.cbr_rt_bw = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.sla.cbr_rt_bw is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.sla.cbr_nrt_bw");
+        if (cli_parm != NULL)
+        {
+            val.cbr_nrt_bw = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.sla.cbr_nrt_bw is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.sla.guaranteed_bw");
+        if (cli_parm != NULL)
+        {
+            val.guaranteed_bw = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.sla.guaranteed_bw is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.sla.maximum_bw");
+        if (cli_parm != NULL)
+        {
+            val.maximum_bw = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.sla.maximum_bw is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.sla.additional_bw_eligibility");
+        if (cli_parm != NULL)
+        {
+            val.additional_bw_eligibility = (bcmolt_additional_bw_eligibility) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.sla.additional_bw_eligibility is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.sla.cbr_rt_compensation");
+        if (cli_parm != NULL)
+        {
+            val.cbr_rt_compensation = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.sla.cbr_rt_compensation is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.sla.cbr_rt_ap_index");
+        if (cli_parm != NULL)
+        {
+            val.cbr_rt_ap_index = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.sla.cbr_rt_ap_index is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.sla.cbr_nrt_ap_index");
+        if (cli_parm != NULL)
+        {
+            val.cbr_nrt_ap_index = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.sla.cbr_nrt_ap_index is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.sla.alloc_type");
+        if (cli_parm != NULL)
+        {
+            val.alloc_type = (bcmolt_alloc_type) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.sla.alloc_type is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.sla.weight");
+        if (cli_parm != NULL)
+        {
+            val.weight = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.sla.weight is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.sla.priority");
+        if (cli_parm != NULL)
+        {
+            val.priority = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.sla.priority is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_alloc, sla, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_pon_alloc_sla val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ALLOC, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_ALLOC_CFG_ID_SLA, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_alloc, sla, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "sla");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_alloc, sla);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_alloc, sla);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.onu_id");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpon_onu_id val;
+        val = (bcmolt_gpon_onu_id) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_alloc, onu_id, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_alloc, onu_id, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ALLOC, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_ALLOC_CFG_ID_ONU_ID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_alloc, onu_id);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_alloc, onu_id);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.collect_stats");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_alloc, collect_stats, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_alloc, collect_stats, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ALLOC, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_ALLOC_CFG_ID_COLLECT_STATS, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "collect_stats");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_alloc, collect_stats);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_alloc, collect_stats);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_alloc, state) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_alloc, sla) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_alloc, onu_id) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_alloc, collect_stats))
+    {
+        BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_alloc, all_properties);
+        bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_alloc, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);
+    bcmcli_log("bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_alloc_stat_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_alloc_stat stat;        /**< declare main API struct */
+    bcmolt_gpon_alloc_key key = { };    /**< declare key */
+    bcmos_bool clear_on_read;           /**< declare 'clear on read' flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_alloc_stat stat;\n");
+    bcmcli_log("bcmolt_gpon_alloc_key key = {  };\n");
+    bcmcli_log("bcmos_bool clear_on_read;\n");
+    apicli_print_start(session, "bcmolt_stat_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ALLOC, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_ALLOC_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "alloc_id");
+    if (cli_parm != NULL)
+    {
+        key.alloc_id = (bcmolt_gpon_alloc_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "alloc_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.alloc_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ALLOC, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_ALLOC_KEY_ID_ALLOC_ID, &key.alloc_id);
+    bcmcli_log(";\n");
+
+    /* set stat flags from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "clear");
+    if (cli_parm != NULL)
+    {
+        clear_on_read = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "clear is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("clear_on_read = %s;\n", (clear_on_read) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* init the API struct */
+    BCMOLT_STAT_INIT(&stat, gpon_alloc, key);
+    bcmcli_log("BCMOLT_STAT_INIT(&stat, gpon_alloc, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "rx_bytes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_alloc, rx_bytes);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_alloc, rx_bytes);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_STAT_PROP_IS_SET(&stat, gpon_alloc, rx_bytes))
+    {
+        BCMOLT_STAT_PROP_GET(&stat, gpon_alloc, all_properties);
+        bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_alloc, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_stat_get(device_id, &stat.hdr, clear_on_read);
+    bcmcli_log("bcmolt_stat_get(device_id, &stat.hdr, clear_on_read);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &stat.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, stat.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_alloc_oper_set_state_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_alloc_set_state oper;   /**< declare main API struct */
+    bcmolt_gpon_alloc_key key = { };    /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_alloc_set_state oper;\n");
+    bcmcli_log("bcmolt_gpon_alloc_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ALLOC, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_ALLOC_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "alloc_id");
+    if (cli_parm != NULL)
+    {
+        key.alloc_id = (bcmolt_gpon_alloc_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "alloc_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.alloc_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ALLOC, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_ALLOC_KEY_ID_ALLOC_ID, &key.alloc_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, gpon_alloc, set_state, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, gpon_alloc, set_state, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "state");
+    if (cli_parm != NULL)
+    {
+        bcmolt_alloc_operation val;
+        val = (bcmolt_alloc_operation) cli_parm->value.enum_val;
+        BCMOLT_OPER_PROP_SET(&oper, gpon_alloc, set_state, state, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, gpon_alloc, set_state, state, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ALLOC, BCMOLT_MGT_GROUP_OPER, BCMOLT_GPON_ALLOC_OPER_ID_SET_STATE, BCMOLT_GPON_ALLOC_SET_STATE_ID_STATE, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_alloc_oper_get_stats_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_alloc_get_stats oper;   /**< declare main API struct */
+    bcmolt_gpon_alloc_key key = { };    /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_alloc_get_stats oper;\n");
+    bcmcli_log("bcmolt_gpon_alloc_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ALLOC, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_ALLOC_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "alloc_id");
+    if (cli_parm != NULL)
+    {
+        key.alloc_id = (bcmolt_gpon_alloc_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "alloc_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.alloc_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ALLOC, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_ALLOC_KEY_ID_ALLOC_ID, &key.alloc_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, gpon_alloc, get_stats, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, gpon_alloc, get_stats, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "num_of_cycles");
+    if (cli_parm != NULL)
+    {
+        uint32_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_OPER_PROP_SET(&oper, gpon_alloc, get_stats, num_of_cycles, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, gpon_alloc, get_stats, num_of_cycles, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ALLOC, BCMOLT_MGT_GROUP_OPER, BCMOLT_GPON_ALLOC_OPER_ID_GET_STATS, BCMOLT_GPON_ALLOC_GET_STATS_ID_NUM_OF_CYCLES, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_alloc_stat_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_alloc_stat_cfg stat_cfg;    /**< declare main API struct */
+    bcmolt_gpon_alloc_key key = { };        /**< declare key */
+    bcmolt_gpon_alloc_stat_id stat_id;      /**< declare stat ID */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_alloc_stat_cfg stat_cfg;\n");
+    bcmcli_log("bcmolt_gpon_alloc_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_stat_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ALLOC, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_ALLOC_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "alloc_id");
+    if (cli_parm != NULL)
+    {
+        key.alloc_id = (bcmolt_gpon_alloc_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "alloc_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.alloc_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ALLOC, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_ALLOC_KEY_ID_ALLOC_ID, &key.alloc_id);
+    bcmcli_log(";\n");
+
+    /* set stat ID from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "sub");
+    if (cli_parm != NULL)
+    {
+        stat_id = (bcmolt_gpon_alloc_stat_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    /* init the API struct */
+    switch (stat_id)
+    {
+        case BCMOLT_GPON_ALLOC_STAT_ID_RX_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_alloc, rx_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_alloc, rx_bytes, key);\n");
+            break;
+        default:
+            apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+            return BCM_ERR_RANGE;
+    }
+
+    /* call API */
+    err = bcmolt_stat_cfg_get(device_id, &stat_cfg.hdr);
+    bcmcli_log("bcmolt_stat_cfg_get(device_id, &stat_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &stat_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, stat_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_alloc_stat_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_alloc_stat_cfg stat_cfg;    /**< declare main API struct */
+    bcmolt_gpon_alloc_key key = { };        /**< declare key */
+    bcmolt_gpon_alloc_stat_id stat_id;      /**< declare stat ID */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_alloc_stat_cfg stat_cfg;\n");
+    bcmcli_log("bcmolt_gpon_alloc_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_stat_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ALLOC, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_ALLOC_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "alloc_id");
+    if (cli_parm != NULL)
+    {
+        key.alloc_id = (bcmolt_gpon_alloc_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "alloc_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.alloc_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ALLOC, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_ALLOC_KEY_ID_ALLOC_ID, &key.alloc_id);
+    bcmcli_log(";\n");
+
+    /* set stat ID from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "sub");
+    if (cli_parm != NULL)
+    {
+        stat_id = (bcmolt_gpon_alloc_stat_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    /* init the API struct */
+    switch (stat_id)
+    {
+        case BCMOLT_GPON_ALLOC_STAT_ID_RX_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_alloc, rx_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_alloc, rx_bytes, key);\n");
+            break;
+        default:
+            apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+            return BCM_ERR_RANGE;
+    }
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_stat_alarm_config val = { };
+        cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.trigger.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.type");
+            if (cli_parm != NULL)
+            {
+                val.trigger.type = (bcmolt_stat_condition_type) cli_parm->value.enum_val;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.type is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            switch (val.trigger.type)
+            {
+                case BCMOLT_STAT_CONDITION_TYPE_RATE_THRESHOLD:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.rising");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_threshold.rising = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.rising is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.falling");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_threshold.falling = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.falling is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_RATE_RANGE:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.upper");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_range.upper = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.upper is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.lower");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_range.lower = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.lower is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_VALUE_THRESHOLD:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.limit");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.value_threshold.limit = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.limit is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_NONE:
+                    break;
+                default:
+                    apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+                    return BCM_ERR_RANGE;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.soak.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "cfg.soak.active_soak_time");
+            if (cli_parm != NULL)
+            {
+                val.soak.active_soak_time = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak.active_soak_time is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "cfg.soak.clear_soak_time");
+            if (cli_parm != NULL)
+            {
+                val.soak.clear_soak_time = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak.clear_soak_time is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_STAT_CFG_PROP_SET(&stat_cfg, gpon_alloc, cfg, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_stat_alarm_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ALLOC, BCMOLT_MGT_GROUP_STAT_CFG, 0, BCMOLT_GPON_ALLOC_STAT_CFG_ID_CFG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_STAT_CFG_PROP_SET(&stat_cfg, gpon_alloc, cfg, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_stat_cfg_set(device_id, &stat_cfg.hdr);
+    bcmcli_log("bcmolt_stat_cfg_set(device_id, &stat_cfg.hdr);\n");
+    apicli_print_complete(session, err, stat_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_alloc_auto_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_alloc_auto_cfg auto_cfg;    /**< declare main API struct */
+    bcmolt_gpon_alloc_key key = { };        /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_alloc_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_gpon_alloc_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_get");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, gpon_alloc, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, gpon_alloc, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "configuration_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_alloc, configuration_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_alloc, configuration_completed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "get_alloc_stats_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_alloc, get_alloc_stats_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_alloc, get_alloc_stats_completed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_cleared");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_alloc, stat_alarm_cleared);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_alloc, stat_alarm_cleared);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_raised");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_alloc, stat_alarm_raised);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_alloc, stat_alarm_raised);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_alloc, configuration_completed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_alloc, get_alloc_stats_completed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_alloc, stat_alarm_cleared) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_alloc, stat_alarm_raised))
+    {
+        BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_alloc, all_properties);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_alloc, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &auto_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_alloc_auto_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_alloc_auto_cfg auto_cfg;    /**< declare main API struct */
+    bcmolt_gpon_alloc_key key = { };        /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_alloc_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_gpon_alloc_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_set");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, gpon_alloc, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, gpon_alloc, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "configuration_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_alloc, configuration_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_alloc, configuration_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ALLOC, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_ALLOC_AUTO_CFG_ID_CONFIGURATION_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "get_alloc_stats_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_alloc, get_alloc_stats_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_alloc, get_alloc_stats_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ALLOC, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_ALLOC_AUTO_CFG_ID_GET_ALLOC_STATS_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_cleared");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_alloc, stat_alarm_cleared, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_alloc, stat_alarm_cleared, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ALLOC, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_ALLOC_AUTO_CFG_ID_STAT_ALARM_CLEARED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_raised");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_alloc, stat_alarm_raised, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_alloc, stat_alarm_raised, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ALLOC, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_ALLOC_AUTO_CFG_ID_STAT_ALARM_RAISED, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);\n");
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_gem_port_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_gem_port_cfg cfg;       /**< declare main API struct */
+    bcmolt_gpon_gem_port_key key = { }; /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_gem_port_cfg cfg;\n");
+    bcmcli_log("bcmolt_gpon_gem_port_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_GEM_PORT_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "gem_port_id");
+    if (cli_parm != NULL)
+    {
+        key.gem_port_id = (bcmolt_gpon_gem_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "gem_port_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.gem_port_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_GEM_PORT_KEY_ID_GEM_PORT_ID, &key.gem_port_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, gpon_gem_port, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, gpon_gem_port, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "configuration");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_gem_port, configuration);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_gem_port, configuration);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_gem_port, onu_id);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_gem_port, onu_id);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "gem_port_state");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_gem_port, gem_port_state);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_gem_port, gem_port_state);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "downstream_encryption_mode");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_gem_port, downstream_encryption_mode);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_gem_port, downstream_encryption_mode);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "upstream_destination_queue");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_gem_port, upstream_destination_queue);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_gem_port, upstream_destination_queue);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "control");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_gem_port, control);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_gem_port, control);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "debug_flow_config");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_gem_port, debug_flow_config);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_gem_port, debug_flow_config);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mac_table_entry_limit");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_gem_port, mac_table_entry_limit);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_gem_port, mac_table_entry_limit);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_gem_port, configuration) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_gem_port, onu_id) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_gem_port, gem_port_state) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_gem_port, downstream_encryption_mode) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_gem_port, upstream_destination_queue) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_gem_port, control) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_gem_port, debug_flow_config) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_gem_port, mac_table_entry_limit))
+    {
+        BCMOLT_CFG_PROP_GET(&cfg, gpon_gem_port, all_properties);
+        bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_gem_port, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_get(device_id, &cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_gem_port_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_gem_port_cfg cfg;       /**< declare main API struct */
+    bcmolt_gpon_gem_port_key key = { }; /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_gem_port_cfg cfg;\n");
+    bcmcli_log("bcmolt_gpon_gem_port_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_GEM_PORT_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "gem_port_id");
+    if (cli_parm != NULL)
+    {
+        key.gem_port_id = (bcmolt_gpon_gem_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "gem_port_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.gem_port_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_GEM_PORT_KEY_ID_GEM_PORT_ID, &key.gem_port_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, gpon_gem_port, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, gpon_gem_port, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "configuration.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gem_port_configuration val = { };
+        cli_parm = bcmcli_find_named_parm(session, "configuration.direction");
+        if (cli_parm != NULL)
+        {
+            val.direction = (bcmolt_gem_port_direction) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "configuration.direction is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "configuration.type");
+        if (cli_parm != NULL)
+        {
+            val.type = (bcmolt_gem_port_type) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "configuration.type is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_gem_port, configuration, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_gem_port_configuration val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_GEM_PORT_CFG_ID_CONFIGURATION, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_gem_port, configuration, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpon_onu_id val;
+        val = (bcmolt_gpon_onu_id) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_gem_port, onu_id, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_gem_port, onu_id, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_GEM_PORT_CFG_ID_ONU_ID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "downstream_encryption_mode");
+    if (cli_parm != NULL)
+    {
+        bcmolt_control_state val;
+        val = (bcmolt_control_state) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_gem_port, downstream_encryption_mode, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_gem_port, downstream_encryption_mode, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_GEM_PORT_CFG_ID_DOWNSTREAM_ENCRYPTION_MODE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "upstream_destination_queue");
+    if (cli_parm != NULL)
+    {
+        bcmolt_us_gem_port_destination val;
+        val = (bcmolt_us_gem_port_destination) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_gem_port, upstream_destination_queue, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_gem_port, upstream_destination_queue, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_GEM_PORT_CFG_ID_UPSTREAM_DESTINATION_QUEUE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "control");
+    if (cli_parm != NULL)
+    {
+        bcmolt_control_state val;
+        val = (bcmolt_control_state) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_gem_port, control, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_gem_port, control, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_GEM_PORT_CFG_ID_CONTROL, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "debug_flow_config.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpon_debug_flow_config val = { };
+        cli_parm = bcmcli_find_named_parm(session, "debug_flow_config.untagged_flow");
+        if (cli_parm != NULL)
+        {
+            val.untagged_flow = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "debug_flow_config.untagged_flow is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "debug_flow_config.untagged_vid");
+        if (cli_parm != NULL)
+        {
+            val.untagged_vid = (bcmolt_vlan_id) cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "debug_flow_config.untagged_vid is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_gem_port, debug_flow_config, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_gpon_debug_flow_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_GEM_PORT_CFG_ID_DEBUG_FLOW_CONFIG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_gem_port, debug_flow_config, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mac_table_entry_limit");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_gem_port, mac_table_entry_limit, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_gem_port, mac_table_entry_limit, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_GEM_PORT_CFG_ID_MAC_TABLE_ENTRY_LIMIT, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_set(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_set(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_gem_port_cfg_clear(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_gem_port_cfg cfg;       /**< declare main API struct */
+    bcmolt_gpon_gem_port_key key = { }; /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_gem_port_cfg cfg;\n");
+    bcmcli_log("bcmolt_gpon_gem_port_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_clear");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_GEM_PORT_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "gem_port_id");
+    if (cli_parm != NULL)
+    {
+        key.gem_port_id = (bcmolt_gpon_gem_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "gem_port_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.gem_port_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_GEM_PORT_KEY_ID_GEM_PORT_ID, &key.gem_port_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, gpon_gem_port, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, gpon_gem_port, key);\n");
+
+    /* call API */
+    err = bcmolt_cfg_clear(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_clear(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_gem_port_cfg_get_multi(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_gem_port_cfg cfg;       /**< declare main API struct */
+    bcmolt_gpon_gem_port_key key = { }; /**< declare key */
+    bcmolt_msg_set *msg_set = NULL;     /**< declare message set */
+    uint32_t max_msgs;                  /**< declare max number of msgs to get */
+    bcmos_bool invert_filter;           /**< declare filter invert flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_gem_port_cfg cfg;\n");
+    bcmcli_log("bcmolt_gpon_gem_port_key key = {  };\n");
+    bcmcli_log("bcmolt_msg_set* msg_set = NULL;\n");
+    bcmcli_log("uint32_t max_msgs;\n");
+    bcmcli_log("bcmos_bool invert_filter;\n");
+    apicli_print_start(session, "bcmolt_cfg_get_multi");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_GEM_PORT_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "gem_port_id");
+    if (cli_parm != NULL)
+    {
+        key.gem_port_id = (bcmolt_gpon_gem_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "gem_port_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.gem_port_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_GEM_PORT_KEY_ID_GEM_PORT_ID, &key.gem_port_id);
+    bcmcli_log(";\n");
+
+    /* set max number of msgs from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "max_msgs");
+    if (cli_parm != NULL)
+    {
+        max_msgs = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "max_msgs is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("max_msgs = %d;\n", max_msgs);
+
+    /* set filter invert flag from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "filter_invert");
+    if (cli_parm != NULL)
+    {
+        invert_filter = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "filter_invert is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("invert_filter = %s;\n", (invert_filter) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* allocate message set */
+    err = apicli_msg_set_alloc(byte_pool, BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    bcmcli_log("bcmolt_msg_set_alloc(BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, gpon_gem_port, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, gpon_gem_port, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.configuration.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gem_port_configuration val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.configuration.direction");
+        if (cli_parm != NULL)
+        {
+            val.direction = (bcmolt_gem_port_direction) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.configuration.direction is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.configuration.type");
+        if (cli_parm != NULL)
+        {
+            val.type = (bcmolt_gem_port_type) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.configuration.type is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_gem_port, configuration, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_gem_port_configuration val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_GEM_PORT_CFG_ID_CONFIGURATION, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_gem_port, configuration, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "configuration");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_gem_port, configuration);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_gem_port, configuration);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.onu_id");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpon_onu_id val;
+        val = (bcmolt_gpon_onu_id) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_gem_port, onu_id, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_gem_port, onu_id, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_GEM_PORT_CFG_ID_ONU_ID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_gem_port, onu_id);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_gem_port, onu_id);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.gem_port_state");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpon_gem_port_state val;
+        val = (bcmolt_gpon_gem_port_state) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_gem_port, gem_port_state, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_gem_port, gem_port_state, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_GEM_PORT_CFG_ID_GEM_PORT_STATE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "gem_port_state");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_gem_port, gem_port_state);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_gem_port, gem_port_state);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.downstream_encryption_mode");
+    if (cli_parm != NULL)
+    {
+        bcmolt_control_state val;
+        val = (bcmolt_control_state) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_gem_port, downstream_encryption_mode, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_gem_port, downstream_encryption_mode, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_GEM_PORT_CFG_ID_DOWNSTREAM_ENCRYPTION_MODE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "downstream_encryption_mode");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_gem_port, downstream_encryption_mode);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_gem_port, downstream_encryption_mode);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.upstream_destination_queue");
+    if (cli_parm != NULL)
+    {
+        bcmolt_us_gem_port_destination val;
+        val = (bcmolt_us_gem_port_destination) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_gem_port, upstream_destination_queue, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_gem_port, upstream_destination_queue, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_GEM_PORT_CFG_ID_UPSTREAM_DESTINATION_QUEUE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "upstream_destination_queue");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_gem_port, upstream_destination_queue);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_gem_port, upstream_destination_queue);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.control");
+    if (cli_parm != NULL)
+    {
+        bcmolt_control_state val;
+        val = (bcmolt_control_state) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_gem_port, control, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_gem_port, control, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_GEM_PORT_CFG_ID_CONTROL, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "control");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_gem_port, control);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_gem_port, control);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.debug_flow_config.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpon_debug_flow_config val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.debug_flow_config.untagged_flow");
+        if (cli_parm != NULL)
+        {
+            val.untagged_flow = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.debug_flow_config.untagged_flow is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.debug_flow_config.untagged_vid");
+        if (cli_parm != NULL)
+        {
+            val.untagged_vid = (bcmolt_vlan_id) cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.debug_flow_config.untagged_vid is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_gem_port, debug_flow_config, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_gpon_debug_flow_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_GEM_PORT_CFG_ID_DEBUG_FLOW_CONFIG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_gem_port, debug_flow_config, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "debug_flow_config");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_gem_port, debug_flow_config);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_gem_port, debug_flow_config);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.mac_table_entry_limit");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_gem_port, mac_table_entry_limit, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_gem_port, mac_table_entry_limit, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_GEM_PORT_CFG_ID_MAC_TABLE_ENTRY_LIMIT, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mac_table_entry_limit");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_gem_port, mac_table_entry_limit);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_gem_port, mac_table_entry_limit);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_gem_port, configuration) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_gem_port, onu_id) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_gem_port, gem_port_state) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_gem_port, downstream_encryption_mode) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_gem_port, upstream_destination_queue) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_gem_port, control) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_gem_port, debug_flow_config) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_gem_port, mac_table_entry_limit))
+    {
+        BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_gem_port, all_properties);
+        bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_gem_port, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);
+    bcmcli_log("bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_gem_port_stat_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_gem_port_stat stat;     /**< declare main API struct */
+    bcmolt_gpon_gem_port_key key = { }; /**< declare key */
+    bcmos_bool clear_on_read;           /**< declare 'clear on read' flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_gem_port_stat stat;\n");
+    bcmcli_log("bcmolt_gpon_gem_port_key key = {  };\n");
+    bcmcli_log("bcmos_bool clear_on_read;\n");
+    apicli_print_start(session, "bcmolt_stat_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_GEM_PORT_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "gem_port_id");
+    if (cli_parm != NULL)
+    {
+        key.gem_port_id = (bcmolt_gpon_gem_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "gem_port_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.gem_port_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_GEM_PORT_KEY_ID_GEM_PORT_ID, &key.gem_port_id);
+    bcmcli_log(";\n");
+
+    /* set stat flags from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "clear");
+    if (cli_parm != NULL)
+    {
+        clear_on_read = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "clear is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("clear_on_read = %s;\n", (clear_on_read) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* init the API struct */
+    BCMOLT_STAT_INIT(&stat, gpon_gem_port, key);
+    bcmcli_log("BCMOLT_STAT_INIT(&stat, gpon_gem_port, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "rx_packets");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_gem_port, rx_packets);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_gem_port, rx_packets);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_bytes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_gem_port, rx_bytes);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_gem_port, rx_bytes);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_packets");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_gem_port, tx_packets);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_gem_port, tx_packets);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_bytes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_gem_port, tx_bytes);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_gem_port, tx_bytes);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_STAT_PROP_IS_SET(&stat, gpon_gem_port, rx_packets) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_gem_port, rx_bytes) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_gem_port, tx_packets) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_gem_port, tx_bytes))
+    {
+        BCMOLT_STAT_PROP_GET(&stat, gpon_gem_port, all_properties);
+        bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_gem_port, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_stat_get(device_id, &stat.hdr, clear_on_read);
+    bcmcli_log("bcmolt_stat_get(device_id, &stat.hdr, clear_on_read);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &stat.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, stat.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_gem_port_oper_set_state_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_gem_port_set_state oper;    /**< declare main API struct */
+    bcmolt_gpon_gem_port_key key = { };     /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_gem_port_set_state oper;\n");
+    bcmcli_log("bcmolt_gpon_gem_port_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_GEM_PORT_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "gem_port_id");
+    if (cli_parm != NULL)
+    {
+        key.gem_port_id = (bcmolt_gpon_gem_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "gem_port_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.gem_port_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_GEM_PORT_KEY_ID_GEM_PORT_ID, &key.gem_port_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, gpon_gem_port, set_state, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, gpon_gem_port, set_state, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "state");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gem_port_operation val;
+        val = (bcmolt_gem_port_operation) cli_parm->value.enum_val;
+        BCMOLT_OPER_PROP_SET(&oper, gpon_gem_port, set_state, state, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, gpon_gem_port, set_state, state, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_OPER, BCMOLT_GPON_GEM_PORT_OPER_ID_SET_STATE, BCMOLT_GPON_GEM_PORT_SET_STATE_ID_STATE, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_gem_port_stat_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_gem_port_stat_cfg stat_cfg; /**< declare main API struct */
+    bcmolt_gpon_gem_port_key key = { };     /**< declare key */
+    bcmolt_gpon_gem_port_stat_id stat_id;   /**< declare stat ID */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_gem_port_stat_cfg stat_cfg;\n");
+    bcmcli_log("bcmolt_gpon_gem_port_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_stat_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_GEM_PORT_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "gem_port_id");
+    if (cli_parm != NULL)
+    {
+        key.gem_port_id = (bcmolt_gpon_gem_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "gem_port_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.gem_port_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_GEM_PORT_KEY_ID_GEM_PORT_ID, &key.gem_port_id);
+    bcmcli_log(";\n");
+
+    /* set stat ID from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "sub");
+    if (cli_parm != NULL)
+    {
+        stat_id = (bcmolt_gpon_gem_port_stat_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    /* init the API struct */
+    switch (stat_id)
+    {
+        case BCMOLT_GPON_GEM_PORT_STAT_ID_RX_PACKETS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_gem_port, rx_packets, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_gem_port, rx_packets, key);\n");
+            break;
+        case BCMOLT_GPON_GEM_PORT_STAT_ID_RX_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_gem_port, rx_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_gem_port, rx_bytes, key);\n");
+            break;
+        case BCMOLT_GPON_GEM_PORT_STAT_ID_TX_PACKETS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_gem_port, tx_packets, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_gem_port, tx_packets, key);\n");
+            break;
+        case BCMOLT_GPON_GEM_PORT_STAT_ID_TX_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_gem_port, tx_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_gem_port, tx_bytes, key);\n");
+            break;
+        default:
+            apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+            return BCM_ERR_RANGE;
+    }
+
+    /* call API */
+    err = bcmolt_stat_cfg_get(device_id, &stat_cfg.hdr);
+    bcmcli_log("bcmolt_stat_cfg_get(device_id, &stat_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &stat_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, stat_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_gem_port_stat_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_gem_port_stat_cfg stat_cfg; /**< declare main API struct */
+    bcmolt_gpon_gem_port_key key = { };     /**< declare key */
+    bcmolt_gpon_gem_port_stat_id stat_id;   /**< declare stat ID */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_gem_port_stat_cfg stat_cfg;\n");
+    bcmcli_log("bcmolt_gpon_gem_port_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_stat_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_GEM_PORT_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "gem_port_id");
+    if (cli_parm != NULL)
+    {
+        key.gem_port_id = (bcmolt_gpon_gem_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "gem_port_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.gem_port_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_GEM_PORT_KEY_ID_GEM_PORT_ID, &key.gem_port_id);
+    bcmcli_log(";\n");
+
+    /* set stat ID from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "sub");
+    if (cli_parm != NULL)
+    {
+        stat_id = (bcmolt_gpon_gem_port_stat_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    /* init the API struct */
+    switch (stat_id)
+    {
+        case BCMOLT_GPON_GEM_PORT_STAT_ID_RX_PACKETS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_gem_port, rx_packets, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_gem_port, rx_packets, key);\n");
+            break;
+        case BCMOLT_GPON_GEM_PORT_STAT_ID_RX_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_gem_port, rx_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_gem_port, rx_bytes, key);\n");
+            break;
+        case BCMOLT_GPON_GEM_PORT_STAT_ID_TX_PACKETS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_gem_port, tx_packets, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_gem_port, tx_packets, key);\n");
+            break;
+        case BCMOLT_GPON_GEM_PORT_STAT_ID_TX_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_gem_port, tx_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_gem_port, tx_bytes, key);\n");
+            break;
+        default:
+            apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+            return BCM_ERR_RANGE;
+    }
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_stat_alarm_config val = { };
+        cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.trigger.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.type");
+            if (cli_parm != NULL)
+            {
+                val.trigger.type = (bcmolt_stat_condition_type) cli_parm->value.enum_val;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.type is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            switch (val.trigger.type)
+            {
+                case BCMOLT_STAT_CONDITION_TYPE_RATE_THRESHOLD:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.rising");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_threshold.rising = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.rising is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.falling");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_threshold.falling = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.falling is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_RATE_RANGE:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.upper");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_range.upper = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.upper is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.lower");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_range.lower = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.lower is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_VALUE_THRESHOLD:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.limit");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.value_threshold.limit = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.limit is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_NONE:
+                    break;
+                default:
+                    apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+                    return BCM_ERR_RANGE;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.soak.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "cfg.soak.active_soak_time");
+            if (cli_parm != NULL)
+            {
+                val.soak.active_soak_time = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak.active_soak_time is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "cfg.soak.clear_soak_time");
+            if (cli_parm != NULL)
+            {
+                val.soak.clear_soak_time = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak.clear_soak_time is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_STAT_CFG_PROP_SET(&stat_cfg, gpon_gem_port, cfg, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_stat_alarm_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_STAT_CFG, 0, BCMOLT_GPON_GEM_PORT_STAT_CFG_ID_CFG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_STAT_CFG_PROP_SET(&stat_cfg, gpon_gem_port, cfg, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_stat_cfg_set(device_id, &stat_cfg.hdr);
+    bcmcli_log("bcmolt_stat_cfg_set(device_id, &stat_cfg.hdr);\n");
+    apicli_print_complete(session, err, stat_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_gem_port_auto_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_gem_port_auto_cfg auto_cfg; /**< declare main API struct */
+    bcmolt_gpon_gem_port_key key = { };     /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_gem_port_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_gpon_gem_port_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_get");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, gpon_gem_port, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, gpon_gem_port, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "configuration_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_gem_port, configuration_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_gem_port, configuration_completed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_cleared");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_gem_port, stat_alarm_cleared);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_gem_port, stat_alarm_cleared);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_raised");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_gem_port, stat_alarm_raised);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_gem_port, stat_alarm_raised);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_gem_port, configuration_completed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_gem_port, stat_alarm_cleared) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_gem_port, stat_alarm_raised))
+    {
+        BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_gem_port, all_properties);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_gem_port, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &auto_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_gem_port_auto_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_gem_port_auto_cfg auto_cfg; /**< declare main API struct */
+    bcmolt_gpon_gem_port_key key = { };     /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_gem_port_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_gpon_gem_port_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_set");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, gpon_gem_port, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, gpon_gem_port, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "configuration_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_gem_port, configuration_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_gem_port, configuration_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_GEM_PORT_AUTO_CFG_ID_CONFIGURATION_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_cleared");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_gem_port, stat_alarm_cleared, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_gem_port, stat_alarm_cleared, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_GEM_PORT_AUTO_CFG_ID_STAT_ALARM_CLEARED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_raised");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_gem_port, stat_alarm_raised, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_gem_port, stat_alarm_raised, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_GEM_PORT, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_GEM_PORT_AUTO_CFG_ID_STAT_ALARM_RAISED, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);\n");
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_iwf_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_iwf_cfg cfg;        /**< declare main API struct */
+    bcmolt_gpon_iwf_key key = { };  /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_iwf_cfg cfg;\n");
+    bcmcli_log("bcmolt_gpon_iwf_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_IWF_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, gpon_iwf, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, gpon_iwf, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "iwf_mode");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf, iwf_mode);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf, iwf_mode);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "us_tpid_per_flow");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf, us_tpid_per_flow);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf, us_tpid_per_flow);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "us_otag_direct_tpid");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf, us_otag_direct_tpid);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf, us_otag_direct_tpid);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "us_otag_direct_pbit");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf, us_otag_direct_pbit);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf, us_otag_direct_pbit);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ds_tpid");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf, ds_tpid);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf, ds_tpid);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mac_table_configuration");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf, mac_table_configuration);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf, mac_table_configuration);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "debug_flow_configuration");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf, debug_flow_configuration);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf, debug_flow_configuration);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mac_table_count");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf, mac_table_count);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf, mac_table_count);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "forbidden_vlan_flow_gem_range_start");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf, forbidden_vlan_flow_gem_range_start);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf, forbidden_vlan_flow_gem_range_start);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_iwf, iwf_mode) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_iwf, us_tpid_per_flow) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_iwf, us_otag_direct_tpid) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_iwf, us_otag_direct_pbit) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_iwf, ds_tpid) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_iwf, mac_table_configuration) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_iwf, debug_flow_configuration) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_iwf, mac_table_count) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_iwf, forbidden_vlan_flow_gem_range_start))
+    {
+        BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf, all_properties);
+        bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_get(device_id, &cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_iwf_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_iwf_cfg cfg;        /**< declare main API struct */
+    bcmolt_gpon_iwf_key key = { };  /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_iwf_cfg cfg;\n");
+    bcmcli_log("bcmolt_gpon_iwf_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_IWF_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, gpon_iwf, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, gpon_iwf, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "iwf_mode");
+    if (cli_parm != NULL)
+    {
+        bcmolt_iwf_mode val;
+        val = (bcmolt_iwf_mode) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf, iwf_mode, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf, iwf_mode, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_IWF_CFG_ID_IWF_MODE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "us_tpid_per_flow.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_arr_u16_2_hex val = { };
+        cli_parm = bcmcli_find_named_parm(session, "us_tpid_per_flow.arr");
+        if (cli_parm != NULL)
+        {
+            int32_t i0;
+            if (cli_parm->array_size != 2)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "array us_tpid_per_flow.arr must have 2 elements\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i0 = 0; i0 < 2; i0++)
+            {
+                val.arr[i0] = cli_parm->values[i0].unumber;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "us_tpid_per_flow.arr is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf, us_tpid_per_flow, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_arr_u16_2_hex val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_IWF_CFG_ID_US_TPID_PER_FLOW, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf, us_tpid_per_flow, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "us_otag_direct_tpid");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf, us_otag_direct_tpid, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf, us_otag_direct_tpid, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_IWF_CFG_ID_US_OTAG_DIRECT_TPID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "us_otag_direct_pbit");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf, us_otag_direct_pbit, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf, us_otag_direct_pbit, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_IWF_CFG_ID_US_OTAG_DIRECT_PBIT, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "ds_tpid.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_arr_u16_5_hex val = { };
+        cli_parm = bcmcli_find_named_parm(session, "ds_tpid.arr");
+        if (cli_parm != NULL)
+        {
+            int32_t i1;
+            if (cli_parm->array_size != 5)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "array ds_tpid.arr must have 5 elements\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i1 = 0; i1 < 5; i1++)
+            {
+                val.arr[i1] = cli_parm->values[i1].unumber;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ds_tpid.arr is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf, ds_tpid, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_arr_u16_5_hex val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_IWF_CFG_ID_DS_TPID, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf, ds_tpid, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "mac_table_configuration.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_mac_table_configuration val = { };
+        cli_parm = bcmcli_find_named_parm(session, "mac_table_configuration.miss_fallback");
+        if (cli_parm != NULL)
+        {
+            val.miss_fallback = (bcmolt_mac_table_miss_fallback) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "mac_table_configuration.miss_fallback is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "mac_table_configuration.default_flow_id");
+        if (cli_parm != NULL)
+        {
+            val.default_flow_id = (bcmolt_flow_id) cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "mac_table_configuration.default_flow_id is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "mac_table_configuration.aging_time");
+        if (cli_parm != NULL)
+        {
+            val.aging_time = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "mac_table_configuration.aging_time is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "mac_table_configuration.learning_mode");
+        if (cli_parm != NULL)
+        {
+            val.learning_mode = (bcmolt_mac_table_learning_mode) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "mac_table_configuration.learning_mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "mac_table_configuration.automatic_mac_learning");
+        if (cli_parm != NULL)
+        {
+            val.automatic_mac_learning = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "mac_table_configuration.automatic_mac_learning is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "mac_table_configuration.automatic_mac_aging");
+        if (cli_parm != NULL)
+        {
+            val.automatic_mac_aging = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "mac_table_configuration.automatic_mac_aging is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "mac_table_configuration.automatic_mac_move");
+        if (cli_parm != NULL)
+        {
+            val.automatic_mac_move = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "mac_table_configuration.automatic_mac_move is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "mac_table_configuration.automatic_static_mode");
+        if (cli_parm != NULL)
+        {
+            val.automatic_static_mode = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "mac_table_configuration.automatic_static_mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf, mac_table_configuration, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_mac_table_configuration val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_IWF_CFG_ID_MAC_TABLE_CONFIGURATION, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf, mac_table_configuration, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "debug_flow_configuration.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpon_iwf_debug_flow_config val = { };
+        cli_parm = bcmcli_find_named_parm(session, "debug_flow_configuration.learn_untagged_flow_vids");
+        if (cli_parm != NULL)
+        {
+            val.learn_untagged_flow_vids = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "debug_flow_configuration.learn_untagged_flow_vids is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "debug_flow_configuration.untagged_flow_shaping_ms_per_sec");
+        if (cli_parm != NULL)
+        {
+            val.untagged_flow_shaping_ms_per_sec = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "debug_flow_configuration.untagged_flow_shaping_ms_per_sec is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf, debug_flow_configuration, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_gpon_iwf_debug_flow_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_IWF_CFG_ID_DEBUG_FLOW_CONFIGURATION, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf, debug_flow_configuration, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "forbidden_vlan_flow_gem_range_start");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf, forbidden_vlan_flow_gem_range_start, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf, forbidden_vlan_flow_gem_range_start, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_IWF_CFG_ID_FORBIDDEN_VLAN_FLOW_GEM_RANGE_START, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_set(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_set(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_iwf_cfg_clear(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_iwf_cfg cfg;        /**< declare main API struct */
+    bcmolt_gpon_iwf_key key = { };  /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_iwf_cfg cfg;\n");
+    bcmcli_log("bcmolt_gpon_iwf_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_clear");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_IWF_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, gpon_iwf, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, gpon_iwf, key);\n");
+
+    /* call API */
+    err = bcmolt_cfg_clear(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_clear(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_iwf_cfg_get_multi(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_iwf_cfg cfg;        /**< declare main API struct */
+    bcmolt_gpon_iwf_key key = { };  /**< declare key */
+    bcmolt_msg_set *msg_set = NULL; /**< declare message set */
+    uint32_t max_msgs;              /**< declare max number of msgs to get */
+    bcmos_bool invert_filter;       /**< declare filter invert flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_iwf_cfg cfg;\n");
+    bcmcli_log("bcmolt_gpon_iwf_key key = {  };\n");
+    bcmcli_log("bcmolt_msg_set* msg_set = NULL;\n");
+    bcmcli_log("uint32_t max_msgs;\n");
+    bcmcli_log("bcmos_bool invert_filter;\n");
+    apicli_print_start(session, "bcmolt_cfg_get_multi");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_IWF_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* set max number of msgs from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "max_msgs");
+    if (cli_parm != NULL)
+    {
+        max_msgs = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "max_msgs is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("max_msgs = %d;\n", max_msgs);
+
+    /* set filter invert flag from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "filter_invert");
+    if (cli_parm != NULL)
+    {
+        invert_filter = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "filter_invert is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("invert_filter = %s;\n", (invert_filter) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* allocate message set */
+    err = apicli_msg_set_alloc(byte_pool, BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    bcmcli_log("bcmolt_msg_set_alloc(BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, gpon_iwf, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, gpon_iwf, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "filter.iwf_mode");
+    if (cli_parm != NULL)
+    {
+        bcmolt_iwf_mode val;
+        val = (bcmolt_iwf_mode) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf, iwf_mode, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf, iwf_mode, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_IWF_CFG_ID_IWF_MODE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "iwf_mode");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf, iwf_mode);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf, iwf_mode);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.us_tpid_per_flow.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_arr_u16_2_hex val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.us_tpid_per_flow.arr");
+        if (cli_parm != NULL)
+        {
+            int32_t i0;
+            if (cli_parm->array_size != 2)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "array filter.us_tpid_per_flow.arr must have 2 elements\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i0 = 0; i0 < 2; i0++)
+            {
+                val.arr[i0] = cli_parm->values[i0].unumber;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.us_tpid_per_flow.arr is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf, us_tpid_per_flow, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_arr_u16_2_hex val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_IWF_CFG_ID_US_TPID_PER_FLOW, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf, us_tpid_per_flow, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "us_tpid_per_flow");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf, us_tpid_per_flow);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf, us_tpid_per_flow);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.us_otag_direct_tpid");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf, us_otag_direct_tpid, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf, us_otag_direct_tpid, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_IWF_CFG_ID_US_OTAG_DIRECT_TPID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "us_otag_direct_tpid");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf, us_otag_direct_tpid);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf, us_otag_direct_tpid);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.us_otag_direct_pbit");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf, us_otag_direct_pbit, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf, us_otag_direct_pbit, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_IWF_CFG_ID_US_OTAG_DIRECT_PBIT, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "us_otag_direct_pbit");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf, us_otag_direct_pbit);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf, us_otag_direct_pbit);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.ds_tpid.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_arr_u16_5_hex val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.ds_tpid.arr");
+        if (cli_parm != NULL)
+        {
+            int32_t i1;
+            if (cli_parm->array_size != 5)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "array filter.ds_tpid.arr must have 5 elements\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i1 = 0; i1 < 5; i1++)
+            {
+                val.arr[i1] = cli_parm->values[i1].unumber;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ds_tpid.arr is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf, ds_tpid, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_arr_u16_5_hex val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_IWF_CFG_ID_DS_TPID, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf, ds_tpid, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ds_tpid");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf, ds_tpid);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf, ds_tpid);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.mac_table_configuration.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_mac_table_configuration val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.mac_table_configuration.miss_fallback");
+        if (cli_parm != NULL)
+        {
+            val.miss_fallback = (bcmolt_mac_table_miss_fallback) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.mac_table_configuration.miss_fallback is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.mac_table_configuration.default_flow_id");
+        if (cli_parm != NULL)
+        {
+            val.default_flow_id = (bcmolt_flow_id) cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.mac_table_configuration.default_flow_id is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.mac_table_configuration.aging_time");
+        if (cli_parm != NULL)
+        {
+            val.aging_time = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.mac_table_configuration.aging_time is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.mac_table_configuration.learning_mode");
+        if (cli_parm != NULL)
+        {
+            val.learning_mode = (bcmolt_mac_table_learning_mode) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.mac_table_configuration.learning_mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.mac_table_configuration.automatic_mac_learning");
+        if (cli_parm != NULL)
+        {
+            val.automatic_mac_learning = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.mac_table_configuration.automatic_mac_learning is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.mac_table_configuration.automatic_mac_aging");
+        if (cli_parm != NULL)
+        {
+            val.automatic_mac_aging = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.mac_table_configuration.automatic_mac_aging is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.mac_table_configuration.automatic_mac_move");
+        if (cli_parm != NULL)
+        {
+            val.automatic_mac_move = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.mac_table_configuration.automatic_mac_move is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.mac_table_configuration.automatic_static_mode");
+        if (cli_parm != NULL)
+        {
+            val.automatic_static_mode = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.mac_table_configuration.automatic_static_mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf, mac_table_configuration, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_mac_table_configuration val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_IWF_CFG_ID_MAC_TABLE_CONFIGURATION, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf, mac_table_configuration, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mac_table_configuration");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf, mac_table_configuration);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf, mac_table_configuration);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.debug_flow_configuration.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpon_iwf_debug_flow_config val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.debug_flow_configuration.learn_untagged_flow_vids");
+        if (cli_parm != NULL)
+        {
+            val.learn_untagged_flow_vids = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.debug_flow_configuration.learn_untagged_flow_vids is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.debug_flow_configuration.untagged_flow_shaping_ms_per_sec");
+        if (cli_parm != NULL)
+        {
+            val.untagged_flow_shaping_ms_per_sec = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.debug_flow_configuration.untagged_flow_shaping_ms_per_sec is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf, debug_flow_configuration, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_gpon_iwf_debug_flow_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_IWF_CFG_ID_DEBUG_FLOW_CONFIGURATION, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf, debug_flow_configuration, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "debug_flow_configuration");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf, debug_flow_configuration);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf, debug_flow_configuration);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.mac_table_count");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf, mac_table_count, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf, mac_table_count, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_IWF_CFG_ID_MAC_TABLE_COUNT, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mac_table_count");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf, mac_table_count);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf, mac_table_count);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.forbidden_vlan_flow_gem_range_start");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf, forbidden_vlan_flow_gem_range_start, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf, forbidden_vlan_flow_gem_range_start, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_IWF_CFG_ID_FORBIDDEN_VLAN_FLOW_GEM_RANGE_START, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "forbidden_vlan_flow_gem_range_start");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf, forbidden_vlan_flow_gem_range_start);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf, forbidden_vlan_flow_gem_range_start);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_iwf, iwf_mode) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_iwf, us_tpid_per_flow) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_iwf, us_otag_direct_tpid) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_iwf, us_otag_direct_pbit) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_iwf, ds_tpid) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_iwf, mac_table_configuration) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_iwf, debug_flow_configuration) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_iwf, mac_table_count) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_iwf, forbidden_vlan_flow_gem_range_start))
+    {
+        BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf, all_properties);
+        bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);
+    bcmcli_log("bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_iwf_stat_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_iwf_stat stat;      /**< declare main API struct */
+    bcmolt_gpon_iwf_key key = { };  /**< declare key */
+    bcmos_bool clear_on_read;       /**< declare 'clear on read' flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_iwf_stat stat;\n");
+    bcmcli_log("bcmolt_gpon_iwf_key key = {  };\n");
+    bcmcli_log("bcmos_bool clear_on_read;\n");
+    apicli_print_start(session, "bcmolt_stat_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_IWF_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* set stat flags from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "clear");
+    if (cli_parm != NULL)
+    {
+        clear_on_read = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "clear is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("clear_on_read = %s;\n", (clear_on_read) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* init the API struct */
+    BCMOLT_STAT_INIT(&stat, gpon_iwf, key);
+    bcmcli_log("BCMOLT_STAT_INIT(&stat, gpon_iwf, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "ds_hit_event");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_iwf, ds_hit_event);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_iwf, ds_hit_event);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ds_miss_event");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_iwf, ds_miss_event);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_iwf, ds_miss_event);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ds_drop_due_to_miss_event");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_iwf, ds_drop_due_to_miss_event);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_iwf, ds_drop_due_to_miss_event);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ds_drop_due_to_hit_event");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_iwf, ds_drop_due_to_hit_event);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_iwf, ds_drop_due_to_hit_event);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ds_drop_to_disabled_gem");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_iwf, ds_drop_to_disabled_gem);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_iwf, ds_drop_to_disabled_gem);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "new_mac_discovered");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_iwf, new_mac_discovered);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_iwf, new_mac_discovered);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "move_event");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_iwf, move_event);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_iwf, move_event);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "new_mac_drop_due_to_fifo_full");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_iwf, new_mac_drop_due_to_fifo_full);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_iwf, new_mac_drop_due_to_fifo_full);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_STAT_PROP_IS_SET(&stat, gpon_iwf, ds_hit_event) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_iwf, ds_miss_event) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_iwf, ds_drop_due_to_miss_event) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_iwf, ds_drop_due_to_hit_event) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_iwf, ds_drop_to_disabled_gem) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_iwf, new_mac_discovered) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_iwf, move_event) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_iwf, new_mac_drop_due_to_fifo_full))
+    {
+        BCMOLT_STAT_PROP_GET(&stat, gpon_iwf, all_properties);
+        bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_iwf, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_stat_get(device_id, &stat.hdr, clear_on_read);
+    bcmcli_log("bcmolt_stat_get(device_id, &stat.hdr, clear_on_read);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &stat.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, stat.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_iwf_oper_flush_mac_table_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_iwf_flush_mac_table oper;   /**< declare main API struct */
+    bcmolt_gpon_iwf_key key = { };          /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_iwf_flush_mac_table oper;\n");
+    bcmcli_log("bcmolt_gpon_iwf_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_IWF_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, gpon_iwf, flush_mac_table, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, gpon_iwf, flush_mac_table, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "control");
+    if (cli_parm != NULL)
+    {
+        bcmolt_flush_mac_table_option val;
+        val = (bcmolt_flush_mac_table_option) cli_parm->value.enum_val;
+        BCMOLT_OPER_PROP_SET(&oper, gpon_iwf, flush_mac_table, control, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, gpon_iwf, flush_mac_table, control, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_OPER, BCMOLT_GPON_IWF_OPER_ID_FLUSH_MAC_TABLE, BCMOLT_GPON_IWF_FLUSH_MAC_TABLE_ID_CONTROL, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "vid");
+    if (cli_parm != NULL)
+    {
+        bcmolt_vlan_id val;
+        val = (bcmolt_vlan_id) cli_parm->value.unumber;
+        BCMOLT_OPER_PROP_SET(&oper, gpon_iwf, flush_mac_table, vid, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, gpon_iwf, flush_mac_table, vid, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_OPER, BCMOLT_GPON_IWF_OPER_ID_FLUSH_MAC_TABLE, BCMOLT_GPON_IWF_FLUSH_MAC_TABLE_ID_VID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "flow_id");
+    if (cli_parm != NULL)
+    {
+        bcmolt_flow_id val;
+        val = (bcmolt_flow_id) cli_parm->value.unumber;
+        BCMOLT_OPER_PROP_SET(&oper, gpon_iwf, flush_mac_table, flow_id, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, gpon_iwf, flush_mac_table, flow_id, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_OPER, BCMOLT_GPON_IWF_OPER_ID_FLUSH_MAC_TABLE, BCMOLT_GPON_IWF_FLUSH_MAC_TABLE_ID_FLOW_ID, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_iwf_oper_scan_mac_table_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_iwf_scan_mac_table oper;    /**< declare main API struct */
+    bcmolt_gpon_iwf_key key = { };          /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_iwf_scan_mac_table oper;\n");
+    bcmcli_log("bcmolt_gpon_iwf_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_IWF_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, gpon_iwf, scan_mac_table, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, gpon_iwf, scan_mac_table, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "mac_address");
+    if (cli_parm != NULL)
+    {
+        bcmos_mac_address val;
+        val = cli_parm->value.mac;
+        BCMOLT_OPER_PROP_SET(&oper, gpon_iwf, scan_mac_table, mac_address, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, gpon_iwf, scan_mac_table, mac_address, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_OPER, BCMOLT_GPON_IWF_OPER_ID_SCAN_MAC_TABLE, BCMOLT_GPON_IWF_SCAN_MAC_TABLE_ID_MAC_ADDRESS, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_iwf_stat_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_iwf_stat_cfg stat_cfg;  /**< declare main API struct */
+    bcmolt_gpon_iwf_key key = { };      /**< declare key */
+    bcmolt_gpon_iwf_stat_id stat_id;    /**< declare stat ID */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_iwf_stat_cfg stat_cfg;\n");
+    bcmcli_log("bcmolt_gpon_iwf_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_stat_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_IWF_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* set stat ID from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "sub");
+    if (cli_parm != NULL)
+    {
+        stat_id = (bcmolt_gpon_iwf_stat_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    /* init the API struct */
+    switch (stat_id)
+    {
+        case BCMOLT_GPON_IWF_STAT_ID_DS_HIT_EVENT:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_iwf, ds_hit_event, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_iwf, ds_hit_event, key);\n");
+            break;
+        case BCMOLT_GPON_IWF_STAT_ID_DS_MISS_EVENT:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_iwf, ds_miss_event, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_iwf, ds_miss_event, key);\n");
+            break;
+        case BCMOLT_GPON_IWF_STAT_ID_DS_DROP_DUE_TO_MISS_EVENT:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_iwf, ds_drop_due_to_miss_event, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_iwf, ds_drop_due_to_miss_event, key);\n");
+            break;
+        case BCMOLT_GPON_IWF_STAT_ID_DS_DROP_DUE_TO_HIT_EVENT:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_iwf, ds_drop_due_to_hit_event, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_iwf, ds_drop_due_to_hit_event, key);\n");
+            break;
+        case BCMOLT_GPON_IWF_STAT_ID_DS_DROP_TO_DISABLED_GEM:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_iwf, ds_drop_to_disabled_gem, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_iwf, ds_drop_to_disabled_gem, key);\n");
+            break;
+        case BCMOLT_GPON_IWF_STAT_ID_NEW_MAC_DISCOVERED:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_iwf, new_mac_discovered, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_iwf, new_mac_discovered, key);\n");
+            break;
+        case BCMOLT_GPON_IWF_STAT_ID_MOVE_EVENT:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_iwf, move_event, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_iwf, move_event, key);\n");
+            break;
+        case BCMOLT_GPON_IWF_STAT_ID_NEW_MAC_DROP_DUE_TO_FIFO_FULL:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_iwf, new_mac_drop_due_to_fifo_full, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_iwf, new_mac_drop_due_to_fifo_full, key);\n");
+            break;
+        default:
+            apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+            return BCM_ERR_RANGE;
+    }
+
+    /* call API */
+    err = bcmolt_stat_cfg_get(device_id, &stat_cfg.hdr);
+    bcmcli_log("bcmolt_stat_cfg_get(device_id, &stat_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &stat_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, stat_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_iwf_stat_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_iwf_stat_cfg stat_cfg;  /**< declare main API struct */
+    bcmolt_gpon_iwf_key key = { };      /**< declare key */
+    bcmolt_gpon_iwf_stat_id stat_id;    /**< declare stat ID */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_iwf_stat_cfg stat_cfg;\n");
+    bcmcli_log("bcmolt_gpon_iwf_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_stat_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_IWF_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* set stat ID from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "sub");
+    if (cli_parm != NULL)
+    {
+        stat_id = (bcmolt_gpon_iwf_stat_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    /* init the API struct */
+    switch (stat_id)
+    {
+        case BCMOLT_GPON_IWF_STAT_ID_DS_HIT_EVENT:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_iwf, ds_hit_event, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_iwf, ds_hit_event, key);\n");
+            break;
+        case BCMOLT_GPON_IWF_STAT_ID_DS_MISS_EVENT:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_iwf, ds_miss_event, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_iwf, ds_miss_event, key);\n");
+            break;
+        case BCMOLT_GPON_IWF_STAT_ID_DS_DROP_DUE_TO_MISS_EVENT:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_iwf, ds_drop_due_to_miss_event, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_iwf, ds_drop_due_to_miss_event, key);\n");
+            break;
+        case BCMOLT_GPON_IWF_STAT_ID_DS_DROP_DUE_TO_HIT_EVENT:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_iwf, ds_drop_due_to_hit_event, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_iwf, ds_drop_due_to_hit_event, key);\n");
+            break;
+        case BCMOLT_GPON_IWF_STAT_ID_DS_DROP_TO_DISABLED_GEM:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_iwf, ds_drop_to_disabled_gem, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_iwf, ds_drop_to_disabled_gem, key);\n");
+            break;
+        case BCMOLT_GPON_IWF_STAT_ID_NEW_MAC_DISCOVERED:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_iwf, new_mac_discovered, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_iwf, new_mac_discovered, key);\n");
+            break;
+        case BCMOLT_GPON_IWF_STAT_ID_MOVE_EVENT:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_iwf, move_event, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_iwf, move_event, key);\n");
+            break;
+        case BCMOLT_GPON_IWF_STAT_ID_NEW_MAC_DROP_DUE_TO_FIFO_FULL:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_iwf, new_mac_drop_due_to_fifo_full, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_iwf, new_mac_drop_due_to_fifo_full, key);\n");
+            break;
+        default:
+            apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+            return BCM_ERR_RANGE;
+    }
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_stat_alarm_config val = { };
+        cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.trigger.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.type");
+            if (cli_parm != NULL)
+            {
+                val.trigger.type = (bcmolt_stat_condition_type) cli_parm->value.enum_val;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.type is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            switch (val.trigger.type)
+            {
+                case BCMOLT_STAT_CONDITION_TYPE_RATE_THRESHOLD:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.rising");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_threshold.rising = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.rising is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.falling");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_threshold.falling = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.falling is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_RATE_RANGE:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.upper");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_range.upper = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.upper is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.lower");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_range.lower = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.lower is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_VALUE_THRESHOLD:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.limit");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.value_threshold.limit = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.limit is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_NONE:
+                    break;
+                default:
+                    apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+                    return BCM_ERR_RANGE;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.soak.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "cfg.soak.active_soak_time");
+            if (cli_parm != NULL)
+            {
+                val.soak.active_soak_time = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak.active_soak_time is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "cfg.soak.clear_soak_time");
+            if (cli_parm != NULL)
+            {
+                val.soak.clear_soak_time = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak.clear_soak_time is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_STAT_CFG_PROP_SET(&stat_cfg, gpon_iwf, cfg, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_stat_alarm_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_STAT_CFG, 0, BCMOLT_GPON_IWF_STAT_CFG_ID_CFG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_STAT_CFG_PROP_SET(&stat_cfg, gpon_iwf, cfg, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_stat_cfg_set(device_id, &stat_cfg.hdr);
+    bcmcli_log("bcmolt_stat_cfg_set(device_id, &stat_cfg.hdr);\n");
+    apicli_print_complete(session, err, stat_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_iwf_auto_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_iwf_auto_cfg auto_cfg;  /**< declare main API struct */
+    bcmolt_gpon_iwf_key key = { };      /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_iwf_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_gpon_iwf_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_get");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, gpon_iwf, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, gpon_iwf, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "flush_mac_table_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_iwf, flush_mac_table_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_iwf, flush_mac_table_completed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "scan_mac_table_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_iwf, scan_mac_table_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_iwf, scan_mac_table_completed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_cleared");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_iwf, stat_alarm_cleared);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_iwf, stat_alarm_cleared);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_raised");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_iwf, stat_alarm_raised);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_iwf, stat_alarm_raised);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_iwf, flush_mac_table_completed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_iwf, scan_mac_table_completed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_iwf, stat_alarm_cleared) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_iwf, stat_alarm_raised))
+    {
+        BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_iwf, all_properties);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_iwf, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &auto_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_iwf_auto_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_iwf_auto_cfg auto_cfg;  /**< declare main API struct */
+    bcmolt_gpon_iwf_key key = { };      /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_iwf_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_gpon_iwf_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_set");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, gpon_iwf, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, gpon_iwf, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "flush_mac_table_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_iwf, flush_mac_table_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_iwf, flush_mac_table_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_IWF_AUTO_CFG_ID_FLUSH_MAC_TABLE_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "scan_mac_table_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_iwf, scan_mac_table_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_iwf, scan_mac_table_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_IWF_AUTO_CFG_ID_SCAN_MAC_TABLE_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_cleared");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_iwf, stat_alarm_cleared, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_iwf, stat_alarm_cleared, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_IWF_AUTO_CFG_ID_STAT_ALARM_CLEARED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_raised");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_iwf, stat_alarm_raised, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_iwf, stat_alarm_raised, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_IWF_AUTO_CFG_ID_STAT_ALARM_RAISED, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);\n");
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_iwf_ds_egress_flow_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_iwf_ds_egress_flow_cfg cfg;         /**< declare main API struct */
+    bcmolt_gpon_iwf_ds_egress_flow_key key = { };   /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_iwf_ds_egress_flow_cfg cfg;\n");
+    bcmcli_log("bcmolt_gpon_iwf_ds_egress_flow_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_DS_EGRESS_FLOW, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_IWF_DS_EGRESS_FLOW_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "flow_id");
+    if (cli_parm != NULL)
+    {
+        key.flow_id = (bcmolt_flow_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "flow_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.flow_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_DS_EGRESS_FLOW, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_IWF_DS_EGRESS_FLOW_KEY_ID_FLOW_ID, &key.flow_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, gpon_iwf_ds_egress_flow, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, gpon_iwf_ds_egress_flow, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "gem_port");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf_ds_egress_flow, gem_port);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf_ds_egress_flow, gem_port);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "pbit_control");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf_ds_egress_flow, pbit_control);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf_ds_egress_flow, pbit_control);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_iwf_ds_egress_flow, gem_port) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_iwf_ds_egress_flow, pbit_control))
+    {
+        BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf_ds_egress_flow, all_properties);
+        bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf_ds_egress_flow, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_get(device_id, &cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_iwf_ds_egress_flow_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_iwf_ds_egress_flow_cfg cfg;         /**< declare main API struct */
+    bcmolt_gpon_iwf_ds_egress_flow_key key = { };   /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_iwf_ds_egress_flow_cfg cfg;\n");
+    bcmcli_log("bcmolt_gpon_iwf_ds_egress_flow_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_DS_EGRESS_FLOW, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_IWF_DS_EGRESS_FLOW_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "flow_id");
+    if (cli_parm != NULL)
+    {
+        key.flow_id = (bcmolt_flow_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "flow_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.flow_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_DS_EGRESS_FLOW, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_IWF_DS_EGRESS_FLOW_KEY_ID_FLOW_ID, &key.flow_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, gpon_iwf_ds_egress_flow, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, gpon_iwf_ds_egress_flow, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "gem_port");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpon_gem_id val;
+        val = (bcmolt_gpon_gem_id) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_ds_egress_flow, gem_port, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_ds_egress_flow, gem_port, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_DS_EGRESS_FLOW, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_IWF_DS_EGRESS_FLOW_CFG_ID_GEM_PORT, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "pbit_control");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_ds_egress_flow, pbit_control, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_ds_egress_flow, pbit_control, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_DS_EGRESS_FLOW, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_IWF_DS_EGRESS_FLOW_CFG_ID_PBIT_CONTROL, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_set(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_set(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_iwf_ds_egress_flow_cfg_clear(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_iwf_ds_egress_flow_cfg cfg;         /**< declare main API struct */
+    bcmolt_gpon_iwf_ds_egress_flow_key key = { };   /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_iwf_ds_egress_flow_cfg cfg;\n");
+    bcmcli_log("bcmolt_gpon_iwf_ds_egress_flow_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_clear");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_DS_EGRESS_FLOW, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_IWF_DS_EGRESS_FLOW_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "flow_id");
+    if (cli_parm != NULL)
+    {
+        key.flow_id = (bcmolt_flow_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "flow_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.flow_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_DS_EGRESS_FLOW, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_IWF_DS_EGRESS_FLOW_KEY_ID_FLOW_ID, &key.flow_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, gpon_iwf_ds_egress_flow, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, gpon_iwf_ds_egress_flow, key);\n");
+
+    /* call API */
+    err = bcmolt_cfg_clear(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_clear(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_iwf_ds_egress_flow_cfg_get_multi(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_iwf_ds_egress_flow_cfg cfg;         /**< declare main API struct */
+    bcmolt_gpon_iwf_ds_egress_flow_key key = { };   /**< declare key */
+    bcmolt_msg_set *msg_set = NULL;                 /**< declare message set */
+    uint32_t max_msgs;          /**< declare max number of msgs to get */
+    bcmos_bool invert_filter;   /**< declare filter invert flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_iwf_ds_egress_flow_cfg cfg;\n");
+    bcmcli_log("bcmolt_gpon_iwf_ds_egress_flow_key key = {  };\n");
+    bcmcli_log("bcmolt_msg_set* msg_set = NULL;\n");
+    bcmcli_log("uint32_t max_msgs;\n");
+    bcmcli_log("bcmos_bool invert_filter;\n");
+    apicli_print_start(session, "bcmolt_cfg_get_multi");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_DS_EGRESS_FLOW, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_IWF_DS_EGRESS_FLOW_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "flow_id");
+    if (cli_parm != NULL)
+    {
+        key.flow_id = (bcmolt_flow_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "flow_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.flow_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_DS_EGRESS_FLOW, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_IWF_DS_EGRESS_FLOW_KEY_ID_FLOW_ID, &key.flow_id);
+    bcmcli_log(";\n");
+
+    /* set max number of msgs from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "max_msgs");
+    if (cli_parm != NULL)
+    {
+        max_msgs = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "max_msgs is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("max_msgs = %d;\n", max_msgs);
+
+    /* set filter invert flag from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "filter_invert");
+    if (cli_parm != NULL)
+    {
+        invert_filter = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "filter_invert is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("invert_filter = %s;\n", (invert_filter) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* allocate message set */
+    err = apicli_msg_set_alloc(byte_pool, BCMOLT_OBJ_ID_GPON_IWF_DS_EGRESS_FLOW, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    bcmcli_log("bcmolt_msg_set_alloc(BCMOLT_OBJ_ID_GPON_IWF_DS_EGRESS_FLOW, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, gpon_iwf_ds_egress_flow, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, gpon_iwf_ds_egress_flow, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "filter.gem_port");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpon_gem_id val;
+        val = (bcmolt_gpon_gem_id) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_ds_egress_flow, gem_port, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_ds_egress_flow, gem_port, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_DS_EGRESS_FLOW, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_IWF_DS_EGRESS_FLOW_CFG_ID_GEM_PORT, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "gem_port");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf_ds_egress_flow, gem_port);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf_ds_egress_flow, gem_port);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.pbit_control");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_ds_egress_flow, pbit_control, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_ds_egress_flow, pbit_control, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_DS_EGRESS_FLOW, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_IWF_DS_EGRESS_FLOW_CFG_ID_PBIT_CONTROL, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "pbit_control");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf_ds_egress_flow, pbit_control);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf_ds_egress_flow, pbit_control);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_iwf_ds_egress_flow, gem_port) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_iwf_ds_egress_flow, pbit_control))
+    {
+        BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf_ds_egress_flow, all_properties);
+        bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf_ds_egress_flow, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);
+    bcmcli_log("bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_iwf_ds_ingress_flow_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_iwf_ds_ingress_flow_cfg cfg;        /**< declare main API struct */
+    bcmolt_gpon_iwf_ds_ingress_flow_key key = { };  /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_iwf_ds_ingress_flow_cfg cfg;\n");
+    bcmcli_log("bcmolt_gpon_iwf_ds_ingress_flow_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_DS_INGRESS_FLOW, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_IWF_DS_INGRESS_FLOW_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "vlan_id");
+    if (cli_parm != NULL)
+    {
+        key.vlan_id = (bcmolt_vlan_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "vlan_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.vlan_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_DS_INGRESS_FLOW, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_IWF_DS_INGRESS_FLOW_KEY_ID_VLAN_ID, &key.vlan_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, gpon_iwf_ds_ingress_flow, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, gpon_iwf_ds_ingress_flow, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "mapping_method");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf_ds_ingress_flow, mapping_method);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf_ds_ingress_flow, mapping_method);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mapping_tag");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf_ds_ingress_flow, mapping_tag);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf_ds_ingress_flow, mapping_tag);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "vlan_action");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf_ds_ingress_flow, vlan_action);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf_ds_ingress_flow, vlan_action);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_iwf_ds_ingress_flow, mapping_method) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_iwf_ds_ingress_flow, mapping_tag) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_iwf_ds_ingress_flow, vlan_action))
+    {
+        BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf_ds_ingress_flow, all_properties);
+        bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf_ds_ingress_flow, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_get(device_id, &cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_iwf_ds_ingress_flow_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_iwf_ds_ingress_flow_cfg cfg;        /**< declare main API struct */
+    bcmolt_gpon_iwf_ds_ingress_flow_key key = { };  /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_iwf_ds_ingress_flow_cfg cfg;\n");
+    bcmcli_log("bcmolt_gpon_iwf_ds_ingress_flow_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_DS_INGRESS_FLOW, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_IWF_DS_INGRESS_FLOW_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "vlan_id");
+    if (cli_parm != NULL)
+    {
+        key.vlan_id = (bcmolt_vlan_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "vlan_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.vlan_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_DS_INGRESS_FLOW, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_IWF_DS_INGRESS_FLOW_KEY_ID_VLAN_ID, &key.vlan_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, gpon_iwf_ds_ingress_flow, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, gpon_iwf_ds_ingress_flow, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "mapping_method");
+    if (cli_parm != NULL)
+    {
+        bcmolt_vlan_to_flow_mapping_method val;
+        val = (bcmolt_vlan_to_flow_mapping_method) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_ds_ingress_flow, mapping_method, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_ds_ingress_flow, mapping_method, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_DS_INGRESS_FLOW, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_IWF_DS_INGRESS_FLOW_CFG_ID_MAPPING_METHOD, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mapping_tag");
+    if (cli_parm != NULL)
+    {
+        bcmolt_mapping_tag_method val;
+        val = (bcmolt_mapping_tag_method) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_ds_ingress_flow, mapping_tag, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_ds_ingress_flow, mapping_tag, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_DS_INGRESS_FLOW, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_IWF_DS_INGRESS_FLOW_CFG_ID_MAPPING_TAG, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "vlan_action");
+    if (cli_parm != NULL)
+    {
+        bcmolt_ds_vlan_action val;
+        val = (bcmolt_ds_vlan_action) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_ds_ingress_flow, vlan_action, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_ds_ingress_flow, vlan_action, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_DS_INGRESS_FLOW, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_IWF_DS_INGRESS_FLOW_CFG_ID_VLAN_ACTION, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_set(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_set(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_iwf_ds_ingress_flow_cfg_clear(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_iwf_ds_ingress_flow_cfg cfg;        /**< declare main API struct */
+    bcmolt_gpon_iwf_ds_ingress_flow_key key = { };  /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_iwf_ds_ingress_flow_cfg cfg;\n");
+    bcmcli_log("bcmolt_gpon_iwf_ds_ingress_flow_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_clear");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_DS_INGRESS_FLOW, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_IWF_DS_INGRESS_FLOW_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "vlan_id");
+    if (cli_parm != NULL)
+    {
+        key.vlan_id = (bcmolt_vlan_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "vlan_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.vlan_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_DS_INGRESS_FLOW, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_IWF_DS_INGRESS_FLOW_KEY_ID_VLAN_ID, &key.vlan_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, gpon_iwf_ds_ingress_flow, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, gpon_iwf_ds_ingress_flow, key);\n");
+
+    /* call API */
+    err = bcmolt_cfg_clear(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_clear(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_iwf_ds_ingress_flow_cfg_get_multi(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_iwf_ds_ingress_flow_cfg cfg;        /**< declare main API struct */
+    bcmolt_gpon_iwf_ds_ingress_flow_key key = { };  /**< declare key */
+    bcmolt_msg_set *msg_set = NULL;                 /**< declare message set */
+    uint32_t max_msgs;          /**< declare max number of msgs to get */
+    bcmos_bool invert_filter;   /**< declare filter invert flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_iwf_ds_ingress_flow_cfg cfg;\n");
+    bcmcli_log("bcmolt_gpon_iwf_ds_ingress_flow_key key = {  };\n");
+    bcmcli_log("bcmolt_msg_set* msg_set = NULL;\n");
+    bcmcli_log("uint32_t max_msgs;\n");
+    bcmcli_log("bcmos_bool invert_filter;\n");
+    apicli_print_start(session, "bcmolt_cfg_get_multi");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_DS_INGRESS_FLOW, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_IWF_DS_INGRESS_FLOW_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "vlan_id");
+    if (cli_parm != NULL)
+    {
+        key.vlan_id = (bcmolt_vlan_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "vlan_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.vlan_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_DS_INGRESS_FLOW, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_IWF_DS_INGRESS_FLOW_KEY_ID_VLAN_ID, &key.vlan_id);
+    bcmcli_log(";\n");
+
+    /* set max number of msgs from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "max_msgs");
+    if (cli_parm != NULL)
+    {
+        max_msgs = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "max_msgs is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("max_msgs = %d;\n", max_msgs);
+
+    /* set filter invert flag from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "filter_invert");
+    if (cli_parm != NULL)
+    {
+        invert_filter = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "filter_invert is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("invert_filter = %s;\n", (invert_filter) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* allocate message set */
+    err = apicli_msg_set_alloc(byte_pool, BCMOLT_OBJ_ID_GPON_IWF_DS_INGRESS_FLOW, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    bcmcli_log("bcmolt_msg_set_alloc(BCMOLT_OBJ_ID_GPON_IWF_DS_INGRESS_FLOW, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, gpon_iwf_ds_ingress_flow, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, gpon_iwf_ds_ingress_flow, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "filter.mapping_method");
+    if (cli_parm != NULL)
+    {
+        bcmolt_vlan_to_flow_mapping_method val;
+        val = (bcmolt_vlan_to_flow_mapping_method) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_ds_ingress_flow, mapping_method, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_ds_ingress_flow, mapping_method, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_DS_INGRESS_FLOW, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_IWF_DS_INGRESS_FLOW_CFG_ID_MAPPING_METHOD, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mapping_method");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf_ds_ingress_flow, mapping_method);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf_ds_ingress_flow, mapping_method);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.mapping_tag");
+    if (cli_parm != NULL)
+    {
+        bcmolt_mapping_tag_method val;
+        val = (bcmolt_mapping_tag_method) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_ds_ingress_flow, mapping_tag, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_ds_ingress_flow, mapping_tag, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_DS_INGRESS_FLOW, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_IWF_DS_INGRESS_FLOW_CFG_ID_MAPPING_TAG, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mapping_tag");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf_ds_ingress_flow, mapping_tag);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf_ds_ingress_flow, mapping_tag);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.vlan_action");
+    if (cli_parm != NULL)
+    {
+        bcmolt_ds_vlan_action val;
+        val = (bcmolt_ds_vlan_action) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_ds_ingress_flow, vlan_action, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_ds_ingress_flow, vlan_action, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_DS_INGRESS_FLOW, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_IWF_DS_INGRESS_FLOW_CFG_ID_VLAN_ACTION, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "vlan_action");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf_ds_ingress_flow, vlan_action);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf_ds_ingress_flow, vlan_action);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_iwf_ds_ingress_flow, mapping_method) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_iwf_ds_ingress_flow, mapping_tag) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_iwf_ds_ingress_flow, vlan_action))
+    {
+        BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf_ds_ingress_flow, all_properties);
+        bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf_ds_ingress_flow, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);
+    bcmcli_log("bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_iwf_mac_table_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_iwf_mac_table_cfg cfg;  /**< declare main API struct */
+    bcmolt_gpon_iwf_mac_table_key key = { };    /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_iwf_mac_table_cfg cfg;\n");
+    bcmcli_log("bcmolt_gpon_iwf_mac_table_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_MAC_TABLE, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_IWF_MAC_TABLE_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "mac_address");
+    if (cli_parm != NULL)
+    {
+        key.mac_address = cli_parm->value.mac;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "mac_address is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.mac_address = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_MAC_TABLE, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_IWF_MAC_TABLE_KEY_ID_MAC_ADDRESS, &key.mac_address);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "vlan");
+    if (cli_parm != NULL)
+    {
+        key.vlan = (bcmolt_vlan_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "vlan is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.vlan = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_MAC_TABLE, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_IWF_MAC_TABLE_KEY_ID_VLAN, &key.vlan);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, gpon_iwf_mac_table, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, gpon_iwf_mac_table, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "flow_id");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf_mac_table, flow_id);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf_mac_table, flow_id);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf_mac_table, stat);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf_mac_table, stat);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "gem_port_id");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf_mac_table, gem_port_id);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf_mac_table, gem_port_id);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf_mac_table, onu_id);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf_mac_table, onu_id);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_iwf_mac_table, flow_id) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_iwf_mac_table, stat) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_iwf_mac_table, gem_port_id) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_iwf_mac_table, onu_id))
+    {
+        BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf_mac_table, all_properties);
+        bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf_mac_table, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_get(device_id, &cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_iwf_mac_table_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_iwf_mac_table_cfg cfg;          /**< declare main API struct */
+    bcmolt_gpon_iwf_mac_table_key key = { };    /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_iwf_mac_table_cfg cfg;\n");
+    bcmcli_log("bcmolt_gpon_iwf_mac_table_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_MAC_TABLE, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_IWF_MAC_TABLE_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "mac_address");
+    if (cli_parm != NULL)
+    {
+        key.mac_address = cli_parm->value.mac;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "mac_address is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.mac_address = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_MAC_TABLE, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_IWF_MAC_TABLE_KEY_ID_MAC_ADDRESS, &key.mac_address);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "vlan");
+    if (cli_parm != NULL)
+    {
+        key.vlan = (bcmolt_vlan_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "vlan is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.vlan = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_MAC_TABLE, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_IWF_MAC_TABLE_KEY_ID_VLAN, &key.vlan);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, gpon_iwf_mac_table, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, gpon_iwf_mac_table, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "flow_id");
+    if (cli_parm != NULL)
+    {
+        bcmolt_flow_id val;
+        val = (bcmolt_flow_id) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_mac_table, flow_id, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_mac_table, flow_id, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_MAC_TABLE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_FLOW_ID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_mac_table, stat, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_mac_table, stat, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_MAC_TABLE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_STAT, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_set(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_set(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_iwf_mac_table_cfg_clear(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_iwf_mac_table_cfg cfg;          /**< declare main API struct */
+    bcmolt_gpon_iwf_mac_table_key key = { };    /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_iwf_mac_table_cfg cfg;\n");
+    bcmcli_log("bcmolt_gpon_iwf_mac_table_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_clear");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_MAC_TABLE, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_IWF_MAC_TABLE_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "mac_address");
+    if (cli_parm != NULL)
+    {
+        key.mac_address = cli_parm->value.mac;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "mac_address is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.mac_address = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_MAC_TABLE, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_IWF_MAC_TABLE_KEY_ID_MAC_ADDRESS, &key.mac_address);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "vlan");
+    if (cli_parm != NULL)
+    {
+        key.vlan = (bcmolt_vlan_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "vlan is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.vlan = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_MAC_TABLE, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_IWF_MAC_TABLE_KEY_ID_VLAN, &key.vlan);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, gpon_iwf_mac_table, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, gpon_iwf_mac_table, key);\n");
+
+    /* call API */
+    err = bcmolt_cfg_clear(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_clear(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_iwf_mac_table_cfg_get_multi(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_iwf_mac_table_cfg cfg;          /**< declare main API struct */
+    bcmolt_gpon_iwf_mac_table_key key = { };    /**< declare key */
+    bcmolt_msg_set *msg_set = NULL;             /**< declare message set */
+    uint32_t max_msgs;          /**< declare max number of msgs to get */
+    bcmos_bool invert_filter;   /**< declare filter invert flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_iwf_mac_table_cfg cfg;\n");
+    bcmcli_log("bcmolt_gpon_iwf_mac_table_key key = {  };\n");
+    bcmcli_log("bcmolt_msg_set* msg_set = NULL;\n");
+    bcmcli_log("uint32_t max_msgs;\n");
+    bcmcli_log("bcmos_bool invert_filter;\n");
+    apicli_print_start(session, "bcmolt_cfg_get_multi");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_MAC_TABLE, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_IWF_MAC_TABLE_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "mac_address");
+    if (cli_parm != NULL)
+    {
+        key.mac_address = cli_parm->value.mac;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "mac_address is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.mac_address = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_MAC_TABLE, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_IWF_MAC_TABLE_KEY_ID_MAC_ADDRESS, &key.mac_address);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "vlan");
+    if (cli_parm != NULL)
+    {
+        key.vlan = (bcmolt_vlan_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "vlan is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.vlan = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_MAC_TABLE, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_IWF_MAC_TABLE_KEY_ID_VLAN, &key.vlan);
+    bcmcli_log(";\n");
+
+    /* set max number of msgs from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "max_msgs");
+    if (cli_parm != NULL)
+    {
+        max_msgs = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "max_msgs is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("max_msgs = %d;\n", max_msgs);
+
+    /* set filter invert flag from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "filter_invert");
+    if (cli_parm != NULL)
+    {
+        invert_filter = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "filter_invert is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("invert_filter = %s;\n", (invert_filter) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* allocate message set */
+    err = apicli_msg_set_alloc(byte_pool, BCMOLT_OBJ_ID_GPON_IWF_MAC_TABLE, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    bcmcli_log("bcmolt_msg_set_alloc(BCMOLT_OBJ_ID_GPON_IWF_MAC_TABLE, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, gpon_iwf_mac_table, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, gpon_iwf_mac_table, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "filter.flow_id");
+    if (cli_parm != NULL)
+    {
+        bcmolt_flow_id val;
+        val = (bcmolt_flow_id) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_mac_table, flow_id, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_mac_table, flow_id, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_MAC_TABLE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_FLOW_ID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "flow_id");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf_mac_table, flow_id);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf_mac_table, flow_id);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.stat");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_mac_table, stat, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_mac_table, stat, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_MAC_TABLE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_STAT, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf_mac_table, stat);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf_mac_table, stat);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.gem_port_id");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpon_gem_id val;
+        val = (bcmolt_gpon_gem_id) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_mac_table, gem_port_id, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_mac_table, gem_port_id, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_MAC_TABLE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_GEM_PORT_ID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "gem_port_id");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf_mac_table, gem_port_id);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf_mac_table, gem_port_id);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.onu_id");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpon_onu_id val;
+        val = (bcmolt_gpon_onu_id) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_mac_table, onu_id, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_mac_table, onu_id, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_MAC_TABLE, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_ONU_ID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf_mac_table, onu_id);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf_mac_table, onu_id);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_iwf_mac_table, flow_id) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_iwf_mac_table, stat) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_iwf_mac_table, gem_port_id) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_iwf_mac_table, onu_id))
+    {
+        BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf_mac_table, all_properties);
+        bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf_mac_table, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);
+    bcmcli_log("bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_iwf_mac_table_auto_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_iwf_mac_table_auto_cfg auto_cfg;    /**< declare main API struct */
+    bcmolt_gpon_iwf_mac_table_key key = { };        /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_iwf_mac_table_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_gpon_iwf_mac_table_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_get");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, gpon_iwf_mac_table, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, gpon_iwf_mac_table, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "mac_aged");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_iwf_mac_table, mac_aged);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_iwf_mac_table, mac_aged);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mac_dropped");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_iwf_mac_table, mac_dropped);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_iwf_mac_table, mac_dropped);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mac_move");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_iwf_mac_table, mac_move);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_iwf_mac_table, mac_move);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "new_mac");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_iwf_mac_table, new_mac);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_iwf_mac_table, new_mac);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_iwf_mac_table, mac_aged) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_iwf_mac_table, mac_dropped) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_iwf_mac_table, mac_move) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_iwf_mac_table, new_mac))
+    {
+        BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_iwf_mac_table, all_properties);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_iwf_mac_table, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &auto_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_iwf_mac_table_auto_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_iwf_mac_table_auto_cfg auto_cfg;    /**< declare main API struct */
+    bcmolt_gpon_iwf_mac_table_key key = { };        /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_iwf_mac_table_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_gpon_iwf_mac_table_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_set");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, gpon_iwf_mac_table, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, gpon_iwf_mac_table, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "mac_aged");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_iwf_mac_table, mac_aged, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_iwf_mac_table, mac_aged, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_MAC_TABLE, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID_MAC_AGED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mac_dropped");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_iwf_mac_table, mac_dropped, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_iwf_mac_table, mac_dropped, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_MAC_TABLE, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID_MAC_DROPPED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mac_move");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_iwf_mac_table, mac_move, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_iwf_mac_table, mac_move, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_MAC_TABLE, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID_MAC_MOVE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "new_mac");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_iwf_mac_table, new_mac, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_iwf_mac_table, new_mac, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_MAC_TABLE, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID_NEW_MAC, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);\n");
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_iwf_us_flow_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_iwf_us_flow_cfg cfg;        /**< declare main API struct */
+    bcmolt_gpon_iwf_us_flow_key key = { };  /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_iwf_us_flow_cfg cfg;\n");
+    bcmcli_log("bcmolt_gpon_iwf_us_flow_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_US_FLOW, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_IWF_US_FLOW_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "gem_port_id");
+    if (cli_parm != NULL)
+    {
+        key.gem_port_id = (bcmolt_gpon_gem_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "gem_port_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.gem_port_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_US_FLOW, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_IWF_US_FLOW_KEY_ID_GEM_PORT_ID, &key.gem_port_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, gpon_iwf_us_flow, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, gpon_iwf_us_flow, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "flow_id");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf_us_flow, flow_id);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf_us_flow, flow_id);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mac_learning");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf_us_flow, mac_learning);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf_us_flow, mac_learning);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "vlan_action");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf_us_flow, vlan_action);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf_us_flow, vlan_action);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "vlan_tag");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf_us_flow, vlan_tag);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf_us_flow, vlan_tag);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tpid_index");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf_us_flow, tpid_index);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf_us_flow, tpid_index);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_iwf_us_flow, flow_id) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_iwf_us_flow, mac_learning) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_iwf_us_flow, vlan_action) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_iwf_us_flow, vlan_tag) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_iwf_us_flow, tpid_index))
+    {
+        BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf_us_flow, all_properties);
+        bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_iwf_us_flow, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_get(device_id, &cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_iwf_us_flow_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_iwf_us_flow_cfg cfg;        /**< declare main API struct */
+    bcmolt_gpon_iwf_us_flow_key key = { };  /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_iwf_us_flow_cfg cfg;\n");
+    bcmcli_log("bcmolt_gpon_iwf_us_flow_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_US_FLOW, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_IWF_US_FLOW_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "gem_port_id");
+    if (cli_parm != NULL)
+    {
+        key.gem_port_id = (bcmolt_gpon_gem_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "gem_port_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.gem_port_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_US_FLOW, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_IWF_US_FLOW_KEY_ID_GEM_PORT_ID, &key.gem_port_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, gpon_iwf_us_flow, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, gpon_iwf_us_flow, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "flow_id");
+    if (cli_parm != NULL)
+    {
+        bcmolt_flow_id val;
+        val = (bcmolt_flow_id) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_us_flow, flow_id, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_us_flow, flow_id, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_US_FLOW, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_IWF_US_FLOW_CFG_ID_FLOW_ID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mac_learning");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_us_flow, mac_learning, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_us_flow, mac_learning, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_US_FLOW, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_IWF_US_FLOW_CFG_ID_MAC_LEARNING, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "vlan_action");
+    if (cli_parm != NULL)
+    {
+        bcmolt_us_vlan_action val;
+        val = (bcmolt_us_vlan_action) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_us_flow, vlan_action, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_us_flow, vlan_action, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_US_FLOW, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_IWF_US_FLOW_CFG_ID_VLAN_ACTION, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "vlan_tag.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_vlan_tag val = { };
+        cli_parm = bcmcli_find_named_parm(session, "vlan_tag.vlan_id");
+        if (cli_parm != NULL)
+        {
+            val.vlan_id = (bcmolt_vlan_id) cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "vlan_tag.vlan_id is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "vlan_tag.pbit");
+        if (cli_parm != NULL)
+        {
+            val.pbit = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "vlan_tag.pbit is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_us_flow, vlan_tag, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_vlan_tag val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_US_FLOW, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_IWF_US_FLOW_CFG_ID_VLAN_TAG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_us_flow, vlan_tag, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tpid_index");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_us_flow, tpid_index, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_us_flow, tpid_index, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_US_FLOW, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_IWF_US_FLOW_CFG_ID_TPID_INDEX, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_set(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_set(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_iwf_us_flow_cfg_clear(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_iwf_us_flow_cfg cfg;        /**< declare main API struct */
+    bcmolt_gpon_iwf_us_flow_key key = { };  /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_iwf_us_flow_cfg cfg;\n");
+    bcmcli_log("bcmolt_gpon_iwf_us_flow_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_clear");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_US_FLOW, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_IWF_US_FLOW_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "gem_port_id");
+    if (cli_parm != NULL)
+    {
+        key.gem_port_id = (bcmolt_gpon_gem_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "gem_port_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.gem_port_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_US_FLOW, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_IWF_US_FLOW_KEY_ID_GEM_PORT_ID, &key.gem_port_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, gpon_iwf_us_flow, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, gpon_iwf_us_flow, key);\n");
+
+    /* call API */
+    err = bcmolt_cfg_clear(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_clear(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_iwf_us_flow_cfg_get_multi(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_iwf_us_flow_cfg cfg;        /**< declare main API struct */
+    bcmolt_gpon_iwf_us_flow_key key = { };  /**< declare key */
+    bcmolt_msg_set *msg_set = NULL;         /**< declare message set */
+    uint32_t max_msgs;                      /**< declare max number of msgs to get */
+    bcmos_bool invert_filter;               /**< declare filter invert flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_iwf_us_flow_cfg cfg;\n");
+    bcmcli_log("bcmolt_gpon_iwf_us_flow_key key = {  };\n");
+    bcmcli_log("bcmolt_msg_set* msg_set = NULL;\n");
+    bcmcli_log("uint32_t max_msgs;\n");
+    bcmcli_log("bcmos_bool invert_filter;\n");
+    apicli_print_start(session, "bcmolt_cfg_get_multi");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_US_FLOW, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_IWF_US_FLOW_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "gem_port_id");
+    if (cli_parm != NULL)
+    {
+        key.gem_port_id = (bcmolt_gpon_gem_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "gem_port_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.gem_port_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_US_FLOW, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_IWF_US_FLOW_KEY_ID_GEM_PORT_ID, &key.gem_port_id);
+    bcmcli_log(";\n");
+
+    /* set max number of msgs from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "max_msgs");
+    if (cli_parm != NULL)
+    {
+        max_msgs = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "max_msgs is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("max_msgs = %d;\n", max_msgs);
+
+    /* set filter invert flag from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "filter_invert");
+    if (cli_parm != NULL)
+    {
+        invert_filter = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "filter_invert is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("invert_filter = %s;\n", (invert_filter) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* allocate message set */
+    err = apicli_msg_set_alloc(byte_pool, BCMOLT_OBJ_ID_GPON_IWF_US_FLOW, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    bcmcli_log("bcmolt_msg_set_alloc(BCMOLT_OBJ_ID_GPON_IWF_US_FLOW, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, gpon_iwf_us_flow, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, gpon_iwf_us_flow, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "filter.flow_id");
+    if (cli_parm != NULL)
+    {
+        bcmolt_flow_id val;
+        val = (bcmolt_flow_id) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_us_flow, flow_id, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_us_flow, flow_id, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_US_FLOW, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_IWF_US_FLOW_CFG_ID_FLOW_ID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "flow_id");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf_us_flow, flow_id);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf_us_flow, flow_id);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.mac_learning");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_us_flow, mac_learning, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_us_flow, mac_learning, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_US_FLOW, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_IWF_US_FLOW_CFG_ID_MAC_LEARNING, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mac_learning");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf_us_flow, mac_learning);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf_us_flow, mac_learning);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.vlan_action");
+    if (cli_parm != NULL)
+    {
+        bcmolt_us_vlan_action val;
+        val = (bcmolt_us_vlan_action) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_us_flow, vlan_action, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_us_flow, vlan_action, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_US_FLOW, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_IWF_US_FLOW_CFG_ID_VLAN_ACTION, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "vlan_action");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf_us_flow, vlan_action);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf_us_flow, vlan_action);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.vlan_tag.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_vlan_tag val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.vlan_tag.vlan_id");
+        if (cli_parm != NULL)
+        {
+            val.vlan_id = (bcmolt_vlan_id) cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.vlan_tag.vlan_id is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.vlan_tag.pbit");
+        if (cli_parm != NULL)
+        {
+            val.pbit = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.vlan_tag.pbit is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_us_flow, vlan_tag, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_vlan_tag val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_US_FLOW, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_IWF_US_FLOW_CFG_ID_VLAN_TAG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_us_flow, vlan_tag, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "vlan_tag");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf_us_flow, vlan_tag);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf_us_flow, vlan_tag);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.tpid_index");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_us_flow, tpid_index, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_us_flow, tpid_index, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_IWF_US_FLOW, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_IWF_US_FLOW_CFG_ID_TPID_INDEX, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tpid_index");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf_us_flow, tpid_index);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf_us_flow, tpid_index);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_iwf_us_flow, flow_id) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_iwf_us_flow, mac_learning) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_iwf_us_flow, vlan_action) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_iwf_us_flow, vlan_tag) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_iwf_us_flow, tpid_index))
+    {
+        BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf_us_flow, all_properties);
+        bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf_us_flow, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);
+    bcmcli_log("bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_ni_cfg_get(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_ni_cfg cfg;         /**< declare main API struct */
+    bcmolt_gpon_ni_key key = { };   /**< declare key */
+    uint8_t *list_mem;              /**< declare memory buffer for variable-sized lists */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_ni_cfg cfg;\n");
+    bcmcli_log("bcmolt_gpon_ni_key key = {  };\n");
+    bcmcli_log("uint8_t* list_mem;\n");
+    apicli_print_start(session, "bcmolt_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_NI_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, gpon_ni, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, gpon_ni, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "pon_status");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, pon_status);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, pon_status);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "available_bandwidth");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, available_bandwidth);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, available_bandwidth);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "number_of_active_onus");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, number_of_active_onus);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, number_of_active_onus);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "number_of_active_standby_onus");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, number_of_active_standby_onus);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, number_of_active_standby_onus);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "prbs_status");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, prbs_status);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, prbs_status);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "pon_distance");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, pon_distance);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, pon_distance);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ranging_window_size");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, ranging_window_size);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, ranging_window_size);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "preassigned_equalization_delay");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, preassigned_equalization_delay);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, preassigned_equalization_delay);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "eqd_cycles_number");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, eqd_cycles_number);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, eqd_cycles_number);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "power_level");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, power_level);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, power_level);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ds_fec_mode");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, ds_fec_mode);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, ds_fec_mode);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "drift_control");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, drift_control);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, drift_control);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ds_ber_reporting_interval");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, ds_ber_reporting_interval);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, ds_ber_reporting_interval);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "los_alarm_threshold");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, los_alarm_threshold);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, los_alarm_threshold);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "los_initial_value");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, los_initial_value);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, los_initial_value);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_alarms_thresholds");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, onu_alarms_thresholds);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, onu_alarms_thresholds);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ber_monitor");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, ber_monitor);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, ber_monitor);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ploam_ack_timeout");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, ploam_ack_timeout);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, ploam_ack_timeout);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_activation");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, onu_activation);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, onu_activation);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "sn_acquisition");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, sn_acquisition);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, sn_acquisition);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "key_exchange");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, key_exchange);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, key_exchange);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "protection_switching");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, protection_switching);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, protection_switching);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "cbr_rt_allocation_profile");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, cbr_rt_allocation_profile);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, cbr_rt_allocation_profile);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "cbr_nrt_allocation_profile");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, cbr_nrt_allocation_profile);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, cbr_nrt_allocation_profile);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "dba");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, dba);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, dba);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "power_management");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, power_management);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, power_management);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rogue_onu_detection_process");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, rogue_onu_detection_process);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, rogue_onu_detection_process);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "periodic_standby_pon_monitoring");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, periodic_standby_pon_monitoring);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, periodic_standby_pon_monitoring);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "prbs_checker");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, prbs_checker);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, prbs_checker);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "prbs_generator");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, prbs_generator);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, prbs_generator);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "min_data_alloc_id");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, min_data_alloc_id);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, min_data_alloc_id);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "automatic_onu_deactivation");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, automatic_onu_deactivation);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, automatic_onu_deactivation);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "us_bandwidth_limit");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, us_bandwidth_limit);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, us_bandwidth_limit);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "all_onus");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, all_onus);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, all_onus);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "all_mcast_gem_ports");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, all_mcast_gem_ports);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, all_mcast_gem_ports);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "debug");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, debug);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, debug);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_upgrade_params");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, onu_upgrade_params);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, onu_upgrade_params);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ps_c_wait_before_deactivation_timeout");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, ps_c_wait_before_deactivation_timeout);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, ps_c_wait_before_deactivation_timeout);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "bip32_indication_control");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, bip32_indication_control);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, bip32_indication_control);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_ni, pon_status) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_ni, available_bandwidth) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_ni, number_of_active_onus) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_ni, number_of_active_standby_onus) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_ni, prbs_status) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_ni, pon_distance) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_ni, ranging_window_size) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_ni, preassigned_equalization_delay) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_ni, eqd_cycles_number) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_ni, power_level) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_ni, ds_fec_mode) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_ni, drift_control) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_ni, ds_ber_reporting_interval) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_ni, los_alarm_threshold) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_ni, los_initial_value) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_ni, onu_alarms_thresholds) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_ni, ber_monitor) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_ni, ploam_ack_timeout) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_ni, onu_activation) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_ni, sn_acquisition) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_ni, key_exchange) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_ni, protection_switching) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_ni, cbr_rt_allocation_profile) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_ni, cbr_nrt_allocation_profile) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_ni, dba) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_ni, power_management) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_ni, rogue_onu_detection_process) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_ni, periodic_standby_pon_monitoring) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_ni, prbs_checker) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_ni, prbs_generator) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_ni, min_data_alloc_id) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_ni, automatic_onu_deactivation) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_ni, us_bandwidth_limit) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_ni, all_onus) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_ni, all_mcast_gem_ports) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_ni, debug) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_ni, onu_upgrade_params) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_ni, ps_c_wait_before_deactivation_timeout) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_ni, bip32_indication_control))
+    {
+        BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, all_properties);
+        bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_ni, all_properties);\n");
+    }
+
+    /* set memory to use for variable-sized lists */
+    list_mem = apicli_byte_pool_calloc(byte_pool, APICLI_DYNAMIC_LIST_BUFFER_SIZE);
+    if (list_mem == NULL)
+    {
+        apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+        return BCM_ERR_NOMEM;
+    }
+
+    bcmcli_log("list_mem = bcmos_calloc(APICLI_DYNAMIC_LIST_BUFFER_SIZE);\n");
+    BCMOLT_CFG_LIST_BUF_SET(&cfg, gpon_ni, list_mem, APICLI_DYNAMIC_LIST_BUFFER_SIZE);
+    bcmcli_log("BCMOLT_CFG_LIST_BUF_SET(&cfg, gpon_ni, list_mem, APICLI_DYNAMIC_LIST_BUFFER_SIZE);\n");
+
+    /* call API */
+    err = bcmolt_cfg_get(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_get(device_id, &cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_ni_cfg_set(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_ni_cfg cfg;         /**< declare main API struct */
+    bcmolt_gpon_ni_key key = { };   /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_ni_cfg cfg;\n");
+    bcmcli_log("bcmolt_gpon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_NI_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, gpon_ni, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, gpon_ni, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "pon_distance.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_pon_distance val = { };
+        cli_parm = bcmcli_find_named_parm(session, "pon_distance.max_log_distance");
+        if (cli_parm != NULL)
+        {
+            val.max_log_distance = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "pon_distance.max_log_distance is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "pon_distance.max_diff_reach");
+        if (cli_parm != NULL)
+        {
+            val.max_diff_reach = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "pon_distance.max_diff_reach is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, pon_distance, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_pon_distance val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_PON_DISTANCE, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, pon_distance, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "preassigned_equalization_delay");
+    if (cli_parm != NULL)
+    {
+        uint32_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, preassigned_equalization_delay, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, preassigned_equalization_delay, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_PREASSIGNED_EQUALIZATION_DELAY, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "eqd_cycles_number");
+    if (cli_parm != NULL)
+    {
+        uint32_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, eqd_cycles_number, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, eqd_cycles_number, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_EQD_CYCLES_NUMBER, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "power_level.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_pon_power_level val = { };
+        cli_parm = bcmcli_find_named_parm(session, "power_level.pls_maximum_allocation_size");
+        if (cli_parm != NULL)
+        {
+            val.pls_maximum_allocation_size = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "power_level.pls_maximum_allocation_size is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "power_level.mode");
+        if (cli_parm != NULL)
+        {
+            val.mode = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "power_level.mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, power_level, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_pon_power_level val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_POWER_LEVEL, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, power_level, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ds_fec_mode");
+    if (cli_parm != NULL)
+    {
+        bcmolt_control_state val;
+        val = (bcmolt_control_state) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, ds_fec_mode, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, ds_fec_mode, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_DS_FEC_MODE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "drift_control.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_pon_drift_control val = { };
+        cli_parm = bcmcli_find_named_parm(session, "drift_control.drift_interval");
+        if (cli_parm != NULL)
+        {
+            val.drift_interval = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "drift_control.drift_interval is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "drift_control.drift_limit");
+        if (cli_parm != NULL)
+        {
+            val.drift_limit = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "drift_control.drift_limit is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "drift_control.transmission_control_limit");
+        if (cli_parm != NULL)
+        {
+            val.transmission_control_limit = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "drift_control.transmission_control_limit is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, drift_control, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_pon_drift_control val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_DRIFT_CONTROL, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, drift_control, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ds_ber_reporting_interval");
+    if (cli_parm != NULL)
+    {
+        bcmolt_ber_interval val;
+        val = (bcmolt_ber_interval) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, ds_ber_reporting_interval, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, ds_ber_reporting_interval, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_DS_BER_REPORTING_INTERVAL, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "los_alarm_threshold");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, los_alarm_threshold, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, los_alarm_threshold, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_LOS_ALARM_THRESHOLD, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "los_initial_value");
+    if (cli_parm != NULL)
+    {
+        bcmolt_status val;
+        val = (bcmolt_status) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, los_initial_value, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, los_initial_value, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_LOS_INITIAL_VALUE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "onu_alarms_thresholds.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpon_onu_alarms_thresholds val = { };
+        cli_parm = bcmcli_find_named_parm(session, "onu_alarms_thresholds.losi");
+        if (cli_parm != NULL)
+        {
+            val.losi = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "onu_alarms_thresholds.losi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "onu_alarms_thresholds.lofi");
+        if (cli_parm != NULL)
+        {
+            val.lofi = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "onu_alarms_thresholds.lofi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "onu_alarms_thresholds.loami");
+        if (cli_parm != NULL)
+        {
+            val.loami = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "onu_alarms_thresholds.loami is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, onu_alarms_thresholds, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_gpon_onu_alarms_thresholds val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_ONU_ALARMS_THRESHOLDS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, onu_alarms_thresholds, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "ber_monitor.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_ber_monitor_params val = { };
+        cli_parm = bcmcli_find_named_parm(session, "ber_monitor.us_ber_interval");
+        if (cli_parm != NULL)
+        {
+            val.us_ber_interval = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ber_monitor.us_ber_interval is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "ber_monitor.sf_threshold");
+        if (cli_parm != NULL)
+        {
+            val.sf_threshold = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ber_monitor.sf_threshold is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "ber_monitor.sd_threshold");
+        if (cli_parm != NULL)
+        {
+            val.sd_threshold = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ber_monitor.sd_threshold is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, ber_monitor, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_ber_monitor_params val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_BER_MONITOR, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, ber_monitor, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ploam_ack_timeout");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, ploam_ack_timeout, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, ploam_ack_timeout, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_PLOAM_ACK_TIMEOUT, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "onu_activation.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpon_onu_activation val = { };
+        cli_parm = bcmcli_find_named_parm(session, "onu_activation.key_exchange");
+        if (cli_parm != NULL)
+        {
+            val.key_exchange = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "onu_activation.key_exchange is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "onu_activation.password_authentication");
+        if (cli_parm != NULL)
+        {
+            val.password_authentication = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "onu_activation.password_authentication is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "onu_activation.fail_due_to_password_authentication_failure");
+        if (cli_parm != NULL)
+        {
+            val.fail_due_to_password_authentication_failure = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "onu_activation.fail_due_to_password_authentication_failure is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, onu_activation, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_gpon_onu_activation val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_ONU_ACTIVATION, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, onu_activation, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "sn_acquisition.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpon_sn_acquisition val = { };
+        cli_parm = bcmcli_find_named_parm(session, "sn_acquisition.interval");
+        if (cli_parm != NULL)
+        {
+            val.interval = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "sn_acquisition.interval is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "sn_acquisition.control");
+        if (cli_parm != NULL)
+        {
+            val.control = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "sn_acquisition.control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "sn_acquisition.onu_post_discovery_mode");
+        if (cli_parm != NULL)
+        {
+            val.onu_post_discovery_mode = (bcmolt_onu_post_discovery_mode) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "sn_acquisition.onu_post_discovery_mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, sn_acquisition, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_gpon_sn_acquisition val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_SN_ACQUISITION, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, sn_acquisition, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "key_exchange.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpon_key_exchange val = { };
+        cli_parm = bcmcli_find_named_parm(session, "key_exchange.interval");
+        if (cli_parm != NULL)
+        {
+            val.interval = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "key_exchange.interval is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "key_exchange.control");
+        if (cli_parm != NULL)
+        {
+            val.control = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "key_exchange.control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "key_exchange.mode");
+        if (cli_parm != NULL)
+        {
+            val.mode = (bcmolt_key_exchange_mode) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "key_exchange.mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "key_exchange.encrypted_ports_only");
+        if (cli_parm != NULL)
+        {
+            val.encrypted_ports_only = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "key_exchange.encrypted_ports_only is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, key_exchange, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_gpon_key_exchange val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_KEY_EXCHANGE, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, key_exchange, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "protection_switching.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_pon_protection_switching val = { };
+        cli_parm = bcmcli_find_named_parm(session, "protection_switching.timeout");
+        if (cli_parm != NULL)
+        {
+            val.timeout = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "protection_switching.timeout is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "protection_switching.gpio_pin");
+        if (cli_parm != NULL)
+        {
+            val.gpio_pin = (bcmolt_gpio_pin) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "protection_switching.gpio_pin is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "protection_switching.options");
+        if (cli_parm != NULL)
+        {
+            val.options = (bcmolt_pon_protection_switching_options) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "protection_switching.options is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, protection_switching, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_pon_protection_switching val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_PROTECTION_SWITCHING, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, protection_switching, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "cbr_rt_allocation_profile.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_cbr_rt_allocation_profile val = { };
+        cli_parm = bcmcli_find_named_parm(session, "cbr_rt_allocation_profile.ma_7");
+        if (cli_parm != NULL)
+        {
+            val.ma_7 = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cbr_rt_allocation_profile.ma_7 is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "cbr_rt_allocation_profile.ma_3");
+        if (cli_parm != NULL)
+        {
+            val.ma_3 = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cbr_rt_allocation_profile.ma_3 is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "cbr_rt_allocation_profile.ma_1");
+        if (cli_parm != NULL)
+        {
+            val.ma_1 = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cbr_rt_allocation_profile.ma_1 is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, cbr_rt_allocation_profile, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_cbr_rt_allocation_profile val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_CBR_RT_ALLOCATION_PROFILE, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, cbr_rt_allocation_profile, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "cbr_nrt_allocation_profile.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_arr_u16_2 val = { };
+        cli_parm = bcmcli_find_named_parm(session, "cbr_nrt_allocation_profile.arr");
+        if (cli_parm != NULL)
+        {
+            int32_t i0;
+            if (cli_parm->array_size != 2)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "array cbr_nrt_allocation_profile.arr must have 2 elements\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i0 = 0; i0 < 2; i0++)
+            {
+                val.arr[i0] = cli_parm->values[i0].unumber;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cbr_nrt_allocation_profile.arr is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, cbr_nrt_allocation_profile, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_arr_u16_2 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_CBR_NRT_ALLOCATION_PROFILE, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, cbr_nrt_allocation_profile, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "dba.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_pon_dba val = { };
+        cli_parm = bcmcli_find_named_parm(session, "dba.sr_reporting_block_size");
+        if (cli_parm != NULL)
+        {
+            val.sr_reporting_block_size = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "dba.sr_reporting_block_size is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "dba.dba_mode");
+        if (cli_parm != NULL)
+        {
+            val.dba_mode = (bcmolt_dba_mode) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "dba.dba_mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, dba, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_pon_dba val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_DBA, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, dba, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "power_management.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_onu_power_management_configuration val = { };
+        cli_parm = bcmcli_find_named_parm(session, "power_management.ilowpower");
+        if (cli_parm != NULL)
+        {
+            val.ilowpower = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "power_management.ilowpower is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "power_management.iaware");
+        if (cli_parm != NULL)
+        {
+            val.iaware = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "power_management.iaware is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "power_management.itransinit");
+        if (cli_parm != NULL)
+        {
+            val.itransinit = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "power_management.itransinit is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "power_management.itxinit");
+        if (cli_parm != NULL)
+        {
+            val.itxinit = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "power_management.itxinit is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "power_management.irxoff");
+        if (cli_parm != NULL)
+        {
+            val.irxoff = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "power_management.irxoff is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "power_management.low_power_clobi");
+        if (cli_parm != NULL)
+        {
+            val.low_power_clobi = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "power_management.low_power_clobi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, power_management, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_onu_power_management_configuration val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_POWER_MANAGEMENT, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, power_management, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "rogue_onu_detection_process.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_rogue_onu_detection_process val = { };
+        cli_parm = bcmcli_find_named_parm(session, "rogue_onu_detection_process.control");
+        if (cli_parm != NULL)
+        {
+            val.control = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "rogue_onu_detection_process.control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "rogue_onu_detection_process.detection_algorithm.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "rogue_onu_detection_process.detection_algorithm.algorithm_type");
+            if (cli_parm != NULL)
+            {
+                val.detection_algorithm.algorithm_type = (bcmolt_rogue_detection_algorithm_type) cli_parm->value.enum_val;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "rogue_onu_detection_process.detection_algorithm.algorithm_type is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            switch (val.detection_algorithm.algorithm_type)
+            {
+                case BCMOLT_ROGUE_DETECTION_ALGORITHM_TYPE_EARLY_ROGUE_DETECTION:
+                    cli_parm = bcmcli_find_named_parm(session, "rogue_onu_detection_process.detection_algorithm.measurement_type");
+                    if (cli_parm != NULL)
+                    {
+                        val.detection_algorithm.u.early_rogue_detection.measurement_type = (bcmolt_rogue_detection_window) cli_parm->value.enum_val;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "rogue_onu_detection_process.detection_algorithm.measurement_type is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "rogue_onu_detection_process.detection_algorithm.interval");
+                    if (cli_parm != NULL)
+                    {
+                        val.detection_algorithm.u.early_rogue_detection.interval = cli_parm->value.unumber;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "rogue_onu_detection_process.detection_algorithm.interval is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "rogue_onu_detection_process.detection_algorithm.second_ranging_window");
+                    if (cli_parm != NULL)
+                    {
+                        val.detection_algorithm.u.early_rogue_detection.second_ranging_window = cli_parm->value.number;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "rogue_onu_detection_process.detection_algorithm.second_ranging_window is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "rogue_onu_detection_process.detection_algorithm.alloc_type_to_scan");
+                    if (cli_parm != NULL)
+                    {
+                        val.detection_algorithm.u.early_rogue_detection.alloc_type_to_scan = (bcmolt_alloc_type_to_scan) cli_parm->value.enum_val;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "rogue_onu_detection_process.detection_algorithm.alloc_type_to_scan is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_ROGUE_DETECTION_ALGORITHM_TYPE_SPECIAL_MAP:
+                    cli_parm = bcmcli_find_parm_by_prefix(session, "rogue_onu_detection_process.detection_algorithm.accesses.");
+                    if (cli_parm != NULL)
+                    {
+                        int32_t i1;
+                        val.detection_algorithm.u.special_map.accesses.val = apicli_byte_pool_calloc(byte_pool, cli_parm->array_size * sizeof(*val.detection_algorithm.u.special_map.accesses.val));
+                        if (val.detection_algorithm.u.special_map.accesses.val == NULL)
+                        {
+                            apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+                            return BCM_ERR_NOMEM;
+                        }
+
+                        val.detection_algorithm.u.special_map.accesses.len = cli_parm->array_size;
+                        cli_parm = bcmcli_find_named_parm(session, "rogue_onu_detection_process.detection_algorithm.accesses.plo_size");
+                        if (cli_parm != NULL)
+                        {
+                            if (cli_parm->array_size != val.detection_algorithm.u.special_map.accesses.len)
+                            {
+                                apicli_print_complete(session, BCM_ERR_PARM, "rogue_onu_detection_process.detection_algorithm.accesses.plo_size is a different size than other arrays in the struct\n");
+                                return BCM_ERR_PARM;
+                            }
+
+                            for (i1 = 0; i1 < val.detection_algorithm.u.special_map.accesses.len; i1++)
+                            {
+                                val.detection_algorithm.u.special_map.accesses.val[i1].plo_size = cli_parm->values[i1].unumber;
+                            }
+                        }
+
+                        cli_parm = bcmcli_find_named_parm(session, "rogue_onu_detection_process.detection_algorithm.accesses.alloc_id");
+                        if (cli_parm != NULL)
+                        {
+                            if (cli_parm->array_size != val.detection_algorithm.u.special_map.accesses.len)
+                            {
+                                apicli_print_complete(session, BCM_ERR_PARM, "rogue_onu_detection_process.detection_algorithm.accesses.alloc_id is a different size than other arrays in the struct\n");
+                                return BCM_ERR_PARM;
+                            }
+
+                            for (i1 = 0; i1 < val.detection_algorithm.u.special_map.accesses.len; i1++)
+                            {
+                                val.detection_algorithm.u.special_map.accesses.val[i1].alloc_id = (bcmolt_pon_alloc_id) cli_parm->values[i1].unumber;
+                            }
+                        }
+
+                        cli_parm = bcmcli_find_named_parm(session, "rogue_onu_detection_process.detection_algorithm.accesses.onu_id");
+                        if (cli_parm != NULL)
+                        {
+                            if (cli_parm->array_size != val.detection_algorithm.u.special_map.accesses.len)
+                            {
+                                apicli_print_complete(session, BCM_ERR_PARM, "rogue_onu_detection_process.detection_algorithm.accesses.onu_id is a different size than other arrays in the struct\n");
+                                return BCM_ERR_PARM;
+                            }
+
+                            for (i1 = 0; i1 < val.detection_algorithm.u.special_map.accesses.len; i1++)
+                            {
+                                val.detection_algorithm.u.special_map.accesses.val[i1].onu_id = (bcmolt_pon_onu_id) cli_parm->values[i1].unumber;
+                            }
+                        }
+
+                        cli_parm = bcmcli_find_named_parm(session, "rogue_onu_detection_process.detection_algorithm.accesses.access_size");
+                        if (cli_parm != NULL)
+                        {
+                            if (cli_parm->array_size != val.detection_algorithm.u.special_map.accesses.len)
+                            {
+                                apicli_print_complete(session, BCM_ERR_PARM, "rogue_onu_detection_process.detection_algorithm.accesses.access_size is a different size than other arrays in the struct\n");
+                                return BCM_ERR_PARM;
+                            }
+
+                            for (i1 = 0; i1 < val.detection_algorithm.u.special_map.accesses.len; i1++)
+                            {
+                                val.detection_algorithm.u.special_map.accesses.val[i1].access_size = cli_parm->values[i1].unumber;
+                            }
+                        }
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "rogue_onu_detection_process.detection_algorithm.accesses is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_ROGUE_DETECTION_ALGORITHM_TYPE_EXTENDED_GUARD_TIME:
+                    cli_parm = bcmcli_find_named_parm(session, "rogue_onu_detection_process.detection_algorithm.additional_guard_time");
+                    if (cli_parm != NULL)
+                    {
+                        val.detection_algorithm.u.extended_guard_time.additional_guard_time = cli_parm->value.unumber;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "rogue_onu_detection_process.detection_algorithm.additional_guard_time is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                default:
+                    apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+                    return BCM_ERR_RANGE;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "rogue_onu_detection_process.detection_algorithm is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, rogue_onu_detection_process, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_rogue_onu_detection_process val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_ROGUE_ONU_DETECTION_PROCESS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, rogue_onu_detection_process, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "periodic_standby_pon_monitoring.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_periodic_standby_pon_monitoring val = { };
+        cli_parm = bcmcli_find_named_parm(session, "periodic_standby_pon_monitoring.interval");
+        if (cli_parm != NULL)
+        {
+            val.interval = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "periodic_standby_pon_monitoring.interval is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "periodic_standby_pon_monitoring.control");
+        if (cli_parm != NULL)
+        {
+            val.control = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "periodic_standby_pon_monitoring.control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, periodic_standby_pon_monitoring, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_periodic_standby_pon_monitoring val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_PERIODIC_STANDBY_PON_MONITORING, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, periodic_standby_pon_monitoring, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "prbs_checker.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_prbs_checker_config val = { };
+        cli_parm = bcmcli_find_named_parm(session, "prbs_checker.polynom");
+        if (cli_parm != NULL)
+        {
+            val.polynom = (bcmolt_prbs_polynomial) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "prbs_checker.polynom is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "prbs_checker.mode");
+        if (cli_parm != NULL)
+        {
+            val.mode = (bcmolt_prbs_checker_mode) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "prbs_checker.mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "prbs_checker.data_invert");
+        if (cli_parm != NULL)
+        {
+            val.data_invert = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "prbs_checker.data_invert is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "prbs_checker.control");
+        if (cli_parm != NULL)
+        {
+            val.control = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "prbs_checker.control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, prbs_checker, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_prbs_checker_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_PRBS_CHECKER, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, prbs_checker, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "prbs_generator.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_prbs_generator_config val = { };
+        cli_parm = bcmcli_find_named_parm(session, "prbs_generator.polynom");
+        if (cli_parm != NULL)
+        {
+            val.polynom = (bcmolt_prbs_polynomial) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "prbs_generator.polynom is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "prbs_generator.error_insert");
+        if (cli_parm != NULL)
+        {
+            val.error_insert = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "prbs_generator.error_insert is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "prbs_generator.invert");
+        if (cli_parm != NULL)
+        {
+            val.invert = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "prbs_generator.invert is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "prbs_generator.control");
+        if (cli_parm != NULL)
+        {
+            val.control = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "prbs_generator.control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, prbs_generator, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_prbs_generator_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_PRBS_GENERATOR, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, prbs_generator, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "min_data_alloc_id");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpon_alloc_id val;
+        val = (bcmolt_gpon_alloc_id) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, min_data_alloc_id, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, min_data_alloc_id, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_MIN_DATA_ALLOC_ID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "automatic_onu_deactivation.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_automatic_onu_deactivation val = { };
+        cli_parm = bcmcli_find_named_parm(session, "automatic_onu_deactivation.los");
+        if (cli_parm != NULL)
+        {
+            val.los = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "automatic_onu_deactivation.los is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "automatic_onu_deactivation.onu_alarms");
+        if (cli_parm != NULL)
+        {
+            val.onu_alarms = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "automatic_onu_deactivation.onu_alarms is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "automatic_onu_deactivation.tiwi");
+        if (cli_parm != NULL)
+        {
+            val.tiwi = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "automatic_onu_deactivation.tiwi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "automatic_onu_deactivation.ack_timeout");
+        if (cli_parm != NULL)
+        {
+            val.ack_timeout = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "automatic_onu_deactivation.ack_timeout is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "automatic_onu_deactivation.sfi");
+        if (cli_parm != NULL)
+        {
+            val.sfi = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "automatic_onu_deactivation.sfi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "automatic_onu_deactivation.loki");
+        if (cli_parm != NULL)
+        {
+            val.loki = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "automatic_onu_deactivation.loki is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, automatic_onu_deactivation, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_automatic_onu_deactivation val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_AUTOMATIC_ONU_DEACTIVATION, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, automatic_onu_deactivation, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "us_bandwidth_limit");
+    if (cli_parm != NULL)
+    {
+        uint32_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, us_bandwidth_limit, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, us_bandwidth_limit, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_US_BANDWIDTH_LIMIT, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "debug.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpon_ni_debug val = { };
+        cli_parm = bcmcli_find_named_parm(session, "debug.number_of_gem_ports_per_onu");
+        if (cli_parm != NULL)
+        {
+            val.number_of_gem_ports_per_onu = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "debug.number_of_gem_ports_per_onu is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, debug, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_gpon_ni_debug val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_DEBUG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, debug, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "onu_upgrade_params.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpon_onu_upgrade_params val = { };
+        cli_parm = bcmcli_find_named_parm(session, "onu_upgrade_params.response_timeout_ms");
+        if (cli_parm != NULL)
+        {
+            val.response_timeout_ms = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "onu_upgrade_params.response_timeout_ms is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "onu_upgrade_params.max_retry_count");
+        if (cli_parm != NULL)
+        {
+            val.max_retry_count = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "onu_upgrade_params.max_retry_count is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "onu_upgrade_params.omci_format");
+        if (cli_parm != NULL)
+        {
+            val.omci_format = (bcmolt_omci_device_id) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "onu_upgrade_params.omci_format is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "onu_upgrade_params.window_size");
+        if (cli_parm != NULL)
+        {
+            val.window_size = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "onu_upgrade_params.window_size is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "onu_upgrade_params.activate_commit");
+        if (cli_parm != NULL)
+        {
+            val.activate_commit = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "onu_upgrade_params.activate_commit is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "onu_upgrade_params.delay_for_commit_ms");
+        if (cli_parm != NULL)
+        {
+            val.delay_for_commit_ms = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "onu_upgrade_params.delay_for_commit_ms is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "onu_upgrade_params.max_activation_attempts");
+        if (cli_parm != NULL)
+        {
+            val.max_activation_attempts = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "onu_upgrade_params.max_activation_attempts is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, onu_upgrade_params, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_gpon_onu_upgrade_params val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_ONU_UPGRADE_PARAMS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, onu_upgrade_params, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ps_c_wait_before_deactivation_timeout");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, ps_c_wait_before_deactivation_timeout, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, ps_c_wait_before_deactivation_timeout, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_PS_C_WAIT_BEFORE_DEACTIVATION_TIMEOUT, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "bip32_indication_control");
+    if (cli_parm != NULL)
+    {
+        bcmolt_control_state val;
+        val = (bcmolt_control_state) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, bip32_indication_control, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, bip32_indication_control, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_BIP32_INDICATION_CONTROL, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_set(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_set(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_ni_cfg_clear(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_ni_cfg cfg;         /**< declare main API struct */
+    bcmolt_gpon_ni_key key = { };   /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_ni_cfg cfg;\n");
+    bcmcli_log("bcmolt_gpon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_clear");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_NI_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, gpon_ni, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, gpon_ni, key);\n");
+
+    /* call API */
+    err = bcmolt_cfg_clear(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_clear(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_ni_cfg_get_multi(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_ni_cfg cfg;         /**< declare main API struct */
+    bcmolt_gpon_ni_key key = { };   /**< declare key */
+    bcmolt_msg_set *msg_set = NULL; /**< declare message set */
+    uint32_t max_msgs;              /**< declare max number of msgs to get */
+    bcmos_bool invert_filter;       /**< declare filter invert flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_ni_cfg cfg;\n");
+    bcmcli_log("bcmolt_gpon_ni_key key = {  };\n");
+    bcmcli_log("bcmolt_msg_set* msg_set = NULL;\n");
+    bcmcli_log("uint32_t max_msgs;\n");
+    bcmcli_log("bcmos_bool invert_filter;\n");
+    apicli_print_start(session, "bcmolt_cfg_get_multi");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_NI_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* set max number of msgs from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "max_msgs");
+    if (cli_parm != NULL)
+    {
+        max_msgs = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "max_msgs is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("max_msgs = %d;\n", max_msgs);
+
+    /* set filter invert flag from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "filter_invert");
+    if (cli_parm != NULL)
+    {
+        invert_filter = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "filter_invert is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("invert_filter = %s;\n", (invert_filter) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* allocate message set */
+    err = apicli_msg_set_alloc(byte_pool, BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    bcmcli_log("bcmolt_msg_set_alloc(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, gpon_ni, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, gpon_ni, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.pon_status.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_pon_status val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.pon_status.state");
+        if (cli_parm != NULL)
+        {
+            val.state = (bcmolt_pon_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.pon_status.state is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.pon_status.los_status");
+        if (cli_parm != NULL)
+        {
+            val.los_status = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.pon_status.los_status is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, pon_status, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_pon_status val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_PON_STATUS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, pon_status, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "pon_status");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, pon_status);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, pon_status);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.available_bandwidth.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_pon_available_bandwidth val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.available_bandwidth.cbr_bw");
+        if (cli_parm != NULL)
+        {
+            val.cbr_bw = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.available_bandwidth.cbr_bw is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.available_bandwidth.total_bw");
+        if (cli_parm != NULL)
+        {
+            val.total_bw = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.available_bandwidth.total_bw is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.available_bandwidth.next_onu_total_bw");
+        if (cli_parm != NULL)
+        {
+            val.next_onu_total_bw = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.available_bandwidth.next_onu_total_bw is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, available_bandwidth, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_pon_available_bandwidth val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_AVAILABLE_BANDWIDTH, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, available_bandwidth, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "available_bandwidth");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, available_bandwidth);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, available_bandwidth);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.number_of_active_onus");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, number_of_active_onus, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, number_of_active_onus, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_NUMBER_OF_ACTIVE_ONUS, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "number_of_active_onus");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, number_of_active_onus);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, number_of_active_onus);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.number_of_active_standby_onus");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, number_of_active_standby_onus, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, number_of_active_standby_onus, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_NUMBER_OF_ACTIVE_STANDBY_ONUS, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "number_of_active_standby_onus");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, number_of_active_standby_onus);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, number_of_active_standby_onus);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.prbs_status.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_prbs_status val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_status.lock_state");
+        if (cli_parm != NULL)
+        {
+            val.lock_state = (bcmolt_prbs_lock_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_status.lock_state is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_status.error_counts");
+        if (cli_parm != NULL)
+        {
+            val.error_counts = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_status.error_counts is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, prbs_status, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_prbs_status val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_PRBS_STATUS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, prbs_status, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "prbs_status");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, prbs_status);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, prbs_status);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.pon_distance.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_pon_distance val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.pon_distance.max_log_distance");
+        if (cli_parm != NULL)
+        {
+            val.max_log_distance = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.pon_distance.max_log_distance is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.pon_distance.max_diff_reach");
+        if (cli_parm != NULL)
+        {
+            val.max_diff_reach = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.pon_distance.max_diff_reach is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, pon_distance, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_pon_distance val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_PON_DISTANCE, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, pon_distance, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "pon_distance");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, pon_distance);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, pon_distance);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.ranging_window_size");
+    if (cli_parm != NULL)
+    {
+        uint32_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, ranging_window_size, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, ranging_window_size, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_RANGING_WINDOW_SIZE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ranging_window_size");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, ranging_window_size);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, ranging_window_size);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.preassigned_equalization_delay");
+    if (cli_parm != NULL)
+    {
+        uint32_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, preassigned_equalization_delay, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, preassigned_equalization_delay, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_PREASSIGNED_EQUALIZATION_DELAY, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "preassigned_equalization_delay");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, preassigned_equalization_delay);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, preassigned_equalization_delay);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.eqd_cycles_number");
+    if (cli_parm != NULL)
+    {
+        uint32_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, eqd_cycles_number, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, eqd_cycles_number, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_EQD_CYCLES_NUMBER, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "eqd_cycles_number");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, eqd_cycles_number);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, eqd_cycles_number);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.power_level.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_pon_power_level val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.power_level.pls_maximum_allocation_size");
+        if (cli_parm != NULL)
+        {
+            val.pls_maximum_allocation_size = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.power_level.pls_maximum_allocation_size is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.power_level.mode");
+        if (cli_parm != NULL)
+        {
+            val.mode = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.power_level.mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, power_level, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_pon_power_level val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_POWER_LEVEL, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, power_level, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "power_level");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, power_level);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, power_level);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.ds_fec_mode");
+    if (cli_parm != NULL)
+    {
+        bcmolt_control_state val;
+        val = (bcmolt_control_state) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, ds_fec_mode, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, ds_fec_mode, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_DS_FEC_MODE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ds_fec_mode");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, ds_fec_mode);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, ds_fec_mode);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.drift_control.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_pon_drift_control val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.drift_control.drift_interval");
+        if (cli_parm != NULL)
+        {
+            val.drift_interval = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.drift_control.drift_interval is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.drift_control.drift_limit");
+        if (cli_parm != NULL)
+        {
+            val.drift_limit = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.drift_control.drift_limit is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.drift_control.transmission_control_limit");
+        if (cli_parm != NULL)
+        {
+            val.transmission_control_limit = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.drift_control.transmission_control_limit is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, drift_control, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_pon_drift_control val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_DRIFT_CONTROL, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, drift_control, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "drift_control");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, drift_control);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, drift_control);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.ds_ber_reporting_interval");
+    if (cli_parm != NULL)
+    {
+        bcmolt_ber_interval val;
+        val = (bcmolt_ber_interval) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, ds_ber_reporting_interval, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, ds_ber_reporting_interval, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_DS_BER_REPORTING_INTERVAL, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ds_ber_reporting_interval");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, ds_ber_reporting_interval);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, ds_ber_reporting_interval);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.los_alarm_threshold");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, los_alarm_threshold, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, los_alarm_threshold, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_LOS_ALARM_THRESHOLD, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "los_alarm_threshold");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, los_alarm_threshold);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, los_alarm_threshold);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.los_initial_value");
+    if (cli_parm != NULL)
+    {
+        bcmolt_status val;
+        val = (bcmolt_status) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, los_initial_value, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, los_initial_value, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_LOS_INITIAL_VALUE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "los_initial_value");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, los_initial_value);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, los_initial_value);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.onu_alarms_thresholds.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpon_onu_alarms_thresholds val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.onu_alarms_thresholds.losi");
+        if (cli_parm != NULL)
+        {
+            val.losi = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.onu_alarms_thresholds.losi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.onu_alarms_thresholds.lofi");
+        if (cli_parm != NULL)
+        {
+            val.lofi = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.onu_alarms_thresholds.lofi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.onu_alarms_thresholds.loami");
+        if (cli_parm != NULL)
+        {
+            val.loami = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.onu_alarms_thresholds.loami is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, onu_alarms_thresholds, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_gpon_onu_alarms_thresholds val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_ONU_ALARMS_THRESHOLDS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, onu_alarms_thresholds, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_alarms_thresholds");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, onu_alarms_thresholds);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, onu_alarms_thresholds);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.ber_monitor.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_ber_monitor_params val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.ber_monitor.us_ber_interval");
+        if (cli_parm != NULL)
+        {
+            val.us_ber_interval = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ber_monitor.us_ber_interval is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.ber_monitor.sf_threshold");
+        if (cli_parm != NULL)
+        {
+            val.sf_threshold = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ber_monitor.sf_threshold is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.ber_monitor.sd_threshold");
+        if (cli_parm != NULL)
+        {
+            val.sd_threshold = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ber_monitor.sd_threshold is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, ber_monitor, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_ber_monitor_params val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_BER_MONITOR, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, ber_monitor, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ber_monitor");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, ber_monitor);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, ber_monitor);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.ploam_ack_timeout");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, ploam_ack_timeout, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, ploam_ack_timeout, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_PLOAM_ACK_TIMEOUT, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ploam_ack_timeout");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, ploam_ack_timeout);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, ploam_ack_timeout);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.onu_activation.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpon_onu_activation val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.onu_activation.key_exchange");
+        if (cli_parm != NULL)
+        {
+            val.key_exchange = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.onu_activation.key_exchange is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.onu_activation.password_authentication");
+        if (cli_parm != NULL)
+        {
+            val.password_authentication = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.onu_activation.password_authentication is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.onu_activation.fail_due_to_password_authentication_failure");
+        if (cli_parm != NULL)
+        {
+            val.fail_due_to_password_authentication_failure = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.onu_activation.fail_due_to_password_authentication_failure is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, onu_activation, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_gpon_onu_activation val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_ONU_ACTIVATION, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, onu_activation, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_activation");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, onu_activation);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, onu_activation);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.sn_acquisition.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpon_sn_acquisition val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.sn_acquisition.interval");
+        if (cli_parm != NULL)
+        {
+            val.interval = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.sn_acquisition.interval is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.sn_acquisition.control");
+        if (cli_parm != NULL)
+        {
+            val.control = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.sn_acquisition.control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.sn_acquisition.onu_post_discovery_mode");
+        if (cli_parm != NULL)
+        {
+            val.onu_post_discovery_mode = (bcmolt_onu_post_discovery_mode) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.sn_acquisition.onu_post_discovery_mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, sn_acquisition, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_gpon_sn_acquisition val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_SN_ACQUISITION, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, sn_acquisition, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "sn_acquisition");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, sn_acquisition);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, sn_acquisition);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.key_exchange.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpon_key_exchange val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.key_exchange.interval");
+        if (cli_parm != NULL)
+        {
+            val.interval = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.key_exchange.interval is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.key_exchange.control");
+        if (cli_parm != NULL)
+        {
+            val.control = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.key_exchange.control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.key_exchange.mode");
+        if (cli_parm != NULL)
+        {
+            val.mode = (bcmolt_key_exchange_mode) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.key_exchange.mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.key_exchange.encrypted_ports_only");
+        if (cli_parm != NULL)
+        {
+            val.encrypted_ports_only = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.key_exchange.encrypted_ports_only is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, key_exchange, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_gpon_key_exchange val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_KEY_EXCHANGE, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, key_exchange, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "key_exchange");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, key_exchange);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, key_exchange);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.protection_switching.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_pon_protection_switching val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.protection_switching.timeout");
+        if (cli_parm != NULL)
+        {
+            val.timeout = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.protection_switching.timeout is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.protection_switching.gpio_pin");
+        if (cli_parm != NULL)
+        {
+            val.gpio_pin = (bcmolt_gpio_pin) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.protection_switching.gpio_pin is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.protection_switching.options");
+        if (cli_parm != NULL)
+        {
+            val.options = (bcmolt_pon_protection_switching_options) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.protection_switching.options is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, protection_switching, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_pon_protection_switching val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_PROTECTION_SWITCHING, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, protection_switching, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "protection_switching");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, protection_switching);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, protection_switching);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.cbr_rt_allocation_profile.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_cbr_rt_allocation_profile val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.cbr_rt_allocation_profile.ma_7");
+        if (cli_parm != NULL)
+        {
+            val.ma_7 = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.cbr_rt_allocation_profile.ma_7 is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.cbr_rt_allocation_profile.ma_3");
+        if (cli_parm != NULL)
+        {
+            val.ma_3 = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.cbr_rt_allocation_profile.ma_3 is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.cbr_rt_allocation_profile.ma_1");
+        if (cli_parm != NULL)
+        {
+            val.ma_1 = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.cbr_rt_allocation_profile.ma_1 is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, cbr_rt_allocation_profile, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_cbr_rt_allocation_profile val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_CBR_RT_ALLOCATION_PROFILE, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, cbr_rt_allocation_profile, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "cbr_rt_allocation_profile");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, cbr_rt_allocation_profile);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, cbr_rt_allocation_profile);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.cbr_nrt_allocation_profile.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_arr_u16_2 val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.cbr_nrt_allocation_profile.arr");
+        if (cli_parm != NULL)
+        {
+            int32_t i0;
+            if (cli_parm->array_size != 2)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "array filter.cbr_nrt_allocation_profile.arr must have 2 elements\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i0 = 0; i0 < 2; i0++)
+            {
+                val.arr[i0] = cli_parm->values[i0].unumber;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.cbr_nrt_allocation_profile.arr is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, cbr_nrt_allocation_profile, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_arr_u16_2 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_CBR_NRT_ALLOCATION_PROFILE, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, cbr_nrt_allocation_profile, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "cbr_nrt_allocation_profile");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, cbr_nrt_allocation_profile);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, cbr_nrt_allocation_profile);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.dba.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_pon_dba val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.dba.sr_reporting_block_size");
+        if (cli_parm != NULL)
+        {
+            val.sr_reporting_block_size = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.dba.sr_reporting_block_size is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.dba.dba_mode");
+        if (cli_parm != NULL)
+        {
+            val.dba_mode = (bcmolt_dba_mode) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.dba.dba_mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, dba, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_pon_dba val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_DBA, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, dba, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "dba");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, dba);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, dba);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.power_management.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_onu_power_management_configuration val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.power_management.ilowpower");
+        if (cli_parm != NULL)
+        {
+            val.ilowpower = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.power_management.ilowpower is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.power_management.iaware");
+        if (cli_parm != NULL)
+        {
+            val.iaware = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.power_management.iaware is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.power_management.itransinit");
+        if (cli_parm != NULL)
+        {
+            val.itransinit = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.power_management.itransinit is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.power_management.itxinit");
+        if (cli_parm != NULL)
+        {
+            val.itxinit = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.power_management.itxinit is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.power_management.irxoff");
+        if (cli_parm != NULL)
+        {
+            val.irxoff = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.power_management.irxoff is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.power_management.low_power_clobi");
+        if (cli_parm != NULL)
+        {
+            val.low_power_clobi = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.power_management.low_power_clobi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, power_management, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_onu_power_management_configuration val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_POWER_MANAGEMENT, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, power_management, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "power_management");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, power_management);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, power_management);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.rogue_onu_detection_process.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_rogue_onu_detection_process val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.rogue_onu_detection_process.control");
+        if (cli_parm != NULL)
+        {
+            val.control = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.rogue_onu_detection_process.control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "filter.rogue_onu_detection_process.detection_algorithm.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "filter.rogue_onu_detection_process.detection_algorithm.algorithm_type");
+            if (cli_parm != NULL)
+            {
+                val.detection_algorithm.algorithm_type = (bcmolt_rogue_detection_algorithm_type) cli_parm->value.enum_val;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.rogue_onu_detection_process.detection_algorithm.algorithm_type is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            switch (val.detection_algorithm.algorithm_type)
+            {
+                case BCMOLT_ROGUE_DETECTION_ALGORITHM_TYPE_EARLY_ROGUE_DETECTION:
+                    cli_parm = bcmcli_find_named_parm(session, "filter.rogue_onu_detection_process.detection_algorithm.measurement_type");
+                    if (cli_parm != NULL)
+                    {
+                        val.detection_algorithm.u.early_rogue_detection.measurement_type = (bcmolt_rogue_detection_window) cli_parm->value.enum_val;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "filter.rogue_onu_detection_process.detection_algorithm.measurement_type is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "filter.rogue_onu_detection_process.detection_algorithm.interval");
+                    if (cli_parm != NULL)
+                    {
+                        val.detection_algorithm.u.early_rogue_detection.interval = cli_parm->value.unumber;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "filter.rogue_onu_detection_process.detection_algorithm.interval is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "filter.rogue_onu_detection_process.detection_algorithm.second_ranging_window");
+                    if (cli_parm != NULL)
+                    {
+                        val.detection_algorithm.u.early_rogue_detection.second_ranging_window = cli_parm->value.number;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "filter.rogue_onu_detection_process.detection_algorithm.second_ranging_window is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "filter.rogue_onu_detection_process.detection_algorithm.alloc_type_to_scan");
+                    if (cli_parm != NULL)
+                    {
+                        val.detection_algorithm.u.early_rogue_detection.alloc_type_to_scan = (bcmolt_alloc_type_to_scan) cli_parm->value.enum_val;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "filter.rogue_onu_detection_process.detection_algorithm.alloc_type_to_scan is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_ROGUE_DETECTION_ALGORITHM_TYPE_SPECIAL_MAP:
+                    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.rogue_onu_detection_process.detection_algorithm.accesses.");
+                    if (cli_parm != NULL)
+                    {
+                        int32_t i1;
+                        val.detection_algorithm.u.special_map.accesses.val = apicli_byte_pool_calloc(byte_pool, cli_parm->array_size * sizeof(*val.detection_algorithm.u.special_map.accesses.val));
+                        if (val.detection_algorithm.u.special_map.accesses.val == NULL)
+                        {
+                            apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+                            return BCM_ERR_NOMEM;
+                        }
+
+                        val.detection_algorithm.u.special_map.accesses.len = cli_parm->array_size;
+                        cli_parm = bcmcli_find_named_parm(session, "filter.rogue_onu_detection_process.detection_algorithm.accesses.plo_size");
+                        if (cli_parm != NULL)
+                        {
+                            if (cli_parm->array_size != val.detection_algorithm.u.special_map.accesses.len)
+                            {
+                                apicli_print_complete(session, BCM_ERR_PARM, "filter.rogue_onu_detection_process.detection_algorithm.accesses.plo_size is a different size than other arrays in the struct\n");
+                                return BCM_ERR_PARM;
+                            }
+
+                            for (i1 = 0; i1 < val.detection_algorithm.u.special_map.accesses.len; i1++)
+                            {
+                                val.detection_algorithm.u.special_map.accesses.val[i1].plo_size = cli_parm->values[i1].unumber;
+                            }
+                        }
+
+                        cli_parm = bcmcli_find_named_parm(session, "filter.rogue_onu_detection_process.detection_algorithm.accesses.alloc_id");
+                        if (cli_parm != NULL)
+                        {
+                            if (cli_parm->array_size != val.detection_algorithm.u.special_map.accesses.len)
+                            {
+                                apicli_print_complete(session, BCM_ERR_PARM, "filter.rogue_onu_detection_process.detection_algorithm.accesses.alloc_id is a different size than other arrays in the struct\n");
+                                return BCM_ERR_PARM;
+                            }
+
+                            for (i1 = 0; i1 < val.detection_algorithm.u.special_map.accesses.len; i1++)
+                            {
+                                val.detection_algorithm.u.special_map.accesses.val[i1].alloc_id = (bcmolt_pon_alloc_id) cli_parm->values[i1].unumber;
+                            }
+                        }
+
+                        cli_parm = bcmcli_find_named_parm(session, "filter.rogue_onu_detection_process.detection_algorithm.accesses.onu_id");
+                        if (cli_parm != NULL)
+                        {
+                            if (cli_parm->array_size != val.detection_algorithm.u.special_map.accesses.len)
+                            {
+                                apicli_print_complete(session, BCM_ERR_PARM, "filter.rogue_onu_detection_process.detection_algorithm.accesses.onu_id is a different size than other arrays in the struct\n");
+                                return BCM_ERR_PARM;
+                            }
+
+                            for (i1 = 0; i1 < val.detection_algorithm.u.special_map.accesses.len; i1++)
+                            {
+                                val.detection_algorithm.u.special_map.accesses.val[i1].onu_id = (bcmolt_pon_onu_id) cli_parm->values[i1].unumber;
+                            }
+                        }
+
+                        cli_parm = bcmcli_find_named_parm(session, "filter.rogue_onu_detection_process.detection_algorithm.accesses.access_size");
+                        if (cli_parm != NULL)
+                        {
+                            if (cli_parm->array_size != val.detection_algorithm.u.special_map.accesses.len)
+                            {
+                                apicli_print_complete(session, BCM_ERR_PARM, "filter.rogue_onu_detection_process.detection_algorithm.accesses.access_size is a different size than other arrays in the struct\n");
+                                return BCM_ERR_PARM;
+                            }
+
+                            for (i1 = 0; i1 < val.detection_algorithm.u.special_map.accesses.len; i1++)
+                            {
+                                val.detection_algorithm.u.special_map.accesses.val[i1].access_size = cli_parm->values[i1].unumber;
+                            }
+                        }
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "filter.rogue_onu_detection_process.detection_algorithm.accesses is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_ROGUE_DETECTION_ALGORITHM_TYPE_EXTENDED_GUARD_TIME:
+                    cli_parm = bcmcli_find_named_parm(session, "filter.rogue_onu_detection_process.detection_algorithm.additional_guard_time");
+                    if (cli_parm != NULL)
+                    {
+                        val.detection_algorithm.u.extended_guard_time.additional_guard_time = cli_parm->value.unumber;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "filter.rogue_onu_detection_process.detection_algorithm.additional_guard_time is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                default:
+                    apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+                    return BCM_ERR_RANGE;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.rogue_onu_detection_process.detection_algorithm is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, rogue_onu_detection_process, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_rogue_onu_detection_process val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_ROGUE_ONU_DETECTION_PROCESS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, rogue_onu_detection_process, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rogue_onu_detection_process");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, rogue_onu_detection_process);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, rogue_onu_detection_process);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.periodic_standby_pon_monitoring.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_periodic_standby_pon_monitoring val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.periodic_standby_pon_monitoring.interval");
+        if (cli_parm != NULL)
+        {
+            val.interval = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.periodic_standby_pon_monitoring.interval is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.periodic_standby_pon_monitoring.control");
+        if (cli_parm != NULL)
+        {
+            val.control = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.periodic_standby_pon_monitoring.control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, periodic_standby_pon_monitoring, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_periodic_standby_pon_monitoring val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_PERIODIC_STANDBY_PON_MONITORING, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, periodic_standby_pon_monitoring, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "periodic_standby_pon_monitoring");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, periodic_standby_pon_monitoring);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, periodic_standby_pon_monitoring);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.prbs_checker.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_prbs_checker_config val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_checker.polynom");
+        if (cli_parm != NULL)
+        {
+            val.polynom = (bcmolt_prbs_polynomial) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_checker.polynom is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_checker.mode");
+        if (cli_parm != NULL)
+        {
+            val.mode = (bcmolt_prbs_checker_mode) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_checker.mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_checker.data_invert");
+        if (cli_parm != NULL)
+        {
+            val.data_invert = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_checker.data_invert is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_checker.control");
+        if (cli_parm != NULL)
+        {
+            val.control = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_checker.control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, prbs_checker, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_prbs_checker_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_PRBS_CHECKER, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, prbs_checker, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "prbs_checker");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, prbs_checker);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, prbs_checker);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.prbs_generator.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_prbs_generator_config val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_generator.polynom");
+        if (cli_parm != NULL)
+        {
+            val.polynom = (bcmolt_prbs_polynomial) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_generator.polynom is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_generator.error_insert");
+        if (cli_parm != NULL)
+        {
+            val.error_insert = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_generator.error_insert is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_generator.invert");
+        if (cli_parm != NULL)
+        {
+            val.invert = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_generator.invert is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_generator.control");
+        if (cli_parm != NULL)
+        {
+            val.control = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_generator.control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, prbs_generator, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_prbs_generator_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_PRBS_GENERATOR, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, prbs_generator, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "prbs_generator");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, prbs_generator);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, prbs_generator);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.min_data_alloc_id");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpon_alloc_id val;
+        val = (bcmolt_gpon_alloc_id) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, min_data_alloc_id, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, min_data_alloc_id, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_MIN_DATA_ALLOC_ID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "min_data_alloc_id");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, min_data_alloc_id);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, min_data_alloc_id);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.automatic_onu_deactivation.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_automatic_onu_deactivation val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.automatic_onu_deactivation.los");
+        if (cli_parm != NULL)
+        {
+            val.los = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.automatic_onu_deactivation.los is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.automatic_onu_deactivation.onu_alarms");
+        if (cli_parm != NULL)
+        {
+            val.onu_alarms = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.automatic_onu_deactivation.onu_alarms is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.automatic_onu_deactivation.tiwi");
+        if (cli_parm != NULL)
+        {
+            val.tiwi = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.automatic_onu_deactivation.tiwi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.automatic_onu_deactivation.ack_timeout");
+        if (cli_parm != NULL)
+        {
+            val.ack_timeout = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.automatic_onu_deactivation.ack_timeout is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.automatic_onu_deactivation.sfi");
+        if (cli_parm != NULL)
+        {
+            val.sfi = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.automatic_onu_deactivation.sfi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.automatic_onu_deactivation.loki");
+        if (cli_parm != NULL)
+        {
+            val.loki = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.automatic_onu_deactivation.loki is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, automatic_onu_deactivation, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_automatic_onu_deactivation val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_AUTOMATIC_ONU_DEACTIVATION, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, automatic_onu_deactivation, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "automatic_onu_deactivation");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, automatic_onu_deactivation);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, automatic_onu_deactivation);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.us_bandwidth_limit");
+    if (cli_parm != NULL)
+    {
+        uint32_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, us_bandwidth_limit, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, us_bandwidth_limit, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_US_BANDWIDTH_LIMIT, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "us_bandwidth_limit");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, us_bandwidth_limit);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, us_bandwidth_limit);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.all_onus.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpon_onu_with_state_list_u16_max_128 val = { };
+        int32_t i2;
+        val.val = apicli_byte_pool_calloc(byte_pool, cli_parm->array_size * sizeof(*val.val));
+        if (val.val == NULL)
+        {
+            apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+            return BCM_ERR_NOMEM;
+        }
+
+        val.len = cli_parm->array_size;
+        cli_parm = bcmcli_find_named_parm(session, "filter.all_onus.onu_id");
+        if (cli_parm != NULL)
+        {
+            if (cli_parm->array_size != val.len)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.all_onus.onu_id is a different size than other arrays in the struct\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i2 = 0; i2 < val.len; i2++)
+            {
+                val.val[i2].onu_id = (bcmolt_gpon_onu_id) cli_parm->values[i2].unumber;
+            }
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.all_onus.state");
+        if (cli_parm != NULL)
+        {
+            if (cli_parm->array_size != val.len)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.all_onus.state is a different size than other arrays in the struct\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i2 = 0; i2 < val.len; i2++)
+            {
+                val.val[i2].state = (bcmolt_onu_state) cli_parm->values[i2].enum_val;
+            }
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, all_onus, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_gpon_onu_with_state_list_u16_max_128 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_ALL_ONUS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, all_onus, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "all_onus");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, all_onus);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, all_onus);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.all_mcast_gem_ports.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpon_gem_port_with_state_list_u16_max_128 val = { };
+        int32_t i3;
+        val.val = apicli_byte_pool_calloc(byte_pool, cli_parm->array_size * sizeof(*val.val));
+        if (val.val == NULL)
+        {
+            apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+            return BCM_ERR_NOMEM;
+        }
+
+        val.len = cli_parm->array_size;
+        cli_parm = bcmcli_find_named_parm(session, "filter.all_mcast_gem_ports.gem_id");
+        if (cli_parm != NULL)
+        {
+            if (cli_parm->array_size != val.len)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.all_mcast_gem_ports.gem_id is a different size than other arrays in the struct\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i3 = 0; i3 < val.len; i3++)
+            {
+                val.val[i3].gem_id = (bcmolt_gpon_gem_id) cli_parm->values[i3].unumber;
+            }
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.all_mcast_gem_ports.state");
+        if (cli_parm != NULL)
+        {
+            if (cli_parm->array_size != val.len)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.all_mcast_gem_ports.state is a different size than other arrays in the struct\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i3 = 0; i3 < val.len; i3++)
+            {
+                val.val[i3].state = (bcmolt_gpon_gem_port_state) cli_parm->values[i3].enum_val;
+            }
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, all_mcast_gem_ports, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_gpon_gem_port_with_state_list_u16_max_128 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_ALL_MCAST_GEM_PORTS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, all_mcast_gem_ports, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "all_mcast_gem_ports");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, all_mcast_gem_ports);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, all_mcast_gem_ports);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.debug.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpon_ni_debug val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.debug.number_of_gem_ports_per_onu");
+        if (cli_parm != NULL)
+        {
+            val.number_of_gem_ports_per_onu = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.debug.number_of_gem_ports_per_onu is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, debug, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_gpon_ni_debug val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_DEBUG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, debug, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "debug");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, debug);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, debug);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.onu_upgrade_params.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpon_onu_upgrade_params val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.onu_upgrade_params.response_timeout_ms");
+        if (cli_parm != NULL)
+        {
+            val.response_timeout_ms = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.onu_upgrade_params.response_timeout_ms is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.onu_upgrade_params.max_retry_count");
+        if (cli_parm != NULL)
+        {
+            val.max_retry_count = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.onu_upgrade_params.max_retry_count is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.onu_upgrade_params.omci_format");
+        if (cli_parm != NULL)
+        {
+            val.omci_format = (bcmolt_omci_device_id) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.onu_upgrade_params.omci_format is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.onu_upgrade_params.window_size");
+        if (cli_parm != NULL)
+        {
+            val.window_size = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.onu_upgrade_params.window_size is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.onu_upgrade_params.activate_commit");
+        if (cli_parm != NULL)
+        {
+            val.activate_commit = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.onu_upgrade_params.activate_commit is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.onu_upgrade_params.delay_for_commit_ms");
+        if (cli_parm != NULL)
+        {
+            val.delay_for_commit_ms = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.onu_upgrade_params.delay_for_commit_ms is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.onu_upgrade_params.max_activation_attempts");
+        if (cli_parm != NULL)
+        {
+            val.max_activation_attempts = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.onu_upgrade_params.max_activation_attempts is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, onu_upgrade_params, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_gpon_onu_upgrade_params val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_ONU_UPGRADE_PARAMS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, onu_upgrade_params, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_upgrade_params");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, onu_upgrade_params);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, onu_upgrade_params);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.ps_c_wait_before_deactivation_timeout");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, ps_c_wait_before_deactivation_timeout, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, ps_c_wait_before_deactivation_timeout, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_PS_C_WAIT_BEFORE_DEACTIVATION_TIMEOUT, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ps_c_wait_before_deactivation_timeout");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, ps_c_wait_before_deactivation_timeout);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, ps_c_wait_before_deactivation_timeout);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.bip32_indication_control");
+    if (cli_parm != NULL)
+    {
+        bcmolt_control_state val;
+        val = (bcmolt_control_state) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, bip32_indication_control, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_ni, bip32_indication_control, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_NI_CFG_ID_BIP32_INDICATION_CONTROL, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "bip32_indication_control");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, bip32_indication_control);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, bip32_indication_control);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_ni, pon_status) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_ni, available_bandwidth) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_ni, number_of_active_onus) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_ni, number_of_active_standby_onus) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_ni, prbs_status) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_ni, pon_distance) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_ni, ranging_window_size) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_ni, preassigned_equalization_delay) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_ni, eqd_cycles_number) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_ni, power_level) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_ni, ds_fec_mode) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_ni, drift_control) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_ni, ds_ber_reporting_interval) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_ni, los_alarm_threshold) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_ni, los_initial_value) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_ni, onu_alarms_thresholds) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_ni, ber_monitor) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_ni, ploam_ack_timeout) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_ni, onu_activation) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_ni, sn_acquisition) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_ni, key_exchange) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_ni, protection_switching) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_ni, cbr_rt_allocation_profile) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_ni, cbr_nrt_allocation_profile) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_ni, dba) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_ni, power_management) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_ni, rogue_onu_detection_process) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_ni, periodic_standby_pon_monitoring) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_ni, prbs_checker) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_ni, prbs_generator) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_ni, min_data_alloc_id) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_ni, automatic_onu_deactivation) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_ni, us_bandwidth_limit) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_ni, all_onus) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_ni, all_mcast_gem_ports) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_ni, debug) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_ni, onu_upgrade_params) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_ni, ps_c_wait_before_deactivation_timeout) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_ni, bip32_indication_control))
+    {
+        BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, all_properties);
+        bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_ni, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);
+    bcmcli_log("bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_ni_stat_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_ni_stat stat;       /**< declare main API struct */
+    bcmolt_gpon_ni_key key = { };   /**< declare key */
+    bcmos_bool clear_on_read;       /**< declare 'clear on read' flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_ni_stat stat;\n");
+    bcmcli_log("bcmolt_gpon_ni_key key = {  };\n");
+    bcmcli_log("bcmos_bool clear_on_read;\n");
+    apicli_print_start(session, "bcmolt_stat_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_NI_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* set stat flags from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "clear");
+    if (cli_parm != NULL)
+    {
+        clear_on_read = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "clear is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("clear_on_read = %s;\n", (clear_on_read) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* init the API struct */
+    BCMOLT_STAT_INIT(&stat, gpon_ni, key);
+    bcmcli_log("BCMOLT_STAT_INIT(&stat, gpon_ni, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "fec_codewords");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_ni, fec_codewords);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_ni, fec_codewords);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "fec_codewords_uncorrected");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_ni, fec_codewords_uncorrected);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_ni, fec_codewords_uncorrected);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "bip8_bytes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_ni, bip8_bytes);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_ni, bip8_bytes);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "bip8_errors");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_ni, bip8_errors);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_ni, bip8_errors);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_gem_packets");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_ni, rx_gem_packets);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_ni, rx_gem_packets);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_gem_dropped");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_ni, rx_gem_dropped);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_ni, rx_gem_dropped);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_gem_idle");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_ni, rx_gem_idle);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_ni, rx_gem_idle);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_gem_corrected");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_ni, rx_gem_corrected);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_ni, rx_gem_corrected);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_gem_illegal");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_ni, rx_gem_illegal);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_ni, rx_gem_illegal);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_allocations_valid");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_ni, rx_allocations_valid);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_ni, rx_allocations_valid);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_allocations_invalid");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_ni, rx_allocations_invalid);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_ni, rx_allocations_invalid);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_allocations_disabled");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_ni, rx_allocations_disabled);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_ni, rx_allocations_disabled);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_ploams");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_ni, rx_ploams);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_ni, rx_ploams);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_ploams_non_idle");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_ni, rx_ploams_non_idle);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_ni, rx_ploams_non_idle);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_ploams_error");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_ni, rx_ploams_error);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_ni, rx_ploams_error);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_ploams_dropped");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_ni, rx_ploams_dropped);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_ni, rx_ploams_dropped);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_cpu");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_ni, rx_cpu);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_ni, rx_cpu);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_omci");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_ni, rx_omci);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_ni, rx_omci);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_omci_packets_crc_error");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_ni, rx_omci_packets_crc_error);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_ni, rx_omci_packets_crc_error);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_dropped_too_short");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_ni, rx_dropped_too_short);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_ni, rx_dropped_too_short);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_dropped_too_long");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_ni, rx_dropped_too_long);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_ni, rx_dropped_too_long);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_crc_errors");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_ni, rx_crc_errors);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_ni, rx_crc_errors);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_key_errors");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_ni, rx_key_errors);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_ni, rx_key_errors);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_fragments_errors");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_ni, rx_fragments_errors);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_ni, rx_fragments_errors);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_packets_dropped");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_ni, rx_packets_dropped);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_ni, rx_packets_dropped);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_gem");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_ni, tx_gem);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_ni, tx_gem);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_ploams");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_ni, tx_ploams);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_ni, tx_ploams);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_gem_fragments");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_ni, tx_gem_fragments);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_ni, tx_gem_fragments);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_cpu");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_ni, tx_cpu);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_ni, tx_cpu);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_omci");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_ni, tx_omci);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_ni, tx_omci);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_cpu_omci_packets_dropped");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_ni, tx_cpu_omci_packets_dropped);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_ni, tx_cpu_omci_packets_dropped);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_dropped_illegal_length");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_ni, tx_dropped_illegal_length);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_ni, tx_dropped_illegal_length);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_dropped_tpid_miss");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_ni, tx_dropped_tpid_miss);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_ni, tx_dropped_tpid_miss);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_dropped_vid_miss");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_ni, tx_dropped_vid_miss);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_ni, tx_dropped_vid_miss);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_STAT_PROP_IS_SET(&stat, gpon_ni, fec_codewords) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_ni, fec_codewords_uncorrected) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_ni, bip8_bytes) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_ni, bip8_errors) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_ni, rx_gem_packets) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_ni, rx_gem_dropped) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_ni, rx_gem_idle) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_ni, rx_gem_corrected) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_ni, rx_gem_illegal) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_ni, rx_allocations_valid) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_ni, rx_allocations_invalid) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_ni, rx_allocations_disabled) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_ni, rx_ploams) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_ni, rx_ploams_non_idle) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_ni, rx_ploams_error) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_ni, rx_ploams_dropped) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_ni, rx_cpu) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_ni, rx_omci) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_ni, rx_omci_packets_crc_error) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_ni, rx_dropped_too_short) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_ni, rx_dropped_too_long) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_ni, rx_crc_errors) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_ni, rx_key_errors) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_ni, rx_fragments_errors) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_ni, rx_packets_dropped) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_ni, tx_gem) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_ni, tx_ploams) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_ni, tx_gem_fragments) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_ni, tx_cpu) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_ni, tx_omci) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_ni, tx_cpu_omci_packets_dropped) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_ni, tx_dropped_illegal_length) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_ni, tx_dropped_tpid_miss) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_ni, tx_dropped_vid_miss))
+    {
+        BCMOLT_STAT_PROP_GET(&stat, gpon_ni, all_properties);
+        bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_ni, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_stat_get(device_id, &stat.hdr, clear_on_read);
+    bcmcli_log("bcmolt_stat_get(device_id, &stat.hdr, clear_on_read);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &stat.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, stat.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_ni_oper_set_pon_state_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_ni_set_pon_state oper;  /**< declare main API struct */
+    bcmolt_gpon_ni_key key = { };       /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_ni_set_pon_state oper;\n");
+    bcmcli_log("bcmolt_gpon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_NI_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, gpon_ni, set_pon_state, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, gpon_ni, set_pon_state, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "pon_state");
+    if (cli_parm != NULL)
+    {
+        bcmolt_pon_operation val;
+        val = (bcmolt_pon_operation) cli_parm->value.enum_val;
+        BCMOLT_OPER_PROP_SET(&oper, gpon_ni, set_pon_state, pon_state, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, gpon_ni, set_pon_state, pon_state, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_OPER, BCMOLT_GPON_NI_OPER_ID_SET_PON_STATE, BCMOLT_GPON_NI_SET_PON_STATE_ID_PON_STATE, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_ni_oper_reset_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_ni_reset oper;      /**< declare main API struct */
+    bcmolt_gpon_ni_key key = { };   /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_ni_reset oper;\n");
+    bcmcli_log("bcmolt_gpon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_NI_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, gpon_ni, reset, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, gpon_ni, reset, key);\n");
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_ni_oper_disable_serial_number_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_ni_disable_serial_number oper;  /**< declare main API struct */
+    bcmolt_gpon_ni_key key = { };               /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_ni_disable_serial_number oper;\n");
+    bcmcli_log("bcmolt_gpon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_NI_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, gpon_ni, disable_serial_number, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, gpon_ni, disable_serial_number, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "control");
+    if (cli_parm != NULL)
+    {
+        bcmolt_disable_serial_number_control val;
+        val = (bcmolt_disable_serial_number_control) cli_parm->value.enum_val;
+        BCMOLT_OPER_PROP_SET(&oper, gpon_ni, disable_serial_number, control, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, gpon_ni, disable_serial_number, control, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_OPER, BCMOLT_GPON_NI_OPER_ID_DISABLE_SERIAL_NUMBER, BCMOLT_GPON_NI_DISABLE_SERIAL_NUMBER_ID_CONTROL, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "serial_number.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_serial_number val = { };
+        cli_parm = bcmcli_find_named_parm(session, "serial_number.vendor_id");
+        if (cli_parm != NULL)
+        {
+            if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 4)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "buffer serial_number.vendor_id must have 4 bytes\n");
+                return BCM_ERR_PARM;
+            }
+
+            bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+            bcmolt_buf_read(&cli_parm->value.buffer, val.vendor_id, 4);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "serial_number.vendor_id is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "serial_number.vendor_specific");
+        if (cli_parm != NULL)
+        {
+            if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 4)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "buffer serial_number.vendor_specific must have 4 bytes\n");
+                return BCM_ERR_PARM;
+            }
+
+            bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+            bcmolt_buf_read(&cli_parm->value.buffer, val.vendor_specific, 4);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "serial_number.vendor_specific is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_OPER_PROP_SET(&oper, gpon_ni, disable_serial_number, serial_number, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_serial_number val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_OPER, BCMOLT_GPON_NI_OPER_ID_DISABLE_SERIAL_NUMBER, BCMOLT_GPON_NI_DISABLE_SERIAL_NUMBER_ID_SERIAL_NUMBER, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, gpon_ni, disable_serial_number, serial_number, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_ni_oper_single_request_standby_pon_monitoring_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_ni_single_request_standby_pon_monitoring oper;  /**< declare main API struct */
+    bcmolt_gpon_ni_key key = { };   /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_ni_single_request_standby_pon_monitoring oper;\n");
+    bcmcli_log("bcmolt_gpon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_NI_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, gpon_ni, single_request_standby_pon_monitoring, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, gpon_ni, single_request_standby_pon_monitoring, key);\n");
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_ni_oper_set_onu_state_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_ni_set_onu_state oper;  /**< declare main API struct */
+    bcmolt_gpon_ni_key key = { };       /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_ni_set_onu_state oper;\n");
+    bcmcli_log("bcmolt_gpon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_NI_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, gpon_ni, set_onu_state, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, gpon_ni, set_onu_state, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "onu_state");
+    if (cli_parm != NULL)
+    {
+        bcmolt_onu_operation val;
+        val = (bcmolt_onu_operation) cli_parm->value.enum_val;
+        BCMOLT_OPER_PROP_SET(&oper, gpon_ni, set_onu_state, onu_state, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, gpon_ni, set_onu_state, onu_state, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_OPER, BCMOLT_GPON_NI_OPER_ID_SET_ONU_STATE, BCMOLT_GPON_NI_SET_ONU_STATE_ID_ONU_STATE, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_ni_proxy_cpu_packets_send(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_ni_cpu_packets proxy;   /**< declare main API struct */
+    bcmolt_gpon_ni_key key = { };       /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_ni_cpu_packets proxy;\n");
+    bcmcli_log("bcmolt_gpon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_proxy_send");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_NI_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_PROXY_INIT(&proxy, gpon_ni, cpu_packets, key);
+    bcmcli_log("BCMOLT_PROXY_INIT(&proxy, gpon_ni, cpu_packets, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "packet_type");
+    if (cli_parm != NULL)
+    {
+        bcmolt_packet_type val;
+        val = (bcmolt_packet_type) cli_parm->value.enum_val;
+        BCMOLT_PROXY_PROP_SET(&proxy, gpon_ni, cpu_packets, packet_type, val);
+        bcmcli_log("BCMOLT_PROXY_PROP_SET(&proxy, gpon_ni, cpu_packets, packet_type, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_PROXY, BCMOLT_GPON_NI_PROXY_ID_CPU_PACKETS, BCMOLT_GPON_NI_CPU_PACKETS_ID_PACKET_TYPE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "calc_crc");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_PROXY_PROP_SET(&proxy, gpon_ni, cpu_packets, calc_crc, val);
+        bcmcli_log("BCMOLT_PROXY_PROP_SET(&proxy, gpon_ni, cpu_packets, calc_crc, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_PROXY, BCMOLT_GPON_NI_PROXY_ID_CPU_PACKETS, BCMOLT_GPON_NI_CPU_PACKETS_ID_CALC_CRC, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "gem_port_list");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpon_gem_id_list_u8_max_16 val = { };
+        int32_t i0;
+        val.val = apicli_byte_pool_calloc(byte_pool, cli_parm->array_size * sizeof(*val.val));
+        if (val.val == NULL)
+        {
+            apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+            return BCM_ERR_NOMEM;
+        }
+
+        val.len = cli_parm->array_size;
+        for (i0 = 0; i0 < val.len; i0++)
+        {
+            val.val[i0] = (bcmolt_gpon_gem_id) cli_parm->values[i0].unumber;
+        }
+
+        BCMOLT_PROXY_PROP_SET(&proxy, gpon_ni, cpu_packets, gem_port_list, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_gpon_gem_id_list_u8_max_16 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_PROXY, BCMOLT_GPON_NI_PROXY_ID_CPU_PACKETS, BCMOLT_GPON_NI_CPU_PACKETS_ID_GEM_PORT_LIST, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_PROXY_PROP_SET(&proxy, gpon_ni, cpu_packets, gem_port_list, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "buffer");
+    if (cli_parm != NULL)
+    {
+        bcmolt_u8_list_u32_max_2048 val = { };
+        val.len = bcmolt_buf_get_used(&cli_parm->value.buffer);
+        val.val = apicli_byte_pool_calloc(byte_pool, val.len);
+        if (val.val == NULL)
+        {
+            apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+            return BCM_ERR_NOMEM;
+        }
+
+        bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+        bcmolt_buf_read(&cli_parm->value.buffer, val.val, val.len);
+        BCMOLT_PROXY_PROP_SET(&proxy, gpon_ni, cpu_packets, buffer, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_u8_list_u32_max_2048 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_PROXY, BCMOLT_GPON_NI_PROXY_ID_CPU_PACKETS, BCMOLT_GPON_NI_CPU_PACKETS_ID_BUFFER, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_PROXY_PROP_SET(&proxy, gpon_ni, cpu_packets, buffer, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_proxy_send(device_id, &proxy.hdr);
+    bcmcli_log("bcmolt_proxy_send(device_id, &proxy.hdr);\n");
+    apicli_print_complete(session, err, proxy.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_ni_proxy_broadcast_ploam_packet_send(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_ni_broadcast_ploam_packet proxy;    /**< declare main API struct */
+    bcmolt_gpon_ni_key key = { };                   /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_ni_broadcast_ploam_packet proxy;\n");
+    bcmcli_log("bcmolt_gpon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_proxy_send");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_NI_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_PROXY_INIT(&proxy, gpon_ni, broadcast_ploam_packet, key);
+    bcmcli_log("BCMOLT_PROXY_INIT(&proxy, gpon_ni, broadcast_ploam_packet, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "ploam.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_arr_u8_12 val = { };
+        cli_parm = bcmcli_find_named_parm(session, "ploam.arr");
+        if (cli_parm != NULL)
+        {
+            if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 12)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "buffer ploam.arr must have 12 bytes\n");
+                return BCM_ERR_PARM;
+            }
+
+            bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+            bcmolt_buf_read(&cli_parm->value.buffer, val.arr, 12);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ploam.arr is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_PROXY_PROP_SET(&proxy, gpon_ni, broadcast_ploam_packet, ploam, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_arr_u8_12 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_PROXY, BCMOLT_GPON_NI_PROXY_ID_BROADCAST_PLOAM_PACKET, BCMOLT_GPON_NI_BROADCAST_PLOAM_PACKET_ID_PLOAM, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_PROXY_PROP_SET(&proxy, gpon_ni, broadcast_ploam_packet, ploam, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_proxy_send(device_id, &proxy.hdr);
+    bcmcli_log("bcmolt_proxy_send(device_id, &proxy.hdr);\n");
+    apicli_print_complete(session, err, proxy.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_ni_oper_rogue_detection_window_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_ni_rogue_detection_window oper; /**< declare main API struct */
+    bcmolt_gpon_ni_key key = { };               /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_ni_rogue_detection_window oper;\n");
+    bcmcli_log("bcmolt_gpon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_NI_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, gpon_ni, rogue_detection_window, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, gpon_ni, rogue_detection_window, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "window_type");
+    if (cli_parm != NULL)
+    {
+        bcmolt_rogue_detection_window val;
+        val = (bcmolt_rogue_detection_window) cli_parm->value.enum_val;
+        BCMOLT_OPER_PROP_SET(&oper, gpon_ni, rogue_detection_window, window_type, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, gpon_ni, rogue_detection_window, window_type, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_OPER, BCMOLT_GPON_NI_OPER_ID_ROGUE_DETECTION_WINDOW, BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_WINDOW_TYPE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "alloc_id");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpon_alloc_id val;
+        val = (bcmolt_gpon_alloc_id) cli_parm->value.unumber;
+        BCMOLT_OPER_PROP_SET(&oper, gpon_ni, rogue_detection_window, alloc_id, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, gpon_ni, rogue_detection_window, alloc_id, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_OPER, BCMOLT_GPON_NI_OPER_ID_ROGUE_DETECTION_WINDOW, BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_ALLOC_ID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpon_onu_id val;
+        val = (bcmolt_gpon_onu_id) cli_parm->value.unumber;
+        BCMOLT_OPER_PROP_SET(&oper, gpon_ni, rogue_detection_window, onu_id, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, gpon_ni, rogue_detection_window, onu_id, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_OPER, BCMOLT_GPON_NI_OPER_ID_ROGUE_DETECTION_WINDOW, BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_ONU_ID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "second_ranging_window");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_OPER_PROP_SET(&oper, gpon_ni, rogue_detection_window, second_ranging_window, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, gpon_ni, rogue_detection_window, second_ranging_window, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_OPER, BCMOLT_GPON_NI_OPER_ID_ROGUE_DETECTION_WINDOW, BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_SECOND_RANGING_WINDOW, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_ni_oper_tod_request_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_ni_tod_request oper;    /**< declare main API struct */
+    bcmolt_gpon_ni_key key = { };       /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_ni_tod_request oper;\n");
+    bcmcli_log("bcmolt_gpon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_NI_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, gpon_ni, tod_request, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, gpon_ni, tod_request, key);\n");
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_ni_oper_protection_switching_type_c_set_multiple_onu_state_submit(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state oper; /**< declare main API struct */
+    bcmolt_gpon_ni_key key = { };   /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state oper;\n");
+    bcmcli_log("bcmolt_gpon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_NI_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, gpon_ni, protection_switching_type_c_set_multiple_onu_state, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, gpon_ni, protection_switching_type_c_set_multiple_onu_state, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "onu_state");
+    if (cli_parm != NULL)
+    {
+        bcmolt_switch_over_type_c_onu_state val;
+        val = (bcmolt_switch_over_type_c_onu_state) cli_parm->value.enum_val;
+        BCMOLT_OPER_PROP_SET(&oper, gpon_ni, protection_switching_type_c_set_multiple_onu_state, onu_state, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, gpon_ni, protection_switching_type_c_set_multiple_onu_state, onu_state, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_OPER, BCMOLT_GPON_NI_OPER_ID_PROTECTION_SWITCHING_TYPE_C_SET_MULTIPLE_ONU_STATE, BCMOLT_GPON_NI_PROTECTION_SWITCHING_TYPE_C_SET_MULTIPLE_ONU_STATE_ID_ONU_STATE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_list");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpon_onu_id_list_u32_max_256 val = { };
+        int32_t i0;
+        val.val = apicli_byte_pool_calloc(byte_pool, cli_parm->array_size * sizeof(*val.val));
+        if (val.val == NULL)
+        {
+            apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+            return BCM_ERR_NOMEM;
+        }
+
+        val.len = cli_parm->array_size;
+        for (i0 = 0; i0 < val.len; i0++)
+        {
+            val.val[i0] = (bcmolt_gpon_onu_id) cli_parm->values[i0].unumber;
+        }
+
+        BCMOLT_OPER_PROP_SET(&oper, gpon_ni, protection_switching_type_c_set_multiple_onu_state, onu_list, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_gpon_onu_id_list_u32_max_256 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_OPER, BCMOLT_GPON_NI_OPER_ID_PROTECTION_SWITCHING_TYPE_C_SET_MULTIPLE_ONU_STATE, BCMOLT_GPON_NI_PROTECTION_SWITCHING_TYPE_C_SET_MULTIPLE_ONU_STATE_ID_ONU_LIST, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, gpon_ni, protection_switching_type_c_set_multiple_onu_state, onu_list, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_ni_oper_start_onu_upgrade_submit(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_ni_start_onu_upgrade oper;  /**< declare main API struct */
+    bcmolt_gpon_ni_key key = { };           /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_ni_start_onu_upgrade oper;\n");
+    bcmcli_log("bcmolt_gpon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_NI_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, gpon_ni, start_onu_upgrade, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, gpon_ni, start_onu_upgrade, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "list_of_onu_ids");
+    if (cli_parm != NULL)
+    {
+        bcmolt_pon_onu_id_list_u32 val = { };
+        int32_t i0;
+        val.val = apicli_byte_pool_calloc(byte_pool, cli_parm->array_size * sizeof(*val.val));
+        if (val.val == NULL)
+        {
+            apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+            return BCM_ERR_NOMEM;
+        }
+
+        val.len = cli_parm->array_size;
+        for (i0 = 0; i0 < val.len; i0++)
+        {
+            val.val[i0] = (bcmolt_pon_onu_id) cli_parm->values[i0].unumber;
+        }
+
+        BCMOLT_OPER_PROP_SET(&oper, gpon_ni, start_onu_upgrade, list_of_onu_ids, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_pon_onu_id_list_u32 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_OPER, BCMOLT_GPON_NI_OPER_ID_START_ONU_UPGRADE, BCMOLT_GPON_NI_START_ONU_UPGRADE_ID_LIST_OF_ONU_IDS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, gpon_ni, start_onu_upgrade, list_of_onu_ids, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_ni_stat_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_ni_stat_cfg stat_cfg;   /**< declare main API struct */
+    bcmolt_gpon_ni_key key = { };       /**< declare key */
+    bcmolt_gpon_ni_stat_id stat_id;     /**< declare stat ID */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_ni_stat_cfg stat_cfg;\n");
+    bcmcli_log("bcmolt_gpon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_stat_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_NI_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* set stat ID from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "sub");
+    if (cli_parm != NULL)
+    {
+        stat_id = (bcmolt_gpon_ni_stat_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    /* init the API struct */
+    switch (stat_id)
+    {
+        case BCMOLT_GPON_NI_STAT_ID_FEC_CODEWORDS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, fec_codewords, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, fec_codewords, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_FEC_CODEWORDS_UNCORRECTED:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, fec_codewords_uncorrected, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, fec_codewords_uncorrected, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_BIP8_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, bip8_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, bip8_bytes, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_BIP8_ERRORS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, bip8_errors, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, bip8_errors, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_RX_GEM_PACKETS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_gem_packets, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_gem_packets, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_RX_GEM_DROPPED:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_gem_dropped, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_gem_dropped, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_RX_GEM_IDLE:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_gem_idle, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_gem_idle, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_RX_GEM_CORRECTED:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_gem_corrected, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_gem_corrected, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_RX_GEM_ILLEGAL:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_gem_illegal, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_gem_illegal, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_RX_ALLOCATIONS_VALID:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_allocations_valid, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_allocations_valid, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_RX_ALLOCATIONS_INVALID:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_allocations_invalid, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_allocations_invalid, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_RX_ALLOCATIONS_DISABLED:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_allocations_disabled, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_allocations_disabled, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_ploams, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_ploams, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS_NON_IDLE:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_ploams_non_idle, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_ploams_non_idle, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_ploams_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_ploams_error, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS_DROPPED:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_ploams_dropped, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_ploams_dropped, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_RX_CPU:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_cpu, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_cpu, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_RX_OMCI:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_omci, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_omci, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_omci_packets_crc_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_omci_packets_crc_error, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_RX_DROPPED_TOO_SHORT:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_dropped_too_short, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_dropped_too_short, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_RX_DROPPED_TOO_LONG:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_dropped_too_long, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_dropped_too_long, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_RX_CRC_ERRORS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_crc_errors, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_crc_errors, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_RX_KEY_ERRORS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_key_errors, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_key_errors, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_RX_FRAGMENTS_ERRORS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_fragments_errors, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_fragments_errors, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_RX_PACKETS_DROPPED:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_packets_dropped, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_packets_dropped, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_TX_GEM:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, tx_gem, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, tx_gem, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_TX_PLOAMS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, tx_ploams, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, tx_ploams, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_TX_GEM_FRAGMENTS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, tx_gem_fragments, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, tx_gem_fragments, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_TX_CPU:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, tx_cpu, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, tx_cpu, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_TX_OMCI:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, tx_omci, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, tx_omci, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_TX_CPU_OMCI_PACKETS_DROPPED:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, tx_cpu_omci_packets_dropped, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, tx_cpu_omci_packets_dropped, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_TX_DROPPED_ILLEGAL_LENGTH:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, tx_dropped_illegal_length, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, tx_dropped_illegal_length, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_TX_DROPPED_TPID_MISS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, tx_dropped_tpid_miss, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, tx_dropped_tpid_miss, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_TX_DROPPED_VID_MISS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, tx_dropped_vid_miss, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, tx_dropped_vid_miss, key);\n");
+            break;
+        default:
+            apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+            return BCM_ERR_RANGE;
+    }
+
+    /* call API */
+    err = bcmolt_stat_cfg_get(device_id, &stat_cfg.hdr);
+    bcmcli_log("bcmolt_stat_cfg_get(device_id, &stat_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &stat_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, stat_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_ni_stat_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_ni_stat_cfg stat_cfg;   /**< declare main API struct */
+    bcmolt_gpon_ni_key key = { };       /**< declare key */
+    bcmolt_gpon_ni_stat_id stat_id;     /**< declare stat ID */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_ni_stat_cfg stat_cfg;\n");
+    bcmcli_log("bcmolt_gpon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_stat_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_NI_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* set stat ID from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "sub");
+    if (cli_parm != NULL)
+    {
+        stat_id = (bcmolt_gpon_ni_stat_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    /* init the API struct */
+    switch (stat_id)
+    {
+        case BCMOLT_GPON_NI_STAT_ID_FEC_CODEWORDS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, fec_codewords, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, fec_codewords, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_FEC_CODEWORDS_UNCORRECTED:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, fec_codewords_uncorrected, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, fec_codewords_uncorrected, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_BIP8_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, bip8_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, bip8_bytes, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_BIP8_ERRORS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, bip8_errors, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, bip8_errors, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_RX_GEM_PACKETS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_gem_packets, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_gem_packets, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_RX_GEM_DROPPED:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_gem_dropped, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_gem_dropped, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_RX_GEM_IDLE:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_gem_idle, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_gem_idle, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_RX_GEM_CORRECTED:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_gem_corrected, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_gem_corrected, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_RX_GEM_ILLEGAL:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_gem_illegal, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_gem_illegal, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_RX_ALLOCATIONS_VALID:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_allocations_valid, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_allocations_valid, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_RX_ALLOCATIONS_INVALID:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_allocations_invalid, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_allocations_invalid, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_RX_ALLOCATIONS_DISABLED:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_allocations_disabled, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_allocations_disabled, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_ploams, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_ploams, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS_NON_IDLE:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_ploams_non_idle, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_ploams_non_idle, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_ploams_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_ploams_error, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS_DROPPED:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_ploams_dropped, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_ploams_dropped, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_RX_CPU:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_cpu, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_cpu, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_RX_OMCI:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_omci, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_omci, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_omci_packets_crc_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_omci_packets_crc_error, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_RX_DROPPED_TOO_SHORT:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_dropped_too_short, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_dropped_too_short, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_RX_DROPPED_TOO_LONG:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_dropped_too_long, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_dropped_too_long, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_RX_CRC_ERRORS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_crc_errors, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_crc_errors, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_RX_KEY_ERRORS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_key_errors, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_key_errors, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_RX_FRAGMENTS_ERRORS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_fragments_errors, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_fragments_errors, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_RX_PACKETS_DROPPED:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_packets_dropped, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, rx_packets_dropped, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_TX_GEM:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, tx_gem, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, tx_gem, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_TX_PLOAMS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, tx_ploams, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, tx_ploams, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_TX_GEM_FRAGMENTS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, tx_gem_fragments, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, tx_gem_fragments, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_TX_CPU:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, tx_cpu, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, tx_cpu, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_TX_OMCI:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, tx_omci, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, tx_omci, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_TX_CPU_OMCI_PACKETS_DROPPED:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, tx_cpu_omci_packets_dropped, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, tx_cpu_omci_packets_dropped, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_TX_DROPPED_ILLEGAL_LENGTH:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, tx_dropped_illegal_length, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, tx_dropped_illegal_length, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_TX_DROPPED_TPID_MISS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, tx_dropped_tpid_miss, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, tx_dropped_tpid_miss, key);\n");
+            break;
+        case BCMOLT_GPON_NI_STAT_ID_TX_DROPPED_VID_MISS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, tx_dropped_vid_miss, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_ni, tx_dropped_vid_miss, key);\n");
+            break;
+        default:
+            apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+            return BCM_ERR_RANGE;
+    }
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_stat_alarm_config val = { };
+        cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.trigger.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.type");
+            if (cli_parm != NULL)
+            {
+                val.trigger.type = (bcmolt_stat_condition_type) cli_parm->value.enum_val;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.type is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            switch (val.trigger.type)
+            {
+                case BCMOLT_STAT_CONDITION_TYPE_RATE_THRESHOLD:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.rising");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_threshold.rising = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.rising is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.falling");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_threshold.falling = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.falling is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_RATE_RANGE:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.upper");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_range.upper = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.upper is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.lower");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_range.lower = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.lower is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_VALUE_THRESHOLD:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.limit");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.value_threshold.limit = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.limit is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_NONE:
+                    break;
+                default:
+                    apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+                    return BCM_ERR_RANGE;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.soak.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "cfg.soak.active_soak_time");
+            if (cli_parm != NULL)
+            {
+                val.soak.active_soak_time = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak.active_soak_time is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "cfg.soak.clear_soak_time");
+            if (cli_parm != NULL)
+            {
+                val.soak.clear_soak_time = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak.clear_soak_time is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_STAT_CFG_PROP_SET(&stat_cfg, gpon_ni, cfg, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_stat_alarm_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_STAT_CFG, 0, BCMOLT_GPON_NI_STAT_CFG_ID_CFG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_STAT_CFG_PROP_SET(&stat_cfg, gpon_ni, cfg, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_stat_cfg_set(device_id, &stat_cfg.hdr);
+    bcmcli_log("bcmolt_stat_cfg_set(device_id, &stat_cfg.hdr);\n");
+    apicli_print_complete(session, err, stat_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_ni_auto_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_ni_auto_cfg auto_cfg;   /**< declare main API struct */
+    bcmolt_gpon_ni_key key = { };       /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_ni_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_gpon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_get");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, gpon_ni, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, gpon_ni, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "activate_all_onus_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_ni, activate_all_onus_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_ni, activate_all_onus_completed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "cpu_packets_failure");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_ni, cpu_packets_failure);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_ni, cpu_packets_failure);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "deactivate_all_onus_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_ni, deactivate_all_onus_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_ni, deactivate_all_onus_completed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "disable_all_onus_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_ni, disable_all_onus_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_ni, disable_all_onus_completed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "enable_all_onus_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_ni, enable_all_onus_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_ni, enable_all_onus_completed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "los");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_ni, los);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_ni, los);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_discovered");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_ni, onu_discovered);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_ni, onu_discovered);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_upgrade_complete");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_ni, onu_upgrade_complete);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_ni, onu_upgrade_complete);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "protection_switching_onus_ranged");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_ni, protection_switching_onus_ranged);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_ni, protection_switching_onus_ranged);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "protection_switching_switchover_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_ni, protection_switching_switchover_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_ni, protection_switching_switchover_completed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "protection_switching_traffic_resume");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_ni, protection_switching_traffic_resume);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_ni, protection_switching_traffic_resume);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rogue_detection_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_ni, rogue_detection_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_ni, rogue_detection_completed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rogue_onu_special_map_cycle_start");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_ni, rogue_onu_special_map_cycle_start);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_ni, rogue_onu_special_map_cycle_start);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "serial_number_acquisition_cycle_start");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_ni, serial_number_acquisition_cycle_start);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_ni, serial_number_acquisition_cycle_start);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "standby_pon_monitoring_cycle_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_ni, standby_pon_monitoring_cycle_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_ni, standby_pon_monitoring_cycle_completed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_cleared");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_ni, stat_alarm_cleared);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_ni, stat_alarm_cleared);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_raised");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_ni, stat_alarm_raised);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_ni, stat_alarm_raised);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "state_change_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_ni, state_change_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_ni, state_change_completed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tod_request_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_ni, tod_request_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_ni, tod_request_completed);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_ni, activate_all_onus_completed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_ni, cpu_packets_failure) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_ni, deactivate_all_onus_completed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_ni, disable_all_onus_completed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_ni, enable_all_onus_completed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_ni, los) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_ni, onu_discovered) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_ni, onu_upgrade_complete) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_ni, protection_switching_onus_ranged) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_ni, protection_switching_switchover_completed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_ni, protection_switching_traffic_resume) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_ni, rogue_detection_completed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_ni, rogue_onu_special_map_cycle_start) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_ni, serial_number_acquisition_cycle_start) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_ni, standby_pon_monitoring_cycle_completed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_ni, stat_alarm_cleared) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_ni, stat_alarm_raised) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_ni, state_change_completed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_ni, tod_request_completed))
+    {
+        BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_ni, all_properties);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_ni, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &auto_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_ni_auto_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_ni_auto_cfg auto_cfg;   /**< declare main API struct */
+    bcmolt_gpon_ni_key key = { };       /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_ni_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_gpon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_set");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, gpon_ni, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, gpon_ni, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "activate_all_onus_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_ni, activate_all_onus_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_ni, activate_all_onus_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_NI_AUTO_CFG_ID_ACTIVATE_ALL_ONUS_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "cpu_packets_failure");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_ni, cpu_packets_failure, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_ni, cpu_packets_failure, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_NI_AUTO_CFG_ID_CPU_PACKETS_FAILURE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "deactivate_all_onus_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_ni, deactivate_all_onus_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_ni, deactivate_all_onus_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_NI_AUTO_CFG_ID_DEACTIVATE_ALL_ONUS_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "disable_all_onus_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_ni, disable_all_onus_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_ni, disable_all_onus_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_NI_AUTO_CFG_ID_DISABLE_ALL_ONUS_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "enable_all_onus_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_ni, enable_all_onus_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_ni, enable_all_onus_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_NI_AUTO_CFG_ID_ENABLE_ALL_ONUS_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "los");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_ni, los, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_ni, los, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_NI_AUTO_CFG_ID_LOS, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_discovered");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_ni, onu_discovered, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_ni, onu_discovered, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_NI_AUTO_CFG_ID_ONU_DISCOVERED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_upgrade_complete");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_ni, onu_upgrade_complete, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_ni, onu_upgrade_complete, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_NI_AUTO_CFG_ID_ONU_UPGRADE_COMPLETE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "protection_switching_onus_ranged");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_ni, protection_switching_onus_ranged, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_ni, protection_switching_onus_ranged, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_ONUS_RANGED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "protection_switching_switchover_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_ni, protection_switching_switchover_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_ni, protection_switching_switchover_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "protection_switching_traffic_resume");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_ni, protection_switching_traffic_resume, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_ni, protection_switching_traffic_resume, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_TRAFFIC_RESUME, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rogue_detection_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_ni, rogue_detection_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_ni, rogue_detection_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_NI_AUTO_CFG_ID_ROGUE_DETECTION_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rogue_onu_special_map_cycle_start");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_ni, rogue_onu_special_map_cycle_start, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_ni, rogue_onu_special_map_cycle_start, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_NI_AUTO_CFG_ID_ROGUE_ONU_SPECIAL_MAP_CYCLE_START, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "serial_number_acquisition_cycle_start");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_ni, serial_number_acquisition_cycle_start, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_ni, serial_number_acquisition_cycle_start, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_NI_AUTO_CFG_ID_SERIAL_NUMBER_ACQUISITION_CYCLE_START, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "standby_pon_monitoring_cycle_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_ni, standby_pon_monitoring_cycle_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_ni, standby_pon_monitoring_cycle_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_NI_AUTO_CFG_ID_STANDBY_PON_MONITORING_CYCLE_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_cleared");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_ni, stat_alarm_cleared, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_ni, stat_alarm_cleared, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_NI_AUTO_CFG_ID_STAT_ALARM_CLEARED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_raised");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_ni, stat_alarm_raised, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_ni, stat_alarm_raised, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_NI_AUTO_CFG_ID_STAT_ALARM_RAISED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "state_change_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_ni, state_change_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_ni, state_change_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_NI_AUTO_CFG_ID_STATE_CHANGE_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tod_request_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_ni, tod_request_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_ni, tod_request_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_NI_AUTO_CFG_ID_TOD_REQUEST_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);\n");
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_onu_cfg_get(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_onu_cfg cfg;        /**< declare main API struct */
+    bcmolt_gpon_onu_key key = { };  /**< declare key */
+    uint8_t *list_mem;              /**< declare memory buffer for variable-sized lists */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_onu_cfg cfg;\n");
+    bcmcli_log("bcmolt_gpon_onu_key key = {  };\n");
+    bcmcli_log("uint8_t* list_mem;\n");
+    apicli_print_start(session, "bcmolt_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_ONU_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        key.onu_id = (bcmolt_gpon_onu_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "onu_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.onu_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_ONU_KEY_ID_ONU_ID, &key.onu_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, gpon_onu, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, gpon_onu, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "onu_state");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_onu, onu_state);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_onu, onu_state);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "serial_number");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_onu, serial_number);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_onu, serial_number);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "password");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_onu, password);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_onu, password);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "auto_password_learning");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_onu, auto_password_learning);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_onu, auto_password_learning);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "us_fec");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_onu, us_fec);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_onu, us_fec);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "omci_port_id");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_onu, omci_port_id);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_onu, omci_port_id);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ds_ber_reporting_interval");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_onu, ds_ber_reporting_interval);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_onu, ds_ber_reporting_interval);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "aes_encryption_key");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_onu, aes_encryption_key);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_onu, aes_encryption_key);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "alarm_state");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_onu, alarm_state);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_onu, alarm_state);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ranging_time");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_onu, ranging_time);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_onu, ranging_time);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "disabled_after_discovery");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_onu, disabled_after_discovery);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_onu, disabled_after_discovery);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "deactivation_reason");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_onu, deactivation_reason);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_onu, deactivation_reason);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "all_gem_ports");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_onu, all_gem_ports);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_onu, all_gem_ports);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "all_allocs");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_onu, all_allocs);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_onu, all_allocs);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_ps_type_c");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_onu, onu_ps_type_c);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_onu, onu_ps_type_c);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "extended_guard_time");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_onu, extended_guard_time);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_onu, extended_guard_time);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_onu, onu_state) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_onu, serial_number) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_onu, password) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_onu, auto_password_learning) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_onu, us_fec) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_onu, omci_port_id) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_onu, ds_ber_reporting_interval) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_onu, aes_encryption_key) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_onu, alarm_state) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_onu, ranging_time) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_onu, disabled_after_discovery) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_onu, deactivation_reason) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_onu, all_gem_ports) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_onu, all_allocs) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_onu, onu_ps_type_c) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_onu, extended_guard_time))
+    {
+        BCMOLT_CFG_PROP_GET(&cfg, gpon_onu, all_properties);
+        bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_onu, all_properties);\n");
+    }
+
+    /* set memory to use for variable-sized lists */
+    list_mem = apicli_byte_pool_calloc(byte_pool, APICLI_DYNAMIC_LIST_BUFFER_SIZE);
+    if (list_mem == NULL)
+    {
+        apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+        return BCM_ERR_NOMEM;
+    }
+
+    bcmcli_log("list_mem = bcmos_calloc(APICLI_DYNAMIC_LIST_BUFFER_SIZE);\n");
+    BCMOLT_CFG_LIST_BUF_SET(&cfg, gpon_onu, list_mem, APICLI_DYNAMIC_LIST_BUFFER_SIZE);
+    bcmcli_log("BCMOLT_CFG_LIST_BUF_SET(&cfg, gpon_onu, list_mem, APICLI_DYNAMIC_LIST_BUFFER_SIZE);\n");
+
+    /* call API */
+    err = bcmolt_cfg_get(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_get(device_id, &cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_onu_cfg_set(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_onu_cfg cfg;        /**< declare main API struct */
+    bcmolt_gpon_onu_key key = { };  /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_onu_cfg cfg;\n");
+    bcmcli_log("bcmolt_gpon_onu_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_ONU_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        key.onu_id = (bcmolt_gpon_onu_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "onu_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.onu_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_ONU_KEY_ID_ONU_ID, &key.onu_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, gpon_onu, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, gpon_onu, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "serial_number.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_serial_number val = { };
+        cli_parm = bcmcli_find_named_parm(session, "serial_number.vendor_id");
+        if (cli_parm != NULL)
+        {
+            if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 4)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "buffer serial_number.vendor_id must have 4 bytes\n");
+                return BCM_ERR_PARM;
+            }
+
+            bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+            bcmolt_buf_read(&cli_parm->value.buffer, val.vendor_id, 4);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "serial_number.vendor_id is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "serial_number.vendor_specific");
+        if (cli_parm != NULL)
+        {
+            if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 4)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "buffer serial_number.vendor_specific must have 4 bytes\n");
+                return BCM_ERR_PARM;
+            }
+
+            bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+            bcmolt_buf_read(&cli_parm->value.buffer, val.vendor_specific, 4);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "serial_number.vendor_specific is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, serial_number, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_serial_number val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_ONU_CFG_ID_SERIAL_NUMBER, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, serial_number, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "password.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_arr_u8_10 val = { };
+        cli_parm = bcmcli_find_named_parm(session, "password.arr");
+        if (cli_parm != NULL)
+        {
+            if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 10)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "buffer password.arr must have 10 bytes\n");
+                return BCM_ERR_PARM;
+            }
+
+            bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+            bcmolt_buf_read(&cli_parm->value.buffer, val.arr, 10);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "password.arr is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, password, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_arr_u8_10 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_ONU_CFG_ID_PASSWORD, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, password, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "auto_password_learning");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, auto_password_learning, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, auto_password_learning, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_ONU_CFG_ID_AUTO_PASSWORD_LEARNING, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "us_fec");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, us_fec, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, us_fec, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_ONU_CFG_ID_US_FEC, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "omci_port_id");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpon_gem_id val;
+        val = (bcmolt_gpon_gem_id) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, omci_port_id, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, omci_port_id, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_ONU_CFG_ID_OMCI_PORT_ID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ds_ber_reporting_interval");
+    if (cli_parm != NULL)
+    {
+        bcmolt_ber_interval val;
+        val = (bcmolt_ber_interval) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, ds_ber_reporting_interval, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, ds_ber_reporting_interval, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_ONU_CFG_ID_DS_BER_REPORTING_INTERVAL, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "aes_encryption_key.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_aes_key val = { };
+        cli_parm = bcmcli_find_named_parm(session, "aes_encryption_key.bytes");
+        if (cli_parm != NULL)
+        {
+            if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 16)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "buffer aes_encryption_key.bytes must have 16 bytes\n");
+                return BCM_ERR_PARM;
+            }
+
+            bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+            bcmolt_buf_read(&cli_parm->value.buffer, val.bytes, 16);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "aes_encryption_key.bytes is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, aes_encryption_key, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_aes_key val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_ONU_CFG_ID_AES_ENCRYPTION_KEY, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, aes_encryption_key, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "alarm_state.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpon_onu_alarm_state val = { };
+        cli_parm = bcmcli_find_named_parm(session, "alarm_state.losi");
+        if (cli_parm != NULL)
+        {
+            val.losi = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "alarm_state.losi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "alarm_state.lofi");
+        if (cli_parm != NULL)
+        {
+            val.lofi = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "alarm_state.lofi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "alarm_state.loami");
+        if (cli_parm != NULL)
+        {
+            val.loami = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "alarm_state.loami is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "alarm_state.dgi");
+        if (cli_parm != NULL)
+        {
+            val.dgi = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "alarm_state.dgi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "alarm_state.tiwi");
+        if (cli_parm != NULL)
+        {
+            val.tiwi = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "alarm_state.tiwi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "alarm_state.dowi");
+        if (cli_parm != NULL)
+        {
+            val.dowi = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "alarm_state.dowi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "alarm_state.sufi");
+        if (cli_parm != NULL)
+        {
+            val.sufi = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "alarm_state.sufi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "alarm_state.sfi");
+        if (cli_parm != NULL)
+        {
+            val.sfi = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "alarm_state.sfi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "alarm_state.sdi");
+        if (cli_parm != NULL)
+        {
+            val.sdi = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "alarm_state.sdi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "alarm_state.dfi");
+        if (cli_parm != NULL)
+        {
+            val.dfi = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "alarm_state.dfi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "alarm_state.loai");
+        if (cli_parm != NULL)
+        {
+            val.loai = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "alarm_state.loai is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "alarm_state.loki");
+        if (cli_parm != NULL)
+        {
+            val.loki = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "alarm_state.loki is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, alarm_state, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_gpon_onu_alarm_state val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_ONU_CFG_ID_ALARM_STATE, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, alarm_state, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ranging_time");
+    if (cli_parm != NULL)
+    {
+        uint32_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, ranging_time, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, ranging_time, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_ONU_CFG_ID_RANGING_TIME, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_ps_type_c");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, onu_ps_type_c, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, onu_ps_type_c, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_ONU_CFG_ID_ONU_PS_TYPE_C, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "extended_guard_time.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_extended_guard_time val = { };
+        cli_parm = bcmcli_find_named_parm(session, "extended_guard_time.additional_preburst_guard_time");
+        if (cli_parm != NULL)
+        {
+            val.additional_preburst_guard_time = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "extended_guard_time.additional_preburst_guard_time is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "extended_guard_time.additional_postburst_guard_time");
+        if (cli_parm != NULL)
+        {
+            val.additional_postburst_guard_time = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "extended_guard_time.additional_postburst_guard_time is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, extended_guard_time, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_extended_guard_time val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_ONU_CFG_ID_EXTENDED_GUARD_TIME, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, extended_guard_time, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_set(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_set(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_onu_cfg_clear(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_onu_cfg cfg;        /**< declare main API struct */
+    bcmolt_gpon_onu_key key = { };  /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_onu_cfg cfg;\n");
+    bcmcli_log("bcmolt_gpon_onu_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_clear");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_ONU_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        key.onu_id = (bcmolt_gpon_onu_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "onu_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.onu_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_ONU_KEY_ID_ONU_ID, &key.onu_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, gpon_onu, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, gpon_onu, key);\n");
+
+    /* call API */
+    err = bcmolt_cfg_clear(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_clear(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_onu_cfg_get_multi(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_onu_cfg cfg;        /**< declare main API struct */
+    bcmolt_gpon_onu_key key = { };  /**< declare key */
+    bcmolt_msg_set *msg_set = NULL; /**< declare message set */
+    uint32_t max_msgs;              /**< declare max number of msgs to get */
+    bcmos_bool invert_filter;       /**< declare filter invert flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_onu_cfg cfg;\n");
+    bcmcli_log("bcmolt_gpon_onu_key key = {  };\n");
+    bcmcli_log("bcmolt_msg_set* msg_set = NULL;\n");
+    bcmcli_log("uint32_t max_msgs;\n");
+    bcmcli_log("bcmos_bool invert_filter;\n");
+    apicli_print_start(session, "bcmolt_cfg_get_multi");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_ONU_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        key.onu_id = (bcmolt_gpon_onu_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "onu_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.onu_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_ONU_KEY_ID_ONU_ID, &key.onu_id);
+    bcmcli_log(";\n");
+
+    /* set max number of msgs from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "max_msgs");
+    if (cli_parm != NULL)
+    {
+        max_msgs = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "max_msgs is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("max_msgs = %d;\n", max_msgs);
+
+    /* set filter invert flag from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "filter_invert");
+    if (cli_parm != NULL)
+    {
+        invert_filter = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "filter_invert is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("invert_filter = %s;\n", (invert_filter) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* allocate message set */
+    err = apicli_msg_set_alloc(byte_pool, BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    bcmcli_log("bcmolt_msg_set_alloc(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, gpon_onu, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, gpon_onu, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "filter.onu_state");
+    if (cli_parm != NULL)
+    {
+        bcmolt_onu_state val;
+        val = (bcmolt_onu_state) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, onu_state, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, onu_state, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_ONU_CFG_ID_ONU_STATE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_state");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_onu, onu_state);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_onu, onu_state);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.serial_number.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_serial_number val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.serial_number.vendor_id");
+        if (cli_parm != NULL)
+        {
+            if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 4)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "buffer filter.serial_number.vendor_id must have 4 bytes\n");
+                return BCM_ERR_PARM;
+            }
+
+            bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+            bcmolt_buf_read(&cli_parm->value.buffer, val.vendor_id, 4);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.serial_number.vendor_id is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.serial_number.vendor_specific");
+        if (cli_parm != NULL)
+        {
+            if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 4)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "buffer filter.serial_number.vendor_specific must have 4 bytes\n");
+                return BCM_ERR_PARM;
+            }
+
+            bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+            bcmolt_buf_read(&cli_parm->value.buffer, val.vendor_specific, 4);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.serial_number.vendor_specific is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, serial_number, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_serial_number val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_ONU_CFG_ID_SERIAL_NUMBER, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, serial_number, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "serial_number");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_onu, serial_number);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_onu, serial_number);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.password.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_arr_u8_10 val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.password.arr");
+        if (cli_parm != NULL)
+        {
+            if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 10)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "buffer filter.password.arr must have 10 bytes\n");
+                return BCM_ERR_PARM;
+            }
+
+            bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+            bcmolt_buf_read(&cli_parm->value.buffer, val.arr, 10);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.password.arr is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, password, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_arr_u8_10 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_ONU_CFG_ID_PASSWORD, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, password, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "password");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_onu, password);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_onu, password);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.auto_password_learning");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, auto_password_learning, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, auto_password_learning, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_ONU_CFG_ID_AUTO_PASSWORD_LEARNING, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "auto_password_learning");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_onu, auto_password_learning);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_onu, auto_password_learning);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.us_fec");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, us_fec, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, us_fec, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_ONU_CFG_ID_US_FEC, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "us_fec");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_onu, us_fec);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_onu, us_fec);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.omci_port_id");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpon_gem_id val;
+        val = (bcmolt_gpon_gem_id) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, omci_port_id, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, omci_port_id, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_ONU_CFG_ID_OMCI_PORT_ID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "omci_port_id");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_onu, omci_port_id);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_onu, omci_port_id);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.ds_ber_reporting_interval");
+    if (cli_parm != NULL)
+    {
+        bcmolt_ber_interval val;
+        val = (bcmolt_ber_interval) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, ds_ber_reporting_interval, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, ds_ber_reporting_interval, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_ONU_CFG_ID_DS_BER_REPORTING_INTERVAL, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ds_ber_reporting_interval");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_onu, ds_ber_reporting_interval);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_onu, ds_ber_reporting_interval);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.aes_encryption_key.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_aes_key val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.aes_encryption_key.bytes");
+        if (cli_parm != NULL)
+        {
+            if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 16)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "buffer filter.aes_encryption_key.bytes must have 16 bytes\n");
+                return BCM_ERR_PARM;
+            }
+
+            bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+            bcmolt_buf_read(&cli_parm->value.buffer, val.bytes, 16);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.aes_encryption_key.bytes is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, aes_encryption_key, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_aes_key val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_ONU_CFG_ID_AES_ENCRYPTION_KEY, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, aes_encryption_key, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "aes_encryption_key");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_onu, aes_encryption_key);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_onu, aes_encryption_key);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.alarm_state.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpon_onu_alarm_state val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.losi");
+        if (cli_parm != NULL)
+        {
+            val.losi = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.losi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.lofi");
+        if (cli_parm != NULL)
+        {
+            val.lofi = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.lofi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.loami");
+        if (cli_parm != NULL)
+        {
+            val.loami = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.loami is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.dgi");
+        if (cli_parm != NULL)
+        {
+            val.dgi = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.dgi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.tiwi");
+        if (cli_parm != NULL)
+        {
+            val.tiwi = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.tiwi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.dowi");
+        if (cli_parm != NULL)
+        {
+            val.dowi = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.dowi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.sufi");
+        if (cli_parm != NULL)
+        {
+            val.sufi = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.sufi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.sfi");
+        if (cli_parm != NULL)
+        {
+            val.sfi = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.sfi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.sdi");
+        if (cli_parm != NULL)
+        {
+            val.sdi = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.sdi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.dfi");
+        if (cli_parm != NULL)
+        {
+            val.dfi = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.dfi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.loai");
+        if (cli_parm != NULL)
+        {
+            val.loai = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.loai is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.loki");
+        if (cli_parm != NULL)
+        {
+            val.loki = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.loki is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, alarm_state, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_gpon_onu_alarm_state val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_ONU_CFG_ID_ALARM_STATE, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, alarm_state, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "alarm_state");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_onu, alarm_state);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_onu, alarm_state);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.ranging_time");
+    if (cli_parm != NULL)
+    {
+        uint32_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, ranging_time, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, ranging_time, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_ONU_CFG_ID_RANGING_TIME, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ranging_time");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_onu, ranging_time);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_onu, ranging_time);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.disabled_after_discovery");
+    if (cli_parm != NULL)
+    {
+        bcmolt_status val;
+        val = (bcmolt_status) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, disabled_after_discovery, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, disabled_after_discovery, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_ONU_CFG_ID_DISABLED_AFTER_DISCOVERY, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "disabled_after_discovery");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_onu, disabled_after_discovery);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_onu, disabled_after_discovery);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.deactivation_reason");
+    if (cli_parm != NULL)
+    {
+        bcmolt_deactivation_reason val;
+        val = (bcmolt_deactivation_reason) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, deactivation_reason, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, deactivation_reason, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_ONU_CFG_ID_DEACTIVATION_REASON, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "deactivation_reason");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_onu, deactivation_reason);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_onu, deactivation_reason);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.all_gem_ports.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpon_gem_port_with_state_list_u16_max_256 val = { };
+        int32_t i0;
+        val.val = apicli_byte_pool_calloc(byte_pool, cli_parm->array_size * sizeof(*val.val));
+        if (val.val == NULL)
+        {
+            apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+            return BCM_ERR_NOMEM;
+        }
+
+        val.len = cli_parm->array_size;
+        cli_parm = bcmcli_find_named_parm(session, "filter.all_gem_ports.gem_id");
+        if (cli_parm != NULL)
+        {
+            if (cli_parm->array_size != val.len)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.all_gem_ports.gem_id is a different size than other arrays in the struct\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i0 = 0; i0 < val.len; i0++)
+            {
+                val.val[i0].gem_id = (bcmolt_gpon_gem_id) cli_parm->values[i0].unumber;
+            }
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.all_gem_ports.state");
+        if (cli_parm != NULL)
+        {
+            if (cli_parm->array_size != val.len)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.all_gem_ports.state is a different size than other arrays in the struct\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i0 = 0; i0 < val.len; i0++)
+            {
+                val.val[i0].state = (bcmolt_gpon_gem_port_state) cli_parm->values[i0].enum_val;
+            }
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, all_gem_ports, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_gpon_gem_port_with_state_list_u16_max_256 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_ONU_CFG_ID_ALL_GEM_PORTS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, all_gem_ports, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "all_gem_ports");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_onu, all_gem_ports);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_onu, all_gem_ports);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.all_allocs.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpon_alloc_with_state_list_u16_max_32 val = { };
+        int32_t i1;
+        val.val = apicli_byte_pool_calloc(byte_pool, cli_parm->array_size * sizeof(*val.val));
+        if (val.val == NULL)
+        {
+            apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+            return BCM_ERR_NOMEM;
+        }
+
+        val.len = cli_parm->array_size;
+        cli_parm = bcmcli_find_named_parm(session, "filter.all_allocs.alloc_id");
+        if (cli_parm != NULL)
+        {
+            if (cli_parm->array_size != val.len)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.all_allocs.alloc_id is a different size than other arrays in the struct\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i1 = 0; i1 < val.len; i1++)
+            {
+                val.val[i1].alloc_id = (bcmolt_gpon_alloc_id) cli_parm->values[i1].unumber;
+            }
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.all_allocs.state");
+        if (cli_parm != NULL)
+        {
+            if (cli_parm->array_size != val.len)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.all_allocs.state is a different size than other arrays in the struct\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i1 = 0; i1 < val.len; i1++)
+            {
+                val.val[i1].state = (bcmolt_alloc_state) cli_parm->values[i1].enum_val;
+            }
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, all_allocs, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_gpon_alloc_with_state_list_u16_max_32 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_ONU_CFG_ID_ALL_ALLOCS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, all_allocs, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "all_allocs");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_onu, all_allocs);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_onu, all_allocs);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.onu_ps_type_c");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, onu_ps_type_c, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, onu_ps_type_c, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_ONU_CFG_ID_ONU_PS_TYPE_C, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_ps_type_c");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_onu, onu_ps_type_c);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_onu, onu_ps_type_c);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.extended_guard_time.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_extended_guard_time val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.extended_guard_time.additional_preburst_guard_time");
+        if (cli_parm != NULL)
+        {
+            val.additional_preburst_guard_time = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.extended_guard_time.additional_preburst_guard_time is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.extended_guard_time.additional_postburst_guard_time");
+        if (cli_parm != NULL)
+        {
+            val.additional_postburst_guard_time = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.extended_guard_time.additional_postburst_guard_time is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, extended_guard_time, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_extended_guard_time val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_ONU_CFG_ID_EXTENDED_GUARD_TIME, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, extended_guard_time, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "extended_guard_time");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_onu, extended_guard_time);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_onu, extended_guard_time);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_onu, onu_state) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_onu, serial_number) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_onu, password) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_onu, auto_password_learning) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_onu, us_fec) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_onu, omci_port_id) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_onu, ds_ber_reporting_interval) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_onu, aes_encryption_key) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_onu, alarm_state) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_onu, ranging_time) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_onu, disabled_after_discovery) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_onu, deactivation_reason) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_onu, all_gem_ports) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_onu, all_allocs) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_onu, onu_ps_type_c) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_onu, extended_guard_time))
+    {
+        BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_onu, all_properties);
+        bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_onu, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);
+    bcmcli_log("bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_onu_stat_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_onu_stat stat;      /**< declare main API struct */
+    bcmolt_gpon_onu_key key = { };  /**< declare key */
+    bcmos_bool clear_on_read;       /**< declare 'clear on read' flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_onu_stat stat;\n");
+    bcmcli_log("bcmolt_gpon_onu_key key = {  };\n");
+    bcmcli_log("bcmos_bool clear_on_read;\n");
+    apicli_print_start(session, "bcmolt_stat_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_ONU_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        key.onu_id = (bcmolt_gpon_onu_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "onu_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.onu_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_ONU_KEY_ID_ONU_ID, &key.onu_id);
+    bcmcli_log(";\n");
+
+    /* set stat flags from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "clear");
+    if (cli_parm != NULL)
+    {
+        clear_on_read = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "clear is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("clear_on_read = %s;\n", (clear_on_read) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* init the API struct */
+    BCMOLT_STAT_INIT(&stat, gpon_onu, key);
+    bcmcli_log("BCMOLT_STAT_INIT(&stat, gpon_onu, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "fec_codewords");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_onu, fec_codewords);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_onu, fec_codewords);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "fec_bytes_corrected");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_onu, fec_bytes_corrected);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_onu, fec_bytes_corrected);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "fec_codewords_corrected");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_onu, fec_codewords_corrected);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_onu, fec_codewords_corrected);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "fec_codewords_uncorrected");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_onu, fec_codewords_uncorrected);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_onu, fec_codewords_uncorrected);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "bip8_bytes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_onu, bip8_bytes);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_onu, bip8_bytes);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "bip8_errors");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_onu, bip8_errors);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_onu, bip8_errors);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_ploams_crc_error");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_onu, rx_ploams_crc_error);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_onu, rx_ploams_crc_error);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_ploams_non_idle");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_onu, rx_ploams_non_idle);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_onu, rx_ploams_non_idle);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "positive_drift");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_onu, positive_drift);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_onu, positive_drift);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "negative_drift");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_onu, negative_drift);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_onu, negative_drift);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_omci");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_onu, rx_omci);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_onu, rx_omci);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_omci_packets_crc_error");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_onu, rx_omci_packets_crc_error);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_onu, rx_omci_packets_crc_error);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ber_reported");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_onu, ber_reported);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_onu, ber_reported);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "unreceived_burst");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_onu, unreceived_burst);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_onu, unreceived_burst);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "lcdg_errors");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_onu, lcdg_errors);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_onu, lcdg_errors);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rdi_errors");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_onu, rdi_errors);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_onu, rdi_errors);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_bytes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_onu, rx_bytes);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_onu, rx_bytes);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_packets");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_onu, rx_packets);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_onu, rx_packets);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_bytes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_onu, tx_bytes);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_onu, tx_bytes);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_packets");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, gpon_onu, tx_packets);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_onu, tx_packets);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_STAT_PROP_IS_SET(&stat, gpon_onu, fec_codewords) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_onu, fec_bytes_corrected) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_onu, fec_codewords_corrected) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_onu, fec_codewords_uncorrected) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_onu, bip8_bytes) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_onu, bip8_errors) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_onu, rx_ploams_crc_error) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_onu, rx_ploams_non_idle) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_onu, positive_drift) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_onu, negative_drift) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_onu, rx_omci) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_onu, rx_omci_packets_crc_error) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_onu, ber_reported) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_onu, unreceived_burst) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_onu, lcdg_errors) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_onu, rdi_errors) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_onu, rx_bytes) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_onu, rx_packets) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_onu, tx_bytes) && !BCMOLT_STAT_PROP_IS_SET(&stat, gpon_onu, tx_packets))
+    {
+        BCMOLT_STAT_PROP_GET(&stat, gpon_onu, all_properties);
+        bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, gpon_onu, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_stat_get(device_id, &stat.hdr, clear_on_read);
+    bcmcli_log("bcmolt_stat_get(device_id, &stat.hdr, clear_on_read);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &stat.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, stat.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_onu_oper_set_onu_state_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_onu_set_onu_state oper; /**< declare main API struct */
+    bcmolt_gpon_onu_key key = { };      /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_onu_set_onu_state oper;\n");
+    bcmcli_log("bcmolt_gpon_onu_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_ONU_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        key.onu_id = (bcmolt_gpon_onu_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "onu_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.onu_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_ONU_KEY_ID_ONU_ID, &key.onu_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, gpon_onu, set_onu_state, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, gpon_onu, set_onu_state, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "onu_state");
+    if (cli_parm != NULL)
+    {
+        bcmolt_onu_operation val;
+        val = (bcmolt_onu_operation) cli_parm->value.enum_val;
+        BCMOLT_OPER_PROP_SET(&oper, gpon_onu, set_onu_state, onu_state, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, gpon_onu, set_onu_state, onu_state, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_OPER, BCMOLT_GPON_ONU_OPER_ID_SET_ONU_STATE, BCMOLT_GPON_ONU_SET_ONU_STATE_ID_ONU_STATE, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_onu_oper_rssi_measurement_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_onu_rssi_measurement oper;  /**< declare main API struct */
+    bcmolt_gpon_onu_key key = { };          /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_onu_rssi_measurement oper;\n");
+    bcmcli_log("bcmolt_gpon_onu_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_ONU_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        key.onu_id = (bcmolt_gpon_onu_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "onu_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.onu_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_ONU_KEY_ID_ONU_ID, &key.onu_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, gpon_onu, rssi_measurement, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, gpon_onu, rssi_measurement, key);\n");
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_onu_oper_change_power_level_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_onu_change_power_level oper;    /**< declare main API struct */
+    bcmolt_gpon_onu_key key = { };              /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_onu_change_power_level oper;\n");
+    bcmcli_log("bcmolt_gpon_onu_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_ONU_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        key.onu_id = (bcmolt_gpon_onu_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "onu_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.onu_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_ONU_KEY_ID_ONU_ID, &key.onu_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, gpon_onu, change_power_level, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, gpon_onu, change_power_level, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "power_level_action");
+    if (cli_parm != NULL)
+    {
+        bcmolt_onu_power_level val;
+        val = (bcmolt_onu_power_level) cli_parm->value.enum_val;
+        BCMOLT_OPER_PROP_SET(&oper, gpon_onu, change_power_level, power_level_action, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, gpon_onu, change_power_level, power_level_action, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_OPER, BCMOLT_GPON_ONU_OPER_ID_CHANGE_POWER_LEVEL, BCMOLT_GPON_ONU_CHANGE_POWER_LEVEL_ID_POWER_LEVEL_ACTION, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_onu_proxy_cpu_packets_send(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_onu_cpu_packets proxy;  /**< declare main API struct */
+    bcmolt_gpon_onu_key key = { };      /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_onu_cpu_packets proxy;\n");
+    bcmcli_log("bcmolt_gpon_onu_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_proxy_send");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_ONU_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        key.onu_id = (bcmolt_gpon_onu_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "onu_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.onu_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_ONU_KEY_ID_ONU_ID, &key.onu_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_PROXY_INIT(&proxy, gpon_onu, cpu_packets, key);
+    bcmcli_log("BCMOLT_PROXY_INIT(&proxy, gpon_onu, cpu_packets, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "packet_type");
+    if (cli_parm != NULL)
+    {
+        bcmolt_packet_type val;
+        val = (bcmolt_packet_type) cli_parm->value.enum_val;
+        BCMOLT_PROXY_PROP_SET(&proxy, gpon_onu, cpu_packets, packet_type, val);
+        bcmcli_log("BCMOLT_PROXY_PROP_SET(&proxy, gpon_onu, cpu_packets, packet_type, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_PROXY, BCMOLT_GPON_ONU_PROXY_ID_CPU_PACKETS, BCMOLT_GPON_ONU_CPU_PACKETS_ID_PACKET_TYPE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "calc_crc");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_PROXY_PROP_SET(&proxy, gpon_onu, cpu_packets, calc_crc, val);
+        bcmcli_log("BCMOLT_PROXY_PROP_SET(&proxy, gpon_onu, cpu_packets, calc_crc, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_PROXY, BCMOLT_GPON_ONU_PROXY_ID_CPU_PACKETS, BCMOLT_GPON_ONU_CPU_PACKETS_ID_CALC_CRC, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "number_of_packets");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_PROXY_PROP_SET(&proxy, gpon_onu, cpu_packets, number_of_packets, val);
+        bcmcli_log("BCMOLT_PROXY_PROP_SET(&proxy, gpon_onu, cpu_packets, number_of_packets, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_PROXY, BCMOLT_GPON_ONU_PROXY_ID_CPU_PACKETS, BCMOLT_GPON_ONU_CPU_PACKETS_ID_NUMBER_OF_PACKETS, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "packet_size");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_PROXY_PROP_SET(&proxy, gpon_onu, cpu_packets, packet_size, val);
+        bcmcli_log("BCMOLT_PROXY_PROP_SET(&proxy, gpon_onu, cpu_packets, packet_size, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_PROXY, BCMOLT_GPON_ONU_PROXY_ID_CPU_PACKETS, BCMOLT_GPON_ONU_CPU_PACKETS_ID_PACKET_SIZE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "buffer");
+    if (cli_parm != NULL)
+    {
+        bcmolt_u8_list_u32_max_2048 val = { };
+        val.len = bcmolt_buf_get_used(&cli_parm->value.buffer);
+        val.val = apicli_byte_pool_calloc(byte_pool, val.len);
+        if (val.val == NULL)
+        {
+            apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+            return BCM_ERR_NOMEM;
+        }
+
+        bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+        bcmolt_buf_read(&cli_parm->value.buffer, val.val, val.len);
+        BCMOLT_PROXY_PROP_SET(&proxy, gpon_onu, cpu_packets, buffer, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_u8_list_u32_max_2048 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_PROXY, BCMOLT_GPON_ONU_PROXY_ID_CPU_PACKETS, BCMOLT_GPON_ONU_CPU_PACKETS_ID_BUFFER, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_PROXY_PROP_SET(&proxy, gpon_onu, cpu_packets, buffer, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_proxy_send(device_id, &proxy.hdr);
+    bcmcli_log("bcmolt_proxy_send(device_id, &proxy.hdr);\n");
+    apicli_print_complete(session, err, proxy.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_onu_proxy_ploam_packet_send(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_onu_ploam_packet proxy; /**< declare main API struct */
+    bcmolt_gpon_onu_key key = { };      /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_onu_ploam_packet proxy;\n");
+    bcmcli_log("bcmolt_gpon_onu_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_proxy_send");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_ONU_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        key.onu_id = (bcmolt_gpon_onu_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "onu_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.onu_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_ONU_KEY_ID_ONU_ID, &key.onu_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_PROXY_INIT(&proxy, gpon_onu, ploam_packet, key);
+    bcmcli_log("BCMOLT_PROXY_INIT(&proxy, gpon_onu, ploam_packet, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "ploam.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_arr_u8_12 val = { };
+        cli_parm = bcmcli_find_named_parm(session, "ploam.arr");
+        if (cli_parm != NULL)
+        {
+            if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 12)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "buffer ploam.arr must have 12 bytes\n");
+                return BCM_ERR_PARM;
+            }
+
+            bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+            bcmolt_buf_read(&cli_parm->value.buffer, val.arr, 12);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ploam.arr is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_PROXY_PROP_SET(&proxy, gpon_onu, ploam_packet, ploam, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_arr_u8_12 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_PROXY, BCMOLT_GPON_ONU_PROXY_ID_PLOAM_PACKET, BCMOLT_GPON_ONU_PLOAM_PACKET_ID_PLOAM, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_PROXY_PROP_SET(&proxy, gpon_onu, ploam_packet, ploam, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_proxy_send(device_id, &proxy.hdr);
+    bcmcli_log("bcmolt_proxy_send(device_id, &proxy.hdr);\n");
+    apicli_print_complete(session, err, proxy.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_onu_stat_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_onu_stat_cfg stat_cfg;  /**< declare main API struct */
+    bcmolt_gpon_onu_key key = { };      /**< declare key */
+    bcmolt_gpon_onu_stat_id stat_id;    /**< declare stat ID */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_onu_stat_cfg stat_cfg;\n");
+    bcmcli_log("bcmolt_gpon_onu_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_stat_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_ONU_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        key.onu_id = (bcmolt_gpon_onu_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "onu_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.onu_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_ONU_KEY_ID_ONU_ID, &key.onu_id);
+    bcmcli_log(";\n");
+
+    /* set stat ID from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "sub");
+    if (cli_parm != NULL)
+    {
+        stat_id = (bcmolt_gpon_onu_stat_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    /* init the API struct */
+    switch (stat_id)
+    {
+        case BCMOLT_GPON_ONU_STAT_ID_FEC_CODEWORDS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, fec_codewords, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, fec_codewords, key);\n");
+            break;
+        case BCMOLT_GPON_ONU_STAT_ID_FEC_BYTES_CORRECTED:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, fec_bytes_corrected, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, fec_bytes_corrected, key);\n");
+            break;
+        case BCMOLT_GPON_ONU_STAT_ID_FEC_CODEWORDS_CORRECTED:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, fec_codewords_corrected, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, fec_codewords_corrected, key);\n");
+            break;
+        case BCMOLT_GPON_ONU_STAT_ID_FEC_CODEWORDS_UNCORRECTED:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, fec_codewords_uncorrected, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, fec_codewords_uncorrected, key);\n");
+            break;
+        case BCMOLT_GPON_ONU_STAT_ID_BIP8_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, bip8_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, bip8_bytes, key);\n");
+            break;
+        case BCMOLT_GPON_ONU_STAT_ID_BIP8_ERRORS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, bip8_errors, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, bip8_errors, key);\n");
+            break;
+        case BCMOLT_GPON_ONU_STAT_ID_RX_PLOAMS_CRC_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, rx_ploams_crc_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, rx_ploams_crc_error, key);\n");
+            break;
+        case BCMOLT_GPON_ONU_STAT_ID_RX_PLOAMS_NON_IDLE:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, rx_ploams_non_idle, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, rx_ploams_non_idle, key);\n");
+            break;
+        case BCMOLT_GPON_ONU_STAT_ID_POSITIVE_DRIFT:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, positive_drift, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, positive_drift, key);\n");
+            break;
+        case BCMOLT_GPON_ONU_STAT_ID_NEGATIVE_DRIFT:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, negative_drift, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, negative_drift, key);\n");
+            break;
+        case BCMOLT_GPON_ONU_STAT_ID_RX_OMCI:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, rx_omci, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, rx_omci, key);\n");
+            break;
+        case BCMOLT_GPON_ONU_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, rx_omci_packets_crc_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, rx_omci_packets_crc_error, key);\n");
+            break;
+        case BCMOLT_GPON_ONU_STAT_ID_BER_REPORTED:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, ber_reported, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, ber_reported, key);\n");
+            break;
+        case BCMOLT_GPON_ONU_STAT_ID_UNRECEIVED_BURST:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, unreceived_burst, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, unreceived_burst, key);\n");
+            break;
+        case BCMOLT_GPON_ONU_STAT_ID_LCDG_ERRORS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, lcdg_errors, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, lcdg_errors, key);\n");
+            break;
+        case BCMOLT_GPON_ONU_STAT_ID_RDI_ERRORS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, rdi_errors, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, rdi_errors, key);\n");
+            break;
+        case BCMOLT_GPON_ONU_STAT_ID_RX_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, rx_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, rx_bytes, key);\n");
+            break;
+        case BCMOLT_GPON_ONU_STAT_ID_RX_PACKETS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, rx_packets, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, rx_packets, key);\n");
+            break;
+        case BCMOLT_GPON_ONU_STAT_ID_TX_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, tx_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, tx_bytes, key);\n");
+            break;
+        case BCMOLT_GPON_ONU_STAT_ID_TX_PACKETS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, tx_packets, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, tx_packets, key);\n");
+            break;
+        default:
+            apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+            return BCM_ERR_RANGE;
+    }
+
+    /* call API */
+    err = bcmolt_stat_cfg_get(device_id, &stat_cfg.hdr);
+    bcmcli_log("bcmolt_stat_cfg_get(device_id, &stat_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &stat_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, stat_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_onu_stat_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_onu_stat_cfg stat_cfg;  /**< declare main API struct */
+    bcmolt_gpon_onu_key key = { };      /**< declare key */
+    bcmolt_gpon_onu_stat_id stat_id;    /**< declare stat ID */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_onu_stat_cfg stat_cfg;\n");
+    bcmcli_log("bcmolt_gpon_onu_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_stat_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_ONU_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        key.onu_id = (bcmolt_gpon_onu_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "onu_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.onu_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_ONU_KEY_ID_ONU_ID, &key.onu_id);
+    bcmcli_log(";\n");
+
+    /* set stat ID from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "sub");
+    if (cli_parm != NULL)
+    {
+        stat_id = (bcmolt_gpon_onu_stat_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    /* init the API struct */
+    switch (stat_id)
+    {
+        case BCMOLT_GPON_ONU_STAT_ID_FEC_CODEWORDS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, fec_codewords, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, fec_codewords, key);\n");
+            break;
+        case BCMOLT_GPON_ONU_STAT_ID_FEC_BYTES_CORRECTED:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, fec_bytes_corrected, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, fec_bytes_corrected, key);\n");
+            break;
+        case BCMOLT_GPON_ONU_STAT_ID_FEC_CODEWORDS_CORRECTED:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, fec_codewords_corrected, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, fec_codewords_corrected, key);\n");
+            break;
+        case BCMOLT_GPON_ONU_STAT_ID_FEC_CODEWORDS_UNCORRECTED:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, fec_codewords_uncorrected, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, fec_codewords_uncorrected, key);\n");
+            break;
+        case BCMOLT_GPON_ONU_STAT_ID_BIP8_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, bip8_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, bip8_bytes, key);\n");
+            break;
+        case BCMOLT_GPON_ONU_STAT_ID_BIP8_ERRORS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, bip8_errors, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, bip8_errors, key);\n");
+            break;
+        case BCMOLT_GPON_ONU_STAT_ID_RX_PLOAMS_CRC_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, rx_ploams_crc_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, rx_ploams_crc_error, key);\n");
+            break;
+        case BCMOLT_GPON_ONU_STAT_ID_RX_PLOAMS_NON_IDLE:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, rx_ploams_non_idle, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, rx_ploams_non_idle, key);\n");
+            break;
+        case BCMOLT_GPON_ONU_STAT_ID_POSITIVE_DRIFT:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, positive_drift, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, positive_drift, key);\n");
+            break;
+        case BCMOLT_GPON_ONU_STAT_ID_NEGATIVE_DRIFT:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, negative_drift, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, negative_drift, key);\n");
+            break;
+        case BCMOLT_GPON_ONU_STAT_ID_RX_OMCI:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, rx_omci, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, rx_omci, key);\n");
+            break;
+        case BCMOLT_GPON_ONU_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, rx_omci_packets_crc_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, rx_omci_packets_crc_error, key);\n");
+            break;
+        case BCMOLT_GPON_ONU_STAT_ID_BER_REPORTED:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, ber_reported, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, ber_reported, key);\n");
+            break;
+        case BCMOLT_GPON_ONU_STAT_ID_UNRECEIVED_BURST:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, unreceived_burst, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, unreceived_burst, key);\n");
+            break;
+        case BCMOLT_GPON_ONU_STAT_ID_LCDG_ERRORS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, lcdg_errors, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, lcdg_errors, key);\n");
+            break;
+        case BCMOLT_GPON_ONU_STAT_ID_RDI_ERRORS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, rdi_errors, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, rdi_errors, key);\n");
+            break;
+        case BCMOLT_GPON_ONU_STAT_ID_RX_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, rx_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, rx_bytes, key);\n");
+            break;
+        case BCMOLT_GPON_ONU_STAT_ID_RX_PACKETS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, rx_packets, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, rx_packets, key);\n");
+            break;
+        case BCMOLT_GPON_ONU_STAT_ID_TX_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, tx_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, tx_bytes, key);\n");
+            break;
+        case BCMOLT_GPON_ONU_STAT_ID_TX_PACKETS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, tx_packets, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, gpon_onu, tx_packets, key);\n");
+            break;
+        default:
+            apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+            return BCM_ERR_RANGE;
+    }
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_stat_alarm_config val = { };
+        cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.trigger.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.type");
+            if (cli_parm != NULL)
+            {
+                val.trigger.type = (bcmolt_stat_condition_type) cli_parm->value.enum_val;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.type is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            switch (val.trigger.type)
+            {
+                case BCMOLT_STAT_CONDITION_TYPE_RATE_THRESHOLD:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.rising");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_threshold.rising = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.rising is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.falling");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_threshold.falling = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.falling is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_RATE_RANGE:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.upper");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_range.upper = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.upper is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.lower");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_range.lower = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.lower is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_VALUE_THRESHOLD:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.limit");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.value_threshold.limit = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.limit is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_NONE:
+                    break;
+                default:
+                    apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+                    return BCM_ERR_RANGE;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.soak.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "cfg.soak.active_soak_time");
+            if (cli_parm != NULL)
+            {
+                val.soak.active_soak_time = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak.active_soak_time is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "cfg.soak.clear_soak_time");
+            if (cli_parm != NULL)
+            {
+                val.soak.clear_soak_time = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak.clear_soak_time is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_STAT_CFG_PROP_SET(&stat_cfg, gpon_onu, cfg, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_stat_alarm_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_STAT_CFG, 0, BCMOLT_GPON_ONU_STAT_CFG_ID_CFG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_STAT_CFG_PROP_SET(&stat_cfg, gpon_onu, cfg, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_stat_cfg_set(device_id, &stat_cfg.hdr);
+    bcmcli_log("bcmolt_stat_cfg_set(device_id, &stat_cfg.hdr);\n");
+    apicli_print_complete(session, err, stat_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_onu_auto_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_onu_auto_cfg auto_cfg;  /**< declare main API struct */
+    bcmolt_gpon_onu_key key = { };      /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_onu_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_gpon_onu_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_get");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, gpon_onu, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, gpon_onu, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "ber_interval_configuration_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, ber_interval_configuration_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, ber_interval_configuration_completed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "dfi");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, dfi);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, dfi);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "dgi");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, dgi);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, dgi);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "dowi");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, dowi);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, dowi);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "err");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, err);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, err);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "invalid_dbru_report");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, invalid_dbru_report);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, invalid_dbru_report);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "key_exchange_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, key_exchange_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, key_exchange_completed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "key_exchange_cycle_skipped");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, key_exchange_cycle_skipped);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, key_exchange_cycle_skipped);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "key_exchange_decrypt_required");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, key_exchange_decrypt_required);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, key_exchange_decrypt_required);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "key_exchange_key_mismatch");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, key_exchange_key_mismatch);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, key_exchange_key_mismatch);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "key_exchange_key_request_timeout");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, key_exchange_key_request_timeout);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, key_exchange_key_request_timeout);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "key_exchange_unconsecutive_index");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, key_exchange_unconsecutive_index);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, key_exchange_unconsecutive_index);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "loai");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, loai);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, loai);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "loki");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, loki);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, loki);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "memi");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, memi);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, memi);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "omci_port_id_configuration_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, omci_port_id_configuration_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, omci_port_id_configuration_completed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_activation_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, onu_activation_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, onu_activation_completed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_activation_standby_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, onu_activation_standby_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, onu_activation_standby_completed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_alarm");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, onu_alarm);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, onu_alarm);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_deactivation_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, onu_deactivation_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, onu_deactivation_completed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_disable_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, onu_disable_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, onu_disable_completed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_enable_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, onu_enable_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, onu_enable_completed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "optical_reflection");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, optical_reflection);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, optical_reflection);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "password_authentication_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, password_authentication_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, password_authentication_completed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "pee");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, pee);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, pee);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "possible_drift");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, possible_drift);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, possible_drift);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "power_management_state_change");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, power_management_state_change);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, power_management_state_change);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "pst");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, pst);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, pst);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ranging_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, ranging_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, ranging_completed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rei");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, rei);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, rei);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rssi_measurement_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, rssi_measurement_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, rssi_measurement_completed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "sdi");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, sdi);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, sdi);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "sfi");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, sfi);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, sfi);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_cleared");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, stat_alarm_cleared);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, stat_alarm_cleared);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_raised");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, stat_alarm_raised);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, stat_alarm_raised);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "sufi");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, sufi);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, sufi);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tiwi");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, tiwi);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, tiwi);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_onu, ber_interval_configuration_completed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_onu, dfi) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_onu, dgi) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_onu, dowi) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_onu, err) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_onu, invalid_dbru_report) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_onu, key_exchange_completed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_onu, key_exchange_cycle_skipped) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_onu, key_exchange_decrypt_required) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_onu, key_exchange_key_mismatch) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_onu, key_exchange_key_request_timeout) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_onu, key_exchange_unconsecutive_index) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_onu, loai) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_onu, loki) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_onu, memi) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_onu, omci_port_id_configuration_completed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_onu, onu_activation_completed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_onu, onu_activation_standby_completed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_onu, onu_alarm) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_onu, onu_deactivation_completed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_onu, onu_disable_completed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_onu, onu_enable_completed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_onu, optical_reflection) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_onu, password_authentication_completed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_onu, pee) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_onu, possible_drift) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_onu, power_management_state_change) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_onu, pst) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_onu, ranging_completed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_onu, rei) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_onu, rssi_measurement_completed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_onu, sdi) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_onu, sfi) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_onu, stat_alarm_cleared) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_onu, stat_alarm_raised) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_onu, sufi) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, gpon_onu, tiwi))
+    {
+        BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, all_properties);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, gpon_onu, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &auto_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_onu_auto_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_onu_auto_cfg auto_cfg;  /**< declare main API struct */
+    bcmolt_gpon_onu_key key = { };      /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_onu_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_gpon_onu_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_set");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, gpon_onu, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, gpon_onu, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "ber_interval_configuration_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, ber_interval_configuration_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, ber_interval_configuration_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_ONU_AUTO_CFG_ID_BER_INTERVAL_CONFIGURATION_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "dfi");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, dfi, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, dfi, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_ONU_AUTO_CFG_ID_DFI, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "dgi");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, dgi, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, dgi, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_ONU_AUTO_CFG_ID_DGI, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "dowi");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, dowi, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, dowi, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_ONU_AUTO_CFG_ID_DOWI, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "err");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, err, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, err, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_ONU_AUTO_CFG_ID_ERR, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "invalid_dbru_report");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, invalid_dbru_report, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, invalid_dbru_report, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_ONU_AUTO_CFG_ID_INVALID_DBRU_REPORT, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "key_exchange_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, key_exchange_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, key_exchange_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "key_exchange_cycle_skipped");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, key_exchange_cycle_skipped, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, key_exchange_cycle_skipped, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_CYCLE_SKIPPED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "key_exchange_decrypt_required");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, key_exchange_decrypt_required, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, key_exchange_decrypt_required, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_DECRYPT_REQUIRED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "key_exchange_key_mismatch");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, key_exchange_key_mismatch, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, key_exchange_key_mismatch, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_KEY_MISMATCH, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "key_exchange_key_request_timeout");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, key_exchange_key_request_timeout, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, key_exchange_key_request_timeout, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_KEY_REQUEST_TIMEOUT, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "key_exchange_unconsecutive_index");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, key_exchange_unconsecutive_index, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, key_exchange_unconsecutive_index, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_UNCONSECUTIVE_INDEX, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "loai");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, loai, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, loai, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_ONU_AUTO_CFG_ID_LOAI, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "loki");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, loki, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, loki, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_ONU_AUTO_CFG_ID_LOKI, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "memi");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, memi, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, memi, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_ONU_AUTO_CFG_ID_MEMI, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "omci_port_id_configuration_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, omci_port_id_configuration_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, omci_port_id_configuration_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_ONU_AUTO_CFG_ID_OMCI_PORT_ID_CONFIGURATION_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_activation_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, onu_activation_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, onu_activation_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_ACTIVATION_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_activation_standby_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, onu_activation_standby_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, onu_activation_standby_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_ACTIVATION_STANDBY_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_alarm");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, onu_alarm, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, onu_alarm, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_ALARM, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_deactivation_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, onu_deactivation_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, onu_deactivation_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_DEACTIVATION_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_disable_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, onu_disable_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, onu_disable_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_DISABLE_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_enable_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, onu_enable_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, onu_enable_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_ENABLE_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "optical_reflection");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, optical_reflection, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, optical_reflection, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_ONU_AUTO_CFG_ID_OPTICAL_REFLECTION, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "password_authentication_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, password_authentication_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, password_authentication_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_ONU_AUTO_CFG_ID_PASSWORD_AUTHENTICATION_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "pee");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, pee, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, pee, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_ONU_AUTO_CFG_ID_PEE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "possible_drift");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, possible_drift, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, possible_drift, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_ONU_AUTO_CFG_ID_POSSIBLE_DRIFT, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "power_management_state_change");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, power_management_state_change, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, power_management_state_change, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_ONU_AUTO_CFG_ID_POWER_MANAGEMENT_STATE_CHANGE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "pst");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, pst, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, pst, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_ONU_AUTO_CFG_ID_PST, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ranging_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, ranging_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, ranging_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_ONU_AUTO_CFG_ID_RANGING_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rei");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, rei, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, rei, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_ONU_AUTO_CFG_ID_REI, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rssi_measurement_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, rssi_measurement_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, rssi_measurement_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_ONU_AUTO_CFG_ID_RSSI_MEASUREMENT_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "sdi");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, sdi, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, sdi, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_ONU_AUTO_CFG_ID_SDI, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "sfi");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, sfi, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, sfi, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_ONU_AUTO_CFG_ID_SFI, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_cleared");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, stat_alarm_cleared, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, stat_alarm_cleared, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_ONU_AUTO_CFG_ID_STAT_ALARM_CLEARED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_raised");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, stat_alarm_raised, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, stat_alarm_raised, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_ONU_AUTO_CFG_ID_STAT_ALARM_RAISED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "sufi");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, sufi, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, sufi, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_ONU_AUTO_CFG_ID_SUFI, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tiwi");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, tiwi, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, gpon_onu, tiwi, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_GPON_ONU_AUTO_CFG_ID_TIWI, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);\n");
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_trx_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_trx_cfg cfg;        /**< declare main API struct */
+    bcmolt_gpon_trx_key key = { };  /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_trx_cfg cfg;\n");
+    bcmcli_log("bcmolt_gpon_trx_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_TRX_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, gpon_trx, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, gpon_trx, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "transceiver_type");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, transceiver_type);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, transceiver_type);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "la_configuration");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, la_configuration);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, la_configuration);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "bcdr");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, bcdr);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, bcdr);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "la_ranging_after_no_ed_resync");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, la_ranging_after_no_ed_resync);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, la_ranging_after_no_ed_resync);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "bcdr_ranging_after_no_ed_resync");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, bcdr_ranging_after_no_ed_resync);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, bcdr_ranging_after_no_ed_resync);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "la_ranging_after_ed_resync");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, la_ranging_after_ed_resync);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, la_ranging_after_ed_resync);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "bcdr_ranging_after_ed_resync");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, bcdr_ranging_after_ed_resync);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, bcdr_ranging_after_ed_resync);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "la_resync_polarity");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, la_resync_polarity);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, la_resync_polarity);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "bcdr_resync_polarity");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, bcdr_resync_polarity);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, bcdr_resync_polarity);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "bcdr_ranging_resync_conditions");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, bcdr_ranging_resync_conditions);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, bcdr_ranging_resync_conditions);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "la_ranging_resync_conditions");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, la_ranging_resync_conditions);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, la_ranging_resync_conditions);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_configuration");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, rx_configuration);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, rx_configuration);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ranging_control_stages_configuration");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, ranging_control_stages_configuration);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, ranging_control_stages_configuration);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "energy_detect");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, energy_detect);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, energy_detect);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "end_of_burst_data_pattern");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, end_of_burst_data_pattern);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, end_of_burst_data_pattern);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "end_of_burst_ranging_pattern");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, end_of_burst_ranging_pattern);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, end_of_burst_ranging_pattern);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "preamble");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, preamble);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, preamble);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "delimiter");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, delimiter);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, delimiter);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "guard_bits");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, guard_bits);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, guard_bits);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "serdes_configuration");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, serdes_configuration);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, serdes_configuration);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "plo_ranging");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, plo_ranging);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, plo_ranging);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "plo_data");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, plo_data);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, plo_data);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rssi_normal_config");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, rssi_normal_config);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, rssi_normal_config);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ranging_rssi_resync_control");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, ranging_rssi_resync_control);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, ranging_rssi_resync_control);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_trx, transceiver_type) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_trx, la_configuration) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_trx, bcdr) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_trx, la_ranging_after_no_ed_resync) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_trx, bcdr_ranging_after_no_ed_resync) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_trx, la_ranging_after_ed_resync) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_trx, bcdr_ranging_after_ed_resync) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_trx, la_resync_polarity) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_trx, bcdr_resync_polarity) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_trx, bcdr_ranging_resync_conditions) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_trx, la_ranging_resync_conditions) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_trx, rx_configuration) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_trx, ranging_control_stages_configuration) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_trx, energy_detect) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_trx, end_of_burst_data_pattern) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_trx, end_of_burst_ranging_pattern) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_trx, preamble) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_trx, delimiter) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_trx, guard_bits) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_trx, serdes_configuration) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_trx, plo_ranging) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_trx, plo_data) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_trx, rssi_normal_config) && !BCMOLT_CFG_PROP_IS_SET(&cfg, gpon_trx, ranging_rssi_resync_control))
+    {
+        BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, all_properties);
+        bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, gpon_trx, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_get(device_id, &cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_trx_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_trx_cfg cfg;        /**< declare main API struct */
+    bcmolt_gpon_trx_key key = { };  /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_trx_cfg cfg;\n");
+    bcmcli_log("bcmolt_gpon_trx_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_TRX_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, gpon_trx, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, gpon_trx, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "transceiver_type");
+    if (cli_parm != NULL)
+    {
+        bcmolt_trx_type val;
+        val = (bcmolt_trx_type) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, transceiver_type, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, transceiver_type, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_TRANSCEIVER_TYPE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "la_configuration.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_la_resync_pattern_configuration val = { };
+        cli_parm = bcmcli_find_parm_by_prefix(session, "la_configuration.resync_control.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "la_configuration.resync_control.start_pattern");
+            if (cli_parm != NULL)
+            {
+                val.resync_control.start_pattern = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "la_configuration.resync_control.start_pattern is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "la_configuration.resync_control.middle_pattern");
+            if (cli_parm != NULL)
+            {
+                val.resync_control.middle_pattern = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "la_configuration.resync_control.middle_pattern is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "la_configuration.resync_control.last_pattern");
+            if (cli_parm != NULL)
+            {
+                val.resync_control.last_pattern = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "la_configuration.resync_control.last_pattern is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "la_configuration.resync_control.middle_repetition");
+            if (cli_parm != NULL)
+            {
+                val.resync_control.middle_repetition = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "la_configuration.resync_control.middle_repetition is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "la_configuration.resync_control.location");
+            if (cli_parm != NULL)
+            {
+                val.resync_control.location = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "la_configuration.resync_control.location is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "la_configuration.resync_control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "la_configuration.ranging_resync_control.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "la_configuration.ranging_resync_control.start_pattern");
+            if (cli_parm != NULL)
+            {
+                val.ranging_resync_control.start_pattern = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "la_configuration.ranging_resync_control.start_pattern is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "la_configuration.ranging_resync_control.middle_pattern");
+            if (cli_parm != NULL)
+            {
+                val.ranging_resync_control.middle_pattern = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "la_configuration.ranging_resync_control.middle_pattern is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "la_configuration.ranging_resync_control.last_pattern");
+            if (cli_parm != NULL)
+            {
+                val.ranging_resync_control.last_pattern = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "la_configuration.ranging_resync_control.last_pattern is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "la_configuration.ranging_resync_control.middle_repetition");
+            if (cli_parm != NULL)
+            {
+                val.ranging_resync_control.middle_repetition = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "la_configuration.ranging_resync_control.middle_repetition is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "la_configuration.ranging_resync_control.location");
+            if (cli_parm != NULL)
+            {
+                val.ranging_resync_control.location = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "la_configuration.ranging_resync_control.location is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "la_configuration.ranging_resync_control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, la_configuration, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_la_resync_pattern_configuration val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_LA_CONFIGURATION, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, la_configuration, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "bcdr.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_bcdr_resync_pattern_configuration val = { };
+        cli_parm = bcmcli_find_parm_by_prefix(session, "bcdr.resync_control.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "bcdr.resync_control.start_pattern");
+            if (cli_parm != NULL)
+            {
+                val.resync_control.start_pattern = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "bcdr.resync_control.start_pattern is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "bcdr.resync_control.middle_pattern");
+            if (cli_parm != NULL)
+            {
+                val.resync_control.middle_pattern = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "bcdr.resync_control.middle_pattern is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "bcdr.resync_control.last_pattern");
+            if (cli_parm != NULL)
+            {
+                val.resync_control.last_pattern = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "bcdr.resync_control.last_pattern is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "bcdr.resync_control.middle_repetition");
+            if (cli_parm != NULL)
+            {
+                val.resync_control.middle_repetition = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "bcdr.resync_control.middle_repetition is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "bcdr.resync_control.location");
+            if (cli_parm != NULL)
+            {
+                val.resync_control.location = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "bcdr.resync_control.location is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "bcdr.resync_control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "bcdr.ranging_resync_control.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "bcdr.ranging_resync_control.start_pattern");
+            if (cli_parm != NULL)
+            {
+                val.ranging_resync_control.start_pattern = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "bcdr.ranging_resync_control.start_pattern is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "bcdr.ranging_resync_control.middle_pattern");
+            if (cli_parm != NULL)
+            {
+                val.ranging_resync_control.middle_pattern = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "bcdr.ranging_resync_control.middle_pattern is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "bcdr.ranging_resync_control.last_pattern");
+            if (cli_parm != NULL)
+            {
+                val.ranging_resync_control.last_pattern = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "bcdr.ranging_resync_control.last_pattern is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "bcdr.ranging_resync_control.middle_repetition");
+            if (cli_parm != NULL)
+            {
+                val.ranging_resync_control.middle_repetition = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "bcdr.ranging_resync_control.middle_repetition is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "bcdr.ranging_resync_control.location");
+            if (cli_parm != NULL)
+            {
+                val.ranging_resync_control.location = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "bcdr.ranging_resync_control.location is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "bcdr.ranging_resync_control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, bcdr, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_bcdr_resync_pattern_configuration val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_BCDR, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, bcdr, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "la_ranging_after_no_ed_resync.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_resync_control val = { };
+        cli_parm = bcmcli_find_named_parm(session, "la_ranging_after_no_ed_resync.start_pattern");
+        if (cli_parm != NULL)
+        {
+            val.start_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "la_ranging_after_no_ed_resync.start_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "la_ranging_after_no_ed_resync.middle_pattern");
+        if (cli_parm != NULL)
+        {
+            val.middle_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "la_ranging_after_no_ed_resync.middle_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "la_ranging_after_no_ed_resync.last_pattern");
+        if (cli_parm != NULL)
+        {
+            val.last_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "la_ranging_after_no_ed_resync.last_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "la_ranging_after_no_ed_resync.middle_repetition");
+        if (cli_parm != NULL)
+        {
+            val.middle_repetition = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "la_ranging_after_no_ed_resync.middle_repetition is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "la_ranging_after_no_ed_resync.location");
+        if (cli_parm != NULL)
+        {
+            val.location = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "la_ranging_after_no_ed_resync.location is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, la_ranging_after_no_ed_resync, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_resync_control val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_LA_RANGING_AFTER_NO_ED_RESYNC, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, la_ranging_after_no_ed_resync, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "bcdr_ranging_after_no_ed_resync.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_resync_control val = { };
+        cli_parm = bcmcli_find_named_parm(session, "bcdr_ranging_after_no_ed_resync.start_pattern");
+        if (cli_parm != NULL)
+        {
+            val.start_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "bcdr_ranging_after_no_ed_resync.start_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "bcdr_ranging_after_no_ed_resync.middle_pattern");
+        if (cli_parm != NULL)
+        {
+            val.middle_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "bcdr_ranging_after_no_ed_resync.middle_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "bcdr_ranging_after_no_ed_resync.last_pattern");
+        if (cli_parm != NULL)
+        {
+            val.last_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "bcdr_ranging_after_no_ed_resync.last_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "bcdr_ranging_after_no_ed_resync.middle_repetition");
+        if (cli_parm != NULL)
+        {
+            val.middle_repetition = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "bcdr_ranging_after_no_ed_resync.middle_repetition is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "bcdr_ranging_after_no_ed_resync.location");
+        if (cli_parm != NULL)
+        {
+            val.location = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "bcdr_ranging_after_no_ed_resync.location is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, bcdr_ranging_after_no_ed_resync, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_resync_control val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_BCDR_RANGING_AFTER_NO_ED_RESYNC, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, bcdr_ranging_after_no_ed_resync, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "la_ranging_after_ed_resync.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_resync_control val = { };
+        cli_parm = bcmcli_find_named_parm(session, "la_ranging_after_ed_resync.start_pattern");
+        if (cli_parm != NULL)
+        {
+            val.start_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "la_ranging_after_ed_resync.start_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "la_ranging_after_ed_resync.middle_pattern");
+        if (cli_parm != NULL)
+        {
+            val.middle_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "la_ranging_after_ed_resync.middle_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "la_ranging_after_ed_resync.last_pattern");
+        if (cli_parm != NULL)
+        {
+            val.last_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "la_ranging_after_ed_resync.last_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "la_ranging_after_ed_resync.middle_repetition");
+        if (cli_parm != NULL)
+        {
+            val.middle_repetition = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "la_ranging_after_ed_resync.middle_repetition is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "la_ranging_after_ed_resync.location");
+        if (cli_parm != NULL)
+        {
+            val.location = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "la_ranging_after_ed_resync.location is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, la_ranging_after_ed_resync, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_resync_control val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_LA_RANGING_AFTER_ED_RESYNC, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, la_ranging_after_ed_resync, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "bcdr_ranging_after_ed_resync.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_resync_control val = { };
+        cli_parm = bcmcli_find_named_parm(session, "bcdr_ranging_after_ed_resync.start_pattern");
+        if (cli_parm != NULL)
+        {
+            val.start_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "bcdr_ranging_after_ed_resync.start_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "bcdr_ranging_after_ed_resync.middle_pattern");
+        if (cli_parm != NULL)
+        {
+            val.middle_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "bcdr_ranging_after_ed_resync.middle_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "bcdr_ranging_after_ed_resync.last_pattern");
+        if (cli_parm != NULL)
+        {
+            val.last_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "bcdr_ranging_after_ed_resync.last_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "bcdr_ranging_after_ed_resync.middle_repetition");
+        if (cli_parm != NULL)
+        {
+            val.middle_repetition = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "bcdr_ranging_after_ed_resync.middle_repetition is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "bcdr_ranging_after_ed_resync.location");
+        if (cli_parm != NULL)
+        {
+            val.location = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "bcdr_ranging_after_ed_resync.location is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, bcdr_ranging_after_ed_resync, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_resync_control val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_BCDR_RANGING_AFTER_ED_RESYNC, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, bcdr_ranging_after_ed_resync, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "la_resync_polarity");
+    if (cli_parm != NULL)
+    {
+        bcmolt_polarity val;
+        val = (bcmolt_polarity) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, la_resync_polarity, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, la_resync_polarity, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_LA_RESYNC_POLARITY, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "bcdr_resync_polarity");
+    if (cli_parm != NULL)
+    {
+        bcmolt_polarity val;
+        val = (bcmolt_polarity) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, bcdr_resync_polarity, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, bcdr_resync_polarity, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_BCDR_RESYNC_POLARITY, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "bcdr_ranging_resync_conditions.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_ranging_resync_conditions val = { };
+        cli_parm = bcmcli_find_named_parm(session, "bcdr_ranging_resync_conditions.after_init");
+        if (cli_parm != NULL)
+        {
+            val.after_init = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "bcdr_ranging_resync_conditions.after_init is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "bcdr_ranging_resync_conditions.after_no_ed");
+        if (cli_parm != NULL)
+        {
+            val.after_no_ed = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "bcdr_ranging_resync_conditions.after_no_ed is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "bcdr_ranging_resync_conditions.after_ed");
+        if (cli_parm != NULL)
+        {
+            val.after_ed = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "bcdr_ranging_resync_conditions.after_ed is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "bcdr_ranging_resync_conditions.after_no_del");
+        if (cli_parm != NULL)
+        {
+            val.after_no_del = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "bcdr_ranging_resync_conditions.after_no_del is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "bcdr_ranging_resync_conditions.after_ranging_access");
+        if (cli_parm != NULL)
+        {
+            val.after_ranging_access = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "bcdr_ranging_resync_conditions.after_ranging_access is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "bcdr_ranging_resync_conditions.med_val");
+        if (cli_parm != NULL)
+        {
+            val.med_val = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "bcdr_ranging_resync_conditions.med_val is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, bcdr_ranging_resync_conditions, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_ranging_resync_conditions val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_BCDR_RANGING_RESYNC_CONDITIONS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, bcdr_ranging_resync_conditions, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "la_ranging_resync_conditions.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_ranging_resync_conditions val = { };
+        cli_parm = bcmcli_find_named_parm(session, "la_ranging_resync_conditions.after_init");
+        if (cli_parm != NULL)
+        {
+            val.after_init = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "la_ranging_resync_conditions.after_init is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "la_ranging_resync_conditions.after_no_ed");
+        if (cli_parm != NULL)
+        {
+            val.after_no_ed = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "la_ranging_resync_conditions.after_no_ed is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "la_ranging_resync_conditions.after_ed");
+        if (cli_parm != NULL)
+        {
+            val.after_ed = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "la_ranging_resync_conditions.after_ed is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "la_ranging_resync_conditions.after_no_del");
+        if (cli_parm != NULL)
+        {
+            val.after_no_del = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "la_ranging_resync_conditions.after_no_del is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "la_ranging_resync_conditions.after_ranging_access");
+        if (cli_parm != NULL)
+        {
+            val.after_ranging_access = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "la_ranging_resync_conditions.after_ranging_access is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "la_ranging_resync_conditions.med_val");
+        if (cli_parm != NULL)
+        {
+            val.med_val = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "la_ranging_resync_conditions.med_val is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, la_ranging_resync_conditions, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_ranging_resync_conditions val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_LA_RANGING_RESYNC_CONDITIONS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, la_ranging_resync_conditions, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "rx_configuration.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_trx_rx_configuration val = { };
+        cli_parm = bcmcli_find_named_parm(session, "rx_configuration.wait_window_size");
+        if (cli_parm != NULL)
+        {
+            val.wait_window_size = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "rx_configuration.wait_window_size is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "rx_configuration.ranging_access_window_size");
+        if (cli_parm != NULL)
+        {
+            val.ranging_access_window_size = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "rx_configuration.ranging_access_window_size is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, rx_configuration, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_trx_rx_configuration val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_RX_CONFIGURATION, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, rx_configuration, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "ranging_control_stages_configuration.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_ranging_control_configuration val = { };
+        cli_parm = bcmcli_find_named_parm(session, "ranging_control_stages_configuration.wait_state_1_window_size");
+        if (cli_parm != NULL)
+        {
+            val.wait_state_1_window_size = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ranging_control_stages_configuration.wait_state_1_window_size is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "ranging_control_stages_configuration.wait_state_2_window_size");
+        if (cli_parm != NULL)
+        {
+            val.wait_state_2_window_size = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ranging_control_stages_configuration.wait_state_2_window_size is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "ranging_control_stages_configuration.wait_after_resync_4");
+        if (cli_parm != NULL)
+        {
+            val.wait_after_resync_4 = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ranging_control_stages_configuration.wait_after_resync_4 is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, ranging_control_stages_configuration, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_ranging_control_configuration val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_RANGING_CONTROL_STAGES_CONFIGURATION, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, ranging_control_stages_configuration, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "energy_detect.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_trx_energy_detect val = { };
+        cli_parm = bcmcli_find_named_parm(session, "energy_detect.ranging_ed_source");
+        if (cli_parm != NULL)
+        {
+            val.ranging_ed_source = (bcmolt_energy_detect_source) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "energy_detect.ranging_ed_source is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "energy_detect.delimiter_ed_source");
+        if (cli_parm != NULL)
+        {
+            val.delimiter_ed_source = (bcmolt_energy_detect_source) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "energy_detect.delimiter_ed_source is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "energy_detect.minimum_threshold");
+        if (cli_parm != NULL)
+        {
+            val.minimum_threshold = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "energy_detect.minimum_threshold is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "energy_detect.maximum_threshold");
+        if (cli_parm != NULL)
+        {
+            val.maximum_threshold = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "energy_detect.maximum_threshold is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "energy_detect.ed_pattern");
+        if (cli_parm != NULL)
+        {
+            val.ed_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "energy_detect.ed_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "energy_detect.ed_pattern_size");
+        if (cli_parm != NULL)
+        {
+            val.ed_pattern_size = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "energy_detect.ed_pattern_size is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "energy_detect.window_size");
+        if (cli_parm != NULL)
+        {
+            val.window_size = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "energy_detect.window_size is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "energy_detect.inversion");
+        if (cli_parm != NULL)
+        {
+            val.inversion = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "energy_detect.inversion is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "energy_detect.no_ed_threshold");
+        if (cli_parm != NULL)
+        {
+            val.no_ed_threshold = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "energy_detect.no_ed_threshold is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, energy_detect, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_trx_energy_detect val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_ENERGY_DETECT, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, energy_detect, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "end_of_burst_data_pattern.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_resync_control val = { };
+        cli_parm = bcmcli_find_named_parm(session, "end_of_burst_data_pattern.start_pattern");
+        if (cli_parm != NULL)
+        {
+            val.start_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "end_of_burst_data_pattern.start_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "end_of_burst_data_pattern.middle_pattern");
+        if (cli_parm != NULL)
+        {
+            val.middle_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "end_of_burst_data_pattern.middle_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "end_of_burst_data_pattern.last_pattern");
+        if (cli_parm != NULL)
+        {
+            val.last_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "end_of_burst_data_pattern.last_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "end_of_burst_data_pattern.middle_repetition");
+        if (cli_parm != NULL)
+        {
+            val.middle_repetition = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "end_of_burst_data_pattern.middle_repetition is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "end_of_burst_data_pattern.location");
+        if (cli_parm != NULL)
+        {
+            val.location = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "end_of_burst_data_pattern.location is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, end_of_burst_data_pattern, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_resync_control val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_END_OF_BURST_DATA_PATTERN, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, end_of_burst_data_pattern, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "end_of_burst_ranging_pattern.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_resync_control val = { };
+        cli_parm = bcmcli_find_named_parm(session, "end_of_burst_ranging_pattern.start_pattern");
+        if (cli_parm != NULL)
+        {
+            val.start_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "end_of_burst_ranging_pattern.start_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "end_of_burst_ranging_pattern.middle_pattern");
+        if (cli_parm != NULL)
+        {
+            val.middle_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "end_of_burst_ranging_pattern.middle_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "end_of_burst_ranging_pattern.last_pattern");
+        if (cli_parm != NULL)
+        {
+            val.last_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "end_of_burst_ranging_pattern.last_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "end_of_burst_ranging_pattern.middle_repetition");
+        if (cli_parm != NULL)
+        {
+            val.middle_repetition = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "end_of_burst_ranging_pattern.middle_repetition is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "end_of_burst_ranging_pattern.location");
+        if (cli_parm != NULL)
+        {
+            val.location = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "end_of_burst_ranging_pattern.location is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, end_of_burst_ranging_pattern, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_resync_control val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_END_OF_BURST_RANGING_PATTERN, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, end_of_burst_ranging_pattern, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "preamble.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_trx_preamble val = { };
+        cli_parm = bcmcli_find_named_parm(session, "preamble.type_1_size");
+        if (cli_parm != NULL)
+        {
+            val.type_1_size = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "preamble.type_1_size is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "preamble.type_2_size");
+        if (cli_parm != NULL)
+        {
+            val.type_2_size = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "preamble.type_2_size is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "preamble.type_3_pre_ranging_size");
+        if (cli_parm != NULL)
+        {
+            val.type_3_pre_ranging_size = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "preamble.type_3_pre_ranging_size is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "preamble.type_3_post_ranging_size");
+        if (cli_parm != NULL)
+        {
+            val.type_3_post_ranging_size = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "preamble.type_3_post_ranging_size is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "preamble.type_3_pattern");
+        if (cli_parm != NULL)
+        {
+            val.type_3_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "preamble.type_3_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, preamble, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_trx_preamble val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_PREAMBLE, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, preamble, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "delimiter.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_trx_delimiter val = { };
+        cli_parm = bcmcli_find_named_parm(session, "delimiter.pattern");
+        if (cli_parm != NULL)
+        {
+            if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 3)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "buffer delimiter.pattern must have 3 bytes\n");
+                return BCM_ERR_PARM;
+            }
+
+            bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+            bcmolt_buf_read(&cli_parm->value.buffer, val.pattern, 3);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "delimiter.pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "delimiter.size");
+        if (cli_parm != NULL)
+        {
+            val.size = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "delimiter.size is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "delimiter.window_size");
+        if (cli_parm != NULL)
+        {
+            val.window_size = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "delimiter.window_size is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, delimiter, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_trx_delimiter val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_DELIMITER, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, delimiter, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "guard_bits");
+    if (cli_parm != NULL)
+    {
+        uint32_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, guard_bits, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, guard_bits, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_GUARD_BITS, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "serdes_configuration.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_serdes_configuration val = { };
+        cli_parm = bcmcli_find_named_parm(session, "serdes_configuration.ranging_mode");
+        if (cli_parm != NULL)
+        {
+            val.ranging_mode = (bcmolt_serdes_ranging_mode) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "serdes_configuration.ranging_mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "serdes_configuration.multi_ed_mode");
+        if (cli_parm != NULL)
+        {
+            val.multi_ed_mode = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "serdes_configuration.multi_ed_mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "serdes_configuration.burst_enable_start_offset");
+        if (cli_parm != NULL)
+        {
+            val.burst_enable_start_offset = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "serdes_configuration.burst_enable_start_offset is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "serdes_configuration.burst_enable_end_offset");
+        if (cli_parm != NULL)
+        {
+            val.burst_enable_end_offset = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "serdes_configuration.burst_enable_end_offset is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "serdes_configuration.ed_invertion");
+        if (cli_parm != NULL)
+        {
+            val.ed_invertion = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "serdes_configuration.ed_invertion is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, serdes_configuration, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_serdes_configuration val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_SERDES_CONFIGURATION, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, serdes_configuration, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "rssi_normal_config.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpon_rssi_general_configuration val = { };
+        cli_parm = bcmcli_find_named_parm(session, "rssi_normal_config.location");
+        if (cli_parm != NULL)
+        {
+            val.location = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "rssi_normal_config.location is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "rssi_normal_config.location_sign");
+        if (cli_parm != NULL)
+        {
+            val.location_sign = (bcmolt_rssi_location_sign) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "rssi_normal_config.location_sign is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "rssi_normal_config.start_pattern");
+        if (cli_parm != NULL)
+        {
+            val.start_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "rssi_normal_config.start_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "rssi_normal_config.middle_pattern");
+        if (cli_parm != NULL)
+        {
+            val.middle_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "rssi_normal_config.middle_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "rssi_normal_config.last_pattern");
+        if (cli_parm != NULL)
+        {
+            val.last_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "rssi_normal_config.last_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "rssi_normal_config.middle_repertition");
+        if (cli_parm != NULL)
+        {
+            val.middle_repertition = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "rssi_normal_config.middle_repertition is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "rssi_normal_config.minimum_burst");
+        if (cli_parm != NULL)
+        {
+            val.minimum_burst = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "rssi_normal_config.minimum_burst is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, rssi_normal_config, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_gpon_rssi_general_configuration val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_RSSI_NORMAL_CONFIG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, rssi_normal_config, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "ranging_rssi_resync_control.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_ranging_rssi_control val = { };
+        cli_parm = bcmcli_find_named_parm(session, "ranging_rssi_resync_control.after_no_ed");
+        if (cli_parm != NULL)
+        {
+            val.after_no_ed = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ranging_rssi_resync_control.after_no_ed is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "ranging_rssi_resync_control.after_ed");
+        if (cli_parm != NULL)
+        {
+            val.after_ed = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ranging_rssi_resync_control.after_ed is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "ranging_rssi_resync_control.after_reset_3");
+        if (cli_parm != NULL)
+        {
+            val.after_reset_3 = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ranging_rssi_resync_control.after_reset_3 is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, ranging_rssi_resync_control, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_ranging_rssi_control val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_RANGING_RSSI_RESYNC_CONTROL, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, ranging_rssi_resync_control, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_set(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_set(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_trx_cfg_clear(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_trx_cfg cfg;        /**< declare main API struct */
+    bcmolt_gpon_trx_key key = { };  /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_trx_cfg cfg;\n");
+    bcmcli_log("bcmolt_gpon_trx_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_clear");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_TRX_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, gpon_trx, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, gpon_trx, key);\n");
+
+    /* call API */
+    err = bcmolt_cfg_clear(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_clear(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_gpon_trx_cfg_get_multi(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_gpon_trx_cfg cfg;        /**< declare main API struct */
+    bcmolt_gpon_trx_key key = { };  /**< declare key */
+    bcmolt_msg_set *msg_set = NULL; /**< declare message set */
+    uint32_t max_msgs;              /**< declare max number of msgs to get */
+    bcmos_bool invert_filter;       /**< declare filter invert flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_gpon_trx_cfg cfg;\n");
+    bcmcli_log("bcmolt_gpon_trx_key key = {  };\n");
+    bcmcli_log("bcmolt_msg_set* msg_set = NULL;\n");
+    bcmcli_log("uint32_t max_msgs;\n");
+    bcmcli_log("bcmos_bool invert_filter;\n");
+    apicli_print_start(session, "bcmolt_cfg_get_multi");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_gpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_GPON_TRX_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* set max number of msgs from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "max_msgs");
+    if (cli_parm != NULL)
+    {
+        max_msgs = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "max_msgs is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("max_msgs = %d;\n", max_msgs);
+
+    /* set filter invert flag from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "filter_invert");
+    if (cli_parm != NULL)
+    {
+        invert_filter = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "filter_invert is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("invert_filter = %s;\n", (invert_filter) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* allocate message set */
+    err = apicli_msg_set_alloc(byte_pool, BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    bcmcli_log("bcmolt_msg_set_alloc(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, gpon_trx, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, gpon_trx, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "filter.transceiver_type");
+    if (cli_parm != NULL)
+    {
+        bcmolt_trx_type val;
+        val = (bcmolt_trx_type) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, transceiver_type, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, transceiver_type, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_TRANSCEIVER_TYPE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "transceiver_type");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, transceiver_type);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, transceiver_type);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.la_configuration.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_la_resync_pattern_configuration val = { };
+        cli_parm = bcmcli_find_parm_by_prefix(session, "filter.la_configuration.resync_control.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "filter.la_configuration.resync_control.start_pattern");
+            if (cli_parm != NULL)
+            {
+                val.resync_control.start_pattern = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.la_configuration.resync_control.start_pattern is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.la_configuration.resync_control.middle_pattern");
+            if (cli_parm != NULL)
+            {
+                val.resync_control.middle_pattern = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.la_configuration.resync_control.middle_pattern is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.la_configuration.resync_control.last_pattern");
+            if (cli_parm != NULL)
+            {
+                val.resync_control.last_pattern = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.la_configuration.resync_control.last_pattern is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.la_configuration.resync_control.middle_repetition");
+            if (cli_parm != NULL)
+            {
+                val.resync_control.middle_repetition = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.la_configuration.resync_control.middle_repetition is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.la_configuration.resync_control.location");
+            if (cli_parm != NULL)
+            {
+                val.resync_control.location = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.la_configuration.resync_control.location is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.la_configuration.resync_control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "filter.la_configuration.ranging_resync_control.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "filter.la_configuration.ranging_resync_control.start_pattern");
+            if (cli_parm != NULL)
+            {
+                val.ranging_resync_control.start_pattern = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.la_configuration.ranging_resync_control.start_pattern is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.la_configuration.ranging_resync_control.middle_pattern");
+            if (cli_parm != NULL)
+            {
+                val.ranging_resync_control.middle_pattern = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.la_configuration.ranging_resync_control.middle_pattern is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.la_configuration.ranging_resync_control.last_pattern");
+            if (cli_parm != NULL)
+            {
+                val.ranging_resync_control.last_pattern = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.la_configuration.ranging_resync_control.last_pattern is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.la_configuration.ranging_resync_control.middle_repetition");
+            if (cli_parm != NULL)
+            {
+                val.ranging_resync_control.middle_repetition = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.la_configuration.ranging_resync_control.middle_repetition is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.la_configuration.ranging_resync_control.location");
+            if (cli_parm != NULL)
+            {
+                val.ranging_resync_control.location = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.la_configuration.ranging_resync_control.location is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.la_configuration.ranging_resync_control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, la_configuration, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_la_resync_pattern_configuration val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_LA_CONFIGURATION, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, la_configuration, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "la_configuration");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, la_configuration);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, la_configuration);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.bcdr.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_bcdr_resync_pattern_configuration val = { };
+        cli_parm = bcmcli_find_parm_by_prefix(session, "filter.bcdr.resync_control.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "filter.bcdr.resync_control.start_pattern");
+            if (cli_parm != NULL)
+            {
+                val.resync_control.start_pattern = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.bcdr.resync_control.start_pattern is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.bcdr.resync_control.middle_pattern");
+            if (cli_parm != NULL)
+            {
+                val.resync_control.middle_pattern = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.bcdr.resync_control.middle_pattern is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.bcdr.resync_control.last_pattern");
+            if (cli_parm != NULL)
+            {
+                val.resync_control.last_pattern = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.bcdr.resync_control.last_pattern is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.bcdr.resync_control.middle_repetition");
+            if (cli_parm != NULL)
+            {
+                val.resync_control.middle_repetition = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.bcdr.resync_control.middle_repetition is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.bcdr.resync_control.location");
+            if (cli_parm != NULL)
+            {
+                val.resync_control.location = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.bcdr.resync_control.location is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.bcdr.resync_control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "filter.bcdr.ranging_resync_control.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "filter.bcdr.ranging_resync_control.start_pattern");
+            if (cli_parm != NULL)
+            {
+                val.ranging_resync_control.start_pattern = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.bcdr.ranging_resync_control.start_pattern is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.bcdr.ranging_resync_control.middle_pattern");
+            if (cli_parm != NULL)
+            {
+                val.ranging_resync_control.middle_pattern = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.bcdr.ranging_resync_control.middle_pattern is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.bcdr.ranging_resync_control.last_pattern");
+            if (cli_parm != NULL)
+            {
+                val.ranging_resync_control.last_pattern = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.bcdr.ranging_resync_control.last_pattern is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.bcdr.ranging_resync_control.middle_repetition");
+            if (cli_parm != NULL)
+            {
+                val.ranging_resync_control.middle_repetition = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.bcdr.ranging_resync_control.middle_repetition is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.bcdr.ranging_resync_control.location");
+            if (cli_parm != NULL)
+            {
+                val.ranging_resync_control.location = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.bcdr.ranging_resync_control.location is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.bcdr.ranging_resync_control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, bcdr, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_bcdr_resync_pattern_configuration val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_BCDR, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, bcdr, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "bcdr");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, bcdr);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, bcdr);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.la_ranging_after_no_ed_resync.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_resync_control val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.la_ranging_after_no_ed_resync.start_pattern");
+        if (cli_parm != NULL)
+        {
+            val.start_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.la_ranging_after_no_ed_resync.start_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.la_ranging_after_no_ed_resync.middle_pattern");
+        if (cli_parm != NULL)
+        {
+            val.middle_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.la_ranging_after_no_ed_resync.middle_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.la_ranging_after_no_ed_resync.last_pattern");
+        if (cli_parm != NULL)
+        {
+            val.last_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.la_ranging_after_no_ed_resync.last_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.la_ranging_after_no_ed_resync.middle_repetition");
+        if (cli_parm != NULL)
+        {
+            val.middle_repetition = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.la_ranging_after_no_ed_resync.middle_repetition is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.la_ranging_after_no_ed_resync.location");
+        if (cli_parm != NULL)
+        {
+            val.location = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.la_ranging_after_no_ed_resync.location is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, la_ranging_after_no_ed_resync, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_resync_control val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_LA_RANGING_AFTER_NO_ED_RESYNC, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, la_ranging_after_no_ed_resync, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "la_ranging_after_no_ed_resync");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, la_ranging_after_no_ed_resync);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, la_ranging_after_no_ed_resync);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.bcdr_ranging_after_no_ed_resync.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_resync_control val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.bcdr_ranging_after_no_ed_resync.start_pattern");
+        if (cli_parm != NULL)
+        {
+            val.start_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.bcdr_ranging_after_no_ed_resync.start_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.bcdr_ranging_after_no_ed_resync.middle_pattern");
+        if (cli_parm != NULL)
+        {
+            val.middle_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.bcdr_ranging_after_no_ed_resync.middle_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.bcdr_ranging_after_no_ed_resync.last_pattern");
+        if (cli_parm != NULL)
+        {
+            val.last_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.bcdr_ranging_after_no_ed_resync.last_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.bcdr_ranging_after_no_ed_resync.middle_repetition");
+        if (cli_parm != NULL)
+        {
+            val.middle_repetition = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.bcdr_ranging_after_no_ed_resync.middle_repetition is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.bcdr_ranging_after_no_ed_resync.location");
+        if (cli_parm != NULL)
+        {
+            val.location = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.bcdr_ranging_after_no_ed_resync.location is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, bcdr_ranging_after_no_ed_resync, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_resync_control val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_BCDR_RANGING_AFTER_NO_ED_RESYNC, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, bcdr_ranging_after_no_ed_resync, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "bcdr_ranging_after_no_ed_resync");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, bcdr_ranging_after_no_ed_resync);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, bcdr_ranging_after_no_ed_resync);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.la_ranging_after_ed_resync.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_resync_control val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.la_ranging_after_ed_resync.start_pattern");
+        if (cli_parm != NULL)
+        {
+            val.start_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.la_ranging_after_ed_resync.start_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.la_ranging_after_ed_resync.middle_pattern");
+        if (cli_parm != NULL)
+        {
+            val.middle_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.la_ranging_after_ed_resync.middle_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.la_ranging_after_ed_resync.last_pattern");
+        if (cli_parm != NULL)
+        {
+            val.last_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.la_ranging_after_ed_resync.last_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.la_ranging_after_ed_resync.middle_repetition");
+        if (cli_parm != NULL)
+        {
+            val.middle_repetition = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.la_ranging_after_ed_resync.middle_repetition is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.la_ranging_after_ed_resync.location");
+        if (cli_parm != NULL)
+        {
+            val.location = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.la_ranging_after_ed_resync.location is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, la_ranging_after_ed_resync, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_resync_control val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_LA_RANGING_AFTER_ED_RESYNC, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, la_ranging_after_ed_resync, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "la_ranging_after_ed_resync");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, la_ranging_after_ed_resync);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, la_ranging_after_ed_resync);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.bcdr_ranging_after_ed_resync.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_resync_control val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.bcdr_ranging_after_ed_resync.start_pattern");
+        if (cli_parm != NULL)
+        {
+            val.start_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.bcdr_ranging_after_ed_resync.start_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.bcdr_ranging_after_ed_resync.middle_pattern");
+        if (cli_parm != NULL)
+        {
+            val.middle_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.bcdr_ranging_after_ed_resync.middle_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.bcdr_ranging_after_ed_resync.last_pattern");
+        if (cli_parm != NULL)
+        {
+            val.last_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.bcdr_ranging_after_ed_resync.last_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.bcdr_ranging_after_ed_resync.middle_repetition");
+        if (cli_parm != NULL)
+        {
+            val.middle_repetition = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.bcdr_ranging_after_ed_resync.middle_repetition is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.bcdr_ranging_after_ed_resync.location");
+        if (cli_parm != NULL)
+        {
+            val.location = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.bcdr_ranging_after_ed_resync.location is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, bcdr_ranging_after_ed_resync, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_resync_control val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_BCDR_RANGING_AFTER_ED_RESYNC, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, bcdr_ranging_after_ed_resync, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "bcdr_ranging_after_ed_resync");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, bcdr_ranging_after_ed_resync);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, bcdr_ranging_after_ed_resync);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.la_resync_polarity");
+    if (cli_parm != NULL)
+    {
+        bcmolt_polarity val;
+        val = (bcmolt_polarity) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, la_resync_polarity, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, la_resync_polarity, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_LA_RESYNC_POLARITY, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "la_resync_polarity");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, la_resync_polarity);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, la_resync_polarity);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.bcdr_resync_polarity");
+    if (cli_parm != NULL)
+    {
+        bcmolt_polarity val;
+        val = (bcmolt_polarity) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, bcdr_resync_polarity, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, bcdr_resync_polarity, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_BCDR_RESYNC_POLARITY, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "bcdr_resync_polarity");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, bcdr_resync_polarity);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, bcdr_resync_polarity);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.bcdr_ranging_resync_conditions.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_ranging_resync_conditions val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.bcdr_ranging_resync_conditions.after_init");
+        if (cli_parm != NULL)
+        {
+            val.after_init = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.bcdr_ranging_resync_conditions.after_init is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.bcdr_ranging_resync_conditions.after_no_ed");
+        if (cli_parm != NULL)
+        {
+            val.after_no_ed = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.bcdr_ranging_resync_conditions.after_no_ed is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.bcdr_ranging_resync_conditions.after_ed");
+        if (cli_parm != NULL)
+        {
+            val.after_ed = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.bcdr_ranging_resync_conditions.after_ed is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.bcdr_ranging_resync_conditions.after_no_del");
+        if (cli_parm != NULL)
+        {
+            val.after_no_del = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.bcdr_ranging_resync_conditions.after_no_del is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.bcdr_ranging_resync_conditions.after_ranging_access");
+        if (cli_parm != NULL)
+        {
+            val.after_ranging_access = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.bcdr_ranging_resync_conditions.after_ranging_access is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.bcdr_ranging_resync_conditions.med_val");
+        if (cli_parm != NULL)
+        {
+            val.med_val = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.bcdr_ranging_resync_conditions.med_val is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, bcdr_ranging_resync_conditions, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_ranging_resync_conditions val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_BCDR_RANGING_RESYNC_CONDITIONS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, bcdr_ranging_resync_conditions, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "bcdr_ranging_resync_conditions");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, bcdr_ranging_resync_conditions);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, bcdr_ranging_resync_conditions);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.la_ranging_resync_conditions.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_ranging_resync_conditions val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.la_ranging_resync_conditions.after_init");
+        if (cli_parm != NULL)
+        {
+            val.after_init = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.la_ranging_resync_conditions.after_init is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.la_ranging_resync_conditions.after_no_ed");
+        if (cli_parm != NULL)
+        {
+            val.after_no_ed = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.la_ranging_resync_conditions.after_no_ed is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.la_ranging_resync_conditions.after_ed");
+        if (cli_parm != NULL)
+        {
+            val.after_ed = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.la_ranging_resync_conditions.after_ed is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.la_ranging_resync_conditions.after_no_del");
+        if (cli_parm != NULL)
+        {
+            val.after_no_del = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.la_ranging_resync_conditions.after_no_del is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.la_ranging_resync_conditions.after_ranging_access");
+        if (cli_parm != NULL)
+        {
+            val.after_ranging_access = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.la_ranging_resync_conditions.after_ranging_access is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.la_ranging_resync_conditions.med_val");
+        if (cli_parm != NULL)
+        {
+            val.med_val = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.la_ranging_resync_conditions.med_val is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, la_ranging_resync_conditions, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_ranging_resync_conditions val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_LA_RANGING_RESYNC_CONDITIONS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, la_ranging_resync_conditions, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "la_ranging_resync_conditions");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, la_ranging_resync_conditions);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, la_ranging_resync_conditions);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.rx_configuration.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_trx_rx_configuration val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.rx_configuration.wait_window_size");
+        if (cli_parm != NULL)
+        {
+            val.wait_window_size = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.rx_configuration.wait_window_size is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.rx_configuration.ranging_access_window_size");
+        if (cli_parm != NULL)
+        {
+            val.ranging_access_window_size = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.rx_configuration.ranging_access_window_size is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, rx_configuration, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_trx_rx_configuration val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_RX_CONFIGURATION, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, rx_configuration, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_configuration");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, rx_configuration);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, rx_configuration);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.ranging_control_stages_configuration.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_ranging_control_configuration val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.ranging_control_stages_configuration.wait_state_1_window_size");
+        if (cli_parm != NULL)
+        {
+            val.wait_state_1_window_size = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ranging_control_stages_configuration.wait_state_1_window_size is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.ranging_control_stages_configuration.wait_state_2_window_size");
+        if (cli_parm != NULL)
+        {
+            val.wait_state_2_window_size = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ranging_control_stages_configuration.wait_state_2_window_size is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.ranging_control_stages_configuration.wait_after_resync_4");
+        if (cli_parm != NULL)
+        {
+            val.wait_after_resync_4 = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ranging_control_stages_configuration.wait_after_resync_4 is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, ranging_control_stages_configuration, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_ranging_control_configuration val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_RANGING_CONTROL_STAGES_CONFIGURATION, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, ranging_control_stages_configuration, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ranging_control_stages_configuration");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, ranging_control_stages_configuration);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, ranging_control_stages_configuration);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.energy_detect.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_trx_energy_detect val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.energy_detect.ranging_ed_source");
+        if (cli_parm != NULL)
+        {
+            val.ranging_ed_source = (bcmolt_energy_detect_source) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.energy_detect.ranging_ed_source is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.energy_detect.delimiter_ed_source");
+        if (cli_parm != NULL)
+        {
+            val.delimiter_ed_source = (bcmolt_energy_detect_source) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.energy_detect.delimiter_ed_source is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.energy_detect.minimum_threshold");
+        if (cli_parm != NULL)
+        {
+            val.minimum_threshold = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.energy_detect.minimum_threshold is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.energy_detect.maximum_threshold");
+        if (cli_parm != NULL)
+        {
+            val.maximum_threshold = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.energy_detect.maximum_threshold is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.energy_detect.ed_pattern");
+        if (cli_parm != NULL)
+        {
+            val.ed_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.energy_detect.ed_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.energy_detect.ed_pattern_size");
+        if (cli_parm != NULL)
+        {
+            val.ed_pattern_size = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.energy_detect.ed_pattern_size is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.energy_detect.window_size");
+        if (cli_parm != NULL)
+        {
+            val.window_size = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.energy_detect.window_size is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.energy_detect.inversion");
+        if (cli_parm != NULL)
+        {
+            val.inversion = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.energy_detect.inversion is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.energy_detect.no_ed_threshold");
+        if (cli_parm != NULL)
+        {
+            val.no_ed_threshold = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.energy_detect.no_ed_threshold is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, energy_detect, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_trx_energy_detect val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_ENERGY_DETECT, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, energy_detect, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "energy_detect");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, energy_detect);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, energy_detect);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.end_of_burst_data_pattern.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_resync_control val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.end_of_burst_data_pattern.start_pattern");
+        if (cli_parm != NULL)
+        {
+            val.start_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.end_of_burst_data_pattern.start_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.end_of_burst_data_pattern.middle_pattern");
+        if (cli_parm != NULL)
+        {
+            val.middle_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.end_of_burst_data_pattern.middle_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.end_of_burst_data_pattern.last_pattern");
+        if (cli_parm != NULL)
+        {
+            val.last_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.end_of_burst_data_pattern.last_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.end_of_burst_data_pattern.middle_repetition");
+        if (cli_parm != NULL)
+        {
+            val.middle_repetition = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.end_of_burst_data_pattern.middle_repetition is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.end_of_burst_data_pattern.location");
+        if (cli_parm != NULL)
+        {
+            val.location = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.end_of_burst_data_pattern.location is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, end_of_burst_data_pattern, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_resync_control val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_END_OF_BURST_DATA_PATTERN, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, end_of_burst_data_pattern, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "end_of_burst_data_pattern");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, end_of_burst_data_pattern);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, end_of_burst_data_pattern);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.end_of_burst_ranging_pattern.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_resync_control val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.end_of_burst_ranging_pattern.start_pattern");
+        if (cli_parm != NULL)
+        {
+            val.start_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.end_of_burst_ranging_pattern.start_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.end_of_burst_ranging_pattern.middle_pattern");
+        if (cli_parm != NULL)
+        {
+            val.middle_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.end_of_burst_ranging_pattern.middle_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.end_of_burst_ranging_pattern.last_pattern");
+        if (cli_parm != NULL)
+        {
+            val.last_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.end_of_burst_ranging_pattern.last_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.end_of_burst_ranging_pattern.middle_repetition");
+        if (cli_parm != NULL)
+        {
+            val.middle_repetition = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.end_of_burst_ranging_pattern.middle_repetition is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.end_of_burst_ranging_pattern.location");
+        if (cli_parm != NULL)
+        {
+            val.location = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.end_of_burst_ranging_pattern.location is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, end_of_burst_ranging_pattern, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_resync_control val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_END_OF_BURST_RANGING_PATTERN, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, end_of_burst_ranging_pattern, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "end_of_burst_ranging_pattern");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, end_of_burst_ranging_pattern);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, end_of_burst_ranging_pattern);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.preamble.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_trx_preamble val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.preamble.type_1_size");
+        if (cli_parm != NULL)
+        {
+            val.type_1_size = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.preamble.type_1_size is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.preamble.type_2_size");
+        if (cli_parm != NULL)
+        {
+            val.type_2_size = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.preamble.type_2_size is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.preamble.type_3_pre_ranging_size");
+        if (cli_parm != NULL)
+        {
+            val.type_3_pre_ranging_size = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.preamble.type_3_pre_ranging_size is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.preamble.type_3_post_ranging_size");
+        if (cli_parm != NULL)
+        {
+            val.type_3_post_ranging_size = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.preamble.type_3_post_ranging_size is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.preamble.type_3_pattern");
+        if (cli_parm != NULL)
+        {
+            val.type_3_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.preamble.type_3_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, preamble, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_trx_preamble val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_PREAMBLE, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, preamble, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "preamble");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, preamble);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, preamble);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.delimiter.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_trx_delimiter val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.delimiter.pattern");
+        if (cli_parm != NULL)
+        {
+            if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 3)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "buffer filter.delimiter.pattern must have 3 bytes\n");
+                return BCM_ERR_PARM;
+            }
+
+            bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+            bcmolt_buf_read(&cli_parm->value.buffer, val.pattern, 3);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.delimiter.pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.delimiter.size");
+        if (cli_parm != NULL)
+        {
+            val.size = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.delimiter.size is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.delimiter.window_size");
+        if (cli_parm != NULL)
+        {
+            val.window_size = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.delimiter.window_size is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, delimiter, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_trx_delimiter val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_DELIMITER, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, delimiter, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "delimiter");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, delimiter);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, delimiter);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.guard_bits");
+    if (cli_parm != NULL)
+    {
+        uint32_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, guard_bits, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, guard_bits, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_GUARD_BITS, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "guard_bits");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, guard_bits);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, guard_bits);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.serdes_configuration.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_serdes_configuration val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.serdes_configuration.ranging_mode");
+        if (cli_parm != NULL)
+        {
+            val.ranging_mode = (bcmolt_serdes_ranging_mode) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.serdes_configuration.ranging_mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.serdes_configuration.multi_ed_mode");
+        if (cli_parm != NULL)
+        {
+            val.multi_ed_mode = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.serdes_configuration.multi_ed_mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.serdes_configuration.burst_enable_start_offset");
+        if (cli_parm != NULL)
+        {
+            val.burst_enable_start_offset = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.serdes_configuration.burst_enable_start_offset is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.serdes_configuration.burst_enable_end_offset");
+        if (cli_parm != NULL)
+        {
+            val.burst_enable_end_offset = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.serdes_configuration.burst_enable_end_offset is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.serdes_configuration.ed_invertion");
+        if (cli_parm != NULL)
+        {
+            val.ed_invertion = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.serdes_configuration.ed_invertion is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, serdes_configuration, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_serdes_configuration val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_SERDES_CONFIGURATION, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, serdes_configuration, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "serdes_configuration");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, serdes_configuration);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, serdes_configuration);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.plo_ranging");
+    if (cli_parm != NULL)
+    {
+        uint32_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, plo_ranging, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, plo_ranging, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_PLO_RANGING, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "plo_ranging");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, plo_ranging);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, plo_ranging);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.plo_data");
+    if (cli_parm != NULL)
+    {
+        uint32_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, plo_data, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, plo_data, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_PLO_DATA, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "plo_data");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, plo_data);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, plo_data);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.rssi_normal_config.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpon_rssi_general_configuration val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.rssi_normal_config.location");
+        if (cli_parm != NULL)
+        {
+            val.location = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.rssi_normal_config.location is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.rssi_normal_config.location_sign");
+        if (cli_parm != NULL)
+        {
+            val.location_sign = (bcmolt_rssi_location_sign) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.rssi_normal_config.location_sign is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.rssi_normal_config.start_pattern");
+        if (cli_parm != NULL)
+        {
+            val.start_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.rssi_normal_config.start_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.rssi_normal_config.middle_pattern");
+        if (cli_parm != NULL)
+        {
+            val.middle_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.rssi_normal_config.middle_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.rssi_normal_config.last_pattern");
+        if (cli_parm != NULL)
+        {
+            val.last_pattern = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.rssi_normal_config.last_pattern is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.rssi_normal_config.middle_repertition");
+        if (cli_parm != NULL)
+        {
+            val.middle_repertition = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.rssi_normal_config.middle_repertition is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.rssi_normal_config.minimum_burst");
+        if (cli_parm != NULL)
+        {
+            val.minimum_burst = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.rssi_normal_config.minimum_burst is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, rssi_normal_config, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_gpon_rssi_general_configuration val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_RSSI_NORMAL_CONFIG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, rssi_normal_config, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rssi_normal_config");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, rssi_normal_config);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, rssi_normal_config);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.ranging_rssi_resync_control.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_ranging_rssi_control val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.ranging_rssi_resync_control.after_no_ed");
+        if (cli_parm != NULL)
+        {
+            val.after_no_ed = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ranging_rssi_resync_control.after_no_ed is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.ranging_rssi_resync_control.after_ed");
+        if (cli_parm != NULL)
+        {
+            val.after_ed = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ranging_rssi_resync_control.after_ed is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.ranging_rssi_resync_control.after_reset_3");
+        if (cli_parm != NULL)
+        {
+            val.after_reset_3 = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ranging_rssi_resync_control.after_reset_3 is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, ranging_rssi_resync_control, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_ranging_rssi_control val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_GPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_GPON_TRX_CFG_ID_RANGING_RSSI_RESYNC_CONTROL, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, ranging_rssi_resync_control, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ranging_rssi_resync_control");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, ranging_rssi_resync_control);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, ranging_rssi_resync_control);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_trx, transceiver_type) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_trx, la_configuration) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_trx, bcdr) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_trx, la_ranging_after_no_ed_resync) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_trx, bcdr_ranging_after_no_ed_resync) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_trx, la_ranging_after_ed_resync) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_trx, bcdr_ranging_after_ed_resync) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_trx, la_resync_polarity) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_trx, bcdr_resync_polarity) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_trx, bcdr_ranging_resync_conditions) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_trx, la_ranging_resync_conditions) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_trx, rx_configuration) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_trx, ranging_control_stages_configuration) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_trx, energy_detect) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_trx, end_of_burst_data_pattern) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_trx, end_of_burst_ranging_pattern) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_trx, preamble) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_trx, delimiter) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_trx, guard_bits) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_trx, serdes_configuration) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_trx, plo_ranging) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_trx, plo_data) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_trx, rssi_normal_config) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, gpon_trx, ranging_rssi_resync_control))
+    {
+        BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, all_properties);
+        bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_trx, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);
+    bcmcli_log("bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_log_entry_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_log_entry_cfg cfg;       /**< declare main API struct */
+    bcmolt_log_entry_key key = { }; /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_log_entry_cfg cfg;\n");
+    bcmcli_log("bcmolt_log_entry_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "log_id");
+    if (cli_parm != NULL)
+    {
+        key.log_id = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "log_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.log_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_LOG_ENTRY, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_LOG_ENTRY_KEY_ID_LOG_ID, &key.log_id);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_parm_by_prefix(session, "name.");
+    if (cli_parm != NULL)
+    {
+        cli_parm = bcmcli_find_named_parm(session, "name.str");
+        if (cli_parm != NULL)
+        {
+            snprintf(key.name.str, 100, "%s", cli_parm->value.string);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "name.str is not set\n");
+            return BCM_ERR_PARM;
+        }
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "name is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.name = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_LOG_ENTRY, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_LOG_ENTRY_KEY_ID_NAME, &key.name);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, log_entry, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, log_entry, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "default_log_level");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, log_entry, default_log_level);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, log_entry, default_log_level);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "default_log_type");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, log_entry, default_log_type);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, log_entry, default_log_type);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "log_level_print");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, log_entry, log_level_print);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, log_entry, log_level_print);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "log_level_save");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, log_entry, log_level_save);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, log_entry, log_level_save);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "log_type");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, log_entry, log_type);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, log_entry, log_type);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "log_style");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, log_entry, log_style);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, log_entry, log_style);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "log_name");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, log_entry, log_name);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, log_entry, log_name);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_CFG_PROP_IS_SET(&cfg, log_entry, default_log_level) && !BCMOLT_CFG_PROP_IS_SET(&cfg, log_entry, default_log_type) && !BCMOLT_CFG_PROP_IS_SET(&cfg, log_entry, log_level_print) && !BCMOLT_CFG_PROP_IS_SET(&cfg, log_entry, log_level_save) && !BCMOLT_CFG_PROP_IS_SET(&cfg, log_entry, log_type) && !BCMOLT_CFG_PROP_IS_SET(&cfg, log_entry, log_style) && !BCMOLT_CFG_PROP_IS_SET(&cfg, log_entry, log_name))
+    {
+        BCMOLT_CFG_PROP_GET(&cfg, log_entry, all_properties);
+        bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, log_entry, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_get(device_id, &cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_log_entry_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_log_entry_cfg cfg;       /**< declare main API struct */
+    bcmolt_log_entry_key key = { }; /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_log_entry_cfg cfg;\n");
+    bcmcli_log("bcmolt_log_entry_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "log_id");
+    if (cli_parm != NULL)
+    {
+        key.log_id = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "log_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.log_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_LOG_ENTRY, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_LOG_ENTRY_KEY_ID_LOG_ID, &key.log_id);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_parm_by_prefix(session, "name.");
+    if (cli_parm != NULL)
+    {
+        cli_parm = bcmcli_find_named_parm(session, "name.str");
+        if (cli_parm != NULL)
+        {
+            snprintf(key.name.str, 100, "%s", cli_parm->value.string);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "name.str is not set\n");
+            return BCM_ERR_PARM;
+        }
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "name is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.name = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_LOG_ENTRY, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_LOG_ENTRY_KEY_ID_NAME, &key.name);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, log_entry, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, log_entry, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "log_level_print");
+    if (cli_parm != NULL)
+    {
+        bcmolt_log_level val;
+        val = (bcmolt_log_level) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, log_entry, log_level_print, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, log_entry, log_level_print, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_LOG_ENTRY, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_LOG_ENTRY_CFG_ID_LOG_LEVEL_PRINT, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "log_level_save");
+    if (cli_parm != NULL)
+    {
+        bcmolt_log_level val;
+        val = (bcmolt_log_level) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, log_entry, log_level_save, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, log_entry, log_level_save, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_LOG_ENTRY, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_LOG_ENTRY_CFG_ID_LOG_LEVEL_SAVE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "log_type");
+    if (cli_parm != NULL)
+    {
+        bcmolt_log_type val;
+        val = (bcmolt_log_type) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, log_entry, log_type, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, log_entry, log_type, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_LOG_ENTRY, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_LOG_ENTRY_CFG_ID_LOG_TYPE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "log_style");
+    if (cli_parm != NULL)
+    {
+        bcmolt_log_style val;
+        val = (bcmolt_log_style) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, log_entry, log_style, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, log_entry, log_style, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_LOG_ENTRY, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_LOG_ENTRY_CFG_ID_LOG_STYLE, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_set(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_set(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_log_entry_cfg_clear(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_log_entry_cfg cfg;       /**< declare main API struct */
+    bcmolt_log_entry_key key = { }; /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_log_entry_cfg cfg;\n");
+    bcmcli_log("bcmolt_log_entry_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_clear");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "log_id");
+    if (cli_parm != NULL)
+    {
+        key.log_id = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "log_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.log_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_LOG_ENTRY, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_LOG_ENTRY_KEY_ID_LOG_ID, &key.log_id);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_parm_by_prefix(session, "name.");
+    if (cli_parm != NULL)
+    {
+        cli_parm = bcmcli_find_named_parm(session, "name.str");
+        if (cli_parm != NULL)
+        {
+            snprintf(key.name.str, 100, "%s", cli_parm->value.string);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "name.str is not set\n");
+            return BCM_ERR_PARM;
+        }
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "name is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.name = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_LOG_ENTRY, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_LOG_ENTRY_KEY_ID_NAME, &key.name);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, log_entry, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, log_entry, key);\n");
+
+    /* call API */
+    err = bcmolt_cfg_clear(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_clear(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_log_entry_cfg_get_multi(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_log_entry_cfg cfg;       /**< declare main API struct */
+    bcmolt_log_entry_key key = { }; /**< declare key */
+    bcmolt_msg_set *msg_set = NULL; /**< declare message set */
+    uint32_t max_msgs;              /**< declare max number of msgs to get */
+    bcmos_bool invert_filter;       /**< declare filter invert flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_log_entry_cfg cfg;\n");
+    bcmcli_log("bcmolt_log_entry_key key = {  };\n");
+    bcmcli_log("bcmolt_msg_set* msg_set = NULL;\n");
+    bcmcli_log("uint32_t max_msgs;\n");
+    bcmcli_log("bcmos_bool invert_filter;\n");
+    apicli_print_start(session, "bcmolt_cfg_get_multi");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "log_id");
+    if (cli_parm != NULL)
+    {
+        key.log_id = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "log_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.log_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_LOG_ENTRY, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_LOG_ENTRY_KEY_ID_LOG_ID, &key.log_id);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_parm_by_prefix(session, "name.");
+    if (cli_parm != NULL)
+    {
+        cli_parm = bcmcli_find_named_parm(session, "name.str");
+        if (cli_parm != NULL)
+        {
+            snprintf(key.name.str, 100, "%s", cli_parm->value.string);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "name.str is not set\n");
+            return BCM_ERR_PARM;
+        }
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "name is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.name = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_LOG_ENTRY, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_LOG_ENTRY_KEY_ID_NAME, &key.name);
+    bcmcli_log(";\n");
+
+    /* set max number of msgs from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "max_msgs");
+    if (cli_parm != NULL)
+    {
+        max_msgs = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "max_msgs is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("max_msgs = %d;\n", max_msgs);
+
+    /* set filter invert flag from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "filter_invert");
+    if (cli_parm != NULL)
+    {
+        invert_filter = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "filter_invert is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("invert_filter = %s;\n", (invert_filter) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* allocate message set */
+    err = apicli_msg_set_alloc(byte_pool, BCMOLT_OBJ_ID_LOG_ENTRY, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    bcmcli_log("bcmolt_msg_set_alloc(BCMOLT_OBJ_ID_LOG_ENTRY, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, log_entry, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, log_entry, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "filter.default_log_level");
+    if (cli_parm != NULL)
+    {
+        bcmolt_log_level val;
+        val = (bcmolt_log_level) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, log_entry, default_log_level, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, log_entry, default_log_level, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_LOG_ENTRY, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_LOG_ENTRY_CFG_ID_DEFAULT_LOG_LEVEL, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "default_log_level");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, log_entry, default_log_level);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, log_entry, default_log_level);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.default_log_type");
+    if (cli_parm != NULL)
+    {
+        bcmolt_log_type val;
+        val = (bcmolt_log_type) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, log_entry, default_log_type, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, log_entry, default_log_type, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_LOG_ENTRY, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_LOG_ENTRY_CFG_ID_DEFAULT_LOG_TYPE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "default_log_type");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, log_entry, default_log_type);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, log_entry, default_log_type);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.log_level_print");
+    if (cli_parm != NULL)
+    {
+        bcmolt_log_level val;
+        val = (bcmolt_log_level) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, log_entry, log_level_print, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, log_entry, log_level_print, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_LOG_ENTRY, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_LOG_ENTRY_CFG_ID_LOG_LEVEL_PRINT, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "log_level_print");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, log_entry, log_level_print);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, log_entry, log_level_print);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.log_level_save");
+    if (cli_parm != NULL)
+    {
+        bcmolt_log_level val;
+        val = (bcmolt_log_level) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, log_entry, log_level_save, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, log_entry, log_level_save, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_LOG_ENTRY, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_LOG_ENTRY_CFG_ID_LOG_LEVEL_SAVE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "log_level_save");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, log_entry, log_level_save);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, log_entry, log_level_save);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.log_type");
+    if (cli_parm != NULL)
+    {
+        bcmolt_log_type val;
+        val = (bcmolt_log_type) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, log_entry, log_type, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, log_entry, log_type, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_LOG_ENTRY, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_LOG_ENTRY_CFG_ID_LOG_TYPE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "log_type");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, log_entry, log_type);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, log_entry, log_type);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.log_style");
+    if (cli_parm != NULL)
+    {
+        bcmolt_log_style val;
+        val = (bcmolt_log_style) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, log_entry, log_style, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, log_entry, log_style, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_LOG_ENTRY, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_LOG_ENTRY_CFG_ID_LOG_STYLE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "log_style");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, log_entry, log_style);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, log_entry, log_style);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.log_name.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_str_100 val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.log_name.str");
+        if (cli_parm != NULL)
+        {
+            snprintf(val.str, 100, "%s", cli_parm->value.string);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.log_name.str is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, log_entry, log_name, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_str_100 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_LOG_ENTRY, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_LOG_ENTRY_CFG_ID_LOG_NAME, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, log_entry, log_name, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "log_name");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, log_entry, log_name);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, log_entry, log_name);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, log_entry, default_log_level) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, log_entry, default_log_type) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, log_entry, log_level_print) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, log_entry, log_level_save) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, log_entry, log_type) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, log_entry, log_style) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, log_entry, log_name))
+    {
+        BCMOLT_MSGSET_CFG_PROP_GET(msg_set, log_entry, all_properties);
+        bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, log_entry, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);
+    bcmcli_log("bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_log_entry_stat_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_log_entry_stat stat;     /**< declare main API struct */
+    bcmolt_log_entry_key key = { }; /**< declare key */
+    bcmos_bool clear_on_read;       /**< declare 'clear on read' flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_log_entry_stat stat;\n");
+    bcmcli_log("bcmolt_log_entry_key key = {  };\n");
+    bcmcli_log("bcmos_bool clear_on_read;\n");
+    apicli_print_start(session, "bcmolt_stat_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "log_id");
+    if (cli_parm != NULL)
+    {
+        key.log_id = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "log_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.log_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_LOG_ENTRY, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_LOG_ENTRY_KEY_ID_LOG_ID, &key.log_id);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_parm_by_prefix(session, "name.");
+    if (cli_parm != NULL)
+    {
+        cli_parm = bcmcli_find_named_parm(session, "name.str");
+        if (cli_parm != NULL)
+        {
+            snprintf(key.name.str, 100, "%s", cli_parm->value.string);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "name.str is not set\n");
+            return BCM_ERR_PARM;
+        }
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "name is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.name = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_LOG_ENTRY, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_LOG_ENTRY_KEY_ID_NAME, &key.name);
+    bcmcli_log(";\n");
+
+    /* set stat flags from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "clear");
+    if (cli_parm != NULL)
+    {
+        clear_on_read = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "clear is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("clear_on_read = %s;\n", (clear_on_read) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* init the API struct */
+    BCMOLT_STAT_INIT(&stat, log_entry, key);
+    bcmcli_log("BCMOLT_STAT_INIT(&stat, log_entry, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "msg_count");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, log_entry, msg_count);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, log_entry, msg_count);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "lost_msg_count");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, log_entry, lost_msg_count);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, log_entry, lost_msg_count);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_STAT_PROP_IS_SET(&stat, log_entry, msg_count) && !BCMOLT_STAT_PROP_IS_SET(&stat, log_entry, lost_msg_count))
+    {
+        BCMOLT_STAT_PROP_GET(&stat, log_entry, all_properties);
+        bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, log_entry, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_stat_get(device_id, &stat.hdr, clear_on_read);
+    bcmcli_log("bcmolt_stat_get(device_id, &stat.hdr, clear_on_read);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &stat.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, stat.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_log_entry_stat_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_log_entry_stat_cfg stat_cfg; /**< declare main API struct */
+    bcmolt_log_entry_key key = { };     /**< declare key */
+    bcmolt_log_entry_stat_id stat_id;   /**< declare stat ID */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_log_entry_stat_cfg stat_cfg;\n");
+    bcmcli_log("bcmolt_log_entry_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_stat_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "log_id");
+    if (cli_parm != NULL)
+    {
+        key.log_id = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "log_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.log_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_LOG_ENTRY, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_LOG_ENTRY_KEY_ID_LOG_ID, &key.log_id);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_parm_by_prefix(session, "name.");
+    if (cli_parm != NULL)
+    {
+        cli_parm = bcmcli_find_named_parm(session, "name.str");
+        if (cli_parm != NULL)
+        {
+            snprintf(key.name.str, 100, "%s", cli_parm->value.string);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "name.str is not set\n");
+            return BCM_ERR_PARM;
+        }
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "name is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.name = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_LOG_ENTRY, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_LOG_ENTRY_KEY_ID_NAME, &key.name);
+    bcmcli_log(";\n");
+
+    /* set stat ID from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "sub");
+    if (cli_parm != NULL)
+    {
+        stat_id = (bcmolt_log_entry_stat_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    /* init the API struct */
+    switch (stat_id)
+    {
+        case BCMOLT_LOG_ENTRY_STAT_ID_MSG_COUNT:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, log_entry, msg_count, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, log_entry, msg_count, key);\n");
+            break;
+        case BCMOLT_LOG_ENTRY_STAT_ID_LOST_MSG_COUNT:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, log_entry, lost_msg_count, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, log_entry, lost_msg_count, key);\n");
+            break;
+        default:
+            apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+            return BCM_ERR_RANGE;
+    }
+
+    /* call API */
+    err = bcmolt_stat_cfg_get(device_id, &stat_cfg.hdr);
+    bcmcli_log("bcmolt_stat_cfg_get(device_id, &stat_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &stat_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, stat_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_log_entry_stat_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_log_entry_stat_cfg stat_cfg; /**< declare main API struct */
+    bcmolt_log_entry_key key = { };     /**< declare key */
+    bcmolt_log_entry_stat_id stat_id;   /**< declare stat ID */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_log_entry_stat_cfg stat_cfg;\n");
+    bcmcli_log("bcmolt_log_entry_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_stat_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "log_id");
+    if (cli_parm != NULL)
+    {
+        key.log_id = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "log_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.log_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_LOG_ENTRY, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_LOG_ENTRY_KEY_ID_LOG_ID, &key.log_id);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_parm_by_prefix(session, "name.");
+    if (cli_parm != NULL)
+    {
+        cli_parm = bcmcli_find_named_parm(session, "name.str");
+        if (cli_parm != NULL)
+        {
+            snprintf(key.name.str, 100, "%s", cli_parm->value.string);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "name.str is not set\n");
+            return BCM_ERR_PARM;
+        }
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "name is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.name = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_LOG_ENTRY, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_LOG_ENTRY_KEY_ID_NAME, &key.name);
+    bcmcli_log(";\n");
+
+    /* set stat ID from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "sub");
+    if (cli_parm != NULL)
+    {
+        stat_id = (bcmolt_log_entry_stat_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    /* init the API struct */
+    switch (stat_id)
+    {
+        case BCMOLT_LOG_ENTRY_STAT_ID_MSG_COUNT:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, log_entry, msg_count, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, log_entry, msg_count, key);\n");
+            break;
+        case BCMOLT_LOG_ENTRY_STAT_ID_LOST_MSG_COUNT:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, log_entry, lost_msg_count, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, log_entry, lost_msg_count, key);\n");
+            break;
+        default:
+            apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+            return BCM_ERR_RANGE;
+    }
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_stat_alarm_config val = { };
+        cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.trigger.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.type");
+            if (cli_parm != NULL)
+            {
+                val.trigger.type = (bcmolt_stat_condition_type) cli_parm->value.enum_val;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.type is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            switch (val.trigger.type)
+            {
+                case BCMOLT_STAT_CONDITION_TYPE_RATE_THRESHOLD:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.rising");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_threshold.rising = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.rising is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.falling");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_threshold.falling = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.falling is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_RATE_RANGE:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.upper");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_range.upper = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.upper is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.lower");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_range.lower = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.lower is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_VALUE_THRESHOLD:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.limit");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.value_threshold.limit = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.limit is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_NONE:
+                    break;
+                default:
+                    apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+                    return BCM_ERR_RANGE;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.soak.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "cfg.soak.active_soak_time");
+            if (cli_parm != NULL)
+            {
+                val.soak.active_soak_time = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak.active_soak_time is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "cfg.soak.clear_soak_time");
+            if (cli_parm != NULL)
+            {
+                val.soak.clear_soak_time = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak.clear_soak_time is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_STAT_CFG_PROP_SET(&stat_cfg, log_entry, cfg, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_stat_alarm_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_LOG_ENTRY, BCMOLT_MGT_GROUP_STAT_CFG, 0, BCMOLT_LOG_ENTRY_STAT_CFG_ID_CFG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_STAT_CFG_PROP_SET(&stat_cfg, log_entry, cfg, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_stat_cfg_set(device_id, &stat_cfg.hdr);
+    bcmcli_log("bcmolt_stat_cfg_set(device_id, &stat_cfg.hdr);\n");
+    apicli_print_complete(session, err, stat_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_log_entry_auto_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_log_entry_auto_cfg auto_cfg; /**< declare main API struct */
+    bcmolt_log_entry_key key = { };     /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_log_entry_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_log_entry_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_get");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, log_entry, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, log_entry, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_cleared");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, log_entry, stat_alarm_cleared);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, log_entry, stat_alarm_cleared);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_raised");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, log_entry, stat_alarm_raised);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, log_entry, stat_alarm_raised);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, log_entry, stat_alarm_cleared) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, log_entry, stat_alarm_raised))
+    {
+        BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, log_entry, all_properties);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, log_entry, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &auto_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_log_entry_auto_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_log_entry_auto_cfg auto_cfg; /**< declare main API struct */
+    bcmolt_log_entry_key key = { };     /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_log_entry_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_log_entry_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_set");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, log_entry, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, log_entry, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_cleared");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, log_entry, stat_alarm_cleared, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, log_entry, stat_alarm_cleared, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_LOG_ENTRY, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_LOG_ENTRY_AUTO_CFG_ID_STAT_ALARM_CLEARED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_raised");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, log_entry, stat_alarm_raised, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, log_entry, stat_alarm_raised, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_LOG_ENTRY, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_LOG_ENTRY_AUTO_CFG_ID_STAT_ALARM_RAISED, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);\n");
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_logger_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_logger_cfg cfg;          /**< declare main API struct */
+    bcmolt_logger_key key = { };    /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_logger_cfg cfg;\n");
+    bcmcli_log("bcmolt_logger_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "file_id");
+    if (cli_parm != NULL)
+    {
+        key.file_id = (bcmolt_log_file_id) cli_parm->value.enum_val;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "file_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.file_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_LOGGER, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_LOGGER_KEY_ID_FILE_ID, &key.file_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, logger, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, logger, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "buffer");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, logger, buffer);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, logger, buffer);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "wrap_around");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, logger, wrap_around);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, logger, wrap_around);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "clear_after_read");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, logger, clear_after_read);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, logger, clear_after_read);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "enable_log");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, logger, enable_log);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, logger, enable_log);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "log_names");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, logger, log_names);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, logger, log_names);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_CFG_PROP_IS_SET(&cfg, logger, buffer) && !BCMOLT_CFG_PROP_IS_SET(&cfg, logger, wrap_around) && !BCMOLT_CFG_PROP_IS_SET(&cfg, logger, clear_after_read) && !BCMOLT_CFG_PROP_IS_SET(&cfg, logger, enable_log) && !BCMOLT_CFG_PROP_IS_SET(&cfg, logger, log_names))
+    {
+        BCMOLT_CFG_PROP_GET(&cfg, logger, all_properties);
+        bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, logger, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_get(device_id, &cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_logger_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_logger_cfg cfg;          /**< declare main API struct */
+    bcmolt_logger_key key = { };    /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_logger_cfg cfg;\n");
+    bcmcli_log("bcmolt_logger_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "file_id");
+    if (cli_parm != NULL)
+    {
+        key.file_id = (bcmolt_log_file_id) cli_parm->value.enum_val;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "file_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.file_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_LOGGER, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_LOGGER_KEY_ID_FILE_ID, &key.file_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, logger, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, logger, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "wrap_around");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, logger, wrap_around, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, logger, wrap_around, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_LOGGER, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_LOGGER_CFG_ID_WRAP_AROUND, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "clear_after_read");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, logger, clear_after_read, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, logger, clear_after_read, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_LOGGER, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_LOGGER_CFG_ID_CLEAR_AFTER_READ, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "enable_log");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, logger, enable_log, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, logger, enable_log, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_LOGGER, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_LOGGER_CFG_ID_ENABLE_LOG, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_set(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_set(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_logger_cfg_clear(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_logger_cfg cfg;          /**< declare main API struct */
+    bcmolt_logger_key key = { };    /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_logger_cfg cfg;\n");
+    bcmcli_log("bcmolt_logger_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_clear");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "file_id");
+    if (cli_parm != NULL)
+    {
+        key.file_id = (bcmolt_log_file_id) cli_parm->value.enum_val;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "file_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.file_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_LOGGER, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_LOGGER_KEY_ID_FILE_ID, &key.file_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, logger, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, logger, key);\n");
+
+    /* call API */
+    err = bcmolt_cfg_clear(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_clear(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_logger_cfg_get_multi(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_logger_cfg cfg;          /**< declare main API struct */
+    bcmolt_logger_key key = { };    /**< declare key */
+    bcmolt_msg_set *msg_set = NULL; /**< declare message set */
+    uint32_t max_msgs;              /**< declare max number of msgs to get */
+    bcmos_bool invert_filter;       /**< declare filter invert flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_logger_cfg cfg;\n");
+    bcmcli_log("bcmolt_logger_key key = {  };\n");
+    bcmcli_log("bcmolt_msg_set* msg_set = NULL;\n");
+    bcmcli_log("uint32_t max_msgs;\n");
+    bcmcli_log("bcmos_bool invert_filter;\n");
+    apicli_print_start(session, "bcmolt_cfg_get_multi");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "file_id");
+    if (cli_parm != NULL)
+    {
+        key.file_id = (bcmolt_log_file_id) cli_parm->value.enum_val;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "file_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.file_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_LOGGER, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_LOGGER_KEY_ID_FILE_ID, &key.file_id);
+    bcmcli_log(";\n");
+
+    /* set max number of msgs from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "max_msgs");
+    if (cli_parm != NULL)
+    {
+        max_msgs = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "max_msgs is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("max_msgs = %d;\n", max_msgs);
+
+    /* set filter invert flag from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "filter_invert");
+    if (cli_parm != NULL)
+    {
+        invert_filter = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "filter_invert is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("invert_filter = %s;\n", (invert_filter) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* allocate message set */
+    err = apicli_msg_set_alloc(byte_pool, BCMOLT_OBJ_ID_LOGGER, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    bcmcli_log("bcmolt_msg_set_alloc(BCMOLT_OBJ_ID_LOGGER, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, logger, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, logger, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.buffer.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_log_buffer val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.buffer.buff");
+        if (cli_parm != NULL)
+        {
+            snprintf(val.buff, 2048, "%s", cli_parm->value.string);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.buffer.buff is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.buffer.msg_to_read");
+        if (cli_parm != NULL)
+        {
+            val.msg_to_read = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.buffer.msg_to_read is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, logger, buffer, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_log_buffer val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_LOGGER, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_LOGGER_CFG_ID_BUFFER, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, logger, buffer, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "buffer");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, logger, buffer);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, logger, buffer);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.wrap_around");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, logger, wrap_around, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, logger, wrap_around, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_LOGGER, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_LOGGER_CFG_ID_WRAP_AROUND, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "wrap_around");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, logger, wrap_around);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, logger, wrap_around);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.clear_after_read");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, logger, clear_after_read, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, logger, clear_after_read, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_LOGGER, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_LOGGER_CFG_ID_CLEAR_AFTER_READ, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "clear_after_read");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, logger, clear_after_read);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, logger, clear_after_read);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.enable_log");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, logger, enable_log, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, logger, enable_log, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_LOGGER, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_LOGGER_CFG_ID_ENABLE_LOG, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "enable_log");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, logger, enable_log);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, logger, enable_log);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.log_names.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_str_1000 val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.log_names.str");
+        if (cli_parm != NULL)
+        {
+            snprintf(val.str, 1000, "%s", cli_parm->value.string);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.log_names.str is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, logger, log_names, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_str_1000 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_LOGGER, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_LOGGER_CFG_ID_LOG_NAMES, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, logger, log_names, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "log_names");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, logger, log_names);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, logger, log_names);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, logger, buffer) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, logger, wrap_around) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, logger, clear_after_read) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, logger, enable_log) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, logger, log_names))
+    {
+        BCMOLT_MSGSET_CFG_PROP_GET(msg_set, logger, all_properties);
+        bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, logger, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);
+    bcmcli_log("bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_logger_stat_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_logger_stat stat;        /**< declare main API struct */
+    bcmolt_logger_key key = { };    /**< declare key */
+    bcmos_bool clear_on_read;       /**< declare 'clear on read' flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_logger_stat stat;\n");
+    bcmcli_log("bcmolt_logger_key key = {  };\n");
+    bcmcli_log("bcmos_bool clear_on_read;\n");
+    apicli_print_start(session, "bcmolt_stat_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "file_id");
+    if (cli_parm != NULL)
+    {
+        key.file_id = (bcmolt_log_file_id) cli_parm->value.enum_val;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "file_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.file_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_LOGGER, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_LOGGER_KEY_ID_FILE_ID, &key.file_id);
+    bcmcli_log(";\n");
+
+    /* set stat flags from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "clear");
+    if (cli_parm != NULL)
+    {
+        clear_on_read = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "clear is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("clear_on_read = %s;\n", (clear_on_read) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* init the API struct */
+    BCMOLT_STAT_INIT(&stat, logger, key);
+    bcmcli_log("BCMOLT_STAT_INIT(&stat, logger, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "lines_in_log");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, logger, lines_in_log);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, logger, lines_in_log);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_STAT_PROP_IS_SET(&stat, logger, lines_in_log))
+    {
+        BCMOLT_STAT_PROP_GET(&stat, logger, all_properties);
+        bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, logger, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_stat_get(device_id, &stat.hdr, clear_on_read);
+    bcmcli_log("bcmolt_stat_get(device_id, &stat.hdr, clear_on_read);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &stat.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, stat.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_logger_oper_clear_log_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_logger_clear_log oper;   /**< declare main API struct */
+    bcmolt_logger_key key = { };    /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_logger_clear_log oper;\n");
+    bcmcli_log("bcmolt_logger_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "file_id");
+    if (cli_parm != NULL)
+    {
+        key.file_id = (bcmolt_log_file_id) cli_parm->value.enum_val;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "file_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.file_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_LOGGER, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_LOGGER_KEY_ID_FILE_ID, &key.file_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, logger, clear_log, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, logger, clear_log, key);\n");
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_logger_stat_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_logger_stat_cfg stat_cfg;    /**< declare main API struct */
+    bcmolt_logger_key key = { };        /**< declare key */
+    bcmolt_logger_stat_id stat_id;      /**< declare stat ID */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_logger_stat_cfg stat_cfg;\n");
+    bcmcli_log("bcmolt_logger_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_stat_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "file_id");
+    if (cli_parm != NULL)
+    {
+        key.file_id = (bcmolt_log_file_id) cli_parm->value.enum_val;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "file_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.file_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_LOGGER, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_LOGGER_KEY_ID_FILE_ID, &key.file_id);
+    bcmcli_log(";\n");
+
+    /* set stat ID from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "sub");
+    if (cli_parm != NULL)
+    {
+        stat_id = (bcmolt_logger_stat_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    /* init the API struct */
+    switch (stat_id)
+    {
+        case BCMOLT_LOGGER_STAT_ID_LINES_IN_LOG:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, logger, lines_in_log, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, logger, lines_in_log, key);\n");
+            break;
+        default:
+            apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+            return BCM_ERR_RANGE;
+    }
+
+    /* call API */
+    err = bcmolt_stat_cfg_get(device_id, &stat_cfg.hdr);
+    bcmcli_log("bcmolt_stat_cfg_get(device_id, &stat_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &stat_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, stat_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_logger_stat_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_logger_stat_cfg stat_cfg;    /**< declare main API struct */
+    bcmolt_logger_key key = { };        /**< declare key */
+    bcmolt_logger_stat_id stat_id;      /**< declare stat ID */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_logger_stat_cfg stat_cfg;\n");
+    bcmcli_log("bcmolt_logger_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_stat_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "file_id");
+    if (cli_parm != NULL)
+    {
+        key.file_id = (bcmolt_log_file_id) cli_parm->value.enum_val;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "file_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.file_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_LOGGER, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_LOGGER_KEY_ID_FILE_ID, &key.file_id);
+    bcmcli_log(";\n");
+
+    /* set stat ID from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "sub");
+    if (cli_parm != NULL)
+    {
+        stat_id = (bcmolt_logger_stat_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    /* init the API struct */
+    switch (stat_id)
+    {
+        case BCMOLT_LOGGER_STAT_ID_LINES_IN_LOG:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, logger, lines_in_log, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, logger, lines_in_log, key);\n");
+            break;
+        default:
+            apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+            return BCM_ERR_RANGE;
+    }
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_stat_alarm_config val = { };
+        cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.trigger.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.type");
+            if (cli_parm != NULL)
+            {
+                val.trigger.type = (bcmolt_stat_condition_type) cli_parm->value.enum_val;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.type is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            switch (val.trigger.type)
+            {
+                case BCMOLT_STAT_CONDITION_TYPE_RATE_THRESHOLD:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.rising");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_threshold.rising = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.rising is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.falling");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_threshold.falling = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.falling is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_RATE_RANGE:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.upper");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_range.upper = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.upper is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.lower");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_range.lower = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.lower is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_VALUE_THRESHOLD:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.limit");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.value_threshold.limit = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.limit is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_NONE:
+                    break;
+                default:
+                    apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+                    return BCM_ERR_RANGE;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.soak.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "cfg.soak.active_soak_time");
+            if (cli_parm != NULL)
+            {
+                val.soak.active_soak_time = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak.active_soak_time is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "cfg.soak.clear_soak_time");
+            if (cli_parm != NULL)
+            {
+                val.soak.clear_soak_time = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak.clear_soak_time is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_STAT_CFG_PROP_SET(&stat_cfg, logger, cfg, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_stat_alarm_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_LOGGER, BCMOLT_MGT_GROUP_STAT_CFG, 0, BCMOLT_LOGGER_STAT_CFG_ID_CFG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_STAT_CFG_PROP_SET(&stat_cfg, logger, cfg, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_stat_cfg_set(device_id, &stat_cfg.hdr);
+    bcmcli_log("bcmolt_stat_cfg_set(device_id, &stat_cfg.hdr);\n");
+    apicli_print_complete(session, err, stat_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_logger_auto_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_logger_auto_cfg auto_cfg;    /**< declare main API struct */
+    bcmolt_logger_key key = { };        /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_logger_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_logger_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_get");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, logger, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, logger, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_cleared");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, logger, stat_alarm_cleared);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, logger, stat_alarm_cleared);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_raised");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, logger, stat_alarm_raised);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, logger, stat_alarm_raised);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, logger, stat_alarm_cleared) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, logger, stat_alarm_raised))
+    {
+        BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, logger, all_properties);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, logger, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &auto_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_logger_auto_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_logger_auto_cfg auto_cfg;    /**< declare main API struct */
+    bcmolt_logger_key key = { };        /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_logger_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_logger_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_set");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, logger, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, logger, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_cleared");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, logger, stat_alarm_cleared, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, logger, stat_alarm_cleared, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_LOGGER, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_LOGGER_AUTO_CFG_ID_STAT_ALARM_CLEARED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_raised");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, logger, stat_alarm_raised, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, logger, stat_alarm_raised, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_LOGGER, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_LOGGER_AUTO_CFG_ID_STAT_ALARM_RAISED, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);\n");
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_nni_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_nni_cfg cfg;         /**< declare main API struct */
+    bcmolt_nni_key key = { };   /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_nni_cfg cfg;\n");
+    bcmcli_log("bcmolt_nni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_pon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_NNI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_NNI_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, nni, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, nni, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "remote_loopback");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, nni, remote_loopback);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, nni, remote_loopback);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "line_loopback");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, nni, line_loopback);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, nni, line_loopback);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mac_address");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, nni, mac_address);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, nni, mac_address);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "nni_status");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, nni, nni_status);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, nni, nni_status);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "nni_backup_status");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, nni, nni_backup_status);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, nni, nni_backup_status);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "active_nni");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, nni, active_nni);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, nni, active_nni);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "nni_status_polling_interval_ms");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, nni, nni_status_polling_interval_ms);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, nni, nni_status_polling_interval_ms);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "autoswitch");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, nni, autoswitch);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, nni, autoswitch);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "flow_control");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, nni, flow_control);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, nni, flow_control);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_CFG_PROP_IS_SET(&cfg, nni, remote_loopback) && !BCMOLT_CFG_PROP_IS_SET(&cfg, nni, line_loopback) && !BCMOLT_CFG_PROP_IS_SET(&cfg, nni, mac_address) && !BCMOLT_CFG_PROP_IS_SET(&cfg, nni, nni_status) && !BCMOLT_CFG_PROP_IS_SET(&cfg, nni, nni_backup_status) && !BCMOLT_CFG_PROP_IS_SET(&cfg, nni, active_nni) && !BCMOLT_CFG_PROP_IS_SET(&cfg, nni, nni_status_polling_interval_ms) && !BCMOLT_CFG_PROP_IS_SET(&cfg, nni, autoswitch) && !BCMOLT_CFG_PROP_IS_SET(&cfg, nni, flow_control))
+    {
+        BCMOLT_CFG_PROP_GET(&cfg, nni, all_properties);
+        bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, nni, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_get(device_id, &cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_nni_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_nni_cfg cfg;         /**< declare main API struct */
+    bcmolt_nni_key key = { };   /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_nni_cfg cfg;\n");
+    bcmcli_log("bcmolt_nni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_pon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_NNI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_NNI_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, nni, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, nni, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "remote_loopback");
+    if (cli_parm != NULL)
+    {
+        bcmolt_control_state val;
+        val = (bcmolt_control_state) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, nni, remote_loopback, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, nni, remote_loopback, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_NNI_CFG_ID_REMOTE_LOOPBACK, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "line_loopback");
+    if (cli_parm != NULL)
+    {
+        bcmolt_control_state val;
+        val = (bcmolt_control_state) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, nni, line_loopback, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, nni, line_loopback, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_NNI_CFG_ID_LINE_LOOPBACK, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mac_address");
+    if (cli_parm != NULL)
+    {
+        bcmos_mac_address val;
+        val = cli_parm->value.mac;
+        BCMOLT_CFG_PROP_SET(&cfg, nni, mac_address, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, nni, mac_address, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_NNI_CFG_ID_MAC_ADDRESS, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "active_nni");
+    if (cli_parm != NULL)
+    {
+        bcmolt_nni_connection val;
+        val = (bcmolt_nni_connection) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, nni, active_nni, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, nni, active_nni, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_NNI_CFG_ID_ACTIVE_NNI, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "nni_status_polling_interval_ms");
+    if (cli_parm != NULL)
+    {
+        uint32_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, nni, nni_status_polling_interval_ms, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, nni, nni_status_polling_interval_ms, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_NNI_CFG_ID_NNI_STATUS_POLLING_INTERVAL_MS, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "autoswitch");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, nni, autoswitch, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, nni, autoswitch, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_NNI_CFG_ID_AUTOSWITCH, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "flow_control");
+    if (cli_parm != NULL)
+    {
+        bcmolt_control_state val;
+        val = (bcmolt_control_state) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, nni, flow_control, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, nni, flow_control, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_NNI_CFG_ID_FLOW_CONTROL, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_set(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_set(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_nni_cfg_clear(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_nni_cfg cfg;         /**< declare main API struct */
+    bcmolt_nni_key key = { };   /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_nni_cfg cfg;\n");
+    bcmcli_log("bcmolt_nni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_clear");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_pon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_NNI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_NNI_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, nni, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, nni, key);\n");
+
+    /* call API */
+    err = bcmolt_cfg_clear(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_clear(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_nni_cfg_get_multi(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_nni_cfg cfg;             /**< declare main API struct */
+    bcmolt_nni_key key = { };       /**< declare key */
+    bcmolt_msg_set *msg_set = NULL; /**< declare message set */
+    uint32_t max_msgs;              /**< declare max number of msgs to get */
+    bcmos_bool invert_filter;       /**< declare filter invert flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_nni_cfg cfg;\n");
+    bcmcli_log("bcmolt_nni_key key = {  };\n");
+    bcmcli_log("bcmolt_msg_set* msg_set = NULL;\n");
+    bcmcli_log("uint32_t max_msgs;\n");
+    bcmcli_log("bcmos_bool invert_filter;\n");
+    apicli_print_start(session, "bcmolt_cfg_get_multi");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_pon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_NNI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_NNI_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* set max number of msgs from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "max_msgs");
+    if (cli_parm != NULL)
+    {
+        max_msgs = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "max_msgs is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("max_msgs = %d;\n", max_msgs);
+
+    /* set filter invert flag from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "filter_invert");
+    if (cli_parm != NULL)
+    {
+        invert_filter = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "filter_invert is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("invert_filter = %s;\n", (invert_filter) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* allocate message set */
+    err = apicli_msg_set_alloc(byte_pool, BCMOLT_OBJ_ID_NNI, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    bcmcli_log("bcmolt_msg_set_alloc(BCMOLT_OBJ_ID_NNI, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, nni, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, nni, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "filter.remote_loopback");
+    if (cli_parm != NULL)
+    {
+        bcmolt_control_state val;
+        val = (bcmolt_control_state) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, nni, remote_loopback, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, nni, remote_loopback, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_NNI_CFG_ID_REMOTE_LOOPBACK, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "remote_loopback");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni, remote_loopback);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni, remote_loopback);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.line_loopback");
+    if (cli_parm != NULL)
+    {
+        bcmolt_control_state val;
+        val = (bcmolt_control_state) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, nni, line_loopback, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, nni, line_loopback, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_NNI_CFG_ID_LINE_LOOPBACK, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "line_loopback");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni, line_loopback);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni, line_loopback);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.mac_address");
+    if (cli_parm != NULL)
+    {
+        bcmos_mac_address val;
+        val = cli_parm->value.mac;
+        BCMOLT_CFG_PROP_SET(&cfg, nni, mac_address, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, nni, mac_address, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_NNI_CFG_ID_MAC_ADDRESS, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mac_address");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni, mac_address);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni, mac_address);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.nni_status.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_nni_link_status val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.nni_status.link_status");
+        if (cli_parm != NULL)
+        {
+            val.link_status = (bcmolt_trivalent) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.nni_status.link_status is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.nni_status.signal_detected");
+        if (cli_parm != NULL)
+        {
+            val.signal_detected = (bcmolt_trivalent) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.nni_status.signal_detected is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.nni_status.pmd_locked");
+        if (cli_parm != NULL)
+        {
+            val.pmd_locked = (bcmolt_trivalent) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.nni_status.pmd_locked is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, nni, nni_status, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_nni_link_status val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_NNI_CFG_ID_NNI_STATUS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, nni, nni_status, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "nni_status");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni, nni_status);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni, nni_status);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.nni_backup_status.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_nni_link_status val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.nni_backup_status.link_status");
+        if (cli_parm != NULL)
+        {
+            val.link_status = (bcmolt_trivalent) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.nni_backup_status.link_status is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.nni_backup_status.signal_detected");
+        if (cli_parm != NULL)
+        {
+            val.signal_detected = (bcmolt_trivalent) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.nni_backup_status.signal_detected is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.nni_backup_status.pmd_locked");
+        if (cli_parm != NULL)
+        {
+            val.pmd_locked = (bcmolt_trivalent) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.nni_backup_status.pmd_locked is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, nni, nni_backup_status, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_nni_link_status val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_NNI_CFG_ID_NNI_BACKUP_STATUS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, nni, nni_backup_status, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "nni_backup_status");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni, nni_backup_status);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni, nni_backup_status);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.active_nni");
+    if (cli_parm != NULL)
+    {
+        bcmolt_nni_connection val;
+        val = (bcmolt_nni_connection) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, nni, active_nni, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, nni, active_nni, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_NNI_CFG_ID_ACTIVE_NNI, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "active_nni");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni, active_nni);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni, active_nni);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.nni_status_polling_interval_ms");
+    if (cli_parm != NULL)
+    {
+        uint32_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, nni, nni_status_polling_interval_ms, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, nni, nni_status_polling_interval_ms, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_NNI_CFG_ID_NNI_STATUS_POLLING_INTERVAL_MS, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "nni_status_polling_interval_ms");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni, nni_status_polling_interval_ms);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni, nni_status_polling_interval_ms);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.autoswitch");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, nni, autoswitch, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, nni, autoswitch, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_NNI_CFG_ID_AUTOSWITCH, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "autoswitch");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni, autoswitch);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni, autoswitch);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.flow_control");
+    if (cli_parm != NULL)
+    {
+        bcmolt_control_state val;
+        val = (bcmolt_control_state) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, nni, flow_control, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, nni, flow_control, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_NNI_CFG_ID_FLOW_CONTROL, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "flow_control");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni, flow_control);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni, flow_control);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, nni, remote_loopback) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, nni, line_loopback) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, nni, mac_address) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, nni, nni_status) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, nni, nni_backup_status) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, nni, active_nni) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, nni, nni_status_polling_interval_ms) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, nni, autoswitch) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, nni, flow_control))
+    {
+        BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni, all_properties);
+        bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);
+    bcmcli_log("bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_nni_stat_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_nni_stat stat;       /**< declare main API struct */
+    bcmolt_nni_key key = { };   /**< declare key */
+    bcmos_bool clear_on_read;   /**< declare 'clear on read' flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_nni_stat stat;\n");
+    bcmcli_log("bcmolt_nni_key key = {  };\n");
+    bcmcli_log("bcmos_bool clear_on_read;\n");
+    apicli_print_start(session, "bcmolt_stat_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_pon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_NNI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_NNI_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* set stat flags from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "clear");
+    if (cli_parm != NULL)
+    {
+        clear_on_read = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "clear is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("clear_on_read = %s;\n", (clear_on_read) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* init the API struct */
+    BCMOLT_STAT_INIT(&stat, nni, key);
+    bcmcli_log("BCMOLT_STAT_INIT(&stat, nni, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "rx_frames_64");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, rx_frames_64);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, rx_frames_64);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_frames_65_127");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, rx_frames_65_127);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, rx_frames_65_127);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_frames_128_255");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, rx_frames_128_255);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, rx_frames_128_255);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_frames_256_511");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, rx_frames_256_511);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, rx_frames_256_511);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_frames_512_1023");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, rx_frames_512_1023);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, rx_frames_512_1023);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_frames_1024_1518");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, rx_frames_1024_1518);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, rx_frames_1024_1518);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_frames_1519_2047");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, rx_frames_1519_2047);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, rx_frames_1519_2047);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_frames_2048_4095");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, rx_frames_2048_4095);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, rx_frames_2048_4095);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_frames_4096_9216");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, rx_frames_4096_9216);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, rx_frames_4096_9216);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_frames_9217_16383");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, rx_frames_9217_16383);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, rx_frames_9217_16383);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, rx_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, rx_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_bytes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, rx_bytes);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, rx_bytes);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_good_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, rx_good_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, rx_good_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_unicast_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, rx_unicast_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, rx_unicast_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_multicast_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, rx_multicast_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, rx_multicast_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_broadcast_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, rx_broadcast_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, rx_broadcast_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_fcs_errors");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, rx_fcs_errors);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, rx_fcs_errors);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_control_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, rx_control_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, rx_control_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_pause_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, rx_pause_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, rx_pause_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_pfc_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, rx_pfc_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, rx_pfc_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_unsupported_opcode");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, rx_unsupported_opcode);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, rx_unsupported_opcode);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_unsupported_da");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, rx_unsupported_da);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, rx_unsupported_da);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_alignment_errors");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, rx_alignment_errors);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, rx_alignment_errors);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_length_out_of_range");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, rx_length_out_of_range);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, rx_length_out_of_range);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_code_errors");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, rx_code_errors);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, rx_code_errors);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_oversized_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, rx_oversized_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, rx_oversized_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_jabber_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, rx_jabber_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, rx_jabber_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_mtu_check_errors");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, rx_mtu_check_errors);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, rx_mtu_check_errors);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_promiscuous_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, rx_promiscuous_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, rx_promiscuous_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_vlan_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, rx_vlan_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, rx_vlan_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_double_vlan_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, rx_double_vlan_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, rx_double_vlan_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_truncated_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, rx_truncated_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, rx_truncated_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_undersize_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, rx_undersize_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, rx_undersize_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_fragmented_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, rx_fragmented_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, rx_fragmented_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_runt_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, rx_runt_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, rx_runt_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_frames_64");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, tx_frames_64);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, tx_frames_64);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_frames_65_127");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, tx_frames_65_127);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, tx_frames_65_127);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_frames_128_255");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, tx_frames_128_255);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, tx_frames_128_255);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_frames_256_511");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, tx_frames_256_511);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, tx_frames_256_511);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_frames_512_1023");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, tx_frames_512_1023);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, tx_frames_512_1023);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_frames_1024_1518");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, tx_frames_1024_1518);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, tx_frames_1024_1518);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_frames_1519_2047");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, tx_frames_1519_2047);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, tx_frames_1519_2047);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_frames_2048_4095");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, tx_frames_2048_4095);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, tx_frames_2048_4095);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_frames_4096_9216");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, tx_frames_4096_9216);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, tx_frames_4096_9216);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_frames_9217_16383");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, tx_frames_9217_16383);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, tx_frames_9217_16383);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, tx_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, tx_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_bytes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, tx_bytes);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, tx_bytes);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_good_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, tx_good_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, tx_good_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_unicast_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, tx_unicast_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, tx_unicast_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_multicast_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, tx_multicast_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, tx_multicast_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_broadcast_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, tx_broadcast_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, tx_broadcast_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_pause_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, tx_pause_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, tx_pause_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_pfc_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, tx_pfc_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, tx_pfc_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_jabber_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, tx_jabber_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, tx_jabber_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_fcs_errors");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, tx_fcs_errors);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, tx_fcs_errors);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_control_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, tx_control_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, tx_control_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_oversize_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, tx_oversize_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, tx_oversize_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_fragmented_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, tx_fragmented_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, tx_fragmented_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_error_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, tx_error_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, tx_error_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_vlan_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, tx_vlan_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, tx_vlan_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_double_vlan_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, tx_double_vlan_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, tx_double_vlan_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_runt_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, tx_runt_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, tx_runt_frames);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_underrun_frames");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, nni, tx_underrun_frames);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, tx_underrun_frames);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_STAT_PROP_IS_SET(&stat, nni, rx_frames_64) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, rx_frames_65_127) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, rx_frames_128_255) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, rx_frames_256_511) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, rx_frames_512_1023) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, rx_frames_1024_1518) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, rx_frames_1519_2047) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, rx_frames_2048_4095) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, rx_frames_4096_9216) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, rx_frames_9217_16383) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, rx_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, rx_bytes) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, rx_good_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, rx_unicast_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, rx_multicast_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, rx_broadcast_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, rx_fcs_errors) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, rx_control_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, rx_pause_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, rx_pfc_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, rx_unsupported_opcode) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, rx_unsupported_da) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, rx_alignment_errors) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, rx_length_out_of_range) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, rx_code_errors) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, rx_oversized_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, rx_jabber_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, rx_mtu_check_errors) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, rx_promiscuous_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, rx_vlan_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, rx_double_vlan_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, rx_truncated_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, rx_undersize_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, rx_fragmented_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, rx_runt_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, tx_frames_64) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, tx_frames_65_127) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, tx_frames_128_255) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, tx_frames_256_511) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, tx_frames_512_1023) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, tx_frames_1024_1518) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, tx_frames_1519_2047) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, tx_frames_2048_4095) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, tx_frames_4096_9216) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, tx_frames_9217_16383) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, tx_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, tx_bytes) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, tx_good_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, tx_unicast_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, tx_multicast_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, tx_broadcast_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, tx_pause_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, tx_pfc_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, tx_jabber_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, tx_fcs_errors) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, tx_control_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, tx_oversize_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, tx_fragmented_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, tx_error_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, tx_vlan_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, tx_double_vlan_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, tx_runt_frames) && !BCMOLT_STAT_PROP_IS_SET(&stat, nni, tx_underrun_frames))
+    {
+        BCMOLT_STAT_PROP_GET(&stat, nni, all_properties);
+        bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, nni, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_stat_get(device_id, &stat.hdr, clear_on_read);
+    bcmcli_log("bcmolt_stat_get(device_id, &stat.hdr, clear_on_read);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &stat.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, stat.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_nni_stat_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_nni_stat_cfg stat_cfg;   /**< declare main API struct */
+    bcmolt_nni_key key = { };       /**< declare key */
+    bcmolt_nni_stat_id stat_id;     /**< declare stat ID */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_nni_stat_cfg stat_cfg;\n");
+    bcmcli_log("bcmolt_nni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_stat_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_pon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_NNI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_NNI_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* set stat ID from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "sub");
+    if (cli_parm != NULL)
+    {
+        stat_id = (bcmolt_nni_stat_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    /* init the API struct */
+    switch (stat_id)
+    {
+        case BCMOLT_NNI_STAT_ID_RX_FRAMES_64:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_frames_64, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_frames_64, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_FRAMES_65_127:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_frames_65_127, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_frames_65_127, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_FRAMES_128_255:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_frames_128_255, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_frames_128_255, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_FRAMES_256_511:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_frames_256_511, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_frames_256_511, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_FRAMES_512_1023:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_frames_512_1023, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_frames_512_1023, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_FRAMES_1024_1518:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_frames_1024_1518, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_frames_1024_1518, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_FRAMES_1519_2047:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_frames_1519_2047, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_frames_1519_2047, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_FRAMES_2048_4095:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_frames_2048_4095, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_frames_2048_4095, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_FRAMES_4096_9216:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_frames_4096_9216, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_frames_4096_9216, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_FRAMES_9217_16383:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_frames_9217_16383, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_frames_9217_16383, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_bytes, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_GOOD_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_good_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_good_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_UNICAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_unicast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_unicast_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_MULTICAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_multicast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_multicast_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_BROADCAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_broadcast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_broadcast_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_FCS_ERRORS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_fcs_errors, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_fcs_errors, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_CONTROL_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_control_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_control_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_PAUSE_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_pause_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_pause_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_PFC_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_pfc_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_pfc_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_UNSUPPORTED_OPCODE:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_unsupported_opcode, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_unsupported_opcode, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_UNSUPPORTED_DA:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_unsupported_da, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_unsupported_da, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_ALIGNMENT_ERRORS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_alignment_errors, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_alignment_errors, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_LENGTH_OUT_OF_RANGE:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_length_out_of_range, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_length_out_of_range, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_CODE_ERRORS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_code_errors, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_code_errors, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_OVERSIZED_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_oversized_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_oversized_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_JABBER_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_jabber_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_jabber_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_MTU_CHECK_ERRORS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_mtu_check_errors, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_mtu_check_errors, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_PROMISCUOUS_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_promiscuous_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_promiscuous_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_VLAN_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_vlan_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_vlan_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_DOUBLE_VLAN_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_double_vlan_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_double_vlan_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_TRUNCATED_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_truncated_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_truncated_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_UNDERSIZE_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_undersize_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_undersize_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_FRAGMENTED_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_fragmented_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_fragmented_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_RUNT_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_runt_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_runt_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_FRAMES_64:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_frames_64, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_frames_64, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_FRAMES_65_127:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_frames_65_127, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_frames_65_127, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_FRAMES_128_255:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_frames_128_255, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_frames_128_255, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_FRAMES_256_511:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_frames_256_511, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_frames_256_511, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_FRAMES_512_1023:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_frames_512_1023, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_frames_512_1023, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_FRAMES_1024_1518:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_frames_1024_1518, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_frames_1024_1518, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_FRAMES_1519_2047:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_frames_1519_2047, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_frames_1519_2047, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_FRAMES_2048_4095:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_frames_2048_4095, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_frames_2048_4095, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_FRAMES_4096_9216:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_frames_4096_9216, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_frames_4096_9216, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_FRAMES_9217_16383:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_frames_9217_16383, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_frames_9217_16383, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_bytes, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_GOOD_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_good_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_good_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_UNICAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_unicast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_unicast_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_MULTICAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_multicast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_multicast_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_BROADCAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_broadcast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_broadcast_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_PAUSE_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_pause_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_pause_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_PFC_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_pfc_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_pfc_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_JABBER_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_jabber_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_jabber_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_FCS_ERRORS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_fcs_errors, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_fcs_errors, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_CONTROL_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_control_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_control_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_OVERSIZE_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_oversize_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_oversize_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_FRAGMENTED_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_fragmented_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_fragmented_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_ERROR_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_error_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_error_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_VLAN_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_vlan_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_vlan_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_DOUBLE_VLAN_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_double_vlan_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_double_vlan_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_RUNT_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_runt_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_runt_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_UNDERRUN_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_underrun_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_underrun_frames, key);\n");
+            break;
+        default:
+            apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+            return BCM_ERR_RANGE;
+    }
+
+    /* call API */
+    err = bcmolt_stat_cfg_get(device_id, &stat_cfg.hdr);
+    bcmcli_log("bcmolt_stat_cfg_get(device_id, &stat_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &stat_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, stat_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_nni_stat_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_nni_stat_cfg stat_cfg;   /**< declare main API struct */
+    bcmolt_nni_key key = { };       /**< declare key */
+    bcmolt_nni_stat_id stat_id;     /**< declare stat ID */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_nni_stat_cfg stat_cfg;\n");
+    bcmcli_log("bcmolt_nni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_stat_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_pon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_NNI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_NNI_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* set stat ID from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "sub");
+    if (cli_parm != NULL)
+    {
+        stat_id = (bcmolt_nni_stat_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    /* init the API struct */
+    switch (stat_id)
+    {
+        case BCMOLT_NNI_STAT_ID_RX_FRAMES_64:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_frames_64, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_frames_64, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_FRAMES_65_127:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_frames_65_127, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_frames_65_127, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_FRAMES_128_255:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_frames_128_255, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_frames_128_255, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_FRAMES_256_511:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_frames_256_511, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_frames_256_511, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_FRAMES_512_1023:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_frames_512_1023, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_frames_512_1023, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_FRAMES_1024_1518:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_frames_1024_1518, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_frames_1024_1518, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_FRAMES_1519_2047:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_frames_1519_2047, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_frames_1519_2047, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_FRAMES_2048_4095:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_frames_2048_4095, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_frames_2048_4095, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_FRAMES_4096_9216:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_frames_4096_9216, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_frames_4096_9216, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_FRAMES_9217_16383:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_frames_9217_16383, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_frames_9217_16383, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_bytes, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_GOOD_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_good_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_good_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_UNICAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_unicast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_unicast_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_MULTICAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_multicast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_multicast_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_BROADCAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_broadcast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_broadcast_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_FCS_ERRORS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_fcs_errors, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_fcs_errors, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_CONTROL_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_control_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_control_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_PAUSE_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_pause_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_pause_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_PFC_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_pfc_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_pfc_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_UNSUPPORTED_OPCODE:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_unsupported_opcode, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_unsupported_opcode, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_UNSUPPORTED_DA:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_unsupported_da, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_unsupported_da, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_ALIGNMENT_ERRORS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_alignment_errors, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_alignment_errors, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_LENGTH_OUT_OF_RANGE:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_length_out_of_range, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_length_out_of_range, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_CODE_ERRORS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_code_errors, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_code_errors, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_OVERSIZED_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_oversized_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_oversized_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_JABBER_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_jabber_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_jabber_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_MTU_CHECK_ERRORS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_mtu_check_errors, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_mtu_check_errors, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_PROMISCUOUS_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_promiscuous_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_promiscuous_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_VLAN_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_vlan_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_vlan_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_DOUBLE_VLAN_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_double_vlan_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_double_vlan_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_TRUNCATED_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_truncated_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_truncated_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_UNDERSIZE_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_undersize_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_undersize_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_FRAGMENTED_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_fragmented_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_fragmented_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_RX_RUNT_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_runt_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, rx_runt_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_FRAMES_64:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_frames_64, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_frames_64, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_FRAMES_65_127:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_frames_65_127, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_frames_65_127, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_FRAMES_128_255:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_frames_128_255, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_frames_128_255, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_FRAMES_256_511:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_frames_256_511, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_frames_256_511, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_FRAMES_512_1023:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_frames_512_1023, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_frames_512_1023, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_FRAMES_1024_1518:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_frames_1024_1518, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_frames_1024_1518, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_FRAMES_1519_2047:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_frames_1519_2047, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_frames_1519_2047, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_FRAMES_2048_4095:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_frames_2048_4095, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_frames_2048_4095, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_FRAMES_4096_9216:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_frames_4096_9216, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_frames_4096_9216, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_FRAMES_9217_16383:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_frames_9217_16383, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_frames_9217_16383, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_bytes, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_GOOD_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_good_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_good_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_UNICAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_unicast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_unicast_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_MULTICAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_multicast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_multicast_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_BROADCAST_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_broadcast_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_broadcast_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_PAUSE_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_pause_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_pause_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_PFC_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_pfc_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_pfc_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_JABBER_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_jabber_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_jabber_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_FCS_ERRORS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_fcs_errors, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_fcs_errors, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_CONTROL_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_control_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_control_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_OVERSIZE_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_oversize_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_oversize_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_FRAGMENTED_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_fragmented_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_fragmented_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_ERROR_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_error_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_error_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_VLAN_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_vlan_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_vlan_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_DOUBLE_VLAN_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_double_vlan_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_double_vlan_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_RUNT_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_runt_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_runt_frames, key);\n");
+            break;
+        case BCMOLT_NNI_STAT_ID_TX_UNDERRUN_FRAMES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_underrun_frames, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, nni, tx_underrun_frames, key);\n");
+            break;
+        default:
+            apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+            return BCM_ERR_RANGE;
+    }
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_stat_alarm_config val = { };
+        cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.trigger.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.type");
+            if (cli_parm != NULL)
+            {
+                val.trigger.type = (bcmolt_stat_condition_type) cli_parm->value.enum_val;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.type is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            switch (val.trigger.type)
+            {
+                case BCMOLT_STAT_CONDITION_TYPE_RATE_THRESHOLD:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.rising");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_threshold.rising = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.rising is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.falling");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_threshold.falling = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.falling is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_RATE_RANGE:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.upper");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_range.upper = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.upper is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.lower");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_range.lower = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.lower is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_VALUE_THRESHOLD:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.limit");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.value_threshold.limit = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.limit is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_NONE:
+                    break;
+                default:
+                    apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+                    return BCM_ERR_RANGE;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.soak.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "cfg.soak.active_soak_time");
+            if (cli_parm != NULL)
+            {
+                val.soak.active_soak_time = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak.active_soak_time is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "cfg.soak.clear_soak_time");
+            if (cli_parm != NULL)
+            {
+                val.soak.clear_soak_time = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak.clear_soak_time is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_STAT_CFG_PROP_SET(&stat_cfg, nni, cfg, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_stat_alarm_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI, BCMOLT_MGT_GROUP_STAT_CFG, 0, BCMOLT_NNI_STAT_CFG_ID_CFG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_STAT_CFG_PROP_SET(&stat_cfg, nni, cfg, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_stat_cfg_set(device_id, &stat_cfg.hdr);
+    bcmcli_log("bcmolt_stat_cfg_set(device_id, &stat_cfg.hdr);\n");
+    apicli_print_complete(session, err, stat_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_nni_auto_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_nni_auto_cfg auto_cfg;   /**< declare main API struct */
+    bcmolt_nni_key key = { };       /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_nni_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_nni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_get");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, nni, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, nni, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_cleared");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, nni, stat_alarm_cleared);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, nni, stat_alarm_cleared);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_raised");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, nni, stat_alarm_raised);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, nni, stat_alarm_raised);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "status_changed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, nni, status_changed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, nni, status_changed);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, nni, stat_alarm_cleared) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, nni, stat_alarm_raised) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, nni, status_changed))
+    {
+        BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, nni, all_properties);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, nni, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &auto_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_nni_auto_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_nni_auto_cfg auto_cfg;   /**< declare main API struct */
+    bcmolt_nni_key key = { };       /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_nni_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_nni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_set");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, nni, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, nni, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_cleared");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, nni, stat_alarm_cleared, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, nni, stat_alarm_cleared, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_NNI_AUTO_CFG_ID_STAT_ALARM_CLEARED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_raised");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, nni, stat_alarm_raised, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, nni, stat_alarm_raised, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_NNI_AUTO_CFG_ID_STAT_ALARM_RAISED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "status_changed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, nni, status_changed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, nni, status_changed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_NNI_AUTO_CFG_ID_STATUS_CHANGED, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);\n");
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_nni_serdes_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_nni_serdes_cfg cfg;          /**< declare main API struct */
+    bcmolt_nni_serdes_key key = { };    /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_nni_serdes_cfg cfg;\n");
+    bcmcli_log("bcmolt_nni_serdes_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_pon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_NNI_SERDES, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_NNI_SERDES_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "instance");
+    if (cli_parm != NULL)
+    {
+        key.instance = (bcmolt_serdes_instance) cli_parm->value.enum_val;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "instance is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.instance = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_NNI_SERDES, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_NNI_SERDES_KEY_ID_INSTANCE, &key.instance);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, nni_serdes, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, nni_serdes, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "rx_vga");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, nni_serdes, rx_vga);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, nni_serdes, rx_vga);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_pf");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, nni_serdes, rx_pf);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, nni_serdes, rx_pf);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_lfpf");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, nni_serdes, rx_lfpf);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, nni_serdes, rx_lfpf);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_dfe1");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, nni_serdes, rx_dfe1);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, nni_serdes, rx_dfe1);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_dfe2");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, nni_serdes, rx_dfe2);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, nni_serdes, rx_dfe2);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_dfe3");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, nni_serdes, rx_dfe3);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, nni_serdes, rx_dfe3);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_dfe4");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, nni_serdes, rx_dfe4);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, nni_serdes, rx_dfe4);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_dfe5");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, nni_serdes, rx_dfe5);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, nni_serdes, rx_dfe5);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_pre");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, nni_serdes, tx_pre);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, nni_serdes, tx_pre);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_main");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, nni_serdes, tx_main);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, nni_serdes, tx_main);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_post1");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, nni_serdes, tx_post1);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, nni_serdes, tx_post1);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_post2");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, nni_serdes, tx_post2);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, nni_serdes, tx_post2);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_post3");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, nni_serdes, tx_post3);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, nni_serdes, tx_post3);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_amp");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, nni_serdes, tx_amp);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, nni_serdes, tx_amp);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_CFG_PROP_IS_SET(&cfg, nni_serdes, rx_vga) && !BCMOLT_CFG_PROP_IS_SET(&cfg, nni_serdes, rx_pf) && !BCMOLT_CFG_PROP_IS_SET(&cfg, nni_serdes, rx_lfpf) && !BCMOLT_CFG_PROP_IS_SET(&cfg, nni_serdes, rx_dfe1) && !BCMOLT_CFG_PROP_IS_SET(&cfg, nni_serdes, rx_dfe2) && !BCMOLT_CFG_PROP_IS_SET(&cfg, nni_serdes, rx_dfe3) && !BCMOLT_CFG_PROP_IS_SET(&cfg, nni_serdes, rx_dfe4) && !BCMOLT_CFG_PROP_IS_SET(&cfg, nni_serdes, rx_dfe5) && !BCMOLT_CFG_PROP_IS_SET(&cfg, nni_serdes, tx_pre) && !BCMOLT_CFG_PROP_IS_SET(&cfg, nni_serdes, tx_main) && !BCMOLT_CFG_PROP_IS_SET(&cfg, nni_serdes, tx_post1) && !BCMOLT_CFG_PROP_IS_SET(&cfg, nni_serdes, tx_post2) && !BCMOLT_CFG_PROP_IS_SET(&cfg, nni_serdes, tx_post3) && !BCMOLT_CFG_PROP_IS_SET(&cfg, nni_serdes, tx_amp))
+    {
+        BCMOLT_CFG_PROP_GET(&cfg, nni_serdes, all_properties);
+        bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, nni_serdes, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_get(device_id, &cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_nni_serdes_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_nni_serdes_cfg cfg;          /**< declare main API struct */
+    bcmolt_nni_serdes_key key = { };    /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_nni_serdes_cfg cfg;\n");
+    bcmcli_log("bcmolt_nni_serdes_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_pon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_NNI_SERDES, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_NNI_SERDES_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "instance");
+    if (cli_parm != NULL)
+    {
+        key.instance = (bcmolt_serdes_instance) cli_parm->value.enum_val;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "instance is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.instance = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_NNI_SERDES, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_NNI_SERDES_KEY_ID_INSTANCE, &key.instance);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, nni_serdes, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, nni_serdes, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "rx_vga");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, rx_vga, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, rx_vga, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_NNI_SERDES_CFG_ID_RX_VGA, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_pf");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, rx_pf, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, rx_pf, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_NNI_SERDES_CFG_ID_RX_PF, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_lfpf");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, rx_lfpf, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, rx_lfpf, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_NNI_SERDES_CFG_ID_RX_LFPF, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_dfe1");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, rx_dfe1, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, rx_dfe1, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_NNI_SERDES_CFG_ID_RX_DFE1, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_dfe2");
+    if (cli_parm != NULL)
+    {
+        int8_t val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, rx_dfe2, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, rx_dfe2, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_NNI_SERDES_CFG_ID_RX_DFE2, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_dfe3");
+    if (cli_parm != NULL)
+    {
+        int8_t val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, rx_dfe3, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, rx_dfe3, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_NNI_SERDES_CFG_ID_RX_DFE3, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_dfe4");
+    if (cli_parm != NULL)
+    {
+        int8_t val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, rx_dfe4, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, rx_dfe4, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_NNI_SERDES_CFG_ID_RX_DFE4, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_dfe5");
+    if (cli_parm != NULL)
+    {
+        int8_t val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, rx_dfe5, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, rx_dfe5, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_NNI_SERDES_CFG_ID_RX_DFE5, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_pre");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, tx_pre, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, tx_pre, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_NNI_SERDES_CFG_ID_TX_PRE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_main");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, tx_main, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, tx_main, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_NNI_SERDES_CFG_ID_TX_MAIN, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_post1");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, tx_post1, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, tx_post1, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_NNI_SERDES_CFG_ID_TX_POST1, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_post2");
+    if (cli_parm != NULL)
+    {
+        int8_t val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, tx_post2, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, tx_post2, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_NNI_SERDES_CFG_ID_TX_POST2, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_post3");
+    if (cli_parm != NULL)
+    {
+        int8_t val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, tx_post3, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, tx_post3, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_NNI_SERDES_CFG_ID_TX_POST3, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_amp");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, tx_amp, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, tx_amp, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_NNI_SERDES_CFG_ID_TX_AMP, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_set(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_set(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_nni_serdes_cfg_clear(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_nni_serdes_cfg cfg;          /**< declare main API struct */
+    bcmolt_nni_serdes_key key = { };    /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_nni_serdes_cfg cfg;\n");
+    bcmcli_log("bcmolt_nni_serdes_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_clear");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_pon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_NNI_SERDES, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_NNI_SERDES_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "instance");
+    if (cli_parm != NULL)
+    {
+        key.instance = (bcmolt_serdes_instance) cli_parm->value.enum_val;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "instance is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.instance = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_NNI_SERDES, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_NNI_SERDES_KEY_ID_INSTANCE, &key.instance);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, nni_serdes, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, nni_serdes, key);\n");
+
+    /* call API */
+    err = bcmolt_cfg_clear(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_clear(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_nni_serdes_cfg_get_multi(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_nni_serdes_cfg cfg;          /**< declare main API struct */
+    bcmolt_nni_serdes_key key = { };    /**< declare key */
+    bcmolt_msg_set *msg_set = NULL;     /**< declare message set */
+    uint32_t max_msgs;                  /**< declare max number of msgs to get */
+    bcmos_bool invert_filter;           /**< declare filter invert flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_nni_serdes_cfg cfg;\n");
+    bcmcli_log("bcmolt_nni_serdes_key key = {  };\n");
+    bcmcli_log("bcmolt_msg_set* msg_set = NULL;\n");
+    bcmcli_log("uint32_t max_msgs;\n");
+    bcmcli_log("bcmos_bool invert_filter;\n");
+    apicli_print_start(session, "bcmolt_cfg_get_multi");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_pon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_NNI_SERDES, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_NNI_SERDES_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "instance");
+    if (cli_parm != NULL)
+    {
+        key.instance = (bcmolt_serdes_instance) cli_parm->value.enum_val;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "instance is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.instance = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_NNI_SERDES, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_NNI_SERDES_KEY_ID_INSTANCE, &key.instance);
+    bcmcli_log(";\n");
+
+    /* set max number of msgs from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "max_msgs");
+    if (cli_parm != NULL)
+    {
+        max_msgs = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "max_msgs is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("max_msgs = %d;\n", max_msgs);
+
+    /* set filter invert flag from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "filter_invert");
+    if (cli_parm != NULL)
+    {
+        invert_filter = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "filter_invert is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("invert_filter = %s;\n", (invert_filter) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* allocate message set */
+    err = apicli_msg_set_alloc(byte_pool, BCMOLT_OBJ_ID_NNI_SERDES, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    bcmcli_log("bcmolt_msg_set_alloc(BCMOLT_OBJ_ID_NNI_SERDES, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, nni_serdes, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, nni_serdes, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "filter.rx_vga");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, rx_vga, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, rx_vga, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_NNI_SERDES_CFG_ID_RX_VGA, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_vga");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni_serdes, rx_vga);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni_serdes, rx_vga);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.rx_pf");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, rx_pf, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, rx_pf, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_NNI_SERDES_CFG_ID_RX_PF, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_pf");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni_serdes, rx_pf);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni_serdes, rx_pf);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.rx_lfpf");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, rx_lfpf, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, rx_lfpf, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_NNI_SERDES_CFG_ID_RX_LFPF, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_lfpf");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni_serdes, rx_lfpf);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni_serdes, rx_lfpf);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.rx_dfe1");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, rx_dfe1, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, rx_dfe1, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_NNI_SERDES_CFG_ID_RX_DFE1, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_dfe1");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni_serdes, rx_dfe1);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni_serdes, rx_dfe1);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.rx_dfe2");
+    if (cli_parm != NULL)
+    {
+        int8_t val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, rx_dfe2, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, rx_dfe2, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_NNI_SERDES_CFG_ID_RX_DFE2, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_dfe2");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni_serdes, rx_dfe2);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni_serdes, rx_dfe2);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.rx_dfe3");
+    if (cli_parm != NULL)
+    {
+        int8_t val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, rx_dfe3, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, rx_dfe3, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_NNI_SERDES_CFG_ID_RX_DFE3, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_dfe3");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni_serdes, rx_dfe3);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni_serdes, rx_dfe3);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.rx_dfe4");
+    if (cli_parm != NULL)
+    {
+        int8_t val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, rx_dfe4, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, rx_dfe4, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_NNI_SERDES_CFG_ID_RX_DFE4, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_dfe4");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni_serdes, rx_dfe4);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni_serdes, rx_dfe4);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.rx_dfe5");
+    if (cli_parm != NULL)
+    {
+        int8_t val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, rx_dfe5, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, rx_dfe5, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_NNI_SERDES_CFG_ID_RX_DFE5, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_dfe5");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni_serdes, rx_dfe5);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni_serdes, rx_dfe5);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.tx_pre");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, tx_pre, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, tx_pre, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_NNI_SERDES_CFG_ID_TX_PRE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_pre");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni_serdes, tx_pre);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni_serdes, tx_pre);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.tx_main");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, tx_main, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, tx_main, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_NNI_SERDES_CFG_ID_TX_MAIN, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_main");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni_serdes, tx_main);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni_serdes, tx_main);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.tx_post1");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, tx_post1, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, tx_post1, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_NNI_SERDES_CFG_ID_TX_POST1, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_post1");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni_serdes, tx_post1);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni_serdes, tx_post1);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.tx_post2");
+    if (cli_parm != NULL)
+    {
+        int8_t val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, tx_post2, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, tx_post2, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_NNI_SERDES_CFG_ID_TX_POST2, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_post2");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni_serdes, tx_post2);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni_serdes, tx_post2);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.tx_post3");
+    if (cli_parm != NULL)
+    {
+        int8_t val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, tx_post3, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, tx_post3, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_NNI_SERDES_CFG_ID_TX_POST3, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_post3");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni_serdes, tx_post3);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni_serdes, tx_post3);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.tx_amp");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, tx_amp, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, nni_serdes, tx_amp, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_NNI_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_NNI_SERDES_CFG_ID_TX_AMP, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_amp");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni_serdes, tx_amp);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni_serdes, tx_amp);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, nni_serdes, rx_vga) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, nni_serdes, rx_pf) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, nni_serdes, rx_lfpf) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, nni_serdes, rx_dfe1) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, nni_serdes, rx_dfe2) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, nni_serdes, rx_dfe3) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, nni_serdes, rx_dfe4) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, nni_serdes, rx_dfe5) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, nni_serdes, tx_pre) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, nni_serdes, tx_main) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, nni_serdes, tx_post1) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, nni_serdes, tx_post2) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, nni_serdes, tx_post3) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, nni_serdes, tx_amp))
+    {
+        BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni_serdes, all_properties);
+        bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, nni_serdes, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);
+    bcmcli_log("bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_software_error_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_software_error_cfg cfg;          /**< declare main API struct */
+    bcmolt_software_error_key key = { };    /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_software_error_cfg cfg;\n");
+    bcmcli_log("bcmolt_software_error_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "idx");
+    if (cli_parm != NULL)
+    {
+        key.idx = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "idx is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.idx = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_SOFTWARE_ERROR, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_SOFTWARE_ERROR_KEY_ID_IDX, &key.idx);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, software_error, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, software_error, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "entry");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, software_error, entry);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, software_error, entry);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_CFG_PROP_IS_SET(&cfg, software_error, entry))
+    {
+        BCMOLT_CFG_PROP_GET(&cfg, software_error, all_properties);
+        bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, software_error, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_get(device_id, &cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_software_error_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_software_error_cfg cfg;          /**< declare main API struct */
+    bcmolt_software_error_key key = { };    /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_software_error_cfg cfg;\n");
+    bcmcli_log("bcmolt_software_error_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "idx");
+    if (cli_parm != NULL)
+    {
+        key.idx = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "idx is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.idx = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_SOFTWARE_ERROR, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_SOFTWARE_ERROR_KEY_ID_IDX, &key.idx);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, software_error, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, software_error, key);\n");
+
+    /* decode API parameters from CLI */
+
+    /* call API */
+    err = bcmolt_cfg_set(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_set(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_software_error_cfg_clear(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_software_error_cfg cfg;          /**< declare main API struct */
+    bcmolt_software_error_key key = { };    /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_software_error_cfg cfg;\n");
+    bcmcli_log("bcmolt_software_error_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_clear");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "idx");
+    if (cli_parm != NULL)
+    {
+        key.idx = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "idx is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.idx = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_SOFTWARE_ERROR, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_SOFTWARE_ERROR_KEY_ID_IDX, &key.idx);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, software_error, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, software_error, key);\n");
+
+    /* call API */
+    err = bcmolt_cfg_clear(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_clear(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_software_error_cfg_get_multi(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_software_error_cfg cfg;          /**< declare main API struct */
+    bcmolt_software_error_key key = { };    /**< declare key */
+    bcmolt_msg_set *msg_set = NULL;         /**< declare message set */
+    uint32_t max_msgs;                      /**< declare max number of msgs to get */
+    bcmos_bool invert_filter;               /**< declare filter invert flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_software_error_cfg cfg;\n");
+    bcmcli_log("bcmolt_software_error_key key = {  };\n");
+    bcmcli_log("bcmolt_msg_set* msg_set = NULL;\n");
+    bcmcli_log("uint32_t max_msgs;\n");
+    bcmcli_log("bcmos_bool invert_filter;\n");
+    apicli_print_start(session, "bcmolt_cfg_get_multi");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "idx");
+    if (cli_parm != NULL)
+    {
+        key.idx = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "idx is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.idx = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_SOFTWARE_ERROR, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_SOFTWARE_ERROR_KEY_ID_IDX, &key.idx);
+    bcmcli_log(";\n");
+
+    /* set max number of msgs from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "max_msgs");
+    if (cli_parm != NULL)
+    {
+        max_msgs = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "max_msgs is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("max_msgs = %d;\n", max_msgs);
+
+    /* set filter invert flag from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "filter_invert");
+    if (cli_parm != NULL)
+    {
+        invert_filter = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "filter_invert is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("invert_filter = %s;\n", (invert_filter) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* allocate message set */
+    err = apicli_msg_set_alloc(byte_pool, BCMOLT_OBJ_ID_SOFTWARE_ERROR, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    bcmcli_log("bcmolt_msg_set_alloc(BCMOLT_OBJ_ID_SOFTWARE_ERROR, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, software_error, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, software_error, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.entry.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_sw_error val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.entry.first_error_time_us");
+        if (cli_parm != NULL)
+        {
+            val.first_error_time_us = cli_parm->value.unumber64;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.entry.first_error_time_us is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.entry.last_error_time_us");
+        if (cli_parm != NULL)
+        {
+            val.last_error_time_us = cli_parm->value.unumber64;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.entry.last_error_time_us is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.entry.line_number");
+        if (cli_parm != NULL)
+        {
+            val.line_number = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.entry.line_number is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.entry.error_counter");
+        if (cli_parm != NULL)
+        {
+            val.error_counter = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.entry.error_counter is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.entry.instance");
+        if (cli_parm != NULL)
+        {
+            val.instance = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.entry.instance is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.entry.filename");
+        if (cli_parm != NULL)
+        {
+            snprintf(val.filename, 64, "%s", cli_parm->value.string);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.entry.filename is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.entry.task_name");
+        if (cli_parm != NULL)
+        {
+            snprintf(val.task_name, 64, "%s", cli_parm->value.string);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.entry.task_name is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, software_error, entry, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_sw_error val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_SOFTWARE_ERROR, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_SOFTWARE_ERROR_CFG_ID_ENTRY, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, software_error, entry, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "entry");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, software_error, entry);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, software_error, entry);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, software_error, entry))
+    {
+        BCMOLT_MSGSET_CFG_PROP_GET(msg_set, software_error, all_properties);
+        bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, software_error, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);
+    bcmcli_log("bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_trx_calibration_oper_start_capture_window_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_trx_calibration_start_capture_window oper;   /**< declare main API struct */
+    bcmolt_trx_calibration_key key = { };               /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_trx_calibration_start_capture_window oper;\n");
+    bcmcli_log("bcmolt_trx_calibration_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, trx_calibration, start_capture_window, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, trx_calibration, start_capture_window, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_OPER_PROP_SET(&oper, trx_calibration, start_capture_window, pon_ni, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, trx_calibration, start_capture_window, pon_ni, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_TRX_CALIBRATION, BCMOLT_MGT_GROUP_OPER, BCMOLT_TRX_CALIBRATION_OPER_ID_START_CAPTURE_WINDOW, BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_PON_NI, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "trigger");
+    if (cli_parm != NULL)
+    {
+        bcmolt_trx_calibration_trigger val;
+        val = (bcmolt_trx_calibration_trigger) cli_parm->value.enum_val;
+        BCMOLT_OPER_PROP_SET(&oper, trx_calibration, start_capture_window, trigger, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, trx_calibration, start_capture_window, trigger, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_TRX_CALIBRATION, BCMOLT_MGT_GROUP_OPER, BCMOLT_TRX_CALIBRATION_OPER_ID_START_CAPTURE_WINDOW, BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_TRIGGER, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "strobe");
+    if (cli_parm != NULL)
+    {
+        bcmolt_capture_strobe_signal val;
+        val = (bcmolt_capture_strobe_signal) cli_parm->value.enum_val;
+        BCMOLT_OPER_PROP_SET(&oper, trx_calibration, start_capture_window, strobe, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, trx_calibration, start_capture_window, strobe, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_TRX_CALIBRATION, BCMOLT_MGT_GROUP_OPER, BCMOLT_TRX_CALIBRATION_OPER_ID_START_CAPTURE_WINDOW, BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_STROBE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "window_mode");
+    if (cli_parm != NULL)
+    {
+        bcmolt_trx_calibration_window_mode val;
+        val = (bcmolt_trx_calibration_window_mode) cli_parm->value.enum_val;
+        BCMOLT_OPER_PROP_SET(&oper, trx_calibration, start_capture_window, window_mode, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, trx_calibration, start_capture_window, window_mode, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_TRX_CALIBRATION, BCMOLT_MGT_GROUP_OPER, BCMOLT_TRX_CALIBRATION_OPER_ID_START_CAPTURE_WINDOW, BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_WINDOW_MODE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_OPER_PROP_SET(&oper, trx_calibration, start_capture_window, onu_id, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, trx_calibration, start_capture_window, onu_id, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_TRX_CALIBRATION, BCMOLT_MGT_GROUP_OPER, BCMOLT_TRX_CALIBRATION_OPER_ID_START_CAPTURE_WINDOW, BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_ONU_ID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "trigger_position");
+    if (cli_parm != NULL)
+    {
+        bcmolt_trx_calibration_trigger_position val;
+        val = (bcmolt_trx_calibration_trigger_position) cli_parm->value.enum_val;
+        BCMOLT_OPER_PROP_SET(&oper, trx_calibration, start_capture_window, trigger_position, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, trx_calibration, start_capture_window, trigger_position, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_TRX_CALIBRATION, BCMOLT_MGT_GROUP_OPER, BCMOLT_TRX_CALIBRATION_OPER_ID_START_CAPTURE_WINDOW, BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_TRIGGER_POSITION, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stop_due_to_corrupt_strobe");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_OPER_PROP_SET(&oper, trx_calibration, start_capture_window, stop_due_to_corrupt_strobe, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, trx_calibration, start_capture_window, stop_due_to_corrupt_strobe, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_TRX_CALIBRATION, BCMOLT_MGT_GROUP_OPER, BCMOLT_TRX_CALIBRATION_OPER_ID_START_CAPTURE_WINDOW, BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_STOP_DUE_TO_CORRUPT_STROBE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "start_offset");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_OPER_PROP_SET(&oper, trx_calibration, start_capture_window, start_offset, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, trx_calibration, start_capture_window, start_offset, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_TRX_CALIBRATION, BCMOLT_MGT_GROUP_OPER, BCMOLT_TRX_CALIBRATION_OPER_ID_START_CAPTURE_WINDOW, BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_START_OFFSET, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "end_offset");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_OPER_PROP_SET(&oper, trx_calibration, start_capture_window, end_offset, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, trx_calibration, start_capture_window, end_offset, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_TRX_CALIBRATION, BCMOLT_MGT_GROUP_OPER, BCMOLT_TRX_CALIBRATION_OPER_ID_START_CAPTURE_WINDOW, BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_END_OFFSET, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "number_of_cycles");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_OPER_PROP_SET(&oper, trx_calibration, start_capture_window, number_of_cycles, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, trx_calibration, start_capture_window, number_of_cycles, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_TRX_CALIBRATION, BCMOLT_MGT_GROUP_OPER, BCMOLT_TRX_CALIBRATION_OPER_ID_START_CAPTURE_WINDOW, BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_NUMBER_OF_CYCLES, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_trx_calibration_oper_stop_capture_window_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_trx_calibration_stop_capture_window oper;    /**< declare main API struct */
+    bcmolt_trx_calibration_key key = { };               /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_trx_calibration_stop_capture_window oper;\n");
+    bcmcli_log("bcmolt_trx_calibration_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, trx_calibration, stop_capture_window, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, trx_calibration, stop_capture_window, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_OPER_PROP_SET(&oper, trx_calibration, stop_capture_window, pon_ni, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, trx_calibration, stop_capture_window, pon_ni, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_TRX_CALIBRATION, BCMOLT_MGT_GROUP_OPER, BCMOLT_TRX_CALIBRATION_OPER_ID_STOP_CAPTURE_WINDOW, BCMOLT_TRX_CALIBRATION_STOP_CAPTURE_WINDOW_ID_PON_NI, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_trx_calibration_auto_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_trx_calibration_auto_cfg auto_cfg;   /**< declare main API struct */
+    bcmolt_trx_calibration_key key = { };       /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_trx_calibration_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_trx_calibration_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_get");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, trx_calibration, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, trx_calibration, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "capture_window_and_statistic_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, trx_calibration, capture_window_and_statistic_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, trx_calibration, capture_window_and_statistic_completed);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, trx_calibration, capture_window_and_statistic_completed))
+    {
+        BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, trx_calibration, all_properties);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, trx_calibration, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &auto_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_trx_calibration_auto_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_trx_calibration_auto_cfg auto_cfg;   /**< declare main API struct */
+    bcmolt_trx_calibration_key key = { };       /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_trx_calibration_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_trx_calibration_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_set");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, trx_calibration, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, trx_calibration, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "capture_window_and_statistic_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, trx_calibration, capture_window_and_statistic_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, trx_calibration, capture_window_and_statistic_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_TRX_CALIBRATION, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_TRX_CALIBRATION_AUTO_CFG_ID_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);\n");
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_alloc_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_alloc_cfg cfg;         /**< declare main API struct */
+    bcmolt_xgpon_alloc_key key = { };   /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_alloc_cfg cfg;\n");
+    bcmcli_log("bcmolt_xgpon_alloc_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ALLOC, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ALLOC_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "alloc_id");
+    if (cli_parm != NULL)
+    {
+        key.alloc_id = (bcmolt_xgpon_alloc_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "alloc_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.alloc_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ALLOC, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ALLOC_KEY_ID_ALLOC_ID, &key.alloc_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, xgpon_alloc, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, xgpon_alloc, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "state");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_alloc, state);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_alloc, state);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "sla");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_alloc, sla);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_alloc, sla);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_alloc, onu_id);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_alloc, onu_id);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "collect_stats");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_alloc, collect_stats);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_alloc, collect_stats);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_alloc, state) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_alloc, sla) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_alloc, onu_id) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_alloc, collect_stats))
+    {
+        BCMOLT_CFG_PROP_GET(&cfg, xgpon_alloc, all_properties);
+        bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_alloc, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_get(device_id, &cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_alloc_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_alloc_cfg cfg;         /**< declare main API struct */
+    bcmolt_xgpon_alloc_key key = { };   /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_alloc_cfg cfg;\n");
+    bcmcli_log("bcmolt_xgpon_alloc_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ALLOC, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ALLOC_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "alloc_id");
+    if (cli_parm != NULL)
+    {
+        key.alloc_id = (bcmolt_xgpon_alloc_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "alloc_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.alloc_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ALLOC, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ALLOC_KEY_ID_ALLOC_ID, &key.alloc_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, xgpon_alloc, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, xgpon_alloc, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "sla.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_pon_alloc_sla val = { };
+        cli_parm = bcmcli_find_named_parm(session, "sla.cbr_rt_bw");
+        if (cli_parm != NULL)
+        {
+            val.cbr_rt_bw = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "sla.cbr_rt_bw is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "sla.cbr_nrt_bw");
+        if (cli_parm != NULL)
+        {
+            val.cbr_nrt_bw = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "sla.cbr_nrt_bw is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "sla.guaranteed_bw");
+        if (cli_parm != NULL)
+        {
+            val.guaranteed_bw = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "sla.guaranteed_bw is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "sla.maximum_bw");
+        if (cli_parm != NULL)
+        {
+            val.maximum_bw = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "sla.maximum_bw is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "sla.additional_bw_eligibility");
+        if (cli_parm != NULL)
+        {
+            val.additional_bw_eligibility = (bcmolt_additional_bw_eligibility) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "sla.additional_bw_eligibility is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "sla.cbr_rt_compensation");
+        if (cli_parm != NULL)
+        {
+            val.cbr_rt_compensation = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "sla.cbr_rt_compensation is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "sla.cbr_rt_ap_index");
+        if (cli_parm != NULL)
+        {
+            val.cbr_rt_ap_index = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "sla.cbr_rt_ap_index is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "sla.cbr_nrt_ap_index");
+        if (cli_parm != NULL)
+        {
+            val.cbr_nrt_ap_index = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "sla.cbr_nrt_ap_index is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "sla.alloc_type");
+        if (cli_parm != NULL)
+        {
+            val.alloc_type = (bcmolt_alloc_type) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "sla.alloc_type is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "sla.weight");
+        if (cli_parm != NULL)
+        {
+            val.weight = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "sla.weight is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "sla.priority");
+        if (cli_parm != NULL)
+        {
+            val.priority = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "sla.priority is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_alloc, sla, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_pon_alloc_sla val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ALLOC, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_ALLOC_CFG_ID_SLA, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_alloc, sla, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_onu_id val;
+        val = (bcmolt_xgpon_onu_id) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_alloc, onu_id, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_alloc, onu_id, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ALLOC, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_ALLOC_CFG_ID_ONU_ID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "collect_stats");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_alloc, collect_stats, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_alloc, collect_stats, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ALLOC, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_ALLOC_CFG_ID_COLLECT_STATS, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_set(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_set(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_alloc_cfg_clear(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_alloc_cfg cfg;         /**< declare main API struct */
+    bcmolt_xgpon_alloc_key key = { };   /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_alloc_cfg cfg;\n");
+    bcmcli_log("bcmolt_xgpon_alloc_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_clear");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ALLOC, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ALLOC_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "alloc_id");
+    if (cli_parm != NULL)
+    {
+        key.alloc_id = (bcmolt_xgpon_alloc_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "alloc_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.alloc_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ALLOC, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ALLOC_KEY_ID_ALLOC_ID, &key.alloc_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, xgpon_alloc, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, xgpon_alloc, key);\n");
+
+    /* call API */
+    err = bcmolt_cfg_clear(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_clear(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_alloc_cfg_get_multi(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_alloc_cfg cfg;         /**< declare main API struct */
+    bcmolt_xgpon_alloc_key key = { };   /**< declare key */
+    bcmolt_msg_set *msg_set = NULL;     /**< declare message set */
+    uint32_t max_msgs;                  /**< declare max number of msgs to get */
+    bcmos_bool invert_filter;           /**< declare filter invert flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_alloc_cfg cfg;\n");
+    bcmcli_log("bcmolt_xgpon_alloc_key key = {  };\n");
+    bcmcli_log("bcmolt_msg_set* msg_set = NULL;\n");
+    bcmcli_log("uint32_t max_msgs;\n");
+    bcmcli_log("bcmos_bool invert_filter;\n");
+    apicli_print_start(session, "bcmolt_cfg_get_multi");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ALLOC, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ALLOC_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "alloc_id");
+    if (cli_parm != NULL)
+    {
+        key.alloc_id = (bcmolt_xgpon_alloc_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "alloc_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.alloc_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ALLOC, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ALLOC_KEY_ID_ALLOC_ID, &key.alloc_id);
+    bcmcli_log(";\n");
+
+    /* set max number of msgs from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "max_msgs");
+    if (cli_parm != NULL)
+    {
+        max_msgs = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "max_msgs is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("max_msgs = %d;\n", max_msgs);
+
+    /* set filter invert flag from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "filter_invert");
+    if (cli_parm != NULL)
+    {
+        invert_filter = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "filter_invert is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("invert_filter = %s;\n", (invert_filter) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* allocate message set */
+    err = apicli_msg_set_alloc(byte_pool, BCMOLT_OBJ_ID_XGPON_ALLOC, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    bcmcli_log("bcmolt_msg_set_alloc(BCMOLT_OBJ_ID_XGPON_ALLOC, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, xgpon_alloc, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, xgpon_alloc, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "filter.state");
+    if (cli_parm != NULL)
+    {
+        bcmolt_alloc_state val;
+        val = (bcmolt_alloc_state) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_alloc, state, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_alloc, state, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ALLOC, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_ALLOC_CFG_ID_STATE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "state");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_alloc, state);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_alloc, state);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.sla.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_pon_alloc_sla val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.sla.cbr_rt_bw");
+        if (cli_parm != NULL)
+        {
+            val.cbr_rt_bw = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.sla.cbr_rt_bw is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.sla.cbr_nrt_bw");
+        if (cli_parm != NULL)
+        {
+            val.cbr_nrt_bw = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.sla.cbr_nrt_bw is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.sla.guaranteed_bw");
+        if (cli_parm != NULL)
+        {
+            val.guaranteed_bw = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.sla.guaranteed_bw is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.sla.maximum_bw");
+        if (cli_parm != NULL)
+        {
+            val.maximum_bw = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.sla.maximum_bw is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.sla.additional_bw_eligibility");
+        if (cli_parm != NULL)
+        {
+            val.additional_bw_eligibility = (bcmolt_additional_bw_eligibility) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.sla.additional_bw_eligibility is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.sla.cbr_rt_compensation");
+        if (cli_parm != NULL)
+        {
+            val.cbr_rt_compensation = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.sla.cbr_rt_compensation is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.sla.cbr_rt_ap_index");
+        if (cli_parm != NULL)
+        {
+            val.cbr_rt_ap_index = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.sla.cbr_rt_ap_index is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.sla.cbr_nrt_ap_index");
+        if (cli_parm != NULL)
+        {
+            val.cbr_nrt_ap_index = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.sla.cbr_nrt_ap_index is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.sla.alloc_type");
+        if (cli_parm != NULL)
+        {
+            val.alloc_type = (bcmolt_alloc_type) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.sla.alloc_type is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.sla.weight");
+        if (cli_parm != NULL)
+        {
+            val.weight = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.sla.weight is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.sla.priority");
+        if (cli_parm != NULL)
+        {
+            val.priority = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.sla.priority is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_alloc, sla, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_pon_alloc_sla val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ALLOC, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_ALLOC_CFG_ID_SLA, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_alloc, sla, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "sla");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_alloc, sla);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_alloc, sla);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.onu_id");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_onu_id val;
+        val = (bcmolt_xgpon_onu_id) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_alloc, onu_id, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_alloc, onu_id, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ALLOC, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_ALLOC_CFG_ID_ONU_ID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_alloc, onu_id);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_alloc, onu_id);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.collect_stats");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_alloc, collect_stats, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_alloc, collect_stats, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ALLOC, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_ALLOC_CFG_ID_COLLECT_STATS, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "collect_stats");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_alloc, collect_stats);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_alloc, collect_stats);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_alloc, state) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_alloc, sla) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_alloc, onu_id) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_alloc, collect_stats))
+    {
+        BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_alloc, all_properties);
+        bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_alloc, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);
+    bcmcli_log("bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_alloc_oper_get_stats_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_alloc_get_stats oper;  /**< declare main API struct */
+    bcmolt_xgpon_alloc_key key = { };   /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_alloc_get_stats oper;\n");
+    bcmcli_log("bcmolt_xgpon_alloc_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ALLOC, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ALLOC_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "alloc_id");
+    if (cli_parm != NULL)
+    {
+        key.alloc_id = (bcmolt_xgpon_alloc_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "alloc_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.alloc_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ALLOC, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ALLOC_KEY_ID_ALLOC_ID, &key.alloc_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, xgpon_alloc, get_stats, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, xgpon_alloc, get_stats, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "num_of_cycles");
+    if (cli_parm != NULL)
+    {
+        uint32_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_OPER_PROP_SET(&oper, xgpon_alloc, get_stats, num_of_cycles, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, xgpon_alloc, get_stats, num_of_cycles, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ALLOC, BCMOLT_MGT_GROUP_OPER, BCMOLT_XGPON_ALLOC_OPER_ID_GET_STATS, BCMOLT_XGPON_ALLOC_GET_STATS_ID_NUM_OF_CYCLES, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_alloc_oper_set_state_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_alloc_set_state oper;  /**< declare main API struct */
+    bcmolt_xgpon_alloc_key key = { };   /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_alloc_set_state oper;\n");
+    bcmcli_log("bcmolt_xgpon_alloc_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ALLOC, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ALLOC_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "alloc_id");
+    if (cli_parm != NULL)
+    {
+        key.alloc_id = (bcmolt_xgpon_alloc_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "alloc_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.alloc_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ALLOC, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ALLOC_KEY_ID_ALLOC_ID, &key.alloc_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, xgpon_alloc, set_state, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, xgpon_alloc, set_state, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "state");
+    if (cli_parm != NULL)
+    {
+        bcmolt_alloc_operation val;
+        val = (bcmolt_alloc_operation) cli_parm->value.enum_val;
+        BCMOLT_OPER_PROP_SET(&oper, xgpon_alloc, set_state, state, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, xgpon_alloc, set_state, state, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ALLOC, BCMOLT_MGT_GROUP_OPER, BCMOLT_XGPON_ALLOC_OPER_ID_SET_STATE, BCMOLT_XGPON_ALLOC_SET_STATE_ID_STATE, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_alloc_stat_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_alloc_stat stat;       /**< declare main API struct */
+    bcmolt_xgpon_alloc_key key = { };   /**< declare key */
+    bcmos_bool clear_on_read;           /**< declare 'clear on read' flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_alloc_stat stat;\n");
+    bcmcli_log("bcmolt_xgpon_alloc_key key = {  };\n");
+    bcmcli_log("bcmos_bool clear_on_read;\n");
+    apicli_print_start(session, "bcmolt_stat_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ALLOC, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ALLOC_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "alloc_id");
+    if (cli_parm != NULL)
+    {
+        key.alloc_id = (bcmolt_xgpon_alloc_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "alloc_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.alloc_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ALLOC, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ALLOC_KEY_ID_ALLOC_ID, &key.alloc_id);
+    bcmcli_log(";\n");
+
+    /* set stat flags from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "clear");
+    if (cli_parm != NULL)
+    {
+        clear_on_read = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "clear is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("clear_on_read = %s;\n", (clear_on_read) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* init the API struct */
+    BCMOLT_STAT_INIT(&stat, xgpon_alloc, key);
+    bcmcli_log("BCMOLT_STAT_INIT(&stat, xgpon_alloc, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "rx_bytes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_alloc, rx_bytes);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_alloc, rx_bytes);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_alloc, rx_bytes))
+    {
+        BCMOLT_STAT_PROP_GET(&stat, xgpon_alloc, all_properties);
+        bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_alloc, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_stat_get(device_id, &stat.hdr, clear_on_read);
+    bcmcli_log("bcmolt_stat_get(device_id, &stat.hdr, clear_on_read);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &stat.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, stat.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_alloc_stat_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_alloc_stat_cfg stat_cfg;   /**< declare main API struct */
+    bcmolt_xgpon_alloc_key key = { };       /**< declare key */
+    bcmolt_xgpon_alloc_stat_id stat_id;     /**< declare stat ID */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_alloc_stat_cfg stat_cfg;\n");
+    bcmcli_log("bcmolt_xgpon_alloc_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_stat_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ALLOC, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ALLOC_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "alloc_id");
+    if (cli_parm != NULL)
+    {
+        key.alloc_id = (bcmolt_xgpon_alloc_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "alloc_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.alloc_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ALLOC, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ALLOC_KEY_ID_ALLOC_ID, &key.alloc_id);
+    bcmcli_log(";\n");
+
+    /* set stat ID from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "sub");
+    if (cli_parm != NULL)
+    {
+        stat_id = (bcmolt_xgpon_alloc_stat_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    /* init the API struct */
+    switch (stat_id)
+    {
+        case BCMOLT_XGPON_ALLOC_STAT_ID_RX_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_alloc, rx_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_alloc, rx_bytes, key);\n");
+            break;
+        default:
+            apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+            return BCM_ERR_RANGE;
+    }
+
+    /* call API */
+    err = bcmolt_stat_cfg_get(device_id, &stat_cfg.hdr);
+    bcmcli_log("bcmolt_stat_cfg_get(device_id, &stat_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &stat_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, stat_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_alloc_stat_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_alloc_stat_cfg stat_cfg;   /**< declare main API struct */
+    bcmolt_xgpon_alloc_key key = { };       /**< declare key */
+    bcmolt_xgpon_alloc_stat_id stat_id;     /**< declare stat ID */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_alloc_stat_cfg stat_cfg;\n");
+    bcmcli_log("bcmolt_xgpon_alloc_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_stat_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ALLOC, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ALLOC_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "alloc_id");
+    if (cli_parm != NULL)
+    {
+        key.alloc_id = (bcmolt_xgpon_alloc_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "alloc_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.alloc_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ALLOC, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ALLOC_KEY_ID_ALLOC_ID, &key.alloc_id);
+    bcmcli_log(";\n");
+
+    /* set stat ID from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "sub");
+    if (cli_parm != NULL)
+    {
+        stat_id = (bcmolt_xgpon_alloc_stat_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    /* init the API struct */
+    switch (stat_id)
+    {
+        case BCMOLT_XGPON_ALLOC_STAT_ID_RX_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_alloc, rx_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_alloc, rx_bytes, key);\n");
+            break;
+        default:
+            apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+            return BCM_ERR_RANGE;
+    }
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_stat_alarm_config val = { };
+        cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.trigger.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.type");
+            if (cli_parm != NULL)
+            {
+                val.trigger.type = (bcmolt_stat_condition_type) cli_parm->value.enum_val;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.type is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            switch (val.trigger.type)
+            {
+                case BCMOLT_STAT_CONDITION_TYPE_RATE_THRESHOLD:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.rising");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_threshold.rising = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.rising is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.falling");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_threshold.falling = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.falling is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_RATE_RANGE:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.upper");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_range.upper = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.upper is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.lower");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_range.lower = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.lower is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_VALUE_THRESHOLD:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.limit");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.value_threshold.limit = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.limit is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_NONE:
+                    break;
+                default:
+                    apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+                    return BCM_ERR_RANGE;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.soak.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "cfg.soak.active_soak_time");
+            if (cli_parm != NULL)
+            {
+                val.soak.active_soak_time = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak.active_soak_time is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "cfg.soak.clear_soak_time");
+            if (cli_parm != NULL)
+            {
+                val.soak.clear_soak_time = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak.clear_soak_time is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_STAT_CFG_PROP_SET(&stat_cfg, xgpon_alloc, cfg, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_stat_alarm_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ALLOC, BCMOLT_MGT_GROUP_STAT_CFG, 0, BCMOLT_XGPON_ALLOC_STAT_CFG_ID_CFG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_STAT_CFG_PROP_SET(&stat_cfg, xgpon_alloc, cfg, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_stat_cfg_set(device_id, &stat_cfg.hdr);
+    bcmcli_log("bcmolt_stat_cfg_set(device_id, &stat_cfg.hdr);\n");
+    apicli_print_complete(session, err, stat_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_alloc_auto_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_alloc_auto_cfg auto_cfg;   /**< declare main API struct */
+    bcmolt_xgpon_alloc_key key = { };       /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_alloc_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_xgpon_alloc_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_get");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, xgpon_alloc, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, xgpon_alloc, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "configuration_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_alloc, configuration_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_alloc, configuration_completed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "get_alloc_stats_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_alloc, get_alloc_stats_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_alloc, get_alloc_stats_completed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_cleared");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_alloc, stat_alarm_cleared);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_alloc, stat_alarm_cleared);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_raised");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_alloc, stat_alarm_raised);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_alloc, stat_alarm_raised);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_alloc, configuration_completed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_alloc, get_alloc_stats_completed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_alloc, stat_alarm_cleared) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_alloc, stat_alarm_raised))
+    {
+        BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_alloc, all_properties);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_alloc, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &auto_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_alloc_auto_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_alloc_auto_cfg auto_cfg;   /**< declare main API struct */
+    bcmolt_xgpon_alloc_key key = { };       /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_alloc_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_xgpon_alloc_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_set");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, xgpon_alloc, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, xgpon_alloc, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "configuration_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_alloc, configuration_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_alloc, configuration_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ALLOC, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_ALLOC_AUTO_CFG_ID_CONFIGURATION_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "get_alloc_stats_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_alloc, get_alloc_stats_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_alloc, get_alloc_stats_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ALLOC, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_ALLOC_AUTO_CFG_ID_GET_ALLOC_STATS_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_cleared");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_alloc, stat_alarm_cleared, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_alloc, stat_alarm_cleared, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ALLOC, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_ALLOC_AUTO_CFG_ID_STAT_ALARM_CLEARED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_raised");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_alloc, stat_alarm_raised, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_alloc, stat_alarm_raised, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ALLOC, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_ALLOC_AUTO_CFG_ID_STAT_ALARM_RAISED, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);\n");
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_gem_port_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_gem_port_cfg cfg;          /**< declare main API struct */
+    bcmolt_xgpon_gem_port_key key = { };    /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_gem_port_cfg cfg;\n");
+    bcmcli_log("bcmolt_xgpon_gem_port_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_GEM_PORT, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_GEM_PORT_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "gem_port_id");
+    if (cli_parm != NULL)
+    {
+        key.gem_port_id = (bcmolt_xgpon_gem_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "gem_port_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.gem_port_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_GEM_PORT, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_GEM_PORT_KEY_ID_GEM_PORT_ID, &key.gem_port_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, xgpon_gem_port, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, xgpon_gem_port, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "configuration");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_gem_port, configuration);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_gem_port, configuration);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_gem_port, onu_id);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_gem_port, onu_id);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "gem_port_state");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_gem_port, gem_port_state);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_gem_port, gem_port_state);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "encryption_mode");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_gem_port, encryption_mode);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_gem_port, encryption_mode);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "upstream_destination_queue");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_gem_port, upstream_destination_queue);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_gem_port, upstream_destination_queue);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "control");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_gem_port, control);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_gem_port, control);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_gem_port, configuration) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_gem_port, onu_id) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_gem_port, gem_port_state) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_gem_port, encryption_mode) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_gem_port, upstream_destination_queue) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_gem_port, control))
+    {
+        BCMOLT_CFG_PROP_GET(&cfg, xgpon_gem_port, all_properties);
+        bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_gem_port, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_get(device_id, &cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_gem_port_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_gem_port_cfg cfg;          /**< declare main API struct */
+    bcmolt_xgpon_gem_port_key key = { };    /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_gem_port_cfg cfg;\n");
+    bcmcli_log("bcmolt_xgpon_gem_port_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_GEM_PORT, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_GEM_PORT_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "gem_port_id");
+    if (cli_parm != NULL)
+    {
+        key.gem_port_id = (bcmolt_xgpon_gem_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "gem_port_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.gem_port_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_GEM_PORT, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_GEM_PORT_KEY_ID_GEM_PORT_ID, &key.gem_port_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, xgpon_gem_port, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, xgpon_gem_port, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "configuration.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gem_port_configuration val = { };
+        cli_parm = bcmcli_find_named_parm(session, "configuration.direction");
+        if (cli_parm != NULL)
+        {
+            val.direction = (bcmolt_gem_port_direction) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "configuration.direction is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "configuration.type");
+        if (cli_parm != NULL)
+        {
+            val.type = (bcmolt_gem_port_type) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "configuration.type is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_gem_port, configuration, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_gem_port_configuration val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_GEM_PORT, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_GEM_PORT_CFG_ID_CONFIGURATION, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_gem_port, configuration, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_onu_id val;
+        val = (bcmolt_xgpon_onu_id) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_gem_port, onu_id, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_gem_port, onu_id, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_GEM_PORT, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_GEM_PORT_CFG_ID_ONU_ID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "encryption_mode");
+    if (cli_parm != NULL)
+    {
+        bcmolt_control_state val;
+        val = (bcmolt_control_state) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_gem_port, encryption_mode, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_gem_port, encryption_mode, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_GEM_PORT, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_GEM_PORT_CFG_ID_ENCRYPTION_MODE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "upstream_destination_queue");
+    if (cli_parm != NULL)
+    {
+        bcmolt_us_gem_port_destination val;
+        val = (bcmolt_us_gem_port_destination) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_gem_port, upstream_destination_queue, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_gem_port, upstream_destination_queue, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_GEM_PORT, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_GEM_PORT_CFG_ID_UPSTREAM_DESTINATION_QUEUE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "control");
+    if (cli_parm != NULL)
+    {
+        bcmolt_control_state val;
+        val = (bcmolt_control_state) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_gem_port, control, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_gem_port, control, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_GEM_PORT, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_GEM_PORT_CFG_ID_CONTROL, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_set(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_set(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_gem_port_cfg_clear(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_gem_port_cfg cfg;          /**< declare main API struct */
+    bcmolt_xgpon_gem_port_key key = { };    /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_gem_port_cfg cfg;\n");
+    bcmcli_log("bcmolt_xgpon_gem_port_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_clear");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_GEM_PORT, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_GEM_PORT_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "gem_port_id");
+    if (cli_parm != NULL)
+    {
+        key.gem_port_id = (bcmolt_xgpon_gem_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "gem_port_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.gem_port_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_GEM_PORT, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_GEM_PORT_KEY_ID_GEM_PORT_ID, &key.gem_port_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, xgpon_gem_port, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, xgpon_gem_port, key);\n");
+
+    /* call API */
+    err = bcmolt_cfg_clear(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_clear(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_gem_port_cfg_get_multi(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_gem_port_cfg cfg;          /**< declare main API struct */
+    bcmolt_xgpon_gem_port_key key = { };    /**< declare key */
+    bcmolt_msg_set *msg_set = NULL;         /**< declare message set */
+    uint32_t max_msgs;                      /**< declare max number of msgs to get */
+    bcmos_bool invert_filter;               /**< declare filter invert flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_gem_port_cfg cfg;\n");
+    bcmcli_log("bcmolt_xgpon_gem_port_key key = {  };\n");
+    bcmcli_log("bcmolt_msg_set* msg_set = NULL;\n");
+    bcmcli_log("uint32_t max_msgs;\n");
+    bcmcli_log("bcmos_bool invert_filter;\n");
+    apicli_print_start(session, "bcmolt_cfg_get_multi");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_GEM_PORT, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_GEM_PORT_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "gem_port_id");
+    if (cli_parm != NULL)
+    {
+        key.gem_port_id = (bcmolt_xgpon_gem_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "gem_port_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.gem_port_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_GEM_PORT, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_GEM_PORT_KEY_ID_GEM_PORT_ID, &key.gem_port_id);
+    bcmcli_log(";\n");
+
+    /* set max number of msgs from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "max_msgs");
+    if (cli_parm != NULL)
+    {
+        max_msgs = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "max_msgs is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("max_msgs = %d;\n", max_msgs);
+
+    /* set filter invert flag from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "filter_invert");
+    if (cli_parm != NULL)
+    {
+        invert_filter = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "filter_invert is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("invert_filter = %s;\n", (invert_filter) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* allocate message set */
+    err = apicli_msg_set_alloc(byte_pool, BCMOLT_OBJ_ID_XGPON_GEM_PORT, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    bcmcli_log("bcmolt_msg_set_alloc(BCMOLT_OBJ_ID_XGPON_GEM_PORT, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, xgpon_gem_port, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, xgpon_gem_port, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.configuration.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gem_port_configuration val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.configuration.direction");
+        if (cli_parm != NULL)
+        {
+            val.direction = (bcmolt_gem_port_direction) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.configuration.direction is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.configuration.type");
+        if (cli_parm != NULL)
+        {
+            val.type = (bcmolt_gem_port_type) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.configuration.type is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_gem_port, configuration, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_gem_port_configuration val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_GEM_PORT, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_GEM_PORT_CFG_ID_CONFIGURATION, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_gem_port, configuration, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "configuration");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_gem_port, configuration);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_gem_port, configuration);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.onu_id");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_onu_id val;
+        val = (bcmolt_xgpon_onu_id) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_gem_port, onu_id, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_gem_port, onu_id, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_GEM_PORT, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_GEM_PORT_CFG_ID_ONU_ID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_gem_port, onu_id);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_gem_port, onu_id);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.gem_port_state");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_gem_port_state val;
+        val = (bcmolt_xgpon_gem_port_state) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_gem_port, gem_port_state, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_gem_port, gem_port_state, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_GEM_PORT, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_GEM_PORT_CFG_ID_GEM_PORT_STATE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "gem_port_state");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_gem_port, gem_port_state);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_gem_port, gem_port_state);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.encryption_mode");
+    if (cli_parm != NULL)
+    {
+        bcmolt_control_state val;
+        val = (bcmolt_control_state) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_gem_port, encryption_mode, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_gem_port, encryption_mode, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_GEM_PORT, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_GEM_PORT_CFG_ID_ENCRYPTION_MODE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "encryption_mode");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_gem_port, encryption_mode);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_gem_port, encryption_mode);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.upstream_destination_queue");
+    if (cli_parm != NULL)
+    {
+        bcmolt_us_gem_port_destination val;
+        val = (bcmolt_us_gem_port_destination) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_gem_port, upstream_destination_queue, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_gem_port, upstream_destination_queue, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_GEM_PORT, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_GEM_PORT_CFG_ID_UPSTREAM_DESTINATION_QUEUE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "upstream_destination_queue");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_gem_port, upstream_destination_queue);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_gem_port, upstream_destination_queue);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.control");
+    if (cli_parm != NULL)
+    {
+        bcmolt_control_state val;
+        val = (bcmolt_control_state) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_gem_port, control, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_gem_port, control, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_GEM_PORT, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_GEM_PORT_CFG_ID_CONTROL, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "control");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_gem_port, control);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_gem_port, control);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_gem_port, configuration) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_gem_port, onu_id) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_gem_port, gem_port_state) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_gem_port, encryption_mode) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_gem_port, upstream_destination_queue) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_gem_port, control))
+    {
+        BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_gem_port, all_properties);
+        bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_gem_port, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);
+    bcmcli_log("bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_gem_port_stat_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_gem_port_stat stat;        /**< declare main API struct */
+    bcmolt_xgpon_gem_port_key key = { };    /**< declare key */
+    bcmos_bool clear_on_read;               /**< declare 'clear on read' flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_gem_port_stat stat;\n");
+    bcmcli_log("bcmolt_xgpon_gem_port_key key = {  };\n");
+    bcmcli_log("bcmos_bool clear_on_read;\n");
+    apicli_print_start(session, "bcmolt_stat_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_GEM_PORT, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_GEM_PORT_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "gem_port_id");
+    if (cli_parm != NULL)
+    {
+        key.gem_port_id = (bcmolt_xgpon_gem_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "gem_port_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.gem_port_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_GEM_PORT, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_GEM_PORT_KEY_ID_GEM_PORT_ID, &key.gem_port_id);
+    bcmcli_log(";\n");
+
+    /* set stat flags from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "clear");
+    if (cli_parm != NULL)
+    {
+        clear_on_read = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "clear is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("clear_on_read = %s;\n", (clear_on_read) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* init the API struct */
+    BCMOLT_STAT_INIT(&stat, xgpon_gem_port, key);
+    bcmcli_log("BCMOLT_STAT_INIT(&stat, xgpon_gem_port, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "tx_bytes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_gem_port, tx_bytes);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_gem_port, tx_bytes);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_packets");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_gem_port, tx_packets);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_gem_port, tx_packets);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_packets");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_gem_port, rx_packets);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_gem_port, rx_packets);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_bytes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_gem_port, rx_bytes);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_gem_port, rx_bytes);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_gem_port, tx_bytes) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_gem_port, tx_packets) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_gem_port, rx_packets) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_gem_port, rx_bytes))
+    {
+        BCMOLT_STAT_PROP_GET(&stat, xgpon_gem_port, all_properties);
+        bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_gem_port, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_stat_get(device_id, &stat.hdr, clear_on_read);
+    bcmcli_log("bcmolt_stat_get(device_id, &stat.hdr, clear_on_read);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &stat.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, stat.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_gem_port_stat_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_gem_port_stat_cfg stat_cfg;    /**< declare main API struct */
+    bcmolt_xgpon_gem_port_key key = { };        /**< declare key */
+    bcmolt_xgpon_gem_port_stat_id stat_id;      /**< declare stat ID */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_gem_port_stat_cfg stat_cfg;\n");
+    bcmcli_log("bcmolt_xgpon_gem_port_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_stat_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_GEM_PORT, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_GEM_PORT_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "gem_port_id");
+    if (cli_parm != NULL)
+    {
+        key.gem_port_id = (bcmolt_xgpon_gem_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "gem_port_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.gem_port_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_GEM_PORT, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_GEM_PORT_KEY_ID_GEM_PORT_ID, &key.gem_port_id);
+    bcmcli_log(";\n");
+
+    /* set stat ID from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "sub");
+    if (cli_parm != NULL)
+    {
+        stat_id = (bcmolt_xgpon_gem_port_stat_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    /* init the API struct */
+    switch (stat_id)
+    {
+        case BCMOLT_XGPON_GEM_PORT_STAT_ID_TX_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_gem_port, tx_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_gem_port, tx_bytes, key);\n");
+            break;
+        case BCMOLT_XGPON_GEM_PORT_STAT_ID_TX_PACKETS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_gem_port, tx_packets, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_gem_port, tx_packets, key);\n");
+            break;
+        case BCMOLT_XGPON_GEM_PORT_STAT_ID_RX_PACKETS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_gem_port, rx_packets, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_gem_port, rx_packets, key);\n");
+            break;
+        case BCMOLT_XGPON_GEM_PORT_STAT_ID_RX_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_gem_port, rx_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_gem_port, rx_bytes, key);\n");
+            break;
+        default:
+            apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+            return BCM_ERR_RANGE;
+    }
+
+    /* call API */
+    err = bcmolt_stat_cfg_get(device_id, &stat_cfg.hdr);
+    bcmcli_log("bcmolt_stat_cfg_get(device_id, &stat_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &stat_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, stat_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_gem_port_stat_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_gem_port_stat_cfg stat_cfg;    /**< declare main API struct */
+    bcmolt_xgpon_gem_port_key key = { };        /**< declare key */
+    bcmolt_xgpon_gem_port_stat_id stat_id;      /**< declare stat ID */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_gem_port_stat_cfg stat_cfg;\n");
+    bcmcli_log("bcmolt_xgpon_gem_port_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_stat_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_GEM_PORT, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_GEM_PORT_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "gem_port_id");
+    if (cli_parm != NULL)
+    {
+        key.gem_port_id = (bcmolt_xgpon_gem_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "gem_port_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.gem_port_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_GEM_PORT, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_GEM_PORT_KEY_ID_GEM_PORT_ID, &key.gem_port_id);
+    bcmcli_log(";\n");
+
+    /* set stat ID from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "sub");
+    if (cli_parm != NULL)
+    {
+        stat_id = (bcmolt_xgpon_gem_port_stat_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    /* init the API struct */
+    switch (stat_id)
+    {
+        case BCMOLT_XGPON_GEM_PORT_STAT_ID_TX_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_gem_port, tx_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_gem_port, tx_bytes, key);\n");
+            break;
+        case BCMOLT_XGPON_GEM_PORT_STAT_ID_TX_PACKETS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_gem_port, tx_packets, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_gem_port, tx_packets, key);\n");
+            break;
+        case BCMOLT_XGPON_GEM_PORT_STAT_ID_RX_PACKETS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_gem_port, rx_packets, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_gem_port, rx_packets, key);\n");
+            break;
+        case BCMOLT_XGPON_GEM_PORT_STAT_ID_RX_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_gem_port, rx_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_gem_port, rx_bytes, key);\n");
+            break;
+        default:
+            apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+            return BCM_ERR_RANGE;
+    }
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_stat_alarm_config val = { };
+        cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.trigger.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.type");
+            if (cli_parm != NULL)
+            {
+                val.trigger.type = (bcmolt_stat_condition_type) cli_parm->value.enum_val;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.type is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            switch (val.trigger.type)
+            {
+                case BCMOLT_STAT_CONDITION_TYPE_RATE_THRESHOLD:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.rising");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_threshold.rising = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.rising is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.falling");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_threshold.falling = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.falling is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_RATE_RANGE:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.upper");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_range.upper = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.upper is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.lower");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_range.lower = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.lower is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_VALUE_THRESHOLD:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.limit");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.value_threshold.limit = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.limit is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_NONE:
+                    break;
+                default:
+                    apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+                    return BCM_ERR_RANGE;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.soak.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "cfg.soak.active_soak_time");
+            if (cli_parm != NULL)
+            {
+                val.soak.active_soak_time = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak.active_soak_time is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "cfg.soak.clear_soak_time");
+            if (cli_parm != NULL)
+            {
+                val.soak.clear_soak_time = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak.clear_soak_time is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_STAT_CFG_PROP_SET(&stat_cfg, xgpon_gem_port, cfg, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_stat_alarm_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_GEM_PORT, BCMOLT_MGT_GROUP_STAT_CFG, 0, BCMOLT_XGPON_GEM_PORT_STAT_CFG_ID_CFG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_STAT_CFG_PROP_SET(&stat_cfg, xgpon_gem_port, cfg, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_stat_cfg_set(device_id, &stat_cfg.hdr);
+    bcmcli_log("bcmolt_stat_cfg_set(device_id, &stat_cfg.hdr);\n");
+    apicli_print_complete(session, err, stat_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_gem_port_auto_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_gem_port_auto_cfg auto_cfg;    /**< declare main API struct */
+    bcmolt_xgpon_gem_port_key key = { };        /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_gem_port_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_xgpon_gem_port_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_get");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, xgpon_gem_port, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, xgpon_gem_port, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_cleared");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_gem_port, stat_alarm_cleared);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_gem_port, stat_alarm_cleared);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_raised");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_gem_port, stat_alarm_raised);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_gem_port, stat_alarm_raised);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_gem_port, stat_alarm_cleared) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_gem_port, stat_alarm_raised))
+    {
+        BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_gem_port, all_properties);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_gem_port, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &auto_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_gem_port_auto_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_gem_port_auto_cfg auto_cfg;    /**< declare main API struct */
+    bcmolt_xgpon_gem_port_key key = { };        /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_gem_port_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_xgpon_gem_port_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_set");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, xgpon_gem_port, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, xgpon_gem_port, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_cleared");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_gem_port, stat_alarm_cleared, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_gem_port, stat_alarm_cleared, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_GEM_PORT, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_GEM_PORT_AUTO_CFG_ID_STAT_ALARM_CLEARED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_raised");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_gem_port, stat_alarm_raised, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_gem_port, stat_alarm_raised, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_GEM_PORT, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_GEM_PORT_AUTO_CFG_ID_STAT_ALARM_RAISED, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);\n");
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_iwf_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_iwf_cfg cfg;       /**< declare main API struct */
+    bcmolt_xgpon_iwf_key key = { }; /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_iwf_cfg cfg;\n");
+    bcmcli_log("bcmolt_xgpon_iwf_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_IWF, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_IWF_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, xgpon_iwf, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, xgpon_iwf, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "us_otag_direct_tpid");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_iwf, us_otag_direct_tpid);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_iwf, us_otag_direct_tpid);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ds_tpid");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_iwf, ds_tpid);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_iwf, ds_tpid);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_iwf, us_otag_direct_tpid) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_iwf, ds_tpid))
+    {
+        BCMOLT_CFG_PROP_GET(&cfg, xgpon_iwf, all_properties);
+        bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_iwf, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_get(device_id, &cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_iwf_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_iwf_cfg cfg;       /**< declare main API struct */
+    bcmolt_xgpon_iwf_key key = { }; /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_iwf_cfg cfg;\n");
+    bcmcli_log("bcmolt_xgpon_iwf_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_IWF, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_IWF_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, xgpon_iwf, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, xgpon_iwf, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "us_otag_direct_tpid");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_iwf, us_otag_direct_tpid, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_iwf, us_otag_direct_tpid, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_IWF, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_IWF_CFG_ID_US_OTAG_DIRECT_TPID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "ds_tpid.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_arr_u16_5_hex val = { };
+        cli_parm = bcmcli_find_named_parm(session, "ds_tpid.arr");
+        if (cli_parm != NULL)
+        {
+            int32_t i0;
+            if (cli_parm->array_size != 5)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "array ds_tpid.arr must have 5 elements\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i0 = 0; i0 < 5; i0++)
+            {
+                val.arr[i0] = cli_parm->values[i0].unumber;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ds_tpid.arr is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_iwf, ds_tpid, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_arr_u16_5_hex val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_IWF, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_IWF_CFG_ID_DS_TPID, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_iwf, ds_tpid, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_set(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_set(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_iwf_cfg_clear(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_iwf_cfg cfg;       /**< declare main API struct */
+    bcmolt_xgpon_iwf_key key = { }; /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_iwf_cfg cfg;\n");
+    bcmcli_log("bcmolt_xgpon_iwf_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_clear");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_IWF, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_IWF_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, xgpon_iwf, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, xgpon_iwf, key);\n");
+
+    /* call API */
+    err = bcmolt_cfg_clear(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_clear(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_iwf_cfg_get_multi(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_iwf_cfg cfg;       /**< declare main API struct */
+    bcmolt_xgpon_iwf_key key = { }; /**< declare key */
+    bcmolt_msg_set *msg_set = NULL; /**< declare message set */
+    uint32_t max_msgs;              /**< declare max number of msgs to get */
+    bcmos_bool invert_filter;       /**< declare filter invert flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_iwf_cfg cfg;\n");
+    bcmcli_log("bcmolt_xgpon_iwf_key key = {  };\n");
+    bcmcli_log("bcmolt_msg_set* msg_set = NULL;\n");
+    bcmcli_log("uint32_t max_msgs;\n");
+    bcmcli_log("bcmos_bool invert_filter;\n");
+    apicli_print_start(session, "bcmolt_cfg_get_multi");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_IWF, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_IWF_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* set max number of msgs from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "max_msgs");
+    if (cli_parm != NULL)
+    {
+        max_msgs = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "max_msgs is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("max_msgs = %d;\n", max_msgs);
+
+    /* set filter invert flag from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "filter_invert");
+    if (cli_parm != NULL)
+    {
+        invert_filter = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "filter_invert is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("invert_filter = %s;\n", (invert_filter) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* allocate message set */
+    err = apicli_msg_set_alloc(byte_pool, BCMOLT_OBJ_ID_XGPON_IWF, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    bcmcli_log("bcmolt_msg_set_alloc(BCMOLT_OBJ_ID_XGPON_IWF, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, xgpon_iwf, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, xgpon_iwf, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "filter.us_otag_direct_tpid");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_iwf, us_otag_direct_tpid, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_iwf, us_otag_direct_tpid, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_IWF, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_IWF_CFG_ID_US_OTAG_DIRECT_TPID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "us_otag_direct_tpid");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_iwf, us_otag_direct_tpid);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_iwf, us_otag_direct_tpid);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.ds_tpid.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_arr_u16_5_hex val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.ds_tpid.arr");
+        if (cli_parm != NULL)
+        {
+            int32_t i0;
+            if (cli_parm->array_size != 5)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "array filter.ds_tpid.arr must have 5 elements\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i0 = 0; i0 < 5; i0++)
+            {
+                val.arr[i0] = cli_parm->values[i0].unumber;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ds_tpid.arr is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_iwf, ds_tpid, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_arr_u16_5_hex val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_IWF, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_IWF_CFG_ID_DS_TPID, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_iwf, ds_tpid, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ds_tpid");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_iwf, ds_tpid);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_iwf, ds_tpid);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_iwf, us_otag_direct_tpid) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_iwf, ds_tpid))
+    {
+        BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_iwf, all_properties);
+        bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_iwf, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);
+    bcmcli_log("bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_ni_cfg_get(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_ni_cfg cfg;        /**< declare main API struct */
+    bcmolt_xgpon_ni_key key = { };  /**< declare key */
+    uint8_t *list_mem;              /**< declare memory buffer for variable-sized lists */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_ni_cfg cfg;\n");
+    bcmcli_log("bcmolt_xgpon_ni_key key = {  };\n");
+    bcmcli_log("uint8_t* list_mem;\n");
+    apicli_print_start(session, "bcmolt_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_NI_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, xgpon_ni, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, xgpon_ni, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "hw_pon_id");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, hw_pon_id);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, hw_pon_id);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "available_bandwidth");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, available_bandwidth);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, available_bandwidth);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "number_of_active_onus");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, number_of_active_onus);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, number_of_active_onus);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "pon_status");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, pon_status);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, pon_status);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "pon_distance");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, pon_distance);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, pon_distance);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ranging_window_size");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, ranging_window_size);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, ranging_window_size);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "eqd_cycles_number");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, eqd_cycles_number);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, eqd_cycles_number);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "drift_control");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, drift_control);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, drift_control);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "los_alarm_threshold");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, los_alarm_threshold);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, los_alarm_threshold);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "los_initial_value");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, los_initial_value);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, los_initial_value);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_alarms_thresholds");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, onu_alarms_thresholds);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, onu_alarms_thresholds);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ber_monitor");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, ber_monitor);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, ber_monitor);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_activation");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, onu_activation);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, onu_activation);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "sn_acquisition");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, sn_acquisition);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, sn_acquisition);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "key_exchange");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, key_exchange);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, key_exchange);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "protection_switching");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, protection_switching);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, protection_switching);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "protection_switching_debug");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, protection_switching_debug);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, protection_switching_debug);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "cbr_rt_allocation_profile");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, cbr_rt_allocation_profile);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, cbr_rt_allocation_profile);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "cbr_nrt_allocation_profile");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, cbr_nrt_allocation_profile);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, cbr_nrt_allocation_profile);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "power_management");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, power_management);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, power_management);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rogue_onu_detection_process");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, rogue_onu_detection_process);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, rogue_onu_detection_process);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "periodic_standby_pon_monitoring");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, periodic_standby_pon_monitoring);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, periodic_standby_pon_monitoring);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "dba_mode");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, dba_mode);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, dba_mode);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ploam_handling");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, ploam_handling);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, ploam_handling);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "min_data_alloc_id");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, min_data_alloc_id);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, min_data_alloc_id);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "min_data_gem_port_id");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, min_data_gem_port_id);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, min_data_gem_port_id);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "multicast_key");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, multicast_key);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, multicast_key);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "prbs_checker");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, prbs_checker);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, prbs_checker);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "prbs_generator");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, prbs_generator);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, prbs_generator);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "prbs_status");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, prbs_status);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, prbs_status);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "automatic_onu_deactivation");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, automatic_onu_deactivation);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, automatic_onu_deactivation);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "us_bandwidth_limit");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, us_bandwidth_limit);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, us_bandwidth_limit);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "all_onus");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, all_onus);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, all_onus);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "all_mcast_gem_ports");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, all_mcast_gem_ports);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, all_mcast_gem_ports);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "debug");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, debug);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, debug);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_upgrade_params");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, onu_upgrade_params);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, onu_upgrade_params);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ds_fec_mode");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, ds_fec_mode);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, ds_fec_mode);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "dba_type");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, dba_type);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, dba_type);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_tuning");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, onu_tuning);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, onu_tuning);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_ni, hw_pon_id) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_ni, available_bandwidth) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_ni, number_of_active_onus) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_ni, pon_status) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_ni, pon_distance) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_ni, ranging_window_size) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_ni, eqd_cycles_number) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_ni, drift_control) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_ni, los_alarm_threshold) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_ni, los_initial_value) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_ni, onu_alarms_thresholds) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_ni, ber_monitor) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_ni, onu_activation) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_ni, sn_acquisition) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_ni, key_exchange) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_ni, protection_switching) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_ni, protection_switching_debug) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_ni, cbr_rt_allocation_profile) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_ni, cbr_nrt_allocation_profile) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_ni, power_management) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_ni, rogue_onu_detection_process) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_ni, periodic_standby_pon_monitoring) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_ni, dba_mode) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_ni, ploam_handling) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_ni, min_data_alloc_id) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_ni, min_data_gem_port_id) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_ni, multicast_key) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_ni, prbs_checker) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_ni, prbs_generator) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_ni, prbs_status) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_ni, automatic_onu_deactivation) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_ni, us_bandwidth_limit) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_ni, all_onus) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_ni, all_mcast_gem_ports) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_ni, debug) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_ni, onu_upgrade_params) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_ni, ds_fec_mode) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_ni, dba_type) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_ni, onu_tuning))
+    {
+        BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, all_properties);
+        bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_ni, all_properties);\n");
+    }
+
+    /* set memory to use for variable-sized lists */
+    list_mem = apicli_byte_pool_calloc(byte_pool, APICLI_DYNAMIC_LIST_BUFFER_SIZE);
+    if (list_mem == NULL)
+    {
+        apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+        return BCM_ERR_NOMEM;
+    }
+
+    bcmcli_log("list_mem = bcmos_calloc(APICLI_DYNAMIC_LIST_BUFFER_SIZE);\n");
+    BCMOLT_CFG_LIST_BUF_SET(&cfg, xgpon_ni, list_mem, APICLI_DYNAMIC_LIST_BUFFER_SIZE);
+    bcmcli_log("BCMOLT_CFG_LIST_BUF_SET(&cfg, xgpon_ni, list_mem, APICLI_DYNAMIC_LIST_BUFFER_SIZE);\n");
+
+    /* call API */
+    err = bcmolt_cfg_get(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_get(device_id, &cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_ni_cfg_set(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_ni_cfg cfg;        /**< declare main API struct */
+    bcmolt_xgpon_ni_key key = { };  /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_ni_cfg cfg;\n");
+    bcmcli_log("bcmolt_xgpon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_NI_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, xgpon_ni, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, xgpon_ni, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "hw_pon_id.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_hw_pon_id val = { };
+        cli_parm = bcmcli_find_named_parm(session, "hw_pon_id.pon_id_1");
+        if (cli_parm != NULL)
+        {
+            val.pon_id_1 = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "hw_pon_id.pon_id_1 is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "hw_pon_id.pon_id_2");
+        if (cli_parm != NULL)
+        {
+            val.pon_id_2 = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "hw_pon_id.pon_id_2 is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, hw_pon_id, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_hw_pon_id val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_HW_PON_ID, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, hw_pon_id, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "pon_distance.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_pon_distance val = { };
+        cli_parm = bcmcli_find_named_parm(session, "pon_distance.max_log_distance");
+        if (cli_parm != NULL)
+        {
+            val.max_log_distance = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "pon_distance.max_log_distance is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "pon_distance.max_diff_reach");
+        if (cli_parm != NULL)
+        {
+            val.max_diff_reach = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "pon_distance.max_diff_reach is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, pon_distance, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_pon_distance val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_PON_DISTANCE, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, pon_distance, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "eqd_cycles_number");
+    if (cli_parm != NULL)
+    {
+        uint32_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, eqd_cycles_number, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, eqd_cycles_number, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_EQD_CYCLES_NUMBER, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "drift_control.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_pon_drift_control val = { };
+        cli_parm = bcmcli_find_named_parm(session, "drift_control.drift_interval");
+        if (cli_parm != NULL)
+        {
+            val.drift_interval = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "drift_control.drift_interval is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "drift_control.drift_limit");
+        if (cli_parm != NULL)
+        {
+            val.drift_limit = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "drift_control.drift_limit is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "drift_control.transmission_control_limit");
+        if (cli_parm != NULL)
+        {
+            val.transmission_control_limit = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "drift_control.transmission_control_limit is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, drift_control, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_pon_drift_control val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_DRIFT_CONTROL, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, drift_control, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "los_alarm_threshold");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, los_alarm_threshold, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, los_alarm_threshold, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_LOS_ALARM_THRESHOLD, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "los_initial_value");
+    if (cli_parm != NULL)
+    {
+        bcmolt_status val;
+        val = (bcmolt_status) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, los_initial_value, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, los_initial_value, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_LOS_INITIAL_VALUE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "onu_alarms_thresholds.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_onu_alarms_thresholds val = { };
+        cli_parm = bcmcli_find_named_parm(session, "onu_alarms_thresholds.losi");
+        if (cli_parm != NULL)
+        {
+            val.losi = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "onu_alarms_thresholds.losi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "onu_alarms_thresholds.lobi");
+        if (cli_parm != NULL)
+        {
+            val.lobi = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "onu_alarms_thresholds.lobi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "onu_alarms_thresholds.looci");
+        if (cli_parm != NULL)
+        {
+            val.looci = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "onu_alarms_thresholds.looci is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "onu_alarms_thresholds.lopci");
+        if (cli_parm != NULL)
+        {
+            val.lopci = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "onu_alarms_thresholds.lopci is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, onu_alarms_thresholds, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_xgpon_onu_alarms_thresholds val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_ONU_ALARMS_THRESHOLDS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, onu_alarms_thresholds, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "ber_monitor.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_ber_monitor_params val = { };
+        cli_parm = bcmcli_find_named_parm(session, "ber_monitor.us_ber_interval");
+        if (cli_parm != NULL)
+        {
+            val.us_ber_interval = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ber_monitor.us_ber_interval is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "ber_monitor.sf_threshold");
+        if (cli_parm != NULL)
+        {
+            val.sf_threshold = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ber_monitor.sf_threshold is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "ber_monitor.sd_threshold");
+        if (cli_parm != NULL)
+        {
+            val.sd_threshold = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ber_monitor.sd_threshold is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, ber_monitor, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_ber_monitor_params val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_BER_MONITOR, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, ber_monitor, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "onu_activation.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_onu_activation val = { };
+        cli_parm = bcmcli_find_named_parm(session, "onu_activation.key_exchange");
+        if (cli_parm != NULL)
+        {
+            val.key_exchange = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "onu_activation.key_exchange is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "onu_activation.fail_due_to_regis_auto_fail");
+        if (cli_parm != NULL)
+        {
+            val.fail_due_to_regis_auto_fail = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "onu_activation.fail_due_to_regis_auto_fail is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, onu_activation, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_xgpon_onu_activation val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_ONU_ACTIVATION, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, onu_activation, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "sn_acquisition.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_sn_acquisition val = { };
+        cli_parm = bcmcli_find_named_parm(session, "sn_acquisition.interval");
+        if (cli_parm != NULL)
+        {
+            val.interval = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "sn_acquisition.interval is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "sn_acquisition.control");
+        if (cli_parm != NULL)
+        {
+            val.control = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "sn_acquisition.control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "sn_acquisition.onu_post_discovery_mode");
+        if (cli_parm != NULL)
+        {
+            val.onu_post_discovery_mode = (bcmolt_onu_post_discovery_mode) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "sn_acquisition.onu_post_discovery_mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "sn_acquisition.burst_profile");
+        if (cli_parm != NULL)
+        {
+            val.burst_profile = (bcmolt_burst_profile_index) cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "sn_acquisition.burst_profile is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, sn_acquisition, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_xgpon_sn_acquisition val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_SN_ACQUISITION, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, sn_acquisition, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "key_exchange.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_key_exchange val = { };
+        cli_parm = bcmcli_find_named_parm(session, "key_exchange.interval");
+        if (cli_parm != NULL)
+        {
+            val.interval = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "key_exchange.interval is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "key_exchange.control");
+        if (cli_parm != NULL)
+        {
+            val.control = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "key_exchange.control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "key_exchange.encrypted_ports_only");
+        if (cli_parm != NULL)
+        {
+            val.encrypted_ports_only = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "key_exchange.encrypted_ports_only is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, key_exchange, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_xgpon_key_exchange val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_KEY_EXCHANGE, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, key_exchange, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "protection_switching.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_protection_switching val = { };
+        cli_parm = bcmcli_find_named_parm(session, "protection_switching.timeout");
+        if (cli_parm != NULL)
+        {
+            val.timeout = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "protection_switching.timeout is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "protection_switching.gpio_pin");
+        if (cli_parm != NULL)
+        {
+            val.gpio_pin = (bcmolt_gpio_pin) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "protection_switching.gpio_pin is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "protection_switching.fast_ranging");
+        if (cli_parm != NULL)
+        {
+            val.fast_ranging = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "protection_switching.fast_ranging is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, protection_switching, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_xgpon_protection_switching val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_PROTECTION_SWITCHING, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, protection_switching, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "protection_switching_debug.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_protection_switching_debug val = { };
+        cli_parm = bcmcli_find_named_parm(session, "protection_switching_debug.data_map_delay_ms");
+        if (cli_parm != NULL)
+        {
+            val.data_map_delay_ms = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "protection_switching_debug.data_map_delay_ms is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "protection_switching_debug.rerange_send_ranging_time");
+        if (cli_parm != NULL)
+        {
+            val.rerange_send_ranging_time = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "protection_switching_debug.rerange_send_ranging_time is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "protection_switching_debug.rerange_send_ranging_time_delay");
+        if (cli_parm != NULL)
+        {
+            val.rerange_send_ranging_time_delay = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "protection_switching_debug.rerange_send_ranging_time_delay is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, protection_switching_debug, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_xgpon_protection_switching_debug val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_PROTECTION_SWITCHING_DEBUG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, protection_switching_debug, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "cbr_rt_allocation_profile.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_cbr_rt_allocation_profile val = { };
+        cli_parm = bcmcli_find_named_parm(session, "cbr_rt_allocation_profile.ma_7");
+        if (cli_parm != NULL)
+        {
+            val.ma_7 = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cbr_rt_allocation_profile.ma_7 is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "cbr_rt_allocation_profile.ma_3");
+        if (cli_parm != NULL)
+        {
+            val.ma_3 = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cbr_rt_allocation_profile.ma_3 is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "cbr_rt_allocation_profile.ma_1");
+        if (cli_parm != NULL)
+        {
+            val.ma_1 = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cbr_rt_allocation_profile.ma_1 is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, cbr_rt_allocation_profile, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_cbr_rt_allocation_profile val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_CBR_RT_ALLOCATION_PROFILE, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, cbr_rt_allocation_profile, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "cbr_nrt_allocation_profile.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_arr_u16_2 val = { };
+        cli_parm = bcmcli_find_named_parm(session, "cbr_nrt_allocation_profile.arr");
+        if (cli_parm != NULL)
+        {
+            int32_t i0;
+            if (cli_parm->array_size != 2)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "array cbr_nrt_allocation_profile.arr must have 2 elements\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i0 = 0; i0 < 2; i0++)
+            {
+                val.arr[i0] = cli_parm->values[i0].unumber;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cbr_nrt_allocation_profile.arr is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, cbr_nrt_allocation_profile, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_arr_u16_2 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_CBR_NRT_ALLOCATION_PROFILE, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, cbr_nrt_allocation_profile, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "power_management.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_onu_power_management_configuration val = { };
+        cli_parm = bcmcli_find_named_parm(session, "power_management.ilowpower");
+        if (cli_parm != NULL)
+        {
+            val.ilowpower = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "power_management.ilowpower is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "power_management.iaware");
+        if (cli_parm != NULL)
+        {
+            val.iaware = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "power_management.iaware is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "power_management.itransinit");
+        if (cli_parm != NULL)
+        {
+            val.itransinit = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "power_management.itransinit is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "power_management.itxinit");
+        if (cli_parm != NULL)
+        {
+            val.itxinit = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "power_management.itxinit is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "power_management.irxoff");
+        if (cli_parm != NULL)
+        {
+            val.irxoff = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "power_management.irxoff is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "power_management.low_power_clobi");
+        if (cli_parm != NULL)
+        {
+            val.low_power_clobi = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "power_management.low_power_clobi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, power_management, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_onu_power_management_configuration val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_POWER_MANAGEMENT, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, power_management, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "rogue_onu_detection_process.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_rogue_onu_detection_process val = { };
+        cli_parm = bcmcli_find_named_parm(session, "rogue_onu_detection_process.control");
+        if (cli_parm != NULL)
+        {
+            val.control = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "rogue_onu_detection_process.control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "rogue_onu_detection_process.detection_algorithm.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "rogue_onu_detection_process.detection_algorithm.algorithm_type");
+            if (cli_parm != NULL)
+            {
+                val.detection_algorithm.algorithm_type = (bcmolt_rogue_detection_algorithm_type) cli_parm->value.enum_val;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "rogue_onu_detection_process.detection_algorithm.algorithm_type is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            switch (val.detection_algorithm.algorithm_type)
+            {
+                case BCMOLT_ROGUE_DETECTION_ALGORITHM_TYPE_EARLY_ROGUE_DETECTION:
+                    cli_parm = bcmcli_find_named_parm(session, "rogue_onu_detection_process.detection_algorithm.measurement_type");
+                    if (cli_parm != NULL)
+                    {
+                        val.detection_algorithm.u.early_rogue_detection.measurement_type = (bcmolt_rogue_detection_window) cli_parm->value.enum_val;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "rogue_onu_detection_process.detection_algorithm.measurement_type is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "rogue_onu_detection_process.detection_algorithm.interval");
+                    if (cli_parm != NULL)
+                    {
+                        val.detection_algorithm.u.early_rogue_detection.interval = cli_parm->value.unumber;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "rogue_onu_detection_process.detection_algorithm.interval is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "rogue_onu_detection_process.detection_algorithm.second_ranging_window");
+                    if (cli_parm != NULL)
+                    {
+                        val.detection_algorithm.u.early_rogue_detection.second_ranging_window = cli_parm->value.number;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "rogue_onu_detection_process.detection_algorithm.second_ranging_window is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "rogue_onu_detection_process.detection_algorithm.alloc_type_to_scan");
+                    if (cli_parm != NULL)
+                    {
+                        val.detection_algorithm.u.early_rogue_detection.alloc_type_to_scan = (bcmolt_alloc_type_to_scan) cli_parm->value.enum_val;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "rogue_onu_detection_process.detection_algorithm.alloc_type_to_scan is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_ROGUE_DETECTION_ALGORITHM_TYPE_SPECIAL_MAP:
+                    cli_parm = bcmcli_find_parm_by_prefix(session, "rogue_onu_detection_process.detection_algorithm.accesses.");
+                    if (cli_parm != NULL)
+                    {
+                        int32_t i1;
+                        val.detection_algorithm.u.special_map.accesses.val = apicli_byte_pool_calloc(byte_pool, cli_parm->array_size * sizeof(*val.detection_algorithm.u.special_map.accesses.val));
+                        if (val.detection_algorithm.u.special_map.accesses.val == NULL)
+                        {
+                            apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+                            return BCM_ERR_NOMEM;
+                        }
+
+                        val.detection_algorithm.u.special_map.accesses.len = cli_parm->array_size;
+                        cli_parm = bcmcli_find_named_parm(session, "rogue_onu_detection_process.detection_algorithm.accesses.plo_size");
+                        if (cli_parm != NULL)
+                        {
+                            if (cli_parm->array_size != val.detection_algorithm.u.special_map.accesses.len)
+                            {
+                                apicli_print_complete(session, BCM_ERR_PARM, "rogue_onu_detection_process.detection_algorithm.accesses.plo_size is a different size than other arrays in the struct\n");
+                                return BCM_ERR_PARM;
+                            }
+
+                            for (i1 = 0; i1 < val.detection_algorithm.u.special_map.accesses.len; i1++)
+                            {
+                                val.detection_algorithm.u.special_map.accesses.val[i1].plo_size = cli_parm->values[i1].unumber;
+                            }
+                        }
+
+                        cli_parm = bcmcli_find_named_parm(session, "rogue_onu_detection_process.detection_algorithm.accesses.alloc_id");
+                        if (cli_parm != NULL)
+                        {
+                            if (cli_parm->array_size != val.detection_algorithm.u.special_map.accesses.len)
+                            {
+                                apicli_print_complete(session, BCM_ERR_PARM, "rogue_onu_detection_process.detection_algorithm.accesses.alloc_id is a different size than other arrays in the struct\n");
+                                return BCM_ERR_PARM;
+                            }
+
+                            for (i1 = 0; i1 < val.detection_algorithm.u.special_map.accesses.len; i1++)
+                            {
+                                val.detection_algorithm.u.special_map.accesses.val[i1].alloc_id = (bcmolt_pon_alloc_id) cli_parm->values[i1].unumber;
+                            }
+                        }
+
+                        cli_parm = bcmcli_find_named_parm(session, "rogue_onu_detection_process.detection_algorithm.accesses.onu_id");
+                        if (cli_parm != NULL)
+                        {
+                            if (cli_parm->array_size != val.detection_algorithm.u.special_map.accesses.len)
+                            {
+                                apicli_print_complete(session, BCM_ERR_PARM, "rogue_onu_detection_process.detection_algorithm.accesses.onu_id is a different size than other arrays in the struct\n");
+                                return BCM_ERR_PARM;
+                            }
+
+                            for (i1 = 0; i1 < val.detection_algorithm.u.special_map.accesses.len; i1++)
+                            {
+                                val.detection_algorithm.u.special_map.accesses.val[i1].onu_id = (bcmolt_pon_onu_id) cli_parm->values[i1].unumber;
+                            }
+                        }
+
+                        cli_parm = bcmcli_find_named_parm(session, "rogue_onu_detection_process.detection_algorithm.accesses.access_size");
+                        if (cli_parm != NULL)
+                        {
+                            if (cli_parm->array_size != val.detection_algorithm.u.special_map.accesses.len)
+                            {
+                                apicli_print_complete(session, BCM_ERR_PARM, "rogue_onu_detection_process.detection_algorithm.accesses.access_size is a different size than other arrays in the struct\n");
+                                return BCM_ERR_PARM;
+                            }
+
+                            for (i1 = 0; i1 < val.detection_algorithm.u.special_map.accesses.len; i1++)
+                            {
+                                val.detection_algorithm.u.special_map.accesses.val[i1].access_size = cli_parm->values[i1].unumber;
+                            }
+                        }
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "rogue_onu_detection_process.detection_algorithm.accesses is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_ROGUE_DETECTION_ALGORITHM_TYPE_EXTENDED_GUARD_TIME:
+                    cli_parm = bcmcli_find_named_parm(session, "rogue_onu_detection_process.detection_algorithm.additional_guard_time");
+                    if (cli_parm != NULL)
+                    {
+                        val.detection_algorithm.u.extended_guard_time.additional_guard_time = cli_parm->value.unumber;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "rogue_onu_detection_process.detection_algorithm.additional_guard_time is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                default:
+                    apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+                    return BCM_ERR_RANGE;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "rogue_onu_detection_process.detection_algorithm is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, rogue_onu_detection_process, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_rogue_onu_detection_process val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_ROGUE_ONU_DETECTION_PROCESS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, rogue_onu_detection_process, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "periodic_standby_pon_monitoring.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_periodic_standby_pon_monitoring val = { };
+        cli_parm = bcmcli_find_named_parm(session, "periodic_standby_pon_monitoring.interval");
+        if (cli_parm != NULL)
+        {
+            val.interval = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "periodic_standby_pon_monitoring.interval is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "periodic_standby_pon_monitoring.control");
+        if (cli_parm != NULL)
+        {
+            val.control = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "periodic_standby_pon_monitoring.control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, periodic_standby_pon_monitoring, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_periodic_standby_pon_monitoring val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_PERIODIC_STANDBY_PON_MONITORING, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, periodic_standby_pon_monitoring, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "dba_mode");
+    if (cli_parm != NULL)
+    {
+        bcmolt_dba_mode val;
+        val = (bcmolt_dba_mode) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, dba_mode, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, dba_mode, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_DBA_MODE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "ploam_handling.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_ploam_handling val = { };
+        cli_parm = bcmcli_find_named_parm(session, "ploam_handling.ack_timeout");
+        if (cli_parm != NULL)
+        {
+            val.ack_timeout = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ploam_handling.ack_timeout is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "ploam_handling.retrans_ranging_time");
+        if (cli_parm != NULL)
+        {
+            val.retrans_ranging_time = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ploam_handling.retrans_ranging_time is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "ploam_handling.retrans_assign_alloc_id");
+        if (cli_parm != NULL)
+        {
+            val.retrans_assign_alloc_id = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ploam_handling.retrans_assign_alloc_id is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "ploam_handling.retrans_key_control");
+        if (cli_parm != NULL)
+        {
+            val.retrans_key_control = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ploam_handling.retrans_key_control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "ploam_handling.retrans_request_registration");
+        if (cli_parm != NULL)
+        {
+            val.retrans_request_registration = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ploam_handling.retrans_request_registration is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, ploam_handling, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_xgpon_ploam_handling val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_PLOAM_HANDLING, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, ploam_handling, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "min_data_alloc_id");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_alloc_id val;
+        val = (bcmolt_xgpon_alloc_id) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, min_data_alloc_id, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, min_data_alloc_id, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_MIN_DATA_ALLOC_ID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "min_data_gem_port_id");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_gem_id val;
+        val = (bcmolt_xgpon_gem_id) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, min_data_gem_port_id, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, min_data_gem_port_id, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_MIN_DATA_GEM_PORT_ID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "multicast_key.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_multicast_key val = { };
+        cli_parm = bcmcli_find_parm_by_prefix(session, "multicast_key.key.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "multicast_key.key.bytes");
+            if (cli_parm != NULL)
+            {
+                if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 16)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "buffer multicast_key.key.bytes must have 16 bytes\n");
+                    return BCM_ERR_PARM;
+                }
+
+                bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+                bcmolt_buf_read(&cli_parm->value.buffer, val.key.bytes, 16);
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "multicast_key.key.bytes is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "multicast_key.key is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "multicast_key.key_control");
+        if (cli_parm != NULL)
+        {
+            val.key_control = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "multicast_key.key_control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, multicast_key, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_xgpon_multicast_key val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_MULTICAST_KEY, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, multicast_key, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "prbs_checker.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_prbs_checker_config val = { };
+        cli_parm = bcmcli_find_named_parm(session, "prbs_checker.polynom");
+        if (cli_parm != NULL)
+        {
+            val.polynom = (bcmolt_prbs_polynomial) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "prbs_checker.polynom is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "prbs_checker.mode");
+        if (cli_parm != NULL)
+        {
+            val.mode = (bcmolt_prbs_checker_mode) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "prbs_checker.mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "prbs_checker.data_invert");
+        if (cli_parm != NULL)
+        {
+            val.data_invert = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "prbs_checker.data_invert is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "prbs_checker.control");
+        if (cli_parm != NULL)
+        {
+            val.control = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "prbs_checker.control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, prbs_checker, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_prbs_checker_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_PRBS_CHECKER, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, prbs_checker, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "prbs_generator.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_prbs_generator_config val = { };
+        cli_parm = bcmcli_find_named_parm(session, "prbs_generator.polynom");
+        if (cli_parm != NULL)
+        {
+            val.polynom = (bcmolt_prbs_polynomial) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "prbs_generator.polynom is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "prbs_generator.error_insert");
+        if (cli_parm != NULL)
+        {
+            val.error_insert = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "prbs_generator.error_insert is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "prbs_generator.invert");
+        if (cli_parm != NULL)
+        {
+            val.invert = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "prbs_generator.invert is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "prbs_generator.control");
+        if (cli_parm != NULL)
+        {
+            val.control = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "prbs_generator.control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, prbs_generator, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_prbs_generator_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_PRBS_GENERATOR, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, prbs_generator, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "automatic_onu_deactivation.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_automatic_onu_deactivation val = { };
+        cli_parm = bcmcli_find_named_parm(session, "automatic_onu_deactivation.los");
+        if (cli_parm != NULL)
+        {
+            val.los = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "automatic_onu_deactivation.los is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "automatic_onu_deactivation.onu_alarms");
+        if (cli_parm != NULL)
+        {
+            val.onu_alarms = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "automatic_onu_deactivation.onu_alarms is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "automatic_onu_deactivation.tiwi");
+        if (cli_parm != NULL)
+        {
+            val.tiwi = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "automatic_onu_deactivation.tiwi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "automatic_onu_deactivation.ack_timeout");
+        if (cli_parm != NULL)
+        {
+            val.ack_timeout = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "automatic_onu_deactivation.ack_timeout is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "automatic_onu_deactivation.sfi");
+        if (cli_parm != NULL)
+        {
+            val.sfi = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "automatic_onu_deactivation.sfi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "automatic_onu_deactivation.loki");
+        if (cli_parm != NULL)
+        {
+            val.loki = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "automatic_onu_deactivation.loki is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, automatic_onu_deactivation, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_automatic_onu_deactivation val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_AUTOMATIC_ONU_DEACTIVATION, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, automatic_onu_deactivation, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "us_bandwidth_limit");
+    if (cli_parm != NULL)
+    {
+        uint32_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, us_bandwidth_limit, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, us_bandwidth_limit, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_US_BANDWIDTH_LIMIT, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "debug.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_ni_debug val = { };
+        cli_parm = bcmcli_find_named_parm(session, "debug.increase_available_cbr_bw");
+        if (cli_parm != NULL)
+        {
+            val.increase_available_cbr_bw = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "debug.increase_available_cbr_bw is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "debug.inter_burst_gap_in_bytes");
+        if (cli_parm != NULL)
+        {
+            val.inter_burst_gap_in_bytes = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "debug.inter_burst_gap_in_bytes is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "debug.number_of_gem_ports_per_onu");
+        if (cli_parm != NULL)
+        {
+            val.number_of_gem_ports_per_onu = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "debug.number_of_gem_ports_per_onu is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, debug, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_xgpon_ni_debug val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_DEBUG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, debug, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "onu_upgrade_params.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpon_onu_upgrade_params val = { };
+        cli_parm = bcmcli_find_named_parm(session, "onu_upgrade_params.response_timeout_ms");
+        if (cli_parm != NULL)
+        {
+            val.response_timeout_ms = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "onu_upgrade_params.response_timeout_ms is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "onu_upgrade_params.max_retry_count");
+        if (cli_parm != NULL)
+        {
+            val.max_retry_count = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "onu_upgrade_params.max_retry_count is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "onu_upgrade_params.omci_format");
+        if (cli_parm != NULL)
+        {
+            val.omci_format = (bcmolt_omci_device_id) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "onu_upgrade_params.omci_format is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "onu_upgrade_params.window_size");
+        if (cli_parm != NULL)
+        {
+            val.window_size = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "onu_upgrade_params.window_size is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "onu_upgrade_params.activate_commit");
+        if (cli_parm != NULL)
+        {
+            val.activate_commit = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "onu_upgrade_params.activate_commit is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "onu_upgrade_params.delay_for_commit_ms");
+        if (cli_parm != NULL)
+        {
+            val.delay_for_commit_ms = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "onu_upgrade_params.delay_for_commit_ms is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "onu_upgrade_params.max_activation_attempts");
+        if (cli_parm != NULL)
+        {
+            val.max_activation_attempts = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "onu_upgrade_params.max_activation_attempts is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, onu_upgrade_params, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_gpon_onu_upgrade_params val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_ONU_UPGRADE_PARAMS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, onu_upgrade_params, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ds_fec_mode");
+    if (cli_parm != NULL)
+    {
+        bcmolt_control_state val;
+        val = (bcmolt_control_state) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, ds_fec_mode, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, ds_fec_mode, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_DS_FEC_MODE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "dba_type");
+    if (cli_parm != NULL)
+    {
+        bcmolt_dba_type val;
+        val = (bcmolt_dba_type) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, dba_type, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, dba_type, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_DBA_TYPE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "onu_tuning.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_onu_tuning_configuration val = { };
+        cli_parm = bcmcli_find_named_parm(session, "onu_tuning.tsource");
+        if (cli_parm != NULL)
+        {
+            val.tsource = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "onu_tuning.tsource is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "onu_tuning.ttarget");
+        if (cli_parm != NULL)
+        {
+            val.ttarget = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "onu_tuning.ttarget is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "onu_tuning.request_registration_required");
+        if (cli_parm != NULL)
+        {
+            val.request_registration_required = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "onu_tuning.request_registration_required is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, onu_tuning, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_onu_tuning_configuration val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_ONU_TUNING, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, onu_tuning, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_set(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_set(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_ni_cfg_clear(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_ni_cfg cfg;        /**< declare main API struct */
+    bcmolt_xgpon_ni_key key = { };  /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_ni_cfg cfg;\n");
+    bcmcli_log("bcmolt_xgpon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_clear");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_NI_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, xgpon_ni, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, xgpon_ni, key);\n");
+
+    /* call API */
+    err = bcmolt_cfg_clear(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_clear(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_ni_cfg_get_multi(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_ni_cfg cfg;        /**< declare main API struct */
+    bcmolt_xgpon_ni_key key = { };  /**< declare key */
+    bcmolt_msg_set *msg_set = NULL; /**< declare message set */
+    uint32_t max_msgs;              /**< declare max number of msgs to get */
+    bcmos_bool invert_filter;       /**< declare filter invert flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_ni_cfg cfg;\n");
+    bcmcli_log("bcmolt_xgpon_ni_key key = {  };\n");
+    bcmcli_log("bcmolt_msg_set* msg_set = NULL;\n");
+    bcmcli_log("uint32_t max_msgs;\n");
+    bcmcli_log("bcmos_bool invert_filter;\n");
+    apicli_print_start(session, "bcmolt_cfg_get_multi");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_NI_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* set max number of msgs from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "max_msgs");
+    if (cli_parm != NULL)
+    {
+        max_msgs = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "max_msgs is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("max_msgs = %d;\n", max_msgs);
+
+    /* set filter invert flag from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "filter_invert");
+    if (cli_parm != NULL)
+    {
+        invert_filter = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "filter_invert is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("invert_filter = %s;\n", (invert_filter) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* allocate message set */
+    err = apicli_msg_set_alloc(byte_pool, BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    bcmcli_log("bcmolt_msg_set_alloc(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, xgpon_ni, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, xgpon_ni, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.hw_pon_id.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_hw_pon_id val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.hw_pon_id.pon_id_1");
+        if (cli_parm != NULL)
+        {
+            val.pon_id_1 = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.hw_pon_id.pon_id_1 is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.hw_pon_id.pon_id_2");
+        if (cli_parm != NULL)
+        {
+            val.pon_id_2 = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.hw_pon_id.pon_id_2 is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, hw_pon_id, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_hw_pon_id val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_HW_PON_ID, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, hw_pon_id, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "hw_pon_id");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, hw_pon_id);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, hw_pon_id);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.available_bandwidth.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_pon_available_bandwidth val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.available_bandwidth.cbr_bw");
+        if (cli_parm != NULL)
+        {
+            val.cbr_bw = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.available_bandwidth.cbr_bw is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.available_bandwidth.total_bw");
+        if (cli_parm != NULL)
+        {
+            val.total_bw = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.available_bandwidth.total_bw is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.available_bandwidth.next_onu_total_bw");
+        if (cli_parm != NULL)
+        {
+            val.next_onu_total_bw = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.available_bandwidth.next_onu_total_bw is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, available_bandwidth, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_pon_available_bandwidth val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_AVAILABLE_BANDWIDTH, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, available_bandwidth, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "available_bandwidth");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, available_bandwidth);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, available_bandwidth);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.number_of_active_onus");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, number_of_active_onus, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, number_of_active_onus, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_NUMBER_OF_ACTIVE_ONUS, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "number_of_active_onus");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, number_of_active_onus);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, number_of_active_onus);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.pon_status.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_pon_status val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.pon_status.state");
+        if (cli_parm != NULL)
+        {
+            val.state = (bcmolt_pon_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.pon_status.state is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.pon_status.los_status");
+        if (cli_parm != NULL)
+        {
+            val.los_status = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.pon_status.los_status is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, pon_status, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_pon_status val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_PON_STATUS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, pon_status, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "pon_status");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, pon_status);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, pon_status);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.pon_distance.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_pon_distance val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.pon_distance.max_log_distance");
+        if (cli_parm != NULL)
+        {
+            val.max_log_distance = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.pon_distance.max_log_distance is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.pon_distance.max_diff_reach");
+        if (cli_parm != NULL)
+        {
+            val.max_diff_reach = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.pon_distance.max_diff_reach is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, pon_distance, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_pon_distance val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_PON_DISTANCE, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, pon_distance, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "pon_distance");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, pon_distance);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, pon_distance);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.ranging_window_size");
+    if (cli_parm != NULL)
+    {
+        uint32_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, ranging_window_size, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, ranging_window_size, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_RANGING_WINDOW_SIZE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ranging_window_size");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, ranging_window_size);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, ranging_window_size);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.eqd_cycles_number");
+    if (cli_parm != NULL)
+    {
+        uint32_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, eqd_cycles_number, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, eqd_cycles_number, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_EQD_CYCLES_NUMBER, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "eqd_cycles_number");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, eqd_cycles_number);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, eqd_cycles_number);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.drift_control.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_pon_drift_control val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.drift_control.drift_interval");
+        if (cli_parm != NULL)
+        {
+            val.drift_interval = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.drift_control.drift_interval is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.drift_control.drift_limit");
+        if (cli_parm != NULL)
+        {
+            val.drift_limit = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.drift_control.drift_limit is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.drift_control.transmission_control_limit");
+        if (cli_parm != NULL)
+        {
+            val.transmission_control_limit = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.drift_control.transmission_control_limit is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, drift_control, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_pon_drift_control val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_DRIFT_CONTROL, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, drift_control, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "drift_control");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, drift_control);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, drift_control);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.los_alarm_threshold");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, los_alarm_threshold, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, los_alarm_threshold, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_LOS_ALARM_THRESHOLD, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "los_alarm_threshold");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, los_alarm_threshold);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, los_alarm_threshold);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.los_initial_value");
+    if (cli_parm != NULL)
+    {
+        bcmolt_status val;
+        val = (bcmolt_status) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, los_initial_value, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, los_initial_value, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_LOS_INITIAL_VALUE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "los_initial_value");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, los_initial_value);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, los_initial_value);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.onu_alarms_thresholds.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_onu_alarms_thresholds val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.onu_alarms_thresholds.losi");
+        if (cli_parm != NULL)
+        {
+            val.losi = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.onu_alarms_thresholds.losi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.onu_alarms_thresholds.lobi");
+        if (cli_parm != NULL)
+        {
+            val.lobi = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.onu_alarms_thresholds.lobi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.onu_alarms_thresholds.looci");
+        if (cli_parm != NULL)
+        {
+            val.looci = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.onu_alarms_thresholds.looci is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.onu_alarms_thresholds.lopci");
+        if (cli_parm != NULL)
+        {
+            val.lopci = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.onu_alarms_thresholds.lopci is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, onu_alarms_thresholds, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_xgpon_onu_alarms_thresholds val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_ONU_ALARMS_THRESHOLDS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, onu_alarms_thresholds, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_alarms_thresholds");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, onu_alarms_thresholds);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, onu_alarms_thresholds);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.ber_monitor.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_ber_monitor_params val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.ber_monitor.us_ber_interval");
+        if (cli_parm != NULL)
+        {
+            val.us_ber_interval = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ber_monitor.us_ber_interval is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.ber_monitor.sf_threshold");
+        if (cli_parm != NULL)
+        {
+            val.sf_threshold = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ber_monitor.sf_threshold is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.ber_monitor.sd_threshold");
+        if (cli_parm != NULL)
+        {
+            val.sd_threshold = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ber_monitor.sd_threshold is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, ber_monitor, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_ber_monitor_params val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_BER_MONITOR, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, ber_monitor, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ber_monitor");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, ber_monitor);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, ber_monitor);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.onu_activation.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_onu_activation val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.onu_activation.key_exchange");
+        if (cli_parm != NULL)
+        {
+            val.key_exchange = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.onu_activation.key_exchange is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.onu_activation.fail_due_to_regis_auto_fail");
+        if (cli_parm != NULL)
+        {
+            val.fail_due_to_regis_auto_fail = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.onu_activation.fail_due_to_regis_auto_fail is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, onu_activation, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_xgpon_onu_activation val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_ONU_ACTIVATION, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, onu_activation, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_activation");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, onu_activation);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, onu_activation);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.sn_acquisition.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_sn_acquisition val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.sn_acquisition.interval");
+        if (cli_parm != NULL)
+        {
+            val.interval = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.sn_acquisition.interval is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.sn_acquisition.control");
+        if (cli_parm != NULL)
+        {
+            val.control = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.sn_acquisition.control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.sn_acquisition.onu_post_discovery_mode");
+        if (cli_parm != NULL)
+        {
+            val.onu_post_discovery_mode = (bcmolt_onu_post_discovery_mode) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.sn_acquisition.onu_post_discovery_mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.sn_acquisition.burst_profile");
+        if (cli_parm != NULL)
+        {
+            val.burst_profile = (bcmolt_burst_profile_index) cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.sn_acquisition.burst_profile is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, sn_acquisition, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_xgpon_sn_acquisition val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_SN_ACQUISITION, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, sn_acquisition, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "sn_acquisition");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, sn_acquisition);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, sn_acquisition);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.key_exchange.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_key_exchange val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.key_exchange.interval");
+        if (cli_parm != NULL)
+        {
+            val.interval = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.key_exchange.interval is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.key_exchange.control");
+        if (cli_parm != NULL)
+        {
+            val.control = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.key_exchange.control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.key_exchange.encrypted_ports_only");
+        if (cli_parm != NULL)
+        {
+            val.encrypted_ports_only = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.key_exchange.encrypted_ports_only is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, key_exchange, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_xgpon_key_exchange val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_KEY_EXCHANGE, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, key_exchange, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "key_exchange");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, key_exchange);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, key_exchange);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.protection_switching.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_protection_switching val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.protection_switching.timeout");
+        if (cli_parm != NULL)
+        {
+            val.timeout = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.protection_switching.timeout is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.protection_switching.gpio_pin");
+        if (cli_parm != NULL)
+        {
+            val.gpio_pin = (bcmolt_gpio_pin) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.protection_switching.gpio_pin is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.protection_switching.fast_ranging");
+        if (cli_parm != NULL)
+        {
+            val.fast_ranging = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.protection_switching.fast_ranging is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, protection_switching, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_xgpon_protection_switching val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_PROTECTION_SWITCHING, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, protection_switching, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "protection_switching");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, protection_switching);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, protection_switching);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.protection_switching_debug.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_protection_switching_debug val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.protection_switching_debug.data_map_delay_ms");
+        if (cli_parm != NULL)
+        {
+            val.data_map_delay_ms = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.protection_switching_debug.data_map_delay_ms is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.protection_switching_debug.rerange_send_ranging_time");
+        if (cli_parm != NULL)
+        {
+            val.rerange_send_ranging_time = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.protection_switching_debug.rerange_send_ranging_time is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.protection_switching_debug.rerange_send_ranging_time_delay");
+        if (cli_parm != NULL)
+        {
+            val.rerange_send_ranging_time_delay = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.protection_switching_debug.rerange_send_ranging_time_delay is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, protection_switching_debug, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_xgpon_protection_switching_debug val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_PROTECTION_SWITCHING_DEBUG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, protection_switching_debug, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "protection_switching_debug");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, protection_switching_debug);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, protection_switching_debug);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.cbr_rt_allocation_profile.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_cbr_rt_allocation_profile val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.cbr_rt_allocation_profile.ma_7");
+        if (cli_parm != NULL)
+        {
+            val.ma_7 = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.cbr_rt_allocation_profile.ma_7 is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.cbr_rt_allocation_profile.ma_3");
+        if (cli_parm != NULL)
+        {
+            val.ma_3 = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.cbr_rt_allocation_profile.ma_3 is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.cbr_rt_allocation_profile.ma_1");
+        if (cli_parm != NULL)
+        {
+            val.ma_1 = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.cbr_rt_allocation_profile.ma_1 is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, cbr_rt_allocation_profile, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_cbr_rt_allocation_profile val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_CBR_RT_ALLOCATION_PROFILE, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, cbr_rt_allocation_profile, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "cbr_rt_allocation_profile");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, cbr_rt_allocation_profile);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, cbr_rt_allocation_profile);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.cbr_nrt_allocation_profile.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_arr_u16_2 val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.cbr_nrt_allocation_profile.arr");
+        if (cli_parm != NULL)
+        {
+            int32_t i0;
+            if (cli_parm->array_size != 2)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "array filter.cbr_nrt_allocation_profile.arr must have 2 elements\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i0 = 0; i0 < 2; i0++)
+            {
+                val.arr[i0] = cli_parm->values[i0].unumber;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.cbr_nrt_allocation_profile.arr is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, cbr_nrt_allocation_profile, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_arr_u16_2 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_CBR_NRT_ALLOCATION_PROFILE, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, cbr_nrt_allocation_profile, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "cbr_nrt_allocation_profile");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, cbr_nrt_allocation_profile);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, cbr_nrt_allocation_profile);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.power_management.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_onu_power_management_configuration val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.power_management.ilowpower");
+        if (cli_parm != NULL)
+        {
+            val.ilowpower = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.power_management.ilowpower is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.power_management.iaware");
+        if (cli_parm != NULL)
+        {
+            val.iaware = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.power_management.iaware is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.power_management.itransinit");
+        if (cli_parm != NULL)
+        {
+            val.itransinit = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.power_management.itransinit is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.power_management.itxinit");
+        if (cli_parm != NULL)
+        {
+            val.itxinit = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.power_management.itxinit is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.power_management.irxoff");
+        if (cli_parm != NULL)
+        {
+            val.irxoff = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.power_management.irxoff is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.power_management.low_power_clobi");
+        if (cli_parm != NULL)
+        {
+            val.low_power_clobi = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.power_management.low_power_clobi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, power_management, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_onu_power_management_configuration val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_POWER_MANAGEMENT, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, power_management, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "power_management");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, power_management);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, power_management);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.rogue_onu_detection_process.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_rogue_onu_detection_process val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.rogue_onu_detection_process.control");
+        if (cli_parm != NULL)
+        {
+            val.control = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.rogue_onu_detection_process.control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "filter.rogue_onu_detection_process.detection_algorithm.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "filter.rogue_onu_detection_process.detection_algorithm.algorithm_type");
+            if (cli_parm != NULL)
+            {
+                val.detection_algorithm.algorithm_type = (bcmolt_rogue_detection_algorithm_type) cli_parm->value.enum_val;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.rogue_onu_detection_process.detection_algorithm.algorithm_type is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            switch (val.detection_algorithm.algorithm_type)
+            {
+                case BCMOLT_ROGUE_DETECTION_ALGORITHM_TYPE_EARLY_ROGUE_DETECTION:
+                    cli_parm = bcmcli_find_named_parm(session, "filter.rogue_onu_detection_process.detection_algorithm.measurement_type");
+                    if (cli_parm != NULL)
+                    {
+                        val.detection_algorithm.u.early_rogue_detection.measurement_type = (bcmolt_rogue_detection_window) cli_parm->value.enum_val;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "filter.rogue_onu_detection_process.detection_algorithm.measurement_type is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "filter.rogue_onu_detection_process.detection_algorithm.interval");
+                    if (cli_parm != NULL)
+                    {
+                        val.detection_algorithm.u.early_rogue_detection.interval = cli_parm->value.unumber;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "filter.rogue_onu_detection_process.detection_algorithm.interval is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "filter.rogue_onu_detection_process.detection_algorithm.second_ranging_window");
+                    if (cli_parm != NULL)
+                    {
+                        val.detection_algorithm.u.early_rogue_detection.second_ranging_window = cli_parm->value.number;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "filter.rogue_onu_detection_process.detection_algorithm.second_ranging_window is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "filter.rogue_onu_detection_process.detection_algorithm.alloc_type_to_scan");
+                    if (cli_parm != NULL)
+                    {
+                        val.detection_algorithm.u.early_rogue_detection.alloc_type_to_scan = (bcmolt_alloc_type_to_scan) cli_parm->value.enum_val;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "filter.rogue_onu_detection_process.detection_algorithm.alloc_type_to_scan is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_ROGUE_DETECTION_ALGORITHM_TYPE_SPECIAL_MAP:
+                    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.rogue_onu_detection_process.detection_algorithm.accesses.");
+                    if (cli_parm != NULL)
+                    {
+                        int32_t i1;
+                        val.detection_algorithm.u.special_map.accesses.val = apicli_byte_pool_calloc(byte_pool, cli_parm->array_size * sizeof(*val.detection_algorithm.u.special_map.accesses.val));
+                        if (val.detection_algorithm.u.special_map.accesses.val == NULL)
+                        {
+                            apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+                            return BCM_ERR_NOMEM;
+                        }
+
+                        val.detection_algorithm.u.special_map.accesses.len = cli_parm->array_size;
+                        cli_parm = bcmcli_find_named_parm(session, "filter.rogue_onu_detection_process.detection_algorithm.accesses.plo_size");
+                        if (cli_parm != NULL)
+                        {
+                            if (cli_parm->array_size != val.detection_algorithm.u.special_map.accesses.len)
+                            {
+                                apicli_print_complete(session, BCM_ERR_PARM, "filter.rogue_onu_detection_process.detection_algorithm.accesses.plo_size is a different size than other arrays in the struct\n");
+                                return BCM_ERR_PARM;
+                            }
+
+                            for (i1 = 0; i1 < val.detection_algorithm.u.special_map.accesses.len; i1++)
+                            {
+                                val.detection_algorithm.u.special_map.accesses.val[i1].plo_size = cli_parm->values[i1].unumber;
+                            }
+                        }
+
+                        cli_parm = bcmcli_find_named_parm(session, "filter.rogue_onu_detection_process.detection_algorithm.accesses.alloc_id");
+                        if (cli_parm != NULL)
+                        {
+                            if (cli_parm->array_size != val.detection_algorithm.u.special_map.accesses.len)
+                            {
+                                apicli_print_complete(session, BCM_ERR_PARM, "filter.rogue_onu_detection_process.detection_algorithm.accesses.alloc_id is a different size than other arrays in the struct\n");
+                                return BCM_ERR_PARM;
+                            }
+
+                            for (i1 = 0; i1 < val.detection_algorithm.u.special_map.accesses.len; i1++)
+                            {
+                                val.detection_algorithm.u.special_map.accesses.val[i1].alloc_id = (bcmolt_pon_alloc_id) cli_parm->values[i1].unumber;
+                            }
+                        }
+
+                        cli_parm = bcmcli_find_named_parm(session, "filter.rogue_onu_detection_process.detection_algorithm.accesses.onu_id");
+                        if (cli_parm != NULL)
+                        {
+                            if (cli_parm->array_size != val.detection_algorithm.u.special_map.accesses.len)
+                            {
+                                apicli_print_complete(session, BCM_ERR_PARM, "filter.rogue_onu_detection_process.detection_algorithm.accesses.onu_id is a different size than other arrays in the struct\n");
+                                return BCM_ERR_PARM;
+                            }
+
+                            for (i1 = 0; i1 < val.detection_algorithm.u.special_map.accesses.len; i1++)
+                            {
+                                val.detection_algorithm.u.special_map.accesses.val[i1].onu_id = (bcmolt_pon_onu_id) cli_parm->values[i1].unumber;
+                            }
+                        }
+
+                        cli_parm = bcmcli_find_named_parm(session, "filter.rogue_onu_detection_process.detection_algorithm.accesses.access_size");
+                        if (cli_parm != NULL)
+                        {
+                            if (cli_parm->array_size != val.detection_algorithm.u.special_map.accesses.len)
+                            {
+                                apicli_print_complete(session, BCM_ERR_PARM, "filter.rogue_onu_detection_process.detection_algorithm.accesses.access_size is a different size than other arrays in the struct\n");
+                                return BCM_ERR_PARM;
+                            }
+
+                            for (i1 = 0; i1 < val.detection_algorithm.u.special_map.accesses.len; i1++)
+                            {
+                                val.detection_algorithm.u.special_map.accesses.val[i1].access_size = cli_parm->values[i1].unumber;
+                            }
+                        }
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "filter.rogue_onu_detection_process.detection_algorithm.accesses is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_ROGUE_DETECTION_ALGORITHM_TYPE_EXTENDED_GUARD_TIME:
+                    cli_parm = bcmcli_find_named_parm(session, "filter.rogue_onu_detection_process.detection_algorithm.additional_guard_time");
+                    if (cli_parm != NULL)
+                    {
+                        val.detection_algorithm.u.extended_guard_time.additional_guard_time = cli_parm->value.unumber;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "filter.rogue_onu_detection_process.detection_algorithm.additional_guard_time is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                default:
+                    apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+                    return BCM_ERR_RANGE;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.rogue_onu_detection_process.detection_algorithm is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, rogue_onu_detection_process, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_rogue_onu_detection_process val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_ROGUE_ONU_DETECTION_PROCESS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, rogue_onu_detection_process, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rogue_onu_detection_process");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, rogue_onu_detection_process);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, rogue_onu_detection_process);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.periodic_standby_pon_monitoring.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_periodic_standby_pon_monitoring val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.periodic_standby_pon_monitoring.interval");
+        if (cli_parm != NULL)
+        {
+            val.interval = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.periodic_standby_pon_monitoring.interval is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.periodic_standby_pon_monitoring.control");
+        if (cli_parm != NULL)
+        {
+            val.control = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.periodic_standby_pon_monitoring.control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, periodic_standby_pon_monitoring, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_periodic_standby_pon_monitoring val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_PERIODIC_STANDBY_PON_MONITORING, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, periodic_standby_pon_monitoring, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "periodic_standby_pon_monitoring");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, periodic_standby_pon_monitoring);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, periodic_standby_pon_monitoring);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.dba_mode");
+    if (cli_parm != NULL)
+    {
+        bcmolt_dba_mode val;
+        val = (bcmolt_dba_mode) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, dba_mode, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, dba_mode, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_DBA_MODE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "dba_mode");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, dba_mode);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, dba_mode);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.ploam_handling.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_ploam_handling val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.ploam_handling.ack_timeout");
+        if (cli_parm != NULL)
+        {
+            val.ack_timeout = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ploam_handling.ack_timeout is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.ploam_handling.retrans_ranging_time");
+        if (cli_parm != NULL)
+        {
+            val.retrans_ranging_time = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ploam_handling.retrans_ranging_time is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.ploam_handling.retrans_assign_alloc_id");
+        if (cli_parm != NULL)
+        {
+            val.retrans_assign_alloc_id = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ploam_handling.retrans_assign_alloc_id is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.ploam_handling.retrans_key_control");
+        if (cli_parm != NULL)
+        {
+            val.retrans_key_control = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ploam_handling.retrans_key_control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.ploam_handling.retrans_request_registration");
+        if (cli_parm != NULL)
+        {
+            val.retrans_request_registration = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ploam_handling.retrans_request_registration is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, ploam_handling, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_xgpon_ploam_handling val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_PLOAM_HANDLING, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, ploam_handling, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ploam_handling");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, ploam_handling);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, ploam_handling);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.min_data_alloc_id");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_alloc_id val;
+        val = (bcmolt_xgpon_alloc_id) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, min_data_alloc_id, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, min_data_alloc_id, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_MIN_DATA_ALLOC_ID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "min_data_alloc_id");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, min_data_alloc_id);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, min_data_alloc_id);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.min_data_gem_port_id");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_gem_id val;
+        val = (bcmolt_xgpon_gem_id) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, min_data_gem_port_id, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, min_data_gem_port_id, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_MIN_DATA_GEM_PORT_ID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "min_data_gem_port_id");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, min_data_gem_port_id);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, min_data_gem_port_id);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.multicast_key.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_multicast_key val = { };
+        cli_parm = bcmcli_find_parm_by_prefix(session, "filter.multicast_key.key.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "filter.multicast_key.key.bytes");
+            if (cli_parm != NULL)
+            {
+                if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 16)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "buffer filter.multicast_key.key.bytes must have 16 bytes\n");
+                    return BCM_ERR_PARM;
+                }
+
+                bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+                bcmolt_buf_read(&cli_parm->value.buffer, val.key.bytes, 16);
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.multicast_key.key.bytes is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.multicast_key.key is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.multicast_key.key_control");
+        if (cli_parm != NULL)
+        {
+            val.key_control = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.multicast_key.key_control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, multicast_key, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_xgpon_multicast_key val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_MULTICAST_KEY, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, multicast_key, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "multicast_key");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, multicast_key);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, multicast_key);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.prbs_checker.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_prbs_checker_config val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_checker.polynom");
+        if (cli_parm != NULL)
+        {
+            val.polynom = (bcmolt_prbs_polynomial) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_checker.polynom is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_checker.mode");
+        if (cli_parm != NULL)
+        {
+            val.mode = (bcmolt_prbs_checker_mode) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_checker.mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_checker.data_invert");
+        if (cli_parm != NULL)
+        {
+            val.data_invert = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_checker.data_invert is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_checker.control");
+        if (cli_parm != NULL)
+        {
+            val.control = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_checker.control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, prbs_checker, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_prbs_checker_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_PRBS_CHECKER, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, prbs_checker, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "prbs_checker");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, prbs_checker);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, prbs_checker);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.prbs_generator.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_prbs_generator_config val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_generator.polynom");
+        if (cli_parm != NULL)
+        {
+            val.polynom = (bcmolt_prbs_polynomial) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_generator.polynom is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_generator.error_insert");
+        if (cli_parm != NULL)
+        {
+            val.error_insert = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_generator.error_insert is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_generator.invert");
+        if (cli_parm != NULL)
+        {
+            val.invert = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_generator.invert is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_generator.control");
+        if (cli_parm != NULL)
+        {
+            val.control = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_generator.control is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, prbs_generator, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_prbs_generator_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_PRBS_GENERATOR, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, prbs_generator, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "prbs_generator");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, prbs_generator);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, prbs_generator);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.prbs_status.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_prbs_status val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_status.lock_state");
+        if (cli_parm != NULL)
+        {
+            val.lock_state = (bcmolt_prbs_lock_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_status.lock_state is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.prbs_status.error_counts");
+        if (cli_parm != NULL)
+        {
+            val.error_counts = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.prbs_status.error_counts is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, prbs_status, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_prbs_status val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_PRBS_STATUS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, prbs_status, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "prbs_status");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, prbs_status);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, prbs_status);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.automatic_onu_deactivation.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_automatic_onu_deactivation val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.automatic_onu_deactivation.los");
+        if (cli_parm != NULL)
+        {
+            val.los = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.automatic_onu_deactivation.los is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.automatic_onu_deactivation.onu_alarms");
+        if (cli_parm != NULL)
+        {
+            val.onu_alarms = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.automatic_onu_deactivation.onu_alarms is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.automatic_onu_deactivation.tiwi");
+        if (cli_parm != NULL)
+        {
+            val.tiwi = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.automatic_onu_deactivation.tiwi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.automatic_onu_deactivation.ack_timeout");
+        if (cli_parm != NULL)
+        {
+            val.ack_timeout = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.automatic_onu_deactivation.ack_timeout is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.automatic_onu_deactivation.sfi");
+        if (cli_parm != NULL)
+        {
+            val.sfi = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.automatic_onu_deactivation.sfi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.automatic_onu_deactivation.loki");
+        if (cli_parm != NULL)
+        {
+            val.loki = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.automatic_onu_deactivation.loki is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, automatic_onu_deactivation, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_automatic_onu_deactivation val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_AUTOMATIC_ONU_DEACTIVATION, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, automatic_onu_deactivation, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "automatic_onu_deactivation");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, automatic_onu_deactivation);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, automatic_onu_deactivation);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.us_bandwidth_limit");
+    if (cli_parm != NULL)
+    {
+        uint32_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, us_bandwidth_limit, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, us_bandwidth_limit, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_US_BANDWIDTH_LIMIT, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "us_bandwidth_limit");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, us_bandwidth_limit);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, us_bandwidth_limit);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.all_onus.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_onu_with_state_list_u16_max_510 val = { };
+        int32_t i2;
+        val.val = apicli_byte_pool_calloc(byte_pool, cli_parm->array_size * sizeof(*val.val));
+        if (val.val == NULL)
+        {
+            apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+            return BCM_ERR_NOMEM;
+        }
+
+        val.len = cli_parm->array_size;
+        cli_parm = bcmcli_find_named_parm(session, "filter.all_onus.onu_id");
+        if (cli_parm != NULL)
+        {
+            if (cli_parm->array_size != val.len)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.all_onus.onu_id is a different size than other arrays in the struct\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i2 = 0; i2 < val.len; i2++)
+            {
+                val.val[i2].onu_id = (bcmolt_xgpon_onu_id) cli_parm->values[i2].unumber;
+            }
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.all_onus.state");
+        if (cli_parm != NULL)
+        {
+            if (cli_parm->array_size != val.len)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.all_onus.state is a different size than other arrays in the struct\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i2 = 0; i2 < val.len; i2++)
+            {
+                val.val[i2].state = (bcmolt_onu_state) cli_parm->values[i2].enum_val;
+            }
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, all_onus, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_xgpon_onu_with_state_list_u16_max_510 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_ALL_ONUS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, all_onus, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "all_onus");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, all_onus);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, all_onus);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.all_mcast_gem_ports.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_gem_port_with_state_list_u16_max_128 val = { };
+        int32_t i3;
+        val.val = apicli_byte_pool_calloc(byte_pool, cli_parm->array_size * sizeof(*val.val));
+        if (val.val == NULL)
+        {
+            apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+            return BCM_ERR_NOMEM;
+        }
+
+        val.len = cli_parm->array_size;
+        cli_parm = bcmcli_find_named_parm(session, "filter.all_mcast_gem_ports.gem_id");
+        if (cli_parm != NULL)
+        {
+            if (cli_parm->array_size != val.len)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.all_mcast_gem_ports.gem_id is a different size than other arrays in the struct\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i3 = 0; i3 < val.len; i3++)
+            {
+                val.val[i3].gem_id = (bcmolt_xgpon_gem_id) cli_parm->values[i3].unumber;
+            }
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.all_mcast_gem_ports.state");
+        if (cli_parm != NULL)
+        {
+            if (cli_parm->array_size != val.len)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.all_mcast_gem_ports.state is a different size than other arrays in the struct\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i3 = 0; i3 < val.len; i3++)
+            {
+                val.val[i3].state = (bcmolt_xgpon_gem_port_state) cli_parm->values[i3].enum_val;
+            }
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, all_mcast_gem_ports, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_xgpon_gem_port_with_state_list_u16_max_128 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_ALL_MCAST_GEM_PORTS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, all_mcast_gem_ports, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "all_mcast_gem_ports");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, all_mcast_gem_ports);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, all_mcast_gem_ports);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.debug.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_ni_debug val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.debug.increase_available_cbr_bw");
+        if (cli_parm != NULL)
+        {
+            val.increase_available_cbr_bw = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.debug.increase_available_cbr_bw is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.debug.inter_burst_gap_in_bytes");
+        if (cli_parm != NULL)
+        {
+            val.inter_burst_gap_in_bytes = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.debug.inter_burst_gap_in_bytes is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.debug.number_of_gem_ports_per_onu");
+        if (cli_parm != NULL)
+        {
+            val.number_of_gem_ports_per_onu = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.debug.number_of_gem_ports_per_onu is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, debug, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_xgpon_ni_debug val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_DEBUG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, debug, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "debug");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, debug);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, debug);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.onu_upgrade_params.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_gpon_onu_upgrade_params val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.onu_upgrade_params.response_timeout_ms");
+        if (cli_parm != NULL)
+        {
+            val.response_timeout_ms = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.onu_upgrade_params.response_timeout_ms is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.onu_upgrade_params.max_retry_count");
+        if (cli_parm != NULL)
+        {
+            val.max_retry_count = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.onu_upgrade_params.max_retry_count is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.onu_upgrade_params.omci_format");
+        if (cli_parm != NULL)
+        {
+            val.omci_format = (bcmolt_omci_device_id) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.onu_upgrade_params.omci_format is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.onu_upgrade_params.window_size");
+        if (cli_parm != NULL)
+        {
+            val.window_size = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.onu_upgrade_params.window_size is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.onu_upgrade_params.activate_commit");
+        if (cli_parm != NULL)
+        {
+            val.activate_commit = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.onu_upgrade_params.activate_commit is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.onu_upgrade_params.delay_for_commit_ms");
+        if (cli_parm != NULL)
+        {
+            val.delay_for_commit_ms = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.onu_upgrade_params.delay_for_commit_ms is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.onu_upgrade_params.max_activation_attempts");
+        if (cli_parm != NULL)
+        {
+            val.max_activation_attempts = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.onu_upgrade_params.max_activation_attempts is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, onu_upgrade_params, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_gpon_onu_upgrade_params val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_ONU_UPGRADE_PARAMS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, onu_upgrade_params, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_upgrade_params");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, onu_upgrade_params);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, onu_upgrade_params);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.ds_fec_mode");
+    if (cli_parm != NULL)
+    {
+        bcmolt_control_state val;
+        val = (bcmolt_control_state) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, ds_fec_mode, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, ds_fec_mode, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_DS_FEC_MODE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ds_fec_mode");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, ds_fec_mode);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, ds_fec_mode);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.dba_type");
+    if (cli_parm != NULL)
+    {
+        bcmolt_dba_type val;
+        val = (bcmolt_dba_type) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, dba_type, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, dba_type, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_DBA_TYPE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "dba_type");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, dba_type);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, dba_type);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.onu_tuning.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_onu_tuning_configuration val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.onu_tuning.tsource");
+        if (cli_parm != NULL)
+        {
+            val.tsource = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.onu_tuning.tsource is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.onu_tuning.ttarget");
+        if (cli_parm != NULL)
+        {
+            val.ttarget = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.onu_tuning.ttarget is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.onu_tuning.request_registration_required");
+        if (cli_parm != NULL)
+        {
+            val.request_registration_required = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.onu_tuning.request_registration_required is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, onu_tuning, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_onu_tuning_configuration val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_NI_CFG_ID_ONU_TUNING, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_ni, onu_tuning, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_tuning");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, onu_tuning);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, onu_tuning);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_ni, hw_pon_id) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_ni, available_bandwidth) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_ni, number_of_active_onus) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_ni, pon_status) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_ni, pon_distance) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_ni, ranging_window_size) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_ni, eqd_cycles_number) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_ni, drift_control) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_ni, los_alarm_threshold) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_ni, los_initial_value) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_ni, onu_alarms_thresholds) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_ni, ber_monitor) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_ni, onu_activation) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_ni, sn_acquisition) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_ni, key_exchange) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_ni, protection_switching) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_ni, protection_switching_debug) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_ni, cbr_rt_allocation_profile) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_ni, cbr_nrt_allocation_profile) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_ni, power_management) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_ni, rogue_onu_detection_process) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_ni, periodic_standby_pon_monitoring) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_ni, dba_mode) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_ni, ploam_handling) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_ni, min_data_alloc_id) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_ni, min_data_gem_port_id) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_ni, multicast_key) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_ni, prbs_checker) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_ni, prbs_generator) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_ni, prbs_status) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_ni, automatic_onu_deactivation) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_ni, us_bandwidth_limit) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_ni, all_onus) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_ni, all_mcast_gem_ports) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_ni, debug) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_ni, onu_upgrade_params) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_ni, ds_fec_mode) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_ni, dba_type) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_ni, onu_tuning))
+    {
+        BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, all_properties);
+        bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_ni, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);
+    bcmcli_log("bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_ni_stat_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_ni_stat stat;      /**< declare main API struct */
+    bcmolt_xgpon_ni_key key = { };  /**< declare key */
+    bcmos_bool clear_on_read;       /**< declare 'clear on read' flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_ni_stat stat;\n");
+    bcmcli_log("bcmolt_xgpon_ni_key key = {  };\n");
+    bcmcli_log("bcmos_bool clear_on_read;\n");
+    apicli_print_start(session, "bcmolt_stat_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_NI_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* set stat flags from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "clear");
+    if (cli_parm != NULL)
+    {
+        clear_on_read = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "clear is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("clear_on_read = %s;\n", (clear_on_read) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* init the API struct */
+    BCMOLT_STAT_INIT(&stat, xgpon_ni, key);
+    bcmcli_log("BCMOLT_STAT_INIT(&stat, xgpon_ni, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "fec_codewords");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, fec_codewords);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, fec_codewords);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "bip32_bytes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, bip32_bytes);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, bip32_bytes);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "bip32_errors");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, bip32_errors);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, bip32_errors);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_xgtc_headers");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_xgtc_headers);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_xgtc_headers);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_xgtc_corrected");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_xgtc_corrected);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_xgtc_corrected);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_xgtc_uncorrected");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_xgtc_uncorrected);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_xgtc_uncorrected);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_xgem");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_xgem);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_xgem);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_xgem_dropped");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_xgem_dropped);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_xgem_dropped);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_xgem_idle");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_xgem_idle);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_xgem_idle);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_xgem_corrected");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_xgem_corrected);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_xgem_corrected);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_crc_error");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_crc_error);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_crc_error);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_fragment_error");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_fragment_error);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_fragment_error);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_packets_dropped");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_packets_dropped);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_packets_dropped);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_dropped_too_short");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_dropped_too_short);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_dropped_too_short);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_dropped_too_long");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_dropped_too_long);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_dropped_too_long);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_key_error");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_key_error);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_key_error);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_ploams");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, tx_ploams);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, tx_ploams);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_ploams_dropped");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_ploams_dropped);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_ploams_dropped);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_allocations_valid");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_allocations_valid);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_allocations_valid);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_allocations_invalid");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_allocations_invalid);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_allocations_invalid);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_allocations_disabled");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_allocations_disabled);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_allocations_disabled);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_ploams");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_ploams);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_ploams);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_ploams_non_idle");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_ploams_non_idle);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_ploams_non_idle);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_ploams_error");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_ploams_error);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_ploams_error);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_cpu");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_cpu);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_cpu);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_omci");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_omci);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_omci);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_omci_packets_crc_error");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_omci_packets_crc_error);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, rx_omci_packets_crc_error);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_packets");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, tx_packets);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, tx_packets);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_xgem");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, tx_xgem);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, tx_xgem);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_cpu");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, tx_cpu);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, tx_cpu);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_omci");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, tx_omci);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, tx_omci);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_cpu_omci_packets_dropped");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, tx_cpu_omci_packets_dropped);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, tx_cpu_omci_packets_dropped);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_dropped_illegal_length");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, tx_dropped_illegal_length);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, tx_dropped_illegal_length);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_dropped_tpid_miss");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, tx_dropped_tpid_miss);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, tx_dropped_tpid_miss);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_dropped_vid_miss");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, tx_dropped_vid_miss);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, tx_dropped_vid_miss);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_ni, fec_codewords) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_ni, bip32_bytes) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_ni, bip32_errors) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_ni, rx_xgtc_headers) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_ni, rx_xgtc_corrected) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_ni, rx_xgtc_uncorrected) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_ni, rx_xgem) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_ni, rx_xgem_dropped) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_ni, rx_xgem_idle) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_ni, rx_xgem_corrected) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_ni, rx_crc_error) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_ni, rx_fragment_error) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_ni, rx_packets_dropped) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_ni, rx_dropped_too_short) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_ni, rx_dropped_too_long) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_ni, rx_key_error) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_ni, tx_ploams) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_ni, rx_ploams_dropped) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_ni, rx_allocations_valid) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_ni, rx_allocations_invalid) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_ni, rx_allocations_disabled) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_ni, rx_ploams) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_ni, rx_ploams_non_idle) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_ni, rx_ploams_error) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_ni, rx_cpu) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_ni, rx_omci) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_ni, rx_omci_packets_crc_error) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_ni, tx_packets) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_ni, tx_xgem) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_ni, tx_cpu) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_ni, tx_omci) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_ni, tx_cpu_omci_packets_dropped) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_ni, tx_dropped_illegal_length) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_ni, tx_dropped_tpid_miss) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_ni, tx_dropped_vid_miss))
+    {
+        BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, all_properties);
+        bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_ni, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_stat_get(device_id, &stat.hdr, clear_on_read);
+    bcmcli_log("bcmolt_stat_get(device_id, &stat.hdr, clear_on_read);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &stat.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, stat.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_ni_oper_set_pon_state_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_ni_set_pon_state oper; /**< declare main API struct */
+    bcmolt_xgpon_ni_key key = { };      /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_ni_set_pon_state oper;\n");
+    bcmcli_log("bcmolt_xgpon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_NI_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, xgpon_ni, set_pon_state, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, xgpon_ni, set_pon_state, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "pon_state");
+    if (cli_parm != NULL)
+    {
+        bcmolt_pon_operation val;
+        val = (bcmolt_pon_operation) cli_parm->value.enum_val;
+        BCMOLT_OPER_PROP_SET(&oper, xgpon_ni, set_pon_state, pon_state, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, xgpon_ni, set_pon_state, pon_state, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_OPER, BCMOLT_XGPON_NI_OPER_ID_SET_PON_STATE, BCMOLT_XGPON_NI_SET_PON_STATE_ID_PON_STATE, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_ni_oper_reset_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_ni_reset oper;     /**< declare main API struct */
+    bcmolt_xgpon_ni_key key = { };  /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_ni_reset oper;\n");
+    bcmcli_log("bcmolt_xgpon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_NI_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, xgpon_ni, reset, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, xgpon_ni, reset, key);\n");
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_ni_oper_disable_serial_number_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_ni_disable_serial_number oper; /**< declare main API struct */
+    bcmolt_xgpon_ni_key key = { };              /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_ni_disable_serial_number oper;\n");
+    bcmcli_log("bcmolt_xgpon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_NI_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, xgpon_ni, disable_serial_number, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, xgpon_ni, disable_serial_number, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "control");
+    if (cli_parm != NULL)
+    {
+        bcmolt_disable_serial_number_control val;
+        val = (bcmolt_disable_serial_number_control) cli_parm->value.enum_val;
+        BCMOLT_OPER_PROP_SET(&oper, xgpon_ni, disable_serial_number, control, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, xgpon_ni, disable_serial_number, control, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_OPER, BCMOLT_XGPON_NI_OPER_ID_DISABLE_SERIAL_NUMBER, BCMOLT_XGPON_NI_DISABLE_SERIAL_NUMBER_ID_CONTROL, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "serial_number.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_serial_number val = { };
+        cli_parm = bcmcli_find_named_parm(session, "serial_number.vendor_id");
+        if (cli_parm != NULL)
+        {
+            if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 4)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "buffer serial_number.vendor_id must have 4 bytes\n");
+                return BCM_ERR_PARM;
+            }
+
+            bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+            bcmolt_buf_read(&cli_parm->value.buffer, val.vendor_id, 4);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "serial_number.vendor_id is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "serial_number.vendor_specific");
+        if (cli_parm != NULL)
+        {
+            if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 4)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "buffer serial_number.vendor_specific must have 4 bytes\n");
+                return BCM_ERR_PARM;
+            }
+
+            bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+            bcmolt_buf_read(&cli_parm->value.buffer, val.vendor_specific, 4);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "serial_number.vendor_specific is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_OPER_PROP_SET(&oper, xgpon_ni, disable_serial_number, serial_number, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_serial_number val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_OPER, BCMOLT_XGPON_NI_OPER_ID_DISABLE_SERIAL_NUMBER, BCMOLT_XGPON_NI_DISABLE_SERIAL_NUMBER_ID_SERIAL_NUMBER, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, xgpon_ni, disable_serial_number, serial_number, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_ni_oper_single_request_standby_pon_monitoring_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_ni_single_request_standby_pon_monitoring oper; /**< declare main API struct */
+    bcmolt_xgpon_ni_key key = { };  /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_ni_single_request_standby_pon_monitoring oper;\n");
+    bcmcli_log("bcmolt_xgpon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_NI_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, xgpon_ni, single_request_standby_pon_monitoring, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, xgpon_ni, single_request_standby_pon_monitoring, key);\n");
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_ni_oper_set_onu_state_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_ni_set_onu_state oper; /**< declare main API struct */
+    bcmolt_xgpon_ni_key key = { };      /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_ni_set_onu_state oper;\n");
+    bcmcli_log("bcmolt_xgpon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_NI_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, xgpon_ni, set_onu_state, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, xgpon_ni, set_onu_state, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "onu_state");
+    if (cli_parm != NULL)
+    {
+        bcmolt_onu_operation val;
+        val = (bcmolt_onu_operation) cli_parm->value.enum_val;
+        BCMOLT_OPER_PROP_SET(&oper, xgpon_ni, set_onu_state, onu_state, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, xgpon_ni, set_onu_state, onu_state, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_OPER, BCMOLT_XGPON_NI_OPER_ID_SET_ONU_STATE, BCMOLT_XGPON_NI_SET_ONU_STATE_ID_ONU_STATE, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_ni_oper_run_special_bw_map_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_ni_run_special_bw_map oper;    /**< declare main API struct */
+    bcmolt_xgpon_ni_key key = { };              /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_ni_run_special_bw_map oper;\n");
+    bcmcli_log("bcmolt_xgpon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_NI_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, xgpon_ni, run_special_bw_map, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, xgpon_ni, run_special_bw_map, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "number_of_cycle");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_OPER_PROP_SET(&oper, xgpon_ni, run_special_bw_map, number_of_cycle, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, xgpon_ni, run_special_bw_map, number_of_cycle, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_OPER, BCMOLT_XGPON_NI_OPER_ID_RUN_SPECIAL_BW_MAP, BCMOLT_XGPON_NI_RUN_SPECIAL_BW_MAP_ID_NUMBER_OF_CYCLE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "allocation_number");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_OPER_PROP_SET(&oper, xgpon_ni, run_special_bw_map, allocation_number, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, xgpon_ni, run_special_bw_map, allocation_number, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_OPER, BCMOLT_XGPON_NI_OPER_ID_RUN_SPECIAL_BW_MAP, BCMOLT_XGPON_NI_RUN_SPECIAL_BW_MAP_ID_ALLOCATION_NUMBER, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "bw_map_array");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_OPER_PROP_SET(&oper, xgpon_ni, run_special_bw_map, bw_map_array, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, xgpon_ni, run_special_bw_map, bw_map_array, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_OPER, BCMOLT_XGPON_NI_OPER_ID_RUN_SPECIAL_BW_MAP, BCMOLT_XGPON_NI_RUN_SPECIAL_BW_MAP_ID_BW_MAP_ARRAY, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_ni_oper_rogue_detection_window_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_ni_rogue_detection_window oper;    /**< declare main API struct */
+    bcmolt_xgpon_ni_key key = { };                  /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_ni_rogue_detection_window oper;\n");
+    bcmcli_log("bcmolt_xgpon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_NI_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, xgpon_ni, rogue_detection_window, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, xgpon_ni, rogue_detection_window, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "window_type");
+    if (cli_parm != NULL)
+    {
+        bcmolt_rogue_detection_window val;
+        val = (bcmolt_rogue_detection_window) cli_parm->value.enum_val;
+        BCMOLT_OPER_PROP_SET(&oper, xgpon_ni, rogue_detection_window, window_type, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, xgpon_ni, rogue_detection_window, window_type, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_OPER, BCMOLT_XGPON_NI_OPER_ID_ROGUE_DETECTION_WINDOW, BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_WINDOW_TYPE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "alloc_id");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_alloc_id val;
+        val = (bcmolt_xgpon_alloc_id) cli_parm->value.unumber;
+        BCMOLT_OPER_PROP_SET(&oper, xgpon_ni, rogue_detection_window, alloc_id, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, xgpon_ni, rogue_detection_window, alloc_id, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_OPER, BCMOLT_XGPON_NI_OPER_ID_ROGUE_DETECTION_WINDOW, BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_ALLOC_ID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_onu_id val;
+        val = (bcmolt_xgpon_onu_id) cli_parm->value.unumber;
+        BCMOLT_OPER_PROP_SET(&oper, xgpon_ni, rogue_detection_window, onu_id, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, xgpon_ni, rogue_detection_window, onu_id, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_OPER, BCMOLT_XGPON_NI_OPER_ID_ROGUE_DETECTION_WINDOW, BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_ONU_ID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "second_ranging_window");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_OPER_PROP_SET(&oper, xgpon_ni, rogue_detection_window, second_ranging_window, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, xgpon_ni, rogue_detection_window, second_ranging_window, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_OPER, BCMOLT_XGPON_NI_OPER_ID_ROGUE_DETECTION_WINDOW, BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_SECOND_RANGING_WINDOW, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_ni_proxy_cpu_packets_send(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_ni_cpu_packets proxy;  /**< declare main API struct */
+    bcmolt_xgpon_ni_key key = { };      /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_ni_cpu_packets proxy;\n");
+    bcmcli_log("bcmolt_xgpon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_proxy_send");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_NI_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_PROXY_INIT(&proxy, xgpon_ni, cpu_packets, key);
+    bcmcli_log("BCMOLT_PROXY_INIT(&proxy, xgpon_ni, cpu_packets, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "packet_type");
+    if (cli_parm != NULL)
+    {
+        bcmolt_packet_type val;
+        val = (bcmolt_packet_type) cli_parm->value.enum_val;
+        BCMOLT_PROXY_PROP_SET(&proxy, xgpon_ni, cpu_packets, packet_type, val);
+        bcmcli_log("BCMOLT_PROXY_PROP_SET(&proxy, xgpon_ni, cpu_packets, packet_type, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_PROXY, BCMOLT_XGPON_NI_PROXY_ID_CPU_PACKETS, BCMOLT_XGPON_NI_CPU_PACKETS_ID_PACKET_TYPE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "calc_crc");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_PROXY_PROP_SET(&proxy, xgpon_ni, cpu_packets, calc_crc, val);
+        bcmcli_log("BCMOLT_PROXY_PROP_SET(&proxy, xgpon_ni, cpu_packets, calc_crc, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_PROXY, BCMOLT_XGPON_NI_PROXY_ID_CPU_PACKETS, BCMOLT_XGPON_NI_CPU_PACKETS_ID_CALC_CRC, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "gem_port_list");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_gem_id_list_u8_max_16 val = { };
+        int32_t i0;
+        val.val = apicli_byte_pool_calloc(byte_pool, cli_parm->array_size * sizeof(*val.val));
+        if (val.val == NULL)
+        {
+            apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+            return BCM_ERR_NOMEM;
+        }
+
+        val.len = cli_parm->array_size;
+        for (i0 = 0; i0 < val.len; i0++)
+        {
+            val.val[i0] = (bcmolt_xgpon_gem_id) cli_parm->values[i0].unumber;
+        }
+
+        BCMOLT_PROXY_PROP_SET(&proxy, xgpon_ni, cpu_packets, gem_port_list, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_xgpon_gem_id_list_u8_max_16 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_PROXY, BCMOLT_XGPON_NI_PROXY_ID_CPU_PACKETS, BCMOLT_XGPON_NI_CPU_PACKETS_ID_GEM_PORT_LIST, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_PROXY_PROP_SET(&proxy, xgpon_ni, cpu_packets, gem_port_list, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "buffer");
+    if (cli_parm != NULL)
+    {
+        bcmolt_u8_list_u32_max_2048 val = { };
+        val.len = bcmolt_buf_get_used(&cli_parm->value.buffer);
+        val.val = apicli_byte_pool_calloc(byte_pool, val.len);
+        if (val.val == NULL)
+        {
+            apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+            return BCM_ERR_NOMEM;
+        }
+
+        bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+        bcmolt_buf_read(&cli_parm->value.buffer, val.val, val.len);
+        BCMOLT_PROXY_PROP_SET(&proxy, xgpon_ni, cpu_packets, buffer, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_u8_list_u32_max_2048 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_PROXY, BCMOLT_XGPON_NI_PROXY_ID_CPU_PACKETS, BCMOLT_XGPON_NI_CPU_PACKETS_ID_BUFFER, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_PROXY_PROP_SET(&proxy, xgpon_ni, cpu_packets, buffer, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_proxy_send(device_id, &proxy.hdr);
+    bcmcli_log("bcmolt_proxy_send(device_id, &proxy.hdr);\n");
+    apicli_print_complete(session, err, proxy.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_ni_proxy_broadcast_ploam_packet_send(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_ni_broadcast_ploam_packet proxy;   /**< declare main API struct */
+    bcmolt_xgpon_ni_key key = { };                  /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_ni_broadcast_ploam_packet proxy;\n");
+    bcmcli_log("bcmolt_xgpon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_proxy_send");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_NI_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_PROXY_INIT(&proxy, xgpon_ni, broadcast_ploam_packet, key);
+    bcmcli_log("BCMOLT_PROXY_INIT(&proxy, xgpon_ni, broadcast_ploam_packet, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "ploam.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_arr_u8_40 val = { };
+        cli_parm = bcmcli_find_named_parm(session, "ploam.arr");
+        if (cli_parm != NULL)
+        {
+            if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 40)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "buffer ploam.arr must have 40 bytes\n");
+                return BCM_ERR_PARM;
+            }
+
+            bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+            bcmolt_buf_read(&cli_parm->value.buffer, val.arr, 40);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ploam.arr is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_PROXY_PROP_SET(&proxy, xgpon_ni, broadcast_ploam_packet, ploam, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_arr_u8_40 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_PROXY, BCMOLT_XGPON_NI_PROXY_ID_BROADCAST_PLOAM_PACKET, BCMOLT_XGPON_NI_BROADCAST_PLOAM_PACKET_ID_PLOAM, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_PROXY_PROP_SET(&proxy, xgpon_ni, broadcast_ploam_packet, ploam, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_proxy_send(device_id, &proxy.hdr);
+    bcmcli_log("bcmolt_proxy_send(device_id, &proxy.hdr);\n");
+    apicli_print_complete(session, err, proxy.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_ni_oper_tod_request_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_ni_tod_request oper;   /**< declare main API struct */
+    bcmolt_xgpon_ni_key key = { };      /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_ni_tod_request oper;\n");
+    bcmcli_log("bcmolt_xgpon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_NI_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, xgpon_ni, tod_request, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, xgpon_ni, tod_request, key);\n");
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_ni_oper_start_onu_upgrade_submit(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_ni_start_onu_upgrade oper; /**< declare main API struct */
+    bcmolt_xgpon_ni_key key = { };          /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_ni_start_onu_upgrade oper;\n");
+    bcmcli_log("bcmolt_xgpon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_NI_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, xgpon_ni, start_onu_upgrade, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, xgpon_ni, start_onu_upgrade, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "list_of_onu_ids");
+    if (cli_parm != NULL)
+    {
+        bcmolt_pon_onu_id_list_u32 val = { };
+        int32_t i0;
+        val.val = apicli_byte_pool_calloc(byte_pool, cli_parm->array_size * sizeof(*val.val));
+        if (val.val == NULL)
+        {
+            apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+            return BCM_ERR_NOMEM;
+        }
+
+        val.len = cli_parm->array_size;
+        for (i0 = 0; i0 < val.len; i0++)
+        {
+            val.val[i0] = (bcmolt_pon_onu_id) cli_parm->values[i0].unumber;
+        }
+
+        BCMOLT_OPER_PROP_SET(&oper, xgpon_ni, start_onu_upgrade, list_of_onu_ids, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_pon_onu_id_list_u32 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_OPER, BCMOLT_XGPON_NI_OPER_ID_START_ONU_UPGRADE, BCMOLT_XGPON_NI_START_ONU_UPGRADE_ID_LIST_OF_ONU_IDS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, xgpon_ni, start_onu_upgrade, list_of_onu_ids, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_ni_oper_adjust_tx_wavelength_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_ni_adjust_tx_wavelength oper;  /**< declare main API struct */
+    bcmolt_xgpon_ni_key key = { };              /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_ni_adjust_tx_wavelength oper;\n");
+    bcmcli_log("bcmolt_xgpon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_NI_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, xgpon_ni, adjust_tx_wavelength, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, xgpon_ni, adjust_tx_wavelength, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "serial_number.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_serial_number val = { };
+        cli_parm = bcmcli_find_named_parm(session, "serial_number.vendor_id");
+        if (cli_parm != NULL)
+        {
+            if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 4)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "buffer serial_number.vendor_id must have 4 bytes\n");
+                return BCM_ERR_PARM;
+            }
+
+            bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+            bcmolt_buf_read(&cli_parm->value.buffer, val.vendor_id, 4);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "serial_number.vendor_id is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "serial_number.vendor_specific");
+        if (cli_parm != NULL)
+        {
+            if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 4)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "buffer serial_number.vendor_specific must have 4 bytes\n");
+                return BCM_ERR_PARM;
+            }
+
+            bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+            bcmolt_buf_read(&cli_parm->value.buffer, val.vendor_specific, 4);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "serial_number.vendor_specific is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_OPER_PROP_SET(&oper, xgpon_ni, adjust_tx_wavelength, serial_number, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_serial_number val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_OPER, BCMOLT_XGPON_NI_OPER_ID_ADJUST_TX_WAVELENGTH, BCMOLT_XGPON_NI_ADJUST_TX_WAVELENGTH_ID_SERIAL_NUMBER, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, xgpon_ni, adjust_tx_wavelength, serial_number, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "freqency_adjustment_direction");
+    if (cli_parm != NULL)
+    {
+        bcmolt_frequency_adjustment_direction val;
+        val = (bcmolt_frequency_adjustment_direction) cli_parm->value.enum_val;
+        BCMOLT_OPER_PROP_SET(&oper, xgpon_ni, adjust_tx_wavelength, freqency_adjustment_direction, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, xgpon_ni, adjust_tx_wavelength, freqency_adjustment_direction, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_OPER, BCMOLT_XGPON_NI_OPER_ID_ADJUST_TX_WAVELENGTH, BCMOLT_XGPON_NI_ADJUST_TX_WAVELENGTH_ID_FREQENCY_ADJUSTMENT_DIRECTION, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frequency_adjustment_size");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_OPER_PROP_SET(&oper, xgpon_ni, adjust_tx_wavelength, frequency_adjustment_size, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, xgpon_ni, adjust_tx_wavelength, frequency_adjustment_size, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_OPER, BCMOLT_XGPON_NI_OPER_ID_ADJUST_TX_WAVELENGTH, BCMOLT_XGPON_NI_ADJUST_TX_WAVELENGTH_ID_FREQUENCY_ADJUSTMENT_SIZE, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_ni_stat_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_ni_stat_cfg stat_cfg;  /**< declare main API struct */
+    bcmolt_xgpon_ni_key key = { };      /**< declare key */
+    bcmolt_xgpon_ni_stat_id stat_id;    /**< declare stat ID */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_ni_stat_cfg stat_cfg;\n");
+    bcmcli_log("bcmolt_xgpon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_stat_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_NI_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* set stat ID from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "sub");
+    if (cli_parm != NULL)
+    {
+        stat_id = (bcmolt_xgpon_ni_stat_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    /* init the API struct */
+    switch (stat_id)
+    {
+        case BCMOLT_XGPON_NI_STAT_ID_FEC_CODEWORDS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, fec_codewords, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, fec_codewords, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_BIP32_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, bip32_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, bip32_bytes, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_BIP32_ERRORS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, bip32_errors, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, bip32_errors, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_XGTC_HEADERS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_xgtc_headers, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_xgtc_headers, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_XGTC_CORRECTED:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_xgtc_corrected, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_xgtc_corrected, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_XGTC_UNCORRECTED:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_xgtc_uncorrected, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_xgtc_uncorrected, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_XGEM:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_xgem, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_xgem, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_XGEM_DROPPED:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_xgem_dropped, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_xgem_dropped, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_XGEM_IDLE:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_xgem_idle, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_xgem_idle, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_XGEM_CORRECTED:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_xgem_corrected, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_xgem_corrected, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_CRC_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_crc_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_crc_error, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_FRAGMENT_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_fragment_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_fragment_error, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_PACKETS_DROPPED:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_packets_dropped, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_packets_dropped, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_DROPPED_TOO_SHORT:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_dropped_too_short, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_dropped_too_short, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_DROPPED_TOO_LONG:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_dropped_too_long, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_dropped_too_long, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_KEY_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_key_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_key_error, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_TX_PLOAMS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, tx_ploams, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, tx_ploams, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS_DROPPED:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_ploams_dropped, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_ploams_dropped, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_ALLOCATIONS_VALID:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_allocations_valid, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_allocations_valid, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_ALLOCATIONS_INVALID:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_allocations_invalid, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_allocations_invalid, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_ALLOCATIONS_DISABLED:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_allocations_disabled, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_allocations_disabled, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_ploams, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_ploams, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS_NON_IDLE:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_ploams_non_idle, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_ploams_non_idle, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_ploams_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_ploams_error, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_CPU:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_cpu, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_cpu, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_OMCI:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_omci, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_omci, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_omci_packets_crc_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_omci_packets_crc_error, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_TX_PACKETS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, tx_packets, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, tx_packets, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_TX_XGEM:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, tx_xgem, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, tx_xgem, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_TX_CPU:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, tx_cpu, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, tx_cpu, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_TX_OMCI:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, tx_omci, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, tx_omci, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_TX_CPU_OMCI_PACKETS_DROPPED:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, tx_cpu_omci_packets_dropped, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, tx_cpu_omci_packets_dropped, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_TX_DROPPED_ILLEGAL_LENGTH:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, tx_dropped_illegal_length, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, tx_dropped_illegal_length, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_TX_DROPPED_TPID_MISS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, tx_dropped_tpid_miss, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, tx_dropped_tpid_miss, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_TX_DROPPED_VID_MISS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, tx_dropped_vid_miss, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, tx_dropped_vid_miss, key);\n");
+            break;
+        default:
+            apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+            return BCM_ERR_RANGE;
+    }
+
+    /* call API */
+    err = bcmolt_stat_cfg_get(device_id, &stat_cfg.hdr);
+    bcmcli_log("bcmolt_stat_cfg_get(device_id, &stat_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &stat_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, stat_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_ni_stat_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_ni_stat_cfg stat_cfg;  /**< declare main API struct */
+    bcmolt_xgpon_ni_key key = { };      /**< declare key */
+    bcmolt_xgpon_ni_stat_id stat_id;    /**< declare stat ID */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_ni_stat_cfg stat_cfg;\n");
+    bcmcli_log("bcmolt_xgpon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_stat_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_NI_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* set stat ID from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "sub");
+    if (cli_parm != NULL)
+    {
+        stat_id = (bcmolt_xgpon_ni_stat_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    /* init the API struct */
+    switch (stat_id)
+    {
+        case BCMOLT_XGPON_NI_STAT_ID_FEC_CODEWORDS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, fec_codewords, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, fec_codewords, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_BIP32_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, bip32_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, bip32_bytes, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_BIP32_ERRORS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, bip32_errors, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, bip32_errors, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_XGTC_HEADERS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_xgtc_headers, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_xgtc_headers, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_XGTC_CORRECTED:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_xgtc_corrected, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_xgtc_corrected, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_XGTC_UNCORRECTED:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_xgtc_uncorrected, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_xgtc_uncorrected, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_XGEM:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_xgem, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_xgem, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_XGEM_DROPPED:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_xgem_dropped, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_xgem_dropped, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_XGEM_IDLE:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_xgem_idle, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_xgem_idle, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_XGEM_CORRECTED:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_xgem_corrected, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_xgem_corrected, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_CRC_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_crc_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_crc_error, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_FRAGMENT_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_fragment_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_fragment_error, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_PACKETS_DROPPED:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_packets_dropped, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_packets_dropped, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_DROPPED_TOO_SHORT:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_dropped_too_short, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_dropped_too_short, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_DROPPED_TOO_LONG:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_dropped_too_long, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_dropped_too_long, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_KEY_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_key_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_key_error, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_TX_PLOAMS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, tx_ploams, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, tx_ploams, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS_DROPPED:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_ploams_dropped, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_ploams_dropped, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_ALLOCATIONS_VALID:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_allocations_valid, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_allocations_valid, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_ALLOCATIONS_INVALID:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_allocations_invalid, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_allocations_invalid, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_ALLOCATIONS_DISABLED:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_allocations_disabled, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_allocations_disabled, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_ploams, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_ploams, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS_NON_IDLE:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_ploams_non_idle, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_ploams_non_idle, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_ploams_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_ploams_error, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_CPU:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_cpu, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_cpu, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_OMCI:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_omci, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_omci, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_omci_packets_crc_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, rx_omci_packets_crc_error, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_TX_PACKETS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, tx_packets, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, tx_packets, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_TX_XGEM:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, tx_xgem, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, tx_xgem, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_TX_CPU:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, tx_cpu, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, tx_cpu, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_TX_OMCI:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, tx_omci, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, tx_omci, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_TX_CPU_OMCI_PACKETS_DROPPED:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, tx_cpu_omci_packets_dropped, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, tx_cpu_omci_packets_dropped, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_TX_DROPPED_ILLEGAL_LENGTH:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, tx_dropped_illegal_length, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, tx_dropped_illegal_length, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_TX_DROPPED_TPID_MISS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, tx_dropped_tpid_miss, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, tx_dropped_tpid_miss, key);\n");
+            break;
+        case BCMOLT_XGPON_NI_STAT_ID_TX_DROPPED_VID_MISS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, tx_dropped_vid_miss, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_ni, tx_dropped_vid_miss, key);\n");
+            break;
+        default:
+            apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+            return BCM_ERR_RANGE;
+    }
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_stat_alarm_config val = { };
+        cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.trigger.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.type");
+            if (cli_parm != NULL)
+            {
+                val.trigger.type = (bcmolt_stat_condition_type) cli_parm->value.enum_val;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.type is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            switch (val.trigger.type)
+            {
+                case BCMOLT_STAT_CONDITION_TYPE_RATE_THRESHOLD:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.rising");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_threshold.rising = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.rising is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.falling");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_threshold.falling = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.falling is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_RATE_RANGE:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.upper");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_range.upper = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.upper is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.lower");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_range.lower = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.lower is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_VALUE_THRESHOLD:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.limit");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.value_threshold.limit = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.limit is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_NONE:
+                    break;
+                default:
+                    apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+                    return BCM_ERR_RANGE;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.soak.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "cfg.soak.active_soak_time");
+            if (cli_parm != NULL)
+            {
+                val.soak.active_soak_time = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak.active_soak_time is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "cfg.soak.clear_soak_time");
+            if (cli_parm != NULL)
+            {
+                val.soak.clear_soak_time = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak.clear_soak_time is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_STAT_CFG_PROP_SET(&stat_cfg, xgpon_ni, cfg, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_stat_alarm_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_STAT_CFG, 0, BCMOLT_XGPON_NI_STAT_CFG_ID_CFG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_STAT_CFG_PROP_SET(&stat_cfg, xgpon_ni, cfg, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_stat_cfg_set(device_id, &stat_cfg.hdr);
+    bcmcli_log("bcmolt_stat_cfg_set(device_id, &stat_cfg.hdr);\n");
+    apicli_print_complete(session, err, stat_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_ni_auto_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_ni_auto_cfg auto_cfg;  /**< declare main API struct */
+    bcmolt_xgpon_ni_key key = { };      /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_ni_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_xgpon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_get");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, xgpon_ni, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, xgpon_ni, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "activate_all_onus_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_ni, activate_all_onus_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_ni, activate_all_onus_completed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "cpu_packets_failure");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_ni, cpu_packets_failure);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_ni, cpu_packets_failure);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "deactivate_all_onus_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_ni, deactivate_all_onus_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_ni, deactivate_all_onus_completed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "disable_all_onus_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_ni, disable_all_onus_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_ni, disable_all_onus_completed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "enable_all_onus_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_ni, enable_all_onus_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_ni, enable_all_onus_completed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "los");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_ni, los);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_ni, los);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_discovered");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_ni, onu_discovered);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_ni, onu_discovered);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_upgrade_complete");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_ni, onu_upgrade_complete);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_ni, onu_upgrade_complete);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "protection_switching_onus_ranged");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_ni, protection_switching_onus_ranged);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_ni, protection_switching_onus_ranged);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "protection_switching_switchover_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_ni, protection_switching_switchover_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_ni, protection_switching_switchover_completed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "protection_switching_traffic_resume");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_ni, protection_switching_traffic_resume);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_ni, protection_switching_traffic_resume);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rogue_detection_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_ni, rogue_detection_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_ni, rogue_detection_completed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rogue_onu_special_map_cycle_start");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_ni, rogue_onu_special_map_cycle_start);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_ni, rogue_onu_special_map_cycle_start);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "serial_number_acquisition_cycle_start");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_ni, serial_number_acquisition_cycle_start);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_ni, serial_number_acquisition_cycle_start);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "standby_pon_monitoring_cycle_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_ni, standby_pon_monitoring_cycle_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_ni, standby_pon_monitoring_cycle_completed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_cleared");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_ni, stat_alarm_cleared);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_ni, stat_alarm_cleared);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_raised");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_ni, stat_alarm_raised);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_ni, stat_alarm_raised);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "state_change_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_ni, state_change_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_ni, state_change_completed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tod_request_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_ni, tod_request_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_ni, tod_request_completed);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_ni, activate_all_onus_completed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_ni, cpu_packets_failure) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_ni, deactivate_all_onus_completed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_ni, disable_all_onus_completed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_ni, enable_all_onus_completed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_ni, los) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_ni, onu_discovered) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_ni, onu_upgrade_complete) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_ni, protection_switching_onus_ranged) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_ni, protection_switching_switchover_completed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_ni, protection_switching_traffic_resume) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_ni, rogue_detection_completed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_ni, rogue_onu_special_map_cycle_start) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_ni, serial_number_acquisition_cycle_start) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_ni, standby_pon_monitoring_cycle_completed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_ni, stat_alarm_cleared) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_ni, stat_alarm_raised) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_ni, state_change_completed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_ni, tod_request_completed))
+    {
+        BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_ni, all_properties);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_ni, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &auto_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_ni_auto_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_ni_auto_cfg auto_cfg;  /**< declare main API struct */
+    bcmolt_xgpon_ni_key key = { };      /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_ni_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_xgpon_ni_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_set");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, xgpon_ni, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, xgpon_ni, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "activate_all_onus_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_ni, activate_all_onus_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_ni, activate_all_onus_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_NI_AUTO_CFG_ID_ACTIVATE_ALL_ONUS_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "cpu_packets_failure");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_ni, cpu_packets_failure, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_ni, cpu_packets_failure, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_NI_AUTO_CFG_ID_CPU_PACKETS_FAILURE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "deactivate_all_onus_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_ni, deactivate_all_onus_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_ni, deactivate_all_onus_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_NI_AUTO_CFG_ID_DEACTIVATE_ALL_ONUS_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "disable_all_onus_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_ni, disable_all_onus_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_ni, disable_all_onus_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_NI_AUTO_CFG_ID_DISABLE_ALL_ONUS_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "enable_all_onus_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_ni, enable_all_onus_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_ni, enable_all_onus_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_NI_AUTO_CFG_ID_ENABLE_ALL_ONUS_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "los");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_ni, los, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_ni, los, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_NI_AUTO_CFG_ID_LOS, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_discovered");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_ni, onu_discovered, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_ni, onu_discovered, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_NI_AUTO_CFG_ID_ONU_DISCOVERED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_upgrade_complete");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_ni, onu_upgrade_complete, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_ni, onu_upgrade_complete, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_NI_AUTO_CFG_ID_ONU_UPGRADE_COMPLETE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "protection_switching_onus_ranged");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_ni, protection_switching_onus_ranged, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_ni, protection_switching_onus_ranged, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_ONUS_RANGED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "protection_switching_switchover_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_ni, protection_switching_switchover_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_ni, protection_switching_switchover_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "protection_switching_traffic_resume");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_ni, protection_switching_traffic_resume, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_ni, protection_switching_traffic_resume, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_TRAFFIC_RESUME, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rogue_detection_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_ni, rogue_detection_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_ni, rogue_detection_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_NI_AUTO_CFG_ID_ROGUE_DETECTION_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rogue_onu_special_map_cycle_start");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_ni, rogue_onu_special_map_cycle_start, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_ni, rogue_onu_special_map_cycle_start, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_NI_AUTO_CFG_ID_ROGUE_ONU_SPECIAL_MAP_CYCLE_START, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "serial_number_acquisition_cycle_start");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_ni, serial_number_acquisition_cycle_start, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_ni, serial_number_acquisition_cycle_start, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_NI_AUTO_CFG_ID_SERIAL_NUMBER_ACQUISITION_CYCLE_START, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "standby_pon_monitoring_cycle_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_ni, standby_pon_monitoring_cycle_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_ni, standby_pon_monitoring_cycle_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_NI_AUTO_CFG_ID_STANDBY_PON_MONITORING_CYCLE_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_cleared");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_ni, stat_alarm_cleared, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_ni, stat_alarm_cleared, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_NI_AUTO_CFG_ID_STAT_ALARM_CLEARED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_raised");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_ni, stat_alarm_raised, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_ni, stat_alarm_raised, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_NI_AUTO_CFG_ID_STAT_ALARM_RAISED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "state_change_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_ni, state_change_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_ni, state_change_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_NI_AUTO_CFG_ID_STATE_CHANGE_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tod_request_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_ni, tod_request_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_ni, tod_request_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_NI, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_NI_AUTO_CFG_ID_TOD_REQUEST_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);\n");
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_onu_cfg_get(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_onu_cfg cfg;       /**< declare main API struct */
+    bcmolt_xgpon_onu_key key = { }; /**< declare key */
+    uint8_t *list_mem;              /**< declare memory buffer for variable-sized lists */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_onu_cfg cfg;\n");
+    bcmcli_log("bcmolt_xgpon_onu_key key = {  };\n");
+    bcmcli_log("uint8_t* list_mem;\n");
+    apicli_print_start(session, "bcmolt_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ONU_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        key.onu_id = (bcmolt_xgpon_onu_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "onu_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.onu_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ONU_KEY_ID_ONU_ID, &key.onu_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, xgpon_onu, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, xgpon_onu, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "onu_state");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, onu_state);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, onu_state);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_old_state");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, onu_old_state);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, onu_old_state);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "alarm_state");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, alarm_state);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, alarm_state);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "registration_encryption_keys");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, registration_encryption_keys);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, registration_encryption_keys);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "current_encryption_key");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, current_encryption_key);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, current_encryption_key);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "serial_number");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, serial_number);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, serial_number);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "registration_id");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, registration_id);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, registration_id);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "registration_id_auto_learning");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, registration_id_auto_learning);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, registration_id_auto_learning);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ranging_burst_profile");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, ranging_burst_profile);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, ranging_burst_profile);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "data_burst_profile");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, data_burst_profile);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, data_burst_profile);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ranging_time");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, ranging_time);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, ranging_time);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "disabled_after_discovery");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, disabled_after_discovery);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, disabled_after_discovery);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "deactivation_reason");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, deactivation_reason);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, deactivation_reason);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "all_gem_ports");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, all_gem_ports);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, all_gem_ports);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "all_allocs");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, all_allocs);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, all_allocs);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "extended_guard_time");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, extended_guard_time);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, extended_guard_time);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "us_line_rate");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, us_line_rate);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, us_line_rate);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "calibration_record");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, calibration_record);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, calibration_record);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tuning_granularity");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, tuning_granularity);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, tuning_granularity);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "step_tuning_time");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, step_tuning_time);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, step_tuning_time);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "power_levelling_capabilities");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, power_levelling_capabilities);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, power_levelling_capabilities);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "request_registration_status");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, request_registration_status);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, request_registration_status);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_onu, onu_state) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_onu, onu_old_state) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_onu, alarm_state) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_onu, registration_encryption_keys) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_onu, current_encryption_key) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_onu, serial_number) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_onu, registration_id) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_onu, registration_id_auto_learning) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_onu, ranging_burst_profile) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_onu, data_burst_profile) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_onu, ranging_time) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_onu, disabled_after_discovery) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_onu, deactivation_reason) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_onu, all_gem_ports) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_onu, all_allocs) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_onu, extended_guard_time) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_onu, us_line_rate) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_onu, calibration_record) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_onu, tuning_granularity) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_onu, step_tuning_time) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_onu, power_levelling_capabilities) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_onu, request_registration_status))
+    {
+        BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, all_properties);
+        bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_onu, all_properties);\n");
+    }
+
+    /* set memory to use for variable-sized lists */
+    list_mem = apicli_byte_pool_calloc(byte_pool, APICLI_DYNAMIC_LIST_BUFFER_SIZE);
+    if (list_mem == NULL)
+    {
+        apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+        return BCM_ERR_NOMEM;
+    }
+
+    bcmcli_log("list_mem = bcmos_calloc(APICLI_DYNAMIC_LIST_BUFFER_SIZE);\n");
+    BCMOLT_CFG_LIST_BUF_SET(&cfg, xgpon_onu, list_mem, APICLI_DYNAMIC_LIST_BUFFER_SIZE);
+    bcmcli_log("BCMOLT_CFG_LIST_BUF_SET(&cfg, xgpon_onu, list_mem, APICLI_DYNAMIC_LIST_BUFFER_SIZE);\n");
+
+    /* call API */
+    err = bcmolt_cfg_get(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_get(device_id, &cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_onu_cfg_set(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_onu_cfg cfg;       /**< declare main API struct */
+    bcmolt_xgpon_onu_key key = { }; /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_onu_cfg cfg;\n");
+    bcmcli_log("bcmolt_xgpon_onu_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ONU_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        key.onu_id = (bcmolt_xgpon_onu_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "onu_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.onu_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ONU_KEY_ID_ONU_ID, &key.onu_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, xgpon_onu, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, xgpon_onu, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "onu_state");
+    if (cli_parm != NULL)
+    {
+        bcmolt_onu_state val;
+        val = (bcmolt_onu_state) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, onu_state, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, onu_state, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_ONU_CFG_ID_ONU_STATE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "alarm_state.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_onu_alarm_state val = { };
+        cli_parm = bcmcli_find_named_parm(session, "alarm_state.losi");
+        if (cli_parm != NULL)
+        {
+            val.losi = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "alarm_state.losi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "alarm_state.lobi");
+        if (cli_parm != NULL)
+        {
+            val.lobi = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "alarm_state.lobi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "alarm_state.lopci");
+        if (cli_parm != NULL)
+        {
+            val.lopci = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "alarm_state.lopci is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "alarm_state.lopci_mic_error");
+        if (cli_parm != NULL)
+        {
+            val.lopci_mic_error = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "alarm_state.lopci_mic_error is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "alarm_state.looci");
+        if (cli_parm != NULL)
+        {
+            val.looci = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "alarm_state.looci is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "alarm_state.tiwi");
+        if (cli_parm != NULL)
+        {
+            val.tiwi = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "alarm_state.tiwi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "alarm_state.dowi");
+        if (cli_parm != NULL)
+        {
+            val.dowi = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "alarm_state.dowi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "alarm_state.sufi");
+        if (cli_parm != NULL)
+        {
+            val.sufi = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "alarm_state.sufi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "alarm_state.sfi");
+        if (cli_parm != NULL)
+        {
+            val.sfi = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "alarm_state.sfi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "alarm_state.sdi");
+        if (cli_parm != NULL)
+        {
+            val.sdi = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "alarm_state.sdi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "alarm_state.dfi");
+        if (cli_parm != NULL)
+        {
+            val.dfi = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "alarm_state.dfi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "alarm_state.dgi");
+        if (cli_parm != NULL)
+        {
+            val.dgi = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "alarm_state.dgi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "alarm_state.pqsi");
+        if (cli_parm != NULL)
+        {
+            val.pqsi = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "alarm_state.pqsi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, alarm_state, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_xgpon_onu_alarm_state val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_ONU_CFG_ID_ALARM_STATE, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, alarm_state, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "registration_encryption_keys.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_onu_registration_keys val = { };
+        cli_parm = bcmcli_find_parm_by_prefix(session, "registration_encryption_keys.ploam_ik.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "registration_encryption_keys.ploam_ik.bytes");
+            if (cli_parm != NULL)
+            {
+                if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 16)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "buffer registration_encryption_keys.ploam_ik.bytes must have 16 bytes\n");
+                    return BCM_ERR_PARM;
+                }
+
+                bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+                bcmolt_buf_read(&cli_parm->value.buffer, val.ploam_ik.bytes, 16);
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "registration_encryption_keys.ploam_ik.bytes is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "registration_encryption_keys.ploam_ik is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "registration_encryption_keys.omci_ik.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "registration_encryption_keys.omci_ik.bytes");
+            if (cli_parm != NULL)
+            {
+                if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 16)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "buffer registration_encryption_keys.omci_ik.bytes must have 16 bytes\n");
+                    return BCM_ERR_PARM;
+                }
+
+                bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+                bcmolt_buf_read(&cli_parm->value.buffer, val.omci_ik.bytes, 16);
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "registration_encryption_keys.omci_ik.bytes is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "registration_encryption_keys.omci_ik is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "registration_encryption_keys.omci_k1.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "registration_encryption_keys.omci_k1.bytes");
+            if (cli_parm != NULL)
+            {
+                if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 16)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "buffer registration_encryption_keys.omci_k1.bytes must have 16 bytes\n");
+                    return BCM_ERR_PARM;
+                }
+
+                bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+                bcmolt_buf_read(&cli_parm->value.buffer, val.omci_k1.bytes, 16);
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "registration_encryption_keys.omci_k1.bytes is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "registration_encryption_keys.omci_k1 is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "registration_encryption_keys.omci_k2.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "registration_encryption_keys.omci_k2.bytes");
+            if (cli_parm != NULL)
+            {
+                if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 16)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "buffer registration_encryption_keys.omci_k2.bytes must have 16 bytes\n");
+                    return BCM_ERR_PARM;
+                }
+
+                bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+                bcmolt_buf_read(&cli_parm->value.buffer, val.omci_k2.bytes, 16);
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "registration_encryption_keys.omci_k2.bytes is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "registration_encryption_keys.omci_k2 is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "registration_encryption_keys.kek.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "registration_encryption_keys.kek.bytes");
+            if (cli_parm != NULL)
+            {
+                if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 16)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "buffer registration_encryption_keys.kek.bytes must have 16 bytes\n");
+                    return BCM_ERR_PARM;
+                }
+
+                bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+                bcmolt_buf_read(&cli_parm->value.buffer, val.kek.bytes, 16);
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "registration_encryption_keys.kek.bytes is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "registration_encryption_keys.kek is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, registration_encryption_keys, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_xgpon_onu_registration_keys val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_ONU_CFG_ID_REGISTRATION_ENCRYPTION_KEYS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, registration_encryption_keys, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "current_encryption_key.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_onu_aes_key val = { };
+        cli_parm = bcmcli_find_parm_by_prefix(session, "current_encryption_key.encryption_key.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "current_encryption_key.encryption_key.bytes");
+            if (cli_parm != NULL)
+            {
+                if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 16)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "buffer current_encryption_key.encryption_key.bytes must have 16 bytes\n");
+                    return BCM_ERR_PARM;
+                }
+
+                bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+                bcmolt_buf_read(&cli_parm->value.buffer, val.encryption_key.bytes, 16);
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "current_encryption_key.encryption_key.bytes is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "current_encryption_key.encryption_key is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "current_encryption_key.key_index");
+        if (cli_parm != NULL)
+        {
+            val.key_index = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "current_encryption_key.key_index is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, current_encryption_key, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_xgpon_onu_aes_key val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_ONU_CFG_ID_CURRENT_ENCRYPTION_KEY, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, current_encryption_key, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "serial_number.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_serial_number val = { };
+        cli_parm = bcmcli_find_named_parm(session, "serial_number.vendor_id");
+        if (cli_parm != NULL)
+        {
+            if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 4)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "buffer serial_number.vendor_id must have 4 bytes\n");
+                return BCM_ERR_PARM;
+            }
+
+            bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+            bcmolt_buf_read(&cli_parm->value.buffer, val.vendor_id, 4);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "serial_number.vendor_id is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "serial_number.vendor_specific");
+        if (cli_parm != NULL)
+        {
+            if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 4)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "buffer serial_number.vendor_specific must have 4 bytes\n");
+                return BCM_ERR_PARM;
+            }
+
+            bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+            bcmolt_buf_read(&cli_parm->value.buffer, val.vendor_specific, 4);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "serial_number.vendor_specific is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, serial_number, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_serial_number val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_ONU_CFG_ID_SERIAL_NUMBER, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, serial_number, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "registration_id.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_arr_u8_36 val = { };
+        cli_parm = bcmcli_find_named_parm(session, "registration_id.arr");
+        if (cli_parm != NULL)
+        {
+            if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 36)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "buffer registration_id.arr must have 36 bytes\n");
+                return BCM_ERR_PARM;
+            }
+
+            bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+            bcmolt_buf_read(&cli_parm->value.buffer, val.arr, 36);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "registration_id.arr is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, registration_id, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_arr_u8_36 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_ONU_CFG_ID_REGISTRATION_ID, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, registration_id, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "registration_id_auto_learning");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, registration_id_auto_learning, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, registration_id_auto_learning, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_ONU_CFG_ID_REGISTRATION_ID_AUTO_LEARNING, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ranging_burst_profile");
+    if (cli_parm != NULL)
+    {
+        bcmolt_burst_profile_index val;
+        val = (bcmolt_burst_profile_index) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, ranging_burst_profile, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, ranging_burst_profile, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_ONU_CFG_ID_RANGING_BURST_PROFILE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "data_burst_profile");
+    if (cli_parm != NULL)
+    {
+        bcmolt_burst_profile_index val;
+        val = (bcmolt_burst_profile_index) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, data_burst_profile, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, data_burst_profile, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_ONU_CFG_ID_DATA_BURST_PROFILE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ranging_time");
+    if (cli_parm != NULL)
+    {
+        uint32_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, ranging_time, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, ranging_time, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_ONU_CFG_ID_RANGING_TIME, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "extended_guard_time.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_extended_guard_time val = { };
+        cli_parm = bcmcli_find_named_parm(session, "extended_guard_time.additional_preburst_guard_time");
+        if (cli_parm != NULL)
+        {
+            val.additional_preburst_guard_time = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "extended_guard_time.additional_preburst_guard_time is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "extended_guard_time.additional_postburst_guard_time");
+        if (cli_parm != NULL)
+        {
+            val.additional_postburst_guard_time = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "extended_guard_time.additional_postburst_guard_time is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, extended_guard_time, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_extended_guard_time val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_ONU_CFG_ID_EXTENDED_GUARD_TIME, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, extended_guard_time, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "us_line_rate");
+    if (cli_parm != NULL)
+    {
+        bcmolt_upstream_line_rate_capabilities val;
+        val = (bcmolt_upstream_line_rate_capabilities) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, us_line_rate, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, us_line_rate, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_ONU_CFG_ID_US_LINE_RATE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "calibration_record.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_arr_calibration_record_8 val = { };
+        cli_parm = bcmcli_find_named_parm(session, "calibration_record.arr");
+        if (cli_parm != NULL)
+        {
+            int32_t i0;
+            if (cli_parm->array_size != 8)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "array calibration_record.arr must have 8 elements\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i0 = 0; i0 < 8; i0++)
+            {
+                val.arr[i0] = (bcmolt_calibration_record) cli_parm->values[i0].enum_val;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "calibration_record.arr is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, calibration_record, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_arr_calibration_record_8 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_ONU_CFG_ID_CALIBRATION_RECORD, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, calibration_record, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tuning_granularity");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, tuning_granularity, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, tuning_granularity, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_ONU_CFG_ID_TUNING_GRANULARITY, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "step_tuning_time");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, step_tuning_time, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, step_tuning_time, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_ONU_CFG_ID_STEP_TUNING_TIME, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "power_levelling_capabilities");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, power_levelling_capabilities, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, power_levelling_capabilities, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_ONU_CFG_ID_POWER_LEVELLING_CAPABILITIES, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_set(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_set(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_onu_cfg_clear(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_onu_cfg cfg;       /**< declare main API struct */
+    bcmolt_xgpon_onu_key key = { }; /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_onu_cfg cfg;\n");
+    bcmcli_log("bcmolt_xgpon_onu_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_clear");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ONU_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        key.onu_id = (bcmolt_xgpon_onu_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "onu_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.onu_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ONU_KEY_ID_ONU_ID, &key.onu_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, xgpon_onu, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, xgpon_onu, key);\n");
+
+    /* call API */
+    err = bcmolt_cfg_clear(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_clear(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_onu_cfg_get_multi(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_onu_cfg cfg;       /**< declare main API struct */
+    bcmolt_xgpon_onu_key key = { }; /**< declare key */
+    bcmolt_msg_set *msg_set = NULL; /**< declare message set */
+    uint32_t max_msgs;              /**< declare max number of msgs to get */
+    bcmos_bool invert_filter;       /**< declare filter invert flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_onu_cfg cfg;\n");
+    bcmcli_log("bcmolt_xgpon_onu_key key = {  };\n");
+    bcmcli_log("bcmolt_msg_set* msg_set = NULL;\n");
+    bcmcli_log("uint32_t max_msgs;\n");
+    bcmcli_log("bcmos_bool invert_filter;\n");
+    apicli_print_start(session, "bcmolt_cfg_get_multi");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ONU_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        key.onu_id = (bcmolt_xgpon_onu_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "onu_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.onu_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ONU_KEY_ID_ONU_ID, &key.onu_id);
+    bcmcli_log(";\n");
+
+    /* set max number of msgs from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "max_msgs");
+    if (cli_parm != NULL)
+    {
+        max_msgs = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "max_msgs is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("max_msgs = %d;\n", max_msgs);
+
+    /* set filter invert flag from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "filter_invert");
+    if (cli_parm != NULL)
+    {
+        invert_filter = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "filter_invert is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("invert_filter = %s;\n", (invert_filter) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* allocate message set */
+    err = apicli_msg_set_alloc(byte_pool, BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    bcmcli_log("bcmolt_msg_set_alloc(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, xgpon_onu, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, xgpon_onu, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "filter.onu_state");
+    if (cli_parm != NULL)
+    {
+        bcmolt_onu_state val;
+        val = (bcmolt_onu_state) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, onu_state, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, onu_state, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_ONU_CFG_ID_ONU_STATE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_state");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, onu_state);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, onu_state);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.onu_old_state");
+    if (cli_parm != NULL)
+    {
+        bcmolt_onu_state val;
+        val = (bcmolt_onu_state) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, onu_old_state, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, onu_old_state, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_ONU_CFG_ID_ONU_OLD_STATE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_old_state");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, onu_old_state);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, onu_old_state);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.alarm_state.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_onu_alarm_state val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.losi");
+        if (cli_parm != NULL)
+        {
+            val.losi = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.losi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.lobi");
+        if (cli_parm != NULL)
+        {
+            val.lobi = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.lobi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.lopci");
+        if (cli_parm != NULL)
+        {
+            val.lopci = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.lopci is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.lopci_mic_error");
+        if (cli_parm != NULL)
+        {
+            val.lopci_mic_error = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.lopci_mic_error is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.looci");
+        if (cli_parm != NULL)
+        {
+            val.looci = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.looci is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.tiwi");
+        if (cli_parm != NULL)
+        {
+            val.tiwi = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.tiwi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.dowi");
+        if (cli_parm != NULL)
+        {
+            val.dowi = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.dowi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.sufi");
+        if (cli_parm != NULL)
+        {
+            val.sufi = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.sufi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.sfi");
+        if (cli_parm != NULL)
+        {
+            val.sfi = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.sfi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.sdi");
+        if (cli_parm != NULL)
+        {
+            val.sdi = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.sdi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.dfi");
+        if (cli_parm != NULL)
+        {
+            val.dfi = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.dfi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.dgi");
+        if (cli_parm != NULL)
+        {
+            val.dgi = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.dgi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.alarm_state.pqsi");
+        if (cli_parm != NULL)
+        {
+            val.pqsi = (bcmolt_status) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.alarm_state.pqsi is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, alarm_state, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_xgpon_onu_alarm_state val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_ONU_CFG_ID_ALARM_STATE, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, alarm_state, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "alarm_state");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, alarm_state);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, alarm_state);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.registration_encryption_keys.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_onu_registration_keys val = { };
+        cli_parm = bcmcli_find_parm_by_prefix(session, "filter.registration_encryption_keys.ploam_ik.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "filter.registration_encryption_keys.ploam_ik.bytes");
+            if (cli_parm != NULL)
+            {
+                if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 16)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "buffer filter.registration_encryption_keys.ploam_ik.bytes must have 16 bytes\n");
+                    return BCM_ERR_PARM;
+                }
+
+                bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+                bcmolt_buf_read(&cli_parm->value.buffer, val.ploam_ik.bytes, 16);
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.registration_encryption_keys.ploam_ik.bytes is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.registration_encryption_keys.ploam_ik is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "filter.registration_encryption_keys.omci_ik.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "filter.registration_encryption_keys.omci_ik.bytes");
+            if (cli_parm != NULL)
+            {
+                if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 16)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "buffer filter.registration_encryption_keys.omci_ik.bytes must have 16 bytes\n");
+                    return BCM_ERR_PARM;
+                }
+
+                bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+                bcmolt_buf_read(&cli_parm->value.buffer, val.omci_ik.bytes, 16);
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.registration_encryption_keys.omci_ik.bytes is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.registration_encryption_keys.omci_ik is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "filter.registration_encryption_keys.omci_k1.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "filter.registration_encryption_keys.omci_k1.bytes");
+            if (cli_parm != NULL)
+            {
+                if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 16)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "buffer filter.registration_encryption_keys.omci_k1.bytes must have 16 bytes\n");
+                    return BCM_ERR_PARM;
+                }
+
+                bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+                bcmolt_buf_read(&cli_parm->value.buffer, val.omci_k1.bytes, 16);
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.registration_encryption_keys.omci_k1.bytes is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.registration_encryption_keys.omci_k1 is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "filter.registration_encryption_keys.omci_k2.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "filter.registration_encryption_keys.omci_k2.bytes");
+            if (cli_parm != NULL)
+            {
+                if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 16)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "buffer filter.registration_encryption_keys.omci_k2.bytes must have 16 bytes\n");
+                    return BCM_ERR_PARM;
+                }
+
+                bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+                bcmolt_buf_read(&cli_parm->value.buffer, val.omci_k2.bytes, 16);
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.registration_encryption_keys.omci_k2.bytes is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.registration_encryption_keys.omci_k2 is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "filter.registration_encryption_keys.kek.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "filter.registration_encryption_keys.kek.bytes");
+            if (cli_parm != NULL)
+            {
+                if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 16)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "buffer filter.registration_encryption_keys.kek.bytes must have 16 bytes\n");
+                    return BCM_ERR_PARM;
+                }
+
+                bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+                bcmolt_buf_read(&cli_parm->value.buffer, val.kek.bytes, 16);
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.registration_encryption_keys.kek.bytes is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.registration_encryption_keys.kek is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, registration_encryption_keys, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_xgpon_onu_registration_keys val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_ONU_CFG_ID_REGISTRATION_ENCRYPTION_KEYS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, registration_encryption_keys, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "registration_encryption_keys");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, registration_encryption_keys);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, registration_encryption_keys);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.current_encryption_key.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_onu_aes_key val = { };
+        cli_parm = bcmcli_find_parm_by_prefix(session, "filter.current_encryption_key.encryption_key.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "filter.current_encryption_key.encryption_key.bytes");
+            if (cli_parm != NULL)
+            {
+                if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 16)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "buffer filter.current_encryption_key.encryption_key.bytes must have 16 bytes\n");
+                    return BCM_ERR_PARM;
+                }
+
+                bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+                bcmolt_buf_read(&cli_parm->value.buffer, val.encryption_key.bytes, 16);
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.current_encryption_key.encryption_key.bytes is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.current_encryption_key.encryption_key is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.current_encryption_key.key_index");
+        if (cli_parm != NULL)
+        {
+            val.key_index = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.current_encryption_key.key_index is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, current_encryption_key, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_xgpon_onu_aes_key val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_ONU_CFG_ID_CURRENT_ENCRYPTION_KEY, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, current_encryption_key, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "current_encryption_key");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, current_encryption_key);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, current_encryption_key);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.serial_number.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_serial_number val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.serial_number.vendor_id");
+        if (cli_parm != NULL)
+        {
+            if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 4)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "buffer filter.serial_number.vendor_id must have 4 bytes\n");
+                return BCM_ERR_PARM;
+            }
+
+            bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+            bcmolt_buf_read(&cli_parm->value.buffer, val.vendor_id, 4);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.serial_number.vendor_id is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.serial_number.vendor_specific");
+        if (cli_parm != NULL)
+        {
+            if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 4)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "buffer filter.serial_number.vendor_specific must have 4 bytes\n");
+                return BCM_ERR_PARM;
+            }
+
+            bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+            bcmolt_buf_read(&cli_parm->value.buffer, val.vendor_specific, 4);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.serial_number.vendor_specific is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, serial_number, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_serial_number val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_ONU_CFG_ID_SERIAL_NUMBER, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, serial_number, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "serial_number");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, serial_number);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, serial_number);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.registration_id.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_arr_u8_36 val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.registration_id.arr");
+        if (cli_parm != NULL)
+        {
+            if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 36)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "buffer filter.registration_id.arr must have 36 bytes\n");
+                return BCM_ERR_PARM;
+            }
+
+            bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+            bcmolt_buf_read(&cli_parm->value.buffer, val.arr, 36);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.registration_id.arr is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, registration_id, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_arr_u8_36 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_ONU_CFG_ID_REGISTRATION_ID, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, registration_id, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "registration_id");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, registration_id);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, registration_id);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.registration_id_auto_learning");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, registration_id_auto_learning, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, registration_id_auto_learning, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_ONU_CFG_ID_REGISTRATION_ID_AUTO_LEARNING, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "registration_id_auto_learning");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, registration_id_auto_learning);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, registration_id_auto_learning);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.ranging_burst_profile");
+    if (cli_parm != NULL)
+    {
+        bcmolt_burst_profile_index val;
+        val = (bcmolt_burst_profile_index) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, ranging_burst_profile, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, ranging_burst_profile, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_ONU_CFG_ID_RANGING_BURST_PROFILE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ranging_burst_profile");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, ranging_burst_profile);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, ranging_burst_profile);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.data_burst_profile");
+    if (cli_parm != NULL)
+    {
+        bcmolt_burst_profile_index val;
+        val = (bcmolt_burst_profile_index) cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, data_burst_profile, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, data_burst_profile, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_ONU_CFG_ID_DATA_BURST_PROFILE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "data_burst_profile");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, data_burst_profile);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, data_burst_profile);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.ranging_time");
+    if (cli_parm != NULL)
+    {
+        uint32_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, ranging_time, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, ranging_time, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_ONU_CFG_ID_RANGING_TIME, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ranging_time");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, ranging_time);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, ranging_time);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.disabled_after_discovery");
+    if (cli_parm != NULL)
+    {
+        bcmolt_status val;
+        val = (bcmolt_status) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, disabled_after_discovery, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, disabled_after_discovery, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_ONU_CFG_ID_DISABLED_AFTER_DISCOVERY, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "disabled_after_discovery");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, disabled_after_discovery);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, disabled_after_discovery);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.deactivation_reason");
+    if (cli_parm != NULL)
+    {
+        bcmolt_deactivation_reason val;
+        val = (bcmolt_deactivation_reason) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, deactivation_reason, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, deactivation_reason, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_ONU_CFG_ID_DEACTIVATION_REASON, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "deactivation_reason");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, deactivation_reason);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, deactivation_reason);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.all_gem_ports.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_gem_port_with_state_list_u16_max_256 val = { };
+        int32_t i0;
+        val.val = apicli_byte_pool_calloc(byte_pool, cli_parm->array_size * sizeof(*val.val));
+        if (val.val == NULL)
+        {
+            apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+            return BCM_ERR_NOMEM;
+        }
+
+        val.len = cli_parm->array_size;
+        cli_parm = bcmcli_find_named_parm(session, "filter.all_gem_ports.gem_id");
+        if (cli_parm != NULL)
+        {
+            if (cli_parm->array_size != val.len)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.all_gem_ports.gem_id is a different size than other arrays in the struct\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i0 = 0; i0 < val.len; i0++)
+            {
+                val.val[i0].gem_id = (bcmolt_xgpon_gem_id) cli_parm->values[i0].unumber;
+            }
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.all_gem_ports.state");
+        if (cli_parm != NULL)
+        {
+            if (cli_parm->array_size != val.len)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.all_gem_ports.state is a different size than other arrays in the struct\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i0 = 0; i0 < val.len; i0++)
+            {
+                val.val[i0].state = (bcmolt_xgpon_gem_port_state) cli_parm->values[i0].enum_val;
+            }
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, all_gem_ports, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_xgpon_gem_port_with_state_list_u16_max_256 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_ONU_CFG_ID_ALL_GEM_PORTS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, all_gem_ports, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "all_gem_ports");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, all_gem_ports);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, all_gem_ports);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.all_allocs.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_alloc_with_state_list_u16_max_32 val = { };
+        int32_t i1;
+        val.val = apicli_byte_pool_calloc(byte_pool, cli_parm->array_size * sizeof(*val.val));
+        if (val.val == NULL)
+        {
+            apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+            return BCM_ERR_NOMEM;
+        }
+
+        val.len = cli_parm->array_size;
+        cli_parm = bcmcli_find_named_parm(session, "filter.all_allocs.alloc_id");
+        if (cli_parm != NULL)
+        {
+            if (cli_parm->array_size != val.len)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.all_allocs.alloc_id is a different size than other arrays in the struct\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i1 = 0; i1 < val.len; i1++)
+            {
+                val.val[i1].alloc_id = (bcmolt_xgpon_alloc_id) cli_parm->values[i1].unumber;
+            }
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.all_allocs.state");
+        if (cli_parm != NULL)
+        {
+            if (cli_parm->array_size != val.len)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "filter.all_allocs.state is a different size than other arrays in the struct\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i1 = 0; i1 < val.len; i1++)
+            {
+                val.val[i1].state = (bcmolt_alloc_state) cli_parm->values[i1].enum_val;
+            }
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, all_allocs, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_xgpon_alloc_with_state_list_u16_max_32 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_ONU_CFG_ID_ALL_ALLOCS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, all_allocs, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "all_allocs");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, all_allocs);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, all_allocs);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.extended_guard_time.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_extended_guard_time val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.extended_guard_time.additional_preburst_guard_time");
+        if (cli_parm != NULL)
+        {
+            val.additional_preburst_guard_time = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.extended_guard_time.additional_preburst_guard_time is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.extended_guard_time.additional_postburst_guard_time");
+        if (cli_parm != NULL)
+        {
+            val.additional_postburst_guard_time = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.extended_guard_time.additional_postburst_guard_time is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, extended_guard_time, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_extended_guard_time val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_ONU_CFG_ID_EXTENDED_GUARD_TIME, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, extended_guard_time, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "extended_guard_time");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, extended_guard_time);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, extended_guard_time);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.us_line_rate");
+    if (cli_parm != NULL)
+    {
+        bcmolt_upstream_line_rate_capabilities val;
+        val = (bcmolt_upstream_line_rate_capabilities) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, us_line_rate, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, us_line_rate, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_ONU_CFG_ID_US_LINE_RATE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "us_line_rate");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, us_line_rate);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, us_line_rate);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.calibration_record.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_arr_calibration_record_8 val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.calibration_record.arr");
+        if (cli_parm != NULL)
+        {
+            int32_t i2;
+            if (cli_parm->array_size != 8)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "array filter.calibration_record.arr must have 8 elements\n");
+                return BCM_ERR_PARM;
+            }
+
+            for (i2 = 0; i2 < 8; i2++)
+            {
+                val.arr[i2] = (bcmolt_calibration_record) cli_parm->values[i2].enum_val;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.calibration_record.arr is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, calibration_record, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_arr_calibration_record_8 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_ONU_CFG_ID_CALIBRATION_RECORD, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, calibration_record, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "calibration_record");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, calibration_record);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, calibration_record);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.tuning_granularity");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, tuning_granularity, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, tuning_granularity, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_ONU_CFG_ID_TUNING_GRANULARITY, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tuning_granularity");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, tuning_granularity);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, tuning_granularity);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.step_tuning_time");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, step_tuning_time, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, step_tuning_time, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_ONU_CFG_ID_STEP_TUNING_TIME, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "step_tuning_time");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, step_tuning_time);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, step_tuning_time);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.power_levelling_capabilities");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, power_levelling_capabilities, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, power_levelling_capabilities, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_ONU_CFG_ID_POWER_LEVELLING_CAPABILITIES, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "power_levelling_capabilities");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, power_levelling_capabilities);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, power_levelling_capabilities);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.request_registration_status.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_request_registration_status val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.request_registration_status.request_registration_state");
+        if (cli_parm != NULL)
+        {
+            val.request_registration_state = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.request_registration_status.request_registration_state is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.request_registration_status.sma_flag");
+        if (cli_parm != NULL)
+        {
+            val.sma_flag = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.request_registration_status.sma_flag is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, request_registration_status, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_request_registration_status val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_ONU_CFG_ID_REQUEST_REGISTRATION_STATUS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, request_registration_status, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "request_registration_status");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, request_registration_status);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, request_registration_status);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_onu, onu_state) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_onu, onu_old_state) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_onu, alarm_state) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_onu, registration_encryption_keys) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_onu, current_encryption_key) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_onu, serial_number) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_onu, registration_id) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_onu, registration_id_auto_learning) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_onu, ranging_burst_profile) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_onu, data_burst_profile) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_onu, ranging_time) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_onu, disabled_after_discovery) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_onu, deactivation_reason) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_onu, all_gem_ports) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_onu, all_allocs) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_onu, extended_guard_time) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_onu, us_line_rate) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_onu, calibration_record) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_onu, tuning_granularity) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_onu, step_tuning_time) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_onu, power_levelling_capabilities) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_onu, request_registration_status))
+    {
+        BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, all_properties);
+        bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_onu, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);
+    bcmcli_log("bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_onu_stat_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_onu_stat stat;     /**< declare main API struct */
+    bcmolt_xgpon_onu_key key = { }; /**< declare key */
+    bcmos_bool clear_on_read;       /**< declare 'clear on read' flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_onu_stat stat;\n");
+    bcmcli_log("bcmolt_xgpon_onu_key key = {  };\n");
+    bcmcli_log("bcmos_bool clear_on_read;\n");
+    apicli_print_start(session, "bcmolt_stat_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ONU_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        key.onu_id = (bcmolt_xgpon_onu_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "onu_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.onu_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ONU_KEY_ID_ONU_ID, &key.onu_id);
+    bcmcli_log(";\n");
+
+    /* set stat flags from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "clear");
+    if (cli_parm != NULL)
+    {
+        clear_on_read = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "clear is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("clear_on_read = %s;\n", (clear_on_read) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* init the API struct */
+    BCMOLT_STAT_INIT(&stat, xgpon_onu, key);
+    bcmcli_log("BCMOLT_STAT_INIT(&stat, xgpon_onu, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "positive_drift");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_onu, positive_drift);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_onu, positive_drift);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "negative_drift");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_onu, negative_drift);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_onu, negative_drift);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "delimiter_miss_detection");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_onu, delimiter_miss_detection);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_onu, delimiter_miss_detection);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "bip32_errors");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_onu, bip32_errors);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_onu, bip32_errors);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_words");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_onu, rx_words);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_onu, rx_words);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "fec_corrected_symbols");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_onu, fec_corrected_symbols);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_onu, fec_corrected_symbols);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "fec_corrected_codewords");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_onu, fec_corrected_codewords);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_onu, fec_corrected_codewords);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "fec_uncorrectable_codewords");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_onu, fec_uncorrectable_codewords);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_onu, fec_uncorrectable_codewords);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "fec_codewords");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_onu, fec_codewords);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_onu, fec_codewords);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "fec_corrected_bits");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_onu, fec_corrected_bits);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_onu, fec_corrected_bits);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "xgem_key_errors");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_onu, xgem_key_errors);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_onu, xgem_key_errors);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "xgem_loss");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_onu, xgem_loss);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_onu, xgem_loss);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_ploams_mic_error");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_onu, rx_ploams_mic_error);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_onu, rx_ploams_mic_error);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_ploams_non_idle");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_onu, rx_ploams_non_idle);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_onu, rx_ploams_non_idle);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_omci");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_onu, rx_omci);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_onu, rx_omci);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_omci_packets_crc_error");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_onu, rx_omci_packets_crc_error);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_onu, rx_omci_packets_crc_error);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_bytes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_onu, rx_bytes);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_onu, rx_bytes);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_packets");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_onu, rx_packets);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_onu, rx_packets);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_bytes");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_onu, tx_bytes);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_onu, tx_bytes);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_packets");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_STAT_PROP_GET(&stat, xgpon_onu, tx_packets);
+            bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_onu, tx_packets);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_onu, positive_drift) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_onu, negative_drift) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_onu, delimiter_miss_detection) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_onu, bip32_errors) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_onu, rx_words) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_onu, fec_corrected_symbols) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_onu, fec_corrected_codewords) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_onu, fec_uncorrectable_codewords) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_onu, fec_codewords) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_onu, fec_corrected_bits) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_onu, xgem_key_errors) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_onu, xgem_loss) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_onu, rx_ploams_mic_error) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_onu, rx_ploams_non_idle) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_onu, rx_omci) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_onu, rx_omci_packets_crc_error) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_onu, rx_bytes) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_onu, rx_packets) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_onu, tx_bytes) && !BCMOLT_STAT_PROP_IS_SET(&stat, xgpon_onu, tx_packets))
+    {
+        BCMOLT_STAT_PROP_GET(&stat, xgpon_onu, all_properties);
+        bcmcli_log("BCMOLT_STAT_PROP_GET(&stat, xgpon_onu, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_stat_get(device_id, &stat.hdr, clear_on_read);
+    bcmcli_log("bcmolt_stat_get(device_id, &stat.hdr, clear_on_read);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &stat.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, stat.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_onu_oper_set_onu_state_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_onu_set_onu_state oper;    /**< declare main API struct */
+    bcmolt_xgpon_onu_key key = { };         /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_onu_set_onu_state oper;\n");
+    bcmcli_log("bcmolt_xgpon_onu_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ONU_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        key.onu_id = (bcmolt_xgpon_onu_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "onu_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.onu_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ONU_KEY_ID_ONU_ID, &key.onu_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, xgpon_onu, set_onu_state, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, xgpon_onu, set_onu_state, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "onu_state");
+    if (cli_parm != NULL)
+    {
+        bcmolt_onu_operation val;
+        val = (bcmolt_onu_operation) cli_parm->value.enum_val;
+        BCMOLT_OPER_PROP_SET(&oper, xgpon_onu, set_onu_state, onu_state, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, xgpon_onu, set_onu_state, onu_state, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_OPER, BCMOLT_XGPON_ONU_OPER_ID_SET_ONU_STATE, BCMOLT_XGPON_ONU_SET_ONU_STATE_ID_ONU_STATE, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_onu_oper_rssi_measurement_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_onu_rssi_measurement oper; /**< declare main API struct */
+    bcmolt_xgpon_onu_key key = { };         /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_onu_rssi_measurement oper;\n");
+    bcmcli_log("bcmolt_xgpon_onu_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ONU_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        key.onu_id = (bcmolt_xgpon_onu_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "onu_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.onu_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ONU_KEY_ID_ONU_ID, &key.onu_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, xgpon_onu, rssi_measurement, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, xgpon_onu, rssi_measurement, key);\n");
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_onu_proxy_ploam_packet_send(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_onu_ploam_packet proxy;    /**< declare main API struct */
+    bcmolt_xgpon_onu_key key = { };         /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_onu_ploam_packet proxy;\n");
+    bcmcli_log("bcmolt_xgpon_onu_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_proxy_send");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ONU_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        key.onu_id = (bcmolt_xgpon_onu_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "onu_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.onu_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ONU_KEY_ID_ONU_ID, &key.onu_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_PROXY_INIT(&proxy, xgpon_onu, ploam_packet, key);
+    bcmcli_log("BCMOLT_PROXY_INIT(&proxy, xgpon_onu, ploam_packet, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "default_key");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_PROXY_PROP_SET(&proxy, xgpon_onu, ploam_packet, default_key, val);
+        bcmcli_log("BCMOLT_PROXY_PROP_SET(&proxy, xgpon_onu, ploam_packet, default_key, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_PROXY, BCMOLT_XGPON_ONU_PROXY_ID_PLOAM_PACKET, BCMOLT_XGPON_ONU_PLOAM_PACKET_ID_DEFAULT_KEY, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "ploam.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_arr_u8_40 val = { };
+        cli_parm = bcmcli_find_named_parm(session, "ploam.arr");
+        if (cli_parm != NULL)
+        {
+            if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 40)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "buffer ploam.arr must have 40 bytes\n");
+                return BCM_ERR_PARM;
+            }
+
+            bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+            bcmolt_buf_read(&cli_parm->value.buffer, val.arr, 40);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ploam.arr is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_PROXY_PROP_SET(&proxy, xgpon_onu, ploam_packet, ploam, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_arr_u8_40 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_PROXY, BCMOLT_XGPON_ONU_PROXY_ID_PLOAM_PACKET, BCMOLT_XGPON_ONU_PLOAM_PACKET_ID_PLOAM, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_PROXY_PROP_SET(&proxy, xgpon_onu, ploam_packet, ploam, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_proxy_send(device_id, &proxy.hdr);
+    bcmcli_log("bcmolt_proxy_send(device_id, &proxy.hdr);\n");
+    apicli_print_complete(session, err, proxy.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_onu_proxy_cpu_packets_send(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_onu_cpu_packets proxy; /**< declare main API struct */
+    bcmolt_xgpon_onu_key key = { };     /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_onu_cpu_packets proxy;\n");
+    bcmcli_log("bcmolt_xgpon_onu_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_proxy_send");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ONU_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        key.onu_id = (bcmolt_xgpon_onu_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "onu_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.onu_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ONU_KEY_ID_ONU_ID, &key.onu_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_PROXY_INIT(&proxy, xgpon_onu, cpu_packets, key);
+    bcmcli_log("BCMOLT_PROXY_INIT(&proxy, xgpon_onu, cpu_packets, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "packet_type");
+    if (cli_parm != NULL)
+    {
+        bcmolt_packet_type val;
+        val = (bcmolt_packet_type) cli_parm->value.enum_val;
+        BCMOLT_PROXY_PROP_SET(&proxy, xgpon_onu, cpu_packets, packet_type, val);
+        bcmcli_log("BCMOLT_PROXY_PROP_SET(&proxy, xgpon_onu, cpu_packets, packet_type, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_PROXY, BCMOLT_XGPON_ONU_PROXY_ID_CPU_PACKETS, BCMOLT_XGPON_ONU_CPU_PACKETS_ID_PACKET_TYPE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "calc_crc");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_PROXY_PROP_SET(&proxy, xgpon_onu, cpu_packets, calc_crc, val);
+        bcmcli_log("BCMOLT_PROXY_PROP_SET(&proxy, xgpon_onu, cpu_packets, calc_crc, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_PROXY, BCMOLT_XGPON_ONU_PROXY_ID_CPU_PACKETS, BCMOLT_XGPON_ONU_CPU_PACKETS_ID_CALC_CRC, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "number_of_packets");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_PROXY_PROP_SET(&proxy, xgpon_onu, cpu_packets, number_of_packets, val);
+        bcmcli_log("BCMOLT_PROXY_PROP_SET(&proxy, xgpon_onu, cpu_packets, number_of_packets, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_PROXY, BCMOLT_XGPON_ONU_PROXY_ID_CPU_PACKETS, BCMOLT_XGPON_ONU_CPU_PACKETS_ID_NUMBER_OF_PACKETS, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "packet_size");
+    if (cli_parm != NULL)
+    {
+        uint16_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_PROXY_PROP_SET(&proxy, xgpon_onu, cpu_packets, packet_size, val);
+        bcmcli_log("BCMOLT_PROXY_PROP_SET(&proxy, xgpon_onu, cpu_packets, packet_size, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_PROXY, BCMOLT_XGPON_ONU_PROXY_ID_CPU_PACKETS, BCMOLT_XGPON_ONU_CPU_PACKETS_ID_PACKET_SIZE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "buffer");
+    if (cli_parm != NULL)
+    {
+        bcmolt_u8_list_u32_max_2048 val = { };
+        val.len = bcmolt_buf_get_used(&cli_parm->value.buffer);
+        val.val = apicli_byte_pool_calloc(byte_pool, val.len);
+        if (val.val == NULL)
+        {
+            apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+            return BCM_ERR_NOMEM;
+        }
+
+        bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+        bcmolt_buf_read(&cli_parm->value.buffer, val.val, val.len);
+        BCMOLT_PROXY_PROP_SET(&proxy, xgpon_onu, cpu_packets, buffer, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_u8_list_u32_max_2048 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_PROXY, BCMOLT_XGPON_ONU_PROXY_ID_CPU_PACKETS, BCMOLT_XGPON_ONU_CPU_PACKETS_ID_BUFFER, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_PROXY_PROP_SET(&proxy, xgpon_onu, cpu_packets, buffer, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_proxy_send(device_id, &proxy.hdr);
+    bcmcli_log("bcmolt_proxy_send(device_id, &proxy.hdr);\n");
+    apicli_print_complete(session, err, proxy.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_onu_oper_request_registration_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_onu_request_registration oper; /**< declare main API struct */
+    bcmolt_xgpon_onu_key key = { };             /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_onu_request_registration oper;\n");
+    bcmcli_log("bcmolt_xgpon_onu_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ONU_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        key.onu_id = (bcmolt_xgpon_onu_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "onu_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.onu_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ONU_KEY_ID_ONU_ID, &key.onu_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, xgpon_onu, request_registration, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, xgpon_onu, request_registration, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "sma_flag");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_OPER_PROP_SET(&oper, xgpon_onu, request_registration, sma_flag, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, xgpon_onu, request_registration, sma_flag, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_OPER, BCMOLT_XGPON_ONU_OPER_ID_REQUEST_REGISTRATION, BCMOLT_XGPON_ONU_REQUEST_REGISTRATION_ID_SMA_FLAG, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_onu_oper_change_power_levelling_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_onu_change_power_levelling oper;   /**< declare main API struct */
+    bcmolt_xgpon_onu_key key = { };                 /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_onu_change_power_levelling oper;\n");
+    bcmcli_log("bcmolt_xgpon_onu_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ONU_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        key.onu_id = (bcmolt_xgpon_onu_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "onu_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.onu_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ONU_KEY_ID_ONU_ID, &key.onu_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, xgpon_onu, change_power_levelling, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, xgpon_onu, change_power_levelling, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "control");
+    if (cli_parm != NULL)
+    {
+        bcmolt_power_levelling_control val;
+        val = (bcmolt_power_levelling_control) cli_parm->value.enum_val;
+        BCMOLT_OPER_PROP_SET(&oper, xgpon_onu, change_power_levelling, control, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, xgpon_onu, change_power_levelling, control, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_OPER, BCMOLT_XGPON_ONU_OPER_ID_CHANGE_POWER_LEVELLING, BCMOLT_XGPON_ONU_CHANGE_POWER_LEVELLING_ID_CONTROL, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "attenuation");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_OPER_PROP_SET(&oper, xgpon_onu, change_power_levelling, attenuation, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, xgpon_onu, change_power_levelling, attenuation, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_OPER, BCMOLT_XGPON_ONU_OPER_ID_CHANGE_POWER_LEVELLING, BCMOLT_XGPON_ONU_CHANGE_POWER_LEVELLING_ID_ATTENUATION, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_onu_oper_get_power_level_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_onu_get_power_level oper;  /**< declare main API struct */
+    bcmolt_xgpon_onu_key key = { };         /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_onu_get_power_level oper;\n");
+    bcmcli_log("bcmolt_xgpon_onu_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ONU_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        key.onu_id = (bcmolt_xgpon_onu_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "onu_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.onu_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ONU_KEY_ID_ONU_ID, &key.onu_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, xgpon_onu, get_power_level, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, xgpon_onu, get_power_level, key);\n");
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_onu_oper_get_power_consumption_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_onu_get_power_consumption oper;    /**< declare main API struct */
+    bcmolt_xgpon_onu_key key = { };                 /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_onu_get_power_consumption oper;\n");
+    bcmcli_log("bcmolt_xgpon_onu_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ONU_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        key.onu_id = (bcmolt_xgpon_onu_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "onu_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.onu_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ONU_KEY_ID_ONU_ID, &key.onu_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, xgpon_onu, get_power_consumption, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, xgpon_onu, get_power_consumption, key);\n");
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_onu_oper_adjust_tx_wavelength_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_onu_adjust_tx_wavelength oper; /**< declare main API struct */
+    bcmolt_xgpon_onu_key key = { };             /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_onu_adjust_tx_wavelength oper;\n");
+    bcmcli_log("bcmolt_xgpon_onu_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ONU_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        key.onu_id = (bcmolt_xgpon_onu_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "onu_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.onu_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ONU_KEY_ID_ONU_ID, &key.onu_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, xgpon_onu, adjust_tx_wavelength, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, xgpon_onu, adjust_tx_wavelength, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "frequency_adjustment_direction");
+    if (cli_parm != NULL)
+    {
+        bcmolt_frequency_adjustment_direction val;
+        val = (bcmolt_frequency_adjustment_direction) cli_parm->value.enum_val;
+        BCMOLT_OPER_PROP_SET(&oper, xgpon_onu, adjust_tx_wavelength, frequency_adjustment_direction, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, xgpon_onu, adjust_tx_wavelength, frequency_adjustment_direction, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_OPER, BCMOLT_XGPON_ONU_OPER_ID_ADJUST_TX_WAVELENGTH, BCMOLT_XGPON_ONU_ADJUST_TX_WAVELENGTH_ID_FREQUENCY_ADJUSTMENT_DIRECTION, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "frequency_adjustment_size");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_OPER_PROP_SET(&oper, xgpon_onu, adjust_tx_wavelength, frequency_adjustment_size, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, xgpon_onu, adjust_tx_wavelength, frequency_adjustment_size, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_OPER, BCMOLT_XGPON_ONU_OPER_ID_ADJUST_TX_WAVELENGTH, BCMOLT_XGPON_ONU_ADJUST_TX_WAVELENGTH_ID_FREQUENCY_ADJUSTMENT_SIZE, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_onu_oper_secure_mutual_authentication_submit(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_onu_secure_mutual_authentication oper; /**< declare main API struct */
+    bcmolt_xgpon_onu_key key = { };                     /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_onu_secure_mutual_authentication oper;\n");
+    bcmcli_log("bcmolt_xgpon_onu_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ONU_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        key.onu_id = (bcmolt_xgpon_onu_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "onu_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.onu_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ONU_KEY_ID_ONU_ID, &key.onu_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, xgpon_onu, secure_mutual_authentication, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, xgpon_onu, secure_mutual_authentication, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "master_key.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_aes_key val = { };
+        cli_parm = bcmcli_find_named_parm(session, "master_key.bytes");
+        if (cli_parm != NULL)
+        {
+            if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 16)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "buffer master_key.bytes must have 16 bytes\n");
+                return BCM_ERR_PARM;
+            }
+
+            bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+            bcmolt_buf_read(&cli_parm->value.buffer, val.bytes, 16);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "master_key.bytes is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_OPER_PROP_SET(&oper, xgpon_onu, secure_mutual_authentication, master_key, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_aes_key val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_OPER, BCMOLT_XGPON_ONU_OPER_ID_SECURE_MUTUAL_AUTHENTICATION, BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_ID_MASTER_KEY, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, xgpon_onu, secure_mutual_authentication, master_key, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "buffer");
+    if (cli_parm != NULL)
+    {
+        bcmolt_u8_list_u32_max_2048 val = { };
+        val.len = bcmolt_buf_get_used(&cli_parm->value.buffer);
+        val.val = apicli_byte_pool_calloc(byte_pool, val.len);
+        if (val.val == NULL)
+        {
+            apicli_print_complete(session, BCM_ERR_NOMEM, "\n");
+            return BCM_ERR_NOMEM;
+        }
+
+        bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+        bcmolt_buf_read(&cli_parm->value.buffer, val.val, val.len);
+        BCMOLT_OPER_PROP_SET(&oper, xgpon_onu, secure_mutual_authentication, buffer, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_u8_list_u32_max_2048 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_OPER, BCMOLT_XGPON_ONU_OPER_ID_SECURE_MUTUAL_AUTHENTICATION, BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_ID_BUFFER, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, xgpon_onu, secure_mutual_authentication, buffer, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "mic");
+    if (cli_parm != NULL)
+    {
+        uint32_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_OPER_PROP_SET(&oper, xgpon_onu, secure_mutual_authentication, mic, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, xgpon_onu, secure_mutual_authentication, mic, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_OPER, BCMOLT_XGPON_ONU_OPER_ID_SECURE_MUTUAL_AUTHENTICATION, BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_ID_MIC, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_onu_oper_onu_tuning_in_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_onu_onu_tuning_in oper;    /**< declare main API struct */
+    bcmolt_xgpon_onu_key key = { };         /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_onu_onu_tuning_in oper;\n");
+    bcmcli_log("bcmolt_xgpon_onu_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ONU_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        key.onu_id = (bcmolt_xgpon_onu_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "onu_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.onu_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ONU_KEY_ID_ONU_ID, &key.onu_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, xgpon_onu, onu_tuning_in, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, xgpon_onu, onu_tuning_in, key);\n");
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_onu_oper_onu_tuning_out_submit(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_onu_onu_tuning_out oper;   /**< declare main API struct */
+    bcmolt_xgpon_onu_key key = { };         /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_onu_onu_tuning_out oper;\n");
+    bcmcli_log("bcmolt_xgpon_onu_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_oper_submit");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ONU_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        key.onu_id = (bcmolt_xgpon_onu_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "onu_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.onu_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ONU_KEY_ID_ONU_ID, &key.onu_id);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_OPER_INIT(&oper, xgpon_onu, onu_tuning_out, key);
+    bcmcli_log("BCMOLT_OPER_INIT(&oper, xgpon_onu, onu_tuning_out, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "target_ds_pon_id.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_pon_id val = { };
+        cli_parm = bcmcli_find_named_parm(session, "target_ds_pon_id.administrative_label");
+        if (cli_parm != NULL)
+        {
+            val.administrative_label = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "target_ds_pon_id.administrative_label is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "target_ds_pon_id.dwlch_id");
+        if (cli_parm != NULL)
+        {
+            val.dwlch_id = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "target_ds_pon_id.dwlch_id is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_OPER_PROP_SET(&oper, xgpon_onu, onu_tuning_out, target_ds_pon_id, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_pon_id val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_OPER, BCMOLT_XGPON_ONU_OPER_ID_ONU_TUNING_OUT, BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_TARGET_DS_PON_ID, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, xgpon_onu, onu_tuning_out, target_ds_pon_id, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "target_us_pon_id.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_pon_id val = { };
+        cli_parm = bcmcli_find_named_parm(session, "target_us_pon_id.administrative_label");
+        if (cli_parm != NULL)
+        {
+            val.administrative_label = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "target_us_pon_id.administrative_label is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "target_us_pon_id.dwlch_id");
+        if (cli_parm != NULL)
+        {
+            val.dwlch_id = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "target_us_pon_id.dwlch_id is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_OPER_PROP_SET(&oper, xgpon_onu, onu_tuning_out, target_us_pon_id, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_pon_id val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_OPER, BCMOLT_XGPON_ONU_OPER_ID_ONU_TUNING_OUT, BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_TARGET_US_PON_ID, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, xgpon_onu, onu_tuning_out, target_us_pon_id, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "time_to_switch");
+    if (cli_parm != NULL)
+    {
+        uint32_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_OPER_PROP_SET(&oper, xgpon_onu, onu_tuning_out, time_to_switch, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, xgpon_onu, onu_tuning_out, time_to_switch, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_OPER, BCMOLT_XGPON_ONU_OPER_ID_ONU_TUNING_OUT, BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_TIME_TO_SWITCH, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rollback");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_OPER_PROP_SET(&oper, xgpon_onu, onu_tuning_out, rollback, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, xgpon_onu, onu_tuning_out, rollback, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_OPER, BCMOLT_XGPON_ONU_OPER_ID_ONU_TUNING_OUT, BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_ROLLBACK, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "status");
+    if (cli_parm != NULL)
+    {
+        bcmolt_status val;
+        val = (bcmolt_status) cli_parm->value.enum_val;
+        BCMOLT_OPER_PROP_SET(&oper, xgpon_onu, onu_tuning_out, status, val);
+        bcmcli_log("BCMOLT_OPER_PROP_SET(&oper, xgpon_onu, onu_tuning_out, status, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_OPER, BCMOLT_XGPON_ONU_OPER_ID_ONU_TUNING_OUT, BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_STATUS, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_oper_submit(device_id, &oper.hdr);
+    bcmcli_log("bcmolt_oper_submit(device_id, &oper.hdr);\n");
+    apicli_print_complete(session, err, oper.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_onu_stat_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_onu_stat_cfg stat_cfg; /**< declare main API struct */
+    bcmolt_xgpon_onu_key key = { };     /**< declare key */
+    bcmolt_xgpon_onu_stat_id stat_id;   /**< declare stat ID */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_onu_stat_cfg stat_cfg;\n");
+    bcmcli_log("bcmolt_xgpon_onu_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_stat_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ONU_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        key.onu_id = (bcmolt_xgpon_onu_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "onu_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.onu_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ONU_KEY_ID_ONU_ID, &key.onu_id);
+    bcmcli_log(";\n");
+
+    /* set stat ID from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "sub");
+    if (cli_parm != NULL)
+    {
+        stat_id = (bcmolt_xgpon_onu_stat_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    /* init the API struct */
+    switch (stat_id)
+    {
+        case BCMOLT_XGPON_ONU_STAT_ID_POSITIVE_DRIFT:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, positive_drift, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, positive_drift, key);\n");
+            break;
+        case BCMOLT_XGPON_ONU_STAT_ID_NEGATIVE_DRIFT:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, negative_drift, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, negative_drift, key);\n");
+            break;
+        case BCMOLT_XGPON_ONU_STAT_ID_DELIMITER_MISS_DETECTION:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, delimiter_miss_detection, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, delimiter_miss_detection, key);\n");
+            break;
+        case BCMOLT_XGPON_ONU_STAT_ID_BIP32_ERRORS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, bip32_errors, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, bip32_errors, key);\n");
+            break;
+        case BCMOLT_XGPON_ONU_STAT_ID_RX_WORDS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, rx_words, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, rx_words, key);\n");
+            break;
+        case BCMOLT_XGPON_ONU_STAT_ID_FEC_CORRECTED_SYMBOLS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, fec_corrected_symbols, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, fec_corrected_symbols, key);\n");
+            break;
+        case BCMOLT_XGPON_ONU_STAT_ID_FEC_CORRECTED_CODEWORDS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, fec_corrected_codewords, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, fec_corrected_codewords, key);\n");
+            break;
+        case BCMOLT_XGPON_ONU_STAT_ID_FEC_UNCORRECTABLE_CODEWORDS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, fec_uncorrectable_codewords, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, fec_uncorrectable_codewords, key);\n");
+            break;
+        case BCMOLT_XGPON_ONU_STAT_ID_FEC_CODEWORDS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, fec_codewords, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, fec_codewords, key);\n");
+            break;
+        case BCMOLT_XGPON_ONU_STAT_ID_FEC_CORRECTED_BITS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, fec_corrected_bits, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, fec_corrected_bits, key);\n");
+            break;
+        case BCMOLT_XGPON_ONU_STAT_ID_XGEM_KEY_ERRORS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, xgem_key_errors, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, xgem_key_errors, key);\n");
+            break;
+        case BCMOLT_XGPON_ONU_STAT_ID_XGEM_LOSS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, xgem_loss, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, xgem_loss, key);\n");
+            break;
+        case BCMOLT_XGPON_ONU_STAT_ID_RX_PLOAMS_MIC_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, rx_ploams_mic_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, rx_ploams_mic_error, key);\n");
+            break;
+        case BCMOLT_XGPON_ONU_STAT_ID_RX_PLOAMS_NON_IDLE:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, rx_ploams_non_idle, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, rx_ploams_non_idle, key);\n");
+            break;
+        case BCMOLT_XGPON_ONU_STAT_ID_RX_OMCI:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, rx_omci, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, rx_omci, key);\n");
+            break;
+        case BCMOLT_XGPON_ONU_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, rx_omci_packets_crc_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, rx_omci_packets_crc_error, key);\n");
+            break;
+        case BCMOLT_XGPON_ONU_STAT_ID_RX_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, rx_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, rx_bytes, key);\n");
+            break;
+        case BCMOLT_XGPON_ONU_STAT_ID_RX_PACKETS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, rx_packets, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, rx_packets, key);\n");
+            break;
+        case BCMOLT_XGPON_ONU_STAT_ID_TX_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, tx_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, tx_bytes, key);\n");
+            break;
+        case BCMOLT_XGPON_ONU_STAT_ID_TX_PACKETS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, tx_packets, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, tx_packets, key);\n");
+            break;
+        default:
+            apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+            return BCM_ERR_RANGE;
+    }
+
+    /* call API */
+    err = bcmolt_stat_cfg_get(device_id, &stat_cfg.hdr);
+    bcmcli_log("bcmolt_stat_cfg_get(device_id, &stat_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &stat_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, stat_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_onu_stat_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_onu_stat_cfg stat_cfg; /**< declare main API struct */
+    bcmolt_xgpon_onu_key key = { };     /**< declare key */
+    bcmolt_xgpon_onu_stat_id stat_id;   /**< declare stat ID */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_onu_stat_cfg stat_cfg;\n");
+    bcmcli_log("bcmolt_xgpon_onu_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_stat_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ONU_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "onu_id");
+    if (cli_parm != NULL)
+    {
+        key.onu_id = (bcmolt_xgpon_onu_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "onu_id is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.onu_id = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_ONU_KEY_ID_ONU_ID, &key.onu_id);
+    bcmcli_log(";\n");
+
+    /* set stat ID from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "sub");
+    if (cli_parm != NULL)
+    {
+        stat_id = (bcmolt_xgpon_onu_stat_id) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    /* init the API struct */
+    switch (stat_id)
+    {
+        case BCMOLT_XGPON_ONU_STAT_ID_POSITIVE_DRIFT:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, positive_drift, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, positive_drift, key);\n");
+            break;
+        case BCMOLT_XGPON_ONU_STAT_ID_NEGATIVE_DRIFT:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, negative_drift, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, negative_drift, key);\n");
+            break;
+        case BCMOLT_XGPON_ONU_STAT_ID_DELIMITER_MISS_DETECTION:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, delimiter_miss_detection, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, delimiter_miss_detection, key);\n");
+            break;
+        case BCMOLT_XGPON_ONU_STAT_ID_BIP32_ERRORS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, bip32_errors, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, bip32_errors, key);\n");
+            break;
+        case BCMOLT_XGPON_ONU_STAT_ID_RX_WORDS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, rx_words, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, rx_words, key);\n");
+            break;
+        case BCMOLT_XGPON_ONU_STAT_ID_FEC_CORRECTED_SYMBOLS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, fec_corrected_symbols, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, fec_corrected_symbols, key);\n");
+            break;
+        case BCMOLT_XGPON_ONU_STAT_ID_FEC_CORRECTED_CODEWORDS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, fec_corrected_codewords, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, fec_corrected_codewords, key);\n");
+            break;
+        case BCMOLT_XGPON_ONU_STAT_ID_FEC_UNCORRECTABLE_CODEWORDS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, fec_uncorrectable_codewords, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, fec_uncorrectable_codewords, key);\n");
+            break;
+        case BCMOLT_XGPON_ONU_STAT_ID_FEC_CODEWORDS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, fec_codewords, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, fec_codewords, key);\n");
+            break;
+        case BCMOLT_XGPON_ONU_STAT_ID_FEC_CORRECTED_BITS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, fec_corrected_bits, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, fec_corrected_bits, key);\n");
+            break;
+        case BCMOLT_XGPON_ONU_STAT_ID_XGEM_KEY_ERRORS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, xgem_key_errors, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, xgem_key_errors, key);\n");
+            break;
+        case BCMOLT_XGPON_ONU_STAT_ID_XGEM_LOSS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, xgem_loss, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, xgem_loss, key);\n");
+            break;
+        case BCMOLT_XGPON_ONU_STAT_ID_RX_PLOAMS_MIC_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, rx_ploams_mic_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, rx_ploams_mic_error, key);\n");
+            break;
+        case BCMOLT_XGPON_ONU_STAT_ID_RX_PLOAMS_NON_IDLE:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, rx_ploams_non_idle, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, rx_ploams_non_idle, key);\n");
+            break;
+        case BCMOLT_XGPON_ONU_STAT_ID_RX_OMCI:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, rx_omci, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, rx_omci, key);\n");
+            break;
+        case BCMOLT_XGPON_ONU_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, rx_omci_packets_crc_error, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, rx_omci_packets_crc_error, key);\n");
+            break;
+        case BCMOLT_XGPON_ONU_STAT_ID_RX_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, rx_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, rx_bytes, key);\n");
+            break;
+        case BCMOLT_XGPON_ONU_STAT_ID_RX_PACKETS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, rx_packets, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, rx_packets, key);\n");
+            break;
+        case BCMOLT_XGPON_ONU_STAT_ID_TX_BYTES:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, tx_bytes, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, tx_bytes, key);\n");
+            break;
+        case BCMOLT_XGPON_ONU_STAT_ID_TX_PACKETS:
+            BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, tx_packets, key);
+            bcmcli_log("BCMOLT_STAT_CFG_INIT(&stat_cfg, xgpon_onu, tx_packets, key);\n");
+            break;
+        default:
+            apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+            return BCM_ERR_RANGE;
+    }
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_stat_alarm_config val = { };
+        cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.trigger.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.type");
+            if (cli_parm != NULL)
+            {
+                val.trigger.type = (bcmolt_stat_condition_type) cli_parm->value.enum_val;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.type is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            switch (val.trigger.type)
+            {
+                case BCMOLT_STAT_CONDITION_TYPE_RATE_THRESHOLD:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.rising");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_threshold.rising = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.rising is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.falling");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_threshold.falling = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.falling is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_RATE_RANGE:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.upper");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_range.upper = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.upper is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.lower");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.rate_range.lower = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.lower is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_VALUE_THRESHOLD:
+                    cli_parm = bcmcli_find_named_parm(session, "cfg.trigger.limit");
+                    if (cli_parm != NULL)
+                    {
+                        val.trigger.u.value_threshold.limit = cli_parm->value.unumber64;
+                    }
+                    else
+                    {
+                        apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger.limit is not set\n");
+                        return BCM_ERR_PARM;
+                    }
+                    break;
+                case BCMOLT_STAT_CONDITION_TYPE_NONE:
+                    break;
+                default:
+                    apicli_print_complete(session, BCM_ERR_RANGE, "\n");
+                    return BCM_ERR_RANGE;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cfg.trigger is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_parm_by_prefix(session, "cfg.soak.");
+        if (cli_parm != NULL)
+        {
+            cli_parm = bcmcli_find_named_parm(session, "cfg.soak.active_soak_time");
+            if (cli_parm != NULL)
+            {
+                val.soak.active_soak_time = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak.active_soak_time is not set\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "cfg.soak.clear_soak_time");
+            if (cli_parm != NULL)
+            {
+                val.soak.clear_soak_time = cli_parm->value.unumber;
+            }
+            else
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak.clear_soak_time is not set\n");
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "cfg.soak is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_STAT_CFG_PROP_SET(&stat_cfg, xgpon_onu, cfg, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_stat_alarm_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_STAT_CFG, 0, BCMOLT_XGPON_ONU_STAT_CFG_ID_CFG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_STAT_CFG_PROP_SET(&stat_cfg, xgpon_onu, cfg, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    /* call API */
+    err = bcmolt_stat_cfg_set(device_id, &stat_cfg.hdr);
+    bcmcli_log("bcmolt_stat_cfg_set(device_id, &stat_cfg.hdr);\n");
+    apicli_print_complete(session, err, stat_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_onu_auto_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_onu_auto_cfg auto_cfg; /**< declare main API struct */
+    bcmolt_xgpon_onu_key key = { };     /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_onu_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_xgpon_onu_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_get");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, xgpon_onu, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, xgpon_onu, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "dfi");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, dfi);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, dfi);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "dgi");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, dgi);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, dgi);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "dowi");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, dowi);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, dowi);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "invalid_dbru_report");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, invalid_dbru_report);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, invalid_dbru_report);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "key_exchange_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, key_exchange_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, key_exchange_completed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "key_exchange_cycle_skipped");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, key_exchange_cycle_skipped);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, key_exchange_cycle_skipped);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "key_exchange_key_mismatch");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, key_exchange_key_mismatch);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, key_exchange_key_mismatch);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "key_exchange_key_request_timeout");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, key_exchange_key_request_timeout);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, key_exchange_key_request_timeout);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "looci");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, looci);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, looci);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_activation_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, onu_activation_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, onu_activation_completed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_alarm");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, onu_alarm);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, onu_alarm);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_deactivation_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, onu_deactivation_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, onu_deactivation_completed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_disable_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, onu_disable_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, onu_disable_completed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_enable_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, onu_enable_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, onu_enable_completed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_tuning_in_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, onu_tuning_in_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, onu_tuning_in_completed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_tuning_out_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, onu_tuning_out_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, onu_tuning_out_completed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "optical_reflection");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, optical_reflection);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, optical_reflection);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "possible_drift");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, possible_drift);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, possible_drift);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "power_consumption_report");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, power_consumption_report);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, power_consumption_report);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "power_level_report");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, power_level_report);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, power_level_report);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "power_management_state_change");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, power_management_state_change);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, power_management_state_change);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "pqsi");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, pqsi);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, pqsi);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ranging_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, ranging_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, ranging_completed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "registration_id");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, registration_id);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, registration_id);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rssi_measurement_completed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, rssi_measurement_completed);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, rssi_measurement_completed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "sdi");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, sdi);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, sdi);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "secure_mutual_authentication_failure");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, secure_mutual_authentication_failure);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, secure_mutual_authentication_failure);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "sfi");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, sfi);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, sfi);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_cleared");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, stat_alarm_cleared);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, stat_alarm_cleared);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_raised");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, stat_alarm_raised);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, stat_alarm_raised);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "sufi");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, sufi);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, sufi);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tiwi");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, tiwi);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, tiwi);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tuning_response");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, tuning_response);
+            bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, tuning_response);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_onu, dfi) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_onu, dgi) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_onu, dowi) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_onu, invalid_dbru_report) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_onu, key_exchange_completed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_onu, key_exchange_cycle_skipped) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_onu, key_exchange_key_mismatch) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_onu, key_exchange_key_request_timeout) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_onu, looci) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_onu, onu_activation_completed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_onu, onu_alarm) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_onu, onu_deactivation_completed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_onu, onu_disable_completed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_onu, onu_enable_completed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_onu, onu_tuning_in_completed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_onu, onu_tuning_out_completed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_onu, optical_reflection) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_onu, possible_drift) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_onu, power_consumption_report) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_onu, power_level_report) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_onu, power_management_state_change) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_onu, pqsi) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_onu, ranging_completed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_onu, registration_id) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_onu, rssi_measurement_completed) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_onu, sdi) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_onu, secure_mutual_authentication_failure) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_onu, sfi) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_onu, stat_alarm_cleared) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_onu, stat_alarm_raised) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_onu, sufi) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_onu, tiwi) && !BCMOLT_AUTO_CFG_PROP_IS_SET(&auto_cfg, xgpon_onu, tuning_response))
+    {
+        BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, all_properties);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_GET(&auto_cfg, xgpon_onu, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_get(device_id, &auto_cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &auto_cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_onu_auto_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_onu_auto_cfg auto_cfg; /**< declare main API struct */
+    bcmolt_xgpon_onu_key key = { };     /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_onu_auto_cfg auto_cfg;\n");
+    bcmcli_log("bcmolt_xgpon_onu_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_auto_cfg_set");
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&auto_cfg, xgpon_onu, key);
+    bcmcli_log("BCMOLT_AUTO_CFG_INIT(&auto_cfg, xgpon_onu, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "dfi");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, dfi, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, dfi, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_ONU_AUTO_CFG_ID_DFI, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "dgi");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, dgi, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, dgi, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_ONU_AUTO_CFG_ID_DGI, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "dowi");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, dowi, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, dowi, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_ONU_AUTO_CFG_ID_DOWI, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "invalid_dbru_report");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, invalid_dbru_report, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, invalid_dbru_report, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_ONU_AUTO_CFG_ID_INVALID_DBRU_REPORT, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "key_exchange_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, key_exchange_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, key_exchange_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "key_exchange_cycle_skipped");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, key_exchange_cycle_skipped, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, key_exchange_cycle_skipped, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_CYCLE_SKIPPED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "key_exchange_key_mismatch");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, key_exchange_key_mismatch, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, key_exchange_key_mismatch, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_KEY_MISMATCH, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "key_exchange_key_request_timeout");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, key_exchange_key_request_timeout, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, key_exchange_key_request_timeout, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_KEY_REQUEST_TIMEOUT, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "looci");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, looci, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, looci, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_ONU_AUTO_CFG_ID_LOOCI, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_activation_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, onu_activation_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, onu_activation_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_ACTIVATION_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_alarm");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, onu_alarm, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, onu_alarm, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_ALARM, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_deactivation_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, onu_deactivation_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, onu_deactivation_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_DEACTIVATION_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_disable_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, onu_disable_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, onu_disable_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_DISABLE_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_enable_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, onu_enable_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, onu_enable_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_ENABLE_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_tuning_in_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, onu_tuning_in_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, onu_tuning_in_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_TUNING_IN_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "onu_tuning_out_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, onu_tuning_out_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, onu_tuning_out_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_TUNING_OUT_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "optical_reflection");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, optical_reflection, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, optical_reflection, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_ONU_AUTO_CFG_ID_OPTICAL_REFLECTION, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "possible_drift");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, possible_drift, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, possible_drift, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_ONU_AUTO_CFG_ID_POSSIBLE_DRIFT, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "power_consumption_report");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, power_consumption_report, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, power_consumption_report, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_ONU_AUTO_CFG_ID_POWER_CONSUMPTION_REPORT, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "power_level_report");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, power_level_report, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, power_level_report, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_ONU_AUTO_CFG_ID_POWER_LEVEL_REPORT, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "power_management_state_change");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, power_management_state_change, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, power_management_state_change, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_ONU_AUTO_CFG_ID_POWER_MANAGEMENT_STATE_CHANGE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "pqsi");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, pqsi, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, pqsi, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_ONU_AUTO_CFG_ID_PQSI, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ranging_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, ranging_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, ranging_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_ONU_AUTO_CFG_ID_RANGING_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "registration_id");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, registration_id, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, registration_id, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_ONU_AUTO_CFG_ID_REGISTRATION_ID, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rssi_measurement_completed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, rssi_measurement_completed, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, rssi_measurement_completed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_ONU_AUTO_CFG_ID_RSSI_MEASUREMENT_COMPLETED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "sdi");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, sdi, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, sdi, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_ONU_AUTO_CFG_ID_SDI, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "secure_mutual_authentication_failure");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, secure_mutual_authentication_failure, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, secure_mutual_authentication_failure, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_ONU_AUTO_CFG_ID_SECURE_MUTUAL_AUTHENTICATION_FAILURE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "sfi");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, sfi, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, sfi, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_ONU_AUTO_CFG_ID_SFI, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_cleared");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, stat_alarm_cleared, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, stat_alarm_cleared, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_ONU_AUTO_CFG_ID_STAT_ALARM_CLEARED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "stat_alarm_raised");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, stat_alarm_raised, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, stat_alarm_raised, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_ONU_AUTO_CFG_ID_STAT_ALARM_RAISED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "sufi");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, sufi, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, sufi, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_ONU_AUTO_CFG_ID_SUFI, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tiwi");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, tiwi, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, tiwi, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_ONU_AUTO_CFG_ID_TIWI, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tuning_response");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, tuning_response, val);
+        bcmcli_log("BCMOLT_AUTO_CFG_PROP_SET(&auto_cfg, xgpon_onu, tuning_response, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_ONU, BCMOLT_MGT_GROUP_AUTO_CFG, 0, BCMOLT_XGPON_ONU_AUTO_CFG_ID_TUNING_RESPONSE, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);
+    bcmcli_log("bcmolt_auto_cfg_set(device_id, &auto_cfg.hdr);\n");
+    apicli_print_complete(session, err, auto_cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_trx_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_trx_cfg cfg;       /**< declare main API struct */
+    bcmolt_xgpon_trx_key key = { }; /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_trx_cfg cfg;\n");
+    bcmcli_log("bcmolt_xgpon_trx_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_TRX, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_TRX_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, xgpon_trx, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, xgpon_trx, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "burst_profile");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_trx, burst_profile);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_trx, burst_profile);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "transceiver_config");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_trx, transceiver_config);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_trx, transceiver_config);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "transceiver_type");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_trx, transceiver_type);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_trx, transceiver_type);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "debug");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_trx, debug);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_trx, debug);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rssi_normal_config");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_trx, rssi_normal_config);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_trx, rssi_normal_config);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rssi_ranging_config");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_trx, rssi_ranging_config);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_trx, rssi_ranging_config);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "serdes_configuration");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_trx, serdes_configuration);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_trx, serdes_configuration);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "burst_profile_delimiter_max_errors");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_trx, burst_profile_delimiter_max_errors);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_trx, burst_profile_delimiter_max_errors);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ranging_sm_patterns_at_init");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_trx, ranging_sm_patterns_at_init);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_trx, ranging_sm_patterns_at_init);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ranging_sm_patterns_ed_failure");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_trx, ranging_sm_patterns_ed_failure);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_trx, ranging_sm_patterns_ed_failure);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "reset_on_del_miss");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_trx, reset_on_del_miss);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_trx, reset_on_del_miss);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ed_state");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_trx, ed_state);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_trx, ed_state);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "invert_ed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_trx, invert_ed);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_trx, invert_ed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "end_of_burst_reset");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_trx, end_of_burst_reset);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_trx, end_of_burst_reset);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "trx_rst_polarity");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xgpon_trx, trx_rst_polarity);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_trx, trx_rst_polarity);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_trx, burst_profile) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_trx, transceiver_config) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_trx, transceiver_type) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_trx, debug) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_trx, rssi_normal_config) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_trx, rssi_ranging_config) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_trx, serdes_configuration) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_trx, burst_profile_delimiter_max_errors) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_trx, ranging_sm_patterns_at_init) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_trx, ranging_sm_patterns_ed_failure) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_trx, reset_on_del_miss) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_trx, ed_state) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_trx, invert_ed) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_trx, end_of_burst_reset) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xgpon_trx, trx_rst_polarity))
+    {
+        BCMOLT_CFG_PROP_GET(&cfg, xgpon_trx, all_properties);
+        bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xgpon_trx, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_get(device_id, &cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_trx_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_trx_cfg cfg;       /**< declare main API struct */
+    bcmolt_xgpon_trx_key key = { }; /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_trx_cfg cfg;\n");
+    bcmcli_log("bcmolt_xgpon_trx_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_TRX, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_TRX_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, xgpon_trx, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, xgpon_trx, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "burst_profile.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_arr_xgpon_burst_profile_4 val = { };
+        cli_parm = bcmcli_find_parm_by_prefix(session, "burst_profile.arr.");
+        if (cli_parm != NULL)
+        {
+            int32_t i0;
+            if (cli_parm->array_size != 4)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "array burst_profile.arr must have 4 elements\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "burst_profile.arr.profile_version");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "burst_profile.arr.profile_version is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 4; i0++)
+                {
+                    val.arr[i0].profile_version = cli_parm->values[i0].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "burst_profile.arr.is_fec_on");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "burst_profile.arr.is_fec_on is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 4; i0++)
+                {
+                    val.arr[i0].is_fec_on = cli_parm->values[i0].number;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "burst_profile.arr.delimiter_size_in_bytes");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "burst_profile.arr.delimiter_size_in_bytes is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 4; i0++)
+                {
+                    val.arr[i0].delimiter_size_in_bytes = cli_parm->values[i0].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "burst_profile.arr.delimiter_pattern_high");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "burst_profile.arr.delimiter_pattern_high is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 4; i0++)
+                {
+                    val.arr[i0].delimiter_pattern_high = cli_parm->values[i0].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "burst_profile.arr.delimiter_pattern_low");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "burst_profile.arr.delimiter_pattern_low is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 4; i0++)
+                {
+                    val.arr[i0].delimiter_pattern_low = cli_parm->values[i0].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "burst_profile.arr.preamble_length_in_bytes");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "burst_profile.arr.preamble_length_in_bytes is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 4; i0++)
+                {
+                    val.arr[i0].preamble_length_in_bytes = cli_parm->values[i0].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "burst_profile.arr.preamble_repeats_count");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "burst_profile.arr.preamble_repeats_count is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 4; i0++)
+                {
+                    val.arr[i0].preamble_repeats_count = cli_parm->values[i0].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "burst_profile.arr.preamble_pattern_high");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "burst_profile.arr.preamble_pattern_high is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 4; i0++)
+                {
+                    val.arr[i0].preamble_pattern_high = cli_parm->values[i0].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "burst_profile.arr.preamble_pattern_low");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "burst_profile.arr.preamble_pattern_low is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 4; i0++)
+                {
+                    val.arr[i0].preamble_pattern_low = cli_parm->values[i0].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "burst_profile.arr.pon_tag");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "burst_profile.arr.pon_tag is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 4; i0++)
+                {
+                    val.arr[i0].pon_tag = cli_parm->values[i0].unumber64;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "burst_profile.arr.num_of_guard_bytes");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "burst_profile.arr.num_of_guard_bytes is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 4; i0++)
+                {
+                    val.arr[i0].num_of_guard_bytes = cli_parm->values[i0].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "burst_profile.arr.is_profile_valid");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "burst_profile.arr.is_profile_valid is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 4; i0++)
+                {
+                    val.arr[i0].is_profile_valid = cli_parm->values[i0].number;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "burst_profile.arr.burst_overhead_size_in_words");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "burst_profile.arr.burst_overhead_size_in_words is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 4; i0++)
+                {
+                    val.arr[i0].burst_overhead_size_in_words = cli_parm->values[i0].unumber;
+                }
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "burst_profile.arr is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, burst_profile, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_arr_xgpon_burst_profile_4 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_TRX_CFG_ID_BURST_PROFILE, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, burst_profile, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "transceiver_config.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_arr_xgpon_trx_configuration_4 val = { };
+        cli_parm = bcmcli_find_parm_by_prefix(session, "transceiver_config.arr.");
+        if (cli_parm != NULL)
+        {
+            int32_t i1;
+            if (cli_parm->array_size != 4)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "array transceiver_config.arr must have 4 elements\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "transceiver_config.arr.trx_reset_pattern_first");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "transceiver_config.arr.trx_reset_pattern_first is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i1 = 0; i1 < 4; i1++)
+                {
+                    val.arr[i1].trx_reset_pattern_first = cli_parm->values[i1].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "transceiver_config.arr.trx_reset_pattern_middle");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "transceiver_config.arr.trx_reset_pattern_middle is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i1 = 0; i1 < 4; i1++)
+                {
+                    val.arr[i1].trx_reset_pattern_middle = cli_parm->values[i1].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "transceiver_config.arr.trx_reset_pattern_last");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "transceiver_config.arr.trx_reset_pattern_last is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i1 = 0; i1 < 4; i1++)
+                {
+                    val.arr[i1].trx_reset_pattern_last = cli_parm->values[i1].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "transceiver_config.arr.trx_reset_middle_repeats_count");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "transceiver_config.arr.trx_reset_middle_repeats_count is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i1 = 0; i1 < 4; i1++)
+                {
+                    val.arr[i1].trx_reset_middle_repeats_count = cli_parm->values[i1].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "transceiver_config.arr.trx_reset_location");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "transceiver_config.arr.trx_reset_location is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i1 = 0; i1 < 4; i1++)
+                {
+                    val.arr[i1].trx_reset_location = cli_parm->values[i1].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "transceiver_config.arr.trx_reset_polarity");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "transceiver_config.arr.trx_reset_polarity is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i1 = 0; i1 < 4; i1++)
+                {
+                    val.arr[i1].trx_reset_polarity = cli_parm->values[i1].number;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "transceiver_config.arr.bcdr_reset_pattern_first");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "transceiver_config.arr.bcdr_reset_pattern_first is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i1 = 0; i1 < 4; i1++)
+                {
+                    val.arr[i1].bcdr_reset_pattern_first = cli_parm->values[i1].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "transceiver_config.arr.bcdr_reset_pattern_middle");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "transceiver_config.arr.bcdr_reset_pattern_middle is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i1 = 0; i1 < 4; i1++)
+                {
+                    val.arr[i1].bcdr_reset_pattern_middle = cli_parm->values[i1].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "transceiver_config.arr.bcdr_reset_pattern_last");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "transceiver_config.arr.bcdr_reset_pattern_last is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i1 = 0; i1 < 4; i1++)
+                {
+                    val.arr[i1].bcdr_reset_pattern_last = cli_parm->values[i1].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "transceiver_config.arr.bcdr_reset_middle_repeats_count");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "transceiver_config.arr.bcdr_reset_middle_repeats_count is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i1 = 0; i1 < 4; i1++)
+                {
+                    val.arr[i1].bcdr_reset_middle_repeats_count = cli_parm->values[i1].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "transceiver_config.arr.bcdr_reset_location");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "transceiver_config.arr.bcdr_reset_location is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i1 = 0; i1 < 4; i1++)
+                {
+                    val.arr[i1].bcdr_reset_location = cli_parm->values[i1].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "transceiver_config.arr.bcdr_reset_polarity");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "transceiver_config.arr.bcdr_reset_polarity is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i1 = 0; i1 < 4; i1++)
+                {
+                    val.arr[i1].bcdr_reset_polarity = cli_parm->values[i1].number;
+                }
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "transceiver_config.arr is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, transceiver_config, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_arr_xgpon_trx_configuration_4 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_TRX_CFG_ID_TRANSCEIVER_CONFIG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, transceiver_config, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "transceiver_type");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_trx_type val;
+        val = (bcmolt_xgpon_trx_type) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, transceiver_type, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, transceiver_type, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_TRX_CFG_ID_TRANSCEIVER_TYPE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "debug.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_trx_debug val = { };
+        cli_parm = bcmcli_find_named_parm(session, "debug.rx_reversed_polarity");
+        if (cli_parm != NULL)
+        {
+            val.rx_reversed_polarity = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "debug.rx_reversed_polarity is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "debug.neg_out_bit");
+        if (cli_parm != NULL)
+        {
+            val.neg_out_bit = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "debug.neg_out_bit is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, debug, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_xgpon_trx_debug val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_TRX_CFG_ID_DEBUG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, debug, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "rssi_normal_config.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_rssi_normal_config val = { };
+        cli_parm = bcmcli_find_named_parm(session, "rssi_normal_config.polarity");
+        if (cli_parm != NULL)
+        {
+            val.polarity = (bcmolt_polarity) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "rssi_normal_config.polarity is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "rssi_normal_config.location");
+        if (cli_parm != NULL)
+        {
+            val.location = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "rssi_normal_config.location is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "rssi_normal_config.location_sign");
+        if (cli_parm != NULL)
+        {
+            val.location_sign = (bcmolt_sign) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "rssi_normal_config.location_sign is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "rssi_normal_config.pulse_width");
+        if (cli_parm != NULL)
+        {
+            val.pulse_width = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "rssi_normal_config.pulse_width is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "rssi_normal_config.minimum_burst");
+        if (cli_parm != NULL)
+        {
+            val.minimum_burst = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "rssi_normal_config.minimum_burst is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, rssi_normal_config, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_xgpon_rssi_normal_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_TRX_CFG_ID_RSSI_NORMAL_CONFIG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, rssi_normal_config, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "rssi_ranging_config.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_rssi_ranging_config val = { };
+        cli_parm = bcmcli_find_named_parm(session, "rssi_ranging_config.start_on_ed");
+        if (cli_parm != NULL)
+        {
+            val.start_on_ed = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "rssi_ranging_config.start_on_ed is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "rssi_ranging_config.frame_delay");
+        if (cli_parm != NULL)
+        {
+            val.frame_delay = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "rssi_ranging_config.frame_delay is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "rssi_ranging_config.word_delay");
+        if (cli_parm != NULL)
+        {
+            val.word_delay = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "rssi_ranging_config.word_delay is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "rssi_ranging_config.frame_delay_after_ed");
+        if (cli_parm != NULL)
+        {
+            val.frame_delay_after_ed = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "rssi_ranging_config.frame_delay_after_ed is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "rssi_ranging_config.word_delay_after_ed");
+        if (cli_parm != NULL)
+        {
+            val.word_delay_after_ed = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "rssi_ranging_config.word_delay_after_ed is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, rssi_ranging_config, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_xgpon_rssi_ranging_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_TRX_CFG_ID_RSSI_RANGING_CONFIG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, rssi_ranging_config, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "serdes_configuration.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_serdes_configuration val = { };
+        cli_parm = bcmcli_find_named_parm(session, "serdes_configuration.multi_ed_mode");
+        if (cli_parm != NULL)
+        {
+            val.multi_ed_mode = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "serdes_configuration.multi_ed_mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "serdes_configuration.ranging_mode");
+        if (cli_parm != NULL)
+        {
+            val.ranging_mode = (bcmolt_xgpon_serdes_ranging_mode) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "serdes_configuration.ranging_mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, serdes_configuration, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_xgpon_serdes_configuration val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_TRX_CFG_ID_SERDES_CONFIGURATION, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, serdes_configuration, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "burst_profile_delimiter_max_errors.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_arr_u8_4 val = { };
+        cli_parm = bcmcli_find_named_parm(session, "burst_profile_delimiter_max_errors.arr");
+        if (cli_parm != NULL)
+        {
+            if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 4)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "buffer burst_profile_delimiter_max_errors.arr must have 4 bytes\n");
+                return BCM_ERR_PARM;
+            }
+
+            bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+            bcmolt_buf_read(&cli_parm->value.buffer, val.arr, 4);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "burst_profile_delimiter_max_errors.arr is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, burst_profile_delimiter_max_errors, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_arr_u8_4 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_TRX_CFG_ID_BURST_PROFILE_DELIMITER_MAX_ERRORS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, burst_profile_delimiter_max_errors, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "ranging_sm_patterns_at_init.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_rx_ranging_sm_pattern val = { };
+        cli_parm = bcmcli_find_named_parm(session, "ranging_sm_patterns_at_init.trx_reset_pattern_first");
+        if (cli_parm != NULL)
+        {
+            val.trx_reset_pattern_first = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ranging_sm_patterns_at_init.trx_reset_pattern_first is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "ranging_sm_patterns_at_init.trx_reset_pattern_middle");
+        if (cli_parm != NULL)
+        {
+            val.trx_reset_pattern_middle = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ranging_sm_patterns_at_init.trx_reset_pattern_middle is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "ranging_sm_patterns_at_init.trx_reset_pattern_last");
+        if (cli_parm != NULL)
+        {
+            val.trx_reset_pattern_last = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ranging_sm_patterns_at_init.trx_reset_pattern_last is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "ranging_sm_patterns_at_init.trx_reset_middle_repeats");
+        if (cli_parm != NULL)
+        {
+            val.trx_reset_middle_repeats = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ranging_sm_patterns_at_init.trx_reset_middle_repeats is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "ranging_sm_patterns_at_init.trx_reset_location");
+        if (cli_parm != NULL)
+        {
+            val.trx_reset_location = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ranging_sm_patterns_at_init.trx_reset_location is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "ranging_sm_patterns_at_init.bcdr_reset_pattern_first");
+        if (cli_parm != NULL)
+        {
+            val.bcdr_reset_pattern_first = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ranging_sm_patterns_at_init.bcdr_reset_pattern_first is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "ranging_sm_patterns_at_init.bcdr_reset_pattern_middle");
+        if (cli_parm != NULL)
+        {
+            val.bcdr_reset_pattern_middle = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ranging_sm_patterns_at_init.bcdr_reset_pattern_middle is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "ranging_sm_patterns_at_init.bcdr_reset_pattern_last");
+        if (cli_parm != NULL)
+        {
+            val.bcdr_reset_pattern_last = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ranging_sm_patterns_at_init.bcdr_reset_pattern_last is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "ranging_sm_patterns_at_init.bcdr_reset_middle_repeats");
+        if (cli_parm != NULL)
+        {
+            val.bcdr_reset_middle_repeats = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ranging_sm_patterns_at_init.bcdr_reset_middle_repeats is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "ranging_sm_patterns_at_init.bcdr_reset_location");
+        if (cli_parm != NULL)
+        {
+            val.bcdr_reset_location = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ranging_sm_patterns_at_init.bcdr_reset_location is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "ranging_sm_patterns_at_init.bcdr_reset_polarity");
+        if (cli_parm != NULL)
+        {
+            val.bcdr_reset_polarity = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ranging_sm_patterns_at_init.bcdr_reset_polarity is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, ranging_sm_patterns_at_init, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_xgpon_rx_ranging_sm_pattern val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_TRX_CFG_ID_RANGING_SM_PATTERNS_AT_INIT, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, ranging_sm_patterns_at_init, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "ranging_sm_patterns_ed_failure.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_rx_ranging_sm_pattern val = { };
+        cli_parm = bcmcli_find_named_parm(session, "ranging_sm_patterns_ed_failure.trx_reset_pattern_first");
+        if (cli_parm != NULL)
+        {
+            val.trx_reset_pattern_first = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ranging_sm_patterns_ed_failure.trx_reset_pattern_first is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "ranging_sm_patterns_ed_failure.trx_reset_pattern_middle");
+        if (cli_parm != NULL)
+        {
+            val.trx_reset_pattern_middle = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ranging_sm_patterns_ed_failure.trx_reset_pattern_middle is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "ranging_sm_patterns_ed_failure.trx_reset_pattern_last");
+        if (cli_parm != NULL)
+        {
+            val.trx_reset_pattern_last = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ranging_sm_patterns_ed_failure.trx_reset_pattern_last is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "ranging_sm_patterns_ed_failure.trx_reset_middle_repeats");
+        if (cli_parm != NULL)
+        {
+            val.trx_reset_middle_repeats = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ranging_sm_patterns_ed_failure.trx_reset_middle_repeats is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "ranging_sm_patterns_ed_failure.trx_reset_location");
+        if (cli_parm != NULL)
+        {
+            val.trx_reset_location = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ranging_sm_patterns_ed_failure.trx_reset_location is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "ranging_sm_patterns_ed_failure.bcdr_reset_pattern_first");
+        if (cli_parm != NULL)
+        {
+            val.bcdr_reset_pattern_first = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ranging_sm_patterns_ed_failure.bcdr_reset_pattern_first is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "ranging_sm_patterns_ed_failure.bcdr_reset_pattern_middle");
+        if (cli_parm != NULL)
+        {
+            val.bcdr_reset_pattern_middle = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ranging_sm_patterns_ed_failure.bcdr_reset_pattern_middle is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "ranging_sm_patterns_ed_failure.bcdr_reset_pattern_last");
+        if (cli_parm != NULL)
+        {
+            val.bcdr_reset_pattern_last = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ranging_sm_patterns_ed_failure.bcdr_reset_pattern_last is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "ranging_sm_patterns_ed_failure.bcdr_reset_middle_repeats");
+        if (cli_parm != NULL)
+        {
+            val.bcdr_reset_middle_repeats = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ranging_sm_patterns_ed_failure.bcdr_reset_middle_repeats is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "ranging_sm_patterns_ed_failure.bcdr_reset_location");
+        if (cli_parm != NULL)
+        {
+            val.bcdr_reset_location = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ranging_sm_patterns_ed_failure.bcdr_reset_location is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "ranging_sm_patterns_ed_failure.bcdr_reset_polarity");
+        if (cli_parm != NULL)
+        {
+            val.bcdr_reset_polarity = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ranging_sm_patterns_ed_failure.bcdr_reset_polarity is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, ranging_sm_patterns_ed_failure, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_xgpon_rx_ranging_sm_pattern val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_TRX_CFG_ID_RANGING_SM_PATTERNS_ED_FAILURE, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, ranging_sm_patterns_ed_failure, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "reset_on_del_miss");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, reset_on_del_miss, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, reset_on_del_miss, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_TRX_CFG_ID_RESET_ON_DEL_MISS, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "ed_state.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_ed_state val = { };
+        cli_parm = bcmcli_find_named_parm(session, "ed_state.reset_on_ed_fail");
+        if (cli_parm != NULL)
+        {
+            val.reset_on_ed_fail = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ed_state.reset_on_ed_fail is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "ed_state.reset_on_ed_success");
+        if (cli_parm != NULL)
+        {
+            val.reset_on_ed_success = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "ed_state.reset_on_ed_success is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, ed_state, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_xgpon_ed_state val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_TRX_CFG_ID_ED_STATE, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, ed_state, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "invert_ed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, invert_ed, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, invert_ed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_TRX_CFG_ID_INVERT_ED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "end_of_burst_reset");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, end_of_burst_reset, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, end_of_burst_reset, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_TRX_CFG_ID_END_OF_BURST_RESET, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "trx_rst_polarity");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, trx_rst_polarity, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, trx_rst_polarity, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_TRX_CFG_ID_TRX_RST_POLARITY, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_set(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_set(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_trx_cfg_clear(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_trx_cfg cfg;       /**< declare main API struct */
+    bcmolt_xgpon_trx_key key = { }; /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_trx_cfg cfg;\n");
+    bcmcli_log("bcmolt_xgpon_trx_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_clear");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_TRX, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_TRX_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, xgpon_trx, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, xgpon_trx, key);\n");
+
+    /* call API */
+    err = bcmolt_cfg_clear(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_clear(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xgpon_trx_cfg_get_multi(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xgpon_trx_cfg cfg;       /**< declare main API struct */
+    bcmolt_xgpon_trx_key key = { }; /**< declare key */
+    bcmolt_msg_set *msg_set = NULL; /**< declare message set */
+    uint32_t max_msgs;              /**< declare max number of msgs to get */
+    bcmos_bool invert_filter;       /**< declare filter invert flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xgpon_trx_cfg cfg;\n");
+    bcmcli_log("bcmolt_xgpon_trx_key key = {  };\n");
+    bcmcli_log("bcmolt_msg_set* msg_set = NULL;\n");
+    bcmcli_log("uint32_t max_msgs;\n");
+    bcmcli_log("bcmos_bool invert_filter;\n");
+    apicli_print_start(session, "bcmolt_cfg_get_multi");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_xgpon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_TRX, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XGPON_TRX_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+
+    /* set max number of msgs from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "max_msgs");
+    if (cli_parm != NULL)
+    {
+        max_msgs = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "max_msgs is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("max_msgs = %d;\n", max_msgs);
+
+    /* set filter invert flag from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "filter_invert");
+    if (cli_parm != NULL)
+    {
+        invert_filter = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "filter_invert is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("invert_filter = %s;\n", (invert_filter) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* allocate message set */
+    err = apicli_msg_set_alloc(byte_pool, BCMOLT_OBJ_ID_XGPON_TRX, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    bcmcli_log("bcmolt_msg_set_alloc(BCMOLT_OBJ_ID_XGPON_TRX, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, xgpon_trx, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, xgpon_trx, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.burst_profile.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_arr_xgpon_burst_profile_4 val = { };
+        cli_parm = bcmcli_find_parm_by_prefix(session, "filter.burst_profile.arr.");
+        if (cli_parm != NULL)
+        {
+            int32_t i0;
+            if (cli_parm->array_size != 4)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "array filter.burst_profile.arr must have 4 elements\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.burst_profile.arr.profile_version");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.burst_profile.arr.profile_version is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 4; i0++)
+                {
+                    val.arr[i0].profile_version = cli_parm->values[i0].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.burst_profile.arr.is_fec_on");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.burst_profile.arr.is_fec_on is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 4; i0++)
+                {
+                    val.arr[i0].is_fec_on = cli_parm->values[i0].number;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.burst_profile.arr.delimiter_size_in_bytes");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.burst_profile.arr.delimiter_size_in_bytes is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 4; i0++)
+                {
+                    val.arr[i0].delimiter_size_in_bytes = cli_parm->values[i0].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.burst_profile.arr.delimiter_pattern_high");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.burst_profile.arr.delimiter_pattern_high is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 4; i0++)
+                {
+                    val.arr[i0].delimiter_pattern_high = cli_parm->values[i0].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.burst_profile.arr.delimiter_pattern_low");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.burst_profile.arr.delimiter_pattern_low is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 4; i0++)
+                {
+                    val.arr[i0].delimiter_pattern_low = cli_parm->values[i0].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.burst_profile.arr.preamble_length_in_bytes");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.burst_profile.arr.preamble_length_in_bytes is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 4; i0++)
+                {
+                    val.arr[i0].preamble_length_in_bytes = cli_parm->values[i0].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.burst_profile.arr.preamble_repeats_count");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.burst_profile.arr.preamble_repeats_count is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 4; i0++)
+                {
+                    val.arr[i0].preamble_repeats_count = cli_parm->values[i0].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.burst_profile.arr.preamble_pattern_high");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.burst_profile.arr.preamble_pattern_high is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 4; i0++)
+                {
+                    val.arr[i0].preamble_pattern_high = cli_parm->values[i0].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.burst_profile.arr.preamble_pattern_low");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.burst_profile.arr.preamble_pattern_low is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 4; i0++)
+                {
+                    val.arr[i0].preamble_pattern_low = cli_parm->values[i0].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.burst_profile.arr.pon_tag");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.burst_profile.arr.pon_tag is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 4; i0++)
+                {
+                    val.arr[i0].pon_tag = cli_parm->values[i0].unumber64;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.burst_profile.arr.num_of_guard_bytes");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.burst_profile.arr.num_of_guard_bytes is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 4; i0++)
+                {
+                    val.arr[i0].num_of_guard_bytes = cli_parm->values[i0].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.burst_profile.arr.is_profile_valid");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.burst_profile.arr.is_profile_valid is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 4; i0++)
+                {
+                    val.arr[i0].is_profile_valid = cli_parm->values[i0].number;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.burst_profile.arr.burst_overhead_size_in_words");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.burst_profile.arr.burst_overhead_size_in_words is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i0 = 0; i0 < 4; i0++)
+                {
+                    val.arr[i0].burst_overhead_size_in_words = cli_parm->values[i0].unumber;
+                }
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.burst_profile.arr is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, burst_profile, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_arr_xgpon_burst_profile_4 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_TRX_CFG_ID_BURST_PROFILE, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, burst_profile, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "burst_profile");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_trx, burst_profile);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_trx, burst_profile);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.transceiver_config.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_arr_xgpon_trx_configuration_4 val = { };
+        cli_parm = bcmcli_find_parm_by_prefix(session, "filter.transceiver_config.arr.");
+        if (cli_parm != NULL)
+        {
+            int32_t i1;
+            if (cli_parm->array_size != 4)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "array filter.transceiver_config.arr must have 4 elements\n");
+                return BCM_ERR_PARM;
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.transceiver_config.arr.trx_reset_pattern_first");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.transceiver_config.arr.trx_reset_pattern_first is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i1 = 0; i1 < 4; i1++)
+                {
+                    val.arr[i1].trx_reset_pattern_first = cli_parm->values[i1].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.transceiver_config.arr.trx_reset_pattern_middle");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.transceiver_config.arr.trx_reset_pattern_middle is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i1 = 0; i1 < 4; i1++)
+                {
+                    val.arr[i1].trx_reset_pattern_middle = cli_parm->values[i1].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.transceiver_config.arr.trx_reset_pattern_last");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.transceiver_config.arr.trx_reset_pattern_last is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i1 = 0; i1 < 4; i1++)
+                {
+                    val.arr[i1].trx_reset_pattern_last = cli_parm->values[i1].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.transceiver_config.arr.trx_reset_middle_repeats_count");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.transceiver_config.arr.trx_reset_middle_repeats_count is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i1 = 0; i1 < 4; i1++)
+                {
+                    val.arr[i1].trx_reset_middle_repeats_count = cli_parm->values[i1].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.transceiver_config.arr.trx_reset_location");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.transceiver_config.arr.trx_reset_location is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i1 = 0; i1 < 4; i1++)
+                {
+                    val.arr[i1].trx_reset_location = cli_parm->values[i1].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.transceiver_config.arr.trx_reset_polarity");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.transceiver_config.arr.trx_reset_polarity is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i1 = 0; i1 < 4; i1++)
+                {
+                    val.arr[i1].trx_reset_polarity = cli_parm->values[i1].number;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.transceiver_config.arr.bcdr_reset_pattern_first");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.transceiver_config.arr.bcdr_reset_pattern_first is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i1 = 0; i1 < 4; i1++)
+                {
+                    val.arr[i1].bcdr_reset_pattern_first = cli_parm->values[i1].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.transceiver_config.arr.bcdr_reset_pattern_middle");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.transceiver_config.arr.bcdr_reset_pattern_middle is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i1 = 0; i1 < 4; i1++)
+                {
+                    val.arr[i1].bcdr_reset_pattern_middle = cli_parm->values[i1].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.transceiver_config.arr.bcdr_reset_pattern_last");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.transceiver_config.arr.bcdr_reset_pattern_last is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i1 = 0; i1 < 4; i1++)
+                {
+                    val.arr[i1].bcdr_reset_pattern_last = cli_parm->values[i1].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.transceiver_config.arr.bcdr_reset_middle_repeats_count");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.transceiver_config.arr.bcdr_reset_middle_repeats_count is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i1 = 0; i1 < 4; i1++)
+                {
+                    val.arr[i1].bcdr_reset_middle_repeats_count = cli_parm->values[i1].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.transceiver_config.arr.bcdr_reset_location");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.transceiver_config.arr.bcdr_reset_location is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i1 = 0; i1 < 4; i1++)
+                {
+                    val.arr[i1].bcdr_reset_location = cli_parm->values[i1].unumber;
+                }
+            }
+
+            cli_parm = bcmcli_find_named_parm(session, "filter.transceiver_config.arr.bcdr_reset_polarity");
+            if (cli_parm != NULL)
+            {
+                if (cli_parm->array_size != 4)
+                {
+                    apicli_print_complete(session, BCM_ERR_PARM, "filter.transceiver_config.arr.bcdr_reset_polarity is a different size than other arrays in the struct\n");
+                    return BCM_ERR_PARM;
+                }
+
+                for (i1 = 0; i1 < 4; i1++)
+                {
+                    val.arr[i1].bcdr_reset_polarity = cli_parm->values[i1].number;
+                }
+            }
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.transceiver_config.arr is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, transceiver_config, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_arr_xgpon_trx_configuration_4 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_TRX_CFG_ID_TRANSCEIVER_CONFIG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, transceiver_config, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "transceiver_config");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_trx, transceiver_config);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_trx, transceiver_config);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.transceiver_type");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_trx_type val;
+        val = (bcmolt_xgpon_trx_type) cli_parm->value.enum_val;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, transceiver_type, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, transceiver_type, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_TRX_CFG_ID_TRANSCEIVER_TYPE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "transceiver_type");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_trx, transceiver_type);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_trx, transceiver_type);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.debug.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_trx_debug val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.debug.rx_reversed_polarity");
+        if (cli_parm != NULL)
+        {
+            val.rx_reversed_polarity = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.debug.rx_reversed_polarity is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.debug.neg_out_bit");
+        if (cli_parm != NULL)
+        {
+            val.neg_out_bit = (bcmolt_control_state) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.debug.neg_out_bit is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, debug, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_xgpon_trx_debug val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_TRX_CFG_ID_DEBUG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, debug, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "debug");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_trx, debug);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_trx, debug);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.rssi_normal_config.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_rssi_normal_config val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.rssi_normal_config.polarity");
+        if (cli_parm != NULL)
+        {
+            val.polarity = (bcmolt_polarity) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.rssi_normal_config.polarity is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.rssi_normal_config.location");
+        if (cli_parm != NULL)
+        {
+            val.location = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.rssi_normal_config.location is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.rssi_normal_config.location_sign");
+        if (cli_parm != NULL)
+        {
+            val.location_sign = (bcmolt_sign) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.rssi_normal_config.location_sign is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.rssi_normal_config.pulse_width");
+        if (cli_parm != NULL)
+        {
+            val.pulse_width = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.rssi_normal_config.pulse_width is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.rssi_normal_config.minimum_burst");
+        if (cli_parm != NULL)
+        {
+            val.minimum_burst = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.rssi_normal_config.minimum_burst is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, rssi_normal_config, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_xgpon_rssi_normal_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_TRX_CFG_ID_RSSI_NORMAL_CONFIG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, rssi_normal_config, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rssi_normal_config");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_trx, rssi_normal_config);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_trx, rssi_normal_config);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.rssi_ranging_config.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_rssi_ranging_config val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.rssi_ranging_config.start_on_ed");
+        if (cli_parm != NULL)
+        {
+            val.start_on_ed = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.rssi_ranging_config.start_on_ed is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.rssi_ranging_config.frame_delay");
+        if (cli_parm != NULL)
+        {
+            val.frame_delay = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.rssi_ranging_config.frame_delay is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.rssi_ranging_config.word_delay");
+        if (cli_parm != NULL)
+        {
+            val.word_delay = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.rssi_ranging_config.word_delay is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.rssi_ranging_config.frame_delay_after_ed");
+        if (cli_parm != NULL)
+        {
+            val.frame_delay_after_ed = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.rssi_ranging_config.frame_delay_after_ed is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.rssi_ranging_config.word_delay_after_ed");
+        if (cli_parm != NULL)
+        {
+            val.word_delay_after_ed = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.rssi_ranging_config.word_delay_after_ed is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, rssi_ranging_config, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_xgpon_rssi_ranging_config val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_TRX_CFG_ID_RSSI_RANGING_CONFIG, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, rssi_ranging_config, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rssi_ranging_config");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_trx, rssi_ranging_config);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_trx, rssi_ranging_config);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.serdes_configuration.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_serdes_configuration val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.serdes_configuration.multi_ed_mode");
+        if (cli_parm != NULL)
+        {
+            val.multi_ed_mode = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.serdes_configuration.multi_ed_mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.serdes_configuration.ranging_mode");
+        if (cli_parm != NULL)
+        {
+            val.ranging_mode = (bcmolt_xgpon_serdes_ranging_mode) cli_parm->value.enum_val;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.serdes_configuration.ranging_mode is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, serdes_configuration, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_xgpon_serdes_configuration val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_TRX_CFG_ID_SERDES_CONFIGURATION, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, serdes_configuration, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "serdes_configuration");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_trx, serdes_configuration);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_trx, serdes_configuration);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.burst_profile_delimiter_max_errors.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_arr_u8_4 val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.burst_profile_delimiter_max_errors.arr");
+        if (cli_parm != NULL)
+        {
+            if (bcmolt_buf_get_used(&cli_parm->value.buffer) != 4)
+            {
+                apicli_print_complete(session, BCM_ERR_PARM, "buffer filter.burst_profile_delimiter_max_errors.arr must have 4 bytes\n");
+                return BCM_ERR_PARM;
+            }
+
+            bcmolt_buf_set_pos(&cli_parm->value.buffer, 0);
+            bcmolt_buf_read(&cli_parm->value.buffer, val.arr, 4);
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.burst_profile_delimiter_max_errors.arr is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, burst_profile_delimiter_max_errors, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_arr_u8_4 val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_TRX_CFG_ID_BURST_PROFILE_DELIMITER_MAX_ERRORS, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, burst_profile_delimiter_max_errors, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "burst_profile_delimiter_max_errors");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_trx, burst_profile_delimiter_max_errors);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_trx, burst_profile_delimiter_max_errors);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.ranging_sm_patterns_at_init.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_rx_ranging_sm_pattern val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.ranging_sm_patterns_at_init.trx_reset_pattern_first");
+        if (cli_parm != NULL)
+        {
+            val.trx_reset_pattern_first = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ranging_sm_patterns_at_init.trx_reset_pattern_first is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.ranging_sm_patterns_at_init.trx_reset_pattern_middle");
+        if (cli_parm != NULL)
+        {
+            val.trx_reset_pattern_middle = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ranging_sm_patterns_at_init.trx_reset_pattern_middle is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.ranging_sm_patterns_at_init.trx_reset_pattern_last");
+        if (cli_parm != NULL)
+        {
+            val.trx_reset_pattern_last = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ranging_sm_patterns_at_init.trx_reset_pattern_last is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.ranging_sm_patterns_at_init.trx_reset_middle_repeats");
+        if (cli_parm != NULL)
+        {
+            val.trx_reset_middle_repeats = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ranging_sm_patterns_at_init.trx_reset_middle_repeats is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.ranging_sm_patterns_at_init.trx_reset_location");
+        if (cli_parm != NULL)
+        {
+            val.trx_reset_location = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ranging_sm_patterns_at_init.trx_reset_location is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.ranging_sm_patterns_at_init.bcdr_reset_pattern_first");
+        if (cli_parm != NULL)
+        {
+            val.bcdr_reset_pattern_first = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ranging_sm_patterns_at_init.bcdr_reset_pattern_first is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.ranging_sm_patterns_at_init.bcdr_reset_pattern_middle");
+        if (cli_parm != NULL)
+        {
+            val.bcdr_reset_pattern_middle = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ranging_sm_patterns_at_init.bcdr_reset_pattern_middle is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.ranging_sm_patterns_at_init.bcdr_reset_pattern_last");
+        if (cli_parm != NULL)
+        {
+            val.bcdr_reset_pattern_last = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ranging_sm_patterns_at_init.bcdr_reset_pattern_last is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.ranging_sm_patterns_at_init.bcdr_reset_middle_repeats");
+        if (cli_parm != NULL)
+        {
+            val.bcdr_reset_middle_repeats = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ranging_sm_patterns_at_init.bcdr_reset_middle_repeats is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.ranging_sm_patterns_at_init.bcdr_reset_location");
+        if (cli_parm != NULL)
+        {
+            val.bcdr_reset_location = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ranging_sm_patterns_at_init.bcdr_reset_location is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.ranging_sm_patterns_at_init.bcdr_reset_polarity");
+        if (cli_parm != NULL)
+        {
+            val.bcdr_reset_polarity = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ranging_sm_patterns_at_init.bcdr_reset_polarity is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, ranging_sm_patterns_at_init, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_xgpon_rx_ranging_sm_pattern val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_TRX_CFG_ID_RANGING_SM_PATTERNS_AT_INIT, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, ranging_sm_patterns_at_init, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ranging_sm_patterns_at_init");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_trx, ranging_sm_patterns_at_init);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_trx, ranging_sm_patterns_at_init);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.ranging_sm_patterns_ed_failure.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_rx_ranging_sm_pattern val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.ranging_sm_patterns_ed_failure.trx_reset_pattern_first");
+        if (cli_parm != NULL)
+        {
+            val.trx_reset_pattern_first = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ranging_sm_patterns_ed_failure.trx_reset_pattern_first is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.ranging_sm_patterns_ed_failure.trx_reset_pattern_middle");
+        if (cli_parm != NULL)
+        {
+            val.trx_reset_pattern_middle = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ranging_sm_patterns_ed_failure.trx_reset_pattern_middle is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.ranging_sm_patterns_ed_failure.trx_reset_pattern_last");
+        if (cli_parm != NULL)
+        {
+            val.trx_reset_pattern_last = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ranging_sm_patterns_ed_failure.trx_reset_pattern_last is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.ranging_sm_patterns_ed_failure.trx_reset_middle_repeats");
+        if (cli_parm != NULL)
+        {
+            val.trx_reset_middle_repeats = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ranging_sm_patterns_ed_failure.trx_reset_middle_repeats is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.ranging_sm_patterns_ed_failure.trx_reset_location");
+        if (cli_parm != NULL)
+        {
+            val.trx_reset_location = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ranging_sm_patterns_ed_failure.trx_reset_location is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.ranging_sm_patterns_ed_failure.bcdr_reset_pattern_first");
+        if (cli_parm != NULL)
+        {
+            val.bcdr_reset_pattern_first = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ranging_sm_patterns_ed_failure.bcdr_reset_pattern_first is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.ranging_sm_patterns_ed_failure.bcdr_reset_pattern_middle");
+        if (cli_parm != NULL)
+        {
+            val.bcdr_reset_pattern_middle = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ranging_sm_patterns_ed_failure.bcdr_reset_pattern_middle is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.ranging_sm_patterns_ed_failure.bcdr_reset_pattern_last");
+        if (cli_parm != NULL)
+        {
+            val.bcdr_reset_pattern_last = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ranging_sm_patterns_ed_failure.bcdr_reset_pattern_last is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.ranging_sm_patterns_ed_failure.bcdr_reset_middle_repeats");
+        if (cli_parm != NULL)
+        {
+            val.bcdr_reset_middle_repeats = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ranging_sm_patterns_ed_failure.bcdr_reset_middle_repeats is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.ranging_sm_patterns_ed_failure.bcdr_reset_location");
+        if (cli_parm != NULL)
+        {
+            val.bcdr_reset_location = cli_parm->value.unumber;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ranging_sm_patterns_ed_failure.bcdr_reset_location is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.ranging_sm_patterns_ed_failure.bcdr_reset_polarity");
+        if (cli_parm != NULL)
+        {
+            val.bcdr_reset_polarity = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ranging_sm_patterns_ed_failure.bcdr_reset_polarity is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, ranging_sm_patterns_ed_failure, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_xgpon_rx_ranging_sm_pattern val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_TRX_CFG_ID_RANGING_SM_PATTERNS_ED_FAILURE, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, ranging_sm_patterns_ed_failure, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ranging_sm_patterns_ed_failure");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_trx, ranging_sm_patterns_ed_failure);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_trx, ranging_sm_patterns_ed_failure);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.reset_on_del_miss");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, reset_on_del_miss, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, reset_on_del_miss, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_TRX_CFG_ID_RESET_ON_DEL_MISS, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "reset_on_del_miss");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_trx, reset_on_del_miss);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_trx, reset_on_del_miss);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_parm_by_prefix(session, "filter.ed_state.");
+    if (cli_parm != NULL)
+    {
+        bcmolt_xgpon_ed_state val = { };
+        cli_parm = bcmcli_find_named_parm(session, "filter.ed_state.reset_on_ed_fail");
+        if (cli_parm != NULL)
+        {
+            val.reset_on_ed_fail = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ed_state.reset_on_ed_fail is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        cli_parm = bcmcli_find_named_parm(session, "filter.ed_state.reset_on_ed_success");
+        if (cli_parm != NULL)
+        {
+            val.reset_on_ed_success = cli_parm->value.number;
+        }
+        else
+        {
+            apicli_print_complete(session, BCM_ERR_PARM, "filter.ed_state.reset_on_ed_success is not set\n");
+            return BCM_ERR_PARM;
+        }
+
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, ed_state, val);
+        bcmcli_log("{\n");
+        bcmcli_log("bcmolt_xgpon_ed_state val = ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_TRX_CFG_ID_ED_STATE, &val);
+        bcmcli_log(";\n");
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, ed_state, val);\n");
+        bcmcli_log("}\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "ed_state");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_trx, ed_state);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_trx, ed_state);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.invert_ed");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, invert_ed, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, invert_ed, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_TRX_CFG_ID_INVERT_ED, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "invert_ed");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_trx, invert_ed);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_trx, invert_ed);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.end_of_burst_reset");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, end_of_burst_reset, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, end_of_burst_reset, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_TRX_CFG_ID_END_OF_BURST_RESET, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "end_of_burst_reset");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_trx, end_of_burst_reset);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_trx, end_of_burst_reset);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.trx_rst_polarity");
+    if (cli_parm != NULL)
+    {
+        bcmos_bool val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, trx_rst_polarity, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xgpon_trx, trx_rst_polarity, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XGPON_TRX, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XGPON_TRX_CFG_ID_TRX_RST_POLARITY, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "trx_rst_polarity");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_trx, trx_rst_polarity);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_trx, trx_rst_polarity);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_trx, burst_profile) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_trx, transceiver_config) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_trx, transceiver_type) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_trx, debug) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_trx, rssi_normal_config) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_trx, rssi_ranging_config) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_trx, serdes_configuration) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_trx, burst_profile_delimiter_max_errors) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_trx, ranging_sm_patterns_at_init) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_trx, ranging_sm_patterns_ed_failure) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_trx, reset_on_del_miss) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_trx, ed_state) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_trx, invert_ed) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_trx, end_of_burst_reset) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xgpon_trx, trx_rst_polarity))
+    {
+        BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_trx, all_properties);
+        bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xgpon_trx, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);
+    bcmcli_log("bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xpon_serdes_cfg_get(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xpon_serdes_cfg cfg;         /**< declare main API struct */
+    bcmolt_xpon_serdes_key key = { };   /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xpon_serdes_cfg cfg;\n");
+    bcmcli_log("bcmolt_xpon_serdes_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_get");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_pon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XPON_SERDES, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XPON_SERDES_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "instance");
+    if (cli_parm != NULL)
+    {
+        key.instance = (bcmolt_serdes_instance) cli_parm->value.enum_val;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "instance is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.instance = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XPON_SERDES, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XPON_SERDES_KEY_ID_INSTANCE, &key.instance);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, xpon_serdes, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, xpon_serdes, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "rx_vga");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xpon_serdes, rx_vga);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xpon_serdes, rx_vga);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_pf");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xpon_serdes, rx_pf);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xpon_serdes, rx_pf);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_lfpf");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xpon_serdes, rx_lfpf);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xpon_serdes, rx_lfpf);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_dfe1");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xpon_serdes, rx_dfe1);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xpon_serdes, rx_dfe1);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_dfe2");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xpon_serdes, rx_dfe2);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xpon_serdes, rx_dfe2);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_dfe3");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xpon_serdes, rx_dfe3);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xpon_serdes, rx_dfe3);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_dfe4");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xpon_serdes, rx_dfe4);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xpon_serdes, rx_dfe4);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_dfe5");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xpon_serdes, rx_dfe5);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xpon_serdes, rx_dfe5);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_pre");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xpon_serdes, tx_pre);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xpon_serdes, tx_pre);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_main");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xpon_serdes, tx_main);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xpon_serdes, tx_main);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_post1");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xpon_serdes, tx_post1);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xpon_serdes, tx_post1);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_post2");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xpon_serdes, tx_post2);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xpon_serdes, tx_post2);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_post3");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xpon_serdes, tx_post3);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xpon_serdes, tx_post3);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_amp");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_CFG_PROP_GET(&cfg, xpon_serdes, tx_amp);
+            bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xpon_serdes, tx_amp);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_CFG_PROP_IS_SET(&cfg, xpon_serdes, rx_vga) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xpon_serdes, rx_pf) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xpon_serdes, rx_lfpf) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xpon_serdes, rx_dfe1) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xpon_serdes, rx_dfe2) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xpon_serdes, rx_dfe3) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xpon_serdes, rx_dfe4) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xpon_serdes, rx_dfe5) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xpon_serdes, tx_pre) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xpon_serdes, tx_main) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xpon_serdes, tx_post1) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xpon_serdes, tx_post2) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xpon_serdes, tx_post3) && !BCMOLT_CFG_PROP_IS_SET(&cfg, xpon_serdes, tx_amp))
+    {
+        BCMOLT_CFG_PROP_GET(&cfg, xpon_serdes, all_properties);
+        bcmcli_log("BCMOLT_CFG_PROP_GET(&cfg, xpon_serdes, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_get(device_id, &cfg.hdr);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xpon_serdes_cfg_set(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xpon_serdes_cfg cfg;         /**< declare main API struct */
+    bcmolt_xpon_serdes_key key = { };   /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xpon_serdes_cfg cfg;\n");
+    bcmcli_log("bcmolt_xpon_serdes_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_set");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_pon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XPON_SERDES, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XPON_SERDES_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "instance");
+    if (cli_parm != NULL)
+    {
+        key.instance = (bcmolt_serdes_instance) cli_parm->value.enum_val;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "instance is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.instance = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XPON_SERDES, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XPON_SERDES_KEY_ID_INSTANCE, &key.instance);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, xpon_serdes, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, xpon_serdes, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "rx_vga");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, rx_vga, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, rx_vga, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XPON_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XPON_SERDES_CFG_ID_RX_VGA, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_pf");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, rx_pf, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, rx_pf, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XPON_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XPON_SERDES_CFG_ID_RX_PF, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_lfpf");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, rx_lfpf, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, rx_lfpf, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XPON_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XPON_SERDES_CFG_ID_RX_LFPF, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_dfe1");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, rx_dfe1, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, rx_dfe1, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XPON_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XPON_SERDES_CFG_ID_RX_DFE1, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_dfe2");
+    if (cli_parm != NULL)
+    {
+        int8_t val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, rx_dfe2, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, rx_dfe2, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XPON_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XPON_SERDES_CFG_ID_RX_DFE2, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_dfe3");
+    if (cli_parm != NULL)
+    {
+        int8_t val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, rx_dfe3, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, rx_dfe3, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XPON_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XPON_SERDES_CFG_ID_RX_DFE3, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_dfe4");
+    if (cli_parm != NULL)
+    {
+        int8_t val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, rx_dfe4, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, rx_dfe4, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XPON_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XPON_SERDES_CFG_ID_RX_DFE4, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_dfe5");
+    if (cli_parm != NULL)
+    {
+        int8_t val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, rx_dfe5, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, rx_dfe5, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XPON_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XPON_SERDES_CFG_ID_RX_DFE5, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_pre");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, tx_pre, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, tx_pre, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XPON_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XPON_SERDES_CFG_ID_TX_PRE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_main");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, tx_main, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, tx_main, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XPON_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XPON_SERDES_CFG_ID_TX_MAIN, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_post1");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, tx_post1, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, tx_post1, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XPON_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XPON_SERDES_CFG_ID_TX_POST1, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_post2");
+    if (cli_parm != NULL)
+    {
+        int8_t val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, tx_post2, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, tx_post2, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XPON_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XPON_SERDES_CFG_ID_TX_POST2, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_post3");
+    if (cli_parm != NULL)
+    {
+        int8_t val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, tx_post3, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, tx_post3, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XPON_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XPON_SERDES_CFG_ID_TX_POST3, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_amp");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, tx_amp, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, tx_amp, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XPON_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XPON_SERDES_CFG_ID_TX_AMP, &val);
+        bcmcli_log(");\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_set(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_set(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xpon_serdes_cfg_clear(bcmolt_devid device_id, bcmcli_session *session)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xpon_serdes_cfg cfg;         /**< declare main API struct */
+    bcmolt_xpon_serdes_key key = { };   /**< declare key */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xpon_serdes_cfg cfg;\n");
+    bcmcli_log("bcmolt_xpon_serdes_key key = {  };\n");
+    apicli_print_start(session, "bcmolt_cfg_clear");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_pon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XPON_SERDES, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XPON_SERDES_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "instance");
+    if (cli_parm != NULL)
+    {
+        key.instance = (bcmolt_serdes_instance) cli_parm->value.enum_val;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "instance is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.instance = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XPON_SERDES, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XPON_SERDES_KEY_ID_INSTANCE, &key.instance);
+    bcmcli_log(";\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, xpon_serdes, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, xpon_serdes, key);\n");
+
+    /* call API */
+    err = bcmolt_cfg_clear(device_id, &cfg.hdr);
+    bcmcli_log("bcmolt_cfg_clear(device_id, &cfg.hdr);\n");
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_xpon_serdes_cfg_get_multi(bcmolt_devid device_id, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmos_errno err;
+    bcmolt_xpon_serdes_cfg cfg;         /**< declare main API struct */
+    bcmolt_xpon_serdes_key key = { };   /**< declare key */
+    bcmolt_msg_set *msg_set = NULL;     /**< declare message set */
+    uint32_t max_msgs;                  /**< declare max number of msgs to get */
+    bcmos_bool invert_filter;           /**< declare filter invert flag */
+    bcmcli_log("bcmolt_devid device_id = %d;\n", device_id);
+    bcmcli_log("bcmolt_xpon_serdes_cfg cfg;\n");
+    bcmcli_log("bcmolt_xpon_serdes_key key = {  };\n");
+    bcmcli_log("bcmolt_msg_set* msg_set = NULL;\n");
+    bcmcli_log("uint32_t max_msgs;\n");
+    bcmcli_log("bcmos_bool invert_filter;\n");
+    apicli_print_start(session, "bcmolt_cfg_get_multi");
+
+    /* build key from CLI parameters */
+    cli_parm = bcmcli_find_named_parm(session, "pon_ni");
+    if (cli_parm != NULL)
+    {
+        key.pon_ni = (bcmolt_pon_ni) cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "pon_ni is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.pon_ni = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XPON_SERDES, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XPON_SERDES_KEY_ID_PON_NI, &key.pon_ni);
+    bcmcli_log(";\n");
+    cli_parm = bcmcli_find_named_parm(session, "instance");
+    if (cli_parm != NULL)
+    {
+        key.instance = (bcmolt_serdes_instance) cli_parm->value.enum_val;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "instance is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("key.instance = ");
+    apicli_log_prop_val(BCMOLT_OBJ_ID_XPON_SERDES, BCMOLT_MGT_GROUP_KEY, 0, BCMOLT_XPON_SERDES_KEY_ID_INSTANCE, &key.instance);
+    bcmcli_log(";\n");
+
+    /* set max number of msgs from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "max_msgs");
+    if (cli_parm != NULL)
+    {
+        max_msgs = cli_parm->value.unumber;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "max_msgs is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("max_msgs = %d;\n", max_msgs);
+
+    /* set filter invert flag from CLI parameter */
+    cli_parm = bcmcli_find_named_parm(session, "filter_invert");
+    if (cli_parm != NULL)
+    {
+        invert_filter = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "filter_invert is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    bcmcli_log("invert_filter = %s;\n", (invert_filter) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+
+    /* allocate message set */
+    err = apicli_msg_set_alloc(byte_pool, BCMOLT_OBJ_ID_XPON_SERDES, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    bcmcli_log("bcmolt_msg_set_alloc(BCMOLT_OBJ_ID_XPON_SERDES, BCMOLT_MGT_GROUP_CFG, max_msgs, &msg_set);\n");
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, xpon_serdes, key);
+    bcmcli_log("BCMOLT_CFG_INIT(&cfg, xpon_serdes, key);\n");
+
+    /* decode API parameters from CLI */
+    cli_parm = bcmcli_find_named_parm(session, "filter.rx_vga");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, rx_vga, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, rx_vga, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XPON_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XPON_SERDES_CFG_ID_RX_VGA, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_vga");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xpon_serdes, rx_vga);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xpon_serdes, rx_vga);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.rx_pf");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, rx_pf, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, rx_pf, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XPON_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XPON_SERDES_CFG_ID_RX_PF, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_pf");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xpon_serdes, rx_pf);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xpon_serdes, rx_pf);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.rx_lfpf");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, rx_lfpf, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, rx_lfpf, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XPON_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XPON_SERDES_CFG_ID_RX_LFPF, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_lfpf");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xpon_serdes, rx_lfpf);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xpon_serdes, rx_lfpf);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.rx_dfe1");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, rx_dfe1, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, rx_dfe1, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XPON_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XPON_SERDES_CFG_ID_RX_DFE1, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_dfe1");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xpon_serdes, rx_dfe1);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xpon_serdes, rx_dfe1);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.rx_dfe2");
+    if (cli_parm != NULL)
+    {
+        int8_t val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, rx_dfe2, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, rx_dfe2, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XPON_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XPON_SERDES_CFG_ID_RX_DFE2, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_dfe2");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xpon_serdes, rx_dfe2);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xpon_serdes, rx_dfe2);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.rx_dfe3");
+    if (cli_parm != NULL)
+    {
+        int8_t val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, rx_dfe3, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, rx_dfe3, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XPON_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XPON_SERDES_CFG_ID_RX_DFE3, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_dfe3");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xpon_serdes, rx_dfe3);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xpon_serdes, rx_dfe3);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.rx_dfe4");
+    if (cli_parm != NULL)
+    {
+        int8_t val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, rx_dfe4, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, rx_dfe4, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XPON_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XPON_SERDES_CFG_ID_RX_DFE4, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_dfe4");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xpon_serdes, rx_dfe4);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xpon_serdes, rx_dfe4);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.rx_dfe5");
+    if (cli_parm != NULL)
+    {
+        int8_t val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, rx_dfe5, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, rx_dfe5, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XPON_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XPON_SERDES_CFG_ID_RX_DFE5, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "rx_dfe5");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xpon_serdes, rx_dfe5);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xpon_serdes, rx_dfe5);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.tx_pre");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, tx_pre, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, tx_pre, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XPON_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XPON_SERDES_CFG_ID_TX_PRE, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_pre");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xpon_serdes, tx_pre);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xpon_serdes, tx_pre);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.tx_main");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, tx_main, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, tx_main, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XPON_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XPON_SERDES_CFG_ID_TX_MAIN, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_main");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xpon_serdes, tx_main);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xpon_serdes, tx_main);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.tx_post1");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, tx_post1, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, tx_post1, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XPON_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XPON_SERDES_CFG_ID_TX_POST1, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_post1");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xpon_serdes, tx_post1);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xpon_serdes, tx_post1);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.tx_post2");
+    if (cli_parm != NULL)
+    {
+        int8_t val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, tx_post2, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, tx_post2, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XPON_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XPON_SERDES_CFG_ID_TX_POST2, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_post2");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xpon_serdes, tx_post2);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xpon_serdes, tx_post2);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.tx_post3");
+    if (cli_parm != NULL)
+    {
+        int8_t val;
+        val = cli_parm->value.number;
+        BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, tx_post3, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, tx_post3, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XPON_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XPON_SERDES_CFG_ID_TX_POST3, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_post3");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xpon_serdes, tx_post3);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xpon_serdes, tx_post3);\n");
+        }
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "filter.tx_amp");
+    if (cli_parm != NULL)
+    {
+        uint8_t val;
+        val = cli_parm->value.unumber;
+        BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, tx_amp, val);
+        bcmcli_log("BCMOLT_CFG_PROP_SET(&cfg, xpon_serdes, tx_amp, ");
+        apicli_log_prop_val(BCMOLT_OBJ_ID_XPON_SERDES, BCMOLT_MGT_GROUP_CFG, 0, BCMOLT_XPON_SERDES_CFG_ID_TX_AMP, &val);
+        bcmcli_log(");\n");
+    }
+
+    cli_parm = bcmcli_find_named_parm(session, "tx_amp");
+    if (cli_parm != NULL)
+    {
+        if (cli_parm->value.number)
+        {
+            BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xpon_serdes, tx_amp);
+            bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xpon_serdes, tx_amp);\n");
+        }
+    }
+
+    /* if no properties were requested, include everything */
+    if (!BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xpon_serdes, rx_vga) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xpon_serdes, rx_pf) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xpon_serdes, rx_lfpf) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xpon_serdes, rx_dfe1) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xpon_serdes, rx_dfe2) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xpon_serdes, rx_dfe3) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xpon_serdes, rx_dfe4) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xpon_serdes, rx_dfe5) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xpon_serdes, tx_pre) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xpon_serdes, tx_main) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xpon_serdes, tx_post1) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xpon_serdes, tx_post2) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xpon_serdes, tx_post3) && !BCMOLT_MSGSET_CFG_PROP_IS_SET(msg_set, xpon_serdes, tx_amp))
+    {
+        BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xpon_serdes, all_properties);
+        bcmcli_log("BCMOLT_MSGSET_CFG_PROP_GET(msg_set, xpon_serdes, all_properties);\n");
+    }
+
+    /* call API */
+    err = bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);
+    bcmcli_log("bcmolt_cfg_get_multi(device_id, &cfg.hdr, (invert_filter) ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, msg_set);\n");
+    if (err == BCM_ERR_OK)
+    {
+        /* print API contents to the CLI */
+        apicli_print_data_start(session);
+        err = apicli_msg_dump(session, &cfg.hdr.hdr);
+    }
+
+    apicli_print_complete(session, err, cfg.hdr.hdr.err_text);
+    return err;
+}
+
+/******************************************************************************/
+static bcmos_errno bcmolt_cli_api_root(bcmolt_devid device_id, bcmolt_mgt_group group_type, bcmolt_msg_type msg_type, bcmcli_session *session, apicli_byte_pool *byte_pool)
+{
+    bcmcli_cmd_parm *cli_parm;
+    bcmolt_obj_id obj_id;
+    cli_parm = bcmcli_find_named_parm(session, "object");
+    if (cli_parm != NULL)
+    {
+        obj_id = cli_parm->value.number;
+    }
+    else
+    {
+        apicli_print_complete(session, BCM_ERR_PARM, "object is not set\n");
+        return BCM_ERR_PARM;
+    }
+
+    switch (obj_id)
+    {
+        case BCMOLT_OBJ_ID_AE_NI:
+            switch (group_type)
+            {
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_ae_ni_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_ae_ni_cfg_set(device_id, session);
+                        case BCMOLT_MSG_TYPE_CLEAR:
+                            return bcmolt_cli_ae_ni_cfg_clear(device_id, session);
+                        case BCMOLT_MSG_TYPE_GET_MULTI:
+                            return bcmolt_cli_ae_ni_cfg_get_multi(device_id, session, byte_pool);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    {
+                        bcmolt_ae_ni_oper_id sub;
+                        cli_parm = bcmcli_find_named_parm(session, "sub");
+                        if (cli_parm != NULL)
+                        {
+                            sub = (bcmolt_ae_ni_oper_id) cli_parm->value.number;
+                        }
+                        else
+                        {
+                            apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+                            return BCM_ERR_PARM;
+                        }
+
+                        switch (sub)
+                        {
+                            case BCMOLT_AE_NI_OPER_ID_SET_AE_NI_EN_STATE:
+                                return bcmolt_cli_ae_ni_oper_set_ae_ni_en_state_submit(device_id, session);
+                            default:
+                                return BCM_ERR_RANGE;
+                        }
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_AE_PATH_DS:
+            switch (group_type)
+            {
+                case BCMOLT_MGT_GROUP_STAT:
+                    return bcmolt_cli_ae_path_ds_stat_get(device_id, session);
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_ae_path_ds_stat_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_ae_path_ds_stat_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_ae_path_ds_auto_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_ae_path_ds_auto_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_AE_PATH_US:
+            switch (group_type)
+            {
+                case BCMOLT_MGT_GROUP_STAT:
+                    return bcmolt_cli_ae_path_us_stat_get(device_id, session);
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_ae_path_us_stat_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_ae_path_us_stat_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_ae_path_us_auto_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_ae_path_us_auto_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_CHANNEL:
+            switch (group_type)
+            {
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_channel_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_channel_cfg_set(device_id, session);
+                        case BCMOLT_MSG_TYPE_CLEAR:
+                            return bcmolt_cli_channel_cfg_clear(device_id, session);
+                        case BCMOLT_MSG_TYPE_GET_MULTI:
+                            return bcmolt_cli_channel_cfg_get_multi(device_id, session, byte_pool);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_DEBUG:
+            switch (group_type)
+            {
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_debug_cfg_get(device_id, session, byte_pool);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_debug_cfg_set(device_id, session, byte_pool);
+                        case BCMOLT_MSG_TYPE_CLEAR:
+                            return bcmolt_cli_debug_cfg_clear(device_id, session);
+                        case BCMOLT_MSG_TYPE_GET_MULTI:
+                            return bcmolt_cli_debug_cfg_get_multi(device_id, session, byte_pool);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_debug_auto_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_debug_auto_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    {
+                        bcmolt_debug_oper_id sub;
+                        cli_parm = bcmcli_find_named_parm(session, "sub");
+                        if (cli_parm != NULL)
+                        {
+                            sub = (bcmolt_debug_oper_id) cli_parm->value.number;
+                        }
+                        else
+                        {
+                            apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+                            return BCM_ERR_PARM;
+                        }
+
+                        switch (sub)
+                        {
+                            case BCMOLT_DEBUG_OPER_ID_CLI_INPUT:
+                                return bcmolt_cli_debug_oper_cli_input_submit(device_id, session, byte_pool);
+                            case BCMOLT_DEBUG_OPER_ID_START_API_CAPTURE:
+                                return bcmolt_cli_debug_oper_start_api_capture_submit(device_id, session);
+                            case BCMOLT_DEBUG_OPER_ID_STOP_API_CAPTURE:
+                                return bcmolt_cli_debug_oper_stop_api_capture_submit(device_id, session);
+                            case BCMOLT_DEBUG_OPER_ID_RESET_API_CAPTURE:
+                                return bcmolt_cli_debug_oper_reset_api_capture_submit(device_id, session);
+                            default:
+                                return BCM_ERR_RANGE;
+                        }
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_DEVICE:
+            switch (group_type)
+            {
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_device_cfg_get(device_id, session, byte_pool);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_device_cfg_set(device_id, session, byte_pool);
+                        case BCMOLT_MSG_TYPE_CLEAR:
+                            return bcmolt_cli_device_cfg_clear(device_id, session);
+                        case BCMOLT_MSG_TYPE_GET_MULTI:
+                            return bcmolt_cli_device_cfg_get_multi(device_id, session, byte_pool);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_device_auto_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_device_auto_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    {
+                        bcmolt_device_oper_id sub;
+                        cli_parm = bcmcli_find_named_parm(session, "sub");
+                        if (cli_parm != NULL)
+                        {
+                            sub = (bcmolt_device_oper_id) cli_parm->value.number;
+                        }
+                        else
+                        {
+                            apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+                            return BCM_ERR_PARM;
+                        }
+
+                        switch (sub)
+                        {
+                            case BCMOLT_DEVICE_OPER_ID_CONNECT:
+                                return bcmolt_cli_device_oper_connect_submit(device_id, session);
+                            case BCMOLT_DEVICE_OPER_ID_DISCONNECT:
+                                return bcmolt_cli_device_oper_disconnect_submit(device_id, session);
+                            case BCMOLT_DEVICE_OPER_ID_RESET:
+                                return bcmolt_cli_device_oper_reset_submit(device_id, session);
+                            case BCMOLT_DEVICE_OPER_ID_HOST_KEEP_ALIVE:
+                                return bcmolt_cli_device_oper_host_keep_alive_submit(device_id, session);
+                            case BCMOLT_DEVICE_OPER_ID_SW_UPGRADE_ACTIVATE:
+                                return bcmolt_cli_device_oper_sw_upgrade_activate_submit(device_id, session);
+                            case BCMOLT_DEVICE_OPER_ID_IMAGE_TRANSFER_START:
+                                return bcmolt_cli_device_oper_image_transfer_start_submit(device_id, session);
+                            case BCMOLT_DEVICE_OPER_ID_IMAGE_TRANSFER_DATA:
+                                return bcmolt_cli_device_oper_image_transfer_data_submit(device_id, session, byte_pool);
+                            case BCMOLT_DEVICE_OPER_ID_RUN_DDR_TEST:
+                                return bcmolt_cli_device_oper_run_ddr_test_submit(device_id, session);
+                            default:
+                                return BCM_ERR_RANGE;
+                        }
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_EPON_DENIED_LINK:
+            switch (group_type)
+            {
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_epon_denied_link_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_epon_denied_link_cfg_set(device_id, session);
+                        case BCMOLT_MSG_TYPE_CLEAR:
+                            return bcmolt_cli_epon_denied_link_cfg_clear(device_id, session);
+                        case BCMOLT_MSG_TYPE_GET_MULTI:
+                            return bcmolt_cli_epon_denied_link_cfg_get_multi(device_id, session, byte_pool);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_epon_denied_link_auto_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_epon_denied_link_auto_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_EPON_LINK:
+            switch (group_type)
+            {
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_epon_link_cfg_get(device_id, session, byte_pool);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_epon_link_cfg_set(device_id, session, byte_pool);
+                        case BCMOLT_MSG_TYPE_CLEAR:
+                            return bcmolt_cli_epon_link_cfg_clear(device_id, session);
+                        case BCMOLT_MSG_TYPE_GET_MULTI:
+                            return bcmolt_cli_epon_link_cfg_get_multi(device_id, session, byte_pool);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    return bcmolt_cli_epon_link_stat_get(device_id, session);
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_epon_link_stat_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_epon_link_stat_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_epon_link_auto_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_epon_link_auto_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    {
+                        bcmolt_epon_link_oper_id sub;
+                        cli_parm = bcmcli_find_named_parm(session, "sub");
+                        if (cli_parm != NULL)
+                        {
+                            sub = (bcmolt_epon_link_oper_id) cli_parm->value.number;
+                        }
+                        else
+                        {
+                            apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+                            return BCM_ERR_PARM;
+                        }
+
+                        switch (sub)
+                        {
+                            case BCMOLT_EPON_LINK_OPER_ID_FORCE_REDISCOVERY:
+                                return bcmolt_cli_epon_link_oper_force_rediscovery_submit(device_id, session);
+                            case BCMOLT_EPON_LINK_OPER_ID_DELETE_LINK:
+                                return bcmolt_cli_epon_link_oper_delete_link_submit(device_id, session);
+                            case BCMOLT_EPON_LINK_OPER_ID_OAM_KEEPALIVE_TIMER_START:
+                                return bcmolt_cli_epon_link_oper_oam_keepalive_timer_start_submit(device_id, session);
+                            case BCMOLT_EPON_LINK_OPER_ID_OAM_KEEPALIVE_TIMER_STOP:
+                                return bcmolt_cli_epon_link_oper_oam_keepalive_timer_stop_submit(device_id, session);
+                            case BCMOLT_EPON_LINK_OPER_ID_KEY_EXCHANGE_START:
+                                return bcmolt_cli_epon_link_oper_key_exchange_start_submit(device_id, session);
+                            case BCMOLT_EPON_LINK_OPER_ID_KEY_EXCHANGE_STOP:
+                                return bcmolt_cli_epon_link_oper_key_exchange_stop_submit(device_id, session);
+                            case BCMOLT_EPON_LINK_OPER_ID_STATIC_REGISTRATION:
+                                return bcmolt_cli_epon_link_oper_static_registration_submit(device_id, session);
+                            default:
+                                return BCM_ERR_RANGE;
+                        }
+                    }
+
+                case BCMOLT_MGT_GROUP_PROXY:
+                    {
+                        bcmolt_epon_link_proxy_id sub;
+                        cli_parm = bcmcli_find_named_parm(session, "sub");
+                        if (cli_parm != NULL)
+                        {
+                            sub = (bcmolt_epon_link_proxy_id) cli_parm->value.number;
+                        }
+                        else
+                        {
+                            apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+                            return BCM_ERR_PARM;
+                        }
+
+                        switch (sub)
+                        {
+                            case BCMOLT_EPON_LINK_PROXY_ID_INJECT_FRAME:
+                                return bcmolt_cli_epon_link_proxy_inject_frame_send(device_id, session, byte_pool);
+                            default:
+                                return BCM_ERR_RANGE;
+                        }
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_EPON_NI:
+            switch (group_type)
+            {
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_epon_ni_cfg_get(device_id, session, byte_pool);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_epon_ni_cfg_set(device_id, session, byte_pool);
+                        case BCMOLT_MSG_TYPE_CLEAR:
+                            return bcmolt_cli_epon_ni_cfg_clear(device_id, session);
+                        case BCMOLT_MSG_TYPE_GET_MULTI:
+                            return bcmolt_cli_epon_ni_cfg_get_multi(device_id, session, byte_pool);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_epon_ni_auto_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_epon_ni_auto_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    {
+                        bcmolt_epon_ni_oper_id sub;
+                        cli_parm = bcmcli_find_named_parm(session, "sub");
+                        if (cli_parm != NULL)
+                        {
+                            sub = (bcmolt_epon_ni_oper_id) cli_parm->value.number;
+                        }
+                        else
+                        {
+                            apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+                            return BCM_ERR_PARM;
+                        }
+
+                        switch (sub)
+                        {
+                            case BCMOLT_EPON_NI_OPER_ID_SET_EPON_NI_EN_STATE:
+                                return bcmolt_cli_epon_ni_oper_set_epon_ni_en_state_submit(device_id, session);
+                            case BCMOLT_EPON_NI_OPER_ID_ISSUE_RSSI_GRANT:
+                                return bcmolt_cli_epon_ni_oper_issue_rssi_grant_submit(device_id, session);
+                            case BCMOLT_EPON_NI_OPER_ID_ADD_LINK:
+                                return bcmolt_cli_epon_ni_oper_add_link_submit(device_id, session);
+                            case BCMOLT_EPON_NI_OPER_ID_ADD_MULTICAST_LINK:
+                                return bcmolt_cli_epon_ni_oper_add_multicast_link_submit(device_id, session);
+                            case BCMOLT_EPON_NI_OPER_ID_ADD_PROTECTED_STANDBY_LINK:
+                                return bcmolt_cli_epon_ni_oper_add_protected_standby_link_submit(device_id, session);
+                            case BCMOLT_EPON_NI_OPER_ID_PROTECTION_SWITCHING_APPLY_RERANGE_DELTA:
+                                return bcmolt_cli_epon_ni_oper_protection_switching_apply_rerange_delta_submit(device_id, session);
+                            case BCMOLT_EPON_NI_OPER_ID_ROGUE_LLID_SCAN:
+                                return bcmolt_cli_epon_ni_oper_rogue_llid_scan_submit(device_id, session);
+                            case BCMOLT_EPON_NI_OPER_ID_START_ONU_UPGRADE:
+                                return bcmolt_cli_epon_ni_oper_start_onu_upgrade_submit(device_id, session, byte_pool);
+                            default:
+                                return BCM_ERR_RANGE;
+                        }
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_EPON_ONU_10G_US:
+            switch (group_type)
+            {
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_epon_onu_10g_us_cfg_get(device_id, session, byte_pool);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_epon_onu_10g_us_cfg_set(device_id, session, byte_pool);
+                        case BCMOLT_MSG_TYPE_CLEAR:
+                            return bcmolt_cli_epon_onu_10g_us_cfg_clear(device_id, session);
+                        case BCMOLT_MSG_TYPE_GET_MULTI:
+                            return bcmolt_cli_epon_onu_10g_us_cfg_get_multi(device_id, session, byte_pool);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    return bcmolt_cli_epon_onu_10g_us_stat_get(device_id, session);
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_epon_onu_10g_us_stat_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_epon_onu_10g_us_stat_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_epon_onu_10g_us_auto_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_epon_onu_10g_us_auto_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_EPON_ONU_1G_US:
+            switch (group_type)
+            {
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_epon_onu_1g_us_cfg_get(device_id, session, byte_pool);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_epon_onu_1g_us_cfg_set(device_id, session, byte_pool);
+                        case BCMOLT_MSG_TYPE_CLEAR:
+                            return bcmolt_cli_epon_onu_1g_us_cfg_clear(device_id, session);
+                        case BCMOLT_MSG_TYPE_GET_MULTI:
+                            return bcmolt_cli_epon_onu_1g_us_cfg_get_multi(device_id, session, byte_pool);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    return bcmolt_cli_epon_onu_1g_us_stat_get(device_id, session);
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_epon_onu_1g_us_stat_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_epon_onu_1g_us_stat_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_epon_onu_1g_us_auto_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_epon_onu_1g_us_auto_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_EPON_PATH_10G_DS:
+            switch (group_type)
+            {
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_epon_path_10g_ds_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_epon_path_10g_ds_cfg_set(device_id, session);
+                        case BCMOLT_MSG_TYPE_CLEAR:
+                            return bcmolt_cli_epon_path_10g_ds_cfg_clear(device_id, session);
+                        case BCMOLT_MSG_TYPE_GET_MULTI:
+                            return bcmolt_cli_epon_path_10g_ds_cfg_get_multi(device_id, session, byte_pool);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    return bcmolt_cli_epon_path_10g_ds_stat_get(device_id, session);
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_epon_path_10g_ds_stat_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_epon_path_10g_ds_stat_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_epon_path_10g_ds_auto_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_epon_path_10g_ds_auto_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_EPON_PATH_10G_US:
+            switch (group_type)
+            {
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_epon_path_10g_us_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_epon_path_10g_us_cfg_set(device_id, session);
+                        case BCMOLT_MSG_TYPE_CLEAR:
+                            return bcmolt_cli_epon_path_10g_us_cfg_clear(device_id, session);
+                        case BCMOLT_MSG_TYPE_GET_MULTI:
+                            return bcmolt_cli_epon_path_10g_us_cfg_get_multi(device_id, session, byte_pool);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    return bcmolt_cli_epon_path_10g_us_stat_get(device_id, session);
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_epon_path_10g_us_stat_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_epon_path_10g_us_stat_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_epon_path_10g_us_auto_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_epon_path_10g_us_auto_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_EPON_PATH_1G_DS:
+            switch (group_type)
+            {
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_epon_path_1g_ds_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_epon_path_1g_ds_cfg_set(device_id, session);
+                        case BCMOLT_MSG_TYPE_CLEAR:
+                            return bcmolt_cli_epon_path_1g_ds_cfg_clear(device_id, session);
+                        case BCMOLT_MSG_TYPE_GET_MULTI:
+                            return bcmolt_cli_epon_path_1g_ds_cfg_get_multi(device_id, session, byte_pool);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    return bcmolt_cli_epon_path_1g_ds_stat_get(device_id, session);
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_epon_path_1g_ds_stat_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_epon_path_1g_ds_stat_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_epon_path_1g_ds_auto_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_epon_path_1g_ds_auto_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_EPON_PATH_1G_US:
+            switch (group_type)
+            {
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_epon_path_1g_us_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_epon_path_1g_us_cfg_set(device_id, session);
+                        case BCMOLT_MSG_TYPE_CLEAR:
+                            return bcmolt_cli_epon_path_1g_us_cfg_clear(device_id, session);
+                        case BCMOLT_MSG_TYPE_GET_MULTI:
+                            return bcmolt_cli_epon_path_1g_us_cfg_get_multi(device_id, session, byte_pool);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    return bcmolt_cli_epon_path_1g_us_stat_get(device_id, session);
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_epon_path_1g_us_stat_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_epon_path_1g_us_stat_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_epon_path_1g_us_auto_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_epon_path_1g_us_auto_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_EPON_RP:
+            switch (group_type)
+            {
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_epon_rp_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_epon_rp_cfg_set(device_id, session);
+                        case BCMOLT_MSG_TYPE_CLEAR:
+                            return bcmolt_cli_epon_rp_cfg_clear(device_id, session);
+                        case BCMOLT_MSG_TYPE_GET_MULTI:
+                            return bcmolt_cli_epon_rp_cfg_get_multi(device_id, session, byte_pool);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_GPIO:
+            switch (group_type)
+            {
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_gpio_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_gpio_cfg_set(device_id, session);
+                        case BCMOLT_MSG_TYPE_CLEAR:
+                            return bcmolt_cli_gpio_cfg_clear(device_id, session);
+                        case BCMOLT_MSG_TYPE_GET_MULTI:
+                            return bcmolt_cli_gpio_cfg_get_multi(device_id, session, byte_pool);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_GPON_ALLOC:
+            switch (group_type)
+            {
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_gpon_alloc_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_gpon_alloc_cfg_set(device_id, session);
+                        case BCMOLT_MSG_TYPE_CLEAR:
+                            return bcmolt_cli_gpon_alloc_cfg_clear(device_id, session);
+                        case BCMOLT_MSG_TYPE_GET_MULTI:
+                            return bcmolt_cli_gpon_alloc_cfg_get_multi(device_id, session, byte_pool);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    return bcmolt_cli_gpon_alloc_stat_get(device_id, session);
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_gpon_alloc_stat_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_gpon_alloc_stat_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_gpon_alloc_auto_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_gpon_alloc_auto_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    {
+                        bcmolt_gpon_alloc_oper_id sub;
+                        cli_parm = bcmcli_find_named_parm(session, "sub");
+                        if (cli_parm != NULL)
+                        {
+                            sub = (bcmolt_gpon_alloc_oper_id) cli_parm->value.number;
+                        }
+                        else
+                        {
+                            apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+                            return BCM_ERR_PARM;
+                        }
+
+                        switch (sub)
+                        {
+                            case BCMOLT_GPON_ALLOC_OPER_ID_SET_STATE:
+                                return bcmolt_cli_gpon_alloc_oper_set_state_submit(device_id, session);
+                            case BCMOLT_GPON_ALLOC_OPER_ID_GET_STATS:
+                                return bcmolt_cli_gpon_alloc_oper_get_stats_submit(device_id, session);
+                            default:
+                                return BCM_ERR_RANGE;
+                        }
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_GPON_GEM_PORT:
+            switch (group_type)
+            {
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_gpon_gem_port_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_gpon_gem_port_cfg_set(device_id, session);
+                        case BCMOLT_MSG_TYPE_CLEAR:
+                            return bcmolt_cli_gpon_gem_port_cfg_clear(device_id, session);
+                        case BCMOLT_MSG_TYPE_GET_MULTI:
+                            return bcmolt_cli_gpon_gem_port_cfg_get_multi(device_id, session, byte_pool);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    return bcmolt_cli_gpon_gem_port_stat_get(device_id, session);
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_gpon_gem_port_stat_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_gpon_gem_port_stat_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_gpon_gem_port_auto_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_gpon_gem_port_auto_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    {
+                        bcmolt_gpon_gem_port_oper_id sub;
+                        cli_parm = bcmcli_find_named_parm(session, "sub");
+                        if (cli_parm != NULL)
+                        {
+                            sub = (bcmolt_gpon_gem_port_oper_id) cli_parm->value.number;
+                        }
+                        else
+                        {
+                            apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+                            return BCM_ERR_PARM;
+                        }
+
+                        switch (sub)
+                        {
+                            case BCMOLT_GPON_GEM_PORT_OPER_ID_SET_STATE:
+                                return bcmolt_cli_gpon_gem_port_oper_set_state_submit(device_id, session);
+                            default:
+                                return BCM_ERR_RANGE;
+                        }
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_GPON_IWF:
+            switch (group_type)
+            {
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_gpon_iwf_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_gpon_iwf_cfg_set(device_id, session);
+                        case BCMOLT_MSG_TYPE_CLEAR:
+                            return bcmolt_cli_gpon_iwf_cfg_clear(device_id, session);
+                        case BCMOLT_MSG_TYPE_GET_MULTI:
+                            return bcmolt_cli_gpon_iwf_cfg_get_multi(device_id, session, byte_pool);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    return bcmolt_cli_gpon_iwf_stat_get(device_id, session);
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_gpon_iwf_stat_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_gpon_iwf_stat_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_gpon_iwf_auto_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_gpon_iwf_auto_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    {
+                        bcmolt_gpon_iwf_oper_id sub;
+                        cli_parm = bcmcli_find_named_parm(session, "sub");
+                        if (cli_parm != NULL)
+                        {
+                            sub = (bcmolt_gpon_iwf_oper_id) cli_parm->value.number;
+                        }
+                        else
+                        {
+                            apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+                            return BCM_ERR_PARM;
+                        }
+
+                        switch (sub)
+                        {
+                            case BCMOLT_GPON_IWF_OPER_ID_FLUSH_MAC_TABLE:
+                                return bcmolt_cli_gpon_iwf_oper_flush_mac_table_submit(device_id, session);
+                            case BCMOLT_GPON_IWF_OPER_ID_SCAN_MAC_TABLE:
+                                return bcmolt_cli_gpon_iwf_oper_scan_mac_table_submit(device_id, session);
+                            default:
+                                return BCM_ERR_RANGE;
+                        }
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_GPON_IWF_DS_EGRESS_FLOW:
+            switch (group_type)
+            {
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_gpon_iwf_ds_egress_flow_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_gpon_iwf_ds_egress_flow_cfg_set(device_id, session);
+                        case BCMOLT_MSG_TYPE_CLEAR:
+                            return bcmolt_cli_gpon_iwf_ds_egress_flow_cfg_clear(device_id, session);
+                        case BCMOLT_MSG_TYPE_GET_MULTI:
+                            return bcmolt_cli_gpon_iwf_ds_egress_flow_cfg_get_multi(device_id, session, byte_pool);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_GPON_IWF_DS_INGRESS_FLOW:
+            switch (group_type)
+            {
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_gpon_iwf_ds_ingress_flow_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_gpon_iwf_ds_ingress_flow_cfg_set(device_id, session);
+                        case BCMOLT_MSG_TYPE_CLEAR:
+                            return bcmolt_cli_gpon_iwf_ds_ingress_flow_cfg_clear(device_id, session);
+                        case BCMOLT_MSG_TYPE_GET_MULTI:
+                            return bcmolt_cli_gpon_iwf_ds_ingress_flow_cfg_get_multi(device_id, session, byte_pool);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_GPON_IWF_MAC_TABLE:
+            switch (group_type)
+            {
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_gpon_iwf_mac_table_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_gpon_iwf_mac_table_cfg_set(device_id, session);
+                        case BCMOLT_MSG_TYPE_CLEAR:
+                            return bcmolt_cli_gpon_iwf_mac_table_cfg_clear(device_id, session);
+                        case BCMOLT_MSG_TYPE_GET_MULTI:
+                            return bcmolt_cli_gpon_iwf_mac_table_cfg_get_multi(device_id, session, byte_pool);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_gpon_iwf_mac_table_auto_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_gpon_iwf_mac_table_auto_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_GPON_IWF_US_FLOW:
+            switch (group_type)
+            {
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_gpon_iwf_us_flow_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_gpon_iwf_us_flow_cfg_set(device_id, session);
+                        case BCMOLT_MSG_TYPE_CLEAR:
+                            return bcmolt_cli_gpon_iwf_us_flow_cfg_clear(device_id, session);
+                        case BCMOLT_MSG_TYPE_GET_MULTI:
+                            return bcmolt_cli_gpon_iwf_us_flow_cfg_get_multi(device_id, session, byte_pool);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_GPON_NI:
+            switch (group_type)
+            {
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_gpon_ni_cfg_get(device_id, session, byte_pool);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_gpon_ni_cfg_set(device_id, session, byte_pool);
+                        case BCMOLT_MSG_TYPE_CLEAR:
+                            return bcmolt_cli_gpon_ni_cfg_clear(device_id, session);
+                        case BCMOLT_MSG_TYPE_GET_MULTI:
+                            return bcmolt_cli_gpon_ni_cfg_get_multi(device_id, session, byte_pool);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    return bcmolt_cli_gpon_ni_stat_get(device_id, session);
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_gpon_ni_stat_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_gpon_ni_stat_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_gpon_ni_auto_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_gpon_ni_auto_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    {
+                        bcmolt_gpon_ni_oper_id sub;
+                        cli_parm = bcmcli_find_named_parm(session, "sub");
+                        if (cli_parm != NULL)
+                        {
+                            sub = (bcmolt_gpon_ni_oper_id) cli_parm->value.number;
+                        }
+                        else
+                        {
+                            apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+                            return BCM_ERR_PARM;
+                        }
+
+                        switch (sub)
+                        {
+                            case BCMOLT_GPON_NI_OPER_ID_SET_PON_STATE:
+                                return bcmolt_cli_gpon_ni_oper_set_pon_state_submit(device_id, session);
+                            case BCMOLT_GPON_NI_OPER_ID_RESET:
+                                return bcmolt_cli_gpon_ni_oper_reset_submit(device_id, session);
+                            case BCMOLT_GPON_NI_OPER_ID_DISABLE_SERIAL_NUMBER:
+                                return bcmolt_cli_gpon_ni_oper_disable_serial_number_submit(device_id, session);
+                            case BCMOLT_GPON_NI_OPER_ID_SINGLE_REQUEST_STANDBY_PON_MONITORING:
+                                return bcmolt_cli_gpon_ni_oper_single_request_standby_pon_monitoring_submit(device_id, session);
+                            case BCMOLT_GPON_NI_OPER_ID_SET_ONU_STATE:
+                                return bcmolt_cli_gpon_ni_oper_set_onu_state_submit(device_id, session);
+                            case BCMOLT_GPON_NI_OPER_ID_ROGUE_DETECTION_WINDOW:
+                                return bcmolt_cli_gpon_ni_oper_rogue_detection_window_submit(device_id, session);
+                            case BCMOLT_GPON_NI_OPER_ID_TOD_REQUEST:
+                                return bcmolt_cli_gpon_ni_oper_tod_request_submit(device_id, session);
+                            case BCMOLT_GPON_NI_OPER_ID_PROTECTION_SWITCHING_TYPE_C_SET_MULTIPLE_ONU_STATE:
+                                return bcmolt_cli_gpon_ni_oper_protection_switching_type_c_set_multiple_onu_state_submit(device_id, session, byte_pool);
+                            case BCMOLT_GPON_NI_OPER_ID_START_ONU_UPGRADE:
+                                return bcmolt_cli_gpon_ni_oper_start_onu_upgrade_submit(device_id, session, byte_pool);
+                            default:
+                                return BCM_ERR_RANGE;
+                        }
+                    }
+
+                case BCMOLT_MGT_GROUP_PROXY:
+                    {
+                        bcmolt_gpon_ni_proxy_id sub;
+                        cli_parm = bcmcli_find_named_parm(session, "sub");
+                        if (cli_parm != NULL)
+                        {
+                            sub = (bcmolt_gpon_ni_proxy_id) cli_parm->value.number;
+                        }
+                        else
+                        {
+                            apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+                            return BCM_ERR_PARM;
+                        }
+
+                        switch (sub)
+                        {
+                            case BCMOLT_GPON_NI_PROXY_ID_CPU_PACKETS:
+                                return bcmolt_cli_gpon_ni_proxy_cpu_packets_send(device_id, session, byte_pool);
+                            case BCMOLT_GPON_NI_PROXY_ID_BROADCAST_PLOAM_PACKET:
+                                return bcmolt_cli_gpon_ni_proxy_broadcast_ploam_packet_send(device_id, session);
+                            default:
+                                return BCM_ERR_RANGE;
+                        }
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_GPON_ONU:
+            switch (group_type)
+            {
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_gpon_onu_cfg_get(device_id, session, byte_pool);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_gpon_onu_cfg_set(device_id, session, byte_pool);
+                        case BCMOLT_MSG_TYPE_CLEAR:
+                            return bcmolt_cli_gpon_onu_cfg_clear(device_id, session);
+                        case BCMOLT_MSG_TYPE_GET_MULTI:
+                            return bcmolt_cli_gpon_onu_cfg_get_multi(device_id, session, byte_pool);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    return bcmolt_cli_gpon_onu_stat_get(device_id, session);
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_gpon_onu_stat_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_gpon_onu_stat_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_gpon_onu_auto_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_gpon_onu_auto_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    {
+                        bcmolt_gpon_onu_oper_id sub;
+                        cli_parm = bcmcli_find_named_parm(session, "sub");
+                        if (cli_parm != NULL)
+                        {
+                            sub = (bcmolt_gpon_onu_oper_id) cli_parm->value.number;
+                        }
+                        else
+                        {
+                            apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+                            return BCM_ERR_PARM;
+                        }
+
+                        switch (sub)
+                        {
+                            case BCMOLT_GPON_ONU_OPER_ID_SET_ONU_STATE:
+                                return bcmolt_cli_gpon_onu_oper_set_onu_state_submit(device_id, session);
+                            case BCMOLT_GPON_ONU_OPER_ID_RSSI_MEASUREMENT:
+                                return bcmolt_cli_gpon_onu_oper_rssi_measurement_submit(device_id, session);
+                            case BCMOLT_GPON_ONU_OPER_ID_CHANGE_POWER_LEVEL:
+                                return bcmolt_cli_gpon_onu_oper_change_power_level_submit(device_id, session);
+                            default:
+                                return BCM_ERR_RANGE;
+                        }
+                    }
+
+                case BCMOLT_MGT_GROUP_PROXY:
+                    {
+                        bcmolt_gpon_onu_proxy_id sub;
+                        cli_parm = bcmcli_find_named_parm(session, "sub");
+                        if (cli_parm != NULL)
+                        {
+                            sub = (bcmolt_gpon_onu_proxy_id) cli_parm->value.number;
+                        }
+                        else
+                        {
+                            apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+                            return BCM_ERR_PARM;
+                        }
+
+                        switch (sub)
+                        {
+                            case BCMOLT_GPON_ONU_PROXY_ID_CPU_PACKETS:
+                                return bcmolt_cli_gpon_onu_proxy_cpu_packets_send(device_id, session, byte_pool);
+                            case BCMOLT_GPON_ONU_PROXY_ID_PLOAM_PACKET:
+                                return bcmolt_cli_gpon_onu_proxy_ploam_packet_send(device_id, session);
+                            default:
+                                return BCM_ERR_RANGE;
+                        }
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_GPON_TRX:
+            switch (group_type)
+            {
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_gpon_trx_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_gpon_trx_cfg_set(device_id, session);
+                        case BCMOLT_MSG_TYPE_CLEAR:
+                            return bcmolt_cli_gpon_trx_cfg_clear(device_id, session);
+                        case BCMOLT_MSG_TYPE_GET_MULTI:
+                            return bcmolt_cli_gpon_trx_cfg_get_multi(device_id, session, byte_pool);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_LOG_ENTRY:
+            switch (group_type)
+            {
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_log_entry_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_log_entry_cfg_set(device_id, session);
+                        case BCMOLT_MSG_TYPE_CLEAR:
+                            return bcmolt_cli_log_entry_cfg_clear(device_id, session);
+                        case BCMOLT_MSG_TYPE_GET_MULTI:
+                            return bcmolt_cli_log_entry_cfg_get_multi(device_id, session, byte_pool);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    return bcmolt_cli_log_entry_stat_get(device_id, session);
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_log_entry_stat_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_log_entry_stat_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_log_entry_auto_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_log_entry_auto_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_LOGGER:
+            switch (group_type)
+            {
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_logger_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_logger_cfg_set(device_id, session);
+                        case BCMOLT_MSG_TYPE_CLEAR:
+                            return bcmolt_cli_logger_cfg_clear(device_id, session);
+                        case BCMOLT_MSG_TYPE_GET_MULTI:
+                            return bcmolt_cli_logger_cfg_get_multi(device_id, session, byte_pool);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    return bcmolt_cli_logger_stat_get(device_id, session);
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_logger_stat_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_logger_stat_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_logger_auto_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_logger_auto_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    {
+                        bcmolt_logger_oper_id sub;
+                        cli_parm = bcmcli_find_named_parm(session, "sub");
+                        if (cli_parm != NULL)
+                        {
+                            sub = (bcmolt_logger_oper_id) cli_parm->value.number;
+                        }
+                        else
+                        {
+                            apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+                            return BCM_ERR_PARM;
+                        }
+
+                        switch (sub)
+                        {
+                            case BCMOLT_LOGGER_OPER_ID_CLEAR_LOG:
+                                return bcmolt_cli_logger_oper_clear_log_submit(device_id, session);
+                            default:
+                                return BCM_ERR_RANGE;
+                        }
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_NNI:
+            switch (group_type)
+            {
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_nni_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_nni_cfg_set(device_id, session);
+                        case BCMOLT_MSG_TYPE_CLEAR:
+                            return bcmolt_cli_nni_cfg_clear(device_id, session);
+                        case BCMOLT_MSG_TYPE_GET_MULTI:
+                            return bcmolt_cli_nni_cfg_get_multi(device_id, session, byte_pool);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    return bcmolt_cli_nni_stat_get(device_id, session);
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_nni_stat_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_nni_stat_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_nni_auto_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_nni_auto_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_NNI_SERDES:
+            switch (group_type)
+            {
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_nni_serdes_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_nni_serdes_cfg_set(device_id, session);
+                        case BCMOLT_MSG_TYPE_CLEAR:
+                            return bcmolt_cli_nni_serdes_cfg_clear(device_id, session);
+                        case BCMOLT_MSG_TYPE_GET_MULTI:
+                            return bcmolt_cli_nni_serdes_cfg_get_multi(device_id, session, byte_pool);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_SOFTWARE_ERROR:
+            switch (group_type)
+            {
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_software_error_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_software_error_cfg_set(device_id, session);
+                        case BCMOLT_MSG_TYPE_CLEAR:
+                            return bcmolt_cli_software_error_cfg_clear(device_id, session);
+                        case BCMOLT_MSG_TYPE_GET_MULTI:
+                            return bcmolt_cli_software_error_cfg_get_multi(device_id, session, byte_pool);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_TRX_CALIBRATION:
+            switch (group_type)
+            {
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_trx_calibration_auto_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_trx_calibration_auto_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    {
+                        bcmolt_trx_calibration_oper_id sub;
+                        cli_parm = bcmcli_find_named_parm(session, "sub");
+                        if (cli_parm != NULL)
+                        {
+                            sub = (bcmolt_trx_calibration_oper_id) cli_parm->value.number;
+                        }
+                        else
+                        {
+                            apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+                            return BCM_ERR_PARM;
+                        }
+
+                        switch (sub)
+                        {
+                            case BCMOLT_TRX_CALIBRATION_OPER_ID_START_CAPTURE_WINDOW:
+                                return bcmolt_cli_trx_calibration_oper_start_capture_window_submit(device_id, session);
+                            case BCMOLT_TRX_CALIBRATION_OPER_ID_STOP_CAPTURE_WINDOW:
+                                return bcmolt_cli_trx_calibration_oper_stop_capture_window_submit(device_id, session);
+                            default:
+                                return BCM_ERR_RANGE;
+                        }
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_XGPON_ALLOC:
+            switch (group_type)
+            {
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_xgpon_alloc_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_xgpon_alloc_cfg_set(device_id, session);
+                        case BCMOLT_MSG_TYPE_CLEAR:
+                            return bcmolt_cli_xgpon_alloc_cfg_clear(device_id, session);
+                        case BCMOLT_MSG_TYPE_GET_MULTI:
+                            return bcmolt_cli_xgpon_alloc_cfg_get_multi(device_id, session, byte_pool);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    return bcmolt_cli_xgpon_alloc_stat_get(device_id, session);
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_xgpon_alloc_stat_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_xgpon_alloc_stat_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_xgpon_alloc_auto_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_xgpon_alloc_auto_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    {
+                        bcmolt_xgpon_alloc_oper_id sub;
+                        cli_parm = bcmcli_find_named_parm(session, "sub");
+                        if (cli_parm != NULL)
+                        {
+                            sub = (bcmolt_xgpon_alloc_oper_id) cli_parm->value.number;
+                        }
+                        else
+                        {
+                            apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+                            return BCM_ERR_PARM;
+                        }
+
+                        switch (sub)
+                        {
+                            case BCMOLT_XGPON_ALLOC_OPER_ID_GET_STATS:
+                                return bcmolt_cli_xgpon_alloc_oper_get_stats_submit(device_id, session);
+                            case BCMOLT_XGPON_ALLOC_OPER_ID_SET_STATE:
+                                return bcmolt_cli_xgpon_alloc_oper_set_state_submit(device_id, session);
+                            default:
+                                return BCM_ERR_RANGE;
+                        }
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_XGPON_GEM_PORT:
+            switch (group_type)
+            {
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_xgpon_gem_port_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_xgpon_gem_port_cfg_set(device_id, session);
+                        case BCMOLT_MSG_TYPE_CLEAR:
+                            return bcmolt_cli_xgpon_gem_port_cfg_clear(device_id, session);
+                        case BCMOLT_MSG_TYPE_GET_MULTI:
+                            return bcmolt_cli_xgpon_gem_port_cfg_get_multi(device_id, session, byte_pool);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    return bcmolt_cli_xgpon_gem_port_stat_get(device_id, session);
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_xgpon_gem_port_stat_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_xgpon_gem_port_stat_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_xgpon_gem_port_auto_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_xgpon_gem_port_auto_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_XGPON_IWF:
+            switch (group_type)
+            {
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_xgpon_iwf_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_xgpon_iwf_cfg_set(device_id, session);
+                        case BCMOLT_MSG_TYPE_CLEAR:
+                            return bcmolt_cli_xgpon_iwf_cfg_clear(device_id, session);
+                        case BCMOLT_MSG_TYPE_GET_MULTI:
+                            return bcmolt_cli_xgpon_iwf_cfg_get_multi(device_id, session, byte_pool);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_XGPON_NI:
+            switch (group_type)
+            {
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_xgpon_ni_cfg_get(device_id, session, byte_pool);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_xgpon_ni_cfg_set(device_id, session, byte_pool);
+                        case BCMOLT_MSG_TYPE_CLEAR:
+                            return bcmolt_cli_xgpon_ni_cfg_clear(device_id, session);
+                        case BCMOLT_MSG_TYPE_GET_MULTI:
+                            return bcmolt_cli_xgpon_ni_cfg_get_multi(device_id, session, byte_pool);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    return bcmolt_cli_xgpon_ni_stat_get(device_id, session);
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_xgpon_ni_stat_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_xgpon_ni_stat_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_xgpon_ni_auto_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_xgpon_ni_auto_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    {
+                        bcmolt_xgpon_ni_oper_id sub;
+                        cli_parm = bcmcli_find_named_parm(session, "sub");
+                        if (cli_parm != NULL)
+                        {
+                            sub = (bcmolt_xgpon_ni_oper_id) cli_parm->value.number;
+                        }
+                        else
+                        {
+                            apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+                            return BCM_ERR_PARM;
+                        }
+
+                        switch (sub)
+                        {
+                            case BCMOLT_XGPON_NI_OPER_ID_SET_PON_STATE:
+                                return bcmolt_cli_xgpon_ni_oper_set_pon_state_submit(device_id, session);
+                            case BCMOLT_XGPON_NI_OPER_ID_RESET:
+                                return bcmolt_cli_xgpon_ni_oper_reset_submit(device_id, session);
+                            case BCMOLT_XGPON_NI_OPER_ID_DISABLE_SERIAL_NUMBER:
+                                return bcmolt_cli_xgpon_ni_oper_disable_serial_number_submit(device_id, session);
+                            case BCMOLT_XGPON_NI_OPER_ID_SINGLE_REQUEST_STANDBY_PON_MONITORING:
+                                return bcmolt_cli_xgpon_ni_oper_single_request_standby_pon_monitoring_submit(device_id, session);
+                            case BCMOLT_XGPON_NI_OPER_ID_SET_ONU_STATE:
+                                return bcmolt_cli_xgpon_ni_oper_set_onu_state_submit(device_id, session);
+                            case BCMOLT_XGPON_NI_OPER_ID_RUN_SPECIAL_BW_MAP:
+                                return bcmolt_cli_xgpon_ni_oper_run_special_bw_map_submit(device_id, session);
+                            case BCMOLT_XGPON_NI_OPER_ID_ROGUE_DETECTION_WINDOW:
+                                return bcmolt_cli_xgpon_ni_oper_rogue_detection_window_submit(device_id, session);
+                            case BCMOLT_XGPON_NI_OPER_ID_TOD_REQUEST:
+                                return bcmolt_cli_xgpon_ni_oper_tod_request_submit(device_id, session);
+                            case BCMOLT_XGPON_NI_OPER_ID_START_ONU_UPGRADE:
+                                return bcmolt_cli_xgpon_ni_oper_start_onu_upgrade_submit(device_id, session, byte_pool);
+                            case BCMOLT_XGPON_NI_OPER_ID_ADJUST_TX_WAVELENGTH:
+                                return bcmolt_cli_xgpon_ni_oper_adjust_tx_wavelength_submit(device_id, session);
+                            default:
+                                return BCM_ERR_RANGE;
+                        }
+                    }
+
+                case BCMOLT_MGT_GROUP_PROXY:
+                    {
+                        bcmolt_xgpon_ni_proxy_id sub;
+                        cli_parm = bcmcli_find_named_parm(session, "sub");
+                        if (cli_parm != NULL)
+                        {
+                            sub = (bcmolt_xgpon_ni_proxy_id) cli_parm->value.number;
+                        }
+                        else
+                        {
+                            apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+                            return BCM_ERR_PARM;
+                        }
+
+                        switch (sub)
+                        {
+                            case BCMOLT_XGPON_NI_PROXY_ID_CPU_PACKETS:
+                                return bcmolt_cli_xgpon_ni_proxy_cpu_packets_send(device_id, session, byte_pool);
+                            case BCMOLT_XGPON_NI_PROXY_ID_BROADCAST_PLOAM_PACKET:
+                                return bcmolt_cli_xgpon_ni_proxy_broadcast_ploam_packet_send(device_id, session);
+                            default:
+                                return BCM_ERR_RANGE;
+                        }
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_XGPON_ONU:
+            switch (group_type)
+            {
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_xgpon_onu_cfg_get(device_id, session, byte_pool);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_xgpon_onu_cfg_set(device_id, session, byte_pool);
+                        case BCMOLT_MSG_TYPE_CLEAR:
+                            return bcmolt_cli_xgpon_onu_cfg_clear(device_id, session);
+                        case BCMOLT_MSG_TYPE_GET_MULTI:
+                            return bcmolt_cli_xgpon_onu_cfg_get_multi(device_id, session, byte_pool);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    return bcmolt_cli_xgpon_onu_stat_get(device_id, session);
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_xgpon_onu_stat_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_xgpon_onu_stat_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_xgpon_onu_auto_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_xgpon_onu_auto_cfg_set(device_id, session);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    {
+                        bcmolt_xgpon_onu_oper_id sub;
+                        cli_parm = bcmcli_find_named_parm(session, "sub");
+                        if (cli_parm != NULL)
+                        {
+                            sub = (bcmolt_xgpon_onu_oper_id) cli_parm->value.number;
+                        }
+                        else
+                        {
+                            apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+                            return BCM_ERR_PARM;
+                        }
+
+                        switch (sub)
+                        {
+                            case BCMOLT_XGPON_ONU_OPER_ID_SET_ONU_STATE:
+                                return bcmolt_cli_xgpon_onu_oper_set_onu_state_submit(device_id, session);
+                            case BCMOLT_XGPON_ONU_OPER_ID_RSSI_MEASUREMENT:
+                                return bcmolt_cli_xgpon_onu_oper_rssi_measurement_submit(device_id, session);
+                            case BCMOLT_XGPON_ONU_OPER_ID_REQUEST_REGISTRATION:
+                                return bcmolt_cli_xgpon_onu_oper_request_registration_submit(device_id, session);
+                            case BCMOLT_XGPON_ONU_OPER_ID_CHANGE_POWER_LEVELLING:
+                                return bcmolt_cli_xgpon_onu_oper_change_power_levelling_submit(device_id, session);
+                            case BCMOLT_XGPON_ONU_OPER_ID_GET_POWER_LEVEL:
+                                return bcmolt_cli_xgpon_onu_oper_get_power_level_submit(device_id, session);
+                            case BCMOLT_XGPON_ONU_OPER_ID_GET_POWER_CONSUMPTION:
+                                return bcmolt_cli_xgpon_onu_oper_get_power_consumption_submit(device_id, session);
+                            case BCMOLT_XGPON_ONU_OPER_ID_ADJUST_TX_WAVELENGTH:
+                                return bcmolt_cli_xgpon_onu_oper_adjust_tx_wavelength_submit(device_id, session);
+                            case BCMOLT_XGPON_ONU_OPER_ID_SECURE_MUTUAL_AUTHENTICATION:
+                                return bcmolt_cli_xgpon_onu_oper_secure_mutual_authentication_submit(device_id, session, byte_pool);
+                            case BCMOLT_XGPON_ONU_OPER_ID_ONU_TUNING_IN:
+                                return bcmolt_cli_xgpon_onu_oper_onu_tuning_in_submit(device_id, session);
+                            case BCMOLT_XGPON_ONU_OPER_ID_ONU_TUNING_OUT:
+                                return bcmolt_cli_xgpon_onu_oper_onu_tuning_out_submit(device_id, session);
+                            default:
+                                return BCM_ERR_RANGE;
+                        }
+                    }
+
+                case BCMOLT_MGT_GROUP_PROXY:
+                    {
+                        bcmolt_xgpon_onu_proxy_id sub;
+                        cli_parm = bcmcli_find_named_parm(session, "sub");
+                        if (cli_parm != NULL)
+                        {
+                            sub = (bcmolt_xgpon_onu_proxy_id) cli_parm->value.number;
+                        }
+                        else
+                        {
+                            apicli_print_complete(session, BCM_ERR_PARM, "sub is not set\n");
+                            return BCM_ERR_PARM;
+                        }
+
+                        switch (sub)
+                        {
+                            case BCMOLT_XGPON_ONU_PROXY_ID_PLOAM_PACKET:
+                                return bcmolt_cli_xgpon_onu_proxy_ploam_packet_send(device_id, session);
+                            case BCMOLT_XGPON_ONU_PROXY_ID_CPU_PACKETS:
+                                return bcmolt_cli_xgpon_onu_proxy_cpu_packets_send(device_id, session, byte_pool);
+                            default:
+                                return BCM_ERR_RANGE;
+                        }
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_XGPON_TRX:
+            switch (group_type)
+            {
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_xgpon_trx_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_xgpon_trx_cfg_set(device_id, session);
+                        case BCMOLT_MSG_TYPE_CLEAR:
+                            return bcmolt_cli_xgpon_trx_cfg_clear(device_id, session);
+                        case BCMOLT_MSG_TYPE_GET_MULTI:
+                            return bcmolt_cli_xgpon_trx_cfg_get_multi(device_id, session, byte_pool);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_XPON_SERDES:
+            switch (group_type)
+            {
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (msg_type)
+                    {
+                        case BCMOLT_MSG_TYPE_GET:
+                            return bcmolt_cli_xpon_serdes_cfg_get(device_id, session);
+                        case BCMOLT_MSG_TYPE_SET:
+                            return bcmolt_cli_xpon_serdes_cfg_set(device_id, session);
+                        case BCMOLT_MSG_TYPE_CLEAR:
+                            return bcmolt_cli_xpon_serdes_cfg_clear(device_id, session);
+                        case BCMOLT_MSG_TYPE_GET_MULTI:
+                            return bcmolt_cli_xpon_serdes_cfg_get_multi(device_id, session, byte_pool);
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        default:
+            return BCM_ERR_RANGE;
+    }
+}
+
+/* Perform an API call based on CLI input */
+bcmos_errno bcmolt_cli_api_call(bcmolt_devid device_id, bcmolt_mgt_group group_type, bcmolt_msg_type msg_type, bcmcli_session *session)
+{
+    bcmos_errno err;
+    apicli_byte_pool byte_pool;
+    (void)apicli_unumber_to_ipv4;
+
+    /* setup memory pool for dynamically-sized list memory allocation */
+    err = apicli_byte_pool_create(&byte_pool);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    /* call the root API handler */
+    err = bcmolt_cli_api_root(device_id, group_type, msg_type, session, &byte_pool);
+
+    /* free all dynamically allocated memory */
+    apicli_byte_pool_destroy(&byte_pool);
+
+    return err;
+}
diff --git a/bcm68620_release/release/host_reference/api_cli/bcm_api_cli_handlers.h b/bcm68620_release/release/host_reference/api_cli/bcm_api_cli_handlers.h
new file mode 100644
index 0000000..e0a5e58
--- /dev/null
+++ b/bcm68620_release/release/host_reference/api_cli/bcm_api_cli_handlers.h
@@ -0,0 +1,48 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+*/
+
+#ifndef MAPLE_CLI_HANDLERS_H_
+#define MAPLE_CLI_HANDLERS_H_
+
+#include <bcmos_system.h>
+#include <bcmolt_api.h>
+#include <bcmcli.h>
+#include <bcmolt_model_types.h>
+
+/* the maximum amount of memory that could possibly by used by all variable-sized lists within a GET request */
+#define APICLI_DYNAMIC_LIST_BUFFER_SIZE (32 * 1024)
+
+/* Perform an API call based on CLI input */
+bcmos_errno bcmolt_cli_api_call(
+    bcmolt_devid device_id,
+    bcmolt_mgt_group group_type,
+    bcmolt_msg_type msg_type,
+    bcmcli_session *session);
+
+#endif
diff --git a/bcm68620_release/release/host_reference/api_cli/bcm_api_cli_helpers.c b/bcm68620_release/release/host_reference/api_cli/bcm_api_cli_helpers.c
new file mode 100644
index 0000000..2277aec
--- /dev/null
+++ b/bcm68620_release/release/host_reference/api_cli/bcm_api_cli_helpers.c
@@ -0,0 +1,24734 @@
+/*
+<:copyright-BRCM:2016:proprietary:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+This program is the proprietary software of Broadcom Corporation and/or its
+licensors, and may only be used, duplicated, modified or distributed pursuant
+to the terms and conditions of a separate, written license agreement executed
+between you and Broadcom (an "Authorized License").  Except as set forth in
+an Authorized License, Broadcom grants no license (express or implied), right
+to use, or waiver of any kind with respect to the Software, and Broadcom
+expressly reserves all rights in and to the Software and all intellectual
+property rights therein.  IF YOU HAVE NO AUTHORIZED LICENSE, THEN YOU HAVE
+NO RIGHT TO USE THIS SOFTWARE IN ANY WAY, AND SHOULD IMMEDIATELY NOTIFY
+BROADCOM AND DISCONTINUE ALL USE OF THE SOFTWARE.
+
+Except as expressly set forth in the Authorized License,
+
+1. This program, including its structure, sequence and organization,
+    constitutes the valuable trade secrets of Broadcom, and you shall use
+    all reasonable efforts to protect the confidentiality thereof, and to
+    use this information only in connection with your use of Broadcom
+    integrated circuit products.
+
+2. TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
+    AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES, REPRESENTATIONS OR
+    WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH
+    RESPECT TO THE SOFTWARE.  BROADCOM SPECIFICALLY DISCLAIMS ANY AND
+    ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY, NONINFRINGEMENT,
+    FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES, ACCURACY OR
+    COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR CORRESPONDENCE
+    TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING OUT OF USE OR
+    PERFORMANCE OF THE SOFTWARE.
+
+3. TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM OR
+    ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL, INCIDENTAL, SPECIAL,
+    INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER ARISING OUT OF OR IN ANY
+    WAY RELATING TO YOUR USE OF OR INABILITY TO USE THE SOFTWARE EVEN
+    IF BROADCOM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES;
+    OR (ii) ANY AMOUNT IN EXCESS OF THE AMOUNT ACTUALLY PAID FOR THE
+    SOFTWARE ITSELF OR U.S. $1, WHICHEVER IS GREATER. THESE LIMITATIONS
+    SHALL APPLY NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY
+    LIMITED REMEDY.
+:>
+*/
+#include <bcmos_system.h>
+#include <bcmcli.h>
+#include <bcmolt_model_types.h>
+
+#include "bcm_api_cli_helpers.h"
+
+/* allow possibly unused descriptors to make the code easier to generate */
+#ifdef __GNUC__
+#define BCM_DESCR   __attribute__((unused))
+#else
+#define BCM_DESCR
+#endif
+
+/* Unless specified in the XML model, dynamic arrays will have this max size (in bytes, will divide by element size) */
+#define DEFAULT_DYN_ARR_MAX_SIZE    2048
+
+/* ==== Base Type Descriptors ==== */
+static bcmcli_type_descr BCM_DESCR type_descr_uint8_t = { .name = "uint8_t", .base_type = BCMOLT_BASE_TYPE_ID_UNUM, .size = sizeof(uint8_t) };
+
+static bcmcli_type_descr BCM_DESCR type_descr_uint16_t = { .name = "uint16_t", .base_type = BCMOLT_BASE_TYPE_ID_UNUM, .size = sizeof(uint16_t) };
+
+static bcmcli_type_descr BCM_DESCR type_descr_uint32_t = { .name = "uint32_t", .base_type = BCMOLT_BASE_TYPE_ID_UNUM, .size = sizeof(uint32_t) };
+
+static bcmcli_type_descr BCM_DESCR type_descr_uint64_t = { .name = "uint64_t", .base_type = BCMOLT_BASE_TYPE_ID_UNUM, .size = sizeof(uint64_t) };
+
+static bcmcli_type_descr BCM_DESCR type_descr_uint8_t_hex = { .name = "uint8_t", .base_type = BCMOLT_BASE_TYPE_ID_UNUM_HEX, .size = sizeof(uint8_t) };
+
+static bcmcli_type_descr BCM_DESCR type_descr_uint16_t_hex = { .name = "uint16_t", .base_type = BCMOLT_BASE_TYPE_ID_UNUM_HEX, .size = sizeof(uint16_t) };
+
+static bcmcli_type_descr BCM_DESCR type_descr_uint32_t_hex = { .name = "uint32_t", .base_type = BCMOLT_BASE_TYPE_ID_UNUM_HEX, .size = sizeof(uint32_t) };
+
+static bcmcli_type_descr BCM_DESCR type_descr_uint64_t_hex = { .name = "uint64_t", .base_type = BCMOLT_BASE_TYPE_ID_UNUM_HEX, .size = sizeof(uint64_t) };
+
+static bcmcli_type_descr BCM_DESCR type_descr_int8_t = { .name = "int8_t", .base_type = BCMOLT_BASE_TYPE_ID_SNUM, .size = sizeof(int8_t) };
+
+static bcmcli_type_descr BCM_DESCR type_descr_int16_t = { .name = "int16_t", .base_type = BCMOLT_BASE_TYPE_ID_SNUM, .size = sizeof(int16_t) };
+
+static bcmcli_type_descr BCM_DESCR type_descr_int32_t = { .name = "int32_t", .base_type = BCMOLT_BASE_TYPE_ID_SNUM, .size = sizeof(int32_t) };
+
+static bcmcli_type_descr BCM_DESCR type_descr_int64_t = { .name = "int64_t", .base_type = BCMOLT_BASE_TYPE_ID_SNUM, .size = sizeof(int64_t) };
+
+static bcmcli_type_descr BCM_DESCR type_descr_float = { .name = "float", .base_type = BCMOLT_BASE_TYPE_ID_FLOAT, .size = sizeof(float) };
+
+static bcmcli_type_descr BCM_DESCR type_descr_double = { .name = "double", .base_type = BCMOLT_BASE_TYPE_ID_FLOAT, .size = sizeof(double) };
+
+static bcmcli_type_descr BCM_DESCR type_descr_bcmos_mac_address = { .name = "bcmos_mac_address", .descr = "MAC address", .base_type = BCMOLT_BASE_TYPE_ID_MAC, .size = sizeof(bcmos_mac_address) };
+
+static bcmcli_type_descr BCM_DESCR type_descr_bcmos_ipv4_address = { .name = "bcmos_ipv4_address", .descr = "IPv4 address", .base_type = BCMOLT_BASE_TYPE_ID_IPV4, .size = sizeof(bcmos_ipv4_address) };
+
+static bcmcli_type_descr BCM_DESCR type_descr_bcmos_bool = { .name = "bcmos_bool", .descr = "Boolean", .base_type = BCMOLT_BASE_TYPE_ID_BOOL, .size = sizeof(bcmos_bool) };
+
+/* ==== Object Type Information ==== */
+static char *object_name[] = { "ae_ni", "ae_path_ds", "ae_path_us", "channel", "debug", "device", "epon_denied_link", "epon_link", "epon_ni", "epon_onu_10g_us", "epon_onu_1g_us", "epon_path_10g_ds", "epon_path_10g_us", "epon_path_1g_ds", "epon_path_1g_us", "epon_rp", "gpio", "gpon_alloc", "gpon_gem_port", "gpon_iwf", "gpon_iwf_ds_egress_flow", "gpon_iwf_ds_ingress_flow", "gpon_iwf_mac_table", "gpon_iwf_us_flow", "gpon_ni", "gpon_onu", "gpon_trx", "log_entry", "logger", "nni", "nni_serdes", "software_error", "trx_calibration", "xgpon_alloc", "xgpon_gem_port", "xgpon_iwf", "xgpon_ni", "xgpon_onu", "xgpon_trx", "xpon_serdes" };
+static char *object_descr[] = { "AE Network Interface.", "AE downstream data path.", "AE upstream data path.", "Channel", "Debug Features", "Singleton object representing the device as a whole.", "Unicast EPON link that has been denied registration for some reason. To be an object of this type you must have at least one active alarm posted against you.", "Unicast EPON link", "EPON Network Interface.", "EPON ONU 10G US", "EPON ONU interface of one or more EPON links.", "EPON 10G downstream data path.", "EPON 10G upstream data path.", "EPON 1G downstream data path.", "EPON 1G upstream data path.", "10/10, 10/1 or 1/1 DS/US pair of EPON Paths", "GPIO control", "GPON Alloc", "GPON GEM Port", "GPON IWF", "GPON IWF DS egress flow", "GPON IWF DS ingress flow", "GPON IWF MAC table", "GPON IWF US flow", "GPON network interface", "GPON ONU", "GPON TRX", "log entry", "logger", "Use for loopbacks", "NNI SERDES parameters.", "Software Error", "TRX Calibration", "XGPON Alloc", "XGPON GEM port", "XGPON IWF", "XGPON network interface", "XGPON ONU", "XGPON TRX", "PON SERDES parameters." };
+
+/* ==== Supporting Types ==== */
+bcmcli_enum_val bcmolt_activation_fail_reason_string_table[] = { { .name = "none", .val = BCMOLT_ACTIVATION_FAIL_REASON_NONE }, { .name = "ranging", .val = BCMOLT_ACTIVATION_FAIL_REASON_RANGING }, { .name = "password_authentication", .val = BCMOLT_ACTIVATION_FAIL_REASON_PASSWORD_AUTHENTICATION }, { .name = "los", .val = BCMOLT_ACTIVATION_FAIL_REASON_LOS }, { .name = "onu_alarm", .val = BCMOLT_ACTIVATION_FAIL_REASON_ONU_ALARM }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_activation_fail_reason = { .name = "bcmolt_activation_fail_reason", .descr = "activation fail reason", .size = sizeof(bcmolt_activation_fail_reason), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_activation_fail_reason_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_actual_schedulershaper_fields[] = { { .name = "actual_mbs_tq", .descr = "Actual MBS (TQ)", .offset = offsetof(bcmolt_actual_schedulershaper, actual_mbs_tq), .type = &type_descr_uint32_t }, { .name = "actual_weight_tq", .descr = "Actual Weight (TQ)", .offset = offsetof(bcmolt_actual_schedulershaper, actual_weight_tq), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_actual_schedulershaper = { .name = "bcmolt_actual_schedulershaper", .descr = "Actual Scheduler/Shaper", .size = sizeof(bcmolt_actual_schedulershaper), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_actual_schedulershaper_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_actual_schedulershaper_fields } } };
+bcmcli_enum_val bcmolt_additional_bw_eligibility_string_table[] = { { .name = "none", .val = BCMOLT_ADDITIONAL_BW_ELIGIBILITY_NONE }, { .name = "non_assured", .val = BCMOLT_ADDITIONAL_BW_ELIGIBILITY_NON_ASSURED }, { .name = "best_effort", .val = BCMOLT_ADDITIONAL_BW_ELIGIBILITY_BEST_EFFORT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_additional_bw_eligibility = { .name = "bcmolt_additional_bw_eligibility", .descr = "Additional BW eligibility", .size = sizeof(bcmolt_additional_bw_eligibility), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_additional_bw_eligibility_string_table } };
+bcmcli_enum_val bcmolt_ae_ni_cfg_id_string_table[] = { { .name = "mac_address", .val = BCMOLT_AE_NI_CFG_ID_MAC_ADDRESS }, { .name = "ae_ni_en", .val = BCMOLT_AE_NI_CFG_ID_AE_NI_EN }, { .name = "mtu_10g", .val = BCMOLT_AE_NI_CFG_ID_MTU_10G }, { .name = "prbs_generator", .val = BCMOLT_AE_NI_CFG_ID_PRBS_GENERATOR }, { .name = "prbs_checker", .val = BCMOLT_AE_NI_CFG_ID_PRBS_CHECKER }, { .name = "prbs_status", .val = BCMOLT_AE_NI_CFG_ID_PRBS_STATUS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ae_ni_cfg_id = { .name = "bcmolt_ae_ni_cfg_id", .descr = "Identifiers for all properties contained in the ae_ni_cfg group.", .size = sizeof(bcmolt_ae_ni_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_ae_ni_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_ae_ni_en_state_string_table[] = { { .name = "disabled", .val = BCMOLT_AE_NI_EN_STATE_DISABLED }, { .name = "enabled", .val = BCMOLT_AE_NI_EN_STATE_ENABLED }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ae_ni_en_state = { .name = "bcmolt_ae_ni_en_state", .descr = "Enable state of the AE NI.", .size = sizeof(bcmolt_ae_ni_en_state), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_ae_ni_en_state_string_table } };
+bcmcli_enum_val bcmolt_ae_ni_key_id_string_table[] = { { .name = "ae_ni", .val = BCMOLT_AE_NI_KEY_ID_AE_NI }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ae_ni_key_id = { .name = "bcmolt_ae_ni_key_id", .descr = "Identifiers for all properties contained in the ae_ni_key group.", .size = sizeof(bcmolt_ae_ni_key_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_ae_ni_key_id_string_table } };
+bcmcli_enum_val bcmolt_ae_ni_set_ae_ni_en_state_id_string_table[] = { { .name = "new_state", .val = BCMOLT_AE_NI_SET_AE_NI_EN_STATE_ID_NEW_STATE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ae_ni_set_ae_ni_en_state_id = { .name = "bcmolt_ae_ni_set_ae_ni_en_state_id", .descr = "Identifiers for all properties contained in the ae_ni_set_ae_ni_en_state group.", .size = sizeof(bcmolt_ae_ni_set_ae_ni_en_state_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_ae_ni_set_ae_ni_en_state_id_string_table } };
+bcmcli_enum_val bcmolt_ae_path_ds_auto_cfg_id_string_table[] = { { .name = "stat_alarm_cleared", .val = BCMOLT_AE_PATH_DS_AUTO_CFG_ID_STAT_ALARM_CLEARED }, { .name = "stat_alarm_raised", .val = BCMOLT_AE_PATH_DS_AUTO_CFG_ID_STAT_ALARM_RAISED }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ae_path_ds_auto_cfg_id = { .name = "bcmolt_ae_path_ds_auto_cfg_id", .descr = "Identifiers for all properties contained in the ae_path_ds_auto_cfg group.", .size = sizeof(bcmolt_ae_path_ds_auto_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_ae_path_ds_auto_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_ae_path_ds_key_id_string_table[] = { { .name = "ae_ni", .val = BCMOLT_AE_PATH_DS_KEY_ID_AE_NI }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ae_path_ds_key_id = { .name = "bcmolt_ae_path_ds_key_id", .descr = "Identifiers for all properties contained in the ae_path_ds_key group.", .size = sizeof(bcmolt_ae_path_ds_key_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_ae_path_ds_key_id_string_table } };
+bcmcli_enum_val bcmolt_ae_path_ds_stat_alarm_cleared_id_string_table[] = { { .name = "stat", .val = BCMOLT_AE_PATH_DS_STAT_ALARM_CLEARED_ID_STAT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ae_path_ds_stat_alarm_cleared_id = { .name = "bcmolt_ae_path_ds_stat_alarm_cleared_id", .descr = "Identifiers for all properties contained in the ae_path_ds_stat_alarm_cleared group.", .size = sizeof(bcmolt_ae_path_ds_stat_alarm_cleared_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_ae_path_ds_stat_alarm_cleared_id_string_table } };
+bcmcli_enum_val bcmolt_ae_path_ds_stat_alarm_raised_id_string_table[] = { { .name = "stat", .val = BCMOLT_AE_PATH_DS_STAT_ALARM_RAISED_ID_STAT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ae_path_ds_stat_alarm_raised_id = { .name = "bcmolt_ae_path_ds_stat_alarm_raised_id", .descr = "Identifiers for all properties contained in the ae_path_ds_stat_alarm_raised group.", .size = sizeof(bcmolt_ae_path_ds_stat_alarm_raised_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_ae_path_ds_stat_alarm_raised_id_string_table } };
+bcmcli_enum_val bcmolt_ae_path_ds_stat_cfg_id_string_table[] = { { .name = "cfg", .val = BCMOLT_AE_PATH_DS_STAT_CFG_ID_CFG }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ae_path_ds_stat_cfg_id = { .name = "bcmolt_ae_path_ds_stat_cfg_id", .descr = "Identifiers for all properties contained in the ae_path_ds_stat_cfg group.", .size = sizeof(bcmolt_ae_path_ds_stat_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_ae_path_ds_stat_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_ae_path_ds_stat_id_string_table[] = { { .name = "bytes", .val = BCMOLT_AE_PATH_DS_STAT_ID_BYTES }, { .name = "frames", .val = BCMOLT_AE_PATH_DS_STAT_ID_FRAMES }, { .name = "frames_64", .val = BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_64 }, { .name = "frames_65_127", .val = BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_65_127 }, { .name = "frames_128_255", .val = BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_128_255 }, { .name = "frames_256_511", .val = BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_256_511 }, { .name = "frames_512_1023", .val = BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_512_1023 }, { .name = "frames_1024_1518", .val = BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_1024_1518 }, { .name = "frames_1519_2047", .val = BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_1519_2047 }, { .name = "frames_2048_4095", .val = BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_2048_4095 }, { .name = "frames_4096_9216", .val = BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_4096_9216 }, { .name = "frames_9217_16383", .val = BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_9217_16383 }, { .name = "broadcast_frames", .val = BCMOLT_AE_PATH_DS_STAT_ID_BROADCAST_FRAMES }, { .name = "data_bytes", .val = BCMOLT_AE_PATH_DS_STAT_ID_DATA_BYTES }, { .name = "multicast_frames", .val = BCMOLT_AE_PATH_DS_STAT_ID_MULTICAST_FRAMES }, { .name = "unicast_frames", .val = BCMOLT_AE_PATH_DS_STAT_ID_UNICAST_FRAMES }, { .name = "abort_frames", .val = BCMOLT_AE_PATH_DS_STAT_ID_ABORT_FRAMES }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ae_path_ds_stat_id = { .name = "bcmolt_ae_path_ds_stat_id", .descr = "Identifiers for all properties contained in the ae_path_ds_stat group.", .size = sizeof(bcmolt_ae_path_ds_stat_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_ae_path_ds_stat_id_string_table } };
+bcmcli_enum_val bcmolt_ae_path_us_auto_cfg_id_string_table[] = { { .name = "stat_alarm_cleared", .val = BCMOLT_AE_PATH_US_AUTO_CFG_ID_STAT_ALARM_CLEARED }, { .name = "stat_alarm_raised", .val = BCMOLT_AE_PATH_US_AUTO_CFG_ID_STAT_ALARM_RAISED }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ae_path_us_auto_cfg_id = { .name = "bcmolt_ae_path_us_auto_cfg_id", .descr = "Identifiers for all properties contained in the ae_path_us_auto_cfg group.", .size = sizeof(bcmolt_ae_path_us_auto_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_ae_path_us_auto_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_ae_path_us_key_id_string_table[] = { { .name = "ae_ni", .val = BCMOLT_AE_PATH_US_KEY_ID_AE_NI }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ae_path_us_key_id = { .name = "bcmolt_ae_path_us_key_id", .descr = "Identifiers for all properties contained in the ae_path_us_key group.", .size = sizeof(bcmolt_ae_path_us_key_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_ae_path_us_key_id_string_table } };
+bcmcli_enum_val bcmolt_ae_path_us_stat_alarm_cleared_id_string_table[] = { { .name = "stat", .val = BCMOLT_AE_PATH_US_STAT_ALARM_CLEARED_ID_STAT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ae_path_us_stat_alarm_cleared_id = { .name = "bcmolt_ae_path_us_stat_alarm_cleared_id", .descr = "Identifiers for all properties contained in the ae_path_us_stat_alarm_cleared group.", .size = sizeof(bcmolt_ae_path_us_stat_alarm_cleared_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_ae_path_us_stat_alarm_cleared_id_string_table } };
+bcmcli_enum_val bcmolt_ae_path_us_stat_alarm_raised_id_string_table[] = { { .name = "stat", .val = BCMOLT_AE_PATH_US_STAT_ALARM_RAISED_ID_STAT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ae_path_us_stat_alarm_raised_id = { .name = "bcmolt_ae_path_us_stat_alarm_raised_id", .descr = "Identifiers for all properties contained in the ae_path_us_stat_alarm_raised group.", .size = sizeof(bcmolt_ae_path_us_stat_alarm_raised_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_ae_path_us_stat_alarm_raised_id_string_table } };
+bcmcli_enum_val bcmolt_ae_path_us_stat_cfg_id_string_table[] = { { .name = "cfg", .val = BCMOLT_AE_PATH_US_STAT_CFG_ID_CFG }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ae_path_us_stat_cfg_id = { .name = "bcmolt_ae_path_us_stat_cfg_id", .descr = "Identifiers for all properties contained in the ae_path_us_stat_cfg group.", .size = sizeof(bcmolt_ae_path_us_stat_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_ae_path_us_stat_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_ae_path_us_stat_id_string_table[] = { { .name = "bytes", .val = BCMOLT_AE_PATH_US_STAT_ID_BYTES }, { .name = "frames", .val = BCMOLT_AE_PATH_US_STAT_ID_FRAMES }, { .name = "frames_64", .val = BCMOLT_AE_PATH_US_STAT_ID_FRAMES_64 }, { .name = "frames_65_127", .val = BCMOLT_AE_PATH_US_STAT_ID_FRAMES_65_127 }, { .name = "frames_128_255", .val = BCMOLT_AE_PATH_US_STAT_ID_FRAMES_128_255 }, { .name = "frames_256_511", .val = BCMOLT_AE_PATH_US_STAT_ID_FRAMES_256_511 }, { .name = "frames_512_1023", .val = BCMOLT_AE_PATH_US_STAT_ID_FRAMES_512_1023 }, { .name = "frames_1024_1518", .val = BCMOLT_AE_PATH_US_STAT_ID_FRAMES_1024_1518 }, { .name = "frames_1519_2047", .val = BCMOLT_AE_PATH_US_STAT_ID_FRAMES_1519_2047 }, { .name = "frames_2048_4095", .val = BCMOLT_AE_PATH_US_STAT_ID_FRAMES_2048_4095 }, { .name = "frames_4096_9216", .val = BCMOLT_AE_PATH_US_STAT_ID_FRAMES_4096_9216 }, { .name = "frames_9217_16383", .val = BCMOLT_AE_PATH_US_STAT_ID_FRAMES_9217_16383 }, { .name = "broadcast_frames", .val = BCMOLT_AE_PATH_US_STAT_ID_BROADCAST_FRAMES }, { .name = "data_bytes", .val = BCMOLT_AE_PATH_US_STAT_ID_DATA_BYTES }, { .name = "multicast_frames", .val = BCMOLT_AE_PATH_US_STAT_ID_MULTICAST_FRAMES }, { .name = "unicast_frames", .val = BCMOLT_AE_PATH_US_STAT_ID_UNICAST_FRAMES }, { .name = "abort_frames", .val = BCMOLT_AE_PATH_US_STAT_ID_ABORT_FRAMES }, { .name = "fcs_error", .val = BCMOLT_AE_PATH_US_STAT_ID_FCS_ERROR }, { .name = "oversize_error", .val = BCMOLT_AE_PATH_US_STAT_ID_OVERSIZE_ERROR }, { .name = "runt_error", .val = BCMOLT_AE_PATH_US_STAT_ID_RUNT_ERROR }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ae_path_us_stat_id = { .name = "bcmolt_ae_path_us_stat_id", .descr = "Identifiers for all properties contained in the ae_path_us_stat group.", .size = sizeof(bcmolt_ae_path_us_stat_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_ae_path_us_stat_id_string_table } };
+static bcmcli_type_descr BCM_DESCR type_descr_uint8_t_arr_16 = { .name = "uint8_t[16]", .descr = "Array of 16 elements of type uint8_t", .size = sizeof(uint8_t[16]), .base_type = BCMOLT_BASE_TYPE_ID_ARR_FIXED, .x = { .arr_fixed = { .elem_type = &type_descr_uint8_t, .size = 16 } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_aes_key_fields[] = { { .name = "bytes", .descr = "Bytes that comprise the key.", .offset = offsetof(bcmolt_aes_key, bytes), .type = &type_descr_uint8_t_arr_16 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_aes_key = { .name = "bcmolt_aes_key", .descr = "128-bit AES key used for ONU authentication.", .size = sizeof(bcmolt_aes_key), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_aes_key_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_aes_key_fields } } };
+bcmcli_enum_val bcmolt_alloc_operation_string_table[] = { { .name = "activate", .val = BCMOLT_ALLOC_OPERATION_ACTIVATE }, { .name = "deactivate", .val = BCMOLT_ALLOC_OPERATION_DEACTIVATE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_alloc_operation = { .name = "bcmolt_alloc_operation", .descr = "Alloc operation", .size = sizeof(bcmolt_alloc_operation), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_alloc_operation_string_table } };
+bcmcli_enum_val bcmolt_alloc_state_string_table[] = { { .name = "not_configured", .val = BCMOLT_ALLOC_STATE_NOT_CONFIGURED }, { .name = "inactive", .val = BCMOLT_ALLOC_STATE_INACTIVE }, { .name = "processing", .val = BCMOLT_ALLOC_STATE_PROCESSING }, { .name = "active", .val = BCMOLT_ALLOC_STATE_ACTIVE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_alloc_state = { .name = "bcmolt_alloc_state", .descr = "Alloc State", .size = sizeof(bcmolt_alloc_state), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_alloc_state_string_table } };
+bcmcli_enum_val bcmolt_alloc_type_string_table[] = { { .name = "none", .val = BCMOLT_ALLOC_TYPE_NONE }, { .name = "nsr", .val = BCMOLT_ALLOC_TYPE_NSR }, { .name = "sr", .val = BCMOLT_ALLOC_TYPE_SR }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_alloc_type = { .name = "bcmolt_alloc_type", .descr = "Alloc Type", .size = sizeof(bcmolt_alloc_type), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_alloc_type_string_table } };
+bcmcli_enum_val bcmolt_alloc_type_to_scan_string_table[] = { { .name = "unused", .val = BCMOLT_ALLOC_TYPE_TO_SCAN_UNUSED }, { .name = "previously_used", .val = BCMOLT_ALLOC_TYPE_TO_SCAN_PREVIOUSLY_USED }, { .name = "all", .val = BCMOLT_ALLOC_TYPE_TO_SCAN_ALL }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_alloc_type_to_scan = { .name = "bcmolt_alloc_type_to_scan", .descr = "Alloc Type to scan during the rogue onu detection process.", .size = sizeof(bcmolt_alloc_type_to_scan), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_alloc_type_to_scan_string_table } };
+bcmcli_enum_val bcmolt_api_capture_buffer_mode_string_table[] = { { .name = "overflow", .val = BCMOLT_API_CAPTURE_BUFFER_MODE_OVERFLOW }, { .name = "wrap", .val = BCMOLT_API_CAPTURE_BUFFER_MODE_WRAP }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_api_capture_buffer_mode = { .name = "bcmolt_api_capture_buffer_mode", .descr = "What to do when the capture buffer is full.", .size = sizeof(bcmolt_api_capture_buffer_mode), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_api_capture_buffer_mode_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_api_capture_buffer_reader_fields[] = { { .name = "offset", .descr = "The bytes offset to read from.", .offset = offsetof(bcmolt_api_capture_buffer_reader, offset), .type = &type_descr_uint32_t }, { .name = "size", .descr = "The number of bytes to read.", .offset = offsetof(bcmolt_api_capture_buffer_reader, size), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_api_capture_buffer_reader = { .name = "bcmolt_api_capture_buffer_reader", .descr = "What portion of the capture buffer to read.", .size = sizeof(bcmolt_api_capture_buffer_reader), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_api_capture_buffer_reader_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_api_capture_buffer_reader_fields } } };
+bcmcli_enum_val bcmolt_api_capture_location_string_table[] = { { .name = "device", .val = BCMOLT_API_CAPTURE_LOCATION_DEVICE }, { .name = "host", .val = BCMOLT_API_CAPTURE_LOCATION_HOST }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_api_capture_location = { .name = "bcmolt_api_capture_location", .descr = "Where to perform the API capture.", .size = sizeof(bcmolt_api_capture_location), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_api_capture_location_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_api_capture_config_fields[] = { { .name = "location", .descr = "Where to perform the API capture.", .offset = offsetof(bcmolt_api_capture_config, location), .type = &type_descr_bcmolt_api_capture_location }, { .name = "buffer_size_bytes", .descr = "Maximum number of bytes to capture.", .offset = offsetof(bcmolt_api_capture_config, buffer_size_bytes), .type = &type_descr_uint32_t }, { .name = "buffer_mode", .descr = "What to do when the capture buffer is full.", .offset = offsetof(bcmolt_api_capture_config, buffer_mode), .type = &type_descr_bcmolt_api_capture_buffer_mode } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_api_capture_config = { .name = "bcmolt_api_capture_config", .descr = "Configuration for API capture.", .size = sizeof(bcmolt_api_capture_config), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_api_capture_config_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_api_capture_config_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_api_capture_stats_fields[] = { { .name = "buffer_used_bytes", .descr = "Used space in the capture buffer (in bytes).", .offset = offsetof(bcmolt_api_capture_stats, buffer_used_bytes), .type = &type_descr_uint32_t }, { .name = "buffer_wrap_count", .descr = "Number of times the capture buffer has wrapped.", .offset = offsetof(bcmolt_api_capture_stats, buffer_wrap_count), .type = &type_descr_uint32_t }, { .name = "events_recorded", .descr = "Number of events recorded in the capture buffer.", .offset = offsetof(bcmolt_api_capture_stats, events_recorded), .type = &type_descr_uint32_t }, { .name = "events_dropped", .descr = "Number of events dropped due to overflow.", .offset = offsetof(bcmolt_api_capture_stats, events_dropped), .type = &type_descr_uint32_t }, { .name = "readable_bytes", .descr = "Number of bytes needed to retrieve capture buffer.", .offset = offsetof(bcmolt_api_capture_stats, readable_bytes), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_api_capture_stats = { .name = "bcmolt_api_capture_stats", .descr = "Statistics on the most recent API capture.", .size = sizeof(bcmolt_api_capture_stats), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_api_capture_stats_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_api_capture_stats_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_bounds_fields[] = { { .name = "best_case", .descr = "Best Case", .offset = offsetof(bcmolt_bounds, best_case), .type = &type_descr_uint32_t }, { .name = "worst_case", .descr = "Worst Case", .offset = offsetof(bcmolt_bounds, worst_case), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_bounds = { .name = "bcmolt_bounds", .descr = "Bounds", .size = sizeof(bcmolt_bounds), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_bounds_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_bounds_fields } } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_bounds_arr_8 = { .name = "bcmolt_bounds[8]", .descr = "Array of 8 elements of type bcmolt_bounds", .size = sizeof(bcmolt_bounds[8]), .base_type = BCMOLT_BASE_TYPE_ID_ARR_FIXED, .x = { .arr_fixed = { .elem_type = &type_descr_bcmolt_bounds, .size = 8 } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_arr_bounds_8_fields[] = { { .name = "arr", .descr = "Array", .offset = offsetof(bcmolt_arr_bounds_8, arr), .type = &type_descr_bcmolt_bounds_arr_8 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_arr_bounds_8 = { .name = "bcmolt_arr_bounds_8", .descr = "Fixed-Length list: 8x bounds", .size = sizeof(bcmolt_arr_bounds_8), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_arr_bounds_8_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_arr_bounds_8_fields } } };
+bcmcli_enum_val bcmolt_calibration_record_string_table[] = { { .name = "unspecified", .val = BCMOLT_CALIBRATION_RECORD_UNSPECIFIED }, { .name = "uncalibrated", .val = BCMOLT_CALIBRATION_RECORD_UNCALIBRATED }, { .name = "loose", .val = BCMOLT_CALIBRATION_RECORD_LOOSE }, { .name = "sufficient", .val = BCMOLT_CALIBRATION_RECORD_SUFFICIENT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_calibration_record = { .name = "bcmolt_calibration_record", .descr = "Calibration Record", .size = sizeof(bcmolt_calibration_record), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_calibration_record_string_table } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_calibration_record_arr_8 = { .name = "bcmolt_calibration_record[8]", .descr = "Array of 8 elements of type bcmolt_calibration_record", .size = sizeof(bcmolt_calibration_record[8]), .base_type = BCMOLT_BASE_TYPE_ID_ARR_FIXED, .x = { .arr_fixed = { .elem_type = &type_descr_bcmolt_calibration_record, .size = 8 } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_arr_calibration_record_8_fields[] = { { .name = "arr", .descr = "Array", .offset = offsetof(bcmolt_arr_calibration_record_8, arr), .type = &type_descr_bcmolt_calibration_record_arr_8 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_arr_calibration_record_8 = { .name = "bcmolt_arr_calibration_record_8", .descr = "Fixed-Length list: 8x calibration_record", .size = sizeof(bcmolt_arr_calibration_record_8), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_arr_calibration_record_8_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_arr_calibration_record_8_fields } } };
+bcmcli_enum_val bcmolt_sign_string_table[] = { { .name = "positive", .val = BCMOLT_SIGN_POSITIVE }, { .name = "negative", .val = BCMOLT_SIGN_NEGATIVE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_sign = { .name = "bcmolt_sign", .descr = "sign", .size = sizeof(bcmolt_sign), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_sign_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_ds_frequency_offset_fields[] = { { .name = "sign", .descr = "sign", .offset = offsetof(bcmolt_ds_frequency_offset, sign), .type = &type_descr_bcmolt_sign }, { .name = "value", .descr = "value", .offset = offsetof(bcmolt_ds_frequency_offset, value), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ds_frequency_offset = { .name = "bcmolt_ds_frequency_offset", .descr = "DS frequency offset", .size = sizeof(bcmolt_ds_frequency_offset), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_ds_frequency_offset_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_ds_frequency_offset_fields } } };
+bcmcli_enum_val bcmolt_upstream_line_rate_capabilities_string_table[] = { { .name = "rate_2_p_5_g", .val = BCMOLT_UPSTREAM_LINE_RATE_CAPABILITIES_RATE_2_P_5_G }, { .name = "rate_10_g", .val = BCMOLT_UPSTREAM_LINE_RATE_CAPABILITIES_RATE_10_G }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_upstream_line_rate_capabilities = { .name = "bcmolt_upstream_line_rate_capabilities", .descr = "XGPON ni upstream line rate capabilities", .size = sizeof(bcmolt_upstream_line_rate_capabilities), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_upstream_line_rate_capabilities_string_table } };
+bcmcli_enum_val bcmolt_link_type_string_table[] = { { .name = "unspecified", .val = BCMOLT_LINK_TYPE_UNSPECIFIED }, { .name = "b", .val = BCMOLT_LINK_TYPE_B }, { .name = "a", .val = BCMOLT_LINK_TYPE_A }, { .name = "a_and_b", .val = BCMOLT_LINK_TYPE_A_AND_B }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_link_type = { .name = "bcmolt_link_type", .descr = "Link type", .size = sizeof(bcmolt_link_type), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_link_type_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_channel_profile_fields[] = { { .name = "version", .descr = "Channel profile version", .offset = offsetof(bcmolt_channel_profile, version), .type = &type_descr_uint8_t }, { .name = "channel_index", .descr = "Channel profile index", .offset = offsetof(bcmolt_channel_profile, channel_index), .type = &type_descr_uint8_t }, { .name = "ds_frequency_offset", .descr = "The difference between the actual OLT CT Tx frequency and the nominal central frequency for the given DWLCH ID, expressed in units of 0.1GHz", .offset = offsetof(bcmolt_channel_profile, ds_frequency_offset), .type = &type_descr_bcmolt_ds_frequency_offset }, { .name = "channel_partition", .descr = "Channel partition", .offset = offsetof(bcmolt_channel_profile, channel_partition), .type = &type_descr_uint8_t }, { .name = "uwlch_id", .descr = "The assigned upstream wavelength channel ID", .offset = offsetof(bcmolt_channel_profile, uwlch_id), .type = &type_descr_uint8_t }, { .name = "us_frequency", .descr = "The nominal central frequency of the upstream wavelength channel or a root frequency of the cyclic set of central frequencies forming an upstream wavelength channel, indicates the value in units of 0.1 GHz.", .offset = offsetof(bcmolt_channel_profile, us_frequency), .type = &type_descr_uint32_t }, { .name = "us_rate", .descr = "US rate", .offset = offsetof(bcmolt_channel_profile, us_rate), .type = &type_descr_bcmolt_upstream_line_rate_capabilities }, { .name = "default_onu_attenuation", .descr = "The default ONU attenuation level in steps of 3dB", .offset = offsetof(bcmolt_channel_profile, default_onu_attenuation), .type = &type_descr_uint8_t }, { .name = "response_threshold", .descr = "Threshold represent the maximum number of Ploams the ONU can transmit at non-zero attenuation level while attempting to establish communication with OLT CT", .offset = offsetof(bcmolt_channel_profile, response_threshold), .type = &type_descr_uint8_t }, { .name = "us_link_type", .descr = "US link type", .offset = offsetof(bcmolt_channel_profile, us_link_type), .type = &type_descr_bcmolt_link_type }, { .name = "is_valid", .descr = "is valid", .offset = offsetof(bcmolt_channel_profile, is_valid), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_channel_profile = { .name = "bcmolt_channel_profile", .descr = "Channel Profile", .size = sizeof(bcmolt_channel_profile), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_channel_profile_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_channel_profile_fields } } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_channel_profile_arr_8 = { .name = "bcmolt_channel_profile[8]", .descr = "Array of 8 elements of type bcmolt_channel_profile", .size = sizeof(bcmolt_channel_profile[8]), .base_type = BCMOLT_BASE_TYPE_ID_ARR_FIXED, .x = { .arr_fixed = { .elem_type = &type_descr_bcmolt_channel_profile, .size = 8 } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_arr_channel_profile_8_fields[] = { { .name = "arr", .descr = "Array", .offset = offsetof(bcmolt_arr_channel_profile_8, arr), .type = &type_descr_bcmolt_channel_profile_arr_8 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_arr_channel_profile_8 = { .name = "bcmolt_arr_channel_profile_8", .descr = "Fixed-Length list: 8x channel_profile", .size = sizeof(bcmolt_arr_channel_profile_8), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_arr_channel_profile_8_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_arr_channel_profile_8_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_power_consumption_channel_report_fields[] = { { .name = "ds_wavelength_channel_id", .descr = "Downstream wavelength channel ID", .offset = offsetof(bcmolt_power_consumption_channel_report, ds_wavelength_channel_id), .type = &type_descr_uint8_t }, { .name = "us_wavelength_channel_id", .descr = "Upstream wavelength channel ID", .offset = offsetof(bcmolt_power_consumption_channel_report, us_wavelength_channel_id), .type = &type_descr_uint8_t }, { .name = "power_consumption", .descr = "Power consumption", .offset = offsetof(bcmolt_power_consumption_channel_report, power_consumption), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_power_consumption_channel_report = { .name = "bcmolt_power_consumption_channel_report", .descr = "Power consumption report per channel", .size = sizeof(bcmolt_power_consumption_channel_report), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_power_consumption_channel_report_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_power_consumption_channel_report_fields } } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_power_consumption_channel_report_arr_8 = { .name = "bcmolt_power_consumption_channel_report[8]", .descr = "Array of 8 elements of type bcmolt_power_consumption_channel_report", .size = sizeof(bcmolt_power_consumption_channel_report[8]), .base_type = BCMOLT_BASE_TYPE_ID_ARR_FIXED, .x = { .arr_fixed = { .elem_type = &type_descr_bcmolt_power_consumption_channel_report, .size = 8 } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_arr_power_consumption_channel_report_8_fields[] = { { .name = "arr", .descr = "Array", .offset = offsetof(bcmolt_arr_power_consumption_channel_report_8, arr), .type = &type_descr_bcmolt_power_consumption_channel_report_arr_8 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_arr_power_consumption_channel_report_8 = { .name = "bcmolt_arr_power_consumption_channel_report_8", .descr = "Fixed-Length list: 8x power_consumption_channel_report", .size = sizeof(bcmolt_arr_power_consumption_channel_report_8), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_arr_power_consumption_channel_report_8_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_arr_power_consumption_channel_report_8_fields } } };
+static bcmcli_type_descr BCM_DESCR type_descr_uint16_t_arr_2 = { .name = "uint16_t[2]", .descr = "Array of 2 elements of type uint16_t", .size = sizeof(uint16_t[2]), .base_type = BCMOLT_BASE_TYPE_ID_ARR_FIXED, .x = { .arr_fixed = { .elem_type = &type_descr_uint16_t, .size = 2 } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_arr_u16_2_fields[] = { { .name = "arr", .descr = "Array", .offset = offsetof(bcmolt_arr_u16_2, arr), .type = &type_descr_uint16_t_arr_2 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_arr_u16_2 = { .name = "bcmolt_arr_u16_2", .descr = "Fixed-Length list: 2x U16", .size = sizeof(bcmolt_arr_u16_2), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_arr_u16_2_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_arr_u16_2_fields } } };
+static bcmcli_type_descr BCM_DESCR type_descr_uint16_t_arr_2_hex = { .name = "uint16_t[2]", .descr = "Array of 2 elements of type uint16_t", .size = sizeof(uint16_t[2]), .base_type = BCMOLT_BASE_TYPE_ID_ARR_FIXED, .x = { .arr_fixed = { .elem_type = &type_descr_uint16_t_hex, .size = 2 } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_arr_u16_2_hex_fields[] = { { .name = "arr", .descr = "Array", .offset = offsetof(bcmolt_arr_u16_2_hex, arr), .type = &type_descr_uint16_t_arr_2_hex } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_arr_u16_2_hex = { .name = "bcmolt_arr_u16_2_hex", .descr = "Fixed-Length list: 2x U16", .size = sizeof(bcmolt_arr_u16_2_hex), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_arr_u16_2_hex_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_arr_u16_2_hex_fields } } };
+static bcmcli_type_descr BCM_DESCR type_descr_uint16_t_arr_5_hex = { .name = "uint16_t[5]", .descr = "Array of 5 elements of type uint16_t", .size = sizeof(uint16_t[5]), .base_type = BCMOLT_BASE_TYPE_ID_ARR_FIXED, .x = { .arr_fixed = { .elem_type = &type_descr_uint16_t_hex, .size = 5 } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_arr_u16_5_hex_fields[] = { { .name = "arr", .descr = "Array", .offset = offsetof(bcmolt_arr_u16_5_hex, arr), .type = &type_descr_uint16_t_arr_5_hex } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_arr_u16_5_hex = { .name = "bcmolt_arr_u16_5_hex", .descr = "Fixed-Length list: 5x U16", .size = sizeof(bcmolt_arr_u16_5_hex), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_arr_u16_5_hex_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_arr_u16_5_hex_fields } } };
+static bcmcli_type_descr BCM_DESCR type_descr_uint16_t_arr_7 = { .name = "uint16_t[7]", .descr = "Array of 7 elements of type uint16_t", .size = sizeof(uint16_t[7]), .base_type = BCMOLT_BASE_TYPE_ID_ARR_FIXED, .x = { .arr_fixed = { .elem_type = &type_descr_uint16_t, .size = 7 } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_arr_u16_7_fields[] = { { .name = "arr", .descr = "Array", .offset = offsetof(bcmolt_arr_u16_7, arr), .type = &type_descr_uint16_t_arr_7 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_arr_u16_7 = { .name = "bcmolt_arr_u16_7", .descr = "Fixed-Length list: 7x U16", .size = sizeof(bcmolt_arr_u16_7), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_arr_u16_7_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_arr_u16_7_fields } } };
+static bcmcli_type_descr BCM_DESCR type_descr_uint32_t_arr_6 = { .name = "uint32_t[6]", .descr = "Array of 6 elements of type uint32_t", .size = sizeof(uint32_t[6]), .base_type = BCMOLT_BASE_TYPE_ID_ARR_FIXED, .x = { .arr_fixed = { .elem_type = &type_descr_uint32_t, .size = 6 } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_arr_u32_6_fields[] = { { .name = "arr", .descr = "Array", .offset = offsetof(bcmolt_arr_u32_6, arr), .type = &type_descr_uint32_t_arr_6 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_arr_u32_6 = { .name = "bcmolt_arr_u32_6", .descr = "Fixed-Length list: 6x U32", .size = sizeof(bcmolt_arr_u32_6), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_arr_u32_6_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_arr_u32_6_fields } } };
+static bcmcli_type_descr BCM_DESCR type_descr_uint8_t_arr_10 = { .name = "uint8_t[10]", .descr = "Array of 10 elements of type uint8_t", .size = sizeof(uint8_t[10]), .base_type = BCMOLT_BASE_TYPE_ID_ARR_FIXED, .x = { .arr_fixed = { .elem_type = &type_descr_uint8_t, .size = 10 } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_arr_u8_10_fields[] = { { .name = "arr", .descr = "Array", .offset = offsetof(bcmolt_arr_u8_10, arr), .type = &type_descr_uint8_t_arr_10 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_arr_u8_10 = { .name = "bcmolt_arr_u8_10", .descr = "Fixed-Length list: 10x U8", .size = sizeof(bcmolt_arr_u8_10), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_arr_u8_10_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_arr_u8_10_fields } } };
+static bcmcli_type_descr BCM_DESCR type_descr_uint8_t_arr_12 = { .name = "uint8_t[12]", .descr = "Array of 12 elements of type uint8_t", .size = sizeof(uint8_t[12]), .base_type = BCMOLT_BASE_TYPE_ID_ARR_FIXED, .x = { .arr_fixed = { .elem_type = &type_descr_uint8_t, .size = 12 } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_arr_u8_12_fields[] = { { .name = "arr", .descr = "Array", .offset = offsetof(bcmolt_arr_u8_12, arr), .type = &type_descr_uint8_t_arr_12 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_arr_u8_12 = { .name = "bcmolt_arr_u8_12", .descr = "Fixed-Length list: 12x U8", .size = sizeof(bcmolt_arr_u8_12), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_arr_u8_12_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_arr_u8_12_fields } } };
+static bcmcli_type_descr BCM_DESCR type_descr_uint8_t_arr_13 = { .name = "uint8_t[13]", .descr = "Array of 13 elements of type uint8_t", .size = sizeof(uint8_t[13]), .base_type = BCMOLT_BASE_TYPE_ID_ARR_FIXED, .x = { .arr_fixed = { .elem_type = &type_descr_uint8_t, .size = 13 } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_arr_u8_13_fields[] = { { .name = "arr", .descr = "Array", .offset = offsetof(bcmolt_arr_u8_13, arr), .type = &type_descr_uint8_t_arr_13 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_arr_u8_13 = { .name = "bcmolt_arr_u8_13", .descr = "Fixed-Length list: 13x U8", .size = sizeof(bcmolt_arr_u8_13), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_arr_u8_13_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_arr_u8_13_fields } } };
+static bcmcli_type_descr BCM_DESCR type_descr_uint8_t_arr_36 = { .name = "uint8_t[36]", .descr = "Array of 36 elements of type uint8_t", .size = sizeof(uint8_t[36]), .base_type = BCMOLT_BASE_TYPE_ID_ARR_FIXED, .x = { .arr_fixed = { .elem_type = &type_descr_uint8_t, .size = 36 } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_arr_u8_36_fields[] = { { .name = "arr", .descr = "Array", .offset = offsetof(bcmolt_arr_u8_36, arr), .type = &type_descr_uint8_t_arr_36 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_arr_u8_36 = { .name = "bcmolt_arr_u8_36", .descr = "Fixed-Length list: 36x U8", .size = sizeof(bcmolt_arr_u8_36), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_arr_u8_36_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_arr_u8_36_fields } } };
+static bcmcli_type_descr BCM_DESCR type_descr_uint8_t_arr_4 = { .name = "uint8_t[4]", .descr = "Array of 4 elements of type uint8_t", .size = sizeof(uint8_t[4]), .base_type = BCMOLT_BASE_TYPE_ID_ARR_FIXED, .x = { .arr_fixed = { .elem_type = &type_descr_uint8_t, .size = 4 } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_arr_u8_4_fields[] = { { .name = "arr", .descr = "Array", .offset = offsetof(bcmolt_arr_u8_4, arr), .type = &type_descr_uint8_t_arr_4 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_arr_u8_4 = { .name = "bcmolt_arr_u8_4", .descr = "Fixed-Length list: 4x U8", .size = sizeof(bcmolt_arr_u8_4), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_arr_u8_4_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_arr_u8_4_fields } } };
+static bcmcli_type_descr BCM_DESCR type_descr_uint8_t_arr_40 = { .name = "uint8_t[40]", .descr = "Array of 40 elements of type uint8_t", .size = sizeof(uint8_t[40]), .base_type = BCMOLT_BASE_TYPE_ID_ARR_FIXED, .x = { .arr_fixed = { .elem_type = &type_descr_uint8_t, .size = 40 } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_arr_u8_40_fields[] = { { .name = "arr", .descr = "Array", .offset = offsetof(bcmolt_arr_u8_40, arr), .type = &type_descr_uint8_t_arr_40 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_arr_u8_40 = { .name = "bcmolt_arr_u8_40", .descr = "Fixed-Length list: 40x U8", .size = sizeof(bcmolt_arr_u8_40), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_arr_u8_40_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_arr_u8_40_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_burst_profile_fields[] = { { .name = "profile_version", .descr = "profile version", .offset = offsetof(bcmolt_xgpon_burst_profile, profile_version), .type = &type_descr_uint8_t_hex }, { .name = "is_fec_on", .descr = "is fec on", .offset = offsetof(bcmolt_xgpon_burst_profile, is_fec_on), .type = &type_descr_bcmos_bool }, { .name = "delimiter_size_in_bytes", .descr = "delimiter size in bytes", .offset = offsetof(bcmolt_xgpon_burst_profile, delimiter_size_in_bytes), .type = &type_descr_uint8_t }, { .name = "delimiter_pattern_high", .descr = "delimiter pattern high", .offset = offsetof(bcmolt_xgpon_burst_profile, delimiter_pattern_high), .type = &type_descr_uint32_t_hex }, { .name = "delimiter_pattern_low", .descr = "delimiter pattern low", .offset = offsetof(bcmolt_xgpon_burst_profile, delimiter_pattern_low), .type = &type_descr_uint32_t_hex }, { .name = "preamble_length_in_bytes", .descr = "preamble length in bytes", .offset = offsetof(bcmolt_xgpon_burst_profile, preamble_length_in_bytes), .type = &type_descr_uint8_t }, { .name = "preamble_repeats_count", .descr = "preamble repeats count", .offset = offsetof(bcmolt_xgpon_burst_profile, preamble_repeats_count), .type = &type_descr_uint8_t }, { .name = "preamble_pattern_high", .descr = "preamble pattern high", .offset = offsetof(bcmolt_xgpon_burst_profile, preamble_pattern_high), .type = &type_descr_uint32_t_hex }, { .name = "preamble_pattern_low", .descr = "preamble pattern low", .offset = offsetof(bcmolt_xgpon_burst_profile, preamble_pattern_low), .type = &type_descr_uint32_t_hex }, { .name = "pon_tag", .descr = "PON tag", .offset = offsetof(bcmolt_xgpon_burst_profile, pon_tag), .type = &type_descr_uint64_t }, { .name = "num_of_guard_bytes", .descr = "number of guard bytes", .offset = offsetof(bcmolt_xgpon_burst_profile, num_of_guard_bytes), .type = &type_descr_uint32_t }, { .name = "is_profile_valid", .descr = "is profile valid", .offset = offsetof(bcmolt_xgpon_burst_profile, is_profile_valid), .type = &type_descr_bcmos_bool }, { .name = "burst_overhead_size_in_words", .descr = "Burst overhead size in 4-byte words (word size is 4 bytes regardless of upstream data rate).", .offset = offsetof(bcmolt_xgpon_burst_profile, burst_overhead_size_in_words), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_burst_profile = { .name = "bcmolt_xgpon_burst_profile", .descr = "XGPON burst profile", .size = sizeof(bcmolt_xgpon_burst_profile), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_burst_profile_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_burst_profile_fields } } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_burst_profile_arr_4 = { .name = "bcmolt_xgpon_burst_profile[4]", .descr = "Array of 4 elements of type bcmolt_xgpon_burst_profile", .size = sizeof(bcmolt_xgpon_burst_profile[4]), .base_type = BCMOLT_BASE_TYPE_ID_ARR_FIXED, .x = { .arr_fixed = { .elem_type = &type_descr_bcmolt_xgpon_burst_profile, .size = 4 } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_arr_xgpon_burst_profile_4_fields[] = { { .name = "arr", .descr = "Array", .offset = offsetof(bcmolt_arr_xgpon_burst_profile_4, arr), .type = &type_descr_bcmolt_xgpon_burst_profile_arr_4 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_arr_xgpon_burst_profile_4 = { .name = "bcmolt_arr_xgpon_burst_profile_4", .descr = "Fixed-Length list: 4x xgpon_burst_profile", .size = sizeof(bcmolt_arr_xgpon_burst_profile_4), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_arr_xgpon_burst_profile_4_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_arr_xgpon_burst_profile_4_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_trx_configuration_fields[] = { { .name = "trx_reset_pattern_first", .descr = "trx reset pattern first", .offset = offsetof(bcmolt_xgpon_trx_configuration, trx_reset_pattern_first), .type = &type_descr_uint32_t_hex }, { .name = "trx_reset_pattern_middle", .descr = "trx reset pattern middle", .offset = offsetof(bcmolt_xgpon_trx_configuration, trx_reset_pattern_middle), .type = &type_descr_uint32_t_hex }, { .name = "trx_reset_pattern_last", .descr = "trx reset pattern last", .offset = offsetof(bcmolt_xgpon_trx_configuration, trx_reset_pattern_last), .type = &type_descr_uint32_t_hex }, { .name = "trx_reset_middle_repeats_count", .descr = "trx reset middle repeats count", .offset = offsetof(bcmolt_xgpon_trx_configuration, trx_reset_middle_repeats_count), .type = &type_descr_uint8_t }, { .name = "trx_reset_location", .descr = "trx reset location", .offset = offsetof(bcmolt_xgpon_trx_configuration, trx_reset_location), .type = &type_descr_uint16_t }, { .name = "trx_reset_polarity", .descr = "trx reset polarity", .offset = offsetof(bcmolt_xgpon_trx_configuration, trx_reset_polarity), .type = &type_descr_bcmos_bool }, { .name = "bcdr_reset_pattern_first", .descr = "bcdr reset pattern first", .offset = offsetof(bcmolt_xgpon_trx_configuration, bcdr_reset_pattern_first), .type = &type_descr_uint32_t_hex }, { .name = "bcdr_reset_pattern_middle", .descr = "bcdr reset pattern middle", .offset = offsetof(bcmolt_xgpon_trx_configuration, bcdr_reset_pattern_middle), .type = &type_descr_uint32_t_hex }, { .name = "bcdr_reset_pattern_last", .descr = "bcdr reset pattern last", .offset = offsetof(bcmolt_xgpon_trx_configuration, bcdr_reset_pattern_last), .type = &type_descr_uint32_t_hex }, { .name = "bcdr_reset_middle_repeats_count", .descr = "bcdr reset middle repeats count", .offset = offsetof(bcmolt_xgpon_trx_configuration, bcdr_reset_middle_repeats_count), .type = &type_descr_uint8_t }, { .name = "bcdr_reset_location", .descr = "bcdr reset location", .offset = offsetof(bcmolt_xgpon_trx_configuration, bcdr_reset_location), .type = &type_descr_uint8_t }, { .name = "bcdr_reset_polarity", .descr = "bcdr reset polarity", .offset = offsetof(bcmolt_xgpon_trx_configuration, bcdr_reset_polarity), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_trx_configuration = { .name = "bcmolt_xgpon_trx_configuration", .descr = "XGPON TRX configuration", .size = sizeof(bcmolt_xgpon_trx_configuration), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_trx_configuration_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_trx_configuration_fields } } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_trx_configuration_arr_4 = { .name = "bcmolt_xgpon_trx_configuration[4]", .descr = "Array of 4 elements of type bcmolt_xgpon_trx_configuration", .size = sizeof(bcmolt_xgpon_trx_configuration[4]), .base_type = BCMOLT_BASE_TYPE_ID_ARR_FIXED, .x = { .arr_fixed = { .elem_type = &type_descr_bcmolt_xgpon_trx_configuration, .size = 4 } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_arr_xgpon_trx_configuration_4_fields[] = { { .name = "arr", .descr = "Array", .offset = offsetof(bcmolt_arr_xgpon_trx_configuration_4, arr), .type = &type_descr_bcmolt_xgpon_trx_configuration_arr_4 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_arr_xgpon_trx_configuration_4 = { .name = "bcmolt_arr_xgpon_trx_configuration_4", .descr = "Fixed-Length list: 4x xgpon_trx_configuration", .size = sizeof(bcmolt_arr_xgpon_trx_configuration_4), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_arr_xgpon_trx_configuration_4_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_arr_xgpon_trx_configuration_4_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_automatic_onu_deactivation_fields[] = { { .name = "los", .descr = "Auto deactivate ONU due to LOS", .offset = offsetof(bcmolt_automatic_onu_deactivation, los), .type = &type_descr_bcmos_bool }, { .name = "onu_alarms", .descr = "Auto deactivate ONU due to ONU alarms", .offset = offsetof(bcmolt_automatic_onu_deactivation, onu_alarms), .type = &type_descr_bcmos_bool }, { .name = "tiwi", .descr = "Auto deactivate ONU due to TIWi alarm", .offset = offsetof(bcmolt_automatic_onu_deactivation, tiwi), .type = &type_descr_bcmos_bool }, { .name = "ack_timeout", .descr = "Auto deactivate ONU due to Ack timeout", .offset = offsetof(bcmolt_automatic_onu_deactivation, ack_timeout), .type = &type_descr_bcmos_bool }, { .name = "sfi", .descr = "Auto deactivate ONU due to SFi alarm", .offset = offsetof(bcmolt_automatic_onu_deactivation, sfi), .type = &type_descr_bcmos_bool }, { .name = "loki", .descr = "Auto deactivate ONU due to Loki alarm", .offset = offsetof(bcmolt_automatic_onu_deactivation, loki), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_automatic_onu_deactivation = { .name = "bcmolt_automatic_onu_deactivation", .descr = "Automatic ONU deactivation", .size = sizeof(bcmolt_automatic_onu_deactivation), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_automatic_onu_deactivation_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_automatic_onu_deactivation_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_resync_control_fields[] = { { .name = "start_pattern", .descr = "start pattern", .offset = offsetof(bcmolt_resync_control, start_pattern), .type = &type_descr_uint8_t }, { .name = "middle_pattern", .descr = "middle pattern", .offset = offsetof(bcmolt_resync_control, middle_pattern), .type = &type_descr_uint8_t }, { .name = "last_pattern", .descr = "last pattern", .offset = offsetof(bcmolt_resync_control, last_pattern), .type = &type_descr_uint8_t }, { .name = "middle_repetition", .descr = "middle repetition", .offset = offsetof(bcmolt_resync_control, middle_repetition), .type = &type_descr_uint8_t }, { .name = "location", .descr = "location", .offset = offsetof(bcmolt_resync_control, location), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_resync_control = { .name = "bcmolt_resync_control", .descr = "TRX Resync pattern control", .size = sizeof(bcmolt_resync_control), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_resync_control_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_resync_control_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_bcdr_resync_pattern_configuration_fields[] = { { .name = "resync_control", .descr = "resync control", .offset = offsetof(bcmolt_bcdr_resync_pattern_configuration, resync_control), .type = &type_descr_bcmolt_resync_control }, { .name = "ranging_resync_control", .descr = "ranging resync control", .offset = offsetof(bcmolt_bcdr_resync_pattern_configuration, ranging_resync_control), .type = &type_descr_bcmolt_resync_control } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_bcdr_resync_pattern_configuration = { .name = "bcmolt_bcdr_resync_pattern_configuration", .descr = "BCDR resync pattern configuration", .size = sizeof(bcmolt_bcdr_resync_pattern_configuration), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_bcdr_resync_pattern_configuration_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_bcdr_resync_pattern_configuration_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_ber_monitor_params_fields[] = { { .name = "us_ber_interval", .descr = "Interval in milliseconds for upstream BER monitoring (0 = disabled).", .offset = offsetof(bcmolt_ber_monitor_params, us_ber_interval), .type = &type_descr_uint32_t }, { .name = "sf_threshold", .descr = "Signal fail alarm is raised when BER raises to 10^-x, where x is this number.", .offset = offsetof(bcmolt_ber_monitor_params, sf_threshold), .type = &type_descr_uint8_t }, { .name = "sd_threshold", .descr = "Signal degrade alarm is raised when BER raises to 10^-x, where x is this number.", .offset = offsetof(bcmolt_ber_monitor_params, sd_threshold), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ber_monitor_params = { .name = "bcmolt_ber_monitor_params", .descr = "BER monitoring parameters", .size = sizeof(bcmolt_ber_monitor_params), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_ber_monitor_params_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_ber_monitor_params_fields } } };
+bcmcli_enum_val bcmolt_capture_strobe_signal_string_table[] = { { .name = "gpon_bcdr_reset", .val = BCMOLT_CAPTURE_STROBE_SIGNAL_GPON_BCDR_RESET }, { .name = "gpon_trx_ed", .val = BCMOLT_CAPTURE_STROBE_SIGNAL_GPON_TRX_ED }, { .name = "gpon_rssi", .val = BCMOLT_CAPTURE_STROBE_SIGNAL_GPON_RSSI }, { .name = "gpon_eob", .val = BCMOLT_CAPTURE_STROBE_SIGNAL_GPON_EOB }, { .name = "serdes_burst_en", .val = BCMOLT_CAPTURE_STROBE_SIGNAL_SERDES_BURST_EN }, { .name = "serdes_rx_lock", .val = BCMOLT_CAPTURE_STROBE_SIGNAL_SERDES_RX_LOCK }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_capture_strobe_signal = { .name = "bcmolt_capture_strobe_signal", .descr = "capture strobe signal", .size = sizeof(bcmolt_capture_strobe_signal), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_capture_strobe_signal_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_cbr_rt_allocation_profile_fields[] = { { .name = "ma_7", .descr = "CBA maximum allocation size for frame gap 7", .offset = offsetof(bcmolt_cbr_rt_allocation_profile, ma_7), .type = &type_descr_uint16_t }, { .name = "ma_3", .descr = "CBA maximum allocation size for frame gap 3", .offset = offsetof(bcmolt_cbr_rt_allocation_profile, ma_3), .type = &type_descr_uint16_t }, { .name = "ma_1", .descr = "CBA maximum allocation size for frame gap 1", .offset = offsetof(bcmolt_cbr_rt_allocation_profile, ma_1), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_cbr_rt_allocation_profile = { .name = "bcmolt_cbr_rt_allocation_profile", .descr = "CBR RT Allocation profile", .size = sizeof(bcmolt_cbr_rt_allocation_profile), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_cbr_rt_allocation_profile_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_cbr_rt_allocation_profile_fields } } };
+bcmcli_enum_val bcmolt_channel_cfg_id_string_table[] = { { .name = "operation_control", .val = BCMOLT_CHANNEL_CFG_ID_OPERATION_CONTROL }, { .name = "tol", .val = BCMOLT_CHANNEL_CFG_ID_TOL }, { .name = "system_profile", .val = BCMOLT_CHANNEL_CFG_ID_SYSTEM_PROFILE }, { .name = "channel_profile", .val = BCMOLT_CHANNEL_CFG_ID_CHANNEL_PROFILE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_channel_cfg_id = { .name = "bcmolt_channel_cfg_id", .descr = "Identifiers for all properties contained in the channel_cfg group.", .size = sizeof(bcmolt_channel_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_channel_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_channel_key_id_string_table[] = { { .name = "pon_ni", .val = BCMOLT_CHANNEL_KEY_ID_PON_NI }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_channel_key_id = { .name = "bcmolt_channel_key_id", .descr = "Identifiers for all properties contained in the channel_key group.", .size = sizeof(bcmolt_channel_key_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_channel_key_id_string_table } };
+bcmcli_enum_val bcmolt_console_redirection_string_table[] = { { .name = "none", .val = BCMOLT_CONSOLE_REDIRECTION_NONE }, { .name = "redirect", .val = BCMOLT_CONSOLE_REDIRECTION_REDIRECT }, { .name = "clone", .val = BCMOLT_CONSOLE_REDIRECTION_CLONE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_console_redirection = { .name = "bcmolt_console_redirection", .descr = "Console Redirection Type", .size = sizeof(bcmolt_console_redirection), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_console_redirection_string_table } };
+bcmcli_enum_val bcmolt_control_state_string_table[] = { { .name = "disable", .val = BCMOLT_CONTROL_STATE_DISABLE }, { .name = "enable", .val = BCMOLT_CONTROL_STATE_ENABLE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_control_state = { .name = "bcmolt_control_state", .descr = "control state", .size = sizeof(bcmolt_control_state), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_control_state_string_table } };
+bcmcli_enum_val bcmolt_dba_mode_string_table[] = { { .name = "normal", .val = BCMOLT_DBA_MODE_NORMAL }, { .name = "extended", .val = BCMOLT_DBA_MODE_EXTENDED }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_dba_mode = { .name = "bcmolt_dba_mode", .descr = "dba mode", .size = sizeof(bcmolt_dba_mode), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_dba_mode_string_table } };
+bcmcli_enum_val bcmolt_dba_ram_string_table[] = { { .name = "grant_fifo_ram_0", .val = BCMOLT_DBA_RAM_GRANT_FIFO_RAM_0 }, { .name = "grant_fifo_ram_1", .val = BCMOLT_DBA_RAM_GRANT_FIFO_RAM_1 }, { .name = "grant_fifo_ram_2", .val = BCMOLT_DBA_RAM_GRANT_FIFO_RAM_2 }, { .name = "grant_fifo_ram_3", .val = BCMOLT_DBA_RAM_GRANT_FIFO_RAM_3 }, { .name = "grant_fifo_ram_4", .val = BCMOLT_DBA_RAM_GRANT_FIFO_RAM_4 }, { .name = "grant_fifo_ram_5", .val = BCMOLT_DBA_RAM_GRANT_FIFO_RAM_5 }, { .name = "grant_fifo_ram_6", .val = BCMOLT_DBA_RAM_GRANT_FIFO_RAM_6 }, { .name = "grant_fifo_ram_7", .val = BCMOLT_DBA_RAM_GRANT_FIFO_RAM_7 }, { .name = "grants_out_ram", .val = BCMOLT_DBA_RAM_GRANTS_OUT_RAM }, { .name = "grants_in_ram", .val = BCMOLT_DBA_RAM_GRANTS_IN_RAM }, { .name = "grants_retired_ram", .val = BCMOLT_DBA_RAM_GRANTS_RETIRED_RAM }, { .name = "report_ram", .val = BCMOLT_DBA_RAM_REPORT_RAM }, { .name = "grant_cfg_ram", .val = BCMOLT_DBA_RAM_GRANT_CFG_RAM }, { .name = "default_tokens_ram", .val = BCMOLT_DBA_RAM_DEFAULT_TOKENS_RAM }, { .name = "poll_records_ram", .val = BCMOLT_DBA_RAM_POLL_RECORDS_RAM }, { .name = "heir_poll_ram", .val = BCMOLT_DBA_RAM_HEIR_POLL_RAM }, { .name = "last_poll_time_ram", .val = BCMOLT_DBA_RAM_LAST_POLL_TIME_RAM }, { .name = "poll_order_ram", .val = BCMOLT_DBA_RAM_POLL_ORDER_RAM }, { .name = "tdm_ram_0", .val = BCMOLT_DBA_RAM_TDM_RAM_0 }, { .name = "tdm_ram_1", .val = BCMOLT_DBA_RAM_TDM_RAM_1 }, { .name = "tdm_ram_2", .val = BCMOLT_DBA_RAM_TDM_RAM_2 }, { .name = "tdm_ram_3", .val = BCMOLT_DBA_RAM_TDM_RAM_3 }, { .name = "tdm_ram_4", .val = BCMOLT_DBA_RAM_TDM_RAM_4 }, { .name = "tdm_ram_5", .val = BCMOLT_DBA_RAM_TDM_RAM_5 }, { .name = "tdm_ram_6", .val = BCMOLT_DBA_RAM_TDM_RAM_6 }, { .name = "tdm_ram_7", .val = BCMOLT_DBA_RAM_TDM_RAM_7 }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_dba_ram = { .name = "bcmolt_dba_ram", .descr = "DBA RAM", .size = sizeof(bcmolt_dba_ram), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_dba_ram_string_table } };
+bcmcli_enum_val bcmolt_dba_type_string_table[] = { { .name = "internal", .val = BCMOLT_DBA_TYPE_INTERNAL }, { .name = "partial_external", .val = BCMOLT_DBA_TYPE_PARTIAL_EXTERNAL }, { .name = "external", .val = BCMOLT_DBA_TYPE_EXTERNAL }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_dba_type = { .name = "bcmolt_dba_type", .descr = "DBA type", .size = sizeof(bcmolt_dba_type), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_dba_type_string_table } };
+bcmcli_enum_val bcmolt_ddr_test_status_string_table[] = { { .name = "completed", .val = BCMOLT_DDR_TEST_STATUS_COMPLETED }, { .name = "connection_failed", .val = BCMOLT_DDR_TEST_STATUS_CONNECTION_FAILED }, { .name = "timeout", .val = BCMOLT_DDR_TEST_STATUS_TIMEOUT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ddr_test_status = { .name = "bcmolt_ddr_test_status", .descr = "DDR Test Status", .size = sizeof(bcmolt_ddr_test_status), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_ddr_test_status_string_table } };
+bcmcli_enum_val bcmolt_ddr_test_result_string_table[] = { { .name = "success", .val = BCMOLT_DDR_TEST_RESULT_SUCCESS }, { .name = "phy_init_error", .val = BCMOLT_DDR_TEST_RESULT_PHY_INIT_ERROR }, { .name = "dram_init_error", .val = BCMOLT_DDR_TEST_RESULT_DRAM_INIT_ERROR }, { .name = "shmoo_error", .val = BCMOLT_DDR_TEST_RESULT_SHMOO_ERROR }, { .name = "edis_test_error", .val = BCMOLT_DDR_TEST_RESULT_EDIS_TEST_ERROR }, { .name = "mem_test_error", .val = BCMOLT_DDR_TEST_RESULT_MEM_TEST_ERROR }, { .name = "not_tested", .val = BCMOLT_DDR_TEST_RESULT_NOT_TESTED }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ddr_test_result = { .name = "bcmolt_ddr_test_result", .descr = "DDR Test Result", .size = sizeof(bcmolt_ddr_test_result), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_ddr_test_result_string_table } };
+bcmcli_enum_val bcmolt_host_connection_fail_reason_string_table[] = { { .name = "timeout", .val = BCMOLT_HOST_CONNECTION_FAIL_REASON_TIMEOUT }, { .name = "keepalive", .val = BCMOLT_HOST_CONNECTION_FAIL_REASON_KEEPALIVE }, { .name = "user_callback_error", .val = BCMOLT_HOST_CONNECTION_FAIL_REASON_USER_CALLBACK_ERROR }, { .name = "software_version_mismatch", .val = BCMOLT_HOST_CONNECTION_FAIL_REASON_SOFTWARE_VERSION_MISMATCH }, { .name = "system_mode_mismatch", .val = BCMOLT_HOST_CONNECTION_FAIL_REASON_SYSTEM_MODE_MISMATCH }, { .name = "nni_speed_mismatch", .val = BCMOLT_HOST_CONNECTION_FAIL_REASON_NNI_SPEED_MISMATCH }, { .name = "reconnect_timeout", .val = BCMOLT_HOST_CONNECTION_FAIL_REASON_RECONNECT_TIMEOUT }, { .name = "internal_error", .val = BCMOLT_HOST_CONNECTION_FAIL_REASON_INTERNAL_ERROR }, { .name = "system_mode_not_supported", .val = BCMOLT_HOST_CONNECTION_FAIL_REASON_SYSTEM_MODE_NOT_SUPPORTED }, { .name = "parameter", .val = BCMOLT_HOST_CONNECTION_FAIL_REASON_PARAMETER }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_host_connection_fail_reason = { .name = "bcmolt_host_connection_fail_reason", .descr = "Reasons why the connection between the host and the device failed", .size = sizeof(bcmolt_host_connection_fail_reason), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_host_connection_fail_reason_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_ddr_test_completed_fields[] = { { .name = "status", .descr = "Outcome of the DDR test", .offset = offsetof(bcmolt_ddr_test_completed, status), .type = &type_descr_bcmolt_ddr_test_status } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_ddr_test_completed_completed_fields[] = { { .name = "cpu_result", .descr = "CPU Result", .offset = offsetof(bcmolt_ddr_test_completed, u.completed.cpu_result) - offsetof(bcmolt_ddr_test_completed, u.completed.cpu_result), .type = &type_descr_bcmolt_ddr_test_result }, { .name = "ras_0_result", .descr = "RAS 0 Result", .offset = offsetof(bcmolt_ddr_test_completed, u.completed.ras_0_result) - offsetof(bcmolt_ddr_test_completed, u.completed.cpu_result), .type = &type_descr_bcmolt_ddr_test_result }, { .name = "ras_1_result", .descr = "RAS 1 Result", .offset = offsetof(bcmolt_ddr_test_completed, u.completed.ras_1_result) - offsetof(bcmolt_ddr_test_completed, u.completed.cpu_result), .type = &type_descr_bcmolt_ddr_test_result } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ddr_test_completed_completed = { .name = "bcmolt_ddr_test_completed_completed", .descr = "DDR Test Completed Completed", .size = sizeof(((bcmolt_ddr_test_completed *)0)->u.completed), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_ddr_test_completed_completed_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_ddr_test_completed_completed_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_ddr_test_completed_connection_failed_fields[] = { { .name = "reason", .descr = "Connection fail reason", .offset = offsetof(bcmolt_ddr_test_completed, u.connection_failed.reason) - offsetof(bcmolt_ddr_test_completed, u.connection_failed.reason), .type = &type_descr_bcmolt_host_connection_fail_reason } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ddr_test_completed_connection_failed = { .name = "bcmolt_ddr_test_completed_connection_failed", .descr = "DDR Test Completed Connection Failed", .size = sizeof(((bcmolt_ddr_test_completed *)0)->u.connection_failed), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_ddr_test_completed_connection_failed_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_ddr_test_completed_connection_failed_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_ddr_test_completed_union_fields[] = { { .name = "u.completed", .descr = "", .offset = offsetof(bcmolt_ddr_test_completed, u.completed), .type = &type_descr_bcmolt_ddr_test_completed_completed }, { .name = "u.connection_failed", .descr = "", .offset = offsetof(bcmolt_ddr_test_completed, u.connection_failed), .type = &type_descr_bcmolt_ddr_test_completed_connection_failed }, { }, { } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ddr_test_completed = { .name = "bcmolt_ddr_test_completed", .descr = "Results of the DDR test", .size = sizeof(bcmolt_ddr_test_completed), .base_type = BCMOLT_BASE_TYPE_ID_UNION, .x = { .u = { .num_common_fields = sizeof(type_descr_bcmolt_ddr_test_completed_fields) / sizeof(bcmcli_field_descr), .common_fields = type_descr_bcmolt_ddr_test_completed_fields, .classifier_idx = 0, .union_fields = type_descr_bcmolt_ddr_test_completed_union_fields } } };
+bcmcli_enum_val bcmolt_deactivation_reason_string_table[] = { { .name = "none", .val = BCMOLT_DEACTIVATION_REASON_NONE }, { .name = "deactivation", .val = BCMOLT_DEACTIVATION_REASON_DEACTIVATION }, { .name = "ack_timeout", .val = BCMOLT_DEACTIVATION_REASON_ACK_TIMEOUT }, { .name = "sfi", .val = BCMOLT_DEACTIVATION_REASON_SFI }, { .name = "tiwi", .val = BCMOLT_DEACTIVATION_REASON_TIWI }, { .name = "password_authentication", .val = BCMOLT_DEACTIVATION_REASON_PASSWORD_AUTHENTICATION }, { .name = "onu_alarm", .val = BCMOLT_DEACTIVATION_REASON_ONU_ALARM }, { .name = "los", .val = BCMOLT_DEACTIVATION_REASON_LOS }, { .name = "loki", .val = BCMOLT_DEACTIVATION_REASON_LOKI }, { .name = "rerange_failure", .val = BCMOLT_DEACTIVATION_REASON_RERANGE_FAILURE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_deactivation_reason = { .name = "bcmolt_deactivation_reason", .descr = "deactivation reason", .size = sizeof(bcmolt_deactivation_reason), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_deactivation_reason_string_table } };
+bcmcli_enum_val bcmolt_debug_auto_cfg_id_string_table[] = { { .name = "cli_output", .val = BCMOLT_DEBUG_AUTO_CFG_ID_CLI_OUTPUT }, { .name = "file_almost_full", .val = BCMOLT_DEBUG_AUTO_CFG_ID_FILE_ALMOST_FULL }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_debug_auto_cfg_id = { .name = "bcmolt_debug_auto_cfg_id", .descr = "Identifiers for all properties contained in the debug_auto_cfg group.", .size = sizeof(bcmolt_debug_auto_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_debug_auto_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_debug_cfg_id_string_table[] = { { .name = "console_redirection", .val = BCMOLT_DEBUG_CFG_ID_CONSOLE_REDIRECTION }, { .name = "indications_dropped", .val = BCMOLT_DEBUG_CFG_ID_INDICATIONS_DROPPED }, { .name = "file_used_percent", .val = BCMOLT_DEBUG_CFG_ID_FILE_USED_PERCENT }, { .name = "api_capture_cfg", .val = BCMOLT_DEBUG_CFG_ID_API_CAPTURE_CFG }, { .name = "api_capture_stats", .val = BCMOLT_DEBUG_CFG_ID_API_CAPTURE_STATS }, { .name = "api_capture_buffer_read", .val = BCMOLT_DEBUG_CFG_ID_API_CAPTURE_BUFFER_READ }, { .name = "api_capture_buffer", .val = BCMOLT_DEBUG_CFG_ID_API_CAPTURE_BUFFER }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_debug_cfg_id = { .name = "bcmolt_debug_cfg_id", .descr = "Identifiers for all properties contained in the debug_cfg group.", .size = sizeof(bcmolt_debug_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_debug_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_debug_cli_input_id_string_table[] = { { .name = "data", .val = BCMOLT_DEBUG_CLI_INPUT_ID_DATA }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_debug_cli_input_id = { .name = "bcmolt_debug_cli_input_id", .descr = "Identifiers for all properties contained in the debug_cli_input group.", .size = sizeof(bcmolt_debug_cli_input_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_debug_cli_input_id_string_table } };
+bcmcli_enum_val bcmolt_debug_cli_output_id_string_table[] = { { .name = "data", .val = BCMOLT_DEBUG_CLI_OUTPUT_ID_DATA }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_debug_cli_output_id = { .name = "bcmolt_debug_cli_output_id", .descr = "Identifiers for all properties contained in the debug_cli_output group.", .size = sizeof(bcmolt_debug_cli_output_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_debug_cli_output_id_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_debug_device_cfg_fields[] = { { .name = "host_dma_rx_queue_size", .descr = "RX Queue size of the host DMA    ", .offset = offsetof(bcmolt_debug_device_cfg, host_dma_rx_queue_size), .type = &type_descr_uint16_t }, { .name = "host_dma_tx_queue_size", .descr = "TX Queue size of the host DMA    ", .offset = offsetof(bcmolt_debug_device_cfg, host_dma_tx_queue_size), .type = &type_descr_uint16_t }, { .name = "avs_control", .descr = "AVS control", .offset = offsetof(bcmolt_debug_device_cfg, avs_control), .type = &type_descr_bcmos_bool }, { .name = "use_prev_pon_serdes_firmware", .descr = "This is a fallback option if there are issues with the new firmware", .offset = offsetof(bcmolt_debug_device_cfg, use_prev_pon_serdes_firmware), .type = &type_descr_bcmos_bool }, { .name = "use_prev_nni_serdes_firmware", .descr = "This is a fallback option if there are issues with the new firmware", .offset = offsetof(bcmolt_debug_device_cfg, use_prev_nni_serdes_firmware), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_debug_device_cfg = { .name = "bcmolt_debug_device_cfg", .descr = "Debug parameters for device configuration", .size = sizeof(bcmolt_debug_device_cfg), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_debug_device_cfg_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_debug_device_cfg_fields } } };
+bcmcli_enum_val bcmolt_debug_file_almost_full_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_debug_file_almost_full_id = { .name = "bcmolt_debug_file_almost_full_id", .descr = "Identifiers for all properties contained in the debug_file_almost_full group.", .size = sizeof(bcmolt_debug_file_almost_full_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_debug_file_almost_full_id_string_table } };
+bcmcli_enum_val bcmolt_debug_key_id_string_table[] = { { .name = "reserved", .val = BCMOLT_DEBUG_KEY_ID_RESERVED }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_debug_key_id = { .name = "bcmolt_debug_key_id", .descr = "Identifiers for all properties contained in the debug_key group.", .size = sizeof(bcmolt_debug_key_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_debug_key_id_string_table } };
+bcmcli_enum_val bcmolt_debug_reset_api_capture_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_debug_reset_api_capture_id = { .name = "bcmolt_debug_reset_api_capture_id", .descr = "Identifiers for all properties contained in the debug_reset_api_capture group.", .size = sizeof(bcmolt_debug_reset_api_capture_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_debug_reset_api_capture_id_string_table } };
+bcmcli_enum_val bcmolt_debug_start_api_capture_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_debug_start_api_capture_id = { .name = "bcmolt_debug_start_api_capture_id", .descr = "Identifiers for all properties contained in the debug_start_api_capture group.", .size = sizeof(bcmolt_debug_start_api_capture_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_debug_start_api_capture_id_string_table } };
+bcmcli_enum_val bcmolt_debug_stop_api_capture_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_debug_stop_api_capture_id = { .name = "bcmolt_debug_stop_api_capture_id", .descr = "Identifiers for all properties contained in the debug_stop_api_capture group.", .size = sizeof(bcmolt_debug_stop_api_capture_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_debug_stop_api_capture_id_string_table } };
+bcmcli_enum_val bcmolt_device_auto_cfg_id_string_table[] = { { .name = "connection_complete", .val = BCMOLT_DEVICE_AUTO_CFG_ID_CONNECTION_COMPLETE }, { .name = "connection_established", .val = BCMOLT_DEVICE_AUTO_CFG_ID_CONNECTION_ESTABLISHED }, { .name = "connection_failure", .val = BCMOLT_DEVICE_AUTO_CFG_ID_CONNECTION_FAILURE }, { .name = "ddr_test_complete", .val = BCMOLT_DEVICE_AUTO_CFG_ID_DDR_TEST_COMPLETE }, { .name = "device_keep_alive", .val = BCMOLT_DEVICE_AUTO_CFG_ID_DEVICE_KEEP_ALIVE }, { .name = "device_ready", .val = BCMOLT_DEVICE_AUTO_CFG_ID_DEVICE_READY }, { .name = "disconnection_complete", .val = BCMOLT_DEVICE_AUTO_CFG_ID_DISCONNECTION_COMPLETE }, { .name = "image_transfer_complete", .val = BCMOLT_DEVICE_AUTO_CFG_ID_IMAGE_TRANSFER_COMPLETE }, { .name = "indications_dropped", .val = BCMOLT_DEVICE_AUTO_CFG_ID_INDICATIONS_DROPPED }, { .name = "sw_error", .val = BCMOLT_DEVICE_AUTO_CFG_ID_SW_ERROR }, { .name = "sw_exception", .val = BCMOLT_DEVICE_AUTO_CFG_ID_SW_EXCEPTION }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_device_auto_cfg_id = { .name = "bcmolt_device_auto_cfg_id", .descr = "Identifiers for all properties contained in the device_auto_cfg group.", .size = sizeof(bcmolt_device_auto_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_device_auto_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_device_cfg_id_string_table[] = { { .name = "system_mode", .val = BCMOLT_DEVICE_CFG_ID_SYSTEM_MODE }, { .name = "keepalive_interval", .val = BCMOLT_DEVICE_CFG_ID_KEEPALIVE_INTERVAL }, { .name = "keepalive_tolerance", .val = BCMOLT_DEVICE_CFG_ID_KEEPALIVE_TOLERANCE }, { .name = "firmware_sw_version", .val = BCMOLT_DEVICE_CFG_ID_FIRMWARE_SW_VERSION }, { .name = "host_sw_version", .val = BCMOLT_DEVICE_CFG_ID_HOST_SW_VERSION }, { .name = "chip_revision", .val = BCMOLT_DEVICE_CFG_ID_CHIP_REVISION }, { .name = "state", .val = BCMOLT_DEVICE_CFG_ID_STATE }, { .name = "debug", .val = BCMOLT_DEVICE_CFG_ID_DEBUG }, { .name = "nni_speed", .val = BCMOLT_DEVICE_CFG_ID_NNI_SPEED }, { .name = "protection_switching_ext_irq", .val = BCMOLT_DEVICE_CFG_ID_PROTECTION_SWITCHING_EXT_IRQ }, { .name = "epon_clock_transport_sample_delay", .val = BCMOLT_DEVICE_CFG_ID_EPON_CLOCK_TRANSPORT_SAMPLE_DELAY }, { .name = "indication_shaping", .val = BCMOLT_DEVICE_CFG_ID_INDICATION_SHAPING }, { .name = "chip_temperature", .val = BCMOLT_DEVICE_CFG_ID_CHIP_TEMPERATURE }, { .name = "gpon_xgpon_tod_enable", .val = BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_ENABLE }, { .name = "gpon_xgpon_tod_gpio_pin", .val = BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_GPIO_PIN }, { .name = "gpon_xgpon_tod_connected_internally", .val = BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_CONNECTED_INTERNALLY }, { .name = "epon_8021_as_tod_format", .val = BCMOLT_DEVICE_CFG_ID_EPON_8021_AS_TOD_FORMAT }, { .name = "epon_shaper_mode", .val = BCMOLT_DEVICE_CFG_ID_EPON_SHAPER_MODE }, { .name = "embedded_image_list", .val = BCMOLT_DEVICE_CFG_ID_EMBEDDED_IMAGE_LIST }, { .name = "chip_voltage", .val = BCMOLT_DEVICE_CFG_ID_CHIP_VOLTAGE }, { .name = "epon_tod_string", .val = BCMOLT_DEVICE_CFG_ID_EPON_TOD_STRING }, { .name = "xgpon_num_of_onus", .val = BCMOLT_DEVICE_CFG_ID_XGPON_NUM_OF_ONUS }, { .name = "device_ip_address", .val = BCMOLT_DEVICE_CFG_ID_DEVICE_IP_ADDRESS }, { .name = "device_udp_port", .val = BCMOLT_DEVICE_CFG_ID_DEVICE_UDP_PORT }, { .name = "tod_uart_baudrate", .val = BCMOLT_DEVICE_CFG_ID_TOD_UART_BAUDRATE }, { .name = "gpon_xgpon_tod_string_length", .val = BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_STRING_LENGTH }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_device_cfg_id = { .name = "bcmolt_device_cfg_id", .descr = "Identifiers for all properties contained in the device_cfg group.", .size = sizeof(bcmolt_device_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_device_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_device_chip_revision_string_table[] = { { .name = "a0", .val = BCMOLT_DEVICE_CHIP_REVISION_A0 }, { .name = "b0", .val = BCMOLT_DEVICE_CHIP_REVISION_B0 }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_device_chip_revision = { .name = "bcmolt_device_chip_revision", .descr = "Revision of the BCM68620 device.", .size = sizeof(bcmolt_device_chip_revision), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_device_chip_revision_string_table } };
+bcmcli_enum_val bcmolt_device_connect_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_device_connect_id = { .name = "bcmolt_device_connect_id", .descr = "Identifiers for all properties contained in the device_connect group.", .size = sizeof(bcmolt_device_connect_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_device_connect_id_string_table } };
+bcmcli_enum_val bcmolt_device_connection_complete_id_string_table[] = { { .name = "standalone", .val = BCMOLT_DEVICE_CONNECTION_COMPLETE_ID_STANDALONE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_device_connection_complete_id = { .name = "bcmolt_device_connection_complete_id", .descr = "Identifiers for all properties contained in the device_connection_complete group.", .size = sizeof(bcmolt_device_connection_complete_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_device_connection_complete_id_string_table } };
+bcmcli_enum_val bcmolt_device_connection_established_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_device_connection_established_id = { .name = "bcmolt_device_connection_established_id", .descr = "Identifiers for all properties contained in the device_connection_established group.", .size = sizeof(bcmolt_device_connection_established_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_device_connection_established_id_string_table } };
+bcmcli_enum_val bcmolt_device_connection_failure_id_string_table[] = { { .name = "reason", .val = BCMOLT_DEVICE_CONNECTION_FAILURE_ID_REASON }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_device_connection_failure_id = { .name = "bcmolt_device_connection_failure_id", .descr = "Identifiers for all properties contained in the device_connection_failure group.", .size = sizeof(bcmolt_device_connection_failure_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_device_connection_failure_id_string_table } };
+bcmcli_enum_val bcmolt_device_ddr_test_complete_id_string_table[] = { { .name = "ddr_test", .val = BCMOLT_DEVICE_DDR_TEST_COMPLETE_ID_DDR_TEST }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_device_ddr_test_complete_id = { .name = "bcmolt_device_ddr_test_complete_id", .descr = "Identifiers for all properties contained in the device_ddr_test_complete group.", .size = sizeof(bcmolt_device_ddr_test_complete_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_device_ddr_test_complete_id_string_table } };
+bcmcli_enum_val bcmolt_device_device_keep_alive_id_string_table[] = { { .name = "sequence_number", .val = BCMOLT_DEVICE_DEVICE_KEEP_ALIVE_ID_SEQUENCE_NUMBER }, { .name = "time_stamp", .val = BCMOLT_DEVICE_DEVICE_KEEP_ALIVE_ID_TIME_STAMP }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_device_device_keep_alive_id = { .name = "bcmolt_device_device_keep_alive_id", .descr = "Identifiers for all properties contained in the device_device_keep_alive group.", .size = sizeof(bcmolt_device_device_keep_alive_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_device_device_keep_alive_id_string_table } };
+bcmcli_enum_val bcmolt_device_device_ready_id_string_table[] = { { .name = "firmware_sw_version", .val = BCMOLT_DEVICE_DEVICE_READY_ID_FIRMWARE_SW_VERSION }, { .name = "system_mode", .val = BCMOLT_DEVICE_DEVICE_READY_ID_SYSTEM_MODE }, { .name = "nni_speed", .val = BCMOLT_DEVICE_DEVICE_READY_ID_NNI_SPEED }, { .name = "chip_revision", .val = BCMOLT_DEVICE_DEVICE_READY_ID_CHIP_REVISION }, { .name = "tod_enable", .val = BCMOLT_DEVICE_DEVICE_READY_ID_TOD_ENABLE }, { .name = "tod_gpio_pin", .val = BCMOLT_DEVICE_DEVICE_READY_ID_TOD_GPIO_PIN }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_device_device_ready_id = { .name = "bcmolt_device_device_ready_id", .descr = "Identifiers for all properties contained in the device_device_ready group.", .size = sizeof(bcmolt_device_device_ready_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_device_device_ready_id_string_table } };
+bcmcli_enum_val bcmolt_device_disconnect_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_device_disconnect_id = { .name = "bcmolt_device_disconnect_id", .descr = "Identifiers for all properties contained in the device_disconnect group.", .size = sizeof(bcmolt_device_disconnect_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_device_disconnect_id_string_table } };
+bcmcli_enum_val bcmolt_device_disconnection_complete_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_device_disconnection_complete_id = { .name = "bcmolt_device_disconnection_complete_id", .descr = "Identifiers for all properties contained in the device_disconnection_complete group.", .size = sizeof(bcmolt_device_disconnection_complete_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_device_disconnection_complete_id_string_table } };
+bcmcli_enum_val bcmolt_device_host_keep_alive_id_string_table[] = { { .name = "sequence_number", .val = BCMOLT_DEVICE_HOST_KEEP_ALIVE_ID_SEQUENCE_NUMBER }, { .name = "time_stamp", .val = BCMOLT_DEVICE_HOST_KEEP_ALIVE_ID_TIME_STAMP }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_device_host_keep_alive_id = { .name = "bcmolt_device_host_keep_alive_id", .descr = "Identifiers for all properties contained in the device_host_keep_alive group.", .size = sizeof(bcmolt_device_host_keep_alive_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_device_host_keep_alive_id_string_table } };
+bcmcli_enum_val bcmolt_device_image_transfer_complete_id_string_table[] = { { .name = "image_type", .val = BCMOLT_DEVICE_IMAGE_TRANSFER_COMPLETE_ID_IMAGE_TYPE }, { .name = "block_number", .val = BCMOLT_DEVICE_IMAGE_TRANSFER_COMPLETE_ID_BLOCK_NUMBER }, { .name = "status", .val = BCMOLT_DEVICE_IMAGE_TRANSFER_COMPLETE_ID_STATUS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_device_image_transfer_complete_id = { .name = "bcmolt_device_image_transfer_complete_id", .descr = "Identifiers for all properties contained in the device_image_transfer_complete group.", .size = sizeof(bcmolt_device_image_transfer_complete_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_device_image_transfer_complete_id_string_table } };
+bcmcli_enum_val bcmolt_device_image_transfer_data_id_string_table[] = { { .name = "block_number", .val = BCMOLT_DEVICE_IMAGE_TRANSFER_DATA_ID_BLOCK_NUMBER }, { .name = "more_data", .val = BCMOLT_DEVICE_IMAGE_TRANSFER_DATA_ID_MORE_DATA }, { .name = "data", .val = BCMOLT_DEVICE_IMAGE_TRANSFER_DATA_ID_DATA }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_device_image_transfer_data_id = { .name = "bcmolt_device_image_transfer_data_id", .descr = "Identifiers for all properties contained in the device_image_transfer_data group.", .size = sizeof(bcmolt_device_image_transfer_data_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_device_image_transfer_data_id_string_table } };
+bcmcli_enum_val bcmolt_device_image_transfer_start_id_string_table[] = { { .name = "image_type", .val = BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID_IMAGE_TYPE }, { .name = "image_size", .val = BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID_IMAGE_SIZE }, { .name = "crc32", .val = BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID_CRC32 }, { .name = "image_name", .val = BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID_IMAGE_NAME }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_device_image_transfer_start_id = { .name = "bcmolt_device_image_transfer_start_id", .descr = "Identifiers for all properties contained in the device_image_transfer_start group.", .size = sizeof(bcmolt_device_image_transfer_start_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_device_image_transfer_start_id_string_table } };
+bcmcli_enum_val bcmolt_device_image_type_string_table[] = { { .name = "bootloader", .val = BCMOLT_DEVICE_IMAGE_TYPE_BOOTLOADER }, { .name = "application", .val = BCMOLT_DEVICE_IMAGE_TYPE_APPLICATION }, { .name = "itu_pon_onu_firmware", .val = BCMOLT_DEVICE_IMAGE_TYPE_ITU_PON_ONU_FIRMWARE }, { .name = "epon_onu_firmware", .val = BCMOLT_DEVICE_IMAGE_TYPE_EPON_ONU_FIRMWARE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_device_image_type = { .name = "bcmolt_device_image_type", .descr = "Device Image Type", .size = sizeof(bcmolt_device_image_type), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_device_image_type_string_table } };
+bcmcli_enum_val bcmolt_device_indications_dropped_id_string_table[] = { { .name = "total_count", .val = BCMOLT_DEVICE_INDICATIONS_DROPPED_ID_TOTAL_COUNT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_device_indications_dropped_id = { .name = "bcmolt_device_indications_dropped_id", .descr = "Identifiers for all properties contained in the device_indications_dropped group.", .size = sizeof(bcmolt_device_indications_dropped_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_device_indications_dropped_id_string_table } };
+bcmcli_enum_val bcmolt_device_key_id_string_table[] = { { .name = "reserved", .val = BCMOLT_DEVICE_KEY_ID_RESERVED }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_device_key_id = { .name = "bcmolt_device_key_id", .descr = "Identifiers for all properties contained in the device_key group.", .size = sizeof(bcmolt_device_key_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_device_key_id_string_table } };
+bcmcli_enum_val bcmolt_nni_speed_string_table[] = { { .name = "gbps_1", .val = BCMOLT_NNI_SPEED_GBPS_1 }, { .name = "gbps_2p5", .val = BCMOLT_NNI_SPEED_GBPS_2P5 }, { .name = "gbps_10", .val = BCMOLT_NNI_SPEED_GBPS_10 }, { .name = "gbps_12p5", .val = BCMOLT_NNI_SPEED_GBPS_12P5 }, { .name = "gbps_10_g_mux", .val = BCMOLT_NNI_SPEED_GBPS_10_G_MUX }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_nni_speed = { .name = "bcmolt_nni_speed", .descr = "Network interface speed", .size = sizeof(bcmolt_nni_speed), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_nni_speed_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_device_nni_speed_fields[] = { { .name = "first_half", .descr = "Interface speed for the first half of the NNI ports on the system.", .offset = offsetof(bcmolt_device_nni_speed, first_half), .type = &type_descr_bcmolt_nni_speed }, { .name = "second_half", .descr = "Interface speed for the second half of the NNI ports on the system.", .offset = offsetof(bcmolt_device_nni_speed, second_half), .type = &type_descr_bcmolt_nni_speed } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_device_nni_speed = { .name = "bcmolt_device_nni_speed", .descr = "Device NNI Speed", .size = sizeof(bcmolt_device_nni_speed), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_device_nni_speed_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_device_nni_speed_fields } } };
+bcmcli_enum_val bcmolt_device_reset_id_string_table[] = { { .name = "mode", .val = BCMOLT_DEVICE_RESET_ID_MODE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_device_reset_id = { .name = "bcmolt_device_reset_id", .descr = "Identifiers for all properties contained in the device_reset group.", .size = sizeof(bcmolt_device_reset_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_device_reset_id_string_table } };
+bcmcli_enum_val bcmolt_device_reset_mode_string_table[] = { { .name = "device", .val = BCMOLT_DEVICE_RESET_MODE_DEVICE }, { .name = "host", .val = BCMOLT_DEVICE_RESET_MODE_HOST }, { .name = "all", .val = BCMOLT_DEVICE_RESET_MODE_ALL }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_device_reset_mode = { .name = "bcmolt_device_reset_mode", .descr = "Options for the reset operation.", .size = sizeof(bcmolt_device_reset_mode), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_device_reset_mode_string_table } };
+bcmcli_enum_val bcmolt_device_run_ddr_test_id_string_table[] = { { .name = "cpu", .val = BCMOLT_DEVICE_RUN_DDR_TEST_ID_CPU }, { .name = "ras_0", .val = BCMOLT_DEVICE_RUN_DDR_TEST_ID_RAS_0 }, { .name = "ras_1", .val = BCMOLT_DEVICE_RUN_DDR_TEST_ID_RAS_1 }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_device_run_ddr_test_id = { .name = "bcmolt_device_run_ddr_test_id", .descr = "Identifiers for all properties contained in the device_run_ddr_test group.", .size = sizeof(bcmolt_device_run_ddr_test_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_device_run_ddr_test_id_string_table } };
+bcmcli_enum_val bcmolt_device_state_string_table[] = { { .name = "disconnected", .val = BCMOLT_DEVICE_STATE_DISCONNECTED }, { .name = "connecting", .val = BCMOLT_DEVICE_STATE_CONNECTING }, { .name = "ready", .val = BCMOLT_DEVICE_STATE_READY }, { .name = "waiting_for_device", .val = BCMOLT_DEVICE_STATE_WAITING_FOR_DEVICE }, { .name = "testing_ddr", .val = BCMOLT_DEVICE_STATE_TESTING_DDR }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_device_state = { .name = "bcmolt_device_state", .descr = "The overall state of the host's connection to the device.", .size = sizeof(bcmolt_device_state), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_device_state_string_table } };
+bcmcli_enum_val bcmolt_device_sw_error_id_string_table[] = { { .name = "task_name", .val = BCMOLT_DEVICE_SW_ERROR_ID_TASK_NAME }, { .name = "file_name", .val = BCMOLT_DEVICE_SW_ERROR_ID_FILE_NAME }, { .name = "line_number", .val = BCMOLT_DEVICE_SW_ERROR_ID_LINE_NUMBER }, { .name = "pon_ni", .val = BCMOLT_DEVICE_SW_ERROR_ID_PON_NI }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_device_sw_error_id = { .name = "bcmolt_device_sw_error_id", .descr = "Identifiers for all properties contained in the device_sw_error group.", .size = sizeof(bcmolt_device_sw_error_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_device_sw_error_id_string_table } };
+bcmcli_enum_val bcmolt_device_sw_exception_id_string_table[] = { { .name = "cpu_id", .val = BCMOLT_DEVICE_SW_EXCEPTION_ID_CPU_ID }, { .name = "text", .val = BCMOLT_DEVICE_SW_EXCEPTION_ID_TEXT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_device_sw_exception_id = { .name = "bcmolt_device_sw_exception_id", .descr = "Identifiers for all properties contained in the device_sw_exception group.", .size = sizeof(bcmolt_device_sw_exception_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_device_sw_exception_id_string_table } };
+bcmcli_enum_val bcmolt_device_sw_upgrade_activate_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_device_sw_upgrade_activate_id = { .name = "bcmolt_device_sw_upgrade_activate_id", .descr = "Identifiers for all properties contained in the device_sw_upgrade_activate group.", .size = sizeof(bcmolt_device_sw_upgrade_activate_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_device_sw_upgrade_activate_id_string_table } };
+bcmcli_enum_val bcmolt_disable_serial_number_control_string_table[] = { { .name = "unicast_disable", .val = BCMOLT_DISABLE_SERIAL_NUMBER_CONTROL_UNICAST_DISABLE }, { .name = "unicast_enable", .val = BCMOLT_DISABLE_SERIAL_NUMBER_CONTROL_UNICAST_ENABLE }, { .name = "broadcast_enable", .val = BCMOLT_DISABLE_SERIAL_NUMBER_CONTROL_BROADCAST_ENABLE }, { .name = "broadcast_disable", .val = BCMOLT_DISABLE_SERIAL_NUMBER_CONTROL_BROADCAST_DISABLE }, { .name = "disable_discovery", .val = BCMOLT_DISABLE_SERIAL_NUMBER_CONTROL_DISABLE_DISCOVERY }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_disable_serial_number_control = { .name = "bcmolt_disable_serial_number_control", .descr = "Disable Serial Number Control", .size = sizeof(bcmolt_disable_serial_number_control), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_disable_serial_number_control_string_table } };
+bcmcli_enum_val bcmolt_drv_icf_id_string_table[] = { { .name = "idx0", .val = BCMOLT_DRV_ICF_ID_IDX0 }, { .name = "idx1", .val = BCMOLT_DRV_ICF_ID_IDX1 }, { .name = "idx2", .val = BCMOLT_DRV_ICF_ID_IDX2 }, { .name = "idx3", .val = BCMOLT_DRV_ICF_ID_IDX3 }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_drv_icf_id = { .name = "bcmolt_drv_icf_id", .descr = "drv_icf_id", .size = sizeof(bcmolt_drv_icf_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_drv_icf_id_string_table } };
+bcmcli_enum_val bcmolt_drv_sgb_id_string_table[] = { { .name = "idx0", .val = BCMOLT_DRV_SGB_ID_IDX0 }, { .name = "idx1", .val = BCMOLT_DRV_SGB_ID_IDX1 }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_drv_sgb_id = { .name = "bcmolt_drv_sgb_id", .descr = "drv_sgb_id", .size = sizeof(bcmolt_drv_sgb_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_drv_sgb_id_string_table } };
+bcmcli_enum_val bcmolt_ds_vlan_action_string_table[] = { { .name = "remove", .val = BCMOLT_DS_VLAN_ACTION_REMOVE }, { .name = "transparent", .val = BCMOLT_DS_VLAN_ACTION_TRANSPARENT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ds_vlan_action = { .name = "bcmolt_ds_vlan_action", .descr = "DS VLAN action", .size = sizeof(bcmolt_ds_vlan_action), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_ds_vlan_action_string_table } };
+bcmcli_enum_val bcmolt_tfb_trap_behavior_string_table[] = { { .name = "drop", .val = BCMOLT_TFB_TRAP_BEHAVIOR_DROP }, { .name = "forward_nni", .val = BCMOLT_TFB_TRAP_BEHAVIOR_FORWARD_NNI }, { .name = "forward_cpu", .val = BCMOLT_TFB_TRAP_BEHAVIOR_FORWARD_CPU }, { .name = "snoop", .val = BCMOLT_TFB_TRAP_BEHAVIOR_SNOOP }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_tfb_trap_behavior = { .name = "bcmolt_tfb_trap_behavior", .descr = "TFB Trap Behavior", .size = sizeof(bcmolt_tfb_trap_behavior), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_tfb_trap_behavior_string_table } };
+bcmcli_enum_val bcmolt_tfb_mode_string_table[] = { { .name = "gpon", .val = BCMOLT_TFB_MODE_GPON }, { .name = "xgpon", .val = BCMOLT_TFB_MODE_XGPON }, { .name = "epon", .val = BCMOLT_TFB_MODE_EPON }, { .name = "xepon", .val = BCMOLT_TFB_MODE_XEPON }, { .name = "coex", .val = BCMOLT_TFB_MODE_COEX }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_tfb_mode = { .name = "bcmolt_tfb_mode", .descr = "TFB Mode", .size = sizeof(bcmolt_tfb_mode), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_tfb_mode_string_table } };
+bcmcli_enum_val bcmolt_lim_sec_mode_up_string_table[] = { { .name = "tek", .val = BCMOLT_LIM_SEC_MODE_UP_TEK }, { .name = "per_llid", .val = BCMOLT_LIM_SEC_MODE_UP_PER_LLID }, { .name = "ntt", .val = BCMOLT_LIM_SEC_MODE_UP_NTT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_lim_sec_mode_up = { .name = "bcmolt_lim_sec_mode_up", .descr = "LIM SEC Mode Up", .size = sizeof(bcmolt_lim_sec_mode_up), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_lim_sec_mode_up_string_table } };
+bcmcli_enum_val bcmolt_lim_sec_mode_dn_string_table[] = { { .name = "tek", .val = BCMOLT_LIM_SEC_MODE_DN_TEK }, { .name = "per_llid", .val = BCMOLT_LIM_SEC_MODE_DN_PER_LLID }, { .name = "ntt", .val = BCMOLT_LIM_SEC_MODE_DN_NTT }, { .name = "cepon", .val = BCMOLT_LIM_SEC_MODE_DN_CEPON }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_lim_sec_mode_dn = { .name = "bcmolt_lim_sec_mode_dn", .descr = "LIM SEC Mode Dn", .size = sizeof(bcmolt_lim_sec_mode_dn), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_lim_sec_mode_dn_string_table } };
+bcmcli_enum_val bcmolt_xim_sec_mode_string_table[] = { { .name = "reserved_0", .val = BCMOLT_XIM_SEC_MODE_RESERVED_0 }, { .name = "per_llid", .val = BCMOLT_XIM_SEC_MODE_PER_LLID }, { .name = "reserved_2", .val = BCMOLT_XIM_SEC_MODE_RESERVED_2 }, { .name = "cepon", .val = BCMOLT_XIM_SEC_MODE_CEPON }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xim_sec_mode = { .name = "bcmolt_xim_sec_mode", .descr = "XIM SEC Mode", .size = sizeof(bcmolt_xim_sec_mode), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xim_sec_mode_string_table } };
+bcmcli_enum_val bcmolt_hsc_ram_string_table[] = { { .name = "llc_t1", .val = BCMOLT_HSC_RAM_LLC_T1 }, { .name = "llc_t2", .val = BCMOLT_HSC_RAM_LLC_T2 }, { .name = "llc_t3", .val = BCMOLT_HSC_RAM_LLC_T3 }, { .name = "grp_t2", .val = BCMOLT_HSC_RAM_GRP_T2 }, { .name = "grp_t3", .val = BCMOLT_HSC_RAM_GRP_T3 }, { .name = "shp_t1", .val = BCMOLT_HSC_RAM_SHP_T1 }, { .name = "shp_t2", .val = BCMOLT_HSC_RAM_SHP_T2 }, { .name = "shp_t3", .val = BCMOLT_HSC_RAM_SHP_T3 }, { .name = "prf_t1", .val = BCMOLT_HSC_RAM_PRF_T1 }, { .name = "prf_t2", .val = BCMOLT_HSC_RAM_PRF_T2 }, { .name = "prf_t3", .val = BCMOLT_HSC_RAM_PRF_T3 }, { .name = "cre_t1", .val = BCMOLT_HSC_RAM_CRE_T1 }, { .name = "cre_t2", .val = BCMOLT_HSC_RAM_CRE_T2 }, { .name = "cre_t3", .val = BCMOLT_HSC_RAM_CRE_T3 }, { .name = "elu", .val = BCMOLT_HSC_RAM_ELU }, { .name = "ptr_t1", .val = BCMOLT_HSC_RAM_PTR_T1 }, { .name = "ptr_t2", .val = BCMOLT_HSC_RAM_PTR_T2 }, { .name = "agr_shp_t1", .val = BCMOLT_HSC_RAM_AGR_SHP_T1 }, { .name = "aem", .val = BCMOLT_HSC_RAM_AEM }, { .name = "all_llc", .val = BCMOLT_HSC_RAM_ALL_LLC }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_hsc_ram = { .name = "bcmolt_hsc_ram", .descr = "HSC RAM", .size = sizeof(bcmolt_hsc_ram), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_hsc_ram_string_table } };
+bcmcli_enum_val bcmolt_lim_ram_string_table[] = { { .name = "llid_up", .val = BCMOLT_LIM_RAM_LLID_UP }, { .name = "per_onu_stat", .val = BCMOLT_LIM_RAM_PER_ONU_STAT }, { .name = "fec_up_full_s", .val = BCMOLT_LIM_RAM_FEC_UP_FULL_S }, { .name = "fec_up_data", .val = BCMOLT_LIM_RAM_FEC_UP_DATA }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_lim_ram = { .name = "bcmolt_lim_ram", .descr = "LIM RAM", .size = sizeof(bcmolt_lim_ram), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_lim_ram_string_table } };
+bcmcli_enum_val bcmolt_lky_ram_string_table[] = { { .name = "tx_key_ram", .val = BCMOLT_LKY_RAM_TX_KEY_RAM }, { .name = "tx_key_buffer", .val = BCMOLT_LKY_RAM_TX_KEY_BUFFER }, { .name = "rx_key_ram", .val = BCMOLT_LKY_RAM_RX_KEY_RAM }, { .name = "rx_key_buffer", .val = BCMOLT_LKY_RAM_RX_KEY_BUFFER }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_lky_ram = { .name = "bcmolt_lky_ram", .descr = "LKY RAM", .size = sizeof(bcmolt_lky_ram), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_lky_ram_string_table } };
+bcmcli_enum_val bcmolt_mic_ram_string_table[] = { { .name = "range", .val = BCMOLT_MIC_RAM_RANGE }, { .name = "llid", .val = BCMOLT_MIC_RAM_LLID }, { .name = "index", .val = BCMOLT_MIC_RAM_IDX }, { .name = "grant_miss", .val = BCMOLT_MIC_RAM_GRANT_MISS }, { .name = "grant_id", .val = BCMOLT_MIC_RAM_GRANT_ID }, { .name = "tx_iv", .val = BCMOLT_MIC_RAM_TX_IV }, { .name = "rx_iv", .val = BCMOLT_MIC_RAM_RX_IV }, { .name = "tx_port_stat", .val = BCMOLT_MIC_RAM_TX_PORT_STAT }, { .name = "rx_port_stat", .val = BCMOLT_MIC_RAM_RX_PORT_STAT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_mic_ram = { .name = "bcmolt_mic_ram", .descr = "MIC RAM", .size = sizeof(bcmolt_mic_ram), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_mic_ram_string_table } };
+bcmcli_enum_val bcmolt_xpcsrm_ram_string_table[] = { { .name = "capture_fifo", .val = BCMOLT_XPCSRM_RAM_CAPTURE_FIFO }, { .name = "fec_decode", .val = BCMOLT_XPCSRM_RAM_FEC_DECODE }, { .name = "fec_stats", .val = BCMOLT_XPCSRM_RAM_FEC_STATS }, { .name = "fec_enqueue", .val = BCMOLT_XPCSRM_RAM_FEC_ENQUEUE }, { .name = "idle_insert", .val = BCMOLT_XPCSRM_RAM_IDLE_INSERT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xpcsrm_ram = { .name = "bcmolt_xpcsrm_ram", .descr = "XPCSRM RAM", .size = sizeof(bcmolt_xpcsrm_ram), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xpcsrm_ram_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_dummy_struct_for_embedded_types_fields[] = { { .name = "ad", .descr = "ad", .offset = offsetof(bcmolt_dummy_struct_for_embedded_types, ad), .type = &type_descr_uint8_t }, { .name = "et", .descr = "et", .offset = offsetof(bcmolt_dummy_struct_for_embedded_types, et), .type = &type_descr_uint8_t }, { .name = "elg", .descr = "elg", .offset = offsetof(bcmolt_dummy_struct_for_embedded_types, elg), .type = &type_descr_uint8_t }, { .name = "dba_port", .descr = "dba port", .offset = offsetof(bcmolt_dummy_struct_for_embedded_types, dba_port), .type = &type_descr_uint8_t }, { .name = "sgb", .descr = "sgb", .offset = offsetof(bcmolt_dummy_struct_for_embedded_types, sgb), .type = &type_descr_bcmolt_drv_sgb_id }, { .name = "icf", .descr = "icf", .offset = offsetof(bcmolt_dummy_struct_for_embedded_types, icf), .type = &type_descr_bcmolt_drv_icf_id }, { .name = "tfb_trap_behavior", .descr = "tfb trap behavior", .offset = offsetof(bcmolt_dummy_struct_for_embedded_types, tfb_trap_behavior), .type = &type_descr_bcmolt_tfb_trap_behavior }, { .name = "tfb_mode", .descr = "tfb mode", .offset = offsetof(bcmolt_dummy_struct_for_embedded_types, tfb_mode), .type = &type_descr_bcmolt_tfb_mode }, { .name = "lim_sec_mode_up", .descr = "lim sec mode up", .offset = offsetof(bcmolt_dummy_struct_for_embedded_types, lim_sec_mode_up), .type = &type_descr_bcmolt_lim_sec_mode_up }, { .name = "lim_sec_mode_dn", .descr = "lim sec mode dn", .offset = offsetof(bcmolt_dummy_struct_for_embedded_types, lim_sec_mode_dn), .type = &type_descr_bcmolt_lim_sec_mode_dn }, { .name = "xim_sec_mode", .descr = "xim sec mode", .offset = offsetof(bcmolt_dummy_struct_for_embedded_types, xim_sec_mode), .type = &type_descr_bcmolt_xim_sec_mode }, { .name = "dba_ram", .descr = "dba ram", .offset = offsetof(bcmolt_dummy_struct_for_embedded_types, dba_ram), .type = &type_descr_bcmolt_dba_ram }, { .name = "hsc_ram", .descr = "hsc ram", .offset = offsetof(bcmolt_dummy_struct_for_embedded_types, hsc_ram), .type = &type_descr_bcmolt_hsc_ram }, { .name = "lim_ram", .descr = "lim ram", .offset = offsetof(bcmolt_dummy_struct_for_embedded_types, lim_ram), .type = &type_descr_bcmolt_lim_ram }, { .name = "lky_ram", .descr = "lky ram", .offset = offsetof(bcmolt_dummy_struct_for_embedded_types, lky_ram), .type = &type_descr_bcmolt_lky_ram }, { .name = "mic_ram", .descr = "mic ram", .offset = offsetof(bcmolt_dummy_struct_for_embedded_types, mic_ram), .type = &type_descr_bcmolt_mic_ram }, { .name = "xpcs_ram", .descr = "xpcs ram", .offset = offsetof(bcmolt_dummy_struct_for_embedded_types, xpcs_ram), .type = &type_descr_bcmolt_xpcsrm_ram }, { .name = "xg2g_id", .descr = "xg2g id", .offset = offsetof(bcmolt_dummy_struct_for_embedded_types, xg2g_id), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_dummy_struct_for_embedded_types = { .name = "bcmolt_dummy_struct_for_embedded_types", .descr = "Dummy Struct For Embedded Types", .size = sizeof(bcmolt_dummy_struct_for_embedded_types), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_dummy_struct_for_embedded_types_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_dummy_struct_for_embedded_types_fields } } };
+bcmcli_enum_val bcmolt_embedded_image_transfer_status_string_table[] = { { .name = "none", .val = BCMOLT_EMBEDDED_IMAGE_TRANSFER_STATUS_NONE }, { .name = "in_progress", .val = BCMOLT_EMBEDDED_IMAGE_TRANSFER_STATUS_IN_PROGRESS }, { .name = "success", .val = BCMOLT_EMBEDDED_IMAGE_TRANSFER_STATUS_SUCCESS }, { .name = "failure", .val = BCMOLT_EMBEDDED_IMAGE_TRANSFER_STATUS_FAILURE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_embedded_image_transfer_status = { .name = "bcmolt_embedded_image_transfer_status", .descr = "embedded image transfer status", .size = sizeof(bcmolt_embedded_image_transfer_status), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_embedded_image_transfer_status_string_table } };
+static bcmcli_type_descr BCM_DESCR string_64 = { .name = "string[64]", .descr = "ASCII string with max length 64", .size = sizeof(char[64]), .base_type = BCMOLT_BASE_TYPE_ID_STRING };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_embedded_image_entry_fields[] = { { .name = "image_type", .descr = "Type of the embedded file image.", .offset = offsetof(bcmolt_embedded_image_entry, image_type), .type = &type_descr_bcmolt_device_image_type }, { .name = "image_size", .descr = "Size of the embedded file image.  Unit is bytes.", .offset = offsetof(bcmolt_embedded_image_entry, image_size), .type = &type_descr_uint32_t }, { .name = "crc32", .descr = "CRC 32 checksum of entire file image data.", .offset = offsetof(bcmolt_embedded_image_entry, crc32), .type = &type_descr_uint32_t_hex }, { .name = "status", .descr = "Image transfer status.", .offset = offsetof(bcmolt_embedded_image_entry, status), .type = &type_descr_bcmolt_embedded_image_transfer_status }, { .name = "image_name", .descr = "Name of the file image.  Null-terminated string.  This is required for the DPoE ONU only.  DPoE requires the write request OAM contains the name of the file.", .offset = offsetof(bcmolt_embedded_image_entry, image_name), .type = &string_64 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_embedded_image_entry = { .name = "bcmolt_embedded_image_entry", .descr = "Embedded image entry", .size = sizeof(bcmolt_embedded_image_entry), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_embedded_image_entry_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_embedded_image_entry_fields } } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_embedded_image_entry_list_u8 = { .name = "bcmolt_embedded_image_entry_list_u8", .descr = "Variable-length list of embedded_image_entry", .size = sizeof(bcmolt_embedded_image_entry_list_u8), .base_type = BCMOLT_BASE_TYPE_ID_ARR_DYN, .x = { .arr_dyn = { .elem_type = &type_descr_bcmolt_embedded_image_entry, .len_size = 1, .max_size = DEFAULT_DYN_ARR_MAX_SIZE / sizeof(bcmolt_embedded_image_entry) } } };
+bcmcli_enum_val bcmolt_epon_encryption_information_format_string_table[] = { { .name = "cfb", .val = BCMOLT_EPON_ENCRYPTION_INFORMATION_FORMAT_CFB }, { .name = "ctr", .val = BCMOLT_EPON_ENCRYPTION_INFORMATION_FORMAT_CTR }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_encryption_information_format = { .name = "bcmolt_epon_encryption_information_format", .descr = "EPON Encryption information format", .size = sizeof(bcmolt_epon_encryption_information_format), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_encryption_information_format_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_encryption_information_container_fields[] = { { .name = "format", .descr = "Format", .offset = offsetof(bcmolt_encryption_information_container, format), .type = &type_descr_bcmolt_epon_encryption_information_format } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_encryption_information_container_cfb_fields[] = { { .name = "key", .descr = "Key", .offset = offsetof(bcmolt_encryption_information_container, u.cfb.key) - offsetof(bcmolt_encryption_information_container, u.cfb.key), .type = &type_descr_uint8_t_arr_16 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_encryption_information_container_cfb = { .name = "bcmolt_encryption_information_container_cfb", .descr = "Encryption_information_container CFB", .size = sizeof(((bcmolt_encryption_information_container *)0)->u.cfb), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_encryption_information_container_cfb_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_encryption_information_container_cfb_fields } } };
+static bcmcli_type_descr BCM_DESCR type_descr_uint8_t_arr_8 = { .name = "uint8_t[8]", .descr = "Array of 8 elements of type uint8_t", .size = sizeof(uint8_t[8]), .base_type = BCMOLT_BASE_TYPE_ID_ARR_FIXED, .x = { .arr_fixed = { .elem_type = &type_descr_uint8_t, .size = 8 } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_encryption_information_container_ctr_fields[] = { { .name = "key", .descr = "Key", .offset = offsetof(bcmolt_encryption_information_container, u.ctr.key) - offsetof(bcmolt_encryption_information_container, u.ctr.key), .type = &type_descr_uint8_t_arr_16 }, { .name = "sci", .descr = "SCI", .offset = offsetof(bcmolt_encryption_information_container, u.ctr.sci) - offsetof(bcmolt_encryption_information_container, u.ctr.key), .type = &type_descr_uint8_t_arr_8 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_encryption_information_container_ctr = { .name = "bcmolt_encryption_information_container_ctr", .descr = "Encryption_information_container CTR", .size = sizeof(((bcmolt_encryption_information_container *)0)->u.ctr), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_encryption_information_container_ctr_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_encryption_information_container_ctr_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_encryption_information_container_union_fields[] = { { .name = "u.cfb", .descr = "", .offset = offsetof(bcmolt_encryption_information_container, u.cfb), .type = &type_descr_bcmolt_encryption_information_container_cfb }, { .name = "u.ctr", .descr = "", .offset = offsetof(bcmolt_encryption_information_container, u.ctr), .type = &type_descr_bcmolt_encryption_information_container_ctr }, { } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_encryption_information_container = { .name = "bcmolt_encryption_information_container", .descr = "Encryption_information_container", .size = sizeof(bcmolt_encryption_information_container), .base_type = BCMOLT_BASE_TYPE_ID_UNION, .x = { .u = { .num_common_fields = sizeof(type_descr_bcmolt_encryption_information_container_fields) / sizeof(bcmcli_field_descr), .common_fields = type_descr_bcmolt_encryption_information_container_fields, .classifier_idx = 0, .union_fields = type_descr_bcmolt_encryption_information_container_union_fields } } };
+bcmcli_enum_val bcmolt_energy_detect_source_string_table[] = { { .name = "internal", .val = BCMOLT_ENERGY_DETECT_SOURCE_INTERNAL }, { .name = "trx", .val = BCMOLT_ENERGY_DETECT_SOURCE_TRX }, { .name = "bcdr", .val = BCMOLT_ENERGY_DETECT_SOURCE_BCDR }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_energy_detect_source = { .name = "bcmolt_energy_detect_source", .descr = "energy detect source", .size = sizeof(bcmolt_energy_detect_source), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_energy_detect_source_string_table } };
+bcmcli_enum_val bcmolt_epon_1g_turbo_mode_string_table[] = { { .name = "disabled", .val = BCMOLT_EPON_1G_TURBO_MODE_DISABLED }, { .name = "enabled", .val = BCMOLT_EPON_1G_TURBO_MODE_ENABLED }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_1g_turbo_mode = { .name = "bcmolt_epon_1g_turbo_mode", .descr = "EPON turbo mode.  Enables double downstream speed (2G) on 1G EPON NIs", .size = sizeof(bcmolt_epon_1g_turbo_mode), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_1g_turbo_mode_string_table } };
+bcmcli_enum_val bcmolt_epon_clock_transport_mode_string_table[] = { { .name = "host_driven", .val = BCMOLT_EPON_CLOCK_TRANSPORT_MODE_HOST_DRIVEN }, { .name = "embedded_driven", .val = BCMOLT_EPON_CLOCK_TRANSPORT_MODE_EMBEDDED_DRIVEN }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_clock_transport_mode = { .name = "bcmolt_epon_clock_transport_mode", .descr = "EPON Clock Transport Mode", .size = sizeof(bcmolt_epon_clock_transport_mode), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_clock_transport_mode_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_clock_transport_configuration_fields[] = { { .name = "epon_clock_transport_mode", .descr = "Clock Transport mode on this OLT PON Port.", .offset = offsetof(bcmolt_epon_clock_transport_configuration, epon_clock_transport_mode), .type = &type_descr_bcmolt_epon_clock_transport_mode } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_clock_transport_configuration = { .name = "bcmolt_epon_clock_transport_configuration", .descr = "EPON clock transport configuration", .size = sizeof(bcmolt_epon_clock_transport_configuration), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_clock_transport_configuration_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_clock_transport_configuration_fields } } };
+bcmcli_enum_val bcmolt_epon_dba_reporting_mode_string_table[] = { { .name = "siepon_a", .val = BCMOLT_EPON_DBA_REPORTING_MODE_SIEPON_A }, { .name = "siepon_b", .val = BCMOLT_EPON_DBA_REPORTING_MODE_SIEPON_B }, { .name = "siepon_c", .val = BCMOLT_EPON_DBA_REPORTING_MODE_SIEPON_C }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_dba_reporting_mode = { .name = "bcmolt_epon_dba_reporting_mode", .descr = "Control for how the DBA handles received MPCP report frames.", .size = sizeof(bcmolt_epon_dba_reporting_mode), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_dba_reporting_mode_string_table } };
+bcmcli_enum_val bcmolt_epon_link_rate_string_table[] = { { .name = "ten_ten", .val = BCMOLT_EPON_LINK_RATE_TEN_TEN }, { .name = "ten_one", .val = BCMOLT_EPON_LINK_RATE_TEN_ONE }, { .name = "one_one", .val = BCMOLT_EPON_LINK_RATE_ONE_ONE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_rate = { .name = "bcmolt_epon_link_rate", .descr = "EPON link rate", .size = sizeof(bcmolt_epon_link_rate), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_link_rate_string_table } };
+bcmcli_enum_val bcmolt_status_string_table[] = { { .name = "off", .val = BCMOLT_STATUS_OFF }, { .name = "on", .val = BCMOLT_STATUS_ON }, { .name = "no_change", .val = BCMOLT_STATUS_NO_CHANGE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_status = { .name = "bcmolt_status", .descr = "Status", .size = sizeof(bcmolt_status), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_status_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_unknown_link_status_fields[] = { { .name = "link_rate", .descr = "The rate of the unknown link", .offset = offsetof(bcmolt_unknown_link_status, link_rate), .type = &type_descr_bcmolt_epon_link_rate }, { .name = "alarm_status", .descr = "Whether the unknown link alarm is raised or cleared.", .offset = offsetof(bcmolt_unknown_link_status, alarm_status), .type = &type_descr_bcmolt_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_unknown_link_status = { .name = "bcmolt_unknown_link_status", .descr = "Data of unknown link, including rate and alarm status", .size = sizeof(bcmolt_unknown_link_status), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_unknown_link_status_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_unknown_link_status_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_laser_on_off_status_fields[] = { { .name = "laser_on_time", .descr = "The laser on time of the ONU that is violating.", .offset = offsetof(bcmolt_laser_on_off_status, laser_on_time), .type = &type_descr_uint32_t }, { .name = "laser_off_time", .descr = "The laser off time of the ONU that is violating.", .offset = offsetof(bcmolt_laser_on_off_status, laser_off_time), .type = &type_descr_uint32_t }, { .name = "alarm_status", .descr = "Whether the laser on/off violation alarm is raised or cleared.", .offset = offsetof(bcmolt_laser_on_off_status, alarm_status), .type = &type_descr_bcmolt_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_laser_on_off_status = { .name = "bcmolt_laser_on_off_status", .descr = "Data of laser on/off violating link, including attempted laser on time, attempted laser off time, and alarm status.", .size = sizeof(bcmolt_laser_on_off_status), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_laser_on_off_status_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_laser_on_off_status_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_range_status_fields[] = { { .name = "range", .descr = "The range that the violating link attempted to register at.", .offset = offsetof(bcmolt_range_status, range), .type = &type_descr_uint32_t }, { .name = "alarm_status", .descr = "Whether the range violation alarm is raised or cleared.", .offset = offsetof(bcmolt_range_status, alarm_status), .type = &type_descr_bcmolt_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_range_status = { .name = "bcmolt_range_status", .descr = "Data of range violating link, including the range it attempted to use, and alarm status.", .size = sizeof(bcmolt_range_status), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_range_status_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_range_status_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_rogue_status_fields[] = { { .name = "denied_llid", .descr = "LLID", .offset = offsetof(bcmolt_rogue_status, denied_llid), .type = &type_descr_uint16_t }, { .name = "denied_range", .descr = "ONU Range", .offset = offsetof(bcmolt_rogue_status, denied_range), .type = &type_descr_uint32_t }, { .name = "alarm_status", .descr = "Alarm State", .offset = offsetof(bcmolt_rogue_status, alarm_status), .type = &type_descr_bcmolt_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_rogue_status = { .name = "bcmolt_rogue_status", .descr = "Details of Suspected Rogue ONU provided in Denied Link Alarm", .size = sizeof(bcmolt_rogue_status), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_rogue_status_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_rogue_status_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_denied_link_alarm_state_fields[] = { { .name = "unknown_link_violation", .descr = "Unknown Link Violation", .offset = offsetof(bcmolt_epon_denied_link_alarm_state, unknown_link_violation), .type = &type_descr_bcmolt_unknown_link_status }, { .name = "overhead_profile_violation", .descr = "Overhead Profile Violation", .offset = offsetof(bcmolt_epon_denied_link_alarm_state, overhead_profile_violation), .type = &type_descr_bcmolt_status }, { .name = "max_link_violation", .descr = "Max Link Violation", .offset = offsetof(bcmolt_epon_denied_link_alarm_state, max_link_violation), .type = &type_descr_bcmolt_status }, { .name = "llid_pool_empty_violation", .descr = "LLID Pool Empty Violation", .offset = offsetof(bcmolt_epon_denied_link_alarm_state, llid_pool_empty_violation), .type = &type_descr_bcmolt_status }, { .name = "laser_on_off_violation", .descr = "Laser On/Off Violation", .offset = offsetof(bcmolt_epon_denied_link_alarm_state, laser_on_off_violation), .type = &type_descr_bcmolt_laser_on_off_status }, { .name = "system_resource_violation", .descr = "System Resource Violation", .offset = offsetof(bcmolt_epon_denied_link_alarm_state, system_resource_violation), .type = &type_descr_bcmolt_status }, { .name = "range_violation", .descr = "Range Violation", .offset = offsetof(bcmolt_epon_denied_link_alarm_state, range_violation), .type = &type_descr_bcmolt_range_status }, { .name = "tdm_channels_exhausted", .descr = "TDM Channels Exhausted", .offset = offsetof(bcmolt_epon_denied_link_alarm_state, tdm_channels_exhausted), .type = &type_descr_bcmolt_status }, { .name = "rogue_violation", .descr = "Rogue ONU Violation", .offset = offsetof(bcmolt_epon_denied_link_alarm_state, rogue_violation), .type = &type_descr_bcmolt_rogue_status }, { .name = "upstream_bandwidth_violation", .descr = "Upstream Bandwidth Violation", .offset = offsetof(bcmolt_epon_denied_link_alarm_state, upstream_bandwidth_violation), .type = &type_descr_bcmolt_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_denied_link_alarm_state = { .name = "bcmolt_epon_denied_link_alarm_state", .descr = "The state of all alarms on an EPON Denied Link.", .size = sizeof(bcmolt_epon_denied_link_alarm_state), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_denied_link_alarm_state_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_denied_link_alarm_state_fields } } };
+bcmcli_enum_val bcmolt_epon_denied_link_auto_cfg_id_string_table[] = { { .name = "laser_on_off_violation", .val = BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_LASER_ON_OFF_VIOLATION }, { .name = "llid_pool_empty_violation", .val = BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_LLID_POOL_EMPTY_VIOLATION }, { .name = "max_link_violation", .val = BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_MAX_LINK_VIOLATION }, { .name = "overhead_profile_violation", .val = BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_OVERHEAD_PROFILE_VIOLATION }, { .name = "range_violation", .val = BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_RANGE_VIOLATION }, { .name = "rogue_violation", .val = BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_ROGUE_VIOLATION }, { .name = "system_resource_violation", .val = BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_SYSTEM_RESOURCE_VIOLATION }, { .name = "tdm_channels_exhausted", .val = BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_TDM_CHANNELS_EXHAUSTED }, { .name = "unknown_link_violation", .val = BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_UNKNOWN_LINK_VIOLATION }, { .name = "upstream_bandwidth_violation", .val = BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_UPSTREAM_BANDWIDTH_VIOLATION }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_denied_link_auto_cfg_id = { .name = "bcmolt_epon_denied_link_auto_cfg_id", .descr = "Identifiers for all properties contained in the epon_denied_link_auto_cfg group.", .size = sizeof(bcmolt_epon_denied_link_auto_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_denied_link_auto_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_epon_denied_link_cfg_id_string_table[] = { { .name = "alarm_state", .val = BCMOLT_EPON_DENIED_LINK_CFG_ID_ALARM_STATE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_denied_link_cfg_id = { .name = "bcmolt_epon_denied_link_cfg_id", .descr = "Identifiers for all properties contained in the epon_denied_link_cfg group.", .size = sizeof(bcmolt_epon_denied_link_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_denied_link_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_epon_denied_link_key_id_string_table[] = { { .name = "epon_ni", .val = BCMOLT_EPON_DENIED_LINK_KEY_ID_EPON_NI }, { .name = "mac_address", .val = BCMOLT_EPON_DENIED_LINK_KEY_ID_MAC_ADDRESS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_denied_link_key_id = { .name = "bcmolt_epon_denied_link_key_id", .descr = "Identifiers for all properties contained in the epon_denied_link_key group.", .size = sizeof(bcmolt_epon_denied_link_key_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_denied_link_key_id_string_table } };
+bcmcli_enum_val bcmolt_epon_denied_link_laser_on_off_violation_id_string_table[] = { { .name = "alarm_status", .val = BCMOLT_EPON_DENIED_LINK_LASER_ON_OFF_VIOLATION_ID_ALARM_STATUS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_denied_link_laser_on_off_violation_id = { .name = "bcmolt_epon_denied_link_laser_on_off_violation_id", .descr = "Identifiers for all properties contained in the epon_denied_link_laser_on_off_violation group.", .size = sizeof(bcmolt_epon_denied_link_laser_on_off_violation_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_denied_link_laser_on_off_violation_id_string_table } };
+bcmcli_enum_val bcmolt_epon_denied_link_llid_pool_empty_violation_id_string_table[] = { { .name = "alarm_status", .val = BCMOLT_EPON_DENIED_LINK_LLID_POOL_EMPTY_VIOLATION_ID_ALARM_STATUS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_denied_link_llid_pool_empty_violation_id = { .name = "bcmolt_epon_denied_link_llid_pool_empty_violation_id", .descr = "Identifiers for all properties contained in the epon_denied_link_llid_pool_empty_violation group.", .size = sizeof(bcmolt_epon_denied_link_llid_pool_empty_violation_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_denied_link_llid_pool_empty_violation_id_string_table } };
+bcmcli_enum_val bcmolt_epon_denied_link_max_link_violation_id_string_table[] = { { .name = "alarm_status", .val = BCMOLT_EPON_DENIED_LINK_MAX_LINK_VIOLATION_ID_ALARM_STATUS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_denied_link_max_link_violation_id = { .name = "bcmolt_epon_denied_link_max_link_violation_id", .descr = "Identifiers for all properties contained in the epon_denied_link_max_link_violation group.", .size = sizeof(bcmolt_epon_denied_link_max_link_violation_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_denied_link_max_link_violation_id_string_table } };
+bcmcli_enum_val bcmolt_epon_denied_link_overhead_profile_violation_id_string_table[] = { { .name = "alarm_status", .val = BCMOLT_EPON_DENIED_LINK_OVERHEAD_PROFILE_VIOLATION_ID_ALARM_STATUS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_denied_link_overhead_profile_violation_id = { .name = "bcmolt_epon_denied_link_overhead_profile_violation_id", .descr = "Identifiers for all properties contained in the epon_denied_link_overhead_profile_violation group.", .size = sizeof(bcmolt_epon_denied_link_overhead_profile_violation_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_denied_link_overhead_profile_violation_id_string_table } };
+bcmcli_enum_val bcmolt_epon_denied_link_range_violation_id_string_table[] = { { .name = "alarm_status", .val = BCMOLT_EPON_DENIED_LINK_RANGE_VIOLATION_ID_ALARM_STATUS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_denied_link_range_violation_id = { .name = "bcmolt_epon_denied_link_range_violation_id", .descr = "Identifiers for all properties contained in the epon_denied_link_range_violation group.", .size = sizeof(bcmolt_epon_denied_link_range_violation_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_denied_link_range_violation_id_string_table } };
+bcmcli_enum_val bcmolt_epon_denied_link_rogue_violation_id_string_table[] = { { .name = "alarm_status", .val = BCMOLT_EPON_DENIED_LINK_ROGUE_VIOLATION_ID_ALARM_STATUS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_denied_link_rogue_violation_id = { .name = "bcmolt_epon_denied_link_rogue_violation_id", .descr = "Identifiers for all properties contained in the epon_denied_link_rogue_violation group.", .size = sizeof(bcmolt_epon_denied_link_rogue_violation_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_denied_link_rogue_violation_id_string_table } };
+bcmcli_enum_val bcmolt_epon_denied_link_system_resource_violation_id_string_table[] = { { .name = "alarm_status", .val = BCMOLT_EPON_DENIED_LINK_SYSTEM_RESOURCE_VIOLATION_ID_ALARM_STATUS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_denied_link_system_resource_violation_id = { .name = "bcmolt_epon_denied_link_system_resource_violation_id", .descr = "Identifiers for all properties contained in the epon_denied_link_system_resource_violation group.", .size = sizeof(bcmolt_epon_denied_link_system_resource_violation_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_denied_link_system_resource_violation_id_string_table } };
+bcmcli_enum_val bcmolt_epon_denied_link_tdm_channels_exhausted_id_string_table[] = { { .name = "alarm_status", .val = BCMOLT_EPON_DENIED_LINK_TDM_CHANNELS_EXHAUSTED_ID_ALARM_STATUS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_denied_link_tdm_channels_exhausted_id = { .name = "bcmolt_epon_denied_link_tdm_channels_exhausted_id", .descr = "Identifiers for all properties contained in the epon_denied_link_tdm_channels_exhausted group.", .size = sizeof(bcmolt_epon_denied_link_tdm_channels_exhausted_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_denied_link_tdm_channels_exhausted_id_string_table } };
+bcmcli_enum_val bcmolt_epon_denied_link_unknown_link_violation_id_string_table[] = { { .name = "alarm_status", .val = BCMOLT_EPON_DENIED_LINK_UNKNOWN_LINK_VIOLATION_ID_ALARM_STATUS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_denied_link_unknown_link_violation_id = { .name = "bcmolt_epon_denied_link_unknown_link_violation_id", .descr = "Identifiers for all properties contained in the epon_denied_link_unknown_link_violation group.", .size = sizeof(bcmolt_epon_denied_link_unknown_link_violation_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_denied_link_unknown_link_violation_id_string_table } };
+bcmcli_enum_val bcmolt_epon_denied_link_upstream_bandwidth_violation_id_string_table[] = { { .name = "alarm_status", .val = BCMOLT_EPON_DENIED_LINK_UPSTREAM_BANDWIDTH_VIOLATION_ID_ALARM_STATUS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_denied_link_upstream_bandwidth_violation_id = { .name = "bcmolt_epon_denied_link_upstream_bandwidth_violation_id", .descr = "Identifiers for all properties contained in the epon_denied_link_upstream_bandwidth_violation group.", .size = sizeof(bcmolt_epon_denied_link_upstream_bandwidth_violation_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_denied_link_upstream_bandwidth_violation_id_string_table } };
+bcmcli_enum_val bcmolt_epon_encryption_mode_string_table[] = { { .name = "no_encryption", .val = BCMOLT_EPON_ENCRYPTION_MODE_NO_ENCRYPTION }, { .name = "epon_triple_churning", .val = BCMOLT_EPON_ENCRYPTION_MODE_EPON_TRIPLE_CHURNING }, { .name = "epon_zero_overhead_aes", .val = BCMOLT_EPON_ENCRYPTION_MODE_EPON_ZERO_OVERHEAD_AES }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_encryption_mode = { .name = "bcmolt_epon_encryption_mode", .descr = "EPON encryption mode", .size = sizeof(bcmolt_epon_encryption_mode), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_encryption_mode_string_table } };
+bcmcli_enum_val bcmolt_epon_key_choice_string_table[] = { { .name = "key_0", .val = BCMOLT_EPON_KEY_CHOICE_KEY_0 }, { .name = "key_1", .val = BCMOLT_EPON_KEY_CHOICE_KEY_1 }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_key_choice = { .name = "bcmolt_epon_key_choice", .descr = "Epon Key Choice", .size = sizeof(bcmolt_epon_key_choice), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_key_choice_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_encryption_config_fields[] = { { .name = "downstream_mode", .descr = "Downstream Mode", .offset = offsetof(bcmolt_epon_encryption_config, downstream_mode), .type = &type_descr_bcmolt_epon_encryption_mode }, { .name = "downstream_key_choice", .descr = "Downstream Key Choice", .offset = offsetof(bcmolt_epon_encryption_config, downstream_key_choice), .type = &type_descr_bcmolt_epon_key_choice }, { .name = "downstream_encryption_information", .descr = "Downstream Encryption Information", .offset = offsetof(bcmolt_epon_encryption_config, downstream_encryption_information), .type = &type_descr_bcmolt_encryption_information_container }, { .name = "upstream_mode", .descr = "Upstream Mode", .offset = offsetof(bcmolt_epon_encryption_config, upstream_mode), .type = &type_descr_bcmolt_epon_encryption_mode }, { .name = "upstream_key_choice", .descr = "Upstream Key Choice", .offset = offsetof(bcmolt_epon_encryption_config, upstream_key_choice), .type = &type_descr_bcmolt_epon_key_choice }, { .name = "upstream_encryption_information", .descr = "Upstream Encryption Information", .offset = offsetof(bcmolt_epon_encryption_config, upstream_encryption_information), .type = &type_descr_bcmolt_encryption_information_container } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_encryption_config = { .name = "bcmolt_epon_encryption_config", .descr = "Keys and mode for encrypting the EPON logical link.", .size = sizeof(bcmolt_epon_encryption_config), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_encryption_config_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_encryption_config_fields } } };
+bcmcli_enum_val bcmolt_epon_encryption_direction_string_table[] = { { .name = "downstream_only", .val = BCMOLT_EPON_ENCRYPTION_DIRECTION_DOWNSTREAM_ONLY }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_encryption_direction = { .name = "bcmolt_epon_encryption_direction", .descr = "EPON Encryption Direction", .size = sizeof(bcmolt_epon_encryption_direction), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_encryption_direction_string_table } };
+bcmcli_enum_val bcmolt_epon_fec_en_state_string_table[] = { { .name = "disabled", .val = BCMOLT_EPON_FEC_EN_STATE_DISABLED }, { .name = "enabled", .val = BCMOLT_EPON_FEC_EN_STATE_ENABLED }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_fec_en_state = { .name = "bcmolt_epon_fec_en_state", .descr = "EPON FEC enable state.  See flag descriptions for restrictions.", .size = sizeof(bcmolt_epon_fec_en_state), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_fec_en_state_string_table } };
+bcmcli_enum_val bcmolt_epon_oam_type_string_table[] = { { .name = "broadcom", .val = BCMOLT_EPON_OAM_TYPE_BROADCOM }, { .name = "ctc", .val = BCMOLT_EPON_OAM_TYPE_CTC }, { .name = "dpoe", .val = BCMOLT_EPON_OAM_TYPE_DPOE }, { .name = "siepona", .val = BCMOLT_EPON_OAM_TYPE_SIEPONA }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_oam_type = { .name = "bcmolt_epon_oam_type", .descr = "The types of OAM to choose from.", .size = sizeof(bcmolt_epon_oam_type), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_oam_type_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_key_exchange_config_fields[] = { { .name = "oam_type", .descr = "The type of OAM that is sent to start the key exchange.", .offset = offsetof(bcmolt_epon_key_exchange_config, oam_type), .type = &type_descr_bcmolt_epon_oam_type }, { .name = "period", .descr = "period", .offset = offsetof(bcmolt_epon_key_exchange_config, period), .type = &type_descr_uint16_t }, { .name = "direction", .descr = "Encryption direction: Downstream only or Bi-directional.", .offset = offsetof(bcmolt_epon_key_exchange_config, direction), .type = &type_descr_bcmolt_epon_encryption_direction } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_key_exchange_config = { .name = "bcmolt_epon_key_exchange_config", .descr = "Key exchange configuration that applies to the EPON link.", .size = sizeof(bcmolt_epon_key_exchange_config), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_key_exchange_config_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_key_exchange_config_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_laser_overhead_parameters_fields[] = { { .name = "laser_on_time", .descr = "Number of time quanta to allow for ONUs' laser-on transition.", .offset = offsetof(bcmolt_epon_laser_overhead_parameters, laser_on_time), .type = &type_descr_uint32_t }, { .name = "laser_off_time", .descr = "Number of time quanta to allow for ONUs' laser-off transition.", .offset = offsetof(bcmolt_epon_laser_overhead_parameters, laser_off_time), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_laser_overhead_parameters = { .name = "bcmolt_epon_laser_overhead_parameters", .descr = "EPON laser overhead parameters. (Laser On and Laser Off times)", .size = sizeof(bcmolt_epon_laser_overhead_parameters), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_laser_overhead_parameters_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_laser_overhead_parameters_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_link_alarm_state_fields[] = { { .name = "key_exchange_failure", .descr = "Key Exchange Failure", .offset = offsetof(bcmolt_epon_link_alarm_state, key_exchange_failure), .type = &type_descr_bcmolt_status }, { .name = "invalid_mpcp_report_received", .descr = "Invalid MPCP Report Received", .offset = offsetof(bcmolt_epon_link_alarm_state, invalid_mpcp_report_received), .type = &type_descr_bcmolt_status }, { .name = "mpcp_report_timeout", .descr = "MPCP Report Timeout", .offset = offsetof(bcmolt_epon_link_alarm_state, mpcp_report_timeout), .type = &type_descr_bcmolt_status }, { .name = "oam_keepalive_timeout", .descr = "OAM Keepalive Timeout", .offset = offsetof(bcmolt_epon_link_alarm_state, oam_keepalive_timeout), .type = &type_descr_bcmolt_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_alarm_state = { .name = "bcmolt_epon_link_alarm_state", .descr = "The state of all alarms on an EPON Link.", .size = sizeof(bcmolt_epon_link_alarm_state), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_link_alarm_state_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_link_alarm_state_fields } } };
+bcmcli_enum_val bcmolt_epon_link_auto_cfg_id_string_table[] = { { .name = "duplicate_mpcp_registration_request", .val = BCMOLT_EPON_LINK_AUTO_CFG_ID_DUPLICATE_MPCP_REGISTRATION_REQUEST }, { .name = "encryption_enabled", .val = BCMOLT_EPON_LINK_AUTO_CFG_ID_ENCRYPTION_ENABLED }, { .name = "key_exchange_failure", .val = BCMOLT_EPON_LINK_AUTO_CFG_ID_KEY_EXCHANGE_FAILURE }, { .name = "key_exchange_started", .val = BCMOLT_EPON_LINK_AUTO_CFG_ID_KEY_EXCHANGE_STARTED }, { .name = "key_exchange_stopped", .val = BCMOLT_EPON_LINK_AUTO_CFG_ID_KEY_EXCHANGE_STOPPED }, { .name = "link_deleted", .val = BCMOLT_EPON_LINK_AUTO_CFG_ID_LINK_DELETED }, { .name = "link_speed_mismatch", .val = BCMOLT_EPON_LINK_AUTO_CFG_ID_LINK_SPEED_MISMATCH }, { .name = "mpcp_deregistered", .val = BCMOLT_EPON_LINK_AUTO_CFG_ID_MPCP_DEREGISTERED }, { .name = "mpcp_discovered", .val = BCMOLT_EPON_LINK_AUTO_CFG_ID_MPCP_DISCOVERED }, { .name = "mpcp_reg_ack_timeout", .val = BCMOLT_EPON_LINK_AUTO_CFG_ID_MPCP_REG_ACK_TIMEOUT }, { .name = "mpcp_report_timeout", .val = BCMOLT_EPON_LINK_AUTO_CFG_ID_MPCP_REPORT_TIMEOUT }, { .name = "oam_keepalive_timeout", .val = BCMOLT_EPON_LINK_AUTO_CFG_ID_OAM_KEEPALIVE_TIMEOUT }, { .name = "oam_keepalive_timer_started", .val = BCMOLT_EPON_LINK_AUTO_CFG_ID_OAM_KEEPALIVE_TIMER_STARTED }, { .name = "oam_keepalive_timer_stopped", .val = BCMOLT_EPON_LINK_AUTO_CFG_ID_OAM_KEEPALIVE_TIMER_STOPPED }, { .name = "preprovisioned_link_created", .val = BCMOLT_EPON_LINK_AUTO_CFG_ID_PREPROVISIONED_LINK_CREATED }, { .name = "protection_switch_occurred", .val = BCMOLT_EPON_LINK_AUTO_CFG_ID_PROTECTION_SWITCH_OCCURRED }, { .name = "range_value_changed", .val = BCMOLT_EPON_LINK_AUTO_CFG_ID_RANGE_VALUE_CHANGED }, { .name = "rerange_failure", .val = BCMOLT_EPON_LINK_AUTO_CFG_ID_RERANGE_FAILURE }, { .name = "stat_alarm_cleared", .val = BCMOLT_EPON_LINK_AUTO_CFG_ID_STAT_ALARM_CLEARED }, { .name = "stat_alarm_raised", .val = BCMOLT_EPON_LINK_AUTO_CFG_ID_STAT_ALARM_RAISED }, { .name = "static_registration_done", .val = BCMOLT_EPON_LINK_AUTO_CFG_ID_STATIC_REGISTRATION_DONE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_auto_cfg_id = { .name = "bcmolt_epon_link_auto_cfg_id", .descr = "Identifiers for all properties contained in the epon_link_auto_cfg group.", .size = sizeof(bcmolt_epon_link_auto_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_link_auto_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_epon_link_cfg_id_string_table[] = { { .name = "link_rate", .val = BCMOLT_EPON_LINK_CFG_ID_LINK_RATE }, { .name = "state_flags", .val = BCMOLT_EPON_LINK_CFG_ID_STATE_FLAGS }, { .name = "llid", .val = BCMOLT_EPON_LINK_CFG_ID_LLID }, { .name = "laser_on_time_tq", .val = BCMOLT_EPON_LINK_CFG_ID_LASER_ON_TIME_TQ }, { .name = "laser_off_time_tq", .val = BCMOLT_EPON_LINK_CFG_ID_LASER_OFF_TIME_TQ }, { .name = "range_value_tq", .val = BCMOLT_EPON_LINK_CFG_ID_RANGE_VALUE_TQ }, { .name = "distance", .val = BCMOLT_EPON_LINK_CFG_ID_DISTANCE }, { .name = "alarm_state", .val = BCMOLT_EPON_LINK_CFG_ID_ALARM_STATE }, { .name = "tunnel_id", .val = BCMOLT_EPON_LINK_CFG_ID_TUNNEL_ID }, { .name = "onu_id", .val = BCMOLT_EPON_LINK_CFG_ID_ONU_ID }, { .name = "min_laser_overhead", .val = BCMOLT_EPON_LINK_CFG_ID_MIN_LASER_OVERHEAD }, { .name = "key_exchange_config", .val = BCMOLT_EPON_LINK_CFG_ID_KEY_EXCHANGE_CONFIG }, { .name = "epon_encryption", .val = BCMOLT_EPON_LINK_CFG_ID_EPON_ENCRYPTION }, { .name = "fec_enable", .val = BCMOLT_EPON_LINK_CFG_ID_FEC_ENABLE }, { .name = "oam_heartbeat_config", .val = BCMOLT_EPON_LINK_CFG_ID_OAM_HEARTBEAT_CONFIG }, { .name = "upstream_bandwidth", .val = BCMOLT_EPON_LINK_CFG_ID_UPSTREAM_BANDWIDTH }, { .name = "ubd_info", .val = BCMOLT_EPON_LINK_CFG_ID_UBD_INFO }, { .name = "clock_transport_enable", .val = BCMOLT_EPON_LINK_CFG_ID_CLOCK_TRANSPORT_ENABLE }, { .name = "pending_grants", .val = BCMOLT_EPON_LINK_CFG_ID_PENDING_GRANTS }, { .name = "link_type", .val = BCMOLT_EPON_LINK_CFG_ID_LINK_TYPE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_cfg_id = { .name = "bcmolt_epon_link_cfg_id", .descr = "Identifiers for all properties contained in the epon_link_cfg group.", .size = sizeof(bcmolt_epon_link_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_link_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_epon_link_delete_link_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_delete_link_id = { .name = "bcmolt_epon_link_delete_link_id", .descr = "Identifiers for all properties contained in the epon_link_delete_link group.", .size = sizeof(bcmolt_epon_link_delete_link_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_link_delete_link_id_string_table } };
+bcmcli_enum_val bcmolt_epon_link_duplicate_mpcp_registration_request_id_string_table[] = { { .name = "initial_range_tq", .val = BCMOLT_EPON_LINK_DUPLICATE_MPCP_REGISTRATION_REQUEST_ID_INITIAL_RANGE_TQ }, { .name = "current_range_tq", .val = BCMOLT_EPON_LINK_DUPLICATE_MPCP_REGISTRATION_REQUEST_ID_CURRENT_RANGE_TQ }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_duplicate_mpcp_registration_request_id = { .name = "bcmolt_epon_link_duplicate_mpcp_registration_request_id", .descr = "Identifiers for all properties contained in the epon_link_duplicate_mpcp_registration_request group.", .size = sizeof(bcmolt_epon_link_duplicate_mpcp_registration_request_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_link_duplicate_mpcp_registration_request_id_string_table } };
+bcmcli_enum_val bcmolt_epon_link_encryption_enabled_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_encryption_enabled_id = { .name = "bcmolt_epon_link_encryption_enabled_id", .descr = "Identifiers for all properties contained in the epon_link_encryption_enabled group.", .size = sizeof(bcmolt_epon_link_encryption_enabled_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_link_encryption_enabled_id_string_table } };
+bcmcli_enum_val bcmolt_epon_link_fec_state_string_table[] = { { .name = "disabled", .val = BCMOLT_EPON_LINK_FEC_STATE_DISABLED }, { .name = "enabled", .val = BCMOLT_EPON_LINK_FEC_STATE_ENABLED }, { .name = "use_default", .val = BCMOLT_EPON_LINK_FEC_STATE_USE_DEFAULT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_fec_state = { .name = "bcmolt_epon_link_fec_state", .descr = "epon link fec state", .size = sizeof(bcmolt_epon_link_fec_state), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_link_fec_state_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_link_fec_en_fields[] = { { .name = "upstream", .descr = "FEC enable state for upstream path.", .offset = offsetof(bcmolt_epon_link_fec_en, upstream), .type = &type_descr_bcmolt_epon_link_fec_state }, { .name = "downstream", .descr = "FEC enable state for downstream path.", .offset = offsetof(bcmolt_epon_link_fec_en, downstream), .type = &type_descr_bcmolt_epon_link_fec_state } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_fec_en = { .name = "bcmolt_epon_link_fec_en", .descr = "Downstream and upstream FEC enable state for an EPON link.", .size = sizeof(bcmolt_epon_link_fec_en), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_link_fec_en_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_link_fec_en_fields } } };
+bcmcli_enum_val bcmolt_epon_link_force_rediscovery_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_force_rediscovery_id = { .name = "bcmolt_epon_link_force_rediscovery_id", .descr = "Identifiers for all properties contained in the epon_link_force_rediscovery group.", .size = sizeof(bcmolt_epon_link_force_rediscovery_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_link_force_rediscovery_id_string_table } };
+bcmcli_enum_val bcmolt_epon_link_frame_captured_id_string_table[] = { { .name = "frame", .val = BCMOLT_EPON_LINK_FRAME_CAPTURED_ID_FRAME }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_frame_captured_id = { .name = "bcmolt_epon_link_frame_captured_id", .descr = "Identifiers for all properties contained in the epon_link_frame_captured group.", .size = sizeof(bcmolt_epon_link_frame_captured_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_link_frame_captured_id_string_table } };
+bcmcli_enum_val bcmolt_epon_link_status_string_table[] = { { .name = "none", .val = BCMOLT_EPON_LINK_STATUS_NONE }, { .name = "discovered", .val = BCMOLT_EPON_LINK_STATUS_DISCOVERED }, { .name = "registration_prevented", .val = BCMOLT_EPON_LINK_STATUS_REGISTRATION_PREVENTED }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_status = { .name = "bcmolt_epon_link_status", .descr = "The current registration status of a link.", .size = sizeof(bcmolt_epon_link_status), .base_type = BCMOLT_BASE_TYPE_ID_ENUM_MASK, .x = { .e = bcmolt_epon_link_status_string_table } };
+bcmcli_enum_val bcmolt_mpcp_discovery_info_string_table[] = { { .name = "none", .val = BCMOLT_MPCP_DISCOVERY_INFO_NONE }, { .name = "one_g_capable", .val = BCMOLT_MPCP_DISCOVERY_INFO_ONE_G_CAPABLE }, { .name = "ten_g_capable", .val = BCMOLT_MPCP_DISCOVERY_INFO_TEN_G_CAPABLE }, { .name = "one_g_window", .val = BCMOLT_MPCP_DISCOVERY_INFO_ONE_G_WINDOW }, { .name = "ten_g_window", .val = BCMOLT_MPCP_DISCOVERY_INFO_TEN_G_WINDOW }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_mpcp_discovery_info = { .name = "bcmolt_mpcp_discovery_info", .descr = "MPCP discovery info", .size = sizeof(bcmolt_mpcp_discovery_info), .base_type = BCMOLT_BASE_TYPE_ID_ENUM_MASK, .x = { .e = bcmolt_mpcp_discovery_info_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_link_info_fields[] = { { .name = "link_status", .descr = "Link status flags.", .offset = offsetof(bcmolt_epon_link_info, link_status), .type = &type_descr_bcmolt_epon_link_status }, { .name = "rate", .descr = "The rate at which the link operates.", .offset = offsetof(bcmolt_epon_link_info, rate), .type = &type_descr_bcmolt_epon_link_rate }, { .name = "llid", .descr = "The LLID of the link.", .offset = offsetof(bcmolt_epon_link_info, llid), .type = &type_descr_uint16_t_hex }, { .name = "mpcp_discovery_info", .descr = "Flags from MPCP discovery.", .offset = offsetof(bcmolt_epon_link_info, mpcp_discovery_info), .type = &type_descr_bcmolt_mpcp_discovery_info }, { .name = "onu_laser_on_time_tq", .descr = "Laser on time reported by ONU.  This is set to 0 for 1G/1G links as 1G MPCP does not include this field.", .offset = offsetof(bcmolt_epon_link_info, onu_laser_on_time_tq), .type = &type_descr_uint32_t }, { .name = "onu_laser_off_time_tq", .descr = "Laser off time reported by ONU.", .offset = offsetof(bcmolt_epon_link_info, onu_laser_off_time_tq), .type = &type_descr_uint32_t }, { .name = "pending_grants", .descr = "The number of pending grants.", .offset = offsetof(bcmolt_epon_link_info, pending_grants), .type = &type_descr_uint8_t }, { .name = "range_value_tq", .descr = "The link's range value in TQ.", .offset = offsetof(bcmolt_epon_link_info, range_value_tq), .type = &type_descr_uint32_t }, { .name = "tunnel_id", .descr = "The tunnel ID to use when sending traffic to the link.", .offset = offsetof(bcmolt_epon_link_info, tunnel_id), .type = &type_descr_uint32_t_hex } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_info = { .name = "bcmolt_epon_link_info", .descr = "EPON logical link.", .size = sizeof(bcmolt_epon_link_info), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_link_info_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_link_info_fields } } };
+bcmcli_enum_val bcmolt_epon_link_inject_frame_id_string_table[] = { { .name = "frame", .val = BCMOLT_EPON_LINK_INJECT_FRAME_ID_FRAME }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_inject_frame_id = { .name = "bcmolt_epon_link_inject_frame_id", .descr = "Identifiers for all properties contained in the epon_link_inject_frame group.", .size = sizeof(bcmolt_epon_link_inject_frame_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_link_inject_frame_id_string_table } };
+bcmcli_enum_val bcmolt_epon_link_key_exchange_failure_id_string_table[] = { { .name = "alarm_status", .val = BCMOLT_EPON_LINK_KEY_EXCHANGE_FAILURE_ID_ALARM_STATUS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_key_exchange_failure_id = { .name = "bcmolt_epon_link_key_exchange_failure_id", .descr = "Identifiers for all properties contained in the epon_link_key_exchange_failure group.", .size = sizeof(bcmolt_epon_link_key_exchange_failure_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_link_key_exchange_failure_id_string_table } };
+bcmcli_enum_val bcmolt_epon_link_key_exchange_start_id_string_table[] = { { .name = "period", .val = BCMOLT_EPON_LINK_KEY_EXCHANGE_START_ID_PERIOD }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_key_exchange_start_id = { .name = "bcmolt_epon_link_key_exchange_start_id", .descr = "Identifiers for all properties contained in the epon_link_key_exchange_start group.", .size = sizeof(bcmolt_epon_link_key_exchange_start_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_link_key_exchange_start_id_string_table } };
+bcmcli_enum_val bcmolt_epon_link_key_exchange_started_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_key_exchange_started_id = { .name = "bcmolt_epon_link_key_exchange_started_id", .descr = "Identifiers for all properties contained in the epon_link_key_exchange_started group.", .size = sizeof(bcmolt_epon_link_key_exchange_started_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_link_key_exchange_started_id_string_table } };
+bcmcli_enum_val bcmolt_epon_link_key_exchange_stop_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_key_exchange_stop_id = { .name = "bcmolt_epon_link_key_exchange_stop_id", .descr = "Identifiers for all properties contained in the epon_link_key_exchange_stop group.", .size = sizeof(bcmolt_epon_link_key_exchange_stop_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_link_key_exchange_stop_id_string_table } };
+bcmcli_enum_val bcmolt_epon_link_key_exchange_stopped_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_key_exchange_stopped_id = { .name = "bcmolt_epon_link_key_exchange_stopped_id", .descr = "Identifiers for all properties contained in the epon_link_key_exchange_stopped group.", .size = sizeof(bcmolt_epon_link_key_exchange_stopped_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_link_key_exchange_stopped_id_string_table } };
+bcmcli_enum_val bcmolt_epon_link_key_id_string_table[] = { { .name = "epon_ni", .val = BCMOLT_EPON_LINK_KEY_ID_EPON_NI }, { .name = "mac_address", .val = BCMOLT_EPON_LINK_KEY_ID_MAC_ADDRESS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_key_id = { .name = "bcmolt_epon_link_key_id", .descr = "Identifiers for all properties contained in the epon_link_key group.", .size = sizeof(bcmolt_epon_link_key_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_link_key_id_string_table } };
+bcmcli_enum_val bcmolt_epon_link_link_deleted_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_link_deleted_id = { .name = "bcmolt_epon_link_link_deleted_id", .descr = "Identifiers for all properties contained in the epon_link_link_deleted group.", .size = sizeof(bcmolt_epon_link_link_deleted_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_link_link_deleted_id_string_table } };
+bcmcli_enum_val bcmolt_epon_link_link_speed_mismatch_id_string_table[] = { { .name = "previous_rate", .val = BCMOLT_EPON_LINK_LINK_SPEED_MISMATCH_ID_PREVIOUS_RATE }, { .name = "current_rate", .val = BCMOLT_EPON_LINK_LINK_SPEED_MISMATCH_ID_CURRENT_RATE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_link_speed_mismatch_id = { .name = "bcmolt_epon_link_link_speed_mismatch_id", .descr = "Identifiers for all properties contained in the epon_link_link_speed_mismatch group.", .size = sizeof(bcmolt_epon_link_link_speed_mismatch_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_link_link_speed_mismatch_id_string_table } };
+bcmcli_enum_val bcmolt_epon_link_mpcp_deregistered_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_mpcp_deregistered_id = { .name = "bcmolt_epon_link_mpcp_deregistered_id", .descr = "Identifiers for all properties contained in the epon_link_mpcp_deregistered group.", .size = sizeof(bcmolt_epon_link_mpcp_deregistered_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_link_mpcp_deregistered_id_string_table } };
+bcmcli_enum_val bcmolt_epon_link_mpcp_discovered_id_string_table[] = { { .name = "link_info", .val = BCMOLT_EPON_LINK_MPCP_DISCOVERED_ID_LINK_INFO }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_mpcp_discovered_id = { .name = "bcmolt_epon_link_mpcp_discovered_id", .descr = "Identifiers for all properties contained in the epon_link_mpcp_discovered group.", .size = sizeof(bcmolt_epon_link_mpcp_discovered_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_link_mpcp_discovered_id_string_table } };
+bcmcli_enum_val bcmolt_epon_link_mpcp_reg_ack_timeout_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_mpcp_reg_ack_timeout_id = { .name = "bcmolt_epon_link_mpcp_reg_ack_timeout_id", .descr = "Identifiers for all properties contained in the epon_link_mpcp_reg_ack_timeout group.", .size = sizeof(bcmolt_epon_link_mpcp_reg_ack_timeout_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_link_mpcp_reg_ack_timeout_id_string_table } };
+bcmcli_enum_val bcmolt_epon_link_mpcp_report_timeout_id_string_table[] = { { .name = "alarm_status", .val = BCMOLT_EPON_LINK_MPCP_REPORT_TIMEOUT_ID_ALARM_STATUS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_mpcp_report_timeout_id = { .name = "bcmolt_epon_link_mpcp_report_timeout_id", .descr = "Identifiers for all properties contained in the epon_link_mpcp_report_timeout group.", .size = sizeof(bcmolt_epon_link_mpcp_report_timeout_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_link_mpcp_report_timeout_id_string_table } };
+bcmcli_enum_val bcmolt_epon_link_oam_keepalive_timeout_id_string_table[] = { { .name = "alarm_status", .val = BCMOLT_EPON_LINK_OAM_KEEPALIVE_TIMEOUT_ID_ALARM_STATUS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_oam_keepalive_timeout_id = { .name = "bcmolt_epon_link_oam_keepalive_timeout_id", .descr = "Identifiers for all properties contained in the epon_link_oam_keepalive_timeout group.", .size = sizeof(bcmolt_epon_link_oam_keepalive_timeout_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_link_oam_keepalive_timeout_id_string_table } };
+bcmcli_enum_val bcmolt_epon_link_oam_keepalive_timer_start_id_string_table[] = { { .name = "send_period", .val = BCMOLT_EPON_LINK_OAM_KEEPALIVE_TIMER_START_ID_SEND_PERIOD }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_oam_keepalive_timer_start_id = { .name = "bcmolt_epon_link_oam_keepalive_timer_start_id", .descr = "Identifiers for all properties contained in the epon_link_oam_keepalive_timer_start group.", .size = sizeof(bcmolt_epon_link_oam_keepalive_timer_start_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_link_oam_keepalive_timer_start_id_string_table } };
+bcmcli_enum_val bcmolt_epon_link_oam_keepalive_timer_started_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_oam_keepalive_timer_started_id = { .name = "bcmolt_epon_link_oam_keepalive_timer_started_id", .descr = "Identifiers for all properties contained in the epon_link_oam_keepalive_timer_started group.", .size = sizeof(bcmolt_epon_link_oam_keepalive_timer_started_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_link_oam_keepalive_timer_started_id_string_table } };
+bcmcli_enum_val bcmolt_epon_link_oam_keepalive_timer_stop_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_oam_keepalive_timer_stop_id = { .name = "bcmolt_epon_link_oam_keepalive_timer_stop_id", .descr = "Identifiers for all properties contained in the epon_link_oam_keepalive_timer_stop group.", .size = sizeof(bcmolt_epon_link_oam_keepalive_timer_stop_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_link_oam_keepalive_timer_stop_id_string_table } };
+bcmcli_enum_val bcmolt_epon_link_oam_keepalive_timer_stopped_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_oam_keepalive_timer_stopped_id = { .name = "bcmolt_epon_link_oam_keepalive_timer_stopped_id", .descr = "Identifiers for all properties contained in the epon_link_oam_keepalive_timer_stopped group.", .size = sizeof(bcmolt_epon_link_oam_keepalive_timer_stopped_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_link_oam_keepalive_timer_stopped_id_string_table } };
+bcmcli_enum_val bcmolt_epon_link_preprovisioned_link_created_id_string_table[] = { { .name = "link_info", .val = BCMOLT_EPON_LINK_PREPROVISIONED_LINK_CREATED_ID_LINK_INFO }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_preprovisioned_link_created_id = { .name = "bcmolt_epon_link_preprovisioned_link_created_id", .descr = "Identifiers for all properties contained in the epon_link_preprovisioned_link_created group.", .size = sizeof(bcmolt_epon_link_preprovisioned_link_created_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_link_preprovisioned_link_created_id_string_table } };
+bcmcli_enum_val bcmolt_epon_link_protection_switch_occurred_id_string_table[] = { { .name = "protection_status", .val = BCMOLT_EPON_LINK_PROTECTION_SWITCH_OCCURRED_ID_PROTECTION_STATUS }, { .name = "range_value_tq", .val = BCMOLT_EPON_LINK_PROTECTION_SWITCH_OCCURRED_ID_RANGE_VALUE_TQ }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_protection_switch_occurred_id = { .name = "bcmolt_epon_link_protection_switch_occurred_id", .descr = "Identifiers for all properties contained in the epon_link_protection_switch_occurred group.", .size = sizeof(bcmolt_epon_link_protection_switch_occurred_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_link_protection_switch_occurred_id_string_table } };
+bcmcli_enum_val bcmolt_epon_link_range_value_changed_id_string_table[] = { { .name = "range_value_tq", .val = BCMOLT_EPON_LINK_RANGE_VALUE_CHANGED_ID_RANGE_VALUE_TQ }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_range_value_changed_id = { .name = "bcmolt_epon_link_range_value_changed_id", .descr = "Identifiers for all properties contained in the epon_link_range_value_changed group.", .size = sizeof(bcmolt_epon_link_range_value_changed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_link_range_value_changed_id_string_table } };
+bcmcli_enum_val bcmolt_epon_link_rerange_failure_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_rerange_failure_id = { .name = "bcmolt_epon_link_rerange_failure_id", .descr = "Identifiers for all properties contained in the epon_link_rerange_failure group.", .size = sizeof(bcmolt_epon_link_rerange_failure_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_link_rerange_failure_id_string_table } };
+bcmcli_enum_val bcmolt_epon_link_stat_alarm_cleared_id_string_table[] = { { .name = "stat", .val = BCMOLT_EPON_LINK_STAT_ALARM_CLEARED_ID_STAT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_stat_alarm_cleared_id = { .name = "bcmolt_epon_link_stat_alarm_cleared_id", .descr = "Identifiers for all properties contained in the epon_link_stat_alarm_cleared group.", .size = sizeof(bcmolt_epon_link_stat_alarm_cleared_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_link_stat_alarm_cleared_id_string_table } };
+bcmcli_enum_val bcmolt_epon_link_stat_alarm_raised_id_string_table[] = { { .name = "stat", .val = BCMOLT_EPON_LINK_STAT_ALARM_RAISED_ID_STAT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_stat_alarm_raised_id = { .name = "bcmolt_epon_link_stat_alarm_raised_id", .descr = "Identifiers for all properties contained in the epon_link_stat_alarm_raised group.", .size = sizeof(bcmolt_epon_link_stat_alarm_raised_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_link_stat_alarm_raised_id_string_table } };
+bcmcli_enum_val bcmolt_epon_link_stat_cfg_id_string_table[] = { { .name = "cfg", .val = BCMOLT_EPON_LINK_STAT_CFG_ID_CFG }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_stat_cfg_id = { .name = "bcmolt_epon_link_stat_cfg_id", .descr = "Identifiers for all properties contained in the epon_link_stat_cfg group.", .size = sizeof(bcmolt_epon_link_stat_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_link_stat_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_epon_link_stat_id_string_table[] = { { .name = "rx_data_bytes", .val = BCMOLT_EPON_LINK_STAT_ID_RX_DATA_BYTES }, { .name = "rx_data_frames", .val = BCMOLT_EPON_LINK_STAT_ID_RX_DATA_FRAMES }, { .name = "rx_frames_64", .val = BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_64 }, { .name = "rx_frames_65_127", .val = BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_65_127 }, { .name = "rx_frames_128_255", .val = BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_128_255 }, { .name = "rx_frames_256_511", .val = BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_256_511 }, { .name = "rx_frames_512_1023", .val = BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_512_1023 }, { .name = "rx_frames_1024_1518", .val = BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_1024_1518 }, { .name = "rx_frames_1519_2047", .val = BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_1519_2047 }, { .name = "rx_frames_2048_4095", .val = BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_2048_4095 }, { .name = "rx_frames_4096_9216", .val = BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_4096_9216 }, { .name = "rx_frames_9217_16383", .val = BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_9217_16383 }, { .name = "rx_oam_bytes", .val = BCMOLT_EPON_LINK_STAT_ID_RX_OAM_BYTES }, { .name = "rx_oam_frames", .val = BCMOLT_EPON_LINK_STAT_ID_RX_OAM_FRAMES }, { .name = "rx_mpcp_frames", .val = BCMOLT_EPON_LINK_STAT_ID_RX_MPCP_FRAMES }, { .name = "rx_broadcast_frames", .val = BCMOLT_EPON_LINK_STAT_ID_RX_BROADCAST_FRAMES }, { .name = "rx_unicast_frames", .val = BCMOLT_EPON_LINK_STAT_ID_RX_UNICAST_FRAMES }, { .name = "rx_multicast_frames", .val = BCMOLT_EPON_LINK_STAT_ID_RX_MULTICAST_FRAMES }, { .name = "rx_report_frames", .val = BCMOLT_EPON_LINK_STAT_ID_RX_REPORT_FRAMES }, { .name = "rx_fcs_error", .val = BCMOLT_EPON_LINK_STAT_ID_RX_FCS_ERROR }, { .name = "rx_oversize_error", .val = BCMOLT_EPON_LINK_STAT_ID_RX_OVERSIZE_ERROR }, { .name = "rx_runt_error", .val = BCMOLT_EPON_LINK_STAT_ID_RX_RUNT_ERROR }, { .name = "rx_line_code_error", .val = BCMOLT_EPON_LINK_STAT_ID_RX_LINE_CODE_ERROR }, { .name = "rx_line_code_error_max", .val = BCMOLT_EPON_LINK_STAT_ID_RX_LINE_CODE_ERROR_MAX }, { .name = "tx_data_bytes", .val = BCMOLT_EPON_LINK_STAT_ID_TX_DATA_BYTES }, { .name = "tx_data_frames", .val = BCMOLT_EPON_LINK_STAT_ID_TX_DATA_FRAMES }, { .name = "tx_frames_64", .val = BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_64 }, { .name = "tx_frames_65_127", .val = BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_65_127 }, { .name = "tx_frames_128_255", .val = BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_128_255 }, { .name = "tx_frames_256_511", .val = BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_256_511 }, { .name = "tx_frames_512_1023", .val = BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_512_1023 }, { .name = "tx_frames_1024_1518", .val = BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_1024_1518 }, { .name = "tx_frames_1519_2047", .val = BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_1519_2047 }, { .name = "tx_frames_2048_4095", .val = BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_2048_4095 }, { .name = "tx_frames_4096_9216", .val = BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_4096_9216 }, { .name = "tx_frames_9217_16383", .val = BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_9217_16383 }, { .name = "tx_oam_bytes", .val = BCMOLT_EPON_LINK_STAT_ID_TX_OAM_BYTES }, { .name = "tx_oam_frames", .val = BCMOLT_EPON_LINK_STAT_ID_TX_OAM_FRAMES }, { .name = "tx_mpcp_frames", .val = BCMOLT_EPON_LINK_STAT_ID_TX_MPCP_FRAMES }, { .name = "tx_broadcast_frames", .val = BCMOLT_EPON_LINK_STAT_ID_TX_BROADCAST_FRAMES }, { .name = "tx_unicast_frames", .val = BCMOLT_EPON_LINK_STAT_ID_TX_UNICAST_FRAMES }, { .name = "tx_multicast_frames", .val = BCMOLT_EPON_LINK_STAT_ID_TX_MULTICAST_FRAMES }, { .name = "tx_gates", .val = BCMOLT_EPON_LINK_STAT_ID_TX_GATES }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_stat_id = { .name = "bcmolt_epon_link_stat_id", .descr = "Identifiers for all properties contained in the epon_link_stat group.", .size = sizeof(bcmolt_epon_link_stat_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_link_stat_id_string_table } };
+bcmcli_enum_val bcmolt_epon_link_state_flags_string_table[] = { { .name = "none", .val = BCMOLT_EPON_LINK_STATE_FLAGS_NONE }, { .name = "mpcp_registration_complete", .val = BCMOLT_EPON_LINK_STATE_FLAGS_MPCP_REGISTRATION_COMPLETE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_state_flags = { .name = "bcmolt_epon_link_state_flags", .descr = "EPON link state flags reflect the current status of the link. ", .size = sizeof(bcmolt_epon_link_state_flags), .base_type = BCMOLT_BASE_TYPE_ID_ENUM_MASK, .x = { .e = bcmolt_epon_link_state_flags_string_table } };
+bcmcli_enum_val bcmolt_epon_link_static_registration_done_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_static_registration_done_id = { .name = "bcmolt_epon_link_static_registration_done_id", .descr = "Identifiers for all properties contained in the epon_link_static_registration_done group.", .size = sizeof(bcmolt_epon_link_static_registration_done_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_link_static_registration_done_id_string_table } };
+bcmcli_enum_val bcmolt_epon_link_static_registration_id_string_table[] = { { .name = "laseron_time_tq", .val = BCMOLT_EPON_LINK_STATIC_REGISTRATION_ID_LASERON_TIME_TQ }, { .name = "laseroff_time_tq", .val = BCMOLT_EPON_LINK_STATIC_REGISTRATION_ID_LASEROFF_TIME_TQ }, { .name = "range_value_tq", .val = BCMOLT_EPON_LINK_STATIC_REGISTRATION_ID_RANGE_VALUE_TQ }, { .name = "pending_grants", .val = BCMOLT_EPON_LINK_STATIC_REGISTRATION_ID_PENDING_GRANTS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_static_registration_id = { .name = "bcmolt_epon_link_static_registration_id", .descr = "Identifiers for all properties contained in the epon_link_static_registration group.", .size = sizeof(bcmolt_epon_link_static_registration_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_link_static_registration_id_string_table } };
+bcmcli_enum_val bcmolt_epon_link_type_string_table[] = { { .name = "system", .val = BCMOLT_EPON_LINK_TYPE_SYSTEM }, { .name = "downstream_only", .val = BCMOLT_EPON_LINK_TYPE_DOWNSTREAM_ONLY }, { .name = "bidirectional", .val = BCMOLT_EPON_LINK_TYPE_BIDIRECTIONAL }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_type = { .name = "bcmolt_epon_link_type", .descr = "EPON Link Type", .size = sizeof(bcmolt_epon_link_type), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_link_type_string_table } };
+bcmcli_enum_val bcmolt_mpcp_gate_mode_string_table[] = { { .name = "teknovus", .val = BCMOLT_MPCP_GATE_MODE_TEKNOVUS }, { .name = "custom", .val = BCMOLT_MPCP_GATE_MODE_CUSTOM }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_mpcp_gate_mode = { .name = "bcmolt_mpcp_gate_mode", .descr = "MPCP gate mode.", .size = sizeof(bcmolt_mpcp_gate_mode), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_mpcp_gate_mode_string_table } };
+bcmcli_enum_val bcmolt_mpcp_registration_gate_flags_string_table[] = { { .name = "none", .val = BCMOLT_MPCP_REGISTRATION_GATE_FLAGS_NONE }, { .name = "force_report", .val = BCMOLT_MPCP_REGISTRATION_GATE_FLAGS_FORCE_REPORT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_mpcp_registration_gate_flags = { .name = "bcmolt_mpcp_registration_gate_flags", .descr = "MPCP registration gate flags.", .size = sizeof(bcmolt_mpcp_registration_gate_flags), .base_type = BCMOLT_BASE_TYPE_ID_ENUM_MASK, .x = { .e = bcmolt_mpcp_registration_gate_flags_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gate_parameters_fields[] = { { .name = "flags", .descr = "Flags to set for this gate.", .offset = offsetof(bcmolt_gate_parameters, flags), .type = &type_descr_bcmolt_mpcp_registration_gate_flags }, { .name = "delay_before_ms", .descr = "Delay before sending this gate in milliseconds.", .offset = offsetof(bcmolt_gate_parameters, delay_before_ms), .type = &type_descr_uint32_t }, { .name = "gate_size_tq", .descr = "Size of this gate in time quanta.", .offset = offsetof(bcmolt_gate_parameters, gate_size_tq), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gate_parameters = { .name = "bcmolt_gate_parameters", .descr = "Gate parameters.", .size = sizeof(bcmolt_gate_parameters), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gate_parameters_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gate_parameters_fields } } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gate_parameters_list_u32 = { .name = "bcmolt_gate_parameters_list_u32", .descr = "Variable-length list of gate_parameters", .size = sizeof(bcmolt_gate_parameters_list_u32), .base_type = BCMOLT_BASE_TYPE_ID_ARR_DYN, .x = { .arr_dyn = { .elem_type = &type_descr_bcmolt_gate_parameters, .len_size = 4, .max_size = DEFAULT_DYN_ARR_MAX_SIZE / sizeof(bcmolt_gate_parameters) } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_registration_gate_mode_fields[] = { { .name = "registration_gate_mode", .descr = "MPCP registration gate mode.", .offset = offsetof(bcmolt_epon_registration_gate_mode, registration_gate_mode), .type = &type_descr_bcmolt_mpcp_gate_mode } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_registration_gate_mode_teknovus_fields[] = { { .name = "reg_ack_timeout_ms", .descr = "Amount of time to wait for a link to respond with a register ack after a register is sent.", .offset = offsetof(bcmolt_epon_registration_gate_mode, u.teknovus.reg_ack_timeout_ms) - offsetof(bcmolt_epon_registration_gate_mode, u.teknovus.reg_ack_timeout_ms), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_registration_gate_mode_teknovus = { .name = "bcmolt_epon_registration_gate_mode_teknovus", .descr = "EPON registration gate mode Teknovus", .size = sizeof(((bcmolt_epon_registration_gate_mode *)0)->u.teknovus), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_registration_gate_mode_teknovus_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_registration_gate_mode_teknovus_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_registration_gate_mode_custom_fields[] = { { .name = "gates", .descr = "Gates to send for REG ACK.", .offset = offsetof(bcmolt_epon_registration_gate_mode, u.custom.gates) - offsetof(bcmolt_epon_registration_gate_mode, u.custom.gates), .type = &type_descr_bcmolt_gate_parameters_list_u32 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_registration_gate_mode_custom = { .name = "bcmolt_epon_registration_gate_mode_custom", .descr = "EPON registration gate mode Custom", .size = sizeof(((bcmolt_epon_registration_gate_mode *)0)->u.custom), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_registration_gate_mode_custom_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_registration_gate_mode_custom_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_registration_gate_mode_union_fields[] = { { .name = "u.teknovus", .descr = "", .offset = offsetof(bcmolt_epon_registration_gate_mode, u.teknovus), .type = &type_descr_bcmolt_epon_registration_gate_mode_teknovus }, { .name = "u.custom", .descr = "", .offset = offsetof(bcmolt_epon_registration_gate_mode, u.custom), .type = &type_descr_bcmolt_epon_registration_gate_mode_custom }, { } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_registration_gate_mode = { .name = "bcmolt_epon_registration_gate_mode", .descr = "Specification of the EPON gate mode and associated parameters.", .size = sizeof(bcmolt_epon_registration_gate_mode), .base_type = BCMOLT_BASE_TYPE_ID_UNION, .x = { .u = { .num_common_fields = sizeof(type_descr_bcmolt_epon_registration_gate_mode_fields) / sizeof(bcmcli_field_descr), .common_fields = type_descr_bcmolt_epon_registration_gate_mode_fields, .classifier_idx = 0, .union_fields = type_descr_bcmolt_epon_registration_gate_mode_union_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_logical_link_options_fields[] = { { .name = "registration_gate_mode", .descr = "EPON registration gate mode.", .offset = offsetof(bcmolt_epon_logical_link_options, registration_gate_mode), .type = &type_descr_bcmolt_epon_registration_gate_mode }, { .name = "reporting_mode", .descr = "Control for how the DBA handles received MPCP report frames.", .offset = offsetof(bcmolt_epon_logical_link_options, reporting_mode), .type = &type_descr_bcmolt_epon_dba_reporting_mode }, { .name = "max_links", .descr = "Maximum number of links to register on the EPON NI.  A value of zero indicates no fixed limit. This is an aggregate limit on the number of non-system links on a PON. This limit applies to both registered and non-registered links. This value cannot be reduced below the count of links currently allocated, nor is it valid to increase it above the sum of the per RP mac_links limits.", .offset = offsetof(bcmolt_epon_logical_link_options, max_links), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_logical_link_options = { .name = "bcmolt_epon_logical_link_options", .descr = "Configuration related to EPON logical link registration and reporting.", .size = sizeof(bcmolt_epon_logical_link_options), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_logical_link_options_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_logical_link_options_fields } } };
+bcmcli_enum_val bcmolt_epon_ni_add_link_id_string_table[] = { { .name = "mac_address", .val = BCMOLT_EPON_NI_ADD_LINK_ID_MAC_ADDRESS }, { .name = "rate", .val = BCMOLT_EPON_NI_ADD_LINK_ID_RATE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_ni_add_link_id = { .name = "bcmolt_epon_ni_add_link_id", .descr = "Identifiers for all properties contained in the epon_ni_add_link group.", .size = sizeof(bcmolt_epon_ni_add_link_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_ni_add_link_id_string_table } };
+bcmcli_enum_val bcmolt_epon_ni_add_multicast_link_id_string_table[] = { { .name = "mac_address", .val = BCMOLT_EPON_NI_ADD_MULTICAST_LINK_ID_MAC_ADDRESS }, { .name = "rate", .val = BCMOLT_EPON_NI_ADD_MULTICAST_LINK_ID_RATE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_ni_add_multicast_link_id = { .name = "bcmolt_epon_ni_add_multicast_link_id", .descr = "Identifiers for all properties contained in the epon_ni_add_multicast_link group.", .size = sizeof(bcmolt_epon_ni_add_multicast_link_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_ni_add_multicast_link_id_string_table } };
+bcmcli_enum_val bcmolt_epon_ni_add_protected_standby_link_id_string_table[] = { { .name = "mac_address", .val = BCMOLT_EPON_NI_ADD_PROTECTED_STANDBY_LINK_ID_MAC_ADDRESS }, { .name = "working_link_info", .val = BCMOLT_EPON_NI_ADD_PROTECTED_STANDBY_LINK_ID_WORKING_LINK_INFO }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_ni_add_protected_standby_link_id = { .name = "bcmolt_epon_ni_add_protected_standby_link_id", .descr = "Identifiers for all properties contained in the epon_ni_add_protected_standby_link group.", .size = sizeof(bcmolt_epon_ni_add_protected_standby_link_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_ni_add_protected_standby_link_id_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_ni_alarm_state_fields[] = { { .name = "no_reports", .descr = "No Reports", .offset = offsetof(bcmolt_epon_ni_alarm_state, no_reports), .type = &type_descr_bcmolt_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_ni_alarm_state = { .name = "bcmolt_epon_ni_alarm_state", .descr = "The list of alarms defined for an EPON NI", .size = sizeof(bcmolt_epon_ni_alarm_state), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_ni_alarm_state_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_ni_alarm_state_fields } } };
+bcmcli_enum_val bcmolt_epon_ni_auto_cfg_id_string_table[] = { { .name = "auto_rogue_scan_10g_failure", .val = BCMOLT_EPON_NI_AUTO_CFG_ID_AUTO_ROGUE_SCAN_10G_FAILURE }, { .name = "auto_rogue_scan_1g_failure", .val = BCMOLT_EPON_NI_AUTO_CFG_ID_AUTO_ROGUE_SCAN_1G_FAILURE }, { .name = "llid_quarantined", .val = BCMOLT_EPON_NI_AUTO_CFG_ID_LLID_QUARANTINED }, { .name = "mpcp_timestamp_changed", .val = BCMOLT_EPON_NI_AUTO_CFG_ID_MPCP_TIMESTAMP_CHANGED }, { .name = "no_reports", .val = BCMOLT_EPON_NI_AUTO_CFG_ID_NO_REPORTS }, { .name = "onu_upgrade_complete", .val = BCMOLT_EPON_NI_AUTO_CFG_ID_ONU_UPGRADE_COMPLETE }, { .name = "rerange_failure", .val = BCMOLT_EPON_NI_AUTO_CFG_ID_RERANGE_FAILURE }, { .name = "rogue_scan_complete", .val = BCMOLT_EPON_NI_AUTO_CFG_ID_ROGUE_SCAN_COMPLETE }, { .name = "rssi_measurement_completed", .val = BCMOLT_EPON_NI_AUTO_CFG_ID_RSSI_MEASUREMENT_COMPLETED }, { .name = "state_change_completed", .val = BCMOLT_EPON_NI_AUTO_CFG_ID_STATE_CHANGE_COMPLETED }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_ni_auto_cfg_id = { .name = "bcmolt_epon_ni_auto_cfg_id", .descr = "Identifiers for all properties contained in the epon_ni_auto_cfg group.", .size = sizeof(bcmolt_epon_ni_auto_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_ni_auto_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_epon_ni_auto_rogue_scan_10g_failure_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_ni_auto_rogue_scan_10g_failure_id = { .name = "bcmolt_epon_ni_auto_rogue_scan_10g_failure_id", .descr = "Identifiers for all properties contained in the epon_ni_auto_rogue_scan_10g_failure group.", .size = sizeof(bcmolt_epon_ni_auto_rogue_scan_10g_failure_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_ni_auto_rogue_scan_10g_failure_id_string_table } };
+bcmcli_enum_val bcmolt_epon_ni_auto_rogue_scan_1g_failure_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_ni_auto_rogue_scan_1g_failure_id = { .name = "bcmolt_epon_ni_auto_rogue_scan_1g_failure_id", .descr = "Identifiers for all properties contained in the epon_ni_auto_rogue_scan_1g_failure group.", .size = sizeof(bcmolt_epon_ni_auto_rogue_scan_1g_failure_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_ni_auto_rogue_scan_1g_failure_id_string_table } };
+bcmcli_enum_val bcmolt_epon_ni_cfg_id_string_table[] = { { .name = "mac_address", .val = BCMOLT_EPON_NI_CFG_ID_MAC_ADDRESS }, { .name = "epon_ni_en", .val = BCMOLT_EPON_NI_CFG_ID_EPON_NI_EN }, { .name = "registration_behavior", .val = BCMOLT_EPON_NI_CFG_ID_REGISTRATION_BEHAVIOR }, { .name = "mtu_1g", .val = BCMOLT_EPON_NI_CFG_ID_MTU_1G }, { .name = "mtu_10g", .val = BCMOLT_EPON_NI_CFG_ID_MTU_10G }, { .name = "minimum_fiber_length", .val = BCMOLT_EPON_NI_CFG_ID_MINIMUM_FIBER_LENGTH }, { .name = "maximum_fiber_length", .val = BCMOLT_EPON_NI_CFG_ID_MAXIMUM_FIBER_LENGTH }, { .name = "grant_spacing_tq", .val = BCMOLT_EPON_NI_CFG_ID_GRANT_SPACING_TQ }, { .name = "epon_logical_link_options", .val = BCMOLT_EPON_NI_CFG_ID_EPON_LOGICAL_LINK_OPTIONS }, { .name = "mpcp_discovery_period_ms", .val = BCMOLT_EPON_NI_CFG_ID_MPCP_DISCOVERY_PERIOD_MS }, { .name = "alarm_state", .val = BCMOLT_EPON_NI_CFG_ID_ALARM_STATE }, { .name = "all_links", .val = BCMOLT_EPON_NI_CFG_ID_ALL_LINKS }, { .name = "encryption_cfg", .val = BCMOLT_EPON_NI_CFG_ID_ENCRYPTION_CFG }, { .name = "protection_switching_cfg", .val = BCMOLT_EPON_NI_CFG_ID_PROTECTION_SWITCHING_CFG }, { .name = "clock_transport_cfg", .val = BCMOLT_EPON_NI_CFG_ID_CLOCK_TRANSPORT_CFG }, { .name = "dropdown_weights", .val = BCMOLT_EPON_NI_CFG_ID_DROPDOWN_WEIGHTS }, { .name = "approximate_solicited_usage", .val = BCMOLT_EPON_NI_CFG_ID_APPROXIMATE_SOLICITED_USAGE }, { .name = "approximate_tdm_usage", .val = BCMOLT_EPON_NI_CFG_ID_APPROXIMATE_TDM_USAGE }, { .name = "no_reports_soak_time", .val = BCMOLT_EPON_NI_CFG_ID_NO_REPORTS_SOAK_TIME }, { .name = "pon_aggregate_shaper", .val = BCMOLT_EPON_NI_CFG_ID_PON_AGGREGATE_SHAPER }, { .name = "estimated_pon_latency_tq", .val = BCMOLT_EPON_NI_CFG_ID_ESTIMATED_PON_LATENCY_TQ }, { .name = "onu_upgrade_params", .val = BCMOLT_EPON_NI_CFG_ID_ONU_UPGRADE_PARAMS }, { .name = "auto_rogue_detect_10g_en", .val = BCMOLT_EPON_NI_CFG_ID_AUTO_ROGUE_DETECT_10G_EN }, { .name = "auto_rogue_detect_1g_en", .val = BCMOLT_EPON_NI_CFG_ID_AUTO_ROGUE_DETECT_1G_EN }, { .name = "auto_rogue_detect_10g_threshold", .val = BCMOLT_EPON_NI_CFG_ID_AUTO_ROGUE_DETECT_10G_THRESHOLD }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_ni_cfg_id = { .name = "bcmolt_epon_ni_cfg_id", .descr = "Identifiers for all properties contained in the epon_ni_cfg group.", .size = sizeof(bcmolt_epon_ni_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_ni_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_epon_ni_en_state_string_table[] = { { .name = "disabled", .val = BCMOLT_EPON_NI_EN_STATE_DISABLED }, { .name = "enabled", .val = BCMOLT_EPON_NI_EN_STATE_ENABLED }, { .name = "protected_working", .val = BCMOLT_EPON_NI_EN_STATE_PROTECTED_WORKING }, { .name = "protected_standby", .val = BCMOLT_EPON_NI_EN_STATE_PROTECTED_STANDBY }, { .name = "processing", .val = BCMOLT_EPON_NI_EN_STATE_PROCESSING }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_ni_en_state = { .name = "bcmolt_epon_ni_en_state", .descr = "Enable state of the EPON NI.  Initially the only enable states defined are `disabled' and `enabled', but this may later be extended to include different degrees of enablement.", .size = sizeof(bcmolt_epon_ni_en_state), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_ni_en_state_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_ni_encryption_cfg_fields[] = { { .name = "downstream_encryption_mode", .descr = "Downstream encryption mode.", .offset = offsetof(bcmolt_epon_ni_encryption_cfg, downstream_encryption_mode), .type = &type_descr_bcmolt_epon_encryption_mode }, { .name = "upstream_encryption_mode", .descr = "Upstream encryption mode.", .offset = offsetof(bcmolt_epon_ni_encryption_cfg, upstream_encryption_mode), .type = &type_descr_bcmolt_epon_encryption_mode } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_ni_encryption_cfg = { .name = "bcmolt_epon_ni_encryption_cfg", .descr = "Encryption configuration that applies to the EPON NI as a whole.", .size = sizeof(bcmolt_epon_ni_encryption_cfg), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_ni_encryption_cfg_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_ni_encryption_cfg_fields } } };
+bcmcli_enum_val bcmolt_epon_ni_issue_rssi_grant_id_string_table[] = { { .name = "granted_link", .val = BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_GRANTED_LINK }, { .name = "trigger_width", .val = BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_TRIGGER_WIDTH }, { .name = "trigger_delay", .val = BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_TRIGGER_DELAY }, { .name = "sample_period", .val = BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_SAMPLE_PERIOD }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_ni_issue_rssi_grant_id = { .name = "bcmolt_epon_ni_issue_rssi_grant_id", .descr = "Identifiers for all properties contained in the epon_ni_issue_rssi_grant group.", .size = sizeof(bcmolt_epon_ni_issue_rssi_grant_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_ni_issue_rssi_grant_id_string_table } };
+bcmcli_enum_val bcmolt_epon_ni_key_id_string_table[] = { { .name = "epon_ni", .val = BCMOLT_EPON_NI_KEY_ID_EPON_NI }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_ni_key_id = { .name = "bcmolt_epon_ni_key_id", .descr = "Identifiers for all properties contained in the epon_ni_key group.", .size = sizeof(bcmolt_epon_ni_key_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_ni_key_id_string_table } };
+bcmcli_enum_val bcmolt_epon_ni_llid_quarantined_id_string_table[] = { { .name = "llid", .val = BCMOLT_EPON_NI_LLID_QUARANTINED_ID_LLID }, { .name = "link_rate", .val = BCMOLT_EPON_NI_LLID_QUARANTINED_ID_LINK_RATE }, { .name = "link_mac", .val = BCMOLT_EPON_NI_LLID_QUARANTINED_ID_LINK_MAC }, { .name = "range_value_tq", .val = BCMOLT_EPON_NI_LLID_QUARANTINED_ID_RANGE_VALUE_TQ }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_ni_llid_quarantined_id = { .name = "bcmolt_epon_ni_llid_quarantined_id", .descr = "Identifiers for all properties contained in the epon_ni_llid_quarantined group.", .size = sizeof(bcmolt_epon_ni_llid_quarantined_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_ni_llid_quarantined_id_string_table } };
+bcmcli_enum_val bcmolt_epon_ni_mpcp_timestamp_changed_id_string_table[] = { { .name = "mpcp_timestamp", .val = BCMOLT_EPON_NI_MPCP_TIMESTAMP_CHANGED_ID_MPCP_TIMESTAMP }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_ni_mpcp_timestamp_changed_id = { .name = "bcmolt_epon_ni_mpcp_timestamp_changed_id", .descr = "Identifiers for all properties contained in the epon_ni_mpcp_timestamp_changed group.", .size = sizeof(bcmolt_epon_ni_mpcp_timestamp_changed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_ni_mpcp_timestamp_changed_id_string_table } };
+bcmcli_enum_val bcmolt_epon_ni_no_reports_id_string_table[] = { { .name = "alarm_status", .val = BCMOLT_EPON_NI_NO_REPORTS_ID_ALARM_STATUS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_ni_no_reports_id = { .name = "bcmolt_epon_ni_no_reports_id", .descr = "Identifiers for all properties contained in the epon_ni_no_reports group.", .size = sizeof(bcmolt_epon_ni_no_reports_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_ni_no_reports_id_string_table } };
+bcmcli_enum_val bcmolt_epon_ni_onu_upgrade_complete_id_string_table[] = { { .name = "status", .val = BCMOLT_EPON_NI_ONU_UPGRADE_COMPLETE_ID_STATUS }, { .name = "list_of_failed_entities", .val = BCMOLT_EPON_NI_ONU_UPGRADE_COMPLETE_ID_LIST_OF_FAILED_ENTITIES }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_ni_onu_upgrade_complete_id = { .name = "bcmolt_epon_ni_onu_upgrade_complete_id", .descr = "Identifiers for all properties contained in the epon_ni_onu_upgrade_complete group.", .size = sizeof(bcmolt_epon_ni_onu_upgrade_complete_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_ni_onu_upgrade_complete_id_string_table } };
+bcmcli_enum_val bcmolt_epon_ni_protection_switching_apply_rerange_delta_id_string_table[] = { { .name = "rerange_delta", .val = BCMOLT_EPON_NI_PROTECTION_SWITCHING_APPLY_RERANGE_DELTA_ID_RERANGE_DELTA }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_ni_protection_switching_apply_rerange_delta_id = { .name = "bcmolt_epon_ni_protection_switching_apply_rerange_delta_id", .descr = "Identifiers for all properties contained in the epon_ni_protection_switching_apply_rerange_delta group.", .size = sizeof(bcmolt_epon_ni_protection_switching_apply_rerange_delta_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_ni_protection_switching_apply_rerange_delta_id_string_table } };
+bcmcli_enum_val bcmolt_epon_ni_rerange_failure_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_ni_rerange_failure_id = { .name = "bcmolt_epon_ni_rerange_failure_id", .descr = "Identifiers for all properties contained in the epon_ni_rerange_failure group.", .size = sizeof(bcmolt_epon_ni_rerange_failure_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_ni_rerange_failure_id_string_table } };
+bcmcli_enum_val bcmolt_epon_ni_rogue_llid_scan_id_string_table[] = { { .name = "mode", .val = BCMOLT_EPON_NI_ROGUE_LLID_SCAN_ID_MODE }, { .name = "llid", .val = BCMOLT_EPON_NI_ROGUE_LLID_SCAN_ID_LLID }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_ni_rogue_llid_scan_id = { .name = "bcmolt_epon_ni_rogue_llid_scan_id", .descr = "Identifiers for all properties contained in the epon_ni_rogue_llid_scan group.", .size = sizeof(bcmolt_epon_ni_rogue_llid_scan_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_ni_rogue_llid_scan_id_string_table } };
+bcmcli_enum_val bcmolt_epon_ni_rogue_scan_complete_id_string_table[] = { { .name = "return_ind_status", .val = BCMOLT_EPON_NI_ROGUE_SCAN_COMPLETE_ID_RETURN_IND_STATUS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_ni_rogue_scan_complete_id = { .name = "bcmolt_epon_ni_rogue_scan_complete_id", .descr = "Identifiers for all properties contained in the epon_ni_rogue_scan_complete group.", .size = sizeof(bcmolt_epon_ni_rogue_scan_complete_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_ni_rogue_scan_complete_id_string_table } };
+bcmcli_enum_val bcmolt_epon_ni_rssi_measurement_completed_id_string_table[] = { { .name = "status", .val = BCMOLT_EPON_NI_RSSI_MEASUREMENT_COMPLETED_ID_STATUS }, { .name = "llid", .val = BCMOLT_EPON_NI_RSSI_MEASUREMENT_COMPLETED_ID_LLID }, { .name = "link_mac", .val = BCMOLT_EPON_NI_RSSI_MEASUREMENT_COMPLETED_ID_LINK_MAC }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_ni_rssi_measurement_completed_id = { .name = "bcmolt_epon_ni_rssi_measurement_completed_id", .descr = "Identifiers for all properties contained in the epon_ni_rssi_measurement_completed group.", .size = sizeof(bcmolt_epon_ni_rssi_measurement_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_ni_rssi_measurement_completed_id_string_table } };
+bcmcli_enum_val bcmolt_epon_ni_set_epon_ni_en_state_id_string_table[] = { { .name = "new_state", .val = BCMOLT_EPON_NI_SET_EPON_NI_EN_STATE_ID_NEW_STATE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_ni_set_epon_ni_en_state_id = { .name = "bcmolt_epon_ni_set_epon_ni_en_state_id", .descr = "Identifiers for all properties contained in the epon_ni_set_epon_ni_en_state group.", .size = sizeof(bcmolt_epon_ni_set_epon_ni_en_state_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_ni_set_epon_ni_en_state_id_string_table } };
+bcmcli_enum_val bcmolt_epon_ni_start_onu_upgrade_id_string_table[] = { { .name = "list_of_onu_ids", .val = BCMOLT_EPON_NI_START_ONU_UPGRADE_ID_LIST_OF_ONU_IDS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_ni_start_onu_upgrade_id = { .name = "bcmolt_epon_ni_start_onu_upgrade_id", .descr = "Identifiers for all properties contained in the epon_ni_start_onu_upgrade group.", .size = sizeof(bcmolt_epon_ni_start_onu_upgrade_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_ni_start_onu_upgrade_id_string_table } };
+bcmcli_enum_val bcmolt_epon_ni_state_change_completed_id_string_table[] = { { .name = "new_state", .val = BCMOLT_EPON_NI_STATE_CHANGE_COMPLETED_ID_NEW_STATE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_ni_state_change_completed_id = { .name = "bcmolt_epon_ni_state_change_completed_id", .descr = "Identifiers for all properties contained in the epon_ni_state_change_completed group.", .size = sizeof(bcmolt_epon_ni_state_change_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_ni_state_change_completed_id_string_table } };
+bcmcli_enum_val bcmolt_epon_oam_extension_type_string_table[] = { { .name = "reserved", .val = BCMOLT_EPON_OAM_EXTENSION_TYPE_RESERVED }, { .name = "broadcom", .val = BCMOLT_EPON_OAM_EXTENSION_TYPE_BROADCOM }, { .name = "ctc", .val = BCMOLT_EPON_OAM_EXTENSION_TYPE_CTC }, { .name = "dasan", .val = BCMOLT_EPON_OAM_EXTENSION_TYPE_DASAN }, { .name = "kt", .val = BCMOLT_EPON_OAM_EXTENSION_TYPE_KT }, { .name = "dpoe", .val = BCMOLT_EPON_OAM_EXTENSION_TYPE_DPOE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_oam_extension_type = { .name = "bcmolt_epon_oam_extension_type", .descr = "EPON OAM Extension Type", .size = sizeof(bcmolt_epon_oam_extension_type), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_oam_extension_type_string_table } };
+bcmcli_enum_val bcmolt_epon_onu_10g_us_auto_cfg_id_string_table[] = { { .name = "stat_alarm_cleared", .val = BCMOLT_EPON_ONU_10G_US_AUTO_CFG_ID_STAT_ALARM_CLEARED }, { .name = "stat_alarm_raised", .val = BCMOLT_EPON_ONU_10G_US_AUTO_CFG_ID_STAT_ALARM_RAISED }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_onu_10g_us_auto_cfg_id = { .name = "bcmolt_epon_onu_10g_us_auto_cfg_id", .descr = "Identifiers for all properties contained in the epon_onu_10g_us_auto_cfg group.", .size = sizeof(bcmolt_epon_onu_10g_us_auto_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_onu_10g_us_auto_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_epon_onu_10g_us_cfg_id_string_table[] = { { .name = "all_links", .val = BCMOLT_EPON_ONU_10G_US_CFG_ID_ALL_LINKS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_onu_10g_us_cfg_id = { .name = "bcmolt_epon_onu_10g_us_cfg_id", .descr = "Identifiers for all properties contained in the epon_onu_10g_us_cfg group.", .size = sizeof(bcmolt_epon_onu_10g_us_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_onu_10g_us_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_epon_onu_10g_us_key_id_string_table[] = { { .name = "epon_ni", .val = BCMOLT_EPON_ONU_10G_US_KEY_ID_EPON_NI }, { .name = "onu_id", .val = BCMOLT_EPON_ONU_10G_US_KEY_ID_ONU_ID }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_onu_10g_us_key_id = { .name = "bcmolt_epon_onu_10g_us_key_id", .descr = "Identifiers for all properties contained in the epon_onu_10g_us_key group.", .size = sizeof(bcmolt_epon_onu_10g_us_key_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_onu_10g_us_key_id_string_table } };
+bcmcli_enum_val bcmolt_epon_onu_10g_us_stat_alarm_cleared_id_string_table[] = { { .name = "stat", .val = BCMOLT_EPON_ONU_10G_US_STAT_ALARM_CLEARED_ID_STAT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_onu_10g_us_stat_alarm_cleared_id = { .name = "bcmolt_epon_onu_10g_us_stat_alarm_cleared_id", .descr = "Identifiers for all properties contained in the epon_onu_10g_us_stat_alarm_cleared group.", .size = sizeof(bcmolt_epon_onu_10g_us_stat_alarm_cleared_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_onu_10g_us_stat_alarm_cleared_id_string_table } };
+bcmcli_enum_val bcmolt_epon_onu_10g_us_stat_alarm_raised_id_string_table[] = { { .name = "stat", .val = BCMOLT_EPON_ONU_10G_US_STAT_ALARM_RAISED_ID_STAT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_onu_10g_us_stat_alarm_raised_id = { .name = "bcmolt_epon_onu_10g_us_stat_alarm_raised_id", .descr = "Identifiers for all properties contained in the epon_onu_10g_us_stat_alarm_raised group.", .size = sizeof(bcmolt_epon_onu_10g_us_stat_alarm_raised_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_onu_10g_us_stat_alarm_raised_id_string_table } };
+bcmcli_enum_val bcmolt_epon_onu_10g_us_stat_cfg_id_string_table[] = { { .name = "cfg", .val = BCMOLT_EPON_ONU_10G_US_STAT_CFG_ID_CFG }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_onu_10g_us_stat_cfg_id = { .name = "bcmolt_epon_onu_10g_us_stat_cfg_id", .descr = "Identifiers for all properties contained in the epon_onu_10g_us_stat_cfg group.", .size = sizeof(bcmolt_epon_onu_10g_us_stat_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_onu_10g_us_stat_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_epon_onu_10g_us_stat_id_string_table[] = { { .name = "fec_code_words_total", .val = BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_CODE_WORDS_TOTAL }, { .name = "fec_code_words_decode_fails", .val = BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_CODE_WORDS_DECODE_FAILS }, { .name = "fec_zeroes_corrected", .val = BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_ZEROES_CORRECTED }, { .name = "fec_ones_corrected", .val = BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_ONES_CORRECTED }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_onu_10g_us_stat_id = { .name = "bcmolt_epon_onu_10g_us_stat_id", .descr = "Identifiers for all properties contained in the epon_onu_10g_us_stat group.", .size = sizeof(bcmolt_epon_onu_10g_us_stat_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_onu_10g_us_stat_id_string_table } };
+bcmcli_enum_val bcmolt_epon_onu_1g_us_auto_cfg_id_string_table[] = { { .name = "stat_alarm_cleared", .val = BCMOLT_EPON_ONU_1G_US_AUTO_CFG_ID_STAT_ALARM_CLEARED }, { .name = "stat_alarm_raised", .val = BCMOLT_EPON_ONU_1G_US_AUTO_CFG_ID_STAT_ALARM_RAISED }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_onu_1g_us_auto_cfg_id = { .name = "bcmolt_epon_onu_1g_us_auto_cfg_id", .descr = "Identifiers for all properties contained in the epon_onu_1g_us_auto_cfg group.", .size = sizeof(bcmolt_epon_onu_1g_us_auto_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_onu_1g_us_auto_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_epon_onu_1g_us_cfg_id_string_table[] = { { .name = "all_links", .val = BCMOLT_EPON_ONU_1G_US_CFG_ID_ALL_LINKS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_onu_1g_us_cfg_id = { .name = "bcmolt_epon_onu_1g_us_cfg_id", .descr = "Identifiers for all properties contained in the epon_onu_1g_us_cfg group.", .size = sizeof(bcmolt_epon_onu_1g_us_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_onu_1g_us_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_epon_onu_1g_us_key_id_string_table[] = { { .name = "epon_ni", .val = BCMOLT_EPON_ONU_1G_US_KEY_ID_EPON_NI }, { .name = "onu_id", .val = BCMOLT_EPON_ONU_1G_US_KEY_ID_ONU_ID }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_onu_1g_us_key_id = { .name = "bcmolt_epon_onu_1g_us_key_id", .descr = "Identifiers for all properties contained in the epon_onu_1g_us_key group.", .size = sizeof(bcmolt_epon_onu_1g_us_key_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_onu_1g_us_key_id_string_table } };
+bcmcli_enum_val bcmolt_epon_onu_1g_us_stat_alarm_cleared_id_string_table[] = { { .name = "stat", .val = BCMOLT_EPON_ONU_1G_US_STAT_ALARM_CLEARED_ID_STAT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_onu_1g_us_stat_alarm_cleared_id = { .name = "bcmolt_epon_onu_1g_us_stat_alarm_cleared_id", .descr = "Identifiers for all properties contained in the epon_onu_1g_us_stat_alarm_cleared group.", .size = sizeof(bcmolt_epon_onu_1g_us_stat_alarm_cleared_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_onu_1g_us_stat_alarm_cleared_id_string_table } };
+bcmcli_enum_val bcmolt_epon_onu_1g_us_stat_alarm_raised_id_string_table[] = { { .name = "stat", .val = BCMOLT_EPON_ONU_1G_US_STAT_ALARM_RAISED_ID_STAT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_onu_1g_us_stat_alarm_raised_id = { .name = "bcmolt_epon_onu_1g_us_stat_alarm_raised_id", .descr = "Identifiers for all properties contained in the epon_onu_1g_us_stat_alarm_raised group.", .size = sizeof(bcmolt_epon_onu_1g_us_stat_alarm_raised_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_onu_1g_us_stat_alarm_raised_id_string_table } };
+bcmcli_enum_val bcmolt_epon_onu_1g_us_stat_cfg_id_string_table[] = { { .name = "cfg", .val = BCMOLT_EPON_ONU_1G_US_STAT_CFG_ID_CFG }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_onu_1g_us_stat_cfg_id = { .name = "bcmolt_epon_onu_1g_us_stat_cfg_id", .descr = "Identifiers for all properties contained in the epon_onu_1g_us_stat_cfg group.", .size = sizeof(bcmolt_epon_onu_1g_us_stat_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_onu_1g_us_stat_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_epon_onu_1g_us_stat_id_string_table[] = { { .name = "good_frames", .val = BCMOLT_EPON_ONU_1G_US_STAT_ID_GOOD_FRAMES }, { .name = "good_bytes", .val = BCMOLT_EPON_ONU_1G_US_STAT_ID_GOOD_BYTES }, { .name = "oversz_frames", .val = BCMOLT_EPON_ONU_1G_US_STAT_ID_OVERSZ_FRAMES }, { .name = "non_fec_good_frames", .val = BCMOLT_EPON_ONU_1G_US_STAT_ID_NON_FEC_GOOD_FRAMES }, { .name = "non_fec_good_bytes", .val = BCMOLT_EPON_ONU_1G_US_STAT_ID_NON_FEC_GOOD_BYTES }, { .name = "fec_good_frames", .val = BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_GOOD_FRAMES }, { .name = "fec_good_bytes", .val = BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_GOOD_BYTES }, { .name = "fec_frames_exc_errs", .val = BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_FRAMES_EXC_ERRS }, { .name = "fec_blks_no_errs", .val = BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_BLKS_NO_ERRS }, { .name = "fec_blks_corr_errs", .val = BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_BLKS_CORR_ERRS }, { .name = "fec_blks_uncorr_errs", .val = BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_BLKS_UNCORR_ERRS }, { .name = "fec_corr_bytes", .val = BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_CORR_BYTES }, { .name = "fec_corr_zeroes", .val = BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_CORR_ZEROES }, { .name = "fec_corr_ones", .val = BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_CORR_ONES }, { .name = "undersz_frames", .val = BCMOLT_EPON_ONU_1G_US_STAT_ID_UNDERSZ_FRAMES }, { .name = "errorsz_frames", .val = BCMOLT_EPON_ONU_1G_US_STAT_ID_ERRORSZ_FRAMES }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_onu_1g_us_stat_id = { .name = "bcmolt_epon_onu_1g_us_stat_id", .descr = "Identifiers for all properties contained in the epon_onu_1g_us_stat group.", .size = sizeof(bcmolt_epon_onu_1g_us_stat_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_onu_1g_us_stat_id_string_table } };
+bcmcli_enum_val bcmolt_epon_onu_upgrade_onu_response_code_string_table[] = { { .name = "ok", .val = BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_OK }, { .name = "undefined", .val = BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_UNDEFINED }, { .name = "not_found", .val = BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_NOT_FOUND }, { .name = "no_access", .val = BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_NO_ACCESS }, { .name = "full", .val = BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_FULL }, { .name = "illegal_operation", .val = BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_ILLEGAL_OPERATION }, { .name = "unknown_id", .val = BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_UNKNOWN_ID }, { .name = "bad_block", .val = BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_BAD_BLOCK }, { .name = "timeout", .val = BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_TIMEOUT }, { .name = "busy", .val = BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_BUSY }, { .name = "incompatible_file", .val = BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_INCOMPATIBLE_FILE }, { .name = "corrupted_file", .val = BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_CORRUPTED_FILE }, { .name = "error_not_defined", .val = BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_ERROR_NOT_DEFINED }, { .name = "error_alloc_exceeded", .val = BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_ERROR_ALLOC_EXCEEDED }, { .name = "error_illegal_op", .val = BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_ERROR_ILLEGAL_OP }, { .name = "error_file_exists", .val = BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_ERROR_FILE_EXISTS }, { .name = "end_writing_nvs", .val = BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_END_WRITING_NVS }, { .name = "end_crc_error", .val = BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_END_CRC_ERROR }, { .name = "end_param_error", .val = BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_END_PARAM_ERROR }, { .name = "end_cmd_unsupported", .val = BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_END_CMD_UNSUPPORTED }, { .name = "last", .val = BCMOLT_EPON_ONU_UPGRADE_ONU_RESPONSE_CODE_LAST }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_onu_upgrade_onu_response_code = { .name = "bcmolt_epon_onu_upgrade_onu_response_code", .descr = "EPON ONU Upgrade ONU Response Code", .size = sizeof(bcmolt_epon_onu_upgrade_onu_response_code), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_onu_upgrade_onu_response_code_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_onu_upgrade_params_fields[] = { { .name = "oam_extension_type", .descr = "OAM Extension Type", .offset = offsetof(bcmolt_epon_onu_upgrade_params, oam_extension_type), .type = &type_descr_bcmolt_epon_oam_extension_type } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_onu_upgrade_params_broadcom_fields[] = { { .name = "response_timeout_ms", .descr = "The length of time that the OLT will wait for the ONU to respond.", .offset = offsetof(bcmolt_epon_onu_upgrade_params, u.broadcom.response_timeout_ms) - offsetof(bcmolt_epon_onu_upgrade_params, u.broadcom.response_timeout_ms), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_onu_upgrade_params_broadcom = { .name = "bcmolt_epon_onu_upgrade_params_broadcom", .descr = "EPON ONU Upgrade Parameters Broadcom", .size = sizeof(((bcmolt_epon_onu_upgrade_params *)0)->u.broadcom), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_onu_upgrade_params_broadcom_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_onu_upgrade_params_broadcom_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_onu_upgrade_params_ctc_fields[] = { { .name = "response_timeout_ms", .descr = "The length of time that the OLT will wait for the ONU to respond.", .offset = offsetof(bcmolt_epon_onu_upgrade_params, u.ctc.response_timeout_ms) - offsetof(bcmolt_epon_onu_upgrade_params, u.ctc.response_timeout_ms), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_onu_upgrade_params_ctc = { .name = "bcmolt_epon_onu_upgrade_params_ctc", .descr = "EPON ONU Upgrade Parameters CTC", .size = sizeof(((bcmolt_epon_onu_upgrade_params *)0)->u.ctc), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_onu_upgrade_params_ctc_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_onu_upgrade_params_ctc_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_onu_upgrade_params_dasan_fields[] = { { .name = "response_timeout_ms", .descr = "The length of time that the OLT will wait for the ONU to respond.", .offset = offsetof(bcmolt_epon_onu_upgrade_params, u.dasan.response_timeout_ms) - offsetof(bcmolt_epon_onu_upgrade_params, u.dasan.response_timeout_ms), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_onu_upgrade_params_dasan = { .name = "bcmolt_epon_onu_upgrade_params_dasan", .descr = "EPON ONU Upgrade Parameters Dasan", .size = sizeof(((bcmolt_epon_onu_upgrade_params *)0)->u.dasan), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_onu_upgrade_params_dasan_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_onu_upgrade_params_dasan_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_onu_upgrade_params_kt_fields[] = { { .name = "response_timeout_ms", .descr = "The length of time that the OLT will wait for the ONU to respond.", .offset = offsetof(bcmolt_epon_onu_upgrade_params, u.kt.response_timeout_ms) - offsetof(bcmolt_epon_onu_upgrade_params, u.kt.response_timeout_ms), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_onu_upgrade_params_kt = { .name = "bcmolt_epon_onu_upgrade_params_kt", .descr = "EPON ONU Upgrade Parameters KT", .size = sizeof(((bcmolt_epon_onu_upgrade_params *)0)->u.kt), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_onu_upgrade_params_kt_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_onu_upgrade_params_kt_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_onu_upgrade_params_dpoe_fields[] = { { .name = "response_timeout_ms", .descr = "The length of time that the OLT will wait for the ONU to respond.", .offset = offsetof(bcmolt_epon_onu_upgrade_params, u.dpoe.response_timeout_ms) - offsetof(bcmolt_epon_onu_upgrade_params, u.dpoe.response_timeout_ms), .type = &type_descr_uint32_t }, { .name = "block_size", .descr = "Number of byte per data block.", .offset = offsetof(bcmolt_epon_onu_upgrade_params, u.dpoe.block_size) - offsetof(bcmolt_epon_onu_upgrade_params, u.dpoe.response_timeout_ms), .type = &type_descr_uint16_t }, { .name = "final_ack_response_timeout", .descr = "Timeout for the final ACK response.  The DPoE standard 1.0 specifies this should be at least 15 seconds.  Unit is seconds.", .offset = offsetof(bcmolt_epon_onu_upgrade_params, u.dpoe.final_ack_response_timeout) - offsetof(bcmolt_epon_onu_upgrade_params, u.dpoe.response_timeout_ms), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_onu_upgrade_params_dpoe = { .name = "bcmolt_epon_onu_upgrade_params_dpoe", .descr = "EPON ONU Upgrade Parameters DPoE", .size = sizeof(((bcmolt_epon_onu_upgrade_params *)0)->u.dpoe), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_onu_upgrade_params_dpoe_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_onu_upgrade_params_dpoe_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_onu_upgrade_params_union_fields[] = { { }, { .name = "u.broadcom", .descr = "", .offset = offsetof(bcmolt_epon_onu_upgrade_params, u.broadcom), .type = &type_descr_bcmolt_epon_onu_upgrade_params_broadcom }, { .name = "u.ctc", .descr = "", .offset = offsetof(bcmolt_epon_onu_upgrade_params, u.ctc), .type = &type_descr_bcmolt_epon_onu_upgrade_params_ctc }, { .name = "u.dasan", .descr = "", .offset = offsetof(bcmolt_epon_onu_upgrade_params, u.dasan), .type = &type_descr_bcmolt_epon_onu_upgrade_params_dasan }, { .name = "u.kt", .descr = "", .offset = offsetof(bcmolt_epon_onu_upgrade_params, u.kt), .type = &type_descr_bcmolt_epon_onu_upgrade_params_kt }, { .name = "u.dpoe", .descr = "", .offset = offsetof(bcmolt_epon_onu_upgrade_params, u.dpoe), .type = &type_descr_bcmolt_epon_onu_upgrade_params_dpoe }, { } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_onu_upgrade_params = { .name = "bcmolt_epon_onu_upgrade_params", .descr = "EPON ONU Upgrade Parameters", .size = sizeof(bcmolt_epon_onu_upgrade_params), .base_type = BCMOLT_BASE_TYPE_ID_UNION, .x = { .u = { .num_common_fields = sizeof(type_descr_bcmolt_epon_onu_upgrade_params_fields) / sizeof(bcmcli_field_descr), .common_fields = type_descr_bcmolt_epon_onu_upgrade_params_fields, .classifier_idx = 0, .union_fields = type_descr_bcmolt_epon_onu_upgrade_params_union_fields } } };
+bcmcli_enum_val bcmolt_epon_onu_upgrade_return_code_string_table[] = { { .name = "success", .val = BCMOLT_EPON_ONU_UPGRADE_RETURN_CODE_SUCCESS }, { .name = "onu_response_timeout", .val = BCMOLT_EPON_ONU_UPGRADE_RETURN_CODE_ONU_RESPONSE_TIMEOUT }, { .name = "onu_error_response", .val = BCMOLT_EPON_ONU_UPGRADE_RETURN_CODE_ONU_ERROR_RESPONSE }, { .name = "sync_error", .val = BCMOLT_EPON_ONU_UPGRADE_RETURN_CODE_SYNC_ERROR }, { .name = "commit_failed", .val = BCMOLT_EPON_ONU_UPGRADE_RETURN_CODE_COMMIT_FAILED }, { .name = "internal", .val = BCMOLT_EPON_ONU_UPGRADE_RETURN_CODE_INTERNAL }, { .name = "parse_error", .val = BCMOLT_EPON_ONU_UPGRADE_RETURN_CODE_PARSE_ERROR }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_onu_upgrade_return_code = { .name = "bcmolt_epon_onu_upgrade_return_code", .descr = "EPON ONU Upgrade Return Code", .size = sizeof(bcmolt_epon_onu_upgrade_return_code), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_onu_upgrade_return_code_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_onu_upgrade_status_fields[] = { { .name = "onu_id", .descr = "ONU ID", .offset = offsetof(bcmolt_epon_onu_upgrade_status, onu_id), .type = &type_descr_bcmos_mac_address }, { .name = "error_code", .descr = "Upgrade status.", .offset = offsetof(bcmolt_epon_onu_upgrade_status, error_code), .type = &type_descr_bcmolt_epon_onu_upgrade_return_code }, { .name = "onu_return_code", .descr = "Response code from the ONU.", .offset = offsetof(bcmolt_epon_onu_upgrade_status, onu_return_code), .type = &type_descr_bcmolt_epon_onu_upgrade_onu_response_code } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_onu_upgrade_status = { .name = "bcmolt_epon_onu_upgrade_status", .descr = "EPON ONU Upgrade Status", .size = sizeof(bcmolt_epon_onu_upgrade_status), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_onu_upgrade_status_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_onu_upgrade_status_fields } } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_onu_upgrade_status_list_u32 = { .name = "bcmolt_epon_onu_upgrade_status_list_u32", .descr = "Variable-length list of epon_onu_upgrade_status", .size = sizeof(bcmolt_epon_onu_upgrade_status_list_u32), .base_type = BCMOLT_BASE_TYPE_ID_ARR_DYN, .x = { .arr_dyn = { .elem_type = &type_descr_bcmolt_epon_onu_upgrade_status, .len_size = 4, .max_size = DEFAULT_DYN_ARR_MAX_SIZE / sizeof(bcmolt_epon_onu_upgrade_status) } } };
+bcmcli_enum_val bcmolt_epon_path_10g_ds_auto_cfg_id_string_table[] = { { .name = "stat_alarm_cleared", .val = BCMOLT_EPON_PATH_10G_DS_AUTO_CFG_ID_STAT_ALARM_CLEARED }, { .name = "stat_alarm_raised", .val = BCMOLT_EPON_PATH_10G_DS_AUTO_CFG_ID_STAT_ALARM_RAISED }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_10g_ds_auto_cfg_id = { .name = "bcmolt_epon_path_10g_ds_auto_cfg_id", .descr = "Identifiers for all properties contained in the epon_path_10g_ds_auto_cfg group.", .size = sizeof(bcmolt_epon_path_10g_ds_auto_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_path_10g_ds_auto_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_epon_path_10g_ds_cfg_id_string_table[] = { { .name = "fec_state", .val = BCMOLT_EPON_PATH_10G_DS_CFG_ID_FEC_STATE }, { .name = "prbs_generator", .val = BCMOLT_EPON_PATH_10G_DS_CFG_ID_PRBS_GENERATOR }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_10g_ds_cfg_id = { .name = "bcmolt_epon_path_10g_ds_cfg_id", .descr = "Identifiers for all properties contained in the epon_path_10g_ds_cfg group.", .size = sizeof(bcmolt_epon_path_10g_ds_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_path_10g_ds_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_epon_path_10g_ds_key_id_string_table[] = { { .name = "epon_ni", .val = BCMOLT_EPON_PATH_10G_DS_KEY_ID_EPON_NI }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_10g_ds_key_id = { .name = "bcmolt_epon_path_10g_ds_key_id", .descr = "Identifiers for all properties contained in the epon_path_10g_ds_key group.", .size = sizeof(bcmolt_epon_path_10g_ds_key_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_path_10g_ds_key_id_string_table } };
+bcmcli_enum_val bcmolt_epon_path_10g_ds_stat_alarm_cleared_id_string_table[] = { { .name = "stat", .val = BCMOLT_EPON_PATH_10G_DS_STAT_ALARM_CLEARED_ID_STAT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_10g_ds_stat_alarm_cleared_id = { .name = "bcmolt_epon_path_10g_ds_stat_alarm_cleared_id", .descr = "Identifiers for all properties contained in the epon_path_10g_ds_stat_alarm_cleared group.", .size = sizeof(bcmolt_epon_path_10g_ds_stat_alarm_cleared_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_path_10g_ds_stat_alarm_cleared_id_string_table } };
+bcmcli_enum_val bcmolt_epon_path_10g_ds_stat_alarm_raised_id_string_table[] = { { .name = "stat", .val = BCMOLT_EPON_PATH_10G_DS_STAT_ALARM_RAISED_ID_STAT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_10g_ds_stat_alarm_raised_id = { .name = "bcmolt_epon_path_10g_ds_stat_alarm_raised_id", .descr = "Identifiers for all properties contained in the epon_path_10g_ds_stat_alarm_raised group.", .size = sizeof(bcmolt_epon_path_10g_ds_stat_alarm_raised_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_path_10g_ds_stat_alarm_raised_id_string_table } };
+bcmcli_enum_val bcmolt_epon_path_10g_ds_stat_cfg_id_string_table[] = { { .name = "cfg", .val = BCMOLT_EPON_PATH_10G_DS_STAT_CFG_ID_CFG }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_10g_ds_stat_cfg_id = { .name = "bcmolt_epon_path_10g_ds_stat_cfg_id", .descr = "Identifiers for all properties contained in the epon_path_10g_ds_stat_cfg group.", .size = sizeof(bcmolt_epon_path_10g_ds_stat_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_path_10g_ds_stat_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_epon_path_10g_ds_stat_id_string_table[] = { { .name = "bytes", .val = BCMOLT_EPON_PATH_10G_DS_STAT_ID_BYTES }, { .name = "frames", .val = BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES }, { .name = "frames_64", .val = BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_64 }, { .name = "frames_65_127", .val = BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_65_127 }, { .name = "frames_128_255", .val = BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_128_255 }, { .name = "frames_256_511", .val = BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_256_511 }, { .name = "frames_512_1023", .val = BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_512_1023 }, { .name = "frames_1024_1518", .val = BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_1024_1518 }, { .name = "frames_1519_2047", .val = BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_1519_2047 }, { .name = "frames_2048_4095", .val = BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_2048_4095 }, { .name = "frames_4096_9216", .val = BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_4096_9216 }, { .name = "frames_9217_16383", .val = BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_9217_16383 }, { .name = "broadcast_frames", .val = BCMOLT_EPON_PATH_10G_DS_STAT_ID_BROADCAST_FRAMES }, { .name = "data_bytes", .val = BCMOLT_EPON_PATH_10G_DS_STAT_ID_DATA_BYTES }, { .name = "multicast_frames", .val = BCMOLT_EPON_PATH_10G_DS_STAT_ID_MULTICAST_FRAMES }, { .name = "unicast_frames", .val = BCMOLT_EPON_PATH_10G_DS_STAT_ID_UNICAST_FRAMES }, { .name = "oam_bytes", .val = BCMOLT_EPON_PATH_10G_DS_STAT_ID_OAM_BYTES }, { .name = "oam_frames", .val = BCMOLT_EPON_PATH_10G_DS_STAT_ID_OAM_FRAMES }, { .name = "gate_frames", .val = BCMOLT_EPON_PATH_10G_DS_STAT_ID_GATE_FRAMES }, { .name = "mpcp_frames", .val = BCMOLT_EPON_PATH_10G_DS_STAT_ID_MPCP_FRAMES }, { .name = "abort_frames", .val = BCMOLT_EPON_PATH_10G_DS_STAT_ID_ABORT_FRAMES }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_10g_ds_stat_id = { .name = "bcmolt_epon_path_10g_ds_stat_id", .descr = "Identifiers for all properties contained in the epon_path_10g_ds_stat group.", .size = sizeof(bcmolt_epon_path_10g_ds_stat_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_path_10g_ds_stat_id_string_table } };
+bcmcli_enum_val bcmolt_epon_path_10g_us_auto_cfg_id_string_table[] = { { .name = "stat_alarm_cleared", .val = BCMOLT_EPON_PATH_10G_US_AUTO_CFG_ID_STAT_ALARM_CLEARED }, { .name = "stat_alarm_raised", .val = BCMOLT_EPON_PATH_10G_US_AUTO_CFG_ID_STAT_ALARM_RAISED }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_10g_us_auto_cfg_id = { .name = "bcmolt_epon_path_10g_us_auto_cfg_id", .descr = "Identifiers for all properties contained in the epon_path_10g_us_auto_cfg group.", .size = sizeof(bcmolt_epon_path_10g_us_auto_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_path_10g_us_auto_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_epon_path_10g_us_cfg_id_string_table[] = { { .name = "fec_state", .val = BCMOLT_EPON_PATH_10G_US_CFG_ID_FEC_STATE }, { .name = "sync_time_tq", .val = BCMOLT_EPON_PATH_10G_US_CFG_ID_SYNC_TIME_TQ }, { .name = "prbs_checker", .val = BCMOLT_EPON_PATH_10G_US_CFG_ID_PRBS_CHECKER }, { .name = "prbs_status", .val = BCMOLT_EPON_PATH_10G_US_CFG_ID_PRBS_STATUS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_10g_us_cfg_id = { .name = "bcmolt_epon_path_10g_us_cfg_id", .descr = "Identifiers for all properties contained in the epon_path_10g_us_cfg group.", .size = sizeof(bcmolt_epon_path_10g_us_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_path_10g_us_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_epon_path_10g_us_key_id_string_table[] = { { .name = "epon_ni", .val = BCMOLT_EPON_PATH_10G_US_KEY_ID_EPON_NI }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_10g_us_key_id = { .name = "bcmolt_epon_path_10g_us_key_id", .descr = "Identifiers for all properties contained in the epon_path_10g_us_key group.", .size = sizeof(bcmolt_epon_path_10g_us_key_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_path_10g_us_key_id_string_table } };
+bcmcli_enum_val bcmolt_epon_path_10g_us_stat_alarm_cleared_id_string_table[] = { { .name = "stat", .val = BCMOLT_EPON_PATH_10G_US_STAT_ALARM_CLEARED_ID_STAT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_10g_us_stat_alarm_cleared_id = { .name = "bcmolt_epon_path_10g_us_stat_alarm_cleared_id", .descr = "Identifiers for all properties contained in the epon_path_10g_us_stat_alarm_cleared group.", .size = sizeof(bcmolt_epon_path_10g_us_stat_alarm_cleared_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_path_10g_us_stat_alarm_cleared_id_string_table } };
+bcmcli_enum_val bcmolt_epon_path_10g_us_stat_alarm_raised_id_string_table[] = { { .name = "stat", .val = BCMOLT_EPON_PATH_10G_US_STAT_ALARM_RAISED_ID_STAT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_10g_us_stat_alarm_raised_id = { .name = "bcmolt_epon_path_10g_us_stat_alarm_raised_id", .descr = "Identifiers for all properties contained in the epon_path_10g_us_stat_alarm_raised group.", .size = sizeof(bcmolt_epon_path_10g_us_stat_alarm_raised_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_path_10g_us_stat_alarm_raised_id_string_table } };
+bcmcli_enum_val bcmolt_epon_path_10g_us_stat_cfg_id_string_table[] = { { .name = "cfg", .val = BCMOLT_EPON_PATH_10G_US_STAT_CFG_ID_CFG }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_10g_us_stat_cfg_id = { .name = "bcmolt_epon_path_10g_us_stat_cfg_id", .descr = "Identifiers for all properties contained in the epon_path_10g_us_stat_cfg group.", .size = sizeof(bcmolt_epon_path_10g_us_stat_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_path_10g_us_stat_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_epon_path_10g_us_stat_id_string_table[] = { { .name = "bytes", .val = BCMOLT_EPON_PATH_10G_US_STAT_ID_BYTES }, { .name = "frames", .val = BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES }, { .name = "frames_64", .val = BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_64 }, { .name = "frames_65_127", .val = BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_65_127 }, { .name = "frames_128_255", .val = BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_128_255 }, { .name = "frames_256_511", .val = BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_256_511 }, { .name = "frames_512_1023", .val = BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_512_1023 }, { .name = "frames_1024_1518", .val = BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_1024_1518 }, { .name = "frames_1519_2047", .val = BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_1519_2047 }, { .name = "frames_2048_4095", .val = BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_2048_4095 }, { .name = "frames_4096_9216", .val = BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_4096_9216 }, { .name = "frames_9217_16383", .val = BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_9217_16383 }, { .name = "broadcast_frames", .val = BCMOLT_EPON_PATH_10G_US_STAT_ID_BROADCAST_FRAMES }, { .name = "data_bytes", .val = BCMOLT_EPON_PATH_10G_US_STAT_ID_DATA_BYTES }, { .name = "multicast_frames", .val = BCMOLT_EPON_PATH_10G_US_STAT_ID_MULTICAST_FRAMES }, { .name = "unicast_frames", .val = BCMOLT_EPON_PATH_10G_US_STAT_ID_UNICAST_FRAMES }, { .name = "mpcp_frames", .val = BCMOLT_EPON_PATH_10G_US_STAT_ID_MPCP_FRAMES }, { .name = "oam_bytes", .val = BCMOLT_EPON_PATH_10G_US_STAT_ID_OAM_BYTES }, { .name = "oam_frames", .val = BCMOLT_EPON_PATH_10G_US_STAT_ID_OAM_FRAMES }, { .name = "report_frames", .val = BCMOLT_EPON_PATH_10G_US_STAT_ID_REPORT_FRAMES }, { .name = "abort_frames", .val = BCMOLT_EPON_PATH_10G_US_STAT_ID_ABORT_FRAMES }, { .name = "fcs_error", .val = BCMOLT_EPON_PATH_10G_US_STAT_ID_FCS_ERROR }, { .name = "crc_8_error", .val = BCMOLT_EPON_PATH_10G_US_STAT_ID_CRC_8_ERROR }, { .name = "out_of_slot", .val = BCMOLT_EPON_PATH_10G_US_STAT_ID_OUT_OF_SLOT }, { .name = "oversize_error", .val = BCMOLT_EPON_PATH_10G_US_STAT_ID_OVERSIZE_ERROR }, { .name = "runt_error", .val = BCMOLT_EPON_PATH_10G_US_STAT_ID_RUNT_ERROR }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_10g_us_stat_id = { .name = "bcmolt_epon_path_10g_us_stat_id", .descr = "Identifiers for all properties contained in the epon_path_10g_us_stat group.", .size = sizeof(bcmolt_epon_path_10g_us_stat_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_path_10g_us_stat_id_string_table } };
+bcmcli_enum_val bcmolt_epon_path_1g_ds_auto_cfg_id_string_table[] = { { .name = "stat_alarm_cleared", .val = BCMOLT_EPON_PATH_1G_DS_AUTO_CFG_ID_STAT_ALARM_CLEARED }, { .name = "stat_alarm_raised", .val = BCMOLT_EPON_PATH_1G_DS_AUTO_CFG_ID_STAT_ALARM_RAISED }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_1g_ds_auto_cfg_id = { .name = "bcmolt_epon_path_1g_ds_auto_cfg_id", .descr = "Identifiers for all properties contained in the epon_path_1g_ds_auto_cfg group.", .size = sizeof(bcmolt_epon_path_1g_ds_auto_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_path_1g_ds_auto_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_epon_path_1g_ds_cfg_id_string_table[] = { { .name = "default_fec_state", .val = BCMOLT_EPON_PATH_1G_DS_CFG_ID_DEFAULT_FEC_STATE }, { .name = "raman_mode", .val = BCMOLT_EPON_PATH_1G_DS_CFG_ID_RAMAN_MODE }, { .name = "turbo_2g_mode", .val = BCMOLT_EPON_PATH_1G_DS_CFG_ID_TURBO_2G_MODE }, { .name = "prbs_generator", .val = BCMOLT_EPON_PATH_1G_DS_CFG_ID_PRBS_GENERATOR }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_1g_ds_cfg_id = { .name = "bcmolt_epon_path_1g_ds_cfg_id", .descr = "Identifiers for all properties contained in the epon_path_1g_ds_cfg group.", .size = sizeof(bcmolt_epon_path_1g_ds_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_path_1g_ds_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_epon_path_1g_ds_key_id_string_table[] = { { .name = "epon_ni", .val = BCMOLT_EPON_PATH_1G_DS_KEY_ID_EPON_NI }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_1g_ds_key_id = { .name = "bcmolt_epon_path_1g_ds_key_id", .descr = "Identifiers for all properties contained in the epon_path_1g_ds_key group.", .size = sizeof(bcmolt_epon_path_1g_ds_key_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_path_1g_ds_key_id_string_table } };
+bcmcli_enum_val bcmolt_epon_path_1g_ds_stat_alarm_cleared_id_string_table[] = { { .name = "stat", .val = BCMOLT_EPON_PATH_1G_DS_STAT_ALARM_CLEARED_ID_STAT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_1g_ds_stat_alarm_cleared_id = { .name = "bcmolt_epon_path_1g_ds_stat_alarm_cleared_id", .descr = "Identifiers for all properties contained in the epon_path_1g_ds_stat_alarm_cleared group.", .size = sizeof(bcmolt_epon_path_1g_ds_stat_alarm_cleared_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_path_1g_ds_stat_alarm_cleared_id_string_table } };
+bcmcli_enum_val bcmolt_epon_path_1g_ds_stat_alarm_raised_id_string_table[] = { { .name = "stat", .val = BCMOLT_EPON_PATH_1G_DS_STAT_ALARM_RAISED_ID_STAT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_1g_ds_stat_alarm_raised_id = { .name = "bcmolt_epon_path_1g_ds_stat_alarm_raised_id", .descr = "Identifiers for all properties contained in the epon_path_1g_ds_stat_alarm_raised group.", .size = sizeof(bcmolt_epon_path_1g_ds_stat_alarm_raised_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_path_1g_ds_stat_alarm_raised_id_string_table } };
+bcmcli_enum_val bcmolt_epon_path_1g_ds_stat_cfg_id_string_table[] = { { .name = "cfg", .val = BCMOLT_EPON_PATH_1G_DS_STAT_CFG_ID_CFG }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_1g_ds_stat_cfg_id = { .name = "bcmolt_epon_path_1g_ds_stat_cfg_id", .descr = "Identifiers for all properties contained in the epon_path_1g_ds_stat_cfg group.", .size = sizeof(bcmolt_epon_path_1g_ds_stat_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_path_1g_ds_stat_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_epon_path_1g_ds_stat_id_string_table[] = { { .name = "bytes", .val = BCMOLT_EPON_PATH_1G_DS_STAT_ID_BYTES }, { .name = "frames", .val = BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES }, { .name = "frames_64", .val = BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_64 }, { .name = "frames_65_127", .val = BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_65_127 }, { .name = "frames_128_255", .val = BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_128_255 }, { .name = "frames_256_511", .val = BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_256_511 }, { .name = "frames_512_1023", .val = BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_512_1023 }, { .name = "frames_1024_1518", .val = BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_1024_1518 }, { .name = "frames_1519_2047", .val = BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_1519_2047 }, { .name = "frames_2048_4095", .val = BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_2048_4095 }, { .name = "frames_4096_9216", .val = BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_4096_9216 }, { .name = "frames_9217_16383", .val = BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_9217_16383 }, { .name = "broadcast_frames", .val = BCMOLT_EPON_PATH_1G_DS_STAT_ID_BROADCAST_FRAMES }, { .name = "data_bytes", .val = BCMOLT_EPON_PATH_1G_DS_STAT_ID_DATA_BYTES }, { .name = "multicast_frames", .val = BCMOLT_EPON_PATH_1G_DS_STAT_ID_MULTICAST_FRAMES }, { .name = "unicast_frames", .val = BCMOLT_EPON_PATH_1G_DS_STAT_ID_UNICAST_FRAMES }, { .name = "oam_bytes", .val = BCMOLT_EPON_PATH_1G_DS_STAT_ID_OAM_BYTES }, { .name = "oam_frames", .val = BCMOLT_EPON_PATH_1G_DS_STAT_ID_OAM_FRAMES }, { .name = "gate_frames", .val = BCMOLT_EPON_PATH_1G_DS_STAT_ID_GATE_FRAMES }, { .name = "mpcp_frames", .val = BCMOLT_EPON_PATH_1G_DS_STAT_ID_MPCP_FRAMES }, { .name = "abort_frames", .val = BCMOLT_EPON_PATH_1G_DS_STAT_ID_ABORT_FRAMES }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_1g_ds_stat_id = { .name = "bcmolt_epon_path_1g_ds_stat_id", .descr = "Identifiers for all properties contained in the epon_path_1g_ds_stat group.", .size = sizeof(bcmolt_epon_path_1g_ds_stat_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_path_1g_ds_stat_id_string_table } };
+bcmcli_enum_val bcmolt_epon_path_1g_us_auto_cfg_id_string_table[] = { { .name = "stat_alarm_cleared", .val = BCMOLT_EPON_PATH_1G_US_AUTO_CFG_ID_STAT_ALARM_CLEARED }, { .name = "stat_alarm_raised", .val = BCMOLT_EPON_PATH_1G_US_AUTO_CFG_ID_STAT_ALARM_RAISED }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_1g_us_auto_cfg_id = { .name = "bcmolt_epon_path_1g_us_auto_cfg_id", .descr = "Identifiers for all properties contained in the epon_path_1g_us_auto_cfg group.", .size = sizeof(bcmolt_epon_path_1g_us_auto_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_path_1g_us_auto_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_epon_path_1g_us_cfg_id_string_table[] = { { .name = "default_fec_state", .val = BCMOLT_EPON_PATH_1G_US_CFG_ID_DEFAULT_FEC_STATE }, { .name = "sync_time_tq", .val = BCMOLT_EPON_PATH_1G_US_CFG_ID_SYNC_TIME_TQ }, { .name = "prbs_checker", .val = BCMOLT_EPON_PATH_1G_US_CFG_ID_PRBS_CHECKER }, { .name = "prbs_status", .val = BCMOLT_EPON_PATH_1G_US_CFG_ID_PRBS_STATUS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_1g_us_cfg_id = { .name = "bcmolt_epon_path_1g_us_cfg_id", .descr = "Identifiers for all properties contained in the epon_path_1g_us_cfg group.", .size = sizeof(bcmolt_epon_path_1g_us_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_path_1g_us_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_epon_path_1g_us_key_id_string_table[] = { { .name = "epon_ni", .val = BCMOLT_EPON_PATH_1G_US_KEY_ID_EPON_NI }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_1g_us_key_id = { .name = "bcmolt_epon_path_1g_us_key_id", .descr = "Identifiers for all properties contained in the epon_path_1g_us_key group.", .size = sizeof(bcmolt_epon_path_1g_us_key_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_path_1g_us_key_id_string_table } };
+bcmcli_enum_val bcmolt_epon_path_1g_us_stat_alarm_cleared_id_string_table[] = { { .name = "stat", .val = BCMOLT_EPON_PATH_1G_US_STAT_ALARM_CLEARED_ID_STAT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_1g_us_stat_alarm_cleared_id = { .name = "bcmolt_epon_path_1g_us_stat_alarm_cleared_id", .descr = "Identifiers for all properties contained in the epon_path_1g_us_stat_alarm_cleared group.", .size = sizeof(bcmolt_epon_path_1g_us_stat_alarm_cleared_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_path_1g_us_stat_alarm_cleared_id_string_table } };
+bcmcli_enum_val bcmolt_epon_path_1g_us_stat_alarm_raised_id_string_table[] = { { .name = "stat", .val = BCMOLT_EPON_PATH_1G_US_STAT_ALARM_RAISED_ID_STAT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_1g_us_stat_alarm_raised_id = { .name = "bcmolt_epon_path_1g_us_stat_alarm_raised_id", .descr = "Identifiers for all properties contained in the epon_path_1g_us_stat_alarm_raised group.", .size = sizeof(bcmolt_epon_path_1g_us_stat_alarm_raised_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_path_1g_us_stat_alarm_raised_id_string_table } };
+bcmcli_enum_val bcmolt_epon_path_1g_us_stat_cfg_id_string_table[] = { { .name = "cfg", .val = BCMOLT_EPON_PATH_1G_US_STAT_CFG_ID_CFG }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_1g_us_stat_cfg_id = { .name = "bcmolt_epon_path_1g_us_stat_cfg_id", .descr = "Identifiers for all properties contained in the epon_path_1g_us_stat_cfg group.", .size = sizeof(bcmolt_epon_path_1g_us_stat_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_path_1g_us_stat_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_epon_path_1g_us_stat_id_string_table[] = { { .name = "bytes", .val = BCMOLT_EPON_PATH_1G_US_STAT_ID_BYTES }, { .name = "frames", .val = BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES }, { .name = "frames_64", .val = BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_64 }, { .name = "frames_65_127", .val = BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_65_127 }, { .name = "frames_128_255", .val = BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_128_255 }, { .name = "frames_256_511", .val = BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_256_511 }, { .name = "frames_512_1023", .val = BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_512_1023 }, { .name = "frames_1024_1518", .val = BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_1024_1518 }, { .name = "frames_1519_2047", .val = BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_1519_2047 }, { .name = "frames_2048_4095", .val = BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_2048_4095 }, { .name = "frames_4096_9216", .val = BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_4096_9216 }, { .name = "frames_9217_16383", .val = BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_9217_16383 }, { .name = "broadcast_frames", .val = BCMOLT_EPON_PATH_1G_US_STAT_ID_BROADCAST_FRAMES }, { .name = "data_bytes", .val = BCMOLT_EPON_PATH_1G_US_STAT_ID_DATA_BYTES }, { .name = "multicast_frames", .val = BCMOLT_EPON_PATH_1G_US_STAT_ID_MULTICAST_FRAMES }, { .name = "unicast_frames", .val = BCMOLT_EPON_PATH_1G_US_STAT_ID_UNICAST_FRAMES }, { .name = "mpcp_frames", .val = BCMOLT_EPON_PATH_1G_US_STAT_ID_MPCP_FRAMES }, { .name = "oam_bytes", .val = BCMOLT_EPON_PATH_1G_US_STAT_ID_OAM_BYTES }, { .name = "oam_frames", .val = BCMOLT_EPON_PATH_1G_US_STAT_ID_OAM_FRAMES }, { .name = "report_frames", .val = BCMOLT_EPON_PATH_1G_US_STAT_ID_REPORT_FRAMES }, { .name = "abort_frames", .val = BCMOLT_EPON_PATH_1G_US_STAT_ID_ABORT_FRAMES }, { .name = "fcs_error", .val = BCMOLT_EPON_PATH_1G_US_STAT_ID_FCS_ERROR }, { .name = "crc_8_error", .val = BCMOLT_EPON_PATH_1G_US_STAT_ID_CRC_8_ERROR }, { .name = "out_of_slot", .val = BCMOLT_EPON_PATH_1G_US_STAT_ID_OUT_OF_SLOT }, { .name = "oversize_error", .val = BCMOLT_EPON_PATH_1G_US_STAT_ID_OVERSIZE_ERROR }, { .name = "runt_error", .val = BCMOLT_EPON_PATH_1G_US_STAT_ID_RUNT_ERROR }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_1g_us_stat_id = { .name = "bcmolt_epon_path_1g_us_stat_id", .descr = "Identifiers for all properties contained in the epon_path_1g_us_stat group.", .size = sizeof(bcmolt_epon_path_1g_us_stat_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_path_1g_us_stat_id_string_table } };
+bcmcli_enum_val bcmolt_epon_protection_state_string_table[] = { { .name = "unprotected", .val = BCMOLT_EPON_PROTECTION_STATE_UNPROTECTED }, { .name = "protected_standby", .val = BCMOLT_EPON_PROTECTION_STATE_PROTECTED_STANDBY }, { .name = "protected_working", .val = BCMOLT_EPON_PROTECTION_STATE_PROTECTED_WORKING }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_protection_state = { .name = "bcmolt_epon_protection_state", .descr = "Indicates whether links are unprotected, protected standby, or protected working.", .size = sizeof(bcmolt_epon_protection_state), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_protection_state_string_table } };
+bcmcli_enum_val bcmolt_epon_protection_switching_type_string_table[] = { { .name = "no_protection_swtiching", .val = BCMOLT_EPON_PROTECTION_SWITCHING_TYPE_NO_PROTECTION_SWTICHING }, { .name = "line_card_protection_switching", .val = BCMOLT_EPON_PROTECTION_SWITCHING_TYPE_LINE_CARD_PROTECTION_SWITCHING }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_protection_switching_type = { .name = "bcmolt_epon_protection_switching_type", .descr = "EPON Protection Switching Type", .size = sizeof(bcmolt_epon_protection_switching_type), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_protection_switching_type_string_table } };
+bcmcli_enum_val bcmolt_protection_switching_detection_options_string_table[] = { { .name = "none", .val = BCMOLT_PROTECTION_SWITCHING_DETECTION_OPTIONS_NONE }, { .name = "standby_los_detection", .val = BCMOLT_PROTECTION_SWITCHING_DETECTION_OPTIONS_STANDBY_LOS_DETECTION }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_protection_switching_detection_options = { .name = "bcmolt_protection_switching_detection_options", .descr = "Protection Switching Detection Options", .size = sizeof(bcmolt_protection_switching_detection_options), .base_type = BCMOLT_BASE_TYPE_ID_ENUM_MASK, .x = { .e = bcmolt_protection_switching_detection_options_string_table } };
+bcmcli_enum_val bcmolt_epon_protection_switching_reranging_options_string_table[] = { { .name = "rerange_none", .val = BCMOLT_EPON_PROTECTION_SWITCHING_RERANGING_OPTIONS_RERANGE_NONE }, { .name = "rerange_single_logical_link", .val = BCMOLT_EPON_PROTECTION_SWITCHING_RERANGING_OPTIONS_RERANGE_SINGLE_LOGICAL_LINK }, { .name = "rerange_all_logical_links", .val = BCMOLT_EPON_PROTECTION_SWITCHING_RERANGING_OPTIONS_RERANGE_ALL_LOGICAL_LINKS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_protection_switching_reranging_options = { .name = "bcmolt_epon_protection_switching_reranging_options", .descr = "Criteria for logical link selection during re-ranging process", .size = sizeof(bcmolt_epon_protection_switching_reranging_options), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_protection_switching_reranging_options_string_table } };
+bcmcli_enum_val bcmolt_gpio_pin_string_table[] = { { .name = "pin0", .val = BCMOLT_GPIO_PIN_PIN0 }, { .name = "pin1", .val = BCMOLT_GPIO_PIN_PIN1 }, { .name = "pin2", .val = BCMOLT_GPIO_PIN_PIN2 }, { .name = "pin3", .val = BCMOLT_GPIO_PIN_PIN3 }, { .name = "pin4", .val = BCMOLT_GPIO_PIN_PIN4 }, { .name = "pin5", .val = BCMOLT_GPIO_PIN_PIN5 }, { .name = "pin6", .val = BCMOLT_GPIO_PIN_PIN6 }, { .name = "pin7", .val = BCMOLT_GPIO_PIN_PIN7 }, { .name = "pin8", .val = BCMOLT_GPIO_PIN_PIN8 }, { .name = "pin9", .val = BCMOLT_GPIO_PIN_PIN9 }, { .name = "pin10", .val = BCMOLT_GPIO_PIN_PIN10 }, { .name = "pin11", .val = BCMOLT_GPIO_PIN_PIN11 }, { .name = "pin12", .val = BCMOLT_GPIO_PIN_PIN12 }, { .name = "pin13", .val = BCMOLT_GPIO_PIN_PIN13 }, { .name = "pin14", .val = BCMOLT_GPIO_PIN_PIN14 }, { .name = "pin15", .val = BCMOLT_GPIO_PIN_PIN15 }, { .name = "pin16", .val = BCMOLT_GPIO_PIN_PIN16 }, { .name = "pin17", .val = BCMOLT_GPIO_PIN_PIN17 }, { .name = "pin18", .val = BCMOLT_GPIO_PIN_PIN18 }, { .name = "pin19", .val = BCMOLT_GPIO_PIN_PIN19 }, { .name = "pin20", .val = BCMOLT_GPIO_PIN_PIN20 }, { .name = "pin21", .val = BCMOLT_GPIO_PIN_PIN21 }, { .name = "pin22", .val = BCMOLT_GPIO_PIN_PIN22 }, { .name = "pin23", .val = BCMOLT_GPIO_PIN_PIN23 }, { .name = "pin24", .val = BCMOLT_GPIO_PIN_PIN24 }, { .name = "pin25", .val = BCMOLT_GPIO_PIN_PIN25 }, { .name = "pin26", .val = BCMOLT_GPIO_PIN_PIN26 }, { .name = "pin27", .val = BCMOLT_GPIO_PIN_PIN27 }, { .name = "pin28", .val = BCMOLT_GPIO_PIN_PIN28 }, { .name = "pin29", .val = BCMOLT_GPIO_PIN_PIN29 }, { .name = "pin30", .val = BCMOLT_GPIO_PIN_PIN30 }, { .name = "pin31", .val = BCMOLT_GPIO_PIN_PIN31 }, { .name = "pin32", .val = BCMOLT_GPIO_PIN_PIN32 }, { .name = "pin33", .val = BCMOLT_GPIO_PIN_PIN33 }, { .name = "pin34", .val = BCMOLT_GPIO_PIN_PIN34 }, { .name = "pin35", .val = BCMOLT_GPIO_PIN_PIN35 }, { .name = "pin36", .val = BCMOLT_GPIO_PIN_PIN36 }, { .name = "pin37", .val = BCMOLT_GPIO_PIN_PIN37 }, { .name = "pin38", .val = BCMOLT_GPIO_PIN_PIN38 }, { .name = "pin39", .val = BCMOLT_GPIO_PIN_PIN39 }, { .name = "pin40", .val = BCMOLT_GPIO_PIN_PIN40 }, { .name = "pin41", .val = BCMOLT_GPIO_PIN_PIN41 }, { .name = "pin42", .val = BCMOLT_GPIO_PIN_PIN42 }, { .name = "pin43", .val = BCMOLT_GPIO_PIN_PIN43 }, { .name = "pin44", .val = BCMOLT_GPIO_PIN_PIN44 }, { .name = "pin45", .val = BCMOLT_GPIO_PIN_PIN45 }, { .name = "pin46", .val = BCMOLT_GPIO_PIN_PIN46 }, { .name = "pin47", .val = BCMOLT_GPIO_PIN_PIN47 }, { .name = "pin48", .val = BCMOLT_GPIO_PIN_PIN48 }, { .name = "pin49", .val = BCMOLT_GPIO_PIN_PIN49 }, { .name = "pin50", .val = BCMOLT_GPIO_PIN_PIN50 }, { .name = "pin51", .val = BCMOLT_GPIO_PIN_PIN51 }, { .name = "pin52", .val = BCMOLT_GPIO_PIN_PIN52 }, { .name = "pin53", .val = BCMOLT_GPIO_PIN_PIN53 }, { .name = "pin54", .val = BCMOLT_GPIO_PIN_PIN54 }, { .name = "pin55", .val = BCMOLT_GPIO_PIN_PIN55 }, { .name = "pin56", .val = BCMOLT_GPIO_PIN_PIN56 }, { .name = "pin57", .val = BCMOLT_GPIO_PIN_PIN57 }, { .name = "pin58", .val = BCMOLT_GPIO_PIN_PIN58 }, { .name = "pin59", .val = BCMOLT_GPIO_PIN_PIN59 }, { .name = "pin60", .val = BCMOLT_GPIO_PIN_PIN60 }, { .name = "pin61", .val = BCMOLT_GPIO_PIN_PIN61 }, { .name = "pin62", .val = BCMOLT_GPIO_PIN_PIN62 }, { .name = "pin63", .val = BCMOLT_GPIO_PIN_PIN63 }, { .name = "pin64", .val = BCMOLT_GPIO_PIN_PIN64 }, { .name = "pin65", .val = BCMOLT_GPIO_PIN_PIN65 }, { .name = "pin66", .val = BCMOLT_GPIO_PIN_PIN66 }, { .name = "pin67", .val = BCMOLT_GPIO_PIN_PIN67 }, { .name = "pin68", .val = BCMOLT_GPIO_PIN_PIN68 }, { .name = "pin69", .val = BCMOLT_GPIO_PIN_PIN69 }, { .name = "pin70", .val = BCMOLT_GPIO_PIN_PIN70 }, { .name = "pin71", .val = BCMOLT_GPIO_PIN_PIN71 }, { .name = "pin72", .val = BCMOLT_GPIO_PIN_PIN72 }, { .name = "pin73", .val = BCMOLT_GPIO_PIN_PIN73 }, { .name = "pin74", .val = BCMOLT_GPIO_PIN_PIN74 }, { .name = "pin75", .val = BCMOLT_GPIO_PIN_PIN75 }, { .name = "pin76", .val = BCMOLT_GPIO_PIN_PIN76 }, { .name = "pin77", .val = BCMOLT_GPIO_PIN_PIN77 }, { .name = "pin78", .val = BCMOLT_GPIO_PIN_PIN78 }, { .name = "pin79", .val = BCMOLT_GPIO_PIN_PIN79 }, { .name = "pin80", .val = BCMOLT_GPIO_PIN_PIN80 }, { .name = "pin81", .val = BCMOLT_GPIO_PIN_PIN81 }, { .name = "pin82", .val = BCMOLT_GPIO_PIN_PIN82 }, { .name = "pin83", .val = BCMOLT_GPIO_PIN_PIN83 }, { .name = "pin84", .val = BCMOLT_GPIO_PIN_PIN84 }, { .name = "pin85", .val = BCMOLT_GPIO_PIN_PIN85 }, { .name = "pin86", .val = BCMOLT_GPIO_PIN_PIN86 }, { .name = "pin87", .val = BCMOLT_GPIO_PIN_PIN87 }, { .name = "pin88", .val = BCMOLT_GPIO_PIN_PIN88 }, { .name = "pin89", .val = BCMOLT_GPIO_PIN_PIN89 }, { .name = "pin90", .val = BCMOLT_GPIO_PIN_PIN90 }, { .name = "pin91", .val = BCMOLT_GPIO_PIN_PIN91 }, { .name = "pin92", .val = BCMOLT_GPIO_PIN_PIN92 }, { .name = "pin93", .val = BCMOLT_GPIO_PIN_PIN93 }, { .name = "pin94", .val = BCMOLT_GPIO_PIN_PIN94 }, { .name = "pin95", .val = BCMOLT_GPIO_PIN_PIN95 }, { .name = "pin96", .val = BCMOLT_GPIO_PIN_PIN96 }, { .name = "pin97", .val = BCMOLT_GPIO_PIN_PIN97 }, { .name = "pin98", .val = BCMOLT_GPIO_PIN_PIN98 }, { .name = "pin99", .val = BCMOLT_GPIO_PIN_PIN99 }, { .name = "pin100", .val = BCMOLT_GPIO_PIN_PIN100 }, { .name = "pin101", .val = BCMOLT_GPIO_PIN_PIN101 }, { .name = "pin102", .val = BCMOLT_GPIO_PIN_PIN102 }, { .name = "pin103", .val = BCMOLT_GPIO_PIN_PIN103 }, { .name = "pin104", .val = BCMOLT_GPIO_PIN_PIN104 }, { .name = "pin105", .val = BCMOLT_GPIO_PIN_PIN105 }, { .name = "pin106", .val = BCMOLT_GPIO_PIN_PIN106 }, { .name = "unconfigured", .val = BCMOLT_GPIO_PIN_UNCONFIGURED }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpio_pin = { .name = "bcmolt_gpio_pin", .descr = "GPIO pin number", .size = sizeof(bcmolt_gpio_pin), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpio_pin_string_table } };
+bcmcli_enum_val bcmolt_gpio_polarity_string_table[] = { { .name = "active_low", .val = BCMOLT_GPIO_POLARITY_ACTIVE_LOW }, { .name = "active_high", .val = BCMOLT_GPIO_POLARITY_ACTIVE_HIGH }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpio_polarity = { .name = "bcmolt_gpio_polarity", .descr = "GPIO Polarity", .size = sizeof(bcmolt_gpio_polarity), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpio_polarity_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_protection_switching_configuration_fields[] = { { .name = "protection_type", .descr = "Protection scheme.", .offset = offsetof(bcmolt_epon_protection_switching_configuration, protection_type), .type = &type_descr_bcmolt_epon_protection_switching_type }, { .name = "protection_switching_options", .descr = "Protection switching options", .offset = offsetof(bcmolt_epon_protection_switching_configuration, protection_switching_options), .type = &type_descr_bcmolt_protection_switching_detection_options }, { .name = "rerange_options", .descr = "Re-ranging algorithm selection", .offset = offsetof(bcmolt_epon_protection_switching_configuration, rerange_options), .type = &type_descr_bcmolt_epon_protection_switching_reranging_options }, { .name = "rerange_attempts", .descr = "Number of times to re range during a switch", .offset = offsetof(bcmolt_epon_protection_switching_configuration, rerange_attempts), .type = &type_descr_uint8_t }, { .name = "rerange_interval", .descr = "Interval between re-range attempts.", .offset = offsetof(bcmolt_epon_protection_switching_configuration, rerange_interval), .type = &type_descr_uint16_t }, { .name = "sync_gate_duration", .descr = "Duration of sync gate.", .offset = offsetof(bcmolt_epon_protection_switching_configuration, sync_gate_duration), .type = &type_descr_uint16_t }, { .name = "gpio_input", .descr = "Configures state on PON (working/standby)", .offset = offsetof(bcmolt_epon_protection_switching_configuration, gpio_input), .type = &type_descr_bcmolt_gpio_pin }, { .name = "gpio_input_polarity", .descr = "GPIO Input Polarity", .offset = offsetof(bcmolt_epon_protection_switching_configuration, gpio_input_polarity), .type = &type_descr_bcmolt_gpio_polarity }, { .name = "gpio_output", .descr = "Indicates state on PON (working/standby)", .offset = offsetof(bcmolt_epon_protection_switching_configuration, gpio_output), .type = &type_descr_bcmolt_gpio_pin }, { .name = "gpio_output_polarity", .descr = "GPIO Output Polarity", .offset = offsetof(bcmolt_epon_protection_switching_configuration, gpio_output_polarity), .type = &type_descr_bcmolt_gpio_polarity } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_protection_switching_configuration = { .name = "bcmolt_epon_protection_switching_configuration", .descr = "EPON protection switching configuration", .size = sizeof(bcmolt_epon_protection_switching_configuration), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_protection_switching_configuration_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_protection_switching_configuration_fields } } };
+bcmcli_enum_val bcmolt_epon_rp_cfg_id_string_table[] = { { .name = "base_llid", .val = BCMOLT_EPON_RP_CFG_ID_BASE_LLID }, { .name = "mpcp_disc_en", .val = BCMOLT_EPON_RP_CFG_ID_MPCP_DISC_EN }, { .name = "mpcp_disc_gnt_len_tq", .val = BCMOLT_EPON_RP_CFG_ID_MPCP_DISC_GNT_LEN_TQ }, { .name = "mpcp_report_timeout", .val = BCMOLT_EPON_RP_CFG_ID_MPCP_REPORT_TIMEOUT }, { .name = "max_mpcp_reg_per_disc_window", .val = BCMOLT_EPON_RP_CFG_ID_MAX_MPCP_REG_PER_DISC_WINDOW }, { .name = "max_links", .val = BCMOLT_EPON_RP_CFG_ID_MAX_LINKS }, { .name = "default_upstream_bandwidth", .val = BCMOLT_EPON_RP_CFG_ID_DEFAULT_UPSTREAM_BANDWIDTH }, { .name = "rate_of_refraction", .val = BCMOLT_EPON_RP_CFG_ID_RATE_OF_REFRACTION }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_rp_cfg_id = { .name = "bcmolt_epon_rp_cfg_id", .descr = "Identifiers for all properties contained in the epon_rp_cfg group.", .size = sizeof(bcmolt_epon_rp_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_rp_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_epon_rp_key_id_string_table[] = { { .name = "epon_ni", .val = BCMOLT_EPON_RP_KEY_ID_EPON_NI }, { .name = "link_rate", .val = BCMOLT_EPON_RP_KEY_ID_LINK_RATE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_rp_key_id = { .name = "bcmolt_epon_rp_key_id", .descr = "Identifiers for all properties contained in the epon_rp_key group.", .size = sizeof(bcmolt_epon_rp_key_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_epon_rp_key_id_string_table } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_u8_list_u16 = { .name = "bcmolt_u8_list_u16", .descr = "Variable-length list of U8", .size = sizeof(bcmolt_u8_list_u16), .base_type = BCMOLT_BASE_TYPE_ID_ARR_DYN, .x = { .arr_dyn = { .elem_type = &type_descr_uint8_t, .len_size = 2, .max_size = DEFAULT_DYN_ARR_MAX_SIZE / sizeof(uint8_t) } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_ethernet_frame_masked_fields[] = { { .name = "frame_octets", .descr = "Frame octets", .offset = offsetof(bcmolt_ethernet_frame_masked, frame_octets), .type = &type_descr_bcmolt_u8_list_u16 }, { .name = "mask_octets", .descr = "Mask octets", .offset = offsetof(bcmolt_ethernet_frame_masked, mask_octets), .type = &type_descr_bcmolt_u8_list_u16 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ethernet_frame_masked = { .name = "bcmolt_ethernet_frame_masked", .descr = "Ethernet frame, masked", .size = sizeof(bcmolt_ethernet_frame_masked), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_ethernet_frame_masked_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_ethernet_frame_masked_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_ethernet_frame_unmasked_fields[] = { { .name = "frame_octets", .descr = "Frame octets", .offset = offsetof(bcmolt_ethernet_frame_unmasked, frame_octets), .type = &type_descr_bcmolt_u8_list_u16 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ethernet_frame_unmasked = { .name = "bcmolt_ethernet_frame_unmasked", .descr = "Ethernet frame, unmasked", .size = sizeof(bcmolt_ethernet_frame_unmasked), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_ethernet_frame_unmasked_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_ethernet_frame_unmasked_fields } } };
+bcmcli_enum_val bcmolt_ext_irq_string_table[] = { { .name = "ext_irq0", .val = BCMOLT_EXT_IRQ_EXT_IRQ0 }, { .name = "ext_irq1", .val = BCMOLT_EXT_IRQ_EXT_IRQ1 }, { .name = "ext_irq2", .val = BCMOLT_EXT_IRQ_EXT_IRQ2 }, { .name = "ext_irq3", .val = BCMOLT_EXT_IRQ_EXT_IRQ3 }, { .name = "ext_irq4", .val = BCMOLT_EXT_IRQ_EXT_IRQ4 }, { .name = "ext_irq5", .val = BCMOLT_EXT_IRQ_EXT_IRQ5 }, { .name = "unconfigured", .val = BCMOLT_EXT_IRQ_UNCONFIGURED }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ext_irq = { .name = "bcmolt_ext_irq", .descr = "External IRQ", .size = sizeof(bcmolt_ext_irq), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_ext_irq_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_extended_guard_time_fields[] = { { .name = "additional_preburst_guard_time", .descr = "Additional guard time (in bytes) before all bursts for this ONU.", .offset = offsetof(bcmolt_extended_guard_time, additional_preburst_guard_time), .type = &type_descr_uint32_t }, { .name = "additional_postburst_guard_time", .descr = "Additional guard time (in bytes) after all bursts for this ONU.", .offset = offsetof(bcmolt_extended_guard_time, additional_postburst_guard_time), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_extended_guard_time = { .name = "bcmolt_extended_guard_time", .descr = "Extended Guard Time", .size = sizeof(bcmolt_extended_guard_time), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_extended_guard_time_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_extended_guard_time_fields } } };
+static bcmcli_type_descr BCM_DESCR string_32 = { .name = "string[32]", .descr = "ASCII string with max length 32", .size = sizeof(char[32]), .base_type = BCMOLT_BASE_TYPE_ID_STRING };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_firmware_sw_version_fields[] = { { .name = "major", .descr = "Major ", .offset = offsetof(bcmolt_firmware_sw_version, major), .type = &type_descr_uint8_t }, { .name = "minor", .descr = "Minor", .offset = offsetof(bcmolt_firmware_sw_version, minor), .type = &type_descr_uint8_t }, { .name = "revision", .descr = "Revision", .offset = offsetof(bcmolt_firmware_sw_version, revision), .type = &type_descr_uint8_t_hex }, { .name = "model", .descr = "Model", .offset = offsetof(bcmolt_firmware_sw_version, model), .type = &type_descr_uint32_t }, { .name = "build_time", .descr = "Firmware SW build time", .offset = offsetof(bcmolt_firmware_sw_version, build_time), .type = &string_32 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_firmware_sw_version = { .name = "bcmolt_firmware_sw_version", .descr = "Firmware SW Version", .size = sizeof(bcmolt_firmware_sw_version), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_firmware_sw_version_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_firmware_sw_version_fields } } };
+bcmcli_enum_val bcmolt_flush_mac_table_option_string_table[] = { { .name = "all", .val = BCMOLT_FLUSH_MAC_TABLE_OPTION_ALL }, { .name = "per_vid", .val = BCMOLT_FLUSH_MAC_TABLE_OPTION_PER_VID }, { .name = "per_flow", .val = BCMOLT_FLUSH_MAC_TABLE_OPTION_PER_FLOW }, { .name = "vid_plus_flow", .val = BCMOLT_FLUSH_MAC_TABLE_OPTION_VID_PLUS_FLOW }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_flush_mac_table_option = { .name = "bcmolt_flush_mac_table_option", .descr = "Flush MAC table option", .size = sizeof(bcmolt_flush_mac_table_option), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_flush_mac_table_option_string_table } };
+bcmcli_enum_val bcmolt_frequency_adjustment_direction_string_table[] = { { .name = "lower", .val = BCMOLT_FREQUENCY_ADJUSTMENT_DIRECTION_LOWER }, { .name = "higher", .val = BCMOLT_FREQUENCY_ADJUSTMENT_DIRECTION_HIGHER }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_frequency_adjustment_direction = { .name = "bcmolt_frequency_adjustment_direction", .descr = "Frequency adjustment direction", .size = sizeof(bcmolt_frequency_adjustment_direction), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_frequency_adjustment_direction_string_table } };
+bcmcli_enum_val bcmolt_gem_port_direction_string_table[] = { { .name = "downstream", .val = BCMOLT_GEM_PORT_DIRECTION_DOWNSTREAM }, { .name = "upstream", .val = BCMOLT_GEM_PORT_DIRECTION_UPSTREAM }, { .name = "bidirectional", .val = BCMOLT_GEM_PORT_DIRECTION_BIDIRECTIONAL }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gem_port_direction = { .name = "bcmolt_gem_port_direction", .descr = "GEM port ID direction", .size = sizeof(bcmolt_gem_port_direction), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gem_port_direction_string_table } };
+bcmcli_enum_val bcmolt_gem_port_type_string_table[] = { { .name = "unicast", .val = BCMOLT_GEM_PORT_TYPE_UNICAST }, { .name = "multicast", .val = BCMOLT_GEM_PORT_TYPE_MULTICAST }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gem_port_type = { .name = "bcmolt_gem_port_type", .descr = "GEM port type", .size = sizeof(bcmolt_gem_port_type), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gem_port_type_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gem_port_configuration_fields[] = { { .name = "direction", .descr = "GEM port direction", .offset = offsetof(bcmolt_gem_port_configuration, direction), .type = &type_descr_bcmolt_gem_port_direction }, { .name = "type", .descr = "GEM port type", .offset = offsetof(bcmolt_gem_port_configuration, type), .type = &type_descr_bcmolt_gem_port_type } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gem_port_configuration = { .name = "bcmolt_gem_port_configuration", .descr = "GEM port configuration", .size = sizeof(bcmolt_gem_port_configuration), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gem_port_configuration_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gem_port_configuration_fields } } };
+bcmcli_enum_val bcmolt_gem_port_operation_string_table[] = { { .name = "activate", .val = BCMOLT_GEM_PORT_OPERATION_ACTIVATE }, { .name = "deactivate", .val = BCMOLT_GEM_PORT_OPERATION_DEACTIVATE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gem_port_operation = { .name = "bcmolt_gem_port_operation", .descr = "GEM port operation", .size = sizeof(bcmolt_gem_port_operation), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gem_port_operation_string_table } };
+bcmcli_enum_val bcmolt_gpio_cfg_id_string_table[] = { { .name = "direction", .val = BCMOLT_GPIO_CFG_ID_DIRECTION }, { .name = "value", .val = BCMOLT_GPIO_CFG_ID_VALUE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpio_cfg_id = { .name = "bcmolt_gpio_cfg_id", .descr = "Identifiers for all properties contained in the gpio_cfg group.", .size = sizeof(bcmolt_gpio_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpio_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_gpio_key_id_string_table[] = { { .name = "reserved", .val = BCMOLT_GPIO_KEY_ID_RESERVED }, { .name = "gpio_id", .val = BCMOLT_GPIO_KEY_ID_GPIO_ID }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpio_key_id = { .name = "bcmolt_gpio_key_id", .descr = "Identifiers for all properties contained in the gpio_key group.", .size = sizeof(bcmolt_gpio_key_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpio_key_id_string_table } };
+bcmcli_enum_val bcmolt_gpio_pin_dir_string_table[] = { { .name = "input", .val = BCMOLT_GPIO_PIN_DIR_INPUT }, { .name = "output", .val = BCMOLT_GPIO_PIN_DIR_OUTPUT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpio_pin_dir = { .name = "bcmolt_gpio_pin_dir", .descr = "GPIO PIN Direction", .size = sizeof(bcmolt_gpio_pin_dir), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpio_pin_dir_string_table } };
+bcmcli_enum_val bcmolt_gpio_value_string_table[] = { { .name = "clear", .val = BCMOLT_GPIO_VALUE_CLEAR }, { .name = "set", .val = BCMOLT_GPIO_VALUE_SET }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpio_value = { .name = "bcmolt_gpio_value", .descr = "GPIO Value", .size = sizeof(bcmolt_gpio_value), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpio_value_string_table } };
+bcmcli_enum_val bcmolt_gpon_alloc_auto_cfg_id_string_table[] = { { .name = "configuration_completed", .val = BCMOLT_GPON_ALLOC_AUTO_CFG_ID_CONFIGURATION_COMPLETED }, { .name = "get_alloc_stats_completed", .val = BCMOLT_GPON_ALLOC_AUTO_CFG_ID_GET_ALLOC_STATS_COMPLETED }, { .name = "stat_alarm_cleared", .val = BCMOLT_GPON_ALLOC_AUTO_CFG_ID_STAT_ALARM_CLEARED }, { .name = "stat_alarm_raised", .val = BCMOLT_GPON_ALLOC_AUTO_CFG_ID_STAT_ALARM_RAISED }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_alloc_auto_cfg_id = { .name = "bcmolt_gpon_alloc_auto_cfg_id", .descr = "Identifiers for all properties contained in the gpon_alloc_auto_cfg group.", .size = sizeof(bcmolt_gpon_alloc_auto_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_alloc_auto_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_alloc_cfg_id_string_table[] = { { .name = "state", .val = BCMOLT_GPON_ALLOC_CFG_ID_STATE }, { .name = "sla", .val = BCMOLT_GPON_ALLOC_CFG_ID_SLA }, { .name = "onu_id", .val = BCMOLT_GPON_ALLOC_CFG_ID_ONU_ID }, { .name = "collect_stats", .val = BCMOLT_GPON_ALLOC_CFG_ID_COLLECT_STATS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_alloc_cfg_id = { .name = "bcmolt_gpon_alloc_cfg_id", .descr = "Identifiers for all properties contained in the gpon_alloc_cfg group.", .size = sizeof(bcmolt_gpon_alloc_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_alloc_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_alloc_configuration_completed_id_string_table[] = { { .name = "status", .val = BCMOLT_GPON_ALLOC_CONFIGURATION_COMPLETED_ID_STATUS }, { .name = "new_state", .val = BCMOLT_GPON_ALLOC_CONFIGURATION_COMPLETED_ID_NEW_STATE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_alloc_configuration_completed_id = { .name = "bcmolt_gpon_alloc_configuration_completed_id", .descr = "Identifiers for all properties contained in the gpon_alloc_configuration_completed group.", .size = sizeof(bcmolt_gpon_alloc_configuration_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_alloc_configuration_completed_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_alloc_get_alloc_stats_completed_id_string_table[] = { { .name = "status", .val = BCMOLT_GPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_STATUS }, { .name = "average_nsr_used", .val = BCMOLT_GPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_NSR_USED }, { .name = "average_nsr_allocated", .val = BCMOLT_GPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_NSR_ALLOCATED }, { .name = "average_sr_report", .val = BCMOLT_GPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_SR_REPORT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_alloc_get_alloc_stats_completed_id = { .name = "bcmolt_gpon_alloc_get_alloc_stats_completed_id", .descr = "Identifiers for all properties contained in the gpon_alloc_get_alloc_stats_completed group.", .size = sizeof(bcmolt_gpon_alloc_get_alloc_stats_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_alloc_get_alloc_stats_completed_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_alloc_get_stats_id_string_table[] = { { .name = "num_of_cycles", .val = BCMOLT_GPON_ALLOC_GET_STATS_ID_NUM_OF_CYCLES }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_alloc_get_stats_id = { .name = "bcmolt_gpon_alloc_get_stats_id", .descr = "Identifiers for all properties contained in the gpon_alloc_get_stats group.", .size = sizeof(bcmolt_gpon_alloc_get_stats_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_alloc_get_stats_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_alloc_key_id_string_table[] = { { .name = "pon_ni", .val = BCMOLT_GPON_ALLOC_KEY_ID_PON_NI }, { .name = "alloc_id", .val = BCMOLT_GPON_ALLOC_KEY_ID_ALLOC_ID }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_alloc_key_id = { .name = "bcmolt_gpon_alloc_key_id", .descr = "Identifiers for all properties contained in the gpon_alloc_key group.", .size = sizeof(bcmolt_gpon_alloc_key_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_alloc_key_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_alloc_set_state_id_string_table[] = { { .name = "state", .val = BCMOLT_GPON_ALLOC_SET_STATE_ID_STATE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_alloc_set_state_id = { .name = "bcmolt_gpon_alloc_set_state_id", .descr = "Identifiers for all properties contained in the gpon_alloc_set_state group.", .size = sizeof(bcmolt_gpon_alloc_set_state_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_alloc_set_state_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_alloc_stat_alarm_cleared_id_string_table[] = { { .name = "stat", .val = BCMOLT_GPON_ALLOC_STAT_ALARM_CLEARED_ID_STAT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_alloc_stat_alarm_cleared_id = { .name = "bcmolt_gpon_alloc_stat_alarm_cleared_id", .descr = "Identifiers for all properties contained in the gpon_alloc_stat_alarm_cleared group.", .size = sizeof(bcmolt_gpon_alloc_stat_alarm_cleared_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_alloc_stat_alarm_cleared_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_alloc_stat_alarm_raised_id_string_table[] = { { .name = "stat", .val = BCMOLT_GPON_ALLOC_STAT_ALARM_RAISED_ID_STAT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_alloc_stat_alarm_raised_id = { .name = "bcmolt_gpon_alloc_stat_alarm_raised_id", .descr = "Identifiers for all properties contained in the gpon_alloc_stat_alarm_raised group.", .size = sizeof(bcmolt_gpon_alloc_stat_alarm_raised_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_alloc_stat_alarm_raised_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_alloc_stat_cfg_id_string_table[] = { { .name = "cfg", .val = BCMOLT_GPON_ALLOC_STAT_CFG_ID_CFG }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_alloc_stat_cfg_id = { .name = "bcmolt_gpon_alloc_stat_cfg_id", .descr = "Identifiers for all properties contained in the gpon_alloc_stat_cfg group.", .size = sizeof(bcmolt_gpon_alloc_stat_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_alloc_stat_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_alloc_stat_id_string_table[] = { { .name = "rx_bytes", .val = BCMOLT_GPON_ALLOC_STAT_ID_RX_BYTES }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_alloc_stat_id = { .name = "bcmolt_gpon_alloc_stat_id", .descr = "Identifiers for all properties contained in the gpon_alloc_stat group.", .size = sizeof(bcmolt_gpon_alloc_stat_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_alloc_stat_id_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_alloc_with_state_fields[] = { { .name = "alloc_id", .descr = "Alloc ID", .offset = offsetof(bcmolt_gpon_alloc_with_state, alloc_id), .type = &type_descr_uint16_t }, { .name = "state", .descr = "State", .offset = offsetof(bcmolt_gpon_alloc_with_state, state), .type = &type_descr_bcmolt_alloc_state } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_alloc_with_state = { .name = "bcmolt_gpon_alloc_with_state", .descr = "GPON Alloc With State", .size = sizeof(bcmolt_gpon_alloc_with_state), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_alloc_with_state_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_alloc_with_state_fields } } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_alloc_with_state_list_u16_max_32 = { .name = "bcmolt_gpon_alloc_with_state_list_u16_max_32", .descr = "Variable-length list of gpon_alloc_with_state", .size = sizeof(bcmolt_gpon_alloc_with_state_list_u16_max_32), .base_type = BCMOLT_BASE_TYPE_ID_ARR_DYN, .x = { .arr_dyn = { .elem_type = &type_descr_bcmolt_gpon_alloc_with_state, .len_size = 2, .max_size = 32 } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_debug_flow_config_fields[] = { { .name = "untagged_flow", .descr = "If enabled, this GEM port will expect upstream traffic to be untagged and downstream traffic to use a custom VLAN tag.", .offset = offsetof(bcmolt_gpon_debug_flow_config, untagged_flow), .type = &type_descr_bcmolt_control_state }, { .name = "untagged_vid", .descr = "The VLAN ID to use when adding MAC table entries for untagged traffic.", .offset = offsetof(bcmolt_gpon_debug_flow_config, untagged_vid), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_debug_flow_config = { .name = "bcmolt_gpon_debug_flow_config", .descr = "GPON Debug Flow Config", .size = sizeof(bcmolt_gpon_debug_flow_config), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_debug_flow_config_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_debug_flow_config_fields } } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_gem_id_list_u8_max_16 = { .name = "bcmolt_gpon_gem_id_list_u8_max_16", .descr = "Variable-length list of gpon_gem_id", .size = sizeof(bcmolt_gpon_gem_id_list_u8_max_16), .base_type = BCMOLT_BASE_TYPE_ID_ARR_DYN, .x = { .arr_dyn = { .elem_type = &type_descr_uint16_t, .len_size = 1, .max_size = 16 } } };
+bcmcli_enum_val bcmolt_gpon_gem_port_auto_cfg_id_string_table[] = { { .name = "configuration_completed", .val = BCMOLT_GPON_GEM_PORT_AUTO_CFG_ID_CONFIGURATION_COMPLETED }, { .name = "stat_alarm_cleared", .val = BCMOLT_GPON_GEM_PORT_AUTO_CFG_ID_STAT_ALARM_CLEARED }, { .name = "stat_alarm_raised", .val = BCMOLT_GPON_GEM_PORT_AUTO_CFG_ID_STAT_ALARM_RAISED }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_gem_port_auto_cfg_id = { .name = "bcmolt_gpon_gem_port_auto_cfg_id", .descr = "Identifiers for all properties contained in the gpon_gem_port_auto_cfg group.", .size = sizeof(bcmolt_gpon_gem_port_auto_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_gem_port_auto_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_gem_port_cfg_id_string_table[] = { { .name = "configuration", .val = BCMOLT_GPON_GEM_PORT_CFG_ID_CONFIGURATION }, { .name = "onu_id", .val = BCMOLT_GPON_GEM_PORT_CFG_ID_ONU_ID }, { .name = "gem_port_state", .val = BCMOLT_GPON_GEM_PORT_CFG_ID_GEM_PORT_STATE }, { .name = "downstream_encryption_mode", .val = BCMOLT_GPON_GEM_PORT_CFG_ID_DOWNSTREAM_ENCRYPTION_MODE }, { .name = "upstream_destination_queue", .val = BCMOLT_GPON_GEM_PORT_CFG_ID_UPSTREAM_DESTINATION_QUEUE }, { .name = "control", .val = BCMOLT_GPON_GEM_PORT_CFG_ID_CONTROL }, { .name = "debug_flow_config", .val = BCMOLT_GPON_GEM_PORT_CFG_ID_DEBUG_FLOW_CONFIG }, { .name = "mac_table_entry_limit", .val = BCMOLT_GPON_GEM_PORT_CFG_ID_MAC_TABLE_ENTRY_LIMIT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_gem_port_cfg_id = { .name = "bcmolt_gpon_gem_port_cfg_id", .descr = "Identifiers for all properties contained in the gpon_gem_port_cfg group.", .size = sizeof(bcmolt_gpon_gem_port_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_gem_port_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_gem_port_configuration_completed_id_string_table[] = { { .name = "status", .val = BCMOLT_GPON_GEM_PORT_CONFIGURATION_COMPLETED_ID_STATUS }, { .name = "new_state", .val = BCMOLT_GPON_GEM_PORT_CONFIGURATION_COMPLETED_ID_NEW_STATE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_gem_port_configuration_completed_id = { .name = "bcmolt_gpon_gem_port_configuration_completed_id", .descr = "Identifiers for all properties contained in the gpon_gem_port_configuration_completed group.", .size = sizeof(bcmolt_gpon_gem_port_configuration_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_gem_port_configuration_completed_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_gem_port_key_id_string_table[] = { { .name = "pon_ni", .val = BCMOLT_GPON_GEM_PORT_KEY_ID_PON_NI }, { .name = "gem_port_id", .val = BCMOLT_GPON_GEM_PORT_KEY_ID_GEM_PORT_ID }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_gem_port_key_id = { .name = "bcmolt_gpon_gem_port_key_id", .descr = "Identifiers for all properties contained in the gpon_gem_port_key group.", .size = sizeof(bcmolt_gpon_gem_port_key_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_gem_port_key_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_gem_port_set_state_id_string_table[] = { { .name = "state", .val = BCMOLT_GPON_GEM_PORT_SET_STATE_ID_STATE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_gem_port_set_state_id = { .name = "bcmolt_gpon_gem_port_set_state_id", .descr = "Identifiers for all properties contained in the gpon_gem_port_set_state group.", .size = sizeof(bcmolt_gpon_gem_port_set_state_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_gem_port_set_state_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_gem_port_stat_alarm_cleared_id_string_table[] = { { .name = "stat", .val = BCMOLT_GPON_GEM_PORT_STAT_ALARM_CLEARED_ID_STAT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_gem_port_stat_alarm_cleared_id = { .name = "bcmolt_gpon_gem_port_stat_alarm_cleared_id", .descr = "Identifiers for all properties contained in the gpon_gem_port_stat_alarm_cleared group.", .size = sizeof(bcmolt_gpon_gem_port_stat_alarm_cleared_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_gem_port_stat_alarm_cleared_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_gem_port_stat_alarm_raised_id_string_table[] = { { .name = "stat", .val = BCMOLT_GPON_GEM_PORT_STAT_ALARM_RAISED_ID_STAT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_gem_port_stat_alarm_raised_id = { .name = "bcmolt_gpon_gem_port_stat_alarm_raised_id", .descr = "Identifiers for all properties contained in the gpon_gem_port_stat_alarm_raised group.", .size = sizeof(bcmolt_gpon_gem_port_stat_alarm_raised_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_gem_port_stat_alarm_raised_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_gem_port_stat_cfg_id_string_table[] = { { .name = "cfg", .val = BCMOLT_GPON_GEM_PORT_STAT_CFG_ID_CFG }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_gem_port_stat_cfg_id = { .name = "bcmolt_gpon_gem_port_stat_cfg_id", .descr = "Identifiers for all properties contained in the gpon_gem_port_stat_cfg group.", .size = sizeof(bcmolt_gpon_gem_port_stat_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_gem_port_stat_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_gem_port_stat_id_string_table[] = { { .name = "rx_packets", .val = BCMOLT_GPON_GEM_PORT_STAT_ID_RX_PACKETS }, { .name = "rx_bytes", .val = BCMOLT_GPON_GEM_PORT_STAT_ID_RX_BYTES }, { .name = "tx_packets", .val = BCMOLT_GPON_GEM_PORT_STAT_ID_TX_PACKETS }, { .name = "tx_bytes", .val = BCMOLT_GPON_GEM_PORT_STAT_ID_TX_BYTES }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_gem_port_stat_id = { .name = "bcmolt_gpon_gem_port_stat_id", .descr = "Identifiers for all properties contained in the gpon_gem_port_stat group.", .size = sizeof(bcmolt_gpon_gem_port_stat_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_gem_port_stat_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_gem_port_state_string_table[] = { { .name = "not_configured", .val = BCMOLT_GPON_GEM_PORT_STATE_NOT_CONFIGURED }, { .name = "inactive", .val = BCMOLT_GPON_GEM_PORT_STATE_INACTIVE }, { .name = "processing", .val = BCMOLT_GPON_GEM_PORT_STATE_PROCESSING }, { .name = "active", .val = BCMOLT_GPON_GEM_PORT_STATE_ACTIVE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_gem_port_state = { .name = "bcmolt_gpon_gem_port_state", .descr = "GPON GEM Port State", .size = sizeof(bcmolt_gpon_gem_port_state), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_gem_port_state_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_gem_port_with_state_fields[] = { { .name = "gem_id", .descr = "GEM ID", .offset = offsetof(bcmolt_gpon_gem_port_with_state, gem_id), .type = &type_descr_uint16_t }, { .name = "state", .descr = "State", .offset = offsetof(bcmolt_gpon_gem_port_with_state, state), .type = &type_descr_bcmolt_gpon_gem_port_state } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_gem_port_with_state = { .name = "bcmolt_gpon_gem_port_with_state", .descr = "GPON GEM Port With State", .size = sizeof(bcmolt_gpon_gem_port_with_state), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_gem_port_with_state_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_gem_port_with_state_fields } } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_gem_port_with_state_list_u16_max_128 = { .name = "bcmolt_gpon_gem_port_with_state_list_u16_max_128", .descr = "Variable-length list of gpon_gem_port_with_state", .size = sizeof(bcmolt_gpon_gem_port_with_state_list_u16_max_128), .base_type = BCMOLT_BASE_TYPE_ID_ARR_DYN, .x = { .arr_dyn = { .elem_type = &type_descr_bcmolt_gpon_gem_port_with_state, .len_size = 2, .max_size = 128 } } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_gem_port_with_state_list_u16_max_256 = { .name = "bcmolt_gpon_gem_port_with_state_list_u16_max_256", .descr = "Variable-length list of gpon_gem_port_with_state", .size = sizeof(bcmolt_gpon_gem_port_with_state_list_u16_max_256), .base_type = BCMOLT_BASE_TYPE_ID_ARR_DYN, .x = { .arr_dyn = { .elem_type = &type_descr_bcmolt_gpon_gem_port_with_state, .len_size = 2, .max_size = 256 } } };
+bcmcli_enum_val bcmolt_gpon_iwf_auto_cfg_id_string_table[] = { { .name = "flush_mac_table_completed", .val = BCMOLT_GPON_IWF_AUTO_CFG_ID_FLUSH_MAC_TABLE_COMPLETED }, { .name = "scan_mac_table_completed", .val = BCMOLT_GPON_IWF_AUTO_CFG_ID_SCAN_MAC_TABLE_COMPLETED }, { .name = "stat_alarm_cleared", .val = BCMOLT_GPON_IWF_AUTO_CFG_ID_STAT_ALARM_CLEARED }, { .name = "stat_alarm_raised", .val = BCMOLT_GPON_IWF_AUTO_CFG_ID_STAT_ALARM_RAISED }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_auto_cfg_id = { .name = "bcmolt_gpon_iwf_auto_cfg_id", .descr = "Identifiers for all properties contained in the gpon_iwf_auto_cfg group.", .size = sizeof(bcmolt_gpon_iwf_auto_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_iwf_auto_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_iwf_cfg_id_string_table[] = { { .name = "iwf_mode", .val = BCMOLT_GPON_IWF_CFG_ID_IWF_MODE }, { .name = "us_tpid_per_flow", .val = BCMOLT_GPON_IWF_CFG_ID_US_TPID_PER_FLOW }, { .name = "us_otag_direct_tpid", .val = BCMOLT_GPON_IWF_CFG_ID_US_OTAG_DIRECT_TPID }, { .name = "us_otag_direct_pbit", .val = BCMOLT_GPON_IWF_CFG_ID_US_OTAG_DIRECT_PBIT }, { .name = "ds_tpid", .val = BCMOLT_GPON_IWF_CFG_ID_DS_TPID }, { .name = "mac_table_configuration", .val = BCMOLT_GPON_IWF_CFG_ID_MAC_TABLE_CONFIGURATION }, { .name = "debug_flow_configuration", .val = BCMOLT_GPON_IWF_CFG_ID_DEBUG_FLOW_CONFIGURATION }, { .name = "mac_table_count", .val = BCMOLT_GPON_IWF_CFG_ID_MAC_TABLE_COUNT }, { .name = "forbidden_vlan_flow_gem_range_start", .val = BCMOLT_GPON_IWF_CFG_ID_FORBIDDEN_VLAN_FLOW_GEM_RANGE_START }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_cfg_id = { .name = "bcmolt_gpon_iwf_cfg_id", .descr = "Identifiers for all properties contained in the gpon_iwf_cfg group.", .size = sizeof(bcmolt_gpon_iwf_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_iwf_cfg_id_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_debug_flow_config_fields[] = { { .name = "learn_untagged_flow_vids", .descr = "When a MAC/VID is learned on an untagged flow, learn the received MAC address with both the untagged VID and the received VID (even though it will be invalid).", .offset = offsetof(bcmolt_gpon_iwf_debug_flow_config, learn_untagged_flow_vids), .type = &type_descr_bcmos_bool }, { .name = "untagged_flow_shaping_ms_per_sec", .descr = "If this value is greater than 0, learning events on untagged flows will only be enabled for N milliseconds every second.  For example, a value of 10 would mean learning is only enabled for 1% of the total time.", .offset = offsetof(bcmolt_gpon_iwf_debug_flow_config, untagged_flow_shaping_ms_per_sec), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_debug_flow_config = { .name = "bcmolt_gpon_iwf_debug_flow_config", .descr = "Options for configuring the \"untagged flow\" feature.", .size = sizeof(bcmolt_gpon_iwf_debug_flow_config), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_iwf_debug_flow_config_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_iwf_debug_flow_config_fields } } };
+bcmcli_enum_val bcmolt_gpon_iwf_ds_egress_flow_cfg_id_string_table[] = { { .name = "gem_port", .val = BCMOLT_GPON_IWF_DS_EGRESS_FLOW_CFG_ID_GEM_PORT }, { .name = "pbit_control", .val = BCMOLT_GPON_IWF_DS_EGRESS_FLOW_CFG_ID_PBIT_CONTROL }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_ds_egress_flow_cfg_id = { .name = "bcmolt_gpon_iwf_ds_egress_flow_cfg_id", .descr = "Identifiers for all properties contained in the gpon_iwf_ds_egress_flow_cfg group.", .size = sizeof(bcmolt_gpon_iwf_ds_egress_flow_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_iwf_ds_egress_flow_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_iwf_ds_egress_flow_key_id_string_table[] = { { .name = "pon_ni", .val = BCMOLT_GPON_IWF_DS_EGRESS_FLOW_KEY_ID_PON_NI }, { .name = "flow_id", .val = BCMOLT_GPON_IWF_DS_EGRESS_FLOW_KEY_ID_FLOW_ID }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_ds_egress_flow_key_id = { .name = "bcmolt_gpon_iwf_ds_egress_flow_key_id", .descr = "Identifiers for all properties contained in the gpon_iwf_ds_egress_flow_key group.", .size = sizeof(bcmolt_gpon_iwf_ds_egress_flow_key_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_iwf_ds_egress_flow_key_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_iwf_ds_ingress_flow_cfg_id_string_table[] = { { .name = "mapping_method", .val = BCMOLT_GPON_IWF_DS_INGRESS_FLOW_CFG_ID_MAPPING_METHOD }, { .name = "mapping_tag", .val = BCMOLT_GPON_IWF_DS_INGRESS_FLOW_CFG_ID_MAPPING_TAG }, { .name = "vlan_action", .val = BCMOLT_GPON_IWF_DS_INGRESS_FLOW_CFG_ID_VLAN_ACTION }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_ds_ingress_flow_cfg_id = { .name = "bcmolt_gpon_iwf_ds_ingress_flow_cfg_id", .descr = "Identifiers for all properties contained in the gpon_iwf_ds_ingress_flow_cfg group.", .size = sizeof(bcmolt_gpon_iwf_ds_ingress_flow_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_iwf_ds_ingress_flow_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_iwf_ds_ingress_flow_key_id_string_table[] = { { .name = "pon_ni", .val = BCMOLT_GPON_IWF_DS_INGRESS_FLOW_KEY_ID_PON_NI }, { .name = "vlan_id", .val = BCMOLT_GPON_IWF_DS_INGRESS_FLOW_KEY_ID_VLAN_ID }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_ds_ingress_flow_key_id = { .name = "bcmolt_gpon_iwf_ds_ingress_flow_key_id", .descr = "Identifiers for all properties contained in the gpon_iwf_ds_ingress_flow_key group.", .size = sizeof(bcmolt_gpon_iwf_ds_ingress_flow_key_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_iwf_ds_ingress_flow_key_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_iwf_flush_mac_table_completed_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_flush_mac_table_completed_id = { .name = "bcmolt_gpon_iwf_flush_mac_table_completed_id", .descr = "Identifiers for all properties contained in the gpon_iwf_flush_mac_table_completed group.", .size = sizeof(bcmolt_gpon_iwf_flush_mac_table_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_iwf_flush_mac_table_completed_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_iwf_flush_mac_table_id_string_table[] = { { .name = "control", .val = BCMOLT_GPON_IWF_FLUSH_MAC_TABLE_ID_CONTROL }, { .name = "vid", .val = BCMOLT_GPON_IWF_FLUSH_MAC_TABLE_ID_VID }, { .name = "flow_id", .val = BCMOLT_GPON_IWF_FLUSH_MAC_TABLE_ID_FLOW_ID }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_flush_mac_table_id = { .name = "bcmolt_gpon_iwf_flush_mac_table_id", .descr = "Identifiers for all properties contained in the gpon_iwf_flush_mac_table group.", .size = sizeof(bcmolt_gpon_iwf_flush_mac_table_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_iwf_flush_mac_table_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_iwf_key_id_string_table[] = { { .name = "pon_ni", .val = BCMOLT_GPON_IWF_KEY_ID_PON_NI }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_key_id = { .name = "bcmolt_gpon_iwf_key_id", .descr = "Identifiers for all properties contained in the gpon_iwf_key group.", .size = sizeof(bcmolt_gpon_iwf_key_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_iwf_key_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_iwf_mac_table_auto_cfg_id_string_table[] = { { .name = "mac_aged", .val = BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID_MAC_AGED }, { .name = "mac_dropped", .val = BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID_MAC_DROPPED }, { .name = "mac_move", .val = BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID_MAC_MOVE }, { .name = "new_mac", .val = BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID_NEW_MAC }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_mac_table_auto_cfg_id = { .name = "bcmolt_gpon_iwf_mac_table_auto_cfg_id", .descr = "Identifiers for all properties contained in the gpon_iwf_mac_table_auto_cfg group.", .size = sizeof(bcmolt_gpon_iwf_mac_table_auto_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_iwf_mac_table_auto_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_iwf_mac_table_cfg_id_string_table[] = { { .name = "flow_id", .val = BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_FLOW_ID }, { .name = "static", .val = BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_STAT }, { .name = "gem_port_id", .val = BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_GEM_PORT_ID }, { .name = "onu_id", .val = BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_ONU_ID }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_mac_table_cfg_id = { .name = "bcmolt_gpon_iwf_mac_table_cfg_id", .descr = "Identifiers for all properties contained in the gpon_iwf_mac_table_cfg group.", .size = sizeof(bcmolt_gpon_iwf_mac_table_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_iwf_mac_table_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_iwf_mac_table_key_id_string_table[] = { { .name = "pon_ni", .val = BCMOLT_GPON_IWF_MAC_TABLE_KEY_ID_PON_NI }, { .name = "mac_address", .val = BCMOLT_GPON_IWF_MAC_TABLE_KEY_ID_MAC_ADDRESS }, { .name = "vlan", .val = BCMOLT_GPON_IWF_MAC_TABLE_KEY_ID_VLAN }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_mac_table_key_id = { .name = "bcmolt_gpon_iwf_mac_table_key_id", .descr = "Identifiers for all properties contained in the gpon_iwf_mac_table_key group.", .size = sizeof(bcmolt_gpon_iwf_mac_table_key_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_iwf_mac_table_key_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_iwf_mac_table_mac_aged_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_mac_table_mac_aged_id = { .name = "bcmolt_gpon_iwf_mac_table_mac_aged_id", .descr = "Identifiers for all properties contained in the gpon_iwf_mac_table_mac_aged group.", .size = sizeof(bcmolt_gpon_iwf_mac_table_mac_aged_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_iwf_mac_table_mac_aged_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_iwf_mac_table_mac_dropped_id_string_table[] = { { .name = "flow_id", .val = BCMOLT_GPON_IWF_MAC_TABLE_MAC_DROPPED_ID_FLOW_ID }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_mac_table_mac_dropped_id = { .name = "bcmolt_gpon_iwf_mac_table_mac_dropped_id", .descr = "Identifiers for all properties contained in the gpon_iwf_mac_table_mac_dropped group.", .size = sizeof(bcmolt_gpon_iwf_mac_table_mac_dropped_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_iwf_mac_table_mac_dropped_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_iwf_mac_table_mac_move_id_string_table[] = { { .name = "old_flow_id", .val = BCMOLT_GPON_IWF_MAC_TABLE_MAC_MOVE_ID_OLD_FLOW_ID }, { .name = "new_flow_id", .val = BCMOLT_GPON_IWF_MAC_TABLE_MAC_MOVE_ID_NEW_FLOW_ID }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_mac_table_mac_move_id = { .name = "bcmolt_gpon_iwf_mac_table_mac_move_id", .descr = "Identifiers for all properties contained in the gpon_iwf_mac_table_mac_move group.", .size = sizeof(bcmolt_gpon_iwf_mac_table_mac_move_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_iwf_mac_table_mac_move_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_iwf_mac_table_new_mac_id_string_table[] = { { .name = "flow_id", .val = BCMOLT_GPON_IWF_MAC_TABLE_NEW_MAC_ID_FLOW_ID }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_mac_table_new_mac_id = { .name = "bcmolt_gpon_iwf_mac_table_new_mac_id", .descr = "Identifiers for all properties contained in the gpon_iwf_mac_table_new_mac group.", .size = sizeof(bcmolt_gpon_iwf_mac_table_new_mac_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_iwf_mac_table_new_mac_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_iwf_scan_mac_table_completed_id_string_table[] = { { .name = "mac_address", .val = BCMOLT_GPON_IWF_SCAN_MAC_TABLE_COMPLETED_ID_MAC_ADDRESS }, { .name = "entries", .val = BCMOLT_GPON_IWF_SCAN_MAC_TABLE_COMPLETED_ID_ENTRIES }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_scan_mac_table_completed_id = { .name = "bcmolt_gpon_iwf_scan_mac_table_completed_id", .descr = "Identifiers for all properties contained in the gpon_iwf_scan_mac_table_completed group.", .size = sizeof(bcmolt_gpon_iwf_scan_mac_table_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_iwf_scan_mac_table_completed_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_iwf_scan_mac_table_id_string_table[] = { { .name = "mac_address", .val = BCMOLT_GPON_IWF_SCAN_MAC_TABLE_ID_MAC_ADDRESS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_scan_mac_table_id = { .name = "bcmolt_gpon_iwf_scan_mac_table_id", .descr = "Identifiers for all properties contained in the gpon_iwf_scan_mac_table group.", .size = sizeof(bcmolt_gpon_iwf_scan_mac_table_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_iwf_scan_mac_table_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_iwf_stat_alarm_cleared_id_string_table[] = { { .name = "stat", .val = BCMOLT_GPON_IWF_STAT_ALARM_CLEARED_ID_STAT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_stat_alarm_cleared_id = { .name = "bcmolt_gpon_iwf_stat_alarm_cleared_id", .descr = "Identifiers for all properties contained in the gpon_iwf_stat_alarm_cleared group.", .size = sizeof(bcmolt_gpon_iwf_stat_alarm_cleared_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_iwf_stat_alarm_cleared_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_iwf_stat_alarm_raised_id_string_table[] = { { .name = "stat", .val = BCMOLT_GPON_IWF_STAT_ALARM_RAISED_ID_STAT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_stat_alarm_raised_id = { .name = "bcmolt_gpon_iwf_stat_alarm_raised_id", .descr = "Identifiers for all properties contained in the gpon_iwf_stat_alarm_raised group.", .size = sizeof(bcmolt_gpon_iwf_stat_alarm_raised_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_iwf_stat_alarm_raised_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_iwf_stat_cfg_id_string_table[] = { { .name = "cfg", .val = BCMOLT_GPON_IWF_STAT_CFG_ID_CFG }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_stat_cfg_id = { .name = "bcmolt_gpon_iwf_stat_cfg_id", .descr = "Identifiers for all properties contained in the gpon_iwf_stat_cfg group.", .size = sizeof(bcmolt_gpon_iwf_stat_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_iwf_stat_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_iwf_stat_id_string_table[] = { { .name = "ds_hit_event", .val = BCMOLT_GPON_IWF_STAT_ID_DS_HIT_EVENT }, { .name = "ds_miss_event", .val = BCMOLT_GPON_IWF_STAT_ID_DS_MISS_EVENT }, { .name = "ds_drop_due_to_miss_event", .val = BCMOLT_GPON_IWF_STAT_ID_DS_DROP_DUE_TO_MISS_EVENT }, { .name = "ds_drop_due_to_hit_event", .val = BCMOLT_GPON_IWF_STAT_ID_DS_DROP_DUE_TO_HIT_EVENT }, { .name = "ds_drop_to_disabled_gem", .val = BCMOLT_GPON_IWF_STAT_ID_DS_DROP_TO_DISABLED_GEM }, { .name = "new_mac_discovered", .val = BCMOLT_GPON_IWF_STAT_ID_NEW_MAC_DISCOVERED }, { .name = "move_event", .val = BCMOLT_GPON_IWF_STAT_ID_MOVE_EVENT }, { .name = "new_mac_drop_due_to_fifo_full", .val = BCMOLT_GPON_IWF_STAT_ID_NEW_MAC_DROP_DUE_TO_FIFO_FULL }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_stat_id = { .name = "bcmolt_gpon_iwf_stat_id", .descr = "Identifiers for all properties contained in the gpon_iwf_stat group.", .size = sizeof(bcmolt_gpon_iwf_stat_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_iwf_stat_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_iwf_us_flow_cfg_id_string_table[] = { { .name = "flow_id", .val = BCMOLT_GPON_IWF_US_FLOW_CFG_ID_FLOW_ID }, { .name = "mac_learning", .val = BCMOLT_GPON_IWF_US_FLOW_CFG_ID_MAC_LEARNING }, { .name = "vlan_action", .val = BCMOLT_GPON_IWF_US_FLOW_CFG_ID_VLAN_ACTION }, { .name = "vlan_tag", .val = BCMOLT_GPON_IWF_US_FLOW_CFG_ID_VLAN_TAG }, { .name = "tpid_index", .val = BCMOLT_GPON_IWF_US_FLOW_CFG_ID_TPID_INDEX }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_us_flow_cfg_id = { .name = "bcmolt_gpon_iwf_us_flow_cfg_id", .descr = "Identifiers for all properties contained in the gpon_iwf_us_flow_cfg group.", .size = sizeof(bcmolt_gpon_iwf_us_flow_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_iwf_us_flow_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_iwf_us_flow_key_id_string_table[] = { { .name = "pon_ni", .val = BCMOLT_GPON_IWF_US_FLOW_KEY_ID_PON_NI }, { .name = "gem_port_id", .val = BCMOLT_GPON_IWF_US_FLOW_KEY_ID_GEM_PORT_ID }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_us_flow_key_id = { .name = "bcmolt_gpon_iwf_us_flow_key_id", .descr = "Identifiers for all properties contained in the gpon_iwf_us_flow_key group.", .size = sizeof(bcmolt_gpon_iwf_us_flow_key_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_iwf_us_flow_key_id_string_table } };
+bcmcli_enum_val bcmolt_key_exchange_mode_string_table[] = { { .name = "normal", .val = BCMOLT_KEY_EXCHANGE_MODE_NORMAL }, { .name = "enhanced", .val = BCMOLT_KEY_EXCHANGE_MODE_ENHANCED }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_key_exchange_mode = { .name = "bcmolt_key_exchange_mode", .descr = "Key exchange mode", .size = sizeof(bcmolt_key_exchange_mode), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_key_exchange_mode_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_key_exchange_fields[] = { { .name = "interval", .descr = "Key Exchange process interval in milliseconds", .offset = offsetof(bcmolt_gpon_key_exchange, interval), .type = &type_descr_uint32_t }, { .name = "control", .descr = "Enable\\disable periodic process of Key Exchange for active ONUs", .offset = offsetof(bcmolt_gpon_key_exchange, control), .type = &type_descr_bcmolt_control_state }, { .name = "mode", .descr = "Key exchange mode", .offset = offsetof(bcmolt_gpon_key_exchange, mode), .type = &type_descr_bcmolt_key_exchange_mode }, { .name = "encrypted_ports_only", .descr = "Perform key exchange only to ONUs with GEM ports that have downstream encryption enabled", .offset = offsetof(bcmolt_gpon_key_exchange, encrypted_ports_only), .type = &type_descr_bcmolt_control_state } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_key_exchange = { .name = "bcmolt_gpon_key_exchange", .descr = "GPON Key Exchange ", .size = sizeof(bcmolt_gpon_key_exchange), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_key_exchange_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_key_exchange_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_mac_table_scan_result_fields[] = { { .name = "vlan", .descr = "The VLAN ID of the entry.", .offset = offsetof(bcmolt_gpon_mac_table_scan_result, vlan), .type = &type_descr_uint16_t }, { .name = "flow_id", .descr = "The flow ID assigned to traffic that matches this MAC table entry.", .offset = offsetof(bcmolt_gpon_mac_table_scan_result, flow_id), .type = &type_descr_uint16_t }, { .name = "stat", .descr = "Whether or not the MAC entry is static.  Static entries don't age.", .offset = offsetof(bcmolt_gpon_mac_table_scan_result, stat), .type = &type_descr_bcmos_bool }, { .name = "gem_port_id", .descr = "The GEM port ID of the traffic that created this table entry.  This only applies to automatically-learned entries.  Manually-added entries will have the value BCMOLT_PON_GEM_PORT_ID_INVALID.", .offset = offsetof(bcmolt_gpon_mac_table_scan_result, gem_port_id), .type = &type_descr_uint16_t }, { .name = "onu_id", .descr = "The ONU ID for the traffic that created this table entry.  This only valid if gem_port_id is valid.  Otherwise this will be set to BCMOLT_GPON_ONU_ID_INVALID.", .offset = offsetof(bcmolt_gpon_mac_table_scan_result, onu_id), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_mac_table_scan_result = { .name = "bcmolt_gpon_mac_table_scan_result", .descr = "GPON MAC table scan result for a single MAC table entry.", .size = sizeof(bcmolt_gpon_mac_table_scan_result), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_mac_table_scan_result_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_mac_table_scan_result_fields } } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_mac_table_scan_result_list_u16 = { .name = "bcmolt_gpon_mac_table_scan_result_list_u16", .descr = "Variable-length list of gpon_mac_table_scan_result", .size = sizeof(bcmolt_gpon_mac_table_scan_result_list_u16), .base_type = BCMOLT_BASE_TYPE_ID_ARR_DYN, .x = { .arr_dyn = { .elem_type = &type_descr_bcmolt_gpon_mac_table_scan_result, .len_size = 2, .max_size = DEFAULT_DYN_ARR_MAX_SIZE / sizeof(bcmolt_gpon_mac_table_scan_result) } } };
+bcmcli_enum_val bcmolt_gpon_ni_activate_all_onus_completed_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_activate_all_onus_completed_id = { .name = "bcmolt_gpon_ni_activate_all_onus_completed_id", .descr = "Identifiers for all properties contained in the gpon_ni_activate_all_onus_completed group.", .size = sizeof(bcmolt_gpon_ni_activate_all_onus_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_ni_activate_all_onus_completed_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_ni_auto_cfg_id_string_table[] = { { .name = "activate_all_onus_completed", .val = BCMOLT_GPON_NI_AUTO_CFG_ID_ACTIVATE_ALL_ONUS_COMPLETED }, { .name = "cpu_packets_failure", .val = BCMOLT_GPON_NI_AUTO_CFG_ID_CPU_PACKETS_FAILURE }, { .name = "deactivate_all_onus_completed", .val = BCMOLT_GPON_NI_AUTO_CFG_ID_DEACTIVATE_ALL_ONUS_COMPLETED }, { .name = "disable_all_onus_completed", .val = BCMOLT_GPON_NI_AUTO_CFG_ID_DISABLE_ALL_ONUS_COMPLETED }, { .name = "enable_all_onus_completed", .val = BCMOLT_GPON_NI_AUTO_CFG_ID_ENABLE_ALL_ONUS_COMPLETED }, { .name = "los", .val = BCMOLT_GPON_NI_AUTO_CFG_ID_LOS }, { .name = "onu_discovered", .val = BCMOLT_GPON_NI_AUTO_CFG_ID_ONU_DISCOVERED }, { .name = "onu_upgrade_complete", .val = BCMOLT_GPON_NI_AUTO_CFG_ID_ONU_UPGRADE_COMPLETE }, { .name = "protection_switching_onus_ranged", .val = BCMOLT_GPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_ONUS_RANGED }, { .name = "protection_switching_switchover_completed", .val = BCMOLT_GPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED }, { .name = "protection_switching_traffic_resume", .val = BCMOLT_GPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_TRAFFIC_RESUME }, { .name = "rogue_detection_completed", .val = BCMOLT_GPON_NI_AUTO_CFG_ID_ROGUE_DETECTION_COMPLETED }, { .name = "rogue_onu_special_map_cycle_start", .val = BCMOLT_GPON_NI_AUTO_CFG_ID_ROGUE_ONU_SPECIAL_MAP_CYCLE_START }, { .name = "serial_number_acquisition_cycle_start", .val = BCMOLT_GPON_NI_AUTO_CFG_ID_SERIAL_NUMBER_ACQUISITION_CYCLE_START }, { .name = "standby_pon_monitoring_cycle_completed", .val = BCMOLT_GPON_NI_AUTO_CFG_ID_STANDBY_PON_MONITORING_CYCLE_COMPLETED }, { .name = "stat_alarm_cleared", .val = BCMOLT_GPON_NI_AUTO_CFG_ID_STAT_ALARM_CLEARED }, { .name = "stat_alarm_raised", .val = BCMOLT_GPON_NI_AUTO_CFG_ID_STAT_ALARM_RAISED }, { .name = "state_change_completed", .val = BCMOLT_GPON_NI_AUTO_CFG_ID_STATE_CHANGE_COMPLETED }, { .name = "tod_request_completed", .val = BCMOLT_GPON_NI_AUTO_CFG_ID_TOD_REQUEST_COMPLETED }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_auto_cfg_id = { .name = "bcmolt_gpon_ni_auto_cfg_id", .descr = "Identifiers for all properties contained in the gpon_ni_auto_cfg group.", .size = sizeof(bcmolt_gpon_ni_auto_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_ni_auto_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_ni_broadcast_ploam_packet_id_string_table[] = { { .name = "ploam", .val = BCMOLT_GPON_NI_BROADCAST_PLOAM_PACKET_ID_PLOAM }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_broadcast_ploam_packet_id = { .name = "bcmolt_gpon_ni_broadcast_ploam_packet_id", .descr = "Identifiers for all properties contained in the gpon_ni_broadcast_ploam_packet group.", .size = sizeof(bcmolt_gpon_ni_broadcast_ploam_packet_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_ni_broadcast_ploam_packet_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_ni_cfg_id_string_table[] = { { .name = "pon_status", .val = BCMOLT_GPON_NI_CFG_ID_PON_STATUS }, { .name = "available_bandwidth", .val = BCMOLT_GPON_NI_CFG_ID_AVAILABLE_BANDWIDTH }, { .name = "number_of_active_onus", .val = BCMOLT_GPON_NI_CFG_ID_NUMBER_OF_ACTIVE_ONUS }, { .name = "number_of_active_standby_onus", .val = BCMOLT_GPON_NI_CFG_ID_NUMBER_OF_ACTIVE_STANDBY_ONUS }, { .name = "prbs_status", .val = BCMOLT_GPON_NI_CFG_ID_PRBS_STATUS }, { .name = "pon_distance", .val = BCMOLT_GPON_NI_CFG_ID_PON_DISTANCE }, { .name = "ranging_window_size", .val = BCMOLT_GPON_NI_CFG_ID_RANGING_WINDOW_SIZE }, { .name = "preassigned_equalization_delay", .val = BCMOLT_GPON_NI_CFG_ID_PREASSIGNED_EQUALIZATION_DELAY }, { .name = "eqd_cycles_number", .val = BCMOLT_GPON_NI_CFG_ID_EQD_CYCLES_NUMBER }, { .name = "power_level", .val = BCMOLT_GPON_NI_CFG_ID_POWER_LEVEL }, { .name = "ds_fec_mode", .val = BCMOLT_GPON_NI_CFG_ID_DS_FEC_MODE }, { .name = "drift_control", .val = BCMOLT_GPON_NI_CFG_ID_DRIFT_CONTROL }, { .name = "ds_ber_reporting_interval", .val = BCMOLT_GPON_NI_CFG_ID_DS_BER_REPORTING_INTERVAL }, { .name = "los_alarm_threshold", .val = BCMOLT_GPON_NI_CFG_ID_LOS_ALARM_THRESHOLD }, { .name = "los_initial_value", .val = BCMOLT_GPON_NI_CFG_ID_LOS_INITIAL_VALUE }, { .name = "onu_alarms_thresholds", .val = BCMOLT_GPON_NI_CFG_ID_ONU_ALARMS_THRESHOLDS }, { .name = "ber_monitor", .val = BCMOLT_GPON_NI_CFG_ID_BER_MONITOR }, { .name = "ploam_ack_timeout", .val = BCMOLT_GPON_NI_CFG_ID_PLOAM_ACK_TIMEOUT }, { .name = "onu_activation", .val = BCMOLT_GPON_NI_CFG_ID_ONU_ACTIVATION }, { .name = "sn_acquisition", .val = BCMOLT_GPON_NI_CFG_ID_SN_ACQUISITION }, { .name = "key_exchange", .val = BCMOLT_GPON_NI_CFG_ID_KEY_EXCHANGE }, { .name = "protection_switching", .val = BCMOLT_GPON_NI_CFG_ID_PROTECTION_SWITCHING }, { .name = "cbr_rt_allocation_profile", .val = BCMOLT_GPON_NI_CFG_ID_CBR_RT_ALLOCATION_PROFILE }, { .name = "cbr_nrt_allocation_profile", .val = BCMOLT_GPON_NI_CFG_ID_CBR_NRT_ALLOCATION_PROFILE }, { .name = "dba", .val = BCMOLT_GPON_NI_CFG_ID_DBA }, { .name = "power_management", .val = BCMOLT_GPON_NI_CFG_ID_POWER_MANAGEMENT }, { .name = "rogue_onu_detection_process", .val = BCMOLT_GPON_NI_CFG_ID_ROGUE_ONU_DETECTION_PROCESS }, { .name = "periodic_standby_pon_monitoring", .val = BCMOLT_GPON_NI_CFG_ID_PERIODIC_STANDBY_PON_MONITORING }, { .name = "prbs_checker", .val = BCMOLT_GPON_NI_CFG_ID_PRBS_CHECKER }, { .name = "prbs_generator", .val = BCMOLT_GPON_NI_CFG_ID_PRBS_GENERATOR }, { .name = "min_data_alloc_id", .val = BCMOLT_GPON_NI_CFG_ID_MIN_DATA_ALLOC_ID }, { .name = "automatic_onu_deactivation", .val = BCMOLT_GPON_NI_CFG_ID_AUTOMATIC_ONU_DEACTIVATION }, { .name = "us_bandwidth_limit", .val = BCMOLT_GPON_NI_CFG_ID_US_BANDWIDTH_LIMIT }, { .name = "all_onus", .val = BCMOLT_GPON_NI_CFG_ID_ALL_ONUS }, { .name = "all_mcast_gem_ports", .val = BCMOLT_GPON_NI_CFG_ID_ALL_MCAST_GEM_PORTS }, { .name = "debug", .val = BCMOLT_GPON_NI_CFG_ID_DEBUG }, { .name = "onu_upgrade_params", .val = BCMOLT_GPON_NI_CFG_ID_ONU_UPGRADE_PARAMS }, { .name = "ps_c_wait_before_deactivation_timeout", .val = BCMOLT_GPON_NI_CFG_ID_PS_C_WAIT_BEFORE_DEACTIVATION_TIMEOUT }, { .name = "bip32_indication_control", .val = BCMOLT_GPON_NI_CFG_ID_BIP32_INDICATION_CONTROL }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_cfg_id = { .name = "bcmolt_gpon_ni_cfg_id", .descr = "Identifiers for all properties contained in the gpon_ni_cfg group.", .size = sizeof(bcmolt_gpon_ni_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_ni_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_ni_cpu_packets_failure_id_string_table[] = { { .name = "error", .val = BCMOLT_GPON_NI_CPU_PACKETS_FAILURE_ID_ERROR }, { .name = "gem_port_id", .val = BCMOLT_GPON_NI_CPU_PACKETS_FAILURE_ID_GEM_PORT_ID }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_cpu_packets_failure_id = { .name = "bcmolt_gpon_ni_cpu_packets_failure_id", .descr = "Identifiers for all properties contained in the gpon_ni_cpu_packets_failure group.", .size = sizeof(bcmolt_gpon_ni_cpu_packets_failure_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_ni_cpu_packets_failure_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_ni_cpu_packets_id_string_table[] = { { .name = "packet_type", .val = BCMOLT_GPON_NI_CPU_PACKETS_ID_PACKET_TYPE }, { .name = "calc_crc", .val = BCMOLT_GPON_NI_CPU_PACKETS_ID_CALC_CRC }, { .name = "gem_port_list", .val = BCMOLT_GPON_NI_CPU_PACKETS_ID_GEM_PORT_LIST }, { .name = "buffer", .val = BCMOLT_GPON_NI_CPU_PACKETS_ID_BUFFER }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_cpu_packets_id = { .name = "bcmolt_gpon_ni_cpu_packets_id", .descr = "Identifiers for all properties contained in the gpon_ni_cpu_packets group.", .size = sizeof(bcmolt_gpon_ni_cpu_packets_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_ni_cpu_packets_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_ni_deactivate_all_onus_completed_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_deactivate_all_onus_completed_id = { .name = "bcmolt_gpon_ni_deactivate_all_onus_completed_id", .descr = "Identifiers for all properties contained in the gpon_ni_deactivate_all_onus_completed group.", .size = sizeof(bcmolt_gpon_ni_deactivate_all_onus_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_ni_deactivate_all_onus_completed_id_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_ni_debug_fields[] = { { .name = "number_of_gem_ports_per_onu", .descr = "Number of Gem ports per ONU", .offset = offsetof(bcmolt_gpon_ni_debug, number_of_gem_ports_per_onu), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_debug = { .name = "bcmolt_gpon_ni_debug", .descr = "GPON NI Debug parameters", .size = sizeof(bcmolt_gpon_ni_debug), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_ni_debug_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_ni_debug_fields } } };
+bcmcli_enum_val bcmolt_gpon_ni_disable_all_onus_completed_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_disable_all_onus_completed_id = { .name = "bcmolt_gpon_ni_disable_all_onus_completed_id", .descr = "Identifiers for all properties contained in the gpon_ni_disable_all_onus_completed group.", .size = sizeof(bcmolt_gpon_ni_disable_all_onus_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_ni_disable_all_onus_completed_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_ni_disable_serial_number_id_string_table[] = { { .name = "control", .val = BCMOLT_GPON_NI_DISABLE_SERIAL_NUMBER_ID_CONTROL }, { .name = "serial_number", .val = BCMOLT_GPON_NI_DISABLE_SERIAL_NUMBER_ID_SERIAL_NUMBER }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_disable_serial_number_id = { .name = "bcmolt_gpon_ni_disable_serial_number_id", .descr = "Identifiers for all properties contained in the gpon_ni_disable_serial_number group.", .size = sizeof(bcmolt_gpon_ni_disable_serial_number_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_ni_disable_serial_number_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_ni_enable_all_onus_completed_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_enable_all_onus_completed_id = { .name = "bcmolt_gpon_ni_enable_all_onus_completed_id", .descr = "Identifiers for all properties contained in the gpon_ni_enable_all_onus_completed group.", .size = sizeof(bcmolt_gpon_ni_enable_all_onus_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_ni_enable_all_onus_completed_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_ni_key_id_string_table[] = { { .name = "pon_ni", .val = BCMOLT_GPON_NI_KEY_ID_PON_NI }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_key_id = { .name = "bcmolt_gpon_ni_key_id", .descr = "Identifiers for all properties contained in the gpon_ni_key group.", .size = sizeof(bcmolt_gpon_ni_key_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_ni_key_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_ni_los_id_string_table[] = { { .name = "status", .val = BCMOLT_GPON_NI_LOS_ID_STATUS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_los_id = { .name = "bcmolt_gpon_ni_los_id", .descr = "Identifiers for all properties contained in the gpon_ni_los group.", .size = sizeof(bcmolt_gpon_ni_los_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_ni_los_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_ni_onu_discovered_id_string_table[] = { { .name = "serial_number", .val = BCMOLT_GPON_NI_ONU_DISCOVERED_ID_SERIAL_NUMBER }, { .name = "ranging_time", .val = BCMOLT_GPON_NI_ONU_DISCOVERED_ID_RANGING_TIME }, { .name = "onu_id", .val = BCMOLT_GPON_NI_ONU_DISCOVERED_ID_ONU_ID }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_onu_discovered_id = { .name = "bcmolt_gpon_ni_onu_discovered_id", .descr = "Identifiers for all properties contained in the gpon_ni_onu_discovered group.", .size = sizeof(bcmolt_gpon_ni_onu_discovered_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_ni_onu_discovered_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_ni_onu_upgrade_complete_id_string_table[] = { { .name = "status", .val = BCMOLT_GPON_NI_ONU_UPGRADE_COMPLETE_ID_STATUS }, { .name = "list_of_failed_entities", .val = BCMOLT_GPON_NI_ONU_UPGRADE_COMPLETE_ID_LIST_OF_FAILED_ENTITIES }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_onu_upgrade_complete_id = { .name = "bcmolt_gpon_ni_onu_upgrade_complete_id", .descr = "Identifiers for all properties contained in the gpon_ni_onu_upgrade_complete group.", .size = sizeof(bcmolt_gpon_ni_onu_upgrade_complete_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_ni_onu_upgrade_complete_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_ni_protection_switching_onus_ranged_id_string_table[] = { { .name = "onus", .val = BCMOLT_GPON_NI_PROTECTION_SWITCHING_ONUS_RANGED_ID_ONUS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_protection_switching_onus_ranged_id = { .name = "bcmolt_gpon_ni_protection_switching_onus_ranged_id", .descr = "Identifiers for all properties contained in the gpon_ni_protection_switching_onus_ranged group.", .size = sizeof(bcmolt_gpon_ni_protection_switching_onus_ranged_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_ni_protection_switching_onus_ranged_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_ni_protection_switching_switchover_completed_id_string_table[] = { { .name = "result", .val = BCMOLT_GPON_NI_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED_ID_RESULT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_protection_switching_switchover_completed_id = { .name = "bcmolt_gpon_ni_protection_switching_switchover_completed_id", .descr = "Identifiers for all properties contained in the gpon_ni_protection_switching_switchover_completed group.", .size = sizeof(bcmolt_gpon_ni_protection_switching_switchover_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_ni_protection_switching_switchover_completed_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_ni_protection_switching_traffic_resume_id_string_table[] = { { .name = "result", .val = BCMOLT_GPON_NI_PROTECTION_SWITCHING_TRAFFIC_RESUME_ID_RESULT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_protection_switching_traffic_resume_id = { .name = "bcmolt_gpon_ni_protection_switching_traffic_resume_id", .descr = "Identifiers for all properties contained in the gpon_ni_protection_switching_traffic_resume group.", .size = sizeof(bcmolt_gpon_ni_protection_switching_traffic_resume_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_ni_protection_switching_traffic_resume_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_id_string_table[] = { { .name = "onu_state", .val = BCMOLT_GPON_NI_PROTECTION_SWITCHING_TYPE_C_SET_MULTIPLE_ONU_STATE_ID_ONU_STATE }, { .name = "onu_list", .val = BCMOLT_GPON_NI_PROTECTION_SWITCHING_TYPE_C_SET_MULTIPLE_ONU_STATE_ID_ONU_LIST }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_id = { .name = "bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_id", .descr = "Identifiers for all properties contained in the gpon_ni_protection_switching_type_c_set_multiple_onu_state group.", .size = sizeof(bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_ni_reset_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_reset_id = { .name = "bcmolt_gpon_ni_reset_id", .descr = "Identifiers for all properties contained in the gpon_ni_reset group.", .size = sizeof(bcmolt_gpon_ni_reset_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_ni_reset_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_ni_rogue_detection_completed_id_string_table[] = { { .name = "window_type", .val = BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_WINDOW_TYPE }, { .name = "measurement_status", .val = BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_MEASUREMENT_STATUS }, { .name = "alloc_id", .val = BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_ALLOC_ID }, { .name = "onu_id", .val = BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_ONU_ID }, { .name = "is_delineation", .val = BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_IS_DELINEATION }, { .name = "is_ed", .val = BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_IS_ED }, { .name = "rx_data", .val = BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_RX_DATA }, { .name = "ploam_received_onu_id", .val = BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_PLOAM_RECEIVED_ONU_ID }, { .name = "ploam_received_crc_error", .val = BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_PLOAM_RECEIVED_CRC_ERROR }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_rogue_detection_completed_id = { .name = "bcmolt_gpon_ni_rogue_detection_completed_id", .descr = "Identifiers for all properties contained in the gpon_ni_rogue_detection_completed group.", .size = sizeof(bcmolt_gpon_ni_rogue_detection_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_ni_rogue_detection_completed_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_ni_rogue_detection_window_id_string_table[] = { { .name = "window_type", .val = BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_WINDOW_TYPE }, { .name = "alloc_id", .val = BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_ALLOC_ID }, { .name = "onu_id", .val = BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_ONU_ID }, { .name = "second_ranging_window", .val = BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_SECOND_RANGING_WINDOW }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_rogue_detection_window_id = { .name = "bcmolt_gpon_ni_rogue_detection_window_id", .descr = "Identifiers for all properties contained in the gpon_ni_rogue_detection_window group.", .size = sizeof(bcmolt_gpon_ni_rogue_detection_window_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_ni_rogue_detection_window_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_ni_rogue_onu_special_map_cycle_start_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_rogue_onu_special_map_cycle_start_id = { .name = "bcmolt_gpon_ni_rogue_onu_special_map_cycle_start_id", .descr = "Identifiers for all properties contained in the gpon_ni_rogue_onu_special_map_cycle_start group.", .size = sizeof(bcmolt_gpon_ni_rogue_onu_special_map_cycle_start_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_ni_rogue_onu_special_map_cycle_start_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_ni_serial_number_acquisition_cycle_start_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_serial_number_acquisition_cycle_start_id = { .name = "bcmolt_gpon_ni_serial_number_acquisition_cycle_start_id", .descr = "Identifiers for all properties contained in the gpon_ni_serial_number_acquisition_cycle_start group.", .size = sizeof(bcmolt_gpon_ni_serial_number_acquisition_cycle_start_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_ni_serial_number_acquisition_cycle_start_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_ni_set_onu_state_id_string_table[] = { { .name = "onu_state", .val = BCMOLT_GPON_NI_SET_ONU_STATE_ID_ONU_STATE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_set_onu_state_id = { .name = "bcmolt_gpon_ni_set_onu_state_id", .descr = "Identifiers for all properties contained in the gpon_ni_set_onu_state group.", .size = sizeof(bcmolt_gpon_ni_set_onu_state_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_ni_set_onu_state_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_ni_set_pon_state_id_string_table[] = { { .name = "pon_state", .val = BCMOLT_GPON_NI_SET_PON_STATE_ID_PON_STATE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_set_pon_state_id = { .name = "bcmolt_gpon_ni_set_pon_state_id", .descr = "Identifiers for all properties contained in the gpon_ni_set_pon_state group.", .size = sizeof(bcmolt_gpon_ni_set_pon_state_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_ni_set_pon_state_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_ni_single_request_standby_pon_monitoring_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_single_request_standby_pon_monitoring_id = { .name = "bcmolt_gpon_ni_single_request_standby_pon_monitoring_id", .descr = "Identifiers for all properties contained in the gpon_ni_single_request_standby_pon_monitoring group.", .size = sizeof(bcmolt_gpon_ni_single_request_standby_pon_monitoring_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_ni_single_request_standby_pon_monitoring_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_id_string_table[] = { { .name = "number_of_detected_delimiter", .val = BCMOLT_GPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID_NUMBER_OF_DETECTED_DELIMITER }, { .name = "energy_detect_signal", .val = BCMOLT_GPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID_ENERGY_DETECT_SIGNAL }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_id = { .name = "bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_id", .descr = "Identifiers for all properties contained in the gpon_ni_standby_pon_monitoring_cycle_completed group.", .size = sizeof(bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_ni_start_onu_upgrade_id_string_table[] = { { .name = "list_of_onu_ids", .val = BCMOLT_GPON_NI_START_ONU_UPGRADE_ID_LIST_OF_ONU_IDS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_start_onu_upgrade_id = { .name = "bcmolt_gpon_ni_start_onu_upgrade_id", .descr = "Identifiers for all properties contained in the gpon_ni_start_onu_upgrade group.", .size = sizeof(bcmolt_gpon_ni_start_onu_upgrade_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_ni_start_onu_upgrade_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_ni_stat_alarm_cleared_id_string_table[] = { { .name = "stat", .val = BCMOLT_GPON_NI_STAT_ALARM_CLEARED_ID_STAT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_stat_alarm_cleared_id = { .name = "bcmolt_gpon_ni_stat_alarm_cleared_id", .descr = "Identifiers for all properties contained in the gpon_ni_stat_alarm_cleared group.", .size = sizeof(bcmolt_gpon_ni_stat_alarm_cleared_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_ni_stat_alarm_cleared_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_ni_stat_alarm_raised_id_string_table[] = { { .name = "stat", .val = BCMOLT_GPON_NI_STAT_ALARM_RAISED_ID_STAT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_stat_alarm_raised_id = { .name = "bcmolt_gpon_ni_stat_alarm_raised_id", .descr = "Identifiers for all properties contained in the gpon_ni_stat_alarm_raised group.", .size = sizeof(bcmolt_gpon_ni_stat_alarm_raised_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_ni_stat_alarm_raised_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_ni_stat_cfg_id_string_table[] = { { .name = "cfg", .val = BCMOLT_GPON_NI_STAT_CFG_ID_CFG }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_stat_cfg_id = { .name = "bcmolt_gpon_ni_stat_cfg_id", .descr = "Identifiers for all properties contained in the gpon_ni_stat_cfg group.", .size = sizeof(bcmolt_gpon_ni_stat_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_ni_stat_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_ni_stat_id_string_table[] = { { .name = "fec_codewords", .val = BCMOLT_GPON_NI_STAT_ID_FEC_CODEWORDS }, { .name = "fec_codewords_uncorrected", .val = BCMOLT_GPON_NI_STAT_ID_FEC_CODEWORDS_UNCORRECTED }, { .name = "bip8_bytes", .val = BCMOLT_GPON_NI_STAT_ID_BIP8_BYTES }, { .name = "bip8_errors", .val = BCMOLT_GPON_NI_STAT_ID_BIP8_ERRORS }, { .name = "rx_gem_packets", .val = BCMOLT_GPON_NI_STAT_ID_RX_GEM_PACKETS }, { .name = "rx_gem_dropped", .val = BCMOLT_GPON_NI_STAT_ID_RX_GEM_DROPPED }, { .name = "rx_gem_idle", .val = BCMOLT_GPON_NI_STAT_ID_RX_GEM_IDLE }, { .name = "rx_gem_corrected", .val = BCMOLT_GPON_NI_STAT_ID_RX_GEM_CORRECTED }, { .name = "rx_gem_illegal", .val = BCMOLT_GPON_NI_STAT_ID_RX_GEM_ILLEGAL }, { .name = "rx_allocations_valid", .val = BCMOLT_GPON_NI_STAT_ID_RX_ALLOCATIONS_VALID }, { .name = "rx_allocations_invalid", .val = BCMOLT_GPON_NI_STAT_ID_RX_ALLOCATIONS_INVALID }, { .name = "rx_allocations_disabled", .val = BCMOLT_GPON_NI_STAT_ID_RX_ALLOCATIONS_DISABLED }, { .name = "rx_ploams", .val = BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS }, { .name = "rx_ploams_non_idle", .val = BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS_NON_IDLE }, { .name = "rx_ploams_error", .val = BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS_ERROR }, { .name = "rx_ploams_dropped", .val = BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS_DROPPED }, { .name = "rx_cpu", .val = BCMOLT_GPON_NI_STAT_ID_RX_CPU }, { .name = "rx_omci", .val = BCMOLT_GPON_NI_STAT_ID_RX_OMCI }, { .name = "rx_omci_packets_crc_error", .val = BCMOLT_GPON_NI_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR }, { .name = "rx_dropped_too_short", .val = BCMOLT_GPON_NI_STAT_ID_RX_DROPPED_TOO_SHORT }, { .name = "rx_dropped_too_long", .val = BCMOLT_GPON_NI_STAT_ID_RX_DROPPED_TOO_LONG }, { .name = "rx_crc_errors", .val = BCMOLT_GPON_NI_STAT_ID_RX_CRC_ERRORS }, { .name = "rx_key_errors", .val = BCMOLT_GPON_NI_STAT_ID_RX_KEY_ERRORS }, { .name = "rx_fragments_errors", .val = BCMOLT_GPON_NI_STAT_ID_RX_FRAGMENTS_ERRORS }, { .name = "rx_packets_dropped", .val = BCMOLT_GPON_NI_STAT_ID_RX_PACKETS_DROPPED }, { .name = "tx_gem", .val = BCMOLT_GPON_NI_STAT_ID_TX_GEM }, { .name = "tx_ploams", .val = BCMOLT_GPON_NI_STAT_ID_TX_PLOAMS }, { .name = "tx_gem_fragments", .val = BCMOLT_GPON_NI_STAT_ID_TX_GEM_FRAGMENTS }, { .name = "tx_cpu", .val = BCMOLT_GPON_NI_STAT_ID_TX_CPU }, { .name = "tx_omci", .val = BCMOLT_GPON_NI_STAT_ID_TX_OMCI }, { .name = "tx_cpu_omci_packets_dropped", .val = BCMOLT_GPON_NI_STAT_ID_TX_CPU_OMCI_PACKETS_DROPPED }, { .name = "tx_dropped_illegal_length", .val = BCMOLT_GPON_NI_STAT_ID_TX_DROPPED_ILLEGAL_LENGTH }, { .name = "tx_dropped_tpid_miss", .val = BCMOLT_GPON_NI_STAT_ID_TX_DROPPED_TPID_MISS }, { .name = "tx_dropped_vid_miss", .val = BCMOLT_GPON_NI_STAT_ID_TX_DROPPED_VID_MISS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_stat_id = { .name = "bcmolt_gpon_ni_stat_id", .descr = "Identifiers for all properties contained in the gpon_ni_stat group.", .size = sizeof(bcmolt_gpon_ni_stat_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_ni_stat_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_ni_state_change_completed_id_string_table[] = { { .name = "result", .val = BCMOLT_GPON_NI_STATE_CHANGE_COMPLETED_ID_RESULT }, { .name = "previous_state", .val = BCMOLT_GPON_NI_STATE_CHANGE_COMPLETED_ID_PREVIOUS_STATE }, { .name = "new_state", .val = BCMOLT_GPON_NI_STATE_CHANGE_COMPLETED_ID_NEW_STATE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_state_change_completed_id = { .name = "bcmolt_gpon_ni_state_change_completed_id", .descr = "Identifiers for all properties contained in the gpon_ni_state_change_completed group.", .size = sizeof(bcmolt_gpon_ni_state_change_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_ni_state_change_completed_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_ni_tod_request_completed_id_string_table[] = { { .name = "tod_string", .val = BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_TOD_STRING }, { .name = "sfc", .val = BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_SFC }, { .name = "rtc_offset_sec", .val = BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_RTC_OFFSET_SEC }, { .name = "rtc_offset_nsec", .val = BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_RTC_OFFSET_NSEC }, { .name = "status", .val = BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_STATUS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_tod_request_completed_id = { .name = "bcmolt_gpon_ni_tod_request_completed_id", .descr = "Identifiers for all properties contained in the gpon_ni_tod_request_completed group.", .size = sizeof(bcmolt_gpon_ni_tod_request_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_ni_tod_request_completed_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_ni_tod_request_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_tod_request_id = { .name = "bcmolt_gpon_ni_tod_request_id", .descr = "Identifiers for all properties contained in the gpon_ni_tod_request group.", .size = sizeof(bcmolt_gpon_ni_tod_request_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_ni_tod_request_id_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_activation_fields[] = { { .name = "key_exchange", .descr = "Perform single key exchange during activation.", .offset = offsetof(bcmolt_gpon_onu_activation, key_exchange), .type = &type_descr_bcmolt_control_state }, { .name = "password_authentication", .descr = "Perform password authentication during activation", .offset = offsetof(bcmolt_gpon_onu_activation, password_authentication), .type = &type_descr_bcmolt_control_state }, { .name = "fail_due_to_password_authentication_failure", .descr = "Deactivate ONU due to password authentication failure", .offset = offsetof(bcmolt_gpon_onu_activation, fail_due_to_password_authentication_failure), .type = &type_descr_bcmolt_control_state } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_activation = { .name = "bcmolt_gpon_onu_activation", .descr = "GPON ONU activation", .size = sizeof(bcmolt_gpon_onu_activation), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_activation_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_activation_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_alarm_state_fields[] = { { .name = "losi", .descr = "Loss of signal", .offset = offsetof(bcmolt_gpon_onu_alarm_state, losi), .type = &type_descr_bcmolt_status }, { .name = "lofi", .descr = "Loss of frame", .offset = offsetof(bcmolt_gpon_onu_alarm_state, lofi), .type = &type_descr_bcmolt_status }, { .name = "loami", .descr = "Loss of PLOAM", .offset = offsetof(bcmolt_gpon_onu_alarm_state, loami), .type = &type_descr_bcmolt_status }, { .name = "dgi", .descr = "Dying Gasp", .offset = offsetof(bcmolt_gpon_onu_alarm_state, dgi), .type = &type_descr_bcmolt_status }, { .name = "tiwi", .descr = "Transmission interference Alarm", .offset = offsetof(bcmolt_gpon_onu_alarm_state, tiwi), .type = &type_descr_bcmolt_status }, { .name = "dowi", .descr = "Drift of Window", .offset = offsetof(bcmolt_gpon_onu_alarm_state, dowi), .type = &type_descr_bcmolt_status }, { .name = "sufi", .descr = "Start UP Failure", .offset = offsetof(bcmolt_gpon_onu_alarm_state, sufi), .type = &type_descr_bcmolt_status }, { .name = "sfi", .descr = "Signal Fail", .offset = offsetof(bcmolt_gpon_onu_alarm_state, sfi), .type = &type_descr_bcmolt_status }, { .name = "sdi", .descr = "Signal Degraded", .offset = offsetof(bcmolt_gpon_onu_alarm_state, sdi), .type = &type_descr_bcmolt_status }, { .name = "dfi", .descr = "Deactivation Failure", .offset = offsetof(bcmolt_gpon_onu_alarm_state, dfi), .type = &type_descr_bcmolt_status }, { .name = "loai", .descr = "Loss of ack", .offset = offsetof(bcmolt_gpon_onu_alarm_state, loai), .type = &type_descr_bcmolt_status }, { .name = "loki", .descr = "loss of key", .offset = offsetof(bcmolt_gpon_onu_alarm_state, loki), .type = &type_descr_bcmolt_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_alarm_state = { .name = "bcmolt_gpon_onu_alarm_state", .descr = "GPON ONU alarm status", .size = sizeof(bcmolt_gpon_onu_alarm_state), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_alarm_state_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_alarm_state_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_alarms_fields[] = { { .name = "losi", .descr = "LOSi", .offset = offsetof(bcmolt_gpon_onu_alarms, losi), .type = &type_descr_bcmolt_status }, { .name = "lofi", .descr = "LOFi", .offset = offsetof(bcmolt_gpon_onu_alarms, lofi), .type = &type_descr_bcmolt_status }, { .name = "loami", .descr = "LOAMi", .offset = offsetof(bcmolt_gpon_onu_alarms, loami), .type = &type_descr_bcmolt_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_alarms = { .name = "bcmolt_gpon_onu_alarms", .descr = "GPON ONU alarms", .size = sizeof(bcmolt_gpon_onu_alarms), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_alarms_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_alarms_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_alarms_thresholds_fields[] = { { .name = "losi", .descr = "Threshold for asserting LOSi alarm", .offset = offsetof(bcmolt_gpon_onu_alarms_thresholds, losi), .type = &type_descr_uint8_t }, { .name = "lofi", .descr = "Threshold for asserting LOFi alarm", .offset = offsetof(bcmolt_gpon_onu_alarms_thresholds, lofi), .type = &type_descr_uint8_t }, { .name = "loami", .descr = "Threshold for asserting LOAMi alarm", .offset = offsetof(bcmolt_gpon_onu_alarms_thresholds, loami), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_alarms_thresholds = { .name = "bcmolt_gpon_onu_alarms_thresholds", .descr = "GPON ONU alarms thresholds", .size = sizeof(bcmolt_gpon_onu_alarms_thresholds), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_alarms_thresholds_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_alarms_thresholds_fields } } };
+bcmcli_enum_val bcmolt_gpon_onu_auto_cfg_id_string_table[] = { { .name = "ber_interval_configuration_completed", .val = BCMOLT_GPON_ONU_AUTO_CFG_ID_BER_INTERVAL_CONFIGURATION_COMPLETED }, { .name = "dfi", .val = BCMOLT_GPON_ONU_AUTO_CFG_ID_DFI }, { .name = "dgi", .val = BCMOLT_GPON_ONU_AUTO_CFG_ID_DGI }, { .name = "dowi", .val = BCMOLT_GPON_ONU_AUTO_CFG_ID_DOWI }, { .name = "err", .val = BCMOLT_GPON_ONU_AUTO_CFG_ID_ERR }, { .name = "invalid_dbru_report", .val = BCMOLT_GPON_ONU_AUTO_CFG_ID_INVALID_DBRU_REPORT }, { .name = "key_exchange_completed", .val = BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_COMPLETED }, { .name = "key_exchange_cycle_skipped", .val = BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_CYCLE_SKIPPED }, { .name = "key_exchange_decrypt_required", .val = BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_DECRYPT_REQUIRED }, { .name = "key_exchange_key_mismatch", .val = BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_KEY_MISMATCH }, { .name = "key_exchange_key_request_timeout", .val = BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_KEY_REQUEST_TIMEOUT }, { .name = "key_exchange_unconsecutive_index", .val = BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_UNCONSECUTIVE_INDEX }, { .name = "loai", .val = BCMOLT_GPON_ONU_AUTO_CFG_ID_LOAI }, { .name = "loki", .val = BCMOLT_GPON_ONU_AUTO_CFG_ID_LOKI }, { .name = "memi", .val = BCMOLT_GPON_ONU_AUTO_CFG_ID_MEMI }, { .name = "omci_port_id_configuration_completed", .val = BCMOLT_GPON_ONU_AUTO_CFG_ID_OMCI_PORT_ID_CONFIGURATION_COMPLETED }, { .name = "onu_activation_completed", .val = BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_ACTIVATION_COMPLETED }, { .name = "onu_activation_standby_completed", .val = BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_ACTIVATION_STANDBY_COMPLETED }, { .name = "onu_alarm", .val = BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_ALARM }, { .name = "onu_deactivation_completed", .val = BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_DEACTIVATION_COMPLETED }, { .name = "onu_disable_completed", .val = BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_DISABLE_COMPLETED }, { .name = "onu_enable_completed", .val = BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_ENABLE_COMPLETED }, { .name = "optical_reflection", .val = BCMOLT_GPON_ONU_AUTO_CFG_ID_OPTICAL_REFLECTION }, { .name = "password_authentication_completed", .val = BCMOLT_GPON_ONU_AUTO_CFG_ID_PASSWORD_AUTHENTICATION_COMPLETED }, { .name = "pee", .val = BCMOLT_GPON_ONU_AUTO_CFG_ID_PEE }, { .name = "possible_drift", .val = BCMOLT_GPON_ONU_AUTO_CFG_ID_POSSIBLE_DRIFT }, { .name = "power_management_state_change", .val = BCMOLT_GPON_ONU_AUTO_CFG_ID_POWER_MANAGEMENT_STATE_CHANGE }, { .name = "pst", .val = BCMOLT_GPON_ONU_AUTO_CFG_ID_PST }, { .name = "ranging_completed", .val = BCMOLT_GPON_ONU_AUTO_CFG_ID_RANGING_COMPLETED }, { .name = "rei", .val = BCMOLT_GPON_ONU_AUTO_CFG_ID_REI }, { .name = "rssi_measurement_completed", .val = BCMOLT_GPON_ONU_AUTO_CFG_ID_RSSI_MEASUREMENT_COMPLETED }, { .name = "sdi", .val = BCMOLT_GPON_ONU_AUTO_CFG_ID_SDI }, { .name = "sfi", .val = BCMOLT_GPON_ONU_AUTO_CFG_ID_SFI }, { .name = "stat_alarm_cleared", .val = BCMOLT_GPON_ONU_AUTO_CFG_ID_STAT_ALARM_CLEARED }, { .name = "stat_alarm_raised", .val = BCMOLT_GPON_ONU_AUTO_CFG_ID_STAT_ALARM_RAISED }, { .name = "sufi", .val = BCMOLT_GPON_ONU_AUTO_CFG_ID_SUFI }, { .name = "tiwi", .val = BCMOLT_GPON_ONU_AUTO_CFG_ID_TIWI }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_auto_cfg_id = { .name = "bcmolt_gpon_onu_auto_cfg_id", .descr = "Identifiers for all properties contained in the gpon_onu_auto_cfg group.", .size = sizeof(bcmolt_gpon_onu_auto_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_auto_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_ber_interval_configuration_completed_id_string_table[] = { { .name = "ber_interval", .val = BCMOLT_GPON_ONU_BER_INTERVAL_CONFIGURATION_COMPLETED_ID_BER_INTERVAL }, { .name = "result", .val = BCMOLT_GPON_ONU_BER_INTERVAL_CONFIGURATION_COMPLETED_ID_RESULT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_ber_interval_configuration_completed_id = { .name = "bcmolt_gpon_onu_ber_interval_configuration_completed_id", .descr = "Identifiers for all properties contained in the gpon_onu_ber_interval_configuration_completed group.", .size = sizeof(bcmolt_gpon_onu_ber_interval_configuration_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_ber_interval_configuration_completed_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_cfg_id_string_table[] = { { .name = "onu_state", .val = BCMOLT_GPON_ONU_CFG_ID_ONU_STATE }, { .name = "serial_number", .val = BCMOLT_GPON_ONU_CFG_ID_SERIAL_NUMBER }, { .name = "password", .val = BCMOLT_GPON_ONU_CFG_ID_PASSWORD }, { .name = "auto_password_learning", .val = BCMOLT_GPON_ONU_CFG_ID_AUTO_PASSWORD_LEARNING }, { .name = "us_fec", .val = BCMOLT_GPON_ONU_CFG_ID_US_FEC }, { .name = "omci_port_id", .val = BCMOLT_GPON_ONU_CFG_ID_OMCI_PORT_ID }, { .name = "ds_ber_reporting_interval", .val = BCMOLT_GPON_ONU_CFG_ID_DS_BER_REPORTING_INTERVAL }, { .name = "aes_encryption_key", .val = BCMOLT_GPON_ONU_CFG_ID_AES_ENCRYPTION_KEY }, { .name = "alarm_state", .val = BCMOLT_GPON_ONU_CFG_ID_ALARM_STATE }, { .name = "ranging_time", .val = BCMOLT_GPON_ONU_CFG_ID_RANGING_TIME }, { .name = "disabled_after_discovery", .val = BCMOLT_GPON_ONU_CFG_ID_DISABLED_AFTER_DISCOVERY }, { .name = "deactivation_reason", .val = BCMOLT_GPON_ONU_CFG_ID_DEACTIVATION_REASON }, { .name = "all_gem_ports", .val = BCMOLT_GPON_ONU_CFG_ID_ALL_GEM_PORTS }, { .name = "all_allocs", .val = BCMOLT_GPON_ONU_CFG_ID_ALL_ALLOCS }, { .name = "onu_ps_type_c", .val = BCMOLT_GPON_ONU_CFG_ID_ONU_PS_TYPE_C }, { .name = "extended_guard_time", .val = BCMOLT_GPON_ONU_CFG_ID_EXTENDED_GUARD_TIME }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_cfg_id = { .name = "bcmolt_gpon_onu_cfg_id", .descr = "Identifiers for all properties contained in the gpon_onu_cfg group.", .size = sizeof(bcmolt_gpon_onu_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_change_power_level_id_string_table[] = { { .name = "power_level_action", .val = BCMOLT_GPON_ONU_CHANGE_POWER_LEVEL_ID_POWER_LEVEL_ACTION }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_change_power_level_id = { .name = "bcmolt_gpon_onu_change_power_level_id", .descr = "Identifiers for all properties contained in the gpon_onu_change_power_level group.", .size = sizeof(bcmolt_gpon_onu_change_power_level_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_change_power_level_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_cpu_packet_id_string_table[] = { { .name = "port_id", .val = BCMOLT_GPON_ONU_CPU_PACKET_ID_PORT_ID }, { .name = "crc_ok", .val = BCMOLT_GPON_ONU_CPU_PACKET_ID_CRC_OK }, { .name = "packet_size", .val = BCMOLT_GPON_ONU_CPU_PACKET_ID_PACKET_SIZE }, { .name = "buffer", .val = BCMOLT_GPON_ONU_CPU_PACKET_ID_BUFFER }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_cpu_packet_id = { .name = "bcmolt_gpon_onu_cpu_packet_id", .descr = "Identifiers for all properties contained in the gpon_onu_cpu_packet group.", .size = sizeof(bcmolt_gpon_onu_cpu_packet_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_cpu_packet_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_cpu_packets_id_string_table[] = { { .name = "packet_type", .val = BCMOLT_GPON_ONU_CPU_PACKETS_ID_PACKET_TYPE }, { .name = "calc_crc", .val = BCMOLT_GPON_ONU_CPU_PACKETS_ID_CALC_CRC }, { .name = "number_of_packets", .val = BCMOLT_GPON_ONU_CPU_PACKETS_ID_NUMBER_OF_PACKETS }, { .name = "packet_size", .val = BCMOLT_GPON_ONU_CPU_PACKETS_ID_PACKET_SIZE }, { .name = "buffer", .val = BCMOLT_GPON_ONU_CPU_PACKETS_ID_BUFFER }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_cpu_packets_id = { .name = "bcmolt_gpon_onu_cpu_packets_id", .descr = "Identifiers for all properties contained in the gpon_onu_cpu_packets group.", .size = sizeof(bcmolt_gpon_onu_cpu_packets_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_cpu_packets_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_dfi_id_string_table[] = { { .name = "alarm_status", .val = BCMOLT_GPON_ONU_DFI_ID_ALARM_STATUS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_dfi_id = { .name = "bcmolt_gpon_onu_dfi_id", .descr = "Identifiers for all properties contained in the gpon_onu_dfi group.", .size = sizeof(bcmolt_gpon_onu_dfi_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_dfi_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_dgi_id_string_table[] = { { .name = "alarm_status", .val = BCMOLT_GPON_ONU_DGI_ID_ALARM_STATUS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_dgi_id = { .name = "bcmolt_gpon_onu_dgi_id", .descr = "Identifiers for all properties contained in the gpon_onu_dgi group.", .size = sizeof(bcmolt_gpon_onu_dgi_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_dgi_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_dowi_id_string_table[] = { { .name = "alarm_status", .val = BCMOLT_GPON_ONU_DOWI_ID_ALARM_STATUS }, { .name = "drift_value", .val = BCMOLT_GPON_ONU_DOWI_ID_DRIFT_VALUE }, { .name = "new_eqd", .val = BCMOLT_GPON_ONU_DOWI_ID_NEW_EQD }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_dowi_id = { .name = "bcmolt_gpon_onu_dowi_id", .descr = "Identifiers for all properties contained in the gpon_onu_dowi group.", .size = sizeof(bcmolt_gpon_onu_dowi_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_dowi_id_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_eqd_fields[] = { { .name = "onu_id", .descr = "ONU ID", .offset = offsetof(bcmolt_gpon_onu_eqd, onu_id), .type = &type_descr_uint16_t }, { .name = "eqd", .descr = "EQD", .offset = offsetof(bcmolt_gpon_onu_eqd, eqd), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_eqd = { .name = "bcmolt_gpon_onu_eqd", .descr = "GPON ONU EQD", .size = sizeof(bcmolt_gpon_onu_eqd), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_eqd_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_eqd_fields } } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_eqd_list_u32 = { .name = "bcmolt_gpon_onu_eqd_list_u32", .descr = "Variable-length list of gpon_onu_eqd", .size = sizeof(bcmolt_gpon_onu_eqd_list_u32), .base_type = BCMOLT_BASE_TYPE_ID_ARR_DYN, .x = { .arr_dyn = { .elem_type = &type_descr_bcmolt_gpon_onu_eqd, .len_size = 4, .max_size = DEFAULT_DYN_ARR_MAX_SIZE / sizeof(bcmolt_gpon_onu_eqd) } } };
+bcmcli_enum_val bcmolt_gpon_onu_err_id_string_table[] = { { .name = "bip8_errors", .val = BCMOLT_GPON_ONU_ERR_ID_BIP8_ERRORS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_err_id = { .name = "bcmolt_gpon_onu_err_id", .descr = "Identifiers for all properties contained in the gpon_onu_err group.", .size = sizeof(bcmolt_gpon_onu_err_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_err_id_string_table } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_id_list_u32_max_256 = { .name = "bcmolt_gpon_onu_id_list_u32_max_256", .descr = "Variable-length list of gpon_onu_id", .size = sizeof(bcmolt_gpon_onu_id_list_u32_max_256), .base_type = BCMOLT_BASE_TYPE_ID_ARR_DYN, .x = { .arr_dyn = { .elem_type = &type_descr_uint16_t, .len_size = 4, .max_size = 256 } } };
+bcmcli_enum_val bcmolt_gpon_onu_invalid_dbru_report_id_string_table[] = { { .name = "alloc_id", .val = BCMOLT_GPON_ONU_INVALID_DBRU_REPORT_ID_ALLOC_ID }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_invalid_dbru_report_id = { .name = "bcmolt_gpon_onu_invalid_dbru_report_id", .descr = "Identifiers for all properties contained in the gpon_onu_invalid_dbru_report group.", .size = sizeof(bcmolt_gpon_onu_invalid_dbru_report_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_invalid_dbru_report_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_key_exchange_completed_id_string_table[] = { { .name = "new_key", .val = BCMOLT_GPON_ONU_KEY_EXCHANGE_COMPLETED_ID_NEW_KEY }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_key_exchange_completed_id = { .name = "bcmolt_gpon_onu_key_exchange_completed_id", .descr = "Identifiers for all properties contained in the gpon_onu_key_exchange_completed group.", .size = sizeof(bcmolt_gpon_onu_key_exchange_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_key_exchange_completed_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_key_exchange_cycle_skipped_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_key_exchange_cycle_skipped_id = { .name = "bcmolt_gpon_onu_key_exchange_cycle_skipped_id", .descr = "Identifiers for all properties contained in the gpon_onu_key_exchange_cycle_skipped group.", .size = sizeof(bcmolt_gpon_onu_key_exchange_cycle_skipped_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_key_exchange_cycle_skipped_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_key_exchange_decrypt_required_id_string_table[] = { { .name = "new_key", .val = BCMOLT_GPON_ONU_KEY_EXCHANGE_DECRYPT_REQUIRED_ID_NEW_KEY }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_key_exchange_decrypt_required_id = { .name = "bcmolt_gpon_onu_key_exchange_decrypt_required_id", .descr = "Identifiers for all properties contained in the gpon_onu_key_exchange_decrypt_required group.", .size = sizeof(bcmolt_gpon_onu_key_exchange_decrypt_required_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_key_exchange_decrypt_required_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_key_exchange_key_mismatch_id_string_table[] = { { .name = "expected_key", .val = BCMOLT_GPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID_EXPECTED_KEY }, { .name = "received_key", .val = BCMOLT_GPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID_RECEIVED_KEY }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_key_exchange_key_mismatch_id = { .name = "bcmolt_gpon_onu_key_exchange_key_mismatch_id", .descr = "Identifiers for all properties contained in the gpon_onu_key_exchange_key_mismatch group.", .size = sizeof(bcmolt_gpon_onu_key_exchange_key_mismatch_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_key_exchange_key_mismatch_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_key_exchange_key_request_timeout_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_key_exchange_key_request_timeout_id = { .name = "bcmolt_gpon_onu_key_exchange_key_request_timeout_id", .descr = "Identifiers for all properties contained in the gpon_onu_key_exchange_key_request_timeout group.", .size = sizeof(bcmolt_gpon_onu_key_exchange_key_request_timeout_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_key_exchange_key_request_timeout_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_key_exchange_unconsecutive_index_id_string_table[] = { { .name = "expected_index", .val = BCMOLT_GPON_ONU_KEY_EXCHANGE_UNCONSECUTIVE_INDEX_ID_EXPECTED_INDEX }, { .name = "actual_index", .val = BCMOLT_GPON_ONU_KEY_EXCHANGE_UNCONSECUTIVE_INDEX_ID_ACTUAL_INDEX }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_key_exchange_unconsecutive_index_id = { .name = "bcmolt_gpon_onu_key_exchange_unconsecutive_index_id", .descr = "Identifiers for all properties contained in the gpon_onu_key_exchange_unconsecutive_index group.", .size = sizeof(bcmolt_gpon_onu_key_exchange_unconsecutive_index_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_key_exchange_unconsecutive_index_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_key_id_string_table[] = { { .name = "pon_ni", .val = BCMOLT_GPON_ONU_KEY_ID_PON_NI }, { .name = "onu_id", .val = BCMOLT_GPON_ONU_KEY_ID_ONU_ID }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_key_id = { .name = "bcmolt_gpon_onu_key_id", .descr = "Identifiers for all properties contained in the gpon_onu_key group.", .size = sizeof(bcmolt_gpon_onu_key_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_key_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_loai_id_string_table[] = { { .name = "alarm_status", .val = BCMOLT_GPON_ONU_LOAI_ID_ALARM_STATUS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_loai_id = { .name = "bcmolt_gpon_onu_loai_id", .descr = "Identifiers for all properties contained in the gpon_onu_loai group.", .size = sizeof(bcmolt_gpon_onu_loai_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_loai_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_loki_id_string_table[] = { { .name = "alarm_status", .val = BCMOLT_GPON_ONU_LOKI_ID_ALARM_STATUS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_loki_id = { .name = "bcmolt_gpon_onu_loki_id", .descr = "Identifiers for all properties contained in the gpon_onu_loki group.", .size = sizeof(bcmolt_gpon_onu_loki_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_loki_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_memi_id_string_table[] = { { .name = "ploam_buffer", .val = BCMOLT_GPON_ONU_MEMI_ID_PLOAM_BUFFER }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_memi_id = { .name = "bcmolt_gpon_onu_memi_id", .descr = "Identifiers for all properties contained in the gpon_onu_memi group.", .size = sizeof(bcmolt_gpon_onu_memi_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_memi_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_omci_packet_id_string_table[] = { { .name = "port_id", .val = BCMOLT_GPON_ONU_OMCI_PACKET_ID_PORT_ID }, { .name = "crc_ok", .val = BCMOLT_GPON_ONU_OMCI_PACKET_ID_CRC_OK }, { .name = "packet_size", .val = BCMOLT_GPON_ONU_OMCI_PACKET_ID_PACKET_SIZE }, { .name = "buffer", .val = BCMOLT_GPON_ONU_OMCI_PACKET_ID_BUFFER }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_omci_packet_id = { .name = "bcmolt_gpon_onu_omci_packet_id", .descr = "Identifiers for all properties contained in the gpon_onu_omci_packet group.", .size = sizeof(bcmolt_gpon_onu_omci_packet_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_omci_packet_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_omci_port_id_configuration_completed_id_string_table[] = { { .name = "gem_port", .val = BCMOLT_GPON_ONU_OMCI_PORT_ID_CONFIGURATION_COMPLETED_ID_GEM_PORT }, { .name = "status", .val = BCMOLT_GPON_ONU_OMCI_PORT_ID_CONFIGURATION_COMPLETED_ID_STATUS }, { .name = "operation", .val = BCMOLT_GPON_ONU_OMCI_PORT_ID_CONFIGURATION_COMPLETED_ID_OPERATION }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_omci_port_id_configuration_completed_id = { .name = "bcmolt_gpon_onu_omci_port_id_configuration_completed_id", .descr = "Identifiers for all properties contained in the gpon_onu_omci_port_id_configuration_completed group.", .size = sizeof(bcmolt_gpon_onu_omci_port_id_configuration_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_omci_port_id_configuration_completed_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_onu_activation_completed_id_string_table[] = { { .name = "status", .val = BCMOLT_GPON_ONU_ONU_ACTIVATION_COMPLETED_ID_STATUS }, { .name = "fail_reason", .val = BCMOLT_GPON_ONU_ONU_ACTIVATION_COMPLETED_ID_FAIL_REASON }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_onu_activation_completed_id = { .name = "bcmolt_gpon_onu_onu_activation_completed_id", .descr = "Identifiers for all properties contained in the gpon_onu_onu_activation_completed group.", .size = sizeof(bcmolt_gpon_onu_onu_activation_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_onu_activation_completed_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_onu_activation_standby_completed_id_string_table[] = { { .name = "result", .val = BCMOLT_GPON_ONU_ONU_ACTIVATION_STANDBY_COMPLETED_ID_RESULT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_onu_activation_standby_completed_id = { .name = "bcmolt_gpon_onu_onu_activation_standby_completed_id", .descr = "Identifiers for all properties contained in the gpon_onu_onu_activation_standby_completed group.", .size = sizeof(bcmolt_gpon_onu_onu_activation_standby_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_onu_activation_standby_completed_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_onu_alarm_id_string_table[] = { { .name = "onu_alarm", .val = BCMOLT_GPON_ONU_ONU_ALARM_ID_ONU_ALARM }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_onu_alarm_id = { .name = "bcmolt_gpon_onu_onu_alarm_id", .descr = "Identifiers for all properties contained in the gpon_onu_onu_alarm group.", .size = sizeof(bcmolt_gpon_onu_onu_alarm_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_onu_alarm_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_onu_deactivation_completed_id_string_table[] = { { .name = "status", .val = BCMOLT_GPON_ONU_ONU_DEACTIVATION_COMPLETED_ID_STATUS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_onu_deactivation_completed_id = { .name = "bcmolt_gpon_onu_onu_deactivation_completed_id", .descr = "Identifiers for all properties contained in the gpon_onu_onu_deactivation_completed group.", .size = sizeof(bcmolt_gpon_onu_onu_deactivation_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_onu_deactivation_completed_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_onu_disable_completed_id_string_table[] = { { .name = "serial_number", .val = BCMOLT_GPON_ONU_ONU_DISABLE_COMPLETED_ID_SERIAL_NUMBER }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_onu_disable_completed_id = { .name = "bcmolt_gpon_onu_onu_disable_completed_id", .descr = "Identifiers for all properties contained in the gpon_onu_onu_disable_completed group.", .size = sizeof(bcmolt_gpon_onu_onu_disable_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_onu_disable_completed_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_onu_enable_completed_id_string_table[] = { { .name = "serial_number", .val = BCMOLT_GPON_ONU_ONU_ENABLE_COMPLETED_ID_SERIAL_NUMBER }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_onu_enable_completed_id = { .name = "bcmolt_gpon_onu_onu_enable_completed_id", .descr = "Identifiers for all properties contained in the gpon_onu_onu_enable_completed group.", .size = sizeof(bcmolt_gpon_onu_onu_enable_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_onu_enable_completed_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_optical_reflection_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_optical_reflection_id = { .name = "bcmolt_gpon_onu_optical_reflection_id", .descr = "Identifiers for all properties contained in the gpon_onu_optical_reflection group.", .size = sizeof(bcmolt_gpon_onu_optical_reflection_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_optical_reflection_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_password_authentication_completed_id_string_table[] = { { .name = "status", .val = BCMOLT_GPON_ONU_PASSWORD_AUTHENTICATION_COMPLETED_ID_STATUS }, { .name = "fail_reason", .val = BCMOLT_GPON_ONU_PASSWORD_AUTHENTICATION_COMPLETED_ID_FAIL_REASON }, { .name = "password", .val = BCMOLT_GPON_ONU_PASSWORD_AUTHENTICATION_COMPLETED_ID_PASSWORD }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_password_authentication_completed_id = { .name = "bcmolt_gpon_onu_password_authentication_completed_id", .descr = "Identifiers for all properties contained in the gpon_onu_password_authentication_completed group.", .size = sizeof(bcmolt_gpon_onu_password_authentication_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_password_authentication_completed_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_pee_id_string_table[] = { { .name = "alarm_status", .val = BCMOLT_GPON_ONU_PEE_ID_ALARM_STATUS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_pee_id = { .name = "bcmolt_gpon_onu_pee_id", .descr = "Identifiers for all properties contained in the gpon_onu_pee group.", .size = sizeof(bcmolt_gpon_onu_pee_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_pee_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_ploam_packet_id_string_table[] = { { .name = "ploam", .val = BCMOLT_GPON_ONU_PLOAM_PACKET_ID_PLOAM }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_ploam_packet_id = { .name = "bcmolt_gpon_onu_ploam_packet_id", .descr = "Identifiers for all properties contained in the gpon_onu_ploam_packet group.", .size = sizeof(bcmolt_gpon_onu_ploam_packet_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_ploam_packet_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_possible_drift_id_string_table[] = { { .name = "alarm_status", .val = BCMOLT_GPON_ONU_POSSIBLE_DRIFT_ID_ALARM_STATUS }, { .name = "estimated_drift", .val = BCMOLT_GPON_ONU_POSSIBLE_DRIFT_ID_ESTIMATED_DRIFT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_possible_drift_id = { .name = "bcmolt_gpon_onu_possible_drift_id", .descr = "Identifiers for all properties contained in the gpon_onu_possible_drift group.", .size = sizeof(bcmolt_gpon_onu_possible_drift_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_possible_drift_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_power_management_state_change_id_string_table[] = { { .name = "old_state", .val = BCMOLT_GPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_OLD_STATE }, { .name = "new_state", .val = BCMOLT_GPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_NEW_STATE }, { .name = "reason", .val = BCMOLT_GPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_REASON }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_power_management_state_change_id = { .name = "bcmolt_gpon_onu_power_management_state_change_id", .descr = "Identifiers for all properties contained in the gpon_onu_power_management_state_change group.", .size = sizeof(bcmolt_gpon_onu_power_management_state_change_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_power_management_state_change_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_pst_id_string_table[] = { { .name = "link_number", .val = BCMOLT_GPON_ONU_PST_ID_LINK_NUMBER }, { .name = "k1", .val = BCMOLT_GPON_ONU_PST_ID_K1 }, { .name = "k2", .val = BCMOLT_GPON_ONU_PST_ID_K2 }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_pst_id = { .name = "bcmolt_gpon_onu_pst_id", .descr = "Identifiers for all properties contained in the gpon_onu_pst group.", .size = sizeof(bcmolt_gpon_onu_pst_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_pst_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_ranging_completed_id_string_table[] = { { .name = "status", .val = BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_STATUS }, { .name = "fail_reason", .val = BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_FAIL_REASON }, { .name = "number_of_ploams", .val = BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_NUMBER_OF_PLOAMS }, { .name = "eqd", .val = BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_EQD }, { .name = "power_level", .val = BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_POWER_LEVEL }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_ranging_completed_id = { .name = "bcmolt_gpon_onu_ranging_completed_id", .descr = "Identifiers for all properties contained in the gpon_onu_ranging_completed group.", .size = sizeof(bcmolt_gpon_onu_ranging_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_ranging_completed_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_rei_id_string_table[] = { { .name = "bip8_errors", .val = BCMOLT_GPON_ONU_REI_ID_BIP8_ERRORS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_rei_id = { .name = "bcmolt_gpon_onu_rei_id", .descr = "Identifiers for all properties contained in the gpon_onu_rei group.", .size = sizeof(bcmolt_gpon_onu_rei_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_rei_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_rssi_measurement_completed_id_string_table[] = { { .name = "status", .val = BCMOLT_GPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID_STATUS }, { .name = "fail_reason", .val = BCMOLT_GPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID_FAIL_REASON }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_rssi_measurement_completed_id = { .name = "bcmolt_gpon_onu_rssi_measurement_completed_id", .descr = "Identifiers for all properties contained in the gpon_onu_rssi_measurement_completed group.", .size = sizeof(bcmolt_gpon_onu_rssi_measurement_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_rssi_measurement_completed_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_rssi_measurement_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_rssi_measurement_id = { .name = "bcmolt_gpon_onu_rssi_measurement_id", .descr = "Identifiers for all properties contained in the gpon_onu_rssi_measurement group.", .size = sizeof(bcmolt_gpon_onu_rssi_measurement_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_rssi_measurement_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_sdi_id_string_table[] = { { .name = "alarm_status", .val = BCMOLT_GPON_ONU_SDI_ID_ALARM_STATUS }, { .name = "ber", .val = BCMOLT_GPON_ONU_SDI_ID_BER }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_sdi_id = { .name = "bcmolt_gpon_onu_sdi_id", .descr = "Identifiers for all properties contained in the gpon_onu_sdi group.", .size = sizeof(bcmolt_gpon_onu_sdi_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_sdi_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_set_onu_state_id_string_table[] = { { .name = "onu_state", .val = BCMOLT_GPON_ONU_SET_ONU_STATE_ID_ONU_STATE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_set_onu_state_id = { .name = "bcmolt_gpon_onu_set_onu_state_id", .descr = "Identifiers for all properties contained in the gpon_onu_set_onu_state group.", .size = sizeof(bcmolt_gpon_onu_set_onu_state_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_set_onu_state_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_sfi_id_string_table[] = { { .name = "alarm_status", .val = BCMOLT_GPON_ONU_SFI_ID_ALARM_STATUS }, { .name = "ber", .val = BCMOLT_GPON_ONU_SFI_ID_BER }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_sfi_id = { .name = "bcmolt_gpon_onu_sfi_id", .descr = "Identifiers for all properties contained in the gpon_onu_sfi group.", .size = sizeof(bcmolt_gpon_onu_sfi_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_sfi_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_stat_alarm_cleared_id_string_table[] = { { .name = "stat", .val = BCMOLT_GPON_ONU_STAT_ALARM_CLEARED_ID_STAT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_stat_alarm_cleared_id = { .name = "bcmolt_gpon_onu_stat_alarm_cleared_id", .descr = "Identifiers for all properties contained in the gpon_onu_stat_alarm_cleared group.", .size = sizeof(bcmolt_gpon_onu_stat_alarm_cleared_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_stat_alarm_cleared_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_stat_alarm_raised_id_string_table[] = { { .name = "stat", .val = BCMOLT_GPON_ONU_STAT_ALARM_RAISED_ID_STAT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_stat_alarm_raised_id = { .name = "bcmolt_gpon_onu_stat_alarm_raised_id", .descr = "Identifiers for all properties contained in the gpon_onu_stat_alarm_raised group.", .size = sizeof(bcmolt_gpon_onu_stat_alarm_raised_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_stat_alarm_raised_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_stat_cfg_id_string_table[] = { { .name = "cfg", .val = BCMOLT_GPON_ONU_STAT_CFG_ID_CFG }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_stat_cfg_id = { .name = "bcmolt_gpon_onu_stat_cfg_id", .descr = "Identifiers for all properties contained in the gpon_onu_stat_cfg group.", .size = sizeof(bcmolt_gpon_onu_stat_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_stat_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_stat_id_string_table[] = { { .name = "fec_codewords", .val = BCMOLT_GPON_ONU_STAT_ID_FEC_CODEWORDS }, { .name = "fec_bytes_corrected", .val = BCMOLT_GPON_ONU_STAT_ID_FEC_BYTES_CORRECTED }, { .name = "fec_codewords_corrected", .val = BCMOLT_GPON_ONU_STAT_ID_FEC_CODEWORDS_CORRECTED }, { .name = "fec_codewords_uncorrected", .val = BCMOLT_GPON_ONU_STAT_ID_FEC_CODEWORDS_UNCORRECTED }, { .name = "bip8_bytes", .val = BCMOLT_GPON_ONU_STAT_ID_BIP8_BYTES }, { .name = "bip8_errors", .val = BCMOLT_GPON_ONU_STAT_ID_BIP8_ERRORS }, { .name = "rx_ploams_crc_error", .val = BCMOLT_GPON_ONU_STAT_ID_RX_PLOAMS_CRC_ERROR }, { .name = "rx_ploams_non_idle", .val = BCMOLT_GPON_ONU_STAT_ID_RX_PLOAMS_NON_IDLE }, { .name = "positive_drift", .val = BCMOLT_GPON_ONU_STAT_ID_POSITIVE_DRIFT }, { .name = "negative_drift", .val = BCMOLT_GPON_ONU_STAT_ID_NEGATIVE_DRIFT }, { .name = "rx_omci", .val = BCMOLT_GPON_ONU_STAT_ID_RX_OMCI }, { .name = "rx_omci_packets_crc_error", .val = BCMOLT_GPON_ONU_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR }, { .name = "ber_reported", .val = BCMOLT_GPON_ONU_STAT_ID_BER_REPORTED }, { .name = "unreceived_burst", .val = BCMOLT_GPON_ONU_STAT_ID_UNRECEIVED_BURST }, { .name = "lcdg_errors", .val = BCMOLT_GPON_ONU_STAT_ID_LCDG_ERRORS }, { .name = "rdi_errors", .val = BCMOLT_GPON_ONU_STAT_ID_RDI_ERRORS }, { .name = "rx_bytes", .val = BCMOLT_GPON_ONU_STAT_ID_RX_BYTES }, { .name = "rx_packets", .val = BCMOLT_GPON_ONU_STAT_ID_RX_PACKETS }, { .name = "tx_bytes", .val = BCMOLT_GPON_ONU_STAT_ID_TX_BYTES }, { .name = "tx_packets", .val = BCMOLT_GPON_ONU_STAT_ID_TX_PACKETS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_stat_id = { .name = "bcmolt_gpon_onu_stat_id", .descr = "Identifiers for all properties contained in the gpon_onu_stat group.", .size = sizeof(bcmolt_gpon_onu_stat_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_stat_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_sufi_id_string_table[] = { { .name = "alarm_status", .val = BCMOLT_GPON_ONU_SUFI_ID_ALARM_STATUS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_sufi_id = { .name = "bcmolt_gpon_onu_sufi_id", .descr = "Identifiers for all properties contained in the gpon_onu_sufi group.", .size = sizeof(bcmolt_gpon_onu_sufi_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_sufi_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_onu_tiwi_id_string_table[] = { { .name = "alarm_status", .val = BCMOLT_GPON_ONU_TIWI_ID_ALARM_STATUS }, { .name = "drift_value", .val = BCMOLT_GPON_ONU_TIWI_ID_DRIFT_VALUE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_tiwi_id = { .name = "bcmolt_gpon_onu_tiwi_id", .descr = "Identifiers for all properties contained in the gpon_onu_tiwi group.", .size = sizeof(bcmolt_gpon_onu_tiwi_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_tiwi_id_string_table } };
+bcmcli_enum_val bcmolt_omci_device_id_string_table[] = { { .name = "baseline", .val = BCMOLT_OMCI_DEVICE_ID_BASELINE }, { .name = "extended", .val = BCMOLT_OMCI_DEVICE_ID_EXTENDED }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_omci_device_id = { .name = "bcmolt_omci_device_id", .descr = "OMCI Device ID", .size = sizeof(bcmolt_omci_device_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_omci_device_id_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_upgrade_params_fields[] = { { .name = "response_timeout_ms", .descr = "The length of time that the OLT will wait for the ONU to respond.", .offset = offsetof(bcmolt_gpon_onu_upgrade_params, response_timeout_ms), .type = &type_descr_uint32_t }, { .name = "max_retry_count", .descr = "Maximum retry count", .offset = offsetof(bcmolt_gpon_onu_upgrade_params, max_retry_count), .type = &type_descr_uint8_t }, { .name = "omci_format", .descr = "OMCI format", .offset = offsetof(bcmolt_gpon_onu_upgrade_params, omci_format), .type = &type_descr_bcmolt_omci_device_id }, { .name = "window_size", .descr = "Window size", .offset = offsetof(bcmolt_gpon_onu_upgrade_params, window_size), .type = &type_descr_uint16_t }, { .name = "activate_commit", .descr = "Automatically activate the new image and commit.", .offset = offsetof(bcmolt_gpon_onu_upgrade_params, activate_commit), .type = &type_descr_bcmos_bool }, { .name = "delay_for_commit_ms", .descr = "Delay time before COMMIT command.  Unit is milliseconds.", .offset = offsetof(bcmolt_gpon_onu_upgrade_params, delay_for_commit_ms), .type = &type_descr_uint32_t }, { .name = "max_activation_attempts", .descr = "Maximum number of re-attempts to activate the ONU.", .offset = offsetof(bcmolt_gpon_onu_upgrade_params, max_activation_attempts), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_upgrade_params = { .name = "bcmolt_gpon_onu_upgrade_params", .descr = "GPON ONU upgrade params", .size = sizeof(bcmolt_gpon_onu_upgrade_params), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_upgrade_params_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_upgrade_params_fields } } };
+bcmcli_enum_val bcmolt_gpon_onu_upgrade_return_code_string_table[] = { { .name = "success", .val = BCMOLT_GPON_ONU_UPGRADE_RETURN_CODE_SUCCESS }, { .name = "onu_response_timeout", .val = BCMOLT_GPON_ONU_UPGRADE_RETURN_CODE_ONU_RESPONSE_TIMEOUT }, { .name = "onu_error_response", .val = BCMOLT_GPON_ONU_UPGRADE_RETURN_CODE_ONU_ERROR_RESPONSE }, { .name = "tci_mismatch", .val = BCMOLT_GPON_ONU_UPGRADE_RETURN_CODE_TCI_MISMATCH }, { .name = "get_image_failed", .val = BCMOLT_GPON_ONU_UPGRADE_RETURN_CODE_GET_IMAGE_FAILED }, { .name = "activation_failed", .val = BCMOLT_GPON_ONU_UPGRADE_RETURN_CODE_ACTIVATION_FAILED }, { .name = "internal", .val = BCMOLT_GPON_ONU_UPGRADE_RETURN_CODE_INTERNAL }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_upgrade_return_code = { .name = "bcmolt_gpon_onu_upgrade_return_code", .descr = "GPON ONU Upgrade Return Code", .size = sizeof(bcmolt_gpon_onu_upgrade_return_code), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_onu_upgrade_return_code_string_table } };
+bcmcli_enum_val bcmolt_omci_result_code_string_table[] = { { .name = "no_error", .val = BCMOLT_OMCI_RESULT_CODE_NO_ERROR }, { .name = "processing_error", .val = BCMOLT_OMCI_RESULT_CODE_PROCESSING_ERROR }, { .name = "not_supported", .val = BCMOLT_OMCI_RESULT_CODE_NOT_SUPPORTED }, { .name = "parameter_error", .val = BCMOLT_OMCI_RESULT_CODE_PARAMETER_ERROR }, { .name = "unknown_entity", .val = BCMOLT_OMCI_RESULT_CODE_UNKNOWN_ENTITY }, { .name = "unknown_instance", .val = BCMOLT_OMCI_RESULT_CODE_UNKNOWN_INSTANCE }, { .name = "device_busy", .val = BCMOLT_OMCI_RESULT_CODE_DEVICE_BUSY }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_omci_result_code = { .name = "bcmolt_omci_result_code", .descr = "G.988 OMCI Result Code.", .size = sizeof(bcmolt_omci_result_code), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_omci_result_code_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_upgrade_status_fields[] = { { .name = "onu_id", .descr = "ONU ID", .offset = offsetof(bcmolt_gpon_onu_upgrade_status, onu_id), .type = &type_descr_uint16_t }, { .name = "error_code", .descr = "Error Code", .offset = offsetof(bcmolt_gpon_onu_upgrade_status, error_code), .type = &type_descr_bcmolt_gpon_onu_upgrade_return_code }, { .name = "fail_reason", .descr = "Failure reason specific to the Error Code above.", .offset = offsetof(bcmolt_gpon_onu_upgrade_status, fail_reason), .type = &type_descr_bcmolt_omci_result_code } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_upgrade_status = { .name = "bcmolt_gpon_onu_upgrade_status", .descr = "GPON ONU Upgrade Status", .size = sizeof(bcmolt_gpon_onu_upgrade_status), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_upgrade_status_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_upgrade_status_fields } } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_upgrade_status_list_u32 = { .name = "bcmolt_gpon_onu_upgrade_status_list_u32", .descr = "Variable-length list of gpon_onu_upgrade_status", .size = sizeof(bcmolt_gpon_onu_upgrade_status_list_u32), .base_type = BCMOLT_BASE_TYPE_ID_ARR_DYN, .x = { .arr_dyn = { .elem_type = &type_descr_bcmolt_gpon_onu_upgrade_status, .len_size = 4, .max_size = DEFAULT_DYN_ARR_MAX_SIZE / sizeof(bcmolt_gpon_onu_upgrade_status) } } };
+bcmcli_enum_val bcmolt_onu_state_string_table[] = { { .name = "not_configured", .val = BCMOLT_ONU_STATE_NOT_CONFIGURED }, { .name = "inactive", .val = BCMOLT_ONU_STATE_INACTIVE }, { .name = "active", .val = BCMOLT_ONU_STATE_ACTIVE }, { .name = "active_standby", .val = BCMOLT_ONU_STATE_ACTIVE_STANDBY }, { .name = "disabled", .val = BCMOLT_ONU_STATE_DISABLED }, { .name = "awake_free", .val = BCMOLT_ONU_STATE_AWAKE_FREE }, { .name = "processing", .val = BCMOLT_ONU_STATE_PROCESSING }, { .name = "low_power_doze", .val = BCMOLT_ONU_STATE_LOW_POWER_DOZE }, { .name = "low_power_sleep", .val = BCMOLT_ONU_STATE_LOW_POWER_SLEEP }, { .name = "low_power_watch", .val = BCMOLT_ONU_STATE_LOW_POWER_WATCH }, { .name = "unaware", .val = BCMOLT_ONU_STATE_UNAWARE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_onu_state = { .name = "bcmolt_onu_state", .descr = "ONU state", .size = sizeof(bcmolt_onu_state), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_onu_state_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_with_state_fields[] = { { .name = "onu_id", .descr = "ONU ID", .offset = offsetof(bcmolt_gpon_onu_with_state, onu_id), .type = &type_descr_uint16_t }, { .name = "state", .descr = "State", .offset = offsetof(bcmolt_gpon_onu_with_state, state), .type = &type_descr_bcmolt_onu_state } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_with_state = { .name = "bcmolt_gpon_onu_with_state", .descr = "GPON ONU With State", .size = sizeof(bcmolt_gpon_onu_with_state), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_with_state_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_with_state_fields } } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_with_state_list_u16_max_128 = { .name = "bcmolt_gpon_onu_with_state_list_u16_max_128", .descr = "Variable-length list of gpon_onu_with_state", .size = sizeof(bcmolt_gpon_onu_with_state_list_u16_max_128), .base_type = BCMOLT_BASE_TYPE_ID_ARR_DYN, .x = { .arr_dyn = { .elem_type = &type_descr_bcmolt_gpon_onu_with_state, .len_size = 2, .max_size = 128 } } };
+bcmcli_enum_val bcmolt_rssi_location_sign_string_table[] = { { .name = "before", .val = BCMOLT_RSSI_LOCATION_SIGN_BEFORE }, { .name = "after", .val = BCMOLT_RSSI_LOCATION_SIGN_AFTER }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_rssi_location_sign = { .name = "bcmolt_rssi_location_sign", .descr = "rssi location sign", .size = sizeof(bcmolt_rssi_location_sign), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_rssi_location_sign_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_rssi_general_configuration_fields[] = { { .name = "location", .descr = "the pattern activation location in clock cycles relative (before) to start of burst.", .offset = offsetof(bcmolt_gpon_rssi_general_configuration, location), .type = &type_descr_uint8_t }, { .name = "location_sign", .descr = "this bit determines whether the location of the RSSI in data mode (configured as RSSI pattern 1) will be before or after the burst start.", .offset = offsetof(bcmolt_gpon_rssi_general_configuration, location_sign), .type = &type_descr_bcmolt_rssi_location_sign }, { .name = "start_pattern", .descr = "the value of the first cycle of the pattern (will be transmitted once).", .offset = offsetof(bcmolt_gpon_rssi_general_configuration, start_pattern), .type = &type_descr_uint8_t }, { .name = "middle_pattern", .descr = "the value of the pattern that will be transmitted middle_repetition times between the start and the end of the pattern.", .offset = offsetof(bcmolt_gpon_rssi_general_configuration, middle_pattern), .type = &type_descr_uint8_t }, { .name = "last_pattern", .descr = "the value of the last cycle of the pattern. will be transmitted once.", .offset = offsetof(bcmolt_gpon_rssi_general_configuration, last_pattern), .type = &type_descr_uint8_t }, { .name = "middle_repertition", .descr = "the number of times the middle pattern will be repeated.", .offset = offsetof(bcmolt_gpon_rssi_general_configuration, middle_repertition), .type = &type_descr_uint8_t }, { .name = "minimum_burst", .descr = "the minimum burst size needed measurement", .offset = offsetof(bcmolt_gpon_rssi_general_configuration, minimum_burst), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_rssi_general_configuration = { .name = "bcmolt_gpon_rssi_general_configuration", .descr = "gpon RSSI general configuration", .size = sizeof(bcmolt_gpon_rssi_general_configuration), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_rssi_general_configuration_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_rssi_general_configuration_fields } } };
+bcmcli_enum_val bcmolt_onu_post_discovery_mode_string_table[] = { { .name = "none", .val = BCMOLT_ONU_POST_DISCOVERY_MODE_NONE }, { .name = "activate", .val = BCMOLT_ONU_POST_DISCOVERY_MODE_ACTIVATE }, { .name = "disable", .val = BCMOLT_ONU_POST_DISCOVERY_MODE_DISABLE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_onu_post_discovery_mode = { .name = "bcmolt_onu_post_discovery_mode", .descr = "ONU post discovery mode", .size = sizeof(bcmolt_onu_post_discovery_mode), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_onu_post_discovery_mode_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_sn_acquisition_fields[] = { { .name = "interval", .descr = "SN process interval in milliseconds", .offset = offsetof(bcmolt_gpon_sn_acquisition, interval), .type = &type_descr_uint32_t }, { .name = "control", .descr = "SN process control", .offset = offsetof(bcmolt_gpon_sn_acquisition, control), .type = &type_descr_bcmolt_control_state }, { .name = "onu_post_discovery_mode", .descr = "Automatic operation following ONU discovery", .offset = offsetof(bcmolt_gpon_sn_acquisition, onu_post_discovery_mode), .type = &type_descr_bcmolt_onu_post_discovery_mode } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_sn_acquisition = { .name = "bcmolt_gpon_sn_acquisition", .descr = "GPON SN Acquisition", .size = sizeof(bcmolt_gpon_sn_acquisition), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_sn_acquisition_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_sn_acquisition_fields } } };
+bcmcli_enum_val bcmolt_gpon_trx_cfg_id_string_table[] = { { .name = "transceiver_type", .val = BCMOLT_GPON_TRX_CFG_ID_TRANSCEIVER_TYPE }, { .name = "la_configuration", .val = BCMOLT_GPON_TRX_CFG_ID_LA_CONFIGURATION }, { .name = "bcdr", .val = BCMOLT_GPON_TRX_CFG_ID_BCDR }, { .name = "la_ranging_after_no_ed_resync", .val = BCMOLT_GPON_TRX_CFG_ID_LA_RANGING_AFTER_NO_ED_RESYNC }, { .name = "bcdr_ranging_after_no_ed_resync", .val = BCMOLT_GPON_TRX_CFG_ID_BCDR_RANGING_AFTER_NO_ED_RESYNC }, { .name = "la_ranging_after_ed_resync", .val = BCMOLT_GPON_TRX_CFG_ID_LA_RANGING_AFTER_ED_RESYNC }, { .name = "bcdr_ranging_after_ed_resync", .val = BCMOLT_GPON_TRX_CFG_ID_BCDR_RANGING_AFTER_ED_RESYNC }, { .name = "la_resync_polarity", .val = BCMOLT_GPON_TRX_CFG_ID_LA_RESYNC_POLARITY }, { .name = "bcdr_resync_polarity", .val = BCMOLT_GPON_TRX_CFG_ID_BCDR_RESYNC_POLARITY }, { .name = "bcdr_ranging_resync_conditions", .val = BCMOLT_GPON_TRX_CFG_ID_BCDR_RANGING_RESYNC_CONDITIONS }, { .name = "la_ranging_resync_conditions", .val = BCMOLT_GPON_TRX_CFG_ID_LA_RANGING_RESYNC_CONDITIONS }, { .name = "rx_configuration", .val = BCMOLT_GPON_TRX_CFG_ID_RX_CONFIGURATION }, { .name = "ranging_control_stages_configuration", .val = BCMOLT_GPON_TRX_CFG_ID_RANGING_CONTROL_STAGES_CONFIGURATION }, { .name = "energy_detect", .val = BCMOLT_GPON_TRX_CFG_ID_ENERGY_DETECT }, { .name = "end_of_burst_data_pattern", .val = BCMOLT_GPON_TRX_CFG_ID_END_OF_BURST_DATA_PATTERN }, { .name = "end_of_burst_ranging_pattern", .val = BCMOLT_GPON_TRX_CFG_ID_END_OF_BURST_RANGING_PATTERN }, { .name = "preamble", .val = BCMOLT_GPON_TRX_CFG_ID_PREAMBLE }, { .name = "delimiter", .val = BCMOLT_GPON_TRX_CFG_ID_DELIMITER }, { .name = "guard_bits", .val = BCMOLT_GPON_TRX_CFG_ID_GUARD_BITS }, { .name = "serdes_configuration", .val = BCMOLT_GPON_TRX_CFG_ID_SERDES_CONFIGURATION }, { .name = "plo_ranging", .val = BCMOLT_GPON_TRX_CFG_ID_PLO_RANGING }, { .name = "plo_data", .val = BCMOLT_GPON_TRX_CFG_ID_PLO_DATA }, { .name = "rssi_normal_config", .val = BCMOLT_GPON_TRX_CFG_ID_RSSI_NORMAL_CONFIG }, { .name = "ranging_rssi_resync_control", .val = BCMOLT_GPON_TRX_CFG_ID_RANGING_RSSI_RESYNC_CONTROL }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_trx_cfg_id = { .name = "bcmolt_gpon_trx_cfg_id", .descr = "Identifiers for all properties contained in the gpon_trx_cfg group.", .size = sizeof(bcmolt_gpon_trx_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_trx_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_gpon_trx_key_id_string_table[] = { { .name = "pon_ni", .val = BCMOLT_GPON_TRX_KEY_ID_PON_NI }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_trx_key_id = { .name = "bcmolt_gpon_trx_key_id", .descr = "Identifiers for all properties contained in the gpon_trx_key group.", .size = sizeof(bcmolt_gpon_trx_key_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_gpon_trx_key_id_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_host_sw_version_fields[] = { { .name = "major", .descr = "Major ", .offset = offsetof(bcmolt_host_sw_version, major), .type = &type_descr_uint8_t }, { .name = "minor", .descr = "Minor", .offset = offsetof(bcmolt_host_sw_version, minor), .type = &type_descr_uint8_t }, { .name = "revision", .descr = "Revision", .offset = offsetof(bcmolt_host_sw_version, revision), .type = &type_descr_uint8_t_hex }, { .name = "model", .descr = "Model", .offset = offsetof(bcmolt_host_sw_version, model), .type = &type_descr_uint32_t }, { .name = "build_time", .descr = "Firmware SW build time", .offset = offsetof(bcmolt_host_sw_version, build_time), .type = &string_32 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_host_sw_version = { .name = "bcmolt_host_sw_version", .descr = "Host SW Version", .size = sizeof(bcmolt_host_sw_version), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_host_sw_version_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_host_sw_version_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_hw_pon_id_fields[] = { { .name = "pon_id_1", .descr = "LSB 32 bits of PON ID.", .offset = offsetof(bcmolt_hw_pon_id, pon_id_1), .type = &type_descr_uint32_t }, { .name = "pon_id_2", .descr = "MSB 19 bits of PON ID.", .offset = offsetof(bcmolt_hw_pon_id, pon_id_2), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_hw_pon_id = { .name = "bcmolt_hw_pon_id", .descr = "HW PON ID", .size = sizeof(bcmolt_hw_pon_id), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_hw_pon_id_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_hw_pon_id_fields } } };
+bcmcli_enum_val bcmolt_image_transfer_status_string_table[] = { { .name = "success", .val = BCMOLT_IMAGE_TRANSFER_STATUS_SUCCESS }, { .name = "memory_allocation_failure", .val = BCMOLT_IMAGE_TRANSFER_STATUS_MEMORY_ALLOCATION_FAILURE }, { .name = "unsupported_file_type", .val = BCMOLT_IMAGE_TRANSFER_STATUS_UNSUPPORTED_FILE_TYPE }, { .name = "crc_error", .val = BCMOLT_IMAGE_TRANSFER_STATUS_CRC_ERROR }, { .name = "block_out_of_sync", .val = BCMOLT_IMAGE_TRANSFER_STATUS_BLOCK_OUT_OF_SYNC }, { .name = "internal_error", .val = BCMOLT_IMAGE_TRANSFER_STATUS_INTERNAL_ERROR }, { .name = "invalid_state", .val = BCMOLT_IMAGE_TRANSFER_STATUS_INVALID_STATE }, { .name = "premature_termination", .val = BCMOLT_IMAGE_TRANSFER_STATUS_PREMATURE_TERMINATION }, { .name = "ack_timeout", .val = BCMOLT_IMAGE_TRANSFER_STATUS_ACK_TIMEOUT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_image_transfer_status = { .name = "bcmolt_image_transfer_status", .descr = "Image transfer status", .size = sizeof(bcmolt_image_transfer_status), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_image_transfer_status_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_indication_shaping_fields[] = { { .name = "enabled", .descr = "Whether or not the device will limit the rate of indications sent to the host.", .offset = offsetof(bcmolt_indication_shaping, enabled), .type = &type_descr_bcmos_bool }, { .name = "max_rate", .descr = "Maximum number of indications per second to be generated by the device.", .offset = offsetof(bcmolt_indication_shaping, max_rate), .type = &type_descr_uint32_t }, { .name = "max_burst", .descr = "Maximum number of indications that are allowed to be sent back-to-back.", .offset = offsetof(bcmolt_indication_shaping, max_burst), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_indication_shaping = { .name = "bcmolt_indication_shaping", .descr = "Rate limiting / shaping for the indication channel.", .size = sizeof(bcmolt_indication_shaping), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_indication_shaping_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_indication_shaping_fields } } };
+bcmcli_enum_val bcmolt_iwf_mode_string_table[] = { { .name = "direct_mapping_mode", .val = BCMOLT_IWF_MODE_DIRECT_MAPPING_MODE }, { .name = "per_flow_mode", .val = BCMOLT_IWF_MODE_PER_FLOW_MODE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_iwf_mode = { .name = "bcmolt_iwf_mode", .descr = "iwf mode", .size = sizeof(bcmolt_iwf_mode), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_iwf_mode_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_la_resync_pattern_configuration_fields[] = { { .name = "resync_control", .descr = "used in normal mode", .offset = offsetof(bcmolt_la_resync_pattern_configuration, resync_control), .type = &type_descr_bcmolt_resync_control }, { .name = "ranging_resync_control", .descr = "used in ranging mode at the beginning of each ranging cycle", .offset = offsetof(bcmolt_la_resync_pattern_configuration, ranging_resync_control), .type = &type_descr_bcmolt_resync_control } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_la_resync_pattern_configuration = { .name = "bcmolt_la_resync_pattern_configuration", .descr = "LA resync pattern configuration", .size = sizeof(bcmolt_la_resync_pattern_configuration), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_la_resync_pattern_configuration_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_la_resync_pattern_configuration_fields } } };
+static bcmcli_type_descr BCM_DESCR string_2048 = { .name = "string[2048]", .descr = "ASCII string with max length 2048", .size = sizeof(char[2048]), .base_type = BCMOLT_BASE_TYPE_ID_STRING };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_log_buffer_fields[] = { { .name = "buff", .descr = "buff", .offset = offsetof(bcmolt_log_buffer, buff), .type = &string_2048 }, { .name = "msg_to_read", .descr = "msg_to_read", .offset = offsetof(bcmolt_log_buffer, msg_to_read), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_log_buffer = { .name = "bcmolt_log_buffer", .descr = "log buffer", .size = sizeof(bcmolt_log_buffer), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_log_buffer_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_log_buffer_fields } } };
+bcmcli_enum_val bcmolt_log_entry_auto_cfg_id_string_table[] = { { .name = "stat_alarm_cleared", .val = BCMOLT_LOG_ENTRY_AUTO_CFG_ID_STAT_ALARM_CLEARED }, { .name = "stat_alarm_raised", .val = BCMOLT_LOG_ENTRY_AUTO_CFG_ID_STAT_ALARM_RAISED }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_log_entry_auto_cfg_id = { .name = "bcmolt_log_entry_auto_cfg_id", .descr = "Identifiers for all properties contained in the log_entry_auto_cfg group.", .size = sizeof(bcmolt_log_entry_auto_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_log_entry_auto_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_log_entry_cfg_id_string_table[] = { { .name = "default_log_level", .val = BCMOLT_LOG_ENTRY_CFG_ID_DEFAULT_LOG_LEVEL }, { .name = "default_log_type", .val = BCMOLT_LOG_ENTRY_CFG_ID_DEFAULT_LOG_TYPE }, { .name = "log_level_print", .val = BCMOLT_LOG_ENTRY_CFG_ID_LOG_LEVEL_PRINT }, { .name = "log_level_save", .val = BCMOLT_LOG_ENTRY_CFG_ID_LOG_LEVEL_SAVE }, { .name = "log_type", .val = BCMOLT_LOG_ENTRY_CFG_ID_LOG_TYPE }, { .name = "log_style", .val = BCMOLT_LOG_ENTRY_CFG_ID_LOG_STYLE }, { .name = "log_name", .val = BCMOLT_LOG_ENTRY_CFG_ID_LOG_NAME }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_log_entry_cfg_id = { .name = "bcmolt_log_entry_cfg_id", .descr = "Identifiers for all properties contained in the log_entry_cfg group.", .size = sizeof(bcmolt_log_entry_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_log_entry_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_log_entry_key_id_string_table[] = { { .name = "log_id", .val = BCMOLT_LOG_ENTRY_KEY_ID_LOG_ID }, { .name = "reserved", .val = BCMOLT_LOG_ENTRY_KEY_ID_RESERVED }, { .name = "name", .val = BCMOLT_LOG_ENTRY_KEY_ID_NAME }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_log_entry_key_id = { .name = "bcmolt_log_entry_key_id", .descr = "Identifiers for all properties contained in the log_entry_key group.", .size = sizeof(bcmolt_log_entry_key_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_log_entry_key_id_string_table } };
+bcmcli_enum_val bcmolt_log_entry_stat_alarm_cleared_id_string_table[] = { { .name = "stat", .val = BCMOLT_LOG_ENTRY_STAT_ALARM_CLEARED_ID_STAT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_log_entry_stat_alarm_cleared_id = { .name = "bcmolt_log_entry_stat_alarm_cleared_id", .descr = "Identifiers for all properties contained in the log_entry_stat_alarm_cleared group.", .size = sizeof(bcmolt_log_entry_stat_alarm_cleared_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_log_entry_stat_alarm_cleared_id_string_table } };
+bcmcli_enum_val bcmolt_log_entry_stat_alarm_raised_id_string_table[] = { { .name = "stat", .val = BCMOLT_LOG_ENTRY_STAT_ALARM_RAISED_ID_STAT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_log_entry_stat_alarm_raised_id = { .name = "bcmolt_log_entry_stat_alarm_raised_id", .descr = "Identifiers for all properties contained in the log_entry_stat_alarm_raised group.", .size = sizeof(bcmolt_log_entry_stat_alarm_raised_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_log_entry_stat_alarm_raised_id_string_table } };
+bcmcli_enum_val bcmolt_log_entry_stat_cfg_id_string_table[] = { { .name = "cfg", .val = BCMOLT_LOG_ENTRY_STAT_CFG_ID_CFG }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_log_entry_stat_cfg_id = { .name = "bcmolt_log_entry_stat_cfg_id", .descr = "Identifiers for all properties contained in the log_entry_stat_cfg group.", .size = sizeof(bcmolt_log_entry_stat_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_log_entry_stat_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_log_entry_stat_id_string_table[] = { { .name = "msg_count", .val = BCMOLT_LOG_ENTRY_STAT_ID_MSG_COUNT }, { .name = "lost_msg_count", .val = BCMOLT_LOG_ENTRY_STAT_ID_LOST_MSG_COUNT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_log_entry_stat_id = { .name = "bcmolt_log_entry_stat_id", .descr = "Identifiers for all properties contained in the log_entry_stat group.", .size = sizeof(bcmolt_log_entry_stat_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_log_entry_stat_id_string_table } };
+bcmcli_enum_val bcmolt_log_file_id_string_table[] = { { .name = "sram", .val = BCMOLT_LOG_FILE_ID_SRAM }, { .name = "ddr", .val = BCMOLT_LOG_FILE_ID_DDR }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_log_file_id = { .name = "bcmolt_log_file_id", .descr = "log file id", .size = sizeof(bcmolt_log_file_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_log_file_id_string_table } };
+bcmcli_enum_val bcmolt_log_level_string_table[] = { { .name = "no_log", .val = BCMOLT_LOG_LEVEL_NO_LOG }, { .name = "fatal", .val = BCMOLT_LOG_LEVEL_FATAL }, { .name = "error", .val = BCMOLT_LOG_LEVEL_ERROR }, { .name = "warning", .val = BCMOLT_LOG_LEVEL_WARNING }, { .name = "info", .val = BCMOLT_LOG_LEVEL_INFO }, { .name = "debug", .val = BCMOLT_LOG_LEVEL_DEBUG }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_log_level = { .name = "bcmolt_log_level", .descr = "log level", .size = sizeof(bcmolt_log_level), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_log_level_string_table } };
+bcmcli_enum_val bcmolt_log_style_string_table[] = { { .name = "normal", .val = BCMOLT_LOG_STYLE_NORMAL }, { .name = "bold", .val = BCMOLT_LOG_STYLE_BOLD }, { .name = "underline", .val = BCMOLT_LOG_STYLE_UNDERLINE }, { .name = "blink", .val = BCMOLT_LOG_STYLE_BLINK }, { .name = "reverse_video", .val = BCMOLT_LOG_STYLE_REVERSE_VIDEO }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_log_style = { .name = "bcmolt_log_style", .descr = "log style", .size = sizeof(bcmolt_log_style), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_log_style_string_table } };
+bcmcli_enum_val bcmolt_log_type_string_table[] = { { .name = "none", .val = BCMOLT_LOG_TYPE_NONE }, { .name = "print", .val = BCMOLT_LOG_TYPE_PRINT }, { .name = "save", .val = BCMOLT_LOG_TYPE_SAVE }, { .name = "both", .val = BCMOLT_LOG_TYPE_BOTH }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_log_type = { .name = "bcmolt_log_type", .descr = "log type", .size = sizeof(bcmolt_log_type), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_log_type_string_table } };
+bcmcli_enum_val bcmolt_logger_auto_cfg_id_string_table[] = { { .name = "stat_alarm_cleared", .val = BCMOLT_LOGGER_AUTO_CFG_ID_STAT_ALARM_CLEARED }, { .name = "stat_alarm_raised", .val = BCMOLT_LOGGER_AUTO_CFG_ID_STAT_ALARM_RAISED }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_logger_auto_cfg_id = { .name = "bcmolt_logger_auto_cfg_id", .descr = "Identifiers for all properties contained in the logger_auto_cfg group.", .size = sizeof(bcmolt_logger_auto_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_logger_auto_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_logger_cfg_id_string_table[] = { { .name = "buffer", .val = BCMOLT_LOGGER_CFG_ID_BUFFER }, { .name = "wrap_around", .val = BCMOLT_LOGGER_CFG_ID_WRAP_AROUND }, { .name = "clear_after_read", .val = BCMOLT_LOGGER_CFG_ID_CLEAR_AFTER_READ }, { .name = "enable_log", .val = BCMOLT_LOGGER_CFG_ID_ENABLE_LOG }, { .name = "log_names", .val = BCMOLT_LOGGER_CFG_ID_LOG_NAMES }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_logger_cfg_id = { .name = "bcmolt_logger_cfg_id", .descr = "Identifiers for all properties contained in the logger_cfg group.", .size = sizeof(bcmolt_logger_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_logger_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_logger_clear_log_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_logger_clear_log_id = { .name = "bcmolt_logger_clear_log_id", .descr = "Identifiers for all properties contained in the logger_clear_log group.", .size = sizeof(bcmolt_logger_clear_log_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_logger_clear_log_id_string_table } };
+bcmcli_enum_val bcmolt_logger_key_id_string_table[] = { { .name = "reserved", .val = BCMOLT_LOGGER_KEY_ID_RESERVED }, { .name = "file_id", .val = BCMOLT_LOGGER_KEY_ID_FILE_ID }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_logger_key_id = { .name = "bcmolt_logger_key_id", .descr = "Identifiers for all properties contained in the logger_key group.", .size = sizeof(bcmolt_logger_key_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_logger_key_id_string_table } };
+bcmcli_enum_val bcmolt_logger_stat_alarm_cleared_id_string_table[] = { { .name = "stat", .val = BCMOLT_LOGGER_STAT_ALARM_CLEARED_ID_STAT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_logger_stat_alarm_cleared_id = { .name = "bcmolt_logger_stat_alarm_cleared_id", .descr = "Identifiers for all properties contained in the logger_stat_alarm_cleared group.", .size = sizeof(bcmolt_logger_stat_alarm_cleared_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_logger_stat_alarm_cleared_id_string_table } };
+bcmcli_enum_val bcmolt_logger_stat_alarm_raised_id_string_table[] = { { .name = "stat", .val = BCMOLT_LOGGER_STAT_ALARM_RAISED_ID_STAT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_logger_stat_alarm_raised_id = { .name = "bcmolt_logger_stat_alarm_raised_id", .descr = "Identifiers for all properties contained in the logger_stat_alarm_raised group.", .size = sizeof(bcmolt_logger_stat_alarm_raised_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_logger_stat_alarm_raised_id_string_table } };
+bcmcli_enum_val bcmolt_logger_stat_cfg_id_string_table[] = { { .name = "cfg", .val = BCMOLT_LOGGER_STAT_CFG_ID_CFG }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_logger_stat_cfg_id = { .name = "bcmolt_logger_stat_cfg_id", .descr = "Identifiers for all properties contained in the logger_stat_cfg group.", .size = sizeof(bcmolt_logger_stat_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_logger_stat_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_logger_stat_id_string_table[] = { { .name = "lines_in_log", .val = BCMOLT_LOGGER_STAT_ID_LINES_IN_LOG }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_logger_stat_id = { .name = "bcmolt_logger_stat_id", .descr = "Identifiers for all properties contained in the logger_stat group.", .size = sizeof(bcmolt_logger_stat_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_logger_stat_id_string_table } };
+bcmcli_enum_val bcmolt_mac_table_miss_fallback_string_table[] = { { .name = "drop", .val = BCMOLT_MAC_TABLE_MISS_FALLBACK_DROP }, { .name = "default_flow", .val = BCMOLT_MAC_TABLE_MISS_FALLBACK_DEFAULT_FLOW }, { .name = "vid", .val = BCMOLT_MAC_TABLE_MISS_FALLBACK_VID }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_mac_table_miss_fallback = { .name = "bcmolt_mac_table_miss_fallback", .descr = "MAC table miss fallback", .size = sizeof(bcmolt_mac_table_miss_fallback), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_mac_table_miss_fallback_string_table } };
+bcmcli_enum_val bcmolt_mac_table_learning_mode_string_table[] = { { .name = "normal", .val = BCMOLT_MAC_TABLE_LEARNING_MODE_NORMAL }, { .name = "move", .val = BCMOLT_MAC_TABLE_LEARNING_MODE_MOVE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_mac_table_learning_mode = { .name = "bcmolt_mac_table_learning_mode", .descr = "MAC table Learning mode", .size = sizeof(bcmolt_mac_table_learning_mode), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_mac_table_learning_mode_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_mac_table_configuration_fields[] = { { .name = "miss_fallback", .descr = "Behavior for downstream traffic when MAC table lookup fails.", .offset = offsetof(bcmolt_mac_table_configuration, miss_fallback), .type = &type_descr_bcmolt_mac_table_miss_fallback }, { .name = "default_flow_id", .descr = "Flow ID assigned to upstream traffic on a MAC table miss if miss_fallback is set to default_flow.", .offset = offsetof(bcmolt_mac_table_configuration, default_flow_id), .type = &type_descr_uint16_t }, { .name = "aging_time", .descr = "Aging time in seconds.  If no traffic is seen for a given MAC address / VID for this length of time, the entry will age and the host will be notified via indication.", .offset = offsetof(bcmolt_mac_table_configuration, aging_time), .type = &type_descr_uint32_t }, { .name = "learning_mode", .descr = "Learning table mode.", .offset = offsetof(bcmolt_mac_table_configuration, learning_mode), .type = &type_descr_bcmolt_mac_table_learning_mode }, { .name = "automatic_mac_learning", .descr = "If enabled, new MAC table entries are added automatically the first time a new MAC address/VID combination is seen.  If disabled, no actions are taken automatically except notifying the host via indication.", .offset = offsetof(bcmolt_mac_table_configuration, automatic_mac_learning), .type = &type_descr_bcmolt_control_state }, { .name = "automatic_mac_aging", .descr = "If enabled, MAC table entries are deleted automatically when they age.  If disabled, no actions are taken automatically except notifying the host via indication.", .offset = offsetof(bcmolt_mac_table_configuration, automatic_mac_aging), .type = &type_descr_bcmolt_control_state }, { .name = "automatic_mac_move", .descr = "Only applicable if learning_mode is move.  If enabled, MAC table entries are automatically updated when a MAC move condition is encountered.  If disabled, no actions are taken automatically except notifying the host via indication.", .offset = offsetof(bcmolt_mac_table_configuration, automatic_mac_move), .type = &type_descr_bcmolt_control_state }, { .name = "automatic_static_mode", .descr = "If enabled, all MAC entries that are added automatically via automatic_mac_learning and automatic_mac_move will be treated as static (not aging).", .offset = offsetof(bcmolt_mac_table_configuration, automatic_static_mode), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_mac_table_configuration = { .name = "bcmolt_mac_table_configuration", .descr = "MAC table configuration", .size = sizeof(bcmolt_mac_table_configuration), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_mac_table_configuration_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_mac_table_configuration_fields } } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_macaddress_list_u32 = { .name = "bcmolt_macaddress_list_u32", .descr = "Variable-length list of MacAddress", .size = sizeof(bcmolt_macaddress_list_u32), .base_type = BCMOLT_BASE_TYPE_ID_ARR_DYN, .x = { .arr_dyn = { .elem_type = &type_descr_bcmos_mac_address, .len_size = 4, .max_size = DEFAULT_DYN_ARR_MAX_SIZE / sizeof(bcmos_mac_address) } } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_macaddress_list_u32_max_2048 = { .name = "bcmolt_macaddress_list_u32_max_2048", .descr = "Variable-length list of MacAddress", .size = sizeof(bcmolt_macaddress_list_u32_max_2048), .base_type = BCMOLT_BASE_TYPE_ID_ARR_DYN, .x = { .arr_dyn = { .elem_type = &type_descr_bcmos_mac_address, .len_size = 4, .max_size = 2048 } } };
+bcmcli_enum_val bcmolt_mapping_tag_method_string_table[] = { { .name = "outer_vid", .val = BCMOLT_MAPPING_TAG_METHOD_OUTER_VID }, { .name = "inner_vid", .val = BCMOLT_MAPPING_TAG_METHOD_INNER_VID }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_mapping_tag_method = { .name = "bcmolt_mapping_tag_method", .descr = "Mapping tag method", .size = sizeof(bcmolt_mapping_tag_method), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_mapping_tag_method_string_table } };
+bcmcli_enum_val bcmolt_nni_auto_cfg_id_string_table[] = { { .name = "stat_alarm_cleared", .val = BCMOLT_NNI_AUTO_CFG_ID_STAT_ALARM_CLEARED }, { .name = "stat_alarm_raised", .val = BCMOLT_NNI_AUTO_CFG_ID_STAT_ALARM_RAISED }, { .name = "status_changed", .val = BCMOLT_NNI_AUTO_CFG_ID_STATUS_CHANGED }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_nni_auto_cfg_id = { .name = "bcmolt_nni_auto_cfg_id", .descr = "Identifiers for all properties contained in the nni_auto_cfg group.", .size = sizeof(bcmolt_nni_auto_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_nni_auto_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_nni_cfg_id_string_table[] = { { .name = "remote_loopback", .val = BCMOLT_NNI_CFG_ID_REMOTE_LOOPBACK }, { .name = "line_loopback", .val = BCMOLT_NNI_CFG_ID_LINE_LOOPBACK }, { .name = "mac_address", .val = BCMOLT_NNI_CFG_ID_MAC_ADDRESS }, { .name = "nni_status", .val = BCMOLT_NNI_CFG_ID_NNI_STATUS }, { .name = "nni_backup_status", .val = BCMOLT_NNI_CFG_ID_NNI_BACKUP_STATUS }, { .name = "active_nni", .val = BCMOLT_NNI_CFG_ID_ACTIVE_NNI }, { .name = "nni_status_polling_interval_ms", .val = BCMOLT_NNI_CFG_ID_NNI_STATUS_POLLING_INTERVAL_MS }, { .name = "autoswitch", .val = BCMOLT_NNI_CFG_ID_AUTOSWITCH }, { .name = "flow_control", .val = BCMOLT_NNI_CFG_ID_FLOW_CONTROL }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_nni_cfg_id = { .name = "bcmolt_nni_cfg_id", .descr = "Identifiers for all properties contained in the nni_cfg group.", .size = sizeof(bcmolt_nni_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_nni_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_nni_connection_string_table[] = { { .name = "primary", .val = BCMOLT_NNI_CONNECTION_PRIMARY }, { .name = "backup", .val = BCMOLT_NNI_CONNECTION_BACKUP }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_nni_connection = { .name = "bcmolt_nni_connection", .descr = "NNI Connection", .size = sizeof(bcmolt_nni_connection), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_nni_connection_string_table } };
+bcmcli_enum_val bcmolt_nni_key_id_string_table[] = { { .name = "pon_ni", .val = BCMOLT_NNI_KEY_ID_PON_NI }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_nni_key_id = { .name = "bcmolt_nni_key_id", .descr = "Identifiers for all properties contained in the nni_key group.", .size = sizeof(bcmolt_nni_key_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_nni_key_id_string_table } };
+bcmcli_enum_val bcmolt_trivalent_string_table[] = { { .name = "false", .val = BCMOLT_TRIVALENT_FALSE }, { .name = "true", .val = BCMOLT_TRIVALENT_TRUE }, { .name = "not_applicable", .val = BCMOLT_TRIVALENT_NOT_APPLICABLE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_trivalent = { .name = "bcmolt_trivalent", .descr = "Trivalent", .size = sizeof(bcmolt_trivalent), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_trivalent_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_nni_link_status_fields[] = { { .name = "link_status", .descr = "The local and remote partners are abled and ready to transmit/receive traffic.", .offset = offsetof(bcmolt_nni_link_status, link_status), .type = &type_descr_bcmolt_trivalent }, { .name = "signal_detected", .descr = "Serdes controller has detected energy on the line.  debugging purpose.", .offset = offsetof(bcmolt_nni_link_status, signal_detected), .type = &type_descr_bcmolt_trivalent }, { .name = "pmd_locked", .descr = "Indicates PMD locked.  debugging purpose.  If this is true, but the links status is not, that means the transceiver is not enabled.", .offset = offsetof(bcmolt_nni_link_status, pmd_locked), .type = &type_descr_bcmolt_trivalent } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_nni_link_status = { .name = "bcmolt_nni_link_status", .descr = "NNI Link Status", .size = sizeof(bcmolt_nni_link_status), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_nni_link_status_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_nni_link_status_fields } } };
+bcmcli_enum_val bcmolt_nni_serdes_cfg_id_string_table[] = { { .name = "rx_vga", .val = BCMOLT_NNI_SERDES_CFG_ID_RX_VGA }, { .name = "rx_pf", .val = BCMOLT_NNI_SERDES_CFG_ID_RX_PF }, { .name = "rx_lfpf", .val = BCMOLT_NNI_SERDES_CFG_ID_RX_LFPF }, { .name = "rx_dfe1", .val = BCMOLT_NNI_SERDES_CFG_ID_RX_DFE1 }, { .name = "rx_dfe2", .val = BCMOLT_NNI_SERDES_CFG_ID_RX_DFE2 }, { .name = "rx_dfe3", .val = BCMOLT_NNI_SERDES_CFG_ID_RX_DFE3 }, { .name = "rx_dfe4", .val = BCMOLT_NNI_SERDES_CFG_ID_RX_DFE4 }, { .name = "rx_dfe5", .val = BCMOLT_NNI_SERDES_CFG_ID_RX_DFE5 }, { .name = "tx_pre", .val = BCMOLT_NNI_SERDES_CFG_ID_TX_PRE }, { .name = "tx_main", .val = BCMOLT_NNI_SERDES_CFG_ID_TX_MAIN }, { .name = "tx_post1", .val = BCMOLT_NNI_SERDES_CFG_ID_TX_POST1 }, { .name = "tx_post2", .val = BCMOLT_NNI_SERDES_CFG_ID_TX_POST2 }, { .name = "tx_post3", .val = BCMOLT_NNI_SERDES_CFG_ID_TX_POST3 }, { .name = "tx_amp", .val = BCMOLT_NNI_SERDES_CFG_ID_TX_AMP }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_nni_serdes_cfg_id = { .name = "bcmolt_nni_serdes_cfg_id", .descr = "Identifiers for all properties contained in the nni_serdes_cfg group.", .size = sizeof(bcmolt_nni_serdes_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_nni_serdes_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_nni_serdes_key_id_string_table[] = { { .name = "pon_ni", .val = BCMOLT_NNI_SERDES_KEY_ID_PON_NI }, { .name = "instance", .val = BCMOLT_NNI_SERDES_KEY_ID_INSTANCE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_nni_serdes_key_id = { .name = "bcmolt_nni_serdes_key_id", .descr = "Identifiers for all properties contained in the nni_serdes_key group.", .size = sizeof(bcmolt_nni_serdes_key_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_nni_serdes_key_id_string_table } };
+bcmcli_enum_val bcmolt_nni_stat_alarm_cleared_id_string_table[] = { { .name = "stat", .val = BCMOLT_NNI_STAT_ALARM_CLEARED_ID_STAT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_nni_stat_alarm_cleared_id = { .name = "bcmolt_nni_stat_alarm_cleared_id", .descr = "Identifiers for all properties contained in the nni_stat_alarm_cleared group.", .size = sizeof(bcmolt_nni_stat_alarm_cleared_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_nni_stat_alarm_cleared_id_string_table } };
+bcmcli_enum_val bcmolt_nni_stat_alarm_raised_id_string_table[] = { { .name = "stat", .val = BCMOLT_NNI_STAT_ALARM_RAISED_ID_STAT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_nni_stat_alarm_raised_id = { .name = "bcmolt_nni_stat_alarm_raised_id", .descr = "Identifiers for all properties contained in the nni_stat_alarm_raised group.", .size = sizeof(bcmolt_nni_stat_alarm_raised_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_nni_stat_alarm_raised_id_string_table } };
+bcmcli_enum_val bcmolt_nni_stat_cfg_id_string_table[] = { { .name = "cfg", .val = BCMOLT_NNI_STAT_CFG_ID_CFG }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_nni_stat_cfg_id = { .name = "bcmolt_nni_stat_cfg_id", .descr = "Identifiers for all properties contained in the nni_stat_cfg group.", .size = sizeof(bcmolt_nni_stat_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_nni_stat_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_nni_stat_id_string_table[] = { { .name = "rx_frames_64", .val = BCMOLT_NNI_STAT_ID_RX_FRAMES_64 }, { .name = "rx_frames_65_127", .val = BCMOLT_NNI_STAT_ID_RX_FRAMES_65_127 }, { .name = "rx_frames_128_255", .val = BCMOLT_NNI_STAT_ID_RX_FRAMES_128_255 }, { .name = "rx_frames_256_511", .val = BCMOLT_NNI_STAT_ID_RX_FRAMES_256_511 }, { .name = "rx_frames_512_1023", .val = BCMOLT_NNI_STAT_ID_RX_FRAMES_512_1023 }, { .name = "rx_frames_1024_1518", .val = BCMOLT_NNI_STAT_ID_RX_FRAMES_1024_1518 }, { .name = "rx_frames_1519_2047", .val = BCMOLT_NNI_STAT_ID_RX_FRAMES_1519_2047 }, { .name = "rx_frames_2048_4095", .val = BCMOLT_NNI_STAT_ID_RX_FRAMES_2048_4095 }, { .name = "rx_frames_4096_9216", .val = BCMOLT_NNI_STAT_ID_RX_FRAMES_4096_9216 }, { .name = "rx_frames_9217_16383", .val = BCMOLT_NNI_STAT_ID_RX_FRAMES_9217_16383 }, { .name = "rx_frames", .val = BCMOLT_NNI_STAT_ID_RX_FRAMES }, { .name = "rx_bytes", .val = BCMOLT_NNI_STAT_ID_RX_BYTES }, { .name = "rx_good_frames", .val = BCMOLT_NNI_STAT_ID_RX_GOOD_FRAMES }, { .name = "rx_unicast_frames", .val = BCMOLT_NNI_STAT_ID_RX_UNICAST_FRAMES }, { .name = "rx_multicast_frames", .val = BCMOLT_NNI_STAT_ID_RX_MULTICAST_FRAMES }, { .name = "rx_broadcast_frames", .val = BCMOLT_NNI_STAT_ID_RX_BROADCAST_FRAMES }, { .name = "rx_fcs_errors", .val = BCMOLT_NNI_STAT_ID_RX_FCS_ERRORS }, { .name = "rx_control_frames", .val = BCMOLT_NNI_STAT_ID_RX_CONTROL_FRAMES }, { .name = "rx_pause_frames", .val = BCMOLT_NNI_STAT_ID_RX_PAUSE_FRAMES }, { .name = "rx_pfc_frames", .val = BCMOLT_NNI_STAT_ID_RX_PFC_FRAMES }, { .name = "rx_unsupported_opcode", .val = BCMOLT_NNI_STAT_ID_RX_UNSUPPORTED_OPCODE }, { .name = "rx_unsupported_da", .val = BCMOLT_NNI_STAT_ID_RX_UNSUPPORTED_DA }, { .name = "rx_alignment_errors", .val = BCMOLT_NNI_STAT_ID_RX_ALIGNMENT_ERRORS }, { .name = "rx_length_out_of_range", .val = BCMOLT_NNI_STAT_ID_RX_LENGTH_OUT_OF_RANGE }, { .name = "rx_code_errors", .val = BCMOLT_NNI_STAT_ID_RX_CODE_ERRORS }, { .name = "rx_oversized_frames", .val = BCMOLT_NNI_STAT_ID_RX_OVERSIZED_FRAMES }, { .name = "rx_jabber_frames", .val = BCMOLT_NNI_STAT_ID_RX_JABBER_FRAMES }, { .name = "rx_mtu_check_errors", .val = BCMOLT_NNI_STAT_ID_RX_MTU_CHECK_ERRORS }, { .name = "rx_promiscuous_frames", .val = BCMOLT_NNI_STAT_ID_RX_PROMISCUOUS_FRAMES }, { .name = "rx_vlan_frames", .val = BCMOLT_NNI_STAT_ID_RX_VLAN_FRAMES }, { .name = "rx_double_vlan_frames", .val = BCMOLT_NNI_STAT_ID_RX_DOUBLE_VLAN_FRAMES }, { .name = "rx_truncated_frames", .val = BCMOLT_NNI_STAT_ID_RX_TRUNCATED_FRAMES }, { .name = "rx_undersize_frames", .val = BCMOLT_NNI_STAT_ID_RX_UNDERSIZE_FRAMES }, { .name = "rx_fragmented_frames", .val = BCMOLT_NNI_STAT_ID_RX_FRAGMENTED_FRAMES }, { .name = "rx_runt_frames", .val = BCMOLT_NNI_STAT_ID_RX_RUNT_FRAMES }, { .name = "tx_frames_64", .val = BCMOLT_NNI_STAT_ID_TX_FRAMES_64 }, { .name = "tx_frames_65_127", .val = BCMOLT_NNI_STAT_ID_TX_FRAMES_65_127 }, { .name = "tx_frames_128_255", .val = BCMOLT_NNI_STAT_ID_TX_FRAMES_128_255 }, { .name = "tx_frames_256_511", .val = BCMOLT_NNI_STAT_ID_TX_FRAMES_256_511 }, { .name = "tx_frames_512_1023", .val = BCMOLT_NNI_STAT_ID_TX_FRAMES_512_1023 }, { .name = "tx_frames_1024_1518", .val = BCMOLT_NNI_STAT_ID_TX_FRAMES_1024_1518 }, { .name = "tx_frames_1519_2047", .val = BCMOLT_NNI_STAT_ID_TX_FRAMES_1519_2047 }, { .name = "tx_frames_2048_4095", .val = BCMOLT_NNI_STAT_ID_TX_FRAMES_2048_4095 }, { .name = "tx_frames_4096_9216", .val = BCMOLT_NNI_STAT_ID_TX_FRAMES_4096_9216 }, { .name = "tx_frames_9217_16383", .val = BCMOLT_NNI_STAT_ID_TX_FRAMES_9217_16383 }, { .name = "tx_frames", .val = BCMOLT_NNI_STAT_ID_TX_FRAMES }, { .name = "tx_bytes", .val = BCMOLT_NNI_STAT_ID_TX_BYTES }, { .name = "tx_good_frames", .val = BCMOLT_NNI_STAT_ID_TX_GOOD_FRAMES }, { .name = "tx_unicast_frames", .val = BCMOLT_NNI_STAT_ID_TX_UNICAST_FRAMES }, { .name = "tx_multicast_frames", .val = BCMOLT_NNI_STAT_ID_TX_MULTICAST_FRAMES }, { .name = "tx_broadcast_frames", .val = BCMOLT_NNI_STAT_ID_TX_BROADCAST_FRAMES }, { .name = "tx_pause_frames", .val = BCMOLT_NNI_STAT_ID_TX_PAUSE_FRAMES }, { .name = "tx_pfc_frames", .val = BCMOLT_NNI_STAT_ID_TX_PFC_FRAMES }, { .name = "tx_jabber_frames", .val = BCMOLT_NNI_STAT_ID_TX_JABBER_FRAMES }, { .name = "tx_fcs_errors", .val = BCMOLT_NNI_STAT_ID_TX_FCS_ERRORS }, { .name = "tx_control_frames", .val = BCMOLT_NNI_STAT_ID_TX_CONTROL_FRAMES }, { .name = "tx_oversize_frames", .val = BCMOLT_NNI_STAT_ID_TX_OVERSIZE_FRAMES }, { .name = "tx_fragmented_frames", .val = BCMOLT_NNI_STAT_ID_TX_FRAGMENTED_FRAMES }, { .name = "tx_error_frames", .val = BCMOLT_NNI_STAT_ID_TX_ERROR_FRAMES }, { .name = "tx_vlan_frames", .val = BCMOLT_NNI_STAT_ID_TX_VLAN_FRAMES }, { .name = "tx_double_vlan_frames", .val = BCMOLT_NNI_STAT_ID_TX_DOUBLE_VLAN_FRAMES }, { .name = "tx_runt_frames", .val = BCMOLT_NNI_STAT_ID_TX_RUNT_FRAMES }, { .name = "tx_underrun_frames", .val = BCMOLT_NNI_STAT_ID_TX_UNDERRUN_FRAMES }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_nni_stat_id = { .name = "bcmolt_nni_stat_id", .descr = "Identifiers for all properties contained in the nni_stat group.", .size = sizeof(bcmolt_nni_stat_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_nni_stat_id_string_table } };
+bcmcli_enum_val bcmolt_nni_status_changed_id_string_table[] = { { .name = "new_status", .val = BCMOLT_NNI_STATUS_CHANGED_ID_NEW_STATUS }, { .name = "link", .val = BCMOLT_NNI_STATUS_CHANGED_ID_LINK }, { .name = "previous_active", .val = BCMOLT_NNI_STATUS_CHANGED_ID_PREVIOUS_ACTIVE }, { .name = "new_active", .val = BCMOLT_NNI_STATUS_CHANGED_ID_NEW_ACTIVE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_nni_status_changed_id = { .name = "bcmolt_nni_status_changed_id", .descr = "Identifiers for all properties contained in the nni_status_changed group.", .size = sizeof(bcmolt_nni_status_changed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_nni_status_changed_id_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_oam_heartbeat_config_fields[] = { { .name = "send_period", .descr = "The period at which to send OAM info frames, and expect info responses on this link (in seconds).", .offset = offsetof(bcmolt_oam_heartbeat_config, send_period), .type = &type_descr_uint16_t }, { .name = "transmit_frame", .descr = "Transmit frame octets", .offset = offsetof(bcmolt_oam_heartbeat_config, transmit_frame), .type = &type_descr_bcmolt_u8_list_u16 }, { .name = "ignored_receive_frame_template", .descr = "Ignored receive frame template", .offset = offsetof(bcmolt_oam_heartbeat_config, ignored_receive_frame_template), .type = &type_descr_bcmolt_ethernet_frame_masked }, { .name = "receive_timeout", .descr = "The time (in seconds) to report OAM timeout after the last received OAM frame.", .offset = offsetof(bcmolt_oam_heartbeat_config, receive_timeout), .type = &type_descr_uint16_t }, { .name = "maximum_receive_size", .descr = "Maximum size of received frames.  Setting this value to zero will cause all OAM frames to be dropped.", .offset = offsetof(bcmolt_oam_heartbeat_config, maximum_receive_size), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_oam_heartbeat_config = { .name = "bcmolt_oam_heartbeat_config", .descr = "OAM heartbeat configuration", .size = sizeof(bcmolt_oam_heartbeat_config), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_oam_heartbeat_config_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_oam_heartbeat_config_fields } } };
+bcmcli_enum_val bcmolt_odn_class_string_table[] = { { .name = "n1", .val = BCMOLT_ODN_CLASS_N1 }, { .name = "n2", .val = BCMOLT_ODN_CLASS_N2 }, { .name = "e1", .val = BCMOLT_ODN_CLASS_E1 }, { .name = "e2", .val = BCMOLT_ODN_CLASS_E2 }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_odn_class = { .name = "bcmolt_odn_class", .descr = "ODN Class", .size = sizeof(bcmolt_odn_class), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_odn_class_string_table } };
+bcmcli_enum_val bcmolt_omci_port_id_operation_string_table[] = { { .name = "configure", .val = BCMOLT_OMCI_PORT_ID_OPERATION_CONFIGURE }, { .name = "remove", .val = BCMOLT_OMCI_PORT_ID_OPERATION_REMOVE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_omci_port_id_operation = { .name = "bcmolt_omci_port_id_operation", .descr = "OMCI Port ID operation", .size = sizeof(bcmolt_omci_port_id_operation), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_omci_port_id_operation_string_table } };
+bcmcli_enum_val bcmolt_onu_operation_string_table[] = { { .name = "inactive", .val = BCMOLT_ONU_OPERATION_INACTIVE }, { .name = "active", .val = BCMOLT_ONU_OPERATION_ACTIVE }, { .name = "disable", .val = BCMOLT_ONU_OPERATION_DISABLE }, { .name = "enable", .val = BCMOLT_ONU_OPERATION_ENABLE }, { .name = "active_standby", .val = BCMOLT_ONU_OPERATION_ACTIVE_STANDBY }, { .name = "awake_free", .val = BCMOLT_ONU_OPERATION_AWAKE_FREE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_onu_operation = { .name = "bcmolt_onu_operation", .descr = "ONU operation", .size = sizeof(bcmolt_onu_operation), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_onu_operation_string_table } };
+bcmcli_enum_val bcmolt_onu_power_level_string_table[] = { { .name = "increase", .val = BCMOLT_ONU_POWER_LEVEL_INCREASE }, { .name = "decrease", .val = BCMOLT_ONU_POWER_LEVEL_DECREASE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_onu_power_level = { .name = "bcmolt_onu_power_level", .descr = "ONU Power level", .size = sizeof(bcmolt_onu_power_level), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_onu_power_level_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_onu_power_management_configuration_fields[] = { { .name = "ilowpower", .descr = "The maximum amount of time any ONU on this NI may spend in a low power state in units of 125us.", .offset = offsetof(bcmolt_onu_power_management_configuration, ilowpower), .type = &type_descr_uint32_t }, { .name = "iaware", .descr = "The minimum amount of time every ONU on his NI must spend in an aware state in units of 125us.", .offset = offsetof(bcmolt_onu_power_management_configuration, iaware), .type = &type_descr_uint32_t }, { .name = "itransinit", .descr = "The maximum amount of time required by any ONU on this NI to power up its transmitter only from a low power state in units of 125us.", .offset = offsetof(bcmolt_onu_power_management_configuration, itransinit), .type = &type_descr_uint16_t }, { .name = "itxinit", .descr = "The maximum amount of time required by any ONU on this NI to power up its transceiver (transmitter + receiver) from a low power state in units of 125us.", .offset = offsetof(bcmolt_onu_power_management_configuration, itxinit), .type = &type_descr_uint16_t }, { .name = "irxoff", .descr = "The maximum amount of time any ONU on this NI may spend with its receiver disabled in units of 125us.", .offset = offsetof(bcmolt_onu_power_management_configuration, irxoff), .type = &type_descr_uint32_t }, { .name = "low_power_clobi", .descr = "The number of consecutive non-contiguous missing allocations to allow before raising the LOSi/LOFi/LOBi alarms on any ONU on this NI.", .offset = offsetof(bcmolt_onu_power_management_configuration, low_power_clobi), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_onu_power_management_configuration = { .name = "bcmolt_onu_power_management_configuration", .descr = "Configuration parameters for the ONU power management feature. These should match the parameters sent to the ONU via OMCI.", .size = sizeof(bcmolt_onu_power_management_configuration), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_onu_power_management_configuration_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_onu_power_management_configuration_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_onu_tuning_configuration_fields[] = { { .name = "tsource", .descr = "Tsource timer in msec", .offset = offsetof(bcmolt_onu_tuning_configuration, tsource), .type = &type_descr_uint32_t }, { .name = "ttarget", .descr = "Ttarget timer in msec", .offset = offsetof(bcmolt_onu_tuning_configuration, ttarget), .type = &type_descr_uint32_t }, { .name = "request_registration_required", .descr = "is request registration part of the tuning in process", .offset = offsetof(bcmolt_onu_tuning_configuration, request_registration_required), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_onu_tuning_configuration = { .name = "bcmolt_onu_tuning_configuration", .descr = "onu tuning configuration", .size = sizeof(bcmolt_onu_tuning_configuration), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_onu_tuning_configuration_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_onu_tuning_configuration_fields } } };
+bcmcli_enum_val bcmolt_tc_protocol_string_table[] = { { .name = "tc_layer_protocol_g_987_p_3", .val = BCMOLT_TC_PROTOCOL_TC_LAYER_PROTOCOL_G_987_P_3 }, { .name = "tc_layer_protocol_g_989_p_3", .val = BCMOLT_TC_PROTOCOL_TC_LAYER_PROTOCOL_G_989_P_3 }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_tc_protocol = { .name = "bcmolt_tc_protocol", .descr = "TC layer protocol", .size = sizeof(bcmolt_tc_protocol), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_tc_protocol_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_pon_id_fields[] = { { .name = "administrative_label", .descr = "MSB 28 bit of the PON ID", .offset = offsetof(bcmolt_pon_id, administrative_label), .type = &type_descr_uint32_t }, { .name = "dwlch_id", .descr = "LSB 4 bits of the PON ID", .offset = offsetof(bcmolt_pon_id, dwlch_id), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_pon_id = { .name = "bcmolt_pon_id", .descr = "Identifies the TWDM channel termination within a certain domain", .size = sizeof(bcmolt_pon_id), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_pon_id_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_pon_id_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_operation_control_fields[] = { { .name = "re", .descr = "Indicates whether the Transmit Optical Level (TOL) contains the launch power of the OTL (RE=0) or of a reach extender (RE=1)", .offset = offsetof(bcmolt_operation_control, re), .type = &type_descr_uint8_t }, { .name = "odn_class", .descr = "Identifies the nominal optical parameters of the transceiver according to the ODN Optical Path Loss (OPL)", .offset = offsetof(bcmolt_operation_control, odn_class), .type = &type_descr_bcmolt_odn_class }, { .name = "ds_fec_mode", .descr = "Enable/Disable the downstream FEC. Default is Enable. Attribute can be set only when PON NI state is Inactive.", .offset = offsetof(bcmolt_operation_control, ds_fec_mode), .type = &type_descr_bcmolt_control_state }, { .name = "protocol", .descr = "When system mode is NGPON2, this parameter Indicate the TC layer protocol: ITU-T G.989.3 or ITU-T G.987.3", .offset = offsetof(bcmolt_operation_control, protocol), .type = &type_descr_bcmolt_tc_protocol }, { .name = "ds_link_type", .descr = "Optical link type (Unspecified, A, B, Both)", .offset = offsetof(bcmolt_operation_control, ds_link_type), .type = &type_descr_bcmolt_link_type }, { .name = "pon_id", .descr = "Identifies the TWDM channel termination within a certain domain", .offset = offsetof(bcmolt_operation_control, pon_id), .type = &type_descr_bcmolt_pon_id }, { .name = "c", .descr = "Transmit optical level (TOL) reference point indicator: S/R-CG or S/R-CP", .offset = offsetof(bcmolt_operation_control, c), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_operation_control = { .name = "bcmolt_operation_control", .descr = "Operation Control", .size = sizeof(bcmolt_operation_control), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_operation_control_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_operation_control_fields } } };
+bcmcli_enum_val bcmolt_packet_injection_error_string_table[] = { { .name = "gem_port_not_active", .val = BCMOLT_PACKET_INJECTION_ERROR_GEM_PORT_NOT_ACTIVE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_packet_injection_error = { .name = "bcmolt_packet_injection_error", .descr = "Packet Injection Error", .size = sizeof(bcmolt_packet_injection_error), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_packet_injection_error_string_table } };
+bcmcli_enum_val bcmolt_packet_type_string_table[] = { { .name = "cpu", .val = BCMOLT_PACKET_TYPE_CPU }, { .name = "omci", .val = BCMOLT_PACKET_TYPE_OMCI }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_packet_type = { .name = "bcmolt_packet_type", .descr = "packet type", .size = sizeof(bcmolt_packet_type), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_packet_type_string_table } };
+bcmcli_enum_val bcmolt_password_authentication_fail_reason_string_table[] = { { .name = "none", .val = BCMOLT_PASSWORD_AUTHENTICATION_FAIL_REASON_NONE }, { .name = "password_inconsistency", .val = BCMOLT_PASSWORD_AUTHENTICATION_FAIL_REASON_PASSWORD_INCONSISTENCY }, { .name = "password_mismatch", .val = BCMOLT_PASSWORD_AUTHENTICATION_FAIL_REASON_PASSWORD_MISMATCH }, { .name = "password_authentication_timeout", .val = BCMOLT_PASSWORD_AUTHENTICATION_FAIL_REASON_PASSWORD_AUTHENTICATION_TIMEOUT }, { .name = "onu_alarm", .val = BCMOLT_PASSWORD_AUTHENTICATION_FAIL_REASON_ONU_ALARM }, { .name = "los_event", .val = BCMOLT_PASSWORD_AUTHENTICATION_FAIL_REASON_LOS_EVENT }, { .name = "disable_event", .val = BCMOLT_PASSWORD_AUTHENTICATION_FAIL_REASON_DISABLE_EVENT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_password_authentication_fail_reason = { .name = "bcmolt_password_authentication_fail_reason", .descr = "Password authentication fail reason", .size = sizeof(bcmolt_password_authentication_fail_reason), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_password_authentication_fail_reason_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_periodic_standby_pon_monitoring_fields[] = { { .name = "interval", .descr = "interval in ms", .offset = offsetof(bcmolt_periodic_standby_pon_monitoring, interval), .type = &type_descr_uint32_t }, { .name = "control", .descr = "control", .offset = offsetof(bcmolt_periodic_standby_pon_monitoring, control), .type = &type_descr_bcmolt_control_state } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_periodic_standby_pon_monitoring = { .name = "bcmolt_periodic_standby_pon_monitoring", .descr = "Periodic Standby PON monitoring", .size = sizeof(bcmolt_periodic_standby_pon_monitoring), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_periodic_standby_pon_monitoring_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_periodic_standby_pon_monitoring_fields } } };
+bcmcli_enum_val bcmolt_polarity_string_table[] = { { .name = "low", .val = BCMOLT_POLARITY_LOW }, { .name = "high", .val = BCMOLT_POLARITY_HIGH }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_polarity = { .name = "bcmolt_polarity", .descr = "Polarity", .size = sizeof(bcmolt_polarity), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_polarity_string_table } };
+bcmcli_enum_val bcmolt_polling_interval_string_table[] = { { .name = "polling_disabled", .val = BCMOLT_POLLING_INTERVAL_POLLING_DISABLED }, { .name = "us_500", .val = BCMOLT_POLLING_INTERVAL_US_500 }, { .name = "ms_1", .val = BCMOLT_POLLING_INTERVAL_MS_1 }, { .name = "ms_2", .val = BCMOLT_POLLING_INTERVAL_MS_2 }, { .name = "ms_4", .val = BCMOLT_POLLING_INTERVAL_MS_4 }, { .name = "ms_8", .val = BCMOLT_POLLING_INTERVAL_MS_8 }, { .name = "ms_16", .val = BCMOLT_POLLING_INTERVAL_MS_16 }, { .name = "automatic", .val = BCMOLT_POLLING_INTERVAL_AUTOMATIC }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_polling_interval = { .name = "bcmolt_polling_interval", .descr = "Polling Interval", .size = sizeof(bcmolt_polling_interval), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_polling_interval_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_pon_aggregate_shaper_fields[] = { { .name = "bandwidth_kbps", .descr = "Rate in kbps, 0 is disabled, If rate is >1G then use 256kbps increments, if rate is < 1G then use 64kbps increments. ", .offset = offsetof(bcmolt_pon_aggregate_shaper, bandwidth_kbps), .type = &type_descr_uint32_t }, { .name = "mbs_kB", .descr = "Maximum Burst Size in KB : range is 2KB to 4MB in 1KB increments. ", .offset = offsetof(bcmolt_pon_aggregate_shaper, mbs_kB), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_pon_aggregate_shaper = { .name = "bcmolt_pon_aggregate_shaper", .descr = "Port Level Shaper Configuration:", .size = sizeof(bcmolt_pon_aggregate_shaper), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_pon_aggregate_shaper_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_pon_aggregate_shaper_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_pon_alloc_sla_fields[] = { { .name = "cbr_rt_bw", .descr = "CBR Real Time Bandwidth which require shaping of the bandwidth allocations in a fine granularity. ", .offset = offsetof(bcmolt_pon_alloc_sla, cbr_rt_bw), .type = &type_descr_uint32_t }, { .name = "cbr_nrt_bw", .descr = "Fixed Bandwidth with no critical requirement of shaping", .offset = offsetof(bcmolt_pon_alloc_sla, cbr_nrt_bw), .type = &type_descr_uint32_t }, { .name = "guaranteed_bw", .descr = "Dynamic bandwidth which the OLT is committed to allocate upon demand", .offset = offsetof(bcmolt_pon_alloc_sla, guaranteed_bw), .type = &type_descr_uint32_t }, { .name = "maximum_bw", .descr = "Maximum allocated bandwidth allowed for this alloc ID", .offset = offsetof(bcmolt_pon_alloc_sla, maximum_bw), .type = &type_descr_uint32_t }, { .name = "additional_bw_eligibility", .descr = "Alloc ID additional BW eligibility", .offset = offsetof(bcmolt_pon_alloc_sla, additional_bw_eligibility), .type = &type_descr_bcmolt_additional_bw_eligibility }, { .name = "cbr_rt_compensation", .descr = "Set to True for AllocID with CBR RT Bandwidth that requires compensation for skipped allocations during quiet window", .offset = offsetof(bcmolt_pon_alloc_sla, cbr_rt_compensation), .type = &type_descr_bcmos_bool }, { .name = "cbr_rt_ap_index", .descr = "Allocation Profile index for CBR RT Bandwidth", .offset = offsetof(bcmolt_pon_alloc_sla, cbr_rt_ap_index), .type = &type_descr_uint8_t }, { .name = "cbr_nrt_ap_index", .descr = "Allocation Profile index for CBR non-RT Bandwidth", .offset = offsetof(bcmolt_pon_alloc_sla, cbr_nrt_ap_index), .type = &type_descr_uint8_t }, { .name = "alloc_type", .descr = "Type of the alloc ID ", .offset = offsetof(bcmolt_pon_alloc_sla, alloc_type), .type = &type_descr_bcmolt_alloc_type }, { .name = "weight", .descr = "Alloc ID Weight used in case of Extended DBA mode", .offset = offsetof(bcmolt_pon_alloc_sla, weight), .type = &type_descr_uint8_t }, { .name = "priority", .descr = "Alloc ID Priority used in case of Extended DBA mode", .offset = offsetof(bcmolt_pon_alloc_sla, priority), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_pon_alloc_sla = { .name = "bcmolt_pon_alloc_sla", .descr = "PON Alloc SLA", .size = sizeof(bcmolt_pon_alloc_sla), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_pon_alloc_sla_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_pon_alloc_sla_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_pon_available_bandwidth_fields[] = { { .name = "cbr_bw", .descr = "Total BW available for CBR real-time traffic (bytes/sec).", .offset = offsetof(bcmolt_pon_available_bandwidth, cbr_bw), .type = &type_descr_uint32_t }, { .name = "total_bw", .descr = "Total BW available for guaranteed traffic (bytes/sec)", .offset = offsetof(bcmolt_pon_available_bandwidth, total_bw), .type = &type_descr_uint32_t }, { .name = "next_onu_total_bw", .descr = "Total BW available for guaranteed traffic after new ONU is added (bytes/sec).", .offset = offsetof(bcmolt_pon_available_bandwidth, next_onu_total_bw), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_pon_available_bandwidth = { .name = "bcmolt_pon_available_bandwidth", .descr = "PON available bandwidth", .size = sizeof(bcmolt_pon_available_bandwidth), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_pon_available_bandwidth_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_pon_available_bandwidth_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_pon_dba_fields[] = { { .name = "sr_reporting_block_size", .descr = "ONU status report block size in bytes", .offset = offsetof(bcmolt_pon_dba, sr_reporting_block_size), .type = &type_descr_uint8_t }, { .name = "dba_mode", .descr = "DBA mode", .offset = offsetof(bcmolt_pon_dba, dba_mode), .type = &type_descr_bcmolt_dba_mode } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_pon_dba = { .name = "bcmolt_pon_dba", .descr = "PON DBA", .size = sizeof(bcmolt_pon_dba), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_pon_dba_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_pon_dba_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_pon_distance_fields[] = { { .name = "max_log_distance", .descr = "Max logical distance of an ONU on the PON", .offset = offsetof(bcmolt_pon_distance, max_log_distance), .type = &type_descr_uint32_t }, { .name = "max_diff_reach", .descr = "Max distance between the closest and farthest ONU", .offset = offsetof(bcmolt_pon_distance, max_diff_reach), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_pon_distance = { .name = "bcmolt_pon_distance", .descr = "PON Distance", .size = sizeof(bcmolt_pon_distance), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_pon_distance_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_pon_distance_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_pon_drift_control_fields[] = { { .name = "drift_interval", .descr = "Interval in milliseconds for ONU transmission drift monitoring (0 = disabled).", .offset = offsetof(bcmolt_pon_drift_control, drift_interval), .type = &type_descr_uint32_t }, { .name = "drift_limit", .descr = "DOWi threshold in bits", .offset = offsetof(bcmolt_pon_drift_control, drift_limit), .type = &type_descr_uint8_t }, { .name = "transmission_control_limit", .descr = "TIWi threshold in bits", .offset = offsetof(bcmolt_pon_drift_control, transmission_control_limit), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_pon_drift_control = { .name = "bcmolt_pon_drift_control", .descr = "PON Drift Control", .size = sizeof(bcmolt_pon_drift_control), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_pon_drift_control_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_pon_drift_control_fields } } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_pon_onu_id_list_u32 = { .name = "bcmolt_pon_onu_id_list_u32", .descr = "Variable-length list of pon_onu_id", .size = sizeof(bcmolt_pon_onu_id_list_u32), .base_type = BCMOLT_BASE_TYPE_ID_ARR_DYN, .x = { .arr_dyn = { .elem_type = &type_descr_uint16_t, .len_size = 4, .max_size = DEFAULT_DYN_ARR_MAX_SIZE / sizeof(bcmolt_pon_onu_id) } } };
+bcmcli_enum_val bcmolt_pon_operation_string_table[] = { { .name = "inactive", .val = BCMOLT_PON_OPERATION_INACTIVE }, { .name = "active_working", .val = BCMOLT_PON_OPERATION_ACTIVE_WORKING }, { .name = "active_standby", .val = BCMOLT_PON_OPERATION_ACTIVE_STANDBY }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_pon_operation = { .name = "bcmolt_pon_operation", .descr = "PON Operation", .size = sizeof(bcmolt_pon_operation), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_pon_operation_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_pon_power_level_fields[] = { { .name = "pls_maximum_allocation_size", .descr = "Max allocation size for PLS transmission", .offset = offsetof(bcmolt_pon_power_level, pls_maximum_allocation_size), .type = &type_descr_uint32_t }, { .name = "mode", .descr = "ONU default power level mode", .offset = offsetof(bcmolt_pon_power_level, mode), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_pon_power_level = { .name = "bcmolt_pon_power_level", .descr = "PON Power Level", .size = sizeof(bcmolt_pon_power_level), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_pon_power_level_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_pon_power_level_fields } } };
+bcmcli_enum_val bcmolt_pon_protection_switching_options_string_table[] = { { .name = "none", .val = BCMOLT_PON_PROTECTION_SWITCHING_OPTIONS_NONE }, { .name = "swift_popup", .val = BCMOLT_PON_PROTECTION_SWITCHING_OPTIONS_SWIFT_POPUP }, { .name = "debug_fast_ranging", .val = BCMOLT_PON_PROTECTION_SWITCHING_OPTIONS_DEBUG_FAST_RANGING }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_pon_protection_switching_options = { .name = "bcmolt_pon_protection_switching_options", .descr = "PON Protection Switching Options", .size = sizeof(bcmolt_pon_protection_switching_options), .base_type = BCMOLT_BASE_TYPE_ID_ENUM_MASK, .x = { .e = bcmolt_pon_protection_switching_options_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_pon_protection_switching_fields[] = { { .name = "timeout", .descr = "LOS switch over timeout in milliseconds", .offset = offsetof(bcmolt_pon_protection_switching, timeout), .type = &type_descr_uint16_t }, { .name = "gpio_pin", .descr = "GPIO pin for input/output signal", .offset = offsetof(bcmolt_pon_protection_switching, gpio_pin), .type = &type_descr_bcmolt_gpio_pin }, { .name = "options", .descr = "Options to control the protection switching process", .offset = offsetof(bcmolt_pon_protection_switching, options), .type = &type_descr_bcmolt_pon_protection_switching_options } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_pon_protection_switching = { .name = "bcmolt_pon_protection_switching", .descr = "GPON protection switching configuration", .size = sizeof(bcmolt_pon_protection_switching), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_pon_protection_switching_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_pon_protection_switching_fields } } };
+bcmcli_enum_val bcmolt_pon_state_string_table[] = { { .name = "inactive", .val = BCMOLT_PON_STATE_INACTIVE }, { .name = "processing", .val = BCMOLT_PON_STATE_PROCESSING }, { .name = "active_working", .val = BCMOLT_PON_STATE_ACTIVE_WORKING }, { .name = "active_standby", .val = BCMOLT_PON_STATE_ACTIVE_STANDBY }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_pon_state = { .name = "bcmolt_pon_state", .descr = "PON state", .size = sizeof(bcmolt_pon_state), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_pon_state_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_pon_status_fields[] = { { .name = "state", .descr = "state", .offset = offsetof(bcmolt_pon_status, state), .type = &type_descr_bcmolt_pon_state }, { .name = "los_status", .descr = "LOS status", .offset = offsetof(bcmolt_pon_status, los_status), .type = &type_descr_bcmolt_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_pon_status = { .name = "bcmolt_pon_status", .descr = "PON Status", .size = sizeof(bcmolt_pon_status), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_pon_status_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_pon_status_fields } } };
+bcmcli_enum_val bcmolt_power_levelling_control_string_table[] = { { .name = "direct", .val = BCMOLT_POWER_LEVELLING_CONTROL_DIRECT }, { .name = "decrease", .val = BCMOLT_POWER_LEVELLING_CONTROL_DECREASE }, { .name = "increase", .val = BCMOLT_POWER_LEVELLING_CONTROL_INCREASE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_power_levelling_control = { .name = "bcmolt_power_levelling_control", .descr = "power levelling control", .size = sizeof(bcmolt_power_levelling_control), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_power_levelling_control_string_table } };
+bcmcli_enum_val bcmolt_power_management_transition_reason_string_table[] = { { .name = "power_management_enabled", .val = BCMOLT_POWER_MANAGEMENT_TRANSITION_REASON_POWER_MANAGEMENT_ENABLED }, { .name = "power_management_disabled", .val = BCMOLT_POWER_MANAGEMENT_TRANSITION_REASON_POWER_MANAGEMENT_DISABLED }, { .name = "sleep_request_awake", .val = BCMOLT_POWER_MANAGEMENT_TRANSITION_REASON_SLEEP_REQUEST_AWAKE }, { .name = "sleep_request_doze", .val = BCMOLT_POWER_MANAGEMENT_TRANSITION_REASON_SLEEP_REQUEST_DOZE }, { .name = "sleep_request_sleep", .val = BCMOLT_POWER_MANAGEMENT_TRANSITION_REASON_SLEEP_REQUEST_SLEEP }, { .name = "sleep_request_watch", .val = BCMOLT_POWER_MANAGEMENT_TRANSITION_REASON_SLEEP_REQUEST_WATCH }, { .name = "teri_expired", .val = BCMOLT_POWER_MANAGEMENT_TRANSITION_REASON_TERI_EXPIRED }, { .name = "talerted_expired", .val = BCMOLT_POWER_MANAGEMENT_TRANSITION_REASON_TALERTED_EXPIRED }, { .name = "alarm", .val = BCMOLT_POWER_MANAGEMENT_TRANSITION_REASON_ALARM }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_power_management_transition_reason = { .name = "bcmolt_power_management_transition_reason", .descr = "The reason that a power management state change occurred.", .size = sizeof(bcmolt_power_management_transition_reason), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_power_management_transition_reason_string_table } };
+bcmcli_enum_val bcmolt_prbs_polynomial_string_table[] = { { .name = "prbs_7", .val = BCMOLT_PRBS_POLYNOMIAL_PRBS_7 }, { .name = "prbs_9", .val = BCMOLT_PRBS_POLYNOMIAL_PRBS_9 }, { .name = "prbs_11", .val = BCMOLT_PRBS_POLYNOMIAL_PRBS_11 }, { .name = "prbs_15", .val = BCMOLT_PRBS_POLYNOMIAL_PRBS_15 }, { .name = "prbs_23", .val = BCMOLT_PRBS_POLYNOMIAL_PRBS_23 }, { .name = "prbs_31", .val = BCMOLT_PRBS_POLYNOMIAL_PRBS_31 }, { .name = "prbs_58", .val = BCMOLT_PRBS_POLYNOMIAL_PRBS_58 }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_prbs_polynomial = { .name = "bcmolt_prbs_polynomial", .descr = "PRBS Polynomial", .size = sizeof(bcmolt_prbs_polynomial), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_prbs_polynomial_string_table } };
+bcmcli_enum_val bcmolt_prbs_checker_mode_string_table[] = { { .name = "self_sync", .val = BCMOLT_PRBS_CHECKER_MODE_SELF_SYNC }, { .name = "initial_seed_mode", .val = BCMOLT_PRBS_CHECKER_MODE_INITIAL_SEED_MODE }, { .name = "initial_seed_mode_2", .val = BCMOLT_PRBS_CHECKER_MODE_INITIAL_SEED_MODE_2 }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_prbs_checker_mode = { .name = "bcmolt_prbs_checker_mode", .descr = "PRBS checker mode", .size = sizeof(bcmolt_prbs_checker_mode), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_prbs_checker_mode_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_prbs_checker_config_fields[] = { { .name = "polynom", .descr = "PRBS polynom type", .offset = offsetof(bcmolt_prbs_checker_config, polynom), .type = &type_descr_bcmolt_prbs_polynomial }, { .name = "mode", .descr = "PRBS LOCK state machine.", .offset = offsetof(bcmolt_prbs_checker_config, mode), .type = &type_descr_bcmolt_prbs_checker_mode }, { .name = "data_invert", .descr = "Invert or no invert for received PRBS data", .offset = offsetof(bcmolt_prbs_checker_config, data_invert), .type = &type_descr_bcmos_bool }, { .name = "control", .descr = "Enable\\Disable the US PRBS checker", .offset = offsetof(bcmolt_prbs_checker_config, control), .type = &type_descr_bcmolt_control_state } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_prbs_checker_config = { .name = "bcmolt_prbs_checker_config", .descr = "PRBS checker config", .size = sizeof(bcmolt_prbs_checker_config), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_prbs_checker_config_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_prbs_checker_config_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_prbs_generator_config_fields[] = { { .name = "polynom", .descr = "PRBS polynom type", .offset = offsetof(bcmolt_prbs_generator_config, polynom), .type = &type_descr_bcmolt_prbs_polynomial }, { .name = "error_insert", .descr = "0 to 1 transition on this signal will insert single bit error in the MSB bit of the data bus.", .offset = offsetof(bcmolt_prbs_generator_config, error_insert), .type = &type_descr_bcmos_bool }, { .name = "invert", .descr = "Invert or no invert for transmitted PRBS data", .offset = offsetof(bcmolt_prbs_generator_config, invert), .type = &type_descr_bcmos_bool }, { .name = "control", .descr = "Enable\\Disable the DS PRBS generator", .offset = offsetof(bcmolt_prbs_generator_config, control), .type = &type_descr_bcmolt_control_state } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_prbs_generator_config = { .name = "bcmolt_prbs_generator_config", .descr = "PRBS Generator config", .size = sizeof(bcmolt_prbs_generator_config), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_prbs_generator_config_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_prbs_generator_config_fields } } };
+bcmcli_enum_val bcmolt_prbs_lock_state_string_table[] = { { .name = "unlocked", .val = BCMOLT_PRBS_LOCK_STATE_UNLOCKED }, { .name = "locked", .val = BCMOLT_PRBS_LOCK_STATE_LOCKED }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_prbs_lock_state = { .name = "bcmolt_prbs_lock_state", .descr = "PRBS Lock State", .size = sizeof(bcmolt_prbs_lock_state), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_prbs_lock_state_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_prbs_status_fields[] = { { .name = "lock_state", .descr = "The state of the PRBS lock", .offset = offsetof(bcmolt_prbs_status, lock_state), .type = &type_descr_bcmolt_prbs_lock_state }, { .name = "error_counts", .descr = "The bit errors observed during the PRBS test.  This field is clear on read.", .offset = offsetof(bcmolt_prbs_status, error_counts), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_prbs_status = { .name = "bcmolt_prbs_status", .descr = "That state of the PRBS test, lock state, and error counters.", .size = sizeof(bcmolt_prbs_status), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_prbs_status_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_prbs_status_fields } } };
+bcmcli_enum_val bcmolt_raman_mitigation_mode_string_table[] = { { .name = "disabled", .val = BCMOLT_RAMAN_MITIGATION_MODE_DISABLED }, { .name = "random", .val = BCMOLT_RAMAN_MITIGATION_MODE_RANDOM }, { .name = "fixed", .val = BCMOLT_RAMAN_MITIGATION_MODE_FIXED }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_raman_mitigation_mode = { .name = "bcmolt_raman_mitigation_mode", .descr = "Raman mitigation mode", .size = sizeof(bcmolt_raman_mitigation_mode), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_raman_mitigation_mode_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_ranging_control_configuration_fields[] = { { .name = "wait_state_1_window_size", .descr = "wait state 1 window size", .offset = offsetof(bcmolt_ranging_control_configuration, wait_state_1_window_size), .type = &type_descr_uint8_t }, { .name = "wait_state_2_window_size", .descr = "wait state 2 window size", .offset = offsetof(bcmolt_ranging_control_configuration, wait_state_2_window_size), .type = &type_descr_uint8_t }, { .name = "wait_after_resync_4", .descr = "wait after resync 4", .offset = offsetof(bcmolt_ranging_control_configuration, wait_after_resync_4), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ranging_control_configuration = { .name = "bcmolt_ranging_control_configuration", .descr = "ranging control configuration", .size = sizeof(bcmolt_ranging_control_configuration), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_ranging_control_configuration_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_ranging_control_configuration_fields } } };
+bcmcli_enum_val bcmolt_ranging_fail_reason_string_table[] = { { .name = "none", .val = BCMOLT_RANGING_FAIL_REASON_NONE }, { .name = "ranging_ack_timeout", .val = BCMOLT_RANGING_FAIL_REASON_RANGING_ACK_TIMEOUT }, { .name = "ploam_data_mismatch", .val = BCMOLT_RANGING_FAIL_REASON_PLOAM_DATA_MISMATCH }, { .name = "ploam_type_mismatch", .val = BCMOLT_RANGING_FAIL_REASON_PLOAM_TYPE_MISMATCH }, { .name = "ploam_onu_id_mismatch", .val = BCMOLT_RANGING_FAIL_REASON_PLOAM_ONU_ID_MISMATCH }, { .name = "drift_exceeded", .val = BCMOLT_RANGING_FAIL_REASON_DRIFT_EXCEEDED }, { .name = "no_ploam_received", .val = BCMOLT_RANGING_FAIL_REASON_NO_PLOAM_RECEIVED }, { .name = "los", .val = BCMOLT_RANGING_FAIL_REASON_LOS }, { .name = "alarms", .val = BCMOLT_RANGING_FAIL_REASON_ALARMS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ranging_fail_reason = { .name = "bcmolt_ranging_fail_reason", .descr = "Ranging fail reason", .size = sizeof(bcmolt_ranging_fail_reason), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_ranging_fail_reason_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_ranging_resync_conditions_fields[] = { { .name = "after_init", .descr = "after init", .offset = offsetof(bcmolt_ranging_resync_conditions, after_init), .type = &type_descr_bcmos_bool }, { .name = "after_no_ed", .descr = "after no ed", .offset = offsetof(bcmolt_ranging_resync_conditions, after_no_ed), .type = &type_descr_bcmos_bool }, { .name = "after_ed", .descr = "after ed", .offset = offsetof(bcmolt_ranging_resync_conditions, after_ed), .type = &type_descr_bcmos_bool }, { .name = "after_no_del", .descr = "after no del", .offset = offsetof(bcmolt_ranging_resync_conditions, after_no_del), .type = &type_descr_bcmos_bool }, { .name = "after_ranging_access", .descr = "after ranging access", .offset = offsetof(bcmolt_ranging_resync_conditions, after_ranging_access), .type = &type_descr_bcmos_bool }, { .name = "med_val", .descr = "med val", .offset = offsetof(bcmolt_ranging_resync_conditions, med_val), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ranging_resync_conditions = { .name = "bcmolt_ranging_resync_conditions", .descr = "ranging resync conditions", .size = sizeof(bcmolt_ranging_resync_conditions), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_ranging_resync_conditions_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_ranging_resync_conditions_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_ranging_rssi_control_fields[] = { { .name = "after_no_ed", .descr = "after no ed", .offset = offsetof(bcmolt_ranging_rssi_control, after_no_ed), .type = &type_descr_bcmos_bool }, { .name = "after_ed", .descr = "after ed", .offset = offsetof(bcmolt_ranging_rssi_control, after_ed), .type = &type_descr_bcmos_bool }, { .name = "after_reset_3", .descr = "after reset 3", .offset = offsetof(bcmolt_ranging_rssi_control, after_reset_3), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ranging_rssi_control = { .name = "bcmolt_ranging_rssi_control", .descr = "ranging rssi control", .size = sizeof(bcmolt_ranging_rssi_control), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_ranging_rssi_control_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_ranging_rssi_control_fields } } };
+bcmcli_enum_val bcmolt_registration_behavior_string_table[] = { { .name = "automatic", .val = BCMOLT_REGISTRATION_BEHAVIOR_AUTOMATIC }, { .name = "notify_unknown", .val = BCMOLT_REGISTRATION_BEHAVIOR_NOTIFY_UNKNOWN }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_registration_behavior = { .name = "bcmolt_registration_behavior", .descr = "Registration Behavior", .size = sizeof(bcmolt_registration_behavior), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_registration_behavior_string_table } };
+bcmcli_enum_val bcmolt_request_registration_fail_reason_string_table[] = { { .name = "none", .val = BCMOLT_REQUEST_REGISTRATION_FAIL_REASON_NONE }, { .name = "registration_ploam_timeout", .val = BCMOLT_REQUEST_REGISTRATION_FAIL_REASON_REGISTRATION_PLOAM_TIMEOUT }, { .name = "onu_alarm", .val = BCMOLT_REQUEST_REGISTRATION_FAIL_REASON_ONU_ALARM }, { .name = "deactivation", .val = BCMOLT_REQUEST_REGISTRATION_FAIL_REASON_DEACTIVATION }, { .name = "disable", .val = BCMOLT_REQUEST_REGISTRATION_FAIL_REASON_DISABLE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_request_registration_fail_reason = { .name = "bcmolt_request_registration_fail_reason", .descr = "request registration fail reason", .size = sizeof(bcmolt_request_registration_fail_reason), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_request_registration_fail_reason_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_request_registration_status_fields[] = { { .name = "request_registration_state", .descr = "request registration state", .offset = offsetof(bcmolt_request_registration_status, request_registration_state), .type = &type_descr_bcmolt_control_state }, { .name = "sma_flag", .descr = "is request registration is part of sma process", .offset = offsetof(bcmolt_request_registration_status, sma_flag), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_request_registration_status = { .name = "bcmolt_request_registration_status", .descr = "request registration status", .size = sizeof(bcmolt_request_registration_status), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_request_registration_status_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_request_registration_status_fields } } };
+bcmcli_enum_val bcmolt_result_string_table[] = { { .name = "success", .val = BCMOLT_RESULT_SUCCESS }, { .name = "fail", .val = BCMOLT_RESULT_FAIL }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_result = { .name = "bcmolt_result", .descr = "Result", .size = sizeof(bcmolt_result), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_result_string_table } };
+bcmcli_enum_val bcmolt_rogue_detection_algorithm_type_string_table[] = { { .name = "early_rogue_detection", .val = BCMOLT_ROGUE_DETECTION_ALGORITHM_TYPE_EARLY_ROGUE_DETECTION }, { .name = "special_map", .val = BCMOLT_ROGUE_DETECTION_ALGORITHM_TYPE_SPECIAL_MAP }, { .name = "extended_guard_time", .val = BCMOLT_ROGUE_DETECTION_ALGORITHM_TYPE_EXTENDED_GUARD_TIME }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_rogue_detection_algorithm_type = { .name = "bcmolt_rogue_detection_algorithm_type", .descr = "Type of the rogue detection algorithm.", .size = sizeof(bcmolt_rogue_detection_algorithm_type), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_rogue_detection_algorithm_type_string_table } };
+bcmcli_enum_val bcmolt_rogue_detection_window_string_table[] = { { .name = "silent_window", .val = BCMOLT_ROGUE_DETECTION_WINDOW_SILENT_WINDOW }, { .name = "cut_off_window", .val = BCMOLT_ROGUE_DETECTION_WINDOW_CUT_OFF_WINDOW }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_rogue_detection_window = { .name = "bcmolt_rogue_detection_window", .descr = "Rogue ONU detection measurement type.", .size = sizeof(bcmolt_rogue_detection_window), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_rogue_detection_window_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_rogue_detection_special_map_fields[] = { { .name = "plo_size", .descr = "PLO size", .offset = offsetof(bcmolt_rogue_detection_special_map, plo_size), .type = &type_descr_uint32_t }, { .name = "alloc_id", .descr = "Alloc ID", .offset = offsetof(bcmolt_rogue_detection_special_map, alloc_id), .type = &type_descr_uint16_t }, { .name = "onu_id", .descr = "ONU ID", .offset = offsetof(bcmolt_rogue_detection_special_map, onu_id), .type = &type_descr_uint16_t }, { .name = "access_size", .descr = "Access size", .offset = offsetof(bcmolt_rogue_detection_special_map, access_size), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_rogue_detection_special_map = { .name = "bcmolt_rogue_detection_special_map", .descr = "Rogue Detection Special Map", .size = sizeof(bcmolt_rogue_detection_special_map), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_rogue_detection_special_map_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_rogue_detection_special_map_fields } } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_rogue_detection_special_map_list_u32_max_8 = { .name = "bcmolt_rogue_detection_special_map_list_u32_max_8", .descr = "Variable-length list of rogue_detection_special_map", .size = sizeof(bcmolt_rogue_detection_special_map_list_u32_max_8), .base_type = BCMOLT_BASE_TYPE_ID_ARR_DYN, .x = { .arr_dyn = { .elem_type = &type_descr_bcmolt_rogue_detection_special_map, .len_size = 4, .max_size = 8 } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_rogue_detection_algorithm_fields[] = { { .name = "algorithm_type", .descr = "Type of the rogue detection algorithm.", .offset = offsetof(bcmolt_rogue_detection_algorithm, algorithm_type), .type = &type_descr_bcmolt_rogue_detection_algorithm_type } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_rogue_detection_algorithm_early_rogue_detection_fields[] = { { .name = "measurement_type", .descr = "Silent Window or Cut off Window", .offset = offsetof(bcmolt_rogue_detection_algorithm, u.early_rogue_detection.measurement_type) - offsetof(bcmolt_rogue_detection_algorithm, u.early_rogue_detection.measurement_type), .type = &type_descr_bcmolt_rogue_detection_window }, { .name = "interval", .descr = "Periodic process timer interval in milliseconds", .offset = offsetof(bcmolt_rogue_detection_algorithm, u.early_rogue_detection.interval) - offsetof(bcmolt_rogue_detection_algorithm, u.early_rogue_detection.measurement_type), .type = &type_descr_uint32_t }, { .name = "second_ranging_window", .descr = "Determines whether the second ranging window should be invoked or not.", .offset = offsetof(bcmolt_rogue_detection_algorithm, u.early_rogue_detection.second_ranging_window) - offsetof(bcmolt_rogue_detection_algorithm, u.early_rogue_detection.measurement_type), .type = &type_descr_bcmos_bool }, { .name = "alloc_type_to_scan", .descr = "Alloc type to scan during rogue detection.  Unused, previously used, or all Alloc-IDs.", .offset = offsetof(bcmolt_rogue_detection_algorithm, u.early_rogue_detection.alloc_type_to_scan) - offsetof(bcmolt_rogue_detection_algorithm, u.early_rogue_detection.measurement_type), .type = &type_descr_bcmolt_alloc_type_to_scan } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_rogue_detection_algorithm_early_rogue_detection = { .name = "bcmolt_rogue_detection_algorithm_early_rogue_detection", .descr = "Rogue Detection Algorithm Early Rogue Detection", .size = sizeof(((bcmolt_rogue_detection_algorithm *)0)->u.early_rogue_detection), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_rogue_detection_algorithm_early_rogue_detection_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_rogue_detection_algorithm_early_rogue_detection_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_rogue_detection_algorithm_special_map_fields[] = { { .name = "accesses", .descr = "Accesses", .offset = offsetof(bcmolt_rogue_detection_algorithm, u.special_map.accesses) - offsetof(bcmolt_rogue_detection_algorithm, u.special_map.accesses), .type = &type_descr_bcmolt_rogue_detection_special_map_list_u32_max_8 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_rogue_detection_algorithm_special_map = { .name = "bcmolt_rogue_detection_algorithm_special_map", .descr = "Rogue Detection Algorithm Special Map", .size = sizeof(((bcmolt_rogue_detection_algorithm *)0)->u.special_map), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_rogue_detection_algorithm_special_map_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_rogue_detection_algorithm_special_map_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_rogue_detection_algorithm_extended_guard_time_fields[] = { { .name = "additional_guard_time", .descr = "Additional guard time (in bytes) for all ONUs on this PON.", .offset = offsetof(bcmolt_rogue_detection_algorithm, u.extended_guard_time.additional_guard_time) - offsetof(bcmolt_rogue_detection_algorithm, u.extended_guard_time.additional_guard_time), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_rogue_detection_algorithm_extended_guard_time = { .name = "bcmolt_rogue_detection_algorithm_extended_guard_time", .descr = "Rogue Detection Algorithm Extended Guard Time", .size = sizeof(((bcmolt_rogue_detection_algorithm *)0)->u.extended_guard_time), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_rogue_detection_algorithm_extended_guard_time_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_rogue_detection_algorithm_extended_guard_time_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_rogue_detection_algorithm_union_fields[] = { { .name = "u.early_rogue_detection", .descr = "", .offset = offsetof(bcmolt_rogue_detection_algorithm, u.early_rogue_detection), .type = &type_descr_bcmolt_rogue_detection_algorithm_early_rogue_detection }, { .name = "u.special_map", .descr = "", .offset = offsetof(bcmolt_rogue_detection_algorithm, u.special_map), .type = &type_descr_bcmolt_rogue_detection_algorithm_special_map }, { .name = "u.extended_guard_time", .descr = "", .offset = offsetof(bcmolt_rogue_detection_algorithm, u.extended_guard_time), .type = &type_descr_bcmolt_rogue_detection_algorithm_extended_guard_time }, { } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_rogue_detection_algorithm = { .name = "bcmolt_rogue_detection_algorithm", .descr = "Type and attributes of the rogue detection algorithm.", .size = sizeof(bcmolt_rogue_detection_algorithm), .base_type = BCMOLT_BASE_TYPE_ID_UNION, .x = { .u = { .num_common_fields = sizeof(type_descr_bcmolt_rogue_detection_algorithm_fields) / sizeof(bcmcli_field_descr), .common_fields = type_descr_bcmolt_rogue_detection_algorithm_fields, .classifier_idx = 0, .union_fields = type_descr_bcmolt_rogue_detection_algorithm_union_fields } } };
+bcmcli_enum_val bcmolt_rogue_measurement_result_string_table[] = { { .name = "rssi_complete", .val = BCMOLT_ROGUE_MEASUREMENT_RESULT_RSSI_COMPLETE }, { .name = "not_performed", .val = BCMOLT_ROGUE_MEASUREMENT_RESULT_NOT_PERFORMED }, { .name = "rogue_cycle_stop", .val = BCMOLT_ROGUE_MEASUREMENT_RESULT_ROGUE_CYCLE_STOP }, { .name = "rssi_error", .val = BCMOLT_ROGUE_MEASUREMENT_RESULT_RSSI_ERROR }, { .name = "rssi_not_complete", .val = BCMOLT_ROGUE_MEASUREMENT_RESULT_RSSI_NOT_COMPLETE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_rogue_measurement_result = { .name = "bcmolt_rogue_measurement_result", .descr = "Status of the rogue ONU detection result.", .size = sizeof(bcmolt_rogue_measurement_result), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_rogue_measurement_result_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_rogue_onu_detection_process_fields[] = { { .name = "control", .descr = "Enable/Disable the rogue ONU detection process.", .offset = offsetof(bcmolt_rogue_onu_detection_process, control), .type = &type_descr_bcmolt_control_state }, { .name = "detection_algorithm", .descr = "Type and attributes of the rogue detection algorithm.", .offset = offsetof(bcmolt_rogue_onu_detection_process, detection_algorithm), .type = &type_descr_bcmolt_rogue_detection_algorithm } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_rogue_onu_detection_process = { .name = "bcmolt_rogue_onu_detection_process", .descr = "Configures the attributes of the rogue ONU detection periodic process.", .size = sizeof(bcmolt_rogue_onu_detection_process), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_rogue_onu_detection_process_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_rogue_onu_detection_process_fields } } };
+bcmcli_enum_val bcmolt_rogue_scan_status_string_table[] = { { .name = "complete", .val = BCMOLT_ROGUE_SCAN_STATUS_COMPLETE }, { .name = "llid_state_is_bad", .val = BCMOLT_ROGUE_SCAN_STATUS_LLID_STATE_IS_BAD }, { .name = "llid_is_oor", .val = BCMOLT_ROGUE_SCAN_STATUS_LLID_IS_OOR }, { .name = "scan_err_nores", .val = BCMOLT_ROGUE_SCAN_STATUS_SCAN_ERR_NORES }, { .name = "scan_err_internal", .val = BCMOLT_ROGUE_SCAN_STATUS_SCAN_ERR_INTERNAL }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_rogue_scan_status = { .name = "bcmolt_rogue_scan_status", .descr = "Rogue Scan Indication Status ", .size = sizeof(bcmolt_rogue_scan_status), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_rogue_scan_status_string_table } };
+bcmcli_enum_val bcmolt_rssi_measurement_fail_reason_string_table[] = { { .name = "none", .val = BCMOLT_RSSI_MEASUREMENT_FAIL_REASON_NONE }, { .name = "no_delimiter", .val = BCMOLT_RSSI_MEASUREMENT_FAIL_REASON_NO_DELIMITER }, { .name = "no_access", .val = BCMOLT_RSSI_MEASUREMENT_FAIL_REASON_NO_ACCESS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_rssi_measurement_fail_reason = { .name = "bcmolt_rssi_measurement_fail_reason", .descr = "RSSI measurement fail reason", .size = sizeof(bcmolt_rssi_measurement_fail_reason), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_rssi_measurement_fail_reason_string_table } };
+bcmcli_enum_val bcmolt_secure_mutual_authentication_fail_reason_string_table[] = { { .name = "timeout", .val = BCMOLT_SECURE_MUTUAL_AUTHENTICATION_FAIL_REASON_TIMEOUT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_secure_mutual_authentication_fail_reason = { .name = "bcmolt_secure_mutual_authentication_fail_reason", .descr = "secure mutual authentication fail reason", .size = sizeof(bcmolt_secure_mutual_authentication_fail_reason), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_secure_mutual_authentication_fail_reason_string_table } };
+bcmcli_enum_val bcmolt_serdes_ranging_mode_string_table[] = { { .name = "ed_mode", .val = BCMOLT_SERDES_RANGING_MODE_ED_MODE }, { .name = "bcdr_reset_mode", .val = BCMOLT_SERDES_RANGING_MODE_BCDR_RESET_MODE }, { .name = "fast_mode", .val = BCMOLT_SERDES_RANGING_MODE_FAST_MODE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_serdes_ranging_mode = { .name = "bcmolt_serdes_ranging_mode", .descr = "serdes ranging mode", .size = sizeof(bcmolt_serdes_ranging_mode), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_serdes_ranging_mode_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_serdes_configuration_fields[] = { { .name = "ranging_mode", .descr = "ranging mode", .offset = offsetof(bcmolt_serdes_configuration, ranging_mode), .type = &type_descr_bcmolt_serdes_ranging_mode }, { .name = "multi_ed_mode", .descr = "multi ed mode", .offset = offsetof(bcmolt_serdes_configuration, multi_ed_mode), .type = &type_descr_bcmos_bool }, { .name = "burst_enable_start_offset", .descr = "burst enable start offset", .offset = offsetof(bcmolt_serdes_configuration, burst_enable_start_offset), .type = &type_descr_uint16_t }, { .name = "burst_enable_end_offset", .descr = "burst enable end offset", .offset = offsetof(bcmolt_serdes_configuration, burst_enable_end_offset), .type = &type_descr_uint16_t }, { .name = "ed_invertion", .descr = "ed invertion", .offset = offsetof(bcmolt_serdes_configuration, ed_invertion), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_serdes_configuration = { .name = "bcmolt_serdes_configuration", .descr = "serdes configuration", .size = sizeof(bcmolt_serdes_configuration), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_serdes_configuration_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_serdes_configuration_fields } } };
+bcmcli_enum_val bcmolt_serdes_instance_string_table[] = { { .name = "instance_0", .val = BCMOLT_SERDES_INSTANCE_INSTANCE_0 }, { .name = "instance_1", .val = BCMOLT_SERDES_INSTANCE_INSTANCE_1 }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_serdes_instance = { .name = "bcmolt_serdes_instance", .descr = "SerDes Instance", .size = sizeof(bcmolt_serdes_instance), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_serdes_instance_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_serial_number_fields[] = { { .name = "vendor_id", .descr = "vendor id", .offset = offsetof(bcmolt_serial_number, vendor_id), .type = &type_descr_uint8_t_arr_4 }, { .name = "vendor_specific", .descr = "vendor specific", .offset = offsetof(bcmolt_serial_number, vendor_specific), .type = &type_descr_uint8_t_arr_4 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_serial_number = { .name = "bcmolt_serial_number", .descr = "serial number", .size = sizeof(bcmolt_serial_number), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_serial_number_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_serial_number_fields } } };
+bcmcli_enum_val bcmolt_shaper_mode_string_table[] = { { .name = "layer_1", .val = BCMOLT_SHAPER_MODE_LAYER_1 }, { .name = "layer_2", .val = BCMOLT_SHAPER_MODE_LAYER_2 }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_shaper_mode = { .name = "bcmolt_shaper_mode", .descr = "Shaper Mode", .size = sizeof(bcmolt_shaper_mode), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_shaper_mode_string_table } };
+bcmcli_enum_val bcmolt_software_error_cfg_id_string_table[] = { { .name = "entry", .val = BCMOLT_SOFTWARE_ERROR_CFG_ID_ENTRY }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_software_error_cfg_id = { .name = "bcmolt_software_error_cfg_id", .descr = "Identifiers for all properties contained in the software_error_cfg group.", .size = sizeof(bcmolt_software_error_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_software_error_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_software_error_key_id_string_table[] = { { .name = "reserved", .val = BCMOLT_SOFTWARE_ERROR_KEY_ID_RESERVED }, { .name = "index", .val = BCMOLT_SOFTWARE_ERROR_KEY_ID_IDX }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_software_error_key_id = { .name = "bcmolt_software_error_key_id", .descr = "Identifiers for all properties contained in the software_error_key group.", .size = sizeof(bcmolt_software_error_key_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_software_error_key_id_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_solicited_scheduler_fields[] = { { .name = "bandwidth_Kbps", .descr = "Bandwidth (Kbps)", .offset = offsetof(bcmolt_solicited_scheduler, bandwidth_Kbps), .type = &type_descr_uint32_t }, { .name = "max_burst_size_tq", .descr = "Max Burst Size (TQ)", .offset = offsetof(bcmolt_solicited_scheduler, max_burst_size_tq), .type = &type_descr_uint32_t }, { .name = "priority", .descr = "Priority", .offset = offsetof(bcmolt_solicited_scheduler, priority), .type = &type_descr_uint8_t }, { .name = "weight_tq", .descr = "Weight (TQ)", .offset = offsetof(bcmolt_solicited_scheduler, weight_tq), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_solicited_scheduler = { .name = "bcmolt_solicited_scheduler", .descr = "Solicited Scheduler", .size = sizeof(bcmolt_solicited_scheduler), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_solicited_scheduler_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_solicited_scheduler_fields } } };
+bcmcli_enum_val bcmolt_stat_condition_type_string_table[] = { { .name = "none", .val = BCMOLT_STAT_CONDITION_TYPE_NONE }, { .name = "rate_threshold", .val = BCMOLT_STAT_CONDITION_TYPE_RATE_THRESHOLD }, { .name = "rate_range", .val = BCMOLT_STAT_CONDITION_TYPE_RATE_RANGE }, { .name = "value_threshold", .val = BCMOLT_STAT_CONDITION_TYPE_VALUE_THRESHOLD }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_stat_condition_type = { .name = "bcmolt_stat_condition_type", .descr = "All possible statistic alarm trigger conditions.", .size = sizeof(bcmolt_stat_condition_type), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_stat_condition_type_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_stat_alarm_trigger_config_fields[] = { { .name = "type", .descr = "Type of condition to trigger the alarm.", .offset = offsetof(bcmolt_stat_alarm_trigger_config, type), .type = &type_descr_bcmolt_stat_condition_type } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_stat_alarm_trigger_config_rate_threshold_fields[] = { { .name = "rising", .descr = "Rising Threshold", .offset = offsetof(bcmolt_stat_alarm_trigger_config, u.rate_threshold.rising) - offsetof(bcmolt_stat_alarm_trigger_config, u.rate_threshold.rising), .type = &type_descr_uint64_t }, { .name = "falling", .descr = "The alarm is cleared if the stats delta value per second becomes less than this threshold level.", .offset = offsetof(bcmolt_stat_alarm_trigger_config, u.rate_threshold.falling) - offsetof(bcmolt_stat_alarm_trigger_config, u.rate_threshold.rising), .type = &type_descr_uint64_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_stat_alarm_trigger_config_rate_threshold = { .name = "bcmolt_stat_alarm_trigger_config_rate_threshold", .descr = "Statistic Alarm Trigger Configuration Rate threshold", .size = sizeof(((bcmolt_stat_alarm_trigger_config *)0)->u.rate_threshold), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_stat_alarm_trigger_config_rate_threshold_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_stat_alarm_trigger_config_rate_threshold_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_stat_alarm_trigger_config_rate_range_fields[] = { { .name = "upper", .descr = "The alarm is raised if the stats delta value per second becomes greater than this upper level.", .offset = offsetof(bcmolt_stat_alarm_trigger_config, u.rate_range.upper) - offsetof(bcmolt_stat_alarm_trigger_config, u.rate_range.upper), .type = &type_descr_uint64_t }, { .name = "lower", .descr = "The alarm is raised if the stats delta value per second becomes less than this lower level.", .offset = offsetof(bcmolt_stat_alarm_trigger_config, u.rate_range.lower) - offsetof(bcmolt_stat_alarm_trigger_config, u.rate_range.upper), .type = &type_descr_uint64_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_stat_alarm_trigger_config_rate_range = { .name = "bcmolt_stat_alarm_trigger_config_rate_range", .descr = "Statistic Alarm Trigger Configuration Rate range", .size = sizeof(((bcmolt_stat_alarm_trigger_config *)0)->u.rate_range), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_stat_alarm_trigger_config_rate_range_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_stat_alarm_trigger_config_rate_range_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_stat_alarm_trigger_config_value_threshold_fields[] = { { .name = "limit", .descr = "The alarm is raised if the stats sample value becomes greater than this level.  The alarm is cleared when the host clears the stats.", .offset = offsetof(bcmolt_stat_alarm_trigger_config, u.value_threshold.limit) - offsetof(bcmolt_stat_alarm_trigger_config, u.value_threshold.limit), .type = &type_descr_uint64_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_stat_alarm_trigger_config_value_threshold = { .name = "bcmolt_stat_alarm_trigger_config_value_threshold", .descr = "Statistic Alarm Trigger Configuration Value threshold", .size = sizeof(((bcmolt_stat_alarm_trigger_config *)0)->u.value_threshold), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_stat_alarm_trigger_config_value_threshold_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_stat_alarm_trigger_config_value_threshold_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_stat_alarm_trigger_config_union_fields[] = { { }, { .name = "u.rate_threshold", .descr = "", .offset = offsetof(bcmolt_stat_alarm_trigger_config, u.rate_threshold), .type = &type_descr_bcmolt_stat_alarm_trigger_config_rate_threshold }, { .name = "u.rate_range", .descr = "", .offset = offsetof(bcmolt_stat_alarm_trigger_config, u.rate_range), .type = &type_descr_bcmolt_stat_alarm_trigger_config_rate_range }, { .name = "u.value_threshold", .descr = "", .offset = offsetof(bcmolt_stat_alarm_trigger_config, u.value_threshold), .type = &type_descr_bcmolt_stat_alarm_trigger_config_value_threshold }, { } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_stat_alarm_trigger_config = { .name = "bcmolt_stat_alarm_trigger_config", .descr = "Statistic alarm trigger configuration.", .size = sizeof(bcmolt_stat_alarm_trigger_config), .base_type = BCMOLT_BASE_TYPE_ID_UNION, .x = { .u = { .num_common_fields = sizeof(type_descr_bcmolt_stat_alarm_trigger_config_fields) / sizeof(bcmcli_field_descr), .common_fields = type_descr_bcmolt_stat_alarm_trigger_config_fields, .classifier_idx = 0, .union_fields = type_descr_bcmolt_stat_alarm_trigger_config_union_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_stat_alarm_soak_config_fields[] = { { .name = "active_soak_time", .descr = "Active Soak Time", .offset = offsetof(bcmolt_stat_alarm_soak_config, active_soak_time), .type = &type_descr_uint32_t }, { .name = "clear_soak_time", .descr = "Clear Soak Time", .offset = offsetof(bcmolt_stat_alarm_soak_config, clear_soak_time), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_stat_alarm_soak_config = { .name = "bcmolt_stat_alarm_soak_config", .descr = "Statistics alarm soaking configuration", .size = sizeof(bcmolt_stat_alarm_soak_config), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_stat_alarm_soak_config_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_stat_alarm_soak_config_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_stat_alarm_config_fields[] = { { .name = "trigger", .descr = "Statistics alarm trigger configuration.", .offset = offsetof(bcmolt_stat_alarm_config, trigger), .type = &type_descr_bcmolt_stat_alarm_trigger_config }, { .name = "soak", .descr = "Statistics alarm soaking configuration", .offset = offsetof(bcmolt_stat_alarm_config, soak), .type = &type_descr_bcmolt_stat_alarm_soak_config } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_stat_alarm_config = { .name = "bcmolt_stat_alarm_config", .descr = "Statistic alarm configuration.", .size = sizeof(bcmolt_stat_alarm_config), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_stat_alarm_config_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_stat_alarm_config_fields } } };
+static bcmcli_type_descr BCM_DESCR string_100 = { .name = "string[100]", .descr = "ASCII string with max length 100", .size = sizeof(char[100]), .base_type = BCMOLT_BASE_TYPE_ID_STRING };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_str_100_fields[] = { { .name = "str", .descr = "String", .offset = offsetof(bcmolt_str_100, str), .type = &string_100 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_str_100 = { .name = "bcmolt_str_100", .descr = "ASCII string with max length 100", .size = sizeof(bcmolt_str_100), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_str_100_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_str_100_fields } } };
+static bcmcli_type_descr BCM_DESCR string_1000 = { .name = "string[1000]", .descr = "ASCII string with max length 1000", .size = sizeof(char[1000]), .base_type = BCMOLT_BASE_TYPE_ID_STRING };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_str_1000_fields[] = { { .name = "str", .descr = "String", .offset = offsetof(bcmolt_str_1000, str), .type = &string_1000 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_str_1000 = { .name = "bcmolt_str_1000", .descr = "ASCII string with max length 1000", .size = sizeof(bcmolt_str_1000), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_str_1000_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_str_1000_fields } } };
+static bcmcli_type_descr BCM_DESCR string_2000 = { .name = "string[2000]", .descr = "ASCII string with max length 2000", .size = sizeof(char[2000]), .base_type = BCMOLT_BASE_TYPE_ID_STRING };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_str_2000_fields[] = { { .name = "str", .descr = "String", .offset = offsetof(bcmolt_str_2000, str), .type = &string_2000 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_str_2000 = { .name = "bcmolt_str_2000", .descr = "ASCII string with max length 2000", .size = sizeof(bcmolt_str_2000), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_str_2000_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_str_2000_fields } } };
+static bcmcli_type_descr BCM_DESCR string_256 = { .name = "string[256]", .descr = "ASCII string with max length 256", .size = sizeof(char[256]), .base_type = BCMOLT_BASE_TYPE_ID_STRING };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_str_256_fields[] = { { .name = "str", .descr = "String", .offset = offsetof(bcmolt_str_256, str), .type = &string_256 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_str_256 = { .name = "bcmolt_str_256", .descr = "ASCII string with max length 256", .size = sizeof(bcmolt_str_256), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_str_256_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_str_256_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_str_64_fields[] = { { .name = "str", .descr = "String", .offset = offsetof(bcmolt_str_64, str), .type = &string_64 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_str_64 = { .name = "bcmolt_str_64", .descr = "ASCII string with max length 64", .size = sizeof(bcmolt_str_64), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_str_64_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_str_64_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_sw_error_fields[] = { { .name = "first_error_time_us", .descr = "Timestamp (in us) when his error first occurred", .offset = offsetof(bcmolt_sw_error, first_error_time_us), .type = &type_descr_uint64_t }, { .name = "last_error_time_us", .descr = "Timestamp (in us) when his error last occurred", .offset = offsetof(bcmolt_sw_error, last_error_time_us), .type = &type_descr_uint64_t }, { .name = "line_number", .descr = "Line Number", .offset = offsetof(bcmolt_sw_error, line_number), .type = &type_descr_uint32_t }, { .name = "error_counter", .descr = "The number of times this error has occurred", .offset = offsetof(bcmolt_sw_error, error_counter), .type = &type_descr_uint32_t }, { .name = "instance", .descr = "Instance", .offset = offsetof(bcmolt_sw_error, instance), .type = &type_descr_uint32_t }, { .name = "filename", .descr = "Filename", .offset = offsetof(bcmolt_sw_error, filename), .type = &string_64 }, { .name = "task_name", .descr = "Task Name", .offset = offsetof(bcmolt_sw_error, task_name), .type = &string_64 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_sw_error = { .name = "bcmolt_sw_error", .descr = "SW Error", .size = sizeof(bcmolt_sw_error), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_sw_error_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_sw_error_fields } } };
+bcmcli_enum_val bcmolt_switch_over_type_c_onu_state_string_table[] = { { .name = "active", .val = BCMOLT_SWITCH_OVER_TYPE_C_ONU_STATE_ACTIVE }, { .name = "active_standby", .val = BCMOLT_SWITCH_OVER_TYPE_C_ONU_STATE_ACTIVE_STANDBY }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_switch_over_type_c_onu_state = { .name = "bcmolt_switch_over_type_c_onu_state", .descr = "Switch over type c onu state", .size = sizeof(bcmolt_switch_over_type_c_onu_state), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_switch_over_type_c_onu_state_string_table } };
+bcmcli_enum_val bcmolt_system_mode_string_table[] = { { .name = "gpon__16_x", .val = BCMOLT_SYSTEM_MODE_GPON__16_X }, { .name = "gpon__8_x", .val = BCMOLT_SYSTEM_MODE_GPON__8_X }, { .name = "gpon__4_x", .val = BCMOLT_SYSTEM_MODE_GPON__4_X }, { .name = "epon__16_x", .val = BCMOLT_SYSTEM_MODE_EPON__16_X }, { .name = "xgpon_1__8_x", .val = BCMOLT_SYSTEM_MODE_XGPON_1__8_X }, { .name = "epon__8_x_coexistence_tdma", .val = BCMOLT_SYSTEM_MODE_EPON__8_X_COEXISTENCE_TDMA }, { .name = "ae_8_x", .val = BCMOLT_SYSTEM_MODE_AE_8_X }, { .name = "epon__8_x_10_g", .val = BCMOLT_SYSTEM_MODE_EPON__8_X_10_G }, { .name = "gpon_8_xgpon_4_x_coexistence", .val = BCMOLT_SYSTEM_MODE_GPON_8_XGPON_4_X_COEXISTENCE }, { .name = "epon__8_x", .val = BCMOLT_SYSTEM_MODE_EPON__8_X }, { .name = "epon__4_x", .val = BCMOLT_SYSTEM_MODE_EPON__4_X }, { .name = "epon__4_x_coexistence_tdma", .val = BCMOLT_SYSTEM_MODE_EPON__4_X_COEXISTENCE_TDMA }, { .name = "epon__4_x_10_g", .val = BCMOLT_SYSTEM_MODE_EPON__4_X_10_G }, { .name = "xgs__2_x_10_g", .val = BCMOLT_SYSTEM_MODE_XGS__2_X_10_G }, { .name = "ngpon2__2_x_10_g", .val = BCMOLT_SYSTEM_MODE_NGPON2__2_X_10_G }, { .name = "ngpon2__8_x_2_p_5_g", .val = BCMOLT_SYSTEM_MODE_NGPON2__8_X_2_P_5_G }, { .name = "xgpon_1__4_x", .val = BCMOLT_SYSTEM_MODE_XGPON_1__4_X }, { .name = "epon__2_x_10_g", .val = BCMOLT_SYSTEM_MODE_EPON__2_X_10_G }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_system_mode = { .name = "bcmolt_system_mode", .descr = "System working mode (GPON/EPON etc.)", .size = sizeof(bcmolt_system_mode), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_system_mode_string_table } };
+bcmcli_enum_val bcmolt_us_operating_wavelength_bands_string_table[] = { { .name = "expanded_spectrum_wide_band", .val = BCMOLT_US_OPERATING_WAVELENGTH_BANDS_EXPANDED_SPECTRUM_WIDE_BAND }, { .name = "expanded_spectrum_reduced_band", .val = BCMOLT_US_OPERATING_WAVELENGTH_BANDS_EXPANDED_SPECTRUM_REDUCED_BAND }, { .name = "expanded_spectrum_narrow_band", .val = BCMOLT_US_OPERATING_WAVELENGTH_BANDS_EXPANDED_SPECTRUM_NARROW_BAND }, { .name = "shared_spectrum_wide_band", .val = BCMOLT_US_OPERATING_WAVELENGTH_BANDS_SHARED_SPECTRUM_WIDE_BAND }, { .name = "shared_spectrum_reduced_band", .val = BCMOLT_US_OPERATING_WAVELENGTH_BANDS_SHARED_SPECTRUM_REDUCED_BAND }, { .name = "shared_spectrum_narrow_band", .val = BCMOLT_US_OPERATING_WAVELENGTH_BANDS_SHARED_SPECTRUM_NARROW_BAND }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_us_operating_wavelength_bands = { .name = "bcmolt_us_operating_wavelength_bands", .descr = "US operating wavelength bands", .size = sizeof(bcmolt_us_operating_wavelength_bands), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_us_operating_wavelength_bands_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_system_profile_fields[] = { { .name = "ng_2_sys_id", .descr = "20-bit identifier of the NGPON2 system", .offset = offsetof(bcmolt_system_profile, ng_2_sys_id), .type = &type_descr_uint32_t }, { .name = "version", .descr = "System profile version", .offset = offsetof(bcmolt_system_profile, version), .type = &type_descr_uint8_t }, { .name = "channel_spacing", .descr = "An integer indicating the channel spacing in units of 1GHz", .offset = offsetof(bcmolt_system_profile, channel_spacing), .type = &type_descr_uint8_t }, { .name = "us_operating_wavelength_bands", .descr = "Upstream operating wavelength bands", .offset = offsetof(bcmolt_system_profile, us_operating_wavelength_bands), .type = &type_descr_bcmolt_us_operating_wavelength_bands }, { .name = "us_mse", .descr = "Upstream Maximum Spectral Excursion (MSE) represented as an unsigned integer indicating the value in units of 1GHz", .offset = offsetof(bcmolt_system_profile, us_mse), .type = &type_descr_uint8_t }, { .name = "loose_calibration_bound", .descr = "Spectral excursion bound below which a TWDM ONU can be considered as loosely calibrated", .offset = offsetof(bcmolt_system_profile, loose_calibration_bound), .type = &type_descr_bcmolt_calibration_record }, { .name = "fsr", .descr = "If a cyclic WM is used in the upstream, Free Spectral Range indicates the value in units of 0.1 GHz", .offset = offsetof(bcmolt_system_profile, fsr), .type = &type_descr_uint16_t }, { .name = "twdm_channel_count", .descr = "The number of Channel_Profile PLOAM messages with distinct Channel Profile indices that an ONU can expect to receive while listening to this downstream wavelength channel", .offset = offsetof(bcmolt_system_profile, twdm_channel_count), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_system_profile = { .name = "bcmolt_system_profile", .descr = "System profile", .size = sizeof(bcmolt_system_profile), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_system_profile_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_system_profile_fields } } };
+bcmcli_enum_val bcmolt_traffic_resume_result_string_table[] = { { .name = "success", .val = BCMOLT_TRAFFIC_RESUME_RESULT_SUCCESS }, { .name = "failure", .val = BCMOLT_TRAFFIC_RESUME_RESULT_FAILURE }, { .name = "suspected_los", .val = BCMOLT_TRAFFIC_RESUME_RESULT_SUSPECTED_LOS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_traffic_resume_result = { .name = "bcmolt_traffic_resume_result", .descr = "Traffic resume result", .size = sizeof(bcmolt_traffic_resume_result), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_traffic_resume_result_string_table } };
+bcmcli_enum_val bcmolt_trx_calibration_auto_cfg_id_string_table[] = { { .name = "capture_window_and_statistic_completed", .val = BCMOLT_TRX_CALIBRATION_AUTO_CFG_ID_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_trx_calibration_auto_cfg_id = { .name = "bcmolt_trx_calibration_auto_cfg_id", .descr = "Identifiers for all properties contained in the trx_calibration_auto_cfg group.", .size = sizeof(bcmolt_trx_calibration_auto_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_trx_calibration_auto_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_trx_calibration_capture_window_and_statistic_completed_id_string_table[] = { { .name = "data_window", .val = BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_DATA_WINDOW }, { .name = "strobe_window", .val = BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_STROBE_WINDOW }, { .name = "edge_rise_min_min", .val = BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_RISE_MIN_MIN }, { .name = "edge_rise_min_max", .val = BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_RISE_MIN_MAX }, { .name = "edge_rise_max_min", .val = BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_RISE_MAX_MIN }, { .name = "edge_rise_max_max", .val = BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_RISE_MAX_MAX }, { .name = "edge_fall_min_min", .val = BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_FALL_MIN_MIN }, { .name = "edge_fall_min_max", .val = BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_FALL_MIN_MAX }, { .name = "edge_fall_max_min", .val = BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_FALL_MAX_MIN }, { .name = "edge_fall_max_max", .val = BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_FALL_MAX_MAX }, { .name = "result", .val = BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_RESULT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_trx_calibration_capture_window_and_statistic_completed_id = { .name = "bcmolt_trx_calibration_capture_window_and_statistic_completed_id", .descr = "Identifiers for all properties contained in the trx_calibration_capture_window_and_statistic_completed group.", .size = sizeof(bcmolt_trx_calibration_capture_window_and_statistic_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_trx_calibration_capture_window_and_statistic_completed_id_string_table } };
+bcmcli_enum_val bcmolt_trx_calibration_key_id_string_table[] = { { .name = "reserved", .val = BCMOLT_TRX_CALIBRATION_KEY_ID_RESERVED }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_trx_calibration_key_id = { .name = "bcmolt_trx_calibration_key_id", .descr = "Identifiers for all properties contained in the trx_calibration_key group.", .size = sizeof(bcmolt_trx_calibration_key_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_trx_calibration_key_id_string_table } };
+bcmcli_enum_val bcmolt_trx_calibration_start_capture_window_id_string_table[] = { { .name = "pon_ni", .val = BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_PON_NI }, { .name = "trigger", .val = BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_TRIGGER }, { .name = "strobe", .val = BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_STROBE }, { .name = "window_mode", .val = BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_WINDOW_MODE }, { .name = "onu_id", .val = BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_ONU_ID }, { .name = "trigger_position", .val = BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_TRIGGER_POSITION }, { .name = "stop_due_to_corrupt_strobe", .val = BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_STOP_DUE_TO_CORRUPT_STROBE }, { .name = "start_offset", .val = BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_START_OFFSET }, { .name = "end_offset", .val = BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_END_OFFSET }, { .name = "number_of_cycles", .val = BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_NUMBER_OF_CYCLES }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_trx_calibration_start_capture_window_id = { .name = "bcmolt_trx_calibration_start_capture_window_id", .descr = "Identifiers for all properties contained in the trx_calibration_start_capture_window group.", .size = sizeof(bcmolt_trx_calibration_start_capture_window_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_trx_calibration_start_capture_window_id_string_table } };
+bcmcli_enum_val bcmolt_trx_calibration_stop_capture_window_id_string_table[] = { { .name = "pon_ni", .val = BCMOLT_TRX_CALIBRATION_STOP_CAPTURE_WINDOW_ID_PON_NI }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_trx_calibration_stop_capture_window_id = { .name = "bcmolt_trx_calibration_stop_capture_window_id", .descr = "Identifiers for all properties contained in the trx_calibration_stop_capture_window group.", .size = sizeof(bcmolt_trx_calibration_stop_capture_window_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_trx_calibration_stop_capture_window_id_string_table } };
+bcmcli_enum_val bcmolt_trx_calibration_trigger_string_table[] = { { .name = "epon_stat", .val = BCMOLT_TRX_CALIBRATION_TRIGGER_EPON_STAT }, { .name = "gpon_bcdr_reset", .val = BCMOLT_TRX_CALIBRATION_TRIGGER_GPON_BCDR_RESET }, { .name = "gpon_trx_reset", .val = BCMOLT_TRX_CALIBRATION_TRIGGER_GPON_TRX_RESET }, { .name = "gpon_trx_ed", .val = BCMOLT_TRX_CALIBRATION_TRIGGER_GPON_TRX_ED }, { .name = "gpon_rssi", .val = BCMOLT_TRX_CALIBRATION_TRIGGER_GPON_RSSI }, { .name = "gpon_eob", .val = BCMOLT_TRX_CALIBRATION_TRIGGER_GPON_EOB }, { .name = "gpon_ranging", .val = BCMOLT_TRX_CALIBRATION_TRIGGER_GPON_RANGING }, { .name = "serdes_burst_en", .val = BCMOLT_TRX_CALIBRATION_TRIGGER_SERDES_BURST_EN }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_trx_calibration_trigger = { .name = "bcmolt_trx_calibration_trigger", .descr = "trx calibration trigger", .size = sizeof(bcmolt_trx_calibration_trigger), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_trx_calibration_trigger_string_table } };
+bcmcli_enum_val bcmolt_trx_calibration_trigger_position_string_table[] = { { .name = "rising", .val = BCMOLT_TRX_CALIBRATION_TRIGGER_POSITION_RISING }, { .name = "falling", .val = BCMOLT_TRX_CALIBRATION_TRIGGER_POSITION_FALLING }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_trx_calibration_trigger_position = { .name = "bcmolt_trx_calibration_trigger_position", .descr = "trx calibration trigger position", .size = sizeof(bcmolt_trx_calibration_trigger_position), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_trx_calibration_trigger_position_string_table } };
+bcmcli_enum_val bcmolt_trx_calibration_window_mode_string_table[] = { { .name = "ranging", .val = BCMOLT_TRX_CALIBRATION_WINDOW_MODE_RANGING }, { .name = "non_ranging", .val = BCMOLT_TRX_CALIBRATION_WINDOW_MODE_NON_RANGING }, { .name = "both", .val = BCMOLT_TRX_CALIBRATION_WINDOW_MODE_BOTH }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_trx_calibration_window_mode = { .name = "bcmolt_trx_calibration_window_mode", .descr = "trx calibration window mode", .size = sizeof(bcmolt_trx_calibration_window_mode), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_trx_calibration_window_mode_string_table } };
+static bcmcli_type_descr BCM_DESCR type_descr_uint8_t_arr_3 = { .name = "uint8_t[3]", .descr = "Array of 3 elements of type uint8_t", .size = sizeof(uint8_t[3]), .base_type = BCMOLT_BASE_TYPE_ID_ARR_FIXED, .x = { .arr_fixed = { .elem_type = &type_descr_uint8_t, .size = 3 } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_trx_delimiter_fields[] = { { .name = "pattern", .descr = "pattern", .offset = offsetof(bcmolt_trx_delimiter, pattern), .type = &type_descr_uint8_t_arr_3 }, { .name = "size", .descr = "Size in bytes", .offset = offsetof(bcmolt_trx_delimiter, size), .type = &type_descr_uint8_t }, { .name = "window_size", .descr = "Window size", .offset = offsetof(bcmolt_trx_delimiter, window_size), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_trx_delimiter = { .name = "bcmolt_trx_delimiter", .descr = "TRX Delimiter", .size = sizeof(bcmolt_trx_delimiter), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_trx_delimiter_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_trx_delimiter_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_trx_energy_detect_fields[] = { { .name = "ranging_ed_source", .descr = "Ranging ED source", .offset = offsetof(bcmolt_trx_energy_detect, ranging_ed_source), .type = &type_descr_bcmolt_energy_detect_source }, { .name = "delimiter_ed_source", .descr = "Delimiter ED source", .offset = offsetof(bcmolt_trx_energy_detect, delimiter_ed_source), .type = &type_descr_bcmolt_energy_detect_source }, { .name = "minimum_threshold", .descr = "Minimum threshold", .offset = offsetof(bcmolt_trx_energy_detect, minimum_threshold), .type = &type_descr_uint8_t }, { .name = "maximum_threshold", .descr = "Maximum threshold", .offset = offsetof(bcmolt_trx_energy_detect, maximum_threshold), .type = &type_descr_uint8_t }, { .name = "ed_pattern", .descr = "ED pattern", .offset = offsetof(bcmolt_trx_energy_detect, ed_pattern), .type = &type_descr_uint8_t }, { .name = "ed_pattern_size", .descr = "ED pattern size", .offset = offsetof(bcmolt_trx_energy_detect, ed_pattern_size), .type = &type_descr_uint8_t }, { .name = "window_size", .descr = "Window size", .offset = offsetof(bcmolt_trx_energy_detect, window_size), .type = &type_descr_uint8_t }, { .name = "inversion", .descr = "Inversion", .offset = offsetof(bcmolt_trx_energy_detect, inversion), .type = &type_descr_bcmos_bool }, { .name = "no_ed_threshold", .descr = "no ed threshold", .offset = offsetof(bcmolt_trx_energy_detect, no_ed_threshold), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_trx_energy_detect = { .name = "bcmolt_trx_energy_detect", .descr = "TRX Energy detect", .size = sizeof(bcmolt_trx_energy_detect), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_trx_energy_detect_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_trx_energy_detect_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_trx_preamble_fields[] = { { .name = "type_1_size", .descr = "Type 1 size", .offset = offsetof(bcmolt_trx_preamble, type_1_size), .type = &type_descr_uint8_t }, { .name = "type_2_size", .descr = "Type 2 size", .offset = offsetof(bcmolt_trx_preamble, type_2_size), .type = &type_descr_uint8_t }, { .name = "type_3_pre_ranging_size", .descr = "Type 3 pre ranging size", .offset = offsetof(bcmolt_trx_preamble, type_3_pre_ranging_size), .type = &type_descr_uint8_t }, { .name = "type_3_post_ranging_size", .descr = "Type 3 post ranging size", .offset = offsetof(bcmolt_trx_preamble, type_3_post_ranging_size), .type = &type_descr_uint8_t }, { .name = "type_3_pattern", .descr = "Type 3 pattern", .offset = offsetof(bcmolt_trx_preamble, type_3_pattern), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_trx_preamble = { .name = "bcmolt_trx_preamble", .descr = "TRX Preamble", .size = sizeof(bcmolt_trx_preamble), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_trx_preamble_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_trx_preamble_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_trx_rx_configuration_fields[] = { { .name = "wait_window_size", .descr = "Wait Window size", .offset = offsetof(bcmolt_trx_rx_configuration, wait_window_size), .type = &type_descr_uint8_t }, { .name = "ranging_access_window_size", .descr = "Ranging access window size", .offset = offsetof(bcmolt_trx_rx_configuration, ranging_access_window_size), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_trx_rx_configuration = { .name = "bcmolt_trx_rx_configuration", .descr = "TRX RX configuration", .size = sizeof(bcmolt_trx_rx_configuration), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_trx_rx_configuration_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_trx_rx_configuration_fields } } };
+bcmcli_enum_val bcmolt_trx_type_string_table[] = { { .name = "sps_43_48_h_hp_cde_sd_2013", .val = BCMOLT_TRX_TYPE_SPS_43_48_H_HP_CDE_SD_2013 }, { .name = "sog_4321_psgb", .val = BCMOLT_TRX_TYPE_SOG_4321_PSGB }, { .name = "lte_3680_m", .val = BCMOLT_TRX_TYPE_LTE_3680_M }, { .name = "source_photonics", .val = BCMOLT_TRX_TYPE_SOURCE_PHOTONICS }, { .name = "lte_3680_p_type_c_plus", .val = BCMOLT_TRX_TYPE_LTE_3680_P_TYPE_C_PLUS }, { .name = "any", .val = BCMOLT_TRX_TYPE_ANY }, { .name = "any_reset_guard", .val = BCMOLT_TRX_TYPE_ANY_RESET_GUARD }, { .name = "any_reset_preamble", .val = BCMOLT_TRX_TYPE_ANY_RESET_PREAMBLE }, { .name = "wtd_rtxm_167_526_cplus", .val = BCMOLT_TRX_TYPE_WTD_RTXM_167_526_CPLUS }, { .name = "wtd_rtxm_167_522_bplus", .val = BCMOLT_TRX_TYPE_WTD_RTXM_167_522_BPLUS }, { .name = "lte_3680_p_bc", .val = BCMOLT_TRX_TYPE_LTE_3680_P_BC }, { .name = "sogq_4321_psgb_c_plus", .val = BCMOLT_TRX_TYPE_SOGQ_4321_PSGB_C_PLUS }, { .name = "wtd_rtxm167_521", .val = BCMOLT_TRX_TYPE_WTD_RTXM167_521 }, { .name = "lte3678", .val = BCMOLT_TRX_TYPE_LTE3678 }, { .name = "sogp_4321_psga", .val = BCMOLT_TRX_TYPE_SOGP_4321_PSGA }, { .name = "gpon_general_1", .val = BCMOLT_TRX_TYPE_GPON_GENERAL_1 }, { .name = "gpon_general_2", .val = BCMOLT_TRX_TYPE_GPON_GENERAL_2 }, { .name = "gpon_general_3", .val = BCMOLT_TRX_TYPE_GPON_GENERAL_3 }, { .name = "gpon_general_4", .val = BCMOLT_TRX_TYPE_GPON_GENERAL_4 }, { .name = "gpon_general_5", .val = BCMOLT_TRX_TYPE_GPON_GENERAL_5 }, { .name = "gpon_general_6", .val = BCMOLT_TRX_TYPE_GPON_GENERAL_6 }, { .name = "gpon_general_7", .val = BCMOLT_TRX_TYPE_GPON_GENERAL_7 }, { .name = "gpon_general_8", .val = BCMOLT_TRX_TYPE_GPON_GENERAL_8 }, { .name = "gpon_general_9", .val = BCMOLT_TRX_TYPE_GPON_GENERAL_9 }, { .name = "gpon_general_10", .val = BCMOLT_TRX_TYPE_GPON_GENERAL_10 }, { .name = "gpon_general_11", .val = BCMOLT_TRX_TYPE_GPON_GENERAL_11 }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_trx_type = { .name = "bcmolt_trx_type", .descr = "TRX type", .size = sizeof(bcmolt_trx_type), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_trx_type_string_table } };
+bcmcli_enum_val bcmolt_tune_in_fail_reason_string_table[] = { { .name = "none", .val = BCMOLT_TUNE_IN_FAIL_REASON_NONE }, { .name = "no_tuning_response_ploam_received", .val = BCMOLT_TUNE_IN_FAIL_REASON_NO_TUNING_RESPONSE_PLOAM_RECEIVED }, { .name = "onu_activation_failed", .val = BCMOLT_TUNE_IN_FAIL_REASON_ONU_ACTIVATION_FAILED }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_tune_in_fail_reason = { .name = "bcmolt_tune_in_fail_reason", .descr = "Tune in fail reason", .size = sizeof(bcmolt_tune_in_fail_reason), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_tune_in_fail_reason_string_table } };
+bcmcli_enum_val bcmolt_tune_out_fail_reason_string_table[] = { { .name = "none", .val = BCMOLT_TUNE_OUT_FAIL_REASON_NONE }, { .name = "nack_ploam_received", .val = BCMOLT_TUNE_OUT_FAIL_REASON_NACK_PLOAM_RECEIVED }, { .name = "no_tuning_response_ploam_received", .val = BCMOLT_TUNE_OUT_FAIL_REASON_NO_TUNING_RESPONSE_PLOAM_RECEIVED }, { .name = "tsource_timeout", .val = BCMOLT_TUNE_OUT_FAIL_REASON_TSOURCE_TIMEOUT }, { .name = "rollback_request", .val = BCMOLT_TUNE_OUT_FAIL_REASON_ROLLBACK_REQUEST }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_tune_out_fail_reason = { .name = "bcmolt_tune_out_fail_reason", .descr = "Tune out fail reason", .size = sizeof(bcmolt_tune_out_fail_reason), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_tune_out_fail_reason_string_table } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_u32_list_u32_max_500_hex = { .name = "bcmolt_u32_list_u32_max_500_hex", .descr = "Variable-length list of U32", .size = sizeof(bcmolt_u32_list_u32_max_500_hex), .base_type = BCMOLT_BASE_TYPE_ID_ARR_DYN, .x = { .arr_dyn = { .elem_type = &type_descr_uint32_t_hex, .len_size = 4, .max_size = 500 } } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_u8_list_u16_hex = { .name = "bcmolt_u8_list_u16_hex", .descr = "Variable-length list of U8", .size = sizeof(bcmolt_u8_list_u16_hex), .base_type = BCMOLT_BASE_TYPE_ID_ARR_DYN, .x = { .arr_dyn = { .elem_type = &type_descr_uint8_t_hex, .len_size = 2, .max_size = DEFAULT_DYN_ARR_MAX_SIZE / sizeof(uint8_t) } } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_u8_list_u32 = { .name = "bcmolt_u8_list_u32", .descr = "Variable-length list of U8", .size = sizeof(bcmolt_u8_list_u32), .base_type = BCMOLT_BASE_TYPE_ID_ARR_DYN, .x = { .arr_dyn = { .elem_type = &type_descr_uint8_t, .len_size = 4, .max_size = DEFAULT_DYN_ARR_MAX_SIZE / sizeof(uint8_t) } } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_u8_list_u32_max_2048 = { .name = "bcmolt_u8_list_u32_max_2048", .descr = "Variable-length list of U8", .size = sizeof(bcmolt_u8_list_u32_max_2048), .base_type = BCMOLT_BASE_TYPE_ID_ARR_DYN, .x = { .arr_dyn = { .elem_type = &type_descr_uint8_t, .len_size = 4, .max_size = 2048 } } };
+bcmcli_enum_val bcmolt_uart_baudrate_string_table[] = { { .name = "uart_rate_4800", .val = BCMOLT_UART_BAUDRATE_UART_RATE_4800 }, { .name = "uart_rate_9600", .val = BCMOLT_UART_BAUDRATE_UART_RATE_9600 }, { .name = "uart_rate_14400", .val = BCMOLT_UART_BAUDRATE_UART_RATE_14400 }, { .name = "uart_rate_19200", .val = BCMOLT_UART_BAUDRATE_UART_RATE_19200 }, { .name = "uart_rate_38400", .val = BCMOLT_UART_BAUDRATE_UART_RATE_38400 }, { .name = "uart_rate_57600", .val = BCMOLT_UART_BAUDRATE_UART_RATE_57600 }, { .name = "uart_rate_115200", .val = BCMOLT_UART_BAUDRATE_UART_RATE_115200 }, { .name = "uart_rate_230400", .val = BCMOLT_UART_BAUDRATE_UART_RATE_230400 }, { .name = "uart_rate_380400", .val = BCMOLT_UART_BAUDRATE_UART_RATE_380400 }, { .name = "uart_rate_460800", .val = BCMOLT_UART_BAUDRATE_UART_RATE_460800 }, { .name = "uart_rate_921600", .val = BCMOLT_UART_BAUDRATE_UART_RATE_921600 }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_uart_baudrate = { .name = "bcmolt_uart_baudrate", .descr = "UART baud rate", .size = sizeof(bcmolt_uart_baudrate), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_uart_baudrate_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_ubd_info_fields[] = { { .name = "actual_polling_interval", .descr = "Units: 65.536us", .offset = offsetof(bcmolt_ubd_info, actual_polling_interval), .type = &type_descr_uint16_t }, { .name = "actual_grant_threshold_tq", .descr = "Actual Grant Threshold (TQ)", .offset = offsetof(bcmolt_ubd_info, actual_grant_threshold_tq), .type = &type_descr_uint32_t }, { .name = "actual_min_schedulershaper", .descr = "Actual Min Scheduler/Shaper", .offset = offsetof(bcmolt_ubd_info, actual_min_schedulershaper), .type = &type_descr_bcmolt_actual_schedulershaper }, { .name = "actual_max_schedulershaper", .descr = "Actual Max Scheduler/Shaper", .offset = offsetof(bcmolt_ubd_info, actual_max_schedulershaper), .type = &type_descr_bcmolt_actual_schedulershaper } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ubd_info = { .name = "bcmolt_ubd_info", .descr = "UBD Info", .size = sizeof(bcmolt_ubd_info), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_ubd_info_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_ubd_info_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_upstream_bandwidth_distribution_fields[] = { { .name = "polling_interval_us", .descr = "Polling Interval", .offset = offsetof(bcmolt_upstream_bandwidth_distribution, polling_interval_us), .type = &type_descr_bcmolt_polling_interval }, { .name = "grant_threshold_tq", .descr = "Grant Threshold (TQ)", .offset = offsetof(bcmolt_upstream_bandwidth_distribution, grant_threshold_tq), .type = &type_descr_uint32_t }, { .name = "min_schedulershaper", .descr = "Min Scheduler/Shaper", .offset = offsetof(bcmolt_upstream_bandwidth_distribution, min_schedulershaper), .type = &type_descr_bcmolt_solicited_scheduler }, { .name = "max_schedulershaper", .descr = "Max Scheduler/Shaper", .offset = offsetof(bcmolt_upstream_bandwidth_distribution, max_schedulershaper), .type = &type_descr_bcmolt_solicited_scheduler }, { .name = "tdm_grant_size_tq", .descr = "TDM Grant Size (TQ)", .offset = offsetof(bcmolt_upstream_bandwidth_distribution, tdm_grant_size_tq), .type = &type_descr_uint32_t }, { .name = "tdm_grant_interval_us", .descr = "Interval between TDM grants (in us).", .offset = offsetof(bcmolt_upstream_bandwidth_distribution, tdm_grant_interval_us), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_upstream_bandwidth_distribution = { .name = "bcmolt_upstream_bandwidth_distribution", .descr = "The upstream bandwidth distribution for this LLID.", .size = sizeof(bcmolt_upstream_bandwidth_distribution), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_upstream_bandwidth_distribution_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_upstream_bandwidth_distribution_fields } } };
+bcmcli_enum_val bcmolt_us_gem_port_destination_string_table[] = { { .name = "data", .val = BCMOLT_US_GEM_PORT_DESTINATION_DATA }, { .name = "cpu", .val = BCMOLT_US_GEM_PORT_DESTINATION_CPU }, { .name = "omci", .val = BCMOLT_US_GEM_PORT_DESTINATION_OMCI }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_us_gem_port_destination = { .name = "bcmolt_us_gem_port_destination", .descr = "us_gem_port_destination", .size = sizeof(bcmolt_us_gem_port_destination), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_us_gem_port_destination_string_table } };
+bcmcli_enum_val bcmolt_us_vlan_action_string_table[] = { { .name = "add", .val = BCMOLT_US_VLAN_ACTION_ADD }, { .name = "transparent", .val = BCMOLT_US_VLAN_ACTION_TRANSPARENT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_us_vlan_action = { .name = "bcmolt_us_vlan_action", .descr = "US VLAN action", .size = sizeof(bcmolt_us_vlan_action), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_us_vlan_action_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_vlan_tag_fields[] = { { .name = "vlan_id", .descr = "VLAN ID", .offset = offsetof(bcmolt_vlan_tag, vlan_id), .type = &type_descr_uint16_t }, { .name = "pbit", .descr = "Pbit", .offset = offsetof(bcmolt_vlan_tag, pbit), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_vlan_tag = { .name = "bcmolt_vlan_tag", .descr = "VLAN tag", .size = sizeof(bcmolt_vlan_tag), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_vlan_tag_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_vlan_tag_fields } } };
+bcmcli_enum_val bcmolt_vlan_to_flow_mapping_method_string_table[] = { { .name = "vid", .val = BCMOLT_VLAN_TO_FLOW_MAPPING_METHOD_VID }, { .name = "macplusvid", .val = BCMOLT_VLAN_TO_FLOW_MAPPING_METHOD_MACPLUSVID }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_vlan_to_flow_mapping_method = { .name = "bcmolt_vlan_to_flow_mapping_method", .descr = "VLAN to flow mapping method", .size = sizeof(bcmolt_vlan_to_flow_mapping_method), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_vlan_to_flow_mapping_method_string_table } };
+bcmcli_enum_val bcmolt_xgpon_alloc_auto_cfg_id_string_table[] = { { .name = "configuration_completed", .val = BCMOLT_XGPON_ALLOC_AUTO_CFG_ID_CONFIGURATION_COMPLETED }, { .name = "get_alloc_stats_completed", .val = BCMOLT_XGPON_ALLOC_AUTO_CFG_ID_GET_ALLOC_STATS_COMPLETED }, { .name = "stat_alarm_cleared", .val = BCMOLT_XGPON_ALLOC_AUTO_CFG_ID_STAT_ALARM_CLEARED }, { .name = "stat_alarm_raised", .val = BCMOLT_XGPON_ALLOC_AUTO_CFG_ID_STAT_ALARM_RAISED }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_alloc_auto_cfg_id = { .name = "bcmolt_xgpon_alloc_auto_cfg_id", .descr = "Identifiers for all properties contained in the xgpon_alloc_auto_cfg group.", .size = sizeof(bcmolt_xgpon_alloc_auto_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_alloc_auto_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_alloc_cfg_id_string_table[] = { { .name = "state", .val = BCMOLT_XGPON_ALLOC_CFG_ID_STATE }, { .name = "sla", .val = BCMOLT_XGPON_ALLOC_CFG_ID_SLA }, { .name = "onu_id", .val = BCMOLT_XGPON_ALLOC_CFG_ID_ONU_ID }, { .name = "collect_stats", .val = BCMOLT_XGPON_ALLOC_CFG_ID_COLLECT_STATS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_alloc_cfg_id = { .name = "bcmolt_xgpon_alloc_cfg_id", .descr = "Identifiers for all properties contained in the xgpon_alloc_cfg group.", .size = sizeof(bcmolt_xgpon_alloc_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_alloc_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_alloc_configuration_completed_id_string_table[] = { { .name = "status", .val = BCMOLT_XGPON_ALLOC_CONFIGURATION_COMPLETED_ID_STATUS }, { .name = "new_state", .val = BCMOLT_XGPON_ALLOC_CONFIGURATION_COMPLETED_ID_NEW_STATE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_alloc_configuration_completed_id = { .name = "bcmolt_xgpon_alloc_configuration_completed_id", .descr = "Identifiers for all properties contained in the xgpon_alloc_configuration_completed group.", .size = sizeof(bcmolt_xgpon_alloc_configuration_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_alloc_configuration_completed_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_alloc_get_alloc_stats_completed_id_string_table[] = { { .name = "status", .val = BCMOLT_XGPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_STATUS }, { .name = "average_nsr_used", .val = BCMOLT_XGPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_NSR_USED }, { .name = "average_nsr_allocated", .val = BCMOLT_XGPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_NSR_ALLOCATED }, { .name = "average_sr_report", .val = BCMOLT_XGPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_SR_REPORT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_alloc_get_alloc_stats_completed_id = { .name = "bcmolt_xgpon_alloc_get_alloc_stats_completed_id", .descr = "Identifiers for all properties contained in the xgpon_alloc_get_alloc_stats_completed group.", .size = sizeof(bcmolt_xgpon_alloc_get_alloc_stats_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_alloc_get_alloc_stats_completed_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_alloc_get_stats_id_string_table[] = { { .name = "num_of_cycles", .val = BCMOLT_XGPON_ALLOC_GET_STATS_ID_NUM_OF_CYCLES }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_alloc_get_stats_id = { .name = "bcmolt_xgpon_alloc_get_stats_id", .descr = "Identifiers for all properties contained in the xgpon_alloc_get_stats group.", .size = sizeof(bcmolt_xgpon_alloc_get_stats_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_alloc_get_stats_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_alloc_key_id_string_table[] = { { .name = "pon_ni", .val = BCMOLT_XGPON_ALLOC_KEY_ID_PON_NI }, { .name = "alloc_id", .val = BCMOLT_XGPON_ALLOC_KEY_ID_ALLOC_ID }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_alloc_key_id = { .name = "bcmolt_xgpon_alloc_key_id", .descr = "Identifiers for all properties contained in the xgpon_alloc_key group.", .size = sizeof(bcmolt_xgpon_alloc_key_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_alloc_key_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_alloc_set_state_id_string_table[] = { { .name = "state", .val = BCMOLT_XGPON_ALLOC_SET_STATE_ID_STATE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_alloc_set_state_id = { .name = "bcmolt_xgpon_alloc_set_state_id", .descr = "Identifiers for all properties contained in the xgpon_alloc_set_state group.", .size = sizeof(bcmolt_xgpon_alloc_set_state_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_alloc_set_state_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_alloc_stat_alarm_cleared_id_string_table[] = { { .name = "stat", .val = BCMOLT_XGPON_ALLOC_STAT_ALARM_CLEARED_ID_STAT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_alloc_stat_alarm_cleared_id = { .name = "bcmolt_xgpon_alloc_stat_alarm_cleared_id", .descr = "Identifiers for all properties contained in the xgpon_alloc_stat_alarm_cleared group.", .size = sizeof(bcmolt_xgpon_alloc_stat_alarm_cleared_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_alloc_stat_alarm_cleared_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_alloc_stat_alarm_raised_id_string_table[] = { { .name = "stat", .val = BCMOLT_XGPON_ALLOC_STAT_ALARM_RAISED_ID_STAT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_alloc_stat_alarm_raised_id = { .name = "bcmolt_xgpon_alloc_stat_alarm_raised_id", .descr = "Identifiers for all properties contained in the xgpon_alloc_stat_alarm_raised group.", .size = sizeof(bcmolt_xgpon_alloc_stat_alarm_raised_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_alloc_stat_alarm_raised_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_alloc_stat_cfg_id_string_table[] = { { .name = "cfg", .val = BCMOLT_XGPON_ALLOC_STAT_CFG_ID_CFG }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_alloc_stat_cfg_id = { .name = "bcmolt_xgpon_alloc_stat_cfg_id", .descr = "Identifiers for all properties contained in the xgpon_alloc_stat_cfg group.", .size = sizeof(bcmolt_xgpon_alloc_stat_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_alloc_stat_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_alloc_stat_id_string_table[] = { { .name = "rx_bytes", .val = BCMOLT_XGPON_ALLOC_STAT_ID_RX_BYTES }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_alloc_stat_id = { .name = "bcmolt_xgpon_alloc_stat_id", .descr = "Identifiers for all properties contained in the xgpon_alloc_stat group.", .size = sizeof(bcmolt_xgpon_alloc_stat_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_alloc_stat_id_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_alloc_with_state_fields[] = { { .name = "alloc_id", .descr = "Alloc ID", .offset = offsetof(bcmolt_xgpon_alloc_with_state, alloc_id), .type = &type_descr_uint16_t }, { .name = "state", .descr = "State", .offset = offsetof(bcmolt_xgpon_alloc_with_state, state), .type = &type_descr_bcmolt_alloc_state } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_alloc_with_state = { .name = "bcmolt_xgpon_alloc_with_state", .descr = "XGPON Alloc With State", .size = sizeof(bcmolt_xgpon_alloc_with_state), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_alloc_with_state_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_alloc_with_state_fields } } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_alloc_with_state_list_u16_max_32 = { .name = "bcmolt_xgpon_alloc_with_state_list_u16_max_32", .descr = "Variable-length list of xgpon_alloc_with_state", .size = sizeof(bcmolt_xgpon_alloc_with_state_list_u16_max_32), .base_type = BCMOLT_BASE_TYPE_ID_ARR_DYN, .x = { .arr_dyn = { .elem_type = &type_descr_bcmolt_xgpon_alloc_with_state, .len_size = 2, .max_size = 32 } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_ed_state_fields[] = { { .name = "reset_on_ed_fail", .descr = "reset on ED fail", .offset = offsetof(bcmolt_xgpon_ed_state, reset_on_ed_fail), .type = &type_descr_bcmos_bool }, { .name = "reset_on_ed_success", .descr = "reset on ED success", .offset = offsetof(bcmolt_xgpon_ed_state, reset_on_ed_success), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ed_state = { .name = "bcmolt_xgpon_ed_state", .descr = "xgpon ed state", .size = sizeof(bcmolt_xgpon_ed_state), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_ed_state_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_ed_state_fields } } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_gem_id_list_u8_max_16 = { .name = "bcmolt_xgpon_gem_id_list_u8_max_16", .descr = "Variable-length list of xgpon_gem_id", .size = sizeof(bcmolt_xgpon_gem_id_list_u8_max_16), .base_type = BCMOLT_BASE_TYPE_ID_ARR_DYN, .x = { .arr_dyn = { .elem_type = &type_descr_uint16_t, .len_size = 1, .max_size = 16 } } };
+bcmcli_enum_val bcmolt_xgpon_gem_port_auto_cfg_id_string_table[] = { { .name = "stat_alarm_cleared", .val = BCMOLT_XGPON_GEM_PORT_AUTO_CFG_ID_STAT_ALARM_CLEARED }, { .name = "stat_alarm_raised", .val = BCMOLT_XGPON_GEM_PORT_AUTO_CFG_ID_STAT_ALARM_RAISED }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_gem_port_auto_cfg_id = { .name = "bcmolt_xgpon_gem_port_auto_cfg_id", .descr = "Identifiers for all properties contained in the xgpon_gem_port_auto_cfg group.", .size = sizeof(bcmolt_xgpon_gem_port_auto_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_gem_port_auto_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_gem_port_cfg_id_string_table[] = { { .name = "configuration", .val = BCMOLT_XGPON_GEM_PORT_CFG_ID_CONFIGURATION }, { .name = "onu_id", .val = BCMOLT_XGPON_GEM_PORT_CFG_ID_ONU_ID }, { .name = "gem_port_state", .val = BCMOLT_XGPON_GEM_PORT_CFG_ID_GEM_PORT_STATE }, { .name = "encryption_mode", .val = BCMOLT_XGPON_GEM_PORT_CFG_ID_ENCRYPTION_MODE }, { .name = "upstream_destination_queue", .val = BCMOLT_XGPON_GEM_PORT_CFG_ID_UPSTREAM_DESTINATION_QUEUE }, { .name = "control", .val = BCMOLT_XGPON_GEM_PORT_CFG_ID_CONTROL }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_gem_port_cfg_id = { .name = "bcmolt_xgpon_gem_port_cfg_id", .descr = "Identifiers for all properties contained in the xgpon_gem_port_cfg group.", .size = sizeof(bcmolt_xgpon_gem_port_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_gem_port_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_gem_port_key_id_string_table[] = { { .name = "pon_ni", .val = BCMOLT_XGPON_GEM_PORT_KEY_ID_PON_NI }, { .name = "gem_port_id", .val = BCMOLT_XGPON_GEM_PORT_KEY_ID_GEM_PORT_ID }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_gem_port_key_id = { .name = "bcmolt_xgpon_gem_port_key_id", .descr = "Identifiers for all properties contained in the xgpon_gem_port_key group.", .size = sizeof(bcmolt_xgpon_gem_port_key_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_gem_port_key_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_gem_port_stat_alarm_cleared_id_string_table[] = { { .name = "stat", .val = BCMOLT_XGPON_GEM_PORT_STAT_ALARM_CLEARED_ID_STAT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_gem_port_stat_alarm_cleared_id = { .name = "bcmolt_xgpon_gem_port_stat_alarm_cleared_id", .descr = "Identifiers for all properties contained in the xgpon_gem_port_stat_alarm_cleared group.", .size = sizeof(bcmolt_xgpon_gem_port_stat_alarm_cleared_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_gem_port_stat_alarm_cleared_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_gem_port_stat_alarm_raised_id_string_table[] = { { .name = "stat", .val = BCMOLT_XGPON_GEM_PORT_STAT_ALARM_RAISED_ID_STAT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_gem_port_stat_alarm_raised_id = { .name = "bcmolt_xgpon_gem_port_stat_alarm_raised_id", .descr = "Identifiers for all properties contained in the xgpon_gem_port_stat_alarm_raised group.", .size = sizeof(bcmolt_xgpon_gem_port_stat_alarm_raised_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_gem_port_stat_alarm_raised_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_gem_port_stat_cfg_id_string_table[] = { { .name = "cfg", .val = BCMOLT_XGPON_GEM_PORT_STAT_CFG_ID_CFG }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_gem_port_stat_cfg_id = { .name = "bcmolt_xgpon_gem_port_stat_cfg_id", .descr = "Identifiers for all properties contained in the xgpon_gem_port_stat_cfg group.", .size = sizeof(bcmolt_xgpon_gem_port_stat_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_gem_port_stat_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_gem_port_stat_id_string_table[] = { { .name = "tx_bytes", .val = BCMOLT_XGPON_GEM_PORT_STAT_ID_TX_BYTES }, { .name = "tx_packets", .val = BCMOLT_XGPON_GEM_PORT_STAT_ID_TX_PACKETS }, { .name = "rx_packets", .val = BCMOLT_XGPON_GEM_PORT_STAT_ID_RX_PACKETS }, { .name = "rx_bytes", .val = BCMOLT_XGPON_GEM_PORT_STAT_ID_RX_BYTES }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_gem_port_stat_id = { .name = "bcmolt_xgpon_gem_port_stat_id", .descr = "Identifiers for all properties contained in the xgpon_gem_port_stat group.", .size = sizeof(bcmolt_xgpon_gem_port_stat_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_gem_port_stat_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_gem_port_state_string_table[] = { { .name = "not_configured", .val = BCMOLT_XGPON_GEM_PORT_STATE_NOT_CONFIGURED }, { .name = "inactive", .val = BCMOLT_XGPON_GEM_PORT_STATE_INACTIVE }, { .name = "active", .val = BCMOLT_XGPON_GEM_PORT_STATE_ACTIVE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_gem_port_state = { .name = "bcmolt_xgpon_gem_port_state", .descr = "XGPON GEM Port State", .size = sizeof(bcmolt_xgpon_gem_port_state), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_gem_port_state_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_gem_port_with_state_fields[] = { { .name = "gem_id", .descr = "GEM ID", .offset = offsetof(bcmolt_xgpon_gem_port_with_state, gem_id), .type = &type_descr_uint16_t }, { .name = "state", .descr = "State", .offset = offsetof(bcmolt_xgpon_gem_port_with_state, state), .type = &type_descr_bcmolt_xgpon_gem_port_state } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_gem_port_with_state = { .name = "bcmolt_xgpon_gem_port_with_state", .descr = "XGPON GEM Port With State", .size = sizeof(bcmolt_xgpon_gem_port_with_state), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_gem_port_with_state_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_gem_port_with_state_fields } } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_gem_port_with_state_list_u16_max_128 = { .name = "bcmolt_xgpon_gem_port_with_state_list_u16_max_128", .descr = "Variable-length list of xgpon_gem_port_with_state", .size = sizeof(bcmolt_xgpon_gem_port_with_state_list_u16_max_128), .base_type = BCMOLT_BASE_TYPE_ID_ARR_DYN, .x = { .arr_dyn = { .elem_type = &type_descr_bcmolt_xgpon_gem_port_with_state, .len_size = 2, .max_size = 128 } } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_gem_port_with_state_list_u16_max_256 = { .name = "bcmolt_xgpon_gem_port_with_state_list_u16_max_256", .descr = "Variable-length list of xgpon_gem_port_with_state", .size = sizeof(bcmolt_xgpon_gem_port_with_state_list_u16_max_256), .base_type = BCMOLT_BASE_TYPE_ID_ARR_DYN, .x = { .arr_dyn = { .elem_type = &type_descr_bcmolt_xgpon_gem_port_with_state, .len_size = 2, .max_size = 256 } } };
+bcmcli_enum_val bcmolt_xgpon_iwf_cfg_id_string_table[] = { { .name = "us_otag_direct_tpid", .val = BCMOLT_XGPON_IWF_CFG_ID_US_OTAG_DIRECT_TPID }, { .name = "ds_tpid", .val = BCMOLT_XGPON_IWF_CFG_ID_DS_TPID }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_iwf_cfg_id = { .name = "bcmolt_xgpon_iwf_cfg_id", .descr = "Identifiers for all properties contained in the xgpon_iwf_cfg group.", .size = sizeof(bcmolt_xgpon_iwf_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_iwf_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_iwf_key_id_string_table[] = { { .name = "pon_ni", .val = BCMOLT_XGPON_IWF_KEY_ID_PON_NI }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_iwf_key_id = { .name = "bcmolt_xgpon_iwf_key_id", .descr = "Identifiers for all properties contained in the xgpon_iwf_key group.", .size = sizeof(bcmolt_xgpon_iwf_key_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_iwf_key_id_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_key_exchange_fields[] = { { .name = "interval", .descr = "Key Exchange process interval in milliseconds", .offset = offsetof(bcmolt_xgpon_key_exchange, interval), .type = &type_descr_uint32_t }, { .name = "control", .descr = "Enable\\disable periodic process of Key Exchange for active ONUs", .offset = offsetof(bcmolt_xgpon_key_exchange, control), .type = &type_descr_bcmolt_control_state }, { .name = "encrypted_ports_only", .descr = "Perform key exchange only to ONUs with GEM ports that have downstream encryption enabled", .offset = offsetof(bcmolt_xgpon_key_exchange, encrypted_ports_only), .type = &type_descr_bcmolt_control_state } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_key_exchange = { .name = "bcmolt_xgpon_key_exchange", .descr = "XGPON Key Exchange", .size = sizeof(bcmolt_xgpon_key_exchange), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_key_exchange_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_key_exchange_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_multicast_key_fields[] = { { .name = "key", .descr = "AES encryption key for multicsat XGEM port IDs", .offset = offsetof(bcmolt_xgpon_multicast_key, key), .type = &type_descr_bcmolt_aes_key }, { .name = "key_control", .descr = "Enable\\Disable encryption on multicast XGEM ports", .offset = offsetof(bcmolt_xgpon_multicast_key, key_control), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_multicast_key = { .name = "bcmolt_xgpon_multicast_key", .descr = "XGPON Multicast key", .size = sizeof(bcmolt_xgpon_multicast_key), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_multicast_key_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_multicast_key_fields } } };
+bcmcli_enum_val bcmolt_xgpon_ni_activate_all_onus_completed_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_activate_all_onus_completed_id = { .name = "bcmolt_xgpon_ni_activate_all_onus_completed_id", .descr = "Identifiers for all properties contained in the xgpon_ni_activate_all_onus_completed group.", .size = sizeof(bcmolt_xgpon_ni_activate_all_onus_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_ni_activate_all_onus_completed_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_ni_adjust_tx_wavelength_id_string_table[] = { { .name = "serial_number", .val = BCMOLT_XGPON_NI_ADJUST_TX_WAVELENGTH_ID_SERIAL_NUMBER }, { .name = "freqency_adjustment_direction", .val = BCMOLT_XGPON_NI_ADJUST_TX_WAVELENGTH_ID_FREQENCY_ADJUSTMENT_DIRECTION }, { .name = "frequency_adjustment_size", .val = BCMOLT_XGPON_NI_ADJUST_TX_WAVELENGTH_ID_FREQUENCY_ADJUSTMENT_SIZE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_adjust_tx_wavelength_id = { .name = "bcmolt_xgpon_ni_adjust_tx_wavelength_id", .descr = "Identifiers for all properties contained in the xgpon_ni_adjust_tx_wavelength group.", .size = sizeof(bcmolt_xgpon_ni_adjust_tx_wavelength_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_ni_adjust_tx_wavelength_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_ni_auto_cfg_id_string_table[] = { { .name = "activate_all_onus_completed", .val = BCMOLT_XGPON_NI_AUTO_CFG_ID_ACTIVATE_ALL_ONUS_COMPLETED }, { .name = "cpu_packets_failure", .val = BCMOLT_XGPON_NI_AUTO_CFG_ID_CPU_PACKETS_FAILURE }, { .name = "deactivate_all_onus_completed", .val = BCMOLT_XGPON_NI_AUTO_CFG_ID_DEACTIVATE_ALL_ONUS_COMPLETED }, { .name = "disable_all_onus_completed", .val = BCMOLT_XGPON_NI_AUTO_CFG_ID_DISABLE_ALL_ONUS_COMPLETED }, { .name = "enable_all_onus_completed", .val = BCMOLT_XGPON_NI_AUTO_CFG_ID_ENABLE_ALL_ONUS_COMPLETED }, { .name = "los", .val = BCMOLT_XGPON_NI_AUTO_CFG_ID_LOS }, { .name = "onu_discovered", .val = BCMOLT_XGPON_NI_AUTO_CFG_ID_ONU_DISCOVERED }, { .name = "onu_upgrade_complete", .val = BCMOLT_XGPON_NI_AUTO_CFG_ID_ONU_UPGRADE_COMPLETE }, { .name = "protection_switching_onus_ranged", .val = BCMOLT_XGPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_ONUS_RANGED }, { .name = "protection_switching_switchover_completed", .val = BCMOLT_XGPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED }, { .name = "protection_switching_traffic_resume", .val = BCMOLT_XGPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_TRAFFIC_RESUME }, { .name = "rogue_detection_completed", .val = BCMOLT_XGPON_NI_AUTO_CFG_ID_ROGUE_DETECTION_COMPLETED }, { .name = "rogue_onu_special_map_cycle_start", .val = BCMOLT_XGPON_NI_AUTO_CFG_ID_ROGUE_ONU_SPECIAL_MAP_CYCLE_START }, { .name = "serial_number_acquisition_cycle_start", .val = BCMOLT_XGPON_NI_AUTO_CFG_ID_SERIAL_NUMBER_ACQUISITION_CYCLE_START }, { .name = "standby_pon_monitoring_cycle_completed", .val = BCMOLT_XGPON_NI_AUTO_CFG_ID_STANDBY_PON_MONITORING_CYCLE_COMPLETED }, { .name = "stat_alarm_cleared", .val = BCMOLT_XGPON_NI_AUTO_CFG_ID_STAT_ALARM_CLEARED }, { .name = "stat_alarm_raised", .val = BCMOLT_XGPON_NI_AUTO_CFG_ID_STAT_ALARM_RAISED }, { .name = "state_change_completed", .val = BCMOLT_XGPON_NI_AUTO_CFG_ID_STATE_CHANGE_COMPLETED }, { .name = "tod_request_completed", .val = BCMOLT_XGPON_NI_AUTO_CFG_ID_TOD_REQUEST_COMPLETED }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_auto_cfg_id = { .name = "bcmolt_xgpon_ni_auto_cfg_id", .descr = "Identifiers for all properties contained in the xgpon_ni_auto_cfg group.", .size = sizeof(bcmolt_xgpon_ni_auto_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_ni_auto_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_ni_broadcast_ploam_packet_id_string_table[] = { { .name = "ploam", .val = BCMOLT_XGPON_NI_BROADCAST_PLOAM_PACKET_ID_PLOAM }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_broadcast_ploam_packet_id = { .name = "bcmolt_xgpon_ni_broadcast_ploam_packet_id", .descr = "Identifiers for all properties contained in the xgpon_ni_broadcast_ploam_packet group.", .size = sizeof(bcmolt_xgpon_ni_broadcast_ploam_packet_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_ni_broadcast_ploam_packet_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_ni_cfg_id_string_table[] = { { .name = "hw_pon_id", .val = BCMOLT_XGPON_NI_CFG_ID_HW_PON_ID }, { .name = "available_bandwidth", .val = BCMOLT_XGPON_NI_CFG_ID_AVAILABLE_BANDWIDTH }, { .name = "number_of_active_onus", .val = BCMOLT_XGPON_NI_CFG_ID_NUMBER_OF_ACTIVE_ONUS }, { .name = "pon_status", .val = BCMOLT_XGPON_NI_CFG_ID_PON_STATUS }, { .name = "pon_distance", .val = BCMOLT_XGPON_NI_CFG_ID_PON_DISTANCE }, { .name = "ranging_window_size", .val = BCMOLT_XGPON_NI_CFG_ID_RANGING_WINDOW_SIZE }, { .name = "eqd_cycles_number", .val = BCMOLT_XGPON_NI_CFG_ID_EQD_CYCLES_NUMBER }, { .name = "drift_control", .val = BCMOLT_XGPON_NI_CFG_ID_DRIFT_CONTROL }, { .name = "los_alarm_threshold", .val = BCMOLT_XGPON_NI_CFG_ID_LOS_ALARM_THRESHOLD }, { .name = "los_initial_value", .val = BCMOLT_XGPON_NI_CFG_ID_LOS_INITIAL_VALUE }, { .name = "onu_alarms_thresholds", .val = BCMOLT_XGPON_NI_CFG_ID_ONU_ALARMS_THRESHOLDS }, { .name = "ber_monitor", .val = BCMOLT_XGPON_NI_CFG_ID_BER_MONITOR }, { .name = "onu_activation", .val = BCMOLT_XGPON_NI_CFG_ID_ONU_ACTIVATION }, { .name = "sn_acquisition", .val = BCMOLT_XGPON_NI_CFG_ID_SN_ACQUISITION }, { .name = "key_exchange", .val = BCMOLT_XGPON_NI_CFG_ID_KEY_EXCHANGE }, { .name = "protection_switching", .val = BCMOLT_XGPON_NI_CFG_ID_PROTECTION_SWITCHING }, { .name = "protection_switching_debug", .val = BCMOLT_XGPON_NI_CFG_ID_PROTECTION_SWITCHING_DEBUG }, { .name = "cbr_rt_allocation_profile", .val = BCMOLT_XGPON_NI_CFG_ID_CBR_RT_ALLOCATION_PROFILE }, { .name = "cbr_nrt_allocation_profile", .val = BCMOLT_XGPON_NI_CFG_ID_CBR_NRT_ALLOCATION_PROFILE }, { .name = "power_management", .val = BCMOLT_XGPON_NI_CFG_ID_POWER_MANAGEMENT }, { .name = "rogue_onu_detection_process", .val = BCMOLT_XGPON_NI_CFG_ID_ROGUE_ONU_DETECTION_PROCESS }, { .name = "periodic_standby_pon_monitoring", .val = BCMOLT_XGPON_NI_CFG_ID_PERIODIC_STANDBY_PON_MONITORING }, { .name = "dba_mode", .val = BCMOLT_XGPON_NI_CFG_ID_DBA_MODE }, { .name = "ploam_handling", .val = BCMOLT_XGPON_NI_CFG_ID_PLOAM_HANDLING }, { .name = "min_data_alloc_id", .val = BCMOLT_XGPON_NI_CFG_ID_MIN_DATA_ALLOC_ID }, { .name = "min_data_gem_port_id", .val = BCMOLT_XGPON_NI_CFG_ID_MIN_DATA_GEM_PORT_ID }, { .name = "multicast_key", .val = BCMOLT_XGPON_NI_CFG_ID_MULTICAST_KEY }, { .name = "prbs_checker", .val = BCMOLT_XGPON_NI_CFG_ID_PRBS_CHECKER }, { .name = "prbs_generator", .val = BCMOLT_XGPON_NI_CFG_ID_PRBS_GENERATOR }, { .name = "prbs_status", .val = BCMOLT_XGPON_NI_CFG_ID_PRBS_STATUS }, { .name = "automatic_onu_deactivation", .val = BCMOLT_XGPON_NI_CFG_ID_AUTOMATIC_ONU_DEACTIVATION }, { .name = "us_bandwidth_limit", .val = BCMOLT_XGPON_NI_CFG_ID_US_BANDWIDTH_LIMIT }, { .name = "all_onus", .val = BCMOLT_XGPON_NI_CFG_ID_ALL_ONUS }, { .name = "all_mcast_gem_ports", .val = BCMOLT_XGPON_NI_CFG_ID_ALL_MCAST_GEM_PORTS }, { .name = "debug", .val = BCMOLT_XGPON_NI_CFG_ID_DEBUG }, { .name = "onu_upgrade_params", .val = BCMOLT_XGPON_NI_CFG_ID_ONU_UPGRADE_PARAMS }, { .name = "ds_fec_mode", .val = BCMOLT_XGPON_NI_CFG_ID_DS_FEC_MODE }, { .name = "dba_type", .val = BCMOLT_XGPON_NI_CFG_ID_DBA_TYPE }, { .name = "onu_tuning", .val = BCMOLT_XGPON_NI_CFG_ID_ONU_TUNING }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_cfg_id = { .name = "bcmolt_xgpon_ni_cfg_id", .descr = "Identifiers for all properties contained in the xgpon_ni_cfg group.", .size = sizeof(bcmolt_xgpon_ni_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_ni_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_ni_cpu_packets_failure_id_string_table[] = { { .name = "error", .val = BCMOLT_XGPON_NI_CPU_PACKETS_FAILURE_ID_ERROR }, { .name = "gem_port_id", .val = BCMOLT_XGPON_NI_CPU_PACKETS_FAILURE_ID_GEM_PORT_ID }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_cpu_packets_failure_id = { .name = "bcmolt_xgpon_ni_cpu_packets_failure_id", .descr = "Identifiers for all properties contained in the xgpon_ni_cpu_packets_failure group.", .size = sizeof(bcmolt_xgpon_ni_cpu_packets_failure_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_ni_cpu_packets_failure_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_ni_cpu_packets_id_string_table[] = { { .name = "packet_type", .val = BCMOLT_XGPON_NI_CPU_PACKETS_ID_PACKET_TYPE }, { .name = "calc_crc", .val = BCMOLT_XGPON_NI_CPU_PACKETS_ID_CALC_CRC }, { .name = "gem_port_list", .val = BCMOLT_XGPON_NI_CPU_PACKETS_ID_GEM_PORT_LIST }, { .name = "buffer", .val = BCMOLT_XGPON_NI_CPU_PACKETS_ID_BUFFER }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_cpu_packets_id = { .name = "bcmolt_xgpon_ni_cpu_packets_id", .descr = "Identifiers for all properties contained in the xgpon_ni_cpu_packets group.", .size = sizeof(bcmolt_xgpon_ni_cpu_packets_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_ni_cpu_packets_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_ni_deactivate_all_onus_completed_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_deactivate_all_onus_completed_id = { .name = "bcmolt_xgpon_ni_deactivate_all_onus_completed_id", .descr = "Identifiers for all properties contained in the xgpon_ni_deactivate_all_onus_completed group.", .size = sizeof(bcmolt_xgpon_ni_deactivate_all_onus_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_ni_deactivate_all_onus_completed_id_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_debug_fields[] = { { .name = "increase_available_cbr_bw", .descr = "Use increase available CBR bandwidth for better BW utilization", .offset = offsetof(bcmolt_xgpon_ni_debug, increase_available_cbr_bw), .type = &type_descr_bcmos_bool }, { .name = "inter_burst_gap_in_bytes", .descr = "Gap between two consecutive bursts for the same ONU", .offset = offsetof(bcmolt_xgpon_ni_debug, inter_burst_gap_in_bytes), .type = &type_descr_uint16_t }, { .name = "number_of_gem_ports_per_onu", .descr = "Number of gem ports per onu", .offset = offsetof(bcmolt_xgpon_ni_debug, number_of_gem_ports_per_onu), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_debug = { .name = "bcmolt_xgpon_ni_debug", .descr = "XGPON NI Debug parameters", .size = sizeof(bcmolt_xgpon_ni_debug), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_ni_debug_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_ni_debug_fields } } };
+bcmcli_enum_val bcmolt_xgpon_ni_disable_all_onus_completed_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_disable_all_onus_completed_id = { .name = "bcmolt_xgpon_ni_disable_all_onus_completed_id", .descr = "Identifiers for all properties contained in the xgpon_ni_disable_all_onus_completed group.", .size = sizeof(bcmolt_xgpon_ni_disable_all_onus_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_ni_disable_all_onus_completed_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_ni_disable_serial_number_id_string_table[] = { { .name = "control", .val = BCMOLT_XGPON_NI_DISABLE_SERIAL_NUMBER_ID_CONTROL }, { .name = "serial_number", .val = BCMOLT_XGPON_NI_DISABLE_SERIAL_NUMBER_ID_SERIAL_NUMBER }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_disable_serial_number_id = { .name = "bcmolt_xgpon_ni_disable_serial_number_id", .descr = "Identifiers for all properties contained in the xgpon_ni_disable_serial_number group.", .size = sizeof(bcmolt_xgpon_ni_disable_serial_number_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_ni_disable_serial_number_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_ni_enable_all_onus_completed_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_enable_all_onus_completed_id = { .name = "bcmolt_xgpon_ni_enable_all_onus_completed_id", .descr = "Identifiers for all properties contained in the xgpon_ni_enable_all_onus_completed group.", .size = sizeof(bcmolt_xgpon_ni_enable_all_onus_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_ni_enable_all_onus_completed_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_ni_key_id_string_table[] = { { .name = "pon_ni", .val = BCMOLT_XGPON_NI_KEY_ID_PON_NI }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_key_id = { .name = "bcmolt_xgpon_ni_key_id", .descr = "Identifiers for all properties contained in the xgpon_ni_key group.", .size = sizeof(bcmolt_xgpon_ni_key_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_ni_key_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_ni_los_id_string_table[] = { { .name = "status", .val = BCMOLT_XGPON_NI_LOS_ID_STATUS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_los_id = { .name = "bcmolt_xgpon_ni_los_id", .descr = "Identifiers for all properties contained in the xgpon_ni_los group.", .size = sizeof(bcmolt_xgpon_ni_los_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_ni_los_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_ni_onu_discovered_id_string_table[] = { { .name = "serial_number", .val = BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_SERIAL_NUMBER }, { .name = "ranging_time", .val = BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_RANGING_TIME }, { .name = "onu_id", .val = BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_ONU_ID }, { .name = "upstream_line_rate_capabilities", .val = BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_UPSTREAM_LINE_RATE_CAPABILITIES }, { .name = "current_downstream_pon_id", .val = BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_CURRENT_DOWNSTREAM_PON_ID }, { .name = "current_upstream_pon_id", .val = BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_CURRENT_UPSTREAM_PON_ID }, { .name = "calibration_record", .val = BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_CALIBRATION_RECORD }, { .name = "tuning_granularity", .val = BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_TUNING_GRANULARITY }, { .name = "step_tuning_time", .val = BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_STEP_TUNING_TIME }, { .name = "attenuation", .val = BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_ATTENUATION }, { .name = "power_levelling_capabilities", .val = BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_POWER_LEVELLING_CAPABILITIES }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_onu_discovered_id = { .name = "bcmolt_xgpon_ni_onu_discovered_id", .descr = "Identifiers for all properties contained in the xgpon_ni_onu_discovered group.", .size = sizeof(bcmolt_xgpon_ni_onu_discovered_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_ni_onu_discovered_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_ni_onu_upgrade_complete_id_string_table[] = { { .name = "status", .val = BCMOLT_XGPON_NI_ONU_UPGRADE_COMPLETE_ID_STATUS }, { .name = "list_of_failed_entities", .val = BCMOLT_XGPON_NI_ONU_UPGRADE_COMPLETE_ID_LIST_OF_FAILED_ENTITIES }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_onu_upgrade_complete_id = { .name = "bcmolt_xgpon_ni_onu_upgrade_complete_id", .descr = "Identifiers for all properties contained in the xgpon_ni_onu_upgrade_complete group.", .size = sizeof(bcmolt_xgpon_ni_onu_upgrade_complete_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_ni_onu_upgrade_complete_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_ni_protection_switching_onus_ranged_id_string_table[] = { { .name = "onus", .val = BCMOLT_XGPON_NI_PROTECTION_SWITCHING_ONUS_RANGED_ID_ONUS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_protection_switching_onus_ranged_id = { .name = "bcmolt_xgpon_ni_protection_switching_onus_ranged_id", .descr = "Identifiers for all properties contained in the xgpon_ni_protection_switching_onus_ranged group.", .size = sizeof(bcmolt_xgpon_ni_protection_switching_onus_ranged_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_ni_protection_switching_onus_ranged_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_ni_protection_switching_switchover_completed_id_string_table[] = { { .name = "result", .val = BCMOLT_XGPON_NI_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED_ID_RESULT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_protection_switching_switchover_completed_id = { .name = "bcmolt_xgpon_ni_protection_switching_switchover_completed_id", .descr = "Identifiers for all properties contained in the xgpon_ni_protection_switching_switchover_completed group.", .size = sizeof(bcmolt_xgpon_ni_protection_switching_switchover_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_ni_protection_switching_switchover_completed_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_ni_protection_switching_traffic_resume_id_string_table[] = { { .name = "result", .val = BCMOLT_XGPON_NI_PROTECTION_SWITCHING_TRAFFIC_RESUME_ID_RESULT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_protection_switching_traffic_resume_id = { .name = "bcmolt_xgpon_ni_protection_switching_traffic_resume_id", .descr = "Identifiers for all properties contained in the xgpon_ni_protection_switching_traffic_resume group.", .size = sizeof(bcmolt_xgpon_ni_protection_switching_traffic_resume_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_ni_protection_switching_traffic_resume_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_ni_reset_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_reset_id = { .name = "bcmolt_xgpon_ni_reset_id", .descr = "Identifiers for all properties contained in the xgpon_ni_reset group.", .size = sizeof(bcmolt_xgpon_ni_reset_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_ni_reset_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_ni_rogue_detection_completed_id_string_table[] = { { .name = "window_type", .val = BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_WINDOW_TYPE }, { .name = "measurement_status", .val = BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_MEASUREMENT_STATUS }, { .name = "alloc_id", .val = BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_ALLOC_ID }, { .name = "onu_id", .val = BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_ONU_ID }, { .name = "is_delineation", .val = BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_IS_DELINEATION }, { .name = "is_ed", .val = BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_IS_ED }, { .name = "rx_data", .val = BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_RX_DATA }, { .name = "ploam_received_onu_id", .val = BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_PLOAM_RECEIVED_ONU_ID }, { .name = "ploam_received_mic_error", .val = BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_PLOAM_RECEIVED_MIC_ERROR }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_rogue_detection_completed_id = { .name = "bcmolt_xgpon_ni_rogue_detection_completed_id", .descr = "Identifiers for all properties contained in the xgpon_ni_rogue_detection_completed group.", .size = sizeof(bcmolt_xgpon_ni_rogue_detection_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_ni_rogue_detection_completed_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_ni_rogue_detection_window_id_string_table[] = { { .name = "window_type", .val = BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_WINDOW_TYPE }, { .name = "alloc_id", .val = BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_ALLOC_ID }, { .name = "onu_id", .val = BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_ONU_ID }, { .name = "second_ranging_window", .val = BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_SECOND_RANGING_WINDOW }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_rogue_detection_window_id = { .name = "bcmolt_xgpon_ni_rogue_detection_window_id", .descr = "Identifiers for all properties contained in the xgpon_ni_rogue_detection_window group.", .size = sizeof(bcmolt_xgpon_ni_rogue_detection_window_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_ni_rogue_detection_window_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_ni_rogue_onu_special_map_cycle_start_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_rogue_onu_special_map_cycle_start_id = { .name = "bcmolt_xgpon_ni_rogue_onu_special_map_cycle_start_id", .descr = "Identifiers for all properties contained in the xgpon_ni_rogue_onu_special_map_cycle_start group.", .size = sizeof(bcmolt_xgpon_ni_rogue_onu_special_map_cycle_start_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_ni_rogue_onu_special_map_cycle_start_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_ni_run_special_bw_map_id_string_table[] = { { .name = "number_of_cycle", .val = BCMOLT_XGPON_NI_RUN_SPECIAL_BW_MAP_ID_NUMBER_OF_CYCLE }, { .name = "allocation_number", .val = BCMOLT_XGPON_NI_RUN_SPECIAL_BW_MAP_ID_ALLOCATION_NUMBER }, { .name = "bw_map_array", .val = BCMOLT_XGPON_NI_RUN_SPECIAL_BW_MAP_ID_BW_MAP_ARRAY }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_run_special_bw_map_id = { .name = "bcmolt_xgpon_ni_run_special_bw_map_id", .descr = "Identifiers for all properties contained in the xgpon_ni_run_special_bw_map group.", .size = sizeof(bcmolt_xgpon_ni_run_special_bw_map_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_ni_run_special_bw_map_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_ni_serial_number_acquisition_cycle_start_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_serial_number_acquisition_cycle_start_id = { .name = "bcmolt_xgpon_ni_serial_number_acquisition_cycle_start_id", .descr = "Identifiers for all properties contained in the xgpon_ni_serial_number_acquisition_cycle_start group.", .size = sizeof(bcmolt_xgpon_ni_serial_number_acquisition_cycle_start_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_ni_serial_number_acquisition_cycle_start_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_ni_set_onu_state_id_string_table[] = { { .name = "onu_state", .val = BCMOLT_XGPON_NI_SET_ONU_STATE_ID_ONU_STATE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_set_onu_state_id = { .name = "bcmolt_xgpon_ni_set_onu_state_id", .descr = "Identifiers for all properties contained in the xgpon_ni_set_onu_state group.", .size = sizeof(bcmolt_xgpon_ni_set_onu_state_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_ni_set_onu_state_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_ni_set_pon_state_id_string_table[] = { { .name = "pon_state", .val = BCMOLT_XGPON_NI_SET_PON_STATE_ID_PON_STATE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_set_pon_state_id = { .name = "bcmolt_xgpon_ni_set_pon_state_id", .descr = "Identifiers for all properties contained in the xgpon_ni_set_pon_state group.", .size = sizeof(bcmolt_xgpon_ni_set_pon_state_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_ni_set_pon_state_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_ni_single_request_standby_pon_monitoring_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_single_request_standby_pon_monitoring_id = { .name = "bcmolt_xgpon_ni_single_request_standby_pon_monitoring_id", .descr = "Identifiers for all properties contained in the xgpon_ni_single_request_standby_pon_monitoring group.", .size = sizeof(bcmolt_xgpon_ni_single_request_standby_pon_monitoring_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_ni_single_request_standby_pon_monitoring_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_id_string_table[] = { { .name = "number_of_detected_delimiter", .val = BCMOLT_XGPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID_NUMBER_OF_DETECTED_DELIMITER }, { .name = "energy_detect_signal", .val = BCMOLT_XGPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID_ENERGY_DETECT_SIGNAL }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_id = { .name = "bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_id", .descr = "Identifiers for all properties contained in the xgpon_ni_standby_pon_monitoring_cycle_completed group.", .size = sizeof(bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_ni_start_onu_upgrade_id_string_table[] = { { .name = "list_of_onu_ids", .val = BCMOLT_XGPON_NI_START_ONU_UPGRADE_ID_LIST_OF_ONU_IDS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_start_onu_upgrade_id = { .name = "bcmolt_xgpon_ni_start_onu_upgrade_id", .descr = "Identifiers for all properties contained in the xgpon_ni_start_onu_upgrade group.", .size = sizeof(bcmolt_xgpon_ni_start_onu_upgrade_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_ni_start_onu_upgrade_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_ni_stat_alarm_cleared_id_string_table[] = { { .name = "stat", .val = BCMOLT_XGPON_NI_STAT_ALARM_CLEARED_ID_STAT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_stat_alarm_cleared_id = { .name = "bcmolt_xgpon_ni_stat_alarm_cleared_id", .descr = "Identifiers for all properties contained in the xgpon_ni_stat_alarm_cleared group.", .size = sizeof(bcmolt_xgpon_ni_stat_alarm_cleared_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_ni_stat_alarm_cleared_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_ni_stat_alarm_raised_id_string_table[] = { { .name = "stat", .val = BCMOLT_XGPON_NI_STAT_ALARM_RAISED_ID_STAT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_stat_alarm_raised_id = { .name = "bcmolt_xgpon_ni_stat_alarm_raised_id", .descr = "Identifiers for all properties contained in the xgpon_ni_stat_alarm_raised group.", .size = sizeof(bcmolt_xgpon_ni_stat_alarm_raised_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_ni_stat_alarm_raised_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_ni_stat_cfg_id_string_table[] = { { .name = "cfg", .val = BCMOLT_XGPON_NI_STAT_CFG_ID_CFG }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_stat_cfg_id = { .name = "bcmolt_xgpon_ni_stat_cfg_id", .descr = "Identifiers for all properties contained in the xgpon_ni_stat_cfg group.", .size = sizeof(bcmolt_xgpon_ni_stat_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_ni_stat_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_ni_stat_id_string_table[] = { { .name = "fec_codewords", .val = BCMOLT_XGPON_NI_STAT_ID_FEC_CODEWORDS }, { .name = "bip32_bytes", .val = BCMOLT_XGPON_NI_STAT_ID_BIP32_BYTES }, { .name = "bip32_errors", .val = BCMOLT_XGPON_NI_STAT_ID_BIP32_ERRORS }, { .name = "rx_xgtc_headers", .val = BCMOLT_XGPON_NI_STAT_ID_RX_XGTC_HEADERS }, { .name = "rx_xgtc_corrected", .val = BCMOLT_XGPON_NI_STAT_ID_RX_XGTC_CORRECTED }, { .name = "rx_xgtc_uncorrected", .val = BCMOLT_XGPON_NI_STAT_ID_RX_XGTC_UNCORRECTED }, { .name = "rx_xgem", .val = BCMOLT_XGPON_NI_STAT_ID_RX_XGEM }, { .name = "rx_xgem_dropped", .val = BCMOLT_XGPON_NI_STAT_ID_RX_XGEM_DROPPED }, { .name = "rx_xgem_idle", .val = BCMOLT_XGPON_NI_STAT_ID_RX_XGEM_IDLE }, { .name = "rx_xgem_corrected", .val = BCMOLT_XGPON_NI_STAT_ID_RX_XGEM_CORRECTED }, { .name = "rx_crc_error", .val = BCMOLT_XGPON_NI_STAT_ID_RX_CRC_ERROR }, { .name = "rx_fragment_error", .val = BCMOLT_XGPON_NI_STAT_ID_RX_FRAGMENT_ERROR }, { .name = "rx_packets_dropped", .val = BCMOLT_XGPON_NI_STAT_ID_RX_PACKETS_DROPPED }, { .name = "rx_dropped_too_short", .val = BCMOLT_XGPON_NI_STAT_ID_RX_DROPPED_TOO_SHORT }, { .name = "rx_dropped_too_long", .val = BCMOLT_XGPON_NI_STAT_ID_RX_DROPPED_TOO_LONG }, { .name = "rx_key_error", .val = BCMOLT_XGPON_NI_STAT_ID_RX_KEY_ERROR }, { .name = "tx_ploams", .val = BCMOLT_XGPON_NI_STAT_ID_TX_PLOAMS }, { .name = "rx_ploams_dropped", .val = BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS_DROPPED }, { .name = "rx_allocations_valid", .val = BCMOLT_XGPON_NI_STAT_ID_RX_ALLOCATIONS_VALID }, { .name = "rx_allocations_invalid", .val = BCMOLT_XGPON_NI_STAT_ID_RX_ALLOCATIONS_INVALID }, { .name = "rx_allocations_disabled", .val = BCMOLT_XGPON_NI_STAT_ID_RX_ALLOCATIONS_DISABLED }, { .name = "rx_ploams", .val = BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS }, { .name = "rx_ploams_non_idle", .val = BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS_NON_IDLE }, { .name = "rx_ploams_error", .val = BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS_ERROR }, { .name = "rx_cpu", .val = BCMOLT_XGPON_NI_STAT_ID_RX_CPU }, { .name = "rx_omci", .val = BCMOLT_XGPON_NI_STAT_ID_RX_OMCI }, { .name = "rx_omci_packets_crc_error", .val = BCMOLT_XGPON_NI_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR }, { .name = "tx_packets", .val = BCMOLT_XGPON_NI_STAT_ID_TX_PACKETS }, { .name = "tx_xgem", .val = BCMOLT_XGPON_NI_STAT_ID_TX_XGEM }, { .name = "tx_cpu", .val = BCMOLT_XGPON_NI_STAT_ID_TX_CPU }, { .name = "tx_omci", .val = BCMOLT_XGPON_NI_STAT_ID_TX_OMCI }, { .name = "tx_cpu_omci_packets_dropped", .val = BCMOLT_XGPON_NI_STAT_ID_TX_CPU_OMCI_PACKETS_DROPPED }, { .name = "tx_dropped_illegal_length", .val = BCMOLT_XGPON_NI_STAT_ID_TX_DROPPED_ILLEGAL_LENGTH }, { .name = "tx_dropped_tpid_miss", .val = BCMOLT_XGPON_NI_STAT_ID_TX_DROPPED_TPID_MISS }, { .name = "tx_dropped_vid_miss", .val = BCMOLT_XGPON_NI_STAT_ID_TX_DROPPED_VID_MISS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_stat_id = { .name = "bcmolt_xgpon_ni_stat_id", .descr = "Identifiers for all properties contained in the xgpon_ni_stat group.", .size = sizeof(bcmolt_xgpon_ni_stat_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_ni_stat_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_ni_state_change_completed_id_string_table[] = { { .name = "result", .val = BCMOLT_XGPON_NI_STATE_CHANGE_COMPLETED_ID_RESULT }, { .name = "previous_state", .val = BCMOLT_XGPON_NI_STATE_CHANGE_COMPLETED_ID_PREVIOUS_STATE }, { .name = "new_state", .val = BCMOLT_XGPON_NI_STATE_CHANGE_COMPLETED_ID_NEW_STATE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_state_change_completed_id = { .name = "bcmolt_xgpon_ni_state_change_completed_id", .descr = "Identifiers for all properties contained in the xgpon_ni_state_change_completed group.", .size = sizeof(bcmolt_xgpon_ni_state_change_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_ni_state_change_completed_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_ni_tod_request_completed_id_string_table[] = { { .name = "tod_string", .val = BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_TOD_STRING }, { .name = "sfc", .val = BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_SFC }, { .name = "rtc_offset_sec", .val = BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_RTC_OFFSET_SEC }, { .name = "rtc_offset_nsec", .val = BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_RTC_OFFSET_NSEC }, { .name = "status", .val = BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_STATUS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_tod_request_completed_id = { .name = "bcmolt_xgpon_ni_tod_request_completed_id", .descr = "Identifiers for all properties contained in the xgpon_ni_tod_request_completed group.", .size = sizeof(bcmolt_xgpon_ni_tod_request_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_ni_tod_request_completed_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_ni_tod_request_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_tod_request_id = { .name = "bcmolt_xgpon_ni_tod_request_id", .descr = "Identifiers for all properties contained in the xgpon_ni_tod_request group.", .size = sizeof(bcmolt_xgpon_ni_tod_request_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_ni_tod_request_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_num_of_onus_string_table[] = { { .name = "xgpon_support_256_onus", .val = BCMOLT_XGPON_NUM_OF_ONUS_XGPON_SUPPORT_256_ONUS }, { .name = "xgpon_support_510_onus", .val = BCMOLT_XGPON_NUM_OF_ONUS_XGPON_SUPPORT_510_ONUS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_num_of_onus = { .name = "bcmolt_xgpon_num_of_onus", .descr = "xgpon num of onus", .size = sizeof(bcmolt_xgpon_num_of_onus), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_num_of_onus_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_activation_fields[] = { { .name = "key_exchange", .descr = "Perform single key exchange during activation.", .offset = offsetof(bcmolt_xgpon_onu_activation, key_exchange), .type = &type_descr_bcmolt_control_state }, { .name = "fail_due_to_regis_auto_fail", .descr = "Deactivate ONU due to registration authentication failure", .offset = offsetof(bcmolt_xgpon_onu_activation, fail_due_to_regis_auto_fail), .type = &type_descr_bcmolt_control_state } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_activation = { .name = "bcmolt_xgpon_onu_activation", .descr = "XGPON ONU Activation", .size = sizeof(bcmolt_xgpon_onu_activation), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_activation_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_activation_fields } } };
+bcmcli_enum_val bcmolt_xgpon_onu_adjust_tx_wavelength_id_string_table[] = { { .name = "frequency_adjustment_direction", .val = BCMOLT_XGPON_ONU_ADJUST_TX_WAVELENGTH_ID_FREQUENCY_ADJUSTMENT_DIRECTION }, { .name = "frequency_adjustment_size", .val = BCMOLT_XGPON_ONU_ADJUST_TX_WAVELENGTH_ID_FREQUENCY_ADJUSTMENT_SIZE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_adjust_tx_wavelength_id = { .name = "bcmolt_xgpon_onu_adjust_tx_wavelength_id", .descr = "Identifiers for all properties contained in the xgpon_onu_adjust_tx_wavelength group.", .size = sizeof(bcmolt_xgpon_onu_adjust_tx_wavelength_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_adjust_tx_wavelength_id_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_aes_key_fields[] = { { .name = "encryption_key", .descr = "encryption key", .offset = offsetof(bcmolt_xgpon_onu_aes_key, encryption_key), .type = &type_descr_bcmolt_aes_key }, { .name = "key_index", .descr = "key index", .offset = offsetof(bcmolt_xgpon_onu_aes_key, key_index), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_aes_key = { .name = "bcmolt_xgpon_onu_aes_key", .descr = "XGPON ONU AES KEY", .size = sizeof(bcmolt_xgpon_onu_aes_key), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_aes_key_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_aes_key_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_alarm_state_fields[] = { { .name = "losi", .descr = "Loss of signal", .offset = offsetof(bcmolt_xgpon_onu_alarm_state, losi), .type = &type_descr_bcmolt_status }, { .name = "lobi", .descr = "Loss of burst", .offset = offsetof(bcmolt_xgpon_onu_alarm_state, lobi), .type = &type_descr_bcmolt_status }, { .name = "lopci", .descr = "Loss of PLOAM channel", .offset = offsetof(bcmolt_xgpon_onu_alarm_state, lopci), .type = &type_descr_bcmolt_status }, { .name = "lopci_mic_error", .descr = "Mic error on ploam channel", .offset = offsetof(bcmolt_xgpon_onu_alarm_state, lopci_mic_error), .type = &type_descr_bcmolt_status }, { .name = "looci", .descr = "Loss of OMCI channel", .offset = offsetof(bcmolt_xgpon_onu_alarm_state, looci), .type = &type_descr_bcmolt_status }, { .name = "tiwi", .descr = "Transmission interference Alarm", .offset = offsetof(bcmolt_xgpon_onu_alarm_state, tiwi), .type = &type_descr_bcmolt_status }, { .name = "dowi", .descr = "Drift of Window", .offset = offsetof(bcmolt_xgpon_onu_alarm_state, dowi), .type = &type_descr_bcmolt_status }, { .name = "sufi", .descr = "Start UP Failure", .offset = offsetof(bcmolt_xgpon_onu_alarm_state, sufi), .type = &type_descr_bcmolt_status }, { .name = "sfi", .descr = "Signal Fail", .offset = offsetof(bcmolt_xgpon_onu_alarm_state, sfi), .type = &type_descr_bcmolt_status }, { .name = "sdi", .descr = "Signal Degraded", .offset = offsetof(bcmolt_xgpon_onu_alarm_state, sdi), .type = &type_descr_bcmolt_status }, { .name = "dfi", .descr = "Deactivation Failure", .offset = offsetof(bcmolt_xgpon_onu_alarm_state, dfi), .type = &type_descr_bcmolt_status }, { .name = "dgi", .descr = "Dying gasp", .offset = offsetof(bcmolt_xgpon_onu_alarm_state, dgi), .type = &type_descr_bcmolt_status }, { .name = "pqsi", .descr = "Ploam queue status", .offset = offsetof(bcmolt_xgpon_onu_alarm_state, pqsi), .type = &type_descr_bcmolt_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_alarm_state = { .name = "bcmolt_xgpon_onu_alarm_state", .descr = "XGPON ONU alarm status", .size = sizeof(bcmolt_xgpon_onu_alarm_state), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_alarm_state_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_alarm_state_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_alarms_fields[] = { { .name = "losi", .descr = "LOSi", .offset = offsetof(bcmolt_xgpon_onu_alarms, losi), .type = &type_descr_bcmolt_status }, { .name = "lobi", .descr = "LOBi", .offset = offsetof(bcmolt_xgpon_onu_alarms, lobi), .type = &type_descr_bcmolt_status }, { .name = "lopci_miss", .descr = "LOPCi miss", .offset = offsetof(bcmolt_xgpon_onu_alarms, lopci_miss), .type = &type_descr_bcmolt_status }, { .name = "lopci_mic_error", .descr = "LOPCi mic error", .offset = offsetof(bcmolt_xgpon_onu_alarms, lopci_mic_error), .type = &type_descr_bcmolt_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_alarms = { .name = "bcmolt_xgpon_onu_alarms", .descr = "XGPON ONU alarms", .size = sizeof(bcmolt_xgpon_onu_alarms), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_alarms_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_alarms_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_alarms_thresholds_fields[] = { { .name = "losi", .descr = "Threshold for asserting LOSi alarm.", .offset = offsetof(bcmolt_xgpon_onu_alarms_thresholds, losi), .type = &type_descr_uint8_t }, { .name = "lobi", .descr = "Threshold for asserting LOBi alarm.", .offset = offsetof(bcmolt_xgpon_onu_alarms_thresholds, lobi), .type = &type_descr_uint8_t }, { .name = "looci", .descr = "Threshold for asserting LOOCi alarm.", .offset = offsetof(bcmolt_xgpon_onu_alarms_thresholds, looci), .type = &type_descr_uint8_t }, { .name = "lopci", .descr = "Threshold for asserting LOPCi alarm. ", .offset = offsetof(bcmolt_xgpon_onu_alarms_thresholds, lopci), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_alarms_thresholds = { .name = "bcmolt_xgpon_onu_alarms_thresholds", .descr = "XGPON ONU alarms thresholds", .size = sizeof(bcmolt_xgpon_onu_alarms_thresholds), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_alarms_thresholds_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_alarms_thresholds_fields } } };
+bcmcli_enum_val bcmolt_xgpon_onu_auto_cfg_id_string_table[] = { { .name = "dfi", .val = BCMOLT_XGPON_ONU_AUTO_CFG_ID_DFI }, { .name = "dgi", .val = BCMOLT_XGPON_ONU_AUTO_CFG_ID_DGI }, { .name = "dowi", .val = BCMOLT_XGPON_ONU_AUTO_CFG_ID_DOWI }, { .name = "invalid_dbru_report", .val = BCMOLT_XGPON_ONU_AUTO_CFG_ID_INVALID_DBRU_REPORT }, { .name = "key_exchange_completed", .val = BCMOLT_XGPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_COMPLETED }, { .name = "key_exchange_cycle_skipped", .val = BCMOLT_XGPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_CYCLE_SKIPPED }, { .name = "key_exchange_key_mismatch", .val = BCMOLT_XGPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_KEY_MISMATCH }, { .name = "key_exchange_key_request_timeout", .val = BCMOLT_XGPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_KEY_REQUEST_TIMEOUT }, { .name = "looci", .val = BCMOLT_XGPON_ONU_AUTO_CFG_ID_LOOCI }, { .name = "onu_activation_completed", .val = BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_ACTIVATION_COMPLETED }, { .name = "onu_alarm", .val = BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_ALARM }, { .name = "onu_deactivation_completed", .val = BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_DEACTIVATION_COMPLETED }, { .name = "onu_disable_completed", .val = BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_DISABLE_COMPLETED }, { .name = "onu_enable_completed", .val = BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_ENABLE_COMPLETED }, { .name = "onu_tuning_in_completed", .val = BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_TUNING_IN_COMPLETED }, { .name = "onu_tuning_out_completed", .val = BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_TUNING_OUT_COMPLETED }, { .name = "optical_reflection", .val = BCMOLT_XGPON_ONU_AUTO_CFG_ID_OPTICAL_REFLECTION }, { .name = "possible_drift", .val = BCMOLT_XGPON_ONU_AUTO_CFG_ID_POSSIBLE_DRIFT }, { .name = "power_consumption_report", .val = BCMOLT_XGPON_ONU_AUTO_CFG_ID_POWER_CONSUMPTION_REPORT }, { .name = "power_level_report", .val = BCMOLT_XGPON_ONU_AUTO_CFG_ID_POWER_LEVEL_REPORT }, { .name = "power_management_state_change", .val = BCMOLT_XGPON_ONU_AUTO_CFG_ID_POWER_MANAGEMENT_STATE_CHANGE }, { .name = "pqsi", .val = BCMOLT_XGPON_ONU_AUTO_CFG_ID_PQSI }, { .name = "ranging_completed", .val = BCMOLT_XGPON_ONU_AUTO_CFG_ID_RANGING_COMPLETED }, { .name = "registration_id", .val = BCMOLT_XGPON_ONU_AUTO_CFG_ID_REGISTRATION_ID }, { .name = "rssi_measurement_completed", .val = BCMOLT_XGPON_ONU_AUTO_CFG_ID_RSSI_MEASUREMENT_COMPLETED }, { .name = "sdi", .val = BCMOLT_XGPON_ONU_AUTO_CFG_ID_SDI }, { .name = "secure_mutual_authentication_failure", .val = BCMOLT_XGPON_ONU_AUTO_CFG_ID_SECURE_MUTUAL_AUTHENTICATION_FAILURE }, { .name = "sfi", .val = BCMOLT_XGPON_ONU_AUTO_CFG_ID_SFI }, { .name = "stat_alarm_cleared", .val = BCMOLT_XGPON_ONU_AUTO_CFG_ID_STAT_ALARM_CLEARED }, { .name = "stat_alarm_raised", .val = BCMOLT_XGPON_ONU_AUTO_CFG_ID_STAT_ALARM_RAISED }, { .name = "sufi", .val = BCMOLT_XGPON_ONU_AUTO_CFG_ID_SUFI }, { .name = "tiwi", .val = BCMOLT_XGPON_ONU_AUTO_CFG_ID_TIWI }, { .name = "tuning_response", .val = BCMOLT_XGPON_ONU_AUTO_CFG_ID_TUNING_RESPONSE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_auto_cfg_id = { .name = "bcmolt_xgpon_onu_auto_cfg_id", .descr = "Identifiers for all properties contained in the xgpon_onu_auto_cfg group.", .size = sizeof(bcmolt_xgpon_onu_auto_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_auto_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_cfg_id_string_table[] = { { .name = "onu_state", .val = BCMOLT_XGPON_ONU_CFG_ID_ONU_STATE }, { .name = "onu_old_state", .val = BCMOLT_XGPON_ONU_CFG_ID_ONU_OLD_STATE }, { .name = "alarm_state", .val = BCMOLT_XGPON_ONU_CFG_ID_ALARM_STATE }, { .name = "registration_encryption_keys", .val = BCMOLT_XGPON_ONU_CFG_ID_REGISTRATION_ENCRYPTION_KEYS }, { .name = "current_encryption_key", .val = BCMOLT_XGPON_ONU_CFG_ID_CURRENT_ENCRYPTION_KEY }, { .name = "serial_number", .val = BCMOLT_XGPON_ONU_CFG_ID_SERIAL_NUMBER }, { .name = "registration_id", .val = BCMOLT_XGPON_ONU_CFG_ID_REGISTRATION_ID }, { .name = "registration_id_auto_learning", .val = BCMOLT_XGPON_ONU_CFG_ID_REGISTRATION_ID_AUTO_LEARNING }, { .name = "ranging_burst_profile", .val = BCMOLT_XGPON_ONU_CFG_ID_RANGING_BURST_PROFILE }, { .name = "data_burst_profile", .val = BCMOLT_XGPON_ONU_CFG_ID_DATA_BURST_PROFILE }, { .name = "ranging_time", .val = BCMOLT_XGPON_ONU_CFG_ID_RANGING_TIME }, { .name = "disabled_after_discovery", .val = BCMOLT_XGPON_ONU_CFG_ID_DISABLED_AFTER_DISCOVERY }, { .name = "deactivation_reason", .val = BCMOLT_XGPON_ONU_CFG_ID_DEACTIVATION_REASON }, { .name = "all_gem_ports", .val = BCMOLT_XGPON_ONU_CFG_ID_ALL_GEM_PORTS }, { .name = "all_allocs", .val = BCMOLT_XGPON_ONU_CFG_ID_ALL_ALLOCS }, { .name = "extended_guard_time", .val = BCMOLT_XGPON_ONU_CFG_ID_EXTENDED_GUARD_TIME }, { .name = "us_line_rate", .val = BCMOLT_XGPON_ONU_CFG_ID_US_LINE_RATE }, { .name = "calibration_record", .val = BCMOLT_XGPON_ONU_CFG_ID_CALIBRATION_RECORD }, { .name = "tuning_granularity", .val = BCMOLT_XGPON_ONU_CFG_ID_TUNING_GRANULARITY }, { .name = "step_tuning_time", .val = BCMOLT_XGPON_ONU_CFG_ID_STEP_TUNING_TIME }, { .name = "power_levelling_capabilities", .val = BCMOLT_XGPON_ONU_CFG_ID_POWER_LEVELLING_CAPABILITIES }, { .name = "request_registration_status", .val = BCMOLT_XGPON_ONU_CFG_ID_REQUEST_REGISTRATION_STATUS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_cfg_id = { .name = "bcmolt_xgpon_onu_cfg_id", .descr = "Identifiers for all properties contained in the xgpon_onu_cfg group.", .size = sizeof(bcmolt_xgpon_onu_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_change_power_levelling_id_string_table[] = { { .name = "control", .val = BCMOLT_XGPON_ONU_CHANGE_POWER_LEVELLING_ID_CONTROL }, { .name = "attenuation", .val = BCMOLT_XGPON_ONU_CHANGE_POWER_LEVELLING_ID_ATTENUATION }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_change_power_levelling_id = { .name = "bcmolt_xgpon_onu_change_power_levelling_id", .descr = "Identifiers for all properties contained in the xgpon_onu_change_power_levelling group.", .size = sizeof(bcmolt_xgpon_onu_change_power_levelling_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_change_power_levelling_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_cpu_packet_id_string_table[] = { { .name = "port_id", .val = BCMOLT_XGPON_ONU_CPU_PACKET_ID_PORT_ID }, { .name = "crc_ok", .val = BCMOLT_XGPON_ONU_CPU_PACKET_ID_CRC_OK }, { .name = "packet_size", .val = BCMOLT_XGPON_ONU_CPU_PACKET_ID_PACKET_SIZE }, { .name = "buffer", .val = BCMOLT_XGPON_ONU_CPU_PACKET_ID_BUFFER }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_cpu_packet_id = { .name = "bcmolt_xgpon_onu_cpu_packet_id", .descr = "Identifiers for all properties contained in the xgpon_onu_cpu_packet group.", .size = sizeof(bcmolt_xgpon_onu_cpu_packet_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_cpu_packet_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_cpu_packets_id_string_table[] = { { .name = "packet_type", .val = BCMOLT_XGPON_ONU_CPU_PACKETS_ID_PACKET_TYPE }, { .name = "calc_crc", .val = BCMOLT_XGPON_ONU_CPU_PACKETS_ID_CALC_CRC }, { .name = "number_of_packets", .val = BCMOLT_XGPON_ONU_CPU_PACKETS_ID_NUMBER_OF_PACKETS }, { .name = "packet_size", .val = BCMOLT_XGPON_ONU_CPU_PACKETS_ID_PACKET_SIZE }, { .name = "buffer", .val = BCMOLT_XGPON_ONU_CPU_PACKETS_ID_BUFFER }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_cpu_packets_id = { .name = "bcmolt_xgpon_onu_cpu_packets_id", .descr = "Identifiers for all properties contained in the xgpon_onu_cpu_packets group.", .size = sizeof(bcmolt_xgpon_onu_cpu_packets_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_cpu_packets_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_dfi_id_string_table[] = { { .name = "alarm_status", .val = BCMOLT_XGPON_ONU_DFI_ID_ALARM_STATUS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_dfi_id = { .name = "bcmolt_xgpon_onu_dfi_id", .descr = "Identifiers for all properties contained in the xgpon_onu_dfi group.", .size = sizeof(bcmolt_xgpon_onu_dfi_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_dfi_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_dgi_id_string_table[] = { { .name = "alarm_status", .val = BCMOLT_XGPON_ONU_DGI_ID_ALARM_STATUS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_dgi_id = { .name = "bcmolt_xgpon_onu_dgi_id", .descr = "Identifiers for all properties contained in the xgpon_onu_dgi group.", .size = sizeof(bcmolt_xgpon_onu_dgi_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_dgi_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_dowi_id_string_table[] = { { .name = "alarm_status", .val = BCMOLT_XGPON_ONU_DOWI_ID_ALARM_STATUS }, { .name = "drift_value", .val = BCMOLT_XGPON_ONU_DOWI_ID_DRIFT_VALUE }, { .name = "new_eqd", .val = BCMOLT_XGPON_ONU_DOWI_ID_NEW_EQD }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_dowi_id = { .name = "bcmolt_xgpon_onu_dowi_id", .descr = "Identifiers for all properties contained in the xgpon_onu_dowi group.", .size = sizeof(bcmolt_xgpon_onu_dowi_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_dowi_id_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_eqd_fields[] = { { .name = "onu_id", .descr = "ONU ID", .offset = offsetof(bcmolt_xgpon_onu_eqd, onu_id), .type = &type_descr_uint16_t }, { .name = "eqd", .descr = "EQD", .offset = offsetof(bcmolt_xgpon_onu_eqd, eqd), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_eqd = { .name = "bcmolt_xgpon_onu_eqd", .descr = "XGPON ONU EQD", .size = sizeof(bcmolt_xgpon_onu_eqd), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_eqd_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_eqd_fields } } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_eqd_list_u32 = { .name = "bcmolt_xgpon_onu_eqd_list_u32", .descr = "Variable-length list of xgpon_onu_eqd", .size = sizeof(bcmolt_xgpon_onu_eqd_list_u32), .base_type = BCMOLT_BASE_TYPE_ID_ARR_DYN, .x = { .arr_dyn = { .elem_type = &type_descr_bcmolt_xgpon_onu_eqd, .len_size = 4, .max_size = DEFAULT_DYN_ARR_MAX_SIZE / sizeof(bcmolt_xgpon_onu_eqd) } } };
+bcmcli_enum_val bcmolt_xgpon_onu_get_power_consumption_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_get_power_consumption_id = { .name = "bcmolt_xgpon_onu_get_power_consumption_id", .descr = "Identifiers for all properties contained in the xgpon_onu_get_power_consumption group.", .size = sizeof(bcmolt_xgpon_onu_get_power_consumption_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_get_power_consumption_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_get_power_level_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_get_power_level_id = { .name = "bcmolt_xgpon_onu_get_power_level_id", .descr = "Identifiers for all properties contained in the xgpon_onu_get_power_level group.", .size = sizeof(bcmolt_xgpon_onu_get_power_level_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_get_power_level_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_invalid_dbru_report_id_string_table[] = { { .name = "alloc_id", .val = BCMOLT_XGPON_ONU_INVALID_DBRU_REPORT_ID_ALLOC_ID }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_invalid_dbru_report_id = { .name = "bcmolt_xgpon_onu_invalid_dbru_report_id", .descr = "Identifiers for all properties contained in the xgpon_onu_invalid_dbru_report group.", .size = sizeof(bcmolt_xgpon_onu_invalid_dbru_report_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_invalid_dbru_report_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_key_exchange_completed_id_string_table[] = { { .name = "new_key", .val = BCMOLT_XGPON_ONU_KEY_EXCHANGE_COMPLETED_ID_NEW_KEY }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_key_exchange_completed_id = { .name = "bcmolt_xgpon_onu_key_exchange_completed_id", .descr = "Identifiers for all properties contained in the xgpon_onu_key_exchange_completed group.", .size = sizeof(bcmolt_xgpon_onu_key_exchange_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_key_exchange_completed_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_key_exchange_cycle_skipped_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_key_exchange_cycle_skipped_id = { .name = "bcmolt_xgpon_onu_key_exchange_cycle_skipped_id", .descr = "Identifiers for all properties contained in the xgpon_onu_key_exchange_cycle_skipped group.", .size = sizeof(bcmolt_xgpon_onu_key_exchange_cycle_skipped_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_key_exchange_cycle_skipped_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_key_exchange_key_mismatch_id_string_table[] = { { .name = "expected_key", .val = BCMOLT_XGPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID_EXPECTED_KEY }, { .name = "received_key", .val = BCMOLT_XGPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID_RECEIVED_KEY }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_key_exchange_key_mismatch_id = { .name = "bcmolt_xgpon_onu_key_exchange_key_mismatch_id", .descr = "Identifiers for all properties contained in the xgpon_onu_key_exchange_key_mismatch group.", .size = sizeof(bcmolt_xgpon_onu_key_exchange_key_mismatch_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_key_exchange_key_mismatch_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_key_exchange_key_request_timeout_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_key_exchange_key_request_timeout_id = { .name = "bcmolt_xgpon_onu_key_exchange_key_request_timeout_id", .descr = "Identifiers for all properties contained in the xgpon_onu_key_exchange_key_request_timeout group.", .size = sizeof(bcmolt_xgpon_onu_key_exchange_key_request_timeout_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_key_exchange_key_request_timeout_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_key_id_string_table[] = { { .name = "pon_ni", .val = BCMOLT_XGPON_ONU_KEY_ID_PON_NI }, { .name = "onu_id", .val = BCMOLT_XGPON_ONU_KEY_ID_ONU_ID }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_key_id = { .name = "bcmolt_xgpon_onu_key_id", .descr = "Identifiers for all properties contained in the xgpon_onu_key group.", .size = sizeof(bcmolt_xgpon_onu_key_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_key_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_looci_id_string_table[] = { { .name = "alarm_status", .val = BCMOLT_XGPON_ONU_LOOCI_ID_ALARM_STATUS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_looci_id = { .name = "bcmolt_xgpon_onu_looci_id", .descr = "Identifiers for all properties contained in the xgpon_onu_looci group.", .size = sizeof(bcmolt_xgpon_onu_looci_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_looci_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_omci_packet_id_string_table[] = { { .name = "port_id", .val = BCMOLT_XGPON_ONU_OMCI_PACKET_ID_PORT_ID }, { .name = "crc_ok", .val = BCMOLT_XGPON_ONU_OMCI_PACKET_ID_CRC_OK }, { .name = "packet_size", .val = BCMOLT_XGPON_ONU_OMCI_PACKET_ID_PACKET_SIZE }, { .name = "buffer", .val = BCMOLT_XGPON_ONU_OMCI_PACKET_ID_BUFFER }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_omci_packet_id = { .name = "bcmolt_xgpon_onu_omci_packet_id", .descr = "Identifiers for all properties contained in the xgpon_onu_omci_packet group.", .size = sizeof(bcmolt_xgpon_onu_omci_packet_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_omci_packet_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_onu_activation_completed_id_string_table[] = { { .name = "status", .val = BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID_STATUS }, { .name = "fail_reason", .val = BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID_FAIL_REASON }, { .name = "registration_id", .val = BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID_REGISTRATION_ID }, { .name = "registration_encryption_keys", .val = BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID_REGISTRATION_ENCRYPTION_KEYS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_onu_activation_completed_id = { .name = "bcmolt_xgpon_onu_onu_activation_completed_id", .descr = "Identifiers for all properties contained in the xgpon_onu_onu_activation_completed group.", .size = sizeof(bcmolt_xgpon_onu_onu_activation_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_onu_activation_completed_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_onu_alarm_id_string_table[] = { { .name = "onu_alarm", .val = BCMOLT_XGPON_ONU_ONU_ALARM_ID_ONU_ALARM }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_onu_alarm_id = { .name = "bcmolt_xgpon_onu_onu_alarm_id", .descr = "Identifiers for all properties contained in the xgpon_onu_onu_alarm group.", .size = sizeof(bcmolt_xgpon_onu_onu_alarm_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_onu_alarm_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_onu_deactivation_completed_id_string_table[] = { { .name = "status", .val = BCMOLT_XGPON_ONU_ONU_DEACTIVATION_COMPLETED_ID_STATUS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_onu_deactivation_completed_id = { .name = "bcmolt_xgpon_onu_onu_deactivation_completed_id", .descr = "Identifiers for all properties contained in the xgpon_onu_onu_deactivation_completed group.", .size = sizeof(bcmolt_xgpon_onu_onu_deactivation_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_onu_deactivation_completed_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_onu_disable_completed_id_string_table[] = { { .name = "serial_number", .val = BCMOLT_XGPON_ONU_ONU_DISABLE_COMPLETED_ID_SERIAL_NUMBER }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_onu_disable_completed_id = { .name = "bcmolt_xgpon_onu_onu_disable_completed_id", .descr = "Identifiers for all properties contained in the xgpon_onu_onu_disable_completed group.", .size = sizeof(bcmolt_xgpon_onu_onu_disable_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_onu_disable_completed_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_onu_enable_completed_id_string_table[] = { { .name = "serial_number", .val = BCMOLT_XGPON_ONU_ONU_ENABLE_COMPLETED_ID_SERIAL_NUMBER }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_onu_enable_completed_id = { .name = "bcmolt_xgpon_onu_onu_enable_completed_id", .descr = "Identifiers for all properties contained in the xgpon_onu_onu_enable_completed group.", .size = sizeof(bcmolt_xgpon_onu_onu_enable_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_onu_enable_completed_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_onu_tuning_in_completed_id_string_table[] = { { .name = "result", .val = BCMOLT_XGPON_ONU_ONU_TUNING_IN_COMPLETED_ID_RESULT }, { .name = "fail_reason", .val = BCMOLT_XGPON_ONU_ONU_TUNING_IN_COMPLETED_ID_FAIL_REASON }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_onu_tuning_in_completed_id = { .name = "bcmolt_xgpon_onu_onu_tuning_in_completed_id", .descr = "Identifiers for all properties contained in the xgpon_onu_onu_tuning_in_completed group.", .size = sizeof(bcmolt_xgpon_onu_onu_tuning_in_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_onu_tuning_in_completed_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_onu_tuning_in_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_onu_tuning_in_id = { .name = "bcmolt_xgpon_onu_onu_tuning_in_id", .descr = "Identifiers for all properties contained in the xgpon_onu_onu_tuning_in group.", .size = sizeof(bcmolt_xgpon_onu_onu_tuning_in_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_onu_tuning_in_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_onu_tuning_out_completed_id_string_table[] = { { .name = "result", .val = BCMOLT_XGPON_ONU_ONU_TUNING_OUT_COMPLETED_ID_RESULT }, { .name = "fail_reason", .val = BCMOLT_XGPON_ONU_ONU_TUNING_OUT_COMPLETED_ID_FAIL_REASON }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_onu_tuning_out_completed_id = { .name = "bcmolt_xgpon_onu_onu_tuning_out_completed_id", .descr = "Identifiers for all properties contained in the xgpon_onu_onu_tuning_out_completed group.", .size = sizeof(bcmolt_xgpon_onu_onu_tuning_out_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_onu_tuning_out_completed_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_onu_tuning_out_id_string_table[] = { { .name = "target_ds_pon_id", .val = BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_TARGET_DS_PON_ID }, { .name = "target_us_pon_id", .val = BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_TARGET_US_PON_ID }, { .name = "time_to_switch", .val = BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_TIME_TO_SWITCH }, { .name = "rollback", .val = BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_ROLLBACK }, { .name = "status", .val = BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_STATUS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_onu_tuning_out_id = { .name = "bcmolt_xgpon_onu_onu_tuning_out_id", .descr = "Identifiers for all properties contained in the xgpon_onu_onu_tuning_out group.", .size = sizeof(bcmolt_xgpon_onu_onu_tuning_out_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_onu_tuning_out_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_optical_reflection_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_optical_reflection_id = { .name = "bcmolt_xgpon_onu_optical_reflection_id", .descr = "Identifiers for all properties contained in the xgpon_onu_optical_reflection group.", .size = sizeof(bcmolt_xgpon_onu_optical_reflection_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_optical_reflection_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_ploam_packet_id_string_table[] = { { .name = "default_key", .val = BCMOLT_XGPON_ONU_PLOAM_PACKET_ID_DEFAULT_KEY }, { .name = "ploam", .val = BCMOLT_XGPON_ONU_PLOAM_PACKET_ID_PLOAM }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_ploam_packet_id = { .name = "bcmolt_xgpon_onu_ploam_packet_id", .descr = "Identifiers for all properties contained in the xgpon_onu_ploam_packet group.", .size = sizeof(bcmolt_xgpon_onu_ploam_packet_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_ploam_packet_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_possible_drift_id_string_table[] = { { .name = "alarm_status", .val = BCMOLT_XGPON_ONU_POSSIBLE_DRIFT_ID_ALARM_STATUS }, { .name = "estimated_drift", .val = BCMOLT_XGPON_ONU_POSSIBLE_DRIFT_ID_ESTIMATED_DRIFT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_possible_drift_id = { .name = "bcmolt_xgpon_onu_possible_drift_id", .descr = "Identifiers for all properties contained in the xgpon_onu_possible_drift group.", .size = sizeof(bcmolt_xgpon_onu_possible_drift_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_possible_drift_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_power_consumption_report_id_string_table[] = { { .name = "power_consumption_report", .val = BCMOLT_XGPON_ONU_POWER_CONSUMPTION_REPORT_ID_POWER_CONSUMPTION_REPORT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_power_consumption_report_id = { .name = "bcmolt_xgpon_onu_power_consumption_report_id", .descr = "Identifiers for all properties contained in the xgpon_onu_power_consumption_report group.", .size = sizeof(bcmolt_xgpon_onu_power_consumption_report_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_power_consumption_report_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_power_level_report_id_string_table[] = { { .name = "attenuation", .val = BCMOLT_XGPON_ONU_POWER_LEVEL_REPORT_ID_ATTENUATION }, { .name = "power_levelling_capability", .val = BCMOLT_XGPON_ONU_POWER_LEVEL_REPORT_ID_POWER_LEVELLING_CAPABILITY }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_power_level_report_id = { .name = "bcmolt_xgpon_onu_power_level_report_id", .descr = "Identifiers for all properties contained in the xgpon_onu_power_level_report group.", .size = sizeof(bcmolt_xgpon_onu_power_level_report_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_power_level_report_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_power_management_state_change_id_string_table[] = { { .name = "old_state", .val = BCMOLT_XGPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_OLD_STATE }, { .name = "new_state", .val = BCMOLT_XGPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_NEW_STATE }, { .name = "reason", .val = BCMOLT_XGPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_REASON }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_power_management_state_change_id = { .name = "bcmolt_xgpon_onu_power_management_state_change_id", .descr = "Identifiers for all properties contained in the xgpon_onu_power_management_state_change group.", .size = sizeof(bcmolt_xgpon_onu_power_management_state_change_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_power_management_state_change_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_pqsi_id_string_table[] = { { .name = "alarm_status", .val = BCMOLT_XGPON_ONU_PQSI_ID_ALARM_STATUS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_pqsi_id = { .name = "bcmolt_xgpon_onu_pqsi_id", .descr = "Identifiers for all properties contained in the xgpon_onu_pqsi group.", .size = sizeof(bcmolt_xgpon_onu_pqsi_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_pqsi_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_ranging_completed_id_string_table[] = { { .name = "status", .val = BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_STATUS }, { .name = "fail_reason", .val = BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_FAIL_REASON }, { .name = "eqd", .val = BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_EQD }, { .name = "number_of_ploams", .val = BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_NUMBER_OF_PLOAMS }, { .name = "power_level", .val = BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_POWER_LEVEL }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_ranging_completed_id = { .name = "bcmolt_xgpon_onu_ranging_completed_id", .descr = "Identifiers for all properties contained in the xgpon_onu_ranging_completed group.", .size = sizeof(bcmolt_xgpon_onu_ranging_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_ranging_completed_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_registration_id_id_string_table[] = { { .name = "registration_id", .val = BCMOLT_XGPON_ONU_REGISTRATION_ID_ID_REGISTRATION_ID }, { .name = "request_registration_status", .val = BCMOLT_XGPON_ONU_REGISTRATION_ID_ID_REQUEST_REGISTRATION_STATUS }, { .name = "request_registration_fail_reason", .val = BCMOLT_XGPON_ONU_REGISTRATION_ID_ID_REQUEST_REGISTRATION_FAIL_REASON }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_registration_id_id = { .name = "bcmolt_xgpon_onu_registration_id_id", .descr = "Identifiers for all properties contained in the xgpon_onu_registration_id group.", .size = sizeof(bcmolt_xgpon_onu_registration_id_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_registration_id_id_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_registration_keys_fields[] = { { .name = "ploam_ik", .descr = "ploam ik", .offset = offsetof(bcmolt_xgpon_onu_registration_keys, ploam_ik), .type = &type_descr_bcmolt_aes_key }, { .name = "omci_ik", .descr = "omci ik", .offset = offsetof(bcmolt_xgpon_onu_registration_keys, omci_ik), .type = &type_descr_bcmolt_aes_key }, { .name = "omci_k1", .descr = "omci k1", .offset = offsetof(bcmolt_xgpon_onu_registration_keys, omci_k1), .type = &type_descr_bcmolt_aes_key }, { .name = "omci_k2", .descr = "omci k2", .offset = offsetof(bcmolt_xgpon_onu_registration_keys, omci_k2), .type = &type_descr_bcmolt_aes_key }, { .name = "kek", .descr = "kek", .offset = offsetof(bcmolt_xgpon_onu_registration_keys, kek), .type = &type_descr_bcmolt_aes_key } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_registration_keys = { .name = "bcmolt_xgpon_onu_registration_keys", .descr = "XGPON ONU registration keys", .size = sizeof(bcmolt_xgpon_onu_registration_keys), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_registration_keys_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_registration_keys_fields } } };
+bcmcli_enum_val bcmolt_xgpon_onu_request_registration_id_string_table[] = { { .name = "sma_flag", .val = BCMOLT_XGPON_ONU_REQUEST_REGISTRATION_ID_SMA_FLAG }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_request_registration_id = { .name = "bcmolt_xgpon_onu_request_registration_id", .descr = "Identifiers for all properties contained in the xgpon_onu_request_registration group.", .size = sizeof(bcmolt_xgpon_onu_request_registration_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_request_registration_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_rssi_measurement_completed_id_string_table[] = { { .name = "status", .val = BCMOLT_XGPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID_STATUS }, { .name = "fail_reason", .val = BCMOLT_XGPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID_FAIL_REASON }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_rssi_measurement_completed_id = { .name = "bcmolt_xgpon_onu_rssi_measurement_completed_id", .descr = "Identifiers for all properties contained in the xgpon_onu_rssi_measurement_completed group.", .size = sizeof(bcmolt_xgpon_onu_rssi_measurement_completed_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_rssi_measurement_completed_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_rssi_measurement_id_string_table[] = { BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_rssi_measurement_id = { .name = "bcmolt_xgpon_onu_rssi_measurement_id", .descr = "Identifiers for all properties contained in the xgpon_onu_rssi_measurement group.", .size = sizeof(bcmolt_xgpon_onu_rssi_measurement_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_rssi_measurement_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_sdi_id_string_table[] = { { .name = "alarm_status", .val = BCMOLT_XGPON_ONU_SDI_ID_ALARM_STATUS }, { .name = "ber", .val = BCMOLT_XGPON_ONU_SDI_ID_BER }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_sdi_id = { .name = "bcmolt_xgpon_onu_sdi_id", .descr = "Identifiers for all properties contained in the xgpon_onu_sdi group.", .size = sizeof(bcmolt_xgpon_onu_sdi_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_sdi_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_secure_mutual_authentication_failure_id_string_table[] = { { .name = "status", .val = BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_FAILURE_ID_STATUS }, { .name = "fail_reason", .val = BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_FAILURE_ID_FAIL_REASON }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_secure_mutual_authentication_failure_id = { .name = "bcmolt_xgpon_onu_secure_mutual_authentication_failure_id", .descr = "Identifiers for all properties contained in the xgpon_onu_secure_mutual_authentication_failure group.", .size = sizeof(bcmolt_xgpon_onu_secure_mutual_authentication_failure_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_secure_mutual_authentication_failure_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_secure_mutual_authentication_id_string_table[] = { { .name = "master_key", .val = BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_ID_MASTER_KEY }, { .name = "buffer", .val = BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_ID_BUFFER }, { .name = "mic", .val = BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_ID_MIC }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_secure_mutual_authentication_id = { .name = "bcmolt_xgpon_onu_secure_mutual_authentication_id", .descr = "Identifiers for all properties contained in the xgpon_onu_secure_mutual_authentication group.", .size = sizeof(bcmolt_xgpon_onu_secure_mutual_authentication_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_secure_mutual_authentication_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_set_onu_state_id_string_table[] = { { .name = "onu_state", .val = BCMOLT_XGPON_ONU_SET_ONU_STATE_ID_ONU_STATE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_set_onu_state_id = { .name = "bcmolt_xgpon_onu_set_onu_state_id", .descr = "Identifiers for all properties contained in the xgpon_onu_set_onu_state group.", .size = sizeof(bcmolt_xgpon_onu_set_onu_state_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_set_onu_state_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_sfi_id_string_table[] = { { .name = "alarm_status", .val = BCMOLT_XGPON_ONU_SFI_ID_ALARM_STATUS }, { .name = "ber", .val = BCMOLT_XGPON_ONU_SFI_ID_BER }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_sfi_id = { .name = "bcmolt_xgpon_onu_sfi_id", .descr = "Identifiers for all properties contained in the xgpon_onu_sfi group.", .size = sizeof(bcmolt_xgpon_onu_sfi_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_sfi_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_stat_alarm_cleared_id_string_table[] = { { .name = "stat", .val = BCMOLT_XGPON_ONU_STAT_ALARM_CLEARED_ID_STAT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_stat_alarm_cleared_id = { .name = "bcmolt_xgpon_onu_stat_alarm_cleared_id", .descr = "Identifiers for all properties contained in the xgpon_onu_stat_alarm_cleared group.", .size = sizeof(bcmolt_xgpon_onu_stat_alarm_cleared_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_stat_alarm_cleared_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_stat_alarm_raised_id_string_table[] = { { .name = "stat", .val = BCMOLT_XGPON_ONU_STAT_ALARM_RAISED_ID_STAT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_stat_alarm_raised_id = { .name = "bcmolt_xgpon_onu_stat_alarm_raised_id", .descr = "Identifiers for all properties contained in the xgpon_onu_stat_alarm_raised group.", .size = sizeof(bcmolt_xgpon_onu_stat_alarm_raised_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_stat_alarm_raised_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_stat_cfg_id_string_table[] = { { .name = "cfg", .val = BCMOLT_XGPON_ONU_STAT_CFG_ID_CFG }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_stat_cfg_id = { .name = "bcmolt_xgpon_onu_stat_cfg_id", .descr = "Identifiers for all properties contained in the xgpon_onu_stat_cfg group.", .size = sizeof(bcmolt_xgpon_onu_stat_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_stat_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_stat_id_string_table[] = { { .name = "positive_drift", .val = BCMOLT_XGPON_ONU_STAT_ID_POSITIVE_DRIFT }, { .name = "negative_drift", .val = BCMOLT_XGPON_ONU_STAT_ID_NEGATIVE_DRIFT }, { .name = "delimiter_miss_detection", .val = BCMOLT_XGPON_ONU_STAT_ID_DELIMITER_MISS_DETECTION }, { .name = "bip32_errors", .val = BCMOLT_XGPON_ONU_STAT_ID_BIP32_ERRORS }, { .name = "rx_words", .val = BCMOLT_XGPON_ONU_STAT_ID_RX_WORDS }, { .name = "fec_corrected_symbols", .val = BCMOLT_XGPON_ONU_STAT_ID_FEC_CORRECTED_SYMBOLS }, { .name = "fec_corrected_codewords", .val = BCMOLT_XGPON_ONU_STAT_ID_FEC_CORRECTED_CODEWORDS }, { .name = "fec_uncorrectable_codewords", .val = BCMOLT_XGPON_ONU_STAT_ID_FEC_UNCORRECTABLE_CODEWORDS }, { .name = "fec_codewords", .val = BCMOLT_XGPON_ONU_STAT_ID_FEC_CODEWORDS }, { .name = "fec_corrected_bits", .val = BCMOLT_XGPON_ONU_STAT_ID_FEC_CORRECTED_BITS }, { .name = "xgem_key_errors", .val = BCMOLT_XGPON_ONU_STAT_ID_XGEM_KEY_ERRORS }, { .name = "xgem_loss", .val = BCMOLT_XGPON_ONU_STAT_ID_XGEM_LOSS }, { .name = "rx_ploams_mic_error", .val = BCMOLT_XGPON_ONU_STAT_ID_RX_PLOAMS_MIC_ERROR }, { .name = "rx_ploams_non_idle", .val = BCMOLT_XGPON_ONU_STAT_ID_RX_PLOAMS_NON_IDLE }, { .name = "rx_omci", .val = BCMOLT_XGPON_ONU_STAT_ID_RX_OMCI }, { .name = "rx_omci_packets_crc_error", .val = BCMOLT_XGPON_ONU_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR }, { .name = "rx_bytes", .val = BCMOLT_XGPON_ONU_STAT_ID_RX_BYTES }, { .name = "rx_packets", .val = BCMOLT_XGPON_ONU_STAT_ID_RX_PACKETS }, { .name = "tx_bytes", .val = BCMOLT_XGPON_ONU_STAT_ID_TX_BYTES }, { .name = "tx_packets", .val = BCMOLT_XGPON_ONU_STAT_ID_TX_PACKETS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_stat_id = { .name = "bcmolt_xgpon_onu_stat_id", .descr = "Identifiers for all properties contained in the xgpon_onu_stat group.", .size = sizeof(bcmolt_xgpon_onu_stat_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_stat_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_sufi_id_string_table[] = { { .name = "alarm_status", .val = BCMOLT_XGPON_ONU_SUFI_ID_ALARM_STATUS }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_sufi_id = { .name = "bcmolt_xgpon_onu_sufi_id", .descr = "Identifiers for all properties contained in the xgpon_onu_sufi group.", .size = sizeof(bcmolt_xgpon_onu_sufi_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_sufi_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_tiwi_id_string_table[] = { { .name = "alarm_status", .val = BCMOLT_XGPON_ONU_TIWI_ID_ALARM_STATUS }, { .name = "drift_value", .val = BCMOLT_XGPON_ONU_TIWI_ID_DRIFT_VALUE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_tiwi_id = { .name = "bcmolt_xgpon_onu_tiwi_id", .descr = "Identifiers for all properties contained in the xgpon_onu_tiwi group.", .size = sizeof(bcmolt_xgpon_onu_tiwi_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_tiwi_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_onu_tuning_response_id_string_table[] = { { .name = "ack", .val = BCMOLT_XGPON_ONU_TUNING_RESPONSE_ID_ACK }, { .name = "result", .val = BCMOLT_XGPON_ONU_TUNING_RESPONSE_ID_RESULT }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_tuning_response_id = { .name = "bcmolt_xgpon_onu_tuning_response_id", .descr = "Identifiers for all properties contained in the xgpon_onu_tuning_response group.", .size = sizeof(bcmolt_xgpon_onu_tuning_response_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_onu_tuning_response_id_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_with_state_fields[] = { { .name = "onu_id", .descr = "ONU ID", .offset = offsetof(bcmolt_xgpon_onu_with_state, onu_id), .type = &type_descr_uint16_t }, { .name = "state", .descr = "State", .offset = offsetof(bcmolt_xgpon_onu_with_state, state), .type = &type_descr_bcmolt_onu_state } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_with_state = { .name = "bcmolt_xgpon_onu_with_state", .descr = "XGPON ONU With State", .size = sizeof(bcmolt_xgpon_onu_with_state), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_with_state_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_with_state_fields } } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_with_state_list_u16_max_510 = { .name = "bcmolt_xgpon_onu_with_state_list_u16_max_510", .descr = "Variable-length list of xgpon_onu_with_state", .size = sizeof(bcmolt_xgpon_onu_with_state_list_u16_max_510), .base_type = BCMOLT_BASE_TYPE_ID_ARR_DYN, .x = { .arr_dyn = { .elem_type = &type_descr_bcmolt_xgpon_onu_with_state, .len_size = 2, .max_size = 510 } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_ploam_handling_fields[] = { { .name = "ack_timeout", .descr = "Timeout for receiving ACK ploam", .offset = offsetof(bcmolt_xgpon_ploam_handling, ack_timeout), .type = &type_descr_uint32_t }, { .name = "retrans_ranging_time", .descr = "Number of Ranging Time ploam retransmissions in case of ACK timeout", .offset = offsetof(bcmolt_xgpon_ploam_handling, retrans_ranging_time), .type = &type_descr_uint8_t }, { .name = "retrans_assign_alloc_id", .descr = "Number of Assign Alloc ID ploam retransmissions in case of ACK timeout", .offset = offsetof(bcmolt_xgpon_ploam_handling, retrans_assign_alloc_id), .type = &type_descr_uint8_t }, { .name = "retrans_key_control", .descr = "Number of Key Control ploam retransmissions in case of ACK timeout", .offset = offsetof(bcmolt_xgpon_ploam_handling, retrans_key_control), .type = &type_descr_uint8_t }, { .name = "retrans_request_registration", .descr = "Number of Request Registration ploam retransmissions in case of ACK timeout", .offset = offsetof(bcmolt_xgpon_ploam_handling, retrans_request_registration), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ploam_handling = { .name = "bcmolt_xgpon_ploam_handling", .descr = "XGPON PLOAM handling", .size = sizeof(bcmolt_xgpon_ploam_handling), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_ploam_handling_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_ploam_handling_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_protection_switching_fields[] = { { .name = "timeout", .descr = "LOS switch over timeout in milliseconds", .offset = offsetof(bcmolt_xgpon_protection_switching, timeout), .type = &type_descr_uint16_t }, { .name = "gpio_pin", .descr = "GPIO pin for input/output signal", .offset = offsetof(bcmolt_xgpon_protection_switching, gpio_pin), .type = &type_descr_bcmolt_gpio_pin }, { .name = "fast_ranging", .descr = "fast ranging ", .offset = offsetof(bcmolt_xgpon_protection_switching, fast_ranging), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_protection_switching = { .name = "bcmolt_xgpon_protection_switching", .descr = "XGPON protection switching configuration", .size = sizeof(bcmolt_xgpon_protection_switching), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_protection_switching_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_protection_switching_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_protection_switching_debug_fields[] = { { .name = "data_map_delay_ms", .descr = "delay to wait after sending ranging time delta before running the data map  ", .offset = offsetof(bcmolt_xgpon_protection_switching_debug, data_map_delay_ms), .type = &type_descr_uint16_t }, { .name = "rerange_send_ranging_time", .descr = "Should the SM send the current ranging time before doing the re-ranging ", .offset = offsetof(bcmolt_xgpon_protection_switching_debug, rerange_send_ranging_time), .type = &type_descr_bcmos_bool }, { .name = "rerange_send_ranging_time_delay", .descr = "the delay between sending the ranging time and starting the rerange ", .offset = offsetof(bcmolt_xgpon_protection_switching_debug, rerange_send_ranging_time_delay), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_protection_switching_debug = { .name = "bcmolt_xgpon_protection_switching_debug", .descr = "xgpon protection switching debug", .size = sizeof(bcmolt_xgpon_protection_switching_debug), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_protection_switching_debug_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_protection_switching_debug_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_rssi_normal_config_fields[] = { { .name = "polarity", .descr = "RSSI signal polarity", .offset = offsetof(bcmolt_xgpon_rssi_normal_config, polarity), .type = &type_descr_bcmolt_polarity }, { .name = "location", .descr = "RSSI signal location in words", .offset = offsetof(bcmolt_xgpon_rssi_normal_config, location), .type = &type_descr_uint8_t }, { .name = "location_sign", .descr = "RSSI signal location sign", .offset = offsetof(bcmolt_xgpon_rssi_normal_config, location_sign), .type = &type_descr_bcmolt_sign }, { .name = "pulse_width", .descr = "RSSI pulse width in words", .offset = offsetof(bcmolt_xgpon_rssi_normal_config, pulse_width), .type = &type_descr_uint16_t }, { .name = "minimum_burst", .descr = "Data minimum burst size in words", .offset = offsetof(bcmolt_xgpon_rssi_normal_config, minimum_burst), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_rssi_normal_config = { .name = "bcmolt_xgpon_rssi_normal_config", .descr = "XGPON RSSI normal configuration", .size = sizeof(bcmolt_xgpon_rssi_normal_config), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_rssi_normal_config_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_rssi_normal_config_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_rssi_ranging_config_fields[] = { { .name = "start_on_ed", .descr = "start on ED", .offset = offsetof(bcmolt_xgpon_rssi_ranging_config, start_on_ed), .type = &type_descr_bcmos_bool }, { .name = "frame_delay", .descr = "frame delay from ED", .offset = offsetof(bcmolt_xgpon_rssi_ranging_config, frame_delay), .type = &type_descr_uint8_t }, { .name = "word_delay", .descr = "word delay from ED", .offset = offsetof(bcmolt_xgpon_rssi_ranging_config, word_delay), .type = &type_descr_uint16_t }, { .name = "frame_delay_after_ed", .descr = "frame delay from start  of ranging window", .offset = offsetof(bcmolt_xgpon_rssi_ranging_config, frame_delay_after_ed), .type = &type_descr_uint8_t }, { .name = "word_delay_after_ed", .descr = "word delay from start  of ranging window", .offset = offsetof(bcmolt_xgpon_rssi_ranging_config, word_delay_after_ed), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_rssi_ranging_config = { .name = "bcmolt_xgpon_rssi_ranging_config", .descr = "xgpon rssi ranging config", .size = sizeof(bcmolt_xgpon_rssi_ranging_config), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_rssi_ranging_config_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_rssi_ranging_config_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_rx_ranging_sm_pattern_fields[] = { { .name = "trx_reset_pattern_first", .descr = "trx reset pattern first", .offset = offsetof(bcmolt_xgpon_rx_ranging_sm_pattern, trx_reset_pattern_first), .type = &type_descr_uint32_t_hex }, { .name = "trx_reset_pattern_middle", .descr = "trx reset pattern middle", .offset = offsetof(bcmolt_xgpon_rx_ranging_sm_pattern, trx_reset_pattern_middle), .type = &type_descr_uint32_t_hex }, { .name = "trx_reset_pattern_last", .descr = "trx reset pattern last", .offset = offsetof(bcmolt_xgpon_rx_ranging_sm_pattern, trx_reset_pattern_last), .type = &type_descr_uint32_t_hex }, { .name = "trx_reset_middle_repeats", .descr = "trx reset middle repeats", .offset = offsetof(bcmolt_xgpon_rx_ranging_sm_pattern, trx_reset_middle_repeats), .type = &type_descr_uint8_t }, { .name = "trx_reset_location", .descr = "trx reset location", .offset = offsetof(bcmolt_xgpon_rx_ranging_sm_pattern, trx_reset_location), .type = &type_descr_uint8_t }, { .name = "bcdr_reset_pattern_first", .descr = "bcdr reset pattern first", .offset = offsetof(bcmolt_xgpon_rx_ranging_sm_pattern, bcdr_reset_pattern_first), .type = &type_descr_uint32_t_hex }, { .name = "bcdr_reset_pattern_middle", .descr = "bcdr reset pattern middle", .offset = offsetof(bcmolt_xgpon_rx_ranging_sm_pattern, bcdr_reset_pattern_middle), .type = &type_descr_uint32_t_hex }, { .name = "bcdr_reset_pattern_last", .descr = "bcdr reset pattern last", .offset = offsetof(bcmolt_xgpon_rx_ranging_sm_pattern, bcdr_reset_pattern_last), .type = &type_descr_uint32_t_hex }, { .name = "bcdr_reset_middle_repeats", .descr = "bcdr reset middle repeats", .offset = offsetof(bcmolt_xgpon_rx_ranging_sm_pattern, bcdr_reset_middle_repeats), .type = &type_descr_uint8_t }, { .name = "bcdr_reset_location", .descr = "bcdr reset location", .offset = offsetof(bcmolt_xgpon_rx_ranging_sm_pattern, bcdr_reset_location), .type = &type_descr_uint8_t }, { .name = "bcdr_reset_polarity", .descr = "bcdr reset polarity", .offset = offsetof(bcmolt_xgpon_rx_ranging_sm_pattern, bcdr_reset_polarity), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_rx_ranging_sm_pattern = { .name = "bcmolt_xgpon_rx_ranging_sm_pattern", .descr = "xgpon rx ranging SM patterns", .size = sizeof(bcmolt_xgpon_rx_ranging_sm_pattern), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_rx_ranging_sm_pattern_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_rx_ranging_sm_pattern_fields } } };
+bcmcli_enum_val bcmolt_xgpon_serdes_ranging_mode_string_table[] = { { .name = "ed", .val = BCMOLT_XGPON_SERDES_RANGING_MODE_ED }, { .name = "bcdr", .val = BCMOLT_XGPON_SERDES_RANGING_MODE_BCDR }, { .name = "fast_ranging1", .val = BCMOLT_XGPON_SERDES_RANGING_MODE_FAST_RANGING1 }, { .name = "fast_ranging2", .val = BCMOLT_XGPON_SERDES_RANGING_MODE_FAST_RANGING2 }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_serdes_ranging_mode = { .name = "bcmolt_xgpon_serdes_ranging_mode", .descr = "xgpon serdes ranging mode", .size = sizeof(bcmolt_xgpon_serdes_ranging_mode), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_serdes_ranging_mode_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_serdes_configuration_fields[] = { { .name = "multi_ed_mode", .descr = "multi ed mode", .offset = offsetof(bcmolt_xgpon_serdes_configuration, multi_ed_mode), .type = &type_descr_bcmos_bool }, { .name = "ranging_mode", .descr = "ranging mode", .offset = offsetof(bcmolt_xgpon_serdes_configuration, ranging_mode), .type = &type_descr_bcmolt_xgpon_serdes_ranging_mode } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_serdes_configuration = { .name = "bcmolt_xgpon_serdes_configuration", .descr = "xgpon serdes configuration", .size = sizeof(bcmolt_xgpon_serdes_configuration), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_serdes_configuration_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_serdes_configuration_fields } } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_sn_acquisition_fields[] = { { .name = "interval", .descr = "SN process interval in milliseconds", .offset = offsetof(bcmolt_xgpon_sn_acquisition, interval), .type = &type_descr_uint32_t }, { .name = "control", .descr = "SN process control", .offset = offsetof(bcmolt_xgpon_sn_acquisition, control), .type = &type_descr_bcmolt_control_state }, { .name = "onu_post_discovery_mode", .descr = "Automatic operation following ONU discovery", .offset = offsetof(bcmolt_xgpon_sn_acquisition, onu_post_discovery_mode), .type = &type_descr_bcmolt_onu_post_discovery_mode }, { .name = "burst_profile", .descr = "Burst profile index to use during SN acquisition window", .offset = offsetof(bcmolt_xgpon_sn_acquisition, burst_profile), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_sn_acquisition = { .name = "bcmolt_xgpon_sn_acquisition", .descr = "XGPON SN Acquisition", .size = sizeof(bcmolt_xgpon_sn_acquisition), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_sn_acquisition_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_sn_acquisition_fields } } };
+bcmcli_enum_val bcmolt_xgpon_trx_cfg_id_string_table[] = { { .name = "burst_profile", .val = BCMOLT_XGPON_TRX_CFG_ID_BURST_PROFILE }, { .name = "transceiver_config", .val = BCMOLT_XGPON_TRX_CFG_ID_TRANSCEIVER_CONFIG }, { .name = "transceiver_type", .val = BCMOLT_XGPON_TRX_CFG_ID_TRANSCEIVER_TYPE }, { .name = "debug", .val = BCMOLT_XGPON_TRX_CFG_ID_DEBUG }, { .name = "rssi_normal_config", .val = BCMOLT_XGPON_TRX_CFG_ID_RSSI_NORMAL_CONFIG }, { .name = "rssi_ranging_config", .val = BCMOLT_XGPON_TRX_CFG_ID_RSSI_RANGING_CONFIG }, { .name = "serdes_configuration", .val = BCMOLT_XGPON_TRX_CFG_ID_SERDES_CONFIGURATION }, { .name = "burst_profile_delimiter_max_errors", .val = BCMOLT_XGPON_TRX_CFG_ID_BURST_PROFILE_DELIMITER_MAX_ERRORS }, { .name = "ranging_sm_patterns_at_init", .val = BCMOLT_XGPON_TRX_CFG_ID_RANGING_SM_PATTERNS_AT_INIT }, { .name = "ranging_sm_patterns_ed_failure", .val = BCMOLT_XGPON_TRX_CFG_ID_RANGING_SM_PATTERNS_ED_FAILURE }, { .name = "reset_on_del_miss", .val = BCMOLT_XGPON_TRX_CFG_ID_RESET_ON_DEL_MISS }, { .name = "ed_state", .val = BCMOLT_XGPON_TRX_CFG_ID_ED_STATE }, { .name = "invert_ed", .val = BCMOLT_XGPON_TRX_CFG_ID_INVERT_ED }, { .name = "end_of_burst_reset", .val = BCMOLT_XGPON_TRX_CFG_ID_END_OF_BURST_RESET }, { .name = "trx_rst_polarity", .val = BCMOLT_XGPON_TRX_CFG_ID_TRX_RST_POLARITY }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_trx_cfg_id = { .name = "bcmolt_xgpon_trx_cfg_id", .descr = "Identifiers for all properties contained in the xgpon_trx_cfg group.", .size = sizeof(bcmolt_xgpon_trx_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_trx_cfg_id_string_table } };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_trx_debug_fields[] = { { .name = "rx_reversed_polarity", .descr = "transceiver reversed polarity", .offset = offsetof(bcmolt_xgpon_trx_debug, rx_reversed_polarity), .type = &type_descr_bcmolt_control_state }, { .name = "neg_out_bit", .descr = "turn all 1 to 0 and all 0 to 1 at the output. default is not to make negative bits", .offset = offsetof(bcmolt_xgpon_trx_debug, neg_out_bit), .type = &type_descr_bcmolt_control_state } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_trx_debug = { .name = "bcmolt_xgpon_trx_debug", .descr = "xgpon_trx_debug", .size = sizeof(bcmolt_xgpon_trx_debug), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_trx_debug_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_trx_debug_fields } } };
+bcmcli_enum_val bcmolt_xgpon_trx_key_id_string_table[] = { { .name = "pon_ni", .val = BCMOLT_XGPON_TRX_KEY_ID_PON_NI }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_trx_key_id = { .name = "bcmolt_xgpon_trx_key_id", .descr = "Identifiers for all properties contained in the xgpon_trx_key group.", .size = sizeof(bcmolt_xgpon_trx_key_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_trx_key_id_string_table } };
+bcmcli_enum_val bcmolt_xgpon_trx_type_string_table[] = { { .name = "lth_7222_pc", .val = BCMOLT_XGPON_TRX_TYPE_LTH_7222_PC }, { .name = "user_defined", .val = BCMOLT_XGPON_TRX_TYPE_USER_DEFINED }, { .name = "wtd_rtxm266_702", .val = BCMOLT_XGPON_TRX_TYPE_WTD_RTXM266_702 }, { .name = "lth_7222_bc_plus", .val = BCMOLT_XGPON_TRX_TYPE_LTH_7222_BC_PLUS }, { .name = "lth_7226_pc", .val = BCMOLT_XGPON_TRX_TYPE_LTH_7226_PC }, { .name = "lth_5302_pc", .val = BCMOLT_XGPON_TRX_TYPE_LTH_5302_PC }, { .name = "xgpon_general_1", .val = BCMOLT_XGPON_TRX_TYPE_XGPON_GENERAL_1 }, { .name = "xgpon_general_2", .val = BCMOLT_XGPON_TRX_TYPE_XGPON_GENERAL_2 }, { .name = "ltw_627_x_pc", .val = BCMOLT_XGPON_TRX_TYPE_LTW_627_X_PC }, { .name = "xpp_xe_r_3_cdfb", .val = BCMOLT_XGPON_TRX_TYPE_XPP_XE_R_3_CDFB }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_trx_type = { .name = "bcmolt_xgpon_trx_type", .descr = "XGPON TRX type", .size = sizeof(bcmolt_xgpon_trx_type), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xgpon_trx_type_string_table } };
+bcmcli_enum_val bcmolt_xpon_serdes_cfg_id_string_table[] = { { .name = "rx_vga", .val = BCMOLT_XPON_SERDES_CFG_ID_RX_VGA }, { .name = "rx_pf", .val = BCMOLT_XPON_SERDES_CFG_ID_RX_PF }, { .name = "rx_lfpf", .val = BCMOLT_XPON_SERDES_CFG_ID_RX_LFPF }, { .name = "rx_dfe1", .val = BCMOLT_XPON_SERDES_CFG_ID_RX_DFE1 }, { .name = "rx_dfe2", .val = BCMOLT_XPON_SERDES_CFG_ID_RX_DFE2 }, { .name = "rx_dfe3", .val = BCMOLT_XPON_SERDES_CFG_ID_RX_DFE3 }, { .name = "rx_dfe4", .val = BCMOLT_XPON_SERDES_CFG_ID_RX_DFE4 }, { .name = "rx_dfe5", .val = BCMOLT_XPON_SERDES_CFG_ID_RX_DFE5 }, { .name = "tx_pre", .val = BCMOLT_XPON_SERDES_CFG_ID_TX_PRE }, { .name = "tx_main", .val = BCMOLT_XPON_SERDES_CFG_ID_TX_MAIN }, { .name = "tx_post1", .val = BCMOLT_XPON_SERDES_CFG_ID_TX_POST1 }, { .name = "tx_post2", .val = BCMOLT_XPON_SERDES_CFG_ID_TX_POST2 }, { .name = "tx_post3", .val = BCMOLT_XPON_SERDES_CFG_ID_TX_POST3 }, { .name = "tx_amp", .val = BCMOLT_XPON_SERDES_CFG_ID_TX_AMP }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xpon_serdes_cfg_id = { .name = "bcmolt_xpon_serdes_cfg_id", .descr = "Identifiers for all properties contained in the xpon_serdes_cfg group.", .size = sizeof(bcmolt_xpon_serdes_cfg_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xpon_serdes_cfg_id_string_table } };
+bcmcli_enum_val bcmolt_xpon_serdes_key_id_string_table[] = { { .name = "pon_ni", .val = BCMOLT_XPON_SERDES_KEY_ID_PON_NI }, { .name = "instance", .val = BCMOLT_XPON_SERDES_KEY_ID_INSTANCE }, BCMCLI_ENUM_LAST };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xpon_serdes_key_id = { .name = "bcmolt_xpon_serdes_key_id", .descr = "Identifiers for all properties contained in the xpon_serdes_key group.", .size = sizeof(bcmolt_xpon_serdes_key_id), .base_type = BCMOLT_BASE_TYPE_ID_ENUM, .x = { .e = bcmolt_xpon_serdes_key_id_string_table } };
+
+/* ==== Object: ae_ni ==== */
+
+/* Group: ae_ni - key */
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_ni_key_ae_ni = { .name = "ae_ni", .descr = "The index of a specific AE NI instance as seen by the host.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_NI_KEY_ID_AE_NI, .offset = offsetof(bcmolt_ae_ni_key, ae_ni), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr * BCM_DESCR ae_ni_key_prop_array[] = { &prop_descr_ae_ni_key_ae_ni };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_ae_ni_key_fields[] = { { .name = "ae_ni", .descr = "The index of a specific AE NI instance as seen by the host.", .offset = offsetof(bcmolt_ae_ni_key, ae_ni), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ae_ni_key = { .name = "bcmolt_ae_ni_key", .descr = "key", .size = sizeof(bcmolt_ae_ni_key), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_ae_ni_key_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_ae_ni_key_fields } } };
+
+/* Group: ae_ni - cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_ni_cfg_mac_address = { .name = "mac_address", .descr = "The MAC address used for all frames generated by the OLT on the network.  This value must be set before AE_NI is first enabled, and cannot be changed while the AE_NI is enabled.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_NI_CFG_ID_MAC_ADDRESS, .offset = offsetof(bcmolt_ae_ni_cfg_data, mac_address), .type = &type_descr_bcmos_mac_address };
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_ni_cfg_ae_ni_en = { .name = "ae_ni_en", .descr = "Indicates the enable state of the AE NI.", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_AE_NI_CFG_ID_AE_NI_EN, .offset = offsetof(bcmolt_ae_ni_cfg_data, ae_ni_en), .type = &type_descr_bcmolt_ae_ni_en_state };
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_ni_cfg_mtu_10g = { .name = "mtu_10g", .descr = "Maximum frame size (including FCS) on the 10G path. This attribute cannot be changed on an enabled AE_NI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_NI_CFG_ID_MTU_10G, .offset = offsetof(bcmolt_ae_ni_cfg_data, mtu_10g), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_ni_cfg_prbs_generator = { .name = "prbs_generator", .descr = "DS PRBS generator configuration", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_NI_CFG_ID_PRBS_GENERATOR, .offset = offsetof(bcmolt_ae_ni_cfg_data, prbs_generator), .type = &type_descr_bcmolt_prbs_generator_config };
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_ni_cfg_prbs_checker = { .name = "prbs_checker", .descr = "US PRBS checker configuration", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_NI_CFG_ID_PRBS_CHECKER, .offset = offsetof(bcmolt_ae_ni_cfg_data, prbs_checker), .type = &type_descr_bcmolt_prbs_checker_config };
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_ni_cfg_prbs_status = { .name = "prbs_status", .descr = "Result of US PRBS checker", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_AE_NI_CFG_ID_PRBS_STATUS, .offset = offsetof(bcmolt_ae_ni_cfg_data, prbs_status), .type = &type_descr_bcmolt_prbs_status };
+static bcmcli_prop_descr * BCM_DESCR ae_ni_cfg_prop_array[] = { &prop_descr_ae_ni_cfg_mac_address, &prop_descr_ae_ni_cfg_ae_ni_en, &prop_descr_ae_ni_cfg_mtu_10g, &prop_descr_ae_ni_cfg_prbs_generator, &prop_descr_ae_ni_cfg_prbs_checker, &prop_descr_ae_ni_cfg_prbs_status };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_ae_ni_cfg_data_fields[] = { { .name = "mac_address", .descr = "The MAC address used for all frames generated by the OLT on the network.  This value must be set before AE_NI is first enabled, and cannot be changed while the AE_NI is enabled.", .offset = offsetof(bcmolt_ae_ni_cfg_data, mac_address), .type = &type_descr_bcmos_mac_address }, { .name = "ae_ni_en", .descr = "Indicates the enable state of the AE NI.", .offset = offsetof(bcmolt_ae_ni_cfg_data, ae_ni_en), .type = &type_descr_bcmolt_ae_ni_en_state }, { .name = "mtu_10g", .descr = "Maximum frame size (including FCS) on the 10G path. This attribute cannot be changed on an enabled AE_NI.", .offset = offsetof(bcmolt_ae_ni_cfg_data, mtu_10g), .type = &type_descr_uint16_t }, { .name = "prbs_generator", .descr = "DS PRBS generator configuration", .offset = offsetof(bcmolt_ae_ni_cfg_data, prbs_generator), .type = &type_descr_bcmolt_prbs_generator_config }, { .name = "prbs_checker", .descr = "US PRBS checker configuration", .offset = offsetof(bcmolt_ae_ni_cfg_data, prbs_checker), .type = &type_descr_bcmolt_prbs_checker_config }, { .name = "prbs_status", .descr = "Result of US PRBS checker", .offset = offsetof(bcmolt_ae_ni_cfg_data, prbs_status), .type = &type_descr_bcmolt_prbs_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ae_ni_cfg_data = { .name = "bcmolt_ae_ni_cfg_data", .descr = "cfg", .size = sizeof(bcmolt_ae_ni_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_ae_ni_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_ae_ni_cfg_data_fields } } };
+
+/* Group: ae_ni - set_ae_ni_en_state */
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_ni_set_ae_ni_en_state_new_state = { .name = "new_state", .descr = "New EPON NI enable state.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_NI_SET_AE_NI_EN_STATE_ID_NEW_STATE, .offset = offsetof(bcmolt_ae_ni_set_ae_ni_en_state_data, new_state), .type = &type_descr_bcmolt_ae_ni_en_state };
+static bcmcli_prop_descr * BCM_DESCR ae_ni_set_ae_ni_en_state_prop_array[] = { &prop_descr_ae_ni_set_ae_ni_en_state_new_state };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_ae_ni_set_ae_ni_en_state_data_fields[] = { { .name = "new_state", .descr = "New EPON NI enable state.", .offset = offsetof(bcmolt_ae_ni_set_ae_ni_en_state_data, new_state), .type = &type_descr_bcmolt_ae_ni_en_state } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ae_ni_set_ae_ni_en_state_data = { .name = "bcmolt_ae_ni_set_ae_ni_en_state_data", .descr = "Set the AE NI enable state.", .size = sizeof(bcmolt_ae_ni_set_ae_ni_en_state_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_ae_ni_set_ae_ni_en_state_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_ae_ni_set_ae_ni_en_state_data_fields } } };
+
+/* ==== Object: ae_path_ds ==== */
+
+/* Group: ae_path_ds - key */
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_ds_key_ae_ni = { .name = "ae_ni", .descr = "AE NI associated with this 10G downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_DS_KEY_ID_AE_NI, .offset = offsetof(bcmolt_ae_path_ds_key, ae_ni), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr * BCM_DESCR ae_path_ds_key_prop_array[] = { &prop_descr_ae_path_ds_key_ae_ni };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_ae_path_ds_key_fields[] = { { .name = "ae_ni", .descr = "AE NI associated with this 10G downstream path.", .offset = offsetof(bcmolt_ae_path_ds_key, ae_ni), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ae_path_ds_key = { .name = "bcmolt_ae_path_ds_key", .descr = "key", .size = sizeof(bcmolt_ae_path_ds_key), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_ae_path_ds_key_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_ae_path_ds_key_fields } } };
+
+/* Group: ae_path_ds - stat */
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_ds_stat_bytes = { .name = "bytes", .descr = "The number of bytes transmitted on this 10g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_DS_STAT_ID_BYTES, .offset = offsetof(bcmolt_ae_path_ds_stat_data, bytes), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_ds_stat_frames = { .name = "frames", .descr = "The number of frames transmitted on this 10g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_DS_STAT_ID_FRAMES, .offset = offsetof(bcmolt_ae_path_ds_stat_data, frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_ds_stat_frames_64 = { .name = "frames_64", .descr = "The number of 64 byte frames transmitted on this 10g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_64, .offset = offsetof(bcmolt_ae_path_ds_stat_data, frames_64), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_ds_stat_frames_65_127 = { .name = "frames_65_127", .descr = "The number of 65 to 127 byte frames transmitted on this 10g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_65_127, .offset = offsetof(bcmolt_ae_path_ds_stat_data, frames_65_127), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_ds_stat_frames_128_255 = { .name = "frames_128_255", .descr = "The number of 128 to 255 byte frames transmitted on this 10g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_128_255, .offset = offsetof(bcmolt_ae_path_ds_stat_data, frames_128_255), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_ds_stat_frames_256_511 = { .name = "frames_256_511", .descr = "The number of 256 to 511 byte frames transmitted on this 10g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_256_511, .offset = offsetof(bcmolt_ae_path_ds_stat_data, frames_256_511), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_ds_stat_frames_512_1023 = { .name = "frames_512_1023", .descr = "The number of 512 to 1023 byte frames transmitted on this 10g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_512_1023, .offset = offsetof(bcmolt_ae_path_ds_stat_data, frames_512_1023), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_ds_stat_frames_1024_1518 = { .name = "frames_1024_1518", .descr = "The number of 1024 to 1518 byte frames transmitted on this 10g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_1024_1518, .offset = offsetof(bcmolt_ae_path_ds_stat_data, frames_1024_1518), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_ds_stat_frames_1519_2047 = { .name = "frames_1519_2047", .descr = "The number of 1519 to 2047 byte frames transmitted on this 10g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_1519_2047, .offset = offsetof(bcmolt_ae_path_ds_stat_data, frames_1519_2047), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_ds_stat_frames_2048_4095 = { .name = "frames_2048_4095", .descr = "The number of 2048 to 4095 byte frames transmitted on this 10g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_2048_4095, .offset = offsetof(bcmolt_ae_path_ds_stat_data, frames_2048_4095), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_ds_stat_frames_4096_9216 = { .name = "frames_4096_9216", .descr = "The number of 4096 to 9216 byte frames transmitted on this 10g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_4096_9216, .offset = offsetof(bcmolt_ae_path_ds_stat_data, frames_4096_9216), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_ds_stat_frames_9217_16383 = { .name = "frames_9217_16383", .descr = "The number of 9217 to 16383 byte frames transmitted on this 10g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_DS_STAT_ID_FRAMES_9217_16383, .offset = offsetof(bcmolt_ae_path_ds_stat_data, frames_9217_16383), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_ds_stat_broadcast_frames = { .name = "broadcast_frames", .descr = "The number of broadcast frames transmitted on this 10g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_DS_STAT_ID_BROADCAST_FRAMES, .offset = offsetof(bcmolt_ae_path_ds_stat_data, broadcast_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_ds_stat_data_bytes = { .name = "data_bytes", .descr = "The number of data bytes transmitted on this 10g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_DS_STAT_ID_DATA_BYTES, .offset = offsetof(bcmolt_ae_path_ds_stat_data, data_bytes), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_ds_stat_multicast_frames = { .name = "multicast_frames", .descr = "The number of multicast frames transmitted on this 10g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_DS_STAT_ID_MULTICAST_FRAMES, .offset = offsetof(bcmolt_ae_path_ds_stat_data, multicast_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_ds_stat_unicast_frames = { .name = "unicast_frames", .descr = "The number of unicast frames transmitted on this 10g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_DS_STAT_ID_UNICAST_FRAMES, .offset = offsetof(bcmolt_ae_path_ds_stat_data, unicast_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_ds_stat_abort_frames = { .name = "abort_frames", .descr = "Number of abort frames transmitted on this 10g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_DS_STAT_ID_ABORT_FRAMES, .offset = offsetof(bcmolt_ae_path_ds_stat_data, abort_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr * BCM_DESCR ae_path_ds_stat_prop_array[] = { &prop_descr_ae_path_ds_stat_bytes, &prop_descr_ae_path_ds_stat_frames, &prop_descr_ae_path_ds_stat_frames_64, &prop_descr_ae_path_ds_stat_frames_65_127, &prop_descr_ae_path_ds_stat_frames_128_255, &prop_descr_ae_path_ds_stat_frames_256_511, &prop_descr_ae_path_ds_stat_frames_512_1023, &prop_descr_ae_path_ds_stat_frames_1024_1518, &prop_descr_ae_path_ds_stat_frames_1519_2047, &prop_descr_ae_path_ds_stat_frames_2048_4095, &prop_descr_ae_path_ds_stat_frames_4096_9216, &prop_descr_ae_path_ds_stat_frames_9217_16383, &prop_descr_ae_path_ds_stat_broadcast_frames, &prop_descr_ae_path_ds_stat_data_bytes, &prop_descr_ae_path_ds_stat_multicast_frames, &prop_descr_ae_path_ds_stat_unicast_frames, &prop_descr_ae_path_ds_stat_abort_frames };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_ae_path_ds_stat_data_fields[] = { { .name = "bytes", .descr = "The number of bytes transmitted on this 10g downstream path.", .offset = offsetof(bcmolt_ae_path_ds_stat_data, bytes), .type = &type_descr_uint64_t }, { .name = "frames", .descr = "The number of frames transmitted on this 10g downstream path.", .offset = offsetof(bcmolt_ae_path_ds_stat_data, frames), .type = &type_descr_uint64_t }, { .name = "frames_64", .descr = "The number of 64 byte frames transmitted on this 10g downstream path.", .offset = offsetof(bcmolt_ae_path_ds_stat_data, frames_64), .type = &type_descr_uint64_t }, { .name = "frames_65_127", .descr = "The number of 65 to 127 byte frames transmitted on this 10g downstream path.", .offset = offsetof(bcmolt_ae_path_ds_stat_data, frames_65_127), .type = &type_descr_uint64_t }, { .name = "frames_128_255", .descr = "The number of 128 to 255 byte frames transmitted on this 10g downstream path.", .offset = offsetof(bcmolt_ae_path_ds_stat_data, frames_128_255), .type = &type_descr_uint64_t }, { .name = "frames_256_511", .descr = "The number of 256 to 511 byte frames transmitted on this 10g downstream path.", .offset = offsetof(bcmolt_ae_path_ds_stat_data, frames_256_511), .type = &type_descr_uint64_t }, { .name = "frames_512_1023", .descr = "The number of 512 to 1023 byte frames transmitted on this 10g downstream path.", .offset = offsetof(bcmolt_ae_path_ds_stat_data, frames_512_1023), .type = &type_descr_uint64_t }, { .name = "frames_1024_1518", .descr = "The number of 1024 to 1518 byte frames transmitted on this 10g downstream path.", .offset = offsetof(bcmolt_ae_path_ds_stat_data, frames_1024_1518), .type = &type_descr_uint64_t }, { .name = "frames_1519_2047", .descr = "The number of 1519 to 2047 byte frames transmitted on this 10g downstream path.", .offset = offsetof(bcmolt_ae_path_ds_stat_data, frames_1519_2047), .type = &type_descr_uint64_t }, { .name = "frames_2048_4095", .descr = "The number of 2048 to 4095 byte frames transmitted on this 10g downstream path.", .offset = offsetof(bcmolt_ae_path_ds_stat_data, frames_2048_4095), .type = &type_descr_uint64_t }, { .name = "frames_4096_9216", .descr = "The number of 4096 to 9216 byte frames transmitted on this 10g downstream path.", .offset = offsetof(bcmolt_ae_path_ds_stat_data, frames_4096_9216), .type = &type_descr_uint64_t }, { .name = "frames_9217_16383", .descr = "The number of 9217 to 16383 byte frames transmitted on this 10g downstream path.", .offset = offsetof(bcmolt_ae_path_ds_stat_data, frames_9217_16383), .type = &type_descr_uint64_t }, { .name = "broadcast_frames", .descr = "The number of broadcast frames transmitted on this 10g downstream path.", .offset = offsetof(bcmolt_ae_path_ds_stat_data, broadcast_frames), .type = &type_descr_uint64_t }, { .name = "data_bytes", .descr = "The number of data bytes transmitted on this 10g downstream path.", .offset = offsetof(bcmolt_ae_path_ds_stat_data, data_bytes), .type = &type_descr_uint64_t }, { .name = "multicast_frames", .descr = "The number of multicast frames transmitted on this 10g downstream path.", .offset = offsetof(bcmolt_ae_path_ds_stat_data, multicast_frames), .type = &type_descr_uint64_t }, { .name = "unicast_frames", .descr = "The number of unicast frames transmitted on this 10g downstream path.", .offset = offsetof(bcmolt_ae_path_ds_stat_data, unicast_frames), .type = &type_descr_uint64_t }, { .name = "abort_frames", .descr = "Number of abort frames transmitted on this 10g downstream path.", .offset = offsetof(bcmolt_ae_path_ds_stat_data, abort_frames), .type = &type_descr_uint64_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ae_path_ds_stat_data = { .name = "bcmolt_ae_path_ds_stat_data", .descr = "stat", .size = sizeof(bcmolt_ae_path_ds_stat_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_ae_path_ds_stat_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_ae_path_ds_stat_data_fields } } };
+
+/* Group: ae_path_ds - stat_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_ds_stat_cfg_cfg = { .name = "cfg", .descr = "Statistic alarm configuration.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_DS_STAT_CFG_ID_CFG, .offset = offsetof(bcmolt_ae_path_ds_stat_cfg_data, cfg), .type = &type_descr_bcmolt_stat_alarm_config };
+static bcmcli_prop_descr * BCM_DESCR ae_path_ds_stat_cfg_prop_array[] = { &prop_descr_ae_path_ds_stat_cfg_cfg };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_ae_path_ds_stat_cfg_data_fields[] = { { .name = "cfg", .descr = "Statistic alarm configuration.", .offset = offsetof(bcmolt_ae_path_ds_stat_cfg_data, cfg), .type = &type_descr_bcmolt_stat_alarm_config } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ae_path_ds_stat_cfg_data = { .name = "bcmolt_ae_path_ds_stat_cfg_data", .descr = "Statistic Configuration", .size = sizeof(bcmolt_ae_path_ds_stat_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_ae_path_ds_stat_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_ae_path_ds_stat_cfg_data_fields } } };
+
+/* Group: ae_path_ds - stat_alarm_raised */
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_ds_stat_alarm_raised_stat = { .name = "stat", .descr = "Statistic identifier.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_DS_STAT_ALARM_RAISED_ID_STAT, .offset = offsetof(bcmolt_ae_path_ds_stat_alarm_raised_data, stat), .type = &type_descr_bcmolt_ae_path_ds_stat_id };
+static bcmcli_prop_descr * BCM_DESCR ae_path_ds_stat_alarm_raised_prop_array[] = { &prop_descr_ae_path_ds_stat_alarm_raised_stat };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_ae_path_ds_stat_alarm_raised_data_fields[] = { { .name = "stat", .descr = "Statistic identifier.", .offset = offsetof(bcmolt_ae_path_ds_stat_alarm_raised_data, stat), .type = &type_descr_bcmolt_ae_path_ds_stat_id } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ae_path_ds_stat_alarm_raised_data = { .name = "bcmolt_ae_path_ds_stat_alarm_raised_data", .descr = "Sent when a configured statistic alarm condition has been met.", .size = sizeof(bcmolt_ae_path_ds_stat_alarm_raised_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_ae_path_ds_stat_alarm_raised_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_ae_path_ds_stat_alarm_raised_data_fields } } };
+
+/* Group: ae_path_ds - stat_alarm_cleared */
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_ds_stat_alarm_cleared_stat = { .name = "stat", .descr = "Statistic identifier.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_DS_STAT_ALARM_CLEARED_ID_STAT, .offset = offsetof(bcmolt_ae_path_ds_stat_alarm_cleared_data, stat), .type = &type_descr_bcmolt_ae_path_ds_stat_id };
+static bcmcli_prop_descr * BCM_DESCR ae_path_ds_stat_alarm_cleared_prop_array[] = { &prop_descr_ae_path_ds_stat_alarm_cleared_stat };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_ae_path_ds_stat_alarm_cleared_data_fields[] = { { .name = "stat", .descr = "Statistic identifier.", .offset = offsetof(bcmolt_ae_path_ds_stat_alarm_cleared_data, stat), .type = &type_descr_bcmolt_ae_path_ds_stat_id } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ae_path_ds_stat_alarm_cleared_data = { .name = "bcmolt_ae_path_ds_stat_alarm_cleared_data", .descr = "Sent when a configured statistic alarm condition is no longer met.", .size = sizeof(bcmolt_ae_path_ds_stat_alarm_cleared_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_ae_path_ds_stat_alarm_cleared_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_ae_path_ds_stat_alarm_cleared_data_fields } } };
+
+/* Group: ae_path_ds - auto_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_ds_auto_cfg_stat_alarm_cleared = { .name = "stat_alarm_cleared", .descr = "If true, indications of type \"stat_alarm_cleared\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_DS_AUTO_CFG_ID_STAT_ALARM_CLEARED, .offset = offsetof(bcmolt_ae_path_ds_auto_cfg_data, stat_alarm_cleared), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_ds_auto_cfg_stat_alarm_raised = { .name = "stat_alarm_raised", .descr = "If true, indications of type \"stat_alarm_raised\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_DS_AUTO_CFG_ID_STAT_ALARM_RAISED, .offset = offsetof(bcmolt_ae_path_ds_auto_cfg_data, stat_alarm_raised), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr * BCM_DESCR ae_path_ds_auto_cfg_prop_array[] = { &prop_descr_ae_path_ds_auto_cfg_stat_alarm_cleared, &prop_descr_ae_path_ds_auto_cfg_stat_alarm_raised };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_ae_path_ds_auto_cfg_data_fields[] = { { .name = "stat_alarm_cleared", .descr = "If true, indications of type \"stat_alarm_cleared\" will be generated.", .offset = offsetof(bcmolt_ae_path_ds_auto_cfg_data, stat_alarm_cleared), .type = &type_descr_bcmos_bool }, { .name = "stat_alarm_raised", .descr = "If true, indications of type \"stat_alarm_raised\" will be generated.", .offset = offsetof(bcmolt_ae_path_ds_auto_cfg_data, stat_alarm_raised), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ae_path_ds_auto_cfg_data = { .name = "bcmolt_ae_path_ds_auto_cfg_data", .descr = "Indication Configuration", .size = sizeof(bcmolt_ae_path_ds_auto_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_ae_path_ds_auto_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_ae_path_ds_auto_cfg_data_fields } } };
+
+/* ==== Object: ae_path_us ==== */
+
+/* Group: ae_path_us - key */
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_us_key_ae_ni = { .name = "ae_ni", .descr = "AE NI associated with this 10G upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_US_KEY_ID_AE_NI, .offset = offsetof(bcmolt_ae_path_us_key, ae_ni), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr * BCM_DESCR ae_path_us_key_prop_array[] = { &prop_descr_ae_path_us_key_ae_ni };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_ae_path_us_key_fields[] = { { .name = "ae_ni", .descr = "AE NI associated with this 10G upstream path.", .offset = offsetof(bcmolt_ae_path_us_key, ae_ni), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ae_path_us_key = { .name = "bcmolt_ae_path_us_key", .descr = "key", .size = sizeof(bcmolt_ae_path_us_key), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_ae_path_us_key_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_ae_path_us_key_fields } } };
+
+/* Group: ae_path_us - stat */
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_us_stat_bytes = { .name = "bytes", .descr = "The number of bytes received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_US_STAT_ID_BYTES, .offset = offsetof(bcmolt_ae_path_us_stat_data, bytes), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_us_stat_frames = { .name = "frames", .descr = "The number of frames received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_US_STAT_ID_FRAMES, .offset = offsetof(bcmolt_ae_path_us_stat_data, frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_us_stat_frames_64 = { .name = "frames_64", .descr = "The number of 64 byte frames received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_US_STAT_ID_FRAMES_64, .offset = offsetof(bcmolt_ae_path_us_stat_data, frames_64), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_us_stat_frames_65_127 = { .name = "frames_65_127", .descr = "The number of 65 to 127 byte frames received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_US_STAT_ID_FRAMES_65_127, .offset = offsetof(bcmolt_ae_path_us_stat_data, frames_65_127), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_us_stat_frames_128_255 = { .name = "frames_128_255", .descr = "The number of 128 to 255 byte frames received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_US_STAT_ID_FRAMES_128_255, .offset = offsetof(bcmolt_ae_path_us_stat_data, frames_128_255), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_us_stat_frames_256_511 = { .name = "frames_256_511", .descr = "The number of 256 to 511 byte frames received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_US_STAT_ID_FRAMES_256_511, .offset = offsetof(bcmolt_ae_path_us_stat_data, frames_256_511), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_us_stat_frames_512_1023 = { .name = "frames_512_1023", .descr = "The number of 512 to 1023 byte frames received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_US_STAT_ID_FRAMES_512_1023, .offset = offsetof(bcmolt_ae_path_us_stat_data, frames_512_1023), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_us_stat_frames_1024_1518 = { .name = "frames_1024_1518", .descr = "The number of 1024 to 1518 byte frames received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_US_STAT_ID_FRAMES_1024_1518, .offset = offsetof(bcmolt_ae_path_us_stat_data, frames_1024_1518), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_us_stat_frames_1519_2047 = { .name = "frames_1519_2047", .descr = "The number of 1519 to 2047 byte frames received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_US_STAT_ID_FRAMES_1519_2047, .offset = offsetof(bcmolt_ae_path_us_stat_data, frames_1519_2047), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_us_stat_frames_2048_4095 = { .name = "frames_2048_4095", .descr = "The number of 2048 to 4095 byte frames received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_US_STAT_ID_FRAMES_2048_4095, .offset = offsetof(bcmolt_ae_path_us_stat_data, frames_2048_4095), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_us_stat_frames_4096_9216 = { .name = "frames_4096_9216", .descr = "The number of 4096 to 9216 byte frames received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_US_STAT_ID_FRAMES_4096_9216, .offset = offsetof(bcmolt_ae_path_us_stat_data, frames_4096_9216), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_us_stat_frames_9217_16383 = { .name = "frames_9217_16383", .descr = "The number of 9217 to 16383 byte frames received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_US_STAT_ID_FRAMES_9217_16383, .offset = offsetof(bcmolt_ae_path_us_stat_data, frames_9217_16383), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_us_stat_broadcast_frames = { .name = "broadcast_frames", .descr = "The number of broadcast frames received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_US_STAT_ID_BROADCAST_FRAMES, .offset = offsetof(bcmolt_ae_path_us_stat_data, broadcast_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_us_stat_data_bytes = { .name = "data_bytes", .descr = "The number of data bytes received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_US_STAT_ID_DATA_BYTES, .offset = offsetof(bcmolt_ae_path_us_stat_data, data_bytes), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_us_stat_multicast_frames = { .name = "multicast_frames", .descr = "The number of multicast frames received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_US_STAT_ID_MULTICAST_FRAMES, .offset = offsetof(bcmolt_ae_path_us_stat_data, multicast_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_us_stat_unicast_frames = { .name = "unicast_frames", .descr = "The number of unicast frames received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_US_STAT_ID_UNICAST_FRAMES, .offset = offsetof(bcmolt_ae_path_us_stat_data, unicast_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_us_stat_abort_frames = { .name = "abort_frames", .descr = "The number of abort frames received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_US_STAT_ID_ABORT_FRAMES, .offset = offsetof(bcmolt_ae_path_us_stat_data, abort_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_us_stat_fcs_error = { .name = "fcs_error", .descr = "The number of bad FCS errors received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_US_STAT_ID_FCS_ERROR, .offset = offsetof(bcmolt_ae_path_us_stat_data, fcs_error), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_us_stat_oversize_error = { .name = "oversize_error", .descr = "The number of oversize errors received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_US_STAT_ID_OVERSIZE_ERROR, .offset = offsetof(bcmolt_ae_path_us_stat_data, oversize_error), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_us_stat_runt_error = { .name = "runt_error", .descr = "The number of runt errors received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_US_STAT_ID_RUNT_ERROR, .offset = offsetof(bcmolt_ae_path_us_stat_data, runt_error), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr * BCM_DESCR ae_path_us_stat_prop_array[] = { &prop_descr_ae_path_us_stat_bytes, &prop_descr_ae_path_us_stat_frames, &prop_descr_ae_path_us_stat_frames_64, &prop_descr_ae_path_us_stat_frames_65_127, &prop_descr_ae_path_us_stat_frames_128_255, &prop_descr_ae_path_us_stat_frames_256_511, &prop_descr_ae_path_us_stat_frames_512_1023, &prop_descr_ae_path_us_stat_frames_1024_1518, &prop_descr_ae_path_us_stat_frames_1519_2047, &prop_descr_ae_path_us_stat_frames_2048_4095, &prop_descr_ae_path_us_stat_frames_4096_9216, &prop_descr_ae_path_us_stat_frames_9217_16383, &prop_descr_ae_path_us_stat_broadcast_frames, &prop_descr_ae_path_us_stat_data_bytes, &prop_descr_ae_path_us_stat_multicast_frames, &prop_descr_ae_path_us_stat_unicast_frames, &prop_descr_ae_path_us_stat_abort_frames, &prop_descr_ae_path_us_stat_fcs_error, &prop_descr_ae_path_us_stat_oversize_error, &prop_descr_ae_path_us_stat_runt_error };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_ae_path_us_stat_data_fields[] = { { .name = "bytes", .descr = "The number of bytes received on this 10g upstream path.", .offset = offsetof(bcmolt_ae_path_us_stat_data, bytes), .type = &type_descr_uint64_t }, { .name = "frames", .descr = "The number of frames received on this 10g upstream path.", .offset = offsetof(bcmolt_ae_path_us_stat_data, frames), .type = &type_descr_uint64_t }, { .name = "frames_64", .descr = "The number of 64 byte frames received on this 10g upstream path.", .offset = offsetof(bcmolt_ae_path_us_stat_data, frames_64), .type = &type_descr_uint64_t }, { .name = "frames_65_127", .descr = "The number of 65 to 127 byte frames received on this 10g upstream path.", .offset = offsetof(bcmolt_ae_path_us_stat_data, frames_65_127), .type = &type_descr_uint64_t }, { .name = "frames_128_255", .descr = "The number of 128 to 255 byte frames received on this 10g upstream path.", .offset = offsetof(bcmolt_ae_path_us_stat_data, frames_128_255), .type = &type_descr_uint64_t }, { .name = "frames_256_511", .descr = "The number of 256 to 511 byte frames received on this 10g upstream path.", .offset = offsetof(bcmolt_ae_path_us_stat_data, frames_256_511), .type = &type_descr_uint64_t }, { .name = "frames_512_1023", .descr = "The number of 512 to 1023 byte frames received on this 10g upstream path.", .offset = offsetof(bcmolt_ae_path_us_stat_data, frames_512_1023), .type = &type_descr_uint64_t }, { .name = "frames_1024_1518", .descr = "The number of 1024 to 1518 byte frames received on this 10g upstream path.", .offset = offsetof(bcmolt_ae_path_us_stat_data, frames_1024_1518), .type = &type_descr_uint64_t }, { .name = "frames_1519_2047", .descr = "The number of 1519 to 2047 byte frames received on this 10g upstream path.", .offset = offsetof(bcmolt_ae_path_us_stat_data, frames_1519_2047), .type = &type_descr_uint64_t }, { .name = "frames_2048_4095", .descr = "The number of 2048 to 4095 byte frames received on this 10g upstream path.", .offset = offsetof(bcmolt_ae_path_us_stat_data, frames_2048_4095), .type = &type_descr_uint64_t }, { .name = "frames_4096_9216", .descr = "The number of 4096 to 9216 byte frames received on this 10g upstream path.", .offset = offsetof(bcmolt_ae_path_us_stat_data, frames_4096_9216), .type = &type_descr_uint64_t }, { .name = "frames_9217_16383", .descr = "The number of 9217 to 16383 byte frames received on this 10g upstream path.", .offset = offsetof(bcmolt_ae_path_us_stat_data, frames_9217_16383), .type = &type_descr_uint64_t }, { .name = "broadcast_frames", .descr = "The number of broadcast frames received on this 10g upstream path.", .offset = offsetof(bcmolt_ae_path_us_stat_data, broadcast_frames), .type = &type_descr_uint64_t }, { .name = "data_bytes", .descr = "The number of data bytes received on this 10g upstream path.", .offset = offsetof(bcmolt_ae_path_us_stat_data, data_bytes), .type = &type_descr_uint64_t }, { .name = "multicast_frames", .descr = "The number of multicast frames received on this 10g upstream path.", .offset = offsetof(bcmolt_ae_path_us_stat_data, multicast_frames), .type = &type_descr_uint64_t }, { .name = "unicast_frames", .descr = "The number of unicast frames received on this 10g upstream path.", .offset = offsetof(bcmolt_ae_path_us_stat_data, unicast_frames), .type = &type_descr_uint64_t }, { .name = "abort_frames", .descr = "The number of abort frames received on this 10g upstream path.", .offset = offsetof(bcmolt_ae_path_us_stat_data, abort_frames), .type = &type_descr_uint64_t }, { .name = "fcs_error", .descr = "The number of bad FCS errors received on this 10g upstream path.", .offset = offsetof(bcmolt_ae_path_us_stat_data, fcs_error), .type = &type_descr_uint64_t }, { .name = "oversize_error", .descr = "The number of oversize errors received on this 10g upstream path.", .offset = offsetof(bcmolt_ae_path_us_stat_data, oversize_error), .type = &type_descr_uint64_t }, { .name = "runt_error", .descr = "The number of runt errors received on this 10g upstream path.", .offset = offsetof(bcmolt_ae_path_us_stat_data, runt_error), .type = &type_descr_uint64_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ae_path_us_stat_data = { .name = "bcmolt_ae_path_us_stat_data", .descr = "stat", .size = sizeof(bcmolt_ae_path_us_stat_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_ae_path_us_stat_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_ae_path_us_stat_data_fields } } };
+
+/* Group: ae_path_us - stat_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_us_stat_cfg_cfg = { .name = "cfg", .descr = "Statistic alarm configuration.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_US_STAT_CFG_ID_CFG, .offset = offsetof(bcmolt_ae_path_us_stat_cfg_data, cfg), .type = &type_descr_bcmolt_stat_alarm_config };
+static bcmcli_prop_descr * BCM_DESCR ae_path_us_stat_cfg_prop_array[] = { &prop_descr_ae_path_us_stat_cfg_cfg };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_ae_path_us_stat_cfg_data_fields[] = { { .name = "cfg", .descr = "Statistic alarm configuration.", .offset = offsetof(bcmolt_ae_path_us_stat_cfg_data, cfg), .type = &type_descr_bcmolt_stat_alarm_config } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ae_path_us_stat_cfg_data = { .name = "bcmolt_ae_path_us_stat_cfg_data", .descr = "Statistic Configuration", .size = sizeof(bcmolt_ae_path_us_stat_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_ae_path_us_stat_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_ae_path_us_stat_cfg_data_fields } } };
+
+/* Group: ae_path_us - stat_alarm_raised */
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_us_stat_alarm_raised_stat = { .name = "stat", .descr = "Statistic identifier.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_US_STAT_ALARM_RAISED_ID_STAT, .offset = offsetof(bcmolt_ae_path_us_stat_alarm_raised_data, stat), .type = &type_descr_bcmolt_ae_path_us_stat_id };
+static bcmcli_prop_descr * BCM_DESCR ae_path_us_stat_alarm_raised_prop_array[] = { &prop_descr_ae_path_us_stat_alarm_raised_stat };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_ae_path_us_stat_alarm_raised_data_fields[] = { { .name = "stat", .descr = "Statistic identifier.", .offset = offsetof(bcmolt_ae_path_us_stat_alarm_raised_data, stat), .type = &type_descr_bcmolt_ae_path_us_stat_id } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ae_path_us_stat_alarm_raised_data = { .name = "bcmolt_ae_path_us_stat_alarm_raised_data", .descr = "Sent when a configured statistic alarm condition has been met.", .size = sizeof(bcmolt_ae_path_us_stat_alarm_raised_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_ae_path_us_stat_alarm_raised_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_ae_path_us_stat_alarm_raised_data_fields } } };
+
+/* Group: ae_path_us - stat_alarm_cleared */
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_us_stat_alarm_cleared_stat = { .name = "stat", .descr = "Statistic identifier.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_US_STAT_ALARM_CLEARED_ID_STAT, .offset = offsetof(bcmolt_ae_path_us_stat_alarm_cleared_data, stat), .type = &type_descr_bcmolt_ae_path_us_stat_id };
+static bcmcli_prop_descr * BCM_DESCR ae_path_us_stat_alarm_cleared_prop_array[] = { &prop_descr_ae_path_us_stat_alarm_cleared_stat };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_ae_path_us_stat_alarm_cleared_data_fields[] = { { .name = "stat", .descr = "Statistic identifier.", .offset = offsetof(bcmolt_ae_path_us_stat_alarm_cleared_data, stat), .type = &type_descr_bcmolt_ae_path_us_stat_id } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ae_path_us_stat_alarm_cleared_data = { .name = "bcmolt_ae_path_us_stat_alarm_cleared_data", .descr = "Sent when a configured statistic alarm condition is no longer met.", .size = sizeof(bcmolt_ae_path_us_stat_alarm_cleared_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_ae_path_us_stat_alarm_cleared_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_ae_path_us_stat_alarm_cleared_data_fields } } };
+
+/* Group: ae_path_us - auto_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_us_auto_cfg_stat_alarm_cleared = { .name = "stat_alarm_cleared", .descr = "If true, indications of type \"stat_alarm_cleared\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_US_AUTO_CFG_ID_STAT_ALARM_CLEARED, .offset = offsetof(bcmolt_ae_path_us_auto_cfg_data, stat_alarm_cleared), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_ae_path_us_auto_cfg_stat_alarm_raised = { .name = "stat_alarm_raised", .descr = "If true, indications of type \"stat_alarm_raised\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_AE_PATH_US_AUTO_CFG_ID_STAT_ALARM_RAISED, .offset = offsetof(bcmolt_ae_path_us_auto_cfg_data, stat_alarm_raised), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr * BCM_DESCR ae_path_us_auto_cfg_prop_array[] = { &prop_descr_ae_path_us_auto_cfg_stat_alarm_cleared, &prop_descr_ae_path_us_auto_cfg_stat_alarm_raised };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_ae_path_us_auto_cfg_data_fields[] = { { .name = "stat_alarm_cleared", .descr = "If true, indications of type \"stat_alarm_cleared\" will be generated.", .offset = offsetof(bcmolt_ae_path_us_auto_cfg_data, stat_alarm_cleared), .type = &type_descr_bcmos_bool }, { .name = "stat_alarm_raised", .descr = "If true, indications of type \"stat_alarm_raised\" will be generated.", .offset = offsetof(bcmolt_ae_path_us_auto_cfg_data, stat_alarm_raised), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_ae_path_us_auto_cfg_data = { .name = "bcmolt_ae_path_us_auto_cfg_data", .descr = "Indication Configuration", .size = sizeof(bcmolt_ae_path_us_auto_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_ae_path_us_auto_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_ae_path_us_auto_cfg_data_fields } } };
+
+/* ==== Object: channel ==== */
+
+/* Group: channel - key */
+static bcmcli_prop_descr BCM_DESCR prop_descr_channel_key_pon_ni = { .name = "pon_ni", .descr = "PON network interface", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_CHANNEL_KEY_ID_PON_NI, .offset = offsetof(bcmolt_channel_key, pon_ni), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr * BCM_DESCR channel_key_prop_array[] = { &prop_descr_channel_key_pon_ni };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_channel_key_fields[] = { { .name = "pon_ni", .descr = "PON network interface", .offset = offsetof(bcmolt_channel_key, pon_ni), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_channel_key = { .name = "bcmolt_channel_key", .descr = "key", .size = sizeof(bcmolt_channel_key), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_channel_key_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_channel_key_fields } } };
+
+/* Group: channel - cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_channel_cfg_operation_control = { .name = "operation_control", .descr = "Operation control", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_CHANNEL_CFG_ID_OPERATION_CONTROL, .offset = offsetof(bcmolt_channel_cfg_data, operation_control), .type = &type_descr_bcmolt_operation_control };
+static bcmcli_prop_descr BCM_DESCR prop_descr_channel_cfg_tol = { .name = "tol", .descr = "Transmit Optical Level. An indication of the current OLT CT transceiver channel launch power into the ODN", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_CHANNEL_CFG_ID_TOL, .offset = offsetof(bcmolt_channel_cfg_data, tol), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_channel_cfg_system_profile = { .name = "system_profile", .descr = "System profile", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_CHANNEL_CFG_ID_SYSTEM_PROFILE, .offset = offsetof(bcmolt_channel_cfg_data, system_profile), .type = &type_descr_bcmolt_system_profile };
+static bcmcli_prop_descr BCM_DESCR prop_descr_channel_cfg_channel_profile = { .name = "channel_profile", .descr = "Channel profile", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_CHANNEL_CFG_ID_CHANNEL_PROFILE, .offset = offsetof(bcmolt_channel_cfg_data, channel_profile), .type = &type_descr_bcmolt_arr_channel_profile_8 };
+static bcmcli_prop_descr * BCM_DESCR channel_cfg_prop_array[] = { &prop_descr_channel_cfg_operation_control, &prop_descr_channel_cfg_tol, &prop_descr_channel_cfg_system_profile, &prop_descr_channel_cfg_channel_profile };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_channel_cfg_data_fields[] = { { .name = "operation_control", .descr = "Operation control", .offset = offsetof(bcmolt_channel_cfg_data, operation_control), .type = &type_descr_bcmolt_operation_control }, { .name = "tol", .descr = "Transmit Optical Level. An indication of the current OLT CT transceiver channel launch power into the ODN", .offset = offsetof(bcmolt_channel_cfg_data, tol), .type = &type_descr_uint16_t }, { .name = "system_profile", .descr = "System profile", .offset = offsetof(bcmolt_channel_cfg_data, system_profile), .type = &type_descr_bcmolt_system_profile }, { .name = "channel_profile", .descr = "Channel profile", .offset = offsetof(bcmolt_channel_cfg_data, channel_profile), .type = &type_descr_bcmolt_arr_channel_profile_8 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_channel_cfg_data = { .name = "bcmolt_channel_cfg_data", .descr = "cfg", .size = sizeof(bcmolt_channel_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_channel_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_channel_cfg_data_fields } } };
+
+/* ==== Object: debug ==== */
+
+/* Group: debug - key */
+static bcmcli_prop_descr BCM_DESCR prop_descr_debug_key_reserved = { .name = "reserved", .descr = "Reserved (set to 0)", .access = 0, .property = BCMOLT_DEBUG_KEY_ID_RESERVED, .offset = offsetof(bcmolt_debug_key, reserved), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr * BCM_DESCR debug_key_prop_array[] = { &prop_descr_debug_key_reserved };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_debug_key_fields[] = { { .name = "reserved", .descr = "Reserved (set to 0)", .offset = offsetof(bcmolt_debug_key, reserved), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_debug_key = { .name = "bcmolt_debug_key", .descr = "key", .size = sizeof(bcmolt_debug_key), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_debug_key_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_debug_key_fields } } };
+
+/* Group: debug - cli_input */
+static bcmcli_prop_descr BCM_DESCR prop_descr_debug_cli_input_data = { .name = "data", .descr = "Input String", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEBUG_CLI_INPUT_ID_DATA, .offset = offsetof(bcmolt_debug_cli_input_data, data), .type = &type_descr_bcmolt_u8_list_u32 };
+static bcmcli_prop_descr * BCM_DESCR debug_cli_input_prop_array[] = { &prop_descr_debug_cli_input_data };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_debug_cli_input_data_fields[] = { { .name = "data", .descr = "Input String", .offset = offsetof(bcmolt_debug_cli_input_data, data), .type = &type_descr_bcmolt_u8_list_u32 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_debug_cli_input_data = { .name = "bcmolt_debug_cli_input_data", .descr = "CLI Input String", .size = sizeof(bcmolt_debug_cli_input_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_debug_cli_input_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_debug_cli_input_data_fields } } };
+
+/* Group: debug - cli_output */
+static bcmcli_prop_descr BCM_DESCR prop_descr_debug_cli_output_data = { .name = "data", .descr = "output data", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEBUG_CLI_OUTPUT_ID_DATA, .offset = offsetof(bcmolt_debug_cli_output_data, data), .type = &type_descr_bcmolt_u8_list_u32 };
+static bcmcli_prop_descr * BCM_DESCR debug_cli_output_prop_array[] = { &prop_descr_debug_cli_output_data };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_debug_cli_output_data_fields[] = { { .name = "data", .descr = "output data", .offset = offsetof(bcmolt_debug_cli_output_data, data), .type = &type_descr_bcmolt_u8_list_u32 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_debug_cli_output_data = { .name = "bcmolt_debug_cli_output_data", .descr = "CLI Output String", .size = sizeof(bcmolt_debug_cli_output_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_debug_cli_output_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_debug_cli_output_data_fields } } };
+
+/* Group: debug - cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_debug_cfg_console_redirection = { .name = "console_redirection", .descr = "Log output redirection", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEBUG_CFG_ID_CONSOLE_REDIRECTION, .offset = offsetof(bcmolt_debug_cfg_data, console_redirection), .type = &type_descr_bcmolt_console_redirection };
+static bcmcli_prop_descr BCM_DESCR prop_descr_debug_cfg_indications_dropped = { .name = "indications_dropped", .descr = "Number of indications dropped due to congestion / shaping.", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_DEBUG_CFG_ID_INDICATIONS_DROPPED, .offset = offsetof(bcmolt_debug_cfg_data, indications_dropped), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_debug_cfg_file_used_percent = { .name = "file_used_percent", .descr = "DDR log file used percent", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_DEBUG_CFG_ID_FILE_USED_PERCENT, .offset = offsetof(bcmolt_debug_cfg_data, file_used_percent), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_debug_cfg_api_capture_cfg = { .name = "api_capture_cfg", .descr = "Configuration for API capture.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEBUG_CFG_ID_API_CAPTURE_CFG, .offset = offsetof(bcmolt_debug_cfg_data, api_capture_cfg), .type = &type_descr_bcmolt_api_capture_config };
+static bcmcli_prop_descr BCM_DESCR prop_descr_debug_cfg_api_capture_stats = { .name = "api_capture_stats", .descr = "Statistics on the most recent API capture.", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_DEBUG_CFG_ID_API_CAPTURE_STATS, .offset = offsetof(bcmolt_debug_cfg_data, api_capture_stats), .type = &type_descr_bcmolt_api_capture_stats };
+static bcmcli_prop_descr BCM_DESCR prop_descr_debug_cfg_api_capture_buffer_read = { .name = "api_capture_buffer_read", .descr = "Controls what portion of the capture buffer is returned when performing a cfg_get.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEBUG_CFG_ID_API_CAPTURE_BUFFER_READ, .offset = offsetof(bcmolt_debug_cfg_data, api_capture_buffer_read), .type = &type_descr_bcmolt_api_capture_buffer_reader };
+static bcmcli_prop_descr BCM_DESCR prop_descr_debug_cfg_api_capture_buffer = { .name = "api_capture_buffer", .descr = "The portion of the capture buffer currently specified by api_capture_buffer_read.", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_DEBUG_CFG_ID_API_CAPTURE_BUFFER, .offset = offsetof(bcmolt_debug_cfg_data, api_capture_buffer), .type = &type_descr_bcmolt_u8_list_u32 };
+static bcmcli_prop_descr * BCM_DESCR debug_cfg_prop_array[] = { &prop_descr_debug_cfg_console_redirection, &prop_descr_debug_cfg_indications_dropped, &prop_descr_debug_cfg_file_used_percent, &prop_descr_debug_cfg_api_capture_cfg, &prop_descr_debug_cfg_api_capture_stats, &prop_descr_debug_cfg_api_capture_buffer_read, &prop_descr_debug_cfg_api_capture_buffer };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_debug_cfg_data_fields[] = { { .name = "console_redirection", .descr = "Log output redirection", .offset = offsetof(bcmolt_debug_cfg_data, console_redirection), .type = &type_descr_bcmolt_console_redirection }, { .name = "indications_dropped", .descr = "Number of indications dropped due to congestion / shaping.", .offset = offsetof(bcmolt_debug_cfg_data, indications_dropped), .type = &type_descr_uint32_t }, { .name = "file_used_percent", .descr = "DDR log file used percent", .offset = offsetof(bcmolt_debug_cfg_data, file_used_percent), .type = &type_descr_uint8_t }, { .name = "api_capture_cfg", .descr = "Configuration for API capture.", .offset = offsetof(bcmolt_debug_cfg_data, api_capture_cfg), .type = &type_descr_bcmolt_api_capture_config }, { .name = "api_capture_stats", .descr = "Statistics on the most recent API capture.", .offset = offsetof(bcmolt_debug_cfg_data, api_capture_stats), .type = &type_descr_bcmolt_api_capture_stats }, { .name = "api_capture_buffer_read", .descr = "Controls what portion of the capture buffer is returned when performing a cfg_get.", .offset = offsetof(bcmolt_debug_cfg_data, api_capture_buffer_read), .type = &type_descr_bcmolt_api_capture_buffer_reader }, { .name = "api_capture_buffer", .descr = "The portion of the capture buffer currently specified by api_capture_buffer_read.", .offset = offsetof(bcmolt_debug_cfg_data, api_capture_buffer), .type = &type_descr_bcmolt_u8_list_u32 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_debug_cfg_data = { .name = "bcmolt_debug_cfg_data", .descr = "cfg", .size = sizeof(bcmolt_debug_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_debug_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_debug_cfg_data_fields } } };
+
+/* Group: debug - file_almost_full */
+static bcmcli_prop_descr * BCM_DESCR debug_file_almost_full_prop_array[] = { };
+
+/* Group: debug - start_api_capture */
+static bcmcli_prop_descr * BCM_DESCR debug_start_api_capture_prop_array[] = { };
+
+/* Group: debug - stop_api_capture */
+static bcmcli_prop_descr * BCM_DESCR debug_stop_api_capture_prop_array[] = { };
+
+/* Group: debug - reset_api_capture */
+static bcmcli_prop_descr * BCM_DESCR debug_reset_api_capture_prop_array[] = { };
+
+/* Group: debug - auto_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_debug_auto_cfg_cli_output = { .name = "cli_output", .descr = "If true, indications of type \"cli_output\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEBUG_AUTO_CFG_ID_CLI_OUTPUT, .offset = offsetof(bcmolt_debug_auto_cfg_data, cli_output), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_debug_auto_cfg_file_almost_full = { .name = "file_almost_full", .descr = "If true, indications of type \"file_almost_full\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEBUG_AUTO_CFG_ID_FILE_ALMOST_FULL, .offset = offsetof(bcmolt_debug_auto_cfg_data, file_almost_full), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr * BCM_DESCR debug_auto_cfg_prop_array[] = { &prop_descr_debug_auto_cfg_cli_output, &prop_descr_debug_auto_cfg_file_almost_full };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_debug_auto_cfg_data_fields[] = { { .name = "cli_output", .descr = "If true, indications of type \"cli_output\" will be generated.", .offset = offsetof(bcmolt_debug_auto_cfg_data, cli_output), .type = &type_descr_bcmos_bool }, { .name = "file_almost_full", .descr = "If true, indications of type \"file_almost_full\" will be generated.", .offset = offsetof(bcmolt_debug_auto_cfg_data, file_almost_full), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_debug_auto_cfg_data = { .name = "bcmolt_debug_auto_cfg_data", .descr = "Indication Configuration", .size = sizeof(bcmolt_debug_auto_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_debug_auto_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_debug_auto_cfg_data_fields } } };
+
+/* ==== Object: device ==== */
+
+/* Group: device - cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_cfg_system_mode = { .name = "system_mode", .descr = "System mode - this must be set by the host when initially provisioning the system.  Setting this also sets the \"nni_speed\" property, unless it is overridden.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_CFG_ID_SYSTEM_MODE, .offset = offsetof(bcmolt_device_cfg_data, system_mode), .type = &type_descr_bcmolt_system_mode };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_cfg_keepalive_interval = { .name = "keepalive_interval", .descr = "Keepalive Interval in Seconds  (0 = Disable)", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_CFG_ID_KEEPALIVE_INTERVAL, .offset = offsetof(bcmolt_device_cfg_data, keepalive_interval), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_cfg_keepalive_tolerance = { .name = "keepalive_tolerance", .descr = "How many keepalive messages can be lost before triggering a disconnect sequence ", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_CFG_ID_KEEPALIVE_TOLERANCE, .offset = offsetof(bcmolt_device_cfg_data, keepalive_tolerance), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_cfg_firmware_sw_version = { .name = "firmware_sw_version", .descr = "Firmware SW Version", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_DEVICE_CFG_ID_FIRMWARE_SW_VERSION, .offset = offsetof(bcmolt_device_cfg_data, firmware_sw_version), .type = &type_descr_bcmolt_firmware_sw_version };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_cfg_host_sw_version = { .name = "host_sw_version", .descr = "Host SW Version", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_DEVICE_CFG_ID_HOST_SW_VERSION, .offset = offsetof(bcmolt_device_cfg_data, host_sw_version), .type = &type_descr_bcmolt_host_sw_version };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_cfg_chip_revision = { .name = "chip_revision", .descr = "Revision of the BCM68620 device.", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_DEVICE_CFG_ID_CHIP_REVISION, .offset = offsetof(bcmolt_device_cfg_data, chip_revision), .type = &type_descr_bcmolt_device_chip_revision };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_cfg_state = { .name = "state", .descr = "Device state", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_DEVICE_CFG_ID_STATE, .offset = offsetof(bcmolt_device_cfg_data, state), .type = &type_descr_bcmolt_device_state };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_cfg_debug = { .name = "debug", .descr = "Device configuration debug parameters", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_CFG_ID_DEBUG, .offset = offsetof(bcmolt_device_cfg_data, debug), .type = &type_descr_bcmolt_debug_device_cfg };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_cfg_nni_speed = { .name = "nni_speed", .descr = "Speed of the NNI interface.  This is calculated automatically when the \"system_mode\" property is set, but can be overridden by the host.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_CFG_ID_NNI_SPEED, .offset = offsetof(bcmolt_device_cfg_data, nni_speed), .type = &type_descr_bcmolt_device_nni_speed };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_cfg_protection_switching_ext_irq = { .name = "protection_switching_ext_irq", .descr = "The selected external IRQ for protection switching", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_CFG_ID_PROTECTION_SWITCHING_EXT_IRQ, .offset = offsetof(bcmolt_device_cfg_data, protection_switching_ext_irq), .type = &type_descr_bcmolt_ext_irq };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_cfg_epon_clock_transport_sample_delay = { .name = "epon_clock_transport_sample_delay", .descr = "The time (in TQ) that it takes from when a pulse is generated at the external source to when we sample it.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_CFG_ID_EPON_CLOCK_TRANSPORT_SAMPLE_DELAY, .offset = offsetof(bcmolt_device_cfg_data, epon_clock_transport_sample_delay), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_cfg_indication_shaping = { .name = "indication_shaping", .descr = "Shaping / rate limiting for the indication channel.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_CFG_ID_INDICATION_SHAPING, .offset = offsetof(bcmolt_device_cfg_data, indication_shaping), .type = &type_descr_bcmolt_indication_shaping };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_cfg_chip_temperature = { .name = "chip_temperature", .descr = "Current die temperature.", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_DEVICE_CFG_ID_CHIP_TEMPERATURE, .offset = offsetof(bcmolt_device_cfg_data, chip_temperature), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_cfg_gpon_xgpon_tod_enable = { .name = "gpon_xgpon_tod_enable", .descr = "GPON/XGPON ToD control state", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_ENABLE, .offset = offsetof(bcmolt_device_cfg_data, gpon_xgpon_tod_enable), .type = &type_descr_bcmolt_control_state };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_cfg_gpon_xgpon_tod_gpio_pin = { .name = "gpon_xgpon_tod_gpio_pin", .descr = "GPON/XGPON ToD GIO pin", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_GPIO_PIN, .offset = offsetof(bcmolt_device_cfg_data, gpon_xgpon_tod_gpio_pin), .type = &type_descr_bcmolt_gpio_pin };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_cfg_gpon_xgpon_tod_connected_internally = { .name = "gpon_xgpon_tod_connected_internally", .descr = "GPON/XGPON is ToD internally", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_CONNECTED_INTERNALLY, .offset = offsetof(bcmolt_device_cfg_data, gpon_xgpon_tod_connected_internally), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_cfg_epon_8021_as_tod_format = { .name = "epon_8021_as_tod_format", .descr = "EPON 802.1AS ToD Format", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_CFG_ID_EPON_8021_AS_TOD_FORMAT, .offset = offsetof(bcmolt_device_cfg_data, epon_8021_as_tod_format), .type = &type_descr_bcmolt_str_256 };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_cfg_epon_shaper_mode = { .name = "epon_shaper_mode", .descr = "Controls EPON shaper behavior.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_CFG_ID_EPON_SHAPER_MODE, .offset = offsetof(bcmolt_device_cfg_data, epon_shaper_mode), .type = &type_descr_bcmolt_shaper_mode };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_cfg_embedded_image_list = { .name = "embedded_image_list", .descr = "List of all file images stored in the OLT.", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_DEVICE_CFG_ID_EMBEDDED_IMAGE_LIST, .offset = offsetof(bcmolt_device_cfg_data, embedded_image_list), .type = &type_descr_bcmolt_embedded_image_entry_list_u8 };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_cfg_chip_voltage = { .name = "chip_voltage", .descr = "Chip voltage in mV", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_DEVICE_CFG_ID_CHIP_VOLTAGE, .offset = offsetof(bcmolt_device_cfg_data, chip_voltage), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_cfg_epon_tod_string = { .name = "epon_tod_string", .descr = "EPON ToD String", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_CFG_ID_EPON_TOD_STRING, .offset = offsetof(bcmolt_device_cfg_data, epon_tod_string), .type = &type_descr_bcmolt_str_256 };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_cfg_xgpon_num_of_onus = { .name = "xgpon_num_of_onus", .descr = "xgpon num of onus", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_CFG_ID_XGPON_NUM_OF_ONUS, .offset = offsetof(bcmolt_device_cfg_data, xgpon_num_of_onus), .type = &type_descr_bcmolt_xgpon_num_of_onus };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_cfg_device_ip_address = { .name = "device_ip_address", .descr = "The IP Address of the device", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_CFG_ID_DEVICE_IP_ADDRESS, .offset = offsetof(bcmolt_device_cfg_data, device_ip_address), .type = &type_descr_bcmos_ipv4_address };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_cfg_device_udp_port = { .name = "device_udp_port", .descr = "The UDP port of the Device", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_CFG_ID_DEVICE_UDP_PORT, .offset = offsetof(bcmolt_device_cfg_data, device_udp_port), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_cfg_tod_uart_baudrate = { .name = "tod_uart_baudrate", .descr = "UART baud rate", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_CFG_ID_TOD_UART_BAUDRATE, .offset = offsetof(bcmolt_device_cfg_data, tod_uart_baudrate), .type = &type_descr_bcmolt_uart_baudrate };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_cfg_gpon_xgpon_tod_string_length = { .name = "gpon_xgpon_tod_string_length", .descr = "GPON/XGPON ToD string length", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_CFG_ID_GPON_XGPON_TOD_STRING_LENGTH, .offset = offsetof(bcmolt_device_cfg_data, gpon_xgpon_tod_string_length), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr * BCM_DESCR device_cfg_prop_array[] = { &prop_descr_device_cfg_system_mode, &prop_descr_device_cfg_keepalive_interval, &prop_descr_device_cfg_keepalive_tolerance, &prop_descr_device_cfg_firmware_sw_version, &prop_descr_device_cfg_host_sw_version, &prop_descr_device_cfg_chip_revision, &prop_descr_device_cfg_state, &prop_descr_device_cfg_debug, &prop_descr_device_cfg_nni_speed, &prop_descr_device_cfg_protection_switching_ext_irq, &prop_descr_device_cfg_epon_clock_transport_sample_delay, &prop_descr_device_cfg_indication_shaping, &prop_descr_device_cfg_chip_temperature, &prop_descr_device_cfg_gpon_xgpon_tod_enable, &prop_descr_device_cfg_gpon_xgpon_tod_gpio_pin, &prop_descr_device_cfg_gpon_xgpon_tod_connected_internally, &prop_descr_device_cfg_epon_8021_as_tod_format, &prop_descr_device_cfg_epon_shaper_mode, &prop_descr_device_cfg_embedded_image_list, &prop_descr_device_cfg_chip_voltage, &prop_descr_device_cfg_epon_tod_string, &prop_descr_device_cfg_xgpon_num_of_onus, &prop_descr_device_cfg_device_ip_address, &prop_descr_device_cfg_device_udp_port, &prop_descr_device_cfg_tod_uart_baudrate, &prop_descr_device_cfg_gpon_xgpon_tod_string_length };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_device_cfg_data_fields[] = { { .name = "system_mode", .descr = "System mode - this must be set by the host when initially provisioning the system.  Setting this also sets the \"nni_speed\" property, unless it is overridden.", .offset = offsetof(bcmolt_device_cfg_data, system_mode), .type = &type_descr_bcmolt_system_mode }, { .name = "keepalive_interval", .descr = "Keepalive Interval in Seconds  (0 = Disable)", .offset = offsetof(bcmolt_device_cfg_data, keepalive_interval), .type = &type_descr_uint32_t }, { .name = "keepalive_tolerance", .descr = "How many keepalive messages can be lost before triggering a disconnect sequence ", .offset = offsetof(bcmolt_device_cfg_data, keepalive_tolerance), .type = &type_descr_uint32_t }, { .name = "firmware_sw_version", .descr = "Firmware SW Version", .offset = offsetof(bcmolt_device_cfg_data, firmware_sw_version), .type = &type_descr_bcmolt_firmware_sw_version }, { .name = "host_sw_version", .descr = "Host SW Version", .offset = offsetof(bcmolt_device_cfg_data, host_sw_version), .type = &type_descr_bcmolt_host_sw_version }, { .name = "chip_revision", .descr = "Revision of the BCM68620 device.", .offset = offsetof(bcmolt_device_cfg_data, chip_revision), .type = &type_descr_bcmolt_device_chip_revision }, { .name = "state", .descr = "Device state", .offset = offsetof(bcmolt_device_cfg_data, state), .type = &type_descr_bcmolt_device_state }, { .name = "debug", .descr = "Device configuration debug parameters", .offset = offsetof(bcmolt_device_cfg_data, debug), .type = &type_descr_bcmolt_debug_device_cfg }, { .name = "nni_speed", .descr = "Speed of the NNI interface.  This is calculated automatically when the \"system_mode\" property is set, but can be overridden by the host.", .offset = offsetof(bcmolt_device_cfg_data, nni_speed), .type = &type_descr_bcmolt_device_nni_speed }, { .name = "protection_switching_ext_irq", .descr = "The selected external IRQ for protection switching", .offset = offsetof(bcmolt_device_cfg_data, protection_switching_ext_irq), .type = &type_descr_bcmolt_ext_irq }, { .name = "epon_clock_transport_sample_delay", .descr = "The time (in TQ) that it takes from when a pulse is generated at the external source to when we sample it.", .offset = offsetof(bcmolt_device_cfg_data, epon_clock_transport_sample_delay), .type = &type_descr_uint32_t }, { .name = "indication_shaping", .descr = "Shaping / rate limiting for the indication channel.", .offset = offsetof(bcmolt_device_cfg_data, indication_shaping), .type = &type_descr_bcmolt_indication_shaping }, { .name = "chip_temperature", .descr = "Current die temperature.", .offset = offsetof(bcmolt_device_cfg_data, chip_temperature), .type = &type_descr_uint32_t }, { .name = "gpon_xgpon_tod_enable", .descr = "GPON/XGPON ToD control state", .offset = offsetof(bcmolt_device_cfg_data, gpon_xgpon_tod_enable), .type = &type_descr_bcmolt_control_state }, { .name = "gpon_xgpon_tod_gpio_pin", .descr = "GPON/XGPON ToD GIO pin", .offset = offsetof(bcmolt_device_cfg_data, gpon_xgpon_tod_gpio_pin), .type = &type_descr_bcmolt_gpio_pin }, { .name = "gpon_xgpon_tod_connected_internally", .descr = "GPON/XGPON is ToD internally", .offset = offsetof(bcmolt_device_cfg_data, gpon_xgpon_tod_connected_internally), .type = &type_descr_bcmos_bool }, { .name = "epon_8021_as_tod_format", .descr = "EPON 802.1AS ToD Format", .offset = offsetof(bcmolt_device_cfg_data, epon_8021_as_tod_format), .type = &type_descr_bcmolt_str_256 }, { .name = "epon_shaper_mode", .descr = "Controls EPON shaper behavior.", .offset = offsetof(bcmolt_device_cfg_data, epon_shaper_mode), .type = &type_descr_bcmolt_shaper_mode }, { .name = "embedded_image_list", .descr = "List of all file images stored in the OLT.", .offset = offsetof(bcmolt_device_cfg_data, embedded_image_list), .type = &type_descr_bcmolt_embedded_image_entry_list_u8 }, { .name = "chip_voltage", .descr = "Chip voltage in mV", .offset = offsetof(bcmolt_device_cfg_data, chip_voltage), .type = &type_descr_uint32_t }, { .name = "epon_tod_string", .descr = "EPON ToD String", .offset = offsetof(bcmolt_device_cfg_data, epon_tod_string), .type = &type_descr_bcmolt_str_256 }, { .name = "xgpon_num_of_onus", .descr = "xgpon num of onus", .offset = offsetof(bcmolt_device_cfg_data, xgpon_num_of_onus), .type = &type_descr_bcmolt_xgpon_num_of_onus }, { .name = "device_ip_address", .descr = "The IP Address of the device", .offset = offsetof(bcmolt_device_cfg_data, device_ip_address), .type = &type_descr_bcmos_ipv4_address }, { .name = "device_udp_port", .descr = "The UDP port of the Device", .offset = offsetof(bcmolt_device_cfg_data, device_udp_port), .type = &type_descr_uint16_t }, { .name = "tod_uart_baudrate", .descr = "UART baud rate", .offset = offsetof(bcmolt_device_cfg_data, tod_uart_baudrate), .type = &type_descr_bcmolt_uart_baudrate }, { .name = "gpon_xgpon_tod_string_length", .descr = "GPON/XGPON ToD string length", .offset = offsetof(bcmolt_device_cfg_data, gpon_xgpon_tod_string_length), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_device_cfg_data = { .name = "bcmolt_device_cfg_data", .descr = "cfg", .size = sizeof(bcmolt_device_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_device_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_device_cfg_data_fields } } };
+
+/* Group: device - key */
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_key_reserved = { .name = "reserved", .descr = "Reserved (set to 0).", .access = 0, .property = BCMOLT_DEVICE_KEY_ID_RESERVED, .offset = offsetof(bcmolt_device_key, reserved), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr * BCM_DESCR device_key_prop_array[] = { &prop_descr_device_key_reserved };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_device_key_fields[] = { { .name = "reserved", .descr = "Reserved (set to 0).", .offset = offsetof(bcmolt_device_key, reserved), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_device_key = { .name = "bcmolt_device_key", .descr = "key", .size = sizeof(bcmolt_device_key), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_device_key_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_device_key_fields } } };
+
+/* Group: device - connect */
+static bcmcli_prop_descr * BCM_DESCR device_connect_prop_array[] = { };
+
+/* Group: device - disconnect */
+static bcmcli_prop_descr * BCM_DESCR device_disconnect_prop_array[] = { };
+
+/* Group: device - reset */
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_reset_mode = { .name = "mode", .descr = "Options to control what should be reset.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_RESET_ID_MODE, .offset = offsetof(bcmolt_device_reset_data, mode), .type = &type_descr_bcmolt_device_reset_mode };
+static bcmcli_prop_descr * BCM_DESCR device_reset_prop_array[] = { &prop_descr_device_reset_mode };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_device_reset_data_fields[] = { { .name = "mode", .descr = "Options to control what should be reset.", .offset = offsetof(bcmolt_device_reset_data, mode), .type = &type_descr_bcmolt_device_reset_mode } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_device_reset_data = { .name = "bcmolt_device_reset_data", .descr = "Resets the host/device.", .size = sizeof(bcmolt_device_reset_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_device_reset_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_device_reset_data_fields } } };
+
+/* Group: device - host_keep_alive */
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_host_keep_alive_sequence_number = { .name = "sequence_number", .descr = "sequence number", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_HOST_KEEP_ALIVE_ID_SEQUENCE_NUMBER, .offset = offsetof(bcmolt_device_host_keep_alive_data, sequence_number), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_host_keep_alive_time_stamp = { .name = "time_stamp", .descr = "time stamp", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_HOST_KEEP_ALIVE_ID_TIME_STAMP, .offset = offsetof(bcmolt_device_host_keep_alive_data, time_stamp), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr * BCM_DESCR device_host_keep_alive_prop_array[] = { &prop_descr_device_host_keep_alive_sequence_number, &prop_descr_device_host_keep_alive_time_stamp };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_device_host_keep_alive_data_fields[] = { { .name = "sequence_number", .descr = "sequence number", .offset = offsetof(bcmolt_device_host_keep_alive_data, sequence_number), .type = &type_descr_uint32_t }, { .name = "time_stamp", .descr = "time stamp", .offset = offsetof(bcmolt_device_host_keep_alive_data, time_stamp), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_device_host_keep_alive_data = { .name = "bcmolt_device_host_keep_alive_data", .descr = "Keep alive message from the host to the device - used by the device control library (should not be sent by the host application).", .size = sizeof(bcmolt_device_host_keep_alive_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_device_host_keep_alive_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_device_host_keep_alive_data_fields } } };
+
+/* Group: device - sw_upgrade_activate */
+static bcmcli_prop_descr * BCM_DESCR device_sw_upgrade_activate_prop_array[] = { };
+
+/* Group: device - device_ready */
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_device_ready_firmware_sw_version = { .name = "firmware_sw_version", .descr = "Software Version", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_DEVICE_READY_ID_FIRMWARE_SW_VERSION, .offset = offsetof(bcmolt_device_device_ready_data, firmware_sw_version), .type = &type_descr_bcmolt_firmware_sw_version };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_device_ready_system_mode = { .name = "system_mode", .descr = "System Mode", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_DEVICE_READY_ID_SYSTEM_MODE, .offset = offsetof(bcmolt_device_device_ready_data, system_mode), .type = &type_descr_bcmolt_system_mode };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_device_ready_nni_speed = { .name = "nni_speed", .descr = "NNI Speed", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_DEVICE_READY_ID_NNI_SPEED, .offset = offsetof(bcmolt_device_device_ready_data, nni_speed), .type = &type_descr_bcmolt_device_nni_speed };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_device_ready_chip_revision = { .name = "chip_revision", .descr = "Chip Revision", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_DEVICE_READY_ID_CHIP_REVISION, .offset = offsetof(bcmolt_device_device_ready_data, chip_revision), .type = &type_descr_bcmolt_device_chip_revision };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_device_ready_tod_enable = { .name = "tod_enable", .descr = "ToD control", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_DEVICE_READY_ID_TOD_ENABLE, .offset = offsetof(bcmolt_device_device_ready_data, tod_enable), .type = &type_descr_bcmolt_control_state };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_device_ready_tod_gpio_pin = { .name = "tod_gpio_pin", .descr = "GPIO pin is used when ToD UART is not connected to the embedded, and TOD value is obtained by the host", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_DEVICE_READY_ID_TOD_GPIO_PIN, .offset = offsetof(bcmolt_device_device_ready_data, tod_gpio_pin), .type = &type_descr_bcmolt_gpio_pin };
+static bcmcli_prop_descr * BCM_DESCR device_device_ready_prop_array[] = { &prop_descr_device_device_ready_firmware_sw_version, &prop_descr_device_device_ready_system_mode, &prop_descr_device_device_ready_nni_speed, &prop_descr_device_device_ready_chip_revision, &prop_descr_device_device_ready_tod_enable, &prop_descr_device_device_ready_tod_gpio_pin };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_device_device_ready_data_fields[] = { { .name = "firmware_sw_version", .descr = "Software Version", .offset = offsetof(bcmolt_device_device_ready_data, firmware_sw_version), .type = &type_descr_bcmolt_firmware_sw_version }, { .name = "system_mode", .descr = "System Mode", .offset = offsetof(bcmolt_device_device_ready_data, system_mode), .type = &type_descr_bcmolt_system_mode }, { .name = "nni_speed", .descr = "NNI Speed", .offset = offsetof(bcmolt_device_device_ready_data, nni_speed), .type = &type_descr_bcmolt_device_nni_speed }, { .name = "chip_revision", .descr = "Chip Revision", .offset = offsetof(bcmolt_device_device_ready_data, chip_revision), .type = &type_descr_bcmolt_device_chip_revision }, { .name = "tod_enable", .descr = "ToD control", .offset = offsetof(bcmolt_device_device_ready_data, tod_enable), .type = &type_descr_bcmolt_control_state }, { .name = "tod_gpio_pin", .descr = "GPIO pin is used when ToD UART is not connected to the embedded, and TOD value is obtained by the host", .offset = offsetof(bcmolt_device_device_ready_data, tod_gpio_pin), .type = &type_descr_bcmolt_gpio_pin } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_device_device_ready_data = { .name = "bcmolt_device_device_ready_data", .descr = "Device ready indication used by the device control library (not sent to the host application).", .size = sizeof(bcmolt_device_device_ready_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_device_device_ready_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_device_device_ready_data_fields } } };
+
+/* Group: device - connection_established */
+static bcmcli_prop_descr * BCM_DESCR device_connection_established_prop_array[] = { };
+
+/* Group: device - device_keep_alive */
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_device_keep_alive_sequence_number = { .name = "sequence_number", .descr = "sequence number", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_DEVICE_KEEP_ALIVE_ID_SEQUENCE_NUMBER, .offset = offsetof(bcmolt_device_device_keep_alive_data, sequence_number), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_device_keep_alive_time_stamp = { .name = "time_stamp", .descr = "time stamp", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_DEVICE_KEEP_ALIVE_ID_TIME_STAMP, .offset = offsetof(bcmolt_device_device_keep_alive_data, time_stamp), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr * BCM_DESCR device_device_keep_alive_prop_array[] = { &prop_descr_device_device_keep_alive_sequence_number, &prop_descr_device_device_keep_alive_time_stamp };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_device_device_keep_alive_data_fields[] = { { .name = "sequence_number", .descr = "sequence number", .offset = offsetof(bcmolt_device_device_keep_alive_data, sequence_number), .type = &type_descr_uint32_t }, { .name = "time_stamp", .descr = "time stamp", .offset = offsetof(bcmolt_device_device_keep_alive_data, time_stamp), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_device_device_keep_alive_data = { .name = "bcmolt_device_device_keep_alive_data", .descr = "Keep alive message from the device to the host - used by the device control library (not sent to the host application).", .size = sizeof(bcmolt_device_device_keep_alive_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_device_device_keep_alive_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_device_device_keep_alive_data_fields } } };
+
+/* Group: device - connection_failure */
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_connection_failure_reason = { .name = "reason", .descr = "Connection fail reason", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_CONNECTION_FAILURE_ID_REASON, .offset = offsetof(bcmolt_device_connection_failure_data, reason), .type = &type_descr_bcmolt_host_connection_fail_reason };
+static bcmcli_prop_descr * BCM_DESCR device_connection_failure_prop_array[] = { &prop_descr_device_connection_failure_reason };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_device_connection_failure_data_fields[] = { { .name = "reason", .descr = "Connection fail reason", .offset = offsetof(bcmolt_device_connection_failure_data, reason), .type = &type_descr_bcmolt_host_connection_fail_reason } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_device_connection_failure_data = { .name = "bcmolt_device_connection_failure_data", .descr = "The host failed to connect to the device.", .size = sizeof(bcmolt_device_connection_failure_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_device_connection_failure_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_device_connection_failure_data_fields } } };
+
+/* Group: device - connection_complete */
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_connection_complete_standalone = { .name = "standalone", .descr = "If true, the device was previously running in standalone mode before this connection was established.  If false, the device was booted from reset with new firmware, etc.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_CONNECTION_COMPLETE_ID_STANDALONE, .offset = offsetof(bcmolt_device_connection_complete_data, standalone), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr * BCM_DESCR device_connection_complete_prop_array[] = { &prop_descr_device_connection_complete_standalone };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_device_connection_complete_data_fields[] = { { .name = "standalone", .descr = "If true, the device was previously running in standalone mode before this connection was established.  If false, the device was booted from reset with new firmware, etc.", .offset = offsetof(bcmolt_device_connection_complete_data, standalone), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_device_connection_complete_data = { .name = "bcmolt_device_connection_complete_data", .descr = "The host successfully connected to the device.  The device has either been reprogrammed with new firmware, or a connection was established with an existing device (see the \"standalone\" field).", .size = sizeof(bcmolt_device_connection_complete_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_device_connection_complete_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_device_connection_complete_data_fields } } };
+
+/* Group: device - disconnection_complete */
+static bcmcli_prop_descr * BCM_DESCR device_disconnection_complete_prop_array[] = { };
+
+/* Group: device - sw_error */
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_sw_error_task_name = { .name = "task_name", .descr = "task name", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_SW_ERROR_ID_TASK_NAME, .offset = offsetof(bcmolt_device_sw_error_data, task_name), .type = &type_descr_bcmolt_str_100 };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_sw_error_file_name = { .name = "file_name", .descr = "file name", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_SW_ERROR_ID_FILE_NAME, .offset = offsetof(bcmolt_device_sw_error_data, file_name), .type = &type_descr_bcmolt_str_100 };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_sw_error_line_number = { .name = "line_number", .descr = "line number", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_SW_ERROR_ID_LINE_NUMBER, .offset = offsetof(bcmolt_device_sw_error_data, line_number), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_sw_error_pon_ni = { .name = "pon_ni", .descr = "pon_ni", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_SW_ERROR_ID_PON_NI, .offset = offsetof(bcmolt_device_sw_error_data, pon_ni), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr * BCM_DESCR device_sw_error_prop_array[] = { &prop_descr_device_sw_error_task_name, &prop_descr_device_sw_error_file_name, &prop_descr_device_sw_error_line_number, &prop_descr_device_sw_error_pon_ni };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_device_sw_error_data_fields[] = { { .name = "task_name", .descr = "task name", .offset = offsetof(bcmolt_device_sw_error_data, task_name), .type = &type_descr_bcmolt_str_100 }, { .name = "file_name", .descr = "file name", .offset = offsetof(bcmolt_device_sw_error_data, file_name), .type = &type_descr_bcmolt_str_100 }, { .name = "line_number", .descr = "line number", .offset = offsetof(bcmolt_device_sw_error_data, line_number), .type = &type_descr_uint32_t }, { .name = "pon_ni", .descr = "pon_ni", .offset = offsetof(bcmolt_device_sw_error_data, pon_ni), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_device_sw_error_data = { .name = "bcmolt_device_sw_error_data", .descr = "sw error", .size = sizeof(bcmolt_device_sw_error_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_device_sw_error_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_device_sw_error_data_fields } } };
+
+/* Group: device - sw_exception */
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_sw_exception_cpu_id = { .name = "cpu_id", .descr = "CPU ID", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_SW_EXCEPTION_ID_CPU_ID, .offset = offsetof(bcmolt_device_sw_exception_data, cpu_id), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_sw_exception_text = { .name = "text", .descr = "text", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_SW_EXCEPTION_ID_TEXT, .offset = offsetof(bcmolt_device_sw_exception_data, text), .type = &type_descr_bcmolt_str_2000 };
+static bcmcli_prop_descr * BCM_DESCR device_sw_exception_prop_array[] = { &prop_descr_device_sw_exception_cpu_id, &prop_descr_device_sw_exception_text };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_device_sw_exception_data_fields[] = { { .name = "cpu_id", .descr = "CPU ID", .offset = offsetof(bcmolt_device_sw_exception_data, cpu_id), .type = &type_descr_uint8_t }, { .name = "text", .descr = "text", .offset = offsetof(bcmolt_device_sw_exception_data, text), .type = &type_descr_bcmolt_str_2000 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_device_sw_exception_data = { .name = "bcmolt_device_sw_exception_data", .descr = "sw exception", .size = sizeof(bcmolt_device_sw_exception_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_device_sw_exception_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_device_sw_exception_data_fields } } };
+
+/* Group: device - indications_dropped */
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_indications_dropped_total_count = { .name = "total_count", .descr = "Total number of indications dropped since the system was started.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_INDICATIONS_DROPPED_ID_TOTAL_COUNT, .offset = offsetof(bcmolt_device_indications_dropped_data, total_count), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr * BCM_DESCR device_indications_dropped_prop_array[] = { &prop_descr_device_indications_dropped_total_count };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_device_indications_dropped_data_fields[] = { { .name = "total_count", .descr = "Total number of indications dropped since the system was started.", .offset = offsetof(bcmolt_device_indications_dropped_data, total_count), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_device_indications_dropped_data = { .name = "bcmolt_device_indications_dropped_data", .descr = "Sent when indications are dropped due to congestion / shaping.", .size = sizeof(bcmolt_device_indications_dropped_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_device_indications_dropped_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_device_indications_dropped_data_fields } } };
+
+/* Group: device - image_transfer_start */
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_image_transfer_start_image_type = { .name = "image_type", .descr = "File type.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID_IMAGE_TYPE, .offset = offsetof(bcmolt_device_image_transfer_start_data, image_type), .type = &type_descr_bcmolt_device_image_type };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_image_transfer_start_image_size = { .name = "image_size", .descr = "Size of the file image.  Ignored for RRQ operation.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID_IMAGE_SIZE, .offset = offsetof(bcmolt_device_image_transfer_start_data, image_size), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_image_transfer_start_crc32 = { .name = "crc32", .descr = "CRC32 checksum of the entire file image.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID_CRC32, .offset = offsetof(bcmolt_device_image_transfer_start_data, crc32), .type = &type_descr_uint32_t_hex };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_image_transfer_start_image_name = { .name = "image_name", .descr = "Name of the file image.  Null-terminated string.  This is required for the DPoE ONU only.  DPoE requires the write request OAM contains the name of the file.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_IMAGE_TRANSFER_START_ID_IMAGE_NAME, .offset = offsetof(bcmolt_device_image_transfer_start_data, image_name), .type = &type_descr_bcmolt_str_64 };
+static bcmcli_prop_descr * BCM_DESCR device_image_transfer_start_prop_array[] = { &prop_descr_device_image_transfer_start_image_type, &prop_descr_device_image_transfer_start_image_size, &prop_descr_device_image_transfer_start_crc32, &prop_descr_device_image_transfer_start_image_name };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_device_image_transfer_start_data_fields[] = { { .name = "image_type", .descr = "File type.", .offset = offsetof(bcmolt_device_image_transfer_start_data, image_type), .type = &type_descr_bcmolt_device_image_type }, { .name = "image_size", .descr = "Size of the file image.  Ignored for RRQ operation.", .offset = offsetof(bcmolt_device_image_transfer_start_data, image_size), .type = &type_descr_uint32_t }, { .name = "crc32", .descr = "CRC32 checksum of the entire file image.", .offset = offsetof(bcmolt_device_image_transfer_start_data, crc32), .type = &type_descr_uint32_t_hex }, { .name = "image_name", .descr = "Name of the file image.  Null-terminated string.  This is required for the DPoE ONU only.  DPoE requires the write request OAM contains the name of the file.", .offset = offsetof(bcmolt_device_image_transfer_start_data, image_name), .type = &type_descr_bcmolt_str_64 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_device_image_transfer_start_data = { .name = "bcmolt_device_image_transfer_start_data", .descr = "This API message informs the OLT of the start of image transfer, and provides the information of the file image.", .size = sizeof(bcmolt_device_image_transfer_start_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_device_image_transfer_start_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_device_image_transfer_start_data_fields } } };
+
+/* Group: device - image_transfer_data */
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_image_transfer_data_block_number = { .name = "block_number", .descr = "Block number.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_IMAGE_TRANSFER_DATA_ID_BLOCK_NUMBER, .offset = offsetof(bcmolt_device_image_transfer_data_data, block_number), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_image_transfer_data_more_data = { .name = "more_data", .descr = "Specifies that there are more data to come.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_IMAGE_TRANSFER_DATA_ID_MORE_DATA, .offset = offsetof(bcmolt_device_image_transfer_data_data, more_data), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_image_transfer_data_data = { .name = "data", .descr = "Data.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_IMAGE_TRANSFER_DATA_ID_DATA, .offset = offsetof(bcmolt_device_image_transfer_data_data, data), .type = &type_descr_bcmolt_u8_list_u16_hex };
+static bcmcli_prop_descr * BCM_DESCR device_image_transfer_data_prop_array[] = { &prop_descr_device_image_transfer_data_block_number, &prop_descr_device_image_transfer_data_more_data, &prop_descr_device_image_transfer_data_data };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_device_image_transfer_data_data_fields[] = { { .name = "block_number", .descr = "Block number.", .offset = offsetof(bcmolt_device_image_transfer_data_data, block_number), .type = &type_descr_uint32_t }, { .name = "more_data", .descr = "Specifies that there are more data to come.", .offset = offsetof(bcmolt_device_image_transfer_data_data, more_data), .type = &type_descr_bcmos_bool }, { .name = "data", .descr = "Data.", .offset = offsetof(bcmolt_device_image_transfer_data_data, data), .type = &type_descr_bcmolt_u8_list_u16_hex } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_device_image_transfer_data_data = { .name = "bcmolt_device_image_transfer_data_data", .descr = "used for transferring the actual data from/to the OLT.   not to be directly called by the user.", .size = sizeof(bcmolt_device_image_transfer_data_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_device_image_transfer_data_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_device_image_transfer_data_data_fields } } };
+
+/* Group: device - image_transfer_complete */
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_image_transfer_complete_image_type = { .name = "image_type", .descr = "Image type.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_IMAGE_TRANSFER_COMPLETE_ID_IMAGE_TYPE, .offset = offsetof(bcmolt_device_image_transfer_complete_data, image_type), .type = &type_descr_bcmolt_device_image_type };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_image_transfer_complete_block_number = { .name = "block_number", .descr = "Block number.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_IMAGE_TRANSFER_COMPLETE_ID_BLOCK_NUMBER, .offset = offsetof(bcmolt_device_image_transfer_complete_data, block_number), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_image_transfer_complete_status = { .name = "status", .descr = "Image transfer status.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_IMAGE_TRANSFER_COMPLETE_ID_STATUS, .offset = offsetof(bcmolt_device_image_transfer_complete_data, status), .type = &type_descr_bcmolt_image_transfer_status };
+static bcmcli_prop_descr * BCM_DESCR device_image_transfer_complete_prop_array[] = { &prop_descr_device_image_transfer_complete_image_type, &prop_descr_device_image_transfer_complete_block_number, &prop_descr_device_image_transfer_complete_status };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_device_image_transfer_complete_data_fields[] = { { .name = "image_type", .descr = "Image type.", .offset = offsetof(bcmolt_device_image_transfer_complete_data, image_type), .type = &type_descr_bcmolt_device_image_type }, { .name = "block_number", .descr = "Block number.", .offset = offsetof(bcmolt_device_image_transfer_complete_data, block_number), .type = &type_descr_uint32_t }, { .name = "status", .descr = "Image transfer status.", .offset = offsetof(bcmolt_device_image_transfer_complete_data, status), .type = &type_descr_bcmolt_image_transfer_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_device_image_transfer_complete_data = { .name = "bcmolt_device_image_transfer_complete_data", .descr = "Image Transfer Complete", .size = sizeof(bcmolt_device_image_transfer_complete_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_device_image_transfer_complete_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_device_image_transfer_complete_data_fields } } };
+
+/* Group: device - run_ddr_test */
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_run_ddr_test_cpu = { .name = "cpu", .descr = "Whether or not to test the CPU DDR", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_RUN_DDR_TEST_ID_CPU, .offset = offsetof(bcmolt_device_run_ddr_test_data, cpu), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_run_ddr_test_ras_0 = { .name = "ras_0", .descr = "Whether or not to test RAS 0 DDR", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_RUN_DDR_TEST_ID_RAS_0, .offset = offsetof(bcmolt_device_run_ddr_test_data, ras_0), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_run_ddr_test_ras_1 = { .name = "ras_1", .descr = "Whether or not to test RAS 1 DDR", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_RUN_DDR_TEST_ID_RAS_1, .offset = offsetof(bcmolt_device_run_ddr_test_data, ras_1), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr * BCM_DESCR device_run_ddr_test_prop_array[] = { &prop_descr_device_run_ddr_test_cpu, &prop_descr_device_run_ddr_test_ras_0, &prop_descr_device_run_ddr_test_ras_1 };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_device_run_ddr_test_data_fields[] = { { .name = "cpu", .descr = "Whether or not to test the CPU DDR", .offset = offsetof(bcmolt_device_run_ddr_test_data, cpu), .type = &type_descr_bcmos_bool }, { .name = "ras_0", .descr = "Whether or not to test RAS 0 DDR", .offset = offsetof(bcmolt_device_run_ddr_test_data, ras_0), .type = &type_descr_bcmos_bool }, { .name = "ras_1", .descr = "Whether or not to test RAS 1 DDR", .offset = offsetof(bcmolt_device_run_ddr_test_data, ras_1), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_device_run_ddr_test_data = { .name = "bcmolt_device_run_ddr_test_data", .descr = "Run a test on one or more of the DDR components.", .size = sizeof(bcmolt_device_run_ddr_test_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_device_run_ddr_test_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_device_run_ddr_test_data_fields } } };
+
+/* Group: device - ddr_test_complete */
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_ddr_test_complete_ddr_test = { .name = "ddr_test", .descr = "Results of the DDR Test", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_DDR_TEST_COMPLETE_ID_DDR_TEST, .offset = offsetof(bcmolt_device_ddr_test_complete_data, ddr_test), .type = &type_descr_bcmolt_ddr_test_completed };
+static bcmcli_prop_descr * BCM_DESCR device_ddr_test_complete_prop_array[] = { &prop_descr_device_ddr_test_complete_ddr_test };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_device_ddr_test_complete_data_fields[] = { { .name = "ddr_test", .descr = "Results of the DDR Test", .offset = offsetof(bcmolt_device_ddr_test_complete_data, ddr_test), .type = &type_descr_bcmolt_ddr_test_completed } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_device_ddr_test_complete_data = { .name = "bcmolt_device_ddr_test_complete_data", .descr = "The DDR Test has completed", .size = sizeof(bcmolt_device_ddr_test_complete_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_device_ddr_test_complete_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_device_ddr_test_complete_data_fields } } };
+
+/* Group: device - auto_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_auto_cfg_connection_complete = { .name = "connection_complete", .descr = "If true, indications of type \"connection_complete\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_AUTO_CFG_ID_CONNECTION_COMPLETE, .offset = offsetof(bcmolt_device_auto_cfg_data, connection_complete), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_auto_cfg_connection_established = { .name = "connection_established", .descr = "If true, indications of type \"connection_established\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_AUTO_CFG_ID_CONNECTION_ESTABLISHED, .offset = offsetof(bcmolt_device_auto_cfg_data, connection_established), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_auto_cfg_connection_failure = { .name = "connection_failure", .descr = "If true, indications of type \"connection_failure\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_AUTO_CFG_ID_CONNECTION_FAILURE, .offset = offsetof(bcmolt_device_auto_cfg_data, connection_failure), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_auto_cfg_ddr_test_complete = { .name = "ddr_test_complete", .descr = "If true, indications of type \"ddr_test_complete\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_AUTO_CFG_ID_DDR_TEST_COMPLETE, .offset = offsetof(bcmolt_device_auto_cfg_data, ddr_test_complete), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_auto_cfg_device_keep_alive = { .name = "device_keep_alive", .descr = "If true, indications of type \"device_keep_alive\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_AUTO_CFG_ID_DEVICE_KEEP_ALIVE, .offset = offsetof(bcmolt_device_auto_cfg_data, device_keep_alive), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_auto_cfg_device_ready = { .name = "device_ready", .descr = "If true, indications of type \"device_ready\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_AUTO_CFG_ID_DEVICE_READY, .offset = offsetof(bcmolt_device_auto_cfg_data, device_ready), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_auto_cfg_disconnection_complete = { .name = "disconnection_complete", .descr = "If true, indications of type \"disconnection_complete\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_AUTO_CFG_ID_DISCONNECTION_COMPLETE, .offset = offsetof(bcmolt_device_auto_cfg_data, disconnection_complete), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_auto_cfg_image_transfer_complete = { .name = "image_transfer_complete", .descr = "If true, indications of type \"image_transfer_complete\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_AUTO_CFG_ID_IMAGE_TRANSFER_COMPLETE, .offset = offsetof(bcmolt_device_auto_cfg_data, image_transfer_complete), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_auto_cfg_indications_dropped = { .name = "indications_dropped", .descr = "If true, indications of type \"indications_dropped\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_AUTO_CFG_ID_INDICATIONS_DROPPED, .offset = offsetof(bcmolt_device_auto_cfg_data, indications_dropped), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_auto_cfg_sw_error = { .name = "sw_error", .descr = "If true, indications of type \"sw_error\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_AUTO_CFG_ID_SW_ERROR, .offset = offsetof(bcmolt_device_auto_cfg_data, sw_error), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_device_auto_cfg_sw_exception = { .name = "sw_exception", .descr = "If true, indications of type \"sw_exception\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_DEVICE_AUTO_CFG_ID_SW_EXCEPTION, .offset = offsetof(bcmolt_device_auto_cfg_data, sw_exception), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr * BCM_DESCR device_auto_cfg_prop_array[] = { &prop_descr_device_auto_cfg_connection_complete, &prop_descr_device_auto_cfg_connection_established, &prop_descr_device_auto_cfg_connection_failure, &prop_descr_device_auto_cfg_ddr_test_complete, &prop_descr_device_auto_cfg_device_keep_alive, &prop_descr_device_auto_cfg_device_ready, &prop_descr_device_auto_cfg_disconnection_complete, &prop_descr_device_auto_cfg_image_transfer_complete, &prop_descr_device_auto_cfg_indications_dropped, &prop_descr_device_auto_cfg_sw_error, &prop_descr_device_auto_cfg_sw_exception };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_device_auto_cfg_data_fields[] = { { .name = "connection_complete", .descr = "If true, indications of type \"connection_complete\" will be generated.", .offset = offsetof(bcmolt_device_auto_cfg_data, connection_complete), .type = &type_descr_bcmos_bool }, { .name = "connection_established", .descr = "If true, indications of type \"connection_established\" will be generated.", .offset = offsetof(bcmolt_device_auto_cfg_data, connection_established), .type = &type_descr_bcmos_bool }, { .name = "connection_failure", .descr = "If true, indications of type \"connection_failure\" will be generated.", .offset = offsetof(bcmolt_device_auto_cfg_data, connection_failure), .type = &type_descr_bcmos_bool }, { .name = "ddr_test_complete", .descr = "If true, indications of type \"ddr_test_complete\" will be generated.", .offset = offsetof(bcmolt_device_auto_cfg_data, ddr_test_complete), .type = &type_descr_bcmos_bool }, { .name = "device_keep_alive", .descr = "If true, indications of type \"device_keep_alive\" will be generated.", .offset = offsetof(bcmolt_device_auto_cfg_data, device_keep_alive), .type = &type_descr_bcmos_bool }, { .name = "device_ready", .descr = "If true, indications of type \"device_ready\" will be generated.", .offset = offsetof(bcmolt_device_auto_cfg_data, device_ready), .type = &type_descr_bcmos_bool }, { .name = "disconnection_complete", .descr = "If true, indications of type \"disconnection_complete\" will be generated.", .offset = offsetof(bcmolt_device_auto_cfg_data, disconnection_complete), .type = &type_descr_bcmos_bool }, { .name = "image_transfer_complete", .descr = "If true, indications of type \"image_transfer_complete\" will be generated.", .offset = offsetof(bcmolt_device_auto_cfg_data, image_transfer_complete), .type = &type_descr_bcmos_bool }, { .name = "indications_dropped", .descr = "If true, indications of type \"indications_dropped\" will be generated.", .offset = offsetof(bcmolt_device_auto_cfg_data, indications_dropped), .type = &type_descr_bcmos_bool }, { .name = "sw_error", .descr = "If true, indications of type \"sw_error\" will be generated.", .offset = offsetof(bcmolt_device_auto_cfg_data, sw_error), .type = &type_descr_bcmos_bool }, { .name = "sw_exception", .descr = "If true, indications of type \"sw_exception\" will be generated.", .offset = offsetof(bcmolt_device_auto_cfg_data, sw_exception), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_device_auto_cfg_data = { .name = "bcmolt_device_auto_cfg_data", .descr = "Indication Configuration", .size = sizeof(bcmolt_device_auto_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_device_auto_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_device_auto_cfg_data_fields } } };
+
+/* ==== Object: epon_denied_link ==== */
+
+/* Group: epon_denied_link - key */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_denied_link_key_epon_ni = { .name = "epon_ni", .descr = "Uniquely identifies the EPON NI containing the link.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_DENIED_LINK_KEY_ID_EPON_NI, .offset = offsetof(bcmolt_epon_denied_link_key, epon_ni), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_denied_link_key_mac_address = { .name = "mac_address", .descr = "The MAC address associated with the EPON link.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_DENIED_LINK_KEY_ID_MAC_ADDRESS, .offset = offsetof(bcmolt_epon_denied_link_key, mac_address), .type = &type_descr_bcmos_mac_address };
+static bcmcli_prop_descr * BCM_DESCR epon_denied_link_key_prop_array[] = { &prop_descr_epon_denied_link_key_epon_ni, &prop_descr_epon_denied_link_key_mac_address };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_denied_link_key_fields[] = { { .name = "epon_ni", .descr = "Uniquely identifies the EPON NI containing the link.", .offset = offsetof(bcmolt_epon_denied_link_key, epon_ni), .type = &type_descr_uint16_t }, { .name = "mac_address", .descr = "The MAC address associated with the EPON link.", .offset = offsetof(bcmolt_epon_denied_link_key, mac_address), .type = &type_descr_bcmos_mac_address } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_denied_link_key = { .name = "bcmolt_epon_denied_link_key", .descr = "key", .size = sizeof(bcmolt_epon_denied_link_key), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_denied_link_key_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_denied_link_key_fields } } };
+
+/* Group: epon_denied_link - cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_denied_link_cfg_alarm_state = { .name = "alarm_state", .descr = "The state of the alarms on this link.", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_EPON_DENIED_LINK_CFG_ID_ALARM_STATE, .offset = offsetof(bcmolt_epon_denied_link_cfg_data, alarm_state), .type = &type_descr_bcmolt_epon_denied_link_alarm_state };
+static bcmcli_prop_descr * BCM_DESCR epon_denied_link_cfg_prop_array[] = { &prop_descr_epon_denied_link_cfg_alarm_state };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_denied_link_cfg_data_fields[] = { { .name = "alarm_state", .descr = "The state of the alarms on this link.", .offset = offsetof(bcmolt_epon_denied_link_cfg_data, alarm_state), .type = &type_descr_bcmolt_epon_denied_link_alarm_state } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_denied_link_cfg_data = { .name = "bcmolt_epon_denied_link_cfg_data", .descr = "cfg", .size = sizeof(bcmolt_epon_denied_link_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_denied_link_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_denied_link_cfg_data_fields } } };
+
+/* Group: epon_denied_link - unknown_link_violation */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_denied_link_unknown_link_violation_alarm_status = { .name = "alarm_status", .descr = "Alarm Status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_DENIED_LINK_UNKNOWN_LINK_VIOLATION_ID_ALARM_STATUS, .offset = offsetof(bcmolt_epon_denied_link_unknown_link_violation_data, alarm_status), .type = &type_descr_bcmolt_unknown_link_status };
+static bcmcli_prop_descr * BCM_DESCR epon_denied_link_unknown_link_violation_prop_array[] = { &prop_descr_epon_denied_link_unknown_link_violation_alarm_status };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_denied_link_unknown_link_violation_data_fields[] = { { .name = "alarm_status", .descr = "Alarm Status", .offset = offsetof(bcmolt_epon_denied_link_unknown_link_violation_data, alarm_status), .type = &type_descr_bcmolt_unknown_link_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_denied_link_unknown_link_violation_data = { .name = "bcmolt_epon_denied_link_unknown_link_violation_data", .descr = "A link tried to register while the PON was set to \"notify unknown\" registration behavior and this link was not pre-provisioned.", .size = sizeof(bcmolt_epon_denied_link_unknown_link_violation_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_denied_link_unknown_link_violation_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_denied_link_unknown_link_violation_data_fields } } };
+
+/* Group: epon_denied_link - overhead_profile_violation */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_denied_link_overhead_profile_violation_alarm_status = { .name = "alarm_status", .descr = "Alarm status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_DENIED_LINK_OVERHEAD_PROFILE_VIOLATION_ID_ALARM_STATUS, .offset = offsetof(bcmolt_epon_denied_link_overhead_profile_violation_data, alarm_status), .type = &type_descr_bcmolt_status };
+static bcmcli_prop_descr * BCM_DESCR epon_denied_link_overhead_profile_violation_prop_array[] = { &prop_descr_epon_denied_link_overhead_profile_violation_alarm_status };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_denied_link_overhead_profile_violation_data_fields[] = { { .name = "alarm_status", .descr = "Alarm status", .offset = offsetof(bcmolt_epon_denied_link_overhead_profile_violation_data, alarm_status), .type = &type_descr_bcmolt_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_denied_link_overhead_profile_violation_data = { .name = "bcmolt_epon_denied_link_overhead_profile_violation_data", .descr = "This is when link tries to register and there are already too many existing laser on/off combinations.", .size = sizeof(bcmolt_epon_denied_link_overhead_profile_violation_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_denied_link_overhead_profile_violation_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_denied_link_overhead_profile_violation_data_fields } } };
+
+/* Group: epon_denied_link - laser_on_off_violation */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_denied_link_laser_on_off_violation_alarm_status = { .name = "alarm_status", .descr = "Alarm Status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_DENIED_LINK_LASER_ON_OFF_VIOLATION_ID_ALARM_STATUS, .offset = offsetof(bcmolt_epon_denied_link_laser_on_off_violation_data, alarm_status), .type = &type_descr_bcmolt_laser_on_off_status };
+static bcmcli_prop_descr * BCM_DESCR epon_denied_link_laser_on_off_violation_prop_array[] = { &prop_descr_epon_denied_link_laser_on_off_violation_alarm_status };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_denied_link_laser_on_off_violation_data_fields[] = { { .name = "alarm_status", .descr = "Alarm Status", .offset = offsetof(bcmolt_epon_denied_link_laser_on_off_violation_data, alarm_status), .type = &type_descr_bcmolt_laser_on_off_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_denied_link_laser_on_off_violation_data = { .name = "bcmolt_epon_denied_link_laser_on_off_violation_data", .descr = "This is when a link tries to reigster with an impossible laser on or off time.", .size = sizeof(bcmolt_epon_denied_link_laser_on_off_violation_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_denied_link_laser_on_off_violation_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_denied_link_laser_on_off_violation_data_fields } } };
+
+/* Group: epon_denied_link - max_link_violation */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_denied_link_max_link_violation_alarm_status = { .name = "alarm_status", .descr = "Alarm Status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_DENIED_LINK_MAX_LINK_VIOLATION_ID_ALARM_STATUS, .offset = offsetof(bcmolt_epon_denied_link_max_link_violation_data, alarm_status), .type = &type_descr_bcmolt_status };
+static bcmcli_prop_descr * BCM_DESCR epon_denied_link_max_link_violation_prop_array[] = { &prop_descr_epon_denied_link_max_link_violation_alarm_status };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_denied_link_max_link_violation_data_fields[] = { { .name = "alarm_status", .descr = "Alarm Status", .offset = offsetof(bcmolt_epon_denied_link_max_link_violation_data, alarm_status), .type = &type_descr_bcmolt_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_denied_link_max_link_violation_data = { .name = "bcmolt_epon_denied_link_max_link_violation_data", .descr = "A link tried to register and it would have put us over the provisioned max links for the corresponding EPON NI.", .size = sizeof(bcmolt_epon_denied_link_max_link_violation_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_denied_link_max_link_violation_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_denied_link_max_link_violation_data_fields } } };
+
+/* Group: epon_denied_link - llid_pool_empty_violation */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_denied_link_llid_pool_empty_violation_alarm_status = { .name = "alarm_status", .descr = "Alarm Status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_DENIED_LINK_LLID_POOL_EMPTY_VIOLATION_ID_ALARM_STATUS, .offset = offsetof(bcmolt_epon_denied_link_llid_pool_empty_violation_data, alarm_status), .type = &type_descr_bcmolt_status };
+static bcmcli_prop_descr * BCM_DESCR epon_denied_link_llid_pool_empty_violation_prop_array[] = { &prop_descr_epon_denied_link_llid_pool_empty_violation_alarm_status };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_denied_link_llid_pool_empty_violation_data_fields[] = { { .name = "alarm_status", .descr = "Alarm Status", .offset = offsetof(bcmolt_epon_denied_link_llid_pool_empty_violation_data, alarm_status), .type = &type_descr_bcmolt_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_denied_link_llid_pool_empty_violation_data = { .name = "bcmolt_epon_denied_link_llid_pool_empty_violation_data", .descr = "A link tried to register and it there are no LLIDs available. If this occurs, it is possible there is an issue with your 'max links' and/or 'Base LLID' fields on your RP.", .size = sizeof(bcmolt_epon_denied_link_llid_pool_empty_violation_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_denied_link_llid_pool_empty_violation_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_denied_link_llid_pool_empty_violation_data_fields } } };
+
+/* Group: epon_denied_link - system_resource_violation */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_denied_link_system_resource_violation_alarm_status = { .name = "alarm_status", .descr = "Alarm Status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_DENIED_LINK_SYSTEM_RESOURCE_VIOLATION_ID_ALARM_STATUS, .offset = offsetof(bcmolt_epon_denied_link_system_resource_violation_data, alarm_status), .type = &type_descr_bcmolt_status };
+static bcmcli_prop_descr * BCM_DESCR epon_denied_link_system_resource_violation_prop_array[] = { &prop_descr_epon_denied_link_system_resource_violation_alarm_status };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_denied_link_system_resource_violation_data_fields[] = { { .name = "alarm_status", .descr = "Alarm Status", .offset = offsetof(bcmolt_epon_denied_link_system_resource_violation_data, alarm_status), .type = &type_descr_bcmolt_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_denied_link_system_resource_violation_data = { .name = "bcmolt_epon_denied_link_system_resource_violation_data", .descr = "A link tried to register and we were unable to allocate system resources for it.", .size = sizeof(bcmolt_epon_denied_link_system_resource_violation_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_denied_link_system_resource_violation_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_denied_link_system_resource_violation_data_fields } } };
+
+/* Group: epon_denied_link - range_violation */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_denied_link_range_violation_alarm_status = { .name = "alarm_status", .descr = "Alarm Status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_DENIED_LINK_RANGE_VIOLATION_ID_ALARM_STATUS, .offset = offsetof(bcmolt_epon_denied_link_range_violation_data, alarm_status), .type = &type_descr_bcmolt_range_status };
+static bcmcli_prop_descr * BCM_DESCR epon_denied_link_range_violation_prop_array[] = { &prop_descr_epon_denied_link_range_violation_alarm_status };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_denied_link_range_violation_data_fields[] = { { .name = "alarm_status", .descr = "Alarm Status", .offset = offsetof(bcmolt_epon_denied_link_range_violation_data, alarm_status), .type = &type_descr_bcmolt_range_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_denied_link_range_violation_data = { .name = "bcmolt_epon_denied_link_range_violation_data", .descr = "A link tried to register with a range value that was outside of the min/max fiber length.", .size = sizeof(bcmolt_epon_denied_link_range_violation_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_denied_link_range_violation_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_denied_link_range_violation_data_fields } } };
+
+/* Group: epon_denied_link - tdm_channels_exhausted */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_denied_link_tdm_channels_exhausted_alarm_status = { .name = "alarm_status", .descr = "Alarm Status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_DENIED_LINK_TDM_CHANNELS_EXHAUSTED_ID_ALARM_STATUS, .offset = offsetof(bcmolt_epon_denied_link_tdm_channels_exhausted_data, alarm_status), .type = &type_descr_bcmolt_status };
+static bcmcli_prop_descr * BCM_DESCR epon_denied_link_tdm_channels_exhausted_prop_array[] = { &prop_descr_epon_denied_link_tdm_channels_exhausted_alarm_status };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_denied_link_tdm_channels_exhausted_data_fields[] = { { .name = "alarm_status", .descr = "Alarm Status", .offset = offsetof(bcmolt_epon_denied_link_tdm_channels_exhausted_data, alarm_status), .type = &type_descr_bcmolt_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_denied_link_tdm_channels_exhausted_data = { .name = "bcmolt_epon_denied_link_tdm_channels_exhausted_data", .descr = "TDM Channels Exhausted", .size = sizeof(bcmolt_epon_denied_link_tdm_channels_exhausted_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_denied_link_tdm_channels_exhausted_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_denied_link_tdm_channels_exhausted_data_fields } } };
+
+/* Group: epon_denied_link - rogue_violation */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_denied_link_rogue_violation_alarm_status = { .name = "alarm_status", .descr = "Alarm Status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_DENIED_LINK_ROGUE_VIOLATION_ID_ALARM_STATUS, .offset = offsetof(bcmolt_epon_denied_link_rogue_violation_data, alarm_status), .type = &type_descr_bcmolt_rogue_status };
+static bcmcli_prop_descr * BCM_DESCR epon_denied_link_rogue_violation_prop_array[] = { &prop_descr_epon_denied_link_rogue_violation_alarm_status };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_denied_link_rogue_violation_data_fields[] = { { .name = "alarm_status", .descr = "Alarm Status", .offset = offsetof(bcmolt_epon_denied_link_rogue_violation_data, alarm_status), .type = &type_descr_bcmolt_rogue_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_denied_link_rogue_violation_data = { .name = "bcmolt_epon_denied_link_rogue_violation_data", .descr = "A Rogue ONU was detected on this link/LLID. ", .size = sizeof(bcmolt_epon_denied_link_rogue_violation_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_denied_link_rogue_violation_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_denied_link_rogue_violation_data_fields } } };
+
+/* Group: epon_denied_link - upstream_bandwidth_violation */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_denied_link_upstream_bandwidth_violation_alarm_status = { .name = "alarm_status", .descr = "Alarm Status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_DENIED_LINK_UPSTREAM_BANDWIDTH_VIOLATION_ID_ALARM_STATUS, .offset = offsetof(bcmolt_epon_denied_link_upstream_bandwidth_violation_data, alarm_status), .type = &type_descr_bcmolt_status };
+static bcmcli_prop_descr * BCM_DESCR epon_denied_link_upstream_bandwidth_violation_prop_array[] = { &prop_descr_epon_denied_link_upstream_bandwidth_violation_alarm_status };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_denied_link_upstream_bandwidth_violation_data_fields[] = { { .name = "alarm_status", .descr = "Alarm Status", .offset = offsetof(bcmolt_epon_denied_link_upstream_bandwidth_violation_data, alarm_status), .type = &type_descr_bcmolt_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_denied_link_upstream_bandwidth_violation_data = { .name = "bcmolt_epon_denied_link_upstream_bandwidth_violation_data", .descr = "This link failed to register because there was insufficient upstream bandwidth available to provide the default UBD.", .size = sizeof(bcmolt_epon_denied_link_upstream_bandwidth_violation_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_denied_link_upstream_bandwidth_violation_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_denied_link_upstream_bandwidth_violation_data_fields } } };
+
+/* Group: epon_denied_link - auto_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_denied_link_auto_cfg_laser_on_off_violation = { .name = "laser_on_off_violation", .descr = "If true, indications of type \"laser_on_off_violation\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_LASER_ON_OFF_VIOLATION, .offset = offsetof(bcmolt_epon_denied_link_auto_cfg_data, laser_on_off_violation), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_denied_link_auto_cfg_llid_pool_empty_violation = { .name = "llid_pool_empty_violation", .descr = "If true, indications of type \"llid_pool_empty_violation\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_LLID_POOL_EMPTY_VIOLATION, .offset = offsetof(bcmolt_epon_denied_link_auto_cfg_data, llid_pool_empty_violation), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_denied_link_auto_cfg_max_link_violation = { .name = "max_link_violation", .descr = "If true, indications of type \"max_link_violation\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_MAX_LINK_VIOLATION, .offset = offsetof(bcmolt_epon_denied_link_auto_cfg_data, max_link_violation), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_denied_link_auto_cfg_overhead_profile_violation = { .name = "overhead_profile_violation", .descr = "If true, indications of type \"overhead_profile_violation\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_OVERHEAD_PROFILE_VIOLATION, .offset = offsetof(bcmolt_epon_denied_link_auto_cfg_data, overhead_profile_violation), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_denied_link_auto_cfg_range_violation = { .name = "range_violation", .descr = "If true, indications of type \"range_violation\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_RANGE_VIOLATION, .offset = offsetof(bcmolt_epon_denied_link_auto_cfg_data, range_violation), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_denied_link_auto_cfg_rogue_violation = { .name = "rogue_violation", .descr = "If true, indications of type \"rogue_violation\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_ROGUE_VIOLATION, .offset = offsetof(bcmolt_epon_denied_link_auto_cfg_data, rogue_violation), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_denied_link_auto_cfg_system_resource_violation = { .name = "system_resource_violation", .descr = "If true, indications of type \"system_resource_violation\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_SYSTEM_RESOURCE_VIOLATION, .offset = offsetof(bcmolt_epon_denied_link_auto_cfg_data, system_resource_violation), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_denied_link_auto_cfg_tdm_channels_exhausted = { .name = "tdm_channels_exhausted", .descr = "If true, indications of type \"tdm_channels_exhausted\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_TDM_CHANNELS_EXHAUSTED, .offset = offsetof(bcmolt_epon_denied_link_auto_cfg_data, tdm_channels_exhausted), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_denied_link_auto_cfg_unknown_link_violation = { .name = "unknown_link_violation", .descr = "If true, indications of type \"unknown_link_violation\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_UNKNOWN_LINK_VIOLATION, .offset = offsetof(bcmolt_epon_denied_link_auto_cfg_data, unknown_link_violation), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_denied_link_auto_cfg_upstream_bandwidth_violation = { .name = "upstream_bandwidth_violation", .descr = "If true, indications of type \"upstream_bandwidth_violation\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_DENIED_LINK_AUTO_CFG_ID_UPSTREAM_BANDWIDTH_VIOLATION, .offset = offsetof(bcmolt_epon_denied_link_auto_cfg_data, upstream_bandwidth_violation), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr * BCM_DESCR epon_denied_link_auto_cfg_prop_array[] = { &prop_descr_epon_denied_link_auto_cfg_laser_on_off_violation, &prop_descr_epon_denied_link_auto_cfg_llid_pool_empty_violation, &prop_descr_epon_denied_link_auto_cfg_max_link_violation, &prop_descr_epon_denied_link_auto_cfg_overhead_profile_violation, &prop_descr_epon_denied_link_auto_cfg_range_violation, &prop_descr_epon_denied_link_auto_cfg_rogue_violation, &prop_descr_epon_denied_link_auto_cfg_system_resource_violation, &prop_descr_epon_denied_link_auto_cfg_tdm_channels_exhausted, &prop_descr_epon_denied_link_auto_cfg_unknown_link_violation, &prop_descr_epon_denied_link_auto_cfg_upstream_bandwidth_violation };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_denied_link_auto_cfg_data_fields[] = { { .name = "laser_on_off_violation", .descr = "If true, indications of type \"laser_on_off_violation\" will be generated.", .offset = offsetof(bcmolt_epon_denied_link_auto_cfg_data, laser_on_off_violation), .type = &type_descr_bcmos_bool }, { .name = "llid_pool_empty_violation", .descr = "If true, indications of type \"llid_pool_empty_violation\" will be generated.", .offset = offsetof(bcmolt_epon_denied_link_auto_cfg_data, llid_pool_empty_violation), .type = &type_descr_bcmos_bool }, { .name = "max_link_violation", .descr = "If true, indications of type \"max_link_violation\" will be generated.", .offset = offsetof(bcmolt_epon_denied_link_auto_cfg_data, max_link_violation), .type = &type_descr_bcmos_bool }, { .name = "overhead_profile_violation", .descr = "If true, indications of type \"overhead_profile_violation\" will be generated.", .offset = offsetof(bcmolt_epon_denied_link_auto_cfg_data, overhead_profile_violation), .type = &type_descr_bcmos_bool }, { .name = "range_violation", .descr = "If true, indications of type \"range_violation\" will be generated.", .offset = offsetof(bcmolt_epon_denied_link_auto_cfg_data, range_violation), .type = &type_descr_bcmos_bool }, { .name = "rogue_violation", .descr = "If true, indications of type \"rogue_violation\" will be generated.", .offset = offsetof(bcmolt_epon_denied_link_auto_cfg_data, rogue_violation), .type = &type_descr_bcmos_bool }, { .name = "system_resource_violation", .descr = "If true, indications of type \"system_resource_violation\" will be generated.", .offset = offsetof(bcmolt_epon_denied_link_auto_cfg_data, system_resource_violation), .type = &type_descr_bcmos_bool }, { .name = "tdm_channels_exhausted", .descr = "If true, indications of type \"tdm_channels_exhausted\" will be generated.", .offset = offsetof(bcmolt_epon_denied_link_auto_cfg_data, tdm_channels_exhausted), .type = &type_descr_bcmos_bool }, { .name = "unknown_link_violation", .descr = "If true, indications of type \"unknown_link_violation\" will be generated.", .offset = offsetof(bcmolt_epon_denied_link_auto_cfg_data, unknown_link_violation), .type = &type_descr_bcmos_bool }, { .name = "upstream_bandwidth_violation", .descr = "If true, indications of type \"upstream_bandwidth_violation\" will be generated.", .offset = offsetof(bcmolt_epon_denied_link_auto_cfg_data, upstream_bandwidth_violation), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_denied_link_auto_cfg_data = { .name = "bcmolt_epon_denied_link_auto_cfg_data", .descr = "Indication Configuration", .size = sizeof(bcmolt_epon_denied_link_auto_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_denied_link_auto_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_denied_link_auto_cfg_data_fields } } };
+
+/* ==== Object: epon_link ==== */
+
+/* Group: epon_link - key */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_key_epon_ni = { .name = "epon_ni", .descr = "Uniquely identifies the EPON NI containing the link.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_KEY_ID_EPON_NI, .offset = offsetof(bcmolt_epon_link_key, epon_ni), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_key_mac_address = { .name = "mac_address", .descr = "The MAC address associated with the EPON link.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_KEY_ID_MAC_ADDRESS, .offset = offsetof(bcmolt_epon_link_key, mac_address), .type = &type_descr_bcmos_mac_address };
+static bcmcli_prop_descr * BCM_DESCR epon_link_key_prop_array[] = { &prop_descr_epon_link_key_epon_ni, &prop_descr_epon_link_key_mac_address };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_link_key_fields[] = { { .name = "epon_ni", .descr = "Uniquely identifies the EPON NI containing the link.", .offset = offsetof(bcmolt_epon_link_key, epon_ni), .type = &type_descr_uint16_t }, { .name = "mac_address", .descr = "The MAC address associated with the EPON link.", .offset = offsetof(bcmolt_epon_link_key, mac_address), .type = &type_descr_bcmos_mac_address } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_key = { .name = "bcmolt_epon_link_key", .descr = "key", .size = sizeof(bcmolt_epon_link_key), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_link_key_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_link_key_fields } } };
+
+/* Group: epon_link - cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_cfg_link_rate = { .name = "link_rate", .descr = "This link's downstream and upstream rate.", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_EPON_LINK_CFG_ID_LINK_RATE, .offset = offsetof(bcmolt_epon_link_cfg_data, link_rate), .type = &type_descr_bcmolt_epon_link_rate };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_cfg_state_flags = { .name = "state_flags", .descr = "EPON link state flags reflect the current status of the link.   Registered state flag is controled by the static registration operation for links on a protected-standby PON.", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_EPON_LINK_CFG_ID_STATE_FLAGS, .offset = offsetof(bcmolt_epon_link_cfg_data, state_flags), .type = &type_descr_bcmolt_epon_link_state_flags };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_cfg_llid = { .name = "llid", .descr = "LLID associated with this link.", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_EPON_LINK_CFG_ID_LLID, .offset = offsetof(bcmolt_epon_link_cfg_data, llid), .type = &type_descr_uint16_t_hex };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_cfg_laser_on_time_tq = { .name = "laser_on_time_tq", .descr = "Laser-on time in time quanta.", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_EPON_LINK_CFG_ID_LASER_ON_TIME_TQ, .offset = offsetof(bcmolt_epon_link_cfg_data, laser_on_time_tq), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_cfg_laser_off_time_tq = { .name = "laser_off_time_tq", .descr = "Laser-off time in time quanta.", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_EPON_LINK_CFG_ID_LASER_OFF_TIME_TQ, .offset = offsetof(bcmolt_epon_link_cfg_data, laser_off_time_tq), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_cfg_range_value_tq = { .name = "range_value_tq", .descr = "Range value used for this link - in time quanta.", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_EPON_LINK_CFG_ID_RANGE_VALUE_TQ, .offset = offsetof(bcmolt_epon_link_cfg_data, range_value_tq), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_cfg_distance = { .name = "distance", .descr = "Distance to the ONU (Differs from range value in that this ignores internal delays)", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_EPON_LINK_CFG_ID_DISTANCE, .offset = offsetof(bcmolt_epon_link_cfg_data, distance), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_cfg_alarm_state = { .name = "alarm_state", .descr = "The state of the alarms on this link.", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_EPON_LINK_CFG_ID_ALARM_STATE, .offset = offsetof(bcmolt_epon_link_cfg_data, alarm_state), .type = &type_descr_bcmolt_epon_link_alarm_state };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_cfg_tunnel_id = { .name = "tunnel_id", .descr = "Tunnel ID", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_CFG_ID_TUNNEL_ID, .offset = offsetof(bcmolt_epon_link_cfg_data, tunnel_id), .type = &type_descr_uint32_t_hex };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_cfg_onu_id = { .name = "onu_id", .descr = "ONU associated with this EPON link.  A value of 0xFF indicates that the link has not been associated with an ONU.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_CFG_ID_ONU_ID, .offset = offsetof(bcmolt_epon_link_cfg_data, onu_id), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_cfg_min_laser_overhead = { .name = "min_laser_overhead", .descr = "Min Laser Overhead", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_CFG_ID_MIN_LASER_OVERHEAD, .offset = offsetof(bcmolt_epon_link_cfg_data, min_laser_overhead), .type = &type_descr_bcmolt_epon_laser_overhead_parameters };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_cfg_key_exchange_config = { .name = "key_exchange_config", .descr = "Encryption key exchange configuration for this link.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_CFG_ID_KEY_EXCHANGE_CONFIG, .offset = offsetof(bcmolt_epon_link_cfg_data, key_exchange_config), .type = &type_descr_bcmolt_epon_key_exchange_config };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_cfg_epon_encryption = { .name = "epon_encryption", .descr = "EPON Encryption ", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_CFG_ID_EPON_ENCRYPTION, .offset = offsetof(bcmolt_epon_link_cfg_data, epon_encryption), .type = &type_descr_bcmolt_epon_encryption_config };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_cfg_fec_enable = { .name = "fec_enable", .descr = "FEC enable state for this link.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_CFG_ID_FEC_ENABLE, .offset = offsetof(bcmolt_epon_link_cfg_data, fec_enable), .type = &type_descr_bcmolt_epon_link_fec_en };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_cfg_oam_heartbeat_config = { .name = "oam_heartbeat_config", .descr = "OAM heartbeat configuration", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_CFG_ID_OAM_HEARTBEAT_CONFIG, .offset = offsetof(bcmolt_epon_link_cfg_data, oam_heartbeat_config), .type = &type_descr_bcmolt_oam_heartbeat_config };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_cfg_upstream_bandwidth = { .name = "upstream_bandwidth", .descr = "Upstream Bandwidth", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_CFG_ID_UPSTREAM_BANDWIDTH, .offset = offsetof(bcmolt_epon_link_cfg_data, upstream_bandwidth), .type = &type_descr_bcmolt_upstream_bandwidth_distribution };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_cfg_ubd_info = { .name = "ubd_info", .descr = "Returns the actual values from the UBD. Useful if you want to see what value the firmware chose for a field set to 'automatic'.", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_EPON_LINK_CFG_ID_UBD_INFO, .offset = offsetof(bcmolt_epon_link_cfg_data, ubd_info), .type = &type_descr_bcmolt_ubd_info };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_cfg_clock_transport_enable = { .name = "clock_transport_enable", .descr = "Whether or not to enable clock transport on this link.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_CFG_ID_CLOCK_TRANSPORT_ENABLE, .offset = offsetof(bcmolt_epon_link_cfg_data, clock_transport_enable), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_cfg_pending_grants = { .name = "pending_grants", .descr = "The number of pending grants.", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_EPON_LINK_CFG_ID_PENDING_GRANTS, .offset = offsetof(bcmolt_epon_link_cfg_data, pending_grants), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_cfg_link_type = { .name = "link_type", .descr = "Link Type", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_EPON_LINK_CFG_ID_LINK_TYPE, .offset = offsetof(bcmolt_epon_link_cfg_data, link_type), .type = &type_descr_bcmolt_epon_link_type };
+static bcmcli_prop_descr * BCM_DESCR epon_link_cfg_prop_array[] = { &prop_descr_epon_link_cfg_link_rate, &prop_descr_epon_link_cfg_state_flags, &prop_descr_epon_link_cfg_llid, &prop_descr_epon_link_cfg_laser_on_time_tq, &prop_descr_epon_link_cfg_laser_off_time_tq, &prop_descr_epon_link_cfg_range_value_tq, &prop_descr_epon_link_cfg_distance, &prop_descr_epon_link_cfg_alarm_state, &prop_descr_epon_link_cfg_tunnel_id, &prop_descr_epon_link_cfg_onu_id, &prop_descr_epon_link_cfg_min_laser_overhead, &prop_descr_epon_link_cfg_key_exchange_config, &prop_descr_epon_link_cfg_epon_encryption, &prop_descr_epon_link_cfg_fec_enable, &prop_descr_epon_link_cfg_oam_heartbeat_config, &prop_descr_epon_link_cfg_upstream_bandwidth, &prop_descr_epon_link_cfg_ubd_info, &prop_descr_epon_link_cfg_clock_transport_enable, &prop_descr_epon_link_cfg_pending_grants, &prop_descr_epon_link_cfg_link_type };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_link_cfg_data_fields[] = { { .name = "link_rate", .descr = "This link's downstream and upstream rate.", .offset = offsetof(bcmolt_epon_link_cfg_data, link_rate), .type = &type_descr_bcmolt_epon_link_rate }, { .name = "state_flags", .descr = "EPON link state flags reflect the current status of the link.   Registered state flag is controled by the static registration operation for links on a protected-standby PON.", .offset = offsetof(bcmolt_epon_link_cfg_data, state_flags), .type = &type_descr_bcmolt_epon_link_state_flags }, { .name = "llid", .descr = "LLID associated with this link.", .offset = offsetof(bcmolt_epon_link_cfg_data, llid), .type = &type_descr_uint16_t_hex }, { .name = "laser_on_time_tq", .descr = "Laser-on time in time quanta.", .offset = offsetof(bcmolt_epon_link_cfg_data, laser_on_time_tq), .type = &type_descr_uint32_t }, { .name = "laser_off_time_tq", .descr = "Laser-off time in time quanta.", .offset = offsetof(bcmolt_epon_link_cfg_data, laser_off_time_tq), .type = &type_descr_uint32_t }, { .name = "range_value_tq", .descr = "Range value used for this link - in time quanta.", .offset = offsetof(bcmolt_epon_link_cfg_data, range_value_tq), .type = &type_descr_uint32_t }, { .name = "distance", .descr = "Distance to the ONU (Differs from range value in that this ignores internal delays)", .offset = offsetof(bcmolt_epon_link_cfg_data, distance), .type = &type_descr_uint32_t }, { .name = "alarm_state", .descr = "The state of the alarms on this link.", .offset = offsetof(bcmolt_epon_link_cfg_data, alarm_state), .type = &type_descr_bcmolt_epon_link_alarm_state }, { .name = "tunnel_id", .descr = "Tunnel ID", .offset = offsetof(bcmolt_epon_link_cfg_data, tunnel_id), .type = &type_descr_uint32_t_hex }, { .name = "onu_id", .descr = "ONU associated with this EPON link.  A value of 0xFF indicates that the link has not been associated with an ONU.", .offset = offsetof(bcmolt_epon_link_cfg_data, onu_id), .type = &type_descr_uint8_t }, { .name = "min_laser_overhead", .descr = "Min Laser Overhead", .offset = offsetof(bcmolt_epon_link_cfg_data, min_laser_overhead), .type = &type_descr_bcmolt_epon_laser_overhead_parameters }, { .name = "key_exchange_config", .descr = "Encryption key exchange configuration for this link.", .offset = offsetof(bcmolt_epon_link_cfg_data, key_exchange_config), .type = &type_descr_bcmolt_epon_key_exchange_config }, { .name = "epon_encryption", .descr = "EPON Encryption ", .offset = offsetof(bcmolt_epon_link_cfg_data, epon_encryption), .type = &type_descr_bcmolt_epon_encryption_config }, { .name = "fec_enable", .descr = "FEC enable state for this link.", .offset = offsetof(bcmolt_epon_link_cfg_data, fec_enable), .type = &type_descr_bcmolt_epon_link_fec_en }, { .name = "oam_heartbeat_config", .descr = "OAM heartbeat configuration", .offset = offsetof(bcmolt_epon_link_cfg_data, oam_heartbeat_config), .type = &type_descr_bcmolt_oam_heartbeat_config }, { .name = "upstream_bandwidth", .descr = "Upstream Bandwidth", .offset = offsetof(bcmolt_epon_link_cfg_data, upstream_bandwidth), .type = &type_descr_bcmolt_upstream_bandwidth_distribution }, { .name = "ubd_info", .descr = "Returns the actual values from the UBD. Useful if you want to see what value the firmware chose for a field set to 'automatic'.", .offset = offsetof(bcmolt_epon_link_cfg_data, ubd_info), .type = &type_descr_bcmolt_ubd_info }, { .name = "clock_transport_enable", .descr = "Whether or not to enable clock transport on this link.", .offset = offsetof(bcmolt_epon_link_cfg_data, clock_transport_enable), .type = &type_descr_bcmos_bool }, { .name = "pending_grants", .descr = "The number of pending grants.", .offset = offsetof(bcmolt_epon_link_cfg_data, pending_grants), .type = &type_descr_uint8_t }, { .name = "link_type", .descr = "Link Type", .offset = offsetof(bcmolt_epon_link_cfg_data, link_type), .type = &type_descr_bcmolt_epon_link_type } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_cfg_data = { .name = "bcmolt_epon_link_cfg_data", .descr = "cfg", .size = sizeof(bcmolt_epon_link_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_link_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_link_cfg_data_fields } } };
+
+/* Group: epon_link - stat */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_rx_data_bytes = { .name = "rx_data_bytes", .descr = "The number of data bytes received on this EPON link.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_ID_RX_DATA_BYTES, .offset = offsetof(bcmolt_epon_link_stat_data, rx_data_bytes), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_rx_data_frames = { .name = "rx_data_frames", .descr = "The number of data frames received on this EPON link.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_ID_RX_DATA_FRAMES, .offset = offsetof(bcmolt_epon_link_stat_data, rx_data_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_rx_frames_64 = { .name = "rx_frames_64", .descr = "The number of 64 byte frames received on this EPON Link", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_64, .offset = offsetof(bcmolt_epon_link_stat_data, rx_frames_64), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_rx_frames_65_127 = { .name = "rx_frames_65_127", .descr = "The number of 65 to 127 byte frames received on this EPON Link", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_65_127, .offset = offsetof(bcmolt_epon_link_stat_data, rx_frames_65_127), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_rx_frames_128_255 = { .name = "rx_frames_128_255", .descr = "The number of 128 to 255 byte frames received on this EPON Link", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_128_255, .offset = offsetof(bcmolt_epon_link_stat_data, rx_frames_128_255), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_rx_frames_256_511 = { .name = "rx_frames_256_511", .descr = "The number of 256 to 511 byte frames received on this EPON Link", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_256_511, .offset = offsetof(bcmolt_epon_link_stat_data, rx_frames_256_511), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_rx_frames_512_1023 = { .name = "rx_frames_512_1023", .descr = "The number of 512 to 1023 byte frames received on this EPON Link", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_512_1023, .offset = offsetof(bcmolt_epon_link_stat_data, rx_frames_512_1023), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_rx_frames_1024_1518 = { .name = "rx_frames_1024_1518", .descr = "The number of 1024 to 1518 byte frames received on this EPON Link", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_1024_1518, .offset = offsetof(bcmolt_epon_link_stat_data, rx_frames_1024_1518), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_rx_frames_1519_2047 = { .name = "rx_frames_1519_2047", .descr = "The number of 1519 to 2047 byte frames received on this EPON Link", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_1519_2047, .offset = offsetof(bcmolt_epon_link_stat_data, rx_frames_1519_2047), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_rx_frames_2048_4095 = { .name = "rx_frames_2048_4095", .descr = "The number of 2048 to 4095 byte frames received on this EPON Link", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_2048_4095, .offset = offsetof(bcmolt_epon_link_stat_data, rx_frames_2048_4095), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_rx_frames_4096_9216 = { .name = "rx_frames_4096_9216", .descr = "The number of 4096 to 9216 byte frames received on this EPON Link", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_4096_9216, .offset = offsetof(bcmolt_epon_link_stat_data, rx_frames_4096_9216), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_rx_frames_9217_16383 = { .name = "rx_frames_9217_16383", .descr = "The number of 9217 to 16383 byte frames received on this EPON Link", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_ID_RX_FRAMES_9217_16383, .offset = offsetof(bcmolt_epon_link_stat_data, rx_frames_9217_16383), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_rx_oam_bytes = { .name = "rx_oam_bytes", .descr = "The number of OAM bytes received on this EPON link.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_ID_RX_OAM_BYTES, .offset = offsetof(bcmolt_epon_link_stat_data, rx_oam_bytes), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_rx_oam_frames = { .name = "rx_oam_frames", .descr = "The number of OAM frames received on this EPON link.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_ID_RX_OAM_FRAMES, .offset = offsetof(bcmolt_epon_link_stat_data, rx_oam_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_rx_mpcp_frames = { .name = "rx_mpcp_frames", .descr = "The number of MPCP frames received on this EPON link.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_ID_RX_MPCP_FRAMES, .offset = offsetof(bcmolt_epon_link_stat_data, rx_mpcp_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_rx_broadcast_frames = { .name = "rx_broadcast_frames", .descr = "The number of broadcast frames received on this EPON link.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_ID_RX_BROADCAST_FRAMES, .offset = offsetof(bcmolt_epon_link_stat_data, rx_broadcast_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_rx_unicast_frames = { .name = "rx_unicast_frames", .descr = "The number of unicast frames received on this EPON link.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_ID_RX_UNICAST_FRAMES, .offset = offsetof(bcmolt_epon_link_stat_data, rx_unicast_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_rx_multicast_frames = { .name = "rx_multicast_frames", .descr = "The number of multicast frames received on this EPON link.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_ID_RX_MULTICAST_FRAMES, .offset = offsetof(bcmolt_epon_link_stat_data, rx_multicast_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_rx_report_frames = { .name = "rx_report_frames", .descr = "The number of report frames received on this EPON link.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_ID_RX_REPORT_FRAMES, .offset = offsetof(bcmolt_epon_link_stat_data, rx_report_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_rx_fcs_error = { .name = "rx_fcs_error", .descr = "The number of bad FCS errors received on this EPON Link", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_ID_RX_FCS_ERROR, .offset = offsetof(bcmolt_epon_link_stat_data, rx_fcs_error), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_rx_oversize_error = { .name = "rx_oversize_error", .descr = "The number of oversize errors received on this EPON Link", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_ID_RX_OVERSIZE_ERROR, .offset = offsetof(bcmolt_epon_link_stat_data, rx_oversize_error), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_rx_runt_error = { .name = "rx_runt_error", .descr = "The number of runt errors received on this EPON Link", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_ID_RX_RUNT_ERROR, .offset = offsetof(bcmolt_epon_link_stat_data, rx_runt_error), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_rx_line_code_error = { .name = "rx_line_code_error", .descr = "The number of line code errors received on this EPON Link", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_ID_RX_LINE_CODE_ERROR, .offset = offsetof(bcmolt_epon_link_stat_data, rx_line_code_error), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_rx_line_code_error_max = { .name = "rx_line_code_error_max", .descr = "The number of line code errors max received on this EPON Link", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_ID_RX_LINE_CODE_ERROR_MAX, .offset = offsetof(bcmolt_epon_link_stat_data, rx_line_code_error_max), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_tx_data_bytes = { .name = "tx_data_bytes", .descr = "The number of data bytes transmitted on this EPON link.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_ID_TX_DATA_BYTES, .offset = offsetof(bcmolt_epon_link_stat_data, tx_data_bytes), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_tx_data_frames = { .name = "tx_data_frames", .descr = "The number of data frames transmitted on this EPON link.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_ID_TX_DATA_FRAMES, .offset = offsetof(bcmolt_epon_link_stat_data, tx_data_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_tx_frames_64 = { .name = "tx_frames_64", .descr = "The number of 64 byte frames transmitted on this EPON Link", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_64, .offset = offsetof(bcmolt_epon_link_stat_data, tx_frames_64), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_tx_frames_65_127 = { .name = "tx_frames_65_127", .descr = "The number of 65 to 127 byte frames transmitted on this EPON Link", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_65_127, .offset = offsetof(bcmolt_epon_link_stat_data, tx_frames_65_127), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_tx_frames_128_255 = { .name = "tx_frames_128_255", .descr = "The number of 128 to 255 byte frames transmitted on this EPON Link", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_128_255, .offset = offsetof(bcmolt_epon_link_stat_data, tx_frames_128_255), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_tx_frames_256_511 = { .name = "tx_frames_256_511", .descr = "The number of 256 to 511 byte frames transmitted on this EPON Link", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_256_511, .offset = offsetof(bcmolt_epon_link_stat_data, tx_frames_256_511), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_tx_frames_512_1023 = { .name = "tx_frames_512_1023", .descr = "The number of 512 to 1023 byte frames transmitted on this EPON Link", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_512_1023, .offset = offsetof(bcmolt_epon_link_stat_data, tx_frames_512_1023), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_tx_frames_1024_1518 = { .name = "tx_frames_1024_1518", .descr = "The number of 1024 to 1518 byte frames transmitted on this EPON Link", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_1024_1518, .offset = offsetof(bcmolt_epon_link_stat_data, tx_frames_1024_1518), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_tx_frames_1519_2047 = { .name = "tx_frames_1519_2047", .descr = "The number of 1519 to 2047 byte frames transmitted on this EPON Link", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_1519_2047, .offset = offsetof(bcmolt_epon_link_stat_data, tx_frames_1519_2047), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_tx_frames_2048_4095 = { .name = "tx_frames_2048_4095", .descr = "The number of 2048 to 4095 byte frames transmitted on this EPON Link", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_2048_4095, .offset = offsetof(bcmolt_epon_link_stat_data, tx_frames_2048_4095), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_tx_frames_4096_9216 = { .name = "tx_frames_4096_9216", .descr = "The number of 4096 to 9216 byte frames transmitted on this EPON Link", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_4096_9216, .offset = offsetof(bcmolt_epon_link_stat_data, tx_frames_4096_9216), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_tx_frames_9217_16383 = { .name = "tx_frames_9217_16383", .descr = "The number of 9217 to 16383 byte frames transmitted on this EPON Link", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_ID_TX_FRAMES_9217_16383, .offset = offsetof(bcmolt_epon_link_stat_data, tx_frames_9217_16383), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_tx_oam_bytes = { .name = "tx_oam_bytes", .descr = "The number of OAM bytes transmitted on this EPON link.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_ID_TX_OAM_BYTES, .offset = offsetof(bcmolt_epon_link_stat_data, tx_oam_bytes), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_tx_oam_frames = { .name = "tx_oam_frames", .descr = "The number of OAM frames transmitted on this EPON link.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_ID_TX_OAM_FRAMES, .offset = offsetof(bcmolt_epon_link_stat_data, tx_oam_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_tx_mpcp_frames = { .name = "tx_mpcp_frames", .descr = "The number of MPCP frames transmitted on this EPON link.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_ID_TX_MPCP_FRAMES, .offset = offsetof(bcmolt_epon_link_stat_data, tx_mpcp_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_tx_broadcast_frames = { .name = "tx_broadcast_frames", .descr = "The number of broadcast frames transmitted on this EPON link.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_ID_TX_BROADCAST_FRAMES, .offset = offsetof(bcmolt_epon_link_stat_data, tx_broadcast_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_tx_unicast_frames = { .name = "tx_unicast_frames", .descr = "The number of unicast frames transmitted on this EPON link.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_ID_TX_UNICAST_FRAMES, .offset = offsetof(bcmolt_epon_link_stat_data, tx_unicast_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_tx_multicast_frames = { .name = "tx_multicast_frames", .descr = "The number of multicast frames transmitted on this EPON link.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_ID_TX_MULTICAST_FRAMES, .offset = offsetof(bcmolt_epon_link_stat_data, tx_multicast_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_tx_gates = { .name = "tx_gates", .descr = "The number of gates transmitted on this EPON link.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_ID_TX_GATES, .offset = offsetof(bcmolt_epon_link_stat_data, tx_gates), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr * BCM_DESCR epon_link_stat_prop_array[] = { &prop_descr_epon_link_stat_rx_data_bytes, &prop_descr_epon_link_stat_rx_data_frames, &prop_descr_epon_link_stat_rx_frames_64, &prop_descr_epon_link_stat_rx_frames_65_127, &prop_descr_epon_link_stat_rx_frames_128_255, &prop_descr_epon_link_stat_rx_frames_256_511, &prop_descr_epon_link_stat_rx_frames_512_1023, &prop_descr_epon_link_stat_rx_frames_1024_1518, &prop_descr_epon_link_stat_rx_frames_1519_2047, &prop_descr_epon_link_stat_rx_frames_2048_4095, &prop_descr_epon_link_stat_rx_frames_4096_9216, &prop_descr_epon_link_stat_rx_frames_9217_16383, &prop_descr_epon_link_stat_rx_oam_bytes, &prop_descr_epon_link_stat_rx_oam_frames, &prop_descr_epon_link_stat_rx_mpcp_frames, &prop_descr_epon_link_stat_rx_broadcast_frames, &prop_descr_epon_link_stat_rx_unicast_frames, &prop_descr_epon_link_stat_rx_multicast_frames, &prop_descr_epon_link_stat_rx_report_frames, &prop_descr_epon_link_stat_rx_fcs_error, &prop_descr_epon_link_stat_rx_oversize_error, &prop_descr_epon_link_stat_rx_runt_error, &prop_descr_epon_link_stat_rx_line_code_error, &prop_descr_epon_link_stat_rx_line_code_error_max, &prop_descr_epon_link_stat_tx_data_bytes, &prop_descr_epon_link_stat_tx_data_frames, &prop_descr_epon_link_stat_tx_frames_64, &prop_descr_epon_link_stat_tx_frames_65_127, &prop_descr_epon_link_stat_tx_frames_128_255, &prop_descr_epon_link_stat_tx_frames_256_511, &prop_descr_epon_link_stat_tx_frames_512_1023, &prop_descr_epon_link_stat_tx_frames_1024_1518, &prop_descr_epon_link_stat_tx_frames_1519_2047, &prop_descr_epon_link_stat_tx_frames_2048_4095, &prop_descr_epon_link_stat_tx_frames_4096_9216, &prop_descr_epon_link_stat_tx_frames_9217_16383, &prop_descr_epon_link_stat_tx_oam_bytes, &prop_descr_epon_link_stat_tx_oam_frames, &prop_descr_epon_link_stat_tx_mpcp_frames, &prop_descr_epon_link_stat_tx_broadcast_frames, &prop_descr_epon_link_stat_tx_unicast_frames, &prop_descr_epon_link_stat_tx_multicast_frames, &prop_descr_epon_link_stat_tx_gates };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_link_stat_data_fields[] = { { .name = "rx_data_bytes", .descr = "The number of data bytes received on this EPON link.", .offset = offsetof(bcmolt_epon_link_stat_data, rx_data_bytes), .type = &type_descr_uint64_t }, { .name = "rx_data_frames", .descr = "The number of data frames received on this EPON link.", .offset = offsetof(bcmolt_epon_link_stat_data, rx_data_frames), .type = &type_descr_uint64_t }, { .name = "rx_frames_64", .descr = "The number of 64 byte frames received on this EPON Link", .offset = offsetof(bcmolt_epon_link_stat_data, rx_frames_64), .type = &type_descr_uint64_t }, { .name = "rx_frames_65_127", .descr = "The number of 65 to 127 byte frames received on this EPON Link", .offset = offsetof(bcmolt_epon_link_stat_data, rx_frames_65_127), .type = &type_descr_uint64_t }, { .name = "rx_frames_128_255", .descr = "The number of 128 to 255 byte frames received on this EPON Link", .offset = offsetof(bcmolt_epon_link_stat_data, rx_frames_128_255), .type = &type_descr_uint64_t }, { .name = "rx_frames_256_511", .descr = "The number of 256 to 511 byte frames received on this EPON Link", .offset = offsetof(bcmolt_epon_link_stat_data, rx_frames_256_511), .type = &type_descr_uint64_t }, { .name = "rx_frames_512_1023", .descr = "The number of 512 to 1023 byte frames received on this EPON Link", .offset = offsetof(bcmolt_epon_link_stat_data, rx_frames_512_1023), .type = &type_descr_uint64_t }, { .name = "rx_frames_1024_1518", .descr = "The number of 1024 to 1518 byte frames received on this EPON Link", .offset = offsetof(bcmolt_epon_link_stat_data, rx_frames_1024_1518), .type = &type_descr_uint64_t }, { .name = "rx_frames_1519_2047", .descr = "The number of 1519 to 2047 byte frames received on this EPON Link", .offset = offsetof(bcmolt_epon_link_stat_data, rx_frames_1519_2047), .type = &type_descr_uint64_t }, { .name = "rx_frames_2048_4095", .descr = "The number of 2048 to 4095 byte frames received on this EPON Link", .offset = offsetof(bcmolt_epon_link_stat_data, rx_frames_2048_4095), .type = &type_descr_uint64_t }, { .name = "rx_frames_4096_9216", .descr = "The number of 4096 to 9216 byte frames received on this EPON Link", .offset = offsetof(bcmolt_epon_link_stat_data, rx_frames_4096_9216), .type = &type_descr_uint64_t }, { .name = "rx_frames_9217_16383", .descr = "The number of 9217 to 16383 byte frames received on this EPON Link", .offset = offsetof(bcmolt_epon_link_stat_data, rx_frames_9217_16383), .type = &type_descr_uint64_t }, { .name = "rx_oam_bytes", .descr = "The number of OAM bytes received on this EPON link.", .offset = offsetof(bcmolt_epon_link_stat_data, rx_oam_bytes), .type = &type_descr_uint64_t }, { .name = "rx_oam_frames", .descr = "The number of OAM frames received on this EPON link.", .offset = offsetof(bcmolt_epon_link_stat_data, rx_oam_frames), .type = &type_descr_uint64_t }, { .name = "rx_mpcp_frames", .descr = "The number of MPCP frames received on this EPON link.", .offset = offsetof(bcmolt_epon_link_stat_data, rx_mpcp_frames), .type = &type_descr_uint64_t }, { .name = "rx_broadcast_frames", .descr = "The number of broadcast frames received on this EPON link.", .offset = offsetof(bcmolt_epon_link_stat_data, rx_broadcast_frames), .type = &type_descr_uint64_t }, { .name = "rx_unicast_frames", .descr = "The number of unicast frames received on this EPON link.", .offset = offsetof(bcmolt_epon_link_stat_data, rx_unicast_frames), .type = &type_descr_uint64_t }, { .name = "rx_multicast_frames", .descr = "The number of multicast frames received on this EPON link.", .offset = offsetof(bcmolt_epon_link_stat_data, rx_multicast_frames), .type = &type_descr_uint64_t }, { .name = "rx_report_frames", .descr = "The number of report frames received on this EPON link.", .offset = offsetof(bcmolt_epon_link_stat_data, rx_report_frames), .type = &type_descr_uint64_t }, { .name = "rx_fcs_error", .descr = "The number of bad FCS errors received on this EPON Link", .offset = offsetof(bcmolt_epon_link_stat_data, rx_fcs_error), .type = &type_descr_uint64_t }, { .name = "rx_oversize_error", .descr = "The number of oversize errors received on this EPON Link", .offset = offsetof(bcmolt_epon_link_stat_data, rx_oversize_error), .type = &type_descr_uint64_t }, { .name = "rx_runt_error", .descr = "The number of runt errors received on this EPON Link", .offset = offsetof(bcmolt_epon_link_stat_data, rx_runt_error), .type = &type_descr_uint64_t }, { .name = "rx_line_code_error", .descr = "The number of line code errors received on this EPON Link", .offset = offsetof(bcmolt_epon_link_stat_data, rx_line_code_error), .type = &type_descr_uint64_t }, { .name = "rx_line_code_error_max", .descr = "The number of line code errors max received on this EPON Link", .offset = offsetof(bcmolt_epon_link_stat_data, rx_line_code_error_max), .type = &type_descr_uint64_t }, { .name = "tx_data_bytes", .descr = "The number of data bytes transmitted on this EPON link.", .offset = offsetof(bcmolt_epon_link_stat_data, tx_data_bytes), .type = &type_descr_uint64_t }, { .name = "tx_data_frames", .descr = "The number of data frames transmitted on this EPON link.", .offset = offsetof(bcmolt_epon_link_stat_data, tx_data_frames), .type = &type_descr_uint64_t }, { .name = "tx_frames_64", .descr = "The number of 64 byte frames transmitted on this EPON Link", .offset = offsetof(bcmolt_epon_link_stat_data, tx_frames_64), .type = &type_descr_uint64_t }, { .name = "tx_frames_65_127", .descr = "The number of 65 to 127 byte frames transmitted on this EPON Link", .offset = offsetof(bcmolt_epon_link_stat_data, tx_frames_65_127), .type = &type_descr_uint64_t }, { .name = "tx_frames_128_255", .descr = "The number of 128 to 255 byte frames transmitted on this EPON Link", .offset = offsetof(bcmolt_epon_link_stat_data, tx_frames_128_255), .type = &type_descr_uint64_t }, { .name = "tx_frames_256_511", .descr = "The number of 256 to 511 byte frames transmitted on this EPON Link", .offset = offsetof(bcmolt_epon_link_stat_data, tx_frames_256_511), .type = &type_descr_uint64_t }, { .name = "tx_frames_512_1023", .descr = "The number of 512 to 1023 byte frames transmitted on this EPON Link", .offset = offsetof(bcmolt_epon_link_stat_data, tx_frames_512_1023), .type = &type_descr_uint64_t }, { .name = "tx_frames_1024_1518", .descr = "The number of 1024 to 1518 byte frames transmitted on this EPON Link", .offset = offsetof(bcmolt_epon_link_stat_data, tx_frames_1024_1518), .type = &type_descr_uint64_t }, { .name = "tx_frames_1519_2047", .descr = "The number of 1519 to 2047 byte frames transmitted on this EPON Link", .offset = offsetof(bcmolt_epon_link_stat_data, tx_frames_1519_2047), .type = &type_descr_uint64_t }, { .name = "tx_frames_2048_4095", .descr = "The number of 2048 to 4095 byte frames transmitted on this EPON Link", .offset = offsetof(bcmolt_epon_link_stat_data, tx_frames_2048_4095), .type = &type_descr_uint64_t }, { .name = "tx_frames_4096_9216", .descr = "The number of 4096 to 9216 byte frames transmitted on this EPON Link", .offset = offsetof(bcmolt_epon_link_stat_data, tx_frames_4096_9216), .type = &type_descr_uint64_t }, { .name = "tx_frames_9217_16383", .descr = "The number of 9217 to 16383 byte frames transmitted on this EPON Link", .offset = offsetof(bcmolt_epon_link_stat_data, tx_frames_9217_16383), .type = &type_descr_uint64_t }, { .name = "tx_oam_bytes", .descr = "The number of OAM bytes transmitted on this EPON link.", .offset = offsetof(bcmolt_epon_link_stat_data, tx_oam_bytes), .type = &type_descr_uint64_t }, { .name = "tx_oam_frames", .descr = "The number of OAM frames transmitted on this EPON link.", .offset = offsetof(bcmolt_epon_link_stat_data, tx_oam_frames), .type = &type_descr_uint64_t }, { .name = "tx_mpcp_frames", .descr = "The number of MPCP frames transmitted on this EPON link.", .offset = offsetof(bcmolt_epon_link_stat_data, tx_mpcp_frames), .type = &type_descr_uint64_t }, { .name = "tx_broadcast_frames", .descr = "The number of broadcast frames transmitted on this EPON link.", .offset = offsetof(bcmolt_epon_link_stat_data, tx_broadcast_frames), .type = &type_descr_uint64_t }, { .name = "tx_unicast_frames", .descr = "The number of unicast frames transmitted on this EPON link.", .offset = offsetof(bcmolt_epon_link_stat_data, tx_unicast_frames), .type = &type_descr_uint64_t }, { .name = "tx_multicast_frames", .descr = "The number of multicast frames transmitted on this EPON link.", .offset = offsetof(bcmolt_epon_link_stat_data, tx_multicast_frames), .type = &type_descr_uint64_t }, { .name = "tx_gates", .descr = "The number of gates transmitted on this EPON link.", .offset = offsetof(bcmolt_epon_link_stat_data, tx_gates), .type = &type_descr_uint64_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_stat_data = { .name = "bcmolt_epon_link_stat_data", .descr = "stat", .size = sizeof(bcmolt_epon_link_stat_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_link_stat_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_link_stat_data_fields } } };
+
+/* Group: epon_link - force_rediscovery */
+static bcmcli_prop_descr * BCM_DESCR epon_link_force_rediscovery_prop_array[] = { };
+
+/* Group: epon_link - delete_link */
+static bcmcli_prop_descr * BCM_DESCR epon_link_delete_link_prop_array[] = { };
+
+/* Group: epon_link - key_exchange_failure */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_key_exchange_failure_alarm_status = { .name = "alarm_status", .descr = "alarm status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_KEY_EXCHANGE_FAILURE_ID_ALARM_STATUS, .offset = offsetof(bcmolt_epon_link_key_exchange_failure_data, alarm_status), .type = &type_descr_bcmolt_status };
+static bcmcli_prop_descr * BCM_DESCR epon_link_key_exchange_failure_prop_array[] = { &prop_descr_epon_link_key_exchange_failure_alarm_status };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_link_key_exchange_failure_data_fields[] = { { .name = "alarm_status", .descr = "alarm status", .offset = offsetof(bcmolt_epon_link_key_exchange_failure_data, alarm_status), .type = &type_descr_bcmolt_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_key_exchange_failure_data = { .name = "bcmolt_epon_link_key_exchange_failure_data", .descr = "The OLT failed to receive an updated encryption key within the expected time period after encryption key exchange has been initiated.", .size = sizeof(bcmolt_epon_link_key_exchange_failure_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_link_key_exchange_failure_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_link_key_exchange_failure_data_fields } } };
+
+/* Group: epon_link - encryption_enabled */
+static bcmcli_prop_descr * BCM_DESCR epon_link_encryption_enabled_prop_array[] = { };
+
+/* Group: epon_link - mpcp_reg_ack_timeout */
+static bcmcli_prop_descr * BCM_DESCR epon_link_mpcp_reg_ack_timeout_prop_array[] = { };
+
+/* Group: epon_link - range_value_changed */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_range_value_changed_range_value_tq = { .name = "range_value_tq", .descr = "New range value.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_RANGE_VALUE_CHANGED_ID_RANGE_VALUE_TQ, .offset = offsetof(bcmolt_epon_link_range_value_changed_data, range_value_tq), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr * BCM_DESCR epon_link_range_value_changed_prop_array[] = { &prop_descr_epon_link_range_value_changed_range_value_tq };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_link_range_value_changed_data_fields[] = { { .name = "range_value_tq", .descr = "New range value.", .offset = offsetof(bcmolt_epon_link_range_value_changed_data, range_value_tq), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_range_value_changed_data = { .name = "bcmolt_epon_link_range_value_changed_data", .descr = "Indication sent when a range value has been changed.", .size = sizeof(bcmolt_epon_link_range_value_changed_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_link_range_value_changed_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_link_range_value_changed_data_fields } } };
+
+/* Group: epon_link - protection_switch_occurred */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_protection_switch_occurred_protection_status = { .name = "protection_status", .descr = "The link's post-switch role (working or standby).", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_PROTECTION_SWITCH_OCCURRED_ID_PROTECTION_STATUS, .offset = offsetof(bcmolt_epon_link_protection_switch_occurred_data, protection_status), .type = &type_descr_bcmolt_epon_protection_state };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_protection_switch_occurred_range_value_tq = { .name = "range_value_tq", .descr = "Current range value in time quanta.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_PROTECTION_SWITCH_OCCURRED_ID_RANGE_VALUE_TQ, .offset = offsetof(bcmolt_epon_link_protection_switch_occurred_data, range_value_tq), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr * BCM_DESCR epon_link_protection_switch_occurred_prop_array[] = { &prop_descr_epon_link_protection_switch_occurred_protection_status, &prop_descr_epon_link_protection_switch_occurred_range_value_tq };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_link_protection_switch_occurred_data_fields[] = { { .name = "protection_status", .descr = "The link's post-switch role (working or standby).", .offset = offsetof(bcmolt_epon_link_protection_switch_occurred_data, protection_status), .type = &type_descr_bcmolt_epon_protection_state }, { .name = "range_value_tq", .descr = "Current range value in time quanta.", .offset = offsetof(bcmolt_epon_link_protection_switch_occurred_data, range_value_tq), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_protection_switch_occurred_data = { .name = "bcmolt_epon_link_protection_switch_occurred_data", .descr = "The link has undergone a protection switch event.", .size = sizeof(bcmolt_epon_link_protection_switch_occurred_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_link_protection_switch_occurred_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_link_protection_switch_occurred_data_fields } } };
+
+/* Group: epon_link - duplicate_mpcp_registration_request */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_duplicate_mpcp_registration_request_initial_range_tq = { .name = "initial_range_tq", .descr = "Range as calculated from the first frame received.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_DUPLICATE_MPCP_REGISTRATION_REQUEST_ID_INITIAL_RANGE_TQ, .offset = offsetof(bcmolt_epon_link_duplicate_mpcp_registration_request_data, initial_range_tq), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_duplicate_mpcp_registration_request_current_range_tq = { .name = "current_range_tq", .descr = "Range as calculated from the current frame.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_DUPLICATE_MPCP_REGISTRATION_REQUEST_ID_CURRENT_RANGE_TQ, .offset = offsetof(bcmolt_epon_link_duplicate_mpcp_registration_request_data, current_range_tq), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr * BCM_DESCR epon_link_duplicate_mpcp_registration_request_prop_array[] = { &prop_descr_epon_link_duplicate_mpcp_registration_request_initial_range_tq, &prop_descr_epon_link_duplicate_mpcp_registration_request_current_range_tq };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_link_duplicate_mpcp_registration_request_data_fields[] = { { .name = "initial_range_tq", .descr = "Range as calculated from the first frame received.", .offset = offsetof(bcmolt_epon_link_duplicate_mpcp_registration_request_data, initial_range_tq), .type = &type_descr_uint32_t }, { .name = "current_range_tq", .descr = "Range as calculated from the current frame.", .offset = offsetof(bcmolt_epon_link_duplicate_mpcp_registration_request_data, current_range_tq), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_duplicate_mpcp_registration_request_data = { .name = "bcmolt_epon_link_duplicate_mpcp_registration_request_data", .descr = "A register requested was received for a link with the same MAC address as a link that has already registered.", .size = sizeof(bcmolt_epon_link_duplicate_mpcp_registration_request_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_link_duplicate_mpcp_registration_request_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_link_duplicate_mpcp_registration_request_data_fields } } };
+
+/* Group: epon_link - link_speed_mismatch */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_link_speed_mismatch_previous_rate = { .name = "previous_rate", .descr = "PON rate link initially registered", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_LINK_SPEED_MISMATCH_ID_PREVIOUS_RATE, .offset = offsetof(bcmolt_epon_link_link_speed_mismatch_data, previous_rate), .type = &type_descr_bcmolt_epon_link_rate };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_link_speed_mismatch_current_rate = { .name = "current_rate", .descr = "PON rate link is currently attempting to register at", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_LINK_SPEED_MISMATCH_ID_CURRENT_RATE, .offset = offsetof(bcmolt_epon_link_link_speed_mismatch_data, current_rate), .type = &type_descr_bcmolt_epon_link_rate };
+static bcmcli_prop_descr * BCM_DESCR epon_link_link_speed_mismatch_prop_array[] = { &prop_descr_epon_link_link_speed_mismatch_previous_rate, &prop_descr_epon_link_link_speed_mismatch_current_rate };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_link_link_speed_mismatch_data_fields[] = { { .name = "previous_rate", .descr = "PON rate link initially registered", .offset = offsetof(bcmolt_epon_link_link_speed_mismatch_data, previous_rate), .type = &type_descr_bcmolt_epon_link_rate }, { .name = "current_rate", .descr = "PON rate link is currently attempting to register at", .offset = offsetof(bcmolt_epon_link_link_speed_mismatch_data, current_rate), .type = &type_descr_bcmolt_epon_link_rate } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_link_speed_mismatch_data = { .name = "bcmolt_epon_link_link_speed_mismatch_data", .descr = "Host will receive this indication if a link registers then attempts to register later at a different speed, or if the link registers at a different speed than the speed with which it was pre-provisioned.", .size = sizeof(bcmolt_epon_link_link_speed_mismatch_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_link_link_speed_mismatch_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_link_link_speed_mismatch_data_fields } } };
+
+/* Group: epon_link - mpcp_report_timeout */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_mpcp_report_timeout_alarm_status = { .name = "alarm_status", .descr = "Alarm Status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_MPCP_REPORT_TIMEOUT_ID_ALARM_STATUS, .offset = offsetof(bcmolt_epon_link_mpcp_report_timeout_data, alarm_status), .type = &type_descr_bcmolt_status };
+static bcmcli_prop_descr * BCM_DESCR epon_link_mpcp_report_timeout_prop_array[] = { &prop_descr_epon_link_mpcp_report_timeout_alarm_status };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_link_mpcp_report_timeout_data_fields[] = { { .name = "alarm_status", .descr = "Alarm Status", .offset = offsetof(bcmolt_epon_link_mpcp_report_timeout_data, alarm_status), .type = &type_descr_bcmolt_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_mpcp_report_timeout_data = { .name = "bcmolt_epon_link_mpcp_report_timeout_data", .descr = "The provisioned limit between reports for the specified link has been exceeded.  This link will be de-registered, and the alarm_status set when this occurs.  The alarm_status will be cleared when the link attempts to register again.", .size = sizeof(bcmolt_epon_link_mpcp_report_timeout_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_link_mpcp_report_timeout_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_link_mpcp_report_timeout_data_fields } } };
+
+/* Group: epon_link - oam_keepalive_timeout */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_oam_keepalive_timeout_alarm_status = { .name = "alarm_status", .descr = "Alarm Status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_OAM_KEEPALIVE_TIMEOUT_ID_ALARM_STATUS, .offset = offsetof(bcmolt_epon_link_oam_keepalive_timeout_data, alarm_status), .type = &type_descr_bcmolt_status };
+static bcmcli_prop_descr * BCM_DESCR epon_link_oam_keepalive_timeout_prop_array[] = { &prop_descr_epon_link_oam_keepalive_timeout_alarm_status };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_link_oam_keepalive_timeout_data_fields[] = { { .name = "alarm_status", .descr = "Alarm Status", .offset = offsetof(bcmolt_epon_link_oam_keepalive_timeout_data, alarm_status), .type = &type_descr_bcmolt_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_oam_keepalive_timeout_data = { .name = "bcmolt_epon_link_oam_keepalive_timeout_data", .descr = "The provisioned time limit between receiving upstream info frames has been exceeded.  Normally an ONU will reset its OAM state machine when this occurrs and the host must re-negotiate OAM and reprovision the link.", .size = sizeof(bcmolt_epon_link_oam_keepalive_timeout_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_link_oam_keepalive_timeout_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_link_oam_keepalive_timeout_data_fields } } };
+
+/* Group: epon_link - mpcp_discovered */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_mpcp_discovered_link_info = { .name = "link_info", .descr = "Information associated with the discovered link.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_MPCP_DISCOVERED_ID_LINK_INFO, .offset = offsetof(bcmolt_epon_link_mpcp_discovered_data, link_info), .type = &type_descr_bcmolt_epon_link_info };
+static bcmcli_prop_descr * BCM_DESCR epon_link_mpcp_discovered_prop_array[] = { &prop_descr_epon_link_mpcp_discovered_link_info };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_link_mpcp_discovered_data_fields[] = { { .name = "link_info", .descr = "Information associated with the discovered link.", .offset = offsetof(bcmolt_epon_link_mpcp_discovered_data, link_info), .type = &type_descr_bcmolt_epon_link_info } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_mpcp_discovered_data = { .name = "bcmolt_epon_link_mpcp_discovered_data", .descr = "A link has completed MPCP link registration.", .size = sizeof(bcmolt_epon_link_mpcp_discovered_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_link_mpcp_discovered_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_link_mpcp_discovered_data_fields } } };
+
+/* Group: epon_link - mpcp_deregistered */
+static bcmcli_prop_descr * BCM_DESCR epon_link_mpcp_deregistered_prop_array[] = { };
+
+/* Group: epon_link - preprovisioned_link_created */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_preprovisioned_link_created_link_info = { .name = "link_info", .descr = "Information associated with the link.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_PREPROVISIONED_LINK_CREATED_ID_LINK_INFO, .offset = offsetof(bcmolt_epon_link_preprovisioned_link_created_data, link_info), .type = &type_descr_bcmolt_epon_link_info };
+static bcmcli_prop_descr * BCM_DESCR epon_link_preprovisioned_link_created_prop_array[] = { &prop_descr_epon_link_preprovisioned_link_created_link_info };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_link_preprovisioned_link_created_data_fields[] = { { .name = "link_info", .descr = "Information associated with the link.", .offset = offsetof(bcmolt_epon_link_preprovisioned_link_created_data, link_info), .type = &type_descr_bcmolt_epon_link_info } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_preprovisioned_link_created_data = { .name = "bcmolt_epon_link_preprovisioned_link_created_data", .descr = "Raised after an 'add_link' operation on an EPON NI completes successfully", .size = sizeof(bcmolt_epon_link_preprovisioned_link_created_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_link_preprovisioned_link_created_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_link_preprovisioned_link_created_data_fields } } };
+
+/* Group: epon_link - oam_keepalive_timer_start */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_oam_keepalive_timer_start_send_period = { .name = "send_period", .descr = "The period at which to send OAM info frames (in seconds).", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_OAM_KEEPALIVE_TIMER_START_ID_SEND_PERIOD, .offset = offsetof(bcmolt_epon_link_oam_keepalive_timer_start_data, send_period), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr * BCM_DESCR epon_link_oam_keepalive_timer_start_prop_array[] = { &prop_descr_epon_link_oam_keepalive_timer_start_send_period };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_link_oam_keepalive_timer_start_data_fields[] = { { .name = "send_period", .descr = "The period at which to send OAM info frames (in seconds).", .offset = offsetof(bcmolt_epon_link_oam_keepalive_timer_start_data, send_period), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_oam_keepalive_timer_start_data = { .name = "bcmolt_epon_link_oam_keepalive_timer_start_data", .descr = "Start the OAM keepalive timer against this link.", .size = sizeof(bcmolt_epon_link_oam_keepalive_timer_start_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_link_oam_keepalive_timer_start_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_link_oam_keepalive_timer_start_data_fields } } };
+
+/* Group: epon_link - oam_keepalive_timer_stop */
+static bcmcli_prop_descr * BCM_DESCR epon_link_oam_keepalive_timer_stop_prop_array[] = { };
+
+/* Group: epon_link - key_exchange_start */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_key_exchange_start_period = { .name = "period", .descr = "Key exchange period in seconds.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_KEY_EXCHANGE_START_ID_PERIOD, .offset = offsetof(bcmolt_epon_link_key_exchange_start_data, period), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr * BCM_DESCR epon_link_key_exchange_start_prop_array[] = { &prop_descr_epon_link_key_exchange_start_period };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_link_key_exchange_start_data_fields[] = { { .name = "period", .descr = "Key exchange period in seconds.", .offset = offsetof(bcmolt_epon_link_key_exchange_start_data, period), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_key_exchange_start_data = { .name = "bcmolt_epon_link_key_exchange_start_data", .descr = "Apply the corresponding provisioning for 'epon_link.key_exchange_config' against this link and then start key exchange timer with the given period.", .size = sizeof(bcmolt_epon_link_key_exchange_start_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_link_key_exchange_start_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_link_key_exchange_start_data_fields } } };
+
+/* Group: epon_link - key_exchange_stop */
+static bcmcli_prop_descr * BCM_DESCR epon_link_key_exchange_stop_prop_array[] = { };
+
+/* Group: epon_link - oam_keepalive_timer_started */
+static bcmcli_prop_descr * BCM_DESCR epon_link_oam_keepalive_timer_started_prop_array[] = { };
+
+/* Group: epon_link - oam_keepalive_timer_stopped */
+static bcmcli_prop_descr * BCM_DESCR epon_link_oam_keepalive_timer_stopped_prop_array[] = { };
+
+/* Group: epon_link - key_exchange_started */
+static bcmcli_prop_descr * BCM_DESCR epon_link_key_exchange_started_prop_array[] = { };
+
+/* Group: epon_link - key_exchange_stopped */
+static bcmcli_prop_descr * BCM_DESCR epon_link_key_exchange_stopped_prop_array[] = { };
+
+/* Group: epon_link - static_registration */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_static_registration_laseron_time_tq = { .name = "laseron_time_tq", .descr = "Laser-on time in time quanta.\\", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STATIC_REGISTRATION_ID_LASERON_TIME_TQ, .offset = offsetof(bcmolt_epon_link_static_registration_data, laseron_time_tq), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_static_registration_laseroff_time_tq = { .name = "laseroff_time_tq", .descr = "Laser-off time in time quanta.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STATIC_REGISTRATION_ID_LASEROFF_TIME_TQ, .offset = offsetof(bcmolt_epon_link_static_registration_data, laseroff_time_tq), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_static_registration_range_value_tq = { .name = "range_value_tq", .descr = "Range value used for this link - in time quanta.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STATIC_REGISTRATION_ID_RANGE_VALUE_TQ, .offset = offsetof(bcmolt_epon_link_static_registration_data, range_value_tq), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_static_registration_pending_grants = { .name = "pending_grants", .descr = "The number of pending grants.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STATIC_REGISTRATION_ID_PENDING_GRANTS, .offset = offsetof(bcmolt_epon_link_static_registration_data, pending_grants), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr * BCM_DESCR epon_link_static_registration_prop_array[] = { &prop_descr_epon_link_static_registration_laseron_time_tq, &prop_descr_epon_link_static_registration_laseroff_time_tq, &prop_descr_epon_link_static_registration_range_value_tq, &prop_descr_epon_link_static_registration_pending_grants };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_link_static_registration_data_fields[] = { { .name = "laseron_time_tq", .descr = "Laser-on time in time quanta.\\", .offset = offsetof(bcmolt_epon_link_static_registration_data, laseron_time_tq), .type = &type_descr_uint32_t }, { .name = "laseroff_time_tq", .descr = "Laser-off time in time quanta.", .offset = offsetof(bcmolt_epon_link_static_registration_data, laseroff_time_tq), .type = &type_descr_uint32_t }, { .name = "range_value_tq", .descr = "Range value used for this link - in time quanta.", .offset = offsetof(bcmolt_epon_link_static_registration_data, range_value_tq), .type = &type_descr_uint32_t }, { .name = "pending_grants", .descr = "The number of pending grants.", .offset = offsetof(bcmolt_epon_link_static_registration_data, pending_grants), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_static_registration_data = { .name = "bcmolt_epon_link_static_registration_data", .descr = "Statically registers the logical link", .size = sizeof(bcmolt_epon_link_static_registration_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_link_static_registration_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_link_static_registration_data_fields } } };
+
+/* Group: epon_link - static_registration_done */
+static bcmcli_prop_descr * BCM_DESCR epon_link_static_registration_done_prop_array[] = { };
+
+/* Group: epon_link - rerange_failure */
+static bcmcli_prop_descr * BCM_DESCR epon_link_rerange_failure_prop_array[] = { };
+
+/* Group: epon_link - inject_frame */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_inject_frame_frame = { .name = "frame", .descr = "Complete contents of the frame beginning with the DA up through but not including the CRC.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_INJECT_FRAME_ID_FRAME, .offset = offsetof(bcmolt_epon_link_inject_frame_data, frame), .type = &type_descr_bcmolt_ethernet_frame_unmasked };
+static bcmcli_prop_descr * BCM_DESCR epon_link_inject_frame_prop_array[] = { &prop_descr_epon_link_inject_frame_frame };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_link_inject_frame_data_fields[] = { { .name = "frame", .descr = "Complete contents of the frame beginning with the DA up through but not including the CRC.", .offset = offsetof(bcmolt_epon_link_inject_frame_data, frame), .type = &type_descr_bcmolt_ethernet_frame_unmasked } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_inject_frame_data = { .name = "bcmolt_epon_link_inject_frame_data", .descr = "Send an arbitrary frame across the specified link.", .size = sizeof(bcmolt_epon_link_inject_frame_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_link_inject_frame_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_link_inject_frame_data_fields } } };
+
+/* Group: epon_link - frame_captured */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_frame_captured_frame = { .name = "frame", .descr = "Contents of the frame.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_FRAME_CAPTURED_ID_FRAME, .offset = offsetof(bcmolt_epon_link_frame_captured_data, frame), .type = &type_descr_bcmolt_u8_list_u32 };
+static bcmcli_prop_descr * BCM_DESCR epon_link_frame_captured_prop_array[] = { &prop_descr_epon_link_frame_captured_frame };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_link_frame_captured_data_fields[] = { { .name = "frame", .descr = "Contents of the frame.", .offset = offsetof(bcmolt_epon_link_frame_captured_data, frame), .type = &type_descr_bcmolt_u8_list_u32 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_frame_captured_data = { .name = "bcmolt_epon_link_frame_captured_data", .descr = "A frame matching host-specified criteria was received.", .size = sizeof(bcmolt_epon_link_frame_captured_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_link_frame_captured_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_link_frame_captured_data_fields } } };
+
+/* Group: epon_link - link_deleted */
+static bcmcli_prop_descr * BCM_DESCR epon_link_link_deleted_prop_array[] = { };
+
+/* Group: epon_link - stat_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_cfg_cfg = { .name = "cfg", .descr = "Statistic alarm configuration.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_CFG_ID_CFG, .offset = offsetof(bcmolt_epon_link_stat_cfg_data, cfg), .type = &type_descr_bcmolt_stat_alarm_config };
+static bcmcli_prop_descr * BCM_DESCR epon_link_stat_cfg_prop_array[] = { &prop_descr_epon_link_stat_cfg_cfg };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_link_stat_cfg_data_fields[] = { { .name = "cfg", .descr = "Statistic alarm configuration.", .offset = offsetof(bcmolt_epon_link_stat_cfg_data, cfg), .type = &type_descr_bcmolt_stat_alarm_config } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_stat_cfg_data = { .name = "bcmolt_epon_link_stat_cfg_data", .descr = "Statistic Configuration", .size = sizeof(bcmolt_epon_link_stat_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_link_stat_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_link_stat_cfg_data_fields } } };
+
+/* Group: epon_link - stat_alarm_raised */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_alarm_raised_stat = { .name = "stat", .descr = "Statistic identifier.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_ALARM_RAISED_ID_STAT, .offset = offsetof(bcmolt_epon_link_stat_alarm_raised_data, stat), .type = &type_descr_bcmolt_epon_link_stat_id };
+static bcmcli_prop_descr * BCM_DESCR epon_link_stat_alarm_raised_prop_array[] = { &prop_descr_epon_link_stat_alarm_raised_stat };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_link_stat_alarm_raised_data_fields[] = { { .name = "stat", .descr = "Statistic identifier.", .offset = offsetof(bcmolt_epon_link_stat_alarm_raised_data, stat), .type = &type_descr_bcmolt_epon_link_stat_id } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_stat_alarm_raised_data = { .name = "bcmolt_epon_link_stat_alarm_raised_data", .descr = "Sent when a configured statistic alarm condition has been met.", .size = sizeof(bcmolt_epon_link_stat_alarm_raised_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_link_stat_alarm_raised_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_link_stat_alarm_raised_data_fields } } };
+
+/* Group: epon_link - stat_alarm_cleared */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_stat_alarm_cleared_stat = { .name = "stat", .descr = "Statistic identifier.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_STAT_ALARM_CLEARED_ID_STAT, .offset = offsetof(bcmolt_epon_link_stat_alarm_cleared_data, stat), .type = &type_descr_bcmolt_epon_link_stat_id };
+static bcmcli_prop_descr * BCM_DESCR epon_link_stat_alarm_cleared_prop_array[] = { &prop_descr_epon_link_stat_alarm_cleared_stat };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_link_stat_alarm_cleared_data_fields[] = { { .name = "stat", .descr = "Statistic identifier.", .offset = offsetof(bcmolt_epon_link_stat_alarm_cleared_data, stat), .type = &type_descr_bcmolt_epon_link_stat_id } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_stat_alarm_cleared_data = { .name = "bcmolt_epon_link_stat_alarm_cleared_data", .descr = "Sent when a configured statistic alarm condition is no longer met.", .size = sizeof(bcmolt_epon_link_stat_alarm_cleared_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_link_stat_alarm_cleared_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_link_stat_alarm_cleared_data_fields } } };
+
+/* Group: epon_link - auto_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_auto_cfg_duplicate_mpcp_registration_request = { .name = "duplicate_mpcp_registration_request", .descr = "If true, indications of type \"duplicate_mpcp_registration_request\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_AUTO_CFG_ID_DUPLICATE_MPCP_REGISTRATION_REQUEST, .offset = offsetof(bcmolt_epon_link_auto_cfg_data, duplicate_mpcp_registration_request), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_auto_cfg_encryption_enabled = { .name = "encryption_enabled", .descr = "If true, indications of type \"encryption_enabled\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_AUTO_CFG_ID_ENCRYPTION_ENABLED, .offset = offsetof(bcmolt_epon_link_auto_cfg_data, encryption_enabled), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_auto_cfg_key_exchange_failure = { .name = "key_exchange_failure", .descr = "If true, indications of type \"key_exchange_failure\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_AUTO_CFG_ID_KEY_EXCHANGE_FAILURE, .offset = offsetof(bcmolt_epon_link_auto_cfg_data, key_exchange_failure), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_auto_cfg_key_exchange_started = { .name = "key_exchange_started", .descr = "If true, indications of type \"key_exchange_started\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_AUTO_CFG_ID_KEY_EXCHANGE_STARTED, .offset = offsetof(bcmolt_epon_link_auto_cfg_data, key_exchange_started), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_auto_cfg_key_exchange_stopped = { .name = "key_exchange_stopped", .descr = "If true, indications of type \"key_exchange_stopped\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_AUTO_CFG_ID_KEY_EXCHANGE_STOPPED, .offset = offsetof(bcmolt_epon_link_auto_cfg_data, key_exchange_stopped), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_auto_cfg_link_deleted = { .name = "link_deleted", .descr = "If true, indications of type \"link_deleted\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_AUTO_CFG_ID_LINK_DELETED, .offset = offsetof(bcmolt_epon_link_auto_cfg_data, link_deleted), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_auto_cfg_link_speed_mismatch = { .name = "link_speed_mismatch", .descr = "If true, indications of type \"link_speed_mismatch\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_AUTO_CFG_ID_LINK_SPEED_MISMATCH, .offset = offsetof(bcmolt_epon_link_auto_cfg_data, link_speed_mismatch), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_auto_cfg_mpcp_deregistered = { .name = "mpcp_deregistered", .descr = "If true, indications of type \"mpcp_deregistered\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_AUTO_CFG_ID_MPCP_DEREGISTERED, .offset = offsetof(bcmolt_epon_link_auto_cfg_data, mpcp_deregistered), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_auto_cfg_mpcp_discovered = { .name = "mpcp_discovered", .descr = "If true, indications of type \"mpcp_discovered\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_AUTO_CFG_ID_MPCP_DISCOVERED, .offset = offsetof(bcmolt_epon_link_auto_cfg_data, mpcp_discovered), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_auto_cfg_mpcp_reg_ack_timeout = { .name = "mpcp_reg_ack_timeout", .descr = "If true, indications of type \"mpcp_reg_ack_timeout\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_AUTO_CFG_ID_MPCP_REG_ACK_TIMEOUT, .offset = offsetof(bcmolt_epon_link_auto_cfg_data, mpcp_reg_ack_timeout), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_auto_cfg_mpcp_report_timeout = { .name = "mpcp_report_timeout", .descr = "If true, indications of type \"mpcp_report_timeout\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_AUTO_CFG_ID_MPCP_REPORT_TIMEOUT, .offset = offsetof(bcmolt_epon_link_auto_cfg_data, mpcp_report_timeout), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_auto_cfg_oam_keepalive_timeout = { .name = "oam_keepalive_timeout", .descr = "If true, indications of type \"oam_keepalive_timeout\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_AUTO_CFG_ID_OAM_KEEPALIVE_TIMEOUT, .offset = offsetof(bcmolt_epon_link_auto_cfg_data, oam_keepalive_timeout), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_auto_cfg_oam_keepalive_timer_started = { .name = "oam_keepalive_timer_started", .descr = "If true, indications of type \"oam_keepalive_timer_started\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_AUTO_CFG_ID_OAM_KEEPALIVE_TIMER_STARTED, .offset = offsetof(bcmolt_epon_link_auto_cfg_data, oam_keepalive_timer_started), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_auto_cfg_oam_keepalive_timer_stopped = { .name = "oam_keepalive_timer_stopped", .descr = "If true, indications of type \"oam_keepalive_timer_stopped\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_AUTO_CFG_ID_OAM_KEEPALIVE_TIMER_STOPPED, .offset = offsetof(bcmolt_epon_link_auto_cfg_data, oam_keepalive_timer_stopped), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_auto_cfg_preprovisioned_link_created = { .name = "preprovisioned_link_created", .descr = "If true, indications of type \"preprovisioned_link_created\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_AUTO_CFG_ID_PREPROVISIONED_LINK_CREATED, .offset = offsetof(bcmolt_epon_link_auto_cfg_data, preprovisioned_link_created), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_auto_cfg_protection_switch_occurred = { .name = "protection_switch_occurred", .descr = "If true, indications of type \"protection_switch_occurred\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_AUTO_CFG_ID_PROTECTION_SWITCH_OCCURRED, .offset = offsetof(bcmolt_epon_link_auto_cfg_data, protection_switch_occurred), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_auto_cfg_range_value_changed = { .name = "range_value_changed", .descr = "If true, indications of type \"range_value_changed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_AUTO_CFG_ID_RANGE_VALUE_CHANGED, .offset = offsetof(bcmolt_epon_link_auto_cfg_data, range_value_changed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_auto_cfg_rerange_failure = { .name = "rerange_failure", .descr = "If true, indications of type \"rerange_failure\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_AUTO_CFG_ID_RERANGE_FAILURE, .offset = offsetof(bcmolt_epon_link_auto_cfg_data, rerange_failure), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_auto_cfg_stat_alarm_cleared = { .name = "stat_alarm_cleared", .descr = "If true, indications of type \"stat_alarm_cleared\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_AUTO_CFG_ID_STAT_ALARM_CLEARED, .offset = offsetof(bcmolt_epon_link_auto_cfg_data, stat_alarm_cleared), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_auto_cfg_stat_alarm_raised = { .name = "stat_alarm_raised", .descr = "If true, indications of type \"stat_alarm_raised\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_AUTO_CFG_ID_STAT_ALARM_RAISED, .offset = offsetof(bcmolt_epon_link_auto_cfg_data, stat_alarm_raised), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_link_auto_cfg_static_registration_done = { .name = "static_registration_done", .descr = "If true, indications of type \"static_registration_done\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_LINK_AUTO_CFG_ID_STATIC_REGISTRATION_DONE, .offset = offsetof(bcmolt_epon_link_auto_cfg_data, static_registration_done), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr * BCM_DESCR epon_link_auto_cfg_prop_array[] = { &prop_descr_epon_link_auto_cfg_duplicate_mpcp_registration_request, &prop_descr_epon_link_auto_cfg_encryption_enabled, &prop_descr_epon_link_auto_cfg_key_exchange_failure, &prop_descr_epon_link_auto_cfg_key_exchange_started, &prop_descr_epon_link_auto_cfg_key_exchange_stopped, &prop_descr_epon_link_auto_cfg_link_deleted, &prop_descr_epon_link_auto_cfg_link_speed_mismatch, &prop_descr_epon_link_auto_cfg_mpcp_deregistered, &prop_descr_epon_link_auto_cfg_mpcp_discovered, &prop_descr_epon_link_auto_cfg_mpcp_reg_ack_timeout, &prop_descr_epon_link_auto_cfg_mpcp_report_timeout, &prop_descr_epon_link_auto_cfg_oam_keepalive_timeout, &prop_descr_epon_link_auto_cfg_oam_keepalive_timer_started, &prop_descr_epon_link_auto_cfg_oam_keepalive_timer_stopped, &prop_descr_epon_link_auto_cfg_preprovisioned_link_created, &prop_descr_epon_link_auto_cfg_protection_switch_occurred, &prop_descr_epon_link_auto_cfg_range_value_changed, &prop_descr_epon_link_auto_cfg_rerange_failure, &prop_descr_epon_link_auto_cfg_stat_alarm_cleared, &prop_descr_epon_link_auto_cfg_stat_alarm_raised, &prop_descr_epon_link_auto_cfg_static_registration_done };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_link_auto_cfg_data_fields[] = { { .name = "duplicate_mpcp_registration_request", .descr = "If true, indications of type \"duplicate_mpcp_registration_request\" will be generated.", .offset = offsetof(bcmolt_epon_link_auto_cfg_data, duplicate_mpcp_registration_request), .type = &type_descr_bcmos_bool }, { .name = "encryption_enabled", .descr = "If true, indications of type \"encryption_enabled\" will be generated.", .offset = offsetof(bcmolt_epon_link_auto_cfg_data, encryption_enabled), .type = &type_descr_bcmos_bool }, { .name = "key_exchange_failure", .descr = "If true, indications of type \"key_exchange_failure\" will be generated.", .offset = offsetof(bcmolt_epon_link_auto_cfg_data, key_exchange_failure), .type = &type_descr_bcmos_bool }, { .name = "key_exchange_started", .descr = "If true, indications of type \"key_exchange_started\" will be generated.", .offset = offsetof(bcmolt_epon_link_auto_cfg_data, key_exchange_started), .type = &type_descr_bcmos_bool }, { .name = "key_exchange_stopped", .descr = "If true, indications of type \"key_exchange_stopped\" will be generated.", .offset = offsetof(bcmolt_epon_link_auto_cfg_data, key_exchange_stopped), .type = &type_descr_bcmos_bool }, { .name = "link_deleted", .descr = "If true, indications of type \"link_deleted\" will be generated.", .offset = offsetof(bcmolt_epon_link_auto_cfg_data, link_deleted), .type = &type_descr_bcmos_bool }, { .name = "link_speed_mismatch", .descr = "If true, indications of type \"link_speed_mismatch\" will be generated.", .offset = offsetof(bcmolt_epon_link_auto_cfg_data, link_speed_mismatch), .type = &type_descr_bcmos_bool }, { .name = "mpcp_deregistered", .descr = "If true, indications of type \"mpcp_deregistered\" will be generated.", .offset = offsetof(bcmolt_epon_link_auto_cfg_data, mpcp_deregistered), .type = &type_descr_bcmos_bool }, { .name = "mpcp_discovered", .descr = "If true, indications of type \"mpcp_discovered\" will be generated.", .offset = offsetof(bcmolt_epon_link_auto_cfg_data, mpcp_discovered), .type = &type_descr_bcmos_bool }, { .name = "mpcp_reg_ack_timeout", .descr = "If true, indications of type \"mpcp_reg_ack_timeout\" will be generated.", .offset = offsetof(bcmolt_epon_link_auto_cfg_data, mpcp_reg_ack_timeout), .type = &type_descr_bcmos_bool }, { .name = "mpcp_report_timeout", .descr = "If true, indications of type \"mpcp_report_timeout\" will be generated.", .offset = offsetof(bcmolt_epon_link_auto_cfg_data, mpcp_report_timeout), .type = &type_descr_bcmos_bool }, { .name = "oam_keepalive_timeout", .descr = "If true, indications of type \"oam_keepalive_timeout\" will be generated.", .offset = offsetof(bcmolt_epon_link_auto_cfg_data, oam_keepalive_timeout), .type = &type_descr_bcmos_bool }, { .name = "oam_keepalive_timer_started", .descr = "If true, indications of type \"oam_keepalive_timer_started\" will be generated.", .offset = offsetof(bcmolt_epon_link_auto_cfg_data, oam_keepalive_timer_started), .type = &type_descr_bcmos_bool }, { .name = "oam_keepalive_timer_stopped", .descr = "If true, indications of type \"oam_keepalive_timer_stopped\" will be generated.", .offset = offsetof(bcmolt_epon_link_auto_cfg_data, oam_keepalive_timer_stopped), .type = &type_descr_bcmos_bool }, { .name = "preprovisioned_link_created", .descr = "If true, indications of type \"preprovisioned_link_created\" will be generated.", .offset = offsetof(bcmolt_epon_link_auto_cfg_data, preprovisioned_link_created), .type = &type_descr_bcmos_bool }, { .name = "protection_switch_occurred", .descr = "If true, indications of type \"protection_switch_occurred\" will be generated.", .offset = offsetof(bcmolt_epon_link_auto_cfg_data, protection_switch_occurred), .type = &type_descr_bcmos_bool }, { .name = "range_value_changed", .descr = "If true, indications of type \"range_value_changed\" will be generated.", .offset = offsetof(bcmolt_epon_link_auto_cfg_data, range_value_changed), .type = &type_descr_bcmos_bool }, { .name = "rerange_failure", .descr = "If true, indications of type \"rerange_failure\" will be generated.", .offset = offsetof(bcmolt_epon_link_auto_cfg_data, rerange_failure), .type = &type_descr_bcmos_bool }, { .name = "stat_alarm_cleared", .descr = "If true, indications of type \"stat_alarm_cleared\" will be generated.", .offset = offsetof(bcmolt_epon_link_auto_cfg_data, stat_alarm_cleared), .type = &type_descr_bcmos_bool }, { .name = "stat_alarm_raised", .descr = "If true, indications of type \"stat_alarm_raised\" will be generated.", .offset = offsetof(bcmolt_epon_link_auto_cfg_data, stat_alarm_raised), .type = &type_descr_bcmos_bool }, { .name = "static_registration_done", .descr = "If true, indications of type \"static_registration_done\" will be generated.", .offset = offsetof(bcmolt_epon_link_auto_cfg_data, static_registration_done), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_link_auto_cfg_data = { .name = "bcmolt_epon_link_auto_cfg_data", .descr = "Indication Configuration", .size = sizeof(bcmolt_epon_link_auto_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_link_auto_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_link_auto_cfg_data_fields } } };
+
+/* ==== Object: epon_ni ==== */
+
+/* Group: epon_ni - key */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_key_epon_ni = { .name = "epon_ni", .descr = "The index of a specific EPON NI instance as seen by the host.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_KEY_ID_EPON_NI, .offset = offsetof(bcmolt_epon_ni_key, epon_ni), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr * BCM_DESCR epon_ni_key_prop_array[] = { &prop_descr_epon_ni_key_epon_ni };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_ni_key_fields[] = { { .name = "epon_ni", .descr = "The index of a specific EPON NI instance as seen by the host.", .offset = offsetof(bcmolt_epon_ni_key, epon_ni), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_ni_key = { .name = "bcmolt_epon_ni_key", .descr = "key", .size = sizeof(bcmolt_epon_ni_key), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_ni_key_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_ni_key_fields } } };
+
+/* Group: epon_ni - cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_cfg_mac_address = { .name = "mac_address", .descr = "The MAC address used for all frames generated by the OLT on the PON.  This value must be set before EPON_NI is first enabled, and cannot be changed while the EPON_NI is enabled.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_CFG_ID_MAC_ADDRESS, .offset = offsetof(bcmolt_epon_ni_cfg_data, mac_address), .type = &type_descr_bcmos_mac_address };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_cfg_epon_ni_en = { .name = "epon_ni_en", .descr = "Indicates the enable state of the EPON NI.", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_EPON_NI_CFG_ID_EPON_NI_EN, .offset = offsetof(bcmolt_epon_ni_cfg_data, epon_ni_en), .type = &type_descr_bcmolt_epon_ni_en_state };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_cfg_registration_behavior = { .name = "registration_behavior", .descr = "Determines how registration requests from unknown links are handled.  Set to 'Notify Unknown' to force all links to be pre-provisioned.  If in 'Notify Unknown' mode, MPCP Registration of an unknown link will be denied, and a 'White List Violation\" will be sent to the host. If set to 'Automatic', the link registers fully without host interaction. ", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_CFG_ID_REGISTRATION_BEHAVIOR, .offset = offsetof(bcmolt_epon_ni_cfg_data, registration_behavior), .type = &type_descr_bcmolt_registration_behavior };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_cfg_mtu_1g = { .name = "mtu_1g", .descr = "Maximum frame size (including FCS) on the 1G path. This attribute cannot be changed on an enabled EPON_NI. This attribute cannot be an odd value.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_CFG_ID_MTU_1G, .offset = offsetof(bcmolt_epon_ni_cfg_data, mtu_1g), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_cfg_mtu_10g = { .name = "mtu_10g", .descr = "Maximum frame size (including FCS) on the 10G path. This attribute cannot be changed on an enabled EPON_NI. This attribute cannot be an odd value.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_CFG_ID_MTU_10G, .offset = offsetof(bcmolt_epon_ni_cfg_data, mtu_10g), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_cfg_minimum_fiber_length = { .name = "minimum_fiber_length", .descr = "The minimum fiber length, in meters, at which we expect to find an ONU. Notes: The difference between the minimum and maximum fiber length cannot exceed 100 km. This attribute cannot be changed on an enabled EPON_NI. Some ONUs can register at distances that are less than the provisioned minimum.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_CFG_ID_MINIMUM_FIBER_LENGTH, .offset = offsetof(bcmolt_epon_ni_cfg_data, minimum_fiber_length), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_cfg_maximum_fiber_length = { .name = "maximum_fiber_length", .descr = "The maximum fiber length, in meters, at which we expect to find an ONU. Notes: The difference between the minimum and maximum fiber length cannot exceed 100 km. This attribute cannot be changed on an enabled EPON_NI. Some ONUs can register at distances that are greater than the provisioned maximum.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_CFG_ID_MAXIMUM_FIBER_LENGTH, .offset = offsetof(bcmolt_epon_ni_cfg_data, maximum_fiber_length), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_cfg_grant_spacing_tq = { .name = "grant_spacing_tq", .descr = "The dead time on the PON between upstream bursts.  This attribute cannot be changed on an enabled EPON_NI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_CFG_ID_GRANT_SPACING_TQ, .offset = offsetof(bcmolt_epon_ni_cfg_data, grant_spacing_tq), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_cfg_epon_logical_link_options = { .name = "epon_logical_link_options", .descr = "Configuration related to EPON links registration and reporting. This value cannot be changed on an enabled EPON_NI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_CFG_ID_EPON_LOGICAL_LINK_OPTIONS, .offset = offsetof(bcmolt_epon_ni_cfg_data, epon_logical_link_options), .type = &type_descr_bcmolt_epon_logical_link_options };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_cfg_mpcp_discovery_period_ms = { .name = "mpcp_discovery_period_ms", .descr = "Period of MPCP discovery windows.  In this time period, one discovery gate will be sent for every enabled RP.  The discovery gates will be spaced equally across the time period.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_CFG_ID_MPCP_DISCOVERY_PERIOD_MS, .offset = offsetof(bcmolt_epon_ni_cfg_data, mpcp_discovery_period_ms), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_cfg_alarm_state = { .name = "alarm_state", .descr = "The state of the alarms on this EPON NI.", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_EPON_NI_CFG_ID_ALARM_STATE, .offset = offsetof(bcmolt_epon_ni_cfg_data, alarm_state), .type = &type_descr_bcmolt_epon_ni_alarm_state };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_cfg_all_links = { .name = "all_links", .descr = "List of all links on the EPON NI.", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_EPON_NI_CFG_ID_ALL_LINKS, .offset = offsetof(bcmolt_epon_ni_cfg_data, all_links), .type = &type_descr_bcmolt_macaddress_list_u32_max_2048 };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_cfg_encryption_cfg = { .name = "encryption_cfg", .descr = "Encryption configuration that applies to the EPON NI as a whole.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_CFG_ID_ENCRYPTION_CFG, .offset = offsetof(bcmolt_epon_ni_cfg_data, encryption_cfg), .type = &type_descr_bcmolt_epon_ni_encryption_cfg };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_cfg_protection_switching_cfg = { .name = "protection_switching_cfg", .descr = "Protection switching configuration.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_CFG_ID_PROTECTION_SWITCHING_CFG, .offset = offsetof(bcmolt_epon_ni_cfg_data, protection_switching_cfg), .type = &type_descr_bcmolt_epon_protection_switching_configuration };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_cfg_clock_transport_cfg = { .name = "clock_transport_cfg", .descr = "Clock transport configuration.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_CFG_ID_CLOCK_TRANSPORT_CFG, .offset = offsetof(bcmolt_epon_ni_cfg_data, clock_transport_cfg), .type = &type_descr_bcmolt_epon_clock_transport_configuration };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_cfg_dropdown_weights = { .name = "dropdown_weights", .descr = "Drop-down Weights", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_CFG_ID_DROPDOWN_WEIGHTS, .offset = offsetof(bcmolt_epon_ni_cfg_data, dropdown_weights), .type = &type_descr_bcmolt_arr_u16_7 };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_cfg_approximate_solicited_usage = { .name = "approximate_solicited_usage", .descr = "Approximate Solicited Usage", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_EPON_NI_CFG_ID_APPROXIMATE_SOLICITED_USAGE, .offset = offsetof(bcmolt_epon_ni_cfg_data, approximate_solicited_usage), .type = &type_descr_bcmolt_arr_bounds_8 };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_cfg_approximate_tdm_usage = { .name = "approximate_tdm_usage", .descr = "Approximate TDM Usage", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_EPON_NI_CFG_ID_APPROXIMATE_TDM_USAGE, .offset = offsetof(bcmolt_epon_ni_cfg_data, approximate_tdm_usage), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_cfg_no_reports_soak_time = { .name = "no_reports_soak_time", .descr = "Period of time after last report received to send no reports alarm (in ms).", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_CFG_ID_NO_REPORTS_SOAK_TIME, .offset = offsetof(bcmolt_epon_ni_cfg_data, no_reports_soak_time), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_cfg_pon_aggregate_shaper = { .name = "pon_aggregate_shaper", .descr = "PON Aggregate Shaper", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_CFG_ID_PON_AGGREGATE_SHAPER, .offset = offsetof(bcmolt_epon_ni_cfg_data, pon_aggregate_shaper), .type = &type_descr_bcmolt_pon_aggregate_shaper };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_cfg_estimated_pon_latency_tq = { .name = "estimated_pon_latency_tq", .descr = "Estimated PON Latency (TQ)", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_EPON_NI_CFG_ID_ESTIMATED_PON_LATENCY_TQ, .offset = offsetof(bcmolt_epon_ni_cfg_data, estimated_pon_latency_tq), .type = &type_descr_bcmolt_arr_bounds_8 };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_cfg_onu_upgrade_params = { .name = "onu_upgrade_params", .descr = "ONU upgrade params", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_CFG_ID_ONU_UPGRADE_PARAMS, .offset = offsetof(bcmolt_epon_ni_cfg_data, onu_upgrade_params), .type = &type_descr_bcmolt_epon_onu_upgrade_params };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_cfg_auto_rogue_detect_10g_en = { .name = "auto_rogue_detect_10g_en", .descr = "Enable 10G Autonomous Rogue Dection during discovery window", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_CFG_ID_AUTO_ROGUE_DETECT_10G_EN, .offset = offsetof(bcmolt_epon_ni_cfg_data, auto_rogue_detect_10g_en), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_cfg_auto_rogue_detect_1g_en = { .name = "auto_rogue_detect_1g_en", .descr = "Enable 1G Autonomous Rogue Dection during discovery window", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_CFG_ID_AUTO_ROGUE_DETECT_1G_EN, .offset = offsetof(bcmolt_epon_ni_cfg_data, auto_rogue_detect_1g_en), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_cfg_auto_rogue_detect_10g_threshold = { .name = "auto_rogue_detect_10g_threshold", .descr = "Set threshold for number of SyncPatterns received without a Burst Delimiter to trigger the fault.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_CFG_ID_AUTO_ROGUE_DETECT_10G_THRESHOLD, .offset = offsetof(bcmolt_epon_ni_cfg_data, auto_rogue_detect_10g_threshold), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr * BCM_DESCR epon_ni_cfg_prop_array[] = { &prop_descr_epon_ni_cfg_mac_address, &prop_descr_epon_ni_cfg_epon_ni_en, &prop_descr_epon_ni_cfg_registration_behavior, &prop_descr_epon_ni_cfg_mtu_1g, &prop_descr_epon_ni_cfg_mtu_10g, &prop_descr_epon_ni_cfg_minimum_fiber_length, &prop_descr_epon_ni_cfg_maximum_fiber_length, &prop_descr_epon_ni_cfg_grant_spacing_tq, &prop_descr_epon_ni_cfg_epon_logical_link_options, &prop_descr_epon_ni_cfg_mpcp_discovery_period_ms, &prop_descr_epon_ni_cfg_alarm_state, &prop_descr_epon_ni_cfg_all_links, &prop_descr_epon_ni_cfg_encryption_cfg, &prop_descr_epon_ni_cfg_protection_switching_cfg, &prop_descr_epon_ni_cfg_clock_transport_cfg, &prop_descr_epon_ni_cfg_dropdown_weights, &prop_descr_epon_ni_cfg_approximate_solicited_usage, &prop_descr_epon_ni_cfg_approximate_tdm_usage, &prop_descr_epon_ni_cfg_no_reports_soak_time, &prop_descr_epon_ni_cfg_pon_aggregate_shaper, &prop_descr_epon_ni_cfg_estimated_pon_latency_tq, &prop_descr_epon_ni_cfg_onu_upgrade_params, &prop_descr_epon_ni_cfg_auto_rogue_detect_10g_en, &prop_descr_epon_ni_cfg_auto_rogue_detect_1g_en, &prop_descr_epon_ni_cfg_auto_rogue_detect_10g_threshold };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_ni_cfg_data_fields[] = { { .name = "mac_address", .descr = "The MAC address used for all frames generated by the OLT on the PON.  This value must be set before EPON_NI is first enabled, and cannot be changed while the EPON_NI is enabled.", .offset = offsetof(bcmolt_epon_ni_cfg_data, mac_address), .type = &type_descr_bcmos_mac_address }, { .name = "epon_ni_en", .descr = "Indicates the enable state of the EPON NI.", .offset = offsetof(bcmolt_epon_ni_cfg_data, epon_ni_en), .type = &type_descr_bcmolt_epon_ni_en_state }, { .name = "registration_behavior", .descr = "Determines how registration requests from unknown links are handled.  Set to 'Notify Unknown' to force all links to be pre-provisioned.  If in 'Notify Unknown' mode, MPCP Registration of an unknown link will be denied, and a 'White List Violation\" will be sent to the host. If set to 'Automatic', the link registers fully without host interaction. ", .offset = offsetof(bcmolt_epon_ni_cfg_data, registration_behavior), .type = &type_descr_bcmolt_registration_behavior }, { .name = "mtu_1g", .descr = "Maximum frame size (including FCS) on the 1G path. This attribute cannot be changed on an enabled EPON_NI. This attribute cannot be an odd value.", .offset = offsetof(bcmolt_epon_ni_cfg_data, mtu_1g), .type = &type_descr_uint16_t }, { .name = "mtu_10g", .descr = "Maximum frame size (including FCS) on the 10G path. This attribute cannot be changed on an enabled EPON_NI. This attribute cannot be an odd value.", .offset = offsetof(bcmolt_epon_ni_cfg_data, mtu_10g), .type = &type_descr_uint16_t }, { .name = "minimum_fiber_length", .descr = "The minimum fiber length, in meters, at which we expect to find an ONU. Notes: The difference between the minimum and maximum fiber length cannot exceed 100 km. This attribute cannot be changed on an enabled EPON_NI. Some ONUs can register at distances that are less than the provisioned minimum.", .offset = offsetof(bcmolt_epon_ni_cfg_data, minimum_fiber_length), .type = &type_descr_uint32_t }, { .name = "maximum_fiber_length", .descr = "The maximum fiber length, in meters, at which we expect to find an ONU. Notes: The difference between the minimum and maximum fiber length cannot exceed 100 km. This attribute cannot be changed on an enabled EPON_NI. Some ONUs can register at distances that are greater than the provisioned maximum.", .offset = offsetof(bcmolt_epon_ni_cfg_data, maximum_fiber_length), .type = &type_descr_uint32_t }, { .name = "grant_spacing_tq", .descr = "The dead time on the PON between upstream bursts.  This attribute cannot be changed on an enabled EPON_NI.", .offset = offsetof(bcmolt_epon_ni_cfg_data, grant_spacing_tq), .type = &type_descr_uint32_t }, { .name = "epon_logical_link_options", .descr = "Configuration related to EPON links registration and reporting. This value cannot be changed on an enabled EPON_NI.", .offset = offsetof(bcmolt_epon_ni_cfg_data, epon_logical_link_options), .type = &type_descr_bcmolt_epon_logical_link_options }, { .name = "mpcp_discovery_period_ms", .descr = "Period of MPCP discovery windows.  In this time period, one discovery gate will be sent for every enabled RP.  The discovery gates will be spaced equally across the time period.", .offset = offsetof(bcmolt_epon_ni_cfg_data, mpcp_discovery_period_ms), .type = &type_descr_uint32_t }, { .name = "alarm_state", .descr = "The state of the alarms on this EPON NI.", .offset = offsetof(bcmolt_epon_ni_cfg_data, alarm_state), .type = &type_descr_bcmolt_epon_ni_alarm_state }, { .name = "all_links", .descr = "List of all links on the EPON NI.", .offset = offsetof(bcmolt_epon_ni_cfg_data, all_links), .type = &type_descr_bcmolt_macaddress_list_u32_max_2048 }, { .name = "encryption_cfg", .descr = "Encryption configuration that applies to the EPON NI as a whole.", .offset = offsetof(bcmolt_epon_ni_cfg_data, encryption_cfg), .type = &type_descr_bcmolt_epon_ni_encryption_cfg }, { .name = "protection_switching_cfg", .descr = "Protection switching configuration.", .offset = offsetof(bcmolt_epon_ni_cfg_data, protection_switching_cfg), .type = &type_descr_bcmolt_epon_protection_switching_configuration }, { .name = "clock_transport_cfg", .descr = "Clock transport configuration.", .offset = offsetof(bcmolt_epon_ni_cfg_data, clock_transport_cfg), .type = &type_descr_bcmolt_epon_clock_transport_configuration }, { .name = "dropdown_weights", .descr = "Drop-down Weights", .offset = offsetof(bcmolt_epon_ni_cfg_data, dropdown_weights), .type = &type_descr_bcmolt_arr_u16_7 }, { .name = "approximate_solicited_usage", .descr = "Approximate Solicited Usage", .offset = offsetof(bcmolt_epon_ni_cfg_data, approximate_solicited_usage), .type = &type_descr_bcmolt_arr_bounds_8 }, { .name = "approximate_tdm_usage", .descr = "Approximate TDM Usage", .offset = offsetof(bcmolt_epon_ni_cfg_data, approximate_tdm_usage), .type = &type_descr_uint32_t }, { .name = "no_reports_soak_time", .descr = "Period of time after last report received to send no reports alarm (in ms).", .offset = offsetof(bcmolt_epon_ni_cfg_data, no_reports_soak_time), .type = &type_descr_uint16_t }, { .name = "pon_aggregate_shaper", .descr = "PON Aggregate Shaper", .offset = offsetof(bcmolt_epon_ni_cfg_data, pon_aggregate_shaper), .type = &type_descr_bcmolt_pon_aggregate_shaper }, { .name = "estimated_pon_latency_tq", .descr = "Estimated PON Latency (TQ)", .offset = offsetof(bcmolt_epon_ni_cfg_data, estimated_pon_latency_tq), .type = &type_descr_bcmolt_arr_bounds_8 }, { .name = "onu_upgrade_params", .descr = "ONU upgrade params", .offset = offsetof(bcmolt_epon_ni_cfg_data, onu_upgrade_params), .type = &type_descr_bcmolt_epon_onu_upgrade_params }, { .name = "auto_rogue_detect_10g_en", .descr = "Enable 10G Autonomous Rogue Dection during discovery window", .offset = offsetof(bcmolt_epon_ni_cfg_data, auto_rogue_detect_10g_en), .type = &type_descr_bcmos_bool }, { .name = "auto_rogue_detect_1g_en", .descr = "Enable 1G Autonomous Rogue Dection during discovery window", .offset = offsetof(bcmolt_epon_ni_cfg_data, auto_rogue_detect_1g_en), .type = &type_descr_bcmos_bool }, { .name = "auto_rogue_detect_10g_threshold", .descr = "Set threshold for number of SyncPatterns received without a Burst Delimiter to trigger the fault.", .offset = offsetof(bcmolt_epon_ni_cfg_data, auto_rogue_detect_10g_threshold), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_ni_cfg_data = { .name = "bcmolt_epon_ni_cfg_data", .descr = "cfg", .size = sizeof(bcmolt_epon_ni_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_ni_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_ni_cfg_data_fields } } };
+
+/* Group: epon_ni - set_epon_ni_en_state */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_set_epon_ni_en_state_new_state = { .name = "new_state", .descr = "New EPON NI enable state.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_SET_EPON_NI_EN_STATE_ID_NEW_STATE, .offset = offsetof(bcmolt_epon_ni_set_epon_ni_en_state_data, new_state), .type = &type_descr_bcmolt_epon_ni_en_state };
+static bcmcli_prop_descr * BCM_DESCR epon_ni_set_epon_ni_en_state_prop_array[] = { &prop_descr_epon_ni_set_epon_ni_en_state_new_state };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_ni_set_epon_ni_en_state_data_fields[] = { { .name = "new_state", .descr = "New EPON NI enable state.", .offset = offsetof(bcmolt_epon_ni_set_epon_ni_en_state_data, new_state), .type = &type_descr_bcmolt_epon_ni_en_state } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_ni_set_epon_ni_en_state_data = { .name = "bcmolt_epon_ni_set_epon_ni_en_state_data", .descr = "Set the EPON NI enable state.", .size = sizeof(bcmolt_epon_ni_set_epon_ni_en_state_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_ni_set_epon_ni_en_state_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_ni_set_epon_ni_en_state_data_fields } } };
+
+/* Group: epon_ni - issue_rssi_grant */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_issue_rssi_grant_granted_link = { .name = "granted_link", .descr = "Logical link to grant, which should either be associated with a particular unicast link of interest on the PON or, 0 for idle power measurement. 0 will use a link that will not result in upstream transmission by any device on the PON.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_GRANTED_LINK, .offset = offsetof(bcmolt_epon_ni_issue_rssi_grant_data, granted_link), .type = &type_descr_bcmos_mac_address };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_issue_rssi_grant_trigger_width = { .name = "trigger_width", .descr = "Rssi Trigger Width in ns", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_TRIGGER_WIDTH, .offset = offsetof(bcmolt_epon_ni_issue_rssi_grant_data, trigger_width), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_issue_rssi_grant_trigger_delay = { .name = "trigger_delay", .descr = "Rssi Trigger Delay in ns", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_TRIGGER_DELAY, .offset = offsetof(bcmolt_epon_ni_issue_rssi_grant_data, trigger_delay), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_issue_rssi_grant_sample_period = { .name = "sample_period", .descr = "Rssi Sampe Period in us", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_ISSUE_RSSI_GRANT_ID_SAMPLE_PERIOD, .offset = offsetof(bcmolt_epon_ni_issue_rssi_grant_data, sample_period), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr * BCM_DESCR epon_ni_issue_rssi_grant_prop_array[] = { &prop_descr_epon_ni_issue_rssi_grant_granted_link, &prop_descr_epon_ni_issue_rssi_grant_trigger_width, &prop_descr_epon_ni_issue_rssi_grant_trigger_delay, &prop_descr_epon_ni_issue_rssi_grant_sample_period };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_ni_issue_rssi_grant_data_fields[] = { { .name = "granted_link", .descr = "Logical link to grant, which should either be associated with a particular unicast link of interest on the PON or, 0 for idle power measurement. 0 will use a link that will not result in upstream transmission by any device on the PON.", .offset = offsetof(bcmolt_epon_ni_issue_rssi_grant_data, granted_link), .type = &type_descr_bcmos_mac_address }, { .name = "trigger_width", .descr = "Rssi Trigger Width in ns", .offset = offsetof(bcmolt_epon_ni_issue_rssi_grant_data, trigger_width), .type = &type_descr_uint16_t }, { .name = "trigger_delay", .descr = "Rssi Trigger Delay in ns", .offset = offsetof(bcmolt_epon_ni_issue_rssi_grant_data, trigger_delay), .type = &type_descr_uint16_t }, { .name = "sample_period", .descr = "Rssi Sampe Period in us", .offset = offsetof(bcmolt_epon_ni_issue_rssi_grant_data, sample_period), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_ni_issue_rssi_grant_data = { .name = "bcmolt_epon_ni_issue_rssi_grant_data", .descr = "Issues an RSSI grant to read RX Power", .size = sizeof(bcmolt_epon_ni_issue_rssi_grant_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_ni_issue_rssi_grant_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_ni_issue_rssi_grant_data_fields } } };
+
+/* Group: epon_ni - add_link */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_add_link_mac_address = { .name = "mac_address", .descr = "The MAC address of the EPON link.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_ADD_LINK_ID_MAC_ADDRESS, .offset = offsetof(bcmolt_epon_ni_add_link_data, mac_address), .type = &type_descr_bcmos_mac_address };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_add_link_rate = { .name = "rate", .descr = "Rate of link to pre-provision.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_ADD_LINK_ID_RATE, .offset = offsetof(bcmolt_epon_ni_add_link_data, rate), .type = &type_descr_bcmolt_epon_link_rate };
+static bcmcli_prop_descr * BCM_DESCR epon_ni_add_link_prop_array[] = { &prop_descr_epon_ni_add_link_mac_address, &prop_descr_epon_ni_add_link_rate };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_ni_add_link_data_fields[] = { { .name = "mac_address", .descr = "The MAC address of the EPON link.", .offset = offsetof(bcmolt_epon_ni_add_link_data, mac_address), .type = &type_descr_bcmos_mac_address }, { .name = "rate", .descr = "Rate of link to pre-provision.", .offset = offsetof(bcmolt_epon_ni_add_link_data, rate), .type = &type_descr_bcmolt_epon_link_rate } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_ni_add_link_data = { .name = "bcmolt_epon_ni_add_link_data", .descr = "Pre-provision an EPON link.", .size = sizeof(bcmolt_epon_ni_add_link_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_ni_add_link_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_ni_add_link_data_fields } } };
+
+/* Group: epon_ni - add_multicast_link */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_add_multicast_link_mac_address = { .name = "mac_address", .descr = "The MAC address of the EPON link.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_ADD_MULTICAST_LINK_ID_MAC_ADDRESS, .offset = offsetof(bcmolt_epon_ni_add_multicast_link_data, mac_address), .type = &type_descr_bcmos_mac_address };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_add_multicast_link_rate = { .name = "rate", .descr = "Rate of link to pre-provision.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_ADD_MULTICAST_LINK_ID_RATE, .offset = offsetof(bcmolt_epon_ni_add_multicast_link_data, rate), .type = &type_descr_bcmolt_epon_link_rate };
+static bcmcli_prop_descr * BCM_DESCR epon_ni_add_multicast_link_prop_array[] = { &prop_descr_epon_ni_add_multicast_link_mac_address, &prop_descr_epon_ni_add_multicast_link_rate };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_ni_add_multicast_link_data_fields[] = { { .name = "mac_address", .descr = "The MAC address of the EPON link.", .offset = offsetof(bcmolt_epon_ni_add_multicast_link_data, mac_address), .type = &type_descr_bcmos_mac_address }, { .name = "rate", .descr = "Rate of link to pre-provision.", .offset = offsetof(bcmolt_epon_ni_add_multicast_link_data, rate), .type = &type_descr_bcmolt_epon_link_rate } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_ni_add_multicast_link_data = { .name = "bcmolt_epon_ni_add_multicast_link_data", .descr = "Pre-provision an EPON multicast link.", .size = sizeof(bcmolt_epon_ni_add_multicast_link_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_ni_add_multicast_link_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_ni_add_multicast_link_data_fields } } };
+
+/* Group: epon_ni - add_protected_standby_link */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_add_protected_standby_link_mac_address = { .name = "mac_address", .descr = "The MAC address of the EPON link.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_ADD_PROTECTED_STANDBY_LINK_ID_MAC_ADDRESS, .offset = offsetof(bcmolt_epon_ni_add_protected_standby_link_data, mac_address), .type = &type_descr_bcmos_mac_address };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_add_protected_standby_link_working_link_info = { .name = "working_link_info", .descr = "Link info for the associated working link.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_ADD_PROTECTED_STANDBY_LINK_ID_WORKING_LINK_INFO, .offset = offsetof(bcmolt_epon_ni_add_protected_standby_link_data, working_link_info), .type = &type_descr_bcmolt_epon_link_info };
+static bcmcli_prop_descr * BCM_DESCR epon_ni_add_protected_standby_link_prop_array[] = { &prop_descr_epon_ni_add_protected_standby_link_mac_address, &prop_descr_epon_ni_add_protected_standby_link_working_link_info };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_ni_add_protected_standby_link_data_fields[] = { { .name = "mac_address", .descr = "The MAC address of the EPON link.", .offset = offsetof(bcmolt_epon_ni_add_protected_standby_link_data, mac_address), .type = &type_descr_bcmos_mac_address }, { .name = "working_link_info", .descr = "Link info for the associated working link.", .offset = offsetof(bcmolt_epon_ni_add_protected_standby_link_data, working_link_info), .type = &type_descr_bcmolt_epon_link_info } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_ni_add_protected_standby_link_data = { .name = "bcmolt_epon_ni_add_protected_standby_link_data", .descr = "Adds a protected standby link.  Once it has been created, the link is considered \"standby\" for the puposes of protection switching.", .size = sizeof(bcmolt_epon_ni_add_protected_standby_link_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_ni_add_protected_standby_link_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_ni_add_protected_standby_link_data_fields } } };
+
+/* Group: epon_ni - no_reports */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_no_reports_alarm_status = { .name = "alarm_status", .descr = "Alarm Status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_NO_REPORTS_ID_ALARM_STATUS, .offset = offsetof(bcmolt_epon_ni_no_reports_data, alarm_status), .type = &type_descr_bcmolt_status };
+static bcmcli_prop_descr * BCM_DESCR epon_ni_no_reports_prop_array[] = { &prop_descr_epon_ni_no_reports_alarm_status };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_ni_no_reports_data_fields[] = { { .name = "alarm_status", .descr = "Alarm Status", .offset = offsetof(bcmolt_epon_ni_no_reports_data, alarm_status), .type = &type_descr_bcmolt_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_ni_no_reports_data = { .name = "bcmolt_epon_ni_no_reports_data", .descr = "Loss of all reports on all links on the EPON NI", .size = sizeof(bcmolt_epon_ni_no_reports_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_ni_no_reports_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_ni_no_reports_data_fields } } };
+
+/* Group: epon_ni - llid_quarantined */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_llid_quarantined_llid = { .name = "llid", .descr = "LLID", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_LLID_QUARANTINED_ID_LLID, .offset = offsetof(bcmolt_epon_ni_llid_quarantined_data, llid), .type = &type_descr_uint16_t_hex };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_llid_quarantined_link_rate = { .name = "link_rate", .descr = "Link Rate", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_LLID_QUARANTINED_ID_LINK_RATE, .offset = offsetof(bcmolt_epon_ni_llid_quarantined_data, link_rate), .type = &type_descr_bcmolt_epon_link_rate };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_llid_quarantined_link_mac = { .name = "link_mac", .descr = "Link MAC", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_LLID_QUARANTINED_ID_LINK_MAC, .offset = offsetof(bcmolt_epon_ni_llid_quarantined_data, link_mac), .type = &type_descr_bcmos_mac_address };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_llid_quarantined_range_value_tq = { .name = "range_value_tq", .descr = "Range value in time quanta", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_LLID_QUARANTINED_ID_RANGE_VALUE_TQ, .offset = offsetof(bcmolt_epon_ni_llid_quarantined_data, range_value_tq), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr * BCM_DESCR epon_ni_llid_quarantined_prop_array[] = { &prop_descr_epon_ni_llid_quarantined_llid, &prop_descr_epon_ni_llid_quarantined_link_rate, &prop_descr_epon_ni_llid_quarantined_link_mac, &prop_descr_epon_ni_llid_quarantined_range_value_tq };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_ni_llid_quarantined_data_fields[] = { { .name = "llid", .descr = "LLID", .offset = offsetof(bcmolt_epon_ni_llid_quarantined_data, llid), .type = &type_descr_uint16_t_hex }, { .name = "link_rate", .descr = "Link Rate", .offset = offsetof(bcmolt_epon_ni_llid_quarantined_data, link_rate), .type = &type_descr_bcmolt_epon_link_rate }, { .name = "link_mac", .descr = "Link MAC", .offset = offsetof(bcmolt_epon_ni_llid_quarantined_data, link_mac), .type = &type_descr_bcmos_mac_address }, { .name = "range_value_tq", .descr = "Range value in time quanta", .offset = offsetof(bcmolt_epon_ni_llid_quarantined_data, range_value_tq), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_ni_llid_quarantined_data = { .name = "bcmolt_epon_ni_llid_quarantined_data", .descr = "LLID Quarantined", .size = sizeof(bcmolt_epon_ni_llid_quarantined_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_ni_llid_quarantined_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_ni_llid_quarantined_data_fields } } };
+
+/* Group: epon_ni - state_change_completed */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_state_change_completed_new_state = { .name = "new_state", .descr = "New EPON NI enable state.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_STATE_CHANGE_COMPLETED_ID_NEW_STATE, .offset = offsetof(bcmolt_epon_ni_state_change_completed_data, new_state), .type = &type_descr_bcmolt_epon_ni_en_state };
+static bcmcli_prop_descr * BCM_DESCR epon_ni_state_change_completed_prop_array[] = { &prop_descr_epon_ni_state_change_completed_new_state };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_ni_state_change_completed_data_fields[] = { { .name = "new_state", .descr = "New EPON NI enable state.", .offset = offsetof(bcmolt_epon_ni_state_change_completed_data, new_state), .type = &type_descr_bcmolt_epon_ni_en_state } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_ni_state_change_completed_data = { .name = "bcmolt_epon_ni_state_change_completed_data", .descr = "Sent after a 'set_epon_ni_en_state' operation has completed.", .size = sizeof(bcmolt_epon_ni_state_change_completed_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_ni_state_change_completed_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_ni_state_change_completed_data_fields } } };
+
+/* Group: epon_ni - protection_switching_apply_rerange_delta */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_protection_switching_apply_rerange_delta_rerange_delta = { .name = "rerange_delta", .descr = "Re-range delta", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_PROTECTION_SWITCHING_APPLY_RERANGE_DELTA_ID_RERANGE_DELTA, .offset = offsetof(bcmolt_epon_ni_protection_switching_apply_rerange_delta_data, rerange_delta), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr * BCM_DESCR epon_ni_protection_switching_apply_rerange_delta_prop_array[] = { &prop_descr_epon_ni_protection_switching_apply_rerange_delta_rerange_delta };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_ni_protection_switching_apply_rerange_delta_data_fields[] = { { .name = "rerange_delta", .descr = "Re-range delta", .offset = offsetof(bcmolt_epon_ni_protection_switching_apply_rerange_delta_data, rerange_delta), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_ni_protection_switching_apply_rerange_delta_data = { .name = "bcmolt_epon_ni_protection_switching_apply_rerange_delta_data", .descr = "Protection switching apply re-range delta", .size = sizeof(bcmolt_epon_ni_protection_switching_apply_rerange_delta_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_ni_protection_switching_apply_rerange_delta_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_ni_protection_switching_apply_rerange_delta_data_fields } } };
+
+/* Group: epon_ni - rerange_failure */
+static bcmcli_prop_descr * BCM_DESCR epon_ni_rerange_failure_prop_array[] = { };
+
+/* Group: epon_ni - rssi_measurement_completed */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_rssi_measurement_completed_status = { .name = "status", .descr = "status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_RSSI_MEASUREMENT_COMPLETED_ID_STATUS, .offset = offsetof(bcmolt_epon_ni_rssi_measurement_completed_data, status), .type = &type_descr_bcmolt_result };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_rssi_measurement_completed_llid = { .name = "llid", .descr = "LLID", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_RSSI_MEASUREMENT_COMPLETED_ID_LLID, .offset = offsetof(bcmolt_epon_ni_rssi_measurement_completed_data, llid), .type = &type_descr_uint16_t_hex };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_rssi_measurement_completed_link_mac = { .name = "link_mac", .descr = "Link MAC ", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_RSSI_MEASUREMENT_COMPLETED_ID_LINK_MAC, .offset = offsetof(bcmolt_epon_ni_rssi_measurement_completed_data, link_mac), .type = &type_descr_bcmos_mac_address };
+static bcmcli_prop_descr * BCM_DESCR epon_ni_rssi_measurement_completed_prop_array[] = { &prop_descr_epon_ni_rssi_measurement_completed_status, &prop_descr_epon_ni_rssi_measurement_completed_llid, &prop_descr_epon_ni_rssi_measurement_completed_link_mac };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_ni_rssi_measurement_completed_data_fields[] = { { .name = "status", .descr = "status", .offset = offsetof(bcmolt_epon_ni_rssi_measurement_completed_data, status), .type = &type_descr_bcmolt_result }, { .name = "llid", .descr = "LLID", .offset = offsetof(bcmolt_epon_ni_rssi_measurement_completed_data, llid), .type = &type_descr_uint16_t_hex }, { .name = "link_mac", .descr = "Link MAC ", .offset = offsetof(bcmolt_epon_ni_rssi_measurement_completed_data, link_mac), .type = &type_descr_bcmos_mac_address } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_ni_rssi_measurement_completed_data = { .name = "bcmolt_epon_ni_rssi_measurement_completed_data", .descr = "RSSI Measurement Completed", .size = sizeof(bcmolt_epon_ni_rssi_measurement_completed_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_ni_rssi_measurement_completed_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_ni_rssi_measurement_completed_data_fields } } };
+
+/* Group: epon_ni - rogue_llid_scan */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_rogue_llid_scan_mode = { .name = "mode", .descr = "True = Scan all LLIDS on the PON", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_ROGUE_LLID_SCAN_ID_MODE, .offset = offsetof(bcmolt_epon_ni_rogue_llid_scan_data, mode), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_rogue_llid_scan_llid = { .name = "llid", .descr = "Specific LLID to scan or 0 to scan all when mode is ALL", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_ROGUE_LLID_SCAN_ID_LLID, .offset = offsetof(bcmolt_epon_ni_rogue_llid_scan_data, llid), .type = &type_descr_uint16_t_hex };
+static bcmcli_prop_descr * BCM_DESCR epon_ni_rogue_llid_scan_prop_array[] = { &prop_descr_epon_ni_rogue_llid_scan_mode, &prop_descr_epon_ni_rogue_llid_scan_llid };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_ni_rogue_llid_scan_data_fields[] = { { .name = "mode", .descr = "True = Scan all LLIDS on the PON", .offset = offsetof(bcmolt_epon_ni_rogue_llid_scan_data, mode), .type = &type_descr_bcmos_bool }, { .name = "llid", .descr = "Specific LLID to scan or 0 to scan all when mode is ALL", .offset = offsetof(bcmolt_epon_ni_rogue_llid_scan_data, llid), .type = &type_descr_uint16_t_hex } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_ni_rogue_llid_scan_data = { .name = "bcmolt_epon_ni_rogue_llid_scan_data", .descr = "Issue a request to scan all LLIDs or a specific LLID on a PON", .size = sizeof(bcmolt_epon_ni_rogue_llid_scan_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_ni_rogue_llid_scan_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_ni_rogue_llid_scan_data_fields } } };
+
+/* Group: epon_ni - start_onu_upgrade */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_start_onu_upgrade_list_of_onu_ids = { .name = "list_of_onu_ids", .descr = "List of ONUs to upgrade the firmware.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_START_ONU_UPGRADE_ID_LIST_OF_ONU_IDS, .offset = offsetof(bcmolt_epon_ni_start_onu_upgrade_data, list_of_onu_ids), .type = &type_descr_bcmolt_macaddress_list_u32 };
+static bcmcli_prop_descr * BCM_DESCR epon_ni_start_onu_upgrade_prop_array[] = { &prop_descr_epon_ni_start_onu_upgrade_list_of_onu_ids };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_ni_start_onu_upgrade_data_fields[] = { { .name = "list_of_onu_ids", .descr = "List of ONUs to upgrade the firmware.", .offset = offsetof(bcmolt_epon_ni_start_onu_upgrade_data, list_of_onu_ids), .type = &type_descr_bcmolt_macaddress_list_u32 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_ni_start_onu_upgrade_data = { .name = "bcmolt_epon_ni_start_onu_upgrade_data", .descr = "Start ONU Firmware Upgrade", .size = sizeof(bcmolt_epon_ni_start_onu_upgrade_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_ni_start_onu_upgrade_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_ni_start_onu_upgrade_data_fields } } };
+
+/* Group: epon_ni - onu_upgrade_complete */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_onu_upgrade_complete_status = { .name = "status", .descr = "Success or failure.  Against entire upgrade process.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_ONU_UPGRADE_COMPLETE_ID_STATUS, .offset = offsetof(bcmolt_epon_ni_onu_upgrade_complete_data, status), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_onu_upgrade_complete_list_of_failed_entities = { .name = "list_of_failed_entities", .descr = "List of ONU-IDs the upgrade failed for.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_ONU_UPGRADE_COMPLETE_ID_LIST_OF_FAILED_ENTITIES, .offset = offsetof(bcmolt_epon_ni_onu_upgrade_complete_data, list_of_failed_entities), .type = &type_descr_bcmolt_epon_onu_upgrade_status_list_u32 };
+static bcmcli_prop_descr * BCM_DESCR epon_ni_onu_upgrade_complete_prop_array[] = { &prop_descr_epon_ni_onu_upgrade_complete_status, &prop_descr_epon_ni_onu_upgrade_complete_list_of_failed_entities };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_ni_onu_upgrade_complete_data_fields[] = { { .name = "status", .descr = "Success or failure.  Against entire upgrade process.", .offset = offsetof(bcmolt_epon_ni_onu_upgrade_complete_data, status), .type = &type_descr_bcmos_bool }, { .name = "list_of_failed_entities", .descr = "List of ONU-IDs the upgrade failed for.", .offset = offsetof(bcmolt_epon_ni_onu_upgrade_complete_data, list_of_failed_entities), .type = &type_descr_bcmolt_epon_onu_upgrade_status_list_u32 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_ni_onu_upgrade_complete_data = { .name = "bcmolt_epon_ni_onu_upgrade_complete_data", .descr = "ONU Upgrade Complete", .size = sizeof(bcmolt_epon_ni_onu_upgrade_complete_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_ni_onu_upgrade_complete_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_ni_onu_upgrade_complete_data_fields } } };
+
+/* Group: epon_ni - rogue_scan_complete */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_rogue_scan_complete_return_ind_status = { .name = "return_ind_status", .descr = "Status of completed scan", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_ROGUE_SCAN_COMPLETE_ID_RETURN_IND_STATUS, .offset = offsetof(bcmolt_epon_ni_rogue_scan_complete_data, return_ind_status), .type = &type_descr_bcmolt_rogue_scan_status };
+static bcmcli_prop_descr * BCM_DESCR epon_ni_rogue_scan_complete_prop_array[] = { &prop_descr_epon_ni_rogue_scan_complete_return_ind_status };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_ni_rogue_scan_complete_data_fields[] = { { .name = "return_ind_status", .descr = "Status of completed scan", .offset = offsetof(bcmolt_epon_ni_rogue_scan_complete_data, return_ind_status), .type = &type_descr_bcmolt_rogue_scan_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_ni_rogue_scan_complete_data = { .name = "bcmolt_epon_ni_rogue_scan_complete_data", .descr = "Indciation that a scan is complete, any error is also returned. ", .size = sizeof(bcmolt_epon_ni_rogue_scan_complete_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_ni_rogue_scan_complete_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_ni_rogue_scan_complete_data_fields } } };
+
+/* Group: epon_ni - mpcp_timestamp_changed */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_mpcp_timestamp_changed_mpcp_timestamp = { .name = "mpcp_timestamp", .descr = "The MPCP time at which the pulse was received.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_MPCP_TIMESTAMP_CHANGED_ID_MPCP_TIMESTAMP, .offset = offsetof(bcmolt_epon_ni_mpcp_timestamp_changed_data, mpcp_timestamp), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr * BCM_DESCR epon_ni_mpcp_timestamp_changed_prop_array[] = { &prop_descr_epon_ni_mpcp_timestamp_changed_mpcp_timestamp };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_ni_mpcp_timestamp_changed_data_fields[] = { { .name = "mpcp_timestamp", .descr = "The MPCP time at which the pulse was received.", .offset = offsetof(bcmolt_epon_ni_mpcp_timestamp_changed_data, mpcp_timestamp), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_ni_mpcp_timestamp_changed_data = { .name = "bcmolt_epon_ni_mpcp_timestamp_changed_data", .descr = "A clock transport pulse was received at the given MPCP timestamp.", .size = sizeof(bcmolt_epon_ni_mpcp_timestamp_changed_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_ni_mpcp_timestamp_changed_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_ni_mpcp_timestamp_changed_data_fields } } };
+
+/* Group: epon_ni - auto_rogue_scan_1g_failure */
+static bcmcli_prop_descr * BCM_DESCR epon_ni_auto_rogue_scan_1g_failure_prop_array[] = { };
+
+/* Group: epon_ni - auto_rogue_scan_10g_failure */
+static bcmcli_prop_descr * BCM_DESCR epon_ni_auto_rogue_scan_10g_failure_prop_array[] = { };
+
+/* Group: epon_ni - auto_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_auto_cfg_auto_rogue_scan_10g_failure = { .name = "auto_rogue_scan_10g_failure", .descr = "If true, indications of type \"auto_rogue_scan_10g_failure\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_AUTO_CFG_ID_AUTO_ROGUE_SCAN_10G_FAILURE, .offset = offsetof(bcmolt_epon_ni_auto_cfg_data, auto_rogue_scan_10g_failure), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_auto_cfg_auto_rogue_scan_1g_failure = { .name = "auto_rogue_scan_1g_failure", .descr = "If true, indications of type \"auto_rogue_scan_1g_failure\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_AUTO_CFG_ID_AUTO_ROGUE_SCAN_1G_FAILURE, .offset = offsetof(bcmolt_epon_ni_auto_cfg_data, auto_rogue_scan_1g_failure), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_auto_cfg_llid_quarantined = { .name = "llid_quarantined", .descr = "If true, indications of type \"llid_quarantined\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_AUTO_CFG_ID_LLID_QUARANTINED, .offset = offsetof(bcmolt_epon_ni_auto_cfg_data, llid_quarantined), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_auto_cfg_mpcp_timestamp_changed = { .name = "mpcp_timestamp_changed", .descr = "If true, indications of type \"mpcp_timestamp_changed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_AUTO_CFG_ID_MPCP_TIMESTAMP_CHANGED, .offset = offsetof(bcmolt_epon_ni_auto_cfg_data, mpcp_timestamp_changed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_auto_cfg_no_reports = { .name = "no_reports", .descr = "If true, indications of type \"no_reports\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_AUTO_CFG_ID_NO_REPORTS, .offset = offsetof(bcmolt_epon_ni_auto_cfg_data, no_reports), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_auto_cfg_onu_upgrade_complete = { .name = "onu_upgrade_complete", .descr = "If true, indications of type \"onu_upgrade_complete\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_AUTO_CFG_ID_ONU_UPGRADE_COMPLETE, .offset = offsetof(bcmolt_epon_ni_auto_cfg_data, onu_upgrade_complete), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_auto_cfg_rerange_failure = { .name = "rerange_failure", .descr = "If true, indications of type \"rerange_failure\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_AUTO_CFG_ID_RERANGE_FAILURE, .offset = offsetof(bcmolt_epon_ni_auto_cfg_data, rerange_failure), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_auto_cfg_rogue_scan_complete = { .name = "rogue_scan_complete", .descr = "If true, indications of type \"rogue_scan_complete\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_AUTO_CFG_ID_ROGUE_SCAN_COMPLETE, .offset = offsetof(bcmolt_epon_ni_auto_cfg_data, rogue_scan_complete), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_auto_cfg_rssi_measurement_completed = { .name = "rssi_measurement_completed", .descr = "If true, indications of type \"rssi_measurement_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_AUTO_CFG_ID_RSSI_MEASUREMENT_COMPLETED, .offset = offsetof(bcmolt_epon_ni_auto_cfg_data, rssi_measurement_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_ni_auto_cfg_state_change_completed = { .name = "state_change_completed", .descr = "If true, indications of type \"state_change_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_NI_AUTO_CFG_ID_STATE_CHANGE_COMPLETED, .offset = offsetof(bcmolt_epon_ni_auto_cfg_data, state_change_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr * BCM_DESCR epon_ni_auto_cfg_prop_array[] = { &prop_descr_epon_ni_auto_cfg_auto_rogue_scan_10g_failure, &prop_descr_epon_ni_auto_cfg_auto_rogue_scan_1g_failure, &prop_descr_epon_ni_auto_cfg_llid_quarantined, &prop_descr_epon_ni_auto_cfg_mpcp_timestamp_changed, &prop_descr_epon_ni_auto_cfg_no_reports, &prop_descr_epon_ni_auto_cfg_onu_upgrade_complete, &prop_descr_epon_ni_auto_cfg_rerange_failure, &prop_descr_epon_ni_auto_cfg_rogue_scan_complete, &prop_descr_epon_ni_auto_cfg_rssi_measurement_completed, &prop_descr_epon_ni_auto_cfg_state_change_completed };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_ni_auto_cfg_data_fields[] = { { .name = "auto_rogue_scan_10g_failure", .descr = "If true, indications of type \"auto_rogue_scan_10g_failure\" will be generated.", .offset = offsetof(bcmolt_epon_ni_auto_cfg_data, auto_rogue_scan_10g_failure), .type = &type_descr_bcmos_bool }, { .name = "auto_rogue_scan_1g_failure", .descr = "If true, indications of type \"auto_rogue_scan_1g_failure\" will be generated.", .offset = offsetof(bcmolt_epon_ni_auto_cfg_data, auto_rogue_scan_1g_failure), .type = &type_descr_bcmos_bool }, { .name = "llid_quarantined", .descr = "If true, indications of type \"llid_quarantined\" will be generated.", .offset = offsetof(bcmolt_epon_ni_auto_cfg_data, llid_quarantined), .type = &type_descr_bcmos_bool }, { .name = "mpcp_timestamp_changed", .descr = "If true, indications of type \"mpcp_timestamp_changed\" will be generated.", .offset = offsetof(bcmolt_epon_ni_auto_cfg_data, mpcp_timestamp_changed), .type = &type_descr_bcmos_bool }, { .name = "no_reports", .descr = "If true, indications of type \"no_reports\" will be generated.", .offset = offsetof(bcmolt_epon_ni_auto_cfg_data, no_reports), .type = &type_descr_bcmos_bool }, { .name = "onu_upgrade_complete", .descr = "If true, indications of type \"onu_upgrade_complete\" will be generated.", .offset = offsetof(bcmolt_epon_ni_auto_cfg_data, onu_upgrade_complete), .type = &type_descr_bcmos_bool }, { .name = "rerange_failure", .descr = "If true, indications of type \"rerange_failure\" will be generated.", .offset = offsetof(bcmolt_epon_ni_auto_cfg_data, rerange_failure), .type = &type_descr_bcmos_bool }, { .name = "rogue_scan_complete", .descr = "If true, indications of type \"rogue_scan_complete\" will be generated.", .offset = offsetof(bcmolt_epon_ni_auto_cfg_data, rogue_scan_complete), .type = &type_descr_bcmos_bool }, { .name = "rssi_measurement_completed", .descr = "If true, indications of type \"rssi_measurement_completed\" will be generated.", .offset = offsetof(bcmolt_epon_ni_auto_cfg_data, rssi_measurement_completed), .type = &type_descr_bcmos_bool }, { .name = "state_change_completed", .descr = "If true, indications of type \"state_change_completed\" will be generated.", .offset = offsetof(bcmolt_epon_ni_auto_cfg_data, state_change_completed), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_ni_auto_cfg_data = { .name = "bcmolt_epon_ni_auto_cfg_data", .descr = "Indication Configuration", .size = sizeof(bcmolt_epon_ni_auto_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_ni_auto_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_ni_auto_cfg_data_fields } } };
+
+/* ==== Object: epon_onu_10g_us ==== */
+
+/* Group: epon_onu_10g_us - key */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_onu_10g_us_key_epon_ni = { .name = "epon_ni", .descr = "EPON NI with which this ONU interface is associated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_ONU_10G_US_KEY_ID_EPON_NI, .offset = offsetof(bcmolt_epon_onu_10g_us_key, epon_ni), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_onu_10g_us_key_onu_id = { .name = "onu_id", .descr = "Unique identifier of the ONU interface within its EPON NI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_ONU_10G_US_KEY_ID_ONU_ID, .offset = offsetof(bcmolt_epon_onu_10g_us_key, onu_id), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr * BCM_DESCR epon_onu_10g_us_key_prop_array[] = { &prop_descr_epon_onu_10g_us_key_epon_ni, &prop_descr_epon_onu_10g_us_key_onu_id };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_onu_10g_us_key_fields[] = { { .name = "epon_ni", .descr = "EPON NI with which this ONU interface is associated.", .offset = offsetof(bcmolt_epon_onu_10g_us_key, epon_ni), .type = &type_descr_uint16_t }, { .name = "onu_id", .descr = "Unique identifier of the ONU interface within its EPON NI.", .offset = offsetof(bcmolt_epon_onu_10g_us_key, onu_id), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_onu_10g_us_key = { .name = "bcmolt_epon_onu_10g_us_key", .descr = "key", .size = sizeof(bcmolt_epon_onu_10g_us_key), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_onu_10g_us_key_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_onu_10g_us_key_fields } } };
+
+/* Group: epon_onu_10g_us - stat */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_onu_10g_us_stat_fec_code_words_total = { .name = "fec_code_words_total", .descr = "FEC stats code words total", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_CODE_WORDS_TOTAL, .offset = offsetof(bcmolt_epon_onu_10g_us_stat_data, fec_code_words_total), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_onu_10g_us_stat_fec_code_words_decode_fails = { .name = "fec_code_words_decode_fails", .descr = "FEC stats code words decode fails", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_CODE_WORDS_DECODE_FAILS, .offset = offsetof(bcmolt_epon_onu_10g_us_stat_data, fec_code_words_decode_fails), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_onu_10g_us_stat_fec_zeroes_corrected = { .name = "fec_zeroes_corrected", .descr = "FEC stats zeros corrected", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_ZEROES_CORRECTED, .offset = offsetof(bcmolt_epon_onu_10g_us_stat_data, fec_zeroes_corrected), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_onu_10g_us_stat_fec_ones_corrected = { .name = "fec_ones_corrected", .descr = "FEC stats ones corected", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_ONU_10G_US_STAT_ID_FEC_ONES_CORRECTED, .offset = offsetof(bcmolt_epon_onu_10g_us_stat_data, fec_ones_corrected), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr * BCM_DESCR epon_onu_10g_us_stat_prop_array[] = { &prop_descr_epon_onu_10g_us_stat_fec_code_words_total, &prop_descr_epon_onu_10g_us_stat_fec_code_words_decode_fails, &prop_descr_epon_onu_10g_us_stat_fec_zeroes_corrected, &prop_descr_epon_onu_10g_us_stat_fec_ones_corrected };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_onu_10g_us_stat_data_fields[] = { { .name = "fec_code_words_total", .descr = "FEC stats code words total", .offset = offsetof(bcmolt_epon_onu_10g_us_stat_data, fec_code_words_total), .type = &type_descr_uint64_t }, { .name = "fec_code_words_decode_fails", .descr = "FEC stats code words decode fails", .offset = offsetof(bcmolt_epon_onu_10g_us_stat_data, fec_code_words_decode_fails), .type = &type_descr_uint64_t }, { .name = "fec_zeroes_corrected", .descr = "FEC stats zeros corrected", .offset = offsetof(bcmolt_epon_onu_10g_us_stat_data, fec_zeroes_corrected), .type = &type_descr_uint64_t }, { .name = "fec_ones_corrected", .descr = "FEC stats ones corected", .offset = offsetof(bcmolt_epon_onu_10g_us_stat_data, fec_ones_corrected), .type = &type_descr_uint64_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_onu_10g_us_stat_data = { .name = "bcmolt_epon_onu_10g_us_stat_data", .descr = "stat", .size = sizeof(bcmolt_epon_onu_10g_us_stat_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_onu_10g_us_stat_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_onu_10g_us_stat_data_fields } } };
+
+/* Group: epon_onu_10g_us - cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_onu_10g_us_cfg_all_links = { .name = "all_links", .descr = "List of MAC Addresses for all links on the ONU Id.", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_EPON_ONU_10G_US_CFG_ID_ALL_LINKS, .offset = offsetof(bcmolt_epon_onu_10g_us_cfg_data, all_links), .type = &type_descr_bcmolt_macaddress_list_u32_max_2048 };
+static bcmcli_prop_descr * BCM_DESCR epon_onu_10g_us_cfg_prop_array[] = { &prop_descr_epon_onu_10g_us_cfg_all_links };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_onu_10g_us_cfg_data_fields[] = { { .name = "all_links", .descr = "List of MAC Addresses for all links on the ONU Id.", .offset = offsetof(bcmolt_epon_onu_10g_us_cfg_data, all_links), .type = &type_descr_bcmolt_macaddress_list_u32_max_2048 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_onu_10g_us_cfg_data = { .name = "bcmolt_epon_onu_10g_us_cfg_data", .descr = "cfg", .size = sizeof(bcmolt_epon_onu_10g_us_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_onu_10g_us_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_onu_10g_us_cfg_data_fields } } };
+
+/* Group: epon_onu_10g_us - stat_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_onu_10g_us_stat_cfg_cfg = { .name = "cfg", .descr = "Statistic alarm configuration.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_ONU_10G_US_STAT_CFG_ID_CFG, .offset = offsetof(bcmolt_epon_onu_10g_us_stat_cfg_data, cfg), .type = &type_descr_bcmolt_stat_alarm_config };
+static bcmcli_prop_descr * BCM_DESCR epon_onu_10g_us_stat_cfg_prop_array[] = { &prop_descr_epon_onu_10g_us_stat_cfg_cfg };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_onu_10g_us_stat_cfg_data_fields[] = { { .name = "cfg", .descr = "Statistic alarm configuration.", .offset = offsetof(bcmolt_epon_onu_10g_us_stat_cfg_data, cfg), .type = &type_descr_bcmolt_stat_alarm_config } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_onu_10g_us_stat_cfg_data = { .name = "bcmolt_epon_onu_10g_us_stat_cfg_data", .descr = "Statistic Configuration", .size = sizeof(bcmolt_epon_onu_10g_us_stat_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_onu_10g_us_stat_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_onu_10g_us_stat_cfg_data_fields } } };
+
+/* Group: epon_onu_10g_us - stat_alarm_raised */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_onu_10g_us_stat_alarm_raised_stat = { .name = "stat", .descr = "Statistic identifier.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_ONU_10G_US_STAT_ALARM_RAISED_ID_STAT, .offset = offsetof(bcmolt_epon_onu_10g_us_stat_alarm_raised_data, stat), .type = &type_descr_bcmolt_epon_onu_10g_us_stat_id };
+static bcmcli_prop_descr * BCM_DESCR epon_onu_10g_us_stat_alarm_raised_prop_array[] = { &prop_descr_epon_onu_10g_us_stat_alarm_raised_stat };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_onu_10g_us_stat_alarm_raised_data_fields[] = { { .name = "stat", .descr = "Statistic identifier.", .offset = offsetof(bcmolt_epon_onu_10g_us_stat_alarm_raised_data, stat), .type = &type_descr_bcmolt_epon_onu_10g_us_stat_id } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_onu_10g_us_stat_alarm_raised_data = { .name = "bcmolt_epon_onu_10g_us_stat_alarm_raised_data", .descr = "Sent when a configured statistic alarm condition has been met.", .size = sizeof(bcmolt_epon_onu_10g_us_stat_alarm_raised_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_onu_10g_us_stat_alarm_raised_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_onu_10g_us_stat_alarm_raised_data_fields } } };
+
+/* Group: epon_onu_10g_us - stat_alarm_cleared */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_onu_10g_us_stat_alarm_cleared_stat = { .name = "stat", .descr = "Statistic identifier.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_ONU_10G_US_STAT_ALARM_CLEARED_ID_STAT, .offset = offsetof(bcmolt_epon_onu_10g_us_stat_alarm_cleared_data, stat), .type = &type_descr_bcmolt_epon_onu_10g_us_stat_id };
+static bcmcli_prop_descr * BCM_DESCR epon_onu_10g_us_stat_alarm_cleared_prop_array[] = { &prop_descr_epon_onu_10g_us_stat_alarm_cleared_stat };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_onu_10g_us_stat_alarm_cleared_data_fields[] = { { .name = "stat", .descr = "Statistic identifier.", .offset = offsetof(bcmolt_epon_onu_10g_us_stat_alarm_cleared_data, stat), .type = &type_descr_bcmolt_epon_onu_10g_us_stat_id } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_onu_10g_us_stat_alarm_cleared_data = { .name = "bcmolt_epon_onu_10g_us_stat_alarm_cleared_data", .descr = "Sent when a configured statistic alarm condition is no longer met.", .size = sizeof(bcmolt_epon_onu_10g_us_stat_alarm_cleared_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_onu_10g_us_stat_alarm_cleared_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_onu_10g_us_stat_alarm_cleared_data_fields } } };
+
+/* Group: epon_onu_10g_us - auto_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_onu_10g_us_auto_cfg_stat_alarm_cleared = { .name = "stat_alarm_cleared", .descr = "If true, indications of type \"stat_alarm_cleared\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_ONU_10G_US_AUTO_CFG_ID_STAT_ALARM_CLEARED, .offset = offsetof(bcmolt_epon_onu_10g_us_auto_cfg_data, stat_alarm_cleared), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_onu_10g_us_auto_cfg_stat_alarm_raised = { .name = "stat_alarm_raised", .descr = "If true, indications of type \"stat_alarm_raised\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_ONU_10G_US_AUTO_CFG_ID_STAT_ALARM_RAISED, .offset = offsetof(bcmolt_epon_onu_10g_us_auto_cfg_data, stat_alarm_raised), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr * BCM_DESCR epon_onu_10g_us_auto_cfg_prop_array[] = { &prop_descr_epon_onu_10g_us_auto_cfg_stat_alarm_cleared, &prop_descr_epon_onu_10g_us_auto_cfg_stat_alarm_raised };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_onu_10g_us_auto_cfg_data_fields[] = { { .name = "stat_alarm_cleared", .descr = "If true, indications of type \"stat_alarm_cleared\" will be generated.", .offset = offsetof(bcmolt_epon_onu_10g_us_auto_cfg_data, stat_alarm_cleared), .type = &type_descr_bcmos_bool }, { .name = "stat_alarm_raised", .descr = "If true, indications of type \"stat_alarm_raised\" will be generated.", .offset = offsetof(bcmolt_epon_onu_10g_us_auto_cfg_data, stat_alarm_raised), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_onu_10g_us_auto_cfg_data = { .name = "bcmolt_epon_onu_10g_us_auto_cfg_data", .descr = "Indication Configuration", .size = sizeof(bcmolt_epon_onu_10g_us_auto_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_onu_10g_us_auto_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_onu_10g_us_auto_cfg_data_fields } } };
+
+/* ==== Object: epon_onu_1g_us ==== */
+
+/* Group: epon_onu_1g_us - key */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_onu_1g_us_key_epon_ni = { .name = "epon_ni", .descr = "EPON NI with which this ONU interface is associated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_ONU_1G_US_KEY_ID_EPON_NI, .offset = offsetof(bcmolt_epon_onu_1g_us_key, epon_ni), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_onu_1g_us_key_onu_id = { .name = "onu_id", .descr = "Unique identifier of the ONU interface within its EPON NI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_ONU_1G_US_KEY_ID_ONU_ID, .offset = offsetof(bcmolt_epon_onu_1g_us_key, onu_id), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr * BCM_DESCR epon_onu_1g_us_key_prop_array[] = { &prop_descr_epon_onu_1g_us_key_epon_ni, &prop_descr_epon_onu_1g_us_key_onu_id };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_onu_1g_us_key_fields[] = { { .name = "epon_ni", .descr = "EPON NI with which this ONU interface is associated.", .offset = offsetof(bcmolt_epon_onu_1g_us_key, epon_ni), .type = &type_descr_uint16_t }, { .name = "onu_id", .descr = "Unique identifier of the ONU interface within its EPON NI.", .offset = offsetof(bcmolt_epon_onu_1g_us_key, onu_id), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_onu_1g_us_key = { .name = "bcmolt_epon_onu_1g_us_key", .descr = "key", .size = sizeof(bcmolt_epon_onu_1g_us_key), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_onu_1g_us_key_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_onu_1g_us_key_fields } } };
+
+/* Group: epon_onu_1g_us - stat */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_onu_1g_us_stat_good_frames = { .name = "good_frames", .descr = "Good Frame Count, including nonFEC and FEC", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_ONU_1G_US_STAT_ID_GOOD_FRAMES, .offset = offsetof(bcmolt_epon_onu_1g_us_stat_data, good_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_onu_1g_us_stat_good_bytes = { .name = "good_bytes", .descr = "Good Byte Count, including nonFEC and FEC", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_ONU_1G_US_STAT_ID_GOOD_BYTES, .offset = offsetof(bcmolt_epon_onu_1g_us_stat_data, good_bytes), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_onu_1g_us_stat_oversz_frames = { .name = "oversz_frames", .descr = "Oversized frame count (frames larger than 2000 bytes)", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_ONU_1G_US_STAT_ID_OVERSZ_FRAMES, .offset = offsetof(bcmolt_epon_onu_1g_us_stat_data, oversz_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_onu_1g_us_stat_non_fec_good_frames = { .name = "non_fec_good_frames", .descr = "Non FEC Good Frame Count", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_ONU_1G_US_STAT_ID_NON_FEC_GOOD_FRAMES, .offset = offsetof(bcmolt_epon_onu_1g_us_stat_data, non_fec_good_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_onu_1g_us_stat_non_fec_good_bytes = { .name = "non_fec_good_bytes", .descr = "Non FEC Good Byte Count", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_ONU_1G_US_STAT_ID_NON_FEC_GOOD_BYTES, .offset = offsetof(bcmolt_epon_onu_1g_us_stat_data, non_fec_good_bytes), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_onu_1g_us_stat_fec_good_frames = { .name = "fec_good_frames", .descr = "FEC Good Frame Count", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_GOOD_FRAMES, .offset = offsetof(bcmolt_epon_onu_1g_us_stat_data, fec_good_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_onu_1g_us_stat_fec_good_bytes = { .name = "fec_good_bytes", .descr = "FEC Good Byte Count", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_GOOD_BYTES, .offset = offsetof(bcmolt_epon_onu_1g_us_stat_data, fec_good_bytes), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_onu_1g_us_stat_fec_frames_exc_errs = { .name = "fec_frames_exc_errs", .descr = "FEC Frames which exceeded 8 symbol errors", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_FRAMES_EXC_ERRS, .offset = offsetof(bcmolt_epon_onu_1g_us_stat_data, fec_frames_exc_errs), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_onu_1g_us_stat_fec_blks_no_errs = { .name = "fec_blks_no_errs", .descr = "FEC Blocks with no errors", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_BLKS_NO_ERRS, .offset = offsetof(bcmolt_epon_onu_1g_us_stat_data, fec_blks_no_errs), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_onu_1g_us_stat_fec_blks_corr_errs = { .name = "fec_blks_corr_errs", .descr = "FEC Blocks with correctable errors", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_BLKS_CORR_ERRS, .offset = offsetof(bcmolt_epon_onu_1g_us_stat_data, fec_blks_corr_errs), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_onu_1g_us_stat_fec_blks_uncorr_errs = { .name = "fec_blks_uncorr_errs", .descr = "FEC Blocks with uncorrectable errors", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_BLKS_UNCORR_ERRS, .offset = offsetof(bcmolt_epon_onu_1g_us_stat_data, fec_blks_uncorr_errs), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_onu_1g_us_stat_fec_corr_bytes = { .name = "fec_corr_bytes", .descr = "FEC Corrected Bytes/Symbols", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_CORR_BYTES, .offset = offsetof(bcmolt_epon_onu_1g_us_stat_data, fec_corr_bytes), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_onu_1g_us_stat_fec_corr_zeroes = { .name = "fec_corr_zeroes", .descr = "FEC Corrected Zeroes, 8b domain", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_CORR_ZEROES, .offset = offsetof(bcmolt_epon_onu_1g_us_stat_data, fec_corr_zeroes), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_onu_1g_us_stat_fec_corr_ones = { .name = "fec_corr_ones", .descr = "FEC Corrected Ones, 8b domain", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_ONU_1G_US_STAT_ID_FEC_CORR_ONES, .offset = offsetof(bcmolt_epon_onu_1g_us_stat_data, fec_corr_ones), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_onu_1g_us_stat_undersz_frames = { .name = "undersz_frames", .descr = "Undersize frame count (frames less than 64 bytes)", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_ONU_1G_US_STAT_ID_UNDERSZ_FRAMES, .offset = offsetof(bcmolt_epon_onu_1g_us_stat_data, undersz_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_onu_1g_us_stat_errorsz_frames = { .name = "errorsz_frames", .descr = "Errored frame ", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_ONU_1G_US_STAT_ID_ERRORSZ_FRAMES, .offset = offsetof(bcmolt_epon_onu_1g_us_stat_data, errorsz_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr * BCM_DESCR epon_onu_1g_us_stat_prop_array[] = { &prop_descr_epon_onu_1g_us_stat_good_frames, &prop_descr_epon_onu_1g_us_stat_good_bytes, &prop_descr_epon_onu_1g_us_stat_oversz_frames, &prop_descr_epon_onu_1g_us_stat_non_fec_good_frames, &prop_descr_epon_onu_1g_us_stat_non_fec_good_bytes, &prop_descr_epon_onu_1g_us_stat_fec_good_frames, &prop_descr_epon_onu_1g_us_stat_fec_good_bytes, &prop_descr_epon_onu_1g_us_stat_fec_frames_exc_errs, &prop_descr_epon_onu_1g_us_stat_fec_blks_no_errs, &prop_descr_epon_onu_1g_us_stat_fec_blks_corr_errs, &prop_descr_epon_onu_1g_us_stat_fec_blks_uncorr_errs, &prop_descr_epon_onu_1g_us_stat_fec_corr_bytes, &prop_descr_epon_onu_1g_us_stat_fec_corr_zeroes, &prop_descr_epon_onu_1g_us_stat_fec_corr_ones, &prop_descr_epon_onu_1g_us_stat_undersz_frames, &prop_descr_epon_onu_1g_us_stat_errorsz_frames };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_onu_1g_us_stat_data_fields[] = { { .name = "good_frames", .descr = "Good Frame Count, including nonFEC and FEC", .offset = offsetof(bcmolt_epon_onu_1g_us_stat_data, good_frames), .type = &type_descr_uint64_t }, { .name = "good_bytes", .descr = "Good Byte Count, including nonFEC and FEC", .offset = offsetof(bcmolt_epon_onu_1g_us_stat_data, good_bytes), .type = &type_descr_uint64_t }, { .name = "oversz_frames", .descr = "Oversized frame count (frames larger than 2000 bytes)", .offset = offsetof(bcmolt_epon_onu_1g_us_stat_data, oversz_frames), .type = &type_descr_uint64_t }, { .name = "non_fec_good_frames", .descr = "Non FEC Good Frame Count", .offset = offsetof(bcmolt_epon_onu_1g_us_stat_data, non_fec_good_frames), .type = &type_descr_uint64_t }, { .name = "non_fec_good_bytes", .descr = "Non FEC Good Byte Count", .offset = offsetof(bcmolt_epon_onu_1g_us_stat_data, non_fec_good_bytes), .type = &type_descr_uint64_t }, { .name = "fec_good_frames", .descr = "FEC Good Frame Count", .offset = offsetof(bcmolt_epon_onu_1g_us_stat_data, fec_good_frames), .type = &type_descr_uint64_t }, { .name = "fec_good_bytes", .descr = "FEC Good Byte Count", .offset = offsetof(bcmolt_epon_onu_1g_us_stat_data, fec_good_bytes), .type = &type_descr_uint64_t }, { .name = "fec_frames_exc_errs", .descr = "FEC Frames which exceeded 8 symbol errors", .offset = offsetof(bcmolt_epon_onu_1g_us_stat_data, fec_frames_exc_errs), .type = &type_descr_uint64_t }, { .name = "fec_blks_no_errs", .descr = "FEC Blocks with no errors", .offset = offsetof(bcmolt_epon_onu_1g_us_stat_data, fec_blks_no_errs), .type = &type_descr_uint64_t }, { .name = "fec_blks_corr_errs", .descr = "FEC Blocks with correctable errors", .offset = offsetof(bcmolt_epon_onu_1g_us_stat_data, fec_blks_corr_errs), .type = &type_descr_uint64_t }, { .name = "fec_blks_uncorr_errs", .descr = "FEC Blocks with uncorrectable errors", .offset = offsetof(bcmolt_epon_onu_1g_us_stat_data, fec_blks_uncorr_errs), .type = &type_descr_uint64_t }, { .name = "fec_corr_bytes", .descr = "FEC Corrected Bytes/Symbols", .offset = offsetof(bcmolt_epon_onu_1g_us_stat_data, fec_corr_bytes), .type = &type_descr_uint64_t }, { .name = "fec_corr_zeroes", .descr = "FEC Corrected Zeroes, 8b domain", .offset = offsetof(bcmolt_epon_onu_1g_us_stat_data, fec_corr_zeroes), .type = &type_descr_uint64_t }, { .name = "fec_corr_ones", .descr = "FEC Corrected Ones, 8b domain", .offset = offsetof(bcmolt_epon_onu_1g_us_stat_data, fec_corr_ones), .type = &type_descr_uint64_t }, { .name = "undersz_frames", .descr = "Undersize frame count (frames less than 64 bytes)", .offset = offsetof(bcmolt_epon_onu_1g_us_stat_data, undersz_frames), .type = &type_descr_uint64_t }, { .name = "errorsz_frames", .descr = "Errored frame ", .offset = offsetof(bcmolt_epon_onu_1g_us_stat_data, errorsz_frames), .type = &type_descr_uint64_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_onu_1g_us_stat_data = { .name = "bcmolt_epon_onu_1g_us_stat_data", .descr = "stat", .size = sizeof(bcmolt_epon_onu_1g_us_stat_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_onu_1g_us_stat_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_onu_1g_us_stat_data_fields } } };
+
+/* Group: epon_onu_1g_us - cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_onu_1g_us_cfg_all_links = { .name = "all_links", .descr = "List of MAC Addresses for all links on the ONU Id.", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_EPON_ONU_1G_US_CFG_ID_ALL_LINKS, .offset = offsetof(bcmolt_epon_onu_1g_us_cfg_data, all_links), .type = &type_descr_bcmolt_macaddress_list_u32 };
+static bcmcli_prop_descr * BCM_DESCR epon_onu_1g_us_cfg_prop_array[] = { &prop_descr_epon_onu_1g_us_cfg_all_links };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_onu_1g_us_cfg_data_fields[] = { { .name = "all_links", .descr = "List of MAC Addresses for all links on the ONU Id.", .offset = offsetof(bcmolt_epon_onu_1g_us_cfg_data, all_links), .type = &type_descr_bcmolt_macaddress_list_u32 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_onu_1g_us_cfg_data = { .name = "bcmolt_epon_onu_1g_us_cfg_data", .descr = "cfg", .size = sizeof(bcmolt_epon_onu_1g_us_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_onu_1g_us_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_onu_1g_us_cfg_data_fields } } };
+
+/* Group: epon_onu_1g_us - stat_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_onu_1g_us_stat_cfg_cfg = { .name = "cfg", .descr = "Statistic alarm configuration.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_ONU_1G_US_STAT_CFG_ID_CFG, .offset = offsetof(bcmolt_epon_onu_1g_us_stat_cfg_data, cfg), .type = &type_descr_bcmolt_stat_alarm_config };
+static bcmcli_prop_descr * BCM_DESCR epon_onu_1g_us_stat_cfg_prop_array[] = { &prop_descr_epon_onu_1g_us_stat_cfg_cfg };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_onu_1g_us_stat_cfg_data_fields[] = { { .name = "cfg", .descr = "Statistic alarm configuration.", .offset = offsetof(bcmolt_epon_onu_1g_us_stat_cfg_data, cfg), .type = &type_descr_bcmolt_stat_alarm_config } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_onu_1g_us_stat_cfg_data = { .name = "bcmolt_epon_onu_1g_us_stat_cfg_data", .descr = "Statistic Configuration", .size = sizeof(bcmolt_epon_onu_1g_us_stat_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_onu_1g_us_stat_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_onu_1g_us_stat_cfg_data_fields } } };
+
+/* Group: epon_onu_1g_us - stat_alarm_raised */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_onu_1g_us_stat_alarm_raised_stat = { .name = "stat", .descr = "Statistic identifier.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_ONU_1G_US_STAT_ALARM_RAISED_ID_STAT, .offset = offsetof(bcmolt_epon_onu_1g_us_stat_alarm_raised_data, stat), .type = &type_descr_bcmolt_epon_onu_1g_us_stat_id };
+static bcmcli_prop_descr * BCM_DESCR epon_onu_1g_us_stat_alarm_raised_prop_array[] = { &prop_descr_epon_onu_1g_us_stat_alarm_raised_stat };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_onu_1g_us_stat_alarm_raised_data_fields[] = { { .name = "stat", .descr = "Statistic identifier.", .offset = offsetof(bcmolt_epon_onu_1g_us_stat_alarm_raised_data, stat), .type = &type_descr_bcmolt_epon_onu_1g_us_stat_id } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_onu_1g_us_stat_alarm_raised_data = { .name = "bcmolt_epon_onu_1g_us_stat_alarm_raised_data", .descr = "Sent when a configured statistic alarm condition has been met.", .size = sizeof(bcmolt_epon_onu_1g_us_stat_alarm_raised_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_onu_1g_us_stat_alarm_raised_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_onu_1g_us_stat_alarm_raised_data_fields } } };
+
+/* Group: epon_onu_1g_us - stat_alarm_cleared */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_onu_1g_us_stat_alarm_cleared_stat = { .name = "stat", .descr = "Statistic identifier.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_ONU_1G_US_STAT_ALARM_CLEARED_ID_STAT, .offset = offsetof(bcmolt_epon_onu_1g_us_stat_alarm_cleared_data, stat), .type = &type_descr_bcmolt_epon_onu_1g_us_stat_id };
+static bcmcli_prop_descr * BCM_DESCR epon_onu_1g_us_stat_alarm_cleared_prop_array[] = { &prop_descr_epon_onu_1g_us_stat_alarm_cleared_stat };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_onu_1g_us_stat_alarm_cleared_data_fields[] = { { .name = "stat", .descr = "Statistic identifier.", .offset = offsetof(bcmolt_epon_onu_1g_us_stat_alarm_cleared_data, stat), .type = &type_descr_bcmolt_epon_onu_1g_us_stat_id } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_onu_1g_us_stat_alarm_cleared_data = { .name = "bcmolt_epon_onu_1g_us_stat_alarm_cleared_data", .descr = "Sent when a configured statistic alarm condition is no longer met.", .size = sizeof(bcmolt_epon_onu_1g_us_stat_alarm_cleared_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_onu_1g_us_stat_alarm_cleared_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_onu_1g_us_stat_alarm_cleared_data_fields } } };
+
+/* Group: epon_onu_1g_us - auto_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_onu_1g_us_auto_cfg_stat_alarm_cleared = { .name = "stat_alarm_cleared", .descr = "If true, indications of type \"stat_alarm_cleared\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_ONU_1G_US_AUTO_CFG_ID_STAT_ALARM_CLEARED, .offset = offsetof(bcmolt_epon_onu_1g_us_auto_cfg_data, stat_alarm_cleared), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_onu_1g_us_auto_cfg_stat_alarm_raised = { .name = "stat_alarm_raised", .descr = "If true, indications of type \"stat_alarm_raised\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_ONU_1G_US_AUTO_CFG_ID_STAT_ALARM_RAISED, .offset = offsetof(bcmolt_epon_onu_1g_us_auto_cfg_data, stat_alarm_raised), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr * BCM_DESCR epon_onu_1g_us_auto_cfg_prop_array[] = { &prop_descr_epon_onu_1g_us_auto_cfg_stat_alarm_cleared, &prop_descr_epon_onu_1g_us_auto_cfg_stat_alarm_raised };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_onu_1g_us_auto_cfg_data_fields[] = { { .name = "stat_alarm_cleared", .descr = "If true, indications of type \"stat_alarm_cleared\" will be generated.", .offset = offsetof(bcmolt_epon_onu_1g_us_auto_cfg_data, stat_alarm_cleared), .type = &type_descr_bcmos_bool }, { .name = "stat_alarm_raised", .descr = "If true, indications of type \"stat_alarm_raised\" will be generated.", .offset = offsetof(bcmolt_epon_onu_1g_us_auto_cfg_data, stat_alarm_raised), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_onu_1g_us_auto_cfg_data = { .name = "bcmolt_epon_onu_1g_us_auto_cfg_data", .descr = "Indication Configuration", .size = sizeof(bcmolt_epon_onu_1g_us_auto_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_onu_1g_us_auto_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_onu_1g_us_auto_cfg_data_fields } } };
+
+/* ==== Object: epon_path_10g_ds ==== */
+
+/* Group: epon_path_10g_ds - key */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_ds_key_epon_ni = { .name = "epon_ni", .descr = "EPON NI associated with this 10G downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_DS_KEY_ID_EPON_NI, .offset = offsetof(bcmolt_epon_path_10g_ds_key, epon_ni), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr * BCM_DESCR epon_path_10g_ds_key_prop_array[] = { &prop_descr_epon_path_10g_ds_key_epon_ni };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_path_10g_ds_key_fields[] = { { .name = "epon_ni", .descr = "EPON NI associated with this 10G downstream path.", .offset = offsetof(bcmolt_epon_path_10g_ds_key, epon_ni), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_10g_ds_key = { .name = "bcmolt_epon_path_10g_ds_key", .descr = "key", .size = sizeof(bcmolt_epon_path_10g_ds_key), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_path_10g_ds_key_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_path_10g_ds_key_fields } } };
+
+/* Group: epon_path_10g_ds - cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_ds_cfg_fec_state = { .name = "fec_state", .descr = "FEC enable state for the 10G downstream path on this EPON NI.  This attribute cannot be changed while the EPON_NI is enabled.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_DS_CFG_ID_FEC_STATE, .offset = offsetof(bcmolt_epon_path_10g_ds_cfg_data, fec_state), .type = &type_descr_bcmolt_epon_fec_en_state };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_ds_cfg_prbs_generator = { .name = "prbs_generator", .descr = "DS PRBS generator configuration", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_DS_CFG_ID_PRBS_GENERATOR, .offset = offsetof(bcmolt_epon_path_10g_ds_cfg_data, prbs_generator), .type = &type_descr_bcmolt_prbs_generator_config };
+static bcmcli_prop_descr * BCM_DESCR epon_path_10g_ds_cfg_prop_array[] = { &prop_descr_epon_path_10g_ds_cfg_fec_state, &prop_descr_epon_path_10g_ds_cfg_prbs_generator };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_path_10g_ds_cfg_data_fields[] = { { .name = "fec_state", .descr = "FEC enable state for the 10G downstream path on this EPON NI.  This attribute cannot be changed while the EPON_NI is enabled.", .offset = offsetof(bcmolt_epon_path_10g_ds_cfg_data, fec_state), .type = &type_descr_bcmolt_epon_fec_en_state }, { .name = "prbs_generator", .descr = "DS PRBS generator configuration", .offset = offsetof(bcmolt_epon_path_10g_ds_cfg_data, prbs_generator), .type = &type_descr_bcmolt_prbs_generator_config } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_10g_ds_cfg_data = { .name = "bcmolt_epon_path_10g_ds_cfg_data", .descr = "cfg", .size = sizeof(bcmolt_epon_path_10g_ds_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_path_10g_ds_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_path_10g_ds_cfg_data_fields } } };
+
+/* Group: epon_path_10g_ds - stat */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_ds_stat_bytes = { .name = "bytes", .descr = "The number of bytes transmitted on this 10g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_DS_STAT_ID_BYTES, .offset = offsetof(bcmolt_epon_path_10g_ds_stat_data, bytes), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_ds_stat_frames = { .name = "frames", .descr = "The number of frames transmitted on this 10g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES, .offset = offsetof(bcmolt_epon_path_10g_ds_stat_data, frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_ds_stat_frames_64 = { .name = "frames_64", .descr = "The number of 64 byte frames transmitted on this 10g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_64, .offset = offsetof(bcmolt_epon_path_10g_ds_stat_data, frames_64), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_ds_stat_frames_65_127 = { .name = "frames_65_127", .descr = "The number of 65 to 127 byte frames transmitted on this 10g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_65_127, .offset = offsetof(bcmolt_epon_path_10g_ds_stat_data, frames_65_127), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_ds_stat_frames_128_255 = { .name = "frames_128_255", .descr = "The number of 128 to 255 byte frames transmitted on this 10g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_128_255, .offset = offsetof(bcmolt_epon_path_10g_ds_stat_data, frames_128_255), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_ds_stat_frames_256_511 = { .name = "frames_256_511", .descr = "The number of 256 to 511 byte frames transmitted on this 10g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_256_511, .offset = offsetof(bcmolt_epon_path_10g_ds_stat_data, frames_256_511), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_ds_stat_frames_512_1023 = { .name = "frames_512_1023", .descr = "The number of 512 to 1023 byte frames transmitted on this 10g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_512_1023, .offset = offsetof(bcmolt_epon_path_10g_ds_stat_data, frames_512_1023), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_ds_stat_frames_1024_1518 = { .name = "frames_1024_1518", .descr = "The number of 1024 to 1518 byte frames transmitted on this 10g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_1024_1518, .offset = offsetof(bcmolt_epon_path_10g_ds_stat_data, frames_1024_1518), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_ds_stat_frames_1519_2047 = { .name = "frames_1519_2047", .descr = "The number of 1519 to 2047 byte frames transmitted on this 10g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_1519_2047, .offset = offsetof(bcmolt_epon_path_10g_ds_stat_data, frames_1519_2047), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_ds_stat_frames_2048_4095 = { .name = "frames_2048_4095", .descr = "The number of 2048 to 4095 byte frames transmitted on this 10g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_2048_4095, .offset = offsetof(bcmolt_epon_path_10g_ds_stat_data, frames_2048_4095), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_ds_stat_frames_4096_9216 = { .name = "frames_4096_9216", .descr = "The number of 4096 to 9216 byte frames transmitted on this 10g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_4096_9216, .offset = offsetof(bcmolt_epon_path_10g_ds_stat_data, frames_4096_9216), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_ds_stat_frames_9217_16383 = { .name = "frames_9217_16383", .descr = "The number of 9217 to 16383 byte frames transmitted on this 10g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_DS_STAT_ID_FRAMES_9217_16383, .offset = offsetof(bcmolt_epon_path_10g_ds_stat_data, frames_9217_16383), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_ds_stat_broadcast_frames = { .name = "broadcast_frames", .descr = "The number of broadcast frames transmitted on this 10g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_DS_STAT_ID_BROADCAST_FRAMES, .offset = offsetof(bcmolt_epon_path_10g_ds_stat_data, broadcast_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_ds_stat_data_bytes = { .name = "data_bytes", .descr = "The number of data bytes transmitted on this 10g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_DS_STAT_ID_DATA_BYTES, .offset = offsetof(bcmolt_epon_path_10g_ds_stat_data, data_bytes), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_ds_stat_multicast_frames = { .name = "multicast_frames", .descr = "The number of multicast frames transmitted on this 10g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_DS_STAT_ID_MULTICAST_FRAMES, .offset = offsetof(bcmolt_epon_path_10g_ds_stat_data, multicast_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_ds_stat_unicast_frames = { .name = "unicast_frames", .descr = "The number of unicast frames transmitted on this 10g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_DS_STAT_ID_UNICAST_FRAMES, .offset = offsetof(bcmolt_epon_path_10g_ds_stat_data, unicast_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_ds_stat_oam_bytes = { .name = "oam_bytes", .descr = "Number of OAM bytes transmitted on this 10g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_DS_STAT_ID_OAM_BYTES, .offset = offsetof(bcmolt_epon_path_10g_ds_stat_data, oam_bytes), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_ds_stat_oam_frames = { .name = "oam_frames", .descr = "Number of OAM frames transmitted on this 10g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_DS_STAT_ID_OAM_FRAMES, .offset = offsetof(bcmolt_epon_path_10g_ds_stat_data, oam_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_ds_stat_gate_frames = { .name = "gate_frames", .descr = "Number of gate frames transmitted on this 10g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_DS_STAT_ID_GATE_FRAMES, .offset = offsetof(bcmolt_epon_path_10g_ds_stat_data, gate_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_ds_stat_mpcp_frames = { .name = "mpcp_frames", .descr = "Number of MPCP frames transmitted on this 10g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_DS_STAT_ID_MPCP_FRAMES, .offset = offsetof(bcmolt_epon_path_10g_ds_stat_data, mpcp_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_ds_stat_abort_frames = { .name = "abort_frames", .descr = "Number of abort frames transmitted on this 10g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_DS_STAT_ID_ABORT_FRAMES, .offset = offsetof(bcmolt_epon_path_10g_ds_stat_data, abort_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr * BCM_DESCR epon_path_10g_ds_stat_prop_array[] = { &prop_descr_epon_path_10g_ds_stat_bytes, &prop_descr_epon_path_10g_ds_stat_frames, &prop_descr_epon_path_10g_ds_stat_frames_64, &prop_descr_epon_path_10g_ds_stat_frames_65_127, &prop_descr_epon_path_10g_ds_stat_frames_128_255, &prop_descr_epon_path_10g_ds_stat_frames_256_511, &prop_descr_epon_path_10g_ds_stat_frames_512_1023, &prop_descr_epon_path_10g_ds_stat_frames_1024_1518, &prop_descr_epon_path_10g_ds_stat_frames_1519_2047, &prop_descr_epon_path_10g_ds_stat_frames_2048_4095, &prop_descr_epon_path_10g_ds_stat_frames_4096_9216, &prop_descr_epon_path_10g_ds_stat_frames_9217_16383, &prop_descr_epon_path_10g_ds_stat_broadcast_frames, &prop_descr_epon_path_10g_ds_stat_data_bytes, &prop_descr_epon_path_10g_ds_stat_multicast_frames, &prop_descr_epon_path_10g_ds_stat_unicast_frames, &prop_descr_epon_path_10g_ds_stat_oam_bytes, &prop_descr_epon_path_10g_ds_stat_oam_frames, &prop_descr_epon_path_10g_ds_stat_gate_frames, &prop_descr_epon_path_10g_ds_stat_mpcp_frames, &prop_descr_epon_path_10g_ds_stat_abort_frames };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_path_10g_ds_stat_data_fields[] = { { .name = "bytes", .descr = "The number of bytes transmitted on this 10g downstream path.", .offset = offsetof(bcmolt_epon_path_10g_ds_stat_data, bytes), .type = &type_descr_uint64_t }, { .name = "frames", .descr = "The number of frames transmitted on this 10g downstream path.", .offset = offsetof(bcmolt_epon_path_10g_ds_stat_data, frames), .type = &type_descr_uint64_t }, { .name = "frames_64", .descr = "The number of 64 byte frames transmitted on this 10g downstream path.", .offset = offsetof(bcmolt_epon_path_10g_ds_stat_data, frames_64), .type = &type_descr_uint64_t }, { .name = "frames_65_127", .descr = "The number of 65 to 127 byte frames transmitted on this 10g downstream path.", .offset = offsetof(bcmolt_epon_path_10g_ds_stat_data, frames_65_127), .type = &type_descr_uint64_t }, { .name = "frames_128_255", .descr = "The number of 128 to 255 byte frames transmitted on this 10g downstream path.", .offset = offsetof(bcmolt_epon_path_10g_ds_stat_data, frames_128_255), .type = &type_descr_uint64_t }, { .name = "frames_256_511", .descr = "The number of 256 to 511 byte frames transmitted on this 10g downstream path.", .offset = offsetof(bcmolt_epon_path_10g_ds_stat_data, frames_256_511), .type = &type_descr_uint64_t }, { .name = "frames_512_1023", .descr = "The number of 512 to 1023 byte frames transmitted on this 10g downstream path.", .offset = offsetof(bcmolt_epon_path_10g_ds_stat_data, frames_512_1023), .type = &type_descr_uint64_t }, { .name = "frames_1024_1518", .descr = "The number of 1024 to 1518 byte frames transmitted on this 10g downstream path.", .offset = offsetof(bcmolt_epon_path_10g_ds_stat_data, frames_1024_1518), .type = &type_descr_uint64_t }, { .name = "frames_1519_2047", .descr = "The number of 1519 to 2047 byte frames transmitted on this 10g downstream path.", .offset = offsetof(bcmolt_epon_path_10g_ds_stat_data, frames_1519_2047), .type = &type_descr_uint64_t }, { .name = "frames_2048_4095", .descr = "The number of 2048 to 4095 byte frames transmitted on this 10g downstream path.", .offset = offsetof(bcmolt_epon_path_10g_ds_stat_data, frames_2048_4095), .type = &type_descr_uint64_t }, { .name = "frames_4096_9216", .descr = "The number of 4096 to 9216 byte frames transmitted on this 10g downstream path.", .offset = offsetof(bcmolt_epon_path_10g_ds_stat_data, frames_4096_9216), .type = &type_descr_uint64_t }, { .name = "frames_9217_16383", .descr = "The number of 9217 to 16383 byte frames transmitted on this 10g downstream path.", .offset = offsetof(bcmolt_epon_path_10g_ds_stat_data, frames_9217_16383), .type = &type_descr_uint64_t }, { .name = "broadcast_frames", .descr = "The number of broadcast frames transmitted on this 10g downstream path.", .offset = offsetof(bcmolt_epon_path_10g_ds_stat_data, broadcast_frames), .type = &type_descr_uint64_t }, { .name = "data_bytes", .descr = "The number of data bytes transmitted on this 10g downstream path.", .offset = offsetof(bcmolt_epon_path_10g_ds_stat_data, data_bytes), .type = &type_descr_uint64_t }, { .name = "multicast_frames", .descr = "The number of multicast frames transmitted on this 10g downstream path.", .offset = offsetof(bcmolt_epon_path_10g_ds_stat_data, multicast_frames), .type = &type_descr_uint64_t }, { .name = "unicast_frames", .descr = "The number of unicast frames transmitted on this 10g downstream path.", .offset = offsetof(bcmolt_epon_path_10g_ds_stat_data, unicast_frames), .type = &type_descr_uint64_t }, { .name = "oam_bytes", .descr = "Number of OAM bytes transmitted on this 10g downstream path.", .offset = offsetof(bcmolt_epon_path_10g_ds_stat_data, oam_bytes), .type = &type_descr_uint64_t }, { .name = "oam_frames", .descr = "Number of OAM frames transmitted on this 10g downstream path.", .offset = offsetof(bcmolt_epon_path_10g_ds_stat_data, oam_frames), .type = &type_descr_uint64_t }, { .name = "gate_frames", .descr = "Number of gate frames transmitted on this 10g downstream path.", .offset = offsetof(bcmolt_epon_path_10g_ds_stat_data, gate_frames), .type = &type_descr_uint64_t }, { .name = "mpcp_frames", .descr = "Number of MPCP frames transmitted on this 10g downstream path.", .offset = offsetof(bcmolt_epon_path_10g_ds_stat_data, mpcp_frames), .type = &type_descr_uint64_t }, { .name = "abort_frames", .descr = "Number of abort frames transmitted on this 10g downstream path.", .offset = offsetof(bcmolt_epon_path_10g_ds_stat_data, abort_frames), .type = &type_descr_uint64_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_10g_ds_stat_data = { .name = "bcmolt_epon_path_10g_ds_stat_data", .descr = "stat", .size = sizeof(bcmolt_epon_path_10g_ds_stat_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_path_10g_ds_stat_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_path_10g_ds_stat_data_fields } } };
+
+/* Group: epon_path_10g_ds - stat_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_ds_stat_cfg_cfg = { .name = "cfg", .descr = "Statistic alarm configuration.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_DS_STAT_CFG_ID_CFG, .offset = offsetof(bcmolt_epon_path_10g_ds_stat_cfg_data, cfg), .type = &type_descr_bcmolt_stat_alarm_config };
+static bcmcli_prop_descr * BCM_DESCR epon_path_10g_ds_stat_cfg_prop_array[] = { &prop_descr_epon_path_10g_ds_stat_cfg_cfg };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_path_10g_ds_stat_cfg_data_fields[] = { { .name = "cfg", .descr = "Statistic alarm configuration.", .offset = offsetof(bcmolt_epon_path_10g_ds_stat_cfg_data, cfg), .type = &type_descr_bcmolt_stat_alarm_config } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_10g_ds_stat_cfg_data = { .name = "bcmolt_epon_path_10g_ds_stat_cfg_data", .descr = "Statistic Configuration", .size = sizeof(bcmolt_epon_path_10g_ds_stat_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_path_10g_ds_stat_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_path_10g_ds_stat_cfg_data_fields } } };
+
+/* Group: epon_path_10g_ds - stat_alarm_raised */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_ds_stat_alarm_raised_stat = { .name = "stat", .descr = "Statistic identifier.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_DS_STAT_ALARM_RAISED_ID_STAT, .offset = offsetof(bcmolt_epon_path_10g_ds_stat_alarm_raised_data, stat), .type = &type_descr_bcmolt_epon_path_10g_ds_stat_id };
+static bcmcli_prop_descr * BCM_DESCR epon_path_10g_ds_stat_alarm_raised_prop_array[] = { &prop_descr_epon_path_10g_ds_stat_alarm_raised_stat };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_path_10g_ds_stat_alarm_raised_data_fields[] = { { .name = "stat", .descr = "Statistic identifier.", .offset = offsetof(bcmolt_epon_path_10g_ds_stat_alarm_raised_data, stat), .type = &type_descr_bcmolt_epon_path_10g_ds_stat_id } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_10g_ds_stat_alarm_raised_data = { .name = "bcmolt_epon_path_10g_ds_stat_alarm_raised_data", .descr = "Sent when a configured statistic alarm condition has been met.", .size = sizeof(bcmolt_epon_path_10g_ds_stat_alarm_raised_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_path_10g_ds_stat_alarm_raised_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_path_10g_ds_stat_alarm_raised_data_fields } } };
+
+/* Group: epon_path_10g_ds - stat_alarm_cleared */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_ds_stat_alarm_cleared_stat = { .name = "stat", .descr = "Statistic identifier.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_DS_STAT_ALARM_CLEARED_ID_STAT, .offset = offsetof(bcmolt_epon_path_10g_ds_stat_alarm_cleared_data, stat), .type = &type_descr_bcmolt_epon_path_10g_ds_stat_id };
+static bcmcli_prop_descr * BCM_DESCR epon_path_10g_ds_stat_alarm_cleared_prop_array[] = { &prop_descr_epon_path_10g_ds_stat_alarm_cleared_stat };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_path_10g_ds_stat_alarm_cleared_data_fields[] = { { .name = "stat", .descr = "Statistic identifier.", .offset = offsetof(bcmolt_epon_path_10g_ds_stat_alarm_cleared_data, stat), .type = &type_descr_bcmolt_epon_path_10g_ds_stat_id } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_10g_ds_stat_alarm_cleared_data = { .name = "bcmolt_epon_path_10g_ds_stat_alarm_cleared_data", .descr = "Sent when a configured statistic alarm condition is no longer met.", .size = sizeof(bcmolt_epon_path_10g_ds_stat_alarm_cleared_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_path_10g_ds_stat_alarm_cleared_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_path_10g_ds_stat_alarm_cleared_data_fields } } };
+
+/* Group: epon_path_10g_ds - auto_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_ds_auto_cfg_stat_alarm_cleared = { .name = "stat_alarm_cleared", .descr = "If true, indications of type \"stat_alarm_cleared\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_DS_AUTO_CFG_ID_STAT_ALARM_CLEARED, .offset = offsetof(bcmolt_epon_path_10g_ds_auto_cfg_data, stat_alarm_cleared), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_ds_auto_cfg_stat_alarm_raised = { .name = "stat_alarm_raised", .descr = "If true, indications of type \"stat_alarm_raised\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_DS_AUTO_CFG_ID_STAT_ALARM_RAISED, .offset = offsetof(bcmolt_epon_path_10g_ds_auto_cfg_data, stat_alarm_raised), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr * BCM_DESCR epon_path_10g_ds_auto_cfg_prop_array[] = { &prop_descr_epon_path_10g_ds_auto_cfg_stat_alarm_cleared, &prop_descr_epon_path_10g_ds_auto_cfg_stat_alarm_raised };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_path_10g_ds_auto_cfg_data_fields[] = { { .name = "stat_alarm_cleared", .descr = "If true, indications of type \"stat_alarm_cleared\" will be generated.", .offset = offsetof(bcmolt_epon_path_10g_ds_auto_cfg_data, stat_alarm_cleared), .type = &type_descr_bcmos_bool }, { .name = "stat_alarm_raised", .descr = "If true, indications of type \"stat_alarm_raised\" will be generated.", .offset = offsetof(bcmolt_epon_path_10g_ds_auto_cfg_data, stat_alarm_raised), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_10g_ds_auto_cfg_data = { .name = "bcmolt_epon_path_10g_ds_auto_cfg_data", .descr = "Indication Configuration", .size = sizeof(bcmolt_epon_path_10g_ds_auto_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_path_10g_ds_auto_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_path_10g_ds_auto_cfg_data_fields } } };
+
+/* ==== Object: epon_path_10g_us ==== */
+
+/* Group: epon_path_10g_us - key */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_us_key_epon_ni = { .name = "epon_ni", .descr = "EPON NI associated with this 10G upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_US_KEY_ID_EPON_NI, .offset = offsetof(bcmolt_epon_path_10g_us_key, epon_ni), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr * BCM_DESCR epon_path_10g_us_key_prop_array[] = { &prop_descr_epon_path_10g_us_key_epon_ni };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_path_10g_us_key_fields[] = { { .name = "epon_ni", .descr = "EPON NI associated with this 10G upstream path.", .offset = offsetof(bcmolt_epon_path_10g_us_key, epon_ni), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_10g_us_key = { .name = "bcmolt_epon_path_10g_us_key", .descr = "key", .size = sizeof(bcmolt_epon_path_10g_us_key), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_path_10g_us_key_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_path_10g_us_key_fields } } };
+
+/* Group: epon_path_10g_us - cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_us_cfg_fec_state = { .name = "fec_state", .descr = "FEC enable state for the 10G upstream path on this EPON NI.  This attribute cannot be changed while the EPON_NI is enabled.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_US_CFG_ID_FEC_STATE, .offset = offsetof(bcmolt_epon_path_10g_us_cfg_data, fec_state), .type = &type_descr_bcmolt_epon_fec_en_state };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_us_cfg_sync_time_tq = { .name = "sync_time_tq", .descr = "Time quanta of sync at start of US burst.  This attribute cannot be changed while the EPON_NI is enabled.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_US_CFG_ID_SYNC_TIME_TQ, .offset = offsetof(bcmolt_epon_path_10g_us_cfg_data, sync_time_tq), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_us_cfg_prbs_checker = { .name = "prbs_checker", .descr = "US PRBS checker configuration", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_US_CFG_ID_PRBS_CHECKER, .offset = offsetof(bcmolt_epon_path_10g_us_cfg_data, prbs_checker), .type = &type_descr_bcmolt_prbs_checker_config };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_us_cfg_prbs_status = { .name = "prbs_status", .descr = "Result of US PRBS checker", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_EPON_PATH_10G_US_CFG_ID_PRBS_STATUS, .offset = offsetof(bcmolt_epon_path_10g_us_cfg_data, prbs_status), .type = &type_descr_bcmolt_prbs_status };
+static bcmcli_prop_descr * BCM_DESCR epon_path_10g_us_cfg_prop_array[] = { &prop_descr_epon_path_10g_us_cfg_fec_state, &prop_descr_epon_path_10g_us_cfg_sync_time_tq, &prop_descr_epon_path_10g_us_cfg_prbs_checker, &prop_descr_epon_path_10g_us_cfg_prbs_status };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_path_10g_us_cfg_data_fields[] = { { .name = "fec_state", .descr = "FEC enable state for the 10G upstream path on this EPON NI.  This attribute cannot be changed while the EPON_NI is enabled.", .offset = offsetof(bcmolt_epon_path_10g_us_cfg_data, fec_state), .type = &type_descr_bcmolt_epon_fec_en_state }, { .name = "sync_time_tq", .descr = "Time quanta of sync at start of US burst.  This attribute cannot be changed while the EPON_NI is enabled.", .offset = offsetof(bcmolt_epon_path_10g_us_cfg_data, sync_time_tq), .type = &type_descr_uint32_t }, { .name = "prbs_checker", .descr = "US PRBS checker configuration", .offset = offsetof(bcmolt_epon_path_10g_us_cfg_data, prbs_checker), .type = &type_descr_bcmolt_prbs_checker_config }, { .name = "prbs_status", .descr = "Result of US PRBS checker", .offset = offsetof(bcmolt_epon_path_10g_us_cfg_data, prbs_status), .type = &type_descr_bcmolt_prbs_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_10g_us_cfg_data = { .name = "bcmolt_epon_path_10g_us_cfg_data", .descr = "cfg", .size = sizeof(bcmolt_epon_path_10g_us_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_path_10g_us_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_path_10g_us_cfg_data_fields } } };
+
+/* Group: epon_path_10g_us - stat */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_us_stat_bytes = { .name = "bytes", .descr = "The number of bytes received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_US_STAT_ID_BYTES, .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, bytes), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_us_stat_frames = { .name = "frames", .descr = "The number of frames received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES, .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_us_stat_frames_64 = { .name = "frames_64", .descr = "The number of 64 byte frames received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_64, .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, frames_64), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_us_stat_frames_65_127 = { .name = "frames_65_127", .descr = "The number of 65 to 127 byte frames received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_65_127, .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, frames_65_127), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_us_stat_frames_128_255 = { .name = "frames_128_255", .descr = "The number of 128 to 255 byte frames received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_128_255, .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, frames_128_255), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_us_stat_frames_256_511 = { .name = "frames_256_511", .descr = "The number of 256 to 511 byte frames received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_256_511, .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, frames_256_511), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_us_stat_frames_512_1023 = { .name = "frames_512_1023", .descr = "The number of 512 to 1023 byte frames received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_512_1023, .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, frames_512_1023), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_us_stat_frames_1024_1518 = { .name = "frames_1024_1518", .descr = "The number of 1024 to 1518 byte frames received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_1024_1518, .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, frames_1024_1518), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_us_stat_frames_1519_2047 = { .name = "frames_1519_2047", .descr = "The number of 1519 to 2047 byte frames received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_1519_2047, .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, frames_1519_2047), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_us_stat_frames_2048_4095 = { .name = "frames_2048_4095", .descr = "The number of 2048 to 4095 byte frames received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_2048_4095, .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, frames_2048_4095), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_us_stat_frames_4096_9216 = { .name = "frames_4096_9216", .descr = "The number of 4096 to 9216 byte frames received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_4096_9216, .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, frames_4096_9216), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_us_stat_frames_9217_16383 = { .name = "frames_9217_16383", .descr = "The number of 9217 to 16383 byte frames received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_US_STAT_ID_FRAMES_9217_16383, .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, frames_9217_16383), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_us_stat_broadcast_frames = { .name = "broadcast_frames", .descr = "The number of broadcast frames received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_US_STAT_ID_BROADCAST_FRAMES, .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, broadcast_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_us_stat_data_bytes = { .name = "data_bytes", .descr = "The number of data bytes received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_US_STAT_ID_DATA_BYTES, .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, data_bytes), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_us_stat_multicast_frames = { .name = "multicast_frames", .descr = "The number of multicast frames received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_US_STAT_ID_MULTICAST_FRAMES, .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, multicast_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_us_stat_unicast_frames = { .name = "unicast_frames", .descr = "The number of unicast frames received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_US_STAT_ID_UNICAST_FRAMES, .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, unicast_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_us_stat_mpcp_frames = { .name = "mpcp_frames", .descr = "The number of MPCP frames received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_US_STAT_ID_MPCP_FRAMES, .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, mpcp_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_us_stat_oam_bytes = { .name = "oam_bytes", .descr = "The number of OAM bytes received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_US_STAT_ID_OAM_BYTES, .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, oam_bytes), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_us_stat_oam_frames = { .name = "oam_frames", .descr = "The number of OAM frames received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_US_STAT_ID_OAM_FRAMES, .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, oam_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_us_stat_report_frames = { .name = "report_frames", .descr = "The number of report frames received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_US_STAT_ID_REPORT_FRAMES, .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, report_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_us_stat_abort_frames = { .name = "abort_frames", .descr = "The number of abort frames received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_US_STAT_ID_ABORT_FRAMES, .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, abort_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_us_stat_fcs_error = { .name = "fcs_error", .descr = "The number of bad FCS errors received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_US_STAT_ID_FCS_ERROR, .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, fcs_error), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_us_stat_crc_8_error = { .name = "crc_8_error", .descr = "The number of CRC8 errors received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_US_STAT_ID_CRC_8_ERROR, .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, crc_8_error), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_us_stat_out_of_slot = { .name = "out_of_slot", .descr = "The number of out of slot errors received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_US_STAT_ID_OUT_OF_SLOT, .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, out_of_slot), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_us_stat_oversize_error = { .name = "oversize_error", .descr = "The number of oversize errors received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_US_STAT_ID_OVERSIZE_ERROR, .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, oversize_error), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_us_stat_runt_error = { .name = "runt_error", .descr = "The number of runt errors received on this 10g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_US_STAT_ID_RUNT_ERROR, .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, runt_error), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr * BCM_DESCR epon_path_10g_us_stat_prop_array[] = { &prop_descr_epon_path_10g_us_stat_bytes, &prop_descr_epon_path_10g_us_stat_frames, &prop_descr_epon_path_10g_us_stat_frames_64, &prop_descr_epon_path_10g_us_stat_frames_65_127, &prop_descr_epon_path_10g_us_stat_frames_128_255, &prop_descr_epon_path_10g_us_stat_frames_256_511, &prop_descr_epon_path_10g_us_stat_frames_512_1023, &prop_descr_epon_path_10g_us_stat_frames_1024_1518, &prop_descr_epon_path_10g_us_stat_frames_1519_2047, &prop_descr_epon_path_10g_us_stat_frames_2048_4095, &prop_descr_epon_path_10g_us_stat_frames_4096_9216, &prop_descr_epon_path_10g_us_stat_frames_9217_16383, &prop_descr_epon_path_10g_us_stat_broadcast_frames, &prop_descr_epon_path_10g_us_stat_data_bytes, &prop_descr_epon_path_10g_us_stat_multicast_frames, &prop_descr_epon_path_10g_us_stat_unicast_frames, &prop_descr_epon_path_10g_us_stat_mpcp_frames, &prop_descr_epon_path_10g_us_stat_oam_bytes, &prop_descr_epon_path_10g_us_stat_oam_frames, &prop_descr_epon_path_10g_us_stat_report_frames, &prop_descr_epon_path_10g_us_stat_abort_frames, &prop_descr_epon_path_10g_us_stat_fcs_error, &prop_descr_epon_path_10g_us_stat_crc_8_error, &prop_descr_epon_path_10g_us_stat_out_of_slot, &prop_descr_epon_path_10g_us_stat_oversize_error, &prop_descr_epon_path_10g_us_stat_runt_error };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_path_10g_us_stat_data_fields[] = { { .name = "bytes", .descr = "The number of bytes received on this 10g upstream path.", .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, bytes), .type = &type_descr_uint64_t }, { .name = "frames", .descr = "The number of frames received on this 10g upstream path.", .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, frames), .type = &type_descr_uint64_t }, { .name = "frames_64", .descr = "The number of 64 byte frames received on this 10g upstream path.", .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, frames_64), .type = &type_descr_uint64_t }, { .name = "frames_65_127", .descr = "The number of 65 to 127 byte frames received on this 10g upstream path.", .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, frames_65_127), .type = &type_descr_uint64_t }, { .name = "frames_128_255", .descr = "The number of 128 to 255 byte frames received on this 10g upstream path.", .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, frames_128_255), .type = &type_descr_uint64_t }, { .name = "frames_256_511", .descr = "The number of 256 to 511 byte frames received on this 10g upstream path.", .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, frames_256_511), .type = &type_descr_uint64_t }, { .name = "frames_512_1023", .descr = "The number of 512 to 1023 byte frames received on this 10g upstream path.", .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, frames_512_1023), .type = &type_descr_uint64_t }, { .name = "frames_1024_1518", .descr = "The number of 1024 to 1518 byte frames received on this 10g upstream path.", .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, frames_1024_1518), .type = &type_descr_uint64_t }, { .name = "frames_1519_2047", .descr = "The number of 1519 to 2047 byte frames received on this 10g upstream path.", .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, frames_1519_2047), .type = &type_descr_uint64_t }, { .name = "frames_2048_4095", .descr = "The number of 2048 to 4095 byte frames received on this 10g upstream path.", .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, frames_2048_4095), .type = &type_descr_uint64_t }, { .name = "frames_4096_9216", .descr = "The number of 4096 to 9216 byte frames received on this 10g upstream path.", .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, frames_4096_9216), .type = &type_descr_uint64_t }, { .name = "frames_9217_16383", .descr = "The number of 9217 to 16383 byte frames received on this 10g upstream path.", .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, frames_9217_16383), .type = &type_descr_uint64_t }, { .name = "broadcast_frames", .descr = "The number of broadcast frames received on this 10g upstream path.", .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, broadcast_frames), .type = &type_descr_uint64_t }, { .name = "data_bytes", .descr = "The number of data bytes received on this 10g upstream path.", .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, data_bytes), .type = &type_descr_uint64_t }, { .name = "multicast_frames", .descr = "The number of multicast frames received on this 10g upstream path.", .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, multicast_frames), .type = &type_descr_uint64_t }, { .name = "unicast_frames", .descr = "The number of unicast frames received on this 10g upstream path.", .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, unicast_frames), .type = &type_descr_uint64_t }, { .name = "mpcp_frames", .descr = "The number of MPCP frames received on this 10g upstream path.", .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, mpcp_frames), .type = &type_descr_uint64_t }, { .name = "oam_bytes", .descr = "The number of OAM bytes received on this 10g upstream path.", .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, oam_bytes), .type = &type_descr_uint64_t }, { .name = "oam_frames", .descr = "The number of OAM frames received on this 10g upstream path.", .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, oam_frames), .type = &type_descr_uint64_t }, { .name = "report_frames", .descr = "The number of report frames received on this 10g upstream path.", .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, report_frames), .type = &type_descr_uint64_t }, { .name = "abort_frames", .descr = "The number of abort frames received on this 10g upstream path.", .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, abort_frames), .type = &type_descr_uint64_t }, { .name = "fcs_error", .descr = "The number of bad FCS errors received on this 10g upstream path.", .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, fcs_error), .type = &type_descr_uint64_t }, { .name = "crc_8_error", .descr = "The number of CRC8 errors received on this 10g upstream path.", .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, crc_8_error), .type = &type_descr_uint64_t }, { .name = "out_of_slot", .descr = "The number of out of slot errors received on this 10g upstream path.", .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, out_of_slot), .type = &type_descr_uint64_t }, { .name = "oversize_error", .descr = "The number of oversize errors received on this 10g upstream path.", .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, oversize_error), .type = &type_descr_uint64_t }, { .name = "runt_error", .descr = "The number of runt errors received on this 10g upstream path.", .offset = offsetof(bcmolt_epon_path_10g_us_stat_data, runt_error), .type = &type_descr_uint64_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_10g_us_stat_data = { .name = "bcmolt_epon_path_10g_us_stat_data", .descr = "stat", .size = sizeof(bcmolt_epon_path_10g_us_stat_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_path_10g_us_stat_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_path_10g_us_stat_data_fields } } };
+
+/* Group: epon_path_10g_us - stat_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_us_stat_cfg_cfg = { .name = "cfg", .descr = "Statistic alarm configuration.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_US_STAT_CFG_ID_CFG, .offset = offsetof(bcmolt_epon_path_10g_us_stat_cfg_data, cfg), .type = &type_descr_bcmolt_stat_alarm_config };
+static bcmcli_prop_descr * BCM_DESCR epon_path_10g_us_stat_cfg_prop_array[] = { &prop_descr_epon_path_10g_us_stat_cfg_cfg };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_path_10g_us_stat_cfg_data_fields[] = { { .name = "cfg", .descr = "Statistic alarm configuration.", .offset = offsetof(bcmolt_epon_path_10g_us_stat_cfg_data, cfg), .type = &type_descr_bcmolt_stat_alarm_config } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_10g_us_stat_cfg_data = { .name = "bcmolt_epon_path_10g_us_stat_cfg_data", .descr = "Statistic Configuration", .size = sizeof(bcmolt_epon_path_10g_us_stat_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_path_10g_us_stat_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_path_10g_us_stat_cfg_data_fields } } };
+
+/* Group: epon_path_10g_us - stat_alarm_raised */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_us_stat_alarm_raised_stat = { .name = "stat", .descr = "Statistic identifier.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_US_STAT_ALARM_RAISED_ID_STAT, .offset = offsetof(bcmolt_epon_path_10g_us_stat_alarm_raised_data, stat), .type = &type_descr_bcmolt_epon_path_10g_us_stat_id };
+static bcmcli_prop_descr * BCM_DESCR epon_path_10g_us_stat_alarm_raised_prop_array[] = { &prop_descr_epon_path_10g_us_stat_alarm_raised_stat };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_path_10g_us_stat_alarm_raised_data_fields[] = { { .name = "stat", .descr = "Statistic identifier.", .offset = offsetof(bcmolt_epon_path_10g_us_stat_alarm_raised_data, stat), .type = &type_descr_bcmolt_epon_path_10g_us_stat_id } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_10g_us_stat_alarm_raised_data = { .name = "bcmolt_epon_path_10g_us_stat_alarm_raised_data", .descr = "Sent when a configured statistic alarm condition has been met.", .size = sizeof(bcmolt_epon_path_10g_us_stat_alarm_raised_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_path_10g_us_stat_alarm_raised_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_path_10g_us_stat_alarm_raised_data_fields } } };
+
+/* Group: epon_path_10g_us - stat_alarm_cleared */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_us_stat_alarm_cleared_stat = { .name = "stat", .descr = "Statistic identifier.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_US_STAT_ALARM_CLEARED_ID_STAT, .offset = offsetof(bcmolt_epon_path_10g_us_stat_alarm_cleared_data, stat), .type = &type_descr_bcmolt_epon_path_10g_us_stat_id };
+static bcmcli_prop_descr * BCM_DESCR epon_path_10g_us_stat_alarm_cleared_prop_array[] = { &prop_descr_epon_path_10g_us_stat_alarm_cleared_stat };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_path_10g_us_stat_alarm_cleared_data_fields[] = { { .name = "stat", .descr = "Statistic identifier.", .offset = offsetof(bcmolt_epon_path_10g_us_stat_alarm_cleared_data, stat), .type = &type_descr_bcmolt_epon_path_10g_us_stat_id } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_10g_us_stat_alarm_cleared_data = { .name = "bcmolt_epon_path_10g_us_stat_alarm_cleared_data", .descr = "Sent when a configured statistic alarm condition is no longer met.", .size = sizeof(bcmolt_epon_path_10g_us_stat_alarm_cleared_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_path_10g_us_stat_alarm_cleared_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_path_10g_us_stat_alarm_cleared_data_fields } } };
+
+/* Group: epon_path_10g_us - auto_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_us_auto_cfg_stat_alarm_cleared = { .name = "stat_alarm_cleared", .descr = "If true, indications of type \"stat_alarm_cleared\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_US_AUTO_CFG_ID_STAT_ALARM_CLEARED, .offset = offsetof(bcmolt_epon_path_10g_us_auto_cfg_data, stat_alarm_cleared), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_10g_us_auto_cfg_stat_alarm_raised = { .name = "stat_alarm_raised", .descr = "If true, indications of type \"stat_alarm_raised\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_10G_US_AUTO_CFG_ID_STAT_ALARM_RAISED, .offset = offsetof(bcmolt_epon_path_10g_us_auto_cfg_data, stat_alarm_raised), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr * BCM_DESCR epon_path_10g_us_auto_cfg_prop_array[] = { &prop_descr_epon_path_10g_us_auto_cfg_stat_alarm_cleared, &prop_descr_epon_path_10g_us_auto_cfg_stat_alarm_raised };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_path_10g_us_auto_cfg_data_fields[] = { { .name = "stat_alarm_cleared", .descr = "If true, indications of type \"stat_alarm_cleared\" will be generated.", .offset = offsetof(bcmolt_epon_path_10g_us_auto_cfg_data, stat_alarm_cleared), .type = &type_descr_bcmos_bool }, { .name = "stat_alarm_raised", .descr = "If true, indications of type \"stat_alarm_raised\" will be generated.", .offset = offsetof(bcmolt_epon_path_10g_us_auto_cfg_data, stat_alarm_raised), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_10g_us_auto_cfg_data = { .name = "bcmolt_epon_path_10g_us_auto_cfg_data", .descr = "Indication Configuration", .size = sizeof(bcmolt_epon_path_10g_us_auto_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_path_10g_us_auto_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_path_10g_us_auto_cfg_data_fields } } };
+
+/* ==== Object: epon_path_1g_ds ==== */
+
+/* Group: epon_path_1g_ds - key */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_ds_key_epon_ni = { .name = "epon_ni", .descr = "EPON NI associated with this 1G downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_DS_KEY_ID_EPON_NI, .offset = offsetof(bcmolt_epon_path_1g_ds_key, epon_ni), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr * BCM_DESCR epon_path_1g_ds_key_prop_array[] = { &prop_descr_epon_path_1g_ds_key_epon_ni };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_path_1g_ds_key_fields[] = { { .name = "epon_ni", .descr = "EPON NI associated with this 1G downstream path.", .offset = offsetof(bcmolt_epon_path_1g_ds_key, epon_ni), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_1g_ds_key = { .name = "bcmolt_epon_path_1g_ds_key", .descr = "key", .size = sizeof(bcmolt_epon_path_1g_ds_key), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_path_1g_ds_key_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_path_1g_ds_key_fields } } };
+
+/* Group: epon_path_1g_ds - cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_ds_cfg_default_fec_state = { .name = "default_fec_state", .descr = "Default FEC enable state for the 1G downstream path on this EPON NI.  This attribute cannot be changed while the EPON_NI is enabled.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_DS_CFG_ID_DEFAULT_FEC_STATE, .offset = offsetof(bcmolt_epon_path_1g_ds_cfg_data, default_fec_state), .type = &type_descr_bcmolt_epon_fec_en_state };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_ds_cfg_raman_mode = { .name = "raman_mode", .descr = "Raman mitigation mode for the 1G downstream path on this EPON NI.  Raman mitigation cannot coexist with turbo mode.  This attribute cannot be changed while the EPON_NI is enabled.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_DS_CFG_ID_RAMAN_MODE, .offset = offsetof(bcmolt_epon_path_1g_ds_cfg_data, raman_mode), .type = &type_descr_bcmolt_raman_mitigation_mode };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_ds_cfg_turbo_2g_mode = { .name = "turbo_2g_mode", .descr = "Operate the 1G downstream path at the turbo 2G data rate on this EPON NI.  Raman mitigation cannot coexist with turbo mode.  This attribute cannot be changed while the EPON_NI is enabled.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_DS_CFG_ID_TURBO_2G_MODE, .offset = offsetof(bcmolt_epon_path_1g_ds_cfg_data, turbo_2g_mode), .type = &type_descr_bcmolt_epon_1g_turbo_mode };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_ds_cfg_prbs_generator = { .name = "prbs_generator", .descr = "DS PRBS generator configuration", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_DS_CFG_ID_PRBS_GENERATOR, .offset = offsetof(bcmolt_epon_path_1g_ds_cfg_data, prbs_generator), .type = &type_descr_bcmolt_prbs_generator_config };
+static bcmcli_prop_descr * BCM_DESCR epon_path_1g_ds_cfg_prop_array[] = { &prop_descr_epon_path_1g_ds_cfg_default_fec_state, &prop_descr_epon_path_1g_ds_cfg_raman_mode, &prop_descr_epon_path_1g_ds_cfg_turbo_2g_mode, &prop_descr_epon_path_1g_ds_cfg_prbs_generator };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_path_1g_ds_cfg_data_fields[] = { { .name = "default_fec_state", .descr = "Default FEC enable state for the 1G downstream path on this EPON NI.  This attribute cannot be changed while the EPON_NI is enabled.", .offset = offsetof(bcmolt_epon_path_1g_ds_cfg_data, default_fec_state), .type = &type_descr_bcmolt_epon_fec_en_state }, { .name = "raman_mode", .descr = "Raman mitigation mode for the 1G downstream path on this EPON NI.  Raman mitigation cannot coexist with turbo mode.  This attribute cannot be changed while the EPON_NI is enabled.", .offset = offsetof(bcmolt_epon_path_1g_ds_cfg_data, raman_mode), .type = &type_descr_bcmolt_raman_mitigation_mode }, { .name = "turbo_2g_mode", .descr = "Operate the 1G downstream path at the turbo 2G data rate on this EPON NI.  Raman mitigation cannot coexist with turbo mode.  This attribute cannot be changed while the EPON_NI is enabled.", .offset = offsetof(bcmolt_epon_path_1g_ds_cfg_data, turbo_2g_mode), .type = &type_descr_bcmolt_epon_1g_turbo_mode }, { .name = "prbs_generator", .descr = "DS PRBS generator configuration", .offset = offsetof(bcmolt_epon_path_1g_ds_cfg_data, prbs_generator), .type = &type_descr_bcmolt_prbs_generator_config } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_1g_ds_cfg_data = { .name = "bcmolt_epon_path_1g_ds_cfg_data", .descr = "cfg", .size = sizeof(bcmolt_epon_path_1g_ds_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_path_1g_ds_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_path_1g_ds_cfg_data_fields } } };
+
+/* Group: epon_path_1g_ds - stat */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_ds_stat_bytes = { .name = "bytes", .descr = "The number of bytes transmitted on this 1g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_DS_STAT_ID_BYTES, .offset = offsetof(bcmolt_epon_path_1g_ds_stat_data, bytes), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_ds_stat_frames = { .name = "frames", .descr = "The number of frames transmitted on this 1g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES, .offset = offsetof(bcmolt_epon_path_1g_ds_stat_data, frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_ds_stat_frames_64 = { .name = "frames_64", .descr = "The number of 64 byte frames transmitted on this 1g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_64, .offset = offsetof(bcmolt_epon_path_1g_ds_stat_data, frames_64), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_ds_stat_frames_65_127 = { .name = "frames_65_127", .descr = "The number of 65 to 127 byte frames transmitted on this 1g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_65_127, .offset = offsetof(bcmolt_epon_path_1g_ds_stat_data, frames_65_127), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_ds_stat_frames_128_255 = { .name = "frames_128_255", .descr = "The number of 128 to 255 byte frames transmitted on this 1g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_128_255, .offset = offsetof(bcmolt_epon_path_1g_ds_stat_data, frames_128_255), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_ds_stat_frames_256_511 = { .name = "frames_256_511", .descr = "The number of 256 to 511 byte frames transmitted on this 1g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_256_511, .offset = offsetof(bcmolt_epon_path_1g_ds_stat_data, frames_256_511), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_ds_stat_frames_512_1023 = { .name = "frames_512_1023", .descr = "The number of 512 to 1023 byte frames transmitted on this 1g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_512_1023, .offset = offsetof(bcmolt_epon_path_1g_ds_stat_data, frames_512_1023), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_ds_stat_frames_1024_1518 = { .name = "frames_1024_1518", .descr = "The number of 1024 to 1518 byte frames transmitted on this 1g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_1024_1518, .offset = offsetof(bcmolt_epon_path_1g_ds_stat_data, frames_1024_1518), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_ds_stat_frames_1519_2047 = { .name = "frames_1519_2047", .descr = "The number of 1519 to 2047 byte frames transmitted on this 1g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_1519_2047, .offset = offsetof(bcmolt_epon_path_1g_ds_stat_data, frames_1519_2047), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_ds_stat_frames_2048_4095 = { .name = "frames_2048_4095", .descr = "The number of 2048 to 4095 byte frames transmitted on this 1g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_2048_4095, .offset = offsetof(bcmolt_epon_path_1g_ds_stat_data, frames_2048_4095), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_ds_stat_frames_4096_9216 = { .name = "frames_4096_9216", .descr = "The number of 4096 to 9216 byte frames transmitted on this 1g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_4096_9216, .offset = offsetof(bcmolt_epon_path_1g_ds_stat_data, frames_4096_9216), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_ds_stat_frames_9217_16383 = { .name = "frames_9217_16383", .descr = "The number of 9217 to 16383 byte frames transmitted on this 1g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_DS_STAT_ID_FRAMES_9217_16383, .offset = offsetof(bcmolt_epon_path_1g_ds_stat_data, frames_9217_16383), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_ds_stat_broadcast_frames = { .name = "broadcast_frames", .descr = "The number of broadcast frames transmitted on this 1g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_DS_STAT_ID_BROADCAST_FRAMES, .offset = offsetof(bcmolt_epon_path_1g_ds_stat_data, broadcast_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_ds_stat_data_bytes = { .name = "data_bytes", .descr = "The number of data bytes transmitted on this 1g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_DS_STAT_ID_DATA_BYTES, .offset = offsetof(bcmolt_epon_path_1g_ds_stat_data, data_bytes), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_ds_stat_multicast_frames = { .name = "multicast_frames", .descr = "The number of multicast frames transmitted on this 1g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_DS_STAT_ID_MULTICAST_FRAMES, .offset = offsetof(bcmolt_epon_path_1g_ds_stat_data, multicast_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_ds_stat_unicast_frames = { .name = "unicast_frames", .descr = "The number of unicast frames transmitted on this 1g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_DS_STAT_ID_UNICAST_FRAMES, .offset = offsetof(bcmolt_epon_path_1g_ds_stat_data, unicast_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_ds_stat_oam_bytes = { .name = "oam_bytes", .descr = "Number of OAM bytes transmitted on this 1g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_DS_STAT_ID_OAM_BYTES, .offset = offsetof(bcmolt_epon_path_1g_ds_stat_data, oam_bytes), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_ds_stat_oam_frames = { .name = "oam_frames", .descr = "Number of OAM frames transmitted on this 1g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_DS_STAT_ID_OAM_FRAMES, .offset = offsetof(bcmolt_epon_path_1g_ds_stat_data, oam_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_ds_stat_gate_frames = { .name = "gate_frames", .descr = "Number of gate frames transmitted on this 1g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_DS_STAT_ID_GATE_FRAMES, .offset = offsetof(bcmolt_epon_path_1g_ds_stat_data, gate_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_ds_stat_mpcp_frames = { .name = "mpcp_frames", .descr = "Number of MPCP frames transmitted on this 1g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_DS_STAT_ID_MPCP_FRAMES, .offset = offsetof(bcmolt_epon_path_1g_ds_stat_data, mpcp_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_ds_stat_abort_frames = { .name = "abort_frames", .descr = "Number of abort frames transmitted on this 1g downstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_DS_STAT_ID_ABORT_FRAMES, .offset = offsetof(bcmolt_epon_path_1g_ds_stat_data, abort_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr * BCM_DESCR epon_path_1g_ds_stat_prop_array[] = { &prop_descr_epon_path_1g_ds_stat_bytes, &prop_descr_epon_path_1g_ds_stat_frames, &prop_descr_epon_path_1g_ds_stat_frames_64, &prop_descr_epon_path_1g_ds_stat_frames_65_127, &prop_descr_epon_path_1g_ds_stat_frames_128_255, &prop_descr_epon_path_1g_ds_stat_frames_256_511, &prop_descr_epon_path_1g_ds_stat_frames_512_1023, &prop_descr_epon_path_1g_ds_stat_frames_1024_1518, &prop_descr_epon_path_1g_ds_stat_frames_1519_2047, &prop_descr_epon_path_1g_ds_stat_frames_2048_4095, &prop_descr_epon_path_1g_ds_stat_frames_4096_9216, &prop_descr_epon_path_1g_ds_stat_frames_9217_16383, &prop_descr_epon_path_1g_ds_stat_broadcast_frames, &prop_descr_epon_path_1g_ds_stat_data_bytes, &prop_descr_epon_path_1g_ds_stat_multicast_frames, &prop_descr_epon_path_1g_ds_stat_unicast_frames, &prop_descr_epon_path_1g_ds_stat_oam_bytes, &prop_descr_epon_path_1g_ds_stat_oam_frames, &prop_descr_epon_path_1g_ds_stat_gate_frames, &prop_descr_epon_path_1g_ds_stat_mpcp_frames, &prop_descr_epon_path_1g_ds_stat_abort_frames };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_path_1g_ds_stat_data_fields[] = { { .name = "bytes", .descr = "The number of bytes transmitted on this 1g downstream path.", .offset = offsetof(bcmolt_epon_path_1g_ds_stat_data, bytes), .type = &type_descr_uint64_t }, { .name = "frames", .descr = "The number of frames transmitted on this 1g downstream path.", .offset = offsetof(bcmolt_epon_path_1g_ds_stat_data, frames), .type = &type_descr_uint64_t }, { .name = "frames_64", .descr = "The number of 64 byte frames transmitted on this 1g downstream path.", .offset = offsetof(bcmolt_epon_path_1g_ds_stat_data, frames_64), .type = &type_descr_uint64_t }, { .name = "frames_65_127", .descr = "The number of 65 to 127 byte frames transmitted on this 1g downstream path.", .offset = offsetof(bcmolt_epon_path_1g_ds_stat_data, frames_65_127), .type = &type_descr_uint64_t }, { .name = "frames_128_255", .descr = "The number of 128 to 255 byte frames transmitted on this 1g downstream path.", .offset = offsetof(bcmolt_epon_path_1g_ds_stat_data, frames_128_255), .type = &type_descr_uint64_t }, { .name = "frames_256_511", .descr = "The number of 256 to 511 byte frames transmitted on this 1g downstream path.", .offset = offsetof(bcmolt_epon_path_1g_ds_stat_data, frames_256_511), .type = &type_descr_uint64_t }, { .name = "frames_512_1023", .descr = "The number of 512 to 1023 byte frames transmitted on this 1g downstream path.", .offset = offsetof(bcmolt_epon_path_1g_ds_stat_data, frames_512_1023), .type = &type_descr_uint64_t }, { .name = "frames_1024_1518", .descr = "The number of 1024 to 1518 byte frames transmitted on this 1g downstream path.", .offset = offsetof(bcmolt_epon_path_1g_ds_stat_data, frames_1024_1518), .type = &type_descr_uint64_t }, { .name = "frames_1519_2047", .descr = "The number of 1519 to 2047 byte frames transmitted on this 1g downstream path.", .offset = offsetof(bcmolt_epon_path_1g_ds_stat_data, frames_1519_2047), .type = &type_descr_uint64_t }, { .name = "frames_2048_4095", .descr = "The number of 2048 to 4095 byte frames transmitted on this 1g downstream path.", .offset = offsetof(bcmolt_epon_path_1g_ds_stat_data, frames_2048_4095), .type = &type_descr_uint64_t }, { .name = "frames_4096_9216", .descr = "The number of 4096 to 9216 byte frames transmitted on this 1g downstream path.", .offset = offsetof(bcmolt_epon_path_1g_ds_stat_data, frames_4096_9216), .type = &type_descr_uint64_t }, { .name = "frames_9217_16383", .descr = "The number of 9217 to 16383 byte frames transmitted on this 1g downstream path.", .offset = offsetof(bcmolt_epon_path_1g_ds_stat_data, frames_9217_16383), .type = &type_descr_uint64_t }, { .name = "broadcast_frames", .descr = "The number of broadcast frames transmitted on this 1g downstream path.", .offset = offsetof(bcmolt_epon_path_1g_ds_stat_data, broadcast_frames), .type = &type_descr_uint64_t }, { .name = "data_bytes", .descr = "The number of data bytes transmitted on this 1g downstream path.", .offset = offsetof(bcmolt_epon_path_1g_ds_stat_data, data_bytes), .type = &type_descr_uint64_t }, { .name = "multicast_frames", .descr = "The number of multicast frames transmitted on this 1g downstream path.", .offset = offsetof(bcmolt_epon_path_1g_ds_stat_data, multicast_frames), .type = &type_descr_uint64_t }, { .name = "unicast_frames", .descr = "The number of unicast frames transmitted on this 1g downstream path.", .offset = offsetof(bcmolt_epon_path_1g_ds_stat_data, unicast_frames), .type = &type_descr_uint64_t }, { .name = "oam_bytes", .descr = "Number of OAM bytes transmitted on this 1g downstream path.", .offset = offsetof(bcmolt_epon_path_1g_ds_stat_data, oam_bytes), .type = &type_descr_uint64_t }, { .name = "oam_frames", .descr = "Number of OAM frames transmitted on this 1g downstream path.", .offset = offsetof(bcmolt_epon_path_1g_ds_stat_data, oam_frames), .type = &type_descr_uint64_t }, { .name = "gate_frames", .descr = "Number of gate frames transmitted on this 1g downstream path.", .offset = offsetof(bcmolt_epon_path_1g_ds_stat_data, gate_frames), .type = &type_descr_uint64_t }, { .name = "mpcp_frames", .descr = "Number of MPCP frames transmitted on this 1g downstream path.", .offset = offsetof(bcmolt_epon_path_1g_ds_stat_data, mpcp_frames), .type = &type_descr_uint64_t }, { .name = "abort_frames", .descr = "Number of abort frames transmitted on this 1g downstream path.", .offset = offsetof(bcmolt_epon_path_1g_ds_stat_data, abort_frames), .type = &type_descr_uint64_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_1g_ds_stat_data = { .name = "bcmolt_epon_path_1g_ds_stat_data", .descr = "stat", .size = sizeof(bcmolt_epon_path_1g_ds_stat_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_path_1g_ds_stat_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_path_1g_ds_stat_data_fields } } };
+
+/* Group: epon_path_1g_ds - stat_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_ds_stat_cfg_cfg = { .name = "cfg", .descr = "Statistic alarm configuration.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_DS_STAT_CFG_ID_CFG, .offset = offsetof(bcmolt_epon_path_1g_ds_stat_cfg_data, cfg), .type = &type_descr_bcmolt_stat_alarm_config };
+static bcmcli_prop_descr * BCM_DESCR epon_path_1g_ds_stat_cfg_prop_array[] = { &prop_descr_epon_path_1g_ds_stat_cfg_cfg };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_path_1g_ds_stat_cfg_data_fields[] = { { .name = "cfg", .descr = "Statistic alarm configuration.", .offset = offsetof(bcmolt_epon_path_1g_ds_stat_cfg_data, cfg), .type = &type_descr_bcmolt_stat_alarm_config } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_1g_ds_stat_cfg_data = { .name = "bcmolt_epon_path_1g_ds_stat_cfg_data", .descr = "Statistic Configuration", .size = sizeof(bcmolt_epon_path_1g_ds_stat_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_path_1g_ds_stat_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_path_1g_ds_stat_cfg_data_fields } } };
+
+/* Group: epon_path_1g_ds - stat_alarm_raised */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_ds_stat_alarm_raised_stat = { .name = "stat", .descr = "Statistic identifier.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_DS_STAT_ALARM_RAISED_ID_STAT, .offset = offsetof(bcmolt_epon_path_1g_ds_stat_alarm_raised_data, stat), .type = &type_descr_bcmolt_epon_path_1g_ds_stat_id };
+static bcmcli_prop_descr * BCM_DESCR epon_path_1g_ds_stat_alarm_raised_prop_array[] = { &prop_descr_epon_path_1g_ds_stat_alarm_raised_stat };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_path_1g_ds_stat_alarm_raised_data_fields[] = { { .name = "stat", .descr = "Statistic identifier.", .offset = offsetof(bcmolt_epon_path_1g_ds_stat_alarm_raised_data, stat), .type = &type_descr_bcmolt_epon_path_1g_ds_stat_id } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_1g_ds_stat_alarm_raised_data = { .name = "bcmolt_epon_path_1g_ds_stat_alarm_raised_data", .descr = "Sent when a configured statistic alarm condition has been met.", .size = sizeof(bcmolt_epon_path_1g_ds_stat_alarm_raised_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_path_1g_ds_stat_alarm_raised_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_path_1g_ds_stat_alarm_raised_data_fields } } };
+
+/* Group: epon_path_1g_ds - stat_alarm_cleared */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_ds_stat_alarm_cleared_stat = { .name = "stat", .descr = "Statistic identifier.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_DS_STAT_ALARM_CLEARED_ID_STAT, .offset = offsetof(bcmolt_epon_path_1g_ds_stat_alarm_cleared_data, stat), .type = &type_descr_bcmolt_epon_path_1g_ds_stat_id };
+static bcmcli_prop_descr * BCM_DESCR epon_path_1g_ds_stat_alarm_cleared_prop_array[] = { &prop_descr_epon_path_1g_ds_stat_alarm_cleared_stat };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_path_1g_ds_stat_alarm_cleared_data_fields[] = { { .name = "stat", .descr = "Statistic identifier.", .offset = offsetof(bcmolt_epon_path_1g_ds_stat_alarm_cleared_data, stat), .type = &type_descr_bcmolt_epon_path_1g_ds_stat_id } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_1g_ds_stat_alarm_cleared_data = { .name = "bcmolt_epon_path_1g_ds_stat_alarm_cleared_data", .descr = "Sent when a configured statistic alarm condition is no longer met.", .size = sizeof(bcmolt_epon_path_1g_ds_stat_alarm_cleared_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_path_1g_ds_stat_alarm_cleared_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_path_1g_ds_stat_alarm_cleared_data_fields } } };
+
+/* Group: epon_path_1g_ds - auto_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_ds_auto_cfg_stat_alarm_cleared = { .name = "stat_alarm_cleared", .descr = "If true, indications of type \"stat_alarm_cleared\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_DS_AUTO_CFG_ID_STAT_ALARM_CLEARED, .offset = offsetof(bcmolt_epon_path_1g_ds_auto_cfg_data, stat_alarm_cleared), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_ds_auto_cfg_stat_alarm_raised = { .name = "stat_alarm_raised", .descr = "If true, indications of type \"stat_alarm_raised\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_DS_AUTO_CFG_ID_STAT_ALARM_RAISED, .offset = offsetof(bcmolt_epon_path_1g_ds_auto_cfg_data, stat_alarm_raised), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr * BCM_DESCR epon_path_1g_ds_auto_cfg_prop_array[] = { &prop_descr_epon_path_1g_ds_auto_cfg_stat_alarm_cleared, &prop_descr_epon_path_1g_ds_auto_cfg_stat_alarm_raised };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_path_1g_ds_auto_cfg_data_fields[] = { { .name = "stat_alarm_cleared", .descr = "If true, indications of type \"stat_alarm_cleared\" will be generated.", .offset = offsetof(bcmolt_epon_path_1g_ds_auto_cfg_data, stat_alarm_cleared), .type = &type_descr_bcmos_bool }, { .name = "stat_alarm_raised", .descr = "If true, indications of type \"stat_alarm_raised\" will be generated.", .offset = offsetof(bcmolt_epon_path_1g_ds_auto_cfg_data, stat_alarm_raised), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_1g_ds_auto_cfg_data = { .name = "bcmolt_epon_path_1g_ds_auto_cfg_data", .descr = "Indication Configuration", .size = sizeof(bcmolt_epon_path_1g_ds_auto_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_path_1g_ds_auto_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_path_1g_ds_auto_cfg_data_fields } } };
+
+/* ==== Object: epon_path_1g_us ==== */
+
+/* Group: epon_path_1g_us - key */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_us_key_epon_ni = { .name = "epon_ni", .descr = "EPON NI associated with this 1G upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_US_KEY_ID_EPON_NI, .offset = offsetof(bcmolt_epon_path_1g_us_key, epon_ni), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr * BCM_DESCR epon_path_1g_us_key_prop_array[] = { &prop_descr_epon_path_1g_us_key_epon_ni };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_path_1g_us_key_fields[] = { { .name = "epon_ni", .descr = "EPON NI associated with this 1G upstream path.", .offset = offsetof(bcmolt_epon_path_1g_us_key, epon_ni), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_1g_us_key = { .name = "bcmolt_epon_path_1g_us_key", .descr = "key", .size = sizeof(bcmolt_epon_path_1g_us_key), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_path_1g_us_key_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_path_1g_us_key_fields } } };
+
+/* Group: epon_path_1g_us - cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_us_cfg_default_fec_state = { .name = "default_fec_state", .descr = "Default FEC enable state for the 1G upstream path on this EPON NI.  This attribute cannot be changed while the EPON_NI is enabled.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_US_CFG_ID_DEFAULT_FEC_STATE, .offset = offsetof(bcmolt_epon_path_1g_us_cfg_data, default_fec_state), .type = &type_descr_bcmolt_epon_fec_en_state };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_us_cfg_sync_time_tq = { .name = "sync_time_tq", .descr = "Time quanta of sync at start of US burst.  This attribute cannot be changed while the EPON_NI is enabled.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_US_CFG_ID_SYNC_TIME_TQ, .offset = offsetof(bcmolt_epon_path_1g_us_cfg_data, sync_time_tq), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_us_cfg_prbs_checker = { .name = "prbs_checker", .descr = "US PRBS checker configuration", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_US_CFG_ID_PRBS_CHECKER, .offset = offsetof(bcmolt_epon_path_1g_us_cfg_data, prbs_checker), .type = &type_descr_bcmolt_prbs_checker_config };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_us_cfg_prbs_status = { .name = "prbs_status", .descr = "Result of US PRBS checker", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_EPON_PATH_1G_US_CFG_ID_PRBS_STATUS, .offset = offsetof(bcmolt_epon_path_1g_us_cfg_data, prbs_status), .type = &type_descr_bcmolt_prbs_status };
+static bcmcli_prop_descr * BCM_DESCR epon_path_1g_us_cfg_prop_array[] = { &prop_descr_epon_path_1g_us_cfg_default_fec_state, &prop_descr_epon_path_1g_us_cfg_sync_time_tq, &prop_descr_epon_path_1g_us_cfg_prbs_checker, &prop_descr_epon_path_1g_us_cfg_prbs_status };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_path_1g_us_cfg_data_fields[] = { { .name = "default_fec_state", .descr = "Default FEC enable state for the 1G upstream path on this EPON NI.  This attribute cannot be changed while the EPON_NI is enabled.", .offset = offsetof(bcmolt_epon_path_1g_us_cfg_data, default_fec_state), .type = &type_descr_bcmolt_epon_fec_en_state }, { .name = "sync_time_tq", .descr = "Time quanta of sync at start of US burst.  This attribute cannot be changed while the EPON_NI is enabled.", .offset = offsetof(bcmolt_epon_path_1g_us_cfg_data, sync_time_tq), .type = &type_descr_uint32_t }, { .name = "prbs_checker", .descr = "US PRBS checker configuration", .offset = offsetof(bcmolt_epon_path_1g_us_cfg_data, prbs_checker), .type = &type_descr_bcmolt_prbs_checker_config }, { .name = "prbs_status", .descr = "Result of US PRBS checker", .offset = offsetof(bcmolt_epon_path_1g_us_cfg_data, prbs_status), .type = &type_descr_bcmolt_prbs_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_1g_us_cfg_data = { .name = "bcmolt_epon_path_1g_us_cfg_data", .descr = "cfg", .size = sizeof(bcmolt_epon_path_1g_us_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_path_1g_us_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_path_1g_us_cfg_data_fields } } };
+
+/* Group: epon_path_1g_us - stat */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_us_stat_bytes = { .name = "bytes", .descr = "The number of bytes received on this 1g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_US_STAT_ID_BYTES, .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, bytes), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_us_stat_frames = { .name = "frames", .descr = "The number of frames received on this 1g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES, .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_us_stat_frames_64 = { .name = "frames_64", .descr = "The number of 64 byte frames received on this 1g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_64, .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, frames_64), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_us_stat_frames_65_127 = { .name = "frames_65_127", .descr = "The number of 65 to 127 byte frames received on this 1g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_65_127, .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, frames_65_127), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_us_stat_frames_128_255 = { .name = "frames_128_255", .descr = "The number of 128 to 255 byte frames received on this 1g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_128_255, .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, frames_128_255), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_us_stat_frames_256_511 = { .name = "frames_256_511", .descr = "The number of 256 to 511 byte frames received on this 1g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_256_511, .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, frames_256_511), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_us_stat_frames_512_1023 = { .name = "frames_512_1023", .descr = "The number of 512 to 1023 byte frames received on this 1g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_512_1023, .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, frames_512_1023), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_us_stat_frames_1024_1518 = { .name = "frames_1024_1518", .descr = "The number of 1024 to 1518 byte frames received on this 1g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_1024_1518, .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, frames_1024_1518), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_us_stat_frames_1519_2047 = { .name = "frames_1519_2047", .descr = "The number of 1519 to 2047 byte frames received on this 1g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_1519_2047, .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, frames_1519_2047), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_us_stat_frames_2048_4095 = { .name = "frames_2048_4095", .descr = "The number of 2048 to 4095 byte frames received on this 1g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_2048_4095, .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, frames_2048_4095), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_us_stat_frames_4096_9216 = { .name = "frames_4096_9216", .descr = "The number of 4096 to 9216 byte frames received on this 1g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_4096_9216, .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, frames_4096_9216), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_us_stat_frames_9217_16383 = { .name = "frames_9217_16383", .descr = "The number of 9217 to 16383 byte frames received on this 1g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_US_STAT_ID_FRAMES_9217_16383, .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, frames_9217_16383), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_us_stat_broadcast_frames = { .name = "broadcast_frames", .descr = "The number of broadcast frames received on this 1g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_US_STAT_ID_BROADCAST_FRAMES, .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, broadcast_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_us_stat_data_bytes = { .name = "data_bytes", .descr = "The number of data bytes received on this 1g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_US_STAT_ID_DATA_BYTES, .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, data_bytes), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_us_stat_multicast_frames = { .name = "multicast_frames", .descr = "The number of multicast frames received on this 1g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_US_STAT_ID_MULTICAST_FRAMES, .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, multicast_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_us_stat_unicast_frames = { .name = "unicast_frames", .descr = "The number of unicast frames received on this 1g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_US_STAT_ID_UNICAST_FRAMES, .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, unicast_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_us_stat_mpcp_frames = { .name = "mpcp_frames", .descr = "The number of MPCP frames received on this 1g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_US_STAT_ID_MPCP_FRAMES, .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, mpcp_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_us_stat_oam_bytes = { .name = "oam_bytes", .descr = "The number of OAM bytes received on this 1g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_US_STAT_ID_OAM_BYTES, .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, oam_bytes), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_us_stat_oam_frames = { .name = "oam_frames", .descr = "The number of OAM frames received on this 1g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_US_STAT_ID_OAM_FRAMES, .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, oam_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_us_stat_report_frames = { .name = "report_frames", .descr = "The number of report frames received on this 1g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_US_STAT_ID_REPORT_FRAMES, .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, report_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_us_stat_abort_frames = { .name = "abort_frames", .descr = "The number of abort frames received on this 1g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_US_STAT_ID_ABORT_FRAMES, .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, abort_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_us_stat_fcs_error = { .name = "fcs_error", .descr = "The number of bad FCS errors received on this 1g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_US_STAT_ID_FCS_ERROR, .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, fcs_error), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_us_stat_crc_8_error = { .name = "crc_8_error", .descr = "The number of CRC8 errors received on this 1g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_US_STAT_ID_CRC_8_ERROR, .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, crc_8_error), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_us_stat_out_of_slot = { .name = "out_of_slot", .descr = "The number of out of slot errors received on this 1g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_US_STAT_ID_OUT_OF_SLOT, .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, out_of_slot), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_us_stat_oversize_error = { .name = "oversize_error", .descr = "The number of oversize errors received on this 1g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_US_STAT_ID_OVERSIZE_ERROR, .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, oversize_error), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_us_stat_runt_error = { .name = "runt_error", .descr = "The number of runt errors received on this 1g upstream path.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_US_STAT_ID_RUNT_ERROR, .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, runt_error), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr * BCM_DESCR epon_path_1g_us_stat_prop_array[] = { &prop_descr_epon_path_1g_us_stat_bytes, &prop_descr_epon_path_1g_us_stat_frames, &prop_descr_epon_path_1g_us_stat_frames_64, &prop_descr_epon_path_1g_us_stat_frames_65_127, &prop_descr_epon_path_1g_us_stat_frames_128_255, &prop_descr_epon_path_1g_us_stat_frames_256_511, &prop_descr_epon_path_1g_us_stat_frames_512_1023, &prop_descr_epon_path_1g_us_stat_frames_1024_1518, &prop_descr_epon_path_1g_us_stat_frames_1519_2047, &prop_descr_epon_path_1g_us_stat_frames_2048_4095, &prop_descr_epon_path_1g_us_stat_frames_4096_9216, &prop_descr_epon_path_1g_us_stat_frames_9217_16383, &prop_descr_epon_path_1g_us_stat_broadcast_frames, &prop_descr_epon_path_1g_us_stat_data_bytes, &prop_descr_epon_path_1g_us_stat_multicast_frames, &prop_descr_epon_path_1g_us_stat_unicast_frames, &prop_descr_epon_path_1g_us_stat_mpcp_frames, &prop_descr_epon_path_1g_us_stat_oam_bytes, &prop_descr_epon_path_1g_us_stat_oam_frames, &prop_descr_epon_path_1g_us_stat_report_frames, &prop_descr_epon_path_1g_us_stat_abort_frames, &prop_descr_epon_path_1g_us_stat_fcs_error, &prop_descr_epon_path_1g_us_stat_crc_8_error, &prop_descr_epon_path_1g_us_stat_out_of_slot, &prop_descr_epon_path_1g_us_stat_oversize_error, &prop_descr_epon_path_1g_us_stat_runt_error };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_path_1g_us_stat_data_fields[] = { { .name = "bytes", .descr = "The number of bytes received on this 1g upstream path.", .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, bytes), .type = &type_descr_uint64_t }, { .name = "frames", .descr = "The number of frames received on this 1g upstream path.", .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, frames), .type = &type_descr_uint64_t }, { .name = "frames_64", .descr = "The number of 64 byte frames received on this 1g upstream path.", .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, frames_64), .type = &type_descr_uint64_t }, { .name = "frames_65_127", .descr = "The number of 65 to 127 byte frames received on this 1g upstream path.", .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, frames_65_127), .type = &type_descr_uint64_t }, { .name = "frames_128_255", .descr = "The number of 128 to 255 byte frames received on this 1g upstream path.", .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, frames_128_255), .type = &type_descr_uint64_t }, { .name = "frames_256_511", .descr = "The number of 256 to 511 byte frames received on this 1g upstream path.", .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, frames_256_511), .type = &type_descr_uint64_t }, { .name = "frames_512_1023", .descr = "The number of 512 to 1023 byte frames received on this 1g upstream path.", .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, frames_512_1023), .type = &type_descr_uint64_t }, { .name = "frames_1024_1518", .descr = "The number of 1024 to 1518 byte frames received on this 1g upstream path.", .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, frames_1024_1518), .type = &type_descr_uint64_t }, { .name = "frames_1519_2047", .descr = "The number of 1519 to 2047 byte frames received on this 1g upstream path.", .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, frames_1519_2047), .type = &type_descr_uint64_t }, { .name = "frames_2048_4095", .descr = "The number of 2048 to 4095 byte frames received on this 1g upstream path.", .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, frames_2048_4095), .type = &type_descr_uint64_t }, { .name = "frames_4096_9216", .descr = "The number of 4096 to 9216 byte frames received on this 1g upstream path.", .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, frames_4096_9216), .type = &type_descr_uint64_t }, { .name = "frames_9217_16383", .descr = "The number of 9217 to 16383 byte frames received on this 1g upstream path.", .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, frames_9217_16383), .type = &type_descr_uint64_t }, { .name = "broadcast_frames", .descr = "The number of broadcast frames received on this 1g upstream path.", .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, broadcast_frames), .type = &type_descr_uint64_t }, { .name = "data_bytes", .descr = "The number of data bytes received on this 1g upstream path.", .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, data_bytes), .type = &type_descr_uint64_t }, { .name = "multicast_frames", .descr = "The number of multicast frames received on this 1g upstream path.", .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, multicast_frames), .type = &type_descr_uint64_t }, { .name = "unicast_frames", .descr = "The number of unicast frames received on this 1g upstream path.", .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, unicast_frames), .type = &type_descr_uint64_t }, { .name = "mpcp_frames", .descr = "The number of MPCP frames received on this 1g upstream path.", .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, mpcp_frames), .type = &type_descr_uint64_t }, { .name = "oam_bytes", .descr = "The number of OAM bytes received on this 1g upstream path.", .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, oam_bytes), .type = &type_descr_uint64_t }, { .name = "oam_frames", .descr = "The number of OAM frames received on this 1g upstream path.", .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, oam_frames), .type = &type_descr_uint64_t }, { .name = "report_frames", .descr = "The number of report frames received on this 1g upstream path.", .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, report_frames), .type = &type_descr_uint64_t }, { .name = "abort_frames", .descr = "The number of abort frames received on this 1g upstream path.", .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, abort_frames), .type = &type_descr_uint64_t }, { .name = "fcs_error", .descr = "The number of bad FCS errors received on this 1g upstream path.", .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, fcs_error), .type = &type_descr_uint64_t }, { .name = "crc_8_error", .descr = "The number of CRC8 errors received on this 1g upstream path.", .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, crc_8_error), .type = &type_descr_uint64_t }, { .name = "out_of_slot", .descr = "The number of out of slot errors received on this 1g upstream path.", .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, out_of_slot), .type = &type_descr_uint64_t }, { .name = "oversize_error", .descr = "The number of oversize errors received on this 1g upstream path.", .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, oversize_error), .type = &type_descr_uint64_t }, { .name = "runt_error", .descr = "The number of runt errors received on this 1g upstream path.", .offset = offsetof(bcmolt_epon_path_1g_us_stat_data, runt_error), .type = &type_descr_uint64_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_1g_us_stat_data = { .name = "bcmolt_epon_path_1g_us_stat_data", .descr = "stat", .size = sizeof(bcmolt_epon_path_1g_us_stat_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_path_1g_us_stat_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_path_1g_us_stat_data_fields } } };
+
+/* Group: epon_path_1g_us - stat_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_us_stat_cfg_cfg = { .name = "cfg", .descr = "Statistic alarm configuration.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_US_STAT_CFG_ID_CFG, .offset = offsetof(bcmolt_epon_path_1g_us_stat_cfg_data, cfg), .type = &type_descr_bcmolt_stat_alarm_config };
+static bcmcli_prop_descr * BCM_DESCR epon_path_1g_us_stat_cfg_prop_array[] = { &prop_descr_epon_path_1g_us_stat_cfg_cfg };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_path_1g_us_stat_cfg_data_fields[] = { { .name = "cfg", .descr = "Statistic alarm configuration.", .offset = offsetof(bcmolt_epon_path_1g_us_stat_cfg_data, cfg), .type = &type_descr_bcmolt_stat_alarm_config } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_1g_us_stat_cfg_data = { .name = "bcmolt_epon_path_1g_us_stat_cfg_data", .descr = "Statistic Configuration", .size = sizeof(bcmolt_epon_path_1g_us_stat_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_path_1g_us_stat_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_path_1g_us_stat_cfg_data_fields } } };
+
+/* Group: epon_path_1g_us - stat_alarm_raised */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_us_stat_alarm_raised_stat = { .name = "stat", .descr = "Statistic identifier.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_US_STAT_ALARM_RAISED_ID_STAT, .offset = offsetof(bcmolt_epon_path_1g_us_stat_alarm_raised_data, stat), .type = &type_descr_bcmolt_epon_path_1g_us_stat_id };
+static bcmcli_prop_descr * BCM_DESCR epon_path_1g_us_stat_alarm_raised_prop_array[] = { &prop_descr_epon_path_1g_us_stat_alarm_raised_stat };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_path_1g_us_stat_alarm_raised_data_fields[] = { { .name = "stat", .descr = "Statistic identifier.", .offset = offsetof(bcmolt_epon_path_1g_us_stat_alarm_raised_data, stat), .type = &type_descr_bcmolt_epon_path_1g_us_stat_id } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_1g_us_stat_alarm_raised_data = { .name = "bcmolt_epon_path_1g_us_stat_alarm_raised_data", .descr = "Sent when a configured statistic alarm condition has been met.", .size = sizeof(bcmolt_epon_path_1g_us_stat_alarm_raised_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_path_1g_us_stat_alarm_raised_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_path_1g_us_stat_alarm_raised_data_fields } } };
+
+/* Group: epon_path_1g_us - stat_alarm_cleared */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_us_stat_alarm_cleared_stat = { .name = "stat", .descr = "Statistic identifier.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_US_STAT_ALARM_CLEARED_ID_STAT, .offset = offsetof(bcmolt_epon_path_1g_us_stat_alarm_cleared_data, stat), .type = &type_descr_bcmolt_epon_path_1g_us_stat_id };
+static bcmcli_prop_descr * BCM_DESCR epon_path_1g_us_stat_alarm_cleared_prop_array[] = { &prop_descr_epon_path_1g_us_stat_alarm_cleared_stat };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_path_1g_us_stat_alarm_cleared_data_fields[] = { { .name = "stat", .descr = "Statistic identifier.", .offset = offsetof(bcmolt_epon_path_1g_us_stat_alarm_cleared_data, stat), .type = &type_descr_bcmolt_epon_path_1g_us_stat_id } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_1g_us_stat_alarm_cleared_data = { .name = "bcmolt_epon_path_1g_us_stat_alarm_cleared_data", .descr = "Sent when a configured statistic alarm condition is no longer met.", .size = sizeof(bcmolt_epon_path_1g_us_stat_alarm_cleared_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_path_1g_us_stat_alarm_cleared_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_path_1g_us_stat_alarm_cleared_data_fields } } };
+
+/* Group: epon_path_1g_us - auto_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_us_auto_cfg_stat_alarm_cleared = { .name = "stat_alarm_cleared", .descr = "If true, indications of type \"stat_alarm_cleared\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_US_AUTO_CFG_ID_STAT_ALARM_CLEARED, .offset = offsetof(bcmolt_epon_path_1g_us_auto_cfg_data, stat_alarm_cleared), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_path_1g_us_auto_cfg_stat_alarm_raised = { .name = "stat_alarm_raised", .descr = "If true, indications of type \"stat_alarm_raised\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_PATH_1G_US_AUTO_CFG_ID_STAT_ALARM_RAISED, .offset = offsetof(bcmolt_epon_path_1g_us_auto_cfg_data, stat_alarm_raised), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr * BCM_DESCR epon_path_1g_us_auto_cfg_prop_array[] = { &prop_descr_epon_path_1g_us_auto_cfg_stat_alarm_cleared, &prop_descr_epon_path_1g_us_auto_cfg_stat_alarm_raised };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_path_1g_us_auto_cfg_data_fields[] = { { .name = "stat_alarm_cleared", .descr = "If true, indications of type \"stat_alarm_cleared\" will be generated.", .offset = offsetof(bcmolt_epon_path_1g_us_auto_cfg_data, stat_alarm_cleared), .type = &type_descr_bcmos_bool }, { .name = "stat_alarm_raised", .descr = "If true, indications of type \"stat_alarm_raised\" will be generated.", .offset = offsetof(bcmolt_epon_path_1g_us_auto_cfg_data, stat_alarm_raised), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_path_1g_us_auto_cfg_data = { .name = "bcmolt_epon_path_1g_us_auto_cfg_data", .descr = "Indication Configuration", .size = sizeof(bcmolt_epon_path_1g_us_auto_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_path_1g_us_auto_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_path_1g_us_auto_cfg_data_fields } } };
+
+/* ==== Object: epon_rp ==== */
+
+/* Group: epon_rp - key */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_rp_key_epon_ni = { .name = "epon_ni", .descr = "EPON NI containing this RP.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_RP_KEY_ID_EPON_NI, .offset = offsetof(bcmolt_epon_rp_key, epon_ni), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_rp_key_link_rate = { .name = "link_rate", .descr = "Link rate associated with this RP.  Must be one of 10/10, 10/1, or 1/1.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_RP_KEY_ID_LINK_RATE, .offset = offsetof(bcmolt_epon_rp_key, link_rate), .type = &type_descr_bcmolt_epon_link_rate };
+static bcmcli_prop_descr * BCM_DESCR epon_rp_key_prop_array[] = { &prop_descr_epon_rp_key_epon_ni, &prop_descr_epon_rp_key_link_rate };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_rp_key_fields[] = { { .name = "epon_ni", .descr = "EPON NI containing this RP.", .offset = offsetof(bcmolt_epon_rp_key, epon_ni), .type = &type_descr_uint16_t }, { .name = "link_rate", .descr = "Link rate associated with this RP.  Must be one of 10/10, 10/1, or 1/1.", .offset = offsetof(bcmolt_epon_rp_key, link_rate), .type = &type_descr_bcmolt_epon_link_rate } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_rp_key = { .name = "bcmolt_epon_rp_key", .descr = "key", .size = sizeof(bcmolt_epon_rp_key), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_rp_key_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_rp_key_fields } } };
+
+/* Group: epon_rp - cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_rp_cfg_base_llid = { .name = "base_llid", .descr = "Base (lowest) logical link identifier for this RP.  This attribute cannot be changed while the EPON_NI is enabled, nor while any non-system links exist.  The sum of this value and max_links for this RP must be 0x7eff or smaller.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_RP_CFG_ID_BASE_LLID, .offset = offsetof(bcmolt_epon_rp_cfg_data, base_llid), .type = &type_descr_uint16_t_hex };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_rp_cfg_mpcp_disc_en = { .name = "mpcp_disc_en", .descr = "Governs whether discovery gates for this RP are issued ", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_RP_CFG_ID_MPCP_DISC_EN, .offset = offsetof(bcmolt_epon_rp_cfg_data, mpcp_disc_en), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_rp_cfg_mpcp_disc_gnt_len_tq = { .name = "mpcp_disc_gnt_len_tq", .descr = "Length of discovery grants in time quanta for this RP.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_RP_CFG_ID_MPCP_DISC_GNT_LEN_TQ, .offset = offsetof(bcmolt_epon_rp_cfg_data, mpcp_disc_gnt_len_tq), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_rp_cfg_mpcp_report_timeout = { .name = "mpcp_report_timeout", .descr = "Number of ms before links are deregistered due to no report received.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_RP_CFG_ID_MPCP_REPORT_TIMEOUT, .offset = offsetof(bcmolt_epon_rp_cfg_data, mpcp_report_timeout), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_rp_cfg_max_mpcp_reg_per_disc_window = { .name = "max_mpcp_reg_per_disc_window", .descr = "Maximum number of MPCP registrations per discovery window on this RP (0 indicates unlimited).", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_RP_CFG_ID_MAX_MPCP_REG_PER_DISC_WINDOW, .offset = offsetof(bcmolt_epon_rp_cfg_data, max_mpcp_reg_per_disc_window), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_rp_cfg_max_links = { .name = "max_links", .descr = "Maximum number of links", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_RP_CFG_ID_MAX_LINKS, .offset = offsetof(bcmolt_epon_rp_cfg_data, max_links), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_rp_cfg_default_upstream_bandwidth = { .name = "default_upstream_bandwidth", .descr = "Default upstream bandwidth for newly created links.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_RP_CFG_ID_DEFAULT_UPSTREAM_BANDWIDTH, .offset = offsetof(bcmolt_epon_rp_cfg_data, default_upstream_bandwidth), .type = &type_descr_bcmolt_upstream_bandwidth_distribution };
+static bcmcli_prop_descr BCM_DESCR prop_descr_epon_rp_cfg_rate_of_refraction = { .name = "rate_of_refraction", .descr = "Rate of Refraction", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_EPON_RP_CFG_ID_RATE_OF_REFRACTION, .offset = offsetof(bcmolt_epon_rp_cfg_data, rate_of_refraction), .type = &type_descr_double };
+static bcmcli_prop_descr * BCM_DESCR epon_rp_cfg_prop_array[] = { &prop_descr_epon_rp_cfg_base_llid, &prop_descr_epon_rp_cfg_mpcp_disc_en, &prop_descr_epon_rp_cfg_mpcp_disc_gnt_len_tq, &prop_descr_epon_rp_cfg_mpcp_report_timeout, &prop_descr_epon_rp_cfg_max_mpcp_reg_per_disc_window, &prop_descr_epon_rp_cfg_max_links, &prop_descr_epon_rp_cfg_default_upstream_bandwidth, &prop_descr_epon_rp_cfg_rate_of_refraction };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_epon_rp_cfg_data_fields[] = { { .name = "base_llid", .descr = "Base (lowest) logical link identifier for this RP.  This attribute cannot be changed while the EPON_NI is enabled, nor while any non-system links exist.  The sum of this value and max_links for this RP must be 0x7eff or smaller.", .offset = offsetof(bcmolt_epon_rp_cfg_data, base_llid), .type = &type_descr_uint16_t_hex }, { .name = "mpcp_disc_en", .descr = "Governs whether discovery gates for this RP are issued ", .offset = offsetof(bcmolt_epon_rp_cfg_data, mpcp_disc_en), .type = &type_descr_bcmos_bool }, { .name = "mpcp_disc_gnt_len_tq", .descr = "Length of discovery grants in time quanta for this RP.", .offset = offsetof(bcmolt_epon_rp_cfg_data, mpcp_disc_gnt_len_tq), .type = &type_descr_uint32_t }, { .name = "mpcp_report_timeout", .descr = "Number of ms before links are deregistered due to no report received.", .offset = offsetof(bcmolt_epon_rp_cfg_data, mpcp_report_timeout), .type = &type_descr_uint16_t }, { .name = "max_mpcp_reg_per_disc_window", .descr = "Maximum number of MPCP registrations per discovery window on this RP (0 indicates unlimited).", .offset = offsetof(bcmolt_epon_rp_cfg_data, max_mpcp_reg_per_disc_window), .type = &type_descr_uint16_t }, { .name = "max_links", .descr = "Maximum number of links", .offset = offsetof(bcmolt_epon_rp_cfg_data, max_links), .type = &type_descr_uint16_t }, { .name = "default_upstream_bandwidth", .descr = "Default upstream bandwidth for newly created links.", .offset = offsetof(bcmolt_epon_rp_cfg_data, default_upstream_bandwidth), .type = &type_descr_bcmolt_upstream_bandwidth_distribution }, { .name = "rate_of_refraction", .descr = "Rate of Refraction", .offset = offsetof(bcmolt_epon_rp_cfg_data, rate_of_refraction), .type = &type_descr_double } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_epon_rp_cfg_data = { .name = "bcmolt_epon_rp_cfg_data", .descr = "cfg", .size = sizeof(bcmolt_epon_rp_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_epon_rp_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_epon_rp_cfg_data_fields } } };
+
+/* ==== Object: gpio ==== */
+
+/* Group: gpio - key */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpio_key_reserved = { .name = "reserved", .descr = "Reserved (set to 0).", .access = 0, .property = BCMOLT_GPIO_KEY_ID_RESERVED, .offset = offsetof(bcmolt_gpio_key, reserved), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpio_key_gpio_id = { .name = "gpio_id", .descr = "GPIO ID", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPIO_KEY_ID_GPIO_ID, .offset = offsetof(bcmolt_gpio_key, gpio_id), .type = &type_descr_bcmolt_gpio_pin };
+static bcmcli_prop_descr * BCM_DESCR gpio_key_prop_array[] = { &prop_descr_gpio_key_reserved, &prop_descr_gpio_key_gpio_id };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpio_key_fields[] = { { .name = "reserved", .descr = "Reserved (set to 0).", .offset = offsetof(bcmolt_gpio_key, reserved), .type = &type_descr_uint32_t }, { .name = "gpio_id", .descr = "GPIO ID", .offset = offsetof(bcmolt_gpio_key, gpio_id), .type = &type_descr_bcmolt_gpio_pin } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpio_key = { .name = "bcmolt_gpio_key", .descr = "key", .size = sizeof(bcmolt_gpio_key), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpio_key_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpio_key_fields } } };
+
+/* Group: gpio - cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpio_cfg_direction = { .name = "direction", .descr = "GPIO PIN direction (input or output)", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPIO_CFG_ID_DIRECTION, .offset = offsetof(bcmolt_gpio_cfg_data, direction), .type = &type_descr_bcmolt_gpio_pin_dir };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpio_cfg_value = { .name = "value", .descr = "Value to write.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPIO_CFG_ID_VALUE, .offset = offsetof(bcmolt_gpio_cfg_data, value), .type = &type_descr_bcmolt_gpio_value };
+static bcmcli_prop_descr * BCM_DESCR gpio_cfg_prop_array[] = { &prop_descr_gpio_cfg_direction, &prop_descr_gpio_cfg_value };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpio_cfg_data_fields[] = { { .name = "direction", .descr = "GPIO PIN direction (input or output)", .offset = offsetof(bcmolt_gpio_cfg_data, direction), .type = &type_descr_bcmolt_gpio_pin_dir }, { .name = "value", .descr = "Value to write.", .offset = offsetof(bcmolt_gpio_cfg_data, value), .type = &type_descr_bcmolt_gpio_value } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpio_cfg_data = { .name = "bcmolt_gpio_cfg_data", .descr = "cfg", .size = sizeof(bcmolt_gpio_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpio_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpio_cfg_data_fields } } };
+
+/* ==== Object: gpon_alloc ==== */
+
+/* Group: gpon_alloc - key */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_alloc_key_pon_ni = { .name = "pon_ni", .descr = "PON network interface", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ALLOC_KEY_ID_PON_NI, .offset = offsetof(bcmolt_gpon_alloc_key, pon_ni), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_alloc_key_alloc_id = { .name = "alloc_id", .descr = "Alloc ID", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ALLOC_KEY_ID_ALLOC_ID, .offset = offsetof(bcmolt_gpon_alloc_key, alloc_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr * BCM_DESCR gpon_alloc_key_prop_array[] = { &prop_descr_gpon_alloc_key_pon_ni, &prop_descr_gpon_alloc_key_alloc_id };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_alloc_key_fields[] = { { .name = "pon_ni", .descr = "PON network interface", .offset = offsetof(bcmolt_gpon_alloc_key, pon_ni), .type = &type_descr_uint8_t }, { .name = "alloc_id", .descr = "Alloc ID", .offset = offsetof(bcmolt_gpon_alloc_key, alloc_id), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_alloc_key = { .name = "bcmolt_gpon_alloc_key", .descr = "key", .size = sizeof(bcmolt_gpon_alloc_key), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_alloc_key_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_alloc_key_fields } } };
+
+/* Group: gpon_alloc - cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_alloc_cfg_state = { .name = "state", .descr = "Current Alloc ID state", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_GPON_ALLOC_CFG_ID_STATE, .offset = offsetof(bcmolt_gpon_alloc_cfg_data, state), .type = &type_descr_bcmolt_alloc_state };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_alloc_cfg_sla = { .name = "sla", .descr = "Alloc ID SLA", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ALLOC_CFG_ID_SLA, .offset = offsetof(bcmolt_gpon_alloc_cfg_data, sla), .type = &type_descr_bcmolt_pon_alloc_sla };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_alloc_cfg_onu_id = { .name = "onu_id", .descr = "ONU ID the alloc ID is assigned to", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ALLOC_CFG_ID_ONU_ID, .offset = offsetof(bcmolt_gpon_alloc_cfg_data, onu_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_alloc_cfg_collect_stats = { .name = "collect_stats", .descr = "Enable statistics collection for this alloc ID", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ALLOC_CFG_ID_COLLECT_STATS, .offset = offsetof(bcmolt_gpon_alloc_cfg_data, collect_stats), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr * BCM_DESCR gpon_alloc_cfg_prop_array[] = { &prop_descr_gpon_alloc_cfg_state, &prop_descr_gpon_alloc_cfg_sla, &prop_descr_gpon_alloc_cfg_onu_id, &prop_descr_gpon_alloc_cfg_collect_stats };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_alloc_cfg_data_fields[] = { { .name = "state", .descr = "Current Alloc ID state", .offset = offsetof(bcmolt_gpon_alloc_cfg_data, state), .type = &type_descr_bcmolt_alloc_state }, { .name = "sla", .descr = "Alloc ID SLA", .offset = offsetof(bcmolt_gpon_alloc_cfg_data, sla), .type = &type_descr_bcmolt_pon_alloc_sla }, { .name = "onu_id", .descr = "ONU ID the alloc ID is assigned to", .offset = offsetof(bcmolt_gpon_alloc_cfg_data, onu_id), .type = &type_descr_uint16_t }, { .name = "collect_stats", .descr = "Enable statistics collection for this alloc ID", .offset = offsetof(bcmolt_gpon_alloc_cfg_data, collect_stats), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_alloc_cfg_data = { .name = "bcmolt_gpon_alloc_cfg_data", .descr = "cfg", .size = sizeof(bcmolt_gpon_alloc_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_alloc_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_alloc_cfg_data_fields } } };
+
+/* Group: gpon_alloc - stat */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_alloc_stat_rx_bytes = { .name = "rx_bytes", .descr = "Received Bytes", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ALLOC_STAT_ID_RX_BYTES, .offset = offsetof(bcmolt_gpon_alloc_stat_data, rx_bytes), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr * BCM_DESCR gpon_alloc_stat_prop_array[] = { &prop_descr_gpon_alloc_stat_rx_bytes };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_alloc_stat_data_fields[] = { { .name = "rx_bytes", .descr = "Received Bytes", .offset = offsetof(bcmolt_gpon_alloc_stat_data, rx_bytes), .type = &type_descr_uint64_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_alloc_stat_data = { .name = "bcmolt_gpon_alloc_stat_data", .descr = "stat", .size = sizeof(bcmolt_gpon_alloc_stat_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_alloc_stat_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_alloc_stat_data_fields } } };
+
+/* Group: gpon_alloc - configuration_completed */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_alloc_configuration_completed_status = { .name = "status", .descr = "Status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ALLOC_CONFIGURATION_COMPLETED_ID_STATUS, .offset = offsetof(bcmolt_gpon_alloc_configuration_completed_data, status), .type = &type_descr_bcmolt_result };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_alloc_configuration_completed_new_state = { .name = "new_state", .descr = "new state", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ALLOC_CONFIGURATION_COMPLETED_ID_NEW_STATE, .offset = offsetof(bcmolt_gpon_alloc_configuration_completed_data, new_state), .type = &type_descr_bcmolt_alloc_state };
+static bcmcli_prop_descr * BCM_DESCR gpon_alloc_configuration_completed_prop_array[] = { &prop_descr_gpon_alloc_configuration_completed_status, &prop_descr_gpon_alloc_configuration_completed_new_state };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_alloc_configuration_completed_data_fields[] = { { .name = "status", .descr = "Status", .offset = offsetof(bcmolt_gpon_alloc_configuration_completed_data, status), .type = &type_descr_bcmolt_result }, { .name = "new_state", .descr = "new state", .offset = offsetof(bcmolt_gpon_alloc_configuration_completed_data, new_state), .type = &type_descr_bcmolt_alloc_state } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_alloc_configuration_completed_data = { .name = "bcmolt_gpon_alloc_configuration_completed_data", .descr = "Configuration Completed", .size = sizeof(bcmolt_gpon_alloc_configuration_completed_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_alloc_configuration_completed_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_alloc_configuration_completed_data_fields } } };
+
+/* Group: gpon_alloc - set_state */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_alloc_set_state_state = { .name = "state", .descr = "State", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ALLOC_SET_STATE_ID_STATE, .offset = offsetof(bcmolt_gpon_alloc_set_state_data, state), .type = &type_descr_bcmolt_alloc_operation };
+static bcmcli_prop_descr * BCM_DESCR gpon_alloc_set_state_prop_array[] = { &prop_descr_gpon_alloc_set_state_state };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_alloc_set_state_data_fields[] = { { .name = "state", .descr = "State", .offset = offsetof(bcmolt_gpon_alloc_set_state_data, state), .type = &type_descr_bcmolt_alloc_operation } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_alloc_set_state_data = { .name = "bcmolt_gpon_alloc_set_state_data", .descr = "Sets the alloc's activation state.  This is only used for protection switching on an active-standby PON.  In normal operation, this isn't necessary since allocs are activated/deactivated automatically along with the ONU.", .size = sizeof(bcmolt_gpon_alloc_set_state_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_alloc_set_state_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_alloc_set_state_data_fields } } };
+
+/* Group: gpon_alloc - get_stats */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_alloc_get_stats_num_of_cycles = { .name = "num_of_cycles", .descr = "The number of cycles to run statistics collection", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ALLOC_GET_STATS_ID_NUM_OF_CYCLES, .offset = offsetof(bcmolt_gpon_alloc_get_stats_data, num_of_cycles), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr * BCM_DESCR gpon_alloc_get_stats_prop_array[] = { &prop_descr_gpon_alloc_get_stats_num_of_cycles };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_alloc_get_stats_data_fields[] = { { .name = "num_of_cycles", .descr = "The number of cycles to run statistics collection", .offset = offsetof(bcmolt_gpon_alloc_get_stats_data, num_of_cycles), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_alloc_get_stats_data = { .name = "bcmolt_gpon_alloc_get_stats_data", .descr = "Run statistics collection for a given period of time", .size = sizeof(bcmolt_gpon_alloc_get_stats_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_alloc_get_stats_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_alloc_get_stats_data_fields } } };
+
+/* Group: gpon_alloc - get_alloc_stats_completed */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_alloc_get_alloc_stats_completed_status = { .name = "status", .descr = "status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_STATUS, .offset = offsetof(bcmolt_gpon_alloc_get_alloc_stats_completed_data, status), .type = &type_descr_bcmolt_result };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_alloc_get_alloc_stats_completed_average_nsr_used = { .name = "average_nsr_used", .descr = "Average NSR used bytes", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_NSR_USED, .offset = offsetof(bcmolt_gpon_alloc_get_alloc_stats_completed_data, average_nsr_used), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_alloc_get_alloc_stats_completed_average_nsr_allocated = { .name = "average_nsr_allocated", .descr = "Average NSR allocated bytes", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_NSR_ALLOCATED, .offset = offsetof(bcmolt_gpon_alloc_get_alloc_stats_completed_data, average_nsr_allocated), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_alloc_get_alloc_stats_completed_average_sr_report = { .name = "average_sr_report", .descr = "Average SR report", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_SR_REPORT, .offset = offsetof(bcmolt_gpon_alloc_get_alloc_stats_completed_data, average_sr_report), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr * BCM_DESCR gpon_alloc_get_alloc_stats_completed_prop_array[] = { &prop_descr_gpon_alloc_get_alloc_stats_completed_status, &prop_descr_gpon_alloc_get_alloc_stats_completed_average_nsr_used, &prop_descr_gpon_alloc_get_alloc_stats_completed_average_nsr_allocated, &prop_descr_gpon_alloc_get_alloc_stats_completed_average_sr_report };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_alloc_get_alloc_stats_completed_data_fields[] = { { .name = "status", .descr = "status", .offset = offsetof(bcmolt_gpon_alloc_get_alloc_stats_completed_data, status), .type = &type_descr_bcmolt_result }, { .name = "average_nsr_used", .descr = "Average NSR used bytes", .offset = offsetof(bcmolt_gpon_alloc_get_alloc_stats_completed_data, average_nsr_used), .type = &type_descr_uint32_t }, { .name = "average_nsr_allocated", .descr = "Average NSR allocated bytes", .offset = offsetof(bcmolt_gpon_alloc_get_alloc_stats_completed_data, average_nsr_allocated), .type = &type_descr_uint32_t }, { .name = "average_sr_report", .descr = "Average SR report", .offset = offsetof(bcmolt_gpon_alloc_get_alloc_stats_completed_data, average_sr_report), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_alloc_get_alloc_stats_completed_data = { .name = "bcmolt_gpon_alloc_get_alloc_stats_completed_data", .descr = "Collected alloc ID statistics from get_stats operation", .size = sizeof(bcmolt_gpon_alloc_get_alloc_stats_completed_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_alloc_get_alloc_stats_completed_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_alloc_get_alloc_stats_completed_data_fields } } };
+
+/* Group: gpon_alloc - stat_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_alloc_stat_cfg_cfg = { .name = "cfg", .descr = "Statistic alarm configuration.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ALLOC_STAT_CFG_ID_CFG, .offset = offsetof(bcmolt_gpon_alloc_stat_cfg_data, cfg), .type = &type_descr_bcmolt_stat_alarm_config };
+static bcmcli_prop_descr * BCM_DESCR gpon_alloc_stat_cfg_prop_array[] = { &prop_descr_gpon_alloc_stat_cfg_cfg };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_alloc_stat_cfg_data_fields[] = { { .name = "cfg", .descr = "Statistic alarm configuration.", .offset = offsetof(bcmolt_gpon_alloc_stat_cfg_data, cfg), .type = &type_descr_bcmolt_stat_alarm_config } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_alloc_stat_cfg_data = { .name = "bcmolt_gpon_alloc_stat_cfg_data", .descr = "Statistic Configuration", .size = sizeof(bcmolt_gpon_alloc_stat_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_alloc_stat_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_alloc_stat_cfg_data_fields } } };
+
+/* Group: gpon_alloc - stat_alarm_raised */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_alloc_stat_alarm_raised_stat = { .name = "stat", .descr = "Statistic identifier.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ALLOC_STAT_ALARM_RAISED_ID_STAT, .offset = offsetof(bcmolt_gpon_alloc_stat_alarm_raised_data, stat), .type = &type_descr_bcmolt_gpon_alloc_stat_id };
+static bcmcli_prop_descr * BCM_DESCR gpon_alloc_stat_alarm_raised_prop_array[] = { &prop_descr_gpon_alloc_stat_alarm_raised_stat };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_alloc_stat_alarm_raised_data_fields[] = { { .name = "stat", .descr = "Statistic identifier.", .offset = offsetof(bcmolt_gpon_alloc_stat_alarm_raised_data, stat), .type = &type_descr_bcmolt_gpon_alloc_stat_id } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_alloc_stat_alarm_raised_data = { .name = "bcmolt_gpon_alloc_stat_alarm_raised_data", .descr = "Sent when a configured statistic alarm condition has been met.", .size = sizeof(bcmolt_gpon_alloc_stat_alarm_raised_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_alloc_stat_alarm_raised_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_alloc_stat_alarm_raised_data_fields } } };
+
+/* Group: gpon_alloc - stat_alarm_cleared */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_alloc_stat_alarm_cleared_stat = { .name = "stat", .descr = "Statistic identifier.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ALLOC_STAT_ALARM_CLEARED_ID_STAT, .offset = offsetof(bcmolt_gpon_alloc_stat_alarm_cleared_data, stat), .type = &type_descr_bcmolt_gpon_alloc_stat_id };
+static bcmcli_prop_descr * BCM_DESCR gpon_alloc_stat_alarm_cleared_prop_array[] = { &prop_descr_gpon_alloc_stat_alarm_cleared_stat };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_alloc_stat_alarm_cleared_data_fields[] = { { .name = "stat", .descr = "Statistic identifier.", .offset = offsetof(bcmolt_gpon_alloc_stat_alarm_cleared_data, stat), .type = &type_descr_bcmolt_gpon_alloc_stat_id } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_alloc_stat_alarm_cleared_data = { .name = "bcmolt_gpon_alloc_stat_alarm_cleared_data", .descr = "Sent when a configured statistic alarm condition is no longer met.", .size = sizeof(bcmolt_gpon_alloc_stat_alarm_cleared_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_alloc_stat_alarm_cleared_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_alloc_stat_alarm_cleared_data_fields } } };
+
+/* Group: gpon_alloc - auto_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_alloc_auto_cfg_configuration_completed = { .name = "configuration_completed", .descr = "If true, indications of type \"configuration_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ALLOC_AUTO_CFG_ID_CONFIGURATION_COMPLETED, .offset = offsetof(bcmolt_gpon_alloc_auto_cfg_data, configuration_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_alloc_auto_cfg_get_alloc_stats_completed = { .name = "get_alloc_stats_completed", .descr = "If true, indications of type \"get_alloc_stats_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ALLOC_AUTO_CFG_ID_GET_ALLOC_STATS_COMPLETED, .offset = offsetof(bcmolt_gpon_alloc_auto_cfg_data, get_alloc_stats_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_alloc_auto_cfg_stat_alarm_cleared = { .name = "stat_alarm_cleared", .descr = "If true, indications of type \"stat_alarm_cleared\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ALLOC_AUTO_CFG_ID_STAT_ALARM_CLEARED, .offset = offsetof(bcmolt_gpon_alloc_auto_cfg_data, stat_alarm_cleared), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_alloc_auto_cfg_stat_alarm_raised = { .name = "stat_alarm_raised", .descr = "If true, indications of type \"stat_alarm_raised\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ALLOC_AUTO_CFG_ID_STAT_ALARM_RAISED, .offset = offsetof(bcmolt_gpon_alloc_auto_cfg_data, stat_alarm_raised), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr * BCM_DESCR gpon_alloc_auto_cfg_prop_array[] = { &prop_descr_gpon_alloc_auto_cfg_configuration_completed, &prop_descr_gpon_alloc_auto_cfg_get_alloc_stats_completed, &prop_descr_gpon_alloc_auto_cfg_stat_alarm_cleared, &prop_descr_gpon_alloc_auto_cfg_stat_alarm_raised };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_alloc_auto_cfg_data_fields[] = { { .name = "configuration_completed", .descr = "If true, indications of type \"configuration_completed\" will be generated.", .offset = offsetof(bcmolt_gpon_alloc_auto_cfg_data, configuration_completed), .type = &type_descr_bcmos_bool }, { .name = "get_alloc_stats_completed", .descr = "If true, indications of type \"get_alloc_stats_completed\" will be generated.", .offset = offsetof(bcmolt_gpon_alloc_auto_cfg_data, get_alloc_stats_completed), .type = &type_descr_bcmos_bool }, { .name = "stat_alarm_cleared", .descr = "If true, indications of type \"stat_alarm_cleared\" will be generated.", .offset = offsetof(bcmolt_gpon_alloc_auto_cfg_data, stat_alarm_cleared), .type = &type_descr_bcmos_bool }, { .name = "stat_alarm_raised", .descr = "If true, indications of type \"stat_alarm_raised\" will be generated.", .offset = offsetof(bcmolt_gpon_alloc_auto_cfg_data, stat_alarm_raised), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_alloc_auto_cfg_data = { .name = "bcmolt_gpon_alloc_auto_cfg_data", .descr = "Indication Configuration", .size = sizeof(bcmolt_gpon_alloc_auto_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_alloc_auto_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_alloc_auto_cfg_data_fields } } };
+
+/* ==== Object: gpon_gem_port ==== */
+
+/* Group: gpon_gem_port - key */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_gem_port_key_pon_ni = { .name = "pon_ni", .descr = "PON network interface", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_GEM_PORT_KEY_ID_PON_NI, .offset = offsetof(bcmolt_gpon_gem_port_key, pon_ni), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_gem_port_key_gem_port_id = { .name = "gem_port_id", .descr = "GEM Port ID", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_GEM_PORT_KEY_ID_GEM_PORT_ID, .offset = offsetof(bcmolt_gpon_gem_port_key, gem_port_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr * BCM_DESCR gpon_gem_port_key_prop_array[] = { &prop_descr_gpon_gem_port_key_pon_ni, &prop_descr_gpon_gem_port_key_gem_port_id };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_gem_port_key_fields[] = { { .name = "pon_ni", .descr = "PON network interface", .offset = offsetof(bcmolt_gpon_gem_port_key, pon_ni), .type = &type_descr_uint8_t }, { .name = "gem_port_id", .descr = "GEM Port ID", .offset = offsetof(bcmolt_gpon_gem_port_key, gem_port_id), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_gem_port_key = { .name = "bcmolt_gpon_gem_port_key", .descr = "key", .size = sizeof(bcmolt_gpon_gem_port_key), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_gem_port_key_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_gem_port_key_fields } } };
+
+/* Group: gpon_gem_port - cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_gem_port_cfg_configuration = { .name = "configuration", .descr = "GEM port configuration parameters", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_GEM_PORT_CFG_ID_CONFIGURATION, .offset = offsetof(bcmolt_gpon_gem_port_cfg_data, configuration), .type = &type_descr_bcmolt_gem_port_configuration };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_gem_port_cfg_onu_id = { .name = "onu_id", .descr = "ONU ID this GEM port is assigned to", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_GEM_PORT_CFG_ID_ONU_ID, .offset = offsetof(bcmolt_gpon_gem_port_cfg_data, onu_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_gem_port_cfg_gem_port_state = { .name = "gem_port_state", .descr = "Current GEM port state", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_GPON_GEM_PORT_CFG_ID_GEM_PORT_STATE, .offset = offsetof(bcmolt_gpon_gem_port_cfg_data, gem_port_state), .type = &type_descr_bcmolt_gpon_gem_port_state };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_gem_port_cfg_downstream_encryption_mode = { .name = "downstream_encryption_mode", .descr = "Enable/Disable the downstream encryption mode of the GEM Port", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_GEM_PORT_CFG_ID_DOWNSTREAM_ENCRYPTION_MODE, .offset = offsetof(bcmolt_gpon_gem_port_cfg_data, downstream_encryption_mode), .type = &type_descr_bcmolt_control_state };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_gem_port_cfg_upstream_destination_queue = { .name = "upstream_destination_queue", .descr = "The destination queue of the packets arriving on this GEM Port on the upstream direction", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_GEM_PORT_CFG_ID_UPSTREAM_DESTINATION_QUEUE, .offset = offsetof(bcmolt_gpon_gem_port_cfg_data, upstream_destination_queue), .type = &type_descr_bcmolt_us_gem_port_destination };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_gem_port_cfg_control = { .name = "control", .descr = "Enable/Disable the GEM Port ID in the OLT", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_GEM_PORT_CFG_ID_CONTROL, .offset = offsetof(bcmolt_gpon_gem_port_cfg_data, control), .type = &type_descr_bcmolt_control_state };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_gem_port_cfg_debug_flow_config = { .name = "debug_flow_config", .descr = "Traffic flow debug options", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_GEM_PORT_CFG_ID_DEBUG_FLOW_CONFIG, .offset = offsetof(bcmolt_gpon_gem_port_cfg_data, debug_flow_config), .type = &type_descr_bcmolt_gpon_debug_flow_config };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_gem_port_cfg_mac_table_entry_limit = { .name = "mac_table_entry_limit", .descr = "The maximum number of MAC table entries allowed for this GEM port (0 = no limit).", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_GEM_PORT_CFG_ID_MAC_TABLE_ENTRY_LIMIT, .offset = offsetof(bcmolt_gpon_gem_port_cfg_data, mac_table_entry_limit), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr * BCM_DESCR gpon_gem_port_cfg_prop_array[] = { &prop_descr_gpon_gem_port_cfg_configuration, &prop_descr_gpon_gem_port_cfg_onu_id, &prop_descr_gpon_gem_port_cfg_gem_port_state, &prop_descr_gpon_gem_port_cfg_downstream_encryption_mode, &prop_descr_gpon_gem_port_cfg_upstream_destination_queue, &prop_descr_gpon_gem_port_cfg_control, &prop_descr_gpon_gem_port_cfg_debug_flow_config, &prop_descr_gpon_gem_port_cfg_mac_table_entry_limit };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_gem_port_cfg_data_fields[] = { { .name = "configuration", .descr = "GEM port configuration parameters", .offset = offsetof(bcmolt_gpon_gem_port_cfg_data, configuration), .type = &type_descr_bcmolt_gem_port_configuration }, { .name = "onu_id", .descr = "ONU ID this GEM port is assigned to", .offset = offsetof(bcmolt_gpon_gem_port_cfg_data, onu_id), .type = &type_descr_uint16_t }, { .name = "gem_port_state", .descr = "Current GEM port state", .offset = offsetof(bcmolt_gpon_gem_port_cfg_data, gem_port_state), .type = &type_descr_bcmolt_gpon_gem_port_state }, { .name = "downstream_encryption_mode", .descr = "Enable/Disable the downstream encryption mode of the GEM Port", .offset = offsetof(bcmolt_gpon_gem_port_cfg_data, downstream_encryption_mode), .type = &type_descr_bcmolt_control_state }, { .name = "upstream_destination_queue", .descr = "The destination queue of the packets arriving on this GEM Port on the upstream direction", .offset = offsetof(bcmolt_gpon_gem_port_cfg_data, upstream_destination_queue), .type = &type_descr_bcmolt_us_gem_port_destination }, { .name = "control", .descr = "Enable/Disable the GEM Port ID in the OLT", .offset = offsetof(bcmolt_gpon_gem_port_cfg_data, control), .type = &type_descr_bcmolt_control_state }, { .name = "debug_flow_config", .descr = "Traffic flow debug options", .offset = offsetof(bcmolt_gpon_gem_port_cfg_data, debug_flow_config), .type = &type_descr_bcmolt_gpon_debug_flow_config }, { .name = "mac_table_entry_limit", .descr = "The maximum number of MAC table entries allowed for this GEM port (0 = no limit).", .offset = offsetof(bcmolt_gpon_gem_port_cfg_data, mac_table_entry_limit), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_gem_port_cfg_data = { .name = "bcmolt_gpon_gem_port_cfg_data", .descr = "cfg", .size = sizeof(bcmolt_gpon_gem_port_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_gem_port_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_gem_port_cfg_data_fields } } };
+
+/* Group: gpon_gem_port - stat */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_gem_port_stat_rx_packets = { .name = "rx_packets", .descr = "Received GEM frames", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_GEM_PORT_STAT_ID_RX_PACKETS, .offset = offsetof(bcmolt_gpon_gem_port_stat_data, rx_packets), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_gem_port_stat_rx_bytes = { .name = "rx_bytes", .descr = "Received bytes", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_GEM_PORT_STAT_ID_RX_BYTES, .offset = offsetof(bcmolt_gpon_gem_port_stat_data, rx_bytes), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_gem_port_stat_tx_packets = { .name = "tx_packets", .descr = "Transmitted GEM frames", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_GEM_PORT_STAT_ID_TX_PACKETS, .offset = offsetof(bcmolt_gpon_gem_port_stat_data, tx_packets), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_gem_port_stat_tx_bytes = { .name = "tx_bytes", .descr = "Transmitted bytes", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_GEM_PORT_STAT_ID_TX_BYTES, .offset = offsetof(bcmolt_gpon_gem_port_stat_data, tx_bytes), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr * BCM_DESCR gpon_gem_port_stat_prop_array[] = { &prop_descr_gpon_gem_port_stat_rx_packets, &prop_descr_gpon_gem_port_stat_rx_bytes, &prop_descr_gpon_gem_port_stat_tx_packets, &prop_descr_gpon_gem_port_stat_tx_bytes };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_gem_port_stat_data_fields[] = { { .name = "rx_packets", .descr = "Received GEM frames", .offset = offsetof(bcmolt_gpon_gem_port_stat_data, rx_packets), .type = &type_descr_uint64_t }, { .name = "rx_bytes", .descr = "Received bytes", .offset = offsetof(bcmolt_gpon_gem_port_stat_data, rx_bytes), .type = &type_descr_uint64_t }, { .name = "tx_packets", .descr = "Transmitted GEM frames", .offset = offsetof(bcmolt_gpon_gem_port_stat_data, tx_packets), .type = &type_descr_uint64_t }, { .name = "tx_bytes", .descr = "Transmitted bytes", .offset = offsetof(bcmolt_gpon_gem_port_stat_data, tx_bytes), .type = &type_descr_uint64_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_gem_port_stat_data = { .name = "bcmolt_gpon_gem_port_stat_data", .descr = "stat", .size = sizeof(bcmolt_gpon_gem_port_stat_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_gem_port_stat_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_gem_port_stat_data_fields } } };
+
+/* Group: gpon_gem_port - configuration_completed */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_gem_port_configuration_completed_status = { .name = "status", .descr = "status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_GEM_PORT_CONFIGURATION_COMPLETED_ID_STATUS, .offset = offsetof(bcmolt_gpon_gem_port_configuration_completed_data, status), .type = &type_descr_bcmolt_result };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_gem_port_configuration_completed_new_state = { .name = "new_state", .descr = "new state", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_GEM_PORT_CONFIGURATION_COMPLETED_ID_NEW_STATE, .offset = offsetof(bcmolt_gpon_gem_port_configuration_completed_data, new_state), .type = &type_descr_bcmolt_gpon_gem_port_state };
+static bcmcli_prop_descr * BCM_DESCR gpon_gem_port_configuration_completed_prop_array[] = { &prop_descr_gpon_gem_port_configuration_completed_status, &prop_descr_gpon_gem_port_configuration_completed_new_state };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_gem_port_configuration_completed_data_fields[] = { { .name = "status", .descr = "status", .offset = offsetof(bcmolt_gpon_gem_port_configuration_completed_data, status), .type = &type_descr_bcmolt_result }, { .name = "new_state", .descr = "new state", .offset = offsetof(bcmolt_gpon_gem_port_configuration_completed_data, new_state), .type = &type_descr_bcmolt_gpon_gem_port_state } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_gem_port_configuration_completed_data = { .name = "bcmolt_gpon_gem_port_configuration_completed_data", .descr = "Configuration Completed", .size = sizeof(bcmolt_gpon_gem_port_configuration_completed_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_gem_port_configuration_completed_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_gem_port_configuration_completed_data_fields } } };
+
+/* Group: gpon_gem_port - set_state */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_gem_port_set_state_state = { .name = "state", .descr = "State", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_GEM_PORT_SET_STATE_ID_STATE, .offset = offsetof(bcmolt_gpon_gem_port_set_state_data, state), .type = &type_descr_bcmolt_gem_port_operation };
+static bcmcli_prop_descr * BCM_DESCR gpon_gem_port_set_state_prop_array[] = { &prop_descr_gpon_gem_port_set_state_state };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_gem_port_set_state_data_fields[] = { { .name = "state", .descr = "State", .offset = offsetof(bcmolt_gpon_gem_port_set_state_data, state), .type = &type_descr_bcmolt_gem_port_operation } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_gem_port_set_state_data = { .name = "bcmolt_gpon_gem_port_set_state_data", .descr = "Sets the GEM port's activation state.  This is only used for protection switching on an active-standby PON.  In normal operation, this isn't necessary since GEM ports are activated/deactivated automatically along with the ONU.", .size = sizeof(bcmolt_gpon_gem_port_set_state_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_gem_port_set_state_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_gem_port_set_state_data_fields } } };
+
+/* Group: gpon_gem_port - stat_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_gem_port_stat_cfg_cfg = { .name = "cfg", .descr = "Statistic alarm configuration.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_GEM_PORT_STAT_CFG_ID_CFG, .offset = offsetof(bcmolt_gpon_gem_port_stat_cfg_data, cfg), .type = &type_descr_bcmolt_stat_alarm_config };
+static bcmcli_prop_descr * BCM_DESCR gpon_gem_port_stat_cfg_prop_array[] = { &prop_descr_gpon_gem_port_stat_cfg_cfg };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_gem_port_stat_cfg_data_fields[] = { { .name = "cfg", .descr = "Statistic alarm configuration.", .offset = offsetof(bcmolt_gpon_gem_port_stat_cfg_data, cfg), .type = &type_descr_bcmolt_stat_alarm_config } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_gem_port_stat_cfg_data = { .name = "bcmolt_gpon_gem_port_stat_cfg_data", .descr = "Statistic Configuration", .size = sizeof(bcmolt_gpon_gem_port_stat_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_gem_port_stat_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_gem_port_stat_cfg_data_fields } } };
+
+/* Group: gpon_gem_port - stat_alarm_raised */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_gem_port_stat_alarm_raised_stat = { .name = "stat", .descr = "Statistic identifier.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_GEM_PORT_STAT_ALARM_RAISED_ID_STAT, .offset = offsetof(bcmolt_gpon_gem_port_stat_alarm_raised_data, stat), .type = &type_descr_bcmolt_gpon_gem_port_stat_id };
+static bcmcli_prop_descr * BCM_DESCR gpon_gem_port_stat_alarm_raised_prop_array[] = { &prop_descr_gpon_gem_port_stat_alarm_raised_stat };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_gem_port_stat_alarm_raised_data_fields[] = { { .name = "stat", .descr = "Statistic identifier.", .offset = offsetof(bcmolt_gpon_gem_port_stat_alarm_raised_data, stat), .type = &type_descr_bcmolt_gpon_gem_port_stat_id } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_gem_port_stat_alarm_raised_data = { .name = "bcmolt_gpon_gem_port_stat_alarm_raised_data", .descr = "Sent when a configured statistic alarm condition has been met.", .size = sizeof(bcmolt_gpon_gem_port_stat_alarm_raised_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_gem_port_stat_alarm_raised_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_gem_port_stat_alarm_raised_data_fields } } };
+
+/* Group: gpon_gem_port - stat_alarm_cleared */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_gem_port_stat_alarm_cleared_stat = { .name = "stat", .descr = "Statistic identifier.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_GEM_PORT_STAT_ALARM_CLEARED_ID_STAT, .offset = offsetof(bcmolt_gpon_gem_port_stat_alarm_cleared_data, stat), .type = &type_descr_bcmolt_gpon_gem_port_stat_id };
+static bcmcli_prop_descr * BCM_DESCR gpon_gem_port_stat_alarm_cleared_prop_array[] = { &prop_descr_gpon_gem_port_stat_alarm_cleared_stat };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_gem_port_stat_alarm_cleared_data_fields[] = { { .name = "stat", .descr = "Statistic identifier.", .offset = offsetof(bcmolt_gpon_gem_port_stat_alarm_cleared_data, stat), .type = &type_descr_bcmolt_gpon_gem_port_stat_id } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_gem_port_stat_alarm_cleared_data = { .name = "bcmolt_gpon_gem_port_stat_alarm_cleared_data", .descr = "Sent when a configured statistic alarm condition is no longer met.", .size = sizeof(bcmolt_gpon_gem_port_stat_alarm_cleared_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_gem_port_stat_alarm_cleared_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_gem_port_stat_alarm_cleared_data_fields } } };
+
+/* Group: gpon_gem_port - auto_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_gem_port_auto_cfg_configuration_completed = { .name = "configuration_completed", .descr = "If true, indications of type \"configuration_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_GEM_PORT_AUTO_CFG_ID_CONFIGURATION_COMPLETED, .offset = offsetof(bcmolt_gpon_gem_port_auto_cfg_data, configuration_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_gem_port_auto_cfg_stat_alarm_cleared = { .name = "stat_alarm_cleared", .descr = "If true, indications of type \"stat_alarm_cleared\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_GEM_PORT_AUTO_CFG_ID_STAT_ALARM_CLEARED, .offset = offsetof(bcmolt_gpon_gem_port_auto_cfg_data, stat_alarm_cleared), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_gem_port_auto_cfg_stat_alarm_raised = { .name = "stat_alarm_raised", .descr = "If true, indications of type \"stat_alarm_raised\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_GEM_PORT_AUTO_CFG_ID_STAT_ALARM_RAISED, .offset = offsetof(bcmolt_gpon_gem_port_auto_cfg_data, stat_alarm_raised), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr * BCM_DESCR gpon_gem_port_auto_cfg_prop_array[] = { &prop_descr_gpon_gem_port_auto_cfg_configuration_completed, &prop_descr_gpon_gem_port_auto_cfg_stat_alarm_cleared, &prop_descr_gpon_gem_port_auto_cfg_stat_alarm_raised };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_gem_port_auto_cfg_data_fields[] = { { .name = "configuration_completed", .descr = "If true, indications of type \"configuration_completed\" will be generated.", .offset = offsetof(bcmolt_gpon_gem_port_auto_cfg_data, configuration_completed), .type = &type_descr_bcmos_bool }, { .name = "stat_alarm_cleared", .descr = "If true, indications of type \"stat_alarm_cleared\" will be generated.", .offset = offsetof(bcmolt_gpon_gem_port_auto_cfg_data, stat_alarm_cleared), .type = &type_descr_bcmos_bool }, { .name = "stat_alarm_raised", .descr = "If true, indications of type \"stat_alarm_raised\" will be generated.", .offset = offsetof(bcmolt_gpon_gem_port_auto_cfg_data, stat_alarm_raised), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_gem_port_auto_cfg_data = { .name = "bcmolt_gpon_gem_port_auto_cfg_data", .descr = "Indication Configuration", .size = sizeof(bcmolt_gpon_gem_port_auto_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_gem_port_auto_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_gem_port_auto_cfg_data_fields } } };
+
+/* ==== Object: gpon_iwf ==== */
+
+/* Group: gpon_iwf - key */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_key_pon_ni = { .name = "pon_ni", .descr = "PON network interface", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_KEY_ID_PON_NI, .offset = offsetof(bcmolt_gpon_iwf_key, pon_ni), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr * BCM_DESCR gpon_iwf_key_prop_array[] = { &prop_descr_gpon_iwf_key_pon_ni };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_key_fields[] = { { .name = "pon_ni", .descr = "PON network interface", .offset = offsetof(bcmolt_gpon_iwf_key, pon_ni), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_key = { .name = "bcmolt_gpon_iwf_key", .descr = "key", .size = sizeof(bcmolt_gpon_iwf_key), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_iwf_key_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_iwf_key_fields } } };
+
+/* Group: gpon_iwf - cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_cfg_iwf_mode = { .name = "iwf_mode", .descr = "IWF mapping mode", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_CFG_ID_IWF_MODE, .offset = offsetof(bcmolt_gpon_iwf_cfg_data, iwf_mode), .type = &type_descr_bcmolt_iwf_mode };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_cfg_us_tpid_per_flow = { .name = "us_tpid_per_flow", .descr = "TPID value of the VLAN tag added to upstream packet when IWF mode is set to per flow", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_CFG_ID_US_TPID_PER_FLOW, .offset = offsetof(bcmolt_gpon_iwf_cfg_data, us_tpid_per_flow), .type = &type_descr_bcmolt_arr_u16_2_hex };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_cfg_us_otag_direct_tpid = { .name = "us_otag_direct_tpid", .descr = "TPID value of the VLAN tag added to upstream packet when IWF mode is set to direct mode", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_CFG_ID_US_OTAG_DIRECT_TPID, .offset = offsetof(bcmolt_gpon_iwf_cfg_data, us_otag_direct_tpid), .type = &type_descr_uint16_t_hex };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_cfg_us_otag_direct_pbit = { .name = "us_otag_direct_pbit", .descr = "P-bit value of the VLAN tag added to upstream packet when IWF mode is set to direct mode", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_CFG_ID_US_OTAG_DIRECT_PBIT, .offset = offsetof(bcmolt_gpon_iwf_cfg_data, us_otag_direct_pbit), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_cfg_ds_tpid = { .name = "ds_tpid", .descr = "Packets marked with one of the five configured DS TPID options will be forwarded, all the rest will be dropped", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_CFG_ID_DS_TPID, .offset = offsetof(bcmolt_gpon_iwf_cfg_data, ds_tpid), .type = &type_descr_bcmolt_arr_u16_5_hex };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_cfg_mac_table_configuration = { .name = "mac_table_configuration", .descr = "MAC table configuration", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_CFG_ID_MAC_TABLE_CONFIGURATION, .offset = offsetof(bcmolt_gpon_iwf_cfg_data, mac_table_configuration), .type = &type_descr_bcmolt_mac_table_configuration };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_cfg_debug_flow_configuration = { .name = "debug_flow_configuration", .descr = "MAC table configuration", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_CFG_ID_DEBUG_FLOW_CONFIGURATION, .offset = offsetof(bcmolt_gpon_iwf_cfg_data, debug_flow_configuration), .type = &type_descr_bcmolt_gpon_iwf_debug_flow_config };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_cfg_mac_table_count = { .name = "mac_table_count", .descr = "Number of MAC table entries configured in the MAC table", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_GPON_IWF_CFG_ID_MAC_TABLE_COUNT, .offset = offsetof(bcmolt_gpon_iwf_cfg_data, mac_table_count), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_cfg_forbidden_vlan_flow_gem_range_start = { .name = "forbidden_vlan_flow_gem_range_start", .descr = "Forbidden range for Vlans, Flows and Gems start value", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_CFG_ID_FORBIDDEN_VLAN_FLOW_GEM_RANGE_START, .offset = offsetof(bcmolt_gpon_iwf_cfg_data, forbidden_vlan_flow_gem_range_start), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr * BCM_DESCR gpon_iwf_cfg_prop_array[] = { &prop_descr_gpon_iwf_cfg_iwf_mode, &prop_descr_gpon_iwf_cfg_us_tpid_per_flow, &prop_descr_gpon_iwf_cfg_us_otag_direct_tpid, &prop_descr_gpon_iwf_cfg_us_otag_direct_pbit, &prop_descr_gpon_iwf_cfg_ds_tpid, &prop_descr_gpon_iwf_cfg_mac_table_configuration, &prop_descr_gpon_iwf_cfg_debug_flow_configuration, &prop_descr_gpon_iwf_cfg_mac_table_count, &prop_descr_gpon_iwf_cfg_forbidden_vlan_flow_gem_range_start };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_cfg_data_fields[] = { { .name = "iwf_mode", .descr = "IWF mapping mode", .offset = offsetof(bcmolt_gpon_iwf_cfg_data, iwf_mode), .type = &type_descr_bcmolt_iwf_mode }, { .name = "us_tpid_per_flow", .descr = "TPID value of the VLAN tag added to upstream packet when IWF mode is set to per flow", .offset = offsetof(bcmolt_gpon_iwf_cfg_data, us_tpid_per_flow), .type = &type_descr_bcmolt_arr_u16_2_hex }, { .name = "us_otag_direct_tpid", .descr = "TPID value of the VLAN tag added to upstream packet when IWF mode is set to direct mode", .offset = offsetof(bcmolt_gpon_iwf_cfg_data, us_otag_direct_tpid), .type = &type_descr_uint16_t_hex }, { .name = "us_otag_direct_pbit", .descr = "P-bit value of the VLAN tag added to upstream packet when IWF mode is set to direct mode", .offset = offsetof(bcmolt_gpon_iwf_cfg_data, us_otag_direct_pbit), .type = &type_descr_uint8_t }, { .name = "ds_tpid", .descr = "Packets marked with one of the five configured DS TPID options will be forwarded, all the rest will be dropped", .offset = offsetof(bcmolt_gpon_iwf_cfg_data, ds_tpid), .type = &type_descr_bcmolt_arr_u16_5_hex }, { .name = "mac_table_configuration", .descr = "MAC table configuration", .offset = offsetof(bcmolt_gpon_iwf_cfg_data, mac_table_configuration), .type = &type_descr_bcmolt_mac_table_configuration }, { .name = "debug_flow_configuration", .descr = "MAC table configuration", .offset = offsetof(bcmolt_gpon_iwf_cfg_data, debug_flow_configuration), .type = &type_descr_bcmolt_gpon_iwf_debug_flow_config }, { .name = "mac_table_count", .descr = "Number of MAC table entries configured in the MAC table", .offset = offsetof(bcmolt_gpon_iwf_cfg_data, mac_table_count), .type = &type_descr_uint16_t }, { .name = "forbidden_vlan_flow_gem_range_start", .descr = "Forbidden range for Vlans, Flows and Gems start value", .offset = offsetof(bcmolt_gpon_iwf_cfg_data, forbidden_vlan_flow_gem_range_start), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_cfg_data = { .name = "bcmolt_gpon_iwf_cfg_data", .descr = "cfg", .size = sizeof(bcmolt_gpon_iwf_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_iwf_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_iwf_cfg_data_fields } } };
+
+/* Group: gpon_iwf - stat */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_stat_ds_hit_event = { .name = "ds_hit_event", .descr = "DS hit event", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_STAT_ID_DS_HIT_EVENT, .offset = offsetof(bcmolt_gpon_iwf_stat_data, ds_hit_event), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_stat_ds_miss_event = { .name = "ds_miss_event", .descr = "DS miss event", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_STAT_ID_DS_MISS_EVENT, .offset = offsetof(bcmolt_gpon_iwf_stat_data, ds_miss_event), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_stat_ds_drop_due_to_miss_event = { .name = "ds_drop_due_to_miss_event", .descr = "DS drop due to miss event", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_STAT_ID_DS_DROP_DUE_TO_MISS_EVENT, .offset = offsetof(bcmolt_gpon_iwf_stat_data, ds_drop_due_to_miss_event), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_stat_ds_drop_due_to_hit_event = { .name = "ds_drop_due_to_hit_event", .descr = "DS drop due to hit event", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_STAT_ID_DS_DROP_DUE_TO_HIT_EVENT, .offset = offsetof(bcmolt_gpon_iwf_stat_data, ds_drop_due_to_hit_event), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_stat_ds_drop_to_disabled_gem = { .name = "ds_drop_to_disabled_gem", .descr = "DS drop to disabled GEM", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_STAT_ID_DS_DROP_TO_DISABLED_GEM, .offset = offsetof(bcmolt_gpon_iwf_stat_data, ds_drop_to_disabled_gem), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_stat_new_mac_discovered = { .name = "new_mac_discovered", .descr = "New MAC discovered", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_STAT_ID_NEW_MAC_DISCOVERED, .offset = offsetof(bcmolt_gpon_iwf_stat_data, new_mac_discovered), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_stat_move_event = { .name = "move_event", .descr = "Move event", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_STAT_ID_MOVE_EVENT, .offset = offsetof(bcmolt_gpon_iwf_stat_data, move_event), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_stat_new_mac_drop_due_to_fifo_full = { .name = "new_mac_drop_due_to_fifo_full", .descr = "New MAC drop due to fifo full", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_STAT_ID_NEW_MAC_DROP_DUE_TO_FIFO_FULL, .offset = offsetof(bcmolt_gpon_iwf_stat_data, new_mac_drop_due_to_fifo_full), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr * BCM_DESCR gpon_iwf_stat_prop_array[] = { &prop_descr_gpon_iwf_stat_ds_hit_event, &prop_descr_gpon_iwf_stat_ds_miss_event, &prop_descr_gpon_iwf_stat_ds_drop_due_to_miss_event, &prop_descr_gpon_iwf_stat_ds_drop_due_to_hit_event, &prop_descr_gpon_iwf_stat_ds_drop_to_disabled_gem, &prop_descr_gpon_iwf_stat_new_mac_discovered, &prop_descr_gpon_iwf_stat_move_event, &prop_descr_gpon_iwf_stat_new_mac_drop_due_to_fifo_full };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_stat_data_fields[] = { { .name = "ds_hit_event", .descr = "DS hit event", .offset = offsetof(bcmolt_gpon_iwf_stat_data, ds_hit_event), .type = &type_descr_uint64_t }, { .name = "ds_miss_event", .descr = "DS miss event", .offset = offsetof(bcmolt_gpon_iwf_stat_data, ds_miss_event), .type = &type_descr_uint64_t }, { .name = "ds_drop_due_to_miss_event", .descr = "DS drop due to miss event", .offset = offsetof(bcmolt_gpon_iwf_stat_data, ds_drop_due_to_miss_event), .type = &type_descr_uint64_t }, { .name = "ds_drop_due_to_hit_event", .descr = "DS drop due to hit event", .offset = offsetof(bcmolt_gpon_iwf_stat_data, ds_drop_due_to_hit_event), .type = &type_descr_uint64_t }, { .name = "ds_drop_to_disabled_gem", .descr = "DS drop to disabled GEM", .offset = offsetof(bcmolt_gpon_iwf_stat_data, ds_drop_to_disabled_gem), .type = &type_descr_uint64_t }, { .name = "new_mac_discovered", .descr = "New MAC discovered", .offset = offsetof(bcmolt_gpon_iwf_stat_data, new_mac_discovered), .type = &type_descr_uint64_t }, { .name = "move_event", .descr = "Move event", .offset = offsetof(bcmolt_gpon_iwf_stat_data, move_event), .type = &type_descr_uint64_t }, { .name = "new_mac_drop_due_to_fifo_full", .descr = "New MAC drop due to fifo full", .offset = offsetof(bcmolt_gpon_iwf_stat_data, new_mac_drop_due_to_fifo_full), .type = &type_descr_uint64_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_stat_data = { .name = "bcmolt_gpon_iwf_stat_data", .descr = "stat", .size = sizeof(bcmolt_gpon_iwf_stat_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_iwf_stat_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_iwf_stat_data_fields } } };
+
+/* Group: gpon_iwf - flush_mac_table */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_flush_mac_table_control = { .name = "control", .descr = "control", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_FLUSH_MAC_TABLE_ID_CONTROL, .offset = offsetof(bcmolt_gpon_iwf_flush_mac_table_data, control), .type = &type_descr_bcmolt_flush_mac_table_option };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_flush_mac_table_vid = { .name = "vid", .descr = "VID", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_FLUSH_MAC_TABLE_ID_VID, .offset = offsetof(bcmolt_gpon_iwf_flush_mac_table_data, vid), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_flush_mac_table_flow_id = { .name = "flow_id", .descr = "FLOW ID", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_FLUSH_MAC_TABLE_ID_FLOW_ID, .offset = offsetof(bcmolt_gpon_iwf_flush_mac_table_data, flow_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr * BCM_DESCR gpon_iwf_flush_mac_table_prop_array[] = { &prop_descr_gpon_iwf_flush_mac_table_control, &prop_descr_gpon_iwf_flush_mac_table_vid, &prop_descr_gpon_iwf_flush_mac_table_flow_id };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_flush_mac_table_data_fields[] = { { .name = "control", .descr = "control", .offset = offsetof(bcmolt_gpon_iwf_flush_mac_table_data, control), .type = &type_descr_bcmolt_flush_mac_table_option }, { .name = "vid", .descr = "VID", .offset = offsetof(bcmolt_gpon_iwf_flush_mac_table_data, vid), .type = &type_descr_uint16_t }, { .name = "flow_id", .descr = "FLOW ID", .offset = offsetof(bcmolt_gpon_iwf_flush_mac_table_data, flow_id), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_flush_mac_table_data = { .name = "bcmolt_gpon_iwf_flush_mac_table_data", .descr = "Flush MAC Table", .size = sizeof(bcmolt_gpon_iwf_flush_mac_table_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_iwf_flush_mac_table_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_iwf_flush_mac_table_data_fields } } };
+
+/* Group: gpon_iwf - scan_mac_table */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_scan_mac_table_mac_address = { .name = "mac_address", .descr = "Entry MAC address.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_SCAN_MAC_TABLE_ID_MAC_ADDRESS, .offset = offsetof(bcmolt_gpon_iwf_scan_mac_table_data, mac_address), .type = &type_descr_bcmos_mac_address };
+static bcmcli_prop_descr * BCM_DESCR gpon_iwf_scan_mac_table_prop_array[] = { &prop_descr_gpon_iwf_scan_mac_table_mac_address };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_scan_mac_table_data_fields[] = { { .name = "mac_address", .descr = "Entry MAC address.", .offset = offsetof(bcmolt_gpon_iwf_scan_mac_table_data, mac_address), .type = &type_descr_bcmos_mac_address } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_scan_mac_table_data = { .name = "bcmolt_gpon_iwf_scan_mac_table_data", .descr = "Scans MAC table for a given MAC address then returns the associated information", .size = sizeof(bcmolt_gpon_iwf_scan_mac_table_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_iwf_scan_mac_table_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_iwf_scan_mac_table_data_fields } } };
+
+/* Group: gpon_iwf - flush_mac_table_completed */
+static bcmcli_prop_descr * BCM_DESCR gpon_iwf_flush_mac_table_completed_prop_array[] = { };
+
+/* Group: gpon_iwf - scan_mac_table_completed */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_scan_mac_table_completed_mac_address = { .name = "mac_address", .descr = "Entry MAC address.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_SCAN_MAC_TABLE_COMPLETED_ID_MAC_ADDRESS, .offset = offsetof(bcmolt_gpon_iwf_scan_mac_table_completed_data, mac_address), .type = &type_descr_bcmos_mac_address };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_scan_mac_table_completed_entries = { .name = "entries", .descr = "Scan results for this entry.  If this list is empty, the MAC address was not found in the table.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_SCAN_MAC_TABLE_COMPLETED_ID_ENTRIES, .offset = offsetof(bcmolt_gpon_iwf_scan_mac_table_completed_data, entries), .type = &type_descr_bcmolt_gpon_mac_table_scan_result_list_u16 };
+static bcmcli_prop_descr * BCM_DESCR gpon_iwf_scan_mac_table_completed_prop_array[] = { &prop_descr_gpon_iwf_scan_mac_table_completed_mac_address, &prop_descr_gpon_iwf_scan_mac_table_completed_entries };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_scan_mac_table_completed_data_fields[] = { { .name = "mac_address", .descr = "Entry MAC address.", .offset = offsetof(bcmolt_gpon_iwf_scan_mac_table_completed_data, mac_address), .type = &type_descr_bcmos_mac_address }, { .name = "entries", .descr = "Scan results for this entry.  If this list is empty, the MAC address was not found in the table.", .offset = offsetof(bcmolt_gpon_iwf_scan_mac_table_completed_data, entries), .type = &type_descr_bcmolt_gpon_mac_table_scan_result_list_u16 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_scan_mac_table_completed_data = { .name = "bcmolt_gpon_iwf_scan_mac_table_completed_data", .descr = "A MAC table scan initiated using the \"scan_mac_table\" operation is complete.", .size = sizeof(bcmolt_gpon_iwf_scan_mac_table_completed_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_iwf_scan_mac_table_completed_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_iwf_scan_mac_table_completed_data_fields } } };
+
+/* Group: gpon_iwf - stat_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_stat_cfg_cfg = { .name = "cfg", .descr = "Statistic alarm configuration.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_STAT_CFG_ID_CFG, .offset = offsetof(bcmolt_gpon_iwf_stat_cfg_data, cfg), .type = &type_descr_bcmolt_stat_alarm_config };
+static bcmcli_prop_descr * BCM_DESCR gpon_iwf_stat_cfg_prop_array[] = { &prop_descr_gpon_iwf_stat_cfg_cfg };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_stat_cfg_data_fields[] = { { .name = "cfg", .descr = "Statistic alarm configuration.", .offset = offsetof(bcmolt_gpon_iwf_stat_cfg_data, cfg), .type = &type_descr_bcmolt_stat_alarm_config } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_stat_cfg_data = { .name = "bcmolt_gpon_iwf_stat_cfg_data", .descr = "Statistic Configuration", .size = sizeof(bcmolt_gpon_iwf_stat_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_iwf_stat_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_iwf_stat_cfg_data_fields } } };
+
+/* Group: gpon_iwf - stat_alarm_raised */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_stat_alarm_raised_stat = { .name = "stat", .descr = "Statistic identifier.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_STAT_ALARM_RAISED_ID_STAT, .offset = offsetof(bcmolt_gpon_iwf_stat_alarm_raised_data, stat), .type = &type_descr_bcmolt_gpon_iwf_stat_id };
+static bcmcli_prop_descr * BCM_DESCR gpon_iwf_stat_alarm_raised_prop_array[] = { &prop_descr_gpon_iwf_stat_alarm_raised_stat };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_stat_alarm_raised_data_fields[] = { { .name = "stat", .descr = "Statistic identifier.", .offset = offsetof(bcmolt_gpon_iwf_stat_alarm_raised_data, stat), .type = &type_descr_bcmolt_gpon_iwf_stat_id } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_stat_alarm_raised_data = { .name = "bcmolt_gpon_iwf_stat_alarm_raised_data", .descr = "Sent when a configured statistic alarm condition has been met.", .size = sizeof(bcmolt_gpon_iwf_stat_alarm_raised_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_iwf_stat_alarm_raised_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_iwf_stat_alarm_raised_data_fields } } };
+
+/* Group: gpon_iwf - stat_alarm_cleared */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_stat_alarm_cleared_stat = { .name = "stat", .descr = "Statistic identifier.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_STAT_ALARM_CLEARED_ID_STAT, .offset = offsetof(bcmolt_gpon_iwf_stat_alarm_cleared_data, stat), .type = &type_descr_bcmolt_gpon_iwf_stat_id };
+static bcmcli_prop_descr * BCM_DESCR gpon_iwf_stat_alarm_cleared_prop_array[] = { &prop_descr_gpon_iwf_stat_alarm_cleared_stat };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_stat_alarm_cleared_data_fields[] = { { .name = "stat", .descr = "Statistic identifier.", .offset = offsetof(bcmolt_gpon_iwf_stat_alarm_cleared_data, stat), .type = &type_descr_bcmolt_gpon_iwf_stat_id } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_stat_alarm_cleared_data = { .name = "bcmolt_gpon_iwf_stat_alarm_cleared_data", .descr = "Sent when a configured statistic alarm condition is no longer met.", .size = sizeof(bcmolt_gpon_iwf_stat_alarm_cleared_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_iwf_stat_alarm_cleared_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_iwf_stat_alarm_cleared_data_fields } } };
+
+/* Group: gpon_iwf - auto_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_auto_cfg_flush_mac_table_completed = { .name = "flush_mac_table_completed", .descr = "If true, indications of type \"flush_mac_table_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_AUTO_CFG_ID_FLUSH_MAC_TABLE_COMPLETED, .offset = offsetof(bcmolt_gpon_iwf_auto_cfg_data, flush_mac_table_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_auto_cfg_scan_mac_table_completed = { .name = "scan_mac_table_completed", .descr = "If true, indications of type \"scan_mac_table_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_AUTO_CFG_ID_SCAN_MAC_TABLE_COMPLETED, .offset = offsetof(bcmolt_gpon_iwf_auto_cfg_data, scan_mac_table_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_auto_cfg_stat_alarm_cleared = { .name = "stat_alarm_cleared", .descr = "If true, indications of type \"stat_alarm_cleared\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_AUTO_CFG_ID_STAT_ALARM_CLEARED, .offset = offsetof(bcmolt_gpon_iwf_auto_cfg_data, stat_alarm_cleared), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_auto_cfg_stat_alarm_raised = { .name = "stat_alarm_raised", .descr = "If true, indications of type \"stat_alarm_raised\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_AUTO_CFG_ID_STAT_ALARM_RAISED, .offset = offsetof(bcmolt_gpon_iwf_auto_cfg_data, stat_alarm_raised), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr * BCM_DESCR gpon_iwf_auto_cfg_prop_array[] = { &prop_descr_gpon_iwf_auto_cfg_flush_mac_table_completed, &prop_descr_gpon_iwf_auto_cfg_scan_mac_table_completed, &prop_descr_gpon_iwf_auto_cfg_stat_alarm_cleared, &prop_descr_gpon_iwf_auto_cfg_stat_alarm_raised };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_auto_cfg_data_fields[] = { { .name = "flush_mac_table_completed", .descr = "If true, indications of type \"flush_mac_table_completed\" will be generated.", .offset = offsetof(bcmolt_gpon_iwf_auto_cfg_data, flush_mac_table_completed), .type = &type_descr_bcmos_bool }, { .name = "scan_mac_table_completed", .descr = "If true, indications of type \"scan_mac_table_completed\" will be generated.", .offset = offsetof(bcmolt_gpon_iwf_auto_cfg_data, scan_mac_table_completed), .type = &type_descr_bcmos_bool }, { .name = "stat_alarm_cleared", .descr = "If true, indications of type \"stat_alarm_cleared\" will be generated.", .offset = offsetof(bcmolt_gpon_iwf_auto_cfg_data, stat_alarm_cleared), .type = &type_descr_bcmos_bool }, { .name = "stat_alarm_raised", .descr = "If true, indications of type \"stat_alarm_raised\" will be generated.", .offset = offsetof(bcmolt_gpon_iwf_auto_cfg_data, stat_alarm_raised), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_auto_cfg_data = { .name = "bcmolt_gpon_iwf_auto_cfg_data", .descr = "Indication Configuration", .size = sizeof(bcmolt_gpon_iwf_auto_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_iwf_auto_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_iwf_auto_cfg_data_fields } } };
+
+/* ==== Object: gpon_iwf_ds_egress_flow ==== */
+
+/* Group: gpon_iwf_ds_egress_flow - key */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_ds_egress_flow_key_pon_ni = { .name = "pon_ni", .descr = "PON network interface", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_DS_EGRESS_FLOW_KEY_ID_PON_NI, .offset = offsetof(bcmolt_gpon_iwf_ds_egress_flow_key, pon_ni), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_ds_egress_flow_key_flow_id = { .name = "flow_id", .descr = "Flow ID", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_DS_EGRESS_FLOW_KEY_ID_FLOW_ID, .offset = offsetof(bcmolt_gpon_iwf_ds_egress_flow_key, flow_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr * BCM_DESCR gpon_iwf_ds_egress_flow_key_prop_array[] = { &prop_descr_gpon_iwf_ds_egress_flow_key_pon_ni, &prop_descr_gpon_iwf_ds_egress_flow_key_flow_id };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_ds_egress_flow_key_fields[] = { { .name = "pon_ni", .descr = "PON network interface", .offset = offsetof(bcmolt_gpon_iwf_ds_egress_flow_key, pon_ni), .type = &type_descr_uint8_t }, { .name = "flow_id", .descr = "Flow ID", .offset = offsetof(bcmolt_gpon_iwf_ds_egress_flow_key, flow_id), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_ds_egress_flow_key = { .name = "bcmolt_gpon_iwf_ds_egress_flow_key", .descr = "key", .size = sizeof(bcmolt_gpon_iwf_ds_egress_flow_key), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_iwf_ds_egress_flow_key_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_iwf_ds_egress_flow_key_fields } } };
+
+/* Group: gpon_iwf_ds_egress_flow - cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_ds_egress_flow_cfg_gem_port = { .name = "gem_port", .descr = "GEM port ID", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_DS_EGRESS_FLOW_CFG_ID_GEM_PORT, .offset = offsetof(bcmolt_gpon_iwf_ds_egress_flow_cfg_data, gem_port), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_ds_egress_flow_cfg_pbit_control = { .name = "pbit_control", .descr = "If enabled, the Pbits value is taken from the mapping VLAN tag (Inner/Outer) VLAN Pbits location and added to the configured GEM port ID value to create the Final GEM ID", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_DS_EGRESS_FLOW_CFG_ID_PBIT_CONTROL, .offset = offsetof(bcmolt_gpon_iwf_ds_egress_flow_cfg_data, pbit_control), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr * BCM_DESCR gpon_iwf_ds_egress_flow_cfg_prop_array[] = { &prop_descr_gpon_iwf_ds_egress_flow_cfg_gem_port, &prop_descr_gpon_iwf_ds_egress_flow_cfg_pbit_control };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_ds_egress_flow_cfg_data_fields[] = { { .name = "gem_port", .descr = "GEM port ID", .offset = offsetof(bcmolt_gpon_iwf_ds_egress_flow_cfg_data, gem_port), .type = &type_descr_uint16_t }, { .name = "pbit_control", .descr = "If enabled, the Pbits value is taken from the mapping VLAN tag (Inner/Outer) VLAN Pbits location and added to the configured GEM port ID value to create the Final GEM ID", .offset = offsetof(bcmolt_gpon_iwf_ds_egress_flow_cfg_data, pbit_control), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_ds_egress_flow_cfg_data = { .name = "bcmolt_gpon_iwf_ds_egress_flow_cfg_data", .descr = "cfg", .size = sizeof(bcmolt_gpon_iwf_ds_egress_flow_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_iwf_ds_egress_flow_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_iwf_ds_egress_flow_cfg_data_fields } } };
+
+/* ==== Object: gpon_iwf_ds_ingress_flow ==== */
+
+/* Group: gpon_iwf_ds_ingress_flow - key */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_ds_ingress_flow_key_pon_ni = { .name = "pon_ni", .descr = "PON network interface", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_DS_INGRESS_FLOW_KEY_ID_PON_NI, .offset = offsetof(bcmolt_gpon_iwf_ds_ingress_flow_key, pon_ni), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_ds_ingress_flow_key_vlan_id = { .name = "vlan_id", .descr = "vlan ID", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_DS_INGRESS_FLOW_KEY_ID_VLAN_ID, .offset = offsetof(bcmolt_gpon_iwf_ds_ingress_flow_key, vlan_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr * BCM_DESCR gpon_iwf_ds_ingress_flow_key_prop_array[] = { &prop_descr_gpon_iwf_ds_ingress_flow_key_pon_ni, &prop_descr_gpon_iwf_ds_ingress_flow_key_vlan_id };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_ds_ingress_flow_key_fields[] = { { .name = "pon_ni", .descr = "PON network interface", .offset = offsetof(bcmolt_gpon_iwf_ds_ingress_flow_key, pon_ni), .type = &type_descr_uint8_t }, { .name = "vlan_id", .descr = "vlan ID", .offset = offsetof(bcmolt_gpon_iwf_ds_ingress_flow_key, vlan_id), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_ds_ingress_flow_key = { .name = "bcmolt_gpon_iwf_ds_ingress_flow_key", .descr = "key", .size = sizeof(bcmolt_gpon_iwf_ds_ingress_flow_key), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_iwf_ds_ingress_flow_key_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_iwf_ds_ingress_flow_key_fields } } };
+
+/* Group: gpon_iwf_ds_ingress_flow - cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_ds_ingress_flow_cfg_mapping_method = { .name = "mapping_method", .descr = "The Mapping method defines how the flow ID will be determined", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_DS_INGRESS_FLOW_CFG_ID_MAPPING_METHOD, .offset = offsetof(bcmolt_gpon_iwf_ds_ingress_flow_cfg_data, mapping_method), .type = &type_descr_bcmolt_vlan_to_flow_mapping_method };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_ds_ingress_flow_cfg_mapping_tag = { .name = "mapping_tag", .descr = "Define if the outer or the inner VLAN tag of the packet will determine the flow ID", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_DS_INGRESS_FLOW_CFG_ID_MAPPING_TAG, .offset = offsetof(bcmolt_gpon_iwf_ds_ingress_flow_cfg_data, mapping_tag), .type = &type_descr_bcmolt_mapping_tag_method };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_ds_ingress_flow_cfg_vlan_action = { .name = "vlan_action", .descr = "Define the outer VLAN tag manipulation on the packet: transparent or remove", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_DS_INGRESS_FLOW_CFG_ID_VLAN_ACTION, .offset = offsetof(bcmolt_gpon_iwf_ds_ingress_flow_cfg_data, vlan_action), .type = &type_descr_bcmolt_ds_vlan_action };
+static bcmcli_prop_descr * BCM_DESCR gpon_iwf_ds_ingress_flow_cfg_prop_array[] = { &prop_descr_gpon_iwf_ds_ingress_flow_cfg_mapping_method, &prop_descr_gpon_iwf_ds_ingress_flow_cfg_mapping_tag, &prop_descr_gpon_iwf_ds_ingress_flow_cfg_vlan_action };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_ds_ingress_flow_cfg_data_fields[] = { { .name = "mapping_method", .descr = "The Mapping method defines how the flow ID will be determined", .offset = offsetof(bcmolt_gpon_iwf_ds_ingress_flow_cfg_data, mapping_method), .type = &type_descr_bcmolt_vlan_to_flow_mapping_method }, { .name = "mapping_tag", .descr = "Define if the outer or the inner VLAN tag of the packet will determine the flow ID", .offset = offsetof(bcmolt_gpon_iwf_ds_ingress_flow_cfg_data, mapping_tag), .type = &type_descr_bcmolt_mapping_tag_method }, { .name = "vlan_action", .descr = "Define the outer VLAN tag manipulation on the packet: transparent or remove", .offset = offsetof(bcmolt_gpon_iwf_ds_ingress_flow_cfg_data, vlan_action), .type = &type_descr_bcmolt_ds_vlan_action } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_ds_ingress_flow_cfg_data = { .name = "bcmolt_gpon_iwf_ds_ingress_flow_cfg_data", .descr = "cfg", .size = sizeof(bcmolt_gpon_iwf_ds_ingress_flow_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_iwf_ds_ingress_flow_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_iwf_ds_ingress_flow_cfg_data_fields } } };
+
+/* ==== Object: gpon_iwf_mac_table ==== */
+
+/* Group: gpon_iwf_mac_table - key */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_mac_table_key_pon_ni = { .name = "pon_ni", .descr = "PON network interface", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_MAC_TABLE_KEY_ID_PON_NI, .offset = offsetof(bcmolt_gpon_iwf_mac_table_key, pon_ni), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_mac_table_key_mac_address = { .name = "mac_address", .descr = "MAC address", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_MAC_TABLE_KEY_ID_MAC_ADDRESS, .offset = offsetof(bcmolt_gpon_iwf_mac_table_key, mac_address), .type = &type_descr_bcmos_mac_address };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_mac_table_key_vlan = { .name = "vlan", .descr = "VLAN", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_MAC_TABLE_KEY_ID_VLAN, .offset = offsetof(bcmolt_gpon_iwf_mac_table_key, vlan), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr * BCM_DESCR gpon_iwf_mac_table_key_prop_array[] = { &prop_descr_gpon_iwf_mac_table_key_pon_ni, &prop_descr_gpon_iwf_mac_table_key_mac_address, &prop_descr_gpon_iwf_mac_table_key_vlan };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_mac_table_key_fields[] = { { .name = "pon_ni", .descr = "PON network interface", .offset = offsetof(bcmolt_gpon_iwf_mac_table_key, pon_ni), .type = &type_descr_uint8_t }, { .name = "mac_address", .descr = "MAC address", .offset = offsetof(bcmolt_gpon_iwf_mac_table_key, mac_address), .type = &type_descr_bcmos_mac_address }, { .name = "vlan", .descr = "VLAN", .offset = offsetof(bcmolt_gpon_iwf_mac_table_key, vlan), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_mac_table_key = { .name = "bcmolt_gpon_iwf_mac_table_key", .descr = "key", .size = sizeof(bcmolt_gpon_iwf_mac_table_key), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_iwf_mac_table_key_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_iwf_mac_table_key_fields } } };
+
+/* Group: gpon_iwf_mac_table - cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_mac_table_cfg_flow_id = { .name = "flow_id", .descr = "The flow ID assigned to traffic that matches this MAC table entry.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_FLOW_ID, .offset = offsetof(bcmolt_gpon_iwf_mac_table_cfg_data, flow_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_mac_table_cfg_stat = { .name = "stat", .descr = "Whether or not the MAC entry is static.  Static entries don't age.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_STAT, .offset = offsetof(bcmolt_gpon_iwf_mac_table_cfg_data, stat), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_mac_table_cfg_gem_port_id = { .name = "gem_port_id", .descr = "The GEM port ID of the traffic that created this table entry.  This only applies to automatically-learned entries.  Manually-added entries will have the value BCMOLT_PON_GEM_PORT_ID_INVALID.", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_GEM_PORT_ID, .offset = offsetof(bcmolt_gpon_iwf_mac_table_cfg_data, gem_port_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_mac_table_cfg_onu_id = { .name = "onu_id", .descr = "The ONU ID for the traffic that created this table entry.  This only valid if gem_port_id is valid.  Otherwise this will be set to BCMOLT_GPON_ONU_ID_INVALID.", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_GPON_IWF_MAC_TABLE_CFG_ID_ONU_ID, .offset = offsetof(bcmolt_gpon_iwf_mac_table_cfg_data, onu_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr * BCM_DESCR gpon_iwf_mac_table_cfg_prop_array[] = { &prop_descr_gpon_iwf_mac_table_cfg_flow_id, &prop_descr_gpon_iwf_mac_table_cfg_stat, &prop_descr_gpon_iwf_mac_table_cfg_gem_port_id, &prop_descr_gpon_iwf_mac_table_cfg_onu_id };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_mac_table_cfg_data_fields[] = { { .name = "flow_id", .descr = "The flow ID assigned to traffic that matches this MAC table entry.", .offset = offsetof(bcmolt_gpon_iwf_mac_table_cfg_data, flow_id), .type = &type_descr_uint16_t }, { .name = "stat", .descr = "Whether or not the MAC entry is static.  Static entries don't age.", .offset = offsetof(bcmolt_gpon_iwf_mac_table_cfg_data, stat), .type = &type_descr_bcmos_bool }, { .name = "gem_port_id", .descr = "The GEM port ID of the traffic that created this table entry.  This only applies to automatically-learned entries.  Manually-added entries will have the value BCMOLT_PON_GEM_PORT_ID_INVALID.", .offset = offsetof(bcmolt_gpon_iwf_mac_table_cfg_data, gem_port_id), .type = &type_descr_uint16_t }, { .name = "onu_id", .descr = "The ONU ID for the traffic that created this table entry.  This only valid if gem_port_id is valid.  Otherwise this will be set to BCMOLT_GPON_ONU_ID_INVALID.", .offset = offsetof(bcmolt_gpon_iwf_mac_table_cfg_data, onu_id), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_mac_table_cfg_data = { .name = "bcmolt_gpon_iwf_mac_table_cfg_data", .descr = "cfg", .size = sizeof(bcmolt_gpon_iwf_mac_table_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_iwf_mac_table_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_iwf_mac_table_cfg_data_fields } } };
+
+/* Group: gpon_iwf_mac_table - new_mac */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_mac_table_new_mac_flow_id = { .name = "flow_id", .descr = "The flow ID associated with the new entry.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_MAC_TABLE_NEW_MAC_ID_FLOW_ID, .offset = offsetof(bcmolt_gpon_iwf_mac_table_new_mac_data, flow_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr * BCM_DESCR gpon_iwf_mac_table_new_mac_prop_array[] = { &prop_descr_gpon_iwf_mac_table_new_mac_flow_id };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_mac_table_new_mac_data_fields[] = { { .name = "flow_id", .descr = "The flow ID associated with the new entry.", .offset = offsetof(bcmolt_gpon_iwf_mac_table_new_mac_data, flow_id), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_mac_table_new_mac_data = { .name = "bcmolt_gpon_iwf_mac_table_new_mac_data", .descr = "Sent when a new MAC address / VID combination is seen in the upstream traffic stream.", .size = sizeof(bcmolt_gpon_iwf_mac_table_new_mac_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_iwf_mac_table_new_mac_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_iwf_mac_table_new_mac_data_fields } } };
+
+/* Group: gpon_iwf_mac_table - mac_aged */
+static bcmcli_prop_descr * BCM_DESCR gpon_iwf_mac_table_mac_aged_prop_array[] = { };
+
+/* Group: gpon_iwf_mac_table - mac_move */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_mac_table_mac_move_old_flow_id = { .name = "old_flow_id", .descr = "The flow ID in the current MAC table entry.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_MAC_TABLE_MAC_MOVE_ID_OLD_FLOW_ID, .offset = offsetof(bcmolt_gpon_iwf_mac_table_mac_move_data, old_flow_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_mac_table_mac_move_new_flow_id = { .name = "new_flow_id", .descr = "The flow ID seen in the traffic stream.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_MAC_TABLE_MAC_MOVE_ID_NEW_FLOW_ID, .offset = offsetof(bcmolt_gpon_iwf_mac_table_mac_move_data, new_flow_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr * BCM_DESCR gpon_iwf_mac_table_mac_move_prop_array[] = { &prop_descr_gpon_iwf_mac_table_mac_move_old_flow_id, &prop_descr_gpon_iwf_mac_table_mac_move_new_flow_id };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_mac_table_mac_move_data_fields[] = { { .name = "old_flow_id", .descr = "The flow ID in the current MAC table entry.", .offset = offsetof(bcmolt_gpon_iwf_mac_table_mac_move_data, old_flow_id), .type = &type_descr_uint16_t }, { .name = "new_flow_id", .descr = "The flow ID seen in the traffic stream.", .offset = offsetof(bcmolt_gpon_iwf_mac_table_mac_move_data, new_flow_id), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_mac_table_mac_move_data = { .name = "bcmolt_gpon_iwf_mac_table_mac_move_data", .descr = "Sent when the MAC table is in move mode and a packet is seen that matches on MAC address / VID but doesn't match on flow ID.", .size = sizeof(bcmolt_gpon_iwf_mac_table_mac_move_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_iwf_mac_table_mac_move_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_iwf_mac_table_mac_move_data_fields } } };
+
+/* Group: gpon_iwf_mac_table - mac_dropped */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_mac_table_mac_dropped_flow_id = { .name = "flow_id", .descr = "The flow ID of the entry that was dropped.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_MAC_TABLE_MAC_DROPPED_ID_FLOW_ID, .offset = offsetof(bcmolt_gpon_iwf_mac_table_mac_dropped_data, flow_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr * BCM_DESCR gpon_iwf_mac_table_mac_dropped_prop_array[] = { &prop_descr_gpon_iwf_mac_table_mac_dropped_flow_id };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_mac_table_mac_dropped_data_fields[] = { { .name = "flow_id", .descr = "The flow ID of the entry that was dropped.", .offset = offsetof(bcmolt_gpon_iwf_mac_table_mac_dropped_data, flow_id), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_mac_table_mac_dropped_data = { .name = "bcmolt_gpon_iwf_mac_table_mac_dropped_data", .descr = "Sent when an entry cannot be learned since the MAC table is full.", .size = sizeof(bcmolt_gpon_iwf_mac_table_mac_dropped_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_iwf_mac_table_mac_dropped_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_iwf_mac_table_mac_dropped_data_fields } } };
+
+/* Group: gpon_iwf_mac_table - auto_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_mac_table_auto_cfg_mac_aged = { .name = "mac_aged", .descr = "If true, indications of type \"mac_aged\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID_MAC_AGED, .offset = offsetof(bcmolt_gpon_iwf_mac_table_auto_cfg_data, mac_aged), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_mac_table_auto_cfg_mac_dropped = { .name = "mac_dropped", .descr = "If true, indications of type \"mac_dropped\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID_MAC_DROPPED, .offset = offsetof(bcmolt_gpon_iwf_mac_table_auto_cfg_data, mac_dropped), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_mac_table_auto_cfg_mac_move = { .name = "mac_move", .descr = "If true, indications of type \"mac_move\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID_MAC_MOVE, .offset = offsetof(bcmolt_gpon_iwf_mac_table_auto_cfg_data, mac_move), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_mac_table_auto_cfg_new_mac = { .name = "new_mac", .descr = "If true, indications of type \"new_mac\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID_NEW_MAC, .offset = offsetof(bcmolt_gpon_iwf_mac_table_auto_cfg_data, new_mac), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr * BCM_DESCR gpon_iwf_mac_table_auto_cfg_prop_array[] = { &prop_descr_gpon_iwf_mac_table_auto_cfg_mac_aged, &prop_descr_gpon_iwf_mac_table_auto_cfg_mac_dropped, &prop_descr_gpon_iwf_mac_table_auto_cfg_mac_move, &prop_descr_gpon_iwf_mac_table_auto_cfg_new_mac };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_mac_table_auto_cfg_data_fields[] = { { .name = "mac_aged", .descr = "If true, indications of type \"mac_aged\" will be generated.", .offset = offsetof(bcmolt_gpon_iwf_mac_table_auto_cfg_data, mac_aged), .type = &type_descr_bcmos_bool }, { .name = "mac_dropped", .descr = "If true, indications of type \"mac_dropped\" will be generated.", .offset = offsetof(bcmolt_gpon_iwf_mac_table_auto_cfg_data, mac_dropped), .type = &type_descr_bcmos_bool }, { .name = "mac_move", .descr = "If true, indications of type \"mac_move\" will be generated.", .offset = offsetof(bcmolt_gpon_iwf_mac_table_auto_cfg_data, mac_move), .type = &type_descr_bcmos_bool }, { .name = "new_mac", .descr = "If true, indications of type \"new_mac\" will be generated.", .offset = offsetof(bcmolt_gpon_iwf_mac_table_auto_cfg_data, new_mac), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_mac_table_auto_cfg_data = { .name = "bcmolt_gpon_iwf_mac_table_auto_cfg_data", .descr = "Indication Configuration", .size = sizeof(bcmolt_gpon_iwf_mac_table_auto_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_iwf_mac_table_auto_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_iwf_mac_table_auto_cfg_data_fields } } };
+
+/* ==== Object: gpon_iwf_us_flow ==== */
+
+/* Group: gpon_iwf_us_flow - key */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_us_flow_key_pon_ni = { .name = "pon_ni", .descr = "PON network interface", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_US_FLOW_KEY_ID_PON_NI, .offset = offsetof(bcmolt_gpon_iwf_us_flow_key, pon_ni), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_us_flow_key_gem_port_id = { .name = "gem_port_id", .descr = "GEM Port  ID", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_US_FLOW_KEY_ID_GEM_PORT_ID, .offset = offsetof(bcmolt_gpon_iwf_us_flow_key, gem_port_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr * BCM_DESCR gpon_iwf_us_flow_key_prop_array[] = { &prop_descr_gpon_iwf_us_flow_key_pon_ni, &prop_descr_gpon_iwf_us_flow_key_gem_port_id };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_us_flow_key_fields[] = { { .name = "pon_ni", .descr = "PON network interface", .offset = offsetof(bcmolt_gpon_iwf_us_flow_key, pon_ni), .type = &type_descr_uint8_t }, { .name = "gem_port_id", .descr = "GEM Port  ID", .offset = offsetof(bcmolt_gpon_iwf_us_flow_key, gem_port_id), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_us_flow_key = { .name = "bcmolt_gpon_iwf_us_flow_key", .descr = "key", .size = sizeof(bcmolt_gpon_iwf_us_flow_key), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_iwf_us_flow_key_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_iwf_us_flow_key_fields } } };
+
+/* Group: gpon_iwf_us_flow - cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_us_flow_cfg_flow_id = { .name = "flow_id", .descr = "Flow ID", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_US_FLOW_CFG_ID_FLOW_ID, .offset = offsetof(bcmolt_gpon_iwf_us_flow_cfg_data, flow_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_us_flow_cfg_mac_learning = { .name = "mac_learning", .descr = "MAC learning", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_US_FLOW_CFG_ID_MAC_LEARNING, .offset = offsetof(bcmolt_gpon_iwf_us_flow_cfg_data, mac_learning), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_us_flow_cfg_vlan_action = { .name = "vlan_action", .descr = "VLAN action", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_US_FLOW_CFG_ID_VLAN_ACTION, .offset = offsetof(bcmolt_gpon_iwf_us_flow_cfg_data, vlan_action), .type = &type_descr_bcmolt_us_vlan_action };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_us_flow_cfg_vlan_tag = { .name = "vlan_tag", .descr = "Vlan tag", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_US_FLOW_CFG_ID_VLAN_TAG, .offset = offsetof(bcmolt_gpon_iwf_us_flow_cfg_data, vlan_tag), .type = &type_descr_bcmolt_vlan_tag };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_iwf_us_flow_cfg_tpid_index = { .name = "tpid_index", .descr = "TPID index", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_IWF_US_FLOW_CFG_ID_TPID_INDEX, .offset = offsetof(bcmolt_gpon_iwf_us_flow_cfg_data, tpid_index), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr * BCM_DESCR gpon_iwf_us_flow_cfg_prop_array[] = { &prop_descr_gpon_iwf_us_flow_cfg_flow_id, &prop_descr_gpon_iwf_us_flow_cfg_mac_learning, &prop_descr_gpon_iwf_us_flow_cfg_vlan_action, &prop_descr_gpon_iwf_us_flow_cfg_vlan_tag, &prop_descr_gpon_iwf_us_flow_cfg_tpid_index };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_us_flow_cfg_data_fields[] = { { .name = "flow_id", .descr = "Flow ID", .offset = offsetof(bcmolt_gpon_iwf_us_flow_cfg_data, flow_id), .type = &type_descr_uint16_t }, { .name = "mac_learning", .descr = "MAC learning", .offset = offsetof(bcmolt_gpon_iwf_us_flow_cfg_data, mac_learning), .type = &type_descr_bcmos_bool }, { .name = "vlan_action", .descr = "VLAN action", .offset = offsetof(bcmolt_gpon_iwf_us_flow_cfg_data, vlan_action), .type = &type_descr_bcmolt_us_vlan_action }, { .name = "vlan_tag", .descr = "Vlan tag", .offset = offsetof(bcmolt_gpon_iwf_us_flow_cfg_data, vlan_tag), .type = &type_descr_bcmolt_vlan_tag }, { .name = "tpid_index", .descr = "TPID index", .offset = offsetof(bcmolt_gpon_iwf_us_flow_cfg_data, tpid_index), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_iwf_us_flow_cfg_data = { .name = "bcmolt_gpon_iwf_us_flow_cfg_data", .descr = "cfg", .size = sizeof(bcmolt_gpon_iwf_us_flow_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_iwf_us_flow_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_iwf_us_flow_cfg_data_fields } } };
+
+/* ==== Object: gpon_ni ==== */
+
+/* Group: gpon_ni - key */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_key_pon_ni = { .name = "pon_ni", .descr = "PON network interface", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_KEY_ID_PON_NI, .offset = offsetof(bcmolt_gpon_ni_key, pon_ni), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr * BCM_DESCR gpon_ni_key_prop_array[] = { &prop_descr_gpon_ni_key_pon_ni };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_ni_key_fields[] = { { .name = "pon_ni", .descr = "PON network interface", .offset = offsetof(bcmolt_gpon_ni_key, pon_ni), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_key = { .name = "bcmolt_gpon_ni_key", .descr = "key", .size = sizeof(bcmolt_gpon_ni_key), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_ni_key_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_ni_key_fields } } };
+
+/* Group: gpon_ni - cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_cfg_pon_status = { .name = "pon_status", .descr = "PON status parameters", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_GPON_NI_CFG_ID_PON_STATUS, .offset = offsetof(bcmolt_gpon_ni_cfg_data, pon_status), .type = &type_descr_bcmolt_pon_status };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_cfg_available_bandwidth = { .name = "available_bandwidth", .descr = "PON available bandwidth parameters", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_GPON_NI_CFG_ID_AVAILABLE_BANDWIDTH, .offset = offsetof(bcmolt_gpon_ni_cfg_data, available_bandwidth), .type = &type_descr_bcmolt_pon_available_bandwidth };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_cfg_number_of_active_onus = { .name = "number_of_active_onus", .descr = "Number of active ONUs on the PON", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_GPON_NI_CFG_ID_NUMBER_OF_ACTIVE_ONUS, .offset = offsetof(bcmolt_gpon_ni_cfg_data, number_of_active_onus), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_cfg_number_of_active_standby_onus = { .name = "number_of_active_standby_onus", .descr = "number of active standby onus", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_GPON_NI_CFG_ID_NUMBER_OF_ACTIVE_STANDBY_ONUS, .offset = offsetof(bcmolt_gpon_ni_cfg_data, number_of_active_standby_onus), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_cfg_prbs_status = { .name = "prbs_status", .descr = "Result of US PRBS checker", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_GPON_NI_CFG_ID_PRBS_STATUS, .offset = offsetof(bcmolt_gpon_ni_cfg_data, prbs_status), .type = &type_descr_bcmolt_prbs_status };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_cfg_pon_distance = { .name = "pon_distance", .descr = "PON distance", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_CFG_ID_PON_DISTANCE, .offset = offsetof(bcmolt_gpon_ni_cfg_data, pon_distance), .type = &type_descr_bcmolt_pon_distance };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_cfg_ranging_window_size = { .name = "ranging_window_size", .descr = "Ranging window size", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_GPON_NI_CFG_ID_RANGING_WINDOW_SIZE, .offset = offsetof(bcmolt_gpon_ni_cfg_data, ranging_window_size), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_cfg_preassigned_equalization_delay = { .name = "preassigned_equalization_delay", .descr = "ONU pre-assigned equalization delay", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_CFG_ID_PREASSIGNED_EQUALIZATION_DELAY, .offset = offsetof(bcmolt_gpon_ni_cfg_data, preassigned_equalization_delay), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_cfg_eqd_cycles_number = { .name = "eqd_cycles_number", .descr = "How many ranging windows are opened during a single ONU activation process", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_CFG_ID_EQD_CYCLES_NUMBER, .offset = offsetof(bcmolt_gpon_ni_cfg_data, eqd_cycles_number), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_cfg_power_level = { .name = "power_level", .descr = "ONU power level configuration", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_CFG_ID_POWER_LEVEL, .offset = offsetof(bcmolt_gpon_ni_cfg_data, power_level), .type = &type_descr_bcmolt_pon_power_level };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_cfg_ds_fec_mode = { .name = "ds_fec_mode", .descr = "DS FEC mode", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_CFG_ID_DS_FEC_MODE, .offset = offsetof(bcmolt_gpon_ni_cfg_data, ds_fec_mode), .type = &type_descr_bcmolt_control_state };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_cfg_drift_control = { .name = "drift_control", .descr = "Drift control process configuration", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_CFG_ID_DRIFT_CONTROL, .offset = offsetof(bcmolt_gpon_ni_cfg_data, drift_control), .type = &type_descr_bcmolt_pon_drift_control };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_cfg_ds_ber_reporting_interval = { .name = "ds_ber_reporting_interval", .descr = "DS BER reporting interval", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_CFG_ID_DS_BER_REPORTING_INTERVAL, .offset = offsetof(bcmolt_gpon_ni_cfg_data, ds_ber_reporting_interval), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_cfg_los_alarm_threshold = { .name = "los_alarm_threshold", .descr = "LOS alarm threshold", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_CFG_ID_LOS_ALARM_THRESHOLD, .offset = offsetof(bcmolt_gpon_ni_cfg_data, los_alarm_threshold), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_cfg_los_initial_value = { .name = "los_initial_value", .descr = "LOS initial value following PON activation", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_CFG_ID_LOS_INITIAL_VALUE, .offset = offsetof(bcmolt_gpon_ni_cfg_data, los_initial_value), .type = &type_descr_bcmolt_status };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_cfg_onu_alarms_thresholds = { .name = "onu_alarms_thresholds", .descr = "ONU alarms thresholds configuration", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_CFG_ID_ONU_ALARMS_THRESHOLDS, .offset = offsetof(bcmolt_gpon_ni_cfg_data, onu_alarms_thresholds), .type = &type_descr_bcmolt_gpon_onu_alarms_thresholds };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_cfg_ber_monitor = { .name = "ber_monitor", .descr = "BER monitor process configuration", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_CFG_ID_BER_MONITOR, .offset = offsetof(bcmolt_gpon_ni_cfg_data, ber_monitor), .type = &type_descr_bcmolt_ber_monitor_params };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_cfg_ploam_ack_timeout = { .name = "ploam_ack_timeout", .descr = "Timeout for receiving ACK ploam", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_CFG_ID_PLOAM_ACK_TIMEOUT, .offset = offsetof(bcmolt_gpon_ni_cfg_data, ploam_ack_timeout), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_cfg_onu_activation = { .name = "onu_activation", .descr = "ONU activation control parameters", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_CFG_ID_ONU_ACTIVATION, .offset = offsetof(bcmolt_gpon_ni_cfg_data, onu_activation), .type = &type_descr_bcmolt_gpon_onu_activation };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_cfg_sn_acquisition = { .name = "sn_acquisition", .descr = "Serial Number process configuration", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_CFG_ID_SN_ACQUISITION, .offset = offsetof(bcmolt_gpon_ni_cfg_data, sn_acquisition), .type = &type_descr_bcmolt_gpon_sn_acquisition };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_cfg_key_exchange = { .name = "key_exchange", .descr = "Key Exchange process configuration", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_CFG_ID_KEY_EXCHANGE, .offset = offsetof(bcmolt_gpon_ni_cfg_data, key_exchange), .type = &type_descr_bcmolt_gpon_key_exchange };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_cfg_protection_switching = { .name = "protection_switching", .descr = "Protection switching control", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_CFG_ID_PROTECTION_SWITCHING, .offset = offsetof(bcmolt_gpon_ni_cfg_data, protection_switching), .type = &type_descr_bcmolt_pon_protection_switching };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_cfg_cbr_rt_allocation_profile = { .name = "cbr_rt_allocation_profile", .descr = "CBR Real Time allocation profile", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_CFG_ID_CBR_RT_ALLOCATION_PROFILE, .offset = offsetof(bcmolt_gpon_ni_cfg_data, cbr_rt_allocation_profile), .type = &type_descr_bcmolt_cbr_rt_allocation_profile };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_cfg_cbr_nrt_allocation_profile = { .name = "cbr_nrt_allocation_profile", .descr = "CBR non Real Time allocation profile", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_CFG_ID_CBR_NRT_ALLOCATION_PROFILE, .offset = offsetof(bcmolt_gpon_ni_cfg_data, cbr_nrt_allocation_profile), .type = &type_descr_bcmolt_arr_u16_2 };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_cfg_dba = { .name = "dba", .descr = "DBA configuration", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_CFG_ID_DBA, .offset = offsetof(bcmolt_gpon_ni_cfg_data, dba), .type = &type_descr_bcmolt_pon_dba };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_cfg_power_management = { .name = "power_management", .descr = "ONU power management control", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_CFG_ID_POWER_MANAGEMENT, .offset = offsetof(bcmolt_gpon_ni_cfg_data, power_management), .type = &type_descr_bcmolt_onu_power_management_configuration };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_cfg_rogue_onu_detection_process = { .name = "rogue_onu_detection_process", .descr = "Rogue ONU detection process configuration", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_CFG_ID_ROGUE_ONU_DETECTION_PROCESS, .offset = offsetof(bcmolt_gpon_ni_cfg_data, rogue_onu_detection_process), .type = &type_descr_bcmolt_rogue_onu_detection_process };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_cfg_periodic_standby_pon_monitoring = { .name = "periodic_standby_pon_monitoring", .descr = "Periodic Standby PON monitoring", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_CFG_ID_PERIODIC_STANDBY_PON_MONITORING, .offset = offsetof(bcmolt_gpon_ni_cfg_data, periodic_standby_pon_monitoring), .type = &type_descr_bcmolt_periodic_standby_pon_monitoring };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_cfg_prbs_checker = { .name = "prbs_checker", .descr = "US PRBS checker configuration", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_CFG_ID_PRBS_CHECKER, .offset = offsetof(bcmolt_gpon_ni_cfg_data, prbs_checker), .type = &type_descr_bcmolt_prbs_checker_config };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_cfg_prbs_generator = { .name = "prbs_generator", .descr = "DS PRBS generator configuration", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_CFG_ID_PRBS_GENERATOR, .offset = offsetof(bcmolt_gpon_ni_cfg_data, prbs_generator), .type = &type_descr_bcmolt_prbs_generator_config };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_cfg_min_data_alloc_id = { .name = "min_data_alloc_id", .descr = "Min data Alloc ID value", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_CFG_ID_MIN_DATA_ALLOC_ID, .offset = offsetof(bcmolt_gpon_ni_cfg_data, min_data_alloc_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_cfg_automatic_onu_deactivation = { .name = "automatic_onu_deactivation", .descr = "Option to disable the automatic deactivation of ONUs due to alarms", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_CFG_ID_AUTOMATIC_ONU_DEACTIVATION, .offset = offsetof(bcmolt_gpon_ni_cfg_data, automatic_onu_deactivation), .type = &type_descr_bcmolt_automatic_onu_deactivation };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_cfg_us_bandwidth_limit = { .name = "us_bandwidth_limit", .descr = "Total PON upstream bandwidth limit in bytes per second.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_CFG_ID_US_BANDWIDTH_LIMIT, .offset = offsetof(bcmolt_gpon_ni_cfg_data, us_bandwidth_limit), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_cfg_all_onus = { .name = "all_onus", .descr = "All ONUs currently provisioned on this PON.", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_GPON_NI_CFG_ID_ALL_ONUS, .offset = offsetof(bcmolt_gpon_ni_cfg_data, all_onus), .type = &type_descr_bcmolt_gpon_onu_with_state_list_u16_max_128 };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_cfg_all_mcast_gem_ports = { .name = "all_mcast_gem_ports", .descr = "All multicast GEM ports currently provisioned on this PON.", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_GPON_NI_CFG_ID_ALL_MCAST_GEM_PORTS, .offset = offsetof(bcmolt_gpon_ni_cfg_data, all_mcast_gem_ports), .type = &type_descr_bcmolt_gpon_gem_port_with_state_list_u16_max_128 };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_cfg_debug = { .name = "debug", .descr = "PON NI debug parameters", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_CFG_ID_DEBUG, .offset = offsetof(bcmolt_gpon_ni_cfg_data, debug), .type = &type_descr_bcmolt_gpon_ni_debug };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_cfg_onu_upgrade_params = { .name = "onu_upgrade_params", .descr = "ONU upgrade params", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_CFG_ID_ONU_UPGRADE_PARAMS, .offset = offsetof(bcmolt_gpon_ni_cfg_data, onu_upgrade_params), .type = &type_descr_bcmolt_gpon_onu_upgrade_params };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_cfg_ps_c_wait_before_deactivation_timeout = { .name = "ps_c_wait_before_deactivation_timeout", .descr = "PS type C timeout in milliseconds", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_CFG_ID_PS_C_WAIT_BEFORE_DEACTIVATION_TIMEOUT, .offset = offsetof(bcmolt_gpon_ni_cfg_data, ps_c_wait_before_deactivation_timeout), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_cfg_bip32_indication_control = { .name = "bip32_indication_control", .descr = "Option to disable the bip32 indication when the value is zero", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_CFG_ID_BIP32_INDICATION_CONTROL, .offset = offsetof(bcmolt_gpon_ni_cfg_data, bip32_indication_control), .type = &type_descr_bcmolt_control_state };
+static bcmcli_prop_descr * BCM_DESCR gpon_ni_cfg_prop_array[] = { &prop_descr_gpon_ni_cfg_pon_status, &prop_descr_gpon_ni_cfg_available_bandwidth, &prop_descr_gpon_ni_cfg_number_of_active_onus, &prop_descr_gpon_ni_cfg_number_of_active_standby_onus, &prop_descr_gpon_ni_cfg_prbs_status, &prop_descr_gpon_ni_cfg_pon_distance, &prop_descr_gpon_ni_cfg_ranging_window_size, &prop_descr_gpon_ni_cfg_preassigned_equalization_delay, &prop_descr_gpon_ni_cfg_eqd_cycles_number, &prop_descr_gpon_ni_cfg_power_level, &prop_descr_gpon_ni_cfg_ds_fec_mode, &prop_descr_gpon_ni_cfg_drift_control, &prop_descr_gpon_ni_cfg_ds_ber_reporting_interval, &prop_descr_gpon_ni_cfg_los_alarm_threshold, &prop_descr_gpon_ni_cfg_los_initial_value, &prop_descr_gpon_ni_cfg_onu_alarms_thresholds, &prop_descr_gpon_ni_cfg_ber_monitor, &prop_descr_gpon_ni_cfg_ploam_ack_timeout, &prop_descr_gpon_ni_cfg_onu_activation, &prop_descr_gpon_ni_cfg_sn_acquisition, &prop_descr_gpon_ni_cfg_key_exchange, &prop_descr_gpon_ni_cfg_protection_switching, &prop_descr_gpon_ni_cfg_cbr_rt_allocation_profile, &prop_descr_gpon_ni_cfg_cbr_nrt_allocation_profile, &prop_descr_gpon_ni_cfg_dba, &prop_descr_gpon_ni_cfg_power_management, &prop_descr_gpon_ni_cfg_rogue_onu_detection_process, &prop_descr_gpon_ni_cfg_periodic_standby_pon_monitoring, &prop_descr_gpon_ni_cfg_prbs_checker, &prop_descr_gpon_ni_cfg_prbs_generator, &prop_descr_gpon_ni_cfg_min_data_alloc_id, &prop_descr_gpon_ni_cfg_automatic_onu_deactivation, &prop_descr_gpon_ni_cfg_us_bandwidth_limit, &prop_descr_gpon_ni_cfg_all_onus, &prop_descr_gpon_ni_cfg_all_mcast_gem_ports, &prop_descr_gpon_ni_cfg_debug, &prop_descr_gpon_ni_cfg_onu_upgrade_params, &prop_descr_gpon_ni_cfg_ps_c_wait_before_deactivation_timeout, &prop_descr_gpon_ni_cfg_bip32_indication_control };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_ni_cfg_data_fields[] = { { .name = "pon_status", .descr = "PON status parameters", .offset = offsetof(bcmolt_gpon_ni_cfg_data, pon_status), .type = &type_descr_bcmolt_pon_status }, { .name = "available_bandwidth", .descr = "PON available bandwidth parameters", .offset = offsetof(bcmolt_gpon_ni_cfg_data, available_bandwidth), .type = &type_descr_bcmolt_pon_available_bandwidth }, { .name = "number_of_active_onus", .descr = "Number of active ONUs on the PON", .offset = offsetof(bcmolt_gpon_ni_cfg_data, number_of_active_onus), .type = &type_descr_uint16_t }, { .name = "number_of_active_standby_onus", .descr = "number of active standby onus", .offset = offsetof(bcmolt_gpon_ni_cfg_data, number_of_active_standby_onus), .type = &type_descr_uint16_t }, { .name = "prbs_status", .descr = "Result of US PRBS checker", .offset = offsetof(bcmolt_gpon_ni_cfg_data, prbs_status), .type = &type_descr_bcmolt_prbs_status }, { .name = "pon_distance", .descr = "PON distance", .offset = offsetof(bcmolt_gpon_ni_cfg_data, pon_distance), .type = &type_descr_bcmolt_pon_distance }, { .name = "ranging_window_size", .descr = "Ranging window size", .offset = offsetof(bcmolt_gpon_ni_cfg_data, ranging_window_size), .type = &type_descr_uint32_t }, { .name = "preassigned_equalization_delay", .descr = "ONU pre-assigned equalization delay", .offset = offsetof(bcmolt_gpon_ni_cfg_data, preassigned_equalization_delay), .type = &type_descr_uint32_t }, { .name = "eqd_cycles_number", .descr = "How many ranging windows are opened during a single ONU activation process", .offset = offsetof(bcmolt_gpon_ni_cfg_data, eqd_cycles_number), .type = &type_descr_uint32_t }, { .name = "power_level", .descr = "ONU power level configuration", .offset = offsetof(bcmolt_gpon_ni_cfg_data, power_level), .type = &type_descr_bcmolt_pon_power_level }, { .name = "ds_fec_mode", .descr = "DS FEC mode", .offset = offsetof(bcmolt_gpon_ni_cfg_data, ds_fec_mode), .type = &type_descr_bcmolt_control_state }, { .name = "drift_control", .descr = "Drift control process configuration", .offset = offsetof(bcmolt_gpon_ni_cfg_data, drift_control), .type = &type_descr_bcmolt_pon_drift_control }, { .name = "ds_ber_reporting_interval", .descr = "DS BER reporting interval", .offset = offsetof(bcmolt_gpon_ni_cfg_data, ds_ber_reporting_interval), .type = &type_descr_uint32_t }, { .name = "los_alarm_threshold", .descr = "LOS alarm threshold", .offset = offsetof(bcmolt_gpon_ni_cfg_data, los_alarm_threshold), .type = &type_descr_uint8_t }, { .name = "los_initial_value", .descr = "LOS initial value following PON activation", .offset = offsetof(bcmolt_gpon_ni_cfg_data, los_initial_value), .type = &type_descr_bcmolt_status }, { .name = "onu_alarms_thresholds", .descr = "ONU alarms thresholds configuration", .offset = offsetof(bcmolt_gpon_ni_cfg_data, onu_alarms_thresholds), .type = &type_descr_bcmolt_gpon_onu_alarms_thresholds }, { .name = "ber_monitor", .descr = "BER monitor process configuration", .offset = offsetof(bcmolt_gpon_ni_cfg_data, ber_monitor), .type = &type_descr_bcmolt_ber_monitor_params }, { .name = "ploam_ack_timeout", .descr = "Timeout for receiving ACK ploam", .offset = offsetof(bcmolt_gpon_ni_cfg_data, ploam_ack_timeout), .type = &type_descr_uint16_t }, { .name = "onu_activation", .descr = "ONU activation control parameters", .offset = offsetof(bcmolt_gpon_ni_cfg_data, onu_activation), .type = &type_descr_bcmolt_gpon_onu_activation }, { .name = "sn_acquisition", .descr = "Serial Number process configuration", .offset = offsetof(bcmolt_gpon_ni_cfg_data, sn_acquisition), .type = &type_descr_bcmolt_gpon_sn_acquisition }, { .name = "key_exchange", .descr = "Key Exchange process configuration", .offset = offsetof(bcmolt_gpon_ni_cfg_data, key_exchange), .type = &type_descr_bcmolt_gpon_key_exchange }, { .name = "protection_switching", .descr = "Protection switching control", .offset = offsetof(bcmolt_gpon_ni_cfg_data, protection_switching), .type = &type_descr_bcmolt_pon_protection_switching }, { .name = "cbr_rt_allocation_profile", .descr = "CBR Real Time allocation profile", .offset = offsetof(bcmolt_gpon_ni_cfg_data, cbr_rt_allocation_profile), .type = &type_descr_bcmolt_cbr_rt_allocation_profile }, { .name = "cbr_nrt_allocation_profile", .descr = "CBR non Real Time allocation profile", .offset = offsetof(bcmolt_gpon_ni_cfg_data, cbr_nrt_allocation_profile), .type = &type_descr_bcmolt_arr_u16_2 }, { .name = "dba", .descr = "DBA configuration", .offset = offsetof(bcmolt_gpon_ni_cfg_data, dba), .type = &type_descr_bcmolt_pon_dba }, { .name = "power_management", .descr = "ONU power management control", .offset = offsetof(bcmolt_gpon_ni_cfg_data, power_management), .type = &type_descr_bcmolt_onu_power_management_configuration }, { .name = "rogue_onu_detection_process", .descr = "Rogue ONU detection process configuration", .offset = offsetof(bcmolt_gpon_ni_cfg_data, rogue_onu_detection_process), .type = &type_descr_bcmolt_rogue_onu_detection_process }, { .name = "periodic_standby_pon_monitoring", .descr = "Periodic Standby PON monitoring", .offset = offsetof(bcmolt_gpon_ni_cfg_data, periodic_standby_pon_monitoring), .type = &type_descr_bcmolt_periodic_standby_pon_monitoring }, { .name = "prbs_checker", .descr = "US PRBS checker configuration", .offset = offsetof(bcmolt_gpon_ni_cfg_data, prbs_checker), .type = &type_descr_bcmolt_prbs_checker_config }, { .name = "prbs_generator", .descr = "DS PRBS generator configuration", .offset = offsetof(bcmolt_gpon_ni_cfg_data, prbs_generator), .type = &type_descr_bcmolt_prbs_generator_config }, { .name = "min_data_alloc_id", .descr = "Min data Alloc ID value", .offset = offsetof(bcmolt_gpon_ni_cfg_data, min_data_alloc_id), .type = &type_descr_uint16_t }, { .name = "automatic_onu_deactivation", .descr = "Option to disable the automatic deactivation of ONUs due to alarms", .offset = offsetof(bcmolt_gpon_ni_cfg_data, automatic_onu_deactivation), .type = &type_descr_bcmolt_automatic_onu_deactivation }, { .name = "us_bandwidth_limit", .descr = "Total PON upstream bandwidth limit in bytes per second.", .offset = offsetof(bcmolt_gpon_ni_cfg_data, us_bandwidth_limit), .type = &type_descr_uint32_t }, { .name = "all_onus", .descr = "All ONUs currently provisioned on this PON.", .offset = offsetof(bcmolt_gpon_ni_cfg_data, all_onus), .type = &type_descr_bcmolt_gpon_onu_with_state_list_u16_max_128 }, { .name = "all_mcast_gem_ports", .descr = "All multicast GEM ports currently provisioned on this PON.", .offset = offsetof(bcmolt_gpon_ni_cfg_data, all_mcast_gem_ports), .type = &type_descr_bcmolt_gpon_gem_port_with_state_list_u16_max_128 }, { .name = "debug", .descr = "PON NI debug parameters", .offset = offsetof(bcmolt_gpon_ni_cfg_data, debug), .type = &type_descr_bcmolt_gpon_ni_debug }, { .name = "onu_upgrade_params", .descr = "ONU upgrade params", .offset = offsetof(bcmolt_gpon_ni_cfg_data, onu_upgrade_params), .type = &type_descr_bcmolt_gpon_onu_upgrade_params }, { .name = "ps_c_wait_before_deactivation_timeout", .descr = "PS type C timeout in milliseconds", .offset = offsetof(bcmolt_gpon_ni_cfg_data, ps_c_wait_before_deactivation_timeout), .type = &type_descr_uint16_t }, { .name = "bip32_indication_control", .descr = "Option to disable the bip32 indication when the value is zero", .offset = offsetof(bcmolt_gpon_ni_cfg_data, bip32_indication_control), .type = &type_descr_bcmolt_control_state } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_cfg_data = { .name = "bcmolt_gpon_ni_cfg_data", .descr = "cfg", .size = sizeof(bcmolt_gpon_ni_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_ni_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_ni_cfg_data_fields } } };
+
+/* Group: gpon_ni - stat */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_stat_fec_codewords = { .name = "fec_codewords", .descr = "Received FEC codewords", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_STAT_ID_FEC_CODEWORDS, .offset = offsetof(bcmolt_gpon_ni_stat_data, fec_codewords), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_stat_fec_codewords_uncorrected = { .name = "fec_codewords_uncorrected", .descr = "Received uncorrected FEC codewords", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_STAT_ID_FEC_CODEWORDS_UNCORRECTED, .offset = offsetof(bcmolt_gpon_ni_stat_data, fec_codewords_uncorrected), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_stat_bip8_bytes = { .name = "bip8_bytes", .descr = "Received bytes protected by bip8", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_STAT_ID_BIP8_BYTES, .offset = offsetof(bcmolt_gpon_ni_stat_data, bip8_bytes), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_stat_bip8_errors = { .name = "bip8_errors", .descr = "Received bip8 errors", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_STAT_ID_BIP8_ERRORS, .offset = offsetof(bcmolt_gpon_ni_stat_data, bip8_errors), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_stat_rx_gem_packets = { .name = "rx_gem_packets", .descr = "Received GEM frames", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_STAT_ID_RX_GEM_PACKETS, .offset = offsetof(bcmolt_gpon_ni_stat_data, rx_gem_packets), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_stat_rx_gem_dropped = { .name = "rx_gem_dropped", .descr = "Received dropped GEM ID packets", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_STAT_ID_RX_GEM_DROPPED, .offset = offsetof(bcmolt_gpon_ni_stat_data, rx_gem_dropped), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_stat_rx_gem_idle = { .name = "rx_gem_idle", .descr = "Received idle GEM frames", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_STAT_ID_RX_GEM_IDLE, .offset = offsetof(bcmolt_gpon_ni_stat_data, rx_gem_idle), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_stat_rx_gem_corrected = { .name = "rx_gem_corrected", .descr = "Received corrected GEM frames", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_STAT_ID_RX_GEM_CORRECTED, .offset = offsetof(bcmolt_gpon_ni_stat_data, rx_gem_corrected), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_stat_rx_gem_illegal = { .name = "rx_gem_illegal", .descr = "Received illegal GEM frames", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_STAT_ID_RX_GEM_ILLEGAL, .offset = offsetof(bcmolt_gpon_ni_stat_data, rx_gem_illegal), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_stat_rx_allocations_valid = { .name = "rx_allocations_valid", .descr = "Received valid allocations", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_STAT_ID_RX_ALLOCATIONS_VALID, .offset = offsetof(bcmolt_gpon_ni_stat_data, rx_allocations_valid), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_stat_rx_allocations_invalid = { .name = "rx_allocations_invalid", .descr = "Received invalid allocations", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_STAT_ID_RX_ALLOCATIONS_INVALID, .offset = offsetof(bcmolt_gpon_ni_stat_data, rx_allocations_invalid), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_stat_rx_allocations_disabled = { .name = "rx_allocations_disabled", .descr = "Received disabled allocations", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_STAT_ID_RX_ALLOCATIONS_DISABLED, .offset = offsetof(bcmolt_gpon_ni_stat_data, rx_allocations_disabled), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_stat_rx_ploams = { .name = "rx_ploams", .descr = "Received Ploams", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS, .offset = offsetof(bcmolt_gpon_ni_stat_data, rx_ploams), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_stat_rx_ploams_non_idle = { .name = "rx_ploams_non_idle", .descr = "Received non idle Ploams", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS_NON_IDLE, .offset = offsetof(bcmolt_gpon_ni_stat_data, rx_ploams_non_idle), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_stat_rx_ploams_error = { .name = "rx_ploams_error", .descr = "Received error Ploams", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS_ERROR, .offset = offsetof(bcmolt_gpon_ni_stat_data, rx_ploams_error), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_stat_rx_ploams_dropped = { .name = "rx_ploams_dropped", .descr = "Received dropped Ploams", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_STAT_ID_RX_PLOAMS_DROPPED, .offset = offsetof(bcmolt_gpon_ni_stat_data, rx_ploams_dropped), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_stat_rx_cpu = { .name = "rx_cpu", .descr = "Received CPU packets", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_STAT_ID_RX_CPU, .offset = offsetof(bcmolt_gpon_ni_stat_data, rx_cpu), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_stat_rx_omci = { .name = "rx_omci", .descr = "Received OMCI packets", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_STAT_ID_RX_OMCI, .offset = offsetof(bcmolt_gpon_ni_stat_data, rx_omci), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_stat_rx_omci_packets_crc_error = { .name = "rx_omci_packets_crc_error", .descr = "Received OMCI packets with CRC errors", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR, .offset = offsetof(bcmolt_gpon_ni_stat_data, rx_omci_packets_crc_error), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_stat_rx_dropped_too_short = { .name = "rx_dropped_too_short", .descr = "Received packets dropped due to length too short", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_STAT_ID_RX_DROPPED_TOO_SHORT, .offset = offsetof(bcmolt_gpon_ni_stat_data, rx_dropped_too_short), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_stat_rx_dropped_too_long = { .name = "rx_dropped_too_long", .descr = "Received packet dropped due to length too long", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_STAT_ID_RX_DROPPED_TOO_LONG, .offset = offsetof(bcmolt_gpon_ni_stat_data, rx_dropped_too_long), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_stat_rx_crc_errors = { .name = "rx_crc_errors", .descr = "Received packet dropped due to crc error", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_STAT_ID_RX_CRC_ERRORS, .offset = offsetof(bcmolt_gpon_ni_stat_data, rx_crc_errors), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_stat_rx_key_errors = { .name = "rx_key_errors", .descr = "Received packet dropped due to key error", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_STAT_ID_RX_KEY_ERRORS, .offset = offsetof(bcmolt_gpon_ni_stat_data, rx_key_errors), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_stat_rx_fragments_errors = { .name = "rx_fragments_errors", .descr = "Received packet dropped due to fragmentation error", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_STAT_ID_RX_FRAGMENTS_ERRORS, .offset = offsetof(bcmolt_gpon_ni_stat_data, rx_fragments_errors), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_stat_rx_packets_dropped = { .name = "rx_packets_dropped", .descr = "Global dropped packets", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_STAT_ID_RX_PACKETS_DROPPED, .offset = offsetof(bcmolt_gpon_ni_stat_data, rx_packets_dropped), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_stat_tx_gem = { .name = "tx_gem", .descr = "Transmitted GEM frames", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_STAT_ID_TX_GEM, .offset = offsetof(bcmolt_gpon_ni_stat_data, tx_gem), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_stat_tx_ploams = { .name = "tx_ploams", .descr = "Transmitted Ploams", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_STAT_ID_TX_PLOAMS, .offset = offsetof(bcmolt_gpon_ni_stat_data, tx_ploams), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_stat_tx_gem_fragments = { .name = "tx_gem_fragments", .descr = "Transmitted GEM fragments", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_STAT_ID_TX_GEM_FRAGMENTS, .offset = offsetof(bcmolt_gpon_ni_stat_data, tx_gem_fragments), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_stat_tx_cpu = { .name = "tx_cpu", .descr = "Transmitted CPU packets", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_STAT_ID_TX_CPU, .offset = offsetof(bcmolt_gpon_ni_stat_data, tx_cpu), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_stat_tx_omci = { .name = "tx_omci", .descr = "Transmitted OMCI packets", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_STAT_ID_TX_OMCI, .offset = offsetof(bcmolt_gpon_ni_stat_data, tx_omci), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_stat_tx_cpu_omci_packets_dropped = { .name = "tx_cpu_omci_packets_dropped", .descr = "Transmit packets dropped due to illegal length", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_STAT_ID_TX_CPU_OMCI_PACKETS_DROPPED, .offset = offsetof(bcmolt_gpon_ni_stat_data, tx_cpu_omci_packets_dropped), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_stat_tx_dropped_illegal_length = { .name = "tx_dropped_illegal_length", .descr = "Transmitted packet dropped due to illegal length", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_STAT_ID_TX_DROPPED_ILLEGAL_LENGTH, .offset = offsetof(bcmolt_gpon_ni_stat_data, tx_dropped_illegal_length), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_stat_tx_dropped_tpid_miss = { .name = "tx_dropped_tpid_miss", .descr = "Dropped because of TPID miss", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_STAT_ID_TX_DROPPED_TPID_MISS, .offset = offsetof(bcmolt_gpon_ni_stat_data, tx_dropped_tpid_miss), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_stat_tx_dropped_vid_miss = { .name = "tx_dropped_vid_miss", .descr = "Dropped because of VID miss", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_STAT_ID_TX_DROPPED_VID_MISS, .offset = offsetof(bcmolt_gpon_ni_stat_data, tx_dropped_vid_miss), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr * BCM_DESCR gpon_ni_stat_prop_array[] = { &prop_descr_gpon_ni_stat_fec_codewords, &prop_descr_gpon_ni_stat_fec_codewords_uncorrected, &prop_descr_gpon_ni_stat_bip8_bytes, &prop_descr_gpon_ni_stat_bip8_errors, &prop_descr_gpon_ni_stat_rx_gem_packets, &prop_descr_gpon_ni_stat_rx_gem_dropped, &prop_descr_gpon_ni_stat_rx_gem_idle, &prop_descr_gpon_ni_stat_rx_gem_corrected, &prop_descr_gpon_ni_stat_rx_gem_illegal, &prop_descr_gpon_ni_stat_rx_allocations_valid, &prop_descr_gpon_ni_stat_rx_allocations_invalid, &prop_descr_gpon_ni_stat_rx_allocations_disabled, &prop_descr_gpon_ni_stat_rx_ploams, &prop_descr_gpon_ni_stat_rx_ploams_non_idle, &prop_descr_gpon_ni_stat_rx_ploams_error, &prop_descr_gpon_ni_stat_rx_ploams_dropped, &prop_descr_gpon_ni_stat_rx_cpu, &prop_descr_gpon_ni_stat_rx_omci, &prop_descr_gpon_ni_stat_rx_omci_packets_crc_error, &prop_descr_gpon_ni_stat_rx_dropped_too_short, &prop_descr_gpon_ni_stat_rx_dropped_too_long, &prop_descr_gpon_ni_stat_rx_crc_errors, &prop_descr_gpon_ni_stat_rx_key_errors, &prop_descr_gpon_ni_stat_rx_fragments_errors, &prop_descr_gpon_ni_stat_rx_packets_dropped, &prop_descr_gpon_ni_stat_tx_gem, &prop_descr_gpon_ni_stat_tx_ploams, &prop_descr_gpon_ni_stat_tx_gem_fragments, &prop_descr_gpon_ni_stat_tx_cpu, &prop_descr_gpon_ni_stat_tx_omci, &prop_descr_gpon_ni_stat_tx_cpu_omci_packets_dropped, &prop_descr_gpon_ni_stat_tx_dropped_illegal_length, &prop_descr_gpon_ni_stat_tx_dropped_tpid_miss, &prop_descr_gpon_ni_stat_tx_dropped_vid_miss };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_ni_stat_data_fields[] = { { .name = "fec_codewords", .descr = "Received FEC codewords", .offset = offsetof(bcmolt_gpon_ni_stat_data, fec_codewords), .type = &type_descr_uint64_t }, { .name = "fec_codewords_uncorrected", .descr = "Received uncorrected FEC codewords", .offset = offsetof(bcmolt_gpon_ni_stat_data, fec_codewords_uncorrected), .type = &type_descr_uint64_t }, { .name = "bip8_bytes", .descr = "Received bytes protected by bip8", .offset = offsetof(bcmolt_gpon_ni_stat_data, bip8_bytes), .type = &type_descr_uint64_t }, { .name = "bip8_errors", .descr = "Received bip8 errors", .offset = offsetof(bcmolt_gpon_ni_stat_data, bip8_errors), .type = &type_descr_uint64_t }, { .name = "rx_gem_packets", .descr = "Received GEM frames", .offset = offsetof(bcmolt_gpon_ni_stat_data, rx_gem_packets), .type = &type_descr_uint64_t }, { .name = "rx_gem_dropped", .descr = "Received dropped GEM ID packets", .offset = offsetof(bcmolt_gpon_ni_stat_data, rx_gem_dropped), .type = &type_descr_uint64_t }, { .name = "rx_gem_idle", .descr = "Received idle GEM frames", .offset = offsetof(bcmolt_gpon_ni_stat_data, rx_gem_idle), .type = &type_descr_uint64_t }, { .name = "rx_gem_corrected", .descr = "Received corrected GEM frames", .offset = offsetof(bcmolt_gpon_ni_stat_data, rx_gem_corrected), .type = &type_descr_uint64_t }, { .name = "rx_gem_illegal", .descr = "Received illegal GEM frames", .offset = offsetof(bcmolt_gpon_ni_stat_data, rx_gem_illegal), .type = &type_descr_uint64_t }, { .name = "rx_allocations_valid", .descr = "Received valid allocations", .offset = offsetof(bcmolt_gpon_ni_stat_data, rx_allocations_valid), .type = &type_descr_uint64_t }, { .name = "rx_allocations_invalid", .descr = "Received invalid allocations", .offset = offsetof(bcmolt_gpon_ni_stat_data, rx_allocations_invalid), .type = &type_descr_uint64_t }, { .name = "rx_allocations_disabled", .descr = "Received disabled allocations", .offset = offsetof(bcmolt_gpon_ni_stat_data, rx_allocations_disabled), .type = &type_descr_uint64_t }, { .name = "rx_ploams", .descr = "Received Ploams", .offset = offsetof(bcmolt_gpon_ni_stat_data, rx_ploams), .type = &type_descr_uint64_t }, { .name = "rx_ploams_non_idle", .descr = "Received non idle Ploams", .offset = offsetof(bcmolt_gpon_ni_stat_data, rx_ploams_non_idle), .type = &type_descr_uint64_t }, { .name = "rx_ploams_error", .descr = "Received error Ploams", .offset = offsetof(bcmolt_gpon_ni_stat_data, rx_ploams_error), .type = &type_descr_uint64_t }, { .name = "rx_ploams_dropped", .descr = "Received dropped Ploams", .offset = offsetof(bcmolt_gpon_ni_stat_data, rx_ploams_dropped), .type = &type_descr_uint64_t }, { .name = "rx_cpu", .descr = "Received CPU packets", .offset = offsetof(bcmolt_gpon_ni_stat_data, rx_cpu), .type = &type_descr_uint64_t }, { .name = "rx_omci", .descr = "Received OMCI packets", .offset = offsetof(bcmolt_gpon_ni_stat_data, rx_omci), .type = &type_descr_uint64_t }, { .name = "rx_omci_packets_crc_error", .descr = "Received OMCI packets with CRC errors", .offset = offsetof(bcmolt_gpon_ni_stat_data, rx_omci_packets_crc_error), .type = &type_descr_uint64_t }, { .name = "rx_dropped_too_short", .descr = "Received packets dropped due to length too short", .offset = offsetof(bcmolt_gpon_ni_stat_data, rx_dropped_too_short), .type = &type_descr_uint64_t }, { .name = "rx_dropped_too_long", .descr = "Received packet dropped due to length too long", .offset = offsetof(bcmolt_gpon_ni_stat_data, rx_dropped_too_long), .type = &type_descr_uint64_t }, { .name = "rx_crc_errors", .descr = "Received packet dropped due to crc error", .offset = offsetof(bcmolt_gpon_ni_stat_data, rx_crc_errors), .type = &type_descr_uint64_t }, { .name = "rx_key_errors", .descr = "Received packet dropped due to key error", .offset = offsetof(bcmolt_gpon_ni_stat_data, rx_key_errors), .type = &type_descr_uint64_t }, { .name = "rx_fragments_errors", .descr = "Received packet dropped due to fragmentation error", .offset = offsetof(bcmolt_gpon_ni_stat_data, rx_fragments_errors), .type = &type_descr_uint64_t }, { .name = "rx_packets_dropped", .descr = "Global dropped packets", .offset = offsetof(bcmolt_gpon_ni_stat_data, rx_packets_dropped), .type = &type_descr_uint64_t }, { .name = "tx_gem", .descr = "Transmitted GEM frames", .offset = offsetof(bcmolt_gpon_ni_stat_data, tx_gem), .type = &type_descr_uint64_t }, { .name = "tx_ploams", .descr = "Transmitted Ploams", .offset = offsetof(bcmolt_gpon_ni_stat_data, tx_ploams), .type = &type_descr_uint64_t }, { .name = "tx_gem_fragments", .descr = "Transmitted GEM fragments", .offset = offsetof(bcmolt_gpon_ni_stat_data, tx_gem_fragments), .type = &type_descr_uint64_t }, { .name = "tx_cpu", .descr = "Transmitted CPU packets", .offset = offsetof(bcmolt_gpon_ni_stat_data, tx_cpu), .type = &type_descr_uint64_t }, { .name = "tx_omci", .descr = "Transmitted OMCI packets", .offset = offsetof(bcmolt_gpon_ni_stat_data, tx_omci), .type = &type_descr_uint64_t }, { .name = "tx_cpu_omci_packets_dropped", .descr = "Transmit packets dropped due to illegal length", .offset = offsetof(bcmolt_gpon_ni_stat_data, tx_cpu_omci_packets_dropped), .type = &type_descr_uint8_t }, { .name = "tx_dropped_illegal_length", .descr = "Transmitted packet dropped due to illegal length", .offset = offsetof(bcmolt_gpon_ni_stat_data, tx_dropped_illegal_length), .type = &type_descr_uint64_t }, { .name = "tx_dropped_tpid_miss", .descr = "Dropped because of TPID miss", .offset = offsetof(bcmolt_gpon_ni_stat_data, tx_dropped_tpid_miss), .type = &type_descr_uint64_t }, { .name = "tx_dropped_vid_miss", .descr = "Dropped because of VID miss", .offset = offsetof(bcmolt_gpon_ni_stat_data, tx_dropped_vid_miss), .type = &type_descr_uint64_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_stat_data = { .name = "bcmolt_gpon_ni_stat_data", .descr = "stat", .size = sizeof(bcmolt_gpon_ni_stat_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_ni_stat_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_ni_stat_data_fields } } };
+
+/* Group: gpon_ni - set_pon_state */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_set_pon_state_pon_state = { .name = "pon_state", .descr = "PON state", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_SET_PON_STATE_ID_PON_STATE, .offset = offsetof(bcmolt_gpon_ni_set_pon_state_data, pon_state), .type = &type_descr_bcmolt_pon_operation };
+static bcmcli_prop_descr * BCM_DESCR gpon_ni_set_pon_state_prop_array[] = { &prop_descr_gpon_ni_set_pon_state_pon_state };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_ni_set_pon_state_data_fields[] = { { .name = "pon_state", .descr = "PON state", .offset = offsetof(bcmolt_gpon_ni_set_pon_state_data, pon_state), .type = &type_descr_bcmolt_pon_operation } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_set_pon_state_data = { .name = "bcmolt_gpon_ni_set_pon_state_data", .descr = "Set PON State", .size = sizeof(bcmolt_gpon_ni_set_pon_state_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_ni_set_pon_state_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_ni_set_pon_state_data_fields } } };
+
+/* Group: gpon_ni - reset */
+static bcmcli_prop_descr * BCM_DESCR gpon_ni_reset_prop_array[] = { };
+
+/* Group: gpon_ni - disable_serial_number */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_disable_serial_number_control = { .name = "control", .descr = "control", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_DISABLE_SERIAL_NUMBER_ID_CONTROL, .offset = offsetof(bcmolt_gpon_ni_disable_serial_number_data, control), .type = &type_descr_bcmolt_disable_serial_number_control };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_disable_serial_number_serial_number = { .name = "serial_number", .descr = "serial number", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_DISABLE_SERIAL_NUMBER_ID_SERIAL_NUMBER, .offset = offsetof(bcmolt_gpon_ni_disable_serial_number_data, serial_number), .type = &type_descr_bcmolt_serial_number };
+static bcmcli_prop_descr * BCM_DESCR gpon_ni_disable_serial_number_prop_array[] = { &prop_descr_gpon_ni_disable_serial_number_control, &prop_descr_gpon_ni_disable_serial_number_serial_number };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_ni_disable_serial_number_data_fields[] = { { .name = "control", .descr = "control", .offset = offsetof(bcmolt_gpon_ni_disable_serial_number_data, control), .type = &type_descr_bcmolt_disable_serial_number_control }, { .name = "serial_number", .descr = "serial number", .offset = offsetof(bcmolt_gpon_ni_disable_serial_number_data, serial_number), .type = &type_descr_bcmolt_serial_number } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_disable_serial_number_data = { .name = "bcmolt_gpon_ni_disable_serial_number_data", .descr = "Disable Serial Number", .size = sizeof(bcmolt_gpon_ni_disable_serial_number_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_ni_disable_serial_number_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_ni_disable_serial_number_data_fields } } };
+
+/* Group: gpon_ni - single_request_standby_pon_monitoring */
+static bcmcli_prop_descr * BCM_DESCR gpon_ni_single_request_standby_pon_monitoring_prop_array[] = { };
+
+/* Group: gpon_ni - set_onu_state */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_set_onu_state_onu_state = { .name = "onu_state", .descr = "New operation state of all ONUs.  The default operation may be configured by the GPON NI configuration object : gpon_ni.cfg.sn_acquisition.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_SET_ONU_STATE_ID_ONU_STATE, .offset = offsetof(bcmolt_gpon_ni_set_onu_state_data, onu_state), .type = &type_descr_bcmolt_onu_operation };
+static bcmcli_prop_descr * BCM_DESCR gpon_ni_set_onu_state_prop_array[] = { &prop_descr_gpon_ni_set_onu_state_onu_state };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_ni_set_onu_state_data_fields[] = { { .name = "onu_state", .descr = "New operation state of all ONUs.  The default operation may be configured by the GPON NI configuration object : gpon_ni.cfg.sn_acquisition.", .offset = offsetof(bcmolt_gpon_ni_set_onu_state_data, onu_state), .type = &type_descr_bcmolt_onu_operation } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_set_onu_state_data = { .name = "bcmolt_gpon_ni_set_onu_state_data", .descr = "Set the operation state of all ONUs.", .size = sizeof(bcmolt_gpon_ni_set_onu_state_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_ni_set_onu_state_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_ni_set_onu_state_data_fields } } };
+
+/* Group: gpon_ni - state_change_completed */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_state_change_completed_result = { .name = "result", .descr = "Result", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_STATE_CHANGE_COMPLETED_ID_RESULT, .offset = offsetof(bcmolt_gpon_ni_state_change_completed_data, result), .type = &type_descr_bcmolt_result };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_state_change_completed_previous_state = { .name = "previous_state", .descr = "Previous state", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_STATE_CHANGE_COMPLETED_ID_PREVIOUS_STATE, .offset = offsetof(bcmolt_gpon_ni_state_change_completed_data, previous_state), .type = &type_descr_bcmolt_pon_state };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_state_change_completed_new_state = { .name = "new_state", .descr = "New state", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_STATE_CHANGE_COMPLETED_ID_NEW_STATE, .offset = offsetof(bcmolt_gpon_ni_state_change_completed_data, new_state), .type = &type_descr_bcmolt_pon_state };
+static bcmcli_prop_descr * BCM_DESCR gpon_ni_state_change_completed_prop_array[] = { &prop_descr_gpon_ni_state_change_completed_result, &prop_descr_gpon_ni_state_change_completed_previous_state, &prop_descr_gpon_ni_state_change_completed_new_state };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_ni_state_change_completed_data_fields[] = { { .name = "result", .descr = "Result", .offset = offsetof(bcmolt_gpon_ni_state_change_completed_data, result), .type = &type_descr_bcmolt_result }, { .name = "previous_state", .descr = "Previous state", .offset = offsetof(bcmolt_gpon_ni_state_change_completed_data, previous_state), .type = &type_descr_bcmolt_pon_state }, { .name = "new_state", .descr = "New state", .offset = offsetof(bcmolt_gpon_ni_state_change_completed_data, new_state), .type = &type_descr_bcmolt_pon_state } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_state_change_completed_data = { .name = "bcmolt_gpon_ni_state_change_completed_data", .descr = "State Change Completed", .size = sizeof(bcmolt_gpon_ni_state_change_completed_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_ni_state_change_completed_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_ni_state_change_completed_data_fields } } };
+
+/* Group: gpon_ni - los */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_los_status = { .name = "status", .descr = "status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_LOS_ID_STATUS, .offset = offsetof(bcmolt_gpon_ni_los_data, status), .type = &type_descr_bcmolt_status };
+static bcmcli_prop_descr * BCM_DESCR gpon_ni_los_prop_array[] = { &prop_descr_gpon_ni_los_status };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_ni_los_data_fields[] = { { .name = "status", .descr = "status", .offset = offsetof(bcmolt_gpon_ni_los_data, status), .type = &type_descr_bcmolt_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_los_data = { .name = "bcmolt_gpon_ni_los_data", .descr = "LOS", .size = sizeof(bcmolt_gpon_ni_los_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_ni_los_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_ni_los_data_fields } } };
+
+/* Group: gpon_ni - serial_number_acquisition_cycle_start */
+static bcmcli_prop_descr * BCM_DESCR gpon_ni_serial_number_acquisition_cycle_start_prop_array[] = { };
+
+/* Group: gpon_ni - protection_switching_traffic_resume */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_protection_switching_traffic_resume_result = { .name = "result", .descr = "Result", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_PROTECTION_SWITCHING_TRAFFIC_RESUME_ID_RESULT, .offset = offsetof(bcmolt_gpon_ni_protection_switching_traffic_resume_data, result), .type = &type_descr_bcmolt_traffic_resume_result };
+static bcmcli_prop_descr * BCM_DESCR gpon_ni_protection_switching_traffic_resume_prop_array[] = { &prop_descr_gpon_ni_protection_switching_traffic_resume_result };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_ni_protection_switching_traffic_resume_data_fields[] = { { .name = "result", .descr = "Result", .offset = offsetof(bcmolt_gpon_ni_protection_switching_traffic_resume_data, result), .type = &type_descr_bcmolt_traffic_resume_result } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_protection_switching_traffic_resume_data = { .name = "bcmolt_gpon_ni_protection_switching_traffic_resume_data", .descr = "Protection Switching Traffic Resume", .size = sizeof(bcmolt_gpon_ni_protection_switching_traffic_resume_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_ni_protection_switching_traffic_resume_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_ni_protection_switching_traffic_resume_data_fields } } };
+
+/* Group: gpon_ni - protection_switching_onus_ranged */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_protection_switching_onus_ranged_onus = { .name = "onus", .descr = "ONUs", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_PROTECTION_SWITCHING_ONUS_RANGED_ID_ONUS, .offset = offsetof(bcmolt_gpon_ni_protection_switching_onus_ranged_data, onus), .type = &type_descr_bcmolt_gpon_onu_eqd_list_u32 };
+static bcmcli_prop_descr * BCM_DESCR gpon_ni_protection_switching_onus_ranged_prop_array[] = { &prop_descr_gpon_ni_protection_switching_onus_ranged_onus };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_ni_protection_switching_onus_ranged_data_fields[] = { { .name = "onus", .descr = "ONUs", .offset = offsetof(bcmolt_gpon_ni_protection_switching_onus_ranged_data, onus), .type = &type_descr_bcmolt_gpon_onu_eqd_list_u32 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_protection_switching_onus_ranged_data = { .name = "bcmolt_gpon_ni_protection_switching_onus_ranged_data", .descr = "After a switchover is complete and all ONU ranging times have stabilized, this indication is sent to inform the host of all new ONU EQDs.", .size = sizeof(bcmolt_gpon_ni_protection_switching_onus_ranged_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_ni_protection_switching_onus_ranged_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_ni_protection_switching_onus_ranged_data_fields } } };
+
+/* Group: gpon_ni - protection_switching_switchover_completed */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_protection_switching_switchover_completed_result = { .name = "result", .descr = "Result", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED_ID_RESULT, .offset = offsetof(bcmolt_gpon_ni_protection_switching_switchover_completed_data, result), .type = &type_descr_bcmolt_result };
+static bcmcli_prop_descr * BCM_DESCR gpon_ni_protection_switching_switchover_completed_prop_array[] = { &prop_descr_gpon_ni_protection_switching_switchover_completed_result };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_ni_protection_switching_switchover_completed_data_fields[] = { { .name = "result", .descr = "Result", .offset = offsetof(bcmolt_gpon_ni_protection_switching_switchover_completed_data, result), .type = &type_descr_bcmolt_result } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_protection_switching_switchover_completed_data = { .name = "bcmolt_gpon_ni_protection_switching_switchover_completed_data", .descr = "Protection Switching Switchover Completed", .size = sizeof(bcmolt_gpon_ni_protection_switching_switchover_completed_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_ni_protection_switching_switchover_completed_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_ni_protection_switching_switchover_completed_data_fields } } };
+
+/* Group: gpon_ni - standby_pon_monitoring_cycle_completed */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_standby_pon_monitoring_cycle_completed_number_of_detected_delimiter = { .name = "number_of_detected_delimiter", .descr = "number of detected delimiter", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID_NUMBER_OF_DETECTED_DELIMITER, .offset = offsetof(bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data, number_of_detected_delimiter), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_standby_pon_monitoring_cycle_completed_energy_detect_signal = { .name = "energy_detect_signal", .descr = "energy detect signal", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID_ENERGY_DETECT_SIGNAL, .offset = offsetof(bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data, energy_detect_signal), .type = &type_descr_bcmolt_status };
+static bcmcli_prop_descr * BCM_DESCR gpon_ni_standby_pon_monitoring_cycle_completed_prop_array[] = { &prop_descr_gpon_ni_standby_pon_monitoring_cycle_completed_number_of_detected_delimiter, &prop_descr_gpon_ni_standby_pon_monitoring_cycle_completed_energy_detect_signal };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data_fields[] = { { .name = "number_of_detected_delimiter", .descr = "number of detected delimiter", .offset = offsetof(bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data, number_of_detected_delimiter), .type = &type_descr_uint32_t }, { .name = "energy_detect_signal", .descr = "energy detect signal", .offset = offsetof(bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data, energy_detect_signal), .type = &type_descr_bcmolt_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data = { .name = "bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data", .descr = "Standby PON Monitoring Cycle Completed", .size = sizeof(bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data_fields } } };
+
+/* Group: gpon_ni - onu_discovered */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_onu_discovered_serial_number = { .name = "serial_number", .descr = "serial number", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_ONU_DISCOVERED_ID_SERIAL_NUMBER, .offset = offsetof(bcmolt_gpon_ni_onu_discovered_data, serial_number), .type = &type_descr_bcmolt_serial_number };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_onu_discovered_ranging_time = { .name = "ranging_time", .descr = "ranging time", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_ONU_DISCOVERED_ID_RANGING_TIME, .offset = offsetof(bcmolt_gpon_ni_onu_discovered_data, ranging_time), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_onu_discovered_onu_id = { .name = "onu_id", .descr = "onu_id", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_ONU_DISCOVERED_ID_ONU_ID, .offset = offsetof(bcmolt_gpon_ni_onu_discovered_data, onu_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr * BCM_DESCR gpon_ni_onu_discovered_prop_array[] = { &prop_descr_gpon_ni_onu_discovered_serial_number, &prop_descr_gpon_ni_onu_discovered_ranging_time, &prop_descr_gpon_ni_onu_discovered_onu_id };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_ni_onu_discovered_data_fields[] = { { .name = "serial_number", .descr = "serial number", .offset = offsetof(bcmolt_gpon_ni_onu_discovered_data, serial_number), .type = &type_descr_bcmolt_serial_number }, { .name = "ranging_time", .descr = "ranging time", .offset = offsetof(bcmolt_gpon_ni_onu_discovered_data, ranging_time), .type = &type_descr_uint32_t }, { .name = "onu_id", .descr = "onu_id", .offset = offsetof(bcmolt_gpon_ni_onu_discovered_data, onu_id), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_onu_discovered_data = { .name = "bcmolt_gpon_ni_onu_discovered_data", .descr = "ONU Discovered", .size = sizeof(bcmolt_gpon_ni_onu_discovered_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_ni_onu_discovered_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_ni_onu_discovered_data_fields } } };
+
+/* Group: gpon_ni - cpu_packets_failure */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_cpu_packets_failure_error = { .name = "error", .descr = "The error that was encountered.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_CPU_PACKETS_FAILURE_ID_ERROR, .offset = offsetof(bcmolt_gpon_ni_cpu_packets_failure_data, error), .type = &type_descr_bcmolt_packet_injection_error };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_cpu_packets_failure_gem_port_id = { .name = "gem_port_id", .descr = "The GEM port that caused the error.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_CPU_PACKETS_FAILURE_ID_GEM_PORT_ID, .offset = offsetof(bcmolt_gpon_ni_cpu_packets_failure_data, gem_port_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr * BCM_DESCR gpon_ni_cpu_packets_failure_prop_array[] = { &prop_descr_gpon_ni_cpu_packets_failure_error, &prop_descr_gpon_ni_cpu_packets_failure_gem_port_id };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_ni_cpu_packets_failure_data_fields[] = { { .name = "error", .descr = "The error that was encountered.", .offset = offsetof(bcmolt_gpon_ni_cpu_packets_failure_data, error), .type = &type_descr_bcmolt_packet_injection_error }, { .name = "gem_port_id", .descr = "The GEM port that caused the error.", .offset = offsetof(bcmolt_gpon_ni_cpu_packets_failure_data, gem_port_id), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_cpu_packets_failure_data = { .name = "bcmolt_gpon_ni_cpu_packets_failure_data", .descr = "A failure was encountered during the \"cpu_packets\" proxy operation.", .size = sizeof(bcmolt_gpon_ni_cpu_packets_failure_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_ni_cpu_packets_failure_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_ni_cpu_packets_failure_data_fields } } };
+
+/* Group: gpon_ni - cpu_packets */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_cpu_packets_packet_type = { .name = "packet_type", .descr = "packet type", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_CPU_PACKETS_ID_PACKET_TYPE, .offset = offsetof(bcmolt_gpon_ni_cpu_packets_data, packet_type), .type = &type_descr_bcmolt_packet_type };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_cpu_packets_calc_crc = { .name = "calc_crc", .descr = "calc crc", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_CPU_PACKETS_ID_CALC_CRC, .offset = offsetof(bcmolt_gpon_ni_cpu_packets_data, calc_crc), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_cpu_packets_gem_port_list = { .name = "gem_port_list", .descr = "gem port list", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_CPU_PACKETS_ID_GEM_PORT_LIST, .offset = offsetof(bcmolt_gpon_ni_cpu_packets_data, gem_port_list), .type = &type_descr_bcmolt_gpon_gem_id_list_u8_max_16 };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_cpu_packets_buffer = { .name = "buffer", .descr = "buffer", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_CPU_PACKETS_ID_BUFFER, .offset = offsetof(bcmolt_gpon_ni_cpu_packets_data, buffer), .type = &type_descr_bcmolt_u8_list_u32_max_2048 };
+static bcmcli_prop_descr * BCM_DESCR gpon_ni_cpu_packets_prop_array[] = { &prop_descr_gpon_ni_cpu_packets_packet_type, &prop_descr_gpon_ni_cpu_packets_calc_crc, &prop_descr_gpon_ni_cpu_packets_gem_port_list, &prop_descr_gpon_ni_cpu_packets_buffer };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_ni_cpu_packets_data_fields[] = { { .name = "packet_type", .descr = "packet type", .offset = offsetof(bcmolt_gpon_ni_cpu_packets_data, packet_type), .type = &type_descr_bcmolt_packet_type }, { .name = "calc_crc", .descr = "calc crc", .offset = offsetof(bcmolt_gpon_ni_cpu_packets_data, calc_crc), .type = &type_descr_bcmos_bool }, { .name = "gem_port_list", .descr = "gem port list", .offset = offsetof(bcmolt_gpon_ni_cpu_packets_data, gem_port_list), .type = &type_descr_bcmolt_gpon_gem_id_list_u8_max_16 }, { .name = "buffer", .descr = "buffer", .offset = offsetof(bcmolt_gpon_ni_cpu_packets_data, buffer), .type = &type_descr_bcmolt_u8_list_u32_max_2048 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_cpu_packets_data = { .name = "bcmolt_gpon_ni_cpu_packets_data", .descr = "GPON CPU Packets", .size = sizeof(bcmolt_gpon_ni_cpu_packets_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_ni_cpu_packets_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_ni_cpu_packets_data_fields } } };
+
+/* Group: gpon_ni - broadcast_ploam_packet */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_broadcast_ploam_packet_ploam = { .name = "ploam", .descr = "ploam", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_BROADCAST_PLOAM_PACKET_ID_PLOAM, .offset = offsetof(bcmolt_gpon_ni_broadcast_ploam_packet_data, ploam), .type = &type_descr_bcmolt_arr_u8_12 };
+static bcmcli_prop_descr * BCM_DESCR gpon_ni_broadcast_ploam_packet_prop_array[] = { &prop_descr_gpon_ni_broadcast_ploam_packet_ploam };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_ni_broadcast_ploam_packet_data_fields[] = { { .name = "ploam", .descr = "ploam", .offset = offsetof(bcmolt_gpon_ni_broadcast_ploam_packet_data, ploam), .type = &type_descr_bcmolt_arr_u8_12 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_broadcast_ploam_packet_data = { .name = "bcmolt_gpon_ni_broadcast_ploam_packet_data", .descr = "Broadcast PLOAM Packet", .size = sizeof(bcmolt_gpon_ni_broadcast_ploam_packet_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_ni_broadcast_ploam_packet_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_ni_broadcast_ploam_packet_data_fields } } };
+
+/* Group: gpon_ni - rogue_detection_window */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_rogue_detection_window_window_type = { .name = "window_type", .descr = "Type of silent measurement to execute", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_WINDOW_TYPE, .offset = offsetof(bcmolt_gpon_ni_rogue_detection_window_data, window_type), .type = &type_descr_bcmolt_rogue_detection_window };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_rogue_detection_window_alloc_id = { .name = "alloc_id", .descr = "ALLOC ID to scan", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_ALLOC_ID, .offset = offsetof(bcmolt_gpon_ni_rogue_detection_window_data, alloc_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_rogue_detection_window_onu_id = { .name = "onu_id", .descr = "ONU ID to scan", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_ONU_ID, .offset = offsetof(bcmolt_gpon_ni_rogue_detection_window_data, onu_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_rogue_detection_window_second_ranging_window = { .name = "second_ranging_window", .descr = "Not currently supported", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_ROGUE_DETECTION_WINDOW_ID_SECOND_RANGING_WINDOW, .offset = offsetof(bcmolt_gpon_ni_rogue_detection_window_data, second_ranging_window), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr * BCM_DESCR gpon_ni_rogue_detection_window_prop_array[] = { &prop_descr_gpon_ni_rogue_detection_window_window_type, &prop_descr_gpon_ni_rogue_detection_window_alloc_id, &prop_descr_gpon_ni_rogue_detection_window_onu_id, &prop_descr_gpon_ni_rogue_detection_window_second_ranging_window };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_ni_rogue_detection_window_data_fields[] = { { .name = "window_type", .descr = "Type of silent measurement to execute", .offset = offsetof(bcmolt_gpon_ni_rogue_detection_window_data, window_type), .type = &type_descr_bcmolt_rogue_detection_window }, { .name = "alloc_id", .descr = "ALLOC ID to scan", .offset = offsetof(bcmolt_gpon_ni_rogue_detection_window_data, alloc_id), .type = &type_descr_uint16_t }, { .name = "onu_id", .descr = "ONU ID to scan", .offset = offsetof(bcmolt_gpon_ni_rogue_detection_window_data, onu_id), .type = &type_descr_uint16_t }, { .name = "second_ranging_window", .descr = "Not currently supported", .offset = offsetof(bcmolt_gpon_ni_rogue_detection_window_data, second_ranging_window), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_rogue_detection_window_data = { .name = "bcmolt_gpon_ni_rogue_detection_window_data", .descr = "Rogue Detection Window", .size = sizeof(bcmolt_gpon_ni_rogue_detection_window_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_ni_rogue_detection_window_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_ni_rogue_detection_window_data_fields } } };
+
+/* Group: gpon_ni - rogue_detection_completed */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_rogue_detection_completed_window_type = { .name = "window_type", .descr = "Silent Window or Cut off Window", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_WINDOW_TYPE, .offset = offsetof(bcmolt_gpon_ni_rogue_detection_completed_data, window_type), .type = &type_descr_bcmolt_rogue_detection_window };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_rogue_detection_completed_measurement_status = { .name = "measurement_status", .descr = "Status of the rogue ONU detection result.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_MEASUREMENT_STATUS, .offset = offsetof(bcmolt_gpon_ni_rogue_detection_completed_data, measurement_status), .type = &type_descr_bcmolt_rogue_measurement_result };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_rogue_detection_completed_alloc_id = { .name = "alloc_id", .descr = "Alloc-ID", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_ALLOC_ID, .offset = offsetof(bcmolt_gpon_ni_rogue_detection_completed_data, alloc_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_rogue_detection_completed_onu_id = { .name = "onu_id", .descr = "ONU-ID", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_ONU_ID, .offset = offsetof(bcmolt_gpon_ni_rogue_detection_completed_data, onu_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_rogue_detection_completed_is_delineation = { .name = "is_delineation", .descr = "Burst Delineation detected during the rogue ONU detection.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_IS_DELINEATION, .offset = offsetof(bcmolt_gpon_ni_rogue_detection_completed_data, is_delineation), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_rogue_detection_completed_is_ed = { .name = "is_ed", .descr = "Is ED", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_IS_ED, .offset = offsetof(bcmolt_gpon_ni_rogue_detection_completed_data, is_ed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_rogue_detection_completed_rx_data = { .name = "rx_data", .descr = "Captured PLOAMu message if the burst delinieation was detected.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_RX_DATA, .offset = offsetof(bcmolt_gpon_ni_rogue_detection_completed_data, rx_data), .type = &type_descr_bcmolt_u8_list_u32 };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_rogue_detection_completed_ploam_received_onu_id = { .name = "ploam_received_onu_id", .descr = "ONU ID received in the ploam", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_PLOAM_RECEIVED_ONU_ID, .offset = offsetof(bcmolt_gpon_ni_rogue_detection_completed_data, ploam_received_onu_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_rogue_detection_completed_ploam_received_crc_error = { .name = "ploam_received_crc_error", .descr = "Crc error in the received ploam", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_ROGUE_DETECTION_COMPLETED_ID_PLOAM_RECEIVED_CRC_ERROR, .offset = offsetof(bcmolt_gpon_ni_rogue_detection_completed_data, ploam_received_crc_error), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr * BCM_DESCR gpon_ni_rogue_detection_completed_prop_array[] = { &prop_descr_gpon_ni_rogue_detection_completed_window_type, &prop_descr_gpon_ni_rogue_detection_completed_measurement_status, &prop_descr_gpon_ni_rogue_detection_completed_alloc_id, &prop_descr_gpon_ni_rogue_detection_completed_onu_id, &prop_descr_gpon_ni_rogue_detection_completed_is_delineation, &prop_descr_gpon_ni_rogue_detection_completed_is_ed, &prop_descr_gpon_ni_rogue_detection_completed_rx_data, &prop_descr_gpon_ni_rogue_detection_completed_ploam_received_onu_id, &prop_descr_gpon_ni_rogue_detection_completed_ploam_received_crc_error };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_ni_rogue_detection_completed_data_fields[] = { { .name = "window_type", .descr = "Silent Window or Cut off Window", .offset = offsetof(bcmolt_gpon_ni_rogue_detection_completed_data, window_type), .type = &type_descr_bcmolt_rogue_detection_window }, { .name = "measurement_status", .descr = "Status of the rogue ONU detection result.", .offset = offsetof(bcmolt_gpon_ni_rogue_detection_completed_data, measurement_status), .type = &type_descr_bcmolt_rogue_measurement_result }, { .name = "alloc_id", .descr = "Alloc-ID", .offset = offsetof(bcmolt_gpon_ni_rogue_detection_completed_data, alloc_id), .type = &type_descr_uint16_t }, { .name = "onu_id", .descr = "ONU-ID", .offset = offsetof(bcmolt_gpon_ni_rogue_detection_completed_data, onu_id), .type = &type_descr_uint16_t }, { .name = "is_delineation", .descr = "Burst Delineation detected during the rogue ONU detection.", .offset = offsetof(bcmolt_gpon_ni_rogue_detection_completed_data, is_delineation), .type = &type_descr_bcmos_bool }, { .name = "is_ed", .descr = "Is ED", .offset = offsetof(bcmolt_gpon_ni_rogue_detection_completed_data, is_ed), .type = &type_descr_bcmos_bool }, { .name = "rx_data", .descr = "Captured PLOAMu message if the burst delinieation was detected.", .offset = offsetof(bcmolt_gpon_ni_rogue_detection_completed_data, rx_data), .type = &type_descr_bcmolt_u8_list_u32 }, { .name = "ploam_received_onu_id", .descr = "ONU ID received in the ploam", .offset = offsetof(bcmolt_gpon_ni_rogue_detection_completed_data, ploam_received_onu_id), .type = &type_descr_uint16_t }, { .name = "ploam_received_crc_error", .descr = "Crc error in the received ploam", .offset = offsetof(bcmolt_gpon_ni_rogue_detection_completed_data, ploam_received_crc_error), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_rogue_detection_completed_data = { .name = "bcmolt_gpon_ni_rogue_detection_completed_data", .descr = "Rogue detection completed", .size = sizeof(bcmolt_gpon_ni_rogue_detection_completed_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_ni_rogue_detection_completed_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_ni_rogue_detection_completed_data_fields } } };
+
+/* Group: gpon_ni - deactivate_all_onus_completed */
+static bcmcli_prop_descr * BCM_DESCR gpon_ni_deactivate_all_onus_completed_prop_array[] = { };
+
+/* Group: gpon_ni - disable_all_onus_completed */
+static bcmcli_prop_descr * BCM_DESCR gpon_ni_disable_all_onus_completed_prop_array[] = { };
+
+/* Group: gpon_ni - activate_all_onus_completed */
+static bcmcli_prop_descr * BCM_DESCR gpon_ni_activate_all_onus_completed_prop_array[] = { };
+
+/* Group: gpon_ni - enable_all_onus_completed */
+static bcmcli_prop_descr * BCM_DESCR gpon_ni_enable_all_onus_completed_prop_array[] = { };
+
+/* Group: gpon_ni - tod_request */
+static bcmcli_prop_descr * BCM_DESCR gpon_ni_tod_request_prop_array[] = { };
+
+/* Group: gpon_ni - tod_request_completed */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_tod_request_completed_tod_string = { .name = "tod_string", .descr = "tod_string", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_TOD_STRING, .offset = offsetof(bcmolt_gpon_ni_tod_request_completed_data, tod_string), .type = &type_descr_bcmolt_str_64 };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_tod_request_completed_sfc = { .name = "sfc", .descr = "sfc", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_SFC, .offset = offsetof(bcmolt_gpon_ni_tod_request_completed_data, sfc), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_tod_request_completed_rtc_offset_sec = { .name = "rtc_offset_sec", .descr = "rtc_offset_sec", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_RTC_OFFSET_SEC, .offset = offsetof(bcmolt_gpon_ni_tod_request_completed_data, rtc_offset_sec), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_tod_request_completed_rtc_offset_nsec = { .name = "rtc_offset_nsec", .descr = "rtc_offset_nsec", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_RTC_OFFSET_NSEC, .offset = offsetof(bcmolt_gpon_ni_tod_request_completed_data, rtc_offset_nsec), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_tod_request_completed_status = { .name = "status", .descr = "status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_TOD_REQUEST_COMPLETED_ID_STATUS, .offset = offsetof(bcmolt_gpon_ni_tod_request_completed_data, status), .type = &type_descr_bcmolt_result };
+static bcmcli_prop_descr * BCM_DESCR gpon_ni_tod_request_completed_prop_array[] = { &prop_descr_gpon_ni_tod_request_completed_tod_string, &prop_descr_gpon_ni_tod_request_completed_sfc, &prop_descr_gpon_ni_tod_request_completed_rtc_offset_sec, &prop_descr_gpon_ni_tod_request_completed_rtc_offset_nsec, &prop_descr_gpon_ni_tod_request_completed_status };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_ni_tod_request_completed_data_fields[] = { { .name = "tod_string", .descr = "tod_string", .offset = offsetof(bcmolt_gpon_ni_tod_request_completed_data, tod_string), .type = &type_descr_bcmolt_str_64 }, { .name = "sfc", .descr = "sfc", .offset = offsetof(bcmolt_gpon_ni_tod_request_completed_data, sfc), .type = &type_descr_uint32_t }, { .name = "rtc_offset_sec", .descr = "rtc_offset_sec", .offset = offsetof(bcmolt_gpon_ni_tod_request_completed_data, rtc_offset_sec), .type = &type_descr_uint64_t }, { .name = "rtc_offset_nsec", .descr = "rtc_offset_nsec", .offset = offsetof(bcmolt_gpon_ni_tod_request_completed_data, rtc_offset_nsec), .type = &type_descr_uint32_t }, { .name = "status", .descr = "status", .offset = offsetof(bcmolt_gpon_ni_tod_request_completed_data, status), .type = &type_descr_bcmolt_result } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_tod_request_completed_data = { .name = "bcmolt_gpon_ni_tod_request_completed_data", .descr = "TOD request completed", .size = sizeof(bcmolt_gpon_ni_tod_request_completed_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_ni_tod_request_completed_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_ni_tod_request_completed_data_fields } } };
+
+/* Group: gpon_ni - protection_switching_type_c_set_multiple_onu_state */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_protection_switching_type_c_set_multiple_onu_state_onu_state = { .name = "onu_state", .descr = "onu state", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_PROTECTION_SWITCHING_TYPE_C_SET_MULTIPLE_ONU_STATE_ID_ONU_STATE, .offset = offsetof(bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data, onu_state), .type = &type_descr_bcmolt_switch_over_type_c_onu_state };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_protection_switching_type_c_set_multiple_onu_state_onu_list = { .name = "onu_list", .descr = "onu list", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_PROTECTION_SWITCHING_TYPE_C_SET_MULTIPLE_ONU_STATE_ID_ONU_LIST, .offset = offsetof(bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data, onu_list), .type = &type_descr_bcmolt_gpon_onu_id_list_u32_max_256 };
+static bcmcli_prop_descr * BCM_DESCR gpon_ni_protection_switching_type_c_set_multiple_onu_state_prop_array[] = { &prop_descr_gpon_ni_protection_switching_type_c_set_multiple_onu_state_onu_state, &prop_descr_gpon_ni_protection_switching_type_c_set_multiple_onu_state_onu_list };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data_fields[] = { { .name = "onu_state", .descr = "onu state", .offset = offsetof(bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data, onu_state), .type = &type_descr_bcmolt_switch_over_type_c_onu_state }, { .name = "onu_list", .descr = "onu list", .offset = offsetof(bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data, onu_list), .type = &type_descr_bcmolt_gpon_onu_id_list_u32_max_256 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data = { .name = "bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data", .descr = "protection switching type c set multiple onu state", .size = sizeof(bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data_fields } } };
+
+/* Group: gpon_ni - start_onu_upgrade */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_start_onu_upgrade_list_of_onu_ids = { .name = "list_of_onu_ids", .descr = "List of ONU IDs to upgrade the firmware.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_START_ONU_UPGRADE_ID_LIST_OF_ONU_IDS, .offset = offsetof(bcmolt_gpon_ni_start_onu_upgrade_data, list_of_onu_ids), .type = &type_descr_bcmolt_pon_onu_id_list_u32 };
+static bcmcli_prop_descr * BCM_DESCR gpon_ni_start_onu_upgrade_prop_array[] = { &prop_descr_gpon_ni_start_onu_upgrade_list_of_onu_ids };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_ni_start_onu_upgrade_data_fields[] = { { .name = "list_of_onu_ids", .descr = "List of ONU IDs to upgrade the firmware.", .offset = offsetof(bcmolt_gpon_ni_start_onu_upgrade_data, list_of_onu_ids), .type = &type_descr_bcmolt_pon_onu_id_list_u32 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_start_onu_upgrade_data = { .name = "bcmolt_gpon_ni_start_onu_upgrade_data", .descr = "OLT to ONU firmware transfer", .size = sizeof(bcmolt_gpon_ni_start_onu_upgrade_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_ni_start_onu_upgrade_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_ni_start_onu_upgrade_data_fields } } };
+
+/* Group: gpon_ni - onu_upgrade_complete */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_onu_upgrade_complete_status = { .name = "status", .descr = "Success or failure.  Against entire upgrade process.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_ONU_UPGRADE_COMPLETE_ID_STATUS, .offset = offsetof(bcmolt_gpon_ni_onu_upgrade_complete_data, status), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_onu_upgrade_complete_list_of_failed_entities = { .name = "list_of_failed_entities", .descr = "List of ONU-IDs the upgrade failed for.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_ONU_UPGRADE_COMPLETE_ID_LIST_OF_FAILED_ENTITIES, .offset = offsetof(bcmolt_gpon_ni_onu_upgrade_complete_data, list_of_failed_entities), .type = &type_descr_bcmolt_gpon_onu_upgrade_status_list_u32 };
+static bcmcli_prop_descr * BCM_DESCR gpon_ni_onu_upgrade_complete_prop_array[] = { &prop_descr_gpon_ni_onu_upgrade_complete_status, &prop_descr_gpon_ni_onu_upgrade_complete_list_of_failed_entities };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_ni_onu_upgrade_complete_data_fields[] = { { .name = "status", .descr = "Success or failure.  Against entire upgrade process.", .offset = offsetof(bcmolt_gpon_ni_onu_upgrade_complete_data, status), .type = &type_descr_bcmos_bool }, { .name = "list_of_failed_entities", .descr = "List of ONU-IDs the upgrade failed for.", .offset = offsetof(bcmolt_gpon_ni_onu_upgrade_complete_data, list_of_failed_entities), .type = &type_descr_bcmolt_gpon_onu_upgrade_status_list_u32 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_onu_upgrade_complete_data = { .name = "bcmolt_gpon_ni_onu_upgrade_complete_data", .descr = "ONU Upgrade Complete", .size = sizeof(bcmolt_gpon_ni_onu_upgrade_complete_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_ni_onu_upgrade_complete_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_ni_onu_upgrade_complete_data_fields } } };
+
+/* Group: gpon_ni - rogue_onu_special_map_cycle_start */
+static bcmcli_prop_descr * BCM_DESCR gpon_ni_rogue_onu_special_map_cycle_start_prop_array[] = { };
+
+/* Group: gpon_ni - stat_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_stat_cfg_cfg = { .name = "cfg", .descr = "Statistic alarm configuration.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_STAT_CFG_ID_CFG, .offset = offsetof(bcmolt_gpon_ni_stat_cfg_data, cfg), .type = &type_descr_bcmolt_stat_alarm_config };
+static bcmcli_prop_descr * BCM_DESCR gpon_ni_stat_cfg_prop_array[] = { &prop_descr_gpon_ni_stat_cfg_cfg };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_ni_stat_cfg_data_fields[] = { { .name = "cfg", .descr = "Statistic alarm configuration.", .offset = offsetof(bcmolt_gpon_ni_stat_cfg_data, cfg), .type = &type_descr_bcmolt_stat_alarm_config } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_stat_cfg_data = { .name = "bcmolt_gpon_ni_stat_cfg_data", .descr = "Statistic Configuration", .size = sizeof(bcmolt_gpon_ni_stat_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_ni_stat_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_ni_stat_cfg_data_fields } } };
+
+/* Group: gpon_ni - stat_alarm_raised */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_stat_alarm_raised_stat = { .name = "stat", .descr = "Statistic identifier.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_STAT_ALARM_RAISED_ID_STAT, .offset = offsetof(bcmolt_gpon_ni_stat_alarm_raised_data, stat), .type = &type_descr_bcmolt_gpon_ni_stat_id };
+static bcmcli_prop_descr * BCM_DESCR gpon_ni_stat_alarm_raised_prop_array[] = { &prop_descr_gpon_ni_stat_alarm_raised_stat };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_ni_stat_alarm_raised_data_fields[] = { { .name = "stat", .descr = "Statistic identifier.", .offset = offsetof(bcmolt_gpon_ni_stat_alarm_raised_data, stat), .type = &type_descr_bcmolt_gpon_ni_stat_id } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_stat_alarm_raised_data = { .name = "bcmolt_gpon_ni_stat_alarm_raised_data", .descr = "Sent when a configured statistic alarm condition has been met.", .size = sizeof(bcmolt_gpon_ni_stat_alarm_raised_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_ni_stat_alarm_raised_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_ni_stat_alarm_raised_data_fields } } };
+
+/* Group: gpon_ni - stat_alarm_cleared */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_stat_alarm_cleared_stat = { .name = "stat", .descr = "Statistic identifier.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_STAT_ALARM_CLEARED_ID_STAT, .offset = offsetof(bcmolt_gpon_ni_stat_alarm_cleared_data, stat), .type = &type_descr_bcmolt_gpon_ni_stat_id };
+static bcmcli_prop_descr * BCM_DESCR gpon_ni_stat_alarm_cleared_prop_array[] = { &prop_descr_gpon_ni_stat_alarm_cleared_stat };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_ni_stat_alarm_cleared_data_fields[] = { { .name = "stat", .descr = "Statistic identifier.", .offset = offsetof(bcmolt_gpon_ni_stat_alarm_cleared_data, stat), .type = &type_descr_bcmolt_gpon_ni_stat_id } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_stat_alarm_cleared_data = { .name = "bcmolt_gpon_ni_stat_alarm_cleared_data", .descr = "Sent when a configured statistic alarm condition is no longer met.", .size = sizeof(bcmolt_gpon_ni_stat_alarm_cleared_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_ni_stat_alarm_cleared_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_ni_stat_alarm_cleared_data_fields } } };
+
+/* Group: gpon_ni - auto_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_auto_cfg_activate_all_onus_completed = { .name = "activate_all_onus_completed", .descr = "If true, indications of type \"activate_all_onus_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_AUTO_CFG_ID_ACTIVATE_ALL_ONUS_COMPLETED, .offset = offsetof(bcmolt_gpon_ni_auto_cfg_data, activate_all_onus_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_auto_cfg_cpu_packets_failure = { .name = "cpu_packets_failure", .descr = "If true, indications of type \"cpu_packets_failure\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_AUTO_CFG_ID_CPU_PACKETS_FAILURE, .offset = offsetof(bcmolt_gpon_ni_auto_cfg_data, cpu_packets_failure), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_auto_cfg_deactivate_all_onus_completed = { .name = "deactivate_all_onus_completed", .descr = "If true, indications of type \"deactivate_all_onus_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_AUTO_CFG_ID_DEACTIVATE_ALL_ONUS_COMPLETED, .offset = offsetof(bcmolt_gpon_ni_auto_cfg_data, deactivate_all_onus_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_auto_cfg_disable_all_onus_completed = { .name = "disable_all_onus_completed", .descr = "If true, indications of type \"disable_all_onus_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_AUTO_CFG_ID_DISABLE_ALL_ONUS_COMPLETED, .offset = offsetof(bcmolt_gpon_ni_auto_cfg_data, disable_all_onus_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_auto_cfg_enable_all_onus_completed = { .name = "enable_all_onus_completed", .descr = "If true, indications of type \"enable_all_onus_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_AUTO_CFG_ID_ENABLE_ALL_ONUS_COMPLETED, .offset = offsetof(bcmolt_gpon_ni_auto_cfg_data, enable_all_onus_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_auto_cfg_los = { .name = "los", .descr = "If true, indications of type \"los\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_AUTO_CFG_ID_LOS, .offset = offsetof(bcmolt_gpon_ni_auto_cfg_data, los), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_auto_cfg_onu_discovered = { .name = "onu_discovered", .descr = "If true, indications of type \"onu_discovered\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_AUTO_CFG_ID_ONU_DISCOVERED, .offset = offsetof(bcmolt_gpon_ni_auto_cfg_data, onu_discovered), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_auto_cfg_onu_upgrade_complete = { .name = "onu_upgrade_complete", .descr = "If true, indications of type \"onu_upgrade_complete\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_AUTO_CFG_ID_ONU_UPGRADE_COMPLETE, .offset = offsetof(bcmolt_gpon_ni_auto_cfg_data, onu_upgrade_complete), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_auto_cfg_protection_switching_onus_ranged = { .name = "protection_switching_onus_ranged", .descr = "If true, indications of type \"protection_switching_onus_ranged\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_ONUS_RANGED, .offset = offsetof(bcmolt_gpon_ni_auto_cfg_data, protection_switching_onus_ranged), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_auto_cfg_protection_switching_switchover_completed = { .name = "protection_switching_switchover_completed", .descr = "If true, indications of type \"protection_switching_switchover_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED, .offset = offsetof(bcmolt_gpon_ni_auto_cfg_data, protection_switching_switchover_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_auto_cfg_protection_switching_traffic_resume = { .name = "protection_switching_traffic_resume", .descr = "If true, indications of type \"protection_switching_traffic_resume\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_TRAFFIC_RESUME, .offset = offsetof(bcmolt_gpon_ni_auto_cfg_data, protection_switching_traffic_resume), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_auto_cfg_rogue_detection_completed = { .name = "rogue_detection_completed", .descr = "If true, indications of type \"rogue_detection_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_AUTO_CFG_ID_ROGUE_DETECTION_COMPLETED, .offset = offsetof(bcmolt_gpon_ni_auto_cfg_data, rogue_detection_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_auto_cfg_rogue_onu_special_map_cycle_start = { .name = "rogue_onu_special_map_cycle_start", .descr = "If true, indications of type \"rogue_onu_special_map_cycle_start\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_AUTO_CFG_ID_ROGUE_ONU_SPECIAL_MAP_CYCLE_START, .offset = offsetof(bcmolt_gpon_ni_auto_cfg_data, rogue_onu_special_map_cycle_start), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_auto_cfg_serial_number_acquisition_cycle_start = { .name = "serial_number_acquisition_cycle_start", .descr = "If true, indications of type \"serial_number_acquisition_cycle_start\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_AUTO_CFG_ID_SERIAL_NUMBER_ACQUISITION_CYCLE_START, .offset = offsetof(bcmolt_gpon_ni_auto_cfg_data, serial_number_acquisition_cycle_start), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_auto_cfg_standby_pon_monitoring_cycle_completed = { .name = "standby_pon_monitoring_cycle_completed", .descr = "If true, indications of type \"standby_pon_monitoring_cycle_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_AUTO_CFG_ID_STANDBY_PON_MONITORING_CYCLE_COMPLETED, .offset = offsetof(bcmolt_gpon_ni_auto_cfg_data, standby_pon_monitoring_cycle_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_auto_cfg_stat_alarm_cleared = { .name = "stat_alarm_cleared", .descr = "If true, indications of type \"stat_alarm_cleared\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_AUTO_CFG_ID_STAT_ALARM_CLEARED, .offset = offsetof(bcmolt_gpon_ni_auto_cfg_data, stat_alarm_cleared), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_auto_cfg_stat_alarm_raised = { .name = "stat_alarm_raised", .descr = "If true, indications of type \"stat_alarm_raised\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_AUTO_CFG_ID_STAT_ALARM_RAISED, .offset = offsetof(bcmolt_gpon_ni_auto_cfg_data, stat_alarm_raised), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_auto_cfg_state_change_completed = { .name = "state_change_completed", .descr = "If true, indications of type \"state_change_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_AUTO_CFG_ID_STATE_CHANGE_COMPLETED, .offset = offsetof(bcmolt_gpon_ni_auto_cfg_data, state_change_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_ni_auto_cfg_tod_request_completed = { .name = "tod_request_completed", .descr = "If true, indications of type \"tod_request_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_NI_AUTO_CFG_ID_TOD_REQUEST_COMPLETED, .offset = offsetof(bcmolt_gpon_ni_auto_cfg_data, tod_request_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr * BCM_DESCR gpon_ni_auto_cfg_prop_array[] = { &prop_descr_gpon_ni_auto_cfg_activate_all_onus_completed, &prop_descr_gpon_ni_auto_cfg_cpu_packets_failure, &prop_descr_gpon_ni_auto_cfg_deactivate_all_onus_completed, &prop_descr_gpon_ni_auto_cfg_disable_all_onus_completed, &prop_descr_gpon_ni_auto_cfg_enable_all_onus_completed, &prop_descr_gpon_ni_auto_cfg_los, &prop_descr_gpon_ni_auto_cfg_onu_discovered, &prop_descr_gpon_ni_auto_cfg_onu_upgrade_complete, &prop_descr_gpon_ni_auto_cfg_protection_switching_onus_ranged, &prop_descr_gpon_ni_auto_cfg_protection_switching_switchover_completed, &prop_descr_gpon_ni_auto_cfg_protection_switching_traffic_resume, &prop_descr_gpon_ni_auto_cfg_rogue_detection_completed, &prop_descr_gpon_ni_auto_cfg_rogue_onu_special_map_cycle_start, &prop_descr_gpon_ni_auto_cfg_serial_number_acquisition_cycle_start, &prop_descr_gpon_ni_auto_cfg_standby_pon_monitoring_cycle_completed, &prop_descr_gpon_ni_auto_cfg_stat_alarm_cleared, &prop_descr_gpon_ni_auto_cfg_stat_alarm_raised, &prop_descr_gpon_ni_auto_cfg_state_change_completed, &prop_descr_gpon_ni_auto_cfg_tod_request_completed };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_ni_auto_cfg_data_fields[] = { { .name = "activate_all_onus_completed", .descr = "If true, indications of type \"activate_all_onus_completed\" will be generated.", .offset = offsetof(bcmolt_gpon_ni_auto_cfg_data, activate_all_onus_completed), .type = &type_descr_bcmos_bool }, { .name = "cpu_packets_failure", .descr = "If true, indications of type \"cpu_packets_failure\" will be generated.", .offset = offsetof(bcmolt_gpon_ni_auto_cfg_data, cpu_packets_failure), .type = &type_descr_bcmos_bool }, { .name = "deactivate_all_onus_completed", .descr = "If true, indications of type \"deactivate_all_onus_completed\" will be generated.", .offset = offsetof(bcmolt_gpon_ni_auto_cfg_data, deactivate_all_onus_completed), .type = &type_descr_bcmos_bool }, { .name = "disable_all_onus_completed", .descr = "If true, indications of type \"disable_all_onus_completed\" will be generated.", .offset = offsetof(bcmolt_gpon_ni_auto_cfg_data, disable_all_onus_completed), .type = &type_descr_bcmos_bool }, { .name = "enable_all_onus_completed", .descr = "If true, indications of type \"enable_all_onus_completed\" will be generated.", .offset = offsetof(bcmolt_gpon_ni_auto_cfg_data, enable_all_onus_completed), .type = &type_descr_bcmos_bool }, { .name = "los", .descr = "If true, indications of type \"los\" will be generated.", .offset = offsetof(bcmolt_gpon_ni_auto_cfg_data, los), .type = &type_descr_bcmos_bool }, { .name = "onu_discovered", .descr = "If true, indications of type \"onu_discovered\" will be generated.", .offset = offsetof(bcmolt_gpon_ni_auto_cfg_data, onu_discovered), .type = &type_descr_bcmos_bool }, { .name = "onu_upgrade_complete", .descr = "If true, indications of type \"onu_upgrade_complete\" will be generated.", .offset = offsetof(bcmolt_gpon_ni_auto_cfg_data, onu_upgrade_complete), .type = &type_descr_bcmos_bool }, { .name = "protection_switching_onus_ranged", .descr = "If true, indications of type \"protection_switching_onus_ranged\" will be generated.", .offset = offsetof(bcmolt_gpon_ni_auto_cfg_data, protection_switching_onus_ranged), .type = &type_descr_bcmos_bool }, { .name = "protection_switching_switchover_completed", .descr = "If true, indications of type \"protection_switching_switchover_completed\" will be generated.", .offset = offsetof(bcmolt_gpon_ni_auto_cfg_data, protection_switching_switchover_completed), .type = &type_descr_bcmos_bool }, { .name = "protection_switching_traffic_resume", .descr = "If true, indications of type \"protection_switching_traffic_resume\" will be generated.", .offset = offsetof(bcmolt_gpon_ni_auto_cfg_data, protection_switching_traffic_resume), .type = &type_descr_bcmos_bool }, { .name = "rogue_detection_completed", .descr = "If true, indications of type \"rogue_detection_completed\" will be generated.", .offset = offsetof(bcmolt_gpon_ni_auto_cfg_data, rogue_detection_completed), .type = &type_descr_bcmos_bool }, { .name = "rogue_onu_special_map_cycle_start", .descr = "If true, indications of type \"rogue_onu_special_map_cycle_start\" will be generated.", .offset = offsetof(bcmolt_gpon_ni_auto_cfg_data, rogue_onu_special_map_cycle_start), .type = &type_descr_bcmos_bool }, { .name = "serial_number_acquisition_cycle_start", .descr = "If true, indications of type \"serial_number_acquisition_cycle_start\" will be generated.", .offset = offsetof(bcmolt_gpon_ni_auto_cfg_data, serial_number_acquisition_cycle_start), .type = &type_descr_bcmos_bool }, { .name = "standby_pon_monitoring_cycle_completed", .descr = "If true, indications of type \"standby_pon_monitoring_cycle_completed\" will be generated.", .offset = offsetof(bcmolt_gpon_ni_auto_cfg_data, standby_pon_monitoring_cycle_completed), .type = &type_descr_bcmos_bool }, { .name = "stat_alarm_cleared", .descr = "If true, indications of type \"stat_alarm_cleared\" will be generated.", .offset = offsetof(bcmolt_gpon_ni_auto_cfg_data, stat_alarm_cleared), .type = &type_descr_bcmos_bool }, { .name = "stat_alarm_raised", .descr = "If true, indications of type \"stat_alarm_raised\" will be generated.", .offset = offsetof(bcmolt_gpon_ni_auto_cfg_data, stat_alarm_raised), .type = &type_descr_bcmos_bool }, { .name = "state_change_completed", .descr = "If true, indications of type \"state_change_completed\" will be generated.", .offset = offsetof(bcmolt_gpon_ni_auto_cfg_data, state_change_completed), .type = &type_descr_bcmos_bool }, { .name = "tod_request_completed", .descr = "If true, indications of type \"tod_request_completed\" will be generated.", .offset = offsetof(bcmolt_gpon_ni_auto_cfg_data, tod_request_completed), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_ni_auto_cfg_data = { .name = "bcmolt_gpon_ni_auto_cfg_data", .descr = "Indication Configuration", .size = sizeof(bcmolt_gpon_ni_auto_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_ni_auto_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_ni_auto_cfg_data_fields } } };
+
+/* ==== Object: gpon_onu ==== */
+
+/* Group: gpon_onu - key */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_key_pon_ni = { .name = "pon_ni", .descr = "PON network interface", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_KEY_ID_PON_NI, .offset = offsetof(bcmolt_gpon_onu_key, pon_ni), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_key_onu_id = { .name = "onu_id", .descr = "ONU ID", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_KEY_ID_ONU_ID, .offset = offsetof(bcmolt_gpon_onu_key, onu_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_key_prop_array[] = { &prop_descr_gpon_onu_key_pon_ni, &prop_descr_gpon_onu_key_onu_id };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_key_fields[] = { { .name = "pon_ni", .descr = "PON network interface", .offset = offsetof(bcmolt_gpon_onu_key, pon_ni), .type = &type_descr_uint8_t }, { .name = "onu_id", .descr = "ONU ID", .offset = offsetof(bcmolt_gpon_onu_key, onu_id), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_key = { .name = "bcmolt_gpon_onu_key", .descr = "key", .size = sizeof(bcmolt_gpon_onu_key), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_key_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_key_fields } } };
+
+/* Group: gpon_onu - cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_cfg_onu_state = { .name = "onu_state", .descr = "Current ONU state", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_GPON_ONU_CFG_ID_ONU_STATE, .offset = offsetof(bcmolt_gpon_onu_cfg_data, onu_state), .type = &type_descr_bcmolt_onu_state };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_cfg_serial_number = { .name = "serial_number", .descr = "ONU serial number", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_CFG_ID_SERIAL_NUMBER, .offset = offsetof(bcmolt_gpon_onu_cfg_data, serial_number), .type = &type_descr_bcmolt_serial_number };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_cfg_password = { .name = "password", .descr = "ONU password", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_CFG_ID_PASSWORD, .offset = offsetof(bcmolt_gpon_onu_cfg_data, password), .type = &type_descr_bcmolt_arr_u8_10 };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_cfg_auto_password_learning = { .name = "auto_password_learning", .descr = "Enable\\Disable automatic password learning", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_CFG_ID_AUTO_PASSWORD_LEARNING, .offset = offsetof(bcmolt_gpon_onu_cfg_data, auto_password_learning), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_cfg_us_fec = { .name = "us_fec", .descr = "Enable\\Disable US FEC for ONU", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_CFG_ID_US_FEC, .offset = offsetof(bcmolt_gpon_onu_cfg_data, us_fec), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_cfg_omci_port_id = { .name = "omci_port_id", .descr = "OMCI port ID ", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_CFG_ID_OMCI_PORT_ID, .offset = offsetof(bcmolt_gpon_onu_cfg_data, omci_port_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_cfg_ds_ber_reporting_interval = { .name = "ds_ber_reporting_interval", .descr = "DS BER reporting interval", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_CFG_ID_DS_BER_REPORTING_INTERVAL, .offset = offsetof(bcmolt_gpon_onu_cfg_data, ds_ber_reporting_interval), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_cfg_aes_encryption_key = { .name = "aes_encryption_key", .descr = "AES encryption key. ", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_CFG_ID_AES_ENCRYPTION_KEY, .offset = offsetof(bcmolt_gpon_onu_cfg_data, aes_encryption_key), .type = &type_descr_bcmolt_aes_key };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_cfg_alarm_state = { .name = "alarm_state", .descr = "State of all ONU alarms.  This is normally read-only and can only be written when the PON is in active-standby mode to keep the ONU in sync.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_CFG_ID_ALARM_STATE, .offset = offsetof(bcmolt_gpon_onu_cfg_data, alarm_state), .type = &type_descr_bcmolt_gpon_onu_alarm_state };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_cfg_ranging_time = { .name = "ranging_time", .descr = "ONU ranging time.  This is normally read-only and can only be written when the PON is in active-standby mode to keep the ONU in sync.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_CFG_ID_RANGING_TIME, .offset = offsetof(bcmolt_gpon_onu_cfg_data, ranging_time), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_cfg_disabled_after_discovery = { .name = "disabled_after_discovery", .descr = "This ONU was disabled after SN discovery", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_GPON_ONU_CFG_ID_DISABLED_AFTER_DISCOVERY, .offset = offsetof(bcmolt_gpon_onu_cfg_data, disabled_after_discovery), .type = &type_descr_bcmolt_status };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_cfg_deactivation_reason = { .name = "deactivation_reason", .descr = "Reason for the last ONU deactivation", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_GPON_ONU_CFG_ID_DEACTIVATION_REASON, .offset = offsetof(bcmolt_gpon_onu_cfg_data, deactivation_reason), .type = &type_descr_bcmolt_deactivation_reason };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_cfg_all_gem_ports = { .name = "all_gem_ports", .descr = "All unicast GEM ports currently provisioned on this ONU.", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_GPON_ONU_CFG_ID_ALL_GEM_PORTS, .offset = offsetof(bcmolt_gpon_onu_cfg_data, all_gem_ports), .type = &type_descr_bcmolt_gpon_gem_port_with_state_list_u16_max_256 };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_cfg_all_allocs = { .name = "all_allocs", .descr = "All alloc IDs currently provisioned on this ONU.", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_GPON_ONU_CFG_ID_ALL_ALLOCS, .offset = offsetof(bcmolt_gpon_onu_cfg_data, all_allocs), .type = &type_descr_bcmolt_gpon_alloc_with_state_list_u16_max_32 };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_cfg_onu_ps_type_c = { .name = "onu_ps_type_c", .descr = "onu protection switching type c", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_CFG_ID_ONU_PS_TYPE_C, .offset = offsetof(bcmolt_gpon_onu_cfg_data, onu_ps_type_c), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_cfg_extended_guard_time = { .name = "extended_guard_time", .descr = "Additional guard time (in bytes) for this ONU.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_CFG_ID_EXTENDED_GUARD_TIME, .offset = offsetof(bcmolt_gpon_onu_cfg_data, extended_guard_time), .type = &type_descr_bcmolt_extended_guard_time };
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_cfg_prop_array[] = { &prop_descr_gpon_onu_cfg_onu_state, &prop_descr_gpon_onu_cfg_serial_number, &prop_descr_gpon_onu_cfg_password, &prop_descr_gpon_onu_cfg_auto_password_learning, &prop_descr_gpon_onu_cfg_us_fec, &prop_descr_gpon_onu_cfg_omci_port_id, &prop_descr_gpon_onu_cfg_ds_ber_reporting_interval, &prop_descr_gpon_onu_cfg_aes_encryption_key, &prop_descr_gpon_onu_cfg_alarm_state, &prop_descr_gpon_onu_cfg_ranging_time, &prop_descr_gpon_onu_cfg_disabled_after_discovery, &prop_descr_gpon_onu_cfg_deactivation_reason, &prop_descr_gpon_onu_cfg_all_gem_ports, &prop_descr_gpon_onu_cfg_all_allocs, &prop_descr_gpon_onu_cfg_onu_ps_type_c, &prop_descr_gpon_onu_cfg_extended_guard_time };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_cfg_data_fields[] = { { .name = "onu_state", .descr = "Current ONU state", .offset = offsetof(bcmolt_gpon_onu_cfg_data, onu_state), .type = &type_descr_bcmolt_onu_state }, { .name = "serial_number", .descr = "ONU serial number", .offset = offsetof(bcmolt_gpon_onu_cfg_data, serial_number), .type = &type_descr_bcmolt_serial_number }, { .name = "password", .descr = "ONU password", .offset = offsetof(bcmolt_gpon_onu_cfg_data, password), .type = &type_descr_bcmolt_arr_u8_10 }, { .name = "auto_password_learning", .descr = "Enable\\Disable automatic password learning", .offset = offsetof(bcmolt_gpon_onu_cfg_data, auto_password_learning), .type = &type_descr_bcmos_bool }, { .name = "us_fec", .descr = "Enable\\Disable US FEC for ONU", .offset = offsetof(bcmolt_gpon_onu_cfg_data, us_fec), .type = &type_descr_bcmos_bool }, { .name = "omci_port_id", .descr = "OMCI port ID ", .offset = offsetof(bcmolt_gpon_onu_cfg_data, omci_port_id), .type = &type_descr_uint16_t }, { .name = "ds_ber_reporting_interval", .descr = "DS BER reporting interval", .offset = offsetof(bcmolt_gpon_onu_cfg_data, ds_ber_reporting_interval), .type = &type_descr_uint32_t }, { .name = "aes_encryption_key", .descr = "AES encryption key. ", .offset = offsetof(bcmolt_gpon_onu_cfg_data, aes_encryption_key), .type = &type_descr_bcmolt_aes_key }, { .name = "alarm_state", .descr = "State of all ONU alarms.  This is normally read-only and can only be written when the PON is in active-standby mode to keep the ONU in sync.", .offset = offsetof(bcmolt_gpon_onu_cfg_data, alarm_state), .type = &type_descr_bcmolt_gpon_onu_alarm_state }, { .name = "ranging_time", .descr = "ONU ranging time.  This is normally read-only and can only be written when the PON is in active-standby mode to keep the ONU in sync.", .offset = offsetof(bcmolt_gpon_onu_cfg_data, ranging_time), .type = &type_descr_uint32_t }, { .name = "disabled_after_discovery", .descr = "This ONU was disabled after SN discovery", .offset = offsetof(bcmolt_gpon_onu_cfg_data, disabled_after_discovery), .type = &type_descr_bcmolt_status }, { .name = "deactivation_reason", .descr = "Reason for the last ONU deactivation", .offset = offsetof(bcmolt_gpon_onu_cfg_data, deactivation_reason), .type = &type_descr_bcmolt_deactivation_reason }, { .name = "all_gem_ports", .descr = "All unicast GEM ports currently provisioned on this ONU.", .offset = offsetof(bcmolt_gpon_onu_cfg_data, all_gem_ports), .type = &type_descr_bcmolt_gpon_gem_port_with_state_list_u16_max_256 }, { .name = "all_allocs", .descr = "All alloc IDs currently provisioned on this ONU.", .offset = offsetof(bcmolt_gpon_onu_cfg_data, all_allocs), .type = &type_descr_bcmolt_gpon_alloc_with_state_list_u16_max_32 }, { .name = "onu_ps_type_c", .descr = "onu protection switching type c", .offset = offsetof(bcmolt_gpon_onu_cfg_data, onu_ps_type_c), .type = &type_descr_bcmos_bool }, { .name = "extended_guard_time", .descr = "Additional guard time (in bytes) for this ONU.", .offset = offsetof(bcmolt_gpon_onu_cfg_data, extended_guard_time), .type = &type_descr_bcmolt_extended_guard_time } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_cfg_data = { .name = "bcmolt_gpon_onu_cfg_data", .descr = "cfg", .size = sizeof(bcmolt_gpon_onu_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_cfg_data_fields } } };
+
+/* Group: gpon_onu - stat */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_stat_fec_codewords = { .name = "fec_codewords", .descr = "Total received FEC codewords", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_STAT_ID_FEC_CODEWORDS, .offset = offsetof(bcmolt_gpon_onu_stat_data, fec_codewords), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_stat_fec_bytes_corrected = { .name = "fec_bytes_corrected", .descr = "FEC codewords corrected bytes", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_STAT_ID_FEC_BYTES_CORRECTED, .offset = offsetof(bcmolt_gpon_onu_stat_data, fec_bytes_corrected), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_stat_fec_codewords_corrected = { .name = "fec_codewords_corrected", .descr = "FEC corrected codewords error ", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_STAT_ID_FEC_CODEWORDS_CORRECTED, .offset = offsetof(bcmolt_gpon_onu_stat_data, fec_codewords_corrected), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_stat_fec_codewords_uncorrected = { .name = "fec_codewords_uncorrected", .descr = "FEC not corrected codewords error", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_STAT_ID_FEC_CODEWORDS_UNCORRECTED, .offset = offsetof(bcmolt_gpon_onu_stat_data, fec_codewords_uncorrected), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_stat_bip8_bytes = { .name = "bip8_bytes", .descr = "Received bytes for BIP8", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_STAT_ID_BIP8_BYTES, .offset = offsetof(bcmolt_gpon_onu_stat_data, bip8_bytes), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_stat_bip8_errors = { .name = "bip8_errors", .descr = "Bit error according to BIP8", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_STAT_ID_BIP8_ERRORS, .offset = offsetof(bcmolt_gpon_onu_stat_data, bip8_errors), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_stat_rx_ploams_crc_error = { .name = "rx_ploams_crc_error", .descr = "Received PLOAMs with CRC error", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_STAT_ID_RX_PLOAMS_CRC_ERROR, .offset = offsetof(bcmolt_gpon_onu_stat_data, rx_ploams_crc_error), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_stat_rx_ploams_non_idle = { .name = "rx_ploams_non_idle", .descr = "Received non idle PLOAMs", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_STAT_ID_RX_PLOAMS_NON_IDLE, .offset = offsetof(bcmolt_gpon_onu_stat_data, rx_ploams_non_idle), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_stat_positive_drift = { .name = "positive_drift", .descr = "Positive drift", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_STAT_ID_POSITIVE_DRIFT, .offset = offsetof(bcmolt_gpon_onu_stat_data, positive_drift), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_stat_negative_drift = { .name = "negative_drift", .descr = "Negative drift", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_STAT_ID_NEGATIVE_DRIFT, .offset = offsetof(bcmolt_gpon_onu_stat_data, negative_drift), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_stat_rx_omci = { .name = "rx_omci", .descr = "Received OMCI packets", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_STAT_ID_RX_OMCI, .offset = offsetof(bcmolt_gpon_onu_stat_data, rx_omci), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_stat_rx_omci_packets_crc_error = { .name = "rx_omci_packets_crc_error", .descr = "Received OMCI packets with CRC errors", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR, .offset = offsetof(bcmolt_gpon_onu_stat_data, rx_omci_packets_crc_error), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_stat_ber_reported = { .name = "ber_reported", .descr = "BER reported", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_STAT_ID_BER_REPORTED, .offset = offsetof(bcmolt_gpon_onu_stat_data, ber_reported), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_stat_unreceived_burst = { .name = "unreceived_burst", .descr = "Unreceived burst", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_STAT_ID_UNRECEIVED_BURST, .offset = offsetof(bcmolt_gpon_onu_stat_data, unreceived_burst), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_stat_lcdg_errors = { .name = "lcdg_errors", .descr = "LCDG errors", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_STAT_ID_LCDG_ERRORS, .offset = offsetof(bcmolt_gpon_onu_stat_data, lcdg_errors), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_stat_rdi_errors = { .name = "rdi_errors", .descr = "RDI errors", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_STAT_ID_RDI_ERRORS, .offset = offsetof(bcmolt_gpon_onu_stat_data, rdi_errors), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_stat_rx_bytes = { .name = "rx_bytes", .descr = "rx bytes", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_STAT_ID_RX_BYTES, .offset = offsetof(bcmolt_gpon_onu_stat_data, rx_bytes), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_stat_rx_packets = { .name = "rx_packets", .descr = "rx packets", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_STAT_ID_RX_PACKETS, .offset = offsetof(bcmolt_gpon_onu_stat_data, rx_packets), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_stat_tx_bytes = { .name = "tx_bytes", .descr = "tx bytes", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_STAT_ID_TX_BYTES, .offset = offsetof(bcmolt_gpon_onu_stat_data, tx_bytes), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_stat_tx_packets = { .name = "tx_packets", .descr = "tx packets", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_STAT_ID_TX_PACKETS, .offset = offsetof(bcmolt_gpon_onu_stat_data, tx_packets), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_stat_prop_array[] = { &prop_descr_gpon_onu_stat_fec_codewords, &prop_descr_gpon_onu_stat_fec_bytes_corrected, &prop_descr_gpon_onu_stat_fec_codewords_corrected, &prop_descr_gpon_onu_stat_fec_codewords_uncorrected, &prop_descr_gpon_onu_stat_bip8_bytes, &prop_descr_gpon_onu_stat_bip8_errors, &prop_descr_gpon_onu_stat_rx_ploams_crc_error, &prop_descr_gpon_onu_stat_rx_ploams_non_idle, &prop_descr_gpon_onu_stat_positive_drift, &prop_descr_gpon_onu_stat_negative_drift, &prop_descr_gpon_onu_stat_rx_omci, &prop_descr_gpon_onu_stat_rx_omci_packets_crc_error, &prop_descr_gpon_onu_stat_ber_reported, &prop_descr_gpon_onu_stat_unreceived_burst, &prop_descr_gpon_onu_stat_lcdg_errors, &prop_descr_gpon_onu_stat_rdi_errors, &prop_descr_gpon_onu_stat_rx_bytes, &prop_descr_gpon_onu_stat_rx_packets, &prop_descr_gpon_onu_stat_tx_bytes, &prop_descr_gpon_onu_stat_tx_packets };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_stat_data_fields[] = { { .name = "fec_codewords", .descr = "Total received FEC codewords", .offset = offsetof(bcmolt_gpon_onu_stat_data, fec_codewords), .type = &type_descr_uint64_t }, { .name = "fec_bytes_corrected", .descr = "FEC codewords corrected bytes", .offset = offsetof(bcmolt_gpon_onu_stat_data, fec_bytes_corrected), .type = &type_descr_uint64_t }, { .name = "fec_codewords_corrected", .descr = "FEC corrected codewords error ", .offset = offsetof(bcmolt_gpon_onu_stat_data, fec_codewords_corrected), .type = &type_descr_uint64_t }, { .name = "fec_codewords_uncorrected", .descr = "FEC not corrected codewords error", .offset = offsetof(bcmolt_gpon_onu_stat_data, fec_codewords_uncorrected), .type = &type_descr_uint64_t }, { .name = "bip8_bytes", .descr = "Received bytes for BIP8", .offset = offsetof(bcmolt_gpon_onu_stat_data, bip8_bytes), .type = &type_descr_uint64_t }, { .name = "bip8_errors", .descr = "Bit error according to BIP8", .offset = offsetof(bcmolt_gpon_onu_stat_data, bip8_errors), .type = &type_descr_uint64_t }, { .name = "rx_ploams_crc_error", .descr = "Received PLOAMs with CRC error", .offset = offsetof(bcmolt_gpon_onu_stat_data, rx_ploams_crc_error), .type = &type_descr_uint64_t }, { .name = "rx_ploams_non_idle", .descr = "Received non idle PLOAMs", .offset = offsetof(bcmolt_gpon_onu_stat_data, rx_ploams_non_idle), .type = &type_descr_uint64_t }, { .name = "positive_drift", .descr = "Positive drift", .offset = offsetof(bcmolt_gpon_onu_stat_data, positive_drift), .type = &type_descr_uint64_t }, { .name = "negative_drift", .descr = "Negative drift", .offset = offsetof(bcmolt_gpon_onu_stat_data, negative_drift), .type = &type_descr_uint64_t }, { .name = "rx_omci", .descr = "Received OMCI packets", .offset = offsetof(bcmolt_gpon_onu_stat_data, rx_omci), .type = &type_descr_uint64_t }, { .name = "rx_omci_packets_crc_error", .descr = "Received OMCI packets with CRC errors", .offset = offsetof(bcmolt_gpon_onu_stat_data, rx_omci_packets_crc_error), .type = &type_descr_uint64_t }, { .name = "ber_reported", .descr = "BER reported", .offset = offsetof(bcmolt_gpon_onu_stat_data, ber_reported), .type = &type_descr_uint64_t }, { .name = "unreceived_burst", .descr = "Unreceived burst", .offset = offsetof(bcmolt_gpon_onu_stat_data, unreceived_burst), .type = &type_descr_uint64_t }, { .name = "lcdg_errors", .descr = "LCDG errors", .offset = offsetof(bcmolt_gpon_onu_stat_data, lcdg_errors), .type = &type_descr_uint64_t }, { .name = "rdi_errors", .descr = "RDI errors", .offset = offsetof(bcmolt_gpon_onu_stat_data, rdi_errors), .type = &type_descr_uint64_t }, { .name = "rx_bytes", .descr = "rx bytes", .offset = offsetof(bcmolt_gpon_onu_stat_data, rx_bytes), .type = &type_descr_uint64_t }, { .name = "rx_packets", .descr = "rx packets", .offset = offsetof(bcmolt_gpon_onu_stat_data, rx_packets), .type = &type_descr_uint64_t }, { .name = "tx_bytes", .descr = "tx bytes", .offset = offsetof(bcmolt_gpon_onu_stat_data, tx_bytes), .type = &type_descr_uint64_t }, { .name = "tx_packets", .descr = "tx packets", .offset = offsetof(bcmolt_gpon_onu_stat_data, tx_packets), .type = &type_descr_uint64_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_stat_data = { .name = "bcmolt_gpon_onu_stat_data", .descr = "stat", .size = sizeof(bcmolt_gpon_onu_stat_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_stat_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_stat_data_fields } } };
+
+/* Group: gpon_onu - set_onu_state */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_set_onu_state_onu_state = { .name = "onu_state", .descr = "ONU state", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_SET_ONU_STATE_ID_ONU_STATE, .offset = offsetof(bcmolt_gpon_onu_set_onu_state_data, onu_state), .type = &type_descr_bcmolt_onu_operation };
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_set_onu_state_prop_array[] = { &prop_descr_gpon_onu_set_onu_state_onu_state };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_set_onu_state_data_fields[] = { { .name = "onu_state", .descr = "ONU state", .offset = offsetof(bcmolt_gpon_onu_set_onu_state_data, onu_state), .type = &type_descr_bcmolt_onu_operation } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_set_onu_state_data = { .name = "bcmolt_gpon_onu_set_onu_state_data", .descr = "Set ONU State", .size = sizeof(bcmolt_gpon_onu_set_onu_state_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_set_onu_state_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_set_onu_state_data_fields } } };
+
+/* Group: gpon_onu - rssi_measurement */
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_rssi_measurement_prop_array[] = { };
+
+/* Group: gpon_onu - change_power_level */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_change_power_level_power_level_action = { .name = "power_level_action", .descr = "power level action", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_CHANGE_POWER_LEVEL_ID_POWER_LEVEL_ACTION, .offset = offsetof(bcmolt_gpon_onu_change_power_level_data, power_level_action), .type = &type_descr_bcmolt_onu_power_level };
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_change_power_level_prop_array[] = { &prop_descr_gpon_onu_change_power_level_power_level_action };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_change_power_level_data_fields[] = { { .name = "power_level_action", .descr = "power level action", .offset = offsetof(bcmolt_gpon_onu_change_power_level_data, power_level_action), .type = &type_descr_bcmolt_onu_power_level } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_change_power_level_data = { .name = "bcmolt_gpon_onu_change_power_level_data", .descr = "Change Power Level", .size = sizeof(bcmolt_gpon_onu_change_power_level_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_change_power_level_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_change_power_level_data_fields } } };
+
+/* Group: gpon_onu - onu_alarm */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_onu_alarm_onu_alarm = { .name = "onu_alarm", .descr = "onu alarm", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_ONU_ALARM_ID_ONU_ALARM, .offset = offsetof(bcmolt_gpon_onu_onu_alarm_data, onu_alarm), .type = &type_descr_bcmolt_gpon_onu_alarms };
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_onu_alarm_prop_array[] = { &prop_descr_gpon_onu_onu_alarm_onu_alarm };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_onu_alarm_data_fields[] = { { .name = "onu_alarm", .descr = "onu alarm", .offset = offsetof(bcmolt_gpon_onu_onu_alarm_data, onu_alarm), .type = &type_descr_bcmolt_gpon_onu_alarms } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_onu_alarm_data = { .name = "bcmolt_gpon_onu_onu_alarm_data", .descr = "ONU Alarm", .size = sizeof(bcmolt_gpon_onu_onu_alarm_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_onu_alarm_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_onu_alarm_data_fields } } };
+
+/* Group: gpon_onu - dowi */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_dowi_alarm_status = { .name = "alarm_status", .descr = "Alarm status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_DOWI_ID_ALARM_STATUS, .offset = offsetof(bcmolt_gpon_onu_dowi_data, alarm_status), .type = &type_descr_bcmolt_status };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_dowi_drift_value = { .name = "drift_value", .descr = "Calculated amount of drift (positive + negative as a signed value).", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_DOWI_ID_DRIFT_VALUE, .offset = offsetof(bcmolt_gpon_onu_dowi_data, drift_value), .type = &type_descr_int32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_dowi_new_eqd = { .name = "new_eqd", .descr = "New EQD after drift is corrected (only valid if status is 'on').", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_DOWI_ID_NEW_EQD, .offset = offsetof(bcmolt_gpon_onu_dowi_data, new_eqd), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_dowi_prop_array[] = { &prop_descr_gpon_onu_dowi_alarm_status, &prop_descr_gpon_onu_dowi_drift_value, &prop_descr_gpon_onu_dowi_new_eqd };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_dowi_data_fields[] = { { .name = "alarm_status", .descr = "Alarm status", .offset = offsetof(bcmolt_gpon_onu_dowi_data, alarm_status), .type = &type_descr_bcmolt_status }, { .name = "drift_value", .descr = "Calculated amount of drift (positive + negative as a signed value).", .offset = offsetof(bcmolt_gpon_onu_dowi_data, drift_value), .type = &type_descr_int32_t }, { .name = "new_eqd", .descr = "New EQD after drift is corrected (only valid if status is 'on').", .offset = offsetof(bcmolt_gpon_onu_dowi_data, new_eqd), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_dowi_data = { .name = "bcmolt_gpon_onu_dowi_data", .descr = "Drift of Window of ONUi", .size = sizeof(bcmolt_gpon_onu_dowi_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_dowi_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_dowi_data_fields } } };
+
+/* Group: gpon_onu - sfi */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_sfi_alarm_status = { .name = "alarm_status", .descr = "alarm status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_SFI_ID_ALARM_STATUS, .offset = offsetof(bcmolt_gpon_onu_sfi_data, alarm_status), .type = &type_descr_bcmolt_status };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_sfi_ber = { .name = "ber", .descr = "Inverse bit error rate (e.g. if this number is 1000, the BER is 1/1000).", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_SFI_ID_BER, .offset = offsetof(bcmolt_gpon_onu_sfi_data, ber), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_sfi_prop_array[] = { &prop_descr_gpon_onu_sfi_alarm_status, &prop_descr_gpon_onu_sfi_ber };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_sfi_data_fields[] = { { .name = "alarm_status", .descr = "alarm status", .offset = offsetof(bcmolt_gpon_onu_sfi_data, alarm_status), .type = &type_descr_bcmolt_status }, { .name = "ber", .descr = "Inverse bit error rate (e.g. if this number is 1000, the BER is 1/1000).", .offset = offsetof(bcmolt_gpon_onu_sfi_data, ber), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_sfi_data = { .name = "bcmolt_gpon_onu_sfi_data", .descr = "Signal Fail of ONUi", .size = sizeof(bcmolt_gpon_onu_sfi_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_sfi_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_sfi_data_fields } } };
+
+/* Group: gpon_onu - sdi */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_sdi_alarm_status = { .name = "alarm_status", .descr = "alarm status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_SDI_ID_ALARM_STATUS, .offset = offsetof(bcmolt_gpon_onu_sdi_data, alarm_status), .type = &type_descr_bcmolt_status };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_sdi_ber = { .name = "ber", .descr = "Inverse bit error rate (e.g. if this number is 1000, the BER is 1/1000).", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_SDI_ID_BER, .offset = offsetof(bcmolt_gpon_onu_sdi_data, ber), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_sdi_prop_array[] = { &prop_descr_gpon_onu_sdi_alarm_status, &prop_descr_gpon_onu_sdi_ber };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_sdi_data_fields[] = { { .name = "alarm_status", .descr = "alarm status", .offset = offsetof(bcmolt_gpon_onu_sdi_data, alarm_status), .type = &type_descr_bcmolt_status }, { .name = "ber", .descr = "Inverse bit error rate (e.g. if this number is 1000, the BER is 1/1000).", .offset = offsetof(bcmolt_gpon_onu_sdi_data, ber), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_sdi_data = { .name = "bcmolt_gpon_onu_sdi_data", .descr = "Signal Degraded of ONUi", .size = sizeof(bcmolt_gpon_onu_sdi_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_sdi_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_sdi_data_fields } } };
+
+/* Group: gpon_onu - dfi */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_dfi_alarm_status = { .name = "alarm_status", .descr = "alarm status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_DFI_ID_ALARM_STATUS, .offset = offsetof(bcmolt_gpon_onu_dfi_data, alarm_status), .type = &type_descr_bcmolt_status };
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_dfi_prop_array[] = { &prop_descr_gpon_onu_dfi_alarm_status };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_dfi_data_fields[] = { { .name = "alarm_status", .descr = "alarm status", .offset = offsetof(bcmolt_gpon_onu_dfi_data, alarm_status), .type = &type_descr_bcmolt_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_dfi_data = { .name = "bcmolt_gpon_onu_dfi_data", .descr = "Receive Dying-Gasp of ONUi", .size = sizeof(bcmolt_gpon_onu_dfi_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_dfi_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_dfi_data_fields } } };
+
+/* Group: gpon_onu - sufi */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_sufi_alarm_status = { .name = "alarm_status", .descr = "alarm status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_SUFI_ID_ALARM_STATUS, .offset = offsetof(bcmolt_gpon_onu_sufi_data, alarm_status), .type = &type_descr_bcmolt_status };
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_sufi_prop_array[] = { &prop_descr_gpon_onu_sufi_alarm_status };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_sufi_data_fields[] = { { .name = "alarm_status", .descr = "alarm status", .offset = offsetof(bcmolt_gpon_onu_sufi_data, alarm_status), .type = &type_descr_bcmolt_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_sufi_data = { .name = "bcmolt_gpon_onu_sufi_data", .descr = "SUFi", .size = sizeof(bcmolt_gpon_onu_sufi_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_sufi_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_sufi_data_fields } } };
+
+/* Group: gpon_onu - loai */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_loai_alarm_status = { .name = "alarm_status", .descr = "alarm status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_LOAI_ID_ALARM_STATUS, .offset = offsetof(bcmolt_gpon_onu_loai_data, alarm_status), .type = &type_descr_bcmolt_status };
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_loai_prop_array[] = { &prop_descr_gpon_onu_loai_alarm_status };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_loai_data_fields[] = { { .name = "alarm_status", .descr = "alarm status", .offset = offsetof(bcmolt_gpon_onu_loai_data, alarm_status), .type = &type_descr_bcmolt_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_loai_data = { .name = "bcmolt_gpon_onu_loai_data", .descr = "LOAi", .size = sizeof(bcmolt_gpon_onu_loai_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_loai_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_loai_data_fields } } };
+
+/* Group: gpon_onu - dgi */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_dgi_alarm_status = { .name = "alarm_status", .descr = "alarm status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_DGI_ID_ALARM_STATUS, .offset = offsetof(bcmolt_gpon_onu_dgi_data, alarm_status), .type = &type_descr_bcmolt_status };
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_dgi_prop_array[] = { &prop_descr_gpon_onu_dgi_alarm_status };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_dgi_data_fields[] = { { .name = "alarm_status", .descr = "alarm status", .offset = offsetof(bcmolt_gpon_onu_dgi_data, alarm_status), .type = &type_descr_bcmolt_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_dgi_data = { .name = "bcmolt_gpon_onu_dgi_data", .descr = "Receive Dying-Gasp of ONUi", .size = sizeof(bcmolt_gpon_onu_dgi_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_dgi_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_dgi_data_fields } } };
+
+/* Group: gpon_onu - pee */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_pee_alarm_status = { .name = "alarm_status", .descr = "alarm status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_PEE_ID_ALARM_STATUS, .offset = offsetof(bcmolt_gpon_onu_pee_data, alarm_status), .type = &type_descr_bcmolt_status };
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_pee_prop_array[] = { &prop_descr_gpon_onu_pee_alarm_status };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_pee_data_fields[] = { { .name = "alarm_status", .descr = "alarm status", .offset = offsetof(bcmolt_gpon_onu_pee_data, alarm_status), .type = &type_descr_bcmolt_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_pee_data = { .name = "bcmolt_gpon_onu_pee_data", .descr = "PEE", .size = sizeof(bcmolt_gpon_onu_pee_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_pee_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_pee_data_fields } } };
+
+/* Group: gpon_onu - pst */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_pst_link_number = { .name = "link_number", .descr = "link number", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_PST_ID_LINK_NUMBER, .offset = offsetof(bcmolt_gpon_onu_pst_data, link_number), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_pst_k1 = { .name = "k1", .descr = "K1", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_PST_ID_K1, .offset = offsetof(bcmolt_gpon_onu_pst_data, k1), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_pst_k2 = { .name = "k2", .descr = "K2", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_PST_ID_K2, .offset = offsetof(bcmolt_gpon_onu_pst_data, k2), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_pst_prop_array[] = { &prop_descr_gpon_onu_pst_link_number, &prop_descr_gpon_onu_pst_k1, &prop_descr_gpon_onu_pst_k2 };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_pst_data_fields[] = { { .name = "link_number", .descr = "link number", .offset = offsetof(bcmolt_gpon_onu_pst_data, link_number), .type = &type_descr_uint32_t }, { .name = "k1", .descr = "K1", .offset = offsetof(bcmolt_gpon_onu_pst_data, k1), .type = &type_descr_uint8_t }, { .name = "k2", .descr = "K2", .offset = offsetof(bcmolt_gpon_onu_pst_data, k2), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_pst_data = { .name = "bcmolt_gpon_onu_pst_data", .descr = "PST", .size = sizeof(bcmolt_gpon_onu_pst_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_pst_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_pst_data_fields } } };
+
+/* Group: gpon_onu - tiwi */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_tiwi_alarm_status = { .name = "alarm_status", .descr = "Alarm status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_TIWI_ID_ALARM_STATUS, .offset = offsetof(bcmolt_gpon_onu_tiwi_data, alarm_status), .type = &type_descr_bcmolt_status };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_tiwi_drift_value = { .name = "drift_value", .descr = "Calculated amount of drift (positive + negative as a signed value).", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_TIWI_ID_DRIFT_VALUE, .offset = offsetof(bcmolt_gpon_onu_tiwi_data, drift_value), .type = &type_descr_int32_t };
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_tiwi_prop_array[] = { &prop_descr_gpon_onu_tiwi_alarm_status, &prop_descr_gpon_onu_tiwi_drift_value };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_tiwi_data_fields[] = { { .name = "alarm_status", .descr = "Alarm status", .offset = offsetof(bcmolt_gpon_onu_tiwi_data, alarm_status), .type = &type_descr_bcmolt_status }, { .name = "drift_value", .descr = "Calculated amount of drift (positive + negative as a signed value).", .offset = offsetof(bcmolt_gpon_onu_tiwi_data, drift_value), .type = &type_descr_int32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_tiwi_data = { .name = "bcmolt_gpon_onu_tiwi_data", .descr = "Transmission Interference Warning", .size = sizeof(bcmolt_gpon_onu_tiwi_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_tiwi_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_tiwi_data_fields } } };
+
+/* Group: gpon_onu - loki */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_loki_alarm_status = { .name = "alarm_status", .descr = "alarm status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_LOKI_ID_ALARM_STATUS, .offset = offsetof(bcmolt_gpon_onu_loki_data, alarm_status), .type = &type_descr_bcmolt_status };
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_loki_prop_array[] = { &prop_descr_gpon_onu_loki_alarm_status };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_loki_data_fields[] = { { .name = "alarm_status", .descr = "alarm status", .offset = offsetof(bcmolt_gpon_onu_loki_data, alarm_status), .type = &type_descr_bcmolt_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_loki_data = { .name = "bcmolt_gpon_onu_loki_data", .descr = "LOki", .size = sizeof(bcmolt_gpon_onu_loki_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_loki_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_loki_data_fields } } };
+
+/* Group: gpon_onu - memi */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_memi_ploam_buffer = { .name = "ploam_buffer", .descr = "PLOAM buffer", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_MEMI_ID_PLOAM_BUFFER, .offset = offsetof(bcmolt_gpon_onu_memi_data, ploam_buffer), .type = &type_descr_bcmolt_arr_u8_13 };
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_memi_prop_array[] = { &prop_descr_gpon_onu_memi_ploam_buffer };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_memi_data_fields[] = { { .name = "ploam_buffer", .descr = "PLOAM buffer", .offset = offsetof(bcmolt_gpon_onu_memi_data, ploam_buffer), .type = &type_descr_bcmolt_arr_u8_13 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_memi_data = { .name = "bcmolt_gpon_onu_memi_data", .descr = "MEMi", .size = sizeof(bcmolt_gpon_onu_memi_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_memi_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_memi_data_fields } } };
+
+/* Group: gpon_onu - omci_port_id_configuration_completed */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_omci_port_id_configuration_completed_gem_port = { .name = "gem_port", .descr = "GEM Port ID", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_OMCI_PORT_ID_CONFIGURATION_COMPLETED_ID_GEM_PORT, .offset = offsetof(bcmolt_gpon_onu_omci_port_id_configuration_completed_data, gem_port), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_omci_port_id_configuration_completed_status = { .name = "status", .descr = "status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_OMCI_PORT_ID_CONFIGURATION_COMPLETED_ID_STATUS, .offset = offsetof(bcmolt_gpon_onu_omci_port_id_configuration_completed_data, status), .type = &type_descr_bcmolt_result };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_omci_port_id_configuration_completed_operation = { .name = "operation", .descr = "Operation", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_OMCI_PORT_ID_CONFIGURATION_COMPLETED_ID_OPERATION, .offset = offsetof(bcmolt_gpon_onu_omci_port_id_configuration_completed_data, operation), .type = &type_descr_bcmolt_omci_port_id_operation };
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_omci_port_id_configuration_completed_prop_array[] = { &prop_descr_gpon_onu_omci_port_id_configuration_completed_gem_port, &prop_descr_gpon_onu_omci_port_id_configuration_completed_status, &prop_descr_gpon_onu_omci_port_id_configuration_completed_operation };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_omci_port_id_configuration_completed_data_fields[] = { { .name = "gem_port", .descr = "GEM Port ID", .offset = offsetof(bcmolt_gpon_onu_omci_port_id_configuration_completed_data, gem_port), .type = &type_descr_uint16_t }, { .name = "status", .descr = "status", .offset = offsetof(bcmolt_gpon_onu_omci_port_id_configuration_completed_data, status), .type = &type_descr_bcmolt_result }, { .name = "operation", .descr = "Operation", .offset = offsetof(bcmolt_gpon_onu_omci_port_id_configuration_completed_data, operation), .type = &type_descr_bcmolt_omci_port_id_operation } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_omci_port_id_configuration_completed_data = { .name = "bcmolt_gpon_onu_omci_port_id_configuration_completed_data", .descr = "OMCI PORT ID Configuration Completed", .size = sizeof(bcmolt_gpon_onu_omci_port_id_configuration_completed_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_omci_port_id_configuration_completed_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_omci_port_id_configuration_completed_data_fields } } };
+
+/* Group: gpon_onu - ber_interval_configuration_completed */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_ber_interval_configuration_completed_ber_interval = { .name = "ber_interval", .descr = "BER interval in ms", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_BER_INTERVAL_CONFIGURATION_COMPLETED_ID_BER_INTERVAL, .offset = offsetof(bcmolt_gpon_onu_ber_interval_configuration_completed_data, ber_interval), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_ber_interval_configuration_completed_result = { .name = "result", .descr = "Result", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_BER_INTERVAL_CONFIGURATION_COMPLETED_ID_RESULT, .offset = offsetof(bcmolt_gpon_onu_ber_interval_configuration_completed_data, result), .type = &type_descr_bcmolt_result };
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_ber_interval_configuration_completed_prop_array[] = { &prop_descr_gpon_onu_ber_interval_configuration_completed_ber_interval, &prop_descr_gpon_onu_ber_interval_configuration_completed_result };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_ber_interval_configuration_completed_data_fields[] = { { .name = "ber_interval", .descr = "BER interval in ms", .offset = offsetof(bcmolt_gpon_onu_ber_interval_configuration_completed_data, ber_interval), .type = &type_descr_uint32_t }, { .name = "result", .descr = "Result", .offset = offsetof(bcmolt_gpon_onu_ber_interval_configuration_completed_data, result), .type = &type_descr_bcmolt_result } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_ber_interval_configuration_completed_data = { .name = "bcmolt_gpon_onu_ber_interval_configuration_completed_data", .descr = "BER Interval Configuration Completed", .size = sizeof(bcmolt_gpon_onu_ber_interval_configuration_completed_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_ber_interval_configuration_completed_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_ber_interval_configuration_completed_data_fields } } };
+
+/* Group: gpon_onu - err */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_err_bip8_errors = { .name = "bip8_errors", .descr = "BIP8 errors", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_ERR_ID_BIP8_ERRORS, .offset = offsetof(bcmolt_gpon_onu_err_data, bip8_errors), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_err_prop_array[] = { &prop_descr_gpon_onu_err_bip8_errors };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_err_data_fields[] = { { .name = "bip8_errors", .descr = "BIP8 errors", .offset = offsetof(bcmolt_gpon_onu_err_data, bip8_errors), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_err_data = { .name = "bcmolt_gpon_onu_err_data", .descr = "ERR", .size = sizeof(bcmolt_gpon_onu_err_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_err_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_err_data_fields } } };
+
+/* Group: gpon_onu - rei */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_rei_bip8_errors = { .name = "bip8_errors", .descr = "BIP8 errors", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_REI_ID_BIP8_ERRORS, .offset = offsetof(bcmolt_gpon_onu_rei_data, bip8_errors), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_rei_prop_array[] = { &prop_descr_gpon_onu_rei_bip8_errors };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_rei_data_fields[] = { { .name = "bip8_errors", .descr = "BIP8 errors", .offset = offsetof(bcmolt_gpon_onu_rei_data, bip8_errors), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_rei_data = { .name = "bcmolt_gpon_onu_rei_data", .descr = "REI", .size = sizeof(bcmolt_gpon_onu_rei_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_rei_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_rei_data_fields } } };
+
+/* Group: gpon_onu - ranging_completed */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_ranging_completed_status = { .name = "status", .descr = "status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_STATUS, .offset = offsetof(bcmolt_gpon_onu_ranging_completed_data, status), .type = &type_descr_bcmolt_result };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_ranging_completed_fail_reason = { .name = "fail_reason", .descr = "fail reason", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_FAIL_REASON, .offset = offsetof(bcmolt_gpon_onu_ranging_completed_data, fail_reason), .type = &type_descr_bcmolt_ranging_fail_reason };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_ranging_completed_number_of_ploams = { .name = "number_of_ploams", .descr = "number of PLOAMs", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_NUMBER_OF_PLOAMS, .offset = offsetof(bcmolt_gpon_onu_ranging_completed_data, number_of_ploams), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_ranging_completed_eqd = { .name = "eqd", .descr = "EQD", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_EQD, .offset = offsetof(bcmolt_gpon_onu_ranging_completed_data, eqd), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_ranging_completed_power_level = { .name = "power_level", .descr = "Power Level", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_RANGING_COMPLETED_ID_POWER_LEVEL, .offset = offsetof(bcmolt_gpon_onu_ranging_completed_data, power_level), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_ranging_completed_prop_array[] = { &prop_descr_gpon_onu_ranging_completed_status, &prop_descr_gpon_onu_ranging_completed_fail_reason, &prop_descr_gpon_onu_ranging_completed_number_of_ploams, &prop_descr_gpon_onu_ranging_completed_eqd, &prop_descr_gpon_onu_ranging_completed_power_level };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_ranging_completed_data_fields[] = { { .name = "status", .descr = "status", .offset = offsetof(bcmolt_gpon_onu_ranging_completed_data, status), .type = &type_descr_bcmolt_result }, { .name = "fail_reason", .descr = "fail reason", .offset = offsetof(bcmolt_gpon_onu_ranging_completed_data, fail_reason), .type = &type_descr_bcmolt_ranging_fail_reason }, { .name = "number_of_ploams", .descr = "number of PLOAMs", .offset = offsetof(bcmolt_gpon_onu_ranging_completed_data, number_of_ploams), .type = &type_descr_uint8_t }, { .name = "eqd", .descr = "EQD", .offset = offsetof(bcmolt_gpon_onu_ranging_completed_data, eqd), .type = &type_descr_uint32_t }, { .name = "power_level", .descr = "Power Level", .offset = offsetof(bcmolt_gpon_onu_ranging_completed_data, power_level), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_ranging_completed_data = { .name = "bcmolt_gpon_onu_ranging_completed_data", .descr = "Ranging Completed", .size = sizeof(bcmolt_gpon_onu_ranging_completed_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_ranging_completed_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_ranging_completed_data_fields } } };
+
+/* Group: gpon_onu - password_authentication_completed */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_password_authentication_completed_status = { .name = "status", .descr = "status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_PASSWORD_AUTHENTICATION_COMPLETED_ID_STATUS, .offset = offsetof(bcmolt_gpon_onu_password_authentication_completed_data, status), .type = &type_descr_bcmolt_result };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_password_authentication_completed_fail_reason = { .name = "fail_reason", .descr = "fail reason", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_PASSWORD_AUTHENTICATION_COMPLETED_ID_FAIL_REASON, .offset = offsetof(bcmolt_gpon_onu_password_authentication_completed_data, fail_reason), .type = &type_descr_bcmolt_password_authentication_fail_reason };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_password_authentication_completed_password = { .name = "password", .descr = "password", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_PASSWORD_AUTHENTICATION_COMPLETED_ID_PASSWORD, .offset = offsetof(bcmolt_gpon_onu_password_authentication_completed_data, password), .type = &type_descr_bcmolt_arr_u8_10 };
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_password_authentication_completed_prop_array[] = { &prop_descr_gpon_onu_password_authentication_completed_status, &prop_descr_gpon_onu_password_authentication_completed_fail_reason, &prop_descr_gpon_onu_password_authentication_completed_password };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_password_authentication_completed_data_fields[] = { { .name = "status", .descr = "status", .offset = offsetof(bcmolt_gpon_onu_password_authentication_completed_data, status), .type = &type_descr_bcmolt_result }, { .name = "fail_reason", .descr = "fail reason", .offset = offsetof(bcmolt_gpon_onu_password_authentication_completed_data, fail_reason), .type = &type_descr_bcmolt_password_authentication_fail_reason }, { .name = "password", .descr = "password", .offset = offsetof(bcmolt_gpon_onu_password_authentication_completed_data, password), .type = &type_descr_bcmolt_arr_u8_10 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_password_authentication_completed_data = { .name = "bcmolt_gpon_onu_password_authentication_completed_data", .descr = "Password Authentication Completed", .size = sizeof(bcmolt_gpon_onu_password_authentication_completed_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_password_authentication_completed_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_password_authentication_completed_data_fields } } };
+
+/* Group: gpon_onu - onu_activation_completed */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_onu_activation_completed_status = { .name = "status", .descr = "status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_ONU_ACTIVATION_COMPLETED_ID_STATUS, .offset = offsetof(bcmolt_gpon_onu_onu_activation_completed_data, status), .type = &type_descr_bcmolt_result };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_onu_activation_completed_fail_reason = { .name = "fail_reason", .descr = "fail reason", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_ONU_ACTIVATION_COMPLETED_ID_FAIL_REASON, .offset = offsetof(bcmolt_gpon_onu_onu_activation_completed_data, fail_reason), .type = &type_descr_bcmolt_activation_fail_reason };
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_onu_activation_completed_prop_array[] = { &prop_descr_gpon_onu_onu_activation_completed_status, &prop_descr_gpon_onu_onu_activation_completed_fail_reason };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_onu_activation_completed_data_fields[] = { { .name = "status", .descr = "status", .offset = offsetof(bcmolt_gpon_onu_onu_activation_completed_data, status), .type = &type_descr_bcmolt_result }, { .name = "fail_reason", .descr = "fail reason", .offset = offsetof(bcmolt_gpon_onu_onu_activation_completed_data, fail_reason), .type = &type_descr_bcmolt_activation_fail_reason } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_onu_activation_completed_data = { .name = "bcmolt_gpon_onu_onu_activation_completed_data", .descr = "ONU Activation Completed", .size = sizeof(bcmolt_gpon_onu_onu_activation_completed_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_onu_activation_completed_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_onu_activation_completed_data_fields } } };
+
+/* Group: gpon_onu - onu_deactivation_completed */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_onu_deactivation_completed_status = { .name = "status", .descr = "status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_ONU_DEACTIVATION_COMPLETED_ID_STATUS, .offset = offsetof(bcmolt_gpon_onu_onu_deactivation_completed_data, status), .type = &type_descr_bcmolt_result };
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_onu_deactivation_completed_prop_array[] = { &prop_descr_gpon_onu_onu_deactivation_completed_status };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_onu_deactivation_completed_data_fields[] = { { .name = "status", .descr = "status", .offset = offsetof(bcmolt_gpon_onu_onu_deactivation_completed_data, status), .type = &type_descr_bcmolt_result } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_onu_deactivation_completed_data = { .name = "bcmolt_gpon_onu_onu_deactivation_completed_data", .descr = "ONU Deactivation Completed", .size = sizeof(bcmolt_gpon_onu_onu_deactivation_completed_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_onu_deactivation_completed_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_onu_deactivation_completed_data_fields } } };
+
+/* Group: gpon_onu - onu_enable_completed */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_onu_enable_completed_serial_number = { .name = "serial_number", .descr = "serial number", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_ONU_ENABLE_COMPLETED_ID_SERIAL_NUMBER, .offset = offsetof(bcmolt_gpon_onu_onu_enable_completed_data, serial_number), .type = &type_descr_bcmolt_serial_number };
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_onu_enable_completed_prop_array[] = { &prop_descr_gpon_onu_onu_enable_completed_serial_number };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_onu_enable_completed_data_fields[] = { { .name = "serial_number", .descr = "serial number", .offset = offsetof(bcmolt_gpon_onu_onu_enable_completed_data, serial_number), .type = &type_descr_bcmolt_serial_number } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_onu_enable_completed_data = { .name = "bcmolt_gpon_onu_onu_enable_completed_data", .descr = "ONU Enable Completed", .size = sizeof(bcmolt_gpon_onu_onu_enable_completed_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_onu_enable_completed_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_onu_enable_completed_data_fields } } };
+
+/* Group: gpon_onu - onu_disable_completed */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_onu_disable_completed_serial_number = { .name = "serial_number", .descr = "serial number", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_ONU_DISABLE_COMPLETED_ID_SERIAL_NUMBER, .offset = offsetof(bcmolt_gpon_onu_onu_disable_completed_data, serial_number), .type = &type_descr_bcmolt_serial_number };
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_onu_disable_completed_prop_array[] = { &prop_descr_gpon_onu_onu_disable_completed_serial_number };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_onu_disable_completed_data_fields[] = { { .name = "serial_number", .descr = "serial number", .offset = offsetof(bcmolt_gpon_onu_onu_disable_completed_data, serial_number), .type = &type_descr_bcmolt_serial_number } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_onu_disable_completed_data = { .name = "bcmolt_gpon_onu_onu_disable_completed_data", .descr = "ONU Disable Completed", .size = sizeof(bcmolt_gpon_onu_onu_disable_completed_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_onu_disable_completed_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_onu_disable_completed_data_fields } } };
+
+/* Group: gpon_onu - invalid_dbru_report */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_invalid_dbru_report_alloc_id = { .name = "alloc_id", .descr = "Alloc-ID", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_INVALID_DBRU_REPORT_ID_ALLOC_ID, .offset = offsetof(bcmolt_gpon_onu_invalid_dbru_report_data, alloc_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_invalid_dbru_report_prop_array[] = { &prop_descr_gpon_onu_invalid_dbru_report_alloc_id };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_invalid_dbru_report_data_fields[] = { { .name = "alloc_id", .descr = "Alloc-ID", .offset = offsetof(bcmolt_gpon_onu_invalid_dbru_report_data, alloc_id), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_invalid_dbru_report_data = { .name = "bcmolt_gpon_onu_invalid_dbru_report_data", .descr = "Invalid DBRu Report", .size = sizeof(bcmolt_gpon_onu_invalid_dbru_report_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_invalid_dbru_report_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_invalid_dbru_report_data_fields } } };
+
+/* Group: gpon_onu - key_exchange_completed */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_key_exchange_completed_new_key = { .name = "new_key", .descr = "new key", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_KEY_EXCHANGE_COMPLETED_ID_NEW_KEY, .offset = offsetof(bcmolt_gpon_onu_key_exchange_completed_data, new_key), .type = &type_descr_bcmolt_aes_key };
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_key_exchange_completed_prop_array[] = { &prop_descr_gpon_onu_key_exchange_completed_new_key };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_key_exchange_completed_data_fields[] = { { .name = "new_key", .descr = "new key", .offset = offsetof(bcmolt_gpon_onu_key_exchange_completed_data, new_key), .type = &type_descr_bcmolt_aes_key } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_key_exchange_completed_data = { .name = "bcmolt_gpon_onu_key_exchange_completed_data", .descr = "Key Exchange Completed", .size = sizeof(bcmolt_gpon_onu_key_exchange_completed_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_key_exchange_completed_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_key_exchange_completed_data_fields } } };
+
+/* Group: gpon_onu - key_exchange_key_request_timeout */
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_key_exchange_key_request_timeout_prop_array[] = { };
+
+/* Group: gpon_onu - key_exchange_cycle_skipped */
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_key_exchange_cycle_skipped_prop_array[] = { };
+
+/* Group: gpon_onu - key_exchange_key_mismatch */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_key_exchange_key_mismatch_expected_key = { .name = "expected_key", .descr = "expected key", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID_EXPECTED_KEY, .offset = offsetof(bcmolt_gpon_onu_key_exchange_key_mismatch_data, expected_key), .type = &type_descr_bcmolt_aes_key };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_key_exchange_key_mismatch_received_key = { .name = "received_key", .descr = "received key", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID_RECEIVED_KEY, .offset = offsetof(bcmolt_gpon_onu_key_exchange_key_mismatch_data, received_key), .type = &type_descr_bcmolt_aes_key };
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_key_exchange_key_mismatch_prop_array[] = { &prop_descr_gpon_onu_key_exchange_key_mismatch_expected_key, &prop_descr_gpon_onu_key_exchange_key_mismatch_received_key };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_key_exchange_key_mismatch_data_fields[] = { { .name = "expected_key", .descr = "expected key", .offset = offsetof(bcmolt_gpon_onu_key_exchange_key_mismatch_data, expected_key), .type = &type_descr_bcmolt_aes_key }, { .name = "received_key", .descr = "received key", .offset = offsetof(bcmolt_gpon_onu_key_exchange_key_mismatch_data, received_key), .type = &type_descr_bcmolt_aes_key } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_key_exchange_key_mismatch_data = { .name = "bcmolt_gpon_onu_key_exchange_key_mismatch_data", .descr = "Key Exchange Key Mismatch", .size = sizeof(bcmolt_gpon_onu_key_exchange_key_mismatch_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_key_exchange_key_mismatch_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_key_exchange_key_mismatch_data_fields } } };
+
+/* Group: gpon_onu - key_exchange_unconsecutive_index */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_key_exchange_unconsecutive_index_expected_index = { .name = "expected_index", .descr = "expected index", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_KEY_EXCHANGE_UNCONSECUTIVE_INDEX_ID_EXPECTED_INDEX, .offset = offsetof(bcmolt_gpon_onu_key_exchange_unconsecutive_index_data, expected_index), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_key_exchange_unconsecutive_index_actual_index = { .name = "actual_index", .descr = "actual index", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_KEY_EXCHANGE_UNCONSECUTIVE_INDEX_ID_ACTUAL_INDEX, .offset = offsetof(bcmolt_gpon_onu_key_exchange_unconsecutive_index_data, actual_index), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_key_exchange_unconsecutive_index_prop_array[] = { &prop_descr_gpon_onu_key_exchange_unconsecutive_index_expected_index, &prop_descr_gpon_onu_key_exchange_unconsecutive_index_actual_index };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_key_exchange_unconsecutive_index_data_fields[] = { { .name = "expected_index", .descr = "expected index", .offset = offsetof(bcmolt_gpon_onu_key_exchange_unconsecutive_index_data, expected_index), .type = &type_descr_uint32_t }, { .name = "actual_index", .descr = "actual index", .offset = offsetof(bcmolt_gpon_onu_key_exchange_unconsecutive_index_data, actual_index), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_key_exchange_unconsecutive_index_data = { .name = "bcmolt_gpon_onu_key_exchange_unconsecutive_index_data", .descr = "Key Exchange Unconsecutive Index", .size = sizeof(bcmolt_gpon_onu_key_exchange_unconsecutive_index_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_key_exchange_unconsecutive_index_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_key_exchange_unconsecutive_index_data_fields } } };
+
+/* Group: gpon_onu - rssi_measurement_completed */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_rssi_measurement_completed_status = { .name = "status", .descr = "status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID_STATUS, .offset = offsetof(bcmolt_gpon_onu_rssi_measurement_completed_data, status), .type = &type_descr_bcmolt_result };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_rssi_measurement_completed_fail_reason = { .name = "fail_reason", .descr = "fail reason", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID_FAIL_REASON, .offset = offsetof(bcmolt_gpon_onu_rssi_measurement_completed_data, fail_reason), .type = &type_descr_bcmolt_rssi_measurement_fail_reason };
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_rssi_measurement_completed_prop_array[] = { &prop_descr_gpon_onu_rssi_measurement_completed_status, &prop_descr_gpon_onu_rssi_measurement_completed_fail_reason };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_rssi_measurement_completed_data_fields[] = { { .name = "status", .descr = "status", .offset = offsetof(bcmolt_gpon_onu_rssi_measurement_completed_data, status), .type = &type_descr_bcmolt_result }, { .name = "fail_reason", .descr = "fail reason", .offset = offsetof(bcmolt_gpon_onu_rssi_measurement_completed_data, fail_reason), .type = &type_descr_bcmolt_rssi_measurement_fail_reason } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_rssi_measurement_completed_data = { .name = "bcmolt_gpon_onu_rssi_measurement_completed_data", .descr = "RSSI Measurement Completed", .size = sizeof(bcmolt_gpon_onu_rssi_measurement_completed_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_rssi_measurement_completed_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_rssi_measurement_completed_data_fields } } };
+
+/* Group: gpon_onu - key_exchange_decrypt_required */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_key_exchange_decrypt_required_new_key = { .name = "new_key", .descr = "new key", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_KEY_EXCHANGE_DECRYPT_REQUIRED_ID_NEW_KEY, .offset = offsetof(bcmolt_gpon_onu_key_exchange_decrypt_required_data, new_key), .type = &type_descr_bcmolt_aes_key };
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_key_exchange_decrypt_required_prop_array[] = { &prop_descr_gpon_onu_key_exchange_decrypt_required_new_key };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_key_exchange_decrypt_required_data_fields[] = { { .name = "new_key", .descr = "new key", .offset = offsetof(bcmolt_gpon_onu_key_exchange_decrypt_required_data, new_key), .type = &type_descr_bcmolt_aes_key } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_key_exchange_decrypt_required_data = { .name = "bcmolt_gpon_onu_key_exchange_decrypt_required_data", .descr = "Key Exchange Decrypt Required", .size = sizeof(bcmolt_gpon_onu_key_exchange_decrypt_required_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_key_exchange_decrypt_required_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_key_exchange_decrypt_required_data_fields } } };
+
+/* Group: gpon_onu - optical_reflection */
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_optical_reflection_prop_array[] = { };
+
+/* Group: gpon_onu - cpu_packets */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_cpu_packets_packet_type = { .name = "packet_type", .descr = "packet type", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_CPU_PACKETS_ID_PACKET_TYPE, .offset = offsetof(bcmolt_gpon_onu_cpu_packets_data, packet_type), .type = &type_descr_bcmolt_packet_type };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_cpu_packets_calc_crc = { .name = "calc_crc", .descr = "calc crc", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_CPU_PACKETS_ID_CALC_CRC, .offset = offsetof(bcmolt_gpon_onu_cpu_packets_data, calc_crc), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_cpu_packets_number_of_packets = { .name = "number_of_packets", .descr = "number of packets", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_CPU_PACKETS_ID_NUMBER_OF_PACKETS, .offset = offsetof(bcmolt_gpon_onu_cpu_packets_data, number_of_packets), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_cpu_packets_packet_size = { .name = "packet_size", .descr = "Single packet size", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_CPU_PACKETS_ID_PACKET_SIZE, .offset = offsetof(bcmolt_gpon_onu_cpu_packets_data, packet_size), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_cpu_packets_buffer = { .name = "buffer", .descr = "buffer", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_CPU_PACKETS_ID_BUFFER, .offset = offsetof(bcmolt_gpon_onu_cpu_packets_data, buffer), .type = &type_descr_bcmolt_u8_list_u32_max_2048 };
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_cpu_packets_prop_array[] = { &prop_descr_gpon_onu_cpu_packets_packet_type, &prop_descr_gpon_onu_cpu_packets_calc_crc, &prop_descr_gpon_onu_cpu_packets_number_of_packets, &prop_descr_gpon_onu_cpu_packets_packet_size, &prop_descr_gpon_onu_cpu_packets_buffer };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_cpu_packets_data_fields[] = { { .name = "packet_type", .descr = "packet type", .offset = offsetof(bcmolt_gpon_onu_cpu_packets_data, packet_type), .type = &type_descr_bcmolt_packet_type }, { .name = "calc_crc", .descr = "calc crc", .offset = offsetof(bcmolt_gpon_onu_cpu_packets_data, calc_crc), .type = &type_descr_bcmos_bool }, { .name = "number_of_packets", .descr = "number of packets", .offset = offsetof(bcmolt_gpon_onu_cpu_packets_data, number_of_packets), .type = &type_descr_uint8_t }, { .name = "packet_size", .descr = "Single packet size", .offset = offsetof(bcmolt_gpon_onu_cpu_packets_data, packet_size), .type = &type_descr_uint16_t }, { .name = "buffer", .descr = "buffer", .offset = offsetof(bcmolt_gpon_onu_cpu_packets_data, buffer), .type = &type_descr_bcmolt_u8_list_u32_max_2048 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_cpu_packets_data = { .name = "bcmolt_gpon_onu_cpu_packets_data", .descr = "GPON CPU Packets", .size = sizeof(bcmolt_gpon_onu_cpu_packets_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_cpu_packets_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_cpu_packets_data_fields } } };
+
+/* Group: gpon_onu - ploam_packet */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_ploam_packet_ploam = { .name = "ploam", .descr = "ploam", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_PLOAM_PACKET_ID_PLOAM, .offset = offsetof(bcmolt_gpon_onu_ploam_packet_data, ploam), .type = &type_descr_bcmolt_arr_u8_12 };
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_ploam_packet_prop_array[] = { &prop_descr_gpon_onu_ploam_packet_ploam };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_ploam_packet_data_fields[] = { { .name = "ploam", .descr = "ploam", .offset = offsetof(bcmolt_gpon_onu_ploam_packet_data, ploam), .type = &type_descr_bcmolt_arr_u8_12 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_ploam_packet_data = { .name = "bcmolt_gpon_onu_ploam_packet_data", .descr = "PLOAM Packet", .size = sizeof(bcmolt_gpon_onu_ploam_packet_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_ploam_packet_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_ploam_packet_data_fields } } };
+
+/* Group: gpon_onu - cpu_packet */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_cpu_packet_port_id = { .name = "port_id", .descr = "port_id", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_CPU_PACKET_ID_PORT_ID, .offset = offsetof(bcmolt_gpon_onu_cpu_packet_data, port_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_cpu_packet_crc_ok = { .name = "crc_ok", .descr = "crc_ok", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_CPU_PACKET_ID_CRC_OK, .offset = offsetof(bcmolt_gpon_onu_cpu_packet_data, crc_ok), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_cpu_packet_packet_size = { .name = "packet_size", .descr = "packet_size", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_CPU_PACKET_ID_PACKET_SIZE, .offset = offsetof(bcmolt_gpon_onu_cpu_packet_data, packet_size), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_cpu_packet_buffer = { .name = "buffer", .descr = "buffer", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_CPU_PACKET_ID_BUFFER, .offset = offsetof(bcmolt_gpon_onu_cpu_packet_data, buffer), .type = &type_descr_bcmolt_u8_list_u32 };
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_cpu_packet_prop_array[] = { &prop_descr_gpon_onu_cpu_packet_port_id, &prop_descr_gpon_onu_cpu_packet_crc_ok, &prop_descr_gpon_onu_cpu_packet_packet_size, &prop_descr_gpon_onu_cpu_packet_buffer };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_cpu_packet_data_fields[] = { { .name = "port_id", .descr = "port_id", .offset = offsetof(bcmolt_gpon_onu_cpu_packet_data, port_id), .type = &type_descr_uint16_t }, { .name = "crc_ok", .descr = "crc_ok", .offset = offsetof(bcmolt_gpon_onu_cpu_packet_data, crc_ok), .type = &type_descr_bcmos_bool }, { .name = "packet_size", .descr = "packet_size", .offset = offsetof(bcmolt_gpon_onu_cpu_packet_data, packet_size), .type = &type_descr_uint32_t }, { .name = "buffer", .descr = "buffer", .offset = offsetof(bcmolt_gpon_onu_cpu_packet_data, buffer), .type = &type_descr_bcmolt_u8_list_u32 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_cpu_packet_data = { .name = "bcmolt_gpon_onu_cpu_packet_data", .descr = "Indicates CPU packet was received on the US from this ONU id", .size = sizeof(bcmolt_gpon_onu_cpu_packet_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_cpu_packet_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_cpu_packet_data_fields } } };
+
+/* Group: gpon_onu - omci_packet */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_omci_packet_port_id = { .name = "port_id", .descr = "port_id", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_OMCI_PACKET_ID_PORT_ID, .offset = offsetof(bcmolt_gpon_onu_omci_packet_data, port_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_omci_packet_crc_ok = { .name = "crc_ok", .descr = "crc_ok", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_OMCI_PACKET_ID_CRC_OK, .offset = offsetof(bcmolt_gpon_onu_omci_packet_data, crc_ok), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_omci_packet_packet_size = { .name = "packet_size", .descr = "packet_size", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_OMCI_PACKET_ID_PACKET_SIZE, .offset = offsetof(bcmolt_gpon_onu_omci_packet_data, packet_size), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_omci_packet_buffer = { .name = "buffer", .descr = "buffer", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_OMCI_PACKET_ID_BUFFER, .offset = offsetof(bcmolt_gpon_onu_omci_packet_data, buffer), .type = &type_descr_bcmolt_u8_list_u32 };
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_omci_packet_prop_array[] = { &prop_descr_gpon_onu_omci_packet_port_id, &prop_descr_gpon_onu_omci_packet_crc_ok, &prop_descr_gpon_onu_omci_packet_packet_size, &prop_descr_gpon_onu_omci_packet_buffer };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_omci_packet_data_fields[] = { { .name = "port_id", .descr = "port_id", .offset = offsetof(bcmolt_gpon_onu_omci_packet_data, port_id), .type = &type_descr_uint16_t }, { .name = "crc_ok", .descr = "crc_ok", .offset = offsetof(bcmolt_gpon_onu_omci_packet_data, crc_ok), .type = &type_descr_bcmos_bool }, { .name = "packet_size", .descr = "packet_size", .offset = offsetof(bcmolt_gpon_onu_omci_packet_data, packet_size), .type = &type_descr_uint32_t }, { .name = "buffer", .descr = "buffer", .offset = offsetof(bcmolt_gpon_onu_omci_packet_data, buffer), .type = &type_descr_bcmolt_u8_list_u32 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_omci_packet_data = { .name = "bcmolt_gpon_onu_omci_packet_data", .descr = "Indicates OMCI packet was received on the US from this ONU id", .size = sizeof(bcmolt_gpon_onu_omci_packet_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_omci_packet_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_omci_packet_data_fields } } };
+
+/* Group: gpon_onu - onu_activation_standby_completed */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_onu_activation_standby_completed_result = { .name = "result", .descr = "result", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_ONU_ACTIVATION_STANDBY_COMPLETED_ID_RESULT, .offset = offsetof(bcmolt_gpon_onu_onu_activation_standby_completed_data, result), .type = &type_descr_bcmolt_result };
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_onu_activation_standby_completed_prop_array[] = { &prop_descr_gpon_onu_onu_activation_standby_completed_result };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_onu_activation_standby_completed_data_fields[] = { { .name = "result", .descr = "result", .offset = offsetof(bcmolt_gpon_onu_onu_activation_standby_completed_data, result), .type = &type_descr_bcmolt_result } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_onu_activation_standby_completed_data = { .name = "bcmolt_gpon_onu_onu_activation_standby_completed_data", .descr = "onu activation standby completed", .size = sizeof(bcmolt_gpon_onu_onu_activation_standby_completed_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_onu_activation_standby_completed_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_onu_activation_standby_completed_data_fields } } };
+
+/* Group: gpon_onu - power_management_state_change */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_power_management_state_change_old_state = { .name = "old_state", .descr = "The state the ONU was previously in.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_OLD_STATE, .offset = offsetof(bcmolt_gpon_onu_power_management_state_change_data, old_state), .type = &type_descr_bcmolt_onu_state };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_power_management_state_change_new_state = { .name = "new_state", .descr = "The state the ONU is currently in.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_NEW_STATE, .offset = offsetof(bcmolt_gpon_onu_power_management_state_change_data, new_state), .type = &type_descr_bcmolt_onu_state };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_power_management_state_change_reason = { .name = "reason", .descr = "The reason for the state change.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_REASON, .offset = offsetof(bcmolt_gpon_onu_power_management_state_change_data, reason), .type = &type_descr_bcmolt_power_management_transition_reason };
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_power_management_state_change_prop_array[] = { &prop_descr_gpon_onu_power_management_state_change_old_state, &prop_descr_gpon_onu_power_management_state_change_new_state, &prop_descr_gpon_onu_power_management_state_change_reason };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_power_management_state_change_data_fields[] = { { .name = "old_state", .descr = "The state the ONU was previously in.", .offset = offsetof(bcmolt_gpon_onu_power_management_state_change_data, old_state), .type = &type_descr_bcmolt_onu_state }, { .name = "new_state", .descr = "The state the ONU is currently in.", .offset = offsetof(bcmolt_gpon_onu_power_management_state_change_data, new_state), .type = &type_descr_bcmolt_onu_state }, { .name = "reason", .descr = "The reason for the state change.", .offset = offsetof(bcmolt_gpon_onu_power_management_state_change_data, reason), .type = &type_descr_bcmolt_power_management_transition_reason } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_power_management_state_change_data = { .name = "bcmolt_gpon_onu_power_management_state_change_data", .descr = "Notification that an ONUs power management state has changed.", .size = sizeof(bcmolt_gpon_onu_power_management_state_change_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_power_management_state_change_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_power_management_state_change_data_fields } } };
+
+/* Group: gpon_onu - possible_drift */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_possible_drift_alarm_status = { .name = "alarm_status", .descr = "Alarm Status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_POSSIBLE_DRIFT_ID_ALARM_STATUS, .offset = offsetof(bcmolt_gpon_onu_possible_drift_data, alarm_status), .type = &type_descr_bcmolt_status };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_possible_drift_estimated_drift = { .name = "estimated_drift", .descr = "If status is on, the estimated drift value, otherwise zero (0).", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_POSSIBLE_DRIFT_ID_ESTIMATED_DRIFT, .offset = offsetof(bcmolt_gpon_onu_possible_drift_data, estimated_drift), .type = &type_descr_int32_t };
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_possible_drift_prop_array[] = { &prop_descr_gpon_onu_possible_drift_alarm_status, &prop_descr_gpon_onu_possible_drift_estimated_drift };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_possible_drift_data_fields[] = { { .name = "alarm_status", .descr = "Alarm Status", .offset = offsetof(bcmolt_gpon_onu_possible_drift_data, alarm_status), .type = &type_descr_bcmolt_status }, { .name = "estimated_drift", .descr = "If status is on, the estimated drift value, otherwise zero (0).", .offset = offsetof(bcmolt_gpon_onu_possible_drift_data, estimated_drift), .type = &type_descr_int32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_possible_drift_data = { .name = "bcmolt_gpon_onu_possible_drift_data", .descr = "An ONU in a low power state may be experiencing drift beyond the configured threshold. The estimate may be inaccurate depending on ONU behavior. Actual drift may be less than estimated.", .size = sizeof(bcmolt_gpon_onu_possible_drift_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_possible_drift_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_possible_drift_data_fields } } };
+
+/* Group: gpon_onu - stat_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_stat_cfg_cfg = { .name = "cfg", .descr = "Statistic alarm configuration.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_STAT_CFG_ID_CFG, .offset = offsetof(bcmolt_gpon_onu_stat_cfg_data, cfg), .type = &type_descr_bcmolt_stat_alarm_config };
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_stat_cfg_prop_array[] = { &prop_descr_gpon_onu_stat_cfg_cfg };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_stat_cfg_data_fields[] = { { .name = "cfg", .descr = "Statistic alarm configuration.", .offset = offsetof(bcmolt_gpon_onu_stat_cfg_data, cfg), .type = &type_descr_bcmolt_stat_alarm_config } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_stat_cfg_data = { .name = "bcmolt_gpon_onu_stat_cfg_data", .descr = "Statistic Configuration", .size = sizeof(bcmolt_gpon_onu_stat_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_stat_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_stat_cfg_data_fields } } };
+
+/* Group: gpon_onu - stat_alarm_raised */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_stat_alarm_raised_stat = { .name = "stat", .descr = "Statistic identifier.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_STAT_ALARM_RAISED_ID_STAT, .offset = offsetof(bcmolt_gpon_onu_stat_alarm_raised_data, stat), .type = &type_descr_bcmolt_gpon_onu_stat_id };
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_stat_alarm_raised_prop_array[] = { &prop_descr_gpon_onu_stat_alarm_raised_stat };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_stat_alarm_raised_data_fields[] = { { .name = "stat", .descr = "Statistic identifier.", .offset = offsetof(bcmolt_gpon_onu_stat_alarm_raised_data, stat), .type = &type_descr_bcmolt_gpon_onu_stat_id } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_stat_alarm_raised_data = { .name = "bcmolt_gpon_onu_stat_alarm_raised_data", .descr = "Sent when a configured statistic alarm condition has been met.", .size = sizeof(bcmolt_gpon_onu_stat_alarm_raised_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_stat_alarm_raised_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_stat_alarm_raised_data_fields } } };
+
+/* Group: gpon_onu - stat_alarm_cleared */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_stat_alarm_cleared_stat = { .name = "stat", .descr = "Statistic identifier.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_STAT_ALARM_CLEARED_ID_STAT, .offset = offsetof(bcmolt_gpon_onu_stat_alarm_cleared_data, stat), .type = &type_descr_bcmolt_gpon_onu_stat_id };
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_stat_alarm_cleared_prop_array[] = { &prop_descr_gpon_onu_stat_alarm_cleared_stat };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_stat_alarm_cleared_data_fields[] = { { .name = "stat", .descr = "Statistic identifier.", .offset = offsetof(bcmolt_gpon_onu_stat_alarm_cleared_data, stat), .type = &type_descr_bcmolt_gpon_onu_stat_id } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_stat_alarm_cleared_data = { .name = "bcmolt_gpon_onu_stat_alarm_cleared_data", .descr = "Sent when a configured statistic alarm condition is no longer met.", .size = sizeof(bcmolt_gpon_onu_stat_alarm_cleared_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_stat_alarm_cleared_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_stat_alarm_cleared_data_fields } } };
+
+/* Group: gpon_onu - auto_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_auto_cfg_ber_interval_configuration_completed = { .name = "ber_interval_configuration_completed", .descr = "If true, indications of type \"ber_interval_configuration_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_AUTO_CFG_ID_BER_INTERVAL_CONFIGURATION_COMPLETED, .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, ber_interval_configuration_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_auto_cfg_dfi = { .name = "dfi", .descr = "If true, indications of type \"dfi\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_AUTO_CFG_ID_DFI, .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, dfi), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_auto_cfg_dgi = { .name = "dgi", .descr = "If true, indications of type \"dgi\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_AUTO_CFG_ID_DGI, .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, dgi), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_auto_cfg_dowi = { .name = "dowi", .descr = "If true, indications of type \"dowi\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_AUTO_CFG_ID_DOWI, .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, dowi), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_auto_cfg_err = { .name = "err", .descr = "If true, indications of type \"err\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_AUTO_CFG_ID_ERR, .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, err), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_auto_cfg_invalid_dbru_report = { .name = "invalid_dbru_report", .descr = "If true, indications of type \"invalid_dbru_report\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_AUTO_CFG_ID_INVALID_DBRU_REPORT, .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, invalid_dbru_report), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_auto_cfg_key_exchange_completed = { .name = "key_exchange_completed", .descr = "If true, indications of type \"key_exchange_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_COMPLETED, .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, key_exchange_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_auto_cfg_key_exchange_cycle_skipped = { .name = "key_exchange_cycle_skipped", .descr = "If true, indications of type \"key_exchange_cycle_skipped\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_CYCLE_SKIPPED, .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, key_exchange_cycle_skipped), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_auto_cfg_key_exchange_decrypt_required = { .name = "key_exchange_decrypt_required", .descr = "If true, indications of type \"key_exchange_decrypt_required\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_DECRYPT_REQUIRED, .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, key_exchange_decrypt_required), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_auto_cfg_key_exchange_key_mismatch = { .name = "key_exchange_key_mismatch", .descr = "If true, indications of type \"key_exchange_key_mismatch\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_KEY_MISMATCH, .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, key_exchange_key_mismatch), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_auto_cfg_key_exchange_key_request_timeout = { .name = "key_exchange_key_request_timeout", .descr = "If true, indications of type \"key_exchange_key_request_timeout\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_KEY_REQUEST_TIMEOUT, .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, key_exchange_key_request_timeout), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_auto_cfg_key_exchange_unconsecutive_index = { .name = "key_exchange_unconsecutive_index", .descr = "If true, indications of type \"key_exchange_unconsecutive_index\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_UNCONSECUTIVE_INDEX, .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, key_exchange_unconsecutive_index), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_auto_cfg_loai = { .name = "loai", .descr = "If true, indications of type \"loai\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_AUTO_CFG_ID_LOAI, .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, loai), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_auto_cfg_loki = { .name = "loki", .descr = "If true, indications of type \"loki\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_AUTO_CFG_ID_LOKI, .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, loki), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_auto_cfg_memi = { .name = "memi", .descr = "If true, indications of type \"memi\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_AUTO_CFG_ID_MEMI, .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, memi), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_auto_cfg_omci_port_id_configuration_completed = { .name = "omci_port_id_configuration_completed", .descr = "If true, indications of type \"omci_port_id_configuration_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_AUTO_CFG_ID_OMCI_PORT_ID_CONFIGURATION_COMPLETED, .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, omci_port_id_configuration_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_auto_cfg_onu_activation_completed = { .name = "onu_activation_completed", .descr = "If true, indications of type \"onu_activation_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_ACTIVATION_COMPLETED, .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, onu_activation_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_auto_cfg_onu_activation_standby_completed = { .name = "onu_activation_standby_completed", .descr = "If true, indications of type \"onu_activation_standby_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_ACTIVATION_STANDBY_COMPLETED, .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, onu_activation_standby_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_auto_cfg_onu_alarm = { .name = "onu_alarm", .descr = "If true, indications of type \"onu_alarm\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_ALARM, .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, onu_alarm), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_auto_cfg_onu_deactivation_completed = { .name = "onu_deactivation_completed", .descr = "If true, indications of type \"onu_deactivation_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_DEACTIVATION_COMPLETED, .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, onu_deactivation_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_auto_cfg_onu_disable_completed = { .name = "onu_disable_completed", .descr = "If true, indications of type \"onu_disable_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_DISABLE_COMPLETED, .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, onu_disable_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_auto_cfg_onu_enable_completed = { .name = "onu_enable_completed", .descr = "If true, indications of type \"onu_enable_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_AUTO_CFG_ID_ONU_ENABLE_COMPLETED, .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, onu_enable_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_auto_cfg_optical_reflection = { .name = "optical_reflection", .descr = "If true, indications of type \"optical_reflection\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_AUTO_CFG_ID_OPTICAL_REFLECTION, .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, optical_reflection), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_auto_cfg_password_authentication_completed = { .name = "password_authentication_completed", .descr = "If true, indications of type \"password_authentication_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_AUTO_CFG_ID_PASSWORD_AUTHENTICATION_COMPLETED, .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, password_authentication_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_auto_cfg_pee = { .name = "pee", .descr = "If true, indications of type \"pee\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_AUTO_CFG_ID_PEE, .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, pee), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_auto_cfg_possible_drift = { .name = "possible_drift", .descr = "If true, indications of type \"possible_drift\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_AUTO_CFG_ID_POSSIBLE_DRIFT, .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, possible_drift), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_auto_cfg_power_management_state_change = { .name = "power_management_state_change", .descr = "If true, indications of type \"power_management_state_change\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_AUTO_CFG_ID_POWER_MANAGEMENT_STATE_CHANGE, .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, power_management_state_change), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_auto_cfg_pst = { .name = "pst", .descr = "If true, indications of type \"pst\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_AUTO_CFG_ID_PST, .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, pst), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_auto_cfg_ranging_completed = { .name = "ranging_completed", .descr = "If true, indications of type \"ranging_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_AUTO_CFG_ID_RANGING_COMPLETED, .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, ranging_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_auto_cfg_rei = { .name = "rei", .descr = "If true, indications of type \"rei\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_AUTO_CFG_ID_REI, .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, rei), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_auto_cfg_rssi_measurement_completed = { .name = "rssi_measurement_completed", .descr = "If true, indications of type \"rssi_measurement_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_AUTO_CFG_ID_RSSI_MEASUREMENT_COMPLETED, .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, rssi_measurement_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_auto_cfg_sdi = { .name = "sdi", .descr = "If true, indications of type \"sdi\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_AUTO_CFG_ID_SDI, .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, sdi), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_auto_cfg_sfi = { .name = "sfi", .descr = "If true, indications of type \"sfi\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_AUTO_CFG_ID_SFI, .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, sfi), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_auto_cfg_stat_alarm_cleared = { .name = "stat_alarm_cleared", .descr = "If true, indications of type \"stat_alarm_cleared\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_AUTO_CFG_ID_STAT_ALARM_CLEARED, .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, stat_alarm_cleared), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_auto_cfg_stat_alarm_raised = { .name = "stat_alarm_raised", .descr = "If true, indications of type \"stat_alarm_raised\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_AUTO_CFG_ID_STAT_ALARM_RAISED, .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, stat_alarm_raised), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_auto_cfg_sufi = { .name = "sufi", .descr = "If true, indications of type \"sufi\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_AUTO_CFG_ID_SUFI, .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, sufi), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_onu_auto_cfg_tiwi = { .name = "tiwi", .descr = "If true, indications of type \"tiwi\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_ONU_AUTO_CFG_ID_TIWI, .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, tiwi), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr * BCM_DESCR gpon_onu_auto_cfg_prop_array[] = { &prop_descr_gpon_onu_auto_cfg_ber_interval_configuration_completed, &prop_descr_gpon_onu_auto_cfg_dfi, &prop_descr_gpon_onu_auto_cfg_dgi, &prop_descr_gpon_onu_auto_cfg_dowi, &prop_descr_gpon_onu_auto_cfg_err, &prop_descr_gpon_onu_auto_cfg_invalid_dbru_report, &prop_descr_gpon_onu_auto_cfg_key_exchange_completed, &prop_descr_gpon_onu_auto_cfg_key_exchange_cycle_skipped, &prop_descr_gpon_onu_auto_cfg_key_exchange_decrypt_required, &prop_descr_gpon_onu_auto_cfg_key_exchange_key_mismatch, &prop_descr_gpon_onu_auto_cfg_key_exchange_key_request_timeout, &prop_descr_gpon_onu_auto_cfg_key_exchange_unconsecutive_index, &prop_descr_gpon_onu_auto_cfg_loai, &prop_descr_gpon_onu_auto_cfg_loki, &prop_descr_gpon_onu_auto_cfg_memi, &prop_descr_gpon_onu_auto_cfg_omci_port_id_configuration_completed, &prop_descr_gpon_onu_auto_cfg_onu_activation_completed, &prop_descr_gpon_onu_auto_cfg_onu_activation_standby_completed, &prop_descr_gpon_onu_auto_cfg_onu_alarm, &prop_descr_gpon_onu_auto_cfg_onu_deactivation_completed, &prop_descr_gpon_onu_auto_cfg_onu_disable_completed, &prop_descr_gpon_onu_auto_cfg_onu_enable_completed, &prop_descr_gpon_onu_auto_cfg_optical_reflection, &prop_descr_gpon_onu_auto_cfg_password_authentication_completed, &prop_descr_gpon_onu_auto_cfg_pee, &prop_descr_gpon_onu_auto_cfg_possible_drift, &prop_descr_gpon_onu_auto_cfg_power_management_state_change, &prop_descr_gpon_onu_auto_cfg_pst, &prop_descr_gpon_onu_auto_cfg_ranging_completed, &prop_descr_gpon_onu_auto_cfg_rei, &prop_descr_gpon_onu_auto_cfg_rssi_measurement_completed, &prop_descr_gpon_onu_auto_cfg_sdi, &prop_descr_gpon_onu_auto_cfg_sfi, &prop_descr_gpon_onu_auto_cfg_stat_alarm_cleared, &prop_descr_gpon_onu_auto_cfg_stat_alarm_raised, &prop_descr_gpon_onu_auto_cfg_sufi, &prop_descr_gpon_onu_auto_cfg_tiwi };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_onu_auto_cfg_data_fields[] = { { .name = "ber_interval_configuration_completed", .descr = "If true, indications of type \"ber_interval_configuration_completed\" will be generated.", .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, ber_interval_configuration_completed), .type = &type_descr_bcmos_bool }, { .name = "dfi", .descr = "If true, indications of type \"dfi\" will be generated.", .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, dfi), .type = &type_descr_bcmos_bool }, { .name = "dgi", .descr = "If true, indications of type \"dgi\" will be generated.", .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, dgi), .type = &type_descr_bcmos_bool }, { .name = "dowi", .descr = "If true, indications of type \"dowi\" will be generated.", .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, dowi), .type = &type_descr_bcmos_bool }, { .name = "err", .descr = "If true, indications of type \"err\" will be generated.", .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, err), .type = &type_descr_bcmos_bool }, { .name = "invalid_dbru_report", .descr = "If true, indications of type \"invalid_dbru_report\" will be generated.", .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, invalid_dbru_report), .type = &type_descr_bcmos_bool }, { .name = "key_exchange_completed", .descr = "If true, indications of type \"key_exchange_completed\" will be generated.", .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, key_exchange_completed), .type = &type_descr_bcmos_bool }, { .name = "key_exchange_cycle_skipped", .descr = "If true, indications of type \"key_exchange_cycle_skipped\" will be generated.", .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, key_exchange_cycle_skipped), .type = &type_descr_bcmos_bool }, { .name = "key_exchange_decrypt_required", .descr = "If true, indications of type \"key_exchange_decrypt_required\" will be generated.", .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, key_exchange_decrypt_required), .type = &type_descr_bcmos_bool }, { .name = "key_exchange_key_mismatch", .descr = "If true, indications of type \"key_exchange_key_mismatch\" will be generated.", .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, key_exchange_key_mismatch), .type = &type_descr_bcmos_bool }, { .name = "key_exchange_key_request_timeout", .descr = "If true, indications of type \"key_exchange_key_request_timeout\" will be generated.", .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, key_exchange_key_request_timeout), .type = &type_descr_bcmos_bool }, { .name = "key_exchange_unconsecutive_index", .descr = "If true, indications of type \"key_exchange_unconsecutive_index\" will be generated.", .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, key_exchange_unconsecutive_index), .type = &type_descr_bcmos_bool }, { .name = "loai", .descr = "If true, indications of type \"loai\" will be generated.", .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, loai), .type = &type_descr_bcmos_bool }, { .name = "loki", .descr = "If true, indications of type \"loki\" will be generated.", .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, loki), .type = &type_descr_bcmos_bool }, { .name = "memi", .descr = "If true, indications of type \"memi\" will be generated.", .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, memi), .type = &type_descr_bcmos_bool }, { .name = "omci_port_id_configuration_completed", .descr = "If true, indications of type \"omci_port_id_configuration_completed\" will be generated.", .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, omci_port_id_configuration_completed), .type = &type_descr_bcmos_bool }, { .name = "onu_activation_completed", .descr = "If true, indications of type \"onu_activation_completed\" will be generated.", .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, onu_activation_completed), .type = &type_descr_bcmos_bool }, { .name = "onu_activation_standby_completed", .descr = "If true, indications of type \"onu_activation_standby_completed\" will be generated.", .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, onu_activation_standby_completed), .type = &type_descr_bcmos_bool }, { .name = "onu_alarm", .descr = "If true, indications of type \"onu_alarm\" will be generated.", .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, onu_alarm), .type = &type_descr_bcmos_bool }, { .name = "onu_deactivation_completed", .descr = "If true, indications of type \"onu_deactivation_completed\" will be generated.", .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, onu_deactivation_completed), .type = &type_descr_bcmos_bool }, { .name = "onu_disable_completed", .descr = "If true, indications of type \"onu_disable_completed\" will be generated.", .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, onu_disable_completed), .type = &type_descr_bcmos_bool }, { .name = "onu_enable_completed", .descr = "If true, indications of type \"onu_enable_completed\" will be generated.", .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, onu_enable_completed), .type = &type_descr_bcmos_bool }, { .name = "optical_reflection", .descr = "If true, indications of type \"optical_reflection\" will be generated.", .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, optical_reflection), .type = &type_descr_bcmos_bool }, { .name = "password_authentication_completed", .descr = "If true, indications of type \"password_authentication_completed\" will be generated.", .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, password_authentication_completed), .type = &type_descr_bcmos_bool }, { .name = "pee", .descr = "If true, indications of type \"pee\" will be generated.", .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, pee), .type = &type_descr_bcmos_bool }, { .name = "possible_drift", .descr = "If true, indications of type \"possible_drift\" will be generated.", .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, possible_drift), .type = &type_descr_bcmos_bool }, { .name = "power_management_state_change", .descr = "If true, indications of type \"power_management_state_change\" will be generated.", .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, power_management_state_change), .type = &type_descr_bcmos_bool }, { .name = "pst", .descr = "If true, indications of type \"pst\" will be generated.", .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, pst), .type = &type_descr_bcmos_bool }, { .name = "ranging_completed", .descr = "If true, indications of type \"ranging_completed\" will be generated.", .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, ranging_completed), .type = &type_descr_bcmos_bool }, { .name = "rei", .descr = "If true, indications of type \"rei\" will be generated.", .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, rei), .type = &type_descr_bcmos_bool }, { .name = "rssi_measurement_completed", .descr = "If true, indications of type \"rssi_measurement_completed\" will be generated.", .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, rssi_measurement_completed), .type = &type_descr_bcmos_bool }, { .name = "sdi", .descr = "If true, indications of type \"sdi\" will be generated.", .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, sdi), .type = &type_descr_bcmos_bool }, { .name = "sfi", .descr = "If true, indications of type \"sfi\" will be generated.", .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, sfi), .type = &type_descr_bcmos_bool }, { .name = "stat_alarm_cleared", .descr = "If true, indications of type \"stat_alarm_cleared\" will be generated.", .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, stat_alarm_cleared), .type = &type_descr_bcmos_bool }, { .name = "stat_alarm_raised", .descr = "If true, indications of type \"stat_alarm_raised\" will be generated.", .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, stat_alarm_raised), .type = &type_descr_bcmos_bool }, { .name = "sufi", .descr = "If true, indications of type \"sufi\" will be generated.", .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, sufi), .type = &type_descr_bcmos_bool }, { .name = "tiwi", .descr = "If true, indications of type \"tiwi\" will be generated.", .offset = offsetof(bcmolt_gpon_onu_auto_cfg_data, tiwi), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_onu_auto_cfg_data = { .name = "bcmolt_gpon_onu_auto_cfg_data", .descr = "Indication Configuration", .size = sizeof(bcmolt_gpon_onu_auto_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_onu_auto_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_onu_auto_cfg_data_fields } } };
+
+/* ==== Object: gpon_trx ==== */
+
+/* Group: gpon_trx - key */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_trx_key_pon_ni = { .name = "pon_ni", .descr = "PON network interface", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_TRX_KEY_ID_PON_NI, .offset = offsetof(bcmolt_gpon_trx_key, pon_ni), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr * BCM_DESCR gpon_trx_key_prop_array[] = { &prop_descr_gpon_trx_key_pon_ni };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_trx_key_fields[] = { { .name = "pon_ni", .descr = "PON network interface", .offset = offsetof(bcmolt_gpon_trx_key, pon_ni), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_trx_key = { .name = "bcmolt_gpon_trx_key", .descr = "key", .size = sizeof(bcmolt_gpon_trx_key), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_trx_key_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_trx_key_fields } } };
+
+/* Group: gpon_trx - cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_trx_cfg_transceiver_type = { .name = "transceiver_type", .descr = "transceiver type", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_TRX_CFG_ID_TRANSCEIVER_TYPE, .offset = offsetof(bcmolt_gpon_trx_cfg_data, transceiver_type), .type = &type_descr_bcmolt_trx_type };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_trx_cfg_la_configuration = { .name = "la_configuration", .descr = "LA configuration", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_TRX_CFG_ID_LA_CONFIGURATION, .offset = offsetof(bcmolt_gpon_trx_cfg_data, la_configuration), .type = &type_descr_bcmolt_la_resync_pattern_configuration };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_trx_cfg_bcdr = { .name = "bcdr", .descr = "BCDR", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_TRX_CFG_ID_BCDR, .offset = offsetof(bcmolt_gpon_trx_cfg_data, bcdr), .type = &type_descr_bcmolt_bcdr_resync_pattern_configuration };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_trx_cfg_la_ranging_after_no_ed_resync = { .name = "la_ranging_after_no_ed_resync", .descr = "LA ranging after no ed resync ", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_TRX_CFG_ID_LA_RANGING_AFTER_NO_ED_RESYNC, .offset = offsetof(bcmolt_gpon_trx_cfg_data, la_ranging_after_no_ed_resync), .type = &type_descr_bcmolt_resync_control };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_trx_cfg_bcdr_ranging_after_no_ed_resync = { .name = "bcdr_ranging_after_no_ed_resync", .descr = "used in ranging mode after no ed found", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_TRX_CFG_ID_BCDR_RANGING_AFTER_NO_ED_RESYNC, .offset = offsetof(bcmolt_gpon_trx_cfg_data, bcdr_ranging_after_no_ed_resync), .type = &type_descr_bcmolt_resync_control };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_trx_cfg_la_ranging_after_ed_resync = { .name = "la_ranging_after_ed_resync", .descr = "LA ranging after ed resync ", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_TRX_CFG_ID_LA_RANGING_AFTER_ED_RESYNC, .offset = offsetof(bcmolt_gpon_trx_cfg_data, la_ranging_after_ed_resync), .type = &type_descr_bcmolt_resync_control };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_trx_cfg_bcdr_ranging_after_ed_resync = { .name = "bcdr_ranging_after_ed_resync", .descr = "BCDR ranging after ed resync", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_TRX_CFG_ID_BCDR_RANGING_AFTER_ED_RESYNC, .offset = offsetof(bcmolt_gpon_trx_cfg_data, bcdr_ranging_after_ed_resync), .type = &type_descr_bcmolt_resync_control };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_trx_cfg_la_resync_polarity = { .name = "la_resync_polarity", .descr = "la resync polarity", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_TRX_CFG_ID_LA_RESYNC_POLARITY, .offset = offsetof(bcmolt_gpon_trx_cfg_data, la_resync_polarity), .type = &type_descr_bcmolt_polarity };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_trx_cfg_bcdr_resync_polarity = { .name = "bcdr_resync_polarity", .descr = "BCDR resync polarity", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_TRX_CFG_ID_BCDR_RESYNC_POLARITY, .offset = offsetof(bcmolt_gpon_trx_cfg_data, bcdr_resync_polarity), .type = &type_descr_bcmolt_polarity };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_trx_cfg_bcdr_ranging_resync_conditions = { .name = "bcdr_ranging_resync_conditions", .descr = "bcdr ranging resync conditions", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_TRX_CFG_ID_BCDR_RANGING_RESYNC_CONDITIONS, .offset = offsetof(bcmolt_gpon_trx_cfg_data, bcdr_ranging_resync_conditions), .type = &type_descr_bcmolt_ranging_resync_conditions };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_trx_cfg_la_ranging_resync_conditions = { .name = "la_ranging_resync_conditions", .descr = "la ranging resync conditions", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_TRX_CFG_ID_LA_RANGING_RESYNC_CONDITIONS, .offset = offsetof(bcmolt_gpon_trx_cfg_data, la_ranging_resync_conditions), .type = &type_descr_bcmolt_ranging_resync_conditions };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_trx_cfg_rx_configuration = { .name = "rx_configuration", .descr = "RX configuration", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_TRX_CFG_ID_RX_CONFIGURATION, .offset = offsetof(bcmolt_gpon_trx_cfg_data, rx_configuration), .type = &type_descr_bcmolt_trx_rx_configuration };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_trx_cfg_ranging_control_stages_configuration = { .name = "ranging_control_stages_configuration", .descr = "ranging control stages configuration", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_TRX_CFG_ID_RANGING_CONTROL_STAGES_CONFIGURATION, .offset = offsetof(bcmolt_gpon_trx_cfg_data, ranging_control_stages_configuration), .type = &type_descr_bcmolt_ranging_control_configuration };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_trx_cfg_energy_detect = { .name = "energy_detect", .descr = "Energy Detect", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_TRX_CFG_ID_ENERGY_DETECT, .offset = offsetof(bcmolt_gpon_trx_cfg_data, energy_detect), .type = &type_descr_bcmolt_trx_energy_detect };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_trx_cfg_end_of_burst_data_pattern = { .name = "end_of_burst_data_pattern", .descr = "end of burst data pattern ", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_TRX_CFG_ID_END_OF_BURST_DATA_PATTERN, .offset = offsetof(bcmolt_gpon_trx_cfg_data, end_of_burst_data_pattern), .type = &type_descr_bcmolt_resync_control };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_trx_cfg_end_of_burst_ranging_pattern = { .name = "end_of_burst_ranging_pattern", .descr = "end of burst ranging pattern", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_TRX_CFG_ID_END_OF_BURST_RANGING_PATTERN, .offset = offsetof(bcmolt_gpon_trx_cfg_data, end_of_burst_ranging_pattern), .type = &type_descr_bcmolt_resync_control };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_trx_cfg_preamble = { .name = "preamble", .descr = "Preamble", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_TRX_CFG_ID_PREAMBLE, .offset = offsetof(bcmolt_gpon_trx_cfg_data, preamble), .type = &type_descr_bcmolt_trx_preamble };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_trx_cfg_delimiter = { .name = "delimiter", .descr = "Delimiter", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_TRX_CFG_ID_DELIMITER, .offset = offsetof(bcmolt_gpon_trx_cfg_data, delimiter), .type = &type_descr_bcmolt_trx_delimiter };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_trx_cfg_guard_bits = { .name = "guard_bits", .descr = "Guard bits", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_TRX_CFG_ID_GUARD_BITS, .offset = offsetof(bcmolt_gpon_trx_cfg_data, guard_bits), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_trx_cfg_serdes_configuration = { .name = "serdes_configuration", .descr = "serdes configuration", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_TRX_CFG_ID_SERDES_CONFIGURATION, .offset = offsetof(bcmolt_gpon_trx_cfg_data, serdes_configuration), .type = &type_descr_bcmolt_serdes_configuration };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_trx_cfg_plo_ranging = { .name = "plo_ranging", .descr = "PLO for ranging", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_GPON_TRX_CFG_ID_PLO_RANGING, .offset = offsetof(bcmolt_gpon_trx_cfg_data, plo_ranging), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_trx_cfg_plo_data = { .name = "plo_data", .descr = "PLO for data", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_GPON_TRX_CFG_ID_PLO_DATA, .offset = offsetof(bcmolt_gpon_trx_cfg_data, plo_data), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_trx_cfg_rssi_normal_config = { .name = "rssi_normal_config", .descr = "rssi normal config", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_TRX_CFG_ID_RSSI_NORMAL_CONFIG, .offset = offsetof(bcmolt_gpon_trx_cfg_data, rssi_normal_config), .type = &type_descr_bcmolt_gpon_rssi_general_configuration };
+static bcmcli_prop_descr BCM_DESCR prop_descr_gpon_trx_cfg_ranging_rssi_resync_control = { .name = "ranging_rssi_resync_control", .descr = "ranging rssi resync control", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_GPON_TRX_CFG_ID_RANGING_RSSI_RESYNC_CONTROL, .offset = offsetof(bcmolt_gpon_trx_cfg_data, ranging_rssi_resync_control), .type = &type_descr_bcmolt_ranging_rssi_control };
+static bcmcli_prop_descr * BCM_DESCR gpon_trx_cfg_prop_array[] = { &prop_descr_gpon_trx_cfg_transceiver_type, &prop_descr_gpon_trx_cfg_la_configuration, &prop_descr_gpon_trx_cfg_bcdr, &prop_descr_gpon_trx_cfg_la_ranging_after_no_ed_resync, &prop_descr_gpon_trx_cfg_bcdr_ranging_after_no_ed_resync, &prop_descr_gpon_trx_cfg_la_ranging_after_ed_resync, &prop_descr_gpon_trx_cfg_bcdr_ranging_after_ed_resync, &prop_descr_gpon_trx_cfg_la_resync_polarity, &prop_descr_gpon_trx_cfg_bcdr_resync_polarity, &prop_descr_gpon_trx_cfg_bcdr_ranging_resync_conditions, &prop_descr_gpon_trx_cfg_la_ranging_resync_conditions, &prop_descr_gpon_trx_cfg_rx_configuration, &prop_descr_gpon_trx_cfg_ranging_control_stages_configuration, &prop_descr_gpon_trx_cfg_energy_detect, &prop_descr_gpon_trx_cfg_end_of_burst_data_pattern, &prop_descr_gpon_trx_cfg_end_of_burst_ranging_pattern, &prop_descr_gpon_trx_cfg_preamble, &prop_descr_gpon_trx_cfg_delimiter, &prop_descr_gpon_trx_cfg_guard_bits, &prop_descr_gpon_trx_cfg_serdes_configuration, &prop_descr_gpon_trx_cfg_plo_ranging, &prop_descr_gpon_trx_cfg_plo_data, &prop_descr_gpon_trx_cfg_rssi_normal_config, &prop_descr_gpon_trx_cfg_ranging_rssi_resync_control };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_gpon_trx_cfg_data_fields[] = { { .name = "transceiver_type", .descr = "transceiver type", .offset = offsetof(bcmolt_gpon_trx_cfg_data, transceiver_type), .type = &type_descr_bcmolt_trx_type }, { .name = "la_configuration", .descr = "LA configuration", .offset = offsetof(bcmolt_gpon_trx_cfg_data, la_configuration), .type = &type_descr_bcmolt_la_resync_pattern_configuration }, { .name = "bcdr", .descr = "BCDR", .offset = offsetof(bcmolt_gpon_trx_cfg_data, bcdr), .type = &type_descr_bcmolt_bcdr_resync_pattern_configuration }, { .name = "la_ranging_after_no_ed_resync", .descr = "LA ranging after no ed resync ", .offset = offsetof(bcmolt_gpon_trx_cfg_data, la_ranging_after_no_ed_resync), .type = &type_descr_bcmolt_resync_control }, { .name = "bcdr_ranging_after_no_ed_resync", .descr = "used in ranging mode after no ed found", .offset = offsetof(bcmolt_gpon_trx_cfg_data, bcdr_ranging_after_no_ed_resync), .type = &type_descr_bcmolt_resync_control }, { .name = "la_ranging_after_ed_resync", .descr = "LA ranging after ed resync ", .offset = offsetof(bcmolt_gpon_trx_cfg_data, la_ranging_after_ed_resync), .type = &type_descr_bcmolt_resync_control }, { .name = "bcdr_ranging_after_ed_resync", .descr = "BCDR ranging after ed resync", .offset = offsetof(bcmolt_gpon_trx_cfg_data, bcdr_ranging_after_ed_resync), .type = &type_descr_bcmolt_resync_control }, { .name = "la_resync_polarity", .descr = "la resync polarity", .offset = offsetof(bcmolt_gpon_trx_cfg_data, la_resync_polarity), .type = &type_descr_bcmolt_polarity }, { .name = "bcdr_resync_polarity", .descr = "BCDR resync polarity", .offset = offsetof(bcmolt_gpon_trx_cfg_data, bcdr_resync_polarity), .type = &type_descr_bcmolt_polarity }, { .name = "bcdr_ranging_resync_conditions", .descr = "bcdr ranging resync conditions", .offset = offsetof(bcmolt_gpon_trx_cfg_data, bcdr_ranging_resync_conditions), .type = &type_descr_bcmolt_ranging_resync_conditions }, { .name = "la_ranging_resync_conditions", .descr = "la ranging resync conditions", .offset = offsetof(bcmolt_gpon_trx_cfg_data, la_ranging_resync_conditions), .type = &type_descr_bcmolt_ranging_resync_conditions }, { .name = "rx_configuration", .descr = "RX configuration", .offset = offsetof(bcmolt_gpon_trx_cfg_data, rx_configuration), .type = &type_descr_bcmolt_trx_rx_configuration }, { .name = "ranging_control_stages_configuration", .descr = "ranging control stages configuration", .offset = offsetof(bcmolt_gpon_trx_cfg_data, ranging_control_stages_configuration), .type = &type_descr_bcmolt_ranging_control_configuration }, { .name = "energy_detect", .descr = "Energy Detect", .offset = offsetof(bcmolt_gpon_trx_cfg_data, energy_detect), .type = &type_descr_bcmolt_trx_energy_detect }, { .name = "end_of_burst_data_pattern", .descr = "end of burst data pattern ", .offset = offsetof(bcmolt_gpon_trx_cfg_data, end_of_burst_data_pattern), .type = &type_descr_bcmolt_resync_control }, { .name = "end_of_burst_ranging_pattern", .descr = "end of burst ranging pattern", .offset = offsetof(bcmolt_gpon_trx_cfg_data, end_of_burst_ranging_pattern), .type = &type_descr_bcmolt_resync_control }, { .name = "preamble", .descr = "Preamble", .offset = offsetof(bcmolt_gpon_trx_cfg_data, preamble), .type = &type_descr_bcmolt_trx_preamble }, { .name = "delimiter", .descr = "Delimiter", .offset = offsetof(bcmolt_gpon_trx_cfg_data, delimiter), .type = &type_descr_bcmolt_trx_delimiter }, { .name = "guard_bits", .descr = "Guard bits", .offset = offsetof(bcmolt_gpon_trx_cfg_data, guard_bits), .type = &type_descr_uint32_t }, { .name = "serdes_configuration", .descr = "serdes configuration", .offset = offsetof(bcmolt_gpon_trx_cfg_data, serdes_configuration), .type = &type_descr_bcmolt_serdes_configuration }, { .name = "plo_ranging", .descr = "PLO for ranging", .offset = offsetof(bcmolt_gpon_trx_cfg_data, plo_ranging), .type = &type_descr_uint32_t }, { .name = "plo_data", .descr = "PLO for data", .offset = offsetof(bcmolt_gpon_trx_cfg_data, plo_data), .type = &type_descr_uint32_t }, { .name = "rssi_normal_config", .descr = "rssi normal config", .offset = offsetof(bcmolt_gpon_trx_cfg_data, rssi_normal_config), .type = &type_descr_bcmolt_gpon_rssi_general_configuration }, { .name = "ranging_rssi_resync_control", .descr = "ranging rssi resync control", .offset = offsetof(bcmolt_gpon_trx_cfg_data, ranging_rssi_resync_control), .type = &type_descr_bcmolt_ranging_rssi_control } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_gpon_trx_cfg_data = { .name = "bcmolt_gpon_trx_cfg_data", .descr = "cfg", .size = sizeof(bcmolt_gpon_trx_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_gpon_trx_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_gpon_trx_cfg_data_fields } } };
+
+/* ==== Object: log_entry ==== */
+
+/* Group: log_entry - key */
+static bcmcli_prop_descr BCM_DESCR prop_descr_log_entry_key_log_id = { .name = "log_id", .descr = "log id", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_LOG_ENTRY_KEY_ID_LOG_ID, .offset = offsetof(bcmolt_log_entry_key, log_id), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_log_entry_key_reserved = { .name = "reserved", .descr = "reserved", .access = 0, .property = BCMOLT_LOG_ENTRY_KEY_ID_RESERVED, .offset = offsetof(bcmolt_log_entry_key, reserved), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_log_entry_key_name = { .name = "name", .descr = "name", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_LOG_ENTRY_KEY_ID_NAME, .offset = offsetof(bcmolt_log_entry_key, name), .type = &type_descr_bcmolt_str_100 };
+static bcmcli_prop_descr * BCM_DESCR log_entry_key_prop_array[] = { &prop_descr_log_entry_key_log_id, &prop_descr_log_entry_key_reserved, &prop_descr_log_entry_key_name };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_log_entry_key_fields[] = { { .name = "log_id", .descr = "log id", .offset = offsetof(bcmolt_log_entry_key, log_id), .type = &type_descr_uint32_t }, { .name = "reserved", .descr = "reserved", .offset = offsetof(bcmolt_log_entry_key, reserved), .type = &type_descr_uint8_t }, { .name = "name", .descr = "name", .offset = offsetof(bcmolt_log_entry_key, name), .type = &type_descr_bcmolt_str_100 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_log_entry_key = { .name = "bcmolt_log_entry_key", .descr = "key", .size = sizeof(bcmolt_log_entry_key), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_log_entry_key_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_log_entry_key_fields } } };
+
+/* Group: log_entry - cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_log_entry_cfg_default_log_level = { .name = "default_log_level", .descr = "default log level", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_LOG_ENTRY_CFG_ID_DEFAULT_LOG_LEVEL, .offset = offsetof(bcmolt_log_entry_cfg_data, default_log_level), .type = &type_descr_bcmolt_log_level };
+static bcmcli_prop_descr BCM_DESCR prop_descr_log_entry_cfg_default_log_type = { .name = "default_log_type", .descr = "default log type", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_LOG_ENTRY_CFG_ID_DEFAULT_LOG_TYPE, .offset = offsetof(bcmolt_log_entry_cfg_data, default_log_type), .type = &type_descr_bcmolt_log_type };
+static bcmcli_prop_descr BCM_DESCR prop_descr_log_entry_cfg_log_level_print = { .name = "log_level_print", .descr = "log level print", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_LOG_ENTRY_CFG_ID_LOG_LEVEL_PRINT, .offset = offsetof(bcmolt_log_entry_cfg_data, log_level_print), .type = &type_descr_bcmolt_log_level };
+static bcmcli_prop_descr BCM_DESCR prop_descr_log_entry_cfg_log_level_save = { .name = "log_level_save", .descr = "log level save", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_LOG_ENTRY_CFG_ID_LOG_LEVEL_SAVE, .offset = offsetof(bcmolt_log_entry_cfg_data, log_level_save), .type = &type_descr_bcmolt_log_level };
+static bcmcli_prop_descr BCM_DESCR prop_descr_log_entry_cfg_log_type = { .name = "log_type", .descr = "log type", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_LOG_ENTRY_CFG_ID_LOG_TYPE, .offset = offsetof(bcmolt_log_entry_cfg_data, log_type), .type = &type_descr_bcmolt_log_type };
+static bcmcli_prop_descr BCM_DESCR prop_descr_log_entry_cfg_log_style = { .name = "log_style", .descr = "log_style", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_LOG_ENTRY_CFG_ID_LOG_STYLE, .offset = offsetof(bcmolt_log_entry_cfg_data, log_style), .type = &type_descr_bcmolt_log_style };
+static bcmcli_prop_descr BCM_DESCR prop_descr_log_entry_cfg_log_name = { .name = "log_name", .descr = "log name", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_LOG_ENTRY_CFG_ID_LOG_NAME, .offset = offsetof(bcmolt_log_entry_cfg_data, log_name), .type = &type_descr_bcmolt_str_100 };
+static bcmcli_prop_descr * BCM_DESCR log_entry_cfg_prop_array[] = { &prop_descr_log_entry_cfg_default_log_level, &prop_descr_log_entry_cfg_default_log_type, &prop_descr_log_entry_cfg_log_level_print, &prop_descr_log_entry_cfg_log_level_save, &prop_descr_log_entry_cfg_log_type, &prop_descr_log_entry_cfg_log_style, &prop_descr_log_entry_cfg_log_name };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_log_entry_cfg_data_fields[] = { { .name = "default_log_level", .descr = "default log level", .offset = offsetof(bcmolt_log_entry_cfg_data, default_log_level), .type = &type_descr_bcmolt_log_level }, { .name = "default_log_type", .descr = "default log type", .offset = offsetof(bcmolt_log_entry_cfg_data, default_log_type), .type = &type_descr_bcmolt_log_type }, { .name = "log_level_print", .descr = "log level print", .offset = offsetof(bcmolt_log_entry_cfg_data, log_level_print), .type = &type_descr_bcmolt_log_level }, { .name = "log_level_save", .descr = "log level save", .offset = offsetof(bcmolt_log_entry_cfg_data, log_level_save), .type = &type_descr_bcmolt_log_level }, { .name = "log_type", .descr = "log type", .offset = offsetof(bcmolt_log_entry_cfg_data, log_type), .type = &type_descr_bcmolt_log_type }, { .name = "log_style", .descr = "log_style", .offset = offsetof(bcmolt_log_entry_cfg_data, log_style), .type = &type_descr_bcmolt_log_style }, { .name = "log_name", .descr = "log name", .offset = offsetof(bcmolt_log_entry_cfg_data, log_name), .type = &type_descr_bcmolt_str_100 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_log_entry_cfg_data = { .name = "bcmolt_log_entry_cfg_data", .descr = "cfg", .size = sizeof(bcmolt_log_entry_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_log_entry_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_log_entry_cfg_data_fields } } };
+
+/* Group: log_entry - stat */
+static bcmcli_prop_descr BCM_DESCR prop_descr_log_entry_stat_msg_count = { .name = "msg_count", .descr = "msg count", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_LOG_ENTRY_STAT_ID_MSG_COUNT, .offset = offsetof(bcmolt_log_entry_stat_data, msg_count), .type = &type_descr_bcmolt_arr_u32_6 };
+static bcmcli_prop_descr BCM_DESCR prop_descr_log_entry_stat_lost_msg_count = { .name = "lost_msg_count", .descr = "lost msg count", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_LOG_ENTRY_STAT_ID_LOST_MSG_COUNT, .offset = offsetof(bcmolt_log_entry_stat_data, lost_msg_count), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr * BCM_DESCR log_entry_stat_prop_array[] = { &prop_descr_log_entry_stat_msg_count, &prop_descr_log_entry_stat_lost_msg_count };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_log_entry_stat_data_fields[] = { { .name = "msg_count", .descr = "msg count", .offset = offsetof(bcmolt_log_entry_stat_data, msg_count), .type = &type_descr_bcmolt_arr_u32_6 }, { .name = "lost_msg_count", .descr = "lost msg count", .offset = offsetof(bcmolt_log_entry_stat_data, lost_msg_count), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_log_entry_stat_data = { .name = "bcmolt_log_entry_stat_data", .descr = "stat", .size = sizeof(bcmolt_log_entry_stat_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_log_entry_stat_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_log_entry_stat_data_fields } } };
+
+/* Group: log_entry - stat_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_log_entry_stat_cfg_cfg = { .name = "cfg", .descr = "Statistic alarm configuration.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_LOG_ENTRY_STAT_CFG_ID_CFG, .offset = offsetof(bcmolt_log_entry_stat_cfg_data, cfg), .type = &type_descr_bcmolt_stat_alarm_config };
+static bcmcli_prop_descr * BCM_DESCR log_entry_stat_cfg_prop_array[] = { &prop_descr_log_entry_stat_cfg_cfg };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_log_entry_stat_cfg_data_fields[] = { { .name = "cfg", .descr = "Statistic alarm configuration.", .offset = offsetof(bcmolt_log_entry_stat_cfg_data, cfg), .type = &type_descr_bcmolt_stat_alarm_config } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_log_entry_stat_cfg_data = { .name = "bcmolt_log_entry_stat_cfg_data", .descr = "Statistic Configuration", .size = sizeof(bcmolt_log_entry_stat_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_log_entry_stat_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_log_entry_stat_cfg_data_fields } } };
+
+/* Group: log_entry - stat_alarm_raised */
+static bcmcli_prop_descr BCM_DESCR prop_descr_log_entry_stat_alarm_raised_stat = { .name = "stat", .descr = "Statistic identifier.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_LOG_ENTRY_STAT_ALARM_RAISED_ID_STAT, .offset = offsetof(bcmolt_log_entry_stat_alarm_raised_data, stat), .type = &type_descr_bcmolt_log_entry_stat_id };
+static bcmcli_prop_descr * BCM_DESCR log_entry_stat_alarm_raised_prop_array[] = { &prop_descr_log_entry_stat_alarm_raised_stat };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_log_entry_stat_alarm_raised_data_fields[] = { { .name = "stat", .descr = "Statistic identifier.", .offset = offsetof(bcmolt_log_entry_stat_alarm_raised_data, stat), .type = &type_descr_bcmolt_log_entry_stat_id } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_log_entry_stat_alarm_raised_data = { .name = "bcmolt_log_entry_stat_alarm_raised_data", .descr = "Sent when a configured statistic alarm condition has been met.", .size = sizeof(bcmolt_log_entry_stat_alarm_raised_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_log_entry_stat_alarm_raised_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_log_entry_stat_alarm_raised_data_fields } } };
+
+/* Group: log_entry - stat_alarm_cleared */
+static bcmcli_prop_descr BCM_DESCR prop_descr_log_entry_stat_alarm_cleared_stat = { .name = "stat", .descr = "Statistic identifier.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_LOG_ENTRY_STAT_ALARM_CLEARED_ID_STAT, .offset = offsetof(bcmolt_log_entry_stat_alarm_cleared_data, stat), .type = &type_descr_bcmolt_log_entry_stat_id };
+static bcmcli_prop_descr * BCM_DESCR log_entry_stat_alarm_cleared_prop_array[] = { &prop_descr_log_entry_stat_alarm_cleared_stat };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_log_entry_stat_alarm_cleared_data_fields[] = { { .name = "stat", .descr = "Statistic identifier.", .offset = offsetof(bcmolt_log_entry_stat_alarm_cleared_data, stat), .type = &type_descr_bcmolt_log_entry_stat_id } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_log_entry_stat_alarm_cleared_data = { .name = "bcmolt_log_entry_stat_alarm_cleared_data", .descr = "Sent when a configured statistic alarm condition is no longer met.", .size = sizeof(bcmolt_log_entry_stat_alarm_cleared_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_log_entry_stat_alarm_cleared_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_log_entry_stat_alarm_cleared_data_fields } } };
+
+/* Group: log_entry - auto_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_log_entry_auto_cfg_stat_alarm_cleared = { .name = "stat_alarm_cleared", .descr = "If true, indications of type \"stat_alarm_cleared\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_LOG_ENTRY_AUTO_CFG_ID_STAT_ALARM_CLEARED, .offset = offsetof(bcmolt_log_entry_auto_cfg_data, stat_alarm_cleared), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_log_entry_auto_cfg_stat_alarm_raised = { .name = "stat_alarm_raised", .descr = "If true, indications of type \"stat_alarm_raised\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_LOG_ENTRY_AUTO_CFG_ID_STAT_ALARM_RAISED, .offset = offsetof(bcmolt_log_entry_auto_cfg_data, stat_alarm_raised), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr * BCM_DESCR log_entry_auto_cfg_prop_array[] = { &prop_descr_log_entry_auto_cfg_stat_alarm_cleared, &prop_descr_log_entry_auto_cfg_stat_alarm_raised };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_log_entry_auto_cfg_data_fields[] = { { .name = "stat_alarm_cleared", .descr = "If true, indications of type \"stat_alarm_cleared\" will be generated.", .offset = offsetof(bcmolt_log_entry_auto_cfg_data, stat_alarm_cleared), .type = &type_descr_bcmos_bool }, { .name = "stat_alarm_raised", .descr = "If true, indications of type \"stat_alarm_raised\" will be generated.", .offset = offsetof(bcmolt_log_entry_auto_cfg_data, stat_alarm_raised), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_log_entry_auto_cfg_data = { .name = "bcmolt_log_entry_auto_cfg_data", .descr = "Indication Configuration", .size = sizeof(bcmolt_log_entry_auto_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_log_entry_auto_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_log_entry_auto_cfg_data_fields } } };
+
+/* ==== Object: logger ==== */
+
+/* Group: logger - key */
+static bcmcli_prop_descr BCM_DESCR prop_descr_logger_key_reserved = { .name = "reserved", .descr = "reserved", .access = 0, .property = BCMOLT_LOGGER_KEY_ID_RESERVED, .offset = offsetof(bcmolt_logger_key, reserved), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_logger_key_file_id = { .name = "file_id", .descr = "should be 0", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_LOGGER_KEY_ID_FILE_ID, .offset = offsetof(bcmolt_logger_key, file_id), .type = &type_descr_bcmolt_log_file_id };
+static bcmcli_prop_descr * BCM_DESCR logger_key_prop_array[] = { &prop_descr_logger_key_reserved, &prop_descr_logger_key_file_id };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_logger_key_fields[] = { { .name = "reserved", .descr = "reserved", .offset = offsetof(bcmolt_logger_key, reserved), .type = &type_descr_uint32_t }, { .name = "file_id", .descr = "should be 0", .offset = offsetof(bcmolt_logger_key, file_id), .type = &type_descr_bcmolt_log_file_id } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_logger_key = { .name = "bcmolt_logger_key", .descr = "key", .size = sizeof(bcmolt_logger_key), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_logger_key_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_logger_key_fields } } };
+
+/* Group: logger - cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_logger_cfg_buffer = { .name = "buffer", .descr = "Contains \"next\" log records read by \"bcmolt_cfg_get() API", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_LOGGER_CFG_ID_BUFFER, .offset = offsetof(bcmolt_logger_cfg_data, buffer), .type = &type_descr_bcmolt_log_buffer };
+static bcmcli_prop_descr BCM_DESCR prop_descr_logger_cfg_wrap_around = { .name = "wrap_around", .descr = "Log file wrap-around option. TRUE=wrap around when full. FALSE=stop when full", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_LOGGER_CFG_ID_WRAP_AROUND, .offset = offsetof(bcmolt_logger_cfg_data, wrap_around), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_logger_cfg_clear_after_read = { .name = "clear_after_read", .descr = "Clear log after last record has been read", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_LOGGER_CFG_ID_CLEAR_AFTER_READ, .offset = offsetof(bcmolt_logger_cfg_data, clear_after_read), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_logger_cfg_enable_log = { .name = "enable_log", .descr = "Enable logger", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_LOGGER_CFG_ID_ENABLE_LOG, .offset = offsetof(bcmolt_logger_cfg_data, enable_log), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_logger_cfg_log_names = { .name = "log_names", .descr = "log_names", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_LOGGER_CFG_ID_LOG_NAMES, .offset = offsetof(bcmolt_logger_cfg_data, log_names), .type = &type_descr_bcmolt_str_1000 };
+static bcmcli_prop_descr * BCM_DESCR logger_cfg_prop_array[] = { &prop_descr_logger_cfg_buffer, &prop_descr_logger_cfg_wrap_around, &prop_descr_logger_cfg_clear_after_read, &prop_descr_logger_cfg_enable_log, &prop_descr_logger_cfg_log_names };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_logger_cfg_data_fields[] = { { .name = "buffer", .descr = "Contains \"next\" log records read by \"bcmolt_cfg_get() API", .offset = offsetof(bcmolt_logger_cfg_data, buffer), .type = &type_descr_bcmolt_log_buffer }, { .name = "wrap_around", .descr = "Log file wrap-around option. TRUE=wrap around when full. FALSE=stop when full", .offset = offsetof(bcmolt_logger_cfg_data, wrap_around), .type = &type_descr_bcmos_bool }, { .name = "clear_after_read", .descr = "Clear log after last record has been read", .offset = offsetof(bcmolt_logger_cfg_data, clear_after_read), .type = &type_descr_bcmos_bool }, { .name = "enable_log", .descr = "Enable logger", .offset = offsetof(bcmolt_logger_cfg_data, enable_log), .type = &type_descr_bcmos_bool }, { .name = "log_names", .descr = "log_names", .offset = offsetof(bcmolt_logger_cfg_data, log_names), .type = &type_descr_bcmolt_str_1000 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_logger_cfg_data = { .name = "bcmolt_logger_cfg_data", .descr = "cfg", .size = sizeof(bcmolt_logger_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_logger_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_logger_cfg_data_fields } } };
+
+/* Group: logger - stat */
+static bcmcli_prop_descr BCM_DESCR prop_descr_logger_stat_lines_in_log = { .name = "lines_in_log", .descr = "lines in log", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_LOGGER_STAT_ID_LINES_IN_LOG, .offset = offsetof(bcmolt_logger_stat_data, lines_in_log), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr * BCM_DESCR logger_stat_prop_array[] = { &prop_descr_logger_stat_lines_in_log };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_logger_stat_data_fields[] = { { .name = "lines_in_log", .descr = "lines in log", .offset = offsetof(bcmolt_logger_stat_data, lines_in_log), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_logger_stat_data = { .name = "bcmolt_logger_stat_data", .descr = "stat", .size = sizeof(bcmolt_logger_stat_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_logger_stat_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_logger_stat_data_fields } } };
+
+/* Group: logger - clear_log */
+static bcmcli_prop_descr * BCM_DESCR logger_clear_log_prop_array[] = { };
+
+/* Group: logger - stat_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_logger_stat_cfg_cfg = { .name = "cfg", .descr = "Statistic alarm configuration.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_LOGGER_STAT_CFG_ID_CFG, .offset = offsetof(bcmolt_logger_stat_cfg_data, cfg), .type = &type_descr_bcmolt_stat_alarm_config };
+static bcmcli_prop_descr * BCM_DESCR logger_stat_cfg_prop_array[] = { &prop_descr_logger_stat_cfg_cfg };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_logger_stat_cfg_data_fields[] = { { .name = "cfg", .descr = "Statistic alarm configuration.", .offset = offsetof(bcmolt_logger_stat_cfg_data, cfg), .type = &type_descr_bcmolt_stat_alarm_config } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_logger_stat_cfg_data = { .name = "bcmolt_logger_stat_cfg_data", .descr = "Statistic Configuration", .size = sizeof(bcmolt_logger_stat_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_logger_stat_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_logger_stat_cfg_data_fields } } };
+
+/* Group: logger - stat_alarm_raised */
+static bcmcli_prop_descr BCM_DESCR prop_descr_logger_stat_alarm_raised_stat = { .name = "stat", .descr = "Statistic identifier.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_LOGGER_STAT_ALARM_RAISED_ID_STAT, .offset = offsetof(bcmolt_logger_stat_alarm_raised_data, stat), .type = &type_descr_bcmolt_logger_stat_id };
+static bcmcli_prop_descr * BCM_DESCR logger_stat_alarm_raised_prop_array[] = { &prop_descr_logger_stat_alarm_raised_stat };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_logger_stat_alarm_raised_data_fields[] = { { .name = "stat", .descr = "Statistic identifier.", .offset = offsetof(bcmolt_logger_stat_alarm_raised_data, stat), .type = &type_descr_bcmolt_logger_stat_id } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_logger_stat_alarm_raised_data = { .name = "bcmolt_logger_stat_alarm_raised_data", .descr = "Sent when a configured statistic alarm condition has been met.", .size = sizeof(bcmolt_logger_stat_alarm_raised_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_logger_stat_alarm_raised_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_logger_stat_alarm_raised_data_fields } } };
+
+/* Group: logger - stat_alarm_cleared */
+static bcmcli_prop_descr BCM_DESCR prop_descr_logger_stat_alarm_cleared_stat = { .name = "stat", .descr = "Statistic identifier.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_LOGGER_STAT_ALARM_CLEARED_ID_STAT, .offset = offsetof(bcmolt_logger_stat_alarm_cleared_data, stat), .type = &type_descr_bcmolt_logger_stat_id };
+static bcmcli_prop_descr * BCM_DESCR logger_stat_alarm_cleared_prop_array[] = { &prop_descr_logger_stat_alarm_cleared_stat };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_logger_stat_alarm_cleared_data_fields[] = { { .name = "stat", .descr = "Statistic identifier.", .offset = offsetof(bcmolt_logger_stat_alarm_cleared_data, stat), .type = &type_descr_bcmolt_logger_stat_id } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_logger_stat_alarm_cleared_data = { .name = "bcmolt_logger_stat_alarm_cleared_data", .descr = "Sent when a configured statistic alarm condition is no longer met.", .size = sizeof(bcmolt_logger_stat_alarm_cleared_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_logger_stat_alarm_cleared_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_logger_stat_alarm_cleared_data_fields } } };
+
+/* Group: logger - auto_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_logger_auto_cfg_stat_alarm_cleared = { .name = "stat_alarm_cleared", .descr = "If true, indications of type \"stat_alarm_cleared\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_LOGGER_AUTO_CFG_ID_STAT_ALARM_CLEARED, .offset = offsetof(bcmolt_logger_auto_cfg_data, stat_alarm_cleared), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_logger_auto_cfg_stat_alarm_raised = { .name = "stat_alarm_raised", .descr = "If true, indications of type \"stat_alarm_raised\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_LOGGER_AUTO_CFG_ID_STAT_ALARM_RAISED, .offset = offsetof(bcmolt_logger_auto_cfg_data, stat_alarm_raised), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr * BCM_DESCR logger_auto_cfg_prop_array[] = { &prop_descr_logger_auto_cfg_stat_alarm_cleared, &prop_descr_logger_auto_cfg_stat_alarm_raised };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_logger_auto_cfg_data_fields[] = { { .name = "stat_alarm_cleared", .descr = "If true, indications of type \"stat_alarm_cleared\" will be generated.", .offset = offsetof(bcmolt_logger_auto_cfg_data, stat_alarm_cleared), .type = &type_descr_bcmos_bool }, { .name = "stat_alarm_raised", .descr = "If true, indications of type \"stat_alarm_raised\" will be generated.", .offset = offsetof(bcmolt_logger_auto_cfg_data, stat_alarm_raised), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_logger_auto_cfg_data = { .name = "bcmolt_logger_auto_cfg_data", .descr = "Indication Configuration", .size = sizeof(bcmolt_logger_auto_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_logger_auto_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_logger_auto_cfg_data_fields } } };
+
+/* ==== Object: nni ==== */
+
+/* Group: nni - key */
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_key_pon_ni = { .name = "pon_ni", .descr = "PON NI", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_KEY_ID_PON_NI, .offset = offsetof(bcmolt_nni_key, pon_ni), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr * BCM_DESCR nni_key_prop_array[] = { &prop_descr_nni_key_pon_ni };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_nni_key_fields[] = { { .name = "pon_ni", .descr = "PON NI", .offset = offsetof(bcmolt_nni_key, pon_ni), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_nni_key = { .name = "bcmolt_nni_key", .descr = "key", .size = sizeof(bcmolt_nni_key), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_nni_key_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_nni_key_fields } } };
+
+/* Group: nni - cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_cfg_remote_loopback = { .name = "remote_loopback", .descr = "Incoming packets coming from the PON (upstream) and going back to the PON (Downstream) ", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_CFG_ID_REMOTE_LOOPBACK, .offset = offsetof(bcmolt_nni_cfg_data, remote_loopback), .type = &type_descr_bcmolt_control_state };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_cfg_line_loopback = { .name = "line_loopback", .descr = "Incoming packets coming from the NNI interface to the PM and going back towards the NNI interface", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_CFG_ID_LINE_LOOPBACK, .offset = offsetof(bcmolt_nni_cfg_data, line_loopback), .type = &type_descr_bcmolt_control_state };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_cfg_mac_address = { .name = "mac_address", .descr = "Mac address to be used for this NNI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_CFG_ID_MAC_ADDRESS, .offset = offsetof(bcmolt_nni_cfg_data, mac_address), .type = &type_descr_bcmos_mac_address };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_cfg_nni_status = { .name = "nni_status", .descr = "NNI status", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_NNI_CFG_ID_NNI_STATUS, .offset = offsetof(bcmolt_nni_cfg_data, nni_status), .type = &type_descr_bcmolt_nni_link_status };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_cfg_nni_backup_status = { .name = "nni_backup_status", .descr = "Status of the backup NNI.", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_NNI_CFG_ID_NNI_BACKUP_STATUS, .offset = offsetof(bcmolt_nni_cfg_data, nni_backup_status), .type = &type_descr_bcmolt_nni_link_status };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_cfg_active_nni = { .name = "active_nni", .descr = "Which NNI is currently active.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_CFG_ID_ACTIVE_NNI, .offset = offsetof(bcmolt_nni_cfg_data, active_nni), .type = &type_descr_bcmolt_nni_connection };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_cfg_nni_status_polling_interval_ms = { .name = "nni_status_polling_interval_ms", .descr = "How often to check the status of the primary and backup NNIs (units: ms). Zero (0) disables status polling.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_CFG_ID_NNI_STATUS_POLLING_INTERVAL_MS, .offset = offsetof(bcmolt_nni_cfg_data, nni_status_polling_interval_ms), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_cfg_autoswitch = { .name = "autoswitch", .descr = "Should firmware automatically switch between primary/backup NNIs when Loss of Link is detected?", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_CFG_ID_AUTOSWITCH, .offset = offsetof(bcmolt_nni_cfg_data, autoswitch), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_cfg_flow_control = { .name = "flow_control", .descr = "NNI Flow control.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_CFG_ID_FLOW_CONTROL, .offset = offsetof(bcmolt_nni_cfg_data, flow_control), .type = &type_descr_bcmolt_control_state };
+static bcmcli_prop_descr * BCM_DESCR nni_cfg_prop_array[] = { &prop_descr_nni_cfg_remote_loopback, &prop_descr_nni_cfg_line_loopback, &prop_descr_nni_cfg_mac_address, &prop_descr_nni_cfg_nni_status, &prop_descr_nni_cfg_nni_backup_status, &prop_descr_nni_cfg_active_nni, &prop_descr_nni_cfg_nni_status_polling_interval_ms, &prop_descr_nni_cfg_autoswitch, &prop_descr_nni_cfg_flow_control };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_nni_cfg_data_fields[] = { { .name = "remote_loopback", .descr = "Incoming packets coming from the PON (upstream) and going back to the PON (Downstream) ", .offset = offsetof(bcmolt_nni_cfg_data, remote_loopback), .type = &type_descr_bcmolt_control_state }, { .name = "line_loopback", .descr = "Incoming packets coming from the NNI interface to the PM and going back towards the NNI interface", .offset = offsetof(bcmolt_nni_cfg_data, line_loopback), .type = &type_descr_bcmolt_control_state }, { .name = "mac_address", .descr = "Mac address to be used for this NNI.", .offset = offsetof(bcmolt_nni_cfg_data, mac_address), .type = &type_descr_bcmos_mac_address }, { .name = "nni_status", .descr = "NNI status", .offset = offsetof(bcmolt_nni_cfg_data, nni_status), .type = &type_descr_bcmolt_nni_link_status }, { .name = "nni_backup_status", .descr = "Status of the backup NNI.", .offset = offsetof(bcmolt_nni_cfg_data, nni_backup_status), .type = &type_descr_bcmolt_nni_link_status }, { .name = "active_nni", .descr = "Which NNI is currently active.", .offset = offsetof(bcmolt_nni_cfg_data, active_nni), .type = &type_descr_bcmolt_nni_connection }, { .name = "nni_status_polling_interval_ms", .descr = "How often to check the status of the primary and backup NNIs (units: ms). Zero (0) disables status polling.", .offset = offsetof(bcmolt_nni_cfg_data, nni_status_polling_interval_ms), .type = &type_descr_uint32_t }, { .name = "autoswitch", .descr = "Should firmware automatically switch between primary/backup NNIs when Loss of Link is detected?", .offset = offsetof(bcmolt_nni_cfg_data, autoswitch), .type = &type_descr_bcmos_bool }, { .name = "flow_control", .descr = "NNI Flow control.", .offset = offsetof(bcmolt_nni_cfg_data, flow_control), .type = &type_descr_bcmolt_control_state } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_nni_cfg_data = { .name = "bcmolt_nni_cfg_data", .descr = "cfg", .size = sizeof(bcmolt_nni_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_nni_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_nni_cfg_data_fields } } };
+
+/* Group: nni - stat */
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_rx_frames_64 = { .name = "rx_frames_64", .descr = "The count of RX 64 byte frames on this NNI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_RX_FRAMES_64, .offset = offsetof(bcmolt_nni_stat_data, rx_frames_64), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_rx_frames_65_127 = { .name = "rx_frames_65_127", .descr = "The count of RX 65 to 127 byte frames on this NNI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_RX_FRAMES_65_127, .offset = offsetof(bcmolt_nni_stat_data, rx_frames_65_127), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_rx_frames_128_255 = { .name = "rx_frames_128_255", .descr = "The count of RX 128 to 255 byte frames on this NNI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_RX_FRAMES_128_255, .offset = offsetof(bcmolt_nni_stat_data, rx_frames_128_255), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_rx_frames_256_511 = { .name = "rx_frames_256_511", .descr = "The count of RX 256 to 511 byte frames on this NNI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_RX_FRAMES_256_511, .offset = offsetof(bcmolt_nni_stat_data, rx_frames_256_511), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_rx_frames_512_1023 = { .name = "rx_frames_512_1023", .descr = "The count of RX 512 to 1023 byte frames on this NNI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_RX_FRAMES_512_1023, .offset = offsetof(bcmolt_nni_stat_data, rx_frames_512_1023), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_rx_frames_1024_1518 = { .name = "rx_frames_1024_1518", .descr = "The count of RX 1024 to 1518 byte frames on this NNI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_RX_FRAMES_1024_1518, .offset = offsetof(bcmolt_nni_stat_data, rx_frames_1024_1518), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_rx_frames_1519_2047 = { .name = "rx_frames_1519_2047", .descr = "The count of RX 1519 to 2047 byte frames on this NNI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_RX_FRAMES_1519_2047, .offset = offsetof(bcmolt_nni_stat_data, rx_frames_1519_2047), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_rx_frames_2048_4095 = { .name = "rx_frames_2048_4095", .descr = "The count of RX 2048 to 4095 byte frames on this NNI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_RX_FRAMES_2048_4095, .offset = offsetof(bcmolt_nni_stat_data, rx_frames_2048_4095), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_rx_frames_4096_9216 = { .name = "rx_frames_4096_9216", .descr = "The count of RX 4096 to 9216 byte frames on this NNI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_RX_FRAMES_4096_9216, .offset = offsetof(bcmolt_nni_stat_data, rx_frames_4096_9216), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_rx_frames_9217_16383 = { .name = "rx_frames_9217_16383", .descr = "The count of RX 9217 to 16383 byte frames on this NNI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_RX_FRAMES_9217_16383, .offset = offsetof(bcmolt_nni_stat_data, rx_frames_9217_16383), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_rx_frames = { .name = "rx_frames", .descr = "The number of received frames on this NNI. This includes all errored frames as well.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_RX_FRAMES, .offset = offsetof(bcmolt_nni_stat_data, rx_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_rx_bytes = { .name = "rx_bytes", .descr = "The number of received bytes on this NNI. This includes all errored frames as well.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_RX_BYTES, .offset = offsetof(bcmolt_nni_stat_data, rx_bytes), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_rx_good_frames = { .name = "rx_good_frames", .descr = "The number of received good frames on this NNI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_RX_GOOD_FRAMES, .offset = offsetof(bcmolt_nni_stat_data, rx_good_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_rx_unicast_frames = { .name = "rx_unicast_frames", .descr = "The number of received unicast frames on this NNI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_RX_UNICAST_FRAMES, .offset = offsetof(bcmolt_nni_stat_data, rx_unicast_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_rx_multicast_frames = { .name = "rx_multicast_frames", .descr = "The number of received multicast frames on this NNI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_RX_MULTICAST_FRAMES, .offset = offsetof(bcmolt_nni_stat_data, rx_multicast_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_rx_broadcast_frames = { .name = "rx_broadcast_frames", .descr = "The number of received broadcast frames on this NNI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_RX_BROADCAST_FRAMES, .offset = offsetof(bcmolt_nni_stat_data, rx_broadcast_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_rx_fcs_errors = { .name = "rx_fcs_errors", .descr = "The number of received FCS errors on this NNI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_RX_FCS_ERRORS, .offset = offsetof(bcmolt_nni_stat_data, rx_fcs_errors), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_rx_control_frames = { .name = "rx_control_frames", .descr = "The number of received control frames on this NNI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_RX_CONTROL_FRAMES, .offset = offsetof(bcmolt_nni_stat_data, rx_control_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_rx_pause_frames = { .name = "rx_pause_frames", .descr = "The number of received pause frames on this NNI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_RX_PAUSE_FRAMES, .offset = offsetof(bcmolt_nni_stat_data, rx_pause_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_rx_pfc_frames = { .name = "rx_pfc_frames", .descr = "The number of received PFC frames on this NNI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_RX_PFC_FRAMES, .offset = offsetof(bcmolt_nni_stat_data, rx_pfc_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_rx_unsupported_opcode = { .name = "rx_unsupported_opcode", .descr = "The number of received Unsupported Opcode frames on this NNI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_RX_UNSUPPORTED_OPCODE, .offset = offsetof(bcmolt_nni_stat_data, rx_unsupported_opcode), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_rx_unsupported_da = { .name = "rx_unsupported_da", .descr = "The number of received unsupported DA frames on this NNI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_RX_UNSUPPORTED_DA, .offset = offsetof(bcmolt_nni_stat_data, rx_unsupported_da), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_rx_alignment_errors = { .name = "rx_alignment_errors", .descr = "The number of received alignment errors on this NNI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_RX_ALIGNMENT_ERRORS, .offset = offsetof(bcmolt_nni_stat_data, rx_alignment_errors), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_rx_length_out_of_range = { .name = "rx_length_out_of_range", .descr = "The number of received length out of range errors on this NNI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_RX_LENGTH_OUT_OF_RANGE, .offset = offsetof(bcmolt_nni_stat_data, rx_length_out_of_range), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_rx_code_errors = { .name = "rx_code_errors", .descr = "The number of received code errors on this NNI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_RX_CODE_ERRORS, .offset = offsetof(bcmolt_nni_stat_data, rx_code_errors), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_rx_oversized_frames = { .name = "rx_oversized_frames", .descr = "The number of received oversized frames on this NNI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_RX_OVERSIZED_FRAMES, .offset = offsetof(bcmolt_nni_stat_data, rx_oversized_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_rx_jabber_frames = { .name = "rx_jabber_frames", .descr = "The number of received jabber frames on this NNI. these are oversized frames that also contain an invalid CRC, code error, or IEEE length check error.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_RX_JABBER_FRAMES, .offset = offsetof(bcmolt_nni_stat_data, rx_jabber_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_rx_mtu_check_errors = { .name = "rx_mtu_check_errors", .descr = "The number of received MTU Check Errors on this NNI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_RX_MTU_CHECK_ERRORS, .offset = offsetof(bcmolt_nni_stat_data, rx_mtu_check_errors), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_rx_promiscuous_frames = { .name = "rx_promiscuous_frames", .descr = "The number of received frames on this NNI that are not control packets and have a DA that is not matching with the RX SA.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_RX_PROMISCUOUS_FRAMES, .offset = offsetof(bcmolt_nni_stat_data, rx_promiscuous_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_rx_vlan_frames = { .name = "rx_vlan_frames", .descr = "The number of received VLAN tagged frames on this NNI (with TPID 8100). This counts both single and double tagged frames.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_RX_VLAN_FRAMES, .offset = offsetof(bcmolt_nni_stat_data, rx_vlan_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_rx_double_vlan_frames = { .name = "rx_double_vlan_frames", .descr = "The number of received double VLAN tagged frames on this NNI (with TPID 8100). ", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_RX_DOUBLE_VLAN_FRAMES, .offset = offsetof(bcmolt_nni_stat_data, rx_double_vlan_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_rx_truncated_frames = { .name = "rx_truncated_frames", .descr = "The number of received truncated frames on this NNI. This is likely due to RX FIFO Full. ", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_RX_TRUNCATED_FRAMES, .offset = offsetof(bcmolt_nni_stat_data, rx_truncated_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_rx_undersize_frames = { .name = "rx_undersize_frames", .descr = "The number of received undersized frames on this NNI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_RX_UNDERSIZE_FRAMES, .offset = offsetof(bcmolt_nni_stat_data, rx_undersize_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_rx_fragmented_frames = { .name = "rx_fragmented_frames", .descr = "The number of received fragmented frames on this NNI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_RX_FRAGMENTED_FRAMES, .offset = offsetof(bcmolt_nni_stat_data, rx_fragmented_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_rx_runt_frames = { .name = "rx_runt_frames", .descr = "The number of received runt frames on this NNI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_RX_RUNT_FRAMES, .offset = offsetof(bcmolt_nni_stat_data, rx_runt_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_tx_frames_64 = { .name = "tx_frames_64", .descr = "The count of TX 64 byte frames on this NNI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_TX_FRAMES_64, .offset = offsetof(bcmolt_nni_stat_data, tx_frames_64), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_tx_frames_65_127 = { .name = "tx_frames_65_127", .descr = "The count of TX 65 to 127 byte frames on this NNI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_TX_FRAMES_65_127, .offset = offsetof(bcmolt_nni_stat_data, tx_frames_65_127), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_tx_frames_128_255 = { .name = "tx_frames_128_255", .descr = "The count of TX 128 to 255 byte frames on this NNI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_TX_FRAMES_128_255, .offset = offsetof(bcmolt_nni_stat_data, tx_frames_128_255), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_tx_frames_256_511 = { .name = "tx_frames_256_511", .descr = "The count of TX 256 to 511 byte frames on this NNI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_TX_FRAMES_256_511, .offset = offsetof(bcmolt_nni_stat_data, tx_frames_256_511), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_tx_frames_512_1023 = { .name = "tx_frames_512_1023", .descr = "The count of TX 512 to 1023 byte frames on this NNI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_TX_FRAMES_512_1023, .offset = offsetof(bcmolt_nni_stat_data, tx_frames_512_1023), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_tx_frames_1024_1518 = { .name = "tx_frames_1024_1518", .descr = "The count of TX 1024 to 1518 byte frames on this NNI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_TX_FRAMES_1024_1518, .offset = offsetof(bcmolt_nni_stat_data, tx_frames_1024_1518), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_tx_frames_1519_2047 = { .name = "tx_frames_1519_2047", .descr = "The count of TX 1519 to 2047 byte frames on this NNI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_TX_FRAMES_1519_2047, .offset = offsetof(bcmolt_nni_stat_data, tx_frames_1519_2047), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_tx_frames_2048_4095 = { .name = "tx_frames_2048_4095", .descr = "The count of TX 2048 to 4095 byte frames on this NNI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_TX_FRAMES_2048_4095, .offset = offsetof(bcmolt_nni_stat_data, tx_frames_2048_4095), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_tx_frames_4096_9216 = { .name = "tx_frames_4096_9216", .descr = "The count of TX 4096 to 9216 byte frames on this NNI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_TX_FRAMES_4096_9216, .offset = offsetof(bcmolt_nni_stat_data, tx_frames_4096_9216), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_tx_frames_9217_16383 = { .name = "tx_frames_9217_16383", .descr = "The count of TX 9217 to 16383 byte frames on this NNI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_TX_FRAMES_9217_16383, .offset = offsetof(bcmolt_nni_stat_data, tx_frames_9217_16383), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_tx_frames = { .name = "tx_frames", .descr = "The number of transmitted frames on this NNI. This includes all errored frames as well.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_TX_FRAMES, .offset = offsetof(bcmolt_nni_stat_data, tx_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_tx_bytes = { .name = "tx_bytes", .descr = "The number of transmitted bytes on this NNI. This includes all errored frames as well.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_TX_BYTES, .offset = offsetof(bcmolt_nni_stat_data, tx_bytes), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_tx_good_frames = { .name = "tx_good_frames", .descr = "The number of transmitted good frames on this NNI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_TX_GOOD_FRAMES, .offset = offsetof(bcmolt_nni_stat_data, tx_good_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_tx_unicast_frames = { .name = "tx_unicast_frames", .descr = "The number of transmitted unicast frames on this NNI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_TX_UNICAST_FRAMES, .offset = offsetof(bcmolt_nni_stat_data, tx_unicast_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_tx_multicast_frames = { .name = "tx_multicast_frames", .descr = "The number of transmitted multicast frames on this NNI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_TX_MULTICAST_FRAMES, .offset = offsetof(bcmolt_nni_stat_data, tx_multicast_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_tx_broadcast_frames = { .name = "tx_broadcast_frames", .descr = "The number of transmitted broadcast frames on this NNI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_TX_BROADCAST_FRAMES, .offset = offsetof(bcmolt_nni_stat_data, tx_broadcast_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_tx_pause_frames = { .name = "tx_pause_frames", .descr = "The number of transmitted pause frames on this NNI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_TX_PAUSE_FRAMES, .offset = offsetof(bcmolt_nni_stat_data, tx_pause_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_tx_pfc_frames = { .name = "tx_pfc_frames", .descr = "The number of transmitted PFC frames on this NNI.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_TX_PFC_FRAMES, .offset = offsetof(bcmolt_nni_stat_data, tx_pfc_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_tx_jabber_frames = { .name = "tx_jabber_frames", .descr = "The number of transmitted jabber frames on this NNI. These are oversized frames that also contain an invalid FCS.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_TX_JABBER_FRAMES, .offset = offsetof(bcmolt_nni_stat_data, tx_jabber_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_tx_fcs_errors = { .name = "tx_fcs_errors", .descr = "The number of transmitted FCS errors on this NNI. ", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_TX_FCS_ERRORS, .offset = offsetof(bcmolt_nni_stat_data, tx_fcs_errors), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_tx_control_frames = { .name = "tx_control_frames", .descr = "The number of transmitted control frames on this NNI. ", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_TX_CONTROL_FRAMES, .offset = offsetof(bcmolt_nni_stat_data, tx_control_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_tx_oversize_frames = { .name = "tx_oversize_frames", .descr = "The number of transmitted oversized frames on this NNI. ", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_TX_OVERSIZE_FRAMES, .offset = offsetof(bcmolt_nni_stat_data, tx_oversize_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_tx_fragmented_frames = { .name = "tx_fragmented_frames", .descr = "The number of transmitted fragmented frames on this NNI. ", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_TX_FRAGMENTED_FRAMES, .offset = offsetof(bcmolt_nni_stat_data, tx_fragmented_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_tx_error_frames = { .name = "tx_error_frames", .descr = "The number of transmitted errored frames on this NNI. ", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_TX_ERROR_FRAMES, .offset = offsetof(bcmolt_nni_stat_data, tx_error_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_tx_vlan_frames = { .name = "tx_vlan_frames", .descr = "The number of transmitted VLAN tagged frames on this NNI (with TPID 8100). This counts both single and double tagged frames.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_TX_VLAN_FRAMES, .offset = offsetof(bcmolt_nni_stat_data, tx_vlan_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_tx_double_vlan_frames = { .name = "tx_double_vlan_frames", .descr = "The number of transmitted double VLAN tagged frames on this NNI (with TPID 8100). ", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_TX_DOUBLE_VLAN_FRAMES, .offset = offsetof(bcmolt_nni_stat_data, tx_double_vlan_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_tx_runt_frames = { .name = "tx_runt_frames", .descr = "The number of transmitted runt frames on this NNI. ", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_TX_RUNT_FRAMES, .offset = offsetof(bcmolt_nni_stat_data, tx_runt_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_tx_underrun_frames = { .name = "tx_underrun_frames", .descr = "The number of transmitted underrun frames on this NNI. Thus happens when a frame encounters a MAC underrun (Tx Sync FIFO runs out of data before the end of packet).", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ID_TX_UNDERRUN_FRAMES, .offset = offsetof(bcmolt_nni_stat_data, tx_underrun_frames), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr * BCM_DESCR nni_stat_prop_array[] = { &prop_descr_nni_stat_rx_frames_64, &prop_descr_nni_stat_rx_frames_65_127, &prop_descr_nni_stat_rx_frames_128_255, &prop_descr_nni_stat_rx_frames_256_511, &prop_descr_nni_stat_rx_frames_512_1023, &prop_descr_nni_stat_rx_frames_1024_1518, &prop_descr_nni_stat_rx_frames_1519_2047, &prop_descr_nni_stat_rx_frames_2048_4095, &prop_descr_nni_stat_rx_frames_4096_9216, &prop_descr_nni_stat_rx_frames_9217_16383, &prop_descr_nni_stat_rx_frames, &prop_descr_nni_stat_rx_bytes, &prop_descr_nni_stat_rx_good_frames, &prop_descr_nni_stat_rx_unicast_frames, &prop_descr_nni_stat_rx_multicast_frames, &prop_descr_nni_stat_rx_broadcast_frames, &prop_descr_nni_stat_rx_fcs_errors, &prop_descr_nni_stat_rx_control_frames, &prop_descr_nni_stat_rx_pause_frames, &prop_descr_nni_stat_rx_pfc_frames, &prop_descr_nni_stat_rx_unsupported_opcode, &prop_descr_nni_stat_rx_unsupported_da, &prop_descr_nni_stat_rx_alignment_errors, &prop_descr_nni_stat_rx_length_out_of_range, &prop_descr_nni_stat_rx_code_errors, &prop_descr_nni_stat_rx_oversized_frames, &prop_descr_nni_stat_rx_jabber_frames, &prop_descr_nni_stat_rx_mtu_check_errors, &prop_descr_nni_stat_rx_promiscuous_frames, &prop_descr_nni_stat_rx_vlan_frames, &prop_descr_nni_stat_rx_double_vlan_frames, &prop_descr_nni_stat_rx_truncated_frames, &prop_descr_nni_stat_rx_undersize_frames, &prop_descr_nni_stat_rx_fragmented_frames, &prop_descr_nni_stat_rx_runt_frames, &prop_descr_nni_stat_tx_frames_64, &prop_descr_nni_stat_tx_frames_65_127, &prop_descr_nni_stat_tx_frames_128_255, &prop_descr_nni_stat_tx_frames_256_511, &prop_descr_nni_stat_tx_frames_512_1023, &prop_descr_nni_stat_tx_frames_1024_1518, &prop_descr_nni_stat_tx_frames_1519_2047, &prop_descr_nni_stat_tx_frames_2048_4095, &prop_descr_nni_stat_tx_frames_4096_9216, &prop_descr_nni_stat_tx_frames_9217_16383, &prop_descr_nni_stat_tx_frames, &prop_descr_nni_stat_tx_bytes, &prop_descr_nni_stat_tx_good_frames, &prop_descr_nni_stat_tx_unicast_frames, &prop_descr_nni_stat_tx_multicast_frames, &prop_descr_nni_stat_tx_broadcast_frames, &prop_descr_nni_stat_tx_pause_frames, &prop_descr_nni_stat_tx_pfc_frames, &prop_descr_nni_stat_tx_jabber_frames, &prop_descr_nni_stat_tx_fcs_errors, &prop_descr_nni_stat_tx_control_frames, &prop_descr_nni_stat_tx_oversize_frames, &prop_descr_nni_stat_tx_fragmented_frames, &prop_descr_nni_stat_tx_error_frames, &prop_descr_nni_stat_tx_vlan_frames, &prop_descr_nni_stat_tx_double_vlan_frames, &prop_descr_nni_stat_tx_runt_frames, &prop_descr_nni_stat_tx_underrun_frames };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_nni_stat_data_fields[] =
+{
+    { .name = "rx_frames_64", .descr = "The count of RX 64 byte frames on this NNI.", .offset = offsetof(bcmolt_nni_stat_data, rx_frames_64), .type = &type_descr_uint64_t },
+    { .name = "rx_frames_65_127", .descr = "The count of RX 65 to 127 byte frames on this NNI.", .offset = offsetof(bcmolt_nni_stat_data, rx_frames_65_127), .type = &type_descr_uint64_t },
+    { .name = "rx_frames_128_255", .descr = "The count of RX 128 to 255 byte frames on this NNI.", .offset = offsetof(bcmolt_nni_stat_data, rx_frames_128_255), .type = &type_descr_uint64_t },
+    { .name = "rx_frames_256_511", .descr = "The count of RX 256 to 511 byte frames on this NNI.", .offset = offsetof(bcmolt_nni_stat_data, rx_frames_256_511), .type = &type_descr_uint64_t },
+    { .name = "rx_frames_512_1023", .descr = "The count of RX 512 to 1023 byte frames on this NNI.", .offset = offsetof(bcmolt_nni_stat_data, rx_frames_512_1023), .type = &type_descr_uint64_t },
+    { .name = "rx_frames_1024_1518", .descr = "The count of RX 1024 to 1518 byte frames on this NNI.", .offset = offsetof(bcmolt_nni_stat_data, rx_frames_1024_1518), .type = &type_descr_uint64_t },
+    { .name = "rx_frames_1519_2047", .descr = "The count of RX 1519 to 2047 byte frames on this NNI.", .offset = offsetof(bcmolt_nni_stat_data, rx_frames_1519_2047), .type = &type_descr_uint64_t },
+    { .name = "rx_frames_2048_4095", .descr = "The count of RX 2048 to 4095 byte frames on this NNI.", .offset = offsetof(bcmolt_nni_stat_data, rx_frames_2048_4095), .type = &type_descr_uint64_t },
+    { .name = "rx_frames_4096_9216", .descr = "The count of RX 4096 to 9216 byte frames on this NNI.", .offset = offsetof(bcmolt_nni_stat_data, rx_frames_4096_9216), .type = &type_descr_uint64_t },
+    { .name = "rx_frames_9217_16383", .descr = "The count of RX 9217 to 16383 byte frames on this NNI.", .offset = offsetof(bcmolt_nni_stat_data, rx_frames_9217_16383), .type = &type_descr_uint64_t },
+    { .name = "rx_frames", .descr = "The number of received frames on this NNI. This includes all errored frames as well.", .offset = offsetof(bcmolt_nni_stat_data, rx_frames), .type = &type_descr_uint64_t },
+    { .name = "rx_bytes", .descr = "The number of received bytes on this NNI. This includes all errored frames as well.", .offset = offsetof(bcmolt_nni_stat_data, rx_bytes), .type = &type_descr_uint64_t },
+    { .name = "rx_good_frames", .descr = "The number of received good frames on this NNI.", .offset = offsetof(bcmolt_nni_stat_data, rx_good_frames), .type = &type_descr_uint64_t },
+    { .name = "rx_unicast_frames", .descr = "The number of received unicast frames on this NNI.", .offset = offsetof(bcmolt_nni_stat_data, rx_unicast_frames), .type = &type_descr_uint64_t },
+    { .name = "rx_multicast_frames", .descr = "The number of received multicast frames on this NNI.", .offset = offsetof(bcmolt_nni_stat_data, rx_multicast_frames), .type = &type_descr_uint64_t },
+    { .name = "rx_broadcast_frames", .descr = "The number of received broadcast frames on this NNI.", .offset = offsetof(bcmolt_nni_stat_data, rx_broadcast_frames), .type = &type_descr_uint64_t },
+    { .name = "rx_fcs_errors", .descr = "The number of received FCS errors on this NNI.", .offset = offsetof(bcmolt_nni_stat_data, rx_fcs_errors), .type = &type_descr_uint64_t },
+    { .name = "rx_control_frames", .descr = "The number of received control frames on this NNI.", .offset = offsetof(bcmolt_nni_stat_data, rx_control_frames), .type = &type_descr_uint64_t },
+    { .name = "rx_pause_frames", .descr = "The number of received pause frames on this NNI.", .offset = offsetof(bcmolt_nni_stat_data, rx_pause_frames), .type = &type_descr_uint64_t },
+    { .name = "rx_pfc_frames", .descr = "The number of received PFC frames on this NNI.", .offset = offsetof(bcmolt_nni_stat_data, rx_pfc_frames), .type = &type_descr_uint64_t },
+    { .name = "rx_unsupported_opcode", .descr = "The number of received Unsupported Opcode frames on this NNI.", .offset = offsetof(bcmolt_nni_stat_data, rx_unsupported_opcode), .type = &type_descr_uint64_t },
+    { .name = "rx_unsupported_da", .descr = "The number of received unsupported DA frames on this NNI.", .offset = offsetof(bcmolt_nni_stat_data, rx_unsupported_da), .type = &type_descr_uint64_t },
+    { .name = "rx_alignment_errors", .descr = "The number of received alignment errors on this NNI.", .offset = offsetof(bcmolt_nni_stat_data, rx_alignment_errors), .type = &type_descr_uint64_t },
+    { .name = "rx_length_out_of_range", .descr = "The number of received length out of range errors on this NNI.", .offset = offsetof(bcmolt_nni_stat_data, rx_length_out_of_range), .type = &type_descr_uint64_t },
+    { .name = "rx_code_errors", .descr = "The number of received code errors on this NNI.", .offset = offsetof(bcmolt_nni_stat_data, rx_code_errors), .type = &type_descr_uint64_t },
+    { .name = "rx_oversized_frames", .descr = "The number of received oversized frames on this NNI.", .offset = offsetof(bcmolt_nni_stat_data, rx_oversized_frames), .type = &type_descr_uint64_t },
+    { .name = "rx_jabber_frames", .descr = "The number of received jabber frames on this NNI. these are oversized frames that also contain an invalid CRC, code error, or IEEE length check error.", .offset = offsetof(bcmolt_nni_stat_data, rx_jabber_frames), .type = &type_descr_uint64_t },
+    { .name = "rx_mtu_check_errors", .descr = "The number of received MTU Check Errors on this NNI.", .offset = offsetof(bcmolt_nni_stat_data, rx_mtu_check_errors), .type = &type_descr_uint64_t },
+    { .name = "rx_promiscuous_frames", .descr = "The number of received frames on this NNI that are not control packets and have a DA that is not matching with the RX SA.", .offset = offsetof(bcmolt_nni_stat_data, rx_promiscuous_frames), .type = &type_descr_uint64_t },
+    { .name = "rx_vlan_frames", .descr = "The number of received VLAN tagged frames on this NNI (with TPID 8100). This counts both single and double tagged frames.", .offset = offsetof(bcmolt_nni_stat_data, rx_vlan_frames), .type = &type_descr_uint64_t },
+    { .name = "rx_double_vlan_frames", .descr = "The number of received double VLAN tagged frames on this NNI (with TPID 8100). ", .offset = offsetof(bcmolt_nni_stat_data, rx_double_vlan_frames), .type = &type_descr_uint64_t },
+    { .name = "rx_truncated_frames", .descr = "The number of received truncated frames on this NNI. This is likely due to RX FIFO Full. ", .offset = offsetof(bcmolt_nni_stat_data, rx_truncated_frames), .type = &type_descr_uint64_t },
+    { .name = "rx_undersize_frames", .descr = "The number of received undersized frames on this NNI.", .offset = offsetof(bcmolt_nni_stat_data, rx_undersize_frames), .type = &type_descr_uint64_t },
+    { .name = "rx_fragmented_frames", .descr = "The number of received fragmented frames on this NNI.", .offset = offsetof(bcmolt_nni_stat_data, rx_fragmented_frames), .type = &type_descr_uint64_t },
+    { .name = "rx_runt_frames", .descr = "The number of received runt frames on this NNI.", .offset = offsetof(bcmolt_nni_stat_data, rx_runt_frames), .type = &type_descr_uint64_t },
+    { .name = "tx_frames_64", .descr = "The count of TX 64 byte frames on this NNI.", .offset = offsetof(bcmolt_nni_stat_data, tx_frames_64), .type = &type_descr_uint64_t },
+    { .name = "tx_frames_65_127", .descr = "The count of TX 65 to 127 byte frames on this NNI.", .offset = offsetof(bcmolt_nni_stat_data, tx_frames_65_127), .type = &type_descr_uint64_t },
+    { .name = "tx_frames_128_255", .descr = "The count of TX 128 to 255 byte frames on this NNI.", .offset = offsetof(bcmolt_nni_stat_data, tx_frames_128_255), .type = &type_descr_uint64_t },
+    { .name = "tx_frames_256_511", .descr = "The count of TX 256 to 511 byte frames on this NNI.", .offset = offsetof(bcmolt_nni_stat_data, tx_frames_256_511), .type = &type_descr_uint64_t },
+    { .name = "tx_frames_512_1023", .descr = "The count of TX 512 to 1023 byte frames on this NNI.", .offset = offsetof(bcmolt_nni_stat_data, tx_frames_512_1023), .type = &type_descr_uint64_t },
+    { .name = "tx_frames_1024_1518", .descr = "The count of TX 1024 to 1518 byte frames on this NNI.", .offset = offsetof(bcmolt_nni_stat_data, tx_frames_1024_1518), .type = &type_descr_uint64_t },
+    { .name = "tx_frames_1519_2047", .descr = "The count of TX 1519 to 2047 byte frames on this NNI.", .offset = offsetof(bcmolt_nni_stat_data, tx_frames_1519_2047), .type = &type_descr_uint64_t },
+    { .name = "tx_frames_2048_4095", .descr = "The count of TX 2048 to 4095 byte frames on this NNI.", .offset = offsetof(bcmolt_nni_stat_data, tx_frames_2048_4095), .type = &type_descr_uint64_t },
+    { .name = "tx_frames_4096_9216", .descr = "The count of TX 4096 to 9216 byte frames on this NNI.", .offset = offsetof(bcmolt_nni_stat_data, tx_frames_4096_9216), .type = &type_descr_uint64_t },
+    { .name = "tx_frames_9217_16383", .descr = "The count of TX 9217 to 16383 byte frames on this NNI.", .offset = offsetof(bcmolt_nni_stat_data, tx_frames_9217_16383), .type = &type_descr_uint64_t },
+    { .name = "tx_frames", .descr = "The number of transmitted frames on this NNI. This includes all errored frames as well.", .offset = offsetof(bcmolt_nni_stat_data, tx_frames), .type = &type_descr_uint64_t },
+    { .name = "tx_bytes", .descr = "The number of transmitted bytes on this NNI. This includes all errored frames as well.", .offset = offsetof(bcmolt_nni_stat_data, tx_bytes), .type = &type_descr_uint64_t },
+    { .name = "tx_good_frames", .descr = "The number of transmitted good frames on this NNI.", .offset = offsetof(bcmolt_nni_stat_data, tx_good_frames), .type = &type_descr_uint64_t },
+    { .name = "tx_unicast_frames", .descr = "The number of transmitted unicast frames on this NNI.", .offset = offsetof(bcmolt_nni_stat_data, tx_unicast_frames), .type = &type_descr_uint64_t },
+    { .name = "tx_multicast_frames", .descr = "The number of transmitted multicast frames on this NNI.", .offset = offsetof(bcmolt_nni_stat_data, tx_multicast_frames), .type = &type_descr_uint64_t },
+    { .name = "tx_broadcast_frames", .descr = "The number of transmitted broadcast frames on this NNI.", .offset = offsetof(bcmolt_nni_stat_data, tx_broadcast_frames), .type = &type_descr_uint64_t },
+    { .name = "tx_pause_frames", .descr = "The number of transmitted pause frames on this NNI.", .offset = offsetof(bcmolt_nni_stat_data, tx_pause_frames), .type = &type_descr_uint64_t },
+    { .name = "tx_pfc_frames", .descr = "The number of transmitted PFC frames on this NNI.", .offset = offsetof(bcmolt_nni_stat_data, tx_pfc_frames), .type = &type_descr_uint64_t },
+    { .name = "tx_jabber_frames", .descr = "The number of transmitted jabber frames on this NNI. These are oversized frames that also contain an invalid FCS.", .offset = offsetof(bcmolt_nni_stat_data, tx_jabber_frames), .type = &type_descr_uint64_t },
+    { .name = "tx_fcs_errors", .descr = "The number of transmitted FCS errors on this NNI. ", .offset = offsetof(bcmolt_nni_stat_data, tx_fcs_errors), .type = &type_descr_uint64_t },
+    { .name = "tx_control_frames", .descr = "The number of transmitted control frames on this NNI. ", .offset = offsetof(bcmolt_nni_stat_data, tx_control_frames), .type = &type_descr_uint64_t },
+    { .name = "tx_oversize_frames", .descr = "The number of transmitted oversized frames on this NNI. ", .offset = offsetof(bcmolt_nni_stat_data, tx_oversize_frames), .type = &type_descr_uint64_t },
+    { .name = "tx_fragmented_frames", .descr = "The number of transmitted fragmented frames on this NNI. ", .offset = offsetof(bcmolt_nni_stat_data, tx_fragmented_frames), .type = &type_descr_uint64_t },
+    { .name = "tx_error_frames", .descr = "The number of transmitted errored frames on this NNI. ", .offset = offsetof(bcmolt_nni_stat_data, tx_error_frames), .type = &type_descr_uint64_t },
+    { .name = "tx_vlan_frames", .descr = "The number of transmitted VLAN tagged frames on this NNI (with TPID 8100). This counts both single and double tagged frames.", .offset = offsetof(bcmolt_nni_stat_data, tx_vlan_frames), .type = &type_descr_uint64_t },
+    { .name = "tx_double_vlan_frames", .descr = "The number of transmitted double VLAN tagged frames on this NNI (with TPID 8100). ", .offset = offsetof(bcmolt_nni_stat_data, tx_double_vlan_frames), .type = &type_descr_uint64_t },
+    { .name = "tx_runt_frames", .descr = "The number of transmitted runt frames on this NNI. ", .offset = offsetof(bcmolt_nni_stat_data, tx_runt_frames), .type = &type_descr_uint64_t },
+    { .name = "tx_underrun_frames", .descr = "The number of transmitted underrun frames on this NNI. Thus happens when a frame encounters a MAC underrun (Tx Sync FIFO runs out of data before the end of packet).", .offset = offsetof(bcmolt_nni_stat_data, tx_underrun_frames), .type = &type_descr_uint64_t }
+};
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_nni_stat_data = { .name = "bcmolt_nni_stat_data", .descr = "stat", .size = sizeof(bcmolt_nni_stat_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_nni_stat_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_nni_stat_data_fields } } };
+
+/* Group: nni - status_changed */
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_status_changed_new_status = { .name = "new_status", .descr = "New NNI Link Status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STATUS_CHANGED_ID_NEW_STATUS, .offset = offsetof(bcmolt_nni_status_changed_data, new_status), .type = &type_descr_bcmolt_status };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_status_changed_link = { .name = "link", .descr = "Which NNI this indication pertains to.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STATUS_CHANGED_ID_LINK, .offset = offsetof(bcmolt_nni_status_changed_data, link), .type = &type_descr_bcmolt_nni_connection };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_status_changed_previous_active = { .name = "previous_active", .descr = "Which NNI was active before this status change.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STATUS_CHANGED_ID_PREVIOUS_ACTIVE, .offset = offsetof(bcmolt_nni_status_changed_data, previous_active), .type = &type_descr_bcmolt_nni_connection };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_status_changed_new_active = { .name = "new_active", .descr = "Which NNI is now active after this status change.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STATUS_CHANGED_ID_NEW_ACTIVE, .offset = offsetof(bcmolt_nni_status_changed_data, new_active), .type = &type_descr_bcmolt_nni_connection };
+static bcmcli_prop_descr * BCM_DESCR nni_status_changed_prop_array[] = { &prop_descr_nni_status_changed_new_status, &prop_descr_nni_status_changed_link, &prop_descr_nni_status_changed_previous_active, &prop_descr_nni_status_changed_new_active };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_nni_status_changed_data_fields[] = { { .name = "new_status", .descr = "New NNI Link Status", .offset = offsetof(bcmolt_nni_status_changed_data, new_status), .type = &type_descr_bcmolt_status }, { .name = "link", .descr = "Which NNI this indication pertains to.", .offset = offsetof(bcmolt_nni_status_changed_data, link), .type = &type_descr_bcmolt_nni_connection }, { .name = "previous_active", .descr = "Which NNI was active before this status change.", .offset = offsetof(bcmolt_nni_status_changed_data, previous_active), .type = &type_descr_bcmolt_nni_connection }, { .name = "new_active", .descr = "Which NNI is now active after this status change.", .offset = offsetof(bcmolt_nni_status_changed_data, new_active), .type = &type_descr_bcmolt_nni_connection } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_nni_status_changed_data = { .name = "bcmolt_nni_status_changed_data", .descr = "NNI Link status changed", .size = sizeof(bcmolt_nni_status_changed_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_nni_status_changed_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_nni_status_changed_data_fields } } };
+
+/* Group: nni - stat_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_cfg_cfg = { .name = "cfg", .descr = "Statistic alarm configuration.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_CFG_ID_CFG, .offset = offsetof(bcmolt_nni_stat_cfg_data, cfg), .type = &type_descr_bcmolt_stat_alarm_config };
+static bcmcli_prop_descr * BCM_DESCR nni_stat_cfg_prop_array[] = { &prop_descr_nni_stat_cfg_cfg };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_nni_stat_cfg_data_fields[] = { { .name = "cfg", .descr = "Statistic alarm configuration.", .offset = offsetof(bcmolt_nni_stat_cfg_data, cfg), .type = &type_descr_bcmolt_stat_alarm_config } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_nni_stat_cfg_data = { .name = "bcmolt_nni_stat_cfg_data", .descr = "Statistic Configuration", .size = sizeof(bcmolt_nni_stat_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_nni_stat_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_nni_stat_cfg_data_fields } } };
+
+/* Group: nni - stat_alarm_raised */
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_alarm_raised_stat = { .name = "stat", .descr = "Statistic identifier.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ALARM_RAISED_ID_STAT, .offset = offsetof(bcmolt_nni_stat_alarm_raised_data, stat), .type = &type_descr_bcmolt_nni_stat_id };
+static bcmcli_prop_descr * BCM_DESCR nni_stat_alarm_raised_prop_array[] = { &prop_descr_nni_stat_alarm_raised_stat };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_nni_stat_alarm_raised_data_fields[] = { { .name = "stat", .descr = "Statistic identifier.", .offset = offsetof(bcmolt_nni_stat_alarm_raised_data, stat), .type = &type_descr_bcmolt_nni_stat_id } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_nni_stat_alarm_raised_data = { .name = "bcmolt_nni_stat_alarm_raised_data", .descr = "Sent when a configured statistic alarm condition has been met.", .size = sizeof(bcmolt_nni_stat_alarm_raised_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_nni_stat_alarm_raised_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_nni_stat_alarm_raised_data_fields } } };
+
+/* Group: nni - stat_alarm_cleared */
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_stat_alarm_cleared_stat = { .name = "stat", .descr = "Statistic identifier.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_STAT_ALARM_CLEARED_ID_STAT, .offset = offsetof(bcmolt_nni_stat_alarm_cleared_data, stat), .type = &type_descr_bcmolt_nni_stat_id };
+static bcmcli_prop_descr * BCM_DESCR nni_stat_alarm_cleared_prop_array[] = { &prop_descr_nni_stat_alarm_cleared_stat };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_nni_stat_alarm_cleared_data_fields[] = { { .name = "stat", .descr = "Statistic identifier.", .offset = offsetof(bcmolt_nni_stat_alarm_cleared_data, stat), .type = &type_descr_bcmolt_nni_stat_id } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_nni_stat_alarm_cleared_data = { .name = "bcmolt_nni_stat_alarm_cleared_data", .descr = "Sent when a configured statistic alarm condition is no longer met.", .size = sizeof(bcmolt_nni_stat_alarm_cleared_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_nni_stat_alarm_cleared_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_nni_stat_alarm_cleared_data_fields } } };
+
+/* Group: nni - auto_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_auto_cfg_stat_alarm_cleared = { .name = "stat_alarm_cleared", .descr = "If true, indications of type \"stat_alarm_cleared\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_AUTO_CFG_ID_STAT_ALARM_CLEARED, .offset = offsetof(bcmolt_nni_auto_cfg_data, stat_alarm_cleared), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_auto_cfg_stat_alarm_raised = { .name = "stat_alarm_raised", .descr = "If true, indications of type \"stat_alarm_raised\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_AUTO_CFG_ID_STAT_ALARM_RAISED, .offset = offsetof(bcmolt_nni_auto_cfg_data, stat_alarm_raised), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_auto_cfg_status_changed = { .name = "status_changed", .descr = "If true, indications of type \"status_changed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_AUTO_CFG_ID_STATUS_CHANGED, .offset = offsetof(bcmolt_nni_auto_cfg_data, status_changed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr * BCM_DESCR nni_auto_cfg_prop_array[] = { &prop_descr_nni_auto_cfg_stat_alarm_cleared, &prop_descr_nni_auto_cfg_stat_alarm_raised, &prop_descr_nni_auto_cfg_status_changed };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_nni_auto_cfg_data_fields[] = { { .name = "stat_alarm_cleared", .descr = "If true, indications of type \"stat_alarm_cleared\" will be generated.", .offset = offsetof(bcmolt_nni_auto_cfg_data, stat_alarm_cleared), .type = &type_descr_bcmos_bool }, { .name = "stat_alarm_raised", .descr = "If true, indications of type \"stat_alarm_raised\" will be generated.", .offset = offsetof(bcmolt_nni_auto_cfg_data, stat_alarm_raised), .type = &type_descr_bcmos_bool }, { .name = "status_changed", .descr = "If true, indications of type \"status_changed\" will be generated.", .offset = offsetof(bcmolt_nni_auto_cfg_data, status_changed), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_nni_auto_cfg_data = { .name = "bcmolt_nni_auto_cfg_data", .descr = "Indication Configuration", .size = sizeof(bcmolt_nni_auto_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_nni_auto_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_nni_auto_cfg_data_fields } } };
+
+/* ==== Object: nni_serdes ==== */
+
+/* Group: nni_serdes - key */
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_serdes_key_pon_ni = { .name = "pon_ni", .descr = "PON NI", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_SERDES_KEY_ID_PON_NI, .offset = offsetof(bcmolt_nni_serdes_key, pon_ni), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_serdes_key_instance = { .name = "instance", .descr = "SerDes instance.: 0 = Primary, 1 = Secondary.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_SERDES_KEY_ID_INSTANCE, .offset = offsetof(bcmolt_nni_serdes_key, instance), .type = &type_descr_bcmolt_serdes_instance };
+static bcmcli_prop_descr * BCM_DESCR nni_serdes_key_prop_array[] = { &prop_descr_nni_serdes_key_pon_ni, &prop_descr_nni_serdes_key_instance };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_nni_serdes_key_fields[] = { { .name = "pon_ni", .descr = "PON NI", .offset = offsetof(bcmolt_nni_serdes_key, pon_ni), .type = &type_descr_uint8_t }, { .name = "instance", .descr = "SerDes instance.: 0 = Primary, 1 = Secondary.", .offset = offsetof(bcmolt_nni_serdes_key, instance), .type = &type_descr_bcmolt_serdes_instance } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_nni_serdes_key = { .name = "bcmolt_nni_serdes_key", .descr = "key", .size = sizeof(bcmolt_nni_serdes_key), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_nni_serdes_key_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_nni_serdes_key_fields } } };
+
+/* Group: nni_serdes - cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_serdes_cfg_rx_vga = { .name = "rx_vga", .descr = "Rx Vga", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_SERDES_CFG_ID_RX_VGA, .offset = offsetof(bcmolt_nni_serdes_cfg_data, rx_vga), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_serdes_cfg_rx_pf = { .name = "rx_pf", .descr = "Peaking Filter", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_SERDES_CFG_ID_RX_PF, .offset = offsetof(bcmolt_nni_serdes_cfg_data, rx_pf), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_serdes_cfg_rx_lfpf = { .name = "rx_lfpf", .descr = "Low Frequency Peaking Filter", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_SERDES_CFG_ID_RX_LFPF, .offset = offsetof(bcmolt_nni_serdes_cfg_data, rx_lfpf), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_serdes_cfg_rx_dfe1 = { .name = "rx_dfe1", .descr = "Rx DFE1", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_SERDES_CFG_ID_RX_DFE1, .offset = offsetof(bcmolt_nni_serdes_cfg_data, rx_dfe1), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_serdes_cfg_rx_dfe2 = { .name = "rx_dfe2", .descr = "Rx DFE2", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_SERDES_CFG_ID_RX_DFE2, .offset = offsetof(bcmolt_nni_serdes_cfg_data, rx_dfe2), .type = &type_descr_int8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_serdes_cfg_rx_dfe3 = { .name = "rx_dfe3", .descr = "Rx DFE3", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_SERDES_CFG_ID_RX_DFE3, .offset = offsetof(bcmolt_nni_serdes_cfg_data, rx_dfe3), .type = &type_descr_int8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_serdes_cfg_rx_dfe4 = { .name = "rx_dfe4", .descr = "Rx DFE4", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_SERDES_CFG_ID_RX_DFE4, .offset = offsetof(bcmolt_nni_serdes_cfg_data, rx_dfe4), .type = &type_descr_int8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_serdes_cfg_rx_dfe5 = { .name = "rx_dfe5", .descr = "Rx DFE5", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_SERDES_CFG_ID_RX_DFE5, .offset = offsetof(bcmolt_nni_serdes_cfg_data, rx_dfe5), .type = &type_descr_int8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_serdes_cfg_tx_pre = { .name = "tx_pre", .descr = "Tx Pre", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_SERDES_CFG_ID_TX_PRE, .offset = offsetof(bcmolt_nni_serdes_cfg_data, tx_pre), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_serdes_cfg_tx_main = { .name = "tx_main", .descr = "Tx Main", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_SERDES_CFG_ID_TX_MAIN, .offset = offsetof(bcmolt_nni_serdes_cfg_data, tx_main), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_serdes_cfg_tx_post1 = { .name = "tx_post1", .descr = "Tx Post1", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_SERDES_CFG_ID_TX_POST1, .offset = offsetof(bcmolt_nni_serdes_cfg_data, tx_post1), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_serdes_cfg_tx_post2 = { .name = "tx_post2", .descr = "Tx Post2", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_SERDES_CFG_ID_TX_POST2, .offset = offsetof(bcmolt_nni_serdes_cfg_data, tx_post2), .type = &type_descr_int8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_serdes_cfg_tx_post3 = { .name = "tx_post3", .descr = "Tx Post3", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_SERDES_CFG_ID_TX_POST3, .offset = offsetof(bcmolt_nni_serdes_cfg_data, tx_post3), .type = &type_descr_int8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_nni_serdes_cfg_tx_amp = { .name = "tx_amp", .descr = "Tx Amp", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_NNI_SERDES_CFG_ID_TX_AMP, .offset = offsetof(bcmolt_nni_serdes_cfg_data, tx_amp), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr * BCM_DESCR nni_serdes_cfg_prop_array[] = { &prop_descr_nni_serdes_cfg_rx_vga, &prop_descr_nni_serdes_cfg_rx_pf, &prop_descr_nni_serdes_cfg_rx_lfpf, &prop_descr_nni_serdes_cfg_rx_dfe1, &prop_descr_nni_serdes_cfg_rx_dfe2, &prop_descr_nni_serdes_cfg_rx_dfe3, &prop_descr_nni_serdes_cfg_rx_dfe4, &prop_descr_nni_serdes_cfg_rx_dfe5, &prop_descr_nni_serdes_cfg_tx_pre, &prop_descr_nni_serdes_cfg_tx_main, &prop_descr_nni_serdes_cfg_tx_post1, &prop_descr_nni_serdes_cfg_tx_post2, &prop_descr_nni_serdes_cfg_tx_post3, &prop_descr_nni_serdes_cfg_tx_amp };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_nni_serdes_cfg_data_fields[] = { { .name = "rx_vga", .descr = "Rx Vga", .offset = offsetof(bcmolt_nni_serdes_cfg_data, rx_vga), .type = &type_descr_uint8_t }, { .name = "rx_pf", .descr = "Peaking Filter", .offset = offsetof(bcmolt_nni_serdes_cfg_data, rx_pf), .type = &type_descr_uint8_t }, { .name = "rx_lfpf", .descr = "Low Frequency Peaking Filter", .offset = offsetof(bcmolt_nni_serdes_cfg_data, rx_lfpf), .type = &type_descr_uint8_t }, { .name = "rx_dfe1", .descr = "Rx DFE1", .offset = offsetof(bcmolt_nni_serdes_cfg_data, rx_dfe1), .type = &type_descr_uint8_t }, { .name = "rx_dfe2", .descr = "Rx DFE2", .offset = offsetof(bcmolt_nni_serdes_cfg_data, rx_dfe2), .type = &type_descr_int8_t }, { .name = "rx_dfe3", .descr = "Rx DFE3", .offset = offsetof(bcmolt_nni_serdes_cfg_data, rx_dfe3), .type = &type_descr_int8_t }, { .name = "rx_dfe4", .descr = "Rx DFE4", .offset = offsetof(bcmolt_nni_serdes_cfg_data, rx_dfe4), .type = &type_descr_int8_t }, { .name = "rx_dfe5", .descr = "Rx DFE5", .offset = offsetof(bcmolt_nni_serdes_cfg_data, rx_dfe5), .type = &type_descr_int8_t }, { .name = "tx_pre", .descr = "Tx Pre", .offset = offsetof(bcmolt_nni_serdes_cfg_data, tx_pre), .type = &type_descr_uint8_t }, { .name = "tx_main", .descr = "Tx Main", .offset = offsetof(bcmolt_nni_serdes_cfg_data, tx_main), .type = &type_descr_uint8_t }, { .name = "tx_post1", .descr = "Tx Post1", .offset = offsetof(bcmolt_nni_serdes_cfg_data, tx_post1), .type = &type_descr_uint8_t }, { .name = "tx_post2", .descr = "Tx Post2", .offset = offsetof(bcmolt_nni_serdes_cfg_data, tx_post2), .type = &type_descr_int8_t }, { .name = "tx_post3", .descr = "Tx Post3", .offset = offsetof(bcmolt_nni_serdes_cfg_data, tx_post3), .type = &type_descr_int8_t }, { .name = "tx_amp", .descr = "Tx Amp", .offset = offsetof(bcmolt_nni_serdes_cfg_data, tx_amp), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_nni_serdes_cfg_data = { .name = "bcmolt_nni_serdes_cfg_data", .descr = "cfg", .size = sizeof(bcmolt_nni_serdes_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_nni_serdes_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_nni_serdes_cfg_data_fields } } };
+
+/* ==== Object: software_error ==== */
+
+/* Group: software_error - key */
+static bcmcli_prop_descr BCM_DESCR prop_descr_software_error_key_reserved = { .name = "reserved", .descr = "Reserved (set to 0).", .access = 0, .property = BCMOLT_SOFTWARE_ERROR_KEY_ID_RESERVED, .offset = offsetof(bcmolt_software_error_key, reserved), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_software_error_key_idx = { .name = "idx", .descr = "Index", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_SOFTWARE_ERROR_KEY_ID_IDX, .offset = offsetof(bcmolt_software_error_key, idx), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr * BCM_DESCR software_error_key_prop_array[] = { &prop_descr_software_error_key_reserved, &prop_descr_software_error_key_idx };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_software_error_key_fields[] = { { .name = "reserved", .descr = "Reserved (set to 0).", .offset = offsetof(bcmolt_software_error_key, reserved), .type = &type_descr_uint32_t }, { .name = "idx", .descr = "Index", .offset = offsetof(bcmolt_software_error_key, idx), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_software_error_key = { .name = "bcmolt_software_error_key", .descr = "key", .size = sizeof(bcmolt_software_error_key), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_software_error_key_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_software_error_key_fields } } };
+
+/* Group: software_error - cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_software_error_cfg_entry = { .name = "entry", .descr = "Entry", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_SOFTWARE_ERROR_CFG_ID_ENTRY, .offset = offsetof(bcmolt_software_error_cfg_data, entry), .type = &type_descr_bcmolt_sw_error };
+static bcmcli_prop_descr * BCM_DESCR software_error_cfg_prop_array[] = { &prop_descr_software_error_cfg_entry };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_software_error_cfg_data_fields[] = { { .name = "entry", .descr = "Entry", .offset = offsetof(bcmolt_software_error_cfg_data, entry), .type = &type_descr_bcmolt_sw_error } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_software_error_cfg_data = { .name = "bcmolt_software_error_cfg_data", .descr = "cfg", .size = sizeof(bcmolt_software_error_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_software_error_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_software_error_cfg_data_fields } } };
+
+/* ==== Object: trx_calibration ==== */
+
+/* Group: trx_calibration - key */
+static bcmcli_prop_descr BCM_DESCR prop_descr_trx_calibration_key_reserved = { .name = "reserved", .descr = "Reserved (set to 0)", .access = 0, .property = BCMOLT_TRX_CALIBRATION_KEY_ID_RESERVED, .offset = offsetof(bcmolt_trx_calibration_key, reserved), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr * BCM_DESCR trx_calibration_key_prop_array[] = { &prop_descr_trx_calibration_key_reserved };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_trx_calibration_key_fields[] = { { .name = "reserved", .descr = "Reserved (set to 0)", .offset = offsetof(bcmolt_trx_calibration_key, reserved), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_trx_calibration_key = { .name = "bcmolt_trx_calibration_key", .descr = "key", .size = sizeof(bcmolt_trx_calibration_key), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_trx_calibration_key_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_trx_calibration_key_fields } } };
+
+/* Group: trx_calibration - start_capture_window */
+static bcmcli_prop_descr BCM_DESCR prop_descr_trx_calibration_start_capture_window_pon_ni = { .name = "pon_ni", .descr = "pon_ni", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_PON_NI, .offset = offsetof(bcmolt_trx_calibration_start_capture_window_data, pon_ni), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_trx_calibration_start_capture_window_trigger = { .name = "trigger", .descr = "trigger", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_TRIGGER, .offset = offsetof(bcmolt_trx_calibration_start_capture_window_data, trigger), .type = &type_descr_bcmolt_trx_calibration_trigger };
+static bcmcli_prop_descr BCM_DESCR prop_descr_trx_calibration_start_capture_window_strobe = { .name = "strobe", .descr = "strobe", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_STROBE, .offset = offsetof(bcmolt_trx_calibration_start_capture_window_data, strobe), .type = &type_descr_bcmolt_capture_strobe_signal };
+static bcmcli_prop_descr BCM_DESCR prop_descr_trx_calibration_start_capture_window_window_mode = { .name = "window_mode", .descr = "window mode", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_WINDOW_MODE, .offset = offsetof(bcmolt_trx_calibration_start_capture_window_data, window_mode), .type = &type_descr_bcmolt_trx_calibration_window_mode };
+static bcmcli_prop_descr BCM_DESCR prop_descr_trx_calibration_start_capture_window_onu_id = { .name = "onu_id", .descr = "onu id", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_ONU_ID, .offset = offsetof(bcmolt_trx_calibration_start_capture_window_data, onu_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_trx_calibration_start_capture_window_trigger_position = { .name = "trigger_position", .descr = "trigger position", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_TRIGGER_POSITION, .offset = offsetof(bcmolt_trx_calibration_start_capture_window_data, trigger_position), .type = &type_descr_bcmolt_trx_calibration_trigger_position };
+static bcmcli_prop_descr BCM_DESCR prop_descr_trx_calibration_start_capture_window_stop_due_to_corrupt_strobe = { .name = "stop_due_to_corrupt_strobe", .descr = "enable/disable corrupt strobe from MAC to terminate stat window", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_STOP_DUE_TO_CORRUPT_STROBE, .offset = offsetof(bcmolt_trx_calibration_start_capture_window_data, stop_due_to_corrupt_strobe), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_trx_calibration_start_capture_window_start_offset = { .name = "start_offset", .descr = "start offset", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_START_OFFSET, .offset = offsetof(bcmolt_trx_calibration_start_capture_window_data, start_offset), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_trx_calibration_start_capture_window_end_offset = { .name = "end_offset", .descr = "end offset", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_END_OFFSET, .offset = offsetof(bcmolt_trx_calibration_start_capture_window_data, end_offset), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_trx_calibration_start_capture_window_number_of_cycles = { .name = "number_of_cycles", .descr = "number of cycles", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_TRX_CALIBRATION_START_CAPTURE_WINDOW_ID_NUMBER_OF_CYCLES, .offset = offsetof(bcmolt_trx_calibration_start_capture_window_data, number_of_cycles), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr * BCM_DESCR trx_calibration_start_capture_window_prop_array[] = { &prop_descr_trx_calibration_start_capture_window_pon_ni, &prop_descr_trx_calibration_start_capture_window_trigger, &prop_descr_trx_calibration_start_capture_window_strobe, &prop_descr_trx_calibration_start_capture_window_window_mode, &prop_descr_trx_calibration_start_capture_window_onu_id, &prop_descr_trx_calibration_start_capture_window_trigger_position, &prop_descr_trx_calibration_start_capture_window_stop_due_to_corrupt_strobe, &prop_descr_trx_calibration_start_capture_window_start_offset, &prop_descr_trx_calibration_start_capture_window_end_offset, &prop_descr_trx_calibration_start_capture_window_number_of_cycles };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_trx_calibration_start_capture_window_data_fields[] = { { .name = "pon_ni", .descr = "pon_ni", .offset = offsetof(bcmolt_trx_calibration_start_capture_window_data, pon_ni), .type = &type_descr_uint8_t }, { .name = "trigger", .descr = "trigger", .offset = offsetof(bcmolt_trx_calibration_start_capture_window_data, trigger), .type = &type_descr_bcmolt_trx_calibration_trigger }, { .name = "strobe", .descr = "strobe", .offset = offsetof(bcmolt_trx_calibration_start_capture_window_data, strobe), .type = &type_descr_bcmolt_capture_strobe_signal }, { .name = "window_mode", .descr = "window mode", .offset = offsetof(bcmolt_trx_calibration_start_capture_window_data, window_mode), .type = &type_descr_bcmolt_trx_calibration_window_mode }, { .name = "onu_id", .descr = "onu id", .offset = offsetof(bcmolt_trx_calibration_start_capture_window_data, onu_id), .type = &type_descr_uint16_t }, { .name = "trigger_position", .descr = "trigger position", .offset = offsetof(bcmolt_trx_calibration_start_capture_window_data, trigger_position), .type = &type_descr_bcmolt_trx_calibration_trigger_position }, { .name = "stop_due_to_corrupt_strobe", .descr = "enable/disable corrupt strobe from MAC to terminate stat window", .offset = offsetof(bcmolt_trx_calibration_start_capture_window_data, stop_due_to_corrupt_strobe), .type = &type_descr_bcmos_bool }, { .name = "start_offset", .descr = "start offset", .offset = offsetof(bcmolt_trx_calibration_start_capture_window_data, start_offset), .type = &type_descr_uint16_t }, { .name = "end_offset", .descr = "end offset", .offset = offsetof(bcmolt_trx_calibration_start_capture_window_data, end_offset), .type = &type_descr_uint16_t }, { .name = "number_of_cycles", .descr = "number of cycles", .offset = offsetof(bcmolt_trx_calibration_start_capture_window_data, number_of_cycles), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_trx_calibration_start_capture_window_data = { .name = "bcmolt_trx_calibration_start_capture_window_data", .descr = "start capture window", .size = sizeof(bcmolt_trx_calibration_start_capture_window_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_trx_calibration_start_capture_window_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_trx_calibration_start_capture_window_data_fields } } };
+
+/* Group: trx_calibration - capture_window_and_statistic_completed */
+static bcmcli_prop_descr BCM_DESCR prop_descr_trx_calibration_capture_window_and_statistic_completed_data_window = { .name = "data_window", .descr = "data window", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_DATA_WINDOW, .offset = offsetof(bcmolt_trx_calibration_capture_window_and_statistic_completed_data, data_window), .type = &type_descr_bcmolt_u32_list_u32_max_500_hex };
+static bcmcli_prop_descr BCM_DESCR prop_descr_trx_calibration_capture_window_and_statistic_completed_strobe_window = { .name = "strobe_window", .descr = "strobe window", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_STROBE_WINDOW, .offset = offsetof(bcmolt_trx_calibration_capture_window_and_statistic_completed_data, strobe_window), .type = &type_descr_bcmolt_u32_list_u32_max_500_hex };
+static bcmcli_prop_descr BCM_DESCR prop_descr_trx_calibration_capture_window_and_statistic_completed_edge_rise_min_min = { .name = "edge_rise_min_min", .descr = "edge rise min min", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_RISE_MIN_MIN, .offset = offsetof(bcmolt_trx_calibration_capture_window_and_statistic_completed_data, edge_rise_min_min), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_trx_calibration_capture_window_and_statistic_completed_edge_rise_min_max = { .name = "edge_rise_min_max", .descr = "edge rise min max", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_RISE_MIN_MAX, .offset = offsetof(bcmolt_trx_calibration_capture_window_and_statistic_completed_data, edge_rise_min_max), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_trx_calibration_capture_window_and_statistic_completed_edge_rise_max_min = { .name = "edge_rise_max_min", .descr = "edge rise max min", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_RISE_MAX_MIN, .offset = offsetof(bcmolt_trx_calibration_capture_window_and_statistic_completed_data, edge_rise_max_min), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_trx_calibration_capture_window_and_statistic_completed_edge_rise_max_max = { .name = "edge_rise_max_max", .descr = "edge rise max max", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_RISE_MAX_MAX, .offset = offsetof(bcmolt_trx_calibration_capture_window_and_statistic_completed_data, edge_rise_max_max), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_trx_calibration_capture_window_and_statistic_completed_edge_fall_min_min = { .name = "edge_fall_min_min", .descr = "edge fall min min ", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_FALL_MIN_MIN, .offset = offsetof(bcmolt_trx_calibration_capture_window_and_statistic_completed_data, edge_fall_min_min), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_trx_calibration_capture_window_and_statistic_completed_edge_fall_min_max = { .name = "edge_fall_min_max", .descr = "edge fall min max", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_FALL_MIN_MAX, .offset = offsetof(bcmolt_trx_calibration_capture_window_and_statistic_completed_data, edge_fall_min_max), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_trx_calibration_capture_window_and_statistic_completed_edge_fall_max_min = { .name = "edge_fall_max_min", .descr = "edge fall max min", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_FALL_MAX_MIN, .offset = offsetof(bcmolt_trx_calibration_capture_window_and_statistic_completed_data, edge_fall_max_min), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_trx_calibration_capture_window_and_statistic_completed_edge_fall_max_max = { .name = "edge_fall_max_max", .descr = "edge fall max max", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_EDGE_FALL_MAX_MAX, .offset = offsetof(bcmolt_trx_calibration_capture_window_and_statistic_completed_data, edge_fall_max_max), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_trx_calibration_capture_window_and_statistic_completed_result = { .name = "result", .descr = "result", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_TRX_CALIBRATION_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED_ID_RESULT, .offset = offsetof(bcmolt_trx_calibration_capture_window_and_statistic_completed_data, result), .type = &type_descr_bcmolt_result };
+static bcmcli_prop_descr * BCM_DESCR trx_calibration_capture_window_and_statistic_completed_prop_array[] = { &prop_descr_trx_calibration_capture_window_and_statistic_completed_data_window, &prop_descr_trx_calibration_capture_window_and_statistic_completed_strobe_window, &prop_descr_trx_calibration_capture_window_and_statistic_completed_edge_rise_min_min, &prop_descr_trx_calibration_capture_window_and_statistic_completed_edge_rise_min_max, &prop_descr_trx_calibration_capture_window_and_statistic_completed_edge_rise_max_min, &prop_descr_trx_calibration_capture_window_and_statistic_completed_edge_rise_max_max, &prop_descr_trx_calibration_capture_window_and_statistic_completed_edge_fall_min_min, &prop_descr_trx_calibration_capture_window_and_statistic_completed_edge_fall_min_max, &prop_descr_trx_calibration_capture_window_and_statistic_completed_edge_fall_max_min, &prop_descr_trx_calibration_capture_window_and_statistic_completed_edge_fall_max_max, &prop_descr_trx_calibration_capture_window_and_statistic_completed_result };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_trx_calibration_capture_window_and_statistic_completed_data_fields[] = { { .name = "data_window", .descr = "data window", .offset = offsetof(bcmolt_trx_calibration_capture_window_and_statistic_completed_data, data_window), .type = &type_descr_bcmolt_u32_list_u32_max_500_hex }, { .name = "strobe_window", .descr = "strobe window", .offset = offsetof(bcmolt_trx_calibration_capture_window_and_statistic_completed_data, strobe_window), .type = &type_descr_bcmolt_u32_list_u32_max_500_hex }, { .name = "edge_rise_min_min", .descr = "edge rise min min", .offset = offsetof(bcmolt_trx_calibration_capture_window_and_statistic_completed_data, edge_rise_min_min), .type = &type_descr_uint64_t }, { .name = "edge_rise_min_max", .descr = "edge rise min max", .offset = offsetof(bcmolt_trx_calibration_capture_window_and_statistic_completed_data, edge_rise_min_max), .type = &type_descr_uint64_t }, { .name = "edge_rise_max_min", .descr = "edge rise max min", .offset = offsetof(bcmolt_trx_calibration_capture_window_and_statistic_completed_data, edge_rise_max_min), .type = &type_descr_uint64_t }, { .name = "edge_rise_max_max", .descr = "edge rise max max", .offset = offsetof(bcmolt_trx_calibration_capture_window_and_statistic_completed_data, edge_rise_max_max), .type = &type_descr_uint64_t }, { .name = "edge_fall_min_min", .descr = "edge fall min min ", .offset = offsetof(bcmolt_trx_calibration_capture_window_and_statistic_completed_data, edge_fall_min_min), .type = &type_descr_uint64_t }, { .name = "edge_fall_min_max", .descr = "edge fall min max", .offset = offsetof(bcmolt_trx_calibration_capture_window_and_statistic_completed_data, edge_fall_min_max), .type = &type_descr_uint64_t }, { .name = "edge_fall_max_min", .descr = "edge fall max min", .offset = offsetof(bcmolt_trx_calibration_capture_window_and_statistic_completed_data, edge_fall_max_min), .type = &type_descr_uint64_t }, { .name = "edge_fall_max_max", .descr = "edge fall max max", .offset = offsetof(bcmolt_trx_calibration_capture_window_and_statistic_completed_data, edge_fall_max_max), .type = &type_descr_uint64_t }, { .name = "result", .descr = "result", .offset = offsetof(bcmolt_trx_calibration_capture_window_and_statistic_completed_data, result), .type = &type_descr_bcmolt_result } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_trx_calibration_capture_window_and_statistic_completed_data = { .name = "bcmolt_trx_calibration_capture_window_and_statistic_completed_data", .descr = "Capture window and statistic completed", .size = sizeof(bcmolt_trx_calibration_capture_window_and_statistic_completed_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_trx_calibration_capture_window_and_statistic_completed_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_trx_calibration_capture_window_and_statistic_completed_data_fields } } };
+
+/* Group: trx_calibration - stop_capture_window */
+static bcmcli_prop_descr BCM_DESCR prop_descr_trx_calibration_stop_capture_window_pon_ni = { .name = "pon_ni", .descr = "pon_ni", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_TRX_CALIBRATION_STOP_CAPTURE_WINDOW_ID_PON_NI, .offset = offsetof(bcmolt_trx_calibration_stop_capture_window_data, pon_ni), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr * BCM_DESCR trx_calibration_stop_capture_window_prop_array[] = { &prop_descr_trx_calibration_stop_capture_window_pon_ni };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_trx_calibration_stop_capture_window_data_fields[] = { { .name = "pon_ni", .descr = "pon_ni", .offset = offsetof(bcmolt_trx_calibration_stop_capture_window_data, pon_ni), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_trx_calibration_stop_capture_window_data = { .name = "bcmolt_trx_calibration_stop_capture_window_data", .descr = "stop capture window", .size = sizeof(bcmolt_trx_calibration_stop_capture_window_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_trx_calibration_stop_capture_window_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_trx_calibration_stop_capture_window_data_fields } } };
+
+/* Group: trx_calibration - auto_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_trx_calibration_auto_cfg_capture_window_and_statistic_completed = { .name = "capture_window_and_statistic_completed", .descr = "If true, indications of type \"capture_window_and_statistic_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_TRX_CALIBRATION_AUTO_CFG_ID_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED, .offset = offsetof(bcmolt_trx_calibration_auto_cfg_data, capture_window_and_statistic_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr * BCM_DESCR trx_calibration_auto_cfg_prop_array[] = { &prop_descr_trx_calibration_auto_cfg_capture_window_and_statistic_completed };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_trx_calibration_auto_cfg_data_fields[] = { { .name = "capture_window_and_statistic_completed", .descr = "If true, indications of type \"capture_window_and_statistic_completed\" will be generated.", .offset = offsetof(bcmolt_trx_calibration_auto_cfg_data, capture_window_and_statistic_completed), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_trx_calibration_auto_cfg_data = { .name = "bcmolt_trx_calibration_auto_cfg_data", .descr = "Indication Configuration", .size = sizeof(bcmolt_trx_calibration_auto_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_trx_calibration_auto_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_trx_calibration_auto_cfg_data_fields } } };
+
+/* ==== Object: xgpon_alloc ==== */
+
+/* Group: xgpon_alloc - key */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_alloc_key_pon_ni = { .name = "pon_ni", .descr = "PON network interface", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ALLOC_KEY_ID_PON_NI, .offset = offsetof(bcmolt_xgpon_alloc_key, pon_ni), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_alloc_key_alloc_id = { .name = "alloc_id", .descr = "Alloc ID", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ALLOC_KEY_ID_ALLOC_ID, .offset = offsetof(bcmolt_xgpon_alloc_key, alloc_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr * BCM_DESCR xgpon_alloc_key_prop_array[] = { &prop_descr_xgpon_alloc_key_pon_ni, &prop_descr_xgpon_alloc_key_alloc_id };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_alloc_key_fields[] = { { .name = "pon_ni", .descr = "PON network interface", .offset = offsetof(bcmolt_xgpon_alloc_key, pon_ni), .type = &type_descr_uint8_t }, { .name = "alloc_id", .descr = "Alloc ID", .offset = offsetof(bcmolt_xgpon_alloc_key, alloc_id), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_alloc_key = { .name = "bcmolt_xgpon_alloc_key", .descr = "key", .size = sizeof(bcmolt_xgpon_alloc_key), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_alloc_key_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_alloc_key_fields } } };
+
+/* Group: xgpon_alloc - cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_alloc_cfg_state = { .name = "state", .descr = "Current Alloc ID state", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_XGPON_ALLOC_CFG_ID_STATE, .offset = offsetof(bcmolt_xgpon_alloc_cfg_data, state), .type = &type_descr_bcmolt_alloc_state };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_alloc_cfg_sla = { .name = "sla", .descr = "Alloc ID SLA", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ALLOC_CFG_ID_SLA, .offset = offsetof(bcmolt_xgpon_alloc_cfg_data, sla), .type = &type_descr_bcmolt_pon_alloc_sla };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_alloc_cfg_onu_id = { .name = "onu_id", .descr = "ONU ID the alloc ID is assigned to", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ALLOC_CFG_ID_ONU_ID, .offset = offsetof(bcmolt_xgpon_alloc_cfg_data, onu_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_alloc_cfg_collect_stats = { .name = "collect_stats", .descr = "Enable statistics collection for this alloc ID", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ALLOC_CFG_ID_COLLECT_STATS, .offset = offsetof(bcmolt_xgpon_alloc_cfg_data, collect_stats), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr * BCM_DESCR xgpon_alloc_cfg_prop_array[] = { &prop_descr_xgpon_alloc_cfg_state, &prop_descr_xgpon_alloc_cfg_sla, &prop_descr_xgpon_alloc_cfg_onu_id, &prop_descr_xgpon_alloc_cfg_collect_stats };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_alloc_cfg_data_fields[] = { { .name = "state", .descr = "Current Alloc ID state", .offset = offsetof(bcmolt_xgpon_alloc_cfg_data, state), .type = &type_descr_bcmolt_alloc_state }, { .name = "sla", .descr = "Alloc ID SLA", .offset = offsetof(bcmolt_xgpon_alloc_cfg_data, sla), .type = &type_descr_bcmolt_pon_alloc_sla }, { .name = "onu_id", .descr = "ONU ID the alloc ID is assigned to", .offset = offsetof(bcmolt_xgpon_alloc_cfg_data, onu_id), .type = &type_descr_uint16_t }, { .name = "collect_stats", .descr = "Enable statistics collection for this alloc ID", .offset = offsetof(bcmolt_xgpon_alloc_cfg_data, collect_stats), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_alloc_cfg_data = { .name = "bcmolt_xgpon_alloc_cfg_data", .descr = "cfg", .size = sizeof(bcmolt_xgpon_alloc_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_alloc_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_alloc_cfg_data_fields } } };
+
+/* Group: xgpon_alloc - configuration_completed */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_alloc_configuration_completed_status = { .name = "status", .descr = "status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ALLOC_CONFIGURATION_COMPLETED_ID_STATUS, .offset = offsetof(bcmolt_xgpon_alloc_configuration_completed_data, status), .type = &type_descr_bcmolt_result };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_alloc_configuration_completed_new_state = { .name = "new_state", .descr = "new state", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ALLOC_CONFIGURATION_COMPLETED_ID_NEW_STATE, .offset = offsetof(bcmolt_xgpon_alloc_configuration_completed_data, new_state), .type = &type_descr_bcmolt_alloc_state };
+static bcmcli_prop_descr * BCM_DESCR xgpon_alloc_configuration_completed_prop_array[] = { &prop_descr_xgpon_alloc_configuration_completed_status, &prop_descr_xgpon_alloc_configuration_completed_new_state };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_alloc_configuration_completed_data_fields[] = { { .name = "status", .descr = "status", .offset = offsetof(bcmolt_xgpon_alloc_configuration_completed_data, status), .type = &type_descr_bcmolt_result }, { .name = "new_state", .descr = "new state", .offset = offsetof(bcmolt_xgpon_alloc_configuration_completed_data, new_state), .type = &type_descr_bcmolt_alloc_state } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_alloc_configuration_completed_data = { .name = "bcmolt_xgpon_alloc_configuration_completed_data", .descr = "Configuration Completed", .size = sizeof(bcmolt_xgpon_alloc_configuration_completed_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_alloc_configuration_completed_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_alloc_configuration_completed_data_fields } } };
+
+/* Group: xgpon_alloc - get_stats */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_alloc_get_stats_num_of_cycles = { .name = "num_of_cycles", .descr = "The number of cycles to run statistics collection", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ALLOC_GET_STATS_ID_NUM_OF_CYCLES, .offset = offsetof(bcmolt_xgpon_alloc_get_stats_data, num_of_cycles), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr * BCM_DESCR xgpon_alloc_get_stats_prop_array[] = { &prop_descr_xgpon_alloc_get_stats_num_of_cycles };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_alloc_get_stats_data_fields[] = { { .name = "num_of_cycles", .descr = "The number of cycles to run statistics collection", .offset = offsetof(bcmolt_xgpon_alloc_get_stats_data, num_of_cycles), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_alloc_get_stats_data = { .name = "bcmolt_xgpon_alloc_get_stats_data", .descr = "Run statistics collection for a given period of time", .size = sizeof(bcmolt_xgpon_alloc_get_stats_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_alloc_get_stats_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_alloc_get_stats_data_fields } } };
+
+/* Group: xgpon_alloc - get_alloc_stats_completed */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_alloc_get_alloc_stats_completed_status = { .name = "status", .descr = "status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_STATUS, .offset = offsetof(bcmolt_xgpon_alloc_get_alloc_stats_completed_data, status), .type = &type_descr_bcmolt_result };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_alloc_get_alloc_stats_completed_average_nsr_used = { .name = "average_nsr_used", .descr = "Average NSR used words", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_NSR_USED, .offset = offsetof(bcmolt_xgpon_alloc_get_alloc_stats_completed_data, average_nsr_used), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_alloc_get_alloc_stats_completed_average_nsr_allocated = { .name = "average_nsr_allocated", .descr = "Average NSR allocated words", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_NSR_ALLOCATED, .offset = offsetof(bcmolt_xgpon_alloc_get_alloc_stats_completed_data, average_nsr_allocated), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_alloc_get_alloc_stats_completed_average_sr_report = { .name = "average_sr_report", .descr = "Average SR report", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ALLOC_GET_ALLOC_STATS_COMPLETED_ID_AVERAGE_SR_REPORT, .offset = offsetof(bcmolt_xgpon_alloc_get_alloc_stats_completed_data, average_sr_report), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr * BCM_DESCR xgpon_alloc_get_alloc_stats_completed_prop_array[] = { &prop_descr_xgpon_alloc_get_alloc_stats_completed_status, &prop_descr_xgpon_alloc_get_alloc_stats_completed_average_nsr_used, &prop_descr_xgpon_alloc_get_alloc_stats_completed_average_nsr_allocated, &prop_descr_xgpon_alloc_get_alloc_stats_completed_average_sr_report };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_alloc_get_alloc_stats_completed_data_fields[] = { { .name = "status", .descr = "status", .offset = offsetof(bcmolt_xgpon_alloc_get_alloc_stats_completed_data, status), .type = &type_descr_bcmolt_result }, { .name = "average_nsr_used", .descr = "Average NSR used words", .offset = offsetof(bcmolt_xgpon_alloc_get_alloc_stats_completed_data, average_nsr_used), .type = &type_descr_uint32_t }, { .name = "average_nsr_allocated", .descr = "Average NSR allocated words", .offset = offsetof(bcmolt_xgpon_alloc_get_alloc_stats_completed_data, average_nsr_allocated), .type = &type_descr_uint32_t }, { .name = "average_sr_report", .descr = "Average SR report", .offset = offsetof(bcmolt_xgpon_alloc_get_alloc_stats_completed_data, average_sr_report), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_alloc_get_alloc_stats_completed_data = { .name = "bcmolt_xgpon_alloc_get_alloc_stats_completed_data", .descr = "Collected alloc ID statistics from get_stats operation", .size = sizeof(bcmolt_xgpon_alloc_get_alloc_stats_completed_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_alloc_get_alloc_stats_completed_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_alloc_get_alloc_stats_completed_data_fields } } };
+
+/* Group: xgpon_alloc - set_state */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_alloc_set_state_state = { .name = "state", .descr = "State", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ALLOC_SET_STATE_ID_STATE, .offset = offsetof(bcmolt_xgpon_alloc_set_state_data, state), .type = &type_descr_bcmolt_alloc_operation };
+static bcmcli_prop_descr * BCM_DESCR xgpon_alloc_set_state_prop_array[] = { &prop_descr_xgpon_alloc_set_state_state };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_alloc_set_state_data_fields[] = { { .name = "state", .descr = "State", .offset = offsetof(bcmolt_xgpon_alloc_set_state_data, state), .type = &type_descr_bcmolt_alloc_operation } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_alloc_set_state_data = { .name = "bcmolt_xgpon_alloc_set_state_data", .descr = "Sets the alloc's activation state.  This is only used for protection switching on an active-standby PON.  In normal operation, this isn't necessary since allocs are activated/deactivated automatically along with the ONU.", .size = sizeof(bcmolt_xgpon_alloc_set_state_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_alloc_set_state_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_alloc_set_state_data_fields } } };
+
+/* Group: xgpon_alloc - stat */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_alloc_stat_rx_bytes = { .name = "rx_bytes", .descr = "Number of alloc ID received bytes.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ALLOC_STAT_ID_RX_BYTES, .offset = offsetof(bcmolt_xgpon_alloc_stat_data, rx_bytes), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr * BCM_DESCR xgpon_alloc_stat_prop_array[] = { &prop_descr_xgpon_alloc_stat_rx_bytes };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_alloc_stat_data_fields[] = { { .name = "rx_bytes", .descr = "Number of alloc ID received bytes.", .offset = offsetof(bcmolt_xgpon_alloc_stat_data, rx_bytes), .type = &type_descr_uint64_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_alloc_stat_data = { .name = "bcmolt_xgpon_alloc_stat_data", .descr = "stat", .size = sizeof(bcmolt_xgpon_alloc_stat_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_alloc_stat_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_alloc_stat_data_fields } } };
+
+/* Group: xgpon_alloc - stat_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_alloc_stat_cfg_cfg = { .name = "cfg", .descr = "Statistic alarm configuration.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ALLOC_STAT_CFG_ID_CFG, .offset = offsetof(bcmolt_xgpon_alloc_stat_cfg_data, cfg), .type = &type_descr_bcmolt_stat_alarm_config };
+static bcmcli_prop_descr * BCM_DESCR xgpon_alloc_stat_cfg_prop_array[] = { &prop_descr_xgpon_alloc_stat_cfg_cfg };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_alloc_stat_cfg_data_fields[] = { { .name = "cfg", .descr = "Statistic alarm configuration.", .offset = offsetof(bcmolt_xgpon_alloc_stat_cfg_data, cfg), .type = &type_descr_bcmolt_stat_alarm_config } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_alloc_stat_cfg_data = { .name = "bcmolt_xgpon_alloc_stat_cfg_data", .descr = "Statistic Configuration", .size = sizeof(bcmolt_xgpon_alloc_stat_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_alloc_stat_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_alloc_stat_cfg_data_fields } } };
+
+/* Group: xgpon_alloc - stat_alarm_raised */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_alloc_stat_alarm_raised_stat = { .name = "stat", .descr = "Statistic identifier.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ALLOC_STAT_ALARM_RAISED_ID_STAT, .offset = offsetof(bcmolt_xgpon_alloc_stat_alarm_raised_data, stat), .type = &type_descr_bcmolt_xgpon_alloc_stat_id };
+static bcmcli_prop_descr * BCM_DESCR xgpon_alloc_stat_alarm_raised_prop_array[] = { &prop_descr_xgpon_alloc_stat_alarm_raised_stat };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_alloc_stat_alarm_raised_data_fields[] = { { .name = "stat", .descr = "Statistic identifier.", .offset = offsetof(bcmolt_xgpon_alloc_stat_alarm_raised_data, stat), .type = &type_descr_bcmolt_xgpon_alloc_stat_id } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_alloc_stat_alarm_raised_data = { .name = "bcmolt_xgpon_alloc_stat_alarm_raised_data", .descr = "Sent when a configured statistic alarm condition has been met.", .size = sizeof(bcmolt_xgpon_alloc_stat_alarm_raised_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_alloc_stat_alarm_raised_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_alloc_stat_alarm_raised_data_fields } } };
+
+/* Group: xgpon_alloc - stat_alarm_cleared */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_alloc_stat_alarm_cleared_stat = { .name = "stat", .descr = "Statistic identifier.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ALLOC_STAT_ALARM_CLEARED_ID_STAT, .offset = offsetof(bcmolt_xgpon_alloc_stat_alarm_cleared_data, stat), .type = &type_descr_bcmolt_xgpon_alloc_stat_id };
+static bcmcli_prop_descr * BCM_DESCR xgpon_alloc_stat_alarm_cleared_prop_array[] = { &prop_descr_xgpon_alloc_stat_alarm_cleared_stat };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_alloc_stat_alarm_cleared_data_fields[] = { { .name = "stat", .descr = "Statistic identifier.", .offset = offsetof(bcmolt_xgpon_alloc_stat_alarm_cleared_data, stat), .type = &type_descr_bcmolt_xgpon_alloc_stat_id } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_alloc_stat_alarm_cleared_data = { .name = "bcmolt_xgpon_alloc_stat_alarm_cleared_data", .descr = "Sent when a configured statistic alarm condition is no longer met.", .size = sizeof(bcmolt_xgpon_alloc_stat_alarm_cleared_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_alloc_stat_alarm_cleared_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_alloc_stat_alarm_cleared_data_fields } } };
+
+/* Group: xgpon_alloc - auto_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_alloc_auto_cfg_configuration_completed = { .name = "configuration_completed", .descr = "If true, indications of type \"configuration_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ALLOC_AUTO_CFG_ID_CONFIGURATION_COMPLETED, .offset = offsetof(bcmolt_xgpon_alloc_auto_cfg_data, configuration_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_alloc_auto_cfg_get_alloc_stats_completed = { .name = "get_alloc_stats_completed", .descr = "If true, indications of type \"get_alloc_stats_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ALLOC_AUTO_CFG_ID_GET_ALLOC_STATS_COMPLETED, .offset = offsetof(bcmolt_xgpon_alloc_auto_cfg_data, get_alloc_stats_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_alloc_auto_cfg_stat_alarm_cleared = { .name = "stat_alarm_cleared", .descr = "If true, indications of type \"stat_alarm_cleared\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ALLOC_AUTO_CFG_ID_STAT_ALARM_CLEARED, .offset = offsetof(bcmolt_xgpon_alloc_auto_cfg_data, stat_alarm_cleared), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_alloc_auto_cfg_stat_alarm_raised = { .name = "stat_alarm_raised", .descr = "If true, indications of type \"stat_alarm_raised\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ALLOC_AUTO_CFG_ID_STAT_ALARM_RAISED, .offset = offsetof(bcmolt_xgpon_alloc_auto_cfg_data, stat_alarm_raised), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr * BCM_DESCR xgpon_alloc_auto_cfg_prop_array[] = { &prop_descr_xgpon_alloc_auto_cfg_configuration_completed, &prop_descr_xgpon_alloc_auto_cfg_get_alloc_stats_completed, &prop_descr_xgpon_alloc_auto_cfg_stat_alarm_cleared, &prop_descr_xgpon_alloc_auto_cfg_stat_alarm_raised };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_alloc_auto_cfg_data_fields[] = { { .name = "configuration_completed", .descr = "If true, indications of type \"configuration_completed\" will be generated.", .offset = offsetof(bcmolt_xgpon_alloc_auto_cfg_data, configuration_completed), .type = &type_descr_bcmos_bool }, { .name = "get_alloc_stats_completed", .descr = "If true, indications of type \"get_alloc_stats_completed\" will be generated.", .offset = offsetof(bcmolt_xgpon_alloc_auto_cfg_data, get_alloc_stats_completed), .type = &type_descr_bcmos_bool }, { .name = "stat_alarm_cleared", .descr = "If true, indications of type \"stat_alarm_cleared\" will be generated.", .offset = offsetof(bcmolt_xgpon_alloc_auto_cfg_data, stat_alarm_cleared), .type = &type_descr_bcmos_bool }, { .name = "stat_alarm_raised", .descr = "If true, indications of type \"stat_alarm_raised\" will be generated.", .offset = offsetof(bcmolt_xgpon_alloc_auto_cfg_data, stat_alarm_raised), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_alloc_auto_cfg_data = { .name = "bcmolt_xgpon_alloc_auto_cfg_data", .descr = "Indication Configuration", .size = sizeof(bcmolt_xgpon_alloc_auto_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_alloc_auto_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_alloc_auto_cfg_data_fields } } };
+
+/* ==== Object: xgpon_gem_port ==== */
+
+/* Group: xgpon_gem_port - key */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_gem_port_key_pon_ni = { .name = "pon_ni", .descr = "PON network interface", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_GEM_PORT_KEY_ID_PON_NI, .offset = offsetof(bcmolt_xgpon_gem_port_key, pon_ni), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_gem_port_key_gem_port_id = { .name = "gem_port_id", .descr = "GEM PORT ID", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_GEM_PORT_KEY_ID_GEM_PORT_ID, .offset = offsetof(bcmolt_xgpon_gem_port_key, gem_port_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr * BCM_DESCR xgpon_gem_port_key_prop_array[] = { &prop_descr_xgpon_gem_port_key_pon_ni, &prop_descr_xgpon_gem_port_key_gem_port_id };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_gem_port_key_fields[] = { { .name = "pon_ni", .descr = "PON network interface", .offset = offsetof(bcmolt_xgpon_gem_port_key, pon_ni), .type = &type_descr_uint8_t }, { .name = "gem_port_id", .descr = "GEM PORT ID", .offset = offsetof(bcmolt_xgpon_gem_port_key, gem_port_id), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_gem_port_key = { .name = "bcmolt_xgpon_gem_port_key", .descr = "key", .size = sizeof(bcmolt_xgpon_gem_port_key), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_gem_port_key_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_gem_port_key_fields } } };
+
+/* Group: xgpon_gem_port - cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_gem_port_cfg_configuration = { .name = "configuration", .descr = "GEM port configuration parameters", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_GEM_PORT_CFG_ID_CONFIGURATION, .offset = offsetof(bcmolt_xgpon_gem_port_cfg_data, configuration), .type = &type_descr_bcmolt_gem_port_configuration };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_gem_port_cfg_onu_id = { .name = "onu_id", .descr = "ONU ID this GEM port is assigned to", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_GEM_PORT_CFG_ID_ONU_ID, .offset = offsetof(bcmolt_xgpon_gem_port_cfg_data, onu_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_gem_port_cfg_gem_port_state = { .name = "gem_port_state", .descr = "Current GEM port state", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_XGPON_GEM_PORT_CFG_ID_GEM_PORT_STATE, .offset = offsetof(bcmolt_xgpon_gem_port_cfg_data, gem_port_state), .type = &type_descr_bcmolt_xgpon_gem_port_state };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_gem_port_cfg_encryption_mode = { .name = "encryption_mode", .descr = "Enable/Disable the downstream encryption mode of the GEM Port", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_GEM_PORT_CFG_ID_ENCRYPTION_MODE, .offset = offsetof(bcmolt_xgpon_gem_port_cfg_data, encryption_mode), .type = &type_descr_bcmolt_control_state };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_gem_port_cfg_upstream_destination_queue = { .name = "upstream_destination_queue", .descr = "The destination queue of the packets arriving on this GEM Port on the upstream direction", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_GEM_PORT_CFG_ID_UPSTREAM_DESTINATION_QUEUE, .offset = offsetof(bcmolt_xgpon_gem_port_cfg_data, upstream_destination_queue), .type = &type_descr_bcmolt_us_gem_port_destination };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_gem_port_cfg_control = { .name = "control", .descr = "Enable/Disable the GEM Port ID in the OLT", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_GEM_PORT_CFG_ID_CONTROL, .offset = offsetof(bcmolt_xgpon_gem_port_cfg_data, control), .type = &type_descr_bcmolt_control_state };
+static bcmcli_prop_descr * BCM_DESCR xgpon_gem_port_cfg_prop_array[] = { &prop_descr_xgpon_gem_port_cfg_configuration, &prop_descr_xgpon_gem_port_cfg_onu_id, &prop_descr_xgpon_gem_port_cfg_gem_port_state, &prop_descr_xgpon_gem_port_cfg_encryption_mode, &prop_descr_xgpon_gem_port_cfg_upstream_destination_queue, &prop_descr_xgpon_gem_port_cfg_control };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_gem_port_cfg_data_fields[] = { { .name = "configuration", .descr = "GEM port configuration parameters", .offset = offsetof(bcmolt_xgpon_gem_port_cfg_data, configuration), .type = &type_descr_bcmolt_gem_port_configuration }, { .name = "onu_id", .descr = "ONU ID this GEM port is assigned to", .offset = offsetof(bcmolt_xgpon_gem_port_cfg_data, onu_id), .type = &type_descr_uint16_t }, { .name = "gem_port_state", .descr = "Current GEM port state", .offset = offsetof(bcmolt_xgpon_gem_port_cfg_data, gem_port_state), .type = &type_descr_bcmolt_xgpon_gem_port_state }, { .name = "encryption_mode", .descr = "Enable/Disable the downstream encryption mode of the GEM Port", .offset = offsetof(bcmolt_xgpon_gem_port_cfg_data, encryption_mode), .type = &type_descr_bcmolt_control_state }, { .name = "upstream_destination_queue", .descr = "The destination queue of the packets arriving on this GEM Port on the upstream direction", .offset = offsetof(bcmolt_xgpon_gem_port_cfg_data, upstream_destination_queue), .type = &type_descr_bcmolt_us_gem_port_destination }, { .name = "control", .descr = "Enable/Disable the GEM Port ID in the OLT", .offset = offsetof(bcmolt_xgpon_gem_port_cfg_data, control), .type = &type_descr_bcmolt_control_state } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_gem_port_cfg_data = { .name = "bcmolt_xgpon_gem_port_cfg_data", .descr = "cfg", .size = sizeof(bcmolt_xgpon_gem_port_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_gem_port_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_gem_port_cfg_data_fields } } };
+
+/* Group: xgpon_gem_port - stat */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_gem_port_stat_tx_bytes = { .name = "tx_bytes", .descr = "TX bytes", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_GEM_PORT_STAT_ID_TX_BYTES, .offset = offsetof(bcmolt_xgpon_gem_port_stat_data, tx_bytes), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_gem_port_stat_tx_packets = { .name = "tx_packets", .descr = "TX packets", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_GEM_PORT_STAT_ID_TX_PACKETS, .offset = offsetof(bcmolt_xgpon_gem_port_stat_data, tx_packets), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_gem_port_stat_rx_packets = { .name = "rx_packets", .descr = "RX packets", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_GEM_PORT_STAT_ID_RX_PACKETS, .offset = offsetof(bcmolt_xgpon_gem_port_stat_data, rx_packets), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_gem_port_stat_rx_bytes = { .name = "rx_bytes", .descr = "RX bytes", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_GEM_PORT_STAT_ID_RX_BYTES, .offset = offsetof(bcmolt_xgpon_gem_port_stat_data, rx_bytes), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr * BCM_DESCR xgpon_gem_port_stat_prop_array[] = { &prop_descr_xgpon_gem_port_stat_tx_bytes, &prop_descr_xgpon_gem_port_stat_tx_packets, &prop_descr_xgpon_gem_port_stat_rx_packets, &prop_descr_xgpon_gem_port_stat_rx_bytes };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_gem_port_stat_data_fields[] = { { .name = "tx_bytes", .descr = "TX bytes", .offset = offsetof(bcmolt_xgpon_gem_port_stat_data, tx_bytes), .type = &type_descr_uint64_t }, { .name = "tx_packets", .descr = "TX packets", .offset = offsetof(bcmolt_xgpon_gem_port_stat_data, tx_packets), .type = &type_descr_uint64_t }, { .name = "rx_packets", .descr = "RX packets", .offset = offsetof(bcmolt_xgpon_gem_port_stat_data, rx_packets), .type = &type_descr_uint64_t }, { .name = "rx_bytes", .descr = "RX bytes", .offset = offsetof(bcmolt_xgpon_gem_port_stat_data, rx_bytes), .type = &type_descr_uint64_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_gem_port_stat_data = { .name = "bcmolt_xgpon_gem_port_stat_data", .descr = "stat", .size = sizeof(bcmolt_xgpon_gem_port_stat_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_gem_port_stat_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_gem_port_stat_data_fields } } };
+
+/* Group: xgpon_gem_port - stat_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_gem_port_stat_cfg_cfg = { .name = "cfg", .descr = "Statistic alarm configuration.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_GEM_PORT_STAT_CFG_ID_CFG, .offset = offsetof(bcmolt_xgpon_gem_port_stat_cfg_data, cfg), .type = &type_descr_bcmolt_stat_alarm_config };
+static bcmcli_prop_descr * BCM_DESCR xgpon_gem_port_stat_cfg_prop_array[] = { &prop_descr_xgpon_gem_port_stat_cfg_cfg };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_gem_port_stat_cfg_data_fields[] = { { .name = "cfg", .descr = "Statistic alarm configuration.", .offset = offsetof(bcmolt_xgpon_gem_port_stat_cfg_data, cfg), .type = &type_descr_bcmolt_stat_alarm_config } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_gem_port_stat_cfg_data = { .name = "bcmolt_xgpon_gem_port_stat_cfg_data", .descr = "Statistic Configuration", .size = sizeof(bcmolt_xgpon_gem_port_stat_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_gem_port_stat_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_gem_port_stat_cfg_data_fields } } };
+
+/* Group: xgpon_gem_port - stat_alarm_raised */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_gem_port_stat_alarm_raised_stat = { .name = "stat", .descr = "Statistic identifier.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_GEM_PORT_STAT_ALARM_RAISED_ID_STAT, .offset = offsetof(bcmolt_xgpon_gem_port_stat_alarm_raised_data, stat), .type = &type_descr_bcmolt_xgpon_gem_port_stat_id };
+static bcmcli_prop_descr * BCM_DESCR xgpon_gem_port_stat_alarm_raised_prop_array[] = { &prop_descr_xgpon_gem_port_stat_alarm_raised_stat };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_gem_port_stat_alarm_raised_data_fields[] = { { .name = "stat", .descr = "Statistic identifier.", .offset = offsetof(bcmolt_xgpon_gem_port_stat_alarm_raised_data, stat), .type = &type_descr_bcmolt_xgpon_gem_port_stat_id } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_gem_port_stat_alarm_raised_data = { .name = "bcmolt_xgpon_gem_port_stat_alarm_raised_data", .descr = "Sent when a configured statistic alarm condition has been met.", .size = sizeof(bcmolt_xgpon_gem_port_stat_alarm_raised_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_gem_port_stat_alarm_raised_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_gem_port_stat_alarm_raised_data_fields } } };
+
+/* Group: xgpon_gem_port - stat_alarm_cleared */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_gem_port_stat_alarm_cleared_stat = { .name = "stat", .descr = "Statistic identifier.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_GEM_PORT_STAT_ALARM_CLEARED_ID_STAT, .offset = offsetof(bcmolt_xgpon_gem_port_stat_alarm_cleared_data, stat), .type = &type_descr_bcmolt_xgpon_gem_port_stat_id };
+static bcmcli_prop_descr * BCM_DESCR xgpon_gem_port_stat_alarm_cleared_prop_array[] = { &prop_descr_xgpon_gem_port_stat_alarm_cleared_stat };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_gem_port_stat_alarm_cleared_data_fields[] = { { .name = "stat", .descr = "Statistic identifier.", .offset = offsetof(bcmolt_xgpon_gem_port_stat_alarm_cleared_data, stat), .type = &type_descr_bcmolt_xgpon_gem_port_stat_id } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_gem_port_stat_alarm_cleared_data = { .name = "bcmolt_xgpon_gem_port_stat_alarm_cleared_data", .descr = "Sent when a configured statistic alarm condition is no longer met.", .size = sizeof(bcmolt_xgpon_gem_port_stat_alarm_cleared_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_gem_port_stat_alarm_cleared_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_gem_port_stat_alarm_cleared_data_fields } } };
+
+/* Group: xgpon_gem_port - auto_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_gem_port_auto_cfg_stat_alarm_cleared = { .name = "stat_alarm_cleared", .descr = "If true, indications of type \"stat_alarm_cleared\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_GEM_PORT_AUTO_CFG_ID_STAT_ALARM_CLEARED, .offset = offsetof(bcmolt_xgpon_gem_port_auto_cfg_data, stat_alarm_cleared), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_gem_port_auto_cfg_stat_alarm_raised = { .name = "stat_alarm_raised", .descr = "If true, indications of type \"stat_alarm_raised\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_GEM_PORT_AUTO_CFG_ID_STAT_ALARM_RAISED, .offset = offsetof(bcmolt_xgpon_gem_port_auto_cfg_data, stat_alarm_raised), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr * BCM_DESCR xgpon_gem_port_auto_cfg_prop_array[] = { &prop_descr_xgpon_gem_port_auto_cfg_stat_alarm_cleared, &prop_descr_xgpon_gem_port_auto_cfg_stat_alarm_raised };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_gem_port_auto_cfg_data_fields[] = { { .name = "stat_alarm_cleared", .descr = "If true, indications of type \"stat_alarm_cleared\" will be generated.", .offset = offsetof(bcmolt_xgpon_gem_port_auto_cfg_data, stat_alarm_cleared), .type = &type_descr_bcmos_bool }, { .name = "stat_alarm_raised", .descr = "If true, indications of type \"stat_alarm_raised\" will be generated.", .offset = offsetof(bcmolt_xgpon_gem_port_auto_cfg_data, stat_alarm_raised), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_gem_port_auto_cfg_data = { .name = "bcmolt_xgpon_gem_port_auto_cfg_data", .descr = "Indication Configuration", .size = sizeof(bcmolt_xgpon_gem_port_auto_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_gem_port_auto_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_gem_port_auto_cfg_data_fields } } };
+
+/* ==== Object: xgpon_iwf ==== */
+
+/* Group: xgpon_iwf - key */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_iwf_key_pon_ni = { .name = "pon_ni", .descr = "PON network interface", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_IWF_KEY_ID_PON_NI, .offset = offsetof(bcmolt_xgpon_iwf_key, pon_ni), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr * BCM_DESCR xgpon_iwf_key_prop_array[] = { &prop_descr_xgpon_iwf_key_pon_ni };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_iwf_key_fields[] = { { .name = "pon_ni", .descr = "PON network interface", .offset = offsetof(bcmolt_xgpon_iwf_key, pon_ni), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_iwf_key = { .name = "bcmolt_xgpon_iwf_key", .descr = "key", .size = sizeof(bcmolt_xgpon_iwf_key), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_iwf_key_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_iwf_key_fields } } };
+
+/* Group: xgpon_iwf - cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_iwf_cfg_us_otag_direct_tpid = { .name = "us_otag_direct_tpid", .descr = "TPID value of the VLAN tag added to upstream packet", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_IWF_CFG_ID_US_OTAG_DIRECT_TPID, .offset = offsetof(bcmolt_xgpon_iwf_cfg_data, us_otag_direct_tpid), .type = &type_descr_uint16_t_hex };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_iwf_cfg_ds_tpid = { .name = "ds_tpid", .descr = "Packets marked with one of the five configured DS TPID options will be forwarded, all the rest will be dropped", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_IWF_CFG_ID_DS_TPID, .offset = offsetof(bcmolt_xgpon_iwf_cfg_data, ds_tpid), .type = &type_descr_bcmolt_arr_u16_5_hex };
+static bcmcli_prop_descr * BCM_DESCR xgpon_iwf_cfg_prop_array[] = { &prop_descr_xgpon_iwf_cfg_us_otag_direct_tpid, &prop_descr_xgpon_iwf_cfg_ds_tpid };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_iwf_cfg_data_fields[] = { { .name = "us_otag_direct_tpid", .descr = "TPID value of the VLAN tag added to upstream packet", .offset = offsetof(bcmolt_xgpon_iwf_cfg_data, us_otag_direct_tpid), .type = &type_descr_uint16_t_hex }, { .name = "ds_tpid", .descr = "Packets marked with one of the five configured DS TPID options will be forwarded, all the rest will be dropped", .offset = offsetof(bcmolt_xgpon_iwf_cfg_data, ds_tpid), .type = &type_descr_bcmolt_arr_u16_5_hex } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_iwf_cfg_data = { .name = "bcmolt_xgpon_iwf_cfg_data", .descr = "cfg", .size = sizeof(bcmolt_xgpon_iwf_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_iwf_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_iwf_cfg_data_fields } } };
+
+/* ==== Object: xgpon_ni ==== */
+
+/* Group: xgpon_ni - key */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_key_pon_ni = { .name = "pon_ni", .descr = "PON network interface", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_KEY_ID_PON_NI, .offset = offsetof(bcmolt_xgpon_ni_key, pon_ni), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr * BCM_DESCR xgpon_ni_key_prop_array[] = { &prop_descr_xgpon_ni_key_pon_ni };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_key_fields[] = { { .name = "pon_ni", .descr = "PON network interface", .offset = offsetof(bcmolt_xgpon_ni_key, pon_ni), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_key = { .name = "bcmolt_xgpon_ni_key", .descr = "key", .size = sizeof(bcmolt_xgpon_ni_key), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_ni_key_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_ni_key_fields } } };
+
+/* Group: xgpon_ni - cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_cfg_hw_pon_id = { .name = "hw_pon_id", .descr = "51 bit PON identifier. This attribute is part of the downstream physical synchronization block (PSBd)", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_CFG_ID_HW_PON_ID, .offset = offsetof(bcmolt_xgpon_ni_cfg_data, hw_pon_id), .type = &type_descr_bcmolt_hw_pon_id };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_cfg_available_bandwidth = { .name = "available_bandwidth", .descr = "PON available bandwidth parameters", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_XGPON_NI_CFG_ID_AVAILABLE_BANDWIDTH, .offset = offsetof(bcmolt_xgpon_ni_cfg_data, available_bandwidth), .type = &type_descr_bcmolt_pon_available_bandwidth };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_cfg_number_of_active_onus = { .name = "number_of_active_onus", .descr = "Number of active ONUs on the PON", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_XGPON_NI_CFG_ID_NUMBER_OF_ACTIVE_ONUS, .offset = offsetof(bcmolt_xgpon_ni_cfg_data, number_of_active_onus), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_cfg_pon_status = { .name = "pon_status", .descr = "PON status parameters", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_XGPON_NI_CFG_ID_PON_STATUS, .offset = offsetof(bcmolt_xgpon_ni_cfg_data, pon_status), .type = &type_descr_bcmolt_pon_status };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_cfg_pon_distance = { .name = "pon_distance", .descr = "PON distance", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_CFG_ID_PON_DISTANCE, .offset = offsetof(bcmolt_xgpon_ni_cfg_data, pon_distance), .type = &type_descr_bcmolt_pon_distance };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_cfg_ranging_window_size = { .name = "ranging_window_size", .descr = "Ranging window size in BW units (4-byte words for 2.5G upstream, 16-byte blocks for 10G upstream)", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_XGPON_NI_CFG_ID_RANGING_WINDOW_SIZE, .offset = offsetof(bcmolt_xgpon_ni_cfg_data, ranging_window_size), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_cfg_eqd_cycles_number = { .name = "eqd_cycles_number", .descr = "How many ranging windows are opened during a single ONU activation process", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_CFG_ID_EQD_CYCLES_NUMBER, .offset = offsetof(bcmolt_xgpon_ni_cfg_data, eqd_cycles_number), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_cfg_drift_control = { .name = "drift_control", .descr = "Drift control process configuration", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_CFG_ID_DRIFT_CONTROL, .offset = offsetof(bcmolt_xgpon_ni_cfg_data, drift_control), .type = &type_descr_bcmolt_pon_drift_control };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_cfg_los_alarm_threshold = { .name = "los_alarm_threshold", .descr = "LOS alarm threshold", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_CFG_ID_LOS_ALARM_THRESHOLD, .offset = offsetof(bcmolt_xgpon_ni_cfg_data, los_alarm_threshold), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_cfg_los_initial_value = { .name = "los_initial_value", .descr = "LOS initial value following PON activation", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_CFG_ID_LOS_INITIAL_VALUE, .offset = offsetof(bcmolt_xgpon_ni_cfg_data, los_initial_value), .type = &type_descr_bcmolt_status };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_cfg_onu_alarms_thresholds = { .name = "onu_alarms_thresholds", .descr = "ONU alarms thresholds configuration", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_CFG_ID_ONU_ALARMS_THRESHOLDS, .offset = offsetof(bcmolt_xgpon_ni_cfg_data, onu_alarms_thresholds), .type = &type_descr_bcmolt_xgpon_onu_alarms_thresholds };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_cfg_ber_monitor = { .name = "ber_monitor", .descr = "BER monitor process configuration", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_CFG_ID_BER_MONITOR, .offset = offsetof(bcmolt_xgpon_ni_cfg_data, ber_monitor), .type = &type_descr_bcmolt_ber_monitor_params };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_cfg_onu_activation = { .name = "onu_activation", .descr = "ONU activation control parameters", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_CFG_ID_ONU_ACTIVATION, .offset = offsetof(bcmolt_xgpon_ni_cfg_data, onu_activation), .type = &type_descr_bcmolt_xgpon_onu_activation };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_cfg_sn_acquisition = { .name = "sn_acquisition", .descr = "Serial Number process configuration", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_CFG_ID_SN_ACQUISITION, .offset = offsetof(bcmolt_xgpon_ni_cfg_data, sn_acquisition), .type = &type_descr_bcmolt_xgpon_sn_acquisition };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_cfg_key_exchange = { .name = "key_exchange", .descr = "Key Exchange process configuration", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_CFG_ID_KEY_EXCHANGE, .offset = offsetof(bcmolt_xgpon_ni_cfg_data, key_exchange), .type = &type_descr_bcmolt_xgpon_key_exchange };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_cfg_protection_switching = { .name = "protection_switching", .descr = "Protection switching control", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_CFG_ID_PROTECTION_SWITCHING, .offset = offsetof(bcmolt_xgpon_ni_cfg_data, protection_switching), .type = &type_descr_bcmolt_xgpon_protection_switching };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_cfg_protection_switching_debug = { .name = "protection_switching_debug", .descr = "protection switching debug ", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_CFG_ID_PROTECTION_SWITCHING_DEBUG, .offset = offsetof(bcmolt_xgpon_ni_cfg_data, protection_switching_debug), .type = &type_descr_bcmolt_xgpon_protection_switching_debug };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_cfg_cbr_rt_allocation_profile = { .name = "cbr_rt_allocation_profile", .descr = "CBR Real Time allocation profile", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_CFG_ID_CBR_RT_ALLOCATION_PROFILE, .offset = offsetof(bcmolt_xgpon_ni_cfg_data, cbr_rt_allocation_profile), .type = &type_descr_bcmolt_cbr_rt_allocation_profile };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_cfg_cbr_nrt_allocation_profile = { .name = "cbr_nrt_allocation_profile", .descr = "CBR non Real Time allocation profile", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_CFG_ID_CBR_NRT_ALLOCATION_PROFILE, .offset = offsetof(bcmolt_xgpon_ni_cfg_data, cbr_nrt_allocation_profile), .type = &type_descr_bcmolt_arr_u16_2 };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_cfg_power_management = { .name = "power_management", .descr = "ONU power management control", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_CFG_ID_POWER_MANAGEMENT, .offset = offsetof(bcmolt_xgpon_ni_cfg_data, power_management), .type = &type_descr_bcmolt_onu_power_management_configuration };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_cfg_rogue_onu_detection_process = { .name = "rogue_onu_detection_process", .descr = "TBD", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_CFG_ID_ROGUE_ONU_DETECTION_PROCESS, .offset = offsetof(bcmolt_xgpon_ni_cfg_data, rogue_onu_detection_process), .type = &type_descr_bcmolt_rogue_onu_detection_process };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_cfg_periodic_standby_pon_monitoring = { .name = "periodic_standby_pon_monitoring", .descr = "Periodic Standby PON monitoring", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_CFG_ID_PERIODIC_STANDBY_PON_MONITORING, .offset = offsetof(bcmolt_xgpon_ni_cfg_data, periodic_standby_pon_monitoring), .type = &type_descr_bcmolt_periodic_standby_pon_monitoring };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_cfg_dba_mode = { .name = "dba_mode", .descr = "DBA mode", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_CFG_ID_DBA_MODE, .offset = offsetof(bcmolt_xgpon_ni_cfg_data, dba_mode), .type = &type_descr_bcmolt_dba_mode };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_cfg_ploam_handling = { .name = "ploam_handling", .descr = "Ploam handling configuration", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_CFG_ID_PLOAM_HANDLING, .offset = offsetof(bcmolt_xgpon_ni_cfg_data, ploam_handling), .type = &type_descr_bcmolt_xgpon_ploam_handling };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_cfg_min_data_alloc_id = { .name = "min_data_alloc_id", .descr = "Min data Alloc ID value", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_CFG_ID_MIN_DATA_ALLOC_ID, .offset = offsetof(bcmolt_xgpon_ni_cfg_data, min_data_alloc_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_cfg_min_data_gem_port_id = { .name = "min_data_gem_port_id", .descr = "Min data XGEM port ID value", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_CFG_ID_MIN_DATA_GEM_PORT_ID, .offset = offsetof(bcmolt_xgpon_ni_cfg_data, min_data_gem_port_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_cfg_multicast_key = { .name = "multicast_key", .descr = "Multicast XGEM ports encryption control", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_CFG_ID_MULTICAST_KEY, .offset = offsetof(bcmolt_xgpon_ni_cfg_data, multicast_key), .type = &type_descr_bcmolt_xgpon_multicast_key };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_cfg_prbs_checker = { .name = "prbs_checker", .descr = "US PRBS checker configuration", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_CFG_ID_PRBS_CHECKER, .offset = offsetof(bcmolt_xgpon_ni_cfg_data, prbs_checker), .type = &type_descr_bcmolt_prbs_checker_config };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_cfg_prbs_generator = { .name = "prbs_generator", .descr = "DS PRBS generator configuration", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_CFG_ID_PRBS_GENERATOR, .offset = offsetof(bcmolt_xgpon_ni_cfg_data, prbs_generator), .type = &type_descr_bcmolt_prbs_generator_config };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_cfg_prbs_status = { .name = "prbs_status", .descr = "Result of US PRBS checker", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_XGPON_NI_CFG_ID_PRBS_STATUS, .offset = offsetof(bcmolt_xgpon_ni_cfg_data, prbs_status), .type = &type_descr_bcmolt_prbs_status };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_cfg_automatic_onu_deactivation = { .name = "automatic_onu_deactivation", .descr = "Option to disable the automatic deactivation of ONUs due to alarms", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_CFG_ID_AUTOMATIC_ONU_DEACTIVATION, .offset = offsetof(bcmolt_xgpon_ni_cfg_data, automatic_onu_deactivation), .type = &type_descr_bcmolt_automatic_onu_deactivation };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_cfg_us_bandwidth_limit = { .name = "us_bandwidth_limit", .descr = "Total PON upstream bandwidth limit in bytes per second.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_CFG_ID_US_BANDWIDTH_LIMIT, .offset = offsetof(bcmolt_xgpon_ni_cfg_data, us_bandwidth_limit), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_cfg_all_onus = { .name = "all_onus", .descr = "All ONUs currently provisioned on this PON.", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_XGPON_NI_CFG_ID_ALL_ONUS, .offset = offsetof(bcmolt_xgpon_ni_cfg_data, all_onus), .type = &type_descr_bcmolt_xgpon_onu_with_state_list_u16_max_510 };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_cfg_all_mcast_gem_ports = { .name = "all_mcast_gem_ports", .descr = "All multicast GEM ports currently provisioned on this PON.", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_XGPON_NI_CFG_ID_ALL_MCAST_GEM_PORTS, .offset = offsetof(bcmolt_xgpon_ni_cfg_data, all_mcast_gem_ports), .type = &type_descr_bcmolt_xgpon_gem_port_with_state_list_u16_max_128 };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_cfg_debug = { .name = "debug", .descr = "PON NI debug parameters", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_CFG_ID_DEBUG, .offset = offsetof(bcmolt_xgpon_ni_cfg_data, debug), .type = &type_descr_bcmolt_xgpon_ni_debug };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_cfg_onu_upgrade_params = { .name = "onu_upgrade_params", .descr = "ONU upgrade params", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_CFG_ID_ONU_UPGRADE_PARAMS, .offset = offsetof(bcmolt_xgpon_ni_cfg_data, onu_upgrade_params), .type = &type_descr_bcmolt_gpon_onu_upgrade_params };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_cfg_ds_fec_mode = { .name = "ds_fec_mode", .descr = "DS FEC mode", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_CFG_ID_DS_FEC_MODE, .offset = offsetof(bcmolt_xgpon_ni_cfg_data, ds_fec_mode), .type = &type_descr_bcmolt_control_state };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_cfg_dba_type = { .name = "dba_type", .descr = "DBA implementation type", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_CFG_ID_DBA_TYPE, .offset = offsetof(bcmolt_xgpon_ni_cfg_data, dba_type), .type = &type_descr_bcmolt_dba_type };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_cfg_onu_tuning = { .name = "onu_tuning", .descr = "onu tuning", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_CFG_ID_ONU_TUNING, .offset = offsetof(bcmolt_xgpon_ni_cfg_data, onu_tuning), .type = &type_descr_bcmolt_onu_tuning_configuration };
+static bcmcli_prop_descr * BCM_DESCR xgpon_ni_cfg_prop_array[] = { &prop_descr_xgpon_ni_cfg_hw_pon_id, &prop_descr_xgpon_ni_cfg_available_bandwidth, &prop_descr_xgpon_ni_cfg_number_of_active_onus, &prop_descr_xgpon_ni_cfg_pon_status, &prop_descr_xgpon_ni_cfg_pon_distance, &prop_descr_xgpon_ni_cfg_ranging_window_size, &prop_descr_xgpon_ni_cfg_eqd_cycles_number, &prop_descr_xgpon_ni_cfg_drift_control, &prop_descr_xgpon_ni_cfg_los_alarm_threshold, &prop_descr_xgpon_ni_cfg_los_initial_value, &prop_descr_xgpon_ni_cfg_onu_alarms_thresholds, &prop_descr_xgpon_ni_cfg_ber_monitor, &prop_descr_xgpon_ni_cfg_onu_activation, &prop_descr_xgpon_ni_cfg_sn_acquisition, &prop_descr_xgpon_ni_cfg_key_exchange, &prop_descr_xgpon_ni_cfg_protection_switching, &prop_descr_xgpon_ni_cfg_protection_switching_debug, &prop_descr_xgpon_ni_cfg_cbr_rt_allocation_profile, &prop_descr_xgpon_ni_cfg_cbr_nrt_allocation_profile, &prop_descr_xgpon_ni_cfg_power_management, &prop_descr_xgpon_ni_cfg_rogue_onu_detection_process, &prop_descr_xgpon_ni_cfg_periodic_standby_pon_monitoring, &prop_descr_xgpon_ni_cfg_dba_mode, &prop_descr_xgpon_ni_cfg_ploam_handling, &prop_descr_xgpon_ni_cfg_min_data_alloc_id, &prop_descr_xgpon_ni_cfg_min_data_gem_port_id, &prop_descr_xgpon_ni_cfg_multicast_key, &prop_descr_xgpon_ni_cfg_prbs_checker, &prop_descr_xgpon_ni_cfg_prbs_generator, &prop_descr_xgpon_ni_cfg_prbs_status, &prop_descr_xgpon_ni_cfg_automatic_onu_deactivation, &prop_descr_xgpon_ni_cfg_us_bandwidth_limit, &prop_descr_xgpon_ni_cfg_all_onus, &prop_descr_xgpon_ni_cfg_all_mcast_gem_ports, &prop_descr_xgpon_ni_cfg_debug, &prop_descr_xgpon_ni_cfg_onu_upgrade_params, &prop_descr_xgpon_ni_cfg_ds_fec_mode, &prop_descr_xgpon_ni_cfg_dba_type, &prop_descr_xgpon_ni_cfg_onu_tuning };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_cfg_data_fields[] = { { .name = "hw_pon_id", .descr = "51 bit PON identifier. This attribute is part of the downstream physical synchronization block (PSBd)", .offset = offsetof(bcmolt_xgpon_ni_cfg_data, hw_pon_id), .type = &type_descr_bcmolt_hw_pon_id }, { .name = "available_bandwidth", .descr = "PON available bandwidth parameters", .offset = offsetof(bcmolt_xgpon_ni_cfg_data, available_bandwidth), .type = &type_descr_bcmolt_pon_available_bandwidth }, { .name = "number_of_active_onus", .descr = "Number of active ONUs on the PON", .offset = offsetof(bcmolt_xgpon_ni_cfg_data, number_of_active_onus), .type = &type_descr_uint16_t }, { .name = "pon_status", .descr = "PON status parameters", .offset = offsetof(bcmolt_xgpon_ni_cfg_data, pon_status), .type = &type_descr_bcmolt_pon_status }, { .name = "pon_distance", .descr = "PON distance", .offset = offsetof(bcmolt_xgpon_ni_cfg_data, pon_distance), .type = &type_descr_bcmolt_pon_distance }, { .name = "ranging_window_size", .descr = "Ranging window size in BW units (4-byte words for 2.5G upstream, 16-byte blocks for 10G upstream)", .offset = offsetof(bcmolt_xgpon_ni_cfg_data, ranging_window_size), .type = &type_descr_uint32_t }, { .name = "eqd_cycles_number", .descr = "How many ranging windows are opened during a single ONU activation process", .offset = offsetof(bcmolt_xgpon_ni_cfg_data, eqd_cycles_number), .type = &type_descr_uint32_t }, { .name = "drift_control", .descr = "Drift control process configuration", .offset = offsetof(bcmolt_xgpon_ni_cfg_data, drift_control), .type = &type_descr_bcmolt_pon_drift_control }, { .name = "los_alarm_threshold", .descr = "LOS alarm threshold", .offset = offsetof(bcmolt_xgpon_ni_cfg_data, los_alarm_threshold), .type = &type_descr_uint8_t }, { .name = "los_initial_value", .descr = "LOS initial value following PON activation", .offset = offsetof(bcmolt_xgpon_ni_cfg_data, los_initial_value), .type = &type_descr_bcmolt_status }, { .name = "onu_alarms_thresholds", .descr = "ONU alarms thresholds configuration", .offset = offsetof(bcmolt_xgpon_ni_cfg_data, onu_alarms_thresholds), .type = &type_descr_bcmolt_xgpon_onu_alarms_thresholds }, { .name = "ber_monitor", .descr = "BER monitor process configuration", .offset = offsetof(bcmolt_xgpon_ni_cfg_data, ber_monitor), .type = &type_descr_bcmolt_ber_monitor_params }, { .name = "onu_activation", .descr = "ONU activation control parameters", .offset = offsetof(bcmolt_xgpon_ni_cfg_data, onu_activation), .type = &type_descr_bcmolt_xgpon_onu_activation }, { .name = "sn_acquisition", .descr = "Serial Number process configuration", .offset = offsetof(bcmolt_xgpon_ni_cfg_data, sn_acquisition), .type = &type_descr_bcmolt_xgpon_sn_acquisition }, { .name = "key_exchange", .descr = "Key Exchange process configuration", .offset = offsetof(bcmolt_xgpon_ni_cfg_data, key_exchange), .type = &type_descr_bcmolt_xgpon_key_exchange }, { .name = "protection_switching", .descr = "Protection switching control", .offset = offsetof(bcmolt_xgpon_ni_cfg_data, protection_switching), .type = &type_descr_bcmolt_xgpon_protection_switching }, { .name = "protection_switching_debug", .descr = "protection switching debug ", .offset = offsetof(bcmolt_xgpon_ni_cfg_data, protection_switching_debug), .type = &type_descr_bcmolt_xgpon_protection_switching_debug }, { .name = "cbr_rt_allocation_profile", .descr = "CBR Real Time allocation profile", .offset = offsetof(bcmolt_xgpon_ni_cfg_data, cbr_rt_allocation_profile), .type = &type_descr_bcmolt_cbr_rt_allocation_profile }, { .name = "cbr_nrt_allocation_profile", .descr = "CBR non Real Time allocation profile", .offset = offsetof(bcmolt_xgpon_ni_cfg_data, cbr_nrt_allocation_profile), .type = &type_descr_bcmolt_arr_u16_2 }, { .name = "power_management", .descr = "ONU power management control", .offset = offsetof(bcmolt_xgpon_ni_cfg_data, power_management), .type = &type_descr_bcmolt_onu_power_management_configuration }, { .name = "rogue_onu_detection_process", .descr = "TBD", .offset = offsetof(bcmolt_xgpon_ni_cfg_data, rogue_onu_detection_process), .type = &type_descr_bcmolt_rogue_onu_detection_process }, { .name = "periodic_standby_pon_monitoring", .descr = "Periodic Standby PON monitoring", .offset = offsetof(bcmolt_xgpon_ni_cfg_data, periodic_standby_pon_monitoring), .type = &type_descr_bcmolt_periodic_standby_pon_monitoring }, { .name = "dba_mode", .descr = "DBA mode", .offset = offsetof(bcmolt_xgpon_ni_cfg_data, dba_mode), .type = &type_descr_bcmolt_dba_mode }, { .name = "ploam_handling", .descr = "Ploam handling configuration", .offset = offsetof(bcmolt_xgpon_ni_cfg_data, ploam_handling), .type = &type_descr_bcmolt_xgpon_ploam_handling }, { .name = "min_data_alloc_id", .descr = "Min data Alloc ID value", .offset = offsetof(bcmolt_xgpon_ni_cfg_data, min_data_alloc_id), .type = &type_descr_uint16_t }, { .name = "min_data_gem_port_id", .descr = "Min data XGEM port ID value", .offset = offsetof(bcmolt_xgpon_ni_cfg_data, min_data_gem_port_id), .type = &type_descr_uint16_t }, { .name = "multicast_key", .descr = "Multicast XGEM ports encryption control", .offset = offsetof(bcmolt_xgpon_ni_cfg_data, multicast_key), .type = &type_descr_bcmolt_xgpon_multicast_key }, { .name = "prbs_checker", .descr = "US PRBS checker configuration", .offset = offsetof(bcmolt_xgpon_ni_cfg_data, prbs_checker), .type = &type_descr_bcmolt_prbs_checker_config }, { .name = "prbs_generator", .descr = "DS PRBS generator configuration", .offset = offsetof(bcmolt_xgpon_ni_cfg_data, prbs_generator), .type = &type_descr_bcmolt_prbs_generator_config }, { .name = "prbs_status", .descr = "Result of US PRBS checker", .offset = offsetof(bcmolt_xgpon_ni_cfg_data, prbs_status), .type = &type_descr_bcmolt_prbs_status }, { .name = "automatic_onu_deactivation", .descr = "Option to disable the automatic deactivation of ONUs due to alarms", .offset = offsetof(bcmolt_xgpon_ni_cfg_data, automatic_onu_deactivation), .type = &type_descr_bcmolt_automatic_onu_deactivation }, { .name = "us_bandwidth_limit", .descr = "Total PON upstream bandwidth limit in bytes per second.", .offset = offsetof(bcmolt_xgpon_ni_cfg_data, us_bandwidth_limit), .type = &type_descr_uint32_t }, { .name = "all_onus", .descr = "All ONUs currently provisioned on this PON.", .offset = offsetof(bcmolt_xgpon_ni_cfg_data, all_onus), .type = &type_descr_bcmolt_xgpon_onu_with_state_list_u16_max_510 }, { .name = "all_mcast_gem_ports", .descr = "All multicast GEM ports currently provisioned on this PON.", .offset = offsetof(bcmolt_xgpon_ni_cfg_data, all_mcast_gem_ports), .type = &type_descr_bcmolt_xgpon_gem_port_with_state_list_u16_max_128 }, { .name = "debug", .descr = "PON NI debug parameters", .offset = offsetof(bcmolt_xgpon_ni_cfg_data, debug), .type = &type_descr_bcmolt_xgpon_ni_debug }, { .name = "onu_upgrade_params", .descr = "ONU upgrade params", .offset = offsetof(bcmolt_xgpon_ni_cfg_data, onu_upgrade_params), .type = &type_descr_bcmolt_gpon_onu_upgrade_params }, { .name = "ds_fec_mode", .descr = "DS FEC mode", .offset = offsetof(bcmolt_xgpon_ni_cfg_data, ds_fec_mode), .type = &type_descr_bcmolt_control_state }, { .name = "dba_type", .descr = "DBA implementation type", .offset = offsetof(bcmolt_xgpon_ni_cfg_data, dba_type), .type = &type_descr_bcmolt_dba_type }, { .name = "onu_tuning", .descr = "onu tuning", .offset = offsetof(bcmolt_xgpon_ni_cfg_data, onu_tuning), .type = &type_descr_bcmolt_onu_tuning_configuration } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_cfg_data = { .name = "bcmolt_xgpon_ni_cfg_data", .descr = "cfg", .size = sizeof(bcmolt_xgpon_ni_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_ni_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_ni_cfg_data_fields } } };
+
+/* Group: xgpon_ni - stat */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_stat_fec_codewords = { .name = "fec_codewords", .descr = "Receive FEC codewords", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_STAT_ID_FEC_CODEWORDS, .offset = offsetof(bcmolt_xgpon_ni_stat_data, fec_codewords), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_stat_bip32_bytes = { .name = "bip32_bytes", .descr = "Received bytes protected by bip32", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_STAT_ID_BIP32_BYTES, .offset = offsetof(bcmolt_xgpon_ni_stat_data, bip32_bytes), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_stat_bip32_errors = { .name = "bip32_errors", .descr = "Received bip32 errors", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_STAT_ID_BIP32_ERRORS, .offset = offsetof(bcmolt_xgpon_ni_stat_data, bip32_errors), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_stat_rx_xgtc_headers = { .name = "rx_xgtc_headers", .descr = "Received valid XGTC headers", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_STAT_ID_RX_XGTC_HEADERS, .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_xgtc_headers), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_stat_rx_xgtc_corrected = { .name = "rx_xgtc_corrected", .descr = "Received corrected XGTC headers", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_STAT_ID_RX_XGTC_CORRECTED, .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_xgtc_corrected), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_stat_rx_xgtc_uncorrected = { .name = "rx_xgtc_uncorrected", .descr = "Received uncorrected XGTC headers", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_STAT_ID_RX_XGTC_UNCORRECTED, .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_xgtc_uncorrected), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_stat_rx_xgem = { .name = "rx_xgem", .descr = "Received valid XGEM frames", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_STAT_ID_RX_XGEM, .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_xgem), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_stat_rx_xgem_dropped = { .name = "rx_xgem_dropped", .descr = "Received dropped XGEM ID frames", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_STAT_ID_RX_XGEM_DROPPED, .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_xgem_dropped), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_stat_rx_xgem_idle = { .name = "rx_xgem_idle", .descr = "Received idle XGEM frames", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_STAT_ID_RX_XGEM_IDLE, .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_xgem_idle), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_stat_rx_xgem_corrected = { .name = "rx_xgem_corrected", .descr = "Received corrected XGEM frames", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_STAT_ID_RX_XGEM_CORRECTED, .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_xgem_corrected), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_stat_rx_crc_error = { .name = "rx_crc_error", .descr = "Received packets with CRC error", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_STAT_ID_RX_CRC_ERROR, .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_crc_error), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_stat_rx_fragment_error = { .name = "rx_fragment_error", .descr = "Received fragment errors", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_STAT_ID_RX_FRAGMENT_ERROR, .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_fragment_error), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_stat_rx_packets_dropped = { .name = "rx_packets_dropped", .descr = "Global dropped packets", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_STAT_ID_RX_PACKETS_DROPPED, .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_packets_dropped), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_stat_rx_dropped_too_short = { .name = "rx_dropped_too_short", .descr = "Received packets dropped due to length too short", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_STAT_ID_RX_DROPPED_TOO_SHORT, .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_dropped_too_short), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_stat_rx_dropped_too_long = { .name = "rx_dropped_too_long", .descr = "Received packet dropped due to length too long", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_STAT_ID_RX_DROPPED_TOO_LONG, .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_dropped_too_long), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_stat_rx_key_error = { .name = "rx_key_error", .descr = "Received key errors", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_STAT_ID_RX_KEY_ERROR, .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_key_error), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_stat_tx_ploams = { .name = "tx_ploams", .descr = "Transmitted Ploams", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_STAT_ID_TX_PLOAMS, .offset = offsetof(bcmolt_xgpon_ni_stat_data, tx_ploams), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_stat_rx_ploams_dropped = { .name = "rx_ploams_dropped", .descr = "Received dropped Ploams", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS_DROPPED, .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_ploams_dropped), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_stat_rx_allocations_valid = { .name = "rx_allocations_valid", .descr = "Received valid allocations", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_STAT_ID_RX_ALLOCATIONS_VALID, .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_allocations_valid), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_stat_rx_allocations_invalid = { .name = "rx_allocations_invalid", .descr = "Received invalid allocations", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_STAT_ID_RX_ALLOCATIONS_INVALID, .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_allocations_invalid), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_stat_rx_allocations_disabled = { .name = "rx_allocations_disabled", .descr = "Received disabled allocations", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_STAT_ID_RX_ALLOCATIONS_DISABLED, .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_allocations_disabled), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_stat_rx_ploams = { .name = "rx_ploams", .descr = "Received Ploams", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS, .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_ploams), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_stat_rx_ploams_non_idle = { .name = "rx_ploams_non_idle", .descr = "Received non idle Ploams", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS_NON_IDLE, .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_ploams_non_idle), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_stat_rx_ploams_error = { .name = "rx_ploams_error", .descr = "Received error Ploams", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_STAT_ID_RX_PLOAMS_ERROR, .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_ploams_error), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_stat_rx_cpu = { .name = "rx_cpu", .descr = "Received CPU packets", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_STAT_ID_RX_CPU, .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_cpu), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_stat_rx_omci = { .name = "rx_omci", .descr = "Received OMCI packets", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_STAT_ID_RX_OMCI, .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_omci), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_stat_rx_omci_packets_crc_error = { .name = "rx_omci_packets_crc_error", .descr = "Received OMCI packets with CRC errors", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR, .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_omci_packets_crc_error), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_stat_tx_packets = { .name = "tx_packets", .descr = "Transmitted packets", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_STAT_ID_TX_PACKETS, .offset = offsetof(bcmolt_xgpon_ni_stat_data, tx_packets), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_stat_tx_xgem = { .name = "tx_xgem", .descr = "Transmitted XGEM fragments", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_STAT_ID_TX_XGEM, .offset = offsetof(bcmolt_xgpon_ni_stat_data, tx_xgem), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_stat_tx_cpu = { .name = "tx_cpu", .descr = "Transmitted CPU packets", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_STAT_ID_TX_CPU, .offset = offsetof(bcmolt_xgpon_ni_stat_data, tx_cpu), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_stat_tx_omci = { .name = "tx_omci", .descr = "Transmitted OMCI packets", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_STAT_ID_TX_OMCI, .offset = offsetof(bcmolt_xgpon_ni_stat_data, tx_omci), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_stat_tx_cpu_omci_packets_dropped = { .name = "tx_cpu_omci_packets_dropped", .descr = "Transmit packets dropped due to illegal length", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_STAT_ID_TX_CPU_OMCI_PACKETS_DROPPED, .offset = offsetof(bcmolt_xgpon_ni_stat_data, tx_cpu_omci_packets_dropped), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_stat_tx_dropped_illegal_length = { .name = "tx_dropped_illegal_length", .descr = "Transmit packets dropped due to illegal length", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_STAT_ID_TX_DROPPED_ILLEGAL_LENGTH, .offset = offsetof(bcmolt_xgpon_ni_stat_data, tx_dropped_illegal_length), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_stat_tx_dropped_tpid_miss = { .name = "tx_dropped_tpid_miss", .descr = "Transmit packets dropped due to TPID miss", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_STAT_ID_TX_DROPPED_TPID_MISS, .offset = offsetof(bcmolt_xgpon_ni_stat_data, tx_dropped_tpid_miss), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_stat_tx_dropped_vid_miss = { .name = "tx_dropped_vid_miss", .descr = "Transmit packets droped due to VID miss", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_STAT_ID_TX_DROPPED_VID_MISS, .offset = offsetof(bcmolt_xgpon_ni_stat_data, tx_dropped_vid_miss), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr * BCM_DESCR xgpon_ni_stat_prop_array[] = { &prop_descr_xgpon_ni_stat_fec_codewords, &prop_descr_xgpon_ni_stat_bip32_bytes, &prop_descr_xgpon_ni_stat_bip32_errors, &prop_descr_xgpon_ni_stat_rx_xgtc_headers, &prop_descr_xgpon_ni_stat_rx_xgtc_corrected, &prop_descr_xgpon_ni_stat_rx_xgtc_uncorrected, &prop_descr_xgpon_ni_stat_rx_xgem, &prop_descr_xgpon_ni_stat_rx_xgem_dropped, &prop_descr_xgpon_ni_stat_rx_xgem_idle, &prop_descr_xgpon_ni_stat_rx_xgem_corrected, &prop_descr_xgpon_ni_stat_rx_crc_error, &prop_descr_xgpon_ni_stat_rx_fragment_error, &prop_descr_xgpon_ni_stat_rx_packets_dropped, &prop_descr_xgpon_ni_stat_rx_dropped_too_short, &prop_descr_xgpon_ni_stat_rx_dropped_too_long, &prop_descr_xgpon_ni_stat_rx_key_error, &prop_descr_xgpon_ni_stat_tx_ploams, &prop_descr_xgpon_ni_stat_rx_ploams_dropped, &prop_descr_xgpon_ni_stat_rx_allocations_valid, &prop_descr_xgpon_ni_stat_rx_allocations_invalid, &prop_descr_xgpon_ni_stat_rx_allocations_disabled, &prop_descr_xgpon_ni_stat_rx_ploams, &prop_descr_xgpon_ni_stat_rx_ploams_non_idle, &prop_descr_xgpon_ni_stat_rx_ploams_error, &prop_descr_xgpon_ni_stat_rx_cpu, &prop_descr_xgpon_ni_stat_rx_omci, &prop_descr_xgpon_ni_stat_rx_omci_packets_crc_error, &prop_descr_xgpon_ni_stat_tx_packets, &prop_descr_xgpon_ni_stat_tx_xgem, &prop_descr_xgpon_ni_stat_tx_cpu, &prop_descr_xgpon_ni_stat_tx_omci, &prop_descr_xgpon_ni_stat_tx_cpu_omci_packets_dropped, &prop_descr_xgpon_ni_stat_tx_dropped_illegal_length, &prop_descr_xgpon_ni_stat_tx_dropped_tpid_miss, &prop_descr_xgpon_ni_stat_tx_dropped_vid_miss };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_stat_data_fields[] = { { .name = "fec_codewords", .descr = "Receive FEC codewords", .offset = offsetof(bcmolt_xgpon_ni_stat_data, fec_codewords), .type = &type_descr_uint64_t }, { .name = "bip32_bytes", .descr = "Received bytes protected by bip32", .offset = offsetof(bcmolt_xgpon_ni_stat_data, bip32_bytes), .type = &type_descr_uint64_t }, { .name = "bip32_errors", .descr = "Received bip32 errors", .offset = offsetof(bcmolt_xgpon_ni_stat_data, bip32_errors), .type = &type_descr_uint64_t }, { .name = "rx_xgtc_headers", .descr = "Received valid XGTC headers", .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_xgtc_headers), .type = &type_descr_uint64_t }, { .name = "rx_xgtc_corrected", .descr = "Received corrected XGTC headers", .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_xgtc_corrected), .type = &type_descr_uint64_t }, { .name = "rx_xgtc_uncorrected", .descr = "Received uncorrected XGTC headers", .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_xgtc_uncorrected), .type = &type_descr_uint64_t }, { .name = "rx_xgem", .descr = "Received valid XGEM frames", .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_xgem), .type = &type_descr_uint64_t }, { .name = "rx_xgem_dropped", .descr = "Received dropped XGEM ID frames", .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_xgem_dropped), .type = &type_descr_uint64_t }, { .name = "rx_xgem_idle", .descr = "Received idle XGEM frames", .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_xgem_idle), .type = &type_descr_uint64_t }, { .name = "rx_xgem_corrected", .descr = "Received corrected XGEM frames", .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_xgem_corrected), .type = &type_descr_uint64_t }, { .name = "rx_crc_error", .descr = "Received packets with CRC error", .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_crc_error), .type = &type_descr_uint64_t }, { .name = "rx_fragment_error", .descr = "Received fragment errors", .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_fragment_error), .type = &type_descr_uint64_t }, { .name = "rx_packets_dropped", .descr = "Global dropped packets", .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_packets_dropped), .type = &type_descr_uint64_t }, { .name = "rx_dropped_too_short", .descr = "Received packets dropped due to length too short", .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_dropped_too_short), .type = &type_descr_uint64_t }, { .name = "rx_dropped_too_long", .descr = "Received packet dropped due to length too long", .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_dropped_too_long), .type = &type_descr_uint64_t }, { .name = "rx_key_error", .descr = "Received key errors", .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_key_error), .type = &type_descr_uint64_t }, { .name = "tx_ploams", .descr = "Transmitted Ploams", .offset = offsetof(bcmolt_xgpon_ni_stat_data, tx_ploams), .type = &type_descr_uint64_t }, { .name = "rx_ploams_dropped", .descr = "Received dropped Ploams", .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_ploams_dropped), .type = &type_descr_uint64_t }, { .name = "rx_allocations_valid", .descr = "Received valid allocations", .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_allocations_valid), .type = &type_descr_uint64_t }, { .name = "rx_allocations_invalid", .descr = "Received invalid allocations", .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_allocations_invalid), .type = &type_descr_uint64_t }, { .name = "rx_allocations_disabled", .descr = "Received disabled allocations", .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_allocations_disabled), .type = &type_descr_uint64_t }, { .name = "rx_ploams", .descr = "Received Ploams", .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_ploams), .type = &type_descr_uint64_t }, { .name = "rx_ploams_non_idle", .descr = "Received non idle Ploams", .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_ploams_non_idle), .type = &type_descr_uint64_t }, { .name = "rx_ploams_error", .descr = "Received error Ploams", .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_ploams_error), .type = &type_descr_uint64_t }, { .name = "rx_cpu", .descr = "Received CPU packets", .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_cpu), .type = &type_descr_uint64_t }, { .name = "rx_omci", .descr = "Received OMCI packets", .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_omci), .type = &type_descr_uint64_t }, { .name = "rx_omci_packets_crc_error", .descr = "Received OMCI packets with CRC errors", .offset = offsetof(bcmolt_xgpon_ni_stat_data, rx_omci_packets_crc_error), .type = &type_descr_uint64_t }, { .name = "tx_packets", .descr = "Transmitted packets", .offset = offsetof(bcmolt_xgpon_ni_stat_data, tx_packets), .type = &type_descr_uint64_t }, { .name = "tx_xgem", .descr = "Transmitted XGEM fragments", .offset = offsetof(bcmolt_xgpon_ni_stat_data, tx_xgem), .type = &type_descr_uint64_t }, { .name = "tx_cpu", .descr = "Transmitted CPU packets", .offset = offsetof(bcmolt_xgpon_ni_stat_data, tx_cpu), .type = &type_descr_uint64_t }, { .name = "tx_omci", .descr = "Transmitted OMCI packets", .offset = offsetof(bcmolt_xgpon_ni_stat_data, tx_omci), .type = &type_descr_uint64_t }, { .name = "tx_cpu_omci_packets_dropped", .descr = "Transmit packets dropped due to illegal length", .offset = offsetof(bcmolt_xgpon_ni_stat_data, tx_cpu_omci_packets_dropped), .type = &type_descr_uint8_t }, { .name = "tx_dropped_illegal_length", .descr = "Transmit packets dropped due to illegal length", .offset = offsetof(bcmolt_xgpon_ni_stat_data, tx_dropped_illegal_length), .type = &type_descr_uint64_t }, { .name = "tx_dropped_tpid_miss", .descr = "Transmit packets dropped due to TPID miss", .offset = offsetof(bcmolt_xgpon_ni_stat_data, tx_dropped_tpid_miss), .type = &type_descr_uint64_t }, { .name = "tx_dropped_vid_miss", .descr = "Transmit packets droped due to VID miss", .offset = offsetof(bcmolt_xgpon_ni_stat_data, tx_dropped_vid_miss), .type = &type_descr_uint64_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_stat_data = { .name = "bcmolt_xgpon_ni_stat_data", .descr = "stat", .size = sizeof(bcmolt_xgpon_ni_stat_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_ni_stat_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_ni_stat_data_fields } } };
+
+/* Group: xgpon_ni - set_pon_state */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_set_pon_state_pon_state = { .name = "pon_state", .descr = "PON state", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_SET_PON_STATE_ID_PON_STATE, .offset = offsetof(bcmolt_xgpon_ni_set_pon_state_data, pon_state), .type = &type_descr_bcmolt_pon_operation };
+static bcmcli_prop_descr * BCM_DESCR xgpon_ni_set_pon_state_prop_array[] = { &prop_descr_xgpon_ni_set_pon_state_pon_state };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_set_pon_state_data_fields[] = { { .name = "pon_state", .descr = "PON state", .offset = offsetof(bcmolt_xgpon_ni_set_pon_state_data, pon_state), .type = &type_descr_bcmolt_pon_operation } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_set_pon_state_data = { .name = "bcmolt_xgpon_ni_set_pon_state_data", .descr = "Set PON State", .size = sizeof(bcmolt_xgpon_ni_set_pon_state_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_ni_set_pon_state_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_ni_set_pon_state_data_fields } } };
+
+/* Group: xgpon_ni - reset */
+static bcmcli_prop_descr * BCM_DESCR xgpon_ni_reset_prop_array[] = { };
+
+/* Group: xgpon_ni - disable_serial_number */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_disable_serial_number_control = { .name = "control", .descr = "control", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_DISABLE_SERIAL_NUMBER_ID_CONTROL, .offset = offsetof(bcmolt_xgpon_ni_disable_serial_number_data, control), .type = &type_descr_bcmolt_disable_serial_number_control };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_disable_serial_number_serial_number = { .name = "serial_number", .descr = "serial number", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_DISABLE_SERIAL_NUMBER_ID_SERIAL_NUMBER, .offset = offsetof(bcmolt_xgpon_ni_disable_serial_number_data, serial_number), .type = &type_descr_bcmolt_serial_number };
+static bcmcli_prop_descr * BCM_DESCR xgpon_ni_disable_serial_number_prop_array[] = { &prop_descr_xgpon_ni_disable_serial_number_control, &prop_descr_xgpon_ni_disable_serial_number_serial_number };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_disable_serial_number_data_fields[] = { { .name = "control", .descr = "control", .offset = offsetof(bcmolt_xgpon_ni_disable_serial_number_data, control), .type = &type_descr_bcmolt_disable_serial_number_control }, { .name = "serial_number", .descr = "serial number", .offset = offsetof(bcmolt_xgpon_ni_disable_serial_number_data, serial_number), .type = &type_descr_bcmolt_serial_number } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_disable_serial_number_data = { .name = "bcmolt_xgpon_ni_disable_serial_number_data", .descr = "Disable Serial Number", .size = sizeof(bcmolt_xgpon_ni_disable_serial_number_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_ni_disable_serial_number_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_ni_disable_serial_number_data_fields } } };
+
+/* Group: xgpon_ni - single_request_standby_pon_monitoring */
+static bcmcli_prop_descr * BCM_DESCR xgpon_ni_single_request_standby_pon_monitoring_prop_array[] = { };
+
+/* Group: xgpon_ni - set_onu_state */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_set_onu_state_onu_state = { .name = "onu_state", .descr = "New operation state of all ONUs.  The default operation may be configured by the XGPON NI configuration object : xgpon_ni.cfg.sn_acquisition.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_SET_ONU_STATE_ID_ONU_STATE, .offset = offsetof(bcmolt_xgpon_ni_set_onu_state_data, onu_state), .type = &type_descr_bcmolt_onu_operation };
+static bcmcli_prop_descr * BCM_DESCR xgpon_ni_set_onu_state_prop_array[] = { &prop_descr_xgpon_ni_set_onu_state_onu_state };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_set_onu_state_data_fields[] = { { .name = "onu_state", .descr = "New operation state of all ONUs.  The default operation may be configured by the XGPON NI configuration object : xgpon_ni.cfg.sn_acquisition.", .offset = offsetof(bcmolt_xgpon_ni_set_onu_state_data, onu_state), .type = &type_descr_bcmolt_onu_operation } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_set_onu_state_data = { .name = "bcmolt_xgpon_ni_set_onu_state_data", .descr = "Set the operation state of all ONUs.", .size = sizeof(bcmolt_xgpon_ni_set_onu_state_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_ni_set_onu_state_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_ni_set_onu_state_data_fields } } };
+
+/* Group: xgpon_ni - run_special_bw_map */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_run_special_bw_map_number_of_cycle = { .name = "number_of_cycle", .descr = "number of cycle", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_RUN_SPECIAL_BW_MAP_ID_NUMBER_OF_CYCLE, .offset = offsetof(bcmolt_xgpon_ni_run_special_bw_map_data, number_of_cycle), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_run_special_bw_map_allocation_number = { .name = "allocation_number", .descr = "allocation number", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_RUN_SPECIAL_BW_MAP_ID_ALLOCATION_NUMBER, .offset = offsetof(bcmolt_xgpon_ni_run_special_bw_map_data, allocation_number), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_run_special_bw_map_bw_map_array = { .name = "bw_map_array", .descr = "bw map array", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_RUN_SPECIAL_BW_MAP_ID_BW_MAP_ARRAY, .offset = offsetof(bcmolt_xgpon_ni_run_special_bw_map_data, bw_map_array), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr * BCM_DESCR xgpon_ni_run_special_bw_map_prop_array[] = { &prop_descr_xgpon_ni_run_special_bw_map_number_of_cycle, &prop_descr_xgpon_ni_run_special_bw_map_allocation_number, &prop_descr_xgpon_ni_run_special_bw_map_bw_map_array };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_run_special_bw_map_data_fields[] = { { .name = "number_of_cycle", .descr = "number of cycle", .offset = offsetof(bcmolt_xgpon_ni_run_special_bw_map_data, number_of_cycle), .type = &type_descr_uint8_t }, { .name = "allocation_number", .descr = "allocation number", .offset = offsetof(bcmolt_xgpon_ni_run_special_bw_map_data, allocation_number), .type = &type_descr_uint8_t }, { .name = "bw_map_array", .descr = "bw map array", .offset = offsetof(bcmolt_xgpon_ni_run_special_bw_map_data, bw_map_array), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_run_special_bw_map_data = { .name = "bcmolt_xgpon_ni_run_special_bw_map_data", .descr = "Run Special BW Map", .size = sizeof(bcmolt_xgpon_ni_run_special_bw_map_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_ni_run_special_bw_map_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_ni_run_special_bw_map_data_fields } } };
+
+/* Group: xgpon_ni - rogue_detection_window */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_rogue_detection_window_window_type = { .name = "window_type", .descr = "Type of silent measurement to execute", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_WINDOW_TYPE, .offset = offsetof(bcmolt_xgpon_ni_rogue_detection_window_data, window_type), .type = &type_descr_bcmolt_rogue_detection_window };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_rogue_detection_window_alloc_id = { .name = "alloc_id", .descr = "ALLOC ID to scan", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_ALLOC_ID, .offset = offsetof(bcmolt_xgpon_ni_rogue_detection_window_data, alloc_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_rogue_detection_window_onu_id = { .name = "onu_id", .descr = "ONU ID to scan", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_ONU_ID, .offset = offsetof(bcmolt_xgpon_ni_rogue_detection_window_data, onu_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_rogue_detection_window_second_ranging_window = { .name = "second_ranging_window", .descr = "Not currently supported", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_ROGUE_DETECTION_WINDOW_ID_SECOND_RANGING_WINDOW, .offset = offsetof(bcmolt_xgpon_ni_rogue_detection_window_data, second_ranging_window), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr * BCM_DESCR xgpon_ni_rogue_detection_window_prop_array[] = { &prop_descr_xgpon_ni_rogue_detection_window_window_type, &prop_descr_xgpon_ni_rogue_detection_window_alloc_id, &prop_descr_xgpon_ni_rogue_detection_window_onu_id, &prop_descr_xgpon_ni_rogue_detection_window_second_ranging_window };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_rogue_detection_window_data_fields[] = { { .name = "window_type", .descr = "Type of silent measurement to execute", .offset = offsetof(bcmolt_xgpon_ni_rogue_detection_window_data, window_type), .type = &type_descr_bcmolt_rogue_detection_window }, { .name = "alloc_id", .descr = "ALLOC ID to scan", .offset = offsetof(bcmolt_xgpon_ni_rogue_detection_window_data, alloc_id), .type = &type_descr_uint16_t }, { .name = "onu_id", .descr = "ONU ID to scan", .offset = offsetof(bcmolt_xgpon_ni_rogue_detection_window_data, onu_id), .type = &type_descr_uint16_t }, { .name = "second_ranging_window", .descr = "Not currently supported", .offset = offsetof(bcmolt_xgpon_ni_rogue_detection_window_data, second_ranging_window), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_rogue_detection_window_data = { .name = "bcmolt_xgpon_ni_rogue_detection_window_data", .descr = "Rogue Detection Window", .size = sizeof(bcmolt_xgpon_ni_rogue_detection_window_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_ni_rogue_detection_window_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_ni_rogue_detection_window_data_fields } } };
+
+/* Group: xgpon_ni - state_change_completed */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_state_change_completed_result = { .name = "result", .descr = "Result", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_STATE_CHANGE_COMPLETED_ID_RESULT, .offset = offsetof(bcmolt_xgpon_ni_state_change_completed_data, result), .type = &type_descr_bcmolt_result };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_state_change_completed_previous_state = { .name = "previous_state", .descr = "Previous state", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_STATE_CHANGE_COMPLETED_ID_PREVIOUS_STATE, .offset = offsetof(bcmolt_xgpon_ni_state_change_completed_data, previous_state), .type = &type_descr_bcmolt_pon_state };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_state_change_completed_new_state = { .name = "new_state", .descr = "new state", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_STATE_CHANGE_COMPLETED_ID_NEW_STATE, .offset = offsetof(bcmolt_xgpon_ni_state_change_completed_data, new_state), .type = &type_descr_bcmolt_pon_state };
+static bcmcli_prop_descr * BCM_DESCR xgpon_ni_state_change_completed_prop_array[] = { &prop_descr_xgpon_ni_state_change_completed_result, &prop_descr_xgpon_ni_state_change_completed_previous_state, &prop_descr_xgpon_ni_state_change_completed_new_state };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_state_change_completed_data_fields[] = { { .name = "result", .descr = "Result", .offset = offsetof(bcmolt_xgpon_ni_state_change_completed_data, result), .type = &type_descr_bcmolt_result }, { .name = "previous_state", .descr = "Previous state", .offset = offsetof(bcmolt_xgpon_ni_state_change_completed_data, previous_state), .type = &type_descr_bcmolt_pon_state }, { .name = "new_state", .descr = "new state", .offset = offsetof(bcmolt_xgpon_ni_state_change_completed_data, new_state), .type = &type_descr_bcmolt_pon_state } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_state_change_completed_data = { .name = "bcmolt_xgpon_ni_state_change_completed_data", .descr = "State Change Completed", .size = sizeof(bcmolt_xgpon_ni_state_change_completed_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_ni_state_change_completed_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_ni_state_change_completed_data_fields } } };
+
+/* Group: xgpon_ni - los */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_los_status = { .name = "status", .descr = "status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_LOS_ID_STATUS, .offset = offsetof(bcmolt_xgpon_ni_los_data, status), .type = &type_descr_bcmolt_status };
+static bcmcli_prop_descr * BCM_DESCR xgpon_ni_los_prop_array[] = { &prop_descr_xgpon_ni_los_status };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_los_data_fields[] = { { .name = "status", .descr = "status", .offset = offsetof(bcmolt_xgpon_ni_los_data, status), .type = &type_descr_bcmolt_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_los_data = { .name = "bcmolt_xgpon_ni_los_data", .descr = "LOS", .size = sizeof(bcmolt_xgpon_ni_los_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_ni_los_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_ni_los_data_fields } } };
+
+/* Group: xgpon_ni - serial_number_acquisition_cycle_start */
+static bcmcli_prop_descr * BCM_DESCR xgpon_ni_serial_number_acquisition_cycle_start_prop_array[] = { };
+
+/* Group: xgpon_ni - protection_switching_traffic_resume */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_protection_switching_traffic_resume_result = { .name = "result", .descr = "Result", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_PROTECTION_SWITCHING_TRAFFIC_RESUME_ID_RESULT, .offset = offsetof(bcmolt_xgpon_ni_protection_switching_traffic_resume_data, result), .type = &type_descr_bcmolt_traffic_resume_result };
+static bcmcli_prop_descr * BCM_DESCR xgpon_ni_protection_switching_traffic_resume_prop_array[] = { &prop_descr_xgpon_ni_protection_switching_traffic_resume_result };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_protection_switching_traffic_resume_data_fields[] = { { .name = "result", .descr = "Result", .offset = offsetof(bcmolt_xgpon_ni_protection_switching_traffic_resume_data, result), .type = &type_descr_bcmolt_traffic_resume_result } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_protection_switching_traffic_resume_data = { .name = "bcmolt_xgpon_ni_protection_switching_traffic_resume_data", .descr = "Protection Switching Traffic Resume", .size = sizeof(bcmolt_xgpon_ni_protection_switching_traffic_resume_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_ni_protection_switching_traffic_resume_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_ni_protection_switching_traffic_resume_data_fields } } };
+
+/* Group: xgpon_ni - protection_switching_onus_ranged */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_protection_switching_onus_ranged_onus = { .name = "onus", .descr = "ONUs", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_PROTECTION_SWITCHING_ONUS_RANGED_ID_ONUS, .offset = offsetof(bcmolt_xgpon_ni_protection_switching_onus_ranged_data, onus), .type = &type_descr_bcmolt_xgpon_onu_eqd_list_u32 };
+static bcmcli_prop_descr * BCM_DESCR xgpon_ni_protection_switching_onus_ranged_prop_array[] = { &prop_descr_xgpon_ni_protection_switching_onus_ranged_onus };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_protection_switching_onus_ranged_data_fields[] = { { .name = "onus", .descr = "ONUs", .offset = offsetof(bcmolt_xgpon_ni_protection_switching_onus_ranged_data, onus), .type = &type_descr_bcmolt_xgpon_onu_eqd_list_u32 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_protection_switching_onus_ranged_data = { .name = "bcmolt_xgpon_ni_protection_switching_onus_ranged_data", .descr = "After a switchover is complete and all ONU ranging times have stabilized, this indication is sent to inform the host of all new ONU EQDs.", .size = sizeof(bcmolt_xgpon_ni_protection_switching_onus_ranged_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_ni_protection_switching_onus_ranged_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_ni_protection_switching_onus_ranged_data_fields } } };
+
+/* Group: xgpon_ni - protection_switching_switchover_completed */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_protection_switching_switchover_completed_result = { .name = "result", .descr = "Result", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED_ID_RESULT, .offset = offsetof(bcmolt_xgpon_ni_protection_switching_switchover_completed_data, result), .type = &type_descr_bcmolt_result };
+static bcmcli_prop_descr * BCM_DESCR xgpon_ni_protection_switching_switchover_completed_prop_array[] = { &prop_descr_xgpon_ni_protection_switching_switchover_completed_result };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_protection_switching_switchover_completed_data_fields[] = { { .name = "result", .descr = "Result", .offset = offsetof(bcmolt_xgpon_ni_protection_switching_switchover_completed_data, result), .type = &type_descr_bcmolt_result } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_protection_switching_switchover_completed_data = { .name = "bcmolt_xgpon_ni_protection_switching_switchover_completed_data", .descr = "Protection Switching Switchover Completed", .size = sizeof(bcmolt_xgpon_ni_protection_switching_switchover_completed_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_ni_protection_switching_switchover_completed_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_ni_protection_switching_switchover_completed_data_fields } } };
+
+/* Group: xgpon_ni - standby_pon_monitoring_cycle_completed */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_standby_pon_monitoring_cycle_completed_number_of_detected_delimiter = { .name = "number_of_detected_delimiter", .descr = "number of detected delimiter", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID_NUMBER_OF_DETECTED_DELIMITER, .offset = offsetof(bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data, number_of_detected_delimiter), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_standby_pon_monitoring_cycle_completed_energy_detect_signal = { .name = "energy_detect_signal", .descr = "energy detect signal", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_STANDBY_PON_MONITORING_CYCLE_COMPLETED_ID_ENERGY_DETECT_SIGNAL, .offset = offsetof(bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data, energy_detect_signal), .type = &type_descr_bcmolt_status };
+static bcmcli_prop_descr * BCM_DESCR xgpon_ni_standby_pon_monitoring_cycle_completed_prop_array[] = { &prop_descr_xgpon_ni_standby_pon_monitoring_cycle_completed_number_of_detected_delimiter, &prop_descr_xgpon_ni_standby_pon_monitoring_cycle_completed_energy_detect_signal };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data_fields[] = { { .name = "number_of_detected_delimiter", .descr = "number of detected delimiter", .offset = offsetof(bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data, number_of_detected_delimiter), .type = &type_descr_uint32_t }, { .name = "energy_detect_signal", .descr = "energy detect signal", .offset = offsetof(bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data, energy_detect_signal), .type = &type_descr_bcmolt_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data = { .name = "bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data", .descr = "Standby PON Monitoring Cycle Completed", .size = sizeof(bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data_fields } } };
+
+/* Group: xgpon_ni - onu_discovered */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_onu_discovered_serial_number = { .name = "serial_number", .descr = "serial number", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_SERIAL_NUMBER, .offset = offsetof(bcmolt_xgpon_ni_onu_discovered_data, serial_number), .type = &type_descr_bcmolt_serial_number };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_onu_discovered_ranging_time = { .name = "ranging_time", .descr = "ranging time", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_RANGING_TIME, .offset = offsetof(bcmolt_xgpon_ni_onu_discovered_data, ranging_time), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_onu_discovered_onu_id = { .name = "onu_id", .descr = "onu_id", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_ONU_ID, .offset = offsetof(bcmolt_xgpon_ni_onu_discovered_data, onu_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_onu_discovered_upstream_line_rate_capabilities = { .name = "upstream_line_rate_capabilities", .descr = "Upstream line rate capabilities", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_UPSTREAM_LINE_RATE_CAPABILITIES, .offset = offsetof(bcmolt_xgpon_ni_onu_discovered_data, upstream_line_rate_capabilities), .type = &type_descr_bcmolt_upstream_line_rate_capabilities };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_onu_discovered_current_downstream_pon_id = { .name = "current_downstream_pon_id", .descr = "The PON-ID received by the ONU in its current downstream wavelength channel", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_CURRENT_DOWNSTREAM_PON_ID, .offset = offsetof(bcmolt_xgpon_ni_onu_discovered_data, current_downstream_pon_id), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_onu_discovered_current_upstream_pon_id = { .name = "current_upstream_pon_id", .descr = "The PON-ID of the Channel Profile containing the descriptor of the upstream wavelength channel in which the ONU is transmitting", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_CURRENT_UPSTREAM_PON_ID, .offset = offsetof(bcmolt_xgpon_ni_onu_discovered_data, current_upstream_pon_id), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_onu_discovered_calibration_record = { .name = "calibration_record", .descr = "Calibration record", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_CALIBRATION_RECORD, .offset = offsetof(bcmolt_xgpon_ni_onu_discovered_data, calibration_record), .type = &type_descr_bcmolt_arr_calibration_record_8 };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_onu_discovered_tuning_granularity = { .name = "tuning_granularity", .descr = "The tuning granularity of the ONU transmitted expressed in units of 1Ghz. Value of 0 indicates that the ONU does not support fine tuning / dithering", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_TUNING_GRANULARITY, .offset = offsetof(bcmolt_xgpon_ni_onu_discovered_data, tuning_granularity), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_onu_discovered_step_tuning_time = { .name = "step_tuning_time", .descr = "The value of the tuning time for a single granularity step, expressed in unit of PHY frames. The value 0 indicates that the ONU does not support fine tuning / dithering", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_STEP_TUNING_TIME, .offset = offsetof(bcmolt_xgpon_ni_onu_discovered_data, step_tuning_time), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_onu_discovered_attenuation = { .name = "attenuation", .descr = "The ONU attenuation in steps of 3dB at the time of the message transmission as part of the power levelling report. Value of 0 represents un-attenuated transmission", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_ATTENUATION, .offset = offsetof(bcmolt_xgpon_ni_onu_discovered_data, attenuation), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_onu_discovered_power_levelling_capabilities = { .name = "power_levelling_capabilities", .descr = "The ONU supports attenuation level in step of 3dB", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_ONU_DISCOVERED_ID_POWER_LEVELLING_CAPABILITIES, .offset = offsetof(bcmolt_xgpon_ni_onu_discovered_data, power_levelling_capabilities), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr * BCM_DESCR xgpon_ni_onu_discovered_prop_array[] = { &prop_descr_xgpon_ni_onu_discovered_serial_number, &prop_descr_xgpon_ni_onu_discovered_ranging_time, &prop_descr_xgpon_ni_onu_discovered_onu_id, &prop_descr_xgpon_ni_onu_discovered_upstream_line_rate_capabilities, &prop_descr_xgpon_ni_onu_discovered_current_downstream_pon_id, &prop_descr_xgpon_ni_onu_discovered_current_upstream_pon_id, &prop_descr_xgpon_ni_onu_discovered_calibration_record, &prop_descr_xgpon_ni_onu_discovered_tuning_granularity, &prop_descr_xgpon_ni_onu_discovered_step_tuning_time, &prop_descr_xgpon_ni_onu_discovered_attenuation, &prop_descr_xgpon_ni_onu_discovered_power_levelling_capabilities };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_onu_discovered_data_fields[] = { { .name = "serial_number", .descr = "serial number", .offset = offsetof(bcmolt_xgpon_ni_onu_discovered_data, serial_number), .type = &type_descr_bcmolt_serial_number }, { .name = "ranging_time", .descr = "ranging time", .offset = offsetof(bcmolt_xgpon_ni_onu_discovered_data, ranging_time), .type = &type_descr_uint32_t }, { .name = "onu_id", .descr = "onu_id", .offset = offsetof(bcmolt_xgpon_ni_onu_discovered_data, onu_id), .type = &type_descr_uint16_t }, { .name = "upstream_line_rate_capabilities", .descr = "Upstream line rate capabilities", .offset = offsetof(bcmolt_xgpon_ni_onu_discovered_data, upstream_line_rate_capabilities), .type = &type_descr_bcmolt_upstream_line_rate_capabilities }, { .name = "current_downstream_pon_id", .descr = "The PON-ID received by the ONU in its current downstream wavelength channel", .offset = offsetof(bcmolt_xgpon_ni_onu_discovered_data, current_downstream_pon_id), .type = &type_descr_uint8_t }, { .name = "current_upstream_pon_id", .descr = "The PON-ID of the Channel Profile containing the descriptor of the upstream wavelength channel in which the ONU is transmitting", .offset = offsetof(bcmolt_xgpon_ni_onu_discovered_data, current_upstream_pon_id), .type = &type_descr_uint8_t }, { .name = "calibration_record", .descr = "Calibration record", .offset = offsetof(bcmolt_xgpon_ni_onu_discovered_data, calibration_record), .type = &type_descr_bcmolt_arr_calibration_record_8 }, { .name = "tuning_granularity", .descr = "The tuning granularity of the ONU transmitted expressed in units of 1Ghz. Value of 0 indicates that the ONU does not support fine tuning / dithering", .offset = offsetof(bcmolt_xgpon_ni_onu_discovered_data, tuning_granularity), .type = &type_descr_uint8_t }, { .name = "step_tuning_time", .descr = "The value of the tuning time for a single granularity step, expressed in unit of PHY frames. The value 0 indicates that the ONU does not support fine tuning / dithering", .offset = offsetof(bcmolt_xgpon_ni_onu_discovered_data, step_tuning_time), .type = &type_descr_uint8_t }, { .name = "attenuation", .descr = "The ONU attenuation in steps of 3dB at the time of the message transmission as part of the power levelling report. Value of 0 represents un-attenuated transmission", .offset = offsetof(bcmolt_xgpon_ni_onu_discovered_data, attenuation), .type = &type_descr_uint8_t }, { .name = "power_levelling_capabilities", .descr = "The ONU supports attenuation level in step of 3dB", .offset = offsetof(bcmolt_xgpon_ni_onu_discovered_data, power_levelling_capabilities), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_onu_discovered_data = { .name = "bcmolt_xgpon_ni_onu_discovered_data", .descr = "ONU Discovered", .size = sizeof(bcmolt_xgpon_ni_onu_discovered_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_ni_onu_discovered_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_ni_onu_discovered_data_fields } } };
+
+/* Group: xgpon_ni - cpu_packets_failure */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_cpu_packets_failure_error = { .name = "error", .descr = "The error that was encountered.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_CPU_PACKETS_FAILURE_ID_ERROR, .offset = offsetof(bcmolt_xgpon_ni_cpu_packets_failure_data, error), .type = &type_descr_bcmolt_packet_injection_error };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_cpu_packets_failure_gem_port_id = { .name = "gem_port_id", .descr = "The GEM port that caused the error.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_CPU_PACKETS_FAILURE_ID_GEM_PORT_ID, .offset = offsetof(bcmolt_xgpon_ni_cpu_packets_failure_data, gem_port_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr * BCM_DESCR xgpon_ni_cpu_packets_failure_prop_array[] = { &prop_descr_xgpon_ni_cpu_packets_failure_error, &prop_descr_xgpon_ni_cpu_packets_failure_gem_port_id };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_cpu_packets_failure_data_fields[] = { { .name = "error", .descr = "The error that was encountered.", .offset = offsetof(bcmolt_xgpon_ni_cpu_packets_failure_data, error), .type = &type_descr_bcmolt_packet_injection_error }, { .name = "gem_port_id", .descr = "The GEM port that caused the error.", .offset = offsetof(bcmolt_xgpon_ni_cpu_packets_failure_data, gem_port_id), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_cpu_packets_failure_data = { .name = "bcmolt_xgpon_ni_cpu_packets_failure_data", .descr = "A failure was encountered during the \"cpu_packets\" proxy operation.", .size = sizeof(bcmolt_xgpon_ni_cpu_packets_failure_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_ni_cpu_packets_failure_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_ni_cpu_packets_failure_data_fields } } };
+
+/* Group: xgpon_ni - cpu_packets */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_cpu_packets_packet_type = { .name = "packet_type", .descr = "packet type", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_CPU_PACKETS_ID_PACKET_TYPE, .offset = offsetof(bcmolt_xgpon_ni_cpu_packets_data, packet_type), .type = &type_descr_bcmolt_packet_type };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_cpu_packets_calc_crc = { .name = "calc_crc", .descr = "calc crc", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_CPU_PACKETS_ID_CALC_CRC, .offset = offsetof(bcmolt_xgpon_ni_cpu_packets_data, calc_crc), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_cpu_packets_gem_port_list = { .name = "gem_port_list", .descr = "gem port list", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_CPU_PACKETS_ID_GEM_PORT_LIST, .offset = offsetof(bcmolt_xgpon_ni_cpu_packets_data, gem_port_list), .type = &type_descr_bcmolt_xgpon_gem_id_list_u8_max_16 };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_cpu_packets_buffer = { .name = "buffer", .descr = "buffer", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_CPU_PACKETS_ID_BUFFER, .offset = offsetof(bcmolt_xgpon_ni_cpu_packets_data, buffer), .type = &type_descr_bcmolt_u8_list_u32_max_2048 };
+static bcmcli_prop_descr * BCM_DESCR xgpon_ni_cpu_packets_prop_array[] = { &prop_descr_xgpon_ni_cpu_packets_packet_type, &prop_descr_xgpon_ni_cpu_packets_calc_crc, &prop_descr_xgpon_ni_cpu_packets_gem_port_list, &prop_descr_xgpon_ni_cpu_packets_buffer };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_cpu_packets_data_fields[] = { { .name = "packet_type", .descr = "packet type", .offset = offsetof(bcmolt_xgpon_ni_cpu_packets_data, packet_type), .type = &type_descr_bcmolt_packet_type }, { .name = "calc_crc", .descr = "calc crc", .offset = offsetof(bcmolt_xgpon_ni_cpu_packets_data, calc_crc), .type = &type_descr_bcmos_bool }, { .name = "gem_port_list", .descr = "gem port list", .offset = offsetof(bcmolt_xgpon_ni_cpu_packets_data, gem_port_list), .type = &type_descr_bcmolt_xgpon_gem_id_list_u8_max_16 }, { .name = "buffer", .descr = "buffer", .offset = offsetof(bcmolt_xgpon_ni_cpu_packets_data, buffer), .type = &type_descr_bcmolt_u8_list_u32_max_2048 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_cpu_packets_data = { .name = "bcmolt_xgpon_ni_cpu_packets_data", .descr = "XGPON CPU packets", .size = sizeof(bcmolt_xgpon_ni_cpu_packets_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_ni_cpu_packets_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_ni_cpu_packets_data_fields } } };
+
+/* Group: xgpon_ni - broadcast_ploam_packet */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_broadcast_ploam_packet_ploam = { .name = "ploam", .descr = "ploam", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_BROADCAST_PLOAM_PACKET_ID_PLOAM, .offset = offsetof(bcmolt_xgpon_ni_broadcast_ploam_packet_data, ploam), .type = &type_descr_bcmolt_arr_u8_40 };
+static bcmcli_prop_descr * BCM_DESCR xgpon_ni_broadcast_ploam_packet_prop_array[] = { &prop_descr_xgpon_ni_broadcast_ploam_packet_ploam };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_broadcast_ploam_packet_data_fields[] = { { .name = "ploam", .descr = "ploam", .offset = offsetof(bcmolt_xgpon_ni_broadcast_ploam_packet_data, ploam), .type = &type_descr_bcmolt_arr_u8_40 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_broadcast_ploam_packet_data = { .name = "bcmolt_xgpon_ni_broadcast_ploam_packet_data", .descr = "Broadcast PLOAM Packet", .size = sizeof(bcmolt_xgpon_ni_broadcast_ploam_packet_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_ni_broadcast_ploam_packet_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_ni_broadcast_ploam_packet_data_fields } } };
+
+/* Group: xgpon_ni - rogue_detection_completed */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_rogue_detection_completed_window_type = { .name = "window_type", .descr = "Silent Window or Cut off Window", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_WINDOW_TYPE, .offset = offsetof(bcmolt_xgpon_ni_rogue_detection_completed_data, window_type), .type = &type_descr_bcmolt_rogue_detection_window };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_rogue_detection_completed_measurement_status = { .name = "measurement_status", .descr = "Status of the rogue ONU detection result.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_MEASUREMENT_STATUS, .offset = offsetof(bcmolt_xgpon_ni_rogue_detection_completed_data, measurement_status), .type = &type_descr_bcmolt_rogue_measurement_result };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_rogue_detection_completed_alloc_id = { .name = "alloc_id", .descr = "Alloc-ID", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_ALLOC_ID, .offset = offsetof(bcmolt_xgpon_ni_rogue_detection_completed_data, alloc_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_rogue_detection_completed_onu_id = { .name = "onu_id", .descr = "ONU-ID", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_ONU_ID, .offset = offsetof(bcmolt_xgpon_ni_rogue_detection_completed_data, onu_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_rogue_detection_completed_is_delineation = { .name = "is_delineation", .descr = "Burst Delineation detected during the rogue ONU detection.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_IS_DELINEATION, .offset = offsetof(bcmolt_xgpon_ni_rogue_detection_completed_data, is_delineation), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_rogue_detection_completed_is_ed = { .name = "is_ed", .descr = "Is ED", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_IS_ED, .offset = offsetof(bcmolt_xgpon_ni_rogue_detection_completed_data, is_ed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_rogue_detection_completed_rx_data = { .name = "rx_data", .descr = "Captured PLOAMu message if the burst delinieation was detected.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_RX_DATA, .offset = offsetof(bcmolt_xgpon_ni_rogue_detection_completed_data, rx_data), .type = &type_descr_bcmolt_u8_list_u32 };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_rogue_detection_completed_ploam_received_onu_id = { .name = "ploam_received_onu_id", .descr = "ONU ID received in the ploam", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_PLOAM_RECEIVED_ONU_ID, .offset = offsetof(bcmolt_xgpon_ni_rogue_detection_completed_data, ploam_received_onu_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_rogue_detection_completed_ploam_received_mic_error = { .name = "ploam_received_mic_error", .descr = "Mic error in the received ploam", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_ROGUE_DETECTION_COMPLETED_ID_PLOAM_RECEIVED_MIC_ERROR, .offset = offsetof(bcmolt_xgpon_ni_rogue_detection_completed_data, ploam_received_mic_error), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr * BCM_DESCR xgpon_ni_rogue_detection_completed_prop_array[] = { &prop_descr_xgpon_ni_rogue_detection_completed_window_type, &prop_descr_xgpon_ni_rogue_detection_completed_measurement_status, &prop_descr_xgpon_ni_rogue_detection_completed_alloc_id, &prop_descr_xgpon_ni_rogue_detection_completed_onu_id, &prop_descr_xgpon_ni_rogue_detection_completed_is_delineation, &prop_descr_xgpon_ni_rogue_detection_completed_is_ed, &prop_descr_xgpon_ni_rogue_detection_completed_rx_data, &prop_descr_xgpon_ni_rogue_detection_completed_ploam_received_onu_id, &prop_descr_xgpon_ni_rogue_detection_completed_ploam_received_mic_error };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_rogue_detection_completed_data_fields[] = { { .name = "window_type", .descr = "Silent Window or Cut off Window", .offset = offsetof(bcmolt_xgpon_ni_rogue_detection_completed_data, window_type), .type = &type_descr_bcmolt_rogue_detection_window }, { .name = "measurement_status", .descr = "Status of the rogue ONU detection result.", .offset = offsetof(bcmolt_xgpon_ni_rogue_detection_completed_data, measurement_status), .type = &type_descr_bcmolt_rogue_measurement_result }, { .name = "alloc_id", .descr = "Alloc-ID", .offset = offsetof(bcmolt_xgpon_ni_rogue_detection_completed_data, alloc_id), .type = &type_descr_uint16_t }, { .name = "onu_id", .descr = "ONU-ID", .offset = offsetof(bcmolt_xgpon_ni_rogue_detection_completed_data, onu_id), .type = &type_descr_uint16_t }, { .name = "is_delineation", .descr = "Burst Delineation detected during the rogue ONU detection.", .offset = offsetof(bcmolt_xgpon_ni_rogue_detection_completed_data, is_delineation), .type = &type_descr_bcmos_bool }, { .name = "is_ed", .descr = "Is ED", .offset = offsetof(bcmolt_xgpon_ni_rogue_detection_completed_data, is_ed), .type = &type_descr_bcmos_bool }, { .name = "rx_data", .descr = "Captured PLOAMu message if the burst delinieation was detected.", .offset = offsetof(bcmolt_xgpon_ni_rogue_detection_completed_data, rx_data), .type = &type_descr_bcmolt_u8_list_u32 }, { .name = "ploam_received_onu_id", .descr = "ONU ID received in the ploam", .offset = offsetof(bcmolt_xgpon_ni_rogue_detection_completed_data, ploam_received_onu_id), .type = &type_descr_uint16_t }, { .name = "ploam_received_mic_error", .descr = "Mic error in the received ploam", .offset = offsetof(bcmolt_xgpon_ni_rogue_detection_completed_data, ploam_received_mic_error), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_rogue_detection_completed_data = { .name = "bcmolt_xgpon_ni_rogue_detection_completed_data", .descr = "Rogue detection completed", .size = sizeof(bcmolt_xgpon_ni_rogue_detection_completed_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_ni_rogue_detection_completed_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_ni_rogue_detection_completed_data_fields } } };
+
+/* Group: xgpon_ni - deactivate_all_onus_completed */
+static bcmcli_prop_descr * BCM_DESCR xgpon_ni_deactivate_all_onus_completed_prop_array[] = { };
+
+/* Group: xgpon_ni - disable_all_onus_completed */
+static bcmcli_prop_descr * BCM_DESCR xgpon_ni_disable_all_onus_completed_prop_array[] = { };
+
+/* Group: xgpon_ni - activate_all_onus_completed */
+static bcmcli_prop_descr * BCM_DESCR xgpon_ni_activate_all_onus_completed_prop_array[] = { };
+
+/* Group: xgpon_ni - enable_all_onus_completed */
+static bcmcli_prop_descr * BCM_DESCR xgpon_ni_enable_all_onus_completed_prop_array[] = { };
+
+/* Group: xgpon_ni - tod_request_completed */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_tod_request_completed_tod_string = { .name = "tod_string", .descr = "tod_string", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_TOD_STRING, .offset = offsetof(bcmolt_xgpon_ni_tod_request_completed_data, tod_string), .type = &type_descr_bcmolt_str_64 };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_tod_request_completed_sfc = { .name = "sfc", .descr = "sfc", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_SFC, .offset = offsetof(bcmolt_xgpon_ni_tod_request_completed_data, sfc), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_tod_request_completed_rtc_offset_sec = { .name = "rtc_offset_sec", .descr = "rtc_offset_sec", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_RTC_OFFSET_SEC, .offset = offsetof(bcmolt_xgpon_ni_tod_request_completed_data, rtc_offset_sec), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_tod_request_completed_rtc_offset_nsec = { .name = "rtc_offset_nsec", .descr = "rtc_offset_nsec", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_RTC_OFFSET_NSEC, .offset = offsetof(bcmolt_xgpon_ni_tod_request_completed_data, rtc_offset_nsec), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_tod_request_completed_status = { .name = "status", .descr = "status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_TOD_REQUEST_COMPLETED_ID_STATUS, .offset = offsetof(bcmolt_xgpon_ni_tod_request_completed_data, status), .type = &type_descr_bcmolt_result };
+static bcmcli_prop_descr * BCM_DESCR xgpon_ni_tod_request_completed_prop_array[] = { &prop_descr_xgpon_ni_tod_request_completed_tod_string, &prop_descr_xgpon_ni_tod_request_completed_sfc, &prop_descr_xgpon_ni_tod_request_completed_rtc_offset_sec, &prop_descr_xgpon_ni_tod_request_completed_rtc_offset_nsec, &prop_descr_xgpon_ni_tod_request_completed_status };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_tod_request_completed_data_fields[] = { { .name = "tod_string", .descr = "tod_string", .offset = offsetof(bcmolt_xgpon_ni_tod_request_completed_data, tod_string), .type = &type_descr_bcmolt_str_64 }, { .name = "sfc", .descr = "sfc", .offset = offsetof(bcmolt_xgpon_ni_tod_request_completed_data, sfc), .type = &type_descr_uint64_t }, { .name = "rtc_offset_sec", .descr = "rtc_offset_sec", .offset = offsetof(bcmolt_xgpon_ni_tod_request_completed_data, rtc_offset_sec), .type = &type_descr_uint64_t }, { .name = "rtc_offset_nsec", .descr = "rtc_offset_nsec", .offset = offsetof(bcmolt_xgpon_ni_tod_request_completed_data, rtc_offset_nsec), .type = &type_descr_uint32_t }, { .name = "status", .descr = "status", .offset = offsetof(bcmolt_xgpon_ni_tod_request_completed_data, status), .type = &type_descr_bcmolt_result } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_tod_request_completed_data = { .name = "bcmolt_xgpon_ni_tod_request_completed_data", .descr = "TOD request completed", .size = sizeof(bcmolt_xgpon_ni_tod_request_completed_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_ni_tod_request_completed_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_ni_tod_request_completed_data_fields } } };
+
+/* Group: xgpon_ni - tod_request */
+static bcmcli_prop_descr * BCM_DESCR xgpon_ni_tod_request_prop_array[] = { };
+
+/* Group: xgpon_ni - start_onu_upgrade */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_start_onu_upgrade_list_of_onu_ids = { .name = "list_of_onu_ids", .descr = "List of ONU IDs to upgrade the firmware.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_START_ONU_UPGRADE_ID_LIST_OF_ONU_IDS, .offset = offsetof(bcmolt_xgpon_ni_start_onu_upgrade_data, list_of_onu_ids), .type = &type_descr_bcmolt_pon_onu_id_list_u32 };
+static bcmcli_prop_descr * BCM_DESCR xgpon_ni_start_onu_upgrade_prop_array[] = { &prop_descr_xgpon_ni_start_onu_upgrade_list_of_onu_ids };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_start_onu_upgrade_data_fields[] = { { .name = "list_of_onu_ids", .descr = "List of ONU IDs to upgrade the firmware.", .offset = offsetof(bcmolt_xgpon_ni_start_onu_upgrade_data, list_of_onu_ids), .type = &type_descr_bcmolt_pon_onu_id_list_u32 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_start_onu_upgrade_data = { .name = "bcmolt_xgpon_ni_start_onu_upgrade_data", .descr = "OLT to ONU firmware transfer", .size = sizeof(bcmolt_xgpon_ni_start_onu_upgrade_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_ni_start_onu_upgrade_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_ni_start_onu_upgrade_data_fields } } };
+
+/* Group: xgpon_ni - onu_upgrade_complete */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_onu_upgrade_complete_status = { .name = "status", .descr = "Success or failure.  Against entire upgrade process.  This is added per Anat's request.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_ONU_UPGRADE_COMPLETE_ID_STATUS, .offset = offsetof(bcmolt_xgpon_ni_onu_upgrade_complete_data, status), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_onu_upgrade_complete_list_of_failed_entities = { .name = "list_of_failed_entities", .descr = "List of ONU-IDs the upgrade failed for.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_ONU_UPGRADE_COMPLETE_ID_LIST_OF_FAILED_ENTITIES, .offset = offsetof(bcmolt_xgpon_ni_onu_upgrade_complete_data, list_of_failed_entities), .type = &type_descr_bcmolt_gpon_onu_upgrade_status_list_u32 };
+static bcmcli_prop_descr * BCM_DESCR xgpon_ni_onu_upgrade_complete_prop_array[] = { &prop_descr_xgpon_ni_onu_upgrade_complete_status, &prop_descr_xgpon_ni_onu_upgrade_complete_list_of_failed_entities };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_onu_upgrade_complete_data_fields[] = { { .name = "status", .descr = "Success or failure.  Against entire upgrade process.  This is added per Anat's request.", .offset = offsetof(bcmolt_xgpon_ni_onu_upgrade_complete_data, status), .type = &type_descr_bcmos_bool }, { .name = "list_of_failed_entities", .descr = "List of ONU-IDs the upgrade failed for.", .offset = offsetof(bcmolt_xgpon_ni_onu_upgrade_complete_data, list_of_failed_entities), .type = &type_descr_bcmolt_gpon_onu_upgrade_status_list_u32 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_onu_upgrade_complete_data = { .name = "bcmolt_xgpon_ni_onu_upgrade_complete_data", .descr = "ONU Upgrade Complete", .size = sizeof(bcmolt_xgpon_ni_onu_upgrade_complete_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_ni_onu_upgrade_complete_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_ni_onu_upgrade_complete_data_fields } } };
+
+/* Group: xgpon_ni - rogue_onu_special_map_cycle_start */
+static bcmcli_prop_descr * BCM_DESCR xgpon_ni_rogue_onu_special_map_cycle_start_prop_array[] = { };
+
+/* Group: xgpon_ni - adjust_tx_wavelength */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_adjust_tx_wavelength_serial_number = { .name = "serial_number", .descr = "Serial number", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_ADJUST_TX_WAVELENGTH_ID_SERIAL_NUMBER, .offset = offsetof(bcmolt_xgpon_ni_adjust_tx_wavelength_data, serial_number), .type = &type_descr_bcmolt_serial_number };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_adjust_tx_wavelength_freqency_adjustment_direction = { .name = "freqency_adjustment_direction", .descr = "Frequency adjustment direction", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_ADJUST_TX_WAVELENGTH_ID_FREQENCY_ADJUSTMENT_DIRECTION, .offset = offsetof(bcmolt_xgpon_ni_adjust_tx_wavelength_data, freqency_adjustment_direction), .type = &type_descr_bcmolt_frequency_adjustment_direction };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_adjust_tx_wavelength_frequency_adjustment_size = { .name = "frequency_adjustment_size", .descr = "The size of the frequncy adjustment in units of 0.1 Ghz", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_ADJUST_TX_WAVELENGTH_ID_FREQUENCY_ADJUSTMENT_SIZE, .offset = offsetof(bcmolt_xgpon_ni_adjust_tx_wavelength_data, frequency_adjustment_size), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr * BCM_DESCR xgpon_ni_adjust_tx_wavelength_prop_array[] = { &prop_descr_xgpon_ni_adjust_tx_wavelength_serial_number, &prop_descr_xgpon_ni_adjust_tx_wavelength_freqency_adjustment_direction, &prop_descr_xgpon_ni_adjust_tx_wavelength_frequency_adjustment_size };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_adjust_tx_wavelength_data_fields[] = { { .name = "serial_number", .descr = "Serial number", .offset = offsetof(bcmolt_xgpon_ni_adjust_tx_wavelength_data, serial_number), .type = &type_descr_bcmolt_serial_number }, { .name = "freqency_adjustment_direction", .descr = "Frequency adjustment direction", .offset = offsetof(bcmolt_xgpon_ni_adjust_tx_wavelength_data, freqency_adjustment_direction), .type = &type_descr_bcmolt_frequency_adjustment_direction }, { .name = "frequency_adjustment_size", .descr = "The size of the frequncy adjustment in units of 0.1 Ghz", .offset = offsetof(bcmolt_xgpon_ni_adjust_tx_wavelength_data, frequency_adjustment_size), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_adjust_tx_wavelength_data = { .name = "bcmolt_xgpon_ni_adjust_tx_wavelength_data", .descr = "Instruct an unassigned ONU to adjust its upstream transmitter wavelength", .size = sizeof(bcmolt_xgpon_ni_adjust_tx_wavelength_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_ni_adjust_tx_wavelength_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_ni_adjust_tx_wavelength_data_fields } } };
+
+/* Group: xgpon_ni - stat_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_stat_cfg_cfg = { .name = "cfg", .descr = "Statistic alarm configuration.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_STAT_CFG_ID_CFG, .offset = offsetof(bcmolt_xgpon_ni_stat_cfg_data, cfg), .type = &type_descr_bcmolt_stat_alarm_config };
+static bcmcli_prop_descr * BCM_DESCR xgpon_ni_stat_cfg_prop_array[] = { &prop_descr_xgpon_ni_stat_cfg_cfg };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_stat_cfg_data_fields[] = { { .name = "cfg", .descr = "Statistic alarm configuration.", .offset = offsetof(bcmolt_xgpon_ni_stat_cfg_data, cfg), .type = &type_descr_bcmolt_stat_alarm_config } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_stat_cfg_data = { .name = "bcmolt_xgpon_ni_stat_cfg_data", .descr = "Statistic Configuration", .size = sizeof(bcmolt_xgpon_ni_stat_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_ni_stat_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_ni_stat_cfg_data_fields } } };
+
+/* Group: xgpon_ni - stat_alarm_raised */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_stat_alarm_raised_stat = { .name = "stat", .descr = "Statistic identifier.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_STAT_ALARM_RAISED_ID_STAT, .offset = offsetof(bcmolt_xgpon_ni_stat_alarm_raised_data, stat), .type = &type_descr_bcmolt_xgpon_ni_stat_id };
+static bcmcli_prop_descr * BCM_DESCR xgpon_ni_stat_alarm_raised_prop_array[] = { &prop_descr_xgpon_ni_stat_alarm_raised_stat };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_stat_alarm_raised_data_fields[] = { { .name = "stat", .descr = "Statistic identifier.", .offset = offsetof(bcmolt_xgpon_ni_stat_alarm_raised_data, stat), .type = &type_descr_bcmolt_xgpon_ni_stat_id } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_stat_alarm_raised_data = { .name = "bcmolt_xgpon_ni_stat_alarm_raised_data", .descr = "Sent when a configured statistic alarm condition has been met.", .size = sizeof(bcmolt_xgpon_ni_stat_alarm_raised_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_ni_stat_alarm_raised_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_ni_stat_alarm_raised_data_fields } } };
+
+/* Group: xgpon_ni - stat_alarm_cleared */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_stat_alarm_cleared_stat = { .name = "stat", .descr = "Statistic identifier.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_STAT_ALARM_CLEARED_ID_STAT, .offset = offsetof(bcmolt_xgpon_ni_stat_alarm_cleared_data, stat), .type = &type_descr_bcmolt_xgpon_ni_stat_id };
+static bcmcli_prop_descr * BCM_DESCR xgpon_ni_stat_alarm_cleared_prop_array[] = { &prop_descr_xgpon_ni_stat_alarm_cleared_stat };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_stat_alarm_cleared_data_fields[] = { { .name = "stat", .descr = "Statistic identifier.", .offset = offsetof(bcmolt_xgpon_ni_stat_alarm_cleared_data, stat), .type = &type_descr_bcmolt_xgpon_ni_stat_id } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_stat_alarm_cleared_data = { .name = "bcmolt_xgpon_ni_stat_alarm_cleared_data", .descr = "Sent when a configured statistic alarm condition is no longer met.", .size = sizeof(bcmolt_xgpon_ni_stat_alarm_cleared_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_ni_stat_alarm_cleared_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_ni_stat_alarm_cleared_data_fields } } };
+
+/* Group: xgpon_ni - auto_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_auto_cfg_activate_all_onus_completed = { .name = "activate_all_onus_completed", .descr = "If true, indications of type \"activate_all_onus_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_AUTO_CFG_ID_ACTIVATE_ALL_ONUS_COMPLETED, .offset = offsetof(bcmolt_xgpon_ni_auto_cfg_data, activate_all_onus_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_auto_cfg_cpu_packets_failure = { .name = "cpu_packets_failure", .descr = "If true, indications of type \"cpu_packets_failure\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_AUTO_CFG_ID_CPU_PACKETS_FAILURE, .offset = offsetof(bcmolt_xgpon_ni_auto_cfg_data, cpu_packets_failure), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_auto_cfg_deactivate_all_onus_completed = { .name = "deactivate_all_onus_completed", .descr = "If true, indications of type \"deactivate_all_onus_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_AUTO_CFG_ID_DEACTIVATE_ALL_ONUS_COMPLETED, .offset = offsetof(bcmolt_xgpon_ni_auto_cfg_data, deactivate_all_onus_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_auto_cfg_disable_all_onus_completed = { .name = "disable_all_onus_completed", .descr = "If true, indications of type \"disable_all_onus_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_AUTO_CFG_ID_DISABLE_ALL_ONUS_COMPLETED, .offset = offsetof(bcmolt_xgpon_ni_auto_cfg_data, disable_all_onus_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_auto_cfg_enable_all_onus_completed = { .name = "enable_all_onus_completed", .descr = "If true, indications of type \"enable_all_onus_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_AUTO_CFG_ID_ENABLE_ALL_ONUS_COMPLETED, .offset = offsetof(bcmolt_xgpon_ni_auto_cfg_data, enable_all_onus_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_auto_cfg_los = { .name = "los", .descr = "If true, indications of type \"los\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_AUTO_CFG_ID_LOS, .offset = offsetof(bcmolt_xgpon_ni_auto_cfg_data, los), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_auto_cfg_onu_discovered = { .name = "onu_discovered", .descr = "If true, indications of type \"onu_discovered\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_AUTO_CFG_ID_ONU_DISCOVERED, .offset = offsetof(bcmolt_xgpon_ni_auto_cfg_data, onu_discovered), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_auto_cfg_onu_upgrade_complete = { .name = "onu_upgrade_complete", .descr = "If true, indications of type \"onu_upgrade_complete\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_AUTO_CFG_ID_ONU_UPGRADE_COMPLETE, .offset = offsetof(bcmolt_xgpon_ni_auto_cfg_data, onu_upgrade_complete), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_auto_cfg_protection_switching_onus_ranged = { .name = "protection_switching_onus_ranged", .descr = "If true, indications of type \"protection_switching_onus_ranged\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_ONUS_RANGED, .offset = offsetof(bcmolt_xgpon_ni_auto_cfg_data, protection_switching_onus_ranged), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_auto_cfg_protection_switching_switchover_completed = { .name = "protection_switching_switchover_completed", .descr = "If true, indications of type \"protection_switching_switchover_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED, .offset = offsetof(bcmolt_xgpon_ni_auto_cfg_data, protection_switching_switchover_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_auto_cfg_protection_switching_traffic_resume = { .name = "protection_switching_traffic_resume", .descr = "If true, indications of type \"protection_switching_traffic_resume\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_AUTO_CFG_ID_PROTECTION_SWITCHING_TRAFFIC_RESUME, .offset = offsetof(bcmolt_xgpon_ni_auto_cfg_data, protection_switching_traffic_resume), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_auto_cfg_rogue_detection_completed = { .name = "rogue_detection_completed", .descr = "If true, indications of type \"rogue_detection_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_AUTO_CFG_ID_ROGUE_DETECTION_COMPLETED, .offset = offsetof(bcmolt_xgpon_ni_auto_cfg_data, rogue_detection_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_auto_cfg_rogue_onu_special_map_cycle_start = { .name = "rogue_onu_special_map_cycle_start", .descr = "If true, indications of type \"rogue_onu_special_map_cycle_start\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_AUTO_CFG_ID_ROGUE_ONU_SPECIAL_MAP_CYCLE_START, .offset = offsetof(bcmolt_xgpon_ni_auto_cfg_data, rogue_onu_special_map_cycle_start), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_auto_cfg_serial_number_acquisition_cycle_start = { .name = "serial_number_acquisition_cycle_start", .descr = "If true, indications of type \"serial_number_acquisition_cycle_start\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_AUTO_CFG_ID_SERIAL_NUMBER_ACQUISITION_CYCLE_START, .offset = offsetof(bcmolt_xgpon_ni_auto_cfg_data, serial_number_acquisition_cycle_start), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_auto_cfg_standby_pon_monitoring_cycle_completed = { .name = "standby_pon_monitoring_cycle_completed", .descr = "If true, indications of type \"standby_pon_monitoring_cycle_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_AUTO_CFG_ID_STANDBY_PON_MONITORING_CYCLE_COMPLETED, .offset = offsetof(bcmolt_xgpon_ni_auto_cfg_data, standby_pon_monitoring_cycle_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_auto_cfg_stat_alarm_cleared = { .name = "stat_alarm_cleared", .descr = "If true, indications of type \"stat_alarm_cleared\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_AUTO_CFG_ID_STAT_ALARM_CLEARED, .offset = offsetof(bcmolt_xgpon_ni_auto_cfg_data, stat_alarm_cleared), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_auto_cfg_stat_alarm_raised = { .name = "stat_alarm_raised", .descr = "If true, indications of type \"stat_alarm_raised\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_AUTO_CFG_ID_STAT_ALARM_RAISED, .offset = offsetof(bcmolt_xgpon_ni_auto_cfg_data, stat_alarm_raised), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_auto_cfg_state_change_completed = { .name = "state_change_completed", .descr = "If true, indications of type \"state_change_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_AUTO_CFG_ID_STATE_CHANGE_COMPLETED, .offset = offsetof(bcmolt_xgpon_ni_auto_cfg_data, state_change_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_ni_auto_cfg_tod_request_completed = { .name = "tod_request_completed", .descr = "If true, indications of type \"tod_request_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_NI_AUTO_CFG_ID_TOD_REQUEST_COMPLETED, .offset = offsetof(bcmolt_xgpon_ni_auto_cfg_data, tod_request_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr * BCM_DESCR xgpon_ni_auto_cfg_prop_array[] = { &prop_descr_xgpon_ni_auto_cfg_activate_all_onus_completed, &prop_descr_xgpon_ni_auto_cfg_cpu_packets_failure, &prop_descr_xgpon_ni_auto_cfg_deactivate_all_onus_completed, &prop_descr_xgpon_ni_auto_cfg_disable_all_onus_completed, &prop_descr_xgpon_ni_auto_cfg_enable_all_onus_completed, &prop_descr_xgpon_ni_auto_cfg_los, &prop_descr_xgpon_ni_auto_cfg_onu_discovered, &prop_descr_xgpon_ni_auto_cfg_onu_upgrade_complete, &prop_descr_xgpon_ni_auto_cfg_protection_switching_onus_ranged, &prop_descr_xgpon_ni_auto_cfg_protection_switching_switchover_completed, &prop_descr_xgpon_ni_auto_cfg_protection_switching_traffic_resume, &prop_descr_xgpon_ni_auto_cfg_rogue_detection_completed, &prop_descr_xgpon_ni_auto_cfg_rogue_onu_special_map_cycle_start, &prop_descr_xgpon_ni_auto_cfg_serial_number_acquisition_cycle_start, &prop_descr_xgpon_ni_auto_cfg_standby_pon_monitoring_cycle_completed, &prop_descr_xgpon_ni_auto_cfg_stat_alarm_cleared, &prop_descr_xgpon_ni_auto_cfg_stat_alarm_raised, &prop_descr_xgpon_ni_auto_cfg_state_change_completed, &prop_descr_xgpon_ni_auto_cfg_tod_request_completed };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_auto_cfg_data_fields[] = { { .name = "activate_all_onus_completed", .descr = "If true, indications of type \"activate_all_onus_completed\" will be generated.", .offset = offsetof(bcmolt_xgpon_ni_auto_cfg_data, activate_all_onus_completed), .type = &type_descr_bcmos_bool }, { .name = "cpu_packets_failure", .descr = "If true, indications of type \"cpu_packets_failure\" will be generated.", .offset = offsetof(bcmolt_xgpon_ni_auto_cfg_data, cpu_packets_failure), .type = &type_descr_bcmos_bool }, { .name = "deactivate_all_onus_completed", .descr = "If true, indications of type \"deactivate_all_onus_completed\" will be generated.", .offset = offsetof(bcmolt_xgpon_ni_auto_cfg_data, deactivate_all_onus_completed), .type = &type_descr_bcmos_bool }, { .name = "disable_all_onus_completed", .descr = "If true, indications of type \"disable_all_onus_completed\" will be generated.", .offset = offsetof(bcmolt_xgpon_ni_auto_cfg_data, disable_all_onus_completed), .type = &type_descr_bcmos_bool }, { .name = "enable_all_onus_completed", .descr = "If true, indications of type \"enable_all_onus_completed\" will be generated.", .offset = offsetof(bcmolt_xgpon_ni_auto_cfg_data, enable_all_onus_completed), .type = &type_descr_bcmos_bool }, { .name = "los", .descr = "If true, indications of type \"los\" will be generated.", .offset = offsetof(bcmolt_xgpon_ni_auto_cfg_data, los), .type = &type_descr_bcmos_bool }, { .name = "onu_discovered", .descr = "If true, indications of type \"onu_discovered\" will be generated.", .offset = offsetof(bcmolt_xgpon_ni_auto_cfg_data, onu_discovered), .type = &type_descr_bcmos_bool }, { .name = "onu_upgrade_complete", .descr = "If true, indications of type \"onu_upgrade_complete\" will be generated.", .offset = offsetof(bcmolt_xgpon_ni_auto_cfg_data, onu_upgrade_complete), .type = &type_descr_bcmos_bool }, { .name = "protection_switching_onus_ranged", .descr = "If true, indications of type \"protection_switching_onus_ranged\" will be generated.", .offset = offsetof(bcmolt_xgpon_ni_auto_cfg_data, protection_switching_onus_ranged), .type = &type_descr_bcmos_bool }, { .name = "protection_switching_switchover_completed", .descr = "If true, indications of type \"protection_switching_switchover_completed\" will be generated.", .offset = offsetof(bcmolt_xgpon_ni_auto_cfg_data, protection_switching_switchover_completed), .type = &type_descr_bcmos_bool }, { .name = "protection_switching_traffic_resume", .descr = "If true, indications of type \"protection_switching_traffic_resume\" will be generated.", .offset = offsetof(bcmolt_xgpon_ni_auto_cfg_data, protection_switching_traffic_resume), .type = &type_descr_bcmos_bool }, { .name = "rogue_detection_completed", .descr = "If true, indications of type \"rogue_detection_completed\" will be generated.", .offset = offsetof(bcmolt_xgpon_ni_auto_cfg_data, rogue_detection_completed), .type = &type_descr_bcmos_bool }, { .name = "rogue_onu_special_map_cycle_start", .descr = "If true, indications of type \"rogue_onu_special_map_cycle_start\" will be generated.", .offset = offsetof(bcmolt_xgpon_ni_auto_cfg_data, rogue_onu_special_map_cycle_start), .type = &type_descr_bcmos_bool }, { .name = "serial_number_acquisition_cycle_start", .descr = "If true, indications of type \"serial_number_acquisition_cycle_start\" will be generated.", .offset = offsetof(bcmolt_xgpon_ni_auto_cfg_data, serial_number_acquisition_cycle_start), .type = &type_descr_bcmos_bool }, { .name = "standby_pon_monitoring_cycle_completed", .descr = "If true, indications of type \"standby_pon_monitoring_cycle_completed\" will be generated.", .offset = offsetof(bcmolt_xgpon_ni_auto_cfg_data, standby_pon_monitoring_cycle_completed), .type = &type_descr_bcmos_bool }, { .name = "stat_alarm_cleared", .descr = "If true, indications of type \"stat_alarm_cleared\" will be generated.", .offset = offsetof(bcmolt_xgpon_ni_auto_cfg_data, stat_alarm_cleared), .type = &type_descr_bcmos_bool }, { .name = "stat_alarm_raised", .descr = "If true, indications of type \"stat_alarm_raised\" will be generated.", .offset = offsetof(bcmolt_xgpon_ni_auto_cfg_data, stat_alarm_raised), .type = &type_descr_bcmos_bool }, { .name = "state_change_completed", .descr = "If true, indications of type \"state_change_completed\" will be generated.", .offset = offsetof(bcmolt_xgpon_ni_auto_cfg_data, state_change_completed), .type = &type_descr_bcmos_bool }, { .name = "tod_request_completed", .descr = "If true, indications of type \"tod_request_completed\" will be generated.", .offset = offsetof(bcmolt_xgpon_ni_auto_cfg_data, tod_request_completed), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_ni_auto_cfg_data = { .name = "bcmolt_xgpon_ni_auto_cfg_data", .descr = "Indication Configuration", .size = sizeof(bcmolt_xgpon_ni_auto_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_ni_auto_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_ni_auto_cfg_data_fields } } };
+
+/* ==== Object: xgpon_onu ==== */
+
+/* Group: xgpon_onu - key */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_key_pon_ni = { .name = "pon_ni", .descr = "PON network interface", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_KEY_ID_PON_NI, .offset = offsetof(bcmolt_xgpon_onu_key, pon_ni), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_key_onu_id = { .name = "onu_id", .descr = "onu id", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_KEY_ID_ONU_ID, .offset = offsetof(bcmolt_xgpon_onu_key, onu_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_key_prop_array[] = { &prop_descr_xgpon_onu_key_pon_ni, &prop_descr_xgpon_onu_key_onu_id };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_key_fields[] = { { .name = "pon_ni", .descr = "PON network interface", .offset = offsetof(bcmolt_xgpon_onu_key, pon_ni), .type = &type_descr_uint8_t }, { .name = "onu_id", .descr = "onu id", .offset = offsetof(bcmolt_xgpon_onu_key, onu_id), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_key = { .name = "bcmolt_xgpon_onu_key", .descr = "key", .size = sizeof(bcmolt_xgpon_onu_key), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_key_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_key_fields } } };
+
+/* Group: xgpon_onu - cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_cfg_onu_state = { .name = "onu_state", .descr = "Current ONU state", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_CFG_ID_ONU_STATE, .offset = offsetof(bcmolt_xgpon_onu_cfg_data, onu_state), .type = &type_descr_bcmolt_onu_state };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_cfg_onu_old_state = { .name = "onu_old_state", .descr = "onu old state", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_XGPON_ONU_CFG_ID_ONU_OLD_STATE, .offset = offsetof(bcmolt_xgpon_onu_cfg_data, onu_old_state), .type = &type_descr_bcmolt_onu_state };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_cfg_alarm_state = { .name = "alarm_state", .descr = "State of all ONU alarms.  This is normally read-only and can only be written when the PON is in active-standby mode to keep the ONU in sync.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_CFG_ID_ALARM_STATE, .offset = offsetof(bcmolt_xgpon_onu_cfg_data, alarm_state), .type = &type_descr_bcmolt_xgpon_onu_alarm_state };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_cfg_registration_encryption_keys = { .name = "registration_encryption_keys", .descr = "AES encryption keys learned during ONU registration.  This is normally read-only and can only be written when the PON is in active-standby mode to keep the ONU in sync.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_CFG_ID_REGISTRATION_ENCRYPTION_KEYS, .offset = offsetof(bcmolt_xgpon_onu_cfg_data, registration_encryption_keys), .type = &type_descr_bcmolt_xgpon_onu_registration_keys };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_cfg_current_encryption_key = { .name = "current_encryption_key", .descr = "Current AES encryption key.  This is normally read-only and can only be written when the PON is in active-standby mode to keep the ONU in sync.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_CFG_ID_CURRENT_ENCRYPTION_KEY, .offset = offsetof(bcmolt_xgpon_onu_cfg_data, current_encryption_key), .type = &type_descr_bcmolt_xgpon_onu_aes_key };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_cfg_serial_number = { .name = "serial_number", .descr = "ONU serial number", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_CFG_ID_SERIAL_NUMBER, .offset = offsetof(bcmolt_xgpon_onu_cfg_data, serial_number), .type = &type_descr_bcmolt_serial_number };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_cfg_registration_id = { .name = "registration_id", .descr = "ONU registration ID", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_CFG_ID_REGISTRATION_ID, .offset = offsetof(bcmolt_xgpon_onu_cfg_data, registration_id), .type = &type_descr_bcmolt_arr_u8_36 };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_cfg_registration_id_auto_learning = { .name = "registration_id_auto_learning", .descr = "Enable\\Disable automatic registration learning", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_CFG_ID_REGISTRATION_ID_AUTO_LEARNING, .offset = offsetof(bcmolt_xgpon_onu_cfg_data, registration_id_auto_learning), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_cfg_ranging_burst_profile = { .name = "ranging_burst_profile", .descr = "Burst profile index for ranging allocations", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_CFG_ID_RANGING_BURST_PROFILE, .offset = offsetof(bcmolt_xgpon_onu_cfg_data, ranging_burst_profile), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_cfg_data_burst_profile = { .name = "data_burst_profile", .descr = "Burst profile index for data allocations", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_CFG_ID_DATA_BURST_PROFILE, .offset = offsetof(bcmolt_xgpon_onu_cfg_data, data_burst_profile), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_cfg_ranging_time = { .name = "ranging_time", .descr = "ONU ranging time.  This is normally read-only and can only be written when the PON is in active-standby mode to keep the ONU in sync.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_CFG_ID_RANGING_TIME, .offset = offsetof(bcmolt_xgpon_onu_cfg_data, ranging_time), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_cfg_disabled_after_discovery = { .name = "disabled_after_discovery", .descr = "This ONU was disabled after SN discovery", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_XGPON_ONU_CFG_ID_DISABLED_AFTER_DISCOVERY, .offset = offsetof(bcmolt_xgpon_onu_cfg_data, disabled_after_discovery), .type = &type_descr_bcmolt_status };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_cfg_deactivation_reason = { .name = "deactivation_reason", .descr = "deactivation reason", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_XGPON_ONU_CFG_ID_DEACTIVATION_REASON, .offset = offsetof(bcmolt_xgpon_onu_cfg_data, deactivation_reason), .type = &type_descr_bcmolt_deactivation_reason };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_cfg_all_gem_ports = { .name = "all_gem_ports", .descr = "All unicast GEM ports currently provisioned on this ONU.", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_XGPON_ONU_CFG_ID_ALL_GEM_PORTS, .offset = offsetof(bcmolt_xgpon_onu_cfg_data, all_gem_ports), .type = &type_descr_bcmolt_xgpon_gem_port_with_state_list_u16_max_256 };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_cfg_all_allocs = { .name = "all_allocs", .descr = "All alloc IDs currently provisioned on this ONU.", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_XGPON_ONU_CFG_ID_ALL_ALLOCS, .offset = offsetof(bcmolt_xgpon_onu_cfg_data, all_allocs), .type = &type_descr_bcmolt_xgpon_alloc_with_state_list_u16_max_32 };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_cfg_extended_guard_time = { .name = "extended_guard_time", .descr = "Additional guard time (in bytes) for this ONU.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_CFG_ID_EXTENDED_GUARD_TIME, .offset = offsetof(bcmolt_xgpon_onu_cfg_data, extended_guard_time), .type = &type_descr_bcmolt_extended_guard_time };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_cfg_us_line_rate = { .name = "us_line_rate", .descr = "US line rate", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_CFG_ID_US_LINE_RATE, .offset = offsetof(bcmolt_xgpon_onu_cfg_data, us_line_rate), .type = &type_descr_bcmolt_upstream_line_rate_capabilities };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_cfg_calibration_record = { .name = "calibration_record", .descr = "Calibration record", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_CFG_ID_CALIBRATION_RECORD, .offset = offsetof(bcmolt_xgpon_onu_cfg_data, calibration_record), .type = &type_descr_bcmolt_arr_calibration_record_8 };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_cfg_tuning_granularity = { .name = "tuning_granularity", .descr = "The tuning granularity of the ONU transmitted expressed in units of 1GHz. Value of 0 indicates that the ONU does not support fine tuning/dithering", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_CFG_ID_TUNING_GRANULARITY, .offset = offsetof(bcmolt_xgpon_onu_cfg_data, tuning_granularity), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_cfg_step_tuning_time = { .name = "step_tuning_time", .descr = "The value of the tuning time for a single granularity step, expressed in units of PHY frames.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_CFG_ID_STEP_TUNING_TIME, .offset = offsetof(bcmolt_xgpon_onu_cfg_data, step_tuning_time), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_cfg_power_levelling_capabilities = { .name = "power_levelling_capabilities", .descr = "Power levelling capabilities", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_CFG_ID_POWER_LEVELLING_CAPABILITIES, .offset = offsetof(bcmolt_xgpon_onu_cfg_data, power_levelling_capabilities), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_cfg_request_registration_status = { .name = "request_registration_status", .descr = "This value indicate that the onu is in the middle of request registration process", .access = BCMOLT_PROP_ACCESS_ID_R, .property = BCMOLT_XGPON_ONU_CFG_ID_REQUEST_REGISTRATION_STATUS, .offset = offsetof(bcmolt_xgpon_onu_cfg_data, request_registration_status), .type = &type_descr_bcmolt_request_registration_status };
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_cfg_prop_array[] = { &prop_descr_xgpon_onu_cfg_onu_state, &prop_descr_xgpon_onu_cfg_onu_old_state, &prop_descr_xgpon_onu_cfg_alarm_state, &prop_descr_xgpon_onu_cfg_registration_encryption_keys, &prop_descr_xgpon_onu_cfg_current_encryption_key, &prop_descr_xgpon_onu_cfg_serial_number, &prop_descr_xgpon_onu_cfg_registration_id, &prop_descr_xgpon_onu_cfg_registration_id_auto_learning, &prop_descr_xgpon_onu_cfg_ranging_burst_profile, &prop_descr_xgpon_onu_cfg_data_burst_profile, &prop_descr_xgpon_onu_cfg_ranging_time, &prop_descr_xgpon_onu_cfg_disabled_after_discovery, &prop_descr_xgpon_onu_cfg_deactivation_reason, &prop_descr_xgpon_onu_cfg_all_gem_ports, &prop_descr_xgpon_onu_cfg_all_allocs, &prop_descr_xgpon_onu_cfg_extended_guard_time, &prop_descr_xgpon_onu_cfg_us_line_rate, &prop_descr_xgpon_onu_cfg_calibration_record, &prop_descr_xgpon_onu_cfg_tuning_granularity, &prop_descr_xgpon_onu_cfg_step_tuning_time, &prop_descr_xgpon_onu_cfg_power_levelling_capabilities, &prop_descr_xgpon_onu_cfg_request_registration_status };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_cfg_data_fields[] = { { .name = "onu_state", .descr = "Current ONU state", .offset = offsetof(bcmolt_xgpon_onu_cfg_data, onu_state), .type = &type_descr_bcmolt_onu_state }, { .name = "onu_old_state", .descr = "onu old state", .offset = offsetof(bcmolt_xgpon_onu_cfg_data, onu_old_state), .type = &type_descr_bcmolt_onu_state }, { .name = "alarm_state", .descr = "State of all ONU alarms.  This is normally read-only and can only be written when the PON is in active-standby mode to keep the ONU in sync.", .offset = offsetof(bcmolt_xgpon_onu_cfg_data, alarm_state), .type = &type_descr_bcmolt_xgpon_onu_alarm_state }, { .name = "registration_encryption_keys", .descr = "AES encryption keys learned during ONU registration.  This is normally read-only and can only be written when the PON is in active-standby mode to keep the ONU in sync.", .offset = offsetof(bcmolt_xgpon_onu_cfg_data, registration_encryption_keys), .type = &type_descr_bcmolt_xgpon_onu_registration_keys }, { .name = "current_encryption_key", .descr = "Current AES encryption key.  This is normally read-only and can only be written when the PON is in active-standby mode to keep the ONU in sync.", .offset = offsetof(bcmolt_xgpon_onu_cfg_data, current_encryption_key), .type = &type_descr_bcmolt_xgpon_onu_aes_key }, { .name = "serial_number", .descr = "ONU serial number", .offset = offsetof(bcmolt_xgpon_onu_cfg_data, serial_number), .type = &type_descr_bcmolt_serial_number }, { .name = "registration_id", .descr = "ONU registration ID", .offset = offsetof(bcmolt_xgpon_onu_cfg_data, registration_id), .type = &type_descr_bcmolt_arr_u8_36 }, { .name = "registration_id_auto_learning", .descr = "Enable\\Disable automatic registration learning", .offset = offsetof(bcmolt_xgpon_onu_cfg_data, registration_id_auto_learning), .type = &type_descr_bcmos_bool }, { .name = "ranging_burst_profile", .descr = "Burst profile index for ranging allocations", .offset = offsetof(bcmolt_xgpon_onu_cfg_data, ranging_burst_profile), .type = &type_descr_uint8_t }, { .name = "data_burst_profile", .descr = "Burst profile index for data allocations", .offset = offsetof(bcmolt_xgpon_onu_cfg_data, data_burst_profile), .type = &type_descr_uint8_t }, { .name = "ranging_time", .descr = "ONU ranging time.  This is normally read-only and can only be written when the PON is in active-standby mode to keep the ONU in sync.", .offset = offsetof(bcmolt_xgpon_onu_cfg_data, ranging_time), .type = &type_descr_uint32_t }, { .name = "disabled_after_discovery", .descr = "This ONU was disabled after SN discovery", .offset = offsetof(bcmolt_xgpon_onu_cfg_data, disabled_after_discovery), .type = &type_descr_bcmolt_status }, { .name = "deactivation_reason", .descr = "deactivation reason", .offset = offsetof(bcmolt_xgpon_onu_cfg_data, deactivation_reason), .type = &type_descr_bcmolt_deactivation_reason }, { .name = "all_gem_ports", .descr = "All unicast GEM ports currently provisioned on this ONU.", .offset = offsetof(bcmolt_xgpon_onu_cfg_data, all_gem_ports), .type = &type_descr_bcmolt_xgpon_gem_port_with_state_list_u16_max_256 }, { .name = "all_allocs", .descr = "All alloc IDs currently provisioned on this ONU.", .offset = offsetof(bcmolt_xgpon_onu_cfg_data, all_allocs), .type = &type_descr_bcmolt_xgpon_alloc_with_state_list_u16_max_32 }, { .name = "extended_guard_time", .descr = "Additional guard time (in bytes) for this ONU.", .offset = offsetof(bcmolt_xgpon_onu_cfg_data, extended_guard_time), .type = &type_descr_bcmolt_extended_guard_time }, { .name = "us_line_rate", .descr = "US line rate", .offset = offsetof(bcmolt_xgpon_onu_cfg_data, us_line_rate), .type = &type_descr_bcmolt_upstream_line_rate_capabilities }, { .name = "calibration_record", .descr = "Calibration record", .offset = offsetof(bcmolt_xgpon_onu_cfg_data, calibration_record), .type = &type_descr_bcmolt_arr_calibration_record_8 }, { .name = "tuning_granularity", .descr = "The tuning granularity of the ONU transmitted expressed in units of 1GHz. Value of 0 indicates that the ONU does not support fine tuning/dithering", .offset = offsetof(bcmolt_xgpon_onu_cfg_data, tuning_granularity), .type = &type_descr_uint8_t }, { .name = "step_tuning_time", .descr = "The value of the tuning time for a single granularity step, expressed in units of PHY frames.", .offset = offsetof(bcmolt_xgpon_onu_cfg_data, step_tuning_time), .type = &type_descr_uint8_t }, { .name = "power_levelling_capabilities", .descr = "Power levelling capabilities", .offset = offsetof(bcmolt_xgpon_onu_cfg_data, power_levelling_capabilities), .type = &type_descr_uint8_t }, { .name = "request_registration_status", .descr = "This value indicate that the onu is in the middle of request registration process", .offset = offsetof(bcmolt_xgpon_onu_cfg_data, request_registration_status), .type = &type_descr_bcmolt_request_registration_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_cfg_data = { .name = "bcmolt_xgpon_onu_cfg_data", .descr = "cfg", .size = sizeof(bcmolt_xgpon_onu_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_cfg_data_fields } } };
+
+/* Group: xgpon_onu - stat */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_stat_positive_drift = { .name = "positive_drift", .descr = "positive drift", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_STAT_ID_POSITIVE_DRIFT, .offset = offsetof(bcmolt_xgpon_onu_stat_data, positive_drift), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_stat_negative_drift = { .name = "negative_drift", .descr = "negative drift", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_STAT_ID_NEGATIVE_DRIFT, .offset = offsetof(bcmolt_xgpon_onu_stat_data, negative_drift), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_stat_delimiter_miss_detection = { .name = "delimiter_miss_detection", .descr = "delimiter miss detection", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_STAT_ID_DELIMITER_MISS_DETECTION, .offset = offsetof(bcmolt_xgpon_onu_stat_data, delimiter_miss_detection), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_stat_bip32_errors = { .name = "bip32_errors", .descr = "bip32 errors", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_STAT_ID_BIP32_ERRORS, .offset = offsetof(bcmolt_xgpon_onu_stat_data, bip32_errors), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_stat_rx_words = { .name = "rx_words", .descr = "Number of 4-byte words received (word size is 4 bytes regardless of upstream data rate).", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_STAT_ID_RX_WORDS, .offset = offsetof(bcmolt_xgpon_onu_stat_data, rx_words), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_stat_fec_corrected_symbols = { .name = "fec_corrected_symbols", .descr = "fec corrected symbols", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_STAT_ID_FEC_CORRECTED_SYMBOLS, .offset = offsetof(bcmolt_xgpon_onu_stat_data, fec_corrected_symbols), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_stat_fec_corrected_codewords = { .name = "fec_corrected_codewords", .descr = "fec corrected codewords", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_STAT_ID_FEC_CORRECTED_CODEWORDS, .offset = offsetof(bcmolt_xgpon_onu_stat_data, fec_corrected_codewords), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_stat_fec_uncorrectable_codewords = { .name = "fec_uncorrectable_codewords", .descr = "fec uncorrectable codewords", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_STAT_ID_FEC_UNCORRECTABLE_CODEWORDS, .offset = offsetof(bcmolt_xgpon_onu_stat_data, fec_uncorrectable_codewords), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_stat_fec_codewords = { .name = "fec_codewords", .descr = "fec total codewords", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_STAT_ID_FEC_CODEWORDS, .offset = offsetof(bcmolt_xgpon_onu_stat_data, fec_codewords), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_stat_fec_corrected_bits = { .name = "fec_corrected_bits", .descr = "fec corrected bits", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_STAT_ID_FEC_CORRECTED_BITS, .offset = offsetof(bcmolt_xgpon_onu_stat_data, fec_corrected_bits), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_stat_xgem_key_errors = { .name = "xgem_key_errors", .descr = "xgem key error", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_STAT_ID_XGEM_KEY_ERRORS, .offset = offsetof(bcmolt_xgpon_onu_stat_data, xgem_key_errors), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_stat_xgem_loss = { .name = "xgem_loss", .descr = "xgem loss ", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_STAT_ID_XGEM_LOSS, .offset = offsetof(bcmolt_xgpon_onu_stat_data, xgem_loss), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_stat_rx_ploams_mic_error = { .name = "rx_ploams_mic_error", .descr = "mic error ploam", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_STAT_ID_RX_PLOAMS_MIC_ERROR, .offset = offsetof(bcmolt_xgpon_onu_stat_data, rx_ploams_mic_error), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_stat_rx_ploams_non_idle = { .name = "rx_ploams_non_idle", .descr = "non idle ploam", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_STAT_ID_RX_PLOAMS_NON_IDLE, .offset = offsetof(bcmolt_xgpon_onu_stat_data, rx_ploams_non_idle), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_stat_rx_omci = { .name = "rx_omci", .descr = "Received OMCI packets", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_STAT_ID_RX_OMCI, .offset = offsetof(bcmolt_xgpon_onu_stat_data, rx_omci), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_stat_rx_omci_packets_crc_error = { .name = "rx_omci_packets_crc_error", .descr = "Received OMCI packets with CRC errors", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_STAT_ID_RX_OMCI_PACKETS_CRC_ERROR, .offset = offsetof(bcmolt_xgpon_onu_stat_data, rx_omci_packets_crc_error), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_stat_rx_bytes = { .name = "rx_bytes", .descr = "rx bytes", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_STAT_ID_RX_BYTES, .offset = offsetof(bcmolt_xgpon_onu_stat_data, rx_bytes), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_stat_rx_packets = { .name = "rx_packets", .descr = "rx packets", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_STAT_ID_RX_PACKETS, .offset = offsetof(bcmolt_xgpon_onu_stat_data, rx_packets), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_stat_tx_bytes = { .name = "tx_bytes", .descr = "tx bytes", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_STAT_ID_TX_BYTES, .offset = offsetof(bcmolt_xgpon_onu_stat_data, tx_bytes), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_stat_tx_packets = { .name = "tx_packets", .descr = "tx packets", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_STAT_ID_TX_PACKETS, .offset = offsetof(bcmolt_xgpon_onu_stat_data, tx_packets), .type = &type_descr_uint64_t };
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_stat_prop_array[] = { &prop_descr_xgpon_onu_stat_positive_drift, &prop_descr_xgpon_onu_stat_negative_drift, &prop_descr_xgpon_onu_stat_delimiter_miss_detection, &prop_descr_xgpon_onu_stat_bip32_errors, &prop_descr_xgpon_onu_stat_rx_words, &prop_descr_xgpon_onu_stat_fec_corrected_symbols, &prop_descr_xgpon_onu_stat_fec_corrected_codewords, &prop_descr_xgpon_onu_stat_fec_uncorrectable_codewords, &prop_descr_xgpon_onu_stat_fec_codewords, &prop_descr_xgpon_onu_stat_fec_corrected_bits, &prop_descr_xgpon_onu_stat_xgem_key_errors, &prop_descr_xgpon_onu_stat_xgem_loss, &prop_descr_xgpon_onu_stat_rx_ploams_mic_error, &prop_descr_xgpon_onu_stat_rx_ploams_non_idle, &prop_descr_xgpon_onu_stat_rx_omci, &prop_descr_xgpon_onu_stat_rx_omci_packets_crc_error, &prop_descr_xgpon_onu_stat_rx_bytes, &prop_descr_xgpon_onu_stat_rx_packets, &prop_descr_xgpon_onu_stat_tx_bytes, &prop_descr_xgpon_onu_stat_tx_packets };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_stat_data_fields[] = { { .name = "positive_drift", .descr = "positive drift", .offset = offsetof(bcmolt_xgpon_onu_stat_data, positive_drift), .type = &type_descr_uint64_t }, { .name = "negative_drift", .descr = "negative drift", .offset = offsetof(bcmolt_xgpon_onu_stat_data, negative_drift), .type = &type_descr_uint64_t }, { .name = "delimiter_miss_detection", .descr = "delimiter miss detection", .offset = offsetof(bcmolt_xgpon_onu_stat_data, delimiter_miss_detection), .type = &type_descr_uint64_t }, { .name = "bip32_errors", .descr = "bip32 errors", .offset = offsetof(bcmolt_xgpon_onu_stat_data, bip32_errors), .type = &type_descr_uint64_t }, { .name = "rx_words", .descr = "Number of 4-byte words received (word size is 4 bytes regardless of upstream data rate).", .offset = offsetof(bcmolt_xgpon_onu_stat_data, rx_words), .type = &type_descr_uint64_t }, { .name = "fec_corrected_symbols", .descr = "fec corrected symbols", .offset = offsetof(bcmolt_xgpon_onu_stat_data, fec_corrected_symbols), .type = &type_descr_uint64_t }, { .name = "fec_corrected_codewords", .descr = "fec corrected codewords", .offset = offsetof(bcmolt_xgpon_onu_stat_data, fec_corrected_codewords), .type = &type_descr_uint64_t }, { .name = "fec_uncorrectable_codewords", .descr = "fec uncorrectable codewords", .offset = offsetof(bcmolt_xgpon_onu_stat_data, fec_uncorrectable_codewords), .type = &type_descr_uint64_t }, { .name = "fec_codewords", .descr = "fec total codewords", .offset = offsetof(bcmolt_xgpon_onu_stat_data, fec_codewords), .type = &type_descr_uint64_t }, { .name = "fec_corrected_bits", .descr = "fec corrected bits", .offset = offsetof(bcmolt_xgpon_onu_stat_data, fec_corrected_bits), .type = &type_descr_uint64_t }, { .name = "xgem_key_errors", .descr = "xgem key error", .offset = offsetof(bcmolt_xgpon_onu_stat_data, xgem_key_errors), .type = &type_descr_uint64_t }, { .name = "xgem_loss", .descr = "xgem loss ", .offset = offsetof(bcmolt_xgpon_onu_stat_data, xgem_loss), .type = &type_descr_uint64_t }, { .name = "rx_ploams_mic_error", .descr = "mic error ploam", .offset = offsetof(bcmolt_xgpon_onu_stat_data, rx_ploams_mic_error), .type = &type_descr_uint64_t }, { .name = "rx_ploams_non_idle", .descr = "non idle ploam", .offset = offsetof(bcmolt_xgpon_onu_stat_data, rx_ploams_non_idle), .type = &type_descr_uint64_t }, { .name = "rx_omci", .descr = "Received OMCI packets", .offset = offsetof(bcmolt_xgpon_onu_stat_data, rx_omci), .type = &type_descr_uint64_t }, { .name = "rx_omci_packets_crc_error", .descr = "Received OMCI packets with CRC errors", .offset = offsetof(bcmolt_xgpon_onu_stat_data, rx_omci_packets_crc_error), .type = &type_descr_uint64_t }, { .name = "rx_bytes", .descr = "rx bytes", .offset = offsetof(bcmolt_xgpon_onu_stat_data, rx_bytes), .type = &type_descr_uint64_t }, { .name = "rx_packets", .descr = "rx packets", .offset = offsetof(bcmolt_xgpon_onu_stat_data, rx_packets), .type = &type_descr_uint64_t }, { .name = "tx_bytes", .descr = "tx bytes", .offset = offsetof(bcmolt_xgpon_onu_stat_data, tx_bytes), .type = &type_descr_uint64_t }, { .name = "tx_packets", .descr = "tx packets", .offset = offsetof(bcmolt_xgpon_onu_stat_data, tx_packets), .type = &type_descr_uint64_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_stat_data = { .name = "bcmolt_xgpon_onu_stat_data", .descr = "stat", .size = sizeof(bcmolt_xgpon_onu_stat_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_stat_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_stat_data_fields } } };
+
+/* Group: xgpon_onu - set_onu_state */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_set_onu_state_onu_state = { .name = "onu_state", .descr = "ONU state", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_SET_ONU_STATE_ID_ONU_STATE, .offset = offsetof(bcmolt_xgpon_onu_set_onu_state_data, onu_state), .type = &type_descr_bcmolt_onu_operation };
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_set_onu_state_prop_array[] = { &prop_descr_xgpon_onu_set_onu_state_onu_state };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_set_onu_state_data_fields[] = { { .name = "onu_state", .descr = "ONU state", .offset = offsetof(bcmolt_xgpon_onu_set_onu_state_data, onu_state), .type = &type_descr_bcmolt_onu_operation } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_set_onu_state_data = { .name = "bcmolt_xgpon_onu_set_onu_state_data", .descr = "Set ONU State", .size = sizeof(bcmolt_xgpon_onu_set_onu_state_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_set_onu_state_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_set_onu_state_data_fields } } };
+
+/* Group: xgpon_onu - rssi_measurement */
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_rssi_measurement_prop_array[] = { };
+
+/* Group: xgpon_onu - onu_alarm */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_onu_alarm_onu_alarm = { .name = "onu_alarm", .descr = "onu alarm", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_ONU_ALARM_ID_ONU_ALARM, .offset = offsetof(bcmolt_xgpon_onu_onu_alarm_data, onu_alarm), .type = &type_descr_bcmolt_xgpon_onu_alarms };
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_onu_alarm_prop_array[] = { &prop_descr_xgpon_onu_onu_alarm_onu_alarm };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_onu_alarm_data_fields[] = { { .name = "onu_alarm", .descr = "onu alarm", .offset = offsetof(bcmolt_xgpon_onu_onu_alarm_data, onu_alarm), .type = &type_descr_bcmolt_xgpon_onu_alarms } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_onu_alarm_data = { .name = "bcmolt_xgpon_onu_onu_alarm_data", .descr = "ONU Alarm", .size = sizeof(bcmolt_xgpon_onu_onu_alarm_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_onu_alarm_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_onu_alarm_data_fields } } };
+
+/* Group: xgpon_onu - dowi */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_dowi_alarm_status = { .name = "alarm_status", .descr = "Alarm status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_DOWI_ID_ALARM_STATUS, .offset = offsetof(bcmolt_xgpon_onu_dowi_data, alarm_status), .type = &type_descr_bcmolt_status };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_dowi_drift_value = { .name = "drift_value", .descr = "Calculated amount of drift (positive + negative as a signed value).", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_DOWI_ID_DRIFT_VALUE, .offset = offsetof(bcmolt_xgpon_onu_dowi_data, drift_value), .type = &type_descr_int32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_dowi_new_eqd = { .name = "new_eqd", .descr = "New EQD after drift is corrected (only valid if status is 'on').", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_DOWI_ID_NEW_EQD, .offset = offsetof(bcmolt_xgpon_onu_dowi_data, new_eqd), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_dowi_prop_array[] = { &prop_descr_xgpon_onu_dowi_alarm_status, &prop_descr_xgpon_onu_dowi_drift_value, &prop_descr_xgpon_onu_dowi_new_eqd };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_dowi_data_fields[] = { { .name = "alarm_status", .descr = "Alarm status", .offset = offsetof(bcmolt_xgpon_onu_dowi_data, alarm_status), .type = &type_descr_bcmolt_status }, { .name = "drift_value", .descr = "Calculated amount of drift (positive + negative as a signed value).", .offset = offsetof(bcmolt_xgpon_onu_dowi_data, drift_value), .type = &type_descr_int32_t }, { .name = "new_eqd", .descr = "New EQD after drift is corrected (only valid if status is 'on').", .offset = offsetof(bcmolt_xgpon_onu_dowi_data, new_eqd), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_dowi_data = { .name = "bcmolt_xgpon_onu_dowi_data", .descr = "Drift of Window of ONUi", .size = sizeof(bcmolt_xgpon_onu_dowi_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_dowi_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_dowi_data_fields } } };
+
+/* Group: xgpon_onu - sfi */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_sfi_alarm_status = { .name = "alarm_status", .descr = "alarm status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_SFI_ID_ALARM_STATUS, .offset = offsetof(bcmolt_xgpon_onu_sfi_data, alarm_status), .type = &type_descr_bcmolt_status };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_sfi_ber = { .name = "ber", .descr = "Inverse bit error rate (e.g. if this number is 1000, the BER is 1/1000).", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_SFI_ID_BER, .offset = offsetof(bcmolt_xgpon_onu_sfi_data, ber), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_sfi_prop_array[] = { &prop_descr_xgpon_onu_sfi_alarm_status, &prop_descr_xgpon_onu_sfi_ber };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_sfi_data_fields[] = { { .name = "alarm_status", .descr = "alarm status", .offset = offsetof(bcmolt_xgpon_onu_sfi_data, alarm_status), .type = &type_descr_bcmolt_status }, { .name = "ber", .descr = "Inverse bit error rate (e.g. if this number is 1000, the BER is 1/1000).", .offset = offsetof(bcmolt_xgpon_onu_sfi_data, ber), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_sfi_data = { .name = "bcmolt_xgpon_onu_sfi_data", .descr = "Signal Fail of ONUi", .size = sizeof(bcmolt_xgpon_onu_sfi_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_sfi_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_sfi_data_fields } } };
+
+/* Group: xgpon_onu - sdi */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_sdi_alarm_status = { .name = "alarm_status", .descr = "alarm status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_SDI_ID_ALARM_STATUS, .offset = offsetof(bcmolt_xgpon_onu_sdi_data, alarm_status), .type = &type_descr_bcmolt_status };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_sdi_ber = { .name = "ber", .descr = "Inverse bit error rate (e.g. if this number is 1000, the BER is 1/1000).", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_SDI_ID_BER, .offset = offsetof(bcmolt_xgpon_onu_sdi_data, ber), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_sdi_prop_array[] = { &prop_descr_xgpon_onu_sdi_alarm_status, &prop_descr_xgpon_onu_sdi_ber };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_sdi_data_fields[] = { { .name = "alarm_status", .descr = "alarm status", .offset = offsetof(bcmolt_xgpon_onu_sdi_data, alarm_status), .type = &type_descr_bcmolt_status }, { .name = "ber", .descr = "Inverse bit error rate (e.g. if this number is 1000, the BER is 1/1000).", .offset = offsetof(bcmolt_xgpon_onu_sdi_data, ber), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_sdi_data = { .name = "bcmolt_xgpon_onu_sdi_data", .descr = "Signal Degraded of ONUi", .size = sizeof(bcmolt_xgpon_onu_sdi_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_sdi_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_sdi_data_fields } } };
+
+/* Group: xgpon_onu - dfi */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_dfi_alarm_status = { .name = "alarm_status", .descr = "alarm status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_DFI_ID_ALARM_STATUS, .offset = offsetof(bcmolt_xgpon_onu_dfi_data, alarm_status), .type = &type_descr_bcmolt_status };
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_dfi_prop_array[] = { &prop_descr_xgpon_onu_dfi_alarm_status };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_dfi_data_fields[] = { { .name = "alarm_status", .descr = "alarm status", .offset = offsetof(bcmolt_xgpon_onu_dfi_data, alarm_status), .type = &type_descr_bcmolt_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_dfi_data = { .name = "bcmolt_xgpon_onu_dfi_data", .descr = "Receive Dying-Gasp of ONUi", .size = sizeof(bcmolt_xgpon_onu_dfi_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_dfi_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_dfi_data_fields } } };
+
+/* Group: xgpon_onu - pqsi */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_pqsi_alarm_status = { .name = "alarm_status", .descr = "alarm status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_PQSI_ID_ALARM_STATUS, .offset = offsetof(bcmolt_xgpon_onu_pqsi_data, alarm_status), .type = &type_descr_bcmolt_status };
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_pqsi_prop_array[] = { &prop_descr_xgpon_onu_pqsi_alarm_status };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_pqsi_data_fields[] = { { .name = "alarm_status", .descr = "alarm status", .offset = offsetof(bcmolt_xgpon_onu_pqsi_data, alarm_status), .type = &type_descr_bcmolt_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_pqsi_data = { .name = "bcmolt_xgpon_onu_pqsi_data", .descr = "ploam queue status", .size = sizeof(bcmolt_xgpon_onu_pqsi_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_pqsi_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_pqsi_data_fields } } };
+
+/* Group: xgpon_onu - sufi */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_sufi_alarm_status = { .name = "alarm_status", .descr = "alarm status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_SUFI_ID_ALARM_STATUS, .offset = offsetof(bcmolt_xgpon_onu_sufi_data, alarm_status), .type = &type_descr_bcmolt_status };
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_sufi_prop_array[] = { &prop_descr_xgpon_onu_sufi_alarm_status };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_sufi_data_fields[] = { { .name = "alarm_status", .descr = "alarm status", .offset = offsetof(bcmolt_xgpon_onu_sufi_data, alarm_status), .type = &type_descr_bcmolt_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_sufi_data = { .name = "bcmolt_xgpon_onu_sufi_data", .descr = "SUFi", .size = sizeof(bcmolt_xgpon_onu_sufi_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_sufi_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_sufi_data_fields } } };
+
+/* Group: xgpon_onu - tiwi */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_tiwi_alarm_status = { .name = "alarm_status", .descr = "Alarm status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_TIWI_ID_ALARM_STATUS, .offset = offsetof(bcmolt_xgpon_onu_tiwi_data, alarm_status), .type = &type_descr_bcmolt_status };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_tiwi_drift_value = { .name = "drift_value", .descr = "Calculated amount of drift (positive + negative as a signed value).", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_TIWI_ID_DRIFT_VALUE, .offset = offsetof(bcmolt_xgpon_onu_tiwi_data, drift_value), .type = &type_descr_int32_t };
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_tiwi_prop_array[] = { &prop_descr_xgpon_onu_tiwi_alarm_status, &prop_descr_xgpon_onu_tiwi_drift_value };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_tiwi_data_fields[] = { { .name = "alarm_status", .descr = "Alarm status", .offset = offsetof(bcmolt_xgpon_onu_tiwi_data, alarm_status), .type = &type_descr_bcmolt_status }, { .name = "drift_value", .descr = "Calculated amount of drift (positive + negative as a signed value).", .offset = offsetof(bcmolt_xgpon_onu_tiwi_data, drift_value), .type = &type_descr_int32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_tiwi_data = { .name = "bcmolt_xgpon_onu_tiwi_data", .descr = "Transmission Interference Warning", .size = sizeof(bcmolt_xgpon_onu_tiwi_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_tiwi_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_tiwi_data_fields } } };
+
+/* Group: xgpon_onu - looci */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_looci_alarm_status = { .name = "alarm_status", .descr = "alarm status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_LOOCI_ID_ALARM_STATUS, .offset = offsetof(bcmolt_xgpon_onu_looci_data, alarm_status), .type = &type_descr_bcmolt_status };
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_looci_prop_array[] = { &prop_descr_xgpon_onu_looci_alarm_status };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_looci_data_fields[] = { { .name = "alarm_status", .descr = "alarm status", .offset = offsetof(bcmolt_xgpon_onu_looci_data, alarm_status), .type = &type_descr_bcmolt_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_looci_data = { .name = "bcmolt_xgpon_onu_looci_data", .descr = "LOOCi", .size = sizeof(bcmolt_xgpon_onu_looci_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_looci_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_looci_data_fields } } };
+
+/* Group: xgpon_onu - ranging_completed */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_ranging_completed_status = { .name = "status", .descr = "status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_STATUS, .offset = offsetof(bcmolt_xgpon_onu_ranging_completed_data, status), .type = &type_descr_bcmolt_result };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_ranging_completed_fail_reason = { .name = "fail_reason", .descr = "fail reason", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_FAIL_REASON, .offset = offsetof(bcmolt_xgpon_onu_ranging_completed_data, fail_reason), .type = &type_descr_bcmolt_ranging_fail_reason };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_ranging_completed_eqd = { .name = "eqd", .descr = "EQD", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_EQD, .offset = offsetof(bcmolt_xgpon_onu_ranging_completed_data, eqd), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_ranging_completed_number_of_ploams = { .name = "number_of_ploams", .descr = "number of ploams", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_NUMBER_OF_PLOAMS, .offset = offsetof(bcmolt_xgpon_onu_ranging_completed_data, number_of_ploams), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_ranging_completed_power_level = { .name = "power_level", .descr = "power level", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_RANGING_COMPLETED_ID_POWER_LEVEL, .offset = offsetof(bcmolt_xgpon_onu_ranging_completed_data, power_level), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_ranging_completed_prop_array[] = { &prop_descr_xgpon_onu_ranging_completed_status, &prop_descr_xgpon_onu_ranging_completed_fail_reason, &prop_descr_xgpon_onu_ranging_completed_eqd, &prop_descr_xgpon_onu_ranging_completed_number_of_ploams, &prop_descr_xgpon_onu_ranging_completed_power_level };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_ranging_completed_data_fields[] = { { .name = "status", .descr = "status", .offset = offsetof(bcmolt_xgpon_onu_ranging_completed_data, status), .type = &type_descr_bcmolt_result }, { .name = "fail_reason", .descr = "fail reason", .offset = offsetof(bcmolt_xgpon_onu_ranging_completed_data, fail_reason), .type = &type_descr_bcmolt_ranging_fail_reason }, { .name = "eqd", .descr = "EQD", .offset = offsetof(bcmolt_xgpon_onu_ranging_completed_data, eqd), .type = &type_descr_uint32_t }, { .name = "number_of_ploams", .descr = "number of ploams", .offset = offsetof(bcmolt_xgpon_onu_ranging_completed_data, number_of_ploams), .type = &type_descr_uint8_t }, { .name = "power_level", .descr = "power level", .offset = offsetof(bcmolt_xgpon_onu_ranging_completed_data, power_level), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_ranging_completed_data = { .name = "bcmolt_xgpon_onu_ranging_completed_data", .descr = "Ranging Completed", .size = sizeof(bcmolt_xgpon_onu_ranging_completed_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_ranging_completed_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_ranging_completed_data_fields } } };
+
+/* Group: xgpon_onu - onu_activation_completed */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_onu_activation_completed_status = { .name = "status", .descr = "status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID_STATUS, .offset = offsetof(bcmolt_xgpon_onu_onu_activation_completed_data, status), .type = &type_descr_bcmolt_result };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_onu_activation_completed_fail_reason = { .name = "fail_reason", .descr = "fail reason", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID_FAIL_REASON, .offset = offsetof(bcmolt_xgpon_onu_onu_activation_completed_data, fail_reason), .type = &type_descr_bcmolt_activation_fail_reason };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_onu_activation_completed_registration_id = { .name = "registration_id", .descr = "registration id", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID_REGISTRATION_ID, .offset = offsetof(bcmolt_xgpon_onu_onu_activation_completed_data, registration_id), .type = &type_descr_bcmolt_arr_u8_36 };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_onu_activation_completed_registration_encryption_keys = { .name = "registration_encryption_keys", .descr = "registration encryption keys", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_ONU_ACTIVATION_COMPLETED_ID_REGISTRATION_ENCRYPTION_KEYS, .offset = offsetof(bcmolt_xgpon_onu_onu_activation_completed_data, registration_encryption_keys), .type = &type_descr_bcmolt_xgpon_onu_registration_keys };
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_onu_activation_completed_prop_array[] = { &prop_descr_xgpon_onu_onu_activation_completed_status, &prop_descr_xgpon_onu_onu_activation_completed_fail_reason, &prop_descr_xgpon_onu_onu_activation_completed_registration_id, &prop_descr_xgpon_onu_onu_activation_completed_registration_encryption_keys };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_onu_activation_completed_data_fields[] = { { .name = "status", .descr = "status", .offset = offsetof(bcmolt_xgpon_onu_onu_activation_completed_data, status), .type = &type_descr_bcmolt_result }, { .name = "fail_reason", .descr = "fail reason", .offset = offsetof(bcmolt_xgpon_onu_onu_activation_completed_data, fail_reason), .type = &type_descr_bcmolt_activation_fail_reason }, { .name = "registration_id", .descr = "registration id", .offset = offsetof(bcmolt_xgpon_onu_onu_activation_completed_data, registration_id), .type = &type_descr_bcmolt_arr_u8_36 }, { .name = "registration_encryption_keys", .descr = "registration encryption keys", .offset = offsetof(bcmolt_xgpon_onu_onu_activation_completed_data, registration_encryption_keys), .type = &type_descr_bcmolt_xgpon_onu_registration_keys } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_onu_activation_completed_data = { .name = "bcmolt_xgpon_onu_onu_activation_completed_data", .descr = "ONU Activation Completed", .size = sizeof(bcmolt_xgpon_onu_onu_activation_completed_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_onu_activation_completed_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_onu_activation_completed_data_fields } } };
+
+/* Group: xgpon_onu - onu_deactivation_completed */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_onu_deactivation_completed_status = { .name = "status", .descr = "Status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_ONU_DEACTIVATION_COMPLETED_ID_STATUS, .offset = offsetof(bcmolt_xgpon_onu_onu_deactivation_completed_data, status), .type = &type_descr_bcmolt_result };
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_onu_deactivation_completed_prop_array[] = { &prop_descr_xgpon_onu_onu_deactivation_completed_status };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_onu_deactivation_completed_data_fields[] = { { .name = "status", .descr = "Status", .offset = offsetof(bcmolt_xgpon_onu_onu_deactivation_completed_data, status), .type = &type_descr_bcmolt_result } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_onu_deactivation_completed_data = { .name = "bcmolt_xgpon_onu_onu_deactivation_completed_data", .descr = "ONU Deactivation Completed", .size = sizeof(bcmolt_xgpon_onu_onu_deactivation_completed_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_onu_deactivation_completed_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_onu_deactivation_completed_data_fields } } };
+
+/* Group: xgpon_onu - onu_enable_completed */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_onu_enable_completed_serial_number = { .name = "serial_number", .descr = "serial number", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_ONU_ENABLE_COMPLETED_ID_SERIAL_NUMBER, .offset = offsetof(bcmolt_xgpon_onu_onu_enable_completed_data, serial_number), .type = &type_descr_bcmolt_serial_number };
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_onu_enable_completed_prop_array[] = { &prop_descr_xgpon_onu_onu_enable_completed_serial_number };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_onu_enable_completed_data_fields[] = { { .name = "serial_number", .descr = "serial number", .offset = offsetof(bcmolt_xgpon_onu_onu_enable_completed_data, serial_number), .type = &type_descr_bcmolt_serial_number } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_onu_enable_completed_data = { .name = "bcmolt_xgpon_onu_onu_enable_completed_data", .descr = "ONU Enable Completed", .size = sizeof(bcmolt_xgpon_onu_onu_enable_completed_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_onu_enable_completed_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_onu_enable_completed_data_fields } } };
+
+/* Group: xgpon_onu - onu_disable_completed */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_onu_disable_completed_serial_number = { .name = "serial_number", .descr = "serial number", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_ONU_DISABLE_COMPLETED_ID_SERIAL_NUMBER, .offset = offsetof(bcmolt_xgpon_onu_onu_disable_completed_data, serial_number), .type = &type_descr_bcmolt_serial_number };
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_onu_disable_completed_prop_array[] = { &prop_descr_xgpon_onu_onu_disable_completed_serial_number };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_onu_disable_completed_data_fields[] = { { .name = "serial_number", .descr = "serial number", .offset = offsetof(bcmolt_xgpon_onu_onu_disable_completed_data, serial_number), .type = &type_descr_bcmolt_serial_number } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_onu_disable_completed_data = { .name = "bcmolt_xgpon_onu_onu_disable_completed_data", .descr = "ONU Disable Completed", .size = sizeof(bcmolt_xgpon_onu_onu_disable_completed_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_onu_disable_completed_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_onu_disable_completed_data_fields } } };
+
+/* Group: xgpon_onu - rssi_measurement_completed */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_rssi_measurement_completed_status = { .name = "status", .descr = "status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID_STATUS, .offset = offsetof(bcmolt_xgpon_onu_rssi_measurement_completed_data, status), .type = &type_descr_bcmolt_result };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_rssi_measurement_completed_fail_reason = { .name = "fail_reason", .descr = "fail reason", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_RSSI_MEASUREMENT_COMPLETED_ID_FAIL_REASON, .offset = offsetof(bcmolt_xgpon_onu_rssi_measurement_completed_data, fail_reason), .type = &type_descr_bcmolt_rssi_measurement_fail_reason };
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_rssi_measurement_completed_prop_array[] = { &prop_descr_xgpon_onu_rssi_measurement_completed_status, &prop_descr_xgpon_onu_rssi_measurement_completed_fail_reason };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_rssi_measurement_completed_data_fields[] = { { .name = "status", .descr = "status", .offset = offsetof(bcmolt_xgpon_onu_rssi_measurement_completed_data, status), .type = &type_descr_bcmolt_result }, { .name = "fail_reason", .descr = "fail reason", .offset = offsetof(bcmolt_xgpon_onu_rssi_measurement_completed_data, fail_reason), .type = &type_descr_bcmolt_rssi_measurement_fail_reason } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_rssi_measurement_completed_data = { .name = "bcmolt_xgpon_onu_rssi_measurement_completed_data", .descr = "RSSI Measurement Completed", .size = sizeof(bcmolt_xgpon_onu_rssi_measurement_completed_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_rssi_measurement_completed_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_rssi_measurement_completed_data_fields } } };
+
+/* Group: xgpon_onu - invalid_dbru_report */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_invalid_dbru_report_alloc_id = { .name = "alloc_id", .descr = "Alloc-ID", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_INVALID_DBRU_REPORT_ID_ALLOC_ID, .offset = offsetof(bcmolt_xgpon_onu_invalid_dbru_report_data, alloc_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_invalid_dbru_report_prop_array[] = { &prop_descr_xgpon_onu_invalid_dbru_report_alloc_id };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_invalid_dbru_report_data_fields[] = { { .name = "alloc_id", .descr = "Alloc-ID", .offset = offsetof(bcmolt_xgpon_onu_invalid_dbru_report_data, alloc_id), .type = &type_descr_uint16_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_invalid_dbru_report_data = { .name = "bcmolt_xgpon_onu_invalid_dbru_report_data", .descr = "Invalid DBRu Report", .size = sizeof(bcmolt_xgpon_onu_invalid_dbru_report_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_invalid_dbru_report_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_invalid_dbru_report_data_fields } } };
+
+/* Group: xgpon_onu - key_exchange_completed */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_key_exchange_completed_new_key = { .name = "new_key", .descr = "new key", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_KEY_EXCHANGE_COMPLETED_ID_NEW_KEY, .offset = offsetof(bcmolt_xgpon_onu_key_exchange_completed_data, new_key), .type = &type_descr_bcmolt_xgpon_onu_aes_key };
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_key_exchange_completed_prop_array[] = { &prop_descr_xgpon_onu_key_exchange_completed_new_key };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_key_exchange_completed_data_fields[] = { { .name = "new_key", .descr = "new key", .offset = offsetof(bcmolt_xgpon_onu_key_exchange_completed_data, new_key), .type = &type_descr_bcmolt_xgpon_onu_aes_key } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_key_exchange_completed_data = { .name = "bcmolt_xgpon_onu_key_exchange_completed_data", .descr = "Key Exchange Completed", .size = sizeof(bcmolt_xgpon_onu_key_exchange_completed_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_key_exchange_completed_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_key_exchange_completed_data_fields } } };
+
+/* Group: xgpon_onu - key_exchange_key_request_timeout */
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_key_exchange_key_request_timeout_prop_array[] = { };
+
+/* Group: xgpon_onu - key_exchange_cycle_skipped */
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_key_exchange_cycle_skipped_prop_array[] = { };
+
+/* Group: xgpon_onu - key_exchange_key_mismatch */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_key_exchange_key_mismatch_expected_key = { .name = "expected_key", .descr = "expected key", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID_EXPECTED_KEY, .offset = offsetof(bcmolt_xgpon_onu_key_exchange_key_mismatch_data, expected_key), .type = &type_descr_bcmolt_aes_key };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_key_exchange_key_mismatch_received_key = { .name = "received_key", .descr = "received key", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_KEY_EXCHANGE_KEY_MISMATCH_ID_RECEIVED_KEY, .offset = offsetof(bcmolt_xgpon_onu_key_exchange_key_mismatch_data, received_key), .type = &type_descr_bcmolt_aes_key };
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_key_exchange_key_mismatch_prop_array[] = { &prop_descr_xgpon_onu_key_exchange_key_mismatch_expected_key, &prop_descr_xgpon_onu_key_exchange_key_mismatch_received_key };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_key_exchange_key_mismatch_data_fields[] = { { .name = "expected_key", .descr = "expected key", .offset = offsetof(bcmolt_xgpon_onu_key_exchange_key_mismatch_data, expected_key), .type = &type_descr_bcmolt_aes_key }, { .name = "received_key", .descr = "received key", .offset = offsetof(bcmolt_xgpon_onu_key_exchange_key_mismatch_data, received_key), .type = &type_descr_bcmolt_aes_key } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_key_exchange_key_mismatch_data = { .name = "bcmolt_xgpon_onu_key_exchange_key_mismatch_data", .descr = "Key Exchange Key Mismatch", .size = sizeof(bcmolt_xgpon_onu_key_exchange_key_mismatch_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_key_exchange_key_mismatch_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_key_exchange_key_mismatch_data_fields } } };
+
+/* Group: xgpon_onu - optical_reflection */
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_optical_reflection_prop_array[] = { };
+
+/* Group: xgpon_onu - ploam_packet */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_ploam_packet_default_key = { .name = "default_key", .descr = "default key", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_PLOAM_PACKET_ID_DEFAULT_KEY, .offset = offsetof(bcmolt_xgpon_onu_ploam_packet_data, default_key), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_ploam_packet_ploam = { .name = "ploam", .descr = "ploam", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_PLOAM_PACKET_ID_PLOAM, .offset = offsetof(bcmolt_xgpon_onu_ploam_packet_data, ploam), .type = &type_descr_bcmolt_arr_u8_40 };
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_ploam_packet_prop_array[] = { &prop_descr_xgpon_onu_ploam_packet_default_key, &prop_descr_xgpon_onu_ploam_packet_ploam };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_ploam_packet_data_fields[] = { { .name = "default_key", .descr = "default key", .offset = offsetof(bcmolt_xgpon_onu_ploam_packet_data, default_key), .type = &type_descr_bcmos_bool }, { .name = "ploam", .descr = "ploam", .offset = offsetof(bcmolt_xgpon_onu_ploam_packet_data, ploam), .type = &type_descr_bcmolt_arr_u8_40 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_ploam_packet_data = { .name = "bcmolt_xgpon_onu_ploam_packet_data", .descr = "PLOAM Packet", .size = sizeof(bcmolt_xgpon_onu_ploam_packet_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_ploam_packet_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_ploam_packet_data_fields } } };
+
+/* Group: xgpon_onu - cpu_packets */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_cpu_packets_packet_type = { .name = "packet_type", .descr = "packet type", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_CPU_PACKETS_ID_PACKET_TYPE, .offset = offsetof(bcmolt_xgpon_onu_cpu_packets_data, packet_type), .type = &type_descr_bcmolt_packet_type };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_cpu_packets_calc_crc = { .name = "calc_crc", .descr = "calc crc", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_CPU_PACKETS_ID_CALC_CRC, .offset = offsetof(bcmolt_xgpon_onu_cpu_packets_data, calc_crc), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_cpu_packets_number_of_packets = { .name = "number_of_packets", .descr = "number of packets", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_CPU_PACKETS_ID_NUMBER_OF_PACKETS, .offset = offsetof(bcmolt_xgpon_onu_cpu_packets_data, number_of_packets), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_cpu_packets_packet_size = { .name = "packet_size", .descr = "Single packet size", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_CPU_PACKETS_ID_PACKET_SIZE, .offset = offsetof(bcmolt_xgpon_onu_cpu_packets_data, packet_size), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_cpu_packets_buffer = { .name = "buffer", .descr = "buffer", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_CPU_PACKETS_ID_BUFFER, .offset = offsetof(bcmolt_xgpon_onu_cpu_packets_data, buffer), .type = &type_descr_bcmolt_u8_list_u32_max_2048 };
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_cpu_packets_prop_array[] = { &prop_descr_xgpon_onu_cpu_packets_packet_type, &prop_descr_xgpon_onu_cpu_packets_calc_crc, &prop_descr_xgpon_onu_cpu_packets_number_of_packets, &prop_descr_xgpon_onu_cpu_packets_packet_size, &prop_descr_xgpon_onu_cpu_packets_buffer };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_cpu_packets_data_fields[] = { { .name = "packet_type", .descr = "packet type", .offset = offsetof(bcmolt_xgpon_onu_cpu_packets_data, packet_type), .type = &type_descr_bcmolt_packet_type }, { .name = "calc_crc", .descr = "calc crc", .offset = offsetof(bcmolt_xgpon_onu_cpu_packets_data, calc_crc), .type = &type_descr_bcmos_bool }, { .name = "number_of_packets", .descr = "number of packets", .offset = offsetof(bcmolt_xgpon_onu_cpu_packets_data, number_of_packets), .type = &type_descr_uint8_t }, { .name = "packet_size", .descr = "Single packet size", .offset = offsetof(bcmolt_xgpon_onu_cpu_packets_data, packet_size), .type = &type_descr_uint16_t }, { .name = "buffer", .descr = "buffer", .offset = offsetof(bcmolt_xgpon_onu_cpu_packets_data, buffer), .type = &type_descr_bcmolt_u8_list_u32_max_2048 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_cpu_packets_data = { .name = "bcmolt_xgpon_onu_cpu_packets_data", .descr = "XGPON CPU packets", .size = sizeof(bcmolt_xgpon_onu_cpu_packets_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_cpu_packets_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_cpu_packets_data_fields } } };
+
+/* Group: xgpon_onu - cpu_packet */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_cpu_packet_port_id = { .name = "port_id", .descr = "port id", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_CPU_PACKET_ID_PORT_ID, .offset = offsetof(bcmolt_xgpon_onu_cpu_packet_data, port_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_cpu_packet_crc_ok = { .name = "crc_ok", .descr = "crc ok", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_CPU_PACKET_ID_CRC_OK, .offset = offsetof(bcmolt_xgpon_onu_cpu_packet_data, crc_ok), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_cpu_packet_packet_size = { .name = "packet_size", .descr = "packet size", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_CPU_PACKET_ID_PACKET_SIZE, .offset = offsetof(bcmolt_xgpon_onu_cpu_packet_data, packet_size), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_cpu_packet_buffer = { .name = "buffer", .descr = "buffer", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_CPU_PACKET_ID_BUFFER, .offset = offsetof(bcmolt_xgpon_onu_cpu_packet_data, buffer), .type = &type_descr_bcmolt_u8_list_u32 };
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_cpu_packet_prop_array[] = { &prop_descr_xgpon_onu_cpu_packet_port_id, &prop_descr_xgpon_onu_cpu_packet_crc_ok, &prop_descr_xgpon_onu_cpu_packet_packet_size, &prop_descr_xgpon_onu_cpu_packet_buffer };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_cpu_packet_data_fields[] = { { .name = "port_id", .descr = "port id", .offset = offsetof(bcmolt_xgpon_onu_cpu_packet_data, port_id), .type = &type_descr_uint16_t }, { .name = "crc_ok", .descr = "crc ok", .offset = offsetof(bcmolt_xgpon_onu_cpu_packet_data, crc_ok), .type = &type_descr_bcmos_bool }, { .name = "packet_size", .descr = "packet size", .offset = offsetof(bcmolt_xgpon_onu_cpu_packet_data, packet_size), .type = &type_descr_uint32_t }, { .name = "buffer", .descr = "buffer", .offset = offsetof(bcmolt_xgpon_onu_cpu_packet_data, buffer), .type = &type_descr_bcmolt_u8_list_u32 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_cpu_packet_data = { .name = "bcmolt_xgpon_onu_cpu_packet_data", .descr = "Indicates CPU packet was received on the US from this ONU id", .size = sizeof(bcmolt_xgpon_onu_cpu_packet_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_cpu_packet_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_cpu_packet_data_fields } } };
+
+/* Group: xgpon_onu - omci_packet */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_omci_packet_port_id = { .name = "port_id", .descr = "port id", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_OMCI_PACKET_ID_PORT_ID, .offset = offsetof(bcmolt_xgpon_onu_omci_packet_data, port_id), .type = &type_descr_uint16_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_omci_packet_crc_ok = { .name = "crc_ok", .descr = "crc ok", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_OMCI_PACKET_ID_CRC_OK, .offset = offsetof(bcmolt_xgpon_onu_omci_packet_data, crc_ok), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_omci_packet_packet_size = { .name = "packet_size", .descr = "packet size", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_OMCI_PACKET_ID_PACKET_SIZE, .offset = offsetof(bcmolt_xgpon_onu_omci_packet_data, packet_size), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_omci_packet_buffer = { .name = "buffer", .descr = "buffer", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_OMCI_PACKET_ID_BUFFER, .offset = offsetof(bcmolt_xgpon_onu_omci_packet_data, buffer), .type = &type_descr_bcmolt_u8_list_u32 };
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_omci_packet_prop_array[] = { &prop_descr_xgpon_onu_omci_packet_port_id, &prop_descr_xgpon_onu_omci_packet_crc_ok, &prop_descr_xgpon_onu_omci_packet_packet_size, &prop_descr_xgpon_onu_omci_packet_buffer };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_omci_packet_data_fields[] = { { .name = "port_id", .descr = "port id", .offset = offsetof(bcmolt_xgpon_onu_omci_packet_data, port_id), .type = &type_descr_uint16_t }, { .name = "crc_ok", .descr = "crc ok", .offset = offsetof(bcmolt_xgpon_onu_omci_packet_data, crc_ok), .type = &type_descr_bcmos_bool }, { .name = "packet_size", .descr = "packet size", .offset = offsetof(bcmolt_xgpon_onu_omci_packet_data, packet_size), .type = &type_descr_uint32_t }, { .name = "buffer", .descr = "buffer", .offset = offsetof(bcmolt_xgpon_onu_omci_packet_data, buffer), .type = &type_descr_bcmolt_u8_list_u32 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_omci_packet_data = { .name = "bcmolt_xgpon_onu_omci_packet_data", .descr = "Indicates OMCI packet was received on the US from this ONU id", .size = sizeof(bcmolt_xgpon_onu_omci_packet_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_omci_packet_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_omci_packet_data_fields } } };
+
+/* Group: xgpon_onu - dgi */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_dgi_alarm_status = { .name = "alarm_status", .descr = "alarm status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_DGI_ID_ALARM_STATUS, .offset = offsetof(bcmolt_xgpon_onu_dgi_data, alarm_status), .type = &type_descr_bcmolt_status };
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_dgi_prop_array[] = { &prop_descr_xgpon_onu_dgi_alarm_status };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_dgi_data_fields[] = { { .name = "alarm_status", .descr = "alarm status", .offset = offsetof(bcmolt_xgpon_onu_dgi_data, alarm_status), .type = &type_descr_bcmolt_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_dgi_data = { .name = "bcmolt_xgpon_onu_dgi_data", .descr = "Receive Dying-Gasp of ONUi", .size = sizeof(bcmolt_xgpon_onu_dgi_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_dgi_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_dgi_data_fields } } };
+
+/* Group: xgpon_onu - power_management_state_change */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_power_management_state_change_old_state = { .name = "old_state", .descr = "The state the ONU was previously in.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_OLD_STATE, .offset = offsetof(bcmolt_xgpon_onu_power_management_state_change_data, old_state), .type = &type_descr_bcmolt_onu_state };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_power_management_state_change_new_state = { .name = "new_state", .descr = "The state the ONU is currently in.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_NEW_STATE, .offset = offsetof(bcmolt_xgpon_onu_power_management_state_change_data, new_state), .type = &type_descr_bcmolt_onu_state };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_power_management_state_change_reason = { .name = "reason", .descr = "The reason for the state change.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_POWER_MANAGEMENT_STATE_CHANGE_ID_REASON, .offset = offsetof(bcmolt_xgpon_onu_power_management_state_change_data, reason), .type = &type_descr_bcmolt_power_management_transition_reason };
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_power_management_state_change_prop_array[] = { &prop_descr_xgpon_onu_power_management_state_change_old_state, &prop_descr_xgpon_onu_power_management_state_change_new_state, &prop_descr_xgpon_onu_power_management_state_change_reason };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_power_management_state_change_data_fields[] = { { .name = "old_state", .descr = "The state the ONU was previously in.", .offset = offsetof(bcmolt_xgpon_onu_power_management_state_change_data, old_state), .type = &type_descr_bcmolt_onu_state }, { .name = "new_state", .descr = "The state the ONU is currently in.", .offset = offsetof(bcmolt_xgpon_onu_power_management_state_change_data, new_state), .type = &type_descr_bcmolt_onu_state }, { .name = "reason", .descr = "The reason for the state change.", .offset = offsetof(bcmolt_xgpon_onu_power_management_state_change_data, reason), .type = &type_descr_bcmolt_power_management_transition_reason } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_power_management_state_change_data = { .name = "bcmolt_xgpon_onu_power_management_state_change_data", .descr = "Notification that an ONUs power management state has changed.", .size = sizeof(bcmolt_xgpon_onu_power_management_state_change_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_power_management_state_change_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_power_management_state_change_data_fields } } };
+
+/* Group: xgpon_onu - possible_drift */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_possible_drift_alarm_status = { .name = "alarm_status", .descr = "On: estimated drift has exceeded the configured threshold.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_POSSIBLE_DRIFT_ID_ALARM_STATUS, .offset = offsetof(bcmolt_xgpon_onu_possible_drift_data, alarm_status), .type = &type_descr_bcmolt_status };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_possible_drift_estimated_drift = { .name = "estimated_drift", .descr = "If status is on, the estimated drift value, otherwise zero (0).", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_POSSIBLE_DRIFT_ID_ESTIMATED_DRIFT, .offset = offsetof(bcmolt_xgpon_onu_possible_drift_data, estimated_drift), .type = &type_descr_int32_t };
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_possible_drift_prop_array[] = { &prop_descr_xgpon_onu_possible_drift_alarm_status, &prop_descr_xgpon_onu_possible_drift_estimated_drift };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_possible_drift_data_fields[] = { { .name = "alarm_status", .descr = "On: estimated drift has exceeded the configured threshold.", .offset = offsetof(bcmolt_xgpon_onu_possible_drift_data, alarm_status), .type = &type_descr_bcmolt_status }, { .name = "estimated_drift", .descr = "If status is on, the estimated drift value, otherwise zero (0).", .offset = offsetof(bcmolt_xgpon_onu_possible_drift_data, estimated_drift), .type = &type_descr_int32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_possible_drift_data = { .name = "bcmolt_xgpon_onu_possible_drift_data", .descr = "An ONU in a low power state may be experiencing drift beyond the configured threshold. The estimate may be inaccurate depending on ONU behavior. Actual drift may be less than estimated.", .size = sizeof(bcmolt_xgpon_onu_possible_drift_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_possible_drift_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_possible_drift_data_fields } } };
+
+/* Group: xgpon_onu - request_registration */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_request_registration_sma_flag = { .name = "sma_flag", .descr = "Is the request registration process is part of the SMA process", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_REQUEST_REGISTRATION_ID_SMA_FLAG, .offset = offsetof(bcmolt_xgpon_onu_request_registration_data, sma_flag), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_request_registration_prop_array[] = { &prop_descr_xgpon_onu_request_registration_sma_flag };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_request_registration_data_fields[] = { { .name = "sma_flag", .descr = "Is the request registration process is part of the SMA process", .offset = offsetof(bcmolt_xgpon_onu_request_registration_data, sma_flag), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_request_registration_data = { .name = "bcmolt_xgpon_onu_request_registration_data", .descr = "Request the ONU to send its Registration ID", .size = sizeof(bcmolt_xgpon_onu_request_registration_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_request_registration_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_request_registration_data_fields } } };
+
+/* Group: xgpon_onu - change_power_levelling */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_change_power_levelling_control = { .name = "control", .descr = "control", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_CHANGE_POWER_LEVELLING_ID_CONTROL, .offset = offsetof(bcmolt_xgpon_onu_change_power_levelling_data, control), .type = &type_descr_bcmolt_power_levelling_control };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_change_power_levelling_attenuation = { .name = "attenuation", .descr = "The requested attenuation in steps of 3dB as part of power levelling instruction", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_CHANGE_POWER_LEVELLING_ID_ATTENUATION, .offset = offsetof(bcmolt_xgpon_onu_change_power_levelling_data, attenuation), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_change_power_levelling_prop_array[] = { &prop_descr_xgpon_onu_change_power_levelling_control, &prop_descr_xgpon_onu_change_power_levelling_attenuation };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_change_power_levelling_data_fields[] = { { .name = "control", .descr = "control", .offset = offsetof(bcmolt_xgpon_onu_change_power_levelling_data, control), .type = &type_descr_bcmolt_power_levelling_control }, { .name = "attenuation", .descr = "The requested attenuation in steps of 3dB as part of power levelling instruction", .offset = offsetof(bcmolt_xgpon_onu_change_power_levelling_data, attenuation), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_change_power_levelling_data = { .name = "bcmolt_xgpon_onu_change_power_levelling_data", .descr = "Change power levelling", .size = sizeof(bcmolt_xgpon_onu_change_power_levelling_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_change_power_levelling_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_change_power_levelling_data_fields } } };
+
+/* Group: xgpon_onu - get_power_level */
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_get_power_level_prop_array[] = { };
+
+/* Group: xgpon_onu - get_power_consumption */
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_get_power_consumption_prop_array[] = { };
+
+/* Group: xgpon_onu - adjust_tx_wavelength */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_adjust_tx_wavelength_frequency_adjustment_direction = { .name = "frequency_adjustment_direction", .descr = "Frequency adjustment direction", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_ADJUST_TX_WAVELENGTH_ID_FREQUENCY_ADJUSTMENT_DIRECTION, .offset = offsetof(bcmolt_xgpon_onu_adjust_tx_wavelength_data, frequency_adjustment_direction), .type = &type_descr_bcmolt_frequency_adjustment_direction };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_adjust_tx_wavelength_frequency_adjustment_size = { .name = "frequency_adjustment_size", .descr = "The size of the frequency adjustment in units of 0.1GHz", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_ADJUST_TX_WAVELENGTH_ID_FREQUENCY_ADJUSTMENT_SIZE, .offset = offsetof(bcmolt_xgpon_onu_adjust_tx_wavelength_data, frequency_adjustment_size), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_adjust_tx_wavelength_prop_array[] = { &prop_descr_xgpon_onu_adjust_tx_wavelength_frequency_adjustment_direction, &prop_descr_xgpon_onu_adjust_tx_wavelength_frequency_adjustment_size };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_adjust_tx_wavelength_data_fields[] = { { .name = "frequency_adjustment_direction", .descr = "Frequency adjustment direction", .offset = offsetof(bcmolt_xgpon_onu_adjust_tx_wavelength_data, frequency_adjustment_direction), .type = &type_descr_bcmolt_frequency_adjustment_direction }, { .name = "frequency_adjustment_size", .descr = "The size of the frequency adjustment in units of 0.1GHz", .offset = offsetof(bcmolt_xgpon_onu_adjust_tx_wavelength_data, frequency_adjustment_size), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_adjust_tx_wavelength_data = { .name = "bcmolt_xgpon_onu_adjust_tx_wavelength_data", .descr = "Instruct the ONU to adjust its upstream transmitter wavelength", .size = sizeof(bcmolt_xgpon_onu_adjust_tx_wavelength_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_adjust_tx_wavelength_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_adjust_tx_wavelength_data_fields } } };
+
+/* Group: xgpon_onu - registration_id */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_registration_id_registration_id = { .name = "registration_id", .descr = "Registration ID", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_REGISTRATION_ID_ID_REGISTRATION_ID, .offset = offsetof(bcmolt_xgpon_onu_registration_id_data, registration_id), .type = &type_descr_bcmolt_arr_u8_36 };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_registration_id_request_registration_status = { .name = "request_registration_status", .descr = "request registration status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_REGISTRATION_ID_ID_REQUEST_REGISTRATION_STATUS, .offset = offsetof(bcmolt_xgpon_onu_registration_id_data, request_registration_status), .type = &type_descr_bcmolt_result };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_registration_id_request_registration_fail_reason = { .name = "request_registration_fail_reason", .descr = "request registration fail reason", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_REGISTRATION_ID_ID_REQUEST_REGISTRATION_FAIL_REASON, .offset = offsetof(bcmolt_xgpon_onu_registration_id_data, request_registration_fail_reason), .type = &type_descr_bcmolt_request_registration_fail_reason };
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_registration_id_prop_array[] = { &prop_descr_xgpon_onu_registration_id_registration_id, &prop_descr_xgpon_onu_registration_id_request_registration_status, &prop_descr_xgpon_onu_registration_id_request_registration_fail_reason };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_registration_id_data_fields[] = { { .name = "registration_id", .descr = "Registration ID", .offset = offsetof(bcmolt_xgpon_onu_registration_id_data, registration_id), .type = &type_descr_bcmolt_arr_u8_36 }, { .name = "request_registration_status", .descr = "request registration status", .offset = offsetof(bcmolt_xgpon_onu_registration_id_data, request_registration_status), .type = &type_descr_bcmolt_result }, { .name = "request_registration_fail_reason", .descr = "request registration fail reason", .offset = offsetof(bcmolt_xgpon_onu_registration_id_data, request_registration_fail_reason), .type = &type_descr_bcmolt_request_registration_fail_reason } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_registration_id_data = { .name = "bcmolt_xgpon_onu_registration_id_data", .descr = "Registration ID", .size = sizeof(bcmolt_xgpon_onu_registration_id_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_registration_id_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_registration_id_data_fields } } };
+
+/* Group: xgpon_onu - power_level_report */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_power_level_report_attenuation = { .name = "attenuation", .descr = "Attenuation", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_POWER_LEVEL_REPORT_ID_ATTENUATION, .offset = offsetof(bcmolt_xgpon_onu_power_level_report_data, attenuation), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_power_level_report_power_levelling_capability = { .name = "power_levelling_capability", .descr = "Power levelling capability", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_POWER_LEVEL_REPORT_ID_POWER_LEVELLING_CAPABILITY, .offset = offsetof(bcmolt_xgpon_onu_power_level_report_data, power_levelling_capability), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_power_level_report_prop_array[] = { &prop_descr_xgpon_onu_power_level_report_attenuation, &prop_descr_xgpon_onu_power_level_report_power_levelling_capability };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_power_level_report_data_fields[] = { { .name = "attenuation", .descr = "Attenuation", .offset = offsetof(bcmolt_xgpon_onu_power_level_report_data, attenuation), .type = &type_descr_uint8_t }, { .name = "power_levelling_capability", .descr = "Power levelling capability", .offset = offsetof(bcmolt_xgpon_onu_power_level_report_data, power_levelling_capability), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_power_level_report_data = { .name = "bcmolt_xgpon_onu_power_level_report_data", .descr = "Power level report", .size = sizeof(bcmolt_xgpon_onu_power_level_report_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_power_level_report_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_power_level_report_data_fields } } };
+
+/* Group: xgpon_onu - power_consumption_report */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_power_consumption_report_power_consumption_report = { .name = "power_consumption_report", .descr = "power consumption report", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_POWER_CONSUMPTION_REPORT_ID_POWER_CONSUMPTION_REPORT, .offset = offsetof(bcmolt_xgpon_onu_power_consumption_report_data, power_consumption_report), .type = &type_descr_bcmolt_arr_power_consumption_channel_report_8 };
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_power_consumption_report_prop_array[] = { &prop_descr_xgpon_onu_power_consumption_report_power_consumption_report };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_power_consumption_report_data_fields[] = { { .name = "power_consumption_report", .descr = "power consumption report", .offset = offsetof(bcmolt_xgpon_onu_power_consumption_report_data, power_consumption_report), .type = &type_descr_bcmolt_arr_power_consumption_channel_report_8 } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_power_consumption_report_data = { .name = "bcmolt_xgpon_onu_power_consumption_report_data", .descr = "Power consumption report", .size = sizeof(bcmolt_xgpon_onu_power_consumption_report_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_power_consumption_report_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_power_consumption_report_data_fields } } };
+
+/* Group: xgpon_onu - secure_mutual_authentication */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_secure_mutual_authentication_master_key = { .name = "master_key", .descr = "master key", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_ID_MASTER_KEY, .offset = offsetof(bcmolt_xgpon_onu_secure_mutual_authentication_data, master_key), .type = &type_descr_bcmolt_aes_key };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_secure_mutual_authentication_buffer = { .name = "buffer", .descr = "OMCI data buffer", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_ID_BUFFER, .offset = offsetof(bcmolt_xgpon_onu_secure_mutual_authentication_data, buffer), .type = &type_descr_bcmolt_u8_list_u32_max_2048 };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_secure_mutual_authentication_mic = { .name = "mic", .descr = "mic", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_ID_MIC, .offset = offsetof(bcmolt_xgpon_onu_secure_mutual_authentication_data, mic), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_secure_mutual_authentication_prop_array[] = { &prop_descr_xgpon_onu_secure_mutual_authentication_master_key, &prop_descr_xgpon_onu_secure_mutual_authentication_buffer, &prop_descr_xgpon_onu_secure_mutual_authentication_mic };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_secure_mutual_authentication_data_fields[] = { { .name = "master_key", .descr = "master key", .offset = offsetof(bcmolt_xgpon_onu_secure_mutual_authentication_data, master_key), .type = &type_descr_bcmolt_aes_key }, { .name = "buffer", .descr = "OMCI data buffer", .offset = offsetof(bcmolt_xgpon_onu_secure_mutual_authentication_data, buffer), .type = &type_descr_bcmolt_u8_list_u32_max_2048 }, { .name = "mic", .descr = "mic", .offset = offsetof(bcmolt_xgpon_onu_secure_mutual_authentication_data, mic), .type = &type_descr_uint32_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_secure_mutual_authentication_data = { .name = "bcmolt_xgpon_onu_secure_mutual_authentication_data", .descr = "OMCI base secure mutual authentication", .size = sizeof(bcmolt_xgpon_onu_secure_mutual_authentication_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_secure_mutual_authentication_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_secure_mutual_authentication_data_fields } } };
+
+/* Group: xgpon_onu - secure_mutual_authentication_failure */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_secure_mutual_authentication_failure_status = { .name = "status", .descr = "status", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_FAILURE_ID_STATUS, .offset = offsetof(bcmolt_xgpon_onu_secure_mutual_authentication_failure_data, status), .type = &type_descr_bcmolt_result };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_secure_mutual_authentication_failure_fail_reason = { .name = "fail_reason", .descr = "secure mutual authentication fail reason", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_SECURE_MUTUAL_AUTHENTICATION_FAILURE_ID_FAIL_REASON, .offset = offsetof(bcmolt_xgpon_onu_secure_mutual_authentication_failure_data, fail_reason), .type = &type_descr_bcmolt_secure_mutual_authentication_fail_reason };
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_secure_mutual_authentication_failure_prop_array[] = { &prop_descr_xgpon_onu_secure_mutual_authentication_failure_status, &prop_descr_xgpon_onu_secure_mutual_authentication_failure_fail_reason };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_secure_mutual_authentication_failure_data_fields[] = { { .name = "status", .descr = "status", .offset = offsetof(bcmolt_xgpon_onu_secure_mutual_authentication_failure_data, status), .type = &type_descr_bcmolt_result }, { .name = "fail_reason", .descr = "secure mutual authentication fail reason", .offset = offsetof(bcmolt_xgpon_onu_secure_mutual_authentication_failure_data, fail_reason), .type = &type_descr_bcmolt_secure_mutual_authentication_fail_reason } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_secure_mutual_authentication_failure_data = { .name = "bcmolt_xgpon_onu_secure_mutual_authentication_failure_data", .descr = "Failure of secure mutual authentication due to MIC error", .size = sizeof(bcmolt_xgpon_onu_secure_mutual_authentication_failure_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_secure_mutual_authentication_failure_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_secure_mutual_authentication_failure_data_fields } } };
+
+/* Group: xgpon_onu - onu_tuning_in */
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_onu_tuning_in_prop_array[] = { };
+
+/* Group: xgpon_onu - onu_tuning_out */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_onu_tuning_out_target_ds_pon_id = { .name = "target_ds_pon_id", .descr = "target ds pon id", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_TARGET_DS_PON_ID, .offset = offsetof(bcmolt_xgpon_onu_onu_tuning_out_data, target_ds_pon_id), .type = &type_descr_bcmolt_pon_id };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_onu_tuning_out_target_us_pon_id = { .name = "target_us_pon_id", .descr = "target us pon id", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_TARGET_US_PON_ID, .offset = offsetof(bcmolt_xgpon_onu_onu_tuning_out_data, target_us_pon_id), .type = &type_descr_bcmolt_pon_id };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_onu_tuning_out_time_to_switch = { .name = "time_to_switch", .descr = "Time to switch in ms", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_TIME_TO_SWITCH, .offset = offsetof(bcmolt_xgpon_onu_onu_tuning_out_data, time_to_switch), .type = &type_descr_uint32_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_onu_tuning_out_rollback = { .name = "rollback", .descr = "rollback", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_ROLLBACK, .offset = offsetof(bcmolt_xgpon_onu_onu_tuning_out_data, rollback), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_onu_tuning_out_status = { .name = "status", .descr = "on- to start tuning out off- to stop tuning out", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_ONU_TUNING_OUT_ID_STATUS, .offset = offsetof(bcmolt_xgpon_onu_onu_tuning_out_data, status), .type = &type_descr_bcmolt_status };
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_onu_tuning_out_prop_array[] = { &prop_descr_xgpon_onu_onu_tuning_out_target_ds_pon_id, &prop_descr_xgpon_onu_onu_tuning_out_target_us_pon_id, &prop_descr_xgpon_onu_onu_tuning_out_time_to_switch, &prop_descr_xgpon_onu_onu_tuning_out_rollback, &prop_descr_xgpon_onu_onu_tuning_out_status };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_onu_tuning_out_data_fields[] = { { .name = "target_ds_pon_id", .descr = "target ds pon id", .offset = offsetof(bcmolt_xgpon_onu_onu_tuning_out_data, target_ds_pon_id), .type = &type_descr_bcmolt_pon_id }, { .name = "target_us_pon_id", .descr = "target us pon id", .offset = offsetof(bcmolt_xgpon_onu_onu_tuning_out_data, target_us_pon_id), .type = &type_descr_bcmolt_pon_id }, { .name = "time_to_switch", .descr = "Time to switch in ms", .offset = offsetof(bcmolt_xgpon_onu_onu_tuning_out_data, time_to_switch), .type = &type_descr_uint32_t }, { .name = "rollback", .descr = "rollback", .offset = offsetof(bcmolt_xgpon_onu_onu_tuning_out_data, rollback), .type = &type_descr_bcmos_bool }, { .name = "status", .descr = "on- to start tuning out off- to stop tuning out", .offset = offsetof(bcmolt_xgpon_onu_onu_tuning_out_data, status), .type = &type_descr_bcmolt_status } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_onu_tuning_out_data = { .name = "bcmolt_xgpon_onu_onu_tuning_out_data", .descr = "ONU Tuning out", .size = sizeof(bcmolt_xgpon_onu_onu_tuning_out_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_onu_tuning_out_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_onu_tuning_out_data_fields } } };
+
+/* Group: xgpon_onu - onu_tuning_out_completed */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_onu_tuning_out_completed_result = { .name = "result", .descr = "result", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_ONU_TUNING_OUT_COMPLETED_ID_RESULT, .offset = offsetof(bcmolt_xgpon_onu_onu_tuning_out_completed_data, result), .type = &type_descr_bcmolt_result };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_onu_tuning_out_completed_fail_reason = { .name = "fail_reason", .descr = "fail reason", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_ONU_TUNING_OUT_COMPLETED_ID_FAIL_REASON, .offset = offsetof(bcmolt_xgpon_onu_onu_tuning_out_completed_data, fail_reason), .type = &type_descr_bcmolt_tune_out_fail_reason };
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_onu_tuning_out_completed_prop_array[] = { &prop_descr_xgpon_onu_onu_tuning_out_completed_result, &prop_descr_xgpon_onu_onu_tuning_out_completed_fail_reason };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_onu_tuning_out_completed_data_fields[] = { { .name = "result", .descr = "result", .offset = offsetof(bcmolt_xgpon_onu_onu_tuning_out_completed_data, result), .type = &type_descr_bcmolt_result }, { .name = "fail_reason", .descr = "fail reason", .offset = offsetof(bcmolt_xgpon_onu_onu_tuning_out_completed_data, fail_reason), .type = &type_descr_bcmolt_tune_out_fail_reason } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_onu_tuning_out_completed_data = { .name = "bcmolt_xgpon_onu_onu_tuning_out_completed_data", .descr = "ONU Tuning out completed", .size = sizeof(bcmolt_xgpon_onu_onu_tuning_out_completed_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_onu_tuning_out_completed_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_onu_tuning_out_completed_data_fields } } };
+
+/* Group: xgpon_onu - onu_tuning_in_completed */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_onu_tuning_in_completed_result = { .name = "result", .descr = "result", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_ONU_TUNING_IN_COMPLETED_ID_RESULT, .offset = offsetof(bcmolt_xgpon_onu_onu_tuning_in_completed_data, result), .type = &type_descr_bcmolt_result };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_onu_tuning_in_completed_fail_reason = { .name = "fail_reason", .descr = "fail reason", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_ONU_TUNING_IN_COMPLETED_ID_FAIL_REASON, .offset = offsetof(bcmolt_xgpon_onu_onu_tuning_in_completed_data, fail_reason), .type = &type_descr_bcmolt_tune_in_fail_reason };
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_onu_tuning_in_completed_prop_array[] = { &prop_descr_xgpon_onu_onu_tuning_in_completed_result, &prop_descr_xgpon_onu_onu_tuning_in_completed_fail_reason };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_onu_tuning_in_completed_data_fields[] = { { .name = "result", .descr = "result", .offset = offsetof(bcmolt_xgpon_onu_onu_tuning_in_completed_data, result), .type = &type_descr_bcmolt_result }, { .name = "fail_reason", .descr = "fail reason", .offset = offsetof(bcmolt_xgpon_onu_onu_tuning_in_completed_data, fail_reason), .type = &type_descr_bcmolt_tune_in_fail_reason } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_onu_tuning_in_completed_data = { .name = "bcmolt_xgpon_onu_onu_tuning_in_completed_data", .descr = "ONU Tuning in completed", .size = sizeof(bcmolt_xgpon_onu_onu_tuning_in_completed_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_onu_tuning_in_completed_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_onu_tuning_in_completed_data_fields } } };
+
+/* Group: xgpon_onu - tuning_response */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_tuning_response_ack = { .name = "ack", .descr = "is tuning response received with ack or nack", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_TUNING_RESPONSE_ID_ACK, .offset = offsetof(bcmolt_xgpon_onu_tuning_response_data, ack), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_tuning_response_result = { .name = "result", .descr = "result", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_TUNING_RESPONSE_ID_RESULT, .offset = offsetof(bcmolt_xgpon_onu_tuning_response_data, result), .type = &type_descr_bcmolt_result };
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_tuning_response_prop_array[] = { &prop_descr_xgpon_onu_tuning_response_ack, &prop_descr_xgpon_onu_tuning_response_result };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_tuning_response_data_fields[] = { { .name = "ack", .descr = "is tuning response received with ack or nack", .offset = offsetof(bcmolt_xgpon_onu_tuning_response_data, ack), .type = &type_descr_bcmos_bool }, { .name = "result", .descr = "result", .offset = offsetof(bcmolt_xgpon_onu_tuning_response_data, result), .type = &type_descr_bcmolt_result } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_tuning_response_data = { .name = "bcmolt_xgpon_onu_tuning_response_data", .descr = "Tuning response", .size = sizeof(bcmolt_xgpon_onu_tuning_response_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_tuning_response_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_tuning_response_data_fields } } };
+
+/* Group: xgpon_onu - stat_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_stat_cfg_cfg = { .name = "cfg", .descr = "Statistic alarm configuration.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_STAT_CFG_ID_CFG, .offset = offsetof(bcmolt_xgpon_onu_stat_cfg_data, cfg), .type = &type_descr_bcmolt_stat_alarm_config };
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_stat_cfg_prop_array[] = { &prop_descr_xgpon_onu_stat_cfg_cfg };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_stat_cfg_data_fields[] = { { .name = "cfg", .descr = "Statistic alarm configuration.", .offset = offsetof(bcmolt_xgpon_onu_stat_cfg_data, cfg), .type = &type_descr_bcmolt_stat_alarm_config } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_stat_cfg_data = { .name = "bcmolt_xgpon_onu_stat_cfg_data", .descr = "Statistic Configuration", .size = sizeof(bcmolt_xgpon_onu_stat_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_stat_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_stat_cfg_data_fields } } };
+
+/* Group: xgpon_onu - stat_alarm_raised */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_stat_alarm_raised_stat = { .name = "stat", .descr = "Statistic identifier.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_STAT_ALARM_RAISED_ID_STAT, .offset = offsetof(bcmolt_xgpon_onu_stat_alarm_raised_data, stat), .type = &type_descr_bcmolt_xgpon_onu_stat_id };
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_stat_alarm_raised_prop_array[] = { &prop_descr_xgpon_onu_stat_alarm_raised_stat };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_stat_alarm_raised_data_fields[] = { { .name = "stat", .descr = "Statistic identifier.", .offset = offsetof(bcmolt_xgpon_onu_stat_alarm_raised_data, stat), .type = &type_descr_bcmolt_xgpon_onu_stat_id } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_stat_alarm_raised_data = { .name = "bcmolt_xgpon_onu_stat_alarm_raised_data", .descr = "Sent when a configured statistic alarm condition has been met.", .size = sizeof(bcmolt_xgpon_onu_stat_alarm_raised_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_stat_alarm_raised_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_stat_alarm_raised_data_fields } } };
+
+/* Group: xgpon_onu - stat_alarm_cleared */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_stat_alarm_cleared_stat = { .name = "stat", .descr = "Statistic identifier.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_STAT_ALARM_CLEARED_ID_STAT, .offset = offsetof(bcmolt_xgpon_onu_stat_alarm_cleared_data, stat), .type = &type_descr_bcmolt_xgpon_onu_stat_id };
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_stat_alarm_cleared_prop_array[] = { &prop_descr_xgpon_onu_stat_alarm_cleared_stat };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_stat_alarm_cleared_data_fields[] = { { .name = "stat", .descr = "Statistic identifier.", .offset = offsetof(bcmolt_xgpon_onu_stat_alarm_cleared_data, stat), .type = &type_descr_bcmolt_xgpon_onu_stat_id } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_stat_alarm_cleared_data = { .name = "bcmolt_xgpon_onu_stat_alarm_cleared_data", .descr = "Sent when a configured statistic alarm condition is no longer met.", .size = sizeof(bcmolt_xgpon_onu_stat_alarm_cleared_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_stat_alarm_cleared_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_stat_alarm_cleared_data_fields } } };
+
+/* Group: xgpon_onu - auto_cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_auto_cfg_dfi = { .name = "dfi", .descr = "If true, indications of type \"dfi\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_AUTO_CFG_ID_DFI, .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, dfi), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_auto_cfg_dgi = { .name = "dgi", .descr = "If true, indications of type \"dgi\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_AUTO_CFG_ID_DGI, .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, dgi), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_auto_cfg_dowi = { .name = "dowi", .descr = "If true, indications of type \"dowi\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_AUTO_CFG_ID_DOWI, .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, dowi), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_auto_cfg_invalid_dbru_report = { .name = "invalid_dbru_report", .descr = "If true, indications of type \"invalid_dbru_report\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_AUTO_CFG_ID_INVALID_DBRU_REPORT, .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, invalid_dbru_report), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_auto_cfg_key_exchange_completed = { .name = "key_exchange_completed", .descr = "If true, indications of type \"key_exchange_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_COMPLETED, .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, key_exchange_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_auto_cfg_key_exchange_cycle_skipped = { .name = "key_exchange_cycle_skipped", .descr = "If true, indications of type \"key_exchange_cycle_skipped\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_CYCLE_SKIPPED, .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, key_exchange_cycle_skipped), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_auto_cfg_key_exchange_key_mismatch = { .name = "key_exchange_key_mismatch", .descr = "If true, indications of type \"key_exchange_key_mismatch\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_KEY_MISMATCH, .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, key_exchange_key_mismatch), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_auto_cfg_key_exchange_key_request_timeout = { .name = "key_exchange_key_request_timeout", .descr = "If true, indications of type \"key_exchange_key_request_timeout\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_AUTO_CFG_ID_KEY_EXCHANGE_KEY_REQUEST_TIMEOUT, .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, key_exchange_key_request_timeout), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_auto_cfg_looci = { .name = "looci", .descr = "If true, indications of type \"looci\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_AUTO_CFG_ID_LOOCI, .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, looci), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_auto_cfg_onu_activation_completed = { .name = "onu_activation_completed", .descr = "If true, indications of type \"onu_activation_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_ACTIVATION_COMPLETED, .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, onu_activation_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_auto_cfg_onu_alarm = { .name = "onu_alarm", .descr = "If true, indications of type \"onu_alarm\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_ALARM, .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, onu_alarm), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_auto_cfg_onu_deactivation_completed = { .name = "onu_deactivation_completed", .descr = "If true, indications of type \"onu_deactivation_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_DEACTIVATION_COMPLETED, .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, onu_deactivation_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_auto_cfg_onu_disable_completed = { .name = "onu_disable_completed", .descr = "If true, indications of type \"onu_disable_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_DISABLE_COMPLETED, .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, onu_disable_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_auto_cfg_onu_enable_completed = { .name = "onu_enable_completed", .descr = "If true, indications of type \"onu_enable_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_ENABLE_COMPLETED, .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, onu_enable_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_auto_cfg_onu_tuning_in_completed = { .name = "onu_tuning_in_completed", .descr = "If true, indications of type \"onu_tuning_in_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_TUNING_IN_COMPLETED, .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, onu_tuning_in_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_auto_cfg_onu_tuning_out_completed = { .name = "onu_tuning_out_completed", .descr = "If true, indications of type \"onu_tuning_out_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_AUTO_CFG_ID_ONU_TUNING_OUT_COMPLETED, .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, onu_tuning_out_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_auto_cfg_optical_reflection = { .name = "optical_reflection", .descr = "If true, indications of type \"optical_reflection\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_AUTO_CFG_ID_OPTICAL_REFLECTION, .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, optical_reflection), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_auto_cfg_possible_drift = { .name = "possible_drift", .descr = "If true, indications of type \"possible_drift\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_AUTO_CFG_ID_POSSIBLE_DRIFT, .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, possible_drift), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_auto_cfg_power_consumption_report = { .name = "power_consumption_report", .descr = "If true, indications of type \"power_consumption_report\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_AUTO_CFG_ID_POWER_CONSUMPTION_REPORT, .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, power_consumption_report), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_auto_cfg_power_level_report = { .name = "power_level_report", .descr = "If true, indications of type \"power_level_report\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_AUTO_CFG_ID_POWER_LEVEL_REPORT, .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, power_level_report), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_auto_cfg_power_management_state_change = { .name = "power_management_state_change", .descr = "If true, indications of type \"power_management_state_change\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_AUTO_CFG_ID_POWER_MANAGEMENT_STATE_CHANGE, .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, power_management_state_change), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_auto_cfg_pqsi = { .name = "pqsi", .descr = "If true, indications of type \"pqsi\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_AUTO_CFG_ID_PQSI, .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, pqsi), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_auto_cfg_ranging_completed = { .name = "ranging_completed", .descr = "If true, indications of type \"ranging_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_AUTO_CFG_ID_RANGING_COMPLETED, .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, ranging_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_auto_cfg_registration_id = { .name = "registration_id", .descr = "If true, indications of type \"registration_id\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_AUTO_CFG_ID_REGISTRATION_ID, .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, registration_id), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_auto_cfg_rssi_measurement_completed = { .name = "rssi_measurement_completed", .descr = "If true, indications of type \"rssi_measurement_completed\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_AUTO_CFG_ID_RSSI_MEASUREMENT_COMPLETED, .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, rssi_measurement_completed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_auto_cfg_sdi = { .name = "sdi", .descr = "If true, indications of type \"sdi\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_AUTO_CFG_ID_SDI, .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, sdi), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_auto_cfg_secure_mutual_authentication_failure = { .name = "secure_mutual_authentication_failure", .descr = "If true, indications of type \"secure_mutual_authentication_failure\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_AUTO_CFG_ID_SECURE_MUTUAL_AUTHENTICATION_FAILURE, .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, secure_mutual_authentication_failure), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_auto_cfg_sfi = { .name = "sfi", .descr = "If true, indications of type \"sfi\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_AUTO_CFG_ID_SFI, .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, sfi), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_auto_cfg_stat_alarm_cleared = { .name = "stat_alarm_cleared", .descr = "If true, indications of type \"stat_alarm_cleared\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_AUTO_CFG_ID_STAT_ALARM_CLEARED, .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, stat_alarm_cleared), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_auto_cfg_stat_alarm_raised = { .name = "stat_alarm_raised", .descr = "If true, indications of type \"stat_alarm_raised\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_AUTO_CFG_ID_STAT_ALARM_RAISED, .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, stat_alarm_raised), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_auto_cfg_sufi = { .name = "sufi", .descr = "If true, indications of type \"sufi\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_AUTO_CFG_ID_SUFI, .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, sufi), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_auto_cfg_tiwi = { .name = "tiwi", .descr = "If true, indications of type \"tiwi\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_AUTO_CFG_ID_TIWI, .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, tiwi), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_onu_auto_cfg_tuning_response = { .name = "tuning_response", .descr = "If true, indications of type \"tuning_response\" will be generated.", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_ONU_AUTO_CFG_ID_TUNING_RESPONSE, .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, tuning_response), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr * BCM_DESCR xgpon_onu_auto_cfg_prop_array[] = { &prop_descr_xgpon_onu_auto_cfg_dfi, &prop_descr_xgpon_onu_auto_cfg_dgi, &prop_descr_xgpon_onu_auto_cfg_dowi, &prop_descr_xgpon_onu_auto_cfg_invalid_dbru_report, &prop_descr_xgpon_onu_auto_cfg_key_exchange_completed, &prop_descr_xgpon_onu_auto_cfg_key_exchange_cycle_skipped, &prop_descr_xgpon_onu_auto_cfg_key_exchange_key_mismatch, &prop_descr_xgpon_onu_auto_cfg_key_exchange_key_request_timeout, &prop_descr_xgpon_onu_auto_cfg_looci, &prop_descr_xgpon_onu_auto_cfg_onu_activation_completed, &prop_descr_xgpon_onu_auto_cfg_onu_alarm, &prop_descr_xgpon_onu_auto_cfg_onu_deactivation_completed, &prop_descr_xgpon_onu_auto_cfg_onu_disable_completed, &prop_descr_xgpon_onu_auto_cfg_onu_enable_completed, &prop_descr_xgpon_onu_auto_cfg_onu_tuning_in_completed, &prop_descr_xgpon_onu_auto_cfg_onu_tuning_out_completed, &prop_descr_xgpon_onu_auto_cfg_optical_reflection, &prop_descr_xgpon_onu_auto_cfg_possible_drift, &prop_descr_xgpon_onu_auto_cfg_power_consumption_report, &prop_descr_xgpon_onu_auto_cfg_power_level_report, &prop_descr_xgpon_onu_auto_cfg_power_management_state_change, &prop_descr_xgpon_onu_auto_cfg_pqsi, &prop_descr_xgpon_onu_auto_cfg_ranging_completed, &prop_descr_xgpon_onu_auto_cfg_registration_id, &prop_descr_xgpon_onu_auto_cfg_rssi_measurement_completed, &prop_descr_xgpon_onu_auto_cfg_sdi, &prop_descr_xgpon_onu_auto_cfg_secure_mutual_authentication_failure, &prop_descr_xgpon_onu_auto_cfg_sfi, &prop_descr_xgpon_onu_auto_cfg_stat_alarm_cleared, &prop_descr_xgpon_onu_auto_cfg_stat_alarm_raised, &prop_descr_xgpon_onu_auto_cfg_sufi, &prop_descr_xgpon_onu_auto_cfg_tiwi, &prop_descr_xgpon_onu_auto_cfg_tuning_response };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_auto_cfg_data_fields[] = { { .name = "dfi", .descr = "If true, indications of type \"dfi\" will be generated.", .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, dfi), .type = &type_descr_bcmos_bool }, { .name = "dgi", .descr = "If true, indications of type \"dgi\" will be generated.", .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, dgi), .type = &type_descr_bcmos_bool }, { .name = "dowi", .descr = "If true, indications of type \"dowi\" will be generated.", .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, dowi), .type = &type_descr_bcmos_bool }, { .name = "invalid_dbru_report", .descr = "If true, indications of type \"invalid_dbru_report\" will be generated.", .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, invalid_dbru_report), .type = &type_descr_bcmos_bool }, { .name = "key_exchange_completed", .descr = "If true, indications of type \"key_exchange_completed\" will be generated.", .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, key_exchange_completed), .type = &type_descr_bcmos_bool }, { .name = "key_exchange_cycle_skipped", .descr = "If true, indications of type \"key_exchange_cycle_skipped\" will be generated.", .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, key_exchange_cycle_skipped), .type = &type_descr_bcmos_bool }, { .name = "key_exchange_key_mismatch", .descr = "If true, indications of type \"key_exchange_key_mismatch\" will be generated.", .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, key_exchange_key_mismatch), .type = &type_descr_bcmos_bool }, { .name = "key_exchange_key_request_timeout", .descr = "If true, indications of type \"key_exchange_key_request_timeout\" will be generated.", .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, key_exchange_key_request_timeout), .type = &type_descr_bcmos_bool }, { .name = "looci", .descr = "If true, indications of type \"looci\" will be generated.", .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, looci), .type = &type_descr_bcmos_bool }, { .name = "onu_activation_completed", .descr = "If true, indications of type \"onu_activation_completed\" will be generated.", .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, onu_activation_completed), .type = &type_descr_bcmos_bool }, { .name = "onu_alarm", .descr = "If true, indications of type \"onu_alarm\" will be generated.", .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, onu_alarm), .type = &type_descr_bcmos_bool }, { .name = "onu_deactivation_completed", .descr = "If true, indications of type \"onu_deactivation_completed\" will be generated.", .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, onu_deactivation_completed), .type = &type_descr_bcmos_bool }, { .name = "onu_disable_completed", .descr = "If true, indications of type \"onu_disable_completed\" will be generated.", .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, onu_disable_completed), .type = &type_descr_bcmos_bool }, { .name = "onu_enable_completed", .descr = "If true, indications of type \"onu_enable_completed\" will be generated.", .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, onu_enable_completed), .type = &type_descr_bcmos_bool }, { .name = "onu_tuning_in_completed", .descr = "If true, indications of type \"onu_tuning_in_completed\" will be generated.", .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, onu_tuning_in_completed), .type = &type_descr_bcmos_bool }, { .name = "onu_tuning_out_completed", .descr = "If true, indications of type \"onu_tuning_out_completed\" will be generated.", .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, onu_tuning_out_completed), .type = &type_descr_bcmos_bool }, { .name = "optical_reflection", .descr = "If true, indications of type \"optical_reflection\" will be generated.", .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, optical_reflection), .type = &type_descr_bcmos_bool }, { .name = "possible_drift", .descr = "If true, indications of type \"possible_drift\" will be generated.", .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, possible_drift), .type = &type_descr_bcmos_bool }, { .name = "power_consumption_report", .descr = "If true, indications of type \"power_consumption_report\" will be generated.", .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, power_consumption_report), .type = &type_descr_bcmos_bool }, { .name = "power_level_report", .descr = "If true, indications of type \"power_level_report\" will be generated.", .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, power_level_report), .type = &type_descr_bcmos_bool }, { .name = "power_management_state_change", .descr = "If true, indications of type \"power_management_state_change\" will be generated.", .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, power_management_state_change), .type = &type_descr_bcmos_bool }, { .name = "pqsi", .descr = "If true, indications of type \"pqsi\" will be generated.", .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, pqsi), .type = &type_descr_bcmos_bool }, { .name = "ranging_completed", .descr = "If true, indications of type \"ranging_completed\" will be generated.", .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, ranging_completed), .type = &type_descr_bcmos_bool }, { .name = "registration_id", .descr = "If true, indications of type \"registration_id\" will be generated.", .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, registration_id), .type = &type_descr_bcmos_bool }, { .name = "rssi_measurement_completed", .descr = "If true, indications of type \"rssi_measurement_completed\" will be generated.", .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, rssi_measurement_completed), .type = &type_descr_bcmos_bool }, { .name = "sdi", .descr = "If true, indications of type \"sdi\" will be generated.", .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, sdi), .type = &type_descr_bcmos_bool }, { .name = "secure_mutual_authentication_failure", .descr = "If true, indications of type \"secure_mutual_authentication_failure\" will be generated.", .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, secure_mutual_authentication_failure), .type = &type_descr_bcmos_bool }, { .name = "sfi", .descr = "If true, indications of type \"sfi\" will be generated.", .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, sfi), .type = &type_descr_bcmos_bool }, { .name = "stat_alarm_cleared", .descr = "If true, indications of type \"stat_alarm_cleared\" will be generated.", .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, stat_alarm_cleared), .type = &type_descr_bcmos_bool }, { .name = "stat_alarm_raised", .descr = "If true, indications of type \"stat_alarm_raised\" will be generated.", .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, stat_alarm_raised), .type = &type_descr_bcmos_bool }, { .name = "sufi", .descr = "If true, indications of type \"sufi\" will be generated.", .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, sufi), .type = &type_descr_bcmos_bool }, { .name = "tiwi", .descr = "If true, indications of type \"tiwi\" will be generated.", .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, tiwi), .type = &type_descr_bcmos_bool }, { .name = "tuning_response", .descr = "If true, indications of type \"tuning_response\" will be generated.", .offset = offsetof(bcmolt_xgpon_onu_auto_cfg_data, tuning_response), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_onu_auto_cfg_data = { .name = "bcmolt_xgpon_onu_auto_cfg_data", .descr = "Indication Configuration", .size = sizeof(bcmolt_xgpon_onu_auto_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_onu_auto_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_onu_auto_cfg_data_fields } } };
+
+/* ==== Object: xgpon_trx ==== */
+
+/* Group: xgpon_trx - key */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_trx_key_pon_ni = { .name = "pon_ni", .descr = "PON network interface", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_TRX_KEY_ID_PON_NI, .offset = offsetof(bcmolt_xgpon_trx_key, pon_ni), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr * BCM_DESCR xgpon_trx_key_prop_array[] = { &prop_descr_xgpon_trx_key_pon_ni };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_trx_key_fields[] = { { .name = "pon_ni", .descr = "PON network interface", .offset = offsetof(bcmolt_xgpon_trx_key, pon_ni), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_trx_key = { .name = "bcmolt_xgpon_trx_key", .descr = "key", .size = sizeof(bcmolt_xgpon_trx_key), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_trx_key_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_trx_key_fields } } };
+
+/* Group: xgpon_trx - cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_trx_cfg_burst_profile = { .name = "burst_profile", .descr = "burst profile", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_TRX_CFG_ID_BURST_PROFILE, .offset = offsetof(bcmolt_xgpon_trx_cfg_data, burst_profile), .type = &type_descr_bcmolt_arr_xgpon_burst_profile_4 };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_trx_cfg_transceiver_config = { .name = "transceiver_config", .descr = "transceiver config", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_TRX_CFG_ID_TRANSCEIVER_CONFIG, .offset = offsetof(bcmolt_xgpon_trx_cfg_data, transceiver_config), .type = &type_descr_bcmolt_arr_xgpon_trx_configuration_4 };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_trx_cfg_transceiver_type = { .name = "transceiver_type", .descr = "trx type", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_TRX_CFG_ID_TRANSCEIVER_TYPE, .offset = offsetof(bcmolt_xgpon_trx_cfg_data, transceiver_type), .type = &type_descr_bcmolt_xgpon_trx_type };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_trx_cfg_debug = { .name = "debug", .descr = "debug", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_TRX_CFG_ID_DEBUG, .offset = offsetof(bcmolt_xgpon_trx_cfg_data, debug), .type = &type_descr_bcmolt_xgpon_trx_debug };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_trx_cfg_rssi_normal_config = { .name = "rssi_normal_config", .descr = "rssi normal config", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_TRX_CFG_ID_RSSI_NORMAL_CONFIG, .offset = offsetof(bcmolt_xgpon_trx_cfg_data, rssi_normal_config), .type = &type_descr_bcmolt_xgpon_rssi_normal_config };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_trx_cfg_rssi_ranging_config = { .name = "rssi_ranging_config", .descr = "rssi ranging config", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_TRX_CFG_ID_RSSI_RANGING_CONFIG, .offset = offsetof(bcmolt_xgpon_trx_cfg_data, rssi_ranging_config), .type = &type_descr_bcmolt_xgpon_rssi_ranging_config };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_trx_cfg_serdes_configuration = { .name = "serdes_configuration", .descr = "serdes configuration", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_TRX_CFG_ID_SERDES_CONFIGURATION, .offset = offsetof(bcmolt_xgpon_trx_cfg_data, serdes_configuration), .type = &type_descr_bcmolt_xgpon_serdes_configuration };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_trx_cfg_burst_profile_delimiter_max_errors = { .name = "burst_profile_delimiter_max_errors", .descr = "burst profile delimiter max errors", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_TRX_CFG_ID_BURST_PROFILE_DELIMITER_MAX_ERRORS, .offset = offsetof(bcmolt_xgpon_trx_cfg_data, burst_profile_delimiter_max_errors), .type = &type_descr_bcmolt_arr_u8_4 };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_trx_cfg_ranging_sm_patterns_at_init = { .name = "ranging_sm_patterns_at_init", .descr = "Reset patterns used at Init of Ranging-Window and after Access", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_TRX_CFG_ID_RANGING_SM_PATTERNS_AT_INIT, .offset = offsetof(bcmolt_xgpon_trx_cfg_data, ranging_sm_patterns_at_init), .type = &type_descr_bcmolt_xgpon_rx_ranging_sm_pattern };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_trx_cfg_ranging_sm_patterns_ed_failure = { .name = "ranging_sm_patterns_ed_failure", .descr = "ranging sm patterns ED failure", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_TRX_CFG_ID_RANGING_SM_PATTERNS_ED_FAILURE, .offset = offsetof(bcmolt_xgpon_trx_cfg_data, ranging_sm_patterns_ed_failure), .type = &type_descr_bcmolt_xgpon_rx_ranging_sm_pattern };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_trx_cfg_reset_on_del_miss = { .name = "reset_on_del_miss", .descr = "reset on del miss", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_TRX_CFG_ID_RESET_ON_DEL_MISS, .offset = offsetof(bcmolt_xgpon_trx_cfg_data, reset_on_del_miss), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_trx_cfg_ed_state = { .name = "ed_state", .descr = "ed state", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_TRX_CFG_ID_ED_STATE, .offset = offsetof(bcmolt_xgpon_trx_cfg_data, ed_state), .type = &type_descr_bcmolt_xgpon_ed_state };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_trx_cfg_invert_ed = { .name = "invert_ed", .descr = "invert ED", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_TRX_CFG_ID_INVERT_ED, .offset = offsetof(bcmolt_xgpon_trx_cfg_data, invert_ed), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_trx_cfg_end_of_burst_reset = { .name = "end_of_burst_reset", .descr = "end of burst reset", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_TRX_CFG_ID_END_OF_BURST_RESET, .offset = offsetof(bcmolt_xgpon_trx_cfg_data, end_of_burst_reset), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xgpon_trx_cfg_trx_rst_polarity = { .name = "trx_rst_polarity", .descr = "TRX reset polarity", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XGPON_TRX_CFG_ID_TRX_RST_POLARITY, .offset = offsetof(bcmolt_xgpon_trx_cfg_data, trx_rst_polarity), .type = &type_descr_bcmos_bool };
+static bcmcli_prop_descr * BCM_DESCR xgpon_trx_cfg_prop_array[] = { &prop_descr_xgpon_trx_cfg_burst_profile, &prop_descr_xgpon_trx_cfg_transceiver_config, &prop_descr_xgpon_trx_cfg_transceiver_type, &prop_descr_xgpon_trx_cfg_debug, &prop_descr_xgpon_trx_cfg_rssi_normal_config, &prop_descr_xgpon_trx_cfg_rssi_ranging_config, &prop_descr_xgpon_trx_cfg_serdes_configuration, &prop_descr_xgpon_trx_cfg_burst_profile_delimiter_max_errors, &prop_descr_xgpon_trx_cfg_ranging_sm_patterns_at_init, &prop_descr_xgpon_trx_cfg_ranging_sm_patterns_ed_failure, &prop_descr_xgpon_trx_cfg_reset_on_del_miss, &prop_descr_xgpon_trx_cfg_ed_state, &prop_descr_xgpon_trx_cfg_invert_ed, &prop_descr_xgpon_trx_cfg_end_of_burst_reset, &prop_descr_xgpon_trx_cfg_trx_rst_polarity };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xgpon_trx_cfg_data_fields[] = { { .name = "burst_profile", .descr = "burst profile", .offset = offsetof(bcmolt_xgpon_trx_cfg_data, burst_profile), .type = &type_descr_bcmolt_arr_xgpon_burst_profile_4 }, { .name = "transceiver_config", .descr = "transceiver config", .offset = offsetof(bcmolt_xgpon_trx_cfg_data, transceiver_config), .type = &type_descr_bcmolt_arr_xgpon_trx_configuration_4 }, { .name = "transceiver_type", .descr = "trx type", .offset = offsetof(bcmolt_xgpon_trx_cfg_data, transceiver_type), .type = &type_descr_bcmolt_xgpon_trx_type }, { .name = "debug", .descr = "debug", .offset = offsetof(bcmolt_xgpon_trx_cfg_data, debug), .type = &type_descr_bcmolt_xgpon_trx_debug }, { .name = "rssi_normal_config", .descr = "rssi normal config", .offset = offsetof(bcmolt_xgpon_trx_cfg_data, rssi_normal_config), .type = &type_descr_bcmolt_xgpon_rssi_normal_config }, { .name = "rssi_ranging_config", .descr = "rssi ranging config", .offset = offsetof(bcmolt_xgpon_trx_cfg_data, rssi_ranging_config), .type = &type_descr_bcmolt_xgpon_rssi_ranging_config }, { .name = "serdes_configuration", .descr = "serdes configuration", .offset = offsetof(bcmolt_xgpon_trx_cfg_data, serdes_configuration), .type = &type_descr_bcmolt_xgpon_serdes_configuration }, { .name = "burst_profile_delimiter_max_errors", .descr = "burst profile delimiter max errors", .offset = offsetof(bcmolt_xgpon_trx_cfg_data, burst_profile_delimiter_max_errors), .type = &type_descr_bcmolt_arr_u8_4 }, { .name = "ranging_sm_patterns_at_init", .descr = "Reset patterns used at Init of Ranging-Window and after Access", .offset = offsetof(bcmolt_xgpon_trx_cfg_data, ranging_sm_patterns_at_init), .type = &type_descr_bcmolt_xgpon_rx_ranging_sm_pattern }, { .name = "ranging_sm_patterns_ed_failure", .descr = "ranging sm patterns ED failure", .offset = offsetof(bcmolt_xgpon_trx_cfg_data, ranging_sm_patterns_ed_failure), .type = &type_descr_bcmolt_xgpon_rx_ranging_sm_pattern }, { .name = "reset_on_del_miss", .descr = "reset on del miss", .offset = offsetof(bcmolt_xgpon_trx_cfg_data, reset_on_del_miss), .type = &type_descr_bcmos_bool }, { .name = "ed_state", .descr = "ed state", .offset = offsetof(bcmolt_xgpon_trx_cfg_data, ed_state), .type = &type_descr_bcmolt_xgpon_ed_state }, { .name = "invert_ed", .descr = "invert ED", .offset = offsetof(bcmolt_xgpon_trx_cfg_data, invert_ed), .type = &type_descr_bcmos_bool }, { .name = "end_of_burst_reset", .descr = "end of burst reset", .offset = offsetof(bcmolt_xgpon_trx_cfg_data, end_of_burst_reset), .type = &type_descr_bcmos_bool }, { .name = "trx_rst_polarity", .descr = "TRX reset polarity", .offset = offsetof(bcmolt_xgpon_trx_cfg_data, trx_rst_polarity), .type = &type_descr_bcmos_bool } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xgpon_trx_cfg_data = { .name = "bcmolt_xgpon_trx_cfg_data", .descr = "cfg", .size = sizeof(bcmolt_xgpon_trx_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xgpon_trx_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xgpon_trx_cfg_data_fields } } };
+
+/* ==== Object: xpon_serdes ==== */
+
+/* Group: xpon_serdes - key */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xpon_serdes_key_pon_ni = { .name = "pon_ni", .descr = "PON NI", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XPON_SERDES_KEY_ID_PON_NI, .offset = offsetof(bcmolt_xpon_serdes_key, pon_ni), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xpon_serdes_key_instance = { .name = "instance", .descr = "Instance", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XPON_SERDES_KEY_ID_INSTANCE, .offset = offsetof(bcmolt_xpon_serdes_key, instance), .type = &type_descr_bcmolt_serdes_instance };
+static bcmcli_prop_descr * BCM_DESCR xpon_serdes_key_prop_array[] = { &prop_descr_xpon_serdes_key_pon_ni, &prop_descr_xpon_serdes_key_instance };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xpon_serdes_key_fields[] = { { .name = "pon_ni", .descr = "PON NI", .offset = offsetof(bcmolt_xpon_serdes_key, pon_ni), .type = &type_descr_uint8_t }, { .name = "instance", .descr = "Instance", .offset = offsetof(bcmolt_xpon_serdes_key, instance), .type = &type_descr_bcmolt_serdes_instance } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xpon_serdes_key = { .name = "bcmolt_xpon_serdes_key", .descr = "key", .size = sizeof(bcmolt_xpon_serdes_key), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xpon_serdes_key_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xpon_serdes_key_fields } } };
+
+/* Group: xpon_serdes - cfg */
+static bcmcli_prop_descr BCM_DESCR prop_descr_xpon_serdes_cfg_rx_vga = { .name = "rx_vga", .descr = "Rx Vga", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XPON_SERDES_CFG_ID_RX_VGA, .offset = offsetof(bcmolt_xpon_serdes_cfg_data, rx_vga), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xpon_serdes_cfg_rx_pf = { .name = "rx_pf", .descr = "Peaking Filter", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XPON_SERDES_CFG_ID_RX_PF, .offset = offsetof(bcmolt_xpon_serdes_cfg_data, rx_pf), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xpon_serdes_cfg_rx_lfpf = { .name = "rx_lfpf", .descr = "Low Frequency Peaking Filter", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XPON_SERDES_CFG_ID_RX_LFPF, .offset = offsetof(bcmolt_xpon_serdes_cfg_data, rx_lfpf), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xpon_serdes_cfg_rx_dfe1 = { .name = "rx_dfe1", .descr = "Rx DFE1", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XPON_SERDES_CFG_ID_RX_DFE1, .offset = offsetof(bcmolt_xpon_serdes_cfg_data, rx_dfe1), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xpon_serdes_cfg_rx_dfe2 = { .name = "rx_dfe2", .descr = "Rx DFE2", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XPON_SERDES_CFG_ID_RX_DFE2, .offset = offsetof(bcmolt_xpon_serdes_cfg_data, rx_dfe2), .type = &type_descr_int8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xpon_serdes_cfg_rx_dfe3 = { .name = "rx_dfe3", .descr = "Rx DFE3", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XPON_SERDES_CFG_ID_RX_DFE3, .offset = offsetof(bcmolt_xpon_serdes_cfg_data, rx_dfe3), .type = &type_descr_int8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xpon_serdes_cfg_rx_dfe4 = { .name = "rx_dfe4", .descr = "Rx DFE4", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XPON_SERDES_CFG_ID_RX_DFE4, .offset = offsetof(bcmolt_xpon_serdes_cfg_data, rx_dfe4), .type = &type_descr_int8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xpon_serdes_cfg_rx_dfe5 = { .name = "rx_dfe5", .descr = "Rx DFE5", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XPON_SERDES_CFG_ID_RX_DFE5, .offset = offsetof(bcmolt_xpon_serdes_cfg_data, rx_dfe5), .type = &type_descr_int8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xpon_serdes_cfg_tx_pre = { .name = "tx_pre", .descr = "Tx Pre", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XPON_SERDES_CFG_ID_TX_PRE, .offset = offsetof(bcmolt_xpon_serdes_cfg_data, tx_pre), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xpon_serdes_cfg_tx_main = { .name = "tx_main", .descr = "Tx Main", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XPON_SERDES_CFG_ID_TX_MAIN, .offset = offsetof(bcmolt_xpon_serdes_cfg_data, tx_main), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xpon_serdes_cfg_tx_post1 = { .name = "tx_post1", .descr = "Tx Post1", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XPON_SERDES_CFG_ID_TX_POST1, .offset = offsetof(bcmolt_xpon_serdes_cfg_data, tx_post1), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xpon_serdes_cfg_tx_post2 = { .name = "tx_post2", .descr = "Tx Post2", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XPON_SERDES_CFG_ID_TX_POST2, .offset = offsetof(bcmolt_xpon_serdes_cfg_data, tx_post2), .type = &type_descr_int8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xpon_serdes_cfg_tx_post3 = { .name = "tx_post3", .descr = "Tx Post3", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XPON_SERDES_CFG_ID_TX_POST3, .offset = offsetof(bcmolt_xpon_serdes_cfg_data, tx_post3), .type = &type_descr_int8_t };
+static bcmcli_prop_descr BCM_DESCR prop_descr_xpon_serdes_cfg_tx_amp = { .name = "tx_amp", .descr = "Tx Amp", .access = BCMOLT_PROP_ACCESS_ID_RW, .property = BCMOLT_XPON_SERDES_CFG_ID_TX_AMP, .offset = offsetof(bcmolt_xpon_serdes_cfg_data, tx_amp), .type = &type_descr_uint8_t };
+static bcmcli_prop_descr * BCM_DESCR xpon_serdes_cfg_prop_array[] = { &prop_descr_xpon_serdes_cfg_rx_vga, &prop_descr_xpon_serdes_cfg_rx_pf, &prop_descr_xpon_serdes_cfg_rx_lfpf, &prop_descr_xpon_serdes_cfg_rx_dfe1, &prop_descr_xpon_serdes_cfg_rx_dfe2, &prop_descr_xpon_serdes_cfg_rx_dfe3, &prop_descr_xpon_serdes_cfg_rx_dfe4, &prop_descr_xpon_serdes_cfg_rx_dfe5, &prop_descr_xpon_serdes_cfg_tx_pre, &prop_descr_xpon_serdes_cfg_tx_main, &prop_descr_xpon_serdes_cfg_tx_post1, &prop_descr_xpon_serdes_cfg_tx_post2, &prop_descr_xpon_serdes_cfg_tx_post3, &prop_descr_xpon_serdes_cfg_tx_amp };
+static bcmcli_field_descr BCM_DESCR type_descr_bcmolt_xpon_serdes_cfg_data_fields[] = { { .name = "rx_vga", .descr = "Rx Vga", .offset = offsetof(bcmolt_xpon_serdes_cfg_data, rx_vga), .type = &type_descr_uint8_t }, { .name = "rx_pf", .descr = "Peaking Filter", .offset = offsetof(bcmolt_xpon_serdes_cfg_data, rx_pf), .type = &type_descr_uint8_t }, { .name = "rx_lfpf", .descr = "Low Frequency Peaking Filter", .offset = offsetof(bcmolt_xpon_serdes_cfg_data, rx_lfpf), .type = &type_descr_uint8_t }, { .name = "rx_dfe1", .descr = "Rx DFE1", .offset = offsetof(bcmolt_xpon_serdes_cfg_data, rx_dfe1), .type = &type_descr_uint8_t }, { .name = "rx_dfe2", .descr = "Rx DFE2", .offset = offsetof(bcmolt_xpon_serdes_cfg_data, rx_dfe2), .type = &type_descr_int8_t }, { .name = "rx_dfe3", .descr = "Rx DFE3", .offset = offsetof(bcmolt_xpon_serdes_cfg_data, rx_dfe3), .type = &type_descr_int8_t }, { .name = "rx_dfe4", .descr = "Rx DFE4", .offset = offsetof(bcmolt_xpon_serdes_cfg_data, rx_dfe4), .type = &type_descr_int8_t }, { .name = "rx_dfe5", .descr = "Rx DFE5", .offset = offsetof(bcmolt_xpon_serdes_cfg_data, rx_dfe5), .type = &type_descr_int8_t }, { .name = "tx_pre", .descr = "Tx Pre", .offset = offsetof(bcmolt_xpon_serdes_cfg_data, tx_pre), .type = &type_descr_uint8_t }, { .name = "tx_main", .descr = "Tx Main", .offset = offsetof(bcmolt_xpon_serdes_cfg_data, tx_main), .type = &type_descr_uint8_t }, { .name = "tx_post1", .descr = "Tx Post1", .offset = offsetof(bcmolt_xpon_serdes_cfg_data, tx_post1), .type = &type_descr_uint8_t }, { .name = "tx_post2", .descr = "Tx Post2", .offset = offsetof(bcmolt_xpon_serdes_cfg_data, tx_post2), .type = &type_descr_int8_t }, { .name = "tx_post3", .descr = "Tx Post3", .offset = offsetof(bcmolt_xpon_serdes_cfg_data, tx_post3), .type = &type_descr_int8_t }, { .name = "tx_amp", .descr = "Tx Amp", .offset = offsetof(bcmolt_xpon_serdes_cfg_data, tx_amp), .type = &type_descr_uint8_t } };
+static bcmcli_type_descr BCM_DESCR type_descr_bcmolt_xpon_serdes_cfg_data = { .name = "bcmolt_xpon_serdes_cfg_data", .descr = "cfg", .size = sizeof(bcmolt_xpon_serdes_cfg_data), .base_type = BCMOLT_BASE_TYPE_ID_STRUCT, .x = { .s = { .num_fields = sizeof(type_descr_bcmolt_xpon_serdes_cfg_data_fields) / sizeof(bcmcli_field_descr), .fields = type_descr_bcmolt_xpon_serdes_cfg_data_fields } } };
+
+/* ==== API Helper Function Implementations ==== */
+bcmos_errno api_cli_object_struct_size(bcmolt_obj_id obj, bcmolt_mgt_group group, uint16_t subgroup, uint32_t *key_size, uint32_t *key_offset, uint32_t *data_size, uint32_t *data_offset)
+{
+    if (((key_size == NULL) || (key_offset == NULL)) || ((data_size == NULL) || (data_offset == NULL)))
+    {
+        return BCM_ERR_RANGE;
+    }
+
+    switch (obj)
+    {
+        case BCMOLT_OBJ_ID_AE_NI:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_ae_ni_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmolt_ae_ni_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_ae_ni_key);
+                            *key_offset = offsetof(bcmolt_ae_ni_cfg, key);
+                            *data_size = sizeof(bcmolt_ae_ni_cfg_data);
+                            *data_offset = offsetof(bcmolt_ae_ni_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_AE_NI_OPER_ID_SET_AE_NI_EN_STATE:
+                            *key_size = sizeof(bcmolt_ae_ni_key);
+                            *key_offset = offsetof(bcmolt_ae_ni_set_ae_ni_en_state, key);
+                            *data_size = sizeof(bcmolt_ae_ni_set_ae_ni_en_state_data);
+                            *data_offset = offsetof(bcmolt_ae_ni_set_ae_ni_en_state, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_AE_PATH_DS:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_ae_path_ds_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmolt_ae_path_ds_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_ae_path_ds_key);
+                            *key_offset = offsetof(bcmolt_ae_path_ds_stat, key);
+                            *data_size = sizeof(bcmolt_ae_path_ds_stat_data);
+                            *data_offset = offsetof(bcmolt_ae_path_ds_stat, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                        case 1:
+                        case 2:
+                        case 3:
+                        case 4:
+                        case 5:
+                        case 6:
+                        case 7:
+                        case 8:
+                        case 9:
+                        case 10:
+                        case 11:
+                        case 12:
+                        case 13:
+                        case 14:
+                        case 15:
+                        case 16:
+                            *key_size = sizeof(bcmolt_ae_path_ds_key);
+                            *key_offset = offsetof(bcmolt_ae_path_ds_stat_cfg, key);
+                            *data_size = sizeof(bcmolt_ae_path_ds_stat_cfg_data);
+                            *data_offset = offsetof(bcmolt_ae_path_ds_stat_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_AE_PATH_DS_AUTO_ID_STAT_ALARM_RAISED:
+                            *key_size = sizeof(bcmolt_ae_path_ds_key);
+                            *key_offset = offsetof(bcmolt_ae_path_ds_stat_alarm_raised, key);
+                            *data_size = sizeof(bcmolt_ae_path_ds_stat_alarm_raised_data);
+                            *data_offset = offsetof(bcmolt_ae_path_ds_stat_alarm_raised, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_AE_PATH_DS_AUTO_ID_STAT_ALARM_CLEARED:
+                            *key_size = sizeof(bcmolt_ae_path_ds_key);
+                            *key_offset = offsetof(bcmolt_ae_path_ds_stat_alarm_cleared, key);
+                            *data_size = sizeof(bcmolt_ae_path_ds_stat_alarm_cleared_data);
+                            *data_offset = offsetof(bcmolt_ae_path_ds_stat_alarm_cleared, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_ae_path_ds_key);
+                            *key_offset = offsetof(bcmolt_ae_path_ds_auto_cfg, key);
+                            *data_size = sizeof(bcmolt_ae_path_ds_auto_cfg_data);
+                            *data_offset = offsetof(bcmolt_ae_path_ds_auto_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_AE_PATH_US:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_ae_path_us_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmolt_ae_path_us_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_ae_path_us_key);
+                            *key_offset = offsetof(bcmolt_ae_path_us_stat, key);
+                            *data_size = sizeof(bcmolt_ae_path_us_stat_data);
+                            *data_offset = offsetof(bcmolt_ae_path_us_stat, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                        case 1:
+                        case 2:
+                        case 3:
+                        case 4:
+                        case 5:
+                        case 6:
+                        case 7:
+                        case 8:
+                        case 9:
+                        case 10:
+                        case 11:
+                        case 12:
+                        case 13:
+                        case 14:
+                        case 15:
+                        case 16:
+                        case 17:
+                        case 18:
+                        case 19:
+                            *key_size = sizeof(bcmolt_ae_path_us_key);
+                            *key_offset = offsetof(bcmolt_ae_path_us_stat_cfg, key);
+                            *data_size = sizeof(bcmolt_ae_path_us_stat_cfg_data);
+                            *data_offset = offsetof(bcmolt_ae_path_us_stat_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_AE_PATH_US_AUTO_ID_STAT_ALARM_RAISED:
+                            *key_size = sizeof(bcmolt_ae_path_us_key);
+                            *key_offset = offsetof(bcmolt_ae_path_us_stat_alarm_raised, key);
+                            *data_size = sizeof(bcmolt_ae_path_us_stat_alarm_raised_data);
+                            *data_offset = offsetof(bcmolt_ae_path_us_stat_alarm_raised, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_AE_PATH_US_AUTO_ID_STAT_ALARM_CLEARED:
+                            *key_size = sizeof(bcmolt_ae_path_us_key);
+                            *key_offset = offsetof(bcmolt_ae_path_us_stat_alarm_cleared, key);
+                            *data_size = sizeof(bcmolt_ae_path_us_stat_alarm_cleared_data);
+                            *data_offset = offsetof(bcmolt_ae_path_us_stat_alarm_cleared, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_ae_path_us_key);
+                            *key_offset = offsetof(bcmolt_ae_path_us_auto_cfg, key);
+                            *data_size = sizeof(bcmolt_ae_path_us_auto_cfg_data);
+                            *data_offset = offsetof(bcmolt_ae_path_us_auto_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_CHANNEL:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_channel_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmolt_channel_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_channel_key);
+                            *key_offset = offsetof(bcmolt_channel_cfg, key);
+                            *data_size = sizeof(bcmolt_channel_cfg_data);
+                            *data_offset = offsetof(bcmolt_channel_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_DEBUG:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_debug_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmolt_debug_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_debug_key);
+                            *key_offset = offsetof(bcmolt_debug_cfg, key);
+                            *data_size = sizeof(bcmolt_debug_cfg_data);
+                            *data_offset = offsetof(bcmolt_debug_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_DEBUG_AUTO_ID_CLI_OUTPUT:
+                            *key_size = sizeof(bcmolt_debug_key);
+                            *key_offset = offsetof(bcmolt_debug_cli_output, key);
+                            *data_size = sizeof(bcmolt_debug_cli_output_data);
+                            *data_offset = offsetof(bcmolt_debug_cli_output, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_DEBUG_AUTO_ID_FILE_ALMOST_FULL:
+                            *key_size = sizeof(bcmolt_debug_key);
+                            *key_offset = offsetof(bcmolt_debug_file_almost_full, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_debug_key);
+                            *key_offset = offsetof(bcmolt_debug_auto_cfg, key);
+                            *data_size = sizeof(bcmolt_debug_auto_cfg_data);
+                            *data_offset = offsetof(bcmolt_debug_auto_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_DEBUG_OPER_ID_CLI_INPUT:
+                            *key_size = sizeof(bcmolt_debug_key);
+                            *key_offset = offsetof(bcmolt_debug_cli_input, key);
+                            *data_size = sizeof(bcmolt_debug_cli_input_data);
+                            *data_offset = offsetof(bcmolt_debug_cli_input, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_DEBUG_OPER_ID_START_API_CAPTURE:
+                            *key_size = sizeof(bcmolt_debug_key);
+                            *key_offset = offsetof(bcmolt_debug_start_api_capture, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_DEBUG_OPER_ID_STOP_API_CAPTURE:
+                            *key_size = sizeof(bcmolt_debug_key);
+                            *key_offset = offsetof(bcmolt_debug_stop_api_capture, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_DEBUG_OPER_ID_RESET_API_CAPTURE:
+                            *key_size = sizeof(bcmolt_debug_key);
+                            *key_offset = offsetof(bcmolt_debug_reset_api_capture, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_DEVICE:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_device_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmolt_device_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_device_key);
+                            *key_offset = offsetof(bcmolt_device_cfg, key);
+                            *data_size = sizeof(bcmolt_device_cfg_data);
+                            *data_offset = offsetof(bcmolt_device_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_DEVICE_AUTO_ID_DEVICE_READY:
+                            *key_size = sizeof(bcmolt_device_key);
+                            *key_offset = offsetof(bcmolt_device_device_ready, key);
+                            *data_size = sizeof(bcmolt_device_device_ready_data);
+                            *data_offset = offsetof(bcmolt_device_device_ready, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_DEVICE_AUTO_ID_CONNECTION_ESTABLISHED:
+                            *key_size = sizeof(bcmolt_device_key);
+                            *key_offset = offsetof(bcmolt_device_connection_established, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_DEVICE_AUTO_ID_DEVICE_KEEP_ALIVE:
+                            *key_size = sizeof(bcmolt_device_key);
+                            *key_offset = offsetof(bcmolt_device_device_keep_alive, key);
+                            *data_size = sizeof(bcmolt_device_device_keep_alive_data);
+                            *data_offset = offsetof(bcmolt_device_device_keep_alive, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_DEVICE_AUTO_ID_CONNECTION_FAILURE:
+                            *key_size = sizeof(bcmolt_device_key);
+                            *key_offset = offsetof(bcmolt_device_connection_failure, key);
+                            *data_size = sizeof(bcmolt_device_connection_failure_data);
+                            *data_offset = offsetof(bcmolt_device_connection_failure, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_DEVICE_AUTO_ID_CONNECTION_COMPLETE:
+                            *key_size = sizeof(bcmolt_device_key);
+                            *key_offset = offsetof(bcmolt_device_connection_complete, key);
+                            *data_size = sizeof(bcmolt_device_connection_complete_data);
+                            *data_offset = offsetof(bcmolt_device_connection_complete, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_DEVICE_AUTO_ID_DISCONNECTION_COMPLETE:
+                            *key_size = sizeof(bcmolt_device_key);
+                            *key_offset = offsetof(bcmolt_device_disconnection_complete, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_DEVICE_AUTO_ID_SW_ERROR:
+                            *key_size = sizeof(bcmolt_device_key);
+                            *key_offset = offsetof(bcmolt_device_sw_error, key);
+                            *data_size = sizeof(bcmolt_device_sw_error_data);
+                            *data_offset = offsetof(bcmolt_device_sw_error, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_DEVICE_AUTO_ID_SW_EXCEPTION:
+                            *key_size = sizeof(bcmolt_device_key);
+                            *key_offset = offsetof(bcmolt_device_sw_exception, key);
+                            *data_size = sizeof(bcmolt_device_sw_exception_data);
+                            *data_offset = offsetof(bcmolt_device_sw_exception, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_DEVICE_AUTO_ID_INDICATIONS_DROPPED:
+                            *key_size = sizeof(bcmolt_device_key);
+                            *key_offset = offsetof(bcmolt_device_indications_dropped, key);
+                            *data_size = sizeof(bcmolt_device_indications_dropped_data);
+                            *data_offset = offsetof(bcmolt_device_indications_dropped, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_DEVICE_AUTO_ID_IMAGE_TRANSFER_COMPLETE:
+                            *key_size = sizeof(bcmolt_device_key);
+                            *key_offset = offsetof(bcmolt_device_image_transfer_complete, key);
+                            *data_size = sizeof(bcmolt_device_image_transfer_complete_data);
+                            *data_offset = offsetof(bcmolt_device_image_transfer_complete, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_DEVICE_AUTO_ID_DDR_TEST_COMPLETE:
+                            *key_size = sizeof(bcmolt_device_key);
+                            *key_offset = offsetof(bcmolt_device_ddr_test_complete, key);
+                            *data_size = sizeof(bcmolt_device_ddr_test_complete_data);
+                            *data_offset = offsetof(bcmolt_device_ddr_test_complete, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_device_key);
+                            *key_offset = offsetof(bcmolt_device_auto_cfg, key);
+                            *data_size = sizeof(bcmolt_device_auto_cfg_data);
+                            *data_offset = offsetof(bcmolt_device_auto_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_DEVICE_OPER_ID_CONNECT:
+                            *key_size = sizeof(bcmolt_device_key);
+                            *key_offset = offsetof(bcmolt_device_connect, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_DEVICE_OPER_ID_DISCONNECT:
+                            *key_size = sizeof(bcmolt_device_key);
+                            *key_offset = offsetof(bcmolt_device_disconnect, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_DEVICE_OPER_ID_RESET:
+                            *key_size = sizeof(bcmolt_device_key);
+                            *key_offset = offsetof(bcmolt_device_reset, key);
+                            *data_size = sizeof(bcmolt_device_reset_data);
+                            *data_offset = offsetof(bcmolt_device_reset, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_DEVICE_OPER_ID_HOST_KEEP_ALIVE:
+                            *key_size = sizeof(bcmolt_device_key);
+                            *key_offset = offsetof(bcmolt_device_host_keep_alive, key);
+                            *data_size = sizeof(bcmolt_device_host_keep_alive_data);
+                            *data_offset = offsetof(bcmolt_device_host_keep_alive, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_DEVICE_OPER_ID_SW_UPGRADE_ACTIVATE:
+                            *key_size = sizeof(bcmolt_device_key);
+                            *key_offset = offsetof(bcmolt_device_sw_upgrade_activate, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_DEVICE_OPER_ID_IMAGE_TRANSFER_START:
+                            *key_size = sizeof(bcmolt_device_key);
+                            *key_offset = offsetof(bcmolt_device_image_transfer_start, key);
+                            *data_size = sizeof(bcmolt_device_image_transfer_start_data);
+                            *data_offset = offsetof(bcmolt_device_image_transfer_start, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_DEVICE_OPER_ID_IMAGE_TRANSFER_DATA:
+                            *key_size = sizeof(bcmolt_device_key);
+                            *key_offset = offsetof(bcmolt_device_image_transfer_data, key);
+                            *data_size = sizeof(bcmolt_device_image_transfer_data_data);
+                            *data_offset = offsetof(bcmolt_device_image_transfer_data, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_DEVICE_OPER_ID_RUN_DDR_TEST:
+                            *key_size = sizeof(bcmolt_device_key);
+                            *key_offset = offsetof(bcmolt_device_run_ddr_test, key);
+                            *data_size = sizeof(bcmolt_device_run_ddr_test_data);
+                            *data_offset = offsetof(bcmolt_device_run_ddr_test, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_EPON_DENIED_LINK:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_epon_denied_link_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmolt_epon_denied_link_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_epon_denied_link_key);
+                            *key_offset = offsetof(bcmolt_epon_denied_link_cfg, key);
+                            *data_size = sizeof(bcmolt_epon_denied_link_cfg_data);
+                            *data_offset = offsetof(bcmolt_epon_denied_link_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_EPON_DENIED_LINK_AUTO_ID_UNKNOWN_LINK_VIOLATION:
+                            *key_size = sizeof(bcmolt_epon_denied_link_key);
+                            *key_offset = offsetof(bcmolt_epon_denied_link_unknown_link_violation, key);
+                            *data_size = sizeof(bcmolt_epon_denied_link_unknown_link_violation_data);
+                            *data_offset = offsetof(bcmolt_epon_denied_link_unknown_link_violation, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_DENIED_LINK_AUTO_ID_OVERHEAD_PROFILE_VIOLATION:
+                            *key_size = sizeof(bcmolt_epon_denied_link_key);
+                            *key_offset = offsetof(bcmolt_epon_denied_link_overhead_profile_violation, key);
+                            *data_size = sizeof(bcmolt_epon_denied_link_overhead_profile_violation_data);
+                            *data_offset = offsetof(bcmolt_epon_denied_link_overhead_profile_violation, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_DENIED_LINK_AUTO_ID_LASER_ON_OFF_VIOLATION:
+                            *key_size = sizeof(bcmolt_epon_denied_link_key);
+                            *key_offset = offsetof(bcmolt_epon_denied_link_laser_on_off_violation, key);
+                            *data_size = sizeof(bcmolt_epon_denied_link_laser_on_off_violation_data);
+                            *data_offset = offsetof(bcmolt_epon_denied_link_laser_on_off_violation, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_DENIED_LINK_AUTO_ID_MAX_LINK_VIOLATION:
+                            *key_size = sizeof(bcmolt_epon_denied_link_key);
+                            *key_offset = offsetof(bcmolt_epon_denied_link_max_link_violation, key);
+                            *data_size = sizeof(bcmolt_epon_denied_link_max_link_violation_data);
+                            *data_offset = offsetof(bcmolt_epon_denied_link_max_link_violation, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_DENIED_LINK_AUTO_ID_LLID_POOL_EMPTY_VIOLATION:
+                            *key_size = sizeof(bcmolt_epon_denied_link_key);
+                            *key_offset = offsetof(bcmolt_epon_denied_link_llid_pool_empty_violation, key);
+                            *data_size = sizeof(bcmolt_epon_denied_link_llid_pool_empty_violation_data);
+                            *data_offset = offsetof(bcmolt_epon_denied_link_llid_pool_empty_violation, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_DENIED_LINK_AUTO_ID_SYSTEM_RESOURCE_VIOLATION:
+                            *key_size = sizeof(bcmolt_epon_denied_link_key);
+                            *key_offset = offsetof(bcmolt_epon_denied_link_system_resource_violation, key);
+                            *data_size = sizeof(bcmolt_epon_denied_link_system_resource_violation_data);
+                            *data_offset = offsetof(bcmolt_epon_denied_link_system_resource_violation, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_DENIED_LINK_AUTO_ID_RANGE_VIOLATION:
+                            *key_size = sizeof(bcmolt_epon_denied_link_key);
+                            *key_offset = offsetof(bcmolt_epon_denied_link_range_violation, key);
+                            *data_size = sizeof(bcmolt_epon_denied_link_range_violation_data);
+                            *data_offset = offsetof(bcmolt_epon_denied_link_range_violation, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_DENIED_LINK_AUTO_ID_TDM_CHANNELS_EXHAUSTED:
+                            *key_size = sizeof(bcmolt_epon_denied_link_key);
+                            *key_offset = offsetof(bcmolt_epon_denied_link_tdm_channels_exhausted, key);
+                            *data_size = sizeof(bcmolt_epon_denied_link_tdm_channels_exhausted_data);
+                            *data_offset = offsetof(bcmolt_epon_denied_link_tdm_channels_exhausted, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_DENIED_LINK_AUTO_ID_ROGUE_VIOLATION:
+                            *key_size = sizeof(bcmolt_epon_denied_link_key);
+                            *key_offset = offsetof(bcmolt_epon_denied_link_rogue_violation, key);
+                            *data_size = sizeof(bcmolt_epon_denied_link_rogue_violation_data);
+                            *data_offset = offsetof(bcmolt_epon_denied_link_rogue_violation, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_DENIED_LINK_AUTO_ID_UPSTREAM_BANDWIDTH_VIOLATION:
+                            *key_size = sizeof(bcmolt_epon_denied_link_key);
+                            *key_offset = offsetof(bcmolt_epon_denied_link_upstream_bandwidth_violation, key);
+                            *data_size = sizeof(bcmolt_epon_denied_link_upstream_bandwidth_violation_data);
+                            *data_offset = offsetof(bcmolt_epon_denied_link_upstream_bandwidth_violation, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_epon_denied_link_key);
+                            *key_offset = offsetof(bcmolt_epon_denied_link_auto_cfg, key);
+                            *data_size = sizeof(bcmolt_epon_denied_link_auto_cfg_data);
+                            *data_offset = offsetof(bcmolt_epon_denied_link_auto_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_EPON_LINK:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_epon_link_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmolt_epon_link_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_epon_link_key);
+                            *key_offset = offsetof(bcmolt_epon_link_cfg, key);
+                            *data_size = sizeof(bcmolt_epon_link_cfg_data);
+                            *data_offset = offsetof(bcmolt_epon_link_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_epon_link_key);
+                            *key_offset = offsetof(bcmolt_epon_link_stat, key);
+                            *data_size = sizeof(bcmolt_epon_link_stat_data);
+                            *data_offset = offsetof(bcmolt_epon_link_stat, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                        case 1:
+                        case 2:
+                        case 3:
+                        case 4:
+                        case 5:
+                        case 6:
+                        case 7:
+                        case 8:
+                        case 9:
+                        case 10:
+                        case 11:
+                        case 12:
+                        case 13:
+                        case 14:
+                        case 15:
+                        case 16:
+                        case 17:
+                        case 18:
+                        case 19:
+                        case 20:
+                        case 21:
+                        case 22:
+                        case 23:
+                        case 24:
+                        case 25:
+                        case 26:
+                        case 27:
+                        case 28:
+                        case 29:
+                        case 30:
+                        case 31:
+                        case 32:
+                        case 33:
+                        case 34:
+                        case 35:
+                        case 36:
+                        case 37:
+                        case 38:
+                        case 39:
+                        case 40:
+                        case 41:
+                        case 42:
+                            *key_size = sizeof(bcmolt_epon_link_key);
+                            *key_offset = offsetof(bcmolt_epon_link_stat_cfg, key);
+                            *data_size = sizeof(bcmolt_epon_link_stat_cfg_data);
+                            *data_offset = offsetof(bcmolt_epon_link_stat_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_EPON_LINK_AUTO_ID_KEY_EXCHANGE_FAILURE:
+                            *key_size = sizeof(bcmolt_epon_link_key);
+                            *key_offset = offsetof(bcmolt_epon_link_key_exchange_failure, key);
+                            *data_size = sizeof(bcmolt_epon_link_key_exchange_failure_data);
+                            *data_offset = offsetof(bcmolt_epon_link_key_exchange_failure, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_AUTO_ID_ENCRYPTION_ENABLED:
+                            *key_size = sizeof(bcmolt_epon_link_key);
+                            *key_offset = offsetof(bcmolt_epon_link_encryption_enabled, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_AUTO_ID_MPCP_REG_ACK_TIMEOUT:
+                            *key_size = sizeof(bcmolt_epon_link_key);
+                            *key_offset = offsetof(bcmolt_epon_link_mpcp_reg_ack_timeout, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_AUTO_ID_RANGE_VALUE_CHANGED:
+                            *key_size = sizeof(bcmolt_epon_link_key);
+                            *key_offset = offsetof(bcmolt_epon_link_range_value_changed, key);
+                            *data_size = sizeof(bcmolt_epon_link_range_value_changed_data);
+                            *data_offset = offsetof(bcmolt_epon_link_range_value_changed, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_AUTO_ID_PROTECTION_SWITCH_OCCURRED:
+                            *key_size = sizeof(bcmolt_epon_link_key);
+                            *key_offset = offsetof(bcmolt_epon_link_protection_switch_occurred, key);
+                            *data_size = sizeof(bcmolt_epon_link_protection_switch_occurred_data);
+                            *data_offset = offsetof(bcmolt_epon_link_protection_switch_occurred, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_AUTO_ID_DUPLICATE_MPCP_REGISTRATION_REQUEST:
+                            *key_size = sizeof(bcmolt_epon_link_key);
+                            *key_offset = offsetof(bcmolt_epon_link_duplicate_mpcp_registration_request, key);
+                            *data_size = sizeof(bcmolt_epon_link_duplicate_mpcp_registration_request_data);
+                            *data_offset = offsetof(bcmolt_epon_link_duplicate_mpcp_registration_request, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_AUTO_ID_LINK_SPEED_MISMATCH:
+                            *key_size = sizeof(bcmolt_epon_link_key);
+                            *key_offset = offsetof(bcmolt_epon_link_link_speed_mismatch, key);
+                            *data_size = sizeof(bcmolt_epon_link_link_speed_mismatch_data);
+                            *data_offset = offsetof(bcmolt_epon_link_link_speed_mismatch, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_AUTO_ID_MPCP_REPORT_TIMEOUT:
+                            *key_size = sizeof(bcmolt_epon_link_key);
+                            *key_offset = offsetof(bcmolt_epon_link_mpcp_report_timeout, key);
+                            *data_size = sizeof(bcmolt_epon_link_mpcp_report_timeout_data);
+                            *data_offset = offsetof(bcmolt_epon_link_mpcp_report_timeout, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_AUTO_ID_OAM_KEEPALIVE_TIMEOUT:
+                            *key_size = sizeof(bcmolt_epon_link_key);
+                            *key_offset = offsetof(bcmolt_epon_link_oam_keepalive_timeout, key);
+                            *data_size = sizeof(bcmolt_epon_link_oam_keepalive_timeout_data);
+                            *data_offset = offsetof(bcmolt_epon_link_oam_keepalive_timeout, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_AUTO_ID_MPCP_DISCOVERED:
+                            *key_size = sizeof(bcmolt_epon_link_key);
+                            *key_offset = offsetof(bcmolt_epon_link_mpcp_discovered, key);
+                            *data_size = sizeof(bcmolt_epon_link_mpcp_discovered_data);
+                            *data_offset = offsetof(bcmolt_epon_link_mpcp_discovered, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_AUTO_ID_MPCP_DEREGISTERED:
+                            *key_size = sizeof(bcmolt_epon_link_key);
+                            *key_offset = offsetof(bcmolt_epon_link_mpcp_deregistered, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_AUTO_ID_PREPROVISIONED_LINK_CREATED:
+                            *key_size = sizeof(bcmolt_epon_link_key);
+                            *key_offset = offsetof(bcmolt_epon_link_preprovisioned_link_created, key);
+                            *data_size = sizeof(bcmolt_epon_link_preprovisioned_link_created_data);
+                            *data_offset = offsetof(bcmolt_epon_link_preprovisioned_link_created, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_AUTO_ID_OAM_KEEPALIVE_TIMER_STARTED:
+                            *key_size = sizeof(bcmolt_epon_link_key);
+                            *key_offset = offsetof(bcmolt_epon_link_oam_keepalive_timer_started, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_AUTO_ID_OAM_KEEPALIVE_TIMER_STOPPED:
+                            *key_size = sizeof(bcmolt_epon_link_key);
+                            *key_offset = offsetof(bcmolt_epon_link_oam_keepalive_timer_stopped, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_AUTO_ID_KEY_EXCHANGE_STARTED:
+                            *key_size = sizeof(bcmolt_epon_link_key);
+                            *key_offset = offsetof(bcmolt_epon_link_key_exchange_started, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_AUTO_ID_KEY_EXCHANGE_STOPPED:
+                            *key_size = sizeof(bcmolt_epon_link_key);
+                            *key_offset = offsetof(bcmolt_epon_link_key_exchange_stopped, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_AUTO_ID_STATIC_REGISTRATION_DONE:
+                            *key_size = sizeof(bcmolt_epon_link_key);
+                            *key_offset = offsetof(bcmolt_epon_link_static_registration_done, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_AUTO_ID_RERANGE_FAILURE:
+                            *key_size = sizeof(bcmolt_epon_link_key);
+                            *key_offset = offsetof(bcmolt_epon_link_rerange_failure, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_AUTO_ID_LINK_DELETED:
+                            *key_size = sizeof(bcmolt_epon_link_key);
+                            *key_offset = offsetof(bcmolt_epon_link_link_deleted, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_AUTO_ID_STAT_ALARM_RAISED:
+                            *key_size = sizeof(bcmolt_epon_link_key);
+                            *key_offset = offsetof(bcmolt_epon_link_stat_alarm_raised, key);
+                            *data_size = sizeof(bcmolt_epon_link_stat_alarm_raised_data);
+                            *data_offset = offsetof(bcmolt_epon_link_stat_alarm_raised, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_AUTO_ID_STAT_ALARM_CLEARED:
+                            *key_size = sizeof(bcmolt_epon_link_key);
+                            *key_offset = offsetof(bcmolt_epon_link_stat_alarm_cleared, key);
+                            *data_size = sizeof(bcmolt_epon_link_stat_alarm_cleared_data);
+                            *data_offset = offsetof(bcmolt_epon_link_stat_alarm_cleared, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_epon_link_key);
+                            *key_offset = offsetof(bcmolt_epon_link_auto_cfg, key);
+                            *data_size = sizeof(bcmolt_epon_link_auto_cfg_data);
+                            *data_offset = offsetof(bcmolt_epon_link_auto_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_EPON_LINK_OPER_ID_FORCE_REDISCOVERY:
+                            *key_size = sizeof(bcmolt_epon_link_key);
+                            *key_offset = offsetof(bcmolt_epon_link_force_rediscovery, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_OPER_ID_DELETE_LINK:
+                            *key_size = sizeof(bcmolt_epon_link_key);
+                            *key_offset = offsetof(bcmolt_epon_link_delete_link, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_OPER_ID_OAM_KEEPALIVE_TIMER_START:
+                            *key_size = sizeof(bcmolt_epon_link_key);
+                            *key_offset = offsetof(bcmolt_epon_link_oam_keepalive_timer_start, key);
+                            *data_size = sizeof(bcmolt_epon_link_oam_keepalive_timer_start_data);
+                            *data_offset = offsetof(bcmolt_epon_link_oam_keepalive_timer_start, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_OPER_ID_OAM_KEEPALIVE_TIMER_STOP:
+                            *key_size = sizeof(bcmolt_epon_link_key);
+                            *key_offset = offsetof(bcmolt_epon_link_oam_keepalive_timer_stop, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_OPER_ID_KEY_EXCHANGE_START:
+                            *key_size = sizeof(bcmolt_epon_link_key);
+                            *key_offset = offsetof(bcmolt_epon_link_key_exchange_start, key);
+                            *data_size = sizeof(bcmolt_epon_link_key_exchange_start_data);
+                            *data_offset = offsetof(bcmolt_epon_link_key_exchange_start, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_OPER_ID_KEY_EXCHANGE_STOP:
+                            *key_size = sizeof(bcmolt_epon_link_key);
+                            *key_offset = offsetof(bcmolt_epon_link_key_exchange_stop, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_OPER_ID_STATIC_REGISTRATION:
+                            *key_size = sizeof(bcmolt_epon_link_key);
+                            *key_offset = offsetof(bcmolt_epon_link_static_registration, key);
+                            *data_size = sizeof(bcmolt_epon_link_static_registration_data);
+                            *data_offset = offsetof(bcmolt_epon_link_static_registration, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_PROXY:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_EPON_LINK_PROXY_ID_INJECT_FRAME:
+                            *key_size = sizeof(bcmolt_epon_link_key);
+                            *key_offset = offsetof(bcmolt_epon_link_inject_frame, key);
+                            *data_size = sizeof(bcmolt_epon_link_inject_frame_data);
+                            *data_offset = offsetof(bcmolt_epon_link_inject_frame, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_PROXY_RX:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_EPON_LINK_PROXY_RX_ID_FRAME_CAPTURED:
+                            *key_size = sizeof(bcmolt_epon_link_key);
+                            *key_offset = offsetof(bcmolt_epon_link_frame_captured, key);
+                            *data_size = sizeof(bcmolt_epon_link_frame_captured_data);
+                            *data_offset = offsetof(bcmolt_epon_link_frame_captured, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_EPON_NI:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_epon_ni_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmolt_epon_ni_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_epon_ni_key);
+                            *key_offset = offsetof(bcmolt_epon_ni_cfg, key);
+                            *data_size = sizeof(bcmolt_epon_ni_cfg_data);
+                            *data_offset = offsetof(bcmolt_epon_ni_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_EPON_NI_AUTO_ID_NO_REPORTS:
+                            *key_size = sizeof(bcmolt_epon_ni_key);
+                            *key_offset = offsetof(bcmolt_epon_ni_no_reports, key);
+                            *data_size = sizeof(bcmolt_epon_ni_no_reports_data);
+                            *data_offset = offsetof(bcmolt_epon_ni_no_reports, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_NI_AUTO_ID_LLID_QUARANTINED:
+                            *key_size = sizeof(bcmolt_epon_ni_key);
+                            *key_offset = offsetof(bcmolt_epon_ni_llid_quarantined, key);
+                            *data_size = sizeof(bcmolt_epon_ni_llid_quarantined_data);
+                            *data_offset = offsetof(bcmolt_epon_ni_llid_quarantined, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_NI_AUTO_ID_STATE_CHANGE_COMPLETED:
+                            *key_size = sizeof(bcmolt_epon_ni_key);
+                            *key_offset = offsetof(bcmolt_epon_ni_state_change_completed, key);
+                            *data_size = sizeof(bcmolt_epon_ni_state_change_completed_data);
+                            *data_offset = offsetof(bcmolt_epon_ni_state_change_completed, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_NI_AUTO_ID_RERANGE_FAILURE:
+                            *key_size = sizeof(bcmolt_epon_ni_key);
+                            *key_offset = offsetof(bcmolt_epon_ni_rerange_failure, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_NI_AUTO_ID_RSSI_MEASUREMENT_COMPLETED:
+                            *key_size = sizeof(bcmolt_epon_ni_key);
+                            *key_offset = offsetof(bcmolt_epon_ni_rssi_measurement_completed, key);
+                            *data_size = sizeof(bcmolt_epon_ni_rssi_measurement_completed_data);
+                            *data_offset = offsetof(bcmolt_epon_ni_rssi_measurement_completed, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_NI_AUTO_ID_ONU_UPGRADE_COMPLETE:
+                            *key_size = sizeof(bcmolt_epon_ni_key);
+                            *key_offset = offsetof(bcmolt_epon_ni_onu_upgrade_complete, key);
+                            *data_size = sizeof(bcmolt_epon_ni_onu_upgrade_complete_data);
+                            *data_offset = offsetof(bcmolt_epon_ni_onu_upgrade_complete, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_NI_AUTO_ID_ROGUE_SCAN_COMPLETE:
+                            *key_size = sizeof(bcmolt_epon_ni_key);
+                            *key_offset = offsetof(bcmolt_epon_ni_rogue_scan_complete, key);
+                            *data_size = sizeof(bcmolt_epon_ni_rogue_scan_complete_data);
+                            *data_offset = offsetof(bcmolt_epon_ni_rogue_scan_complete, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_NI_AUTO_ID_MPCP_TIMESTAMP_CHANGED:
+                            *key_size = sizeof(bcmolt_epon_ni_key);
+                            *key_offset = offsetof(bcmolt_epon_ni_mpcp_timestamp_changed, key);
+                            *data_size = sizeof(bcmolt_epon_ni_mpcp_timestamp_changed_data);
+                            *data_offset = offsetof(bcmolt_epon_ni_mpcp_timestamp_changed, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_NI_AUTO_ID_AUTO_ROGUE_SCAN_1G_FAILURE:
+                            *key_size = sizeof(bcmolt_epon_ni_key);
+                            *key_offset = offsetof(bcmolt_epon_ni_auto_rogue_scan_1g_failure, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_NI_AUTO_ID_AUTO_ROGUE_SCAN_10G_FAILURE:
+                            *key_size = sizeof(bcmolt_epon_ni_key);
+                            *key_offset = offsetof(bcmolt_epon_ni_auto_rogue_scan_10g_failure, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_epon_ni_key);
+                            *key_offset = offsetof(bcmolt_epon_ni_auto_cfg, key);
+                            *data_size = sizeof(bcmolt_epon_ni_auto_cfg_data);
+                            *data_offset = offsetof(bcmolt_epon_ni_auto_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_EPON_NI_OPER_ID_SET_EPON_NI_EN_STATE:
+                            *key_size = sizeof(bcmolt_epon_ni_key);
+                            *key_offset = offsetof(bcmolt_epon_ni_set_epon_ni_en_state, key);
+                            *data_size = sizeof(bcmolt_epon_ni_set_epon_ni_en_state_data);
+                            *data_offset = offsetof(bcmolt_epon_ni_set_epon_ni_en_state, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_NI_OPER_ID_ISSUE_RSSI_GRANT:
+                            *key_size = sizeof(bcmolt_epon_ni_key);
+                            *key_offset = offsetof(bcmolt_epon_ni_issue_rssi_grant, key);
+                            *data_size = sizeof(bcmolt_epon_ni_issue_rssi_grant_data);
+                            *data_offset = offsetof(bcmolt_epon_ni_issue_rssi_grant, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_NI_OPER_ID_ADD_LINK:
+                            *key_size = sizeof(bcmolt_epon_ni_key);
+                            *key_offset = offsetof(bcmolt_epon_ni_add_link, key);
+                            *data_size = sizeof(bcmolt_epon_ni_add_link_data);
+                            *data_offset = offsetof(bcmolt_epon_ni_add_link, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_NI_OPER_ID_ADD_MULTICAST_LINK:
+                            *key_size = sizeof(bcmolt_epon_ni_key);
+                            *key_offset = offsetof(bcmolt_epon_ni_add_multicast_link, key);
+                            *data_size = sizeof(bcmolt_epon_ni_add_multicast_link_data);
+                            *data_offset = offsetof(bcmolt_epon_ni_add_multicast_link, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_NI_OPER_ID_ADD_PROTECTED_STANDBY_LINK:
+                            *key_size = sizeof(bcmolt_epon_ni_key);
+                            *key_offset = offsetof(bcmolt_epon_ni_add_protected_standby_link, key);
+                            *data_size = sizeof(bcmolt_epon_ni_add_protected_standby_link_data);
+                            *data_offset = offsetof(bcmolt_epon_ni_add_protected_standby_link, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_NI_OPER_ID_PROTECTION_SWITCHING_APPLY_RERANGE_DELTA:
+                            *key_size = sizeof(bcmolt_epon_ni_key);
+                            *key_offset = offsetof(bcmolt_epon_ni_protection_switching_apply_rerange_delta, key);
+                            *data_size = sizeof(bcmolt_epon_ni_protection_switching_apply_rerange_delta_data);
+                            *data_offset = offsetof(bcmolt_epon_ni_protection_switching_apply_rerange_delta, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_NI_OPER_ID_ROGUE_LLID_SCAN:
+                            *key_size = sizeof(bcmolt_epon_ni_key);
+                            *key_offset = offsetof(bcmolt_epon_ni_rogue_llid_scan, key);
+                            *data_size = sizeof(bcmolt_epon_ni_rogue_llid_scan_data);
+                            *data_offset = offsetof(bcmolt_epon_ni_rogue_llid_scan, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_NI_OPER_ID_START_ONU_UPGRADE:
+                            *key_size = sizeof(bcmolt_epon_ni_key);
+                            *key_offset = offsetof(bcmolt_epon_ni_start_onu_upgrade, key);
+                            *data_size = sizeof(bcmolt_epon_ni_start_onu_upgrade_data);
+                            *data_offset = offsetof(bcmolt_epon_ni_start_onu_upgrade, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_EPON_ONU_10G_US:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_epon_onu_10g_us_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmolt_epon_onu_10g_us_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_epon_onu_10g_us_key);
+                            *key_offset = offsetof(bcmolt_epon_onu_10g_us_cfg, key);
+                            *data_size = sizeof(bcmolt_epon_onu_10g_us_cfg_data);
+                            *data_offset = offsetof(bcmolt_epon_onu_10g_us_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_epon_onu_10g_us_key);
+                            *key_offset = offsetof(bcmolt_epon_onu_10g_us_stat, key);
+                            *data_size = sizeof(bcmolt_epon_onu_10g_us_stat_data);
+                            *data_offset = offsetof(bcmolt_epon_onu_10g_us_stat, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                        case 1:
+                        case 2:
+                        case 3:
+                            *key_size = sizeof(bcmolt_epon_onu_10g_us_key);
+                            *key_offset = offsetof(bcmolt_epon_onu_10g_us_stat_cfg, key);
+                            *data_size = sizeof(bcmolt_epon_onu_10g_us_stat_cfg_data);
+                            *data_offset = offsetof(bcmolt_epon_onu_10g_us_stat_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_EPON_ONU_10G_US_AUTO_ID_STAT_ALARM_RAISED:
+                            *key_size = sizeof(bcmolt_epon_onu_10g_us_key);
+                            *key_offset = offsetof(bcmolt_epon_onu_10g_us_stat_alarm_raised, key);
+                            *data_size = sizeof(bcmolt_epon_onu_10g_us_stat_alarm_raised_data);
+                            *data_offset = offsetof(bcmolt_epon_onu_10g_us_stat_alarm_raised, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_ONU_10G_US_AUTO_ID_STAT_ALARM_CLEARED:
+                            *key_size = sizeof(bcmolt_epon_onu_10g_us_key);
+                            *key_offset = offsetof(bcmolt_epon_onu_10g_us_stat_alarm_cleared, key);
+                            *data_size = sizeof(bcmolt_epon_onu_10g_us_stat_alarm_cleared_data);
+                            *data_offset = offsetof(bcmolt_epon_onu_10g_us_stat_alarm_cleared, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_epon_onu_10g_us_key);
+                            *key_offset = offsetof(bcmolt_epon_onu_10g_us_auto_cfg, key);
+                            *data_size = sizeof(bcmolt_epon_onu_10g_us_auto_cfg_data);
+                            *data_offset = offsetof(bcmolt_epon_onu_10g_us_auto_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_EPON_ONU_1G_US:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_epon_onu_1g_us_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmolt_epon_onu_1g_us_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_epon_onu_1g_us_key);
+                            *key_offset = offsetof(bcmolt_epon_onu_1g_us_cfg, key);
+                            *data_size = sizeof(bcmolt_epon_onu_1g_us_cfg_data);
+                            *data_offset = offsetof(bcmolt_epon_onu_1g_us_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_epon_onu_1g_us_key);
+                            *key_offset = offsetof(bcmolt_epon_onu_1g_us_stat, key);
+                            *data_size = sizeof(bcmolt_epon_onu_1g_us_stat_data);
+                            *data_offset = offsetof(bcmolt_epon_onu_1g_us_stat, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                        case 1:
+                        case 2:
+                        case 3:
+                        case 4:
+                        case 5:
+                        case 6:
+                        case 7:
+                        case 8:
+                        case 9:
+                        case 10:
+                        case 11:
+                        case 12:
+                        case 13:
+                        case 14:
+                        case 15:
+                            *key_size = sizeof(bcmolt_epon_onu_1g_us_key);
+                            *key_offset = offsetof(bcmolt_epon_onu_1g_us_stat_cfg, key);
+                            *data_size = sizeof(bcmolt_epon_onu_1g_us_stat_cfg_data);
+                            *data_offset = offsetof(bcmolt_epon_onu_1g_us_stat_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_EPON_ONU_1G_US_AUTO_ID_STAT_ALARM_RAISED:
+                            *key_size = sizeof(bcmolt_epon_onu_1g_us_key);
+                            *key_offset = offsetof(bcmolt_epon_onu_1g_us_stat_alarm_raised, key);
+                            *data_size = sizeof(bcmolt_epon_onu_1g_us_stat_alarm_raised_data);
+                            *data_offset = offsetof(bcmolt_epon_onu_1g_us_stat_alarm_raised, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_ONU_1G_US_AUTO_ID_STAT_ALARM_CLEARED:
+                            *key_size = sizeof(bcmolt_epon_onu_1g_us_key);
+                            *key_offset = offsetof(bcmolt_epon_onu_1g_us_stat_alarm_cleared, key);
+                            *data_size = sizeof(bcmolt_epon_onu_1g_us_stat_alarm_cleared_data);
+                            *data_offset = offsetof(bcmolt_epon_onu_1g_us_stat_alarm_cleared, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_epon_onu_1g_us_key);
+                            *key_offset = offsetof(bcmolt_epon_onu_1g_us_auto_cfg, key);
+                            *data_size = sizeof(bcmolt_epon_onu_1g_us_auto_cfg_data);
+                            *data_offset = offsetof(bcmolt_epon_onu_1g_us_auto_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_EPON_PATH_10G_DS:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_epon_path_10g_ds_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmolt_epon_path_10g_ds_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_epon_path_10g_ds_key);
+                            *key_offset = offsetof(bcmolt_epon_path_10g_ds_cfg, key);
+                            *data_size = sizeof(bcmolt_epon_path_10g_ds_cfg_data);
+                            *data_offset = offsetof(bcmolt_epon_path_10g_ds_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_epon_path_10g_ds_key);
+                            *key_offset = offsetof(bcmolt_epon_path_10g_ds_stat, key);
+                            *data_size = sizeof(bcmolt_epon_path_10g_ds_stat_data);
+                            *data_offset = offsetof(bcmolt_epon_path_10g_ds_stat, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                        case 1:
+                        case 2:
+                        case 3:
+                        case 4:
+                        case 5:
+                        case 6:
+                        case 7:
+                        case 8:
+                        case 9:
+                        case 10:
+                        case 11:
+                        case 12:
+                        case 13:
+                        case 14:
+                        case 15:
+                        case 16:
+                        case 17:
+                        case 18:
+                        case 19:
+                        case 20:
+                            *key_size = sizeof(bcmolt_epon_path_10g_ds_key);
+                            *key_offset = offsetof(bcmolt_epon_path_10g_ds_stat_cfg, key);
+                            *data_size = sizeof(bcmolt_epon_path_10g_ds_stat_cfg_data);
+                            *data_offset = offsetof(bcmolt_epon_path_10g_ds_stat_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_EPON_PATH_10G_DS_AUTO_ID_STAT_ALARM_RAISED:
+                            *key_size = sizeof(bcmolt_epon_path_10g_ds_key);
+                            *key_offset = offsetof(bcmolt_epon_path_10g_ds_stat_alarm_raised, key);
+                            *data_size = sizeof(bcmolt_epon_path_10g_ds_stat_alarm_raised_data);
+                            *data_offset = offsetof(bcmolt_epon_path_10g_ds_stat_alarm_raised, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_PATH_10G_DS_AUTO_ID_STAT_ALARM_CLEARED:
+                            *key_size = sizeof(bcmolt_epon_path_10g_ds_key);
+                            *key_offset = offsetof(bcmolt_epon_path_10g_ds_stat_alarm_cleared, key);
+                            *data_size = sizeof(bcmolt_epon_path_10g_ds_stat_alarm_cleared_data);
+                            *data_offset = offsetof(bcmolt_epon_path_10g_ds_stat_alarm_cleared, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_epon_path_10g_ds_key);
+                            *key_offset = offsetof(bcmolt_epon_path_10g_ds_auto_cfg, key);
+                            *data_size = sizeof(bcmolt_epon_path_10g_ds_auto_cfg_data);
+                            *data_offset = offsetof(bcmolt_epon_path_10g_ds_auto_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_EPON_PATH_10G_US:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_epon_path_10g_us_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmolt_epon_path_10g_us_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_epon_path_10g_us_key);
+                            *key_offset = offsetof(bcmolt_epon_path_10g_us_cfg, key);
+                            *data_size = sizeof(bcmolt_epon_path_10g_us_cfg_data);
+                            *data_offset = offsetof(bcmolt_epon_path_10g_us_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_epon_path_10g_us_key);
+                            *key_offset = offsetof(bcmolt_epon_path_10g_us_stat, key);
+                            *data_size = sizeof(bcmolt_epon_path_10g_us_stat_data);
+                            *data_offset = offsetof(bcmolt_epon_path_10g_us_stat, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                        case 1:
+                        case 2:
+                        case 3:
+                        case 4:
+                        case 5:
+                        case 6:
+                        case 7:
+                        case 8:
+                        case 9:
+                        case 10:
+                        case 11:
+                        case 12:
+                        case 13:
+                        case 14:
+                        case 15:
+                        case 16:
+                        case 17:
+                        case 18:
+                        case 19:
+                        case 20:
+                        case 21:
+                        case 22:
+                        case 23:
+                        case 24:
+                        case 25:
+                            *key_size = sizeof(bcmolt_epon_path_10g_us_key);
+                            *key_offset = offsetof(bcmolt_epon_path_10g_us_stat_cfg, key);
+                            *data_size = sizeof(bcmolt_epon_path_10g_us_stat_cfg_data);
+                            *data_offset = offsetof(bcmolt_epon_path_10g_us_stat_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_EPON_PATH_10G_US_AUTO_ID_STAT_ALARM_RAISED:
+                            *key_size = sizeof(bcmolt_epon_path_10g_us_key);
+                            *key_offset = offsetof(bcmolt_epon_path_10g_us_stat_alarm_raised, key);
+                            *data_size = sizeof(bcmolt_epon_path_10g_us_stat_alarm_raised_data);
+                            *data_offset = offsetof(bcmolt_epon_path_10g_us_stat_alarm_raised, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_PATH_10G_US_AUTO_ID_STAT_ALARM_CLEARED:
+                            *key_size = sizeof(bcmolt_epon_path_10g_us_key);
+                            *key_offset = offsetof(bcmolt_epon_path_10g_us_stat_alarm_cleared, key);
+                            *data_size = sizeof(bcmolt_epon_path_10g_us_stat_alarm_cleared_data);
+                            *data_offset = offsetof(bcmolt_epon_path_10g_us_stat_alarm_cleared, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_epon_path_10g_us_key);
+                            *key_offset = offsetof(bcmolt_epon_path_10g_us_auto_cfg, key);
+                            *data_size = sizeof(bcmolt_epon_path_10g_us_auto_cfg_data);
+                            *data_offset = offsetof(bcmolt_epon_path_10g_us_auto_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_EPON_PATH_1G_DS:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_epon_path_1g_ds_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmolt_epon_path_1g_ds_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_epon_path_1g_ds_key);
+                            *key_offset = offsetof(bcmolt_epon_path_1g_ds_cfg, key);
+                            *data_size = sizeof(bcmolt_epon_path_1g_ds_cfg_data);
+                            *data_offset = offsetof(bcmolt_epon_path_1g_ds_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_epon_path_1g_ds_key);
+                            *key_offset = offsetof(bcmolt_epon_path_1g_ds_stat, key);
+                            *data_size = sizeof(bcmolt_epon_path_1g_ds_stat_data);
+                            *data_offset = offsetof(bcmolt_epon_path_1g_ds_stat, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                        case 1:
+                        case 2:
+                        case 3:
+                        case 4:
+                        case 5:
+                        case 6:
+                        case 7:
+                        case 8:
+                        case 9:
+                        case 10:
+                        case 11:
+                        case 12:
+                        case 13:
+                        case 14:
+                        case 15:
+                        case 16:
+                        case 17:
+                        case 18:
+                        case 19:
+                        case 20:
+                            *key_size = sizeof(bcmolt_epon_path_1g_ds_key);
+                            *key_offset = offsetof(bcmolt_epon_path_1g_ds_stat_cfg, key);
+                            *data_size = sizeof(bcmolt_epon_path_1g_ds_stat_cfg_data);
+                            *data_offset = offsetof(bcmolt_epon_path_1g_ds_stat_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_EPON_PATH_1G_DS_AUTO_ID_STAT_ALARM_RAISED:
+                            *key_size = sizeof(bcmolt_epon_path_1g_ds_key);
+                            *key_offset = offsetof(bcmolt_epon_path_1g_ds_stat_alarm_raised, key);
+                            *data_size = sizeof(bcmolt_epon_path_1g_ds_stat_alarm_raised_data);
+                            *data_offset = offsetof(bcmolt_epon_path_1g_ds_stat_alarm_raised, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_PATH_1G_DS_AUTO_ID_STAT_ALARM_CLEARED:
+                            *key_size = sizeof(bcmolt_epon_path_1g_ds_key);
+                            *key_offset = offsetof(bcmolt_epon_path_1g_ds_stat_alarm_cleared, key);
+                            *data_size = sizeof(bcmolt_epon_path_1g_ds_stat_alarm_cleared_data);
+                            *data_offset = offsetof(bcmolt_epon_path_1g_ds_stat_alarm_cleared, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_epon_path_1g_ds_key);
+                            *key_offset = offsetof(bcmolt_epon_path_1g_ds_auto_cfg, key);
+                            *data_size = sizeof(bcmolt_epon_path_1g_ds_auto_cfg_data);
+                            *data_offset = offsetof(bcmolt_epon_path_1g_ds_auto_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_EPON_PATH_1G_US:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_epon_path_1g_us_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmolt_epon_path_1g_us_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_epon_path_1g_us_key);
+                            *key_offset = offsetof(bcmolt_epon_path_1g_us_cfg, key);
+                            *data_size = sizeof(bcmolt_epon_path_1g_us_cfg_data);
+                            *data_offset = offsetof(bcmolt_epon_path_1g_us_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_epon_path_1g_us_key);
+                            *key_offset = offsetof(bcmolt_epon_path_1g_us_stat, key);
+                            *data_size = sizeof(bcmolt_epon_path_1g_us_stat_data);
+                            *data_offset = offsetof(bcmolt_epon_path_1g_us_stat, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                        case 1:
+                        case 2:
+                        case 3:
+                        case 4:
+                        case 5:
+                        case 6:
+                        case 7:
+                        case 8:
+                        case 9:
+                        case 10:
+                        case 11:
+                        case 12:
+                        case 13:
+                        case 14:
+                        case 15:
+                        case 16:
+                        case 17:
+                        case 18:
+                        case 19:
+                        case 20:
+                        case 21:
+                        case 22:
+                        case 23:
+                        case 24:
+                        case 25:
+                            *key_size = sizeof(bcmolt_epon_path_1g_us_key);
+                            *key_offset = offsetof(bcmolt_epon_path_1g_us_stat_cfg, key);
+                            *data_size = sizeof(bcmolt_epon_path_1g_us_stat_cfg_data);
+                            *data_offset = offsetof(bcmolt_epon_path_1g_us_stat_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_EPON_PATH_1G_US_AUTO_ID_STAT_ALARM_RAISED:
+                            *key_size = sizeof(bcmolt_epon_path_1g_us_key);
+                            *key_offset = offsetof(bcmolt_epon_path_1g_us_stat_alarm_raised, key);
+                            *data_size = sizeof(bcmolt_epon_path_1g_us_stat_alarm_raised_data);
+                            *data_offset = offsetof(bcmolt_epon_path_1g_us_stat_alarm_raised, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_PATH_1G_US_AUTO_ID_STAT_ALARM_CLEARED:
+                            *key_size = sizeof(bcmolt_epon_path_1g_us_key);
+                            *key_offset = offsetof(bcmolt_epon_path_1g_us_stat_alarm_cleared, key);
+                            *data_size = sizeof(bcmolt_epon_path_1g_us_stat_alarm_cleared_data);
+                            *data_offset = offsetof(bcmolt_epon_path_1g_us_stat_alarm_cleared, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_epon_path_1g_us_key);
+                            *key_offset = offsetof(bcmolt_epon_path_1g_us_auto_cfg, key);
+                            *data_size = sizeof(bcmolt_epon_path_1g_us_auto_cfg_data);
+                            *data_offset = offsetof(bcmolt_epon_path_1g_us_auto_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_EPON_RP:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_epon_rp_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmolt_epon_rp_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_epon_rp_key);
+                            *key_offset = offsetof(bcmolt_epon_rp_cfg, key);
+                            *data_size = sizeof(bcmolt_epon_rp_cfg_data);
+                            *data_offset = offsetof(bcmolt_epon_rp_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_GPIO:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_gpio_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmolt_gpio_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_gpio_key);
+                            *key_offset = offsetof(bcmolt_gpio_cfg, key);
+                            *data_size = sizeof(bcmolt_gpio_cfg_data);
+                            *data_offset = offsetof(bcmolt_gpio_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_GPON_ALLOC:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_gpon_alloc_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmolt_gpon_alloc_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_gpon_alloc_key);
+                            *key_offset = offsetof(bcmolt_gpon_alloc_cfg, key);
+                            *data_size = sizeof(bcmolt_gpon_alloc_cfg_data);
+                            *data_offset = offsetof(bcmolt_gpon_alloc_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_gpon_alloc_key);
+                            *key_offset = offsetof(bcmolt_gpon_alloc_stat, key);
+                            *data_size = sizeof(bcmolt_gpon_alloc_stat_data);
+                            *data_offset = offsetof(bcmolt_gpon_alloc_stat, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_gpon_alloc_key);
+                            *key_offset = offsetof(bcmolt_gpon_alloc_stat_cfg, key);
+                            *data_size = sizeof(bcmolt_gpon_alloc_stat_cfg_data);
+                            *data_offset = offsetof(bcmolt_gpon_alloc_stat_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_GPON_ALLOC_AUTO_ID_CONFIGURATION_COMPLETED:
+                            *key_size = sizeof(bcmolt_gpon_alloc_key);
+                            *key_offset = offsetof(bcmolt_gpon_alloc_configuration_completed, key);
+                            *data_size = sizeof(bcmolt_gpon_alloc_configuration_completed_data);
+                            *data_offset = offsetof(bcmolt_gpon_alloc_configuration_completed, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ALLOC_AUTO_ID_GET_ALLOC_STATS_COMPLETED:
+                            *key_size = sizeof(bcmolt_gpon_alloc_key);
+                            *key_offset = offsetof(bcmolt_gpon_alloc_get_alloc_stats_completed, key);
+                            *data_size = sizeof(bcmolt_gpon_alloc_get_alloc_stats_completed_data);
+                            *data_offset = offsetof(bcmolt_gpon_alloc_get_alloc_stats_completed, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ALLOC_AUTO_ID_STAT_ALARM_RAISED:
+                            *key_size = sizeof(bcmolt_gpon_alloc_key);
+                            *key_offset = offsetof(bcmolt_gpon_alloc_stat_alarm_raised, key);
+                            *data_size = sizeof(bcmolt_gpon_alloc_stat_alarm_raised_data);
+                            *data_offset = offsetof(bcmolt_gpon_alloc_stat_alarm_raised, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ALLOC_AUTO_ID_STAT_ALARM_CLEARED:
+                            *key_size = sizeof(bcmolt_gpon_alloc_key);
+                            *key_offset = offsetof(bcmolt_gpon_alloc_stat_alarm_cleared, key);
+                            *data_size = sizeof(bcmolt_gpon_alloc_stat_alarm_cleared_data);
+                            *data_offset = offsetof(bcmolt_gpon_alloc_stat_alarm_cleared, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_gpon_alloc_key);
+                            *key_offset = offsetof(bcmolt_gpon_alloc_auto_cfg, key);
+                            *data_size = sizeof(bcmolt_gpon_alloc_auto_cfg_data);
+                            *data_offset = offsetof(bcmolt_gpon_alloc_auto_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_GPON_ALLOC_OPER_ID_SET_STATE:
+                            *key_size = sizeof(bcmolt_gpon_alloc_key);
+                            *key_offset = offsetof(bcmolt_gpon_alloc_set_state, key);
+                            *data_size = sizeof(bcmolt_gpon_alloc_set_state_data);
+                            *data_offset = offsetof(bcmolt_gpon_alloc_set_state, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ALLOC_OPER_ID_GET_STATS:
+                            *key_size = sizeof(bcmolt_gpon_alloc_key);
+                            *key_offset = offsetof(bcmolt_gpon_alloc_get_stats, key);
+                            *data_size = sizeof(bcmolt_gpon_alloc_get_stats_data);
+                            *data_offset = offsetof(bcmolt_gpon_alloc_get_stats, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_GPON_GEM_PORT:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_gpon_gem_port_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmolt_gpon_gem_port_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_gpon_gem_port_key);
+                            *key_offset = offsetof(bcmolt_gpon_gem_port_cfg, key);
+                            *data_size = sizeof(bcmolt_gpon_gem_port_cfg_data);
+                            *data_offset = offsetof(bcmolt_gpon_gem_port_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_gpon_gem_port_key);
+                            *key_offset = offsetof(bcmolt_gpon_gem_port_stat, key);
+                            *data_size = sizeof(bcmolt_gpon_gem_port_stat_data);
+                            *data_offset = offsetof(bcmolt_gpon_gem_port_stat, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                        case 1:
+                        case 2:
+                        case 3:
+                            *key_size = sizeof(bcmolt_gpon_gem_port_key);
+                            *key_offset = offsetof(bcmolt_gpon_gem_port_stat_cfg, key);
+                            *data_size = sizeof(bcmolt_gpon_gem_port_stat_cfg_data);
+                            *data_offset = offsetof(bcmolt_gpon_gem_port_stat_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_GPON_GEM_PORT_AUTO_ID_CONFIGURATION_COMPLETED:
+                            *key_size = sizeof(bcmolt_gpon_gem_port_key);
+                            *key_offset = offsetof(bcmolt_gpon_gem_port_configuration_completed, key);
+                            *data_size = sizeof(bcmolt_gpon_gem_port_configuration_completed_data);
+                            *data_offset = offsetof(bcmolt_gpon_gem_port_configuration_completed, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_GEM_PORT_AUTO_ID_STAT_ALARM_RAISED:
+                            *key_size = sizeof(bcmolt_gpon_gem_port_key);
+                            *key_offset = offsetof(bcmolt_gpon_gem_port_stat_alarm_raised, key);
+                            *data_size = sizeof(bcmolt_gpon_gem_port_stat_alarm_raised_data);
+                            *data_offset = offsetof(bcmolt_gpon_gem_port_stat_alarm_raised, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_GEM_PORT_AUTO_ID_STAT_ALARM_CLEARED:
+                            *key_size = sizeof(bcmolt_gpon_gem_port_key);
+                            *key_offset = offsetof(bcmolt_gpon_gem_port_stat_alarm_cleared, key);
+                            *data_size = sizeof(bcmolt_gpon_gem_port_stat_alarm_cleared_data);
+                            *data_offset = offsetof(bcmolt_gpon_gem_port_stat_alarm_cleared, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_gpon_gem_port_key);
+                            *key_offset = offsetof(bcmolt_gpon_gem_port_auto_cfg, key);
+                            *data_size = sizeof(bcmolt_gpon_gem_port_auto_cfg_data);
+                            *data_offset = offsetof(bcmolt_gpon_gem_port_auto_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_GPON_GEM_PORT_OPER_ID_SET_STATE:
+                            *key_size = sizeof(bcmolt_gpon_gem_port_key);
+                            *key_offset = offsetof(bcmolt_gpon_gem_port_set_state, key);
+                            *data_size = sizeof(bcmolt_gpon_gem_port_set_state_data);
+                            *data_offset = offsetof(bcmolt_gpon_gem_port_set_state, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_GPON_IWF:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_gpon_iwf_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmolt_gpon_iwf_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_gpon_iwf_key);
+                            *key_offset = offsetof(bcmolt_gpon_iwf_cfg, key);
+                            *data_size = sizeof(bcmolt_gpon_iwf_cfg_data);
+                            *data_offset = offsetof(bcmolt_gpon_iwf_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_gpon_iwf_key);
+                            *key_offset = offsetof(bcmolt_gpon_iwf_stat, key);
+                            *data_size = sizeof(bcmolt_gpon_iwf_stat_data);
+                            *data_offset = offsetof(bcmolt_gpon_iwf_stat, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                        case 1:
+                        case 2:
+                        case 3:
+                        case 4:
+                        case 5:
+                        case 6:
+                        case 7:
+                            *key_size = sizeof(bcmolt_gpon_iwf_key);
+                            *key_offset = offsetof(bcmolt_gpon_iwf_stat_cfg, key);
+                            *data_size = sizeof(bcmolt_gpon_iwf_stat_cfg_data);
+                            *data_offset = offsetof(bcmolt_gpon_iwf_stat_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_GPON_IWF_AUTO_ID_FLUSH_MAC_TABLE_COMPLETED:
+                            *key_size = sizeof(bcmolt_gpon_iwf_key);
+                            *key_offset = offsetof(bcmolt_gpon_iwf_flush_mac_table_completed, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_IWF_AUTO_ID_SCAN_MAC_TABLE_COMPLETED:
+                            *key_size = sizeof(bcmolt_gpon_iwf_key);
+                            *key_offset = offsetof(bcmolt_gpon_iwf_scan_mac_table_completed, key);
+                            *data_size = sizeof(bcmolt_gpon_iwf_scan_mac_table_completed_data);
+                            *data_offset = offsetof(bcmolt_gpon_iwf_scan_mac_table_completed, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_IWF_AUTO_ID_STAT_ALARM_RAISED:
+                            *key_size = sizeof(bcmolt_gpon_iwf_key);
+                            *key_offset = offsetof(bcmolt_gpon_iwf_stat_alarm_raised, key);
+                            *data_size = sizeof(bcmolt_gpon_iwf_stat_alarm_raised_data);
+                            *data_offset = offsetof(bcmolt_gpon_iwf_stat_alarm_raised, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_IWF_AUTO_ID_STAT_ALARM_CLEARED:
+                            *key_size = sizeof(bcmolt_gpon_iwf_key);
+                            *key_offset = offsetof(bcmolt_gpon_iwf_stat_alarm_cleared, key);
+                            *data_size = sizeof(bcmolt_gpon_iwf_stat_alarm_cleared_data);
+                            *data_offset = offsetof(bcmolt_gpon_iwf_stat_alarm_cleared, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_gpon_iwf_key);
+                            *key_offset = offsetof(bcmolt_gpon_iwf_auto_cfg, key);
+                            *data_size = sizeof(bcmolt_gpon_iwf_auto_cfg_data);
+                            *data_offset = offsetof(bcmolt_gpon_iwf_auto_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_GPON_IWF_OPER_ID_FLUSH_MAC_TABLE:
+                            *key_size = sizeof(bcmolt_gpon_iwf_key);
+                            *key_offset = offsetof(bcmolt_gpon_iwf_flush_mac_table, key);
+                            *data_size = sizeof(bcmolt_gpon_iwf_flush_mac_table_data);
+                            *data_offset = offsetof(bcmolt_gpon_iwf_flush_mac_table, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_IWF_OPER_ID_SCAN_MAC_TABLE:
+                            *key_size = sizeof(bcmolt_gpon_iwf_key);
+                            *key_offset = offsetof(bcmolt_gpon_iwf_scan_mac_table, key);
+                            *data_size = sizeof(bcmolt_gpon_iwf_scan_mac_table_data);
+                            *data_offset = offsetof(bcmolt_gpon_iwf_scan_mac_table, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_GPON_IWF_DS_EGRESS_FLOW:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_gpon_iwf_ds_egress_flow_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmolt_gpon_iwf_ds_egress_flow_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_gpon_iwf_ds_egress_flow_key);
+                            *key_offset = offsetof(bcmolt_gpon_iwf_ds_egress_flow_cfg, key);
+                            *data_size = sizeof(bcmolt_gpon_iwf_ds_egress_flow_cfg_data);
+                            *data_offset = offsetof(bcmolt_gpon_iwf_ds_egress_flow_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_GPON_IWF_DS_INGRESS_FLOW:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_gpon_iwf_ds_ingress_flow_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmolt_gpon_iwf_ds_ingress_flow_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_gpon_iwf_ds_ingress_flow_key);
+                            *key_offset = offsetof(bcmolt_gpon_iwf_ds_ingress_flow_cfg, key);
+                            *data_size = sizeof(bcmolt_gpon_iwf_ds_ingress_flow_cfg_data);
+                            *data_offset = offsetof(bcmolt_gpon_iwf_ds_ingress_flow_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_GPON_IWF_MAC_TABLE:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_gpon_iwf_mac_table_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmolt_gpon_iwf_mac_table_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_gpon_iwf_mac_table_key);
+                            *key_offset = offsetof(bcmolt_gpon_iwf_mac_table_cfg, key);
+                            *data_size = sizeof(bcmolt_gpon_iwf_mac_table_cfg_data);
+                            *data_offset = offsetof(bcmolt_gpon_iwf_mac_table_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_GPON_IWF_MAC_TABLE_AUTO_ID_NEW_MAC:
+                            *key_size = sizeof(bcmolt_gpon_iwf_mac_table_key);
+                            *key_offset = offsetof(bcmolt_gpon_iwf_mac_table_new_mac, key);
+                            *data_size = sizeof(bcmolt_gpon_iwf_mac_table_new_mac_data);
+                            *data_offset = offsetof(bcmolt_gpon_iwf_mac_table_new_mac, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_IWF_MAC_TABLE_AUTO_ID_MAC_AGED:
+                            *key_size = sizeof(bcmolt_gpon_iwf_mac_table_key);
+                            *key_offset = offsetof(bcmolt_gpon_iwf_mac_table_mac_aged, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_IWF_MAC_TABLE_AUTO_ID_MAC_MOVE:
+                            *key_size = sizeof(bcmolt_gpon_iwf_mac_table_key);
+                            *key_offset = offsetof(bcmolt_gpon_iwf_mac_table_mac_move, key);
+                            *data_size = sizeof(bcmolt_gpon_iwf_mac_table_mac_move_data);
+                            *data_offset = offsetof(bcmolt_gpon_iwf_mac_table_mac_move, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_IWF_MAC_TABLE_AUTO_ID_MAC_DROPPED:
+                            *key_size = sizeof(bcmolt_gpon_iwf_mac_table_key);
+                            *key_offset = offsetof(bcmolt_gpon_iwf_mac_table_mac_dropped, key);
+                            *data_size = sizeof(bcmolt_gpon_iwf_mac_table_mac_dropped_data);
+                            *data_offset = offsetof(bcmolt_gpon_iwf_mac_table_mac_dropped, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_gpon_iwf_mac_table_key);
+                            *key_offset = offsetof(bcmolt_gpon_iwf_mac_table_auto_cfg, key);
+                            *data_size = sizeof(bcmolt_gpon_iwf_mac_table_auto_cfg_data);
+                            *data_offset = offsetof(bcmolt_gpon_iwf_mac_table_auto_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_GPON_IWF_US_FLOW:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_gpon_iwf_us_flow_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmolt_gpon_iwf_us_flow_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_gpon_iwf_us_flow_key);
+                            *key_offset = offsetof(bcmolt_gpon_iwf_us_flow_cfg, key);
+                            *data_size = sizeof(bcmolt_gpon_iwf_us_flow_cfg_data);
+                            *data_offset = offsetof(bcmolt_gpon_iwf_us_flow_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_GPON_NI:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_gpon_ni_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmolt_gpon_ni_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_gpon_ni_key);
+                            *key_offset = offsetof(bcmolt_gpon_ni_cfg, key);
+                            *data_size = sizeof(bcmolt_gpon_ni_cfg_data);
+                            *data_offset = offsetof(bcmolt_gpon_ni_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_gpon_ni_key);
+                            *key_offset = offsetof(bcmolt_gpon_ni_stat, key);
+                            *data_size = sizeof(bcmolt_gpon_ni_stat_data);
+                            *data_offset = offsetof(bcmolt_gpon_ni_stat, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                        case 1:
+                        case 2:
+                        case 3:
+                        case 4:
+                        case 5:
+                        case 6:
+                        case 7:
+                        case 8:
+                        case 9:
+                        case 10:
+                        case 11:
+                        case 12:
+                        case 13:
+                        case 14:
+                        case 15:
+                        case 16:
+                        case 17:
+                        case 18:
+                        case 19:
+                        case 20:
+                        case 21:
+                        case 22:
+                        case 23:
+                        case 24:
+                        case 25:
+                        case 26:
+                        case 27:
+                        case 28:
+                        case 29:
+                        case 30:
+                        case 31:
+                        case 32:
+                        case 33:
+                            *key_size = sizeof(bcmolt_gpon_ni_key);
+                            *key_offset = offsetof(bcmolt_gpon_ni_stat_cfg, key);
+                            *data_size = sizeof(bcmolt_gpon_ni_stat_cfg_data);
+                            *data_offset = offsetof(bcmolt_gpon_ni_stat_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_GPON_NI_AUTO_ID_STATE_CHANGE_COMPLETED:
+                            *key_size = sizeof(bcmolt_gpon_ni_key);
+                            *key_offset = offsetof(bcmolt_gpon_ni_state_change_completed, key);
+                            *data_size = sizeof(bcmolt_gpon_ni_state_change_completed_data);
+                            *data_offset = offsetof(bcmolt_gpon_ni_state_change_completed, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_AUTO_ID_LOS:
+                            *key_size = sizeof(bcmolt_gpon_ni_key);
+                            *key_offset = offsetof(bcmolt_gpon_ni_los, key);
+                            *data_size = sizeof(bcmolt_gpon_ni_los_data);
+                            *data_offset = offsetof(bcmolt_gpon_ni_los, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_AUTO_ID_SERIAL_NUMBER_ACQUISITION_CYCLE_START:
+                            *key_size = sizeof(bcmolt_gpon_ni_key);
+                            *key_offset = offsetof(bcmolt_gpon_ni_serial_number_acquisition_cycle_start, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_AUTO_ID_PROTECTION_SWITCHING_TRAFFIC_RESUME:
+                            *key_size = sizeof(bcmolt_gpon_ni_key);
+                            *key_offset = offsetof(bcmolt_gpon_ni_protection_switching_traffic_resume, key);
+                            *data_size = sizeof(bcmolt_gpon_ni_protection_switching_traffic_resume_data);
+                            *data_offset = offsetof(bcmolt_gpon_ni_protection_switching_traffic_resume, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_AUTO_ID_PROTECTION_SWITCHING_ONUS_RANGED:
+                            *key_size = sizeof(bcmolt_gpon_ni_key);
+                            *key_offset = offsetof(bcmolt_gpon_ni_protection_switching_onus_ranged, key);
+                            *data_size = sizeof(bcmolt_gpon_ni_protection_switching_onus_ranged_data);
+                            *data_offset = offsetof(bcmolt_gpon_ni_protection_switching_onus_ranged, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_AUTO_ID_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED:
+                            *key_size = sizeof(bcmolt_gpon_ni_key);
+                            *key_offset = offsetof(bcmolt_gpon_ni_protection_switching_switchover_completed, key);
+                            *data_size = sizeof(bcmolt_gpon_ni_protection_switching_switchover_completed_data);
+                            *data_offset = offsetof(bcmolt_gpon_ni_protection_switching_switchover_completed, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_AUTO_ID_STANDBY_PON_MONITORING_CYCLE_COMPLETED:
+                            *key_size = sizeof(bcmolt_gpon_ni_key);
+                            *key_offset = offsetof(bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed, key);
+                            *data_size = sizeof(bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_data);
+                            *data_offset = offsetof(bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_AUTO_ID_ONU_DISCOVERED:
+                            *key_size = sizeof(bcmolt_gpon_ni_key);
+                            *key_offset = offsetof(bcmolt_gpon_ni_onu_discovered, key);
+                            *data_size = sizeof(bcmolt_gpon_ni_onu_discovered_data);
+                            *data_offset = offsetof(bcmolt_gpon_ni_onu_discovered, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_AUTO_ID_CPU_PACKETS_FAILURE:
+                            *key_size = sizeof(bcmolt_gpon_ni_key);
+                            *key_offset = offsetof(bcmolt_gpon_ni_cpu_packets_failure, key);
+                            *data_size = sizeof(bcmolt_gpon_ni_cpu_packets_failure_data);
+                            *data_offset = offsetof(bcmolt_gpon_ni_cpu_packets_failure, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_AUTO_ID_ROGUE_DETECTION_COMPLETED:
+                            *key_size = sizeof(bcmolt_gpon_ni_key);
+                            *key_offset = offsetof(bcmolt_gpon_ni_rogue_detection_completed, key);
+                            *data_size = sizeof(bcmolt_gpon_ni_rogue_detection_completed_data);
+                            *data_offset = offsetof(bcmolt_gpon_ni_rogue_detection_completed, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_AUTO_ID_DEACTIVATE_ALL_ONUS_COMPLETED:
+                            *key_size = sizeof(bcmolt_gpon_ni_key);
+                            *key_offset = offsetof(bcmolt_gpon_ni_deactivate_all_onus_completed, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_AUTO_ID_DISABLE_ALL_ONUS_COMPLETED:
+                            *key_size = sizeof(bcmolt_gpon_ni_key);
+                            *key_offset = offsetof(bcmolt_gpon_ni_disable_all_onus_completed, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_AUTO_ID_ACTIVATE_ALL_ONUS_COMPLETED:
+                            *key_size = sizeof(bcmolt_gpon_ni_key);
+                            *key_offset = offsetof(bcmolt_gpon_ni_activate_all_onus_completed, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_AUTO_ID_ENABLE_ALL_ONUS_COMPLETED:
+                            *key_size = sizeof(bcmolt_gpon_ni_key);
+                            *key_offset = offsetof(bcmolt_gpon_ni_enable_all_onus_completed, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_AUTO_ID_TOD_REQUEST_COMPLETED:
+                            *key_size = sizeof(bcmolt_gpon_ni_key);
+                            *key_offset = offsetof(bcmolt_gpon_ni_tod_request_completed, key);
+                            *data_size = sizeof(bcmolt_gpon_ni_tod_request_completed_data);
+                            *data_offset = offsetof(bcmolt_gpon_ni_tod_request_completed, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_AUTO_ID_ONU_UPGRADE_COMPLETE:
+                            *key_size = sizeof(bcmolt_gpon_ni_key);
+                            *key_offset = offsetof(bcmolt_gpon_ni_onu_upgrade_complete, key);
+                            *data_size = sizeof(bcmolt_gpon_ni_onu_upgrade_complete_data);
+                            *data_offset = offsetof(bcmolt_gpon_ni_onu_upgrade_complete, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_AUTO_ID_ROGUE_ONU_SPECIAL_MAP_CYCLE_START:
+                            *key_size = sizeof(bcmolt_gpon_ni_key);
+                            *key_offset = offsetof(bcmolt_gpon_ni_rogue_onu_special_map_cycle_start, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_AUTO_ID_STAT_ALARM_RAISED:
+                            *key_size = sizeof(bcmolt_gpon_ni_key);
+                            *key_offset = offsetof(bcmolt_gpon_ni_stat_alarm_raised, key);
+                            *data_size = sizeof(bcmolt_gpon_ni_stat_alarm_raised_data);
+                            *data_offset = offsetof(bcmolt_gpon_ni_stat_alarm_raised, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_AUTO_ID_STAT_ALARM_CLEARED:
+                            *key_size = sizeof(bcmolt_gpon_ni_key);
+                            *key_offset = offsetof(bcmolt_gpon_ni_stat_alarm_cleared, key);
+                            *data_size = sizeof(bcmolt_gpon_ni_stat_alarm_cleared_data);
+                            *data_offset = offsetof(bcmolt_gpon_ni_stat_alarm_cleared, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_gpon_ni_key);
+                            *key_offset = offsetof(bcmolt_gpon_ni_auto_cfg, key);
+                            *data_size = sizeof(bcmolt_gpon_ni_auto_cfg_data);
+                            *data_offset = offsetof(bcmolt_gpon_ni_auto_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_GPON_NI_OPER_ID_SET_PON_STATE:
+                            *key_size = sizeof(bcmolt_gpon_ni_key);
+                            *key_offset = offsetof(bcmolt_gpon_ni_set_pon_state, key);
+                            *data_size = sizeof(bcmolt_gpon_ni_set_pon_state_data);
+                            *data_offset = offsetof(bcmolt_gpon_ni_set_pon_state, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_OPER_ID_RESET:
+                            *key_size = sizeof(bcmolt_gpon_ni_key);
+                            *key_offset = offsetof(bcmolt_gpon_ni_reset, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_OPER_ID_DISABLE_SERIAL_NUMBER:
+                            *key_size = sizeof(bcmolt_gpon_ni_key);
+                            *key_offset = offsetof(bcmolt_gpon_ni_disable_serial_number, key);
+                            *data_size = sizeof(bcmolt_gpon_ni_disable_serial_number_data);
+                            *data_offset = offsetof(bcmolt_gpon_ni_disable_serial_number, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_OPER_ID_SINGLE_REQUEST_STANDBY_PON_MONITORING:
+                            *key_size = sizeof(bcmolt_gpon_ni_key);
+                            *key_offset = offsetof(bcmolt_gpon_ni_single_request_standby_pon_monitoring, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_OPER_ID_SET_ONU_STATE:
+                            *key_size = sizeof(bcmolt_gpon_ni_key);
+                            *key_offset = offsetof(bcmolt_gpon_ni_set_onu_state, key);
+                            *data_size = sizeof(bcmolt_gpon_ni_set_onu_state_data);
+                            *data_offset = offsetof(bcmolt_gpon_ni_set_onu_state, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_OPER_ID_ROGUE_DETECTION_WINDOW:
+                            *key_size = sizeof(bcmolt_gpon_ni_key);
+                            *key_offset = offsetof(bcmolt_gpon_ni_rogue_detection_window, key);
+                            *data_size = sizeof(bcmolt_gpon_ni_rogue_detection_window_data);
+                            *data_offset = offsetof(bcmolt_gpon_ni_rogue_detection_window, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_OPER_ID_TOD_REQUEST:
+                            *key_size = sizeof(bcmolt_gpon_ni_key);
+                            *key_offset = offsetof(bcmolt_gpon_ni_tod_request, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_OPER_ID_PROTECTION_SWITCHING_TYPE_C_SET_MULTIPLE_ONU_STATE:
+                            *key_size = sizeof(bcmolt_gpon_ni_key);
+                            *key_offset = offsetof(bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state, key);
+                            *data_size = sizeof(bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_data);
+                            *data_offset = offsetof(bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_OPER_ID_START_ONU_UPGRADE:
+                            *key_size = sizeof(bcmolt_gpon_ni_key);
+                            *key_offset = offsetof(bcmolt_gpon_ni_start_onu_upgrade, key);
+                            *data_size = sizeof(bcmolt_gpon_ni_start_onu_upgrade_data);
+                            *data_offset = offsetof(bcmolt_gpon_ni_start_onu_upgrade, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_PROXY:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_GPON_NI_PROXY_ID_CPU_PACKETS:
+                            *key_size = sizeof(bcmolt_gpon_ni_key);
+                            *key_offset = offsetof(bcmolt_gpon_ni_cpu_packets, key);
+                            *data_size = sizeof(bcmolt_gpon_ni_cpu_packets_data);
+                            *data_offset = offsetof(bcmolt_gpon_ni_cpu_packets, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_PROXY_ID_BROADCAST_PLOAM_PACKET:
+                            *key_size = sizeof(bcmolt_gpon_ni_key);
+                            *key_offset = offsetof(bcmolt_gpon_ni_broadcast_ploam_packet, key);
+                            *data_size = sizeof(bcmolt_gpon_ni_broadcast_ploam_packet_data);
+                            *data_offset = offsetof(bcmolt_gpon_ni_broadcast_ploam_packet, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_GPON_ONU:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmolt_gpon_onu_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_cfg, key);
+                            *data_size = sizeof(bcmolt_gpon_onu_cfg_data);
+                            *data_offset = offsetof(bcmolt_gpon_onu_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_stat, key);
+                            *data_size = sizeof(bcmolt_gpon_onu_stat_data);
+                            *data_offset = offsetof(bcmolt_gpon_onu_stat, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                        case 1:
+                        case 2:
+                        case 3:
+                        case 4:
+                        case 5:
+                        case 6:
+                        case 7:
+                        case 8:
+                        case 9:
+                        case 10:
+                        case 11:
+                        case 12:
+                        case 13:
+                        case 14:
+                        case 15:
+                        case 16:
+                        case 17:
+                        case 18:
+                        case 19:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_stat_cfg, key);
+                            *data_size = sizeof(bcmolt_gpon_onu_stat_cfg_data);
+                            *data_offset = offsetof(bcmolt_gpon_onu_stat_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_GPON_ONU_AUTO_ID_ONU_ALARM:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_onu_alarm, key);
+                            *data_size = sizeof(bcmolt_gpon_onu_onu_alarm_data);
+                            *data_offset = offsetof(bcmolt_gpon_onu_onu_alarm, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_DOWI:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_dowi, key);
+                            *data_size = sizeof(bcmolt_gpon_onu_dowi_data);
+                            *data_offset = offsetof(bcmolt_gpon_onu_dowi, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_SFI:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_sfi, key);
+                            *data_size = sizeof(bcmolt_gpon_onu_sfi_data);
+                            *data_offset = offsetof(bcmolt_gpon_onu_sfi, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_SDI:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_sdi, key);
+                            *data_size = sizeof(bcmolt_gpon_onu_sdi_data);
+                            *data_offset = offsetof(bcmolt_gpon_onu_sdi, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_DFI:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_dfi, key);
+                            *data_size = sizeof(bcmolt_gpon_onu_dfi_data);
+                            *data_offset = offsetof(bcmolt_gpon_onu_dfi, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_SUFI:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_sufi, key);
+                            *data_size = sizeof(bcmolt_gpon_onu_sufi_data);
+                            *data_offset = offsetof(bcmolt_gpon_onu_sufi, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_LOAI:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_loai, key);
+                            *data_size = sizeof(bcmolt_gpon_onu_loai_data);
+                            *data_offset = offsetof(bcmolt_gpon_onu_loai, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_DGI:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_dgi, key);
+                            *data_size = sizeof(bcmolt_gpon_onu_dgi_data);
+                            *data_offset = offsetof(bcmolt_gpon_onu_dgi, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_PEE:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_pee, key);
+                            *data_size = sizeof(bcmolt_gpon_onu_pee_data);
+                            *data_offset = offsetof(bcmolt_gpon_onu_pee, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_PST:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_pst, key);
+                            *data_size = sizeof(bcmolt_gpon_onu_pst_data);
+                            *data_offset = offsetof(bcmolt_gpon_onu_pst, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_TIWI:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_tiwi, key);
+                            *data_size = sizeof(bcmolt_gpon_onu_tiwi_data);
+                            *data_offset = offsetof(bcmolt_gpon_onu_tiwi, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_LOKI:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_loki, key);
+                            *data_size = sizeof(bcmolt_gpon_onu_loki_data);
+                            *data_offset = offsetof(bcmolt_gpon_onu_loki, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_MEMI:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_memi, key);
+                            *data_size = sizeof(bcmolt_gpon_onu_memi_data);
+                            *data_offset = offsetof(bcmolt_gpon_onu_memi, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_OMCI_PORT_ID_CONFIGURATION_COMPLETED:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_omci_port_id_configuration_completed, key);
+                            *data_size = sizeof(bcmolt_gpon_onu_omci_port_id_configuration_completed_data);
+                            *data_offset = offsetof(bcmolt_gpon_onu_omci_port_id_configuration_completed, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_BER_INTERVAL_CONFIGURATION_COMPLETED:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_ber_interval_configuration_completed, key);
+                            *data_size = sizeof(bcmolt_gpon_onu_ber_interval_configuration_completed_data);
+                            *data_offset = offsetof(bcmolt_gpon_onu_ber_interval_configuration_completed, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_ERR:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_err, key);
+                            *data_size = sizeof(bcmolt_gpon_onu_err_data);
+                            *data_offset = offsetof(bcmolt_gpon_onu_err, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_REI:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_rei, key);
+                            *data_size = sizeof(bcmolt_gpon_onu_rei_data);
+                            *data_offset = offsetof(bcmolt_gpon_onu_rei, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_RANGING_COMPLETED:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_ranging_completed, key);
+                            *data_size = sizeof(bcmolt_gpon_onu_ranging_completed_data);
+                            *data_offset = offsetof(bcmolt_gpon_onu_ranging_completed, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_PASSWORD_AUTHENTICATION_COMPLETED:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_password_authentication_completed, key);
+                            *data_size = sizeof(bcmolt_gpon_onu_password_authentication_completed_data);
+                            *data_offset = offsetof(bcmolt_gpon_onu_password_authentication_completed, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_ONU_ACTIVATION_COMPLETED:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_onu_activation_completed, key);
+                            *data_size = sizeof(bcmolt_gpon_onu_onu_activation_completed_data);
+                            *data_offset = offsetof(bcmolt_gpon_onu_onu_activation_completed, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_ONU_DEACTIVATION_COMPLETED:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_onu_deactivation_completed, key);
+                            *data_size = sizeof(bcmolt_gpon_onu_onu_deactivation_completed_data);
+                            *data_offset = offsetof(bcmolt_gpon_onu_onu_deactivation_completed, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_ONU_ENABLE_COMPLETED:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_onu_enable_completed, key);
+                            *data_size = sizeof(bcmolt_gpon_onu_onu_enable_completed_data);
+                            *data_offset = offsetof(bcmolt_gpon_onu_onu_enable_completed, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_ONU_DISABLE_COMPLETED:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_onu_disable_completed, key);
+                            *data_size = sizeof(bcmolt_gpon_onu_onu_disable_completed_data);
+                            *data_offset = offsetof(bcmolt_gpon_onu_onu_disable_completed, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_INVALID_DBRU_REPORT:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_invalid_dbru_report, key);
+                            *data_size = sizeof(bcmolt_gpon_onu_invalid_dbru_report_data);
+                            *data_offset = offsetof(bcmolt_gpon_onu_invalid_dbru_report, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_KEY_EXCHANGE_COMPLETED:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_key_exchange_completed, key);
+                            *data_size = sizeof(bcmolt_gpon_onu_key_exchange_completed_data);
+                            *data_offset = offsetof(bcmolt_gpon_onu_key_exchange_completed, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_KEY_EXCHANGE_KEY_REQUEST_TIMEOUT:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_key_exchange_key_request_timeout, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_KEY_EXCHANGE_CYCLE_SKIPPED:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_key_exchange_cycle_skipped, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_KEY_EXCHANGE_KEY_MISMATCH:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_key_exchange_key_mismatch, key);
+                            *data_size = sizeof(bcmolt_gpon_onu_key_exchange_key_mismatch_data);
+                            *data_offset = offsetof(bcmolt_gpon_onu_key_exchange_key_mismatch, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_KEY_EXCHANGE_UNCONSECUTIVE_INDEX:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_key_exchange_unconsecutive_index, key);
+                            *data_size = sizeof(bcmolt_gpon_onu_key_exchange_unconsecutive_index_data);
+                            *data_offset = offsetof(bcmolt_gpon_onu_key_exchange_unconsecutive_index, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_RSSI_MEASUREMENT_COMPLETED:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_rssi_measurement_completed, key);
+                            *data_size = sizeof(bcmolt_gpon_onu_rssi_measurement_completed_data);
+                            *data_offset = offsetof(bcmolt_gpon_onu_rssi_measurement_completed, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_KEY_EXCHANGE_DECRYPT_REQUIRED:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_key_exchange_decrypt_required, key);
+                            *data_size = sizeof(bcmolt_gpon_onu_key_exchange_decrypt_required_data);
+                            *data_offset = offsetof(bcmolt_gpon_onu_key_exchange_decrypt_required, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_OPTICAL_REFLECTION:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_optical_reflection, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_ONU_ACTIVATION_STANDBY_COMPLETED:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_onu_activation_standby_completed, key);
+                            *data_size = sizeof(bcmolt_gpon_onu_onu_activation_standby_completed_data);
+                            *data_offset = offsetof(bcmolt_gpon_onu_onu_activation_standby_completed, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_POWER_MANAGEMENT_STATE_CHANGE:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_power_management_state_change, key);
+                            *data_size = sizeof(bcmolt_gpon_onu_power_management_state_change_data);
+                            *data_offset = offsetof(bcmolt_gpon_onu_power_management_state_change, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_POSSIBLE_DRIFT:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_possible_drift, key);
+                            *data_size = sizeof(bcmolt_gpon_onu_possible_drift_data);
+                            *data_offset = offsetof(bcmolt_gpon_onu_possible_drift, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_STAT_ALARM_RAISED:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_stat_alarm_raised, key);
+                            *data_size = sizeof(bcmolt_gpon_onu_stat_alarm_raised_data);
+                            *data_offset = offsetof(bcmolt_gpon_onu_stat_alarm_raised, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_STAT_ALARM_CLEARED:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_stat_alarm_cleared, key);
+                            *data_size = sizeof(bcmolt_gpon_onu_stat_alarm_cleared_data);
+                            *data_offset = offsetof(bcmolt_gpon_onu_stat_alarm_cleared, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_auto_cfg, key);
+                            *data_size = sizeof(bcmolt_gpon_onu_auto_cfg_data);
+                            *data_offset = offsetof(bcmolt_gpon_onu_auto_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_GPON_ONU_OPER_ID_SET_ONU_STATE:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_set_onu_state, key);
+                            *data_size = sizeof(bcmolt_gpon_onu_set_onu_state_data);
+                            *data_offset = offsetof(bcmolt_gpon_onu_set_onu_state, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_OPER_ID_RSSI_MEASUREMENT:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_rssi_measurement, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_OPER_ID_CHANGE_POWER_LEVEL:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_change_power_level, key);
+                            *data_size = sizeof(bcmolt_gpon_onu_change_power_level_data);
+                            *data_offset = offsetof(bcmolt_gpon_onu_change_power_level, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_PROXY:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_GPON_ONU_PROXY_ID_CPU_PACKETS:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_cpu_packets, key);
+                            *data_size = sizeof(bcmolt_gpon_onu_cpu_packets_data);
+                            *data_offset = offsetof(bcmolt_gpon_onu_cpu_packets, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_PROXY_ID_PLOAM_PACKET:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_ploam_packet, key);
+                            *data_size = sizeof(bcmolt_gpon_onu_ploam_packet_data);
+                            *data_offset = offsetof(bcmolt_gpon_onu_ploam_packet, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_PROXY_RX:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_GPON_ONU_PROXY_RX_ID_CPU_PACKET:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_cpu_packet, key);
+                            *data_size = sizeof(bcmolt_gpon_onu_cpu_packet_data);
+                            *data_offset = offsetof(bcmolt_gpon_onu_cpu_packet, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_PROXY_RX_ID_OMCI_PACKET:
+                            *key_size = sizeof(bcmolt_gpon_onu_key);
+                            *key_offset = offsetof(bcmolt_gpon_onu_omci_packet, key);
+                            *data_size = sizeof(bcmolt_gpon_onu_omci_packet_data);
+                            *data_offset = offsetof(bcmolt_gpon_onu_omci_packet, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_GPON_TRX:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_gpon_trx_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmolt_gpon_trx_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_gpon_trx_key);
+                            *key_offset = offsetof(bcmolt_gpon_trx_cfg, key);
+                            *data_size = sizeof(bcmolt_gpon_trx_cfg_data);
+                            *data_offset = offsetof(bcmolt_gpon_trx_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_LOG_ENTRY:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_log_entry_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmolt_log_entry_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_log_entry_key);
+                            *key_offset = offsetof(bcmolt_log_entry_cfg, key);
+                            *data_size = sizeof(bcmolt_log_entry_cfg_data);
+                            *data_offset = offsetof(bcmolt_log_entry_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_log_entry_key);
+                            *key_offset = offsetof(bcmolt_log_entry_stat, key);
+                            *data_size = sizeof(bcmolt_log_entry_stat_data);
+                            *data_offset = offsetof(bcmolt_log_entry_stat, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                        case 1:
+                            *key_size = sizeof(bcmolt_log_entry_key);
+                            *key_offset = offsetof(bcmolt_log_entry_stat_cfg, key);
+                            *data_size = sizeof(bcmolt_log_entry_stat_cfg_data);
+                            *data_offset = offsetof(bcmolt_log_entry_stat_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_LOG_ENTRY_AUTO_ID_STAT_ALARM_RAISED:
+                            *key_size = sizeof(bcmolt_log_entry_key);
+                            *key_offset = offsetof(bcmolt_log_entry_stat_alarm_raised, key);
+                            *data_size = sizeof(bcmolt_log_entry_stat_alarm_raised_data);
+                            *data_offset = offsetof(bcmolt_log_entry_stat_alarm_raised, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_LOG_ENTRY_AUTO_ID_STAT_ALARM_CLEARED:
+                            *key_size = sizeof(bcmolt_log_entry_key);
+                            *key_offset = offsetof(bcmolt_log_entry_stat_alarm_cleared, key);
+                            *data_size = sizeof(bcmolt_log_entry_stat_alarm_cleared_data);
+                            *data_offset = offsetof(bcmolt_log_entry_stat_alarm_cleared, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_log_entry_key);
+                            *key_offset = offsetof(bcmolt_log_entry_auto_cfg, key);
+                            *data_size = sizeof(bcmolt_log_entry_auto_cfg_data);
+                            *data_offset = offsetof(bcmolt_log_entry_auto_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_LOGGER:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_logger_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmolt_logger_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_logger_key);
+                            *key_offset = offsetof(bcmolt_logger_cfg, key);
+                            *data_size = sizeof(bcmolt_logger_cfg_data);
+                            *data_offset = offsetof(bcmolt_logger_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_logger_key);
+                            *key_offset = offsetof(bcmolt_logger_stat, key);
+                            *data_size = sizeof(bcmolt_logger_stat_data);
+                            *data_offset = offsetof(bcmolt_logger_stat, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_logger_key);
+                            *key_offset = offsetof(bcmolt_logger_stat_cfg, key);
+                            *data_size = sizeof(bcmolt_logger_stat_cfg_data);
+                            *data_offset = offsetof(bcmolt_logger_stat_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_LOGGER_AUTO_ID_STAT_ALARM_RAISED:
+                            *key_size = sizeof(bcmolt_logger_key);
+                            *key_offset = offsetof(bcmolt_logger_stat_alarm_raised, key);
+                            *data_size = sizeof(bcmolt_logger_stat_alarm_raised_data);
+                            *data_offset = offsetof(bcmolt_logger_stat_alarm_raised, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_LOGGER_AUTO_ID_STAT_ALARM_CLEARED:
+                            *key_size = sizeof(bcmolt_logger_key);
+                            *key_offset = offsetof(bcmolt_logger_stat_alarm_cleared, key);
+                            *data_size = sizeof(bcmolt_logger_stat_alarm_cleared_data);
+                            *data_offset = offsetof(bcmolt_logger_stat_alarm_cleared, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_logger_key);
+                            *key_offset = offsetof(bcmolt_logger_auto_cfg, key);
+                            *data_size = sizeof(bcmolt_logger_auto_cfg_data);
+                            *data_offset = offsetof(bcmolt_logger_auto_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_LOGGER_OPER_ID_CLEAR_LOG:
+                            *key_size = sizeof(bcmolt_logger_key);
+                            *key_offset = offsetof(bcmolt_logger_clear_log, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_NNI:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_nni_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmolt_nni_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_nni_key);
+                            *key_offset = offsetof(bcmolt_nni_cfg, key);
+                            *data_size = sizeof(bcmolt_nni_cfg_data);
+                            *data_offset = offsetof(bcmolt_nni_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_nni_key);
+                            *key_offset = offsetof(bcmolt_nni_stat, key);
+                            *data_size = sizeof(bcmolt_nni_stat_data);
+                            *data_offset = offsetof(bcmolt_nni_stat, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                        case 1:
+                        case 2:
+                        case 3:
+                        case 4:
+                        case 5:
+                        case 6:
+                        case 7:
+                        case 8:
+                        case 9:
+                        case 10:
+                        case 11:
+                        case 12:
+                        case 13:
+                        case 14:
+                        case 15:
+                        case 16:
+                        case 17:
+                        case 18:
+                        case 19:
+                        case 20:
+                        case 21:
+                        case 22:
+                        case 23:
+                        case 24:
+                        case 25:
+                        case 26:
+                        case 27:
+                        case 28:
+                        case 29:
+                        case 30:
+                        case 31:
+                        case 32:
+                        case 33:
+                        case 34:
+                        case 35:
+                        case 36:
+                        case 37:
+                        case 38:
+                        case 39:
+                        case 40:
+                        case 41:
+                        case 42:
+                        case 43:
+                        case 44:
+                        case 45:
+                        case 46:
+                        case 47:
+                        case 48:
+                        case 49:
+                        case 50:
+                        case 51:
+                        case 52:
+                        case 53:
+                        case 54:
+                        case 55:
+                        case 56:
+                        case 57:
+                        case 58:
+                        case 59:
+                        case 60:
+                        case 61:
+                        case 62:
+                            *key_size = sizeof(bcmolt_nni_key);
+                            *key_offset = offsetof(bcmolt_nni_stat_cfg, key);
+                            *data_size = sizeof(bcmolt_nni_stat_cfg_data);
+                            *data_offset = offsetof(bcmolt_nni_stat_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_NNI_AUTO_ID_STATUS_CHANGED:
+                            *key_size = sizeof(bcmolt_nni_key);
+                            *key_offset = offsetof(bcmolt_nni_status_changed, key);
+                            *data_size = sizeof(bcmolt_nni_status_changed_data);
+                            *data_offset = offsetof(bcmolt_nni_status_changed, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_NNI_AUTO_ID_STAT_ALARM_RAISED:
+                            *key_size = sizeof(bcmolt_nni_key);
+                            *key_offset = offsetof(bcmolt_nni_stat_alarm_raised, key);
+                            *data_size = sizeof(bcmolt_nni_stat_alarm_raised_data);
+                            *data_offset = offsetof(bcmolt_nni_stat_alarm_raised, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_NNI_AUTO_ID_STAT_ALARM_CLEARED:
+                            *key_size = sizeof(bcmolt_nni_key);
+                            *key_offset = offsetof(bcmolt_nni_stat_alarm_cleared, key);
+                            *data_size = sizeof(bcmolt_nni_stat_alarm_cleared_data);
+                            *data_offset = offsetof(bcmolt_nni_stat_alarm_cleared, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_nni_key);
+                            *key_offset = offsetof(bcmolt_nni_auto_cfg, key);
+                            *data_size = sizeof(bcmolt_nni_auto_cfg_data);
+                            *data_offset = offsetof(bcmolt_nni_auto_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_NNI_SERDES:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_nni_serdes_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmolt_nni_serdes_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_nni_serdes_key);
+                            *key_offset = offsetof(bcmolt_nni_serdes_cfg, key);
+                            *data_size = sizeof(bcmolt_nni_serdes_cfg_data);
+                            *data_offset = offsetof(bcmolt_nni_serdes_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_SOFTWARE_ERROR:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_software_error_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmolt_software_error_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_software_error_key);
+                            *key_offset = offsetof(bcmolt_software_error_cfg, key);
+                            *data_size = sizeof(bcmolt_software_error_cfg_data);
+                            *data_offset = offsetof(bcmolt_software_error_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_TRX_CALIBRATION:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_trx_calibration_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmolt_trx_calibration_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_TRX_CALIBRATION_AUTO_ID_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED:
+                            *key_size = sizeof(bcmolt_trx_calibration_key);
+                            *key_offset = offsetof(bcmolt_trx_calibration_capture_window_and_statistic_completed, key);
+                            *data_size = sizeof(bcmolt_trx_calibration_capture_window_and_statistic_completed_data);
+                            *data_offset = offsetof(bcmolt_trx_calibration_capture_window_and_statistic_completed, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_trx_calibration_key);
+                            *key_offset = offsetof(bcmolt_trx_calibration_auto_cfg, key);
+                            *data_size = sizeof(bcmolt_trx_calibration_auto_cfg_data);
+                            *data_offset = offsetof(bcmolt_trx_calibration_auto_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_TRX_CALIBRATION_OPER_ID_START_CAPTURE_WINDOW:
+                            *key_size = sizeof(bcmolt_trx_calibration_key);
+                            *key_offset = offsetof(bcmolt_trx_calibration_start_capture_window, key);
+                            *data_size = sizeof(bcmolt_trx_calibration_start_capture_window_data);
+                            *data_offset = offsetof(bcmolt_trx_calibration_start_capture_window, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_TRX_CALIBRATION_OPER_ID_STOP_CAPTURE_WINDOW:
+                            *key_size = sizeof(bcmolt_trx_calibration_key);
+                            *key_offset = offsetof(bcmolt_trx_calibration_stop_capture_window, key);
+                            *data_size = sizeof(bcmolt_trx_calibration_stop_capture_window_data);
+                            *data_offset = offsetof(bcmolt_trx_calibration_stop_capture_window, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_XGPON_ALLOC:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_xgpon_alloc_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmolt_xgpon_alloc_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_xgpon_alloc_key);
+                            *key_offset = offsetof(bcmolt_xgpon_alloc_cfg, key);
+                            *data_size = sizeof(bcmolt_xgpon_alloc_cfg_data);
+                            *data_offset = offsetof(bcmolt_xgpon_alloc_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_xgpon_alloc_key);
+                            *key_offset = offsetof(bcmolt_xgpon_alloc_stat, key);
+                            *data_size = sizeof(bcmolt_xgpon_alloc_stat_data);
+                            *data_offset = offsetof(bcmolt_xgpon_alloc_stat, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_xgpon_alloc_key);
+                            *key_offset = offsetof(bcmolt_xgpon_alloc_stat_cfg, key);
+                            *data_size = sizeof(bcmolt_xgpon_alloc_stat_cfg_data);
+                            *data_offset = offsetof(bcmolt_xgpon_alloc_stat_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_XGPON_ALLOC_AUTO_ID_CONFIGURATION_COMPLETED:
+                            *key_size = sizeof(bcmolt_xgpon_alloc_key);
+                            *key_offset = offsetof(bcmolt_xgpon_alloc_configuration_completed, key);
+                            *data_size = sizeof(bcmolt_xgpon_alloc_configuration_completed_data);
+                            *data_offset = offsetof(bcmolt_xgpon_alloc_configuration_completed, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ALLOC_AUTO_ID_GET_ALLOC_STATS_COMPLETED:
+                            *key_size = sizeof(bcmolt_xgpon_alloc_key);
+                            *key_offset = offsetof(bcmolt_xgpon_alloc_get_alloc_stats_completed, key);
+                            *data_size = sizeof(bcmolt_xgpon_alloc_get_alloc_stats_completed_data);
+                            *data_offset = offsetof(bcmolt_xgpon_alloc_get_alloc_stats_completed, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ALLOC_AUTO_ID_STAT_ALARM_RAISED:
+                            *key_size = sizeof(bcmolt_xgpon_alloc_key);
+                            *key_offset = offsetof(bcmolt_xgpon_alloc_stat_alarm_raised, key);
+                            *data_size = sizeof(bcmolt_xgpon_alloc_stat_alarm_raised_data);
+                            *data_offset = offsetof(bcmolt_xgpon_alloc_stat_alarm_raised, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ALLOC_AUTO_ID_STAT_ALARM_CLEARED:
+                            *key_size = sizeof(bcmolt_xgpon_alloc_key);
+                            *key_offset = offsetof(bcmolt_xgpon_alloc_stat_alarm_cleared, key);
+                            *data_size = sizeof(bcmolt_xgpon_alloc_stat_alarm_cleared_data);
+                            *data_offset = offsetof(bcmolt_xgpon_alloc_stat_alarm_cleared, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_xgpon_alloc_key);
+                            *key_offset = offsetof(bcmolt_xgpon_alloc_auto_cfg, key);
+                            *data_size = sizeof(bcmolt_xgpon_alloc_auto_cfg_data);
+                            *data_offset = offsetof(bcmolt_xgpon_alloc_auto_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_XGPON_ALLOC_OPER_ID_GET_STATS:
+                            *key_size = sizeof(bcmolt_xgpon_alloc_key);
+                            *key_offset = offsetof(bcmolt_xgpon_alloc_get_stats, key);
+                            *data_size = sizeof(bcmolt_xgpon_alloc_get_stats_data);
+                            *data_offset = offsetof(bcmolt_xgpon_alloc_get_stats, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ALLOC_OPER_ID_SET_STATE:
+                            *key_size = sizeof(bcmolt_xgpon_alloc_key);
+                            *key_offset = offsetof(bcmolt_xgpon_alloc_set_state, key);
+                            *data_size = sizeof(bcmolt_xgpon_alloc_set_state_data);
+                            *data_offset = offsetof(bcmolt_xgpon_alloc_set_state, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_XGPON_GEM_PORT:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_xgpon_gem_port_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmolt_xgpon_gem_port_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_xgpon_gem_port_key);
+                            *key_offset = offsetof(bcmolt_xgpon_gem_port_cfg, key);
+                            *data_size = sizeof(bcmolt_xgpon_gem_port_cfg_data);
+                            *data_offset = offsetof(bcmolt_xgpon_gem_port_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_xgpon_gem_port_key);
+                            *key_offset = offsetof(bcmolt_xgpon_gem_port_stat, key);
+                            *data_size = sizeof(bcmolt_xgpon_gem_port_stat_data);
+                            *data_offset = offsetof(bcmolt_xgpon_gem_port_stat, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                        case 1:
+                        case 2:
+                        case 3:
+                            *key_size = sizeof(bcmolt_xgpon_gem_port_key);
+                            *key_offset = offsetof(bcmolt_xgpon_gem_port_stat_cfg, key);
+                            *data_size = sizeof(bcmolt_xgpon_gem_port_stat_cfg_data);
+                            *data_offset = offsetof(bcmolt_xgpon_gem_port_stat_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_XGPON_GEM_PORT_AUTO_ID_STAT_ALARM_RAISED:
+                            *key_size = sizeof(bcmolt_xgpon_gem_port_key);
+                            *key_offset = offsetof(bcmolt_xgpon_gem_port_stat_alarm_raised, key);
+                            *data_size = sizeof(bcmolt_xgpon_gem_port_stat_alarm_raised_data);
+                            *data_offset = offsetof(bcmolt_xgpon_gem_port_stat_alarm_raised, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_GEM_PORT_AUTO_ID_STAT_ALARM_CLEARED:
+                            *key_size = sizeof(bcmolt_xgpon_gem_port_key);
+                            *key_offset = offsetof(bcmolt_xgpon_gem_port_stat_alarm_cleared, key);
+                            *data_size = sizeof(bcmolt_xgpon_gem_port_stat_alarm_cleared_data);
+                            *data_offset = offsetof(bcmolt_xgpon_gem_port_stat_alarm_cleared, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_xgpon_gem_port_key);
+                            *key_offset = offsetof(bcmolt_xgpon_gem_port_auto_cfg, key);
+                            *data_size = sizeof(bcmolt_xgpon_gem_port_auto_cfg_data);
+                            *data_offset = offsetof(bcmolt_xgpon_gem_port_auto_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_XGPON_IWF:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_xgpon_iwf_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmolt_xgpon_iwf_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_xgpon_iwf_key);
+                            *key_offset = offsetof(bcmolt_xgpon_iwf_cfg, key);
+                            *data_size = sizeof(bcmolt_xgpon_iwf_cfg_data);
+                            *data_offset = offsetof(bcmolt_xgpon_iwf_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_XGPON_NI:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_xgpon_ni_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmolt_xgpon_ni_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_xgpon_ni_key);
+                            *key_offset = offsetof(bcmolt_xgpon_ni_cfg, key);
+                            *data_size = sizeof(bcmolt_xgpon_ni_cfg_data);
+                            *data_offset = offsetof(bcmolt_xgpon_ni_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_xgpon_ni_key);
+                            *key_offset = offsetof(bcmolt_xgpon_ni_stat, key);
+                            *data_size = sizeof(bcmolt_xgpon_ni_stat_data);
+                            *data_offset = offsetof(bcmolt_xgpon_ni_stat, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                        case 1:
+                        case 2:
+                        case 3:
+                        case 4:
+                        case 5:
+                        case 6:
+                        case 7:
+                        case 8:
+                        case 9:
+                        case 10:
+                        case 11:
+                        case 12:
+                        case 13:
+                        case 14:
+                        case 15:
+                        case 16:
+                        case 17:
+                        case 18:
+                        case 19:
+                        case 20:
+                        case 21:
+                        case 22:
+                        case 23:
+                        case 24:
+                        case 25:
+                        case 26:
+                        case 27:
+                        case 28:
+                        case 29:
+                        case 30:
+                        case 31:
+                        case 32:
+                        case 33:
+                        case 34:
+                            *key_size = sizeof(bcmolt_xgpon_ni_key);
+                            *key_offset = offsetof(bcmolt_xgpon_ni_stat_cfg, key);
+                            *data_size = sizeof(bcmolt_xgpon_ni_stat_cfg_data);
+                            *data_offset = offsetof(bcmolt_xgpon_ni_stat_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_XGPON_NI_AUTO_ID_STATE_CHANGE_COMPLETED:
+                            *key_size = sizeof(bcmolt_xgpon_ni_key);
+                            *key_offset = offsetof(bcmolt_xgpon_ni_state_change_completed, key);
+                            *data_size = sizeof(bcmolt_xgpon_ni_state_change_completed_data);
+                            *data_offset = offsetof(bcmolt_xgpon_ni_state_change_completed, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_AUTO_ID_LOS:
+                            *key_size = sizeof(bcmolt_xgpon_ni_key);
+                            *key_offset = offsetof(bcmolt_xgpon_ni_los, key);
+                            *data_size = sizeof(bcmolt_xgpon_ni_los_data);
+                            *data_offset = offsetof(bcmolt_xgpon_ni_los, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_AUTO_ID_SERIAL_NUMBER_ACQUISITION_CYCLE_START:
+                            *key_size = sizeof(bcmolt_xgpon_ni_key);
+                            *key_offset = offsetof(bcmolt_xgpon_ni_serial_number_acquisition_cycle_start, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_AUTO_ID_PROTECTION_SWITCHING_TRAFFIC_RESUME:
+                            *key_size = sizeof(bcmolt_xgpon_ni_key);
+                            *key_offset = offsetof(bcmolt_xgpon_ni_protection_switching_traffic_resume, key);
+                            *data_size = sizeof(bcmolt_xgpon_ni_protection_switching_traffic_resume_data);
+                            *data_offset = offsetof(bcmolt_xgpon_ni_protection_switching_traffic_resume, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_AUTO_ID_PROTECTION_SWITCHING_ONUS_RANGED:
+                            *key_size = sizeof(bcmolt_xgpon_ni_key);
+                            *key_offset = offsetof(bcmolt_xgpon_ni_protection_switching_onus_ranged, key);
+                            *data_size = sizeof(bcmolt_xgpon_ni_protection_switching_onus_ranged_data);
+                            *data_offset = offsetof(bcmolt_xgpon_ni_protection_switching_onus_ranged, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_AUTO_ID_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED:
+                            *key_size = sizeof(bcmolt_xgpon_ni_key);
+                            *key_offset = offsetof(bcmolt_xgpon_ni_protection_switching_switchover_completed, key);
+                            *data_size = sizeof(bcmolt_xgpon_ni_protection_switching_switchover_completed_data);
+                            *data_offset = offsetof(bcmolt_xgpon_ni_protection_switching_switchover_completed, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_AUTO_ID_STANDBY_PON_MONITORING_CYCLE_COMPLETED:
+                            *key_size = sizeof(bcmolt_xgpon_ni_key);
+                            *key_offset = offsetof(bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed, key);
+                            *data_size = sizeof(bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_data);
+                            *data_offset = offsetof(bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_AUTO_ID_ONU_DISCOVERED:
+                            *key_size = sizeof(bcmolt_xgpon_ni_key);
+                            *key_offset = offsetof(bcmolt_xgpon_ni_onu_discovered, key);
+                            *data_size = sizeof(bcmolt_xgpon_ni_onu_discovered_data);
+                            *data_offset = offsetof(bcmolt_xgpon_ni_onu_discovered, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_AUTO_ID_CPU_PACKETS_FAILURE:
+                            *key_size = sizeof(bcmolt_xgpon_ni_key);
+                            *key_offset = offsetof(bcmolt_xgpon_ni_cpu_packets_failure, key);
+                            *data_size = sizeof(bcmolt_xgpon_ni_cpu_packets_failure_data);
+                            *data_offset = offsetof(bcmolt_xgpon_ni_cpu_packets_failure, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_AUTO_ID_ROGUE_DETECTION_COMPLETED:
+                            *key_size = sizeof(bcmolt_xgpon_ni_key);
+                            *key_offset = offsetof(bcmolt_xgpon_ni_rogue_detection_completed, key);
+                            *data_size = sizeof(bcmolt_xgpon_ni_rogue_detection_completed_data);
+                            *data_offset = offsetof(bcmolt_xgpon_ni_rogue_detection_completed, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_AUTO_ID_DEACTIVATE_ALL_ONUS_COMPLETED:
+                            *key_size = sizeof(bcmolt_xgpon_ni_key);
+                            *key_offset = offsetof(bcmolt_xgpon_ni_deactivate_all_onus_completed, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_AUTO_ID_DISABLE_ALL_ONUS_COMPLETED:
+                            *key_size = sizeof(bcmolt_xgpon_ni_key);
+                            *key_offset = offsetof(bcmolt_xgpon_ni_disable_all_onus_completed, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_AUTO_ID_ACTIVATE_ALL_ONUS_COMPLETED:
+                            *key_size = sizeof(bcmolt_xgpon_ni_key);
+                            *key_offset = offsetof(bcmolt_xgpon_ni_activate_all_onus_completed, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_AUTO_ID_ENABLE_ALL_ONUS_COMPLETED:
+                            *key_size = sizeof(bcmolt_xgpon_ni_key);
+                            *key_offset = offsetof(bcmolt_xgpon_ni_enable_all_onus_completed, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_AUTO_ID_TOD_REQUEST_COMPLETED:
+                            *key_size = sizeof(bcmolt_xgpon_ni_key);
+                            *key_offset = offsetof(bcmolt_xgpon_ni_tod_request_completed, key);
+                            *data_size = sizeof(bcmolt_xgpon_ni_tod_request_completed_data);
+                            *data_offset = offsetof(bcmolt_xgpon_ni_tod_request_completed, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_AUTO_ID_ONU_UPGRADE_COMPLETE:
+                            *key_size = sizeof(bcmolt_xgpon_ni_key);
+                            *key_offset = offsetof(bcmolt_xgpon_ni_onu_upgrade_complete, key);
+                            *data_size = sizeof(bcmolt_xgpon_ni_onu_upgrade_complete_data);
+                            *data_offset = offsetof(bcmolt_xgpon_ni_onu_upgrade_complete, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_AUTO_ID_ROGUE_ONU_SPECIAL_MAP_CYCLE_START:
+                            *key_size = sizeof(bcmolt_xgpon_ni_key);
+                            *key_offset = offsetof(bcmolt_xgpon_ni_rogue_onu_special_map_cycle_start, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_AUTO_ID_STAT_ALARM_RAISED:
+                            *key_size = sizeof(bcmolt_xgpon_ni_key);
+                            *key_offset = offsetof(bcmolt_xgpon_ni_stat_alarm_raised, key);
+                            *data_size = sizeof(bcmolt_xgpon_ni_stat_alarm_raised_data);
+                            *data_offset = offsetof(bcmolt_xgpon_ni_stat_alarm_raised, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_AUTO_ID_STAT_ALARM_CLEARED:
+                            *key_size = sizeof(bcmolt_xgpon_ni_key);
+                            *key_offset = offsetof(bcmolt_xgpon_ni_stat_alarm_cleared, key);
+                            *data_size = sizeof(bcmolt_xgpon_ni_stat_alarm_cleared_data);
+                            *data_offset = offsetof(bcmolt_xgpon_ni_stat_alarm_cleared, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_xgpon_ni_key);
+                            *key_offset = offsetof(bcmolt_xgpon_ni_auto_cfg, key);
+                            *data_size = sizeof(bcmolt_xgpon_ni_auto_cfg_data);
+                            *data_offset = offsetof(bcmolt_xgpon_ni_auto_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_XGPON_NI_OPER_ID_SET_PON_STATE:
+                            *key_size = sizeof(bcmolt_xgpon_ni_key);
+                            *key_offset = offsetof(bcmolt_xgpon_ni_set_pon_state, key);
+                            *data_size = sizeof(bcmolt_xgpon_ni_set_pon_state_data);
+                            *data_offset = offsetof(bcmolt_xgpon_ni_set_pon_state, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_OPER_ID_RESET:
+                            *key_size = sizeof(bcmolt_xgpon_ni_key);
+                            *key_offset = offsetof(bcmolt_xgpon_ni_reset, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_OPER_ID_DISABLE_SERIAL_NUMBER:
+                            *key_size = sizeof(bcmolt_xgpon_ni_key);
+                            *key_offset = offsetof(bcmolt_xgpon_ni_disable_serial_number, key);
+                            *data_size = sizeof(bcmolt_xgpon_ni_disable_serial_number_data);
+                            *data_offset = offsetof(bcmolt_xgpon_ni_disable_serial_number, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_OPER_ID_SINGLE_REQUEST_STANDBY_PON_MONITORING:
+                            *key_size = sizeof(bcmolt_xgpon_ni_key);
+                            *key_offset = offsetof(bcmolt_xgpon_ni_single_request_standby_pon_monitoring, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_OPER_ID_SET_ONU_STATE:
+                            *key_size = sizeof(bcmolt_xgpon_ni_key);
+                            *key_offset = offsetof(bcmolt_xgpon_ni_set_onu_state, key);
+                            *data_size = sizeof(bcmolt_xgpon_ni_set_onu_state_data);
+                            *data_offset = offsetof(bcmolt_xgpon_ni_set_onu_state, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_OPER_ID_RUN_SPECIAL_BW_MAP:
+                            *key_size = sizeof(bcmolt_xgpon_ni_key);
+                            *key_offset = offsetof(bcmolt_xgpon_ni_run_special_bw_map, key);
+                            *data_size = sizeof(bcmolt_xgpon_ni_run_special_bw_map_data);
+                            *data_offset = offsetof(bcmolt_xgpon_ni_run_special_bw_map, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_OPER_ID_ROGUE_DETECTION_WINDOW:
+                            *key_size = sizeof(bcmolt_xgpon_ni_key);
+                            *key_offset = offsetof(bcmolt_xgpon_ni_rogue_detection_window, key);
+                            *data_size = sizeof(bcmolt_xgpon_ni_rogue_detection_window_data);
+                            *data_offset = offsetof(bcmolt_xgpon_ni_rogue_detection_window, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_OPER_ID_TOD_REQUEST:
+                            *key_size = sizeof(bcmolt_xgpon_ni_key);
+                            *key_offset = offsetof(bcmolt_xgpon_ni_tod_request, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_OPER_ID_START_ONU_UPGRADE:
+                            *key_size = sizeof(bcmolt_xgpon_ni_key);
+                            *key_offset = offsetof(bcmolt_xgpon_ni_start_onu_upgrade, key);
+                            *data_size = sizeof(bcmolt_xgpon_ni_start_onu_upgrade_data);
+                            *data_offset = offsetof(bcmolt_xgpon_ni_start_onu_upgrade, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_OPER_ID_ADJUST_TX_WAVELENGTH:
+                            *key_size = sizeof(bcmolt_xgpon_ni_key);
+                            *key_offset = offsetof(bcmolt_xgpon_ni_adjust_tx_wavelength, key);
+                            *data_size = sizeof(bcmolt_xgpon_ni_adjust_tx_wavelength_data);
+                            *data_offset = offsetof(bcmolt_xgpon_ni_adjust_tx_wavelength, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_PROXY:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_XGPON_NI_PROXY_ID_CPU_PACKETS:
+                            *key_size = sizeof(bcmolt_xgpon_ni_key);
+                            *key_offset = offsetof(bcmolt_xgpon_ni_cpu_packets, key);
+                            *data_size = sizeof(bcmolt_xgpon_ni_cpu_packets_data);
+                            *data_offset = offsetof(bcmolt_xgpon_ni_cpu_packets, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_PROXY_ID_BROADCAST_PLOAM_PACKET:
+                            *key_size = sizeof(bcmolt_xgpon_ni_key);
+                            *key_offset = offsetof(bcmolt_xgpon_ni_broadcast_ploam_packet, key);
+                            *data_size = sizeof(bcmolt_xgpon_ni_broadcast_ploam_packet_data);
+                            *data_offset = offsetof(bcmolt_xgpon_ni_broadcast_ploam_packet, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_XGPON_ONU:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmolt_xgpon_onu_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_cfg, key);
+                            *data_size = sizeof(bcmolt_xgpon_onu_cfg_data);
+                            *data_offset = offsetof(bcmolt_xgpon_onu_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_stat, key);
+                            *data_size = sizeof(bcmolt_xgpon_onu_stat_data);
+                            *data_offset = offsetof(bcmolt_xgpon_onu_stat, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                        case 1:
+                        case 2:
+                        case 3:
+                        case 4:
+                        case 5:
+                        case 6:
+                        case 7:
+                        case 8:
+                        case 9:
+                        case 10:
+                        case 11:
+                        case 12:
+                        case 13:
+                        case 14:
+                        case 15:
+                        case 16:
+                        case 17:
+                        case 18:
+                        case 19:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_stat_cfg, key);
+                            *data_size = sizeof(bcmolt_xgpon_onu_stat_cfg_data);
+                            *data_offset = offsetof(bcmolt_xgpon_onu_stat_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_XGPON_ONU_AUTO_ID_ONU_ALARM:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_onu_alarm, key);
+                            *data_size = sizeof(bcmolt_xgpon_onu_onu_alarm_data);
+                            *data_offset = offsetof(bcmolt_xgpon_onu_onu_alarm, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_DOWI:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_dowi, key);
+                            *data_size = sizeof(bcmolt_xgpon_onu_dowi_data);
+                            *data_offset = offsetof(bcmolt_xgpon_onu_dowi, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_SFI:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_sfi, key);
+                            *data_size = sizeof(bcmolt_xgpon_onu_sfi_data);
+                            *data_offset = offsetof(bcmolt_xgpon_onu_sfi, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_SDI:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_sdi, key);
+                            *data_size = sizeof(bcmolt_xgpon_onu_sdi_data);
+                            *data_offset = offsetof(bcmolt_xgpon_onu_sdi, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_DFI:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_dfi, key);
+                            *data_size = sizeof(bcmolt_xgpon_onu_dfi_data);
+                            *data_offset = offsetof(bcmolt_xgpon_onu_dfi, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_PQSI:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_pqsi, key);
+                            *data_size = sizeof(bcmolt_xgpon_onu_pqsi_data);
+                            *data_offset = offsetof(bcmolt_xgpon_onu_pqsi, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_SUFI:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_sufi, key);
+                            *data_size = sizeof(bcmolt_xgpon_onu_sufi_data);
+                            *data_offset = offsetof(bcmolt_xgpon_onu_sufi, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_TIWI:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_tiwi, key);
+                            *data_size = sizeof(bcmolt_xgpon_onu_tiwi_data);
+                            *data_offset = offsetof(bcmolt_xgpon_onu_tiwi, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_LOOCI:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_looci, key);
+                            *data_size = sizeof(bcmolt_xgpon_onu_looci_data);
+                            *data_offset = offsetof(bcmolt_xgpon_onu_looci, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_RANGING_COMPLETED:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_ranging_completed, key);
+                            *data_size = sizeof(bcmolt_xgpon_onu_ranging_completed_data);
+                            *data_offset = offsetof(bcmolt_xgpon_onu_ranging_completed, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_ONU_ACTIVATION_COMPLETED:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_onu_activation_completed, key);
+                            *data_size = sizeof(bcmolt_xgpon_onu_onu_activation_completed_data);
+                            *data_offset = offsetof(bcmolt_xgpon_onu_onu_activation_completed, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_ONU_DEACTIVATION_COMPLETED:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_onu_deactivation_completed, key);
+                            *data_size = sizeof(bcmolt_xgpon_onu_onu_deactivation_completed_data);
+                            *data_offset = offsetof(bcmolt_xgpon_onu_onu_deactivation_completed, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_ONU_ENABLE_COMPLETED:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_onu_enable_completed, key);
+                            *data_size = sizeof(bcmolt_xgpon_onu_onu_enable_completed_data);
+                            *data_offset = offsetof(bcmolt_xgpon_onu_onu_enable_completed, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_ONU_DISABLE_COMPLETED:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_onu_disable_completed, key);
+                            *data_size = sizeof(bcmolt_xgpon_onu_onu_disable_completed_data);
+                            *data_offset = offsetof(bcmolt_xgpon_onu_onu_disable_completed, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_RSSI_MEASUREMENT_COMPLETED:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_rssi_measurement_completed, key);
+                            *data_size = sizeof(bcmolt_xgpon_onu_rssi_measurement_completed_data);
+                            *data_offset = offsetof(bcmolt_xgpon_onu_rssi_measurement_completed, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_INVALID_DBRU_REPORT:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_invalid_dbru_report, key);
+                            *data_size = sizeof(bcmolt_xgpon_onu_invalid_dbru_report_data);
+                            *data_offset = offsetof(bcmolt_xgpon_onu_invalid_dbru_report, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_KEY_EXCHANGE_COMPLETED:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_key_exchange_completed, key);
+                            *data_size = sizeof(bcmolt_xgpon_onu_key_exchange_completed_data);
+                            *data_offset = offsetof(bcmolt_xgpon_onu_key_exchange_completed, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_KEY_EXCHANGE_KEY_REQUEST_TIMEOUT:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_key_exchange_key_request_timeout, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_KEY_EXCHANGE_CYCLE_SKIPPED:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_key_exchange_cycle_skipped, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_KEY_EXCHANGE_KEY_MISMATCH:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_key_exchange_key_mismatch, key);
+                            *data_size = sizeof(bcmolt_xgpon_onu_key_exchange_key_mismatch_data);
+                            *data_offset = offsetof(bcmolt_xgpon_onu_key_exchange_key_mismatch, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_OPTICAL_REFLECTION:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_optical_reflection, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_DGI:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_dgi, key);
+                            *data_size = sizeof(bcmolt_xgpon_onu_dgi_data);
+                            *data_offset = offsetof(bcmolt_xgpon_onu_dgi, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_POWER_MANAGEMENT_STATE_CHANGE:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_power_management_state_change, key);
+                            *data_size = sizeof(bcmolt_xgpon_onu_power_management_state_change_data);
+                            *data_offset = offsetof(bcmolt_xgpon_onu_power_management_state_change, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_POSSIBLE_DRIFT:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_possible_drift, key);
+                            *data_size = sizeof(bcmolt_xgpon_onu_possible_drift_data);
+                            *data_offset = offsetof(bcmolt_xgpon_onu_possible_drift, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_REGISTRATION_ID:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_registration_id, key);
+                            *data_size = sizeof(bcmolt_xgpon_onu_registration_id_data);
+                            *data_offset = offsetof(bcmolt_xgpon_onu_registration_id, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_POWER_LEVEL_REPORT:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_power_level_report, key);
+                            *data_size = sizeof(bcmolt_xgpon_onu_power_level_report_data);
+                            *data_offset = offsetof(bcmolt_xgpon_onu_power_level_report, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_POWER_CONSUMPTION_REPORT:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_power_consumption_report, key);
+                            *data_size = sizeof(bcmolt_xgpon_onu_power_consumption_report_data);
+                            *data_offset = offsetof(bcmolt_xgpon_onu_power_consumption_report, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_SECURE_MUTUAL_AUTHENTICATION_FAILURE:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_secure_mutual_authentication_failure, key);
+                            *data_size = sizeof(bcmolt_xgpon_onu_secure_mutual_authentication_failure_data);
+                            *data_offset = offsetof(bcmolt_xgpon_onu_secure_mutual_authentication_failure, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_ONU_TUNING_OUT_COMPLETED:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_onu_tuning_out_completed, key);
+                            *data_size = sizeof(bcmolt_xgpon_onu_onu_tuning_out_completed_data);
+                            *data_offset = offsetof(bcmolt_xgpon_onu_onu_tuning_out_completed, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_ONU_TUNING_IN_COMPLETED:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_onu_tuning_in_completed, key);
+                            *data_size = sizeof(bcmolt_xgpon_onu_onu_tuning_in_completed_data);
+                            *data_offset = offsetof(bcmolt_xgpon_onu_onu_tuning_in_completed, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_TUNING_RESPONSE:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_tuning_response, key);
+                            *data_size = sizeof(bcmolt_xgpon_onu_tuning_response_data);
+                            *data_offset = offsetof(bcmolt_xgpon_onu_tuning_response, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_STAT_ALARM_RAISED:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_stat_alarm_raised, key);
+                            *data_size = sizeof(bcmolt_xgpon_onu_stat_alarm_raised_data);
+                            *data_offset = offsetof(bcmolt_xgpon_onu_stat_alarm_raised, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_STAT_ALARM_CLEARED:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_stat_alarm_cleared, key);
+                            *data_size = sizeof(bcmolt_xgpon_onu_stat_alarm_cleared_data);
+                            *data_offset = offsetof(bcmolt_xgpon_onu_stat_alarm_cleared, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_auto_cfg, key);
+                            *data_size = sizeof(bcmolt_xgpon_onu_auto_cfg_data);
+                            *data_offset = offsetof(bcmolt_xgpon_onu_auto_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_XGPON_ONU_OPER_ID_SET_ONU_STATE:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_set_onu_state, key);
+                            *data_size = sizeof(bcmolt_xgpon_onu_set_onu_state_data);
+                            *data_offset = offsetof(bcmolt_xgpon_onu_set_onu_state, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_OPER_ID_RSSI_MEASUREMENT:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_rssi_measurement, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_OPER_ID_REQUEST_REGISTRATION:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_request_registration, key);
+                            *data_size = sizeof(bcmolt_xgpon_onu_request_registration_data);
+                            *data_offset = offsetof(bcmolt_xgpon_onu_request_registration, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_OPER_ID_CHANGE_POWER_LEVELLING:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_change_power_levelling, key);
+                            *data_size = sizeof(bcmolt_xgpon_onu_change_power_levelling_data);
+                            *data_offset = offsetof(bcmolt_xgpon_onu_change_power_levelling, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_OPER_ID_GET_POWER_LEVEL:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_get_power_level, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_OPER_ID_GET_POWER_CONSUMPTION:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_get_power_consumption, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_OPER_ID_ADJUST_TX_WAVELENGTH:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_adjust_tx_wavelength, key);
+                            *data_size = sizeof(bcmolt_xgpon_onu_adjust_tx_wavelength_data);
+                            *data_offset = offsetof(bcmolt_xgpon_onu_adjust_tx_wavelength, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_OPER_ID_SECURE_MUTUAL_AUTHENTICATION:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_secure_mutual_authentication, key);
+                            *data_size = sizeof(bcmolt_xgpon_onu_secure_mutual_authentication_data);
+                            *data_offset = offsetof(bcmolt_xgpon_onu_secure_mutual_authentication, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_OPER_ID_ONU_TUNING_IN:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_onu_tuning_in, key);
+                            *data_size = 0;
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_OPER_ID_ONU_TUNING_OUT:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_onu_tuning_out, key);
+                            *data_size = sizeof(bcmolt_xgpon_onu_onu_tuning_out_data);
+                            *data_offset = offsetof(bcmolt_xgpon_onu_onu_tuning_out, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_PROXY:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_XGPON_ONU_PROXY_ID_PLOAM_PACKET:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_ploam_packet, key);
+                            *data_size = sizeof(bcmolt_xgpon_onu_ploam_packet_data);
+                            *data_offset = offsetof(bcmolt_xgpon_onu_ploam_packet, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_PROXY_ID_CPU_PACKETS:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_cpu_packets, key);
+                            *data_size = sizeof(bcmolt_xgpon_onu_cpu_packets_data);
+                            *data_offset = offsetof(bcmolt_xgpon_onu_cpu_packets, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_PROXY_RX:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_XGPON_ONU_PROXY_RX_ID_CPU_PACKET:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_cpu_packet, key);
+                            *data_size = sizeof(bcmolt_xgpon_onu_cpu_packet_data);
+                            *data_offset = offsetof(bcmolt_xgpon_onu_cpu_packet, data);
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_PROXY_RX_ID_OMCI_PACKET:
+                            *key_size = sizeof(bcmolt_xgpon_onu_key);
+                            *key_offset = offsetof(bcmolt_xgpon_onu_omci_packet, key);
+                            *data_size = sizeof(bcmolt_xgpon_onu_omci_packet_data);
+                            *data_offset = offsetof(bcmolt_xgpon_onu_omci_packet, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_XGPON_TRX:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_xgpon_trx_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmolt_xgpon_trx_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_xgpon_trx_key);
+                            *key_offset = offsetof(bcmolt_xgpon_trx_cfg, key);
+                            *data_size = sizeof(bcmolt_xgpon_trx_cfg_data);
+                            *data_offset = offsetof(bcmolt_xgpon_trx_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_XPON_SERDES:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_xpon_serdes_key);
+                            *key_offset = 0;
+                            *data_size = sizeof(bcmolt_xpon_serdes_key);
+                            *data_offset = 0;
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *key_size = sizeof(bcmolt_xpon_serdes_key);
+                            *key_offset = offsetof(bcmolt_xpon_serdes_cfg, key);
+                            *data_size = sizeof(bcmolt_xpon_serdes_cfg_data);
+                            *data_offset = offsetof(bcmolt_xpon_serdes_cfg, data);
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        default:
+            return BCM_ERR_RANGE;
+    }
+
+    return BCM_ERR_INTERNAL;    /**<  should never happen. */
+}
+
+bcmos_errno api_cli_object_subgroup_name(bcmolt_obj_id obj, bcmolt_mgt_group group, uint16_t subgroup, const char **name, const char **descr)
+{
+    switch (obj)
+    {
+        case BCMOLT_OBJ_ID_AE_NI:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "cfg";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_AE_NI_OPER_ID_SET_AE_NI_EN_STATE:
+                            if (name != NULL)
+                            {
+                                *name = "set_ae_ni_en_state";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Set the AE NI enable state.";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_AE_PATH_DS:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "stat";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "stat";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "bytes";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of bytes transmitted on this 10g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 1:
+                            if (name != NULL)
+                            {
+                                *name = "frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of frames transmitted on this 10g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 2:
+                            if (name != NULL)
+                            {
+                                *name = "frames_64";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 64 byte frames transmitted on this 10g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 3:
+                            if (name != NULL)
+                            {
+                                *name = "frames_65_127";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 65 to 127 byte frames transmitted on this 10g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 4:
+                            if (name != NULL)
+                            {
+                                *name = "frames_128_255";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 128 to 255 byte frames transmitted on this 10g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 5:
+                            if (name != NULL)
+                            {
+                                *name = "frames_256_511";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 256 to 511 byte frames transmitted on this 10g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 6:
+                            if (name != NULL)
+                            {
+                                *name = "frames_512_1023";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 512 to 1023 byte frames transmitted on this 10g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 7:
+                            if (name != NULL)
+                            {
+                                *name = "frames_1024_1518";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 1024 to 1518 byte frames transmitted on this 10g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 8:
+                            if (name != NULL)
+                            {
+                                *name = "frames_1519_2047";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 1519 to 2047 byte frames transmitted on this 10g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 9:
+                            if (name != NULL)
+                            {
+                                *name = "frames_2048_4095";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 2048 to 4095 byte frames transmitted on this 10g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 10:
+                            if (name != NULL)
+                            {
+                                *name = "frames_4096_9216";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 4096 to 9216 byte frames transmitted on this 10g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 11:
+                            if (name != NULL)
+                            {
+                                *name = "frames_9217_16383";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 9217 to 16383 byte frames transmitted on this 10g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 12:
+                            if (name != NULL)
+                            {
+                                *name = "broadcast_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of broadcast frames transmitted on this 10g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 13:
+                            if (name != NULL)
+                            {
+                                *name = "data_bytes";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of data bytes transmitted on this 10g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 14:
+                            if (name != NULL)
+                            {
+                                *name = "multicast_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of multicast frames transmitted on this 10g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 15:
+                            if (name != NULL)
+                            {
+                                *name = "unicast_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of unicast frames transmitted on this 10g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 16:
+                            if (name != NULL)
+                            {
+                                *name = "abort_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Number of abort frames transmitted on this 10g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_AE_PATH_DS_AUTO_ID_STAT_ALARM_RAISED:
+                            if (name != NULL)
+                            {
+                                *name = "stat_alarm_raised";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when a configured statistic alarm condition has been met.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_AE_PATH_DS_AUTO_ID_STAT_ALARM_CLEARED:
+                            if (name != NULL)
+                            {
+                                *name = "stat_alarm_cleared";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when a configured statistic alarm condition is no longer met.";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "auto_cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Indication Configuration";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_AE_PATH_US:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "stat";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "stat";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "bytes";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of bytes received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 1:
+                            if (name != NULL)
+                            {
+                                *name = "frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of frames received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 2:
+                            if (name != NULL)
+                            {
+                                *name = "frames_64";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 64 byte frames received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 3:
+                            if (name != NULL)
+                            {
+                                *name = "frames_65_127";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 65 to 127 byte frames received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 4:
+                            if (name != NULL)
+                            {
+                                *name = "frames_128_255";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 128 to 255 byte frames received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 5:
+                            if (name != NULL)
+                            {
+                                *name = "frames_256_511";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 256 to 511 byte frames received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 6:
+                            if (name != NULL)
+                            {
+                                *name = "frames_512_1023";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 512 to 1023 byte frames received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 7:
+                            if (name != NULL)
+                            {
+                                *name = "frames_1024_1518";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 1024 to 1518 byte frames received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 8:
+                            if (name != NULL)
+                            {
+                                *name = "frames_1519_2047";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 1519 to 2047 byte frames received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 9:
+                            if (name != NULL)
+                            {
+                                *name = "frames_2048_4095";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 2048 to 4095 byte frames received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 10:
+                            if (name != NULL)
+                            {
+                                *name = "frames_4096_9216";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 4096 to 9216 byte frames received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 11:
+                            if (name != NULL)
+                            {
+                                *name = "frames_9217_16383";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 9217 to 16383 byte frames received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 12:
+                            if (name != NULL)
+                            {
+                                *name = "broadcast_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of broadcast frames received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 13:
+                            if (name != NULL)
+                            {
+                                *name = "data_bytes";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of data bytes received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 14:
+                            if (name != NULL)
+                            {
+                                *name = "multicast_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of multicast frames received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 15:
+                            if (name != NULL)
+                            {
+                                *name = "unicast_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of unicast frames received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 16:
+                            if (name != NULL)
+                            {
+                                *name = "abort_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of abort frames received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 17:
+                            if (name != NULL)
+                            {
+                                *name = "fcs_error";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of bad FCS errors received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 18:
+                            if (name != NULL)
+                            {
+                                *name = "oversize_error";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of oversize errors received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 19:
+                            if (name != NULL)
+                            {
+                                *name = "runt_error";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of runt errors received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_AE_PATH_US_AUTO_ID_STAT_ALARM_RAISED:
+                            if (name != NULL)
+                            {
+                                *name = "stat_alarm_raised";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when a configured statistic alarm condition has been met.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_AE_PATH_US_AUTO_ID_STAT_ALARM_CLEARED:
+                            if (name != NULL)
+                            {
+                                *name = "stat_alarm_cleared";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when a configured statistic alarm condition is no longer met.";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "auto_cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Indication Configuration";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_CHANNEL:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "cfg";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_DEBUG:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "cfg";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_DEBUG_AUTO_ID_CLI_OUTPUT:
+                            if (name != NULL)
+                            {
+                                *name = "cli_output";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "CLI Output String";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_DEBUG_AUTO_ID_FILE_ALMOST_FULL:
+                            if (name != NULL)
+                            {
+                                *name = "file_almost_full";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "This indication is sent when DDR log file is 75% full";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "auto_cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Indication Configuration";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_DEBUG_OPER_ID_CLI_INPUT:
+                            if (name != NULL)
+                            {
+                                *name = "cli_input";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "CLI Input String";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_DEBUG_OPER_ID_START_API_CAPTURE:
+                            if (name != NULL)
+                            {
+                                *name = "start_api_capture";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Start API Capture";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_DEBUG_OPER_ID_STOP_API_CAPTURE:
+                            if (name != NULL)
+                            {
+                                *name = "stop_api_capture";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Stop API Capture";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_DEBUG_OPER_ID_RESET_API_CAPTURE:
+                            if (name != NULL)
+                            {
+                                *name = "reset_api_capture";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Reset API Capture";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_DEVICE:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "cfg";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_DEVICE_AUTO_ID_DEVICE_READY:
+                            if (name != NULL)
+                            {
+                                *name = "device_ready";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Device ready indication used by the device control library (not sent to the host application).";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_DEVICE_AUTO_ID_CONNECTION_ESTABLISHED:
+                            if (name != NULL)
+                            {
+                                *name = "connection_established";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Connection established indication used by the device control library (not sent to the host application).";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_DEVICE_AUTO_ID_DEVICE_KEEP_ALIVE:
+                            if (name != NULL)
+                            {
+                                *name = "device_keep_alive";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Keep alive message from the device to the host - used by the device control library (not sent to the host application).";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_DEVICE_AUTO_ID_CONNECTION_FAILURE:
+                            if (name != NULL)
+                            {
+                                *name = "connection_failure";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The host failed to connect to the device.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_DEVICE_AUTO_ID_CONNECTION_COMPLETE:
+                            if (name != NULL)
+                            {
+                                *name = "connection_complete";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The host successfully connected to the device.  The device has either been reprogrammed with new firmware, or a connection was established with an existing device (see the \"standalone\" field).";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_DEVICE_AUTO_ID_DISCONNECTION_COMPLETE:
+                            if (name != NULL)
+                            {
+                                *name = "disconnection_complete";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The host successfully disconnected from the device.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_DEVICE_AUTO_ID_SW_ERROR:
+                            if (name != NULL)
+                            {
+                                *name = "sw_error";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "sw error";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_DEVICE_AUTO_ID_SW_EXCEPTION:
+                            if (name != NULL)
+                            {
+                                *name = "sw_exception";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "sw exception";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_DEVICE_AUTO_ID_INDICATIONS_DROPPED:
+                            if (name != NULL)
+                            {
+                                *name = "indications_dropped";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when indications are dropped due to congestion / shaping.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_DEVICE_AUTO_ID_IMAGE_TRANSFER_COMPLETE:
+                            if (name != NULL)
+                            {
+                                *name = "image_transfer_complete";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Image Transfer Complete";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_DEVICE_AUTO_ID_DDR_TEST_COMPLETE:
+                            if (name != NULL)
+                            {
+                                *name = "ddr_test_complete";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The DDR Test has completed";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "auto_cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Indication Configuration";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_DEVICE_OPER_ID_CONNECT:
+                            if (name != NULL)
+                            {
+                                *name = "connect";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Start connection process between the host processor and the device";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_DEVICE_OPER_ID_DISCONNECT:
+                            if (name != NULL)
+                            {
+                                *name = "disconnect";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Disconnect the host from the device";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_DEVICE_OPER_ID_RESET:
+                            if (name != NULL)
+                            {
+                                *name = "reset";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Resets the host/device.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_DEVICE_OPER_ID_HOST_KEEP_ALIVE:
+                            if (name != NULL)
+                            {
+                                *name = "host_keep_alive";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Keep alive message from the host to the device - used by the device control library (should not be sent by the host application).";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_DEVICE_OPER_ID_SW_UPGRADE_ACTIVATE:
+                            if (name != NULL)
+                            {
+                                *name = "sw_upgrade_activate";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "SW image activation for In-Service SW upgrade";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_DEVICE_OPER_ID_IMAGE_TRANSFER_START:
+                            if (name != NULL)
+                            {
+                                *name = "image_transfer_start";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "This API message informs the OLT of the start of image transfer, and provides the information of the file image.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_DEVICE_OPER_ID_IMAGE_TRANSFER_DATA:
+                            if (name != NULL)
+                            {
+                                *name = "image_transfer_data";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "used for transferring the actual data from/to the OLT.   not to be directly called by the user.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_DEVICE_OPER_ID_RUN_DDR_TEST:
+                            if (name != NULL)
+                            {
+                                *name = "run_ddr_test";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Run a test on one or more of the DDR components.";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_EPON_DENIED_LINK:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "cfg";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_EPON_DENIED_LINK_AUTO_ID_UNKNOWN_LINK_VIOLATION:
+                            if (name != NULL)
+                            {
+                                *name = "unknown_link_violation";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "A link tried to register while the PON was set to \"notify unknown\" registration behavior and this link was not pre-provisioned.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_DENIED_LINK_AUTO_ID_OVERHEAD_PROFILE_VIOLATION:
+                            if (name != NULL)
+                            {
+                                *name = "overhead_profile_violation";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "This is when link tries to register and there are already too many existing laser on/off combinations.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_DENIED_LINK_AUTO_ID_LASER_ON_OFF_VIOLATION:
+                            if (name != NULL)
+                            {
+                                *name = "laser_on_off_violation";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "This is when a link tries to reigster with an impossible laser on or off time.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_DENIED_LINK_AUTO_ID_MAX_LINK_VIOLATION:
+                            if (name != NULL)
+                            {
+                                *name = "max_link_violation";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "A link tried to register and it would have put us over the provisioned max links for the corresponding EPON NI.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_DENIED_LINK_AUTO_ID_LLID_POOL_EMPTY_VIOLATION:
+                            if (name != NULL)
+                            {
+                                *name = "llid_pool_empty_violation";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "A link tried to register and it there are no LLIDs available. If this occurs, it is possible there is an issue with your 'max links' and/or 'Base LLID' fields on your RP.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_DENIED_LINK_AUTO_ID_SYSTEM_RESOURCE_VIOLATION:
+                            if (name != NULL)
+                            {
+                                *name = "system_resource_violation";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "A link tried to register and we were unable to allocate system resources for it.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_DENIED_LINK_AUTO_ID_RANGE_VIOLATION:
+                            if (name != NULL)
+                            {
+                                *name = "range_violation";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "A link tried to register with a range value that was outside of the min/max fiber length.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_DENIED_LINK_AUTO_ID_TDM_CHANNELS_EXHAUSTED:
+                            if (name != NULL)
+                            {
+                                *name = "tdm_channels_exhausted";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "TDM Channels Exhausted";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_DENIED_LINK_AUTO_ID_ROGUE_VIOLATION:
+                            if (name != NULL)
+                            {
+                                *name = "rogue_violation";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "A Rogue ONU was detected on this link/LLID. ";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_DENIED_LINK_AUTO_ID_UPSTREAM_BANDWIDTH_VIOLATION:
+                            if (name != NULL)
+                            {
+                                *name = "upstream_bandwidth_violation";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "This link failed to register because there was insufficient upstream bandwidth available to provide the default UBD.";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "auto_cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Indication Configuration";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_EPON_LINK:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "cfg";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "stat";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "stat";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "rx_data_bytes";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of data bytes received on this EPON link.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 1:
+                            if (name != NULL)
+                            {
+                                *name = "rx_data_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of data frames received on this EPON link.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 2:
+                            if (name != NULL)
+                            {
+                                *name = "rx_frames_64";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 64 byte frames received on this EPON Link";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 3:
+                            if (name != NULL)
+                            {
+                                *name = "rx_frames_65_127";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 65 to 127 byte frames received on this EPON Link";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 4:
+                            if (name != NULL)
+                            {
+                                *name = "rx_frames_128_255";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 128 to 255 byte frames received on this EPON Link";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 5:
+                            if (name != NULL)
+                            {
+                                *name = "rx_frames_256_511";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 256 to 511 byte frames received on this EPON Link";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 6:
+                            if (name != NULL)
+                            {
+                                *name = "rx_frames_512_1023";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 512 to 1023 byte frames received on this EPON Link";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 7:
+                            if (name != NULL)
+                            {
+                                *name = "rx_frames_1024_1518";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 1024 to 1518 byte frames received on this EPON Link";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 8:
+                            if (name != NULL)
+                            {
+                                *name = "rx_frames_1519_2047";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 1519 to 2047 byte frames received on this EPON Link";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 9:
+                            if (name != NULL)
+                            {
+                                *name = "rx_frames_2048_4095";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 2048 to 4095 byte frames received on this EPON Link";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 10:
+                            if (name != NULL)
+                            {
+                                *name = "rx_frames_4096_9216";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 4096 to 9216 byte frames received on this EPON Link";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 11:
+                            if (name != NULL)
+                            {
+                                *name = "rx_frames_9217_16383";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 9217 to 16383 byte frames received on this EPON Link";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 12:
+                            if (name != NULL)
+                            {
+                                *name = "rx_oam_bytes";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of OAM bytes received on this EPON link.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 13:
+                            if (name != NULL)
+                            {
+                                *name = "rx_oam_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of OAM frames received on this EPON link.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 14:
+                            if (name != NULL)
+                            {
+                                *name = "rx_mpcp_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of MPCP frames received on this EPON link.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 15:
+                            if (name != NULL)
+                            {
+                                *name = "rx_broadcast_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of broadcast frames received on this EPON link.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 16:
+                            if (name != NULL)
+                            {
+                                *name = "rx_unicast_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of unicast frames received on this EPON link.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 17:
+                            if (name != NULL)
+                            {
+                                *name = "rx_multicast_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of multicast frames received on this EPON link.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 18:
+                            if (name != NULL)
+                            {
+                                *name = "rx_report_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of report frames received on this EPON link.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 19:
+                            if (name != NULL)
+                            {
+                                *name = "rx_fcs_error";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of bad FCS errors received on this EPON Link";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 20:
+                            if (name != NULL)
+                            {
+                                *name = "rx_oversize_error";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of oversize errors received on this EPON Link";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 21:
+                            if (name != NULL)
+                            {
+                                *name = "rx_runt_error";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of runt errors received on this EPON Link";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 22:
+                            if (name != NULL)
+                            {
+                                *name = "rx_line_code_error";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of line code errors received on this EPON Link";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 23:
+                            if (name != NULL)
+                            {
+                                *name = "rx_line_code_error_max";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of line code errors max received on this EPON Link";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 24:
+                            if (name != NULL)
+                            {
+                                *name = "tx_data_bytes";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of data bytes transmitted on this EPON link.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 25:
+                            if (name != NULL)
+                            {
+                                *name = "tx_data_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of data frames transmitted on this EPON link.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 26:
+                            if (name != NULL)
+                            {
+                                *name = "tx_frames_64";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 64 byte frames transmitted on this EPON Link";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 27:
+                            if (name != NULL)
+                            {
+                                *name = "tx_frames_65_127";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 65 to 127 byte frames transmitted on this EPON Link";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 28:
+                            if (name != NULL)
+                            {
+                                *name = "tx_frames_128_255";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 128 to 255 byte frames transmitted on this EPON Link";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 29:
+                            if (name != NULL)
+                            {
+                                *name = "tx_frames_256_511";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 256 to 511 byte frames transmitted on this EPON Link";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 30:
+                            if (name != NULL)
+                            {
+                                *name = "tx_frames_512_1023";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 512 to 1023 byte frames transmitted on this EPON Link";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 31:
+                            if (name != NULL)
+                            {
+                                *name = "tx_frames_1024_1518";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 1024 to 1518 byte frames transmitted on this EPON Link";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 32:
+                            if (name != NULL)
+                            {
+                                *name = "tx_frames_1519_2047";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 1519 to 2047 byte frames transmitted on this EPON Link";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 33:
+                            if (name != NULL)
+                            {
+                                *name = "tx_frames_2048_4095";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 2048 to 4095 byte frames transmitted on this EPON Link";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 34:
+                            if (name != NULL)
+                            {
+                                *name = "tx_frames_4096_9216";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 4096 to 9216 byte frames transmitted on this EPON Link";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 35:
+                            if (name != NULL)
+                            {
+                                *name = "tx_frames_9217_16383";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 9217 to 16383 byte frames transmitted on this EPON Link";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 36:
+                            if (name != NULL)
+                            {
+                                *name = "tx_oam_bytes";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of OAM bytes transmitted on this EPON link.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 37:
+                            if (name != NULL)
+                            {
+                                *name = "tx_oam_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of OAM frames transmitted on this EPON link.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 38:
+                            if (name != NULL)
+                            {
+                                *name = "tx_mpcp_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of MPCP frames transmitted on this EPON link.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 39:
+                            if (name != NULL)
+                            {
+                                *name = "tx_broadcast_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of broadcast frames transmitted on this EPON link.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 40:
+                            if (name != NULL)
+                            {
+                                *name = "tx_unicast_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of unicast frames transmitted on this EPON link.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 41:
+                            if (name != NULL)
+                            {
+                                *name = "tx_multicast_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of multicast frames transmitted on this EPON link.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 42:
+                            if (name != NULL)
+                            {
+                                *name = "tx_gates";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of gates transmitted on this EPON link.";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_EPON_LINK_AUTO_ID_KEY_EXCHANGE_FAILURE:
+                            if (name != NULL)
+                            {
+                                *name = "key_exchange_failure";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The OLT failed to receive an updated encryption key within the expected time period after encryption key exchange has been initiated.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_AUTO_ID_ENCRYPTION_ENABLED:
+                            if (name != NULL)
+                            {
+                                *name = "encryption_enabled";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Encryption has been started on the Maple.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_AUTO_ID_MPCP_REG_ACK_TIMEOUT:
+                            if (name != NULL)
+                            {
+                                *name = "mpcp_reg_ack_timeout";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "An MPCP register acknowledgement was not received in the expected time interval for a link that tried to register";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_AUTO_ID_RANGE_VALUE_CHANGED:
+                            if (name != NULL)
+                            {
+                                *name = "range_value_changed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Indication sent when a range value has been changed.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_AUTO_ID_PROTECTION_SWITCH_OCCURRED:
+                            if (name != NULL)
+                            {
+                                *name = "protection_switch_occurred";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The link has undergone a protection switch event.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_AUTO_ID_DUPLICATE_MPCP_REGISTRATION_REQUEST:
+                            if (name != NULL)
+                            {
+                                *name = "duplicate_mpcp_registration_request";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "A register requested was received for a link with the same MAC address as a link that has already registered.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_AUTO_ID_LINK_SPEED_MISMATCH:
+                            if (name != NULL)
+                            {
+                                *name = "link_speed_mismatch";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Host will receive this indication if a link registers then attempts to register later at a different speed, or if the link registers at a different speed than the speed with which it was pre-provisioned.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_AUTO_ID_MPCP_REPORT_TIMEOUT:
+                            if (name != NULL)
+                            {
+                                *name = "mpcp_report_timeout";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The provisioned limit between reports for the specified link has been exceeded.  This link will be de-registered, and the alarm_status set when this occurs.  The alarm_status will be cleared when the link attempts to register again.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_AUTO_ID_OAM_KEEPALIVE_TIMEOUT:
+                            if (name != NULL)
+                            {
+                                *name = "oam_keepalive_timeout";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The provisioned time limit between receiving upstream info frames has been exceeded.  Normally an ONU will reset its OAM state machine when this occurrs and the host must re-negotiate OAM and reprovision the link.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_AUTO_ID_MPCP_DISCOVERED:
+                            if (name != NULL)
+                            {
+                                *name = "mpcp_discovered";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "A link has completed MPCP link registration.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_AUTO_ID_MPCP_DEREGISTERED:
+                            if (name != NULL)
+                            {
+                                *name = "mpcp_deregistered";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "A previously registered link has completed MPCP de-registration.  This could be accompanied by an mpcp_report_timeout alarm if the link just disappeared, or not if this indication is a result of an OLT sending a MPCP deregister to the link.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_AUTO_ID_PREPROVISIONED_LINK_CREATED:
+                            if (name != NULL)
+                            {
+                                *name = "preprovisioned_link_created";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Raised after an 'add_link' operation on an EPON NI completes successfully";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_AUTO_ID_OAM_KEEPALIVE_TIMER_STARTED:
+                            if (name != NULL)
+                            {
+                                *name = "oam_keepalive_timer_started";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "OAM keepalive timer is started for this link.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_AUTO_ID_OAM_KEEPALIVE_TIMER_STOPPED:
+                            if (name != NULL)
+                            {
+                                *name = "oam_keepalive_timer_stopped";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "OAM keepalive timer is stopped for this link.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_AUTO_ID_KEY_EXCHANGE_STARTED:
+                            if (name != NULL)
+                            {
+                                *name = "key_exchange_started";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key_exchange_started";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_AUTO_ID_KEY_EXCHANGE_STOPPED:
+                            if (name != NULL)
+                            {
+                                *name = "key_exchange_stopped";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key_exchange_stopped";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_AUTO_ID_STATIC_REGISTRATION_DONE:
+                            if (name != NULL)
+                            {
+                                *name = "static_registration_done";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Static registration done";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_AUTO_ID_RERANGE_FAILURE:
+                            if (name != NULL)
+                            {
+                                *name = "rerange_failure";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Re-range failure";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_AUTO_ID_LINK_DELETED:
+                            if (name != NULL)
+                            {
+                                *name = "link_deleted";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Link Deleted";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_AUTO_ID_STAT_ALARM_RAISED:
+                            if (name != NULL)
+                            {
+                                *name = "stat_alarm_raised";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when a configured statistic alarm condition has been met.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_AUTO_ID_STAT_ALARM_CLEARED:
+                            if (name != NULL)
+                            {
+                                *name = "stat_alarm_cleared";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when a configured statistic alarm condition is no longer met.";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "auto_cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Indication Configuration";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_EPON_LINK_OPER_ID_FORCE_REDISCOVERY:
+                            if (name != NULL)
+                            {
+                                *name = "force_rediscovery";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Deregister the specified EPON link and force it to re-register.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_OPER_ID_DELETE_LINK:
+                            if (name != NULL)
+                            {
+                                *name = "delete_link";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Remove a logical link from the system entirely. If the link is not registered, it will be removed.  If the link is currently registered, it will  deregistered and removed.  It may immediately re-register with default parameters if the EPON_NI is configured to allow all links to register.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_OPER_ID_OAM_KEEPALIVE_TIMER_START:
+                            if (name != NULL)
+                            {
+                                *name = "oam_keepalive_timer_start";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Start the OAM keepalive timer against this link.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_OPER_ID_OAM_KEEPALIVE_TIMER_STOP:
+                            if (name != NULL)
+                            {
+                                *name = "oam_keepalive_timer_stop";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Stop the OAM keepalive timer for this link.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_OPER_ID_KEY_EXCHANGE_START:
+                            if (name != NULL)
+                            {
+                                *name = "key_exchange_start";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Apply the corresponding provisioning for 'epon_link.key_exchange_config' against this link and then start key exchange timer with the given period.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_OPER_ID_KEY_EXCHANGE_STOP:
+                            if (name != NULL)
+                            {
+                                *name = "key_exchange_stop";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Stops the key exchange timer for this link. This operation should generally only be called after a successful key_exchange_start.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_LINK_OPER_ID_STATIC_REGISTRATION:
+                            if (name != NULL)
+                            {
+                                *name = "static_registration";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Statically registers the logical link";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_PROXY:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_EPON_LINK_PROXY_ID_INJECT_FRAME:
+                            if (name != NULL)
+                            {
+                                *name = "inject_frame";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Send an arbitrary frame across the specified link.";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_PROXY_RX:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_EPON_LINK_PROXY_RX_ID_FRAME_CAPTURED:
+                            if (name != NULL)
+                            {
+                                *name = "frame_captured";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "A frame matching host-specified criteria was received.";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_EPON_NI:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "cfg";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_EPON_NI_AUTO_ID_NO_REPORTS:
+                            if (name != NULL)
+                            {
+                                *name = "no_reports";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Loss of all reports on all links on the EPON NI";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_NI_AUTO_ID_LLID_QUARANTINED:
+                            if (name != NULL)
+                            {
+                                *name = "llid_quarantined";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "LLID Quarantined";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_NI_AUTO_ID_STATE_CHANGE_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "state_change_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent after a 'set_epon_ni_en_state' operation has completed.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_NI_AUTO_ID_RERANGE_FAILURE:
+                            if (name != NULL)
+                            {
+                                *name = "rerange_failure";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Indicates the re-ranging process has failed";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_NI_AUTO_ID_RSSI_MEASUREMENT_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "rssi_measurement_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "RSSI Measurement Completed";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_NI_AUTO_ID_ONU_UPGRADE_COMPLETE:
+                            if (name != NULL)
+                            {
+                                *name = "onu_upgrade_complete";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "ONU Upgrade Complete";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_NI_AUTO_ID_ROGUE_SCAN_COMPLETE:
+                            if (name != NULL)
+                            {
+                                *name = "rogue_scan_complete";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Indciation that a scan is complete, any error is also returned. ";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_NI_AUTO_ID_MPCP_TIMESTAMP_CHANGED:
+                            if (name != NULL)
+                            {
+                                *name = "mpcp_timestamp_changed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "A clock transport pulse was received at the given MPCP timestamp.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_NI_AUTO_ID_AUTO_ROGUE_SCAN_1G_FAILURE:
+                            if (name != NULL)
+                            {
+                                *name = "auto_rogue_scan_1g_failure";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The auto rogue scan found possible rogue onus on the 1G stream.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_NI_AUTO_ID_AUTO_ROGUE_SCAN_10G_FAILURE:
+                            if (name != NULL)
+                            {
+                                *name = "auto_rogue_scan_10g_failure";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The auto rogue scan found possible rogue onus on the 1G stream.";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "auto_cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Indication Configuration";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_EPON_NI_OPER_ID_SET_EPON_NI_EN_STATE:
+                            if (name != NULL)
+                            {
+                                *name = "set_epon_ni_en_state";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Set the EPON NI enable state.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_NI_OPER_ID_ISSUE_RSSI_GRANT:
+                            if (name != NULL)
+                            {
+                                *name = "issue_rssi_grant";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Issues an RSSI grant to read RX Power";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_NI_OPER_ID_ADD_LINK:
+                            if (name != NULL)
+                            {
+                                *name = "add_link";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Pre-provision an EPON link.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_NI_OPER_ID_ADD_MULTICAST_LINK:
+                            if (name != NULL)
+                            {
+                                *name = "add_multicast_link";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Pre-provision an EPON multicast link.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_NI_OPER_ID_ADD_PROTECTED_STANDBY_LINK:
+                            if (name != NULL)
+                            {
+                                *name = "add_protected_standby_link";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Adds a protected standby link.  Once it has been created, the link is considered \"standby\" for the puposes of protection switching.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_NI_OPER_ID_PROTECTION_SWITCHING_APPLY_RERANGE_DELTA:
+                            if (name != NULL)
+                            {
+                                *name = "protection_switching_apply_rerange_delta";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Protection switching apply re-range delta";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_NI_OPER_ID_ROGUE_LLID_SCAN:
+                            if (name != NULL)
+                            {
+                                *name = "rogue_llid_scan";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Issue a request to scan all LLIDs or a specific LLID on a PON";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_NI_OPER_ID_START_ONU_UPGRADE:
+                            if (name != NULL)
+                            {
+                                *name = "start_onu_upgrade";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Start ONU Firmware Upgrade";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_EPON_ONU_10G_US:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "cfg";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "stat";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "stat";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "fec_code_words_total";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "FEC stats code words total";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 1:
+                            if (name != NULL)
+                            {
+                                *name = "fec_code_words_decode_fails";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "FEC stats code words decode fails";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 2:
+                            if (name != NULL)
+                            {
+                                *name = "fec_zeroes_corrected";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "FEC stats zeros corrected";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 3:
+                            if (name != NULL)
+                            {
+                                *name = "fec_ones_corrected";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "FEC stats ones corected";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_EPON_ONU_10G_US_AUTO_ID_STAT_ALARM_RAISED:
+                            if (name != NULL)
+                            {
+                                *name = "stat_alarm_raised";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when a configured statistic alarm condition has been met.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_ONU_10G_US_AUTO_ID_STAT_ALARM_CLEARED:
+                            if (name != NULL)
+                            {
+                                *name = "stat_alarm_cleared";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when a configured statistic alarm condition is no longer met.";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "auto_cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Indication Configuration";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_EPON_ONU_1G_US:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "cfg";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "stat";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "stat";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "good_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Good Frame Count, including nonFEC and FEC";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 1:
+                            if (name != NULL)
+                            {
+                                *name = "good_bytes";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Good Byte Count, including nonFEC and FEC";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 2:
+                            if (name != NULL)
+                            {
+                                *name = "oversz_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Oversized frame count (frames larger than 2000 bytes)";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 3:
+                            if (name != NULL)
+                            {
+                                *name = "non_fec_good_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Non FEC Good Frame Count";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 4:
+                            if (name != NULL)
+                            {
+                                *name = "non_fec_good_bytes";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Non FEC Good Byte Count";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 5:
+                            if (name != NULL)
+                            {
+                                *name = "fec_good_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "FEC Good Frame Count";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 6:
+                            if (name != NULL)
+                            {
+                                *name = "fec_good_bytes";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "FEC Good Byte Count";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 7:
+                            if (name != NULL)
+                            {
+                                *name = "fec_frames_exc_errs";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "FEC Frames which exceeded 8 symbol errors";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 8:
+                            if (name != NULL)
+                            {
+                                *name = "fec_blks_no_errs";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "FEC Blocks with no errors";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 9:
+                            if (name != NULL)
+                            {
+                                *name = "fec_blks_corr_errs";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "FEC Blocks with correctable errors";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 10:
+                            if (name != NULL)
+                            {
+                                *name = "fec_blks_uncorr_errs";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "FEC Blocks with uncorrectable errors";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 11:
+                            if (name != NULL)
+                            {
+                                *name = "fec_corr_bytes";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "FEC Corrected Bytes/Symbols";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 12:
+                            if (name != NULL)
+                            {
+                                *name = "fec_corr_zeroes";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "FEC Corrected Zeroes, 8b domain";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 13:
+                            if (name != NULL)
+                            {
+                                *name = "fec_corr_ones";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "FEC Corrected Ones, 8b domain";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 14:
+                            if (name != NULL)
+                            {
+                                *name = "undersz_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Undersize frame count (frames less than 64 bytes)";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 15:
+                            if (name != NULL)
+                            {
+                                *name = "errorsz_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Errored frame ";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_EPON_ONU_1G_US_AUTO_ID_STAT_ALARM_RAISED:
+                            if (name != NULL)
+                            {
+                                *name = "stat_alarm_raised";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when a configured statistic alarm condition has been met.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_ONU_1G_US_AUTO_ID_STAT_ALARM_CLEARED:
+                            if (name != NULL)
+                            {
+                                *name = "stat_alarm_cleared";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when a configured statistic alarm condition is no longer met.";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "auto_cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Indication Configuration";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_EPON_PATH_10G_DS:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "cfg";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "stat";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "stat";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "bytes";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of bytes transmitted on this 10g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 1:
+                            if (name != NULL)
+                            {
+                                *name = "frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of frames transmitted on this 10g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 2:
+                            if (name != NULL)
+                            {
+                                *name = "frames_64";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 64 byte frames transmitted on this 10g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 3:
+                            if (name != NULL)
+                            {
+                                *name = "frames_65_127";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 65 to 127 byte frames transmitted on this 10g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 4:
+                            if (name != NULL)
+                            {
+                                *name = "frames_128_255";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 128 to 255 byte frames transmitted on this 10g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 5:
+                            if (name != NULL)
+                            {
+                                *name = "frames_256_511";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 256 to 511 byte frames transmitted on this 10g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 6:
+                            if (name != NULL)
+                            {
+                                *name = "frames_512_1023";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 512 to 1023 byte frames transmitted on this 10g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 7:
+                            if (name != NULL)
+                            {
+                                *name = "frames_1024_1518";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 1024 to 1518 byte frames transmitted on this 10g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 8:
+                            if (name != NULL)
+                            {
+                                *name = "frames_1519_2047";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 1519 to 2047 byte frames transmitted on this 10g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 9:
+                            if (name != NULL)
+                            {
+                                *name = "frames_2048_4095";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 2048 to 4095 byte frames transmitted on this 10g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 10:
+                            if (name != NULL)
+                            {
+                                *name = "frames_4096_9216";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 4096 to 9216 byte frames transmitted on this 10g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 11:
+                            if (name != NULL)
+                            {
+                                *name = "frames_9217_16383";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 9217 to 16383 byte frames transmitted on this 10g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 12:
+                            if (name != NULL)
+                            {
+                                *name = "broadcast_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of broadcast frames transmitted on this 10g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 13:
+                            if (name != NULL)
+                            {
+                                *name = "data_bytes";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of data bytes transmitted on this 10g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 14:
+                            if (name != NULL)
+                            {
+                                *name = "multicast_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of multicast frames transmitted on this 10g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 15:
+                            if (name != NULL)
+                            {
+                                *name = "unicast_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of unicast frames transmitted on this 10g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 16:
+                            if (name != NULL)
+                            {
+                                *name = "oam_bytes";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Number of OAM bytes transmitted on this 10g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 17:
+                            if (name != NULL)
+                            {
+                                *name = "oam_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Number of OAM frames transmitted on this 10g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 18:
+                            if (name != NULL)
+                            {
+                                *name = "gate_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Number of gate frames transmitted on this 10g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 19:
+                            if (name != NULL)
+                            {
+                                *name = "mpcp_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Number of MPCP frames transmitted on this 10g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 20:
+                            if (name != NULL)
+                            {
+                                *name = "abort_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Number of abort frames transmitted on this 10g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_EPON_PATH_10G_DS_AUTO_ID_STAT_ALARM_RAISED:
+                            if (name != NULL)
+                            {
+                                *name = "stat_alarm_raised";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when a configured statistic alarm condition has been met.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_PATH_10G_DS_AUTO_ID_STAT_ALARM_CLEARED:
+                            if (name != NULL)
+                            {
+                                *name = "stat_alarm_cleared";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when a configured statistic alarm condition is no longer met.";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "auto_cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Indication Configuration";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_EPON_PATH_10G_US:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "cfg";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "stat";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "stat";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "bytes";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of bytes received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 1:
+                            if (name != NULL)
+                            {
+                                *name = "frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of frames received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 2:
+                            if (name != NULL)
+                            {
+                                *name = "frames_64";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 64 byte frames received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 3:
+                            if (name != NULL)
+                            {
+                                *name = "frames_65_127";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 65 to 127 byte frames received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 4:
+                            if (name != NULL)
+                            {
+                                *name = "frames_128_255";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 128 to 255 byte frames received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 5:
+                            if (name != NULL)
+                            {
+                                *name = "frames_256_511";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 256 to 511 byte frames received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 6:
+                            if (name != NULL)
+                            {
+                                *name = "frames_512_1023";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 512 to 1023 byte frames received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 7:
+                            if (name != NULL)
+                            {
+                                *name = "frames_1024_1518";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 1024 to 1518 byte frames received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 8:
+                            if (name != NULL)
+                            {
+                                *name = "frames_1519_2047";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 1519 to 2047 byte frames received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 9:
+                            if (name != NULL)
+                            {
+                                *name = "frames_2048_4095";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 2048 to 4095 byte frames received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 10:
+                            if (name != NULL)
+                            {
+                                *name = "frames_4096_9216";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 4096 to 9216 byte frames received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 11:
+                            if (name != NULL)
+                            {
+                                *name = "frames_9217_16383";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 9217 to 16383 byte frames received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 12:
+                            if (name != NULL)
+                            {
+                                *name = "broadcast_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of broadcast frames received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 13:
+                            if (name != NULL)
+                            {
+                                *name = "data_bytes";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of data bytes received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 14:
+                            if (name != NULL)
+                            {
+                                *name = "multicast_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of multicast frames received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 15:
+                            if (name != NULL)
+                            {
+                                *name = "unicast_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of unicast frames received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 16:
+                            if (name != NULL)
+                            {
+                                *name = "mpcp_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of MPCP frames received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 17:
+                            if (name != NULL)
+                            {
+                                *name = "oam_bytes";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of OAM bytes received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 18:
+                            if (name != NULL)
+                            {
+                                *name = "oam_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of OAM frames received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 19:
+                            if (name != NULL)
+                            {
+                                *name = "report_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of report frames received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 20:
+                            if (name != NULL)
+                            {
+                                *name = "abort_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of abort frames received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 21:
+                            if (name != NULL)
+                            {
+                                *name = "fcs_error";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of bad FCS errors received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 22:
+                            if (name != NULL)
+                            {
+                                *name = "crc_8_error";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of CRC8 errors received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 23:
+                            if (name != NULL)
+                            {
+                                *name = "out_of_slot";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of out of slot errors received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 24:
+                            if (name != NULL)
+                            {
+                                *name = "oversize_error";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of oversize errors received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 25:
+                            if (name != NULL)
+                            {
+                                *name = "runt_error";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of runt errors received on this 10g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_EPON_PATH_10G_US_AUTO_ID_STAT_ALARM_RAISED:
+                            if (name != NULL)
+                            {
+                                *name = "stat_alarm_raised";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when a configured statistic alarm condition has been met.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_PATH_10G_US_AUTO_ID_STAT_ALARM_CLEARED:
+                            if (name != NULL)
+                            {
+                                *name = "stat_alarm_cleared";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when a configured statistic alarm condition is no longer met.";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "auto_cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Indication Configuration";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_EPON_PATH_1G_DS:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "cfg";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "stat";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "stat";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "bytes";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of bytes transmitted on this 1g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 1:
+                            if (name != NULL)
+                            {
+                                *name = "frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of frames transmitted on this 1g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 2:
+                            if (name != NULL)
+                            {
+                                *name = "frames_64";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 64 byte frames transmitted on this 1g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 3:
+                            if (name != NULL)
+                            {
+                                *name = "frames_65_127";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 65 to 127 byte frames transmitted on this 1g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 4:
+                            if (name != NULL)
+                            {
+                                *name = "frames_128_255";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 128 to 255 byte frames transmitted on this 1g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 5:
+                            if (name != NULL)
+                            {
+                                *name = "frames_256_511";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 256 to 511 byte frames transmitted on this 1g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 6:
+                            if (name != NULL)
+                            {
+                                *name = "frames_512_1023";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 512 to 1023 byte frames transmitted on this 1g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 7:
+                            if (name != NULL)
+                            {
+                                *name = "frames_1024_1518";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 1024 to 1518 byte frames transmitted on this 1g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 8:
+                            if (name != NULL)
+                            {
+                                *name = "frames_1519_2047";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 1519 to 2047 byte frames transmitted on this 1g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 9:
+                            if (name != NULL)
+                            {
+                                *name = "frames_2048_4095";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 2048 to 4095 byte frames transmitted on this 1g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 10:
+                            if (name != NULL)
+                            {
+                                *name = "frames_4096_9216";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 4096 to 9216 byte frames transmitted on this 1g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 11:
+                            if (name != NULL)
+                            {
+                                *name = "frames_9217_16383";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 9217 to 16383 byte frames transmitted on this 1g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 12:
+                            if (name != NULL)
+                            {
+                                *name = "broadcast_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of broadcast frames transmitted on this 1g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 13:
+                            if (name != NULL)
+                            {
+                                *name = "data_bytes";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of data bytes transmitted on this 1g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 14:
+                            if (name != NULL)
+                            {
+                                *name = "multicast_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of multicast frames transmitted on this 1g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 15:
+                            if (name != NULL)
+                            {
+                                *name = "unicast_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of unicast frames transmitted on this 1g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 16:
+                            if (name != NULL)
+                            {
+                                *name = "oam_bytes";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Number of OAM bytes transmitted on this 1g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 17:
+                            if (name != NULL)
+                            {
+                                *name = "oam_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Number of OAM frames transmitted on this 1g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 18:
+                            if (name != NULL)
+                            {
+                                *name = "gate_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Number of gate frames transmitted on this 1g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 19:
+                            if (name != NULL)
+                            {
+                                *name = "mpcp_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Number of MPCP frames transmitted on this 1g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 20:
+                            if (name != NULL)
+                            {
+                                *name = "abort_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Number of abort frames transmitted on this 1g downstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_EPON_PATH_1G_DS_AUTO_ID_STAT_ALARM_RAISED:
+                            if (name != NULL)
+                            {
+                                *name = "stat_alarm_raised";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when a configured statistic alarm condition has been met.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_PATH_1G_DS_AUTO_ID_STAT_ALARM_CLEARED:
+                            if (name != NULL)
+                            {
+                                *name = "stat_alarm_cleared";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when a configured statistic alarm condition is no longer met.";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "auto_cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Indication Configuration";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_EPON_PATH_1G_US:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "cfg";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "stat";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "stat";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "bytes";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of bytes received on this 1g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 1:
+                            if (name != NULL)
+                            {
+                                *name = "frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of frames received on this 1g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 2:
+                            if (name != NULL)
+                            {
+                                *name = "frames_64";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 64 byte frames received on this 1g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 3:
+                            if (name != NULL)
+                            {
+                                *name = "frames_65_127";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 65 to 127 byte frames received on this 1g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 4:
+                            if (name != NULL)
+                            {
+                                *name = "frames_128_255";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 128 to 255 byte frames received on this 1g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 5:
+                            if (name != NULL)
+                            {
+                                *name = "frames_256_511";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 256 to 511 byte frames received on this 1g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 6:
+                            if (name != NULL)
+                            {
+                                *name = "frames_512_1023";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 512 to 1023 byte frames received on this 1g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 7:
+                            if (name != NULL)
+                            {
+                                *name = "frames_1024_1518";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 1024 to 1518 byte frames received on this 1g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 8:
+                            if (name != NULL)
+                            {
+                                *name = "frames_1519_2047";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 1519 to 2047 byte frames received on this 1g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 9:
+                            if (name != NULL)
+                            {
+                                *name = "frames_2048_4095";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 2048 to 4095 byte frames received on this 1g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 10:
+                            if (name != NULL)
+                            {
+                                *name = "frames_4096_9216";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 4096 to 9216 byte frames received on this 1g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 11:
+                            if (name != NULL)
+                            {
+                                *name = "frames_9217_16383";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of 9217 to 16383 byte frames received on this 1g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 12:
+                            if (name != NULL)
+                            {
+                                *name = "broadcast_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of broadcast frames received on this 1g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 13:
+                            if (name != NULL)
+                            {
+                                *name = "data_bytes";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of data bytes received on this 1g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 14:
+                            if (name != NULL)
+                            {
+                                *name = "multicast_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of multicast frames received on this 1g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 15:
+                            if (name != NULL)
+                            {
+                                *name = "unicast_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of unicast frames received on this 1g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 16:
+                            if (name != NULL)
+                            {
+                                *name = "mpcp_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of MPCP frames received on this 1g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 17:
+                            if (name != NULL)
+                            {
+                                *name = "oam_bytes";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of OAM bytes received on this 1g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 18:
+                            if (name != NULL)
+                            {
+                                *name = "oam_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of OAM frames received on this 1g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 19:
+                            if (name != NULL)
+                            {
+                                *name = "report_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of report frames received on this 1g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 20:
+                            if (name != NULL)
+                            {
+                                *name = "abort_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of abort frames received on this 1g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 21:
+                            if (name != NULL)
+                            {
+                                *name = "fcs_error";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of bad FCS errors received on this 1g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 22:
+                            if (name != NULL)
+                            {
+                                *name = "crc_8_error";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of CRC8 errors received on this 1g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 23:
+                            if (name != NULL)
+                            {
+                                *name = "out_of_slot";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of out of slot errors received on this 1g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 24:
+                            if (name != NULL)
+                            {
+                                *name = "oversize_error";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of oversize errors received on this 1g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 25:
+                            if (name != NULL)
+                            {
+                                *name = "runt_error";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of runt errors received on this 1g upstream path.";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_EPON_PATH_1G_US_AUTO_ID_STAT_ALARM_RAISED:
+                            if (name != NULL)
+                            {
+                                *name = "stat_alarm_raised";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when a configured statistic alarm condition has been met.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_EPON_PATH_1G_US_AUTO_ID_STAT_ALARM_CLEARED:
+                            if (name != NULL)
+                            {
+                                *name = "stat_alarm_cleared";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when a configured statistic alarm condition is no longer met.";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "auto_cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Indication Configuration";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_EPON_RP:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "cfg";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_GPIO:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "cfg";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_GPON_ALLOC:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "cfg";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "stat";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "stat";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "rx_bytes";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received Bytes";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_GPON_ALLOC_AUTO_ID_CONFIGURATION_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "configuration_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Configuration Completed";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ALLOC_AUTO_ID_GET_ALLOC_STATS_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "get_alloc_stats_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Collected alloc ID statistics from get_stats operation";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ALLOC_AUTO_ID_STAT_ALARM_RAISED:
+                            if (name != NULL)
+                            {
+                                *name = "stat_alarm_raised";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when a configured statistic alarm condition has been met.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ALLOC_AUTO_ID_STAT_ALARM_CLEARED:
+                            if (name != NULL)
+                            {
+                                *name = "stat_alarm_cleared";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when a configured statistic alarm condition is no longer met.";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "auto_cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Indication Configuration";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_GPON_ALLOC_OPER_ID_SET_STATE:
+                            if (name != NULL)
+                            {
+                                *name = "set_state";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sets the alloc's activation state.  This is only used for protection switching on an active-standby PON.  In normal operation, this isn't necessary since allocs are activated/deactivated automatically along with the ONU.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ALLOC_OPER_ID_GET_STATS:
+                            if (name != NULL)
+                            {
+                                *name = "get_stats";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Run statistics collection for a given period of time";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_GPON_GEM_PORT:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "cfg";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "stat";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "stat";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "rx_packets";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received GEM frames";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 1:
+                            if (name != NULL)
+                            {
+                                *name = "rx_bytes";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received bytes";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 2:
+                            if (name != NULL)
+                            {
+                                *name = "tx_packets";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Transmitted GEM frames";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 3:
+                            if (name != NULL)
+                            {
+                                *name = "tx_bytes";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Transmitted bytes";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_GPON_GEM_PORT_AUTO_ID_CONFIGURATION_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "configuration_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Configuration Completed";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_GEM_PORT_AUTO_ID_STAT_ALARM_RAISED:
+                            if (name != NULL)
+                            {
+                                *name = "stat_alarm_raised";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when a configured statistic alarm condition has been met.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_GEM_PORT_AUTO_ID_STAT_ALARM_CLEARED:
+                            if (name != NULL)
+                            {
+                                *name = "stat_alarm_cleared";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when a configured statistic alarm condition is no longer met.";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "auto_cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Indication Configuration";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_GPON_GEM_PORT_OPER_ID_SET_STATE:
+                            if (name != NULL)
+                            {
+                                *name = "set_state";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sets the GEM port's activation state.  This is only used for protection switching on an active-standby PON.  In normal operation, this isn't necessary since GEM ports are activated/deactivated automatically along with the ONU.";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_GPON_IWF:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "cfg";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "stat";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "stat";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "ds_hit_event";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "DS hit event";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 1:
+                            if (name != NULL)
+                            {
+                                *name = "ds_miss_event";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "DS miss event";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 2:
+                            if (name != NULL)
+                            {
+                                *name = "ds_drop_due_to_miss_event";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "DS drop due to miss event";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 3:
+                            if (name != NULL)
+                            {
+                                *name = "ds_drop_due_to_hit_event";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "DS drop due to hit event";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 4:
+                            if (name != NULL)
+                            {
+                                *name = "ds_drop_to_disabled_gem";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "DS drop to disabled GEM";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 5:
+                            if (name != NULL)
+                            {
+                                *name = "new_mac_discovered";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "New MAC discovered";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 6:
+                            if (name != NULL)
+                            {
+                                *name = "move_event";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Move event";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 7:
+                            if (name != NULL)
+                            {
+                                *name = "new_mac_drop_due_to_fifo_full";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "New MAC drop due to fifo full";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_GPON_IWF_AUTO_ID_FLUSH_MAC_TABLE_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "flush_mac_table_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Flush MAC Table Completed";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_IWF_AUTO_ID_SCAN_MAC_TABLE_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "scan_mac_table_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "A MAC table scan initiated using the \"scan_mac_table\" operation is complete.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_IWF_AUTO_ID_STAT_ALARM_RAISED:
+                            if (name != NULL)
+                            {
+                                *name = "stat_alarm_raised";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when a configured statistic alarm condition has been met.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_IWF_AUTO_ID_STAT_ALARM_CLEARED:
+                            if (name != NULL)
+                            {
+                                *name = "stat_alarm_cleared";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when a configured statistic alarm condition is no longer met.";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "auto_cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Indication Configuration";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_GPON_IWF_OPER_ID_FLUSH_MAC_TABLE:
+                            if (name != NULL)
+                            {
+                                *name = "flush_mac_table";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Flush MAC Table";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_IWF_OPER_ID_SCAN_MAC_TABLE:
+                            if (name != NULL)
+                            {
+                                *name = "scan_mac_table";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Scans MAC table for a given MAC address then returns the associated information";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_GPON_IWF_DS_EGRESS_FLOW:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "cfg";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_GPON_IWF_DS_INGRESS_FLOW:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "cfg";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_GPON_IWF_MAC_TABLE:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "cfg";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_GPON_IWF_MAC_TABLE_AUTO_ID_NEW_MAC:
+                            if (name != NULL)
+                            {
+                                *name = "new_mac";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when a new MAC address / VID combination is seen in the upstream traffic stream.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_IWF_MAC_TABLE_AUTO_ID_MAC_AGED:
+                            if (name != NULL)
+                            {
+                                *name = "mac_aged";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when a MAC table entry ages.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_IWF_MAC_TABLE_AUTO_ID_MAC_MOVE:
+                            if (name != NULL)
+                            {
+                                *name = "mac_move";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when the MAC table is in move mode and a packet is seen that matches on MAC address / VID but doesn't match on flow ID.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_IWF_MAC_TABLE_AUTO_ID_MAC_DROPPED:
+                            if (name != NULL)
+                            {
+                                *name = "mac_dropped";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when an entry cannot be learned since the MAC table is full.";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "auto_cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Indication Configuration";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_GPON_IWF_US_FLOW:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "cfg";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_GPON_NI:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "cfg";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "stat";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "stat";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "fec_codewords";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received FEC codewords";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 1:
+                            if (name != NULL)
+                            {
+                                *name = "fec_codewords_uncorrected";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received uncorrected FEC codewords";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 2:
+                            if (name != NULL)
+                            {
+                                *name = "bip8_bytes";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received bytes protected by bip8";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 3:
+                            if (name != NULL)
+                            {
+                                *name = "bip8_errors";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received bip8 errors";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 4:
+                            if (name != NULL)
+                            {
+                                *name = "rx_gem_packets";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received GEM frames";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 5:
+                            if (name != NULL)
+                            {
+                                *name = "rx_gem_dropped";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received dropped GEM ID packets";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 6:
+                            if (name != NULL)
+                            {
+                                *name = "rx_gem_idle";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received idle GEM frames";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 7:
+                            if (name != NULL)
+                            {
+                                *name = "rx_gem_corrected";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received corrected GEM frames";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 8:
+                            if (name != NULL)
+                            {
+                                *name = "rx_gem_illegal";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received illegal GEM frames";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 9:
+                            if (name != NULL)
+                            {
+                                *name = "rx_allocations_valid";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received valid allocations";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 10:
+                            if (name != NULL)
+                            {
+                                *name = "rx_allocations_invalid";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received invalid allocations";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 11:
+                            if (name != NULL)
+                            {
+                                *name = "rx_allocations_disabled";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received disabled allocations";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 12:
+                            if (name != NULL)
+                            {
+                                *name = "rx_ploams";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received Ploams";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 13:
+                            if (name != NULL)
+                            {
+                                *name = "rx_ploams_non_idle";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received non idle Ploams";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 14:
+                            if (name != NULL)
+                            {
+                                *name = "rx_ploams_error";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received error Ploams";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 15:
+                            if (name != NULL)
+                            {
+                                *name = "rx_ploams_dropped";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received dropped Ploams";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 16:
+                            if (name != NULL)
+                            {
+                                *name = "rx_cpu";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received CPU packets";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 17:
+                            if (name != NULL)
+                            {
+                                *name = "rx_omci";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received OMCI packets";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 18:
+                            if (name != NULL)
+                            {
+                                *name = "rx_omci_packets_crc_error";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received OMCI packets with CRC errors";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 19:
+                            if (name != NULL)
+                            {
+                                *name = "rx_dropped_too_short";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received packets dropped due to length too short";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 20:
+                            if (name != NULL)
+                            {
+                                *name = "rx_dropped_too_long";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received packet dropped due to length too long";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 21:
+                            if (name != NULL)
+                            {
+                                *name = "rx_crc_errors";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received packet dropped due to crc error";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 22:
+                            if (name != NULL)
+                            {
+                                *name = "rx_key_errors";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received packet dropped due to key error";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 23:
+                            if (name != NULL)
+                            {
+                                *name = "rx_fragments_errors";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received packet dropped due to fragmentation error";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 24:
+                            if (name != NULL)
+                            {
+                                *name = "rx_packets_dropped";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Global dropped packets";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 25:
+                            if (name != NULL)
+                            {
+                                *name = "tx_gem";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Transmitted GEM frames";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 26:
+                            if (name != NULL)
+                            {
+                                *name = "tx_ploams";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Transmitted Ploams";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 27:
+                            if (name != NULL)
+                            {
+                                *name = "tx_gem_fragments";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Transmitted GEM fragments";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 28:
+                            if (name != NULL)
+                            {
+                                *name = "tx_cpu";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Transmitted CPU packets";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 29:
+                            if (name != NULL)
+                            {
+                                *name = "tx_omci";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Transmitted OMCI packets";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 30:
+                            if (name != NULL)
+                            {
+                                *name = "tx_cpu_omci_packets_dropped";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Transmit packets dropped due to illegal length";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 31:
+                            if (name != NULL)
+                            {
+                                *name = "tx_dropped_illegal_length";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Transmitted packet dropped due to illegal length";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 32:
+                            if (name != NULL)
+                            {
+                                *name = "tx_dropped_tpid_miss";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Dropped because of TPID miss";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 33:
+                            if (name != NULL)
+                            {
+                                *name = "tx_dropped_vid_miss";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Dropped because of VID miss";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_GPON_NI_AUTO_ID_STATE_CHANGE_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "state_change_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "State Change Completed";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_AUTO_ID_LOS:
+                            if (name != NULL)
+                            {
+                                *name = "los";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "LOS";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_AUTO_ID_SERIAL_NUMBER_ACQUISITION_CYCLE_START:
+                            if (name != NULL)
+                            {
+                                *name = "serial_number_acquisition_cycle_start";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Serial Number Acquisition Cycle Start";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_AUTO_ID_PROTECTION_SWITCHING_TRAFFIC_RESUME:
+                            if (name != NULL)
+                            {
+                                *name = "protection_switching_traffic_resume";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Protection Switching Traffic Resume";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_AUTO_ID_PROTECTION_SWITCHING_ONUS_RANGED:
+                            if (name != NULL)
+                            {
+                                *name = "protection_switching_onus_ranged";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "After a switchover is complete and all ONU ranging times have stabilized, this indication is sent to inform the host of all new ONU EQDs.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_AUTO_ID_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "protection_switching_switchover_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Protection Switching Switchover Completed";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_AUTO_ID_STANDBY_PON_MONITORING_CYCLE_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "standby_pon_monitoring_cycle_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Standby PON Monitoring Cycle Completed";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_AUTO_ID_ONU_DISCOVERED:
+                            if (name != NULL)
+                            {
+                                *name = "onu_discovered";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "ONU Discovered";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_AUTO_ID_CPU_PACKETS_FAILURE:
+                            if (name != NULL)
+                            {
+                                *name = "cpu_packets_failure";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "A failure was encountered during the \"cpu_packets\" proxy operation.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_AUTO_ID_ROGUE_DETECTION_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "rogue_detection_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Rogue detection completed";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_AUTO_ID_DEACTIVATE_ALL_ONUS_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "deactivate_all_onus_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "deactivate all onus completed";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_AUTO_ID_DISABLE_ALL_ONUS_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "disable_all_onus_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "disable all onus completed";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_AUTO_ID_ACTIVATE_ALL_ONUS_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "activate_all_onus_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "activate all onus completed";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_AUTO_ID_ENABLE_ALL_ONUS_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "enable_all_onus_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "enable all onus completed";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_AUTO_ID_TOD_REQUEST_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "tod_request_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "TOD request completed";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_AUTO_ID_ONU_UPGRADE_COMPLETE:
+                            if (name != NULL)
+                            {
+                                *name = "onu_upgrade_complete";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "ONU Upgrade Complete";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_AUTO_ID_ROGUE_ONU_SPECIAL_MAP_CYCLE_START:
+                            if (name != NULL)
+                            {
+                                *name = "rogue_onu_special_map_cycle_start";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Rogue ONU special map cycle start";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_AUTO_ID_STAT_ALARM_RAISED:
+                            if (name != NULL)
+                            {
+                                *name = "stat_alarm_raised";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when a configured statistic alarm condition has been met.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_AUTO_ID_STAT_ALARM_CLEARED:
+                            if (name != NULL)
+                            {
+                                *name = "stat_alarm_cleared";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when a configured statistic alarm condition is no longer met.";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "auto_cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Indication Configuration";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_GPON_NI_OPER_ID_SET_PON_STATE:
+                            if (name != NULL)
+                            {
+                                *name = "set_pon_state";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Set PON State";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_OPER_ID_RESET:
+                            if (name != NULL)
+                            {
+                                *name = "reset";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Reset";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_OPER_ID_DISABLE_SERIAL_NUMBER:
+                            if (name != NULL)
+                            {
+                                *name = "disable_serial_number";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Disable Serial Number";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_OPER_ID_SINGLE_REQUEST_STANDBY_PON_MONITORING:
+                            if (name != NULL)
+                            {
+                                *name = "single_request_standby_pon_monitoring";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Single request for PON monitoring";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_OPER_ID_SET_ONU_STATE:
+                            if (name != NULL)
+                            {
+                                *name = "set_onu_state";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Set the operation state of all ONUs.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_OPER_ID_ROGUE_DETECTION_WINDOW:
+                            if (name != NULL)
+                            {
+                                *name = "rogue_detection_window";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Rogue Detection Window";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_OPER_ID_TOD_REQUEST:
+                            if (name != NULL)
+                            {
+                                *name = "tod_request";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "TOD request";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_OPER_ID_PROTECTION_SWITCHING_TYPE_C_SET_MULTIPLE_ONU_STATE:
+                            if (name != NULL)
+                            {
+                                *name = "protection_switching_type_c_set_multiple_onu_state";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "protection switching type c set multiple onu state";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_OPER_ID_START_ONU_UPGRADE:
+                            if (name != NULL)
+                            {
+                                *name = "start_onu_upgrade";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "OLT to ONU firmware transfer";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_PROXY:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_GPON_NI_PROXY_ID_CPU_PACKETS:
+                            if (name != NULL)
+                            {
+                                *name = "cpu_packets";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "GPON CPU Packets";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_NI_PROXY_ID_BROADCAST_PLOAM_PACKET:
+                            if (name != NULL)
+                            {
+                                *name = "broadcast_ploam_packet";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Broadcast PLOAM Packet";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_GPON_ONU:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "cfg";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "stat";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "stat";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "fec_codewords";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Total received FEC codewords";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 1:
+                            if (name != NULL)
+                            {
+                                *name = "fec_bytes_corrected";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "FEC codewords corrected bytes";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 2:
+                            if (name != NULL)
+                            {
+                                *name = "fec_codewords_corrected";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "FEC corrected codewords error ";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 3:
+                            if (name != NULL)
+                            {
+                                *name = "fec_codewords_uncorrected";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "FEC not corrected codewords error";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 4:
+                            if (name != NULL)
+                            {
+                                *name = "bip8_bytes";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received bytes for BIP8";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 5:
+                            if (name != NULL)
+                            {
+                                *name = "bip8_errors";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Bit error according to BIP8";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 6:
+                            if (name != NULL)
+                            {
+                                *name = "rx_ploams_crc_error";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received PLOAMs with CRC error";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 7:
+                            if (name != NULL)
+                            {
+                                *name = "rx_ploams_non_idle";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received non idle PLOAMs";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 8:
+                            if (name != NULL)
+                            {
+                                *name = "positive_drift";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Positive drift";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 9:
+                            if (name != NULL)
+                            {
+                                *name = "negative_drift";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Negative drift";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 10:
+                            if (name != NULL)
+                            {
+                                *name = "rx_omci";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received OMCI packets";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 11:
+                            if (name != NULL)
+                            {
+                                *name = "rx_omci_packets_crc_error";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received OMCI packets with CRC errors";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 12:
+                            if (name != NULL)
+                            {
+                                *name = "ber_reported";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "BER reported";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 13:
+                            if (name != NULL)
+                            {
+                                *name = "unreceived_burst";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Unreceived burst";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 14:
+                            if (name != NULL)
+                            {
+                                *name = "lcdg_errors";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "LCDG errors";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 15:
+                            if (name != NULL)
+                            {
+                                *name = "rdi_errors";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "RDI errors";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 16:
+                            if (name != NULL)
+                            {
+                                *name = "rx_bytes";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "rx bytes";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 17:
+                            if (name != NULL)
+                            {
+                                *name = "rx_packets";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "rx packets";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 18:
+                            if (name != NULL)
+                            {
+                                *name = "tx_bytes";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "tx bytes";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 19:
+                            if (name != NULL)
+                            {
+                                *name = "tx_packets";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "tx packets";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_GPON_ONU_AUTO_ID_ONU_ALARM:
+                            if (name != NULL)
+                            {
+                                *name = "onu_alarm";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "ONU Alarm";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_DOWI:
+                            if (name != NULL)
+                            {
+                                *name = "dowi";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Drift of Window of ONUi";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_SFI:
+                            if (name != NULL)
+                            {
+                                *name = "sfi";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Signal Fail of ONUi";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_SDI:
+                            if (name != NULL)
+                            {
+                                *name = "sdi";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Signal Degraded of ONUi";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_DFI:
+                            if (name != NULL)
+                            {
+                                *name = "dfi";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Receive Dying-Gasp of ONUi";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_SUFI:
+                            if (name != NULL)
+                            {
+                                *name = "sufi";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "SUFi";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_LOAI:
+                            if (name != NULL)
+                            {
+                                *name = "loai";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "LOAi";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_DGI:
+                            if (name != NULL)
+                            {
+                                *name = "dgi";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Receive Dying-Gasp of ONUi";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_PEE:
+                            if (name != NULL)
+                            {
+                                *name = "pee";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "PEE";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_PST:
+                            if (name != NULL)
+                            {
+                                *name = "pst";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "PST";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_TIWI:
+                            if (name != NULL)
+                            {
+                                *name = "tiwi";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Transmission Interference Warning";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_LOKI:
+                            if (name != NULL)
+                            {
+                                *name = "loki";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "LOki";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_MEMI:
+                            if (name != NULL)
+                            {
+                                *name = "memi";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "MEMi";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_OMCI_PORT_ID_CONFIGURATION_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "omci_port_id_configuration_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "OMCI PORT ID Configuration Completed";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_BER_INTERVAL_CONFIGURATION_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "ber_interval_configuration_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "BER Interval Configuration Completed";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_ERR:
+                            if (name != NULL)
+                            {
+                                *name = "err";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "ERR";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_REI:
+                            if (name != NULL)
+                            {
+                                *name = "rei";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "REI";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_RANGING_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "ranging_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Ranging Completed";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_PASSWORD_AUTHENTICATION_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "password_authentication_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Password Authentication Completed";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_ONU_ACTIVATION_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "onu_activation_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "ONU Activation Completed";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_ONU_DEACTIVATION_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "onu_deactivation_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "ONU Deactivation Completed";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_ONU_ENABLE_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "onu_enable_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "ONU Enable Completed";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_ONU_DISABLE_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "onu_disable_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "ONU Disable Completed";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_INVALID_DBRU_REPORT:
+                            if (name != NULL)
+                            {
+                                *name = "invalid_dbru_report";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Invalid DBRu Report";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_KEY_EXCHANGE_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "key_exchange_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Key Exchange Completed";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_KEY_EXCHANGE_KEY_REQUEST_TIMEOUT:
+                            if (name != NULL)
+                            {
+                                *name = "key_exchange_key_request_timeout";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Key Exchange Key Request Timeout";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_KEY_EXCHANGE_CYCLE_SKIPPED:
+                            if (name != NULL)
+                            {
+                                *name = "key_exchange_cycle_skipped";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Key Exchange Cycle Skipped";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_KEY_EXCHANGE_KEY_MISMATCH:
+                            if (name != NULL)
+                            {
+                                *name = "key_exchange_key_mismatch";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Key Exchange Key Mismatch";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_KEY_EXCHANGE_UNCONSECUTIVE_INDEX:
+                            if (name != NULL)
+                            {
+                                *name = "key_exchange_unconsecutive_index";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Key Exchange Unconsecutive Index";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_RSSI_MEASUREMENT_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "rssi_measurement_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "RSSI Measurement Completed";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_KEY_EXCHANGE_DECRYPT_REQUIRED:
+                            if (name != NULL)
+                            {
+                                *name = "key_exchange_decrypt_required";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Key Exchange Decrypt Required";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_OPTICAL_REFLECTION:
+                            if (name != NULL)
+                            {
+                                *name = "optical_reflection";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "An optical reflection condition was detected.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_ONU_ACTIVATION_STANDBY_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "onu_activation_standby_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "onu activation standby completed";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_POWER_MANAGEMENT_STATE_CHANGE:
+                            if (name != NULL)
+                            {
+                                *name = "power_management_state_change";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Notification that an ONUs power management state has changed.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_POSSIBLE_DRIFT:
+                            if (name != NULL)
+                            {
+                                *name = "possible_drift";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "An ONU in a low power state may be experiencing drift beyond the configured threshold. The estimate may be inaccurate depending on ONU behavior. Actual drift may be less than estimated.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_STAT_ALARM_RAISED:
+                            if (name != NULL)
+                            {
+                                *name = "stat_alarm_raised";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when a configured statistic alarm condition has been met.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_AUTO_ID_STAT_ALARM_CLEARED:
+                            if (name != NULL)
+                            {
+                                *name = "stat_alarm_cleared";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when a configured statistic alarm condition is no longer met.";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "auto_cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Indication Configuration";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_GPON_ONU_OPER_ID_SET_ONU_STATE:
+                            if (name != NULL)
+                            {
+                                *name = "set_onu_state";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Set ONU State";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_OPER_ID_RSSI_MEASUREMENT:
+                            if (name != NULL)
+                            {
+                                *name = "rssi_measurement";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "RSSI Measurement";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_OPER_ID_CHANGE_POWER_LEVEL:
+                            if (name != NULL)
+                            {
+                                *name = "change_power_level";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Change Power Level";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_PROXY:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_GPON_ONU_PROXY_ID_CPU_PACKETS:
+                            if (name != NULL)
+                            {
+                                *name = "cpu_packets";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "GPON CPU Packets";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_PROXY_ID_PLOAM_PACKET:
+                            if (name != NULL)
+                            {
+                                *name = "ploam_packet";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "PLOAM Packet";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_PROXY_RX:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_GPON_ONU_PROXY_RX_ID_CPU_PACKET:
+                            if (name != NULL)
+                            {
+                                *name = "cpu_packet";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Indicates CPU packet was received on the US from this ONU id";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_GPON_ONU_PROXY_RX_ID_OMCI_PACKET:
+                            if (name != NULL)
+                            {
+                                *name = "omci_packet";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Indicates OMCI packet was received on the US from this ONU id";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_GPON_TRX:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "cfg";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_LOG_ENTRY:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "cfg";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "stat";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "stat";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "msg_count";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "msg count";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 1:
+                            if (name != NULL)
+                            {
+                                *name = "lost_msg_count";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "lost msg count";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_LOG_ENTRY_AUTO_ID_STAT_ALARM_RAISED:
+                            if (name != NULL)
+                            {
+                                *name = "stat_alarm_raised";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when a configured statistic alarm condition has been met.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_LOG_ENTRY_AUTO_ID_STAT_ALARM_CLEARED:
+                            if (name != NULL)
+                            {
+                                *name = "stat_alarm_cleared";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when a configured statistic alarm condition is no longer met.";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "auto_cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Indication Configuration";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_LOGGER:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "cfg";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "stat";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "stat";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "lines_in_log";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "lines in log";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_LOGGER_AUTO_ID_STAT_ALARM_RAISED:
+                            if (name != NULL)
+                            {
+                                *name = "stat_alarm_raised";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when a configured statistic alarm condition has been met.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_LOGGER_AUTO_ID_STAT_ALARM_CLEARED:
+                            if (name != NULL)
+                            {
+                                *name = "stat_alarm_cleared";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when a configured statistic alarm condition is no longer met.";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "auto_cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Indication Configuration";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_LOGGER_OPER_ID_CLEAR_LOG:
+                            if (name != NULL)
+                            {
+                                *name = "clear_log";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "clear log";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_NNI:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "cfg";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "stat";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "stat";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "rx_frames_64";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The count of RX 64 byte frames on this NNI.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 1:
+                            if (name != NULL)
+                            {
+                                *name = "rx_frames_65_127";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The count of RX 65 to 127 byte frames on this NNI.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 2:
+                            if (name != NULL)
+                            {
+                                *name = "rx_frames_128_255";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The count of RX 128 to 255 byte frames on this NNI.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 3:
+                            if (name != NULL)
+                            {
+                                *name = "rx_frames_256_511";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The count of RX 256 to 511 byte frames on this NNI.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 4:
+                            if (name != NULL)
+                            {
+                                *name = "rx_frames_512_1023";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The count of RX 512 to 1023 byte frames on this NNI.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 5:
+                            if (name != NULL)
+                            {
+                                *name = "rx_frames_1024_1518";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The count of RX 1024 to 1518 byte frames on this NNI.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 6:
+                            if (name != NULL)
+                            {
+                                *name = "rx_frames_1519_2047";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The count of RX 1519 to 2047 byte frames on this NNI.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 7:
+                            if (name != NULL)
+                            {
+                                *name = "rx_frames_2048_4095";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The count of RX 2048 to 4095 byte frames on this NNI.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 8:
+                            if (name != NULL)
+                            {
+                                *name = "rx_frames_4096_9216";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The count of RX 4096 to 9216 byte frames on this NNI.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 9:
+                            if (name != NULL)
+                            {
+                                *name = "rx_frames_9217_16383";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The count of RX 9217 to 16383 byte frames on this NNI.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 10:
+                            if (name != NULL)
+                            {
+                                *name = "rx_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of received frames on this NNI. This includes all errored frames as well.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 11:
+                            if (name != NULL)
+                            {
+                                *name = "rx_bytes";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of received bytes on this NNI. This includes all errored frames as well.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 12:
+                            if (name != NULL)
+                            {
+                                *name = "rx_good_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of received good frames on this NNI.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 13:
+                            if (name != NULL)
+                            {
+                                *name = "rx_unicast_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of received unicast frames on this NNI.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 14:
+                            if (name != NULL)
+                            {
+                                *name = "rx_multicast_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of received multicast frames on this NNI.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 15:
+                            if (name != NULL)
+                            {
+                                *name = "rx_broadcast_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of received broadcast frames on this NNI.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 16:
+                            if (name != NULL)
+                            {
+                                *name = "rx_fcs_errors";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of received FCS errors on this NNI.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 17:
+                            if (name != NULL)
+                            {
+                                *name = "rx_control_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of received control frames on this NNI.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 18:
+                            if (name != NULL)
+                            {
+                                *name = "rx_pause_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of received pause frames on this NNI.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 19:
+                            if (name != NULL)
+                            {
+                                *name = "rx_pfc_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of received PFC frames on this NNI.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 20:
+                            if (name != NULL)
+                            {
+                                *name = "rx_unsupported_opcode";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of received Unsupported Opcode frames on this NNI.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 21:
+                            if (name != NULL)
+                            {
+                                *name = "rx_unsupported_da";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of received unsupported DA frames on this NNI.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 22:
+                            if (name != NULL)
+                            {
+                                *name = "rx_alignment_errors";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of received alignment errors on this NNI.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 23:
+                            if (name != NULL)
+                            {
+                                *name = "rx_length_out_of_range";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of received length out of range errors on this NNI.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 24:
+                            if (name != NULL)
+                            {
+                                *name = "rx_code_errors";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of received code errors on this NNI.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 25:
+                            if (name != NULL)
+                            {
+                                *name = "rx_oversized_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of received oversized frames on this NNI.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 26:
+                            if (name != NULL)
+                            {
+                                *name = "rx_jabber_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of received jabber frames on this NNI. these are oversized frames that also contain an invalid CRC, code error, or IEEE length check error.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 27:
+                            if (name != NULL)
+                            {
+                                *name = "rx_mtu_check_errors";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of received MTU Check Errors on this NNI.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 28:
+                            if (name != NULL)
+                            {
+                                *name = "rx_promiscuous_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of received frames on this NNI that are not control packets and have a DA that is not matching with the RX SA.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 29:
+                            if (name != NULL)
+                            {
+                                *name = "rx_vlan_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of received VLAN tagged frames on this NNI (with TPID 8100). This counts both single and double tagged frames.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 30:
+                            if (name != NULL)
+                            {
+                                *name = "rx_double_vlan_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of received double VLAN tagged frames on this NNI (with TPID 8100). ";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 31:
+                            if (name != NULL)
+                            {
+                                *name = "rx_truncated_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of received truncated frames on this NNI. This is likely due to RX FIFO Full. ";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 32:
+                            if (name != NULL)
+                            {
+                                *name = "rx_undersize_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of received undersized frames on this NNI.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 33:
+                            if (name != NULL)
+                            {
+                                *name = "rx_fragmented_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of received fragmented frames on this NNI.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 34:
+                            if (name != NULL)
+                            {
+                                *name = "rx_runt_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of received runt frames on this NNI.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 35:
+                            if (name != NULL)
+                            {
+                                *name = "tx_frames_64";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The count of TX 64 byte frames on this NNI.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 36:
+                            if (name != NULL)
+                            {
+                                *name = "tx_frames_65_127";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The count of TX 65 to 127 byte frames on this NNI.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 37:
+                            if (name != NULL)
+                            {
+                                *name = "tx_frames_128_255";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The count of TX 128 to 255 byte frames on this NNI.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 38:
+                            if (name != NULL)
+                            {
+                                *name = "tx_frames_256_511";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The count of TX 256 to 511 byte frames on this NNI.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 39:
+                            if (name != NULL)
+                            {
+                                *name = "tx_frames_512_1023";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The count of TX 512 to 1023 byte frames on this NNI.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 40:
+                            if (name != NULL)
+                            {
+                                *name = "tx_frames_1024_1518";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The count of TX 1024 to 1518 byte frames on this NNI.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 41:
+                            if (name != NULL)
+                            {
+                                *name = "tx_frames_1519_2047";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The count of TX 1519 to 2047 byte frames on this NNI.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 42:
+                            if (name != NULL)
+                            {
+                                *name = "tx_frames_2048_4095";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The count of TX 2048 to 4095 byte frames on this NNI.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 43:
+                            if (name != NULL)
+                            {
+                                *name = "tx_frames_4096_9216";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The count of TX 4096 to 9216 byte frames on this NNI.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 44:
+                            if (name != NULL)
+                            {
+                                *name = "tx_frames_9217_16383";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The count of TX 9217 to 16383 byte frames on this NNI.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 45:
+                            if (name != NULL)
+                            {
+                                *name = "tx_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of transmitted frames on this NNI. This includes all errored frames as well.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 46:
+                            if (name != NULL)
+                            {
+                                *name = "tx_bytes";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of transmitted bytes on this NNI. This includes all errored frames as well.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 47:
+                            if (name != NULL)
+                            {
+                                *name = "tx_good_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of transmitted good frames on this NNI.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 48:
+                            if (name != NULL)
+                            {
+                                *name = "tx_unicast_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of transmitted unicast frames on this NNI.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 49:
+                            if (name != NULL)
+                            {
+                                *name = "tx_multicast_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of transmitted multicast frames on this NNI.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 50:
+                            if (name != NULL)
+                            {
+                                *name = "tx_broadcast_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of transmitted broadcast frames on this NNI.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 51:
+                            if (name != NULL)
+                            {
+                                *name = "tx_pause_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of transmitted pause frames on this NNI.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 52:
+                            if (name != NULL)
+                            {
+                                *name = "tx_pfc_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of transmitted PFC frames on this NNI.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 53:
+                            if (name != NULL)
+                            {
+                                *name = "tx_jabber_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of transmitted jabber frames on this NNI. These are oversized frames that also contain an invalid FCS.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 54:
+                            if (name != NULL)
+                            {
+                                *name = "tx_fcs_errors";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of transmitted FCS errors on this NNI. ";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 55:
+                            if (name != NULL)
+                            {
+                                *name = "tx_control_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of transmitted control frames on this NNI. ";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 56:
+                            if (name != NULL)
+                            {
+                                *name = "tx_oversize_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of transmitted oversized frames on this NNI. ";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 57:
+                            if (name != NULL)
+                            {
+                                *name = "tx_fragmented_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of transmitted fragmented frames on this NNI. ";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 58:
+                            if (name != NULL)
+                            {
+                                *name = "tx_error_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of transmitted errored frames on this NNI. ";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 59:
+                            if (name != NULL)
+                            {
+                                *name = "tx_vlan_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of transmitted VLAN tagged frames on this NNI (with TPID 8100). This counts both single and double tagged frames.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 60:
+                            if (name != NULL)
+                            {
+                                *name = "tx_double_vlan_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of transmitted double VLAN tagged frames on this NNI (with TPID 8100). ";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 61:
+                            if (name != NULL)
+                            {
+                                *name = "tx_runt_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of transmitted runt frames on this NNI. ";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 62:
+                            if (name != NULL)
+                            {
+                                *name = "tx_underrun_frames";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "The number of transmitted underrun frames on this NNI. Thus happens when a frame encounters a MAC underrun (Tx Sync FIFO runs out of data before the end of packet).";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_NNI_AUTO_ID_STATUS_CHANGED:
+                            if (name != NULL)
+                            {
+                                *name = "status_changed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "NNI Link status changed";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_NNI_AUTO_ID_STAT_ALARM_RAISED:
+                            if (name != NULL)
+                            {
+                                *name = "stat_alarm_raised";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when a configured statistic alarm condition has been met.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_NNI_AUTO_ID_STAT_ALARM_CLEARED:
+                            if (name != NULL)
+                            {
+                                *name = "stat_alarm_cleared";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when a configured statistic alarm condition is no longer met.";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "auto_cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Indication Configuration";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_NNI_SERDES:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "cfg";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_SOFTWARE_ERROR:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "cfg";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_TRX_CALIBRATION:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_TRX_CALIBRATION_AUTO_ID_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "capture_window_and_statistic_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Capture window and statistic completed";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "auto_cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Indication Configuration";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_TRX_CALIBRATION_OPER_ID_START_CAPTURE_WINDOW:
+                            if (name != NULL)
+                            {
+                                *name = "start_capture_window";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "start capture window";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_TRX_CALIBRATION_OPER_ID_STOP_CAPTURE_WINDOW:
+                            if (name != NULL)
+                            {
+                                *name = "stop_capture_window";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "stop capture window";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_XGPON_ALLOC:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "cfg";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "stat";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "stat";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "rx_bytes";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Number of alloc ID received bytes.";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_XGPON_ALLOC_AUTO_ID_CONFIGURATION_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "configuration_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Configuration Completed";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ALLOC_AUTO_ID_GET_ALLOC_STATS_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "get_alloc_stats_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Collected alloc ID statistics from get_stats operation";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ALLOC_AUTO_ID_STAT_ALARM_RAISED:
+                            if (name != NULL)
+                            {
+                                *name = "stat_alarm_raised";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when a configured statistic alarm condition has been met.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ALLOC_AUTO_ID_STAT_ALARM_CLEARED:
+                            if (name != NULL)
+                            {
+                                *name = "stat_alarm_cleared";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when a configured statistic alarm condition is no longer met.";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "auto_cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Indication Configuration";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_XGPON_ALLOC_OPER_ID_GET_STATS:
+                            if (name != NULL)
+                            {
+                                *name = "get_stats";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Run statistics collection for a given period of time";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ALLOC_OPER_ID_SET_STATE:
+                            if (name != NULL)
+                            {
+                                *name = "set_state";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sets the alloc's activation state.  This is only used for protection switching on an active-standby PON.  In normal operation, this isn't necessary since allocs are activated/deactivated automatically along with the ONU.";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_XGPON_GEM_PORT:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "cfg";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "stat";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "stat";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "tx_bytes";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "TX bytes";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 1:
+                            if (name != NULL)
+                            {
+                                *name = "tx_packets";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "TX packets";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 2:
+                            if (name != NULL)
+                            {
+                                *name = "rx_packets";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "RX packets";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 3:
+                            if (name != NULL)
+                            {
+                                *name = "rx_bytes";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "RX bytes";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_XGPON_GEM_PORT_AUTO_ID_STAT_ALARM_RAISED:
+                            if (name != NULL)
+                            {
+                                *name = "stat_alarm_raised";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when a configured statistic alarm condition has been met.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_GEM_PORT_AUTO_ID_STAT_ALARM_CLEARED:
+                            if (name != NULL)
+                            {
+                                *name = "stat_alarm_cleared";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when a configured statistic alarm condition is no longer met.";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "auto_cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Indication Configuration";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_XGPON_IWF:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "cfg";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_XGPON_NI:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "cfg";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "stat";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "stat";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "fec_codewords";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Receive FEC codewords";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 1:
+                            if (name != NULL)
+                            {
+                                *name = "bip32_bytes";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received bytes protected by bip32";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 2:
+                            if (name != NULL)
+                            {
+                                *name = "bip32_errors";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received bip32 errors";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 3:
+                            if (name != NULL)
+                            {
+                                *name = "rx_xgtc_headers";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received valid XGTC headers";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 4:
+                            if (name != NULL)
+                            {
+                                *name = "rx_xgtc_corrected";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received corrected XGTC headers";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 5:
+                            if (name != NULL)
+                            {
+                                *name = "rx_xgtc_uncorrected";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received uncorrected XGTC headers";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 6:
+                            if (name != NULL)
+                            {
+                                *name = "rx_xgem";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received valid XGEM frames";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 7:
+                            if (name != NULL)
+                            {
+                                *name = "rx_xgem_dropped";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received dropped XGEM ID frames";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 8:
+                            if (name != NULL)
+                            {
+                                *name = "rx_xgem_idle";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received idle XGEM frames";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 9:
+                            if (name != NULL)
+                            {
+                                *name = "rx_xgem_corrected";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received corrected XGEM frames";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 10:
+                            if (name != NULL)
+                            {
+                                *name = "rx_crc_error";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received packets with CRC error";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 11:
+                            if (name != NULL)
+                            {
+                                *name = "rx_fragment_error";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received fragment errors";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 12:
+                            if (name != NULL)
+                            {
+                                *name = "rx_packets_dropped";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Global dropped packets";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 13:
+                            if (name != NULL)
+                            {
+                                *name = "rx_dropped_too_short";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received packets dropped due to length too short";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 14:
+                            if (name != NULL)
+                            {
+                                *name = "rx_dropped_too_long";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received packet dropped due to length too long";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 15:
+                            if (name != NULL)
+                            {
+                                *name = "rx_key_error";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received key errors";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 16:
+                            if (name != NULL)
+                            {
+                                *name = "tx_ploams";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Transmitted Ploams";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 17:
+                            if (name != NULL)
+                            {
+                                *name = "rx_ploams_dropped";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received dropped Ploams";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 18:
+                            if (name != NULL)
+                            {
+                                *name = "rx_allocations_valid";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received valid allocations";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 19:
+                            if (name != NULL)
+                            {
+                                *name = "rx_allocations_invalid";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received invalid allocations";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 20:
+                            if (name != NULL)
+                            {
+                                *name = "rx_allocations_disabled";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received disabled allocations";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 21:
+                            if (name != NULL)
+                            {
+                                *name = "rx_ploams";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received Ploams";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 22:
+                            if (name != NULL)
+                            {
+                                *name = "rx_ploams_non_idle";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received non idle Ploams";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 23:
+                            if (name != NULL)
+                            {
+                                *name = "rx_ploams_error";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received error Ploams";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 24:
+                            if (name != NULL)
+                            {
+                                *name = "rx_cpu";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received CPU packets";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 25:
+                            if (name != NULL)
+                            {
+                                *name = "rx_omci";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received OMCI packets";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 26:
+                            if (name != NULL)
+                            {
+                                *name = "rx_omci_packets_crc_error";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received OMCI packets with CRC errors";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 27:
+                            if (name != NULL)
+                            {
+                                *name = "tx_packets";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Transmitted packets";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 28:
+                            if (name != NULL)
+                            {
+                                *name = "tx_xgem";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Transmitted XGEM fragments";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 29:
+                            if (name != NULL)
+                            {
+                                *name = "tx_cpu";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Transmitted CPU packets";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 30:
+                            if (name != NULL)
+                            {
+                                *name = "tx_omci";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Transmitted OMCI packets";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 31:
+                            if (name != NULL)
+                            {
+                                *name = "tx_cpu_omci_packets_dropped";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Transmit packets dropped due to illegal length";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 32:
+                            if (name != NULL)
+                            {
+                                *name = "tx_dropped_illegal_length";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Transmit packets dropped due to illegal length";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 33:
+                            if (name != NULL)
+                            {
+                                *name = "tx_dropped_tpid_miss";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Transmit packets dropped due to TPID miss";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 34:
+                            if (name != NULL)
+                            {
+                                *name = "tx_dropped_vid_miss";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Transmit packets droped due to VID miss";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_XGPON_NI_AUTO_ID_STATE_CHANGE_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "state_change_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "State Change Completed";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_AUTO_ID_LOS:
+                            if (name != NULL)
+                            {
+                                *name = "los";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "LOS";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_AUTO_ID_SERIAL_NUMBER_ACQUISITION_CYCLE_START:
+                            if (name != NULL)
+                            {
+                                *name = "serial_number_acquisition_cycle_start";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Serial Number Acquisition Cycle Start";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_AUTO_ID_PROTECTION_SWITCHING_TRAFFIC_RESUME:
+                            if (name != NULL)
+                            {
+                                *name = "protection_switching_traffic_resume";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Protection Switching Traffic Resume";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_AUTO_ID_PROTECTION_SWITCHING_ONUS_RANGED:
+                            if (name != NULL)
+                            {
+                                *name = "protection_switching_onus_ranged";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "After a switchover is complete and all ONU ranging times have stabilized, this indication is sent to inform the host of all new ONU EQDs.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_AUTO_ID_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "protection_switching_switchover_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Protection Switching Switchover Completed";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_AUTO_ID_STANDBY_PON_MONITORING_CYCLE_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "standby_pon_monitoring_cycle_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Standby PON Monitoring Cycle Completed";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_AUTO_ID_ONU_DISCOVERED:
+                            if (name != NULL)
+                            {
+                                *name = "onu_discovered";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "ONU Discovered";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_AUTO_ID_CPU_PACKETS_FAILURE:
+                            if (name != NULL)
+                            {
+                                *name = "cpu_packets_failure";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "A failure was encountered during the \"cpu_packets\" proxy operation.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_AUTO_ID_ROGUE_DETECTION_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "rogue_detection_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Rogue detection completed";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_AUTO_ID_DEACTIVATE_ALL_ONUS_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "deactivate_all_onus_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Indicate the deactivation of all ONUs are completed, in response to 'set_onu_state' operation.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_AUTO_ID_DISABLE_ALL_ONUS_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "disable_all_onus_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Indicate the disabling all ONUs are completed, in response to 'set_onu_state' operation.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_AUTO_ID_ACTIVATE_ALL_ONUS_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "activate_all_onus_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Indicate the activation of all ONUs are completed, in response to 'set_onu_state' operation.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_AUTO_ID_ENABLE_ALL_ONUS_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "enable_all_onus_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Indicate the enabling all ONUs are completed, in response to 'set_onu_state' operation.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_AUTO_ID_TOD_REQUEST_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "tod_request_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "TOD request completed";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_AUTO_ID_ONU_UPGRADE_COMPLETE:
+                            if (name != NULL)
+                            {
+                                *name = "onu_upgrade_complete";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "ONU Upgrade Complete";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_AUTO_ID_ROGUE_ONU_SPECIAL_MAP_CYCLE_START:
+                            if (name != NULL)
+                            {
+                                *name = "rogue_onu_special_map_cycle_start";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Rogue ONU special map cycle start";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_AUTO_ID_STAT_ALARM_RAISED:
+                            if (name != NULL)
+                            {
+                                *name = "stat_alarm_raised";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when a configured statistic alarm condition has been met.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_AUTO_ID_STAT_ALARM_CLEARED:
+                            if (name != NULL)
+                            {
+                                *name = "stat_alarm_cleared";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when a configured statistic alarm condition is no longer met.";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "auto_cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Indication Configuration";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_XGPON_NI_OPER_ID_SET_PON_STATE:
+                            if (name != NULL)
+                            {
+                                *name = "set_pon_state";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Set PON State";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_OPER_ID_RESET:
+                            if (name != NULL)
+                            {
+                                *name = "reset";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Reset";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_OPER_ID_DISABLE_SERIAL_NUMBER:
+                            if (name != NULL)
+                            {
+                                *name = "disable_serial_number";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Disable Serial Number";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_OPER_ID_SINGLE_REQUEST_STANDBY_PON_MONITORING:
+                            if (name != NULL)
+                            {
+                                *name = "single_request_standby_pon_monitoring";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Single request standby PON Monitoring";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_OPER_ID_SET_ONU_STATE:
+                            if (name != NULL)
+                            {
+                                *name = "set_onu_state";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Set the operation state of all ONUs.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_OPER_ID_RUN_SPECIAL_BW_MAP:
+                            if (name != NULL)
+                            {
+                                *name = "run_special_bw_map";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Run Special BW Map";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_OPER_ID_ROGUE_DETECTION_WINDOW:
+                            if (name != NULL)
+                            {
+                                *name = "rogue_detection_window";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Rogue Detection Window";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_OPER_ID_TOD_REQUEST:
+                            if (name != NULL)
+                            {
+                                *name = "tod_request";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "TOD request";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_OPER_ID_START_ONU_UPGRADE:
+                            if (name != NULL)
+                            {
+                                *name = "start_onu_upgrade";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "OLT to ONU firmware transfer";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_OPER_ID_ADJUST_TX_WAVELENGTH:
+                            if (name != NULL)
+                            {
+                                *name = "adjust_tx_wavelength";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Instruct an unassigned ONU to adjust its upstream transmitter wavelength";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_PROXY:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_XGPON_NI_PROXY_ID_CPU_PACKETS:
+                            if (name != NULL)
+                            {
+                                *name = "cpu_packets";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "XGPON CPU packets";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_NI_PROXY_ID_BROADCAST_PLOAM_PACKET:
+                            if (name != NULL)
+                            {
+                                *name = "broadcast_ploam_packet";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Broadcast PLOAM Packet";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_XGPON_ONU:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "cfg";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "stat";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "stat";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "positive_drift";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "positive drift";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 1:
+                            if (name != NULL)
+                            {
+                                *name = "negative_drift";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "negative drift";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 2:
+                            if (name != NULL)
+                            {
+                                *name = "delimiter_miss_detection";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "delimiter miss detection";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 3:
+                            if (name != NULL)
+                            {
+                                *name = "bip32_errors";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "bip32 errors";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 4:
+                            if (name != NULL)
+                            {
+                                *name = "rx_words";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Number of 4-byte words received (word size is 4 bytes regardless of upstream data rate).";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 5:
+                            if (name != NULL)
+                            {
+                                *name = "fec_corrected_symbols";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "fec corrected symbols";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 6:
+                            if (name != NULL)
+                            {
+                                *name = "fec_corrected_codewords";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "fec corrected codewords";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 7:
+                            if (name != NULL)
+                            {
+                                *name = "fec_uncorrectable_codewords";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "fec uncorrectable codewords";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 8:
+                            if (name != NULL)
+                            {
+                                *name = "fec_codewords";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "fec total codewords";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 9:
+                            if (name != NULL)
+                            {
+                                *name = "fec_corrected_bits";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "fec corrected bits";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 10:
+                            if (name != NULL)
+                            {
+                                *name = "xgem_key_errors";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "xgem key error";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 11:
+                            if (name != NULL)
+                            {
+                                *name = "xgem_loss";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "xgem loss ";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 12:
+                            if (name != NULL)
+                            {
+                                *name = "rx_ploams_mic_error";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "mic error ploam";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 13:
+                            if (name != NULL)
+                            {
+                                *name = "rx_ploams_non_idle";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "non idle ploam";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 14:
+                            if (name != NULL)
+                            {
+                                *name = "rx_omci";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received OMCI packets";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 15:
+                            if (name != NULL)
+                            {
+                                *name = "rx_omci_packets_crc_error";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Received OMCI packets with CRC errors";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 16:
+                            if (name != NULL)
+                            {
+                                *name = "rx_bytes";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "rx bytes";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 17:
+                            if (name != NULL)
+                            {
+                                *name = "rx_packets";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "rx packets";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 18:
+                            if (name != NULL)
+                            {
+                                *name = "tx_bytes";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "tx bytes";
+                            }
+
+                            return BCM_ERR_OK;
+                        case 19:
+                            if (name != NULL)
+                            {
+                                *name = "tx_packets";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "tx packets";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_XGPON_ONU_AUTO_ID_ONU_ALARM:
+                            if (name != NULL)
+                            {
+                                *name = "onu_alarm";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "ONU Alarm";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_DOWI:
+                            if (name != NULL)
+                            {
+                                *name = "dowi";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Drift of Window of ONUi";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_SFI:
+                            if (name != NULL)
+                            {
+                                *name = "sfi";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Signal Fail of ONUi";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_SDI:
+                            if (name != NULL)
+                            {
+                                *name = "sdi";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Signal Degraded of ONUi";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_DFI:
+                            if (name != NULL)
+                            {
+                                *name = "dfi";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Receive Dying-Gasp of ONUi";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_PQSI:
+                            if (name != NULL)
+                            {
+                                *name = "pqsi";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "ploam queue status";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_SUFI:
+                            if (name != NULL)
+                            {
+                                *name = "sufi";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "SUFi";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_TIWI:
+                            if (name != NULL)
+                            {
+                                *name = "tiwi";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Transmission Interference Warning";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_LOOCI:
+                            if (name != NULL)
+                            {
+                                *name = "looci";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "LOOCi";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_RANGING_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "ranging_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Ranging Completed";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_ONU_ACTIVATION_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "onu_activation_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "ONU Activation Completed";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_ONU_DEACTIVATION_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "onu_deactivation_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "ONU Deactivation Completed";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_ONU_ENABLE_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "onu_enable_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "ONU Enable Completed";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_ONU_DISABLE_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "onu_disable_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "ONU Disable Completed";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_RSSI_MEASUREMENT_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "rssi_measurement_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "RSSI Measurement Completed";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_INVALID_DBRU_REPORT:
+                            if (name != NULL)
+                            {
+                                *name = "invalid_dbru_report";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Invalid DBRu Report";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_KEY_EXCHANGE_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "key_exchange_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Key Exchange Completed";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_KEY_EXCHANGE_KEY_REQUEST_TIMEOUT:
+                            if (name != NULL)
+                            {
+                                *name = "key_exchange_key_request_timeout";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Key Exchange Key Request Timeout";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_KEY_EXCHANGE_CYCLE_SKIPPED:
+                            if (name != NULL)
+                            {
+                                *name = "key_exchange_cycle_skipped";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Key Exchange Cycle Skipped";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_KEY_EXCHANGE_KEY_MISMATCH:
+                            if (name != NULL)
+                            {
+                                *name = "key_exchange_key_mismatch";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Key Exchange Key Mismatch";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_OPTICAL_REFLECTION:
+                            if (name != NULL)
+                            {
+                                *name = "optical_reflection";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "An optical reflection condition was detected.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_DGI:
+                            if (name != NULL)
+                            {
+                                *name = "dgi";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Receive Dying-Gasp of ONUi";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_POWER_MANAGEMENT_STATE_CHANGE:
+                            if (name != NULL)
+                            {
+                                *name = "power_management_state_change";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Notification that an ONUs power management state has changed.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_POSSIBLE_DRIFT:
+                            if (name != NULL)
+                            {
+                                *name = "possible_drift";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "An ONU in a low power state may be experiencing drift beyond the configured threshold. The estimate may be inaccurate depending on ONU behavior. Actual drift may be less than estimated.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_REGISTRATION_ID:
+                            if (name != NULL)
+                            {
+                                *name = "registration_id";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Registration ID";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_POWER_LEVEL_REPORT:
+                            if (name != NULL)
+                            {
+                                *name = "power_level_report";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Power level report";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_POWER_CONSUMPTION_REPORT:
+                            if (name != NULL)
+                            {
+                                *name = "power_consumption_report";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Power consumption report";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_SECURE_MUTUAL_AUTHENTICATION_FAILURE:
+                            if (name != NULL)
+                            {
+                                *name = "secure_mutual_authentication_failure";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Failure of secure mutual authentication due to MIC error";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_ONU_TUNING_OUT_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "onu_tuning_out_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "ONU Tuning out completed";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_ONU_TUNING_IN_COMPLETED:
+                            if (name != NULL)
+                            {
+                                *name = "onu_tuning_in_completed";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "ONU Tuning in completed";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_TUNING_RESPONSE:
+                            if (name != NULL)
+                            {
+                                *name = "tuning_response";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Tuning response";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_STAT_ALARM_RAISED:
+                            if (name != NULL)
+                            {
+                                *name = "stat_alarm_raised";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when a configured statistic alarm condition has been met.";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_STAT_ALARM_CLEARED:
+                            if (name != NULL)
+                            {
+                                *name = "stat_alarm_cleared";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Sent when a configured statistic alarm condition is no longer met.";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "auto_cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Indication Configuration";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_XGPON_ONU_OPER_ID_SET_ONU_STATE:
+                            if (name != NULL)
+                            {
+                                *name = "set_onu_state";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Set ONU State";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_OPER_ID_RSSI_MEASUREMENT:
+                            if (name != NULL)
+                            {
+                                *name = "rssi_measurement";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "RSSI Measurement";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_OPER_ID_REQUEST_REGISTRATION:
+                            if (name != NULL)
+                            {
+                                *name = "request_registration";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Request the ONU to send its Registration ID";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_OPER_ID_CHANGE_POWER_LEVELLING:
+                            if (name != NULL)
+                            {
+                                *name = "change_power_levelling";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Change power levelling";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_OPER_ID_GET_POWER_LEVEL:
+                            if (name != NULL)
+                            {
+                                *name = "get_power_level";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "ONU should report its launch optical power level as part of the Acknowledgment Ploam message";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_OPER_ID_GET_POWER_CONSUMPTION:
+                            if (name != NULL)
+                            {
+                                *name = "get_power_consumption";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "ONU should report its power consumption information via the Power Consumption Report Ploam message";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_OPER_ID_ADJUST_TX_WAVELENGTH:
+                            if (name != NULL)
+                            {
+                                *name = "adjust_tx_wavelength";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Instruct the ONU to adjust its upstream transmitter wavelength";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_OPER_ID_SECURE_MUTUAL_AUTHENTICATION:
+                            if (name != NULL)
+                            {
+                                *name = "secure_mutual_authentication";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "OMCI base secure mutual authentication";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_OPER_ID_ONU_TUNING_IN:
+                            if (name != NULL)
+                            {
+                                *name = "onu_tuning_in";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "ONU Tuning in";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_OPER_ID_ONU_TUNING_OUT:
+                            if (name != NULL)
+                            {
+                                *name = "onu_tuning_out";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "ONU Tuning out";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_PROXY:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_XGPON_ONU_PROXY_ID_PLOAM_PACKET:
+                            if (name != NULL)
+                            {
+                                *name = "ploam_packet";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "PLOAM Packet";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_PROXY_ID_CPU_PACKETS:
+                            if (name != NULL)
+                            {
+                                *name = "cpu_packets";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "XGPON CPU packets";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_PROXY_RX:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_XGPON_ONU_PROXY_RX_ID_CPU_PACKET:
+                            if (name != NULL)
+                            {
+                                *name = "cpu_packet";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Indicates CPU packet was received on the US from this ONU id";
+                            }
+
+                            return BCM_ERR_OK;
+                        case BCMOLT_XGPON_ONU_PROXY_RX_ID_OMCI_PACKET:
+                            if (name != NULL)
+                            {
+                                *name = "omci_packet";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "Indicates OMCI packet was received on the US from this ONU id";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_XGPON_TRX:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "cfg";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        case BCMOLT_OBJ_ID_XPON_SERDES:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "key";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "key";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            if (name != NULL)
+                            {
+                                *name = "cfg";
+                            }
+
+                            if (descr != NULL)
+                            {
+                                *descr = "cfg";
+                            }
+
+                            return BCM_ERR_OK;
+                        default:
+                            return BCM_ERR_RANGE;
+                    }
+
+                default:
+                    return BCM_ERR_RANGE;
+            }
+
+        default:
+            return BCM_ERR_RANGE;
+    }
+
+    return BCM_ERR_INTERNAL;    /**<  should never happen. */
+}
+
+static bcmcli_prop_descr **obj_get_prop_array(bcmolt_obj_id obj, bcmolt_mgt_group group, uint16_t subgroup, uint32_t *size)
+{
+    switch (obj)
+    {
+        case BCMOLT_OBJ_ID_AE_NI:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(ae_ni_key_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return ae_ni_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(ae_ni_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return ae_ni_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_AE_NI_OPER_ID_SET_AE_NI_EN_STATE:
+                            *size = sizeof(ae_ni_set_ae_ni_en_state_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return ae_ni_set_ae_ni_en_state_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMOLT_OBJ_ID_AE_PATH_DS:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(ae_path_ds_key_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return ae_path_ds_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(ae_path_ds_stat_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return ae_path_ds_stat_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                        case 1:
+                        case 2:
+                        case 3:
+                        case 4:
+                        case 5:
+                        case 6:
+                        case 7:
+                        case 8:
+                        case 9:
+                        case 10:
+                        case 11:
+                        case 12:
+                        case 13:
+                        case 14:
+                        case 15:
+                        case 16:
+                            *size = sizeof(ae_path_ds_stat_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return ae_path_ds_stat_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_AE_PATH_DS_AUTO_ID_STAT_ALARM_RAISED:
+                            *size = sizeof(ae_path_ds_stat_alarm_raised_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return ae_path_ds_stat_alarm_raised_prop_array;
+                        case BCMOLT_AE_PATH_DS_AUTO_ID_STAT_ALARM_CLEARED:
+                            *size = sizeof(ae_path_ds_stat_alarm_cleared_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return ae_path_ds_stat_alarm_cleared_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(ae_path_ds_auto_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return ae_path_ds_auto_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMOLT_OBJ_ID_AE_PATH_US:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(ae_path_us_key_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return ae_path_us_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(ae_path_us_stat_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return ae_path_us_stat_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                        case 1:
+                        case 2:
+                        case 3:
+                        case 4:
+                        case 5:
+                        case 6:
+                        case 7:
+                        case 8:
+                        case 9:
+                        case 10:
+                        case 11:
+                        case 12:
+                        case 13:
+                        case 14:
+                        case 15:
+                        case 16:
+                        case 17:
+                        case 18:
+                        case 19:
+                            *size = sizeof(ae_path_us_stat_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return ae_path_us_stat_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_AE_PATH_US_AUTO_ID_STAT_ALARM_RAISED:
+                            *size = sizeof(ae_path_us_stat_alarm_raised_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return ae_path_us_stat_alarm_raised_prop_array;
+                        case BCMOLT_AE_PATH_US_AUTO_ID_STAT_ALARM_CLEARED:
+                            *size = sizeof(ae_path_us_stat_alarm_cleared_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return ae_path_us_stat_alarm_cleared_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(ae_path_us_auto_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return ae_path_us_auto_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMOLT_OBJ_ID_CHANNEL:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(channel_key_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return channel_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(channel_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return channel_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMOLT_OBJ_ID_DEBUG:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(debug_key_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return debug_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(debug_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return debug_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_DEBUG_AUTO_ID_CLI_OUTPUT:
+                            *size = sizeof(debug_cli_output_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return debug_cli_output_prop_array;
+                        case BCMOLT_DEBUG_AUTO_ID_FILE_ALMOST_FULL:
+                            *size = sizeof(debug_file_almost_full_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return debug_file_almost_full_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(debug_auto_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return debug_auto_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_DEBUG_OPER_ID_CLI_INPUT:
+                            *size = sizeof(debug_cli_input_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return debug_cli_input_prop_array;
+                        case BCMOLT_DEBUG_OPER_ID_START_API_CAPTURE:
+                            *size = sizeof(debug_start_api_capture_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return debug_start_api_capture_prop_array;
+                        case BCMOLT_DEBUG_OPER_ID_STOP_API_CAPTURE:
+                            *size = sizeof(debug_stop_api_capture_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return debug_stop_api_capture_prop_array;
+                        case BCMOLT_DEBUG_OPER_ID_RESET_API_CAPTURE:
+                            *size = sizeof(debug_reset_api_capture_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return debug_reset_api_capture_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMOLT_OBJ_ID_DEVICE:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(device_key_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return device_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(device_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return device_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_DEVICE_AUTO_ID_DEVICE_READY:
+                            *size = sizeof(device_device_ready_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return device_device_ready_prop_array;
+                        case BCMOLT_DEVICE_AUTO_ID_CONNECTION_ESTABLISHED:
+                            *size = sizeof(device_connection_established_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return device_connection_established_prop_array;
+                        case BCMOLT_DEVICE_AUTO_ID_DEVICE_KEEP_ALIVE:
+                            *size = sizeof(device_device_keep_alive_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return device_device_keep_alive_prop_array;
+                        case BCMOLT_DEVICE_AUTO_ID_CONNECTION_FAILURE:
+                            *size = sizeof(device_connection_failure_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return device_connection_failure_prop_array;
+                        case BCMOLT_DEVICE_AUTO_ID_CONNECTION_COMPLETE:
+                            *size = sizeof(device_connection_complete_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return device_connection_complete_prop_array;
+                        case BCMOLT_DEVICE_AUTO_ID_DISCONNECTION_COMPLETE:
+                            *size = sizeof(device_disconnection_complete_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return device_disconnection_complete_prop_array;
+                        case BCMOLT_DEVICE_AUTO_ID_SW_ERROR:
+                            *size = sizeof(device_sw_error_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return device_sw_error_prop_array;
+                        case BCMOLT_DEVICE_AUTO_ID_SW_EXCEPTION:
+                            *size = sizeof(device_sw_exception_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return device_sw_exception_prop_array;
+                        case BCMOLT_DEVICE_AUTO_ID_INDICATIONS_DROPPED:
+                            *size = sizeof(device_indications_dropped_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return device_indications_dropped_prop_array;
+                        case BCMOLT_DEVICE_AUTO_ID_IMAGE_TRANSFER_COMPLETE:
+                            *size = sizeof(device_image_transfer_complete_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return device_image_transfer_complete_prop_array;
+                        case BCMOLT_DEVICE_AUTO_ID_DDR_TEST_COMPLETE:
+                            *size = sizeof(device_ddr_test_complete_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return device_ddr_test_complete_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(device_auto_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return device_auto_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_DEVICE_OPER_ID_CONNECT:
+                            *size = sizeof(device_connect_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return device_connect_prop_array;
+                        case BCMOLT_DEVICE_OPER_ID_DISCONNECT:
+                            *size = sizeof(device_disconnect_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return device_disconnect_prop_array;
+                        case BCMOLT_DEVICE_OPER_ID_RESET:
+                            *size = sizeof(device_reset_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return device_reset_prop_array;
+                        case BCMOLT_DEVICE_OPER_ID_HOST_KEEP_ALIVE:
+                            *size = sizeof(device_host_keep_alive_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return device_host_keep_alive_prop_array;
+                        case BCMOLT_DEVICE_OPER_ID_SW_UPGRADE_ACTIVATE:
+                            *size = sizeof(device_sw_upgrade_activate_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return device_sw_upgrade_activate_prop_array;
+                        case BCMOLT_DEVICE_OPER_ID_IMAGE_TRANSFER_START:
+                            *size = sizeof(device_image_transfer_start_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return device_image_transfer_start_prop_array;
+                        case BCMOLT_DEVICE_OPER_ID_IMAGE_TRANSFER_DATA:
+                            *size = sizeof(device_image_transfer_data_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return device_image_transfer_data_prop_array;
+                        case BCMOLT_DEVICE_OPER_ID_RUN_DDR_TEST:
+                            *size = sizeof(device_run_ddr_test_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return device_run_ddr_test_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMOLT_OBJ_ID_EPON_DENIED_LINK:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(epon_denied_link_key_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_denied_link_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(epon_denied_link_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_denied_link_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_EPON_DENIED_LINK_AUTO_ID_UNKNOWN_LINK_VIOLATION:
+                            *size = sizeof(epon_denied_link_unknown_link_violation_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_denied_link_unknown_link_violation_prop_array;
+                        case BCMOLT_EPON_DENIED_LINK_AUTO_ID_OVERHEAD_PROFILE_VIOLATION:
+                            *size = sizeof(epon_denied_link_overhead_profile_violation_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_denied_link_overhead_profile_violation_prop_array;
+                        case BCMOLT_EPON_DENIED_LINK_AUTO_ID_LASER_ON_OFF_VIOLATION:
+                            *size = sizeof(epon_denied_link_laser_on_off_violation_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_denied_link_laser_on_off_violation_prop_array;
+                        case BCMOLT_EPON_DENIED_LINK_AUTO_ID_MAX_LINK_VIOLATION:
+                            *size = sizeof(epon_denied_link_max_link_violation_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_denied_link_max_link_violation_prop_array;
+                        case BCMOLT_EPON_DENIED_LINK_AUTO_ID_LLID_POOL_EMPTY_VIOLATION:
+                            *size = sizeof(epon_denied_link_llid_pool_empty_violation_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_denied_link_llid_pool_empty_violation_prop_array;
+                        case BCMOLT_EPON_DENIED_LINK_AUTO_ID_SYSTEM_RESOURCE_VIOLATION:
+                            *size = sizeof(epon_denied_link_system_resource_violation_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_denied_link_system_resource_violation_prop_array;
+                        case BCMOLT_EPON_DENIED_LINK_AUTO_ID_RANGE_VIOLATION:
+                            *size = sizeof(epon_denied_link_range_violation_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_denied_link_range_violation_prop_array;
+                        case BCMOLT_EPON_DENIED_LINK_AUTO_ID_TDM_CHANNELS_EXHAUSTED:
+                            *size = sizeof(epon_denied_link_tdm_channels_exhausted_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_denied_link_tdm_channels_exhausted_prop_array;
+                        case BCMOLT_EPON_DENIED_LINK_AUTO_ID_ROGUE_VIOLATION:
+                            *size = sizeof(epon_denied_link_rogue_violation_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_denied_link_rogue_violation_prop_array;
+                        case BCMOLT_EPON_DENIED_LINK_AUTO_ID_UPSTREAM_BANDWIDTH_VIOLATION:
+                            *size = sizeof(epon_denied_link_upstream_bandwidth_violation_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_denied_link_upstream_bandwidth_violation_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(epon_denied_link_auto_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_denied_link_auto_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMOLT_OBJ_ID_EPON_LINK:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(epon_link_key_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_link_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(epon_link_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_link_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(epon_link_stat_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_link_stat_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                        case 1:
+                        case 2:
+                        case 3:
+                        case 4:
+                        case 5:
+                        case 6:
+                        case 7:
+                        case 8:
+                        case 9:
+                        case 10:
+                        case 11:
+                        case 12:
+                        case 13:
+                        case 14:
+                        case 15:
+                        case 16:
+                        case 17:
+                        case 18:
+                        case 19:
+                        case 20:
+                        case 21:
+                        case 22:
+                        case 23:
+                        case 24:
+                        case 25:
+                        case 26:
+                        case 27:
+                        case 28:
+                        case 29:
+                        case 30:
+                        case 31:
+                        case 32:
+                        case 33:
+                        case 34:
+                        case 35:
+                        case 36:
+                        case 37:
+                        case 38:
+                        case 39:
+                        case 40:
+                        case 41:
+                        case 42:
+                            *size = sizeof(epon_link_stat_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_link_stat_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_EPON_LINK_AUTO_ID_KEY_EXCHANGE_FAILURE:
+                            *size = sizeof(epon_link_key_exchange_failure_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_link_key_exchange_failure_prop_array;
+                        case BCMOLT_EPON_LINK_AUTO_ID_ENCRYPTION_ENABLED:
+                            *size = sizeof(epon_link_encryption_enabled_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_link_encryption_enabled_prop_array;
+                        case BCMOLT_EPON_LINK_AUTO_ID_MPCP_REG_ACK_TIMEOUT:
+                            *size = sizeof(epon_link_mpcp_reg_ack_timeout_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_link_mpcp_reg_ack_timeout_prop_array;
+                        case BCMOLT_EPON_LINK_AUTO_ID_RANGE_VALUE_CHANGED:
+                            *size = sizeof(epon_link_range_value_changed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_link_range_value_changed_prop_array;
+                        case BCMOLT_EPON_LINK_AUTO_ID_PROTECTION_SWITCH_OCCURRED:
+                            *size = sizeof(epon_link_protection_switch_occurred_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_link_protection_switch_occurred_prop_array;
+                        case BCMOLT_EPON_LINK_AUTO_ID_DUPLICATE_MPCP_REGISTRATION_REQUEST:
+                            *size = sizeof(epon_link_duplicate_mpcp_registration_request_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_link_duplicate_mpcp_registration_request_prop_array;
+                        case BCMOLT_EPON_LINK_AUTO_ID_LINK_SPEED_MISMATCH:
+                            *size = sizeof(epon_link_link_speed_mismatch_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_link_link_speed_mismatch_prop_array;
+                        case BCMOLT_EPON_LINK_AUTO_ID_MPCP_REPORT_TIMEOUT:
+                            *size = sizeof(epon_link_mpcp_report_timeout_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_link_mpcp_report_timeout_prop_array;
+                        case BCMOLT_EPON_LINK_AUTO_ID_OAM_KEEPALIVE_TIMEOUT:
+                            *size = sizeof(epon_link_oam_keepalive_timeout_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_link_oam_keepalive_timeout_prop_array;
+                        case BCMOLT_EPON_LINK_AUTO_ID_MPCP_DISCOVERED:
+                            *size = sizeof(epon_link_mpcp_discovered_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_link_mpcp_discovered_prop_array;
+                        case BCMOLT_EPON_LINK_AUTO_ID_MPCP_DEREGISTERED:
+                            *size = sizeof(epon_link_mpcp_deregistered_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_link_mpcp_deregistered_prop_array;
+                        case BCMOLT_EPON_LINK_AUTO_ID_PREPROVISIONED_LINK_CREATED:
+                            *size = sizeof(epon_link_preprovisioned_link_created_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_link_preprovisioned_link_created_prop_array;
+                        case BCMOLT_EPON_LINK_AUTO_ID_OAM_KEEPALIVE_TIMER_STARTED:
+                            *size = sizeof(epon_link_oam_keepalive_timer_started_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_link_oam_keepalive_timer_started_prop_array;
+                        case BCMOLT_EPON_LINK_AUTO_ID_OAM_KEEPALIVE_TIMER_STOPPED:
+                            *size = sizeof(epon_link_oam_keepalive_timer_stopped_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_link_oam_keepalive_timer_stopped_prop_array;
+                        case BCMOLT_EPON_LINK_AUTO_ID_KEY_EXCHANGE_STARTED:
+                            *size = sizeof(epon_link_key_exchange_started_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_link_key_exchange_started_prop_array;
+                        case BCMOLT_EPON_LINK_AUTO_ID_KEY_EXCHANGE_STOPPED:
+                            *size = sizeof(epon_link_key_exchange_stopped_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_link_key_exchange_stopped_prop_array;
+                        case BCMOLT_EPON_LINK_AUTO_ID_STATIC_REGISTRATION_DONE:
+                            *size = sizeof(epon_link_static_registration_done_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_link_static_registration_done_prop_array;
+                        case BCMOLT_EPON_LINK_AUTO_ID_RERANGE_FAILURE:
+                            *size = sizeof(epon_link_rerange_failure_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_link_rerange_failure_prop_array;
+                        case BCMOLT_EPON_LINK_AUTO_ID_LINK_DELETED:
+                            *size = sizeof(epon_link_link_deleted_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_link_link_deleted_prop_array;
+                        case BCMOLT_EPON_LINK_AUTO_ID_STAT_ALARM_RAISED:
+                            *size = sizeof(epon_link_stat_alarm_raised_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_link_stat_alarm_raised_prop_array;
+                        case BCMOLT_EPON_LINK_AUTO_ID_STAT_ALARM_CLEARED:
+                            *size = sizeof(epon_link_stat_alarm_cleared_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_link_stat_alarm_cleared_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(epon_link_auto_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_link_auto_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_EPON_LINK_OPER_ID_FORCE_REDISCOVERY:
+                            *size = sizeof(epon_link_force_rediscovery_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_link_force_rediscovery_prop_array;
+                        case BCMOLT_EPON_LINK_OPER_ID_DELETE_LINK:
+                            *size = sizeof(epon_link_delete_link_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_link_delete_link_prop_array;
+                        case BCMOLT_EPON_LINK_OPER_ID_OAM_KEEPALIVE_TIMER_START:
+                            *size = sizeof(epon_link_oam_keepalive_timer_start_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_link_oam_keepalive_timer_start_prop_array;
+                        case BCMOLT_EPON_LINK_OPER_ID_OAM_KEEPALIVE_TIMER_STOP:
+                            *size = sizeof(epon_link_oam_keepalive_timer_stop_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_link_oam_keepalive_timer_stop_prop_array;
+                        case BCMOLT_EPON_LINK_OPER_ID_KEY_EXCHANGE_START:
+                            *size = sizeof(epon_link_key_exchange_start_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_link_key_exchange_start_prop_array;
+                        case BCMOLT_EPON_LINK_OPER_ID_KEY_EXCHANGE_STOP:
+                            *size = sizeof(epon_link_key_exchange_stop_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_link_key_exchange_stop_prop_array;
+                        case BCMOLT_EPON_LINK_OPER_ID_STATIC_REGISTRATION:
+                            *size = sizeof(epon_link_static_registration_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_link_static_registration_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_PROXY:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_EPON_LINK_PROXY_ID_INJECT_FRAME:
+                            *size = sizeof(epon_link_inject_frame_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_link_inject_frame_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_PROXY_RX:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_EPON_LINK_PROXY_RX_ID_FRAME_CAPTURED:
+                            *size = sizeof(epon_link_frame_captured_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_link_frame_captured_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMOLT_OBJ_ID_EPON_NI:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(epon_ni_key_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_ni_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(epon_ni_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_ni_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_EPON_NI_AUTO_ID_NO_REPORTS:
+                            *size = sizeof(epon_ni_no_reports_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_ni_no_reports_prop_array;
+                        case BCMOLT_EPON_NI_AUTO_ID_LLID_QUARANTINED:
+                            *size = sizeof(epon_ni_llid_quarantined_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_ni_llid_quarantined_prop_array;
+                        case BCMOLT_EPON_NI_AUTO_ID_STATE_CHANGE_COMPLETED:
+                            *size = sizeof(epon_ni_state_change_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_ni_state_change_completed_prop_array;
+                        case BCMOLT_EPON_NI_AUTO_ID_RERANGE_FAILURE:
+                            *size = sizeof(epon_ni_rerange_failure_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_ni_rerange_failure_prop_array;
+                        case BCMOLT_EPON_NI_AUTO_ID_RSSI_MEASUREMENT_COMPLETED:
+                            *size = sizeof(epon_ni_rssi_measurement_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_ni_rssi_measurement_completed_prop_array;
+                        case BCMOLT_EPON_NI_AUTO_ID_ONU_UPGRADE_COMPLETE:
+                            *size = sizeof(epon_ni_onu_upgrade_complete_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_ni_onu_upgrade_complete_prop_array;
+                        case BCMOLT_EPON_NI_AUTO_ID_ROGUE_SCAN_COMPLETE:
+                            *size = sizeof(epon_ni_rogue_scan_complete_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_ni_rogue_scan_complete_prop_array;
+                        case BCMOLT_EPON_NI_AUTO_ID_MPCP_TIMESTAMP_CHANGED:
+                            *size = sizeof(epon_ni_mpcp_timestamp_changed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_ni_mpcp_timestamp_changed_prop_array;
+                        case BCMOLT_EPON_NI_AUTO_ID_AUTO_ROGUE_SCAN_1G_FAILURE:
+                            *size = sizeof(epon_ni_auto_rogue_scan_1g_failure_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_ni_auto_rogue_scan_1g_failure_prop_array;
+                        case BCMOLT_EPON_NI_AUTO_ID_AUTO_ROGUE_SCAN_10G_FAILURE:
+                            *size = sizeof(epon_ni_auto_rogue_scan_10g_failure_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_ni_auto_rogue_scan_10g_failure_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(epon_ni_auto_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_ni_auto_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_EPON_NI_OPER_ID_SET_EPON_NI_EN_STATE:
+                            *size = sizeof(epon_ni_set_epon_ni_en_state_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_ni_set_epon_ni_en_state_prop_array;
+                        case BCMOLT_EPON_NI_OPER_ID_ISSUE_RSSI_GRANT:
+                            *size = sizeof(epon_ni_issue_rssi_grant_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_ni_issue_rssi_grant_prop_array;
+                        case BCMOLT_EPON_NI_OPER_ID_ADD_LINK:
+                            *size = sizeof(epon_ni_add_link_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_ni_add_link_prop_array;
+                        case BCMOLT_EPON_NI_OPER_ID_ADD_MULTICAST_LINK:
+                            *size = sizeof(epon_ni_add_multicast_link_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_ni_add_multicast_link_prop_array;
+                        case BCMOLT_EPON_NI_OPER_ID_ADD_PROTECTED_STANDBY_LINK:
+                            *size = sizeof(epon_ni_add_protected_standby_link_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_ni_add_protected_standby_link_prop_array;
+                        case BCMOLT_EPON_NI_OPER_ID_PROTECTION_SWITCHING_APPLY_RERANGE_DELTA:
+                            *size = sizeof(epon_ni_protection_switching_apply_rerange_delta_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_ni_protection_switching_apply_rerange_delta_prop_array;
+                        case BCMOLT_EPON_NI_OPER_ID_ROGUE_LLID_SCAN:
+                            *size = sizeof(epon_ni_rogue_llid_scan_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_ni_rogue_llid_scan_prop_array;
+                        case BCMOLT_EPON_NI_OPER_ID_START_ONU_UPGRADE:
+                            *size = sizeof(epon_ni_start_onu_upgrade_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_ni_start_onu_upgrade_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMOLT_OBJ_ID_EPON_ONU_10G_US:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(epon_onu_10g_us_key_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_onu_10g_us_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(epon_onu_10g_us_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_onu_10g_us_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(epon_onu_10g_us_stat_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_onu_10g_us_stat_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                        case 1:
+                        case 2:
+                        case 3:
+                            *size = sizeof(epon_onu_10g_us_stat_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_onu_10g_us_stat_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_EPON_ONU_10G_US_AUTO_ID_STAT_ALARM_RAISED:
+                            *size = sizeof(epon_onu_10g_us_stat_alarm_raised_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_onu_10g_us_stat_alarm_raised_prop_array;
+                        case BCMOLT_EPON_ONU_10G_US_AUTO_ID_STAT_ALARM_CLEARED:
+                            *size = sizeof(epon_onu_10g_us_stat_alarm_cleared_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_onu_10g_us_stat_alarm_cleared_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(epon_onu_10g_us_auto_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_onu_10g_us_auto_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMOLT_OBJ_ID_EPON_ONU_1G_US:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(epon_onu_1g_us_key_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_onu_1g_us_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(epon_onu_1g_us_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_onu_1g_us_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(epon_onu_1g_us_stat_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_onu_1g_us_stat_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                        case 1:
+                        case 2:
+                        case 3:
+                        case 4:
+                        case 5:
+                        case 6:
+                        case 7:
+                        case 8:
+                        case 9:
+                        case 10:
+                        case 11:
+                        case 12:
+                        case 13:
+                        case 14:
+                        case 15:
+                            *size = sizeof(epon_onu_1g_us_stat_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_onu_1g_us_stat_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_EPON_ONU_1G_US_AUTO_ID_STAT_ALARM_RAISED:
+                            *size = sizeof(epon_onu_1g_us_stat_alarm_raised_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_onu_1g_us_stat_alarm_raised_prop_array;
+                        case BCMOLT_EPON_ONU_1G_US_AUTO_ID_STAT_ALARM_CLEARED:
+                            *size = sizeof(epon_onu_1g_us_stat_alarm_cleared_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_onu_1g_us_stat_alarm_cleared_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(epon_onu_1g_us_auto_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_onu_1g_us_auto_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMOLT_OBJ_ID_EPON_PATH_10G_DS:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(epon_path_10g_ds_key_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_path_10g_ds_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(epon_path_10g_ds_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_path_10g_ds_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(epon_path_10g_ds_stat_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_path_10g_ds_stat_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                        case 1:
+                        case 2:
+                        case 3:
+                        case 4:
+                        case 5:
+                        case 6:
+                        case 7:
+                        case 8:
+                        case 9:
+                        case 10:
+                        case 11:
+                        case 12:
+                        case 13:
+                        case 14:
+                        case 15:
+                        case 16:
+                        case 17:
+                        case 18:
+                        case 19:
+                        case 20:
+                            *size = sizeof(epon_path_10g_ds_stat_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_path_10g_ds_stat_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_EPON_PATH_10G_DS_AUTO_ID_STAT_ALARM_RAISED:
+                            *size = sizeof(epon_path_10g_ds_stat_alarm_raised_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_path_10g_ds_stat_alarm_raised_prop_array;
+                        case BCMOLT_EPON_PATH_10G_DS_AUTO_ID_STAT_ALARM_CLEARED:
+                            *size = sizeof(epon_path_10g_ds_stat_alarm_cleared_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_path_10g_ds_stat_alarm_cleared_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(epon_path_10g_ds_auto_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_path_10g_ds_auto_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMOLT_OBJ_ID_EPON_PATH_10G_US:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(epon_path_10g_us_key_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_path_10g_us_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(epon_path_10g_us_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_path_10g_us_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(epon_path_10g_us_stat_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_path_10g_us_stat_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                        case 1:
+                        case 2:
+                        case 3:
+                        case 4:
+                        case 5:
+                        case 6:
+                        case 7:
+                        case 8:
+                        case 9:
+                        case 10:
+                        case 11:
+                        case 12:
+                        case 13:
+                        case 14:
+                        case 15:
+                        case 16:
+                        case 17:
+                        case 18:
+                        case 19:
+                        case 20:
+                        case 21:
+                        case 22:
+                        case 23:
+                        case 24:
+                        case 25:
+                            *size = sizeof(epon_path_10g_us_stat_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_path_10g_us_stat_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_EPON_PATH_10G_US_AUTO_ID_STAT_ALARM_RAISED:
+                            *size = sizeof(epon_path_10g_us_stat_alarm_raised_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_path_10g_us_stat_alarm_raised_prop_array;
+                        case BCMOLT_EPON_PATH_10G_US_AUTO_ID_STAT_ALARM_CLEARED:
+                            *size = sizeof(epon_path_10g_us_stat_alarm_cleared_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_path_10g_us_stat_alarm_cleared_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(epon_path_10g_us_auto_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_path_10g_us_auto_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMOLT_OBJ_ID_EPON_PATH_1G_DS:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(epon_path_1g_ds_key_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_path_1g_ds_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(epon_path_1g_ds_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_path_1g_ds_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(epon_path_1g_ds_stat_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_path_1g_ds_stat_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                        case 1:
+                        case 2:
+                        case 3:
+                        case 4:
+                        case 5:
+                        case 6:
+                        case 7:
+                        case 8:
+                        case 9:
+                        case 10:
+                        case 11:
+                        case 12:
+                        case 13:
+                        case 14:
+                        case 15:
+                        case 16:
+                        case 17:
+                        case 18:
+                        case 19:
+                        case 20:
+                            *size = sizeof(epon_path_1g_ds_stat_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_path_1g_ds_stat_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_EPON_PATH_1G_DS_AUTO_ID_STAT_ALARM_RAISED:
+                            *size = sizeof(epon_path_1g_ds_stat_alarm_raised_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_path_1g_ds_stat_alarm_raised_prop_array;
+                        case BCMOLT_EPON_PATH_1G_DS_AUTO_ID_STAT_ALARM_CLEARED:
+                            *size = sizeof(epon_path_1g_ds_stat_alarm_cleared_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_path_1g_ds_stat_alarm_cleared_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(epon_path_1g_ds_auto_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_path_1g_ds_auto_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMOLT_OBJ_ID_EPON_PATH_1G_US:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(epon_path_1g_us_key_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_path_1g_us_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(epon_path_1g_us_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_path_1g_us_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(epon_path_1g_us_stat_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_path_1g_us_stat_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                        case 1:
+                        case 2:
+                        case 3:
+                        case 4:
+                        case 5:
+                        case 6:
+                        case 7:
+                        case 8:
+                        case 9:
+                        case 10:
+                        case 11:
+                        case 12:
+                        case 13:
+                        case 14:
+                        case 15:
+                        case 16:
+                        case 17:
+                        case 18:
+                        case 19:
+                        case 20:
+                        case 21:
+                        case 22:
+                        case 23:
+                        case 24:
+                        case 25:
+                            *size = sizeof(epon_path_1g_us_stat_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_path_1g_us_stat_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_EPON_PATH_1G_US_AUTO_ID_STAT_ALARM_RAISED:
+                            *size = sizeof(epon_path_1g_us_stat_alarm_raised_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_path_1g_us_stat_alarm_raised_prop_array;
+                        case BCMOLT_EPON_PATH_1G_US_AUTO_ID_STAT_ALARM_CLEARED:
+                            *size = sizeof(epon_path_1g_us_stat_alarm_cleared_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_path_1g_us_stat_alarm_cleared_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(epon_path_1g_us_auto_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_path_1g_us_auto_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMOLT_OBJ_ID_EPON_RP:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(epon_rp_key_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_rp_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(epon_rp_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return epon_rp_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMOLT_OBJ_ID_GPIO:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(gpio_key_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpio_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(gpio_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpio_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMOLT_OBJ_ID_GPON_ALLOC:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(gpon_alloc_key_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_alloc_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(gpon_alloc_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_alloc_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(gpon_alloc_stat_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_alloc_stat_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(gpon_alloc_stat_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_alloc_stat_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_GPON_ALLOC_AUTO_ID_CONFIGURATION_COMPLETED:
+                            *size = sizeof(gpon_alloc_configuration_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_alloc_configuration_completed_prop_array;
+                        case BCMOLT_GPON_ALLOC_AUTO_ID_GET_ALLOC_STATS_COMPLETED:
+                            *size = sizeof(gpon_alloc_get_alloc_stats_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_alloc_get_alloc_stats_completed_prop_array;
+                        case BCMOLT_GPON_ALLOC_AUTO_ID_STAT_ALARM_RAISED:
+                            *size = sizeof(gpon_alloc_stat_alarm_raised_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_alloc_stat_alarm_raised_prop_array;
+                        case BCMOLT_GPON_ALLOC_AUTO_ID_STAT_ALARM_CLEARED:
+                            *size = sizeof(gpon_alloc_stat_alarm_cleared_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_alloc_stat_alarm_cleared_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(gpon_alloc_auto_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_alloc_auto_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_GPON_ALLOC_OPER_ID_SET_STATE:
+                            *size = sizeof(gpon_alloc_set_state_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_alloc_set_state_prop_array;
+                        case BCMOLT_GPON_ALLOC_OPER_ID_GET_STATS:
+                            *size = sizeof(gpon_alloc_get_stats_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_alloc_get_stats_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMOLT_OBJ_ID_GPON_GEM_PORT:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(gpon_gem_port_key_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_gem_port_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(gpon_gem_port_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_gem_port_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(gpon_gem_port_stat_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_gem_port_stat_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                        case 1:
+                        case 2:
+                        case 3:
+                            *size = sizeof(gpon_gem_port_stat_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_gem_port_stat_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_GPON_GEM_PORT_AUTO_ID_CONFIGURATION_COMPLETED:
+                            *size = sizeof(gpon_gem_port_configuration_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_gem_port_configuration_completed_prop_array;
+                        case BCMOLT_GPON_GEM_PORT_AUTO_ID_STAT_ALARM_RAISED:
+                            *size = sizeof(gpon_gem_port_stat_alarm_raised_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_gem_port_stat_alarm_raised_prop_array;
+                        case BCMOLT_GPON_GEM_PORT_AUTO_ID_STAT_ALARM_CLEARED:
+                            *size = sizeof(gpon_gem_port_stat_alarm_cleared_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_gem_port_stat_alarm_cleared_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(gpon_gem_port_auto_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_gem_port_auto_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_GPON_GEM_PORT_OPER_ID_SET_STATE:
+                            *size = sizeof(gpon_gem_port_set_state_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_gem_port_set_state_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMOLT_OBJ_ID_GPON_IWF:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(gpon_iwf_key_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_iwf_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(gpon_iwf_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_iwf_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(gpon_iwf_stat_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_iwf_stat_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                        case 1:
+                        case 2:
+                        case 3:
+                        case 4:
+                        case 5:
+                        case 6:
+                        case 7:
+                            *size = sizeof(gpon_iwf_stat_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_iwf_stat_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_GPON_IWF_AUTO_ID_FLUSH_MAC_TABLE_COMPLETED:
+                            *size = sizeof(gpon_iwf_flush_mac_table_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_iwf_flush_mac_table_completed_prop_array;
+                        case BCMOLT_GPON_IWF_AUTO_ID_SCAN_MAC_TABLE_COMPLETED:
+                            *size = sizeof(gpon_iwf_scan_mac_table_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_iwf_scan_mac_table_completed_prop_array;
+                        case BCMOLT_GPON_IWF_AUTO_ID_STAT_ALARM_RAISED:
+                            *size = sizeof(gpon_iwf_stat_alarm_raised_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_iwf_stat_alarm_raised_prop_array;
+                        case BCMOLT_GPON_IWF_AUTO_ID_STAT_ALARM_CLEARED:
+                            *size = sizeof(gpon_iwf_stat_alarm_cleared_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_iwf_stat_alarm_cleared_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(gpon_iwf_auto_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_iwf_auto_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_GPON_IWF_OPER_ID_FLUSH_MAC_TABLE:
+                            *size = sizeof(gpon_iwf_flush_mac_table_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_iwf_flush_mac_table_prop_array;
+                        case BCMOLT_GPON_IWF_OPER_ID_SCAN_MAC_TABLE:
+                            *size = sizeof(gpon_iwf_scan_mac_table_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_iwf_scan_mac_table_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMOLT_OBJ_ID_GPON_IWF_DS_EGRESS_FLOW:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(gpon_iwf_ds_egress_flow_key_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_iwf_ds_egress_flow_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(gpon_iwf_ds_egress_flow_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_iwf_ds_egress_flow_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMOLT_OBJ_ID_GPON_IWF_DS_INGRESS_FLOW:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(gpon_iwf_ds_ingress_flow_key_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_iwf_ds_ingress_flow_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(gpon_iwf_ds_ingress_flow_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_iwf_ds_ingress_flow_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMOLT_OBJ_ID_GPON_IWF_MAC_TABLE:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(gpon_iwf_mac_table_key_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_iwf_mac_table_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(gpon_iwf_mac_table_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_iwf_mac_table_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_GPON_IWF_MAC_TABLE_AUTO_ID_NEW_MAC:
+                            *size = sizeof(gpon_iwf_mac_table_new_mac_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_iwf_mac_table_new_mac_prop_array;
+                        case BCMOLT_GPON_IWF_MAC_TABLE_AUTO_ID_MAC_AGED:
+                            *size = sizeof(gpon_iwf_mac_table_mac_aged_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_iwf_mac_table_mac_aged_prop_array;
+                        case BCMOLT_GPON_IWF_MAC_TABLE_AUTO_ID_MAC_MOVE:
+                            *size = sizeof(gpon_iwf_mac_table_mac_move_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_iwf_mac_table_mac_move_prop_array;
+                        case BCMOLT_GPON_IWF_MAC_TABLE_AUTO_ID_MAC_DROPPED:
+                            *size = sizeof(gpon_iwf_mac_table_mac_dropped_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_iwf_mac_table_mac_dropped_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(gpon_iwf_mac_table_auto_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_iwf_mac_table_auto_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMOLT_OBJ_ID_GPON_IWF_US_FLOW:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(gpon_iwf_us_flow_key_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_iwf_us_flow_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(gpon_iwf_us_flow_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_iwf_us_flow_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMOLT_OBJ_ID_GPON_NI:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(gpon_ni_key_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_ni_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(gpon_ni_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_ni_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(gpon_ni_stat_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_ni_stat_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                        case 1:
+                        case 2:
+                        case 3:
+                        case 4:
+                        case 5:
+                        case 6:
+                        case 7:
+                        case 8:
+                        case 9:
+                        case 10:
+                        case 11:
+                        case 12:
+                        case 13:
+                        case 14:
+                        case 15:
+                        case 16:
+                        case 17:
+                        case 18:
+                        case 19:
+                        case 20:
+                        case 21:
+                        case 22:
+                        case 23:
+                        case 24:
+                        case 25:
+                        case 26:
+                        case 27:
+                        case 28:
+                        case 29:
+                        case 30:
+                        case 31:
+                        case 32:
+                        case 33:
+                            *size = sizeof(gpon_ni_stat_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_ni_stat_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_GPON_NI_AUTO_ID_STATE_CHANGE_COMPLETED:
+                            *size = sizeof(gpon_ni_state_change_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_ni_state_change_completed_prop_array;
+                        case BCMOLT_GPON_NI_AUTO_ID_LOS:
+                            *size = sizeof(gpon_ni_los_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_ni_los_prop_array;
+                        case BCMOLT_GPON_NI_AUTO_ID_SERIAL_NUMBER_ACQUISITION_CYCLE_START:
+                            *size = sizeof(gpon_ni_serial_number_acquisition_cycle_start_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_ni_serial_number_acquisition_cycle_start_prop_array;
+                        case BCMOLT_GPON_NI_AUTO_ID_PROTECTION_SWITCHING_TRAFFIC_RESUME:
+                            *size = sizeof(gpon_ni_protection_switching_traffic_resume_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_ni_protection_switching_traffic_resume_prop_array;
+                        case BCMOLT_GPON_NI_AUTO_ID_PROTECTION_SWITCHING_ONUS_RANGED:
+                            *size = sizeof(gpon_ni_protection_switching_onus_ranged_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_ni_protection_switching_onus_ranged_prop_array;
+                        case BCMOLT_GPON_NI_AUTO_ID_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED:
+                            *size = sizeof(gpon_ni_protection_switching_switchover_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_ni_protection_switching_switchover_completed_prop_array;
+                        case BCMOLT_GPON_NI_AUTO_ID_STANDBY_PON_MONITORING_CYCLE_COMPLETED:
+                            *size = sizeof(gpon_ni_standby_pon_monitoring_cycle_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_ni_standby_pon_monitoring_cycle_completed_prop_array;
+                        case BCMOLT_GPON_NI_AUTO_ID_ONU_DISCOVERED:
+                            *size = sizeof(gpon_ni_onu_discovered_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_ni_onu_discovered_prop_array;
+                        case BCMOLT_GPON_NI_AUTO_ID_CPU_PACKETS_FAILURE:
+                            *size = sizeof(gpon_ni_cpu_packets_failure_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_ni_cpu_packets_failure_prop_array;
+                        case BCMOLT_GPON_NI_AUTO_ID_ROGUE_DETECTION_COMPLETED:
+                            *size = sizeof(gpon_ni_rogue_detection_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_ni_rogue_detection_completed_prop_array;
+                        case BCMOLT_GPON_NI_AUTO_ID_DEACTIVATE_ALL_ONUS_COMPLETED:
+                            *size = sizeof(gpon_ni_deactivate_all_onus_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_ni_deactivate_all_onus_completed_prop_array;
+                        case BCMOLT_GPON_NI_AUTO_ID_DISABLE_ALL_ONUS_COMPLETED:
+                            *size = sizeof(gpon_ni_disable_all_onus_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_ni_disable_all_onus_completed_prop_array;
+                        case BCMOLT_GPON_NI_AUTO_ID_ACTIVATE_ALL_ONUS_COMPLETED:
+                            *size = sizeof(gpon_ni_activate_all_onus_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_ni_activate_all_onus_completed_prop_array;
+                        case BCMOLT_GPON_NI_AUTO_ID_ENABLE_ALL_ONUS_COMPLETED:
+                            *size = sizeof(gpon_ni_enable_all_onus_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_ni_enable_all_onus_completed_prop_array;
+                        case BCMOLT_GPON_NI_AUTO_ID_TOD_REQUEST_COMPLETED:
+                            *size = sizeof(gpon_ni_tod_request_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_ni_tod_request_completed_prop_array;
+                        case BCMOLT_GPON_NI_AUTO_ID_ONU_UPGRADE_COMPLETE:
+                            *size = sizeof(gpon_ni_onu_upgrade_complete_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_ni_onu_upgrade_complete_prop_array;
+                        case BCMOLT_GPON_NI_AUTO_ID_ROGUE_ONU_SPECIAL_MAP_CYCLE_START:
+                            *size = sizeof(gpon_ni_rogue_onu_special_map_cycle_start_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_ni_rogue_onu_special_map_cycle_start_prop_array;
+                        case BCMOLT_GPON_NI_AUTO_ID_STAT_ALARM_RAISED:
+                            *size = sizeof(gpon_ni_stat_alarm_raised_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_ni_stat_alarm_raised_prop_array;
+                        case BCMOLT_GPON_NI_AUTO_ID_STAT_ALARM_CLEARED:
+                            *size = sizeof(gpon_ni_stat_alarm_cleared_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_ni_stat_alarm_cleared_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(gpon_ni_auto_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_ni_auto_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_GPON_NI_OPER_ID_SET_PON_STATE:
+                            *size = sizeof(gpon_ni_set_pon_state_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_ni_set_pon_state_prop_array;
+                        case BCMOLT_GPON_NI_OPER_ID_RESET:
+                            *size = sizeof(gpon_ni_reset_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_ni_reset_prop_array;
+                        case BCMOLT_GPON_NI_OPER_ID_DISABLE_SERIAL_NUMBER:
+                            *size = sizeof(gpon_ni_disable_serial_number_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_ni_disable_serial_number_prop_array;
+                        case BCMOLT_GPON_NI_OPER_ID_SINGLE_REQUEST_STANDBY_PON_MONITORING:
+                            *size = sizeof(gpon_ni_single_request_standby_pon_monitoring_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_ni_single_request_standby_pon_monitoring_prop_array;
+                        case BCMOLT_GPON_NI_OPER_ID_SET_ONU_STATE:
+                            *size = sizeof(gpon_ni_set_onu_state_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_ni_set_onu_state_prop_array;
+                        case BCMOLT_GPON_NI_OPER_ID_ROGUE_DETECTION_WINDOW:
+                            *size = sizeof(gpon_ni_rogue_detection_window_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_ni_rogue_detection_window_prop_array;
+                        case BCMOLT_GPON_NI_OPER_ID_TOD_REQUEST:
+                            *size = sizeof(gpon_ni_tod_request_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_ni_tod_request_prop_array;
+                        case BCMOLT_GPON_NI_OPER_ID_PROTECTION_SWITCHING_TYPE_C_SET_MULTIPLE_ONU_STATE:
+                            *size = sizeof(gpon_ni_protection_switching_type_c_set_multiple_onu_state_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_ni_protection_switching_type_c_set_multiple_onu_state_prop_array;
+                        case BCMOLT_GPON_NI_OPER_ID_START_ONU_UPGRADE:
+                            *size = sizeof(gpon_ni_start_onu_upgrade_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_ni_start_onu_upgrade_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_PROXY:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_GPON_NI_PROXY_ID_CPU_PACKETS:
+                            *size = sizeof(gpon_ni_cpu_packets_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_ni_cpu_packets_prop_array;
+                        case BCMOLT_GPON_NI_PROXY_ID_BROADCAST_PLOAM_PACKET:
+                            *size = sizeof(gpon_ni_broadcast_ploam_packet_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_ni_broadcast_ploam_packet_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMOLT_OBJ_ID_GPON_ONU:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(gpon_onu_key_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(gpon_onu_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(gpon_onu_stat_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_stat_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                        case 1:
+                        case 2:
+                        case 3:
+                        case 4:
+                        case 5:
+                        case 6:
+                        case 7:
+                        case 8:
+                        case 9:
+                        case 10:
+                        case 11:
+                        case 12:
+                        case 13:
+                        case 14:
+                        case 15:
+                        case 16:
+                        case 17:
+                        case 18:
+                        case 19:
+                            *size = sizeof(gpon_onu_stat_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_stat_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_GPON_ONU_AUTO_ID_ONU_ALARM:
+                            *size = sizeof(gpon_onu_onu_alarm_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_onu_alarm_prop_array;
+                        case BCMOLT_GPON_ONU_AUTO_ID_DOWI:
+                            *size = sizeof(gpon_onu_dowi_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_dowi_prop_array;
+                        case BCMOLT_GPON_ONU_AUTO_ID_SFI:
+                            *size = sizeof(gpon_onu_sfi_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_sfi_prop_array;
+                        case BCMOLT_GPON_ONU_AUTO_ID_SDI:
+                            *size = sizeof(gpon_onu_sdi_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_sdi_prop_array;
+                        case BCMOLT_GPON_ONU_AUTO_ID_DFI:
+                            *size = sizeof(gpon_onu_dfi_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_dfi_prop_array;
+                        case BCMOLT_GPON_ONU_AUTO_ID_SUFI:
+                            *size = sizeof(gpon_onu_sufi_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_sufi_prop_array;
+                        case BCMOLT_GPON_ONU_AUTO_ID_LOAI:
+                            *size = sizeof(gpon_onu_loai_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_loai_prop_array;
+                        case BCMOLT_GPON_ONU_AUTO_ID_DGI:
+                            *size = sizeof(gpon_onu_dgi_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_dgi_prop_array;
+                        case BCMOLT_GPON_ONU_AUTO_ID_PEE:
+                            *size = sizeof(gpon_onu_pee_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_pee_prop_array;
+                        case BCMOLT_GPON_ONU_AUTO_ID_PST:
+                            *size = sizeof(gpon_onu_pst_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_pst_prop_array;
+                        case BCMOLT_GPON_ONU_AUTO_ID_TIWI:
+                            *size = sizeof(gpon_onu_tiwi_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_tiwi_prop_array;
+                        case BCMOLT_GPON_ONU_AUTO_ID_LOKI:
+                            *size = sizeof(gpon_onu_loki_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_loki_prop_array;
+                        case BCMOLT_GPON_ONU_AUTO_ID_MEMI:
+                            *size = sizeof(gpon_onu_memi_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_memi_prop_array;
+                        case BCMOLT_GPON_ONU_AUTO_ID_OMCI_PORT_ID_CONFIGURATION_COMPLETED:
+                            *size = sizeof(gpon_onu_omci_port_id_configuration_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_omci_port_id_configuration_completed_prop_array;
+                        case BCMOLT_GPON_ONU_AUTO_ID_BER_INTERVAL_CONFIGURATION_COMPLETED:
+                            *size = sizeof(gpon_onu_ber_interval_configuration_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_ber_interval_configuration_completed_prop_array;
+                        case BCMOLT_GPON_ONU_AUTO_ID_ERR:
+                            *size = sizeof(gpon_onu_err_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_err_prop_array;
+                        case BCMOLT_GPON_ONU_AUTO_ID_REI:
+                            *size = sizeof(gpon_onu_rei_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_rei_prop_array;
+                        case BCMOLT_GPON_ONU_AUTO_ID_RANGING_COMPLETED:
+                            *size = sizeof(gpon_onu_ranging_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_ranging_completed_prop_array;
+                        case BCMOLT_GPON_ONU_AUTO_ID_PASSWORD_AUTHENTICATION_COMPLETED:
+                            *size = sizeof(gpon_onu_password_authentication_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_password_authentication_completed_prop_array;
+                        case BCMOLT_GPON_ONU_AUTO_ID_ONU_ACTIVATION_COMPLETED:
+                            *size = sizeof(gpon_onu_onu_activation_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_onu_activation_completed_prop_array;
+                        case BCMOLT_GPON_ONU_AUTO_ID_ONU_DEACTIVATION_COMPLETED:
+                            *size = sizeof(gpon_onu_onu_deactivation_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_onu_deactivation_completed_prop_array;
+                        case BCMOLT_GPON_ONU_AUTO_ID_ONU_ENABLE_COMPLETED:
+                            *size = sizeof(gpon_onu_onu_enable_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_onu_enable_completed_prop_array;
+                        case BCMOLT_GPON_ONU_AUTO_ID_ONU_DISABLE_COMPLETED:
+                            *size = sizeof(gpon_onu_onu_disable_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_onu_disable_completed_prop_array;
+                        case BCMOLT_GPON_ONU_AUTO_ID_INVALID_DBRU_REPORT:
+                            *size = sizeof(gpon_onu_invalid_dbru_report_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_invalid_dbru_report_prop_array;
+                        case BCMOLT_GPON_ONU_AUTO_ID_KEY_EXCHANGE_COMPLETED:
+                            *size = sizeof(gpon_onu_key_exchange_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_key_exchange_completed_prop_array;
+                        case BCMOLT_GPON_ONU_AUTO_ID_KEY_EXCHANGE_KEY_REQUEST_TIMEOUT:
+                            *size = sizeof(gpon_onu_key_exchange_key_request_timeout_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_key_exchange_key_request_timeout_prop_array;
+                        case BCMOLT_GPON_ONU_AUTO_ID_KEY_EXCHANGE_CYCLE_SKIPPED:
+                            *size = sizeof(gpon_onu_key_exchange_cycle_skipped_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_key_exchange_cycle_skipped_prop_array;
+                        case BCMOLT_GPON_ONU_AUTO_ID_KEY_EXCHANGE_KEY_MISMATCH:
+                            *size = sizeof(gpon_onu_key_exchange_key_mismatch_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_key_exchange_key_mismatch_prop_array;
+                        case BCMOLT_GPON_ONU_AUTO_ID_KEY_EXCHANGE_UNCONSECUTIVE_INDEX:
+                            *size = sizeof(gpon_onu_key_exchange_unconsecutive_index_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_key_exchange_unconsecutive_index_prop_array;
+                        case BCMOLT_GPON_ONU_AUTO_ID_RSSI_MEASUREMENT_COMPLETED:
+                            *size = sizeof(gpon_onu_rssi_measurement_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_rssi_measurement_completed_prop_array;
+                        case BCMOLT_GPON_ONU_AUTO_ID_KEY_EXCHANGE_DECRYPT_REQUIRED:
+                            *size = sizeof(gpon_onu_key_exchange_decrypt_required_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_key_exchange_decrypt_required_prop_array;
+                        case BCMOLT_GPON_ONU_AUTO_ID_OPTICAL_REFLECTION:
+                            *size = sizeof(gpon_onu_optical_reflection_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_optical_reflection_prop_array;
+                        case BCMOLT_GPON_ONU_AUTO_ID_ONU_ACTIVATION_STANDBY_COMPLETED:
+                            *size = sizeof(gpon_onu_onu_activation_standby_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_onu_activation_standby_completed_prop_array;
+                        case BCMOLT_GPON_ONU_AUTO_ID_POWER_MANAGEMENT_STATE_CHANGE:
+                            *size = sizeof(gpon_onu_power_management_state_change_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_power_management_state_change_prop_array;
+                        case BCMOLT_GPON_ONU_AUTO_ID_POSSIBLE_DRIFT:
+                            *size = sizeof(gpon_onu_possible_drift_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_possible_drift_prop_array;
+                        case BCMOLT_GPON_ONU_AUTO_ID_STAT_ALARM_RAISED:
+                            *size = sizeof(gpon_onu_stat_alarm_raised_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_stat_alarm_raised_prop_array;
+                        case BCMOLT_GPON_ONU_AUTO_ID_STAT_ALARM_CLEARED:
+                            *size = sizeof(gpon_onu_stat_alarm_cleared_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_stat_alarm_cleared_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(gpon_onu_auto_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_auto_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_GPON_ONU_OPER_ID_SET_ONU_STATE:
+                            *size = sizeof(gpon_onu_set_onu_state_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_set_onu_state_prop_array;
+                        case BCMOLT_GPON_ONU_OPER_ID_RSSI_MEASUREMENT:
+                            *size = sizeof(gpon_onu_rssi_measurement_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_rssi_measurement_prop_array;
+                        case BCMOLT_GPON_ONU_OPER_ID_CHANGE_POWER_LEVEL:
+                            *size = sizeof(gpon_onu_change_power_level_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_change_power_level_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_PROXY:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_GPON_ONU_PROXY_ID_CPU_PACKETS:
+                            *size = sizeof(gpon_onu_cpu_packets_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_cpu_packets_prop_array;
+                        case BCMOLT_GPON_ONU_PROXY_ID_PLOAM_PACKET:
+                            *size = sizeof(gpon_onu_ploam_packet_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_ploam_packet_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_PROXY_RX:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_GPON_ONU_PROXY_RX_ID_CPU_PACKET:
+                            *size = sizeof(gpon_onu_cpu_packet_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_cpu_packet_prop_array;
+                        case BCMOLT_GPON_ONU_PROXY_RX_ID_OMCI_PACKET:
+                            *size = sizeof(gpon_onu_omci_packet_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_onu_omci_packet_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMOLT_OBJ_ID_GPON_TRX:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(gpon_trx_key_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_trx_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(gpon_trx_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return gpon_trx_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMOLT_OBJ_ID_LOG_ENTRY:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(log_entry_key_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return log_entry_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(log_entry_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return log_entry_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(log_entry_stat_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return log_entry_stat_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                        case 1:
+                            *size = sizeof(log_entry_stat_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return log_entry_stat_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_LOG_ENTRY_AUTO_ID_STAT_ALARM_RAISED:
+                            *size = sizeof(log_entry_stat_alarm_raised_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return log_entry_stat_alarm_raised_prop_array;
+                        case BCMOLT_LOG_ENTRY_AUTO_ID_STAT_ALARM_CLEARED:
+                            *size = sizeof(log_entry_stat_alarm_cleared_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return log_entry_stat_alarm_cleared_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(log_entry_auto_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return log_entry_auto_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMOLT_OBJ_ID_LOGGER:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(logger_key_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return logger_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(logger_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return logger_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(logger_stat_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return logger_stat_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(logger_stat_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return logger_stat_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_LOGGER_AUTO_ID_STAT_ALARM_RAISED:
+                            *size = sizeof(logger_stat_alarm_raised_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return logger_stat_alarm_raised_prop_array;
+                        case BCMOLT_LOGGER_AUTO_ID_STAT_ALARM_CLEARED:
+                            *size = sizeof(logger_stat_alarm_cleared_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return logger_stat_alarm_cleared_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(logger_auto_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return logger_auto_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_LOGGER_OPER_ID_CLEAR_LOG:
+                            *size = sizeof(logger_clear_log_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return logger_clear_log_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMOLT_OBJ_ID_NNI:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(nni_key_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return nni_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(nni_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return nni_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(nni_stat_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return nni_stat_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                        case 1:
+                        case 2:
+                        case 3:
+                        case 4:
+                        case 5:
+                        case 6:
+                        case 7:
+                        case 8:
+                        case 9:
+                        case 10:
+                        case 11:
+                        case 12:
+                        case 13:
+                        case 14:
+                        case 15:
+                        case 16:
+                        case 17:
+                        case 18:
+                        case 19:
+                        case 20:
+                        case 21:
+                        case 22:
+                        case 23:
+                        case 24:
+                        case 25:
+                        case 26:
+                        case 27:
+                        case 28:
+                        case 29:
+                        case 30:
+                        case 31:
+                        case 32:
+                        case 33:
+                        case 34:
+                        case 35:
+                        case 36:
+                        case 37:
+                        case 38:
+                        case 39:
+                        case 40:
+                        case 41:
+                        case 42:
+                        case 43:
+                        case 44:
+                        case 45:
+                        case 46:
+                        case 47:
+                        case 48:
+                        case 49:
+                        case 50:
+                        case 51:
+                        case 52:
+                        case 53:
+                        case 54:
+                        case 55:
+                        case 56:
+                        case 57:
+                        case 58:
+                        case 59:
+                        case 60:
+                        case 61:
+                        case 62:
+                            *size = sizeof(nni_stat_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return nni_stat_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_NNI_AUTO_ID_STATUS_CHANGED:
+                            *size = sizeof(nni_status_changed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return nni_status_changed_prop_array;
+                        case BCMOLT_NNI_AUTO_ID_STAT_ALARM_RAISED:
+                            *size = sizeof(nni_stat_alarm_raised_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return nni_stat_alarm_raised_prop_array;
+                        case BCMOLT_NNI_AUTO_ID_STAT_ALARM_CLEARED:
+                            *size = sizeof(nni_stat_alarm_cleared_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return nni_stat_alarm_cleared_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(nni_auto_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return nni_auto_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMOLT_OBJ_ID_NNI_SERDES:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(nni_serdes_key_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return nni_serdes_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(nni_serdes_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return nni_serdes_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMOLT_OBJ_ID_SOFTWARE_ERROR:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(software_error_key_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return software_error_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(software_error_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return software_error_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMOLT_OBJ_ID_TRX_CALIBRATION:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(trx_calibration_key_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return trx_calibration_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_TRX_CALIBRATION_AUTO_ID_CAPTURE_WINDOW_AND_STATISTIC_COMPLETED:
+                            *size = sizeof(trx_calibration_capture_window_and_statistic_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return trx_calibration_capture_window_and_statistic_completed_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(trx_calibration_auto_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return trx_calibration_auto_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_TRX_CALIBRATION_OPER_ID_START_CAPTURE_WINDOW:
+                            *size = sizeof(trx_calibration_start_capture_window_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return trx_calibration_start_capture_window_prop_array;
+                        case BCMOLT_TRX_CALIBRATION_OPER_ID_STOP_CAPTURE_WINDOW:
+                            *size = sizeof(trx_calibration_stop_capture_window_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return trx_calibration_stop_capture_window_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMOLT_OBJ_ID_XGPON_ALLOC:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(xgpon_alloc_key_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_alloc_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(xgpon_alloc_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_alloc_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(xgpon_alloc_stat_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_alloc_stat_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(xgpon_alloc_stat_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_alloc_stat_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_XGPON_ALLOC_AUTO_ID_CONFIGURATION_COMPLETED:
+                            *size = sizeof(xgpon_alloc_configuration_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_alloc_configuration_completed_prop_array;
+                        case BCMOLT_XGPON_ALLOC_AUTO_ID_GET_ALLOC_STATS_COMPLETED:
+                            *size = sizeof(xgpon_alloc_get_alloc_stats_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_alloc_get_alloc_stats_completed_prop_array;
+                        case BCMOLT_XGPON_ALLOC_AUTO_ID_STAT_ALARM_RAISED:
+                            *size = sizeof(xgpon_alloc_stat_alarm_raised_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_alloc_stat_alarm_raised_prop_array;
+                        case BCMOLT_XGPON_ALLOC_AUTO_ID_STAT_ALARM_CLEARED:
+                            *size = sizeof(xgpon_alloc_stat_alarm_cleared_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_alloc_stat_alarm_cleared_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(xgpon_alloc_auto_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_alloc_auto_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_XGPON_ALLOC_OPER_ID_GET_STATS:
+                            *size = sizeof(xgpon_alloc_get_stats_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_alloc_get_stats_prop_array;
+                        case BCMOLT_XGPON_ALLOC_OPER_ID_SET_STATE:
+                            *size = sizeof(xgpon_alloc_set_state_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_alloc_set_state_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMOLT_OBJ_ID_XGPON_GEM_PORT:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(xgpon_gem_port_key_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_gem_port_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(xgpon_gem_port_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_gem_port_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(xgpon_gem_port_stat_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_gem_port_stat_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                        case 1:
+                        case 2:
+                        case 3:
+                            *size = sizeof(xgpon_gem_port_stat_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_gem_port_stat_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_XGPON_GEM_PORT_AUTO_ID_STAT_ALARM_RAISED:
+                            *size = sizeof(xgpon_gem_port_stat_alarm_raised_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_gem_port_stat_alarm_raised_prop_array;
+                        case BCMOLT_XGPON_GEM_PORT_AUTO_ID_STAT_ALARM_CLEARED:
+                            *size = sizeof(xgpon_gem_port_stat_alarm_cleared_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_gem_port_stat_alarm_cleared_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(xgpon_gem_port_auto_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_gem_port_auto_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMOLT_OBJ_ID_XGPON_IWF:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(xgpon_iwf_key_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_iwf_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(xgpon_iwf_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_iwf_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMOLT_OBJ_ID_XGPON_NI:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(xgpon_ni_key_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_ni_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(xgpon_ni_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_ni_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(xgpon_ni_stat_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_ni_stat_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                        case 1:
+                        case 2:
+                        case 3:
+                        case 4:
+                        case 5:
+                        case 6:
+                        case 7:
+                        case 8:
+                        case 9:
+                        case 10:
+                        case 11:
+                        case 12:
+                        case 13:
+                        case 14:
+                        case 15:
+                        case 16:
+                        case 17:
+                        case 18:
+                        case 19:
+                        case 20:
+                        case 21:
+                        case 22:
+                        case 23:
+                        case 24:
+                        case 25:
+                        case 26:
+                        case 27:
+                        case 28:
+                        case 29:
+                        case 30:
+                        case 31:
+                        case 32:
+                        case 33:
+                        case 34:
+                            *size = sizeof(xgpon_ni_stat_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_ni_stat_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_XGPON_NI_AUTO_ID_STATE_CHANGE_COMPLETED:
+                            *size = sizeof(xgpon_ni_state_change_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_ni_state_change_completed_prop_array;
+                        case BCMOLT_XGPON_NI_AUTO_ID_LOS:
+                            *size = sizeof(xgpon_ni_los_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_ni_los_prop_array;
+                        case BCMOLT_XGPON_NI_AUTO_ID_SERIAL_NUMBER_ACQUISITION_CYCLE_START:
+                            *size = sizeof(xgpon_ni_serial_number_acquisition_cycle_start_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_ni_serial_number_acquisition_cycle_start_prop_array;
+                        case BCMOLT_XGPON_NI_AUTO_ID_PROTECTION_SWITCHING_TRAFFIC_RESUME:
+                            *size = sizeof(xgpon_ni_protection_switching_traffic_resume_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_ni_protection_switching_traffic_resume_prop_array;
+                        case BCMOLT_XGPON_NI_AUTO_ID_PROTECTION_SWITCHING_ONUS_RANGED:
+                            *size = sizeof(xgpon_ni_protection_switching_onus_ranged_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_ni_protection_switching_onus_ranged_prop_array;
+                        case BCMOLT_XGPON_NI_AUTO_ID_PROTECTION_SWITCHING_SWITCHOVER_COMPLETED:
+                            *size = sizeof(xgpon_ni_protection_switching_switchover_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_ni_protection_switching_switchover_completed_prop_array;
+                        case BCMOLT_XGPON_NI_AUTO_ID_STANDBY_PON_MONITORING_CYCLE_COMPLETED:
+                            *size = sizeof(xgpon_ni_standby_pon_monitoring_cycle_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_ni_standby_pon_monitoring_cycle_completed_prop_array;
+                        case BCMOLT_XGPON_NI_AUTO_ID_ONU_DISCOVERED:
+                            *size = sizeof(xgpon_ni_onu_discovered_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_ni_onu_discovered_prop_array;
+                        case BCMOLT_XGPON_NI_AUTO_ID_CPU_PACKETS_FAILURE:
+                            *size = sizeof(xgpon_ni_cpu_packets_failure_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_ni_cpu_packets_failure_prop_array;
+                        case BCMOLT_XGPON_NI_AUTO_ID_ROGUE_DETECTION_COMPLETED:
+                            *size = sizeof(xgpon_ni_rogue_detection_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_ni_rogue_detection_completed_prop_array;
+                        case BCMOLT_XGPON_NI_AUTO_ID_DEACTIVATE_ALL_ONUS_COMPLETED:
+                            *size = sizeof(xgpon_ni_deactivate_all_onus_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_ni_deactivate_all_onus_completed_prop_array;
+                        case BCMOLT_XGPON_NI_AUTO_ID_DISABLE_ALL_ONUS_COMPLETED:
+                            *size = sizeof(xgpon_ni_disable_all_onus_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_ni_disable_all_onus_completed_prop_array;
+                        case BCMOLT_XGPON_NI_AUTO_ID_ACTIVATE_ALL_ONUS_COMPLETED:
+                            *size = sizeof(xgpon_ni_activate_all_onus_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_ni_activate_all_onus_completed_prop_array;
+                        case BCMOLT_XGPON_NI_AUTO_ID_ENABLE_ALL_ONUS_COMPLETED:
+                            *size = sizeof(xgpon_ni_enable_all_onus_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_ni_enable_all_onus_completed_prop_array;
+                        case BCMOLT_XGPON_NI_AUTO_ID_TOD_REQUEST_COMPLETED:
+                            *size = sizeof(xgpon_ni_tod_request_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_ni_tod_request_completed_prop_array;
+                        case BCMOLT_XGPON_NI_AUTO_ID_ONU_UPGRADE_COMPLETE:
+                            *size = sizeof(xgpon_ni_onu_upgrade_complete_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_ni_onu_upgrade_complete_prop_array;
+                        case BCMOLT_XGPON_NI_AUTO_ID_ROGUE_ONU_SPECIAL_MAP_CYCLE_START:
+                            *size = sizeof(xgpon_ni_rogue_onu_special_map_cycle_start_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_ni_rogue_onu_special_map_cycle_start_prop_array;
+                        case BCMOLT_XGPON_NI_AUTO_ID_STAT_ALARM_RAISED:
+                            *size = sizeof(xgpon_ni_stat_alarm_raised_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_ni_stat_alarm_raised_prop_array;
+                        case BCMOLT_XGPON_NI_AUTO_ID_STAT_ALARM_CLEARED:
+                            *size = sizeof(xgpon_ni_stat_alarm_cleared_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_ni_stat_alarm_cleared_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(xgpon_ni_auto_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_ni_auto_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_XGPON_NI_OPER_ID_SET_PON_STATE:
+                            *size = sizeof(xgpon_ni_set_pon_state_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_ni_set_pon_state_prop_array;
+                        case BCMOLT_XGPON_NI_OPER_ID_RESET:
+                            *size = sizeof(xgpon_ni_reset_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_ni_reset_prop_array;
+                        case BCMOLT_XGPON_NI_OPER_ID_DISABLE_SERIAL_NUMBER:
+                            *size = sizeof(xgpon_ni_disable_serial_number_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_ni_disable_serial_number_prop_array;
+                        case BCMOLT_XGPON_NI_OPER_ID_SINGLE_REQUEST_STANDBY_PON_MONITORING:
+                            *size = sizeof(xgpon_ni_single_request_standby_pon_monitoring_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_ni_single_request_standby_pon_monitoring_prop_array;
+                        case BCMOLT_XGPON_NI_OPER_ID_SET_ONU_STATE:
+                            *size = sizeof(xgpon_ni_set_onu_state_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_ni_set_onu_state_prop_array;
+                        case BCMOLT_XGPON_NI_OPER_ID_RUN_SPECIAL_BW_MAP:
+                            *size = sizeof(xgpon_ni_run_special_bw_map_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_ni_run_special_bw_map_prop_array;
+                        case BCMOLT_XGPON_NI_OPER_ID_ROGUE_DETECTION_WINDOW:
+                            *size = sizeof(xgpon_ni_rogue_detection_window_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_ni_rogue_detection_window_prop_array;
+                        case BCMOLT_XGPON_NI_OPER_ID_TOD_REQUEST:
+                            *size = sizeof(xgpon_ni_tod_request_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_ni_tod_request_prop_array;
+                        case BCMOLT_XGPON_NI_OPER_ID_START_ONU_UPGRADE:
+                            *size = sizeof(xgpon_ni_start_onu_upgrade_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_ni_start_onu_upgrade_prop_array;
+                        case BCMOLT_XGPON_NI_OPER_ID_ADJUST_TX_WAVELENGTH:
+                            *size = sizeof(xgpon_ni_adjust_tx_wavelength_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_ni_adjust_tx_wavelength_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_PROXY:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_XGPON_NI_PROXY_ID_CPU_PACKETS:
+                            *size = sizeof(xgpon_ni_cpu_packets_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_ni_cpu_packets_prop_array;
+                        case BCMOLT_XGPON_NI_PROXY_ID_BROADCAST_PLOAM_PACKET:
+                            *size = sizeof(xgpon_ni_broadcast_ploam_packet_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_ni_broadcast_ploam_packet_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMOLT_OBJ_ID_XGPON_ONU:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(xgpon_onu_key_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(xgpon_onu_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(xgpon_onu_stat_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_stat_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_STAT_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                        case 1:
+                        case 2:
+                        case 3:
+                        case 4:
+                        case 5:
+                        case 6:
+                        case 7:
+                        case 8:
+                        case 9:
+                        case 10:
+                        case 11:
+                        case 12:
+                        case 13:
+                        case 14:
+                        case 15:
+                        case 16:
+                        case 17:
+                        case 18:
+                        case 19:
+                            *size = sizeof(xgpon_onu_stat_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_stat_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_XGPON_ONU_AUTO_ID_ONU_ALARM:
+                            *size = sizeof(xgpon_onu_onu_alarm_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_onu_alarm_prop_array;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_DOWI:
+                            *size = sizeof(xgpon_onu_dowi_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_dowi_prop_array;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_SFI:
+                            *size = sizeof(xgpon_onu_sfi_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_sfi_prop_array;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_SDI:
+                            *size = sizeof(xgpon_onu_sdi_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_sdi_prop_array;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_DFI:
+                            *size = sizeof(xgpon_onu_dfi_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_dfi_prop_array;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_PQSI:
+                            *size = sizeof(xgpon_onu_pqsi_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_pqsi_prop_array;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_SUFI:
+                            *size = sizeof(xgpon_onu_sufi_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_sufi_prop_array;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_TIWI:
+                            *size = sizeof(xgpon_onu_tiwi_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_tiwi_prop_array;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_LOOCI:
+                            *size = sizeof(xgpon_onu_looci_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_looci_prop_array;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_RANGING_COMPLETED:
+                            *size = sizeof(xgpon_onu_ranging_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_ranging_completed_prop_array;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_ONU_ACTIVATION_COMPLETED:
+                            *size = sizeof(xgpon_onu_onu_activation_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_onu_activation_completed_prop_array;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_ONU_DEACTIVATION_COMPLETED:
+                            *size = sizeof(xgpon_onu_onu_deactivation_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_onu_deactivation_completed_prop_array;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_ONU_ENABLE_COMPLETED:
+                            *size = sizeof(xgpon_onu_onu_enable_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_onu_enable_completed_prop_array;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_ONU_DISABLE_COMPLETED:
+                            *size = sizeof(xgpon_onu_onu_disable_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_onu_disable_completed_prop_array;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_RSSI_MEASUREMENT_COMPLETED:
+                            *size = sizeof(xgpon_onu_rssi_measurement_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_rssi_measurement_completed_prop_array;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_INVALID_DBRU_REPORT:
+                            *size = sizeof(xgpon_onu_invalid_dbru_report_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_invalid_dbru_report_prop_array;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_KEY_EXCHANGE_COMPLETED:
+                            *size = sizeof(xgpon_onu_key_exchange_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_key_exchange_completed_prop_array;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_KEY_EXCHANGE_KEY_REQUEST_TIMEOUT:
+                            *size = sizeof(xgpon_onu_key_exchange_key_request_timeout_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_key_exchange_key_request_timeout_prop_array;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_KEY_EXCHANGE_CYCLE_SKIPPED:
+                            *size = sizeof(xgpon_onu_key_exchange_cycle_skipped_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_key_exchange_cycle_skipped_prop_array;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_KEY_EXCHANGE_KEY_MISMATCH:
+                            *size = sizeof(xgpon_onu_key_exchange_key_mismatch_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_key_exchange_key_mismatch_prop_array;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_OPTICAL_REFLECTION:
+                            *size = sizeof(xgpon_onu_optical_reflection_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_optical_reflection_prop_array;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_DGI:
+                            *size = sizeof(xgpon_onu_dgi_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_dgi_prop_array;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_POWER_MANAGEMENT_STATE_CHANGE:
+                            *size = sizeof(xgpon_onu_power_management_state_change_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_power_management_state_change_prop_array;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_POSSIBLE_DRIFT:
+                            *size = sizeof(xgpon_onu_possible_drift_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_possible_drift_prop_array;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_REGISTRATION_ID:
+                            *size = sizeof(xgpon_onu_registration_id_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_registration_id_prop_array;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_POWER_LEVEL_REPORT:
+                            *size = sizeof(xgpon_onu_power_level_report_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_power_level_report_prop_array;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_POWER_CONSUMPTION_REPORT:
+                            *size = sizeof(xgpon_onu_power_consumption_report_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_power_consumption_report_prop_array;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_SECURE_MUTUAL_AUTHENTICATION_FAILURE:
+                            *size = sizeof(xgpon_onu_secure_mutual_authentication_failure_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_secure_mutual_authentication_failure_prop_array;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_ONU_TUNING_OUT_COMPLETED:
+                            *size = sizeof(xgpon_onu_onu_tuning_out_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_onu_tuning_out_completed_prop_array;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_ONU_TUNING_IN_COMPLETED:
+                            *size = sizeof(xgpon_onu_onu_tuning_in_completed_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_onu_tuning_in_completed_prop_array;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_TUNING_RESPONSE:
+                            *size = sizeof(xgpon_onu_tuning_response_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_tuning_response_prop_array;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_STAT_ALARM_RAISED:
+                            *size = sizeof(xgpon_onu_stat_alarm_raised_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_stat_alarm_raised_prop_array;
+                        case BCMOLT_XGPON_ONU_AUTO_ID_STAT_ALARM_CLEARED:
+                            *size = sizeof(xgpon_onu_stat_alarm_cleared_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_stat_alarm_cleared_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_AUTO_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(xgpon_onu_auto_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_auto_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_OPER:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_XGPON_ONU_OPER_ID_SET_ONU_STATE:
+                            *size = sizeof(xgpon_onu_set_onu_state_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_set_onu_state_prop_array;
+                        case BCMOLT_XGPON_ONU_OPER_ID_RSSI_MEASUREMENT:
+                            *size = sizeof(xgpon_onu_rssi_measurement_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_rssi_measurement_prop_array;
+                        case BCMOLT_XGPON_ONU_OPER_ID_REQUEST_REGISTRATION:
+                            *size = sizeof(xgpon_onu_request_registration_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_request_registration_prop_array;
+                        case BCMOLT_XGPON_ONU_OPER_ID_CHANGE_POWER_LEVELLING:
+                            *size = sizeof(xgpon_onu_change_power_levelling_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_change_power_levelling_prop_array;
+                        case BCMOLT_XGPON_ONU_OPER_ID_GET_POWER_LEVEL:
+                            *size = sizeof(xgpon_onu_get_power_level_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_get_power_level_prop_array;
+                        case BCMOLT_XGPON_ONU_OPER_ID_GET_POWER_CONSUMPTION:
+                            *size = sizeof(xgpon_onu_get_power_consumption_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_get_power_consumption_prop_array;
+                        case BCMOLT_XGPON_ONU_OPER_ID_ADJUST_TX_WAVELENGTH:
+                            *size = sizeof(xgpon_onu_adjust_tx_wavelength_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_adjust_tx_wavelength_prop_array;
+                        case BCMOLT_XGPON_ONU_OPER_ID_SECURE_MUTUAL_AUTHENTICATION:
+                            *size = sizeof(xgpon_onu_secure_mutual_authentication_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_secure_mutual_authentication_prop_array;
+                        case BCMOLT_XGPON_ONU_OPER_ID_ONU_TUNING_IN:
+                            *size = sizeof(xgpon_onu_onu_tuning_in_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_onu_tuning_in_prop_array;
+                        case BCMOLT_XGPON_ONU_OPER_ID_ONU_TUNING_OUT:
+                            *size = sizeof(xgpon_onu_onu_tuning_out_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_onu_tuning_out_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_PROXY:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_XGPON_ONU_PROXY_ID_PLOAM_PACKET:
+                            *size = sizeof(xgpon_onu_ploam_packet_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_ploam_packet_prop_array;
+                        case BCMOLT_XGPON_ONU_PROXY_ID_CPU_PACKETS:
+                            *size = sizeof(xgpon_onu_cpu_packets_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_cpu_packets_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_PROXY_RX:
+                    switch (subgroup)
+                    {
+                        case BCMOLT_XGPON_ONU_PROXY_RX_ID_CPU_PACKET:
+                            *size = sizeof(xgpon_onu_cpu_packet_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_cpu_packet_prop_array;
+                        case BCMOLT_XGPON_ONU_PROXY_RX_ID_OMCI_PACKET:
+                            *size = sizeof(xgpon_onu_omci_packet_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_onu_omci_packet_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMOLT_OBJ_ID_XGPON_TRX:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(xgpon_trx_key_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_trx_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(xgpon_trx_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xgpon_trx_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        case BCMOLT_OBJ_ID_XPON_SERDES:
+            switch (group)
+            {
+                case BCMOLT_MGT_GROUP_KEY:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(xpon_serdes_key_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xpon_serdes_key_prop_array;
+                        default:
+                            break;
+                    }
+
+                case BCMOLT_MGT_GROUP_CFG:
+                    switch (subgroup)
+                    {
+                        case 0:
+                            *size = sizeof(xpon_serdes_cfg_prop_array) / sizeof(bcmcli_prop_descr *);
+                            return xpon_serdes_cfg_prop_array;
+                        default:
+                            break;
+                    }
+
+                default:
+                    break;
+            }
+
+        default:
+            break;
+    }
+
+    return NULL;
+}
+
+bcmos_errno api_cli_object_name(bcmolt_obj_id obj, const char **name, const char **descr)
+{
+    if (obj >= BCMOLT_OBJ_ID__NUM_OF)
+    {
+        return BCM_ERR_RANGE;
+    }
+
+    if (object_name[obj] == NULL)
+    {
+        return BCM_ERR_NOENT;
+    }
+
+    if (name != NULL)
+    {
+        *name = object_name[obj];
+    }
+
+    if (descr != NULL)
+    {
+        *descr = object_descr[obj];
+    }
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno api_cli_object_property(bcmolt_obj_id obj, bcmolt_mgt_group group, uint16_t subgroup, uint16_t prop, const bcmcli_prop_descr **descr)
+{
+    bcmcli_prop_descr **prop_array = NULL;
+    uint32_t prop_array_size = 0;
+    if (descr == NULL)
+    {
+        return BCM_ERR_PARM;
+    }
+
+    prop_array = obj_get_prop_array(obj, group, subgroup, &prop_array_size);
+    if ((prop_array == NULL) || (prop >= prop_array_size))
+    {
+        return BCM_ERR_RANGE;
+    }
+
+    if (prop_array[prop] == NULL)
+    {
+        return BCM_ERR_NOENT;
+    }
+
+    *descr = prop_array[prop];
+    return BCM_ERR_OK;
+}
diff --git a/bcm68620_release/release/host_reference/api_cli/bcm_api_cli_helpers.h b/bcm68620_release/release/host_reference/api_cli/bcm_api_cli_helpers.h
new file mode 100644
index 0000000..87e7237
--- /dev/null
+++ b/bcm68620_release/release/host_reference/api_cli/bcm_api_cli_helpers.h
@@ -0,0 +1,768 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+#ifndef MAPLE_CLI_HELPERS_H_
+#define MAPLE_CLI_HELPERS_H_
+
+#include <bcmcli.h>
+#include <bcm_api_cli_types.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/* Mac name length */
+#define APICLI_MAX_PARM_NAME_LENGTH BCMCLI_MAX_SEARCH_SUBSTR_LENGTH
+
+/* Max help string length */
+#define APICLI_MAX_PARM_HELP_LENGTH 128
+
+typedef enum bcmcli_field_descr_flags
+{
+    BCMCLI_FIELD_DESCR_FLAGS_NONE           = 0,
+    BCMCLI_FIELD_DESCR_FLAGS_PRESENCE_MASK  = (1 << 0)  /* field is a 'presence mask' for a structure */
+} bcmcli_field_descr_flags;
+
+typedef struct bcmcli_type_descr bcmcli_type_descr;
+
+/* Structure field descriptor */
+typedef struct bcmcli_field_descr
+{
+    const char *name;           /* Field name */
+    const char *descr;          /* Field description */
+    const char *cli_name;       /* Short CLI name. can be missing */
+    bcmcli_type_descr *type;    /* Field type */
+    uint16_t offset;            /* Offset from the beginning of the type structure */
+    bcmcli_field_descr_flags flags;
+} bcmcli_field_descr;
+
+/* Data type descriptor */
+struct bcmcli_type_descr
+{
+    const char *name;                           /* Type name */
+    const char *descr;                          /* Type description. can be missing */
+    const char *cli_name;                       /* Short CLI name. can be missing */
+    bcmolt_base_type_id base_type;              /* Base type: snum, unum, string, ip, enum, etc. */
+    uint32_t min_val;                           /* Min value for range check */
+    uint32_t max_val;                           /* Max value for range check */
+    uint16_t size;                              /* Size */
+
+    /* The following union is qualified by the base_type and contains additional
+     * info for array, enum, struct, union */
+    union
+    {
+        bcmcli_enum_val *e;                     /* enum value array Contains num_elements+1 values. The last value has name=NULL */
+        struct
+        {
+            uint16_t num_fields;                /* number of elements in the following structure */
+            bcmcli_field_descr *fields;         /* Structure field array. Contains num_elements values */
+        } s;
+        struct
+        {
+            uint16_t num_common_fields;         /* number of non-union fields at the start of the struct */
+            bcmcli_field_descr *common_fields;  /* common field array. Contains num_elements values */
+            uint16_t classifier_idx;            /* index of the classifier field within common_fields */
+            bcmcli_field_descr *union_fields;   /* sub-struct fields under the union (name == NULL if no fields present)
+                                                   (one per enum entry in the classifier type, plus one for default) */
+        } u;
+        struct
+        {
+            bcmcli_type_descr *elem_type;       /* Array element type */
+            uint8_t len_size;                   /* Byte width of array length field (at start of struct) */
+            uint16_t max_size;                  /* Max array size */
+        } arr_dyn;
+        struct
+        {
+            bcmcli_type_descr *elem_type;       /* Array element type */
+            uint16_t size;                      /* Fixed array size */
+        } arr_fixed;
+    } x;
+};
+
+/* Property descriptor.
+ * The 1st 5 fields are exactly the same as in bcmcli_field_descr
+ * ToDo: replace with bcmcli_field_descr substructure.
+ * Requires changes in code generator
+ */
+typedef struct
+{
+    const char *name;               /* C name */
+    const char *descr;              /* Property description */
+    const char *cli_name;           /* CLI name */
+    bcmcli_type_descr *type;        /* Type reference */
+    uint16_t offset;                /* Offset in generated per-group structure */
+    uint16_t property;              /* Property id in per-object management group */
+    bcmolt_prop_access_id access;   /* Access */
+} bcmcli_prop_descr;
+
+/* All APIs return
+ * BCM_ERR_OK - ok
+ * BCM_ERR_NOENT - if id is in range, but doesn't correspond to any value (a hole)
+ * BCM_ERR_RANGE - id is out of range
+ */
+
+/* Get object name by id */
+bcmos_errno api_cli_object_name(bcmolt_obj_id obj, const char **name, const char **descr);
+
+/* Get object structure size */
+bcmos_errno api_cli_object_struct_size(bcmolt_obj_id obj, bcmolt_mgt_group group, uint16_t subgroup, uint32_t *key_size, uint32_t *key_offset, uint32_t *data_size, uint32_t *data_offset);
+
+/* Get object subgroup (specific operation or proxy) name and description */
+bcmos_errno api_cli_object_subgroup_name(bcmolt_obj_id obj, bcmolt_mgt_group group, uint16_t subgroup, const char **name, const char **descr);
+
+/* Get property by object, mgt_group, subgroup (specific operation or proxy), property_id */
+bcmos_errno api_cli_object_property(bcmolt_obj_id obj, bcmolt_mgt_group group, uint16_t subgroup, uint16_t prop, const bcmcli_prop_descr **descr);
+
+/* Get the number of subgroups present for a given group */
+static inline uint16_t api_cli_get_subgroup_count(bcmolt_obj_id obj, bcmolt_mgt_group group)
+{
+    uint16_t count = 0;
+    uint32_t dummy;
+    while (api_cli_object_struct_size(obj, group, count, &dummy, &dummy, &dummy, &dummy) != BCM_ERR_RANGE)
+    {
+        ++count;
+    }
+
+    return count;
+}
+
+/* Dump a single property */
+bcmos_errno apicli_dump_prop(bcmcli_session *session, const bcmcli_prop_descr *pd, void *prop_data);
+
+/* Dump a single property value in C initializer format */
+bcmos_errno apicli_dump_prop_initializer(bcmcli_session *session, const bcmcli_prop_descr *pd, void *prop_data);
+
+/* Dump a dynamic array in C initializer format */
+bcmos_errno apicli_dump_dyn_array(bcmcli_session *session, const bcmcli_type_descr *td, void *data, const char *name);
+
+/* Dump property as CLI parameters */
+bcmos_errno apicli_dump_prop_param(bcmcli_session *session, const bcmcli_prop_descr *pd, void *prop_data, const char *prefix);
+
+/* Dump message */
+bcmos_errno apicli_msg_dump(bcmcli_session *session, bcmolt_msg *msg);
+
+/* Message group name */
+const char *apicli_mgt_group_to_str(bcmolt_mgt_group group);
+
+/* Convert an enum value to the corresponding string */
+#define BCMOLT_ENUM_STRING_VAL(enum_name, value)    bcmcli_enum_stringval(enum_name ## _string_table, (value))
+
+/* Enum string tables */
+extern bcmcli_enum_val bcmolt_activation_fail_reason_string_table[];
+extern bcmcli_enum_val bcmolt_additional_bw_eligibility_string_table[];
+extern bcmcli_enum_val bcmolt_ae_ni_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_ae_ni_en_state_string_table[];
+extern bcmcli_enum_val bcmolt_ae_ni_key_id_string_table[];
+extern bcmcli_enum_val bcmolt_ae_ni_set_ae_ni_en_state_id_string_table[];
+extern bcmcli_enum_val bcmolt_ae_path_ds_auto_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_ae_path_ds_key_id_string_table[];
+extern bcmcli_enum_val bcmolt_ae_path_ds_stat_alarm_cleared_id_string_table[];
+extern bcmcli_enum_val bcmolt_ae_path_ds_stat_alarm_raised_id_string_table[];
+extern bcmcli_enum_val bcmolt_ae_path_ds_stat_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_ae_path_ds_stat_id_string_table[];
+extern bcmcli_enum_val bcmolt_ae_path_us_auto_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_ae_path_us_key_id_string_table[];
+extern bcmcli_enum_val bcmolt_ae_path_us_stat_alarm_cleared_id_string_table[];
+extern bcmcli_enum_val bcmolt_ae_path_us_stat_alarm_raised_id_string_table[];
+extern bcmcli_enum_val bcmolt_ae_path_us_stat_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_ae_path_us_stat_id_string_table[];
+extern bcmcli_enum_val bcmolt_alloc_operation_string_table[];
+extern bcmcli_enum_val bcmolt_alloc_state_string_table[];
+extern bcmcli_enum_val bcmolt_alloc_type_string_table[];
+extern bcmcli_enum_val bcmolt_alloc_type_to_scan_string_table[];
+extern bcmcli_enum_val bcmolt_api_capture_buffer_mode_string_table[];
+extern bcmcli_enum_val bcmolt_api_capture_location_string_table[];
+extern bcmcli_enum_val bcmolt_calibration_record_string_table[];
+extern bcmcli_enum_val bcmolt_sign_string_table[];
+extern bcmcli_enum_val bcmolt_upstream_line_rate_capabilities_string_table[];
+extern bcmcli_enum_val bcmolt_link_type_string_table[];
+extern bcmcli_enum_val bcmolt_capture_strobe_signal_string_table[];
+extern bcmcli_enum_val bcmolt_channel_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_channel_key_id_string_table[];
+extern bcmcli_enum_val bcmolt_console_redirection_string_table[];
+extern bcmcli_enum_val bcmolt_control_state_string_table[];
+extern bcmcli_enum_val bcmolt_dba_mode_string_table[];
+extern bcmcli_enum_val bcmolt_dba_ram_string_table[];
+extern bcmcli_enum_val bcmolt_dba_type_string_table[];
+extern bcmcli_enum_val bcmolt_ddr_test_status_string_table[];
+extern bcmcli_enum_val bcmolt_ddr_test_result_string_table[];
+extern bcmcli_enum_val bcmolt_host_connection_fail_reason_string_table[];
+extern bcmcli_enum_val bcmolt_deactivation_reason_string_table[];
+extern bcmcli_enum_val bcmolt_debug_auto_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_debug_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_debug_cli_input_id_string_table[];
+extern bcmcli_enum_val bcmolt_debug_cli_output_id_string_table[];
+extern bcmcli_enum_val bcmolt_debug_file_almost_full_id_string_table[];
+extern bcmcli_enum_val bcmolt_debug_key_id_string_table[];
+extern bcmcli_enum_val bcmolt_debug_reset_api_capture_id_string_table[];
+extern bcmcli_enum_val bcmolt_debug_start_api_capture_id_string_table[];
+extern bcmcli_enum_val bcmolt_debug_stop_api_capture_id_string_table[];
+extern bcmcli_enum_val bcmolt_device_auto_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_device_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_device_chip_revision_string_table[];
+extern bcmcli_enum_val bcmolt_device_connect_id_string_table[];
+extern bcmcli_enum_val bcmolt_device_connection_complete_id_string_table[];
+extern bcmcli_enum_val bcmolt_device_connection_established_id_string_table[];
+extern bcmcli_enum_val bcmolt_device_connection_failure_id_string_table[];
+extern bcmcli_enum_val bcmolt_device_ddr_test_complete_id_string_table[];
+extern bcmcli_enum_val bcmolt_device_device_keep_alive_id_string_table[];
+extern bcmcli_enum_val bcmolt_device_device_ready_id_string_table[];
+extern bcmcli_enum_val bcmolt_device_disconnect_id_string_table[];
+extern bcmcli_enum_val bcmolt_device_disconnection_complete_id_string_table[];
+extern bcmcli_enum_val bcmolt_device_host_keep_alive_id_string_table[];
+extern bcmcli_enum_val bcmolt_device_image_transfer_complete_id_string_table[];
+extern bcmcli_enum_val bcmolt_device_image_transfer_data_id_string_table[];
+extern bcmcli_enum_val bcmolt_device_image_transfer_start_id_string_table[];
+extern bcmcli_enum_val bcmolt_device_image_type_string_table[];
+extern bcmcli_enum_val bcmolt_device_indications_dropped_id_string_table[];
+extern bcmcli_enum_val bcmolt_device_key_id_string_table[];
+extern bcmcli_enum_val bcmolt_nni_speed_string_table[];
+extern bcmcli_enum_val bcmolt_device_reset_id_string_table[];
+extern bcmcli_enum_val bcmolt_device_reset_mode_string_table[];
+extern bcmcli_enum_val bcmolt_device_run_ddr_test_id_string_table[];
+extern bcmcli_enum_val bcmolt_device_state_string_table[];
+extern bcmcli_enum_val bcmolt_device_sw_error_id_string_table[];
+extern bcmcli_enum_val bcmolt_device_sw_exception_id_string_table[];
+extern bcmcli_enum_val bcmolt_device_sw_upgrade_activate_id_string_table[];
+extern bcmcli_enum_val bcmolt_disable_serial_number_control_string_table[];
+extern bcmcli_enum_val bcmolt_drv_icf_id_string_table[];
+extern bcmcli_enum_val bcmolt_drv_sgb_id_string_table[];
+extern bcmcli_enum_val bcmolt_ds_vlan_action_string_table[];
+extern bcmcli_enum_val bcmolt_tfb_trap_behavior_string_table[];
+extern bcmcli_enum_val bcmolt_tfb_mode_string_table[];
+extern bcmcli_enum_val bcmolt_lim_sec_mode_up_string_table[];
+extern bcmcli_enum_val bcmolt_lim_sec_mode_dn_string_table[];
+extern bcmcli_enum_val bcmolt_xim_sec_mode_string_table[];
+extern bcmcli_enum_val bcmolt_hsc_ram_string_table[];
+extern bcmcli_enum_val bcmolt_lim_ram_string_table[];
+extern bcmcli_enum_val bcmolt_lky_ram_string_table[];
+extern bcmcli_enum_val bcmolt_mic_ram_string_table[];
+extern bcmcli_enum_val bcmolt_xpcsrm_ram_string_table[];
+extern bcmcli_enum_val bcmolt_embedded_image_transfer_status_string_table[];
+extern bcmcli_enum_val bcmolt_epon_encryption_information_format_string_table[];
+extern bcmcli_enum_val bcmolt_energy_detect_source_string_table[];
+extern bcmcli_enum_val bcmolt_epon_1g_turbo_mode_string_table[];
+extern bcmcli_enum_val bcmolt_epon_clock_transport_mode_string_table[];
+extern bcmcli_enum_val bcmolt_epon_dba_reporting_mode_string_table[];
+extern bcmcli_enum_val bcmolt_epon_link_rate_string_table[];
+extern bcmcli_enum_val bcmolt_status_string_table[];
+extern bcmcli_enum_val bcmolt_epon_denied_link_auto_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_denied_link_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_denied_link_key_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_denied_link_laser_on_off_violation_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_denied_link_llid_pool_empty_violation_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_denied_link_max_link_violation_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_denied_link_overhead_profile_violation_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_denied_link_range_violation_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_denied_link_rogue_violation_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_denied_link_system_resource_violation_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_denied_link_tdm_channels_exhausted_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_denied_link_unknown_link_violation_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_denied_link_upstream_bandwidth_violation_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_encryption_mode_string_table[];
+extern bcmcli_enum_val bcmolt_epon_key_choice_string_table[];
+extern bcmcli_enum_val bcmolt_epon_encryption_direction_string_table[];
+extern bcmcli_enum_val bcmolt_epon_fec_en_state_string_table[];
+extern bcmcli_enum_val bcmolt_epon_oam_type_string_table[];
+extern bcmcli_enum_val bcmolt_epon_link_auto_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_link_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_link_delete_link_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_link_duplicate_mpcp_registration_request_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_link_encryption_enabled_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_link_fec_state_string_table[];
+extern bcmcli_enum_val bcmolt_epon_link_force_rediscovery_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_link_frame_captured_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_link_status_string_table[];
+extern bcmcli_enum_val bcmolt_mpcp_discovery_info_string_table[];
+extern bcmcli_enum_val bcmolt_epon_link_inject_frame_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_link_key_exchange_failure_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_link_key_exchange_start_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_link_key_exchange_started_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_link_key_exchange_stop_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_link_key_exchange_stopped_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_link_key_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_link_link_deleted_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_link_link_speed_mismatch_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_link_mpcp_deregistered_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_link_mpcp_discovered_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_link_mpcp_reg_ack_timeout_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_link_mpcp_report_timeout_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_link_oam_keepalive_timeout_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_link_oam_keepalive_timer_start_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_link_oam_keepalive_timer_started_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_link_oam_keepalive_timer_stop_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_link_oam_keepalive_timer_stopped_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_link_preprovisioned_link_created_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_link_protection_switch_occurred_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_link_range_value_changed_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_link_rerange_failure_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_link_stat_alarm_cleared_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_link_stat_alarm_raised_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_link_stat_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_link_stat_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_link_state_flags_string_table[];
+extern bcmcli_enum_val bcmolt_epon_link_static_registration_done_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_link_static_registration_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_link_type_string_table[];
+extern bcmcli_enum_val bcmolt_mpcp_gate_mode_string_table[];
+extern bcmcli_enum_val bcmolt_mpcp_registration_gate_flags_string_table[];
+extern bcmcli_enum_val bcmolt_epon_ni_add_link_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_ni_add_multicast_link_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_ni_add_protected_standby_link_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_ni_auto_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_ni_auto_rogue_scan_10g_failure_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_ni_auto_rogue_scan_1g_failure_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_ni_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_ni_en_state_string_table[];
+extern bcmcli_enum_val bcmolt_epon_ni_issue_rssi_grant_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_ni_key_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_ni_llid_quarantined_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_ni_mpcp_timestamp_changed_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_ni_no_reports_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_ni_onu_upgrade_complete_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_ni_protection_switching_apply_rerange_delta_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_ni_rerange_failure_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_ni_rogue_llid_scan_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_ni_rogue_scan_complete_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_ni_rssi_measurement_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_ni_set_epon_ni_en_state_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_ni_start_onu_upgrade_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_ni_state_change_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_oam_extension_type_string_table[];
+extern bcmcli_enum_val bcmolt_epon_onu_10g_us_auto_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_onu_10g_us_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_onu_10g_us_key_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_onu_10g_us_stat_alarm_cleared_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_onu_10g_us_stat_alarm_raised_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_onu_10g_us_stat_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_onu_10g_us_stat_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_onu_1g_us_auto_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_onu_1g_us_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_onu_1g_us_key_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_onu_1g_us_stat_alarm_cleared_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_onu_1g_us_stat_alarm_raised_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_onu_1g_us_stat_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_onu_1g_us_stat_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_onu_upgrade_onu_response_code_string_table[];
+extern bcmcli_enum_val bcmolt_epon_onu_upgrade_return_code_string_table[];
+extern bcmcli_enum_val bcmolt_epon_path_10g_ds_auto_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_path_10g_ds_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_path_10g_ds_key_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_path_10g_ds_stat_alarm_cleared_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_path_10g_ds_stat_alarm_raised_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_path_10g_ds_stat_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_path_10g_ds_stat_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_path_10g_us_auto_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_path_10g_us_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_path_10g_us_key_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_path_10g_us_stat_alarm_cleared_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_path_10g_us_stat_alarm_raised_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_path_10g_us_stat_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_path_10g_us_stat_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_path_1g_ds_auto_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_path_1g_ds_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_path_1g_ds_key_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_path_1g_ds_stat_alarm_cleared_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_path_1g_ds_stat_alarm_raised_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_path_1g_ds_stat_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_path_1g_ds_stat_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_path_1g_us_auto_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_path_1g_us_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_path_1g_us_key_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_path_1g_us_stat_alarm_cleared_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_path_1g_us_stat_alarm_raised_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_path_1g_us_stat_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_path_1g_us_stat_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_protection_state_string_table[];
+extern bcmcli_enum_val bcmolt_epon_protection_switching_type_string_table[];
+extern bcmcli_enum_val bcmolt_protection_switching_detection_options_string_table[];
+extern bcmcli_enum_val bcmolt_epon_protection_switching_reranging_options_string_table[];
+extern bcmcli_enum_val bcmolt_gpio_pin_string_table[];
+extern bcmcli_enum_val bcmolt_gpio_polarity_string_table[];
+extern bcmcli_enum_val bcmolt_epon_rp_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_epon_rp_key_id_string_table[];
+extern bcmcli_enum_val bcmolt_ext_irq_string_table[];
+extern bcmcli_enum_val bcmolt_flush_mac_table_option_string_table[];
+extern bcmcli_enum_val bcmolt_frequency_adjustment_direction_string_table[];
+extern bcmcli_enum_val bcmolt_gem_port_direction_string_table[];
+extern bcmcli_enum_val bcmolt_gem_port_type_string_table[];
+extern bcmcli_enum_val bcmolt_gem_port_operation_string_table[];
+extern bcmcli_enum_val bcmolt_gpio_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpio_key_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpio_pin_dir_string_table[];
+extern bcmcli_enum_val bcmolt_gpio_value_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_alloc_auto_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_alloc_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_alloc_configuration_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_alloc_get_alloc_stats_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_alloc_get_stats_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_alloc_key_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_alloc_set_state_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_alloc_stat_alarm_cleared_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_alloc_stat_alarm_raised_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_alloc_stat_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_alloc_stat_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_gem_port_auto_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_gem_port_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_gem_port_configuration_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_gem_port_key_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_gem_port_set_state_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_gem_port_stat_alarm_cleared_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_gem_port_stat_alarm_raised_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_gem_port_stat_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_gem_port_stat_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_gem_port_state_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_iwf_auto_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_iwf_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_iwf_ds_egress_flow_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_iwf_ds_egress_flow_key_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_iwf_ds_ingress_flow_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_iwf_ds_ingress_flow_key_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_iwf_flush_mac_table_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_iwf_flush_mac_table_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_iwf_key_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_iwf_mac_table_auto_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_iwf_mac_table_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_iwf_mac_table_key_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_iwf_mac_table_mac_aged_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_iwf_mac_table_mac_dropped_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_iwf_mac_table_mac_move_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_iwf_mac_table_new_mac_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_iwf_scan_mac_table_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_iwf_scan_mac_table_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_iwf_stat_alarm_cleared_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_iwf_stat_alarm_raised_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_iwf_stat_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_iwf_stat_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_iwf_us_flow_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_iwf_us_flow_key_id_string_table[];
+extern bcmcli_enum_val bcmolt_key_exchange_mode_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_ni_activate_all_onus_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_ni_auto_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_ni_broadcast_ploam_packet_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_ni_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_ni_cpu_packets_failure_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_ni_cpu_packets_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_ni_deactivate_all_onus_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_ni_disable_all_onus_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_ni_disable_serial_number_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_ni_enable_all_onus_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_ni_key_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_ni_los_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_ni_onu_discovered_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_ni_onu_upgrade_complete_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_ni_protection_switching_onus_ranged_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_ni_protection_switching_switchover_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_ni_protection_switching_traffic_resume_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_ni_protection_switching_type_c_set_multiple_onu_state_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_ni_reset_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_ni_rogue_detection_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_ni_rogue_detection_window_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_ni_rogue_onu_special_map_cycle_start_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_ni_serial_number_acquisition_cycle_start_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_ni_set_onu_state_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_ni_set_pon_state_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_ni_single_request_standby_pon_monitoring_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_ni_standby_pon_monitoring_cycle_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_ni_start_onu_upgrade_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_ni_stat_alarm_cleared_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_ni_stat_alarm_raised_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_ni_stat_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_ni_stat_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_ni_state_change_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_ni_tod_request_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_ni_tod_request_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_auto_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_ber_interval_configuration_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_change_power_level_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_cpu_packet_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_cpu_packets_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_dfi_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_dgi_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_dowi_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_err_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_invalid_dbru_report_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_key_exchange_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_key_exchange_cycle_skipped_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_key_exchange_decrypt_required_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_key_exchange_key_mismatch_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_key_exchange_key_request_timeout_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_key_exchange_unconsecutive_index_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_key_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_loai_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_loki_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_memi_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_omci_packet_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_omci_port_id_configuration_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_onu_activation_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_onu_activation_standby_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_onu_alarm_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_onu_deactivation_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_onu_disable_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_onu_enable_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_optical_reflection_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_password_authentication_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_pee_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_ploam_packet_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_possible_drift_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_power_management_state_change_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_pst_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_ranging_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_rei_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_rssi_measurement_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_rssi_measurement_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_sdi_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_set_onu_state_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_sfi_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_stat_alarm_cleared_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_stat_alarm_raised_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_stat_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_stat_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_sufi_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_tiwi_id_string_table[];
+extern bcmcli_enum_val bcmolt_omci_device_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_onu_upgrade_return_code_string_table[];
+extern bcmcli_enum_val bcmolt_omci_result_code_string_table[];
+extern bcmcli_enum_val bcmolt_onu_state_string_table[];
+extern bcmcli_enum_val bcmolt_rssi_location_sign_string_table[];
+extern bcmcli_enum_val bcmolt_onu_post_discovery_mode_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_trx_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_gpon_trx_key_id_string_table[];
+extern bcmcli_enum_val bcmolt_image_transfer_status_string_table[];
+extern bcmcli_enum_val bcmolt_iwf_mode_string_table[];
+extern bcmcli_enum_val bcmolt_log_entry_auto_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_log_entry_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_log_entry_key_id_string_table[];
+extern bcmcli_enum_val bcmolt_log_entry_stat_alarm_cleared_id_string_table[];
+extern bcmcli_enum_val bcmolt_log_entry_stat_alarm_raised_id_string_table[];
+extern bcmcli_enum_val bcmolt_log_entry_stat_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_log_entry_stat_id_string_table[];
+extern bcmcli_enum_val bcmolt_log_file_id_string_table[];
+extern bcmcli_enum_val bcmolt_log_level_string_table[];
+extern bcmcli_enum_val bcmolt_log_style_string_table[];
+extern bcmcli_enum_val bcmolt_log_type_string_table[];
+extern bcmcli_enum_val bcmolt_logger_auto_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_logger_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_logger_clear_log_id_string_table[];
+extern bcmcli_enum_val bcmolt_logger_key_id_string_table[];
+extern bcmcli_enum_val bcmolt_logger_stat_alarm_cleared_id_string_table[];
+extern bcmcli_enum_val bcmolt_logger_stat_alarm_raised_id_string_table[];
+extern bcmcli_enum_val bcmolt_logger_stat_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_logger_stat_id_string_table[];
+extern bcmcli_enum_val bcmolt_mac_table_miss_fallback_string_table[];
+extern bcmcli_enum_val bcmolt_mac_table_learning_mode_string_table[];
+extern bcmcli_enum_val bcmolt_mapping_tag_method_string_table[];
+extern bcmcli_enum_val bcmolt_nni_auto_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_nni_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_nni_connection_string_table[];
+extern bcmcli_enum_val bcmolt_nni_key_id_string_table[];
+extern bcmcli_enum_val bcmolt_trivalent_string_table[];
+extern bcmcli_enum_val bcmolt_nni_serdes_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_nni_serdes_key_id_string_table[];
+extern bcmcli_enum_val bcmolt_nni_stat_alarm_cleared_id_string_table[];
+extern bcmcli_enum_val bcmolt_nni_stat_alarm_raised_id_string_table[];
+extern bcmcli_enum_val bcmolt_nni_stat_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_nni_stat_id_string_table[];
+extern bcmcli_enum_val bcmolt_nni_status_changed_id_string_table[];
+extern bcmcli_enum_val bcmolt_odn_class_string_table[];
+extern bcmcli_enum_val bcmolt_omci_port_id_operation_string_table[];
+extern bcmcli_enum_val bcmolt_onu_operation_string_table[];
+extern bcmcli_enum_val bcmolt_onu_power_level_string_table[];
+extern bcmcli_enum_val bcmolt_tc_protocol_string_table[];
+extern bcmcli_enum_val bcmolt_packet_injection_error_string_table[];
+extern bcmcli_enum_val bcmolt_packet_type_string_table[];
+extern bcmcli_enum_val bcmolt_password_authentication_fail_reason_string_table[];
+extern bcmcli_enum_val bcmolt_polarity_string_table[];
+extern bcmcli_enum_val bcmolt_polling_interval_string_table[];
+extern bcmcli_enum_val bcmolt_pon_operation_string_table[];
+extern bcmcli_enum_val bcmolt_pon_protection_switching_options_string_table[];
+extern bcmcli_enum_val bcmolt_pon_state_string_table[];
+extern bcmcli_enum_val bcmolt_power_levelling_control_string_table[];
+extern bcmcli_enum_val bcmolt_power_management_transition_reason_string_table[];
+extern bcmcli_enum_val bcmolt_prbs_polynomial_string_table[];
+extern bcmcli_enum_val bcmolt_prbs_checker_mode_string_table[];
+extern bcmcli_enum_val bcmolt_prbs_lock_state_string_table[];
+extern bcmcli_enum_val bcmolt_raman_mitigation_mode_string_table[];
+extern bcmcli_enum_val bcmolt_ranging_fail_reason_string_table[];
+extern bcmcli_enum_val bcmolt_registration_behavior_string_table[];
+extern bcmcli_enum_val bcmolt_request_registration_fail_reason_string_table[];
+extern bcmcli_enum_val bcmolt_result_string_table[];
+extern bcmcli_enum_val bcmolt_rogue_detection_algorithm_type_string_table[];
+extern bcmcli_enum_val bcmolt_rogue_detection_window_string_table[];
+extern bcmcli_enum_val bcmolt_rogue_measurement_result_string_table[];
+extern bcmcli_enum_val bcmolt_rogue_scan_status_string_table[];
+extern bcmcli_enum_val bcmolt_rssi_measurement_fail_reason_string_table[];
+extern bcmcli_enum_val bcmolt_secure_mutual_authentication_fail_reason_string_table[];
+extern bcmcli_enum_val bcmolt_serdes_ranging_mode_string_table[];
+extern bcmcli_enum_val bcmolt_serdes_instance_string_table[];
+extern bcmcli_enum_val bcmolt_shaper_mode_string_table[];
+extern bcmcli_enum_val bcmolt_software_error_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_software_error_key_id_string_table[];
+extern bcmcli_enum_val bcmolt_stat_condition_type_string_table[];
+extern bcmcli_enum_val bcmolt_switch_over_type_c_onu_state_string_table[];
+extern bcmcli_enum_val bcmolt_system_mode_string_table[];
+extern bcmcli_enum_val bcmolt_us_operating_wavelength_bands_string_table[];
+extern bcmcli_enum_val bcmolt_traffic_resume_result_string_table[];
+extern bcmcli_enum_val bcmolt_trx_calibration_auto_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_trx_calibration_capture_window_and_statistic_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_trx_calibration_key_id_string_table[];
+extern bcmcli_enum_val bcmolt_trx_calibration_start_capture_window_id_string_table[];
+extern bcmcli_enum_val bcmolt_trx_calibration_stop_capture_window_id_string_table[];
+extern bcmcli_enum_val bcmolt_trx_calibration_trigger_string_table[];
+extern bcmcli_enum_val bcmolt_trx_calibration_trigger_position_string_table[];
+extern bcmcli_enum_val bcmolt_trx_calibration_window_mode_string_table[];
+extern bcmcli_enum_val bcmolt_trx_type_string_table[];
+extern bcmcli_enum_val bcmolt_tune_in_fail_reason_string_table[];
+extern bcmcli_enum_val bcmolt_tune_out_fail_reason_string_table[];
+extern bcmcli_enum_val bcmolt_uart_baudrate_string_table[];
+extern bcmcli_enum_val bcmolt_us_gem_port_destination_string_table[];
+extern bcmcli_enum_val bcmolt_us_vlan_action_string_table[];
+extern bcmcli_enum_val bcmolt_vlan_to_flow_mapping_method_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_alloc_auto_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_alloc_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_alloc_configuration_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_alloc_get_alloc_stats_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_alloc_get_stats_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_alloc_key_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_alloc_set_state_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_alloc_stat_alarm_cleared_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_alloc_stat_alarm_raised_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_alloc_stat_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_alloc_stat_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_gem_port_auto_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_gem_port_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_gem_port_key_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_gem_port_stat_alarm_cleared_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_gem_port_stat_alarm_raised_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_gem_port_stat_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_gem_port_stat_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_gem_port_state_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_iwf_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_iwf_key_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_ni_activate_all_onus_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_ni_adjust_tx_wavelength_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_ni_auto_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_ni_broadcast_ploam_packet_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_ni_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_ni_cpu_packets_failure_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_ni_cpu_packets_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_ni_deactivate_all_onus_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_ni_disable_all_onus_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_ni_disable_serial_number_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_ni_enable_all_onus_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_ni_key_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_ni_los_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_ni_onu_discovered_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_ni_onu_upgrade_complete_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_ni_protection_switching_onus_ranged_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_ni_protection_switching_switchover_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_ni_protection_switching_traffic_resume_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_ni_reset_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_ni_rogue_detection_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_ni_rogue_detection_window_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_ni_rogue_onu_special_map_cycle_start_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_ni_run_special_bw_map_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_ni_serial_number_acquisition_cycle_start_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_ni_set_onu_state_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_ni_set_pon_state_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_ni_single_request_standby_pon_monitoring_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_ni_standby_pon_monitoring_cycle_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_ni_start_onu_upgrade_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_ni_stat_alarm_cleared_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_ni_stat_alarm_raised_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_ni_stat_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_ni_stat_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_ni_state_change_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_ni_tod_request_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_ni_tod_request_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_num_of_onus_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_adjust_tx_wavelength_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_auto_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_change_power_levelling_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_cpu_packet_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_cpu_packets_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_dfi_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_dgi_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_dowi_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_get_power_consumption_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_get_power_level_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_invalid_dbru_report_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_key_exchange_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_key_exchange_cycle_skipped_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_key_exchange_key_mismatch_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_key_exchange_key_request_timeout_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_key_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_looci_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_omci_packet_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_onu_activation_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_onu_alarm_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_onu_deactivation_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_onu_disable_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_onu_enable_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_onu_tuning_in_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_onu_tuning_in_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_onu_tuning_out_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_onu_tuning_out_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_optical_reflection_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_ploam_packet_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_possible_drift_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_power_consumption_report_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_power_level_report_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_power_management_state_change_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_pqsi_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_ranging_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_registration_id_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_request_registration_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_rssi_measurement_completed_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_rssi_measurement_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_sdi_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_secure_mutual_authentication_failure_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_secure_mutual_authentication_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_set_onu_state_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_sfi_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_stat_alarm_cleared_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_stat_alarm_raised_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_stat_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_stat_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_sufi_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_tiwi_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_onu_tuning_response_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_serdes_ranging_mode_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_trx_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_trx_key_id_string_table[];
+extern bcmcli_enum_val bcmolt_xgpon_trx_type_string_table[];
+extern bcmcli_enum_val bcmolt_xpon_serdes_cfg_id_string_table[];
+extern bcmcli_enum_val bcmolt_xpon_serdes_key_id_string_table[];
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* MAPLE_CLI_HELPERS_H_ */
diff --git a/bcm68620_release/release/host_reference/api_cli/bcm_api_cli_types.h b/bcm68620_release/release/host_reference/api_cli/bcm_api_cli_types.h
new file mode 100644
index 0000000..ceed40e
--- /dev/null
+++ b/bcm68620_release/release/host_reference/api_cli/bcm_api_cli_types.h
@@ -0,0 +1,63 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef BCM_API_DATA_TYPES_H_
+#define BCM_API_DATA_TYPES_H_
+
+#include <bcmos_system.h>
+#include <bcmolt_model_types.h>
+
+/* Property access */
+typedef enum
+{
+    BCMOLT_PROP_ACCESS_ID_R = 0x1,   /* Read access */
+    BCMOLT_PROP_ACCESS_ID_W = 0x2,   /* Write access */
+    BCMOLT_PROP_ACCESS_ID_RW = 0x3,  /* Read-write */
+} bcmolt_prop_access_id;
+
+/* Base data types */
+typedef enum
+{
+    BCMOLT_BASE_TYPE_ID_SNUM,       /* signed number */
+    BCMOLT_BASE_TYPE_ID_UNUM,       /* unsigned number */
+    BCMOLT_BASE_TYPE_ID_UNUM_HEX,   /* unsigned number printed in hex */
+    BCMOLT_BASE_TYPE_ID_FLOAT,      /* floating-point number */
+    BCMOLT_BASE_TYPE_ID_BOOL,       /* boolean (zero=no, nonzero=yes) */
+    BCMOLT_BASE_TYPE_ID_STRING,     /* string */
+    BCMOLT_BASE_TYPE_ID_IPV4,       /* IPv4 address */
+    BCMOLT_BASE_TYPE_ID_MAC,        /* MAC address */
+    BCMOLT_BASE_TYPE_ID_ENUM,       /* enum */
+    BCMOLT_BASE_TYPE_ID_ENUM_MASK,  /* bitmask enum */
+    BCMOLT_BASE_TYPE_ID_STRUCT,     /* struct */
+    BCMOLT_BASE_TYPE_ID_UNION,      /* union */
+    BCMOLT_BASE_TYPE_ID_ARR_DYN,    /* dynamically-sized array */
+    BCMOLT_BASE_TYPE_ID_ARR_FIXED,  /* fixed-size array */
+} bcmolt_base_type_id;
+
+#endif /* BCM_API_DATA_TYPES_H_ */
diff --git a/bcm68620_release/release/host_reference/api_dev_log/Makefile b/bcm68620_release/release/host_reference/api_dev_log/Makefile
new file mode 100644
index 0000000..8342e9a
--- /dev/null
+++ b/bcm68620_release/release/host_reference/api_dev_log/Makefile
@@ -0,0 +1,22 @@
+# 
+# API/logger integration
+#
+MOD_NAME = api_dev_log
+MOD_TYPE = lib
+MOD_DEPS = dev_log 
+
+ifeq ("$(ENABLE_LOG)", "y")
+    ifeq ("$(ENABLE_CLI)", "y")
+	ifeq ("$(RELEASE_BUILD)", "y")
+	    MOD_DEPS += api_cli
+	else
+	    MOD_DEPS += api_cli_helpers
+	endif
+
+	ifeq ("$(OS_KERNEL)", "linux")
+	   MOD_DEPS += dev_log_linux
+	endif
+
+	srcs = bcm_api_dev_log.c
+    endif
+endif
diff --git a/bcm68620_release/release/host_reference/api_dev_log/bcm_api_dev_log.c b/bcm68620_release/release/host_reference/api_dev_log/bcm_api_dev_log.c
new file mode 100644
index 0000000..a1b8638
--- /dev/null
+++ b/bcm68620_release/release/host_reference/api_dev_log/bcm_api_dev_log.c
@@ -0,0 +1,778 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#include <bcmos_system.h>
+#include <bcmolt_msg.h>
+#include <bcm_dev_log.h>
+#include <bcm_api_cli_helpers.h>
+#include "bcm_api_dev_log.h"
+
+/* maximum number of tasks that can use the API/logger integration simultaneously */
+#define API_LOG_NUM_BLKS 16
+
+/* string that denotes that this entry is not complete - there is more data to come */
+#define API_LOG_CONT_STR "..."
+
+/* number of characters reserved at the end of each log entry (continuation string + newline) */
+#define API_LOG_ENTRY_OVERHEAD sizeof(API_LOG_CONT_STR)
+
+typedef struct
+{
+    dev_log_id log_id;
+    const bcmolt_msg *msg;
+    char *buf;
+    uint32_t used;
+} api_log_rec;
+
+static bcmos_blk_pool api_log_blk_pool;
+
+static bcmos_errno api_log_dump_data_type(
+    api_log_rec *rec,
+    const bcmcli_type_descr *td,
+    const void *data,
+    const char *name,
+    uint32_t num_entries,
+    uint32_t entry_size);
+
+static bcmos_bool api_log_is_singleton(bcmolt_mgt_group group)
+{
+    switch (group)
+    {
+    case BCMOLT_MGT_GROUP_CFG:
+    case BCMOLT_MGT_GROUP_STAT:
+    case BCMOLT_MGT_GROUP_STAT_CFG:
+    case BCMOLT_MGT_GROUP_AUTO_CFG:
+        return BCMOS_TRUE;
+    default:
+        return BCMOS_FALSE;
+    }
+}
+
+static inline uint32_t api_log_buf_remaining(const api_log_rec *rec)
+{
+    return (MAX_DEV_LOG_STRING_NET_SIZE - API_LOG_ENTRY_OVERHEAD) - rec->used;
+}
+
+static void api_log_flush(api_log_rec *rec, const char *end_of_line)
+{
+    if (rec->used != 0)
+    {
+        strncat(rec->buf, end_of_line, MAX_DEV_LOG_STRING_NET_SIZE - rec->used);
+        bcm_dev_log_log(rec->log_id, DEV_LOG_LEVEL_INFO, BCM_LOG_FLAG_CALLER_FMT, "%s", rec->buf);
+        rec->used = 0;
+    }
+}
+
+static void api_log_print(api_log_rec *rec, const char *format, ...)
+{
+    va_list args;
+    int ret;
+
+    va_start(args, format);
+    ret = vsnprintf(rec->buf + rec->used, api_log_buf_remaining(rec), format, args);
+    va_end(args);
+
+    if (ret < 0 || ret > api_log_buf_remaining(rec))
+    {
+        /* this print doesn't fit in the buffer - send the current buffer and create a new continuation log entry */
+        rec->buf[rec->used] = '\0';
+        api_log_flush(rec, API_LOG_CONT_STR "\n");
+
+        /* the continuation entry can skip the header */
+        api_log_print(rec, API_LOG_CONT_STR);
+
+        /* try again, this time against the continuation entry */
+        va_start(args, format);
+        ret = vsnprintf(rec->buf + rec->used, api_log_buf_remaining(rec), format, args);
+        va_end(args);
+
+        if (ret < 0 || ret > api_log_buf_remaining(rec))
+        {
+            BCM_LOG(ERROR, rec->log_id, "API message log overflow on msg #%u\n", rec->msg->corr_tag);
+        }
+        else
+        {
+            rec->used += ret;
+        }
+    }
+    else
+    {
+        rec->used += ret;
+    }
+}
+
+static bcmos_errno api_log_read_snum(const bcmcli_type_descr *td, const void *data, int64_t *n)
+{
+    switch (td->size)
+    {
+    case 1:
+    {
+        int8_t n1 = *(const int8_t *)data;
+        *n = n1;
+        break;
+    }
+    case 2:
+    {
+        int16_t n2 = *(const int16_t *)data;
+        *n = n2;
+        break;
+    }
+    case 4:
+    {
+        int32_t n4 = *(const int32_t *)data;
+        *n = n4;
+        break;
+    }
+    case 8:
+    {
+        memcpy(n, data, sizeof(*n));
+        break;
+    }
+    default:
+        return BCM_ERR_NOT_SUPPORTED;
+    }
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno api_log_read_unum(const bcmcli_type_descr *td, const void *data, uint64_t *n)
+{
+    switch (td->size)
+    {
+    case 1:
+    {
+        uint8_t n1 = *(const uint8_t *)data;
+        *n = n1;
+        break;
+    }
+    case 2:
+    {
+        uint16_t n2 = *(const uint16_t *)data;
+        *n = n2;
+        break;
+    }
+    case 4:
+    {
+        uint32_t n4 = *(const uint32_t *)data;
+        *n = n4;
+        break;
+    }
+    case 8:
+    {
+        memcpy(n, data, sizeof(*n));
+        break;
+    }
+    default:
+        return BCM_ERR_NOT_SUPPORTED;
+    }
+    return BCM_ERR_OK;
+}
+
+/* break a string up into smaller chunks (preferably at \n boundaries) so we don't overflow the size of a log entry */
+static void api_log_print_long_line(api_log_rec *rec, const char *line, uint32_t len)
+{
+    uint32_t i;
+    uint32_t handled = 0;
+    for (i = 0; i < len; i++)
+    {
+        if (line[i] == '\n')
+        {
+            if (i > handled)
+            {
+                api_log_print(rec, "%.*s", i - handled, &line[handled]);
+                api_log_flush(rec, API_LOG_CONT_STR "\n");
+                api_log_print(rec, API_LOG_CONT_STR);
+            }
+            handled = i + 1;
+        }
+        if (i > handled && i - handled == 32)
+        {
+            api_log_print(rec, "%.*s", 32, &line[handled]);
+            handled = i;
+        }
+    }
+    if (handled < len)
+    {
+        api_log_print(rec, "%.*s", len - handled, &line[handled]);
+    }
+}
+
+static bcmos_errno api_log_dump_simple_data_type(
+    api_log_rec *rec,
+    const bcmcli_type_descr *td,
+    const void *data,
+    const char *name)
+{
+    bcmos_errno err = BCM_ERR_OK;
+
+    switch (td->base_type)
+    {
+    case BCMOLT_BASE_TYPE_ID_SNUM:       /* signed number */
+    {
+        int64_t n = 0;
+        err = api_log_read_snum(td, data, &n);
+        api_log_print(rec, "%lld", (long long)n);
+        break;
+    }
+
+    case BCMOLT_BASE_TYPE_ID_UNUM:       /* unsigned number */
+    {
+        uint64_t n = 0;
+        err = api_log_read_unum(td, data, &n);
+        api_log_print(rec, "%llu", (unsigned long long)n);
+        break;
+    }
+
+    case BCMOLT_BASE_TYPE_ID_UNUM_HEX:   /* unsigned number printed in hex */
+    {
+        uint64_t n = 0;
+        err = api_log_read_unum(td, data, &n);
+        api_log_print(rec, "0x%llx", (unsigned long long)n);
+        break;
+    }
+
+    case BCMOLT_BASE_TYPE_ID_FLOAT:      /* floating-point number */
+    {
+        if (td->size == sizeof(float))
+        {
+            api_log_print(rec, "%f", *(const float *)data);
+        }
+        else if (td->size == sizeof(double))
+        {
+            api_log_print(rec, "%f", *(const double *)data);
+        }
+        else
+        {
+            err = BCM_ERR_NOT_SUPPORTED;
+        }
+        break;
+    }
+
+    case BCMOLT_BASE_TYPE_ID_BOOL:
+    {
+        uint64_t n = 0;
+        err = api_log_read_unum(td, data, &n);
+        api_log_print(rec, "%s", n == 0 ? "no" : "yes");
+        break;
+    }
+
+    case BCMOLT_BASE_TYPE_ID_STRING:     /* string */
+    {
+        uint32_t size = td->size;
+        if (size == 0)
+        {
+            size = strlen((const char *)data);
+        }
+        api_log_print_long_line(rec, (const char *)data, size);
+        break;
+    }
+
+    case BCMOLT_BASE_TYPE_ID_IPV4:       /* IPv4 address */
+    {
+        uint32_t ip;
+        memcpy(&ip, data, sizeof(ip));
+        api_log_print(rec, "%d.%d.%d.%d", (ip>>24)&0xff, (ip>>16)&0xff, (ip>>8)&0xff, ip & 0xff);
+        break;
+    }
+
+    case BCMOLT_BASE_TYPE_ID_MAC:        /* MAC address */
+    {
+        bcmos_mac_address mac;
+        memcpy(mac.u8, data, sizeof(mac.u8));
+        api_log_print(rec, "%02x:%02x:%02x:%02x:%02x:%02x",
+            mac.u8[0], mac.u8[1], mac.u8[2], mac.u8[3], mac.u8[4], mac.u8[5]);
+        break;
+    }
+
+    case BCMOLT_BASE_TYPE_ID_ENUM:       /* enum */
+    {
+        uint64_t n = 0;
+        err = api_log_read_unum(td, data, &n);
+        BUG_ON(td->x.e == NULL);
+        api_log_print(rec, "%s", bcmcli_enum_stringval(td->x.e, n));
+        break;
+    }
+
+    case BCMOLT_BASE_TYPE_ID_ENUM_MASK:
+    {
+        uint64_t n = 0;
+        bcmcli_enum_val *value = td->x.e;
+        bcmos_bool first = BCMOS_TRUE;
+        BUG_ON(value == NULL);
+        err = api_log_read_unum(td, data, &n);
+        while (value->name != NULL && n != 0)
+        {
+            if ((value->val & n) != 0)
+            {
+                api_log_print(rec, "%s%s", first ? "" : "+", value->name);
+                first = BCMOS_FALSE;
+            }
+            n -= value->val;
+            ++value;
+        }
+        if (first)
+        {
+            api_log_print(rec, "-");
+        }
+        break;
+    }
+
+    default:
+        err = BCM_ERR_NOT_SUPPORTED;
+        break;
+    }
+    return err;
+}
+
+static uint16_t api_log_get_num_enum_vals(const bcmcli_enum_val *vals)
+{
+    const bcmcli_enum_val *v = vals;
+    while (v != NULL && v->name != NULL)
+    {
+        ++v;
+    }
+    return (uint16_t)(v - vals);
+}
+
+static bcmos_errno api_log_dump_array(
+    api_log_rec *rec,
+    const bcmcli_type_descr *td,
+    const void *data,
+    uint32_t size,
+    const char *name)
+{
+    bcmos_errno err = BCM_ERR_OK;
+
+    /* Print as buffer or element by element ? */
+    if ((td->base_type == BCMOLT_BASE_TYPE_ID_UNUM || td->base_type == BCMOLT_BASE_TYPE_ID_UNUM_HEX) && td->size == 1)
+    {
+        uint32_t i;
+        api_log_print(rec, "%s=", name);
+        if (size == 0)
+        {
+            api_log_print(rec, "-");
+        }
+        else
+        {
+            for (i = 0; i < size; i++)
+            {
+                api_log_print(rec, "%02X", ((const uint8_t *)data)[i]);
+            }
+        }
+        api_log_print(rec, " ");
+    }
+    else
+    {
+        err = api_log_dump_data_type(rec, td, data, name, size, td->size);
+    }
+    return err;
+}
+
+static bcmos_errno api_log_dump_data_type(
+    api_log_rec *rec,
+    const bcmcli_type_descr *td,
+    const void *data,
+    const char *name,
+    uint32_t num_entries,
+    uint32_t entry_size)
+{
+    bcmos_errno err = BCM_ERR_OK;
+
+    switch (td->base_type)
+    {
+        case BCMOLT_BASE_TYPE_ID_STRUCT:
+        {
+            uint16_t f;
+            char full_name[APICLI_MAX_PARM_NAME_LENGTH];
+            if (td->x.s.num_fields == 0)
+            {
+                return 0;
+            }
+            BUG_ON(td->x.s.fields == NULL);
+            for (f = 0; f < td->x.s.num_fields; f++)
+            {
+                const bcmcli_field_descr *fld = &td->x.s.fields[f];
+                void *fdata = (void *)((long)data + fld->offset);
+                bcmcli_strncpy(full_name, name, sizeof(full_name));
+                bcmcli_strncat(full_name, ".", sizeof(full_name));
+                bcmcli_strncat(full_name, fld->name, sizeof(full_name));
+                err = api_log_dump_data_type(rec, fld->type, fdata, full_name, num_entries, entry_size);
+            }
+            break;
+        }
+
+        case BCMOLT_BASE_TYPE_ID_UNION:
+        {
+            /* Print fields up to selector, then selector, then selected sub-structure */
+            uint16_t f;
+            char full_name[APICLI_MAX_PARM_NAME_LENGTH];
+            const bcmcli_field_descr *fld;
+            void *fdata;
+            int64_t selector_val = 0;
+            uint16_t num_union_vals;
+
+            if (td->x.u.num_common_fields == 0)
+            {
+                return 0;
+            }
+            BUG_ON(td->x.u.common_fields == NULL);
+            /* Common fields, including selector */
+            for (f = 0; f <= td->x.u.classifier_idx && err == BCM_ERR_OK; f++)
+            {
+                fld = &td->x.u.common_fields[f];
+                fdata = (void *)((long)data + fld->offset);
+
+                bcmcli_strncpy(full_name, name, sizeof(full_name));
+                if (fld->name != NULL && strlen(fld->name) != 0)
+                {
+                    bcmcli_strncat(full_name, ".", sizeof(full_name));
+                    bcmcli_strncat(full_name, fld->name, sizeof(full_name));
+                }
+                err = api_log_dump_data_type(rec, fld->type, fdata, full_name, num_entries, entry_size);
+                if (err == BCM_ERR_OK && f == td->x.u.classifier_idx)
+                {
+                    err = api_log_read_snum(fld->type, fdata, &selector_val);
+                }
+            }
+            if (err != BCM_ERR_OK)
+            {
+                return err;
+            }
+
+            num_union_vals = api_log_get_num_enum_vals(td->x.u.common_fields[td->x.u.classifier_idx].type->x.e);
+            if ((unsigned)selector_val >= num_union_vals)
+            {
+                return BCM_ERR_INTERNAL;
+            }
+
+            /* Selected field */
+            fld = &td->x.u.union_fields[selector_val];
+            if (fld->type == NULL)
+            {
+                return BCM_ERR_OK;
+            }
+            fdata = (void *)((long)data + fld->offset);
+
+            bcmcli_strncpy(full_name, name, sizeof(full_name));
+            if (fld->name != NULL && strlen(fld->name) != 0)
+            {
+                bcmcli_strncat(full_name, ".", sizeof(full_name));
+                bcmcli_strncat(full_name, fld->name, sizeof(full_name));
+            }
+            err = api_log_dump_data_type(rec, fld->type, fdata, full_name, num_entries, entry_size);
+            if (err != BCM_ERR_OK)
+            {
+                return err;
+            }
+
+            /* Common fields following selector */
+            for (; f < td->x.u.num_common_fields; f++)
+            {
+                fld = &td->x.u.common_fields[f];
+                fdata = (void *)((long)data + fld->offset);
+
+                bcmcli_strncpy(full_name, name, sizeof(full_name));
+                if (fld->name != NULL && strlen(fld->name) != 0)
+                {
+                    bcmcli_strncat(full_name, ".", sizeof(full_name));
+                    bcmcli_strncat(full_name, fld->name, sizeof(full_name));
+                }
+                err = api_log_dump_data_type(rec, fld->type, fdata, full_name, num_entries, entry_size);
+            }
+            break;
+        }
+
+        case BCMOLT_BASE_TYPE_ID_ARR_FIXED:
+        {
+            err = api_log_dump_array(rec, td->x.arr_fixed.elem_type, data, td->x.arr_fixed.size, name);
+            break;
+        }
+
+        case BCMOLT_BASE_TYPE_ID_ARR_DYN:
+        {
+            /* Read length */
+            uint32_t array_size;
+            long base_ptr;
+
+            switch (td->x.arr_dyn.len_size)
+            {
+                case 1: array_size = *(const uint8_t *)data; break;
+                case 2: array_size = *(const uint16_t *)data; break;
+                case 4: array_size = *(const uint32_t *)data; break;
+                default:
+                    return BCM_ERR_NOT_SUPPORTED;
+            }
+            base_ptr = BCMOS_ROUND_UP((long)data + td->x.arr_dyn.len_size, sizeof(void *));
+            BUG_ON(base_ptr == 0);
+            data = *(void **)base_ptr;
+            err = api_log_dump_array(rec, td->x.arr_dyn.elem_type, data, array_size, name);
+            break;
+        }
+
+        default:
+        {
+            int n;
+            /* Finally! Simple type that maps to a single name=value pair */
+            if (name != NULL)
+            {
+                api_log_print(rec, "%s=", name);
+            }
+            /* Dump simple value or array of simple values */
+            if (num_entries == 0)
+            {
+                api_log_print(rec, "-");
+            }
+            for (n = 0; n < num_entries; n++)
+            {
+                if (n != 0)
+                {
+                    api_log_print(rec, ",");
+                }
+                err = api_log_dump_simple_data_type(rec, td, data, name);
+                if (err != BCM_ERR_OK)
+                {
+                    return err;
+                }
+                data = (const void *)((long)data + entry_size);
+            }
+            api_log_print(rec, " ");
+            break;
+        }
+    }
+    return err;
+}
+
+static bcmos_errno api_log_dump_prop(api_log_rec *rec, const bcmcli_prop_descr *pd, const void *prop_data)
+{
+    return api_log_dump_data_type(rec, pd->type, prop_data, pd->name, 1, 0);
+}
+
+/* Calculate property pointer given the group data pointer and property description */
+static inline const void *api_log_prop_data_ptr(const void *group_ptr, const bcmcli_prop_descr *pd)
+{
+    return (const void *)((long)group_ptr + pd->offset);
+}
+
+static bcmos_errno api_log_append_key(api_log_rec *rec, const void *key, uint32_t key_size)
+{
+    uint16_t prop;
+    bcmos_errno err = BCM_ERR_OK;
+    const bcmcli_prop_descr *pd;
+
+    for (prop = 0;
+         api_cli_object_property(rec->msg->obj_type, BCMOLT_MGT_GROUP_KEY, 0, prop, &pd) == BCM_ERR_OK;
+         ++prop)
+    {
+        const void *prop_data = api_log_prop_data_ptr(key, pd);
+        if (prop_data == NULL)
+        {
+            continue;
+        }
+        BUG_ON(pd->offset > key_size);
+        err = api_log_dump_prop(rec, pd, prop_data);
+        if (err != BCM_ERR_OK)
+        {
+            break;
+        }
+    }
+    return err;
+}
+
+static bcmos_errno api_log_append_data(api_log_rec *rec, const void *data, uint32_t data_size)
+{
+    uint16_t prop;
+    bcmos_errno err = BCM_ERR_OK;
+    const bcmcli_prop_descr *pd;
+
+    for (prop = 0;
+         api_cli_object_property(rec->msg->obj_type, rec->msg->group, rec->msg->subgroup, prop, &pd) == BCM_ERR_OK;
+         ++prop)
+    {
+        const void *prop_data = api_log_prop_data_ptr(data, pd);
+        if (((rec->msg->presence_mask & (1LL << prop)) == 0) || (prop_data == NULL))
+        {
+            continue;
+        }
+        BUG_ON(pd->offset > data_size);
+        err = api_log_dump_prop(rec, pd, prop_data);
+        if (err != BCM_ERR_OK)
+        {
+            break;
+        }
+    }
+    return err;
+}
+
+static bcmos_errno api_log_append_hdr(api_log_rec *rec)
+{
+    bcmos_errno err;
+    const char *name;
+    const char *descr;
+
+    err = api_cli_object_name(rec->msg->obj_type, &name, &descr);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    api_log_print(rec, apicli_mgt_group_to_str(rec->msg->group));
+    if (api_log_is_singleton(rec->msg->group))
+    {
+        api_log_print(rec, (rec->msg->type & BCMOLT_MSG_TYPE_SET) != 0 ? "_set" : "_get");
+        if ((rec->msg->type & BCMOLT_MSG_TYPE_MULTI) != 0)
+        {
+            api_log_print(rec, "_multi");
+        }
+    }
+
+    if (rec->msg->group != BCMOLT_MGT_GROUP_AUTO && rec->msg->group != BCMOLT_MGT_GROUP_PROXY_RX)
+    {
+        if (rec->msg->dir == BCMOLT_MSG_DIR_REQUEST)
+        {
+            api_log_print(rec, " request");
+        }
+        else
+        {
+            api_log_print(rec, " response[%d]", rec->msg->err);
+        }
+    }
+
+    api_log_print(rec, "> %s", name);
+    if (!api_log_is_singleton(rec->msg->group))
+    {
+        const char *sub_name;
+        const char *sub_d;
+        err = api_cli_object_subgroup_name(rec->msg->obj_type, rec->msg->group, rec->msg->subgroup, &sub_name, &sub_d);
+        if (err != BCM_ERR_OK)
+        {
+            return err;
+        }
+        api_log_print(rec, ".%s", sub_name);
+    }
+
+    api_log_print(rec, ": ");
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno api_log_append_body(api_log_rec *rec)
+{
+    bcmos_errno err;
+    uint32_t key_size;
+    uint32_t key_offset;
+    uint32_t data_size;
+    uint32_t data_offset;
+
+    err = api_cli_object_struct_size(
+        rec->msg->obj_type,
+        rec->msg->group,
+        rec->msg->subgroup,
+        &key_size,
+        &key_offset,
+        &data_size,
+        &data_offset);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    if ((rec->msg->type & BCMOLT_MSG_TYPE_MULTI) != 0)
+    {
+        /* message set printing for multi-object cfg not implemented */
+        api_log_print(rec, "(data omitted)");
+    }
+    else
+    {
+        if ((rec->msg->group != BCMOLT_MGT_GROUP_AUTO_CFG) && (key_size != 0))
+        {
+            const void *key = (const void *)((long)rec->msg + key_offset);
+            err = api_log_append_key(rec, key, key_size);
+            if (err != BCM_ERR_OK)
+            {
+                return err;
+            }
+        }
+
+        if ((data_size != 0) &&
+            (((rec->msg->dir == BCMOLT_MSG_DIR_REQUEST) && (rec->msg->type & BCMOLT_MSG_TYPE_SET))  ||
+             ((rec->msg->dir == BCMOLT_MSG_DIR_RESPONSE) && (rec->msg->type & BCMOLT_MSG_TYPE_GET)) ||
+             (rec->msg->group == BCMOLT_MGT_GROUP_AUTO)                                             ||
+             (rec->msg->group == BCMOLT_MGT_GROUP_PROXY_RX)))
+        {
+            const void *data = (const void *)((long)rec->msg + data_offset);
+            err = api_log_append_data(rec, data, data_size);
+            if (err != BCM_ERR_OK)
+            {
+                return err;
+            }
+        }
+    }
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcmolt_msg_log(dev_log_id log_id, const bcmolt_msg *msg)
+{
+    bcmos_errno err = BCM_ERR_OK;
+    api_log_rec rec = { .log_id = log_id, .msg = msg, .used = 0 };
+
+    rec.buf = bcmos_blk_pool_alloc(&api_log_blk_pool);
+    if (rec.buf == NULL)
+    {
+        err = BCM_ERR_NOMEM;
+    }
+
+    err = (err != BCM_ERR_OK) ? err : api_log_append_hdr(&rec);
+    err = (err != BCM_ERR_OK) ? err : api_log_append_body(&rec);
+    api_log_flush(&rec, "\n");
+
+    if (rec.buf != NULL)
+    {
+        bcmos_blk_pool_free(rec.buf);
+    }
+    if (err != BCM_ERR_OK)
+    {
+        BCM_LOG(ERROR, log_id, "API message log error: %s (%d)\n", bcmos_strerror(err), err);
+    }
+    return err;
+}
+
+void bcmolt_msg_log_init(void)
+{
+    bcmos_errno err;
+    bcmos_blk_pool_parm blk_pool_parm =
+    {
+        .name = "api_dev_log",
+        .blk_size = MAX_DEV_LOG_STRING_NET_SIZE,
+        .num_blks = API_LOG_NUM_BLKS,
+    };
+
+    err = bcmos_blk_pool_create(&api_log_blk_pool, &blk_pool_parm);
+    BUG_ON(err != BCM_ERR_OK);
+}
+
diff --git a/bcm68620_release/release/host_reference/api_dev_log/bcm_api_dev_log.h b/bcm68620_release/release/host_reference/api_dev_log/bcm_api_dev_log.h
new file mode 100644
index 0000000..0475b5f
--- /dev/null
+++ b/bcm68620_release/release/host_reference/api_dev_log/bcm_api_dev_log.h
@@ -0,0 +1,43 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef BCM_API_DEV_LOG_H_
+#define BCM_API_DEV_LOG_H_
+
+#include <bcmos_system.h>
+#include <bcmolt_msg.h>
+#include <bcm_dev_log.h>
+
+/* Print message header/body to a logger ID */
+bcmos_errno bcmolt_msg_log(dev_log_id log_id, const bcmolt_msg *msg);
+
+/* Initialize API/devlog integration */
+void bcmolt_msg_log_init(void);
+
+#endif /* BCM_API_DEV_LOG_H_ */
diff --git a/bcm68620_release/release/host_reference/api_proxy/Makefile b/bcm68620_release/release/host_reference/api_proxy/Makefile
new file mode 100644
index 0000000..940b839
--- /dev/null
+++ b/bcm68620_release/release/host_reference/api_proxy/Makefile
@@ -0,0 +1,12 @@
+ifeq ("$(OS)", "posix")
+    MOD_NAME = bcm_api_proxy
+    MOD_TYPE = lib
+    MOD_DEPS = transport cli
+ifeq ("$(RELEASE_BUILD)", "y")
+    MOD_DEPS += common_api
+else
+    MOD_DEPS += api
+endif
+
+    srcs = bcmolt_api_proxy.c
+endif
diff --git a/bcm68620_release/release/host_reference/api_proxy/bcmolt_api_proxy.c b/bcm68620_release/release/host_reference/api_proxy/bcmolt_api_proxy.c
new file mode 100644
index 0000000..9f71630
--- /dev/null
+++ b/bcm68620_release/release/host_reference/api_proxy/bcmolt_api_proxy.c
@@ -0,0 +1,501 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#include <bcmos_system.h>
+#include <bcmtr_interface.h>
+#include <bcmtr_header.h>
+#include <bcmtr_transport_cli.h>
+#include <bcmolt_api.h>
+#include <bcmtr_debug.h>
+#ifdef ENABLE_CLI
+#include <bcmcli.h>
+#endif
+#include "bcmolt_api_proxy.h"
+#ifdef ENABLE_LOG
+#include "bcm_dev_log.h"
+#endif
+
+/* Statistics */
+typedef struct proxy_stats
+{
+    unsigned long rx_packets;
+    unsigned long rx_bytes;
+    unsigned long tx_packets;
+    unsigned long tx_bytes;
+    unsigned long rx_errors;
+    unsigned long tx_errors;
+    unsigned long unpack_errors;
+    unsigned long pack_errors;
+    unsigned long msg_errors;
+} proxy_stats;
+
+typedef struct proxy_control_block
+{
+    bcmos_task proxy_rx_task;
+    struct sockaddr_in client;
+    uint32_t proxy_port;
+    int device_id;
+    int client_socket;
+    bcmos_bool is_running;
+    char *on_ready_cmd;
+
+    /* the maximum amount of memory that could possibly by used by all variable-sized lists within a GET request */
+#define DYNAMIC_LIST_BUFFER_SIZE (32 * 1024)
+    uint8_t dynamic_list_buffer[DYNAMIC_LIST_BUFFER_SIZE];
+
+    dev_log_id proxy_log;
+
+    proxy_stats stats;
+} proxy_control_block;
+
+/* Per device proxy control block */
+static proxy_control_block proxy_data[BCMTR_MAX_OLTS];
+static bcmos_bool is_first_proxy = BCMOS_TRUE;
+
+#ifdef ENABLE_CLI
+/*/proxy/stats command handler
+*/
+static bcmos_errno _proxy_stats_cmd(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    int device = (int)parm[0].value.number;
+
+    if (device >= BCMTR_MAX_OLTS)
+        return BCM_ERR_RANGE;
+
+    bcmcli_print(session, "%-16s: %lu\n", "rx_packets", proxy_data[device].stats.rx_packets);
+    bcmcli_print(session, "%-16s: %lu\n", "rx_bytes", proxy_data[device].stats.rx_bytes);
+    bcmcli_print(session, "%-16s: %lu\n", "tx_packets", proxy_data[device].stats.tx_packets);
+    bcmcli_print(session, "%-16s: %lu\n", "tx_bytes", proxy_data[device].stats.tx_bytes);
+    bcmcli_print(session, "%-16s: %lu\n", "rx_errors", proxy_data[device].stats.rx_errors);
+    bcmcli_print(session, "%-16s: %lu\n", "tx_errors", proxy_data[device].stats.tx_errors);
+    bcmcli_print(session, "%-16s: %lu\n", "unpack_errors", proxy_data[device].stats.unpack_errors);
+    bcmcli_print(session, "%-16s: %lu\n", "pack_errors", proxy_data[device].stats.pack_errors);
+    bcmcli_print(session, "%-16s: %lu\n", "msg_errors", proxy_data[device].stats.msg_errors);
+    memset(&proxy_data[device].stats, 0, sizeof(proxy_stats));
+
+    return BCM_ERR_OK;
+}
+#endif /* #ifdef ENABLE_CLI */
+
+static bcmos_errno _proxy_msg_error(bcmolt_devid device, bcmolt_msg *proxy_msg)
+{
+    proxy_control_block *proxy = &proxy_data[device];
+    ++proxy->stats.msg_errors;
+    bcmolt_msg_err(proxy_msg, proxy->proxy_log, BCM_ERR_PARM, BCMOLT_ERR_FIELD_NONE, "Message is insane");
+    proxy_msg->dir = BCMOLT_MSG_DIR_RESPONSE;
+    return BCM_ERR_PARM;
+}
+
+static void _proxy_invoke(bcmolt_devid device, bcmolt_msg *proxy_msg)
+{
+    proxy_control_block *proxy = &proxy_data[device];
+    bcmos_errno rc;
+    bcmolt_system_mode system_mode;
+
+    /* Check that the message targets an object that is compatible with our system mode */
+    bcmolt_system_mode_get(device, &system_mode);
+    if (system_mode != BCMOLT_SYSTEM_MODE__NUM_OF && !bcmolt_object_is_supported(system_mode, proxy_msg->obj_type))
+    {
+        ++proxy->stats.msg_errors;
+        proxy_msg->dir = BCMOLT_MSG_DIR_RESPONSE;
+        bcmolt_msg_err(
+            proxy_msg,
+            proxy->proxy_log,
+            BCM_ERR_NOT_SUPPORTED,
+            BCMOLT_ERR_FIELD_NONE,
+            "Object type is not supported in this system mode");
+        return;
+    }
+
+    /* Invoke API */
+    switch (proxy_msg->group)
+    {
+        case BCMOLT_MGT_GROUP_CFG:
+            if ((proxy_msg->type & BCMOLT_MSG_TYPE_CLEAR) != 0)
+            {
+                rc = bcmolt_cfg_clear(device, (bcmolt_cfg *)proxy_msg);
+            }
+            else if ((proxy_msg->type & BCMOLT_MSG_TYPE_GET) != 0)
+            {
+                if ((proxy_msg->type & BCMOLT_MSG_TYPE_MULTI) != 0)
+                {
+                    if (proxy_msg->msg_set == NULL)
+                    {
+                        rc = _proxy_msg_error(device, proxy_msg);
+                    }
+                    else
+                    {
+                        rc = bcmolt_cfg_get_multi(device,
+                                                 (bcmolt_cfg *)proxy_msg,
+                                                 proxy_msg->msg_set->filter_flags,
+                                                 proxy_msg->msg_set);
+                    }
+                }
+                else
+                {
+                    rc = bcmolt_cfg_get(device, (bcmolt_cfg *)proxy_msg);
+                }
+            }
+            else if ((proxy_msg->type & BCMOLT_MSG_TYPE_SET) != 0)
+            {
+                rc = bcmolt_cfg_set(device, (bcmolt_cfg *)proxy_msg);
+            }
+            else
+            {
+                rc = _proxy_msg_error(device, proxy_msg);
+            }
+            break;
+
+        case BCMOLT_MGT_GROUP_STAT:
+            {
+                bcmolt_stat_flags flags;
+
+                flags = ((proxy_msg->type & BCMOLT_MSG_TYPE_CLEAR) != 0) ?
+                        BCMOLT_STAT_FLAGS_CLEAR_ON_READ : 0;
+
+                rc = bcmolt_stat_get(device, (bcmolt_stat *)proxy_msg, flags);
+            }
+            break;
+
+        case BCMOLT_MGT_GROUP_OPER:
+            rc = bcmolt_oper_submit(device, (bcmolt_oper *)proxy_msg);
+            break;
+
+        case BCMOLT_MGT_GROUP_PROXY:
+            rc = bcmolt_proxy_send(device, (bcmolt_proxy *)proxy_msg);
+            break;
+
+        case BCMOLT_MGT_GROUP_STAT_CFG:
+            if ((proxy_msg->type & BCMOLT_MSG_TYPE_GET) != 0)
+            {
+                rc = bcmolt_stat_cfg_get(device, (bcmolt_stat_cfg *)proxy_msg);
+            }
+            else if ((proxy_msg->type & BCMOLT_MSG_TYPE_SET) != 0)
+            {
+                rc = bcmolt_stat_cfg_set(device, (bcmolt_stat_cfg *)proxy_msg);
+            }
+            else
+            {
+                rc = _proxy_msg_error(device, proxy_msg);
+            }
+            break;
+
+        case BCMOLT_MGT_GROUP_AUTO_CFG:
+            if ((proxy_msg->type & BCMOLT_MSG_TYPE_GET) != 0)
+            {
+                rc = bcmolt_auto_cfg_get(device, (bcmolt_auto_cfg *)proxy_msg);
+            }
+            else if ((proxy_msg->type & BCMOLT_MSG_TYPE_SET) != 0)
+            {
+                rc = bcmolt_auto_cfg_set(device, (bcmolt_auto_cfg *)proxy_msg);
+            }
+            else
+            {
+                rc = _proxy_msg_error(device, proxy_msg);
+            }
+            break;
+
+        default:
+            rc = _proxy_msg_error(device, proxy_msg);
+    }
+
+    proxy_msg->err = rc;
+}
+
+/* Pack and send message */
+static void _proxy_send(bcmolt_devid device, bcmolt_msg *msg)
+{
+    bcmtr_hdr hdr = {};
+    int32_t packed_length;
+    bcmolt_buf txb = {};
+    int len;
+
+    /* Allocate buffer and pack */
+    packed_length = bcmolt_msg_get_packed_length(msg);
+    if (packed_length <= 0)
+    {
+        ++proxy_data[device].stats.pack_errors;
+        goto done;
+    }
+    packed_length += BCMTR_HDR_SIZE;
+    if (bcmolt_buf_alloc(&txb, packed_length, BCMOLT_BUF_ENDIAN_FIXED) != BCM_ERR_OK)
+    {
+        ++proxy_data[device].stats.pack_errors;
+        goto done;
+    }
+    bcmtr_header_fill(msg, &hdr);
+    bcmtr_header_pack(&hdr, txb.start);
+    bcmolt_buf_skip(&txb, BCMTR_HDR_SIZE);
+    if (bcmolt_msg_pack(msg, &txb) != BCM_ERR_OK)
+    {
+        ++proxy_data[device].stats.pack_errors;
+        goto done;
+    }
+
+    /* Send to client */
+    len = sendto(proxy_data[device].client_socket, txb.start, bcmolt_buf_get_used(&txb), 0,
+                 (struct sockaddr *)&proxy_data[device].client, sizeof(proxy_data[device].client));
+    if (len <= 0)
+    {
+        ++proxy_data[device].stats.tx_errors;
+    }
+    else
+    {
+        ++proxy_data[device].stats.tx_packets;
+        proxy_data[device].stats.tx_bytes += len;
+    }
+
+done:
+    bcmolt_buf_free(&txb);
+    return;
+}
+
+/* Task that waits for messages from Maple.
+ * Once message is received, it is forwarded to remote application
+ * via UDP socket.
+ */
+static int _proxy_rx_handler(long data)
+{
+    bcmolt_devid device = (bcmolt_devid)data;
+    bcmos_task *self = bcmos_task_current();
+    proxy_control_block *proxy = &proxy_data[device];
+    struct sockaddr_in sender;
+    socklen_t sendsize = sizeof(sender);
+    uint8_t client_buffer[BCMTR_MAX_MTU_SIZE + 128];
+    bcmolt_msg *proxy_msg;
+    bcmtr_hdr tr_hdr;
+    bcmolt_buf rxb;
+    int len;
+    uint16_t corr_tag;
+    bcmos_errno rc;
+
+    while (!self->destroyed)
+    {
+        memset(&sender, 0, sizeof(sender));
+        len = recvfrom(proxy->client_socket, client_buffer, sizeof(client_buffer), 0,
+                       (struct sockaddr *)&sender, &sendsize);
+        if (len < BCMTR_HDR_SIZE)
+        {
+            ++proxy->stats.rx_errors;
+            bcmos_usleep(1000000);
+            continue;
+        }
+        ++proxy->stats.rx_packets;
+        proxy->stats.rx_bytes += len;
+
+        if (proxy->client.sin_addr.s_addr != sender.sin_addr.s_addr ||
+            proxy->client.sin_port != sender.sin_port)
+        {
+#ifdef ENABLE_LOG
+            int client_ip = ntohl(sender.sin_addr.s_addr);
+            int client_port = ntohs(sender.sin_port);
+            BCM_LOG(INFO, proxy->proxy_log, "bcm_api_proxy: device %i connected to %d.%d.%d.%d:%d\n",
+                    (int)device,
+                    (client_ip >> 24) & 0xff, (client_ip >> 16) & 0xff,
+                    (client_ip >> 8) & 0xff, client_ip & 0xff, client_port);
+#endif
+            proxy->client = sender;
+        }
+
+        /* Unpack received message */
+        bcmolt_buf_init(&rxb, len, client_buffer, BCMOLT_BUF_ENDIAN_FIXED);
+        bcmtr_header_unpack(client_buffer, &tr_hdr);
+
+        /* Skip registration messages for now. The proxy has already registered for everything */
+        if (tr_hdr.auto_proxy_reg || tr_hdr.auto_proxy_unreg)
+            continue;
+
+        bcmolt_buf_skip(&rxb, BCMTR_HDR_SIZE);
+        proxy_msg = NULL;
+        rc = bcmolt_msg_unpack(&rxb, &proxy_msg);
+        if (rc)
+        {
+            /* Unpack error. Nothing much we can do */
+            ++proxy->stats.unpack_errors;
+            continue;
+        }
+
+        /* Store correlation tag for later */
+        proxy_msg->corr_tag = tr_hdr.corr_tag;
+        corr_tag = proxy_msg->corr_tag;
+
+        /* Point the message unpacker to local storage for dynamically-sized lists */
+        proxy_msg->list_buf = proxy->dynamic_list_buffer;
+        proxy_msg->list_buf_size = DYNAMIC_LIST_BUFFER_SIZE;
+
+        /* Invoke API */
+        _proxy_invoke(device, proxy_msg);
+
+        /* Pack and send back to the client */
+        proxy_msg->corr_tag = corr_tag;
+        _proxy_send(device, proxy_msg);
+        bcmolt_msg_free(proxy_msg);
+    }
+
+    self->destroyed = BCMOS_TRUE;
+    return 0;
+}
+
+/* Auto / proxy message handler */
+void bcmolt_api_proxy_auto_rx_cb(bcmolt_devid device, bcmolt_msg *msg)
+{
+    if (device >= BCMTR_MAX_OLTS)
+        return;
+
+    if (proxy_data[device].is_running)
+    {
+        if (proxy_data[device].on_ready_cmd &&
+            msg->obj_type == BCMOLT_OBJ_ID_DEVICE &&
+            msg->group == BCMOLT_MGT_GROUP_AUTO &&
+            msg->subgroup == BCMOLT_DEVICE_AUTO_ID_CONNECTION_COMPLETE)
+        {
+            char on_ready_cmd[512];
+            int rc;
+            snprintf(on_ready_cmd, sizeof(on_ready_cmd) - 1, "%s %d", proxy_data[device].on_ready_cmd, (int)device);
+            rc = system(on_ready_cmd);
+#ifdef ENABLE_LOG
+            BCM_LOG(INFO, proxy_data[device].proxy_log, "Executed command %s. rc=%d\n", on_ready_cmd, rc);
+#else
+            (void)rc;
+#endif
+        }
+        _proxy_send(device, msg);
+    }
+}
+
+static bcmos_errno _proxy_start(bcmolt_devid device, uint32_t udp_port, char *on_ready)
+{
+    bcmos_errno rc;
+    bcmos_task_parm proxy_rx_parm =
+    {
+        .name = "proxy_rx",
+        .handler = _proxy_rx_handler,
+        .priority = TASK_PRIORITY_TRANSPORT_PROXY,
+        .data = device
+    };
+    struct sockaddr_in sa = {};
+
+    proxy_data[device].proxy_port = udp_port;
+    proxy_data[device].device_id = device;
+    proxy_data[device].on_ready_cmd = on_ready;
+
+    /* Start listening on proxy port */
+    proxy_data[device].client_socket = socket(AF_INET, SOCK_DGRAM, 0);
+    if (proxy_data[device].client_socket < 0)
+    {
+#ifdef ENABLE_LOG
+        BCM_LOG(ERROR, proxy_data[device].proxy_log, "Can't create UDP socket\n");
+#endif
+        return BCM_ERR_INTERNAL;
+    }
+
+    /* Bind local */
+    sa.sin_family = AF_INET;
+    sa.sin_port = htons(proxy_data[device].proxy_port);
+    sa.sin_addr.s_addr = INADDR_ANY;
+    if (bind(proxy_data[device].client_socket, (struct sockaddr*)&sa, sizeof(sa) ) == -1)
+    {
+        perror("bind");
+#ifdef ENABLE_LOG
+        BCM_LOG(ERROR, proxy_data[device].proxy_log, "Can't bind UDP socket to port %u\n", proxy_data[device].proxy_port);
+#endif
+        close(proxy_data[device].client_socket);
+        return BCM_ERR_INTERNAL;
+    }
+
+    /* Create thread listening for incoming APIs */
+    rc = bcmos_task_create(&proxy_data[device].proxy_rx_task, &proxy_rx_parm);
+    BUG_ON(BCM_ERR_OK != rc);
+
+    proxy_data[device].is_running = BCMOS_TRUE;
+
+#ifdef ENABLE_LOG
+    BCM_LOG(INFO, proxy_data[device].proxy_log, "BCM68620 API proxy for device %d is listening for requests on UDP port %u\n",
+        (int)device, proxy_data[device].proxy_port);
+#endif
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcmolt_api_proxy_init(bcmcli_entry *root, bcmolt_devid device, uint32_t udp_port, char *on_ready)
+{
+#ifdef ENABLE_CLI
+    bcmcli_entry *dir;
+#endif
+
+    if (device >= BCMTR_MAX_OLTS)
+        return BCM_ERR_PARM;
+
+    if (proxy_data[device].is_running)
+        return BCM_ERR_ALREADY;
+
+#ifdef ENABLE_LOG
+    {
+        char log_id[32];
+        snprintf(log_id, sizeof(log_id) - 1, "proxy_%d", (int)device);
+        proxy_data[device].proxy_log = bcm_dev_log_id_register(log_id, DEV_LOG_LEVEL_INFO, DEV_LOG_ID_TYPE_BOTH);
+    }
+#else
+    proxy_data[device].proxy_log = DEV_LOG_INVALID_ID;
+#endif
+
+    if (is_first_proxy)
+    {
+#ifdef ENABLE_CLI
+        dir = bcmcli_dir_add(root, "proxy", "API proxy", BCMCLI_ACCESS_GUEST, NULL);
+        if (!dir)
+        {
+            BCM_LOG(ERROR, proxy_data[device].proxy_log, "Can't create proxy directory\n");
+            BUG();
+        }
+
+        BCMCLI_MAKE_CMD(dir, "stat", "Proxy statistics", _proxy_stats_cmd,
+            BCMCLI_MAKE_PARM_RANGE("device", "Device index", BCMCLI_PARM_NUMBER, BCMCLI_PARM_FLAG_OPTIONAL,
+                0, BCMTR_MAX_OLTS-1));
+
+#endif
+        is_first_proxy = BCMOS_FALSE;
+    }
+    return _proxy_start(device, udp_port, on_ready);
+}
+
+void bcmolt_api_proxy_stop(void)
+{
+    int i;
+
+    for (i = 0; i < BCMTR_MAX_OLTS; i++)
+    {
+        if (proxy_data[i].is_running)
+        {
+            bcmos_task_destroy(&proxy_data[i].proxy_rx_task);
+            close(proxy_data[i].client_socket);
+        }
+    }
+}
+
diff --git a/bcm68620_release/release/host_reference/api_proxy/bcmolt_api_proxy.h b/bcm68620_release/release/host_reference/api_proxy/bcmolt_api_proxy.h
new file mode 100644
index 0000000..a76c25e
--- /dev/null
+++ b/bcm68620_release/release/host_reference/api_proxy/bcmolt_api_proxy.h
@@ -0,0 +1,44 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef _BCMOLT_API_PROXY_H_
+#define _BCMOLT_API_PROXY_H_
+
+#include <bcmos_system.h>
+#include <bcmolt_msg.h>
+
+void bcmolt_api_proxy_auto_rx_cb(bcmolt_devid olt, bcmolt_msg *msg);
+
+bcmos_errno bcmolt_api_proxy_init(bcmcli_entry *root, bcmolt_devid device, uint32_t udp_port, char *on_ready_cmd);
+
+void bcmolt_api_proxy_stop(void);
+
+#endif
+
+
diff --git a/bcm68620_release/release/host_reference/cli/Makefile b/bcm68620_release/release/host_reference/cli/Makefile
new file mode 100644
index 0000000..f6974c1
--- /dev/null
+++ b/bcm68620_release/release/host_reference/cli/Makefile
@@ -0,0 +1,26 @@
+# CLI engine
+#
+MOD_NAME = cli
+MOD_TYPE = lib
+MOD_DEPS = utils
+
+srcs = bcmcli_session.c
+ifeq ("$(ENABLE_CLI)", "y")
+    srcs += bcmcli.c
+    MOD_DEFS = -DENABLE_CLI
+
+    # Enable line editing by default. Can be overwritten in make command line
+    CONFIG_LIBEDIT	?= n
+    CONFIG_LINENOISE ?= y
+    
+    # Extra configuration
+    ifeq ("$(CONFIG_LIBEDIT)", "y")
+    	MOD_DEFS += -DCONFIG_LIBEDIT -DCONFIG_EDITLINE
+    	MOD_LIBS += -ledit -ltermcap
+    	CONFIG_LINENOISE = n
+    endif
+    ifeq ("$(CONFIG_LINENOISE)", "y")
+    	MOD_DEPS += linenoise
+    endif
+endif
+
diff --git a/bcm68620_release/release/host_reference/cli/bcmcli.c b/bcm68620_release/release/host_reference/cli/bcmcli.c
new file mode 100644
index 0000000..9190e5d
--- /dev/null
+++ b/bcm68620_release/release/host_reference/cli/bcmcli.c
@@ -0,0 +1,2835 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+
+/*******************************************************************
+ * bcmcli.c
+ *
+ * CLI engine
+ *
+ *******************************************************************/
+#include <bcmos_system.h>
+#define BCMCLI_INTERNAL
+#include <bcmcli.h>
+#include <bcmos_types.h>
+
+#define BCMCLI_INBUF_LEN          2048
+#define BCMCLI_MAX_QUAL_NAME_LENGTH 256
+#define BCMCLI_MAX_PARMS          128
+#define BCMCLI_UP_STR             ".."
+#define BCMCLI_ROOT_STR           "/"
+#define BCMCLI_COMMENT_CHAR       '#'
+#define BCMCLI_HELP_CHAR          '?'
+#define BCMCLI_ARRAY_DELIM_CHAR   ','
+#define BCMCLI_ROOT_HELP          "root directory"
+#define BCMCLI_MAX_PARM_VAL_LEN   256
+#define BCMCLI_ENUM_MASK_DEL_CHAR '+'
+#define BCMCLI_HELP_BUFFER_SIZE   16384
+
+#define BCMCLI_EQUAL_CHAR         '='
+
+
+typedef enum { BCMCLI_ENTRY_DIR, BCMCLI_ENTRY_CMD } bcmcli_entry_selector;
+
+/* External table - boolean values */
+bcmcli_enum_val bcmcli_enum_bool_table[] = {
+    { .name="true", .val = 1 },
+    { .name="yes", .val = 1 },
+    { .name="on", .val = 1 },
+    { .name="false", .val = 0 },
+    { .name="no", .val = 0 },
+    { .name="off", .val = 0 },
+    BCMCLI_ENUM_LAST
+};
+
+/* Monitor token structure */
+struct bcmcli_entry
+{
+    struct bcmcli_entry  *next;
+    char *name;                                  /* Command/directory name */
+    char *help;                                  /* Command/directory help */
+    bcmcli_entry_selector sel;                   /* Entry selector */
+    char *alias;                                 /* Alias */
+    uint16_t alias_len;                          /* Alias length */
+    struct bcmcli_entry *parent;                 /* Parent directory */
+    bcmcli_access_right access_right;
+
+    union {
+        struct
+        {
+            struct bcmcli_entry *first;          /* First entry in directory */
+            bcmcli_dir_extra_parm extras;        /* Optional extras */
+        } dir;
+        struct
+        {
+            bcmcli_cmd_cb cmd_cb;                /* Command callback */
+            bcmcli_cmd_parm *parms;              /* Command parameters */
+            bcmcli_cmd_extra_parm extras;        /* Optional extras */
+            uint16_t num_parms;
+        } cmd;
+    } u;
+};
+
+
+/* Token types */
+typedef enum
+{
+    BCMCLI_TOKEN_EMPTY,
+    BCMCLI_TOKEN_UP,
+    BCMCLI_TOKEN_ROOT,
+    BCMCLI_TOKEN_BREAK,
+    BCMCLI_TOKEN_HELP,
+    BCMCLI_TOKEN_NAME,
+    BCMCLI_TOKEN_VALUE,
+} bcmcli_token_type;
+
+/* Parameter value set descriptor */
+typedef union bcmcli_parm_value_status
+{
+    bcmos_bool  value_set;
+    bcmos_bool *values_set;
+} bcmcli_parm_value_status;
+
+/* CLI session data */
+typedef struct bcmcli_session_data
+{
+    bcmcli_entry *curdir;
+    bcmcli_entry *curcmd;
+    bcmcli_cmd_parm cmd_parms[BCMCLI_MAX_PARMS];
+    bcmcli_parm_value_status value_status[BCMCLI_MAX_PARMS];
+    bcmcli_session *session;
+    uint16_t num_parms;
+    char *p_inbuf;
+    int stop_monitor;
+    char inbuf[BCMCLI_INBUF_LEN];
+} bcmcli_session_extras;
+
+/* Name, value pairs */
+typedef struct bcmcli_name_value
+{
+    bcmcli_token_type type;
+    const char *name;
+    const char *value;
+} bcmcli_name_value;
+
+static bcmcli_entry           *_bcmcli_root_dir;
+static bcmcli_session_extras  *_bcmcli_root_session;
+static bcmcli_log_mode         _bcmcli_log_mode;
+static bcmcli_session         *_bcmcli_log_session;
+
+#define BCMCLI_MIN_NAME_LENGTH_FOR_ALIAS   3
+#define BCMCLI_ROOT_NAME       "/"
+
+/* Internal functions */
+static void        _bcmcli_alloc_root(const bcmcli_session_parm *parm);
+static void        _bcmcli_display_dir(bcmcli_session_extras *mon_session, bcmcli_entry *p_dir );
+static bcmcli_token_type _bcmcli_get_word(bcmcli_session_extras *session, char **inbuf, char **p_word);
+static bcmcli_token_type _bcmcli_analyze_token( const char *name );
+static int         _bcmcli_parse_parms( bcmcli_session_extras *mon_session, bcmcli_entry *p_token,
+    bcmcli_name_value *pairs, int npairs);
+static int _bcmcli_extend_parms( bcmcli_session_extras *mon_session, bcmcli_name_value *pairs,
+    int npairs, bcmos_bool last_is_space, char *insert_str, uint32_t insert_size);
+static bcmcli_entry *_bcmcli_search_token( bcmcli_entry *p_dir, const char *name );
+static void        _bcmcli_help_dir( bcmcli_session_extras *mon_session, bcmcli_entry *p_dir );
+static void        _bcmcli_help_entry(bcmcli_session_extras *mon_session, bcmcli_entry *p_token,
+    bcmcli_name_value *pairs, int npairs, bcmos_bool suppress_err_print);
+static void        _bcmcli_help_populated_cmd(bcmcli_session_extras *mon_session, bcmcli_entry *p_token,
+    const char *partial_match, bcmos_bool suppress_assigned);
+static void        _bcmcli_choose_alias( bcmcli_entry *p_dir, bcmcli_entry *p_new_token );
+static bcmcli_cmd_parm *_bcmcli_find_named_parm(bcmcli_session_extras *mon_session, const char *name);
+static char       *_bcmcli_strlwr( char *s );
+static int         _bcmcli_stricmp( const char *s1, const char *s2, int len );
+static bcmos_errno _bcmcli_dft_scan_cb(const bcmcli_cmd_parm *parm, bcmcli_parm_value *value, const char *string_val);
+static const char *_bcmcli_get_type_name(const bcmcli_cmd_parm *parm);
+static void        _bcmcli_dft_format_cb(const bcmcli_cmd_parm *parm, bcmcli_parm_value value, char *buffer, int size);
+static bcmos_errno _bcmcli_enum_scan_cb(const bcmcli_cmd_parm *parm, bcmcli_parm_value *value, const char *string_val);
+static void        _bcmcli_enum_format_cb(const bcmcli_cmd_parm *parm, bcmcli_parm_value value, char *buffer, int size);
+static bcmos_errno _bcmcli_enum_mask_scan_cb(const bcmcli_cmd_parm *parm, bcmcli_parm_value *value, const char *string_val);
+static void        _bcmcli_enum_mask_format_cb(const bcmcli_cmd_parm *parm, bcmcli_parm_value value, char *buffer, int size);
+static bcmos_errno _bcmcli_buffer_scan_cb(const bcmcli_cmd_parm *parm, bcmcli_parm_value *value, const char *string_val);
+static const char *_bcmcli_qualified_name( bcmcli_entry *token, char *buffer, int size);
+static bcmos_errno _bcmcli_split(bcmcli_session_extras *mon_session, bcmcli_name_value **pairs, int *npairs);
+static void        _bcmcli_assign_callbacks(bcmcli_cmd_parm *parm);
+static void        _bcmcli_log_cmd(const char *cmd);
+static void        _bcmcli_log_rc(bcmos_errno rc);
+static void        _bcmcli_free_session_value_status(bcmcli_session_extras *mon_session);
+
+static inline bcmcli_session_extras *_bcmcli_session_data(bcmcli_session *session)
+{
+    if (!session)
+        return _bcmcli_root_session;
+    return bcmcli_session_data(session);
+}
+
+/** Add subdirectory to the parent directory
+ *
+ * \param[in]   parent          Parent directory handle. NULL=root
+ * \param[in]   name            Directory name
+ * \param[in]   help            Help string
+ * \param[in]   access_right    Access rights
+ * \param[in]   extras          Optional directory descriptor. Mustn't be allocated on the stack.
+ * \return      new directory handle or NULL in case of failure
+ */
+bcmcli_entry *bcmcli_dir_add(bcmcli_entry *parent, const char *name,
+                             const char *help, bcmcli_access_right access_right,
+                             const bcmcli_dir_extra_parm *extras)
+{
+    bcmcli_entry *p_dir;
+    bcmcli_entry **p_e;
+
+    assert(name);
+    assert(help);
+    if (!name || !help)
+        return NULL;
+
+    if (!_bcmcli_root_dir)
+    {
+        _bcmcli_alloc_root(NULL);
+        if (!_bcmcli_root_dir)
+            return NULL;
+    }
+
+    if (!parent)
+        parent = _bcmcli_root_dir;
+
+    p_dir=(bcmcli_entry *)bcmos_calloc( sizeof(bcmcli_entry) + strlen(name) + strlen(help) + 2 );
+    if ( !p_dir )
+        return NULL;
+
+    p_dir->name = (char *)(p_dir + 1);
+    strcpy( p_dir->name, name);
+    p_dir->help = p_dir->name + strlen(name) + 1;
+    strcpy(p_dir->help, help);
+    p_dir->sel = BCMCLI_ENTRY_DIR;
+    _bcmcli_choose_alias( parent, p_dir );
+    p_dir->access_right = access_right;
+    if (extras)
+        p_dir->u.dir.extras = *extras;
+
+    /* Add new directory to the parent's list */
+    p_dir->parent = parent;
+    p_e = &(parent->u.dir.first);
+    while (*p_e)
+        p_e = &((*p_e)->next);
+    *p_e = p_dir;
+
+    return p_dir;
+}
+
+static bcmcli_entry * find_entry_in_dir( bcmcli_entry *dir, const char *name,
+        bcmcli_entry_selector type, uint16_t recursive_search)
+{
+    bcmcli_entry *p1, *p;
+
+    if ( !dir )
+    {
+        dir = _bcmcli_root_dir;
+        if (!dir)
+            return NULL;
+    }
+    p = dir->u.dir.first;
+    while (p)
+    {
+        if ( !_bcmcli_stricmp(p->name, name, -1) && type == p->sel )
+            return p;
+        if ( recursive_search && p->sel == BCMCLI_ENTRY_DIR )
+        {
+            p1 = find_entry_in_dir(p, name , type, 1 );
+            if ( p1 )
+                return p1;
+        }
+        p = p->next;
+    }
+    return NULL;
+}
+
+
+/* Scan directory tree and look for directory with name starts from
+ * root directory with name root_name
+ */
+bcmcli_entry *bcmcli_dir_find(bcmcli_entry *parent, const char  *name)
+{
+    if ( !parent )
+        parent = _bcmcli_root_dir;
+    return find_entry_in_dir(parent, name, BCMCLI_ENTRY_DIR, 0 );
+}
+
+
+/* Scan directory tree and look for command named "name". */
+bcmcli_entry *bcmcli_cmd_find(bcmcli_entry *parent, const char *name )
+{
+    if ( !parent )
+        parent = _bcmcli_root_dir;
+    return find_entry_in_dir(parent, name, BCMCLI_ENTRY_CMD, 0 );
+}
+
+
+/** Add CLI command
+ *
+ * \param[in]   dir             Handle of directory to add command to. NULL=root
+ * \param[in]   name            Command name
+ * \param[in]   cmd_cb          Command handler
+ * \param[in]   help            Help string
+ * \param[in]   access_right    Access rights
+ * \param[in]   extras          Optional extras
+ * \param[in]   parms           Optional parameters array. Must not be allocated on the stack!
+ *                              If parms!=NULL, the last parameter in the array must have name==NULL.
+ * \return
+ *      0   =OK\n
+ *      <0  =error code
+ */
+bcmos_errno bcmcli_cmd_add(bcmcli_entry *dir, const char *name, bcmcli_cmd_cb cmd_cb,
+    const char *help, bcmcli_access_right access_right,
+    const bcmcli_cmd_extra_parm *extras, bcmcli_cmd_parm parms[])
+{
+    bcmcli_entry *p_token;
+    bcmcli_entry **p_e;
+    uint16_t       i;
+    bcmcli_cmd_parm *parm = parms;
+
+    assert(name);
+    assert(help);
+    assert(cmd_cb);
+    if (!name || !cmd_cb || !help)
+        return BCM_ERR_PARM;
+
+    if (!_bcmcli_root_dir)
+    {
+        _bcmcli_alloc_root(NULL);
+        if (!_bcmcli_root_dir)
+            return BCM_ERR_NOMEM;
+    }
+
+    if (!dir)
+        dir = _bcmcli_root_dir;
+
+    p_token=(bcmcli_entry *)bcmos_calloc( sizeof(bcmcli_entry) + strlen(name) + strlen(help) + 2 );
+    if ( !p_token )
+        return BCM_ERR_NOMEM;
+
+    /* Copy name */
+    p_token->name = (char *)(p_token + 1);
+    strcpy( p_token->name, name );
+    p_token->help = p_token->name + strlen(name) + 1;
+    strcpy(p_token->help, help);
+    p_token->sel = BCMCLI_ENTRY_CMD;
+    p_token->u.cmd.cmd_cb = cmd_cb;
+    p_token->u.cmd.parms = parms;
+    if (extras)
+        p_token->u.cmd.extras = *extras;
+    p_token->access_right = access_right;
+
+    /* Convert name to lower case and choose alias */
+    _bcmcli_choose_alias(dir, p_token );
+
+
+    /* Check parameters */
+    for (i = 0; i < BCMCLI_MAX_PARMS && parms && parms[i].name; i++)
+    {
+        parm = &parms[i];
+        /* User-defined parameter must have a scan_cb callback for text->value conversion */
+        if ((parm->type==BCMCLI_PARM_USERDEF) && !parm->scan_cb)
+        {
+            bcmos_printf("MON: %s> scan_cb callback must be set for user-defined parameter %s\n", name, parm->name);
+            goto cmd_add_error;
+        }
+        if (parm->type==BCMCLI_PARM_ENUM || parm->type==BCMCLI_PARM_ENUM_MASK)
+        {
+            if (!parm->enum_table)
+            {
+                bcmos_printf("MON: %s> value table must be set in low_val for enum parameter %s\n", name, parm->name);
+                goto cmd_add_error;
+            }
+
+            /* Check default value if any */
+            if ((parm->flags & BCMCLI_PARM_FLAG_DEFVAL))
+            {
+                if (_bcmcli_enum_mask_scan_cb(parm, &parm->value, parm->value.string) < 0)
+                {
+                    bcmos_printf("MON: %s> default value %s doesn't match any value of enum parameter %s\n", name, parm->value.string, parm->name);
+                    goto cmd_add_error;
+                }
+            }
+            else if ((parm->flags & BCMCLI_PARM_FLAG_OPTIONAL))
+            {
+                /* Optional enum parameters are initialized by their 1st value by default.
+                 * All other parameters are initialized to 0.
+                 */
+                bcmcli_enum_val *values=parm->enum_table;
+                parm->value.enum_val = values[0].val;
+            }
+
+            /* All values of enum mask parameters mast be complementary bits */
+            if (parm->type==BCMCLI_PARM_ENUM_MASK)
+            {
+                long all_mask = 0;
+                bcmcli_enum_val *values;
+                for (values=parm->enum_table; values->name; ++values)
+                    all_mask |= values->val;
+
+                for (values=parm->enum_table; values->name; ++values)
+                {
+                    if ((all_mask & values->val) != values->val)
+                    {
+                        bcmos_printf("MON: %s> enum_table values of enum_mask parameters must be complementary bits\n", name, parm->name);
+                        goto cmd_add_error;
+                    }
+                    all_mask &= ~values->val;
+                }
+            }
+        }
+        else if (parm->type==BCMCLI_PARM_BUFFER)
+        {
+            if (!parm->value.buffer.start || !parm->value.buffer.len)
+            {
+                bcmos_printf("MON: %s> value.buffer.start is not set for BUFFER parameter %s\n", name, parm->name);
+                goto cmd_add_error;
+            }
+            if (parm->max_array_size)
+            {
+                bcmos_printf("MON: %s> BUFFER arrays are not supported %s\n", name, parm->name);
+                goto cmd_add_error;
+            }
+        }
+        if (parm->max_array_size)
+        {
+            if (!parm->values)
+            {
+                bcmos_printf("MON: %s> parm->values must be set for parameter-array %s\n", name, parm->name);
+                goto cmd_add_error;
+            }
+        }
+        _bcmcli_assign_callbacks(parm);
+    }
+    if ((i == BCMCLI_MAX_PARMS) && parms[i].name[0])
+    {
+        bcmos_printf("MON: %s> too many parameters\n", name);
+        goto cmd_add_error;
+    }
+    p_token->u.cmd.num_parms = i;
+
+    /* Add token to the directory */
+    p_token->parent = dir;
+    p_e = &(dir->u.dir.first);
+    while (*p_e)
+        p_e = &((*p_e)->next);
+    *p_e = p_token;
+
+    return 0;
+
+cmd_add_error:
+    bcmos_free( p_token );
+    return BCM_ERR_PARM;
+}
+
+
+/** Destroy token (command or directory)
+ * \param[in]   token           Directory or command token. NULL=root
+ */
+void bcmcli_token_destroy(bcmcli_entry *token)
+{
+    if (!token)
+    {
+        if (!_bcmcli_root_dir)
+            return;
+        token = _bcmcli_root_dir;
+    }
+    /* Remove from parent's list */
+    if (token->parent)
+    {
+        bcmcli_entry **p_e;
+        p_e = &(token->parent->u.dir.first);
+        while (*p_e)
+        {
+            if (*p_e == token)
+            {
+                *p_e = token->next;
+                break;
+            }
+            p_e = &((*p_e)->next);
+        }
+    }
+
+    /* Remove all directory entries */
+    if (token->sel == BCMCLI_ENTRY_DIR)
+    {
+        bcmcli_entry *e = token->u.dir.first;
+        while ((e = token->u.dir.first))
+            bcmcli_token_destroy(e);
+    }
+    else if (token->u.cmd.extras.free_parms)
+            token->u.cmd.extras.free_parms(token->u.cmd.parms);
+
+    /* Release the token */
+    bcmos_free(token);
+
+    if (token == _bcmcli_root_dir)
+    {
+        _bcmcli_root_dir = NULL;
+        if (_bcmcli_root_session)
+        {
+            bcmcli_session_close(_bcmcli_root_session->session);
+            _bcmcli_root_session = NULL;
+        }
+    }
+}
+
+/** Open monitor session
+ *
+ * Monitor supports multiple simultaneous sessions with different
+ * access rights.
+ * Note that there already is a default session with full administrative rights,
+ * that takes input from stdin and outputs to stdout.
+ * \param[in]   parm        Session parameters. Must not be allocated on the stack.
+ * \param[out]  p_session   Session handle
+ * \return
+ *      0   =OK\n
+ *      <0  =error code
+ */
+bcmos_errno bcmcli_session_open(const bcmcli_session_parm *parm, bcmcli_session **p_session)
+{
+    bcmcli_session *session;
+    bcmcli_session_extras *mon_session;
+    bcmcli_session_parm session_parms;
+    int rc;
+
+    assert(p_session);
+    if (!p_session)
+        return BCM_ERR_PARM;
+
+    if (!_bcmcli_root_dir)
+    {
+        _bcmcli_alloc_root(parm);
+        if (!_bcmcli_root_dir)
+            return BCM_ERR_NOMEM;
+    }
+    if (parm)
+        session_parms = *parm;
+    else
+    {
+        memset(&session_parms, 0, sizeof(session_parms));
+        session_parms.name = "unnamed";
+    }
+
+    /* Open comm session */
+    session_parms.extra_size = sizeof(bcmcli_session_extras);
+    rc = bcmcli_session_open_user(&session_parms, &session);
+    if (rc)
+        return rc;
+    mon_session = _bcmcli_session_data(session);
+    mon_session->curdir = _bcmcli_root_dir;
+    mon_session->session = session;
+
+    *p_session = session;
+
+    return 0;
+}
+
+#define BCMCLI_PARSE_RETURN(ret) \
+    do { \
+        rc = ret;   \
+        goto bcmcli_parse_out; \
+    } while (0)
+
+/* Parse a single command. Stop on ';' or EOL */
+static bcmos_errno bcmcli_parse_command(bcmcli_session *session)
+{
+    bcmcli_session_extras *mon_session=_bcmcli_session_data(session);
+    bcmcli_entry  *p_token;
+    bcmcli_name_value *pairs = NULL;
+    int stop_parsing = 0;
+    int npairs;
+    int i;
+    char *cmd_line;
+    bcmos_errno rc = BCM_ERR_OK;
+
+    session = mon_session->session;
+
+    /* Make a copy of command line - for logging */
+    cmd_line = bcmos_alloc(strlen(mon_session->p_inbuf) + 1);
+    if (!cmd_line)
+        return BCM_ERR_NOMEM;
+    strcpy(cmd_line, mon_session->p_inbuf);
+
+    /* Split string to name/value pairs */
+    rc = _bcmcli_split(mon_session, &pairs, &npairs);
+    if (rc)
+    {
+        if (rc == BCM_ERR_NOENT)
+            rc = BCM_ERR_OK;
+        BCMCLI_PARSE_RETURN(rc);
+    }
+
+    /* Interpret empty string as "display directory" */
+    if ( !npairs )
+    {
+        _bcmcli_display_dir(mon_session, mon_session->curdir );
+        BCMCLI_PARSE_RETURN(BCM_ERR_OK);
+    }
+
+    /* Identify parameters */
+    for (i=0; i<npairs && !rc && !stop_parsing; i++)
+    {
+        switch (pairs[i].type)
+        {
+        case BCMCLI_TOKEN_NAME:
+        case BCMCLI_TOKEN_VALUE:
+            /* Identify command. The 1st pair can't contain name, only value */
+            if (pairs[i].name)
+            {
+                bcmcli_session_print(session, "**ERR: %s is unexpected\n", pairs[i].name);
+                BCMCLI_PARSE_RETURN(BCM_ERR_PARM);
+            }
+            p_token = _bcmcli_search_token(mon_session->curdir, pairs[i].value);
+            if (p_token == NULL)
+            {
+                bcmcli_session_print(session, "**ERR: %s is unexpected\n", pairs[i].value);
+                BCMCLI_PARSE_RETURN(BCM_ERR_PARM);
+            }
+            /* Directory or command ? */
+            if (p_token->sel == BCMCLI_ENTRY_DIR)
+            {
+                mon_session->curdir = p_token;
+                _bcmcli_display_dir(mon_session, mon_session->curdir );
+            }
+            else
+            {
+                /* Function token */
+                mon_session->curcmd = p_token;
+                if (_bcmcli_parse_parms(mon_session, p_token, &pairs[i+1], npairs-i-1) < 0)
+                {
+                    _bcmcli_help_entry(mon_session, p_token, &pairs[i+1], npairs-i-1, BCMOS_TRUE);
+                    rc = BCM_ERR_PARM;
+                }
+                else
+                {
+                    _bcmcli_log_cmd(cmd_line);
+                    rc = p_token->u.cmd.cmd_cb(session, mon_session->cmd_parms, npairs-i-1 );
+                    if (rc)
+                    {
+                        char buffer[BCMCLI_MAX_QUAL_NAME_LENGTH];
+                        bcmcli_session_print(session, "MON: %s> failed with error code %s(%d)\n",
+                            _bcmcli_qualified_name(p_token, buffer, sizeof(buffer)),
+                                         bcmos_strerror(rc), rc);
+                    }
+                    _bcmcli_log_rc(rc);
+                    _bcmcli_free_session_value_status(mon_session);
+                }
+                stop_parsing = 1;
+            }
+            break;
+
+        case BCMCLI_TOKEN_UP: /* Go to upper directory */
+            if (mon_session->curdir->parent)
+                mon_session->curdir = mon_session->curdir->parent;
+            _bcmcli_display_dir(mon_session, mon_session->curdir );
+            break;
+
+        case BCMCLI_TOKEN_ROOT: /* Go to the root directory */
+            mon_session->curdir = _bcmcli_root_dir;
+            _bcmcli_display_dir(mon_session, mon_session->curdir );
+            break;
+
+        case BCMCLI_TOKEN_HELP: /* Display help */
+            if (i < npairs-1 &&
+                ((p_token = _bcmcli_search_token( mon_session->curdir, pairs[i+1].value)) != NULL ))
+            {
+                _bcmcli_help_entry(mon_session, p_token, &pairs[i+2], npairs-i-2, BCMOS_FALSE);
+            }
+            else
+            {
+                _bcmcli_help_dir(mon_session, mon_session->curdir);
+            }
+            stop_parsing = 1;
+            break;
+
+        default:
+            stop_parsing = 1;
+            break;
+        }
+    }
+
+bcmcli_parse_out:
+    if (pairs)
+        bcmos_free(pairs);
+    if (cmd_line)
+        bcmos_free(cmd_line);
+    return rc;
+
+}
+
+/** Context extension */
+bcmos_errno bcmcli_extend(bcmcli_session *session, char *input_str, char *insert_str, uint32_t insert_size)
+{
+    bcmcli_session_extras *mon_session=_bcmcli_session_data(session);
+    bcmcli_entry  *p_token;
+    bcmcli_name_value *pairs;
+    bcmos_bool last_is_space;
+    int npairs;
+    bcmos_errno rc = BCM_ERR_OK;
+
+    if (!mon_session || !mon_session->curdir || !input_str)
+        return BCM_ERR_PARM;
+
+    insert_str[0] = 0;
+    mon_session->p_inbuf = input_str;
+
+    last_is_space = strlen(input_str) && (input_str[strlen(input_str) - 1] == ' ');
+
+    /* Split string to name/value pairs */
+    rc = _bcmcli_split(mon_session, &pairs, &npairs);
+    if (rc)
+        return rc;
+
+    /* empty list - display list of commands */
+    if ( !npairs )
+    {
+        _bcmcli_display_dir(mon_session, mon_session->curdir );
+        BCMCLI_PARSE_RETURN(0);
+    }
+
+    /* Identify parameters */
+    switch (pairs[0].type)
+    {
+    case BCMCLI_TOKEN_NAME:
+    case BCMCLI_TOKEN_VALUE:
+        /* Identify command. The 1st pair can't contain name, only value */
+        if (pairs[0].name ||
+            !(p_token = _bcmcli_search_token(mon_session->curdir, pairs[0].value)))
+        {
+            _bcmcli_display_dir(mon_session, mon_session->curdir );
+            BCMCLI_PARSE_RETURN(BCM_ERR_PARM);
+        }
+
+        /* Directory or command ? */
+        if (p_token->sel != BCMCLI_ENTRY_CMD)
+            BCMCLI_PARSE_RETURN(BCM_ERR_OK);
+
+        /* Function token */
+        mon_session->curcmd = p_token;
+        rc = _bcmcli_extend_parms(mon_session, &pairs[1], npairs-1, last_is_space, insert_str, insert_size);
+        break;
+
+    default:
+        break;
+    }
+
+bcmcli_parse_out:
+    bcmos_free(pairs);
+    return rc;
+}
+
+/** Parse and execute input string.
+ * input_string can contain multiple commands delimited by ';'
+ *
+ * \param[in]   session         Session handle
+ * \param[in]   input_string    String to be parsed. May consist of multiple ';'-delimited commands
+ * \return
+ *      =0  - OK \n
+ *      BCM_ERR_PARM - parsing error\n
+ *      other - return code - as returned from command handler.
+ *            It is recommended to return -EINTR to interrupt monitor loop.
+ */
+bcmos_errno bcmcli_parse(bcmcli_session *session, char* input_string)
+{
+    bcmcli_session_extras *mon_session=_bcmcli_session_data(session);
+    uint32_t input_len;
+    int rc = 0;
+
+    if (!mon_session || !mon_session->curdir || !input_string)
+        return BCM_ERR_PARM;
+    input_len = strlen(input_string);
+    if (!input_len)
+        return 0;
+
+    /* cut CR, LF if any */
+    while (input_len && (input_string[input_len-1]=='\n' || input_string[input_len-1]=='\r'))
+        input_string[--input_len]=0;
+
+    mon_session->p_inbuf = input_string;
+    mon_session->stop_monitor = 0;
+
+    do {
+        rc = bcmcli_parse_command(session);
+    } while (mon_session->p_inbuf && mon_session->p_inbuf[0] && !mon_session->stop_monitor && !rc);
+
+    return rc;
+}
+
+/** Read input and parse iteratively until EOF or bcmcli_is_stopped()
+ *
+ * \param[in]   session         Session handle
+ * \return
+ *      =0  - OK \n
+ */
+bcmos_errno bcmcli_driver(bcmcli_session *session)
+{
+    bcmcli_session_extras *mon_session=_bcmcli_session_data(session);
+
+    session = mon_session->session;
+    mon_session->stop_monitor = 0;
+    while (!bcmcli_is_stopped(session) &&
+          bcmcli_session_gets(session, mon_session->inbuf, sizeof(mon_session->inbuf)-1))
+    {
+        /* Session could've been stopped while in "gets". Check again and proceed if active */
+        if (!bcmcli_is_stopped(session))
+            bcmcli_parse(session, mon_session->inbuf);
+    }
+
+    return BCM_ERR_OK;
+}
+
+
+/* Stop monitor driver */
+void bcmcli_stop( bcmcli_session *session )
+{
+    bcmcli_session_extras *mon_session=_bcmcli_session_data(session);
+    assert(mon_session);
+    mon_session->stop_monitor = 1;
+}
+
+/** Returns 1 if monitor session is stopped
+ * \param[in]   session         Session handle
+ * \returns 1 if monitor session stopped by bcmcli_stop()\n
+ * 0 otherwise
+ */
+bcmos_bool bcmcli_is_stopped(bcmcli_session *session)
+{
+    bcmcli_session_extras *mon_session=_bcmcli_session_data(session);
+    return mon_session->stop_monitor;
+}
+
+
+/** Get parameter number given its name.
+ * The function is intended for use by command handlers
+ * \param[in]       session         Session handle
+ * \param[in,out]   parm_name       Parameter name
+ * \return
+ *  >=0 - parameter number\n
+ *  <0  - parameter with this name doesn't exist
+ */
+int bcmcli_parm_number(bcmcli_session *session, const char *parm_name)
+{
+    bcmcli_session_extras *mon_session=_bcmcli_session_data(session);
+    int i;
+    if (!parm_name || !mon_session || !mon_session->curcmd)
+        return BCM_ERR_PARM;
+    for(i=0;
+        mon_session->cmd_parms[i].name &&
+            _bcmcli_stricmp( parm_name, mon_session->cmd_parms[i].name, -1);
+        i++)
+        ;
+    if (!mon_session->cmd_parms[i].name)
+        return BCM_ERR_PARM;
+    return i;
+}
+
+
+/** Get parameter by name
+ * The function is intended for use by command handlers
+ * \param[in]       session         Session handle
+ * \param[in]       parm_name       Parameter name
+ * \return
+ * parameter pointer or NULL if not found
+ */
+bcmcli_cmd_parm *bcmcli_parm_get(bcmcli_session *session, const char *parm_name)
+{
+    bcmcli_session_extras *mon_session=_bcmcli_session_data(session);
+    int nparm = bcmcli_parm_number(session, parm_name);
+    if (nparm < 0)
+    {
+        return NULL;
+    }
+    return &mon_session->cmd_parms[nparm];
+}
+
+
+/** Check if parameter is set
+ * \param[in]       session         Session handle
+ * \param[in]       parm_number     Parameter number
+ * \return
+ *  1 if parameter is set\n
+ *  0 if parameter is not set or parm_number is invalid
+ */
+bcmos_errno bcmcli_parm_check(bcmcli_session *session, int parm_number)
+{
+    bcmcli_session_extras *mon_session=_bcmcli_session_data(session);
+
+    if (parm_number < 0 || !mon_session || !mon_session->curcmd)
+        return BCM_ERR_PARM;
+    if (parm_number >= mon_session->num_parms)
+        return BCM_ERR_PARM;
+    if (!(mon_session->cmd_parms[parm_number].flags & BCMCLI_PARM_FLAG_ASSIGNED))
+        return BCM_ERR_NOENT;
+    return BCM_ERR_OK;
+}
+
+
+/** Get enum's string value given its internal value
+ * \param[in]       session         Session handle
+ * \param[in]       parm_number     Parameter number
+ * \param[in]       value           Internal value
+ * \return
+ *      enum string value or NULL if parameter is not enum or
+ *      internal value is invalid
+ */
+const char *bcmcli_enum_parm_stringval(bcmcli_session *session, int parm_number, long value)
+{
+    bcmcli_session_extras *mon_session=_bcmcli_session_data(session);
+    int i;
+    bcmcli_enum_val *values;
+    if (parm_number < 0 || !mon_session || !mon_session->curcmd)
+        return NULL;
+    for(i=0; i<parm_number && mon_session->cmd_parms[i].name; i++)
+        ;
+    if (i < parm_number)
+        return NULL;
+    if (mon_session->cmd_parms[parm_number].type != BCMCLI_PARM_ENUM)
+        return NULL;
+    values = mon_session->cmd_parms[parm_number].enum_table;
+    return bcmcli_enum_stringval(values, value);
+}
+
+
+/* Get current directory handle */
+bcmcli_entry *bcmcli_dir_get(bcmcli_session *session)
+{
+    bcmcli_session_extras *mon_session=_bcmcli_session_data(session);
+    if (!mon_session)
+        return NULL;
+    return mon_session->curdir;
+}
+
+/* Set current directory */
+bcmos_errno bcmcli_dir_set(bcmcli_session *session, bcmcli_entry *dir)
+{
+    bcmcli_session_extras *mon_session=_bcmcli_session_data(session);
+    assert(mon_session);
+    if (!mon_session)
+        return BCM_ERR_PARM;
+    /* Check access rights */
+    if (!dir)
+        dir = _bcmcli_root_dir;
+    if (dir->access_right > bcmcli_session_access_right(mon_session->session))
+        return BCM_ERR_PERM;
+    mon_session->curdir = dir;
+    return 0;
+}
+
+/** Get token name
+ * \param[in]   token           Directory or command token
+ * \return      directory token name
+ */
+const char *bcmcli_token_name(bcmcli_entry *token)
+{
+    if (!token)
+        return NULL;
+    return token->name;
+}
+
+bcmcli_cmd_parm *bcmcli_find_named_parm(bcmcli_session *session, const char *name)
+{
+    bcmcli_cmd_parm * cmd_parm;
+
+    if ( !session || !name || *name=='\0')
+        return NULL;
+
+    cmd_parm = _bcmcli_find_named_parm(_bcmcli_session_data(session), name);
+    if(cmd_parm && (cmd_parm->flags & BCMCLI_PARM_FLAG_ASSIGNED))
+    {
+        return cmd_parm;
+    }
+
+    return NULL;
+}
+
+/* Return TRUE if parameter value is set */
+bcmos_bool bcmcli_parm_value_is_set(bcmcli_session *session, bcmcli_cmd_parm *parm, uint32_t value_index)
+{
+    bcmcli_session_extras *mon_session=_bcmcli_session_data(session);
+    uint32_t parm_index = parm - mon_session->cmd_parms;
+
+    if (!mon_session)
+    {
+        bcmcli_print(NULL, "MON> Session %p is invalid\n", session);
+        return BCMOS_FALSE;
+    }
+
+    parm_index = parm - mon_session->cmd_parms;
+    if (parm_index >= BCMCLI_MAX_PARMS)
+    {
+        bcmcli_print(session, "MON> Parameter %p is invalid\n", parm);
+        return BCMOS_FALSE;
+    }
+
+    if (!parm->array_size)
+        return mon_session->value_status[parm_index].value_set;
+
+    if (value_index >= parm->array_size)
+        return BCMOS_FALSE;
+
+    return mon_session->value_status[parm_index].values_set[value_index];
+}
+
+bcmcli_cmd_parm *bcmcli_find_parm_by_prefix(bcmcli_session *session, const char *prefix)
+{
+    bcmcli_cmd_parm *cmd_parm;
+
+    if (session == NULL || prefix == NULL)
+    {
+        return NULL;
+    }
+
+    cmd_parm = _bcmcli_session_data(session)->cmd_parms;
+    while (cmd_parm->name != NULL)
+    {
+        if ((_bcmcli_stricmp(prefix, cmd_parm->name, strlen(prefix)) == 0) &&
+            ((cmd_parm->flags & BCMCLI_PARM_FLAG_ASSIGNED) != 0))
+        {
+            return cmd_parm;
+        }
+        ++cmd_parm;
+    }
+
+    return NULL;
+}
+
+/** Print CLI parameter
+ * \param[in]       session         Session handle
+ * \param[in]       parm            Parameter
+ */
+void bcmcli_parm_print(bcmcli_session *session, const bcmcli_cmd_parm *parm)
+{
+    char buf[BCMCLI_MAX_PARM_VAL_LEN] = "";
+    if (parm->type != BCMCLI_PARM_BUFFER)
+    {
+        parm->format_cb(parm, parm->value, buf, sizeof(buf));
+        bcmcli_print(session, "%s\n", buf);
+    }
+    else
+    {
+        if (parm->value.buffer.len == 0)
+        {
+            bcmcli_print(session, "-\n");
+        }
+        else
+        {
+            bcmcli_print(session, "\n");
+            bcmcli_session_hexdump(session, parm->value.buffer.start, 0,
+                bcmolt_buf_get_used(&parm->value.buffer), NULL);
+        }
+    }
+}
+
+/** Enable / disable CLI command logging
+ * \param[in]   mode    Logging flags
+ * \param[in]   log     Log session. Must be set if mode != BCMCLI_CMD_LOG_NONE
+ * \return 0=OK or error <0
+ */
+bcmos_errno bcmcli_log_set(bcmcli_log_mode mode, bcmcli_session *log)
+{
+    if (mode != BCMCLI_LOG_NONE && log == NULL)
+    {
+        BCMOS_TRACE_ERR("log session must be set\n");
+        return BCM_ERR_PARM;
+    }
+    if (mode == BCMCLI_LOG_NONE)
+    {
+        _bcmcli_log_session = NULL;
+    }
+    else
+    {
+        _bcmcli_log_session = log;
+    }
+    _bcmcli_log_mode = mode;
+    return BCM_ERR_OK;
+}
+
+/** Write string to CLI log.
+ * The function is ignored if CLI logging is not enabled using bcmcli_log_set()
+ * \param[in]   format  printf-like format followed by arguments
+ */
+void bcmcli_log(const char *format, ...)
+{
+    va_list ap;
+    if (!_bcmcli_log_session)
+        return;
+    va_start(ap, format);
+    bcmcli_session_vprint(_bcmcli_log_session, format, ap);
+    va_end(ap);
+}
+
+/*********************************************************/
+/* Internal functions                                    */
+/*********************************************************/
+
+static void _bcmcli_log_cmd(const char *cmd)
+{
+    switch (_bcmcli_log_mode)
+    {
+    case BCMCLI_LOG_CLI:
+        bcmcli_log("%s\n", cmd);
+        break;
+    case BCMCLI_LOG_C_COMMENT:
+        bcmcli_log("/* %s */\n", cmd);
+        break;
+    default:
+        break;
+    }
+}
+
+static void _bcmcli_log_rc(bcmos_errno rc)
+{
+    switch (_bcmcli_log_mode)
+    {
+    case BCMCLI_LOG_CLI:
+        bcmcli_log("# CLI command completed: %s (%d)\n", bcmos_strerror(rc), rc);
+        break;
+    case BCMCLI_LOG_C_COMMENT:
+        bcmcli_log("/* CLI command completed: %s (%d) */\n", bcmos_strerror(rc), rc);
+        break;
+    default:
+        break;
+    }
+
+}
+
+static bcmcli_session *_bcmcli_help_session_open(bcmcli_session *main_session)
+{
+    bcmolt_string *help_scratch;
+    bcmcli_session *help_session;
+    bcmos_errno err;
+
+    bcmolt_string_create(&help_scratch, BCMCLI_HELP_BUFFER_SIZE);
+    err = bcmcli_session_open_string(&help_session, help_scratch);
+    if (err)
+    {
+        bcmcli_session_print(main_session, "CLI: can't create help session. Error %s\n", bcmos_strerror(err));
+        return NULL;
+    }
+
+    return help_session;
+}
+
+static void _bcmcli_help_session_print_and_close(bcmcli_session *main_session, bcmcli_session *help_session)
+{
+    bcmolt_string *str = bcmcli_session_user_priv(help_session);
+
+    bcmcli_session_print(main_session, "%s", bcmolt_string_get(str));
+    bcmcli_session_close(help_session);
+    bcmolt_string_destroy(str);
+}
+
+#ifdef CONFIG_LINENOISE
+static bcmos_errno _bcmcli_line_edit_cmd(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    if (n_parms > 0)
+    {
+        if ((parm[0].flags & BCMCLI_PARM_FLAG_ASSIGNED))
+            linenoiseSetDumbTerminal(session->ln_session, ! parm[0].value.number);
+        if ((parm[1].flags & BCMCLI_PARM_FLAG_ASSIGNED))
+            linenoiseSetMultiLine(session->ln_session, parm[1].value.number);
+    }
+    else
+    {
+        int dumb = linenoiseGetDumbTerminal(session->ln_session);
+        int multiline = linenoiseGetMultiLine(session->ln_session);
+        bcmcli_session_print(session, "Line editing: %s  Multiline: %s\n",
+            dumb ? "off" : "on", multiline ? "on" : "off");
+    }
+    return BCM_ERR_OK;
+}
+#endif
+
+/* Allocate root directory and default session */
+static void _bcmcli_alloc_root(const bcmcli_session_parm *first_session_parm)
+{
+    bcmcli_session_parm session_parms;
+    bcmcli_session *session;
+    int rc;
+
+    /* The very first call. Allocate root structure */
+    if ((_bcmcli_root_dir=(bcmcli_entry *)bcmos_calloc(sizeof(bcmcli_entry) + strlen(BCMCLI_ROOT_HELP) + 2 )) == NULL)
+        return;
+    _bcmcli_root_dir->name = (char *)(_bcmcli_root_dir + 1);
+    _bcmcli_root_dir->help = (char *)(_bcmcli_root_dir->name + 1);
+    strcpy(_bcmcli_root_dir->help, BCMCLI_ROOT_HELP);
+    _bcmcli_root_dir->sel = BCMCLI_ENTRY_DIR;
+    _bcmcli_root_dir->access_right = BCMCLI_ACCESS_GUEST;
+
+    memset(&session_parms, 0, sizeof(session_parms));
+    session_parms.access_right = BCMCLI_ACCESS_ADMIN;
+    session_parms.extra_size = sizeof(bcmcli_session_extras);
+    session_parms.name = "monroot";
+    if (first_session_parm)
+    {
+        session_parms.line_edit_mode = first_session_parm->line_edit_mode;
+    }
+    rc = bcmcli_session_open(&session_parms, &session);
+    if (rc)
+    {
+        bcmos_free(_bcmcli_root_dir);
+        _bcmcli_root_dir = NULL;
+        _bcmcli_root_session = NULL;
+        return;
+    }
+    _bcmcli_root_session = _bcmcli_session_data(session);
+    _bcmcli_root_session->session = session;
+    _bcmcli_root_session->curdir = _bcmcli_root_dir;
+
+    /* Add command to disable/enable line editing */
+#ifdef CONFIG_LINENOISE
+    if (session_parms.line_edit_mode != BCMCLI_LINE_EDIT_DISABLE)
+    {
+        BCMCLI_MAKE_CMD(NULL, "~", "Enable/disable/query line editing", _bcmcli_line_edit_cmd,
+            BCMCLI_MAKE_PARM_ENUM("enable", "Enable line editing", bcmcli_enum_bool_table, BCMCLI_PARM_FLAG_OPTIONAL),
+            BCMCLI_MAKE_PARM_ENUM("multiline", "Enable multiline mode", bcmcli_enum_bool_table,
+                BCMCLI_PARM_FLAG_OPTIONAL));
+    }
+#endif
+}
+
+/* Display directory */
+static void _bcmcli_display_dir(bcmcli_session_extras *mon_session, bcmcli_entry *p_dir)
+{
+    bcmcli_session *session = mon_session->session;
+    bcmcli_entry *p_token;
+    bcmcli_entry *prev=NULL;
+    bcmcli_session *help_session = _bcmcli_help_session_open(session);
+
+    if (!help_session)
+        return;
+
+    bcmcli_session_print(help_session, "%s%s> ", (p_dir==_bcmcli_root_dir)?"":".../", p_dir->name );
+    p_token = p_dir->u.dir.first;
+    while ( p_token )
+    {
+        if (p_token->access_right <= bcmcli_session_access_right(session))
+        {
+            if (prev)
+                bcmcli_session_print(help_session, ", ");
+            bcmcli_session_print(help_session, "%s", p_token->name );
+            if (p_token->sel == BCMCLI_ENTRY_DIR )
+                bcmcli_session_print(help_session, "/");
+            prev = p_token;
+        }
+        p_token = p_token->next;
+    }
+    bcmcli_session_print(help_session, "\n");
+    _bcmcli_help_session_print_and_close(session, help_session);
+}
+
+
+/* Is character that can be used in a single token ? */
+static inline int _bcmcli_is_special_char(char c)
+{
+    if (!c)
+        return 0;
+    return (c == BCMCLI_HELP_CHAR || c == BCMCLI_COMMENT_CHAR || c == BCMCLI_EQUAL_CHAR);
+}
+
+/* Make a preliminary analizis of <name> token.
+ *   Returns a token type (Empty, Up, Root, Break, Name)
+ */
+static bcmcli_token_type _bcmcli_analyze_token( const char *name )
+{
+    if (!name[0] || name[0]==';')
+        return BCMCLI_TOKEN_EMPTY;
+
+    if (*name == BCMCLI_COMMENT_CHAR)
+        return BCMCLI_TOKEN_BREAK;
+
+    if (!strcmp(name, BCMCLI_UP_STR))
+        return BCMCLI_TOKEN_UP;
+
+    if (!strcmp(name, BCMCLI_ROOT_STR))
+        return BCMCLI_TOKEN_ROOT;
+
+    if (*name == BCMCLI_HELP_CHAR)
+        return BCMCLI_TOKEN_HELP;
+
+    return BCMCLI_TOKEN_VALUE;
+
+}
+
+
+/* isspace wrapper */
+static inline int _bcmcli_isspace(char c)
+{
+    return isspace((int)c);
+}
+
+/* Cut the first word from <p_inbuf>.
+ * - Return pointer to start of the word in p_word
+ * - 0 terminator is inserted in the end of the word
+ * - session->p_inbuf is updated to point after the word
+ * Returns token type
+ */
+static bcmcli_token_type _bcmcli_get_word(bcmcli_session_extras *mon_session, char **buf, char **p_word)
+{
+    bcmcli_token_type token_type;
+    char *p_inbuf = *buf;
+    char next_char = 0;
+    bcmos_bool quoted_string = BCMOS_FALSE;
+
+    /* Skip leading blanks */
+    while (*p_inbuf && (_bcmcli_isspace(*p_inbuf) || (*p_inbuf==',')))
+        ++p_inbuf;
+
+    *buf = p_inbuf;
+    if (! *p_inbuf)
+        return BCMCLI_TOKEN_EMPTY;
+    if (*p_inbuf == ';')
+    {
+        *p_inbuf = 0;
+        *buf = ++p_inbuf;
+        return BCMCLI_TOKEN_EMPTY;
+    }
+
+    /* Quoted string ? */
+    if (*p_inbuf == '"')
+    {
+        quoted_string = BCMOS_TRUE;
+        *p_word = ++p_inbuf;
+        while ( *p_inbuf && *p_inbuf!='"' )
+            ++p_inbuf;
+        if (*p_inbuf != '"')
+        {
+            bcmcli_session_print(mon_session->session, "MON: unterminated string %s\n", *p_word);
+            return BCMCLI_TOKEN_EMPTY;
+        }
+        if (*p_inbuf)
+            *(p_inbuf++) = 0;
+    }
+    else
+    {
+        *p_word = p_inbuf;
+        if (!_bcmcli_is_special_char(*p_inbuf))
+        {
+            do ++p_inbuf;
+            while (*p_inbuf && !_bcmcli_isspace(*p_inbuf) && *p_inbuf!=';' && !_bcmcli_is_special_char(*p_inbuf));
+            /* Skip trailing spaces */
+            while (*p_inbuf && _bcmcli_isspace(*p_inbuf))
+                *(p_inbuf++) = 0;
+            next_char = *p_inbuf;
+            if (next_char == BCMCLI_EQUAL_CHAR)
+                *(p_inbuf++) = 0;
+        }
+        else
+        {
+            ++p_inbuf;
+        }
+    }
+    *buf = p_inbuf;
+    token_type   = _bcmcli_analyze_token( *p_word );
+    if (token_type == BCMCLI_TOKEN_VALUE && next_char == BCMCLI_EQUAL_CHAR)
+        token_type = BCMCLI_TOKEN_NAME;
+    if ((token_type == BCMCLI_TOKEN_EMPTY) && quoted_string)
+        token_type = BCMCLI_TOKEN_VALUE;
+    return token_type;
+}
+
+/* Split string to [name=]value pairs */
+static bcmos_errno _bcmcli_split(bcmcli_session_extras *mon_session, bcmcli_name_value **p_pairs, int *p_npairs)
+{
+    bcmcli_name_value *pairs;
+    char *tmp_buf, *tmp_buf_org;
+    char *word;
+    bcmcli_token_type token_type, prev_type=BCMCLI_TOKEN_EMPTY;
+    int n = 0;
+
+    /* Make a copy of input buffer */
+    tmp_buf_org = tmp_buf = bcmos_alloc(strlen(mon_session->p_inbuf) + 1);
+    if (!tmp_buf)
+        return BCM_ERR_NOMEM;
+    strcpy(tmp_buf, mon_session->p_inbuf);
+
+    /* Calculate number of pairs first */
+    token_type = _bcmcli_get_word(mon_session, &tmp_buf, &word);
+    while (token_type != BCMCLI_TOKEN_EMPTY && token_type != BCMCLI_TOKEN_BREAK)
+    {
+        /* Skip =value */
+        if (!(prev_type == BCMCLI_TOKEN_NAME && token_type == BCMCLI_TOKEN_VALUE))
+            ++n;
+        prev_type = token_type;
+        token_type = _bcmcli_get_word(mon_session, &tmp_buf, &word);
+    }
+    bcmos_free(tmp_buf_org);
+    *p_npairs = n;
+    if (!n)
+    {
+        *p_pairs = NULL;
+        /* Cut input string in order to prevent infinite loop in the parser if the string
+         * is not empty (e.g., contains spaces) */
+        *mon_session->p_inbuf = 0;
+        if (token_type == BCMCLI_TOKEN_BREAK)
+        {
+            return BCM_ERR_NOENT;
+        }
+        return 0;
+    }
+
+    *p_pairs = pairs = bcmos_calloc(n * sizeof(bcmcli_name_value));
+    if (! pairs)
+        return BCM_ERR_NOMEM;
+
+    /* Now scan the original string and set names and values */
+    token_type = _bcmcli_get_word(mon_session, &mon_session->p_inbuf, &word);
+    prev_type=BCMCLI_TOKEN_EMPTY;
+    --pairs; /* it is going to be pre-incremented */
+    while (token_type != BCMCLI_TOKEN_EMPTY && token_type != BCMCLI_TOKEN_BREAK)
+    {
+        if (!(prev_type == BCMCLI_TOKEN_NAME && token_type == BCMCLI_TOKEN_VALUE))
+            ++pairs;
+        pairs->type = token_type;
+        if (token_type == BCMCLI_TOKEN_NAME)
+        {
+            pairs->name = word;
+        }
+        else
+        {
+            pairs->value = word;
+        }
+        prev_type = token_type;
+        token_type = _bcmcli_get_word(mon_session, &mon_session->p_inbuf, &word);
+    }
+    return 0;
+}
+
+/* Find parameter by name */
+static bcmcli_cmd_parm *_bcmcli_find_named_parm(bcmcli_session_extras *mon_session, const char *name)
+{
+    bcmcli_cmd_parm *cmd_parm = mon_session->cmd_parms;
+
+    while (cmd_parm->name)
+    {
+        if (!_bcmcli_stricmp(name, cmd_parm->name, -1))
+            break;
+        ++cmd_parm;
+    }
+
+    if (!cmd_parm->name)
+        return NULL;
+
+    return cmd_parm;
+}
+
+/* Extend session parameter table based on selector value */
+static bcmos_errno _bcmcli_extend_parm_table(bcmcli_session_extras *mon_session,
+    bcmcli_cmd_parm *selector, const char *value)
+{
+    bcmcli_enum_val *values=selector->enum_table;
+    bcmcli_cmd_parm *parms;
+    bcmcli_cmd_parm *session_parm;
+    int nsel = selector - mon_session->cmd_parms;
+    bcmcli_parm_value_status *val_status;
+    int nparms;
+
+    while (values->name)
+    {
+        if (!_bcmcli_stricmp(values->name, value, -1))
+            break;
+        ++values;
+    }
+    if (!values->name)
+        return BCM_ERR_INTERNAL;
+
+    /* Calculate number of parameters in selected table */
+    parms = values->parms;
+    while (parms && parms->name)
+    {
+        ++parms;
+    }
+    nparms = parms - values->parms;
+
+    if (mon_session->num_parms + nparms >= BCMCLI_MAX_PARMS)
+    {
+        bcmcli_session_print(mon_session->session, "MON: %s> Can's process selector %s. Too many parameters\n",
+            mon_session->curcmd->name, selector->name);
+        return BCM_ERR_OVERFLOW;
+    }
+
+    /* Shift session parameters making room for the new table */
+    if (selector != &mon_session->cmd_parms[mon_session->num_parms-1])
+    {
+        memmove(selector + nparms + 1, selector + 1,
+            (&mon_session->cmd_parms[mon_session->num_parms-1] - selector) * sizeof(bcmcli_cmd_parm));
+        memmove(&mon_session->value_status[nsel + nparms + 1], &mon_session->value_status[nsel + 1],
+            (mon_session->num_parms - nsel) * sizeof(bcmcli_parm_value_status));
+    }
+
+    /* Finally insert selector's table */
+    parms = values->parms;
+    session_parm = selector+1;
+    val_status = &mon_session->value_status[nsel + 1];
+    while (parms && parms->name)
+    {
+        *session_parm = *parms;
+        _bcmcli_assign_callbacks(session_parm);
+
+        if (parms->max_array_size)
+        {
+            val_status->values_set = bcmos_calloc(sizeof(bcmos_bool) * parms->max_array_size);
+            if (!val_status->values_set)
+            {
+                bcmcli_session_print(mon_session->session, "MON: > Couldn't allocate value status array for %s\n",
+                    parms->name);
+                return BCM_ERR_NOMEM;
+            }
+        }
+        else
+        {
+            val_status->value_set = BCMOS_FALSE;
+        }
+
+
+        ++parms;
+        ++session_parm;
+        ++val_status;
+    }
+    mon_session->num_parms += nparms;
+
+    return BCM_ERR_OK;
+}
+
+/* Parse a single parameter value (scalar value or array element) */
+static bcmos_errno _bcmcli_parse_1value(bcmcli_session_extras *mon_session, bcmcli_entry *cmd,
+    bcmcli_cmd_parm *parm, bcmcli_parm_value *value, const char *string_value,
+    int val_len, bcmos_bool suppress_err_print)
+{
+    bcmos_errno rc;
+
+    if (val_len >= 0)
+    {
+        /* We are dealing with array element. string_value is comma rather than
+         * 0-terminated. Copy it aside.
+         */
+        char val_copy[val_len + 1];
+        strncpy(val_copy, string_value, val_len);
+        val_copy[val_len] = 0;
+        rc = parm->scan_cb(parm, value, val_copy);
+    }
+    else
+    {
+        rc = parm->scan_cb(parm, value, string_value);
+    }
+    if (rc)
+    {
+        if (!suppress_err_print)
+        {
+            bcmcli_session_print(mon_session->session, "MON: %s> <%s>: value %s is invalid\n",
+                cmd->name, parm->name, string_value);
+        }
+    }
+    return rc;
+}
+
+
+/* Parse parameter value, including array value (comma-delimited list of element values) */
+static bcmos_errno _bcmcli_parse_value(bcmcli_session_extras *mon_session, bcmcli_entry *cmd,
+    bcmcli_cmd_parm *parm, const char *string_value, bcmos_bool suppress_err_print)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    uint32_t parm_index = parm - mon_session->cmd_parms;
+
+    BUG_ON(parm_index >= BCMCLI_MAX_PARMS);
+
+    if (parm->max_array_size)
+    {
+        uint32_t i = 0;
+
+        /* Empty array? */
+        if (_bcmcli_stricmp(string_value, BCMCLI_ARRAY_EMPTY, -1))
+        {
+            /* array element values are comma-delimited */
+            for (i = 0; i < parm->max_array_size && string_value && *string_value && !rc; i++)
+            {
+                const char *pcomma;
+                int val_len;
+
+                pcomma = strchr(string_value, BCMCLI_ARRAY_DELIM_CHAR);
+                if (pcomma)
+                {
+                    val_len = pcomma - string_value;
+                }
+                else
+                {
+                    val_len = -1; /* to the end of string */
+                }
+                /* No value ? */
+                if (_bcmcli_stricmp(string_value, BCMCLI_PARM_NO_VALUE, val_len))
+                {
+                    rc = _bcmcli_parse_1value(mon_session, cmd,
+                        parm, &parm->values[i], string_value, val_len, suppress_err_print);
+                    mon_session->value_status[parm_index].values_set[i] = (rc == BCM_ERR_OK);
+                }
+                string_value = pcomma ? pcomma + 1 : NULL;
+            }
+            /* If all parsed values were ok, but we have more values than array size - it is an error */
+            if (string_value && *string_value && !rc)
+            {
+                rc = BCM_ERR_TOO_MANY;
+                if (!suppress_err_print)
+                {
+                    bcmcli_session_print(mon_session->session, "MON: %s> <%s>: too many values. %s is invalid\n",
+                        cmd->name, parm->name, string_value);
+                }
+            }
+        }
+
+        parm->array_size = i;
+    }
+    else
+    {
+        if (_bcmcli_stricmp(string_value, BCMCLI_PARM_NO_VALUE, strlen(string_value)))
+        {
+            rc = _bcmcli_parse_1value(mon_session, cmd,
+                parm, &parm->value, string_value, -1, suppress_err_print);
+            mon_session->value_status[parm_index].value_set = (rc == BCM_ERR_OK);
+        }
+    }
+
+    return rc;
+}
+
+/* Release value status arrays */
+static void _bcmcli_free_session_value_status(bcmcli_session_extras *mon_session)
+{
+    bcmcli_cmd_parm *parms=mon_session->cmd_parms;
+    int i;
+
+    for (i = 0; i < BCMCLI_MAX_PARMS; i++)
+    {
+        if (parms[i].max_array_size)
+        {
+            if (mon_session->value_status[i].values_set != NULL)
+            {
+                bcmos_free(mon_session->value_status[i].values_set);
+                mon_session->value_status[i].values_set = NULL;
+            }
+        }
+        else
+        {
+            mon_session->value_status[i].value_set = BCMOS_FALSE;
+        }
+    }
+}
+
+/* Populate session parameters. Apply selectors */
+static bcmos_errno _bcmcli_populate_parms(bcmcli_session_extras *mon_session, bcmcli_entry *cmd,
+    bcmcli_name_value *pairs, int npairs, bcmos_bool suppress_err_print, int *last)
+{
+    const char *parm_value;
+    int positional=1;
+    bcmcli_cmd_parm *parms=mon_session->cmd_parms;
+    bcmcli_cmd_parm *cur_parm;
+    int rc;
+    int i;
+
+    /* Mark all parameters as don't having an explicit value */
+    memset(&parms[0], 0, sizeof(mon_session->cmd_parms));
+    memcpy(&parms[0], cmd->u.cmd.parms, sizeof(bcmcli_cmd_parm)*cmd->u.cmd.num_parms);
+    /* Clear array buffers */
+    for (i = 0; i < cmd->u.cmd.num_parms; i++)
+    {
+        if (parms[i].max_array_size)
+        {
+            BUG_ON(!parms[i].values);
+            memset(parms[i].values, 0, sizeof(bcmcli_parm_value) * parms[i].max_array_size);
+            mon_session->value_status[i].values_set = bcmos_calloc(sizeof(bcmos_bool) * parms[i].max_array_size);
+            if (!mon_session->value_status[i].values_set)
+            {
+                bcmcli_session_print(mon_session->session, "MON: %s> Couldn't allocate value status array for %s\n",
+                    cmd->name, pairs[i].name);
+                return BCM_ERR_NOMEM;
+            }
+        }
+        else
+        {
+            mon_session->value_status[i].value_set = BCMOS_FALSE;
+        }
+    }
+    mon_session->curcmd = cmd;
+    mon_session->num_parms = cmd->u.cmd.num_parms;
+    if (last)
+        *last = 0;
+    /* Build a format string */
+    for (i=0; i<npairs && pairs[i].type != BCMCLI_TOKEN_BREAK; i++)
+    {
+        parm_value = pairs[i].value;
+        if (last)
+            *last = i;
+        cur_parm = NULL;
+        /* Named parameter ? */
+        if (pairs[i].name)
+        {
+            if ( (cmd->u.cmd.extras.flags & BCMCLI_CMD_FLAG_NO_NAME_PARMS) )
+            {
+                if (!suppress_err_print)
+                {
+                    bcmcli_session_print(mon_session->session, "MON: %s> Doesn't support named parameters. %s is unexpected\n",
+                        cmd->name, pairs[i].name);
+                }
+                return BCM_ERR_PARM;
+            }
+            positional = 0; /* No more positional parameters */
+            /* Check name */
+            cur_parm = _bcmcli_find_named_parm(mon_session, pairs[i].name);
+            if (!cur_parm)
+            {
+                if (!suppress_err_print)
+                {
+                    bcmcli_session_print(mon_session->session, "MON: %s> parameter <%s> doesn't exist\n",
+                        cmd->name, pairs[i].name);
+                }
+                return BCM_ERR_PARM;
+            }
+            if (!parm_value)
+            {
+                if (!suppress_err_print)
+                {
+                    bcmcli_session_print(mon_session->session, "MON: %s> <%s>: value is missing\n",
+                        cmd->name, cur_parm->name);
+                }
+                return BCM_ERR_PARM;
+            }
+        }
+        else
+        {
+            /* it can still be named ENUM parameter (without =value). In this case the 1st
+             * enum value is assumed. Check it
+             */
+            if (parm_value && (cur_parm = _bcmcli_find_named_parm(mon_session, parm_value)) &&
+                (cur_parm->type == BCMCLI_PARM_ENUM))
+            {
+                pairs[i].name = parm_value;
+                pairs[i].value = parm_value = cur_parm->enum_table->name;
+                positional = 0; /* No more positional parameters */
+            }
+            else
+            {
+                if (!positional)
+                {
+                    if (!suppress_err_print)
+                        bcmcli_session_print(mon_session->session, "MON: %s> Expected named parameter. Got %s\n", cmd->name, parm_value);
+                    return BCM_ERR_PARM;
+                }
+                cur_parm = &parms[i];
+            }
+            if (!cur_parm->name)
+            {
+                if (!suppress_err_print)
+                    bcmcli_session_print(mon_session->session, "MON: %s> Too many parameters. %s is unexpected\n", cmd->name, parm_value);
+                return BCM_ERR_PARM;
+            }
+        }
+
+        if (cur_parm->flags & BCMCLI_PARM_FLAG_ASSIGNED)
+        {
+            if (!suppress_err_print)
+            {
+                bcmcli_session_print(mon_session->session, "MON: %s> Attempt to assign parameter %s more than once\n",
+                    cmd->name, cur_parm->name);
+            }
+            return BCM_ERR_PARM;
+        }
+
+        if (parm_value)
+        {
+            if (cur_parm->type == BCMCLI_PARM_STRING)
+                cur_parm->value.string = parm_value;
+            else
+            {
+                rc = _bcmcli_parse_value(mon_session, cmd, cur_parm, parm_value, suppress_err_print);
+                if (rc)
+                    return rc;
+
+                /* For parameter-selector extend list of parameters accordingly */
+                if (cur_parm->flags & BCMCLI_PARM_FLAG_SELECTOR)
+                {
+                    rc = _bcmcli_extend_parm_table(mon_session, cur_parm, parm_value);
+                    if (rc)
+                        return rc;
+                }
+            }
+            cur_parm->flags |= BCMCLI_PARM_FLAG_ASSIGNED;
+        }
+    }
+    return BCM_ERR_OK;
+}
+
+/* Parse p_inbuf string based on parameter descriptions in <p_token>.
+ *   Fill parameter values in <p_token>.
+ *   Returns the number of parameters filled or BCM_ERR_PARM
+ *   To Do: add a option of one-by-one user input of missing parameters.
+ */
+static int _bcmcli_parse_parms( bcmcli_session_extras *mon_session, bcmcli_entry *cmd, bcmcli_name_value *pairs, int npairs)
+{
+    bcmcli_cmd_parm *parms=mon_session->cmd_parms;
+    int rc;
+    int i;
+
+    /* Populate parameter table */
+    rc = _bcmcli_populate_parms(mon_session, cmd, pairs, npairs, BCMOS_FALSE, NULL);
+    if (rc)
+        goto err_return;
+
+
+    rc = BCM_ERR_PARM;
+
+    /* Make sure that parameters are OK. Check range, process default values */
+    for (i=0; i<mon_session->num_parms; i++)
+    {
+        bcmcli_cmd_parm *cur_parm = &parms[i];
+
+        if (!(cur_parm->flags & BCMCLI_PARM_FLAG_ASSIGNED))
+        {
+            if ((cur_parm->flags & BCMCLI_PARM_FLAG_DEFVAL))
+            {
+                cur_parm->flags |= BCMCLI_PARM_FLAG_ASSIGNED;
+            }
+            else if (!(cur_parm->flags & BCMCLI_PARM_FLAG_OPTIONAL) )
+            {
+                /* Mandatory parameter missing */
+                bcmcli_session_print(mon_session->session, "MON: %s> Mandatory parameter <%s> is missing\n", cmd->name, parms[i].name);
+                goto err_return;
+            }
+        }
+
+        /* Check value */
+        if ((cur_parm->flags & BCMCLI_PARM_FLAG_RANGE))
+        {
+            if ((cur_parm->flags & BCMCLI_PARM_FLAG_ASSIGNED))
+            {
+                if (cur_parm->array_size)
+                {
+                    uint32_t j;
+
+                    for (j = 0; j < cur_parm->array_size; j++)
+                    {
+                        if (((cur_parm->values[j].number < cur_parm->low_val) ||
+                            (cur_parm->values[j].number > cur_parm->hi_val)))
+                        {
+                            bcmcli_session_print(mon_session->session, "MON: %s> <%s>: %ld out of range (%ld, %ld)\n",
+                                cmd->name, cur_parm->name, cur_parm->values[j].number, cur_parm->low_val, cur_parm->hi_val);
+                            goto err_return;
+                        }
+                    }
+                }
+                else if (((cur_parm->value.number < cur_parm->low_val) ||
+                    (cur_parm->value.number > cur_parm->hi_val)))
+                {
+                    bcmcli_session_print(mon_session->session, "MON: %s> <%s>: %ld out of range (%ld, %ld)\n",
+                        cmd->name, cur_parm->name, cur_parm->value.number, cur_parm->low_val, cur_parm->hi_val);
+                    goto err_return;
+                }
+            }
+        }
+    }
+
+    return BCM_ERR_OK;
+
+err_return:
+    _bcmcli_free_session_value_status(mon_session);
+    return rc;
+}
+
+/* insert value skipping partial match trhat is already present */
+static void _bcmcli_insert(const char *partial_match, const char *insert_val1,
+    const char *insert_val2, char *insert_str, uint32_t insert_size)
+{
+    if (partial_match)
+        insert_val1 += strlen(partial_match);
+    bcmcli_strncpy(insert_str, insert_val1, insert_size);
+    if (insert_val2)
+        bcmcli_strncat(insert_str, insert_val2, insert_size);
+}
+
+static void _bcmcli_update_longest_match(char *longest_match, const char *name)
+{
+    uint32_t nlen = strlen(name);
+    uint32_t lmlen = strlen(longest_match);
+
+    if (nlen < lmlen)
+    {
+        lmlen = nlen;
+    }
+    while (lmlen && memcmp(longest_match, name, lmlen))
+    {
+        --lmlen;
+    }
+    longest_match[lmlen] = 0;
+}
+
+
+/* extend value.
+ * If !enum - do nothing
+ * If more than 1 matching value - display them
+ * If no matching value - do nothing
+ * If 1 matching value - insert
+ */
+static void _bcmcli_extend_value(bcmcli_session_extras *mon_session, bcmcli_cmd_parm *parm,
+    const char *partial_value, char *insert_str, uint32_t insert_size)
+{
+    int nmatch = 0;
+    bcmcli_enum_val *vals = parm->enum_table;
+    char longest_match[BCMCLI_MAX_SEARCH_SUBSTR_LENGTH]="";
+
+    if ((parm->type != BCMCLI_PARM_ENUM && parm->type != BCMCLI_PARM_ENUM_MASK) || !vals)
+        return;
+
+    /* If enum mask, partial value can be a sum of values. Skip past the last '+' sign */
+    if (parm->type == BCMCLI_PARM_ENUM_MASK && partial_value)
+    {
+        char *pdel = strrchr(partial_value, BCMCLI_ENUM_MASK_DEL_CHAR);
+        if (pdel)
+            partial_value = pdel + 1;
+    }
+
+    while (vals->name)
+    {
+        if (!partial_value || !strncmp(vals->name, partial_value, strlen(partial_value)))
+        {
+            if (!nmatch)
+            {
+                bcmcli_strncpy(longest_match, vals->name, sizeof(longest_match));
+            }
+            else
+            {
+                _bcmcli_update_longest_match(longest_match, vals->name);
+            }
+            ++nmatch;
+        }
+        ++vals;
+    }
+    if (!nmatch)
+        return;
+    if (nmatch == 1)
+    {
+        _bcmcli_insert(partial_value, longest_match, " ", insert_str, insert_size);
+        return;
+    }
+    /* display all matching values */
+    _bcmcli_insert(partial_value, longest_match, "", insert_str, insert_size);
+    bcmcli_session_print(mon_session->session, "\n");
+    vals = parm->enum_table;
+    while (vals->name)
+    {
+        if (!partial_value || !strncmp(vals->name, partial_value, strlen(partial_value)))
+            bcmcli_session_print(mon_session->session, " %s", vals->name);
+        ++vals;
+    }
+    bcmcli_session_print(mon_session->session, "\n");
+}
+
+/* calculate number of matching parameter names */
+static int _bcmcli_num_matching_names(bcmcli_session_extras *mon_session, const char *partial_value, int *first_match)
+{
+    int i;
+    int nmatch = 0;
+
+    *first_match = -1;
+    for (i = 0; i < mon_session->num_parms; i++)
+    {
+        uint32_t flags = mon_session->cmd_parms[i].flags;
+        if ((flags & BCMCLI_PARM_FLAG_ASSIGNED))
+            continue;
+        if (partial_value && strncmp(mon_session->cmd_parms[i].name, partial_value, strlen(partial_value)))
+            continue;
+        if (*first_match == -1)
+            *first_match = i;
+        ++nmatch;
+    }
+    return nmatch;
+}
+
+/* calculate longest matching string.
+ * returns number of matching parameters
+ */
+static int _bcmcli_longest_match(bcmcli_session_extras *mon_session, const char *partial_value,
+    char *longest_match, uint32_t longest_match_size, int *first_match)
+{
+    int nmatch0 = _bcmcli_num_matching_names(mon_session, partial_value, first_match);
+    int nmatch;
+    const char *match_name;
+
+    if (!nmatch0)
+        return nmatch0;
+    match_name = mon_session->cmd_parms[*first_match].name;
+    if (nmatch0 == 1)
+    {
+        bcmcli_strncpy(longest_match, match_name, longest_match_size);
+        return nmatch0;
+    }
+    bcmcli_strncpy(longest_match, match_name, longest_match_size);
+    nmatch = _bcmcli_num_matching_names(mon_session, longest_match, first_match);
+    while (nmatch != nmatch0)
+    {
+        longest_match[strlen(longest_match)-1] = 0;
+        nmatch = _bcmcli_num_matching_names(mon_session, longest_match, first_match);
+    }
+    return nmatch0;
+}
+
+/* display/insert unset matching names
+ * If more than 1 matching value - display them
+ * If no matching value - do nothing
+ * If 1 matching value - insert
+ */
+static void _bcmcli_extend_name(bcmcli_session_extras *mon_session, const char *partial_value,
+    char *insert_str, uint32_t insert_size)
+{
+    char longest_match[BCMCLI_MAX_SEARCH_SUBSTR_LENGTH]="";
+    int first_match;
+    int nmatch = _bcmcli_longest_match(mon_session, partial_value, longest_match,
+        sizeof(longest_match), &first_match);
+
+    if (!nmatch)
+        return;
+    if (!partial_value || strcmp(partial_value, longest_match))
+        _bcmcli_insert(partial_value, longest_match, (nmatch == 1) ? "=" : "", insert_str, insert_size);
+    else
+        _bcmcli_help_populated_cmd(mon_session, mon_session->curcmd, partial_value, BCMOS_TRUE);
+}
+
+static int _bcmcli_extend_parms( bcmcli_session_extras *mon_session, bcmcli_name_value *pairs,
+    int npairs, bcmos_bool last_is_space, char *insert_str, uint32_t insert_size)
+{
+    bcmos_errno rc;
+    int last = 0;
+    bcmcli_cmd_parm *help_parm = NULL;
+    int i;
+
+    rc = _bcmcli_populate_parms(mon_session, mon_session->curcmd, pairs, npairs, BCMOS_TRUE, &last);
+    if (!rc)
+    {
+        /* So far so good */
+        /* If there is unset mandatory parameter - insert its name.
+         * Otherwise, display list of unset parameters
+         */
+        /* Find mandatory parameter that is still unassigned */
+        for (i = 0; i < mon_session->num_parms; i++)
+        {
+            uint32_t flags = mon_session->cmd_parms[i].flags;
+            if (!(flags & (BCMCLI_PARM_FLAG_OPTIONAL | BCMCLI_PARM_FLAG_DEFVAL | BCMCLI_PARM_FLAG_ASSIGNED)))
+            {
+                help_parm = &mon_session->cmd_parms[i];
+                break;
+            }
+        }
+        if (help_parm)
+        {
+            if (!last_is_space)
+                bcmcli_strncpy(insert_str, " ", insert_size);
+            bcmcli_strncat(insert_str, help_parm->name, insert_size);
+            bcmcli_strncat(insert_str, "=", insert_size);
+        }
+        else if (last < mon_session->num_parms)
+            _bcmcli_help_populated_cmd(mon_session, mon_session->curcmd, NULL, BCMOS_TRUE);
+    }
+    else
+    {
+        /* Parsing failed. See what stopped at */
+        if (last < mon_session->num_parms)
+        {
+            bcmcli_name_value *last_pair;
+
+            last_pair = &pairs[last];
+            if (last_pair->name)
+            {
+                /* Try to identify by name */
+                help_parm = _bcmcli_find_named_parm(mon_session, last_pair->name ? last_pair->name : last_pair->value);
+            }
+            if (help_parm)
+            {
+                /* Looking for values */
+                _bcmcli_extend_value(mon_session, help_parm, last_pair->value, insert_str, insert_size);
+            }
+            else
+            {
+                /* Looking for partial name */
+                _bcmcli_extend_name(mon_session, last_pair->name ? last_pair->name : last_pair->value,
+                    insert_str, insert_size);
+            }
+        }
+    }
+    _bcmcli_free_session_value_status(mon_session);
+
+    return BCM_ERR_OK;
+}
+
+/* Identify token in the given directory */
+static bcmcli_entry *_bcmcli_search_token1( bcmcli_entry *p_dir, const char **p_name, int name_len )
+{
+    bcmcli_entry *p_token = NULL;
+    const char *name = *p_name;
+    bcmcli_token_type type=_bcmcli_analyze_token(name);
+
+    /* Name can be qualified */
+    if (type == BCMCLI_TOKEN_VALUE && !strncmp(name, BCMCLI_UP_STR, name_len))
+        type = BCMCLI_TOKEN_UP;
+
+    switch(type)
+    {
+        case BCMCLI_TOKEN_ROOT:
+            p_token = _bcmcli_root_dir;
+            *p_name = name + strlen(BCMCLI_ROOT_STR);
+            break;
+        case BCMCLI_TOKEN_UP:
+            if (p_dir->parent)
+                p_token = p_dir->parent;
+            else
+                p_token = p_dir;
+            *p_name = name + strlen(BCMCLI_UP_STR) + 1;
+            break;
+        case BCMCLI_TOKEN_NAME:
+        case BCMCLI_TOKEN_VALUE:
+            /* Check alias */
+            p_token = p_dir->u.dir.first;
+            while ( p_token )
+            {
+                if (p_token->alias &&
+                        (name_len == p_token->alias_len) &&
+                        !_bcmcli_stricmp(p_token->alias, name, p_token->alias_len))
+                    break;
+                p_token = p_token->next;
+            }
+            if (!p_token)
+            {
+                bcmcli_entry *partial_match = NULL;
+                /* Check name */
+                p_token = p_dir->u.dir.first;
+                while( p_token )
+                {
+                    if (!_bcmcli_stricmp(p_token->name, name, name_len))
+                    {
+                        if (name_len == strlen(p_token->name))
+                            break;
+                        if (!partial_match)
+                            partial_match = p_token;
+                    }
+                    p_token = p_token->next;
+                }
+                if (!p_token)
+                    p_token = partial_match;
+            }
+            *p_name = name + name_len + 1;
+            break;
+        default:
+            break;
+    }
+
+    return p_token;
+}
+
+
+/* Search a token by name in the current directory.
+ * The name can be qualified (contain path)
+ */
+static bcmcli_entry *_bcmcli_search_token( bcmcli_entry *p_dir, const char *name )
+{
+    bcmcli_entry *p_token;
+    const char *name0 = name;
+    const char *p_slash;
+
+    if (!name[0])
+        return p_dir;
+
+    /* Check if name is qualified */
+    do
+    {
+        p_slash = strchr(name, '/');
+        if (p_slash)
+        {
+            if (p_slash == name0)
+            {
+                p_dir = p_token = _bcmcli_root_dir;
+                name = p_slash + 1;
+            }
+            else
+            {
+                p_token = _bcmcli_search_token1(p_dir, &name, p_slash - name);
+                if (p_token && (p_token->sel == BCMCLI_ENTRY_DIR))
+                    p_dir = p_token;
+            }
+        }
+        else
+        {
+            p_token = _bcmcli_search_token1(p_dir, &name, strlen(name));
+        }
+    } while (p_slash && p_token && *name);
+
+    return p_token;
+}
+
+
+
+/* Display help for each entry in the current directory */
+static void  _bcmcli_help_dir(bcmcli_session_extras *mon_session, bcmcli_entry *p_dir)
+{
+    bcmcli_session *help_session = _bcmcli_help_session_open(mon_session->session);
+    bcmcli_entry *p_token;
+    char buffer[BCMCLI_MAX_QUAL_NAME_LENGTH];
+
+    _bcmcli_qualified_name(p_dir, buffer, sizeof(buffer));
+    bcmcli_session_print(help_session, "Directory %s/ - %s\n", buffer, p_dir->help);
+    bcmcli_session_print(help_session, "Commands:\n");
+
+    p_token = p_dir->u.dir.first;
+    while ( p_token )
+    {
+        if (bcmcli_session_access_right(help_session) >= p_token->access_right)
+        {
+            if (p_token->sel == BCMCLI_ENTRY_DIR)
+                bcmcli_session_print(help_session, "\t%s/:  %s directory\n", p_token->name, p_token->help );
+            else
+            {
+                char *peol = strchr(p_token->help, '\n');
+                int help_len = peol ? peol - p_token->help : (int)strlen(p_token->help);
+                bcmcli_session_print(help_session, "\t%s(%d parms): %.*s\n",
+                            p_token->name, p_token->u.cmd.num_parms, help_len, p_token->help );
+            }
+        }
+        p_token = p_token->next;
+    }
+    bcmcli_session_print(help_session, "Type ? <name> for command help, \"/\"-root, \"..\"-upper\n" );
+    _bcmcli_help_session_print_and_close(mon_session->session, help_session);
+}
+
+
+/* Display help a token */
+static void _bcmcli_help_populated_cmd(bcmcli_session_extras *mon_session, bcmcli_entry *p_token,
+    const char *partial_match, bcmos_bool suppress_assigned)
+{
+    char tmp[80];
+    char bra, ket;
+    uint16_t i;
+
+    if (suppress_assigned)
+        bcmcli_session_print(mon_session->session, "\n");
+    for ( i=0; i<mon_session->num_parms; i++ )
+    {
+        bcmcli_cmd_parm *cur_parm = &mon_session->cmd_parms[i];
+        if (suppress_assigned && (cur_parm->flags & BCMCLI_PARM_FLAG_ASSIGNED))
+            continue;
+        if (partial_match && memcmp(partial_match, cur_parm->name, strlen(partial_match)))
+            continue;
+
+        if ((cur_parm->flags & BCMCLI_PARM_FLAG_OPTIONAL))
+        {
+            bra = '[';
+            ket=']';
+        }
+        else
+        {
+            bra = '<';
+            ket='>';
+        }
+        bcmcli_session_print(mon_session->session, "\t%c%s(%s)", bra, cur_parm->name, _bcmcli_get_type_name(cur_parm) );
+        if (cur_parm->max_array_size || cur_parm->type == BCMCLI_PARM_BUFFER)
+        {
+            uint32_t num_entries = (cur_parm->type == BCMCLI_PARM_BUFFER) ? cur_parm->value.buffer.len : cur_parm->max_array_size;
+            bcmcli_session_print(mon_session->session, "[%u]", num_entries);
+        }
+        if (cur_parm->type == BCMCLI_PARM_ENUM || cur_parm->type == BCMCLI_PARM_ENUM_MASK)
+        {
+            bcmcli_enum_val *values=cur_parm->enum_table;
+            bcmcli_session_print(mon_session->session, " {");
+            while (values->name)
+            {
+                if (values!=cur_parm->enum_table)
+                    bcmcli_session_print(mon_session->session, ", ");
+                bcmcli_session_print(mon_session->session, "%s", values->name);
+                ++values;
+            }
+            bcmcli_session_print(mon_session->session, "}");
+        }
+        if ((cur_parm->flags & BCMCLI_PARM_FLAG_DEFVAL))
+        {
+            bcmcli_session_print(mon_session->session, "=");
+            cur_parm->format_cb(cur_parm, cur_parm->value, tmp, sizeof(tmp));
+            bcmcli_session_print(mon_session->session, "%s", tmp);
+        }
+        if ((cur_parm->flags & BCMCLI_PARM_FLAG_RANGE))
+        {
+            bcmcli_parm_value low_val = { .number = cur_parm->low_val };
+            bcmcli_parm_value hi_val = { .number = cur_parm->hi_val };
+
+            bcmcli_session_print(mon_session->session, " (");
+            cur_parm->format_cb(cur_parm, low_val, tmp, sizeof(tmp));
+            bcmcli_session_print(mon_session->session, "%s..", tmp);
+            cur_parm->format_cb(cur_parm, hi_val, tmp, sizeof(tmp));
+            bcmcli_session_print(mon_session->session, "%s)", tmp);
+        }
+        bcmcli_session_print(mon_session->session, "%c ", ket);
+        bcmcli_session_print(mon_session->session, "- %s\n", cur_parm->description);
+    }
+
+    /* Print extra help if command has unresolved selector */
+    if (mon_session->num_parms &&
+        (mon_session->cmd_parms[mon_session->num_parms-1].flags & BCMCLI_PARM_FLAG_SELECTOR) &&
+        !(mon_session->cmd_parms[mon_session->num_parms-1].flags & BCMCLI_PARM_FLAG_ASSIGNED))
+    {
+        const char *sel_name = mon_session->cmd_parms[mon_session->num_parms-1].name;
+        bcmcli_session_print(mon_session->session, "Add %s=%s_value to see %s-specific parameters\n",
+            sel_name, sel_name, sel_name);
+    }
+    bcmcli_session_print(mon_session->session, "\n");
+}
+
+
+/* Display help a token */
+static void _bcmcli_help_entry(bcmcli_session_extras *mon_session, bcmcli_entry *p_token,
+    bcmcli_name_value *pairs, int npairs, bcmos_bool suppress_err_print)
+{
+    char buffer[BCMCLI_MAX_QUAL_NAME_LENGTH];
+
+    if (p_token->sel == BCMCLI_ENTRY_DIR)
+    {
+        _bcmcli_help_dir(mon_session, p_token);
+        return;
+    }
+
+    /* Populate parameter table */
+    _bcmcli_populate_parms(mon_session, p_token, pairs, npairs, suppress_err_print, NULL);
+
+    _bcmcli_qualified_name(p_token, buffer, sizeof(buffer));
+    bcmcli_session_print(mon_session->session, "%s: \t%s\n", buffer, p_token->help );
+    if (p_token->u.cmd.num_parms)
+        bcmcli_session_print(mon_session->session, "Parameters:\n");
+    _bcmcli_help_populated_cmd(mon_session, p_token, NULL, BCMOS_FALSE);
+    _bcmcli_free_session_value_status(mon_session);
+}
+
+
+/* Choose unique alias for <name> in <p_dir> */
+/* Currently only single-character aliases are supported */
+static void __bcmcli_chooseAlias(bcmcli_entry *p_dir, bcmcli_entry *p_new_token, int from)
+{
+    bcmcli_entry *p_token;
+    int         i;
+    char        c;
+
+    _bcmcli_strlwr( p_new_token->name );
+    i = from;
+    while ( p_new_token->name[i] )
+    {
+        c = p_new_token->name[i];
+        p_token = p_dir->u.dir.first;
+
+        while ( p_token )
+        {
+            if (p_token->alias &&
+                    (tolower( *p_token->alias ) == c) )
+                break;
+            if (strlen(p_token->name)<=2 && tolower(p_token->name[0])==c)
+                break;
+            p_token = p_token->next;
+        }
+        if (p_token)
+            ++i;
+        else
+        {
+            p_new_token->name[i] = toupper( c );
+            p_new_token->alias   = &p_new_token->name[i];
+            p_new_token->alias_len = 1;
+            break;
+        }
+    }
+}
+
+/* isupper wrapper */
+static inline int _bcmcli_isupper(char c)
+{
+    return isupper((int)c);
+}
+
+static void _bcmcli_choose_alias(bcmcli_entry *p_dir, bcmcli_entry *p_new_token)
+{
+    int i=0;
+    p_new_token->alias_len = 0;
+    p_new_token->alias = NULL;
+    /* Don't try to alias something short */
+    if (strlen(p_new_token->name) < BCMCLI_MIN_NAME_LENGTH_FOR_ALIAS)
+        return;
+    /* Try pre-set alias 1st */
+    while ( p_new_token->name[i] )
+    {
+        if (_bcmcli_isupper(p_new_token->name[i]))
+            break;
+        i++;
+    }
+    if (p_new_token->name[i])
+        __bcmcli_chooseAlias(p_dir, p_new_token, i);
+    if (p_new_token->alias != &p_new_token->name[i])
+        __bcmcli_chooseAlias(p_dir, p_new_token, 0);
+}
+
+
+/* Convert string s to lower case. Return pointer to s */
+static char  * _bcmcli_strlwr( char *s )
+{
+    char  *s0=s;
+
+    while ( *s )
+    {
+        *s = tolower( *s );
+        ++s;
+    }
+
+    return s0;
+}
+
+
+/* Compare strings case incensitive */
+static int _bcmcli_stricmp(const char *s1, const char *s2, int len)
+{
+    int  i;
+
+    for ( i=0; (i<len || len<0); i++ )
+    {
+        if (tolower( s1[i])  != tolower( s2[i] ))
+            return 1;
+        if (!s1[i])
+            break;
+    }
+
+    return 0;
+}
+
+static const char *_bcmcli_get_type_name(const bcmcli_cmd_parm *parm)
+{
+    bcmcli_parm_type type = parm->type;
+    static const char *type_name[] = {
+        [BCMCLI_PARM_DECIMAL]    = "decimal",
+        [BCMCLI_PARM_DECIMAL64]  = "decimal64",
+        [BCMCLI_PARM_UDECIMAL]   = "udecimal",
+        [BCMCLI_PARM_UDECIMAL64] = "udecimal64",
+        [BCMCLI_PARM_HEX]        = "hex",
+        [BCMCLI_PARM_HEX64]      = "hex64",
+        [BCMCLI_PARM_NUMBER]     = "number",
+        [BCMCLI_PARM_NUMBER64]   = "number64",
+        [BCMCLI_PARM_UNUMBER]    = "unumber",
+        [BCMCLI_PARM_UNUMBER64]  = "unumber64",
+        [BCMCLI_PARM_FLOAT]      = "float",
+        [BCMCLI_PARM_DOUBLE]     = "double",
+        [BCMCLI_PARM_ENUM]       = "enum",
+        [BCMCLI_PARM_ENUM_MASK]  = "enum_mask",
+        [BCMCLI_PARM_STRING]     = "string",
+        [BCMCLI_PARM_IP]         = "IP",
+        [BCMCLI_PARM_IPV6]       = "IPv6",
+        [BCMCLI_PARM_MAC]        = "MAC",
+        [BCMCLI_PARM_BUFFER]     = "buffer",
+        [BCMCLI_PARM_USERDEF]    = "userdef",
+    };
+    static const char *undefined = "undefined";
+    static const char *selector = "selector";
+    if (type > BCMCLI_PARM_USERDEF || !type_name[type])
+        return undefined;
+    if (type == BCMCLI_PARM_ENUM && (parm->flags & BCMCLI_PARM_FLAG_SELECTOR))
+        return selector;
+    return type_name[type];
+}
+
+/* Assign default callbacks */
+static void _bcmcli_assign_callbacks(bcmcli_cmd_parm *parm)
+{
+    if (parm->type == BCMCLI_PARM_ENUM)
+    {
+        parm->scan_cb = _bcmcli_enum_scan_cb;
+        parm->format_cb = _bcmcli_enum_format_cb;
+    }
+    else if (parm->type == BCMCLI_PARM_ENUM_MASK)
+    {
+        parm->scan_cb = _bcmcli_enum_mask_scan_cb;
+        parm->format_cb = _bcmcli_enum_mask_format_cb;
+    }
+    else if (parm->type == BCMCLI_PARM_BUFFER)
+    {
+        if (!parm->scan_cb)
+            parm->scan_cb = _bcmcli_buffer_scan_cb;
+        if (!parm->format_cb)
+            parm->format_cb = _bcmcli_dft_format_cb;
+    }
+    else
+    {
+        if (!parm->scan_cb)
+            parm->scan_cb = _bcmcli_dft_scan_cb;
+        if (!parm->format_cb)
+            parm->format_cb = _bcmcli_dft_format_cb;
+    }
+}
+
+
+/* Convert hex-string to binary data.
+ * Returns: converted length >=0 or error < 0
+ */
+static int _bcmcli_strhex(const char *src, uint8_t *dst, uint16_t dst_len)
+{
+    uint16_t src_len = (uint16_t)strlen( src );
+    uint16_t i = src_len, j, shift = 0;
+
+    if ( !dst || !dst_len || (src_len > 2*dst_len) || (src_len%2) )
+    {
+        return BCM_ERR_PARM;
+    }
+
+    /* Calculate hex buffer length and fill it up from right-to-left
+     * in order to start the process from LS nibble
+     */
+    dst_len = src_len / 2;
+    memset(dst, 0, dst_len);
+    j = dst_len-1;
+    do
+    {
+        int c = src[--i];
+
+        if ( (c>='0') && (c<='9') )
+        {
+            c = c - '0';
+        }
+        else if ( (c>='a') && (c<='f') )
+        {
+            c = 0xA + c - 'a';
+        }
+        else if ( (c>='A') && (c<='F') )
+        {
+            c = 0xA + c - 'A';
+        }
+        else
+        {
+            return BCM_ERR_PARM;
+        }
+
+        dst[j] |= (uint8_t)(c<<shift); /* shift can have 1 of 2 values: 0 and 4 */
+
+        j     -= shift>>2;              /* move to the next byte if we've just filled the ms nibble */
+        shift ^= 4;                     /* alternate nibbles */
+
+    } while ( i );
+
+    return dst_len;
+}
+
+/* Default function for string->value conversion.
+ * Returns 0 if OK
+ */
+static bcmos_errno _bcmcli_dft_scan_cb(const bcmcli_cmd_parm *parm, bcmcli_parm_value *value, const char *string_val)
+{
+    char *p_end = NULL;
+    int n;
+
+    if (parm->type == BCMCLI_PARM_UDECIMAL ||
+        parm->type == BCMCLI_PARM_UDECIMAL64 ||
+        parm->type == BCMCLI_PARM_UNUMBER ||
+        parm->type == BCMCLI_PARM_UNUMBER64)
+    {
+        /* strtoul returns OK even when parsing a negative number */
+        if (string_val[0] == '-')
+        {
+            return BCM_ERR_PARM;
+        }
+    }
+
+    switch(parm->type)
+    {
+        case BCMCLI_PARM_DECIMAL:
+            value->number = strtol(string_val, &p_end, 10);
+            break;
+        case BCMCLI_PARM_UDECIMAL:
+            value->unumber = strtoul(string_val, &p_end, 10);
+            break;
+        case BCMCLI_PARM_DECIMAL64:
+            value->number64 = strtoll(string_val, &p_end, 10);
+            break;
+        case BCMCLI_PARM_UDECIMAL64:
+            value->unumber64 = strtoull(string_val, &p_end, 10);
+            break;
+        case BCMCLI_PARM_HEX:
+            value->unumber = strtoul(string_val, &p_end, 16);
+            break;
+        case BCMCLI_PARM_HEX64:
+            value->unumber64 = strtoull(string_val, &p_end, 16);
+            break;
+        case BCMCLI_PARM_NUMBER:
+            value->number = strtol(string_val, &p_end, 0);
+            break;
+        case BCMCLI_PARM_UNUMBER:
+            value->unumber = strtoul(string_val, &p_end, 0);
+            break;
+        case BCMCLI_PARM_NUMBER64:
+            value->number64 = strtoll(string_val, &p_end, 0);
+            break;
+        case BCMCLI_PARM_UNUMBER64:
+            value->unumber64 = strtoull(string_val, &p_end, 0);
+            break;
+        case BCMCLI_PARM_FLOAT:
+        case BCMCLI_PARM_DOUBLE:
+            value->d = strtod(string_val, &p_end);
+            break;
+        case BCMCLI_PARM_MAC:
+        {
+            unsigned m0, m1, m2, m3, m4, m5;
+            n = sscanf(string_val, "%02x:%02x:%02x:%02x:%02x:%02x",
+                &m0, &m1, &m2, &m3, &m4, &m5);
+            if (n != 6)
+            {
+                n = sscanf(string_val, "%02x%02x%02x%02x%02x%02x",
+                    &m0, &m1, &m2, &m3, &m4, &m5);
+            }
+            if (n != 6)
+                return BCM_ERR_PARM;
+            if (m0 > 255 || m1 > 255 || m2 > 255 || m3 > 255 || m4 > 255 || m5 > 255)
+                return BCM_ERR_PARM;
+            value->mac.u8[0] = m0;
+            value->mac.u8[1] = m1;
+            value->mac.u8[2] = m2;
+            value->mac.u8[3] = m3;
+            value->mac.u8[4] = m4;
+            value->mac.u8[5] = m5;
+            break;
+        }
+        case BCMCLI_PARM_IP:
+        {
+            int n1, n2, n3, n4;
+            n = sscanf(string_val, "%d.%d.%d.%d", &n1, &n2, &n3, &n4);
+            if (n != 4)
+                return BCM_ERR_PARM;
+            if ((unsigned)n1 > 255 || (unsigned)n2 > 255 || (unsigned)n3 > 255 || (unsigned)n4 > 255)
+                return BCM_ERR_PARM;
+            value->unumber = (n1 << 24) | (n2 << 16) | (n3 << 8) | n4;
+            break;
+        }
+
+        default:
+            return BCM_ERR_PARM;
+    }
+    if (p_end && *p_end)
+        return BCM_ERR_PARM;
+    return BCM_ERR_OK;
+}
+
+static void _bcmcli_dft_format_cb(const bcmcli_cmd_parm *parm, bcmcli_parm_value value, char *buffer, int size)
+{
+    switch(parm->type)
+    {
+        case BCMCLI_PARM_DECIMAL:
+            snprintf(buffer, size, "%ld", value.number);
+            break;
+        case BCMCLI_PARM_UDECIMAL:
+            snprintf(buffer, size, "%lu", value.unumber);
+            break;
+        case BCMCLI_PARM_DECIMAL64:
+            snprintf(buffer, size, "%lld", value.number64);
+            break;
+        case BCMCLI_PARM_UDECIMAL64:
+            snprintf(buffer, size, "%llu", value.unumber64);
+            break;
+        case BCMCLI_PARM_HEX:
+            snprintf(buffer, size, "0x%lx", value.unumber);
+            break;
+        case BCMCLI_PARM_HEX64:
+            snprintf(buffer, size, "0x%llx", value.unumber64);
+            break;
+        case BCMCLI_PARM_NUMBER:
+            snprintf(buffer, size, "%ld", value.number);
+            break;
+        case BCMCLI_PARM_NUMBER64:
+            snprintf(buffer, size, "%lld", value.number64);
+            break;
+        case BCMCLI_PARM_UNUMBER:
+            snprintf(buffer, size, "%lu", value.unumber);
+            break;
+        case BCMCLI_PARM_UNUMBER64:
+            snprintf(buffer, size, "%llu", value.unumber64);
+            break;
+        case BCMCLI_PARM_FLOAT:
+        case BCMCLI_PARM_DOUBLE:
+            snprintf(buffer, size, "%f", value.d);
+            break;
+        case BCMCLI_PARM_STRING:
+            snprintf(buffer, size, "%s", value.string);
+            break;
+        case BCMCLI_PARM_MAC:
+            snprintf(buffer, size, "%02x:%02x:%02x:%02x:%02x:%02x",
+                parm->value.mac.u8[0], parm->value.mac.u8[1], parm->value.mac.u8[2],
+                parm->value.mac.u8[3], parm->value.mac.u8[4], parm->value.mac.u8[5]);
+            break;
+        case BCMCLI_PARM_IP:
+            snprintf(buffer, size, "%d.%d.%d.%d",
+                (int)((parm->value.unumber >> 24) & 0xff), (int)((parm->value.unumber >> 16) & 0xff),
+                (int)((parm->value.unumber >> 8) & 0xff), (int)(parm->value.unumber & 0xff));
+            break;
+
+        default:
+            bcmcli_strncpy(buffer, "*unknown*", size);
+    }
+}
+
+static bcmos_errno _bcmcli_enum_scan_cb(const bcmcli_cmd_parm *parm, bcmcli_parm_value *value, const char *string_val)
+{
+    bcmcli_enum_val *values=parm->enum_table;
+    while (values->name)
+    {
+        if (!_bcmcli_stricmp(values->name, string_val, -1))
+        {
+            value->enum_val = values->val;
+            return BCM_ERR_OK;
+        }
+        ++values;
+    }
+    return BCM_ERR_PARM;
+}
+
+static void _bcmcli_enum_format_cb(const bcmcli_cmd_parm *parm, bcmcli_parm_value value, char *buffer, int size)
+{
+    bcmcli_enum_val *values=parm->enum_table;
+    while (values->name)
+    {
+        if (values->val == value.enum_val)
+            break;
+        ++values;
+    }
+    if (values->name)
+        strncpy(buffer, values->name, size);
+    else
+        strncpy(buffer, "*invalid*", size);
+}
+
+static bcmos_errno _bcmcli_enum_mask_scan_cb(const bcmcli_cmd_parm *parm, bcmcli_parm_value *value, const char *string_val)
+{
+    bcmcli_parm_value val1;
+    char *del;
+    bcmos_errno err;
+
+    value->number = 0;
+
+    /* string_val is a combination of enum values separated by BCMCLI_ENUM_MASK_DEL_STR */
+    del = strchr(string_val, BCMCLI_ENUM_MASK_DEL_CHAR);
+    while (del)
+    {
+        char single_val[64];
+        if (del - string_val >= sizeof(single_val))
+            return BCM_ERR_OVERFLOW;
+        memcpy(single_val, string_val, del - string_val);
+        single_val[del - string_val] = 0;
+        err = _bcmcli_enum_scan_cb(parm, &val1, single_val);
+        if (err)
+            return err;
+        value->enum_val |= val1.enum_val;
+        string_val = del+1;
+        del = strchr(string_val, BCMCLI_ENUM_MASK_DEL_CHAR);
+    }
+    err = _bcmcli_enum_scan_cb(parm, &val1, string_val);
+    if (err)
+        return err;
+    value->number |= val1.enum_val;
+    return BCM_ERR_OK;
+}
+
+static void _bcmcli_enum_mask_format_cb(const bcmcli_cmd_parm *parm, bcmcli_parm_value value, char *buffer, int size)
+{
+    bcmcli_enum_val *values=parm->enum_table;
+    const char *none = NULL;
+    *buffer = 0;
+    while (values->name)
+    {
+        if (values->val == 0)
+        {
+            none = values->name;
+        }
+        if ((values->val & value.enum_val) != 0)
+        {
+            if (*buffer)
+                strncat(buffer, BCMCLI_ENUM_MASK_DEL_STR, size - strlen(buffer));
+            strncat(buffer, values->name, size - strlen(buffer));
+        }
+        ++values;
+    }
+    if (! *buffer)
+        strncpy(buffer, NULL != none ? none : "0", size);
+}
+
+static bcmos_errno _bcmcli_buffer_scan_cb(const bcmcli_cmd_parm *parm, bcmcli_parm_value *value, const char *string_val)
+{
+    int n;
+
+    if (!value->buffer.start)
+        return BCM_ERR_PARM;
+    value->buffer.curr = value->buffer.start;
+    if (strcmp(string_val, "-") == 0)
+    {
+        return BCM_ERR_OK;
+    }
+    n = _bcmcli_strhex(string_val, value->buffer.start, value->buffer.len);
+    if (n < 0)
+        return n;
+    bcmolt_buf_skip(&value->buffer, n);
+
+    return BCM_ERR_OK;
+}
+
+static const char *_bcmcli_qualified_name(bcmcli_entry *token, char *buffer, int size )
+{
+    bcmcli_entry *parent = token->parent;
+    char qual_name[BCMCLI_MAX_QUAL_NAME_LENGTH];
+    *buffer=0;
+    while (parent)
+    {
+        bcmcli_strncpy(qual_name, parent->name, sizeof(qual_name));
+        if (parent->parent)
+            bcmcli_strncat(qual_name, "/", sizeof(qual_name));
+        bcmcli_strncat(qual_name, buffer, sizeof(qual_name));
+        bcmcli_strncpy(buffer, qual_name, size);
+        parent = parent->parent;
+    }
+    size -= strlen(buffer);
+    bcmcli_strncat(buffer, token->name, size);
+    return buffer;
+}
+
+/*
+ * Exports
+ */
+EXPORT_SYMBOL(bcmcli_dir_add);
+EXPORT_SYMBOL(bcmcli_dir_find);
+EXPORT_SYMBOL(bcmcli_token_name);
+EXPORT_SYMBOL(bcmcli_cmd_add);
+EXPORT_SYMBOL(bcmcli_session_open);
+EXPORT_SYMBOL(bcmcli_session_close);
+EXPORT_SYMBOL(bcmcli_parse);
+EXPORT_SYMBOL(bcmcli_stop);
+EXPORT_SYMBOL(bcmcli_is_stopped);
+EXPORT_SYMBOL(bcmcli_dir_get);
+EXPORT_SYMBOL(bcmcli_dir_set);
+EXPORT_SYMBOL(bcmcli_parm_number);
+EXPORT_SYMBOL(bcmcli_parm_is_set);
+EXPORT_SYMBOL(bcmcli_enum_parm_stringval);
+EXPORT_SYMBOL(bcmcli_token_destroy);
+EXPORT_SYMBOL(bcmcli_enum_bool_table);
diff --git a/bcm68620_release/release/host_reference/cli/bcmcli.h b/bcm68620_release/release/host_reference/cli/bcmcli.h
new file mode 100644
index 0000000..334e27c
--- /dev/null
+++ b/bcm68620_release/release/host_reference/cli/bcmcli.h
@@ -0,0 +1,677 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+
+/*******************************************************************
+ * bcmcli.h
+ *
+ * CLI engine
+ *
+ *******************************************************************/
+
+#ifndef BCMCLI_H
+
+#define BCMCLI_H
+
+#include <bcmos_system.h>
+#include <bcmcli_session.h>
+#include <bcmolt_buf.h>
+
+/** \defgroup bcm_cli Broadcom CLI Engine
+ * Broadcom CLI engine is used for all configuration and status monitoring.\n
+ * It doesn't have built-in scripting capabilities (logical expressions, loops),
+ * but can be used in combination with any available scripting language.\n
+ * Broadcom CLI supports the following features:\n
+ * - parameter number and type validation (simplifies command handlers development)
+ * - parameter value range checking
+ * - mandatory and optional parameters
+ * - positional and named parameters
+ * - parameters with default values
+ * - enum parameters can have arbitrary values
+ * - automatic command help generation
+ * - automatic or user-defined command shortcuts
+ * - command handlers return completion status to enable scripting
+ * - multiple sessions
+ * - session access rights
+ * - extendible. Supports user-defined parameter types
+ * - relatively low stack usage
+ * @{
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#define BCMCLI_MAX_SEARCH_SUBSTR_LENGTH 80
+
+#define BCMCLI_ARRAY_EMPTY        "-"
+#define BCMCLI_PARM_NO_VALUE      "_"
+#define BCMCLI_ENUM_MASK_DEL_STR  "+"
+
+/** Monitor entry handle
+ */
+typedef struct bcmcli_entry bcmcli_entry;
+
+/* if BCMCLI_PARM_USERIO flag is set:
+   low_val: t_userscanf_f function
+   high_val: t_userprintf_f function
+*/
+
+/** Function parameter structure */
+typedef struct bcmcli_cmd_parm bcmcli_cmd_parm;
+
+/** Parameter type */
+typedef enum
+{
+    BCMCLI_PARM_NONE,
+    BCMCLI_PARM_DECIMAL,         /**< Decimal number */
+    BCMCLI_PARM_DECIMAL64,       /**< Signed 64-bit decimal */
+    BCMCLI_PARM_UDECIMAL,        /**< Unsigned decimal number */
+    BCMCLI_PARM_UDECIMAL64,      /**< Unsigned 64-bit decimal number */
+    BCMCLI_PARM_HEX,             /**< Hexadecimal number */
+    BCMCLI_PARM_HEX64,           /**< 64-bit hexadecimal number */
+    BCMCLI_PARM_NUMBER,          /**< Decimal number or hex number prefixed by 0x */
+    BCMCLI_PARM_NUMBER64,        /**< 64bit decimal number or hex number prefixed by 0x */
+    BCMCLI_PARM_UNUMBER,         /**< Unsigned decimal number or hex number prefixed by 0x */
+    BCMCLI_PARM_UNUMBER64,       /**< Unsigned 64bit decimal number or hex number prefixed by 0x */
+    BCMCLI_PARM_FLOAT,           /**< IEEE 32-bit floating-point number */
+    BCMCLI_PARM_DOUBLE,          /**< IEEE 64-bit floating point number */
+    BCMCLI_PARM_STRING,          /**< String */
+    BCMCLI_PARM_ENUM,            /**< Enumeration */
+    BCMCLI_PARM_ENUM_MASK,       /**< Bitmask created from enumeration values */
+    BCMCLI_PARM_IP,              /**< IP address n.n.n.n */
+    BCMCLI_PARM_IPV6,            /**< IPv6 address */
+    BCMCLI_PARM_MAC,             /**< MAC address xx:xx:xx:xx:xx:xx */
+    BCMCLI_PARM_BUFFER,          /**< Byte array */
+
+    BCMCLI_PARM_USERDEF          /**< User-defined parameter. User must provide scan_cb */
+} bcmcli_parm_type;
+
+/** Numeric type used for storing enum values. */
+typedef long bcmcli_enum_number;
+
+/** Enum attribute value.
+ *
+ *  Enum values is an array of bcmcli_enum_val terminated by element with name==NULL
+ *
+ */
+typedef struct bcmcli_enum_val
+{
+    const char *name;           /**< Enum symbolic name */
+    bcmcli_enum_number val;     /**< Enum internal value */
+    bcmcli_cmd_parm *parms;     /**< Extension parameter table for enum-selector */
+} bcmcli_enum_val;
+#define BCMCLI_MAX_ENUM_VALUES   128     /**< Max number of enum values */
+#define BCMCLI_ENUM_LAST     { NULL, 0}  /**< Last entry in enum table */
+
+/** Boolean values (true/false, yes/no, on/off)
+ *
+ */
+extern bcmcli_enum_val bcmcli_enum_bool_table[];
+
+/* Monitor data types */
+typedef long bcmcli_number;      /**< Type underlying BCMCLI_PARM_NUMBER, BCMCLI_PARM_DECIMAL */
+typedef long bcmcli_unumber;     /**< Type underlying BCMCLI_PARM_HEX, BCMCLI_PARM_UDECIMAL */
+typedef long bcmcli_number64;    /**< Type underlying BCMCLI_PARM_NUMBER64, BCMCLI_PARM_DECIMAL64 */
+typedef long bcmcli_unumber64;   /**< Type underlying BCMCLI_PARM_HEX64, BCMCLI_PARM_UDECIMAL64 */
+
+/** Parameter value */
+typedef union bcmcli_parm_value
+{
+    long number;                    /**< Signed number */
+    unsigned long unumber;          /**< Unsigned number */
+    long long number64;             /**< Signed 64-bit number */
+    unsigned long long unumber64;   /**< Unsigned 64-bit number */
+    const char *string;             /**< 0-terminated string */
+    double d;                       /**< Double-precision floating point number */
+    bcmos_mac_address mac;          /**< MAC address */
+    bcmolt_buf buffer;              /**< Buffer: used for BCMCLI_PARM_BUFFER */
+    bcmcli_enum_number enum_val;    /**< Enum value (number) */
+}  bcmcli_parm_value;
+
+/** User-defined scan function.
+ * The function is used for parsing user-defined parameter types
+ * Returns: 0-ok, <=error
+ *
+ */
+typedef bcmos_errno (*bcmcli_scan_cb)(const bcmcli_cmd_parm *parm, bcmcli_parm_value *value,
+    const char *string_val);
+
+/** User-defined print function.
+ * The function is used for printing user-defined parameter types
+ *
+ */
+typedef void (*bcmcli_format_cb)(const bcmcli_cmd_parm *parm, bcmcli_parm_value value,
+    char *buffer, int size);
+
+
+/** Function parameter structure */
+struct bcmcli_cmd_parm
+{
+   const char *name;            /**< Parameter name. Shouldn't be allocated on stack! */
+   const char *description;     /**< Parameter description. Shouldn't be allocated on stack! */
+   bcmcli_parm_type type;       /**< Parameter type */
+   uint8_t flags;               /**< Combination of BCMCLI_PARM_xx flags */
+#define BCMCLI_PARM_FLAG_NONE       0x00 /**< For use instead of magic number 0 when no flags apply */
+#define BCMCLI_PARM_FLAG_OPTIONAL   0x01 /**< Parameter is optional */
+#define BCMCLI_PARM_FLAG_DEFVAL     0x02 /**< Default value is set */
+#define BCMCLI_PARM_FLAG_RANGE      0x04 /**< Range is set */
+#define BCMCLI_PARM_FLAG_EOL        0x20 /**< String from the current parser position till EOL */
+#define BCMCLI_PARM_FLAG_SELECTOR   0x40 /**< Parameter selects other parameters */
+#define BCMCLI_PARM_FLAG_ASSIGNED   0x80 /**< Internal flag: parameter is assigned */
+
+   bcmcli_number low_val;       /**< Low val for range checking */
+   bcmcli_number hi_val;        /**< Hi val for range checking */
+   bcmcli_parm_value value;     /**< Value */
+   bcmcli_enum_val *enum_table; /**< Table containing { enum_name, enum_value } pairs */
+   bcmcli_scan_cb scan_cb;      /**< User-defined scan function for BCMCLI_PARM_USERDEF parameter type */
+   bcmcli_format_cb format_cb;  /**< User-defined format function for BCMCLI_PARM_USERDEF parameter type */
+   uint32_t max_array_size;     /**< Max array size for array-parameter */
+   uint32_t array_size;         /**< Actual array size for array-parameter */
+   bcmcli_parm_value *values;   /**< Array values */
+   void *user_data;             /**< User data - passed transparently to command handler */
+};
+
+/** Command parameter list terminator */
+#define BCMCLI_PARM_LIST_TERMINATOR  { .name=NULL, .type=BCMCLI_PARM_NONE }
+
+/** Helper macro: make simple parameter
+ * \param[in] _name     Parameter name
+ * \param[in] _descr    Parameter description
+ * \param[in] _type     Parameter type
+ * \param[in] _flags    Parameter flags
+ */
+#define BCMCLI_MAKE_PARM(_name, _descr, _type, _flags) \
+    { .name=(_name), .description=(_descr), .type=(_type), .flags=(_flags) }
+
+/** Helper macro: make simple parameter
+ * \param[in] _name       Parameter name
+ * \param[in] _descr      Parameter description
+ * \param[in] _type       Parameter type
+ * \param[in] _flags      Parameter flags
+ * \param[in] _size       Max array size
+ * \param[in] _values     Array values buffer
+ */
+#define BCMCLI_MAKE_PARM_ARRAY(_name, _descr, _type, _flags, _size, _values) \
+    { .name=(_name), .description=(_descr), .type=(_type), .flags=(_flags),\
+        .max_array_size=(_size), .values=(_values) }
+
+/** Helper macro: make simple parameter for arrays of enums
+ * \param[in] _name       Parameter name
+ * \param[in] _descr      Parameter description
+ * \param[in] _type       Parameter type
+ * \param[in] _flags      Parameter flags
+ * \param[in] _size       Max array size
+ * \param[in] _values     Array values buffer
+ * \param[in] _enum_table An array of enums that may be in the array
+ */
+#define BCMCLI_MAKE_PARM_ENUM_ARRAY(_name, _descr, _type, _flags, _size, _values, _enum_table) \
+    { .name=(_name), .description=(_descr), .type=(_type), .flags=(_flags),\
+        .max_array_size=(_size), .values=(_values), .enum_table=(_enum_table) }
+
+/** Helper macro: make range parameter
+ * \param[in] _name     Parameter name
+ * \param[in] _descr    Parameter description
+ * \param[in] _type     Parameter type
+ * \param[in] _flags    Parameter flags
+ * \param[in] _min      Min value
+ * \param[in] _max      Max value
+ */
+#define BCMCLI_MAKE_PARM_RANGE(_name, _descr, _type, _flags, _min, _max) \
+    { .name=(_name), .description=(_descr), .type=(_type), .flags=(_flags) | BCMCLI_PARM_FLAG_RANGE, \
+        .low_val=(_min), .hi_val=(_max) }
+
+/** Helper macro: make range parameter for arrays with range
+ * \param[in] _name     Parameter name
+ * \param[in] _descr    Parameter description
+ * \param[in] _type     Parameter type
+ * \param[in] _flags    Parameter flags
+ * \param[in] _size     Max array size
+ * \param[in] _values   Array values buffer
+ * \param[in] _min      Min value
+ * \param[in] _max      Max value
+ */
+#define BCMCLI_MAKE_PARM_ARRAY_RANGE(_name, _descr, _type, _flags, _size, _values, _min, _max) \
+    { .name=(_name), .description=(_descr), .type=(_type), .flags=(_flags) | BCMCLI_PARM_FLAG_RANGE,\
+         .max_array_size=(_size), .values=(_values), .low_val=(_min), .hi_val=(_max) }
+
+/** Helper macro: make parameter with default value
+ * \param[in] _name     Parameter name
+ * \param[in] _descr    Parameter description
+ * \param[in] _type     Parameter type
+ * \param[in] _flags    Parameter flags
+ * \param[in] _dft      Default value
+ */
+#define BCMCLI_MAKE_PARM_DEFVAL(_name, _descr, _type, _flags, _dft) \
+    { .name=(_name), .description=(_descr), .type=(_type), .flags=(_flags) | BCMCLI_PARM_FLAG_DEFVAL, \
+        .value = {_dft} }
+
+/** Helper macro: make range parameter with default value
+ * \param[in] _name     Parameter name
+ * \param[in] _descr    Parameter description
+ * \param[in] _type     Parameter type
+ * \param[in] _flags    Parameter flags
+ * \param[in] _min      Min value
+ * \param[in] _max      Max value
+ * \param[in] _dft      Default value
+ */
+#define BCMCLI_MAKE_PARM_RANGE_DEFVAL(_name, _descr, _type, _flags, _min, _max, _dft) \
+    { .name=(_name), .description=(_descr), .type=(_type), \
+        .flags=(_flags) | BCMCLI_PARM_FLAG_RANGE | BCMCLI_PARM_FLAG_DEFVAL, \
+        .low_val=(_min), .hi_val=(_max), .value = {_dft} }
+
+/** Helper macro: make enum parameter
+ * \param[in] _name     Parameter name
+ * \param[in] _descr    Parameter description
+ * \param[in] _values   Enum values table
+ * \param[in] _flags    Parameter flags
+ */
+#define BCMCLI_MAKE_PARM_ENUM(_name, _descr, _values, _flags) \
+    { .name=(_name), .description=(_descr), .type=BCMCLI_PARM_ENUM, .flags=(_flags), .enum_table=(_values)}
+
+/** Helper macro: make enum parameter with default value
+ * \param[in] _name     Parameter name
+ * \param[in] _descr    Parameter description
+ * \param[in] _values   Enum values table
+ * \param[in] _flags    Parameter flags
+ * \param[in] _dft      Default value
+ */
+#define BCMCLI_MAKE_PARM_ENUM_DEFVAL(_name, _descr, _values, _flags, _dft) \
+    { .name=(_name), .description=(_descr), .type=BCMCLI_PARM_ENUM, .flags=(_flags) | BCMCLI_PARM_FLAG_DEFVAL,\
+        .enum_table=(_values), .value={.string=_dft} }
+
+/** Helper macro: make enum mask parameter
+ * \param[in] _name     Parameter name
+ * \param[in] _descr    Parameter description
+ * \param[in] _values   Enum values table
+ * \param[in] _flags    Parameter flags
+ */
+#define BCMCLI_MAKE_PARM_ENUM_MASK(_name, _descr, _values, _flags) \
+    { .name=(_name), .description=(_descr), .type=BCMCLI_PARM_ENUM_MASK, .flags=(_flags), .enum_table=(_values)}
+
+/** Helper macro: make enum_mask parameter with default value
+ * \param[in] _name     Parameter name
+ * \param[in] _descr    Parameter description
+ * \param[in] _values   Enum values table
+ * \param[in] _flags    Parameter flags
+ * \param[in] _dft      Default value
+ */
+#define BCMCLI_MAKE_PARM_ENUM_MASK_DEFVAL(_name, _descr, _values, _flags, _dft) \
+    { .name=(_name), .description=(_descr), .type=BCMCLI_PARM_ENUM_MASK, .flags=(_flags) | BCMCLI_PARM_FLAG_DEFVAL,\
+        .enum_table=(_values), .value={.string=_dft} }
+
+/** Helper macro: make enum-selector parameter
+ * \param[in] _name     Parameter name
+ * \param[in] _descr    Parameter description
+ * \param[in] _values   Selector values table
+ * \param[in] _flags    Parameter flags
+ */
+#define BCMCLI_MAKE_PARM_SELECTOR(_name, _descr, _values, _flags) \
+    { .name=(_name), .description=(_descr), .type=BCMCLI_PARM_ENUM, .flags=(_flags) | BCMCLI_PARM_FLAG_SELECTOR,\
+        .enum_table=(_values) }
+
+/** Helper macro: make buffer parameter
+ * \param[in] _name     Parameter name
+ * \param[in] _descr    Parameter description
+ * \param[in] _flags    Parameter flags
+ * \param[in] _buf      Memory buffer associated with the parameter
+ * \param[in] _size     Buffer size
+ */
+#define BCMCLI_MAKE_PARM_BUFFER(_name, _descr, _flags, _buf, _size) \
+    { .name=(_name), .description=(_descr), .type=BCMCLI_PARM_BUFFER, \
+        .flags=(_flags), .value.buffer = {.start = _buf, .curr = _buf, .len = _size} }
+
+/** Register command without parameters helper */
+#define BCMCLI_MAKE_CMD_NOPARM(dir, cmd, help, cb) \
+{\
+    bcmos_errno bcmcli_cmd_add_err = bcmcli_cmd_add(dir, cmd, cb, help, BCMCLI_ACCESS_ADMIN, NULL, NULL);\
+    BUG_ON(BCM_ERR_OK != bcmcli_cmd_add_err);\
+}
+
+/** Register command helper */
+#define BCMCLI_MAKE_CMD(dir, cmd, help, cb, parms...)                           \
+{                                                                               \
+    static bcmcli_cmd_parm cmd_parms[]={                                        \
+        parms,                                                                  \
+        BCMCLI_PARM_LIST_TERMINATOR                                             \
+    };                                                                          \
+    bcmos_errno bcmcli_cmd_add_err = bcmcli_cmd_add(dir, cmd, cb, help, BCMCLI_ACCESS_ADMIN, NULL, cmd_parms);   \
+    BUG_ON(BCM_ERR_OK != bcmcli_cmd_add_err);\
+}
+
+/** Optional custom directory handlers */
+typedef void (*bcmcli_dir_enter_leave_cb)(bcmcli_session *session, bcmcli_entry *dir, int is_enter);
+
+/** Optional command or directory help callback
+ * \param[in]   session     Session handle
+ * \param[in]   h           Command or directory handle
+ * \param[in]   parms       Parameter(s) - the rest of the command string.
+ *                          Can be used for example to get help on individual parameters
+ */
+typedef void (*bcmcli_help_cb)(bcmcli_session *session, bcmcli_entry *h, const char *parms);
+
+
+/** Extra parameters of monitor directory.
+ * See \ref bcmcli_dir_add
+ *
+ */
+typedef struct bcmcli_dir_extra_parm
+{
+    void *user_priv;            /**< private data passed to enter_leave_cb */
+    bcmcli_dir_enter_leave_cb enter_leave_cb; /**< callback function to be called when session enters/leavs the directory */
+    bcmcli_help_cb help_cb;     /**< Help function called to print directory help instead of the automatic help */
+} bcmcli_dir_extra_parm;
+
+
+/** Extra parameters of monitor command.
+ * See \ref bcmcli_cmd_add
+ *
+ */
+typedef struct bcmcli_cmd_extra_parm
+{
+    bcmcli_help_cb help_cb;     /**< Optional help callback. Can be used for more sophisticated help, e.g., help for specific parameters */
+    uint32_t flags;             /**< Command flags */
+#define BCMCLI_CMD_FLAG_NO_NAME_PARMS   0x00000001 /**< No named parms. Positional only. Can be useful if parameter value can contain ',' */
+    void (*free_parms)(bcmcli_cmd_parm *parms);    /* Optional user-defined free */
+} bcmcli_cmd_extra_parm;
+
+
+/** Monitor command handler prototype */
+typedef bcmos_errno (*bcmcli_cmd_cb)(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms);
+
+/** CLI command logging mode */
+typedef enum
+{
+    BCMCLI_LOG_NONE,                /**< Disable logging */
+    BCMCLI_LOG_CLI,                 /**< Log commands as is and rc as CLI comment*/
+    BCMCLI_LOG_C_COMMENT            /**< Log as C comments */
+} bcmcli_log_mode;
+
+/** Add subdirectory to the parent directory
+ *
+ * \param[in]   parent          Parent directory handle. NULL=root
+ * \param[in]   name            Directory name
+ * \param[in]   help            Help string
+ * \param[in]   access_right    Access rights
+ * \param[in]   extras          Optional directory descriptor. Mustn't be allocated on the stack.
+ * \return      new directory handle or NULL in case of failure
+ */
+bcmcli_entry *bcmcli_dir_add(bcmcli_entry *parent, const char *name,
+                             const char *help, bcmcli_access_right access_right,
+                             const bcmcli_dir_extra_parm *extras);
+
+
+/** Scan directory tree and look for directory named "name".
+ *
+ * \param[in]   parent          Directory sub-tree root. NULL=root
+ * \param[in]   name            Name of directory to be found
+ * \return      directory handle if found or NULL if not found
+ */
+bcmcli_entry *bcmcli_dir_find(bcmcli_entry *parent, const char *name );
+
+
+/** Scan directory tree and look for command named "name".
+ *
+ * \param[in]   parent          Directory sub-tree root. NULL=root
+ * \param[in]   name            Name of command to be found
+ * \return      command handle if found or NULL if not found
+ */
+bcmcli_entry *bcmcli_cmd_find(bcmcli_entry *parent, const char *name );
+
+
+/** Get token name
+ * \param[in]   token           Directory or command token
+ * \return      directory token name
+ */
+const char *bcmcli_token_name(bcmcli_entry *token);
+
+/** Find the CLI parameter with the specified name (case insensitive).
+ * \param[in]   session  CLI session
+ * \param[in]   name     Parameter name
+ * \return      The CLI parameter that was found, or NULL if not found
+ */
+bcmcli_cmd_parm *bcmcli_find_named_parm(bcmcli_session *session, const char *name);
+
+/** Find the first CLI parameter whose name starts with the specified string (case insensitive).
+ * \param[in]   session  CLI session
+ * \param[in]   prefix   Parameter name prefix
+ * \return      The CLI parameter that was found, or NULL if not found
+ */
+bcmcli_cmd_parm *bcmcli_find_parm_by_prefix(bcmcli_session *session, const char *prefix);
+
+/** Query parameter value status.
+ * The function can be used for scalar and array parameters
+ * \param[in]   session         CLI session
+ * \param[in]   parm            Parameter from the array passed to the CLI command handler
+ *                              or returned by bcmcli_find_named_parm()
+ * \param[in]   value_index     value_index - for array parameters
+ * \return      BCMOS_TRUE if the parameter value is set, BCMOS_FALSE otherwise
+ */
+bcmos_bool bcmcli_parm_value_is_set(bcmcli_session *session, bcmcli_cmd_parm *parm, uint32_t value_index);
+
+/** Add CLI command
+ *
+ * \param[in]   dir             Handle of directory to add command to. NULL=root
+ * \param[in]   name            Command name
+ * \param[in]   cmd_cb          Command handler
+ * \param[in]   help            Help string
+ * \param[in]   access_right    Access rights
+ * \param[in]   extras          Optional extras
+ * \param[in]   parms           Optional parameters array. Must not be allocated on the stack!
+ *                              If parms!=NULL, the last parameter in the array must have name==NULL.
+ * \return
+ *      0   =OK\n
+ *      <0  =error code
+ */
+bcmos_errno bcmcli_cmd_add(bcmcli_entry *dir, const char *name, bcmcli_cmd_cb cmd_cb,
+                  const char *help, bcmcli_access_right access_right,
+                  const bcmcli_cmd_extra_parm *extras, bcmcli_cmd_parm parms[]);
+
+
+/** Destroy token (command or directory)
+ * \param[in]   token           Directory or command token. NULL=root
+ */
+void bcmcli_token_destroy(bcmcli_entry *token);
+
+/** Parse and execute input string.
+ * input_string can contain multiple commands delimited by ';'
+ *
+ * \param[in]   session         Session handle
+ * \param[in]   input_string    String to be parsed
+ * \return
+ *      =0  - OK \n
+ *      -EINVAL - parsing error\n
+ *      other - return code - as returned from command handler.
+ *            It is recommended to return -EINTR to interrupt monitor loop.
+ */
+bcmos_errno bcmcli_parse(bcmcli_session *session, char *input_string);
+
+/** Read input and parse iteratively until EOF or bcmcli_is_stopped()
+ *
+ * \param[in]   session         Session handle
+ * \return
+ *      =0  - OK \n
+ */
+bcmos_errno bcmcli_driver(bcmcli_session *session);
+
+/** Stop monitor driver.
+ * The function stops \ref bcmcli_driver
+ * \param[in]   session         Session handle
+ */
+void bcmcli_stop(bcmcli_session *session);
+
+/** Returns 1 if monitor session is stopped
+ * \param[in]   session         Session handle
+ * \returns 1 if monitor session stopped by bcmcli_stop()\n
+ * 0 otherwise
+ */
+bcmos_bool bcmcli_is_stopped(bcmcli_session *session);
+
+/** Get current directory for the session,
+ * \param[in]   session         Session handle
+ * \return      The current directory handle
+ */
+bcmcli_entry *bcmcli_dir_get(bcmcli_session *session );
+
+/** Set current directory for the session.
+ * \param[in]   session         Session handle
+ * \param[in]   dir             Directory that should become current
+ * \return
+ *      =0  - OK
+ *      <0  - error
+ */
+bcmos_errno bcmcli_dir_set(bcmcli_session *session, bcmcli_entry *dir);
+
+/** Get parameter number given its name.
+ * The function is intended for use by command handlers
+ * \param[in]       session         Session handle
+ * \param[in]       parm_name       Parameter name
+ * \return
+ *  >=0 - parameter number\n
+ *  <0  - parameter with this name doesn't exist
+ */
+int bcmcli_parm_number(bcmcli_session *session, const char *parm_name);
+
+/** Get parameter by name
+ * The function is intended for use by command handlers
+ * \param[in]       session         Session handle
+ * \param[in]       parm_name       Parameter name
+ * \return
+ * parameter pointer or NULL if not found
+ */
+bcmcli_cmd_parm *bcmcli_parm_get(bcmcli_session *session, const char *parm_name);
+
+/** Check if parameter is set
+ * The function is intended for use by command handlers
+ * \param[in]       session         Session handle
+ * \param[in]       parm            Parameter name
+ * \return
+ * TRUE if parameter is set, FALSE otherwise
+ */
+static inline bcmos_bool bcmcli_parm_is_set(bcmcli_session *session, const bcmcli_cmd_parm *parm)
+{
+    return (parm->flags & BCMCLI_PARM_FLAG_ASSIGNED) ? BCMOS_TRUE : BCMOS_FALSE;
+}
+
+/** Check if parameter is set
+ * \param[in]       session         Session handle
+ * \param[in]       parm_number     Parameter number
+ * \return
+ *  0 if parameter is set\n
+ *  BCM_ERR_NOENT if parameter is not set
+ *  BCM_ERR_PARM if parm_number is invalid
+ */
+bcmos_errno bcmcli_parm_check(bcmcli_session *session, int parm_number);
+
+
+/** Get enum's string value given its internal value
+ * \param[in]       table           Enum table
+ * \param[in]       value           Internal value
+ * \return
+ *      enum string value or NULL if internal value is invalid
+ */
+static inline const char *bcmcli_enum_stringval(const bcmcli_enum_val table[], long value)
+{
+    while(table->name)
+    {
+        if (table->val==value)
+            return table->name;
+        ++table;
+    }
+    return NULL;
+}
+
+
+/** Get enum's parameter string value given its internal value
+ * \param[in]       session         Session handle
+ * \param[in]       parm_number     Parameter number
+ * \param[in]       value           Internal value
+ * \return
+ *      enum string value or NULL if parameter is not enum or
+ *      internal value is invalid
+ */
+const char *bcmcli_enum_parm_stringval(bcmcli_session *session, int parm_number, long value);
+
+
+/** Print CLI parameter value
+ * \param[in]       session         Session handle
+ * \param[in]       parm            Parameter
+ */
+void bcmcli_parm_print(bcmcli_session *session, const bcmcli_cmd_parm *parm);
+
+
+/** strncpy flavour that always add 0 terminator
+ * \param[in]       dst             Destination string
+ * \param[in]       src             Source string
+ * \param[in]       dst_size        Destination buffer size
+ * \return dst
+ */
+static inline char *bcmcli_strncpy(char *dst, const char *src, uint32_t dst_size)
+{
+    strncpy(dst, src, dst_size-1);
+    dst[dst_size-1] = 0;
+    return dst;
+}
+
+
+/** strncat flavour that limits size of destination buffer
+ * \param[in]       dst             Destination string
+ * \param[in]       src             Source string
+ * \param[in]       dst_size        Destination buffer size
+ * \return dst
+ */
+static inline char *bcmcli_strncat(char *dst, const char *src, uint32_t dst_size)
+{
+    uint32_t dst_len = strlen(dst);
+    return strncat(dst, src, dst_size-dst_len-1);
+}
+
+/* Redefine bcmcli_session_print --> bcmcli_print */
+#define bcmcli_print bcmcli_session_print
+
+/** Enable / disable CLI command logging
+ * \param[in]   mode    Logging flags
+ * \param[in]   log     Log session. Must be set if mode != BCMCLI_CMD_LOG_NONE
+ * \return 0=OK or error <0
+ */
+bcmos_errno bcmcli_log_set(bcmcli_log_mode mode, bcmcli_session *log);
+
+/** Write string to CLI log.
+ * The function is ignored if CLI logging is not enabled using bcmcli_log_set()
+ * \param[in]   format  printf-like format followed by arguments
+ */
+void bcmcli_log(const char *format, ...);
+
+#ifdef __cplusplus
+}
+#endif
+
+/** @} end bcm_cli group */
+
+#endif /* #ifndef BCM_CLI_H */
diff --git a/bcm68620_release/release/host_reference/cli/bcmcli_server.c b/bcm68620_release/release/host_reference/cli/bcmcli_server.c
new file mode 100644
index 0000000..160d98d
--- /dev/null
+++ b/bcm68620_release/release/host_reference/cli/bcmcli_server.c
@@ -0,0 +1,546 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+
+/*******************************************************************
+ * bcmcli_server.c
+ *
+ * CLI engine - remote shell support
+ *
+ * This module is a back-end of remote shell support.
+ * - multiple servers
+ * - domain and TCP-based connections
+ * - session access level - per server
+ *******************************************************************/
+
+#include <bcmcli_server.h>
+
+typedef struct bcmclis_server bcmclis_server_t;
+
+/* Server connection
+ */
+typedef struct bcmclis_conn
+{
+    struct bcmclis_conn *next;
+    bcmclis_server_t *server;
+    const char *address; /* client address */
+    int sock;             /* transport socket */
+    bdmf_task rx_thread;
+    bcmcli_session *session;
+    uint32_t bytes_sent;
+    uint32_t bytes_received;
+    bdmf_task conn_thread;
+} bcmclis_conn_t;
+
+/* Server control bdmfock
+ */
+struct bcmclis_server
+{
+    bcmclis_server_t *next;
+    bcmclis_conn_t *conn_list;
+    int sock;             /* listening socket */
+    bcmclis_parm_t parms;
+    int id;
+    int nconns;
+    bcmos_fastlock lock;
+    bdmf_task listen_thread;
+};
+
+/* socaddr variants */
+typedef union
+{
+    struct sockaddr sa;
+    struct sockaddr_un domain_sa;
+    struct sockaddr_in tcp_sa;
+} sockaddr_any;
+
+static bcmclis_server_t *bcmclis_servers;
+static int bcmclis_server_id;
+
+static bcmclis_server_t *bcmclis_id_to_server(int hs, bcmclis_server_t **prev)
+{
+    bcmclis_server_t *s=bcmclis_servers;
+    if (prev)
+        *prev = NULL;
+    while(s)
+    {
+        if (s->id == hs)
+            break;
+        if (prev)
+            *prev = s;
+        s = s->next;
+    }
+    return s;
+}
+
+/* Parse address helper */
+static int bcmclis_parse_address(const bcmclis_parm_t *parms, int *protocol, sockaddr_any *sa, int *len)
+{
+    switch(parms->transport)
+    {
+    case BCMCLI_TRANSPORT_DOMAIN_SOCKET:
+    {
+        *protocol = AF_UNIX;
+        sa->domain_sa.sun_family = AF_UNIX;  /* local is declared before socket() ^ */
+        strcpy(sa->domain_sa.sun_path, parms->address);
+        *len = strlen(sa->domain_sa.sun_path) + sizeof(sa->domain_sa.sun_family);
+        break;
+    }
+    case BCMCLI_TRANSPORT_TCP_SOCKET:
+    {
+        *protocol = AF_INET;
+        sa->tcp_sa.sin_family = AF_INET;
+        sa->tcp_sa.sin_port = htons(atoi(parms->address));
+        sa->tcp_sa.sin_addr.s_addr = INADDR_ANY;
+        *len = sizeof(sa->tcp_sa);
+        break;
+    }
+    default:
+        return BCM_ERR_PARM;
+    }
+    return 0;
+}
+
+
+/* disconnect client and clear resources */
+static void bcmclis_disconnect(bcmclis_conn_t *conn)
+{
+    bcmclis_server_t *s=conn->server;
+    bcmclis_conn_t *c=s->conn_list, *prev=NULL;
+
+    bcmos_fastlock_lock(&s->lock);
+    while(c && c!=conn)
+    {
+        prev = c;
+        c = c->next;
+    }
+    BUG_ON(!c);
+    if (prev)
+        prev->next = c->next;
+    else
+        s->conn_list = c->next;
+    --s->nconns;
+    bcmos_fastlock_unlock(&s->lock);
+    bcmcli_session_close(c->session);
+    close(c->sock);
+    bdmf_task_destroy(c->rx_thread);
+    bcmos_free(c);
+}
+
+/*
+ * Session callbacks
+ */
+
+/** Session's output function.
+ * returns the number of bytes written or <0 if error
+ */
+static int bcmclis_cb_sess_write(void *user_priv, const void *buf, uint32_t size)
+{
+    bcmclis_conn_t *c=user_priv;
+    int rc;
+
+    rc = send(c->sock, buf, size, 0);
+    /* disconnect if IO error */
+    if (rc < size)
+        bcmclis_disconnect(c);
+    else
+        c->bytes_sent += rc;
+    return rc;
+}
+
+#define CHAR_EOT 0x04
+
+/** Session's input function.
+ * returns the number of bytes read or <0 if error
+ */
+static char *bcmclis_read_line(bcmclis_conn_t *c, char *buf, uint32_t size)
+{
+    int i;
+    int rc;
+    int len=0;
+
+    for(i=0; i<size-1; i++)
+    {
+        char ch;
+        rc = recv(c->sock, &ch, 1, MSG_WAITALL);
+        if (rc <= 0)
+            break;
+        if (ch == '\r')
+            continue;
+        if (ch == CHAR_EOT)
+            break;
+        buf[len++] = ch;
+        if (ch == '\n')
+            break;
+    }
+    c->bytes_received += i;
+    buf[len] = 0;
+    return (len ? buf : NULL);
+}
+
+/* Receive handler */
+static int bcmclis_rx_thread_handler(void *arg)
+{
+    char buf[512];
+    bcmclis_conn_t *c=arg;
+
+    while(!bcmcli_is_stopped(c->session) &&
+          bcmclis_read_line(c, buf, sizeof(buf)))
+    {
+        bcmcli_parse(c->session, buf);
+    }
+    bcmclis_disconnect(c);
+    return 0;
+}
+
+/* New client connection indication */
+static void bcmclis_connect(bcmclis_server_t *s, char *addr, int sock)
+{
+    bcmclis_conn_t *c;
+    bcmcli_session_parm sess_parm;
+    int rc;
+
+    if (s->parms.max_clients && s->nconns >= s->parms.max_clients)
+    {
+        bcmos_printf("bdmfmons: server %s: refused connection because max number has been reached\n", s->parms.address);
+        close(sock);
+        return;
+    }
+
+    c = bcmos_calloc(sizeof(*c) + strlen(addr) + 1);
+    if (!c)
+        goto cleanup;
+    c->address = (char *)c + sizeof(*c);
+    strcpy((char *)c->address, addr);
+    c->server = s;
+    c->sock = sock;
+
+    /* create new management session */
+    memset(&sess_parm, 0, sizeof(sess_parm));
+    sess_parm.access_right = s->parms.access;
+    sess_parm.write = bcmclis_cb_sess_write;
+    sess_parm.user_priv = c;
+    rc = bcmcli_session_open(&sess_parm, &c->session);
+    if (rc)
+        goto cleanup;
+
+    /* wait for receive in a separate thread */
+    rc = bdmf_task_create("bcmclis_rx",
+                    BDMFSYS_DEFAULT_TASK_PRIORITY,
+                    BDMFSYS_DEFAULT_TASK_STACK,
+                    bcmclis_rx_thread_handler, c,
+                    &c->rx_thread);
+    if (rc)
+        goto cleanup;
+
+    bcmos_fastlock_lock(&s->lock);
+    c->next = s->conn_list;
+    s->conn_list = c;
+    ++s->nconns;
+    bcmos_fastlock_unlock(&s->lock);
+
+    return;
+
+cleanup:
+    close(sock);
+    if (c->session)
+        bcmcli_session_close(c->session);
+    if (c)
+        bcmos_free(c);
+}
+
+/* Receive handler */
+static int bcmclis_listen_thread_handler(void *arg)
+{
+    bcmclis_server_t *s=arg;
+    sockaddr_any addr;
+    socklen_t len;
+    int sock;
+
+    while(1)
+    {
+        char caddr[64];
+        len = sizeof(addr);
+        sock = accept(s->sock, &addr.sa, &len);
+        if (sock < 0)
+        {
+            perror("accept");
+            break;
+        }
+        if (s->parms.transport==BCMCLI_TRANSPORT_DOMAIN_SOCKET)
+            strncpy(caddr, s->parms.address, sizeof(caddr)-1);
+        else
+        {
+            snprintf(caddr, sizeof(caddr)-1, "%s:%d",
+                inet_ntoa(addr.tcp_sa.sin_addr), ntohs(addr.tcp_sa.sin_port));
+        }
+        bcmclis_connect(s, caddr, sock);
+    }
+    return 0;
+}
+
+/*
+ * External API
+ */
+
+/** Create shell server.
+ * Immediately after creation server is ready to accept client connections
+ * \param[in]   parms   Server parameters
+ * \param[out]  hs      Server handle
+ * \return  0 - OK\n
+ *         <0 - error code
+ */
+bcmos_errno bcmclis_server_create(const bcmclis_parm_t *parms, int *hs)
+{
+    bcmclis_server_t *s;
+    int protocol;
+    sockaddr_any sa;
+    int len;
+    int rc;
+
+    if (!parms || !hs || !parms->address)
+        return BCM_ERR_PARM;
+
+    /* parse address */
+    if (bcmclis_parse_address(parms, &protocol, &sa, &len))
+        return BCM_ERR_PARM;
+
+    /* allocate server structure */
+    s = bcmos_calloc(sizeof(bcmclis_server_t)+strlen(parms->address)+1);
+    if (!s)
+        return BCM_ERR_NOMEM;
+    s->parms = *parms;
+    s->parms.address = (char *)s + sizeof(*s);
+    strcpy(s->parms.address, parms->address);
+    s->id = ++bcmclis_server_id;
+    bcmos_fastlock_init(&s->lock);
+
+    /* create socket and start listening */
+    s->sock = socket(protocol, SOCK_STREAM, 0);
+    if ((s->sock < 0) ||
+        (bind(s->sock, &sa.sa, len) < 0) ||
+        (listen(s->sock, 1) < 0))
+    {
+        perror("socket/bind/listen");
+        close(s->sock);
+        bcmos_free(s);
+        return BCM_ERR_PARM;
+    }
+
+    /* wait for connection(s) in a separate thread */
+    rc = bdmf_task_create("bcmclis_listen",
+                    BDMFSYS_DEFAULT_TASK_PRIORITY,
+                    BDMFSYS_DEFAULT_TASK_STACK,
+                    bcmclis_listen_thread_handler, s,
+                    &s->listen_thread);
+    if (rc)
+    {
+        close(s->sock);
+        bcmos_free(s);
+        return rc;
+    }
+
+    /* all good */
+    s->next = bcmclis_servers;
+    bcmclis_servers = s;
+    *hs = s->id;
+
+    return 0;
+}
+
+/** Destroy shell server.
+ * All client connections if any are closed
+ * \param[in]   hs      Server handle
+ * \return  0 - OK\n
+ *         <0 - error code
+ */
+bcmos_errno bcmclis_server_destroy(int hs)
+{
+    bcmclis_server_t *prev;
+    bcmclis_server_t *s = bcmclis_id_to_server(hs, &prev);
+    bcmclis_conn_t *c;
+    if (!s)
+        return BCM_ERR_NOENT;
+
+    bdmf_task_destroy(s->listen_thread);
+    close(s->sock);
+
+    /* disconnect all clients */
+    while((c = s->conn_list))
+        bcmclis_disconnect(c);
+
+    /* destroy server */
+    bcmos_fastlock_lock(&s->lock);
+    if (prev)
+        prev->next = s->next;
+    else
+        bcmclis_servers = s->next;
+    bcmos_fastlock_unlock(&s->lock);
+
+    bcmos_free(s);
+    return 0;
+}
+
+/*
+ * Shell command handlers
+ */
+
+static bcmcli_enum_val transport_type_enum_tabdmfe[] = {
+    { .name="domain_socket", .val=BCMCLI_TRANSPORT_DOMAIN_SOCKET},
+    { .name="tcp_socket", .val=BCMCLI_TRANSPORT_TCP_SOCKET},
+    BCMCLI_ENUM_LAST
+};
+
+static bcmcli_enum_val access_type_enum_tabdmfe[] = {
+    { .name="guest", .val=BCMCLI_ACCESS_GUEST},
+    { .name="admin", .val=BCMCLI_ACCESS_ADMIN},
+    { .name="debug", .val=BCMCLI_ACCESS_DEBUG},
+    BCMCLI_ENUM_LAST
+};
+
+/* Create remote shell server
+    BCMCLI_MAKE_PARM_ENUM("transport", "Transport type", transport_type_enum_tabdmfe, 0),
+    BCMCLI_MAKE_PARM("address", "Bind address", BCMCLI_PARM_STRING, 0),
+    BCMCLI_MAKE_PARM_ENUM("access", "Access level", access_type_enum_tabdmfe, 0),
+    BCMCLI_MAKE_PARM_DEFVAL("max_clients", "Max clients. 0=default", BCMCLI_PARM_NUMBER, 0, 0),
+*/
+static int bcmclis_mon_create(bcmcli_session *session, const bcmcli_cmd_parm parm[],  uint16_t n_parms)
+{
+    bcmclis_transport_type_t transport = (bcmclis_transport_type_t)parm[0].value.number;
+    char *address = (char *)parm[1].value.number;
+    bcmcli_access_right access = (bcmcli_access_right)parm[2].value.number;
+    int max_clients = (int)parm[3].value.number;
+    bcmclis_parm_t parms;
+    int hs;
+    int rc;
+
+    memset(&parms, 0, sizeof(parms));
+    parms.transport = transport;
+    parms.access = access;
+    parms.address = address;
+    parms.max_clients = max_clients;
+    rc = bcmclis_server_create(&parms, &hs);
+    if (rc)
+        bcmcli_session_print(session, "bcmclis_server_create() failed with rc=%d - %s\n",
+                        rc, bcmos_strerror(rc));
+    else
+        bcmcli_session_print(session, "Remote shell server created. Server id %d\n", hs);
+    return rc;
+}
+
+/* Destroy remote shell server
+    BCMCLI_MAKE_PARM("server_id", "Server id", BCMCLI_PARM_NUMBER, 0),
+*/
+static int bcmclis_mon_destroy(bcmcli_session *session, const bcmcli_cmd_parm parm[],  uint16_t n_parms)
+{
+    int hs = (int)parm[0].value.number;
+    int rc;
+    rc = bcmclis_server_destroy(hs);
+    bcmcli_session_print(session, "Remote shell server %d destroyed. rc=%d - %s\n",
+        hs, rc, bcmos_strerror(rc));
+    return rc;
+}
+
+/* Show remote shell servers
+*/
+static int bcmclis_mon_show(bcmcli_session *session, const bcmcli_cmd_parm parm[],  uint16_t n_parms)
+{
+    bcmclis_server_t *s=bcmclis_servers;
+    bcmclis_conn_t *c;
+    while(s)
+    {
+        bcmcli_session_print(session, "Remote server %d at %s\n", s->id, s->parms.address);
+        c = s->conn_list;
+        while(c)
+        {
+            bcmcli_session_print(session, "\t - %s. bytes sent:%d received:%d\n",
+                c->address, c->bytes_sent, c->bytes_received);
+            c = c->next;
+        }
+        s = s->next;
+    }
+    return 0;
+}
+
+/* Create shell_server directory in root_dir
+   Returns the "shell_server" directory handle
+*/
+bcmcli_entry *bcmclis_server_mon_init(bcmcli_entry *root_dir)
+{
+    bcmcli_entry *shell_dir;
+
+    if ((shell_dir=bcmcli_dir_find(NULL, "shell_server"))!=NULL)
+        return NULL;
+
+    shell_dir = bcmcli_dir_add(root_dir, "shell_server",
+                             "Remote Shell",
+                             BCMCLI_ACCESS_GUEST, NULL);
+
+    {
+        static bcmcli_cmd_parm parms[]={
+            BCMCLI_MAKE_PARM_ENUM("transport", "Transport type", transport_type_enum_tabdmfe, 0),
+            BCMCLI_MAKE_PARM("address", "Bind address: domain_socket address or TCP port", BCMCLI_PARM_STRING, 0),
+            BCMCLI_MAKE_PARM_ENUM("access", "Access level", access_type_enum_tabdmfe, 0),
+            BCMCLI_MAKE_PARM_DEFVAL("max_clients", "Max clients. 0=default", BCMCLI_PARM_NUMBER, 0, 0),
+            BCMCLI_PARM_LIST_TERMINATOR
+        };
+        bcmcli_cmd_add(shell_dir, "create", bcmclis_mon_create,
+                      "Create remote shell server",
+                      BCMCLI_ACCESS_ADMIN, NULL, parms);
+    }
+
+    {
+        static bcmcli_cmd_parm parms[]={
+            BCMCLI_MAKE_PARM("server_id", "Server id", BCMCLI_PARM_NUMBER, 0),
+            BCMCLI_PARM_LIST_TERMINATOR
+        };
+        bcmcli_cmd_add(shell_dir, "destroy", bcmclis_mon_destroy,
+                      "Destroy remote shell server",
+                      BCMCLI_ACCESS_ADMIN, NULL, parms);
+    }
+
+    {
+        bcmcli_cmd_add(shell_dir, "show", bcmclis_mon_show,
+                      "Show remote shell servers",
+                      BCMCLI_ACCESS_GUEST, NULL, NULL);
+    }
+
+    return shell_dir;
+}
+
+/* Destroy shell_server directory
+*/
+void bcmclis_server_mon_destroy(void)
+{
+    bcmcli_entry *shell_dir;
+    shell_dir=bcmcli_dir_find(NULL, "shell_server");
+    if (shell_dir)
+        bcmcli_token_destroy(shell_dir);
+}
+
diff --git a/bcm68620_release/release/host_reference/cli/bcmcli_server.h b/bcm68620_release/release/host_reference/cli/bcmcli_server.h
new file mode 100644
index 0000000..66e74e5
--- /dev/null
+++ b/bcm68620_release/release/host_reference/cli/bcmcli_server.h
@@ -0,0 +1,97 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+
+/*******************************************************************
+ * -mon_server.h
+ *
+ * BL framework - remote shell support
+ *
+ * This module is a back-end of remote shell support.
+ * - multiple servers
+ * - domain and TCP-based connections
+ * - session access level - per server
+ *******************************************************************/
+
+#ifndef BCMCLI_SERVER_H_
+#define BCMCLI_SERVER_H_
+
+#include <bcmos_system.h>
+#include <bcmcli_session.h>
+#include <bcmcli.h>
+
+/** Shell server transport type
+ */
+typedef enum {
+    BCMCLI_TRANSPORT_DOMAIN_SOCKET,
+    BCMCLI_TRANSPORT_TCP_SOCKET,
+
+    BCMCLI_TRANSPORT__NUMBER_OF
+} bcmclis_transport_type_t;
+
+/** Shell server parameters
+ */
+typedef struct bcmclis_parm
+{
+    bcmcli_access_right access;         /**< Access rights */
+    bcmclis_transport_type_t transport; /**< Transport type */
+    char *address;                      /**< Address in string form: domain socket file in local FS; port for TCP socket */
+    int max_clients;                    /**< Max number of clients */
+} bcmclis_parm_t;
+
+
+/** Create shell server.
+ * Immediately after creation server is ready to accept client connections
+ * \param[in]   parms   Server parameters
+ * \param[out]  hs      Server handle
+ * \return  0 - OK\n
+ *         <0 - error code
+ */
+bcmos_errno bcmclis_server_create(const bcmclis_parm_t *parms, int *hs);
+
+/** Destroy shell server.
+ * All client connections if any are closed
+ * \param[in]   hs      Server handle
+ * \return  0 - OK\n
+ *         <0 - error code
+ */
+bcmos_errno bcmclis_server_destroy(int hs);
+
+
+/* Create shell_server directory in root_dir
+   Returns the "shell_server" directory handle
+*/
+bcmcli_entry *bcmclis_server_mon_init(bcmcli_entry *root_dir);
+
+
+/* Destroy shell_server directory
+*/
+void bcmclis_server_mon_destroy(void);
+
+#endif /* BCMCLI_SERVER_H_ */
diff --git a/bcm68620_release/release/host_reference/cli/bcmcli_session.c b/bcm68620_release/release/host_reference/cli/bcmcli_session.c
new file mode 100644
index 0000000..519eaa8
--- /dev/null
+++ b/bcm68620_release/release/host_reference/cli/bcmcli_session.c
@@ -0,0 +1,587 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+
+/*******************************************************************
+ * bcmcli_session.c
+ *
+ * CLI engine - session management
+ *
+ *******************************************************************/
+
+#include <bcmos_system.h>
+#include <bcmolt_utils.h>
+
+#define BCMCLI_INTERNAL
+#include <bcmcli_session.h>
+
+static bcmos_fastlock session_lock;
+static bcmcli_session *session_list;
+static int session_module_initialized;
+
+/*
+ * Internal functions
+ */
+
+static void _bcmcli_session_update_prompt(bcmcli_session *session)
+{
+    if (!session)
+        return;
+
+    if (session->parms.get_prompt)
+    {
+        session->parms.get_prompt(session, session->prompt_buf, BCMCLI_MAX_PROMPT_LEN);
+        session->prompt_buf[BCMCLI_MAX_PROMPT_LEN - 1] = '\0';
+    }
+    else
+    {
+        session->prompt_buf[0] = '\0';
+    }
+}
+
+static char *_bcmcli_session_gets(bcmcli_session *session, char *buffer, uint32_t size)
+{
+    const char *line = NULL;
+    _bcmcli_session_update_prompt(session);
+#ifdef CONFIG_LIBEDIT
+    if (session && session->el && session->history)
+    {
+        int line_len;
+        line = (el_gets(session->el, &line_len));
+        if (!line)
+            return NULL;
+        if (line_len > size)
+        {
+            bcmos_printf("%s: buffer is too short %u - got %d. Truncated\n",
+                        __FUNCTION__, size, line_len);
+        }
+        strncpy(buffer, line, size);
+        if (*line && *line != '\n' && *line != '#')
+            history(session->history, &session->histevent, H_ENTER, line);
+    }
+    else
+#endif
+#ifdef CONFIG_LINENOISE
+    if (session && session->ln_session)
+    {
+        char *ln_line = linenoise(session->ln_session, session->prompt_buf, buffer, size);
+        if (ln_line)
+        {
+            if (strlen(ln_line))
+            {
+                linenoiseHistoryAdd(session->ln_session, ln_line); /* Add to the history. */
+            }
+            else
+            {
+                strncpy(buffer, "\n", size-1);
+            }
+            buffer[size-1] = 0;
+            line = buffer;
+        }
+    }
+    else
+#endif
+    {
+        bcmcli_session_print(session, "%s", session->prompt_buf);
+        if (session && session->parms.gets)
+            line = session->parms.gets(session, buffer, size);
+        else
+            line = fgets(buffer, size, stdin);
+    }
+    return line ? buffer : NULL;
+}
+
+#ifdef CONFIG_LIBEDIT
+
+static char *_bcmcli_editline_prompt(EditLine *e)
+{
+    bcmcli_session *session = NULL;
+    el_get(e, EL_CLIENTDATA, &session);
+    BUG_ON(session == NULL || session->magic != BCMCLI_SESSION_MAGIC);
+    _bcmcli_session_update_prompt(session);
+    return session->prompt_buf;
+}
+
+static int _bcmcli_editline_cfn(EditLine *el, char *c)
+{
+    bcmcli_session *session = NULL;
+    char insert_buf[80];
+    int c1;
+    bcmos_errno rc;
+
+    el_get(el, EL_CLIENTDATA, &session);
+    BUG_ON(session == NULL || session->magic != BCMCLI_SESSION_MAGIC);
+    c1 = session->parms.get_char(session);
+
+    /* ToDo: handle \t parameter extension */
+    while (c1 > 0 && c1 == '\t')
+    {
+
+        const LineInfo *li = el_line(el);
+        char *line = bcmos_alloc(li->cursor - li->buffer + 1);
+        if (!line)
+            continue;
+        memcpy(line, li->buffer, li->cursor - li->buffer);
+        line[li->cursor - li->buffer] = 0;
+        rc = bcmcli_extend(session, line, insert_buf, sizeof(insert_buf));
+        bcmos_free(line);
+        if (rc)
+        {
+            c1 = session->parms.get_char(session);
+            continue;
+        }
+        el_insertstr(el, insert_buf);
+        printf("\r");
+        el_set(el, EL_REFRESH, NULL);
+        c1 = session->parms.get_char(session);
+    }
+    if (c1 < 0)
+        return -1;
+    *c = c1;
+    return 1;
+}
+#endif
+
+/* linenoise line editing library: completion support */
+#ifdef CONFIG_LINENOISE
+
+static int _bcmcli_linenoise_read_char(long fd_in, char *c)
+{
+    bcmcli_session *session = (bcmcli_session *)fd_in;
+    int c1;
+    c1 = session->parms.get_char(session);
+    if (c1 < 0)
+    {
+        return -1;
+    }
+    *c = c1;
+    return 1;
+}
+
+static int _bcmcli_linenoise_write(long fd_out, const char *buf, size_t len)
+{
+    bcmcli_session *session = (bcmcli_session *)fd_out;
+    /* Use a shortcut for len==1 - which is char-by-char input.
+       bcmos_printf("%*s", buf, 1) misbehaves on vxw platform,
+       possibly because it is too slow.
+    */
+    if (len == 1 && !session->parms.write)
+    {
+        bcmos_putchar(buf[0]);
+        return 1;
+    }
+    return bcmcli_session_write(session, buf, len);
+}
+
+static int _bcmcli_linenoise_tab(linenoiseSession *ln_session, const char *buf, int pos)
+{
+    bcmcli_session *session = NULL;
+    char *line;
+    char insert_buf[80]="";
+    bcmos_errno rc;
+    int len;
+
+    session = linenoiseSessionData(ln_session);
+    BUG_ON(session == NULL || session->magic != BCMCLI_SESSION_MAGIC);
+    line = bcmos_alloc(strlen(buf)+1);
+    if (!line)
+        return 0;
+    strcpy(line, buf);
+    rc = bcmcli_extend(session, line, insert_buf, sizeof(insert_buf));
+    bcmos_free(line);
+    if (rc || !strlen(insert_buf))
+        return 0;
+
+    len = strlen(buf);
+    line = bcmos_alloc(strlen(buf)+strlen(insert_buf)+1);
+    if (!line)
+        return 0;
+    if (pos >=0 && pos < len)
+    {
+        strncpy(line, buf, pos);
+        line[pos] = 0;
+        strcat(line, insert_buf);
+        strcat(line, &buf[pos]);
+        pos += strlen(insert_buf);
+    }
+    else
+    {
+        strcpy(line, buf);
+        strcat(line, insert_buf);
+        pos = strlen(line);
+    }
+    linenoiseSetBuffer(ln_session, line, pos);
+    bcmos_free(line);
+    return 1;
+}
+
+#endif
+
+/* Default getc function */
+static int _bcmcli_session_get_char(bcmcli_session *session)
+{
+    return bcmos_getchar();
+}
+
+/** Initialize session management module
+ * \return
+ *      0   =OK\n
+ *      <0  =error code
+ */
+static void bcmcli_session_module_init(void)
+{
+    bcmos_fastlock_init(&session_lock, 0);
+    session_module_initialized = 1;
+}
+
+/** Open management session */
+int bcmcli_session_open_user(const bcmcli_session_parm *parm, bcmcli_session **p_session)
+{
+    bcmcli_session *session;
+    bcmcli_session **p_last_next;
+    const char *name;
+    char *name_clone;
+    long flags;
+    int size;
+
+    if (!p_session || !parm)
+        return BCM_ERR_PARM;
+#ifndef CONFIG_EDITLINE
+    if (parm->line_edit_mode == BCMCLI_LINE_EDIT_ENABLE)
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Line editing feature is not compiled in. define CONFIG_EDITLINE\n");
+        return BCM_ERR_NOT_SUPPORTED;
+    }
+#endif
+    if (!session_module_initialized)
+        bcmcli_session_module_init();
+    name = parm->name;
+    if (!name)
+        name = "*unnamed*";
+    size = sizeof(bcmcli_session) + strlen(name) + 1 + parm->extra_size;
+    session=bcmos_calloc(size);
+    if (!session)
+        return BCM_ERR_NOMEM;
+    session->parms = *parm;
+    name_clone = (char *)session + sizeof(bcmcli_session) + parm->extra_size;
+    strcpy(name_clone, name);
+    session->parms.name = name_clone;
+    if (!session->parms.get_char)
+        session->parms.get_char = _bcmcli_session_get_char;
+
+#ifdef CONFIG_LIBEDIT
+    if (!parm->gets && (parm->line_edit_mode == BCMCLI_LINE_EDIT_ENABLE ||
+        parm->line_edit_mode == BCMCLI_LINE_EDIT_DEFAULT))
+    {
+        /* Initialize editline library */
+        session->el = el_init(session->parms.name, stdin, stdout, stderr);
+        session->history = history_init();
+        if (session->el && session->history)
+        {
+            el_set(session->el, EL_EDITOR, "emacs");
+            el_set(session->el, EL_PROMPT, &_bcmcli_editline_prompt);
+            el_set(session->el, EL_TERMINAL, "xterm");
+            el_set(session->el, EL_GETCFN, _bcmcli_editline_cfn);
+            el_set(session->el, EL_CLIENTDATA, session);
+            history(session->history, &session->histevent, H_SETSIZE, 800);
+            el_set(session->el, EL_HIST, history, session->history);
+        }
+        else
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Can't initialize editline library\n");
+            bcmos_free(session);
+            return BCM_ERR_INTERNAL;
+        }
+    }
+#endif
+
+#ifdef CONFIG_LINENOISE
+    /* Set the completion callback. This will be called every time the
+     * user uses the <tab> key. */
+    if (!parm->gets && (parm->line_edit_mode == BCMCLI_LINE_EDIT_ENABLE ||
+                        parm->line_edit_mode == BCMCLI_LINE_EDIT_DEFAULT))
+    {
+        linenoiseSessionIO io={.fd_in=(long)session, .fd_out=(long)session,
+            .read_char=_bcmcli_linenoise_read_char,
+            .write=_bcmcli_linenoise_write
+        };
+        if (linenoiseSessionOpen(&io, session, &session->ln_session))
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Can't create linenoise session\n");
+            bcmos_free(session);
+            return BCM_ERR_INTERNAL;
+        }
+        linenoiseSetCompletionCallback(session->ln_session, _bcmcli_linenoise_tab);
+    }
+#endif
+
+    session->magic = BCMCLI_SESSION_MAGIC;
+
+    flags = bcmos_fastlock_lock(&session_lock);
+    p_last_next = &session_list;
+    while(*p_last_next)
+        p_last_next = &((*p_last_next)->next);
+    *p_last_next = session;
+    bcmos_fastlock_unlock(&session_lock, flags);
+
+    *p_session = session;
+
+    return 0;
+}
+
+static int bcmcli_session_string_write(bcmcli_session *session, const char *buf, uint32_t size)
+{
+    bcmolt_string *str = bcmcli_session_user_priv(session);
+    return bcmolt_string_copy(str, buf, size);
+}
+
+bcmos_errno bcmcli_session_open_string(bcmcli_session **session, bcmolt_string *str)
+{
+    bcmcli_session_parm sp = { .user_priv = str, .write = bcmcli_session_string_write };
+
+    return bcmcli_session_open_user(&sp, session);
+}
+
+/** Close management session.
+ * \param[in]   session         Session handle
+ */
+void bcmcli_session_close(bcmcli_session *session)
+{
+    long flags;
+
+    BUG_ON(session->magic != BCMCLI_SESSION_MAGIC);
+    flags = bcmos_fastlock_lock(&session_lock);
+    if (session==session_list)
+        session_list = session->next;
+    else
+    {
+        bcmcli_session *prev = session_list;
+        while (prev && prev->next != session)
+            prev = prev->next;
+        if (!prev)
+        {
+            bcmos_fastlock_unlock(&session_lock, flags);
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "%s: can't find session\n", __FUNCTION__);
+            return;
+        }
+        prev->next = session->next;
+    }
+    bcmos_fastlock_unlock(&session_lock, flags);
+
+#ifdef CONFIG_LIBEDIT
+    if (session->history)
+        history_end(session->history);
+    if (session->el)
+        el_end(session->el);
+#endif
+#ifdef CONFIG_LINENOISE
+    if (session->ln_session)
+        linenoiseSessionClose(session->ln_session);
+#endif
+    session->magic = BCMCLI_SESSION_MAGIC_DEL;
+    bcmos_free(session);
+
+}
+
+/** Configure RAW input mode
+ *
+ * \param[in]       session         Session handle
+ * \param[in]       is_raw          TRUE=enable raw mode, FALSE=disable raw mode
+ * \return
+ *      =0  - OK \n
+ *      BCM_ERR_NOT_SUPPORTED - raw mode is not supported\n
+ */
+bcmos_errno bcmcli_session_raw_mode_set(bcmcli_session *session, bcmos_bool is_raw)
+{
+#ifdef CONFIG_LINENOISE
+    int rc;
+    if (session->parms.gets)
+        return BCM_ERR_NOT_SUPPORTED;
+    rc = linenoiseSetRaw(session->ln_session, is_raw);
+    return (rc == 0) ? BCM_ERR_OK : BCM_ERR_NOT_SUPPORTED;
+#else
+    return BCM_ERR_NOT_SUPPORTED;
+#endif
+}
+
+/** Default write callback function
+ * write to stdout
+ */
+static int _bcmcli_session_write(bcmcli_session *session, const char *buf, uint32_t size)
+{
+    return bcmos_printf("%.*s", size, buf);
+}
+
+
+/** Write function.
+ * Write buffer to the current session.
+ * \param[in]   session         Session handle. NULL=use stdout
+ * \param[in]   buffer          output buffer
+ * \param[in]   size            number of bytes to be written
+ * \return
+ *  >=0 - number of bytes written\n
+ *  <0  - output error
+ */
+int bcmcli_session_write(bcmcli_session *session, const char *buf, uint32_t size)
+{
+    int (*write_cb)(bcmcli_session *session, const char *buf, uint32_t size);
+    if (session && session->parms.write)
+    {
+        BUG_ON(session->magic != BCMCLI_SESSION_MAGIC);
+        write_cb = session->parms.write;
+    }
+    else
+        write_cb = _bcmcli_session_write;
+    return write_cb(session, buf, size);
+}
+
+
+/** Read line
+ * \param[in]       session         Session handle. NULL=use default
+ * \param[in,out]   buf             input buffer
+ * \param[in]       size            buf size
+ * \return
+ *      buf if successful
+ *      NULL if EOF or error
+ */
+char *bcmcli_session_gets(bcmcli_session *session, char *buf, uint32_t size)
+{
+    return _bcmcli_session_gets(session, buf, size);
+}
+
+
+/** Print function.
+ * Prints in the context of current session.
+ * \param[in]   session         Session handle. NULL=use stdout
+ * \param[in]   format          print format - as in printf
+ * \param[in]   ap              parameters list. Undefined after the call
+ */
+void bcmcli_session_vprint(bcmcli_session *session, const char *format, va_list ap)
+{
+    if (session && session->parms.write)
+    {
+        BUG_ON(session->magic != BCMCLI_SESSION_MAGIC);
+        vsnprintf(session->outbuf, sizeof(session->outbuf), format, ap);
+        bcmcli_session_write(session, session->outbuf, strlen(session->outbuf));
+    }
+    else
+        bcmos_vprintf(format, ap);
+}
+
+
+/** Print function.
+ * Prints in the context of current session.
+ * \param[in]   session         Session handle. NULL=use stdout
+ * \param[in]   format          print format - as in printf
+ */
+void bcmcli_session_print(bcmcli_session *session, const char *format, ...)
+{
+    va_list ap;
+    va_start(ap, format);
+    bcmcli_session_vprint(session, format, ap);
+    va_end(ap);
+}
+
+/** Get user_priv provoded in session partameters when it was registered
+ * \param[in]       session         Session handle. NULL=use stdin
+ * \return usr_priv value
+ */
+void *bcmcli_session_user_priv(bcmcli_session *session)
+{
+    if (!session)
+        return NULL;
+    BUG_ON(session->magic != BCMCLI_SESSION_MAGIC);
+    return session->parms.user_priv;
+}
+
+
+/** Get extra data associated with the session
+ * \param[in]       session         Session handle. NULL=default session
+ * \return extra_data pointer or NULL if there is no extra data
+ */
+void *bcmcli_session_data(bcmcli_session *session)
+{
+    if (!session)
+        return NULL;
+    BUG_ON(session->magic != BCMCLI_SESSION_MAGIC);
+    if (session->parms.extra_size <= 0)
+        return NULL;
+    return (char *)session + sizeof(*session);
+}
+
+
+/** Get session namedata
+ * \param[in]       session         Session handle. NULL=default session
+ * \return session name
+ */
+const char *bcmcli_session_name(bcmcli_session *session)
+{
+    if (!session)
+        return NULL;
+    BUG_ON(session->magic != BCMCLI_SESSION_MAGIC);
+    return session->parms.name;
+}
+
+
+/** Get session access righte
+ * \param[in]       session         Session handle. NULL=default debug session
+ * \return session access right
+ */
+bcmcli_access_right bcmcli_session_access_right(bcmcli_session *session)
+{
+    if (!session)
+        return BCMCLI_ACCESS_DEBUG;
+    BUG_ON(session->magic != BCMCLI_SESSION_MAGIC);
+    return session->parms.access_right;
+}
+
+/** Print buffer in hexadecimal format
+ * \param[in]   session         Session handle. NULL=use stdout
+ * \param[in]   buffer          Buffer address
+ * \param[in]   offset          Start offset in the buffer
+ * \param[in]   count           Number of bytes to dump
+ * \param[in]   indent          Optional indentation string
+ */
+void bcmcli_session_hexdump(bcmcli_session *session, const void *buffer, uint32_t offset, uint32_t count, const char *indent)
+{
+    bcmos_hexdump((bcmos_msg_print_cb)bcmcli_session_print, session, buffer, offset, count, indent);
+}
+
+/*
+ * Exports
+ */
+EXPORT_SYMBOL(bcmcli_session_open);
+EXPORT_SYMBOL(bcmcli_session_close);
+EXPORT_SYMBOL(bcmcli_session_write);
+EXPORT_SYMBOL(bcmcli_session_vprint);
+EXPORT_SYMBOL(bcmcli_session_print);
+EXPORT_SYMBOL(bcmcli_session_access_right);
+EXPORT_SYMBOL(bcmcli_session_data);
+EXPORT_SYMBOL(bcmcli_session_name);
+EXPORT_SYMBOL(bcmcli_session_hexdump);
diff --git a/bcm68620_release/release/host_reference/cli/bcmcli_session.h b/bcm68620_release/release/host_reference/cli/bcmcli_session.h
new file mode 100644
index 0000000..30d873d
--- /dev/null
+++ b/bcm68620_release/release/host_reference/cli/bcmcli_session.h
@@ -0,0 +1,309 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+
+/*******************************************************************
+ * bcmcli_session.h
+ *
+ * BCM CLI engine - session management
+ *
+ *******************************************************************/
+
+#ifndef BCMCLI_SESSION_H
+
+#define BCMCLI_SESSION_H
+
+#include <bcmos_system.h>
+#include <stdarg.h>
+#include "bcmolt_string.h"
+
+/** \defgroup bcmcli_session Management Session Control
+ *
+ * APIs in this header file allow to create/destroy management sessions.
+ * Management session is characterized by its access level and also
+ * input/output functions.
+ * Management sessions allow managed entities in the system to communicate
+ * with local or remote managers (e.g., local or remote shell or NMS)
+ * @{
+ */
+
+/** Access rights */
+typedef enum
+{
+    BCMCLI_ACCESS_GUEST,     /**< Guest. Doesn't have access to commands and directories registered with ADMIN rights */
+    BCMCLI_ACCESS_ADMIN,     /**< Administrator: full access */
+    BCMCLI_ACCESS_DEBUG,     /**< Administrator: full access + extended debug features */
+} bcmcli_access_right;
+
+/** Line edit mode */
+typedef enum
+{
+    BCMCLI_LINE_EDIT_DEFAULT,/**< Enable line editing and history if CONFIG_EDITLINE is defined, disable otherwise */
+    BCMCLI_LINE_EDIT_ENABLE, /**< Enable line editing. Requires CONFIG_EDITLINE define and libedit-dev library */
+    BCMCLI_LINE_EDIT_DISABLE,/**< Disable line editing and history */
+} bcmcli_line_edit_mode;
+
+
+/** Management session handle
+ */
+typedef struct bcmcli_session bcmcli_session;
+
+
+/** Session parameters structure.
+ * See \ref bcmcli_session_open
+ */
+typedef struct bcmcli_session_parm
+{
+    const char *name;       /**< Session name */
+    void *user_priv;        /**< Private user's data */
+
+    /** Session's output function. NULL=use write(stdout)
+     * returns the number of bytes written or <0 if error
+     */
+    int (*write)(bcmcli_session *session, const char *buf, uint32_t size);
+
+    /** Session line input function. NULL=use default(stdin[+line edit) */
+    char *(*gets)(bcmcli_session *session, char *buf, uint32_t size);
+
+    /** Session char input function. NULL=use bcmos_getchar() */
+    int (*get_char)(bcmcli_session *session);
+
+    /** Fill the specified buffer with the prompt for this session (NULL-terminated). NULL = no prompt. */
+    void (*get_prompt)(bcmcli_session *session, char *buf, uint32_t max_len);
+
+    /** Access rights */
+    bcmcli_access_right access_right;
+
+    /** Line editing mode */
+    bcmcli_line_edit_mode line_edit_mode;
+
+    /** Extra data size to be allocated along with session control block.
+     * The extra data is accessible using bcmcli_session_data().
+     * Please note that if session is created using bcmcli_session_open(),
+     * extra_size is reserved.
+     * It can only be used for user context allocation if session is created
+     * using bcmcli_session_open_user()
+     */
+    uint32_t extra_size;
+} bcmcli_session_parm;
+
+
+/** Open monitor session
+ *
+ * Monitor supports multiple simultaneous sessions with different
+ * access rights.
+ * Note that there already is a default session with full administrative rights,
+ * that takes input from stdin and outputs to stdout.
+ *
+ * Please don't use parm.extra_size. This field is reserved.
+ *
+ * \param[in]   parm        Session parameters. Must not be allocated on the stack.
+ * \param[out]  p_session   Session handle
+ * \return
+ *      0   =OK\n
+ *      <0  =error code
+ */
+bcmos_errno bcmcli_session_open(const bcmcli_session_parm *parm, bcmcli_session **p_session);
+
+
+/** Close monitor session.
+ * \param[in]   session         Session handle
+ */
+void bcmcli_session_close(bcmcli_session *session );
+
+
+/** Write function.
+ * Write buffer to the current session.
+ * \param[in]   session         Session handle. NULL=use stdout
+ * \param[in]   buf             output buffer
+ * \param[in]   size            number of bytes to be written
+ * \return
+ *  >=0 - number of bytes written\n
+ *  <0  - output error
+ */
+int bcmcli_session_write(bcmcli_session *session, const char *buf, uint32_t size);
+
+
+/** Read line
+ * \param[in]       session         Session handle. NULL=use default
+ * \param[in,out]   buf             input buffer
+ * \param[in]       size            buf size
+ * \return
+ *      buf if successful
+ *      NULL if EOF or error
+ */
+char *bcmcli_session_gets(bcmcli_session *session, char *buf, uint32_t size);
+
+
+/** Print function.
+ * Prints in the context of current session.
+ * \param[in]   session         Session handle. NULL=use stdout
+ * \param[in]   format          print format - as in printf
+ */
+void bcmcli_session_print(bcmcli_session *session, const char *format, ...)
+#ifndef BCMCLI_SESSION_DISABLE_FORMAT_CHECK
+__attribute__((format(printf, 2, 3)))
+#endif
+;
+
+
+/** Print function.
+ * Prints in the context of current session.
+ * \param[in]   session         Session handle. NULL=use stdout
+ * \param[in]   format          print format - as in printf
+ * \param[in]   ap              parameters list. Undefined after the call
+ */
+void bcmcli_session_vprint(bcmcli_session *session, const char *format, va_list ap);
+
+/** Print buffer in hexadecimal format
+ * \param[in]   session         Session handle. NULL=use stdout
+ * \param[in]   buffer          Buffer address
+ * \param[in]   offset          Start offset in the buffer
+ * \param[in]   count           Number of bytes to dump
+ * \param[in]   indent          Optional indentation string
+ */
+void bcmcli_session_hexdump(bcmcli_session *session, const void *buffer, uint32_t offset, uint32_t count, const char *indent);
+
+/** Get extra data associated with the session
+ * \param[in]       session         Session handle. NULL=default session
+ * \return extra_data pointer or NULL if there is no extra data
+ */
+void *bcmcli_session_data(bcmcli_session *session);
+
+
+/** Get user_priv provided in session parameters when it was registered
+ * \param[in]       session         Session handle. NULL=default session
+ * \return usr_priv value
+ */
+void *bcmcli_session_user_priv(bcmcli_session *session);
+
+
+/** Get session name
+ * \param[in]       session         Session handle. NULL=use stdin
+ * \return session name
+ */
+const char *bcmcli_session_name(bcmcli_session *session);
+
+
+/** Get session access rights
+ * \param[in]       session         Session handle. NULL=default debug session
+ * \return session access right
+ */
+bcmcli_access_right bcmcli_session_access_right(bcmcli_session *session);
+
+/** @} end of bcmcli_session group */
+
+/** Low-level interface for when session is used outside CLI
+ *
+ * \param[in]   parm        Session parameters. Must not be allocated on the stack.
+ * \param[out]  p_session   Session handle
+ * \return
+ *      0   =OK\n
+ *      <0  =error code
+ */
+int bcmcli_session_open_user(const bcmcli_session_parm *parm, bcmcli_session **p_session);
+
+/** Open a session that prints to the specified string
+ */
+bcmos_errno bcmcli_session_open_string(bcmcli_session **session, bcmolt_string *str);
+
+/** Configure RAW input mode
+ *
+ * \param[in]       session         Session handle
+ * \param[in]       is_raw          TRUE=enable raw mode, FALSE=disable raw mode
+ * \return
+ *      =0  - OK \n
+ *      BCM_ERR_NOT_SUPPORTED - raw mode is not supported\n
+ */
+bcmos_errno bcmcli_session_raw_mode_set(bcmcli_session *session, bcmos_bool is_raw);
+
+/** Context extension
+ *
+ * - if no command - display list of command or extend command
+ * - if prev char is " "
+ *      - if positional and next parm is enum - show/extends list of matching values
+ *      - else - show/extend list of unused parameters
+ *   else
+ *      - if entering value and enum - show/extends list of matching values
+ *      - else - show/extend list of matching unused parameters
+ *
+ * \param[in]       session         Session handle
+ * \param[in]       input_string    String to be parsed
+ * \param[out]      insert_str      String to insert at cursor position
+ * \param[in]       insert_size     Insert buffer size
+ * \return
+ *      =0  - OK \n
+ *      BCM_ERR_PARM - parsing error\n
+ */
+bcmos_errno bcmcli_extend(bcmcli_session *session, char *input_string,
+    char *insert_str, uint32_t insert_size);
+
+
+#ifdef BCMCLI_INTERNAL
+
+#define BCMCLI_SESSION_OUTBUF_LEN 2048
+#define BCMCLI_MAX_PROMPT_LEN 8
+
+/* editline functionality */
+/* If libedit is included - it takes precedence */
+#ifdef CONFIG_LIBEDIT
+#include <histedit.h>
+#undef CONFIG_LINENOISE
+#endif /* #ifdef CONFIG_LIBEDIT */
+
+#ifdef CONFIG_LINENOISE
+#include <linenoise.h>
+#endif
+
+/* Management session structure */
+struct bcmcli_session
+{
+    bcmcli_session *next;
+    bcmcli_session_parm parms;
+    uint32_t magic;
+#define BCMCLI_SESSION_MAGIC            (('s'<<24)|('e'<<16)|('s'<<8)|'s')
+#define BCMCLI_SESSION_MAGIC_DEL        (('s'<<24)|('e'<<16)|('s'<<8)|'~')
+
+    /* Line editing and history support */
+#ifdef CONFIG_LIBEDIT
+    EditLine *el;
+    History *history;
+    HistEvent histevent;
+#endif
+#ifdef CONFIG_LINENOISE
+    linenoiseSession *ln_session;
+#endif
+    char outbuf[BCMCLI_SESSION_OUTBUF_LEN];
+    char prompt_buf[BCMCLI_MAX_PROMPT_LEN];
+
+    /* Followed by session data */
+};
+#endif
+
+#endif /* #ifndef BCMCLI_SESSION_H */
diff --git a/bcm68620_release/release/host_reference/common_epon_oam/Makefile b/bcm68620_release/release/host_reference/common_epon_oam/Makefile
new file mode 100644
index 0000000..0d6148e
--- /dev/null
+++ b/bcm68620_release/release/host_reference/common_epon_oam/Makefile
@@ -0,0 +1,7 @@
+# Common API
+#
+MOD_NAME = common_epon_oam
+MOD_TYPE = lib
+MOD_DEPS = utils dev_log
+
+srcs = bcmolt_epon_oam_types.c
diff --git a/bcm68620_release/release/host_reference/common_epon_oam/bcmolt_epon_oam_types.c b/bcm68620_release/release/host_reference/common_epon_oam/bcmolt_epon_oam_types.c
new file mode 100644
index 0000000..a9ad22e
--- /dev/null
+++ b/bcm68620_release/release/host_reference/common_epon_oam/bcmolt_epon_oam_types.c
@@ -0,0 +1,82635 @@
+/*
+<:copyright-BRCM:2016:proprietary:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+This program is the proprietary software of Broadcom Corporation and/or its
+licensors, and may only be used, duplicated, modified or distributed pursuant
+to the terms and conditions of a separate, written license agreement executed
+between you and Broadcom (an "Authorized License").  Except as set forth in
+an Authorized License, Broadcom grants no license (express or implied), right
+to use, or waiver of any kind with respect to the Software, and Broadcom
+expressly reserves all rights in and to the Software and all intellectual
+property rights therein.  IF YOU HAVE NO AUTHORIZED LICENSE, THEN YOU HAVE
+NO RIGHT TO USE THIS SOFTWARE IN ANY WAY, AND SHOULD IMMEDIATELY NOTIFY
+BROADCOM AND DISCONTINUE ALL USE OF THE SOFTWARE.
+
+Except as expressly set forth in the Authorized License,
+
+1. This program, including its structure, sequence and organization,
+    constitutes the valuable trade secrets of Broadcom, and you shall use
+    all reasonable efforts to protect the confidentiality thereof, and to
+    use this information only in connection with your use of Broadcom
+    integrated circuit products.
+
+2. TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
+    AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES, REPRESENTATIONS OR
+    WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH
+    RESPECT TO THE SOFTWARE.  BROADCOM SPECIFICALLY DISCLAIMS ANY AND
+    ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY, NONINFRINGEMENT,
+    FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES, ACCURACY OR
+    COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR CORRESPONDENCE
+    TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING OUT OF USE OR
+    PERFORMANCE OF THE SOFTWARE.
+
+3. TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM OR
+    ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL, INCIDENTAL, SPECIAL,
+    INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER ARISING OUT OF OR IN ANY
+    WAY RELATING TO YOUR USE OF OR INABILITY TO USE THE SOFTWARE EVEN
+    IF BROADCOM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES;
+    OR (ii) ANY AMOUNT IN EXCESS OF THE AMOUNT ACTUALLY PAID FOR THE
+    SOFTWARE ITSELF OR U.S. $1, WHICHEVER IS GREATER. THESE LIMITATIONS
+    SHALL APPLY NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY
+    LIMITED REMEDY.
+:>
+*/
+#include "bcmolt_epon_oam_types.h"
+
+#define bcmolt_epon_oam_buf_init(buf, size, start)  bcmolt_buf_init(buf, size, start, BCMOLT_BUF_ENDIAN_FIXED)
+#define bcmolt_epon_oam_buf_skip                    bcmolt_buf_skip
+#define bcmolt_epon_oam_buf_set_pos                 bcmolt_buf_set_pos
+#define bcmolt_epon_oam_buf_get_used                bcmolt_buf_get_used
+#define bcmolt_epon_oam_buf_get_remaining_size      bcmolt_buf_get_remaining_size
+#define bcmolt_epon_oam_buf_write                   bcmolt_buf_write
+#define bcmolt_epon_oam_buf_read                    bcmolt_buf_read
+#define bcmolt_epon_oam_buf_write_u8                bcmolt_buf_write_u8
+#define bcmolt_epon_oam_buf_read_u8                 bcmolt_buf_read_u8
+#define bcmolt_epon_oam_buf_write_u16               bcmolt_buf_write_u16
+#define bcmolt_epon_oam_buf_read_u16                bcmolt_buf_read_u16
+#define bcmolt_epon_oam_buf_write_u24               bcmolt_buf_write_u24
+#define bcmolt_epon_oam_buf_read_u24                bcmolt_buf_read_u24
+#define bcmolt_epon_oam_buf_write_u32               bcmolt_buf_write_u32
+#define bcmolt_epon_oam_buf_read_u32                bcmolt_buf_read_u32
+#define bcmolt_epon_oam_buf_write_s32               bcmolt_buf_write_s32
+#define bcmolt_epon_oam_buf_read_s32                bcmolt_buf_read_s32
+#define bcmolt_epon_oam_buf_write_u64               bcmolt_buf_write_u64
+#define bcmolt_epon_oam_buf_read_u64                bcmolt_buf_read_u64
+#define bcmolt_epon_oam_buf_write_bool              bcmolt_buf_write_bool
+#define bcmolt_epon_oam_buf_read_bool               bcmolt_buf_read_bool
+#define bcmolt_epon_oam_buf_write_mac_address       bcmolt_buf_write_mac_address
+#define bcmolt_epon_oam_buf_read_mac_address        bcmolt_buf_read_mac_address
+#define bcmolt_epon_oam_buf_write_ipv4_address      bcmolt_buf_write_ipv4_address
+#define bcmolt_epon_oam_buf_read_ipv4_address       bcmolt_buf_read_ipv4_address
+#define bcmolt_epon_oam_buf_write_ipv6_address      bcmolt_buf_write_ipv6_address
+#define bcmolt_epon_oam_buf_read_ipv6_address       bcmolt_buf_read_ipv6_address
+#define bcmolt_epon_oam_buf_write_vlan_tag          bcmolt_buf_write_vlan_tag
+#define bcmolt_epon_oam_buf_read_vlan_tag           bcmolt_buf_read_vlan_tag
+
+static uint24_t uint32_t_to_uint24_t(uint32_t u32)
+{
+    uint24_t u24;
+
+    u24.u8[0] = (u32 >> 16) & 0xff;
+    u24.u8[1] = (u32 >> 8) & 0xff;
+    u24.u8[2] = (u32 >> 0) & 0xff;
+
+    return u24;
+}
+
+static uint32_t uint24_t_to_uint32_t(uint24_t u24)
+{
+    uint32_t u32 = 0;
+
+    u32 |= u24.u8[0] << 16;
+    u32 |= u24.u8[1] << 8;
+    u32 |= u24.u8[2] << 0;
+
+    return u32;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_alarm_config_mode_pack(bcmolt_epon_oam_alarm_config_mode this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_alarm_config_mode_unpack(bcmolt_epon_oam_alarm_config_mode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_autonegotiate_admin_state_pack(bcmolt_epon_oam_autonegotiate_admin_state this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_autonegotiate_admin_state_unpack(bcmolt_epon_oam_autonegotiate_admin_state *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_auto_negotiation_auto_config_pack(bcmolt_epon_oam_auto_negotiation_auto_config this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_auto_negotiation_auto_config_unpack(bcmolt_epon_oam_auto_negotiation_auto_config *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_auto_negotiation_capability_pack(bcmolt_epon_oam_auto_negotiation_capability this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_auto_negotiation_capability_unpack(bcmolt_epon_oam_auto_negotiation_capability *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_auto_remote_sig_pack(bcmolt_epon_oam_auto_remote_sig this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_auto_remote_sig_unpack(bcmolt_epon_oam_auto_remote_sig *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_auto_selector_pack(bcmolt_epon_oam_auto_selector this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_auto_selector_unpack(bcmolt_epon_oam_auto_selector *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_binary_field_select_type_pack(bcmolt_epon_oam_binary_field_select_type this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_binary_field_select_type_unpack(bcmolt_epon_oam_binary_field_select_type *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cmc_request_option_pack(bcmolt_epon_oam_brcm_cmc_request_option this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cmc_request_option_unpack(bcmolt_epon_oam_brcm_cmc_request_option *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cmc_result_code_pack(bcmolt_epon_oam_brcm_cmc_result_code this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cmc_result_code_unpack(bcmolt_epon_oam_brcm_cmc_result_code *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cmc_annex_pack(bcmolt_epon_oam_brcm_cmc_annex this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cmc_annex_unpack(bcmolt_epon_oam_brcm_cmc_annex *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cmc_intf_type_pack(bcmolt_epon_oam_brcm_cmc_intf_type this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cmc_intf_type_unpack(bcmolt_epon_oam_brcm_cmc_intf_type *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cmc_interface_status_pack(bcmolt_epon_oam_brcm_cmc_interface_status this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cmc_interface_status_unpack(bcmolt_epon_oam_brcm_cmc_interface_status *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cmc_interleaver_pack(bcmolt_epon_oam_brcm_cmc_interleaver this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cmc_interleaver_unpack(bcmolt_epon_oam_brcm_cmc_interleaver *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cmc_load_balance_method_pack(bcmolt_epon_oam_brcm_cmc_load_balance_method this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cmc_load_balance_method_unpack(bcmolt_epon_oam_brcm_cmc_load_balance_method *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cmc_modulation_pack(bcmolt_epon_oam_brcm_cmc_modulation this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cmc_modulation_unpack(bcmolt_epon_oam_brcm_cmc_modulation *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cmc_us_modulation_type_pack(bcmolt_epon_oam_brcm_cmc_us_modulation_type this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cmc_us_modulation_type_unpack(bcmolt_epon_oam_brcm_cmc_us_modulation_type *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cmc_us_profile_type_pack(bcmolt_epon_oam_brcm_cmc_us_profile_type this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cmc_us_profile_type_unpack(bcmolt_epon_oam_brcm_cmc_us_profile_type *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cnu_connectivity_state_pack(bcmolt_epon_oam_brcm_cnu_connectivity_state this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cnu_connectivity_state_unpack(bcmolt_epon_oam_brcm_cnu_connectivity_state *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cnu_docsis_version_pack(bcmolt_epon_oam_brcm_cnu_docsis_version this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cnu_docsis_version_unpack(bcmolt_epon_oam_brcm_cnu_docsis_version *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cnu_ipaddr_type_pack(bcmolt_epon_oam_brcm_cnu_ipaddr_type this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cnu_ipaddr_type_unpack(bcmolt_epon_oam_brcm_cnu_ipaddr_type *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_oam_pdu_opcode_pack(bcmolt_epon_oam_brcm_oam_pdu_opcode this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_oam_pdu_opcode_unpack(bcmolt_epon_oam_brcm_oam_pdu_opcode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_clock_transport_key_pack(bcmolt_epon_oam_clock_transport_key this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_clock_transport_key_unpack(bcmolt_epon_oam_clock_transport_key *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_var_leaf_action_pack(bcmolt_epon_oam_var_leaf_action this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_var_leaf_action_unpack(bcmolt_epon_oam_var_leaf_action *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_enabled_state_pack(bcmolt_epon_oam_ctc_enabled_state this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_enabled_state_unpack(bcmolt_epon_oam_ctc_enabled_state *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_activation_pack(bcmolt_epon_oam_ctc_activation this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_activation_unpack(bcmolt_epon_oam_ctc_activation *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_leaf_management_object_pack(bcmolt_epon_oam_ctc_leaf_management_object this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_leaf_management_object_unpack(bcmolt_epon_oam_ctc_leaf_management_object *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_onu_alarm_id_pack(bcmolt_epon_oam_ctc_onu_alarm_id this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_onu_alarm_id_unpack(bcmolt_epon_oam_ctc_onu_alarm_id *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_power_alarm_code_pack(bcmolt_epon_oam_ctc_power_alarm_code this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_power_alarm_code_unpack(bcmolt_epon_oam_ctc_power_alarm_code *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_pon_if_switch_code_pack(bcmolt_epon_oam_ctc_pon_if_switch_code this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_pon_if_switch_code_unpack(bcmolt_epon_oam_ctc_pon_if_switch_code *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_var_leaf_attribute_pack(bcmolt_epon_oam_var_leaf_attribute this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_var_leaf_attribute_unpack(bcmolt_epon_oam_var_leaf_attribute *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_fec_support_pack(bcmolt_epon_oam_ctc_fec_support this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_fec_support_unpack(bcmolt_epon_oam_ctc_fec_support *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_fec_state_pack(bcmolt_epon_oam_ctc_fec_state this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_fec_state_unpack(bcmolt_epon_oam_ctc_fec_state *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_churning_op_code_pack(bcmolt_epon_oam_ctc_churning_op_code this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_churning_op_code_unpack(bcmolt_epon_oam_ctc_churning_op_code *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_classification_operation_pack(bcmolt_epon_oam_ctc_classification_operation this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_classification_operation_unpack(bcmolt_epon_oam_ctc_classification_operation *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_commit_image_ack_pack(bcmolt_epon_oam_ctc_commit_image_ack this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_commit_image_ack_unpack(bcmolt_epon_oam_ctc_commit_image_ack *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_commit_image_opcode_pack(bcmolt_epon_oam_ctc_commit_image_opcode this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_commit_image_opcode_unpack(bcmolt_epon_oam_ctc_commit_image_opcode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_commit_image_flag_pack(bcmolt_epon_oam_ctc_commit_image_flag this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_commit_image_flag_unpack(bcmolt_epon_oam_ctc_commit_image_flag *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_dba_op_code_pack(bcmolt_epon_oam_ctc_dba_op_code this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_dba_op_code_unpack(bcmolt_epon_oam_ctc_dba_op_code *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_early_wake_up_mode_pack(bcmolt_epon_oam_ctc_early_wake_up_mode this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_early_wake_up_mode_unpack(bcmolt_epon_oam_ctc_early_wake_up_mode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_branch_pack(bcmolt_epon_oam_ctc_branch this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_branch_unpack(bcmolt_epon_oam_ctc_branch *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_error_code_pack(bcmolt_epon_oam_oam_error_code this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_error_code_unpack(bcmolt_epon_oam_oam_error_code *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_leaf_old_management_object_pack(bcmolt_epon_oam_ctc_leaf_old_management_object this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_leaf_old_management_object_unpack(bcmolt_epon_oam_ctc_leaf_old_management_object *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_port_type_pack(bcmolt_epon_oam_ctc_port_type this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_port_type_unpack(bcmolt_epon_oam_ctc_port_type *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_leaf_ext_attribute_pack(bcmolt_epon_oam_ctc_leaf_ext_attribute this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_leaf_ext_attribute_unpack(bcmolt_epon_oam_ctc_leaf_ext_attribute *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_leaf_ext_action_pack(bcmolt_epon_oam_ctc_leaf_ext_action this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_leaf_ext_action_unpack(bcmolt_epon_oam_ctc_leaf_ext_action *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ktleaf_attribute_pack(bcmolt_epon_oam_ktleaf_attribute this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ktleaf_attribute_unpack(bcmolt_epon_oam_ktleaf_attribute *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_eth_port_policing_enable_pack(bcmolt_epon_oam_ctc_eth_port_policing_enable this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_eth_port_policing_enable_unpack(bcmolt_epon_oam_ctc_eth_port_policing_enable *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_event_sub_type_pack(bcmolt_epon_oam_ctc_event_sub_type this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_event_sub_type_unpack(bcmolt_epon_oam_ctc_event_sub_type *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_event_status_pack(bcmolt_epon_oam_ctc_event_status this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_event_status_unpack(bcmolt_epon_oam_ctc_event_status *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_onu_sleep_flag_pack(bcmolt_epon_oam_ctc_onu_sleep_flag this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_onu_sleep_flag_unpack(bcmolt_epon_oam_ctc_onu_sleep_flag *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_onu_sleep_mode_pack(bcmolt_epon_oam_ctc_onu_sleep_mode this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_onu_sleep_mode_unpack(bcmolt_epon_oam_ctc_onu_sleep_mode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_pppo_etest_status_pack(bcmolt_epon_oam_pppo_etest_status this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_pppo_etest_status_unpack(bcmolt_epon_oam_pppo_etest_status *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_pppo_etest_fail_reason_pack(bcmolt_epon_oam_pppo_etest_fail_reason this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_pppo_etest_fail_reason_unpack(bcmolt_epon_oam_pppo_etest_fail_reason *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_start_or_stop_indication_pack(bcmolt_epon_oam_start_or_stop_indication this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_start_or_stop_indication_unpack(bcmolt_epon_oam_start_or_stop_indication *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_pppo_eauth_mode_pack(bcmolt_epon_oam_pppo_eauth_mode this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_pppo_eauth_mode_unpack(bcmolt_epon_oam_pppo_eauth_mode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_supported_services_pack(bcmolt_epon_oam_ctc_supported_services this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_supported_services_unpack(bcmolt_epon_oam_ctc_supported_services *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_service_sla_operation_pack(bcmolt_epon_oam_ctc_service_sla_operation this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_service_sla_operation_unpack(bcmolt_epon_oam_ctc_service_sla_operation *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_onu_dba_scheduling_scheme_pack(bcmolt_epon_oam_ctc_onu_dba_scheduling_scheme this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_onu_dba_scheduling_scheme_unpack(bcmolt_epon_oam_ctc_onu_dba_scheduling_scheme *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_onu_type_pack(bcmolt_epon_oam_ctc_onu_type this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_onu_type_unpack(bcmolt_epon_oam_ctc_onu_type *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_onu_protection_type_pack(bcmolt_epon_oam_ctc_onu_protection_type this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_onu_protection_type_unpack(bcmolt_epon_oam_ctc_onu_protection_type *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_onu_interface_type_pack(bcmolt_epon_oam_ctc_onu_interface_type this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_onu_interface_type_unpack(bcmolt_epon_oam_ctc_onu_interface_type *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_mxu_global_params_width_pack(bcmolt_epon_oam_ctc_mxu_global_params_width this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_mxu_global_params_width_unpack(bcmolt_epon_oam_ctc_mxu_global_params_width *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_mxu_snmp_params_width_pack(bcmolt_epon_oam_ctc_mxu_snmp_params_width this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_mxu_snmp_params_width_unpack(bcmolt_epon_oam_ctc_mxu_snmp_params_width *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_onu_power_supply_control_type_pack(bcmolt_epon_oam_ctc_onu_power_supply_control_type this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_onu_power_supply_control_type_unpack(bcmolt_epon_oam_ctc_onu_power_supply_control_type *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_vlan_mode_pack(bcmolt_epon_oam_ctc_vlan_mode this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_vlan_mode_unpack(bcmolt_epon_oam_ctc_vlan_mode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_onu_classif_field_pack(bcmolt_epon_oam_ctc_onu_classif_field this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_onu_classif_field_unpack(bcmolt_epon_oam_ctc_onu_classif_field *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_onu_classif_operator_pack(bcmolt_epon_oam_ctc_onu_classif_operator this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_onu_classif_operator_unpack(bcmolt_epon_oam_ctc_onu_classif_operator *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_multicast_vlan_operation_pack(bcmolt_epon_oam_ctc_multicast_vlan_operation this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_multicast_vlan_operation_unpack(bcmolt_epon_oam_ctc_multicast_vlan_operation *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_multicast_tag_mode_pack(bcmolt_epon_oam_ctc_multicast_tag_mode this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_multicast_tag_mode_unpack(bcmolt_epon_oam_ctc_multicast_tag_mode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_multicast_switch_mode_pack(bcmolt_epon_oam_ctc_multicast_switch_mode this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_multicast_switch_mode_unpack(bcmolt_epon_oam_ctc_multicast_switch_mode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_action_pack(bcmolt_epon_oam_ctc_multicast_control_action this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_action_unpack(bcmolt_epon_oam_ctc_multicast_control_action *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_type_pack(bcmolt_epon_oam_ctc_multicast_control_type this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_type_unpack(bcmolt_epon_oam_ctc_multicast_control_type *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_voip_protocol_pack(bcmolt_epon_oam_ctc_voip_protocol this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_voip_protocol_unpack(bcmolt_epon_oam_ctc_voip_protocol *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_voice_ipmode_pack(bcmolt_epon_oam_ctc_voice_ipmode this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_voice_ipmode_unpack(bcmolt_epon_oam_ctc_voice_ipmode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_pppoe_mode_pack(bcmolt_epon_oam_ctc_pppoe_mode this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_pppoe_mode_unpack(bcmolt_epon_oam_ctc_pppoe_mode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_voice_tagging_mode_pack(bcmolt_epon_oam_ctc_voice_tagging_mode this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_voice_tagging_mode_unpack(bcmolt_epon_oam_ctc_voice_tagging_mode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_h248reg_mode_pack(bcmolt_epon_oam_ctc_h248reg_mode this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_h248reg_mode_unpack(bcmolt_epon_oam_ctc_h248reg_mode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_h248heartbeat_mode_pack(bcmolt_epon_oam_ctc_h248heartbeat_mode this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_h248heartbeat_mode_unpack(bcmolt_epon_oam_ctc_h248heartbeat_mode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_rtp_tid_mode_pack(bcmolt_epon_oam_ctc_rtp_tid_mode this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_rtp_tid_mode_unpack(bcmolt_epon_oam_ctc_rtp_tid_mode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_voice_t38mode_pack(bcmolt_epon_oam_ctc_voice_t38mode this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_voice_t38mode_unpack(bcmolt_epon_oam_ctc_voice_t38mode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_voice_fax_modem_control_mode_pack(bcmolt_epon_oam_ctc_voice_fax_modem_control_mode this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_voice_fax_modem_control_mode_unpack(bcmolt_epon_oam_ctc_voice_fax_modem_control_mode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_iad_operation_status_pack(bcmolt_epon_oam_ctc_iad_operation_status this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_iad_operation_status_unpack(bcmolt_epon_oam_ctc_iad_operation_status *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_iad_port_status_pack(bcmolt_epon_oam_ctc_iad_port_status this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_iad_port_status_unpack(bcmolt_epon_oam_ctc_iad_port_status *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_iad_port_service_state_pack(bcmolt_epon_oam_ctc_iad_port_service_state this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_iad_port_service_state_unpack(bcmolt_epon_oam_ctc_iad_port_service_state *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_iad_port_codec_mode_pack(bcmolt_epon_oam_ctc_iad_port_codec_mode this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_iad_port_codec_mode_unpack(bcmolt_epon_oam_ctc_iad_port_codec_mode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_iad_operation_pack(bcmolt_epon_oam_ctc_iad_operation this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_iad_operation_unpack(bcmolt_epon_oam_ctc_iad_operation *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_zte_onu_port_mac_operation_pack(bcmolt_epon_oam_zte_onu_port_mac_operation this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_zte_onu_port_mac_operation_unpack(bcmolt_epon_oam_zte_onu_port_mac_operation *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_zte_isolate_mode_pack(bcmolt_epon_oam_zte_isolate_mode this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_zte_isolate_mode_unpack(bcmolt_epon_oam_zte_isolate_mode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_zte_buffer_manage_mode_pack(bcmolt_epon_oam_zte_buffer_manage_mode this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_zte_buffer_manage_mode_unpack(bcmolt_epon_oam_zte_buffer_manage_mode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_zte_dsbuf_direction_pack(bcmolt_epon_oam_zte_dsbuf_direction this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_zte_dsbuf_direction_unpack(bcmolt_epon_oam_zte_dsbuf_direction *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_zte_statistics_action_mode_pack(bcmolt_epon_oam_zte_statistics_action_mode this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_zte_statistics_action_mode_unpack(bcmolt_epon_oam_zte_statistics_action_mode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_zte_statistics_reset_mode_pack(bcmolt_epon_oam_zte_statistics_reset_mode this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_zte_statistics_reset_mode_unpack(bcmolt_epon_oam_zte_statistics_reset_mode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_uni_flow_statistics_collect_control_mode_pack(bcmolt_epon_oam_uni_flow_statistics_collect_control_mode this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_uni_flow_statistics_collect_control_mode_unpack(bcmolt_epon_oam_uni_flow_statistics_collect_control_mode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_light_indication_mode_pack(bcmolt_epon_oam_light_indication_mode this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_light_indication_mode_unpack(bcmolt_epon_oam_light_indication_mode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_match_mac_address_mode_pack(bcmolt_epon_oam_match_mac_address_mode this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_match_mac_address_mode_unpack(bcmolt_epon_oam_match_mac_address_mode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_zte_light_control_action_mode_pack(bcmolt_epon_oam_zte_light_control_action_mode this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_zte_light_control_action_mode_unpack(bcmolt_epon_oam_zte_light_control_action_mode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_onu_excl_ability_pack(bcmolt_epon_oam_onu_excl_ability this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_onu_excl_ability_unpack(bcmolt_epon_oam_onu_excl_ability *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_onu_early_wake_capability_pack(bcmolt_epon_oam_ctc_onu_early_wake_capability this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_onu_early_wake_capability_unpack(bcmolt_epon_oam_ctc_onu_early_wake_capability *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_port_disable_on_loop_detected_state_pack(bcmolt_epon_oam_ctc_port_disable_on_loop_detected_state this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_port_disable_on_loop_detected_state_unpack(bcmolt_epon_oam_ctc_port_disable_on_loop_detected_state *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_monitoring_status_pack(bcmolt_epon_oam_ctc_monitoring_status this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_monitoring_status_unpack(bcmolt_epon_oam_ctc_monitoring_status *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_file_check_opcode_pack(bcmolt_epon_oam_ctc_file_check_opcode this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_file_check_opcode_unpack(bcmolt_epon_oam_ctc_file_check_opcode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_rps_code_pack(bcmolt_epon_oam_ctc_rps_code this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_rps_code_unpack(bcmolt_epon_oam_ctc_rps_code *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_onu_auth_code_pack(bcmolt_epon_oam_ctc_onu_auth_code this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_onu_auth_code_unpack(bcmolt_epon_oam_ctc_onu_auth_code *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_well_known_oui_pack(bcmolt_epon_oam_well_known_oui this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u24(buf, uint32_t_to_uint24_t((uint32_t) this));
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_well_known_oui_unpack(bcmolt_epon_oam_well_known_oui *this, bcmolt_epon_oam_buf *buf)
+{
+    uint24_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u24(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = uint24_t_to_uint32_t(num_val);
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_rule_operator_pack(bcmolt_epon_oam_ctc_rule_operator this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_rule_operator_unpack(bcmolt_epon_oam_ctc_rule_operator *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_software_download_data_type_pack(bcmolt_epon_oam_ctc_software_download_data_type this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_software_download_data_type_unpack(bcmolt_epon_oam_ctc_software_download_data_type *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_tftp_op_code_pack(bcmolt_epon_oam_ctc_tftp_op_code this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_tftp_op_code_unpack(bcmolt_epon_oam_ctc_tftp_op_code *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_swmirror_opcode_pack(bcmolt_epon_oam_ctc_swmirror_opcode this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_swmirror_opcode_unpack(bcmolt_epon_oam_ctc_swmirror_opcode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_swmirror_activate_image_flag_pack(bcmolt_epon_oam_ctc_swmirror_activate_image_flag this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_swmirror_activate_image_flag_unpack(bcmolt_epon_oam_ctc_swmirror_activate_image_flag *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_swmirror_ack_pack(bcmolt_epon_oam_ctc_swmirror_ack this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_swmirror_ack_unpack(bcmolt_epon_oam_ctc_swmirror_ack *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ktoptical_power_alarm_status_pack(bcmolt_epon_oam_ktoptical_power_alarm_status this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ktoptical_power_alarm_status_unpack(bcmolt_epon_oam_ktoptical_power_alarm_status *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ktleaf_action_pack(bcmolt_epon_oam_ktleaf_action this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ktleaf_action_unpack(bcmolt_epon_oam_ktleaf_action *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_opcode_pack(bcmolt_epon_oam_ctc_opcode this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_opcode_unpack(bcmolt_epon_oam_ctc_opcode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ktonu_event_type_pack(bcmolt_epon_oam_ktonu_event_type this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ktonu_event_type_unpack(bcmolt_epon_oam_ktonu_event_type *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ktloop_detect_event_pack(bcmolt_epon_oam_ktloop_detect_event this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ktloop_detect_event_unpack(bcmolt_epon_oam_ktloop_detect_event *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ktoptical_power_alarm_event_pack(bcmolt_epon_oam_ktoptical_power_alarm_event this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ktoptical_power_alarm_event_unpack(bcmolt_epon_oam_ktoptical_power_alarm_event *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_classifier_command_pack(bcmolt_epon_oam_dasan_classifier_command this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_classifier_command_unpack(bcmolt_epon_oam_dasan_classifier_command *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_direction_pack(bcmolt_epon_oam_dasan_direction this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_direction_unpack(bcmolt_epon_oam_dasan_direction *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_filter_field_pack(bcmolt_epon_oam_dasan_filter_field this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_filter_field_unpack(bcmolt_epon_oam_dasan_filter_field *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_filter_action_pack(bcmolt_epon_oam_dasan_filter_action this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_filter_action_unpack(bcmolt_epon_oam_dasan_filter_action *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_pri_type_pack(bcmolt_epon_oam_dasan_pri_type this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_pri_type_unpack(bcmolt_epon_oam_dasan_pri_type *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_opcode_pack(bcmolt_epon_oam_dasan_opcode this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_opcode_unpack(bcmolt_epon_oam_dasan_opcode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_stats_seq_type_pack(bcmolt_epon_oam_dasan_stats_seq_type this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_stats_seq_type_unpack(bcmolt_epon_oam_dasan_stats_seq_type *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_stat_id_pack(bcmolt_epon_oam_dasan_stat_id this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_stat_id_unpack(bcmolt_epon_oam_dasan_stat_id *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_direction_pack(bcmolt_epon_oam_direction this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_direction_unpack(bcmolt_epon_oam_direction *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_domain_option_pack(bcmolt_epon_oam_domain_option this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_domain_option_unpack(bcmolt_epon_oam_domain_option *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_leaf_action_pack(bcmolt_epon_oam_dpoe_leaf_action this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_leaf_action_unpack(bcmolt_epon_oam_dpoe_leaf_action *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_loopback_location_pack(bcmolt_epon_oam_dpoe_loopback_location this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_loopback_location_unpack(bcmolt_epon_oam_dpoe_loopback_location *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_llid_action_pack(bcmolt_epon_oam_dpoe_llid_action this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_llid_action_unpack(bcmolt_epon_oam_dpoe_llid_action *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_alarm_code_pack(bcmolt_epon_oam_dpoe_alarm_code this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_alarm_code_unpack(bcmolt_epon_oam_dpoe_alarm_code *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_leaf_attribute_pack(bcmolt_epon_oam_dpoe_leaf_attribute this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_leaf_attribute_unpack(bcmolt_epon_oam_dpoe_leaf_attribute *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_link_state_pack(bcmolt_epon_oam_dpoe_link_state this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_link_state_unpack(bcmolt_epon_oam_dpoe_link_state *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_learning_mode_pack(bcmolt_epon_oam_dpoe_learning_mode this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_learning_mode_unpack(bcmolt_epon_oam_dpoe_learning_mode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_branch_pack(bcmolt_epon_oam_dpoe_branch this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_branch_unpack(bcmolt_epon_oam_dpoe_branch *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_object_type_pack(bcmolt_epon_oam_dpoe_object_type this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_object_type_unpack(bcmolt_epon_oam_dpoe_object_type *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_encryption_mode_pack(bcmolt_epon_oam_dpoe_encryption_mode this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_encryption_mode_unpack(bcmolt_epon_oam_dpoe_encryption_mode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_rule_type_pack(bcmolt_epon_oam_rule_type this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_rule_type_unpack(bcmolt_epon_oam_rule_type *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_field_code_pack(bcmolt_epon_oam_dpoe_field_code this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_field_code_unpack(bcmolt_epon_oam_dpoe_field_code *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_rule_operator_pack(bcmolt_epon_oam_rule_operator this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_rule_operator_unpack(bcmolt_epon_oam_rule_operator *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_result_pack(bcmolt_epon_oam_dpoe_result this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_result_unpack(bcmolt_epon_oam_dpoe_result *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_layer_select_pack(bcmolt_epon_oam_dpoe_layer_select this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_layer_select_unpack(bcmolt_epon_oam_dpoe_layer_select *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_traffic_bitmap_pack(bcmolt_epon_oam_traffic_bitmap this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_traffic_bitmap_unpack(bcmolt_epon_oam_traffic_bitmap *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_rate_units_pack(bcmolt_epon_oam_rate_units this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_rate_units_unpack(bcmolt_epon_oam_rate_units *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_fec_mode_pack(bcmolt_epon_oam_dpoe_fec_mode this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_fec_mode_unpack(bcmolt_epon_oam_dpoe_fec_mode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_port_type_pack(bcmolt_epon_oam_dpoe_port_type this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_port_type_unpack(bcmolt_epon_oam_dpoe_port_type *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_ipmc_forwarding_flags_pack(bcmolt_epon_oam_dpoe_ipmc_forwarding_flags this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_ipmc_forwarding_flags_unpack(bcmolt_epon_oam_dpoe_ipmc_forwarding_flags *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_power_saving_mode_pack(bcmolt_epon_oam_dpoe_power_saving_mode this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_power_saving_mode_unpack(bcmolt_epon_oam_dpoe_power_saving_mode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_error_code_pack(bcmolt_epon_oam_dpoe_error_code this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_error_code_unpack(bcmolt_epon_oam_dpoe_error_code *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_file_transfer_opcode_pack(bcmolt_epon_oam_dpoe_file_transfer_opcode this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_file_transfer_opcode_unpack(bcmolt_epon_oam_dpoe_file_transfer_opcode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_file_type_pack(bcmolt_epon_oam_dpoe_file_type this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_file_type_unpack(bcmolt_epon_oam_dpoe_file_type *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_file_transfer_error_pack(bcmolt_epon_oam_dpoe_file_transfer_error this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_file_transfer_error_unpack(bcmolt_epon_oam_dpoe_file_transfer_error *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_info_tlv_type_pack(bcmolt_epon_oam_dpoe_info_tlv_type this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_info_tlv_type_unpack(bcmolt_epon_oam_dpoe_info_tlv_type *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_mcast_ctrl_action_pack(bcmolt_epon_oam_dpoe_mcast_ctrl_action this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_mcast_ctrl_action_unpack(bcmolt_epon_oam_dpoe_mcast_ctrl_action *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_mcast_ctrl_resp_code_pack(bcmolt_epon_oam_dpoe_mcast_ctrl_resp_code this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_mcast_ctrl_resp_code_unpack(bcmolt_epon_oam_dpoe_mcast_ctrl_resp_code *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_mcast_reg_code_pack(bcmolt_epon_oam_dpoe_mcast_reg_code this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_mcast_reg_code_unpack(bcmolt_epon_oam_dpoe_mcast_reg_code *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_std_phy_type_pack(bcmolt_epon_oam_std_phy_type this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_std_phy_type_unpack(bcmolt_epon_oam_std_phy_type *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_state_pack(bcmolt_epon_oam_oam_state this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_state_unpack(bcmolt_epon_oam_oam_state *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_mau_media_available_pack(bcmolt_epon_oam_mau_media_available this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_mau_media_available_unpack(bcmolt_epon_oam_mau_media_available *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_std_auto_negoitation_capability_pack(bcmolt_epon_oam_std_auto_negoitation_capability this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_std_auto_negoitation_capability_unpack(bcmolt_epon_oam_std_auto_negoitation_capability *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_mac_duplex_status_pack(bcmolt_epon_oam_mac_duplex_status this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_mac_duplex_status_unpack(bcmolt_epon_oam_mac_duplex_status *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_fec_support_pack(bcmolt_epon_oam_fec_support this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_fec_support_unpack(bcmolt_epon_oam_fec_support *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_std_fec_mode_pack(bcmolt_epon_oam_std_fec_mode this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_std_fec_mode_unpack(bcmolt_epon_oam_std_fec_mode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_opcode_pack(bcmolt_epon_oam_dpoe_opcode this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_opcode_unpack(bcmolt_epon_oam_dpoe_opcode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_version_pack(bcmolt_epon_oam_dpoe_version this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_version_unpack(bcmolt_epon_oam_dpoe_version *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_eap_code_pack(bcmolt_epon_oam_eap_code this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_eap_code_unpack(bcmolt_epon_oam_eap_code *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_subtype_pack(bcmolt_epon_oam_tls_subtype this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_subtype_unpack(bcmolt_epon_oam_tls_subtype *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_flags_pack(bcmolt_epon_oam_tls_flags this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_flags_unpack(bcmolt_epon_oam_tls_flags *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_content_type_pack(bcmolt_epon_oam_tls_content_type this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_content_type_unpack(bcmolt_epon_oam_tls_content_type *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_handshake_type_pack(bcmolt_epon_oam_tls_handshake_type this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_handshake_type_unpack(bcmolt_epon_oam_tls_handshake_type *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_ciphersuite_pack(bcmolt_epon_oam_tls_ciphersuite this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_ciphersuite_unpack(bcmolt_epon_oam_tls_ciphersuite *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_compression_method_pack(bcmolt_epon_oam_tls_compression_method this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_compression_method_unpack(bcmolt_epon_oam_tls_compression_method *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_certificate_type_pack(bcmolt_epon_oam_tls_certificate_type this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_certificate_type_unpack(bcmolt_epon_oam_tls_certificate_type *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_eapol_type_pack(bcmolt_epon_oam_eapol_type this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_eapol_type_unpack(bcmolt_epon_oam_eapol_type *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_eapol_version_pack(bcmolt_epon_oam_eapol_version this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_eapol_version_unpack(bcmolt_epon_oam_eapol_version *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_epoc_cmc_stat_index_pack(bcmolt_epon_oam_epoc_cmc_stat_index this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_epoc_cmc_stat_index_unpack(bcmolt_epon_oam_epoc_cmc_stat_index *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_epoc_cnu_stat_index_pack(bcmolt_epon_oam_epoc_cnu_stat_index this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_epoc_cnu_stat_index_unpack(bcmolt_epon_oam_epoc_cnu_stat_index *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_epoc_sdm250stat_index_pack(bcmolt_epon_oam_epoc_sdm250stat_index this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_epoc_sdm250stat_index_unpack(bcmolt_epon_oam_epoc_sdm250stat_index *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_epoc_stat_gather_modes_pack(bcmolt_epon_oam_epoc_stat_gather_modes this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_epoc_stat_gather_modes_unpack(bcmolt_epon_oam_epoc_stat_gather_modes *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_protocol_type_pack(bcmolt_epon_oam_protocol_type this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_protocol_type_unpack(bcmolt_epon_oam_protocol_type *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_slow_protocol_subtype_pack(bcmolt_epon_oam_slow_protocol_subtype this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_slow_protocol_subtype_unpack(bcmolt_epon_oam_slow_protocol_subtype *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_flags_pack(bcmolt_epon_oam_oam_flags this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_flags_unpack(bcmolt_epon_oam_oam_flags *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_opcode_pack(bcmolt_epon_oam_oam_opcode this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_opcode_unpack(bcmolt_epon_oam_oam_opcode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_info_tlv_type_pack(bcmolt_epon_oam_info_tlv_type this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_info_tlv_type_unpack(bcmolt_epon_oam_info_tlv_type *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_info_tlv_type_pack(bcmolt_epon_oam_tek_info_tlv_type this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_info_tlv_type_unpack(bcmolt_epon_oam_tek_info_tlv_type *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_report_modes_pack(bcmolt_epon_oam_tek_report_modes this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_report_modes_unpack(bcmolt_epon_oam_tek_report_modes *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_local_remote_info_state_pack(bcmolt_epon_oam_local_remote_info_state this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_local_remote_info_state_unpack(bcmolt_epon_oam_local_remote_info_state *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_local_remote_info_config_pack(bcmolt_epon_oam_local_remote_info_config this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_local_remote_info_config_unpack(bcmolt_epon_oam_local_remote_info_config *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_link_event_type_pack(bcmolt_epon_oam_link_event_type this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_link_event_type_unpack(bcmolt_epon_oam_link_event_type *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_alarm_code_pack(bcmolt_epon_oam_tek_alarm_code this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_alarm_code_unpack(bcmolt_epon_oam_tek_alarm_code *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_alarm_context_pack(bcmolt_epon_oam_tek_alarm_context this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_alarm_context_unpack(bcmolt_epon_oam_tek_alarm_context *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_var_branch_pack(bcmolt_epon_oam_var_branch this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_var_branch_unpack(bcmolt_epon_oam_var_branch *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_var_leaf_object_pack(bcmolt_epon_oam_var_leaf_object this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_var_leaf_object_unpack(bcmolt_epon_oam_var_leaf_object *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_var_leaf_package_pack(bcmolt_epon_oam_var_leaf_package this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_var_leaf_package_unpack(bcmolt_epon_oam_var_leaf_package *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_var_leaf_name_binding_pack(bcmolt_epon_oam_var_leaf_name_binding this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_var_leaf_name_binding_unpack(bcmolt_epon_oam_var_leaf_name_binding *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_remote_loopback_command_pack(bcmolt_epon_oam_remote_loopback_command this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_remote_loopback_command_unpack(bcmolt_epon_oam_remote_loopback_command *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_opcode_pack(bcmolt_epon_oam_tek_opcode this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_opcode_unpack(bcmolt_epon_oam_tek_opcode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_branch_pack(bcmolt_epon_oam_tek_branch this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_branch_unpack(bcmolt_epon_oam_tek_branch *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_object_type_pack(bcmolt_epon_oam_tek_object_type this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_object_type_unpack(bcmolt_epon_oam_tek_object_type *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_flow_direction_pack(bcmolt_epon_oam_flow_direction this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_flow_direction_unpack(bcmolt_epon_oam_flow_direction *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_leaf_attribute_pack(bcmolt_epon_oam_tek_leaf_attribute this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_leaf_attribute_unpack(bcmolt_epon_oam_tek_leaf_attribute *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_leaf_action_pack(bcmolt_epon_oam_tek_leaf_action this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_leaf_action_unpack(bcmolt_epon_oam_tek_leaf_action *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_onu_rule_flags_pack(bcmolt_epon_oam_tek_onu_rule_flags this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_onu_rule_flags_unpack(bcmolt_epon_oam_tek_onu_rule_flags *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_onu_rule_action_pack(bcmolt_epon_oam_tek_onu_rule_action this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_onu_rule_action_unpack(bcmolt_epon_oam_tek_onu_rule_action *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_onu_field_select_pack(bcmolt_epon_oam_tek_onu_field_select this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_onu_field_select_unpack(bcmolt_epon_oam_tek_onu_field_select *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_onu_rule_operator_pack(bcmolt_epon_oam_tek_onu_rule_operator this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_onu_rule_operator_unpack(bcmolt_epon_oam_tek_onu_rule_operator *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_onu_psstate_pack(bcmolt_epon_oam_onu_psstate this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_onu_psstate_unpack(bcmolt_epon_oam_onu_psstate *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_learn_table_mode_pack(bcmolt_epon_oam_tek_learn_table_mode this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_learn_table_mode_unpack(bcmolt_epon_oam_tek_learn_table_mode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_vlan_destination_match_mode_pack(bcmolt_epon_oam_tek_vlan_destination_match_mode this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_vlan_destination_match_mode_unpack(bcmolt_epon_oam_tek_vlan_destination_match_mode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_vlan_destination_flags_pack(bcmolt_epon_oam_tek_vlan_destination_flags this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_vlan_destination_flags_unpack(bcmolt_epon_oam_tek_vlan_destination_flags *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_encryption_mode_pack(bcmolt_epon_oam_tek_encryption_mode this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_encryption_mode_unpack(bcmolt_epon_oam_tek_encryption_mode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_encryption_options_pack(bcmolt_epon_oam_tek_encryption_options this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_encryption_options_unpack(bcmolt_epon_oam_tek_encryption_options *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_rule_field_select_pack(bcmolt_epon_oam_rule_field_select this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_rule_field_select_unpack(bcmolt_epon_oam_rule_field_select *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_rule_action_pack(bcmolt_epon_oam_rule_action this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_rule_action_unpack(bcmolt_epon_oam_rule_action *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_maturity_pack(bcmolt_epon_oam_tek_maturity this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_maturity_unpack(bcmolt_epon_oam_tek_maturity *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_file_type_pack(bcmolt_epon_oam_file_type this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_file_type_unpack(bcmolt_epon_oam_file_type *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_nvs_state_pack(bcmolt_epon_oam_nvs_state this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_nvs_state_unpack(bcmolt_epon_oam_nvs_state *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_queue_config_v2subtype_pack(bcmolt_epon_oam_tek_queue_config_v2subtype this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_queue_config_v2subtype_unpack(bcmolt_epon_oam_tek_queue_config_v2subtype *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_report_mode_pack(bcmolt_epon_oam_tek_report_mode this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_report_mode_unpack(bcmolt_epon_oam_tek_report_mode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_feature_set_pack(bcmolt_epon_oam_tek_feature_set this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_feature_set_unpack(bcmolt_epon_oam_tek_feature_set *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_mcast_snoop_mode_pack(bcmolt_epon_oam_mcast_snoop_mode this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_mcast_snoop_mode_unpack(bcmolt_epon_oam_mcast_snoop_mode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ipmc_global_options_pack(bcmolt_epon_oam_ipmc_global_options this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ipmc_global_options_unpack(bcmolt_epon_oam_ipmc_global_options *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_forward_qualifier_pack(bcmolt_epon_oam_forward_qualifier this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_forward_qualifier_unpack(bcmolt_epon_oam_forward_qualifier *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_holdover_flags_pack(bcmolt_epon_oam_tek_holdover_flags this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_holdover_flags_unpack(bcmolt_epon_oam_tek_holdover_flags *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_mdi_mode_pack(bcmolt_epon_oam_mdi_mode this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_mdi_mode_unpack(bcmolt_epon_oam_mdi_mode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_igmp_forwarding_qualifer_pack(bcmolt_epon_oam_tek_igmp_forwarding_qualifer this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_igmp_forwarding_qualifer_unpack(bcmolt_epon_oam_tek_igmp_forwarding_qualifer *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_igmp_snooping_options_pack(bcmolt_epon_oam_tek_igmp_snooping_options this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_igmp_snooping_options_unpack(bcmolt_epon_oam_tek_igmp_snooping_options *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_sleep_options_pack(bcmolt_epon_oam_sleep_options this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_sleep_options_unpack(bcmolt_epon_oam_sleep_options *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ieee_register_flags_pack(bcmolt_epon_oam_ieee_register_flags this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ieee_register_flags_unpack(bcmolt_epon_oam_ieee_register_flags *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ieee_register_ack_flags_pack(bcmolt_epon_oam_ieee_register_ack_flags this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ieee_register_ack_flags_unpack(bcmolt_epon_oam_ieee_register_ack_flags *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_file_transfer_error_pack(bcmolt_epon_oam_tek_file_transfer_error this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_file_transfer_error_unpack(bcmolt_epon_oam_tek_file_transfer_error *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_file_type_pack(bcmolt_epon_oam_tek_file_type this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_file_type_unpack(bcmolt_epon_oam_tek_file_type *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_pmc_op_code_pack(bcmolt_epon_oam_pmc_op_code this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_pmc_op_code_unpack(bcmolt_epon_oam_pmc_op_code *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_pmc_file_op_pack(bcmolt_epon_oam_pmc_file_op this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_pmc_file_op_unpack(bcmolt_epon_oam_pmc_file_op *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_pmc_error_code_pack(bcmolt_epon_oam_pmc_error_code this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_pmc_error_code_unpack(bcmolt_epon_oam_pmc_error_code *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_onu_master_protocol_pack(bcmolt_epon_oam_onu_master_protocol this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_onu_master_protocol_unpack(bcmolt_epon_oam_onu_master_protocol *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_onu_master_ping_flags_pack(bcmolt_epon_oam_onu_master_ping_flags this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_onu_master_ping_flags_unpack(bcmolt_epon_oam_onu_master_ping_flags *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_master_end_point_type_pack(bcmolt_epon_oam_master_end_point_type this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_master_end_point_type_unpack(bcmolt_epon_oam_master_end_point_type *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_onu_master_communication_type_pack(bcmolt_epon_oam_onu_master_communication_type this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_onu_master_communication_type_unpack(bcmolt_epon_oam_onu_master_communication_type *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_onu_master_command_id_pack(bcmolt_epon_oam_onu_master_command_id this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_onu_master_command_id_unpack(bcmolt_epon_oam_onu_master_command_id *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_registration_action_pack(bcmolt_epon_oam_oam_registration_action this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_registration_action_unpack(bcmolt_epon_oam_oam_registration_action *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_info_type_pack(bcmolt_epon_oam_oam_reg_info_type this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_info_type_unpack(bcmolt_epon_oam_oam_reg_info_type *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_master_context_type_pack(bcmolt_epon_oam_master_context_type this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_master_context_type_unpack(bcmolt_epon_oam_master_context_type *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_version_pack(bcmolt_epon_oam_ctc_version this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_version_unpack(bcmolt_epon_oam_ctc_version *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_onu_master_response_code_pack(bcmolt_epon_oam_onu_master_response_code this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_onu_master_response_code_unpack(bcmolt_epon_oam_onu_master_response_code *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_onu_state_pack(bcmolt_epon_oam_onu_state this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_onu_state_unpack(bcmolt_epon_oam_onu_state *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_mdi_crossover_pack(bcmolt_epon_oam_mdi_crossover this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_mdi_crossover_unpack(bcmolt_epon_oam_mdi_crossover *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_sdm_stat_pack(bcmolt_epon_oam_sdm_stat this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_sdm_stat_unpack(bcmolt_epon_oam_sdm_stat *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_hash_algorithm_pack(bcmolt_epon_oam_tls_hash_algorithm this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_hash_algorithm_unpack(bcmolt_epon_oam_tls_hash_algorithm *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_signature_algorithm_pack(bcmolt_epon_oam_tls_signature_algorithm this, bcmolt_epon_oam_buf *buf)
+{
+    return bcmolt_epon_oam_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_signature_algorithm_unpack(bcmolt_epon_oam_tls_signature_algorithm *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t num_val;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &num_val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *this = num_val;
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_binary_entry_cvid_pack(bcmolt_epon_oam_binary_entry_cvid *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->cvid))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_binary_entry_cvid_unpack(bcmolt_epon_oam_binary_entry_cvid *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->cvid))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_binary_entry_cvid_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 2);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_binary_entry_mac_pack(bcmolt_epon_oam_binary_entry_mac *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->switching_domain))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_mac_address(buf, this->mac))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->link_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_binary_entry_mac_unpack(bcmolt_epon_oam_binary_entry_mac *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->switching_domain))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_mac_address(buf, &this->mac))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->link_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_binary_entry_mac_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 9);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_binary_entry_programmable_pack(bcmolt_epon_oam_binary_entry_programmable *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->programmable_field0))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->programmable_field1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_binary_entry_programmable_unpack(bcmolt_epon_oam_binary_entry_programmable *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->programmable_field0))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->programmable_field1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_binary_entry_programmable_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 8);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_binary_entry_ssm_ip_pack(bcmolt_epon_oam_binary_entry_ssm_ip *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->switching_domain))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->ssm_source_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_ipv4_address(buf, this->ipaddress))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_binary_entry_ssm_ip_unpack(bcmolt_epon_oam_binary_entry_ssm_ip *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->switching_domain))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->ssm_source_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_ipv4_address(buf, &this->ipaddress))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_binary_entry_ssm_ip_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 8);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_binary_entry_svlan_plus_cvlan_pack(bcmolt_epon_oam_binary_entry_svlan_plus_cvlan *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->svid))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->cvid))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_binary_entry_svlan_plus_cvlan_unpack(bcmolt_epon_oam_binary_entry_svlan_plus_cvlan *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->svid))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->cvid))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_binary_entry_svlan_plus_cvlan_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 4);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_channel_option_pack(bcmolt_epon_oam_brcm_channel_option *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->channel_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_brcm_cmc_request_option_pack(this->option_code, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_channel_option_unpack(bcmolt_epon_oam_brcm_channel_option *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->channel_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_brcm_cmc_request_option_unpack(&this->option_code, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_channel_option_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 2);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_channel_result_pack(bcmolt_epon_oam_brcm_channel_result *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->channel_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_brcm_cmc_result_code_pack(this->result_code, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_channel_result_unpack(bcmolt_epon_oam_brcm_channel_result *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->channel_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_brcm_cmc_result_code_unpack(&this->result_code, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_channel_result_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 2);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cmc_classifier_config_data_pack(bcmolt_epon_oam_brcm_cmc_classifier_config_data *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->svc_flow_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->classifier_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->direction))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->state))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->priority))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->iptos_low))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->iptos_high))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->iptos_mask))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->ipproto))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->ipaddr_type))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->ipsrc_addr_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->ipsrc_addr_length > 0) && (this->ipsrc_addr == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"ipsrc_addr\" of struct \"bcmolt_epon_oam_brcm_cmc_classifier_config_data\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write(buf, this->ipsrc_addr, this->ipsrc_addr_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->ipsrc_mask_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->ipsrc_mask_length > 0) && (this->ipsrc_mask == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"ipsrc_mask\" of struct \"bcmolt_epon_oam_brcm_cmc_classifier_config_data\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write(buf, this->ipsrc_mask, this->ipsrc_mask_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->ipdst_addr_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->ipdst_addr_length > 0) && (this->ipdst_addr == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"ipdst_addr\" of struct \"bcmolt_epon_oam_brcm_cmc_classifier_config_data\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write(buf, this->ipdst_addr, this->ipdst_addr_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->ipdst_mask_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->ipdst_mask_length > 0) && (this->ipdst_mask == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"ipdst_mask\" of struct \"bcmolt_epon_oam_brcm_cmc_classifier_config_data\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write(buf, this->ipdst_mask, this->ipdst_mask_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->src_port_start))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->src_port_end))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->dst_port_start))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->dst_port_end))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_mac_address(buf, this->dst_mac_addr))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_mac_address(buf, this->dst_mac_mask))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_mac_address(buf, this->src_mac_addr))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->l2proto_type))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->l2proto_value))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->user_priority_low))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->user_priority_high))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->vlan_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u24(buf, this->bitmap))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->flow_label))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->cmim))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->pkt_matches))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_brcm_cmc_classifier_config_data_get_packed_length(bcmolt_epon_oam_brcm_cmc_classifier_config_data *this)
+{
+    return 96 + this->ipsrc_addr_length + this->ipsrc_mask_length + this->ipdst_addr_length + this->ipdst_mask_length;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cmc_classifier_config_data_unpack(bcmolt_epon_oam_brcm_cmc_classifier_config_data *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->svc_flow_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->classifier_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->direction))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->state))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->priority))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->iptos_low))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->iptos_high))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->iptos_mask))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->ipproto))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->ipaddr_type))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->ipsrc_addr_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->ipsrc_addr_length > 0) && (this->ipsrc_addr == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"ipsrc_addr\" of struct \"bcmolt_epon_oam_brcm_cmc_classifier_config_data\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->ipsrc_addr = (uint8_t *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->ipsrc_addr_length * sizeof(uint8_t));
+        }
+    }
+
+    if (!bcmolt_epon_oam_buf_read(buf, this->ipsrc_addr, this->ipsrc_addr_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->ipsrc_mask_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->ipsrc_mask_length > 0) && (this->ipsrc_mask == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"ipsrc_mask\" of struct \"bcmolt_epon_oam_brcm_cmc_classifier_config_data\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->ipsrc_mask = (uint8_t *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->ipsrc_mask_length * sizeof(uint8_t));
+        }
+    }
+
+    if (!bcmolt_epon_oam_buf_read(buf, this->ipsrc_mask, this->ipsrc_mask_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->ipdst_addr_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->ipdst_addr_length > 0) && (this->ipdst_addr == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"ipdst_addr\" of struct \"bcmolt_epon_oam_brcm_cmc_classifier_config_data\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->ipdst_addr = (uint8_t *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->ipdst_addr_length * sizeof(uint8_t));
+        }
+    }
+
+    if (!bcmolt_epon_oam_buf_read(buf, this->ipdst_addr, this->ipdst_addr_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->ipdst_mask_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->ipdst_mask_length > 0) && (this->ipdst_mask == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"ipdst_mask\" of struct \"bcmolt_epon_oam_brcm_cmc_classifier_config_data\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->ipdst_mask = (uint8_t *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->ipdst_mask_length * sizeof(uint8_t));
+        }
+    }
+
+    if (!bcmolt_epon_oam_buf_read(buf, this->ipdst_mask, this->ipdst_mask_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->src_port_start))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->src_port_end))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->dst_port_start))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->dst_port_end))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_mac_address(buf, &this->dst_mac_addr))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_mac_address(buf, &this->dst_mac_mask))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_mac_address(buf, &this->src_mac_addr))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->l2proto_type))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->l2proto_value))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->user_priority_low))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->user_priority_high))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->vlan_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u24(buf, &this->bitmap))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->flow_label))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->cmim))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->pkt_matches))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cmc_classifier_config_data_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    uint8_t ipsrc_addr_length;
+    uint8_t ipsrc_mask_length;
+    uint8_t ipdst_addr_length;
+    uint8_t ipdst_mask_length;
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &ipsrc_addr_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * ipsrc_addr_length);
+    if (!bcmolt_epon_oam_buf_skip(packed, ipsrc_addr_length * 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &ipsrc_mask_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * ipsrc_mask_length);
+    if (!bcmolt_epon_oam_buf_skip(packed, ipsrc_mask_length * 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &ipdst_addr_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * ipdst_addr_length);
+    if (!bcmolt_epon_oam_buf_skip(packed, ipdst_addr_length * 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &ipdst_mask_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * ipdst_mask_length);
+    if (!bcmolt_epon_oam_buf_skip(packed, ipdst_mask_length * 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 6))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 6))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 6))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 3))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 8))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cmc_interface_data_pack(bcmolt_epon_oam_brcm_cmc_interface_data *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->intf_index))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->intf_description_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->intf_description_length > 0) && (this->intf_description == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"intf_description\" of struct \"bcmolt_epon_oam_brcm_cmc_interface_data\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write(buf, this->intf_description, this->intf_description_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_brcm_cmc_intf_type_pack(this->intf_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->intf_phy_addr_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->intf_phy_addr_length > 0) && (this->intf_phy_addr == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"intf_phy_addr\" of struct \"bcmolt_epon_oam_brcm_cmc_interface_data\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write(buf, this->intf_phy_addr, this->intf_phy_addr_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->intf_alias_name_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->intf_alias_name_length > 0) && (this->intf_alias_name == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"intf_alias_name\" of struct \"bcmolt_epon_oam_brcm_cmc_interface_data\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write(buf, this->intf_alias_name, this->intf_alias_name_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_brcm_cmc_interface_data_get_packed_length(bcmolt_epon_oam_brcm_cmc_interface_data *this)
+{
+    return 6 + this->intf_description_length + this->intf_phy_addr_length + this->intf_alias_name_length;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cmc_interface_data_unpack(bcmolt_epon_oam_brcm_cmc_interface_data *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->intf_index))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->intf_description_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->intf_description_length > 0) && (this->intf_description == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"intf_description\" of struct \"bcmolt_epon_oam_brcm_cmc_interface_data\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->intf_description = (uint8_t *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->intf_description_length * sizeof(uint8_t));
+        }
+    }
+
+    if (!bcmolt_epon_oam_buf_read(buf, this->intf_description, this->intf_description_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_brcm_cmc_intf_type_unpack(&this->intf_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->intf_phy_addr_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->intf_phy_addr_length > 0) && (this->intf_phy_addr == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"intf_phy_addr\" of struct \"bcmolt_epon_oam_brcm_cmc_interface_data\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->intf_phy_addr = (uint8_t *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->intf_phy_addr_length * sizeof(uint8_t));
+        }
+    }
+
+    if (!bcmolt_epon_oam_buf_read(buf, this->intf_phy_addr, this->intf_phy_addr_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->intf_alias_name_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->intf_alias_name_length > 0) && (this->intf_alias_name == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"intf_alias_name\" of struct \"bcmolt_epon_oam_brcm_cmc_interface_data\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->intf_alias_name = (uint8_t *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->intf_alias_name_length * sizeof(uint8_t));
+        }
+    }
+
+    if (!bcmolt_epon_oam_buf_read(buf, this->intf_alias_name, this->intf_alias_name_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cmc_interface_data_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    uint8_t intf_description_length;
+    uint8_t intf_phy_addr_length;
+    uint8_t intf_alias_name_length;
+    if (!bcmolt_epon_oam_buf_skip(packed, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &intf_description_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * intf_description_length);
+    if (!bcmolt_epon_oam_buf_skip(packed, intf_description_length * 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &intf_phy_addr_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * intf_phy_addr_length);
+    if (!bcmolt_epon_oam_buf_skip(packed, intf_phy_addr_length * 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &intf_alias_name_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * intf_alias_name_length);
+    if (!bcmolt_epon_oam_buf_skip(packed, intf_alias_name_length * 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cmc_intf_stats_data_pack(bcmolt_epon_oam_brcm_cmc_intf_stats_data *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->if_index))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->if_mtu))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->if_speed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_brcm_cmc_interface_status_pack(this->if_admin_status, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_brcm_cmc_interface_status_pack(this->if_oper_status, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->if_last_change))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->if_hcin_octets))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->if_hcin_ucast_pkts))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->if_hcin_multicast_pkts))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->if_hcin_broadcast_pkts))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->if_in_discards))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->if_in_errors))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->if_in_unknown_protos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->if_hcout_octets))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->if_hcout_ucast_pkts))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->if_hcout_multicast_pkts))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->if_hcout_broadcast_pkts))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->if_out_discards))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->if_out_errors))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->if_link_up_down_trap_enable))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->if_promiscuous_mode))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->if_connector_present))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->if_counter_discontinuity_time))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cmc_intf_stats_data_unpack(bcmolt_epon_oam_brcm_cmc_intf_stats_data *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->if_index))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->if_mtu))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->if_speed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_brcm_cmc_interface_status_unpack(&this->if_admin_status, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_brcm_cmc_interface_status_unpack(&this->if_oper_status, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->if_last_change))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->if_hcin_octets))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->if_hcin_ucast_pkts))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->if_hcin_multicast_pkts))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->if_hcin_broadcast_pkts))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->if_in_discards))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->if_in_errors))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->if_in_unknown_protos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->if_hcout_octets))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->if_hcout_ucast_pkts))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->if_hcout_multicast_pkts))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->if_hcout_broadcast_pkts))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->if_out_discards))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->if_out_errors))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->if_link_up_down_trap_enable))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->if_promiscuous_mode))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->if_connector_present))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->if_counter_discontinuity_time))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cmc_intf_stats_data_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 105);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cmc_sf_config_data_pack(bcmolt_epon_oam_brcm_cmc_sf_config_data *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->svc_flow_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->sid))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->direction))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->flow_type))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->qos_type))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->channel_set_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u24(buf, this->dsid))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->max_requests_per_sid_cluster))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->max_bytes_per_sid_cluster))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->total_bytes_per_sid_cluster))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->max_time_per_sid_cluster))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->service_class_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->service_class_length > 0) && (this->service_class == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"service_class\" of struct \"bcmolt_epon_oam_brcm_cmc_sf_config_data\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write(buf, this->service_class, this->service_class_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->priority))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->reseq_dsid_support))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->max_rate))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->max_burst))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->min_rate))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->min_pkt_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->active_timeout))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->admitted_timeout))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->max_concat_burst))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->scheduling_type))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->nom_poll_intvl))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->tol_poll_jitter))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->unsol_grant_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->nom_grant_intvl))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->tol_grant_jitter))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->tos_and_mask_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->tos_and_mask_length > 0) && (this->tos_and_mask == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"tos_and_mask\" of struct \"bcmolt_epon_oam_brcm_cmc_sf_config_data\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write(buf, this->tos_and_mask, this->tos_and_mask_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->tos_or_mask_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->tos_or_mask_length > 0) && (this->tos_or_mask == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"tos_or_mask\" of struct \"bcmolt_epon_oam_brcm_cmc_sf_config_data\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write(buf, this->tos_or_mask, this->tos_or_mask_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->max_latency))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->req_trans_policy_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->req_trans_policy_length > 0) && (this->req_trans_policy == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"req_trans_policy\" of struct \"bcmolt_epon_oam_brcm_cmc_sf_config_data\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write(buf, this->req_trans_policy, this->req_trans_policy_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->bitmap))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->reqd_attrib_mask))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->forbid_attrib_mask))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->attrib_aggr_mask))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->attrib_mask_success))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->application_idlength))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->application_idlength > 0) && (this->application_id == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"application_id\" of struct \"bcmolt_epon_oam_brcm_cmc_sf_config_data\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write(buf, this->application_id, this->application_idlength))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->cont_req_window_multi))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->bw_req_multi))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->peak_rate))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->create_time))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_brcm_cmc_sf_config_data_get_packed_length(bcmolt_epon_oam_brcm_cmc_sf_config_data *this)
+{
+    return 104 + this->service_class_length + this->tos_and_mask_length + this->tos_or_mask_length + this->req_trans_policy_length + this->application_idlength;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cmc_sf_config_data_unpack(bcmolt_epon_oam_brcm_cmc_sf_config_data *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->svc_flow_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->sid))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->direction))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->flow_type))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->qos_type))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->channel_set_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u24(buf, &this->dsid))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->max_requests_per_sid_cluster))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->max_bytes_per_sid_cluster))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->total_bytes_per_sid_cluster))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->max_time_per_sid_cluster))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->service_class_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->service_class_length > 0) && (this->service_class == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"service_class\" of struct \"bcmolt_epon_oam_brcm_cmc_sf_config_data\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->service_class = (uint8_t *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->service_class_length * sizeof(uint8_t));
+        }
+    }
+
+    if (!bcmolt_epon_oam_buf_read(buf, this->service_class, this->service_class_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->priority))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->reseq_dsid_support))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->max_rate))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->max_burst))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->min_rate))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->min_pkt_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->active_timeout))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->admitted_timeout))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->max_concat_burst))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->scheduling_type))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->nom_poll_intvl))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->tol_poll_jitter))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->unsol_grant_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->nom_grant_intvl))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->tol_grant_jitter))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->tos_and_mask_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->tos_and_mask_length > 0) && (this->tos_and_mask == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"tos_and_mask\" of struct \"bcmolt_epon_oam_brcm_cmc_sf_config_data\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->tos_and_mask = (uint8_t *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->tos_and_mask_length * sizeof(uint8_t));
+        }
+    }
+
+    if (!bcmolt_epon_oam_buf_read(buf, this->tos_and_mask, this->tos_and_mask_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->tos_or_mask_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->tos_or_mask_length > 0) && (this->tos_or_mask == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"tos_or_mask\" of struct \"bcmolt_epon_oam_brcm_cmc_sf_config_data\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->tos_or_mask = (uint8_t *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->tos_or_mask_length * sizeof(uint8_t));
+        }
+    }
+
+    if (!bcmolt_epon_oam_buf_read(buf, this->tos_or_mask, this->tos_or_mask_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->max_latency))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->req_trans_policy_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->req_trans_policy_length > 0) && (this->req_trans_policy == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"req_trans_policy\" of struct \"bcmolt_epon_oam_brcm_cmc_sf_config_data\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->req_trans_policy = (uint8_t *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->req_trans_policy_length * sizeof(uint8_t));
+        }
+    }
+
+    if (!bcmolt_epon_oam_buf_read(buf, this->req_trans_policy, this->req_trans_policy_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->bitmap))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->reqd_attrib_mask))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->forbid_attrib_mask))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->attrib_aggr_mask))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->attrib_mask_success))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->application_idlength))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->application_idlength > 0) && (this->application_id == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"application_id\" of struct \"bcmolt_epon_oam_brcm_cmc_sf_config_data\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->application_id = (uint8_t *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->application_idlength * sizeof(uint8_t));
+        }
+    }
+
+    if (!bcmolt_epon_oam_buf_read(buf, this->application_id, this->application_idlength))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->cont_req_window_multi))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->bw_req_multi))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->peak_rate))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->create_time))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cmc_sf_config_data_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    uint8_t service_class_length;
+    uint8_t tos_and_mask_length;
+    uint8_t tos_or_mask_length;
+    uint8_t req_trans_policy_length;
+    uint8_t application_idlength;
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 3))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &service_class_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * service_class_length);
+    if (!bcmolt_epon_oam_buf_skip(packed, service_class_length * 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &tos_and_mask_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * tos_and_mask_length);
+    if (!bcmolt_epon_oam_buf_skip(packed, tos_and_mask_length * 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &tos_or_mask_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * tos_or_mask_length);
+    if (!bcmolt_epon_oam_buf_skip(packed, tos_or_mask_length * 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &req_trans_policy_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * req_trans_policy_length);
+    if (!bcmolt_epon_oam_buf_skip(packed, req_trans_policy_length * 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &application_idlength))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * application_idlength);
+    if (!bcmolt_epon_oam_buf_skip(packed, application_idlength * 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cmc_sf_stats_data_pack(bcmolt_epon_oam_brcm_cmc_sf_stats_data *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->svc_flow_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->total_pkt_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->total_byte_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->active_time))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->invalid_phs_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->pkts_dropped))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->pkts_delayed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cmc_sf_stats_data_unpack(bcmolt_epon_oam_brcm_cmc_sf_stats_data *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->svc_flow_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->total_pkt_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->total_byte_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->active_time))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->invalid_phs_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->pkts_dropped))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->pkts_delayed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cmc_sf_stats_data_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 36);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cnu_mac_addr_range_pack(bcmolt_epon_oam_brcm_cnu_mac_addr_range *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_mac_address(buf, this->cnu_mac_address_start))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_mac_address(buf, this->cnu_mac_address_end))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cnu_mac_addr_range_unpack(bcmolt_epon_oam_brcm_cnu_mac_addr_range *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_mac_address(buf, &this->cnu_mac_address_start))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_mac_address(buf, &this->cnu_mac_address_end))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cnu_mac_addr_range_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 12);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cnu_us_chan_data_pack(bcmolt_epon_oam_brcm_cnu_us_chan_data *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->channel_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->power_level))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->high_res_timing_offset))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->equalization_data_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->equalization_data_length > 0) && (this->equalization_data == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"equalization_data\" of struct \"bcmolt_epon_oam_brcm_cnu_us_chan_data\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write(buf, this->equalization_data, this->equalization_data_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->unerroreds))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->correcteds))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->uncorrectables))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->snr))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->micro_reflections))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_brcm_cnu_us_chan_data_get_packed_length(bcmolt_epon_oam_brcm_cnu_us_chan_data *this)
+{
+    return 37 + this->equalization_data_length;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cnu_us_chan_data_unpack(bcmolt_epon_oam_brcm_cnu_us_chan_data *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->channel_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->power_level))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->high_res_timing_offset))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->equalization_data_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->equalization_data_length > 0) && (this->equalization_data == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"equalization_data\" of struct \"bcmolt_epon_oam_brcm_cnu_us_chan_data\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->equalization_data = (uint8_t *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->equalization_data_length * sizeof(uint8_t));
+        }
+    }
+
+    if (!bcmolt_epon_oam_buf_read(buf, this->equalization_data, this->equalization_data_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->unerroreds))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->correcteds))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->uncorrectables))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->snr))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->micro_reflections))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cnu_us_chan_data_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    uint8_t equalization_data_length;
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &equalization_data_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * equalization_data_length);
+    if (!bcmolt_epon_oam_buf_skip(packed, equalization_data_length * 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 8))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 8))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 8))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cnu_status_data_pack(bcmolt_epon_oam_brcm_cnu_status_data *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t i0;
+    uint8_t i1;
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->idx))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_mac_address(buf, this->mac_address))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->uschan_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->uschan_count > 0) && (this->uschan_data == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"uschan_data\" of struct \"bcmolt_epon_oam_brcm_cnu_status_data\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->uschan_count; i0++)
+    {
+        if (!bcmolt_epon_oam_brcm_cnu_us_chan_data_pack(&this->uschan_data[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if (!bcmolt_epon_oam_brcm_cnu_connectivity_state_pack(this->connectivity_state, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_brcm_cnu_docsis_version_pack(this->docsis_version, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_brcm_cnu_ipaddr_type_pack(this->ipaddr_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->ipaddr_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->ipaddr_length > 0) && (this->ipaddr_value == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"ipaddr_value\" of struct \"bcmolt_epon_oam_brcm_cnu_status_data\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write(buf, this->ipaddr_value, this->ipaddr_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->timestamp))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->sflow_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->sflow_count > 0) && (this->sflow_id == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"sflow_id\" of struct \"bcmolt_epon_oam_brcm_cnu_status_data\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    for (i1 = 0; i1 < this->sflow_count; i1++)
+    {
+        if (!bcmolt_epon_oam_buf_write_u32(buf, this->sflow_id[i1]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->link_local_addr_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->link_local_addr_length > 0) && (this->link_local_addr == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"link_local_addr\" of struct \"bcmolt_epon_oam_brcm_cnu_status_data\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write(buf, this->link_local_addr, this->link_local_addr_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->mac_domain_index))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->service_group_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->rcp_idlength))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->rcp_idlength > 0) && (this->rcp_id == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"rcp_id\" of struct \"bcmolt_epon_oam_brcm_cnu_status_data\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write(buf, this->rcp_id, this->rcp_idlength))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->rcc_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->rcs_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->tcs_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->last_register_time))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->addr_resolve_requests))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_brcm_cnu_status_data_get_packed_length(bcmolt_epon_oam_brcm_cnu_status_data *this)
+{
+    uint32_t count = (48 + this->ipaddr_length) + (4 * this->sflow_count) + this->link_local_addr_length + this->rcp_idlength;
+    uint32_t i0;
+    if ((this->uschan_count > 0) && (this->uschan_data == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"uschan_count\" of struct \"bcmolt_epon_oam_brcm_cnu_status_data\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return 0;
+    }
+
+    for (i0 = 0; i0 < this->uschan_count; i0++)
+    {
+        count += bcmolt_epon_oam_brcm_cnu_us_chan_data_get_packed_length(&this->uschan_data[i0]);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cnu_status_data_unpack(bcmolt_epon_oam_brcm_cnu_status_data *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint8_t i0;
+    uint8_t i1;
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->idx))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_mac_address(buf, &this->mac_address))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->uschan_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->uschan_count > 0) && (this->uschan_data == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"uschan_data\" of struct \"bcmolt_epon_oam_brcm_cnu_status_data\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->uschan_data = (bcmolt_epon_oam_brcm_cnu_us_chan_data *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->uschan_count * sizeof(bcmolt_epon_oam_brcm_cnu_us_chan_data));
+        }
+    }
+
+    for (i0 = 0; i0 < this->uschan_count; i0++)
+    {
+        if (!bcmolt_epon_oam_brcm_cnu_us_chan_data_unpack(&this->uschan_data[i0], buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if (!bcmolt_epon_oam_brcm_cnu_connectivity_state_unpack(&this->connectivity_state, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_brcm_cnu_docsis_version_unpack(&this->docsis_version, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_brcm_cnu_ipaddr_type_unpack(&this->ipaddr_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->ipaddr_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->ipaddr_length > 0) && (this->ipaddr_value == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"ipaddr_value\" of struct \"bcmolt_epon_oam_brcm_cnu_status_data\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->ipaddr_value = (uint8_t *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->ipaddr_length * sizeof(uint8_t));
+        }
+    }
+
+    if (!bcmolt_epon_oam_buf_read(buf, this->ipaddr_value, this->ipaddr_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->timestamp))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->sflow_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->sflow_count > 0) && (this->sflow_id == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"sflow_id\" of struct \"bcmolt_epon_oam_brcm_cnu_status_data\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->sflow_id = (uint32_t *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->sflow_count * sizeof(uint32_t));
+        }
+    }
+
+    for (i1 = 0; i1 < this->sflow_count; i1++)
+    {
+        if (!bcmolt_epon_oam_buf_read_u32(buf, &this->sflow_id[i1]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->link_local_addr_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->link_local_addr_length > 0) && (this->link_local_addr == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"link_local_addr\" of struct \"bcmolt_epon_oam_brcm_cnu_status_data\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->link_local_addr = (uint8_t *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->link_local_addr_length * sizeof(uint8_t));
+        }
+    }
+
+    if (!bcmolt_epon_oam_buf_read(buf, this->link_local_addr, this->link_local_addr_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->mac_domain_index))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->service_group_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->rcp_idlength))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->rcp_idlength > 0) && (this->rcp_id == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"rcp_id\" of struct \"bcmolt_epon_oam_brcm_cnu_status_data\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->rcp_id = (uint8_t *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->rcp_idlength * sizeof(uint8_t));
+        }
+    }
+
+    if (!bcmolt_epon_oam_buf_read(buf, this->rcp_id, this->rcp_idlength))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->rcc_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->rcs_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->tcs_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->last_register_time))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->addr_resolve_requests))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_cnu_status_data_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    uint8_t uschan_count;
+    uint8_t i0;
+    uint8_t ipaddr_length;
+    uint8_t sflow_count;
+    uint8_t link_local_addr_length;
+    uint8_t rcp_idlength;
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 6))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &uschan_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_brcm_cnu_us_chan_data) * uschan_count);
+    for (i0 = 0; i0 < uschan_count; i0++)
+    {
+        if (!bcmolt_epon_oam_brcm_cnu_us_chan_data_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &ipaddr_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * ipaddr_length);
+    if (!bcmolt_epon_oam_buf_skip(packed, ipaddr_length * 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &sflow_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint32_t) * sflow_count);
+    if (!bcmolt_epon_oam_buf_skip(packed, sflow_count * 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &link_local_addr_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * link_local_addr_length);
+    if (!bcmolt_epon_oam_buf_skip(packed, link_local_addr_length * 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &rcp_idlength))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * rcp_idlength);
+    if (!bcmolt_epon_oam_buf_skip(packed, rcp_idlength * 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_downstream_channel_properties_pack(bcmolt_epon_oam_brcm_downstream_channel_properties *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->channel_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_bool(buf, this->is_enabled))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->center_frequency))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_brcm_cmc_modulation_pack(this->modulation, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_brcm_cmc_annex_pack(this->annex, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_brcm_cmc_interleaver_pack(this->interleaver, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->power_level))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->interface_index))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_downstream_channel_properties_unpack(bcmolt_epon_oam_brcm_downstream_channel_properties *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->channel_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_bool(buf, &this->is_enabled))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->center_frequency))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_brcm_cmc_modulation_unpack(&this->modulation, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_brcm_cmc_annex_unpack(&this->annex, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_brcm_cmc_interleaver_unpack(&this->interleaver, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->power_level))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->interface_index))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_downstream_channel_properties_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 13);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_upstream_channel_properties_pack(bcmolt_epon_oam_brcm_upstream_channel_properties *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->channel_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_bool(buf, this->is_enabled))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->center_frequency))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->channel_width))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_brcm_cmc_us_profile_type_pack(this->channel_profile_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_bool(buf, this->is_sac2sinc2enabled))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->minislot_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->transmit_timing_offset))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->initial_ranging_backoff))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->final_ranging_backoff))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->initial_data_backoff))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->final_data_backoff))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->active_scdma_codes))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->codes_per_slot))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->scdma_frame_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->hopping_seed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_brcm_cmc_us_modulation_type_pack(this->modulation_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->pre_equalization_setting))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->interface_index))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_upstream_channel_properties_unpack(bcmolt_epon_oam_brcm_upstream_channel_properties *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->channel_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_bool(buf, &this->is_enabled))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->center_frequency))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->channel_width))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_brcm_cmc_us_profile_type_unpack(&this->channel_profile_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_bool(buf, &this->is_sac2sinc2enabled))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->minislot_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->transmit_timing_offset))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->initial_ranging_backoff))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->final_ranging_backoff))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->initial_data_backoff))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->final_data_backoff))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->active_scdma_codes))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->codes_per_slot))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->scdma_frame_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->hopping_seed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_brcm_cmc_us_modulation_type_unpack(&this->modulation_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->pre_equalization_setting))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->interface_index))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_upstream_channel_properties_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 33);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_upstream_signal_quality_pack(bcmolt_epon_oam_brcm_upstream_signal_quality *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->interface_index))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->contention_intervals))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->unerroreds))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->correcteds))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->uncorrectables))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->snr))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->micro_reflections))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_upstream_signal_quality_unpack(bcmolt_epon_oam_brcm_upstream_signal_quality *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->interface_index))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->contention_intervals))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->unerroreds))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->correcteds))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->uncorrectables))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->snr))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->micro_reflections))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_upstream_signal_quality_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 32);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_upstream_channel_power_pack(bcmolt_epon_oam_brcm_upstream_channel_power *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->channel_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->input_power_level))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_upstream_channel_power_unpack(bcmolt_epon_oam_brcm_upstream_channel_power *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->channel_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->input_power_level))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_upstream_channel_power_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 3);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_oam_pdu_base_pack(bcmolt_epon_oam_brcm_oam_pdu_base *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->version))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->packet_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_brcm_oam_pdu_opcode_pack(this->opcode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->opcode)
+    {
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_DOWNSTREAM_CONFIG_REQUEST:
+            {
+                uint8_t i0;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.set_downstream_config_request.downstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.set_downstream_config_request.downstream_channels_count > 0) && (this->u.set_downstream_config_request.downstream_channels == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"downstream_channels\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_set_downstream_config_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i0 = 0; i0 < this->u.set_downstream_config_request.downstream_channels_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_brcm_downstream_channel_properties_pack(&this->u.set_downstream_config_request.downstream_channels[i0], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_DOWNSTREAM_CONFIG_RESPONSE:
+            {
+                uint8_t i1;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.set_downstream_config_response.downstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.set_downstream_config_response.downstream_channels_count > 0) && (this->u.set_downstream_config_response.downstream_channels == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"downstream_channels\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_set_downstream_config_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i1 = 0; i1 < this->u.set_downstream_config_response.downstream_channels_count; i1++)
+                {
+                    if (!bcmolt_epon_oam_brcm_channel_result_pack(&this->u.set_downstream_config_response.downstream_channels[i1], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_DOWNSTREAM_CONFIG_REQUEST:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.get_downstream_config_request.downstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_downstream_config_request.downstream_channels_count > 0) && (this->u.get_downstream_config_request.downstream_channels == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"downstream_channels\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_get_downstream_config_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.get_downstream_config_request.downstream_channels, this->u.get_downstream_config_request.downstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_DOWNSTREAM_CONFIG_RESPONSE:
+            {
+                uint8_t i2;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.get_downstream_config_response.downstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_downstream_config_response.downstream_channels_count > 0) && (this->u.get_downstream_config_response.downstream_channels == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"downstream_channels\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_get_downstream_config_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i2 = 0; i2 < this->u.get_downstream_config_response.downstream_channels_count; i2++)
+                {
+                    if (!bcmolt_epon_oam_brcm_downstream_channel_properties_pack(&this->u.get_downstream_config_response.downstream_channels[i2], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_UPSTREAM_CONFIG_REQUEST:
+            {
+                uint8_t i3;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.set_upstream_config_request.upstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.set_upstream_config_request.upstream_channels_count > 0) && (this->u.set_upstream_config_request.upstream_channels == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"upstream_channels\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_set_upstream_config_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i3 = 0; i3 < this->u.set_upstream_config_request.upstream_channels_count; i3++)
+                {
+                    if (!bcmolt_epon_oam_brcm_upstream_channel_properties_pack(&this->u.set_upstream_config_request.upstream_channels[i3], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_UPSTREAM_CONFIG_RESPONSE:
+            {
+                uint8_t i4;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.set_upstream_config_response.upstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.set_upstream_config_response.upstream_channels_count > 0) && (this->u.set_upstream_config_response.upstream_channels == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"upstream_channels\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_set_upstream_config_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i4 = 0; i4 < this->u.set_upstream_config_response.upstream_channels_count; i4++)
+                {
+                    if (!bcmolt_epon_oam_brcm_channel_result_pack(&this->u.set_upstream_config_response.upstream_channels[i4], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_UPSTREAM_CONFIG_REQUEST:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.get_upstream_config_request.upstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_upstream_config_request.upstream_channels_count > 0) && (this->u.get_upstream_config_request.upstream_channels == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"upstream_channels\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_get_upstream_config_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.get_upstream_config_request.upstream_channels, this->u.get_upstream_config_request.upstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_UPSTREAM_CONFIG_RESPONSE:
+            {
+                uint8_t i5;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.get_upstream_config_response.upstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_upstream_config_response.upstream_channels_count > 0) && (this->u.get_upstream_config_response.upstream_channels == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"upstream_channels\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_get_upstream_config_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i5 = 0; i5 < this->u.get_upstream_config_response.upstream_channels_count; i5++)
+                {
+                    if (!bcmolt_epon_oam_brcm_upstream_channel_properties_pack(&this->u.get_upstream_config_response.upstream_channels[i5], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_CREATE_LOAD_BALANCING_GROUP_REQUEST:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.set_create_load_balancing_group_request.group_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_brcm_cmc_load_balance_method_pack(this->u.set_create_load_balancing_group_request.method, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_brcm_cmc_request_option_pack(this->u.set_create_load_balancing_group_request.request_option, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_CREATE_LOAD_BALANCING_GROUP_RESPONSE:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.set_create_load_balancing_group_response.group_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_brcm_cmc_result_code_pack(this->u.set_create_load_balancing_group_response.result_code, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_ADD_DOWNSTREAMS_TO_LOAD_BALANCING_GROUP_REQUEST:
+            {
+                uint8_t i6;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.set_add_downstreams_to_load_balancing_group_request.group_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.set_add_downstreams_to_load_balancing_group_request.downstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.set_add_downstreams_to_load_balancing_group_request.downstream_channels_count > 0) && (this->u.set_add_downstreams_to_load_balancing_group_request.downstream_channels == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"downstream_channels\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_set_add_downstreams_to_load_balancing_group_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i6 = 0; i6 < this->u.set_add_downstreams_to_load_balancing_group_request.downstream_channels_count; i6++)
+                {
+                    if (!bcmolt_epon_oam_brcm_channel_option_pack(&this->u.set_add_downstreams_to_load_balancing_group_request.downstream_channels[i6], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_ADD_DOWNSTREAMS_TO_LOAD_BALANCING_GROUP_RESPONSE:
+            {
+                uint8_t i7;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.set_add_downstreams_to_load_balancing_group_response.group_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.set_add_downstreams_to_load_balancing_group_response.downstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.set_add_downstreams_to_load_balancing_group_response.downstream_channels_count > 0) && (this->u.set_add_downstreams_to_load_balancing_group_response.downstream_channels == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"downstream_channels\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_set_add_downstreams_to_load_balancing_group_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i7 = 0; i7 < this->u.set_add_downstreams_to_load_balancing_group_response.downstream_channels_count; i7++)
+                {
+                    if (!bcmolt_epon_oam_brcm_channel_result_pack(&this->u.set_add_downstreams_to_load_balancing_group_response.downstream_channels[i7], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_ADD_UPSTREAMS_TO_LOAD_BALANCING_GROUP_REQUEST:
+            {
+                uint8_t i8;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.set_add_upstreams_to_load_balancing_group_request.group_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.set_add_upstreams_to_load_balancing_group_request.upstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.set_add_upstreams_to_load_balancing_group_request.upstream_channels_count > 0) && (this->u.set_add_upstreams_to_load_balancing_group_request.upstream_channels == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"upstream_channels\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_set_add_upstreams_to_load_balancing_group_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i8 = 0; i8 < this->u.set_add_upstreams_to_load_balancing_group_request.upstream_channels_count; i8++)
+                {
+                    if (!bcmolt_epon_oam_brcm_channel_option_pack(&this->u.set_add_upstreams_to_load_balancing_group_request.upstream_channels[i8], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_ADD_UPSTREAMS_TO_LOAD_BALANCING_GROUP_RESPONSE:
+            {
+                uint8_t i9;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.set_add_upstreams_to_load_balancing_group_response.group_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.set_add_upstreams_to_load_balancing_group_response.upstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.set_add_upstreams_to_load_balancing_group_response.upstream_channels_count > 0) && (this->u.set_add_upstreams_to_load_balancing_group_response.upstream_channels == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"upstream_channels\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_set_add_upstreams_to_load_balancing_group_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i9 = 0; i9 < this->u.set_add_upstreams_to_load_balancing_group_response.upstream_channels_count; i9++)
+                {
+                    if (!bcmolt_epon_oam_brcm_channel_result_pack(&this->u.set_add_upstreams_to_load_balancing_group_response.upstream_channels[i9], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_SIGNAL_QUALITY_REQUEST:
+            {
+                uint8_t i10;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.get_signal_quality_request.upstream_interfaces_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_signal_quality_request.upstream_interfaces_count > 0) && (this->u.get_signal_quality_request.upstream_interfaces == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"upstream_interfaces\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_get_signal_quality_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i10 = 0; i10 < this->u.get_signal_quality_request.upstream_interfaces_count; i10++)
+                {
+                    if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.get_signal_quality_request.upstream_interfaces[i10]))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_SIGNAL_QUALITY_RESPONSE:
+            {
+                uint8_t i11;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.get_signal_quality_response.upstream_interfaces_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_signal_quality_response.upstream_interfaces_count > 0) && (this->u.get_signal_quality_response.upstream_interfaces == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"upstream_interfaces\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_get_signal_quality_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i11 = 0; i11 < this->u.get_signal_quality_response.upstream_interfaces_count; i11++)
+                {
+                    if (!bcmolt_epon_oam_brcm_upstream_signal_quality_pack(&this->u.get_signal_quality_response.upstream_interfaces[i11], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_CNU_STATUS_REQUEST:
+            {
+                uint16_t i12;
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.get_cnu_status_request.cnu_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_cnu_status_request.cnu_count > 0) && (this->u.get_cnu_status_request.cnu_mac_address == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"cnu_mac_address\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_get_cnu_status_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i12 = 0; i12 < this->u.get_cnu_status_request.cnu_count; i12++)
+                {
+                    if (!bcmolt_epon_oam_buf_write_mac_address(buf, this->u.get_cnu_status_request.cnu_mac_address[i12]))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_CNU_STATUS_RESPONSE:
+            {
+                uint16_t i13;
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.get_cnu_status_response.cnu_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_cnu_status_response.cnu_count > 0) && (this->u.get_cnu_status_response.cnu_status_data == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"cnu_status_data\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_get_cnu_status_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i13 = 0; i13 < this->u.get_cnu_status_response.cnu_count; i13++)
+                {
+                    if (!bcmolt_epon_oam_brcm_cnu_status_data_pack(&this->u.get_cnu_status_response.cnu_status_data[i13], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_QOS_SERVICE_FLOW_STATISTICS_REQUEST:
+            {
+                uint8_t i14;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.get_qos_service_flow_statistics_request.svc_flow_idcount))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_qos_service_flow_statistics_request.svc_flow_idcount > 0) && (this->u.get_qos_service_flow_statistics_request.svc_flow_ids == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"svc_flow_ids\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_get_qos_service_flow_statistics_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i14 = 0; i14 < this->u.get_qos_service_flow_statistics_request.svc_flow_idcount; i14++)
+                {
+                    if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.get_qos_service_flow_statistics_request.svc_flow_ids[i14]))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_QOS_SERVICE_FLOW_STATISTICS_RESPONSE:
+            {
+                uint8_t i15;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.get_qos_service_flow_statistics_response.svc_flow_idcount))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_qos_service_flow_statistics_response.svc_flow_idcount > 0) && (this->u.get_qos_service_flow_statistics_response.svc_flow_data == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"svc_flow_data\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_get_qos_service_flow_statistics_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i15 = 0; i15 < this->u.get_qos_service_flow_statistics_response.svc_flow_idcount; i15++)
+                {
+                    if (!bcmolt_epon_oam_brcm_cmc_sf_stats_data_pack(&this->u.get_qos_service_flow_statistics_response.svc_flow_data[i15], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_CMC_INTERFACES_REQUEST:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_CMC_INTERFACES_RESPONSE:
+            {
+                uint16_t i16;
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.get_cmc_interfaces_response.intf_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.get_cmc_interfaces_response.timestamp))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_cmc_interfaces_response.intf_count > 0) && (this->u.get_cmc_interfaces_response.cmc_interface_data == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"cmc_interface_data\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_get_cmc_interfaces_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i16 = 0; i16 < this->u.get_cmc_interfaces_response.intf_count; i16++)
+                {
+                    if (!bcmolt_epon_oam_brcm_cmc_interface_data_pack(&this->u.get_cmc_interfaces_response.cmc_interface_data[i16], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_CMC_MAC_STATISTICS_REQUEST:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_CMC_MAC_STATISTICS_RESPONSE:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.get_cmc_mac_statistics_response.interface_index))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.get_cmc_mac_statistics_response.invalid_rng_reqs))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.get_cmc_mac_statistics_response.rng_aborts))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.get_cmc_mac_statistics_response.invalid_reg_reqs))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.get_cmc_mac_statistics_response.failed_reg_reqs))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.get_cmc_mac_statistics_response.invalid_data_reqs))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.get_cmc_mac_statistics_response.t5timeouts))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_CMC_INTERFACES_STATISTICS_REQUEST:
+            {
+                uint8_t i17;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.get_cmc_interfaces_statistics_request.intf_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_cmc_interfaces_statistics_request.intf_count > 0) && (this->u.get_cmc_interfaces_statistics_request.intf_index == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"intf_index\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_get_cmc_interfaces_statistics_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i17 = 0; i17 < this->u.get_cmc_interfaces_statistics_request.intf_count; i17++)
+                {
+                    if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.get_cmc_interfaces_statistics_request.intf_index[i17]))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_CMC_INTERFACES_STATISTICS_RESPONSE:
+            {
+                uint8_t i18;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.get_cmc_interfaces_statistics_response.interfaces_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_cmc_interfaces_statistics_response.interfaces_count > 0) && (this->u.get_cmc_interfaces_statistics_response.network_interfaces == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"network_interfaces\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_get_cmc_interfaces_statistics_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i18 = 0; i18 < this->u.get_cmc_interfaces_statistics_response.interfaces_count; i18++)
+                {
+                    if (!bcmolt_epon_oam_brcm_cmc_intf_stats_data_pack(&this->u.get_cmc_interfaces_statistics_response.network_interfaces[i18], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_QOS_SERVICE_FLOW_CONFIG_REQUEST:
+            {
+                uint8_t i19;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.get_qos_service_flow_config_request.svc_flow_idcount))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_qos_service_flow_config_request.svc_flow_idcount > 0) && (this->u.get_qos_service_flow_config_request.svc_flow_ids == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"svc_flow_ids\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_get_qos_service_flow_config_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i19 = 0; i19 < this->u.get_qos_service_flow_config_request.svc_flow_idcount; i19++)
+                {
+                    if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.get_qos_service_flow_config_request.svc_flow_ids[i19]))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_QOS_SERVICE_FLOW_CONFIG_RESPONSE:
+            {
+                uint8_t i20;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.get_qos_service_flow_config_response.svc_flow_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_qos_service_flow_config_response.svc_flow_count > 0) && (this->u.get_qos_service_flow_config_response.svc_flow_data == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"svc_flow_data\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_get_qos_service_flow_config_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i20 = 0; i20 < this->u.get_qos_service_flow_config_response.svc_flow_count; i20++)
+                {
+                    if (!bcmolt_epon_oam_brcm_cmc_sf_config_data_pack(&this->u.get_qos_service_flow_config_response.svc_flow_data[i20], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_QOS_PACKET_CLASSIFIER_CONFIG_REQUEST:
+            {
+                uint8_t i21;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.get_qos_packet_classifier_config_request.svc_flow_idcount))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_qos_packet_classifier_config_request.svc_flow_idcount > 0) && (this->u.get_qos_packet_classifier_config_request.svc_flow_ids == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"svc_flow_ids\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_get_qos_packet_classifier_config_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i21 = 0; i21 < this->u.get_qos_packet_classifier_config_request.svc_flow_idcount; i21++)
+                {
+                    if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.get_qos_packet_classifier_config_request.svc_flow_ids[i21]))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_QOS_PACKET_CLASSIFIER_CONFIG_RESPONSE:
+            {
+                uint8_t i22;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.get_qos_packet_classifier_config_response.classifier_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_qos_packet_classifier_config_response.classifier_count > 0) && (this->u.get_qos_packet_classifier_config_response.classifier_data == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"classifier_data\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_get_qos_packet_classifier_config_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i22 = 0; i22 < this->u.get_qos_packet_classifier_config_response.classifier_count; i22++)
+                {
+                    if (!bcmolt_epon_oam_brcm_cmc_classifier_config_data_pack(&this->u.get_qos_packet_classifier_config_response.classifier_data[i22], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_UPSTREAM_INPUT_POWER_REQUEST:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.get_upstream_input_power_request.upstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_upstream_input_power_request.upstream_channels_count > 0) && (this->u.get_upstream_input_power_request.upstream_channels == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"upstream_channels\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_get_upstream_input_power_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.get_upstream_input_power_request.upstream_channels, this->u.get_upstream_input_power_request.upstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_UPSTREAM_INPUT_POWER_RESPONSE:
+            {
+                uint8_t i23;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.get_upstream_input_power_response.upstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_upstream_input_power_response.upstream_channels_count > 0) && (this->u.get_upstream_input_power_response.upstream_channels == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"upstream_channels\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_get_upstream_input_power_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i23 = 0; i23 < this->u.get_upstream_input_power_response.upstream_channels_count; i23++)
+                {
+                    if (!bcmolt_epon_oam_brcm_upstream_channel_power_pack(&this->u.get_upstream_input_power_response.upstream_channels[i23], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_UPSTREAM_INPUT_POWER_REQUEST:
+            {
+                uint8_t i24;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.set_upstream_input_power_request.upstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.set_upstream_input_power_request.upstream_channels_count > 0) && (this->u.set_upstream_input_power_request.upstream_channels == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"upstream_channels\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_set_upstream_input_power_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i24 = 0; i24 < this->u.set_upstream_input_power_request.upstream_channels_count; i24++)
+                {
+                    if (!bcmolt_epon_oam_brcm_upstream_channel_power_pack(&this->u.set_upstream_input_power_request.upstream_channels[i24], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_UPSTREAM_INPUT_POWER_RESPONSE:
+            {
+                if (!bcmolt_epon_oam_brcm_cmc_result_code_pack(this->u.set_upstream_input_power_response.result_code, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.set_upstream_input_power_response.channel_one_power))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.set_upstream_input_power_response.channel_two_power))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.set_upstream_input_power_response.channel_three_power))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.set_upstream_input_power_response.channel_four_power))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_ADD_CNUS_TO_LOAD_BALANCING_GROUP_REQUEST:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.set_add_cnus_to_load_balancing_group_request.group_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_brcm_cmc_request_option_pack(this->u.set_add_cnus_to_load_balancing_group_request.request_option, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_brcm_cnu_mac_addr_range_pack(&this->u.set_add_cnus_to_load_balancing_group_request.cnu_mac_range, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_ADD_CNUS_TO_LOAD_BALANCING_GROUP_RESPONSE:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.set_add_cnus_to_load_balancing_group_response.group_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_brcm_cmc_result_code_pack(this->u.set_add_cnus_to_load_balancing_group_response.result_code, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_EXCLUDE_CNUS_FROM_LOAD_BALANCING_REQUEST:
+            {
+                if (!bcmolt_epon_oam_brcm_cmc_request_option_pack(this->u.set_exclude_cnus_from_load_balancing_request.request_option, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_mac_address(buf, this->u.set_exclude_cnus_from_load_balancing_request.cnu_mac_address_start))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_mac_address(buf, this->u.set_exclude_cnus_from_load_balancing_request.cnu_mac_address_end))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_EXCLUDE_CNUS_FROM_LOAD_BALANCING_RESPONSE:
+            {
+                if (!bcmolt_epon_oam_brcm_cmc_result_code_pack(this->u.set_exclude_cnus_from_load_balancing_response.result_code, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_FULL_LOAD_BALANCING_GROUP_REQUEST:
+            {
+                uint8_t i25;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.set_full_load_balancing_group_request.group_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_brcm_cmc_load_balance_method_pack(this->u.set_full_load_balancing_group_request.method, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.set_full_load_balancing_group_request.downstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.set_full_load_balancing_group_request.downstream_channels_count > 0) && (this->u.set_full_load_balancing_group_request.downstream_channels == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"downstream_channels\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_set_full_load_balancing_group_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.set_full_load_balancing_group_request.downstream_channels, this->u.set_full_load_balancing_group_request.downstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.set_full_load_balancing_group_request.upstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.set_full_load_balancing_group_request.upstream_channels_count > 0) && (this->u.set_full_load_balancing_group_request.upstream_channels == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"upstream_channels\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_set_full_load_balancing_group_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.set_full_load_balancing_group_request.upstream_channels, this->u.set_full_load_balancing_group_request.upstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.set_full_load_balancing_group_request.restrictions_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.set_full_load_balancing_group_request.restrictions_count > 0) && (this->u.set_full_load_balancing_group_request.restrictions == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"restrictions\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_set_full_load_balancing_group_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i25 = 0; i25 < this->u.set_full_load_balancing_group_request.restrictions_count; i25++)
+                {
+                    if (!bcmolt_epon_oam_brcm_cnu_mac_addr_range_pack(&this->u.set_full_load_balancing_group_request.restrictions[i25], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_FULL_LOAD_BALANCING_GROUP_RESPONSE:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.set_full_load_balancing_group_response.group_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_brcm_cmc_result_code_pack(this->u.set_full_load_balancing_group_response.result_code, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_CMC_SYSTEM_EVENT_MESSAGE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_DOWNSTREAM_BONDING_GROUP_STATUS_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_DOWNSTREAM_BONDING_GROUP_STATUS_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_EXCLUDED_ACTIVE_CNUS_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_EXCLUDED_ACTIVE_CNUS_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_EXCLUDED_CNU_CONFIGURATION_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_EXCLUDED_CNUS_CONFIGURATION_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_FULL_LOAD_BALANCING_GROUP_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_FULL_LOAD_BALANCING_GROUP_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUP_ACTIVE_CNUS_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUP_ACTIVE_CNUS_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUP_CNU_CONFIGURATION_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUP_CNU_CONFIGURATION_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUP_DOWNSTREAMS_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUP_DOWNSTREAMS_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUP_UPSTREAMS_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUP_UPSTREAMS_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUPS_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUPS_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_MAX_UPSTREAM_RFATTENUATION_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_MAX_UPSTREAM_RFATTENUATION_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_MOVE_CNU_DOWNSTREAM_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_MOVE_CNU_DOWNSTREAM_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_MOVE_CNU_UPSTREAM_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_MOVE_CNU_UPSTREAM_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_SERVICES_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_SERVICES_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_UPSTREAM_BONDING_GROUP_STATUS_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_UPSTREAM_BONDING_GROUP_STATUS_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_REG_RSP_EVENT_MESSAGE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_MAX_UPSTREAM_RFATTENUATION_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_MAX_UPSTREAM_RFATTENUATION_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_MOVE_CNU_DOWNSTREAM_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_MOVE_CNU_DOWNSTREAM_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_MOVE_CNU_UPSTREAM_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_MOVE_CNU_UPSTREAM_RESPONSE:
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_brcm_oam_pdu_base_get_packed_length(bcmolt_epon_oam_brcm_oam_pdu_base *this)
+{
+    uint32_t count = 5;
+    switch (this->opcode)
+    {
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_DOWNSTREAM_CONFIG_REQUEST:
+            {
+                count += 1 + (13 * this->u.set_downstream_config_request.downstream_channels_count);
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_DOWNSTREAM_CONFIG_RESPONSE:
+            {
+                count += 1 + (2 * this->u.set_downstream_config_response.downstream_channels_count);
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_DOWNSTREAM_CONFIG_REQUEST:
+            {
+                count += 1 + this->u.get_downstream_config_request.downstream_channels_count;
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_DOWNSTREAM_CONFIG_RESPONSE:
+            {
+                count += 1 + (13 * this->u.get_downstream_config_response.downstream_channels_count);
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_UPSTREAM_CONFIG_REQUEST:
+            {
+                count += 1 + (33 * this->u.set_upstream_config_request.upstream_channels_count);
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_UPSTREAM_CONFIG_RESPONSE:
+            {
+                count += 1 + (2 * this->u.set_upstream_config_response.upstream_channels_count);
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_UPSTREAM_CONFIG_REQUEST:
+            {
+                count += 1 + this->u.get_upstream_config_request.upstream_channels_count;
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_UPSTREAM_CONFIG_RESPONSE:
+            {
+                count += 1 + (33 * this->u.get_upstream_config_response.upstream_channels_count);
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_CREATE_LOAD_BALANCING_GROUP_REQUEST:
+            {
+                count += 3;
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_CREATE_LOAD_BALANCING_GROUP_RESPONSE:
+            {
+                count += 2;
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_ADD_DOWNSTREAMS_TO_LOAD_BALANCING_GROUP_REQUEST:
+            {
+                count += 2 + (2 * this->u.set_add_downstreams_to_load_balancing_group_request.downstream_channels_count);
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_ADD_DOWNSTREAMS_TO_LOAD_BALANCING_GROUP_RESPONSE:
+            {
+                count += 2 + (2 * this->u.set_add_downstreams_to_load_balancing_group_response.downstream_channels_count);
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_ADD_UPSTREAMS_TO_LOAD_BALANCING_GROUP_REQUEST:
+            {
+                count += 2 + (2 * this->u.set_add_upstreams_to_load_balancing_group_request.upstream_channels_count);
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_ADD_UPSTREAMS_TO_LOAD_BALANCING_GROUP_RESPONSE:
+            {
+                count += 2 + (2 * this->u.set_add_upstreams_to_load_balancing_group_response.upstream_channels_count);
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_SIGNAL_QUALITY_REQUEST:
+            {
+                count += 1 + (2 * this->u.get_signal_quality_request.upstream_interfaces_count);
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_SIGNAL_QUALITY_RESPONSE:
+            {
+                count += 1 + (32 * this->u.get_signal_quality_response.upstream_interfaces_count);
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_CNU_STATUS_REQUEST:
+            {
+                count += 2 + (6 * this->u.get_cnu_status_request.cnu_count);
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_CNU_STATUS_RESPONSE:
+            {
+                uint32_t i0;
+                count += 2;
+                if ((this->u.get_cnu_status_response.cnu_count > 0) && (this->u.get_cnu_status_response.cnu_status_data == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"cnu_count\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return 0;
+                }
+
+                for (i0 = 0; i0 < this->u.get_cnu_status_response.cnu_count; i0++)
+                {
+                    count += bcmolt_epon_oam_brcm_cnu_status_data_get_packed_length(&this->u.get_cnu_status_response.cnu_status_data[i0]);
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_QOS_SERVICE_FLOW_STATISTICS_REQUEST:
+            {
+                count += 1 + (2 * this->u.get_qos_service_flow_statistics_request.svc_flow_idcount);
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_QOS_SERVICE_FLOW_STATISTICS_RESPONSE:
+            {
+                count += 1 + (36 * this->u.get_qos_service_flow_statistics_response.svc_flow_idcount);
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_CMC_INTERFACES_REQUEST:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_CMC_INTERFACES_RESPONSE:
+            {
+                uint32_t i1;
+                count += 6;
+                if ((this->u.get_cmc_interfaces_response.intf_count > 0) && (this->u.get_cmc_interfaces_response.cmc_interface_data == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"intf_count\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return 0;
+                }
+
+                for (i1 = 0; i1 < this->u.get_cmc_interfaces_response.intf_count; i1++)
+                {
+                    count += bcmolt_epon_oam_brcm_cmc_interface_data_get_packed_length(&this->u.get_cmc_interfaces_response.cmc_interface_data[i1]);
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_CMC_MAC_STATISTICS_REQUEST:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_CMC_MAC_STATISTICS_RESPONSE:
+            {
+                count += 26;
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_CMC_INTERFACES_STATISTICS_REQUEST:
+            {
+                count += 1 + (2 * this->u.get_cmc_interfaces_statistics_request.intf_count);
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_CMC_INTERFACES_STATISTICS_RESPONSE:
+            {
+                count += 1 + (105 * this->u.get_cmc_interfaces_statistics_response.interfaces_count);
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_QOS_SERVICE_FLOW_CONFIG_REQUEST:
+            {
+                count += 1 + (2 * this->u.get_qos_service_flow_config_request.svc_flow_idcount);
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_QOS_SERVICE_FLOW_CONFIG_RESPONSE:
+            {
+                uint32_t i2;
+                count += 1;
+                if ((this->u.get_qos_service_flow_config_response.svc_flow_count > 0) && (this->u.get_qos_service_flow_config_response.svc_flow_data == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"svc_flow_count\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return 0;
+                }
+
+                for (i2 = 0; i2 < this->u.get_qos_service_flow_config_response.svc_flow_count; i2++)
+                {
+                    count += bcmolt_epon_oam_brcm_cmc_sf_config_data_get_packed_length(&this->u.get_qos_service_flow_config_response.svc_flow_data[i2]);
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_QOS_PACKET_CLASSIFIER_CONFIG_REQUEST:
+            {
+                count += 1 + (2 * this->u.get_qos_packet_classifier_config_request.svc_flow_idcount);
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_QOS_PACKET_CLASSIFIER_CONFIG_RESPONSE:
+            {
+                uint32_t i3;
+                count += 1;
+                if ((this->u.get_qos_packet_classifier_config_response.classifier_count > 0) && (this->u.get_qos_packet_classifier_config_response.classifier_data == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"classifier_count\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return 0;
+                }
+
+                for (i3 = 0; i3 < this->u.get_qos_packet_classifier_config_response.classifier_count; i3++)
+                {
+                    count += bcmolt_epon_oam_brcm_cmc_classifier_config_data_get_packed_length(&this->u.get_qos_packet_classifier_config_response.classifier_data[i3]);
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_UPSTREAM_INPUT_POWER_REQUEST:
+            {
+                count += 1 + this->u.get_upstream_input_power_request.upstream_channels_count;
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_UPSTREAM_INPUT_POWER_RESPONSE:
+            {
+                count += 1 + (3 * this->u.get_upstream_input_power_response.upstream_channels_count);
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_UPSTREAM_INPUT_POWER_REQUEST:
+            {
+                count += 1 + (3 * this->u.set_upstream_input_power_request.upstream_channels_count);
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_UPSTREAM_INPUT_POWER_RESPONSE:
+            {
+                count += 9;
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_ADD_CNUS_TO_LOAD_BALANCING_GROUP_REQUEST:
+            {
+                count += 14;
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_ADD_CNUS_TO_LOAD_BALANCING_GROUP_RESPONSE:
+            {
+                count += 2;
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_EXCLUDE_CNUS_FROM_LOAD_BALANCING_REQUEST:
+            {
+                count += 13;
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_EXCLUDE_CNUS_FROM_LOAD_BALANCING_RESPONSE:
+            {
+                count += 1;
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_FULL_LOAD_BALANCING_GROUP_REQUEST:
+            {
+                count += (5 + this->u.set_full_load_balancing_group_request.downstream_channels_count + this->u.set_full_load_balancing_group_request.upstream_channels_count) + (12 * this->u.set_full_load_balancing_group_request.restrictions_count);
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_FULL_LOAD_BALANCING_GROUP_RESPONSE:
+            {
+                count += 2;
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_CMC_SYSTEM_EVENT_MESSAGE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_DOWNSTREAM_BONDING_GROUP_STATUS_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_DOWNSTREAM_BONDING_GROUP_STATUS_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_EXCLUDED_ACTIVE_CNUS_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_EXCLUDED_ACTIVE_CNUS_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_EXCLUDED_CNU_CONFIGURATION_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_EXCLUDED_CNUS_CONFIGURATION_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_FULL_LOAD_BALANCING_GROUP_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_FULL_LOAD_BALANCING_GROUP_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUP_ACTIVE_CNUS_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUP_ACTIVE_CNUS_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUP_CNU_CONFIGURATION_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUP_CNU_CONFIGURATION_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUP_DOWNSTREAMS_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUP_DOWNSTREAMS_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUP_UPSTREAMS_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUP_UPSTREAMS_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUPS_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUPS_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_MAX_UPSTREAM_RFATTENUATION_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_MAX_UPSTREAM_RFATTENUATION_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_MOVE_CNU_DOWNSTREAM_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_MOVE_CNU_DOWNSTREAM_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_MOVE_CNU_UPSTREAM_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_MOVE_CNU_UPSTREAM_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_SERVICES_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_SERVICES_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_UPSTREAM_BONDING_GROUP_STATUS_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_UPSTREAM_BONDING_GROUP_STATUS_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_REG_RSP_EVENT_MESSAGE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_MAX_UPSTREAM_RFATTENUATION_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_MAX_UPSTREAM_RFATTENUATION_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_MOVE_CNU_DOWNSTREAM_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_MOVE_CNU_DOWNSTREAM_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_MOVE_CNU_UPSTREAM_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_MOVE_CNU_UPSTREAM_RESPONSE:
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_oam_pdu_base_unpack(bcmolt_epon_oam_brcm_oam_pdu_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->version))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->packet_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_brcm_oam_pdu_opcode_unpack(&this->opcode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->opcode)
+    {
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_DOWNSTREAM_CONFIG_REQUEST:
+            {
+                uint8_t i0;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.set_downstream_config_request.downstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.set_downstream_config_request.downstream_channels_count > 0) && (this->u.set_downstream_config_request.downstream_channels == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"downstream_channels\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_set_downstream_config_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.set_downstream_config_request.downstream_channels = (bcmolt_epon_oam_brcm_downstream_channel_properties *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.set_downstream_config_request.downstream_channels_count * sizeof(bcmolt_epon_oam_brcm_downstream_channel_properties));
+                    }
+                }
+
+                for (i0 = 0; i0 < this->u.set_downstream_config_request.downstream_channels_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_brcm_downstream_channel_properties_unpack(&this->u.set_downstream_config_request.downstream_channels[i0], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_DOWNSTREAM_CONFIG_RESPONSE:
+            {
+                uint8_t i1;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.set_downstream_config_response.downstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.set_downstream_config_response.downstream_channels_count > 0) && (this->u.set_downstream_config_response.downstream_channels == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"downstream_channels\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_set_downstream_config_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.set_downstream_config_response.downstream_channels = (bcmolt_epon_oam_brcm_channel_result *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.set_downstream_config_response.downstream_channels_count * sizeof(bcmolt_epon_oam_brcm_channel_result));
+                    }
+                }
+
+                for (i1 = 0; i1 < this->u.set_downstream_config_response.downstream_channels_count; i1++)
+                {
+                    if (!bcmolt_epon_oam_brcm_channel_result_unpack(&this->u.set_downstream_config_response.downstream_channels[i1], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_DOWNSTREAM_CONFIG_REQUEST:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.get_downstream_config_request.downstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_downstream_config_request.downstream_channels_count > 0) && (this->u.get_downstream_config_request.downstream_channels == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"downstream_channels\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_get_downstream_config_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.get_downstream_config_request.downstream_channels = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.get_downstream_config_request.downstream_channels_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.get_downstream_config_request.downstream_channels, this->u.get_downstream_config_request.downstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_DOWNSTREAM_CONFIG_RESPONSE:
+            {
+                uint8_t i2;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.get_downstream_config_response.downstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_downstream_config_response.downstream_channels_count > 0) && (this->u.get_downstream_config_response.downstream_channels == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"downstream_channels\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_get_downstream_config_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.get_downstream_config_response.downstream_channels = (bcmolt_epon_oam_brcm_downstream_channel_properties *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.get_downstream_config_response.downstream_channels_count * sizeof(bcmolt_epon_oam_brcm_downstream_channel_properties));
+                    }
+                }
+
+                for (i2 = 0; i2 < this->u.get_downstream_config_response.downstream_channels_count; i2++)
+                {
+                    if (!bcmolt_epon_oam_brcm_downstream_channel_properties_unpack(&this->u.get_downstream_config_response.downstream_channels[i2], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_UPSTREAM_CONFIG_REQUEST:
+            {
+                uint8_t i3;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.set_upstream_config_request.upstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.set_upstream_config_request.upstream_channels_count > 0) && (this->u.set_upstream_config_request.upstream_channels == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"upstream_channels\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_set_upstream_config_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.set_upstream_config_request.upstream_channels = (bcmolt_epon_oam_brcm_upstream_channel_properties *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.set_upstream_config_request.upstream_channels_count * sizeof(bcmolt_epon_oam_brcm_upstream_channel_properties));
+                    }
+                }
+
+                for (i3 = 0; i3 < this->u.set_upstream_config_request.upstream_channels_count; i3++)
+                {
+                    if (!bcmolt_epon_oam_brcm_upstream_channel_properties_unpack(&this->u.set_upstream_config_request.upstream_channels[i3], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_UPSTREAM_CONFIG_RESPONSE:
+            {
+                uint8_t i4;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.set_upstream_config_response.upstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.set_upstream_config_response.upstream_channels_count > 0) && (this->u.set_upstream_config_response.upstream_channels == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"upstream_channels\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_set_upstream_config_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.set_upstream_config_response.upstream_channels = (bcmolt_epon_oam_brcm_channel_result *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.set_upstream_config_response.upstream_channels_count * sizeof(bcmolt_epon_oam_brcm_channel_result));
+                    }
+                }
+
+                for (i4 = 0; i4 < this->u.set_upstream_config_response.upstream_channels_count; i4++)
+                {
+                    if (!bcmolt_epon_oam_brcm_channel_result_unpack(&this->u.set_upstream_config_response.upstream_channels[i4], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_UPSTREAM_CONFIG_REQUEST:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.get_upstream_config_request.upstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_upstream_config_request.upstream_channels_count > 0) && (this->u.get_upstream_config_request.upstream_channels == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"upstream_channels\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_get_upstream_config_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.get_upstream_config_request.upstream_channels = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.get_upstream_config_request.upstream_channels_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.get_upstream_config_request.upstream_channels, this->u.get_upstream_config_request.upstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_UPSTREAM_CONFIG_RESPONSE:
+            {
+                uint8_t i5;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.get_upstream_config_response.upstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_upstream_config_response.upstream_channels_count > 0) && (this->u.get_upstream_config_response.upstream_channels == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"upstream_channels\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_get_upstream_config_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.get_upstream_config_response.upstream_channels = (bcmolt_epon_oam_brcm_upstream_channel_properties *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.get_upstream_config_response.upstream_channels_count * sizeof(bcmolt_epon_oam_brcm_upstream_channel_properties));
+                    }
+                }
+
+                for (i5 = 0; i5 < this->u.get_upstream_config_response.upstream_channels_count; i5++)
+                {
+                    if (!bcmolt_epon_oam_brcm_upstream_channel_properties_unpack(&this->u.get_upstream_config_response.upstream_channels[i5], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_CREATE_LOAD_BALANCING_GROUP_REQUEST:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.set_create_load_balancing_group_request.group_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_brcm_cmc_load_balance_method_unpack(&this->u.set_create_load_balancing_group_request.method, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_brcm_cmc_request_option_unpack(&this->u.set_create_load_balancing_group_request.request_option, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_CREATE_LOAD_BALANCING_GROUP_RESPONSE:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.set_create_load_balancing_group_response.group_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_brcm_cmc_result_code_unpack(&this->u.set_create_load_balancing_group_response.result_code, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_ADD_DOWNSTREAMS_TO_LOAD_BALANCING_GROUP_REQUEST:
+            {
+                uint8_t i6;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.set_add_downstreams_to_load_balancing_group_request.group_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.set_add_downstreams_to_load_balancing_group_request.downstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.set_add_downstreams_to_load_balancing_group_request.downstream_channels_count > 0) && (this->u.set_add_downstreams_to_load_balancing_group_request.downstream_channels == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"downstream_channels\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_set_add_downstreams_to_load_balancing_group_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.set_add_downstreams_to_load_balancing_group_request.downstream_channels = (bcmolt_epon_oam_brcm_channel_option *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.set_add_downstreams_to_load_balancing_group_request.downstream_channels_count * sizeof(bcmolt_epon_oam_brcm_channel_option));
+                    }
+                }
+
+                for (i6 = 0; i6 < this->u.set_add_downstreams_to_load_balancing_group_request.downstream_channels_count; i6++)
+                {
+                    if (!bcmolt_epon_oam_brcm_channel_option_unpack(&this->u.set_add_downstreams_to_load_balancing_group_request.downstream_channels[i6], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_ADD_DOWNSTREAMS_TO_LOAD_BALANCING_GROUP_RESPONSE:
+            {
+                uint8_t i7;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.set_add_downstreams_to_load_balancing_group_response.group_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.set_add_downstreams_to_load_balancing_group_response.downstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.set_add_downstreams_to_load_balancing_group_response.downstream_channels_count > 0) && (this->u.set_add_downstreams_to_load_balancing_group_response.downstream_channels == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"downstream_channels\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_set_add_downstreams_to_load_balancing_group_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.set_add_downstreams_to_load_balancing_group_response.downstream_channels = (bcmolt_epon_oam_brcm_channel_result *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.set_add_downstreams_to_load_balancing_group_response.downstream_channels_count * sizeof(bcmolt_epon_oam_brcm_channel_result));
+                    }
+                }
+
+                for (i7 = 0; i7 < this->u.set_add_downstreams_to_load_balancing_group_response.downstream_channels_count; i7++)
+                {
+                    if (!bcmolt_epon_oam_brcm_channel_result_unpack(&this->u.set_add_downstreams_to_load_balancing_group_response.downstream_channels[i7], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_ADD_UPSTREAMS_TO_LOAD_BALANCING_GROUP_REQUEST:
+            {
+                uint8_t i8;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.set_add_upstreams_to_load_balancing_group_request.group_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.set_add_upstreams_to_load_balancing_group_request.upstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.set_add_upstreams_to_load_balancing_group_request.upstream_channels_count > 0) && (this->u.set_add_upstreams_to_load_balancing_group_request.upstream_channels == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"upstream_channels\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_set_add_upstreams_to_load_balancing_group_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.set_add_upstreams_to_load_balancing_group_request.upstream_channels = (bcmolt_epon_oam_brcm_channel_option *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.set_add_upstreams_to_load_balancing_group_request.upstream_channels_count * sizeof(bcmolt_epon_oam_brcm_channel_option));
+                    }
+                }
+
+                for (i8 = 0; i8 < this->u.set_add_upstreams_to_load_balancing_group_request.upstream_channels_count; i8++)
+                {
+                    if (!bcmolt_epon_oam_brcm_channel_option_unpack(&this->u.set_add_upstreams_to_load_balancing_group_request.upstream_channels[i8], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_ADD_UPSTREAMS_TO_LOAD_BALANCING_GROUP_RESPONSE:
+            {
+                uint8_t i9;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.set_add_upstreams_to_load_balancing_group_response.group_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.set_add_upstreams_to_load_balancing_group_response.upstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.set_add_upstreams_to_load_balancing_group_response.upstream_channels_count > 0) && (this->u.set_add_upstreams_to_load_balancing_group_response.upstream_channels == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"upstream_channels\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_set_add_upstreams_to_load_balancing_group_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.set_add_upstreams_to_load_balancing_group_response.upstream_channels = (bcmolt_epon_oam_brcm_channel_result *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.set_add_upstreams_to_load_balancing_group_response.upstream_channels_count * sizeof(bcmolt_epon_oam_brcm_channel_result));
+                    }
+                }
+
+                for (i9 = 0; i9 < this->u.set_add_upstreams_to_load_balancing_group_response.upstream_channels_count; i9++)
+                {
+                    if (!bcmolt_epon_oam_brcm_channel_result_unpack(&this->u.set_add_upstreams_to_load_balancing_group_response.upstream_channels[i9], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_SIGNAL_QUALITY_REQUEST:
+            {
+                uint8_t i10;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.get_signal_quality_request.upstream_interfaces_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_signal_quality_request.upstream_interfaces_count > 0) && (this->u.get_signal_quality_request.upstream_interfaces == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"upstream_interfaces\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_get_signal_quality_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.get_signal_quality_request.upstream_interfaces = (uint16_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.get_signal_quality_request.upstream_interfaces_count * sizeof(uint16_t));
+                    }
+                }
+
+                for (i10 = 0; i10 < this->u.get_signal_quality_request.upstream_interfaces_count; i10++)
+                {
+                    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.get_signal_quality_request.upstream_interfaces[i10]))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_SIGNAL_QUALITY_RESPONSE:
+            {
+                uint8_t i11;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.get_signal_quality_response.upstream_interfaces_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_signal_quality_response.upstream_interfaces_count > 0) && (this->u.get_signal_quality_response.upstream_interfaces == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"upstream_interfaces\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_get_signal_quality_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.get_signal_quality_response.upstream_interfaces = (bcmolt_epon_oam_brcm_upstream_signal_quality *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.get_signal_quality_response.upstream_interfaces_count * sizeof(bcmolt_epon_oam_brcm_upstream_signal_quality));
+                    }
+                }
+
+                for (i11 = 0; i11 < this->u.get_signal_quality_response.upstream_interfaces_count; i11++)
+                {
+                    if (!bcmolt_epon_oam_brcm_upstream_signal_quality_unpack(&this->u.get_signal_quality_response.upstream_interfaces[i11], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_CNU_STATUS_REQUEST:
+            {
+                uint16_t i12;
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.get_cnu_status_request.cnu_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_cnu_status_request.cnu_count > 0) && (this->u.get_cnu_status_request.cnu_mac_address == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"cnu_mac_address\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_get_cnu_status_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.get_cnu_status_request.cnu_mac_address = (bcmos_mac_address *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.get_cnu_status_request.cnu_count * sizeof(bcmos_mac_address));
+                    }
+                }
+
+                for (i12 = 0; i12 < this->u.get_cnu_status_request.cnu_count; i12++)
+                {
+                    if (!bcmolt_epon_oam_buf_read_mac_address(buf, &this->u.get_cnu_status_request.cnu_mac_address[i12]))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_CNU_STATUS_RESPONSE:
+            {
+                uint16_t i13;
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.get_cnu_status_response.cnu_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_cnu_status_response.cnu_count > 0) && (this->u.get_cnu_status_response.cnu_status_data == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"cnu_status_data\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_get_cnu_status_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.get_cnu_status_response.cnu_status_data = (bcmolt_epon_oam_brcm_cnu_status_data *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.get_cnu_status_response.cnu_count * sizeof(bcmolt_epon_oam_brcm_cnu_status_data));
+                    }
+                }
+
+                for (i13 = 0; i13 < this->u.get_cnu_status_response.cnu_count; i13++)
+                {
+                    if (!bcmolt_epon_oam_brcm_cnu_status_data_unpack(&this->u.get_cnu_status_response.cnu_status_data[i13], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_QOS_SERVICE_FLOW_STATISTICS_REQUEST:
+            {
+                uint8_t i14;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.get_qos_service_flow_statistics_request.svc_flow_idcount))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_qos_service_flow_statistics_request.svc_flow_idcount > 0) && (this->u.get_qos_service_flow_statistics_request.svc_flow_ids == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"svc_flow_ids\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_get_qos_service_flow_statistics_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.get_qos_service_flow_statistics_request.svc_flow_ids = (uint16_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.get_qos_service_flow_statistics_request.svc_flow_idcount * sizeof(uint16_t));
+                    }
+                }
+
+                for (i14 = 0; i14 < this->u.get_qos_service_flow_statistics_request.svc_flow_idcount; i14++)
+                {
+                    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.get_qos_service_flow_statistics_request.svc_flow_ids[i14]))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_QOS_SERVICE_FLOW_STATISTICS_RESPONSE:
+            {
+                uint8_t i15;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.get_qos_service_flow_statistics_response.svc_flow_idcount))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_qos_service_flow_statistics_response.svc_flow_idcount > 0) && (this->u.get_qos_service_flow_statistics_response.svc_flow_data == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"svc_flow_data\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_get_qos_service_flow_statistics_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.get_qos_service_flow_statistics_response.svc_flow_data = (bcmolt_epon_oam_brcm_cmc_sf_stats_data *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.get_qos_service_flow_statistics_response.svc_flow_idcount * sizeof(bcmolt_epon_oam_brcm_cmc_sf_stats_data));
+                    }
+                }
+
+                for (i15 = 0; i15 < this->u.get_qos_service_flow_statistics_response.svc_flow_idcount; i15++)
+                {
+                    if (!bcmolt_epon_oam_brcm_cmc_sf_stats_data_unpack(&this->u.get_qos_service_flow_statistics_response.svc_flow_data[i15], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_CMC_INTERFACES_REQUEST:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_CMC_INTERFACES_RESPONSE:
+            {
+                uint16_t i16;
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.get_cmc_interfaces_response.intf_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(buf, &this->u.get_cmc_interfaces_response.timestamp))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_cmc_interfaces_response.intf_count > 0) && (this->u.get_cmc_interfaces_response.cmc_interface_data == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"cmc_interface_data\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_get_cmc_interfaces_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.get_cmc_interfaces_response.cmc_interface_data = (bcmolt_epon_oam_brcm_cmc_interface_data *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.get_cmc_interfaces_response.intf_count * sizeof(bcmolt_epon_oam_brcm_cmc_interface_data));
+                    }
+                }
+
+                for (i16 = 0; i16 < this->u.get_cmc_interfaces_response.intf_count; i16++)
+                {
+                    if (!bcmolt_epon_oam_brcm_cmc_interface_data_unpack(&this->u.get_cmc_interfaces_response.cmc_interface_data[i16], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_CMC_MAC_STATISTICS_REQUEST:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_CMC_MAC_STATISTICS_RESPONSE:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.get_cmc_mac_statistics_response.interface_index))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(buf, &this->u.get_cmc_mac_statistics_response.invalid_rng_reqs))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(buf, &this->u.get_cmc_mac_statistics_response.rng_aborts))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(buf, &this->u.get_cmc_mac_statistics_response.invalid_reg_reqs))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(buf, &this->u.get_cmc_mac_statistics_response.failed_reg_reqs))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(buf, &this->u.get_cmc_mac_statistics_response.invalid_data_reqs))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(buf, &this->u.get_cmc_mac_statistics_response.t5timeouts))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_CMC_INTERFACES_STATISTICS_REQUEST:
+            {
+                uint8_t i17;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.get_cmc_interfaces_statistics_request.intf_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_cmc_interfaces_statistics_request.intf_count > 0) && (this->u.get_cmc_interfaces_statistics_request.intf_index == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"intf_index\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_get_cmc_interfaces_statistics_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.get_cmc_interfaces_statistics_request.intf_index = (uint16_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.get_cmc_interfaces_statistics_request.intf_count * sizeof(uint16_t));
+                    }
+                }
+
+                for (i17 = 0; i17 < this->u.get_cmc_interfaces_statistics_request.intf_count; i17++)
+                {
+                    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.get_cmc_interfaces_statistics_request.intf_index[i17]))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_CMC_INTERFACES_STATISTICS_RESPONSE:
+            {
+                uint8_t i18;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.get_cmc_interfaces_statistics_response.interfaces_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_cmc_interfaces_statistics_response.interfaces_count > 0) && (this->u.get_cmc_interfaces_statistics_response.network_interfaces == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"network_interfaces\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_get_cmc_interfaces_statistics_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.get_cmc_interfaces_statistics_response.network_interfaces = (bcmolt_epon_oam_brcm_cmc_intf_stats_data *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.get_cmc_interfaces_statistics_response.interfaces_count * sizeof(bcmolt_epon_oam_brcm_cmc_intf_stats_data));
+                    }
+                }
+
+                for (i18 = 0; i18 < this->u.get_cmc_interfaces_statistics_response.interfaces_count; i18++)
+                {
+                    if (!bcmolt_epon_oam_brcm_cmc_intf_stats_data_unpack(&this->u.get_cmc_interfaces_statistics_response.network_interfaces[i18], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_QOS_SERVICE_FLOW_CONFIG_REQUEST:
+            {
+                uint8_t i19;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.get_qos_service_flow_config_request.svc_flow_idcount))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_qos_service_flow_config_request.svc_flow_idcount > 0) && (this->u.get_qos_service_flow_config_request.svc_flow_ids == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"svc_flow_ids\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_get_qos_service_flow_config_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.get_qos_service_flow_config_request.svc_flow_ids = (uint16_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.get_qos_service_flow_config_request.svc_flow_idcount * sizeof(uint16_t));
+                    }
+                }
+
+                for (i19 = 0; i19 < this->u.get_qos_service_flow_config_request.svc_flow_idcount; i19++)
+                {
+                    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.get_qos_service_flow_config_request.svc_flow_ids[i19]))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_QOS_SERVICE_FLOW_CONFIG_RESPONSE:
+            {
+                uint8_t i20;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.get_qos_service_flow_config_response.svc_flow_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_qos_service_flow_config_response.svc_flow_count > 0) && (this->u.get_qos_service_flow_config_response.svc_flow_data == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"svc_flow_data\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_get_qos_service_flow_config_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.get_qos_service_flow_config_response.svc_flow_data = (bcmolt_epon_oam_brcm_cmc_sf_config_data *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.get_qos_service_flow_config_response.svc_flow_count * sizeof(bcmolt_epon_oam_brcm_cmc_sf_config_data));
+                    }
+                }
+
+                for (i20 = 0; i20 < this->u.get_qos_service_flow_config_response.svc_flow_count; i20++)
+                {
+                    if (!bcmolt_epon_oam_brcm_cmc_sf_config_data_unpack(&this->u.get_qos_service_flow_config_response.svc_flow_data[i20], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_QOS_PACKET_CLASSIFIER_CONFIG_REQUEST:
+            {
+                uint8_t i21;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.get_qos_packet_classifier_config_request.svc_flow_idcount))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_qos_packet_classifier_config_request.svc_flow_idcount > 0) && (this->u.get_qos_packet_classifier_config_request.svc_flow_ids == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"svc_flow_ids\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_get_qos_packet_classifier_config_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.get_qos_packet_classifier_config_request.svc_flow_ids = (uint16_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.get_qos_packet_classifier_config_request.svc_flow_idcount * sizeof(uint16_t));
+                    }
+                }
+
+                for (i21 = 0; i21 < this->u.get_qos_packet_classifier_config_request.svc_flow_idcount; i21++)
+                {
+                    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.get_qos_packet_classifier_config_request.svc_flow_ids[i21]))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_QOS_PACKET_CLASSIFIER_CONFIG_RESPONSE:
+            {
+                uint8_t i22;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.get_qos_packet_classifier_config_response.classifier_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_qos_packet_classifier_config_response.classifier_count > 0) && (this->u.get_qos_packet_classifier_config_response.classifier_data == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"classifier_data\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_get_qos_packet_classifier_config_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.get_qos_packet_classifier_config_response.classifier_data = (bcmolt_epon_oam_brcm_cmc_classifier_config_data *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.get_qos_packet_classifier_config_response.classifier_count * sizeof(bcmolt_epon_oam_brcm_cmc_classifier_config_data));
+                    }
+                }
+
+                for (i22 = 0; i22 < this->u.get_qos_packet_classifier_config_response.classifier_count; i22++)
+                {
+                    if (!bcmolt_epon_oam_brcm_cmc_classifier_config_data_unpack(&this->u.get_qos_packet_classifier_config_response.classifier_data[i22], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_UPSTREAM_INPUT_POWER_REQUEST:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.get_upstream_input_power_request.upstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_upstream_input_power_request.upstream_channels_count > 0) && (this->u.get_upstream_input_power_request.upstream_channels == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"upstream_channels\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_get_upstream_input_power_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.get_upstream_input_power_request.upstream_channels = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.get_upstream_input_power_request.upstream_channels_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.get_upstream_input_power_request.upstream_channels, this->u.get_upstream_input_power_request.upstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_UPSTREAM_INPUT_POWER_RESPONSE:
+            {
+                uint8_t i23;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.get_upstream_input_power_response.upstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_upstream_input_power_response.upstream_channels_count > 0) && (this->u.get_upstream_input_power_response.upstream_channels == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"upstream_channels\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_get_upstream_input_power_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.get_upstream_input_power_response.upstream_channels = (bcmolt_epon_oam_brcm_upstream_channel_power *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.get_upstream_input_power_response.upstream_channels_count * sizeof(bcmolt_epon_oam_brcm_upstream_channel_power));
+                    }
+                }
+
+                for (i23 = 0; i23 < this->u.get_upstream_input_power_response.upstream_channels_count; i23++)
+                {
+                    if (!bcmolt_epon_oam_brcm_upstream_channel_power_unpack(&this->u.get_upstream_input_power_response.upstream_channels[i23], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_UPSTREAM_INPUT_POWER_REQUEST:
+            {
+                uint8_t i24;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.set_upstream_input_power_request.upstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.set_upstream_input_power_request.upstream_channels_count > 0) && (this->u.set_upstream_input_power_request.upstream_channels == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"upstream_channels\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_set_upstream_input_power_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.set_upstream_input_power_request.upstream_channels = (bcmolt_epon_oam_brcm_upstream_channel_power *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.set_upstream_input_power_request.upstream_channels_count * sizeof(bcmolt_epon_oam_brcm_upstream_channel_power));
+                    }
+                }
+
+                for (i24 = 0; i24 < this->u.set_upstream_input_power_request.upstream_channels_count; i24++)
+                {
+                    if (!bcmolt_epon_oam_brcm_upstream_channel_power_unpack(&this->u.set_upstream_input_power_request.upstream_channels[i24], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_UPSTREAM_INPUT_POWER_RESPONSE:
+            {
+                if (!bcmolt_epon_oam_brcm_cmc_result_code_unpack(&this->u.set_upstream_input_power_response.result_code, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.set_upstream_input_power_response.channel_one_power))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.set_upstream_input_power_response.channel_two_power))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.set_upstream_input_power_response.channel_three_power))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.set_upstream_input_power_response.channel_four_power))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_ADD_CNUS_TO_LOAD_BALANCING_GROUP_REQUEST:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.set_add_cnus_to_load_balancing_group_request.group_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_brcm_cmc_request_option_unpack(&this->u.set_add_cnus_to_load_balancing_group_request.request_option, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_brcm_cnu_mac_addr_range_unpack(&this->u.set_add_cnus_to_load_balancing_group_request.cnu_mac_range, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_ADD_CNUS_TO_LOAD_BALANCING_GROUP_RESPONSE:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.set_add_cnus_to_load_balancing_group_response.group_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_brcm_cmc_result_code_unpack(&this->u.set_add_cnus_to_load_balancing_group_response.result_code, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_EXCLUDE_CNUS_FROM_LOAD_BALANCING_REQUEST:
+            {
+                if (!bcmolt_epon_oam_brcm_cmc_request_option_unpack(&this->u.set_exclude_cnus_from_load_balancing_request.request_option, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_mac_address(buf, &this->u.set_exclude_cnus_from_load_balancing_request.cnu_mac_address_start))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_mac_address(buf, &this->u.set_exclude_cnus_from_load_balancing_request.cnu_mac_address_end))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_EXCLUDE_CNUS_FROM_LOAD_BALANCING_RESPONSE:
+            {
+                if (!bcmolt_epon_oam_brcm_cmc_result_code_unpack(&this->u.set_exclude_cnus_from_load_balancing_response.result_code, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_FULL_LOAD_BALANCING_GROUP_REQUEST:
+            {
+                uint8_t i25;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.set_full_load_balancing_group_request.group_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_brcm_cmc_load_balance_method_unpack(&this->u.set_full_load_balancing_group_request.method, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.set_full_load_balancing_group_request.downstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.set_full_load_balancing_group_request.downstream_channels_count > 0) && (this->u.set_full_load_balancing_group_request.downstream_channels == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"downstream_channels\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_set_full_load_balancing_group_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.set_full_load_balancing_group_request.downstream_channels = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.set_full_load_balancing_group_request.downstream_channels_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.set_full_load_balancing_group_request.downstream_channels, this->u.set_full_load_balancing_group_request.downstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.set_full_load_balancing_group_request.upstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.set_full_load_balancing_group_request.upstream_channels_count > 0) && (this->u.set_full_load_balancing_group_request.upstream_channels == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"upstream_channels\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_set_full_load_balancing_group_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.set_full_load_balancing_group_request.upstream_channels = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.set_full_load_balancing_group_request.upstream_channels_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.set_full_load_balancing_group_request.upstream_channels, this->u.set_full_load_balancing_group_request.upstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.set_full_load_balancing_group_request.restrictions_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.set_full_load_balancing_group_request.restrictions_count > 0) && (this->u.set_full_load_balancing_group_request.restrictions == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"restrictions\" of struct \"bcmolt_epon_oam_brcm_oam_pdu_base_set_full_load_balancing_group_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.set_full_load_balancing_group_request.restrictions = (bcmolt_epon_oam_brcm_cnu_mac_addr_range *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.set_full_load_balancing_group_request.restrictions_count * sizeof(bcmolt_epon_oam_brcm_cnu_mac_addr_range));
+                    }
+                }
+
+                for (i25 = 0; i25 < this->u.set_full_load_balancing_group_request.restrictions_count; i25++)
+                {
+                    if (!bcmolt_epon_oam_brcm_cnu_mac_addr_range_unpack(&this->u.set_full_load_balancing_group_request.restrictions[i25], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_FULL_LOAD_BALANCING_GROUP_RESPONSE:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.set_full_load_balancing_group_response.group_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_brcm_cmc_result_code_unpack(&this->u.set_full_load_balancing_group_response.result_code, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_CMC_SYSTEM_EVENT_MESSAGE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_DOWNSTREAM_BONDING_GROUP_STATUS_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_DOWNSTREAM_BONDING_GROUP_STATUS_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_EXCLUDED_ACTIVE_CNUS_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_EXCLUDED_ACTIVE_CNUS_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_EXCLUDED_CNU_CONFIGURATION_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_EXCLUDED_CNUS_CONFIGURATION_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_FULL_LOAD_BALANCING_GROUP_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_FULL_LOAD_BALANCING_GROUP_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUP_ACTIVE_CNUS_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUP_ACTIVE_CNUS_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUP_CNU_CONFIGURATION_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUP_CNU_CONFIGURATION_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUP_DOWNSTREAMS_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUP_DOWNSTREAMS_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUP_UPSTREAMS_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUP_UPSTREAMS_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUPS_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUPS_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_MAX_UPSTREAM_RFATTENUATION_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_MAX_UPSTREAM_RFATTENUATION_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_MOVE_CNU_DOWNSTREAM_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_MOVE_CNU_DOWNSTREAM_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_MOVE_CNU_UPSTREAM_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_MOVE_CNU_UPSTREAM_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_SERVICES_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_SERVICES_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_UPSTREAM_BONDING_GROUP_STATUS_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_UPSTREAM_BONDING_GROUP_STATUS_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_REG_RSP_EVENT_MESSAGE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_MAX_UPSTREAM_RFATTENUATION_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_MAX_UPSTREAM_RFATTENUATION_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_MOVE_CNU_DOWNSTREAM_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_MOVE_CNU_DOWNSTREAM_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_MOVE_CNU_UPSTREAM_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_MOVE_CNU_UPSTREAM_RESPONSE:
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_brcm_oam_pdu_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_brcm_oam_pdu_opcode opcode;
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_brcm_oam_pdu_opcode_unpack(&opcode, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (opcode)
+    {
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_DOWNSTREAM_CONFIG_REQUEST:
+            {
+                uint8_t downstream_channels_count;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &downstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_brcm_downstream_channel_properties) * downstream_channels_count);
+                if (!bcmolt_epon_oam_buf_skip(packed, downstream_channels_count * 13))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_DOWNSTREAM_CONFIG_RESPONSE:
+            {
+                uint8_t downstream_channels_count;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &downstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_brcm_channel_result) * downstream_channels_count);
+                if (!bcmolt_epon_oam_buf_skip(packed, downstream_channels_count * 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_DOWNSTREAM_CONFIG_REQUEST:
+            {
+                uint8_t downstream_channels_count;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &downstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * downstream_channels_count);
+                if (!bcmolt_epon_oam_buf_skip(packed, downstream_channels_count * 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_DOWNSTREAM_CONFIG_RESPONSE:
+            {
+                uint8_t downstream_channels_count;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &downstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_brcm_downstream_channel_properties) * downstream_channels_count);
+                if (!bcmolt_epon_oam_buf_skip(packed, downstream_channels_count * 13))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_UPSTREAM_CONFIG_REQUEST:
+            {
+                uint8_t upstream_channels_count;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &upstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_brcm_upstream_channel_properties) * upstream_channels_count);
+                if (!bcmolt_epon_oam_buf_skip(packed, upstream_channels_count * 33))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_UPSTREAM_CONFIG_RESPONSE:
+            {
+                uint8_t upstream_channels_count;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &upstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_brcm_channel_result) * upstream_channels_count);
+                if (!bcmolt_epon_oam_buf_skip(packed, upstream_channels_count * 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_UPSTREAM_CONFIG_REQUEST:
+            {
+                uint8_t upstream_channels_count;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &upstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * upstream_channels_count);
+                if (!bcmolt_epon_oam_buf_skip(packed, upstream_channels_count * 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_UPSTREAM_CONFIG_RESPONSE:
+            {
+                uint8_t upstream_channels_count;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &upstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_brcm_upstream_channel_properties) * upstream_channels_count);
+                if (!bcmolt_epon_oam_buf_skip(packed, upstream_channels_count * 33))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_CREATE_LOAD_BALANCING_GROUP_REQUEST:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_CREATE_LOAD_BALANCING_GROUP_RESPONSE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_ADD_DOWNSTREAMS_TO_LOAD_BALANCING_GROUP_REQUEST:
+            {
+                uint8_t downstream_channels_count;
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &downstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_brcm_channel_option) * downstream_channels_count);
+                if (!bcmolt_epon_oam_buf_skip(packed, downstream_channels_count * 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_ADD_DOWNSTREAMS_TO_LOAD_BALANCING_GROUP_RESPONSE:
+            {
+                uint8_t downstream_channels_count;
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &downstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_brcm_channel_result) * downstream_channels_count);
+                if (!bcmolt_epon_oam_buf_skip(packed, downstream_channels_count * 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_ADD_UPSTREAMS_TO_LOAD_BALANCING_GROUP_REQUEST:
+            {
+                uint8_t upstream_channels_count;
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &upstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_brcm_channel_option) * upstream_channels_count);
+                if (!bcmolt_epon_oam_buf_skip(packed, upstream_channels_count * 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_ADD_UPSTREAMS_TO_LOAD_BALANCING_GROUP_RESPONSE:
+            {
+                uint8_t upstream_channels_count;
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &upstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_brcm_channel_result) * upstream_channels_count);
+                if (!bcmolt_epon_oam_buf_skip(packed, upstream_channels_count * 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_SIGNAL_QUALITY_REQUEST:
+            {
+                uint8_t upstream_interfaces_count;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &upstream_interfaces_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint16_t) * upstream_interfaces_count);
+                if (!bcmolt_epon_oam_buf_skip(packed, upstream_interfaces_count * 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_SIGNAL_QUALITY_RESPONSE:
+            {
+                uint8_t upstream_interfaces_count;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &upstream_interfaces_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_brcm_upstream_signal_quality) * upstream_interfaces_count);
+                if (!bcmolt_epon_oam_buf_skip(packed, upstream_interfaces_count * 32))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_CNU_STATUS_REQUEST:
+            {
+                uint16_t cnu_count;
+                if (!bcmolt_epon_oam_buf_read_u16(packed, &cnu_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmos_mac_address) * cnu_count);
+                if (!bcmolt_epon_oam_buf_skip(packed, cnu_count * 6))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_CNU_STATUS_RESPONSE:
+            {
+                uint16_t cnu_count;
+                uint16_t i0;
+                if (!bcmolt_epon_oam_buf_read_u16(packed, &cnu_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_brcm_cnu_status_data) * cnu_count);
+                for (i0 = 0; i0 < cnu_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_brcm_cnu_status_data_scan(packed, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_QOS_SERVICE_FLOW_STATISTICS_REQUEST:
+            {
+                uint8_t svc_flow_idcount;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &svc_flow_idcount))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint16_t) * svc_flow_idcount);
+                if (!bcmolt_epon_oam_buf_skip(packed, svc_flow_idcount * 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_QOS_SERVICE_FLOW_STATISTICS_RESPONSE:
+            {
+                uint8_t svc_flow_idcount;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &svc_flow_idcount))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_brcm_cmc_sf_stats_data) * svc_flow_idcount);
+                if (!bcmolt_epon_oam_buf_skip(packed, svc_flow_idcount * 36))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_CMC_INTERFACES_REQUEST:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_CMC_INTERFACES_RESPONSE:
+            {
+                uint16_t intf_count;
+                uint16_t i1;
+                if (!bcmolt_epon_oam_buf_read_u16(packed, &intf_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_brcm_cmc_interface_data) * intf_count);
+                for (i1 = 0; i1 < intf_count; i1++)
+                {
+                    if (!bcmolt_epon_oam_brcm_cmc_interface_data_scan(packed, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_CMC_MAC_STATISTICS_REQUEST:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_CMC_MAC_STATISTICS_RESPONSE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_CMC_INTERFACES_STATISTICS_REQUEST:
+            {
+                uint8_t intf_count;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &intf_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint16_t) * intf_count);
+                if (!bcmolt_epon_oam_buf_skip(packed, intf_count * 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_CMC_INTERFACES_STATISTICS_RESPONSE:
+            {
+                uint8_t interfaces_count;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &interfaces_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_brcm_cmc_intf_stats_data) * interfaces_count);
+                if (!bcmolt_epon_oam_buf_skip(packed, interfaces_count * 105))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_QOS_SERVICE_FLOW_CONFIG_REQUEST:
+            {
+                uint8_t svc_flow_idcount;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &svc_flow_idcount))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint16_t) * svc_flow_idcount);
+                if (!bcmolt_epon_oam_buf_skip(packed, svc_flow_idcount * 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_QOS_SERVICE_FLOW_CONFIG_RESPONSE:
+            {
+                uint8_t svc_flow_count;
+                uint8_t i2;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &svc_flow_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_brcm_cmc_sf_config_data) * svc_flow_count);
+                for (i2 = 0; i2 < svc_flow_count; i2++)
+                {
+                    if (!bcmolt_epon_oam_brcm_cmc_sf_config_data_scan(packed, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_QOS_PACKET_CLASSIFIER_CONFIG_REQUEST:
+            {
+                uint8_t svc_flow_idcount;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &svc_flow_idcount))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint16_t) * svc_flow_idcount);
+                if (!bcmolt_epon_oam_buf_skip(packed, svc_flow_idcount * 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_QOS_PACKET_CLASSIFIER_CONFIG_RESPONSE:
+            {
+                uint8_t classifier_count;
+                uint8_t i3;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &classifier_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_brcm_cmc_classifier_config_data) * classifier_count);
+                for (i3 = 0; i3 < classifier_count; i3++)
+                {
+                    if (!bcmolt_epon_oam_brcm_cmc_classifier_config_data_scan(packed, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_UPSTREAM_INPUT_POWER_REQUEST:
+            {
+                uint8_t upstream_channels_count;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &upstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * upstream_channels_count);
+                if (!bcmolt_epon_oam_buf_skip(packed, upstream_channels_count * 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_UPSTREAM_INPUT_POWER_RESPONSE:
+            {
+                uint8_t upstream_channels_count;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &upstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_brcm_upstream_channel_power) * upstream_channels_count);
+                if (!bcmolt_epon_oam_buf_skip(packed, upstream_channels_count * 3))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_UPSTREAM_INPUT_POWER_REQUEST:
+            {
+                uint8_t upstream_channels_count;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &upstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_brcm_upstream_channel_power) * upstream_channels_count);
+                if (!bcmolt_epon_oam_buf_skip(packed, upstream_channels_count * 3))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_UPSTREAM_INPUT_POWER_RESPONSE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_ADD_CNUS_TO_LOAD_BALANCING_GROUP_REQUEST:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 12))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_ADD_CNUS_TO_LOAD_BALANCING_GROUP_RESPONSE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_EXCLUDE_CNUS_FROM_LOAD_BALANCING_REQUEST:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 6))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 6))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_EXCLUDE_CNUS_FROM_LOAD_BALANCING_RESPONSE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_FULL_LOAD_BALANCING_GROUP_REQUEST:
+            {
+                uint8_t downstream_channels_count;
+                uint8_t upstream_channels_count;
+                uint8_t restrictions_count;
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &downstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * downstream_channels_count);
+                if (!bcmolt_epon_oam_buf_skip(packed, downstream_channels_count * 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &upstream_channels_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * upstream_channels_count);
+                if (!bcmolt_epon_oam_buf_skip(packed, upstream_channels_count * 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &restrictions_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_brcm_cnu_mac_addr_range) * restrictions_count);
+                if (!bcmolt_epon_oam_buf_skip(packed, restrictions_count * 12))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_FULL_LOAD_BALANCING_GROUP_RESPONSE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_CMC_SYSTEM_EVENT_MESSAGE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_DOWNSTREAM_BONDING_GROUP_STATUS_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_DOWNSTREAM_BONDING_GROUP_STATUS_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_EXCLUDED_ACTIVE_CNUS_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_EXCLUDED_ACTIVE_CNUS_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_EXCLUDED_CNU_CONFIGURATION_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_EXCLUDED_CNUS_CONFIGURATION_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_FULL_LOAD_BALANCING_GROUP_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_FULL_LOAD_BALANCING_GROUP_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUP_ACTIVE_CNUS_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUP_ACTIVE_CNUS_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUP_CNU_CONFIGURATION_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUP_CNU_CONFIGURATION_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUP_DOWNSTREAMS_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUP_DOWNSTREAMS_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUP_UPSTREAMS_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUP_UPSTREAMS_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUPS_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUPS_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_MAX_UPSTREAM_RFATTENUATION_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_MAX_UPSTREAM_RFATTENUATION_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_MOVE_CNU_DOWNSTREAM_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_MOVE_CNU_DOWNSTREAM_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_MOVE_CNU_UPSTREAM_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_MOVE_CNU_UPSTREAM_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_SERVICES_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_SERVICES_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_UPSTREAM_BONDING_GROUP_STATUS_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_UPSTREAM_BONDING_GROUP_STATUS_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_REG_RSP_EVENT_MESSAGE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_MAX_UPSTREAM_RFATTENUATION_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_MAX_UPSTREAM_RFATTENUATION_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_MOVE_CNU_DOWNSTREAM_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_MOVE_CNU_DOWNSTREAM_RESPONSE:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_MOVE_CNU_UPSTREAM_REQUEST:
+        case BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_MOVE_CNU_UPSTREAM_RESPONSE:
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_certificate_pack(bcmolt_epon_oam_certificate *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u24(buf, this->size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((uint24_t_to_uint32_t(this->size) > 0) && (this->certificate_data == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"certificate_data\" of struct \"bcmolt_epon_oam_certificate\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write(buf, this->certificate_data, uint24_t_to_uint32_t(this->size)))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_certificate_get_packed_length(bcmolt_epon_oam_certificate *this)
+{
+    return 3 + uint24_t_to_uint32_t(this->size);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_certificate_unpack(bcmolt_epon_oam_certificate *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u24(buf, &this->size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((uint24_t_to_uint32_t(this->size) > 0) && (this->certificate_data == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"certificate_data\" of struct \"bcmolt_epon_oam_certificate\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->certificate_data = (uint8_t *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(uint24_t_to_uint32_t(this->size) * sizeof(uint8_t));
+        }
+    }
+
+    if (!bcmolt_epon_oam_buf_read(buf, this->certificate_data, uint24_t_to_uint32_t(this->size)))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_certificate_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    uint24_t size;
+    if (!bcmolt_epon_oam_buf_read_u24(packed, &size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * uint24_t_to_uint32_t(size));
+    if (!bcmolt_epon_oam_buf_skip(packed, uint24_t_to_uint32_t(size) * 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_action_value_pack(bcmolt_epon_oam_ctc_action_value *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_var_leaf_action_pack(this->leaf, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->leaf)
+    {
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_PHY_ADMIN_CONTROL:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.phy_admin_control.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.phy_admin_control.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_enabled_state_pack(this->u.phy_admin_control.state, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_AUTO_RENEGOTIATE:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_AUTO_ADMIN_CONTROL:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.auto_admin_control.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.auto_admin_control.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_enabled_state_pack(this->u.auto_admin_control.state, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_MAC_ADD_GROUP_ADDRESS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_MAC_DEL_GROUP_ADDRESS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_MAC_INIT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_MAC_SELF_TEST:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_MAU_ADMIN_CONTROL:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_MAU_RESET:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_PORT_ADMIN_CONTROL:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_RPT_IN_SERVICE_TEST:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_RPT_RESET:
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_action_value_get_packed_length(bcmolt_epon_oam_ctc_action_value *this)
+{
+    uint32_t count = 2;
+    switch (this->leaf)
+    {
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_PHY_ADMIN_CONTROL:
+            {
+                count += 5;
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_AUTO_RENEGOTIATE:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_AUTO_ADMIN_CONTROL:
+            {
+                count += 5;
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_MAC_ADD_GROUP_ADDRESS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_MAC_DEL_GROUP_ADDRESS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_MAC_INIT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_MAC_SELF_TEST:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_MAU_ADMIN_CONTROL:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_MAU_RESET:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_PORT_ADMIN_CONTROL:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_RPT_IN_SERVICE_TEST:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_RPT_RESET:
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_action_value_unpack(bcmolt_epon_oam_ctc_action_value *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_var_leaf_action_unpack(&this->leaf, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->leaf)
+    {
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_PHY_ADMIN_CONTROL:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.phy_admin_control.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.phy_admin_control.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.phy_admin_control.width == 0) ? 0x0080 : this->u.phy_admin_control.width, buf->curr);
+                if (!bcmolt_epon_oam_ctc_enabled_state_unpack(&this->u.phy_admin_control.state, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.phy_admin_control.width == 0) ? 0x0080 : this->u.phy_admin_control.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_AUTO_RENEGOTIATE:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_AUTO_ADMIN_CONTROL:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.auto_admin_control.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.auto_admin_control.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.auto_admin_control.width == 0) ? 0x0080 : this->u.auto_admin_control.width, buf->curr);
+                if (!bcmolt_epon_oam_ctc_enabled_state_unpack(&this->u.auto_admin_control.state, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.auto_admin_control.width == 0) ? 0x0080 : this->u.auto_admin_control.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_MAC_ADD_GROUP_ADDRESS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_MAC_DEL_GROUP_ADDRESS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_MAC_INIT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_MAC_SELF_TEST:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_MAU_ADMIN_CONTROL:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_MAU_RESET:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_PORT_ADMIN_CONTROL:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_RPT_IN_SERVICE_TEST:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_RPT_RESET:
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_action_value_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_var_leaf_action leaf;
+    if (!bcmolt_epon_oam_var_leaf_action_unpack(&leaf, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (leaf)
+    {
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_PHY_ADMIN_CONTROL:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_AUTO_RENEGOTIATE:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_AUTO_ADMIN_CONTROL:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_MAC_ADD_GROUP_ADDRESS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_MAC_DEL_GROUP_ADDRESS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_MAC_INIT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_MAC_SELF_TEST:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_MAU_ADMIN_CONTROL:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_MAU_RESET:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_PORT_ADMIN_CONTROL:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_RPT_IN_SERVICE_TEST:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_RPT_RESET:
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_alarm_entry_pack(bcmolt_epon_oam_ctc_alarm_entry *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_ctc_leaf_management_object_pack(this->object_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->object_instance))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_ctc_onu_alarm_id_pack(this->alarm_id, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->alarm_id)
+    {
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_POWER_ALARM:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.onu_power_alarm.time_stamp))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_power_alarm.state))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_power_alarm_code_pack(this->u.onu_power_alarm.alarm_code, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_PON_IF_SWITCH:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.onu_pon_if_switch.time_stamp))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_pon_if_switch.state))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_pon_if_switch_code_pack(this->u.onu_pon_if_switch.alarm_code, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_CARD_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_CARD_SELF_TEST_FAILURE:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_E1LOS:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_E1PORT_FAILURE:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_E1TIMING_UNLOCK:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ETH_PORT_AUTO_NEG_FAILURE:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ETH_PORT_CONGESTION:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ETH_PORT_FAILURE:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ETH_PORT_LOOPBACK:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ETH_PORT_LOS:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_BATTERY_FAILURE:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_BATTERY_MISSING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_BATTERY_VOLT_LOW:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_EQUIPMENT_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_IAD_CONNECTION_FAILURE:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_PHYSICAL_INSTRUCTION_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_SELF_TEST_FAILURE:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_SLEEP_STATUS_UPDATE:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_TEMP_HIGH_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_TEMP_LOW_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_CRC_ERROR_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_CRC_ERROR_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_DISCARDS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_DISCARDS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_DROP_EVENTS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_DROP_EVERNTS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_ERRORS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_ERRORS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_FRAGMENTS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_FRAGMENTS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_JABBERS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_JABBERS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_OVERSIZE_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_OVERSIZE_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_UNDERSIZE_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_UNDERSIZE_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_RX_POWER_HIGH_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_RX_POWER_HIGH_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_RX_POWER_LOW_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_RX_POWER_LOW_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TEMP_HIGH_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TEMP_HIGH_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TEMP_LOW_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TEMP_LOW_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TX_BIAS_HIGH_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TX_BIAS_HIGH_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TX_BIAS_LOW_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TX_BIAS_LOW_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TX_POWER_HIGH_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TX_POWER_HIGH_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TX_POWER_LOW_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TX_POWER_LOW_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_CRC_ERROR_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_CRC_ERROR_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_DISCARDS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_DISCARDS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_DROP_EVENTS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_DROP_EVENTS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_ERROS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_ERROS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_FRAGMENTS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_FRAGMENTS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_JABBERS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_JABBERS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_OVERSIZE_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_OVERSIZE_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_UNDERSIZE_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_UNDERSIZE_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_VCC_HIGH_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_VCC_HIGH_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_VCC_LOW_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_VCC_LOW_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_CRC_ERROR_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_CRC_ERROR_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_DISCARDS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_DISCARDS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_DROP_EVENTS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_DROP_EVENTS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_ERRORS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_ERRORS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_FRAGMENTS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_FRAGMENTS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_JABBERS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_JABBERS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_OVERSIZE_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_OVERSIZE_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_UNDERSIZE_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_UNDERSIZE_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_STATUS_CHANGE_TIMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_STATUS_CHANGE_TIMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_CRC_ERROR_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_CRC_ERROR_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_DISCARDS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_DISCARDS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_DROP_EVENTS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_DROP_EVENTS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_ERRORS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_ERRORS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_FRAGMENTS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_FRAGMENTS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_JABBERS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_JABBERS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_OVERSIZE_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_OVERSIZE_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_UNDERSIZE_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_UNDERSIZE_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_POTS_PORT_FAILURE:
+        default:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.def.time_stamp))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.def.state))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_alarm_entry_get_packed_length(bcmolt_epon_oam_ctc_alarm_entry *this)
+{
+    uint32_t count = 8;
+    switch (this->alarm_id)
+    {
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_POWER_ALARM:
+            {
+                count += 7;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_PON_IF_SWITCH:
+            {
+                count += 7;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_CARD_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_CARD_SELF_TEST_FAILURE:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_E1LOS:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_E1PORT_FAILURE:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_E1TIMING_UNLOCK:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ETH_PORT_AUTO_NEG_FAILURE:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ETH_PORT_CONGESTION:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ETH_PORT_FAILURE:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ETH_PORT_LOOPBACK:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ETH_PORT_LOS:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_BATTERY_FAILURE:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_BATTERY_MISSING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_BATTERY_VOLT_LOW:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_EQUIPMENT_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_IAD_CONNECTION_FAILURE:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_PHYSICAL_INSTRUCTION_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_SELF_TEST_FAILURE:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_SLEEP_STATUS_UPDATE:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_TEMP_HIGH_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_TEMP_LOW_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_CRC_ERROR_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_CRC_ERROR_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_DISCARDS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_DISCARDS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_DROP_EVENTS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_DROP_EVERNTS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_ERRORS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_ERRORS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_FRAGMENTS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_FRAGMENTS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_JABBERS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_JABBERS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_OVERSIZE_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_OVERSIZE_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_UNDERSIZE_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_UNDERSIZE_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_RX_POWER_HIGH_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_RX_POWER_HIGH_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_RX_POWER_LOW_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_RX_POWER_LOW_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TEMP_HIGH_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TEMP_HIGH_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TEMP_LOW_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TEMP_LOW_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TX_BIAS_HIGH_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TX_BIAS_HIGH_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TX_BIAS_LOW_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TX_BIAS_LOW_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TX_POWER_HIGH_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TX_POWER_HIGH_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TX_POWER_LOW_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TX_POWER_LOW_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_CRC_ERROR_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_CRC_ERROR_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_DISCARDS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_DISCARDS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_DROP_EVENTS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_DROP_EVENTS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_ERROS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_ERROS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_FRAGMENTS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_FRAGMENTS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_JABBERS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_JABBERS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_OVERSIZE_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_OVERSIZE_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_UNDERSIZE_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_UNDERSIZE_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_VCC_HIGH_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_VCC_HIGH_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_VCC_LOW_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_VCC_LOW_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_CRC_ERROR_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_CRC_ERROR_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_DISCARDS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_DISCARDS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_DROP_EVENTS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_DROP_EVENTS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_ERRORS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_ERRORS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_FRAGMENTS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_FRAGMENTS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_JABBERS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_JABBERS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_OVERSIZE_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_OVERSIZE_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_UNDERSIZE_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_UNDERSIZE_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_STATUS_CHANGE_TIMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_STATUS_CHANGE_TIMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_CRC_ERROR_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_CRC_ERROR_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_DISCARDS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_DISCARDS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_DROP_EVENTS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_DROP_EVENTS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_ERRORS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_ERRORS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_FRAGMENTS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_FRAGMENTS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_JABBERS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_JABBERS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_OVERSIZE_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_OVERSIZE_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_UNDERSIZE_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_UNDERSIZE_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_POTS_PORT_FAILURE:
+        default:
+            {
+                count += 3;
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_alarm_entry_unpack(bcmolt_epon_oam_ctc_alarm_entry *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_ctc_leaf_management_object_unpack(&this->object_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->object_instance))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_ctc_onu_alarm_id_unpack(&this->alarm_id, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->alarm_id)
+    {
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_POWER_ALARM:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.onu_power_alarm.time_stamp))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.onu_power_alarm.state))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_power_alarm_code_unpack(&this->u.onu_power_alarm.alarm_code, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_PON_IF_SWITCH:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.onu_pon_if_switch.time_stamp))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.onu_pon_if_switch.state))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_pon_if_switch_code_unpack(&this->u.onu_pon_if_switch.alarm_code, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_CARD_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_CARD_SELF_TEST_FAILURE:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_E1LOS:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_E1PORT_FAILURE:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_E1TIMING_UNLOCK:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ETH_PORT_AUTO_NEG_FAILURE:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ETH_PORT_CONGESTION:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ETH_PORT_FAILURE:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ETH_PORT_LOOPBACK:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ETH_PORT_LOS:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_BATTERY_FAILURE:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_BATTERY_MISSING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_BATTERY_VOLT_LOW:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_EQUIPMENT_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_IAD_CONNECTION_FAILURE:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_PHYSICAL_INSTRUCTION_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_SELF_TEST_FAILURE:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_SLEEP_STATUS_UPDATE:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_TEMP_HIGH_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_TEMP_LOW_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_CRC_ERROR_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_CRC_ERROR_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_DISCARDS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_DISCARDS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_DROP_EVENTS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_DROP_EVERNTS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_ERRORS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_ERRORS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_FRAGMENTS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_FRAGMENTS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_JABBERS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_JABBERS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_OVERSIZE_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_OVERSIZE_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_UNDERSIZE_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_UNDERSIZE_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_RX_POWER_HIGH_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_RX_POWER_HIGH_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_RX_POWER_LOW_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_RX_POWER_LOW_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TEMP_HIGH_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TEMP_HIGH_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TEMP_LOW_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TEMP_LOW_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TX_BIAS_HIGH_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TX_BIAS_HIGH_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TX_BIAS_LOW_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TX_BIAS_LOW_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TX_POWER_HIGH_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TX_POWER_HIGH_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TX_POWER_LOW_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TX_POWER_LOW_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_CRC_ERROR_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_CRC_ERROR_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_DISCARDS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_DISCARDS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_DROP_EVENTS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_DROP_EVENTS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_ERROS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_ERROS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_FRAGMENTS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_FRAGMENTS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_JABBERS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_JABBERS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_OVERSIZE_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_OVERSIZE_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_UNDERSIZE_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_UNDERSIZE_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_VCC_HIGH_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_VCC_HIGH_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_VCC_LOW_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_VCC_LOW_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_CRC_ERROR_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_CRC_ERROR_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_DISCARDS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_DISCARDS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_DROP_EVENTS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_DROP_EVENTS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_ERRORS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_ERRORS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_FRAGMENTS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_FRAGMENTS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_JABBERS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_JABBERS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_OVERSIZE_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_OVERSIZE_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_UNDERSIZE_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_UNDERSIZE_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_STATUS_CHANGE_TIMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_STATUS_CHANGE_TIMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_CRC_ERROR_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_CRC_ERROR_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_DISCARDS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_DISCARDS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_DROP_EVENTS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_DROP_EVENTS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_ERRORS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_ERRORS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_FRAGMENTS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_FRAGMENTS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_JABBERS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_JABBERS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_OVERSIZE_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_OVERSIZE_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_UNDERSIZE_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_UNDERSIZE_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_POTS_PORT_FAILURE:
+        default:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.def.time_stamp))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.def.state))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_alarm_entry_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_ctc_onu_alarm_id alarm_id;
+    if (!bcmolt_epon_oam_buf_skip(packed, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_ctc_onu_alarm_id_unpack(&alarm_id, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (alarm_id)
+    {
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_POWER_ALARM:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_PON_IF_SWITCH:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_CARD_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_CARD_SELF_TEST_FAILURE:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_E1LOS:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_E1PORT_FAILURE:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_E1TIMING_UNLOCK:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ETH_PORT_AUTO_NEG_FAILURE:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ETH_PORT_CONGESTION:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ETH_PORT_FAILURE:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ETH_PORT_LOOPBACK:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ETH_PORT_LOS:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_BATTERY_FAILURE:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_BATTERY_MISSING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_BATTERY_VOLT_LOW:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_EQUIPMENT_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_IAD_CONNECTION_FAILURE:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_PHYSICAL_INSTRUCTION_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_SELF_TEST_FAILURE:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_SLEEP_STATUS_UPDATE:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_TEMP_HIGH_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_TEMP_LOW_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_CRC_ERROR_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_CRC_ERROR_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_DISCARDS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_DISCARDS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_DROP_EVENTS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_DROP_EVERNTS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_ERRORS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_ERRORS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_FRAGMENTS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_FRAGMENTS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_JABBERS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_JABBERS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_OVERSIZE_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_OVERSIZE_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_UNDERSIZE_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_UNDERSIZE_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_RX_POWER_HIGH_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_RX_POWER_HIGH_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_RX_POWER_LOW_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_RX_POWER_LOW_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TEMP_HIGH_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TEMP_HIGH_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TEMP_LOW_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TEMP_LOW_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TX_BIAS_HIGH_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TX_BIAS_HIGH_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TX_BIAS_LOW_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TX_BIAS_LOW_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TX_POWER_HIGH_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TX_POWER_HIGH_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TX_POWER_LOW_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TX_POWER_LOW_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_CRC_ERROR_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_CRC_ERROR_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_DISCARDS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_DISCARDS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_DROP_EVENTS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_DROP_EVENTS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_ERROS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_ERROS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_FRAGMENTS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_FRAGMENTS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_JABBERS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_JABBERS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_OVERSIZE_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_OVERSIZE_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_UNDERSIZE_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_UNDERSIZE_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_VCC_HIGH_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_VCC_HIGH_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_VCC_LOW_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_VCC_LOW_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_CRC_ERROR_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_CRC_ERROR_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_DISCARDS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_DISCARDS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_DROP_EVENTS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_DROP_EVENTS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_ERRORS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_ERRORS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_FRAGMENTS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_FRAGMENTS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_JABBERS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_JABBERS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_OVERSIZE_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_OVERSIZE_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_UNDERSIZE_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_UNDERSIZE_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_STATUS_CHANGE_TIMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_STATUS_CHANGE_TIMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_CRC_ERROR_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_CRC_ERROR_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_DISCARDS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_DISCARDS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_DROP_EVENTS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_DROP_EVENTS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_ERRORS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_ERRORS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_FRAGMENTS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_FRAGMENTS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_JABBERS_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_JABBERS_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_OVERSIZE_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_OVERSIZE_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_UNDERSIZE_FRAMES_ALARM:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_UNDERSIZE_FRAMES_WARNING:
+        case BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_POTS_PORT_FAILURE:
+        default:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_attribute_value_base_pack(bcmolt_epon_oam_ctc_attribute_value_base *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t preLenFieldPos;
+    uint32_t bytesAfterLenField;
+    if (!bcmolt_epon_oam_var_leaf_attribute_pack(this->leaf, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->width >= 0x0080)
+    {
+        bcmolt_epon_oam_buf_write_u8(buf, this->width);
+        return BCMOS_TRUE;
+    }
+
+    preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+    /* skip over length field (we'll fill it in later) */
+    if (!bcmolt_epon_oam_buf_skip(buf, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->leaf)
+    {
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_ADMIN_STATE:
+            {
+                if (!bcmolt_epon_oam_ctc_enabled_state_pack(this->u.phy_admin_state.state, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_ADMIN_STATE:
+            {
+                if (!bcmolt_epon_oam_ctc_enabled_state_pack(this->u.auto_neg_admin_state.state, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_LOCAL_TECH_ABILITY:
+            {
+                uint32_t i0;
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.auto_neg_local_tech_ability.technologies_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.auto_neg_local_tech_ability.technologies_count > 0) && (this->u.auto_neg_local_tech_ability.technologies == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"technologies\" of struct \"bcmolt_epon_oam_ctc_attribute_value_base_auto_neg_local_tech_ability\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i0 = 0; i0 < this->u.auto_neg_local_tech_ability.technologies_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.auto_neg_local_tech_ability.technologies[i0]))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_ADVERTISED_TECH_ABILITY:
+            {
+                uint32_t i1;
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.auto_neg_advertised_tech_ability.technologies_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.auto_neg_advertised_tech_ability.technologies_count > 0) && (this->u.auto_neg_advertised_tech_ability.technologies == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"technologies\" of struct \"bcmolt_epon_oam_ctc_attribute_value_base_auto_neg_advertised_tech_ability\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i1 = 0; i1 < this->u.auto_neg_advertised_tech_ability.technologies_count; i1++)
+                {
+                    if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.auto_neg_advertised_tech_ability.technologies[i1]))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_FEC_ABILITY:
+            {
+                if (!bcmolt_epon_oam_ctc_fec_support_pack(this->u.fec_ability.support, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_FEC_MODE:
+            {
+                if (!bcmolt_epon_oam_ctc_fec_state_pack(this->u.fec_mode.state, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ACTOR_ADMIN_KEY:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ACTOR_OPER_KEY:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ACTOR_SYS_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ACTOR_SYS_PRI:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ADMIN_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_AGG_OR_INDIVIDUAL:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_BCAST_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_BCAST_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_COLLECTOR_MAX_DELAY:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_DATA_RATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_DESC:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_FRAMES_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_FRAMES_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_LINK_UP_DOWN_NOTIFY_EN:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_MAC_ADDR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_MCAST_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_MCAST_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_NAME:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_OPER_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_PARTNER_OPER_KEY:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_PARTNER_SYS_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_PARTNER_SYS_PRI:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_PORT_LIST:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_RX_DISCARD:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_RX_ERR_FRAMES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_RX_OCTETS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_TIME_OF_LAST_OPER_CHANGE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_TX_DISCARD:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_TX_ERR_FRAMES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_TX_OCTETS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_UNK_PROTOCOL:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_AD_SELECT_ABLE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_AUTO_CFG:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_LOCAL_SELECT_ABLE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_REMOTE_SIG:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_RX_SELECT_ABLE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_RX_TECH:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_FEC_CORRECTED_BLOCKS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_FEC_UNCORRECTABLE_BLOCKS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_GROUP_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_GROUP_PORT_CAPACITY:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_GROUP_PORT_MAP:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_ADDR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_ALIGN_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_BCAST_FRAMES_RX_OK:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_BCAST_FRAMES_TX_OK:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CAPABILITIES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CARRIER_SENSE_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_COLLISION_FRAMES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_FRAMES_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_FRAMES_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_FUNCS_SUPPORTED:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_PAUSE_DELAY:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_PAUSE_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_PAUSE_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_UNSUPPORTED_OP_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_DUPLEX_STATUS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_ENABLE_STATUS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_EXCESSIVE_COLLISIONS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FCS_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FR_EXCESSIVE_DEFERRAL:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAME_TOO_LONG:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAMES_DEFERRED:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAMES_LOST_MAC_RX_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAMES_LOST_MAC_TX_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAMES_RX_OK:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAMES_TX_OK:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_IN_RANGE_LEN_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_LATE_COLLISIONS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_MCAST_ADDR_LIST:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_MCAST_FRAMES_RX_OK:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_MCAST_FRAMES_TX_OK:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_MCAST_RX_STATUS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_MULTIPLE_COLL_FRAMES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_OCTETS_RX_OK:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_OCTETS_TX_OK:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_OUT_OF_RANGE_LEN_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_PROMISCUOUS_STATUS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_SINGLE_COLL_FRAMES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_TX_ENABLE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_ADMIN_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_BAND_SPLIT_FREQ:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_BAND_SPLIT_TYPE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_FALSE_CARRIERS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_IDLE_ERROR_COUNT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_JABBER:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_LOSE_MEDIA_CTR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_MEDIA_AVAIL:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_TYPE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_TYPE_LIST:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_DISCOVERY_TIMEOUT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_DISCOVERY_WINDOW_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_MAC_CTRL_FRAMES_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_MAC_CTRL_FRAMES_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_RX_GATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_RX_REG_ACK:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_RX_REG_REQUEST:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_RX_REGISTER:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_RX_REPORT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_TX_GATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_TX_REG_ACK:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_TX_REG_REQUEST:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_TX_REGISTER:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_TX_REPORT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_ADMIN_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_DUP_EVENT_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_EMUL_BAD_LLID_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_EMUL_CRC8ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_EMUL_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_EMUL_SPD_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_EVENT_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_FRAMES_LOST_OAM_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_INFO_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_INFO_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FR_SEC_SUM_EVENT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FR_SEC_SUM_THRESH:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FR_SEC_SUM_WIN:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_PERIOD_EVENT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_PERIOD_THRESH:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_PERIOD_WIN:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_SECS_EVENT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_SECS_THRESH:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_SECS_WIN:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_SYM_PERIOD_EVENT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_SYM_PERIOD_THRESH:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_SYM_PERIOD_WIN:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_FLAGS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOOP_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOOP_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_MODE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_ORG_SPECIFIC_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_ORG_SPECIFIC_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_PDU_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_PDU_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_CONFIG:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_PERIOD_EVENT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_PERIOD_THRESH:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_PERIOD_WIN:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_SECS_EVENT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_SECS_THRESH:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_SECS_WIN:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_FLAGS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_MAC_ADDR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_PDU_CONFIG:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_VENDOR_DEVICE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_VENDOR_OUI:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_VENDOR_VERSION:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_UNIQUE_EVENT_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_UNSUPPORTED_OPCODES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_VAR_REQ_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_VAR_REQ_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_VAR_RESP_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_VAR_RESP_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_MII_DETECT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_SQE_TEST_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_SYMBOL_ERR_DURING_CARRIER:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_TYPE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_TYPE_LIST:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_ADMIN_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_ALIGN_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_AUTO_PART_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_AUTO_PARTITIONS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_BURSTS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_COLLISIONS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_DATA_RATE_MISMATCHES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_FCS_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_FRAMES_TOO_LONG:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_ISOLATES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_LAST_SOURCE_ADDR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_LATE_EVENTS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_READABLE_FRAMES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_READABLE_OCTETS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_RUNTS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_SHORT_EVENTS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_SOURCE_ADDR_CHANGES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_SYM_ERR_DURING_PKT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_VERY_LONG_EVENTS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_GROUP_CAPACITY:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_GROUP_MAP:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_HEALTH_DATA:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_HEALTH_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_HEALTH_TEXT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_TX_COLLISIONS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_TYPE:
+        default:
+            {
+            }
+            break;
+    }
+
+    bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+    if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_attribute_value_base_get_packed_length(bcmolt_epon_oam_ctc_attribute_value_base *this)
+{
+    if (this->width >= 0x0080)
+    {
+        return this->width;
+    }
+    else
+    {
+        uint32_t count = 3;
+        switch (this->leaf)
+        {
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_ADMIN_STATE:
+                {
+                    count += 4;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_ADMIN_STATE:
+                {
+                    count += 4;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_LOCAL_TECH_ABILITY:
+                {
+                    count += 4 + (4 * this->u.auto_neg_local_tech_ability.technologies_count);
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_ADVERTISED_TECH_ABILITY:
+                {
+                    count += 4 + (4 * this->u.auto_neg_advertised_tech_ability.technologies_count);
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_FEC_ABILITY:
+                {
+                    count += 4;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_FEC_MODE:
+                {
+                    count += 4;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ACTOR_ADMIN_KEY:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ACTOR_OPER_KEY:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ACTOR_SYS_ID:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ACTOR_SYS_PRI:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ADMIN_STATE:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_AGG_OR_INDIVIDUAL:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_BCAST_RX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_BCAST_TX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_COLLECTOR_MAX_DELAY:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_DATA_RATE:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_DESC:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_FRAMES_RX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_FRAMES_TX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ID:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_LINK_UP_DOWN_NOTIFY_EN:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_MAC_ADDR:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_MCAST_RX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_MCAST_TX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_NAME:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_OPER_STATE:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_PARTNER_OPER_KEY:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_PARTNER_SYS_ID:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_PARTNER_SYS_PRI:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_PORT_LIST:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_RX_DISCARD:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_RX_ERR_FRAMES:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_RX_OCTETS:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_TIME_OF_LAST_OPER_CHANGE:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_TX_DISCARD:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_TX_ERR_FRAMES:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_TX_OCTETS:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_UNK_PROTOCOL:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_AD_SELECT_ABLE:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_AUTO_CFG:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_ID:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_LOCAL_SELECT_ABLE:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_REMOTE_SIG:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_RX_SELECT_ABLE:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_RX_TECH:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_FEC_CORRECTED_BLOCKS:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_FEC_UNCORRECTABLE_BLOCKS:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_GROUP_ID:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_GROUP_PORT_CAPACITY:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_GROUP_PORT_MAP:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_ADDR:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_ALIGN_ERR:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_BCAST_FRAMES_RX_OK:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_BCAST_FRAMES_TX_OK:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CAPABILITIES:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CARRIER_SENSE_ERR:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_COLLISION_FRAMES:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_FRAMES_RX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_FRAMES_TX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_FUNCS_SUPPORTED:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_ID:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_PAUSE_DELAY:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_PAUSE_RX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_PAUSE_TX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_UNSUPPORTED_OP_RX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_DUPLEX_STATUS:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_ENABLE_STATUS:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_EXCESSIVE_COLLISIONS:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FCS_ERR:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FR_EXCESSIVE_DEFERRAL:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAME_TOO_LONG:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAMES_DEFERRED:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAMES_LOST_MAC_RX_ERR:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAMES_LOST_MAC_TX_ERR:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAMES_RX_OK:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAMES_TX_OK:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_ID:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_IN_RANGE_LEN_ERR:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_LATE_COLLISIONS:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_MCAST_ADDR_LIST:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_MCAST_FRAMES_RX_OK:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_MCAST_FRAMES_TX_OK:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_MCAST_RX_STATUS:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_MULTIPLE_COLL_FRAMES:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_OCTETS_RX_OK:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_OCTETS_TX_OK:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_OUT_OF_RANGE_LEN_ERR:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_PROMISCUOUS_STATUS:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_SINGLE_COLL_FRAMES:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_TX_ENABLE:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_ADMIN_STATE:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_BAND_SPLIT_FREQ:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_BAND_SPLIT_TYPE:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_FALSE_CARRIERS:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_ID:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_IDLE_ERROR_COUNT:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_JABBER:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_LOSE_MEDIA_CTR:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_MEDIA_AVAIL:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_TYPE:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_TYPE_LIST:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_DISCOVERY_TIMEOUT:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_DISCOVERY_WINDOW_TX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_MAC_CTRL_FRAMES_RX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_MAC_CTRL_FRAMES_TX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_RX_GATE:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_RX_REG_ACK:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_RX_REG_REQUEST:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_RX_REGISTER:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_RX_REPORT:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_TX_GATE:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_TX_REG_ACK:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_TX_REG_REQUEST:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_TX_REGISTER:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_TX_REPORT:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_ADMIN_STATE:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_DUP_EVENT_RX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_EMUL_BAD_LLID_ERR:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_EMUL_CRC8ERR:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_EMUL_ID:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_EMUL_SPD_ERR:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_EVENT_TX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_FRAMES_LOST_OAM_ERR:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_ID:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_INFO_RX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_INFO_TX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FR_SEC_SUM_EVENT:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FR_SEC_SUM_THRESH:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FR_SEC_SUM_WIN:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_PERIOD_EVENT:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_PERIOD_THRESH:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_PERIOD_WIN:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_SECS_EVENT:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_SECS_THRESH:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_SECS_WIN:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_SYM_PERIOD_EVENT:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_SYM_PERIOD_THRESH:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_SYM_PERIOD_WIN:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_FLAGS:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOOP_RX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOOP_TX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_MODE:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_ORG_SPECIFIC_RX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_ORG_SPECIFIC_TX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_PDU_RX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_PDU_TX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_CONFIG:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_PERIOD_EVENT:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_PERIOD_THRESH:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_PERIOD_WIN:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_SECS_EVENT:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_SECS_THRESH:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_SECS_WIN:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_FLAGS:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_MAC_ADDR:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_PDU_CONFIG:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_STATE:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_VENDOR_DEVICE:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_VENDOR_OUI:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_VENDOR_VERSION:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_UNIQUE_EVENT_RX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_UNSUPPORTED_OPCODES:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_VAR_REQ_RX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_VAR_REQ_TX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_VAR_RESP_RX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_VAR_RESP_TX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_ID:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_MII_DETECT:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_SQE_TEST_ERR:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_SYMBOL_ERR_DURING_CARRIER:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_TYPE:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_TYPE_LIST:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_ADMIN_STATE:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_ALIGN_ERR:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_AUTO_PART_STATE:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_AUTO_PARTITIONS:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_BURSTS:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_COLLISIONS:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_DATA_RATE_MISMATCHES:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_FCS_ERR:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_FRAMES_TOO_LONG:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_ID:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_ISOLATES:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_LAST_SOURCE_ADDR:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_LATE_EVENTS:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_READABLE_FRAMES:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_READABLE_OCTETS:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_RUNTS:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_SHORT_EVENTS:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_SOURCE_ADDR_CHANGES:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_SYM_ERR_DURING_PKT:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_VERY_LONG_EVENTS:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_GROUP_CAPACITY:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_GROUP_MAP:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_HEALTH_DATA:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_HEALTH_STATE:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_HEALTH_TEXT:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_ID:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_TX_COLLISIONS:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_TYPE:
+            default:
+                {
+                }
+                break;
+        }
+
+        return count;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_attribute_value_base_unpack(bcmolt_epon_oam_ctc_attribute_value_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    bcmolt_epon_oam_buf postLenBuf;
+    if (!bcmolt_epon_oam_var_leaf_attribute_unpack(&this->leaf, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->width))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->width >= 0x0080)
+    {
+        return BCMOS_TRUE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, (this->width == 0) ? 0x0080 : this->width, buf->curr);
+    switch (this->leaf)
+    {
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_ADMIN_STATE:
+            {
+                if (!bcmolt_epon_oam_ctc_enabled_state_unpack(&this->u.phy_admin_state.state, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_ADMIN_STATE:
+            {
+                if (!bcmolt_epon_oam_ctc_enabled_state_unpack(&this->u.auto_neg_admin_state.state, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_LOCAL_TECH_ABILITY:
+            {
+                uint32_t i0;
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.auto_neg_local_tech_ability.technologies_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.auto_neg_local_tech_ability.technologies_count > 0) && (this->u.auto_neg_local_tech_ability.technologies == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"technologies\" of struct \"bcmolt_epon_oam_ctc_attribute_value_base_auto_neg_local_tech_ability\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.auto_neg_local_tech_ability.technologies = (uint32_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.auto_neg_local_tech_ability.technologies_count * sizeof(uint32_t));
+                    }
+                }
+
+                for (i0 = 0; i0 < this->u.auto_neg_local_tech_ability.technologies_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.auto_neg_local_tech_ability.technologies[i0]))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_ADVERTISED_TECH_ABILITY:
+            {
+                uint32_t i1;
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.auto_neg_advertised_tech_ability.technologies_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.auto_neg_advertised_tech_ability.technologies_count > 0) && (this->u.auto_neg_advertised_tech_ability.technologies == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"technologies\" of struct \"bcmolt_epon_oam_ctc_attribute_value_base_auto_neg_advertised_tech_ability\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.auto_neg_advertised_tech_ability.technologies = (uint32_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.auto_neg_advertised_tech_ability.technologies_count * sizeof(uint32_t));
+                    }
+                }
+
+                for (i1 = 0; i1 < this->u.auto_neg_advertised_tech_ability.technologies_count; i1++)
+                {
+                    if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.auto_neg_advertised_tech_ability.technologies[i1]))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_FEC_ABILITY:
+            {
+                if (!bcmolt_epon_oam_ctc_fec_support_unpack(&this->u.fec_ability.support, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_FEC_MODE:
+            {
+                if (!bcmolt_epon_oam_ctc_fec_state_unpack(&this->u.fec_mode.state, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ACTOR_ADMIN_KEY:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ACTOR_OPER_KEY:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ACTOR_SYS_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ACTOR_SYS_PRI:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ADMIN_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_AGG_OR_INDIVIDUAL:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_BCAST_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_BCAST_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_COLLECTOR_MAX_DELAY:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_DATA_RATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_DESC:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_FRAMES_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_FRAMES_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_LINK_UP_DOWN_NOTIFY_EN:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_MAC_ADDR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_MCAST_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_MCAST_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_NAME:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_OPER_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_PARTNER_OPER_KEY:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_PARTNER_SYS_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_PARTNER_SYS_PRI:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_PORT_LIST:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_RX_DISCARD:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_RX_ERR_FRAMES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_RX_OCTETS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_TIME_OF_LAST_OPER_CHANGE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_TX_DISCARD:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_TX_ERR_FRAMES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_TX_OCTETS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_UNK_PROTOCOL:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_AD_SELECT_ABLE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_AUTO_CFG:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_LOCAL_SELECT_ABLE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_REMOTE_SIG:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_RX_SELECT_ABLE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_RX_TECH:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_FEC_CORRECTED_BLOCKS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_FEC_UNCORRECTABLE_BLOCKS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_GROUP_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_GROUP_PORT_CAPACITY:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_GROUP_PORT_MAP:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_ADDR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_ALIGN_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_BCAST_FRAMES_RX_OK:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_BCAST_FRAMES_TX_OK:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CAPABILITIES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CARRIER_SENSE_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_COLLISION_FRAMES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_FRAMES_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_FRAMES_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_FUNCS_SUPPORTED:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_PAUSE_DELAY:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_PAUSE_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_PAUSE_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_UNSUPPORTED_OP_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_DUPLEX_STATUS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_ENABLE_STATUS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_EXCESSIVE_COLLISIONS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FCS_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FR_EXCESSIVE_DEFERRAL:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAME_TOO_LONG:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAMES_DEFERRED:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAMES_LOST_MAC_RX_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAMES_LOST_MAC_TX_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAMES_RX_OK:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAMES_TX_OK:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_IN_RANGE_LEN_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_LATE_COLLISIONS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_MCAST_ADDR_LIST:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_MCAST_FRAMES_RX_OK:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_MCAST_FRAMES_TX_OK:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_MCAST_RX_STATUS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_MULTIPLE_COLL_FRAMES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_OCTETS_RX_OK:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_OCTETS_TX_OK:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_OUT_OF_RANGE_LEN_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_PROMISCUOUS_STATUS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_SINGLE_COLL_FRAMES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_TX_ENABLE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_ADMIN_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_BAND_SPLIT_FREQ:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_BAND_SPLIT_TYPE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_FALSE_CARRIERS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_IDLE_ERROR_COUNT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_JABBER:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_LOSE_MEDIA_CTR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_MEDIA_AVAIL:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_TYPE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_TYPE_LIST:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_DISCOVERY_TIMEOUT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_DISCOVERY_WINDOW_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_MAC_CTRL_FRAMES_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_MAC_CTRL_FRAMES_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_RX_GATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_RX_REG_ACK:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_RX_REG_REQUEST:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_RX_REGISTER:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_RX_REPORT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_TX_GATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_TX_REG_ACK:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_TX_REG_REQUEST:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_TX_REGISTER:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_TX_REPORT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_ADMIN_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_DUP_EVENT_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_EMUL_BAD_LLID_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_EMUL_CRC8ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_EMUL_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_EMUL_SPD_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_EVENT_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_FRAMES_LOST_OAM_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_INFO_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_INFO_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FR_SEC_SUM_EVENT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FR_SEC_SUM_THRESH:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FR_SEC_SUM_WIN:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_PERIOD_EVENT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_PERIOD_THRESH:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_PERIOD_WIN:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_SECS_EVENT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_SECS_THRESH:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_SECS_WIN:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_SYM_PERIOD_EVENT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_SYM_PERIOD_THRESH:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_SYM_PERIOD_WIN:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_FLAGS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOOP_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOOP_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_MODE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_ORG_SPECIFIC_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_ORG_SPECIFIC_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_PDU_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_PDU_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_CONFIG:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_PERIOD_EVENT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_PERIOD_THRESH:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_PERIOD_WIN:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_SECS_EVENT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_SECS_THRESH:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_SECS_WIN:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_FLAGS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_MAC_ADDR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_PDU_CONFIG:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_VENDOR_DEVICE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_VENDOR_OUI:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_VENDOR_VERSION:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_UNIQUE_EVENT_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_UNSUPPORTED_OPCODES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_VAR_REQ_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_VAR_REQ_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_VAR_RESP_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_VAR_RESP_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_MII_DETECT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_SQE_TEST_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_SYMBOL_ERR_DURING_CARRIER:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_TYPE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_TYPE_LIST:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_ADMIN_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_ALIGN_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_AUTO_PART_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_AUTO_PARTITIONS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_BURSTS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_COLLISIONS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_DATA_RATE_MISMATCHES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_FCS_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_FRAMES_TOO_LONG:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_ISOLATES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_LAST_SOURCE_ADDR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_LATE_EVENTS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_READABLE_FRAMES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_READABLE_OCTETS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_RUNTS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_SHORT_EVENTS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_SOURCE_ADDR_CHANGES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_SYM_ERR_DURING_PKT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_VERY_LONG_EVENTS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_GROUP_CAPACITY:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_GROUP_MAP:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_HEALTH_DATA:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_HEALTH_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_HEALTH_TEXT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_TX_COLLISIONS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_TYPE:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(buf, (this->width == 0) ? 0x0080 : this->width))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_attribute_value_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_var_leaf_attribute leaf;
+    bcmolt_epon_oam_buf postLenBuf;
+    uint8_t length;
+    if (!bcmolt_epon_oam_var_leaf_attribute_unpack(&leaf, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (length >= 0x0080)
+    {
+        return BCMOS_TRUE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+    switch (leaf)
+    {
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_ADMIN_STATE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_ADMIN_STATE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_LOCAL_TECH_ABILITY:
+            {
+                uint32_t technologies_count;
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &technologies_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint32_t) * technologies_count);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, technologies_count * 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_ADVERTISED_TECH_ABILITY:
+            {
+                uint32_t technologies_count;
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &technologies_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint32_t) * technologies_count);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, technologies_count * 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_FEC_ABILITY:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_FEC_MODE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ACTOR_ADMIN_KEY:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ACTOR_OPER_KEY:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ACTOR_SYS_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ACTOR_SYS_PRI:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ADMIN_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_AGG_OR_INDIVIDUAL:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_BCAST_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_BCAST_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_COLLECTOR_MAX_DELAY:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_DATA_RATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_DESC:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_FRAMES_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_FRAMES_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_LINK_UP_DOWN_NOTIFY_EN:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_MAC_ADDR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_MCAST_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_MCAST_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_NAME:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_OPER_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_PARTNER_OPER_KEY:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_PARTNER_SYS_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_PARTNER_SYS_PRI:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_PORT_LIST:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_RX_DISCARD:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_RX_ERR_FRAMES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_RX_OCTETS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_TIME_OF_LAST_OPER_CHANGE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_TX_DISCARD:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_TX_ERR_FRAMES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_TX_OCTETS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_UNK_PROTOCOL:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_AD_SELECT_ABLE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_AUTO_CFG:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_LOCAL_SELECT_ABLE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_REMOTE_SIG:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_RX_SELECT_ABLE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_RX_TECH:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_FEC_CORRECTED_BLOCKS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_FEC_UNCORRECTABLE_BLOCKS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_GROUP_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_GROUP_PORT_CAPACITY:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_GROUP_PORT_MAP:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_ADDR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_ALIGN_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_BCAST_FRAMES_RX_OK:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_BCAST_FRAMES_TX_OK:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CAPABILITIES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CARRIER_SENSE_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_COLLISION_FRAMES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_FRAMES_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_FRAMES_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_FUNCS_SUPPORTED:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_PAUSE_DELAY:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_PAUSE_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_PAUSE_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_UNSUPPORTED_OP_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_DUPLEX_STATUS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_ENABLE_STATUS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_EXCESSIVE_COLLISIONS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FCS_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FR_EXCESSIVE_DEFERRAL:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAME_TOO_LONG:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAMES_DEFERRED:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAMES_LOST_MAC_RX_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAMES_LOST_MAC_TX_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAMES_RX_OK:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAMES_TX_OK:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_IN_RANGE_LEN_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_LATE_COLLISIONS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_MCAST_ADDR_LIST:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_MCAST_FRAMES_RX_OK:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_MCAST_FRAMES_TX_OK:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_MCAST_RX_STATUS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_MULTIPLE_COLL_FRAMES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_OCTETS_RX_OK:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_OCTETS_TX_OK:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_OUT_OF_RANGE_LEN_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_PROMISCUOUS_STATUS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_SINGLE_COLL_FRAMES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_TX_ENABLE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_ADMIN_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_BAND_SPLIT_FREQ:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_BAND_SPLIT_TYPE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_FALSE_CARRIERS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_IDLE_ERROR_COUNT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_JABBER:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_LOSE_MEDIA_CTR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_MEDIA_AVAIL:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_TYPE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_TYPE_LIST:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_DISCOVERY_TIMEOUT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_DISCOVERY_WINDOW_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_MAC_CTRL_FRAMES_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_MAC_CTRL_FRAMES_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_RX_GATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_RX_REG_ACK:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_RX_REG_REQUEST:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_RX_REGISTER:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_RX_REPORT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_TX_GATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_TX_REG_ACK:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_TX_REG_REQUEST:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_TX_REGISTER:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_TX_REPORT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_ADMIN_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_DUP_EVENT_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_EMUL_BAD_LLID_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_EMUL_CRC8ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_EMUL_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_EMUL_SPD_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_EVENT_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_FRAMES_LOST_OAM_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_INFO_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_INFO_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FR_SEC_SUM_EVENT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FR_SEC_SUM_THRESH:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FR_SEC_SUM_WIN:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_PERIOD_EVENT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_PERIOD_THRESH:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_PERIOD_WIN:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_SECS_EVENT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_SECS_THRESH:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_SECS_WIN:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_SYM_PERIOD_EVENT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_SYM_PERIOD_THRESH:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_SYM_PERIOD_WIN:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_FLAGS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOOP_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOOP_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_MODE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_ORG_SPECIFIC_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_ORG_SPECIFIC_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_PDU_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_PDU_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_CONFIG:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_PERIOD_EVENT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_PERIOD_THRESH:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_PERIOD_WIN:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_SECS_EVENT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_SECS_THRESH:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_SECS_WIN:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_FLAGS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_MAC_ADDR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_PDU_CONFIG:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_VENDOR_DEVICE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_VENDOR_OUI:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_VENDOR_VERSION:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_UNIQUE_EVENT_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_UNSUPPORTED_OPCODES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_VAR_REQ_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_VAR_REQ_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_VAR_RESP_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_VAR_RESP_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_MII_DETECT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_SQE_TEST_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_SYMBOL_ERR_DURING_CARRIER:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_TYPE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_TYPE_LIST:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_ADMIN_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_ALIGN_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_AUTO_PART_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_AUTO_PARTITIONS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_BURSTS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_COLLISIONS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_DATA_RATE_MISMATCHES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_FCS_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_FRAMES_TOO_LONG:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_ISOLATES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_LAST_SOURCE_ADDR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_LATE_EVENTS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_READABLE_FRAMES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_READABLE_OCTETS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_RUNTS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_SHORT_EVENTS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_SOURCE_ADDR_CHANGES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_SYM_ERR_DURING_PKT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_VERY_LONG_EVENTS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_GROUP_CAPACITY:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_GROUP_MAP:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_HEALTH_DATA:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_HEALTH_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_HEALTH_TEXT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_TX_COLLISIONS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_TYPE:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_churning_prov_base_pack(bcmolt_epon_oam_ctc_churning_prov_base *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_ctc_churning_op_code_pack(this->code, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->code)
+    {
+        case BCMOLT_EPON_OAM_CTC_CHURNING_OP_CODE_NEW_KEY_REQUEST:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.new_key_request.in_use_key_index))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_CHURNING_OP_CODE_NEW_CHURNING_KEY:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.new_churning_key.new_key_index))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.new_churning_key.churning_key0, 3))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.new_churning_key.churning_key1, 3))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.new_churning_key.churning_key2, 3))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_churning_prov_base_get_packed_length(bcmolt_epon_oam_ctc_churning_prov_base *this)
+{
+    uint32_t count = 1;
+    switch (this->code)
+    {
+        case BCMOLT_EPON_OAM_CTC_CHURNING_OP_CODE_NEW_KEY_REQUEST:
+            {
+                count += 1;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_CHURNING_OP_CODE_NEW_CHURNING_KEY:
+            {
+                count += 10;
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_churning_prov_base_unpack(bcmolt_epon_oam_ctc_churning_prov_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_ctc_churning_op_code_unpack(&this->code, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->code)
+    {
+        case BCMOLT_EPON_OAM_CTC_CHURNING_OP_CODE_NEW_KEY_REQUEST:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.new_key_request.in_use_key_index))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_CHURNING_OP_CODE_NEW_CHURNING_KEY:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.new_churning_key.new_key_index))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.new_churning_key.churning_key0, 3))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.new_churning_key.churning_key1, 3))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.new_churning_key.churning_key2, 3))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_churning_prov_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_ctc_churning_op_code code;
+    if (!bcmolt_epon_oam_ctc_churning_op_code_unpack(&code, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (code)
+    {
+        case BCMOLT_EPON_OAM_CTC_CHURNING_OP_CODE_NEW_KEY_REQUEST:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_CHURNING_OP_CODE_NEW_CHURNING_KEY:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 3))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 3))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 3))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_commit_image_base_pack(bcmolt_epon_oam_ctc_commit_image_base *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_ctc_commit_image_opcode_pack(this->opcode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->opcode)
+    {
+        case BCMOLT_EPON_OAM_CTC_COMMIT_IMAGE_OPCODE_COMMIT_IMAGE_REQUEST:
+            {
+                if (!bcmolt_epon_oam_ctc_commit_image_flag_pack(this->u.commit_image_request.flag, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_COMMIT_IMAGE_OPCODE_COMMIT_IMAGE_RESPONSE:
+            {
+                if (!bcmolt_epon_oam_ctc_commit_image_ack_pack(this->u.commit_image_response.ack, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_commit_image_base_get_packed_length(bcmolt_epon_oam_ctc_commit_image_base *this)
+{
+    uint32_t count = 2;
+    switch (this->opcode)
+    {
+        case BCMOLT_EPON_OAM_CTC_COMMIT_IMAGE_OPCODE_COMMIT_IMAGE_REQUEST:
+            {
+                count += 1;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_COMMIT_IMAGE_OPCODE_COMMIT_IMAGE_RESPONSE:
+            {
+                count += 1;
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_commit_image_base_unpack(bcmolt_epon_oam_ctc_commit_image_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_ctc_commit_image_opcode_unpack(&this->opcode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->opcode)
+    {
+        case BCMOLT_EPON_OAM_CTC_COMMIT_IMAGE_OPCODE_COMMIT_IMAGE_REQUEST:
+            {
+                if (!bcmolt_epon_oam_ctc_commit_image_flag_unpack(&this->u.commit_image_request.flag, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_COMMIT_IMAGE_OPCODE_COMMIT_IMAGE_RESPONSE:
+            {
+                if (!bcmolt_epon_oam_ctc_commit_image_ack_unpack(&this->u.commit_image_response.ack, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_commit_image_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_ctc_commit_image_opcode opcode;
+    if (!bcmolt_epon_oam_ctc_commit_image_opcode_unpack(&opcode, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (opcode)
+    {
+        case BCMOLT_EPON_OAM_CTC_COMMIT_IMAGE_OPCODE_COMMIT_IMAGE_REQUEST:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_COMMIT_IMAGE_OPCODE_COMMIT_IMAGE_RESPONSE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_dba_queue_set_pack(bcmolt_epon_oam_ctc_dba_queue_set *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->report_bitmap))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((((uint64_t) this->report_bitmap & 0x0001) == 0x0001))
+    {
+        if (!bcmolt_epon_oam_buf_write_u16(buf, this->queue0))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->report_bitmap & 0x0002) == 0x0002))
+    {
+        if (!bcmolt_epon_oam_buf_write_u16(buf, this->queue1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->report_bitmap & 0x0004) == 0x0004))
+    {
+        if (!bcmolt_epon_oam_buf_write_u16(buf, this->queue2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->report_bitmap & 0x0008) == 0x0008))
+    {
+        if (!bcmolt_epon_oam_buf_write_u16(buf, this->queue3))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->report_bitmap & 0x0010) == 0x0010))
+    {
+        if (!bcmolt_epon_oam_buf_write_u16(buf, this->queue4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->report_bitmap & 0x0020) == 0x0020))
+    {
+        if (!bcmolt_epon_oam_buf_write_u16(buf, this->queue5))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->report_bitmap & 0x0040) == 0x0040))
+    {
+        if (!bcmolt_epon_oam_buf_write_u16(buf, this->queue6))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->report_bitmap & 0x0080) == 0x0080))
+    {
+        if (!bcmolt_epon_oam_buf_write_u16(buf, this->queue7))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_dba_queue_set_unpack(bcmolt_epon_oam_ctc_dba_queue_set *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->report_bitmap))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((((uint64_t) this->report_bitmap & 0x0001) == 0x0001))
+    {
+        if (!bcmolt_epon_oam_buf_read_u16(buf, &this->queue0))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->report_bitmap & 0x0002) == 0x0002))
+    {
+        if (!bcmolt_epon_oam_buf_read_u16(buf, &this->queue1))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->report_bitmap & 0x0004) == 0x0004))
+    {
+        if (!bcmolt_epon_oam_buf_read_u16(buf, &this->queue2))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->report_bitmap & 0x0008) == 0x0008))
+    {
+        if (!bcmolt_epon_oam_buf_read_u16(buf, &this->queue3))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->report_bitmap & 0x0010) == 0x0010))
+    {
+        if (!bcmolt_epon_oam_buf_read_u16(buf, &this->queue4))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->report_bitmap & 0x0020) == 0x0020))
+    {
+        if (!bcmolt_epon_oam_buf_read_u16(buf, &this->queue5))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->report_bitmap & 0x0040) == 0x0040))
+    {
+        if (!bcmolt_epon_oam_buf_read_u16(buf, &this->queue6))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if ((((uint64_t) this->report_bitmap & 0x0080) == 0x0080))
+    {
+        if (!bcmolt_epon_oam_buf_read_u16(buf, &this->queue7))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_dba_queue_set_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 17);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_dba_prov_base_pack(bcmolt_epon_oam_ctc_dba_prov_base *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_ctc_dba_op_code_pack(this->dba_code, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->dba_code)
+    {
+        case BCMOLT_EPON_OAM_CTC_DBA_OP_CODE_GET_REQUEST:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_DBA_OP_CODE_GET_RESPONSE:
+            {
+                uint8_t i0;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.get_response.queue_sets_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_response.queue_sets_count > 0) && (this->u.get_response.queue_sets == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"queue_sets\" of struct \"bcmolt_epon_oam_ctc_dba_prov_base_get_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i0 = 0; i0 < this->u.get_response.queue_sets_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_ctc_dba_queue_set_pack(&this->u.get_response.queue_sets[i0], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_DBA_OP_CODE_SET_REQUEST:
+            {
+                uint8_t i1;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.set_request.queue_sets_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.set_request.queue_sets_count > 0) && (this->u.set_request.queue_sets == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"queue_sets\" of struct \"bcmolt_epon_oam_ctc_dba_prov_base_set_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i1 = 0; i1 < this->u.set_request.queue_sets_count; i1++)
+                {
+                    if (!bcmolt_epon_oam_ctc_dba_queue_set_pack(&this->u.set_request.queue_sets[i1], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_DBA_OP_CODE_SET_RESPONSE:
+            {
+                uint8_t i2;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.set_response.queue_sets_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.set_response.queue_sets_count > 0) && (this->u.set_response.queue_sets == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"queue_sets\" of struct \"bcmolt_epon_oam_ctc_dba_prov_base_set_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i2 = 0; i2 < this->u.set_response.queue_sets_count; i2++)
+                {
+                    if (!bcmolt_epon_oam_ctc_dba_queue_set_pack(&this->u.set_response.queue_sets[i2], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_dba_prov_base_get_packed_length(bcmolt_epon_oam_ctc_dba_prov_base *this)
+{
+    uint32_t count = 1;
+    switch (this->dba_code)
+    {
+        case BCMOLT_EPON_OAM_CTC_DBA_OP_CODE_GET_REQUEST:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_DBA_OP_CODE_GET_RESPONSE:
+            {
+                uint32_t i0;
+                count += 1;
+                if ((this->u.get_response.queue_sets_count > 0) && (this->u.get_response.queue_sets == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"queue_sets_count\" of struct \"bcmolt_epon_oam_ctc_dba_prov_base\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return 0;
+                }
+
+                for (i0 = 0; i0 < this->u.get_response.queue_sets_count; i0++)
+                {
+                    count += 17;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_DBA_OP_CODE_SET_REQUEST:
+            {
+                uint32_t i1;
+                count += 1;
+                if ((this->u.set_request.queue_sets_count > 0) && (this->u.set_request.queue_sets == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"queue_sets_count\" of struct \"bcmolt_epon_oam_ctc_dba_prov_base\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return 0;
+                }
+
+                for (i1 = 0; i1 < this->u.set_request.queue_sets_count; i1++)
+                {
+                    count += 17;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_DBA_OP_CODE_SET_RESPONSE:
+            {
+                uint32_t i2;
+                count += 1;
+                if ((this->u.set_response.queue_sets_count > 0) && (this->u.set_response.queue_sets == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"queue_sets_count\" of struct \"bcmolt_epon_oam_ctc_dba_prov_base\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return 0;
+                }
+
+                for (i2 = 0; i2 < this->u.set_response.queue_sets_count; i2++)
+                {
+                    count += 17;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_dba_prov_base_unpack(bcmolt_epon_oam_ctc_dba_prov_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_ctc_dba_op_code_unpack(&this->dba_code, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->dba_code)
+    {
+        case BCMOLT_EPON_OAM_CTC_DBA_OP_CODE_GET_REQUEST:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_DBA_OP_CODE_GET_RESPONSE:
+            {
+                uint8_t i0;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.get_response.queue_sets_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_response.queue_sets_count > 0) && (this->u.get_response.queue_sets == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"queue_sets\" of struct \"bcmolt_epon_oam_ctc_dba_prov_base_get_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.get_response.queue_sets = (bcmolt_epon_oam_ctc_dba_queue_set *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.get_response.queue_sets_count * sizeof(bcmolt_epon_oam_ctc_dba_queue_set));
+                    }
+                }
+
+                for (i0 = 0; i0 < this->u.get_response.queue_sets_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_ctc_dba_queue_set_unpack(&this->u.get_response.queue_sets[i0], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_DBA_OP_CODE_SET_REQUEST:
+            {
+                uint8_t i1;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.set_request.queue_sets_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.set_request.queue_sets_count > 0) && (this->u.set_request.queue_sets == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"queue_sets\" of struct \"bcmolt_epon_oam_ctc_dba_prov_base_set_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.set_request.queue_sets = (bcmolt_epon_oam_ctc_dba_queue_set *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.set_request.queue_sets_count * sizeof(bcmolt_epon_oam_ctc_dba_queue_set));
+                    }
+                }
+
+                for (i1 = 0; i1 < this->u.set_request.queue_sets_count; i1++)
+                {
+                    if (!bcmolt_epon_oam_ctc_dba_queue_set_unpack(&this->u.set_request.queue_sets[i1], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_DBA_OP_CODE_SET_RESPONSE:
+            {
+                uint8_t i2;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.set_response.queue_sets_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.set_response.queue_sets_count > 0) && (this->u.set_response.queue_sets == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"queue_sets\" of struct \"bcmolt_epon_oam_ctc_dba_prov_base_set_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.set_response.queue_sets = (bcmolt_epon_oam_ctc_dba_queue_set *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.set_response.queue_sets_count * sizeof(bcmolt_epon_oam_ctc_dba_queue_set));
+                    }
+                }
+
+                for (i2 = 0; i2 < this->u.set_response.queue_sets_count; i2++)
+                {
+                    if (!bcmolt_epon_oam_ctc_dba_queue_set_unpack(&this->u.set_response.queue_sets[i2], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_dba_prov_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_ctc_dba_op_code dba_code;
+    if (!bcmolt_epon_oam_ctc_dba_op_code_unpack(&dba_code, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (dba_code)
+    {
+        case BCMOLT_EPON_OAM_CTC_DBA_OP_CODE_GET_REQUEST:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_DBA_OP_CODE_GET_RESPONSE:
+            {
+                uint8_t queue_sets_count;
+                uint8_t i0;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &queue_sets_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_ctc_dba_queue_set) * queue_sets_count);
+                for (i0 = 0; i0 < queue_sets_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_ctc_dba_queue_set_scan(packed, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_DBA_OP_CODE_SET_REQUEST:
+            {
+                uint8_t queue_sets_count;
+                uint8_t i1;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &queue_sets_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_ctc_dba_queue_set) * queue_sets_count);
+                for (i1 = 0; i1 < queue_sets_count; i1++)
+                {
+                    if (!bcmolt_epon_oam_ctc_dba_queue_set_scan(packed, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_DBA_OP_CODE_SET_RESPONSE:
+            {
+                uint8_t queue_sets_count;
+                uint8_t i2;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &queue_sets_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_ctc_dba_queue_set) * queue_sets_count);
+                for (i2 = 0; i2 < queue_sets_count; i2++)
+                {
+                    if (!bcmolt_epon_oam_ctc_dba_queue_set_scan(packed, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_old_management_object_base_pack(bcmolt_epon_oam_ctc_old_management_object_base *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t preLenFieldPos;
+    uint32_t bytesAfterLenField;
+    if (!bcmolt_epon_oam_ctc_leaf_old_management_object_pack(this->leaf, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->length >= 0x0080)
+    {
+        bcmolt_epon_oam_buf_write_u8(buf, this->length);
+        return BCMOS_TRUE;
+    }
+
+    preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+    /* skip over length field (we'll fill it in later) */
+    if (!bcmolt_epon_oam_buf_skip(buf, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->leaf)
+    {
+        case BCMOLT_EPON_OAM_CTC_LEAF_OLD_MANAGEMENT_OBJECT_PORT:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.port.port))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+    if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_old_management_object_base_get_packed_length(bcmolt_epon_oam_ctc_old_management_object_base *this)
+{
+    if (this->length >= 0x0080)
+    {
+        return this->length;
+    }
+    else
+    {
+        uint32_t count = 3;
+        switch (this->leaf)
+        {
+            case BCMOLT_EPON_OAM_CTC_LEAF_OLD_MANAGEMENT_OBJECT_PORT:
+                {
+                    count += 1;
+                }
+                break;
+            default:
+                {
+                }
+                break;
+        }
+
+        return count;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_old_management_object_base_unpack(bcmolt_epon_oam_ctc_old_management_object_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    bcmolt_epon_oam_buf postLenBuf;
+    if (!bcmolt_epon_oam_ctc_leaf_old_management_object_unpack(&this->leaf, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->length >= 0x0080)
+    {
+        return BCMOS_TRUE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, (this->length == 0) ? 0x0080 : this->length, buf->curr);
+    switch (this->leaf)
+    {
+        case BCMOLT_EPON_OAM_CTC_LEAF_OLD_MANAGEMENT_OBJECT_PORT:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.port.port))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(buf, (this->length == 0) ? 0x0080 : this->length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_old_management_object_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_ctc_leaf_old_management_object leaf;
+    bcmolt_epon_oam_buf postLenBuf;
+    uint8_t length;
+    if (!bcmolt_epon_oam_ctc_leaf_old_management_object_unpack(&leaf, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (length >= 0x0080)
+    {
+        return BCMOS_TRUE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+    switch (leaf)
+    {
+        case BCMOLT_EPON_OAM_CTC_LEAF_OLD_MANAGEMENT_OBJECT_PORT:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_management_object_base_pack(bcmolt_epon_oam_ctc_management_object_base *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t preLenFieldPos;
+    uint32_t bytesAfterLenField;
+    if (!bcmolt_epon_oam_ctc_leaf_management_object_pack(this->leaf, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->length >= 0x0080)
+    {
+        bcmolt_epon_oam_buf_write_u8(buf, this->length);
+        return BCMOS_TRUE;
+    }
+
+    preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+    /* skip over length field (we'll fill it in later) */
+    if (!bcmolt_epon_oam_buf_skip(buf, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->leaf)
+    {
+        case BCMOLT_EPON_OAM_CTC_LEAF_MANAGEMENT_OBJECT_PORT:
+            {
+                if (!bcmolt_epon_oam_ctc_port_type_pack(this->u.port.port_type, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.port.cascade_slot_number))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.port.port_number))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_MANAGEMENT_OBJECT_CARD:
+            {
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.card.card))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_MANAGEMENT_OBJECT_LLID:
+            {
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.llid.llid))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_MANAGEMENT_OBJECT_PON_IF:
+            {
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.pon_if.pon_if))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_MANAGEMENT_OBJECT_ONU:
+        default:
+            {
+            }
+            break;
+    }
+
+    bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+    if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_management_object_base_get_packed_length(bcmolt_epon_oam_ctc_management_object_base *this)
+{
+    if (this->length >= 0x0080)
+    {
+        return this->length;
+    }
+    else
+    {
+        uint32_t count = 3;
+        switch (this->leaf)
+        {
+            case BCMOLT_EPON_OAM_CTC_LEAF_MANAGEMENT_OBJECT_PORT:
+                {
+                    count += 4;
+                }
+                break;
+            case BCMOLT_EPON_OAM_CTC_LEAF_MANAGEMENT_OBJECT_CARD:
+                {
+                    count += 4;
+                }
+                break;
+            case BCMOLT_EPON_OAM_CTC_LEAF_MANAGEMENT_OBJECT_LLID:
+                {
+                    count += 4;
+                }
+                break;
+            case BCMOLT_EPON_OAM_CTC_LEAF_MANAGEMENT_OBJECT_PON_IF:
+                {
+                    count += 4;
+                }
+                break;
+            case BCMOLT_EPON_OAM_CTC_LEAF_MANAGEMENT_OBJECT_ONU:
+            default:
+                {
+                }
+                break;
+        }
+
+        return count;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_management_object_base_unpack(bcmolt_epon_oam_ctc_management_object_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    bcmolt_epon_oam_buf postLenBuf;
+    if (!bcmolt_epon_oam_ctc_leaf_management_object_unpack(&this->leaf, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->length >= 0x0080)
+    {
+        return BCMOS_TRUE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, (this->length == 0) ? 0x0080 : this->length, buf->curr);
+    switch (this->leaf)
+    {
+        case BCMOLT_EPON_OAM_CTC_LEAF_MANAGEMENT_OBJECT_PORT:
+            {
+                if (!bcmolt_epon_oam_ctc_port_type_unpack(&this->u.port.port_type, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.port.cascade_slot_number))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.port.port_number))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_MANAGEMENT_OBJECT_CARD:
+            {
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.card.card))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_MANAGEMENT_OBJECT_LLID:
+            {
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.llid.llid))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_MANAGEMENT_OBJECT_PON_IF:
+            {
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.pon_if.pon_if))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_MANAGEMENT_OBJECT_ONU:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(buf, (this->length == 0) ? 0x0080 : this->length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_management_object_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_ctc_leaf_management_object leaf;
+    bcmolt_epon_oam_buf postLenBuf;
+    uint8_t length;
+    if (!bcmolt_epon_oam_ctc_leaf_management_object_unpack(&leaf, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (length >= 0x0080)
+    {
+        return BCMOS_TRUE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+    switch (leaf)
+    {
+        case BCMOLT_EPON_OAM_CTC_LEAF_MANAGEMENT_OBJECT_PORT:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_MANAGEMENT_OBJECT_CARD:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_MANAGEMENT_OBJECT_LLID:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_MANAGEMENT_OBJECT_PON_IF:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_MANAGEMENT_OBJECT_ONU:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_empty_var_container_base_pack(bcmolt_epon_oam_ctc_empty_var_container_base *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_ctc_branch_pack(this->branch, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->branch)
+    {
+        case BCMOLT_EPON_OAM_CTC_BRANCH_END:
+            {
+                if ((this->u.end.unknown_count > 0) && (this->u.end.unknown == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"unknown\" of struct \"bcmolt_epon_oam_ctc_empty_var_container_base_end\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.end.unknown, this->u.end.unknown_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_var_leaf_attribute_pack(this->u.attribute.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_oam_error_code_pack(this->u.attribute.error, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_ACTION:
+            {
+                if (!bcmolt_epon_oam_var_leaf_action_pack(this->u.action.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_oam_error_code_pack(this->u.action.error, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_OLD_MANAGEMENT_OBJECT:
+            {
+                if (!bcmolt_epon_oam_ctc_old_management_object_base_pack(&this->u.old_management_object.object, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_MANAGEMENT_OBJECT:
+            {
+                if (!bcmolt_epon_oam_ctc_management_object_base_pack(&this->u.management_object.object, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_EXT_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_ctc_leaf_ext_attribute_pack(this->u.ext_attribute.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_oam_error_code_pack(this->u.ext_attribute.error, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_EXT_ACTION:
+            {
+                if (!bcmolt_epon_oam_ctc_leaf_ext_action_pack(this->u.ext_action.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_oam_error_code_pack(this->u.ext_action.error, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_KTATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_ktleaf_attribute_pack(this->u.ktattribute.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_oam_error_code_pack(this->u.ktattribute.error, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_KTACTION:
+            {
+                if (!bcmolt_epon_oam_ktleaf_attribute_pack(this->u.ktaction.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_oam_error_code_pack(this->u.ktaction.error, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.def.leaf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_oam_error_code_pack(this->u.def.error, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_empty_var_container_base_get_packed_length(bcmolt_epon_oam_ctc_empty_var_container_base *this)
+{
+    uint32_t count = 1;
+    switch (this->branch)
+    {
+        case BCMOLT_EPON_OAM_CTC_BRANCH_END:
+            {
+                count += this->u.end.unknown_count;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_ATTRIBUTE:
+            {
+                count += 3;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_ACTION:
+            {
+                count += 3;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_OLD_MANAGEMENT_OBJECT:
+            {
+                count += bcmolt_epon_oam_ctc_old_management_object_base_get_packed_length(&this->u.old_management_object.object);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_MANAGEMENT_OBJECT:
+            {
+                count += bcmolt_epon_oam_ctc_management_object_base_get_packed_length(&this->u.management_object.object);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_EXT_ATTRIBUTE:
+            {
+                count += 3;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_EXT_ACTION:
+            {
+                count += 3;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_KTATTRIBUTE:
+            {
+                count += 3;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_KTACTION:
+            {
+                count += 3;
+            }
+            break;
+        default:
+            {
+                count += 3;
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_empty_var_container_base_unpack(bcmolt_epon_oam_ctc_empty_var_container_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_ctc_branch_unpack(&this->branch, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->branch)
+    {
+        case BCMOLT_EPON_OAM_CTC_BRANCH_END:
+            {
+                this->u.end.unknown_count = bcmolt_epon_oam_ctc_empty_var_container_base_end_count_unknown(buf);
+                if ((this->u.end.unknown_count > 0) && (this->u.end.unknown == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"unknown\" of struct \"bcmolt_epon_oam_ctc_empty_var_container_base_end\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.end.unknown = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.end.unknown_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.end.unknown, this->u.end.unknown_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_var_leaf_attribute_unpack(&this->u.attribute.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_oam_error_code_unpack(&this->u.attribute.error, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_ACTION:
+            {
+                if (!bcmolt_epon_oam_var_leaf_action_unpack(&this->u.action.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_oam_error_code_unpack(&this->u.action.error, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_OLD_MANAGEMENT_OBJECT:
+            {
+                if (!bcmolt_epon_oam_ctc_old_management_object_base_unpack(&this->u.old_management_object.object, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_MANAGEMENT_OBJECT:
+            {
+                if (!bcmolt_epon_oam_ctc_management_object_base_unpack(&this->u.management_object.object, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_EXT_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_ctc_leaf_ext_attribute_unpack(&this->u.ext_attribute.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_oam_error_code_unpack(&this->u.ext_attribute.error, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_EXT_ACTION:
+            {
+                if (!bcmolt_epon_oam_ctc_leaf_ext_action_unpack(&this->u.ext_action.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_oam_error_code_unpack(&this->u.ext_action.error, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_KTATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_ktleaf_attribute_unpack(&this->u.ktattribute.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_oam_error_code_unpack(&this->u.ktattribute.error, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_KTACTION:
+            {
+                if (!bcmolt_epon_oam_ktleaf_attribute_unpack(&this->u.ktaction.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_oam_error_code_unpack(&this->u.ktaction.error, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.def.leaf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_oam_error_code_unpack(&this->u.def.error, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_empty_var_container_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_ctc_branch branch;
+    if (!bcmolt_epon_oam_ctc_branch_unpack(&branch, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (branch)
+    {
+        case BCMOLT_EPON_OAM_CTC_BRANCH_END:
+            {
+                uint32_t unknown_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                    {
+                        break;
+                    }
+
+                    unknown_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(unknown_elem_count * sizeof(uint8_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_ACTION:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_OLD_MANAGEMENT_OBJECT:
+            {
+                if (!bcmolt_epon_oam_ctc_old_management_object_base_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_MANAGEMENT_OBJECT:
+            {
+                if (!bcmolt_epon_oam_ctc_management_object_base_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_EXT_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_EXT_ACTION:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_KTATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_KTACTION:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_empty_var_container_base_end_count_unknown(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_eth_port_policing_config_base_pack(bcmolt_epon_oam_ctc_eth_port_policing_config_base *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_ctc_eth_port_policing_enable_pack(this->state, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->state)
+    {
+        case BCMOLT_EPON_OAM_CTC_ETH_PORT_POLICING_ENABLE_DISABLED:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ETH_PORT_POLICING_ENABLE_ENABLED:
+            {
+                if (!bcmolt_epon_oam_buf_write_u24(buf, this->u.enabled.cir))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u24(buf, this->u.enabled.bucket))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u24(buf, this->u.enabled.extra_burst))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+                if ((this->u.def.unknown_count > 0) && (this->u.def.unknown == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"unknown\" of struct \"bcmolt_epon_oam_ctc_eth_port_policing_config_base_def\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.def.unknown, this->u.def.unknown_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_eth_port_policing_config_base_get_packed_length(bcmolt_epon_oam_ctc_eth_port_policing_config_base *this)
+{
+    uint32_t count = 1;
+    switch (this->state)
+    {
+        case BCMOLT_EPON_OAM_CTC_ETH_PORT_POLICING_ENABLE_DISABLED:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ETH_PORT_POLICING_ENABLE_ENABLED:
+            {
+                count += 9;
+            }
+            break;
+        default:
+            {
+                count += this->u.def.unknown_count;
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_eth_port_policing_config_base_unpack(bcmolt_epon_oam_ctc_eth_port_policing_config_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_ctc_eth_port_policing_enable_unpack(&this->state, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->state)
+    {
+        case BCMOLT_EPON_OAM_CTC_ETH_PORT_POLICING_ENABLE_DISABLED:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ETH_PORT_POLICING_ENABLE_ENABLED:
+            {
+                if (!bcmolt_epon_oam_buf_read_u24(buf, &this->u.enabled.cir))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u24(buf, &this->u.enabled.bucket))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u24(buf, &this->u.enabled.extra_burst))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+                this->u.def.unknown_count = bcmolt_epon_oam_ctc_eth_port_policing_config_base_def_count_unknown(buf);
+                if ((this->u.def.unknown_count > 0) && (this->u.def.unknown == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"unknown\" of struct \"bcmolt_epon_oam_ctc_eth_port_policing_config_base_def\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.def.unknown = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.def.unknown_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.def.unknown, this->u.def.unknown_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_eth_port_policing_config_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_ctc_eth_port_policing_enable state;
+    if (!bcmolt_epon_oam_ctc_eth_port_policing_enable_unpack(&state, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (state)
+    {
+        case BCMOLT_EPON_OAM_CTC_ETH_PORT_POLICING_ENABLE_DISABLED:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ETH_PORT_POLICING_ENABLE_ENABLED:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 3))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 3))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 3))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+                uint32_t unknown_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                    {
+                        break;
+                    }
+
+                    unknown_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(unknown_elem_count * sizeof(uint8_t));
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_eth_port_policing_config_base_def_count_unknown(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_event_entry_pack(bcmolt_epon_oam_ctc_event_entry *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_ctc_leaf_management_object_pack(this->object_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->object_instance))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_ctc_onu_alarm_id_pack(this->alarm_id, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_event_entry_unpack(bcmolt_epon_oam_ctc_event_entry *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_ctc_leaf_management_object_unpack(&this->object_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->object_instance))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_ctc_onu_alarm_id_unpack(&this->alarm_id, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_event_entry_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 8);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_event_status_entry_pack(bcmolt_epon_oam_ctc_event_status_entry *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_ctc_event_entry_pack(&this->event_entry, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_ctc_event_status_pack(this->event_status, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_event_status_entry_unpack(bcmolt_epon_oam_ctc_event_status_entry *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_ctc_event_entry_unpack(&this->event_entry, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_ctc_event_status_unpack(&this->event_status, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_event_status_entry_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 12);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_event_threshold_entry_pack(bcmolt_epon_oam_ctc_event_threshold_entry *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_ctc_event_entry_pack(&this->event_entry, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->set_threshold))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->clear_threshold))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_event_threshold_entry_unpack(bcmolt_epon_oam_ctc_event_threshold_entry *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_ctc_event_entry_unpack(&this->event_entry, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->set_threshold))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->clear_threshold))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_event_threshold_entry_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 16);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_event_base_pack(bcmolt_epon_oam_ctc_event_base *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_ctc_event_sub_type_pack(this->sub_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->sub_type)
+    {
+        case BCMOLT_EPON_OAM_CTC_EVENT_SUB_TYPE_STATUS_REQUEST:
+            {
+                uint16_t i0;
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.status_request.entry_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.status_request.entry_count > 0) && (this->u.status_request.entries == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"entries\" of struct \"bcmolt_epon_oam_ctc_event_base_status_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i0 = 0; i0 < this->u.status_request.entry_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_ctc_event_entry_pack(&this->u.status_request.entries[i0], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_EVENT_SUB_TYPE_STATUS_SET:
+            {
+                uint16_t i1;
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.status_set.entry_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.status_set.entry_count > 0) && (this->u.status_set.entries == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"entries\" of struct \"bcmolt_epon_oam_ctc_event_base_status_set\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i1 = 0; i1 < this->u.status_set.entry_count; i1++)
+                {
+                    if (!bcmolt_epon_oam_ctc_event_status_entry_pack(&this->u.status_set.entries[i1], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_EVENT_SUB_TYPE_STATUS_RESPONSE:
+            {
+                uint16_t i2;
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.status_response.entry_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.status_response.entry_count > 0) && (this->u.status_response.entries == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"entries\" of struct \"bcmolt_epon_oam_ctc_event_base_status_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i2 = 0; i2 < this->u.status_response.entry_count; i2++)
+                {
+                    if (!bcmolt_epon_oam_ctc_event_status_entry_pack(&this->u.status_response.entries[i2], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_EVENT_SUB_TYPE_THRESHOLD_REQUEST:
+            {
+                uint16_t i3;
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.threshold_request.entry_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.threshold_request.entry_count > 0) && (this->u.threshold_request.entries == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"entries\" of struct \"bcmolt_epon_oam_ctc_event_base_threshold_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i3 = 0; i3 < this->u.threshold_request.entry_count; i3++)
+                {
+                    if (!bcmolt_epon_oam_ctc_event_entry_pack(&this->u.threshold_request.entries[i3], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_EVENT_SUB_TYPE_THRESHOLD_SET:
+            {
+                uint16_t i4;
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.threshold_set.entry_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.threshold_set.entry_count > 0) && (this->u.threshold_set.entries == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"entries\" of struct \"bcmolt_epon_oam_ctc_event_base_threshold_set\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i4 = 0; i4 < this->u.threshold_set.entry_count; i4++)
+                {
+                    if (!bcmolt_epon_oam_ctc_event_threshold_entry_pack(&this->u.threshold_set.entries[i4], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_EVENT_SUB_TYPE_THRESHOLD_RESPONSE:
+            {
+                uint16_t i5;
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.threshold_response.entry_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.threshold_response.entry_count > 0) && (this->u.threshold_response.entries == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"entries\" of struct \"bcmolt_epon_oam_ctc_event_base_threshold_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i5 = 0; i5 < this->u.threshold_response.entry_count; i5++)
+                {
+                    if (!bcmolt_epon_oam_ctc_event_threshold_entry_pack(&this->u.threshold_response.entries[i5], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_event_base_get_packed_length(bcmolt_epon_oam_ctc_event_base *this)
+{
+    uint32_t count = 1;
+    switch (this->sub_type)
+    {
+        case BCMOLT_EPON_OAM_CTC_EVENT_SUB_TYPE_STATUS_REQUEST:
+            {
+                count += 2 + (8 * this->u.status_request.entry_count);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_EVENT_SUB_TYPE_STATUS_SET:
+            {
+                count += 2 + (12 * this->u.status_set.entry_count);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_EVENT_SUB_TYPE_STATUS_RESPONSE:
+            {
+                count += 2 + (12 * this->u.status_response.entry_count);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_EVENT_SUB_TYPE_THRESHOLD_REQUEST:
+            {
+                count += 2 + (8 * this->u.threshold_request.entry_count);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_EVENT_SUB_TYPE_THRESHOLD_SET:
+            {
+                count += 2 + (16 * this->u.threshold_set.entry_count);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_EVENT_SUB_TYPE_THRESHOLD_RESPONSE:
+            {
+                count += 2 + (16 * this->u.threshold_response.entry_count);
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_event_base_unpack(bcmolt_epon_oam_ctc_event_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_ctc_event_sub_type_unpack(&this->sub_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->sub_type)
+    {
+        case BCMOLT_EPON_OAM_CTC_EVENT_SUB_TYPE_STATUS_REQUEST:
+            {
+                uint16_t i0;
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.status_request.entry_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.status_request.entry_count > 0) && (this->u.status_request.entries == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"entries\" of struct \"bcmolt_epon_oam_ctc_event_base_status_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.status_request.entries = (bcmolt_epon_oam_ctc_event_entry *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.status_request.entry_count * sizeof(bcmolt_epon_oam_ctc_event_entry));
+                    }
+                }
+
+                for (i0 = 0; i0 < this->u.status_request.entry_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_ctc_event_entry_unpack(&this->u.status_request.entries[i0], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_EVENT_SUB_TYPE_STATUS_SET:
+            {
+                uint16_t i1;
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.status_set.entry_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.status_set.entry_count > 0) && (this->u.status_set.entries == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"entries\" of struct \"bcmolt_epon_oam_ctc_event_base_status_set\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.status_set.entries = (bcmolt_epon_oam_ctc_event_status_entry *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.status_set.entry_count * sizeof(bcmolt_epon_oam_ctc_event_status_entry));
+                    }
+                }
+
+                for (i1 = 0; i1 < this->u.status_set.entry_count; i1++)
+                {
+                    if (!bcmolt_epon_oam_ctc_event_status_entry_unpack(&this->u.status_set.entries[i1], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_EVENT_SUB_TYPE_STATUS_RESPONSE:
+            {
+                uint16_t i2;
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.status_response.entry_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.status_response.entry_count > 0) && (this->u.status_response.entries == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"entries\" of struct \"bcmolt_epon_oam_ctc_event_base_status_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.status_response.entries = (bcmolt_epon_oam_ctc_event_status_entry *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.status_response.entry_count * sizeof(bcmolt_epon_oam_ctc_event_status_entry));
+                    }
+                }
+
+                for (i2 = 0; i2 < this->u.status_response.entry_count; i2++)
+                {
+                    if (!bcmolt_epon_oam_ctc_event_status_entry_unpack(&this->u.status_response.entries[i2], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_EVENT_SUB_TYPE_THRESHOLD_REQUEST:
+            {
+                uint16_t i3;
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.threshold_request.entry_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.threshold_request.entry_count > 0) && (this->u.threshold_request.entries == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"entries\" of struct \"bcmolt_epon_oam_ctc_event_base_threshold_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.threshold_request.entries = (bcmolt_epon_oam_ctc_event_entry *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.threshold_request.entry_count * sizeof(bcmolt_epon_oam_ctc_event_entry));
+                    }
+                }
+
+                for (i3 = 0; i3 < this->u.threshold_request.entry_count; i3++)
+                {
+                    if (!bcmolt_epon_oam_ctc_event_entry_unpack(&this->u.threshold_request.entries[i3], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_EVENT_SUB_TYPE_THRESHOLD_SET:
+            {
+                uint16_t i4;
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.threshold_set.entry_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.threshold_set.entry_count > 0) && (this->u.threshold_set.entries == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"entries\" of struct \"bcmolt_epon_oam_ctc_event_base_threshold_set\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.threshold_set.entries = (bcmolt_epon_oam_ctc_event_threshold_entry *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.threshold_set.entry_count * sizeof(bcmolt_epon_oam_ctc_event_threshold_entry));
+                    }
+                }
+
+                for (i4 = 0; i4 < this->u.threshold_set.entry_count; i4++)
+                {
+                    if (!bcmolt_epon_oam_ctc_event_threshold_entry_unpack(&this->u.threshold_set.entries[i4], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_EVENT_SUB_TYPE_THRESHOLD_RESPONSE:
+            {
+                uint16_t i5;
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.threshold_response.entry_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.threshold_response.entry_count > 0) && (this->u.threshold_response.entries == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"entries\" of struct \"bcmolt_epon_oam_ctc_event_base_threshold_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.threshold_response.entries = (bcmolt_epon_oam_ctc_event_threshold_entry *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.threshold_response.entry_count * sizeof(bcmolt_epon_oam_ctc_event_threshold_entry));
+                    }
+                }
+
+                for (i5 = 0; i5 < this->u.threshold_response.entry_count; i5++)
+                {
+                    if (!bcmolt_epon_oam_ctc_event_threshold_entry_unpack(&this->u.threshold_response.entries[i5], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_event_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_ctc_event_sub_type sub_type;
+    if (!bcmolt_epon_oam_ctc_event_sub_type_unpack(&sub_type, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (sub_type)
+    {
+        case BCMOLT_EPON_OAM_CTC_EVENT_SUB_TYPE_STATUS_REQUEST:
+            {
+                uint16_t entry_count;
+                if (!bcmolt_epon_oam_buf_read_u16(packed, &entry_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_ctc_event_entry) * entry_count);
+                if (!bcmolt_epon_oam_buf_skip(packed, entry_count * 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_EVENT_SUB_TYPE_STATUS_SET:
+            {
+                uint16_t entry_count;
+                if (!bcmolt_epon_oam_buf_read_u16(packed, &entry_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_ctc_event_status_entry) * entry_count);
+                if (!bcmolt_epon_oam_buf_skip(packed, entry_count * 12))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_EVENT_SUB_TYPE_STATUS_RESPONSE:
+            {
+                uint16_t entry_count;
+                if (!bcmolt_epon_oam_buf_read_u16(packed, &entry_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_ctc_event_status_entry) * entry_count);
+                if (!bcmolt_epon_oam_buf_skip(packed, entry_count * 12))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_EVENT_SUB_TYPE_THRESHOLD_REQUEST:
+            {
+                uint16_t entry_count;
+                if (!bcmolt_epon_oam_buf_read_u16(packed, &entry_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_ctc_event_entry) * entry_count);
+                if (!bcmolt_epon_oam_buf_skip(packed, entry_count * 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_EVENT_SUB_TYPE_THRESHOLD_SET:
+            {
+                uint16_t entry_count;
+                if (!bcmolt_epon_oam_buf_read_u16(packed, &entry_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_ctc_event_threshold_entry) * entry_count);
+                if (!bcmolt_epon_oam_buf_skip(packed, entry_count * 16))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_EVENT_SUB_TYPE_THRESHOLD_RESPONSE:
+            {
+                uint16_t entry_count;
+                if (!bcmolt_epon_oam_buf_read_u16(packed, &entry_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_ctc_event_threshold_entry) * entry_count);
+                if (!bcmolt_epon_oam_buf_skip(packed, entry_count * 16))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_ext_action_value_base_pack(bcmolt_epon_oam_ctc_ext_action_value_base *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_ctc_leaf_ext_action_pack(this->leaf, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->leaf)
+    {
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ACTION_RESET_ONU:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ACTION_FAST_LEAVE_ADMIN_CONTROL:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.fast_leave_admin_control.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.fast_leave_admin_control.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_activation_pack(this->u.fast_leave_admin_control.activate_fast_leave, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ACTION_MULTI_LLID_ADMIN_CONTROL:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.multi_llid_admin_control.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.multi_llid_admin_control.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.multi_llid_admin_control.num_llids))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ACTION_RESET_CARD:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ACTION_SLEEP_CONTROL:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.sleep_control.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.sleep_control.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.sleep_control.sleep_duration))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.sleep_control.wake_duration))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_sleep_flag_pack(this->u.sleep_control.sleep_flag, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_sleep_mode_pack(this->u.sleep_control.sleep_mode, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.def.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.def.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_ext_action_value_base_get_packed_length(bcmolt_epon_oam_ctc_ext_action_value_base *this)
+{
+    uint32_t count = 2;
+    switch (this->leaf)
+    {
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ACTION_RESET_ONU:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ACTION_FAST_LEAVE_ADMIN_CONTROL:
+            {
+                count += 5;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ACTION_MULTI_LLID_ADMIN_CONTROL:
+            {
+                count += 5;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ACTION_RESET_CARD:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ACTION_SLEEP_CONTROL:
+            {
+                count += 11;
+            }
+            break;
+        default:
+            {
+                count += 1;
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_ext_action_value_base_unpack(bcmolt_epon_oam_ctc_ext_action_value_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_ctc_leaf_ext_action_unpack(&this->leaf, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->leaf)
+    {
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ACTION_RESET_ONU:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ACTION_FAST_LEAVE_ADMIN_CONTROL:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.fast_leave_admin_control.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.fast_leave_admin_control.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.fast_leave_admin_control.width == 0) ? 0x0080 : this->u.fast_leave_admin_control.width, buf->curr);
+                if (!bcmolt_epon_oam_ctc_activation_unpack(&this->u.fast_leave_admin_control.activate_fast_leave, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.fast_leave_admin_control.width == 0) ? 0x0080 : this->u.fast_leave_admin_control.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ACTION_MULTI_LLID_ADMIN_CONTROL:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.multi_llid_admin_control.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.multi_llid_admin_control.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.multi_llid_admin_control.width == 0) ? 0x0080 : this->u.multi_llid_admin_control.width, buf->curr);
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.multi_llid_admin_control.num_llids))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.multi_llid_admin_control.width == 0) ? 0x0080 : this->u.multi_llid_admin_control.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ACTION_RESET_CARD:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ACTION_SLEEP_CONTROL:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.sleep_control.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.sleep_control.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.sleep_control.width == 0) ? 0x0080 : this->u.sleep_control.width, buf->curr);
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.sleep_control.sleep_duration))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.sleep_control.wake_duration))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_sleep_flag_unpack(&this->u.sleep_control.sleep_flag, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_sleep_mode_unpack(&this->u.sleep_control.sleep_mode, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.sleep_control.width == 0) ? 0x0080 : this->u.sleep_control.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.def.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.def.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.def.width == 0) ? 0x0080 : this->u.def.width, buf->curr);
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.def.width == 0) ? 0x0080 : this->u.def.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_ext_action_value_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_ctc_leaf_ext_action leaf;
+    if (!bcmolt_epon_oam_ctc_leaf_ext_action_unpack(&leaf, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (leaf)
+    {
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ACTION_RESET_ONU:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ACTION_FAST_LEAVE_ADMIN_CONTROL:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ACTION_MULTI_LLID_ADMIN_CONTROL:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ACTION_RESET_CARD:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ACTION_SLEEP_CONTROL:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_onu_service_sla_table_pack(bcmolt_epon_oam_ctc_onu_service_sla_table *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->queue_number))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->fixed_packet_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->fixed_bandwidth))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->guaranteed_bandwidth))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->best_effort_bandwidth))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->wrr_weight))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_onu_service_sla_table_unpack(bcmolt_epon_oam_ctc_onu_service_sla_table *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->queue_number))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->fixed_packet_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->fixed_bandwidth))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->guaranteed_bandwidth))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->best_effort_bandwidth))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->wrr_weight))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_onu_service_sla_table_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 10);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_onu_service_sla_base_pack(bcmolt_epon_oam_ctc_onu_service_sla_base *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_ctc_service_sla_operation_pack(this->operation_of_service_dba, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->operation_of_service_dba)
+    {
+        case BCMOLT_EPON_OAM_CTC_SERVICE_SLA_OPERATION_DEACTIVATE:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_SERVICE_SLA_OPERATION_ACTIVATE:
+            {
+                uint8_t i0;
+                if (!bcmolt_epon_oam_ctc_onu_dba_scheduling_scheme_pack(this->u.activate.scheme, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.activate.priority))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.activate.cycle_length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.activate.services_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.activate.services_count > 0) && (this->u.activate.services == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"services\" of struct \"bcmolt_epon_oam_ctc_onu_service_sla_base_activate\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i0 = 0; i0 < this->u.activate.services_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_ctc_onu_service_sla_table_pack(&this->u.activate.services[i0], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        default:
+            {
+                if ((this->u.def.services_count > 0) && (this->u.def.services == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"services\" of struct \"bcmolt_epon_oam_ctc_onu_service_sla_base_def\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.def.services, this->u.def.services_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_onu_service_sla_base_get_packed_length(bcmolt_epon_oam_ctc_onu_service_sla_base *this)
+{
+    uint32_t count = 1;
+    switch (this->operation_of_service_dba)
+    {
+        case BCMOLT_EPON_OAM_CTC_SERVICE_SLA_OPERATION_DEACTIVATE:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_SERVICE_SLA_OPERATION_ACTIVATE:
+            {
+                count += 7 + (10 * this->u.activate.services_count);
+            }
+            break;
+        default:
+            {
+                count += this->u.def.services_count;
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_onu_service_sla_base_unpack(bcmolt_epon_oam_ctc_onu_service_sla_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_ctc_service_sla_operation_unpack(&this->operation_of_service_dba, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->operation_of_service_dba)
+    {
+        case BCMOLT_EPON_OAM_CTC_SERVICE_SLA_OPERATION_DEACTIVATE:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_SERVICE_SLA_OPERATION_ACTIVATE:
+            {
+                uint8_t i0;
+                if (!bcmolt_epon_oam_ctc_onu_dba_scheduling_scheme_unpack(&this->u.activate.scheme, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.activate.priority))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(buf, &this->u.activate.cycle_length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.activate.services_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.activate.services_count > 0) && (this->u.activate.services == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"services\" of struct \"bcmolt_epon_oam_ctc_onu_service_sla_base_activate\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.activate.services = (bcmolt_epon_oam_ctc_onu_service_sla_table *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.activate.services_count * sizeof(bcmolt_epon_oam_ctc_onu_service_sla_table));
+                    }
+                }
+
+                for (i0 = 0; i0 < this->u.activate.services_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_ctc_onu_service_sla_table_unpack(&this->u.activate.services[i0], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        default:
+            {
+                this->u.def.services_count = bcmolt_epon_oam_ctc_onu_service_sla_base_def_count_services(buf);
+                if ((this->u.def.services_count > 0) && (this->u.def.services == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"services\" of struct \"bcmolt_epon_oam_ctc_onu_service_sla_base_def\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.def.services = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.def.services_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.def.services, this->u.def.services_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_onu_service_sla_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_ctc_service_sla_operation operation_of_service_dba;
+    if (!bcmolt_epon_oam_ctc_service_sla_operation_unpack(&operation_of_service_dba, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (operation_of_service_dba)
+    {
+        case BCMOLT_EPON_OAM_CTC_SERVICE_SLA_OPERATION_DEACTIVATE:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_SERVICE_SLA_OPERATION_ACTIVATE:
+            {
+                uint8_t services_count;
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &services_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_ctc_onu_service_sla_table) * services_count);
+                if (!bcmolt_epon_oam_buf_skip(packed, services_count * 10))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+                uint32_t services_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                    {
+                        break;
+                    }
+
+                    services_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(services_elem_count * sizeof(uint8_t));
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_onu_service_sla_base_def_count_services(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_onu_interface_pack(bcmolt_epon_oam_ctc_onu_interface *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_ctc_onu_interface_type_pack(this->type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->num_ports))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_onu_interface_unpack(bcmolt_epon_oam_ctc_onu_interface *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_ctc_onu_interface_type_unpack(&this->type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->num_ports))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_onu_interface_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 6);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_mxu_global_params_base_pack(bcmolt_epon_oam_ctc_mxu_global_params_base *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_ctc_mxu_global_params_width_pack(this->width, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->width)
+    {
+        case BCMOLT_EPON_OAM_CTC_MXU_GLOBAL_PARAMS_WIDTH_IPV4:
+            {
+                if (!bcmolt_epon_oam_buf_write_ipv4_address(buf, this->u.ipv4.onu_ipaddress))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_ipv4_address(buf, this->u.ipv4.onu_network_mask))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_ipv4_address(buf, this->u.ipv4.onu_default_gw))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.ipv4.data_cvlan))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.ipv4.data_svlan))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.ipv4.data_priority))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MXU_GLOBAL_PARAMS_WIDTH_IPV6:
+            {
+                if (!bcmolt_epon_oam_buf_write_ipv6_address(buf, this->u.ipv6.onu_ipaddress))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.ipv6.ipv6prefix_length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_ipv6_address(buf, this->u.ipv6.onu_default_gw))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.ipv6.data_cvlan))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.ipv6.data_svlan))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.ipv6.data_priority))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_mxu_global_params_base_get_packed_length(bcmolt_epon_oam_ctc_mxu_global_params_base *this)
+{
+    uint32_t count = 1;
+    switch (this->width)
+    {
+        case BCMOLT_EPON_OAM_CTC_MXU_GLOBAL_PARAMS_WIDTH_IPV4:
+            {
+                count += 17;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MXU_GLOBAL_PARAMS_WIDTH_IPV6:
+            {
+                count += 41;
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_mxu_global_params_base_unpack(bcmolt_epon_oam_ctc_mxu_global_params_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_ctc_mxu_global_params_width_unpack(&this->width, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->width)
+    {
+        case BCMOLT_EPON_OAM_CTC_MXU_GLOBAL_PARAMS_WIDTH_IPV4:
+            {
+                if (!bcmolt_epon_oam_buf_read_ipv4_address(buf, &this->u.ipv4.onu_ipaddress))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_ipv4_address(buf, &this->u.ipv4.onu_network_mask))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_ipv4_address(buf, &this->u.ipv4.onu_default_gw))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.ipv4.data_cvlan))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.ipv4.data_svlan))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.ipv4.data_priority))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MXU_GLOBAL_PARAMS_WIDTH_IPV6:
+            {
+                if (!bcmolt_epon_oam_buf_read_ipv6_address(buf, &this->u.ipv6.onu_ipaddress))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(buf, &this->u.ipv6.ipv6prefix_length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_ipv6_address(buf, &this->u.ipv6.onu_default_gw))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.ipv6.data_cvlan))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.ipv6.data_svlan))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.ipv6.data_priority))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_mxu_global_params_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_ctc_mxu_global_params_width width;
+    if (!bcmolt_epon_oam_ctc_mxu_global_params_width_unpack(&width, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (width)
+    {
+        case BCMOLT_EPON_OAM_CTC_MXU_GLOBAL_PARAMS_WIDTH_IPV4:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MXU_GLOBAL_PARAMS_WIDTH_IPV6:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_mxu_snmp_params_base_pack(bcmolt_epon_oam_ctc_mxu_snmp_params_base *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_ctc_mxu_snmp_params_width_pack(this->width, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->width)
+    {
+        case BCMOLT_EPON_OAM_CTC_MXU_SNMP_PARAMS_WIDTH_IPV4:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.ipv4.snmp_version))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_ipv4_address(buf, this->u.ipv4.trap_host_ip))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.ipv4.trap_port))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.ipv4.snmp_port))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.ipv4.security_name, 32))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.ipv4.community_for_read, 32))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.ipv4.community_for_write, 32))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MXU_SNMP_PARAMS_WIDTH_IPV6:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.ipv6.snmp_version))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_ipv6_address(buf, this->u.ipv6.trap_host_ip))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.ipv6.trap_port))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.ipv6.snmp_port))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.ipv6.security_name, 32))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.ipv6.community_for_read, 32))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.ipv6.community_for_write, 32))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_mxu_snmp_params_base_get_packed_length(bcmolt_epon_oam_ctc_mxu_snmp_params_base *this)
+{
+    uint32_t count = 1;
+    switch (this->width)
+    {
+        case BCMOLT_EPON_OAM_CTC_MXU_SNMP_PARAMS_WIDTH_IPV4:
+            {
+                count += 105;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MXU_SNMP_PARAMS_WIDTH_IPV6:
+            {
+                count += 117;
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_mxu_snmp_params_base_unpack(bcmolt_epon_oam_ctc_mxu_snmp_params_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_ctc_mxu_snmp_params_width_unpack(&this->width, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->width)
+    {
+        case BCMOLT_EPON_OAM_CTC_MXU_SNMP_PARAMS_WIDTH_IPV4:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.ipv4.snmp_version))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_ipv4_address(buf, &this->u.ipv4.trap_host_ip))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.ipv4.trap_port))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.ipv4.snmp_port))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.ipv4.security_name, 32))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.ipv4.community_for_read, 32))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.ipv4.community_for_write, 32))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MXU_SNMP_PARAMS_WIDTH_IPV6:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.ipv6.snmp_version))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_ipv6_address(buf, &this->u.ipv6.trap_host_ip))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.ipv6.trap_port))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.ipv6.snmp_port))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.ipv6.security_name, 32))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.ipv6.community_for_read, 32))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.ipv6.community_for_write, 32))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_mxu_snmp_params_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_ctc_mxu_snmp_params_width width;
+    if (!bcmolt_epon_oam_ctc_mxu_snmp_params_width_unpack(&width, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (width)
+    {
+        case BCMOLT_EPON_OAM_CTC_MXU_SNMP_PARAMS_WIDTH_IPV4:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 32))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 32))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 32))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MXU_SNMP_PARAMS_WIDTH_IPV6:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 32))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 32))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 32))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_vlan_element_pack(bcmolt_epon_oam_ctc_vlan_element *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->ether_type))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_vlan_tag(buf, this->vlan_tag))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_vlan_element_unpack(bcmolt_epon_oam_ctc_vlan_element *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->ether_type))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_vlan_tag(buf, &this->vlan_tag))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_vlan_element_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 4);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_vlan_translation_pack(bcmolt_epon_oam_ctc_vlan_translation *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_ctc_vlan_element_pack(&this->old_vlan, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_ctc_vlan_element_pack(&this->new_vlan, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_vlan_translation_unpack(bcmolt_epon_oam_ctc_vlan_translation *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_ctc_vlan_element_unpack(&this->old_vlan, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_ctc_vlan_element_unpack(&this->new_vlan, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_vlan_translation_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 8);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_vlan_aggregate_table_pack(bcmolt_epon_oam_ctc_vlan_aggregate_table *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t i0;
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->vlans_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_ctc_vlan_element_pack(&this->svlan, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->vlans_count > 0) && (this->vlans == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vlans\" of struct \"bcmolt_epon_oam_ctc_vlan_aggregate_table\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->vlans_count; i0++)
+    {
+        if (!bcmolt_epon_oam_ctc_vlan_element_pack(&this->vlans[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_vlan_aggregate_table_get_packed_length(bcmolt_epon_oam_ctc_vlan_aggregate_table *this)
+{
+    return 6 + (4 * this->vlans_count);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_vlan_aggregate_table_unpack(bcmolt_epon_oam_ctc_vlan_aggregate_table *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint16_t i0;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->vlans_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_ctc_vlan_element_unpack(&this->svlan, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->vlans_count > 0) && (this->vlans == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vlans\" of struct \"bcmolt_epon_oam_ctc_vlan_aggregate_table\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->vlans = (bcmolt_epon_oam_ctc_vlan_element *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->vlans_count * sizeof(bcmolt_epon_oam_ctc_vlan_element));
+        }
+    }
+
+    for (i0 = 0; i0 < this->vlans_count; i0++)
+    {
+        if (!bcmolt_epon_oam_ctc_vlan_element_unpack(&this->vlans[i0], buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_vlan_aggregate_table_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    uint16_t vlans_count;
+    if (!bcmolt_epon_oam_buf_read_u16(packed, &vlans_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_ctc_vlan_element) * vlans_count);
+    if (!bcmolt_epon_oam_buf_skip(packed, vlans_count * 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_vlan_prov_base_pack(bcmolt_epon_oam_ctc_vlan_prov_base *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_ctc_vlan_mode_pack(this->mode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->mode)
+    {
+        case BCMOLT_EPON_OAM_CTC_VLAN_MODE_TRANSPARENT:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_VLAN_MODE_TAG:
+            {
+                if (!bcmolt_epon_oam_ctc_vlan_element_pack(&this->u.tag.vlan, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_VLAN_MODE_TRANSLATION:
+            {
+                uint32_t i0;
+                if (!bcmolt_epon_oam_ctc_vlan_element_pack(&this->u.translation.default_vlan, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.translation.translations_count > 0) && (this->u.translation.translations == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"translations\" of struct \"bcmolt_epon_oam_ctc_vlan_prov_base_translation\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i0 = 0; i0 < this->u.translation.translations_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_ctc_vlan_translation_pack(&this->u.translation.translations[i0], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_VLAN_MODE_TRUNK:
+            {
+                uint32_t i1;
+                if (!bcmolt_epon_oam_ctc_vlan_element_pack(&this->u.trunk.default_vlan, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.trunk.permitted_vlans_count > 0) && (this->u.trunk.permitted_vlans == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"permitted_vlans\" of struct \"bcmolt_epon_oam_ctc_vlan_prov_base_trunk\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i1 = 0; i1 < this->u.trunk.permitted_vlans_count; i1++)
+                {
+                    if (!bcmolt_epon_oam_ctc_vlan_element_pack(&this->u.trunk.permitted_vlans[i1], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_VLAN_MODE_AGGREGATE:
+            {
+                uint16_t i2;
+                if (!bcmolt_epon_oam_ctc_vlan_element_pack(&this->u.aggregate.default_vlan, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.aggregate.tables_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.aggregate.tables_count > 0) && (this->u.aggregate.tables == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"tables\" of struct \"bcmolt_epon_oam_ctc_vlan_prov_base_aggregate\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i2 = 0; i2 < this->u.aggregate.tables_count; i2++)
+                {
+                    if (!bcmolt_epon_oam_ctc_vlan_aggregate_table_pack(&this->u.aggregate.tables[i2], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_VLAN_MODE_TRUNK_MDU:
+            {
+                uint32_t i3;
+                if ((this->u.trunk_mdu.permitted_vlans_count > 0) && (this->u.trunk_mdu.permitted_vlans == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"permitted_vlans\" of struct \"bcmolt_epon_oam_ctc_vlan_prov_base_trunk_mdu\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i3 = 0; i3 < this->u.trunk_mdu.permitted_vlans_count; i3++)
+                {
+                    if (!bcmolt_epon_oam_ctc_vlan_element_pack(&this->u.trunk_mdu.permitted_vlans[i3], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_VLAN_MODE_HYBRID:
+            {
+                uint32_t i4;
+                if (!bcmolt_epon_oam_ctc_vlan_element_pack(&this->u.hybrid.default_vlan, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.hybrid.permitted_vlans_count > 0) && (this->u.hybrid.permitted_vlans == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"permitted_vlans\" of struct \"bcmolt_epon_oam_ctc_vlan_prov_base_hybrid\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i4 = 0; i4 < this->u.hybrid.permitted_vlans_count; i4++)
+                {
+                    if (!bcmolt_epon_oam_ctc_vlan_element_pack(&this->u.hybrid.permitted_vlans[i4], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_VLAN_MODE_SPECIAL_TRANSPARENT:
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_vlan_prov_base_get_packed_length(bcmolt_epon_oam_ctc_vlan_prov_base *this)
+{
+    uint32_t count = 1;
+    switch (this->mode)
+    {
+        case BCMOLT_EPON_OAM_CTC_VLAN_MODE_TRANSPARENT:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_VLAN_MODE_TAG:
+            {
+                count += 4;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_VLAN_MODE_TRANSLATION:
+            {
+                count += 4 + (8 * this->u.translation.translations_count);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_VLAN_MODE_TRUNK:
+            {
+                count += 4 + (4 * this->u.trunk.permitted_vlans_count);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_VLAN_MODE_AGGREGATE:
+            {
+                uint32_t i0;
+                count += 6;
+                if ((this->u.aggregate.tables_count > 0) && (this->u.aggregate.tables == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"tables_count\" of struct \"bcmolt_epon_oam_ctc_vlan_prov_base\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return 0;
+                }
+
+                for (i0 = 0; i0 < this->u.aggregate.tables_count; i0++)
+                {
+                    count += bcmolt_epon_oam_ctc_vlan_aggregate_table_get_packed_length(&this->u.aggregate.tables[i0]);
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_VLAN_MODE_TRUNK_MDU:
+            {
+                count += (4 * this->u.trunk_mdu.permitted_vlans_count);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_VLAN_MODE_HYBRID:
+            {
+                count += 4 + (4 * this->u.hybrid.permitted_vlans_count);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_VLAN_MODE_SPECIAL_TRANSPARENT:
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_vlan_prov_base_unpack(bcmolt_epon_oam_ctc_vlan_prov_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_ctc_vlan_mode_unpack(&this->mode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->mode)
+    {
+        case BCMOLT_EPON_OAM_CTC_VLAN_MODE_TRANSPARENT:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_VLAN_MODE_TAG:
+            {
+                if (!bcmolt_epon_oam_ctc_vlan_element_unpack(&this->u.tag.vlan, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_VLAN_MODE_TRANSLATION:
+            {
+                uint32_t i0;
+                if (!bcmolt_epon_oam_ctc_vlan_element_unpack(&this->u.translation.default_vlan, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                this->u.translation.translations_count = bcmolt_epon_oam_ctc_vlan_prov_base_translation_count_translations(buf);
+                if ((this->u.translation.translations_count > 0) && (this->u.translation.translations == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"translations\" of struct \"bcmolt_epon_oam_ctc_vlan_prov_base_translation\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.translation.translations = (bcmolt_epon_oam_ctc_vlan_translation *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.translation.translations_count * sizeof(bcmolt_epon_oam_ctc_vlan_translation));
+                    }
+                }
+
+                for (i0 = 0; i0 < this->u.translation.translations_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_ctc_vlan_translation_unpack(&this->u.translation.translations[i0], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_VLAN_MODE_TRUNK:
+            {
+                uint32_t i1;
+                if (!bcmolt_epon_oam_ctc_vlan_element_unpack(&this->u.trunk.default_vlan, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                this->u.trunk.permitted_vlans_count = bcmolt_epon_oam_ctc_vlan_prov_base_trunk_count_permitted_vlans(buf);
+                if ((this->u.trunk.permitted_vlans_count > 0) && (this->u.trunk.permitted_vlans == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"permitted_vlans\" of struct \"bcmolt_epon_oam_ctc_vlan_prov_base_trunk\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.trunk.permitted_vlans = (bcmolt_epon_oam_ctc_vlan_element *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.trunk.permitted_vlans_count * sizeof(bcmolt_epon_oam_ctc_vlan_element));
+                    }
+                }
+
+                for (i1 = 0; i1 < this->u.trunk.permitted_vlans_count; i1++)
+                {
+                    if (!bcmolt_epon_oam_ctc_vlan_element_unpack(&this->u.trunk.permitted_vlans[i1], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_VLAN_MODE_AGGREGATE:
+            {
+                uint16_t i2;
+                if (!bcmolt_epon_oam_ctc_vlan_element_unpack(&this->u.aggregate.default_vlan, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.aggregate.tables_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.aggregate.tables_count > 0) && (this->u.aggregate.tables == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"tables\" of struct \"bcmolt_epon_oam_ctc_vlan_prov_base_aggregate\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.aggregate.tables = (bcmolt_epon_oam_ctc_vlan_aggregate_table *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.aggregate.tables_count * sizeof(bcmolt_epon_oam_ctc_vlan_aggregate_table));
+                    }
+                }
+
+                for (i2 = 0; i2 < this->u.aggregate.tables_count; i2++)
+                {
+                    if (!bcmolt_epon_oam_ctc_vlan_aggregate_table_unpack(&this->u.aggregate.tables[i2], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_VLAN_MODE_TRUNK_MDU:
+            {
+                uint32_t i3;
+                this->u.trunk_mdu.permitted_vlans_count = bcmolt_epon_oam_ctc_vlan_prov_base_trunk_mdu_count_permitted_vlans(buf);
+                if ((this->u.trunk_mdu.permitted_vlans_count > 0) && (this->u.trunk_mdu.permitted_vlans == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"permitted_vlans\" of struct \"bcmolt_epon_oam_ctc_vlan_prov_base_trunk_mdu\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.trunk_mdu.permitted_vlans = (bcmolt_epon_oam_ctc_vlan_element *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.trunk_mdu.permitted_vlans_count * sizeof(bcmolt_epon_oam_ctc_vlan_element));
+                    }
+                }
+
+                for (i3 = 0; i3 < this->u.trunk_mdu.permitted_vlans_count; i3++)
+                {
+                    if (!bcmolt_epon_oam_ctc_vlan_element_unpack(&this->u.trunk_mdu.permitted_vlans[i3], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_VLAN_MODE_HYBRID:
+            {
+                uint32_t i4;
+                if (!bcmolt_epon_oam_ctc_vlan_element_unpack(&this->u.hybrid.default_vlan, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                this->u.hybrid.permitted_vlans_count = bcmolt_epon_oam_ctc_vlan_prov_base_hybrid_count_permitted_vlans(buf);
+                if ((this->u.hybrid.permitted_vlans_count > 0) && (this->u.hybrid.permitted_vlans == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"permitted_vlans\" of struct \"bcmolt_epon_oam_ctc_vlan_prov_base_hybrid\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.hybrid.permitted_vlans = (bcmolt_epon_oam_ctc_vlan_element *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.hybrid.permitted_vlans_count * sizeof(bcmolt_epon_oam_ctc_vlan_element));
+                    }
+                }
+
+                for (i4 = 0; i4 < this->u.hybrid.permitted_vlans_count; i4++)
+                {
+                    if (!bcmolt_epon_oam_ctc_vlan_element_unpack(&this->u.hybrid.permitted_vlans[i4], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_VLAN_MODE_SPECIAL_TRANSPARENT:
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_vlan_prov_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_ctc_vlan_mode mode;
+    if (!bcmolt_epon_oam_ctc_vlan_mode_unpack(&mode, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (mode)
+    {
+        case BCMOLT_EPON_OAM_CTC_VLAN_MODE_TRANSPARENT:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_VLAN_MODE_TAG:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_VLAN_MODE_TRANSLATION:
+            {
+                uint32_t translations_elem_count = 0;
+                if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(packed, 8))
+                    {
+                        break;
+                    }
+
+                    translations_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(translations_elem_count * sizeof(bcmolt_epon_oam_ctc_vlan_translation));
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_VLAN_MODE_TRUNK:
+            {
+                uint32_t permitted_vlans_elem_count = 0;
+                if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                    {
+                        break;
+                    }
+
+                    permitted_vlans_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(permitted_vlans_elem_count * sizeof(bcmolt_epon_oam_ctc_vlan_element));
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_VLAN_MODE_AGGREGATE:
+            {
+                uint16_t tables_count;
+                uint16_t i0;
+                if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(packed, &tables_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_ctc_vlan_aggregate_table) * tables_count);
+                for (i0 = 0; i0 < tables_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_ctc_vlan_aggregate_table_scan(packed, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_VLAN_MODE_TRUNK_MDU:
+            {
+                uint32_t permitted_vlans_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                    {
+                        break;
+                    }
+
+                    permitted_vlans_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(permitted_vlans_elem_count * sizeof(bcmolt_epon_oam_ctc_vlan_element));
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_VLAN_MODE_HYBRID:
+            {
+                uint32_t permitted_vlans_elem_count = 0;
+                if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                    {
+                        break;
+                    }
+
+                    permitted_vlans_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(permitted_vlans_elem_count * sizeof(bcmolt_epon_oam_ctc_vlan_element));
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_VLAN_MODE_SPECIAL_TRANSPARENT:
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_vlan_prov_base_translation_count_translations(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 8);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_vlan_prov_base_trunk_count_permitted_vlans(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 4);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_vlan_prov_base_trunk_mdu_count_permitted_vlans(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 4);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_vlan_prov_base_hybrid_count_permitted_vlans(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 4);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_onu_classif_clause_base_pack(bcmolt_epon_oam_ctc_onu_classif_clause_base *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_ctc_onu_classif_field_pack(this->field, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->field)
+    {
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_DA:
+            {
+                if (!bcmolt_epon_oam_buf_write_mac_address(buf, this->u.da.val))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_classif_operator_pack(this->u.da.op, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_SA:
+            {
+                if (!bcmolt_epon_oam_buf_write_mac_address(buf, this->u.sa.val))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_classif_operator_pack(this->u.sa.op, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_VLAN_PRI:
+            {
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.vlan_pri.reserved, 5))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.vlan_pri.val))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_classif_operator_pack(this->u.vlan_pri.op, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_VLAN_ID:
+            {
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.vlan_id.reserved, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.vlan_id.val))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_classif_operator_pack(this->u.vlan_id.op, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_ETH_TYPE:
+            {
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.eth_type.reserved, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.eth_type.val))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_classif_operator_pack(this->u.eth_type.op, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_DEST_IP:
+            {
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.dest_ip.reserved, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_ipv4_address(buf, this->u.dest_ip.val))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_classif_operator_pack(this->u.dest_ip.op, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_SOURCE_IP:
+            {
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.source_ip.reserved, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_ipv4_address(buf, this->u.source_ip.val))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_classif_operator_pack(this->u.source_ip.op, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_IP_TYPE:
+            {
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.ip_type.reserved, 5))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.ip_type.val))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_classif_operator_pack(this->u.ip_type.op, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_IP_TOS:
+            {
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.ip_tos.reserved, 5))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.ip_tos.val))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_classif_operator_pack(this->u.ip_tos.op, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_IP_PREC:
+            {
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.ip_prec.reserved, 5))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.ip_prec.val))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_classif_operator_pack(this->u.ip_prec.op, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_SOURCE_PORT:
+            {
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.source_port.reserved, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.source_port.val))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_classif_operator_pack(this->u.source_port.op, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_DEST_PORT:
+            {
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.dest_port.reserved, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.dest_port.val))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_classif_operator_pack(this->u.dest_port.op, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_IP_VER:
+            {
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.ip_ver.reserved, 15))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.ip_ver.val))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_classif_operator_pack(this->u.ip_ver.op, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_IP_FLOW_LABEL:
+            {
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.ip_flow_label.reserved, 12))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.ip_flow_label.val))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_classif_operator_pack(this->u.ip_flow_label.op, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_DST_IPV6:
+            {
+                if (!bcmolt_epon_oam_buf_write_ipv6_address(buf, this->u.dst_ipv6.val))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_classif_operator_pack(this->u.dst_ipv6.op, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_SRC_IPV6:
+            {
+                if (!bcmolt_epon_oam_buf_write_ipv6_address(buf, this->u.src_ipv6.val))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_classif_operator_pack(this->u.src_ipv6.op, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_DST_IPV6PRE:
+            {
+                if (!bcmolt_epon_oam_buf_write_ipv6_address(buf, this->u.dst_ipv6pre.val))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_classif_operator_pack(this->u.dst_ipv6pre.op, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_SRC_IPV6PRE:
+            {
+                if (!bcmolt_epon_oam_buf_write_ipv6_address(buf, this->u.src_ipv6pre.val))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_classif_operator_pack(this->u.src_ipv6pre.op, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_NXT_HDR:
+            {
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.nxt_hdr.reserved, 15))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.nxt_hdr.val))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_classif_operator_pack(this->u.nxt_hdr.op, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.def.val, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_classif_operator_pack(this->u.def.op, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_onu_classif_clause_base_get_packed_length(bcmolt_epon_oam_ctc_onu_classif_clause_base *this)
+{
+    uint32_t count = 1;
+    switch (this->field)
+    {
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_DA:
+            {
+                count += 7;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_SA:
+            {
+                count += 7;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_VLAN_PRI:
+            {
+                count += 7;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_VLAN_ID:
+            {
+                count += 7;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_ETH_TYPE:
+            {
+                count += 7;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_DEST_IP:
+            {
+                count += 7;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_SOURCE_IP:
+            {
+                count += 7;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_IP_TYPE:
+            {
+                count += 7;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_IP_TOS:
+            {
+                count += 7;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_IP_PREC:
+            {
+                count += 7;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_SOURCE_PORT:
+            {
+                count += 7;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_DEST_PORT:
+            {
+                count += 7;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_IP_VER:
+            {
+                count += 17;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_IP_FLOW_LABEL:
+            {
+                count += 17;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_DST_IPV6:
+            {
+                count += 17;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_SRC_IPV6:
+            {
+                count += 17;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_DST_IPV6PRE:
+            {
+                count += 17;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_SRC_IPV6PRE:
+            {
+                count += 17;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_NXT_HDR:
+            {
+                count += 17;
+            }
+            break;
+        default:
+            {
+                count += 17;
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_onu_classif_clause_base_unpack(bcmolt_epon_oam_ctc_onu_classif_clause_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_ctc_onu_classif_field_unpack(&this->field, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->field)
+    {
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_DA:
+            {
+                if (!bcmolt_epon_oam_buf_read_mac_address(buf, &this->u.da.val))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_classif_operator_unpack(&this->u.da.op, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_SA:
+            {
+                if (!bcmolt_epon_oam_buf_read_mac_address(buf, &this->u.sa.val))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_classif_operator_unpack(&this->u.sa.op, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_VLAN_PRI:
+            {
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.vlan_pri.reserved, 5))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.vlan_pri.val))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_classif_operator_unpack(&this->u.vlan_pri.op, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_VLAN_ID:
+            {
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.vlan_id.reserved, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.vlan_id.val))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_classif_operator_unpack(&this->u.vlan_id.op, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_ETH_TYPE:
+            {
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.eth_type.reserved, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.eth_type.val))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_classif_operator_unpack(&this->u.eth_type.op, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_DEST_IP:
+            {
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.dest_ip.reserved, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_ipv4_address(buf, &this->u.dest_ip.val))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_classif_operator_unpack(&this->u.dest_ip.op, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_SOURCE_IP:
+            {
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.source_ip.reserved, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_ipv4_address(buf, &this->u.source_ip.val))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_classif_operator_unpack(&this->u.source_ip.op, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_IP_TYPE:
+            {
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.ip_type.reserved, 5))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.ip_type.val))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_classif_operator_unpack(&this->u.ip_type.op, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_IP_TOS:
+            {
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.ip_tos.reserved, 5))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.ip_tos.val))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_classif_operator_unpack(&this->u.ip_tos.op, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_IP_PREC:
+            {
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.ip_prec.reserved, 5))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.ip_prec.val))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_classif_operator_unpack(&this->u.ip_prec.op, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_SOURCE_PORT:
+            {
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.source_port.reserved, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.source_port.val))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_classif_operator_unpack(&this->u.source_port.op, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_DEST_PORT:
+            {
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.dest_port.reserved, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.dest_port.val))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_classif_operator_unpack(&this->u.dest_port.op, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_IP_VER:
+            {
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.ip_ver.reserved, 15))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.ip_ver.val))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_classif_operator_unpack(&this->u.ip_ver.op, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_IP_FLOW_LABEL:
+            {
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.ip_flow_label.reserved, 12))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(buf, &this->u.ip_flow_label.val))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_classif_operator_unpack(&this->u.ip_flow_label.op, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_DST_IPV6:
+            {
+                if (!bcmolt_epon_oam_buf_read_ipv6_address(buf, &this->u.dst_ipv6.val))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_classif_operator_unpack(&this->u.dst_ipv6.op, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_SRC_IPV6:
+            {
+                if (!bcmolt_epon_oam_buf_read_ipv6_address(buf, &this->u.src_ipv6.val))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_classif_operator_unpack(&this->u.src_ipv6.op, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_DST_IPV6PRE:
+            {
+                if (!bcmolt_epon_oam_buf_read_ipv6_address(buf, &this->u.dst_ipv6pre.val))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_classif_operator_unpack(&this->u.dst_ipv6pre.op, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_SRC_IPV6PRE:
+            {
+                if (!bcmolt_epon_oam_buf_read_ipv6_address(buf, &this->u.src_ipv6pre.val))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_classif_operator_unpack(&this->u.src_ipv6pre.op, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_NXT_HDR:
+            {
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.nxt_hdr.reserved, 15))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.nxt_hdr.val))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_classif_operator_unpack(&this->u.nxt_hdr.op, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.def.val, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_classif_operator_unpack(&this->u.def.op, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_onu_classif_clause_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_ctc_onu_classif_field field;
+    if (!bcmolt_epon_oam_ctc_onu_classif_field_unpack(&field, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (field)
+    {
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_DA:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 6))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_SA:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 6))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_VLAN_PRI:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 5))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_VLAN_ID:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_ETH_TYPE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_DEST_IP:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_SOURCE_IP:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_IP_TYPE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 5))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_IP_TOS:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 5))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_IP_PREC:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 5))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_SOURCE_PORT:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_DEST_PORT:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_IP_VER:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 15))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_IP_FLOW_LABEL:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 12))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_DST_IPV6:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_SRC_IPV6:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_DST_IPV6PRE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_SRC_IPV6PRE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_NXT_HDR:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 15))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_rule_pack(bcmolt_epon_oam_ctc_rule *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t preLenFieldPos;
+    uint32_t bytesAfterLenField;
+    uint8_t i0;
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->precedence))
+    {
+        return BCMOS_FALSE;
+    }
+
+    preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+    /* skip over length field (we'll fill it in later) */
+    if (!bcmolt_epon_oam_buf_skip(buf, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->queue))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->pri_marking))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->clauses_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->clauses_count > 0) && (this->clauses == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"clauses\" of struct \"bcmolt_epon_oam_ctc_rule\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->clauses_count; i0++)
+    {
+        if (!bcmolt_epon_oam_ctc_onu_classif_clause_base_pack(&this->clauses[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+    if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, bytesAfterLenField))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_rule_get_packed_length(bcmolt_epon_oam_ctc_rule *this)
+{
+    uint32_t count = 5;
+    uint32_t i0;
+    if ((this->clauses_count > 0) && (this->clauses == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"clauses_count\" of struct \"bcmolt_epon_oam_ctc_rule\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return 0;
+    }
+
+    for (i0 = 0; i0 < this->clauses_count; i0++)
+    {
+        count += bcmolt_epon_oam_ctc_onu_classif_clause_base_get_packed_length(&this->clauses[i0]);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_rule_unpack(bcmolt_epon_oam_ctc_rule *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint8_t length = 0;
+    bcmolt_epon_oam_buf postLenBuf;
+    uint8_t i0;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->precedence))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, buf->curr);
+    if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->queue))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->pri_marking))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->clauses_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->clauses_count > 0) && (this->clauses == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"clauses\" of struct \"bcmolt_epon_oam_ctc_rule\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->clauses = (bcmolt_epon_oam_ctc_onu_classif_clause_base *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->clauses_count * sizeof(bcmolt_epon_oam_ctc_onu_classif_clause_base));
+        }
+    }
+
+    for (i0 = 0; i0 < this->clauses_count; i0++)
+    {
+        if (!bcmolt_epon_oam_ctc_onu_classif_clause_base_unpack(&this->clauses[i0], &postLenBuf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(buf, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_rule_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_buf postLenBuf;
+    uint8_t length;
+    uint8_t clauses_count;
+    uint8_t i0;
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, packed->curr);
+    if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &clauses_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_ctc_onu_classif_clause_base) * clauses_count);
+    for (i0 = 0; i0 < clauses_count; i0++)
+    {
+        if (!bcmolt_epon_oam_ctc_onu_classif_clause_base_scan(&postLenBuf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_multicast_vlan_prov_pack(bcmolt_epon_oam_ctc_multicast_vlan_prov *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_ctc_multicast_vlan_operation_pack(this->operation, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->operation)
+    {
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_VLAN_OPERATION_DELETE:
+            {
+                uint32_t i0;
+                if ((this->u.delete.multicast_vlans_count > 0) && (this->u.delete.multicast_vlans == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"multicast_vlans\" of struct \"bcmolt_epon_oam_ctc_multicast_vlan_prov_delete\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i0 = 0; i0 < this->u.delete.multicast_vlans_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_buf_write_vlan_tag(buf, this->u.delete.multicast_vlans[i0]))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_VLAN_OPERATION_ADD:
+            {
+                uint32_t i1;
+                if ((this->u.add.multicast_vlans_count > 0) && (this->u.add.multicast_vlans == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"multicast_vlans\" of struct \"bcmolt_epon_oam_ctc_multicast_vlan_prov_add\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i1 = 0; i1 < this->u.add.multicast_vlans_count; i1++)
+                {
+                    if (!bcmolt_epon_oam_buf_write_vlan_tag(buf, this->u.add.multicast_vlans[i1]))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_VLAN_OPERATION_CLEAR:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_VLAN_OPERATION_LIST:
+            {
+                uint32_t i2;
+                if ((this->u.list.multicast_vlans_count > 0) && (this->u.list.multicast_vlans == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"multicast_vlans\" of struct \"bcmolt_epon_oam_ctc_multicast_vlan_prov_list\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i2 = 0; i2 < this->u.list.multicast_vlans_count; i2++)
+                {
+                    if (!bcmolt_epon_oam_buf_write_vlan_tag(buf, this->u.list.multicast_vlans[i2]))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_multicast_vlan_prov_get_packed_length(bcmolt_epon_oam_ctc_multicast_vlan_prov *this)
+{
+    uint32_t count = 1;
+    switch (this->operation)
+    {
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_VLAN_OPERATION_DELETE:
+            {
+                count += (2 * this->u.delete.multicast_vlans_count);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_VLAN_OPERATION_ADD:
+            {
+                count += (2 * this->u.add.multicast_vlans_count);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_VLAN_OPERATION_CLEAR:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_VLAN_OPERATION_LIST:
+            {
+                count += (2 * this->u.list.multicast_vlans_count);
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_multicast_vlan_prov_unpack(bcmolt_epon_oam_ctc_multicast_vlan_prov *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_ctc_multicast_vlan_operation_unpack(&this->operation, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->operation)
+    {
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_VLAN_OPERATION_DELETE:
+            {
+                uint32_t i0;
+                this->u.delete.multicast_vlans_count = bcmolt_epon_oam_ctc_multicast_vlan_prov_delete_count_multicast_vlans(buf);
+                if ((this->u.delete.multicast_vlans_count > 0) && (this->u.delete.multicast_vlans == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"multicast_vlans\" of struct \"bcmolt_epon_oam_ctc_multicast_vlan_prov_delete\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.delete.multicast_vlans = (bcmos_vlan_tag *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.delete.multicast_vlans_count * sizeof(bcmos_vlan_tag));
+                    }
+                }
+
+                for (i0 = 0; i0 < this->u.delete.multicast_vlans_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_buf_read_vlan_tag(buf, &this->u.delete.multicast_vlans[i0]))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_VLAN_OPERATION_ADD:
+            {
+                uint32_t i1;
+                this->u.add.multicast_vlans_count = bcmolt_epon_oam_ctc_multicast_vlan_prov_add_count_multicast_vlans(buf);
+                if ((this->u.add.multicast_vlans_count > 0) && (this->u.add.multicast_vlans == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"multicast_vlans\" of struct \"bcmolt_epon_oam_ctc_multicast_vlan_prov_add\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.add.multicast_vlans = (bcmos_vlan_tag *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.add.multicast_vlans_count * sizeof(bcmos_vlan_tag));
+                    }
+                }
+
+                for (i1 = 0; i1 < this->u.add.multicast_vlans_count; i1++)
+                {
+                    if (!bcmolt_epon_oam_buf_read_vlan_tag(buf, &this->u.add.multicast_vlans[i1]))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_VLAN_OPERATION_CLEAR:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_VLAN_OPERATION_LIST:
+            {
+                uint32_t i2;
+                this->u.list.multicast_vlans_count = bcmolt_epon_oam_ctc_multicast_vlan_prov_list_count_multicast_vlans(buf);
+                if ((this->u.list.multicast_vlans_count > 0) && (this->u.list.multicast_vlans == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"multicast_vlans\" of struct \"bcmolt_epon_oam_ctc_multicast_vlan_prov_list\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.list.multicast_vlans = (bcmos_vlan_tag *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.list.multicast_vlans_count * sizeof(bcmos_vlan_tag));
+                    }
+                }
+
+                for (i2 = 0; i2 < this->u.list.multicast_vlans_count; i2++)
+                {
+                    if (!bcmolt_epon_oam_buf_read_vlan_tag(buf, &this->u.list.multicast_vlans[i2]))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_multicast_vlan_prov_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_ctc_multicast_vlan_operation operation;
+    if (!bcmolt_epon_oam_ctc_multicast_vlan_operation_unpack(&operation, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (operation)
+    {
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_VLAN_OPERATION_DELETE:
+            {
+                uint32_t multicast_vlans_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                    {
+                        break;
+                    }
+
+                    multicast_vlans_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(multicast_vlans_elem_count * sizeof(bcmos_vlan_tag));
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_VLAN_OPERATION_ADD:
+            {
+                uint32_t multicast_vlans_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                    {
+                        break;
+                    }
+
+                    multicast_vlans_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(multicast_vlans_elem_count * sizeof(bcmos_vlan_tag));
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_VLAN_OPERATION_CLEAR:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_VLAN_OPERATION_LIST:
+            {
+                uint32_t multicast_vlans_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                    {
+                        break;
+                    }
+
+                    multicast_vlans_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(multicast_vlans_elem_count * sizeof(bcmos_vlan_tag));
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_multicast_vlan_prov_delete_count_multicast_vlans(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 2);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_multicast_vlan_prov_add_count_multicast_vlans(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 2);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_multicast_vlan_prov_list_count_multicast_vlans(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 2);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_iptv_vlan_entry_pack(bcmolt_epon_oam_ctc_iptv_vlan_entry *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_vlan_tag(buf, this->multicast_vlan))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_vlan_tag(buf, this->iptv_user_vlan))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_iptv_vlan_entry_unpack(bcmolt_epon_oam_ctc_iptv_vlan_entry *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_vlan_tag(buf, &this->multicast_vlan))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_vlan_tag(buf, &this->iptv_user_vlan))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_iptv_vlan_entry_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 4);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_multicast_tag_operation_base_pack(bcmolt_epon_oam_ctc_multicast_tag_operation_base *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_ctc_multicast_tag_mode_pack(this->tag_mode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->tag_mode)
+    {
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_TAG_MODE_DO_NOT_STRIP:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_TAG_MODE_STRIP_DATA_QUERY:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_TAG_MODE_STRIP_DATA_QUERY_IPTV:
+            {
+                uint8_t i0;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.strip_data_query_iptv.multicast_vlans_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.strip_data_query_iptv.multicast_vlans_count > 0) && (this->u.strip_data_query_iptv.multicast_vlans == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"multicast_vlans\" of struct \"bcmolt_epon_oam_ctc_multicast_tag_operation_base_strip_data_query_iptv\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i0 = 0; i0 < this->u.strip_data_query_iptv.multicast_vlans_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_ctc_iptv_vlan_entry_pack(&this->u.strip_data_query_iptv.multicast_vlans[i0], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_multicast_tag_operation_base_get_packed_length(bcmolt_epon_oam_ctc_multicast_tag_operation_base *this)
+{
+    uint32_t count = 1;
+    switch (this->tag_mode)
+    {
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_TAG_MODE_DO_NOT_STRIP:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_TAG_MODE_STRIP_DATA_QUERY:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_TAG_MODE_STRIP_DATA_QUERY_IPTV:
+            {
+                count += 1 + (4 * this->u.strip_data_query_iptv.multicast_vlans_count);
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_multicast_tag_operation_base_unpack(bcmolt_epon_oam_ctc_multicast_tag_operation_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_ctc_multicast_tag_mode_unpack(&this->tag_mode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->tag_mode)
+    {
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_TAG_MODE_DO_NOT_STRIP:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_TAG_MODE_STRIP_DATA_QUERY:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_TAG_MODE_STRIP_DATA_QUERY_IPTV:
+            {
+                uint8_t i0;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.strip_data_query_iptv.multicast_vlans_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.strip_data_query_iptv.multicast_vlans_count > 0) && (this->u.strip_data_query_iptv.multicast_vlans == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"multicast_vlans\" of struct \"bcmolt_epon_oam_ctc_multicast_tag_operation_base_strip_data_query_iptv\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.strip_data_query_iptv.multicast_vlans = (bcmolt_epon_oam_ctc_iptv_vlan_entry *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.strip_data_query_iptv.multicast_vlans_count * sizeof(bcmolt_epon_oam_ctc_iptv_vlan_entry));
+                    }
+                }
+
+                for (i0 = 0; i0 < this->u.strip_data_query_iptv.multicast_vlans_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_ctc_iptv_vlan_entry_unpack(&this->u.strip_data_query_iptv.multicast_vlans[i0], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_multicast_tag_operation_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_ctc_multicast_tag_mode tag_mode;
+    if (!bcmolt_epon_oam_ctc_multicast_tag_mode_unpack(&tag_mode, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (tag_mode)
+    {
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_TAG_MODE_DO_NOT_STRIP:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_TAG_MODE_STRIP_DATA_QUERY:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_TAG_MODE_STRIP_DATA_QUERY_IPTV:
+            {
+                uint8_t multicast_vlans_count;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &multicast_vlans_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_ctc_iptv_vlan_entry) * multicast_vlans_count);
+                if (!bcmolt_epon_oam_buf_skip(packed, multicast_vlans_count * 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_only_pack(bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_only *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->user_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->reserved))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_mac_address(buf, this->group_mac_address))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_only_unpack(bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_only *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->user_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->reserved))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_mac_address(buf, &this->group_mac_address))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_only_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 10);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_vlan_id_pack(bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_vlan_id *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->user_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->multicast_vlan))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_mac_address(buf, this->group_mac_address))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_vlan_id_unpack(bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_vlan_id *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->user_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->multicast_vlan))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_mac_address(buf, &this->group_mac_address))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_vlan_id_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 10);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_ipv4sa_pack(bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_ipv4sa *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->user_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_mac_address(buf, this->group_mac_address))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_ipv4_address(buf, this->ipsource_address))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_ipv4sa_unpack(bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_ipv4sa *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->user_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_mac_address(buf, &this->group_mac_address))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_ipv4_address(buf, &this->ipsource_address))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_ipv4sa_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 12);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_entry_gda_ipplus_mcast_vlan_id_pack(bcmolt_epon_oam_ctc_multicast_control_entry_gda_ipplus_mcast_vlan_id *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->user_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->multicast_vlan))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->reserved))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_ipv4_address(buf, this->ipmulticast_address))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_entry_gda_ipplus_mcast_vlan_id_unpack(bcmolt_epon_oam_ctc_multicast_control_entry_gda_ipplus_mcast_vlan_id *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->user_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->multicast_vlan))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->reserved))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_ipv4_address(buf, &this->ipmulticast_address))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_entry_gda_ipplus_mcast_vlan_id_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 10);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_entry_gda_ipv6plus_mcast_vlan_id_pack(bcmolt_epon_oam_ctc_multicast_control_entry_gda_ipv6plus_mcast_vlan_id *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->user_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->multicast_vlan))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_ipv6_address(buf, this->ipv6multicast_address))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_entry_gda_ipv6plus_mcast_vlan_id_unpack(bcmolt_epon_oam_ctc_multicast_control_entry_gda_ipv6plus_mcast_vlan_id *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->user_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->multicast_vlan))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_ipv6_address(buf, &this->ipv6multicast_address))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_entry_gda_ipv6plus_mcast_vlan_id_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 20);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_ipv6sa_pack(bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_ipv6sa *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->user_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_mac_address(buf, this->group_mac_address))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_ipv6_address(buf, this->ipsource_address))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_ipv6sa_unpack(bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_ipv6sa *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->user_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_mac_address(buf, &this->group_mac_address))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_ipv6_address(buf, &this->ipsource_address))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_ipv6sa_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 24);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_pack(bcmolt_epon_oam_ctc_multicast_control *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_ctc_multicast_control_action_pack(this->action, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_ctc_multicast_control_type_pack(this->type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->type)
+    {
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_CONTROL_TYPE_GDA_MAC_ONLY:
+            {
+                uint32_t i0;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.gda_mac_only.total_entries_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.gda_mac_only.entries_count > 0) && (this->u.gda_mac_only.entries == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"entries\" of struct \"bcmolt_epon_oam_ctc_multicast_control_gda_mac_only\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i0 = 0; i0 < this->u.gda_mac_only.entries_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_only_pack(&this->u.gda_mac_only.entries[i0], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_CONTROL_TYPE_GDA_MAC_PLUS_VLAN_ID:
+            {
+                uint32_t i1;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.gda_mac_plus_vlan_id.total_entries_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.gda_mac_plus_vlan_id.entries_count > 0) && (this->u.gda_mac_plus_vlan_id.entries == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"entries\" of struct \"bcmolt_epon_oam_ctc_multicast_control_gda_mac_plus_vlan_id\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i1 = 0; i1 < this->u.gda_mac_plus_vlan_id.entries_count; i1++)
+                {
+                    if (!bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_vlan_id_pack(&this->u.gda_mac_plus_vlan_id.entries[i1], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_CONTROL_TYPE_GDA_MAC_PLUS_IPV4SA:
+            {
+                uint32_t i2;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.gda_mac_plus_ipv4sa.total_entries_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.gda_mac_plus_ipv4sa.entries_count > 0) && (this->u.gda_mac_plus_ipv4sa.entries == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"entries\" of struct \"bcmolt_epon_oam_ctc_multicast_control_gda_mac_plus_ipv4sa\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i2 = 0; i2 < this->u.gda_mac_plus_ipv4sa.entries_count; i2++)
+                {
+                    if (!bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_ipv4sa_pack(&this->u.gda_mac_plus_ipv4sa.entries[i2], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_CONTROL_TYPE_GDA_IPPLUS_MCAST_VLAN_ID:
+            {
+                uint32_t i3;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.gda_ipplus_mcast_vlan_id.total_entries_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.gda_ipplus_mcast_vlan_id.entries_count > 0) && (this->u.gda_ipplus_mcast_vlan_id.entries == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"entries\" of struct \"bcmolt_epon_oam_ctc_multicast_control_gda_ipplus_mcast_vlan_id\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i3 = 0; i3 < this->u.gda_ipplus_mcast_vlan_id.entries_count; i3++)
+                {
+                    if (!bcmolt_epon_oam_ctc_multicast_control_entry_gda_ipplus_mcast_vlan_id_pack(&this->u.gda_ipplus_mcast_vlan_id.entries[i3], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_CONTROL_TYPE_GDA_IPV6PLUS_MCAST_VLAN_ID:
+            {
+                uint32_t i4;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.gda_ipv6plus_mcast_vlan_id.total_entries_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.gda_ipv6plus_mcast_vlan_id.entries_count > 0) && (this->u.gda_ipv6plus_mcast_vlan_id.entries == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"entries\" of struct \"bcmolt_epon_oam_ctc_multicast_control_gda_ipv6plus_mcast_vlan_id\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i4 = 0; i4 < this->u.gda_ipv6plus_mcast_vlan_id.entries_count; i4++)
+                {
+                    if (!bcmolt_epon_oam_ctc_multicast_control_entry_gda_ipv6plus_mcast_vlan_id_pack(&this->u.gda_ipv6plus_mcast_vlan_id.entries[i4], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_CONTROL_TYPE_GDA_MAC_PLUS_IPV6SA:
+            {
+                uint32_t i5;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.gda_mac_plus_ipv6sa.total_entries_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.gda_mac_plus_ipv6sa.entries_count > 0) && (this->u.gda_mac_plus_ipv6sa.entries == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"entries\" of struct \"bcmolt_epon_oam_ctc_multicast_control_gda_mac_plus_ipv6sa\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i5 = 0; i5 < this->u.gda_mac_plus_ipv6sa.entries_count; i5++)
+                {
+                    if (!bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_ipv6sa_pack(&this->u.gda_mac_plus_ipv6sa.entries[i5], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_multicast_control_get_packed_length(bcmolt_epon_oam_ctc_multicast_control *this)
+{
+    uint32_t count = 2;
+    switch (this->type)
+    {
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_CONTROL_TYPE_GDA_MAC_ONLY:
+            {
+                count += 1 + (10 * this->u.gda_mac_only.entries_count);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_CONTROL_TYPE_GDA_MAC_PLUS_VLAN_ID:
+            {
+                count += 1 + (10 * this->u.gda_mac_plus_vlan_id.entries_count);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_CONTROL_TYPE_GDA_MAC_PLUS_IPV4SA:
+            {
+                count += 1 + (12 * this->u.gda_mac_plus_ipv4sa.entries_count);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_CONTROL_TYPE_GDA_IPPLUS_MCAST_VLAN_ID:
+            {
+                count += 1 + (10 * this->u.gda_ipplus_mcast_vlan_id.entries_count);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_CONTROL_TYPE_GDA_IPV6PLUS_MCAST_VLAN_ID:
+            {
+                count += 1 + (20 * this->u.gda_ipv6plus_mcast_vlan_id.entries_count);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_CONTROL_TYPE_GDA_MAC_PLUS_IPV6SA:
+            {
+                count += 1 + (24 * this->u.gda_mac_plus_ipv6sa.entries_count);
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_unpack(bcmolt_epon_oam_ctc_multicast_control *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_ctc_multicast_control_action_unpack(&this->action, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_ctc_multicast_control_type_unpack(&this->type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->type)
+    {
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_CONTROL_TYPE_GDA_MAC_ONLY:
+            {
+                uint32_t i0;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.gda_mac_only.total_entries_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                this->u.gda_mac_only.entries_count = bcmolt_epon_oam_ctc_multicast_control_gda_mac_only_count_entries(buf);
+                if ((this->u.gda_mac_only.entries_count > 0) && (this->u.gda_mac_only.entries == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"entries\" of struct \"bcmolt_epon_oam_ctc_multicast_control_gda_mac_only\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.gda_mac_only.entries = (bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_only *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.gda_mac_only.entries_count * sizeof(bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_only));
+                    }
+                }
+
+                for (i0 = 0; i0 < this->u.gda_mac_only.entries_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_only_unpack(&this->u.gda_mac_only.entries[i0], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_CONTROL_TYPE_GDA_MAC_PLUS_VLAN_ID:
+            {
+                uint32_t i1;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.gda_mac_plus_vlan_id.total_entries_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                this->u.gda_mac_plus_vlan_id.entries_count = bcmolt_epon_oam_ctc_multicast_control_gda_mac_plus_vlan_id_count_entries(buf);
+                if ((this->u.gda_mac_plus_vlan_id.entries_count > 0) && (this->u.gda_mac_plus_vlan_id.entries == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"entries\" of struct \"bcmolt_epon_oam_ctc_multicast_control_gda_mac_plus_vlan_id\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.gda_mac_plus_vlan_id.entries = (bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_vlan_id *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.gda_mac_plus_vlan_id.entries_count * sizeof(bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_vlan_id));
+                    }
+                }
+
+                for (i1 = 0; i1 < this->u.gda_mac_plus_vlan_id.entries_count; i1++)
+                {
+                    if (!bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_vlan_id_unpack(&this->u.gda_mac_plus_vlan_id.entries[i1], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_CONTROL_TYPE_GDA_MAC_PLUS_IPV4SA:
+            {
+                uint32_t i2;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.gda_mac_plus_ipv4sa.total_entries_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                this->u.gda_mac_plus_ipv4sa.entries_count = bcmolt_epon_oam_ctc_multicast_control_gda_mac_plus_ipv4sa_count_entries(buf);
+                if ((this->u.gda_mac_plus_ipv4sa.entries_count > 0) && (this->u.gda_mac_plus_ipv4sa.entries == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"entries\" of struct \"bcmolt_epon_oam_ctc_multicast_control_gda_mac_plus_ipv4sa\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.gda_mac_plus_ipv4sa.entries = (bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_ipv4sa *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.gda_mac_plus_ipv4sa.entries_count * sizeof(bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_ipv4sa));
+                    }
+                }
+
+                for (i2 = 0; i2 < this->u.gda_mac_plus_ipv4sa.entries_count; i2++)
+                {
+                    if (!bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_ipv4sa_unpack(&this->u.gda_mac_plus_ipv4sa.entries[i2], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_CONTROL_TYPE_GDA_IPPLUS_MCAST_VLAN_ID:
+            {
+                uint32_t i3;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.gda_ipplus_mcast_vlan_id.total_entries_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                this->u.gda_ipplus_mcast_vlan_id.entries_count = bcmolt_epon_oam_ctc_multicast_control_gda_ipplus_mcast_vlan_id_count_entries(buf);
+                if ((this->u.gda_ipplus_mcast_vlan_id.entries_count > 0) && (this->u.gda_ipplus_mcast_vlan_id.entries == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"entries\" of struct \"bcmolt_epon_oam_ctc_multicast_control_gda_ipplus_mcast_vlan_id\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.gda_ipplus_mcast_vlan_id.entries = (bcmolt_epon_oam_ctc_multicast_control_entry_gda_ipplus_mcast_vlan_id *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.gda_ipplus_mcast_vlan_id.entries_count * sizeof(bcmolt_epon_oam_ctc_multicast_control_entry_gda_ipplus_mcast_vlan_id));
+                    }
+                }
+
+                for (i3 = 0; i3 < this->u.gda_ipplus_mcast_vlan_id.entries_count; i3++)
+                {
+                    if (!bcmolt_epon_oam_ctc_multicast_control_entry_gda_ipplus_mcast_vlan_id_unpack(&this->u.gda_ipplus_mcast_vlan_id.entries[i3], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_CONTROL_TYPE_GDA_IPV6PLUS_MCAST_VLAN_ID:
+            {
+                uint32_t i4;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.gda_ipv6plus_mcast_vlan_id.total_entries_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                this->u.gda_ipv6plus_mcast_vlan_id.entries_count = bcmolt_epon_oam_ctc_multicast_control_gda_ipv6plus_mcast_vlan_id_count_entries(buf);
+                if ((this->u.gda_ipv6plus_mcast_vlan_id.entries_count > 0) && (this->u.gda_ipv6plus_mcast_vlan_id.entries == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"entries\" of struct \"bcmolt_epon_oam_ctc_multicast_control_gda_ipv6plus_mcast_vlan_id\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.gda_ipv6plus_mcast_vlan_id.entries = (bcmolt_epon_oam_ctc_multicast_control_entry_gda_ipv6plus_mcast_vlan_id *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.gda_ipv6plus_mcast_vlan_id.entries_count * sizeof(bcmolt_epon_oam_ctc_multicast_control_entry_gda_ipv6plus_mcast_vlan_id));
+                    }
+                }
+
+                for (i4 = 0; i4 < this->u.gda_ipv6plus_mcast_vlan_id.entries_count; i4++)
+                {
+                    if (!bcmolt_epon_oam_ctc_multicast_control_entry_gda_ipv6plus_mcast_vlan_id_unpack(&this->u.gda_ipv6plus_mcast_vlan_id.entries[i4], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_CONTROL_TYPE_GDA_MAC_PLUS_IPV6SA:
+            {
+                uint32_t i5;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.gda_mac_plus_ipv6sa.total_entries_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                this->u.gda_mac_plus_ipv6sa.entries_count = bcmolt_epon_oam_ctc_multicast_control_gda_mac_plus_ipv6sa_count_entries(buf);
+                if ((this->u.gda_mac_plus_ipv6sa.entries_count > 0) && (this->u.gda_mac_plus_ipv6sa.entries == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"entries\" of struct \"bcmolt_epon_oam_ctc_multicast_control_gda_mac_plus_ipv6sa\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.gda_mac_plus_ipv6sa.entries = (bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_ipv6sa *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.gda_mac_plus_ipv6sa.entries_count * sizeof(bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_ipv6sa));
+                    }
+                }
+
+                for (i5 = 0; i5 < this->u.gda_mac_plus_ipv6sa.entries_count; i5++)
+                {
+                    if (!bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_ipv6sa_unpack(&this->u.gda_mac_plus_ipv6sa.entries[i5], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_ctc_multicast_control_type type;
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_ctc_multicast_control_type_unpack(&type, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (type)
+    {
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_CONTROL_TYPE_GDA_MAC_ONLY:
+            {
+                uint32_t entries_elem_count = 0;
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(packed, 10))
+                    {
+                        break;
+                    }
+
+                    entries_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(entries_elem_count * sizeof(bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_only));
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_CONTROL_TYPE_GDA_MAC_PLUS_VLAN_ID:
+            {
+                uint32_t entries_elem_count = 0;
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(packed, 10))
+                    {
+                        break;
+                    }
+
+                    entries_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(entries_elem_count * sizeof(bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_vlan_id));
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_CONTROL_TYPE_GDA_MAC_PLUS_IPV4SA:
+            {
+                uint32_t entries_elem_count = 0;
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(packed, 12))
+                    {
+                        break;
+                    }
+
+                    entries_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(entries_elem_count * sizeof(bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_ipv4sa));
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_CONTROL_TYPE_GDA_IPPLUS_MCAST_VLAN_ID:
+            {
+                uint32_t entries_elem_count = 0;
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(packed, 10))
+                    {
+                        break;
+                    }
+
+                    entries_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(entries_elem_count * sizeof(bcmolt_epon_oam_ctc_multicast_control_entry_gda_ipplus_mcast_vlan_id));
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_CONTROL_TYPE_GDA_IPV6PLUS_MCAST_VLAN_ID:
+            {
+                uint32_t entries_elem_count = 0;
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(packed, 20))
+                    {
+                        break;
+                    }
+
+                    entries_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(entries_elem_count * sizeof(bcmolt_epon_oam_ctc_multicast_control_entry_gda_ipv6plus_mcast_vlan_id));
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_MULTICAST_CONTROL_TYPE_GDA_MAC_PLUS_IPV6SA:
+            {
+                uint32_t entries_elem_count = 0;
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(packed, 24))
+                    {
+                        break;
+                    }
+
+                    entries_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(entries_elem_count * sizeof(bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_ipv6sa));
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_multicast_control_gda_mac_only_count_entries(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 10);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_multicast_control_gda_mac_plus_vlan_id_count_entries(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 10);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_multicast_control_gda_mac_plus_ipv4sa_count_entries(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 12);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_multicast_control_gda_ipplus_mcast_vlan_id_count_entries(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 10);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_multicast_control_gda_ipv6plus_mcast_vlan_id_count_entries(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 20);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_multicast_control_gda_mac_plus_ipv6sa_count_entries(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 24);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_onu_llid_queue_pack(bcmolt_epon_oam_ctc_onu_llid_queue *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->queue_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->wrr_weight))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_onu_llid_queue_unpack(bcmolt_epon_oam_ctc_onu_llid_queue *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->queue_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->wrr_weight))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_onu_llid_queue_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 4);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_zte_vlan_mac_pack(bcmolt_epon_oam_zte_vlan_mac *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_vlan_tag(buf, this->vlan_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_mac_address(buf, this->mac_filter))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_zte_vlan_mac_unpack(bcmolt_epon_oam_zte_vlan_mac *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_vlan_tag(buf, &this->vlan_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_mac_address(buf, &this->mac_filter))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_zte_vlan_mac_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 8);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_ext_attribute_value_base_pack(bcmolt_epon_oam_ctc_ext_attribute_value_base *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_ctc_leaf_ext_attribute_pack(this->leaf, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->leaf)
+    {
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_PPPO_ETEST_RESULT:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.pppo_etest_result.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.pppo_etest_result.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_pppo_etest_status_pack(this->u.pppo_etest_result.status, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_pppo_etest_fail_reason_pack(this->u.pppo_etest_result.reason, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_PPPO_ETEST_CONFIGURATION:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.pppo_etest_configuration.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.pppo_etest_configuration.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_start_or_stop_indication_pack(this->u.pppo_etest_configuration.start_or_stop, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.pppo_etest_configuration.user_name, 64))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.pppo_etest_configuration.password, 32))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_pppo_eauth_mode_pack(this->u.pppo_etest_configuration.mode, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.pppo_etest_configuration.vlan))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_END:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.end.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.end.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.end.unknown_count > 0) && (this->u.end.unknown == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"unknown\" of struct \"bcmolt_epon_oam_ctc_ext_attribute_value_base_end\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.end.unknown, this->u.end.unknown_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_SERIAL_NUMBER:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.onu_serial_number.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_serial_number.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.onu_serial_number.vendor_id, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.onu_serial_number.onu_model))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_mac_address(buf, this->u.onu_serial_number.onu_mac))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.onu_serial_number.hwversion, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.onu_serial_number.swversion, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.onu_serial_number.ext_onu_model, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_FIRMWARE_VERSION:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.firmware_version.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.firmware_version.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.firmware_version.firmware_version_count > 0) && (this->u.firmware_version.firmware_version == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"firmware_version\" of struct \"bcmolt_epon_oam_ctc_ext_attribute_value_base_firmware_version\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.firmware_version.firmware_version, this->u.firmware_version.firmware_version_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_CHIPSET_ID:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.chipset_id.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.chipset_id.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.chipset_id.vendor_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.chipset_id.chip_model))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.chipset_id.revision))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.chipset_id.design_date, 3))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_CAPABILITIES1:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.onu_capabilities1.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_capabilities1.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_supported_services_pack(this->u.onu_capabilities1.services, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_capabilities1.num_geports))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_capabilities1.gebitmap))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_capabilities1.num_feports))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_capabilities1.febitmap))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_capabilities1.num_pots_ports))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_capabilities1.num_e1ports))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_capabilities1.num_upstream_queues))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_capabilities1.max_queues_per_port_up))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_capabilities1.num_downstream_queues))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_capabilities1.max_queues_per_port_down))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_capabilities1.battery_backup))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_OPTICAL_TRANSCEIVER_DIAGNOSIS:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.optical_transceiver_diagnosis.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.optical_transceiver_diagnosis.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.optical_transceiver_diagnosis.transceiver_temperature))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.optical_transceiver_diagnosis.supply_vcc))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.optical_transceiver_diagnosis.tx_bias_cur))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.optical_transceiver_diagnosis.tx_power_out))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.optical_transceiver_diagnosis.rx_power_in))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_SERVICE_SLA:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.service_sla.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.service_sla.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_service_sla_base_pack(&this->u.service_sla.service_sla, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_CAPABILITIES2:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                uint8_t i0;
+                if (this->u.onu_capabilities2.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_capabilities2.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_type_pack(this->u.onu_capabilities2.onu_type, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_capabilities2.num_links))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_protection_type_pack(this->u.onu_capabilities2.protection_type, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_capabilities2.num_pon_ifs))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_capabilities2.num_slots))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_capabilities2.interfaces_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.onu_capabilities2.interfaces_count > 0) && (this->u.onu_capabilities2.interfaces == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"interfaces\" of struct \"bcmolt_epon_oam_ctc_ext_attribute_value_base_onu_capabilities2\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i0 = 0; i0 < this->u.onu_capabilities2.interfaces_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_ctc_onu_interface_pack(&this->u.onu_capabilities2.interfaces[i0], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.onu_capabilities2.battery_backup))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_HOLDOVER_CONFIG:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.holdover_config.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.holdover_config.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_enabled_state_pack(this->u.holdover_config.holdover_state, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.holdover_config.holdover_time))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_MXU_MANAGE_GLOBAL_PARAMETER:
+            {
+                if (!bcmolt_epon_oam_ctc_mxu_global_params_base_pack(&this->u.mxu_manage_global_parameter.params, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_MXU_MANAGE_SNMP_PARAMETER:
+            {
+                if (!bcmolt_epon_oam_ctc_mxu_snmp_params_base_pack(&this->u.mxu_manage_snmp_parameter.params, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ACTIVE_PON_IFADMIN:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.active_pon_ifadmin.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.active_pon_ifadmin.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.active_pon_ifadmin.pon_number))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_CAPABILITIES3:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.onu_capabilities3.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_capabilities3.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.onu_capabilities3.is_ipv6aware))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_power_supply_control_type_pack(this->u.onu_capabilities3.power_control_type, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_capabilities3.service_sla))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ETH_LINK_STATE:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.eth_link_state.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.eth_link_state.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.eth_link_state.link_state))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ETH_PORT_PAUSE:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.eth_port_pause.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.eth_port_pause.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.eth_port_pause.enabled))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ETH_PORT_POLICING:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.eth_port_policing.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.eth_port_policing.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_eth_port_policing_config_base_pack(&this->u.eth_port_policing.config, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_VOIP_PORT:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.voip_port.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.voip_port.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.voip_port.port_state))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_E1PORT:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.e1port.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.e1port.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.e1port.port_state))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ETH_PORT_DOWN_RATE_LIMITING:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.eth_port_down_rate_limiting.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.eth_port_down_rate_limiting.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.eth_port_down_rate_limiting.rate_limiting_enabled))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u24(buf, this->u.eth_port_down_rate_limiting.cir))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u24(buf, this->u.eth_port_down_rate_limiting.pir))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_PORT_LOOP_DETECT:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.port_loop_detect.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.port_loop_detect.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_enabled_state_pack(this->u.port_loop_detect.state, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_VLAN:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.vlan.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.vlan.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_vlan_prov_base_pack(&this->u.vlan.vlan_info, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_CLASSIFICATION_AND_MARKING:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                uint8_t i1;
+                if (this->u.classification_and_marking.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.classification_and_marking.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_classification_operation_pack(this->u.classification_and_marking.op, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.classification_and_marking.rules_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.classification_and_marking.rules_count > 0) && (this->u.classification_and_marking.rules == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"rules\" of struct \"bcmolt_epon_oam_ctc_ext_attribute_value_base_classification_and_marking\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i1 = 0; i1 < this->u.classification_and_marking.rules_count; i1++)
+                {
+                    if (!bcmolt_epon_oam_ctc_rule_pack(&this->u.classification_and_marking.rules[i1], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_MULTICAST_VLAN:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.multicast_vlan.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.multicast_vlan.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_multicast_vlan_prov_pack(&this->u.multicast_vlan.vlan_info, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_MULTICAST_TAG_OPERATION:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.multicast_tag_operation.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.multicast_tag_operation.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_multicast_tag_operation_base_pack(&this->u.multicast_tag_operation.tag_operation, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_MULTICAST_SWITCH:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.multicast_switch.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.multicast_switch.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_multicast_switch_mode_pack(this->u.multicast_switch.mode, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_MULTICAST_CONTROL:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.multicast_control.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.multicast_control.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_multicast_control_pack(&this->u.multicast_control.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_GROUP_MAX:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.group_max.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.group_max.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.group_max.max_groups))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_FAST_LEAVE_ABILITY:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                uint32_t i2;
+                if (this->u.fast_leave_ability.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.fast_leave_ability.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.fast_leave_ability.fast_leave_modes_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.fast_leave_ability.fast_leave_modes_count > 0) && (this->u.fast_leave_ability.fast_leave_modes == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"fast_leave_modes\" of struct \"bcmolt_epon_oam_ctc_ext_attribute_value_base_fast_leave_ability\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i2 = 0; i2 < this->u.fast_leave_ability.fast_leave_modes_count; i2++)
+                {
+                    if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.fast_leave_ability.fast_leave_modes[i2]))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_FAST_LEAVE_ADMIN_STATE:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.fast_leave_admin_state.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.fast_leave_admin_state.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_enabled_state_pack(this->u.fast_leave_admin_state.state, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_LLID_QUEUE_CONFIG:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                uint8_t i3;
+                if (this->u.llid_queue_config.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.llid_queue_config.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.llid_queue_config.llid_queue_table_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.llid_queue_config.llid_queue_table_count > 0) && (this->u.llid_queue_config.llid_queue_table == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"llid_queue_table\" of struct \"bcmolt_epon_oam_ctc_ext_attribute_value_base_llid_queue_config\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i3 = 0; i3 < this->u.llid_queue_config.llid_queue_table_count; i3++)
+                {
+                    if (!bcmolt_epon_oam_ctc_onu_llid_queue_pack(&this->u.llid_queue_config.llid_queue_table[i3], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_IAD_INFORMATION:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.iad_information.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.iad_information.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_mac_address(buf, this->u.iad_information.iad_mac))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_voip_protocol_pack(this->u.iad_information.protocol_support, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.iad_information.iad_software_ver, 32))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.iad_information.iad_software_time, 32))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.iad_information.voip_user_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_VOIP_GLOBAL_PARAMETERS:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.voip_global_parameters.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.voip_global_parameters.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_voice_ipmode_pack(this->u.voip_global_parameters.voice_ipmode, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_ipv4_address(buf, this->u.voip_global_parameters.iad_ipaddr))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_ipv4_address(buf, this->u.voip_global_parameters.iad_net_mask))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_ipv4_address(buf, this->u.voip_global_parameters.iad_default_gw))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_pppoe_mode_pack(this->u.voip_global_parameters.pppoe_mode, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.voip_global_parameters.pppoe_username, 32))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.voip_global_parameters.pppoe_password, 32))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_voice_tagging_mode_pack(this->u.voip_global_parameters.tagging_mode, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.voip_global_parameters.voice_cvlan))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.voip_global_parameters.voice_svlan))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.voip_global_parameters.voice_pri))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_H248PARAMETERS:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.h248parameters.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.h248parameters.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.h248parameters.mgport_number))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_ipv4_address(buf, this->u.h248parameters.mgc_ip))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.h248parameters.mgc_com_port))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_ipv4_address(buf, this->u.h248parameters.backup_mgc_ip))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.h248parameters.backup_mgc_com_port))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.h248parameters.use_active_mgc))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_h248reg_mode_pack(this->u.h248parameters.reg_mode, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.h248parameters.mid, 64))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_h248heartbeat_mode_pack(this->u.h248parameters.heartbeat_mode, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.h248parameters.heartbeat_cycle))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.h248parameters.heartbeat_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_H248USER_TID_INFORMATION:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.h248user_tid_information.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.h248user_tid_information.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.h248user_tid_information.name, 32))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_H248RTP_TID_CONFIGURATION:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.h248rtp_tid_configuration.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.h248rtp_tid_configuration.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.h248rtp_tid_configuration.num_rtp_tids))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.h248rtp_tid_configuration.prefix, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.h248rtp_tid_configuration.digit_begin))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_rtp_tid_mode_pack(this->u.h248rtp_tid_configuration.rtp_tid_mode, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.h248rtp_tid_configuration.rtp_tid_length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_H248RTP_TID_INFORMATION:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.h248rtp_tid_information.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.h248rtp_tid_information.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.h248rtp_tid_information.num_rtp_tids))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.h248rtp_tid_information.first_rtp_tid_name, 32))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_SIP_PARAMETERS:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.sip_parameters.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.sip_parameters.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.sip_parameters.mgport_number))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_ipv4_address(buf, this->u.sip_parameters.active_sip_ip))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.sip_parameters.active_sip_com_port))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_ipv4_address(buf, this->u.sip_parameters.backup_sip_ip))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.sip_parameters.backup_sip_com_port))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_ipv4_address(buf, this->u.sip_parameters.active_sip_proxy_server))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_ipv4_address(buf, this->u.sip_parameters.active_sip_registration_server_ip))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.sip_parameters.active_sip_registration_server_com_port))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_ipv4_address(buf, this->u.sip_parameters.backup_sip_reg_ip))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.sip_parameters.backup_sip_reg_com_port))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_ipv4_address(buf, this->u.sip_parameters.outbound_server_ip))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.sip_parameters.outbound_server_port))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.sip_parameters.sip_registration_interval))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.sip_parameters.disable_heartbeat_switch))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.sip_parameters.heartbeat_cycle))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.sip_parameters.heartbeat_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_SIP_USER_PARAMETERS:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.sip_user_parameters.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.sip_user_parameters.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.sip_user_parameters.account, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.sip_user_parameters.name, 32))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.sip_user_parameters.password, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_FAX_MODEM_CONFIGURATION:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.fax_modem_configuration.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.fax_modem_configuration.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_voice_t38mode_pack(this->u.fax_modem_configuration.voice_t38enable, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_voice_fax_modem_control_mode_pack(this->u.fax_modem_configuration.voice_fax_modem_control, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_H248IAD_OPERATION_STATUS:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.h248iad_operation_status.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.h248iad_operation_status.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_iad_operation_status_pack(this->u.h248iad_operation_status.iad_operation_status, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_POTS_STATUS:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.pots_status.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.pots_status.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_iad_port_status_pack(this->u.pots_status.iad_port_status, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_iad_port_service_state_pack(this->u.pots_status.iad_port_service_state, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_iad_port_codec_mode_pack(this->u.pots_status.iad_port_codec_mode, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_IAD_OPERATION:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.iad_operation.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.iad_operation.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_iad_operation_pack(this->u.iad_operation.iad_operation, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_SIP_DIGIT_MAP:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.sip_digit_map.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.sip_digit_map.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.sip_digit_map.sip_digital_map_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.sip_digit_map.sip_digital_map_count > 0) && (this->u.sip_digit_map.sip_digital_map == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"sip_digital_map\" of struct \"bcmolt_epon_oam_ctc_ext_attribute_value_base_sip_digit_map\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.sip_digit_map.sip_digital_map, this->u.sip_digit_map.sip_digital_map_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ALARM_ADMIN_STATE:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.alarm_admin_state.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.alarm_admin_state.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_alarm_id_pack(this->u.alarm_admin_state.id, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_enabled_state_pack(this->u.alarm_admin_state.config, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ALARM_THRESHOLD:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.alarm_threshold.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.alarm_threshold.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_alarm_id_pack(this->u.alarm_threshold.id, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.alarm_threshold.threshold))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.alarm_threshold.clearing_threshold))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_VERSION_SERVER_PARA:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.version_server_para.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.version_server_para.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_ipv4_address(buf, this->u.version_server_para.ipaddress))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_ipv4_address(buf, this->u.version_server_para.ipmask))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_ipv4_address(buf, this->u.version_server_para.gateway))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_vlan_tag(buf, this->u.version_server_para.vlan_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.version_server_para.user_name, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.version_server_para.password, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.version_server_para.action))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.version_server_para.version_number))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.version_server_para.ver1name, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.version_server_para.ver2name, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.version_server_para.ver3name, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_MAC_LIMIT:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.onu_mac_limit.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_mac_limit.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.onu_mac_limit.mac_limit_number))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_MAC_AGING_TIME:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.onu_mac_aging_time.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_mac_aging_time.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.onu_mac_aging_time.mac_aging_time))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PORT_MAC_FILTER:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                uint8_t i4;
+                if (this->u.onu_port_mac_filter.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_port_mac_filter.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_zte_onu_port_mac_operation_pack(this->u.onu_port_mac_filter.op, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_port_mac_filter.number_of_entries))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.onu_port_mac_filter.number_of_entries > 0) && (this->u.onu_port_mac_filter.clause == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"clause\" of struct \"bcmolt_epon_oam_ctc_ext_attribute_value_base_onu_port_mac_filter\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i4 = 0; i4 < this->u.onu_port_mac_filter.number_of_entries; i4++)
+                {
+                    if (!bcmolt_epon_oam_zte_vlan_mac_pack(&this->u.onu_port_mac_filter.clause[i4], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PORT_MAC_BINDING:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                uint8_t i5;
+                if (this->u.onu_port_mac_binding.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_port_mac_binding.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_zte_onu_port_mac_operation_pack(this->u.onu_port_mac_binding.op, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_port_mac_binding.number_of_entries))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.onu_port_mac_binding.number_of_entries > 0) && (this->u.onu_port_mac_binding.clause == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"clause\" of struct \"bcmolt_epon_oam_ctc_ext_attribute_value_base_onu_port_mac_binding\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i5 = 0; i5 < this->u.onu_port_mac_binding.number_of_entries; i5++)
+                {
+                    if (!bcmolt_epon_oam_zte_vlan_mac_pack(&this->u.onu_port_mac_binding.clause[i5], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PORT_MAC_STATIC:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                uint8_t i6;
+                if (this->u.onu_port_mac_static.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_port_mac_static.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_zte_onu_port_mac_operation_pack(this->u.onu_port_mac_static.op, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_port_mac_static.number_of_entries))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.onu_port_mac_static.number_of_entries > 0) && (this->u.onu_port_mac_static.clause == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"clause\" of struct \"bcmolt_epon_oam_ctc_ext_attribute_value_base_onu_port_mac_static\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i6 = 0; i6 < this->u.onu_port_mac_static.number_of_entries; i6++)
+                {
+                    if (!bcmolt_epon_oam_zte_vlan_mac_pack(&this->u.onu_port_mac_static.clause[i6], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PERFORMANCE_STAT:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.onu_performance_stat.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_performance_stat.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_performance_stat.ifinoctets))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_performance_stat.ifinucastpkts))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_performance_stat.ifinnucastpkts))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_performance_stat.ifindiscards))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_performance_stat.ifinerrors))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_performance_stat.ifoutoctets))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_performance_stat.ifoutucastpkts))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_performance_stat.ifoutnucastpkts))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_performance_stat.ifoutdiscards))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_performance_stat.ifouterrors))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_performance_stat.reserved1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_performance_stat.reserved2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_performance_stat.reserved3))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_performance_stat.reserved4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PORT_ISOLATE:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_port_isolate.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_zte_isolate_mode_pack(this->u.onu_port_isolate.port_isolate, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_MAC_ADDRESS_TABLE_QUERY:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.onu_mac_address_table_query.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_mac_address_table_query.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PON_MAC_DOWNSTREAM_SHAPING:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.onu_pon_mac_downstream_shaping.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_pon_mac_downstream_shaping.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.onu_pon_mac_downstream_shaping.ponmacdsratelimitingenable))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u24(buf, this->u.onu_pon_mac_downstream_shaping.cir))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u24(buf, this->u.onu_pon_mac_downstream_shaping.cbs))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PON_MAC_USDSBUFFER_CAPABILITY_QUERY:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.onu_pon_mac_usdsbuffer_capability_query.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_pon_mac_usdsbuffer_capability_query.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_zte_buffer_manage_mode_pack(this->u.onu_pon_mac_usdsbuffer_capability_query.buffer_management_capability, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u24(buf, this->u.onu_pon_mac_usdsbuffer_capability_query.dsbuffer_size_minimum_value))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u24(buf, this->u.onu_pon_mac_usdsbuffer_capability_query.dsbuffer_size_maximum_value))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u24(buf, this->u.onu_pon_mac_usdsbuffer_capability_query.usbuffer_size_minimum_value))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u24(buf, this->u.onu_pon_mac_usdsbuffer_capability_query.usbuffer_size_maximum_value))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PON_MAC_USDSBUFFER:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.onu_pon_mac_usdsbuffer.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_pon_mac_usdsbuffer.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.onu_pon_mac_usdsbuffer.buffer_management_indication))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_zte_dsbuf_direction_pack(this->u.onu_pon_mac_usdsbuffer.direction, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u24(buf, this->u.onu_pon_mac_usdsbuffer.buffer_size))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PORT_STATISTICS_COLLECT_CONTROL:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.onu_port_statistics_collect_control.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_port_statistics_collect_control.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_zte_statistics_action_mode_pack(this->u.onu_port_statistics_collect_control.statistics_action, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u24(buf, this->u.onu_port_statistics_collect_control.statistics_interval))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.onu_port_statistics_collect_control.statistics_duration_time))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PORT_STATISTICS_COUNTER_RESET:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.onu_port_statistics_counter_reset.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_port_statistics_counter_reset.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_zte_statistics_reset_mode_pack(this->u.onu_port_statistics_counter_reset.statistics_reset, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PORT_FLUX_STATISTICS_COUNTER:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.onu_port_flux_statistics_counter.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_port_flux_statistics_counter.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_uni_flow_statistics_collect_control_mode_pack(this->u.onu_port_flux_statistics_counter.uniflowstatisticscollectcontrolindication, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_port_flux_statistics_counter.ifinoctets))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_port_flux_statistics_counter.ifinucastpkts))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_port_flux_statistics_counter.ifinnucastpkts))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_port_flux_statistics_counter.ifindiscards))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_port_flux_statistics_counter.ifinerrors))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_port_flux_statistics_counter.ifoutoctets))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_port_flux_statistics_counter.ifoutucastpkts))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_port_flux_statistics_counter.ifoutnucastpkts))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_port_flux_statistics_counter.ifoutdiscards))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_port_flux_statistics_counter.ifouterrors))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_LIGHT_EXCEPTION:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.onu_light_exception.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_light_exception.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_light_exception.ponportnumber))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_light_indication_mode_pack(this->u.onu_light_exception.main_light_indication, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_light_indication_mode_pack(this->u.onu_light_exception.reserve_light_indication, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_LIGHT_CONTROL:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.onu_light_control.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_light_control.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_match_mac_address_mode_pack(this->u.onu_light_control.match_mac_address, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_mac_address(buf, this->u.onu_light_control.pon_mac_address))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_zte_light_control_action_mode_pack(this->u.onu_light_control.action, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.onu_light_control.duration_time))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PON_PORT_STATISTICS_GET1:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.onu_pon_port_statistics_get1.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_pon_port_statistics_get1.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_pon_port_statistics_get1.frames_transmittedok))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_pon_port_statistics_get1.octets_transmittedok))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_pon_port_statistics_get1.multicast_framesxmitted_ok))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_pon_port_statistics_get1.broadcast_framesxmitted_ok))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_pon_port_statistics_get1.frames_received_ok))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_pon_port_statistics_get1.octets_received_ok))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_pon_port_statistics_get1.multicast_frames_received_ok))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_pon_port_statistics_get1.broadcast_frames_received_ok))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PON_PORT_STATISTICS_GET2:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.onu_pon_port_statistics_get2.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_pon_port_statistics_get2.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_pon_port_statistics_get2.crc8errors))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_pon_port_statistics_get2.fec_corrected_blocks))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_pon_port_statistics_get2.fec_uncorrectable_blocks))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_pon_port_statistics_get2.mpcp_mac_ctrl_frames_transmitted))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_pon_port_statistics_get2.mpcp_mac_ctrl_frames_received))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_pon_port_statistics_get2.mpcp_tx_register))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_pon_port_statistics_get2.mpcp_tx_regrequest))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_pon_port_statistics_get2.mpcp_tx_report))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_pon_port_statistics_get2.mpcp_rx_gate))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_pon_port_statistics_get2.mpcp_rx_registe))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ALARM_CONFIG:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.alarm_config.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.alarm_config.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_alarm_config_mode_pack(this->u.alarm_config.alarm_config, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ROUGUE_ONU_EXCL_ABILITY:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.rougue_onu_excl_ability.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.rougue_onu_excl_ability.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_onu_excl_ability_pack(this->u.rougue_onu_excl_ability.ability, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_POWER_SAVING_CAPABILITIES:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.onu_power_saving_capabilities.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_power_saving_capabilities.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_sleep_mode_pack(this->u.onu_power_saving_capabilities.sleep_mode_capability, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_early_wake_capability_pack(this->u.onu_power_saving_capabilities.early_wake_up_capability, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_POWER_SAVING_CONFIG:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.onu_power_saving_config.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_power_saving_config.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_early_wake_up_mode_pack(this->u.onu_power_saving_config.early_wake_up, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.onu_power_saving_config.sleep_duration_max, 6))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PROTECTION_PARAMETERS:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.onu_protection_parameters.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_protection_parameters.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.onu_protection_parameters.optical_los_time))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.onu_protection_parameters.mac_los_time))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_PORT_DISABLE_ON_LOOP_DETECTED:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.port_disable_on_loop_detected.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.port_disable_on_loop_detected.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_port_disable_on_loop_detected_state_pack(this->u.port_disable_on_loop_detected.state, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_MAC_AGING_TIME:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.mac_aging_time.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.mac_aging_time.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.mac_aging_time.aging_time))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_PERFORMANCE_MONITORING_STATUS:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.performance_monitoring_status.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.performance_monitoring_status.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_monitoring_status_pack(this->u.performance_monitoring_status.monitoring_status, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.performance_monitoring_status.monitoring_period))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_PERFORMANCE_MONITORING_CURRENT_DATA:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.performance_monitoring_current_data.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.performance_monitoring_current_data.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.performance_monitoring_current_data.stats_field1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.performance_monitoring_current_data.stats_field2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.performance_monitoring_current_data.stats_field3))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.performance_monitoring_current_data.stats_field4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.performance_monitoring_current_data.stats_field5))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.performance_monitoring_current_data.stats_field6))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.performance_monitoring_current_data.stats_field7))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.performance_monitoring_current_data.stats_field8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.performance_monitoring_current_data.stats_field9))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.performance_monitoring_current_data.stats_field10))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.performance_monitoring_current_data.stats_field11))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.performance_monitoring_current_data.stats_field12))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.performance_monitoring_current_data.stats_field13))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.performance_monitoring_current_data.stats_field14))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.performance_monitoring_current_data.stats_field15))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.performance_monitoring_current_data.stats_field16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_PERFORMANCE_MONITORING_HISTORY_DATA:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.performance_monitoring_history_data.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.performance_monitoring_history_data.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.performance_monitoring_history_data.stats_field1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.performance_monitoring_history_data.stats_field2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.performance_monitoring_history_data.stats_field3))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.performance_monitoring_history_data.stats_field4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.performance_monitoring_history_data.stats_field5))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.performance_monitoring_history_data.stats_field6))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.performance_monitoring_history_data.stats_field7))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.performance_monitoring_history_data.stats_field8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.performance_monitoring_history_data.stats_field9))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.performance_monitoring_history_data.stats_field10))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.performance_monitoring_history_data.stats_field11))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.performance_monitoring_history_data.stats_field12))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.performance_monitoring_history_data.stats_field13))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.performance_monitoring_history_data.stats_field14))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.performance_monitoring_history_data.stats_field15))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.performance_monitoring_history_data.stats_field16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_TX_POWER_SUPPLY_CONTROL:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.onu_tx_power_supply_control.action))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_mac_address(buf, this->u.onu_tx_power_supply_control.onu_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.onu_tx_power_supply_control.opt_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.def.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.def.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.def.unknown_count > 0) && (this->u.def.unknown == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"unknown\" of struct \"bcmolt_epon_oam_ctc_ext_attribute_value_base_def\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.def.unknown, this->u.def.unknown_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_ext_attribute_value_base_get_packed_length(bcmolt_epon_oam_ctc_ext_attribute_value_base *this)
+{
+    uint32_t count = 2;
+    switch (this->leaf)
+    {
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_PPPO_ETEST_RESULT:
+            {
+                count += 3;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_PPPO_ETEST_CONFIGURATION:
+            {
+                count += 101;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_END:
+            {
+                count += 1 + this->u.end.unknown_count;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_SERIAL_NUMBER:
+            {
+                count += 55;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_FIRMWARE_VERSION:
+            {
+                count += 1 + this->u.firmware_version.firmware_version_count;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_CHIPSET_ID:
+            {
+                count += 9;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_CAPABILITIES1:
+            {
+                count += 27;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_OPTICAL_TRANSCEIVER_DIAGNOSIS:
+            {
+                count += 11;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_SERVICE_SLA:
+            {
+                count += 1 + bcmolt_epon_oam_ctc_onu_service_sla_base_get_packed_length(&this->u.service_sla.service_sla);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_CAPABILITIES2:
+            {
+                count += 11 + (6 * this->u.onu_capabilities2.interfaces_count);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_HOLDOVER_CONFIG:
+            {
+                count += 9;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_MXU_MANAGE_GLOBAL_PARAMETER:
+            {
+                count += bcmolt_epon_oam_ctc_mxu_global_params_base_get_packed_length(&this->u.mxu_manage_global_parameter.params);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_MXU_MANAGE_SNMP_PARAMETER:
+            {
+                count += bcmolt_epon_oam_ctc_mxu_snmp_params_base_get_packed_length(&this->u.mxu_manage_snmp_parameter.params);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ACTIVE_PON_IFADMIN:
+            {
+                count += 2;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_CAPABILITIES3:
+            {
+                count += 4;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ETH_LINK_STATE:
+            {
+                count += 2;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ETH_PORT_PAUSE:
+            {
+                count += 2;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ETH_PORT_POLICING:
+            {
+                count += 1 + bcmolt_epon_oam_ctc_eth_port_policing_config_base_get_packed_length(&this->u.eth_port_policing.config);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_VOIP_PORT:
+            {
+                count += 2;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_E1PORT:
+            {
+                count += 2;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ETH_PORT_DOWN_RATE_LIMITING:
+            {
+                count += 8;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_PORT_LOOP_DETECT:
+            {
+                count += 5;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_VLAN:
+            {
+                count += 1 + bcmolt_epon_oam_ctc_vlan_prov_base_get_packed_length(&this->u.vlan.vlan_info);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_CLASSIFICATION_AND_MARKING:
+            {
+                uint32_t i0;
+                count += 3;
+                if ((this->u.classification_and_marking.rules_count > 0) && (this->u.classification_and_marking.rules == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"rules_count\" of struct \"bcmolt_epon_oam_ctc_ext_attribute_value_base\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return 0;
+                }
+
+                for (i0 = 0; i0 < this->u.classification_and_marking.rules_count; i0++)
+                {
+                    count += bcmolt_epon_oam_ctc_rule_get_packed_length(&this->u.classification_and_marking.rules[i0]);
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_MULTICAST_VLAN:
+            {
+                count += 1 + bcmolt_epon_oam_ctc_multicast_vlan_prov_get_packed_length(&this->u.multicast_vlan.vlan_info);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_MULTICAST_TAG_OPERATION:
+            {
+                count += 1 + bcmolt_epon_oam_ctc_multicast_tag_operation_base_get_packed_length(&this->u.multicast_tag_operation.tag_operation);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_MULTICAST_SWITCH:
+            {
+                count += 2;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_MULTICAST_CONTROL:
+            {
+                count += 1 + bcmolt_epon_oam_ctc_multicast_control_get_packed_length(&this->u.multicast_control.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_GROUP_MAX:
+            {
+                count += 2;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_FAST_LEAVE_ABILITY:
+            {
+                count += 5 + (4 * this->u.fast_leave_ability.fast_leave_modes_count);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_FAST_LEAVE_ADMIN_STATE:
+            {
+                count += 5;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_LLID_QUEUE_CONFIG:
+            {
+                count += 2 + (4 * this->u.llid_queue_config.llid_queue_table_count);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_IAD_INFORMATION:
+            {
+                count += 73;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_VOIP_GLOBAL_PARAMETERS:
+            {
+                count += 85;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_H248PARAMETERS:
+            {
+                count += 85;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_H248USER_TID_INFORMATION:
+            {
+                count += 33;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_H248RTP_TID_CONFIGURATION:
+            {
+                count += 28;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_H248RTP_TID_INFORMATION:
+            {
+                count += 34;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_SIP_PARAMETERS:
+            {
+                count += 46;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_SIP_USER_PARAMETERS:
+            {
+                count += 65;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_FAX_MODEM_CONFIGURATION:
+            {
+                count += 3;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_H248IAD_OPERATION_STATUS:
+            {
+                count += 5;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_POTS_STATUS:
+            {
+                count += 13;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_IAD_OPERATION:
+            {
+                count += 5;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_SIP_DIGIT_MAP:
+            {
+                count += 3 + this->u.sip_digit_map.sip_digital_map_count;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ALARM_ADMIN_STATE:
+            {
+                count += 7;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ALARM_THRESHOLD:
+            {
+                count += 11;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_VERSION_SERVER_PARA:
+            {
+                count += 81;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_MAC_LIMIT:
+            {
+                count += 3;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_MAC_AGING_TIME:
+            {
+                count += 5;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PORT_MAC_FILTER:
+            {
+                count += 3 + (8 * this->u.onu_port_mac_filter.number_of_entries);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PORT_MAC_BINDING:
+            {
+                count += 3 + (8 * this->u.onu_port_mac_binding.number_of_entries);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PORT_MAC_STATIC:
+            {
+                count += 3 + (8 * this->u.onu_port_mac_static.number_of_entries);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PERFORMANCE_STAT:
+            {
+                count += 113;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PORT_ISOLATE:
+            {
+                count += 2;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_MAC_ADDRESS_TABLE_QUERY:
+            {
+                count += 1;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PON_MAC_DOWNSTREAM_SHAPING:
+            {
+                count += 8;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PON_MAC_USDSBUFFER_CAPABILITY_QUERY:
+            {
+                count += 14;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PON_MAC_USDSBUFFER:
+            {
+                count += 6;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PORT_STATISTICS_COLLECT_CONTROL:
+            {
+                count += 9;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PORT_STATISTICS_COUNTER_RESET:
+            {
+                count += 2;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PORT_FLUX_STATISTICS_COUNTER:
+            {
+                count += 82;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_LIGHT_EXCEPTION:
+            {
+                count += 4;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_LIGHT_CONTROL:
+            {
+                count += 11;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PON_PORT_STATISTICS_GET1:
+            {
+                count += 65;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PON_PORT_STATISTICS_GET2:
+            {
+                count += 81;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ALARM_CONFIG:
+            {
+                count += 2;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ROUGUE_ONU_EXCL_ABILITY:
+            {
+                count += 2;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_POWER_SAVING_CAPABILITIES:
+            {
+                count += 3;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_POWER_SAVING_CONFIG:
+            {
+                count += 8;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PROTECTION_PARAMETERS:
+            {
+                count += 5;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_PORT_DISABLE_ON_LOOP_DETECTED:
+            {
+                count += 5;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_MAC_AGING_TIME:
+            {
+                count += 5;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_PERFORMANCE_MONITORING_STATUS:
+            {
+                count += 7;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_PERFORMANCE_MONITORING_CURRENT_DATA:
+            {
+                count += 129;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_PERFORMANCE_MONITORING_HISTORY_DATA:
+            {
+                count += 129;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_TX_POWER_SUPPLY_CONTROL:
+            {
+                count += 13;
+            }
+            break;
+        default:
+            {
+                count += 1 + this->u.def.unknown_count;
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_ext_attribute_value_base_unpack(bcmolt_epon_oam_ctc_ext_attribute_value_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_ctc_leaf_ext_attribute_unpack(&this->leaf, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->leaf)
+    {
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_PPPO_ETEST_RESULT:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.pppo_etest_result.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.pppo_etest_result.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.pppo_etest_result.width == 0) ? 0x0080 : this->u.pppo_etest_result.width, buf->curr);
+                if (!bcmolt_epon_oam_pppo_etest_status_unpack(&this->u.pppo_etest_result.status, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_pppo_etest_fail_reason_unpack(&this->u.pppo_etest_result.reason, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.pppo_etest_result.width == 0) ? 0x0080 : this->u.pppo_etest_result.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_PPPO_ETEST_CONFIGURATION:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.pppo_etest_configuration.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.pppo_etest_configuration.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.pppo_etest_configuration.width == 0) ? 0x0080 : this->u.pppo_etest_configuration.width, buf->curr);
+                if (!bcmolt_epon_oam_start_or_stop_indication_unpack(&this->u.pppo_etest_configuration.start_or_stop, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.pppo_etest_configuration.user_name, 64))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.pppo_etest_configuration.password, 32))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_pppo_eauth_mode_unpack(&this->u.pppo_etest_configuration.mode, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.pppo_etest_configuration.vlan))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.pppo_etest_configuration.width == 0) ? 0x0080 : this->u.pppo_etest_configuration.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_END:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.end.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.end.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.end.width == 0) ? 0x0080 : this->u.end.width, buf->curr);
+                this->u.end.unknown_count = bcmolt_epon_oam_ctc_ext_attribute_value_base_end_count_unknown(&postLenBuf);
+                if ((this->u.end.unknown_count > 0) && (this->u.end.unknown == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"unknown\" of struct \"bcmolt_epon_oam_ctc_ext_attribute_value_base_end\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.end.unknown = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.end.unknown_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.end.unknown, this->u.end.unknown_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.end.width == 0) ? 0x0080 : this->u.end.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_SERIAL_NUMBER:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.onu_serial_number.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.onu_serial_number.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.onu_serial_number.width == 0) ? 0x0080 : this->u.onu_serial_number.width, buf->curr);
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.onu_serial_number.vendor_id, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.onu_serial_number.onu_model))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_mac_address(&postLenBuf, &this->u.onu_serial_number.onu_mac))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.onu_serial_number.hwversion, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.onu_serial_number.swversion, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.onu_serial_number.ext_onu_model, 16))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.onu_serial_number.width == 0) ? 0x0080 : this->u.onu_serial_number.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_FIRMWARE_VERSION:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.firmware_version.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.firmware_version.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.firmware_version.width == 0) ? 0x0080 : this->u.firmware_version.width, buf->curr);
+                this->u.firmware_version.firmware_version_count = bcmolt_epon_oam_ctc_ext_attribute_value_base_firmware_version_count_firmware_version(&postLenBuf);
+                if ((this->u.firmware_version.firmware_version_count > 0) && (this->u.firmware_version.firmware_version == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"firmware_version\" of struct \"bcmolt_epon_oam_ctc_ext_attribute_value_base_firmware_version\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.firmware_version.firmware_version = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.firmware_version.firmware_version_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.firmware_version.firmware_version, this->u.firmware_version.firmware_version_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.firmware_version.width == 0) ? 0x0080 : this->u.firmware_version.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_CHIPSET_ID:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.chipset_id.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.chipset_id.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.chipset_id.width == 0) ? 0x0080 : this->u.chipset_id.width, buf->curr);
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.chipset_id.vendor_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.chipset_id.chip_model))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.chipset_id.revision))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.chipset_id.design_date, 3))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.chipset_id.width == 0) ? 0x0080 : this->u.chipset_id.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_CAPABILITIES1:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.onu_capabilities1.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.onu_capabilities1.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.onu_capabilities1.width == 0) ? 0x0080 : this->u.onu_capabilities1.width, buf->curr);
+                if (!bcmolt_epon_oam_ctc_supported_services_unpack(&this->u.onu_capabilities1.services, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.onu_capabilities1.num_geports))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_capabilities1.gebitmap))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.onu_capabilities1.num_feports))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_capabilities1.febitmap))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.onu_capabilities1.num_pots_ports))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.onu_capabilities1.num_e1ports))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.onu_capabilities1.num_upstream_queues))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.onu_capabilities1.max_queues_per_port_up))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.onu_capabilities1.num_downstream_queues))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.onu_capabilities1.max_queues_per_port_down))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.onu_capabilities1.battery_backup))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.onu_capabilities1.width == 0) ? 0x0080 : this->u.onu_capabilities1.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_OPTICAL_TRANSCEIVER_DIAGNOSIS:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.optical_transceiver_diagnosis.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.optical_transceiver_diagnosis.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.optical_transceiver_diagnosis.width == 0) ? 0x0080 : this->u.optical_transceiver_diagnosis.width, buf->curr);
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.optical_transceiver_diagnosis.transceiver_temperature))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.optical_transceiver_diagnosis.supply_vcc))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.optical_transceiver_diagnosis.tx_bias_cur))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.optical_transceiver_diagnosis.tx_power_out))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.optical_transceiver_diagnosis.rx_power_in))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.optical_transceiver_diagnosis.width == 0) ? 0x0080 : this->u.optical_transceiver_diagnosis.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_SERVICE_SLA:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.service_sla.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.service_sla.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.service_sla.width == 0) ? 0x0080 : this->u.service_sla.width, buf->curr);
+                if (!bcmolt_epon_oam_ctc_onu_service_sla_base_unpack(&this->u.service_sla.service_sla, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.service_sla.width == 0) ? 0x0080 : this->u.service_sla.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_CAPABILITIES2:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t i0;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.onu_capabilities2.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.onu_capabilities2.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.onu_capabilities2.width == 0) ? 0x0080 : this->u.onu_capabilities2.width, buf->curr);
+                if (!bcmolt_epon_oam_ctc_onu_type_unpack(&this->u.onu_capabilities2.onu_type, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.onu_capabilities2.num_links))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_protection_type_unpack(&this->u.onu_capabilities2.protection_type, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.onu_capabilities2.num_pon_ifs))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.onu_capabilities2.num_slots))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.onu_capabilities2.interfaces_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.onu_capabilities2.interfaces_count > 0) && (this->u.onu_capabilities2.interfaces == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"interfaces\" of struct \"bcmolt_epon_oam_ctc_ext_attribute_value_base_onu_capabilities2\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.onu_capabilities2.interfaces = (bcmolt_epon_oam_ctc_onu_interface *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.onu_capabilities2.interfaces_count * sizeof(bcmolt_epon_oam_ctc_onu_interface));
+                    }
+                }
+
+                for (i0 = 0; i0 < this->u.onu_capabilities2.interfaces_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_ctc_onu_interface_unpack(&this->u.onu_capabilities2.interfaces[i0], &postLenBuf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read_bool(&postLenBuf, &this->u.onu_capabilities2.battery_backup))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.onu_capabilities2.width == 0) ? 0x0080 : this->u.onu_capabilities2.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_HOLDOVER_CONFIG:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.holdover_config.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.holdover_config.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.holdover_config.width == 0) ? 0x0080 : this->u.holdover_config.width, buf->curr);
+                if (!bcmolt_epon_oam_ctc_enabled_state_unpack(&this->u.holdover_config.holdover_state, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.holdover_config.holdover_time))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.holdover_config.width == 0) ? 0x0080 : this->u.holdover_config.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_MXU_MANAGE_GLOBAL_PARAMETER:
+            {
+                if (!bcmolt_epon_oam_ctc_mxu_global_params_base_unpack(&this->u.mxu_manage_global_parameter.params, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_MXU_MANAGE_SNMP_PARAMETER:
+            {
+                if (!bcmolt_epon_oam_ctc_mxu_snmp_params_base_unpack(&this->u.mxu_manage_snmp_parameter.params, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ACTIVE_PON_IFADMIN:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.active_pon_ifadmin.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.active_pon_ifadmin.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.active_pon_ifadmin.width == 0) ? 0x0080 : this->u.active_pon_ifadmin.width, buf->curr);
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.active_pon_ifadmin.pon_number))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.active_pon_ifadmin.width == 0) ? 0x0080 : this->u.active_pon_ifadmin.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_CAPABILITIES3:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.onu_capabilities3.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.onu_capabilities3.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.onu_capabilities3.width == 0) ? 0x0080 : this->u.onu_capabilities3.width, buf->curr);
+                if (!bcmolt_epon_oam_buf_read_bool(&postLenBuf, &this->u.onu_capabilities3.is_ipv6aware))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_power_supply_control_type_unpack(&this->u.onu_capabilities3.power_control_type, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.onu_capabilities3.service_sla))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.onu_capabilities3.width == 0) ? 0x0080 : this->u.onu_capabilities3.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ETH_LINK_STATE:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.eth_link_state.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.eth_link_state.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.eth_link_state.width == 0) ? 0x0080 : this->u.eth_link_state.width, buf->curr);
+                if (!bcmolt_epon_oam_buf_read_bool(&postLenBuf, &this->u.eth_link_state.link_state))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.eth_link_state.width == 0) ? 0x0080 : this->u.eth_link_state.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ETH_PORT_PAUSE:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.eth_port_pause.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.eth_port_pause.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.eth_port_pause.width == 0) ? 0x0080 : this->u.eth_port_pause.width, buf->curr);
+                if (!bcmolt_epon_oam_buf_read_bool(&postLenBuf, &this->u.eth_port_pause.enabled))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.eth_port_pause.width == 0) ? 0x0080 : this->u.eth_port_pause.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ETH_PORT_POLICING:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.eth_port_policing.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.eth_port_policing.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.eth_port_policing.width == 0) ? 0x0080 : this->u.eth_port_policing.width, buf->curr);
+                if (!bcmolt_epon_oam_ctc_eth_port_policing_config_base_unpack(&this->u.eth_port_policing.config, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.eth_port_policing.width == 0) ? 0x0080 : this->u.eth_port_policing.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_VOIP_PORT:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.voip_port.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.voip_port.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.voip_port.width == 0) ? 0x0080 : this->u.voip_port.width, buf->curr);
+                if (!bcmolt_epon_oam_buf_read_bool(&postLenBuf, &this->u.voip_port.port_state))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.voip_port.width == 0) ? 0x0080 : this->u.voip_port.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_E1PORT:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.e1port.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.e1port.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.e1port.width == 0) ? 0x0080 : this->u.e1port.width, buf->curr);
+                if (!bcmolt_epon_oam_buf_read_bool(&postLenBuf, &this->u.e1port.port_state))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.e1port.width == 0) ? 0x0080 : this->u.e1port.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ETH_PORT_DOWN_RATE_LIMITING:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.eth_port_down_rate_limiting.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.eth_port_down_rate_limiting.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.eth_port_down_rate_limiting.width == 0) ? 0x0080 : this->u.eth_port_down_rate_limiting.width, buf->curr);
+                if (!bcmolt_epon_oam_buf_read_bool(&postLenBuf, &this->u.eth_port_down_rate_limiting.rate_limiting_enabled))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u24(&postLenBuf, &this->u.eth_port_down_rate_limiting.cir))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u24(&postLenBuf, &this->u.eth_port_down_rate_limiting.pir))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.eth_port_down_rate_limiting.width == 0) ? 0x0080 : this->u.eth_port_down_rate_limiting.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_PORT_LOOP_DETECT:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.port_loop_detect.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.port_loop_detect.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.port_loop_detect.width == 0) ? 0x0080 : this->u.port_loop_detect.width, buf->curr);
+                if (!bcmolt_epon_oam_ctc_enabled_state_unpack(&this->u.port_loop_detect.state, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.port_loop_detect.width == 0) ? 0x0080 : this->u.port_loop_detect.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_VLAN:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.vlan.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.vlan.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.vlan.width == 0) ? 0x0080 : this->u.vlan.width, buf->curr);
+                if (!bcmolt_epon_oam_ctc_vlan_prov_base_unpack(&this->u.vlan.vlan_info, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.vlan.width == 0) ? 0x0080 : this->u.vlan.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_CLASSIFICATION_AND_MARKING:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t i1;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.classification_and_marking.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.classification_and_marking.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.classification_and_marking.width == 0) ? 0x0080 : this->u.classification_and_marking.width, buf->curr);
+                if (!bcmolt_epon_oam_ctc_classification_operation_unpack(&this->u.classification_and_marking.op, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.classification_and_marking.rules_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.classification_and_marking.rules_count > 0) && (this->u.classification_and_marking.rules == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"rules\" of struct \"bcmolt_epon_oam_ctc_ext_attribute_value_base_classification_and_marking\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.classification_and_marking.rules = (bcmolt_epon_oam_ctc_rule *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.classification_and_marking.rules_count * sizeof(bcmolt_epon_oam_ctc_rule));
+                    }
+                }
+
+                for (i1 = 0; i1 < this->u.classification_and_marking.rules_count; i1++)
+                {
+                    if (!bcmolt_epon_oam_ctc_rule_unpack(&this->u.classification_and_marking.rules[i1], &postLenBuf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.classification_and_marking.width == 0) ? 0x0080 : this->u.classification_and_marking.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_MULTICAST_VLAN:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.multicast_vlan.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.multicast_vlan.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.multicast_vlan.width == 0) ? 0x0080 : this->u.multicast_vlan.width, buf->curr);
+                if (!bcmolt_epon_oam_ctc_multicast_vlan_prov_unpack(&this->u.multicast_vlan.vlan_info, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.multicast_vlan.width == 0) ? 0x0080 : this->u.multicast_vlan.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_MULTICAST_TAG_OPERATION:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.multicast_tag_operation.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.multicast_tag_operation.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.multicast_tag_operation.width == 0) ? 0x0080 : this->u.multicast_tag_operation.width, buf->curr);
+                if (!bcmolt_epon_oam_ctc_multicast_tag_operation_base_unpack(&this->u.multicast_tag_operation.tag_operation, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.multicast_tag_operation.width == 0) ? 0x0080 : this->u.multicast_tag_operation.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_MULTICAST_SWITCH:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.multicast_switch.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.multicast_switch.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.multicast_switch.width == 0) ? 0x0080 : this->u.multicast_switch.width, buf->curr);
+                if (!bcmolt_epon_oam_ctc_multicast_switch_mode_unpack(&this->u.multicast_switch.mode, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.multicast_switch.width == 0) ? 0x0080 : this->u.multicast_switch.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_MULTICAST_CONTROL:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.multicast_control.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.multicast_control.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.multicast_control.width == 0) ? 0x0080 : this->u.multicast_control.width, buf->curr);
+                if (!bcmolt_epon_oam_ctc_multicast_control_unpack(&this->u.multicast_control.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.multicast_control.width == 0) ? 0x0080 : this->u.multicast_control.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_GROUP_MAX:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.group_max.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.group_max.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.group_max.width == 0) ? 0x0080 : this->u.group_max.width, buf->curr);
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.group_max.max_groups))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.group_max.width == 0) ? 0x0080 : this->u.group_max.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_FAST_LEAVE_ABILITY:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint32_t i2;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.fast_leave_ability.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.fast_leave_ability.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.fast_leave_ability.width == 0) ? 0x0080 : this->u.fast_leave_ability.width, buf->curr);
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.fast_leave_ability.fast_leave_modes_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.fast_leave_ability.fast_leave_modes_count > 0) && (this->u.fast_leave_ability.fast_leave_modes == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"fast_leave_modes\" of struct \"bcmolt_epon_oam_ctc_ext_attribute_value_base_fast_leave_ability\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.fast_leave_ability.fast_leave_modes = (uint32_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.fast_leave_ability.fast_leave_modes_count * sizeof(uint32_t));
+                    }
+                }
+
+                for (i2 = 0; i2 < this->u.fast_leave_ability.fast_leave_modes_count; i2++)
+                {
+                    if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.fast_leave_ability.fast_leave_modes[i2]))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.fast_leave_ability.width == 0) ? 0x0080 : this->u.fast_leave_ability.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_FAST_LEAVE_ADMIN_STATE:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.fast_leave_admin_state.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.fast_leave_admin_state.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.fast_leave_admin_state.width == 0) ? 0x0080 : this->u.fast_leave_admin_state.width, buf->curr);
+                if (!bcmolt_epon_oam_ctc_enabled_state_unpack(&this->u.fast_leave_admin_state.state, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.fast_leave_admin_state.width == 0) ? 0x0080 : this->u.fast_leave_admin_state.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_LLID_QUEUE_CONFIG:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t i3;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.llid_queue_config.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.llid_queue_config.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.llid_queue_config.width == 0) ? 0x0080 : this->u.llid_queue_config.width, buf->curr);
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.llid_queue_config.llid_queue_table_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.llid_queue_config.llid_queue_table_count > 0) && (this->u.llid_queue_config.llid_queue_table == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"llid_queue_table\" of struct \"bcmolt_epon_oam_ctc_ext_attribute_value_base_llid_queue_config\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.llid_queue_config.llid_queue_table = (bcmolt_epon_oam_ctc_onu_llid_queue *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.llid_queue_config.llid_queue_table_count * sizeof(bcmolt_epon_oam_ctc_onu_llid_queue));
+                    }
+                }
+
+                for (i3 = 0; i3 < this->u.llid_queue_config.llid_queue_table_count; i3++)
+                {
+                    if (!bcmolt_epon_oam_ctc_onu_llid_queue_unpack(&this->u.llid_queue_config.llid_queue_table[i3], &postLenBuf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.llid_queue_config.width == 0) ? 0x0080 : this->u.llid_queue_config.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_IAD_INFORMATION:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.iad_information.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.iad_information.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.iad_information.width == 0) ? 0x0080 : this->u.iad_information.width, buf->curr);
+                if (!bcmolt_epon_oam_buf_read_mac_address(&postLenBuf, &this->u.iad_information.iad_mac))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_voip_protocol_unpack(&this->u.iad_information.protocol_support, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.iad_information.iad_software_ver, 32))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.iad_information.iad_software_time, 32))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.iad_information.voip_user_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.iad_information.width == 0) ? 0x0080 : this->u.iad_information.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_VOIP_GLOBAL_PARAMETERS:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.voip_global_parameters.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.voip_global_parameters.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.voip_global_parameters.width == 0) ? 0x0080 : this->u.voip_global_parameters.width, buf->curr);
+                if (!bcmolt_epon_oam_ctc_voice_ipmode_unpack(&this->u.voip_global_parameters.voice_ipmode, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_ipv4_address(&postLenBuf, &this->u.voip_global_parameters.iad_ipaddr))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_ipv4_address(&postLenBuf, &this->u.voip_global_parameters.iad_net_mask))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_ipv4_address(&postLenBuf, &this->u.voip_global_parameters.iad_default_gw))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_pppoe_mode_unpack(&this->u.voip_global_parameters.pppoe_mode, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.voip_global_parameters.pppoe_username, 32))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.voip_global_parameters.pppoe_password, 32))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_voice_tagging_mode_unpack(&this->u.voip_global_parameters.tagging_mode, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.voip_global_parameters.voice_cvlan))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.voip_global_parameters.voice_svlan))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.voip_global_parameters.voice_pri))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.voip_global_parameters.width == 0) ? 0x0080 : this->u.voip_global_parameters.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_H248PARAMETERS:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.h248parameters.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.h248parameters.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.h248parameters.width == 0) ? 0x0080 : this->u.h248parameters.width, buf->curr);
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.h248parameters.mgport_number))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_ipv4_address(&postLenBuf, &this->u.h248parameters.mgc_ip))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.h248parameters.mgc_com_port))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_ipv4_address(&postLenBuf, &this->u.h248parameters.backup_mgc_ip))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.h248parameters.backup_mgc_com_port))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_bool(&postLenBuf, &this->u.h248parameters.use_active_mgc))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_h248reg_mode_unpack(&this->u.h248parameters.reg_mode, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.h248parameters.mid, 64))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_h248heartbeat_mode_unpack(&this->u.h248parameters.heartbeat_mode, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.h248parameters.heartbeat_cycle))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.h248parameters.heartbeat_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.h248parameters.width == 0) ? 0x0080 : this->u.h248parameters.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_H248USER_TID_INFORMATION:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.h248user_tid_information.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.h248user_tid_information.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.h248user_tid_information.width == 0) ? 0x0080 : this->u.h248user_tid_information.width, buf->curr);
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.h248user_tid_information.name, 32))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.h248user_tid_information.width == 0) ? 0x0080 : this->u.h248user_tid_information.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_H248RTP_TID_CONFIGURATION:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.h248rtp_tid_configuration.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.h248rtp_tid_configuration.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.h248rtp_tid_configuration.width == 0) ? 0x0080 : this->u.h248rtp_tid_configuration.width, buf->curr);
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.h248rtp_tid_configuration.num_rtp_tids))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.h248rtp_tid_configuration.prefix, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.h248rtp_tid_configuration.digit_begin))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_rtp_tid_mode_unpack(&this->u.h248rtp_tid_configuration.rtp_tid_mode, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.h248rtp_tid_configuration.rtp_tid_length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.h248rtp_tid_configuration.width == 0) ? 0x0080 : this->u.h248rtp_tid_configuration.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_H248RTP_TID_INFORMATION:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.h248rtp_tid_information.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.h248rtp_tid_information.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.h248rtp_tid_information.width == 0) ? 0x0080 : this->u.h248rtp_tid_information.width, buf->curr);
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.h248rtp_tid_information.num_rtp_tids))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.h248rtp_tid_information.first_rtp_tid_name, 32))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.h248rtp_tid_information.width == 0) ? 0x0080 : this->u.h248rtp_tid_information.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_SIP_PARAMETERS:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.sip_parameters.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.sip_parameters.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.sip_parameters.width == 0) ? 0x0080 : this->u.sip_parameters.width, buf->curr);
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.sip_parameters.mgport_number))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_ipv4_address(&postLenBuf, &this->u.sip_parameters.active_sip_ip))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.sip_parameters.active_sip_com_port))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_ipv4_address(&postLenBuf, &this->u.sip_parameters.backup_sip_ip))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.sip_parameters.backup_sip_com_port))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_ipv4_address(&postLenBuf, &this->u.sip_parameters.active_sip_proxy_server))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_ipv4_address(&postLenBuf, &this->u.sip_parameters.active_sip_registration_server_ip))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.sip_parameters.active_sip_registration_server_com_port))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_ipv4_address(&postLenBuf, &this->u.sip_parameters.backup_sip_reg_ip))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.sip_parameters.backup_sip_reg_com_port))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_ipv4_address(&postLenBuf, &this->u.sip_parameters.outbound_server_ip))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.sip_parameters.outbound_server_port))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.sip_parameters.sip_registration_interval))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_bool(&postLenBuf, &this->u.sip_parameters.disable_heartbeat_switch))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.sip_parameters.heartbeat_cycle))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.sip_parameters.heartbeat_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.sip_parameters.width == 0) ? 0x0080 : this->u.sip_parameters.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_SIP_USER_PARAMETERS:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.sip_user_parameters.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.sip_user_parameters.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.sip_user_parameters.width == 0) ? 0x0080 : this->u.sip_user_parameters.width, buf->curr);
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.sip_user_parameters.account, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.sip_user_parameters.name, 32))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.sip_user_parameters.password, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.sip_user_parameters.width == 0) ? 0x0080 : this->u.sip_user_parameters.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_FAX_MODEM_CONFIGURATION:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.fax_modem_configuration.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.fax_modem_configuration.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.fax_modem_configuration.width == 0) ? 0x0080 : this->u.fax_modem_configuration.width, buf->curr);
+                if (!bcmolt_epon_oam_ctc_voice_t38mode_unpack(&this->u.fax_modem_configuration.voice_t38enable, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_voice_fax_modem_control_mode_unpack(&this->u.fax_modem_configuration.voice_fax_modem_control, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.fax_modem_configuration.width == 0) ? 0x0080 : this->u.fax_modem_configuration.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_H248IAD_OPERATION_STATUS:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.h248iad_operation_status.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.h248iad_operation_status.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.h248iad_operation_status.width == 0) ? 0x0080 : this->u.h248iad_operation_status.width, buf->curr);
+                if (!bcmolt_epon_oam_ctc_iad_operation_status_unpack(&this->u.h248iad_operation_status.iad_operation_status, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.h248iad_operation_status.width == 0) ? 0x0080 : this->u.h248iad_operation_status.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_POTS_STATUS:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.pots_status.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.pots_status.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.pots_status.width == 0) ? 0x0080 : this->u.pots_status.width, buf->curr);
+                if (!bcmolt_epon_oam_ctc_iad_port_status_unpack(&this->u.pots_status.iad_port_status, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_iad_port_service_state_unpack(&this->u.pots_status.iad_port_service_state, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_iad_port_codec_mode_unpack(&this->u.pots_status.iad_port_codec_mode, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.pots_status.width == 0) ? 0x0080 : this->u.pots_status.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_IAD_OPERATION:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.iad_operation.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.iad_operation.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.iad_operation.width == 0) ? 0x0080 : this->u.iad_operation.width, buf->curr);
+                if (!bcmolt_epon_oam_ctc_iad_operation_unpack(&this->u.iad_operation.iad_operation, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.iad_operation.width == 0) ? 0x0080 : this->u.iad_operation.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_SIP_DIGIT_MAP:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.sip_digit_map.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.sip_digit_map.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.sip_digit_map.width == 0) ? 0x0080 : this->u.sip_digit_map.width, buf->curr);
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.sip_digit_map.sip_digital_map_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.sip_digit_map.sip_digital_map_count > 0) && (this->u.sip_digit_map.sip_digital_map == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"sip_digital_map\" of struct \"bcmolt_epon_oam_ctc_ext_attribute_value_base_sip_digit_map\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.sip_digit_map.sip_digital_map = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.sip_digit_map.sip_digital_map_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.sip_digit_map.sip_digital_map, this->u.sip_digit_map.sip_digital_map_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.sip_digit_map.width == 0) ? 0x0080 : this->u.sip_digit_map.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ALARM_ADMIN_STATE:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.alarm_admin_state.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.alarm_admin_state.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.alarm_admin_state.width == 0) ? 0x0080 : this->u.alarm_admin_state.width, buf->curr);
+                if (!bcmolt_epon_oam_ctc_onu_alarm_id_unpack(&this->u.alarm_admin_state.id, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_enabled_state_unpack(&this->u.alarm_admin_state.config, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.alarm_admin_state.width == 0) ? 0x0080 : this->u.alarm_admin_state.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ALARM_THRESHOLD:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.alarm_threshold.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.alarm_threshold.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.alarm_threshold.width == 0) ? 0x0080 : this->u.alarm_threshold.width, buf->curr);
+                if (!bcmolt_epon_oam_ctc_onu_alarm_id_unpack(&this->u.alarm_threshold.id, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.alarm_threshold.threshold))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.alarm_threshold.clearing_threshold))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.alarm_threshold.width == 0) ? 0x0080 : this->u.alarm_threshold.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_VERSION_SERVER_PARA:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.version_server_para.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.version_server_para.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.version_server_para.width == 0) ? 0x0080 : this->u.version_server_para.width, buf->curr);
+                if (!bcmolt_epon_oam_buf_read_ipv4_address(&postLenBuf, &this->u.version_server_para.ipaddress))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_ipv4_address(&postLenBuf, &this->u.version_server_para.ipmask))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_ipv4_address(&postLenBuf, &this->u.version_server_para.gateway))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_vlan_tag(&postLenBuf, &this->u.version_server_para.vlan_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.version_server_para.user_name, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.version_server_para.password, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.version_server_para.action))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.version_server_para.version_number))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.version_server_para.ver1name, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.version_server_para.ver2name, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.version_server_para.ver3name, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.version_server_para.width == 0) ? 0x0080 : this->u.version_server_para.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_MAC_LIMIT:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.onu_mac_limit.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.onu_mac_limit.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.onu_mac_limit.width == 0) ? 0x0080 : this->u.onu_mac_limit.width, buf->curr);
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.onu_mac_limit.mac_limit_number))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.onu_mac_limit.width == 0) ? 0x0080 : this->u.onu_mac_limit.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_MAC_AGING_TIME:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.onu_mac_aging_time.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.onu_mac_aging_time.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.onu_mac_aging_time.width == 0) ? 0x0080 : this->u.onu_mac_aging_time.width, buf->curr);
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.onu_mac_aging_time.mac_aging_time))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.onu_mac_aging_time.width == 0) ? 0x0080 : this->u.onu_mac_aging_time.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PORT_MAC_FILTER:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t i4;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.onu_port_mac_filter.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.onu_port_mac_filter.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.onu_port_mac_filter.width == 0) ? 0x0080 : this->u.onu_port_mac_filter.width, buf->curr);
+                if (!bcmolt_epon_oam_zte_onu_port_mac_operation_unpack(&this->u.onu_port_mac_filter.op, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.onu_port_mac_filter.number_of_entries))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.onu_port_mac_filter.number_of_entries > 0) && (this->u.onu_port_mac_filter.clause == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"clause\" of struct \"bcmolt_epon_oam_ctc_ext_attribute_value_base_onu_port_mac_filter\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.onu_port_mac_filter.clause = (bcmolt_epon_oam_zte_vlan_mac *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.onu_port_mac_filter.number_of_entries * sizeof(bcmolt_epon_oam_zte_vlan_mac));
+                    }
+                }
+
+                for (i4 = 0; i4 < this->u.onu_port_mac_filter.number_of_entries; i4++)
+                {
+                    if (!bcmolt_epon_oam_zte_vlan_mac_unpack(&this->u.onu_port_mac_filter.clause[i4], &postLenBuf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.onu_port_mac_filter.width == 0) ? 0x0080 : this->u.onu_port_mac_filter.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PORT_MAC_BINDING:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t i5;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.onu_port_mac_binding.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.onu_port_mac_binding.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.onu_port_mac_binding.width == 0) ? 0x0080 : this->u.onu_port_mac_binding.width, buf->curr);
+                if (!bcmolt_epon_oam_zte_onu_port_mac_operation_unpack(&this->u.onu_port_mac_binding.op, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.onu_port_mac_binding.number_of_entries))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.onu_port_mac_binding.number_of_entries > 0) && (this->u.onu_port_mac_binding.clause == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"clause\" of struct \"bcmolt_epon_oam_ctc_ext_attribute_value_base_onu_port_mac_binding\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.onu_port_mac_binding.clause = (bcmolt_epon_oam_zte_vlan_mac *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.onu_port_mac_binding.number_of_entries * sizeof(bcmolt_epon_oam_zte_vlan_mac));
+                    }
+                }
+
+                for (i5 = 0; i5 < this->u.onu_port_mac_binding.number_of_entries; i5++)
+                {
+                    if (!bcmolt_epon_oam_zte_vlan_mac_unpack(&this->u.onu_port_mac_binding.clause[i5], &postLenBuf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.onu_port_mac_binding.width == 0) ? 0x0080 : this->u.onu_port_mac_binding.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PORT_MAC_STATIC:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t i6;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.onu_port_mac_static.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.onu_port_mac_static.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.onu_port_mac_static.width == 0) ? 0x0080 : this->u.onu_port_mac_static.width, buf->curr);
+                if (!bcmolt_epon_oam_zte_onu_port_mac_operation_unpack(&this->u.onu_port_mac_static.op, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.onu_port_mac_static.number_of_entries))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.onu_port_mac_static.number_of_entries > 0) && (this->u.onu_port_mac_static.clause == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"clause\" of struct \"bcmolt_epon_oam_ctc_ext_attribute_value_base_onu_port_mac_static\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.onu_port_mac_static.clause = (bcmolt_epon_oam_zte_vlan_mac *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.onu_port_mac_static.number_of_entries * sizeof(bcmolt_epon_oam_zte_vlan_mac));
+                    }
+                }
+
+                for (i6 = 0; i6 < this->u.onu_port_mac_static.number_of_entries; i6++)
+                {
+                    if (!bcmolt_epon_oam_zte_vlan_mac_unpack(&this->u.onu_port_mac_static.clause[i6], &postLenBuf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.onu_port_mac_static.width == 0) ? 0x0080 : this->u.onu_port_mac_static.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PERFORMANCE_STAT:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.onu_performance_stat.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.onu_performance_stat.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.onu_performance_stat.width == 0) ? 0x0080 : this->u.onu_performance_stat.width, buf->curr);
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_performance_stat.ifinoctets))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_performance_stat.ifinucastpkts))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_performance_stat.ifinnucastpkts))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_performance_stat.ifindiscards))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_performance_stat.ifinerrors))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_performance_stat.ifoutoctets))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_performance_stat.ifoutucastpkts))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_performance_stat.ifoutnucastpkts))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_performance_stat.ifoutdiscards))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_performance_stat.ifouterrors))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_performance_stat.reserved1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_performance_stat.reserved2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_performance_stat.reserved3))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_performance_stat.reserved4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.onu_performance_stat.width == 0) ? 0x0080 : this->u.onu_performance_stat.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PORT_ISOLATE:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.onu_port_isolate.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_zte_isolate_mode_unpack(&this->u.onu_port_isolate.port_isolate, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_MAC_ADDRESS_TABLE_QUERY:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.onu_mac_address_table_query.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.onu_mac_address_table_query.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.onu_mac_address_table_query.width == 0) ? 0x0080 : this->u.onu_mac_address_table_query.width, buf->curr);
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.onu_mac_address_table_query.width == 0) ? 0x0080 : this->u.onu_mac_address_table_query.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PON_MAC_DOWNSTREAM_SHAPING:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.onu_pon_mac_downstream_shaping.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.onu_pon_mac_downstream_shaping.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.onu_pon_mac_downstream_shaping.width == 0) ? 0x0080 : this->u.onu_pon_mac_downstream_shaping.width, buf->curr);
+                if (!bcmolt_epon_oam_buf_read_bool(&postLenBuf, &this->u.onu_pon_mac_downstream_shaping.ponmacdsratelimitingenable))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u24(&postLenBuf, &this->u.onu_pon_mac_downstream_shaping.cir))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u24(&postLenBuf, &this->u.onu_pon_mac_downstream_shaping.cbs))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.onu_pon_mac_downstream_shaping.width == 0) ? 0x0080 : this->u.onu_pon_mac_downstream_shaping.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PON_MAC_USDSBUFFER_CAPABILITY_QUERY:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.onu_pon_mac_usdsbuffer_capability_query.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.onu_pon_mac_usdsbuffer_capability_query.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.onu_pon_mac_usdsbuffer_capability_query.width == 0) ? 0x0080 : this->u.onu_pon_mac_usdsbuffer_capability_query.width, buf->curr);
+                if (!bcmolt_epon_oam_zte_buffer_manage_mode_unpack(&this->u.onu_pon_mac_usdsbuffer_capability_query.buffer_management_capability, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u24(&postLenBuf, &this->u.onu_pon_mac_usdsbuffer_capability_query.dsbuffer_size_minimum_value))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u24(&postLenBuf, &this->u.onu_pon_mac_usdsbuffer_capability_query.dsbuffer_size_maximum_value))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u24(&postLenBuf, &this->u.onu_pon_mac_usdsbuffer_capability_query.usbuffer_size_minimum_value))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u24(&postLenBuf, &this->u.onu_pon_mac_usdsbuffer_capability_query.usbuffer_size_maximum_value))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.onu_pon_mac_usdsbuffer_capability_query.width == 0) ? 0x0080 : this->u.onu_pon_mac_usdsbuffer_capability_query.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PON_MAC_USDSBUFFER:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.onu_pon_mac_usdsbuffer.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.onu_pon_mac_usdsbuffer.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.onu_pon_mac_usdsbuffer.width == 0) ? 0x0080 : this->u.onu_pon_mac_usdsbuffer.width, buf->curr);
+                if (!bcmolt_epon_oam_buf_read_bool(&postLenBuf, &this->u.onu_pon_mac_usdsbuffer.buffer_management_indication))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_zte_dsbuf_direction_unpack(&this->u.onu_pon_mac_usdsbuffer.direction, &postLenBuf))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u24(&postLenBuf, &this->u.onu_pon_mac_usdsbuffer.buffer_size))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.onu_pon_mac_usdsbuffer.width == 0) ? 0x0080 : this->u.onu_pon_mac_usdsbuffer.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PORT_STATISTICS_COLLECT_CONTROL:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.onu_port_statistics_collect_control.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.onu_port_statistics_collect_control.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.onu_port_statistics_collect_control.width == 0) ? 0x0080 : this->u.onu_port_statistics_collect_control.width, buf->curr);
+                if (!bcmolt_epon_oam_zte_statistics_action_mode_unpack(&this->u.onu_port_statistics_collect_control.statistics_action, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u24(&postLenBuf, &this->u.onu_port_statistics_collect_control.statistics_interval))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.onu_port_statistics_collect_control.statistics_duration_time))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.onu_port_statistics_collect_control.width == 0) ? 0x0080 : this->u.onu_port_statistics_collect_control.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PORT_STATISTICS_COUNTER_RESET:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.onu_port_statistics_counter_reset.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.onu_port_statistics_counter_reset.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.onu_port_statistics_counter_reset.width == 0) ? 0x0080 : this->u.onu_port_statistics_counter_reset.width, buf->curr);
+                if (!bcmolt_epon_oam_zte_statistics_reset_mode_unpack(&this->u.onu_port_statistics_counter_reset.statistics_reset, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.onu_port_statistics_counter_reset.width == 0) ? 0x0080 : this->u.onu_port_statistics_counter_reset.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PORT_FLUX_STATISTICS_COUNTER:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.onu_port_flux_statistics_counter.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.onu_port_flux_statistics_counter.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.onu_port_flux_statistics_counter.width == 0) ? 0x0080 : this->u.onu_port_flux_statistics_counter.width, buf->curr);
+                if (!bcmolt_epon_oam_uni_flow_statistics_collect_control_mode_unpack(&this->u.onu_port_flux_statistics_counter.uniflowstatisticscollectcontrolindication, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_port_flux_statistics_counter.ifinoctets))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_port_flux_statistics_counter.ifinucastpkts))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_port_flux_statistics_counter.ifinnucastpkts))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_port_flux_statistics_counter.ifindiscards))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_port_flux_statistics_counter.ifinerrors))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_port_flux_statistics_counter.ifoutoctets))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_port_flux_statistics_counter.ifoutucastpkts))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_port_flux_statistics_counter.ifoutnucastpkts))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_port_flux_statistics_counter.ifoutdiscards))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_port_flux_statistics_counter.ifouterrors))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.onu_port_flux_statistics_counter.width == 0) ? 0x0080 : this->u.onu_port_flux_statistics_counter.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_LIGHT_EXCEPTION:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.onu_light_exception.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.onu_light_exception.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.onu_light_exception.width == 0) ? 0x0080 : this->u.onu_light_exception.width, buf->curr);
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.onu_light_exception.ponportnumber))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_light_indication_mode_unpack(&this->u.onu_light_exception.main_light_indication, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_light_indication_mode_unpack(&this->u.onu_light_exception.reserve_light_indication, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.onu_light_exception.width == 0) ? 0x0080 : this->u.onu_light_exception.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_LIGHT_CONTROL:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.onu_light_control.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.onu_light_control.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.onu_light_control.width == 0) ? 0x0080 : this->u.onu_light_control.width, buf->curr);
+                if (!bcmolt_epon_oam_match_mac_address_mode_unpack(&this->u.onu_light_control.match_mac_address, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_mac_address(&postLenBuf, &this->u.onu_light_control.pon_mac_address))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_zte_light_control_action_mode_unpack(&this->u.onu_light_control.action, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.onu_light_control.duration_time))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.onu_light_control.width == 0) ? 0x0080 : this->u.onu_light_control.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PON_PORT_STATISTICS_GET1:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.onu_pon_port_statistics_get1.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.onu_pon_port_statistics_get1.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.onu_pon_port_statistics_get1.width == 0) ? 0x0080 : this->u.onu_pon_port_statistics_get1.width, buf->curr);
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_pon_port_statistics_get1.frames_transmittedok))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_pon_port_statistics_get1.octets_transmittedok))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_pon_port_statistics_get1.multicast_framesxmitted_ok))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_pon_port_statistics_get1.broadcast_framesxmitted_ok))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_pon_port_statistics_get1.frames_received_ok))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_pon_port_statistics_get1.octets_received_ok))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_pon_port_statistics_get1.multicast_frames_received_ok))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_pon_port_statistics_get1.broadcast_frames_received_ok))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.onu_pon_port_statistics_get1.width == 0) ? 0x0080 : this->u.onu_pon_port_statistics_get1.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PON_PORT_STATISTICS_GET2:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.onu_pon_port_statistics_get2.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.onu_pon_port_statistics_get2.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.onu_pon_port_statistics_get2.width == 0) ? 0x0080 : this->u.onu_pon_port_statistics_get2.width, buf->curr);
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_pon_port_statistics_get2.crc8errors))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_pon_port_statistics_get2.fec_corrected_blocks))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_pon_port_statistics_get2.fec_uncorrectable_blocks))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_pon_port_statistics_get2.mpcp_mac_ctrl_frames_transmitted))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_pon_port_statistics_get2.mpcp_mac_ctrl_frames_received))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_pon_port_statistics_get2.mpcp_tx_register))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_pon_port_statistics_get2.mpcp_tx_regrequest))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_pon_port_statistics_get2.mpcp_tx_report))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_pon_port_statistics_get2.mpcp_rx_gate))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_pon_port_statistics_get2.mpcp_rx_registe))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.onu_pon_port_statistics_get2.width == 0) ? 0x0080 : this->u.onu_pon_port_statistics_get2.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ALARM_CONFIG:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.alarm_config.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.alarm_config.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.alarm_config.width == 0) ? 0x0080 : this->u.alarm_config.width, buf->curr);
+                if (!bcmolt_epon_oam_alarm_config_mode_unpack(&this->u.alarm_config.alarm_config, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.alarm_config.width == 0) ? 0x0080 : this->u.alarm_config.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ROUGUE_ONU_EXCL_ABILITY:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.rougue_onu_excl_ability.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.rougue_onu_excl_ability.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.rougue_onu_excl_ability.width == 0) ? 0x0080 : this->u.rougue_onu_excl_ability.width, buf->curr);
+                if (!bcmolt_epon_oam_onu_excl_ability_unpack(&this->u.rougue_onu_excl_ability.ability, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.rougue_onu_excl_ability.width == 0) ? 0x0080 : this->u.rougue_onu_excl_ability.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_POWER_SAVING_CAPABILITIES:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.onu_power_saving_capabilities.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.onu_power_saving_capabilities.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.onu_power_saving_capabilities.width == 0) ? 0x0080 : this->u.onu_power_saving_capabilities.width, buf->curr);
+                if (!bcmolt_epon_oam_ctc_onu_sleep_mode_unpack(&this->u.onu_power_saving_capabilities.sleep_mode_capability, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_onu_early_wake_capability_unpack(&this->u.onu_power_saving_capabilities.early_wake_up_capability, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.onu_power_saving_capabilities.width == 0) ? 0x0080 : this->u.onu_power_saving_capabilities.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_POWER_SAVING_CONFIG:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.onu_power_saving_config.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.onu_power_saving_config.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.onu_power_saving_config.width == 0) ? 0x0080 : this->u.onu_power_saving_config.width, buf->curr);
+                if (!bcmolt_epon_oam_ctc_early_wake_up_mode_unpack(&this->u.onu_power_saving_config.early_wake_up, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.onu_power_saving_config.sleep_duration_max, 6))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.onu_power_saving_config.width == 0) ? 0x0080 : this->u.onu_power_saving_config.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PROTECTION_PARAMETERS:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.onu_protection_parameters.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.onu_protection_parameters.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.onu_protection_parameters.width == 0) ? 0x0080 : this->u.onu_protection_parameters.width, buf->curr);
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.onu_protection_parameters.optical_los_time))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.onu_protection_parameters.mac_los_time))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.onu_protection_parameters.width == 0) ? 0x0080 : this->u.onu_protection_parameters.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_PORT_DISABLE_ON_LOOP_DETECTED:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.port_disable_on_loop_detected.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.port_disable_on_loop_detected.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.port_disable_on_loop_detected.width == 0) ? 0x0080 : this->u.port_disable_on_loop_detected.width, buf->curr);
+                if (!bcmolt_epon_oam_ctc_port_disable_on_loop_detected_state_unpack(&this->u.port_disable_on_loop_detected.state, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.port_disable_on_loop_detected.width == 0) ? 0x0080 : this->u.port_disable_on_loop_detected.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_MAC_AGING_TIME:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.mac_aging_time.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.mac_aging_time.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.mac_aging_time.width == 0) ? 0x0080 : this->u.mac_aging_time.width, buf->curr);
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.mac_aging_time.aging_time))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.mac_aging_time.width == 0) ? 0x0080 : this->u.mac_aging_time.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_PERFORMANCE_MONITORING_STATUS:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.performance_monitoring_status.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.performance_monitoring_status.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.performance_monitoring_status.width == 0) ? 0x0080 : this->u.performance_monitoring_status.width, buf->curr);
+                if (!bcmolt_epon_oam_ctc_monitoring_status_unpack(&this->u.performance_monitoring_status.monitoring_status, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.performance_monitoring_status.monitoring_period))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.performance_monitoring_status.width == 0) ? 0x0080 : this->u.performance_monitoring_status.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_PERFORMANCE_MONITORING_CURRENT_DATA:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.performance_monitoring_current_data.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.performance_monitoring_current_data.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.performance_monitoring_current_data.width == 0) ? 0x0080 : this->u.performance_monitoring_current_data.width, buf->curr);
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.performance_monitoring_current_data.stats_field1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.performance_monitoring_current_data.stats_field2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.performance_monitoring_current_data.stats_field3))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.performance_monitoring_current_data.stats_field4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.performance_monitoring_current_data.stats_field5))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.performance_monitoring_current_data.stats_field6))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.performance_monitoring_current_data.stats_field7))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.performance_monitoring_current_data.stats_field8))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.performance_monitoring_current_data.stats_field9))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.performance_monitoring_current_data.stats_field10))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.performance_monitoring_current_data.stats_field11))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.performance_monitoring_current_data.stats_field12))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.performance_monitoring_current_data.stats_field13))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.performance_monitoring_current_data.stats_field14))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.performance_monitoring_current_data.stats_field15))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.performance_monitoring_current_data.stats_field16))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.performance_monitoring_current_data.width == 0) ? 0x0080 : this->u.performance_monitoring_current_data.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_PERFORMANCE_MONITORING_HISTORY_DATA:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.performance_monitoring_history_data.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.performance_monitoring_history_data.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.performance_monitoring_history_data.width == 0) ? 0x0080 : this->u.performance_monitoring_history_data.width, buf->curr);
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.performance_monitoring_history_data.stats_field1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.performance_monitoring_history_data.stats_field2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.performance_monitoring_history_data.stats_field3))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.performance_monitoring_history_data.stats_field4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.performance_monitoring_history_data.stats_field5))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.performance_monitoring_history_data.stats_field6))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.performance_monitoring_history_data.stats_field7))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.performance_monitoring_history_data.stats_field8))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.performance_monitoring_history_data.stats_field9))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.performance_monitoring_history_data.stats_field10))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.performance_monitoring_history_data.stats_field11))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.performance_monitoring_history_data.stats_field12))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.performance_monitoring_history_data.stats_field13))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.performance_monitoring_history_data.stats_field14))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.performance_monitoring_history_data.stats_field15))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.performance_monitoring_history_data.stats_field16))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.performance_monitoring_history_data.width == 0) ? 0x0080 : this->u.performance_monitoring_history_data.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_TX_POWER_SUPPLY_CONTROL:
+            {
+                uint8_t width = 0;
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, width, buf->curr);
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.onu_tx_power_supply_control.action))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_mac_address(&postLenBuf, &this->u.onu_tx_power_supply_control.onu_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.onu_tx_power_supply_control.opt_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.def.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.def.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.def.width == 0) ? 0x0080 : this->u.def.width, buf->curr);
+                this->u.def.unknown_count = bcmolt_epon_oam_ctc_ext_attribute_value_base_def_count_unknown(&postLenBuf);
+                if ((this->u.def.unknown_count > 0) && (this->u.def.unknown == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"unknown\" of struct \"bcmolt_epon_oam_ctc_ext_attribute_value_base_def\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.def.unknown = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.def.unknown_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.def.unknown, this->u.def.unknown_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.def.width == 0) ? 0x0080 : this->u.def.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_ext_attribute_value_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_ctc_leaf_ext_attribute leaf;
+    if (!bcmolt_epon_oam_ctc_leaf_ext_attribute_unpack(&leaf, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (leaf)
+    {
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_PPPO_ETEST_RESULT:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_PPPO_ETEST_CONFIGURATION:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 64))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 32))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_END:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                uint32_t unknown_elem_count = 0;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                    {
+                        break;
+                    }
+
+                    unknown_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(unknown_elem_count * sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_SERIAL_NUMBER:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 6))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 16))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_FIRMWARE_VERSION:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                uint32_t firmware_version_elem_count = 0;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                    {
+                        break;
+                    }
+
+                    firmware_version_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(firmware_version_elem_count * sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_CHIPSET_ID:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 3))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_CAPABILITIES1:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_OPTICAL_TRANSCEIVER_DIAGNOSIS:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_SERVICE_SLA:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_ctc_onu_service_sla_base_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_CAPABILITIES2:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                uint8_t interfaces_count;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &interfaces_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_ctc_onu_interface) * interfaces_count);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, interfaces_count * 6))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_HOLDOVER_CONFIG:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_MXU_MANAGE_GLOBAL_PARAMETER:
+            {
+                if (!bcmolt_epon_oam_ctc_mxu_global_params_base_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_MXU_MANAGE_SNMP_PARAMETER:
+            {
+                if (!bcmolt_epon_oam_ctc_mxu_snmp_params_base_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ACTIVE_PON_IFADMIN:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_CAPABILITIES3:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ETH_LINK_STATE:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ETH_PORT_PAUSE:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ETH_PORT_POLICING:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_ctc_eth_port_policing_config_base_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_VOIP_PORT:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_E1PORT:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ETH_PORT_DOWN_RATE_LIMITING:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 3))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 3))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_PORT_LOOP_DETECT:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_VLAN:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_ctc_vlan_prov_base_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_CLASSIFICATION_AND_MARKING:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                uint8_t rules_count;
+                uint8_t i0;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &rules_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_ctc_rule) * rules_count);
+                for (i0 = 0; i0 < rules_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_ctc_rule_scan(&postLenBuf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_MULTICAST_VLAN:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_ctc_multicast_vlan_prov_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_MULTICAST_TAG_OPERATION:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_ctc_multicast_tag_operation_base_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_MULTICAST_SWITCH:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_MULTICAST_CONTROL:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_ctc_multicast_control_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_GROUP_MAX:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_FAST_LEAVE_ABILITY:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                uint32_t fast_leave_modes_count;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &fast_leave_modes_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint32_t) * fast_leave_modes_count);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, fast_leave_modes_count * 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_FAST_LEAVE_ADMIN_STATE:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_LLID_QUEUE_CONFIG:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                uint8_t llid_queue_table_count;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &llid_queue_table_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_ctc_onu_llid_queue) * llid_queue_table_count);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, llid_queue_table_count * 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_IAD_INFORMATION:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 6))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 32))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 32))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_VOIP_GLOBAL_PARAMETERS:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 32))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 32))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_H248PARAMETERS:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 64))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_H248USER_TID_INFORMATION:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 32))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_H248RTP_TID_CONFIGURATION:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_H248RTP_TID_INFORMATION:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 32))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_SIP_PARAMETERS:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_SIP_USER_PARAMETERS:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 32))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_FAX_MODEM_CONFIGURATION:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_H248IAD_OPERATION_STATUS:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_POTS_STATUS:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_IAD_OPERATION:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_SIP_DIGIT_MAP:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                uint16_t sip_digital_map_count;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &sip_digital_map_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * sip_digital_map_count);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, sip_digital_map_count * 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ALARM_ADMIN_STATE:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ALARM_THRESHOLD:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_VERSION_SERVER_PARA:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_MAC_LIMIT:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_MAC_AGING_TIME:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PORT_MAC_FILTER:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                uint8_t number_of_entries;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &number_of_entries))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_zte_vlan_mac) * number_of_entries);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, number_of_entries * 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PORT_MAC_BINDING:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                uint8_t number_of_entries;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &number_of_entries))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_zte_vlan_mac) * number_of_entries);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, number_of_entries * 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PORT_MAC_STATIC:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                uint8_t number_of_entries;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &number_of_entries))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_zte_vlan_mac) * number_of_entries);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, number_of_entries * 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PERFORMANCE_STAT:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PORT_ISOLATE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_MAC_ADDRESS_TABLE_QUERY:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PON_MAC_DOWNSTREAM_SHAPING:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 3))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 3))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PON_MAC_USDSBUFFER_CAPABILITY_QUERY:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 3))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 3))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 3))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 3))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PON_MAC_USDSBUFFER:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 3))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PORT_STATISTICS_COLLECT_CONTROL:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 3))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PORT_STATISTICS_COUNTER_RESET:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PORT_FLUX_STATISTICS_COUNTER:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_LIGHT_EXCEPTION:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_LIGHT_CONTROL:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 6))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PON_PORT_STATISTICS_GET1:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PON_PORT_STATISTICS_GET2:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ALARM_CONFIG:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ROUGUE_ONU_EXCL_ABILITY:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_POWER_SAVING_CAPABILITIES:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_POWER_SAVING_CONFIG:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 6))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PROTECTION_PARAMETERS:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_PORT_DISABLE_ON_LOOP_DETECTED:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_MAC_AGING_TIME:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_PERFORMANCE_MONITORING_STATUS:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_PERFORMANCE_MONITORING_CURRENT_DATA:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_PERFORMANCE_MONITORING_HISTORY_DATA:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_TX_POWER_SUPPLY_CONTROL:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 6))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                uint32_t unknown_elem_count = 0;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                    {
+                        break;
+                    }
+
+                    unknown_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(unknown_elem_count * sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_ext_attribute_value_base_def_count_unknown(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_ext_attribute_value_base_end_count_unknown(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_ext_attribute_value_base_firmware_version_count_firmware_version(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_file_check_base_pack(bcmolt_epon_oam_ctc_file_check_base *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_ctc_file_check_opcode_pack(this->opcode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->opcode)
+    {
+        case BCMOLT_EPON_OAM_CTC_FILE_CHECK_OPCODE_END_DOWNLOAD_REQUEST:
+            {
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.end_download_request.file_size))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_FILE_CHECK_OPCODE_END_DOWNLOAD_RESPONSE:
+            {
+                if (!bcmolt_epon_oam_ctc_rps_code_pack(this->u.end_download_response.rps_code, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_file_check_base_get_packed_length(bcmolt_epon_oam_ctc_file_check_base *this)
+{
+    uint32_t count = 2;
+    switch (this->opcode)
+    {
+        case BCMOLT_EPON_OAM_CTC_FILE_CHECK_OPCODE_END_DOWNLOAD_REQUEST:
+            {
+                count += 4;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_FILE_CHECK_OPCODE_END_DOWNLOAD_RESPONSE:
+            {
+                count += 1;
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_file_check_base_unpack(bcmolt_epon_oam_ctc_file_check_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_ctc_file_check_opcode_unpack(&this->opcode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->opcode)
+    {
+        case BCMOLT_EPON_OAM_CTC_FILE_CHECK_OPCODE_END_DOWNLOAD_REQUEST:
+            {
+                if (!bcmolt_epon_oam_buf_read_u32(buf, &this->u.end_download_request.file_size))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_FILE_CHECK_OPCODE_END_DOWNLOAD_RESPONSE:
+            {
+                if (!bcmolt_epon_oam_ctc_rps_code_unpack(&this->u.end_download_response.rps_code, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_file_check_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_ctc_file_check_opcode opcode;
+    if (!bcmolt_epon_oam_ctc_file_check_opcode_unpack(&opcode, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (opcode)
+    {
+        case BCMOLT_EPON_OAM_CTC_FILE_CHECK_OPCODE_END_DOWNLOAD_REQUEST:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_FILE_CHECK_OPCODE_END_DOWNLOAD_RESPONSE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_oui_version_pair_pack(bcmolt_epon_oam_ctc_oui_version_pair *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_well_known_oui_pack(this->oui, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->version))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_oui_version_pair_unpack(bcmolt_epon_oam_ctc_oui_version_pair *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_well_known_oui_unpack(&this->oui, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->version))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_oui_version_pair_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 4);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_performance_monitoring_data_pack(bcmolt_epon_oam_ctc_performance_monitoring_data *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->downstream_drop_events))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->upstream_drop_events))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->downstream_octets))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->upstream_octets))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->downstream_frames))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->upstream_frames))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->downstream_broadcast_frames))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->upstream_broadcast_frames))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->downstream_multicast_frames))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->upstream_multicast_frames))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->downstream_crc_errored_frames))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->upstream_crc_errored_frames))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->downstream_undersize_frames))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->upstream_undersize_frames))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->downstream_oversize_frames))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->upstream_oversize_frames))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->downstream_fragments))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->upstream_fragments))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->downstream_jabbers))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->upstream_jabbers))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->downstream_frames64octets))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->downstream_frames65to127octets))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->downstream_frames128to255octets))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->downstream_frames256to511octets))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->downstream_frames512to1023octets))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->downstream_frames1024to1518octets))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->upstream_frames64octets))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->upstream_frames65to127octets))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->upstream_frames128to255octets))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->upstream_frames256to511octets))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->upstream_frames512to1023octets))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->upstream_frames1024to1518octets))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->downstream_discards))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->upstream_discards))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->downstream_errors))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->upstream_errors))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->status_change_times))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_performance_monitoring_data_unpack(bcmolt_epon_oam_ctc_performance_monitoring_data *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->downstream_drop_events))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->upstream_drop_events))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->downstream_octets))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->upstream_octets))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->downstream_frames))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->upstream_frames))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->downstream_broadcast_frames))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->upstream_broadcast_frames))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->downstream_multicast_frames))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->upstream_multicast_frames))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->downstream_crc_errored_frames))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->upstream_crc_errored_frames))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->downstream_undersize_frames))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->upstream_undersize_frames))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->downstream_oversize_frames))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->upstream_oversize_frames))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->downstream_fragments))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->upstream_fragments))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->downstream_jabbers))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->upstream_jabbers))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->downstream_frames64octets))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->downstream_frames65to127octets))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->downstream_frames128to255octets))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->downstream_frames256to511octets))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->downstream_frames512to1023octets))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->downstream_frames1024to1518octets))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->upstream_frames64octets))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->upstream_frames65to127octets))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->upstream_frames128to255octets))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->upstream_frames256to511octets))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->upstream_frames512to1023octets))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->upstream_frames1024to1518octets))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->downstream_discards))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->upstream_discards))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->downstream_errors))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->upstream_errors))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->status_change_times))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_performance_monitoring_data_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 296);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_tftp_base_pack(bcmolt_epon_oam_ctc_tftp_base *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_ctc_tftp_op_code_pack(this->opcode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->opcode)
+    {
+        case BCMOLT_EPON_OAM_CTC_TFTP_OP_CODE_WRITE_REQUEST:
+            {
+                if ((this->u.write_request.filename_count > 0) && (this->u.write_request.filename == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"filename\" of struct \"bcmolt_epon_oam_ctc_tftp_base_write_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.write_request.filename, this->u.write_request.filename_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, 0))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.write_request.mode_count > 0) && (this->u.write_request.mode == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"mode\" of struct \"bcmolt_epon_oam_ctc_tftp_base_write_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.write_request.mode, this->u.write_request.mode_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, 0))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_TFTP_OP_CODE_DATA:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.data.block_number))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.data.data_count > 0) && (this->u.data.data == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"data\" of struct \"bcmolt_epon_oam_ctc_tftp_base_data\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.data.data, this->u.data.data_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_TFTP_OP_CODE_ACK:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.ack.block_number))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_TFTP_OP_CODE_ERROR:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.error.code))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.error.message_count > 0) && (this->u.error.message == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"message\" of struct \"bcmolt_epon_oam_ctc_tftp_base_error\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.error.message, this->u.error.message_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, 0))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_tftp_base_get_packed_length(bcmolt_epon_oam_ctc_tftp_base *this)
+{
+    uint32_t count = 2;
+    switch (this->opcode)
+    {
+        case BCMOLT_EPON_OAM_CTC_TFTP_OP_CODE_WRITE_REQUEST:
+            {
+                count += (this->u.write_request.filename_count + 1) + (this->u.write_request.mode_count + 1);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_TFTP_OP_CODE_DATA:
+            {
+                count += 2 + this->u.data.data_count;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_TFTP_OP_CODE_ACK:
+            {
+                count += 2;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_TFTP_OP_CODE_ERROR:
+            {
+                count += 2 + (this->u.error.message_count + 1);
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_tftp_base_unpack(bcmolt_epon_oam_ctc_tftp_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_ctc_tftp_op_code_unpack(&this->opcode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->opcode)
+    {
+        case BCMOLT_EPON_OAM_CTC_TFTP_OP_CODE_WRITE_REQUEST:
+            {
+                this->u.write_request.filename_count = bcmolt_epon_oam_ctc_tftp_base_write_request_count_filename(buf);
+                if ((this->u.write_request.filename_count > 0) && (this->u.write_request.filename == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"filename\" of struct \"bcmolt_epon_oam_ctc_tftp_base_write_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.write_request.filename = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.write_request.filename_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.write_request.filename, this->u.write_request.filename_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                this->u.write_request.mode_count = bcmolt_epon_oam_ctc_tftp_base_write_request_count_mode(buf);
+                if ((this->u.write_request.mode_count > 0) && (this->u.write_request.mode == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"mode\" of struct \"bcmolt_epon_oam_ctc_tftp_base_write_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.write_request.mode = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.write_request.mode_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.write_request.mode, this->u.write_request.mode_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_TFTP_OP_CODE_DATA:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.data.block_number))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                this->u.data.data_count = bcmolt_epon_oam_ctc_tftp_base_data_count_data(buf);
+                if ((this->u.data.data_count > 0) && (this->u.data.data == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"data\" of struct \"bcmolt_epon_oam_ctc_tftp_base_data\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.data.data = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.data.data_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.data.data, this->u.data.data_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_TFTP_OP_CODE_ACK:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.ack.block_number))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_TFTP_OP_CODE_ERROR:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.error.code))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                this->u.error.message_count = bcmolt_epon_oam_ctc_tftp_base_error_count_message(buf);
+                if ((this->u.error.message_count > 0) && (this->u.error.message == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"message\" of struct \"bcmolt_epon_oam_ctc_tftp_base_error\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.error.message = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.error.message_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.error.message, this->u.error.message_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_tftp_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_ctc_tftp_op_code opcode;
+    if (!bcmolt_epon_oam_ctc_tftp_op_code_unpack(&opcode, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (opcode)
+    {
+        case BCMOLT_EPON_OAM_CTC_TFTP_OP_CODE_WRITE_REQUEST:
+            {
+                uint32_t filename_elem_count = 0;
+                uint32_t mode_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    uint8_t dummy;
+                    if (!bcmolt_epon_oam_buf_read_u8(packed, &dummy))
+                    {
+                        break;
+                    }
+
+                    if (dummy == 0)
+                    {
+                        break;
+                    }
+
+                    filename_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(filename_elem_count * sizeof(uint8_t));
+                while (BCMOS_TRUE)
+                {
+                    uint8_t dummy;
+                    if (!bcmolt_epon_oam_buf_read_u8(packed, &dummy))
+                    {
+                        break;
+                    }
+
+                    if (dummy == 0)
+                    {
+                        break;
+                    }
+
+                    mode_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(mode_elem_count * sizeof(uint8_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_TFTP_OP_CODE_DATA:
+            {
+                uint32_t data_elem_count = 0;
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                    {
+                        break;
+                    }
+
+                    data_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(data_elem_count * sizeof(uint8_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_TFTP_OP_CODE_ACK:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_TFTP_OP_CODE_ERROR:
+            {
+                uint32_t message_elem_count = 0;
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                while (BCMOS_TRUE)
+                {
+                    uint8_t dummy;
+                    if (!bcmolt_epon_oam_buf_read_u8(packed, &dummy))
+                    {
+                        break;
+                    }
+
+                    if (dummy == 0)
+                    {
+                        break;
+                    }
+
+                    message_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(message_elem_count * sizeof(uint8_t));
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_tftp_base_write_request_count_filename(bcmolt_epon_oam_buf *buf)
+{
+    uint32_t count = 0;
+    uint8_t dummy;
+    bcmolt_epon_oam_buf bufClone = *buf;
+    while (BCMOS_TRUE)
+    {
+        if (!bcmolt_epon_oam_buf_read_u8(&bufClone, &dummy))
+        {
+            break;
+        }
+
+        if (dummy == 0)
+        {
+            break;
+        }
+
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_tftp_base_write_request_count_mode(bcmolt_epon_oam_buf *buf)
+{
+    uint32_t count = 0;
+    uint8_t dummy;
+    bcmolt_epon_oam_buf bufClone = *buf;
+    while (BCMOS_TRUE)
+    {
+        if (!bcmolt_epon_oam_buf_read_u8(&bufClone, &dummy))
+        {
+            break;
+        }
+
+        if (dummy == 0)
+        {
+            break;
+        }
+
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_tftp_base_data_count_data(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_tftp_base_error_count_message(bcmolt_epon_oam_buf *buf)
+{
+    uint32_t count = 0;
+    uint8_t dummy;
+    bcmolt_epon_oam_buf bufClone = *buf;
+    while (BCMOS_TRUE)
+    {
+        if (!bcmolt_epon_oam_buf_read_u8(&bufClone, &dummy))
+        {
+            break;
+        }
+
+        if (dummy == 0)
+        {
+            break;
+        }
+
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_swmirror_base_pack(bcmolt_epon_oam_ctc_swmirror_base *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_ctc_swmirror_opcode_pack(this->opcode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->opcode)
+    {
+        case BCMOLT_EPON_OAM_CTC_SWMIRROR_OPCODE_ACTIVATE_IMAGE_REQUEST:
+            {
+                if (!bcmolt_epon_oam_ctc_swmirror_activate_image_flag_pack(this->u.activate_image_request.flag, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_SWMIRROR_OPCODE_ACTIVATE_IMAGE_RESPONSE:
+            {
+                if (!bcmolt_epon_oam_ctc_swmirror_ack_pack(this->u.activate_image_response.ack, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_swmirror_base_get_packed_length(bcmolt_epon_oam_ctc_swmirror_base *this)
+{
+    uint32_t count = 2;
+    switch (this->opcode)
+    {
+        case BCMOLT_EPON_OAM_CTC_SWMIRROR_OPCODE_ACTIVATE_IMAGE_REQUEST:
+            {
+                count += 1;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_SWMIRROR_OPCODE_ACTIVATE_IMAGE_RESPONSE:
+            {
+                count += 1;
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_swmirror_base_unpack(bcmolt_epon_oam_ctc_swmirror_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_ctc_swmirror_opcode_unpack(&this->opcode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->opcode)
+    {
+        case BCMOLT_EPON_OAM_CTC_SWMIRROR_OPCODE_ACTIVATE_IMAGE_REQUEST:
+            {
+                if (!bcmolt_epon_oam_ctc_swmirror_activate_image_flag_unpack(&this->u.activate_image_request.flag, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_SWMIRROR_OPCODE_ACTIVATE_IMAGE_RESPONSE:
+            {
+                if (!bcmolt_epon_oam_ctc_swmirror_ack_unpack(&this->u.activate_image_response.ack, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_swmirror_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_ctc_swmirror_opcode opcode;
+    if (!bcmolt_epon_oam_ctc_swmirror_opcode_unpack(&opcode, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (opcode)
+    {
+        case BCMOLT_EPON_OAM_CTC_SWMIRROR_OPCODE_ACTIVATE_IMAGE_REQUEST:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_SWMIRROR_OPCODE_ACTIVATE_IMAGE_RESPONSE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_software_download_prov_base_pack(bcmolt_epon_oam_ctc_software_download_prov_base *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_ctc_software_download_data_type_pack(this->data_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->data_type)
+    {
+        case BCMOLT_EPON_OAM_CTC_SOFTWARE_DOWNLOAD_DATA_TYPE_TFTP:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.tftp.tid))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_tftp_base_pack(&this->u.tftp.tftp, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint16_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, bytesAfterLenField + 3))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint16_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_SOFTWARE_DOWNLOAD_DATA_TYPE_DATA_CHECKING:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.data_checking.tid))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_file_check_base_pack(&this->u.data_checking.file_check, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint16_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, bytesAfterLenField + 3))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint16_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_SOFTWARE_DOWNLOAD_DATA_TYPE_SWMIRRORING:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.swmirroring.tid))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_swmirror_base_pack(&this->u.swmirroring.swmirror, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint16_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, bytesAfterLenField + 3))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint16_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_SOFTWARE_DOWNLOAD_DATA_TYPE_COMMIT_IMAGE:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.commit_image.tid))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_commit_image_base_pack(&this->u.commit_image.commit_image, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint16_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, bytesAfterLenField + 3))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint16_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_software_download_prov_base_get_packed_length(bcmolt_epon_oam_ctc_software_download_prov_base *this)
+{
+    uint32_t count = 1;
+    switch (this->data_type)
+    {
+        case BCMOLT_EPON_OAM_CTC_SOFTWARE_DOWNLOAD_DATA_TYPE_TFTP:
+            {
+                count += 4 + bcmolt_epon_oam_ctc_tftp_base_get_packed_length(&this->u.tftp.tftp);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_SOFTWARE_DOWNLOAD_DATA_TYPE_DATA_CHECKING:
+            {
+                count += 4 + bcmolt_epon_oam_ctc_file_check_base_get_packed_length(&this->u.data_checking.file_check);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_SOFTWARE_DOWNLOAD_DATA_TYPE_SWMIRRORING:
+            {
+                count += 4 + bcmolt_epon_oam_ctc_swmirror_base_get_packed_length(&this->u.swmirroring.swmirror);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_SOFTWARE_DOWNLOAD_DATA_TYPE_COMMIT_IMAGE:
+            {
+                count += 4 + bcmolt_epon_oam_ctc_commit_image_base_get_packed_length(&this->u.commit_image.commit_image);
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_software_download_prov_base_unpack(bcmolt_epon_oam_ctc_software_download_prov_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_ctc_software_download_data_type_unpack(&this->data_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->data_type)
+    {
+        case BCMOLT_EPON_OAM_CTC_SOFTWARE_DOWNLOAD_DATA_TYPE_TFTP:
+            {
+                uint16_t length = 0;
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, length - 3, buf->curr);
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.tftp.tid))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_tftp_base_unpack(&this->u.tftp.tftp, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, length - 3))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_SOFTWARE_DOWNLOAD_DATA_TYPE_DATA_CHECKING:
+            {
+                uint16_t length = 0;
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, length - 3, buf->curr);
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.data_checking.tid))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_file_check_base_unpack(&this->u.data_checking.file_check, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, length - 3))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_SOFTWARE_DOWNLOAD_DATA_TYPE_SWMIRRORING:
+            {
+                uint16_t length = 0;
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, length - 3, buf->curr);
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.swmirroring.tid))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_swmirror_base_unpack(&this->u.swmirroring.swmirror, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, length - 3))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_SOFTWARE_DOWNLOAD_DATA_TYPE_COMMIT_IMAGE:
+            {
+                uint16_t length = 0;
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, length - 3, buf->curr);
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.commit_image.tid))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_commit_image_base_unpack(&this->u.commit_image.commit_image, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, length - 3))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_software_download_prov_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_ctc_software_download_data_type data_type;
+    if (!bcmolt_epon_oam_ctc_software_download_data_type_unpack(&data_type, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (data_type)
+    {
+        case BCMOLT_EPON_OAM_CTC_SOFTWARE_DOWNLOAD_DATA_TYPE_TFTP:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint16_t length;
+                if (!bcmolt_epon_oam_buf_read_u16(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, length - 3, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_tftp_base_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, length - 3))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_SOFTWARE_DOWNLOAD_DATA_TYPE_DATA_CHECKING:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint16_t length;
+                if (!bcmolt_epon_oam_buf_read_u16(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, length - 3, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_file_check_base_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, length - 3))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_SOFTWARE_DOWNLOAD_DATA_TYPE_SWMIRRORING:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint16_t length;
+                if (!bcmolt_epon_oam_buf_read_u16(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, length - 3, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_swmirror_base_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, length - 3))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_SOFTWARE_DOWNLOAD_DATA_TYPE_COMMIT_IMAGE:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint16_t length;
+                if (!bcmolt_epon_oam_buf_read_u16(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, length - 3, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ctc_commit_image_base_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, length - 3))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ktqueue_drop_counter_pack(bcmolt_epon_oam_ktqueue_drop_counter *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->txbytes))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->dropped_frames))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ktqueue_drop_counter_unpack(bcmolt_epon_oam_ktqueue_drop_counter *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->txbytes))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->dropped_frames))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ktqueue_drop_counter_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 8);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ktattribute_value_base_pack(bcmolt_epon_oam_ktattribute_value_base *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t preLenFieldPos;
+    uint32_t bytesAfterLenField;
+    if (!bcmolt_epon_oam_ktleaf_attribute_pack(this->leaf, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->width >= 0x0080)
+    {
+        bcmolt_epon_oam_buf_write_u8(buf, this->width);
+        return BCMOS_TRUE;
+    }
+
+    preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+    /* skip over length field (we'll fill it in later) */
+    if (!bcmolt_epon_oam_buf_skip(buf, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->leaf)
+    {
+        case BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_PORT_DOWNSTREAM_RATE_SHAPING:
+            {
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.port_downstream_rate_shaping.is_activated))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u24(buf, this->u.port_downstream_rate_shaping.rate))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_ONU_MAC_LIMIT:
+            {
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.onu_mac_limit.is_activated))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_mac_limit.limit))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_BLOCK_UNBLOCK_ONU_TRAFFIC:
+            {
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.block_unblock_onu_traffic.block))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_ONU_DIAGNOSTICS:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.onu_diagnostics.optics_module_temperature))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.onu_diagnostics.txoptics_power))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.onu_diagnostics.rxoptics_power))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_ONU_QUEUE_DROP_COUNTER:
+            {
+                uint8_t i0;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_queue_drop_counter.upstream_queues_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.onu_queue_drop_counter.upstream_queues_count > 0) && (this->u.onu_queue_drop_counter.upstream_queues == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"upstream_queues\" of struct \"bcmolt_epon_oam_ktattribute_value_base_onu_queue_drop_counter\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i0 = 0; i0 < this->u.onu_queue_drop_counter.upstream_queues_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_ktqueue_drop_counter_pack(&this->u.onu_queue_drop_counter.upstream_queues[i0], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_ETHERNET_PORT_COUNTER:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.ethernet_port_counter.counter_bit_mask))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.ethernet_port_counter.txframes))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.ethernet_port_counter.txbytes))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.ethernet_port_counter.txmulticast))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.ethernet_port_counter.txbroadcast))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.ethernet_port_counter.txdropped))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.ethernet_port_counter.rxframes))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.ethernet_port_counter.rxbytes))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.ethernet_port_counter.rxmulticast))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.ethernet_port_counter.rxbroadcast))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.ethernet_port_counter.rxoversized))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.ethernet_port_counter.rxundersized))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.ethernet_port_counter.rxcrc_errors))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_ETHERNET_PORT_RSTP:
+            {
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.ethernet_port_rstp.enabled))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_LOOP_DETECT:
+            {
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.loop_detect.enabled))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.loop_detect.interval))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.loop_detect.block_time))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_ONU_MPCP_COUNTER:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.onu_mpcp_counter.counter_bit_mask))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_mpcp_counter.rxhec_errors))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_mpcp_counter.rxregister))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_mpcp_counter.txregister_ack))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_mpcp_counter.rxgate_frames))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_mpcp_counter.txreport_frames))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_OPTICAL_POWER_ALARM_STATUS:
+            {
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.optical_power_alarm_status.enabled))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ktoptical_power_alarm_status_pack(this->u.optical_power_alarm_status.alarm_status, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_STATIC_MAC:
+            {
+                uint8_t i1;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.static_mac.macs_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.static_mac.macs_count > 0) && (this->u.static_mac.macs == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"macs\" of struct \"bcmolt_epon_oam_ktattribute_value_base_static_mac\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i1 = 0; i1 < this->u.static_mac.macs_count; i1++)
+                {
+                    if (!bcmolt_epon_oam_buf_write_mac_address(buf, this->u.static_mac.macs[i1]))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+    if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ktattribute_value_base_get_packed_length(bcmolt_epon_oam_ktattribute_value_base *this)
+{
+    if (this->width >= 0x0080)
+    {
+        return this->width;
+    }
+    else
+    {
+        uint32_t count = 3;
+        switch (this->leaf)
+        {
+            case BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_PORT_DOWNSTREAM_RATE_SHAPING:
+                {
+                    count += 4;
+                }
+                break;
+            case BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_ONU_MAC_LIMIT:
+                {
+                    count += 2;
+                }
+                break;
+            case BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_BLOCK_UNBLOCK_ONU_TRAFFIC:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_ONU_DIAGNOSTICS:
+                {
+                    count += 6;
+                }
+                break;
+            case BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_ONU_QUEUE_DROP_COUNTER:
+                {
+                    count += 1 + (8 * this->u.onu_queue_drop_counter.upstream_queues_count);
+                }
+                break;
+            case BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_ETHERNET_PORT_COUNTER:
+                {
+                    count += 98;
+                }
+                break;
+            case BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_ETHERNET_PORT_RSTP:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_LOOP_DETECT:
+                {
+                    count += 3;
+                }
+                break;
+            case BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_ONU_MPCP_COUNTER:
+                {
+                    count += 42;
+                }
+                break;
+            case BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_OPTICAL_POWER_ALARM_STATUS:
+                {
+                    count += 2;
+                }
+                break;
+            case BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_STATIC_MAC:
+                {
+                    count += 1 + (6 * this->u.static_mac.macs_count);
+                }
+                break;
+            default:
+                {
+                }
+                break;
+        }
+
+        return count;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ktattribute_value_base_unpack(bcmolt_epon_oam_ktattribute_value_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    bcmolt_epon_oam_buf postLenBuf;
+    if (!bcmolt_epon_oam_ktleaf_attribute_unpack(&this->leaf, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->width))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->width >= 0x0080)
+    {
+        return BCMOS_TRUE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, (this->width == 0) ? 0x0080 : this->width, buf->curr);
+    switch (this->leaf)
+    {
+        case BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_PORT_DOWNSTREAM_RATE_SHAPING:
+            {
+                if (!bcmolt_epon_oam_buf_read_bool(&postLenBuf, &this->u.port_downstream_rate_shaping.is_activated))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u24(&postLenBuf, &this->u.port_downstream_rate_shaping.rate))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_ONU_MAC_LIMIT:
+            {
+                if (!bcmolt_epon_oam_buf_read_bool(&postLenBuf, &this->u.onu_mac_limit.is_activated))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.onu_mac_limit.limit))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_BLOCK_UNBLOCK_ONU_TRAFFIC:
+            {
+                if (!bcmolt_epon_oam_buf_read_bool(&postLenBuf, &this->u.block_unblock_onu_traffic.block))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_ONU_DIAGNOSTICS:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.onu_diagnostics.optics_module_temperature))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.onu_diagnostics.txoptics_power))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.onu_diagnostics.rxoptics_power))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_ONU_QUEUE_DROP_COUNTER:
+            {
+                uint8_t i0;
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.onu_queue_drop_counter.upstream_queues_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.onu_queue_drop_counter.upstream_queues_count > 0) && (this->u.onu_queue_drop_counter.upstream_queues == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"upstream_queues\" of struct \"bcmolt_epon_oam_ktattribute_value_base_onu_queue_drop_counter\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.onu_queue_drop_counter.upstream_queues = (bcmolt_epon_oam_ktqueue_drop_counter *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.onu_queue_drop_counter.upstream_queues_count * sizeof(bcmolt_epon_oam_ktqueue_drop_counter));
+                    }
+                }
+
+                for (i0 = 0; i0 < this->u.onu_queue_drop_counter.upstream_queues_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_ktqueue_drop_counter_unpack(&this->u.onu_queue_drop_counter.upstream_queues[i0], &postLenBuf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_ETHERNET_PORT_COUNTER:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.ethernet_port_counter.counter_bit_mask))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.ethernet_port_counter.txframes))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.ethernet_port_counter.txbytes))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.ethernet_port_counter.txmulticast))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.ethernet_port_counter.txbroadcast))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.ethernet_port_counter.txdropped))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.ethernet_port_counter.rxframes))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.ethernet_port_counter.rxbytes))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.ethernet_port_counter.rxmulticast))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.ethernet_port_counter.rxbroadcast))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.ethernet_port_counter.rxoversized))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.ethernet_port_counter.rxundersized))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.ethernet_port_counter.rxcrc_errors))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_ETHERNET_PORT_RSTP:
+            {
+                if (!bcmolt_epon_oam_buf_read_bool(&postLenBuf, &this->u.ethernet_port_rstp.enabled))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_LOOP_DETECT:
+            {
+                if (!bcmolt_epon_oam_buf_read_bool(&postLenBuf, &this->u.loop_detect.enabled))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.loop_detect.interval))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.loop_detect.block_time))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_ONU_MPCP_COUNTER:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.onu_mpcp_counter.counter_bit_mask))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_mpcp_counter.rxhec_errors))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_mpcp_counter.rxregister))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_mpcp_counter.txregister_ack))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_mpcp_counter.rxgate_frames))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.onu_mpcp_counter.txreport_frames))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_OPTICAL_POWER_ALARM_STATUS:
+            {
+                if (!bcmolt_epon_oam_buf_read_bool(&postLenBuf, &this->u.optical_power_alarm_status.enabled))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ktoptical_power_alarm_status_unpack(&this->u.optical_power_alarm_status.alarm_status, &postLenBuf))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_STATIC_MAC:
+            {
+                uint8_t i1;
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.static_mac.macs_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.static_mac.macs_count > 0) && (this->u.static_mac.macs == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"macs\" of struct \"bcmolt_epon_oam_ktattribute_value_base_static_mac\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.static_mac.macs = (bcmos_mac_address *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.static_mac.macs_count * sizeof(bcmos_mac_address));
+                    }
+                }
+
+                for (i1 = 0; i1 < this->u.static_mac.macs_count; i1++)
+                {
+                    if (!bcmolt_epon_oam_buf_read_mac_address(&postLenBuf, &this->u.static_mac.macs[i1]))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(buf, (this->width == 0) ? 0x0080 : this->width))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ktattribute_value_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_ktleaf_attribute leaf;
+    bcmolt_epon_oam_buf postLenBuf;
+    uint8_t length;
+    if (!bcmolt_epon_oam_ktleaf_attribute_unpack(&leaf, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (length >= 0x0080)
+    {
+        return BCMOS_TRUE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+    switch (leaf)
+    {
+        case BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_PORT_DOWNSTREAM_RATE_SHAPING:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 3))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_ONU_MAC_LIMIT:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_BLOCK_UNBLOCK_ONU_TRAFFIC:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_ONU_DIAGNOSTICS:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_ONU_QUEUE_DROP_COUNTER:
+            {
+                uint8_t upstream_queues_count;
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &upstream_queues_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_ktqueue_drop_counter) * upstream_queues_count);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, upstream_queues_count * 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_ETHERNET_PORT_COUNTER:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_ETHERNET_PORT_RSTP:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_LOOP_DETECT:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_ONU_MPCP_COUNTER:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_OPTICAL_POWER_ALARM_STATUS:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_STATIC_MAC:
+            {
+                uint8_t macs_count;
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &macs_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmos_mac_address) * macs_count);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, macs_count * 6))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ktaction_value_base_pack(bcmolt_epon_oam_ktaction_value_base *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_ktleaf_action_pack(this->leaf, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->leaf)
+    {
+        case BCMOLT_EPON_OAM_KTLEAF_ACTION_ONU_COUNTER_CLEAR:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTLEAF_ACTION_RESTORE_ONU:
+            {
+                if ((this->u.restore_onu.unknown_count > 0) && (this->u.restore_onu.unknown == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"unknown\" of struct \"bcmolt_epon_oam_ktaction_value_base_restore_onu\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.restore_onu.unknown, this->u.restore_onu.unknown_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTLEAF_ACTION_TXPOWER_OFF:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (this->u.txpower_off.length >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.txpower_off.length);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.txpower_off.is_power_off))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.txpower_off.duration))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTLEAF_ACTION_END:
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ktaction_value_base_get_packed_length(bcmolt_epon_oam_ktaction_value_base *this)
+{
+    uint32_t count = 2;
+    switch (this->leaf)
+    {
+        case BCMOLT_EPON_OAM_KTLEAF_ACTION_ONU_COUNTER_CLEAR:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTLEAF_ACTION_RESTORE_ONU:
+            {
+                count += this->u.restore_onu.unknown_count;
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTLEAF_ACTION_TXPOWER_OFF:
+            {
+                count += 3;
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTLEAF_ACTION_END:
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ktaction_value_base_unpack(bcmolt_epon_oam_ktaction_value_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_ktleaf_action_unpack(&this->leaf, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->leaf)
+    {
+        case BCMOLT_EPON_OAM_KTLEAF_ACTION_ONU_COUNTER_CLEAR:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTLEAF_ACTION_RESTORE_ONU:
+            {
+                this->u.restore_onu.unknown_count = bcmolt_epon_oam_ktaction_value_base_restore_onu_count_unknown(buf);
+                if ((this->u.restore_onu.unknown_count > 0) && (this->u.restore_onu.unknown == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"unknown\" of struct \"bcmolt_epon_oam_ktaction_value_base_restore_onu\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.restore_onu.unknown = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.restore_onu.unknown_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.restore_onu.unknown, this->u.restore_onu.unknown_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTLEAF_ACTION_TXPOWER_OFF:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.txpower_off.length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.txpower_off.length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.txpower_off.length == 0) ? 0x0080 : this->u.txpower_off.length, buf->curr);
+                if (!bcmolt_epon_oam_buf_read_bool(&postLenBuf, &this->u.txpower_off.is_power_off))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.txpower_off.duration))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.txpower_off.length == 0) ? 0x0080 : this->u.txpower_off.length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTLEAF_ACTION_END:
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ktaction_value_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_ktleaf_action leaf;
+    if (!bcmolt_epon_oam_ktleaf_action_unpack(&leaf, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (leaf)
+    {
+        case BCMOLT_EPON_OAM_KTLEAF_ACTION_ONU_COUNTER_CLEAR:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTLEAF_ACTION_RESTORE_ONU:
+            {
+                uint32_t unknown_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                    {
+                        break;
+                    }
+
+                    unknown_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(unknown_elem_count * sizeof(uint8_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTLEAF_ACTION_TXPOWER_OFF:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTLEAF_ACTION_END:
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ktaction_value_base_restore_onu_count_unknown(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_var_container_base_pack(bcmolt_epon_oam_ctc_var_container_base *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_ctc_branch_pack(this->branch, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->branch)
+    {
+        case BCMOLT_EPON_OAM_CTC_BRANCH_END:
+            {
+                if ((this->u.end.unknown_count > 0) && (this->u.end.unknown == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"unknown\" of struct \"bcmolt_epon_oam_ctc_var_container_base_end\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.end.unknown, this->u.end.unknown_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_ctc_attribute_value_base_pack(&this->u.attribute.attribute, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_ACTION:
+            {
+                if (!bcmolt_epon_oam_ctc_action_value_pack(&this->u.action.action, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_OLD_MANAGEMENT_OBJECT:
+            {
+                if (!bcmolt_epon_oam_ctc_old_management_object_base_pack(&this->u.old_management_object.object, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_MANAGEMENT_OBJECT:
+            {
+                if (!bcmolt_epon_oam_ctc_management_object_base_pack(&this->u.management_object.object, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_EXT_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_ctc_ext_attribute_value_base_pack(&this->u.ext_attribute.attribute, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_EXT_ACTION:
+            {
+                if (!bcmolt_epon_oam_ctc_ext_action_value_base_pack(&this->u.ext_action.attribute, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_KTATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_ktattribute_value_base_pack(&this->u.ktattribute.attribute, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_KTACTION:
+            {
+                if (!bcmolt_epon_oam_ktaction_value_base_pack(&this->u.ktaction.attribute, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.def.leaf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.def.length >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.def.length);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_var_container_base_get_packed_length(bcmolt_epon_oam_ctc_var_container_base *this)
+{
+    uint32_t count = 1;
+    switch (this->branch)
+    {
+        case BCMOLT_EPON_OAM_CTC_BRANCH_END:
+            {
+                count += this->u.end.unknown_count;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_ATTRIBUTE:
+            {
+                count += bcmolt_epon_oam_ctc_attribute_value_base_get_packed_length(&this->u.attribute.attribute);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_ACTION:
+            {
+                count += bcmolt_epon_oam_ctc_action_value_get_packed_length(&this->u.action.action);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_OLD_MANAGEMENT_OBJECT:
+            {
+                count += bcmolt_epon_oam_ctc_old_management_object_base_get_packed_length(&this->u.old_management_object.object);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_MANAGEMENT_OBJECT:
+            {
+                count += bcmolt_epon_oam_ctc_management_object_base_get_packed_length(&this->u.management_object.object);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_EXT_ATTRIBUTE:
+            {
+                count += bcmolt_epon_oam_ctc_ext_attribute_value_base_get_packed_length(&this->u.ext_attribute.attribute);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_EXT_ACTION:
+            {
+                count += bcmolt_epon_oam_ctc_ext_action_value_base_get_packed_length(&this->u.ext_action.attribute);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_KTATTRIBUTE:
+            {
+                count += bcmolt_epon_oam_ktattribute_value_base_get_packed_length(&this->u.ktattribute.attribute);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_KTACTION:
+            {
+                count += bcmolt_epon_oam_ktaction_value_base_get_packed_length(&this->u.ktaction.attribute);
+            }
+            break;
+        default:
+            {
+                count += 3;
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_var_container_base_unpack(bcmolt_epon_oam_ctc_var_container_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_ctc_branch_unpack(&this->branch, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->branch)
+    {
+        case BCMOLT_EPON_OAM_CTC_BRANCH_END:
+            {
+                this->u.end.unknown_count = bcmolt_epon_oam_ctc_var_container_base_end_count_unknown(buf);
+                if ((this->u.end.unknown_count > 0) && (this->u.end.unknown == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"unknown\" of struct \"bcmolt_epon_oam_ctc_var_container_base_end\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.end.unknown = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.end.unknown_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.end.unknown, this->u.end.unknown_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_ctc_attribute_value_base_unpack(&this->u.attribute.attribute, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_ACTION:
+            {
+                if (!bcmolt_epon_oam_ctc_action_value_unpack(&this->u.action.action, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_OLD_MANAGEMENT_OBJECT:
+            {
+                if (!bcmolt_epon_oam_ctc_old_management_object_base_unpack(&this->u.old_management_object.object, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_MANAGEMENT_OBJECT:
+            {
+                if (!bcmolt_epon_oam_ctc_management_object_base_unpack(&this->u.management_object.object, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_EXT_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_ctc_ext_attribute_value_base_unpack(&this->u.ext_attribute.attribute, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_EXT_ACTION:
+            {
+                if (!bcmolt_epon_oam_ctc_ext_action_value_base_unpack(&this->u.ext_action.attribute, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_KTATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_ktattribute_value_base_unpack(&this->u.ktattribute.attribute, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_KTACTION:
+            {
+                if (!bcmolt_epon_oam_ktaction_value_base_unpack(&this->u.ktaction.attribute, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.def.leaf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.def.length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.def.length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.def.length == 0) ? 0x0080 : this->u.def.length, buf->curr);
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.def.length == 0) ? 0x0080 : this->u.def.length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_var_container_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_ctc_branch branch;
+    if (!bcmolt_epon_oam_ctc_branch_unpack(&branch, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (branch)
+    {
+        case BCMOLT_EPON_OAM_CTC_BRANCH_END:
+            {
+                uint32_t unknown_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                    {
+                        break;
+                    }
+
+                    unknown_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(unknown_elem_count * sizeof(uint8_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_ctc_attribute_value_base_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_ACTION:
+            {
+                if (!bcmolt_epon_oam_ctc_action_value_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_OLD_MANAGEMENT_OBJECT:
+            {
+                if (!bcmolt_epon_oam_ctc_old_management_object_base_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_MANAGEMENT_OBJECT:
+            {
+                if (!bcmolt_epon_oam_ctc_management_object_base_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_EXT_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_ctc_ext_attribute_value_base_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_EXT_ACTION:
+            {
+                if (!bcmolt_epon_oam_ctc_ext_action_value_base_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_KTATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_ktattribute_value_base_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_KTACTION:
+            {
+                if (!bcmolt_epon_oam_ktaction_value_base_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_var_container_base_end_count_unknown(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_var_descriptor_pack(bcmolt_epon_oam_ctc_var_descriptor *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_ctc_branch_pack(this->branch, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->branch)
+    {
+        case BCMOLT_EPON_OAM_CTC_BRANCH_END:
+            {
+                if ((this->u.end.unknown_count > 0) && (this->u.end.unknown == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"unknown\" of struct \"bcmolt_epon_oam_ctc_var_descriptor_end\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.end.unknown, this->u.end.unknown_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_var_leaf_attribute_pack(this->u.attribute.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_ACTION:
+            {
+                if (!bcmolt_epon_oam_var_leaf_action_pack(this->u.action.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_OLD_MANAGEMENT_OBJECT:
+            {
+                if (!bcmolt_epon_oam_ctc_old_management_object_base_pack(&this->u.old_management_object.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_MANAGEMENT_OBJECT:
+            {
+                if (!bcmolt_epon_oam_ctc_management_object_base_pack(&this->u.management_object.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_EXT_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_ctc_leaf_ext_attribute_pack(this->u.ext_attribute.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_EXT_ACTION:
+            {
+                if (!bcmolt_epon_oam_ctc_leaf_ext_action_pack(this->u.ext_action.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_KTATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_ktleaf_attribute_pack(this->u.ktattribute.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_KTACTION:
+            {
+                if (!bcmolt_epon_oam_ktleaf_action_pack(this->u.ktaction.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.def.leaf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_var_descriptor_get_packed_length(bcmolt_epon_oam_ctc_var_descriptor *this)
+{
+    uint32_t count = 1;
+    switch (this->branch)
+    {
+        case BCMOLT_EPON_OAM_CTC_BRANCH_END:
+            {
+                count += this->u.end.unknown_count;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_ATTRIBUTE:
+            {
+                count += 2;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_ACTION:
+            {
+                count += 2;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_OLD_MANAGEMENT_OBJECT:
+            {
+                count += bcmolt_epon_oam_ctc_old_management_object_base_get_packed_length(&this->u.old_management_object.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_MANAGEMENT_OBJECT:
+            {
+                count += bcmolt_epon_oam_ctc_management_object_base_get_packed_length(&this->u.management_object.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_EXT_ATTRIBUTE:
+            {
+                count += 2;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_EXT_ACTION:
+            {
+                count += 2;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_KTATTRIBUTE:
+            {
+                count += 2;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_KTACTION:
+            {
+                count += 2;
+            }
+            break;
+        default:
+            {
+                count += 2;
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_var_descriptor_unpack(bcmolt_epon_oam_ctc_var_descriptor *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_ctc_branch_unpack(&this->branch, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->branch)
+    {
+        case BCMOLT_EPON_OAM_CTC_BRANCH_END:
+            {
+                this->u.end.unknown_count = bcmolt_epon_oam_ctc_var_descriptor_end_count_unknown(buf);
+                if ((this->u.end.unknown_count > 0) && (this->u.end.unknown == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"unknown\" of struct \"bcmolt_epon_oam_ctc_var_descriptor_end\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.end.unknown = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.end.unknown_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.end.unknown, this->u.end.unknown_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_var_leaf_attribute_unpack(&this->u.attribute.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_ACTION:
+            {
+                if (!bcmolt_epon_oam_var_leaf_action_unpack(&this->u.action.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_OLD_MANAGEMENT_OBJECT:
+            {
+                if (!bcmolt_epon_oam_ctc_old_management_object_base_unpack(&this->u.old_management_object.value, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_MANAGEMENT_OBJECT:
+            {
+                if (!bcmolt_epon_oam_ctc_management_object_base_unpack(&this->u.management_object.value, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_EXT_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_ctc_leaf_ext_attribute_unpack(&this->u.ext_attribute.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_EXT_ACTION:
+            {
+                if (!bcmolt_epon_oam_ctc_leaf_ext_action_unpack(&this->u.ext_action.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_KTATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_ktleaf_attribute_unpack(&this->u.ktattribute.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_KTACTION:
+            {
+                if (!bcmolt_epon_oam_ktleaf_action_unpack(&this->u.ktaction.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.def.leaf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_var_descriptor_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_ctc_branch branch;
+    if (!bcmolt_epon_oam_ctc_branch_unpack(&branch, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (branch)
+    {
+        case BCMOLT_EPON_OAM_CTC_BRANCH_END:
+            {
+                uint32_t unknown_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                    {
+                        break;
+                    }
+
+                    unknown_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(unknown_elem_count * sizeof(uint8_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_ACTION:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_OLD_MANAGEMENT_OBJECT:
+            {
+                if (!bcmolt_epon_oam_ctc_old_management_object_base_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_MANAGEMENT_OBJECT:
+            {
+                if (!bcmolt_epon_oam_ctc_management_object_base_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_EXT_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_EXT_ACTION:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_KTATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_KTACTION:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_var_descriptor_end_count_unknown(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ktonu_event_base_pack(bcmolt_epon_oam_ktonu_event_base *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t preLenFieldPos;
+    uint32_t bytesAfterLenField;
+    if (!bcmolt_epon_oam_ktonu_event_type_pack(this->type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+    /* skip over length field (we'll fill it in later) */
+    if (!bcmolt_epon_oam_buf_skip(buf, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->type)
+    {
+        case BCMOLT_EPON_OAM_KTONU_EVENT_TYPE_LOOP_DETECT:
+            {
+                if (!bcmolt_epon_oam_ktloop_detect_event_pack(this->u.loop_detect.event, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTONU_EVENT_TYPE_OPTICAL_POWER_ALARM:
+            {
+                if (!bcmolt_epon_oam_ktoptical_power_alarm_event_pack(this->u.optical_power_alarm.event, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTONU_EVENT_TYPE_END:
+        default:
+            {
+            }
+            break;
+    }
+
+    bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+    if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, bytesAfterLenField + 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ktonu_event_base_get_packed_length(bcmolt_epon_oam_ktonu_event_base *this)
+{
+    uint32_t count = 2;
+    switch (this->type)
+    {
+        case BCMOLT_EPON_OAM_KTONU_EVENT_TYPE_LOOP_DETECT:
+            {
+                count += 1;
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTONU_EVENT_TYPE_OPTICAL_POWER_ALARM:
+            {
+                count += 1;
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTONU_EVENT_TYPE_END:
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ktonu_event_base_unpack(bcmolt_epon_oam_ktonu_event_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint8_t length = 0;
+    bcmolt_epon_oam_buf postLenBuf;
+    if (!bcmolt_epon_oam_ktonu_event_type_unpack(&this->type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length - 2, buf->curr);
+    switch (this->type)
+    {
+        case BCMOLT_EPON_OAM_KTONU_EVENT_TYPE_LOOP_DETECT:
+            {
+                if (!bcmolt_epon_oam_ktloop_detect_event_unpack(&this->u.loop_detect.event, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTONU_EVENT_TYPE_OPTICAL_POWER_ALARM:
+            {
+                if (!bcmolt_epon_oam_ktoptical_power_alarm_event_unpack(&this->u.optical_power_alarm.event, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTONU_EVENT_TYPE_END:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(buf, length - 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ktonu_event_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_ktonu_event_type type;
+    bcmolt_epon_oam_buf postLenBuf;
+    uint8_t length;
+    if (!bcmolt_epon_oam_ktonu_event_type_unpack(&type, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length - 2, packed->curr);
+    switch (type)
+    {
+        case BCMOLT_EPON_OAM_KTONU_EVENT_TYPE_LOOP_DETECT:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTONU_EVENT_TYPE_OPTICAL_POWER_ALARM:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_KTONU_EVENT_TYPE_END:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, length - 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_vendor_extended_base_pack(bcmolt_epon_oam_ctc_vendor_extended_base *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_ctc_opcode_pack(this->op, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->op)
+    {
+        case BCMOLT_EPON_OAM_CTC_OPCODE_GET_REQUEST:
+            {
+                uint32_t i0;
+                if ((this->u.get_request.vars_count > 0) && (this->u.get_request.vars == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vars\" of struct \"bcmolt_epon_oam_ctc_vendor_extended_base_get_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i0 = 0; i0 < this->u.get_request.vars_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_ctc_var_descriptor_pack(&this->u.get_request.vars[i0], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_OPCODE_GET_RESPONSE:
+            {
+                uint32_t i1;
+                if ((this->u.get_response.vars_count > 0) && (this->u.get_response.vars == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vars\" of struct \"bcmolt_epon_oam_ctc_vendor_extended_base_get_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i1 = 0; i1 < this->u.get_response.vars_count; i1++)
+                {
+                    if (!bcmolt_epon_oam_ctc_var_container_base_pack(&this->u.get_response.vars[i1], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_OPCODE_SET_REQUEST:
+            {
+                uint32_t i2;
+                if ((this->u.set_request.vars_count > 0) && (this->u.set_request.vars == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vars\" of struct \"bcmolt_epon_oam_ctc_vendor_extended_base_set_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i2 = 0; i2 < this->u.set_request.vars_count; i2++)
+                {
+                    if (!bcmolt_epon_oam_ctc_var_container_base_pack(&this->u.set_request.vars[i2], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_OPCODE_SET_RESPONSE:
+            {
+                uint32_t i3;
+                if ((this->u.set_response.vars_count > 0) && (this->u.set_response.vars == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vars\" of struct \"bcmolt_epon_oam_ctc_vendor_extended_base_set_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i3 = 0; i3 < this->u.set_response.vars_count; i3++)
+                {
+                    if (!bcmolt_epon_oam_ctc_empty_var_container_base_pack(&this->u.set_response.vars[i3], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_OPCODE_SOFTWARE_DOWNLOAD:
+            {
+                uint32_t i4;
+                if ((this->u.software_download.messages_count > 0) && (this->u.software_download.messages == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"messages\" of struct \"bcmolt_epon_oam_ctc_vendor_extended_base_software_download\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i4 = 0; i4 < this->u.software_download.messages_count; i4++)
+                {
+                    if (!bcmolt_epon_oam_ctc_software_download_prov_base_pack(&this->u.software_download.messages[i4], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_OPCODE_ONU_AUTHENTICATION:
+            {
+                if (!bcmolt_epon_oam_ctc_onu_auth_code_pack(this->u.onu_authentication.code, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.onu_authentication.authentication_data_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.onu_authentication.authentication_data_count > 0) && (this->u.onu_authentication.authentication_data == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"authentication_data\" of struct \"bcmolt_epon_oam_ctc_vendor_extended_base_onu_authentication\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.onu_authentication.authentication_data, this->u.onu_authentication.authentication_data_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_OPCODE_CHURNING:
+            {
+                if (!bcmolt_epon_oam_ctc_churning_prov_base_pack(&this->u.churning.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_OPCODE_DBA:
+            {
+                if (!bcmolt_epon_oam_ctc_dba_prov_base_pack(&this->u.dba.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_OPCODE_KTONU_EVENT:
+            {
+                uint32_t i5;
+                if ((this->u.ktonu_event.events_count > 0) && (this->u.ktonu_event.events == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"events\" of struct \"bcmolt_epon_oam_ctc_vendor_extended_base_ktonu_event\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i5 = 0; i5 < this->u.ktonu_event.events_count; i5++)
+                {
+                    if (!bcmolt_epon_oam_ktonu_event_base_pack(&this->u.ktonu_event.events[i5], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_OPCODE_EVENT:
+            {
+                if (!bcmolt_epon_oam_ctc_event_base_pack(&this->u.event.events, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_vendor_extended_base_get_packed_length(bcmolt_epon_oam_ctc_vendor_extended_base *this)
+{
+    uint32_t count = 1;
+    switch (this->op)
+    {
+        case BCMOLT_EPON_OAM_CTC_OPCODE_GET_REQUEST:
+            {
+                uint32_t i0;
+                if ((this->u.get_request.vars_count > 0) && (this->u.get_request.vars == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vars_count\" of struct \"bcmolt_epon_oam_ctc_vendor_extended_base\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return 0;
+                }
+
+                for (i0 = 0; i0 < this->u.get_request.vars_count; i0++)
+                {
+                    count += bcmolt_epon_oam_ctc_var_descriptor_get_packed_length(&this->u.get_request.vars[i0]);
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_OPCODE_GET_RESPONSE:
+            {
+                uint32_t i1;
+                if ((this->u.get_response.vars_count > 0) && (this->u.get_response.vars == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vars_count\" of struct \"bcmolt_epon_oam_ctc_vendor_extended_base\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return 0;
+                }
+
+                for (i1 = 0; i1 < this->u.get_response.vars_count; i1++)
+                {
+                    count += bcmolt_epon_oam_ctc_var_container_base_get_packed_length(&this->u.get_response.vars[i1]);
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_OPCODE_SET_REQUEST:
+            {
+                uint32_t i2;
+                if ((this->u.set_request.vars_count > 0) && (this->u.set_request.vars == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vars_count\" of struct \"bcmolt_epon_oam_ctc_vendor_extended_base\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return 0;
+                }
+
+                for (i2 = 0; i2 < this->u.set_request.vars_count; i2++)
+                {
+                    count += bcmolt_epon_oam_ctc_var_container_base_get_packed_length(&this->u.set_request.vars[i2]);
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_OPCODE_SET_RESPONSE:
+            {
+                uint32_t i3;
+                if ((this->u.set_response.vars_count > 0) && (this->u.set_response.vars == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vars_count\" of struct \"bcmolt_epon_oam_ctc_vendor_extended_base\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return 0;
+                }
+
+                for (i3 = 0; i3 < this->u.set_response.vars_count; i3++)
+                {
+                    count += bcmolt_epon_oam_ctc_empty_var_container_base_get_packed_length(&this->u.set_response.vars[i3]);
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_OPCODE_SOFTWARE_DOWNLOAD:
+            {
+                uint32_t i4;
+                if ((this->u.software_download.messages_count > 0) && (this->u.software_download.messages == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"messages_count\" of struct \"bcmolt_epon_oam_ctc_vendor_extended_base\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return 0;
+                }
+
+                for (i4 = 0; i4 < this->u.software_download.messages_count; i4++)
+                {
+                    count += bcmolt_epon_oam_ctc_software_download_prov_base_get_packed_length(&this->u.software_download.messages[i4]);
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_OPCODE_ONU_AUTHENTICATION:
+            {
+                count += 3 + this->u.onu_authentication.authentication_data_count;
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_OPCODE_CHURNING:
+            {
+                count += bcmolt_epon_oam_ctc_churning_prov_base_get_packed_length(&this->u.churning.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_OPCODE_DBA:
+            {
+                count += bcmolt_epon_oam_ctc_dba_prov_base_get_packed_length(&this->u.dba.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_OPCODE_KTONU_EVENT:
+            {
+                uint32_t i5;
+                if ((this->u.ktonu_event.events_count > 0) && (this->u.ktonu_event.events == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"events_count\" of struct \"bcmolt_epon_oam_ctc_vendor_extended_base\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return 0;
+                }
+
+                for (i5 = 0; i5 < this->u.ktonu_event.events_count; i5++)
+                {
+                    count += bcmolt_epon_oam_ktonu_event_base_get_packed_length(&this->u.ktonu_event.events[i5]);
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_OPCODE_EVENT:
+            {
+                count += bcmolt_epon_oam_ctc_event_base_get_packed_length(&this->u.event.events);
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_vendor_extended_base_unpack(bcmolt_epon_oam_ctc_vendor_extended_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_ctc_opcode_unpack(&this->op, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->op)
+    {
+        case BCMOLT_EPON_OAM_CTC_OPCODE_GET_REQUEST:
+            {
+                uint32_t i0;
+                this->u.get_request.vars_count = bcmolt_epon_oam_ctc_vendor_extended_base_get_request_count_vars(buf);
+                if ((this->u.get_request.vars_count > 0) && (this->u.get_request.vars == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vars\" of struct \"bcmolt_epon_oam_ctc_vendor_extended_base_get_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.get_request.vars = (bcmolt_epon_oam_ctc_var_descriptor *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.get_request.vars_count * sizeof(bcmolt_epon_oam_ctc_var_descriptor));
+                    }
+                }
+
+                for (i0 = 0; i0 < this->u.get_request.vars_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_ctc_var_descriptor_unpack(&this->u.get_request.vars[i0], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_OPCODE_GET_RESPONSE:
+            {
+                uint32_t i1;
+                this->u.get_response.vars_count = bcmolt_epon_oam_ctc_vendor_extended_base_get_response_count_vars(buf);
+                if ((this->u.get_response.vars_count > 0) && (this->u.get_response.vars == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vars\" of struct \"bcmolt_epon_oam_ctc_vendor_extended_base_get_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.get_response.vars = (bcmolt_epon_oam_ctc_var_container_base *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.get_response.vars_count * sizeof(bcmolt_epon_oam_ctc_var_container_base));
+                    }
+                }
+
+                for (i1 = 0; i1 < this->u.get_response.vars_count; i1++)
+                {
+                    if (!bcmolt_epon_oam_ctc_var_container_base_unpack(&this->u.get_response.vars[i1], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_OPCODE_SET_REQUEST:
+            {
+                uint32_t i2;
+                this->u.set_request.vars_count = bcmolt_epon_oam_ctc_vendor_extended_base_set_request_count_vars(buf);
+                if ((this->u.set_request.vars_count > 0) && (this->u.set_request.vars == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vars\" of struct \"bcmolt_epon_oam_ctc_vendor_extended_base_set_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.set_request.vars = (bcmolt_epon_oam_ctc_var_container_base *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.set_request.vars_count * sizeof(bcmolt_epon_oam_ctc_var_container_base));
+                    }
+                }
+
+                for (i2 = 0; i2 < this->u.set_request.vars_count; i2++)
+                {
+                    if (!bcmolt_epon_oam_ctc_var_container_base_unpack(&this->u.set_request.vars[i2], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_OPCODE_SET_RESPONSE:
+            {
+                uint32_t i3;
+                this->u.set_response.vars_count = bcmolt_epon_oam_ctc_vendor_extended_base_set_response_count_vars(buf);
+                if ((this->u.set_response.vars_count > 0) && (this->u.set_response.vars == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vars\" of struct \"bcmolt_epon_oam_ctc_vendor_extended_base_set_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.set_response.vars = (bcmolt_epon_oam_ctc_empty_var_container_base *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.set_response.vars_count * sizeof(bcmolt_epon_oam_ctc_empty_var_container_base));
+                    }
+                }
+
+                for (i3 = 0; i3 < this->u.set_response.vars_count; i3++)
+                {
+                    if (!bcmolt_epon_oam_ctc_empty_var_container_base_unpack(&this->u.set_response.vars[i3], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_OPCODE_SOFTWARE_DOWNLOAD:
+            {
+                uint32_t i4;
+                this->u.software_download.messages_count = bcmolt_epon_oam_ctc_vendor_extended_base_software_download_count_messages(buf);
+                if ((this->u.software_download.messages_count > 0) && (this->u.software_download.messages == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"messages\" of struct \"bcmolt_epon_oam_ctc_vendor_extended_base_software_download\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.software_download.messages = (bcmolt_epon_oam_ctc_software_download_prov_base *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.software_download.messages_count * sizeof(bcmolt_epon_oam_ctc_software_download_prov_base));
+                    }
+                }
+
+                for (i4 = 0; i4 < this->u.software_download.messages_count; i4++)
+                {
+                    if (!bcmolt_epon_oam_ctc_software_download_prov_base_unpack(&this->u.software_download.messages[i4], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_OPCODE_ONU_AUTHENTICATION:
+            {
+                if (!bcmolt_epon_oam_ctc_onu_auth_code_unpack(&this->u.onu_authentication.code, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.onu_authentication.authentication_data_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.onu_authentication.authentication_data_count > 0) && (this->u.onu_authentication.authentication_data == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"authentication_data\" of struct \"bcmolt_epon_oam_ctc_vendor_extended_base_onu_authentication\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.onu_authentication.authentication_data = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.onu_authentication.authentication_data_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.onu_authentication.authentication_data, this->u.onu_authentication.authentication_data_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_OPCODE_CHURNING:
+            {
+                if (!bcmolt_epon_oam_ctc_churning_prov_base_unpack(&this->u.churning.value, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_OPCODE_DBA:
+            {
+                if (!bcmolt_epon_oam_ctc_dba_prov_base_unpack(&this->u.dba.value, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_OPCODE_KTONU_EVENT:
+            {
+                uint32_t i5;
+                this->u.ktonu_event.events_count = bcmolt_epon_oam_ctc_vendor_extended_base_ktonu_event_count_events(buf);
+                if ((this->u.ktonu_event.events_count > 0) && (this->u.ktonu_event.events == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"events\" of struct \"bcmolt_epon_oam_ctc_vendor_extended_base_ktonu_event\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.ktonu_event.events = (bcmolt_epon_oam_ktonu_event_base *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.ktonu_event.events_count * sizeof(bcmolt_epon_oam_ktonu_event_base));
+                    }
+                }
+
+                for (i5 = 0; i5 < this->u.ktonu_event.events_count; i5++)
+                {
+                    if (!bcmolt_epon_oam_ktonu_event_base_unpack(&this->u.ktonu_event.events[i5], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_OPCODE_EVENT:
+            {
+                if (!bcmolt_epon_oam_ctc_event_base_unpack(&this->u.event.events, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ctc_vendor_extended_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_ctc_opcode op;
+    if (!bcmolt_epon_oam_ctc_opcode_unpack(&op, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (op)
+    {
+        case BCMOLT_EPON_OAM_CTC_OPCODE_GET_REQUEST:
+            {
+                uint32_t vars_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_ctc_var_descriptor_scan(packed, extra_mem))
+                    {
+                        break;
+                    }
+
+                    vars_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(vars_elem_count * sizeof(bcmolt_epon_oam_ctc_var_descriptor));
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_OPCODE_GET_RESPONSE:
+            {
+                uint32_t vars_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_ctc_var_container_base_scan(packed, extra_mem))
+                    {
+                        break;
+                    }
+
+                    vars_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(vars_elem_count * sizeof(bcmolt_epon_oam_ctc_var_container_base));
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_OPCODE_SET_REQUEST:
+            {
+                uint32_t vars_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_ctc_var_container_base_scan(packed, extra_mem))
+                    {
+                        break;
+                    }
+
+                    vars_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(vars_elem_count * sizeof(bcmolt_epon_oam_ctc_var_container_base));
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_OPCODE_SET_RESPONSE:
+            {
+                uint32_t vars_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_ctc_empty_var_container_base_scan(packed, extra_mem))
+                    {
+                        break;
+                    }
+
+                    vars_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(vars_elem_count * sizeof(bcmolt_epon_oam_ctc_empty_var_container_base));
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_OPCODE_SOFTWARE_DOWNLOAD:
+            {
+                uint32_t messages_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_ctc_software_download_prov_base_scan(packed, extra_mem))
+                    {
+                        break;
+                    }
+
+                    messages_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(messages_elem_count * sizeof(bcmolt_epon_oam_ctc_software_download_prov_base));
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_OPCODE_ONU_AUTHENTICATION:
+            {
+                uint16_t authentication_data_count;
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(packed, &authentication_data_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * authentication_data_count);
+                if (!bcmolt_epon_oam_buf_skip(packed, authentication_data_count * 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_OPCODE_CHURNING:
+            {
+                if (!bcmolt_epon_oam_ctc_churning_prov_base_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_OPCODE_DBA:
+            {
+                if (!bcmolt_epon_oam_ctc_dba_prov_base_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_OPCODE_KTONU_EVENT:
+            {
+                uint32_t events_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_ktonu_event_base_scan(packed, extra_mem))
+                    {
+                        break;
+                    }
+
+                    events_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(events_elem_count * sizeof(bcmolt_epon_oam_ktonu_event_base));
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_OPCODE_EVENT:
+            {
+                if (!bcmolt_epon_oam_ctc_event_base_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_vendor_extended_base_get_request_count_vars(bcmolt_epon_oam_buf *buf)
+{
+    uint32_t count = 0;
+    uint32_t dummy = 0;
+    bcmolt_epon_oam_buf bufClone = *buf;
+    while (BCMOS_TRUE)
+    {
+        if (!bcmolt_epon_oam_ctc_var_descriptor_scan(&bufClone, &dummy))
+        {
+            break;
+        }
+
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_vendor_extended_base_get_response_count_vars(bcmolt_epon_oam_buf *buf)
+{
+    uint32_t count = 0;
+    uint32_t dummy = 0;
+    bcmolt_epon_oam_buf bufClone = *buf;
+    while (BCMOS_TRUE)
+    {
+        if (!bcmolt_epon_oam_ctc_var_container_base_scan(&bufClone, &dummy))
+        {
+            break;
+        }
+
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_vendor_extended_base_set_request_count_vars(bcmolt_epon_oam_buf *buf)
+{
+    uint32_t count = 0;
+    uint32_t dummy = 0;
+    bcmolt_epon_oam_buf bufClone = *buf;
+    while (BCMOS_TRUE)
+    {
+        if (!bcmolt_epon_oam_ctc_var_container_base_scan(&bufClone, &dummy))
+        {
+            break;
+        }
+
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_vendor_extended_base_set_response_count_vars(bcmolt_epon_oam_buf *buf)
+{
+    uint32_t count = 0;
+    uint32_t dummy = 0;
+    bcmolt_epon_oam_buf bufClone = *buf;
+    while (BCMOS_TRUE)
+    {
+        if (!bcmolt_epon_oam_ctc_empty_var_container_base_scan(&bufClone, &dummy))
+        {
+            break;
+        }
+
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_vendor_extended_base_software_download_count_messages(bcmolt_epon_oam_buf *buf)
+{
+    uint32_t count = 0;
+    uint32_t dummy = 0;
+    bcmolt_epon_oam_buf bufClone = *buf;
+    while (BCMOS_TRUE)
+    {
+        if (!bcmolt_epon_oam_ctc_software_download_prov_base_scan(&bufClone, &dummy))
+        {
+            break;
+        }
+
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ctc_vendor_extended_base_ktonu_event_count_events(bcmolt_epon_oam_buf *buf)
+{
+    uint32_t count = 0;
+    uint32_t dummy = 0;
+    bcmolt_epon_oam_buf bufClone = *buf;
+    while (BCMOS_TRUE)
+    {
+        if (!bcmolt_epon_oam_ktonu_event_base_scan(&bufClone, &dummy))
+        {
+            break;
+        }
+
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_classifier_base_pack(bcmolt_epon_oam_dasan_classifier_base *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_dasan_classifier_command_pack(this->command, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_dasan_direction_pack(this->direction, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->command)
+    {
+        case BCMOLT_EPON_OAM_DASAN_CLASSIFIER_COMMAND_ADD_FILTER:
+            {
+                if (!bcmolt_epon_oam_dasan_filter_field_pack(this->u.add_filter.field, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.add_filter.value))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_dasan_filter_action_pack(this->u.add_filter.action, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_CLASSIFIER_COMMAND_REMOVE_FILTER:
+            {
+                if (!bcmolt_epon_oam_dasan_filter_field_pack(this->u.remove_filter.field, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.remove_filter.value))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_dasan_filter_action_pack(this->u.remove_filter.action, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_CLASSIFIER_COMMAND_QUEUE_MAP:
+            {
+                if (!bcmolt_epon_oam_dasan_pri_type_pack(this->u.queue_map.pri_type, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.queue_map.in_priority))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.queue_map.out_priority))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_CLASSIFIER_COMMAND_ADD_PRIORITY_FOR_VLAN:
+            {
+                if (!bcmolt_epon_oam_dasan_filter_field_pack(this->u.add_priority_for_vlan.field, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.add_priority_for_vlan.value))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.add_priority_for_vlan.pri_vlan))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.add_priority_for_vlan.pri_queue))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dasan_classifier_base_get_packed_length(bcmolt_epon_oam_dasan_classifier_base *this)
+{
+    uint32_t count = 6;
+    switch (this->command)
+    {
+        case BCMOLT_EPON_OAM_DASAN_CLASSIFIER_COMMAND_ADD_FILTER:
+            {
+                count += 10;
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_CLASSIFIER_COMMAND_REMOVE_FILTER:
+            {
+                count += 10;
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_CLASSIFIER_COMMAND_QUEUE_MAP:
+            {
+                count += 6;
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_CLASSIFIER_COMMAND_ADD_PRIORITY_FOR_VLAN:
+            {
+                count += 8;
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_classifier_base_unpack(bcmolt_epon_oam_dasan_classifier_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_dasan_classifier_command_unpack(&this->command, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_dasan_direction_unpack(&this->direction, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->command)
+    {
+        case BCMOLT_EPON_OAM_DASAN_CLASSIFIER_COMMAND_ADD_FILTER:
+            {
+                if (!bcmolt_epon_oam_dasan_filter_field_unpack(&this->u.add_filter.field, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.add_filter.value))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_dasan_filter_action_unpack(&this->u.add_filter.action, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_CLASSIFIER_COMMAND_REMOVE_FILTER:
+            {
+                if (!bcmolt_epon_oam_dasan_filter_field_unpack(&this->u.remove_filter.field, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.remove_filter.value))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_dasan_filter_action_unpack(&this->u.remove_filter.action, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_CLASSIFIER_COMMAND_QUEUE_MAP:
+            {
+                if (!bcmolt_epon_oam_dasan_pri_type_unpack(&this->u.queue_map.pri_type, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.queue_map.in_priority))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.queue_map.out_priority))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_CLASSIFIER_COMMAND_ADD_PRIORITY_FOR_VLAN:
+            {
+                if (!bcmolt_epon_oam_dasan_filter_field_unpack(&this->u.add_priority_for_vlan.field, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.add_priority_for_vlan.value))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.add_priority_for_vlan.pri_vlan))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.add_priority_for_vlan.pri_queue))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_classifier_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_dasan_classifier_command command;
+    if (!bcmolt_epon_oam_dasan_classifier_command_unpack(&command, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (command)
+    {
+        case BCMOLT_EPON_OAM_DASAN_CLASSIFIER_COMMAND_ADD_FILTER:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_CLASSIFIER_COMMAND_REMOVE_FILTER:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_CLASSIFIER_COMMAND_QUEUE_MAP:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_CLASSIFIER_COMMAND_ADD_PRIORITY_FOR_VLAN:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_port_pack(bcmolt_epon_oam_dasan_port *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->port_number))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_bool(buf, this->enabled))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_bool(buf, this->auto_negotiation_enabled))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->speed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->reserved))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_bool(buf, this->is_full_duplex))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->learning_table_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_port_unpack(bcmolt_epon_oam_dasan_port *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->port_number))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_bool(buf, &this->enabled))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_bool(buf, &this->auto_negotiation_enabled))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->speed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->reserved))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_bool(buf, &this->is_full_duplex))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->learning_table_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_port_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 10);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_vlan_pack(bcmolt_epon_oam_dasan_vlan *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->reserved))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_bool(buf, this->is_tagged))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->vlan_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_vlan_unpack(bcmolt_epon_oam_dasan_vlan *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->reserved))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_bool(buf, &this->is_tagged))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->vlan_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_vlan_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 4);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_vlan_port_pack(bcmolt_epon_oam_dasan_vlan_port *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t i0;
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->port_number))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->vlans_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->vlans_count > 0) && (this->vlans == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vlans\" of struct \"bcmolt_epon_oam_dasan_vlan_port\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->vlans_count; i0++)
+    {
+        if (!bcmolt_epon_oam_dasan_vlan_pack(&this->vlans[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->pvid))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dasan_vlan_port_get_packed_length(bcmolt_epon_oam_dasan_vlan_port *this)
+{
+    return 6 + (4 * this->vlans_count);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_vlan_port_unpack(bcmolt_epon_oam_dasan_vlan_port *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint16_t i0;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->port_number))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->vlans_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->vlans_count > 0) && (this->vlans == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vlans\" of struct \"bcmolt_epon_oam_dasan_vlan_port\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->vlans = (bcmolt_epon_oam_dasan_vlan *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->vlans_count * sizeof(bcmolt_epon_oam_dasan_vlan));
+        }
+    }
+
+    for (i0 = 0; i0 < this->vlans_count; i0++)
+    {
+        if (!bcmolt_epon_oam_dasan_vlan_unpack(&this->vlans[i0], buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->pvid))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_vlan_port_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    uint16_t vlans_count;
+    if (!bcmolt_epon_oam_buf_skip(packed, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(packed, &vlans_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_dasan_vlan) * vlans_count);
+    if (!bcmolt_epon_oam_buf_skip(packed, vlans_count * 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_port_config_pack(bcmolt_epon_oam_dasan_port_config *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->port_number))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_bool(buf, this->is_linked))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->speed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_bool(buf, this->is_full_duplex))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_port_config_unpack(bcmolt_epon_oam_dasan_port_config *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->port_number))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_bool(buf, &this->is_linked))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->speed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_bool(buf, &this->is_full_duplex))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_port_config_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 4);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_port_stats_pack(bcmolt_epon_oam_dasan_port_stats *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->in_good_octets))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->in_good_frames))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->in_broadcast))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->in_multicast))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->out_good_octets))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->out_good_frames))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->out_broadcast))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->out_multicast))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_port_stats_unpack(bcmolt_epon_oam_dasan_port_stats *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->in_good_octets))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->in_good_frames))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->in_broadcast))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->in_multicast))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->out_good_octets))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->out_good_frames))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->out_broadcast))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->out_multicast))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_port_stats_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 40);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_port_error_stats_pack(bcmolt_epon_oam_dasan_port_error_stats *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->undersized))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->oversized))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->jabber))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->in_mac_receive_error))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->in_fcs_error))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_port_error_stats_unpack(bcmolt_epon_oam_dasan_port_error_stats *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->undersized))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->oversized))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->jabber))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->in_mac_receive_error))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->in_fcs_error))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_port_error_stats_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 20);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_stats_seq_base_pack(bcmolt_epon_oam_dasan_stats_seq_base *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_dasan_stats_seq_type_pack(this->type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->type)
+    {
+        case BCMOLT_EPON_OAM_DASAN_STATS_SEQ_TYPE_PORT0AND1:
+            {
+                if (!bcmolt_epon_oam_dasan_port_stats_pack(&this->u.port0and1.port0, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_dasan_port_stats_pack(&this->u.port0and1.port1, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_STATS_SEQ_TYPE_PORT2AND3:
+            {
+                if (!bcmolt_epon_oam_dasan_port_stats_pack(&this->u.port2and3.port2, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_dasan_port_stats_pack(&this->u.port2and3.port3, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_STATS_SEQ_TYPE_ERRORS:
+            {
+                if (!bcmolt_epon_oam_dasan_port_error_stats_pack(&this->u.errors.port0, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_dasan_port_error_stats_pack(&this->u.errors.port1, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_dasan_port_error_stats_pack(&this->u.errors.port2, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_dasan_port_error_stats_pack(&this->u.errors.port3, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dasan_stats_seq_base_get_packed_length(bcmolt_epon_oam_dasan_stats_seq_base *this)
+{
+    uint32_t count = 1;
+    switch (this->type)
+    {
+        case BCMOLT_EPON_OAM_DASAN_STATS_SEQ_TYPE_PORT0AND1:
+            {
+                count += 80;
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_STATS_SEQ_TYPE_PORT2AND3:
+            {
+                count += 80;
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_STATS_SEQ_TYPE_ERRORS:
+            {
+                count += 80;
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_stats_seq_base_unpack(bcmolt_epon_oam_dasan_stats_seq_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_dasan_stats_seq_type_unpack(&this->type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->type)
+    {
+        case BCMOLT_EPON_OAM_DASAN_STATS_SEQ_TYPE_PORT0AND1:
+            {
+                if (!bcmolt_epon_oam_dasan_port_stats_unpack(&this->u.port0and1.port0, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_dasan_port_stats_unpack(&this->u.port0and1.port1, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_STATS_SEQ_TYPE_PORT2AND3:
+            {
+                if (!bcmolt_epon_oam_dasan_port_stats_unpack(&this->u.port2and3.port2, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_dasan_port_stats_unpack(&this->u.port2and3.port3, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_STATS_SEQ_TYPE_ERRORS:
+            {
+                if (!bcmolt_epon_oam_dasan_port_error_stats_unpack(&this->u.errors.port0, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_dasan_port_error_stats_unpack(&this->u.errors.port1, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_dasan_port_error_stats_unpack(&this->u.errors.port2, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_dasan_port_error_stats_unpack(&this->u.errors.port3, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_stats_seq_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_dasan_stats_seq_type type;
+    if (!bcmolt_epon_oam_dasan_stats_seq_type_unpack(&type, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (type)
+    {
+        case BCMOLT_EPON_OAM_DASAN_STATS_SEQ_TYPE_PORT0AND1:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 40))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 40))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_STATS_SEQ_TYPE_PORT2AND3:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 40))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 40))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_STATS_SEQ_TYPE_ERRORS:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 20))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 20))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 20))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 20))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_stat_value_pack(bcmolt_epon_oam_dasan_stat_value *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_dasan_stat_id_pack(this->id, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->value))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_stat_value_unpack(bcmolt_epon_oam_dasan_stat_value *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_dasan_stat_id_unpack(&this->id, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->value))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_stat_value_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 6);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_config_base_pack(bcmolt_epon_oam_dasan_config_base *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_dasan_opcode_pack(this->opcode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->opcode)
+    {
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_PORT_CONFIG:
+            {
+                uint16_t i0;
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.port_config.ports_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.port_config.ports_count > 0) && (this->u.port_config.ports == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"ports\" of struct \"bcmolt_epon_oam_dasan_config_base_port_config\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i0 = 0; i0 < this->u.port_config.ports_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_dasan_port_pack(&this->u.port_config.ports[i0], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_SET_VLAN:
+            {
+                uint16_t i1;
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.set_vlan.ports_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.set_vlan.ports_count > 0) && (this->u.set_vlan.ports == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"ports\" of struct \"bcmolt_epon_oam_dasan_config_base_set_vlan\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i1 = 0; i1 < this->u.set_vlan.ports_count; i1++)
+                {
+                    if (!bcmolt_epon_oam_dasan_vlan_port_pack(&this->u.set_vlan.ports[i1], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_GET_ONU_CONFIG:
+            {
+                uint8_t i2;
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.get_onu_config.llid))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.get_onu_config.op))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.get_onu_config.profile_op))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.get_onu_config.value_size))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.get_onu_config.ports_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_onu_config.ports_count > 0) && (this->u.get_onu_config.ports == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"ports\" of struct \"bcmolt_epon_oam_dasan_config_base_get_onu_config\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i2 = 0; i2 < this->u.get_onu_config.ports_count; i2++)
+                {
+                    if (!bcmolt_epon_oam_dasan_port_config_pack(&this->u.get_onu_config.ports[i2], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_SET_STP:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.set_stp.reserved))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.set_stp.enable))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.set_stp.max_age))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.set_stp.forward_delay))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.set_stp.hello_time))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_SET_TXPOWER_OFF:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.set_txpower_off.enable_time))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_SET_LOOP_DETECT:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.set_loop_detect.llid_bitmap))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.set_loop_detect.enable))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.set_loop_detect.block_cap))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.set_loop_detect.send_cap))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.set_loop_detect.olt_mac_cap))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.set_loop_detect.send_period))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.set_loop_detect.block_time))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_mac_address(buf, this->u.set_loop_detect.olt_mac))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_SET_LOOP_DETECT_UNBLOCK:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.set_loop_detect_unblock.llid_bitmap))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_CLASSIFIER:
+            {
+                if (!bcmolt_epon_oam_dasan_classifier_base_pack(&this->u.classifier.classifier, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_ONU_VERSION:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.onu_version.llid))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.onu_version.op))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.onu_version.info_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.onu_version.info_count > 0) && (this->u.onu_version.info == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"info\" of struct \"bcmolt_epon_oam_dasan_config_base_onu_version\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.onu_version.info, this->u.onu_version.info_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_ONU_FLASH_FIRMWARE_VERSION:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.onu_flash_firmware_version.llid))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_flash_firmware_version.boot_mode))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_flash_firmware_version.active))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.onu_flash_firmware_version.image1string, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.onu_flash_firmware_version.image2string, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_ONU_ACTIVE_IMAGE_TIME:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.onu_active_image_time.llid))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_active_image_time.active))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_active_image_time.build_time))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_ONU_STATISTIC:
+            {
+                uint32_t i3;
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.onu_statistic.llid))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.onu_statistic.op))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.onu_statistic.sequences_count > 0) && (this->u.onu_statistic.sequences == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"sequences\" of struct \"bcmolt_epon_oam_dasan_config_base_onu_statistic\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i3 = 0; i3 < this->u.onu_statistic.sequences_count; i3++)
+                {
+                    if (!bcmolt_epon_oam_dasan_stats_seq_base_pack(&this->u.onu_statistic.sequences[i3], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_ONU_STATISTIC_CLEAR:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_ONU_STATISTIC_GET:
+            {
+                uint8_t i4;
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.onu_statistic_get.llid_bitmap))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_statistic_get.statistics_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.onu_statistic_get.statistics_count > 0) && (this->u.onu_statistic_get.statistics == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"statistics\" of struct \"bcmolt_epon_oam_dasan_config_base_onu_statistic_get\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i4 = 0; i4 < this->u.onu_statistic_get.statistics_count; i4++)
+                {
+                    if (!bcmolt_epon_oam_dasan_stat_value_pack(&this->u.onu_statistic_get.statistics[i4], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_ONU_IGMP_SET:
+            {
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.onu_igmp_set.enable))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_igmp_set.max_groups))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_ONU_PORT_IGMP_FILTER:
+            {
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.onu_port_igmp_filter.enable))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_ONU_SHAPING:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_shaping.reserved))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.onu_shaping.enable))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.onu_shaping.rate))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dasan_config_base_get_packed_length(bcmolt_epon_oam_dasan_config_base *this)
+{
+    uint32_t count = 2;
+    switch (this->opcode)
+    {
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_PORT_CONFIG:
+            {
+                count += 2 + (10 * this->u.port_config.ports_count);
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_SET_VLAN:
+            {
+                uint32_t i0;
+                count += 2;
+                if ((this->u.set_vlan.ports_count > 0) && (this->u.set_vlan.ports == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"ports_count\" of struct \"bcmolt_epon_oam_dasan_config_base\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return 0;
+                }
+
+                for (i0 = 0; i0 < this->u.set_vlan.ports_count; i0++)
+                {
+                    count += bcmolt_epon_oam_dasan_vlan_port_get_packed_length(&this->u.set_vlan.ports[i0]);
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_GET_ONU_CONFIG:
+            {
+                count += 15 + (4 * this->u.get_onu_config.ports_count);
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_SET_STP:
+            {
+                count += 8;
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_SET_TXPOWER_OFF:
+            {
+                count += 2;
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_SET_LOOP_DETECT:
+            {
+                count += 26;
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_SET_LOOP_DETECT_UNBLOCK:
+            {
+                count += 8;
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_CLASSIFIER:
+            {
+                count += bcmolt_epon_oam_dasan_classifier_base_get_packed_length(&this->u.classifier.classifier);
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_ONU_VERSION:
+            {
+                count += 8 + this->u.onu_version.info_count;
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_ONU_FLASH_FIRMWARE_VERSION:
+            {
+                count += 36;
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_ONU_ACTIVE_IMAGE_TIME:
+            {
+                count += 11;
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_ONU_STATISTIC:
+            {
+                uint32_t i1;
+                count += 10;
+                if ((this->u.onu_statistic.sequences_count > 0) && (this->u.onu_statistic.sequences == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"sequences_count\" of struct \"bcmolt_epon_oam_dasan_config_base\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return 0;
+                }
+
+                for (i1 = 0; i1 < this->u.onu_statistic.sequences_count; i1++)
+                {
+                    count += bcmolt_epon_oam_dasan_stats_seq_base_get_packed_length(&this->u.onu_statistic.sequences[i1]);
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_ONU_STATISTIC_CLEAR:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_ONU_STATISTIC_GET:
+            {
+                count += 3 + (6 * this->u.onu_statistic_get.statistics_count);
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_ONU_IGMP_SET:
+            {
+                count += 2;
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_ONU_PORT_IGMP_FILTER:
+            {
+                count += 1;
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_ONU_SHAPING:
+            {
+                count += 6;
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_config_base_unpack(bcmolt_epon_oam_dasan_config_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_dasan_opcode_unpack(&this->opcode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->opcode)
+    {
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_PORT_CONFIG:
+            {
+                uint16_t i0;
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.port_config.ports_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.port_config.ports_count > 0) && (this->u.port_config.ports == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"ports\" of struct \"bcmolt_epon_oam_dasan_config_base_port_config\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.port_config.ports = (bcmolt_epon_oam_dasan_port *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.port_config.ports_count * sizeof(bcmolt_epon_oam_dasan_port));
+                    }
+                }
+
+                for (i0 = 0; i0 < this->u.port_config.ports_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_dasan_port_unpack(&this->u.port_config.ports[i0], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_SET_VLAN:
+            {
+                uint16_t i1;
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.set_vlan.ports_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.set_vlan.ports_count > 0) && (this->u.set_vlan.ports == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"ports\" of struct \"bcmolt_epon_oam_dasan_config_base_set_vlan\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.set_vlan.ports = (bcmolt_epon_oam_dasan_vlan_port *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.set_vlan.ports_count * sizeof(bcmolt_epon_oam_dasan_vlan_port));
+                    }
+                }
+
+                for (i1 = 0; i1 < this->u.set_vlan.ports_count; i1++)
+                {
+                    if (!bcmolt_epon_oam_dasan_vlan_port_unpack(&this->u.set_vlan.ports[i1], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_GET_ONU_CONFIG:
+            {
+                uint8_t i2;
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.get_onu_config.llid))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(buf, &this->u.get_onu_config.op))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.get_onu_config.profile_op))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.get_onu_config.value_size))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.get_onu_config.ports_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_onu_config.ports_count > 0) && (this->u.get_onu_config.ports == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"ports\" of struct \"bcmolt_epon_oam_dasan_config_base_get_onu_config\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.get_onu_config.ports = (bcmolt_epon_oam_dasan_port_config *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.get_onu_config.ports_count * sizeof(bcmolt_epon_oam_dasan_port_config));
+                    }
+                }
+
+                for (i2 = 0; i2 < this->u.get_onu_config.ports_count; i2++)
+                {
+                    if (!bcmolt_epon_oam_dasan_port_config_unpack(&this->u.get_onu_config.ports[i2], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_SET_STP:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.set_stp.reserved))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_bool(buf, &this->u.set_stp.enable))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.set_stp.max_age))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.set_stp.forward_delay))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.set_stp.hello_time))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_SET_TXPOWER_OFF:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.set_txpower_off.enable_time))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_SET_LOOP_DETECT:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(buf, &this->u.set_loop_detect.llid_bitmap))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_bool(buf, &this->u.set_loop_detect.enable))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.set_loop_detect.block_cap))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.set_loop_detect.send_cap))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.set_loop_detect.olt_mac_cap))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(buf, &this->u.set_loop_detect.send_period))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(buf, &this->u.set_loop_detect.block_time))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_mac_address(buf, &this->u.set_loop_detect.olt_mac))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_SET_LOOP_DETECT_UNBLOCK:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(buf, &this->u.set_loop_detect_unblock.llid_bitmap))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_CLASSIFIER:
+            {
+                if (!bcmolt_epon_oam_dasan_classifier_base_unpack(&this->u.classifier.classifier, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_ONU_VERSION:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.onu_version.llid))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(buf, &this->u.onu_version.op))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.onu_version.info_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.onu_version.info_count > 0) && (this->u.onu_version.info == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"info\" of struct \"bcmolt_epon_oam_dasan_config_base_onu_version\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.onu_version.info = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.onu_version.info_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.onu_version.info, this->u.onu_version.info_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_ONU_FLASH_FIRMWARE_VERSION:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.onu_flash_firmware_version.llid))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.onu_flash_firmware_version.boot_mode))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.onu_flash_firmware_version.active))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.onu_flash_firmware_version.image1string, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.onu_flash_firmware_version.image2string, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_ONU_ACTIVE_IMAGE_TIME:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.onu_active_image_time.llid))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.onu_active_image_time.active))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(buf, &this->u.onu_active_image_time.build_time))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_ONU_STATISTIC:
+            {
+                uint32_t i3;
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.onu_statistic.llid))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u64(buf, &this->u.onu_statistic.op))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                this->u.onu_statistic.sequences_count = bcmolt_epon_oam_dasan_config_base_onu_statistic_count_sequences(buf);
+                if ((this->u.onu_statistic.sequences_count > 0) && (this->u.onu_statistic.sequences == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"sequences\" of struct \"bcmolt_epon_oam_dasan_config_base_onu_statistic\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.onu_statistic.sequences = (bcmolt_epon_oam_dasan_stats_seq_base *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.onu_statistic.sequences_count * sizeof(bcmolt_epon_oam_dasan_stats_seq_base));
+                    }
+                }
+
+                for (i3 = 0; i3 < this->u.onu_statistic.sequences_count; i3++)
+                {
+                    if (!bcmolt_epon_oam_dasan_stats_seq_base_unpack(&this->u.onu_statistic.sequences[i3], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_ONU_STATISTIC_CLEAR:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_ONU_STATISTIC_GET:
+            {
+                uint8_t i4;
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.onu_statistic_get.llid_bitmap))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.onu_statistic_get.statistics_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.onu_statistic_get.statistics_count > 0) && (this->u.onu_statistic_get.statistics == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"statistics\" of struct \"bcmolt_epon_oam_dasan_config_base_onu_statistic_get\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.onu_statistic_get.statistics = (bcmolt_epon_oam_dasan_stat_value *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.onu_statistic_get.statistics_count * sizeof(bcmolt_epon_oam_dasan_stat_value));
+                    }
+                }
+
+                for (i4 = 0; i4 < this->u.onu_statistic_get.statistics_count; i4++)
+                {
+                    if (!bcmolt_epon_oam_dasan_stat_value_unpack(&this->u.onu_statistic_get.statistics[i4], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_ONU_IGMP_SET:
+            {
+                if (!bcmolt_epon_oam_buf_read_bool(buf, &this->u.onu_igmp_set.enable))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.onu_igmp_set.max_groups))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_ONU_PORT_IGMP_FILTER:
+            {
+                if (!bcmolt_epon_oam_buf_read_bool(buf, &this->u.onu_port_igmp_filter.enable))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_ONU_SHAPING:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.onu_shaping.reserved))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_bool(buf, &this->u.onu_shaping.enable))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(buf, &this->u.onu_shaping.rate))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dasan_config_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_dasan_opcode opcode;
+    if (!bcmolt_epon_oam_dasan_opcode_unpack(&opcode, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (opcode)
+    {
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_PORT_CONFIG:
+            {
+                uint16_t ports_count;
+                if (!bcmolt_epon_oam_buf_read_u16(packed, &ports_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_dasan_port) * ports_count);
+                if (!bcmolt_epon_oam_buf_skip(packed, ports_count * 10))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_SET_VLAN:
+            {
+                uint16_t ports_count;
+                uint16_t i0;
+                if (!bcmolt_epon_oam_buf_read_u16(packed, &ports_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_dasan_vlan_port) * ports_count);
+                for (i0 = 0; i0 < ports_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_dasan_vlan_port_scan(packed, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_GET_ONU_CONFIG:
+            {
+                uint8_t ports_count;
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &ports_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_dasan_port_config) * ports_count);
+                if (!bcmolt_epon_oam_buf_skip(packed, ports_count * 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_SET_STP:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_SET_TXPOWER_OFF:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_SET_LOOP_DETECT:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 6))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_SET_LOOP_DETECT_UNBLOCK:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_CLASSIFIER:
+            {
+                if (!bcmolt_epon_oam_dasan_classifier_base_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_ONU_VERSION:
+            {
+                uint16_t info_count;
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(packed, &info_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * info_count);
+                if (!bcmolt_epon_oam_buf_skip(packed, info_count * 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_ONU_FLASH_FIRMWARE_VERSION:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_ONU_ACTIVE_IMAGE_TIME:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_ONU_STATISTIC:
+            {
+                uint32_t sequences_elem_count = 0;
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_dasan_stats_seq_base_scan(packed, extra_mem))
+                    {
+                        break;
+                    }
+
+                    sequences_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sequences_elem_count * sizeof(bcmolt_epon_oam_dasan_stats_seq_base));
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_ONU_STATISTIC_CLEAR:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_ONU_STATISTIC_GET:
+            {
+                uint8_t statistics_count;
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &statistics_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_dasan_stat_value) * statistics_count);
+                if (!bcmolt_epon_oam_buf_skip(packed, statistics_count * 6))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_ONU_IGMP_SET:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_ONU_PORT_IGMP_FILTER:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DASAN_OPCODE_ONU_SHAPING:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dasan_config_base_onu_statistic_count_sequences(bcmolt_epon_oam_buf *buf)
+{
+    uint32_t count = 0;
+    uint32_t dummy = 0;
+    bcmolt_epon_oam_buf bufClone = *buf;
+    while (BCMOS_TRUE)
+    {
+        if (!bcmolt_epon_oam_dasan_stats_seq_base_scan(&bufClone, &dummy))
+        {
+            break;
+        }
+
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_distinguished_name_pack(bcmolt_epon_oam_distinguished_name *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->length > 0) && (this->name == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"name\" of struct \"bcmolt_epon_oam_distinguished_name\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write(buf, this->name, this->length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_distinguished_name_get_packed_length(bcmolt_epon_oam_distinguished_name *this)
+{
+    return 1 + this->length;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_distinguished_name_unpack(bcmolt_epon_oam_distinguished_name *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->length > 0) && (this->name == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"name\" of struct \"bcmolt_epon_oam_distinguished_name\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->name = (uint8_t *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->length * sizeof(uint8_t));
+        }
+    }
+
+    if (!bcmolt_epon_oam_buf_read(buf, this->name, this->length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_distinguished_name_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    uint8_t length;
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * length);
+    if (!bcmolt_epon_oam_buf_skip(packed, length * 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_distinguished_name_list_pack(bcmolt_epon_oam_distinguished_name_list *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t preLenFieldPos;
+    uint32_t bytesAfterLenField;
+    uint32_t i0;
+    preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+    /* skip over length field (we'll fill it in later) */
+    if (!bcmolt_epon_oam_buf_skip(buf, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->names_count > 0) && (this->names == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"names\" of struct \"bcmolt_epon_oam_distinguished_name_list\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    if (this->names_count > 65535L)
+    {
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->names_count; i0++)
+    {
+        if (!bcmolt_epon_oam_distinguished_name_pack(&this->names[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint16_t));
+    if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, bytesAfterLenField))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint16_t))))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_distinguished_name_list_get_packed_length(bcmolt_epon_oam_distinguished_name_list *this)
+{
+    uint32_t count = 2;
+    uint32_t i0;
+    if ((this->names_count > 0) && (this->names == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"names_count\" of struct \"bcmolt_epon_oam_distinguished_name_list\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return 0;
+    }
+
+    for (i0 = 0; i0 < this->names_count; i0++)
+    {
+        count += bcmolt_epon_oam_distinguished_name_get_packed_length(&this->names[i0]);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_distinguished_name_list_unpack(bcmolt_epon_oam_distinguished_name_list *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint16_t length = 0;
+    bcmolt_epon_oam_buf postLenBuf;
+    uint32_t i0;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, buf->curr);
+    this->names_count = bcmolt_epon_oam_distinguished_name_list_count_names(&postLenBuf);
+    if ((this->names_count > 0) && (this->names == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"names\" of struct \"bcmolt_epon_oam_distinguished_name_list\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->names = (bcmolt_epon_oam_distinguished_name *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->names_count * sizeof(bcmolt_epon_oam_distinguished_name));
+        }
+    }
+
+    if (this->names_count > 65535L)
+    {
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->names_count; i0++)
+    {
+        if (!bcmolt_epon_oam_distinguished_name_unpack(&this->names[i0], &postLenBuf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(buf, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_distinguished_name_list_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_buf postLenBuf;
+    uint16_t length;
+    uint32_t names_elem_count = 0;
+    if (!bcmolt_epon_oam_buf_read_u16(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, packed->curr);
+    while (BCMOS_TRUE)
+    {
+        if (!bcmolt_epon_oam_distinguished_name_scan(&postLenBuf, extra_mem))
+        {
+            break;
+        }
+
+        names_elem_count += 1;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(names_elem_count * sizeof(bcmolt_epon_oam_distinguished_name));
+    if (!bcmolt_epon_oam_buf_skip(packed, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_distinguished_name_list_count_names(bcmolt_epon_oam_buf *buf)
+{
+    uint32_t count = 0;
+    uint32_t dummy = 0;
+    bcmolt_epon_oam_buf bufClone = *buf;
+    while (BCMOS_TRUE)
+    {
+        if (!bcmolt_epon_oam_distinguished_name_scan(&bufClone, &dummy))
+        {
+            break;
+        }
+
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_mac_table_pack(bcmolt_epon_oam_dpoe_mac_table *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t i0;
+    if ((this->mac_address_count > 0) && (this->mac_address == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"mac_address\" of struct \"bcmolt_epon_oam_dpoe_mac_table\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->mac_address_count; i0++)
+    {
+        if (!bcmolt_epon_oam_buf_write_mac_address(buf, this->mac_address[i0]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dpoe_mac_table_get_packed_length(bcmolt_epon_oam_dpoe_mac_table *this)
+{
+    return (6 * this->mac_address_count);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_mac_table_unpack(bcmolt_epon_oam_dpoe_mac_table *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint32_t i0;
+    this->mac_address_count = bcmolt_epon_oam_dpoe_mac_table_count_mac_address(buf);
+    if ((this->mac_address_count > 0) && (this->mac_address == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"mac_address\" of struct \"bcmolt_epon_oam_dpoe_mac_table\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->mac_address = (bcmos_mac_address *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->mac_address_count * sizeof(bcmos_mac_address));
+        }
+    }
+
+    for (i0 = 0; i0 < this->mac_address_count; i0++)
+    {
+        if (!bcmolt_epon_oam_buf_read_mac_address(buf, &this->mac_address[i0]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_mac_table_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    uint32_t mac_address_elem_count = 0;
+    while (BCMOS_TRUE)
+    {
+        if (!bcmolt_epon_oam_buf_skip(packed, 6))
+        {
+            break;
+        }
+
+        mac_address_elem_count += 1;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(mac_address_elem_count * sizeof(bcmos_mac_address));
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dpoe_mac_table_count_mac_address(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 6);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_action_value_base_pack(bcmolt_epon_oam_dpoe_action_value_base *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t preLenFieldPos;
+    uint32_t bytesAfterLenField;
+    if (!bcmolt_epon_oam_dpoe_leaf_action_pack(this->leaf, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->width >= 0x0080)
+    {
+        bcmolt_epon_oam_buf_write_u8(buf, this->width);
+        return BCMOS_TRUE;
+    }
+
+    preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+    /* skip over length field (we'll fill it in later) */
+    if (!bcmolt_epon_oam_buf_skip(buf, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->leaf)
+    {
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_RESET_ONU:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_ADD_DYN_MAC_ADDR:
+            {
+                if (!bcmolt_epon_oam_dpoe_mac_table_pack(&this->u.add_dyn_mac_addr.mac_addess, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_DEL_DYN_MAC_ADDR:
+            {
+                if (!bcmolt_epon_oam_dpoe_mac_table_pack(&this->u.del_dyn_mac_addr.mac_address, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_ADD_STATIC_MAC_ADDR:
+            {
+                if (!bcmolt_epon_oam_dpoe_mac_table_pack(&this->u.add_static_mac_addr.mac_address, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_DEL_STATIC_MAC_ADDR:
+            {
+                if (!bcmolt_epon_oam_dpoe_mac_table_pack(&this->u.del_static_mac_addr.mac_address, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_LOOPBACK_ENABLE:
+            {
+                if (!bcmolt_epon_oam_dpoe_loopback_location_pack(this->u.loopback_enable.location, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_LOOPBACK_DISABLE:
+            {
+                if (!bcmolt_epon_oam_dpoe_loopback_location_pack(this->u.loopback_disable.location, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_LASER_TX_POWER_OFF:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.laser_tx_power_off.disable_time))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_CLEAR_INGRESS_RULES:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_ADD_INGRESS_RULES:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_DEL_INGRESS_RULES:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_ENABLE_USER_TRAFFIC:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_DISABLE_USER_TRAFFIC:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_CLEAR_DYN_LEARN_TABLE:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_CLEAR_STATIC_LEARN_TABLE:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_CLEAR_STATS:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_CONFIGURE_MCAST_LLID:
+            {
+                if (!bcmolt_epon_oam_dpoe_llid_action_pack(this->u.configure_mcast_llid.llid_action, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.configure_mcast_llid.llid_value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_RETRIEVE_CURRENT_ALARM_SUMMARY:
+        default:
+            {
+            }
+            break;
+    }
+
+    bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+    if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dpoe_action_value_base_get_packed_length(bcmolt_epon_oam_dpoe_action_value_base *this)
+{
+    if (this->width >= 0x0080)
+    {
+        return this->width;
+    }
+    else
+    {
+        uint32_t count = 3;
+        switch (this->leaf)
+        {
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_RESET_ONU:
+                {
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_ADD_DYN_MAC_ADDR:
+                {
+                    count += bcmolt_epon_oam_dpoe_mac_table_get_packed_length(&this->u.add_dyn_mac_addr.mac_addess);
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_DEL_DYN_MAC_ADDR:
+                {
+                    count += bcmolt_epon_oam_dpoe_mac_table_get_packed_length(&this->u.del_dyn_mac_addr.mac_address);
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_ADD_STATIC_MAC_ADDR:
+                {
+                    count += bcmolt_epon_oam_dpoe_mac_table_get_packed_length(&this->u.add_static_mac_addr.mac_address);
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_DEL_STATIC_MAC_ADDR:
+                {
+                    count += bcmolt_epon_oam_dpoe_mac_table_get_packed_length(&this->u.del_static_mac_addr.mac_address);
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_LOOPBACK_ENABLE:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_LOOPBACK_DISABLE:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_LASER_TX_POWER_OFF:
+                {
+                    count += 2;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_CLEAR_INGRESS_RULES:
+                {
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_ADD_INGRESS_RULES:
+                {
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_DEL_INGRESS_RULES:
+                {
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_ENABLE_USER_TRAFFIC:
+                {
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_DISABLE_USER_TRAFFIC:
+                {
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_CLEAR_DYN_LEARN_TABLE:
+                {
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_CLEAR_STATIC_LEARN_TABLE:
+                {
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_CLEAR_STATS:
+                {
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_CONFIGURE_MCAST_LLID:
+                {
+                    count += 3;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_RETRIEVE_CURRENT_ALARM_SUMMARY:
+            default:
+                {
+                }
+                break;
+        }
+
+        return count;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_action_value_base_unpack(bcmolt_epon_oam_dpoe_action_value_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    bcmolt_epon_oam_buf postLenBuf;
+    if (!bcmolt_epon_oam_dpoe_leaf_action_unpack(&this->leaf, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->width))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->width >= 0x0080)
+    {
+        return BCMOS_TRUE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, (this->width == 0) ? 0x0080 : this->width, buf->curr);
+    switch (this->leaf)
+    {
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_RESET_ONU:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_ADD_DYN_MAC_ADDR:
+            {
+                if (!bcmolt_epon_oam_dpoe_mac_table_unpack(&this->u.add_dyn_mac_addr.mac_addess, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_DEL_DYN_MAC_ADDR:
+            {
+                if (!bcmolt_epon_oam_dpoe_mac_table_unpack(&this->u.del_dyn_mac_addr.mac_address, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_ADD_STATIC_MAC_ADDR:
+            {
+                if (!bcmolt_epon_oam_dpoe_mac_table_unpack(&this->u.add_static_mac_addr.mac_address, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_DEL_STATIC_MAC_ADDR:
+            {
+                if (!bcmolt_epon_oam_dpoe_mac_table_unpack(&this->u.del_static_mac_addr.mac_address, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_LOOPBACK_ENABLE:
+            {
+                if (!bcmolt_epon_oam_dpoe_loopback_location_unpack(&this->u.loopback_enable.location, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_LOOPBACK_DISABLE:
+            {
+                if (!bcmolt_epon_oam_dpoe_loopback_location_unpack(&this->u.loopback_disable.location, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_LASER_TX_POWER_OFF:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.laser_tx_power_off.disable_time))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_CLEAR_INGRESS_RULES:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_ADD_INGRESS_RULES:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_DEL_INGRESS_RULES:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_ENABLE_USER_TRAFFIC:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_DISABLE_USER_TRAFFIC:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_CLEAR_DYN_LEARN_TABLE:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_CLEAR_STATIC_LEARN_TABLE:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_CLEAR_STATS:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_CONFIGURE_MCAST_LLID:
+            {
+                if (!bcmolt_epon_oam_dpoe_llid_action_unpack(&this->u.configure_mcast_llid.llid_action, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.configure_mcast_llid.llid_value))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_RETRIEVE_CURRENT_ALARM_SUMMARY:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(buf, (this->width == 0) ? 0x0080 : this->width))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_action_value_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_dpoe_leaf_action leaf;
+    bcmolt_epon_oam_buf postLenBuf;
+    uint8_t length;
+    if (!bcmolt_epon_oam_dpoe_leaf_action_unpack(&leaf, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (length >= 0x0080)
+    {
+        return BCMOS_TRUE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+    switch (leaf)
+    {
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_RESET_ONU:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_ADD_DYN_MAC_ADDR:
+            {
+                if (!bcmolt_epon_oam_dpoe_mac_table_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_DEL_DYN_MAC_ADDR:
+            {
+                if (!bcmolt_epon_oam_dpoe_mac_table_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_ADD_STATIC_MAC_ADDR:
+            {
+                if (!bcmolt_epon_oam_dpoe_mac_table_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_DEL_STATIC_MAC_ADDR:
+            {
+                if (!bcmolt_epon_oam_dpoe_mac_table_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_LOOPBACK_ENABLE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_LOOPBACK_DISABLE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_LASER_TX_POWER_OFF:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_CLEAR_INGRESS_RULES:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_ADD_INGRESS_RULES:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_DEL_INGRESS_RULES:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_ENABLE_USER_TRAFFIC:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_DISABLE_USER_TRAFFIC:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_CLEAR_DYN_LEARN_TABLE:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_CLEAR_STATIC_LEARN_TABLE:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_CLEAR_STATS:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_CONFIGURE_MCAST_LLID:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_RETRIEVE_CURRENT_ALARM_SUMMARY:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_queue_set_pack(bcmolt_epon_oam_dpoe_queue_set *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->queue_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->queue_count > 0) && (this->queue_sizes == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"queue_sizes\" of struct \"bcmolt_epon_oam_dpoe_queue_set\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write(buf, this->queue_sizes, this->queue_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dpoe_queue_set_get_packed_length(bcmolt_epon_oam_dpoe_queue_set *this)
+{
+    return 1 + this->queue_count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_queue_set_unpack(bcmolt_epon_oam_dpoe_queue_set *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->queue_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->queue_count > 0) && (this->queue_sizes == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"queue_sizes\" of struct \"bcmolt_epon_oam_dpoe_queue_set\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->queue_sizes = (uint8_t *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->queue_count * sizeof(uint8_t));
+        }
+    }
+
+    if (!bcmolt_epon_oam_buf_read(buf, this->queue_sizes, this->queue_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_queue_set_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    uint8_t queue_count;
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &queue_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * queue_count);
+    if (!bcmolt_epon_oam_buf_skip(packed, queue_count * 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_queue_pack(bcmolt_epon_oam_dpoe_queue *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_dpoe_object_type_pack(this->type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->instance))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->queue))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_queue_unpack(bcmolt_epon_oam_dpoe_queue *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_dpoe_object_type_unpack(&this->type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->instance))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->queue))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_queue_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 4);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_object_context_base_pack(bcmolt_epon_oam_dpoe_object_context_base *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t preLenFieldPos;
+    uint32_t bytesAfterLenField;
+    if (!bcmolt_epon_oam_dpoe_object_type_pack(this->object_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->length >= 0x0080)
+    {
+        bcmolt_epon_oam_buf_write_u8(buf, this->length);
+        return BCMOS_TRUE;
+    }
+
+    preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+    /* skip over length field (we'll fill it in later) */
+    if (!bcmolt_epon_oam_buf_skip(buf, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->object_type)
+    {
+        case BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_ONU:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.onu.instance))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_NETWORK_PON:
+            {
+                if ((this->u.network_pon.pon_count > 0) && (this->u.network_pon.pon == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"pon\" of struct \"bcmolt_epon_oam_dpoe_object_context_base_network_pon\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.network_pon.pon, this->u.network_pon.pon_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_LINK:
+            {
+                if ((this->u.link.link_count > 0) && (this->u.link.link == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"link\" of struct \"bcmolt_epon_oam_dpoe_object_context_base_link\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.link.link, this->u.link.link_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_USER_PORT:
+            {
+                if ((this->u.user_port.port_count > 0) && (this->u.user_port.port == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"port\" of struct \"bcmolt_epon_oam_dpoe_object_context_base_user_port\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.user_port.port, this->u.user_port.port_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_QUEUE:
+            {
+                if (!bcmolt_epon_oam_dpoe_queue_pack(&this->u.queue.queue, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_MCAST_LINK:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.mcast_link.mcast_llid))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_BRIDGE:
+            {
+                if ((this->u.bridge.bridge_count > 0) && (this->u.bridge.bridge == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"bridge\" of struct \"bcmolt_epon_oam_dpoe_object_context_base_bridge\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.bridge.bridge, this->u.bridge.bridge_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_BRIDGE_PORT:
+            {
+                if ((this->u.bridge_port.port_count > 0) && (this->u.bridge_port.port == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"port\" of struct \"bcmolt_epon_oam_dpoe_object_context_base_bridge_port\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.bridge_port.port, this->u.bridge_port.port_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_MEP:
+        default:
+            {
+            }
+            break;
+    }
+
+    bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+    if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dpoe_object_context_base_get_packed_length(bcmolt_epon_oam_dpoe_object_context_base *this)
+{
+    if (this->length >= 0x0080)
+    {
+        return this->length;
+    }
+    else
+    {
+        uint32_t count = 3;
+        switch (this->object_type)
+        {
+            case BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_ONU:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_NETWORK_PON:
+                {
+                    count += this->u.network_pon.pon_count;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_LINK:
+                {
+                    count += this->u.link.link_count;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_USER_PORT:
+                {
+                    count += this->u.user_port.port_count;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_QUEUE:
+                {
+                    count += 4;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_MCAST_LINK:
+                {
+                    count += 2;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_BRIDGE:
+                {
+                    count += this->u.bridge.bridge_count;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_BRIDGE_PORT:
+                {
+                    count += this->u.bridge_port.port_count;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_MEP:
+            default:
+                {
+                }
+                break;
+        }
+
+        return count;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_object_context_base_unpack(bcmolt_epon_oam_dpoe_object_context_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    bcmolt_epon_oam_buf postLenBuf;
+    if (!bcmolt_epon_oam_dpoe_object_type_unpack(&this->object_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->length >= 0x0080)
+    {
+        return BCMOS_TRUE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, (this->length == 0) ? 0x0080 : this->length, buf->curr);
+    switch (this->object_type)
+    {
+        case BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_ONU:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.onu.instance))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_NETWORK_PON:
+            {
+                this->u.network_pon.pon_count = bcmolt_epon_oam_dpoe_object_context_base_network_pon_count_pon(&postLenBuf);
+                if ((this->u.network_pon.pon_count > 0) && (this->u.network_pon.pon == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"pon\" of struct \"bcmolt_epon_oam_dpoe_object_context_base_network_pon\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.network_pon.pon = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.network_pon.pon_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.network_pon.pon, this->u.network_pon.pon_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_LINK:
+            {
+                this->u.link.link_count = bcmolt_epon_oam_dpoe_object_context_base_link_count_link(&postLenBuf);
+                if ((this->u.link.link_count > 0) && (this->u.link.link == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"link\" of struct \"bcmolt_epon_oam_dpoe_object_context_base_link\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.link.link = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.link.link_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.link.link, this->u.link.link_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_USER_PORT:
+            {
+                this->u.user_port.port_count = bcmolt_epon_oam_dpoe_object_context_base_user_port_count_port(&postLenBuf);
+                if ((this->u.user_port.port_count > 0) && (this->u.user_port.port == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"port\" of struct \"bcmolt_epon_oam_dpoe_object_context_base_user_port\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.user_port.port = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.user_port.port_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.user_port.port, this->u.user_port.port_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_QUEUE:
+            {
+                if (!bcmolt_epon_oam_dpoe_queue_unpack(&this->u.queue.queue, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_MCAST_LINK:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.mcast_link.mcast_llid))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_BRIDGE:
+            {
+                this->u.bridge.bridge_count = bcmolt_epon_oam_dpoe_object_context_base_bridge_count_bridge(&postLenBuf);
+                if ((this->u.bridge.bridge_count > 0) && (this->u.bridge.bridge == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"bridge\" of struct \"bcmolt_epon_oam_dpoe_object_context_base_bridge\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.bridge.bridge = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.bridge.bridge_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.bridge.bridge, this->u.bridge.bridge_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_BRIDGE_PORT:
+            {
+                this->u.bridge_port.port_count = bcmolt_epon_oam_dpoe_object_context_base_bridge_port_count_port(&postLenBuf);
+                if ((this->u.bridge_port.port_count > 0) && (this->u.bridge_port.port == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"port\" of struct \"bcmolt_epon_oam_dpoe_object_context_base_bridge_port\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.bridge_port.port = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.bridge_port.port_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.bridge_port.port, this->u.bridge_port.port_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_MEP:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(buf, (this->length == 0) ? 0x0080 : this->length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_object_context_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_dpoe_object_type object_type;
+    bcmolt_epon_oam_buf postLenBuf;
+    uint8_t length;
+    if (!bcmolt_epon_oam_dpoe_object_type_unpack(&object_type, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (length >= 0x0080)
+    {
+        return BCMOS_TRUE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+    switch (object_type)
+    {
+        case BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_ONU:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_NETWORK_PON:
+            {
+                uint32_t pon_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                    {
+                        break;
+                    }
+
+                    pon_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(pon_elem_count * sizeof(uint8_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_LINK:
+            {
+                uint32_t link_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                    {
+                        break;
+                    }
+
+                    link_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(link_elem_count * sizeof(uint8_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_USER_PORT:
+            {
+                uint32_t port_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                    {
+                        break;
+                    }
+
+                    port_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(port_elem_count * sizeof(uint8_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_QUEUE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_MCAST_LINK:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_BRIDGE:
+            {
+                uint32_t bridge_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                    {
+                        break;
+                    }
+
+                    bridge_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(bridge_elem_count * sizeof(uint8_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_BRIDGE_PORT:
+            {
+                uint32_t port_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                    {
+                        break;
+                    }
+
+                    port_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(port_elem_count * sizeof(uint8_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_MEP:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dpoe_object_context_base_network_pon_count_pon(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dpoe_object_context_base_link_count_link(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dpoe_object_context_base_user_port_count_port(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dpoe_object_context_base_bridge_count_bridge(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dpoe_object_context_base_bridge_port_count_port(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_var_descriptor_pack(bcmolt_epon_oam_dpoe_var_descriptor *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_dpoe_branch_pack(this->branch, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->branch)
+    {
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_END:
+            {
+                if ((this->u.end.unknown_count > 0) && (this->u.end.unknown == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"unknown\" of struct \"bcmolt_epon_oam_dpoe_var_descriptor_end\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.end.unknown, this->u.end.unknown_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_STANDARD_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_var_leaf_attribute_pack(this->u.standard_attribute.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_STANDARD_ACTION:
+            {
+                if (!bcmolt_epon_oam_var_leaf_action_pack(this->u.standard_action.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_OBJECT:
+            {
+                if (!bcmolt_epon_oam_dpoe_object_context_base_pack(&this->u.object.object_context, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_dpoe_leaf_attribute_pack(this->u.extended_attribute.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ACTION:
+            {
+                if (!bcmolt_epon_oam_dpoe_leaf_action_pack(this->u.extended_action.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_PROGRAMMABLE_COUNTER:
+        default:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.def.leaf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dpoe_var_descriptor_get_packed_length(bcmolt_epon_oam_dpoe_var_descriptor *this)
+{
+    uint32_t count = 1;
+    switch (this->branch)
+    {
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_END:
+            {
+                count += this->u.end.unknown_count;
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_STANDARD_ATTRIBUTE:
+            {
+                count += 2;
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_STANDARD_ACTION:
+            {
+                count += 2;
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_OBJECT:
+            {
+                count += bcmolt_epon_oam_dpoe_object_context_base_get_packed_length(&this->u.object.object_context);
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ATTRIBUTE:
+            {
+                count += 2;
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ACTION:
+            {
+                count += 2;
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_PROGRAMMABLE_COUNTER:
+        default:
+            {
+                count += 2;
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_var_descriptor_unpack(bcmolt_epon_oam_dpoe_var_descriptor *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_dpoe_branch_unpack(&this->branch, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->branch)
+    {
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_END:
+            {
+                this->u.end.unknown_count = bcmolt_epon_oam_dpoe_var_descriptor_end_count_unknown(buf);
+                if ((this->u.end.unknown_count > 0) && (this->u.end.unknown == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"unknown\" of struct \"bcmolt_epon_oam_dpoe_var_descriptor_end\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.end.unknown = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.end.unknown_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.end.unknown, this->u.end.unknown_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_STANDARD_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_var_leaf_attribute_unpack(&this->u.standard_attribute.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_STANDARD_ACTION:
+            {
+                if (!bcmolt_epon_oam_var_leaf_action_unpack(&this->u.standard_action.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_OBJECT:
+            {
+                if (!bcmolt_epon_oam_dpoe_object_context_base_unpack(&this->u.object.object_context, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_dpoe_leaf_attribute_unpack(&this->u.extended_attribute.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ACTION:
+            {
+                if (!bcmolt_epon_oam_dpoe_leaf_action_unpack(&this->u.extended_action.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_PROGRAMMABLE_COUNTER:
+        default:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.def.leaf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_var_descriptor_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_dpoe_branch branch;
+    if (!bcmolt_epon_oam_dpoe_branch_unpack(&branch, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (branch)
+    {
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_END:
+            {
+                uint32_t unknown_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                    {
+                        break;
+                    }
+
+                    unknown_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(unknown_elem_count * sizeof(uint8_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_STANDARD_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_STANDARD_ACTION:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_OBJECT:
+            {
+                if (!bcmolt_epon_oam_dpoe_object_context_base_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ACTION:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_PROGRAMMABLE_COUNTER:
+        default:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dpoe_var_descriptor_end_count_unknown(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_statistic_threshold_pack(bcmolt_epon_oam_dpoe_statistic_threshold *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_dpoe_var_descriptor_pack(&this->statistic, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->rising_threshold))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->falling_threshold))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dpoe_statistic_threshold_get_packed_length(bcmolt_epon_oam_dpoe_statistic_threshold *this)
+{
+    return 8 + bcmolt_epon_oam_dpoe_var_descriptor_get_packed_length(&this->statistic);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_statistic_threshold_unpack(bcmolt_epon_oam_dpoe_statistic_threshold *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_dpoe_var_descriptor_unpack(&this->statistic, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->rising_threshold))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->falling_threshold))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_statistic_threshold_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    if (!bcmolt_epon_oam_dpoe_var_descriptor_scan(packed, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_field_pack(bcmolt_epon_oam_dpoe_field *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_dpoe_field_code_pack(this->code, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->instance))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_field_unpack(bcmolt_epon_oam_dpoe_field *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_dpoe_field_code_unpack(&this->code, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->instance))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_field_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 2);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_rule_result_field_v2_pack(bcmolt_epon_oam_dpoe_rule_result_field_v2 *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_dpoe_field_pack(&this->field, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->msb_mask))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->lsb_mask))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_rule_result_field_v2_unpack(bcmolt_epon_oam_dpoe_rule_result_field_v2 *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_dpoe_field_unpack(&this->field, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->msb_mask))
+    {
+        /*Optional unpack fails do not cause errors */
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->lsb_mask))
+    {
+        /*Optional unpack fails do not cause errors */
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_rule_result_field_v2_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 4);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_rule_result_field_pack(bcmolt_epon_oam_dpoe_rule_result_field *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_dpoe_field_pack(&this->field, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_rule_result_field_unpack(bcmolt_epon_oam_dpoe_rule_result_field *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_dpoe_field_unpack(&this->field, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_rule_result_field_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 2);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_rule_result_pack(bcmolt_epon_oam_dpoe_rule_result *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_dpoe_result_pack(this->result, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->result)
+    {
+        case BCMOLT_EPON_OAM_DPOE_RESULT_NOP:
+            {
+                /* no data to pack for empty */
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_RESULT_DISCARD:
+            {
+                /* no data to pack for empty */
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_RESULT_FORWARD:
+            {
+                /* no data to pack for empty */
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_RESULT_QUEUE:
+            {
+                if (!bcmolt_epon_oam_dpoe_queue_pack(&this->u.queue.queue, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_RESULT_SET:
+            {
+                if (!bcmolt_epon_oam_dpoe_rule_result_field_v2_pack(&this->u.set.field, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.set.value_count > 0) && (this->u.set.value == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"value\" of struct \"bcmolt_epon_oam_dpoe_rule_result_set\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.set.value, this->u.set.value_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_RESULT_COPY:
+            {
+                if (!bcmolt_epon_oam_dpoe_rule_result_field_v2_pack(&this->u.copy.field, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_RESULT_DELETE:
+            {
+                if (!bcmolt_epon_oam_dpoe_rule_result_field_pack(&this->u.delete.field, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_RESULT_INSERT:
+            {
+                if (!bcmolt_epon_oam_dpoe_rule_result_field_pack(&this->u.insert.field, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_RESULT_REPLACE:
+            {
+                if (!bcmolt_epon_oam_dpoe_rule_result_field_pack(&this->u.replace.field, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_RESULT_CLEAR_DELETE:
+            {
+                if (!bcmolt_epon_oam_dpoe_rule_result_field_pack(&this->u.clear_delete.field, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_RESULT_CLEAR_INSERT:
+            {
+                if (!bcmolt_epon_oam_dpoe_rule_result_field_pack(&this->u.clear_insert.field, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dpoe_rule_result_get_packed_length(bcmolt_epon_oam_dpoe_rule_result *this)
+{
+    uint32_t count = 1;
+    switch (this->result)
+    {
+        case BCMOLT_EPON_OAM_DPOE_RESULT_NOP:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_RESULT_DISCARD:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_RESULT_FORWARD:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_RESULT_QUEUE:
+            {
+                count += 4;
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_RESULT_SET:
+            {
+                count += 4 + this->u.set.value_count;
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_RESULT_COPY:
+            {
+                count += 4;
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_RESULT_DELETE:
+            {
+                count += 2;
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_RESULT_INSERT:
+            {
+                count += 2;
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_RESULT_REPLACE:
+            {
+                count += 2;
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_RESULT_CLEAR_DELETE:
+            {
+                count += 2;
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_RESULT_CLEAR_INSERT:
+            {
+                count += 2;
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_rule_result_unpack(bcmolt_epon_oam_dpoe_rule_result *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_dpoe_result_unpack(&this->result, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->result)
+    {
+        case BCMOLT_EPON_OAM_DPOE_RESULT_NOP:
+            {
+                /* no data to unpack */
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_RESULT_DISCARD:
+            {
+                /* no data to unpack */
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_RESULT_FORWARD:
+            {
+                /* no data to unpack */
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_RESULT_QUEUE:
+            {
+                if (!bcmolt_epon_oam_dpoe_queue_unpack(&this->u.queue.queue, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_RESULT_SET:
+            {
+                if (!bcmolt_epon_oam_dpoe_rule_result_field_v2_unpack(&this->u.set.field, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                this->u.set.value_count = bcmolt_epon_oam_dpoe_rule_result_set_count_value(buf);
+                if ((this->u.set.value_count > 0) && (this->u.set.value == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"value\" of struct \"bcmolt_epon_oam_dpoe_rule_result_set\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.set.value = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.set.value_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.set.value, this->u.set.value_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_RESULT_COPY:
+            {
+                if (!bcmolt_epon_oam_dpoe_rule_result_field_v2_unpack(&this->u.copy.field, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_RESULT_DELETE:
+            {
+                if (!bcmolt_epon_oam_dpoe_rule_result_field_unpack(&this->u.delete.field, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_RESULT_INSERT:
+            {
+                if (!bcmolt_epon_oam_dpoe_rule_result_field_unpack(&this->u.insert.field, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_RESULT_REPLACE:
+            {
+                if (!bcmolt_epon_oam_dpoe_rule_result_field_unpack(&this->u.replace.field, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_RESULT_CLEAR_DELETE:
+            {
+                if (!bcmolt_epon_oam_dpoe_rule_result_field_unpack(&this->u.clear_delete.field, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_RESULT_CLEAR_INSERT:
+            {
+                if (!bcmolt_epon_oam_dpoe_rule_result_field_unpack(&this->u.clear_insert.field, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_rule_result_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_dpoe_result result;
+    if (!bcmolt_epon_oam_dpoe_result_unpack(&result, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (result)
+    {
+        case BCMOLT_EPON_OAM_DPOE_RESULT_NOP:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 0))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_RESULT_DISCARD:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 0))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_RESULT_FORWARD:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 0))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_RESULT_QUEUE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_RESULT_SET:
+            {
+                uint32_t value_elem_count = 0;
+                if (!bcmolt_epon_oam_dpoe_rule_result_field_v2_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                    {
+                        break;
+                    }
+
+                    value_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(value_elem_count * sizeof(uint8_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_RESULT_COPY:
+            {
+                if (!bcmolt_epon_oam_dpoe_rule_result_field_v2_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_RESULT_DELETE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_RESULT_INSERT:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_RESULT_REPLACE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_RESULT_CLEAR_DELETE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_RESULT_CLEAR_INSERT:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dpoe_rule_result_set_count_value(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_rule_pack(bcmolt_epon_oam_dpoe_rule *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_rule_type_pack(this->subtype, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->subtype)
+    {
+        case BCMOLT_EPON_OAM_RULE_TYPE_TERMINATOR:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_RULE_TYPE_HEADER:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.header.precedence))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_RULE_TYPE_CLAUSE:
+            {
+                if (!bcmolt_epon_oam_dpoe_field_pack(&this->u.clause.field_code, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.clause.msb_mask))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.clause.lsb_mask))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_rule_operator_pack(this->u.clause.operator, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.clause.match_value_length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.clause.match_value_length > 0) && (this->u.clause.match_value == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"match_value\" of struct \"bcmolt_epon_oam_dpoe_rule_clause\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.clause.match_value, this->u.clause.match_value_length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_RULE_TYPE_RESULT:
+            {
+                if (!bcmolt_epon_oam_dpoe_rule_result_pack(&this->u.result.result, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_RULE_TYPE_ENTRY:
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dpoe_rule_get_packed_length(bcmolt_epon_oam_dpoe_rule *this)
+{
+    uint32_t count = 1;
+    switch (this->subtype)
+    {
+        case BCMOLT_EPON_OAM_RULE_TYPE_TERMINATOR:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_RULE_TYPE_HEADER:
+            {
+                count += 1;
+            }
+            break;
+        case BCMOLT_EPON_OAM_RULE_TYPE_CLAUSE:
+            {
+                count += 6 + this->u.clause.match_value_length;
+            }
+            break;
+        case BCMOLT_EPON_OAM_RULE_TYPE_RESULT:
+            {
+                count += bcmolt_epon_oam_dpoe_rule_result_get_packed_length(&this->u.result.result);
+            }
+            break;
+        case BCMOLT_EPON_OAM_RULE_TYPE_ENTRY:
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_rule_unpack(bcmolt_epon_oam_dpoe_rule *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_rule_type_unpack(&this->subtype, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->subtype)
+    {
+        case BCMOLT_EPON_OAM_RULE_TYPE_TERMINATOR:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_RULE_TYPE_HEADER:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.header.precedence))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_RULE_TYPE_CLAUSE:
+            {
+                if (!bcmolt_epon_oam_dpoe_field_unpack(&this->u.clause.field_code, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.clause.msb_mask))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.clause.lsb_mask))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_rule_operator_unpack(&this->u.clause.operator, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.clause.match_value_length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.clause.match_value_length > 0) && (this->u.clause.match_value == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"match_value\" of struct \"bcmolt_epon_oam_dpoe_rule_clause\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.clause.match_value = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.clause.match_value_length * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.clause.match_value, this->u.clause.match_value_length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_RULE_TYPE_RESULT:
+            {
+                if (!bcmolt_epon_oam_dpoe_rule_result_unpack(&this->u.result.result, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_RULE_TYPE_ENTRY:
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_rule_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_rule_type subtype;
+    if (!bcmolt_epon_oam_rule_type_unpack(&subtype, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (subtype)
+    {
+        case BCMOLT_EPON_OAM_RULE_TYPE_TERMINATOR:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_RULE_TYPE_HEADER:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_RULE_TYPE_CLAUSE:
+            {
+                uint8_t match_value_length;
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &match_value_length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * match_value_length);
+                if (!bcmolt_epon_oam_buf_skip(packed, match_value_length * 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_RULE_TYPE_RESULT:
+            {
+                if (!bcmolt_epon_oam_dpoe_rule_result_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_RULE_TYPE_ENTRY:
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_shaper_pack(bcmolt_epon_oam_dpoe_shaper *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->queue_bitmap))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->maximum_rate))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->burst_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_shaper_unpack(bcmolt_epon_oam_dpoe_shaper *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->queue_bitmap))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->maximum_rate))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->burst_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_shaper_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 7);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_rate_level_pack(bcmolt_epon_oam_dpoe_rate_level *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_traffic_bitmap_pack(this->traffic_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->maximum_rate))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_rate_level_unpack(bcmolt_epon_oam_dpoe_rate_level *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_traffic_bitmap_unpack(&this->traffic_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->maximum_rate))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_rate_level_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 5);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_event_options_pack(bcmolt_epon_oam_dpoe_event_options *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->event_code))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->enabled_disabled))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_event_options_unpack(bcmolt_epon_oam_dpoe_event_options *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->event_code))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->enabled_disabled))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_event_options_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 2);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_u16_list_u8_pack(bcmolt_epon_oam_u16_list_u8 *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t i0;
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_epon_oam_u16_list_u8\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_epon_oam_buf_write_u16(buf, this->val[i0]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_u16_list_u8_get_packed_length(bcmolt_epon_oam_u16_list_u8 *this)
+{
+    return 1 + (2 * this->len);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_u16_list_u8_unpack(bcmolt_epon_oam_u16_list_u8 *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint8_t i0;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->len > 0) && (this->val == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmolt_epon_oam_u16_list_u8\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->val = (uint16_t *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->len * sizeof(uint16_t));
+        }
+    }
+
+    for (i0 = 0; i0 < this->len; i0++)
+    {
+        if (!bcmolt_epon_oam_buf_read_u16(buf, &this->val[i0]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_u16_list_u8_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    uint8_t len;
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &len))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint16_t) * len);
+    if (!bcmolt_epon_oam_buf_skip(packed, len * 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_attribute_value_base_pack(bcmolt_epon_oam_dpoe_attribute_value_base *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t preLenFieldPos;
+    uint32_t bytesAfterLenField;
+    if (!bcmolt_epon_oam_dpoe_leaf_attribute_pack(this->leaf, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->width >= 0x0080)
+    {
+        bcmolt_epon_oam_buf_write_u8(buf, this->width);
+        return BCMOS_TRUE;
+    }
+
+    preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+    /* skip over length field (we'll fill it in later) */
+    if (!bcmolt_epon_oam_buf_skip(buf, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->leaf)
+    {
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_SEQUENCE_NUMBER:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.sequence_number.sequnce_number))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ONU_ID:
+            {
+                if (!bcmolt_epon_oam_buf_write_mac_address(buf, this->u.onu_id.id))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_FIRMWARE_INFO:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.firmware_info.boot_version))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.firmware_info.boot_crc32))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.firmware_info.application_version))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.firmware_info.application_crc32))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_CHIP_INFO:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.chip_info.jedec_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.chip_info.chip_model))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.chip_info.chip_version))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DATE_OF_MANUFACTURE:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.date_of_manufacture.year))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.date_of_manufacture.month))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.date_of_manufacture.day))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_MANUFACTURER_INFO:
+            {
+                if ((this->u.manufacturer_info.def_count > 0) && (this->u.manufacturer_info.def == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"def\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_manufacturer_info\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.manufacturer_info.def, this->u.manufacturer_info.def_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_MAX_LOGICAL_LINKS:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.max_logical_links.bidirectional))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.max_logical_links.downstream_only))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_NUM_EPON_PORTS:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.num_epon_ports.port_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_NUM_UNI_PORTS:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.num_uni_ports.port_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_PACKET_BUFFER:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.packet_buffer.upstream_queues))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.packet_buffer.up_queues_max_per_link))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.packet_buffer.up_queue_increment))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.packet_buffer.downstream_queues))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.packet_buffer.dn_queues_max_per_port))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.packet_buffer.dn_queue_increment))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.packet_buffer.total_packet_buffer))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.packet_buffer.upstream_packet_buffer))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.packet_buffer.downsream_packet_buffer))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_REPORT_THRESHOLDS:
+            {
+                uint8_t i0;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.report_thresholds.number_of_queue_sets))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.report_thresholds.report_values_per_queue_set))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.report_thresholds.report_values_per_queue_set > 0) && (this->u.report_thresholds.queue_set0 == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"queue_set0\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_report_thresholds\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i0 = 0; i0 < this->u.report_thresholds.report_values_per_queue_set; i0++)
+                {
+                    if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.report_thresholds.queue_set0[i0]))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+
+                if (((uint64_t) this->u.report_thresholds.number_of_queue_sets > 0x0001))
+                {
+                    if ((this->u.report_thresholds.report_values_per_queue_set > 0) && (this->u.report_thresholds.queue_set1 == NULL))
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"queue_set1\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_report_thresholds\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+
+                    uint8_t i1;
+                    for (i1 = 0; i1 < this->u.report_thresholds.report_values_per_queue_set; i1++)
+                    {
+                        if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.report_thresholds.queue_set1[i1]))
+                        {
+                            return BCMOS_FALSE;
+                        }
+                    }
+                }
+
+                if (((uint64_t) this->u.report_thresholds.number_of_queue_sets > 0x0002))
+                {
+                    if ((this->u.report_thresholds.report_values_per_queue_set > 0) && (this->u.report_thresholds.queue_set2 == NULL))
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"queue_set2\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_report_thresholds\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+
+                    uint8_t i2;
+                    for (i2 = 0; i2 < this->u.report_thresholds.report_values_per_queue_set; i2++)
+                    {
+                        if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.report_thresholds.queue_set2[i2]))
+                        {
+                            return BCMOS_FALSE;
+                        }
+                    }
+                }
+
+                if (((uint64_t) this->u.report_thresholds.number_of_queue_sets > 0x0003))
+                {
+                    if ((this->u.report_thresholds.report_values_per_queue_set > 0) && (this->u.report_thresholds.queue_set3 == NULL))
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"queue_set3\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_report_thresholds\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+
+                    uint8_t i3;
+                    for (i3 = 0; i3 < this->u.report_thresholds.report_values_per_queue_set; i3++)
+                    {
+                        if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.report_thresholds.queue_set3[i3]))
+                        {
+                            return BCMOS_FALSE;
+                        }
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_LINK_STATE:
+            {
+                if (!bcmolt_epon_oam_dpoe_link_state_pack(this->u.link_state.link_state, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_OAM_RATE:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.oam_rate.maximum_oam_rate))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.oam_rate.minimum_oam_rate))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DYN_LEARN_TABLE_SIZE:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.dyn_learn_table_size.max_mac_allowed))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DYN_LEARN_AGE_LIMIT:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.dyn_learn_age_limit.dynamic_address_age_limit))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DYN_MAC_TABLE:
+            {
+                if (!bcmolt_epon_oam_dpoe_mac_table_pack(&this->u.dyn_mac_table.mac_address, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_STATIC_MAC_TABLE:
+            {
+                if (!bcmolt_epon_oam_dpoe_mac_table_pack(&this->u.static_mac_table.mac_address, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_PORT_CAPABILITY:
+            {
+                if (!bcmolt_epon_oam_auto_negotiation_capability_pack(this->u.port_capability.maximum_capabilities, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_auto_negotiation_capability_pack(this->u.port_capability.current_capabilities, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DYN_LEARN_MODE:
+            {
+                if (!bcmolt_epon_oam_dpoe_learning_mode_pack(this->u.dyn_learn_mode.learning_mode, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_MIN_MAC_LIMIT:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.min_mac_limit.minimum_guaranteed_limit))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_MAX_MAC_ALLOWED:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.max_mac_allowed.max_allowed))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_AGG_MAC_LIMIT:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.agg_mac_limit.aggregate_mac_limit))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_LEN_ERR_DISCARD:
+            {
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.len_err_discard.len_error_discard))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_FLOOD_UNKNOWN:
+            {
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.flood_unknown.flood_unknown))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_LOCAL_SWITCHING:
+            {
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.local_switching.local_switching))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_QUEUE_CONFIG:
+            {
+                uint8_t i4;
+                uint8_t i5;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.queue_config.number_of_links))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.queue_config.number_of_links > 0) && (this->u.queue_config.link_configuration == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"link_configuration\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_queue_config\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i4 = 0; i4 < this->u.queue_config.number_of_links; i4++)
+                {
+                    if (!bcmolt_epon_oam_dpoe_queue_set_pack(&this->u.queue_config.link_configuration[i4], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.queue_config.number_of_ports))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.queue_config.number_of_ports > 0) && (this->u.queue_config.port_configuration == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"port_configuration\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_queue_config\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i5 = 0; i5 < this->u.queue_config.number_of_ports; i5++)
+                {
+                    if (!bcmolt_epon_oam_dpoe_queue_set_pack(&this->u.queue_config.port_configuration[i5], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_FIRMWARE_FILENAME:
+            {
+                if ((this->u.firmware_filename.firmware_filename_count > 0) && (this->u.firmware_filename.firmware_filename == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"firmware_filename\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_firmware_filename\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.firmware_filename.firmware_filename, this->u.firmware_filename.firmware_filename_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, 0))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_PORT_STAT_THRESH:
+            {
+                if (!bcmolt_epon_oam_dpoe_statistic_threshold_pack(&this->u.port_stat_thresh.stat_threshold, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_LINK_STAT_THRESH:
+            {
+                if (!bcmolt_epon_oam_dpoe_statistic_threshold_pack(&this->u.link_stat_thresh.stat_threshold, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_KEY_EXPIRY_TIME:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.key_expiry_time.time))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ENCRYPT_MODE:
+            {
+                if (!bcmolt_epon_oam_dpoe_encryption_mode_pack(this->u.encrypt_mode.encryption_method, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_PORT_INGRESS_RULE:
+            {
+                if (!bcmolt_epon_oam_dpoe_rule_pack(&this->u.port_ingress_rule.rule, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_LUE_FIELD:
+            {
+                if (!bcmolt_epon_oam_dpoe_field_code_pack(this->u.lue_field.field_code, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_dpoe_layer_select_pack(this->u.lue_field.layer_select, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.lue_field.bit_word_offset))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.lue_field.bit_offset))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.lue_field.bit_width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.lue_field.reference_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ALT_CVLAN_ETHERTYPE:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.alt_cvlan_ethertype.tpid))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.alt_cvlan_ethertype.insert))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ALT_SVLAN_ETHERTYPE:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.alt_svlan_ethertype.tpid))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.alt_svlan_ethertype.insert))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_BC_RATE_LIMIT:
+            {
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.bc_rate_limit.limit))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_EGRESS_SHAPING:
+            {
+                uint8_t i6;
+                if (!bcmolt_epon_oam_traffic_bitmap_pack(this->u.egress_shaping.traffic_types, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_rate_units_pack(this->u.egress_shaping.rate_units, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.egress_shaping.number_of_shapers))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.egress_shaping.number_of_shapers > 0) && (this->u.egress_shaping.shapers == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"shapers\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_egress_shaping\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i6 = 0; i6 < this->u.egress_shaping.number_of_shapers; i6++)
+                {
+                    if (!bcmolt_epon_oam_dpoe_shaper_pack(&this->u.egress_shaping.shapers[i6], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_INGRESS_POLICING:
+            {
+                uint8_t i7;
+                if (!bcmolt_epon_oam_rate_units_pack(this->u.ingress_policing.rate_units, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.ingress_policing.number_of_rate_levels))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.ingress_policing.number_of_rate_levels > 0) && (this->u.ingress_policing.rate_levels == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"rate_levels\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_ingress_policing\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i7 = 0; i7 < this->u.ingress_policing.number_of_rate_levels; i7++)
+                {
+                    if (!bcmolt_epon_oam_dpoe_rate_level_pack(&this->u.ingress_policing.rate_levels[i7], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_FEC_MODE:
+            {
+                if (!bcmolt_epon_oam_dpoe_fec_mode_pack(this->u.fec_mode.rx_down, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_dpoe_fec_mode_pack(this->u.fec_mode.tx_up, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_MFR_NAME:
+            {
+                if ((this->u.mfr_name.man_name_count > 0) && (this->u.mfr_name.man_name == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"man_name\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_mfr_name\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.mfr_name.man_name, this->u.mfr_name.man_name_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_FWARE_MFG_TIME_VAR_CTRL:
+            {
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.fware_mfg_time_var_ctrl.code_access_start, 13))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.fware_mfg_time_var_ctrl.cvc_access_start, 13))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_VENDOR_NAME:
+            {
+                if ((this->u.vendor_name.vendor_name_count > 0) && (this->u.vendor_name.vendor_name == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vendor_name\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_vendor_name\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.vendor_name.vendor_name_count > 31)
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.vendor_name.vendor_name, this->u.vendor_name.vendor_name_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_MODEL_NUMBER:
+            {
+                if ((this->u.model_number.model_number_count > 0) && (this->u.model_number.model_number == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"model_number\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_model_number\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.model_number.model_number_count > 31)
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.model_number.model_number, this->u.model_number.model_number_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_HW_VERSION:
+            {
+                if ((this->u.hw_version.hw_version_count > 0) && (this->u.hw_version.hw_version == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"hw_version\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_hw_version\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.hw_version.hw_version_count > 31)
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.hw_version.hw_version, this->u.hw_version.hw_version_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_OPT_MON_TEMPERATURE:
+            {
+                uint32_t i8;
+                if ((this->u.opt_mon_temperature.current_temperature_count > 0) && (this->u.opt_mon_temperature.current_temperature == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"current_temperature\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_opt_mon_temperature\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.opt_mon_temperature.current_temperature_count > 4)
+                {
+                    return BCMOS_FALSE;
+                }
+
+                for (i8 = 0; i8 < this->u.opt_mon_temperature.current_temperature_count; i8++)
+                {
+                    if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.opt_mon_temperature.current_temperature[i8]))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_OPT_MON_VCC:
+            {
+                uint32_t i9;
+                if ((this->u.opt_mon_vcc.current_vcc_count > 0) && (this->u.opt_mon_vcc.current_vcc == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"current_vcc\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_opt_mon_vcc\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.opt_mon_vcc.current_vcc_count > 4)
+                {
+                    return BCMOS_FALSE;
+                }
+
+                for (i9 = 0; i9 < this->u.opt_mon_vcc.current_vcc_count; i9++)
+                {
+                    if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.opt_mon_vcc.current_vcc[i9]))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_OPT_MON_TX_BIAS:
+            {
+                uint32_t i10;
+                if ((this->u.opt_mon_tx_bias.current_tx_bias_count > 0) && (this->u.opt_mon_tx_bias.current_tx_bias == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"current_tx_bias\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_opt_mon_tx_bias\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.opt_mon_tx_bias.current_tx_bias_count > 4)
+                {
+                    return BCMOS_FALSE;
+                }
+
+                for (i10 = 0; i10 < this->u.opt_mon_tx_bias.current_tx_bias_count; i10++)
+                {
+                    if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.opt_mon_tx_bias.current_tx_bias[i10]))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_OPT_MON_TX_POWER:
+            {
+                uint32_t i11;
+                if ((this->u.opt_mon_tx_power.current_tx_power_count > 0) && (this->u.opt_mon_tx_power.current_tx_power == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"current_tx_power\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_opt_mon_tx_power\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.opt_mon_tx_power.current_tx_power_count > 4)
+                {
+                    return BCMOS_FALSE;
+                }
+
+                for (i11 = 0; i11 < this->u.opt_mon_tx_power.current_tx_power_count; i11++)
+                {
+                    if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.opt_mon_tx_power.current_tx_power[i11]))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_OPT_MON_RX_POWER:
+            {
+                uint32_t i12;
+                if ((this->u.opt_mon_rx_power.current_rx_power_count > 0) && (this->u.opt_mon_rx_power.current_rx_power == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"current_rx_power\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_opt_mon_rx_power\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.opt_mon_rx_power.current_rx_power_count > 4)
+                {
+                    return BCMOS_FALSE;
+                }
+
+                for (i12 = 0; i12 < this->u.opt_mon_rx_power.current_rx_power_count; i12++)
+                {
+                    if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.opt_mon_rx_power.current_rx_power[i12]))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_UNICAST_FRAMES:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.rx_unicast_frames.rx_unicast_frames))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_UNICAST_FRAMES:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.tx_unicast_frames.tx_unicast_frames))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAME_TOO_SHORT:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.rx_frame_too_short.rx_frames_too_short))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAME64:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.rx_frame64.rx_frames64))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAME65127:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.rx_frame65127.rx_frames65127))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAME128255:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.rx_frame128255.rx_frames128255))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAME256511:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.rx_frame256511.rx_frames256511))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAME5121023:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.rx_frame5121023.rx_frames5121023))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAME10241518:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.rx_frame10241518.rx_frames10241518))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAME1519PLUS:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.rx_frame1519plus.rx_frames1519plus))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAME64:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.tx_frame64.tx_frames64))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAME65127:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.tx_frame65127.tx_frames65127))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAME128255:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.tx_frame128255.tx_frames128255))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAME256511:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.tx_frame256511.tx_frames256511))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAME5121023:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.tx_frame5121023.tx_frames5121023))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAME10241518:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.tx_frame10241518.tx_frames10241518))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAME1519PLUS:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.tx_frame1519plus.tx_frames1519plus))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_QUEUE_DELAY_THRESH:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.queue_delay_thresh.queue_delay_threshold))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_QUEUE_DELAY:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.queue_delay.queue_delay))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_FRAMES_DROPPED:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.frames_dropped.frames_dropped))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_BYTES_DROPPED:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.bytes_dropped.bytes_dropped))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_BYTES_DELAYED:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.bytes_delayed.bytes_delayed))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_BYTES_UNUSED:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.tx_bytes_unused.tx_bytes_unused))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DONU_PORT_TYPE:
+            {
+                uint32_t i13;
+                if ((this->u.donu_port_type.port_type_count > 0) && (this->u.donu_port_type.port_type == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"port_type\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_donu_port_type\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i13 = 0; i13 < this->u.donu_port_type.port_type_count; i13++)
+                {
+                    if (!bcmolt_epon_oam_dpoe_port_type_pack(this->u.donu_port_type.port_type[i13], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_SUSPEND_RESUME_ALARM_REPORTING:
+            {
+                uint32_t i14;
+                if ((this->u.suspend_resume_alarm_reporting.def_count > 0) && (this->u.suspend_resume_alarm_reporting.def == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"def\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_suspend_resume_alarm_reporting\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i14 = 0; i14 < this->u.suspend_resume_alarm_reporting.def_count; i14++)
+                {
+                    if (!bcmolt_epon_oam_dpoe_event_options_pack(&this->u.suspend_resume_alarm_reporting.def[i14], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_IPMC_FORWARDING_RULE_CONFIGURATION:
+            {
+                if (!bcmolt_epon_oam_dpoe_ipmc_forwarding_flags_pack(this->u.ipmc_forwarding_rule_configuration.field_bitmap, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ITPID:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.itpid.alternate_itpid))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.itpid.insert_this_tpid))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_BTPID:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.btpid.alternate_btpid))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.btpid.insert_this_tpid))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_QUEUE_CIR:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.queue_cir.commited_burst_size))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.queue_cir.commited_information_rate))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_QUEUE_EIR:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.queue_eir.excess_burst_size))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.queue_eir.queue_eir))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_QUEUE_COLOR_MARKING:
+            {
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.queue_color_marking.enable_color_marking))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.queue_color_marking.field_code))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.queue_color_marking.field_instance))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.queue_color_marking.msb_mask))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.queue_color_marking.lsb_mask))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.queue_color_marking.green_value))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.queue_color_marking.yellow_value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_QUEUE_RATE_LIMITER_CAPABILITIES:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.queue_rate_limiter_capabilities.number_of_rate_limiters))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.queue_rate_limiter_capabilities.cbs_min_increment))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.queue_rate_limiter_capabilities.cir_min_increment))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.queue_rate_limiter_capabilities.ebs_min_increment))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.queue_rate_limiter_capabilities.eir_min_increment))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.queue_rate_limiter_capabilities.color_aware))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.queue_rate_limiter_capabilities.coupling_configurable))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.queue_rate_limiter_capabilities.coupling_behaviro_default))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.queue_rate_limiter_capabilities.color_marking_support))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.queue_rate_limiter_capabilities.smart_color_drop))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_COUPLING_FLAG:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.coupling_flag.coupling_flag))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_CLOCK_TRANSPORT_CAPABILITIES:
+            {
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.clock_transport_capabilities.pps_pulse_support))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.clock_transport_capabilities.tod_string_support))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.clock_transport_capabilities.v2frame_support))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ENABLE_CLOCK_TRANSPORT:
+            {
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.enable_clock_transport.pps_pulse_output))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.enable_clock_transport.tod_string_output))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.enable_clock_transport.v2frame_output))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TIME_TRANSFER:
+            {
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.time_transfer.mpcp_reference_point))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.time_transfer.tod_string_count > 0) && (this->u.time_transfer.tod_string == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"tod_string\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_time_transfer\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.time_transfer.tod_string, this->u.time_transfer.tod_string_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_PROPAGATION_PARAMETERS:
+            {
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.propagation_parameters.ndown))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.propagation_parameters.nup))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RTT:
+            {
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.rtt.rtt))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DAC_CONFIGURATION:
+            {
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.dac_configuration.stag))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.dac_configuration.ctag))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DAC_CONFIGURATION_ENABLE_DISABLE:
+            {
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.dac_configuration_enable_disable.lldp_instance_status))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAME_BROADCAST:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.rx_frame_broadcast.rx_broadcast_frames))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAMES_BROADCAST:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.tx_frames_broadcast.tx_broadcast_frames))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAMES_MULTICAST:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.tx_frames_multicast.tx_multicast_frames))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAMES_MULTICAST:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.rx_frames_multicast.rx_multicast_frames))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_BYTES_GREEN:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.tx_bytes_green.tx_bytes_green))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_BYTES_GREEN:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.rx_bytes_green.rx_bytes_green))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ONU_MCAST_LLID:
+            {
+                if (!bcmolt_epon_oam_u16_list_u8_pack(&this->u.onu_mcast_llid.llid_value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_UNI_MAC_LEARNED:
+            {
+                if (!bcmolt_epon_oam_buf_write_mac_address(buf, this->u.uni_mac_learned.mac_address))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.uni_mac_learned.uni_port))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_UNI_MAC_TABLE_FULL_BEHAVIOR:
+            {
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.uni_mac_table_full_behavior.over_write))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ONU_PWR_SAVING_CAP:
+            {
+                if (!bcmolt_epon_oam_dpoe_power_saving_mode_pack(this->u.onu_pwr_saving_cap.pwr_saving_mode, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.onu_pwr_saving_cap.early_wake_up_support))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_pwr_saving_cap.ven_spec_field_size))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.onu_pwr_saving_cap.ven_spec_field_size > 0) && (this->u.onu_pwr_saving_cap.ven_spec_field == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"ven_spec_field\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_onu_pwr_saving_cap\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.onu_pwr_saving_cap.ven_spec_field, this->u.onu_pwr_saving_cap.ven_spec_field_size))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DAC_CONFIGURATION_FLAGS:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DAC_PASSWORD_CHALLENGE:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ENERGY_EFFICIENT_ETHERNET_STATUS:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_L2CP_FRAMES_DISCARDED:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_L2CP_FRAMES_RX:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_L2CP_FRAMES_TX:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_L2CP_OCTETS_DISCARDED:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_L2CP_OCTETS_RX:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_L2CP_OCTETS_TX:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_LINE_RATE_MODE:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_MEDIA_TYPE:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_NUMBER_OF_PROGRAMMABLE_COUNTERS:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ONU_MAX_FRAME_SIZE_CAPABILITY:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_PWR_OVER_ETHERNET_STATUS:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_BYTES_YELLOW:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAMES_UNICAST:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAMES_YELLOW:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_L2ERRORS:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_BYTES_YELLOW:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAMES_UNICAST:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAMES_YELLOW:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_L2ERRORS:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_UNI_MAX_FRAME_SIZE_LIMIT:
+        default:
+            {
+                if ((this->u.def.unknown_count > 0) && (this->u.def.unknown == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"unknown\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_def\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.def.unknown, this->u.def.unknown_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+    if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dpoe_attribute_value_base_get_packed_length(bcmolt_epon_oam_dpoe_attribute_value_base *this)
+{
+    if (this->width >= 0x0080)
+    {
+        return this->width;
+    }
+    else
+    {
+        uint32_t count = 3;
+        switch (this->leaf)
+        {
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_SEQUENCE_NUMBER:
+                {
+                    count += 2;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ONU_ID:
+                {
+                    count += 6;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_FIRMWARE_INFO:
+                {
+                    count += 12;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_CHIP_INFO:
+                {
+                    count += 10;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DATE_OF_MANUFACTURE:
+                {
+                    count += 4;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_MANUFACTURER_INFO:
+                {
+                    count += this->u.manufacturer_info.def_count;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_MAX_LOGICAL_LINKS:
+                {
+                    count += 4;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_NUM_EPON_PORTS:
+                {
+                    count += 2;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_NUM_UNI_PORTS:
+                {
+                    count += 2;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_PACKET_BUFFER:
+                {
+                    count += 12;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_REPORT_THRESHOLDS:
+                {
+                    count += (((2 + (2 * this->u.report_thresholds.report_values_per_queue_set)) + (2 * this->u.report_thresholds.report_values_per_queue_set)) + (2 * this->u.report_thresholds.report_values_per_queue_set)) + (2 * this->u.report_thresholds.report_values_per_queue_set);
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_LINK_STATE:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_OAM_RATE:
+                {
+                    count += 2;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DYN_LEARN_TABLE_SIZE:
+                {
+                    count += 2;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DYN_LEARN_AGE_LIMIT:
+                {
+                    count += 2;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DYN_MAC_TABLE:
+                {
+                    count += bcmolt_epon_oam_dpoe_mac_table_get_packed_length(&this->u.dyn_mac_table.mac_address);
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_STATIC_MAC_TABLE:
+                {
+                    count += bcmolt_epon_oam_dpoe_mac_table_get_packed_length(&this->u.static_mac_table.mac_address);
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_PORT_CAPABILITY:
+                {
+                    count += 4;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DYN_LEARN_MODE:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_MIN_MAC_LIMIT:
+                {
+                    count += 2;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_MAX_MAC_ALLOWED:
+                {
+                    count += 2;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_AGG_MAC_LIMIT:
+                {
+                    count += 2;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_LEN_ERR_DISCARD:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_FLOOD_UNKNOWN:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_LOCAL_SWITCHING:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_QUEUE_CONFIG:
+                {
+                    uint32_t i0;
+                    uint32_t i1;
+                    count += 2;
+                    if ((this->u.queue_config.number_of_links > 0) && (this->u.queue_config.link_configuration == NULL))
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"number_of_links\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return 0;
+                    }
+
+                    for (i0 = 0; i0 < this->u.queue_config.number_of_links; i0++)
+                    {
+                        count += bcmolt_epon_oam_dpoe_queue_set_get_packed_length(&this->u.queue_config.link_configuration[i0]);
+                    }
+
+                    if ((this->u.queue_config.number_of_ports > 0) && (this->u.queue_config.port_configuration == NULL))
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"number_of_ports\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return 0;
+                    }
+
+                    for (i1 = 0; i1 < this->u.queue_config.number_of_ports; i1++)
+                    {
+                        count += bcmolt_epon_oam_dpoe_queue_set_get_packed_length(&this->u.queue_config.port_configuration[i1]);
+                    }
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_FIRMWARE_FILENAME:
+                {
+                    count += (this->u.firmware_filename.firmware_filename_count + 1);
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_PORT_STAT_THRESH:
+                {
+                    count += bcmolt_epon_oam_dpoe_statistic_threshold_get_packed_length(&this->u.port_stat_thresh.stat_threshold);
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_LINK_STAT_THRESH:
+                {
+                    count += bcmolt_epon_oam_dpoe_statistic_threshold_get_packed_length(&this->u.link_stat_thresh.stat_threshold);
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_KEY_EXPIRY_TIME:
+                {
+                    count += 2;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ENCRYPT_MODE:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_PORT_INGRESS_RULE:
+                {
+                    count += bcmolt_epon_oam_dpoe_rule_get_packed_length(&this->u.port_ingress_rule.rule);
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_LUE_FIELD:
+                {
+                    count += 6;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ALT_CVLAN_ETHERTYPE:
+                {
+                    count += 3;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ALT_SVLAN_ETHERTYPE:
+                {
+                    count += 3;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_BC_RATE_LIMIT:
+                {
+                    count += 4;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_EGRESS_SHAPING:
+                {
+                    count += 3 + (7 * this->u.egress_shaping.number_of_shapers);
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_INGRESS_POLICING:
+                {
+                    count += 2 + (5 * this->u.ingress_policing.number_of_rate_levels);
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_FEC_MODE:
+                {
+                    count += 2;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_MFR_NAME:
+                {
+                    count += this->u.mfr_name.man_name_count;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_FWARE_MFG_TIME_VAR_CTRL:
+                {
+                    count += 26;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_VENDOR_NAME:
+                {
+                    count += this->u.vendor_name.vendor_name_count;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_MODEL_NUMBER:
+                {
+                    count += this->u.model_number.model_number_count;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_HW_VERSION:
+                {
+                    count += this->u.hw_version.hw_version_count;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_OPT_MON_TEMPERATURE:
+                {
+                    count += (2 * this->u.opt_mon_temperature.current_temperature_count);
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_OPT_MON_VCC:
+                {
+                    count += (2 * this->u.opt_mon_vcc.current_vcc_count);
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_OPT_MON_TX_BIAS:
+                {
+                    count += (2 * this->u.opt_mon_tx_bias.current_tx_bias_count);
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_OPT_MON_TX_POWER:
+                {
+                    count += (2 * this->u.opt_mon_tx_power.current_tx_power_count);
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_OPT_MON_RX_POWER:
+                {
+                    count += (2 * this->u.opt_mon_rx_power.current_rx_power_count);
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_UNICAST_FRAMES:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_UNICAST_FRAMES:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAME_TOO_SHORT:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAME64:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAME65127:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAME128255:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAME256511:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAME5121023:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAME10241518:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAME1519PLUS:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAME64:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAME65127:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAME128255:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAME256511:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAME5121023:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAME10241518:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAME1519PLUS:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_QUEUE_DELAY_THRESH:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_QUEUE_DELAY:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_FRAMES_DROPPED:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_BYTES_DROPPED:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_BYTES_DELAYED:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_BYTES_UNUSED:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DONU_PORT_TYPE:
+                {
+                    count += this->u.donu_port_type.port_type_count;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_SUSPEND_RESUME_ALARM_REPORTING:
+                {
+                    count += (2 * this->u.suspend_resume_alarm_reporting.def_count);
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_IPMC_FORWARDING_RULE_CONFIGURATION:
+                {
+                    count += 2;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ITPID:
+                {
+                    count += 3;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_BTPID:
+                {
+                    count += 3;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_QUEUE_CIR:
+                {
+                    count += 6;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_QUEUE_EIR:
+                {
+                    count += 6;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_QUEUE_COLOR_MARKING:
+                {
+                    count += 7;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_QUEUE_RATE_LIMITER_CAPABILITIES:
+                {
+                    count += 15;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_COUPLING_FLAG:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_CLOCK_TRANSPORT_CAPABILITIES:
+                {
+                    count += 3;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ENABLE_CLOCK_TRANSPORT:
+                {
+                    count += 3;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TIME_TRANSFER:
+                {
+                    count += 4 + this->u.time_transfer.tod_string_count;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_PROPAGATION_PARAMETERS:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RTT:
+                {
+                    count += 4;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DAC_CONFIGURATION:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DAC_CONFIGURATION_ENABLE_DISABLE:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAME_BROADCAST:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAMES_BROADCAST:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAMES_MULTICAST:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAMES_MULTICAST:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_BYTES_GREEN:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_BYTES_GREEN:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ONU_MCAST_LLID:
+                {
+                    count += bcmolt_epon_oam_u16_list_u8_get_packed_length(&this->u.onu_mcast_llid.llid_value);
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_UNI_MAC_LEARNED:
+                {
+                    count += 7;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_UNI_MAC_TABLE_FULL_BEHAVIOR:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ONU_PWR_SAVING_CAP:
+                {
+                    count += 3 + this->u.onu_pwr_saving_cap.ven_spec_field_size;
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DAC_CONFIGURATION_FLAGS:
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DAC_PASSWORD_CHALLENGE:
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ENERGY_EFFICIENT_ETHERNET_STATUS:
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_L2CP_FRAMES_DISCARDED:
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_L2CP_FRAMES_RX:
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_L2CP_FRAMES_TX:
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_L2CP_OCTETS_DISCARDED:
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_L2CP_OCTETS_RX:
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_L2CP_OCTETS_TX:
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_LINE_RATE_MODE:
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_MEDIA_TYPE:
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_NUMBER_OF_PROGRAMMABLE_COUNTERS:
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ONU_MAX_FRAME_SIZE_CAPABILITY:
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_PWR_OVER_ETHERNET_STATUS:
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_BYTES_YELLOW:
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAMES_UNICAST:
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAMES_YELLOW:
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_L2ERRORS:
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_BYTES_YELLOW:
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAMES_UNICAST:
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAMES_YELLOW:
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_L2ERRORS:
+            case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_UNI_MAX_FRAME_SIZE_LIMIT:
+            default:
+                {
+                    count += this->u.def.unknown_count;
+                }
+                break;
+        }
+
+        return count;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_attribute_value_base_unpack(bcmolt_epon_oam_dpoe_attribute_value_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    bcmolt_epon_oam_buf postLenBuf;
+    if (!bcmolt_epon_oam_dpoe_leaf_attribute_unpack(&this->leaf, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->width))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->width >= 0x0080)
+    {
+        return BCMOS_TRUE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, (this->width == 0) ? 0x0080 : this->width, buf->curr);
+    switch (this->leaf)
+    {
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_SEQUENCE_NUMBER:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.sequence_number.sequnce_number))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ONU_ID:
+            {
+                if (!bcmolt_epon_oam_buf_read_mac_address(&postLenBuf, &this->u.onu_id.id))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_FIRMWARE_INFO:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.firmware_info.boot_version))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.firmware_info.boot_crc32))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.firmware_info.application_version))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.firmware_info.application_crc32))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_CHIP_INFO:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.chip_info.jedec_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.chip_info.chip_model))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.chip_info.chip_version))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DATE_OF_MANUFACTURE:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.date_of_manufacture.year))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.date_of_manufacture.month))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.date_of_manufacture.day))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_MANUFACTURER_INFO:
+            {
+                this->u.manufacturer_info.def_count = bcmolt_epon_oam_dpoe_attribute_value_base_manufacturer_info_count_def(&postLenBuf);
+                if ((this->u.manufacturer_info.def_count > 0) && (this->u.manufacturer_info.def == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"def\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_manufacturer_info\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.manufacturer_info.def = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.manufacturer_info.def_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.manufacturer_info.def, this->u.manufacturer_info.def_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_MAX_LOGICAL_LINKS:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.max_logical_links.bidirectional))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.max_logical_links.downstream_only))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_NUM_EPON_PORTS:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.num_epon_ports.port_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_NUM_UNI_PORTS:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.num_uni_ports.port_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_PACKET_BUFFER:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.packet_buffer.upstream_queues))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.packet_buffer.up_queues_max_per_link))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.packet_buffer.up_queue_increment))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.packet_buffer.downstream_queues))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.packet_buffer.dn_queues_max_per_port))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.packet_buffer.dn_queue_increment))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.packet_buffer.total_packet_buffer))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.packet_buffer.upstream_packet_buffer))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.packet_buffer.downsream_packet_buffer))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_REPORT_THRESHOLDS:
+            {
+                uint8_t i0;
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.report_thresholds.number_of_queue_sets))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.report_thresholds.report_values_per_queue_set))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.report_thresholds.report_values_per_queue_set > 0) && (this->u.report_thresholds.queue_set0 == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"queue_set0\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_report_thresholds\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.report_thresholds.queue_set0 = (uint16_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.report_thresholds.report_values_per_queue_set * sizeof(uint16_t));
+                    }
+                }
+
+                for (i0 = 0; i0 < this->u.report_thresholds.report_values_per_queue_set; i0++)
+                {
+                    if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.report_thresholds.queue_set0[i0]))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+
+                if (((uint64_t) this->u.report_thresholds.number_of_queue_sets > 0x0001))
+                {
+                    if ((this->u.report_thresholds.report_values_per_queue_set > 0) && (this->u.report_thresholds.queue_set1 == NULL))
+                    {
+                        if (extra_mem == NULL)
+                        {
+                            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"queue_set1\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_report_thresholds\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                            return BCMOS_FALSE;
+                        }
+                        else
+                        {
+                            this->u.report_thresholds.queue_set1 = (uint16_t *) *extra_mem;
+                            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.report_thresholds.report_values_per_queue_set * sizeof(uint16_t));
+                        }
+                    }
+
+                    uint8_t i1;
+                    for (i1 = 0; i1 < this->u.report_thresholds.report_values_per_queue_set; i1++)
+                    {
+                        if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.report_thresholds.queue_set1[i1]))
+                        {
+                            return BCMOS_FALSE;
+                        }
+                    }
+                }
+
+                if (((uint64_t) this->u.report_thresholds.number_of_queue_sets > 0x0002))
+                {
+                    if ((this->u.report_thresholds.report_values_per_queue_set > 0) && (this->u.report_thresholds.queue_set2 == NULL))
+                    {
+                        if (extra_mem == NULL)
+                        {
+                            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"queue_set2\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_report_thresholds\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                            return BCMOS_FALSE;
+                        }
+                        else
+                        {
+                            this->u.report_thresholds.queue_set2 = (uint16_t *) *extra_mem;
+                            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.report_thresholds.report_values_per_queue_set * sizeof(uint16_t));
+                        }
+                    }
+
+                    uint8_t i2;
+                    for (i2 = 0; i2 < this->u.report_thresholds.report_values_per_queue_set; i2++)
+                    {
+                        if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.report_thresholds.queue_set2[i2]))
+                        {
+                            return BCMOS_FALSE;
+                        }
+                    }
+                }
+
+                if (((uint64_t) this->u.report_thresholds.number_of_queue_sets > 0x0003))
+                {
+                    if ((this->u.report_thresholds.report_values_per_queue_set > 0) && (this->u.report_thresholds.queue_set3 == NULL))
+                    {
+                        if (extra_mem == NULL)
+                        {
+                            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"queue_set3\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_report_thresholds\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                            return BCMOS_FALSE;
+                        }
+                        else
+                        {
+                            this->u.report_thresholds.queue_set3 = (uint16_t *) *extra_mem;
+                            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.report_thresholds.report_values_per_queue_set * sizeof(uint16_t));
+                        }
+                    }
+
+                    uint8_t i3;
+                    for (i3 = 0; i3 < this->u.report_thresholds.report_values_per_queue_set; i3++)
+                    {
+                        if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.report_thresholds.queue_set3[i3]))
+                        {
+                            return BCMOS_FALSE;
+                        }
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_LINK_STATE:
+            {
+                if (!bcmolt_epon_oam_dpoe_link_state_unpack(&this->u.link_state.link_state, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_OAM_RATE:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.oam_rate.maximum_oam_rate))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.oam_rate.minimum_oam_rate))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DYN_LEARN_TABLE_SIZE:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.dyn_learn_table_size.max_mac_allowed))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DYN_LEARN_AGE_LIMIT:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.dyn_learn_age_limit.dynamic_address_age_limit))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DYN_MAC_TABLE:
+            {
+                if (!bcmolt_epon_oam_dpoe_mac_table_unpack(&this->u.dyn_mac_table.mac_address, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_STATIC_MAC_TABLE:
+            {
+                if (!bcmolt_epon_oam_dpoe_mac_table_unpack(&this->u.static_mac_table.mac_address, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_PORT_CAPABILITY:
+            {
+                if (!bcmolt_epon_oam_auto_negotiation_capability_unpack(&this->u.port_capability.maximum_capabilities, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_auto_negotiation_capability_unpack(&this->u.port_capability.current_capabilities, &postLenBuf))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DYN_LEARN_MODE:
+            {
+                if (!bcmolt_epon_oam_dpoe_learning_mode_unpack(&this->u.dyn_learn_mode.learning_mode, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_MIN_MAC_LIMIT:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.min_mac_limit.minimum_guaranteed_limit))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_MAX_MAC_ALLOWED:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.max_mac_allowed.max_allowed))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_AGG_MAC_LIMIT:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.agg_mac_limit.aggregate_mac_limit))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_LEN_ERR_DISCARD:
+            {
+                if (!bcmolt_epon_oam_buf_read_bool(&postLenBuf, &this->u.len_err_discard.len_error_discard))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_FLOOD_UNKNOWN:
+            {
+                if (!bcmolt_epon_oam_buf_read_bool(&postLenBuf, &this->u.flood_unknown.flood_unknown))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_LOCAL_SWITCHING:
+            {
+                if (!bcmolt_epon_oam_buf_read_bool(&postLenBuf, &this->u.local_switching.local_switching))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_QUEUE_CONFIG:
+            {
+                uint8_t i4;
+                uint8_t i5;
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.queue_config.number_of_links))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.queue_config.number_of_links > 0) && (this->u.queue_config.link_configuration == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"link_configuration\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_queue_config\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.queue_config.link_configuration = (bcmolt_epon_oam_dpoe_queue_set *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.queue_config.number_of_links * sizeof(bcmolt_epon_oam_dpoe_queue_set));
+                    }
+                }
+
+                for (i4 = 0; i4 < this->u.queue_config.number_of_links; i4++)
+                {
+                    if (!bcmolt_epon_oam_dpoe_queue_set_unpack(&this->u.queue_config.link_configuration[i4], &postLenBuf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.queue_config.number_of_ports))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.queue_config.number_of_ports > 0) && (this->u.queue_config.port_configuration == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"port_configuration\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_queue_config\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.queue_config.port_configuration = (bcmolt_epon_oam_dpoe_queue_set *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.queue_config.number_of_ports * sizeof(bcmolt_epon_oam_dpoe_queue_set));
+                    }
+                }
+
+                for (i5 = 0; i5 < this->u.queue_config.number_of_ports; i5++)
+                {
+                    if (!bcmolt_epon_oam_dpoe_queue_set_unpack(&this->u.queue_config.port_configuration[i5], &postLenBuf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_FIRMWARE_FILENAME:
+            {
+                this->u.firmware_filename.firmware_filename_count = bcmolt_epon_oam_dpoe_attribute_value_base_firmware_filename_count_firmware_filename(&postLenBuf);
+                if ((this->u.firmware_filename.firmware_filename_count > 0) && (this->u.firmware_filename.firmware_filename == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"firmware_filename\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_firmware_filename\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.firmware_filename.firmware_filename = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.firmware_filename.firmware_filename_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.firmware_filename.firmware_filename, this->u.firmware_filename.firmware_filename_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_PORT_STAT_THRESH:
+            {
+                if (!bcmolt_epon_oam_dpoe_statistic_threshold_unpack(&this->u.port_stat_thresh.stat_threshold, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_LINK_STAT_THRESH:
+            {
+                if (!bcmolt_epon_oam_dpoe_statistic_threshold_unpack(&this->u.link_stat_thresh.stat_threshold, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_KEY_EXPIRY_TIME:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.key_expiry_time.time))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ENCRYPT_MODE:
+            {
+                if (!bcmolt_epon_oam_dpoe_encryption_mode_unpack(&this->u.encrypt_mode.encryption_method, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_PORT_INGRESS_RULE:
+            {
+                if (!bcmolt_epon_oam_dpoe_rule_unpack(&this->u.port_ingress_rule.rule, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_LUE_FIELD:
+            {
+                if (!bcmolt_epon_oam_dpoe_field_code_unpack(&this->u.lue_field.field_code, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_dpoe_layer_select_unpack(&this->u.lue_field.layer_select, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.lue_field.bit_word_offset))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.lue_field.bit_offset))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.lue_field.bit_width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.lue_field.reference_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ALT_CVLAN_ETHERTYPE:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.alt_cvlan_ethertype.tpid))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_bool(&postLenBuf, &this->u.alt_cvlan_ethertype.insert))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ALT_SVLAN_ETHERTYPE:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.alt_svlan_ethertype.tpid))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_bool(&postLenBuf, &this->u.alt_svlan_ethertype.insert))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_BC_RATE_LIMIT:
+            {
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.bc_rate_limit.limit))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_EGRESS_SHAPING:
+            {
+                uint8_t i6;
+                if (!bcmolt_epon_oam_traffic_bitmap_unpack(&this->u.egress_shaping.traffic_types, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_rate_units_unpack(&this->u.egress_shaping.rate_units, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.egress_shaping.number_of_shapers))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.egress_shaping.number_of_shapers > 0) && (this->u.egress_shaping.shapers == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"shapers\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_egress_shaping\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.egress_shaping.shapers = (bcmolt_epon_oam_dpoe_shaper *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.egress_shaping.number_of_shapers * sizeof(bcmolt_epon_oam_dpoe_shaper));
+                    }
+                }
+
+                for (i6 = 0; i6 < this->u.egress_shaping.number_of_shapers; i6++)
+                {
+                    if (!bcmolt_epon_oam_dpoe_shaper_unpack(&this->u.egress_shaping.shapers[i6], &postLenBuf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_INGRESS_POLICING:
+            {
+                uint8_t i7;
+                if (!bcmolt_epon_oam_rate_units_unpack(&this->u.ingress_policing.rate_units, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.ingress_policing.number_of_rate_levels))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.ingress_policing.number_of_rate_levels > 0) && (this->u.ingress_policing.rate_levels == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"rate_levels\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_ingress_policing\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.ingress_policing.rate_levels = (bcmolt_epon_oam_dpoe_rate_level *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.ingress_policing.number_of_rate_levels * sizeof(bcmolt_epon_oam_dpoe_rate_level));
+                    }
+                }
+
+                for (i7 = 0; i7 < this->u.ingress_policing.number_of_rate_levels; i7++)
+                {
+                    if (!bcmolt_epon_oam_dpoe_rate_level_unpack(&this->u.ingress_policing.rate_levels[i7], &postLenBuf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_FEC_MODE:
+            {
+                if (!bcmolt_epon_oam_dpoe_fec_mode_unpack(&this->u.fec_mode.rx_down, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_dpoe_fec_mode_unpack(&this->u.fec_mode.tx_up, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_MFR_NAME:
+            {
+                this->u.mfr_name.man_name_count = bcmolt_epon_oam_dpoe_attribute_value_base_mfr_name_count_man_name(&postLenBuf);
+                if ((this->u.mfr_name.man_name_count > 0) && (this->u.mfr_name.man_name == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"man_name\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_mfr_name\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.mfr_name.man_name = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.mfr_name.man_name_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.mfr_name.man_name, this->u.mfr_name.man_name_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_FWARE_MFG_TIME_VAR_CTRL:
+            {
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.fware_mfg_time_var_ctrl.code_access_start, 13))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.fware_mfg_time_var_ctrl.cvc_access_start, 13))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_VENDOR_NAME:
+            {
+                this->u.vendor_name.vendor_name_count = bcmolt_epon_oam_dpoe_attribute_value_base_vendor_name_count_vendor_name(&postLenBuf);
+                if ((this->u.vendor_name.vendor_name_count > 0) && (this->u.vendor_name.vendor_name == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vendor_name\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_vendor_name\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.vendor_name.vendor_name = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.vendor_name.vendor_name_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (this->u.vendor_name.vendor_name_count > 31)
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.vendor_name.vendor_name, this->u.vendor_name.vendor_name_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_MODEL_NUMBER:
+            {
+                this->u.model_number.model_number_count = bcmolt_epon_oam_dpoe_attribute_value_base_model_number_count_model_number(&postLenBuf);
+                if ((this->u.model_number.model_number_count > 0) && (this->u.model_number.model_number == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"model_number\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_model_number\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.model_number.model_number = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.model_number.model_number_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (this->u.model_number.model_number_count > 31)
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.model_number.model_number, this->u.model_number.model_number_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_HW_VERSION:
+            {
+                this->u.hw_version.hw_version_count = bcmolt_epon_oam_dpoe_attribute_value_base_hw_version_count_hw_version(&postLenBuf);
+                if ((this->u.hw_version.hw_version_count > 0) && (this->u.hw_version.hw_version == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"hw_version\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_hw_version\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.hw_version.hw_version = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.hw_version.hw_version_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (this->u.hw_version.hw_version_count > 31)
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.hw_version.hw_version, this->u.hw_version.hw_version_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_OPT_MON_TEMPERATURE:
+            {
+                uint32_t i8;
+                this->u.opt_mon_temperature.current_temperature_count = bcmolt_epon_oam_dpoe_attribute_value_base_opt_mon_temperature_count_current_temperature(&postLenBuf);
+                if ((this->u.opt_mon_temperature.current_temperature_count > 0) && (this->u.opt_mon_temperature.current_temperature == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"current_temperature\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_opt_mon_temperature\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.opt_mon_temperature.current_temperature = (uint16_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.opt_mon_temperature.current_temperature_count * sizeof(uint16_t));
+                    }
+                }
+
+                if (this->u.opt_mon_temperature.current_temperature_count > 4)
+                {
+                    return BCMOS_FALSE;
+                }
+
+                for (i8 = 0; i8 < this->u.opt_mon_temperature.current_temperature_count; i8++)
+                {
+                    if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.opt_mon_temperature.current_temperature[i8]))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_OPT_MON_VCC:
+            {
+                uint32_t i9;
+                this->u.opt_mon_vcc.current_vcc_count = bcmolt_epon_oam_dpoe_attribute_value_base_opt_mon_vcc_count_current_vcc(&postLenBuf);
+                if ((this->u.opt_mon_vcc.current_vcc_count > 0) && (this->u.opt_mon_vcc.current_vcc == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"current_vcc\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_opt_mon_vcc\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.opt_mon_vcc.current_vcc = (uint16_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.opt_mon_vcc.current_vcc_count * sizeof(uint16_t));
+                    }
+                }
+
+                if (this->u.opt_mon_vcc.current_vcc_count > 4)
+                {
+                    return BCMOS_FALSE;
+                }
+
+                for (i9 = 0; i9 < this->u.opt_mon_vcc.current_vcc_count; i9++)
+                {
+                    if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.opt_mon_vcc.current_vcc[i9]))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_OPT_MON_TX_BIAS:
+            {
+                uint32_t i10;
+                this->u.opt_mon_tx_bias.current_tx_bias_count = bcmolt_epon_oam_dpoe_attribute_value_base_opt_mon_tx_bias_count_current_tx_bias(&postLenBuf);
+                if ((this->u.opt_mon_tx_bias.current_tx_bias_count > 0) && (this->u.opt_mon_tx_bias.current_tx_bias == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"current_tx_bias\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_opt_mon_tx_bias\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.opt_mon_tx_bias.current_tx_bias = (uint16_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.opt_mon_tx_bias.current_tx_bias_count * sizeof(uint16_t));
+                    }
+                }
+
+                if (this->u.opt_mon_tx_bias.current_tx_bias_count > 4)
+                {
+                    return BCMOS_FALSE;
+                }
+
+                for (i10 = 0; i10 < this->u.opt_mon_tx_bias.current_tx_bias_count; i10++)
+                {
+                    if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.opt_mon_tx_bias.current_tx_bias[i10]))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_OPT_MON_TX_POWER:
+            {
+                uint32_t i11;
+                this->u.opt_mon_tx_power.current_tx_power_count = bcmolt_epon_oam_dpoe_attribute_value_base_opt_mon_tx_power_count_current_tx_power(&postLenBuf);
+                if ((this->u.opt_mon_tx_power.current_tx_power_count > 0) && (this->u.opt_mon_tx_power.current_tx_power == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"current_tx_power\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_opt_mon_tx_power\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.opt_mon_tx_power.current_tx_power = (uint16_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.opt_mon_tx_power.current_tx_power_count * sizeof(uint16_t));
+                    }
+                }
+
+                if (this->u.opt_mon_tx_power.current_tx_power_count > 4)
+                {
+                    return BCMOS_FALSE;
+                }
+
+                for (i11 = 0; i11 < this->u.opt_mon_tx_power.current_tx_power_count; i11++)
+                {
+                    if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.opt_mon_tx_power.current_tx_power[i11]))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_OPT_MON_RX_POWER:
+            {
+                uint32_t i12;
+                this->u.opt_mon_rx_power.current_rx_power_count = bcmolt_epon_oam_dpoe_attribute_value_base_opt_mon_rx_power_count_current_rx_power(&postLenBuf);
+                if ((this->u.opt_mon_rx_power.current_rx_power_count > 0) && (this->u.opt_mon_rx_power.current_rx_power == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"current_rx_power\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_opt_mon_rx_power\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.opt_mon_rx_power.current_rx_power = (uint16_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.opt_mon_rx_power.current_rx_power_count * sizeof(uint16_t));
+                    }
+                }
+
+                if (this->u.opt_mon_rx_power.current_rx_power_count > 4)
+                {
+                    return BCMOS_FALSE;
+                }
+
+                for (i12 = 0; i12 < this->u.opt_mon_rx_power.current_rx_power_count; i12++)
+                {
+                    if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.opt_mon_rx_power.current_rx_power[i12]))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_UNICAST_FRAMES:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.rx_unicast_frames.rx_unicast_frames))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_UNICAST_FRAMES:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.tx_unicast_frames.tx_unicast_frames))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAME_TOO_SHORT:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.rx_frame_too_short.rx_frames_too_short))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAME64:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.rx_frame64.rx_frames64))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAME65127:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.rx_frame65127.rx_frames65127))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAME128255:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.rx_frame128255.rx_frames128255))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAME256511:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.rx_frame256511.rx_frames256511))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAME5121023:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.rx_frame5121023.rx_frames5121023))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAME10241518:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.rx_frame10241518.rx_frames10241518))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAME1519PLUS:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.rx_frame1519plus.rx_frames1519plus))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAME64:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.tx_frame64.tx_frames64))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAME65127:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.tx_frame65127.tx_frames65127))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAME128255:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.tx_frame128255.tx_frames128255))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAME256511:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.tx_frame256511.tx_frames256511))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAME5121023:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.tx_frame5121023.tx_frames5121023))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAME10241518:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.tx_frame10241518.tx_frames10241518))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAME1519PLUS:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.tx_frame1519plus.tx_frames1519plus))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_QUEUE_DELAY_THRESH:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.queue_delay_thresh.queue_delay_threshold))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_QUEUE_DELAY:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.queue_delay.queue_delay))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_FRAMES_DROPPED:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.frames_dropped.frames_dropped))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_BYTES_DROPPED:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.bytes_dropped.bytes_dropped))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_BYTES_DELAYED:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.bytes_delayed.bytes_delayed))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_BYTES_UNUSED:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.tx_bytes_unused.tx_bytes_unused))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DONU_PORT_TYPE:
+            {
+                uint32_t i13;
+                this->u.donu_port_type.port_type_count = bcmolt_epon_oam_dpoe_attribute_value_base_donu_port_type_count_port_type(&postLenBuf);
+                if ((this->u.donu_port_type.port_type_count > 0) && (this->u.donu_port_type.port_type == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"port_type\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_donu_port_type\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.donu_port_type.port_type = (bcmolt_epon_oam_dpoe_port_type *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.donu_port_type.port_type_count * sizeof(bcmolt_epon_oam_dpoe_port_type));
+                    }
+                }
+
+                for (i13 = 0; i13 < this->u.donu_port_type.port_type_count; i13++)
+                {
+                    if (!bcmolt_epon_oam_dpoe_port_type_unpack(&this->u.donu_port_type.port_type[i13], &postLenBuf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_SUSPEND_RESUME_ALARM_REPORTING:
+            {
+                uint32_t i14;
+                this->u.suspend_resume_alarm_reporting.def_count = bcmolt_epon_oam_dpoe_attribute_value_base_suspend_resume_alarm_reporting_count_def(&postLenBuf);
+                if ((this->u.suspend_resume_alarm_reporting.def_count > 0) && (this->u.suspend_resume_alarm_reporting.def == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"def\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_suspend_resume_alarm_reporting\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.suspend_resume_alarm_reporting.def = (bcmolt_epon_oam_dpoe_event_options *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.suspend_resume_alarm_reporting.def_count * sizeof(bcmolt_epon_oam_dpoe_event_options));
+                    }
+                }
+
+                for (i14 = 0; i14 < this->u.suspend_resume_alarm_reporting.def_count; i14++)
+                {
+                    if (!bcmolt_epon_oam_dpoe_event_options_unpack(&this->u.suspend_resume_alarm_reporting.def[i14], &postLenBuf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_IPMC_FORWARDING_RULE_CONFIGURATION:
+            {
+                if (!bcmolt_epon_oam_dpoe_ipmc_forwarding_flags_unpack(&this->u.ipmc_forwarding_rule_configuration.field_bitmap, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ITPID:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.itpid.alternate_itpid))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_bool(&postLenBuf, &this->u.itpid.insert_this_tpid))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_BTPID:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.btpid.alternate_btpid))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_bool(&postLenBuf, &this->u.btpid.insert_this_tpid))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_QUEUE_CIR:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.queue_cir.commited_burst_size))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.queue_cir.commited_information_rate))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_QUEUE_EIR:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.queue_eir.excess_burst_size))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.queue_eir.queue_eir))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_QUEUE_COLOR_MARKING:
+            {
+                if (!bcmolt_epon_oam_buf_read_bool(&postLenBuf, &this->u.queue_color_marking.enable_color_marking))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.queue_color_marking.field_code))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.queue_color_marking.field_instance))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.queue_color_marking.msb_mask))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.queue_color_marking.lsb_mask))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.queue_color_marking.green_value))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.queue_color_marking.yellow_value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_QUEUE_RATE_LIMITER_CAPABILITIES:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.queue_rate_limiter_capabilities.number_of_rate_limiters))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.queue_rate_limiter_capabilities.cbs_min_increment))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.queue_rate_limiter_capabilities.cir_min_increment))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.queue_rate_limiter_capabilities.ebs_min_increment))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.queue_rate_limiter_capabilities.eir_min_increment))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.queue_rate_limiter_capabilities.color_aware))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.queue_rate_limiter_capabilities.coupling_configurable))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.queue_rate_limiter_capabilities.coupling_behaviro_default))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.queue_rate_limiter_capabilities.color_marking_support))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.queue_rate_limiter_capabilities.smart_color_drop))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_COUPLING_FLAG:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.coupling_flag.coupling_flag))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_CLOCK_TRANSPORT_CAPABILITIES:
+            {
+                if (!bcmolt_epon_oam_buf_read_bool(&postLenBuf, &this->u.clock_transport_capabilities.pps_pulse_support))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_bool(&postLenBuf, &this->u.clock_transport_capabilities.tod_string_support))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_bool(&postLenBuf, &this->u.clock_transport_capabilities.v2frame_support))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ENABLE_CLOCK_TRANSPORT:
+            {
+                if (!bcmolt_epon_oam_buf_read_bool(&postLenBuf, &this->u.enable_clock_transport.pps_pulse_output))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_bool(&postLenBuf, &this->u.enable_clock_transport.tod_string_output))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_bool(&postLenBuf, &this->u.enable_clock_transport.v2frame_output))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TIME_TRANSFER:
+            {
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.time_transfer.mpcp_reference_point))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                this->u.time_transfer.tod_string_count = bcmolt_epon_oam_dpoe_attribute_value_base_time_transfer_count_tod_string(&postLenBuf);
+                if ((this->u.time_transfer.tod_string_count > 0) && (this->u.time_transfer.tod_string == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"tod_string\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_time_transfer\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.time_transfer.tod_string = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.time_transfer.tod_string_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.time_transfer.tod_string, this->u.time_transfer.tod_string_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_PROPAGATION_PARAMETERS:
+            {
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.propagation_parameters.ndown))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.propagation_parameters.nup))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RTT:
+            {
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.rtt.rtt))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DAC_CONFIGURATION:
+            {
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.dac_configuration.stag))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.dac_configuration.ctag))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DAC_CONFIGURATION_ENABLE_DISABLE:
+            {
+                if (!bcmolt_epon_oam_buf_read_bool(&postLenBuf, &this->u.dac_configuration_enable_disable.lldp_instance_status))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAME_BROADCAST:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.rx_frame_broadcast.rx_broadcast_frames))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAMES_BROADCAST:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.tx_frames_broadcast.tx_broadcast_frames))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAMES_MULTICAST:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.tx_frames_multicast.tx_multicast_frames))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAMES_MULTICAST:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.rx_frames_multicast.rx_multicast_frames))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_BYTES_GREEN:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.tx_bytes_green.tx_bytes_green))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_BYTES_GREEN:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.rx_bytes_green.rx_bytes_green))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ONU_MCAST_LLID:
+            {
+                if (!bcmolt_epon_oam_u16_list_u8_unpack(&this->u.onu_mcast_llid.llid_value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_UNI_MAC_LEARNED:
+            {
+                if (!bcmolt_epon_oam_buf_read_mac_address(&postLenBuf, &this->u.uni_mac_learned.mac_address))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.uni_mac_learned.uni_port))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_UNI_MAC_TABLE_FULL_BEHAVIOR:
+            {
+                if (!bcmolt_epon_oam_buf_read_bool(&postLenBuf, &this->u.uni_mac_table_full_behavior.over_write))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ONU_PWR_SAVING_CAP:
+            {
+                if (!bcmolt_epon_oam_dpoe_power_saving_mode_unpack(&this->u.onu_pwr_saving_cap.pwr_saving_mode, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_bool(&postLenBuf, &this->u.onu_pwr_saving_cap.early_wake_up_support))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.onu_pwr_saving_cap.ven_spec_field_size))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.onu_pwr_saving_cap.ven_spec_field_size > 0) && (this->u.onu_pwr_saving_cap.ven_spec_field == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"ven_spec_field\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_onu_pwr_saving_cap\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.onu_pwr_saving_cap.ven_spec_field = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.onu_pwr_saving_cap.ven_spec_field_size * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.onu_pwr_saving_cap.ven_spec_field, this->u.onu_pwr_saving_cap.ven_spec_field_size))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DAC_CONFIGURATION_FLAGS:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DAC_PASSWORD_CHALLENGE:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ENERGY_EFFICIENT_ETHERNET_STATUS:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_L2CP_FRAMES_DISCARDED:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_L2CP_FRAMES_RX:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_L2CP_FRAMES_TX:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_L2CP_OCTETS_DISCARDED:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_L2CP_OCTETS_RX:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_L2CP_OCTETS_TX:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_LINE_RATE_MODE:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_MEDIA_TYPE:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_NUMBER_OF_PROGRAMMABLE_COUNTERS:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ONU_MAX_FRAME_SIZE_CAPABILITY:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_PWR_OVER_ETHERNET_STATUS:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_BYTES_YELLOW:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAMES_UNICAST:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAMES_YELLOW:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_L2ERRORS:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_BYTES_YELLOW:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAMES_UNICAST:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAMES_YELLOW:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_L2ERRORS:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_UNI_MAX_FRAME_SIZE_LIMIT:
+        default:
+            {
+                this->u.def.unknown_count = bcmolt_epon_oam_dpoe_attribute_value_base_def_count_unknown(&postLenBuf);
+                if ((this->u.def.unknown_count > 0) && (this->u.def.unknown == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"unknown\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_base_def\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.def.unknown = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.def.unknown_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.def.unknown, this->u.def.unknown_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(buf, (this->width == 0) ? 0x0080 : this->width))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_attribute_value_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_dpoe_leaf_attribute leaf;
+    bcmolt_epon_oam_buf postLenBuf;
+    uint8_t length;
+    if (!bcmolt_epon_oam_dpoe_leaf_attribute_unpack(&leaf, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (length >= 0x0080)
+    {
+        return BCMOS_TRUE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+    switch (leaf)
+    {
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_SEQUENCE_NUMBER:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ONU_ID:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 6))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_FIRMWARE_INFO:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_CHIP_INFO:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DATE_OF_MANUFACTURE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_MANUFACTURER_INFO:
+            {
+                uint32_t default_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                    {
+                        break;
+                    }
+
+                    default_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(default_elem_count * sizeof(uint8_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_MAX_LOGICAL_LINKS:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_NUM_EPON_PORTS:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_NUM_UNI_PORTS:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_PACKET_BUFFER:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_REPORT_THRESHOLDS:
+            {
+                uint8_t report_values_per_queue_set;
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &report_values_per_queue_set))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint16_t) * report_values_per_queue_set);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, report_values_per_queue_set * 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint16_t) * report_values_per_queue_set);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, report_values_per_queue_set * 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint16_t) * report_values_per_queue_set);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, report_values_per_queue_set * 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint16_t) * report_values_per_queue_set);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, report_values_per_queue_set * 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_LINK_STATE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_OAM_RATE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DYN_LEARN_TABLE_SIZE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DYN_LEARN_AGE_LIMIT:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DYN_MAC_TABLE:
+            {
+                if (!bcmolt_epon_oam_dpoe_mac_table_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_STATIC_MAC_TABLE:
+            {
+                if (!bcmolt_epon_oam_dpoe_mac_table_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_PORT_CAPABILITY:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DYN_LEARN_MODE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_MIN_MAC_LIMIT:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_MAX_MAC_ALLOWED:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_AGG_MAC_LIMIT:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_LEN_ERR_DISCARD:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_FLOOD_UNKNOWN:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_LOCAL_SWITCHING:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_QUEUE_CONFIG:
+            {
+                uint8_t number_of_links;
+                uint8_t i0;
+                uint8_t number_of_ports;
+                uint8_t i1;
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &number_of_links))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_dpoe_queue_set) * number_of_links);
+                for (i0 = 0; i0 < number_of_links; i0++)
+                {
+                    if (!bcmolt_epon_oam_dpoe_queue_set_scan(&postLenBuf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &number_of_ports))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_dpoe_queue_set) * number_of_ports);
+                for (i1 = 0; i1 < number_of_ports; i1++)
+                {
+                    if (!bcmolt_epon_oam_dpoe_queue_set_scan(&postLenBuf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_FIRMWARE_FILENAME:
+            {
+                uint32_t firmware_filename_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    uint8_t dummy;
+                    if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &dummy))
+                    {
+                        break;
+                    }
+
+                    if (dummy == 0)
+                    {
+                        break;
+                    }
+
+                    firmware_filename_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(firmware_filename_elem_count * sizeof(uint8_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_PORT_STAT_THRESH:
+            {
+                if (!bcmolt_epon_oam_dpoe_statistic_threshold_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_LINK_STAT_THRESH:
+            {
+                if (!bcmolt_epon_oam_dpoe_statistic_threshold_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_KEY_EXPIRY_TIME:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ENCRYPT_MODE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_PORT_INGRESS_RULE:
+            {
+                if (!bcmolt_epon_oam_dpoe_rule_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_LUE_FIELD:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ALT_CVLAN_ETHERTYPE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ALT_SVLAN_ETHERTYPE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_BC_RATE_LIMIT:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_EGRESS_SHAPING:
+            {
+                uint8_t number_of_shapers;
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &number_of_shapers))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_dpoe_shaper) * number_of_shapers);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, number_of_shapers * 7))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_INGRESS_POLICING:
+            {
+                uint8_t number_of_rate_levels;
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &number_of_rate_levels))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_dpoe_rate_level) * number_of_rate_levels);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, number_of_rate_levels * 5))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_FEC_MODE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_MFR_NAME:
+            {
+                uint32_t man_name_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                    {
+                        break;
+                    }
+
+                    man_name_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(man_name_elem_count * sizeof(uint8_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_FWARE_MFG_TIME_VAR_CTRL:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 13))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 13))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_VENDOR_NAME:
+            {
+                uint32_t vendor_name_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                    {
+                        break;
+                    }
+
+                    vendor_name_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(vendor_name_elem_count * sizeof(uint8_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_MODEL_NUMBER:
+            {
+                uint32_t model_number_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                    {
+                        break;
+                    }
+
+                    model_number_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(model_number_elem_count * sizeof(uint8_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_HW_VERSION:
+            {
+                uint32_t hw_version_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                    {
+                        break;
+                    }
+
+                    hw_version_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(hw_version_elem_count * sizeof(uint8_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_OPT_MON_TEMPERATURE:
+            {
+                uint32_t current_temperature_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                    {
+                        break;
+                    }
+
+                    current_temperature_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(current_temperature_elem_count * sizeof(uint16_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_OPT_MON_VCC:
+            {
+                uint32_t current_vcc_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                    {
+                        break;
+                    }
+
+                    current_vcc_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(current_vcc_elem_count * sizeof(uint16_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_OPT_MON_TX_BIAS:
+            {
+                uint32_t current_tx_bias_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                    {
+                        break;
+                    }
+
+                    current_tx_bias_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(current_tx_bias_elem_count * sizeof(uint16_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_OPT_MON_TX_POWER:
+            {
+                uint32_t current_tx_power_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                    {
+                        break;
+                    }
+
+                    current_tx_power_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(current_tx_power_elem_count * sizeof(uint16_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_OPT_MON_RX_POWER:
+            {
+                uint32_t current_rx_power_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                    {
+                        break;
+                    }
+
+                    current_rx_power_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(current_rx_power_elem_count * sizeof(uint16_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_UNICAST_FRAMES:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_UNICAST_FRAMES:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAME_TOO_SHORT:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAME64:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAME65127:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAME128255:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAME256511:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAME5121023:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAME10241518:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAME1519PLUS:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAME64:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAME65127:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAME128255:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAME256511:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAME5121023:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAME10241518:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAME1519PLUS:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_QUEUE_DELAY_THRESH:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_QUEUE_DELAY:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_FRAMES_DROPPED:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_BYTES_DROPPED:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_BYTES_DELAYED:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_BYTES_UNUSED:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DONU_PORT_TYPE:
+            {
+                uint32_t port_type_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                    {
+                        break;
+                    }
+
+                    port_type_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(port_type_elem_count * sizeof(bcmolt_epon_oam_dpoe_port_type));
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_SUSPEND_RESUME_ALARM_REPORTING:
+            {
+                uint32_t default_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                    {
+                        break;
+                    }
+
+                    default_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(default_elem_count * sizeof(bcmolt_epon_oam_dpoe_event_options));
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_IPMC_FORWARDING_RULE_CONFIGURATION:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ITPID:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_BTPID:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_QUEUE_CIR:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_QUEUE_EIR:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_QUEUE_COLOR_MARKING:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_QUEUE_RATE_LIMITER_CAPABILITIES:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_COUPLING_FLAG:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_CLOCK_TRANSPORT_CAPABILITIES:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ENABLE_CLOCK_TRANSPORT:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TIME_TRANSFER:
+            {
+                uint32_t tod_string_elem_count = 0;
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                    {
+                        break;
+                    }
+
+                    tod_string_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(tod_string_elem_count * sizeof(uint8_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_PROPAGATION_PARAMETERS:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RTT:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DAC_CONFIGURATION:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DAC_CONFIGURATION_ENABLE_DISABLE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAME_BROADCAST:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAMES_BROADCAST:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAMES_MULTICAST:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAMES_MULTICAST:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_BYTES_GREEN:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_BYTES_GREEN:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ONU_MCAST_LLID:
+            {
+                if (!bcmolt_epon_oam_u16_list_u8_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_UNI_MAC_LEARNED:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 6))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_UNI_MAC_TABLE_FULL_BEHAVIOR:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ONU_PWR_SAVING_CAP:
+            {
+                uint8_t ven_spec_field_size;
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &ven_spec_field_size))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * ven_spec_field_size);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, ven_spec_field_size * 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DAC_CONFIGURATION_FLAGS:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DAC_PASSWORD_CHALLENGE:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ENERGY_EFFICIENT_ETHERNET_STATUS:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_L2CP_FRAMES_DISCARDED:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_L2CP_FRAMES_RX:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_L2CP_FRAMES_TX:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_L2CP_OCTETS_DISCARDED:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_L2CP_OCTETS_RX:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_L2CP_OCTETS_TX:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_LINE_RATE_MODE:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_MEDIA_TYPE:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_NUMBER_OF_PROGRAMMABLE_COUNTERS:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ONU_MAX_FRAME_SIZE_CAPABILITY:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_PWR_OVER_ETHERNET_STATUS:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_BYTES_YELLOW:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAMES_UNICAST:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAMES_YELLOW:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_L2ERRORS:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_BYTES_YELLOW:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAMES_UNICAST:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAMES_YELLOW:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_L2ERRORS:
+        case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_UNI_MAX_FRAME_SIZE_LIMIT:
+        default:
+            {
+                uint32_t unknown_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                    {
+                        break;
+                    }
+
+                    unknown_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(unknown_elem_count * sizeof(uint8_t));
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dpoe_attribute_value_base_def_count_unknown(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dpoe_attribute_value_base_manufacturer_info_count_def(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dpoe_attribute_value_base_firmware_filename_count_firmware_filename(bcmolt_epon_oam_buf *buf)
+{
+    uint32_t count = 0;
+    uint8_t dummy;
+    bcmolt_epon_oam_buf bufClone = *buf;
+    while (BCMOS_TRUE)
+    {
+        if (!bcmolt_epon_oam_buf_read_u8(&bufClone, &dummy))
+        {
+            break;
+        }
+
+        if (dummy == 0)
+        {
+            break;
+        }
+
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dpoe_attribute_value_base_mfr_name_count_man_name(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dpoe_attribute_value_base_vendor_name_count_vendor_name(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dpoe_attribute_value_base_model_number_count_model_number(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dpoe_attribute_value_base_hw_version_count_hw_version(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dpoe_attribute_value_base_opt_mon_temperature_count_current_temperature(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 2);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dpoe_attribute_value_base_opt_mon_vcc_count_current_vcc(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 2);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dpoe_attribute_value_base_opt_mon_tx_bias_count_current_tx_bias(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 2);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dpoe_attribute_value_base_opt_mon_tx_power_count_current_tx_power(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 2);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dpoe_attribute_value_base_opt_mon_rx_power_count_current_rx_power(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 2);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dpoe_attribute_value_base_donu_port_type_count_port_type(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dpoe_attribute_value_base_suspend_resume_alarm_reporting_count_def(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 2);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dpoe_attribute_value_base_time_transfer_count_tod_string(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_attribute_value_mac_table_pack(bcmolt_epon_oam_dpoe_attribute_value_mac_table *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t i0;
+    if ((this->mac_address_count > 0) && (this->mac_address == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"mac_address\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_mac_table\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->mac_address_count; i0++)
+    {
+        if (!bcmolt_epon_oam_buf_write_mac_address(buf, this->mac_address[i0]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dpoe_attribute_value_mac_table_get_packed_length(bcmolt_epon_oam_dpoe_attribute_value_mac_table *this)
+{
+    return (6 * this->mac_address_count);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_attribute_value_mac_table_unpack(bcmolt_epon_oam_dpoe_attribute_value_mac_table *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint32_t i0;
+    this->mac_address_count = bcmolt_epon_oam_dpoe_attribute_value_mac_table_count_mac_address(buf);
+    if ((this->mac_address_count > 0) && (this->mac_address == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"mac_address\" of struct \"bcmolt_epon_oam_dpoe_attribute_value_mac_table\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->mac_address = (bcmos_mac_address *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->mac_address_count * sizeof(bcmos_mac_address));
+        }
+    }
+
+    for (i0 = 0; i0 < this->mac_address_count; i0++)
+    {
+        if (!bcmolt_epon_oam_buf_read_mac_address(buf, &this->mac_address[i0]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_attribute_value_mac_table_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    uint32_t mac_address_elem_count = 0;
+    while (BCMOS_TRUE)
+    {
+        if (!bcmolt_epon_oam_buf_skip(packed, 6))
+        {
+            break;
+        }
+
+        mac_address_elem_count += 1;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(mac_address_elem_count * sizeof(bcmos_mac_address));
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dpoe_attribute_value_mac_table_count_mac_address(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 6);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_event_base_pack(bcmolt_epon_oam_dpoe_event_base *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_dpoe_alarm_code_pack(this->event_code, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->event_code)
+    {
+        case BCMOLT_EPON_OAM_DPOE_ALARM_CODE_STATISTICS_ALARM:
+            {
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.statistics_alarm.raised))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_dpoe_object_type_pack(this->u.statistics_alarm.object_type, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.statistics_alarm.object_instance))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.statistics_alarm.stat_branch))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.statistics_alarm.stat_leaf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_ALARM_CODE_KEYEXCHANGE_FAILURE:
+        case BCMOLT_EPON_OAM_DPOE_ALARM_CODE_LOS:
+        case BCMOLT_EPON_OAM_DPOE_ALARM_CODE_MAC_TABLE_OVERFLOW:
+        case BCMOLT_EPON_OAM_DPOE_ALARM_CODE_ONU_BUSY:
+        case BCMOLT_EPON_OAM_DPOE_ALARM_CODE_PORT_DISABLED:
+        case BCMOLT_EPON_OAM_DPOE_ALARM_CODE_POWER_FAILURE:
+        default:
+            {
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.def.raised))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_dpoe_object_type_pack(this->u.def.object_type, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.def.object_instance))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dpoe_event_base_get_packed_length(bcmolt_epon_oam_dpoe_event_base *this)
+{
+    uint32_t count = 1;
+    switch (this->event_code)
+    {
+        case BCMOLT_EPON_OAM_DPOE_ALARM_CODE_STATISTICS_ALARM:
+            {
+                count += 8;
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_ALARM_CODE_KEYEXCHANGE_FAILURE:
+        case BCMOLT_EPON_OAM_DPOE_ALARM_CODE_LOS:
+        case BCMOLT_EPON_OAM_DPOE_ALARM_CODE_MAC_TABLE_OVERFLOW:
+        case BCMOLT_EPON_OAM_DPOE_ALARM_CODE_ONU_BUSY:
+        case BCMOLT_EPON_OAM_DPOE_ALARM_CODE_PORT_DISABLED:
+        case BCMOLT_EPON_OAM_DPOE_ALARM_CODE_POWER_FAILURE:
+        default:
+            {
+                count += 5;
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_event_base_unpack(bcmolt_epon_oam_dpoe_event_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_dpoe_alarm_code_unpack(&this->event_code, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->event_code)
+    {
+        case BCMOLT_EPON_OAM_DPOE_ALARM_CODE_STATISTICS_ALARM:
+            {
+                if (!bcmolt_epon_oam_buf_read_bool(buf, &this->u.statistics_alarm.raised))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_dpoe_object_type_unpack(&this->u.statistics_alarm.object_type, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.statistics_alarm.object_instance))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.statistics_alarm.stat_branch))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.statistics_alarm.stat_leaf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_ALARM_CODE_KEYEXCHANGE_FAILURE:
+        case BCMOLT_EPON_OAM_DPOE_ALARM_CODE_LOS:
+        case BCMOLT_EPON_OAM_DPOE_ALARM_CODE_MAC_TABLE_OVERFLOW:
+        case BCMOLT_EPON_OAM_DPOE_ALARM_CODE_ONU_BUSY:
+        case BCMOLT_EPON_OAM_DPOE_ALARM_CODE_PORT_DISABLED:
+        case BCMOLT_EPON_OAM_DPOE_ALARM_CODE_POWER_FAILURE:
+        default:
+            {
+                if (!bcmolt_epon_oam_buf_read_bool(buf, &this->u.def.raised))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_dpoe_object_type_unpack(&this->u.def.object_type, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.def.object_instance))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_event_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_dpoe_alarm_code event_code;
+    if (!bcmolt_epon_oam_dpoe_alarm_code_unpack(&event_code, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (event_code)
+    {
+        case BCMOLT_EPON_OAM_DPOE_ALARM_CODE_STATISTICS_ALARM:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_ALARM_CODE_KEYEXCHANGE_FAILURE:
+        case BCMOLT_EPON_OAM_DPOE_ALARM_CODE_LOS:
+        case BCMOLT_EPON_OAM_DPOE_ALARM_CODE_MAC_TABLE_OVERFLOW:
+        case BCMOLT_EPON_OAM_DPOE_ALARM_CODE_ONU_BUSY:
+        case BCMOLT_EPON_OAM_DPOE_ALARM_CODE_PORT_DISABLED:
+        case BCMOLT_EPON_OAM_DPOE_ALARM_CODE_POWER_FAILURE:
+        default:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_file_transfer_base_pack(bcmolt_epon_oam_dpoe_file_transfer_base *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_dpoe_file_transfer_opcode_pack(this->opcode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->opcode)
+    {
+        case BCMOLT_EPON_OAM_DPOE_FILE_TRANSFER_OPCODE_FILE_READ:
+            {
+                if (!bcmolt_epon_oam_dpoe_file_type_pack(this->u.file_read.file_type, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_FILE_TRANSFER_OPCODE_FILE_WRITE:
+            {
+                if ((this->u.file_write.filename_count > 0) && (this->u.file_write.filename == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"filename\" of struct \"bcmolt_epon_oam_dpoe_file_transfer_base_file_write\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.file_write.filename_count > 128)
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.file_write.filename, this->u.file_write.filename_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_FILE_TRANSFER_OPCODE_FILE_DATA:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.file_data.block))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.file_data.length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.file_data.length > 0) && (this->u.file_data.data == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"data\" of struct \"bcmolt_epon_oam_dpoe_file_transfer_base_file_data\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.file_data.data, this->u.file_data.length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_FILE_TRANSFER_OPCODE_FILE_ACK:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.file_ack.block))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_dpoe_file_transfer_error_pack(this->u.file_ack.error, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dpoe_file_transfer_base_get_packed_length(bcmolt_epon_oam_dpoe_file_transfer_base *this)
+{
+    uint32_t count = 1;
+    switch (this->opcode)
+    {
+        case BCMOLT_EPON_OAM_DPOE_FILE_TRANSFER_OPCODE_FILE_READ:
+            {
+                count += 1;
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_FILE_TRANSFER_OPCODE_FILE_WRITE:
+            {
+                count += this->u.file_write.filename_count;
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_FILE_TRANSFER_OPCODE_FILE_DATA:
+            {
+                count += 4 + this->u.file_data.length;
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_FILE_TRANSFER_OPCODE_FILE_ACK:
+            {
+                count += 3;
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_file_transfer_base_unpack(bcmolt_epon_oam_dpoe_file_transfer_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_dpoe_file_transfer_opcode_unpack(&this->opcode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->opcode)
+    {
+        case BCMOLT_EPON_OAM_DPOE_FILE_TRANSFER_OPCODE_FILE_READ:
+            {
+                if (!bcmolt_epon_oam_dpoe_file_type_unpack(&this->u.file_read.file_type, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_FILE_TRANSFER_OPCODE_FILE_WRITE:
+            {
+                this->u.file_write.filename_count = bcmolt_epon_oam_dpoe_file_transfer_base_file_write_count_filename(buf);
+                if ((this->u.file_write.filename_count > 0) && (this->u.file_write.filename == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"filename\" of struct \"bcmolt_epon_oam_dpoe_file_transfer_base_file_write\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.file_write.filename = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.file_write.filename_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (this->u.file_write.filename_count > 128)
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.file_write.filename, this->u.file_write.filename_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_FILE_TRANSFER_OPCODE_FILE_DATA:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.file_data.block))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.file_data.length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.file_data.length > 0) && (this->u.file_data.data == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"data\" of struct \"bcmolt_epon_oam_dpoe_file_transfer_base_file_data\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.file_data.data = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.file_data.length * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.file_data.data, this->u.file_data.length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_FILE_TRANSFER_OPCODE_FILE_ACK:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.file_ack.block))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_dpoe_file_transfer_error_unpack(&this->u.file_ack.error, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_file_transfer_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_dpoe_file_transfer_opcode opcode;
+    if (!bcmolt_epon_oam_dpoe_file_transfer_opcode_unpack(&opcode, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (opcode)
+    {
+        case BCMOLT_EPON_OAM_DPOE_FILE_TRANSFER_OPCODE_FILE_READ:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_FILE_TRANSFER_OPCODE_FILE_WRITE:
+            {
+                uint32_t filename_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                    {
+                        break;
+                    }
+
+                    filename_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(filename_elem_count * sizeof(uint8_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_FILE_TRANSFER_OPCODE_FILE_DATA:
+            {
+                uint16_t length;
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * length);
+                if (!bcmolt_epon_oam_buf_skip(packed, length * 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_FILE_TRANSFER_OPCODE_FILE_ACK:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dpoe_file_transfer_base_file_write_count_filename(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_info_tlv_pack(bcmolt_epon_oam_dpoe_info_tlv *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_dpoe_info_tlv_type_pack(this->type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->type)
+    {
+        case BCMOLT_EPON_OAM_DPOE_INFO_TLV_TYPE_DPOE_OAM_SUPPORT:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.dpoe_oam_support.dpoe_oam_version))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dpoe_info_tlv_get_packed_length(bcmolt_epon_oam_dpoe_info_tlv *this)
+{
+    uint32_t count = 1;
+    switch (this->type)
+    {
+        case BCMOLT_EPON_OAM_DPOE_INFO_TLV_TYPE_DPOE_OAM_SUPPORT:
+            {
+                count += 1;
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_info_tlv_unpack(bcmolt_epon_oam_dpoe_info_tlv *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_dpoe_info_tlv_type_unpack(&this->type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->type)
+    {
+        case BCMOLT_EPON_OAM_DPOE_INFO_TLV_TYPE_DPOE_OAM_SUPPORT:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.dpoe_oam_support.dpoe_oam_version))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_info_tlv_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_dpoe_info_tlv_type type;
+    if (!bcmolt_epon_oam_dpoe_info_tlv_type_unpack(&type, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (type)
+    {
+        case BCMOLT_EPON_OAM_DPOE_INFO_TLV_TYPE_DPOE_OAM_SUPPORT:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_u8value_pack(bcmolt_epon_oam_u8value *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->value))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_u8value_unpack(bcmolt_epon_oam_u8value *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->value))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_u8value_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 1);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_u64value_pack(bcmolt_epon_oam_u64value *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->value))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_u64value_unpack(bcmolt_epon_oam_u64value *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->value))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_u64value_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 8);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_std_attribute_value_pack(bcmolt_epon_oam_std_attribute_value *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t preLenFieldPos;
+    uint32_t bytesAfterLenField;
+    if (!bcmolt_epon_oam_var_leaf_attribute_pack(this->leaf, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->width >= 0x0080)
+    {
+        bcmolt_epon_oam_buf_write_u8(buf, this->width);
+        return BCMOS_TRUE;
+    }
+
+    preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+    /* skip over length field (we'll fill it in later) */
+    if (!bcmolt_epon_oam_buf_skip(buf, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->leaf)
+    {
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_ID:
+            {
+                if (!bcmolt_epon_oam_u8value_pack(&this->u.mac_id.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAMES_TX_OK:
+            {
+                if (!bcmolt_epon_oam_u64value_pack(&this->u.mac_frames_tx_ok.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_SINGLE_COLL_FRAMES:
+            {
+                if (!bcmolt_epon_oam_u64value_pack(&this->u.mac_single_coll_frames.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_MULTIPLE_COLL_FRAMES:
+            {
+                if (!bcmolt_epon_oam_u64value_pack(&this->u.mac_multiple_coll_frames.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAMES_RX_OK:
+            {
+                if (!bcmolt_epon_oam_u64value_pack(&this->u.mac_frames_rx_ok.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FCS_ERR:
+            {
+                if (!bcmolt_epon_oam_u64value_pack(&this->u.mac_fcs_err.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_ALIGN_ERR:
+            {
+                if (!bcmolt_epon_oam_u64value_pack(&this->u.mac_align_err.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_OCTETS_TX_OK:
+            {
+                if (!bcmolt_epon_oam_u64value_pack(&this->u.mac_octets_tx_ok.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAMES_DEFERRED:
+            {
+                if (!bcmolt_epon_oam_u8value_pack(&this->u.mac_frames_deferred.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_LATE_COLLISIONS:
+            {
+                if (!bcmolt_epon_oam_u64value_pack(&this->u.mac_late_collisions.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_EXCESSIVE_COLLISIONS:
+            {
+                if (!bcmolt_epon_oam_u64value_pack(&this->u.mac_excessive_collisions.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAMES_LOST_MAC_TX_ERR:
+            {
+                if (!bcmolt_epon_oam_u64value_pack(&this->u.mac_frames_lost_mac_tx_err.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CARRIER_SENSE_ERR:
+            {
+                if (!bcmolt_epon_oam_u8value_pack(&this->u.mac_carrier_sense_err.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_OCTETS_RX_OK:
+            {
+                if (!bcmolt_epon_oam_u64value_pack(&this->u.mac_octets_rx_ok.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAMES_LOST_MAC_RX_ERR:
+            {
+                if (!bcmolt_epon_oam_u64value_pack(&this->u.mac_frames_lost_mac_rx_err.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_MCAST_FRAMES_TX_OK:
+            {
+                if (!bcmolt_epon_oam_u64value_pack(&this->u.mac_mcast_frames_tx_ok.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_BCAST_FRAMES_TX_OK:
+            {
+                if (!bcmolt_epon_oam_u64value_pack(&this->u.mac_bcast_frames_tx_ok.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FR_EXCESSIVE_DEFERRAL:
+            {
+                if (!bcmolt_epon_oam_u8value_pack(&this->u.mac_fr_excessive_deferral.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_MCAST_FRAMES_RX_OK:
+            {
+                if (!bcmolt_epon_oam_u64value_pack(&this->u.mac_mcast_frames_rx_ok.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_BCAST_FRAMES_RX_OK:
+            {
+                if (!bcmolt_epon_oam_u64value_pack(&this->u.mac_bcast_frames_rx_ok.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_IN_RANGE_LEN_ERR:
+            {
+                if (!bcmolt_epon_oam_u64value_pack(&this->u.mac_in_range_len_err.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_OUT_OF_RANGE_LEN_ERR:
+            {
+                if (!bcmolt_epon_oam_u64value_pack(&this->u.mac_out_of_range_len_err.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAME_TOO_LONG:
+            {
+                if (!bcmolt_epon_oam_u64value_pack(&this->u.mac_frame_too_long.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_ENABLE_STATUS:
+            {
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.mac_enable_status.status))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_ADDR:
+            {
+                if (!bcmolt_epon_oam_buf_write_mac_address(buf, this->u.mac_addr.mac_address))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_TYPE:
+            {
+                if (!bcmolt_epon_oam_std_phy_type_pack(this->u.phy_type.type, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_SYMBOL_ERR_DURING_CARRIER:
+            {
+                if (!bcmolt_epon_oam_u64value_pack(&this->u.phy_symbol_err_during_carrier.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_ADMIN_STATE:
+            {
+                if (!bcmolt_epon_oam_oam_state_pack(this->u.phy_admin_state.state, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_MEDIA_AVAIL:
+            {
+                if (!bcmolt_epon_oam_mau_media_available_pack(this->u.mau_media_avail.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_ID:
+            {
+                if (!bcmolt_epon_oam_u8value_pack(&this->u.auto_neg_id.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_ADMIN_STATE:
+            {
+                if (!bcmolt_epon_oam_autonegotiate_admin_state_pack(this->u.auto_neg_admin_state.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_REMOTE_SIG:
+            {
+                if (!bcmolt_epon_oam_auto_remote_sig_pack(this->u.auto_neg_remote_sig.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_AUTO_CFG:
+            {
+                if (!bcmolt_epon_oam_auto_negotiation_auto_config_pack(this->u.auto_neg_auto_cfg.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_LOCAL_TECH_ABILITY:
+            {
+                uint32_t i0;
+                if ((this->u.auto_neg_local_tech_ability.capabilities_count > 0) && (this->u.auto_neg_local_tech_ability.capabilities == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"capabilities\" of struct \"bcmolt_epon_oam_std_attribute_value_auto_neg_local_tech_ability\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i0 = 0; i0 < this->u.auto_neg_local_tech_ability.capabilities_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_std_auto_negoitation_capability_pack(this->u.auto_neg_local_tech_ability.capabilities[i0], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_ADVERTISED_TECH_ABILITY:
+            {
+                uint32_t i1;
+                if ((this->u.auto_neg_advertised_tech_ability.capabilities_count > 0) && (this->u.auto_neg_advertised_tech_ability.capabilities == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"capabilities\" of struct \"bcmolt_epon_oam_std_attribute_value_auto_neg_advertised_tech_ability\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i1 = 0; i1 < this->u.auto_neg_advertised_tech_ability.capabilities_count; i1++)
+                {
+                    if (!bcmolt_epon_oam_std_auto_negoitation_capability_pack(this->u.auto_neg_advertised_tech_ability.capabilities[i1], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_RX_TECH:
+            {
+                uint32_t i2;
+                if ((this->u.auto_neg_rx_tech.capabilities_count > 0) && (this->u.auto_neg_rx_tech.capabilities == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"capabilities\" of struct \"bcmolt_epon_oam_std_attribute_value_auto_neg_rx_tech\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i2 = 0; i2 < this->u.auto_neg_rx_tech.capabilities_count; i2++)
+                {
+                    if (!bcmolt_epon_oam_std_auto_negoitation_capability_pack(this->u.auto_neg_rx_tech.capabilities[i2], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_LOCAL_SELECT_ABLE:
+            {
+                if (!bcmolt_epon_oam_auto_selector_pack(this->u.auto_neg_local_select_able.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_AD_SELECT_ABLE:
+            {
+                if (!bcmolt_epon_oam_auto_selector_pack(this->u.auto_neg_ad_select_able.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_RX_SELECT_ABLE:
+            {
+                if (!bcmolt_epon_oam_auto_selector_pack(this->u.auto_neg_rx_select_able.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_DUPLEX_STATUS:
+            {
+                if (!bcmolt_epon_oam_mac_duplex_status_pack(this->u.mac_duplex_status.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_FUNCS_SUPPORTED:
+            {
+                uint32_t i3;
+                if ((this->u.mac_ctrl_funcs_supported.functions_count > 0) && (this->u.mac_ctrl_funcs_supported.functions == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"functions\" of struct \"bcmolt_epon_oam_std_attribute_value_mac_ctrl_funcs_supported\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i3 = 0; i3 < this->u.mac_ctrl_funcs_supported.functions_count; i3++)
+                {
+                    if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.mac_ctrl_funcs_supported.functions[i3]))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_FRAMES_TX:
+            {
+                if (!bcmolt_epon_oam_u64value_pack(&this->u.mac_ctrl_frames_tx.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_FRAMES_RX:
+            {
+                if (!bcmolt_epon_oam_u64value_pack(&this->u.mac_ctrl_frames_rx.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_UNSUPPORTED_OP_RX:
+            {
+                if (!bcmolt_epon_oam_u64value_pack(&this->u.mac_ctrl_unsupported_op_rx.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_PAUSE_DELAY:
+            {
+                if (!bcmolt_epon_oam_u64value_pack(&this->u.mac_ctrl_pause_delay.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_PAUSE_TX:
+            {
+                if (!bcmolt_epon_oam_u64value_pack(&this->u.mac_ctrl_pause_tx.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_PAUSE_RX:
+            {
+                if (!bcmolt_epon_oam_u64value_pack(&this->u.mac_ctrl_pause_rx.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_SECS_EVENT:
+            {
+                if (!bcmolt_epon_oam_u64value_pack(&this->u.oam_local_err_frame_secs_event.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_PERIOD_EVENT:
+            {
+                if (!bcmolt_epon_oam_u64value_pack(&this->u.oam_local_err_frame_period_event.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FR_SEC_SUM_EVENT:
+            {
+                if (!bcmolt_epon_oam_u64value_pack(&this->u.oam_local_err_fr_sec_sum_event.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_EMUL_CRC8ERR:
+            {
+                if (!bcmolt_epon_oam_u64value_pack(&this->u.oam_emul_crc8err.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_MAC_CTRL_FRAMES_TX:
+            {
+                if (!bcmolt_epon_oam_u64value_pack(&this->u.mpcp_mac_ctrl_frames_tx.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_MAC_CTRL_FRAMES_RX:
+            {
+                if (!bcmolt_epon_oam_u64value_pack(&this->u.mpcp_mac_ctrl_frames_rx.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_DISCOVERY_WINDOW_TX:
+            {
+                if (!bcmolt_epon_oam_u64value_pack(&this->u.mpcp_discovery_window_tx.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_DISCOVERY_TIMEOUT:
+            {
+                if (!bcmolt_epon_oam_u64value_pack(&this->u.mpcp_discovery_timeout.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_FEC_CORRECTED_BLOCKS:
+            {
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.fec_corrected_blocks.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_FEC_UNCORRECTABLE_BLOCKS:
+            {
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.fec_uncorrectable_blocks.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_FEC_ABILITY:
+            {
+                if (!bcmolt_epon_oam_fec_support_pack(this->u.fec_ability.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_FEC_MODE:
+            {
+                if (!bcmolt_epon_oam_std_fec_mode_pack(this->u.fec_mode.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_TX_GATE:
+            {
+                if (!bcmolt_epon_oam_u64value_pack(&this->u.mpcp_tx_gate.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_TX_REG_ACK:
+            {
+                if (!bcmolt_epon_oam_u64value_pack(&this->u.mpcp_tx_reg_ack.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_TX_REGISTER:
+            {
+                if (!bcmolt_epon_oam_u64value_pack(&this->u.mpcp_tx_register.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_TX_REG_REQUEST:
+            {
+                if (!bcmolt_epon_oam_u64value_pack(&this->u.mpcp_tx_reg_request.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_TX_REPORT:
+            {
+                if (!bcmolt_epon_oam_u64value_pack(&this->u.mpcp_tx_report.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_RX_GATE:
+            {
+                if (!bcmolt_epon_oam_u64value_pack(&this->u.mpcp_rx_gate.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_RX_REG_ACK:
+            {
+                if (!bcmolt_epon_oam_u64value_pack(&this->u.mpcp_rx_reg_ack.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_RX_REGISTER:
+            {
+                if (!bcmolt_epon_oam_u64value_pack(&this->u.mpcp_rx_register.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_RX_REG_REQUEST:
+            {
+                if (!bcmolt_epon_oam_u64value_pack(&this->u.mpcp_rx_reg_request.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_RX_REPORT:
+            {
+                if (!bcmolt_epon_oam_u64value_pack(&this->u.mpcp_rx_report.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_COLLISION_FRAMES:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.mac_collision_frames.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ACTOR_ADMIN_KEY:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ACTOR_OPER_KEY:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ACTOR_SYS_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ACTOR_SYS_PRI:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ADMIN_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_AGG_OR_INDIVIDUAL:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_BCAST_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_BCAST_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_COLLECTOR_MAX_DELAY:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_DATA_RATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_DESC:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_FRAMES_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_FRAMES_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_LINK_UP_DOWN_NOTIFY_EN:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_MAC_ADDR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_MCAST_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_MCAST_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_NAME:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_OPER_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_PARTNER_OPER_KEY:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_PARTNER_SYS_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_PARTNER_SYS_PRI:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_PORT_LIST:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_RX_DISCARD:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_RX_ERR_FRAMES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_RX_OCTETS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_TIME_OF_LAST_OPER_CHANGE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_TX_DISCARD:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_TX_ERR_FRAMES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_TX_OCTETS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_UNK_PROTOCOL:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_GROUP_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_GROUP_PORT_CAPACITY:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_GROUP_PORT_MAP:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CAPABILITIES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_MCAST_ADDR_LIST:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_MCAST_RX_STATUS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_PROMISCUOUS_STATUS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_TX_ENABLE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_ADMIN_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_BAND_SPLIT_FREQ:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_BAND_SPLIT_TYPE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_FALSE_CARRIERS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_IDLE_ERROR_COUNT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_JABBER:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_LOSE_MEDIA_CTR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_TYPE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_TYPE_LIST:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_ADMIN_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_DUP_EVENT_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_EMUL_BAD_LLID_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_EMUL_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_EMUL_SPD_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_EVENT_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_FRAMES_LOST_OAM_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_INFO_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_INFO_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FR_SEC_SUM_THRESH:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FR_SEC_SUM_WIN:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_PERIOD_THRESH:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_PERIOD_WIN:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_SECS_THRESH:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_SECS_WIN:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_SYM_PERIOD_EVENT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_SYM_PERIOD_THRESH:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_SYM_PERIOD_WIN:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_FLAGS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOOP_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOOP_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_MODE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_ORG_SPECIFIC_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_ORG_SPECIFIC_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_PDU_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_PDU_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_CONFIG:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_PERIOD_EVENT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_PERIOD_THRESH:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_PERIOD_WIN:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_SECS_EVENT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_SECS_THRESH:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_SECS_WIN:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_FLAGS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_MAC_ADDR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_PDU_CONFIG:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_VENDOR_DEVICE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_VENDOR_OUI:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_VENDOR_VERSION:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_UNIQUE_EVENT_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_UNSUPPORTED_OPCODES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_VAR_REQ_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_VAR_REQ_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_VAR_RESP_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_VAR_RESP_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_MII_DETECT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_SQE_TEST_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_TYPE_LIST:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_ADMIN_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_ALIGN_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_AUTO_PART_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_AUTO_PARTITIONS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_BURSTS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_COLLISIONS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_DATA_RATE_MISMATCHES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_FCS_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_FRAMES_TOO_LONG:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_ISOLATES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_LAST_SOURCE_ADDR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_LATE_EVENTS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_READABLE_FRAMES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_READABLE_OCTETS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_RUNTS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_SHORT_EVENTS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_SOURCE_ADDR_CHANGES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_SYM_ERR_DURING_PKT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_VERY_LONG_EVENTS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_GROUP_CAPACITY:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_GROUP_MAP:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_HEALTH_DATA:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_HEALTH_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_HEALTH_TEXT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_TX_COLLISIONS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_TYPE:
+        default:
+            {
+            }
+            break;
+    }
+
+    bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+    if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_std_attribute_value_get_packed_length(bcmolt_epon_oam_std_attribute_value *this)
+{
+    if (this->width >= 0x0080)
+    {
+        return this->width;
+    }
+    else
+    {
+        uint32_t count = 3;
+        switch (this->leaf)
+        {
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_ID:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAMES_TX_OK:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_SINGLE_COLL_FRAMES:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_MULTIPLE_COLL_FRAMES:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAMES_RX_OK:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FCS_ERR:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_ALIGN_ERR:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_OCTETS_TX_OK:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAMES_DEFERRED:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_LATE_COLLISIONS:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_EXCESSIVE_COLLISIONS:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAMES_LOST_MAC_TX_ERR:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CARRIER_SENSE_ERR:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_OCTETS_RX_OK:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAMES_LOST_MAC_RX_ERR:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_MCAST_FRAMES_TX_OK:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_BCAST_FRAMES_TX_OK:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FR_EXCESSIVE_DEFERRAL:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_MCAST_FRAMES_RX_OK:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_BCAST_FRAMES_RX_OK:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_IN_RANGE_LEN_ERR:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_OUT_OF_RANGE_LEN_ERR:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAME_TOO_LONG:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_ENABLE_STATUS:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_ADDR:
+                {
+                    count += 6;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_TYPE:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_SYMBOL_ERR_DURING_CARRIER:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_ADMIN_STATE:
+                {
+                    count += 4;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_MEDIA_AVAIL:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_ID:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_ADMIN_STATE:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_REMOTE_SIG:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_AUTO_CFG:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_LOCAL_TECH_ABILITY:
+                {
+                    count += (2 * this->u.auto_neg_local_tech_ability.capabilities_count);
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_ADVERTISED_TECH_ABILITY:
+                {
+                    count += (2 * this->u.auto_neg_advertised_tech_ability.capabilities_count);
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_RX_TECH:
+                {
+                    count += (2 * this->u.auto_neg_rx_tech.capabilities_count);
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_LOCAL_SELECT_ABLE:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_AD_SELECT_ABLE:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_RX_SELECT_ABLE:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_DUPLEX_STATUS:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_FUNCS_SUPPORTED:
+                {
+                    count += (2 * this->u.mac_ctrl_funcs_supported.functions_count);
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_FRAMES_TX:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_FRAMES_RX:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_UNSUPPORTED_OP_RX:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_PAUSE_DELAY:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_PAUSE_TX:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_PAUSE_RX:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_SECS_EVENT:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_PERIOD_EVENT:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FR_SEC_SUM_EVENT:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_EMUL_CRC8ERR:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_MAC_CTRL_FRAMES_TX:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_MAC_CTRL_FRAMES_RX:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_DISCOVERY_WINDOW_TX:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_DISCOVERY_TIMEOUT:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_FEC_CORRECTED_BLOCKS:
+                {
+                    count += 4;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_FEC_UNCORRECTABLE_BLOCKS:
+                {
+                    count += 4;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_FEC_ABILITY:
+                {
+                    count += 4;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_FEC_MODE:
+                {
+                    count += 4;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_TX_GATE:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_TX_REG_ACK:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_TX_REGISTER:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_TX_REG_REQUEST:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_TX_REPORT:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_RX_GATE:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_RX_REG_ACK:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_RX_REGISTER:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_RX_REG_REQUEST:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_RX_REPORT:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_COLLISION_FRAMES:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ACTOR_ADMIN_KEY:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ACTOR_OPER_KEY:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ACTOR_SYS_ID:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ACTOR_SYS_PRI:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ADMIN_STATE:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_AGG_OR_INDIVIDUAL:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_BCAST_RX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_BCAST_TX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_COLLECTOR_MAX_DELAY:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_DATA_RATE:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_DESC:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_FRAMES_RX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_FRAMES_TX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ID:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_LINK_UP_DOWN_NOTIFY_EN:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_MAC_ADDR:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_MCAST_RX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_MCAST_TX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_NAME:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_OPER_STATE:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_PARTNER_OPER_KEY:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_PARTNER_SYS_ID:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_PARTNER_SYS_PRI:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_PORT_LIST:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_RX_DISCARD:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_RX_ERR_FRAMES:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_RX_OCTETS:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_TIME_OF_LAST_OPER_CHANGE:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_TX_DISCARD:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_TX_ERR_FRAMES:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_TX_OCTETS:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_UNK_PROTOCOL:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_GROUP_ID:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_GROUP_PORT_CAPACITY:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_GROUP_PORT_MAP:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CAPABILITIES:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_ID:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_MCAST_ADDR_LIST:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_MCAST_RX_STATUS:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_PROMISCUOUS_STATUS:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_TX_ENABLE:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_ADMIN_STATE:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_BAND_SPLIT_FREQ:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_BAND_SPLIT_TYPE:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_FALSE_CARRIERS:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_ID:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_IDLE_ERROR_COUNT:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_JABBER:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_LOSE_MEDIA_CTR:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_TYPE:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_TYPE_LIST:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_ADMIN_STATE:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_DUP_EVENT_RX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_EMUL_BAD_LLID_ERR:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_EMUL_ID:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_EMUL_SPD_ERR:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_EVENT_TX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_FRAMES_LOST_OAM_ERR:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_ID:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_INFO_RX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_INFO_TX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FR_SEC_SUM_THRESH:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FR_SEC_SUM_WIN:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_PERIOD_THRESH:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_PERIOD_WIN:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_SECS_THRESH:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_SECS_WIN:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_SYM_PERIOD_EVENT:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_SYM_PERIOD_THRESH:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_SYM_PERIOD_WIN:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_FLAGS:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOOP_RX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOOP_TX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_MODE:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_ORG_SPECIFIC_RX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_ORG_SPECIFIC_TX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_PDU_RX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_PDU_TX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_CONFIG:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_PERIOD_EVENT:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_PERIOD_THRESH:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_PERIOD_WIN:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_SECS_EVENT:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_SECS_THRESH:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_SECS_WIN:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_FLAGS:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_MAC_ADDR:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_PDU_CONFIG:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_STATE:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_VENDOR_DEVICE:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_VENDOR_OUI:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_VENDOR_VERSION:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_UNIQUE_EVENT_RX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_UNSUPPORTED_OPCODES:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_VAR_REQ_RX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_VAR_REQ_TX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_VAR_RESP_RX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_VAR_RESP_TX:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_ID:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_MII_DETECT:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_SQE_TEST_ERR:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_TYPE_LIST:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_ADMIN_STATE:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_ALIGN_ERR:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_AUTO_PART_STATE:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_AUTO_PARTITIONS:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_BURSTS:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_COLLISIONS:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_DATA_RATE_MISMATCHES:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_FCS_ERR:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_FRAMES_TOO_LONG:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_ID:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_ISOLATES:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_LAST_SOURCE_ADDR:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_LATE_EVENTS:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_READABLE_FRAMES:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_READABLE_OCTETS:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_RUNTS:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_SHORT_EVENTS:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_SOURCE_ADDR_CHANGES:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_SYM_ERR_DURING_PKT:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_VERY_LONG_EVENTS:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_GROUP_CAPACITY:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_GROUP_MAP:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_HEALTH_DATA:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_HEALTH_STATE:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_HEALTH_TEXT:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_ID:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_TX_COLLISIONS:
+            case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_TYPE:
+            default:
+                {
+                }
+                break;
+        }
+
+        return count;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_std_attribute_value_unpack(bcmolt_epon_oam_std_attribute_value *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    bcmolt_epon_oam_buf postLenBuf;
+    if (!bcmolt_epon_oam_var_leaf_attribute_unpack(&this->leaf, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->width))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->width >= 0x0080)
+    {
+        return BCMOS_TRUE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, (this->width == 0) ? 0x0080 : this->width, buf->curr);
+    switch (this->leaf)
+    {
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_ID:
+            {
+                if (!bcmolt_epon_oam_u8value_unpack(&this->u.mac_id.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAMES_TX_OK:
+            {
+                if (!bcmolt_epon_oam_u64value_unpack(&this->u.mac_frames_tx_ok.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_SINGLE_COLL_FRAMES:
+            {
+                if (!bcmolt_epon_oam_u64value_unpack(&this->u.mac_single_coll_frames.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_MULTIPLE_COLL_FRAMES:
+            {
+                if (!bcmolt_epon_oam_u64value_unpack(&this->u.mac_multiple_coll_frames.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAMES_RX_OK:
+            {
+                if (!bcmolt_epon_oam_u64value_unpack(&this->u.mac_frames_rx_ok.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FCS_ERR:
+            {
+                if (!bcmolt_epon_oam_u64value_unpack(&this->u.mac_fcs_err.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_ALIGN_ERR:
+            {
+                if (!bcmolt_epon_oam_u64value_unpack(&this->u.mac_align_err.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_OCTETS_TX_OK:
+            {
+                if (!bcmolt_epon_oam_u64value_unpack(&this->u.mac_octets_tx_ok.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAMES_DEFERRED:
+            {
+                if (!bcmolt_epon_oam_u8value_unpack(&this->u.mac_frames_deferred.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_LATE_COLLISIONS:
+            {
+                if (!bcmolt_epon_oam_u64value_unpack(&this->u.mac_late_collisions.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_EXCESSIVE_COLLISIONS:
+            {
+                if (!bcmolt_epon_oam_u64value_unpack(&this->u.mac_excessive_collisions.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAMES_LOST_MAC_TX_ERR:
+            {
+                if (!bcmolt_epon_oam_u64value_unpack(&this->u.mac_frames_lost_mac_tx_err.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CARRIER_SENSE_ERR:
+            {
+                if (!bcmolt_epon_oam_u8value_unpack(&this->u.mac_carrier_sense_err.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_OCTETS_RX_OK:
+            {
+                if (!bcmolt_epon_oam_u64value_unpack(&this->u.mac_octets_rx_ok.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAMES_LOST_MAC_RX_ERR:
+            {
+                if (!bcmolt_epon_oam_u64value_unpack(&this->u.mac_frames_lost_mac_rx_err.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_MCAST_FRAMES_TX_OK:
+            {
+                if (!bcmolt_epon_oam_u64value_unpack(&this->u.mac_mcast_frames_tx_ok.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_BCAST_FRAMES_TX_OK:
+            {
+                if (!bcmolt_epon_oam_u64value_unpack(&this->u.mac_bcast_frames_tx_ok.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FR_EXCESSIVE_DEFERRAL:
+            {
+                if (!bcmolt_epon_oam_u8value_unpack(&this->u.mac_fr_excessive_deferral.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_MCAST_FRAMES_RX_OK:
+            {
+                if (!bcmolt_epon_oam_u64value_unpack(&this->u.mac_mcast_frames_rx_ok.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_BCAST_FRAMES_RX_OK:
+            {
+                if (!bcmolt_epon_oam_u64value_unpack(&this->u.mac_bcast_frames_rx_ok.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_IN_RANGE_LEN_ERR:
+            {
+                if (!bcmolt_epon_oam_u64value_unpack(&this->u.mac_in_range_len_err.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_OUT_OF_RANGE_LEN_ERR:
+            {
+                if (!bcmolt_epon_oam_u64value_unpack(&this->u.mac_out_of_range_len_err.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAME_TOO_LONG:
+            {
+                if (!bcmolt_epon_oam_u64value_unpack(&this->u.mac_frame_too_long.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_ENABLE_STATUS:
+            {
+                if (!bcmolt_epon_oam_buf_read_bool(&postLenBuf, &this->u.mac_enable_status.status))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_ADDR:
+            {
+                if (!bcmolt_epon_oam_buf_read_mac_address(&postLenBuf, &this->u.mac_addr.mac_address))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_TYPE:
+            {
+                if (!bcmolt_epon_oam_std_phy_type_unpack(&this->u.phy_type.type, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_SYMBOL_ERR_DURING_CARRIER:
+            {
+                if (!bcmolt_epon_oam_u64value_unpack(&this->u.phy_symbol_err_during_carrier.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_ADMIN_STATE:
+            {
+                if (!bcmolt_epon_oam_oam_state_unpack(&this->u.phy_admin_state.state, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_MEDIA_AVAIL:
+            {
+                if (!bcmolt_epon_oam_mau_media_available_unpack(&this->u.mau_media_avail.value, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_ID:
+            {
+                if (!bcmolt_epon_oam_u8value_unpack(&this->u.auto_neg_id.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_ADMIN_STATE:
+            {
+                if (!bcmolt_epon_oam_autonegotiate_admin_state_unpack(&this->u.auto_neg_admin_state.value, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_REMOTE_SIG:
+            {
+                if (!bcmolt_epon_oam_auto_remote_sig_unpack(&this->u.auto_neg_remote_sig.value, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_AUTO_CFG:
+            {
+                if (!bcmolt_epon_oam_auto_negotiation_auto_config_unpack(&this->u.auto_neg_auto_cfg.value, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_LOCAL_TECH_ABILITY:
+            {
+                uint32_t i0;
+                this->u.auto_neg_local_tech_ability.capabilities_count = bcmolt_epon_oam_std_attribute_value_auto_neg_local_tech_ability_count_capabilities(&postLenBuf);
+                if ((this->u.auto_neg_local_tech_ability.capabilities_count > 0) && (this->u.auto_neg_local_tech_ability.capabilities == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"capabilities\" of struct \"bcmolt_epon_oam_std_attribute_value_auto_neg_local_tech_ability\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.auto_neg_local_tech_ability.capabilities = (bcmolt_epon_oam_std_auto_negoitation_capability *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.auto_neg_local_tech_ability.capabilities_count * sizeof(bcmolt_epon_oam_std_auto_negoitation_capability));
+                    }
+                }
+
+                for (i0 = 0; i0 < this->u.auto_neg_local_tech_ability.capabilities_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_std_auto_negoitation_capability_unpack(&this->u.auto_neg_local_tech_ability.capabilities[i0], &postLenBuf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_ADVERTISED_TECH_ABILITY:
+            {
+                uint32_t i1;
+                this->u.auto_neg_advertised_tech_ability.capabilities_count = bcmolt_epon_oam_std_attribute_value_auto_neg_advertised_tech_ability_count_capabilities(&postLenBuf);
+                if ((this->u.auto_neg_advertised_tech_ability.capabilities_count > 0) && (this->u.auto_neg_advertised_tech_ability.capabilities == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"capabilities\" of struct \"bcmolt_epon_oam_std_attribute_value_auto_neg_advertised_tech_ability\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.auto_neg_advertised_tech_ability.capabilities = (bcmolt_epon_oam_std_auto_negoitation_capability *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.auto_neg_advertised_tech_ability.capabilities_count * sizeof(bcmolt_epon_oam_std_auto_negoitation_capability));
+                    }
+                }
+
+                for (i1 = 0; i1 < this->u.auto_neg_advertised_tech_ability.capabilities_count; i1++)
+                {
+                    if (!bcmolt_epon_oam_std_auto_negoitation_capability_unpack(&this->u.auto_neg_advertised_tech_ability.capabilities[i1], &postLenBuf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_RX_TECH:
+            {
+                uint32_t i2;
+                this->u.auto_neg_rx_tech.capabilities_count = bcmolt_epon_oam_std_attribute_value_auto_neg_rx_tech_count_capabilities(&postLenBuf);
+                if ((this->u.auto_neg_rx_tech.capabilities_count > 0) && (this->u.auto_neg_rx_tech.capabilities == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"capabilities\" of struct \"bcmolt_epon_oam_std_attribute_value_auto_neg_rx_tech\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.auto_neg_rx_tech.capabilities = (bcmolt_epon_oam_std_auto_negoitation_capability *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.auto_neg_rx_tech.capabilities_count * sizeof(bcmolt_epon_oam_std_auto_negoitation_capability));
+                    }
+                }
+
+                for (i2 = 0; i2 < this->u.auto_neg_rx_tech.capabilities_count; i2++)
+                {
+                    if (!bcmolt_epon_oam_std_auto_negoitation_capability_unpack(&this->u.auto_neg_rx_tech.capabilities[i2], &postLenBuf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_LOCAL_SELECT_ABLE:
+            {
+                if (!bcmolt_epon_oam_auto_selector_unpack(&this->u.auto_neg_local_select_able.value, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_AD_SELECT_ABLE:
+            {
+                if (!bcmolt_epon_oam_auto_selector_unpack(&this->u.auto_neg_ad_select_able.value, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_RX_SELECT_ABLE:
+            {
+                if (!bcmolt_epon_oam_auto_selector_unpack(&this->u.auto_neg_rx_select_able.value, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_DUPLEX_STATUS:
+            {
+                if (!bcmolt_epon_oam_mac_duplex_status_unpack(&this->u.mac_duplex_status.value, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_FUNCS_SUPPORTED:
+            {
+                uint32_t i3;
+                this->u.mac_ctrl_funcs_supported.functions_count = bcmolt_epon_oam_std_attribute_value_mac_ctrl_funcs_supported_count_functions(&postLenBuf);
+                if ((this->u.mac_ctrl_funcs_supported.functions_count > 0) && (this->u.mac_ctrl_funcs_supported.functions == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"functions\" of struct \"bcmolt_epon_oam_std_attribute_value_mac_ctrl_funcs_supported\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.mac_ctrl_funcs_supported.functions = (uint16_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.mac_ctrl_funcs_supported.functions_count * sizeof(uint16_t));
+                    }
+                }
+
+                for (i3 = 0; i3 < this->u.mac_ctrl_funcs_supported.functions_count; i3++)
+                {
+                    if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.mac_ctrl_funcs_supported.functions[i3]))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_FRAMES_TX:
+            {
+                if (!bcmolt_epon_oam_u64value_unpack(&this->u.mac_ctrl_frames_tx.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_FRAMES_RX:
+            {
+                if (!bcmolt_epon_oam_u64value_unpack(&this->u.mac_ctrl_frames_rx.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_UNSUPPORTED_OP_RX:
+            {
+                if (!bcmolt_epon_oam_u64value_unpack(&this->u.mac_ctrl_unsupported_op_rx.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_PAUSE_DELAY:
+            {
+                if (!bcmolt_epon_oam_u64value_unpack(&this->u.mac_ctrl_pause_delay.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_PAUSE_TX:
+            {
+                if (!bcmolt_epon_oam_u64value_unpack(&this->u.mac_ctrl_pause_tx.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_PAUSE_RX:
+            {
+                if (!bcmolt_epon_oam_u64value_unpack(&this->u.mac_ctrl_pause_rx.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_SECS_EVENT:
+            {
+                if (!bcmolt_epon_oam_u64value_unpack(&this->u.oam_local_err_frame_secs_event.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_PERIOD_EVENT:
+            {
+                if (!bcmolt_epon_oam_u64value_unpack(&this->u.oam_local_err_frame_period_event.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FR_SEC_SUM_EVENT:
+            {
+                if (!bcmolt_epon_oam_u64value_unpack(&this->u.oam_local_err_fr_sec_sum_event.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_EMUL_CRC8ERR:
+            {
+                if (!bcmolt_epon_oam_u64value_unpack(&this->u.oam_emul_crc8err.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_MAC_CTRL_FRAMES_TX:
+            {
+                if (!bcmolt_epon_oam_u64value_unpack(&this->u.mpcp_mac_ctrl_frames_tx.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_MAC_CTRL_FRAMES_RX:
+            {
+                if (!bcmolt_epon_oam_u64value_unpack(&this->u.mpcp_mac_ctrl_frames_rx.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_DISCOVERY_WINDOW_TX:
+            {
+                if (!bcmolt_epon_oam_u64value_unpack(&this->u.mpcp_discovery_window_tx.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_DISCOVERY_TIMEOUT:
+            {
+                if (!bcmolt_epon_oam_u64value_unpack(&this->u.mpcp_discovery_timeout.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_FEC_CORRECTED_BLOCKS:
+            {
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.fec_corrected_blocks.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_FEC_UNCORRECTABLE_BLOCKS:
+            {
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.fec_uncorrectable_blocks.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_FEC_ABILITY:
+            {
+                if (!bcmolt_epon_oam_fec_support_unpack(&this->u.fec_ability.value, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_FEC_MODE:
+            {
+                if (!bcmolt_epon_oam_std_fec_mode_unpack(&this->u.fec_mode.value, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_TX_GATE:
+            {
+                if (!bcmolt_epon_oam_u64value_unpack(&this->u.mpcp_tx_gate.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_TX_REG_ACK:
+            {
+                if (!bcmolt_epon_oam_u64value_unpack(&this->u.mpcp_tx_reg_ack.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_TX_REGISTER:
+            {
+                if (!bcmolt_epon_oam_u64value_unpack(&this->u.mpcp_tx_register.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_TX_REG_REQUEST:
+            {
+                if (!bcmolt_epon_oam_u64value_unpack(&this->u.mpcp_tx_reg_request.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_TX_REPORT:
+            {
+                if (!bcmolt_epon_oam_u64value_unpack(&this->u.mpcp_tx_report.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_RX_GATE:
+            {
+                if (!bcmolt_epon_oam_u64value_unpack(&this->u.mpcp_rx_gate.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_RX_REG_ACK:
+            {
+                if (!bcmolt_epon_oam_u64value_unpack(&this->u.mpcp_rx_reg_ack.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_RX_REGISTER:
+            {
+                if (!bcmolt_epon_oam_u64value_unpack(&this->u.mpcp_rx_register.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_RX_REG_REQUEST:
+            {
+                if (!bcmolt_epon_oam_u64value_unpack(&this->u.mpcp_rx_reg_request.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_RX_REPORT:
+            {
+                if (!bcmolt_epon_oam_u64value_unpack(&this->u.mpcp_rx_report.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_COLLISION_FRAMES:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.mac_collision_frames.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ACTOR_ADMIN_KEY:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ACTOR_OPER_KEY:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ACTOR_SYS_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ACTOR_SYS_PRI:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ADMIN_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_AGG_OR_INDIVIDUAL:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_BCAST_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_BCAST_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_COLLECTOR_MAX_DELAY:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_DATA_RATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_DESC:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_FRAMES_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_FRAMES_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_LINK_UP_DOWN_NOTIFY_EN:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_MAC_ADDR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_MCAST_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_MCAST_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_NAME:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_OPER_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_PARTNER_OPER_KEY:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_PARTNER_SYS_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_PARTNER_SYS_PRI:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_PORT_LIST:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_RX_DISCARD:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_RX_ERR_FRAMES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_RX_OCTETS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_TIME_OF_LAST_OPER_CHANGE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_TX_DISCARD:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_TX_ERR_FRAMES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_TX_OCTETS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_UNK_PROTOCOL:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_GROUP_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_GROUP_PORT_CAPACITY:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_GROUP_PORT_MAP:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CAPABILITIES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_MCAST_ADDR_LIST:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_MCAST_RX_STATUS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_PROMISCUOUS_STATUS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_TX_ENABLE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_ADMIN_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_BAND_SPLIT_FREQ:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_BAND_SPLIT_TYPE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_FALSE_CARRIERS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_IDLE_ERROR_COUNT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_JABBER:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_LOSE_MEDIA_CTR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_TYPE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_TYPE_LIST:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_ADMIN_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_DUP_EVENT_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_EMUL_BAD_LLID_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_EMUL_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_EMUL_SPD_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_EVENT_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_FRAMES_LOST_OAM_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_INFO_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_INFO_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FR_SEC_SUM_THRESH:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FR_SEC_SUM_WIN:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_PERIOD_THRESH:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_PERIOD_WIN:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_SECS_THRESH:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_SECS_WIN:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_SYM_PERIOD_EVENT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_SYM_PERIOD_THRESH:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_SYM_PERIOD_WIN:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_FLAGS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOOP_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOOP_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_MODE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_ORG_SPECIFIC_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_ORG_SPECIFIC_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_PDU_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_PDU_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_CONFIG:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_PERIOD_EVENT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_PERIOD_THRESH:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_PERIOD_WIN:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_SECS_EVENT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_SECS_THRESH:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_SECS_WIN:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_FLAGS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_MAC_ADDR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_PDU_CONFIG:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_VENDOR_DEVICE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_VENDOR_OUI:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_VENDOR_VERSION:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_UNIQUE_EVENT_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_UNSUPPORTED_OPCODES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_VAR_REQ_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_VAR_REQ_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_VAR_RESP_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_VAR_RESP_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_MII_DETECT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_SQE_TEST_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_TYPE_LIST:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_ADMIN_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_ALIGN_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_AUTO_PART_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_AUTO_PARTITIONS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_BURSTS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_COLLISIONS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_DATA_RATE_MISMATCHES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_FCS_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_FRAMES_TOO_LONG:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_ISOLATES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_LAST_SOURCE_ADDR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_LATE_EVENTS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_READABLE_FRAMES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_READABLE_OCTETS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_RUNTS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_SHORT_EVENTS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_SOURCE_ADDR_CHANGES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_SYM_ERR_DURING_PKT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_VERY_LONG_EVENTS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_GROUP_CAPACITY:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_GROUP_MAP:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_HEALTH_DATA:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_HEALTH_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_HEALTH_TEXT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_TX_COLLISIONS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_TYPE:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(buf, (this->width == 0) ? 0x0080 : this->width))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_std_attribute_value_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_var_leaf_attribute leaf;
+    bcmolt_epon_oam_buf postLenBuf;
+    uint8_t length;
+    if (!bcmolt_epon_oam_var_leaf_attribute_unpack(&leaf, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (length >= 0x0080)
+    {
+        return BCMOS_TRUE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+    switch (leaf)
+    {
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_ID:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAMES_TX_OK:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_SINGLE_COLL_FRAMES:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_MULTIPLE_COLL_FRAMES:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAMES_RX_OK:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FCS_ERR:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_ALIGN_ERR:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_OCTETS_TX_OK:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAMES_DEFERRED:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_LATE_COLLISIONS:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_EXCESSIVE_COLLISIONS:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAMES_LOST_MAC_TX_ERR:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CARRIER_SENSE_ERR:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_OCTETS_RX_OK:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAMES_LOST_MAC_RX_ERR:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_MCAST_FRAMES_TX_OK:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_BCAST_FRAMES_TX_OK:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FR_EXCESSIVE_DEFERRAL:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_MCAST_FRAMES_RX_OK:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_BCAST_FRAMES_RX_OK:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_IN_RANGE_LEN_ERR:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_OUT_OF_RANGE_LEN_ERR:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAME_TOO_LONG:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_ENABLE_STATUS:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_ADDR:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 6))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_TYPE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_SYMBOL_ERR_DURING_CARRIER:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_ADMIN_STATE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_MEDIA_AVAIL:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_ID:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_ADMIN_STATE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_REMOTE_SIG:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_AUTO_CFG:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_LOCAL_TECH_ABILITY:
+            {
+                uint32_t capabilities_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                    {
+                        break;
+                    }
+
+                    capabilities_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(capabilities_elem_count * sizeof(bcmolt_epon_oam_std_auto_negoitation_capability));
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_ADVERTISED_TECH_ABILITY:
+            {
+                uint32_t capabilities_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                    {
+                        break;
+                    }
+
+                    capabilities_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(capabilities_elem_count * sizeof(bcmolt_epon_oam_std_auto_negoitation_capability));
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_RX_TECH:
+            {
+                uint32_t capabilities_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                    {
+                        break;
+                    }
+
+                    capabilities_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(capabilities_elem_count * sizeof(bcmolt_epon_oam_std_auto_negoitation_capability));
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_LOCAL_SELECT_ABLE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_AD_SELECT_ABLE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_RX_SELECT_ABLE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_DUPLEX_STATUS:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_FUNCS_SUPPORTED:
+            {
+                uint32_t functions_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                    {
+                        break;
+                    }
+
+                    functions_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(functions_elem_count * sizeof(uint16_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_FRAMES_TX:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_FRAMES_RX:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_UNSUPPORTED_OP_RX:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_PAUSE_DELAY:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_PAUSE_TX:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_PAUSE_RX:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_SECS_EVENT:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_PERIOD_EVENT:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FR_SEC_SUM_EVENT:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_EMUL_CRC8ERR:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_MAC_CTRL_FRAMES_TX:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_MAC_CTRL_FRAMES_RX:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_DISCOVERY_WINDOW_TX:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_DISCOVERY_TIMEOUT:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_FEC_CORRECTED_BLOCKS:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_FEC_UNCORRECTABLE_BLOCKS:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_FEC_ABILITY:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_FEC_MODE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_TX_GATE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_TX_REG_ACK:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_TX_REGISTER:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_TX_REG_REQUEST:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_TX_REPORT:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_RX_GATE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_RX_REG_ACK:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_RX_REGISTER:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_RX_REG_REQUEST:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_RX_REPORT:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_COLLISION_FRAMES:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ACTOR_ADMIN_KEY:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ACTOR_OPER_KEY:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ACTOR_SYS_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ACTOR_SYS_PRI:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ADMIN_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_AGG_OR_INDIVIDUAL:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_BCAST_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_BCAST_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_COLLECTOR_MAX_DELAY:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_DATA_RATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_DESC:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_FRAMES_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_FRAMES_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_LINK_UP_DOWN_NOTIFY_EN:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_MAC_ADDR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_MCAST_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_MCAST_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_NAME:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_OPER_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_PARTNER_OPER_KEY:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_PARTNER_SYS_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_PARTNER_SYS_PRI:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_PORT_LIST:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_RX_DISCARD:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_RX_ERR_FRAMES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_RX_OCTETS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_TIME_OF_LAST_OPER_CHANGE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_TX_DISCARD:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_TX_ERR_FRAMES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_TX_OCTETS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_UNK_PROTOCOL:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_GROUP_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_GROUP_PORT_CAPACITY:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_GROUP_PORT_MAP:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CAPABILITIES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_MCAST_ADDR_LIST:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_MCAST_RX_STATUS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_PROMISCUOUS_STATUS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_TX_ENABLE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_ADMIN_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_BAND_SPLIT_FREQ:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_BAND_SPLIT_TYPE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_FALSE_CARRIERS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_IDLE_ERROR_COUNT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_JABBER:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_LOSE_MEDIA_CTR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_TYPE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_TYPE_LIST:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_ADMIN_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_DUP_EVENT_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_EMUL_BAD_LLID_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_EMUL_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_EMUL_SPD_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_EVENT_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_FRAMES_LOST_OAM_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_INFO_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_INFO_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FR_SEC_SUM_THRESH:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FR_SEC_SUM_WIN:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_PERIOD_THRESH:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_PERIOD_WIN:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_SECS_THRESH:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_SECS_WIN:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_SYM_PERIOD_EVENT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_SYM_PERIOD_THRESH:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_SYM_PERIOD_WIN:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_FLAGS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOOP_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOOP_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_MODE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_ORG_SPECIFIC_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_ORG_SPECIFIC_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_PDU_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_PDU_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_CONFIG:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_PERIOD_EVENT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_PERIOD_THRESH:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_PERIOD_WIN:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_SECS_EVENT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_SECS_THRESH:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_SECS_WIN:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_FLAGS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_MAC_ADDR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_PDU_CONFIG:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_VENDOR_DEVICE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_VENDOR_OUI:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_VENDOR_VERSION:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_UNIQUE_EVENT_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_UNSUPPORTED_OPCODES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_VAR_REQ_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_VAR_REQ_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_VAR_RESP_RX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_VAR_RESP_TX:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_MII_DETECT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_SQE_TEST_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_TYPE_LIST:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_ADMIN_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_ALIGN_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_AUTO_PART_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_AUTO_PARTITIONS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_BURSTS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_COLLISIONS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_DATA_RATE_MISMATCHES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_FCS_ERR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_FRAMES_TOO_LONG:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_ISOLATES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_LAST_SOURCE_ADDR:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_LATE_EVENTS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_READABLE_FRAMES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_READABLE_OCTETS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_RUNTS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_SHORT_EVENTS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_SOURCE_ADDR_CHANGES:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_SYM_ERR_DURING_PKT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_VERY_LONG_EVENTS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_GROUP_CAPACITY:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_GROUP_MAP:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_HEALTH_DATA:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_HEALTH_STATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_HEALTH_TEXT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_ID:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_TX_COLLISIONS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_TYPE:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_std_attribute_value_auto_neg_local_tech_ability_count_capabilities(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 2);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_std_attribute_value_auto_neg_advertised_tech_ability_count_capabilities(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 2);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_std_attribute_value_auto_neg_rx_tech_count_capabilities(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 2);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_std_attribute_value_mac_ctrl_funcs_supported_count_functions(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 2);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_std_action_value_base_pack(bcmolt_epon_oam_std_action_value_base *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t preLenFieldPos;
+    uint32_t bytesAfterLenField;
+    if (!bcmolt_epon_oam_var_leaf_action_pack(this->leaf, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->width >= 0x0080)
+    {
+        bcmolt_epon_oam_buf_write_u8(buf, this->width);
+        return BCMOS_TRUE;
+    }
+
+    preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+    /* skip over length field (we'll fill it in later) */
+    if (!bcmolt_epon_oam_buf_skip(buf, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->leaf)
+    {
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_AUTO_ADMIN_CONTROL:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_AUTO_RENEGOTIATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_MAC_ADD_GROUP_ADDRESS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_MAC_DEL_GROUP_ADDRESS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_MAC_INIT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_MAC_SELF_TEST:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_MAU_ADMIN_CONTROL:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_MAU_RESET:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_PHY_ADMIN_CONTROL:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_PORT_ADMIN_CONTROL:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_RPT_IN_SERVICE_TEST:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_RPT_RESET:
+        default:
+            {
+            }
+            break;
+    }
+
+    bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+    if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_std_action_value_base_unpack(bcmolt_epon_oam_std_action_value_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    bcmolt_epon_oam_buf postLenBuf;
+    if (!bcmolt_epon_oam_var_leaf_action_unpack(&this->leaf, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->width))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->width >= 0x0080)
+    {
+        return BCMOS_TRUE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, (this->width == 0) ? 0x0080 : this->width, buf->curr);
+    switch (this->leaf)
+    {
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_AUTO_ADMIN_CONTROL:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_AUTO_RENEGOTIATE:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_MAC_ADD_GROUP_ADDRESS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_MAC_DEL_GROUP_ADDRESS:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_MAC_INIT:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_MAC_SELF_TEST:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_MAU_ADMIN_CONTROL:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_MAU_RESET:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_PHY_ADMIN_CONTROL:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_PORT_ADMIN_CONTROL:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_RPT_IN_SERVICE_TEST:
+        case BCMOLT_EPON_OAM_VAR_LEAF_ACTION_RPT_RESET:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(buf, (this->width == 0) ? 0x0080 : this->width))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_std_action_value_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 3);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_var_container_base_pack(bcmolt_epon_oam_dpoe_var_container_base *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_dpoe_branch_pack(this->branch, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->branch)
+    {
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_OBJECT:
+            {
+                if (!bcmolt_epon_oam_dpoe_object_context_base_pack(&this->u.object.object_context, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_STANDARD_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_std_attribute_value_pack(&this->u.standard_attribute.attribute, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_STANDARD_ACTION:
+            {
+                if (!bcmolt_epon_oam_std_action_value_base_pack(&this->u.standard_action.action, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_dpoe_attribute_value_base_pack(&this->u.extended_attribute.attribute, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ACTION:
+            {
+                if (!bcmolt_epon_oam_dpoe_action_value_base_pack(&this->u.extended_action.action, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_END:
+            {
+                if ((this->u.end.unknown_count > 0) && (this->u.end.unknown == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"unknown\" of struct \"bcmolt_epon_oam_dpoe_var_container_base_end\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.end.unknown, this->u.end.unknown_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_PROGRAMMABLE_COUNTER:
+        default:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.def.leaf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.def.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.def.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dpoe_var_container_base_get_packed_length(bcmolt_epon_oam_dpoe_var_container_base *this)
+{
+    uint32_t count = 1;
+    switch (this->branch)
+    {
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_OBJECT:
+            {
+                count += bcmolt_epon_oam_dpoe_object_context_base_get_packed_length(&this->u.object.object_context);
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_STANDARD_ATTRIBUTE:
+            {
+                count += bcmolt_epon_oam_std_attribute_value_get_packed_length(&this->u.standard_attribute.attribute);
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_STANDARD_ACTION:
+            {
+                count += 3;
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ATTRIBUTE:
+            {
+                count += bcmolt_epon_oam_dpoe_attribute_value_base_get_packed_length(&this->u.extended_attribute.attribute);
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ACTION:
+            {
+                count += bcmolt_epon_oam_dpoe_action_value_base_get_packed_length(&this->u.extended_action.action);
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_END:
+            {
+                count += this->u.end.unknown_count;
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_PROGRAMMABLE_COUNTER:
+        default:
+            {
+                count += 3;
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_var_container_base_unpack(bcmolt_epon_oam_dpoe_var_container_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_dpoe_branch_unpack(&this->branch, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->branch)
+    {
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_OBJECT:
+            {
+                if (!bcmolt_epon_oam_dpoe_object_context_base_unpack(&this->u.object.object_context, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_STANDARD_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_std_attribute_value_unpack(&this->u.standard_attribute.attribute, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_STANDARD_ACTION:
+            {
+                if (!bcmolt_epon_oam_std_action_value_base_unpack(&this->u.standard_action.action, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_dpoe_attribute_value_base_unpack(&this->u.extended_attribute.attribute, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ACTION:
+            {
+                if (!bcmolt_epon_oam_dpoe_action_value_base_unpack(&this->u.extended_action.action, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_END:
+            {
+                this->u.end.unknown_count = bcmolt_epon_oam_dpoe_var_container_base_end_count_unknown(buf);
+                if ((this->u.end.unknown_count > 0) && (this->u.end.unknown == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"unknown\" of struct \"bcmolt_epon_oam_dpoe_var_container_base_end\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.end.unknown = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.end.unknown_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.end.unknown, this->u.end.unknown_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_PROGRAMMABLE_COUNTER:
+        default:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.def.leaf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.def.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.def.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.def.width == 0) ? 0x0080 : this->u.def.width, buf->curr);
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.def.width == 0) ? 0x0080 : this->u.def.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_var_container_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_dpoe_branch branch;
+    if (!bcmolt_epon_oam_dpoe_branch_unpack(&branch, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (branch)
+    {
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_OBJECT:
+            {
+                if (!bcmolt_epon_oam_dpoe_object_context_base_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_STANDARD_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_std_attribute_value_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_STANDARD_ACTION:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 3))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_dpoe_attribute_value_base_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ACTION:
+            {
+                if (!bcmolt_epon_oam_dpoe_action_value_base_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_END:
+            {
+                uint32_t unknown_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                    {
+                        break;
+                    }
+
+                    unknown_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(unknown_elem_count * sizeof(uint8_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_PROGRAMMABLE_COUNTER:
+        default:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dpoe_var_container_base_end_count_unknown(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_vendor_extended_base_pack(bcmolt_epon_oam_dpoe_vendor_extended_base *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_dpoe_opcode_pack(this->op, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->op)
+    {
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_GET_REQUEST:
+            {
+                uint32_t i0;
+                if ((this->u.get_request.vars_count > 0) && (this->u.get_request.vars == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vars\" of struct \"bcmolt_epon_oam_dpoe_vendor_extended_base_get_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i0 = 0; i0 < this->u.get_request.vars_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_dpoe_var_descriptor_pack(&this->u.get_request.vars[i0], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_GET_RESPONSE:
+            {
+                uint32_t i1;
+                if ((this->u.get_response.vars_count > 0) && (this->u.get_response.vars == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vars\" of struct \"bcmolt_epon_oam_dpoe_vendor_extended_base_get_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i1 = 0; i1 < this->u.get_response.vars_count; i1++)
+                {
+                    if (!bcmolt_epon_oam_dpoe_var_container_base_pack(&this->u.get_response.vars[i1], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_SET_REQUEST:
+            {
+                uint32_t i2;
+                if ((this->u.set_request.vars_count > 0) && (this->u.set_request.vars == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vars\" of struct \"bcmolt_epon_oam_dpoe_vendor_extended_base_set_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i2 = 0; i2 < this->u.set_request.vars_count; i2++)
+                {
+                    if (!bcmolt_epon_oam_dpoe_var_container_base_pack(&this->u.set_request.vars[i2], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_SET_RESPONSE:
+            {
+                uint32_t i3;
+                if ((this->u.set_response.vars_count > 0) && (this->u.set_response.vars == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vars\" of struct \"bcmolt_epon_oam_dpoe_vendor_extended_base_set_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i3 = 0; i3 < this->u.set_response.vars_count; i3++)
+                {
+                    if (!bcmolt_epon_oam_dpoe_var_container_base_pack(&this->u.set_response.vars[i3], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_MCAST_REG:
+            {
+                if (!bcmolt_epon_oam_dpoe_mcast_reg_code_pack(this->u.mcast_reg.action_code, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.mcast_reg.multicast_llid))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_MCAST_REG_RESP:
+            {
+                if (!bcmolt_epon_oam_dpoe_mcast_ctrl_resp_code_pack(this->u.mcast_reg_resp.status, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.mcast_reg_resp.multicast_llid))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_KEY_EXCHANGE:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.key_exchange.key_number))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.key_exchange.key_length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.key_exchange.key_length > 0) && (this->u.key_exchange.key_data == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"key_data\" of struct \"bcmolt_epon_oam_dpoe_vendor_extended_base_key_exchange\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.key_exchange.key_data, this->u.key_exchange.key_length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_FILE_TRANSFER:
+            {
+                if (!bcmolt_epon_oam_dpoe_file_transfer_base_pack(&this->u.file_transfer.file_transfer, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_DYNAMIC_IPMCAST_CTRL:
+            {
+                if (!bcmolt_epon_oam_dpoe_mcast_ctrl_action_pack(this->u.dynamic_ipmcast_ctrl.action, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.dynamic_ipmcast_ctrl.llid))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.dynamic_ipmcast_ctrl.ipsa, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.dynamic_ipmcast_ctrl.ipda, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_mac_address(buf, this->u.dynamic_ipmcast_ctrl.client_mac))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_DYNAMIC_IPMCAST_CTRL_RESP:
+            {
+                if (!bcmolt_epon_oam_dpoe_mcast_ctrl_resp_code_pack(this->u.dynamic_ipmcast_ctrl_resp.result_code, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_STATIC_IPMCAST_CTRL:
+            {
+                if (!bcmolt_epon_oam_dpoe_mcast_ctrl_action_pack(this->u.static_ipmcast_ctrl.action, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.static_ipmcast_ctrl.llid))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.static_ipmcast_ctrl.ipsa, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.static_ipmcast_ctrl.ipda, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.static_ipmcast_ctrl.port))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_STATIC_IPMCAST_CTRL_RESP:
+            {
+                if (!bcmolt_epon_oam_dpoe_mcast_ctrl_resp_code_pack(this->u.static_ipmcast_ctrl_resp.result_code, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_RESERVED:
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dpoe_vendor_extended_base_get_packed_length(bcmolt_epon_oam_dpoe_vendor_extended_base *this)
+{
+    uint32_t count = 1;
+    switch (this->op)
+    {
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_GET_REQUEST:
+            {
+                uint32_t i0;
+                if ((this->u.get_request.vars_count > 0) && (this->u.get_request.vars == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vars_count\" of struct \"bcmolt_epon_oam_dpoe_vendor_extended_base\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return 0;
+                }
+
+                for (i0 = 0; i0 < this->u.get_request.vars_count; i0++)
+                {
+                    count += bcmolt_epon_oam_dpoe_var_descriptor_get_packed_length(&this->u.get_request.vars[i0]);
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_GET_RESPONSE:
+            {
+                uint32_t i1;
+                if ((this->u.get_response.vars_count > 0) && (this->u.get_response.vars == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vars_count\" of struct \"bcmolt_epon_oam_dpoe_vendor_extended_base\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return 0;
+                }
+
+                for (i1 = 0; i1 < this->u.get_response.vars_count; i1++)
+                {
+                    count += bcmolt_epon_oam_dpoe_var_container_base_get_packed_length(&this->u.get_response.vars[i1]);
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_SET_REQUEST:
+            {
+                uint32_t i2;
+                if ((this->u.set_request.vars_count > 0) && (this->u.set_request.vars == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vars_count\" of struct \"bcmolt_epon_oam_dpoe_vendor_extended_base\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return 0;
+                }
+
+                for (i2 = 0; i2 < this->u.set_request.vars_count; i2++)
+                {
+                    count += bcmolt_epon_oam_dpoe_var_container_base_get_packed_length(&this->u.set_request.vars[i2]);
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_SET_RESPONSE:
+            {
+                uint32_t i3;
+                if ((this->u.set_response.vars_count > 0) && (this->u.set_response.vars == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vars_count\" of struct \"bcmolt_epon_oam_dpoe_vendor_extended_base\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return 0;
+                }
+
+                for (i3 = 0; i3 < this->u.set_response.vars_count; i3++)
+                {
+                    count += bcmolt_epon_oam_dpoe_var_container_base_get_packed_length(&this->u.set_response.vars[i3]);
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_MCAST_REG:
+            {
+                count += 3;
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_MCAST_REG_RESP:
+            {
+                count += 3;
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_KEY_EXCHANGE:
+            {
+                count += 2 + this->u.key_exchange.key_length;
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_FILE_TRANSFER:
+            {
+                count += bcmolt_epon_oam_dpoe_file_transfer_base_get_packed_length(&this->u.file_transfer.file_transfer);
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_DYNAMIC_IPMCAST_CTRL:
+            {
+                count += 41;
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_DYNAMIC_IPMCAST_CTRL_RESP:
+            {
+                count += 1;
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_STATIC_IPMCAST_CTRL:
+            {
+                count += 36;
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_STATIC_IPMCAST_CTRL_RESP:
+            {
+                count += 1;
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_RESERVED:
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_vendor_extended_base_unpack(bcmolt_epon_oam_dpoe_vendor_extended_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_dpoe_opcode_unpack(&this->op, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->op)
+    {
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_GET_REQUEST:
+            {
+                uint32_t i0;
+                this->u.get_request.vars_count = bcmolt_epon_oam_dpoe_vendor_extended_base_get_request_count_vars(buf);
+                if ((this->u.get_request.vars_count > 0) && (this->u.get_request.vars == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vars\" of struct \"bcmolt_epon_oam_dpoe_vendor_extended_base_get_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.get_request.vars = (bcmolt_epon_oam_dpoe_var_descriptor *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.get_request.vars_count * sizeof(bcmolt_epon_oam_dpoe_var_descriptor));
+                    }
+                }
+
+                for (i0 = 0; i0 < this->u.get_request.vars_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_dpoe_var_descriptor_unpack(&this->u.get_request.vars[i0], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_GET_RESPONSE:
+            {
+                uint32_t i1;
+                this->u.get_response.vars_count = bcmolt_epon_oam_dpoe_vendor_extended_base_get_response_count_vars(buf);
+                if ((this->u.get_response.vars_count > 0) && (this->u.get_response.vars == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vars\" of struct \"bcmolt_epon_oam_dpoe_vendor_extended_base_get_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.get_response.vars = (bcmolt_epon_oam_dpoe_var_container_base *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.get_response.vars_count * sizeof(bcmolt_epon_oam_dpoe_var_container_base));
+                    }
+                }
+
+                for (i1 = 0; i1 < this->u.get_response.vars_count; i1++)
+                {
+                    if (!bcmolt_epon_oam_dpoe_var_container_base_unpack(&this->u.get_response.vars[i1], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_SET_REQUEST:
+            {
+                uint32_t i2;
+                this->u.set_request.vars_count = bcmolt_epon_oam_dpoe_vendor_extended_base_set_request_count_vars(buf);
+                if ((this->u.set_request.vars_count > 0) && (this->u.set_request.vars == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vars\" of struct \"bcmolt_epon_oam_dpoe_vendor_extended_base_set_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.set_request.vars = (bcmolt_epon_oam_dpoe_var_container_base *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.set_request.vars_count * sizeof(bcmolt_epon_oam_dpoe_var_container_base));
+                    }
+                }
+
+                for (i2 = 0; i2 < this->u.set_request.vars_count; i2++)
+                {
+                    if (!bcmolt_epon_oam_dpoe_var_container_base_unpack(&this->u.set_request.vars[i2], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_SET_RESPONSE:
+            {
+                uint32_t i3;
+                this->u.set_response.vars_count = bcmolt_epon_oam_dpoe_vendor_extended_base_set_response_count_vars(buf);
+                if ((this->u.set_response.vars_count > 0) && (this->u.set_response.vars == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vars\" of struct \"bcmolt_epon_oam_dpoe_vendor_extended_base_set_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.set_response.vars = (bcmolt_epon_oam_dpoe_var_container_base *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.set_response.vars_count * sizeof(bcmolt_epon_oam_dpoe_var_container_base));
+                    }
+                }
+
+                for (i3 = 0; i3 < this->u.set_response.vars_count; i3++)
+                {
+                    if (!bcmolt_epon_oam_dpoe_var_container_base_unpack(&this->u.set_response.vars[i3], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_MCAST_REG:
+            {
+                if (!bcmolt_epon_oam_dpoe_mcast_reg_code_unpack(&this->u.mcast_reg.action_code, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.mcast_reg.multicast_llid))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_MCAST_REG_RESP:
+            {
+                if (!bcmolt_epon_oam_dpoe_mcast_ctrl_resp_code_unpack(&this->u.mcast_reg_resp.status, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.mcast_reg_resp.multicast_llid))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_KEY_EXCHANGE:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.key_exchange.key_number))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.key_exchange.key_length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.key_exchange.key_length > 0) && (this->u.key_exchange.key_data == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"key_data\" of struct \"bcmolt_epon_oam_dpoe_vendor_extended_base_key_exchange\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.key_exchange.key_data = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.key_exchange.key_length * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.key_exchange.key_data, this->u.key_exchange.key_length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_FILE_TRANSFER:
+            {
+                if (!bcmolt_epon_oam_dpoe_file_transfer_base_unpack(&this->u.file_transfer.file_transfer, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_DYNAMIC_IPMCAST_CTRL:
+            {
+                if (!bcmolt_epon_oam_dpoe_mcast_ctrl_action_unpack(&this->u.dynamic_ipmcast_ctrl.action, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.dynamic_ipmcast_ctrl.llid))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.dynamic_ipmcast_ctrl.ipsa, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.dynamic_ipmcast_ctrl.ipda, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_mac_address(buf, &this->u.dynamic_ipmcast_ctrl.client_mac))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_DYNAMIC_IPMCAST_CTRL_RESP:
+            {
+                if (!bcmolt_epon_oam_dpoe_mcast_ctrl_resp_code_unpack(&this->u.dynamic_ipmcast_ctrl_resp.result_code, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_STATIC_IPMCAST_CTRL:
+            {
+                if (!bcmolt_epon_oam_dpoe_mcast_ctrl_action_unpack(&this->u.static_ipmcast_ctrl.action, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.static_ipmcast_ctrl.llid))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.static_ipmcast_ctrl.ipsa, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.static_ipmcast_ctrl.ipda, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.static_ipmcast_ctrl.port))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_STATIC_IPMCAST_CTRL_RESP:
+            {
+                if (!bcmolt_epon_oam_dpoe_mcast_ctrl_resp_code_unpack(&this->u.static_ipmcast_ctrl_resp.result_code, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_RESERVED:
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_dpoe_vendor_extended_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_dpoe_opcode op;
+    if (!bcmolt_epon_oam_dpoe_opcode_unpack(&op, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (op)
+    {
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_GET_REQUEST:
+            {
+                uint32_t vars_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_dpoe_var_descriptor_scan(packed, extra_mem))
+                    {
+                        break;
+                    }
+
+                    vars_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(vars_elem_count * sizeof(bcmolt_epon_oam_dpoe_var_descriptor));
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_GET_RESPONSE:
+            {
+                uint32_t vars_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_dpoe_var_container_base_scan(packed, extra_mem))
+                    {
+                        break;
+                    }
+
+                    vars_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(vars_elem_count * sizeof(bcmolt_epon_oam_dpoe_var_container_base));
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_SET_REQUEST:
+            {
+                uint32_t vars_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_dpoe_var_container_base_scan(packed, extra_mem))
+                    {
+                        break;
+                    }
+
+                    vars_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(vars_elem_count * sizeof(bcmolt_epon_oam_dpoe_var_container_base));
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_SET_RESPONSE:
+            {
+                uint32_t vars_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_dpoe_var_container_base_scan(packed, extra_mem))
+                    {
+                        break;
+                    }
+
+                    vars_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(vars_elem_count * sizeof(bcmolt_epon_oam_dpoe_var_container_base));
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_MCAST_REG:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_MCAST_REG_RESP:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_KEY_EXCHANGE:
+            {
+                uint8_t key_length;
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &key_length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * key_length);
+                if (!bcmolt_epon_oam_buf_skip(packed, key_length * 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_FILE_TRANSFER:
+            {
+                if (!bcmolt_epon_oam_dpoe_file_transfer_base_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_DYNAMIC_IPMCAST_CTRL:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 6))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_DYNAMIC_IPMCAST_CTRL_RESP:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_STATIC_IPMCAST_CTRL:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_STATIC_IPMCAST_CTRL_RESP:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_RESERVED:
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dpoe_vendor_extended_base_get_request_count_vars(bcmolt_epon_oam_buf *buf)
+{
+    uint32_t count = 0;
+    uint32_t dummy = 0;
+    bcmolt_epon_oam_buf bufClone = *buf;
+    while (BCMOS_TRUE)
+    {
+        if (!bcmolt_epon_oam_dpoe_var_descriptor_scan(&bufClone, &dummy))
+        {
+            break;
+        }
+
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dpoe_vendor_extended_base_get_response_count_vars(bcmolt_epon_oam_buf *buf)
+{
+    uint32_t count = 0;
+    uint32_t dummy = 0;
+    bcmolt_epon_oam_buf bufClone = *buf;
+    while (BCMOS_TRUE)
+    {
+        if (!bcmolt_epon_oam_dpoe_var_container_base_scan(&bufClone, &dummy))
+        {
+            break;
+        }
+
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dpoe_vendor_extended_base_set_request_count_vars(bcmolt_epon_oam_buf *buf)
+{
+    uint32_t count = 0;
+    uint32_t dummy = 0;
+    bcmolt_epon_oam_buf bufClone = *buf;
+    while (BCMOS_TRUE)
+    {
+        if (!bcmolt_epon_oam_dpoe_var_container_base_scan(&bufClone, &dummy))
+        {
+            break;
+        }
+
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_dpoe_vendor_extended_base_set_response_count_vars(bcmolt_epon_oam_buf *buf)
+{
+    uint32_t count = 0;
+    uint32_t dummy = 0;
+    bcmolt_epon_oam_buf bufClone = *buf;
+    while (BCMOS_TRUE)
+    {
+        if (!bcmolt_epon_oam_dpoe_var_container_base_scan(&bufClone, &dummy))
+        {
+            break;
+        }
+
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_version_pack(bcmolt_epon_oam_tls_version *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->major))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->minor))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_version_unpack(bcmolt_epon_oam_tls_version *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->major))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->minor))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_version_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 2);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_random_pack(bcmolt_epon_oam_tls_random *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->unix_time))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write(buf, this->random, 28))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_random_unpack(bcmolt_epon_oam_tls_random *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->unix_time))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read(buf, this->random, 28))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_random_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 32);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_session_id_pack(bcmolt_epon_oam_tls_session_id *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->length > 0) && (this->session_id == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"session_id\" of struct \"bcmolt_epon_oam_tls_session_id\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    if (this->length > 32)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write(buf, this->session_id, this->length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tls_session_id_get_packed_length(bcmolt_epon_oam_tls_session_id *this)
+{
+    return 1 + this->length;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_session_id_unpack(bcmolt_epon_oam_tls_session_id *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->length > 0) && (this->session_id == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"session_id\" of struct \"bcmolt_epon_oam_tls_session_id\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->session_id = (uint8_t *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->length * sizeof(uint8_t));
+        }
+    }
+
+    if (this->length > 32)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read(buf, this->session_id, this->length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_session_id_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    uint8_t length;
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * length);
+    if (!bcmolt_epon_oam_buf_skip(packed, length * 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_ciphersuite_list_pack(bcmolt_epon_oam_tls_ciphersuite_list *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t i0;
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->length > 0) && (this->ciphersuites == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"ciphersuites\" of struct \"bcmolt_epon_oam_tls_ciphersuite_list\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->length; i0++)
+    {
+        if (!bcmolt_epon_oam_tls_ciphersuite_pack(this->ciphersuites[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tls_ciphersuite_list_get_packed_length(bcmolt_epon_oam_tls_ciphersuite_list *this)
+{
+    return 2 + (2 * this->length);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_ciphersuite_list_unpack(bcmolt_epon_oam_tls_ciphersuite_list *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint16_t i0;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->length > 0) && (this->ciphersuites == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"ciphersuites\" of struct \"bcmolt_epon_oam_tls_ciphersuite_list\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->ciphersuites = (bcmolt_epon_oam_tls_ciphersuite *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->length * sizeof(bcmolt_epon_oam_tls_ciphersuite));
+        }
+    }
+
+    for (i0 = 0; i0 < this->length; i0++)
+    {
+        if (!bcmolt_epon_oam_tls_ciphersuite_unpack(&this->ciphersuites[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_ciphersuite_list_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    uint16_t length;
+    if (!bcmolt_epon_oam_buf_read_u16(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_tls_ciphersuite) * length);
+    if (!bcmolt_epon_oam_buf_skip(packed, length * 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_compression_list_pack(bcmolt_epon_oam_tls_compression_list *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t i0;
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->length > 0) && (this->methods == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"methods\" of struct \"bcmolt_epon_oam_tls_compression_list\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->length; i0++)
+    {
+        if (!bcmolt_epon_oam_tls_compression_method_pack(this->methods[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tls_compression_list_get_packed_length(bcmolt_epon_oam_tls_compression_list *this)
+{
+    return 1 + this->length;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_compression_list_unpack(bcmolt_epon_oam_tls_compression_list *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint8_t i0;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->length > 0) && (this->methods == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"methods\" of struct \"bcmolt_epon_oam_tls_compression_list\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->methods = (bcmolt_epon_oam_tls_compression_method *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->length * sizeof(bcmolt_epon_oam_tls_compression_method));
+        }
+    }
+
+    for (i0 = 0; i0 < this->length; i0++)
+    {
+        if (!bcmolt_epon_oam_tls_compression_method_unpack(&this->methods[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_compression_list_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    uint8_t length;
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_tls_compression_method) * length);
+    if (!bcmolt_epon_oam_buf_skip(packed, length * 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_certificate_list_pack(bcmolt_epon_oam_tls_certificate_list *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t preLenFieldPos;
+    uint32_t bytesAfterLenField;
+    uint32_t i0;
+    preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+    /* skip over length field (we'll fill it in later) */
+    if (!bcmolt_epon_oam_buf_skip(buf, 3))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->certificate_list_count > 0) && (this->certificate_list == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"certificate_list\" of struct \"bcmolt_epon_oam_tls_certificate_list\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->certificate_list_count; i0++)
+    {
+        if (!bcmolt_epon_oam_certificate_pack(&this->certificate_list[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint24_t));
+    if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u24(buf, uint32_t_to_uint24_t(bytesAfterLenField)))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint24_t))))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tls_certificate_list_get_packed_length(bcmolt_epon_oam_tls_certificate_list *this)
+{
+    uint32_t count = 3;
+    uint32_t i0;
+    if ((this->certificate_list_count > 0) && (this->certificate_list == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"certificate_list_count\" of struct \"bcmolt_epon_oam_tls_certificate_list\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return 0;
+    }
+
+    for (i0 = 0; i0 < this->certificate_list_count; i0++)
+    {
+        count += bcmolt_epon_oam_certificate_get_packed_length(&this->certificate_list[i0]);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_certificate_list_unpack(bcmolt_epon_oam_tls_certificate_list *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint24_t certificate_list_size = uint32_t_to_uint24_t(0);
+    bcmolt_epon_oam_buf postLenBuf;
+    uint32_t i0;
+    if (!bcmolt_epon_oam_buf_read_u24(buf, &certificate_list_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, uint24_t_to_uint32_t(certificate_list_size), buf->curr);
+    this->certificate_list_count = bcmolt_epon_oam_tls_certificate_list_count_certificate_list(&postLenBuf);
+    if ((this->certificate_list_count > 0) && (this->certificate_list == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"certificate_list\" of struct \"bcmolt_epon_oam_tls_certificate_list\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->certificate_list = (bcmolt_epon_oam_certificate *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->certificate_list_count * sizeof(bcmolt_epon_oam_certificate));
+        }
+    }
+
+    for (i0 = 0; i0 < this->certificate_list_count; i0++)
+    {
+        if (!bcmolt_epon_oam_certificate_unpack(&this->certificate_list[i0], &postLenBuf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(buf, uint24_t_to_uint32_t(certificate_list_size)))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_certificate_list_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_buf postLenBuf;
+    uint24_t length;
+    uint32_t certificate_list_elem_count = 0;
+    if (!bcmolt_epon_oam_buf_read_u24(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, uint24_t_to_uint32_t(length), packed->curr);
+    while (BCMOS_TRUE)
+    {
+        if (!bcmolt_epon_oam_certificate_scan(&postLenBuf, extra_mem))
+        {
+            break;
+        }
+
+        certificate_list_elem_count += 1;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(certificate_list_elem_count * sizeof(bcmolt_epon_oam_certificate));
+    if (!bcmolt_epon_oam_buf_skip(packed, uint24_t_to_uint32_t(length)))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tls_certificate_list_count_certificate_list(bcmolt_epon_oam_buf *buf)
+{
+    uint32_t count = 0;
+    uint32_t dummy = 0;
+    bcmolt_epon_oam_buf bufClone = *buf;
+    while (BCMOS_TRUE)
+    {
+        if (!bcmolt_epon_oam_certificate_scan(&bufClone, &dummy))
+        {
+            break;
+        }
+
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_certificate_type_list_pack(bcmolt_epon_oam_tls_certificate_type_list *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t i0;
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->length > 0) && (this->certificate_types == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"certificate_types\" of struct \"bcmolt_epon_oam_tls_certificate_type_list\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->length; i0++)
+    {
+        if (!bcmolt_epon_oam_tls_certificate_type_pack(this->certificate_types[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tls_certificate_type_list_get_packed_length(bcmolt_epon_oam_tls_certificate_type_list *this)
+{
+    return 1 + this->length;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_certificate_type_list_unpack(bcmolt_epon_oam_tls_certificate_type_list *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint8_t i0;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->length > 0) && (this->certificate_types == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"certificate_types\" of struct \"bcmolt_epon_oam_tls_certificate_type_list\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->certificate_types = (bcmolt_epon_oam_tls_certificate_type *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->length * sizeof(bcmolt_epon_oam_tls_certificate_type));
+        }
+    }
+
+    for (i0 = 0; i0 < this->length; i0++)
+    {
+        if (!bcmolt_epon_oam_tls_certificate_type_unpack(&this->certificate_types[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_certificate_type_list_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    uint8_t length;
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_tls_certificate_type) * length);
+    if (!bcmolt_epon_oam_buf_skip(packed, length * 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_handshake_pack(bcmolt_epon_oam_tls_handshake *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t preLenFieldPos;
+    uint32_t bytesAfterLenField;
+    if (!bcmolt_epon_oam_tls_handshake_type_pack(this->id, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+    /* skip over length field (we'll fill it in later) */
+    if (!bcmolt_epon_oam_buf_skip(buf, 3))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->id)
+    {
+        case BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_CLIENT_HELLO:
+            {
+                if (!bcmolt_epon_oam_tls_version_pack(&this->u.client_hello.version, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_tls_random_pack(&this->u.client_hello.random, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_tls_session_id_pack(&this->u.client_hello.session_id, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_tls_ciphersuite_list_pack(&this->u.client_hello.cipher_suites, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_tls_compression_list_pack(&this->u.client_hello.compression_methods, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_SERVER_HELLO:
+            {
+                if (!bcmolt_epon_oam_tls_version_pack(&this->u.server_hello.version, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_tls_random_pack(&this->u.server_hello.random, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_tls_session_id_pack(&this->u.server_hello.session_id, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_tls_ciphersuite_pack(this->u.server_hello.ciphersuite, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_tls_compression_method_pack(this->u.server_hello.compression_method, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_CERTIFICATE:
+            {
+                if (!bcmolt_epon_oam_tls_certificate_list_pack(&this->u.certificate.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_CERTIFICATE_REQUEST:
+            {
+                if (!bcmolt_epon_oam_tls_certificate_type_list_pack(&this->u.certificate_request.certificate_types, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_distinguished_name_list_pack(&this->u.certificate_request.certificate_authorities, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_SERVER_HELLO_DONE:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_CERTIFICATE_VERIFY:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.certificate_verify.hash_size))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.certificate_verify.hash_size > 0) && (this->u.certificate_verify.encrypted_hash == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"encrypted_hash\" of struct \"bcmolt_epon_oam_tls_handshake_certificate_verify\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.certificate_verify.encrypted_hash, this->u.certificate_verify.hash_size))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_CLIENT_KEY_EXCHANGE:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.client_key_exchange.size))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.client_key_exchange.size > 0) && (this->u.client_key_exchange.encrypted_pre_master_secret == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"encrypted_pre_master_secret\" of struct \"bcmolt_epon_oam_tls_handshake_client_key_exchange\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.client_key_exchange.encrypted_pre_master_secret, this->u.client_key_exchange.size))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_FINISHED:
+            {
+                if ((this->u.finished.verify_data_count > 0) && (this->u.finished.verify_data == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"verify_data\" of struct \"bcmolt_epon_oam_tls_handshake_finished\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.finished.verify_data, this->u.finished.verify_data_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_HELLO_REQUEST:
+        case BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_SERVER_KEY_EXCHANGE:
+        default:
+            {
+            }
+            break;
+    }
+
+    bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint24_t));
+    if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u24(buf, uint32_t_to_uint24_t(bytesAfterLenField)))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint24_t))))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tls_handshake_get_packed_length(bcmolt_epon_oam_tls_handshake *this)
+{
+    uint32_t count = 4;
+    switch (this->id)
+    {
+        case BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_CLIENT_HELLO:
+            {
+                count += 34 + bcmolt_epon_oam_tls_session_id_get_packed_length(&this->u.client_hello.session_id) + bcmolt_epon_oam_tls_ciphersuite_list_get_packed_length(&this->u.client_hello.cipher_suites) + bcmolt_epon_oam_tls_compression_list_get_packed_length(&this->u.client_hello.compression_methods);
+            }
+            break;
+        case BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_SERVER_HELLO:
+            {
+                count += 37 + bcmolt_epon_oam_tls_session_id_get_packed_length(&this->u.server_hello.session_id);
+            }
+            break;
+        case BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_CERTIFICATE:
+            {
+                count += bcmolt_epon_oam_tls_certificate_list_get_packed_length(&this->u.certificate.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_CERTIFICATE_REQUEST:
+            {
+                count += bcmolt_epon_oam_tls_certificate_type_list_get_packed_length(&this->u.certificate_request.certificate_types) + bcmolt_epon_oam_distinguished_name_list_get_packed_length(&this->u.certificate_request.certificate_authorities);
+            }
+            break;
+        case BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_SERVER_HELLO_DONE:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_CERTIFICATE_VERIFY:
+            {
+                count += 2 + this->u.certificate_verify.hash_size;
+            }
+            break;
+        case BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_CLIENT_KEY_EXCHANGE:
+            {
+                count += 2 + this->u.client_key_exchange.size;
+            }
+            break;
+        case BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_FINISHED:
+            {
+                count += this->u.finished.verify_data_count;
+            }
+            break;
+        case BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_HELLO_REQUEST:
+        case BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_SERVER_KEY_EXCHANGE:
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_handshake_unpack(bcmolt_epon_oam_tls_handshake *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint24_t length = uint32_t_to_uint24_t(0);
+    bcmolt_epon_oam_buf postLenBuf;
+    if (!bcmolt_epon_oam_tls_handshake_type_unpack(&this->id, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u24(buf, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, uint24_t_to_uint32_t(length), buf->curr);
+    switch (this->id)
+    {
+        case BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_CLIENT_HELLO:
+            {
+                if (!bcmolt_epon_oam_tls_version_unpack(&this->u.client_hello.version, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_tls_random_unpack(&this->u.client_hello.random, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_tls_session_id_unpack(&this->u.client_hello.session_id, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_tls_ciphersuite_list_unpack(&this->u.client_hello.cipher_suites, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_tls_compression_list_unpack(&this->u.client_hello.compression_methods, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_SERVER_HELLO:
+            {
+                if (!bcmolt_epon_oam_tls_version_unpack(&this->u.server_hello.version, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_tls_random_unpack(&this->u.server_hello.random, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_tls_session_id_unpack(&this->u.server_hello.session_id, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_tls_ciphersuite_unpack(&this->u.server_hello.ciphersuite, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_tls_compression_method_unpack(&this->u.server_hello.compression_method, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_CERTIFICATE:
+            {
+                if (!bcmolt_epon_oam_tls_certificate_list_unpack(&this->u.certificate.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_CERTIFICATE_REQUEST:
+            {
+                if (!bcmolt_epon_oam_tls_certificate_type_list_unpack(&this->u.certificate_request.certificate_types, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_distinguished_name_list_unpack(&this->u.certificate_request.certificate_authorities, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_SERVER_HELLO_DONE:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_CERTIFICATE_VERIFY:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.certificate_verify.hash_size))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.certificate_verify.hash_size > 0) && (this->u.certificate_verify.encrypted_hash == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"encrypted_hash\" of struct \"bcmolt_epon_oam_tls_handshake_certificate_verify\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.certificate_verify.encrypted_hash = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.certificate_verify.hash_size * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.certificate_verify.encrypted_hash, this->u.certificate_verify.hash_size))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_CLIENT_KEY_EXCHANGE:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.client_key_exchange.size))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.client_key_exchange.size > 0) && (this->u.client_key_exchange.encrypted_pre_master_secret == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"encrypted_pre_master_secret\" of struct \"bcmolt_epon_oam_tls_handshake_client_key_exchange\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.client_key_exchange.encrypted_pre_master_secret = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.client_key_exchange.size * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.client_key_exchange.encrypted_pre_master_secret, this->u.client_key_exchange.size))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_FINISHED:
+            {
+                this->u.finished.verify_data_count = bcmolt_epon_oam_tls_handshake_finished_count_verify_data(&postLenBuf);
+                if ((this->u.finished.verify_data_count > 0) && (this->u.finished.verify_data == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"verify_data\" of struct \"bcmolt_epon_oam_tls_handshake_finished\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.finished.verify_data = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.finished.verify_data_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.finished.verify_data, this->u.finished.verify_data_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_HELLO_REQUEST:
+        case BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_SERVER_KEY_EXCHANGE:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(buf, uint24_t_to_uint32_t(length)))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_handshake_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_tls_handshake_type id;
+    bcmolt_epon_oam_buf postLenBuf;
+    uint24_t length;
+    if (!bcmolt_epon_oam_tls_handshake_type_unpack(&id, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u24(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, uint24_t_to_uint32_t(length), packed->curr);
+    switch (id)
+    {
+        case BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_CLIENT_HELLO:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 32))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_tls_session_id_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_tls_ciphersuite_list_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_tls_compression_list_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_SERVER_HELLO:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 32))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_tls_session_id_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_CERTIFICATE:
+            {
+                if (!bcmolt_epon_oam_tls_certificate_list_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_CERTIFICATE_REQUEST:
+            {
+                if (!bcmolt_epon_oam_tls_certificate_type_list_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_distinguished_name_list_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_SERVER_HELLO_DONE:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_CERTIFICATE_VERIFY:
+            {
+                uint16_t hash_size;
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &hash_size))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * hash_size);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, hash_size * 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_CLIENT_KEY_EXCHANGE:
+            {
+                uint16_t size;
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &size))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * size);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, size * 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_FINISHED:
+            {
+                uint32_t verify_data_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                    {
+                        break;
+                    }
+
+                    verify_data_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(verify_data_elem_count * sizeof(uint8_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_HELLO_REQUEST:
+        case BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_SERVER_KEY_EXCHANGE:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, uint24_t_to_uint32_t(length)))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tls_handshake_finished_count_verify_data(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_record_pack(bcmolt_epon_oam_tls_record *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t preLenFieldPos;
+    uint32_t bytesAfterLenField;
+    if (!bcmolt_epon_oam_tls_content_type_pack(this->content_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_tls_version_pack(&this->version, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+    /* skip over length field (we'll fill it in later) */
+    if (!bcmolt_epon_oam_buf_skip(buf, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->content_type)
+    {
+        case BCMOLT_EPON_OAM_TLS_CONTENT_TYPE_HANDSHAKE:
+            {
+                uint32_t i0;
+                if ((this->u.handshake.handshake_records_count > 0) && (this->u.handshake.handshake_records == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"handshake_records\" of struct \"bcmolt_epon_oam_tls_record_handshake\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i0 = 0; i0 < this->u.handshake.handshake_records_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_tls_handshake_pack(&this->u.handshake.handshake_records[i0], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TLS_CONTENT_TYPE_ALERT:
+        case BCMOLT_EPON_OAM_TLS_CONTENT_TYPE_APPLICATION_DATA:
+        case BCMOLT_EPON_OAM_TLS_CONTENT_TYPE_CHANGE_CIPHER_SPEC:
+        default:
+            {
+            }
+            break;
+    }
+
+    bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint16_t));
+    if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, bytesAfterLenField))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint16_t))))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tls_record_get_packed_length(bcmolt_epon_oam_tls_record *this)
+{
+    uint32_t count = 5;
+    switch (this->content_type)
+    {
+        case BCMOLT_EPON_OAM_TLS_CONTENT_TYPE_HANDSHAKE:
+            {
+                uint32_t i0;
+                if ((this->u.handshake.handshake_records_count > 0) && (this->u.handshake.handshake_records == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"handshake_records_count\" of struct \"bcmolt_epon_oam_tls_record\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return 0;
+                }
+
+                for (i0 = 0; i0 < this->u.handshake.handshake_records_count; i0++)
+                {
+                    count += bcmolt_epon_oam_tls_handshake_get_packed_length(&this->u.handshake.handshake_records[i0]);
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TLS_CONTENT_TYPE_ALERT:
+        case BCMOLT_EPON_OAM_TLS_CONTENT_TYPE_APPLICATION_DATA:
+        case BCMOLT_EPON_OAM_TLS_CONTENT_TYPE_CHANGE_CIPHER_SPEC:
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_record_unpack(bcmolt_epon_oam_tls_record *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint16_t length = 0;
+    bcmolt_epon_oam_buf postLenBuf;
+    if (!bcmolt_epon_oam_tls_content_type_unpack(&this->content_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_tls_version_unpack(&this->version, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, buf->curr);
+    switch (this->content_type)
+    {
+        case BCMOLT_EPON_OAM_TLS_CONTENT_TYPE_HANDSHAKE:
+            {
+                uint32_t i0;
+                this->u.handshake.handshake_records_count = bcmolt_epon_oam_tls_record_handshake_count_handshake_records(&postLenBuf);
+                if ((this->u.handshake.handshake_records_count > 0) && (this->u.handshake.handshake_records == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"handshake_records\" of struct \"bcmolt_epon_oam_tls_record_handshake\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.handshake.handshake_records = (bcmolt_epon_oam_tls_handshake *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.handshake.handshake_records_count * sizeof(bcmolt_epon_oam_tls_handshake));
+                    }
+                }
+
+                for (i0 = 0; i0 < this->u.handshake.handshake_records_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_tls_handshake_unpack(&this->u.handshake.handshake_records[i0], &postLenBuf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TLS_CONTENT_TYPE_ALERT:
+        case BCMOLT_EPON_OAM_TLS_CONTENT_TYPE_APPLICATION_DATA:
+        case BCMOLT_EPON_OAM_TLS_CONTENT_TYPE_CHANGE_CIPHER_SPEC:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(buf, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_record_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_tls_content_type content_type;
+    bcmolt_epon_oam_buf postLenBuf;
+    uint16_t length;
+    if (!bcmolt_epon_oam_tls_content_type_unpack(&content_type, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, packed->curr);
+    switch (content_type)
+    {
+        case BCMOLT_EPON_OAM_TLS_CONTENT_TYPE_HANDSHAKE:
+            {
+                uint32_t handshake_records_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_tls_handshake_scan(&postLenBuf, extra_mem))
+                    {
+                        break;
+                    }
+
+                    handshake_records_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(handshake_records_elem_count * sizeof(bcmolt_epon_oam_tls_handshake));
+            }
+            break;
+        case BCMOLT_EPON_OAM_TLS_CONTENT_TYPE_ALERT:
+        case BCMOLT_EPON_OAM_TLS_CONTENT_TYPE_APPLICATION_DATA:
+        case BCMOLT_EPON_OAM_TLS_CONTENT_TYPE_CHANGE_CIPHER_SPEC:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tls_record_handshake_count_handshake_records(bcmolt_epon_oam_buf *buf)
+{
+    uint32_t count = 0;
+    uint32_t dummy = 0;
+    bcmolt_epon_oam_buf bufClone = *buf;
+    while (BCMOS_TRUE)
+    {
+        if (!bcmolt_epon_oam_tls_handshake_scan(&bufClone, &dummy))
+        {
+            break;
+        }
+
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_eap_tls_message_pack(bcmolt_epon_oam_eap_tls_message *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_tls_flags_pack(this->flags, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((((uint64_t) this->flags & 0x0080) == 0x0080))
+    {
+        if (!bcmolt_epon_oam_buf_write_u32(buf, this->length))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if (((((uint64_t) this->flags & 0x0080) == 0x0080) && (((uint64_t) this->flags & 0x0040) == 0)))
+    {
+        if ((this->tls_records_count > 0) && (this->tls_records == NULL))
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"tls_records\" of struct \"bcmolt_epon_oam_eap_tls_message\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+
+        uint32_t i0;
+        for (i0 = 0; i0 < this->tls_records_count; i0++)
+        {
+            if (!bcmolt_epon_oam_tls_record_pack(&this->tls_records[i0], buf))
+            {
+                return BCMOS_FALSE;
+            }
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_eap_tls_message_get_packed_length(bcmolt_epon_oam_eap_tls_message *this)
+{
+    uint32_t count = 5;
+    uint32_t i0;
+    if ((this->tls_records_count > 0) && (this->tls_records == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"tls_records_count\" of struct \"bcmolt_epon_oam_eap_tls_message\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return 0;
+    }
+
+    for (i0 = 0; i0 < this->tls_records_count; i0++)
+    {
+        count += bcmolt_epon_oam_tls_record_get_packed_length(&this->tls_records[i0]);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_eap_tls_message_unpack(bcmolt_epon_oam_eap_tls_message *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_tls_flags_unpack(&this->flags, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((((uint64_t) this->flags & 0x0080) == 0x0080))
+    {
+        if (!bcmolt_epon_oam_buf_read_u32(buf, &this->length))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if (((((uint64_t) this->flags & 0x0080) == 0x0080) && (((uint64_t) this->flags & 0x0040) == 0)))
+    {
+        this->tls_records_count = bcmolt_epon_oam_eap_tls_message_count_tls_records(buf);
+        if ((this->tls_records_count > 0) && (this->tls_records == NULL))
+        {
+            if (extra_mem == NULL)
+            {
+                bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"tls_records\" of struct \"bcmolt_epon_oam_eap_tls_message\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                return BCMOS_FALSE;
+            }
+            else
+            {
+                this->tls_records = (bcmolt_epon_oam_tls_record *) *extra_mem;
+                *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->tls_records_count * sizeof(bcmolt_epon_oam_tls_record));
+            }
+        }
+
+        uint32_t i0;
+        for (i0 = 0; i0 < this->tls_records_count; i0++)
+        {
+            if (!bcmolt_epon_oam_tls_record_unpack(&this->tls_records[i0], buf, extra_mem))
+            {
+                return BCMOS_FALSE;
+            }
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_eap_tls_message_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    uint32_t tls_records_elem_count = 0;
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    while (BCMOS_TRUE)
+    {
+        if (!bcmolt_epon_oam_tls_record_scan(packed, extra_mem))
+        {
+            break;
+        }
+
+        tls_records_elem_count += 1;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(tls_records_elem_count * sizeof(bcmolt_epon_oam_tls_record));
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_eap_tls_message_count_tls_records(bcmolt_epon_oam_buf *buf)
+{
+    uint32_t count = 0;
+    uint32_t dummy = 0;
+    bcmolt_epon_oam_buf bufClone = *buf;
+    while (BCMOS_TRUE)
+    {
+        if (!bcmolt_epon_oam_tls_record_scan(&bufClone, &dummy))
+        {
+            break;
+        }
+
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_eap_tls_header_pack(bcmolt_epon_oam_eap_tls_header *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_tls_subtype_pack(this->sub_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->sub_type)
+    {
+        case BCMOLT_EPON_OAM_TLS_SUBTYPE_AUTHENTICATION:
+            {
+                if (!bcmolt_epon_oam_eap_tls_message_pack(&this->u.authentication.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_eap_tls_header_get_packed_length(bcmolt_epon_oam_eap_tls_header *this)
+{
+    uint32_t count = 1;
+    switch (this->sub_type)
+    {
+        case BCMOLT_EPON_OAM_TLS_SUBTYPE_AUTHENTICATION:
+            {
+                count += bcmolt_epon_oam_eap_tls_message_get_packed_length(&this->u.authentication.value);
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_eap_tls_header_unpack(bcmolt_epon_oam_eap_tls_header *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_tls_subtype_unpack(&this->sub_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->sub_type)
+    {
+        case BCMOLT_EPON_OAM_TLS_SUBTYPE_AUTHENTICATION:
+            {
+                if (!bcmolt_epon_oam_eap_tls_message_unpack(&this->u.authentication.value, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_eap_tls_header_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_tls_subtype sub_type;
+    if (!bcmolt_epon_oam_tls_subtype_unpack(&sub_type, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (sub_type)
+    {
+        case BCMOLT_EPON_OAM_TLS_SUBTYPE_AUTHENTICATION:
+            {
+                if (!bcmolt_epon_oam_eap_tls_message_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_eap_frame_pack(bcmolt_epon_oam_eap_frame *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t preLenFieldPos;
+    uint32_t bytesAfterLenField;
+    if (!bcmolt_epon_oam_eap_code_pack(this->code, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+    /* skip over length field (we'll fill it in later) */
+    if (!bcmolt_epon_oam_buf_skip(buf, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->code)
+    {
+        case BCMOLT_EPON_OAM_EAP_CODE_REQUEST:
+            {
+                if (!bcmolt_epon_oam_eap_tls_header_pack(&this->u.request.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_EAP_CODE_RESPONSE:
+            {
+                if (!bcmolt_epon_oam_eap_tls_header_pack(&this->u.response.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_EAP_CODE_FAILURE:
+        case BCMOLT_EPON_OAM_EAP_CODE_SUCCESS:
+        default:
+            {
+            }
+            break;
+    }
+
+    bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint16_t));
+    if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, bytesAfterLenField + 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint16_t))))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_eap_frame_get_packed_length(bcmolt_epon_oam_eap_frame *this)
+{
+    uint32_t count = 4;
+    switch (this->code)
+    {
+        case BCMOLT_EPON_OAM_EAP_CODE_REQUEST:
+            {
+                count += bcmolt_epon_oam_eap_tls_header_get_packed_length(&this->u.request.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_EAP_CODE_RESPONSE:
+            {
+                count += bcmolt_epon_oam_eap_tls_header_get_packed_length(&this->u.response.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_EAP_CODE_FAILURE:
+        case BCMOLT_EPON_OAM_EAP_CODE_SUCCESS:
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_eap_frame_unpack(bcmolt_epon_oam_eap_frame *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint16_t length = 0;
+    bcmolt_epon_oam_buf postLenBuf;
+    if (!bcmolt_epon_oam_eap_code_unpack(&this->code, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length - 4, buf->curr);
+    switch (this->code)
+    {
+        case BCMOLT_EPON_OAM_EAP_CODE_REQUEST:
+            {
+                if (!bcmolt_epon_oam_eap_tls_header_unpack(&this->u.request.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_EAP_CODE_RESPONSE:
+            {
+                if (!bcmolt_epon_oam_eap_tls_header_unpack(&this->u.response.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_EAP_CODE_FAILURE:
+        case BCMOLT_EPON_OAM_EAP_CODE_SUCCESS:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(buf, length - 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_eap_frame_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_eap_code code;
+    bcmolt_epon_oam_buf postLenBuf;
+    uint16_t length;
+    if (!bcmolt_epon_oam_eap_code_unpack(&code, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length - 4, packed->curr);
+    switch (code)
+    {
+        case BCMOLT_EPON_OAM_EAP_CODE_REQUEST:
+            {
+                if (!bcmolt_epon_oam_eap_tls_header_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_EAP_CODE_RESPONSE:
+            {
+                if (!bcmolt_epon_oam_eap_tls_header_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_EAP_CODE_FAILURE:
+        case BCMOLT_EPON_OAM_EAP_CODE_SUCCESS:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, length - 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_eapol_pdu_pack(bcmolt_epon_oam_eapol_pdu *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t preLenFieldPos;
+    uint32_t bytesAfterLenField;
+    if (!bcmolt_epon_oam_eapol_type_pack(this->type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+    /* skip over length field (we'll fill it in later) */
+    if (!bcmolt_epon_oam_buf_skip(buf, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->type)
+    {
+        case BCMOLT_EPON_OAM_EAPOL_TYPE_PACKET:
+            {
+                if (!bcmolt_epon_oam_eap_frame_pack(&this->u.packet.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_EAPOL_TYPE_ASF_ALERT:
+        case BCMOLT_EPON_OAM_EAPOL_TYPE_KEY:
+        case BCMOLT_EPON_OAM_EAPOL_TYPE_LOGOFF:
+        case BCMOLT_EPON_OAM_EAPOL_TYPE_MKA:
+        case BCMOLT_EPON_OAM_EAPOL_TYPE_START:
+        default:
+            {
+            }
+            break;
+    }
+
+    bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint16_t));
+    if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, bytesAfterLenField))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint16_t))))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_eapol_pdu_get_packed_length(bcmolt_epon_oam_eapol_pdu *this)
+{
+    uint32_t count = 3;
+    switch (this->type)
+    {
+        case BCMOLT_EPON_OAM_EAPOL_TYPE_PACKET:
+            {
+                count += bcmolt_epon_oam_eap_frame_get_packed_length(&this->u.packet.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_EAPOL_TYPE_ASF_ALERT:
+        case BCMOLT_EPON_OAM_EAPOL_TYPE_KEY:
+        case BCMOLT_EPON_OAM_EAPOL_TYPE_LOGOFF:
+        case BCMOLT_EPON_OAM_EAPOL_TYPE_MKA:
+        case BCMOLT_EPON_OAM_EAPOL_TYPE_START:
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_eapol_pdu_unpack(bcmolt_epon_oam_eapol_pdu *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint16_t length = 0;
+    bcmolt_epon_oam_buf postLenBuf;
+    if (!bcmolt_epon_oam_eapol_type_unpack(&this->type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, buf->curr);
+    switch (this->type)
+    {
+        case BCMOLT_EPON_OAM_EAPOL_TYPE_PACKET:
+            {
+                if (!bcmolt_epon_oam_eap_frame_unpack(&this->u.packet.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_EAPOL_TYPE_ASF_ALERT:
+        case BCMOLT_EPON_OAM_EAPOL_TYPE_KEY:
+        case BCMOLT_EPON_OAM_EAPOL_TYPE_LOGOFF:
+        case BCMOLT_EPON_OAM_EAPOL_TYPE_MKA:
+        case BCMOLT_EPON_OAM_EAPOL_TYPE_START:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(buf, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_eapol_pdu_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_eapol_type type;
+    bcmolt_epon_oam_buf postLenBuf;
+    uint16_t length;
+    if (!bcmolt_epon_oam_eapol_type_unpack(&type, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, packed->curr);
+    switch (type)
+    {
+        case BCMOLT_EPON_OAM_EAPOL_TYPE_PACKET:
+            {
+                if (!bcmolt_epon_oam_eap_frame_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_EAPOL_TYPE_ASF_ALERT:
+        case BCMOLT_EPON_OAM_EAPOL_TYPE_KEY:
+        case BCMOLT_EPON_OAM_EAPOL_TYPE_LOGOFF:
+        case BCMOLT_EPON_OAM_EAPOL_TYPE_MKA:
+        case BCMOLT_EPON_OAM_EAPOL_TYPE_START:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_eapol_protocol_pack(bcmolt_epon_oam_eapol_protocol *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_eapol_version_pack(this->version, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->version)
+    {
+        case BCMOLT_EPON_OAM_EAPOL_VERSION_VERSION2:
+        default:
+            {
+                if (!bcmolt_epon_oam_eapol_pdu_pack(&this->u.def.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_eapol_protocol_get_packed_length(bcmolt_epon_oam_eapol_protocol *this)
+{
+    uint32_t count = 1;
+    switch (this->version)
+    {
+        case BCMOLT_EPON_OAM_EAPOL_VERSION_VERSION2:
+        default:
+            {
+                count += bcmolt_epon_oam_eapol_pdu_get_packed_length(&this->u.def.value);
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_eapol_protocol_unpack(bcmolt_epon_oam_eapol_protocol *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_eapol_version_unpack(&this->version, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->version)
+    {
+        case BCMOLT_EPON_OAM_EAPOL_VERSION_VERSION2:
+        default:
+            {
+                if (!bcmolt_epon_oam_eapol_pdu_unpack(&this->u.def.value, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_eapol_protocol_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_eapol_version version;
+    if (!bcmolt_epon_oam_eapol_version_unpack(&version, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (version)
+    {
+        case BCMOLT_EPON_OAM_EAPOL_VERSION_VERSION2:
+        default:
+            {
+                if (!bcmolt_epon_oam_eapol_pdu_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_vlan_value_pack(bcmolt_epon_oam_vlan_value *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t ret = 0;
+    ret |= ((this->pcp & 0x0007) << 13);
+    ret |= ((this->cfi & 0x0001) << 12);
+    ret |= (this->vid & 0x0FFF);
+    if (!bcmolt_epon_oam_buf_write_u16(buf, ret))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_vlan_value_unpack(bcmolt_epon_oam_vlan_value *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint16_t val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    this->pcp = ((val >> 13) & 0x0007);
+    this->cfi = ((val >> 12) & 0x0001);
+    this->vid = (val & 0x0FFF);
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_vlan_value_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 2);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_itag_value_pack(bcmolt_epon_oam_itag_value *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t ret = 0;
+    ret |= ((this->pcp & 0x0007) << 29);
+    ret |= ((this->dei & 0x0001) << 28);
+    ret |= ((this->uca & 0x0001) << 27);
+    ret |= ((this->res & 0x0007) << 24);
+    ret |= (this->isid & 0x00FFFFFFUL);
+    if (!bcmolt_epon_oam_buf_write_u32(buf, ret))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_itag_value_unpack(bcmolt_epon_oam_itag_value *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint32_t val;
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    this->pcp = ((val >> 29) & 0x0007);
+    this->dei = ((val >> 28) & 0x0001);
+    this->uca = ((val >> 27) & 0x0001);
+    this->res = ((val >> 24) & 0x0007);
+    this->isid = (val & 0x00FFFFFFUL);
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_itag_value_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 4);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_info_tlv_pack(bcmolt_epon_oam_tek_info_tlv *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_tek_info_tlv_type_pack(this->type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->type)
+    {
+        case BCMOLT_EPON_OAM_TEK_INFO_TLV_TYPE_ALARM_REQUEST:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_INFO_TLV_TYPE_EXTENSION_SUPPORT:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.extension_support.version))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_tek_report_modes_pack(this->u.extension_support.report_mode, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_tek_report_modes_pack(this->u.extension_support.preferred_report_mode, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_INFO_TLV_TYPE_KEY:
+        case BCMOLT_EPON_OAM_TEK_INFO_TLV_TYPE_LINK:
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tek_info_tlv_get_packed_length(bcmolt_epon_oam_tek_info_tlv *this)
+{
+    uint32_t count = 1;
+    switch (this->type)
+    {
+        case BCMOLT_EPON_OAM_TEK_INFO_TLV_TYPE_ALARM_REQUEST:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_INFO_TLV_TYPE_EXTENSION_SUPPORT:
+            {
+                count += 3;
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_INFO_TLV_TYPE_KEY:
+        case BCMOLT_EPON_OAM_TEK_INFO_TLV_TYPE_LINK:
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_info_tlv_unpack(bcmolt_epon_oam_tek_info_tlv *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_tek_info_tlv_type_unpack(&this->type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->type)
+    {
+        case BCMOLT_EPON_OAM_TEK_INFO_TLV_TYPE_ALARM_REQUEST:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_INFO_TLV_TYPE_EXTENSION_SUPPORT:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.extension_support.version))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_tek_report_modes_unpack(&this->u.extension_support.report_mode, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_tek_report_modes_unpack(&this->u.extension_support.preferred_report_mode, buf))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_INFO_TLV_TYPE_KEY:
+        case BCMOLT_EPON_OAM_TEK_INFO_TLV_TYPE_LINK:
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_info_tlv_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_tek_info_tlv_type type;
+    if (!bcmolt_epon_oam_tek_info_tlv_type_unpack(&type, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (type)
+    {
+        case BCMOLT_EPON_OAM_TEK_INFO_TLV_TYPE_ALARM_REQUEST:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_INFO_TLV_TYPE_EXTENSION_SUPPORT:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_INFO_TLV_TYPE_KEY:
+        case BCMOLT_EPON_OAM_TEK_INFO_TLV_TYPE_LINK:
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_organization_specific_info_pack(bcmolt_epon_oam_organization_specific_info *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t preLenFieldPos;
+    uint32_t bytesAfterLenField;
+    preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+    /* skip over length field (we'll fill it in later) */
+    if (!bcmolt_epon_oam_buf_skip(buf, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_well_known_oui_pack(this->oui, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->oui)
+    {
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_TEK:
+            {
+                if (!bcmolt_epon_oam_tek_info_tlv_pack(&this->u.tek.tlvs, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_CTC:
+            {
+                uint32_t i0;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.ctc.extension_support))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.ctc.version))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.ctc.supp_version_count > 0) && (this->u.ctc.supp_version == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"supp_version\" of struct \"bcmolt_epon_oam_organization_specific_info_ctc\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i0 = 0; i0 < this->u.ctc.supp_version_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_ctc_oui_version_pair_pack(&this->u.ctc.supp_version[i0], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DPOE:
+            {
+                if (!bcmolt_epon_oam_dpoe_info_tlv_pack(&this->u.dpoe.dpoe_info_tlv, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_BRCM:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DASAN:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_KT:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_PMC:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_SIEPON_A:
+        default:
+            {
+            }
+            break;
+    }
+
+    bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+    if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, bytesAfterLenField + 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_organization_specific_info_get_packed_length(bcmolt_epon_oam_organization_specific_info *this)
+{
+    uint32_t count = 4;
+    switch (this->oui)
+    {
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_TEK:
+            {
+                count += bcmolt_epon_oam_tek_info_tlv_get_packed_length(&this->u.tek.tlvs);
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_CTC:
+            {
+                count += 2 + (4 * this->u.ctc.supp_version_count);
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DPOE:
+            {
+                count += bcmolt_epon_oam_dpoe_info_tlv_get_packed_length(&this->u.dpoe.dpoe_info_tlv);
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_BRCM:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DASAN:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_KT:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_PMC:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_SIEPON_A:
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_organization_specific_info_unpack(bcmolt_epon_oam_organization_specific_info *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint8_t length = 0;
+    bcmolt_epon_oam_buf postLenBuf;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length - 2, buf->curr);
+    if (!bcmolt_epon_oam_well_known_oui_unpack(&this->oui, &postLenBuf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->oui)
+    {
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_TEK:
+            {
+                if (!bcmolt_epon_oam_tek_info_tlv_unpack(&this->u.tek.tlvs, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_CTC:
+            {
+                uint32_t i0;
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.ctc.extension_support))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.ctc.version))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                this->u.ctc.supp_version_count = bcmolt_epon_oam_organization_specific_info_ctc_count_supp_version(&postLenBuf);
+                if ((this->u.ctc.supp_version_count > 0) && (this->u.ctc.supp_version == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"supp_version\" of struct \"bcmolt_epon_oam_organization_specific_info_ctc\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.ctc.supp_version = (bcmolt_epon_oam_ctc_oui_version_pair *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.ctc.supp_version_count * sizeof(bcmolt_epon_oam_ctc_oui_version_pair));
+                    }
+                }
+
+                for (i0 = 0; i0 < this->u.ctc.supp_version_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_ctc_oui_version_pair_unpack(&this->u.ctc.supp_version[i0], &postLenBuf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DPOE:
+            {
+                if (!bcmolt_epon_oam_dpoe_info_tlv_unpack(&this->u.dpoe.dpoe_info_tlv, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_BRCM:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DASAN:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_KT:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_PMC:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_SIEPON_A:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(buf, length - 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_organization_specific_info_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_buf postLenBuf;
+    uint8_t length;
+    bcmolt_epon_oam_well_known_oui oui;
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length - 2, packed->curr);
+    if (!bcmolt_epon_oam_well_known_oui_unpack(&oui, &postLenBuf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (oui)
+    {
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_TEK:
+            {
+                if (!bcmolt_epon_oam_tek_info_tlv_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_CTC:
+            {
+                uint32_t supp_version_elem_count = 0;
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                    {
+                        break;
+                    }
+
+                    supp_version_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(supp_version_elem_count * sizeof(bcmolt_epon_oam_ctc_oui_version_pair));
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DPOE:
+            {
+                if (!bcmolt_epon_oam_dpoe_info_tlv_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_BRCM:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DASAN:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_KT:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_PMC:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_SIEPON_A:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, length - 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_organization_specific_info_ctc_count_supp_version(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 4);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_local_remote_info_pack(bcmolt_epon_oam_local_remote_info *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t preLenFieldPos;
+    uint32_t bytesAfterLenField;
+    preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+    /* skip over length field (we'll fill it in later) */
+    if (!bcmolt_epon_oam_buf_skip(buf, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->oam_version))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->revision))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_local_remote_info_state_pack(this->state, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_local_remote_info_config_pack(this->oam_config, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->max_pdu_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_well_known_oui_pack(this->oui, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write(buf, this->vendor_specific_information, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+    if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, bytesAfterLenField + 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_local_remote_info_unpack(bcmolt_epon_oam_local_remote_info *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint8_t length = 0;
+    bcmolt_epon_oam_buf postLenBuf;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length - 2, buf->curr);
+    if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->oam_version))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->revision))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_local_remote_info_state_unpack(&this->state, &postLenBuf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_local_remote_info_config_unpack(&this->oam_config, &postLenBuf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->max_pdu_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_well_known_oui_unpack(&this->oui, &postLenBuf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->vendor_specific_information, 4))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(buf, length - 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_local_remote_info_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 15);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_info_tlv_base_pack(bcmolt_epon_oam_info_tlv_base *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_info_tlv_type_pack(this->type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->type)
+    {
+        case BCMOLT_EPON_OAM_INFO_TLV_TYPE_ORGANIZATION_SPECIFIC:
+            {
+                if (!bcmolt_epon_oam_organization_specific_info_pack(&this->u.organization_specific.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_INFO_TLV_TYPE_END:
+            {
+                if ((this->u.end.unknown_count > 0) && (this->u.end.unknown == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"unknown\" of struct \"bcmolt_epon_oam_info_tlv_base_end\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.end.unknown, this->u.end.unknown_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_INFO_TLV_TYPE_REMOTE:
+            {
+                if (!bcmolt_epon_oam_local_remote_info_pack(&this->u.remote.info, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_INFO_TLV_TYPE_LOCAL:
+            {
+                if (!bcmolt_epon_oam_local_remote_info_pack(&this->u.local.info, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_info_tlv_base_get_packed_length(bcmolt_epon_oam_info_tlv_base *this)
+{
+    uint32_t count = 1;
+    switch (this->type)
+    {
+        case BCMOLT_EPON_OAM_INFO_TLV_TYPE_ORGANIZATION_SPECIFIC:
+            {
+                count += bcmolt_epon_oam_organization_specific_info_get_packed_length(&this->u.organization_specific.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_INFO_TLV_TYPE_END:
+            {
+                count += this->u.end.unknown_count;
+            }
+            break;
+        case BCMOLT_EPON_OAM_INFO_TLV_TYPE_REMOTE:
+            {
+                count += 15;
+            }
+            break;
+        case BCMOLT_EPON_OAM_INFO_TLV_TYPE_LOCAL:
+            {
+                count += 15;
+            }
+            break;
+        default:
+            {
+                count += 1;
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_info_tlv_base_unpack(bcmolt_epon_oam_info_tlv_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_info_tlv_type_unpack(&this->type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->type)
+    {
+        case BCMOLT_EPON_OAM_INFO_TLV_TYPE_ORGANIZATION_SPECIFIC:
+            {
+                if (!bcmolt_epon_oam_organization_specific_info_unpack(&this->u.organization_specific.value, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_INFO_TLV_TYPE_END:
+            {
+                this->u.end.unknown_count = bcmolt_epon_oam_info_tlv_base_end_count_unknown(buf);
+                if ((this->u.end.unknown_count > 0) && (this->u.end.unknown == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"unknown\" of struct \"bcmolt_epon_oam_info_tlv_base_end\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.end.unknown = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.end.unknown_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.end.unknown, this->u.end.unknown_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_INFO_TLV_TYPE_REMOTE:
+            {
+                if (!bcmolt_epon_oam_local_remote_info_unpack(&this->u.remote.info, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_INFO_TLV_TYPE_LOCAL:
+            {
+                if (!bcmolt_epon_oam_local_remote_info_unpack(&this->u.local.info, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+                uint8_t length = 0;
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, length, buf->curr);
+                if (!bcmolt_epon_oam_buf_skip(buf, length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_info_tlv_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_info_tlv_type type;
+    if (!bcmolt_epon_oam_info_tlv_type_unpack(&type, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (type)
+    {
+        case BCMOLT_EPON_OAM_INFO_TLV_TYPE_ORGANIZATION_SPECIFIC:
+            {
+                if (!bcmolt_epon_oam_organization_specific_info_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_INFO_TLV_TYPE_END:
+            {
+                uint32_t unknown_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                    {
+                        break;
+                    }
+
+                    unknown_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(unknown_elem_count * sizeof(uint8_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_INFO_TLV_TYPE_REMOTE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 15))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_INFO_TLV_TYPE_LOCAL:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 15))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(packed, length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_info_tlv_base_end_count_unknown(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_organization_specific_link_event_base_pack(bcmolt_epon_oam_organization_specific_link_event_base *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t preLenFieldPos;
+    uint32_t bytesAfterLenField;
+    preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+    /* skip over length field (we'll fill it in later) */
+    if (!bcmolt_epon_oam_buf_skip(buf, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_well_known_oui_pack(this->oui, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->oui)
+    {
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_TEK:
+            {
+                if (!bcmolt_epon_oam_tek_alarm_code_pack(this->u.tek.alarm_code, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.tek.raised))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.tek.port))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.tek.link))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.tek.queue))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_tek_alarm_context_pack(this->u.tek.alarm_context, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DPOE:
+            {
+                if (!bcmolt_epon_oam_dpoe_event_base_pack(&this->u.dpoe.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_CTC:
+            {
+                if (!bcmolt_epon_oam_ctc_alarm_entry_pack(&this->u.ctc.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_BRCM:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DASAN:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_KT:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_PMC:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_SIEPON_A:
+        default:
+            {
+            }
+            break;
+    }
+
+    bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+    if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, bytesAfterLenField + 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_organization_specific_link_event_base_get_packed_length(bcmolt_epon_oam_organization_specific_link_event_base *this)
+{
+    uint32_t count = 4;
+    switch (this->oui)
+    {
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_TEK:
+            {
+                count += 9;
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DPOE:
+            {
+                count += bcmolt_epon_oam_dpoe_event_base_get_packed_length(&this->u.dpoe.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_CTC:
+            {
+                count += bcmolt_epon_oam_ctc_alarm_entry_get_packed_length(&this->u.ctc.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_BRCM:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DASAN:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_KT:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_PMC:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_SIEPON_A:
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_organization_specific_link_event_base_unpack(bcmolt_epon_oam_organization_specific_link_event_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint8_t length = 0;
+    bcmolt_epon_oam_buf postLenBuf;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length - 2, buf->curr);
+    if (!bcmolt_epon_oam_well_known_oui_unpack(&this->oui, &postLenBuf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->oui)
+    {
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_TEK:
+            {
+                if (!bcmolt_epon_oam_tek_alarm_code_unpack(&this->u.tek.alarm_code, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_bool(&postLenBuf, &this->u.tek.raised))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.tek.port))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.tek.link))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.tek.queue))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_tek_alarm_context_unpack(&this->u.tek.alarm_context, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DPOE:
+            {
+                if (!bcmolt_epon_oam_dpoe_event_base_unpack(&this->u.dpoe.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_CTC:
+            {
+                if (!bcmolt_epon_oam_ctc_alarm_entry_unpack(&this->u.ctc.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_BRCM:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DASAN:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_KT:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_PMC:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_SIEPON_A:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(buf, length - 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_organization_specific_link_event_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_buf postLenBuf;
+    uint8_t length;
+    bcmolt_epon_oam_well_known_oui oui;
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length - 2, packed->curr);
+    if (!bcmolt_epon_oam_well_known_oui_unpack(&oui, &postLenBuf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (oui)
+    {
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_TEK:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DPOE:
+            {
+                if (!bcmolt_epon_oam_dpoe_event_base_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_CTC:
+            {
+                if (!bcmolt_epon_oam_ctc_alarm_entry_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_BRCM:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DASAN:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_KT:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_PMC:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_SIEPON_A:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, length - 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_link_event_tlv_base_pack(bcmolt_epon_oam_link_event_tlv_base *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_link_event_type_pack(this->type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->type)
+    {
+        case BCMOLT_EPON_OAM_LINK_EVENT_TYPE_END:
+            {
+                if ((this->u.end.unknown_count > 0) && (this->u.end.unknown == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"unknown\" of struct \"bcmolt_epon_oam_link_event_tlv_base_end\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.end.unknown, this->u.end.unknown_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_LINK_EVENT_TYPE_ORGANIZATION_SPECIFIC:
+            {
+                if (!bcmolt_epon_oam_organization_specific_link_event_base_pack(&this->u.organization_specific.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_LINK_EVENT_TYPE_ERRORED_FRAME:
+        case BCMOLT_EPON_OAM_LINK_EVENT_TYPE_ERRORED_FRAME_PERIOD:
+        case BCMOLT_EPON_OAM_LINK_EVENT_TYPE_ERRORED_FRAME_SECONDS_SUMMARY:
+        case BCMOLT_EPON_OAM_LINK_EVENT_TYPE_ERRORED_SYMBOL_PERIOD:
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_link_event_tlv_base_get_packed_length(bcmolt_epon_oam_link_event_tlv_base *this)
+{
+    uint32_t count = 1;
+    switch (this->type)
+    {
+        case BCMOLT_EPON_OAM_LINK_EVENT_TYPE_END:
+            {
+                count += this->u.end.unknown_count;
+            }
+            break;
+        case BCMOLT_EPON_OAM_LINK_EVENT_TYPE_ORGANIZATION_SPECIFIC:
+            {
+                count += bcmolt_epon_oam_organization_specific_link_event_base_get_packed_length(&this->u.organization_specific.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_LINK_EVENT_TYPE_ERRORED_FRAME:
+        case BCMOLT_EPON_OAM_LINK_EVENT_TYPE_ERRORED_FRAME_PERIOD:
+        case BCMOLT_EPON_OAM_LINK_EVENT_TYPE_ERRORED_FRAME_SECONDS_SUMMARY:
+        case BCMOLT_EPON_OAM_LINK_EVENT_TYPE_ERRORED_SYMBOL_PERIOD:
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_link_event_tlv_base_unpack(bcmolt_epon_oam_link_event_tlv_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_link_event_type_unpack(&this->type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->type)
+    {
+        case BCMOLT_EPON_OAM_LINK_EVENT_TYPE_END:
+            {
+                this->u.end.unknown_count = bcmolt_epon_oam_link_event_tlv_base_end_count_unknown(buf);
+                if ((this->u.end.unknown_count > 0) && (this->u.end.unknown == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"unknown\" of struct \"bcmolt_epon_oam_link_event_tlv_base_end\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.end.unknown = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.end.unknown_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.end.unknown, this->u.end.unknown_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_LINK_EVENT_TYPE_ORGANIZATION_SPECIFIC:
+            {
+                if (!bcmolt_epon_oam_organization_specific_link_event_base_unpack(&this->u.organization_specific.value, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_LINK_EVENT_TYPE_ERRORED_FRAME:
+        case BCMOLT_EPON_OAM_LINK_EVENT_TYPE_ERRORED_FRAME_PERIOD:
+        case BCMOLT_EPON_OAM_LINK_EVENT_TYPE_ERRORED_FRAME_SECONDS_SUMMARY:
+        case BCMOLT_EPON_OAM_LINK_EVENT_TYPE_ERRORED_SYMBOL_PERIOD:
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_link_event_tlv_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_link_event_type type;
+    if (!bcmolt_epon_oam_link_event_type_unpack(&type, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (type)
+    {
+        case BCMOLT_EPON_OAM_LINK_EVENT_TYPE_END:
+            {
+                uint32_t unknown_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                    {
+                        break;
+                    }
+
+                    unknown_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(unknown_elem_count * sizeof(uint8_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_LINK_EVENT_TYPE_ORGANIZATION_SPECIFIC:
+            {
+                if (!bcmolt_epon_oam_organization_specific_link_event_base_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_LINK_EVENT_TYPE_ERRORED_FRAME:
+        case BCMOLT_EPON_OAM_LINK_EVENT_TYPE_ERRORED_FRAME_PERIOD:
+        case BCMOLT_EPON_OAM_LINK_EVENT_TYPE_ERRORED_FRAME_SECONDS_SUMMARY:
+        case BCMOLT_EPON_OAM_LINK_EVENT_TYPE_ERRORED_SYMBOL_PERIOD:
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_link_event_tlv_base_end_count_unknown(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_var_descriptor_base_pack(bcmolt_epon_oam_var_descriptor_base *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_var_branch_pack(this->branch, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->branch)
+    {
+        case BCMOLT_EPON_OAM_VAR_BRANCH_END:
+            {
+                if ((this->u.end.unknown_count > 0) && (this->u.end.unknown == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"unknown\" of struct \"bcmolt_epon_oam_var_descriptor_base_end\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.end.unknown, this->u.end.unknown_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_BRANCH_OBJECT:
+            {
+                if (!bcmolt_epon_oam_var_leaf_object_pack(this->u.object.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_BRANCH_PACKAGE:
+            {
+                if (!bcmolt_epon_oam_var_leaf_package_pack(this->u.package.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_BRANCH_NAME_BINDING:
+            {
+                if (!bcmolt_epon_oam_var_leaf_name_binding_pack(this->u.name_binding.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_BRANCH_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_var_leaf_attribute_pack(this->u.attribute.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_BRANCH_ACTION:
+            {
+                if (!bcmolt_epon_oam_var_leaf_action_pack(this->u.action.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.def.leaf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_var_descriptor_base_get_packed_length(bcmolt_epon_oam_var_descriptor_base *this)
+{
+    uint32_t count = 1;
+    switch (this->branch)
+    {
+        case BCMOLT_EPON_OAM_VAR_BRANCH_END:
+            {
+                count += this->u.end.unknown_count;
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_BRANCH_OBJECT:
+            {
+                count += 2;
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_BRANCH_PACKAGE:
+            {
+                count += 2;
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_BRANCH_NAME_BINDING:
+            {
+                count += 2;
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_BRANCH_ATTRIBUTE:
+            {
+                count += 2;
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_BRANCH_ACTION:
+            {
+                count += 2;
+            }
+            break;
+        default:
+            {
+                count += 2;
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_var_descriptor_base_unpack(bcmolt_epon_oam_var_descriptor_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_var_branch_unpack(&this->branch, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->branch)
+    {
+        case BCMOLT_EPON_OAM_VAR_BRANCH_END:
+            {
+                this->u.end.unknown_count = bcmolt_epon_oam_var_descriptor_base_end_count_unknown(buf);
+                if ((this->u.end.unknown_count > 0) && (this->u.end.unknown == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"unknown\" of struct \"bcmolt_epon_oam_var_descriptor_base_end\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.end.unknown = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.end.unknown_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.end.unknown, this->u.end.unknown_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_BRANCH_OBJECT:
+            {
+                if (!bcmolt_epon_oam_var_leaf_object_unpack(&this->u.object.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_BRANCH_PACKAGE:
+            {
+                if (!bcmolt_epon_oam_var_leaf_package_unpack(&this->u.package.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_BRANCH_NAME_BINDING:
+            {
+                if (!bcmolt_epon_oam_var_leaf_name_binding_unpack(&this->u.name_binding.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_BRANCH_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_var_leaf_attribute_unpack(&this->u.attribute.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_BRANCH_ACTION:
+            {
+                if (!bcmolt_epon_oam_var_leaf_action_unpack(&this->u.action.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.def.leaf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_var_descriptor_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_var_branch branch;
+    if (!bcmolt_epon_oam_var_branch_unpack(&branch, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (branch)
+    {
+        case BCMOLT_EPON_OAM_VAR_BRANCH_END:
+            {
+                uint32_t unknown_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                    {
+                        break;
+                    }
+
+                    unknown_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(unknown_elem_count * sizeof(uint8_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_BRANCH_OBJECT:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_BRANCH_PACKAGE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_BRANCH_NAME_BINDING:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_BRANCH_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_BRANCH_ACTION:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_var_descriptor_base_end_count_unknown(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_var_container_base_pack(bcmolt_epon_oam_var_container_base *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_var_branch_pack(this->branch, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->branch)
+    {
+        case BCMOLT_EPON_OAM_VAR_BRANCH_END:
+            {
+                if ((this->u.end.unknown_count > 0) && (this->u.end.unknown == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"unknown\" of struct \"bcmolt_epon_oam_var_container_base_end\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.end.unknown, this->u.end.unknown_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_BRANCH_OBJECT:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (!bcmolt_epon_oam_var_leaf_object_pack(this->u.object.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.object.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.object.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.object.value_count > 0) && (this->u.object.value == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"value\" of struct \"bcmolt_epon_oam_var_container_base_object\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.object.value, this->u.object.value_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_BRANCH_PACKAGE:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (!bcmolt_epon_oam_var_leaf_package_pack(this->u.package.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.package.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.package.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.package.value_count > 0) && (this->u.package.value == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"value\" of struct \"bcmolt_epon_oam_var_container_base_package\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.package.value, this->u.package.value_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_BRANCH_NAME_BINDING:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (!bcmolt_epon_oam_var_leaf_name_binding_pack(this->u.name_binding.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.name_binding.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.name_binding.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.name_binding.value_count > 0) && (this->u.name_binding.value == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"value\" of struct \"bcmolt_epon_oam_var_container_base_name_binding\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.name_binding.value, this->u.name_binding.value_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_BRANCH_ATTRIBUTE:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (!bcmolt_epon_oam_var_leaf_attribute_pack(this->u.attribute.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.attribute.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.attribute.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.attribute.value_count > 0) && (this->u.attribute.value == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"value\" of struct \"bcmolt_epon_oam_var_container_base_attribute\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.attribute.value, this->u.attribute.value_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_BRANCH_ACTION:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (!bcmolt_epon_oam_var_leaf_action_pack(this->u.action.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.action.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.action.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.action.value_count > 0) && (this->u.action.value == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"value\" of struct \"bcmolt_epon_oam_var_container_base_action\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.action.value, this->u.action.value_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.def.leaf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.def.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.def.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_var_container_base_get_packed_length(bcmolt_epon_oam_var_container_base *this)
+{
+    uint32_t count = 1;
+    switch (this->branch)
+    {
+        case BCMOLT_EPON_OAM_VAR_BRANCH_END:
+            {
+                count += this->u.end.unknown_count;
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_BRANCH_OBJECT:
+            {
+                count += 3 + this->u.object.value_count;
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_BRANCH_PACKAGE:
+            {
+                count += 3 + this->u.package.value_count;
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_BRANCH_NAME_BINDING:
+            {
+                count += 3 + this->u.name_binding.value_count;
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_BRANCH_ATTRIBUTE:
+            {
+                count += 3 + this->u.attribute.value_count;
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_BRANCH_ACTION:
+            {
+                count += 3 + this->u.action.value_count;
+            }
+            break;
+        default:
+            {
+                count += 3;
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_var_container_base_unpack(bcmolt_epon_oam_var_container_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_var_branch_unpack(&this->branch, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->branch)
+    {
+        case BCMOLT_EPON_OAM_VAR_BRANCH_END:
+            {
+                this->u.end.unknown_count = bcmolt_epon_oam_var_container_base_end_count_unknown(buf);
+                if ((this->u.end.unknown_count > 0) && (this->u.end.unknown == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"unknown\" of struct \"bcmolt_epon_oam_var_container_base_end\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.end.unknown = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.end.unknown_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.end.unknown, this->u.end.unknown_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_BRANCH_OBJECT:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_var_leaf_object_unpack(&this->u.object.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.object.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.object.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.object.width == 0) ? 0x0080 : this->u.object.width, buf->curr);
+                this->u.object.value_count = bcmolt_epon_oam_var_container_base_object_count_value(&postLenBuf);
+                if ((this->u.object.value_count > 0) && (this->u.object.value == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"value\" of struct \"bcmolt_epon_oam_var_container_base_object\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.object.value = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.object.value_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.object.value, this->u.object.value_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.object.width == 0) ? 0x0080 : this->u.object.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_BRANCH_PACKAGE:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_var_leaf_package_unpack(&this->u.package.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.package.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.package.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.package.width == 0) ? 0x0080 : this->u.package.width, buf->curr);
+                this->u.package.value_count = bcmolt_epon_oam_var_container_base_package_count_value(&postLenBuf);
+                if ((this->u.package.value_count > 0) && (this->u.package.value == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"value\" of struct \"bcmolt_epon_oam_var_container_base_package\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.package.value = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.package.value_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.package.value, this->u.package.value_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.package.width == 0) ? 0x0080 : this->u.package.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_BRANCH_NAME_BINDING:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_var_leaf_name_binding_unpack(&this->u.name_binding.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.name_binding.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.name_binding.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.name_binding.width == 0) ? 0x0080 : this->u.name_binding.width, buf->curr);
+                this->u.name_binding.value_count = bcmolt_epon_oam_var_container_base_name_binding_count_value(&postLenBuf);
+                if ((this->u.name_binding.value_count > 0) && (this->u.name_binding.value == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"value\" of struct \"bcmolt_epon_oam_var_container_base_name_binding\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.name_binding.value = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.name_binding.value_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.name_binding.value, this->u.name_binding.value_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.name_binding.width == 0) ? 0x0080 : this->u.name_binding.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_BRANCH_ATTRIBUTE:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_var_leaf_attribute_unpack(&this->u.attribute.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.attribute.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.attribute.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.attribute.width == 0) ? 0x0080 : this->u.attribute.width, buf->curr);
+                this->u.attribute.value_count = bcmolt_epon_oam_var_container_base_attribute_count_value(&postLenBuf);
+                if ((this->u.attribute.value_count > 0) && (this->u.attribute.value == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"value\" of struct \"bcmolt_epon_oam_var_container_base_attribute\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.attribute.value = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.attribute.value_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.attribute.value, this->u.attribute.value_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.attribute.width == 0) ? 0x0080 : this->u.attribute.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_BRANCH_ACTION:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_var_leaf_action_unpack(&this->u.action.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.action.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.action.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.action.width == 0) ? 0x0080 : this->u.action.width, buf->curr);
+                this->u.action.value_count = bcmolt_epon_oam_var_container_base_action_count_value(&postLenBuf);
+                if ((this->u.action.value_count > 0) && (this->u.action.value == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"value\" of struct \"bcmolt_epon_oam_var_container_base_action\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.action.value = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.action.value_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.action.value, this->u.action.value_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.action.width == 0) ? 0x0080 : this->u.action.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.def.leaf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.def.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.def.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.def.width == 0) ? 0x0080 : this->u.def.width, buf->curr);
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.def.width == 0) ? 0x0080 : this->u.def.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_var_container_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_var_branch branch;
+    if (!bcmolt_epon_oam_var_branch_unpack(&branch, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (branch)
+    {
+        case BCMOLT_EPON_OAM_VAR_BRANCH_END:
+            {
+                uint32_t unknown_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                    {
+                        break;
+                    }
+
+                    unknown_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(unknown_elem_count * sizeof(uint8_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_BRANCH_OBJECT:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                uint32_t value_elem_count = 0;
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                    {
+                        break;
+                    }
+
+                    value_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(value_elem_count * sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_BRANCH_PACKAGE:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                uint32_t value_elem_count = 0;
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                    {
+                        break;
+                    }
+
+                    value_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(value_elem_count * sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_BRANCH_NAME_BINDING:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                uint32_t value_elem_count = 0;
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                    {
+                        break;
+                    }
+
+                    value_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(value_elem_count * sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_BRANCH_ATTRIBUTE:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                uint32_t value_elem_count = 0;
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                    {
+                        break;
+                    }
+
+                    value_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(value_elem_count * sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_VAR_BRANCH_ACTION:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                uint32_t value_elem_count = 0;
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                    {
+                        break;
+                    }
+
+                    value_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(value_elem_count * sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_var_container_base_end_count_unknown(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_var_container_base_object_count_value(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_var_container_base_package_count_value(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_var_container_base_name_binding_count_value(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_var_container_base_attribute_count_value(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_var_container_base_action_count_value(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_object_queue_name_pack(bcmolt_epon_oam_tek_object_queue_name *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->port_number))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->link_number))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->queue_number))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_object_queue_name_unpack(bcmolt_epon_oam_tek_object_queue_name *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->port_number))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->link_number))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->queue_number))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_object_queue_name_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 6);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_object_context_pack(bcmolt_epon_oam_tek_object_context *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t preLenFieldPos;
+    uint32_t bytesAfterLenField;
+    if (!bcmolt_epon_oam_tek_object_type_pack(this->object_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->length >= 0x0080)
+    {
+        bcmolt_epon_oam_buf_write_u8(buf, this->length);
+        return BCMOS_TRUE;
+    }
+
+    preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+    /* skip over length field (we'll fill it in later) */
+    if (!bcmolt_epon_oam_buf_skip(buf, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->object_type)
+    {
+        case BCMOLT_EPON_OAM_TEK_OBJECT_TYPE_LOGICAL_LINK:
+            {
+                if ((this->u.logical_link.link_number_count > 0) && (this->u.logical_link.link_number == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"link_number\" of struct \"bcmolt_epon_oam_tek_object_context_logical_link\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.logical_link.link_number, this->u.logical_link.link_number_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OBJECT_TYPE_QUEUE_NAME:
+            {
+                if (!bcmolt_epon_oam_tek_object_queue_name_pack(&this->u.queue_name.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OBJECT_TYPE_PORT:
+            {
+                if ((this->u.port.port_number_count > 0) && (this->u.port.port_number == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"port_number\" of struct \"bcmolt_epon_oam_tek_object_context_port\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.port.port_number, this->u.port.port_number_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OBJECT_TYPE_ALL_QUEUES:
+            {
+                if (!bcmolt_epon_oam_tek_object_queue_name_pack(&this->u.all_queues.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OBJECT_TYPE_NETWORK_PON:
+            {
+                if ((this->u.network_pon.pon_number_count > 0) && (this->u.network_pon.pon_number == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"pon_number\" of struct \"bcmolt_epon_oam_tek_object_context_network_pon\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.network_pon.pon_number, this->u.network_pon.pon_number_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OBJECT_TYPE_USER_PON:
+            {
+                if ((this->u.user_pon.pon_number_count > 0) && (this->u.user_pon.pon_number == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"pon_number\" of struct \"bcmolt_epon_oam_tek_object_context_user_pon\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.user_pon.pon_number, this->u.user_pon.pon_number_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OBJECT_TYPE_FLOW_DIRECTION:
+            {
+                if (!bcmolt_epon_oam_flow_direction_pack(this->u.flow_direction.direction, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OBJECT_TYPE_BRIDGE:
+            {
+                if ((this->u.bridge.bridge_number_count > 0) && (this->u.bridge.bridge_number == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"bridge_number\" of struct \"bcmolt_epon_oam_tek_object_context_bridge\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.bridge.bridge_number, this->u.bridge.bridge_number_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OBJECT_TYPE_BRIDGE_PORT:
+            {
+                if ((this->u.bridge_port.port_number_count > 0) && (this->u.bridge_port.port_number == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"port_number\" of struct \"bcmolt_epon_oam_tek_object_context_bridge_port\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.bridge_port.port_number, this->u.bridge_port.port_number_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+    if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tek_object_context_get_packed_length(bcmolt_epon_oam_tek_object_context *this)
+{
+    if (this->length >= 0x0080)
+    {
+        return this->length;
+    }
+    else
+    {
+        uint32_t count = 3;
+        switch (this->object_type)
+        {
+            case BCMOLT_EPON_OAM_TEK_OBJECT_TYPE_LOGICAL_LINK:
+                {
+                    count += this->u.logical_link.link_number_count;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_OBJECT_TYPE_QUEUE_NAME:
+                {
+                    count += 6;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_OBJECT_TYPE_PORT:
+                {
+                    count += this->u.port.port_number_count;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_OBJECT_TYPE_ALL_QUEUES:
+                {
+                    count += 6;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_OBJECT_TYPE_NETWORK_PON:
+                {
+                    count += this->u.network_pon.pon_number_count;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_OBJECT_TYPE_USER_PON:
+                {
+                    count += this->u.user_pon.pon_number_count;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_OBJECT_TYPE_FLOW_DIRECTION:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_OBJECT_TYPE_BRIDGE:
+                {
+                    count += this->u.bridge.bridge_number_count;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_OBJECT_TYPE_BRIDGE_PORT:
+                {
+                    count += this->u.bridge_port.port_number_count;
+                }
+                break;
+            default:
+                {
+                }
+                break;
+        }
+
+        return count;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_object_context_unpack(bcmolt_epon_oam_tek_object_context *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    bcmolt_epon_oam_buf postLenBuf;
+    if (!bcmolt_epon_oam_tek_object_type_unpack(&this->object_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->length >= 0x0080)
+    {
+        return BCMOS_TRUE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, (this->length == 0) ? 0x0080 : this->length, buf->curr);
+    switch (this->object_type)
+    {
+        case BCMOLT_EPON_OAM_TEK_OBJECT_TYPE_LOGICAL_LINK:
+            {
+                this->u.logical_link.link_number_count = bcmolt_epon_oam_tek_object_context_logical_link_count_link_number(&postLenBuf);
+                if ((this->u.logical_link.link_number_count > 0) && (this->u.logical_link.link_number == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"link_number\" of struct \"bcmolt_epon_oam_tek_object_context_logical_link\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.logical_link.link_number = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.logical_link.link_number_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.logical_link.link_number, this->u.logical_link.link_number_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OBJECT_TYPE_QUEUE_NAME:
+            {
+                if (!bcmolt_epon_oam_tek_object_queue_name_unpack(&this->u.queue_name.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OBJECT_TYPE_PORT:
+            {
+                this->u.port.port_number_count = bcmolt_epon_oam_tek_object_context_port_count_port_number(&postLenBuf);
+                if ((this->u.port.port_number_count > 0) && (this->u.port.port_number == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"port_number\" of struct \"bcmolt_epon_oam_tek_object_context_port\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.port.port_number = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.port.port_number_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.port.port_number, this->u.port.port_number_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OBJECT_TYPE_ALL_QUEUES:
+            {
+                if (!bcmolt_epon_oam_tek_object_queue_name_unpack(&this->u.all_queues.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OBJECT_TYPE_NETWORK_PON:
+            {
+                this->u.network_pon.pon_number_count = bcmolt_epon_oam_tek_object_context_network_pon_count_pon_number(&postLenBuf);
+                if ((this->u.network_pon.pon_number_count > 0) && (this->u.network_pon.pon_number == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"pon_number\" of struct \"bcmolt_epon_oam_tek_object_context_network_pon\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.network_pon.pon_number = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.network_pon.pon_number_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.network_pon.pon_number, this->u.network_pon.pon_number_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OBJECT_TYPE_USER_PON:
+            {
+                this->u.user_pon.pon_number_count = bcmolt_epon_oam_tek_object_context_user_pon_count_pon_number(&postLenBuf);
+                if ((this->u.user_pon.pon_number_count > 0) && (this->u.user_pon.pon_number == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"pon_number\" of struct \"bcmolt_epon_oam_tek_object_context_user_pon\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.user_pon.pon_number = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.user_pon.pon_number_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.user_pon.pon_number, this->u.user_pon.pon_number_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OBJECT_TYPE_FLOW_DIRECTION:
+            {
+                if (!bcmolt_epon_oam_flow_direction_unpack(&this->u.flow_direction.direction, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OBJECT_TYPE_BRIDGE:
+            {
+                this->u.bridge.bridge_number_count = bcmolt_epon_oam_tek_object_context_bridge_count_bridge_number(&postLenBuf);
+                if ((this->u.bridge.bridge_number_count > 0) && (this->u.bridge.bridge_number == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"bridge_number\" of struct \"bcmolt_epon_oam_tek_object_context_bridge\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.bridge.bridge_number = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.bridge.bridge_number_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.bridge.bridge_number, this->u.bridge.bridge_number_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OBJECT_TYPE_BRIDGE_PORT:
+            {
+                this->u.bridge_port.port_number_count = bcmolt_epon_oam_tek_object_context_bridge_port_count_port_number(&postLenBuf);
+                if ((this->u.bridge_port.port_number_count > 0) && (this->u.bridge_port.port_number == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"port_number\" of struct \"bcmolt_epon_oam_tek_object_context_bridge_port\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.bridge_port.port_number = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.bridge_port.port_number_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.bridge_port.port_number, this->u.bridge_port.port_number_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(buf, (this->length == 0) ? 0x0080 : this->length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_object_context_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_tek_object_type object_type;
+    bcmolt_epon_oam_buf postLenBuf;
+    uint8_t length;
+    if (!bcmolt_epon_oam_tek_object_type_unpack(&object_type, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (length >= 0x0080)
+    {
+        return BCMOS_TRUE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+    switch (object_type)
+    {
+        case BCMOLT_EPON_OAM_TEK_OBJECT_TYPE_LOGICAL_LINK:
+            {
+                uint32_t link_number_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                    {
+                        break;
+                    }
+
+                    link_number_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(link_number_elem_count * sizeof(uint8_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OBJECT_TYPE_QUEUE_NAME:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 6))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OBJECT_TYPE_PORT:
+            {
+                uint32_t port_number_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                    {
+                        break;
+                    }
+
+                    port_number_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(port_number_elem_count * sizeof(uint8_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OBJECT_TYPE_ALL_QUEUES:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 6))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OBJECT_TYPE_NETWORK_PON:
+            {
+                uint32_t pon_number_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                    {
+                        break;
+                    }
+
+                    pon_number_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(pon_number_elem_count * sizeof(uint8_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OBJECT_TYPE_USER_PON:
+            {
+                uint32_t pon_number_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                    {
+                        break;
+                    }
+
+                    pon_number_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(pon_number_elem_count * sizeof(uint8_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OBJECT_TYPE_FLOW_DIRECTION:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OBJECT_TYPE_BRIDGE:
+            {
+                uint32_t bridge_number_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                    {
+                        break;
+                    }
+
+                    bridge_number_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(bridge_number_elem_count * sizeof(uint8_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OBJECT_TYPE_BRIDGE_PORT:
+            {
+                uint32_t port_number_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                    {
+                        break;
+                    }
+
+                    port_number_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(port_number_elem_count * sizeof(uint8_t));
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tek_object_context_logical_link_count_link_number(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tek_object_context_port_count_port_number(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tek_object_context_network_pon_count_pon_number(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tek_object_context_user_pon_count_pon_number(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tek_object_context_bridge_count_bridge_number(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tek_object_context_bridge_port_count_port_number(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_var_descriptor_pack(bcmolt_epon_oam_tek_var_descriptor *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_tek_branch_pack(this->branch, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->branch)
+    {
+        case BCMOLT_EPON_OAM_TEK_BRANCH_END:
+            {
+                if ((this->u.end.unknown_count > 0) && (this->u.end.unknown == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"unknown\" of struct \"bcmolt_epon_oam_tek_var_descriptor_end\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.end.unknown, this->u.end.unknown_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_NAME_BINDING:
+            {
+                if (!bcmolt_epon_oam_tek_object_context_pack(&this->u.name_binding.object_context, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_ATTRIBUTE:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (!bcmolt_epon_oam_tek_leaf_attribute_pack(this->u.attribute.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (((uint64_t) this->u.attribute.leaf == 0x7FE5))
+                {
+                    if (!bcmolt_epon_oam_tek_alarm_code_pack(this->u.attribute.alarm_code, buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_ACTION:
+            {
+                if (!bcmolt_epon_oam_tek_leaf_action_pack(this->u.action.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_OBJECT:
+        case BCMOLT_EPON_OAM_TEK_BRANCH_PACKAGE:
+        default:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.def.leaf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tek_var_descriptor_get_packed_length(bcmolt_epon_oam_tek_var_descriptor *this)
+{
+    uint32_t count = 1;
+    switch (this->branch)
+    {
+        case BCMOLT_EPON_OAM_TEK_BRANCH_END:
+            {
+                count += this->u.end.unknown_count;
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_NAME_BINDING:
+            {
+                count += bcmolt_epon_oam_tek_object_context_get_packed_length(&this->u.name_binding.object_context);
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_ATTRIBUTE:
+            {
+                count += 4;
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_ACTION:
+            {
+                count += 2;
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_OBJECT:
+        case BCMOLT_EPON_OAM_TEK_BRANCH_PACKAGE:
+        default:
+            {
+                count += 2;
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_var_descriptor_unpack(bcmolt_epon_oam_tek_var_descriptor *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_tek_branch_unpack(&this->branch, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->branch)
+    {
+        case BCMOLT_EPON_OAM_TEK_BRANCH_END:
+            {
+                this->u.end.unknown_count = bcmolt_epon_oam_tek_var_descriptor_end_count_unknown(buf);
+                if ((this->u.end.unknown_count > 0) && (this->u.end.unknown == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"unknown\" of struct \"bcmolt_epon_oam_tek_var_descriptor_end\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.end.unknown = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.end.unknown_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.end.unknown, this->u.end.unknown_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_NAME_BINDING:
+            {
+                if (!bcmolt_epon_oam_tek_object_context_unpack(&this->u.name_binding.object_context, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_ATTRIBUTE:
+            {
+                uint8_t width = 0;
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_tek_leaf_attribute_unpack(&this->u.attribute.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (((uint64_t) this->u.attribute.leaf == 0x7FE5))
+                {
+                    if (!bcmolt_epon_oam_buf_read_u8(buf, &width))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, width, buf->curr);
+                if (((uint64_t) this->u.attribute.leaf == 0x7FE5))
+                {
+                    if (!bcmolt_epon_oam_tek_alarm_code_unpack(&this->u.attribute.alarm_code, &postLenBuf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_ACTION:
+            {
+                if (!bcmolt_epon_oam_tek_leaf_action_unpack(&this->u.action.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_OBJECT:
+        case BCMOLT_EPON_OAM_TEK_BRANCH_PACKAGE:
+        default:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.def.leaf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_var_descriptor_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_tek_branch branch;
+    if (!bcmolt_epon_oam_tek_branch_unpack(&branch, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (branch)
+    {
+        case BCMOLT_EPON_OAM_TEK_BRANCH_END:
+            {
+                uint32_t unknown_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                    {
+                        break;
+                    }
+
+                    unknown_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(unknown_elem_count * sizeof(uint8_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_NAME_BINDING:
+            {
+                if (!bcmolt_epon_oam_tek_object_context_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_ATTRIBUTE:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_ACTION:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_OBJECT:
+        case BCMOLT_EPON_OAM_TEK_BRANCH_PACKAGE:
+        default:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tek_var_descriptor_end_count_unknown(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_lue_field_select_entry_pack(bcmolt_epon_oam_lue_field_select_entry *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->layer_select))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->dword_offset))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->field_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->bit_offset))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_lue_field_select_entry_unpack(bcmolt_epon_oam_lue_field_select_entry *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->layer_select))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->dword_offset))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->field_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->bit_offset))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_lue_field_select_entry_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 4);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_onu_rule_clause_pack(bcmolt_epon_oam_tek_onu_rule_clause *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_tek_onu_field_select_pack(this->field_select, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->lookup_value))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_tek_onu_rule_operator_pack(this->op, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_onu_rule_clause_unpack(bcmolt_epon_oam_tek_onu_rule_clause *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_tek_onu_field_select_unpack(&this->field_select, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->lookup_value))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_tek_onu_rule_operator_unpack(&this->op, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_onu_rule_clause_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 10);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_onu_rule_pack(bcmolt_epon_oam_tek_onu_rule *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t i0;
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->direction))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_tek_onu_rule_flags_pack(this->flags, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->port_link))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->queue))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->vid_cos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->reserved))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->precedence))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_tek_onu_rule_action_pack(this->action, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->clauses_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->clauses_count > 0) && (this->clauses == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"clauses\" of struct \"bcmolt_epon_oam_tek_onu_rule\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->clauses_count; i0++)
+    {
+        if (!bcmolt_epon_oam_tek_onu_rule_clause_pack(&this->clauses[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tek_onu_rule_get_packed_length(bcmolt_epon_oam_tek_onu_rule *this)
+{
+    return 10 + (10 * this->clauses_count);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_onu_rule_unpack(bcmolt_epon_oam_tek_onu_rule *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint8_t i0;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->direction))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_tek_onu_rule_flags_unpack(&this->flags, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->port_link))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->queue))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->vid_cos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->reserved))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->precedence))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_tek_onu_rule_action_unpack(&this->action, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->clauses_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->clauses_count > 0) && (this->clauses == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"clauses\" of struct \"bcmolt_epon_oam_tek_onu_rule\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->clauses = (bcmolt_epon_oam_tek_onu_rule_clause *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->clauses_count * sizeof(bcmolt_epon_oam_tek_onu_rule_clause));
+        }
+    }
+
+    for (i0 = 0; i0 < this->clauses_count; i0++)
+    {
+        if (!bcmolt_epon_oam_tek_onu_rule_clause_unpack(&this->clauses[i0], buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_onu_rule_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    uint8_t clauses_count;
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &clauses_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_tek_onu_rule_clause) * clauses_count);
+    if (!bcmolt_epon_oam_buf_skip(packed, clauses_count * 10))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_onu_igmp_vlan_pack(bcmolt_epon_oam_tek_onu_igmp_vlan *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_vlan_tag(buf, this->epon_vlan))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_vlan_tag(buf, this->user_vlan))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->max_allowed_groups))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_onu_igmp_vlan_unpack(bcmolt_epon_oam_tek_onu_igmp_vlan *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_vlan_tag(buf, &this->epon_vlan))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_vlan_tag(buf, &this->user_vlan))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->max_allowed_groups))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_onu_igmp_vlan_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 5);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_vlan_destination_mapping_pack(bcmolt_epon_oam_tek_vlan_destination_mapping *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_vlan_tag(buf, this->vlan_tag))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->link_index))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->queue_index))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_vlan_destination_mapping_unpack(bcmolt_epon_oam_tek_vlan_destination_mapping *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_vlan_tag(buf, &this->vlan_tag))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->link_index))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->queue_index))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_vlan_destination_mapping_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 4);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_firmware_timestamp_pack(bcmolt_epon_oam_tek_firmware_timestamp *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->year))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->month))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->day))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->hour))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->min))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->sec))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_firmware_timestamp_unpack(bcmolt_epon_oam_tek_firmware_timestamp *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->year))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->month))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->day))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->hour))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->min))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->sec))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_firmware_timestamp_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 7);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_rule_entry_pack(bcmolt_epon_oam_rule_entry *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->learning_domain))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->stat))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->right_mask))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_binary_field_select_type_pack(this->binselect, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->binselect)
+    {
+        case BCMOLT_EPON_OAM_BINARY_FIELD_SELECT_TYPE_SA:
+            {
+                if (!bcmolt_epon_oam_binary_entry_mac_pack(&this->u.sa.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BINARY_FIELD_SELECT_TYPE_DA:
+            {
+                if (!bcmolt_epon_oam_binary_entry_mac_pack(&this->u.da.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BINARY_FIELD_SELECT_TYPE_SSM_PLUS_IPDA:
+            {
+                if (!bcmolt_epon_oam_binary_entry_ssm_ip_pack(&this->u.ssm_plus_ipda.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BINARY_FIELD_SELECT_TYPE_PROG_FIELD:
+            {
+                if (!bcmolt_epon_oam_binary_entry_programmable_pack(&this->u.prog_field.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BINARY_FIELD_SELECT_TYPE_CVLAN_VID:
+            {
+                if (!bcmolt_epon_oam_binary_entry_cvid_pack(&this->u.cvlan_vid.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BINARY_FIELD_SELECT_TYPE_SVLAN_VID_CVLAN_VID:
+            {
+                if (!bcmolt_epon_oam_binary_entry_svlan_plus_cvlan_pack(&this->u.svlan_vid_cvlan_vid.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_rule_entry_get_packed_length(bcmolt_epon_oam_rule_entry *this)
+{
+    uint32_t count = 5;
+    switch (this->binselect)
+    {
+        case BCMOLT_EPON_OAM_BINARY_FIELD_SELECT_TYPE_SA:
+            {
+                count += 9;
+            }
+            break;
+        case BCMOLT_EPON_OAM_BINARY_FIELD_SELECT_TYPE_DA:
+            {
+                count += 9;
+            }
+            break;
+        case BCMOLT_EPON_OAM_BINARY_FIELD_SELECT_TYPE_SSM_PLUS_IPDA:
+            {
+                count += 8;
+            }
+            break;
+        case BCMOLT_EPON_OAM_BINARY_FIELD_SELECT_TYPE_PROG_FIELD:
+            {
+                count += 8;
+            }
+            break;
+        case BCMOLT_EPON_OAM_BINARY_FIELD_SELECT_TYPE_CVLAN_VID:
+            {
+                count += 2;
+            }
+            break;
+        case BCMOLT_EPON_OAM_BINARY_FIELD_SELECT_TYPE_SVLAN_VID_CVLAN_VID:
+            {
+                count += 4;
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_rule_entry_unpack(bcmolt_epon_oam_rule_entry *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->learning_domain))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->stat))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->right_mask))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_binary_field_select_type_unpack(&this->binselect, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->binselect)
+    {
+        case BCMOLT_EPON_OAM_BINARY_FIELD_SELECT_TYPE_SA:
+            {
+                if (!bcmolt_epon_oam_binary_entry_mac_unpack(&this->u.sa.value, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BINARY_FIELD_SELECT_TYPE_DA:
+            {
+                if (!bcmolt_epon_oam_binary_entry_mac_unpack(&this->u.da.value, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BINARY_FIELD_SELECT_TYPE_SSM_PLUS_IPDA:
+            {
+                if (!bcmolt_epon_oam_binary_entry_ssm_ip_unpack(&this->u.ssm_plus_ipda.value, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BINARY_FIELD_SELECT_TYPE_PROG_FIELD:
+            {
+                if (!bcmolt_epon_oam_binary_entry_programmable_unpack(&this->u.prog_field.value, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BINARY_FIELD_SELECT_TYPE_CVLAN_VID:
+            {
+                if (!bcmolt_epon_oam_binary_entry_cvid_unpack(&this->u.cvlan_vid.value, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BINARY_FIELD_SELECT_TYPE_SVLAN_VID_CVLAN_VID:
+            {
+                if (!bcmolt_epon_oam_binary_entry_svlan_plus_cvlan_unpack(&this->u.svlan_vid_cvlan_vid.value, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_rule_entry_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_binary_field_select_type binselect;
+    if (!bcmolt_epon_oam_buf_skip(packed, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_binary_field_select_type_unpack(&binselect, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (binselect)
+    {
+        case BCMOLT_EPON_OAM_BINARY_FIELD_SELECT_TYPE_SA:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 9))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BINARY_FIELD_SELECT_TYPE_DA:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 9))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BINARY_FIELD_SELECT_TYPE_SSM_PLUS_IPDA:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BINARY_FIELD_SELECT_TYPE_PROG_FIELD:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BINARY_FIELD_SELECT_TYPE_CVLAN_VID:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_BINARY_FIELD_SELECT_TYPE_SVLAN_VID_CVLAN_VID:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_attribute_value_rule_pack(bcmolt_epon_oam_tek_attribute_value_rule *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_rule_type_pack(this->leaf, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->leaf)
+    {
+        case BCMOLT_EPON_OAM_RULE_TYPE_TERMINATOR:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_RULE_TYPE_HEADER:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.header.priority))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_RULE_TYPE_CLAUSE:
+            {
+                if (!bcmolt_epon_oam_rule_field_select_pack(this->u.clause.field_select, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.clause.field_instance))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.clause.msb_mask))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.clause.lsb_mask))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_rule_operator_pack(this->u.clause.operator, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.clause.match_value_count > 0) && (this->u.clause.match_value == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"match_value\" of struct \"bcmolt_epon_oam_tek_attribute_value_rule_clause\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.clause.match_value, this->u.clause.match_value_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_RULE_TYPE_RESULT:
+            {
+                if (!bcmolt_epon_oam_rule_action_pack(this->u.result.result, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.result.parameter_count > 0) && (this->u.result.parameter == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"parameter\" of struct \"bcmolt_epon_oam_tek_attribute_value_rule_result\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.result.parameter, this->u.result.parameter_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_RULE_TYPE_ENTRY:
+            {
+                if (!bcmolt_epon_oam_rule_entry_pack(&this->u.entry.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tek_attribute_value_rule_get_packed_length(bcmolt_epon_oam_tek_attribute_value_rule *this)
+{
+    uint32_t count = 1;
+    switch (this->leaf)
+    {
+        case BCMOLT_EPON_OAM_RULE_TYPE_TERMINATOR:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_RULE_TYPE_HEADER:
+            {
+                count += 1;
+            }
+            break;
+        case BCMOLT_EPON_OAM_RULE_TYPE_CLAUSE:
+            {
+                count += 5 + this->u.clause.match_value_count;
+            }
+            break;
+        case BCMOLT_EPON_OAM_RULE_TYPE_RESULT:
+            {
+                count += 1 + this->u.result.parameter_count;
+            }
+            break;
+        case BCMOLT_EPON_OAM_RULE_TYPE_ENTRY:
+            {
+                count += bcmolt_epon_oam_rule_entry_get_packed_length(&this->u.entry.value);
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_attribute_value_rule_unpack(bcmolt_epon_oam_tek_attribute_value_rule *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_rule_type_unpack(&this->leaf, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->leaf)
+    {
+        case BCMOLT_EPON_OAM_RULE_TYPE_TERMINATOR:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_RULE_TYPE_HEADER:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.header.priority))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_RULE_TYPE_CLAUSE:
+            {
+                if (!bcmolt_epon_oam_rule_field_select_unpack(&this->u.clause.field_select, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.clause.field_instance))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.clause.msb_mask))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.clause.lsb_mask))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_rule_operator_unpack(&this->u.clause.operator, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                this->u.clause.match_value_count = bcmolt_epon_oam_tek_attribute_value_rule_clause_count_match_value(buf);
+                if ((this->u.clause.match_value_count > 0) && (this->u.clause.match_value == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"match_value\" of struct \"bcmolt_epon_oam_tek_attribute_value_rule_clause\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.clause.match_value = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.clause.match_value_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.clause.match_value, this->u.clause.match_value_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_RULE_TYPE_RESULT:
+            {
+                if (!bcmolt_epon_oam_rule_action_unpack(&this->u.result.result, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                this->u.result.parameter_count = bcmolt_epon_oam_tek_attribute_value_rule_result_count_parameter(buf);
+                if ((this->u.result.parameter_count > 0) && (this->u.result.parameter == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"parameter\" of struct \"bcmolt_epon_oam_tek_attribute_value_rule_result\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.result.parameter = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.result.parameter_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.result.parameter, this->u.result.parameter_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_RULE_TYPE_ENTRY:
+            {
+                if (!bcmolt_epon_oam_rule_entry_unpack(&this->u.entry.value, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_attribute_value_rule_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_rule_type leaf;
+    if (!bcmolt_epon_oam_rule_type_unpack(&leaf, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (leaf)
+    {
+        case BCMOLT_EPON_OAM_RULE_TYPE_TERMINATOR:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_RULE_TYPE_HEADER:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_RULE_TYPE_CLAUSE:
+            {
+                uint32_t match_value_elem_count = 0;
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                    {
+                        break;
+                    }
+
+                    match_value_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(match_value_elem_count * sizeof(uint8_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_RULE_TYPE_RESULT:
+            {
+                uint32_t parameter_elem_count = 0;
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                    {
+                        break;
+                    }
+
+                    parameter_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(parameter_elem_count * sizeof(uint8_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_RULE_TYPE_ENTRY:
+            {
+                if (!bcmolt_epon_oam_rule_entry_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tek_attribute_value_rule_clause_count_match_value(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tek_attribute_value_rule_result_count_parameter(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_uni_shaper_pack(bcmolt_epon_oam_uni_shaper *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->queue_bitmap))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->shape_rate))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->burst_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_uni_shaper_unpack(bcmolt_epon_oam_uni_shaper *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->queue_bitmap))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->shape_rate))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->burst_size))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_uni_shaper_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 10);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_extended_version_number_pack(bcmolt_epon_oam_extended_version_number *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->major))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->minor))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->patch))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_extended_version_number_unpack(bcmolt_epon_oam_extended_version_number *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->major))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->minor))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->patch))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_extended_version_number_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 4);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_extended_load_label_pack(bcmolt_epon_oam_extended_load_label *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_tek_maturity_pack(this->maturity, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_extended_version_number_pack(&this->version, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_extended_load_label_unpack(bcmolt_epon_oam_extended_load_label *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_tek_maturity_unpack(&this->maturity, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_extended_version_number_unpack(&this->version, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_extended_load_label_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 5);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_file_info_firmware_pack(bcmolt_epon_oam_file_info_firmware *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->legacy_version))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_extended_load_label_pack(&this->new_version, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->stream))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->revision))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->crc))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_tek_firmware_timestamp_pack(&this->timestamp, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_file_info_firmware_unpack(bcmolt_epon_oam_file_info_firmware *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->legacy_version))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_extended_load_label_unpack(&this->new_version, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->stream))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->revision))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->crc))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_tek_firmware_timestamp_unpack(&this->timestamp, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_file_info_firmware_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 26);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_file_info_base_pack(bcmolt_epon_oam_file_info_base *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_file_type_pack(this->file_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->file_type)
+    {
+        case BCMOLT_EPON_OAM_FILE_TYPE_BOOT:
+            {
+                if (!bcmolt_epon_oam_file_info_firmware_pack(&this->u.boot.info, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_FILE_TYPE_APP_MAIN:
+            {
+                if (!bcmolt_epon_oam_file_info_firmware_pack(&this->u.app_main.info, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_FILE_TYPE_APP_BACKUP:
+            {
+                if (!bcmolt_epon_oam_file_info_firmware_pack(&this->u.app_backup.info, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_file_info_base_get_packed_length(bcmolt_epon_oam_file_info_base *this)
+{
+    uint32_t count = 1;
+    switch (this->file_type)
+    {
+        case BCMOLT_EPON_OAM_FILE_TYPE_BOOT:
+            {
+                count += 26;
+            }
+            break;
+        case BCMOLT_EPON_OAM_FILE_TYPE_APP_MAIN:
+            {
+                count += 26;
+            }
+            break;
+        case BCMOLT_EPON_OAM_FILE_TYPE_APP_BACKUP:
+            {
+                count += 26;
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_file_info_base_unpack(bcmolt_epon_oam_file_info_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_file_type_unpack(&this->file_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->file_type)
+    {
+        case BCMOLT_EPON_OAM_FILE_TYPE_BOOT:
+            {
+                if (!bcmolt_epon_oam_file_info_firmware_unpack(&this->u.boot.info, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_FILE_TYPE_APP_MAIN:
+            {
+                if (!bcmolt_epon_oam_file_info_firmware_unpack(&this->u.app_main.info, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_FILE_TYPE_APP_BACKUP:
+            {
+                if (!bcmolt_epon_oam_file_info_firmware_unpack(&this->u.app_backup.info, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_file_info_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_file_type file_type;
+    if (!bcmolt_epon_oam_file_type_unpack(&file_type, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (file_type)
+    {
+        case BCMOLT_EPON_OAM_FILE_TYPE_BOOT:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 26))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_FILE_TYPE_APP_MAIN:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 26))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_FILE_TYPE_APP_BACKUP:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 26))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_epoc_bit_load_pack(bcmolt_epon_oam_oam_epoc_bit_load *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->idx))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->value))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_epoc_bit_load_unpack(bcmolt_epon_oam_oam_epoc_bit_load *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->idx))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->value))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_epoc_bit_load_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 2);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_epoc_bit_loading_pack(bcmolt_epon_oam_oam_epoc_bit_loading *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t i0;
+    for (i0 = 0; i0 < 32; i0++)
+    {
+        if (!bcmolt_epon_oam_oam_epoc_bit_load_pack(&this->load[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_epoc_bit_loading_unpack(bcmolt_epon_oam_oam_epoc_bit_loading *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint32_t i0;
+    for (i0 = 0; i0 < 32; i0++)
+    {
+        if (!bcmolt_epon_oam_oam_epoc_bit_load_unpack(&this->load[i0], buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_epoc_bit_loading_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 64);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_epoc_stat_pack(bcmolt_epon_oam_oam_epoc_stat *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->idx))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->value_count > 0) && (this->value == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"value\" of struct \"bcmolt_epon_oam_oam_epoc_stat\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write(buf, this->value, this->value_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_oam_epoc_stat_get_packed_length(bcmolt_epon_oam_oam_epoc_stat *this)
+{
+    return 2 + this->value_count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_epoc_stat_unpack(bcmolt_epon_oam_oam_epoc_stat *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->idx))
+    {
+        return BCMOS_FALSE;
+    }
+
+    this->value_count = bcmolt_epon_oam_oam_epoc_stat_count_value(buf);
+    if ((this->value_count > 0) && (this->value == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"value\" of struct \"bcmolt_epon_oam_oam_epoc_stat\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->value = (uint8_t *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->value_count * sizeof(uint8_t));
+        }
+    }
+
+    if (!bcmolt_epon_oam_buf_read(buf, this->value, this->value_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_epoc_stat_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    uint32_t value_elem_count = 0;
+    if (!bcmolt_epon_oam_buf_skip(packed, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    while (BCMOS_TRUE)
+    {
+        if (!bcmolt_epon_oam_buf_skip(packed, 1))
+        {
+            break;
+        }
+
+        value_elem_count += 1;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(value_elem_count * sizeof(uint8_t));
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_oam_epoc_stat_count_value(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_queue_config_v2priority_pack(bcmolt_epon_oam_tek_queue_config_v2priority *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t i0;
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->level))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->weight))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->queue_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->queue_count > 0) && (this->queue_sizes == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"queue_sizes\" of struct \"bcmolt_epon_oam_tek_queue_config_v2priority\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->queue_count; i0++)
+    {
+        if (!bcmolt_epon_oam_buf_write_u16(buf, this->queue_sizes[i0]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tek_queue_config_v2priority_get_packed_length(bcmolt_epon_oam_tek_queue_config_v2priority *this)
+{
+    return 3 + (2 * this->queue_count);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_queue_config_v2priority_unpack(bcmolt_epon_oam_tek_queue_config_v2priority *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint8_t i0;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->level))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->weight))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->queue_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->queue_count > 0) && (this->queue_sizes == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"queue_sizes\" of struct \"bcmolt_epon_oam_tek_queue_config_v2priority\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->queue_sizes = (uint16_t *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->queue_count * sizeof(uint16_t));
+        }
+    }
+
+    for (i0 = 0; i0 < this->queue_count; i0++)
+    {
+        if (!bcmolt_epon_oam_buf_read_u16(buf, &this->queue_sizes[i0]))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_queue_config_v2priority_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    uint8_t queue_count;
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &queue_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint16_t) * queue_count);
+    if (!bcmolt_epon_oam_buf_skip(packed, queue_count * 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_queue_config_v2base_pack(bcmolt_epon_oam_tek_queue_config_v2base *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_tek_queue_config_v2subtype_pack(this->subtype, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->subtype)
+    {
+        case BCMOLT_EPON_OAM_TEK_QUEUE_CONFIG_V2SUBTYPE_HEADER:
+            {
+                if (!bcmolt_epon_oam_tek_report_mode_pack(this->u.header.report_config, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_QUEUE_CONFIG_V2SUBTYPE_LINK:
+            {
+                uint8_t i0;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.link.priority_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.link.priority_count > 0) && (this->u.link.priorities == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"priorities\" of struct \"bcmolt_epon_oam_tek_queue_config_v2base_link\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i0 = 0; i0 < this->u.link.priority_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_tek_queue_config_v2priority_pack(&this->u.link.priorities[i0], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_QUEUE_CONFIG_V2SUBTYPE_PORT:
+            {
+                uint8_t i1;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.port.priority_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.port.priority_count > 0) && (this->u.port.priorities == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"priorities\" of struct \"bcmolt_epon_oam_tek_queue_config_v2base_port\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i1 = 0; i1 < this->u.port.priority_count; i1++)
+                {
+                    if (!bcmolt_epon_oam_tek_queue_config_v2priority_pack(&this->u.port.priorities[i1], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_QUEUE_CONFIG_V2SUBTYPE_TERMINATOR:
+            {
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tek_queue_config_v2base_get_packed_length(bcmolt_epon_oam_tek_queue_config_v2base *this)
+{
+    uint32_t count = 1;
+    switch (this->subtype)
+    {
+        case BCMOLT_EPON_OAM_TEK_QUEUE_CONFIG_V2SUBTYPE_HEADER:
+            {
+                count += 1;
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_QUEUE_CONFIG_V2SUBTYPE_LINK:
+            {
+                uint32_t i0;
+                count += 1;
+                if ((this->u.link.priority_count > 0) && (this->u.link.priorities == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"priority_count\" of struct \"bcmolt_epon_oam_tek_queue_config_v2base\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return 0;
+                }
+
+                for (i0 = 0; i0 < this->u.link.priority_count; i0++)
+                {
+                    count += bcmolt_epon_oam_tek_queue_config_v2priority_get_packed_length(&this->u.link.priorities[i0]);
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_QUEUE_CONFIG_V2SUBTYPE_PORT:
+            {
+                uint32_t i1;
+                count += 1;
+                if ((this->u.port.priority_count > 0) && (this->u.port.priorities == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"priority_count\" of struct \"bcmolt_epon_oam_tek_queue_config_v2base\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return 0;
+                }
+
+                for (i1 = 0; i1 < this->u.port.priority_count; i1++)
+                {
+                    count += bcmolt_epon_oam_tek_queue_config_v2priority_get_packed_length(&this->u.port.priorities[i1]);
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_QUEUE_CONFIG_V2SUBTYPE_TERMINATOR:
+            {
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_queue_config_v2base_unpack(bcmolt_epon_oam_tek_queue_config_v2base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_tek_queue_config_v2subtype_unpack(&this->subtype, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->subtype)
+    {
+        case BCMOLT_EPON_OAM_TEK_QUEUE_CONFIG_V2SUBTYPE_HEADER:
+            {
+                if (!bcmolt_epon_oam_tek_report_mode_unpack(&this->u.header.report_config, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_QUEUE_CONFIG_V2SUBTYPE_LINK:
+            {
+                uint8_t i0;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.link.priority_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.link.priority_count > 0) && (this->u.link.priorities == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"priorities\" of struct \"bcmolt_epon_oam_tek_queue_config_v2base_link\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.link.priorities = (bcmolt_epon_oam_tek_queue_config_v2priority *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.link.priority_count * sizeof(bcmolt_epon_oam_tek_queue_config_v2priority));
+                    }
+                }
+
+                for (i0 = 0; i0 < this->u.link.priority_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_tek_queue_config_v2priority_unpack(&this->u.link.priorities[i0], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_QUEUE_CONFIG_V2SUBTYPE_PORT:
+            {
+                uint8_t i1;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.port.priority_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.port.priority_count > 0) && (this->u.port.priorities == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"priorities\" of struct \"bcmolt_epon_oam_tek_queue_config_v2base_port\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.port.priorities = (bcmolt_epon_oam_tek_queue_config_v2priority *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.port.priority_count * sizeof(bcmolt_epon_oam_tek_queue_config_v2priority));
+                    }
+                }
+
+                for (i1 = 0; i1 < this->u.port.priority_count; i1++)
+                {
+                    if (!bcmolt_epon_oam_tek_queue_config_v2priority_unpack(&this->u.port.priorities[i1], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_QUEUE_CONFIG_V2SUBTYPE_TERMINATOR:
+            {
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_queue_config_v2base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_tek_queue_config_v2subtype subtype;
+    if (!bcmolt_epon_oam_tek_queue_config_v2subtype_unpack(&subtype, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (subtype)
+    {
+        case BCMOLT_EPON_OAM_TEK_QUEUE_CONFIG_V2SUBTYPE_HEADER:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_QUEUE_CONFIG_V2SUBTYPE_LINK:
+            {
+                uint8_t priority_count;
+                uint8_t i0;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &priority_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_tek_queue_config_v2priority) * priority_count);
+                for (i0 = 0; i0 < priority_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_tek_queue_config_v2priority_scan(packed, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_QUEUE_CONFIG_V2SUBTYPE_PORT:
+            {
+                uint8_t priority_count;
+                uint8_t i1;
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &priority_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_tek_queue_config_v2priority) * priority_count);
+                for (i1 = 0; i1 < priority_count; i1++)
+                {
+                    if (!bcmolt_epon_oam_tek_queue_config_v2priority_scan(packed, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_QUEUE_CONFIG_V2SUBTYPE_TERMINATOR:
+            {
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_sequence_number_pack(bcmolt_epon_oam_tek_sequence_number *this, bcmolt_epon_oam_buf *buf)
+{
+    uint16_t ret = 0;
+    ret |= ((this->end_of_sequence & 0x0001) << 15);
+    ret |= (this->sequence_number & 0x7FFF);
+    if (!bcmolt_epon_oam_buf_write_u16(buf, ret))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_sequence_number_unpack(bcmolt_epon_oam_tek_sequence_number *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint16_t val;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &val))
+    {
+        return BCMOS_FALSE;
+    }
+
+    this->end_of_sequence = ((val >> 15) & 0x0001);
+    this->sequence_number = (val & 0x7FFF);
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_sequence_number_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 2);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_onu_clock_transport_config_pack(bcmolt_epon_oam_onu_clock_transport_config *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_clock_transport_key_pack(this->key, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_bool(buf, this->re_init))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_bool(buf, this->tod_enable))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_bool(buf, this->one_pps_enable))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_s32(buf, this->one_pps_offset))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->round_trip_time))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->one_pps_half_period))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_onu_clock_transport_config_unpack(bcmolt_epon_oam_onu_clock_transport_config *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_clock_transport_key_unpack(&this->key, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_bool(buf, &this->re_init))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_bool(buf, &this->tod_enable))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_bool(buf, &this->one_pps_enable))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_s32(buf, &this->one_pps_offset))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->round_trip_time))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->one_pps_half_period))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_onu_clock_transport_config_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 16);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_mcast_domain_port_info_pack(bcmolt_epon_oam_oam_mcast_domain_port_info *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->port))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->group_limit))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->fc_limit))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->action))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->up_epon_vid))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->up_uni_vid))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->up_link))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->dnq))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->upq))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_mcast_domain_port_info_unpack(bcmolt_epon_oam_oam_mcast_domain_port_info *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->port))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->group_limit))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->fc_limit))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->action))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->up_epon_vid))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->up_uni_vid))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->up_link))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->dnq))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->upq))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_mcast_domain_port_info_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 11);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_mcast_domain_info_pack(bcmolt_epon_oam_oam_mcast_domain_info *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t i0;
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->dn_link))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_domain_option_pack(this->options, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_forward_qualifier_pack(this->fwd_qual, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->reserved))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->action))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->dn_epon_vid))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->dn_uni_vid))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->num_port))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->num_port > 0) && (this->port_info == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"port_info\" of struct \"bcmolt_epon_oam_oam_mcast_domain_info\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->num_port; i0++)
+    {
+        if (!bcmolt_epon_oam_oam_mcast_domain_port_info_pack(&this->port_info[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_oam_mcast_domain_info_get_packed_length(bcmolt_epon_oam_oam_mcast_domain_info *this)
+{
+    return 12 + (11 * this->num_port);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_mcast_domain_info_unpack(bcmolt_epon_oam_oam_mcast_domain_info *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint8_t i0;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->dn_link))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_domain_option_unpack(&this->options, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_forward_qualifier_unpack(&this->fwd_qual, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->reserved))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->action))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->dn_epon_vid))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->dn_uni_vid))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->num_port))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->num_port > 0) && (this->port_info == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"port_info\" of struct \"bcmolt_epon_oam_oam_mcast_domain_info\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->port_info = (bcmolt_epon_oam_oam_mcast_domain_port_info *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->num_port * sizeof(bcmolt_epon_oam_oam_mcast_domain_port_info));
+        }
+    }
+
+    for (i0 = 0; i0 < this->num_port; i0++)
+    {
+        if (!bcmolt_epon_oam_oam_mcast_domain_port_info_unpack(&this->port_info[i0], buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_mcast_domain_info_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    uint8_t num_port;
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &num_port))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_oam_mcast_domain_port_info) * num_port);
+    if (!bcmolt_epon_oam_buf_skip(packed, num_port * 11))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_mcast_domain_record_pack(bcmolt_epon_oam_oam_mcast_domain_record *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t i0;
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->num_domains))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->num_domains > 0) && (this->domain == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"domain\" of struct \"bcmolt_epon_oam_oam_mcast_domain_record\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->num_domains; i0++)
+    {
+        if (!bcmolt_epon_oam_oam_mcast_domain_info_pack(&this->domain[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_oam_mcast_domain_record_get_packed_length(bcmolt_epon_oam_oam_mcast_domain_record *this)
+{
+    uint32_t count = 1;
+    uint32_t i0;
+    if ((this->num_domains > 0) && (this->domain == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"num_domains\" of struct \"bcmolt_epon_oam_oam_mcast_domain_record\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return 0;
+    }
+
+    for (i0 = 0; i0 < this->num_domains; i0++)
+    {
+        count += bcmolt_epon_oam_oam_mcast_domain_info_get_packed_length(&this->domain[i0]);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_mcast_domain_record_unpack(bcmolt_epon_oam_oam_mcast_domain_record *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint8_t i0;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->num_domains))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->num_domains > 0) && (this->domain == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"domain\" of struct \"bcmolt_epon_oam_oam_mcast_domain_record\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->domain = (bcmolt_epon_oam_oam_mcast_domain_info *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->num_domains * sizeof(bcmolt_epon_oam_oam_mcast_domain_info));
+        }
+    }
+
+    for (i0 = 0; i0 < this->num_domains; i0++)
+    {
+        if (!bcmolt_epon_oam_oam_mcast_domain_info_unpack(&this->domain[i0], buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_mcast_domain_record_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    uint8_t num_domains;
+    uint8_t i0;
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &num_domains))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_oam_mcast_domain_info) * num_domains);
+    for (i0 = 0; i0 < num_domains; i0++)
+    {
+        if (!bcmolt_epon_oam_oam_mcast_domain_info_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_attribute_value_pack(bcmolt_epon_oam_tek_attribute_value *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t preLenFieldPos;
+    uint32_t bytesAfterLenField;
+    if (!bcmolt_epon_oam_tek_leaf_attribute_pack(this->leaf, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->width >= 0x0080)
+    {
+        bcmolt_epon_oam_buf_write_u8(buf, this->width);
+        return BCMOS_TRUE;
+    }
+
+    preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+    /* skip over length field (we'll fill it in later) */
+    if (!bcmolt_epon_oam_buf_skip(buf, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->leaf)
+    {
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LUE_FIELD_SELECT:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.lue_field_select.idx))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_lue_field_select_entry_pack(&this->u.lue_field_select.def, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAMES_TX_OK:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.std_mac_frames_tx_ok.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_SINGLE_COLL_FRAMES:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.std_mac_single_coll_frames.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_MULTIPLE_COLL_FRAMES:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.std_mac_multiple_coll_frames.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAMES_RX_OK:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.std_mac_frames_rx_ok.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FCS_ERR:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.std_mac_fcs_err.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_ALIGN_ERR:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.std_mac_align_err.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_OCTETS_TX_OK:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.std_mac_octets_tx_ok.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_LATE_COLLISIONS:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.std_mac_late_collisions.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_EXCESSIVE_COLLISIONS:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.std_mac_excessive_collisions.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_OCTETS_RX_OK:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.std_mac_octets_rx_ok.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_MCAST_FRAMES_TX_OK:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.std_mac_mcast_frames_tx_ok.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_BCAST_FRAMES_TX_OK:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.std_mac_bcast_frames_tx_ok.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_MCAST_FRAMES_RX_OK:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.std_mac_mcast_frames_rx_ok.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_BCAST_FRAMES_RX_OK:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.std_mac_bcast_frames_rx_ok.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_IN_RANGE_LEN_ERR:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.std_mac_in_range_len_err.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAME_TOO_LONG:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.std_mac_frame_too_long.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_ENABLE_STATUS:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.std_mac_enable_status.enabled))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_PHY_SYMBOL_ERR_DURING_CARRIER:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.std_phy_symbol_err_during_carrier.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_PAUSE_TX:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.std_mac_ctrl_pause_tx.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_PAUSE_RX:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.std_mac_ctrl_pause_rx.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_OAM_LOCAL_ERR_FRAME_SECS_EVENT:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.std_oam_local_err_frame_secs_event.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_OAM_EMUL_CRC8ERR:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.std_oam_emul_crc8err.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_MAC_CTRL_FRAMES_TX:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.std_mpcp_mac_ctrl_frames_tx.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_MAC_CTRL_FRAMES_RX:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.std_mpcp_mac_ctrl_frames_rx.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_TX_REG_ACK:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.std_mpcp_tx_reg_ack.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_TX_REG_REQUEST:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.std_mpcp_tx_reg_request.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_TX_REPORT:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.std_mpcp_tx_report.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_RX_GATE:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.std_mpcp_rx_gate.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_RX_REGISTER:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.std_mpcp_rx_register.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DYN_LEARN_TBL_SIZE:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.dyn_learn_tbl_size.table_size))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DYN_LEARN_AGE_LIMIT:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.dyn_learn_age_limit.age_limit))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_UNICAST_FRAMES:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.rx_unicast_frames.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_UNICAST_FRAMES:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.tx_unicast_frames.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME_TOO_SHORT:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.rx_frame_too_short.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME64:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.rx_frame64.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME65TO127:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.rx_frame65to127.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME128TO255:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.rx_frame128to255.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME256TO511:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.rx_frame256to511.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME512TO1023:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.rx_frame512to1023.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME1024TO1518:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.rx_frame1024to1518.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME1519PLUS:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.rx_frame1519plus.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME64:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.tx_frame64.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME65TO127:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.tx_frame65to127.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME128TO255:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.tx_frame128to255.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME256TO511:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.tx_frame256to511.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME512TO1023:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.tx_frame512to1023.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME1024TO1518:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.tx_frame1024to1518.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME1519PLUS:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.tx_frame1519plus.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_DELAY_THRESHOLD:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.tx_delay_threshold.delay_threshold))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_DELAY:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.tx_delay.delay))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAMES_DROPPED:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.tx_frames_dropped.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_BYTES_DROPPED:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.tx_bytes_dropped.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_BYTES_DELAYED:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.tx_bytes_delayed.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_BYTES_UNUSED:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.tx_bytes_unused.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_DELAY_THRESHOLD:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.rx_delay_threshold.delay_threshold))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_DELAY:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.rx_delay.delay))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAMES_DROPPED:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.rx_frames_dropped.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_BYTES_DROPPED:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.rx_bytes_dropped.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_BYTES_DELAYED:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.rx_bytes_delayed.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_STAT_THRESHOLD:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.port_stat_threshold.statistic_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.port_stat_threshold.rising_threshold))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.port_stat_threshold.falling_threshold))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LINK_STAT_THRESHOLD:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.link_stat_threshold.statistic_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.link_stat_threshold.rising_threshold))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.link_stat_threshold.falling_threshold))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ENCRYPT_KEY_EXPIRY_TIME:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.encrypt_key_expiry_time.time))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LEN_ERROR_DISCARD:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.len_error_discard.len_error_discard))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DYN_MAC_TBL:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_REPORT_THRESHOLDS:
+            {
+                uint32_t i0;
+                if ((this->u.report_thresholds.thresholds_count > 0) && (this->u.report_thresholds.thresholds == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"thresholds\" of struct \"bcmolt_epon_oam_tek_attribute_value_report_thresholds\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i0 = 0; i0 < this->u.report_thresholds.thresholds_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.report_thresholds.thresholds[i0]))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_VLAN_ETHERTYPE:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.vlan_ethertype.vlan_ether_type))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.vlan_ethertype.use_for_upstream))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.vlan_ethertype.use_for_downstream))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_CAPABILITY:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.port_capability.current_caps))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.port_capability.physical_caps))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_NEW_DN_FILTER_TBL:
+            {
+                uint32_t i1;
+                if ((this->u.new_dn_filter_tbl.rules_count > 0) && (this->u.new_dn_filter_tbl.rules == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"rules\" of struct \"bcmolt_epon_oam_tek_attribute_value_new_dn_filter_tbl\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i1 = 0; i1 < this->u.new_dn_filter_tbl.rules_count; i1++)
+                {
+                    if (!bcmolt_epon_oam_tek_onu_rule_pack(&this->u.new_dn_filter_tbl.rules[i1], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_NEW_UP_FILTER_TBL:
+            {
+                uint32_t i2;
+                if ((this->u.new_up_filter_tbl.rules_count > 0) && (this->u.new_up_filter_tbl.rules == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"rules\" of struct \"bcmolt_epon_oam_tek_attribute_value_new_up_filter_tbl\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i2 = 0; i2 < this->u.new_up_filter_tbl.rules_count; i2++)
+                {
+                    if (!bcmolt_epon_oam_tek_onu_rule_pack(&this->u.new_up_filter_tbl.rules[i2], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ARP_REPLICATE_DEST:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.arp_replicate_dest.destination_bitmap))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LACP_DEST:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.lacp_dest.destination_bitmap))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ONU_IGMP_VLAN:
+            {
+                uint8_t i3;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_igmp_vlan.action_for_unman_grp))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_igmp_vlan.vlans_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.onu_igmp_vlan.vlans_count > 0) && (this->u.onu_igmp_vlan.vlans == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vlans\" of struct \"bcmolt_epon_oam_tek_attribute_value_onu_igmp_vlan\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i3 = 0; i3 < this->u.onu_igmp_vlan.vlans_count; i3++)
+                {
+                    if (!bcmolt_epon_oam_tek_onu_igmp_vlan_pack(&this->u.onu_igmp_vlan.vlans[i3], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DYN_LEARNING_MODE:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.dyn_learning_mode.learning_mode))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MIN_MAC_LIMIT:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.min_mac_limit.limit))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ONU_AGGREGATE_LIMIT:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_aggregate_limit.limit))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_NVS_SCRATCHPAD:
+            {
+                if ((this->u.nvs_scratchpad.data_count > 0) && (this->u.nvs_scratchpad.data == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"data\" of struct \"bcmolt_epon_oam_tek_attribute_value_nvs_scratchpad\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.nvs_scratchpad.data, this->u.nvs_scratchpad.data_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FLOOD_UNKNOWN:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.flood_unknown.flood_unknown_opt))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LOCAL_SWITCHING:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.local_switching.local_switch_opt))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DOWN_BURST_TOLL:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.down_burst_toll.down_burst_toll_opt))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FEC_MODE:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.fec_mode.downstream_fec))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.fec_mode.upstream_fec))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POWER_MON_TEMPERATURE:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.power_mon_temperature.temperature))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POWER_MON_VCC:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.power_mon_vcc.vcc))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POWER_MON_TX_BIAS:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.power_mon_tx_bias.bias))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POWER_MON_TX_POWER:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.power_mon_tx_power.power))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POWER_MON_RX_POWER:
+            {
+                if (!bcmolt_epon_oam_buf_write_u64(buf, this->u.power_mon_rx_power.power))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_NETWORK_PON_MAP:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.network_pon_map.network_epon_ports_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.network_pon_map.network_epon_ports_count > 0) && (this->u.network_pon_map.network_epon_ports == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"network_epon_ports\" of struct \"bcmolt_epon_oam_tek_attribute_value_network_pon_map\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.network_pon_map.network_epon_ports, this->u.network_pon_map.network_epon_ports_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PSSTATE:
+            {
+                if (!bcmolt_epon_oam_onu_psstate_pack(this->u.psstate.state, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_SLE_MODE:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.sle_mode.field_select))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LEARN_TABLE_MODE:
+            {
+                if (!bcmolt_epon_oam_tek_learn_table_mode_pack(this->u.learn_table_mode.learn_table_mode, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TRANSCEIVER_SIGNAL_DETECT:
+            {
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.transceiver_signal_detect.signal_detect))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_CROSSBAR_CONFIG:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.crossbar_config.user_port_to_network_port_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.crossbar_config.user_port_to_network_port_count > 0) && (this->u.crossbar_config.user_port_to_network_port == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"user_port_to_network_port\" of struct \"bcmolt_epon_oam_tek_attribute_value_crossbar_config\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.crossbar_config.user_port_to_network_port, this->u.crossbar_config.user_port_to_network_port_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TRANSCEIVER_BURST_ACTIVITY:
+            {
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.transceiver_burst_activity.burst_activity))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_CONTROL_PORT:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.control_port.network_port))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_VLAN_DESTINATIONS:
+            {
+                uint8_t i4;
+                if (!bcmolt_epon_oam_tek_vlan_destination_match_mode_pack(this->u.vlan_destinations.match_mode, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_tek_vlan_destination_flags_pack(this->u.vlan_destinations.flags, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.vlan_destinations.default_link_index))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.vlan_destinations.default_queue_index))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.vlan_destinations.mappings_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.vlan_destinations.mappings_count > 0) && (this->u.vlan_destinations.mappings == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"mappings\" of struct \"bcmolt_epon_oam_tek_attribute_value_vlan_destinations\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.vlan_destinations.mappings_count > 16)
+                {
+                    return BCMOS_FALSE;
+                }
+
+                for (i4 = 0; i4 < this->u.vlan_destinations.mappings_count; i4++)
+                {
+                    if (!bcmolt_epon_oam_tek_vlan_destination_mapping_pack(&this->u.vlan_destinations.mappings[i4], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ENCRYPTION_MODE:
+            {
+                if (!bcmolt_epon_oam_tek_encryption_mode_pack(this->u.encryption_mode.mode, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_tek_encryption_options_pack(this->u.encryption_mode.options, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_INTERNAL_VERSION:
+            {
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.internal_version.stream))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.internal_version.revision))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FIRMWARE_TIMESTAMP:
+            {
+                if (!bcmolt_epon_oam_tek_firmware_timestamp_pack(&this->u.firmware_timestamp.timestamp, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ONU_RULE:
+            {
+                if (!bcmolt_epon_oam_tek_attribute_value_rule_pack(&this->u.onu_rule.rule, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POLICER:
+            {
+                if (!bcmolt_epon_oam_flow_direction_pack(this->u.policer.direction, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.policer.policer_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.policer.burst_size))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.policer.traffic_rate))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_UNI_SHAPER:
+            {
+                uint8_t i5;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.uni_shaper.number_of_shapers))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.uni_shaper.number_of_shapers > 0) && (this->u.uni_shaper.uni_shaper == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"uni_shaper\" of struct \"bcmolt_epon_oam_tek_attribute_value_uni_shaper\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i5 = 0; i5 < this->u.uni_shaper.number_of_shapers; i5++)
+                {
+                    if (!bcmolt_epon_oam_uni_shaper_pack(&this->u.uni_shaper.uni_shaper[i5], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EXT_FIRMWARE_VERSION:
+            {
+                if (!bcmolt_epon_oam_extended_load_label_pack(&this->u.ext_firmware_version.version, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ENCRYPTION_KEY:
+            {
+                if (!bcmolt_epon_oam_direction_pack(this->u.encryption_key.direction, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.encryption_key.key_index))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.encryption_key.key_length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.encryption_key.key_length > 0) && (this->u.encryption_key.key_data == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"key_data\" of struct \"bcmolt_epon_oam_tek_attribute_value_encryption_key\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.encryption_key.key_data, this->u.encryption_key.key_length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FILE_INFO:
+            {
+                if (!bcmolt_epon_oam_file_info_base_pack(&this->u.file_info.file_info, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_SYSTEM_RULE_OPTIONS:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.system_rule_options.system_rule_options))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MTU:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.mtu.mtu))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_NVS_STATE:
+            {
+                if (!bcmolt_epon_oam_nvs_state_pack(this->u.nvs_state.state, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_QUEUEPRIMAP:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.queueprimap.priority_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.queueprimap.priority_count > 0) && (this->u.queueprimap.priority_map == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"priority_map\" of struct \"bcmolt_epon_oam_tek_attribute_value_queueprimap\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.queueprimap.priority_map, this->u.queueprimap.priority_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_DOWN_BIT_LOADING:
+            {
+                if (!bcmolt_epon_oam_oam_epoc_bit_loading_pack(&this->u.epoc_down_bit_loading.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UP_BIT_LOADING:
+            {
+                if (!bcmolt_epon_oam_oam_epoc_bit_loading_pack(&this->u.epoc_up_bit_loading.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_SDM_PHASE:
+            {
+                if (!bcmolt_epon_oam_oam_epoc_stat_pack(&this->u.epoc_sdm_phase.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_SDM_AMPLITUDE:
+            {
+                if (!bcmolt_epon_oam_oam_epoc_stat_pack(&this->u.epoc_sdm_amplitude.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_SDM_QUANTIZER:
+            {
+                if (!bcmolt_epon_oam_oam_epoc_stat_pack(&this->u.epoc_sdm_quantizer.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UNUSED0:
+            {
+                if (!bcmolt_epon_oam_oam_epoc_stat_pack(&this->u.epoc_unused0.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UNUSED1:
+            {
+                if (!bcmolt_epon_oam_oam_epoc_stat_pack(&this->u.epoc_unused1.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UNUSED2:
+            {
+                if (!bcmolt_epon_oam_oam_epoc_stat_pack(&this->u.epoc_unused2.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UNUSED3:
+            {
+                if (!bcmolt_epon_oam_oam_epoc_stat_pack(&this->u.epoc_unused3.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UNUSED4:
+            {
+                if (!bcmolt_epon_oam_oam_epoc_stat_pack(&this->u.epoc_unused4.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_QUEUE_CONFIG_V2:
+            {
+                if (!bcmolt_epon_oam_tek_queue_config_v2base_pack(&this->u.queue_config_v2.queue_config, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FEATURE_SET:
+            {
+                if (!bcmolt_epon_oam_tek_feature_set_pack(this->u.feature_set.feature_set, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_PHY_TYPE:
+            {
+                if (!bcmolt_epon_oam_std_phy_type_pack(this->u.std_phy_type.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_SEQUENCE_NUMBER:
+            {
+                if (!bcmolt_epon_oam_tek_sequence_number_pack(&this->u.sequence_number.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MPCP_CLOCK:
+            {
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.mpcp_clock.pulse_time))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MPCP_CLOCK_COMPENSATE:
+            {
+                if (!bcmolt_epon_oam_onu_clock_transport_config_pack(&this->u.mpcp_clock_compensate.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MCAST_GLOBAL_CONFIG:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.mcast_global_config.robustness_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.mcast_global_config.lmq_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.mcast_global_config.fast_leave_enable))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_mcast_snoop_mode_pack(this->u.mcast_global_config.mode, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ipmc_global_options_pack(this->u.mcast_global_config.options, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MCAST_DOMAIN_CONFIG:
+            {
+                if (!bcmolt_epon_oam_oam_mcast_domain_record_pack(&this->u.mcast_domain_config.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ONU_HOLDOVER:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.onu_holdover.time))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_tek_holdover_flags_pack(this->u.onu_holdover.flags, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ALARM_THRESHOLD:
+            {
+                if (!bcmolt_epon_oam_tek_alarm_code_pack(this->u.alarm_threshold.alarm_code, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.alarm_threshold.raise_threshold))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.alarm_threshold.clear_threshold))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FAILSAFE:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.failsafe.count_of_failsafe_mech))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_bool(buf, this->u.failsafe.failsafe_state))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_STATS_THRESHOLD_INTERVAL:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.port_stats_threshold_interval.statistic_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.port_stats_threshold_interval.interval))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LINK_STATS_THRESHOLD_INTERVAL:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.link_stats_threshold_interval.statistic_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.link_stats_threshold_interval.interval))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_DUPLEX_STATUS:
+            {
+                if (!bcmolt_epon_oam_mac_duplex_status_pack(this->u.std_mac_duplex_status.status, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_ADMIN_STATE:
+            {
+                if (!bcmolt_epon_oam_autonegotiate_admin_state_pack(this->u.std_auto_neg_admin_state.state, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAU_MEDIA_AVAIL:
+            {
+                if (!bcmolt_epon_oam_mau_media_available_pack(this->u.std_mau_media_avail.status, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MDI_CROSSOVER:
+            {
+                if (!bcmolt_epon_oam_mdi_mode_pack(this->u.mdi_crossover.mode, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_ADDR:
+            {
+                if (!bcmolt_epon_oam_buf_write_mac_address(buf, this->u.std_mac_addr.address))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_BCAST_RATE_LIMIT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_BYPASS_SOFT_LEARN:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_CHIP_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_CHIP_VERSION:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_COS_TRANSLATION:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_CTL_VLAN_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DN_FILTER_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EGRESS_SHAPING:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EXTENDED_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FIRMWARE_VER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_IGMP_FRAME_RATE_LIMIT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_INGRESS_POLICING:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_IPMC_UNKNOWN_LEAVE_FWD:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_JEDEC_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LEARN_MODE_RULE_UPDATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LINK_STATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LUE_FIELD_SELECT_LIST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MCAST_GROUP_INFO:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_DYNAMIC_ENTRIES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_VLAN_MEMBERSHIP:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_VLAN_POLICY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PRI_ENQUEUING:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_SEARCH_CONFIG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STATIC_MAC_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_AD_SELECT_ABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_AD_TECH:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_AUTO_CFG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_LOCAL_SELECT_ABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_LOCAL_TECH:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_REMOTE_SIG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_RX_SELECT_ABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_RX_TECH:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_FEC_ABILITY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_FEC_CORRECTED_BLOCKS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_FEC_MODE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_FEC_UNCORRECTABLE_BLOCKS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CAPABILITIES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CARRIER_SENSE_ERR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_COLLISION_FRAMES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_FRAMES_RX:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_FRAMES_TX:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_FUNCS_SUPPORTED:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_PAUSE_DELAY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_UNSUPPORTED_OP_RX:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FR_EXCESSIVE_DEFERRAL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAMES_DEFERRED:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAMES_LOST_MAC_RX_ERR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAMES_LOST_MAC_TX_ERR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_MCAST_ADDR_LIST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_MCAST_RX_STATUS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_OUT_OF_RANGE_LEN_ERR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_PROMISCUOUS_STATUS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_TX_ENABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_DISCOVERY_TIMEOUT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_DISCOVERY_WINDOW_TX:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_RX_REG_ACK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_RX_REG_REQUEST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_RX_REPORT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_TX_GATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_TX_REGISTER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_PHY_ADMIN_STATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_PHY_TYPE_LIST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_UP_FILTER_TBL:
+        default:
+            {
+            }
+            break;
+    }
+
+    bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+    if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tek_attribute_value_get_packed_length(bcmolt_epon_oam_tek_attribute_value *this)
+{
+    if (this->width >= 0x0080)
+    {
+        return this->width;
+    }
+    else
+    {
+        uint32_t count = 3;
+        switch (this->leaf)
+        {
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LUE_FIELD_SELECT:
+                {
+                    count += 5;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAMES_TX_OK:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_SINGLE_COLL_FRAMES:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_MULTIPLE_COLL_FRAMES:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAMES_RX_OK:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FCS_ERR:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_ALIGN_ERR:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_OCTETS_TX_OK:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_LATE_COLLISIONS:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_EXCESSIVE_COLLISIONS:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_OCTETS_RX_OK:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_MCAST_FRAMES_TX_OK:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_BCAST_FRAMES_TX_OK:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_MCAST_FRAMES_RX_OK:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_BCAST_FRAMES_RX_OK:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_IN_RANGE_LEN_ERR:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAME_TOO_LONG:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_ENABLE_STATUS:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_PHY_SYMBOL_ERR_DURING_CARRIER:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_PAUSE_TX:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_PAUSE_RX:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_OAM_LOCAL_ERR_FRAME_SECS_EVENT:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_OAM_EMUL_CRC8ERR:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_MAC_CTRL_FRAMES_TX:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_MAC_CTRL_FRAMES_RX:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_TX_REG_ACK:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_TX_REG_REQUEST:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_TX_REPORT:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_RX_GATE:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_RX_REGISTER:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DYN_LEARN_TBL_SIZE:
+                {
+                    count += 2;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DYN_LEARN_AGE_LIMIT:
+                {
+                    count += 2;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_UNICAST_FRAMES:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_UNICAST_FRAMES:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME_TOO_SHORT:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME64:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME65TO127:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME128TO255:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME256TO511:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME512TO1023:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME1024TO1518:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME1519PLUS:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME64:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME65TO127:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME128TO255:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME256TO511:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME512TO1023:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME1024TO1518:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME1519PLUS:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_DELAY_THRESHOLD:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_DELAY:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAMES_DROPPED:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_BYTES_DROPPED:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_BYTES_DELAYED:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_BYTES_UNUSED:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_DELAY_THRESHOLD:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_DELAY:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAMES_DROPPED:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_BYTES_DROPPED:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_BYTES_DELAYED:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_STAT_THRESHOLD:
+                {
+                    count += 10;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LINK_STAT_THRESHOLD:
+                {
+                    count += 10;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ENCRYPT_KEY_EXPIRY_TIME:
+                {
+                    count += 2;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LEN_ERROR_DISCARD:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DYN_MAC_TBL:
+                {
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_REPORT_THRESHOLDS:
+                {
+                    count += (2 * this->u.report_thresholds.thresholds_count);
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_VLAN_ETHERTYPE:
+                {
+                    count += 4;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_CAPABILITY:
+                {
+                    count += 4;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_NEW_DN_FILTER_TBL:
+                {
+                    uint32_t i0;
+                    if ((this->u.new_dn_filter_tbl.rules_count > 0) && (this->u.new_dn_filter_tbl.rules == NULL))
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"rules_count\" of struct \"bcmolt_epon_oam_tek_attribute_value\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return 0;
+                    }
+
+                    for (i0 = 0; i0 < this->u.new_dn_filter_tbl.rules_count; i0++)
+                    {
+                        count += bcmolt_epon_oam_tek_onu_rule_get_packed_length(&this->u.new_dn_filter_tbl.rules[i0]);
+                    }
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_NEW_UP_FILTER_TBL:
+                {
+                    uint32_t i1;
+                    if ((this->u.new_up_filter_tbl.rules_count > 0) && (this->u.new_up_filter_tbl.rules == NULL))
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"rules_count\" of struct \"bcmolt_epon_oam_tek_attribute_value\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return 0;
+                    }
+
+                    for (i1 = 0; i1 < this->u.new_up_filter_tbl.rules_count; i1++)
+                    {
+                        count += bcmolt_epon_oam_tek_onu_rule_get_packed_length(&this->u.new_up_filter_tbl.rules[i1]);
+                    }
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ARP_REPLICATE_DEST:
+                {
+                    count += 2;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LACP_DEST:
+                {
+                    count += 2;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ONU_IGMP_VLAN:
+                {
+                    count += 2 + (5 * this->u.onu_igmp_vlan.vlans_count);
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DYN_LEARNING_MODE:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MIN_MAC_LIMIT:
+                {
+                    count += 2;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ONU_AGGREGATE_LIMIT:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_NVS_SCRATCHPAD:
+                {
+                    count += this->u.nvs_scratchpad.data_count;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FLOOD_UNKNOWN:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LOCAL_SWITCHING:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DOWN_BURST_TOLL:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FEC_MODE:
+                {
+                    count += 2;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POWER_MON_TEMPERATURE:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POWER_MON_VCC:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POWER_MON_TX_BIAS:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POWER_MON_TX_POWER:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POWER_MON_RX_POWER:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_NETWORK_PON_MAP:
+                {
+                    count += 1 + this->u.network_pon_map.network_epon_ports_count;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PSSTATE:
+                {
+                    count += 2;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_SLE_MODE:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LEARN_TABLE_MODE:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TRANSCEIVER_SIGNAL_DETECT:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_CROSSBAR_CONFIG:
+                {
+                    count += 1 + this->u.crossbar_config.user_port_to_network_port_count;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TRANSCEIVER_BURST_ACTIVITY:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_CONTROL_PORT:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_VLAN_DESTINATIONS:
+                {
+                    count += 5 + (4 * this->u.vlan_destinations.mappings_count);
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ENCRYPTION_MODE:
+                {
+                    count += 3;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_INTERNAL_VERSION:
+                {
+                    count += 8;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FIRMWARE_TIMESTAMP:
+                {
+                    count += 7;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ONU_RULE:
+                {
+                    count += bcmolt_epon_oam_tek_attribute_value_rule_get_packed_length(&this->u.onu_rule.rule);
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POLICER:
+                {
+                    count += 10;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_UNI_SHAPER:
+                {
+                    count += 1 + (10 * this->u.uni_shaper.number_of_shapers);
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EXT_FIRMWARE_VERSION:
+                {
+                    count += 5;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ENCRYPTION_KEY:
+                {
+                    count += 3 + this->u.encryption_key.key_length;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FILE_INFO:
+                {
+                    count += bcmolt_epon_oam_file_info_base_get_packed_length(&this->u.file_info.file_info);
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_SYSTEM_RULE_OPTIONS:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MTU:
+                {
+                    count += 2;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_NVS_STATE:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_QUEUEPRIMAP:
+                {
+                    count += 1 + this->u.queueprimap.priority_count;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_DOWN_BIT_LOADING:
+                {
+                    count += 64;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UP_BIT_LOADING:
+                {
+                    count += 64;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_SDM_PHASE:
+                {
+                    count += bcmolt_epon_oam_oam_epoc_stat_get_packed_length(&this->u.epoc_sdm_phase.value);
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_SDM_AMPLITUDE:
+                {
+                    count += bcmolt_epon_oam_oam_epoc_stat_get_packed_length(&this->u.epoc_sdm_amplitude.value);
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_SDM_QUANTIZER:
+                {
+                    count += bcmolt_epon_oam_oam_epoc_stat_get_packed_length(&this->u.epoc_sdm_quantizer.value);
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UNUSED0:
+                {
+                    count += bcmolt_epon_oam_oam_epoc_stat_get_packed_length(&this->u.epoc_unused0.value);
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UNUSED1:
+                {
+                    count += bcmolt_epon_oam_oam_epoc_stat_get_packed_length(&this->u.epoc_unused1.value);
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UNUSED2:
+                {
+                    count += bcmolt_epon_oam_oam_epoc_stat_get_packed_length(&this->u.epoc_unused2.value);
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UNUSED3:
+                {
+                    count += bcmolt_epon_oam_oam_epoc_stat_get_packed_length(&this->u.epoc_unused3.value);
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UNUSED4:
+                {
+                    count += bcmolt_epon_oam_oam_epoc_stat_get_packed_length(&this->u.epoc_unused4.value);
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_QUEUE_CONFIG_V2:
+                {
+                    count += bcmolt_epon_oam_tek_queue_config_v2base_get_packed_length(&this->u.queue_config_v2.queue_config);
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FEATURE_SET:
+                {
+                    count += 2;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_PHY_TYPE:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_SEQUENCE_NUMBER:
+                {
+                    count += 2;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MPCP_CLOCK:
+                {
+                    count += 4;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MPCP_CLOCK_COMPENSATE:
+                {
+                    count += 16;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MCAST_GLOBAL_CONFIG:
+                {
+                    count += 6;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MCAST_DOMAIN_CONFIG:
+                {
+                    count += bcmolt_epon_oam_oam_mcast_domain_record_get_packed_length(&this->u.mcast_domain_config.value);
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ONU_HOLDOVER:
+                {
+                    count += 2;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ALARM_THRESHOLD:
+                {
+                    count += 9;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FAILSAFE:
+                {
+                    count += 2;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_STATS_THRESHOLD_INTERVAL:
+                {
+                    count += 4;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LINK_STATS_THRESHOLD_INTERVAL:
+                {
+                    count += 4;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_DUPLEX_STATUS:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_ADMIN_STATE:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAU_MEDIA_AVAIL:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MDI_CROSSOVER:
+                {
+                    count += 1;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_ADDR:
+                {
+                    count += 6;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_BCAST_RATE_LIMIT:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_BYPASS_SOFT_LEARN:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_CHIP_ID:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_CHIP_VERSION:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_COS_TRANSLATION:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_CTL_VLAN_ID:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DN_FILTER_TBL:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EGRESS_SHAPING:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EXTENDED_ID:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FIRMWARE_VER:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_IGMP_FRAME_RATE_LIMIT:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_INGRESS_POLICING:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_IPMC_UNKNOWN_LEAVE_FWD:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_JEDEC_ID:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LEARN_MODE_RULE_UPDATE:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LINK_STATE:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LUE_FIELD_SELECT_LIST:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MCAST_GROUP_INFO:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_DYNAMIC_ENTRIES:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_VLAN_MEMBERSHIP:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_VLAN_POLICY:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PRI_ENQUEUING:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_SEARCH_CONFIG:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STATIC_MAC_TBL:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_AD_SELECT_ABLE:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_AD_TECH:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_AUTO_CFG:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_ID:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_LOCAL_SELECT_ABLE:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_LOCAL_TECH:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_REMOTE_SIG:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_RX_SELECT_ABLE:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_RX_TECH:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_FEC_ABILITY:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_FEC_CORRECTED_BLOCKS:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_FEC_MODE:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_FEC_UNCORRECTABLE_BLOCKS:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CAPABILITIES:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CARRIER_SENSE_ERR:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_COLLISION_FRAMES:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_FRAMES_RX:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_FRAMES_TX:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_FUNCS_SUPPORTED:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_ID:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_PAUSE_DELAY:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_UNSUPPORTED_OP_RX:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FR_EXCESSIVE_DEFERRAL:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAMES_DEFERRED:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAMES_LOST_MAC_RX_ERR:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAMES_LOST_MAC_TX_ERR:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_ID:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_MCAST_ADDR_LIST:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_MCAST_RX_STATUS:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_OUT_OF_RANGE_LEN_ERR:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_PROMISCUOUS_STATUS:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_TX_ENABLE:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_DISCOVERY_TIMEOUT:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_DISCOVERY_WINDOW_TX:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_RX_REG_ACK:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_RX_REG_REQUEST:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_RX_REPORT:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_TX_GATE:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_TX_REGISTER:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_PHY_ADMIN_STATE:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_PHY_TYPE_LIST:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_UP_FILTER_TBL:
+            default:
+                {
+                }
+                break;
+        }
+
+        return count;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_attribute_value_unpack(bcmolt_epon_oam_tek_attribute_value *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    bcmolt_epon_oam_buf postLenBuf;
+    if (!bcmolt_epon_oam_tek_leaf_attribute_unpack(&this->leaf, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->width))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->width >= 0x0080)
+    {
+        return BCMOS_TRUE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, (this->width == 0) ? 0x0080 : this->width, buf->curr);
+    switch (this->leaf)
+    {
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LUE_FIELD_SELECT:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.lue_field_select.idx))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_lue_field_select_entry_unpack(&this->u.lue_field_select.def, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAMES_TX_OK:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.std_mac_frames_tx_ok.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_SINGLE_COLL_FRAMES:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.std_mac_single_coll_frames.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_MULTIPLE_COLL_FRAMES:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.std_mac_multiple_coll_frames.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAMES_RX_OK:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.std_mac_frames_rx_ok.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FCS_ERR:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.std_mac_fcs_err.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_ALIGN_ERR:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.std_mac_align_err.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_OCTETS_TX_OK:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.std_mac_octets_tx_ok.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_LATE_COLLISIONS:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.std_mac_late_collisions.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_EXCESSIVE_COLLISIONS:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.std_mac_excessive_collisions.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_OCTETS_RX_OK:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.std_mac_octets_rx_ok.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_MCAST_FRAMES_TX_OK:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.std_mac_mcast_frames_tx_ok.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_BCAST_FRAMES_TX_OK:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.std_mac_bcast_frames_tx_ok.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_MCAST_FRAMES_RX_OK:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.std_mac_mcast_frames_rx_ok.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_BCAST_FRAMES_RX_OK:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.std_mac_bcast_frames_rx_ok.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_IN_RANGE_LEN_ERR:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.std_mac_in_range_len_err.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAME_TOO_LONG:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.std_mac_frame_too_long.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_ENABLE_STATUS:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.std_mac_enable_status.enabled))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_PHY_SYMBOL_ERR_DURING_CARRIER:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.std_phy_symbol_err_during_carrier.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_PAUSE_TX:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.std_mac_ctrl_pause_tx.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_PAUSE_RX:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.std_mac_ctrl_pause_rx.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_OAM_LOCAL_ERR_FRAME_SECS_EVENT:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.std_oam_local_err_frame_secs_event.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_OAM_EMUL_CRC8ERR:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.std_oam_emul_crc8err.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_MAC_CTRL_FRAMES_TX:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.std_mpcp_mac_ctrl_frames_tx.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_MAC_CTRL_FRAMES_RX:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.std_mpcp_mac_ctrl_frames_rx.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_TX_REG_ACK:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.std_mpcp_tx_reg_ack.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_TX_REG_REQUEST:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.std_mpcp_tx_reg_request.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_TX_REPORT:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.std_mpcp_tx_report.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_RX_GATE:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.std_mpcp_rx_gate.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_RX_REGISTER:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.std_mpcp_rx_register.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DYN_LEARN_TBL_SIZE:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.dyn_learn_tbl_size.table_size))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DYN_LEARN_AGE_LIMIT:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.dyn_learn_age_limit.age_limit))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_UNICAST_FRAMES:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.rx_unicast_frames.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_UNICAST_FRAMES:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.tx_unicast_frames.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME_TOO_SHORT:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.rx_frame_too_short.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME64:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.rx_frame64.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME65TO127:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.rx_frame65to127.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME128TO255:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.rx_frame128to255.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME256TO511:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.rx_frame256to511.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME512TO1023:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.rx_frame512to1023.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME1024TO1518:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.rx_frame1024to1518.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME1519PLUS:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.rx_frame1519plus.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME64:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.tx_frame64.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME65TO127:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.tx_frame65to127.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME128TO255:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.tx_frame128to255.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME256TO511:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.tx_frame256to511.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME512TO1023:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.tx_frame512to1023.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME1024TO1518:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.tx_frame1024to1518.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME1519PLUS:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.tx_frame1519plus.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_DELAY_THRESHOLD:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.tx_delay_threshold.delay_threshold))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_DELAY:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.tx_delay.delay))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAMES_DROPPED:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.tx_frames_dropped.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_BYTES_DROPPED:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.tx_bytes_dropped.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_BYTES_DELAYED:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.tx_bytes_delayed.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_BYTES_UNUSED:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.tx_bytes_unused.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_DELAY_THRESHOLD:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.rx_delay_threshold.delay_threshold))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_DELAY:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.rx_delay.delay))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAMES_DROPPED:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.rx_frames_dropped.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_BYTES_DROPPED:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.rx_bytes_dropped.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_BYTES_DELAYED:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.rx_bytes_delayed.value))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_STAT_THRESHOLD:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.port_stat_threshold.statistic_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.port_stat_threshold.rising_threshold))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.port_stat_threshold.falling_threshold))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LINK_STAT_THRESHOLD:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.link_stat_threshold.statistic_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.link_stat_threshold.rising_threshold))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.link_stat_threshold.falling_threshold))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ENCRYPT_KEY_EXPIRY_TIME:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.encrypt_key_expiry_time.time))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LEN_ERROR_DISCARD:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.len_error_discard.len_error_discard))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DYN_MAC_TBL:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_REPORT_THRESHOLDS:
+            {
+                uint32_t i0;
+                this->u.report_thresholds.thresholds_count = bcmolt_epon_oam_tek_attribute_value_report_thresholds_count_thresholds(&postLenBuf);
+                if ((this->u.report_thresholds.thresholds_count > 0) && (this->u.report_thresholds.thresholds == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"thresholds\" of struct \"bcmolt_epon_oam_tek_attribute_value_report_thresholds\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.report_thresholds.thresholds = (uint16_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.report_thresholds.thresholds_count * sizeof(uint16_t));
+                    }
+                }
+
+                for (i0 = 0; i0 < this->u.report_thresholds.thresholds_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.report_thresholds.thresholds[i0]))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_VLAN_ETHERTYPE:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.vlan_ethertype.vlan_ether_type))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_bool(&postLenBuf, &this->u.vlan_ethertype.use_for_upstream))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_bool(&postLenBuf, &this->u.vlan_ethertype.use_for_downstream))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_CAPABILITY:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.port_capability.current_caps))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.port_capability.physical_caps))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_NEW_DN_FILTER_TBL:
+            {
+                uint32_t i1;
+                this->u.new_dn_filter_tbl.rules_count = bcmolt_epon_oam_tek_attribute_value_new_dn_filter_tbl_count_rules(&postLenBuf);
+                if ((this->u.new_dn_filter_tbl.rules_count > 0) && (this->u.new_dn_filter_tbl.rules == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"rules\" of struct \"bcmolt_epon_oam_tek_attribute_value_new_dn_filter_tbl\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.new_dn_filter_tbl.rules = (bcmolt_epon_oam_tek_onu_rule *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.new_dn_filter_tbl.rules_count * sizeof(bcmolt_epon_oam_tek_onu_rule));
+                    }
+                }
+
+                for (i1 = 0; i1 < this->u.new_dn_filter_tbl.rules_count; i1++)
+                {
+                    if (!bcmolt_epon_oam_tek_onu_rule_unpack(&this->u.new_dn_filter_tbl.rules[i1], &postLenBuf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_NEW_UP_FILTER_TBL:
+            {
+                uint32_t i2;
+                this->u.new_up_filter_tbl.rules_count = bcmolt_epon_oam_tek_attribute_value_new_up_filter_tbl_count_rules(&postLenBuf);
+                if ((this->u.new_up_filter_tbl.rules_count > 0) && (this->u.new_up_filter_tbl.rules == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"rules\" of struct \"bcmolt_epon_oam_tek_attribute_value_new_up_filter_tbl\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.new_up_filter_tbl.rules = (bcmolt_epon_oam_tek_onu_rule *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.new_up_filter_tbl.rules_count * sizeof(bcmolt_epon_oam_tek_onu_rule));
+                    }
+                }
+
+                for (i2 = 0; i2 < this->u.new_up_filter_tbl.rules_count; i2++)
+                {
+                    if (!bcmolt_epon_oam_tek_onu_rule_unpack(&this->u.new_up_filter_tbl.rules[i2], &postLenBuf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ARP_REPLICATE_DEST:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.arp_replicate_dest.destination_bitmap))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LACP_DEST:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.lacp_dest.destination_bitmap))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ONU_IGMP_VLAN:
+            {
+                uint8_t i3;
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.onu_igmp_vlan.action_for_unman_grp))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.onu_igmp_vlan.vlans_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.onu_igmp_vlan.vlans_count > 0) && (this->u.onu_igmp_vlan.vlans == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vlans\" of struct \"bcmolt_epon_oam_tek_attribute_value_onu_igmp_vlan\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.onu_igmp_vlan.vlans = (bcmolt_epon_oam_tek_onu_igmp_vlan *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.onu_igmp_vlan.vlans_count * sizeof(bcmolt_epon_oam_tek_onu_igmp_vlan));
+                    }
+                }
+
+                for (i3 = 0; i3 < this->u.onu_igmp_vlan.vlans_count; i3++)
+                {
+                    if (!bcmolt_epon_oam_tek_onu_igmp_vlan_unpack(&this->u.onu_igmp_vlan.vlans[i3], &postLenBuf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DYN_LEARNING_MODE:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.dyn_learning_mode.learning_mode))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MIN_MAC_LIMIT:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.min_mac_limit.limit))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ONU_AGGREGATE_LIMIT:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.onu_aggregate_limit.limit))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_NVS_SCRATCHPAD:
+            {
+                this->u.nvs_scratchpad.data_count = bcmolt_epon_oam_tek_attribute_value_nvs_scratchpad_count_data(&postLenBuf);
+                if ((this->u.nvs_scratchpad.data_count > 0) && (this->u.nvs_scratchpad.data == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"data\" of struct \"bcmolt_epon_oam_tek_attribute_value_nvs_scratchpad\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.nvs_scratchpad.data = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.nvs_scratchpad.data_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.nvs_scratchpad.data, this->u.nvs_scratchpad.data_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FLOOD_UNKNOWN:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.flood_unknown.flood_unknown_opt))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LOCAL_SWITCHING:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.local_switching.local_switch_opt))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DOWN_BURST_TOLL:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.down_burst_toll.down_burst_toll_opt))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FEC_MODE:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.fec_mode.downstream_fec))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.fec_mode.upstream_fec))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POWER_MON_TEMPERATURE:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.power_mon_temperature.temperature))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POWER_MON_VCC:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.power_mon_vcc.vcc))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POWER_MON_TX_BIAS:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.power_mon_tx_bias.bias))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POWER_MON_TX_POWER:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.power_mon_tx_power.power))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POWER_MON_RX_POWER:
+            {
+                if (!bcmolt_epon_oam_buf_read_u64(&postLenBuf, &this->u.power_mon_rx_power.power))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_NETWORK_PON_MAP:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.network_pon_map.network_epon_ports_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.network_pon_map.network_epon_ports_count > 0) && (this->u.network_pon_map.network_epon_ports == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"network_epon_ports\" of struct \"bcmolt_epon_oam_tek_attribute_value_network_pon_map\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.network_pon_map.network_epon_ports = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.network_pon_map.network_epon_ports_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.network_pon_map.network_epon_ports, this->u.network_pon_map.network_epon_ports_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PSSTATE:
+            {
+                if (!bcmolt_epon_oam_onu_psstate_unpack(&this->u.psstate.state, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_SLE_MODE:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.sle_mode.field_select))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LEARN_TABLE_MODE:
+            {
+                if (!bcmolt_epon_oam_tek_learn_table_mode_unpack(&this->u.learn_table_mode.learn_table_mode, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TRANSCEIVER_SIGNAL_DETECT:
+            {
+                if (!bcmolt_epon_oam_buf_read_bool(&postLenBuf, &this->u.transceiver_signal_detect.signal_detect))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_CROSSBAR_CONFIG:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.crossbar_config.user_port_to_network_port_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.crossbar_config.user_port_to_network_port_count > 0) && (this->u.crossbar_config.user_port_to_network_port == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"user_port_to_network_port\" of struct \"bcmolt_epon_oam_tek_attribute_value_crossbar_config\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.crossbar_config.user_port_to_network_port = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.crossbar_config.user_port_to_network_port_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.crossbar_config.user_port_to_network_port, this->u.crossbar_config.user_port_to_network_port_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TRANSCEIVER_BURST_ACTIVITY:
+            {
+                if (!bcmolt_epon_oam_buf_read_bool(&postLenBuf, &this->u.transceiver_burst_activity.burst_activity))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_CONTROL_PORT:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.control_port.network_port))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_VLAN_DESTINATIONS:
+            {
+                uint8_t i4;
+                if (!bcmolt_epon_oam_tek_vlan_destination_match_mode_unpack(&this->u.vlan_destinations.match_mode, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_tek_vlan_destination_flags_unpack(&this->u.vlan_destinations.flags, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.vlan_destinations.default_link_index))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.vlan_destinations.default_queue_index))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.vlan_destinations.mappings_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.vlan_destinations.mappings_count > 0) && (this->u.vlan_destinations.mappings == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"mappings\" of struct \"bcmolt_epon_oam_tek_attribute_value_vlan_destinations\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.vlan_destinations.mappings = (bcmolt_epon_oam_tek_vlan_destination_mapping *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.vlan_destinations.mappings_count * sizeof(bcmolt_epon_oam_tek_vlan_destination_mapping));
+                    }
+                }
+
+                if (this->u.vlan_destinations.mappings_count > 16)
+                {
+                    return BCMOS_FALSE;
+                }
+
+                for (i4 = 0; i4 < this->u.vlan_destinations.mappings_count; i4++)
+                {
+                    if (!bcmolt_epon_oam_tek_vlan_destination_mapping_unpack(&this->u.vlan_destinations.mappings[i4], &postLenBuf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ENCRYPTION_MODE:
+            {
+                if (!bcmolt_epon_oam_tek_encryption_mode_unpack(&this->u.encryption_mode.mode, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_tek_encryption_options_unpack(&this->u.encryption_mode.options, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_INTERNAL_VERSION:
+            {
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.internal_version.stream))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.internal_version.revision))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FIRMWARE_TIMESTAMP:
+            {
+                if (!bcmolt_epon_oam_tek_firmware_timestamp_unpack(&this->u.firmware_timestamp.timestamp, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ONU_RULE:
+            {
+                if (!bcmolt_epon_oam_tek_attribute_value_rule_unpack(&this->u.onu_rule.rule, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POLICER:
+            {
+                if (!bcmolt_epon_oam_flow_direction_unpack(&this->u.policer.direction, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.policer.policer_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.policer.burst_size))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.policer.traffic_rate))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_UNI_SHAPER:
+            {
+                uint8_t i5;
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.uni_shaper.number_of_shapers))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.uni_shaper.number_of_shapers > 0) && (this->u.uni_shaper.uni_shaper == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"uni_shaper\" of struct \"bcmolt_epon_oam_tek_attribute_value_uni_shaper\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.uni_shaper.uni_shaper = (bcmolt_epon_oam_uni_shaper *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.uni_shaper.number_of_shapers * sizeof(bcmolt_epon_oam_uni_shaper));
+                    }
+                }
+
+                for (i5 = 0; i5 < this->u.uni_shaper.number_of_shapers; i5++)
+                {
+                    if (!bcmolt_epon_oam_uni_shaper_unpack(&this->u.uni_shaper.uni_shaper[i5], &postLenBuf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EXT_FIRMWARE_VERSION:
+            {
+                if (!bcmolt_epon_oam_extended_load_label_unpack(&this->u.ext_firmware_version.version, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ENCRYPTION_KEY:
+            {
+                if (!bcmolt_epon_oam_direction_unpack(&this->u.encryption_key.direction, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.encryption_key.key_index))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.encryption_key.key_length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.encryption_key.key_length > 0) && (this->u.encryption_key.key_data == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"key_data\" of struct \"bcmolt_epon_oam_tek_attribute_value_encryption_key\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.encryption_key.key_data = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.encryption_key.key_length * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.encryption_key.key_data, this->u.encryption_key.key_length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FILE_INFO:
+            {
+                if (!bcmolt_epon_oam_file_info_base_unpack(&this->u.file_info.file_info, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_SYSTEM_RULE_OPTIONS:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.system_rule_options.system_rule_options))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MTU:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.mtu.mtu))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_NVS_STATE:
+            {
+                if (!bcmolt_epon_oam_nvs_state_unpack(&this->u.nvs_state.state, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_QUEUEPRIMAP:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.queueprimap.priority_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.queueprimap.priority_count > 0) && (this->u.queueprimap.priority_map == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"priority_map\" of struct \"bcmolt_epon_oam_tek_attribute_value_queueprimap\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.queueprimap.priority_map = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.queueprimap.priority_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.queueprimap.priority_map, this->u.queueprimap.priority_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_DOWN_BIT_LOADING:
+            {
+                if (!bcmolt_epon_oam_oam_epoc_bit_loading_unpack(&this->u.epoc_down_bit_loading.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UP_BIT_LOADING:
+            {
+                if (!bcmolt_epon_oam_oam_epoc_bit_loading_unpack(&this->u.epoc_up_bit_loading.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_SDM_PHASE:
+            {
+                if (!bcmolt_epon_oam_oam_epoc_stat_unpack(&this->u.epoc_sdm_phase.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_SDM_AMPLITUDE:
+            {
+                if (!bcmolt_epon_oam_oam_epoc_stat_unpack(&this->u.epoc_sdm_amplitude.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_SDM_QUANTIZER:
+            {
+                if (!bcmolt_epon_oam_oam_epoc_stat_unpack(&this->u.epoc_sdm_quantizer.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UNUSED0:
+            {
+                if (!bcmolt_epon_oam_oam_epoc_stat_unpack(&this->u.epoc_unused0.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UNUSED1:
+            {
+                if (!bcmolt_epon_oam_oam_epoc_stat_unpack(&this->u.epoc_unused1.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UNUSED2:
+            {
+                if (!bcmolt_epon_oam_oam_epoc_stat_unpack(&this->u.epoc_unused2.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UNUSED3:
+            {
+                if (!bcmolt_epon_oam_oam_epoc_stat_unpack(&this->u.epoc_unused3.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UNUSED4:
+            {
+                if (!bcmolt_epon_oam_oam_epoc_stat_unpack(&this->u.epoc_unused4.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_QUEUE_CONFIG_V2:
+            {
+                if (!bcmolt_epon_oam_tek_queue_config_v2base_unpack(&this->u.queue_config_v2.queue_config, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FEATURE_SET:
+            {
+                if (!bcmolt_epon_oam_tek_feature_set_unpack(&this->u.feature_set.feature_set, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_PHY_TYPE:
+            {
+                if (!bcmolt_epon_oam_std_phy_type_unpack(&this->u.std_phy_type.value, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_SEQUENCE_NUMBER:
+            {
+                if (!bcmolt_epon_oam_tek_sequence_number_unpack(&this->u.sequence_number.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MPCP_CLOCK:
+            {
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.mpcp_clock.pulse_time))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MPCP_CLOCK_COMPENSATE:
+            {
+                if (!bcmolt_epon_oam_onu_clock_transport_config_unpack(&this->u.mpcp_clock_compensate.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MCAST_GLOBAL_CONFIG:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.mcast_global_config.robustness_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.mcast_global_config.lmq_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_bool(&postLenBuf, &this->u.mcast_global_config.fast_leave_enable))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_mcast_snoop_mode_unpack(&this->u.mcast_global_config.mode, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_ipmc_global_options_unpack(&this->u.mcast_global_config.options, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MCAST_DOMAIN_CONFIG:
+            {
+                if (!bcmolt_epon_oam_oam_mcast_domain_record_unpack(&this->u.mcast_domain_config.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ONU_HOLDOVER:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.onu_holdover.time))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_tek_holdover_flags_unpack(&this->u.onu_holdover.flags, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ALARM_THRESHOLD:
+            {
+                if (!bcmolt_epon_oam_tek_alarm_code_unpack(&this->u.alarm_threshold.alarm_code, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.alarm_threshold.raise_threshold))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.alarm_threshold.clear_threshold))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FAILSAFE:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.failsafe.count_of_failsafe_mech))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_bool(&postLenBuf, &this->u.failsafe.failsafe_state))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_STATS_THRESHOLD_INTERVAL:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.port_stats_threshold_interval.statistic_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.port_stats_threshold_interval.interval))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LINK_STATS_THRESHOLD_INTERVAL:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.link_stats_threshold_interval.statistic_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.link_stats_threshold_interval.interval))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_DUPLEX_STATUS:
+            {
+                if (!bcmolt_epon_oam_mac_duplex_status_unpack(&this->u.std_mac_duplex_status.status, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_ADMIN_STATE:
+            {
+                if (!bcmolt_epon_oam_autonegotiate_admin_state_unpack(&this->u.std_auto_neg_admin_state.state, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAU_MEDIA_AVAIL:
+            {
+                if (!bcmolt_epon_oam_mau_media_available_unpack(&this->u.std_mau_media_avail.status, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MDI_CROSSOVER:
+            {
+                if (!bcmolt_epon_oam_mdi_mode_unpack(&this->u.mdi_crossover.mode, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_ADDR:
+            {
+                if (!bcmolt_epon_oam_buf_read_mac_address(&postLenBuf, &this->u.std_mac_addr.address))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_BCAST_RATE_LIMIT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_BYPASS_SOFT_LEARN:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_CHIP_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_CHIP_VERSION:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_COS_TRANSLATION:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_CTL_VLAN_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DN_FILTER_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EGRESS_SHAPING:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EXTENDED_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FIRMWARE_VER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_IGMP_FRAME_RATE_LIMIT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_INGRESS_POLICING:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_IPMC_UNKNOWN_LEAVE_FWD:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_JEDEC_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LEARN_MODE_RULE_UPDATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LINK_STATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LUE_FIELD_SELECT_LIST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MCAST_GROUP_INFO:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_DYNAMIC_ENTRIES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_VLAN_MEMBERSHIP:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_VLAN_POLICY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PRI_ENQUEUING:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_SEARCH_CONFIG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STATIC_MAC_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_AD_SELECT_ABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_AD_TECH:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_AUTO_CFG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_LOCAL_SELECT_ABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_LOCAL_TECH:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_REMOTE_SIG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_RX_SELECT_ABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_RX_TECH:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_FEC_ABILITY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_FEC_CORRECTED_BLOCKS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_FEC_MODE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_FEC_UNCORRECTABLE_BLOCKS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CAPABILITIES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CARRIER_SENSE_ERR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_COLLISION_FRAMES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_FRAMES_RX:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_FRAMES_TX:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_FUNCS_SUPPORTED:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_PAUSE_DELAY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_UNSUPPORTED_OP_RX:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FR_EXCESSIVE_DEFERRAL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAMES_DEFERRED:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAMES_LOST_MAC_RX_ERR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAMES_LOST_MAC_TX_ERR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_MCAST_ADDR_LIST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_MCAST_RX_STATUS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_OUT_OF_RANGE_LEN_ERR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_PROMISCUOUS_STATUS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_TX_ENABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_DISCOVERY_TIMEOUT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_DISCOVERY_WINDOW_TX:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_RX_REG_ACK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_RX_REG_REQUEST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_RX_REPORT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_TX_GATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_TX_REGISTER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_PHY_ADMIN_STATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_PHY_TYPE_LIST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_UP_FILTER_TBL:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(buf, (this->width == 0) ? 0x0080 : this->width))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_attribute_value_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_tek_leaf_attribute leaf;
+    bcmolt_epon_oam_buf postLenBuf;
+    uint8_t length;
+    if (!bcmolt_epon_oam_tek_leaf_attribute_unpack(&leaf, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (length >= 0x0080)
+    {
+        return BCMOS_TRUE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+    switch (leaf)
+    {
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LUE_FIELD_SELECT:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAMES_TX_OK:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_SINGLE_COLL_FRAMES:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_MULTIPLE_COLL_FRAMES:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAMES_RX_OK:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FCS_ERR:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_ALIGN_ERR:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_OCTETS_TX_OK:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_LATE_COLLISIONS:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_EXCESSIVE_COLLISIONS:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_OCTETS_RX_OK:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_MCAST_FRAMES_TX_OK:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_BCAST_FRAMES_TX_OK:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_MCAST_FRAMES_RX_OK:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_BCAST_FRAMES_RX_OK:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_IN_RANGE_LEN_ERR:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAME_TOO_LONG:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_ENABLE_STATUS:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_PHY_SYMBOL_ERR_DURING_CARRIER:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_PAUSE_TX:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_PAUSE_RX:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_OAM_LOCAL_ERR_FRAME_SECS_EVENT:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_OAM_EMUL_CRC8ERR:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_MAC_CTRL_FRAMES_TX:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_MAC_CTRL_FRAMES_RX:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_TX_REG_ACK:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_TX_REG_REQUEST:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_TX_REPORT:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_RX_GATE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_RX_REGISTER:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DYN_LEARN_TBL_SIZE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DYN_LEARN_AGE_LIMIT:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_UNICAST_FRAMES:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_UNICAST_FRAMES:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME_TOO_SHORT:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME64:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME65TO127:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME128TO255:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME256TO511:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME512TO1023:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME1024TO1518:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME1519PLUS:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME64:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME65TO127:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME128TO255:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME256TO511:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME512TO1023:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME1024TO1518:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME1519PLUS:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_DELAY_THRESHOLD:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_DELAY:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAMES_DROPPED:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_BYTES_DROPPED:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_BYTES_DELAYED:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_BYTES_UNUSED:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_DELAY_THRESHOLD:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_DELAY:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAMES_DROPPED:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_BYTES_DROPPED:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_BYTES_DELAYED:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_STAT_THRESHOLD:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LINK_STAT_THRESHOLD:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ENCRYPT_KEY_EXPIRY_TIME:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LEN_ERROR_DISCARD:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DYN_MAC_TBL:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_REPORT_THRESHOLDS:
+            {
+                uint32_t thresholds_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                    {
+                        break;
+                    }
+
+                    thresholds_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(thresholds_elem_count * sizeof(uint16_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_VLAN_ETHERTYPE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_CAPABILITY:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_NEW_DN_FILTER_TBL:
+            {
+                uint32_t rules_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_tek_onu_rule_scan(&postLenBuf, extra_mem))
+                    {
+                        break;
+                    }
+
+                    rules_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(rules_elem_count * sizeof(bcmolt_epon_oam_tek_onu_rule));
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_NEW_UP_FILTER_TBL:
+            {
+                uint32_t rules_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_tek_onu_rule_scan(&postLenBuf, extra_mem))
+                    {
+                        break;
+                    }
+
+                    rules_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(rules_elem_count * sizeof(bcmolt_epon_oam_tek_onu_rule));
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ARP_REPLICATE_DEST:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LACP_DEST:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ONU_IGMP_VLAN:
+            {
+                uint8_t vlans_count;
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &vlans_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_tek_onu_igmp_vlan) * vlans_count);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, vlans_count * 5))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DYN_LEARNING_MODE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MIN_MAC_LIMIT:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ONU_AGGREGATE_LIMIT:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_NVS_SCRATCHPAD:
+            {
+                uint32_t data_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                    {
+                        break;
+                    }
+
+                    data_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(data_elem_count * sizeof(uint8_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FLOOD_UNKNOWN:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LOCAL_SWITCHING:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DOWN_BURST_TOLL:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FEC_MODE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POWER_MON_TEMPERATURE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POWER_MON_VCC:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POWER_MON_TX_BIAS:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POWER_MON_TX_POWER:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POWER_MON_RX_POWER:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 8))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_NETWORK_PON_MAP:
+            {
+                uint8_t network_epon_ports_count;
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &network_epon_ports_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * network_epon_ports_count);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, network_epon_ports_count * 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PSSTATE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_SLE_MODE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LEARN_TABLE_MODE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TRANSCEIVER_SIGNAL_DETECT:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_CROSSBAR_CONFIG:
+            {
+                uint8_t user_port_to_network_port_count;
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &user_port_to_network_port_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * user_port_to_network_port_count);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, user_port_to_network_port_count * 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TRANSCEIVER_BURST_ACTIVITY:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_CONTROL_PORT:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_VLAN_DESTINATIONS:
+            {
+                uint8_t mappings_count;
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &mappings_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_tek_vlan_destination_mapping) * mappings_count);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, mappings_count * 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ENCRYPTION_MODE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_INTERNAL_VERSION:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FIRMWARE_TIMESTAMP:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 7))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ONU_RULE:
+            {
+                if (!bcmolt_epon_oam_tek_attribute_value_rule_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POLICER:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_UNI_SHAPER:
+            {
+                uint8_t number_of_shapers;
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &number_of_shapers))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_uni_shaper) * number_of_shapers);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, number_of_shapers * 10))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EXT_FIRMWARE_VERSION:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 5))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ENCRYPTION_KEY:
+            {
+                uint8_t key_length;
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &key_length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * key_length);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, key_length * 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FILE_INFO:
+            {
+                if (!bcmolt_epon_oam_file_info_base_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_SYSTEM_RULE_OPTIONS:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MTU:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_NVS_STATE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_QUEUEPRIMAP:
+            {
+                uint8_t priority_count;
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &priority_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * priority_count);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, priority_count * 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_DOWN_BIT_LOADING:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 64))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UP_BIT_LOADING:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 64))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_SDM_PHASE:
+            {
+                if (!bcmolt_epon_oam_oam_epoc_stat_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_SDM_AMPLITUDE:
+            {
+                if (!bcmolt_epon_oam_oam_epoc_stat_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_SDM_QUANTIZER:
+            {
+                if (!bcmolt_epon_oam_oam_epoc_stat_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UNUSED0:
+            {
+                if (!bcmolt_epon_oam_oam_epoc_stat_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UNUSED1:
+            {
+                if (!bcmolt_epon_oam_oam_epoc_stat_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UNUSED2:
+            {
+                if (!bcmolt_epon_oam_oam_epoc_stat_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UNUSED3:
+            {
+                if (!bcmolt_epon_oam_oam_epoc_stat_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UNUSED4:
+            {
+                if (!bcmolt_epon_oam_oam_epoc_stat_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_QUEUE_CONFIG_V2:
+            {
+                if (!bcmolt_epon_oam_tek_queue_config_v2base_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FEATURE_SET:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_PHY_TYPE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_SEQUENCE_NUMBER:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MPCP_CLOCK:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MPCP_CLOCK_COMPENSATE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 16))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MCAST_GLOBAL_CONFIG:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MCAST_DOMAIN_CONFIG:
+            {
+                if (!bcmolt_epon_oam_oam_mcast_domain_record_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ONU_HOLDOVER:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ALARM_THRESHOLD:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FAILSAFE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_STATS_THRESHOLD_INTERVAL:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LINK_STATS_THRESHOLD_INTERVAL:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_DUPLEX_STATUS:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_ADMIN_STATE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAU_MEDIA_AVAIL:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MDI_CROSSOVER:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_ADDR:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 6))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_BCAST_RATE_LIMIT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_BYPASS_SOFT_LEARN:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_CHIP_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_CHIP_VERSION:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_COS_TRANSLATION:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_CTL_VLAN_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DN_FILTER_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EGRESS_SHAPING:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EXTENDED_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FIRMWARE_VER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_IGMP_FRAME_RATE_LIMIT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_INGRESS_POLICING:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_IPMC_UNKNOWN_LEAVE_FWD:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_JEDEC_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LEARN_MODE_RULE_UPDATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LINK_STATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LUE_FIELD_SELECT_LIST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MCAST_GROUP_INFO:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_DYNAMIC_ENTRIES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_VLAN_MEMBERSHIP:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_VLAN_POLICY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PRI_ENQUEUING:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_SEARCH_CONFIG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STATIC_MAC_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_AD_SELECT_ABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_AD_TECH:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_AUTO_CFG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_LOCAL_SELECT_ABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_LOCAL_TECH:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_REMOTE_SIG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_RX_SELECT_ABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_RX_TECH:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_FEC_ABILITY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_FEC_CORRECTED_BLOCKS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_FEC_MODE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_FEC_UNCORRECTABLE_BLOCKS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CAPABILITIES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CARRIER_SENSE_ERR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_COLLISION_FRAMES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_FRAMES_RX:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_FRAMES_TX:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_FUNCS_SUPPORTED:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_PAUSE_DELAY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_UNSUPPORTED_OP_RX:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FR_EXCESSIVE_DEFERRAL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAMES_DEFERRED:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAMES_LOST_MAC_RX_ERR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAMES_LOST_MAC_TX_ERR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_MCAST_ADDR_LIST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_MCAST_RX_STATUS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_OUT_OF_RANGE_LEN_ERR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_PROMISCUOUS_STATUS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_TX_ENABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_DISCOVERY_TIMEOUT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_DISCOVERY_WINDOW_TX:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_RX_REG_ACK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_RX_REG_REQUEST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_RX_REPORT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_TX_GATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_TX_REGISTER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_PHY_ADMIN_STATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_PHY_TYPE_LIST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_UP_FILTER_TBL:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tek_attribute_value_report_thresholds_count_thresholds(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 2);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tek_attribute_value_new_dn_filter_tbl_count_rules(bcmolt_epon_oam_buf *buf)
+{
+    uint32_t count = 0;
+    uint32_t dummy = 0;
+    bcmolt_epon_oam_buf bufClone = *buf;
+    while (BCMOS_TRUE)
+    {
+        if (!bcmolt_epon_oam_tek_onu_rule_scan(&bufClone, &dummy))
+        {
+            break;
+        }
+
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tek_attribute_value_new_up_filter_tbl_count_rules(bcmolt_epon_oam_buf *buf)
+{
+    uint32_t count = 0;
+    uint32_t dummy = 0;
+    bcmolt_epon_oam_buf bufClone = *buf;
+    while (BCMOS_TRUE)
+    {
+        if (!bcmolt_epon_oam_tek_onu_rule_scan(&bufClone, &dummy))
+        {
+            break;
+        }
+
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tek_attribute_value_nvs_scratchpad_count_data(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_onu_queue_config_pack(bcmolt_epon_oam_tek_onu_queue_config *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->queue_sizes_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->queue_sizes_count > 0) && (this->queue_sizes == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"queue_sizes\" of struct \"bcmolt_epon_oam_tek_onu_queue_config\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write(buf, this->queue_sizes, this->queue_sizes_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tek_onu_queue_config_get_packed_length(bcmolt_epon_oam_tek_onu_queue_config *this)
+{
+    return 1 + this->queue_sizes_count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_onu_queue_config_unpack(bcmolt_epon_oam_tek_onu_queue_config *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->queue_sizes_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->queue_sizes_count > 0) && (this->queue_sizes == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"queue_sizes\" of struct \"bcmolt_epon_oam_tek_onu_queue_config\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->queue_sizes = (uint8_t *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->queue_sizes_count * sizeof(uint8_t));
+        }
+    }
+
+    if (!bcmolt_epon_oam_buf_read(buf, this->queue_sizes, this->queue_sizes_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_onu_queue_config_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    uint8_t queue_sizes_count;
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &queue_sizes_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * queue_sizes_count);
+    if (!bcmolt_epon_oam_buf_skip(packed, queue_sizes_count * 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_igmp_snooping_port_config_pack(bcmolt_epon_oam_tek_igmp_snooping_port_config *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->number_of_igmp_groups))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->relative_queue_for_classification))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_igmp_snooping_port_config_unpack(bcmolt_epon_oam_tek_igmp_snooping_port_config *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->number_of_igmp_groups))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->relative_queue_for_classification))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_igmp_snooping_port_config_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 2);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_onu_igmp_group_no_vid_pack(bcmolt_epon_oam_tek_onu_igmp_group_no_vid *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_ipv4_address(buf, this->group))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->ports))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_onu_igmp_group_no_vid_unpack(bcmolt_epon_oam_tek_onu_igmp_group_no_vid *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_ipv4_address(buf, &this->group))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->ports))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_onu_igmp_group_no_vid_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 5);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_action_value_base_pack(bcmolt_epon_oam_tek_action_value_base *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t preLenFieldPos;
+    uint32_t bytesAfterLenField;
+    if (!bcmolt_epon_oam_tek_leaf_action_pack(this->leaf, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->width >= 0x0080)
+    {
+        bcmolt_epon_oam_buf_write_u8(buf, this->width);
+        return BCMOS_TRUE;
+    }
+
+    preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+    /* skip over length field (we'll fill it in later) */
+    if (!bcmolt_epon_oam_buf_skip(buf, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->leaf)
+    {
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ADD_STATIC_ENTRY:
+            {
+                if (!bcmolt_epon_oam_buf_write_mac_address(buf, this->u.add_static_entry.mac))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DEL_STATIC_ENTRY:
+            {
+                if (!bcmolt_epon_oam_buf_write_mac_address(buf, this->u.del_static_entry.mac))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ADD_RULE:
+            {
+                uint32_t i0;
+                if ((this->u.add_rule.rules_count > 0) && (this->u.add_rule.rules == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"rules\" of struct \"bcmolt_epon_oam_tek_action_value_base_add_rule\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i0 = 0; i0 < this->u.add_rule.rules_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_tek_onu_rule_pack(&this->u.add_rule.rules[i0], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_NEW_ADD_RULE:
+            {
+                if (!bcmolt_epon_oam_tek_onu_rule_pack(&this->u.new_add_rule.rules, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_NEW_DEL_RULE:
+            {
+                uint32_t i1;
+                if ((this->u.new_del_rule.rules_count > 0) && (this->u.new_del_rule.rules == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"rules\" of struct \"bcmolt_epon_oam_tek_action_value_base_new_del_rule\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i1 = 0; i1 < this->u.new_del_rule.rules_count; i1++)
+                {
+                    if (!bcmolt_epon_oam_tek_onu_rule_pack(&this->u.new_del_rule.rules[i1], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DELETE_RULE:
+            {
+                uint32_t i2;
+                if ((this->u.delete_rule.rules_count > 0) && (this->u.delete_rule.rules == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"rules\" of struct \"bcmolt_epon_oam_tek_action_value_base_delete_rule\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i2 = 0; i2 < this->u.delete_rule.rules_count; i2++)
+                {
+                    if (!bcmolt_epon_oam_tek_onu_rule_pack(&this->u.delete_rule.rules[i2], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_RESET_ONU:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_STATS:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_GPIO_CONFIG:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_GPIO_CONFIG:
+            {
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.set_gpio_config.gpio_config))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_QUEUE_CONFIG:
+            {
+                uint8_t i3;
+                uint8_t i4;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.set_queue_config.links_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.set_queue_config.links_count > 0) && (this->u.set_queue_config.links == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"links\" of struct \"bcmolt_epon_oam_tek_action_value_base_set_queue_config\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i3 = 0; i3 < this->u.set_queue_config.links_count; i3++)
+                {
+                    if (!bcmolt_epon_oam_tek_onu_queue_config_pack(&this->u.set_queue_config.links[i3], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.set_queue_config.ports_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.set_queue_config.ports_count > 0) && (this->u.set_queue_config.ports == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"ports\" of struct \"bcmolt_epon_oam_tek_action_value_base_set_queue_config\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i4 = 0; i4 < this->u.set_queue_config.ports_count; i4++)
+                {
+                    if (!bcmolt_epon_oam_tek_onu_queue_config_pack(&this->u.set_queue_config.ports[i4], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+
+                if (!bcmolt_epon_oam_tek_onu_queue_config_pack(&this->u.set_queue_config.multicast, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_QUEUE_CONFIG:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ERASE_NVS:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_IGMP_CONFIG:
+            {
+                uint8_t i5;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.set_igmp_config.robustness_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.set_igmp_config.last_member_query_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.set_igmp_config.ports_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.set_igmp_config.ports_count > 0) && (this->u.set_igmp_config.ports == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"ports\" of struct \"bcmolt_epon_oam_tek_action_value_base_set_igmp_config\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i5 = 0; i5 < this->u.set_igmp_config.ports_count; i5++)
+                {
+                    if (!bcmolt_epon_oam_tek_igmp_snooping_port_config_pack(&this->u.set_igmp_config.ports[i5], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+
+                if (!bcmolt_epon_oam_tek_igmp_forwarding_qualifer_pack(this->u.set_igmp_config.grp_forward, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_tek_igmp_snooping_options_pack(this->u.set_igmp_config.options, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_IGMP_CONFIG:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_IGMP_GROUP_INFO:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ADD_IGMP_GROUP:
+            {
+                uint8_t i6;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.add_igmp_group.groups_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.add_igmp_group.groups_count > 0) && (this->u.add_igmp_group.groups == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"groups\" of struct \"bcmolt_epon_oam_tek_action_value_base_add_igmp_group\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i6 = 0; i6 < this->u.add_igmp_group.groups_count; i6++)
+                {
+                    if (!bcmolt_epon_oam_tek_onu_igmp_group_no_vid_pack(&this->u.add_igmp_group.groups[i6], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_OAM_RATE:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_OAM_RATE:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.set_oam_rate.max_oam_rate))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.set_oam_rate.min_oam_rate))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_LOAD_INFO:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_BC_LASER_POWER_OFF:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.bc_laser_power_off.off_time))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SLEEP:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.sleep.time))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_sleep_options_pack(this->u.sleep.options, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ADD_LUE_RULE:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DEL_LUE_RULE:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ENABLE_POLICER:
+            {
+                if (!bcmolt_epon_oam_flow_direction_pack(this->u.enable_policer.direction, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.enable_policer.policer_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.enable_policer.burst_size))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.enable_policer.traffic_rate))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DISABLE_POLICER:
+            {
+                if (!bcmolt_epon_oam_flow_direction_pack(this->u.disable_policer.direction, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.disable_policer.policer_id))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_EPOC_SDM_STATS:
+            {
+                if (!bcmolt_epon_oam_epoc_stat_gather_modes_pack(this->u.get_epoc_sdm_stats.mode, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_epoc_sdm250stat_index_pack(this->u.get_epoc_sdm_stats.stat_index, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_EPOC_CMC_STATS:
+            {
+                if (!bcmolt_epon_oam_epoc_stat_gather_modes_pack(this->u.get_epoc_cmc_stats.mode, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_epoc_cmc_stat_index_pack(this->u.get_epoc_cmc_stats.stat_index, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_EPOC_CNU_STATS:
+            {
+                if (!bcmolt_epon_oam_epoc_stat_gather_modes_pack(this->u.get_epoc_cnu_stats.mode, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_epoc_cnu_stat_index_pack(this->u.get_epoc_cnu_stats.stat_index, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_DN_BCAST_QUEUE:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.set_dn_bcast_queue.port_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.set_dn_bcast_queue.port_count > 0) && (this->u.set_dn_bcast_queue.queue_per_port == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"queue_per_port\" of struct \"bcmolt_epon_oam_tek_action_value_base_set_dn_bcast_queue\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.set_dn_bcast_queue.queue_per_port, this->u.set_dn_bcast_queue.port_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_DN_BCAST_QUEUE:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_DN_FILTER_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_DN_USER_RULES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_DYN_LEARN_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_LUE_RULE_TABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_UP_FILTER_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_UP_USER_RULES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLR_DN_CLASS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLR_UP_CLASS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DEL_IGMP_GROUP:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DELETE_MCAST_DOMAIN_CONFIG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DELETE_MCAST_GROUP:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_EPOC_UNUSED0:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_EPOC_UNUSED1:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_FIND_LUE_RULE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_GPIO_VALUE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_LUE_FIELD:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_MDIO:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_PHY_ADDR_MDIO:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_PORT_RATE_CONTROL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_QUEUE_RATE_CONTROL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_LASER_TX_POWER_OFF:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_LOOPBACK_DISABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_LOOPBACK_ENABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ONU_DISABLE_USER_TRAFFIC:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ONU_ENABLE_USER_TRAFFIC:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_PROTECTION_SWITCH:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_GPIO_VALUE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_LUE_FIELD:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_MDIO:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_PHY_ADDR_MDIO:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_PORT_RATE_CONTROL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_QUEUE_RATE_CONTROL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_AUTO_ADMIN_CTRL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_AUTO_RENEGOTIATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAC_ADD_GROUP_ADDR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAC_DEL_GROUP_ADDR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAC_INIT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAC_SELF_TEST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAU_ADMIN_CTRL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAU_RESET:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_PHY_ADMIN_CONTROL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_PORT_ADMIN_CTRL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_RPT_IN_SERVICE_TEST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_RPT_RESET:
+        default:
+            {
+            }
+            break;
+    }
+
+    bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+    if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tek_action_value_base_get_packed_length(bcmolt_epon_oam_tek_action_value_base *this)
+{
+    if (this->width >= 0x0080)
+    {
+        return this->width;
+    }
+    else
+    {
+        uint32_t count = 3;
+        switch (this->leaf)
+        {
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ADD_STATIC_ENTRY:
+                {
+                    count += 6;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DEL_STATIC_ENTRY:
+                {
+                    count += 6;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ADD_RULE:
+                {
+                    uint32_t i0;
+                    if ((this->u.add_rule.rules_count > 0) && (this->u.add_rule.rules == NULL))
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"rules_count\" of struct \"bcmolt_epon_oam_tek_action_value_base\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return 0;
+                    }
+
+                    for (i0 = 0; i0 < this->u.add_rule.rules_count; i0++)
+                    {
+                        count += bcmolt_epon_oam_tek_onu_rule_get_packed_length(&this->u.add_rule.rules[i0]);
+                    }
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_NEW_ADD_RULE:
+                {
+                    count += bcmolt_epon_oam_tek_onu_rule_get_packed_length(&this->u.new_add_rule.rules);
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_NEW_DEL_RULE:
+                {
+                    uint32_t i1;
+                    if ((this->u.new_del_rule.rules_count > 0) && (this->u.new_del_rule.rules == NULL))
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"rules_count\" of struct \"bcmolt_epon_oam_tek_action_value_base\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return 0;
+                    }
+
+                    for (i1 = 0; i1 < this->u.new_del_rule.rules_count; i1++)
+                    {
+                        count += bcmolt_epon_oam_tek_onu_rule_get_packed_length(&this->u.new_del_rule.rules[i1]);
+                    }
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DELETE_RULE:
+                {
+                    uint32_t i2;
+                    if ((this->u.delete_rule.rules_count > 0) && (this->u.delete_rule.rules == NULL))
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"rules_count\" of struct \"bcmolt_epon_oam_tek_action_value_base\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return 0;
+                    }
+
+                    for (i2 = 0; i2 < this->u.delete_rule.rules_count; i2++)
+                    {
+                        count += bcmolt_epon_oam_tek_onu_rule_get_packed_length(&this->u.delete_rule.rules[i2]);
+                    }
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_RESET_ONU:
+                {
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_STATS:
+                {
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_GPIO_CONFIG:
+                {
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_GPIO_CONFIG:
+                {
+                    count += 4;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_QUEUE_CONFIG:
+                {
+                    uint32_t i3;
+                    uint32_t i4;
+                    count += 2 + bcmolt_epon_oam_tek_onu_queue_config_get_packed_length(&this->u.set_queue_config.multicast);
+                    if ((this->u.set_queue_config.links_count > 0) && (this->u.set_queue_config.links == NULL))
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"links_count\" of struct \"bcmolt_epon_oam_tek_action_value_base\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return 0;
+                    }
+
+                    for (i3 = 0; i3 < this->u.set_queue_config.links_count; i3++)
+                    {
+                        count += bcmolt_epon_oam_tek_onu_queue_config_get_packed_length(&this->u.set_queue_config.links[i3]);
+                    }
+
+                    if ((this->u.set_queue_config.ports_count > 0) && (this->u.set_queue_config.ports == NULL))
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"ports_count\" of struct \"bcmolt_epon_oam_tek_action_value_base\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return 0;
+                    }
+
+                    for (i4 = 0; i4 < this->u.set_queue_config.ports_count; i4++)
+                    {
+                        count += bcmolt_epon_oam_tek_onu_queue_config_get_packed_length(&this->u.set_queue_config.ports[i4]);
+                    }
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_QUEUE_CONFIG:
+                {
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ERASE_NVS:
+                {
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_IGMP_CONFIG:
+                {
+                    count += 6 + (2 * this->u.set_igmp_config.ports_count);
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_IGMP_CONFIG:
+                {
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_IGMP_GROUP_INFO:
+                {
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ADD_IGMP_GROUP:
+                {
+                    count += 1 + (5 * this->u.add_igmp_group.groups_count);
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_OAM_RATE:
+                {
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_OAM_RATE:
+                {
+                    count += 2;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_LOAD_INFO:
+                {
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_BC_LASER_POWER_OFF:
+                {
+                    count += 2;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SLEEP:
+                {
+                    count += 6;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ADD_LUE_RULE:
+                {
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DEL_LUE_RULE:
+                {
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ENABLE_POLICER:
+                {
+                    count += 10;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DISABLE_POLICER:
+                {
+                    count += 2;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_EPOC_SDM_STATS:
+                {
+                    count += 2;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_EPOC_CMC_STATS:
+                {
+                    count += 2;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_EPOC_CNU_STATS:
+                {
+                    count += 2;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_DN_BCAST_QUEUE:
+                {
+                    count += 1 + this->u.set_dn_bcast_queue.port_count;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_DN_BCAST_QUEUE:
+                {
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_DN_FILTER_TBL:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_DN_USER_RULES:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_DYN_LEARN_TBL:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_LUE_RULE_TABLE:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_UP_FILTER_TBL:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_UP_USER_RULES:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLR_DN_CLASS:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLR_UP_CLASS:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DEL_IGMP_GROUP:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DELETE_MCAST_DOMAIN_CONFIG:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DELETE_MCAST_GROUP:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_EPOC_UNUSED0:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_EPOC_UNUSED1:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_FIND_LUE_RULE:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_GPIO_VALUE:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_LUE_FIELD:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_MDIO:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_PHY_ADDR_MDIO:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_PORT_RATE_CONTROL:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_QUEUE_RATE_CONTROL:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_LASER_TX_POWER_OFF:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_LOOPBACK_DISABLE:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_LOOPBACK_ENABLE:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ONU_DISABLE_USER_TRAFFIC:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ONU_ENABLE_USER_TRAFFIC:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_PROTECTION_SWITCH:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_GPIO_VALUE:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_LUE_FIELD:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_MDIO:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_PHY_ADDR_MDIO:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_PORT_RATE_CONTROL:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_QUEUE_RATE_CONTROL:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_AUTO_ADMIN_CTRL:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_AUTO_RENEGOTIATE:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAC_ADD_GROUP_ADDR:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAC_DEL_GROUP_ADDR:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAC_INIT:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAC_SELF_TEST:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAU_ADMIN_CTRL:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAU_RESET:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_PHY_ADMIN_CONTROL:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_PORT_ADMIN_CTRL:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_RPT_IN_SERVICE_TEST:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_RPT_RESET:
+            default:
+                {
+                }
+                break;
+        }
+
+        return count;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_action_value_base_unpack(bcmolt_epon_oam_tek_action_value_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    bcmolt_epon_oam_buf postLenBuf;
+    if (!bcmolt_epon_oam_tek_leaf_action_unpack(&this->leaf, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->width))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->width >= 0x0080)
+    {
+        return BCMOS_TRUE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, (this->width == 0) ? 0x0080 : this->width, buf->curr);
+    switch (this->leaf)
+    {
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ADD_STATIC_ENTRY:
+            {
+                if (!bcmolt_epon_oam_buf_read_mac_address(&postLenBuf, &this->u.add_static_entry.mac))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DEL_STATIC_ENTRY:
+            {
+                if (!bcmolt_epon_oam_buf_read_mac_address(&postLenBuf, &this->u.del_static_entry.mac))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ADD_RULE:
+            {
+                uint32_t i0;
+                this->u.add_rule.rules_count = bcmolt_epon_oam_tek_action_value_base_add_rule_count_rules(&postLenBuf);
+                if ((this->u.add_rule.rules_count > 0) && (this->u.add_rule.rules == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"rules\" of struct \"bcmolt_epon_oam_tek_action_value_base_add_rule\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.add_rule.rules = (bcmolt_epon_oam_tek_onu_rule *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.add_rule.rules_count * sizeof(bcmolt_epon_oam_tek_onu_rule));
+                    }
+                }
+
+                for (i0 = 0; i0 < this->u.add_rule.rules_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_tek_onu_rule_unpack(&this->u.add_rule.rules[i0], &postLenBuf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_NEW_ADD_RULE:
+            {
+                if (!bcmolt_epon_oam_tek_onu_rule_unpack(&this->u.new_add_rule.rules, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_NEW_DEL_RULE:
+            {
+                uint32_t i1;
+                this->u.new_del_rule.rules_count = bcmolt_epon_oam_tek_action_value_base_new_del_rule_count_rules(&postLenBuf);
+                if ((this->u.new_del_rule.rules_count > 0) && (this->u.new_del_rule.rules == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"rules\" of struct \"bcmolt_epon_oam_tek_action_value_base_new_del_rule\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.new_del_rule.rules = (bcmolt_epon_oam_tek_onu_rule *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.new_del_rule.rules_count * sizeof(bcmolt_epon_oam_tek_onu_rule));
+                    }
+                }
+
+                for (i1 = 0; i1 < this->u.new_del_rule.rules_count; i1++)
+                {
+                    if (!bcmolt_epon_oam_tek_onu_rule_unpack(&this->u.new_del_rule.rules[i1], &postLenBuf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DELETE_RULE:
+            {
+                uint32_t i2;
+                this->u.delete_rule.rules_count = bcmolt_epon_oam_tek_action_value_base_delete_rule_count_rules(&postLenBuf);
+                if ((this->u.delete_rule.rules_count > 0) && (this->u.delete_rule.rules == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"rules\" of struct \"bcmolt_epon_oam_tek_action_value_base_delete_rule\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.delete_rule.rules = (bcmolt_epon_oam_tek_onu_rule *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.delete_rule.rules_count * sizeof(bcmolt_epon_oam_tek_onu_rule));
+                    }
+                }
+
+                for (i2 = 0; i2 < this->u.delete_rule.rules_count; i2++)
+                {
+                    if (!bcmolt_epon_oam_tek_onu_rule_unpack(&this->u.delete_rule.rules[i2], &postLenBuf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_RESET_ONU:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_STATS:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_GPIO_CONFIG:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_GPIO_CONFIG:
+            {
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.set_gpio_config.gpio_config))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_QUEUE_CONFIG:
+            {
+                uint8_t i3;
+                uint8_t i4;
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.set_queue_config.links_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.set_queue_config.links_count > 0) && (this->u.set_queue_config.links == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"links\" of struct \"bcmolt_epon_oam_tek_action_value_base_set_queue_config\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.set_queue_config.links = (bcmolt_epon_oam_tek_onu_queue_config *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.set_queue_config.links_count * sizeof(bcmolt_epon_oam_tek_onu_queue_config));
+                    }
+                }
+
+                for (i3 = 0; i3 < this->u.set_queue_config.links_count; i3++)
+                {
+                    if (!bcmolt_epon_oam_tek_onu_queue_config_unpack(&this->u.set_queue_config.links[i3], &postLenBuf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.set_queue_config.ports_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.set_queue_config.ports_count > 0) && (this->u.set_queue_config.ports == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"ports\" of struct \"bcmolt_epon_oam_tek_action_value_base_set_queue_config\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.set_queue_config.ports = (bcmolt_epon_oam_tek_onu_queue_config *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.set_queue_config.ports_count * sizeof(bcmolt_epon_oam_tek_onu_queue_config));
+                    }
+                }
+
+                for (i4 = 0; i4 < this->u.set_queue_config.ports_count; i4++)
+                {
+                    if (!bcmolt_epon_oam_tek_onu_queue_config_unpack(&this->u.set_queue_config.ports[i4], &postLenBuf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+
+                if (!bcmolt_epon_oam_tek_onu_queue_config_unpack(&this->u.set_queue_config.multicast, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_QUEUE_CONFIG:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ERASE_NVS:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_IGMP_CONFIG:
+            {
+                uint8_t i5;
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.set_igmp_config.robustness_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.set_igmp_config.last_member_query_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.set_igmp_config.ports_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.set_igmp_config.ports_count > 0) && (this->u.set_igmp_config.ports == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"ports\" of struct \"bcmolt_epon_oam_tek_action_value_base_set_igmp_config\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.set_igmp_config.ports = (bcmolt_epon_oam_tek_igmp_snooping_port_config *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.set_igmp_config.ports_count * sizeof(bcmolt_epon_oam_tek_igmp_snooping_port_config));
+                    }
+                }
+
+                for (i5 = 0; i5 < this->u.set_igmp_config.ports_count; i5++)
+                {
+                    if (!bcmolt_epon_oam_tek_igmp_snooping_port_config_unpack(&this->u.set_igmp_config.ports[i5], &postLenBuf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+
+                if (!bcmolt_epon_oam_tek_igmp_forwarding_qualifer_unpack(&this->u.set_igmp_config.grp_forward, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_tek_igmp_snooping_options_unpack(&this->u.set_igmp_config.options, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_IGMP_CONFIG:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_IGMP_GROUP_INFO:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ADD_IGMP_GROUP:
+            {
+                uint8_t i6;
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.add_igmp_group.groups_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.add_igmp_group.groups_count > 0) && (this->u.add_igmp_group.groups == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"groups\" of struct \"bcmolt_epon_oam_tek_action_value_base_add_igmp_group\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.add_igmp_group.groups = (bcmolt_epon_oam_tek_onu_igmp_group_no_vid *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.add_igmp_group.groups_count * sizeof(bcmolt_epon_oam_tek_onu_igmp_group_no_vid));
+                    }
+                }
+
+                for (i6 = 0; i6 < this->u.add_igmp_group.groups_count; i6++)
+                {
+                    if (!bcmolt_epon_oam_tek_onu_igmp_group_no_vid_unpack(&this->u.add_igmp_group.groups[i6], &postLenBuf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_OAM_RATE:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_OAM_RATE:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.set_oam_rate.max_oam_rate))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.set_oam_rate.min_oam_rate))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_LOAD_INFO:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_BC_LASER_POWER_OFF:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.bc_laser_power_off.off_time))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SLEEP:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.sleep.time))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_sleep_options_unpack(&this->u.sleep.options, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ADD_LUE_RULE:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DEL_LUE_RULE:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ENABLE_POLICER:
+            {
+                if (!bcmolt_epon_oam_flow_direction_unpack(&this->u.enable_policer.direction, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.enable_policer.policer_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.enable_policer.burst_size))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.enable_policer.traffic_rate))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DISABLE_POLICER:
+            {
+                if (!bcmolt_epon_oam_flow_direction_unpack(&this->u.disable_policer.direction, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.disable_policer.policer_id))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_EPOC_SDM_STATS:
+            {
+                if (!bcmolt_epon_oam_epoc_stat_gather_modes_unpack(&this->u.get_epoc_sdm_stats.mode, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_epoc_sdm250stat_index_unpack(&this->u.get_epoc_sdm_stats.stat_index, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_EPOC_CMC_STATS:
+            {
+                if (!bcmolt_epon_oam_epoc_stat_gather_modes_unpack(&this->u.get_epoc_cmc_stats.mode, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_epoc_cmc_stat_index_unpack(&this->u.get_epoc_cmc_stats.stat_index, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_EPOC_CNU_STATS:
+            {
+                if (!bcmolt_epon_oam_epoc_stat_gather_modes_unpack(&this->u.get_epoc_cnu_stats.mode, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_epoc_cnu_stat_index_unpack(&this->u.get_epoc_cnu_stats.stat_index, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_DN_BCAST_QUEUE:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.set_dn_bcast_queue.port_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.set_dn_bcast_queue.port_count > 0) && (this->u.set_dn_bcast_queue.queue_per_port == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"queue_per_port\" of struct \"bcmolt_epon_oam_tek_action_value_base_set_dn_bcast_queue\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.set_dn_bcast_queue.queue_per_port = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.set_dn_bcast_queue.port_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.set_dn_bcast_queue.queue_per_port, this->u.set_dn_bcast_queue.port_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_DN_BCAST_QUEUE:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_DN_FILTER_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_DN_USER_RULES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_DYN_LEARN_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_LUE_RULE_TABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_UP_FILTER_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_UP_USER_RULES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLR_DN_CLASS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLR_UP_CLASS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DEL_IGMP_GROUP:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DELETE_MCAST_DOMAIN_CONFIG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DELETE_MCAST_GROUP:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_EPOC_UNUSED0:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_EPOC_UNUSED1:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_FIND_LUE_RULE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_GPIO_VALUE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_LUE_FIELD:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_MDIO:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_PHY_ADDR_MDIO:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_PORT_RATE_CONTROL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_QUEUE_RATE_CONTROL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_LASER_TX_POWER_OFF:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_LOOPBACK_DISABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_LOOPBACK_ENABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ONU_DISABLE_USER_TRAFFIC:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ONU_ENABLE_USER_TRAFFIC:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_PROTECTION_SWITCH:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_GPIO_VALUE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_LUE_FIELD:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_MDIO:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_PHY_ADDR_MDIO:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_PORT_RATE_CONTROL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_QUEUE_RATE_CONTROL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_AUTO_ADMIN_CTRL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_AUTO_RENEGOTIATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAC_ADD_GROUP_ADDR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAC_DEL_GROUP_ADDR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAC_INIT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAC_SELF_TEST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAU_ADMIN_CTRL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAU_RESET:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_PHY_ADMIN_CONTROL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_PORT_ADMIN_CTRL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_RPT_IN_SERVICE_TEST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_RPT_RESET:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(buf, (this->width == 0) ? 0x0080 : this->width))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_action_value_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_tek_leaf_action leaf;
+    bcmolt_epon_oam_buf postLenBuf;
+    uint8_t length;
+    if (!bcmolt_epon_oam_tek_leaf_action_unpack(&leaf, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (length >= 0x0080)
+    {
+        return BCMOS_TRUE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+    switch (leaf)
+    {
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ADD_STATIC_ENTRY:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 6))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DEL_STATIC_ENTRY:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 6))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ADD_RULE:
+            {
+                uint32_t rules_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_tek_onu_rule_scan(&postLenBuf, extra_mem))
+                    {
+                        break;
+                    }
+
+                    rules_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(rules_elem_count * sizeof(bcmolt_epon_oam_tek_onu_rule));
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_NEW_ADD_RULE:
+            {
+                if (!bcmolt_epon_oam_tek_onu_rule_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_NEW_DEL_RULE:
+            {
+                uint32_t rules_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_tek_onu_rule_scan(&postLenBuf, extra_mem))
+                    {
+                        break;
+                    }
+
+                    rules_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(rules_elem_count * sizeof(bcmolt_epon_oam_tek_onu_rule));
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DELETE_RULE:
+            {
+                uint32_t rules_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_tek_onu_rule_scan(&postLenBuf, extra_mem))
+                    {
+                        break;
+                    }
+
+                    rules_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(rules_elem_count * sizeof(bcmolt_epon_oam_tek_onu_rule));
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_RESET_ONU:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_STATS:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_GPIO_CONFIG:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_GPIO_CONFIG:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_QUEUE_CONFIG:
+            {
+                uint8_t links_count;
+                uint8_t i0;
+                uint8_t ports_count;
+                uint8_t i1;
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &links_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_tek_onu_queue_config) * links_count);
+                for (i0 = 0; i0 < links_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_tek_onu_queue_config_scan(&postLenBuf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &ports_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_tek_onu_queue_config) * ports_count);
+                for (i1 = 0; i1 < ports_count; i1++)
+                {
+                    if (!bcmolt_epon_oam_tek_onu_queue_config_scan(&postLenBuf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+
+                if (!bcmolt_epon_oam_tek_onu_queue_config_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_QUEUE_CONFIG:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ERASE_NVS:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_IGMP_CONFIG:
+            {
+                uint8_t ports_count;
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &ports_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_tek_igmp_snooping_port_config) * ports_count);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, ports_count * 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_IGMP_CONFIG:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_IGMP_GROUP_INFO:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ADD_IGMP_GROUP:
+            {
+                uint8_t groups_count;
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &groups_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_tek_onu_igmp_group_no_vid) * groups_count);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, groups_count * 5))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_OAM_RATE:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_OAM_RATE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_LOAD_INFO:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_BC_LASER_POWER_OFF:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SLEEP:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ADD_LUE_RULE:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DEL_LUE_RULE:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ENABLE_POLICER:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DISABLE_POLICER:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_EPOC_SDM_STATS:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_EPOC_CMC_STATS:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_EPOC_CNU_STATS:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_DN_BCAST_QUEUE:
+            {
+                uint8_t port_count;
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &port_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * port_count);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, port_count * 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_DN_BCAST_QUEUE:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_DN_FILTER_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_DN_USER_RULES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_DYN_LEARN_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_LUE_RULE_TABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_UP_FILTER_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_UP_USER_RULES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLR_DN_CLASS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLR_UP_CLASS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DEL_IGMP_GROUP:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DELETE_MCAST_DOMAIN_CONFIG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DELETE_MCAST_GROUP:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_EPOC_UNUSED0:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_EPOC_UNUSED1:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_FIND_LUE_RULE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_GPIO_VALUE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_LUE_FIELD:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_MDIO:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_PHY_ADDR_MDIO:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_PORT_RATE_CONTROL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_QUEUE_RATE_CONTROL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_LASER_TX_POWER_OFF:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_LOOPBACK_DISABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_LOOPBACK_ENABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ONU_DISABLE_USER_TRAFFIC:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ONU_ENABLE_USER_TRAFFIC:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_PROTECTION_SWITCH:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_GPIO_VALUE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_LUE_FIELD:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_MDIO:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_PHY_ADDR_MDIO:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_PORT_RATE_CONTROL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_QUEUE_RATE_CONTROL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_AUTO_ADMIN_CTRL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_AUTO_RENEGOTIATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAC_ADD_GROUP_ADDR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAC_DEL_GROUP_ADDR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAC_INIT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAC_SELF_TEST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAU_ADMIN_CTRL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAU_RESET:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_PHY_ADMIN_CONTROL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_PORT_ADMIN_CTRL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_RPT_IN_SERVICE_TEST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_RPT_RESET:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tek_action_value_base_add_rule_count_rules(bcmolt_epon_oam_buf *buf)
+{
+    uint32_t count = 0;
+    uint32_t dummy = 0;
+    bcmolt_epon_oam_buf bufClone = *buf;
+    while (BCMOS_TRUE)
+    {
+        if (!bcmolt_epon_oam_tek_onu_rule_scan(&bufClone, &dummy))
+        {
+            break;
+        }
+
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tek_action_value_base_new_del_rule_count_rules(bcmolt_epon_oam_buf *buf)
+{
+    uint32_t count = 0;
+    uint32_t dummy = 0;
+    bcmolt_epon_oam_buf bufClone = *buf;
+    while (BCMOS_TRUE)
+    {
+        if (!bcmolt_epon_oam_tek_onu_rule_scan(&bufClone, &dummy))
+        {
+            break;
+        }
+
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tek_action_value_base_delete_rule_count_rules(bcmolt_epon_oam_buf *buf)
+{
+    uint32_t count = 0;
+    uint32_t dummy = 0;
+    bcmolt_epon_oam_buf bufClone = *buf;
+    while (BCMOS_TRUE)
+    {
+        if (!bcmolt_epon_oam_tek_onu_rule_scan(&bufClone, &dummy))
+        {
+            break;
+        }
+
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_var_container_pack(bcmolt_epon_oam_tek_var_container *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_tek_branch_pack(this->branch, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->branch)
+    {
+        case BCMOLT_EPON_OAM_TEK_BRANCH_END:
+            {
+                if ((this->u.end.unknown_count > 0) && (this->u.end.unknown == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"unknown\" of struct \"bcmolt_epon_oam_tek_var_container_end\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.end.unknown, this->u.end.unknown_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_NAME_BINDING:
+            {
+                if (!bcmolt_epon_oam_tek_object_context_pack(&this->u.name_binding.object_context, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_tek_attribute_value_pack(&this->u.attribute.attribute, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_ACTION:
+            {
+                if (!bcmolt_epon_oam_tek_action_value_base_pack(&this->u.action.action, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_OBJECT:
+        case BCMOLT_EPON_OAM_TEK_BRANCH_PACKAGE:
+        default:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.def.leaf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.def.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.def.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tek_var_container_get_packed_length(bcmolt_epon_oam_tek_var_container *this)
+{
+    uint32_t count = 1;
+    switch (this->branch)
+    {
+        case BCMOLT_EPON_OAM_TEK_BRANCH_END:
+            {
+                count += this->u.end.unknown_count;
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_NAME_BINDING:
+            {
+                count += bcmolt_epon_oam_tek_object_context_get_packed_length(&this->u.name_binding.object_context);
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_ATTRIBUTE:
+            {
+                count += bcmolt_epon_oam_tek_attribute_value_get_packed_length(&this->u.attribute.attribute);
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_ACTION:
+            {
+                count += bcmolt_epon_oam_tek_action_value_base_get_packed_length(&this->u.action.action);
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_OBJECT:
+        case BCMOLT_EPON_OAM_TEK_BRANCH_PACKAGE:
+        default:
+            {
+                count += 3;
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_var_container_unpack(bcmolt_epon_oam_tek_var_container *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_tek_branch_unpack(&this->branch, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->branch)
+    {
+        case BCMOLT_EPON_OAM_TEK_BRANCH_END:
+            {
+                this->u.end.unknown_count = bcmolt_epon_oam_tek_var_container_end_count_unknown(buf);
+                if ((this->u.end.unknown_count > 0) && (this->u.end.unknown == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"unknown\" of struct \"bcmolt_epon_oam_tek_var_container_end\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.end.unknown = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.end.unknown_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.end.unknown, this->u.end.unknown_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_NAME_BINDING:
+            {
+                if (!bcmolt_epon_oam_tek_object_context_unpack(&this->u.name_binding.object_context, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_tek_attribute_value_unpack(&this->u.attribute.attribute, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_ACTION:
+            {
+                if (!bcmolt_epon_oam_tek_action_value_base_unpack(&this->u.action.action, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_OBJECT:
+        case BCMOLT_EPON_OAM_TEK_BRANCH_PACKAGE:
+        default:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.def.leaf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.def.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.def.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.def.width == 0) ? 0x0080 : this->u.def.width, buf->curr);
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.def.width == 0) ? 0x0080 : this->u.def.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_var_container_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_tek_branch branch;
+    if (!bcmolt_epon_oam_tek_branch_unpack(&branch, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (branch)
+    {
+        case BCMOLT_EPON_OAM_TEK_BRANCH_END:
+            {
+                uint32_t unknown_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                    {
+                        break;
+                    }
+
+                    unknown_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(unknown_elem_count * sizeof(uint8_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_NAME_BINDING:
+            {
+                if (!bcmolt_epon_oam_tek_object_context_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_tek_attribute_value_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_ACTION:
+            {
+                if (!bcmolt_epon_oam_tek_action_value_base_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_OBJECT:
+        case BCMOLT_EPON_OAM_TEK_BRANCH_PACKAGE:
+        default:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tek_var_container_end_count_unknown(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_set_resp_action_value_base_pack(bcmolt_epon_oam_tek_set_resp_action_value_base *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t preLenFieldPos;
+    uint32_t bytesAfterLenField;
+    if (!bcmolt_epon_oam_tek_leaf_action_pack(this->leaf, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->width >= 0x0080)
+    {
+        bcmolt_epon_oam_buf_write_u8(buf, this->width);
+        return BCMOS_TRUE;
+    }
+
+    preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+    /* skip over length field (we'll fill it in later) */
+    if (!bcmolt_epon_oam_buf_skip(buf, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->leaf)
+    {
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_QUEUE_CONFIG:
+            {
+                uint8_t i0;
+                uint8_t i1;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.get_queue_config.links_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_queue_config.links_count > 0) && (this->u.get_queue_config.links == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"links\" of struct \"bcmolt_epon_oam_tek_set_resp_action_value_base_get_queue_config\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i0 = 0; i0 < this->u.get_queue_config.links_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_tek_onu_queue_config_pack(&this->u.get_queue_config.links[i0], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.get_queue_config.ports_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_queue_config.ports_count > 0) && (this->u.get_queue_config.ports == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"ports\" of struct \"bcmolt_epon_oam_tek_set_resp_action_value_base_get_queue_config\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i1 = 0; i1 < this->u.get_queue_config.ports_count; i1++)
+                {
+                    if (!bcmolt_epon_oam_tek_onu_queue_config_pack(&this->u.get_queue_config.ports[i1], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+
+                if (!bcmolt_epon_oam_tek_onu_queue_config_pack(&this->u.get_queue_config.multicast, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_IGMP_CONFIG:
+            {
+                uint8_t i2;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.get_igmp_config.robustness_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.get_igmp_config.last_member_query_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.get_igmp_config.ports_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_igmp_config.ports_count > 0) && (this->u.get_igmp_config.ports == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"ports\" of struct \"bcmolt_epon_oam_tek_set_resp_action_value_base_get_igmp_config\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i2 = 0; i2 < this->u.get_igmp_config.ports_count; i2++)
+                {
+                    if (!bcmolt_epon_oam_tek_igmp_snooping_port_config_pack(&this->u.get_igmp_config.ports[i2], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+
+                if (!bcmolt_epon_oam_tek_igmp_forwarding_qualifer_pack(this->u.get_igmp_config.grp_forward, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_tek_igmp_snooping_options_pack(this->u.get_igmp_config.options, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_IGMP_GROUP_INFO:
+            {
+                uint8_t i3;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.get_igmp_group_info.groups_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_igmp_group_info.groups_count > 0) && (this->u.get_igmp_group_info.groups == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"groups\" of struct \"bcmolt_epon_oam_tek_set_resp_action_value_base_get_igmp_group_info\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i3 = 0; i3 < this->u.get_igmp_group_info.groups_count; i3++)
+                {
+                    if (!bcmolt_epon_oam_tek_onu_igmp_group_no_vid_pack(&this->u.get_igmp_group_info.groups[i3], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_OAM_RATE:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.get_oam_rate.max_oam_rate))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.get_oam_rate.min_oam_rate))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_LOAD_INFO:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.get_load_info.boot_version))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.get_load_info.boot_crc))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.get_load_info.personality_version))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.get_load_info.personality_crc))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.get_load_info.app0version))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.get_load_info.app0crc))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.get_load_info.app1version))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.get_load_info.app1crc))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.get_load_info.diagnostic_version))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.get_load_info.diagnostic_crc))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_EPOC_SDM_STATS:
+            {
+                if (!bcmolt_epon_oam_epoc_sdm250stat_index_pack(this->u.get_epoc_sdm_stats.stat_index, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.get_epoc_sdm_stats.counter_value_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_epoc_sdm_stats.counter_value_count > 0) && (this->u.get_epoc_sdm_stats.counter_value == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"counter_value\" of struct \"bcmolt_epon_oam_tek_set_resp_action_value_base_get_epoc_sdm_stats\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.get_epoc_sdm_stats.counter_value, this->u.get_epoc_sdm_stats.counter_value_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.get_epoc_sdm_stats.rate_value_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_epoc_sdm_stats.rate_value_count > 0) && (this->u.get_epoc_sdm_stats.rate_value == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"rate_value\" of struct \"bcmolt_epon_oam_tek_set_resp_action_value_base_get_epoc_sdm_stats\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.get_epoc_sdm_stats.rate_value, this->u.get_epoc_sdm_stats.rate_value_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.get_epoc_sdm_stats.rate_interval_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_epoc_sdm_stats.rate_interval_count > 0) && (this->u.get_epoc_sdm_stats.rate_interval == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"rate_interval\" of struct \"bcmolt_epon_oam_tek_set_resp_action_value_base_get_epoc_sdm_stats\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.get_epoc_sdm_stats.rate_interval, this->u.get_epoc_sdm_stats.rate_interval_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_EPOC_CMC_STATS:
+            {
+                if (!bcmolt_epon_oam_epoc_cmc_stat_index_pack(this->u.get_epoc_cmc_stats.stat_index, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.get_epoc_cmc_stats.counter_value_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_epoc_cmc_stats.counter_value_count > 0) && (this->u.get_epoc_cmc_stats.counter_value == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"counter_value\" of struct \"bcmolt_epon_oam_tek_set_resp_action_value_base_get_epoc_cmc_stats\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.get_epoc_cmc_stats.counter_value, this->u.get_epoc_cmc_stats.counter_value_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.get_epoc_cmc_stats.rate_value_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_epoc_cmc_stats.rate_value_count > 0) && (this->u.get_epoc_cmc_stats.rate_value == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"rate_value\" of struct \"bcmolt_epon_oam_tek_set_resp_action_value_base_get_epoc_cmc_stats\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.get_epoc_cmc_stats.rate_value, this->u.get_epoc_cmc_stats.rate_value_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.get_epoc_cmc_stats.rate_interval_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_epoc_cmc_stats.rate_interval_count > 0) && (this->u.get_epoc_cmc_stats.rate_interval == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"rate_interval\" of struct \"bcmolt_epon_oam_tek_set_resp_action_value_base_get_epoc_cmc_stats\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.get_epoc_cmc_stats.rate_interval, this->u.get_epoc_cmc_stats.rate_interval_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_EPOC_CNU_STATS:
+            {
+                if (!bcmolt_epon_oam_epoc_cnu_stat_index_pack(this->u.get_epoc_cnu_stats.stat_index, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.get_epoc_cnu_stats.counter_value_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_epoc_cnu_stats.counter_value_count > 0) && (this->u.get_epoc_cnu_stats.counter_value == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"counter_value\" of struct \"bcmolt_epon_oam_tek_set_resp_action_value_base_get_epoc_cnu_stats\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.get_epoc_cnu_stats.counter_value, this->u.get_epoc_cnu_stats.counter_value_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.get_epoc_cnu_stats.rate_value_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_epoc_cnu_stats.rate_value_count > 0) && (this->u.get_epoc_cnu_stats.rate_value == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"rate_value\" of struct \"bcmolt_epon_oam_tek_set_resp_action_value_base_get_epoc_cnu_stats\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.get_epoc_cnu_stats.rate_value, this->u.get_epoc_cnu_stats.rate_value_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.get_epoc_cnu_stats.rate_interval_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_epoc_cnu_stats.rate_interval_count > 0) && (this->u.get_epoc_cnu_stats.rate_interval == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"rate_interval\" of struct \"bcmolt_epon_oam_tek_set_resp_action_value_base_get_epoc_cnu_stats\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.get_epoc_cnu_stats.rate_interval, this->u.get_epoc_cnu_stats.rate_interval_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_DN_BCAST_QUEUE:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.get_dn_bcast_queue.port_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_dn_bcast_queue.port_count > 0) && (this->u.get_dn_bcast_queue.queue_per_port == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"queue_per_port\" of struct \"bcmolt_epon_oam_tek_set_resp_action_value_base_get_dn_bcast_queue\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.get_dn_bcast_queue.queue_per_port, this->u.get_dn_bcast_queue.port_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ADD_IGMP_GROUP:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ADD_LUE_RULE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ADD_RULE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ADD_STATIC_ENTRY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_BC_LASER_POWER_OFF:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_DN_FILTER_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_DN_USER_RULES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_DYN_LEARN_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_LUE_RULE_TABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_STATS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_UP_FILTER_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_UP_USER_RULES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLR_DN_CLASS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLR_UP_CLASS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DEL_IGMP_GROUP:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DEL_LUE_RULE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DEL_STATIC_ENTRY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DELETE_MCAST_DOMAIN_CONFIG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DELETE_MCAST_GROUP:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DELETE_RULE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DISABLE_POLICER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ENABLE_POLICER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_EPOC_UNUSED0:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_EPOC_UNUSED1:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ERASE_NVS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_FIND_LUE_RULE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_GPIO_CONFIG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_GPIO_VALUE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_LUE_FIELD:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_MDIO:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_PHY_ADDR_MDIO:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_PORT_RATE_CONTROL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_QUEUE_RATE_CONTROL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_LASER_TX_POWER_OFF:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_LOOPBACK_DISABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_LOOPBACK_ENABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_NEW_ADD_RULE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_NEW_DEL_RULE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ONU_DISABLE_USER_TRAFFIC:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ONU_ENABLE_USER_TRAFFIC:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_PROTECTION_SWITCH:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_RESET_ONU:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_DN_BCAST_QUEUE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_GPIO_CONFIG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_GPIO_VALUE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_IGMP_CONFIG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_LUE_FIELD:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_MDIO:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_OAM_RATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_PHY_ADDR_MDIO:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_PORT_RATE_CONTROL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_QUEUE_CONFIG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_QUEUE_RATE_CONTROL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SLEEP:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_AUTO_ADMIN_CTRL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_AUTO_RENEGOTIATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAC_ADD_GROUP_ADDR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAC_DEL_GROUP_ADDR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAC_INIT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAC_SELF_TEST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAU_ADMIN_CTRL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAU_RESET:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_PHY_ADMIN_CONTROL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_PORT_ADMIN_CTRL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_RPT_IN_SERVICE_TEST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_RPT_RESET:
+        default:
+            {
+                if ((this->u.def.unknown_count > 0) && (this->u.def.unknown == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"unknown\" of struct \"bcmolt_epon_oam_tek_set_resp_action_value_base_def\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.def.unknown, this->u.def.unknown_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+    if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tek_set_resp_action_value_base_get_packed_length(bcmolt_epon_oam_tek_set_resp_action_value_base *this)
+{
+    if (this->width >= 0x0080)
+    {
+        return this->width;
+    }
+    else
+    {
+        uint32_t count = 3;
+        switch (this->leaf)
+        {
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_QUEUE_CONFIG:
+                {
+                    uint32_t i0;
+                    uint32_t i1;
+                    count += 2 + bcmolt_epon_oam_tek_onu_queue_config_get_packed_length(&this->u.get_queue_config.multicast);
+                    if ((this->u.get_queue_config.links_count > 0) && (this->u.get_queue_config.links == NULL))
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"links_count\" of struct \"bcmolt_epon_oam_tek_set_resp_action_value_base\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return 0;
+                    }
+
+                    for (i0 = 0; i0 < this->u.get_queue_config.links_count; i0++)
+                    {
+                        count += bcmolt_epon_oam_tek_onu_queue_config_get_packed_length(&this->u.get_queue_config.links[i0]);
+                    }
+
+                    if ((this->u.get_queue_config.ports_count > 0) && (this->u.get_queue_config.ports == NULL))
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"ports_count\" of struct \"bcmolt_epon_oam_tek_set_resp_action_value_base\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return 0;
+                    }
+
+                    for (i1 = 0; i1 < this->u.get_queue_config.ports_count; i1++)
+                    {
+                        count += bcmolt_epon_oam_tek_onu_queue_config_get_packed_length(&this->u.get_queue_config.ports[i1]);
+                    }
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_IGMP_CONFIG:
+                {
+                    count += 6 + (2 * this->u.get_igmp_config.ports_count);
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_IGMP_GROUP_INFO:
+                {
+                    count += 1 + (5 * this->u.get_igmp_group_info.groups_count);
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_OAM_RATE:
+                {
+                    count += 2;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_LOAD_INFO:
+                {
+                    count += 30;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_EPOC_SDM_STATS:
+                {
+                    count += 4 + this->u.get_epoc_sdm_stats.counter_value_count + this->u.get_epoc_sdm_stats.rate_value_count + this->u.get_epoc_sdm_stats.rate_interval_count;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_EPOC_CMC_STATS:
+                {
+                    count += 4 + this->u.get_epoc_cmc_stats.counter_value_count + this->u.get_epoc_cmc_stats.rate_value_count + this->u.get_epoc_cmc_stats.rate_interval_count;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_EPOC_CNU_STATS:
+                {
+                    count += 4 + this->u.get_epoc_cnu_stats.counter_value_count + this->u.get_epoc_cnu_stats.rate_value_count + this->u.get_epoc_cnu_stats.rate_interval_count;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_DN_BCAST_QUEUE:
+                {
+                    count += 1 + this->u.get_dn_bcast_queue.port_count;
+                }
+                break;
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ADD_IGMP_GROUP:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ADD_LUE_RULE:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ADD_RULE:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ADD_STATIC_ENTRY:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_BC_LASER_POWER_OFF:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_DN_FILTER_TBL:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_DN_USER_RULES:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_DYN_LEARN_TBL:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_LUE_RULE_TABLE:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_STATS:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_UP_FILTER_TBL:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_UP_USER_RULES:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLR_DN_CLASS:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLR_UP_CLASS:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DEL_IGMP_GROUP:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DEL_LUE_RULE:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DEL_STATIC_ENTRY:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DELETE_MCAST_DOMAIN_CONFIG:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DELETE_MCAST_GROUP:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DELETE_RULE:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DISABLE_POLICER:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ENABLE_POLICER:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_EPOC_UNUSED0:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_EPOC_UNUSED1:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ERASE_NVS:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_FIND_LUE_RULE:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_GPIO_CONFIG:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_GPIO_VALUE:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_LUE_FIELD:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_MDIO:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_PHY_ADDR_MDIO:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_PORT_RATE_CONTROL:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_QUEUE_RATE_CONTROL:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_LASER_TX_POWER_OFF:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_LOOPBACK_DISABLE:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_LOOPBACK_ENABLE:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_NEW_ADD_RULE:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_NEW_DEL_RULE:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ONU_DISABLE_USER_TRAFFIC:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ONU_ENABLE_USER_TRAFFIC:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_PROTECTION_SWITCH:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_RESET_ONU:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_DN_BCAST_QUEUE:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_GPIO_CONFIG:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_GPIO_VALUE:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_IGMP_CONFIG:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_LUE_FIELD:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_MDIO:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_OAM_RATE:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_PHY_ADDR_MDIO:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_PORT_RATE_CONTROL:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_QUEUE_CONFIG:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_QUEUE_RATE_CONTROL:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SLEEP:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_AUTO_ADMIN_CTRL:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_AUTO_RENEGOTIATE:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAC_ADD_GROUP_ADDR:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAC_DEL_GROUP_ADDR:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAC_INIT:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAC_SELF_TEST:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAU_ADMIN_CTRL:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAU_RESET:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_PHY_ADMIN_CONTROL:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_PORT_ADMIN_CTRL:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_RPT_IN_SERVICE_TEST:
+            case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_RPT_RESET:
+            default:
+                {
+                    count += this->u.def.unknown_count;
+                }
+                break;
+        }
+
+        return count;
+    }
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_set_resp_action_value_base_unpack(bcmolt_epon_oam_tek_set_resp_action_value_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    bcmolt_epon_oam_buf postLenBuf;
+    if (!bcmolt_epon_oam_tek_leaf_action_unpack(&this->leaf, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->width))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (this->width >= 0x0080)
+    {
+        return BCMOS_TRUE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, (this->width == 0) ? 0x0080 : this->width, buf->curr);
+    switch (this->leaf)
+    {
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_QUEUE_CONFIG:
+            {
+                uint8_t i0;
+                uint8_t i1;
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.get_queue_config.links_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_queue_config.links_count > 0) && (this->u.get_queue_config.links == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"links\" of struct \"bcmolt_epon_oam_tek_set_resp_action_value_base_get_queue_config\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.get_queue_config.links = (bcmolt_epon_oam_tek_onu_queue_config *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.get_queue_config.links_count * sizeof(bcmolt_epon_oam_tek_onu_queue_config));
+                    }
+                }
+
+                for (i0 = 0; i0 < this->u.get_queue_config.links_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_tek_onu_queue_config_unpack(&this->u.get_queue_config.links[i0], &postLenBuf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.get_queue_config.ports_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_queue_config.ports_count > 0) && (this->u.get_queue_config.ports == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"ports\" of struct \"bcmolt_epon_oam_tek_set_resp_action_value_base_get_queue_config\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.get_queue_config.ports = (bcmolt_epon_oam_tek_onu_queue_config *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.get_queue_config.ports_count * sizeof(bcmolt_epon_oam_tek_onu_queue_config));
+                    }
+                }
+
+                for (i1 = 0; i1 < this->u.get_queue_config.ports_count; i1++)
+                {
+                    if (!bcmolt_epon_oam_tek_onu_queue_config_unpack(&this->u.get_queue_config.ports[i1], &postLenBuf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+
+                if (!bcmolt_epon_oam_tek_onu_queue_config_unpack(&this->u.get_queue_config.multicast, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_IGMP_CONFIG:
+            {
+                uint8_t i2;
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.get_igmp_config.robustness_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.get_igmp_config.last_member_query_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.get_igmp_config.ports_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_igmp_config.ports_count > 0) && (this->u.get_igmp_config.ports == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"ports\" of struct \"bcmolt_epon_oam_tek_set_resp_action_value_base_get_igmp_config\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.get_igmp_config.ports = (bcmolt_epon_oam_tek_igmp_snooping_port_config *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.get_igmp_config.ports_count * sizeof(bcmolt_epon_oam_tek_igmp_snooping_port_config));
+                    }
+                }
+
+                for (i2 = 0; i2 < this->u.get_igmp_config.ports_count; i2++)
+                {
+                    if (!bcmolt_epon_oam_tek_igmp_snooping_port_config_unpack(&this->u.get_igmp_config.ports[i2], &postLenBuf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+
+                if (!bcmolt_epon_oam_tek_igmp_forwarding_qualifer_unpack(&this->u.get_igmp_config.grp_forward, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_tek_igmp_snooping_options_unpack(&this->u.get_igmp_config.options, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_IGMP_GROUP_INFO:
+            {
+                uint8_t i3;
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.get_igmp_group_info.groups_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_igmp_group_info.groups_count > 0) && (this->u.get_igmp_group_info.groups == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"groups\" of struct \"bcmolt_epon_oam_tek_set_resp_action_value_base_get_igmp_group_info\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.get_igmp_group_info.groups = (bcmolt_epon_oam_tek_onu_igmp_group_no_vid *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.get_igmp_group_info.groups_count * sizeof(bcmolt_epon_oam_tek_onu_igmp_group_no_vid));
+                    }
+                }
+
+                for (i3 = 0; i3 < this->u.get_igmp_group_info.groups_count; i3++)
+                {
+                    if (!bcmolt_epon_oam_tek_onu_igmp_group_no_vid_unpack(&this->u.get_igmp_group_info.groups[i3], &postLenBuf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_OAM_RATE:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.get_oam_rate.max_oam_rate))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.get_oam_rate.min_oam_rate))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_LOAD_INFO:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.get_load_info.boot_version))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.get_load_info.boot_crc))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.get_load_info.personality_version))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.get_load_info.personality_crc))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.get_load_info.app0version))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.get_load_info.app0crc))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.get_load_info.app1version))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.get_load_info.app1crc))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.get_load_info.diagnostic_version))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(&postLenBuf, &this->u.get_load_info.diagnostic_crc))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_EPOC_SDM_STATS:
+            {
+                if (!bcmolt_epon_oam_epoc_sdm250stat_index_unpack(&this->u.get_epoc_sdm_stats.stat_index, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.get_epoc_sdm_stats.counter_value_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_epoc_sdm_stats.counter_value_count > 0) && (this->u.get_epoc_sdm_stats.counter_value == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"counter_value\" of struct \"bcmolt_epon_oam_tek_set_resp_action_value_base_get_epoc_sdm_stats\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.get_epoc_sdm_stats.counter_value = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.get_epoc_sdm_stats.counter_value_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.get_epoc_sdm_stats.counter_value, this->u.get_epoc_sdm_stats.counter_value_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.get_epoc_sdm_stats.rate_value_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_epoc_sdm_stats.rate_value_count > 0) && (this->u.get_epoc_sdm_stats.rate_value == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"rate_value\" of struct \"bcmolt_epon_oam_tek_set_resp_action_value_base_get_epoc_sdm_stats\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.get_epoc_sdm_stats.rate_value = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.get_epoc_sdm_stats.rate_value_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.get_epoc_sdm_stats.rate_value, this->u.get_epoc_sdm_stats.rate_value_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.get_epoc_sdm_stats.rate_interval_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_epoc_sdm_stats.rate_interval_count > 0) && (this->u.get_epoc_sdm_stats.rate_interval == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"rate_interval\" of struct \"bcmolt_epon_oam_tek_set_resp_action_value_base_get_epoc_sdm_stats\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.get_epoc_sdm_stats.rate_interval = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.get_epoc_sdm_stats.rate_interval_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.get_epoc_sdm_stats.rate_interval, this->u.get_epoc_sdm_stats.rate_interval_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_EPOC_CMC_STATS:
+            {
+                if (!bcmolt_epon_oam_epoc_cmc_stat_index_unpack(&this->u.get_epoc_cmc_stats.stat_index, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.get_epoc_cmc_stats.counter_value_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_epoc_cmc_stats.counter_value_count > 0) && (this->u.get_epoc_cmc_stats.counter_value == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"counter_value\" of struct \"bcmolt_epon_oam_tek_set_resp_action_value_base_get_epoc_cmc_stats\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.get_epoc_cmc_stats.counter_value = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.get_epoc_cmc_stats.counter_value_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.get_epoc_cmc_stats.counter_value, this->u.get_epoc_cmc_stats.counter_value_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.get_epoc_cmc_stats.rate_value_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_epoc_cmc_stats.rate_value_count > 0) && (this->u.get_epoc_cmc_stats.rate_value == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"rate_value\" of struct \"bcmolt_epon_oam_tek_set_resp_action_value_base_get_epoc_cmc_stats\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.get_epoc_cmc_stats.rate_value = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.get_epoc_cmc_stats.rate_value_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.get_epoc_cmc_stats.rate_value, this->u.get_epoc_cmc_stats.rate_value_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.get_epoc_cmc_stats.rate_interval_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_epoc_cmc_stats.rate_interval_count > 0) && (this->u.get_epoc_cmc_stats.rate_interval == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"rate_interval\" of struct \"bcmolt_epon_oam_tek_set_resp_action_value_base_get_epoc_cmc_stats\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.get_epoc_cmc_stats.rate_interval = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.get_epoc_cmc_stats.rate_interval_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.get_epoc_cmc_stats.rate_interval, this->u.get_epoc_cmc_stats.rate_interval_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_EPOC_CNU_STATS:
+            {
+                if (!bcmolt_epon_oam_epoc_cnu_stat_index_unpack(&this->u.get_epoc_cnu_stats.stat_index, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.get_epoc_cnu_stats.counter_value_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_epoc_cnu_stats.counter_value_count > 0) && (this->u.get_epoc_cnu_stats.counter_value == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"counter_value\" of struct \"bcmolt_epon_oam_tek_set_resp_action_value_base_get_epoc_cnu_stats\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.get_epoc_cnu_stats.counter_value = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.get_epoc_cnu_stats.counter_value_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.get_epoc_cnu_stats.counter_value, this->u.get_epoc_cnu_stats.counter_value_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.get_epoc_cnu_stats.rate_value_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_epoc_cnu_stats.rate_value_count > 0) && (this->u.get_epoc_cnu_stats.rate_value == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"rate_value\" of struct \"bcmolt_epon_oam_tek_set_resp_action_value_base_get_epoc_cnu_stats\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.get_epoc_cnu_stats.rate_value = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.get_epoc_cnu_stats.rate_value_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.get_epoc_cnu_stats.rate_value, this->u.get_epoc_cnu_stats.rate_value_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.get_epoc_cnu_stats.rate_interval_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_epoc_cnu_stats.rate_interval_count > 0) && (this->u.get_epoc_cnu_stats.rate_interval == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"rate_interval\" of struct \"bcmolt_epon_oam_tek_set_resp_action_value_base_get_epoc_cnu_stats\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.get_epoc_cnu_stats.rate_interval = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.get_epoc_cnu_stats.rate_interval_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.get_epoc_cnu_stats.rate_interval, this->u.get_epoc_cnu_stats.rate_interval_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_DN_BCAST_QUEUE:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.get_dn_bcast_queue.port_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.get_dn_bcast_queue.port_count > 0) && (this->u.get_dn_bcast_queue.queue_per_port == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"queue_per_port\" of struct \"bcmolt_epon_oam_tek_set_resp_action_value_base_get_dn_bcast_queue\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.get_dn_bcast_queue.queue_per_port = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.get_dn_bcast_queue.port_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.get_dn_bcast_queue.queue_per_port, this->u.get_dn_bcast_queue.port_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ADD_IGMP_GROUP:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ADD_LUE_RULE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ADD_RULE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ADD_STATIC_ENTRY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_BC_LASER_POWER_OFF:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_DN_FILTER_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_DN_USER_RULES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_DYN_LEARN_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_LUE_RULE_TABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_STATS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_UP_FILTER_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_UP_USER_RULES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLR_DN_CLASS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLR_UP_CLASS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DEL_IGMP_GROUP:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DEL_LUE_RULE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DEL_STATIC_ENTRY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DELETE_MCAST_DOMAIN_CONFIG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DELETE_MCAST_GROUP:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DELETE_RULE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DISABLE_POLICER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ENABLE_POLICER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_EPOC_UNUSED0:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_EPOC_UNUSED1:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ERASE_NVS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_FIND_LUE_RULE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_GPIO_CONFIG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_GPIO_VALUE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_LUE_FIELD:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_MDIO:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_PHY_ADDR_MDIO:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_PORT_RATE_CONTROL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_QUEUE_RATE_CONTROL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_LASER_TX_POWER_OFF:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_LOOPBACK_DISABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_LOOPBACK_ENABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_NEW_ADD_RULE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_NEW_DEL_RULE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ONU_DISABLE_USER_TRAFFIC:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ONU_ENABLE_USER_TRAFFIC:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_PROTECTION_SWITCH:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_RESET_ONU:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_DN_BCAST_QUEUE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_GPIO_CONFIG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_GPIO_VALUE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_IGMP_CONFIG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_LUE_FIELD:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_MDIO:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_OAM_RATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_PHY_ADDR_MDIO:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_PORT_RATE_CONTROL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_QUEUE_CONFIG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_QUEUE_RATE_CONTROL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SLEEP:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_AUTO_ADMIN_CTRL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_AUTO_RENEGOTIATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAC_ADD_GROUP_ADDR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAC_DEL_GROUP_ADDR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAC_INIT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAC_SELF_TEST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAU_ADMIN_CTRL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAU_RESET:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_PHY_ADMIN_CONTROL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_PORT_ADMIN_CTRL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_RPT_IN_SERVICE_TEST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_RPT_RESET:
+        default:
+            {
+                this->u.def.unknown_count = bcmolt_epon_oam_tek_set_resp_action_value_base_def_count_unknown(&postLenBuf);
+                if ((this->u.def.unknown_count > 0) && (this->u.def.unknown == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"unknown\" of struct \"bcmolt_epon_oam_tek_set_resp_action_value_base_def\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.def.unknown = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.def.unknown_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.def.unknown, this->u.def.unknown_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(buf, (this->width == 0) ? 0x0080 : this->width))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_set_resp_action_value_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_tek_leaf_action leaf;
+    bcmolt_epon_oam_buf postLenBuf;
+    uint8_t length;
+    if (!bcmolt_epon_oam_tek_leaf_action_unpack(&leaf, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (length >= 0x0080)
+    {
+        return BCMOS_TRUE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+    switch (leaf)
+    {
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_QUEUE_CONFIG:
+            {
+                uint8_t links_count;
+                uint8_t i0;
+                uint8_t ports_count;
+                uint8_t i1;
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &links_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_tek_onu_queue_config) * links_count);
+                for (i0 = 0; i0 < links_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_tek_onu_queue_config_scan(&postLenBuf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &ports_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_tek_onu_queue_config) * ports_count);
+                for (i1 = 0; i1 < ports_count; i1++)
+                {
+                    if (!bcmolt_epon_oam_tek_onu_queue_config_scan(&postLenBuf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+
+                if (!bcmolt_epon_oam_tek_onu_queue_config_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_IGMP_CONFIG:
+            {
+                uint8_t ports_count;
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &ports_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_tek_igmp_snooping_port_config) * ports_count);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, ports_count * 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_IGMP_GROUP_INFO:
+            {
+                uint8_t groups_count;
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &groups_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_tek_onu_igmp_group_no_vid) * groups_count);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, groups_count * 5))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_OAM_RATE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_LOAD_INFO:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_EPOC_SDM_STATS:
+            {
+                uint8_t counter_value_count;
+                uint8_t rate_value_count;
+                uint8_t rate_interval_count;
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &counter_value_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * counter_value_count);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, counter_value_count * 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &rate_value_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * rate_value_count);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, rate_value_count * 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &rate_interval_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * rate_interval_count);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, rate_interval_count * 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_EPOC_CMC_STATS:
+            {
+                uint8_t counter_value_count;
+                uint8_t rate_value_count;
+                uint8_t rate_interval_count;
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &counter_value_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * counter_value_count);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, counter_value_count * 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &rate_value_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * rate_value_count);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, rate_value_count * 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &rate_interval_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * rate_interval_count);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, rate_interval_count * 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_EPOC_CNU_STATS:
+            {
+                uint8_t counter_value_count;
+                uint8_t rate_value_count;
+                uint8_t rate_interval_count;
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &counter_value_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * counter_value_count);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, counter_value_count * 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &rate_value_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * rate_value_count);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, rate_value_count * 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &rate_interval_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * rate_interval_count);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, rate_interval_count * 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_DN_BCAST_QUEUE:
+            {
+                uint8_t port_count;
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &port_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * port_count);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, port_count * 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ADD_IGMP_GROUP:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ADD_LUE_RULE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ADD_RULE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ADD_STATIC_ENTRY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_BC_LASER_POWER_OFF:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_DN_FILTER_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_DN_USER_RULES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_DYN_LEARN_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_LUE_RULE_TABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_STATS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_UP_FILTER_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_UP_USER_RULES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLR_DN_CLASS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLR_UP_CLASS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DEL_IGMP_GROUP:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DEL_LUE_RULE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DEL_STATIC_ENTRY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DELETE_MCAST_DOMAIN_CONFIG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DELETE_MCAST_GROUP:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DELETE_RULE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DISABLE_POLICER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ENABLE_POLICER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_EPOC_UNUSED0:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_EPOC_UNUSED1:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ERASE_NVS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_FIND_LUE_RULE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_GPIO_CONFIG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_GPIO_VALUE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_LUE_FIELD:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_MDIO:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_PHY_ADDR_MDIO:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_PORT_RATE_CONTROL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_QUEUE_RATE_CONTROL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_LASER_TX_POWER_OFF:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_LOOPBACK_DISABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_LOOPBACK_ENABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_NEW_ADD_RULE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_NEW_DEL_RULE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ONU_DISABLE_USER_TRAFFIC:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ONU_ENABLE_USER_TRAFFIC:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_PROTECTION_SWITCH:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_RESET_ONU:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_DN_BCAST_QUEUE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_GPIO_CONFIG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_GPIO_VALUE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_IGMP_CONFIG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_LUE_FIELD:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_MDIO:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_OAM_RATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_PHY_ADDR_MDIO:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_PORT_RATE_CONTROL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_QUEUE_CONFIG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_QUEUE_RATE_CONTROL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SLEEP:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_AUTO_ADMIN_CTRL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_AUTO_RENEGOTIATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAC_ADD_GROUP_ADDR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAC_DEL_GROUP_ADDR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAC_INIT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAC_SELF_TEST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAU_ADMIN_CTRL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAU_RESET:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_PHY_ADMIN_CONTROL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_PORT_ADMIN_CTRL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_RPT_IN_SERVICE_TEST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_RPT_RESET:
+        default:
+            {
+                uint32_t unknown_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                    {
+                        break;
+                    }
+
+                    unknown_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(unknown_elem_count * sizeof(uint8_t));
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tek_set_resp_action_value_base_def_count_unknown(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_set_resp_var_container_base_pack(bcmolt_epon_oam_tek_set_resp_var_container_base *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_tek_branch_pack(this->branch, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->branch)
+    {
+        case BCMOLT_EPON_OAM_TEK_BRANCH_END:
+            {
+                if ((this->u.end.unknown_count > 0) && (this->u.end.unknown == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"unknown\" of struct \"bcmolt_epon_oam_tek_set_resp_var_container_base_end\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.end.unknown, this->u.end.unknown_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_NAME_BINDING:
+            {
+                if (!bcmolt_epon_oam_tek_object_context_pack(&this->u.name_binding.object_context, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_tek_attribute_value_pack(&this->u.attribute.attribute, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_ACTION:
+            {
+                if (!bcmolt_epon_oam_tek_set_resp_action_value_base_pack(&this->u.action.action, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_OBJECT:
+        case BCMOLT_EPON_OAM_TEK_BRANCH_PACKAGE:
+        default:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.def.leaf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.def.width >= 0x0080)
+                {
+                    bcmolt_epon_oam_buf_write_u8(buf, this->u.def.width);
+                    return BCMOS_TRUE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, (bytesAfterLenField == 0) ? 0x0080 : (bytesAfterLenField == 0x0080) ? 0 : bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tek_set_resp_var_container_base_get_packed_length(bcmolt_epon_oam_tek_set_resp_var_container_base *this)
+{
+    uint32_t count = 1;
+    switch (this->branch)
+    {
+        case BCMOLT_EPON_OAM_TEK_BRANCH_END:
+            {
+                count += this->u.end.unknown_count;
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_NAME_BINDING:
+            {
+                count += bcmolt_epon_oam_tek_object_context_get_packed_length(&this->u.name_binding.object_context);
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_ATTRIBUTE:
+            {
+                count += bcmolt_epon_oam_tek_attribute_value_get_packed_length(&this->u.attribute.attribute);
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_ACTION:
+            {
+                count += bcmolt_epon_oam_tek_set_resp_action_value_base_get_packed_length(&this->u.action.action);
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_OBJECT:
+        case BCMOLT_EPON_OAM_TEK_BRANCH_PACKAGE:
+        default:
+            {
+                count += 3;
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_set_resp_var_container_base_unpack(bcmolt_epon_oam_tek_set_resp_var_container_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_tek_branch_unpack(&this->branch, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->branch)
+    {
+        case BCMOLT_EPON_OAM_TEK_BRANCH_END:
+            {
+                this->u.end.unknown_count = bcmolt_epon_oam_tek_set_resp_var_container_base_end_count_unknown(buf);
+                if ((this->u.end.unknown_count > 0) && (this->u.end.unknown == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"unknown\" of struct \"bcmolt_epon_oam_tek_set_resp_var_container_base_end\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.end.unknown = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.end.unknown_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.end.unknown, this->u.end.unknown_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_NAME_BINDING:
+            {
+                if (!bcmolt_epon_oam_tek_object_context_unpack(&this->u.name_binding.object_context, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_tek_attribute_value_unpack(&this->u.attribute.attribute, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_ACTION:
+            {
+                if (!bcmolt_epon_oam_tek_set_resp_action_value_base_unpack(&this->u.action.action, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_OBJECT:
+        case BCMOLT_EPON_OAM_TEK_BRANCH_PACKAGE:
+        default:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.def.leaf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.def.width))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (this->u.def.width >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (this->u.def.width == 0) ? 0x0080 : this->u.def.width, buf->curr);
+                if (!bcmolt_epon_oam_buf_skip(buf, (this->u.def.width == 0) ? 0x0080 : this->u.def.width))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_set_resp_var_container_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_tek_branch branch;
+    if (!bcmolt_epon_oam_tek_branch_unpack(&branch, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (branch)
+    {
+        case BCMOLT_EPON_OAM_TEK_BRANCH_END:
+            {
+                uint32_t unknown_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                    {
+                        break;
+                    }
+
+                    unknown_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(unknown_elem_count * sizeof(uint8_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_NAME_BINDING:
+            {
+                if (!bcmolt_epon_oam_tek_object_context_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_tek_attribute_value_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_ACTION:
+            {
+                if (!bcmolt_epon_oam_tek_set_resp_action_value_base_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_OBJECT:
+        case BCMOLT_EPON_OAM_TEK_BRANCH_PACKAGE:
+        default:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (length >= 0x0080)
+                {
+                    return BCMOS_TRUE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, (length == 0) ? 0x0080 : length, packed->curr);
+                if (!bcmolt_epon_oam_buf_skip(packed, (length == 0) ? 0x0080 : length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tek_set_resp_var_container_base_end_count_unknown(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_vendor_extended_pack(bcmolt_epon_oam_tek_vendor_extended *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_tek_opcode_pack(this->op, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->op)
+    {
+        case BCMOLT_EPON_OAM_TEK_OPCODE_INFO:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.info.firmware_version))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.info.oui, 3))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.info.product_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.info.version))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.info.extended_id, 64))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_mac_address(buf, this->u.info.base_mac))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.info.max_links))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.info.num_ports))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.info.num_assignable_upstream_queues))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.info.max_queues_per_link_upstream))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.info.queue_increment_upstream))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.info.num_assignable_downstream_queues))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.info.max_queues_per_link_downstream))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.info.queue_increment_downstream))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.info.upstream_buffer_available))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.info.downstream_buffer_available))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.info.jedec_manufacturer_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.info.chip_id))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.info.chip_version))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_GET_REQUEST:
+            {
+                uint32_t i0;
+                if ((this->u.get_request.vars_count > 0) && (this->u.get_request.vars == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vars\" of struct \"bcmolt_epon_oam_tek_vendor_extended_get_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i0 = 0; i0 < this->u.get_request.vars_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_tek_var_descriptor_pack(&this->u.get_request.vars[i0], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_GET_RESPONSE:
+            {
+                uint32_t i1;
+                if ((this->u.get_response.vars_count > 0) && (this->u.get_response.vars == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vars\" of struct \"bcmolt_epon_oam_tek_vendor_extended_get_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i1 = 0; i1 < this->u.get_response.vars_count; i1++)
+                {
+                    if (!bcmolt_epon_oam_tek_var_container_pack(&this->u.get_response.vars[i1], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_SET_REQUEST:
+            {
+                uint32_t i2;
+                if ((this->u.set_request.vars_count > 0) && (this->u.set_request.vars == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vars\" of struct \"bcmolt_epon_oam_tek_vendor_extended_set_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i2 = 0; i2 < this->u.set_request.vars_count; i2++)
+                {
+                    if (!bcmolt_epon_oam_tek_var_container_pack(&this->u.set_request.vars[i2], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_SET_RESPONSE:
+            {
+                uint32_t i3;
+                if ((this->u.set_response.vars_count > 0) && (this->u.set_response.vars == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vars\" of struct \"bcmolt_epon_oam_tek_vendor_extended_set_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i3 = 0; i3 < this->u.set_response.vars_count; i3++)
+                {
+                    if (!bcmolt_epon_oam_tek_set_resp_var_container_base_pack(&this->u.set_response.vars[i3], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_MULTICAST_REGISTER:
+            {
+                if (!bcmolt_epon_oam_ieee_register_flags_pack(this->u.multicast_register.flags, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.multicast_register.multicast_llid))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.multicast_register.unicast_llid))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_MULTICAST_REGISTER_RESPONSE:
+            {
+                if (!bcmolt_epon_oam_ieee_register_ack_flags_pack(this->u.multicast_register_response.flags, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.multicast_register_response.multicast_llid))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.multicast_register_response.unicast_llid))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_KEY_EXCHANGE:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.key_exchange.key_number))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.key_exchange.key_length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.key_exchange.key_length > 0) && (this->u.key_exchange.key_data == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"key_data\" of struct \"bcmolt_epon_oam_tek_vendor_extended_key_exchange\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.key_exchange.key_data, this->u.key_exchange.key_length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_FILE_ACK:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.file_ack.block))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_tek_file_transfer_error_pack(this->u.file_ack.error, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_FILE_DATA:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.file_data.block))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.file_data.length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.file_data.length > 0) && (this->u.file_data.data == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"data\" of struct \"bcmolt_epon_oam_tek_vendor_extended_file_data\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.file_data.data, this->u.file_data.length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_FILE_READ_REQUEST:
+            {
+                if (!bcmolt_epon_oam_tek_file_type_pack(this->u.file_read_request.file_type, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_FILE_WRITE_REQUEST:
+            {
+                if (!bcmolt_epon_oam_tek_file_type_pack(this->u.file_write_request.file_type, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_UNACKED_ACTION:
+            {
+                uint32_t i4;
+                if ((this->u.unacked_action.variable_containers_count > 0) && (this->u.unacked_action.variable_containers == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"variable_containers\" of struct \"bcmolt_epon_oam_tek_vendor_extended_unacked_action\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i4 = 0; i4 < this->u.unacked_action.variable_containers_count; i4++)
+                {
+                    if (!bcmolt_epon_oam_tek_var_container_pack(&this->u.unacked_action.variable_containers[i4], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_I2C_BSC_READ_REQUEST:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_I2C_BSC_READ_RESPONSE:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_I2C_BSC_WRITE_REQUEST:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_I2C_BSC_WRITE_RESPONSE:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_LOOP_DETECT:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_MULTICAST_REQUEST:
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tek_vendor_extended_get_packed_length(bcmolt_epon_oam_tek_vendor_extended *this)
+{
+    uint32_t count = 1;
+    switch (this->op)
+    {
+        case BCMOLT_EPON_OAM_TEK_OPCODE_INFO:
+            {
+                count += 99;
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_GET_REQUEST:
+            {
+                uint32_t i0;
+                if ((this->u.get_request.vars_count > 0) && (this->u.get_request.vars == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vars_count\" of struct \"bcmolt_epon_oam_tek_vendor_extended\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return 0;
+                }
+
+                for (i0 = 0; i0 < this->u.get_request.vars_count; i0++)
+                {
+                    count += bcmolt_epon_oam_tek_var_descriptor_get_packed_length(&this->u.get_request.vars[i0]);
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_GET_RESPONSE:
+            {
+                uint32_t i1;
+                if ((this->u.get_response.vars_count > 0) && (this->u.get_response.vars == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vars_count\" of struct \"bcmolt_epon_oam_tek_vendor_extended\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return 0;
+                }
+
+                for (i1 = 0; i1 < this->u.get_response.vars_count; i1++)
+                {
+                    count += bcmolt_epon_oam_tek_var_container_get_packed_length(&this->u.get_response.vars[i1]);
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_SET_REQUEST:
+            {
+                uint32_t i2;
+                if ((this->u.set_request.vars_count > 0) && (this->u.set_request.vars == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vars_count\" of struct \"bcmolt_epon_oam_tek_vendor_extended\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return 0;
+                }
+
+                for (i2 = 0; i2 < this->u.set_request.vars_count; i2++)
+                {
+                    count += bcmolt_epon_oam_tek_var_container_get_packed_length(&this->u.set_request.vars[i2]);
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_SET_RESPONSE:
+            {
+                uint32_t i3;
+                if ((this->u.set_response.vars_count > 0) && (this->u.set_response.vars == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vars_count\" of struct \"bcmolt_epon_oam_tek_vendor_extended\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return 0;
+                }
+
+                for (i3 = 0; i3 < this->u.set_response.vars_count; i3++)
+                {
+                    count += bcmolt_epon_oam_tek_set_resp_var_container_base_get_packed_length(&this->u.set_response.vars[i3]);
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_MULTICAST_REGISTER:
+            {
+                count += 5;
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_MULTICAST_REGISTER_RESPONSE:
+            {
+                count += 5;
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_KEY_EXCHANGE:
+            {
+                count += 2 + this->u.key_exchange.key_length;
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_FILE_ACK:
+            {
+                count += 3;
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_FILE_DATA:
+            {
+                count += 4 + this->u.file_data.length;
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_FILE_READ_REQUEST:
+            {
+                count += 1;
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_FILE_WRITE_REQUEST:
+            {
+                count += 1;
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_UNACKED_ACTION:
+            {
+                uint32_t i4;
+                if ((this->u.unacked_action.variable_containers_count > 0) && (this->u.unacked_action.variable_containers == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"variable_containers_count\" of struct \"bcmolt_epon_oam_tek_vendor_extended\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return 0;
+                }
+
+                for (i4 = 0; i4 < this->u.unacked_action.variable_containers_count; i4++)
+                {
+                    count += bcmolt_epon_oam_tek_var_container_get_packed_length(&this->u.unacked_action.variable_containers[i4]);
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_I2C_BSC_READ_REQUEST:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_I2C_BSC_READ_RESPONSE:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_I2C_BSC_WRITE_REQUEST:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_I2C_BSC_WRITE_RESPONSE:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_LOOP_DETECT:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_MULTICAST_REQUEST:
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_vendor_extended_unpack(bcmolt_epon_oam_tek_vendor_extended *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_tek_opcode_unpack(&this->op, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->op)
+    {
+        case BCMOLT_EPON_OAM_TEK_OPCODE_INFO:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.info.firmware_version))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.info.oui, 3))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.info.product_id))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.info.version))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.info.extended_id, 64))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_read_mac_address(buf, &this->u.info.base_mac))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.info.max_links))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.info.num_ports))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.info.num_assignable_upstream_queues))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.info.max_queues_per_link_upstream))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.info.queue_increment_upstream))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.info.num_assignable_downstream_queues))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.info.max_queues_per_link_downstream))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.info.queue_increment_downstream))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.info.upstream_buffer_available))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.info.downstream_buffer_available))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.info.jedec_manufacturer_id))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.info.chip_id))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(buf, &this->u.info.chip_version))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_GET_REQUEST:
+            {
+                uint32_t i0;
+                this->u.get_request.vars_count = bcmolt_epon_oam_tek_vendor_extended_get_request_count_vars(buf);
+                if ((this->u.get_request.vars_count > 0) && (this->u.get_request.vars == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vars\" of struct \"bcmolt_epon_oam_tek_vendor_extended_get_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.get_request.vars = (bcmolt_epon_oam_tek_var_descriptor *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.get_request.vars_count * sizeof(bcmolt_epon_oam_tek_var_descriptor));
+                    }
+                }
+
+                for (i0 = 0; i0 < this->u.get_request.vars_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_tek_var_descriptor_unpack(&this->u.get_request.vars[i0], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_GET_RESPONSE:
+            {
+                uint32_t i1;
+                this->u.get_response.vars_count = bcmolt_epon_oam_tek_vendor_extended_get_response_count_vars(buf);
+                if ((this->u.get_response.vars_count > 0) && (this->u.get_response.vars == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vars\" of struct \"bcmolt_epon_oam_tek_vendor_extended_get_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.get_response.vars = (bcmolt_epon_oam_tek_var_container *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.get_response.vars_count * sizeof(bcmolt_epon_oam_tek_var_container));
+                    }
+                }
+
+                for (i1 = 0; i1 < this->u.get_response.vars_count; i1++)
+                {
+                    if (!bcmolt_epon_oam_tek_var_container_unpack(&this->u.get_response.vars[i1], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_SET_REQUEST:
+            {
+                uint32_t i2;
+                this->u.set_request.vars_count = bcmolt_epon_oam_tek_vendor_extended_set_request_count_vars(buf);
+                if ((this->u.set_request.vars_count > 0) && (this->u.set_request.vars == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vars\" of struct \"bcmolt_epon_oam_tek_vendor_extended_set_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.set_request.vars = (bcmolt_epon_oam_tek_var_container *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.set_request.vars_count * sizeof(bcmolt_epon_oam_tek_var_container));
+                    }
+                }
+
+                for (i2 = 0; i2 < this->u.set_request.vars_count; i2++)
+                {
+                    if (!bcmolt_epon_oam_tek_var_container_unpack(&this->u.set_request.vars[i2], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_SET_RESPONSE:
+            {
+                uint32_t i3;
+                this->u.set_response.vars_count = bcmolt_epon_oam_tek_vendor_extended_set_response_count_vars(buf);
+                if ((this->u.set_response.vars_count > 0) && (this->u.set_response.vars == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vars\" of struct \"bcmolt_epon_oam_tek_vendor_extended_set_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.set_response.vars = (bcmolt_epon_oam_tek_set_resp_var_container_base *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.set_response.vars_count * sizeof(bcmolt_epon_oam_tek_set_resp_var_container_base));
+                    }
+                }
+
+                for (i3 = 0; i3 < this->u.set_response.vars_count; i3++)
+                {
+                    if (!bcmolt_epon_oam_tek_set_resp_var_container_base_unpack(&this->u.set_response.vars[i3], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_MULTICAST_REGISTER:
+            {
+                if (!bcmolt_epon_oam_ieee_register_flags_unpack(&this->u.multicast_register.flags, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.multicast_register.multicast_llid))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.multicast_register.unicast_llid))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_MULTICAST_REGISTER_RESPONSE:
+            {
+                if (!bcmolt_epon_oam_ieee_register_ack_flags_unpack(&this->u.multicast_register_response.flags, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.multicast_register_response.multicast_llid))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.multicast_register_response.unicast_llid))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_KEY_EXCHANGE:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.key_exchange.key_number))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.key_exchange.key_length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.key_exchange.key_length > 0) && (this->u.key_exchange.key_data == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"key_data\" of struct \"bcmolt_epon_oam_tek_vendor_extended_key_exchange\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.key_exchange.key_data = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.key_exchange.key_length * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.key_exchange.key_data, this->u.key_exchange.key_length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_FILE_ACK:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.file_ack.block))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_tek_file_transfer_error_unpack(&this->u.file_ack.error, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_FILE_DATA:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.file_data.block))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.file_data.length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.file_data.length > 0) && (this->u.file_data.data == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"data\" of struct \"bcmolt_epon_oam_tek_vendor_extended_file_data\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.file_data.data = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.file_data.length * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.file_data.data, this->u.file_data.length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_FILE_READ_REQUEST:
+            {
+                if (!bcmolt_epon_oam_tek_file_type_unpack(&this->u.file_read_request.file_type, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_FILE_WRITE_REQUEST:
+            {
+                if (!bcmolt_epon_oam_tek_file_type_unpack(&this->u.file_write_request.file_type, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_UNACKED_ACTION:
+            {
+                uint32_t i4;
+                this->u.unacked_action.variable_containers_count = bcmolt_epon_oam_tek_vendor_extended_unacked_action_count_variable_containers(buf);
+                if ((this->u.unacked_action.variable_containers_count > 0) && (this->u.unacked_action.variable_containers == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"variable_containers\" of struct \"bcmolt_epon_oam_tek_vendor_extended_unacked_action\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.unacked_action.variable_containers = (bcmolt_epon_oam_tek_var_container *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.unacked_action.variable_containers_count * sizeof(bcmolt_epon_oam_tek_var_container));
+                    }
+                }
+
+                for (i4 = 0; i4 < this->u.unacked_action.variable_containers_count; i4++)
+                {
+                    if (!bcmolt_epon_oam_tek_var_container_unpack(&this->u.unacked_action.variable_containers[i4], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_I2C_BSC_READ_REQUEST:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_I2C_BSC_READ_RESPONSE:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_I2C_BSC_WRITE_REQUEST:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_I2C_BSC_WRITE_RESPONSE:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_LOOP_DETECT:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_MULTICAST_REQUEST:
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_vendor_extended_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_tek_opcode op;
+    if (!bcmolt_epon_oam_tek_opcode_unpack(&op, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (op)
+    {
+        case BCMOLT_EPON_OAM_TEK_OPCODE_INFO:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 3))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 64))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 6))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                {
+                    /*Optional unpack fails do not cause errors */
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_GET_REQUEST:
+            {
+                uint32_t vars_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_tek_var_descriptor_scan(packed, extra_mem))
+                    {
+                        break;
+                    }
+
+                    vars_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(vars_elem_count * sizeof(bcmolt_epon_oam_tek_var_descriptor));
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_GET_RESPONSE:
+            {
+                uint32_t vars_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_tek_var_container_scan(packed, extra_mem))
+                    {
+                        break;
+                    }
+
+                    vars_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(vars_elem_count * sizeof(bcmolt_epon_oam_tek_var_container));
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_SET_REQUEST:
+            {
+                uint32_t vars_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_tek_var_container_scan(packed, extra_mem))
+                    {
+                        break;
+                    }
+
+                    vars_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(vars_elem_count * sizeof(bcmolt_epon_oam_tek_var_container));
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_SET_RESPONSE:
+            {
+                uint32_t vars_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_tek_set_resp_var_container_base_scan(packed, extra_mem))
+                    {
+                        break;
+                    }
+
+                    vars_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(vars_elem_count * sizeof(bcmolt_epon_oam_tek_set_resp_var_container_base));
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_MULTICAST_REGISTER:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_MULTICAST_REGISTER_RESPONSE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_KEY_EXCHANGE:
+            {
+                uint8_t key_length;
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &key_length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * key_length);
+                if (!bcmolt_epon_oam_buf_skip(packed, key_length * 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_FILE_ACK:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_FILE_DATA:
+            {
+                uint16_t length;
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * length);
+                if (!bcmolt_epon_oam_buf_skip(packed, length * 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_FILE_READ_REQUEST:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_FILE_WRITE_REQUEST:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_UNACKED_ACTION:
+            {
+                uint32_t variable_containers_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_tek_var_container_scan(packed, extra_mem))
+                    {
+                        break;
+                    }
+
+                    variable_containers_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(variable_containers_elem_count * sizeof(bcmolt_epon_oam_tek_var_container));
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_I2C_BSC_READ_REQUEST:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_I2C_BSC_READ_RESPONSE:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_I2C_BSC_WRITE_REQUEST:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_I2C_BSC_WRITE_RESPONSE:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_LOOP_DETECT:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_MULTICAST_REQUEST:
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tek_vendor_extended_get_request_count_vars(bcmolt_epon_oam_buf *buf)
+{
+    uint32_t count = 0;
+    uint32_t dummy = 0;
+    bcmolt_epon_oam_buf bufClone = *buf;
+    while (BCMOS_TRUE)
+    {
+        if (!bcmolt_epon_oam_tek_var_descriptor_scan(&bufClone, &dummy))
+        {
+            break;
+        }
+
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tek_vendor_extended_get_response_count_vars(bcmolt_epon_oam_buf *buf)
+{
+    uint32_t count = 0;
+    uint32_t dummy = 0;
+    bcmolt_epon_oam_buf bufClone = *buf;
+    while (BCMOS_TRUE)
+    {
+        if (!bcmolt_epon_oam_tek_var_container_scan(&bufClone, &dummy))
+        {
+            break;
+        }
+
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tek_vendor_extended_set_request_count_vars(bcmolt_epon_oam_buf *buf)
+{
+    uint32_t count = 0;
+    uint32_t dummy = 0;
+    bcmolt_epon_oam_buf bufClone = *buf;
+    while (BCMOS_TRUE)
+    {
+        if (!bcmolt_epon_oam_tek_var_container_scan(&bufClone, &dummy))
+        {
+            break;
+        }
+
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tek_vendor_extended_set_response_count_vars(bcmolt_epon_oam_buf *buf)
+{
+    uint32_t count = 0;
+    uint32_t dummy = 0;
+    bcmolt_epon_oam_buf bufClone = *buf;
+    while (BCMOS_TRUE)
+    {
+        if (!bcmolt_epon_oam_tek_set_resp_var_container_base_scan(&bufClone, &dummy))
+        {
+            break;
+        }
+
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tek_vendor_extended_unacked_action_count_variable_containers(bcmolt_epon_oam_buf *buf)
+{
+    uint32_t count = 0;
+    uint32_t dummy = 0;
+    bcmolt_epon_oam_buf bufClone = *buf;
+    while (BCMOS_TRUE)
+    {
+        if (!bcmolt_epon_oam_tek_var_container_scan(&bufClone, &dummy))
+        {
+            break;
+        }
+
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_pmc_file_base_pack(bcmolt_epon_oam_pmc_file_base *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_pmc_file_op_pack(this->file_op, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->file_op)
+    {
+        case BCMOLT_EPON_OAM_PMC_FILE_OP_HEAD:
+            {
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.head.file))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u32(buf, this->u.head.not_file))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.head.crc))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_PMC_FILE_OP_DATA:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.data.length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.data.block))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.data.data_count > 0) && (this->u.data.data == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"data\" of struct \"bcmolt_epon_oam_pmc_file_base_data\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.data.data, this->u.data.data_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_PMC_FILE_OP_END:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_PMC_FILE_OP_IDX:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.idx.idx))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_PMC_FILE_OP_ACK:
+            {
+                if (!bcmolt_epon_oam_pmc_file_op_pack(this->u.ack.frame_type_ack, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_pmc_error_code_pack(this->u.ack.error_code, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.ack.block_rx))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_pmc_file_base_get_packed_length(bcmolt_epon_oam_pmc_file_base *this)
+{
+    uint32_t count = 2;
+    switch (this->file_op)
+    {
+        case BCMOLT_EPON_OAM_PMC_FILE_OP_HEAD:
+            {
+                count += 10;
+            }
+            break;
+        case BCMOLT_EPON_OAM_PMC_FILE_OP_DATA:
+            {
+                count += 4 + this->u.data.data_count;
+            }
+            break;
+        case BCMOLT_EPON_OAM_PMC_FILE_OP_END:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_PMC_FILE_OP_IDX:
+            {
+                count += 2;
+            }
+            break;
+        case BCMOLT_EPON_OAM_PMC_FILE_OP_ACK:
+            {
+                count += 6;
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_pmc_file_base_unpack(bcmolt_epon_oam_pmc_file_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_pmc_file_op_unpack(&this->file_op, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->file_op)
+    {
+        case BCMOLT_EPON_OAM_PMC_FILE_OP_HEAD:
+            {
+                if (!bcmolt_epon_oam_buf_read_u32(buf, &this->u.head.file))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u32(buf, &this->u.head.not_file))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.head.crc))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_PMC_FILE_OP_DATA:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.data.length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.data.block))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                this->u.data.data_count = bcmolt_epon_oam_pmc_file_base_data_count_data(buf);
+                if ((this->u.data.data_count > 0) && (this->u.data.data == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"data\" of struct \"bcmolt_epon_oam_pmc_file_base_data\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.data.data = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.data.data_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.data.data, this->u.data.data_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_PMC_FILE_OP_END:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_PMC_FILE_OP_IDX:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.idx.idx))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_PMC_FILE_OP_ACK:
+            {
+                if (!bcmolt_epon_oam_pmc_file_op_unpack(&this->u.ack.frame_type_ack, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_pmc_error_code_unpack(&this->u.ack.error_code, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.ack.block_rx))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_pmc_file_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_pmc_file_op file_op;
+    if (!bcmolt_epon_oam_pmc_file_op_unpack(&file_op, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (file_op)
+    {
+        case BCMOLT_EPON_OAM_PMC_FILE_OP_HEAD:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_PMC_FILE_OP_DATA:
+            {
+                uint32_t data_elem_count = 0;
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                    {
+                        break;
+                    }
+
+                    data_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(data_elem_count * sizeof(uint8_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_PMC_FILE_OP_END:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_PMC_FILE_OP_IDX:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_PMC_FILE_OP_ACK:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_pmc_file_base_data_count_data(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_pmc_vendor_extended_base_pack(bcmolt_epon_oam_pmc_vendor_extended_base *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_pmc_op_code_pack(this->op, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->op)
+    {
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_FIRMWARE_UPDATE:
+            {
+                if (!bcmolt_epon_oam_pmc_file_base_pack(&this->u.firmware_update.file_info, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_ACKNOWLEDGE:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_AUTHENTICATE_ONU:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_ENCRYPTION_ENABLE_DISABLE:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_ENCRYPTION_KEY:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_GET_ONU_VERSIONS_REQUEST:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_GET_ONU_VERSIONS_RESPONSE:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_IGMP_SNOOPING_PACKETS:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_MAGIC_NUMBER:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_PHY_LOOP_BACK_CONTROL:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_PING_REQUEST:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_PING_RESPONSE:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_RE_REGISTER:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_REMOTE_ACCESS:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_SET_ALARM_THRESHOLDS:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_THRESHOLD_REPORT_VALUES:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_TURN_ONU_IN_TO_OFF_MODE:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_UNI_PORT_CONFIGURE:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_UNI_PORT_STATUS_REQUEST:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_UNI_PORT_STATUS_RESPONSE:
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_pmc_vendor_extended_base_get_packed_length(bcmolt_epon_oam_pmc_vendor_extended_base *this)
+{
+    uint32_t count = 1;
+    switch (this->op)
+    {
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_FIRMWARE_UPDATE:
+            {
+                count += bcmolt_epon_oam_pmc_file_base_get_packed_length(&this->u.firmware_update.file_info);
+            }
+            break;
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_ACKNOWLEDGE:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_AUTHENTICATE_ONU:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_ENCRYPTION_ENABLE_DISABLE:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_ENCRYPTION_KEY:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_GET_ONU_VERSIONS_REQUEST:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_GET_ONU_VERSIONS_RESPONSE:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_IGMP_SNOOPING_PACKETS:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_MAGIC_NUMBER:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_PHY_LOOP_BACK_CONTROL:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_PING_REQUEST:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_PING_RESPONSE:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_RE_REGISTER:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_REMOTE_ACCESS:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_SET_ALARM_THRESHOLDS:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_THRESHOLD_REPORT_VALUES:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_TURN_ONU_IN_TO_OFF_MODE:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_UNI_PORT_CONFIGURE:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_UNI_PORT_STATUS_REQUEST:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_UNI_PORT_STATUS_RESPONSE:
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_pmc_vendor_extended_base_unpack(bcmolt_epon_oam_pmc_vendor_extended_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_pmc_op_code_unpack(&this->op, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->op)
+    {
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_FIRMWARE_UPDATE:
+            {
+                if (!bcmolt_epon_oam_pmc_file_base_unpack(&this->u.firmware_update.file_info, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_ACKNOWLEDGE:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_AUTHENTICATE_ONU:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_ENCRYPTION_ENABLE_DISABLE:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_ENCRYPTION_KEY:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_GET_ONU_VERSIONS_REQUEST:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_GET_ONU_VERSIONS_RESPONSE:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_IGMP_SNOOPING_PACKETS:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_MAGIC_NUMBER:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_PHY_LOOP_BACK_CONTROL:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_PING_REQUEST:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_PING_RESPONSE:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_RE_REGISTER:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_REMOTE_ACCESS:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_SET_ALARM_THRESHOLDS:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_THRESHOLD_REPORT_VALUES:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_TURN_ONU_IN_TO_OFF_MODE:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_UNI_PORT_CONFIGURE:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_UNI_PORT_STATUS_REQUEST:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_UNI_PORT_STATUS_RESPONSE:
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_pmc_vendor_extended_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_pmc_op_code op;
+    if (!bcmolt_epon_oam_pmc_op_code_unpack(&op, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (op)
+    {
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_FIRMWARE_UPDATE:
+            {
+                if (!bcmolt_epon_oam_pmc_file_base_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_ACKNOWLEDGE:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_AUTHENTICATE_ONU:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_ENCRYPTION_ENABLE_DISABLE:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_ENCRYPTION_KEY:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_GET_ONU_VERSIONS_REQUEST:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_GET_ONU_VERSIONS_RESPONSE:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_IGMP_SNOOPING_PACKETS:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_MAGIC_NUMBER:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_PHY_LOOP_BACK_CONTROL:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_PING_REQUEST:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_PING_RESPONSE:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_RE_REGISTER:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_REMOTE_ACCESS:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_SET_ALARM_THRESHOLDS:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_THRESHOLD_REPORT_VALUES:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_TURN_ONU_IN_TO_OFF_MODE:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_UNI_PORT_CONFIGURE:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_UNI_PORT_STATUS_REQUEST:
+        case BCMOLT_EPON_OAM_PMC_OP_CODE_UNI_PORT_STATUS_RESPONSE:
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_vendor_extended_oam_base_pack(bcmolt_epon_oam_vendor_extended_oam_base *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_well_known_oui_pack(this->oui, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->oui)
+    {
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_CTC:
+            {
+                if (!bcmolt_epon_oam_ctc_vendor_extended_base_pack(&this->u.ctc.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_TEK:
+            {
+                if (!bcmolt_epon_oam_tek_vendor_extended_pack(&this->u.tek.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_PMC:
+            {
+                if (!bcmolt_epon_oam_pmc_vendor_extended_base_pack(&this->u.pmc.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DPOE:
+            {
+                if (!bcmolt_epon_oam_dpoe_vendor_extended_base_pack(&this->u.dpoe.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_KT:
+            {
+                if (!bcmolt_epon_oam_ctc_vendor_extended_base_pack(&this->u.kt.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DASAN:
+            {
+                if (!bcmolt_epon_oam_dasan_config_base_pack(&this->u.dasan.config, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_BRCM:
+            {
+                uint32_t preLenFieldPos;
+                uint32_t bytesAfterLenField;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.brcm.version))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.brcm.sequence_number))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.brcm.num_total_expected_packets))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+                /* skip over length field (we'll fill it in later) */
+                if (!bcmolt_epon_oam_buf_skip(buf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_brcm_oam_pdu_base_pack(&this->u.brcm.pdu, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+                if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u8(buf, bytesAfterLenField))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_SIEPON_A:
+            {
+                if (!bcmolt_epon_oam_dpoe_vendor_extended_base_pack(&this->u.siepon_a.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+                if ((this->u.def.unknown_count > 0) && (this->u.def.unknown == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"unknown\" of struct \"bcmolt_epon_oam_vendor_extended_oam_base_def\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.def.unknown, this->u.def.unknown_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_vendor_extended_oam_base_get_packed_length(bcmolt_epon_oam_vendor_extended_oam_base *this)
+{
+    uint32_t count = 3;
+    switch (this->oui)
+    {
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_CTC:
+            {
+                count += bcmolt_epon_oam_ctc_vendor_extended_base_get_packed_length(&this->u.ctc.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_TEK:
+            {
+                count += bcmolt_epon_oam_tek_vendor_extended_get_packed_length(&this->u.tek.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_PMC:
+            {
+                count += bcmolt_epon_oam_pmc_vendor_extended_base_get_packed_length(&this->u.pmc.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DPOE:
+            {
+                count += bcmolt_epon_oam_dpoe_vendor_extended_base_get_packed_length(&this->u.dpoe.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_KT:
+            {
+                count += bcmolt_epon_oam_ctc_vendor_extended_base_get_packed_length(&this->u.kt.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DASAN:
+            {
+                count += bcmolt_epon_oam_dasan_config_base_get_packed_length(&this->u.dasan.config);
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_BRCM:
+            {
+                count += 6 + bcmolt_epon_oam_brcm_oam_pdu_base_get_packed_length(&this->u.brcm.pdu);
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_SIEPON_A:
+            {
+                count += bcmolt_epon_oam_dpoe_vendor_extended_base_get_packed_length(&this->u.siepon_a.value);
+            }
+            break;
+        default:
+            {
+                count += this->u.def.unknown_count;
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_vendor_extended_oam_base_unpack(bcmolt_epon_oam_vendor_extended_oam_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_well_known_oui_unpack(&this->oui, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->oui)
+    {
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_CTC:
+            {
+                if (!bcmolt_epon_oam_ctc_vendor_extended_base_unpack(&this->u.ctc.value, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_TEK:
+            {
+                if (!bcmolt_epon_oam_tek_vendor_extended_unpack(&this->u.tek.value, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_PMC:
+            {
+                if (!bcmolt_epon_oam_pmc_vendor_extended_base_unpack(&this->u.pmc.value, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DPOE:
+            {
+                if (!bcmolt_epon_oam_dpoe_vendor_extended_base_unpack(&this->u.dpoe.value, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_KT:
+            {
+                if (!bcmolt_epon_oam_ctc_vendor_extended_base_unpack(&this->u.kt.value, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DASAN:
+            {
+                if (!bcmolt_epon_oam_dasan_config_base_unpack(&this->u.dasan.config, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_BRCM:
+            {
+                uint8_t length = 0;
+                bcmolt_epon_oam_buf postLenBuf;
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.brcm.version))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.brcm.sequence_number))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.brcm.num_total_expected_packets))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, length, buf->curr);
+                if (!bcmolt_epon_oam_brcm_oam_pdu_base_unpack(&this->u.brcm.pdu, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(buf, length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_SIEPON_A:
+            {
+                if (!bcmolt_epon_oam_dpoe_vendor_extended_base_unpack(&this->u.siepon_a.value, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+                this->u.def.unknown_count = bcmolt_epon_oam_vendor_extended_oam_base_def_count_unknown(buf);
+                if ((this->u.def.unknown_count > 0) && (this->u.def.unknown == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"unknown\" of struct \"bcmolt_epon_oam_vendor_extended_oam_base_def\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.def.unknown = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.def.unknown_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.def.unknown, this->u.def.unknown_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_vendor_extended_oam_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_well_known_oui oui;
+    if (!bcmolt_epon_oam_well_known_oui_unpack(&oui, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (oui)
+    {
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_CTC:
+            {
+                if (!bcmolt_epon_oam_ctc_vendor_extended_base_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_TEK:
+            {
+                if (!bcmolt_epon_oam_tek_vendor_extended_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_PMC:
+            {
+                if (!bcmolt_epon_oam_pmc_vendor_extended_base_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DPOE:
+            {
+                if (!bcmolt_epon_oam_dpoe_vendor_extended_base_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_KT:
+            {
+                if (!bcmolt_epon_oam_ctc_vendor_extended_base_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DASAN:
+            {
+                if (!bcmolt_epon_oam_dasan_config_base_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_BRCM:
+            {
+                bcmolt_epon_oam_buf postLenBuf;
+                uint8_t length;
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                bcmolt_epon_oam_buf_init(&postLenBuf, length, packed->curr);
+                if (!bcmolt_epon_oam_brcm_oam_pdu_base_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_SIEPON_A:
+            {
+                if (!bcmolt_epon_oam_dpoe_vendor_extended_base_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+                uint32_t unknown_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                    {
+                        break;
+                    }
+
+                    unknown_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(unknown_elem_count * sizeof(uint8_t));
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_vendor_extended_oam_base_def_count_unknown(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_pdu_content_pack(bcmolt_epon_oam_oam_pdu_content *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_oam_opcode_pack(this->code, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->code)
+    {
+        case BCMOLT_EPON_OAM_OAM_OPCODE_INFO:
+            {
+                uint32_t i0;
+                if ((this->u.info.tlvs_count > 0) && (this->u.info.tlvs == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"tlvs\" of struct \"bcmolt_epon_oam_oam_pdu_content_info\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i0 = 0; i0 < this->u.info.tlvs_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_info_tlv_base_pack(&this->u.info.tlvs[i0], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_OPCODE_EVENT_NOTIFICATION:
+            {
+                uint32_t i1;
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.event_notification.sequence_number))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.event_notification.tlvs_count > 0) && (this->u.event_notification.tlvs == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"tlvs\" of struct \"bcmolt_epon_oam_oam_pdu_content_event_notification\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i1 = 0; i1 < this->u.event_notification.tlvs_count; i1++)
+                {
+                    if (!bcmolt_epon_oam_link_event_tlv_base_pack(&this->u.event_notification.tlvs[i1], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_OPCODE_VAR_REQUEST:
+            {
+                uint32_t i2;
+                if ((this->u.var_request.vars_count > 0) && (this->u.var_request.vars == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vars\" of struct \"bcmolt_epon_oam_oam_pdu_content_var_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i2 = 0; i2 < this->u.var_request.vars_count; i2++)
+                {
+                    if (!bcmolt_epon_oam_var_descriptor_base_pack(&this->u.var_request.vars[i2], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_OPCODE_VAR_RESPONSE:
+            {
+                uint32_t i3;
+                if ((this->u.var_response.vars_count > 0) && (this->u.var_response.vars == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vars\" of struct \"bcmolt_epon_oam_oam_pdu_content_var_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i3 = 0; i3 < this->u.var_response.vars_count; i3++)
+                {
+                    if (!bcmolt_epon_oam_var_container_base_pack(&this->u.var_response.vars[i3], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_OPCODE_LOOPBACK_CONTROL:
+            {
+                if (!bcmolt_epon_oam_remote_loopback_command_pack(this->u.loopback_control.command, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_OPCODE_ORGANIZATION_SPECIFIC:
+            {
+                if (!bcmolt_epon_oam_vendor_extended_oam_base_pack(&this->u.organization_specific.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_oam_pdu_content_get_packed_length(bcmolt_epon_oam_oam_pdu_content *this)
+{
+    uint32_t count = 1;
+    switch (this->code)
+    {
+        case BCMOLT_EPON_OAM_OAM_OPCODE_INFO:
+            {
+                uint32_t i0;
+                if ((this->u.info.tlvs_count > 0) && (this->u.info.tlvs == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"tlvs_count\" of struct \"bcmolt_epon_oam_oam_pdu_content\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return 0;
+                }
+
+                for (i0 = 0; i0 < this->u.info.tlvs_count; i0++)
+                {
+                    count += bcmolt_epon_oam_info_tlv_base_get_packed_length(&this->u.info.tlvs[i0]);
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_OPCODE_EVENT_NOTIFICATION:
+            {
+                uint32_t i1;
+                count += 2;
+                if ((this->u.event_notification.tlvs_count > 0) && (this->u.event_notification.tlvs == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"tlvs_count\" of struct \"bcmolt_epon_oam_oam_pdu_content\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return 0;
+                }
+
+                for (i1 = 0; i1 < this->u.event_notification.tlvs_count; i1++)
+                {
+                    count += bcmolt_epon_oam_link_event_tlv_base_get_packed_length(&this->u.event_notification.tlvs[i1]);
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_OPCODE_VAR_REQUEST:
+            {
+                uint32_t i2;
+                if ((this->u.var_request.vars_count > 0) && (this->u.var_request.vars == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vars_count\" of struct \"bcmolt_epon_oam_oam_pdu_content\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return 0;
+                }
+
+                for (i2 = 0; i2 < this->u.var_request.vars_count; i2++)
+                {
+                    count += bcmolt_epon_oam_var_descriptor_base_get_packed_length(&this->u.var_request.vars[i2]);
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_OPCODE_VAR_RESPONSE:
+            {
+                uint32_t i3;
+                if ((this->u.var_response.vars_count > 0) && (this->u.var_response.vars == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vars_count\" of struct \"bcmolt_epon_oam_oam_pdu_content\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return 0;
+                }
+
+                for (i3 = 0; i3 < this->u.var_response.vars_count; i3++)
+                {
+                    count += bcmolt_epon_oam_var_container_base_get_packed_length(&this->u.var_response.vars[i3]);
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_OPCODE_LOOPBACK_CONTROL:
+            {
+                count += 1;
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_OPCODE_ORGANIZATION_SPECIFIC:
+            {
+                count += bcmolt_epon_oam_vendor_extended_oam_base_get_packed_length(&this->u.organization_specific.value);
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_pdu_content_unpack(bcmolt_epon_oam_oam_pdu_content *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_oam_opcode_unpack(&this->code, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->code)
+    {
+        case BCMOLT_EPON_OAM_OAM_OPCODE_INFO:
+            {
+                uint32_t i0;
+                this->u.info.tlvs_count = bcmolt_epon_oam_oam_pdu_content_info_count_tlvs(buf);
+                if ((this->u.info.tlvs_count > 0) && (this->u.info.tlvs == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"tlvs\" of struct \"bcmolt_epon_oam_oam_pdu_content_info\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.info.tlvs = (bcmolt_epon_oam_info_tlv_base *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.info.tlvs_count * sizeof(bcmolt_epon_oam_info_tlv_base));
+                    }
+                }
+
+                for (i0 = 0; i0 < this->u.info.tlvs_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_info_tlv_base_unpack(&this->u.info.tlvs[i0], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_OPCODE_EVENT_NOTIFICATION:
+            {
+                uint32_t i1;
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.event_notification.sequence_number))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                this->u.event_notification.tlvs_count = bcmolt_epon_oam_oam_pdu_content_event_notification_count_tlvs(buf);
+                if ((this->u.event_notification.tlvs_count > 0) && (this->u.event_notification.tlvs == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"tlvs\" of struct \"bcmolt_epon_oam_oam_pdu_content_event_notification\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.event_notification.tlvs = (bcmolt_epon_oam_link_event_tlv_base *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.event_notification.tlvs_count * sizeof(bcmolt_epon_oam_link_event_tlv_base));
+                    }
+                }
+
+                for (i1 = 0; i1 < this->u.event_notification.tlvs_count; i1++)
+                {
+                    if (!bcmolt_epon_oam_link_event_tlv_base_unpack(&this->u.event_notification.tlvs[i1], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_OPCODE_VAR_REQUEST:
+            {
+                uint32_t i2;
+                this->u.var_request.vars_count = bcmolt_epon_oam_oam_pdu_content_var_request_count_vars(buf);
+                if ((this->u.var_request.vars_count > 0) && (this->u.var_request.vars == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vars\" of struct \"bcmolt_epon_oam_oam_pdu_content_var_request\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.var_request.vars = (bcmolt_epon_oam_var_descriptor_base *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.var_request.vars_count * sizeof(bcmolt_epon_oam_var_descriptor_base));
+                    }
+                }
+
+                for (i2 = 0; i2 < this->u.var_request.vars_count; i2++)
+                {
+                    if (!bcmolt_epon_oam_var_descriptor_base_unpack(&this->u.var_request.vars[i2], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_OPCODE_VAR_RESPONSE:
+            {
+                uint32_t i3;
+                this->u.var_response.vars_count = bcmolt_epon_oam_oam_pdu_content_var_response_count_vars(buf);
+                if ((this->u.var_response.vars_count > 0) && (this->u.var_response.vars == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vars\" of struct \"bcmolt_epon_oam_oam_pdu_content_var_response\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.var_response.vars = (bcmolt_epon_oam_var_container_base *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.var_response.vars_count * sizeof(bcmolt_epon_oam_var_container_base));
+                    }
+                }
+
+                for (i3 = 0; i3 < this->u.var_response.vars_count; i3++)
+                {
+                    if (!bcmolt_epon_oam_var_container_base_unpack(&this->u.var_response.vars[i3], buf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_OPCODE_LOOPBACK_CONTROL:
+            {
+                if (!bcmolt_epon_oam_remote_loopback_command_unpack(&this->u.loopback_control.command, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_OPCODE_ORGANIZATION_SPECIFIC:
+            {
+                if (!bcmolt_epon_oam_vendor_extended_oam_base_unpack(&this->u.organization_specific.value, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_pdu_content_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_oam_opcode code;
+    if (!bcmolt_epon_oam_oam_opcode_unpack(&code, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (code)
+    {
+        case BCMOLT_EPON_OAM_OAM_OPCODE_INFO:
+            {
+                uint32_t tlvs_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_info_tlv_base_scan(packed, extra_mem))
+                    {
+                        break;
+                    }
+
+                    tlvs_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(tlvs_elem_count * sizeof(bcmolt_epon_oam_info_tlv_base));
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_OPCODE_EVENT_NOTIFICATION:
+            {
+                uint32_t tlvs_elem_count = 0;
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_link_event_tlv_base_scan(packed, extra_mem))
+                    {
+                        break;
+                    }
+
+                    tlvs_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(tlvs_elem_count * sizeof(bcmolt_epon_oam_link_event_tlv_base));
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_OPCODE_VAR_REQUEST:
+            {
+                uint32_t vars_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_var_descriptor_base_scan(packed, extra_mem))
+                    {
+                        break;
+                    }
+
+                    vars_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(vars_elem_count * sizeof(bcmolt_epon_oam_var_descriptor_base));
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_OPCODE_VAR_RESPONSE:
+            {
+                uint32_t vars_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_var_container_base_scan(packed, extra_mem))
+                    {
+                        break;
+                    }
+
+                    vars_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(vars_elem_count * sizeof(bcmolt_epon_oam_var_container_base));
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_OPCODE_LOOPBACK_CONTROL:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_OPCODE_ORGANIZATION_SPECIFIC:
+            {
+                if (!bcmolt_epon_oam_vendor_extended_oam_base_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_oam_pdu_content_info_count_tlvs(bcmolt_epon_oam_buf *buf)
+{
+    uint32_t count = 0;
+    uint32_t dummy = 0;
+    bcmolt_epon_oam_buf bufClone = *buf;
+    while (BCMOS_TRUE)
+    {
+        if (!bcmolt_epon_oam_info_tlv_base_scan(&bufClone, &dummy))
+        {
+            break;
+        }
+
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_oam_pdu_content_event_notification_count_tlvs(bcmolt_epon_oam_buf *buf)
+{
+    uint32_t count = 0;
+    uint32_t dummy = 0;
+    bcmolt_epon_oam_buf bufClone = *buf;
+    while (BCMOS_TRUE)
+    {
+        if (!bcmolt_epon_oam_link_event_tlv_base_scan(&bufClone, &dummy))
+        {
+            break;
+        }
+
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_oam_pdu_content_var_request_count_vars(bcmolt_epon_oam_buf *buf)
+{
+    uint32_t count = 0;
+    uint32_t dummy = 0;
+    bcmolt_epon_oam_buf bufClone = *buf;
+    while (BCMOS_TRUE)
+    {
+        if (!bcmolt_epon_oam_var_descriptor_base_scan(&bufClone, &dummy))
+        {
+            break;
+        }
+
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_oam_pdu_content_var_response_count_vars(bcmolt_epon_oam_buf *buf)
+{
+    uint32_t count = 0;
+    uint32_t dummy = 0;
+    bcmolt_epon_oam_buf bufClone = *buf;
+    while (BCMOS_TRUE)
+    {
+        if (!bcmolt_epon_oam_var_container_base_scan(&bufClone, &dummy))
+        {
+            break;
+        }
+
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_master_end_point_pack(bcmolt_epon_oam_master_end_point *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_master_end_point_type_pack(this->type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_master_end_point_unpack(bcmolt_epon_oam_master_end_point *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_master_end_point_type_unpack(&this->type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_master_end_point_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 2);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_onu_master_oam_content_pack(bcmolt_epon_oam_onu_master_oam_content *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->link))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_oam_pdu_content_pack(&this->oam_content, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_onu_master_oam_content_get_packed_length(bcmolt_epon_oam_onu_master_oam_content *this)
+{
+    return 2 + bcmolt_epon_oam_oam_pdu_content_get_packed_length(&this->oam_content);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_onu_master_oam_content_unpack(bcmolt_epon_oam_onu_master_oam_content *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->link))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_oam_pdu_content_unpack(&this->oam_content, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_onu_master_oam_content_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_skip(packed, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_oam_pdu_content_scan(packed, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_info_vendor_oui_pack(bcmolt_epon_oam_oam_reg_info_vendor_oui *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u24(buf, this->oui))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_oam_registration_action_pack(this->action, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->length_reserved))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_info_vendor_oui_unpack(bcmolt_epon_oam_oam_reg_info_vendor_oui *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u24(buf, &this->oui))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_oam_registration_action_unpack(&this->action, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->length_reserved))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_info_vendor_oui_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 6);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_info_vendor_pack(bcmolt_epon_oam_oam_reg_info_vendor *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t preLenFieldPos;
+    uint32_t bytesAfterLenField;
+    if (!bcmolt_epon_oam_oam_registration_action_pack(this->action, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+    /* skip over length field (we'll fill it in later) */
+    if (!bcmolt_epon_oam_buf_skip(buf, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->action)
+    {
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_CONT:
+            {
+                uint8_t i0;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.cont.vendor_oui_reg_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.cont.vendor_oui_reg_count > 0) && (this->u.cont.vendor_oui_reg == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vendor_oui_reg\" of struct \"bcmolt_epon_oam_oam_reg_info_vendor_cont\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i0 = 0; i0 < this->u.cont.vendor_oui_reg_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_oam_reg_info_vendor_oui_pack(&this->u.cont.vendor_oui_reg[i0], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REG:
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REGISTER_AND_CONTINUE:
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER:
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER_AND_CONTINUE:
+        default:
+            {
+            }
+            break;
+    }
+
+    bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint16_t));
+    if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, bytesAfterLenField))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint16_t))))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_oam_reg_info_vendor_get_packed_length(bcmolt_epon_oam_oam_reg_info_vendor *this)
+{
+    uint32_t count = 3;
+    switch (this->action)
+    {
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_CONT:
+            {
+                count += 1 + (6 * this->u.cont.vendor_oui_reg_count);
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REG:
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REGISTER_AND_CONTINUE:
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER:
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER_AND_CONTINUE:
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_info_vendor_unpack(bcmolt_epon_oam_oam_reg_info_vendor *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint16_t length = 0;
+    bcmolt_epon_oam_buf postLenBuf;
+    if (!bcmolt_epon_oam_oam_registration_action_unpack(&this->action, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, buf->curr);
+    switch (this->action)
+    {
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_CONT:
+            {
+                uint8_t i0;
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.cont.vendor_oui_reg_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.cont.vendor_oui_reg_count > 0) && (this->u.cont.vendor_oui_reg == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vendor_oui_reg\" of struct \"bcmolt_epon_oam_oam_reg_info_vendor_cont\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.cont.vendor_oui_reg = (bcmolt_epon_oam_oam_reg_info_vendor_oui *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.cont.vendor_oui_reg_count * sizeof(bcmolt_epon_oam_oam_reg_info_vendor_oui));
+                    }
+                }
+
+                for (i0 = 0; i0 < this->u.cont.vendor_oui_reg_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_oam_reg_info_vendor_oui_unpack(&this->u.cont.vendor_oui_reg[i0], &postLenBuf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REG:
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REGISTER_AND_CONTINUE:
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER:
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER_AND_CONTINUE:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(buf, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_info_vendor_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_oam_registration_action action;
+    bcmolt_epon_oam_buf postLenBuf;
+    uint16_t length;
+    if (!bcmolt_epon_oam_oam_registration_action_unpack(&action, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, packed->curr);
+    switch (action)
+    {
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_CONT:
+            {
+                uint8_t vendor_oui_reg_count;
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &vendor_oui_reg_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_oam_reg_info_vendor_oui) * vendor_oui_reg_count);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, vendor_oui_reg_count * 6))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REG:
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REGISTER_AND_CONTINUE:
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER:
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER_AND_CONTINUE:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_info_tlv_pack(bcmolt_epon_oam_oam_reg_info_tlv *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t preLenFieldPos;
+    uint32_t bytesAfterLenField;
+    if (!bcmolt_epon_oam_oam_reg_info_type_pack(this->type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+    /* skip over length field (we'll fill it in later) */
+    if (!bcmolt_epon_oam_buf_skip(buf, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->type)
+    {
+        case BCMOLT_EPON_OAM_OAM_REG_INFO_TYPE_VENDOR:
+            {
+                if (!bcmolt_epon_oam_oam_reg_info_vendor_pack(&this->u.vendor.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+                if (!bcmolt_epon_oam_oam_registration_action_pack(this->u.def.action, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.def.length_reserved))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint16_t));
+    if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, bytesAfterLenField))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint16_t))))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_oam_reg_info_tlv_get_packed_length(bcmolt_epon_oam_oam_reg_info_tlv *this)
+{
+    uint32_t count = 3;
+    switch (this->type)
+    {
+        case BCMOLT_EPON_OAM_OAM_REG_INFO_TYPE_VENDOR:
+            {
+                count += bcmolt_epon_oam_oam_reg_info_vendor_get_packed_length(&this->u.vendor.value);
+            }
+            break;
+        default:
+            {
+                count += 3;
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_info_tlv_unpack(bcmolt_epon_oam_oam_reg_info_tlv *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint16_t length = 0;
+    bcmolt_epon_oam_buf postLenBuf;
+    if (!bcmolt_epon_oam_oam_reg_info_type_unpack(&this->type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, buf->curr);
+    switch (this->type)
+    {
+        case BCMOLT_EPON_OAM_OAM_REG_INFO_TYPE_VENDOR:
+            {
+                if (!bcmolt_epon_oam_oam_reg_info_vendor_unpack(&this->u.vendor.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+                if (!bcmolt_epon_oam_oam_registration_action_unpack(&this->u.def.action, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.def.length_reserved))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(buf, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_info_tlv_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_oam_reg_info_type type;
+    bcmolt_epon_oam_buf postLenBuf;
+    uint16_t length;
+    if (!bcmolt_epon_oam_oam_reg_info_type_unpack(&type, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, packed->curr);
+    switch (type)
+    {
+        case BCMOLT_EPON_OAM_OAM_REG_INFO_TYPE_VENDOR:
+            {
+                if (!bcmolt_epon_oam_oam_reg_info_vendor_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_info_cont_pack(bcmolt_epon_oam_oam_reg_info_cont *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t i0;
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->info_reg_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->info_reg_count > 0) && (this->info_reg == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"info_reg\" of struct \"bcmolt_epon_oam_oam_reg_info_cont\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->info_reg_count; i0++)
+    {
+        if (!bcmolt_epon_oam_oam_reg_info_tlv_pack(&this->info_reg[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_oam_reg_info_cont_get_packed_length(bcmolt_epon_oam_oam_reg_info_cont *this)
+{
+    uint32_t count = 1;
+    uint32_t i0;
+    if ((this->info_reg_count > 0) && (this->info_reg == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"info_reg_count\" of struct \"bcmolt_epon_oam_oam_reg_info_cont\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return 0;
+    }
+
+    for (i0 = 0; i0 < this->info_reg_count; i0++)
+    {
+        count += bcmolt_epon_oam_oam_reg_info_tlv_get_packed_length(&this->info_reg[i0]);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_info_cont_unpack(bcmolt_epon_oam_oam_reg_info_cont *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint8_t i0;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->info_reg_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->info_reg_count > 0) && (this->info_reg == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"info_reg\" of struct \"bcmolt_epon_oam_oam_reg_info_cont\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->info_reg = (bcmolt_epon_oam_oam_reg_info_tlv *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->info_reg_count * sizeof(bcmolt_epon_oam_oam_reg_info_tlv));
+        }
+    }
+
+    for (i0 = 0; i0 < this->info_reg_count; i0++)
+    {
+        if (!bcmolt_epon_oam_oam_reg_info_tlv_unpack(&this->info_reg[i0], buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_info_cont_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    uint8_t info_reg_count;
+    uint8_t i0;
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &info_reg_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_oam_reg_info_tlv) * info_reg_count);
+    for (i0 = 0; i0 < info_reg_count; i0++)
+    {
+        if (!bcmolt_epon_oam_oam_reg_info_tlv_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_info_pack(bcmolt_epon_oam_oam_reg_info *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t preLenFieldPos;
+    uint32_t bytesAfterLenField;
+    if (!bcmolt_epon_oam_oam_registration_action_pack(this->action, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+    /* skip over length field (we'll fill it in later) */
+    if (!bcmolt_epon_oam_buf_skip(buf, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->action)
+    {
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_CONT:
+            {
+                if (!bcmolt_epon_oam_oam_reg_info_cont_pack(&this->u.cont.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_info_cont_pack(&this->u.register_and_continue.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_info_cont_pack(&this->u.unregister_and_continue.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REG:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER:
+            {
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint16_t));
+    if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, bytesAfterLenField))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint16_t))))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_oam_reg_info_get_packed_length(bcmolt_epon_oam_oam_reg_info *this)
+{
+    uint32_t count = 3;
+    switch (this->action)
+    {
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_CONT:
+            {
+                count += bcmolt_epon_oam_oam_reg_info_cont_get_packed_length(&this->u.cont.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REGISTER_AND_CONTINUE:
+            {
+                count += bcmolt_epon_oam_oam_reg_info_cont_get_packed_length(&this->u.register_and_continue.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER_AND_CONTINUE:
+            {
+                count += bcmolt_epon_oam_oam_reg_info_cont_get_packed_length(&this->u.unregister_and_continue.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REG:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER:
+            {
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_info_unpack(bcmolt_epon_oam_oam_reg_info *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint16_t length = 0;
+    bcmolt_epon_oam_buf postLenBuf;
+    if (!bcmolt_epon_oam_oam_registration_action_unpack(&this->action, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, buf->curr);
+    switch (this->action)
+    {
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_CONT:
+            {
+                if (!bcmolt_epon_oam_oam_reg_info_cont_unpack(&this->u.cont.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_info_cont_unpack(&this->u.register_and_continue.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_info_cont_unpack(&this->u.unregister_and_continue.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REG:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER:
+            {
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(buf, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_info_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_oam_registration_action action;
+    bcmolt_epon_oam_buf postLenBuf;
+    uint16_t length;
+    if (!bcmolt_epon_oam_oam_registration_action_unpack(&action, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, packed->curr);
+    switch (action)
+    {
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_CONT:
+            {
+                if (!bcmolt_epon_oam_oam_reg_info_cont_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_info_cont_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_info_cont_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REG:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER:
+            {
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_ctc_var_desc_pack(bcmolt_epon_oam_oam_reg_ctc_var_desc *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_ctc_branch_pack(this->branch, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->branch)
+    {
+        case BCMOLT_EPON_OAM_CTC_BRANCH_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_var_leaf_attribute_pack(this->u.attribute.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_ACTION:
+            {
+                if (!bcmolt_epon_oam_var_leaf_action_pack(this->u.action.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_EXT_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_ctc_leaf_ext_attribute_pack(this->u.ext_attribute.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_EXT_ACTION:
+            {
+                if (!bcmolt_epon_oam_ctc_leaf_ext_action_pack(this->u.ext_action.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_KTATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_ktleaf_attribute_pack(this->u.ktattribute.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_KTACTION:
+            {
+                if (!bcmolt_epon_oam_ktleaf_action_pack(this->u.ktaction.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_END:
+        case BCMOLT_EPON_OAM_CTC_BRANCH_MANAGEMENT_OBJECT:
+        case BCMOLT_EPON_OAM_CTC_BRANCH_OLD_MANAGEMENT_OBJECT:
+        default:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.def.leaf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_ctc_var_desc_unpack(bcmolt_epon_oam_oam_reg_ctc_var_desc *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_ctc_branch_unpack(&this->branch, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->branch)
+    {
+        case BCMOLT_EPON_OAM_CTC_BRANCH_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_var_leaf_attribute_unpack(&this->u.attribute.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_ACTION:
+            {
+                if (!bcmolt_epon_oam_var_leaf_action_unpack(&this->u.action.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_EXT_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_ctc_leaf_ext_attribute_unpack(&this->u.ext_attribute.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_EXT_ACTION:
+            {
+                if (!bcmolt_epon_oam_ctc_leaf_ext_action_unpack(&this->u.ext_action.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_KTATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_ktleaf_attribute_unpack(&this->u.ktattribute.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_KTACTION:
+            {
+                if (!bcmolt_epon_oam_ktleaf_action_unpack(&this->u.ktaction.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_BRANCH_END:
+        case BCMOLT_EPON_OAM_CTC_BRANCH_MANAGEMENT_OBJECT:
+        case BCMOLT_EPON_OAM_CTC_BRANCH_OLD_MANAGEMENT_OBJECT:
+        default:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.def.leaf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_ctc_var_desc_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 3);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_ctc_variable_pack(bcmolt_epon_oam_oam_reg_ctc_variable *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_oam_reg_ctc_var_desc_pack(&this->descriptor, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_oam_registration_action_pack(this->action, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->length_reserved))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_ctc_variable_unpack(bcmolt_epon_oam_oam_reg_ctc_variable *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_oam_reg_ctc_var_desc_unpack(&this->descriptor, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_oam_registration_action_unpack(&this->action, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->length_reserved))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_ctc_variable_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 6);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_ctc_variable_list_pack(bcmolt_epon_oam_oam_reg_ctc_variable_list *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t i0;
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->variable_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->variable_count > 0) && (this->variables == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"variables\" of struct \"bcmolt_epon_oam_oam_reg_ctc_variable_list\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->variable_count; i0++)
+    {
+        if (!bcmolt_epon_oam_oam_reg_ctc_variable_pack(&this->variables[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_oam_reg_ctc_variable_list_get_packed_length(bcmolt_epon_oam_oam_reg_ctc_variable_list *this)
+{
+    return 1 + (6 * this->variable_count);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_ctc_variable_list_unpack(bcmolt_epon_oam_oam_reg_ctc_variable_list *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint8_t i0;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->variable_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->variable_count > 0) && (this->variables == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"variables\" of struct \"bcmolt_epon_oam_oam_reg_ctc_variable_list\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->variables = (bcmolt_epon_oam_oam_reg_ctc_variable *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->variable_count * sizeof(bcmolt_epon_oam_oam_reg_ctc_variable));
+        }
+    }
+
+    for (i0 = 0; i0 < this->variable_count; i0++)
+    {
+        if (!bcmolt_epon_oam_oam_reg_ctc_variable_unpack(&this->variables[i0], buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_ctc_variable_list_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    uint8_t variable_count;
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &variable_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_oam_reg_ctc_variable) * variable_count);
+    if (!bcmolt_epon_oam_buf_skip(packed, variable_count * 6))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_ctc_op_variable_pack(bcmolt_epon_oam_oam_reg_ctc_op_variable *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t preLenFieldPos;
+    uint32_t bytesAfterLenField;
+    if (!bcmolt_epon_oam_oam_registration_action_pack(this->action, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+    /* skip over length field (we'll fill it in later) */
+    if (!bcmolt_epon_oam_buf_skip(buf, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->action)
+    {
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_CONT:
+            {
+                if (!bcmolt_epon_oam_oam_reg_ctc_variable_list_pack(&this->u.cont.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_ctc_variable_list_pack(&this->u.register_and_continue.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_ctc_variable_list_pack(&this->u.unregister_and_continue.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REG:
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER:
+        default:
+            {
+            }
+            break;
+    }
+
+    bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint16_t));
+    if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, bytesAfterLenField))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint16_t))))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_oam_reg_ctc_op_variable_get_packed_length(bcmolt_epon_oam_oam_reg_ctc_op_variable *this)
+{
+    uint32_t count = 3;
+    switch (this->action)
+    {
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_CONT:
+            {
+                count += bcmolt_epon_oam_oam_reg_ctc_variable_list_get_packed_length(&this->u.cont.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REGISTER_AND_CONTINUE:
+            {
+                count += bcmolt_epon_oam_oam_reg_ctc_variable_list_get_packed_length(&this->u.register_and_continue.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER_AND_CONTINUE:
+            {
+                count += bcmolt_epon_oam_oam_reg_ctc_variable_list_get_packed_length(&this->u.unregister_and_continue.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REG:
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER:
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_ctc_op_variable_unpack(bcmolt_epon_oam_oam_reg_ctc_op_variable *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint16_t length = 0;
+    bcmolt_epon_oam_buf postLenBuf;
+    if (!bcmolt_epon_oam_oam_registration_action_unpack(&this->action, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, buf->curr);
+    switch (this->action)
+    {
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_CONT:
+            {
+                if (!bcmolt_epon_oam_oam_reg_ctc_variable_list_unpack(&this->u.cont.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_ctc_variable_list_unpack(&this->u.register_and_continue.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_ctc_variable_list_unpack(&this->u.unregister_and_continue.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REG:
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(buf, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_ctc_op_variable_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_oam_registration_action action;
+    bcmolt_epon_oam_buf postLenBuf;
+    uint16_t length;
+    if (!bcmolt_epon_oam_oam_registration_action_unpack(&action, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, packed->curr);
+    switch (action)
+    {
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_CONT:
+            {
+                if (!bcmolt_epon_oam_oam_reg_ctc_variable_list_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_ctc_variable_list_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_ctc_variable_list_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REG:
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_ctc_opcode_pack(bcmolt_epon_oam_oam_reg_ctc_opcode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t preLenFieldPos;
+    uint32_t bytesAfterLenField;
+    if (!bcmolt_epon_oam_ctc_opcode_pack(this->opcode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+    /* skip over length field (we'll fill it in later) */
+    if (!bcmolt_epon_oam_buf_skip(buf, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->opcode)
+    {
+        case BCMOLT_EPON_OAM_CTC_OPCODE_GET_REQUEST:
+            {
+                if (!bcmolt_epon_oam_oam_reg_ctc_op_variable_pack(&this->u.get_request.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_OPCODE_SET_REQUEST:
+            {
+                if (!bcmolt_epon_oam_oam_reg_ctc_op_variable_pack(&this->u.set_request.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_OPCODE_CHURNING:
+        case BCMOLT_EPON_OAM_CTC_OPCODE_DBA:
+        case BCMOLT_EPON_OAM_CTC_OPCODE_EVENT:
+        case BCMOLT_EPON_OAM_CTC_OPCODE_GET_RESPONSE:
+        case BCMOLT_EPON_OAM_CTC_OPCODE_KTONU_EVENT:
+        case BCMOLT_EPON_OAM_CTC_OPCODE_ONU_AUTHENTICATION:
+        case BCMOLT_EPON_OAM_CTC_OPCODE_SET_RESPONSE:
+        case BCMOLT_EPON_OAM_CTC_OPCODE_SOFTWARE_DOWNLOAD:
+        default:
+            {
+                if (!bcmolt_epon_oam_oam_registration_action_pack(this->u.def.action, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.def.length_reserved))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint16_t));
+    if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, bytesAfterLenField))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint16_t))))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_oam_reg_ctc_opcode_get_packed_length(bcmolt_epon_oam_oam_reg_ctc_opcode *this)
+{
+    uint32_t count = 3;
+    switch (this->opcode)
+    {
+        case BCMOLT_EPON_OAM_CTC_OPCODE_GET_REQUEST:
+            {
+                count += bcmolt_epon_oam_oam_reg_ctc_op_variable_get_packed_length(&this->u.get_request.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_OPCODE_SET_REQUEST:
+            {
+                count += bcmolt_epon_oam_oam_reg_ctc_op_variable_get_packed_length(&this->u.set_request.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_OPCODE_CHURNING:
+        case BCMOLT_EPON_OAM_CTC_OPCODE_DBA:
+        case BCMOLT_EPON_OAM_CTC_OPCODE_EVENT:
+        case BCMOLT_EPON_OAM_CTC_OPCODE_GET_RESPONSE:
+        case BCMOLT_EPON_OAM_CTC_OPCODE_KTONU_EVENT:
+        case BCMOLT_EPON_OAM_CTC_OPCODE_ONU_AUTHENTICATION:
+        case BCMOLT_EPON_OAM_CTC_OPCODE_SET_RESPONSE:
+        case BCMOLT_EPON_OAM_CTC_OPCODE_SOFTWARE_DOWNLOAD:
+        default:
+            {
+                count += 3;
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_ctc_opcode_unpack(bcmolt_epon_oam_oam_reg_ctc_opcode *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint16_t length = 0;
+    bcmolt_epon_oam_buf postLenBuf;
+    if (!bcmolt_epon_oam_ctc_opcode_unpack(&this->opcode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, buf->curr);
+    switch (this->opcode)
+    {
+        case BCMOLT_EPON_OAM_CTC_OPCODE_GET_REQUEST:
+            {
+                if (!bcmolt_epon_oam_oam_reg_ctc_op_variable_unpack(&this->u.get_request.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_OPCODE_SET_REQUEST:
+            {
+                if (!bcmolt_epon_oam_oam_reg_ctc_op_variable_unpack(&this->u.set_request.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_OPCODE_CHURNING:
+        case BCMOLT_EPON_OAM_CTC_OPCODE_DBA:
+        case BCMOLT_EPON_OAM_CTC_OPCODE_EVENT:
+        case BCMOLT_EPON_OAM_CTC_OPCODE_GET_RESPONSE:
+        case BCMOLT_EPON_OAM_CTC_OPCODE_KTONU_EVENT:
+        case BCMOLT_EPON_OAM_CTC_OPCODE_ONU_AUTHENTICATION:
+        case BCMOLT_EPON_OAM_CTC_OPCODE_SET_RESPONSE:
+        case BCMOLT_EPON_OAM_CTC_OPCODE_SOFTWARE_DOWNLOAD:
+        default:
+            {
+                if (!bcmolt_epon_oam_oam_registration_action_unpack(&this->u.def.action, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.def.length_reserved))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(buf, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_ctc_opcode_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_ctc_opcode opcode;
+    bcmolt_epon_oam_buf postLenBuf;
+    uint16_t length;
+    if (!bcmolt_epon_oam_ctc_opcode_unpack(&opcode, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, packed->curr);
+    switch (opcode)
+    {
+        case BCMOLT_EPON_OAM_CTC_OPCODE_GET_REQUEST:
+            {
+                if (!bcmolt_epon_oam_oam_reg_ctc_op_variable_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_OPCODE_SET_REQUEST:
+            {
+                if (!bcmolt_epon_oam_oam_reg_ctc_op_variable_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_CTC_OPCODE_CHURNING:
+        case BCMOLT_EPON_OAM_CTC_OPCODE_DBA:
+        case BCMOLT_EPON_OAM_CTC_OPCODE_EVENT:
+        case BCMOLT_EPON_OAM_CTC_OPCODE_GET_RESPONSE:
+        case BCMOLT_EPON_OAM_CTC_OPCODE_KTONU_EVENT:
+        case BCMOLT_EPON_OAM_CTC_OPCODE_ONU_AUTHENTICATION:
+        case BCMOLT_EPON_OAM_CTC_OPCODE_SET_RESPONSE:
+        case BCMOLT_EPON_OAM_CTC_OPCODE_SOFTWARE_DOWNLOAD:
+        default:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_ctc_cont_pack(bcmolt_epon_oam_oam_reg_ctc_cont *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t i0;
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->opcode_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->opcode_count > 0) && (this->opcodes == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"opcodes\" of struct \"bcmolt_epon_oam_oam_reg_ctc_cont\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->opcode_count; i0++)
+    {
+        if (!bcmolt_epon_oam_oam_reg_ctc_opcode_pack(&this->opcodes[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_oam_reg_ctc_cont_get_packed_length(bcmolt_epon_oam_oam_reg_ctc_cont *this)
+{
+    uint32_t count = 1;
+    uint32_t i0;
+    if ((this->opcode_count > 0) && (this->opcodes == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"opcode_count\" of struct \"bcmolt_epon_oam_oam_reg_ctc_cont\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return 0;
+    }
+
+    for (i0 = 0; i0 < this->opcode_count; i0++)
+    {
+        count += bcmolt_epon_oam_oam_reg_ctc_opcode_get_packed_length(&this->opcodes[i0]);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_ctc_cont_unpack(bcmolt_epon_oam_oam_reg_ctc_cont *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint8_t i0;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->opcode_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->opcode_count > 0) && (this->opcodes == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"opcodes\" of struct \"bcmolt_epon_oam_oam_reg_ctc_cont\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->opcodes = (bcmolt_epon_oam_oam_reg_ctc_opcode *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->opcode_count * sizeof(bcmolt_epon_oam_oam_reg_ctc_opcode));
+        }
+    }
+
+    for (i0 = 0; i0 < this->opcode_count; i0++)
+    {
+        if (!bcmolt_epon_oam_oam_reg_ctc_opcode_unpack(&this->opcodes[i0], buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_ctc_cont_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    uint8_t opcode_count;
+    uint8_t i0;
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &opcode_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_oam_reg_ctc_opcode) * opcode_count);
+    for (i0 = 0; i0 < opcode_count; i0++)
+    {
+        if (!bcmolt_epon_oam_oam_reg_ctc_opcode_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_ctc_pack(bcmolt_epon_oam_oam_reg_ctc *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t preLenFieldPos;
+    uint32_t bytesAfterLenField;
+    if (!bcmolt_epon_oam_oam_registration_action_pack(this->action, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+    /* skip over length field (we'll fill it in later) */
+    if (!bcmolt_epon_oam_buf_skip(buf, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->action)
+    {
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_CONT:
+            {
+                if (!bcmolt_epon_oam_oam_reg_ctc_cont_pack(&this->u.cont.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_ctc_cont_pack(&this->u.register_and_continue.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_ctc_cont_pack(&this->u.unregister_and_continue.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REG:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER:
+            {
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint16_t));
+    if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, bytesAfterLenField))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint16_t))))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_oam_reg_ctc_get_packed_length(bcmolt_epon_oam_oam_reg_ctc *this)
+{
+    uint32_t count = 3;
+    switch (this->action)
+    {
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_CONT:
+            {
+                count += bcmolt_epon_oam_oam_reg_ctc_cont_get_packed_length(&this->u.cont.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REGISTER_AND_CONTINUE:
+            {
+                count += bcmolt_epon_oam_oam_reg_ctc_cont_get_packed_length(&this->u.register_and_continue.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER_AND_CONTINUE:
+            {
+                count += bcmolt_epon_oam_oam_reg_ctc_cont_get_packed_length(&this->u.unregister_and_continue.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REG:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER:
+            {
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_ctc_unpack(bcmolt_epon_oam_oam_reg_ctc *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint16_t length = 0;
+    bcmolt_epon_oam_buf postLenBuf;
+    if (!bcmolt_epon_oam_oam_registration_action_unpack(&this->action, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, buf->curr);
+    switch (this->action)
+    {
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_CONT:
+            {
+                if (!bcmolt_epon_oam_oam_reg_ctc_cont_unpack(&this->u.cont.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_ctc_cont_unpack(&this->u.register_and_continue.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_ctc_cont_unpack(&this->u.unregister_and_continue.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REG:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER:
+            {
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(buf, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_ctc_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_oam_registration_action action;
+    bcmolt_epon_oam_buf postLenBuf;
+    uint16_t length;
+    if (!bcmolt_epon_oam_oam_registration_action_unpack(&action, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, packed->curr);
+    switch (action)
+    {
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_CONT:
+            {
+                if (!bcmolt_epon_oam_oam_reg_ctc_cont_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_ctc_cont_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_ctc_cont_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REG:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER:
+            {
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_tek_var_desc_pack(bcmolt_epon_oam_oam_reg_tek_var_desc *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_tek_branch_pack(this->branch, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->branch)
+    {
+        case BCMOLT_EPON_OAM_TEK_BRANCH_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_tek_leaf_attribute_pack(this->u.attribute.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_ACTION:
+            {
+                if (!bcmolt_epon_oam_tek_leaf_action_pack(this->u.action.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_END:
+        case BCMOLT_EPON_OAM_TEK_BRANCH_NAME_BINDING:
+        case BCMOLT_EPON_OAM_TEK_BRANCH_OBJECT:
+        case BCMOLT_EPON_OAM_TEK_BRANCH_PACKAGE:
+        default:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.def.leaf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_tek_var_desc_unpack(bcmolt_epon_oam_oam_reg_tek_var_desc *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_tek_branch_unpack(&this->branch, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->branch)
+    {
+        case BCMOLT_EPON_OAM_TEK_BRANCH_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_tek_leaf_attribute_unpack(&this->u.attribute.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_ACTION:
+            {
+                if (!bcmolt_epon_oam_tek_leaf_action_unpack(&this->u.action.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_BRANCH_END:
+        case BCMOLT_EPON_OAM_TEK_BRANCH_NAME_BINDING:
+        case BCMOLT_EPON_OAM_TEK_BRANCH_OBJECT:
+        case BCMOLT_EPON_OAM_TEK_BRANCH_PACKAGE:
+        default:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.def.leaf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_tek_var_desc_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 3);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_tek_variable_pack(bcmolt_epon_oam_oam_reg_tek_variable *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_oam_reg_tek_var_desc_pack(&this->descriptor, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_oam_registration_action_pack(this->action, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->length_reserved))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_tek_variable_unpack(bcmolt_epon_oam_oam_reg_tek_variable *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_oam_reg_tek_var_desc_unpack(&this->descriptor, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_oam_registration_action_unpack(&this->action, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->length_reserved))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_tek_variable_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 6);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_tek_variable_list_pack(bcmolt_epon_oam_oam_reg_tek_variable_list *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t i0;
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->variable_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->variable_count > 0) && (this->variables == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"variables\" of struct \"bcmolt_epon_oam_oam_reg_tek_variable_list\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->variable_count; i0++)
+    {
+        if (!bcmolt_epon_oam_oam_reg_tek_variable_pack(&this->variables[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_oam_reg_tek_variable_list_get_packed_length(bcmolt_epon_oam_oam_reg_tek_variable_list *this)
+{
+    return 1 + (6 * this->variable_count);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_tek_variable_list_unpack(bcmolt_epon_oam_oam_reg_tek_variable_list *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint8_t i0;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->variable_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->variable_count > 0) && (this->variables == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"variables\" of struct \"bcmolt_epon_oam_oam_reg_tek_variable_list\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->variables = (bcmolt_epon_oam_oam_reg_tek_variable *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->variable_count * sizeof(bcmolt_epon_oam_oam_reg_tek_variable));
+        }
+    }
+
+    for (i0 = 0; i0 < this->variable_count; i0++)
+    {
+        if (!bcmolt_epon_oam_oam_reg_tek_variable_unpack(&this->variables[i0], buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_tek_variable_list_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    uint8_t variable_count;
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &variable_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_oam_reg_tek_variable) * variable_count);
+    if (!bcmolt_epon_oam_buf_skip(packed, variable_count * 6))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_tek_op_variable_pack(bcmolt_epon_oam_oam_reg_tek_op_variable *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t preLenFieldPos;
+    uint32_t bytesAfterLenField;
+    if (!bcmolt_epon_oam_oam_registration_action_pack(this->action, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+    /* skip over length field (we'll fill it in later) */
+    if (!bcmolt_epon_oam_buf_skip(buf, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->action)
+    {
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_CONT:
+            {
+                if (!bcmolt_epon_oam_oam_reg_tek_variable_list_pack(&this->u.cont.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_tek_variable_list_pack(&this->u.register_and_continue.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_tek_variable_list_pack(&this->u.unregister_and_continue.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REG:
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER:
+        default:
+            {
+            }
+            break;
+    }
+
+    bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint16_t));
+    if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, bytesAfterLenField))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint16_t))))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_oam_reg_tek_op_variable_get_packed_length(bcmolt_epon_oam_oam_reg_tek_op_variable *this)
+{
+    uint32_t count = 3;
+    switch (this->action)
+    {
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_CONT:
+            {
+                count += bcmolt_epon_oam_oam_reg_tek_variable_list_get_packed_length(&this->u.cont.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REGISTER_AND_CONTINUE:
+            {
+                count += bcmolt_epon_oam_oam_reg_tek_variable_list_get_packed_length(&this->u.register_and_continue.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER_AND_CONTINUE:
+            {
+                count += bcmolt_epon_oam_oam_reg_tek_variable_list_get_packed_length(&this->u.unregister_and_continue.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REG:
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER:
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_tek_op_variable_unpack(bcmolt_epon_oam_oam_reg_tek_op_variable *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint16_t length = 0;
+    bcmolt_epon_oam_buf postLenBuf;
+    if (!bcmolt_epon_oam_oam_registration_action_unpack(&this->action, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, buf->curr);
+    switch (this->action)
+    {
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_CONT:
+            {
+                if (!bcmolt_epon_oam_oam_reg_tek_variable_list_unpack(&this->u.cont.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_tek_variable_list_unpack(&this->u.register_and_continue.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_tek_variable_list_unpack(&this->u.unregister_and_continue.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REG:
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(buf, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_tek_op_variable_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_oam_registration_action action;
+    bcmolt_epon_oam_buf postLenBuf;
+    uint16_t length;
+    if (!bcmolt_epon_oam_oam_registration_action_unpack(&action, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, packed->curr);
+    switch (action)
+    {
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_CONT:
+            {
+                if (!bcmolt_epon_oam_oam_reg_tek_variable_list_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_tek_variable_list_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_tek_variable_list_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REG:
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_tek_opcode_pack(bcmolt_epon_oam_oam_reg_tek_opcode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t preLenFieldPos;
+    uint32_t bytesAfterLenField;
+    if (!bcmolt_epon_oam_tek_opcode_pack(this->opcode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+    /* skip over length field (we'll fill it in later) */
+    if (!bcmolt_epon_oam_buf_skip(buf, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->opcode)
+    {
+        case BCMOLT_EPON_OAM_TEK_OPCODE_GET_REQUEST:
+            {
+                if (!bcmolt_epon_oam_oam_reg_tek_op_variable_pack(&this->u.get_request.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_SET_REQUEST:
+            {
+                if (!bcmolt_epon_oam_oam_reg_tek_op_variable_pack(&this->u.set_request.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_FILE_ACK:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_FILE_DATA:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_FILE_READ_REQUEST:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_FILE_WRITE_REQUEST:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_GET_RESPONSE:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_I2C_BSC_READ_REQUEST:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_I2C_BSC_READ_RESPONSE:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_I2C_BSC_WRITE_REQUEST:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_I2C_BSC_WRITE_RESPONSE:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_INFO:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_KEY_EXCHANGE:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_LOOP_DETECT:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_MULTICAST_REGISTER:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_MULTICAST_REGISTER_RESPONSE:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_MULTICAST_REQUEST:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_SET_RESPONSE:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_UNACKED_ACTION:
+        default:
+            {
+                if (!bcmolt_epon_oam_oam_registration_action_pack(this->u.def.action, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.def.length_reserved))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint16_t));
+    if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, bytesAfterLenField))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint16_t))))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_oam_reg_tek_opcode_get_packed_length(bcmolt_epon_oam_oam_reg_tek_opcode *this)
+{
+    uint32_t count = 3;
+    switch (this->opcode)
+    {
+        case BCMOLT_EPON_OAM_TEK_OPCODE_GET_REQUEST:
+            {
+                count += bcmolt_epon_oam_oam_reg_tek_op_variable_get_packed_length(&this->u.get_request.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_SET_REQUEST:
+            {
+                count += bcmolt_epon_oam_oam_reg_tek_op_variable_get_packed_length(&this->u.set_request.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_FILE_ACK:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_FILE_DATA:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_FILE_READ_REQUEST:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_FILE_WRITE_REQUEST:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_GET_RESPONSE:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_I2C_BSC_READ_REQUEST:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_I2C_BSC_READ_RESPONSE:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_I2C_BSC_WRITE_REQUEST:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_I2C_BSC_WRITE_RESPONSE:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_INFO:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_KEY_EXCHANGE:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_LOOP_DETECT:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_MULTICAST_REGISTER:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_MULTICAST_REGISTER_RESPONSE:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_MULTICAST_REQUEST:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_SET_RESPONSE:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_UNACKED_ACTION:
+        default:
+            {
+                count += 3;
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_tek_opcode_unpack(bcmolt_epon_oam_oam_reg_tek_opcode *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint16_t length = 0;
+    bcmolt_epon_oam_buf postLenBuf;
+    if (!bcmolt_epon_oam_tek_opcode_unpack(&this->opcode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, buf->curr);
+    switch (this->opcode)
+    {
+        case BCMOLT_EPON_OAM_TEK_OPCODE_GET_REQUEST:
+            {
+                if (!bcmolt_epon_oam_oam_reg_tek_op_variable_unpack(&this->u.get_request.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_SET_REQUEST:
+            {
+                if (!bcmolt_epon_oam_oam_reg_tek_op_variable_unpack(&this->u.set_request.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_FILE_ACK:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_FILE_DATA:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_FILE_READ_REQUEST:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_FILE_WRITE_REQUEST:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_GET_RESPONSE:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_I2C_BSC_READ_REQUEST:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_I2C_BSC_READ_RESPONSE:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_I2C_BSC_WRITE_REQUEST:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_I2C_BSC_WRITE_RESPONSE:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_INFO:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_KEY_EXCHANGE:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_LOOP_DETECT:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_MULTICAST_REGISTER:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_MULTICAST_REGISTER_RESPONSE:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_MULTICAST_REQUEST:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_SET_RESPONSE:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_UNACKED_ACTION:
+        default:
+            {
+                if (!bcmolt_epon_oam_oam_registration_action_unpack(&this->u.def.action, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.def.length_reserved))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(buf, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_tek_opcode_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_tek_opcode opcode;
+    bcmolt_epon_oam_buf postLenBuf;
+    uint16_t length;
+    if (!bcmolt_epon_oam_tek_opcode_unpack(&opcode, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, packed->curr);
+    switch (opcode)
+    {
+        case BCMOLT_EPON_OAM_TEK_OPCODE_GET_REQUEST:
+            {
+                if (!bcmolt_epon_oam_oam_reg_tek_op_variable_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_SET_REQUEST:
+            {
+                if (!bcmolt_epon_oam_oam_reg_tek_op_variable_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_OPCODE_FILE_ACK:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_FILE_DATA:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_FILE_READ_REQUEST:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_FILE_WRITE_REQUEST:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_GET_RESPONSE:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_I2C_BSC_READ_REQUEST:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_I2C_BSC_READ_RESPONSE:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_I2C_BSC_WRITE_REQUEST:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_I2C_BSC_WRITE_RESPONSE:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_INFO:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_KEY_EXCHANGE:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_LOOP_DETECT:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_MULTICAST_REGISTER:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_MULTICAST_REGISTER_RESPONSE:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_MULTICAST_REQUEST:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_SET_RESPONSE:
+        case BCMOLT_EPON_OAM_TEK_OPCODE_UNACKED_ACTION:
+        default:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_tek_cont_pack(bcmolt_epon_oam_oam_reg_tek_cont *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t i0;
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->opcode_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->opcode_count > 0) && (this->opcodes == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"opcodes\" of struct \"bcmolt_epon_oam_oam_reg_tek_cont\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->opcode_count; i0++)
+    {
+        if (!bcmolt_epon_oam_oam_reg_tek_opcode_pack(&this->opcodes[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_oam_reg_tek_cont_get_packed_length(bcmolt_epon_oam_oam_reg_tek_cont *this)
+{
+    uint32_t count = 1;
+    uint32_t i0;
+    if ((this->opcode_count > 0) && (this->opcodes == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"opcode_count\" of struct \"bcmolt_epon_oam_oam_reg_tek_cont\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return 0;
+    }
+
+    for (i0 = 0; i0 < this->opcode_count; i0++)
+    {
+        count += bcmolt_epon_oam_oam_reg_tek_opcode_get_packed_length(&this->opcodes[i0]);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_tek_cont_unpack(bcmolt_epon_oam_oam_reg_tek_cont *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint8_t i0;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->opcode_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->opcode_count > 0) && (this->opcodes == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"opcodes\" of struct \"bcmolt_epon_oam_oam_reg_tek_cont\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->opcodes = (bcmolt_epon_oam_oam_reg_tek_opcode *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->opcode_count * sizeof(bcmolt_epon_oam_oam_reg_tek_opcode));
+        }
+    }
+
+    for (i0 = 0; i0 < this->opcode_count; i0++)
+    {
+        if (!bcmolt_epon_oam_oam_reg_tek_opcode_unpack(&this->opcodes[i0], buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_tek_cont_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    uint8_t opcode_count;
+    uint8_t i0;
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &opcode_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_oam_reg_tek_opcode) * opcode_count);
+    for (i0 = 0; i0 < opcode_count; i0++)
+    {
+        if (!bcmolt_epon_oam_oam_reg_tek_opcode_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_tek_pack(bcmolt_epon_oam_oam_reg_tek *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t preLenFieldPos;
+    uint32_t bytesAfterLenField;
+    if (!bcmolt_epon_oam_oam_registration_action_pack(this->action, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+    /* skip over length field (we'll fill it in later) */
+    if (!bcmolt_epon_oam_buf_skip(buf, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->action)
+    {
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_CONT:
+            {
+                if (!bcmolt_epon_oam_oam_reg_tek_cont_pack(&this->u.cont.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_tek_cont_pack(&this->u.register_and_continue.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_tek_cont_pack(&this->u.unregister_and_continue.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REG:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER:
+            {
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint16_t));
+    if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, bytesAfterLenField))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint16_t))))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_oam_reg_tek_get_packed_length(bcmolt_epon_oam_oam_reg_tek *this)
+{
+    uint32_t count = 3;
+    switch (this->action)
+    {
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_CONT:
+            {
+                count += bcmolt_epon_oam_oam_reg_tek_cont_get_packed_length(&this->u.cont.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REGISTER_AND_CONTINUE:
+            {
+                count += bcmolt_epon_oam_oam_reg_tek_cont_get_packed_length(&this->u.register_and_continue.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER_AND_CONTINUE:
+            {
+                count += bcmolt_epon_oam_oam_reg_tek_cont_get_packed_length(&this->u.unregister_and_continue.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REG:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER:
+            {
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_tek_unpack(bcmolt_epon_oam_oam_reg_tek *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint16_t length = 0;
+    bcmolt_epon_oam_buf postLenBuf;
+    if (!bcmolt_epon_oam_oam_registration_action_unpack(&this->action, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, buf->curr);
+    switch (this->action)
+    {
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_CONT:
+            {
+                if (!bcmolt_epon_oam_oam_reg_tek_cont_unpack(&this->u.cont.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_tek_cont_unpack(&this->u.register_and_continue.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_tek_cont_unpack(&this->u.unregister_and_continue.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REG:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER:
+            {
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(buf, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_tek_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_oam_registration_action action;
+    bcmolt_epon_oam_buf postLenBuf;
+    uint16_t length;
+    if (!bcmolt_epon_oam_oam_registration_action_unpack(&action, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, packed->curr);
+    switch (action)
+    {
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_CONT:
+            {
+                if (!bcmolt_epon_oam_oam_reg_tek_cont_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_tek_cont_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_tek_cont_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REG:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER:
+            {
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_dpoe_var_desc_pack(bcmolt_epon_oam_oam_reg_dpoe_var_desc *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_dpoe_branch_pack(this->branch, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->branch)
+    {
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_STANDARD_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_var_leaf_attribute_pack(this->u.standard_attribute.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_STANDARD_ACTION:
+            {
+                if (!bcmolt_epon_oam_var_leaf_action_pack(this->u.standard_action.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_dpoe_leaf_attribute_pack(this->u.extended_attribute.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ACTION:
+            {
+                if (!bcmolt_epon_oam_dpoe_leaf_action_pack(this->u.extended_action.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_END:
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_OBJECT:
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_PROGRAMMABLE_COUNTER:
+        default:
+            {
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.def.leaf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_dpoe_var_desc_unpack(bcmolt_epon_oam_oam_reg_dpoe_var_desc *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_dpoe_branch_unpack(&this->branch, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->branch)
+    {
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_STANDARD_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_var_leaf_attribute_unpack(&this->u.standard_attribute.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_STANDARD_ACTION:
+            {
+                if (!bcmolt_epon_oam_var_leaf_action_unpack(&this->u.standard_action.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ATTRIBUTE:
+            {
+                if (!bcmolt_epon_oam_dpoe_leaf_attribute_unpack(&this->u.extended_attribute.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ACTION:
+            {
+                if (!bcmolt_epon_oam_dpoe_leaf_action_unpack(&this->u.extended_action.leaf, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_END:
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_OBJECT:
+        case BCMOLT_EPON_OAM_DPOE_BRANCH_PROGRAMMABLE_COUNTER:
+        default:
+            {
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.def.leaf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_dpoe_var_desc_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 3);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_dpoe_variable_pack(bcmolt_epon_oam_oam_reg_dpoe_variable *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_oam_reg_dpoe_var_desc_pack(&this->descriptor, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_oam_registration_action_pack(this->action, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->length_reserved))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_dpoe_variable_unpack(bcmolt_epon_oam_oam_reg_dpoe_variable *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_oam_reg_dpoe_var_desc_unpack(&this->descriptor, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_oam_registration_action_unpack(&this->action, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->length_reserved))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_dpoe_variable_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 6);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_dpoe_variable_list_pack(bcmolt_epon_oam_oam_reg_dpoe_variable_list *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t i0;
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->variable_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->variable_count > 0) && (this->variables == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"variables\" of struct \"bcmolt_epon_oam_oam_reg_dpoe_variable_list\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->variable_count; i0++)
+    {
+        if (!bcmolt_epon_oam_oam_reg_dpoe_variable_pack(&this->variables[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_oam_reg_dpoe_variable_list_get_packed_length(bcmolt_epon_oam_oam_reg_dpoe_variable_list *this)
+{
+    return 1 + (6 * this->variable_count);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_dpoe_variable_list_unpack(bcmolt_epon_oam_oam_reg_dpoe_variable_list *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint8_t i0;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->variable_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->variable_count > 0) && (this->variables == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"variables\" of struct \"bcmolt_epon_oam_oam_reg_dpoe_variable_list\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->variables = (bcmolt_epon_oam_oam_reg_dpoe_variable *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->variable_count * sizeof(bcmolt_epon_oam_oam_reg_dpoe_variable));
+        }
+    }
+
+    for (i0 = 0; i0 < this->variable_count; i0++)
+    {
+        if (!bcmolt_epon_oam_oam_reg_dpoe_variable_unpack(&this->variables[i0], buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_dpoe_variable_list_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    uint8_t variable_count;
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &variable_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_oam_reg_dpoe_variable) * variable_count);
+    if (!bcmolt_epon_oam_buf_skip(packed, variable_count * 6))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_dpoe_op_variable_pack(bcmolt_epon_oam_oam_reg_dpoe_op_variable *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t preLenFieldPos;
+    uint32_t bytesAfterLenField;
+    if (!bcmolt_epon_oam_oam_registration_action_pack(this->action, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+    /* skip over length field (we'll fill it in later) */
+    if (!bcmolt_epon_oam_buf_skip(buf, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->action)
+    {
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_CONT:
+            {
+                if (!bcmolt_epon_oam_oam_reg_dpoe_variable_list_pack(&this->u.cont.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_dpoe_variable_list_pack(&this->u.register_and_continue.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_dpoe_variable_list_pack(&this->u.unregister_and_continue.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REG:
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER:
+        default:
+            {
+            }
+            break;
+    }
+
+    bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint16_t));
+    if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, bytesAfterLenField))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint16_t))))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_oam_reg_dpoe_op_variable_get_packed_length(bcmolt_epon_oam_oam_reg_dpoe_op_variable *this)
+{
+    uint32_t count = 3;
+    switch (this->action)
+    {
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_CONT:
+            {
+                count += bcmolt_epon_oam_oam_reg_dpoe_variable_list_get_packed_length(&this->u.cont.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REGISTER_AND_CONTINUE:
+            {
+                count += bcmolt_epon_oam_oam_reg_dpoe_variable_list_get_packed_length(&this->u.register_and_continue.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER_AND_CONTINUE:
+            {
+                count += bcmolt_epon_oam_oam_reg_dpoe_variable_list_get_packed_length(&this->u.unregister_and_continue.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REG:
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER:
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_dpoe_op_variable_unpack(bcmolt_epon_oam_oam_reg_dpoe_op_variable *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint16_t length = 0;
+    bcmolt_epon_oam_buf postLenBuf;
+    if (!bcmolt_epon_oam_oam_registration_action_unpack(&this->action, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, buf->curr);
+    switch (this->action)
+    {
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_CONT:
+            {
+                if (!bcmolt_epon_oam_oam_reg_dpoe_variable_list_unpack(&this->u.cont.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_dpoe_variable_list_unpack(&this->u.register_and_continue.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_dpoe_variable_list_unpack(&this->u.unregister_and_continue.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REG:
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(buf, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_dpoe_op_variable_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_oam_registration_action action;
+    bcmolt_epon_oam_buf postLenBuf;
+    uint16_t length;
+    if (!bcmolt_epon_oam_oam_registration_action_unpack(&action, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, packed->curr);
+    switch (action)
+    {
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_CONT:
+            {
+                if (!bcmolt_epon_oam_oam_reg_dpoe_variable_list_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_dpoe_variable_list_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_dpoe_variable_list_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REG:
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_dpoe_opcode_pack(bcmolt_epon_oam_oam_reg_dpoe_opcode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t preLenFieldPos;
+    uint32_t bytesAfterLenField;
+    if (!bcmolt_epon_oam_dpoe_opcode_pack(this->opcode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+    /* skip over length field (we'll fill it in later) */
+    if (!bcmolt_epon_oam_buf_skip(buf, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->opcode)
+    {
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_GET_REQUEST:
+            {
+                if (!bcmolt_epon_oam_oam_reg_dpoe_op_variable_pack(&this->u.get_request.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_SET_REQUEST:
+            {
+                if (!bcmolt_epon_oam_oam_reg_dpoe_op_variable_pack(&this->u.set_request.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_DYNAMIC_IPMCAST_CTRL:
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_DYNAMIC_IPMCAST_CTRL_RESP:
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_FILE_TRANSFER:
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_GET_RESPONSE:
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_KEY_EXCHANGE:
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_MCAST_REG:
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_MCAST_REG_RESP:
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_RESERVED:
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_SET_RESPONSE:
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_STATIC_IPMCAST_CTRL:
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_STATIC_IPMCAST_CTRL_RESP:
+        default:
+            {
+                if (!bcmolt_epon_oam_oam_registration_action_pack(this->u.def.action, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.def.length_reserved))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint16_t));
+    if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, bytesAfterLenField))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint16_t))))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_oam_reg_dpoe_opcode_get_packed_length(bcmolt_epon_oam_oam_reg_dpoe_opcode *this)
+{
+    uint32_t count = 3;
+    switch (this->opcode)
+    {
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_GET_REQUEST:
+            {
+                count += bcmolt_epon_oam_oam_reg_dpoe_op_variable_get_packed_length(&this->u.get_request.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_SET_REQUEST:
+            {
+                count += bcmolt_epon_oam_oam_reg_dpoe_op_variable_get_packed_length(&this->u.set_request.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_DYNAMIC_IPMCAST_CTRL:
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_DYNAMIC_IPMCAST_CTRL_RESP:
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_FILE_TRANSFER:
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_GET_RESPONSE:
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_KEY_EXCHANGE:
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_MCAST_REG:
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_MCAST_REG_RESP:
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_RESERVED:
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_SET_RESPONSE:
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_STATIC_IPMCAST_CTRL:
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_STATIC_IPMCAST_CTRL_RESP:
+        default:
+            {
+                count += 3;
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_dpoe_opcode_unpack(bcmolt_epon_oam_oam_reg_dpoe_opcode *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint16_t length = 0;
+    bcmolt_epon_oam_buf postLenBuf;
+    if (!bcmolt_epon_oam_dpoe_opcode_unpack(&this->opcode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, buf->curr);
+    switch (this->opcode)
+    {
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_GET_REQUEST:
+            {
+                if (!bcmolt_epon_oam_oam_reg_dpoe_op_variable_unpack(&this->u.get_request.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_SET_REQUEST:
+            {
+                if (!bcmolt_epon_oam_oam_reg_dpoe_op_variable_unpack(&this->u.set_request.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_DYNAMIC_IPMCAST_CTRL:
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_DYNAMIC_IPMCAST_CTRL_RESP:
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_FILE_TRANSFER:
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_GET_RESPONSE:
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_KEY_EXCHANGE:
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_MCAST_REG:
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_MCAST_REG_RESP:
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_RESERVED:
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_SET_RESPONSE:
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_STATIC_IPMCAST_CTRL:
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_STATIC_IPMCAST_CTRL_RESP:
+        default:
+            {
+                if (!bcmolt_epon_oam_oam_registration_action_unpack(&this->u.def.action, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.def.length_reserved))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(buf, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_dpoe_opcode_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_dpoe_opcode opcode;
+    bcmolt_epon_oam_buf postLenBuf;
+    uint16_t length;
+    if (!bcmolt_epon_oam_dpoe_opcode_unpack(&opcode, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, packed->curr);
+    switch (opcode)
+    {
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_GET_REQUEST:
+            {
+                if (!bcmolt_epon_oam_oam_reg_dpoe_op_variable_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_SET_REQUEST:
+            {
+                if (!bcmolt_epon_oam_oam_reg_dpoe_op_variable_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_DYNAMIC_IPMCAST_CTRL:
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_DYNAMIC_IPMCAST_CTRL_RESP:
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_FILE_TRANSFER:
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_GET_RESPONSE:
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_KEY_EXCHANGE:
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_MCAST_REG:
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_MCAST_REG_RESP:
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_RESERVED:
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_SET_RESPONSE:
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_STATIC_IPMCAST_CTRL:
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_STATIC_IPMCAST_CTRL_RESP:
+        default:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_dpoe_cont_pack(bcmolt_epon_oam_oam_reg_dpoe_cont *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t i0;
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->opcode_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->opcode_count > 0) && (this->opcodes == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"opcodes\" of struct \"bcmolt_epon_oam_oam_reg_dpoe_cont\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->opcode_count; i0++)
+    {
+        if (!bcmolt_epon_oam_oam_reg_dpoe_opcode_pack(&this->opcodes[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_oam_reg_dpoe_cont_get_packed_length(bcmolt_epon_oam_oam_reg_dpoe_cont *this)
+{
+    uint32_t count = 1;
+    uint32_t i0;
+    if ((this->opcode_count > 0) && (this->opcodes == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"opcode_count\" of struct \"bcmolt_epon_oam_oam_reg_dpoe_cont\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return 0;
+    }
+
+    for (i0 = 0; i0 < this->opcode_count; i0++)
+    {
+        count += bcmolt_epon_oam_oam_reg_dpoe_opcode_get_packed_length(&this->opcodes[i0]);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_dpoe_cont_unpack(bcmolt_epon_oam_oam_reg_dpoe_cont *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint8_t i0;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->opcode_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->opcode_count > 0) && (this->opcodes == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"opcodes\" of struct \"bcmolt_epon_oam_oam_reg_dpoe_cont\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->opcodes = (bcmolt_epon_oam_oam_reg_dpoe_opcode *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->opcode_count * sizeof(bcmolt_epon_oam_oam_reg_dpoe_opcode));
+        }
+    }
+
+    for (i0 = 0; i0 < this->opcode_count; i0++)
+    {
+        if (!bcmolt_epon_oam_oam_reg_dpoe_opcode_unpack(&this->opcodes[i0], buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_dpoe_cont_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    uint8_t opcode_count;
+    uint8_t i0;
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &opcode_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_oam_reg_dpoe_opcode) * opcode_count);
+    for (i0 = 0; i0 < opcode_count; i0++)
+    {
+        if (!bcmolt_epon_oam_oam_reg_dpoe_opcode_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_dpoe_pack(bcmolt_epon_oam_oam_reg_dpoe *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t preLenFieldPos;
+    uint32_t bytesAfterLenField;
+    if (!bcmolt_epon_oam_oam_registration_action_pack(this->action, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+    /* skip over length field (we'll fill it in later) */
+    if (!bcmolt_epon_oam_buf_skip(buf, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->action)
+    {
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_CONT:
+            {
+                if (!bcmolt_epon_oam_oam_reg_dpoe_cont_pack(&this->u.cont.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_dpoe_cont_pack(&this->u.register_and_continue.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_dpoe_cont_pack(&this->u.unregister_and_continue.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REG:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER:
+            {
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint16_t));
+    if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, bytesAfterLenField))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint16_t))))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_oam_reg_dpoe_get_packed_length(bcmolt_epon_oam_oam_reg_dpoe *this)
+{
+    uint32_t count = 3;
+    switch (this->action)
+    {
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_CONT:
+            {
+                count += bcmolt_epon_oam_oam_reg_dpoe_cont_get_packed_length(&this->u.cont.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REGISTER_AND_CONTINUE:
+            {
+                count += bcmolt_epon_oam_oam_reg_dpoe_cont_get_packed_length(&this->u.register_and_continue.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER_AND_CONTINUE:
+            {
+                count += bcmolt_epon_oam_oam_reg_dpoe_cont_get_packed_length(&this->u.unregister_and_continue.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REG:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER:
+            {
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_dpoe_unpack(bcmolt_epon_oam_oam_reg_dpoe *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint16_t length = 0;
+    bcmolt_epon_oam_buf postLenBuf;
+    if (!bcmolt_epon_oam_oam_registration_action_unpack(&this->action, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, buf->curr);
+    switch (this->action)
+    {
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_CONT:
+            {
+                if (!bcmolt_epon_oam_oam_reg_dpoe_cont_unpack(&this->u.cont.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_dpoe_cont_unpack(&this->u.register_and_continue.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_dpoe_cont_unpack(&this->u.unregister_and_continue.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REG:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER:
+            {
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(buf, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_dpoe_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_oam_registration_action action;
+    bcmolt_epon_oam_buf postLenBuf;
+    uint16_t length;
+    if (!bcmolt_epon_oam_oam_registration_action_unpack(&action, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, packed->curr);
+    switch (action)
+    {
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_CONT:
+            {
+                if (!bcmolt_epon_oam_oam_reg_dpoe_cont_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_dpoe_cont_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_dpoe_cont_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REG:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER:
+            {
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_vendor_oui_pack(bcmolt_epon_oam_oam_reg_vendor_oui *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_well_known_oui_pack(this->oui, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->oui)
+    {
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_CTC:
+            {
+                if (!bcmolt_epon_oam_oam_reg_ctc_pack(&this->u.ctc.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_TEK:
+            {
+                if (!bcmolt_epon_oam_oam_reg_tek_pack(&this->u.tek.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DPOE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_dpoe_pack(&this->u.dpoe.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_BRCM:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DASAN:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_KT:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_PMC:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_SIEPON_A:
+        default:
+            {
+                if (!bcmolt_epon_oam_oam_registration_action_pack(this->u.def.action, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.def.length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_oam_reg_vendor_oui_get_packed_length(bcmolt_epon_oam_oam_reg_vendor_oui *this)
+{
+    uint32_t count = 3;
+    switch (this->oui)
+    {
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_CTC:
+            {
+                count += bcmolt_epon_oam_oam_reg_ctc_get_packed_length(&this->u.ctc.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_TEK:
+            {
+                count += bcmolt_epon_oam_oam_reg_tek_get_packed_length(&this->u.tek.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DPOE:
+            {
+                count += bcmolt_epon_oam_oam_reg_dpoe_get_packed_length(&this->u.dpoe.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_BRCM:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DASAN:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_KT:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_PMC:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_SIEPON_A:
+        default:
+            {
+                count += 3;
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_vendor_oui_unpack(bcmolt_epon_oam_oam_reg_vendor_oui *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_well_known_oui_unpack(&this->oui, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->oui)
+    {
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_CTC:
+            {
+                if (!bcmolt_epon_oam_oam_reg_ctc_unpack(&this->u.ctc.value, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_TEK:
+            {
+                if (!bcmolt_epon_oam_oam_reg_tek_unpack(&this->u.tek.value, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DPOE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_dpoe_unpack(&this->u.dpoe.value, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_BRCM:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DASAN:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_KT:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_PMC:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_SIEPON_A:
+        default:
+            {
+                if (!bcmolt_epon_oam_oam_registration_action_unpack(&this->u.def.action, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(buf, &this->u.def.length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_vendor_oui_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_well_known_oui oui;
+    if (!bcmolt_epon_oam_well_known_oui_unpack(&oui, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (oui)
+    {
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_CTC:
+            {
+                if (!bcmolt_epon_oam_oam_reg_ctc_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_TEK:
+            {
+                if (!bcmolt_epon_oam_oam_reg_tek_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DPOE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_dpoe_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_BRCM:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DASAN:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_KT:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_PMC:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_SIEPON_A:
+        default:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_vendor_cont_pack(bcmolt_epon_oam_oam_reg_vendor_cont *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t i0;
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->vendor_oui_reg_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->vendor_oui_reg_count > 0) && (this->vendor_oui_reg == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vendor_oui_reg\" of struct \"bcmolt_epon_oam_oam_reg_vendor_cont\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->vendor_oui_reg_count; i0++)
+    {
+        if (!bcmolt_epon_oam_oam_reg_vendor_oui_pack(&this->vendor_oui_reg[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_oam_reg_vendor_cont_get_packed_length(bcmolt_epon_oam_oam_reg_vendor_cont *this)
+{
+    uint32_t count = 1;
+    uint32_t i0;
+    if ((this->vendor_oui_reg_count > 0) && (this->vendor_oui_reg == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vendor_oui_reg_count\" of struct \"bcmolt_epon_oam_oam_reg_vendor_cont\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return 0;
+    }
+
+    for (i0 = 0; i0 < this->vendor_oui_reg_count; i0++)
+    {
+        count += bcmolt_epon_oam_oam_reg_vendor_oui_get_packed_length(&this->vendor_oui_reg[i0]);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_vendor_cont_unpack(bcmolt_epon_oam_oam_reg_vendor_cont *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint8_t i0;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->vendor_oui_reg_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->vendor_oui_reg_count > 0) && (this->vendor_oui_reg == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"vendor_oui_reg\" of struct \"bcmolt_epon_oam_oam_reg_vendor_cont\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->vendor_oui_reg = (bcmolt_epon_oam_oam_reg_vendor_oui *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->vendor_oui_reg_count * sizeof(bcmolt_epon_oam_oam_reg_vendor_oui));
+        }
+    }
+
+    for (i0 = 0; i0 < this->vendor_oui_reg_count; i0++)
+    {
+        if (!bcmolt_epon_oam_oam_reg_vendor_oui_unpack(&this->vendor_oui_reg[i0], buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_vendor_cont_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    uint8_t vendor_oui_reg_count;
+    uint8_t i0;
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &vendor_oui_reg_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_oam_reg_vendor_oui) * vendor_oui_reg_count);
+    for (i0 = 0; i0 < vendor_oui_reg_count; i0++)
+    {
+        if (!bcmolt_epon_oam_oam_reg_vendor_oui_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_vendor_pack(bcmolt_epon_oam_oam_reg_vendor *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t preLenFieldPos;
+    uint32_t bytesAfterLenField;
+    if (!bcmolt_epon_oam_oam_registration_action_pack(this->action, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+    /* skip over length field (we'll fill it in later) */
+    if (!bcmolt_epon_oam_buf_skip(buf, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->action)
+    {
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_CONT:
+            {
+                if (!bcmolt_epon_oam_oam_reg_vendor_cont_pack(&this->u.cont.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_vendor_cont_pack(&this->u.register_and_continue.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_vendor_cont_pack(&this->u.unregister_and_continue.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REG:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER:
+            {
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint16_t));
+    if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, bytesAfterLenField))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint16_t))))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_oam_reg_vendor_get_packed_length(bcmolt_epon_oam_oam_reg_vendor *this)
+{
+    uint32_t count = 3;
+    switch (this->action)
+    {
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_CONT:
+            {
+                count += bcmolt_epon_oam_oam_reg_vendor_cont_get_packed_length(&this->u.cont.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REGISTER_AND_CONTINUE:
+            {
+                count += bcmolt_epon_oam_oam_reg_vendor_cont_get_packed_length(&this->u.register_and_continue.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER_AND_CONTINUE:
+            {
+                count += bcmolt_epon_oam_oam_reg_vendor_cont_get_packed_length(&this->u.unregister_and_continue.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REG:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER:
+            {
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_vendor_unpack(bcmolt_epon_oam_oam_reg_vendor *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint16_t length = 0;
+    bcmolt_epon_oam_buf postLenBuf;
+    if (!bcmolt_epon_oam_oam_registration_action_unpack(&this->action, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, buf->curr);
+    switch (this->action)
+    {
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_CONT:
+            {
+                if (!bcmolt_epon_oam_oam_reg_vendor_cont_unpack(&this->u.cont.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_vendor_cont_unpack(&this->u.register_and_continue.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_vendor_cont_unpack(&this->u.unregister_and_continue.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REG:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER:
+            {
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(buf, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_vendor_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_oam_registration_action action;
+    bcmolt_epon_oam_buf postLenBuf;
+    uint16_t length;
+    if (!bcmolt_epon_oam_oam_registration_action_unpack(&action, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, packed->curr);
+    switch (action)
+    {
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_CONT:
+            {
+                if (!bcmolt_epon_oam_oam_reg_vendor_cont_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_vendor_cont_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER_AND_CONTINUE:
+            {
+                if (!bcmolt_epon_oam_oam_reg_vendor_cont_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REG:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER:
+            {
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_opcode_pack(bcmolt_epon_oam_oam_reg_opcode *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t preLenFieldPos;
+    uint32_t bytesAfterLenField;
+    if (!bcmolt_epon_oam_oam_opcode_pack(this->opcode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+    /* skip over length field (we'll fill it in later) */
+    if (!bcmolt_epon_oam_buf_skip(buf, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->opcode)
+    {
+        case BCMOLT_EPON_OAM_OAM_OPCODE_INFO:
+            {
+                if (!bcmolt_epon_oam_oam_reg_info_pack(&this->u.info.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_OPCODE_ORGANIZATION_SPECIFIC:
+            {
+                if (!bcmolt_epon_oam_oam_reg_vendor_pack(&this->u.organization_specific.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_OPCODE_EVENT_NOTIFICATION:
+        case BCMOLT_EPON_OAM_OAM_OPCODE_LOOPBACK_CONTROL:
+        case BCMOLT_EPON_OAM_OAM_OPCODE_VAR_REQUEST:
+        case BCMOLT_EPON_OAM_OAM_OPCODE_VAR_RESPONSE:
+        default:
+            {
+                if (!bcmolt_epon_oam_oam_registration_action_pack(this->u.def.action, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.def.length_reserved))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint16_t));
+    if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, bytesAfterLenField))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint16_t))))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_oam_reg_opcode_get_packed_length(bcmolt_epon_oam_oam_reg_opcode *this)
+{
+    uint32_t count = 3;
+    switch (this->opcode)
+    {
+        case BCMOLT_EPON_OAM_OAM_OPCODE_INFO:
+            {
+                count += bcmolt_epon_oam_oam_reg_info_get_packed_length(&this->u.info.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_OPCODE_ORGANIZATION_SPECIFIC:
+            {
+                count += bcmolt_epon_oam_oam_reg_vendor_get_packed_length(&this->u.organization_specific.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_OPCODE_EVENT_NOTIFICATION:
+        case BCMOLT_EPON_OAM_OAM_OPCODE_LOOPBACK_CONTROL:
+        case BCMOLT_EPON_OAM_OAM_OPCODE_VAR_REQUEST:
+        case BCMOLT_EPON_OAM_OAM_OPCODE_VAR_RESPONSE:
+        default:
+            {
+                count += 3;
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_opcode_unpack(bcmolt_epon_oam_oam_reg_opcode *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint16_t length = 0;
+    bcmolt_epon_oam_buf postLenBuf;
+    if (!bcmolt_epon_oam_oam_opcode_unpack(&this->opcode, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, buf->curr);
+    switch (this->opcode)
+    {
+        case BCMOLT_EPON_OAM_OAM_OPCODE_INFO:
+            {
+                if (!bcmolt_epon_oam_oam_reg_info_unpack(&this->u.info.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_OPCODE_ORGANIZATION_SPECIFIC:
+            {
+                if (!bcmolt_epon_oam_oam_reg_vendor_unpack(&this->u.organization_specific.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_OPCODE_EVENT_NOTIFICATION:
+        case BCMOLT_EPON_OAM_OAM_OPCODE_LOOPBACK_CONTROL:
+        case BCMOLT_EPON_OAM_OAM_OPCODE_VAR_REQUEST:
+        case BCMOLT_EPON_OAM_OAM_OPCODE_VAR_RESPONSE:
+        default:
+            {
+                if (!bcmolt_epon_oam_oam_registration_action_unpack(&this->u.def.action, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.def.length_reserved))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(buf, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_reg_opcode_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_oam_opcode opcode;
+    bcmolt_epon_oam_buf postLenBuf;
+    uint16_t length;
+    if (!bcmolt_epon_oam_oam_opcode_unpack(&opcode, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, packed->curr);
+    switch (opcode)
+    {
+        case BCMOLT_EPON_OAM_OAM_OPCODE_INFO:
+            {
+                if (!bcmolt_epon_oam_oam_reg_info_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_OPCODE_ORGANIZATION_SPECIFIC:
+            {
+                if (!bcmolt_epon_oam_oam_reg_vendor_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_OPCODE_EVENT_NOTIFICATION:
+        case BCMOLT_EPON_OAM_OAM_OPCODE_LOOPBACK_CONTROL:
+        case BCMOLT_EPON_OAM_OAM_OPCODE_VAR_REQUEST:
+        case BCMOLT_EPON_OAM_OAM_OPCODE_VAR_RESPONSE:
+        default:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_registration_pack(bcmolt_epon_oam_oam_registration *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t preLenFieldPos;
+    uint32_t bytesAfterLenField;
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->master_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_oam_registration_action_pack(this->action, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+    /* skip over length field (we'll fill it in later) */
+    if (!bcmolt_epon_oam_buf_skip(buf, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->action)
+    {
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_CONT:
+            {
+                uint8_t i0;
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.cont.registration_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.cont.registration_count > 0) && (this->u.cont.registration == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"registration\" of struct \"bcmolt_epon_oam_oam_registration_cont\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                for (i0 = 0; i0 < this->u.cont.registration_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_oam_reg_opcode_pack(&this->u.cont.registration[i0], buf))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REG:
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REGISTER_AND_CONTINUE:
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER:
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER_AND_CONTINUE:
+        default:
+            {
+            }
+            break;
+    }
+
+    bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint16_t));
+    if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, bytesAfterLenField))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint16_t))))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_oam_registration_get_packed_length(bcmolt_epon_oam_oam_registration *this)
+{
+    uint32_t count = 4;
+    switch (this->action)
+    {
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_CONT:
+            {
+                uint32_t i0;
+                count += 1;
+                if ((this->u.cont.registration_count > 0) && (this->u.cont.registration == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"registration_count\" of struct \"bcmolt_epon_oam_oam_registration\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return 0;
+                }
+
+                for (i0 = 0; i0 < this->u.cont.registration_count; i0++)
+                {
+                    count += bcmolt_epon_oam_oam_reg_opcode_get_packed_length(&this->u.cont.registration[i0]);
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REG:
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REGISTER_AND_CONTINUE:
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER:
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER_AND_CONTINUE:
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_registration_unpack(bcmolt_epon_oam_oam_registration *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint16_t length = 0;
+    bcmolt_epon_oam_buf postLenBuf;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->master_id))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_oam_registration_action_unpack(&this->action, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, buf->curr);
+    switch (this->action)
+    {
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_CONT:
+            {
+                uint8_t i0;
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &this->u.cont.registration_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.cont.registration_count > 0) && (this->u.cont.registration == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"registration\" of struct \"bcmolt_epon_oam_oam_registration_cont\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.cont.registration = (bcmolt_epon_oam_oam_reg_opcode *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.cont.registration_count * sizeof(bcmolt_epon_oam_oam_reg_opcode));
+                    }
+                }
+
+                for (i0 = 0; i0 < this->u.cont.registration_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_oam_reg_opcode_unpack(&this->u.cont.registration[i0], &postLenBuf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REG:
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REGISTER_AND_CONTINUE:
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER:
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER_AND_CONTINUE:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(buf, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_registration_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_oam_registration_action action;
+    bcmolt_epon_oam_buf postLenBuf;
+    uint16_t length;
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_oam_registration_action_unpack(&action, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, packed->curr);
+    switch (action)
+    {
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_CONT:
+            {
+                uint8_t registration_count;
+                uint8_t i0;
+                if (!bcmolt_epon_oam_buf_read_u8(&postLenBuf, &registration_count))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_oam_reg_opcode) * registration_count);
+                for (i0 = 0; i0 < registration_count; i0++)
+                {
+                    if (!bcmolt_epon_oam_oam_reg_opcode_scan(&postLenBuf, extra_mem))
+                    {
+                        return BCMOS_FALSE;
+                    }
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REG:
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REGISTER_AND_CONTINUE:
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER:
+        case BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER_AND_CONTINUE:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_registration_list_pack(bcmolt_epon_oam_oam_registration_list *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t i0;
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->registrations_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->registrations_count > 0) && (this->registrations == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"registrations\" of struct \"bcmolt_epon_oam_oam_registration_list\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->registrations_count; i0++)
+    {
+        if (!bcmolt_epon_oam_oam_registration_pack(&this->registrations[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_oam_registration_list_get_packed_length(bcmolt_epon_oam_oam_registration_list *this)
+{
+    uint32_t count = 1;
+    uint32_t i0;
+    if ((this->registrations_count > 0) && (this->registrations == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"registrations_count\" of struct \"bcmolt_epon_oam_oam_registration_list\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return 0;
+    }
+
+    for (i0 = 0; i0 < this->registrations_count; i0++)
+    {
+        count += bcmolt_epon_oam_oam_registration_get_packed_length(&this->registrations[i0]);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_registration_list_unpack(bcmolt_epon_oam_oam_registration_list *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint8_t i0;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->registrations_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->registrations_count > 0) && (this->registrations == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"registrations\" of struct \"bcmolt_epon_oam_oam_registration_list\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->registrations = (bcmolt_epon_oam_oam_registration *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->registrations_count * sizeof(bcmolt_epon_oam_oam_registration));
+        }
+    }
+
+    for (i0 = 0; i0 < this->registrations_count; i0++)
+    {
+        if (!bcmolt_epon_oam_oam_registration_unpack(&this->registrations[i0], buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_registration_list_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    uint8_t registrations_count;
+    uint8_t i0;
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &registrations_count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_oam_registration) * registrations_count);
+    for (i0 = 0; i0 < registrations_count; i0++)
+    {
+        if (!bcmolt_epon_oam_oam_registration_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_master_context_tlv_pack(bcmolt_epon_oam_master_context_tlv *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_master_context_type_pack(this->type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->type)
+    {
+        case BCMOLT_EPON_OAM_MASTER_CONTEXT_TYPE_ONU:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_MASTER_CONTEXT_TYPE_NETWORK_PON:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.network_pon.port_index))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_MASTER_CONTEXT_TYPE_LINK:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.link.link_index))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_MASTER_CONTEXT_TYPE_USER_PORT:
+            {
+                if (!bcmolt_epon_oam_buf_write_u8(buf, this->u.user_port.port_index))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_master_context_tlv_get_packed_length(bcmolt_epon_oam_master_context_tlv *this)
+{
+    uint32_t count = 1;
+    switch (this->type)
+    {
+        case BCMOLT_EPON_OAM_MASTER_CONTEXT_TYPE_ONU:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_MASTER_CONTEXT_TYPE_NETWORK_PON:
+            {
+                count += 1;
+            }
+            break;
+        case BCMOLT_EPON_OAM_MASTER_CONTEXT_TYPE_LINK:
+            {
+                count += 1;
+            }
+            break;
+        case BCMOLT_EPON_OAM_MASTER_CONTEXT_TYPE_USER_PORT:
+            {
+                count += 1;
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_master_context_tlv_unpack(bcmolt_epon_oam_master_context_tlv *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_master_context_type_unpack(&this->type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->type)
+    {
+        case BCMOLT_EPON_OAM_MASTER_CONTEXT_TYPE_ONU:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_MASTER_CONTEXT_TYPE_NETWORK_PON:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.network_pon.port_index))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_MASTER_CONTEXT_TYPE_LINK:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.link.link_index))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_MASTER_CONTEXT_TYPE_USER_PORT:
+            {
+                if (!bcmolt_epon_oam_buf_read_u8(buf, &this->u.user_port.port_index))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_master_context_tlv_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_master_context_type type;
+    if (!bcmolt_epon_oam_master_context_type_unpack(&type, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (type)
+    {
+        case BCMOLT_EPON_OAM_MASTER_CONTEXT_TYPE_ONU:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_MASTER_CONTEXT_TYPE_NETWORK_PON:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_MASTER_CONTEXT_TYPE_LINK:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_MASTER_CONTEXT_TYPE_USER_PORT:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_negotiated_oam_pack(bcmolt_epon_oam_negotiated_oam *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t preLenFieldPos;
+    uint32_t bytesAfterLenField;
+    if (!bcmolt_epon_oam_well_known_oui_pack(this->oui, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_bool(buf, this->negotiated))
+    {
+        return BCMOS_FALSE;
+    }
+
+    preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+    /* skip over length field (we'll fill it in later) */
+    if (!bcmolt_epon_oam_buf_skip(buf, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->oui)
+    {
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_TEK:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_CTC:
+            {
+                if (!bcmolt_epon_oam_ctc_version_pack(this->u.ctc.version, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DPOE:
+            {
+                if (!bcmolt_epon_oam_dpoe_version_pack(this->u.dpoe.version, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_BRCM:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DASAN:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_KT:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_PMC:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_SIEPON_A:
+        default:
+            {
+            }
+            break;
+    }
+
+    bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint8_t));
+    if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u8(buf, bytesAfterLenField))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint8_t))))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_negotiated_oam_get_packed_length(bcmolt_epon_oam_negotiated_oam *this)
+{
+    uint32_t count = 5;
+    switch (this->oui)
+    {
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_TEK:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_CTC:
+            {
+                count += 1;
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DPOE:
+            {
+                count += 1;
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_BRCM:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DASAN:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_KT:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_PMC:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_SIEPON_A:
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_negotiated_oam_unpack(bcmolt_epon_oam_negotiated_oam *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint8_t version_length = 0;
+    bcmolt_epon_oam_buf postLenBuf;
+    if (!bcmolt_epon_oam_well_known_oui_unpack(&this->oui, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_bool(buf, &this->negotiated))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &version_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, version_length, buf->curr);
+    switch (this->oui)
+    {
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_TEK:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_CTC:
+            {
+                if (!bcmolt_epon_oam_ctc_version_unpack(&this->u.ctc.version, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DPOE:
+            {
+                if (!bcmolt_epon_oam_dpoe_version_unpack(&this->u.dpoe.version, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_BRCM:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DASAN:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_KT:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_PMC:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_SIEPON_A:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(buf, version_length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_negotiated_oam_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_well_known_oui oui;
+    bcmolt_epon_oam_buf postLenBuf;
+    uint8_t length;
+    if (!bcmolt_epon_oam_well_known_oui_unpack(&oui, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, packed->curr);
+    switch (oui)
+    {
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_TEK:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_CTC:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DPOE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_BRCM:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DASAN:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_KT:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_PMC:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_SIEPON_A:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_negotiated_oam_list_pack(bcmolt_epon_oam_negotiated_oam_list *this, bcmolt_epon_oam_buf *buf)
+{
+    uint8_t i0;
+    if (!bcmolt_epon_oam_buf_write_u8(buf, this->count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->count > 0) && (this->negotiated_oams == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"negotiated_oams\" of struct \"bcmolt_epon_oam_negotiated_oam_list\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->count; i0++)
+    {
+        if (!bcmolt_epon_oam_negotiated_oam_pack(&this->negotiated_oams[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_negotiated_oam_list_get_packed_length(bcmolt_epon_oam_negotiated_oam_list *this)
+{
+    uint32_t count = 1;
+    uint32_t i0;
+    if ((this->count > 0) && (this->negotiated_oams == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"count\" of struct \"bcmolt_epon_oam_negotiated_oam_list\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return 0;
+    }
+
+    for (i0 = 0; i0 < this->count; i0++)
+    {
+        count += bcmolt_epon_oam_negotiated_oam_get_packed_length(&this->negotiated_oams[i0]);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_negotiated_oam_list_unpack(bcmolt_epon_oam_negotiated_oam_list *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint8_t i0;
+    if (!bcmolt_epon_oam_buf_read_u8(buf, &this->count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->count > 0) && (this->negotiated_oams == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"negotiated_oams\" of struct \"bcmolt_epon_oam_negotiated_oam_list\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->negotiated_oams = (bcmolt_epon_oam_negotiated_oam *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->count * sizeof(bcmolt_epon_oam_negotiated_oam));
+        }
+    }
+
+    for (i0 = 0; i0 < this->count; i0++)
+    {
+        if (!bcmolt_epon_oam_negotiated_oam_unpack(&this->negotiated_oams[i0], buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_negotiated_oam_list_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    uint8_t count;
+    uint8_t i0;
+    if (!bcmolt_epon_oam_buf_read_u8(packed, &count))
+    {
+        return BCMOS_FALSE;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmolt_epon_oam_negotiated_oam) * count);
+    for (i0 = 0; i0 < count; i0++)
+    {
+        if (!bcmolt_epon_oam_negotiated_oam_scan(packed, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_onu_master_command_pack(bcmolt_epon_oam_onu_master_command *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t preLenFieldPos;
+    uint32_t bytesAfterLenField;
+    if (!bcmolt_epon_oam_onu_master_command_id_pack(this->command, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+    /* skip over length field (we'll fill it in later) */
+    if (!bcmolt_epon_oam_buf_skip(buf, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->command)
+    {
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_ENABLE_ONU:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_DISABLE_ONU:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_GET_ONU_STATE:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_GET_OAM_REGISTRATION:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_SET_OAM_REGISTRATION:
+            {
+                if (!bcmolt_epon_oam_oam_registration_list_pack(&this->u.set_oam_registration.oam_registrations, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_GET_NEGOTIATED_OAM:
+            {
+                if (!bcmolt_epon_oam_master_context_tlv_pack(&this->u.get_negotiated_oam.link_context, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_SET_NEGOTIATED_OAM:
+            {
+                if (!bcmolt_epon_oam_master_context_tlv_pack(&this->u.set_negotiated_oam.link_context, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_negotiated_oam_list_pack(&this->u.set_negotiated_oam.negotiated_oam, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_TERMINATOR:
+        default:
+            {
+            }
+            break;
+    }
+
+    bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint16_t));
+    if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, bytesAfterLenField))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint16_t))))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_onu_master_command_get_packed_length(bcmolt_epon_oam_onu_master_command *this)
+{
+    uint32_t count = 4;
+    switch (this->command)
+    {
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_ENABLE_ONU:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_DISABLE_ONU:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_GET_ONU_STATE:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_GET_OAM_REGISTRATION:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_SET_OAM_REGISTRATION:
+            {
+                count += bcmolt_epon_oam_oam_registration_list_get_packed_length(&this->u.set_oam_registration.oam_registrations);
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_GET_NEGOTIATED_OAM:
+            {
+                count += bcmolt_epon_oam_master_context_tlv_get_packed_length(&this->u.get_negotiated_oam.link_context);
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_SET_NEGOTIATED_OAM:
+            {
+                count += bcmolt_epon_oam_master_context_tlv_get_packed_length(&this->u.set_negotiated_oam.link_context) + bcmolt_epon_oam_negotiated_oam_list_get_packed_length(&this->u.set_negotiated_oam.negotiated_oam);
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_TERMINATOR:
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_onu_master_command_unpack(bcmolt_epon_oam_onu_master_command *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint16_t length = 0;
+    bcmolt_epon_oam_buf postLenBuf;
+    if (!bcmolt_epon_oam_onu_master_command_id_unpack(&this->command, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, buf->curr);
+    switch (this->command)
+    {
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_ENABLE_ONU:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_DISABLE_ONU:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_GET_ONU_STATE:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_GET_OAM_REGISTRATION:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_SET_OAM_REGISTRATION:
+            {
+                if (!bcmolt_epon_oam_oam_registration_list_unpack(&this->u.set_oam_registration.oam_registrations, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_GET_NEGOTIATED_OAM:
+            {
+                if (!bcmolt_epon_oam_master_context_tlv_unpack(&this->u.get_negotiated_oam.link_context, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_SET_NEGOTIATED_OAM:
+            {
+                if (!bcmolt_epon_oam_master_context_tlv_unpack(&this->u.set_negotiated_oam.link_context, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_negotiated_oam_list_unpack(&this->u.set_negotiated_oam.negotiated_oam, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_TERMINATOR:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(buf, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_onu_master_command_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_onu_master_command_id command;
+    bcmolt_epon_oam_buf postLenBuf;
+    uint16_t length;
+    if (!bcmolt_epon_oam_onu_master_command_id_unpack(&command, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, packed->curr);
+    switch (command)
+    {
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_ENABLE_ONU:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_DISABLE_ONU:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_GET_ONU_STATE:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_GET_OAM_REGISTRATION:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_SET_OAM_REGISTRATION:
+            {
+                if (!bcmolt_epon_oam_oam_registration_list_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_GET_NEGOTIATED_OAM:
+            {
+                if (!bcmolt_epon_oam_master_context_tlv_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_SET_NEGOTIATED_OAM:
+            {
+                if (!bcmolt_epon_oam_master_context_tlv_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_negotiated_oam_list_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_TERMINATOR:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_onu_master_response_pack(bcmolt_epon_oam_onu_master_response *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t preLenFieldPos;
+    uint32_t bytesAfterLenField;
+    if (!bcmolt_epon_oam_onu_master_command_id_pack(this->command, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_onu_master_response_code_pack(this->response_code, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+    /* skip over length field (we'll fill it in later) */
+    if (!bcmolt_epon_oam_buf_skip(buf, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->command)
+    {
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_ENABLE_ONU:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_DISABLE_ONU:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_GET_ONU_STATE:
+            {
+                if (!bcmolt_epon_oam_onu_state_pack(this->u.get_onu_state.state, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_GET_OAM_REGISTRATION:
+            {
+                if (!bcmolt_epon_oam_oam_registration_list_pack(&this->u.get_oam_registration.oam_registrations, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_SET_OAM_REGISTRATION:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_GET_NEGOTIATED_OAM:
+            {
+                if (!bcmolt_epon_oam_master_context_tlv_pack(&this->u.get_negotiated_oam.link_context, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_negotiated_oam_list_pack(&this->u.get_negotiated_oam.negotiated_oam, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_SET_NEGOTIATED_OAM:
+            {
+                if (!bcmolt_epon_oam_master_context_tlv_pack(&this->u.set_negotiated_oam.link_context, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_TERMINATOR:
+        default:
+            {
+            }
+            break;
+    }
+
+    bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint16_t));
+    if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, bytesAfterLenField))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint16_t))))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_onu_master_response_get_packed_length(bcmolt_epon_oam_onu_master_response *this)
+{
+    uint32_t count = 5;
+    switch (this->command)
+    {
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_ENABLE_ONU:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_DISABLE_ONU:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_GET_ONU_STATE:
+            {
+                count += 1;
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_GET_OAM_REGISTRATION:
+            {
+                count += bcmolt_epon_oam_oam_registration_list_get_packed_length(&this->u.get_oam_registration.oam_registrations);
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_SET_OAM_REGISTRATION:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_GET_NEGOTIATED_OAM:
+            {
+                count += bcmolt_epon_oam_master_context_tlv_get_packed_length(&this->u.get_negotiated_oam.link_context) + bcmolt_epon_oam_negotiated_oam_list_get_packed_length(&this->u.get_negotiated_oam.negotiated_oam);
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_SET_NEGOTIATED_OAM:
+            {
+                count += bcmolt_epon_oam_master_context_tlv_get_packed_length(&this->u.set_negotiated_oam.link_context);
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_TERMINATOR:
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_onu_master_response_unpack(bcmolt_epon_oam_onu_master_response *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint16_t length = 0;
+    bcmolt_epon_oam_buf postLenBuf;
+    if (!bcmolt_epon_oam_onu_master_command_id_unpack(&this->command, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_onu_master_response_code_unpack(&this->response_code, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, buf->curr);
+    switch (this->command)
+    {
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_ENABLE_ONU:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_DISABLE_ONU:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_GET_ONU_STATE:
+            {
+                if (!bcmolt_epon_oam_onu_state_unpack(&this->u.get_onu_state.state, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_GET_OAM_REGISTRATION:
+            {
+                if (!bcmolt_epon_oam_oam_registration_list_unpack(&this->u.get_oam_registration.oam_registrations, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_SET_OAM_REGISTRATION:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_GET_NEGOTIATED_OAM:
+            {
+                if (!bcmolt_epon_oam_master_context_tlv_unpack(&this->u.get_negotiated_oam.link_context, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_negotiated_oam_list_unpack(&this->u.get_negotiated_oam.negotiated_oam, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_SET_NEGOTIATED_OAM:
+            {
+                if (!bcmolt_epon_oam_master_context_tlv_unpack(&this->u.set_negotiated_oam.link_context, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_TERMINATOR:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(buf, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_onu_master_response_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_onu_master_command_id command;
+    bcmolt_epon_oam_buf postLenBuf;
+    uint16_t length;
+    if (!bcmolt_epon_oam_onu_master_command_id_unpack(&command, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, packed->curr);
+    switch (command)
+    {
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_ENABLE_ONU:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_DISABLE_ONU:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_GET_ONU_STATE:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_GET_OAM_REGISTRATION:
+            {
+                if (!bcmolt_epon_oam_oam_registration_list_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_SET_OAM_REGISTRATION:
+            {
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_GET_NEGOTIATED_OAM:
+            {
+                if (!bcmolt_epon_oam_master_context_tlv_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_negotiated_oam_list_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_SET_NEGOTIATED_OAM:
+            {
+                if (!bcmolt_epon_oam_master_context_tlv_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_TERMINATOR:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_onu_master_communication_pack(bcmolt_epon_oam_onu_master_communication *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_onu_master_communication_type_pack(this->type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->type)
+    {
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMUNICATION_TYPE_COMMAND:
+            {
+                if (!bcmolt_epon_oam_onu_master_command_pack(&this->u.command.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMUNICATION_TYPE_RESPONSE:
+            {
+                if (!bcmolt_epon_oam_onu_master_response_pack(&this->u.response.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_onu_master_communication_get_packed_length(bcmolt_epon_oam_onu_master_communication *this)
+{
+    uint32_t count = 1;
+    switch (this->type)
+    {
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMUNICATION_TYPE_COMMAND:
+            {
+                count += bcmolt_epon_oam_onu_master_command_get_packed_length(&this->u.command.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMUNICATION_TYPE_RESPONSE:
+            {
+                count += bcmolt_epon_oam_onu_master_response_get_packed_length(&this->u.response.value);
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_onu_master_communication_unpack(bcmolt_epon_oam_onu_master_communication *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_onu_master_communication_type_unpack(&this->type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->type)
+    {
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMUNICATION_TYPE_COMMAND:
+            {
+                if (!bcmolt_epon_oam_onu_master_command_unpack(&this->u.command.value, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMUNICATION_TYPE_RESPONSE:
+            {
+                if (!bcmolt_epon_oam_onu_master_response_unpack(&this->u.response.value, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_onu_master_communication_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_onu_master_communication_type type;
+    if (!bcmolt_epon_oam_onu_master_communication_type_unpack(&type, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (type)
+    {
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMUNICATION_TYPE_COMMAND:
+            {
+                if (!bcmolt_epon_oam_onu_master_command_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_COMMUNICATION_TYPE_RESPONSE:
+            {
+                if (!bcmolt_epon_oam_onu_master_response_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_master_pdu_common_pack(bcmolt_epon_oam_master_pdu_common *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t preLenFieldPos;
+    uint32_t bytesAfterLenField;
+    if (!bcmolt_epon_oam_onu_master_protocol_pack(this->protocol, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->correlation_tag))
+    {
+        return BCMOS_FALSE;
+    }
+
+    preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+    /* skip over length field (we'll fill it in later) */
+    if (!bcmolt_epon_oam_buf_skip(buf, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->protocol)
+    {
+        case BCMOLT_EPON_OAM_ONU_MASTER_PROTOCOL_PING:
+            {
+                if (!bcmolt_epon_oam_onu_master_ping_flags_pack(this->u.ping.flags, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_PROTOCOL_ENCAPSULATED_FRAME:
+            {
+                if (!bcmolt_epon_oam_master_end_point_pack(&this->u.encapsulated_frame.dmep, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_master_end_point_pack(&this->u.encapsulated_frame.smep, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write_u16(buf, this->u.encapsulated_frame.frame_length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.encapsulated_frame.frame_length > 0) && (this->u.encapsulated_frame.frame_data == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"frame_data\" of struct \"bcmolt_epon_oam_master_pdu_common_encapsulated_frame\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.encapsulated_frame.frame_data, this->u.encapsulated_frame.frame_length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_PROTOCOL_OAM_CONTENT:
+            {
+                if (!bcmolt_epon_oam_onu_master_oam_content_pack(&this->u.oam_content.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_PROTOCOL_REGISTERED_OAM:
+            {
+                if (!bcmolt_epon_oam_onu_master_oam_content_pack(&this->u.registered_oam.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_PROTOCOL_MASTER_COMMUNICATION:
+            {
+                if (!bcmolt_epon_oam_onu_master_communication_pack(&this->u.master_communication.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_PROTOCOL_BROADCOM_SDK:
+        case BCMOLT_EPON_OAM_ONU_MASTER_PROTOCOL_MASTER_PROTOCOL_TEK_UNKNOWN:
+        default:
+            {
+            }
+            break;
+    }
+
+    bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint16_t));
+    if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, bytesAfterLenField))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint16_t))))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_master_pdu_common_get_packed_length(bcmolt_epon_oam_master_pdu_common *this)
+{
+    uint32_t count = 6;
+    switch (this->protocol)
+    {
+        case BCMOLT_EPON_OAM_ONU_MASTER_PROTOCOL_PING:
+            {
+                count += 2;
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_PROTOCOL_ENCAPSULATED_FRAME:
+            {
+                count += 6 + this->u.encapsulated_frame.frame_length;
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_PROTOCOL_OAM_CONTENT:
+            {
+                count += bcmolt_epon_oam_onu_master_oam_content_get_packed_length(&this->u.oam_content.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_PROTOCOL_REGISTERED_OAM:
+            {
+                count += bcmolt_epon_oam_onu_master_oam_content_get_packed_length(&this->u.registered_oam.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_PROTOCOL_MASTER_COMMUNICATION:
+            {
+                count += bcmolt_epon_oam_onu_master_communication_get_packed_length(&this->u.master_communication.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_PROTOCOL_BROADCOM_SDK:
+        case BCMOLT_EPON_OAM_ONU_MASTER_PROTOCOL_MASTER_PROTOCOL_TEK_UNKNOWN:
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_master_pdu_common_unpack(bcmolt_epon_oam_master_pdu_common *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint16_t length = 0;
+    bcmolt_epon_oam_buf postLenBuf;
+    if (!bcmolt_epon_oam_onu_master_protocol_unpack(&this->protocol, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->correlation_tag))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, buf->curr);
+    switch (this->protocol)
+    {
+        case BCMOLT_EPON_OAM_ONU_MASTER_PROTOCOL_PING:
+            {
+                if (!bcmolt_epon_oam_onu_master_ping_flags_unpack(&this->u.ping.flags, &postLenBuf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_PROTOCOL_ENCAPSULATED_FRAME:
+            {
+                if (!bcmolt_epon_oam_master_end_point_unpack(&this->u.encapsulated_frame.dmep, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_master_end_point_unpack(&this->u.encapsulated_frame.smep, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &this->u.encapsulated_frame.frame_length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if ((this->u.encapsulated_frame.frame_length > 0) && (this->u.encapsulated_frame.frame_data == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"frame_data\" of struct \"bcmolt_epon_oam_master_pdu_common_encapsulated_frame\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.encapsulated_frame.frame_data = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.encapsulated_frame.frame_length * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.encapsulated_frame.frame_data, this->u.encapsulated_frame.frame_length))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_PROTOCOL_OAM_CONTENT:
+            {
+                if (!bcmolt_epon_oam_onu_master_oam_content_unpack(&this->u.oam_content.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_PROTOCOL_REGISTERED_OAM:
+            {
+                if (!bcmolt_epon_oam_onu_master_oam_content_unpack(&this->u.registered_oam.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_PROTOCOL_MASTER_COMMUNICATION:
+            {
+                if (!bcmolt_epon_oam_onu_master_communication_unpack(&this->u.master_communication.value, &postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_PROTOCOL_BROADCOM_SDK:
+        case BCMOLT_EPON_OAM_ONU_MASTER_PROTOCOL_MASTER_PROTOCOL_TEK_UNKNOWN:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(buf, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_master_pdu_common_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_onu_master_protocol protocol;
+    bcmolt_epon_oam_buf postLenBuf;
+    uint16_t length;
+    if (!bcmolt_epon_oam_onu_master_protocol_unpack(&protocol, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, packed->curr);
+    switch (protocol)
+    {
+        case BCMOLT_EPON_OAM_ONU_MASTER_PROTOCOL_PING:
+            {
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_PROTOCOL_ENCAPSULATED_FRAME:
+            {
+                uint16_t frame_length;
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_read_u16(&postLenBuf, &frame_length))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * frame_length);
+                if (!bcmolt_epon_oam_buf_skip(&postLenBuf, frame_length * 1))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_PROTOCOL_OAM_CONTENT:
+            {
+                if (!bcmolt_epon_oam_onu_master_oam_content_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_PROTOCOL_REGISTERED_OAM:
+            {
+                if (!bcmolt_epon_oam_onu_master_oam_content_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_PROTOCOL_MASTER_COMMUNICATION:
+            {
+                if (!bcmolt_epon_oam_onu_master_communication_scan(&postLenBuf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_ONU_MASTER_PROTOCOL_BROADCOM_SDK:
+        case BCMOLT_EPON_OAM_ONU_MASTER_PROTOCOL_MASTER_PROTOCOL_TEK_UNKNOWN:
+        default:
+            {
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_organization_specific_slow_protocol_pack(bcmolt_epon_oam_organization_specific_slow_protocol *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_well_known_oui_pack(this->oui, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->oui)
+    {
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_TEK:
+            {
+                if (!bcmolt_epon_oam_master_pdu_common_pack(&this->u.tek.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_BRCM:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_CTC:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DASAN:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DPOE:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_KT:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_PMC:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_SIEPON_A:
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_organization_specific_slow_protocol_get_packed_length(bcmolt_epon_oam_organization_specific_slow_protocol *this)
+{
+    uint32_t count = 3;
+    switch (this->oui)
+    {
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_TEK:
+            {
+                count += bcmolt_epon_oam_master_pdu_common_get_packed_length(&this->u.tek.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_BRCM:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_CTC:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DASAN:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DPOE:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_KT:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_PMC:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_SIEPON_A:
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_organization_specific_slow_protocol_unpack(bcmolt_epon_oam_organization_specific_slow_protocol *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_well_known_oui_unpack(&this->oui, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->oui)
+    {
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_TEK:
+            {
+                if (!bcmolt_epon_oam_master_pdu_common_unpack(&this->u.tek.value, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_BRCM:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_CTC:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DASAN:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DPOE:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_KT:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_PMC:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_SIEPON_A:
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_organization_specific_slow_protocol_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_well_known_oui oui;
+    if (!bcmolt_epon_oam_well_known_oui_unpack(&oui, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (oui)
+    {
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_TEK:
+            {
+                if (!bcmolt_epon_oam_master_pdu_common_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_BRCM:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_CTC:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DASAN:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DPOE:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_KT:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_PMC:
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_SIEPON_A:
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_slow_protocol_pack(bcmolt_epon_oam_slow_protocol *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_slow_protocol_subtype_pack(this->subtype, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->subtype)
+    {
+        case BCMOLT_EPON_OAM_SLOW_PROTOCOL_SUBTYPE_OAM:
+            {
+                if (!bcmolt_epon_oam_oam_flags_pack(this->u.oam.flags, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_oam_pdu_content_pack(&this->u.oam.content, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_SLOW_PROTOCOL_SUBTYPE_ORGANIZATION_SPECIFIC:
+            {
+                if (!bcmolt_epon_oam_organization_specific_slow_protocol_pack(&this->u.organization_specific.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_SLOW_PROTOCOL_SUBTYPE_LACP:
+        case BCMOLT_EPON_OAM_SLOW_PROTOCOL_SUBTYPE_LAMP:
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_slow_protocol_get_packed_length(bcmolt_epon_oam_slow_protocol *this)
+{
+    uint32_t count = 1;
+    switch (this->subtype)
+    {
+        case BCMOLT_EPON_OAM_SLOW_PROTOCOL_SUBTYPE_OAM:
+            {
+                count += 2 + bcmolt_epon_oam_oam_pdu_content_get_packed_length(&this->u.oam.content);
+            }
+            break;
+        case BCMOLT_EPON_OAM_SLOW_PROTOCOL_SUBTYPE_ORGANIZATION_SPECIFIC:
+            {
+                count += bcmolt_epon_oam_organization_specific_slow_protocol_get_packed_length(&this->u.organization_specific.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_SLOW_PROTOCOL_SUBTYPE_LACP:
+        case BCMOLT_EPON_OAM_SLOW_PROTOCOL_SUBTYPE_LAMP:
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_slow_protocol_unpack(bcmolt_epon_oam_slow_protocol *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_slow_protocol_subtype_unpack(&this->subtype, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->subtype)
+    {
+        case BCMOLT_EPON_OAM_SLOW_PROTOCOL_SUBTYPE_OAM:
+            {
+                if (!bcmolt_epon_oam_oam_flags_unpack(&this->u.oam.flags, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_oam_pdu_content_unpack(&this->u.oam.content, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_SLOW_PROTOCOL_SUBTYPE_ORGANIZATION_SPECIFIC:
+            {
+                if (!bcmolt_epon_oam_organization_specific_slow_protocol_unpack(&this->u.organization_specific.value, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_SLOW_PROTOCOL_SUBTYPE_LACP:
+        case BCMOLT_EPON_OAM_SLOW_PROTOCOL_SUBTYPE_LAMP:
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_slow_protocol_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_slow_protocol_subtype subtype;
+    if (!bcmolt_epon_oam_slow_protocol_subtype_unpack(&subtype, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (subtype)
+    {
+        case BCMOLT_EPON_OAM_SLOW_PROTOCOL_SUBTYPE_OAM:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_oam_pdu_content_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_SLOW_PROTOCOL_SUBTYPE_ORGANIZATION_SPECIFIC:
+            {
+                if (!bcmolt_epon_oam_organization_specific_slow_protocol_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_SLOW_PROTOCOL_SUBTYPE_LACP:
+        case BCMOLT_EPON_OAM_SLOW_PROTOCOL_SUBTYPE_LAMP:
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ethernet_protocol_pack(bcmolt_epon_oam_ethernet_protocol *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_protocol_type_pack(this->ethertype, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->ethertype)
+    {
+        case BCMOLT_EPON_OAM_PROTOCOL_TYPE_ZERO:
+            {
+                if ((this->u.zero.padding_count > 0) && (this->u.zero.padding == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"padding\" of struct \"bcmolt_epon_oam_ethernet_protocol_zero\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.zero.padding, this->u.zero.padding_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_PROTOCOL_TYPE_CVLAN:
+            {
+                if (!bcmolt_epon_oam_vlan_value_pack(&this->u.cvlan.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_PROTOCOL_TYPE_SVLAN:
+            {
+                if (!bcmolt_epon_oam_vlan_value_pack(&this->u.svlan.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_PROTOCOL_TYPE_ITAG:
+            {
+                if (!bcmolt_epon_oam_itag_value_pack(&this->u.itag.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_PROTOCOL_TYPE_SLOW_PROTOCOL:
+            {
+                if (!bcmolt_epon_oam_slow_protocol_pack(&this->u.slow_protocol.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_PROTOCOL_TYPE_EAPOL:
+            {
+                if (!bcmolt_epon_oam_eapol_protocol_pack(&this->u.eapol.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_PROTOCOL_TYPE_ARP:
+        case BCMOLT_EPON_OAM_PROTOCOL_TYPE_IPV4:
+        case BCMOLT_EPON_OAM_PROTOCOL_TYPE_IPV6:
+        case BCMOLT_EPON_OAM_PROTOCOL_TYPE_LOOPBACK:
+        case BCMOLT_EPON_OAM_PROTOCOL_TYPE_MPCP:
+        default:
+            {
+                if ((this->u.def.unknown_count > 0) && (this->u.def.unknown == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"unknown\" of struct \"bcmolt_epon_oam_ethernet_protocol_def\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.def.unknown, this->u.def.unknown_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ethernet_protocol_get_packed_length(bcmolt_epon_oam_ethernet_protocol *this)
+{
+    uint32_t count = 2;
+    switch (this->ethertype)
+    {
+        case BCMOLT_EPON_OAM_PROTOCOL_TYPE_ZERO:
+            {
+                count += this->u.zero.padding_count;
+            }
+            break;
+        case BCMOLT_EPON_OAM_PROTOCOL_TYPE_CVLAN:
+            {
+                count += 2;
+            }
+            break;
+        case BCMOLT_EPON_OAM_PROTOCOL_TYPE_SVLAN:
+            {
+                count += 2;
+            }
+            break;
+        case BCMOLT_EPON_OAM_PROTOCOL_TYPE_ITAG:
+            {
+                count += 4;
+            }
+            break;
+        case BCMOLT_EPON_OAM_PROTOCOL_TYPE_SLOW_PROTOCOL:
+            {
+                count += bcmolt_epon_oam_slow_protocol_get_packed_length(&this->u.slow_protocol.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_PROTOCOL_TYPE_EAPOL:
+            {
+                count += bcmolt_epon_oam_eapol_protocol_get_packed_length(&this->u.eapol.value);
+            }
+            break;
+        case BCMOLT_EPON_OAM_PROTOCOL_TYPE_ARP:
+        case BCMOLT_EPON_OAM_PROTOCOL_TYPE_IPV4:
+        case BCMOLT_EPON_OAM_PROTOCOL_TYPE_IPV6:
+        case BCMOLT_EPON_OAM_PROTOCOL_TYPE_LOOPBACK:
+        case BCMOLT_EPON_OAM_PROTOCOL_TYPE_MPCP:
+        default:
+            {
+                count += this->u.def.unknown_count;
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ethernet_protocol_unpack(bcmolt_epon_oam_ethernet_protocol *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_protocol_type_unpack(&this->ethertype, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->ethertype)
+    {
+        case BCMOLT_EPON_OAM_PROTOCOL_TYPE_ZERO:
+            {
+                this->u.zero.padding_count = bcmolt_epon_oam_ethernet_protocol_zero_count_padding(buf);
+                if ((this->u.zero.padding_count > 0) && (this->u.zero.padding == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"padding\" of struct \"bcmolt_epon_oam_ethernet_protocol_zero\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.zero.padding = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.zero.padding_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.zero.padding, this->u.zero.padding_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_PROTOCOL_TYPE_CVLAN:
+            {
+                if (!bcmolt_epon_oam_vlan_value_unpack(&this->u.cvlan.value, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_PROTOCOL_TYPE_SVLAN:
+            {
+                if (!bcmolt_epon_oam_vlan_value_unpack(&this->u.svlan.value, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_PROTOCOL_TYPE_ITAG:
+            {
+                if (!bcmolt_epon_oam_itag_value_unpack(&this->u.itag.value, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_PROTOCOL_TYPE_SLOW_PROTOCOL:
+            {
+                if (!bcmolt_epon_oam_slow_protocol_unpack(&this->u.slow_protocol.value, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_PROTOCOL_TYPE_EAPOL:
+            {
+                if (!bcmolt_epon_oam_eapol_protocol_unpack(&this->u.eapol.value, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_PROTOCOL_TYPE_ARP:
+        case BCMOLT_EPON_OAM_PROTOCOL_TYPE_IPV4:
+        case BCMOLT_EPON_OAM_PROTOCOL_TYPE_IPV6:
+        case BCMOLT_EPON_OAM_PROTOCOL_TYPE_LOOPBACK:
+        case BCMOLT_EPON_OAM_PROTOCOL_TYPE_MPCP:
+        default:
+            {
+                this->u.def.unknown_count = bcmolt_epon_oam_ethernet_protocol_def_count_unknown(buf);
+                if ((this->u.def.unknown_count > 0) && (this->u.def.unknown == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"unknown\" of struct \"bcmolt_epon_oam_ethernet_protocol_def\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.def.unknown = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.def.unknown_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(buf, this->u.def.unknown, this->u.def.unknown_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ethernet_protocol_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_protocol_type ethertype;
+    if (!bcmolt_epon_oam_protocol_type_unpack(&ethertype, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (ethertype)
+    {
+        case BCMOLT_EPON_OAM_PROTOCOL_TYPE_ZERO:
+            {
+                uint32_t padding_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                    {
+                        break;
+                    }
+
+                    padding_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(padding_elem_count * sizeof(uint8_t));
+            }
+            break;
+        case BCMOLT_EPON_OAM_PROTOCOL_TYPE_CVLAN:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_PROTOCOL_TYPE_SVLAN:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_PROTOCOL_TYPE_ITAG:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 4))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_PROTOCOL_TYPE_SLOW_PROTOCOL:
+            {
+                if (!bcmolt_epon_oam_slow_protocol_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_PROTOCOL_TYPE_EAPOL:
+            {
+                if (!bcmolt_epon_oam_eapol_protocol_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_PROTOCOL_TYPE_ARP:
+        case BCMOLT_EPON_OAM_PROTOCOL_TYPE_IPV4:
+        case BCMOLT_EPON_OAM_PROTOCOL_TYPE_IPV6:
+        case BCMOLT_EPON_OAM_PROTOCOL_TYPE_LOOPBACK:
+        case BCMOLT_EPON_OAM_PROTOCOL_TYPE_MPCP:
+        default:
+            {
+                uint32_t unknown_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+                    {
+                        break;
+                    }
+
+                    unknown_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(unknown_elem_count * sizeof(uint8_t));
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ethernet_protocol_def_count_unknown(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ethernet_protocol_zero_count_padding(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ethernet_frame_pack(bcmolt_epon_oam_ethernet_frame *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t i0;
+    if (!bcmolt_epon_oam_buf_write_mac_address(buf, this->da))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_mac_address(buf, this->sa))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->protocols_count > 0) && (this->protocols == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"protocols\" of struct \"bcmolt_epon_oam_ethernet_frame\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->protocols_count; i0++)
+    {
+        if (!bcmolt_epon_oam_ethernet_protocol_pack(&this->protocols[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ethernet_frame_get_packed_length(bcmolt_epon_oam_ethernet_frame *this)
+{
+    uint32_t count = 12;
+    uint32_t i0;
+    if ((this->protocols_count > 0) && (this->protocols == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"protocols_count\" of struct \"bcmolt_epon_oam_ethernet_frame\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return 0;
+    }
+
+    for (i0 = 0; i0 < this->protocols_count; i0++)
+    {
+        count += bcmolt_epon_oam_ethernet_protocol_get_packed_length(&this->protocols[i0]);
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ethernet_frame_unpack(bcmolt_epon_oam_ethernet_frame *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint32_t i0;
+    if (!bcmolt_epon_oam_buf_read_mac_address(buf, &this->da))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_mac_address(buf, &this->sa))
+    {
+        return BCMOS_FALSE;
+    }
+
+    this->protocols_count = bcmolt_epon_oam_ethernet_frame_count_protocols(buf);
+    if ((this->protocols_count > 0) && (this->protocols == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"protocols\" of struct \"bcmolt_epon_oam_ethernet_frame\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->protocols = (bcmolt_epon_oam_ethernet_protocol *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->protocols_count * sizeof(bcmolt_epon_oam_ethernet_protocol));
+        }
+    }
+
+    for (i0 = 0; i0 < this->protocols_count; i0++)
+    {
+        if (!bcmolt_epon_oam_ethernet_protocol_unpack(&this->protocols[i0], buf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_ethernet_frame_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    uint32_t protocols_elem_count = 0;
+    if (!bcmolt_epon_oam_buf_skip(packed, 6))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 6))
+    {
+        return BCMOS_FALSE;
+    }
+
+    while (BCMOS_TRUE)
+    {
+        if (!bcmolt_epon_oam_ethernet_protocol_scan(packed, extra_mem))
+        {
+            break;
+        }
+
+        protocols_elem_count += 1;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(protocols_elem_count * sizeof(bcmolt_epon_oam_ethernet_protocol));
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_ethernet_frame_count_protocols(bcmolt_epon_oam_buf *buf)
+{
+    uint32_t count = 0;
+    uint32_t dummy = 0;
+    bcmolt_epon_oam_buf bufClone = *buf;
+    while (BCMOS_TRUE)
+    {
+        if (!bcmolt_epon_oam_ethernet_protocol_scan(&bufClone, &dummy))
+        {
+            break;
+        }
+
+        count += 1;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_pdu_base_pack(bcmolt_epon_oam_oam_pdu_base *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_mac_address(buf, this->da))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_mac_address(buf, this->sa))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_protocol_type_pack(this->protocol_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_slow_protocol_subtype_pack(this->subtype, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_oam_flags_pack(this->flags, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_oam_pdu_content_pack(&this->content, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_oam_pdu_base_get_packed_length(bcmolt_epon_oam_oam_pdu_base *this)
+{
+    return 17 + bcmolt_epon_oam_oam_pdu_content_get_packed_length(&this->content);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_pdu_base_unpack(bcmolt_epon_oam_oam_pdu_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_mac_address(buf, &this->da))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_mac_address(buf, &this->sa))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_protocol_type_unpack(&this->protocol_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_slow_protocol_subtype_unpack(&this->subtype, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_oam_flags_unpack(&this->flags, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_oam_pdu_content_unpack(&this->content, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_pdu_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_skip(packed, 6))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 6))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_oam_pdu_content_scan(packed, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_tek_event_gpio_pack(bcmolt_epon_oam_oam_tek_event_gpio *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->reserved))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u32(buf, this->gpio_state1g))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u64(buf, this->gpio_state10g))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_tek_event_gpio_unpack(bcmolt_epon_oam_oam_tek_event_gpio *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->reserved))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u32(buf, &this->gpio_state1g))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u64(buf, &this->gpio_state10g))
+    {
+        /*Optional unpack fails do not cause errors */
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_tek_event_gpio_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 16);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_tek_event_pack(bcmolt_epon_oam_oam_tek_event *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_tek_alarm_code_pack(this->alarm_code, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_bool(buf, this->raised))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->port))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->link))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, this->queue))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_tek_alarm_context_pack(this->alarm_context, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->alarm_code)
+    {
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_STAT_ALARM:
+            {
+                if (!bcmolt_epon_oam_tek_leaf_attribute_pack(this->u.stat_alarm.stat_id, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_GPIO_LINK_FAULT:
+            {
+                if (!bcmolt_epon_oam_oam_tek_event_gpio_pack(&this->u.gpio_link_fault.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_GPIO_DYING_GASP:
+            {
+                if (!bcmolt_epon_oam_oam_tek_event_gpio_pack(&this->u.gpio_dying_gasp.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_GPIO_CRITICAL_EVENT:
+            {
+                if (!bcmolt_epon_oam_oam_tek_event_gpio_pack(&this->u.gpio_critical_event.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_GPIO_OTHER:
+            {
+                if (!bcmolt_epon_oam_oam_tek_event_gpio_pack(&this->u.gpio_other.value, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_AUTH_UNAVAIL:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_AUTO_NEG_FAILURE:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_BOOT_INVALID:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_CRITICAL_EVENT:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_CTC_ALARM:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_CTC_DISCOVER:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_DIAG_LOAD:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_DYING_GASP:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_FAN_FAULT:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_FLASH_BUSY:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_FLOW_CONTROL_TIMEOUT:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_GATE_TIMEOUT:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_IPN_LOS:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_KEY_EXCHANGE:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_LASER_ALWAYS_ON:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_LEARN_TABLE_OVERFLOW:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_LINK_FAULT:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_LINK_OAM_DISC_COMPLETE:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_LINK_REG_FAIL:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_LINK_REG_START:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_LINK_REG_SUCCESS:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_LOOPBACK:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_LOSS_OF_SIGNAL:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_OAM_TIMEOUT:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_ONU_PON_DISABLE:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_ONU_READY:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_PORT_DISABLED:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_RX_POWER_HIGH:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_RX_POWER_LOW:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_TEMP_HIGH:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_TEMP_LOW:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_TX_BIAS_HIGH:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_TX_BIAS_LOW:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_TX_POWER_HIGH:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_TX_POWER_LOW:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_VCC_HIGH:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_VCC_LOW:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_PROT_SWITCH:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_QUEUE_OVERFLOW:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_REG:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_REPORT_FAIL:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_STANDBY_LOS:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_SYSTEM:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_TEMPERATURE:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_TRANSMIT_DEGRADE:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_TX_FAIL:
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_oam_tek_event_get_packed_length(bcmolt_epon_oam_oam_tek_event *this)
+{
+    uint32_t count = 9;
+    switch (this->alarm_code)
+    {
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_STAT_ALARM:
+            {
+                count += 2;
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_GPIO_LINK_FAULT:
+            {
+                count += 16;
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_GPIO_DYING_GASP:
+            {
+                count += 16;
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_GPIO_CRITICAL_EVENT:
+            {
+                count += 16;
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_GPIO_OTHER:
+            {
+                count += 16;
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_AUTH_UNAVAIL:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_AUTO_NEG_FAILURE:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_BOOT_INVALID:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_CRITICAL_EVENT:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_CTC_ALARM:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_CTC_DISCOVER:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_DIAG_LOAD:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_DYING_GASP:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_FAN_FAULT:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_FLASH_BUSY:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_FLOW_CONTROL_TIMEOUT:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_GATE_TIMEOUT:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_IPN_LOS:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_KEY_EXCHANGE:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_LASER_ALWAYS_ON:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_LEARN_TABLE_OVERFLOW:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_LINK_FAULT:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_LINK_OAM_DISC_COMPLETE:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_LINK_REG_FAIL:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_LINK_REG_START:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_LINK_REG_SUCCESS:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_LOOPBACK:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_LOSS_OF_SIGNAL:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_OAM_TIMEOUT:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_ONU_PON_DISABLE:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_ONU_READY:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_PORT_DISABLED:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_RX_POWER_HIGH:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_RX_POWER_LOW:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_TEMP_HIGH:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_TEMP_LOW:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_TX_BIAS_HIGH:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_TX_BIAS_LOW:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_TX_POWER_HIGH:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_TX_POWER_LOW:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_VCC_HIGH:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_VCC_LOW:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_PROT_SWITCH:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_QUEUE_OVERFLOW:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_REG:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_REPORT_FAIL:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_STANDBY_LOS:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_SYSTEM:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_TEMPERATURE:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_TRANSMIT_DEGRADE:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_TX_FAIL:
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_tek_event_unpack(bcmolt_epon_oam_oam_tek_event *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_tek_alarm_code_unpack(&this->alarm_code, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_bool(buf, &this->raised))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->port))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->link))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &this->queue))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_tek_alarm_context_unpack(&this->alarm_context, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->alarm_code)
+    {
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_STAT_ALARM:
+            {
+                if (!bcmolt_epon_oam_tek_leaf_attribute_unpack(&this->u.stat_alarm.stat_id, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_GPIO_LINK_FAULT:
+            {
+                if (!bcmolt_epon_oam_oam_tek_event_gpio_unpack(&this->u.gpio_link_fault.value, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_GPIO_DYING_GASP:
+            {
+                if (!bcmolt_epon_oam_oam_tek_event_gpio_unpack(&this->u.gpio_dying_gasp.value, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_GPIO_CRITICAL_EVENT:
+            {
+                if (!bcmolt_epon_oam_oam_tek_event_gpio_unpack(&this->u.gpio_critical_event.value, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_GPIO_OTHER:
+            {
+                if (!bcmolt_epon_oam_oam_tek_event_gpio_unpack(&this->u.gpio_other.value, buf, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_AUTH_UNAVAIL:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_AUTO_NEG_FAILURE:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_BOOT_INVALID:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_CRITICAL_EVENT:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_CTC_ALARM:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_CTC_DISCOVER:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_DIAG_LOAD:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_DYING_GASP:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_FAN_FAULT:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_FLASH_BUSY:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_FLOW_CONTROL_TIMEOUT:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_GATE_TIMEOUT:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_IPN_LOS:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_KEY_EXCHANGE:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_LASER_ALWAYS_ON:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_LEARN_TABLE_OVERFLOW:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_LINK_FAULT:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_LINK_OAM_DISC_COMPLETE:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_LINK_REG_FAIL:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_LINK_REG_START:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_LINK_REG_SUCCESS:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_LOOPBACK:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_LOSS_OF_SIGNAL:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_OAM_TIMEOUT:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_ONU_PON_DISABLE:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_ONU_READY:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_PORT_DISABLED:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_RX_POWER_HIGH:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_RX_POWER_LOW:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_TEMP_HIGH:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_TEMP_LOW:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_TX_BIAS_HIGH:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_TX_BIAS_LOW:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_TX_POWER_HIGH:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_TX_POWER_LOW:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_VCC_HIGH:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_VCC_LOW:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_PROT_SWITCH:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_QUEUE_OVERFLOW:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_REG:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_REPORT_FAIL:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_STANDBY_LOS:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_SYSTEM:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_TEMPERATURE:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_TRANSMIT_DEGRADE:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_TX_FAIL:
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_oam_tek_event_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_tek_alarm_code alarm_code;
+    if (!bcmolt_epon_oam_tek_alarm_code_unpack(&alarm_code, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (alarm_code)
+    {
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_STAT_ALARM:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_GPIO_LINK_FAULT:
+            {
+                if (!bcmolt_epon_oam_oam_tek_event_gpio_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_GPIO_DYING_GASP:
+            {
+                if (!bcmolt_epon_oam_oam_tek_event_gpio_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_GPIO_CRITICAL_EVENT:
+            {
+                if (!bcmolt_epon_oam_oam_tek_event_gpio_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_GPIO_OTHER:
+            {
+                if (!bcmolt_epon_oam_oam_tek_event_gpio_scan(packed, extra_mem))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_AUTH_UNAVAIL:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_AUTO_NEG_FAILURE:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_BOOT_INVALID:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_CRITICAL_EVENT:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_CTC_ALARM:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_CTC_DISCOVER:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_DIAG_LOAD:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_DYING_GASP:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_FAN_FAULT:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_FLASH_BUSY:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_FLOW_CONTROL_TIMEOUT:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_GATE_TIMEOUT:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_IPN_LOS:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_KEY_EXCHANGE:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_LASER_ALWAYS_ON:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_LEARN_TABLE_OVERFLOW:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_LINK_FAULT:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_LINK_OAM_DISC_COMPLETE:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_LINK_REG_FAIL:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_LINK_REG_START:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_LINK_REG_SUCCESS:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_LOOPBACK:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_LOSS_OF_SIGNAL:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_OAM_TIMEOUT:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_ONU_PON_DISABLE:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_ONU_READY:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_PORT_DISABLED:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_RX_POWER_HIGH:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_RX_POWER_LOW:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_TEMP_HIGH:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_TEMP_LOW:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_TX_BIAS_HIGH:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_TX_BIAS_LOW:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_TX_POWER_HIGH:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_TX_POWER_LOW:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_VCC_HIGH:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_VCC_LOW:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_PROT_SWITCH:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_QUEUE_OVERFLOW:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_REG:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_REPORT_FAIL:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_STANDBY_LOS:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_SYSTEM:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_TEMPERATURE:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_TRANSMIT_DEGRADE:
+        case BCMOLT_EPON_OAM_TEK_ALARM_CODE_TX_FAIL:
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_std_mac_address_pack(bcmolt_epon_oam_std_mac_address *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_buf_write_mac_address(buf, this->address))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_std_mac_address_unpack(bcmolt_epon_oam_std_mac_address *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_buf_read_mac_address(buf, &this->address))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_std_mac_address_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 6);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_var_desc_attr_base_pack(bcmolt_epon_oam_tek_var_desc_attr_base *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_tek_leaf_attribute_pack(this->attribute, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->attribute)
+    {
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_STAT_THRESHOLD:
+            {
+                if (!bcmolt_epon_oam_tek_leaf_attribute_pack(this->u.port_stat_threshold.stat, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LINK_STAT_THRESHOLD:
+            {
+                if (!bcmolt_epon_oam_tek_leaf_attribute_pack(this->u.link_stat_threshold.stat, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ALARM_THRESHOLD:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ARP_REPLICATE_DEST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_BCAST_RATE_LIMIT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_BYPASS_SOFT_LEARN:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_CHIP_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_CHIP_VERSION:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_CONTROL_PORT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_COS_TRANSLATION:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_CROSSBAR_CONFIG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_CTL_VLAN_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DN_FILTER_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DOWN_BURST_TOLL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DYN_LEARN_AGE_LIMIT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DYN_LEARN_TBL_SIZE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DYN_LEARNING_MODE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DYN_MAC_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EGRESS_SHAPING:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ENCRYPT_KEY_EXPIRY_TIME:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ENCRYPTION_KEY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ENCRYPTION_MODE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_DOWN_BIT_LOADING:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_SDM_AMPLITUDE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_SDM_PHASE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_SDM_QUANTIZER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UNUSED0:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UNUSED1:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UNUSED2:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UNUSED3:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UNUSED4:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UP_BIT_LOADING:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EXT_FIRMWARE_VERSION:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EXTENDED_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FAILSAFE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FEATURE_SET:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FEC_MODE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FILE_INFO:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FIRMWARE_TIMESTAMP:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FIRMWARE_VER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FLOOD_UNKNOWN:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_IGMP_FRAME_RATE_LIMIT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_INGRESS_POLICING:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_INTERNAL_VERSION:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_IPMC_UNKNOWN_LEAVE_FWD:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_JEDEC_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LACP_DEST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LEARN_MODE_RULE_UPDATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LEARN_TABLE_MODE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LEN_ERROR_DISCARD:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LINK_STATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LINK_STATS_THRESHOLD_INTERVAL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LOCAL_SWITCHING:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LUE_FIELD_SELECT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LUE_FIELD_SELECT_LIST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MCAST_DOMAIN_CONFIG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MCAST_GLOBAL_CONFIG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MCAST_GROUP_INFO:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MDI_CROSSOVER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MIN_MAC_LIMIT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MPCP_CLOCK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MPCP_CLOCK_COMPENSATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MTU:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_NETWORK_PON_MAP:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_NEW_DN_FILTER_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_NEW_UP_FILTER_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_NVS_SCRATCHPAD:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_NVS_STATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ONU_AGGREGATE_LIMIT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ONU_HOLDOVER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ONU_IGMP_VLAN:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ONU_RULE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POLICER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_CAPABILITY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_DYNAMIC_ENTRIES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_STATS_THRESHOLD_INTERVAL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_VLAN_MEMBERSHIP:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_VLAN_POLICY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POWER_MON_RX_POWER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POWER_MON_TEMPERATURE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POWER_MON_TX_BIAS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POWER_MON_TX_POWER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POWER_MON_VCC:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PRI_ENQUEUING:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PSSTATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_QUEUE_CONFIG_V2:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_QUEUEPRIMAP:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_REPORT_THRESHOLDS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_BYTES_DELAYED:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_BYTES_DROPPED:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_DELAY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_DELAY_THRESHOLD:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME_TOO_SHORT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME1024TO1518:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME128TO255:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME1519PLUS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME256TO511:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME512TO1023:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME64:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME65TO127:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAMES_DROPPED:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_UNICAST_FRAMES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_SEARCH_CONFIG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_SEQUENCE_NUMBER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_SLE_MODE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STATIC_MAC_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_AD_SELECT_ABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_AD_TECH:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_ADMIN_STATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_AUTO_CFG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_LOCAL_SELECT_ABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_LOCAL_TECH:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_REMOTE_SIG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_RX_SELECT_ABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_RX_TECH:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_FEC_ABILITY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_FEC_CORRECTED_BLOCKS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_FEC_MODE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_FEC_UNCORRECTABLE_BLOCKS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_ADDR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_ALIGN_ERR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_BCAST_FRAMES_RX_OK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_BCAST_FRAMES_TX_OK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CAPABILITIES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CARRIER_SENSE_ERR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_COLLISION_FRAMES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_FRAMES_RX:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_FRAMES_TX:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_FUNCS_SUPPORTED:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_PAUSE_DELAY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_PAUSE_RX:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_PAUSE_TX:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_UNSUPPORTED_OP_RX:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_DUPLEX_STATUS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_ENABLE_STATUS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_EXCESSIVE_COLLISIONS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FCS_ERR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FR_EXCESSIVE_DEFERRAL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAME_TOO_LONG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAMES_DEFERRED:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAMES_LOST_MAC_RX_ERR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAMES_LOST_MAC_TX_ERR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAMES_RX_OK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAMES_TX_OK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_IN_RANGE_LEN_ERR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_LATE_COLLISIONS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_MCAST_ADDR_LIST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_MCAST_FRAMES_RX_OK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_MCAST_FRAMES_TX_OK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_MCAST_RX_STATUS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_MULTIPLE_COLL_FRAMES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_OCTETS_RX_OK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_OCTETS_TX_OK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_OUT_OF_RANGE_LEN_ERR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_PROMISCUOUS_STATUS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_SINGLE_COLL_FRAMES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_TX_ENABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAU_MEDIA_AVAIL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_DISCOVERY_TIMEOUT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_DISCOVERY_WINDOW_TX:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_MAC_CTRL_FRAMES_RX:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_MAC_CTRL_FRAMES_TX:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_RX_GATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_RX_REG_ACK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_RX_REG_REQUEST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_RX_REGISTER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_RX_REPORT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_TX_GATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_TX_REG_ACK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_TX_REG_REQUEST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_TX_REGISTER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_TX_REPORT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_OAM_EMUL_CRC8ERR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_OAM_LOCAL_ERR_FRAME_SECS_EVENT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_PHY_ADMIN_STATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_PHY_SYMBOL_ERR_DURING_CARRIER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_PHY_TYPE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_PHY_TYPE_LIST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_SYSTEM_RULE_OPTIONS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TRANSCEIVER_BURST_ACTIVITY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TRANSCEIVER_SIGNAL_DETECT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_BYTES_DELAYED:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_BYTES_DROPPED:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_BYTES_UNUSED:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_DELAY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_DELAY_THRESHOLD:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME1024TO1518:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME128TO255:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME1519PLUS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME256TO511:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME512TO1023:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME64:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME65TO127:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAMES_DROPPED:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_UNICAST_FRAMES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_UNI_SHAPER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_UP_FILTER_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_VLAN_DESTINATIONS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_VLAN_ETHERTYPE:
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tek_var_desc_attr_base_get_packed_length(bcmolt_epon_oam_tek_var_desc_attr_base *this)
+{
+    uint32_t count = 2;
+    switch (this->attribute)
+    {
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_STAT_THRESHOLD:
+            {
+                count += 2;
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LINK_STAT_THRESHOLD:
+            {
+                count += 2;
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ALARM_THRESHOLD:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ARP_REPLICATE_DEST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_BCAST_RATE_LIMIT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_BYPASS_SOFT_LEARN:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_CHIP_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_CHIP_VERSION:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_CONTROL_PORT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_COS_TRANSLATION:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_CROSSBAR_CONFIG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_CTL_VLAN_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DN_FILTER_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DOWN_BURST_TOLL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DYN_LEARN_AGE_LIMIT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DYN_LEARN_TBL_SIZE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DYN_LEARNING_MODE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DYN_MAC_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EGRESS_SHAPING:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ENCRYPT_KEY_EXPIRY_TIME:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ENCRYPTION_KEY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ENCRYPTION_MODE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_DOWN_BIT_LOADING:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_SDM_AMPLITUDE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_SDM_PHASE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_SDM_QUANTIZER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UNUSED0:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UNUSED1:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UNUSED2:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UNUSED3:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UNUSED4:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UP_BIT_LOADING:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EXT_FIRMWARE_VERSION:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EXTENDED_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FAILSAFE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FEATURE_SET:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FEC_MODE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FILE_INFO:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FIRMWARE_TIMESTAMP:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FIRMWARE_VER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FLOOD_UNKNOWN:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_IGMP_FRAME_RATE_LIMIT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_INGRESS_POLICING:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_INTERNAL_VERSION:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_IPMC_UNKNOWN_LEAVE_FWD:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_JEDEC_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LACP_DEST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LEARN_MODE_RULE_UPDATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LEARN_TABLE_MODE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LEN_ERROR_DISCARD:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LINK_STATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LINK_STATS_THRESHOLD_INTERVAL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LOCAL_SWITCHING:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LUE_FIELD_SELECT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LUE_FIELD_SELECT_LIST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MCAST_DOMAIN_CONFIG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MCAST_GLOBAL_CONFIG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MCAST_GROUP_INFO:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MDI_CROSSOVER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MIN_MAC_LIMIT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MPCP_CLOCK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MPCP_CLOCK_COMPENSATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MTU:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_NETWORK_PON_MAP:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_NEW_DN_FILTER_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_NEW_UP_FILTER_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_NVS_SCRATCHPAD:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_NVS_STATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ONU_AGGREGATE_LIMIT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ONU_HOLDOVER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ONU_IGMP_VLAN:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ONU_RULE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POLICER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_CAPABILITY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_DYNAMIC_ENTRIES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_STATS_THRESHOLD_INTERVAL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_VLAN_MEMBERSHIP:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_VLAN_POLICY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POWER_MON_RX_POWER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POWER_MON_TEMPERATURE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POWER_MON_TX_BIAS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POWER_MON_TX_POWER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POWER_MON_VCC:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PRI_ENQUEUING:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PSSTATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_QUEUE_CONFIG_V2:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_QUEUEPRIMAP:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_REPORT_THRESHOLDS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_BYTES_DELAYED:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_BYTES_DROPPED:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_DELAY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_DELAY_THRESHOLD:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME_TOO_SHORT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME1024TO1518:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME128TO255:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME1519PLUS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME256TO511:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME512TO1023:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME64:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME65TO127:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAMES_DROPPED:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_UNICAST_FRAMES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_SEARCH_CONFIG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_SEQUENCE_NUMBER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_SLE_MODE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STATIC_MAC_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_AD_SELECT_ABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_AD_TECH:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_ADMIN_STATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_AUTO_CFG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_LOCAL_SELECT_ABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_LOCAL_TECH:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_REMOTE_SIG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_RX_SELECT_ABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_RX_TECH:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_FEC_ABILITY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_FEC_CORRECTED_BLOCKS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_FEC_MODE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_FEC_UNCORRECTABLE_BLOCKS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_ADDR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_ALIGN_ERR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_BCAST_FRAMES_RX_OK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_BCAST_FRAMES_TX_OK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CAPABILITIES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CARRIER_SENSE_ERR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_COLLISION_FRAMES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_FRAMES_RX:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_FRAMES_TX:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_FUNCS_SUPPORTED:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_PAUSE_DELAY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_PAUSE_RX:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_PAUSE_TX:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_UNSUPPORTED_OP_RX:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_DUPLEX_STATUS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_ENABLE_STATUS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_EXCESSIVE_COLLISIONS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FCS_ERR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FR_EXCESSIVE_DEFERRAL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAME_TOO_LONG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAMES_DEFERRED:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAMES_LOST_MAC_RX_ERR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAMES_LOST_MAC_TX_ERR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAMES_RX_OK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAMES_TX_OK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_IN_RANGE_LEN_ERR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_LATE_COLLISIONS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_MCAST_ADDR_LIST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_MCAST_FRAMES_RX_OK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_MCAST_FRAMES_TX_OK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_MCAST_RX_STATUS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_MULTIPLE_COLL_FRAMES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_OCTETS_RX_OK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_OCTETS_TX_OK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_OUT_OF_RANGE_LEN_ERR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_PROMISCUOUS_STATUS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_SINGLE_COLL_FRAMES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_TX_ENABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAU_MEDIA_AVAIL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_DISCOVERY_TIMEOUT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_DISCOVERY_WINDOW_TX:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_MAC_CTRL_FRAMES_RX:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_MAC_CTRL_FRAMES_TX:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_RX_GATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_RX_REG_ACK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_RX_REG_REQUEST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_RX_REGISTER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_RX_REPORT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_TX_GATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_TX_REG_ACK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_TX_REG_REQUEST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_TX_REGISTER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_TX_REPORT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_OAM_EMUL_CRC8ERR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_OAM_LOCAL_ERR_FRAME_SECS_EVENT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_PHY_ADMIN_STATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_PHY_SYMBOL_ERR_DURING_CARRIER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_PHY_TYPE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_PHY_TYPE_LIST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_SYSTEM_RULE_OPTIONS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TRANSCEIVER_BURST_ACTIVITY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TRANSCEIVER_SIGNAL_DETECT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_BYTES_DELAYED:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_BYTES_DROPPED:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_BYTES_UNUSED:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_DELAY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_DELAY_THRESHOLD:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME1024TO1518:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME128TO255:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME1519PLUS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME256TO511:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME512TO1023:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME64:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME65TO127:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAMES_DROPPED:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_UNICAST_FRAMES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_UNI_SHAPER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_UP_FILTER_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_VLAN_DESTINATIONS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_VLAN_ETHERTYPE:
+        default:
+            {
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_var_desc_attr_base_unpack(bcmolt_epon_oam_tek_var_desc_attr_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_tek_leaf_attribute_unpack(&this->attribute, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->attribute)
+    {
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_STAT_THRESHOLD:
+            {
+                if (!bcmolt_epon_oam_tek_leaf_attribute_unpack(&this->u.port_stat_threshold.stat, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LINK_STAT_THRESHOLD:
+            {
+                if (!bcmolt_epon_oam_tek_leaf_attribute_unpack(&this->u.link_stat_threshold.stat, buf))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ALARM_THRESHOLD:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ARP_REPLICATE_DEST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_BCAST_RATE_LIMIT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_BYPASS_SOFT_LEARN:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_CHIP_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_CHIP_VERSION:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_CONTROL_PORT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_COS_TRANSLATION:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_CROSSBAR_CONFIG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_CTL_VLAN_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DN_FILTER_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DOWN_BURST_TOLL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DYN_LEARN_AGE_LIMIT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DYN_LEARN_TBL_SIZE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DYN_LEARNING_MODE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DYN_MAC_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EGRESS_SHAPING:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ENCRYPT_KEY_EXPIRY_TIME:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ENCRYPTION_KEY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ENCRYPTION_MODE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_DOWN_BIT_LOADING:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_SDM_AMPLITUDE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_SDM_PHASE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_SDM_QUANTIZER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UNUSED0:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UNUSED1:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UNUSED2:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UNUSED3:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UNUSED4:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UP_BIT_LOADING:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EXT_FIRMWARE_VERSION:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EXTENDED_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FAILSAFE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FEATURE_SET:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FEC_MODE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FILE_INFO:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FIRMWARE_TIMESTAMP:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FIRMWARE_VER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FLOOD_UNKNOWN:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_IGMP_FRAME_RATE_LIMIT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_INGRESS_POLICING:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_INTERNAL_VERSION:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_IPMC_UNKNOWN_LEAVE_FWD:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_JEDEC_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LACP_DEST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LEARN_MODE_RULE_UPDATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LEARN_TABLE_MODE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LEN_ERROR_DISCARD:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LINK_STATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LINK_STATS_THRESHOLD_INTERVAL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LOCAL_SWITCHING:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LUE_FIELD_SELECT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LUE_FIELD_SELECT_LIST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MCAST_DOMAIN_CONFIG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MCAST_GLOBAL_CONFIG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MCAST_GROUP_INFO:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MDI_CROSSOVER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MIN_MAC_LIMIT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MPCP_CLOCK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MPCP_CLOCK_COMPENSATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MTU:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_NETWORK_PON_MAP:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_NEW_DN_FILTER_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_NEW_UP_FILTER_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_NVS_SCRATCHPAD:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_NVS_STATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ONU_AGGREGATE_LIMIT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ONU_HOLDOVER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ONU_IGMP_VLAN:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ONU_RULE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POLICER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_CAPABILITY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_DYNAMIC_ENTRIES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_STATS_THRESHOLD_INTERVAL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_VLAN_MEMBERSHIP:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_VLAN_POLICY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POWER_MON_RX_POWER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POWER_MON_TEMPERATURE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POWER_MON_TX_BIAS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POWER_MON_TX_POWER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POWER_MON_VCC:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PRI_ENQUEUING:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PSSTATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_QUEUE_CONFIG_V2:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_QUEUEPRIMAP:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_REPORT_THRESHOLDS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_BYTES_DELAYED:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_BYTES_DROPPED:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_DELAY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_DELAY_THRESHOLD:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME_TOO_SHORT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME1024TO1518:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME128TO255:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME1519PLUS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME256TO511:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME512TO1023:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME64:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME65TO127:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAMES_DROPPED:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_UNICAST_FRAMES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_SEARCH_CONFIG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_SEQUENCE_NUMBER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_SLE_MODE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STATIC_MAC_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_AD_SELECT_ABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_AD_TECH:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_ADMIN_STATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_AUTO_CFG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_LOCAL_SELECT_ABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_LOCAL_TECH:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_REMOTE_SIG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_RX_SELECT_ABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_RX_TECH:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_FEC_ABILITY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_FEC_CORRECTED_BLOCKS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_FEC_MODE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_FEC_UNCORRECTABLE_BLOCKS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_ADDR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_ALIGN_ERR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_BCAST_FRAMES_RX_OK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_BCAST_FRAMES_TX_OK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CAPABILITIES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CARRIER_SENSE_ERR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_COLLISION_FRAMES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_FRAMES_RX:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_FRAMES_TX:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_FUNCS_SUPPORTED:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_PAUSE_DELAY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_PAUSE_RX:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_PAUSE_TX:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_UNSUPPORTED_OP_RX:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_DUPLEX_STATUS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_ENABLE_STATUS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_EXCESSIVE_COLLISIONS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FCS_ERR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FR_EXCESSIVE_DEFERRAL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAME_TOO_LONG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAMES_DEFERRED:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAMES_LOST_MAC_RX_ERR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAMES_LOST_MAC_TX_ERR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAMES_RX_OK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAMES_TX_OK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_IN_RANGE_LEN_ERR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_LATE_COLLISIONS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_MCAST_ADDR_LIST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_MCAST_FRAMES_RX_OK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_MCAST_FRAMES_TX_OK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_MCAST_RX_STATUS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_MULTIPLE_COLL_FRAMES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_OCTETS_RX_OK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_OCTETS_TX_OK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_OUT_OF_RANGE_LEN_ERR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_PROMISCUOUS_STATUS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_SINGLE_COLL_FRAMES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_TX_ENABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAU_MEDIA_AVAIL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_DISCOVERY_TIMEOUT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_DISCOVERY_WINDOW_TX:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_MAC_CTRL_FRAMES_RX:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_MAC_CTRL_FRAMES_TX:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_RX_GATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_RX_REG_ACK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_RX_REG_REQUEST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_RX_REGISTER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_RX_REPORT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_TX_GATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_TX_REG_ACK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_TX_REG_REQUEST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_TX_REGISTER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_TX_REPORT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_OAM_EMUL_CRC8ERR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_OAM_LOCAL_ERR_FRAME_SECS_EVENT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_PHY_ADMIN_STATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_PHY_SYMBOL_ERR_DURING_CARRIER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_PHY_TYPE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_PHY_TYPE_LIST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_SYSTEM_RULE_OPTIONS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TRANSCEIVER_BURST_ACTIVITY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TRANSCEIVER_SIGNAL_DETECT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_BYTES_DELAYED:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_BYTES_DROPPED:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_BYTES_UNUSED:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_DELAY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_DELAY_THRESHOLD:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME1024TO1518:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME128TO255:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME1519PLUS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME256TO511:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME512TO1023:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME64:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME65TO127:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAMES_DROPPED:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_UNICAST_FRAMES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_UNI_SHAPER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_UP_FILTER_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_VLAN_DESTINATIONS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_VLAN_ETHERTYPE:
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tek_var_desc_attr_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_tek_leaf_attribute attribute;
+    if (!bcmolt_epon_oam_tek_leaf_attribute_unpack(&attribute, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (attribute)
+    {
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_STAT_THRESHOLD:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LINK_STAT_THRESHOLD:
+            {
+                if (!bcmolt_epon_oam_buf_skip(packed, 2))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ALARM_THRESHOLD:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ARP_REPLICATE_DEST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_BCAST_RATE_LIMIT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_BYPASS_SOFT_LEARN:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_CHIP_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_CHIP_VERSION:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_CONTROL_PORT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_COS_TRANSLATION:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_CROSSBAR_CONFIG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_CTL_VLAN_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DN_FILTER_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DOWN_BURST_TOLL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DYN_LEARN_AGE_LIMIT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DYN_LEARN_TBL_SIZE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DYN_LEARNING_MODE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DYN_MAC_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EGRESS_SHAPING:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ENCRYPT_KEY_EXPIRY_TIME:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ENCRYPTION_KEY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ENCRYPTION_MODE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_DOWN_BIT_LOADING:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_SDM_AMPLITUDE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_SDM_PHASE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_SDM_QUANTIZER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UNUSED0:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UNUSED1:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UNUSED2:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UNUSED3:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UNUSED4:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UP_BIT_LOADING:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EXT_FIRMWARE_VERSION:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EXTENDED_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FAILSAFE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FEATURE_SET:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FEC_MODE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FILE_INFO:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FIRMWARE_TIMESTAMP:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FIRMWARE_VER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FLOOD_UNKNOWN:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_IGMP_FRAME_RATE_LIMIT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_INGRESS_POLICING:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_INTERNAL_VERSION:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_IPMC_UNKNOWN_LEAVE_FWD:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_JEDEC_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LACP_DEST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LEARN_MODE_RULE_UPDATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LEARN_TABLE_MODE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LEN_ERROR_DISCARD:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LINK_STATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LINK_STATS_THRESHOLD_INTERVAL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LOCAL_SWITCHING:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LUE_FIELD_SELECT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LUE_FIELD_SELECT_LIST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MCAST_DOMAIN_CONFIG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MCAST_GLOBAL_CONFIG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MCAST_GROUP_INFO:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MDI_CROSSOVER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MIN_MAC_LIMIT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MPCP_CLOCK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MPCP_CLOCK_COMPENSATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MTU:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_NETWORK_PON_MAP:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_NEW_DN_FILTER_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_NEW_UP_FILTER_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_NVS_SCRATCHPAD:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_NVS_STATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ONU_AGGREGATE_LIMIT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ONU_HOLDOVER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ONU_IGMP_VLAN:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ONU_RULE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POLICER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_CAPABILITY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_DYNAMIC_ENTRIES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_STATS_THRESHOLD_INTERVAL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_VLAN_MEMBERSHIP:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_VLAN_POLICY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POWER_MON_RX_POWER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POWER_MON_TEMPERATURE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POWER_MON_TX_BIAS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POWER_MON_TX_POWER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POWER_MON_VCC:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PRI_ENQUEUING:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PSSTATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_QUEUE_CONFIG_V2:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_QUEUEPRIMAP:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_REPORT_THRESHOLDS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_BYTES_DELAYED:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_BYTES_DROPPED:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_DELAY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_DELAY_THRESHOLD:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME_TOO_SHORT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME1024TO1518:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME128TO255:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME1519PLUS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME256TO511:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME512TO1023:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME64:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME65TO127:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAMES_DROPPED:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_UNICAST_FRAMES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_SEARCH_CONFIG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_SEQUENCE_NUMBER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_SLE_MODE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STATIC_MAC_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_AD_SELECT_ABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_AD_TECH:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_ADMIN_STATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_AUTO_CFG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_LOCAL_SELECT_ABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_LOCAL_TECH:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_REMOTE_SIG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_RX_SELECT_ABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_RX_TECH:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_FEC_ABILITY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_FEC_CORRECTED_BLOCKS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_FEC_MODE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_FEC_UNCORRECTABLE_BLOCKS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_ADDR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_ALIGN_ERR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_BCAST_FRAMES_RX_OK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_BCAST_FRAMES_TX_OK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CAPABILITIES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CARRIER_SENSE_ERR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_COLLISION_FRAMES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_FRAMES_RX:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_FRAMES_TX:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_FUNCS_SUPPORTED:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_PAUSE_DELAY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_PAUSE_RX:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_PAUSE_TX:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_UNSUPPORTED_OP_RX:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_DUPLEX_STATUS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_ENABLE_STATUS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_EXCESSIVE_COLLISIONS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FCS_ERR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FR_EXCESSIVE_DEFERRAL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAME_TOO_LONG:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAMES_DEFERRED:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAMES_LOST_MAC_RX_ERR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAMES_LOST_MAC_TX_ERR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAMES_RX_OK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAMES_TX_OK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_ID:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_IN_RANGE_LEN_ERR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_LATE_COLLISIONS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_MCAST_ADDR_LIST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_MCAST_FRAMES_RX_OK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_MCAST_FRAMES_TX_OK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_MCAST_RX_STATUS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_MULTIPLE_COLL_FRAMES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_OCTETS_RX_OK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_OCTETS_TX_OK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_OUT_OF_RANGE_LEN_ERR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_PROMISCUOUS_STATUS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_SINGLE_COLL_FRAMES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_TX_ENABLE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAU_MEDIA_AVAIL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_DISCOVERY_TIMEOUT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_DISCOVERY_WINDOW_TX:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_MAC_CTRL_FRAMES_RX:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_MAC_CTRL_FRAMES_TX:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_RX_GATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_RX_REG_ACK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_RX_REG_REQUEST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_RX_REGISTER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_RX_REPORT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_TX_GATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_TX_REG_ACK:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_TX_REG_REQUEST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_TX_REGISTER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_TX_REPORT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_OAM_EMUL_CRC8ERR:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_OAM_LOCAL_ERR_FRAME_SECS_EVENT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_PHY_ADMIN_STATE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_PHY_SYMBOL_ERR_DURING_CARRIER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_PHY_TYPE:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_PHY_TYPE_LIST:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_SYSTEM_RULE_OPTIONS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TRANSCEIVER_BURST_ACTIVITY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TRANSCEIVER_SIGNAL_DETECT:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_BYTES_DELAYED:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_BYTES_DROPPED:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_BYTES_UNUSED:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_DELAY:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_DELAY_THRESHOLD:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME1024TO1518:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME128TO255:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME1519PLUS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME256TO511:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME512TO1023:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME64:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME65TO127:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAMES_DROPPED:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_UNICAST_FRAMES:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_UNI_SHAPER:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_UP_FILTER_TBL:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_VLAN_DESTINATIONS:
+        case BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_VLAN_ETHERTYPE:
+        default:
+            {
+            }
+            break;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_record_continued_pack(bcmolt_epon_oam_tls_record_continued *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t preLenFieldPos;
+    uint32_t bytesAfterLenField;
+    if (!bcmolt_epon_oam_tls_content_type_pack(this->content_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_tls_version_pack(&this->version, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+    /* skip over length field (we'll fill it in later) */
+    if (!bcmolt_epon_oam_buf_skip(buf, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    switch (this->content_type)
+    {
+        case BCMOLT_EPON_OAM_TLS_CONTENT_TYPE_ALERT:
+        case BCMOLT_EPON_OAM_TLS_CONTENT_TYPE_APPLICATION_DATA:
+        case BCMOLT_EPON_OAM_TLS_CONTENT_TYPE_CHANGE_CIPHER_SPEC:
+        case BCMOLT_EPON_OAM_TLS_CONTENT_TYPE_HANDSHAKE:
+        default:
+            {
+                if ((this->u.def.data_count > 0) && (this->u.def.data == NULL))
+                {
+                    bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"data\" of struct \"bcmolt_epon_oam_tls_record_continued_def\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                    return BCMOS_FALSE;
+                }
+
+                if (!bcmolt_epon_oam_buf_write(buf, this->u.def.data, this->u.def.data_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint16_t));
+    if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, bytesAfterLenField))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint16_t))))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tls_record_continued_get_packed_length(bcmolt_epon_oam_tls_record_continued *this)
+{
+    uint32_t count = 5;
+    switch (this->content_type)
+    {
+        case BCMOLT_EPON_OAM_TLS_CONTENT_TYPE_ALERT:
+        case BCMOLT_EPON_OAM_TLS_CONTENT_TYPE_APPLICATION_DATA:
+        case BCMOLT_EPON_OAM_TLS_CONTENT_TYPE_CHANGE_CIPHER_SPEC:
+        case BCMOLT_EPON_OAM_TLS_CONTENT_TYPE_HANDSHAKE:
+        default:
+            {
+                count += this->u.def.data_count;
+            }
+            break;
+    }
+
+    return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_record_continued_unpack(bcmolt_epon_oam_tls_record_continued *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint16_t length = 0;
+    bcmolt_epon_oam_buf postLenBuf;
+    if (!bcmolt_epon_oam_tls_content_type_unpack(&this->content_type, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_tls_version_unpack(&this->version, buf, extra_mem))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, buf->curr);
+    switch (this->content_type)
+    {
+        case BCMOLT_EPON_OAM_TLS_CONTENT_TYPE_ALERT:
+        case BCMOLT_EPON_OAM_TLS_CONTENT_TYPE_APPLICATION_DATA:
+        case BCMOLT_EPON_OAM_TLS_CONTENT_TYPE_CHANGE_CIPHER_SPEC:
+        case BCMOLT_EPON_OAM_TLS_CONTENT_TYPE_HANDSHAKE:
+        default:
+            {
+                this->u.def.data_count = bcmolt_epon_oam_tls_record_continued_def_count_data(&postLenBuf);
+                if ((this->u.def.data_count > 0) && (this->u.def.data == NULL))
+                {
+                    if (extra_mem == NULL)
+                    {
+                        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"data\" of struct \"bcmolt_epon_oam_tls_record_continued_def\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+                        return BCMOS_FALSE;
+                    }
+                    else
+                    {
+                        this->u.def.data = (uint8_t *) *extra_mem;
+                        *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->u.def.data_count * sizeof(uint8_t));
+                    }
+                }
+
+                if (!bcmolt_epon_oam_buf_read(&postLenBuf, this->u.def.data, this->u.def.data_count))
+                {
+                    return BCMOS_FALSE;
+                }
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(buf, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_record_continued_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_tls_content_type content_type;
+    bcmolt_epon_oam_buf postLenBuf;
+    uint16_t length;
+    if (!bcmolt_epon_oam_tls_content_type_unpack(&content_type, packed))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_read_u16(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, packed->curr);
+    switch (content_type)
+    {
+        case BCMOLT_EPON_OAM_TLS_CONTENT_TYPE_ALERT:
+        case BCMOLT_EPON_OAM_TLS_CONTENT_TYPE_APPLICATION_DATA:
+        case BCMOLT_EPON_OAM_TLS_CONTENT_TYPE_CHANGE_CIPHER_SPEC:
+        case BCMOLT_EPON_OAM_TLS_CONTENT_TYPE_HANDSHAKE:
+        default:
+            {
+                uint32_t data_elem_count = 0;
+                while (BCMOS_TRUE)
+                {
+                    if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 1))
+                    {
+                        break;
+                    }
+
+                    data_elem_count += 1;
+                }
+
+                *extra_mem += BCMOS_ROUND_TO_WORD(data_elem_count * sizeof(uint8_t));
+            }
+            break;
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(packed, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tls_record_continued_def_count_data(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 1);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_signature_and_hash_algorithm_pack(bcmolt_epon_oam_tls_signature_and_hash_algorithm *this, bcmolt_epon_oam_buf *buf)
+{
+    if (!bcmolt_epon_oam_tls_hash_algorithm_pack(this->hash, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_tls_signature_algorithm_pack(this->signature, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_signature_and_hash_algorithm_unpack(bcmolt_epon_oam_tls_signature_and_hash_algorithm *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    if (!bcmolt_epon_oam_tls_hash_algorithm_unpack(&this->hash, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_tls_signature_algorithm_unpack(&this->signature, buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_signature_and_hash_algorithm_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    (void)extra_mem;
+    return bcmolt_epon_oam_buf_skip(packed, 2);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_signature_and_hash_algorithm_list_pack(bcmolt_epon_oam_tls_signature_and_hash_algorithm_list *this, bcmolt_epon_oam_buf *buf)
+{
+    uint32_t preLenFieldPos;
+    uint32_t bytesAfterLenField;
+    uint32_t i0;
+    preLenFieldPos = bcmolt_epon_oam_buf_get_used(buf);
+
+    /* skip over length field (we'll fill it in later) */
+    if (!bcmolt_epon_oam_buf_skip(buf, 2))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if ((this->supported_signature_algorithms_count > 0) && (this->supported_signature_algorithms == NULL))
+    {
+        bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"supported_signature_algorithms\" of struct \"bcmolt_epon_oam_tls_signature_and_hash_algorithm_list\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+        return BCMOS_FALSE;
+    }
+
+    if (this->supported_signature_algorithms_count > 65534L)
+    {
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->supported_signature_algorithms_count; i0++)
+    {
+        if (!bcmolt_epon_oam_tls_signature_and_hash_algorithm_pack(&this->supported_signature_algorithms[i0], buf))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    bytesAfterLenField = bcmolt_epon_oam_buf_get_used(buf) - (preLenFieldPos + sizeof(uint16_t));
+    if (!bcmolt_epon_oam_buf_set_pos(buf, preLenFieldPos))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_write_u16(buf, bytesAfterLenField))
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (!bcmolt_epon_oam_buf_set_pos(buf, bytesAfterLenField + (preLenFieldPos + sizeof(uint16_t))))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tls_signature_and_hash_algorithm_list_get_packed_length(bcmolt_epon_oam_tls_signature_and_hash_algorithm_list *this)
+{
+    return 2 + (2 * this->supported_signature_algorithms_count);
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_signature_and_hash_algorithm_list_unpack(bcmolt_epon_oam_tls_signature_and_hash_algorithm_list *this, bcmolt_epon_oam_buf *buf, void **extra_mem)
+{
+    uint16_t length = 0;
+    bcmolt_epon_oam_buf postLenBuf;
+    uint32_t i0;
+    if (!bcmolt_epon_oam_buf_read_u16(buf, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, buf->curr);
+    this->supported_signature_algorithms_count = bcmolt_epon_oam_tls_signature_and_hash_algorithm_list_count_supported_signature_algorithms(&postLenBuf);
+    if ((this->supported_signature_algorithms_count > 0) && (this->supported_signature_algorithms == NULL))
+    {
+        if (extra_mem == NULL)
+        {
+            bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"supported_signature_algorithms\" of struct \"bcmolt_epon_oam_tls_signature_and_hash_algorithm_list\" is uninitialized (NULL).  You must allocate memory for this pointer before sending/receiving the message.\n");
+            return BCMOS_FALSE;
+        }
+        else
+        {
+            this->supported_signature_algorithms = (bcmolt_epon_oam_tls_signature_and_hash_algorithm *) *extra_mem;
+            *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->supported_signature_algorithms_count * sizeof(bcmolt_epon_oam_tls_signature_and_hash_algorithm));
+        }
+    }
+
+    if (this->supported_signature_algorithms_count > 65534L)
+    {
+        return BCMOS_FALSE;
+    }
+
+    for (i0 = 0; i0 < this->supported_signature_algorithms_count; i0++)
+    {
+        if (!bcmolt_epon_oam_tls_signature_and_hash_algorithm_unpack(&this->supported_signature_algorithms[i0], &postLenBuf, extra_mem))
+        {
+            return BCMOS_FALSE;
+        }
+    }
+
+    if (!bcmolt_epon_oam_buf_skip(buf, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmolt_epon_oam_tls_signature_and_hash_algorithm_list_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem)
+{
+    bcmolt_epon_oam_buf postLenBuf;
+    uint16_t length;
+    uint32_t supported_signature_algorithms_elem_count = 0;
+    if (!bcmolt_epon_oam_buf_read_u16(packed, &length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_epon_oam_buf_init(&postLenBuf, length, packed->curr);
+    while (BCMOS_TRUE)
+    {
+        if (!bcmolt_epon_oam_buf_skip(&postLenBuf, 2))
+        {
+            break;
+        }
+
+        supported_signature_algorithms_elem_count += 1;
+    }
+
+    *extra_mem += BCMOS_ROUND_TO_WORD(supported_signature_algorithms_elem_count * sizeof(bcmolt_epon_oam_tls_signature_and_hash_algorithm));
+    if (!bcmolt_epon_oam_buf_skip(packed, length))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmolt_epon_oam_tls_signature_and_hash_algorithm_list_count_supported_signature_algorithms(bcmolt_epon_oam_buf *buf)
+{
+    return (bcmolt_epon_oam_buf_get_remaining_size(buf) / 2);
+}
diff --git a/bcm68620_release/release/host_reference/common_epon_oam/bcmolt_epon_oam_types.h b/bcm68620_release/release/host_reference/common_epon_oam/bcmolt_epon_oam_types.h
new file mode 100644
index 0000000..a42942e
--- /dev/null
+++ b/bcm68620_release/release/host_reference/common_epon_oam/bcmolt_epon_oam_types.h
@@ -0,0 +1,23906 @@
+/*
+<:copyright-BRCM:2016:proprietary:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+This program is the proprietary software of Broadcom Corporation and/or its
+licensors, and may only be used, duplicated, modified or distributed pursuant
+to the terms and conditions of a separate, written license agreement executed
+between you and Broadcom (an "Authorized License").  Except as set forth in
+an Authorized License, Broadcom grants no license (express or implied), right
+to use, or waiver of any kind with respect to the Software, and Broadcom
+expressly reserves all rights in and to the Software and all intellectual
+property rights therein.  IF YOU HAVE NO AUTHORIZED LICENSE, THEN YOU HAVE
+NO RIGHT TO USE THIS SOFTWARE IN ANY WAY, AND SHOULD IMMEDIATELY NOTIFY
+BROADCOM AND DISCONTINUE ALL USE OF THE SOFTWARE.
+
+Except as expressly set forth in the Authorized License,
+
+1. This program, including its structure, sequence and organization,
+    constitutes the valuable trade secrets of Broadcom, and you shall use
+    all reasonable efforts to protect the confidentiality thereof, and to
+    use this information only in connection with your use of Broadcom
+    integrated circuit products.
+
+2. TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
+    AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES, REPRESENTATIONS OR
+    WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH
+    RESPECT TO THE SOFTWARE.  BROADCOM SPECIFICALLY DISCLAIMS ANY AND
+    ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY, NONINFRINGEMENT,
+    FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES, ACCURACY OR
+    COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR CORRESPONDENCE
+    TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING OUT OF USE OR
+    PERFORMANCE OF THE SOFTWARE.
+
+3. TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM OR
+    ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL, INCIDENTAL, SPECIAL,
+    INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER ARISING OUT OF OR IN ANY
+    WAY RELATING TO YOUR USE OF OR INABILITY TO USE THE SOFTWARE EVEN
+    IF BROADCOM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES;
+    OR (ii) ANY AMOUNT IN EXCESS OF THE AMOUNT ACTUALLY PAID FOR THE
+    SOFTWARE ITSELF OR U.S. $1, WHICHEVER IS GREATER. THESE LIMITATIONS
+    SHALL APPLY NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY
+    LIMITED REMEDY.
+:>
+*/
+#ifndef BCMOLT_EPON_OAM_TYPES_H_
+#define BCMOLT_EPON_OAM_TYPES_H_
+
+#include "bcmos_system.h"
+#include "bcmos_common.h"
+#include "bcmos_errno.h"
+#include "bcmolt_buf.h"
+
+typedef bcmolt_buf bcmolt_epon_oam_buf;
+
+/** \addtogroup epon_oam
+ * @{
+ */
+
+/** Alarm Config Mode. 
+ */
+typedef enum bcmolt_epon_oam_alarm_config_mode
+{
+    BCMOLT_EPON_OAM_ALARM_CONFIG_MODE_CLOSE = 0,    /**< Close. */
+    BCMOLT_EPON_OAM_ALARM_CONFIG_MODE_OPEN  = 1     /**< Open. */
+} bcmolt_epon_oam_alarm_config_mode;
+
+/** Autonegotiate Admin State. 
+ */
+typedef enum bcmolt_epon_oam_autonegotiate_admin_state
+{
+    BCMOLT_EPON_OAM_AUTONEGOTIATE_ADMIN_STATE_OAM_AUTO_ADMIN_DISABLED   = 1,                            /**< OAM Auto Admin Disabled. */
+    BCMOLT_EPON_OAM_AUTONEGOTIATE_ADMIN_STATE_OAM_AUTO_ADMIN_ENABLED    = 2                             /**< OAM Auto Admin Enabled. */
+} bcmolt_epon_oam_autonegotiate_admin_state;
+
+/** Auto Negotiation Auto Config. 
+ */
+typedef enum bcmolt_epon_oam_auto_negotiation_auto_config
+{
+    BCMOLT_EPON_OAM_AUTO_NEGOTIATION_AUTO_CONFIG_OTHER                  = 1,                            /**< Other. */
+    BCMOLT_EPON_OAM_AUTO_NEGOTIATION_AUTO_CONFIG_CONFIGURING            = 2,                            /**< Configuring. */
+    BCMOLT_EPON_OAM_AUTO_NEGOTIATION_AUTO_CONFIG_COMPLETE               = 3,                            /**< Complete. */
+    BCMOLT_EPON_OAM_AUTO_NEGOTIATION_AUTO_CONFIG_DISABLED               = 4,                            /**< Disabled. */
+    BCMOLT_EPON_OAM_AUTO_NEGOTIATION_AUTO_CONFIG_PARALLEL_FAIL          = 5                             /**< Parallel Fail. */
+} bcmolt_epon_oam_auto_negotiation_auto_config;
+
+/** Auto-Negotiation Capability. 
+ */
+typedef enum bcmolt_epon_oam_auto_negotiation_capability
+{
+    BCMOLT_EPON_OAM_AUTO_NEGOTIATION_CAPABILITY_NONE                    = 0,
+    BCMOLT_EPON_OAM_AUTO_NEGOTIATION_CAPABILITY_HALF_DUPLEX             = 0x0001,                       /**< Half Duplex. */
+    BCMOLT_EPON_OAM_AUTO_NEGOTIATION_CAPABILITY_FULL_DUPLEX             = 0x0002,                       /**< Full Duplex. */
+    BCMOLT_EPON_OAM_AUTO_NEGOTIATION_CAPABILITY_TEN_MBPS                = 0x0004,                       /**< 10 Mbps. */
+    BCMOLT_EPON_OAM_AUTO_NEGOTIATION_CAPABILITY_HUNDRED_MBPS            = 0x0008,                       /**< 100 Mbps. */
+    BCMOLT_EPON_OAM_AUTO_NEGOTIATION_CAPABILITY_THOUSAND_MBPS           = 0x0010,                       /**< 1000 Mbps. */
+    BCMOLT_EPON_OAM_AUTO_NEGOTIATION_CAPABILITY_TEN_GBPS                = 0x0020,                       /**< 10 Gbps. */
+    BCMOLT_EPON_OAM_AUTO_NEGOTIATION_CAPABILITY_FLOW_CONTROL            = 0x0040,                       /**< Flow Control. */
+    BCMOLT_EPON_OAM_AUTO_NEGOTIATION_CAPABILITY_AUTO_MDI_MDI_X          = 0x0080                        /**< Auto MDI/MDI-X. */
+} bcmolt_epon_oam_auto_negotiation_capability;
+
+/** Auto Remote Sig. 
+ */
+typedef enum bcmolt_epon_oam_auto_remote_sig
+{
+    BCMOLT_EPON_OAM_AUTO_REMOTE_SIG_DETECTED                            = 1,                            /**< Detected. */
+    BCMOLT_EPON_OAM_AUTO_REMOTE_SIG_NOT_DETECTED                        = 2                             /**< Not Detected. */
+} bcmolt_epon_oam_auto_remote_sig;
+
+/** Auto Selector. 
+ */
+typedef enum bcmolt_epon_oam_auto_selector
+{
+    BCMOLT_EPON_OAM_AUTO_SELECTOR_OTHER                                 = 1,                            /**< Other. */
+    BCMOLT_EPON_OAM_AUTO_SELECTOR_ETHERNET                              = 2,                            /**< Ethernet. */
+    BCMOLT_EPON_OAM_AUTO_SELECTOR_ISO_ETHERNET                          = 3                             /**< ISO Ethernet. */
+} bcmolt_epon_oam_auto_selector;
+
+/** Binary Field Select Type. 
+ */
+typedef enum bcmolt_epon_oam_binary_field_select_type
+{
+    BCMOLT_EPON_OAM_BINARY_FIELD_SELECT_TYPE_DA                         = 1,                            /**< DA. */
+    BCMOLT_EPON_OAM_BINARY_FIELD_SELECT_TYPE_SA                         = 2,                            /**< SA. */
+    BCMOLT_EPON_OAM_BINARY_FIELD_SELECT_TYPE_SSM_PLUS_IPDA              = 3,                            /**< SSM + IP DA. */
+    BCMOLT_EPON_OAM_BINARY_FIELD_SELECT_TYPE_PROG_FIELD                 = 4,                            /**< Prog Field. */
+    BCMOLT_EPON_OAM_BINARY_FIELD_SELECT_TYPE_CVLAN_VID                  = 5,                            /**< CVLAN VID. */
+    BCMOLT_EPON_OAM_BINARY_FIELD_SELECT_TYPE_SVLAN_VID_CVLAN_VID        = 6                             /**< SVLAN VID & CVLAN VID. */
+} bcmolt_epon_oam_binary_field_select_type;
+
+/** CMC OAM Request Option 
+ */
+typedef enum bcmolt_epon_oam_brcm_cmc_request_option
+{
+    BCMOLT_EPON_OAM_BRCM_CMC_REQUEST_OPTION_ADD                         = 1,                            /**< Add. */
+    BCMOLT_EPON_OAM_BRCM_CMC_REQUEST_OPTION_REMOVE                      = 2                             /**< Remove. */
+} bcmolt_epon_oam_brcm_cmc_request_option;
+
+/** CMC OAM result codes 
+ */
+typedef enum bcmolt_epon_oam_brcm_cmc_result_code
+{
+    BCMOLT_EPON_OAM_BRCM_CMC_RESULT_CODE_SUCCESS                        = 0,                            /**< Success. */
+    BCMOLT_EPON_OAM_BRCM_CMC_RESULT_CODE_FAIL                           = 1,                            /**< Fail. */
+    BCMOLT_EPON_OAM_BRCM_CMC_RESULT_CODE_INVALID_PARAMETERS             = 2                             /**< Invalid Parameters. */
+} bcmolt_epon_oam_brcm_cmc_result_code;
+
+/** CMC OAM annex modes 
+ */
+typedef enum bcmolt_epon_oam_brcm_cmc_annex
+{
+    BCMOLT_EPON_OAM_BRCM_CMC_ANNEX_ANNEX_A                              = 0,                            /**< Annex A. */
+    BCMOLT_EPON_OAM_BRCM_CMC_ANNEX_ANNEX_B                              = 1                             /**< Annex B. */
+} bcmolt_epon_oam_brcm_cmc_annex;
+
+/** Type of CMC Interface 
+ */
+typedef enum bcmolt_epon_oam_brcm_cmc_intf_type
+{
+    BCMOLT_EPON_OAM_BRCM_CMC_INTF_TYPE_ETHERNET_CSMACD                  = 6,                            /**< Ethernet Csmacd. */
+    BCMOLT_EPON_OAM_BRCM_CMC_INTF_TYPE_SOFTWARE_LOOPBACK                = 24,                           /**< Software Loopback. */
+    BCMOLT_EPON_OAM_BRCM_CMC_INTF_TYPE_DOCS_CABLE_MAC_LAYER             = 127,                          /**< Docs Cable Mac Layer. */
+    BCMOLT_EPON_OAM_BRCM_CMC_INTF_TYPE_DOCS_CABLE_DOWNSTREAM            = 128,                          /**< Docs Cable Downstream. */
+    BCMOLT_EPON_OAM_BRCM_CMC_INTF_TYPE_DOCS_CABLE_UPSTREAM              = 129                           /**< Docs Cable Upstream. */
+} bcmolt_epon_oam_brcm_cmc_intf_type;
+
+/** Interface status, used for ifAdminStatus and ifOperStatus 
+ */
+typedef enum bcmolt_epon_oam_brcm_cmc_interface_status
+{
+    BCMOLT_EPON_OAM_BRCM_CMC_INTERFACE_STATUS_UP                        = 1,                            /**< up. */
+    BCMOLT_EPON_OAM_BRCM_CMC_INTERFACE_STATUS_DOWN                      = 2,                            /**< down. */
+    BCMOLT_EPON_OAM_BRCM_CMC_INTERFACE_STATUS_TESTING                   = 3,                            /**< testing. */
+    BCMOLT_EPON_OAM_BRCM_CMC_INTERFACE_STATUS_UNKNOWN                   = 4,                            /**< unknown. */
+    BCMOLT_EPON_OAM_BRCM_CMC_INTERFACE_STATUS_DORMANT                   = 5,                            /**< dormant. */
+    BCMOLT_EPON_OAM_BRCM_CMC_INTERFACE_STATUS_NOT_PRESENT               = 6,                            /**< not present. */
+    BCMOLT_EPON_OAM_BRCM_CMC_INTERFACE_STATUS_LOWER_LAYER_DOWN          = 7                             /**< lower layer down. */
+} bcmolt_epon_oam_brcm_cmc_interface_status;
+
+/** CMC OAM interleaver modes 
+ */
+typedef enum bcmolt_epon_oam_brcm_cmc_interleaver
+{
+    BCMOLT_EPON_OAM_BRCM_CMC_INTERLEAVER_I0                             = 0,                            /**< {128,1}. */
+    BCMOLT_EPON_OAM_BRCM_CMC_INTERLEAVER_I1                             = 1,                            /**< {128,2}. */
+    BCMOLT_EPON_OAM_BRCM_CMC_INTERLEAVER_I2                             = 2,                            /**< {64,2}. */
+    BCMOLT_EPON_OAM_BRCM_CMC_INTERLEAVER_I3                             = 3,                            /**< {128,3}. */
+    BCMOLT_EPON_OAM_BRCM_CMC_INTERLEAVER_I4                             = 4,                            /**< {32,4}. */
+    BCMOLT_EPON_OAM_BRCM_CMC_INTERLEAVER_I5                             = 5,                            /**< {128,4}. */
+    BCMOLT_EPON_OAM_BRCM_CMC_INTERLEAVER_I6                             = 6,                            /**< {16,8}. */
+    BCMOLT_EPON_OAM_BRCM_CMC_INTERLEAVER_I7                             = 7,                            /**< {128,5}. */
+    BCMOLT_EPON_OAM_BRCM_CMC_INTERLEAVER_I8                             = 8,                            /**< {8,16}. */
+    BCMOLT_EPON_OAM_BRCM_CMC_INTERLEAVER_I9                             = 9,                            /**< {128,6}. */
+    BCMOLT_EPON_OAM_BRCM_CMC_INTERLEAVER_I10                            = 10,                           /**< {4,32}. */
+    BCMOLT_EPON_OAM_BRCM_CMC_INTERLEAVER_I11                            = 11,                           /**< {128,7}. */
+    BCMOLT_EPON_OAM_BRCM_CMC_INTERLEAVER_I12                            = 12,                           /**< {2,64}. */
+    BCMOLT_EPON_OAM_BRCM_CMC_INTERLEAVER_I13                            = 13,                           /**< {128,8}. */
+    BCMOLT_EPON_OAM_BRCM_CMC_INTERLEAVER_I14                            = 14                            /**< {1,128}. */
+} bcmolt_epon_oam_brcm_cmc_interleaver;
+
+/** CMC OAM Load Balancing Methods 
+ */
+typedef enum bcmolt_epon_oam_brcm_cmc_load_balance_method
+{
+    BCMOLT_EPON_OAM_BRCM_CMC_LOAD_BALANCE_METHOD_STAT                   = 1,                            /**< Based on sums of Min Guaranteed Rates */
+    BCMOLT_EPON_OAM_BRCM_CMC_LOAD_BALANCE_METHOD_DYNAMIC                = 2                             /**< Based on channel utilization */
+} bcmolt_epon_oam_brcm_cmc_load_balance_method;
+
+/** CMC OAM modulation modes 
+ */
+typedef enum bcmolt_epon_oam_brcm_cmc_modulation
+{
+    BCMOLT_EPON_OAM_BRCM_CMC_MODULATION_QAM64                           = 0,                            /**< QAM64. */
+    BCMOLT_EPON_OAM_BRCM_CMC_MODULATION_QAM256                          = 1,                            /**< QAM256. */
+    BCMOLT_EPON_OAM_BRCM_CMC_MODULATION_QAM1024                         = 2                             /**< QAM1024. */
+} bcmolt_epon_oam_brcm_cmc_modulation;
+
+/** CMC OAM US modulation types 
+ */
+typedef enum bcmolt_epon_oam_brcm_cmc_us_modulation_type
+{
+    BCMOLT_EPON_OAM_BRCM_CMC_US_MODULATION_TYPE_UNKNOWN                 = 0,                            /**< Unknown. */
+    BCMOLT_EPON_OAM_BRCM_CMC_US_MODULATION_TYPE_TDMA                    = 1,                            /**< TDMA. */
+    BCMOLT_EPON_OAM_BRCM_CMC_US_MODULATION_TYPE_ATDMA                   = 2,                            /**< ATDMA. */
+    BCMOLT_EPON_OAM_BRCM_CMC_US_MODULATION_TYPE_SCDMA                   = 3,                            /**< SCDMA. */
+    BCMOLT_EPON_OAM_BRCM_CMC_US_MODULATION_TYPE_TDMA_ATDMA              = 4                             /**< TDMA-ATDMA. */
+} bcmolt_epon_oam_brcm_cmc_us_modulation_type;
+
+/** CMC OAM US profile types 
+ */
+typedef enum bcmolt_epon_oam_brcm_cmc_us_profile_type
+{
+    BCMOLT_EPON_OAM_BRCM_CMC_US_PROFILE_TYPE_FAIR                       = 0,                            /**< Fair. */
+    BCMOLT_EPON_OAM_BRCM_CMC_US_PROFILE_TYPE_GOOD                       = 1,                            /**< Good. */
+    BCMOLT_EPON_OAM_BRCM_CMC_US_PROFILE_TYPE_BEST                       = 2                             /**< Best. */
+} bcmolt_epon_oam_brcm_cmc_us_profile_type;
+
+/** CNU Connectivity State 
+ */
+typedef enum bcmolt_epon_oam_brcm_cnu_connectivity_state
+{
+    BCMOLT_EPON_OAM_BRCM_CNU_CONNECTIVITY_STATE_OTHER                           = 1,                    /**< Other. */
+    BCMOLT_EPON_OAM_BRCM_CNU_CONNECTIVITY_STATE_INITIAL_RANGING                 = 2,                    /**< Initial Ranging. */
+    BCMOLT_EPON_OAM_BRCM_CNU_CONNECTIVITY_STATE_RANGING_AUTO_ADJ_COMPLETE       = 4,                    /**< Ranging Auto Adj Complete. */
+    BCMOLT_EPON_OAM_BRCM_CNU_CONNECTIVITY_STATE_DHCP_V4COMPLETE                 = 5,                    /**< Dhcp V4 Complete. */
+    BCMOLT_EPON_OAM_BRCM_CNU_CONNECTIVITY_STATE_REGISTRATION_COMPLETE           = 6,                    /**< Registration Complete. */
+    BCMOLT_EPON_OAM_BRCM_CNU_CONNECTIVITY_STATE_OPERATIONAL                     = 8,                    /**< Operational. */
+    BCMOLT_EPON_OAM_BRCM_CNU_CONNECTIVITY_STATE_BPI_INIT                        = 9,                    /**< Bpi Init. */
+    BCMOLT_EPON_OAM_BRCM_CNU_CONNECTIVITY_STATE_START_EAE                       = 10,                   /**< Start EAE. */
+    BCMOLT_EPON_OAM_BRCM_CNU_CONNECTIVITY_STATE_START_DHCP_V4                   = 11,                   /**< Start Dhcp V4. */
+    BCMOLT_EPON_OAM_BRCM_CNU_CONNECTIVITY_STATE_START_DHCP_V6                   = 12,                   /**< Start Dhcp V6. */
+    BCMOLT_EPON_OAM_BRCM_CNU_CONNECTIVITY_STATE_DHCP_V6COMPLETE                 = 13,                   /**< Dhcp V6 Complete. */
+    BCMOLT_EPON_OAM_BRCM_CNU_CONNECTIVITY_STATE_START_CONFIG_FILE_DOWNLOAD      = 14,                   /**< Start Config File Download. */
+    BCMOLT_EPON_OAM_BRCM_CNU_CONNECTIVITY_STATE_CONFIG_FILE_DOWNLOAD_COMPLETE   = 15,                   /**< Config File Download Complete. */
+    BCMOLT_EPON_OAM_BRCM_CNU_CONNECTIVITY_STATE_START_REGISTRATION              = 16,                   /**< Start Registration. */
+    BCMOLT_EPON_OAM_BRCM_CNU_CONNECTIVITY_STATE_FORWARDING_DISABLED             = 17,                   /**< Forwarding Disabled. */
+    BCMOLT_EPON_OAM_BRCM_CNU_CONNECTIVITY_STATE_RF_MUTE_ALL                     = 18                    /**< Rf Mute All. */
+} bcmolt_epon_oam_brcm_cnu_connectivity_state;
+
+/** Version of DOCSIS that CNU is operating in 
+ */
+typedef enum bcmolt_epon_oam_brcm_cnu_docsis_version
+{
+    BCMOLT_EPON_OAM_BRCM_CNU_DOCSIS_VERSION_DOCSIS10                            = 1,                    /**< Docsis10. */
+    BCMOLT_EPON_OAM_BRCM_CNU_DOCSIS_VERSION_DOCSIS11                            = 2,                    /**< Docsis11. */
+    BCMOLT_EPON_OAM_BRCM_CNU_DOCSIS_VERSION_DOCSIS20                            = 3,                    /**< Docsis20. */
+    BCMOLT_EPON_OAM_BRCM_CNU_DOCSIS_VERSION_DOCSIS30                            = 4                     /**< Docsis30. */
+} bcmolt_epon_oam_brcm_cnu_docsis_version;
+
+/** CNU IP Address Types 
+ */
+typedef enum bcmolt_epon_oam_brcm_cnu_ipaddr_type
+{
+    BCMOLT_EPON_OAM_BRCM_CNU_IPADDR_TYPE_UNKNOWN                                = 1,                    /**< Unknown. */
+    BCMOLT_EPON_OAM_BRCM_CNU_IPADDR_TYPE_IPV4                                   = 2,                    /**< IPv4. */
+    BCMOLT_EPON_OAM_BRCM_CNU_IPADDR_TYPE_IPV6                                   = 3,                    /**< IPv6. */
+    BCMOLT_EPON_OAM_BRCM_CNU_IPADDR_TYPE_IPV4Z                                  = 4,                    /**< IPv4z. */
+    BCMOLT_EPON_OAM_BRCM_CNU_IPADDR_TYPE_IPV6Z                                  = 5,                    /**< IPv6z. */
+    BCMOLT_EPON_OAM_BRCM_CNU_IPADDR_TYPE_DNS                                    = 16                    /**< DNS. */
+} bcmolt_epon_oam_brcm_cnu_ipaddr_type;
+
+/** CMC OAM PDU opcodes 
+ */
+typedef enum bcmolt_epon_oam_brcm_oam_pdu_opcode
+{
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_DOWNSTREAM_CONFIG_REQUEST                       = 1,        /**< Request to configure downstream channel(s) */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_DOWNSTREAM_CONFIG_RESPONSE                      = 2,        /**< Response to configure downstream channel(s) */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_DOWNSTREAM_CONFIG_REQUEST                       = 3,        /**< Request to retrieve current downstream channel(s) configuration */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_DOWNSTREAM_CONFIG_RESPONSE                      = 4,        /**< Response to retrieve current downstream channel(s) configuration */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_UPSTREAM_CONFIG_REQUEST                         = 5,        /**< Request to configure upstream channel(s) */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_UPSTREAM_CONFIG_RESPONSE                        = 6,        /**< Response to configure upstream channel(s) */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_UPSTREAM_CONFIG_REQUEST                         = 7,        /**< Request to retrieve current upstream channel(s) configuration */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_UPSTREAM_CONFIG_RESPONSE                        = 8,        /**< Response to retrieve current upstream channel(s) configuration */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_MOVE_CNU_DOWNSTREAM_REQUEST                     = 9,        /**< Request to configure CNU with a particular primary downstream channel */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_MOVE_CNU_DOWNSTREAM_RESPONSE                    = 10,       /**< Response to configure CNU with a particular primary downstream channel */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_MOVE_CNU_DOWNSTREAM_REQUEST                     = 11,       /**< Request to retrieve CNU’s current primary downstream channel */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_MOVE_CNU_DOWNSTREAM_RESPONSE                    = 12,       /**< Response to retrieve CNU’s current primary downstream channel */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_MOVE_CNU_UPSTREAM_REQUEST                       = 13,       /**< Request to configure CNU with a particular primary upstream channel */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_MOVE_CNU_UPSTREAM_RESPONSE                      = 14,       /**< Response to configure CNU with a particular primary upstream channel */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_MOVE_CNU_UPSTREAM_REQUEST                       = 15,       /**< Request to retrieve CNU’s current primary upstream channel */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_MOVE_CNU_UPSTREAM_RESPONSE                      = 16,       /**< Response to retrieve CNU’s current primary upstream channel */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_MAX_UPSTREAM_RFATTENUATION_REQUEST              = 17,       /**< Request to set maximum RF attenuation level */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_MAX_UPSTREAM_RFATTENUATION_RESPONSE             = 18,       /**< Response to set maximum RF attenuation level */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_MAX_UPSTREAM_RFATTENUATION_REQUEST              = 19,       /**< Request to get maximum RF attenuation level */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_MAX_UPSTREAM_RFATTENUATION_RESPONSE             = 20,       /**< Response to get maximum RF attenuation level */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_CREATE_LOAD_BALANCING_GROUP_REQUEST             = 21,       /**< Request for creating a load balancing group */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_CREATE_LOAD_BALANCING_GROUP_RESPONSE            = 22,       /**< Response for creating a load balancing group request */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUPS_REQUEST                   = 23,       /**< Request to get a list of load balancing groups */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUPS_RESPONSE                  = 24,       /**< Response to get load balancing groups request */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_ADD_DOWNSTREAMS_TO_LOAD_BALANCING_GROUP_REQUEST = 25,       /**< Request to add downstreams to a load balancing group */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_ADD_DOWNSTREAMS_TO_LOAD_BALANCING_GROUP_RESPONSE= 26,       /**< Response to add downstreams to a load balancing group request */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUP_DOWNSTREAMS_REQUEST        = 27,       /**< Request to get list of downstreams in a load balancing group */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUP_DOWNSTREAMS_RESPONSE       = 28,       /**< Response to get list of downstreams in a load balancing group request */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_ADD_UPSTREAMS_TO_LOAD_BALANCING_GROUP_REQUEST   = 29,       /**< Request to add upstreams to a load balancing group */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_ADD_UPSTREAMS_TO_LOAD_BALANCING_GROUP_RESPONSE  = 30,       /**< Response to add upstreams to a load balancing group request */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUP_UPSTREAMS_REQUEST          = 31,       /**< Request to get list of upstreams in a load balancing group */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUP_UPSTREAMS_RESPONSE         = 32,       /**< Response to get list of upstreams in a load balancing group request */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_ADD_CNUS_TO_LOAD_BALANCING_GROUP_REQUEST        = 33,       /**< Request to add CNUs to a load balancing group */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_ADD_CNUS_TO_LOAD_BALANCING_GROUP_RESPONSE       = 34,       /**< Response to add CNUs to a load balancing group request */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUP_CNU_CONFIGURATION_REQUEST  = 35,       /**< Request to get load balancing group CNU configuration */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUP_CNU_CONFIGURATION_RESPONSE = 36,       /**< Response to get load balancing group CNU configuration request */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUP_ACTIVE_CNUS_REQUEST        = 37,       /**< Request to get the active list of CNUs associated with the specified load balancing group */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_LOAD_BALANCING_GROUP_ACTIVE_CNUS_RESPONSE       = 38,       /**< Response to the get active list of CNUs associated with the specified load balancing group */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_EXCLUDE_CNUS_FROM_LOAD_BALANCING_REQUEST        = 39,       /**< Request to exclude CNUs from load balancing */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_EXCLUDE_CNUS_FROM_LOAD_BALANCING_RESPONSE       = 40,       /**< Response to exclude CNUs from load balancing request */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_EXCLUDED_CNUS_CONFIGURATION_REQUEST             = 41,       /**< Request to get excluded CNUs from load balancing configuration */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_EXCLUDED_CNU_CONFIGURATION_RESPONSE             = 42,       /**< Response to get excluded CNUs from load balancing configuration request */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_EXCLUDED_ACTIVE_CNUS_REQUEST                    = 43,       /**< Request to get the active excluded CNUs from load balancing list */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_EXCLUDED_ACTIVE_CNUS_RESPONSE                   = 44,       /**< Response to get active excluded CNUs from load balancing request */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_FULL_LOAD_BALANCING_GROUP_REQUEST               = 45,       /**< Request to configure the specified Load Balancing groups */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_FULL_LOAD_BALANCING_GROUP_RESPONSE              = 46,       /**< Response to configuration request for Load Balancing groups */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_FULL_LOAD_BALANCING_GROUP_REQUEST               = 47,       /**< Request to retrieve detailed active Load Balancing Groups */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_FULL_LOAD_BALANCING_GROUP_RESPONSE              = 48,       /**< Response to retrieve detailed active Load Balancing Groups */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_UPSTREAM_INPUT_POWER_REQUEST                    = 49,       /**< Request to configure upstream channel input power level */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_SET_UPSTREAM_INPUT_POWER_RESPONSE                   = 50,       /**< Response to configure upstream channel input power level */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_UPSTREAM_INPUT_POWER_REQUEST                    = 51,       /**< Request to retrieve upstream input power level */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_UPSTREAM_INPUT_POWER_RESPONSE                   = 52,       /**< Response to retrieve upstream input power level */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_CNU_STATUS_REQUEST                              = 1793,     /**< Request to retrieve CNU status information */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_CNU_STATUS_RESPONSE                             = 1794,     /**< Response to retrieve CNU status information */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_CMC_INTERFACES_REQUEST                          = 1795,     /**< Request to retrieve CMC interface attributes */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_CMC_INTERFACES_RESPONSE                         = 1796,     /**< Response to retrieve CMC interface attributes */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_CMC_MAC_STATISTICS_REQUEST                      = 1797,     /**< Request to retrieve CMC MAC statistics */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_CMC_MAC_STATISTICS_RESPONSE                     = 1798,     /**< Response to retrieve CMC MAC statistics */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_SERVICES_REQUEST                                = 1799,     /**< Request to retrieve Upstream service attributes */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_SERVICES_RESPONSE                               = 1800,     /**< Response to retrieve Upstream service attributes */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_SIGNAL_QUALITY_REQUEST                          = 1801,     /**< Request to retrieve Upstream PHY Signal Quality data */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_SIGNAL_QUALITY_RESPONSE                         = 1802,     /**< Response to retrieve Upstream PHY Signal Quality data */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_CMC_INTERFACES_STATISTICS_REQUEST               = 1803,     /**< Request to retrieve CMC interface statistics */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_CMC_INTERFACES_STATISTICS_RESPONSE              = 1804,     /**< Response to retrieve CMC interface statistics */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_DOWNSTREAM_BONDING_GROUP_STATUS_REQUEST         = 1805,     /**< Request to retrieve Downstream Bonding Group status information */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_DOWNSTREAM_BONDING_GROUP_STATUS_RESPONSE        = 1806,     /**< Response to retrieve Downstream Bonding Group status information */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_UPSTREAM_BONDING_GROUP_STATUS_REQUEST           = 1807,     /**< Request to retrieve Upstream Bonding Group status information */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_UPSTREAM_BONDING_GROUP_STATUS_RESPONSE          = 1808,     /**< Response to retrieve Upstream Bonding Group status information */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_QOS_SERVICE_FLOW_CONFIG_REQUEST                 = 1809,     /**< Request to retrieve data for configured QoS service flows */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_QOS_SERVICE_FLOW_CONFIG_RESPONSE                = 1810,     /**< Response to retrieve data for configured QoS service flows */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_QOS_SERVICE_FLOW_STATISTICS_REQUEST             = 1811,     /**< Request to retrieve service flow statistics */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_QOS_SERVICE_FLOW_STATISTICS_RESPONSE            = 1812,     /**< Response to retrieve service flow statistics */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_QOS_PACKET_CLASSIFIER_CONFIG_REQUEST            = 1813,     /**< Request to retrieve data for packet classification rules */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_GET_QOS_PACKET_CLASSIFIER_CONFIG_RESPONSE           = 1814,     /**< Response to retrieve data for packet classification rules */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_REG_RSP_EVENT_MESSAGE                               = 4096,     /**< Autonomous event to report a REG-RSP associated with a CNU */
+    BCMOLT_EPON_OAM_BRCM_OAM_PDU_OPCODE_CMC_SYSTEM_EVENT_MESSAGE                            = 4097      /**< Autonomous event to report a CMC System message */
+} bcmolt_epon_oam_brcm_oam_pdu_opcode;
+
+/** Clock Transport Key. 
+ */
+typedef enum bcmolt_epon_oam_clock_transport_key
+{
+    BCMOLT_EPON_OAM_CLOCK_TRANSPORT_KEY_ALL                                                 = 0,        /**< All. */
+    BCMOLT_EPON_OAM_CLOCK_TRANSPORT_KEY_INIT                                                = 1,        /**< Init. */
+    BCMOLT_EPON_OAM_CLOCK_TRANSPORT_KEY_TOD_ENABLE                                          = 2,        /**< TOD Enable. */
+    BCMOLT_EPON_OAM_CLOCK_TRANSPORT_KEY_PPS_ENABLE                                          = 3,        /**< 1PPS Enable. */
+    BCMOLT_EPON_OAM_CLOCK_TRANSPORT_KEY_ADJUST                                              = 4,        /**< Adjust. */
+    BCMOLT_EPON_OAM_CLOCK_TRANSPORT_KEY_PON_RANGE                                           = 5,        /**< PON Range. */
+    BCMOLT_EPON_OAM_CLOCK_TRANSPORT_KEY_FAKE_MPCP_JUMP                                      = 6,        /**< Fake MPCP Jump. */
+    BCMOLT_EPON_OAM_CLOCK_TRANSPORT_KEY_HALF_PERIOD                                         = 7         /**< Half Period. */
+} bcmolt_epon_oam_clock_transport_key;
+
+/** Var Leaf Action. 
+ */
+typedef enum bcmolt_epon_oam_var_leaf_action
+{
+    BCMOLT_EPON_OAM_VAR_LEAF_ACTION_MAC_INIT                                                = 1,        /**< MAC Init. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ACTION_MAC_ADD_GROUP_ADDRESS                                   = 2,        /**< MAC Add Group Address. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ACTION_MAC_DEL_GROUP_ADDRESS                                   = 3,        /**< MAC Del Group Address. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ACTION_MAC_SELF_TEST                                           = 4,        /**< MAC Self Test. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ACTION_PHY_ADMIN_CONTROL                                       = 5,        /**< PHY Admin Control. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ACTION_RPT_RESET                                               = 6,        /**< Report Reset. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ACTION_RPT_IN_SERVICE_TEST                                     = 7,        /**< Report In Service Test. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ACTION_PORT_ADMIN_CONTROL                                      = 8,        /**< Port Admin Control. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ACTION_MAU_RESET                                               = 9,        /**< MAU Reset. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ACTION_MAU_ADMIN_CONTROL                                       = 10,       /**< MAU Admin Control. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ACTION_AUTO_RENEGOTIATE                                        = 11,       /**< Auto Renegotiate. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ACTION_AUTO_ADMIN_CONTROL                                      = 12        /**< Auto Admin Control. */
+} bcmolt_epon_oam_var_leaf_action;
+
+/** CTC Enabled State. 
+ */
+typedef enum bcmolt_epon_oam_ctc_enabled_state
+{
+    BCMOLT_EPON_OAM_CTC_ENABLED_STATE_DISABLED                                              = 1,        /**< Disabled. */
+    BCMOLT_EPON_OAM_CTC_ENABLED_STATE_ENABLED                                               = 2         /**< Enabled. */
+} bcmolt_epon_oam_ctc_enabled_state;
+
+/** CTC Activation. 
+ */
+typedef enum bcmolt_epon_oam_ctc_activation
+{
+    BCMOLT_EPON_OAM_CTC_ACTIVATION_DEACTIVATE                                               = 1,        /**< Deactivate. */
+    BCMOLT_EPON_OAM_CTC_ACTIVATION_ACTIVATE                                                 = 2         /**< Activate. */
+} bcmolt_epon_oam_ctc_activation;
+
+/** CTC Leaf Management Object. 
+ */
+typedef enum bcmolt_epon_oam_ctc_leaf_management_object
+{
+    BCMOLT_EPON_OAM_CTC_LEAF_MANAGEMENT_OBJECT_PORT                                         = 1,        /**< Port. */
+    BCMOLT_EPON_OAM_CTC_LEAF_MANAGEMENT_OBJECT_CARD                                         = 2,        /**< Card. */
+    BCMOLT_EPON_OAM_CTC_LEAF_MANAGEMENT_OBJECT_LLID                                         = 3,        /**< LLID. */
+    BCMOLT_EPON_OAM_CTC_LEAF_MANAGEMENT_OBJECT_PON_IF                                       = 4,        /**< PON I/F. */
+    BCMOLT_EPON_OAM_CTC_LEAF_MANAGEMENT_OBJECT_ONU                                          = 65535U    /**< ONU. */
+} bcmolt_epon_oam_ctc_leaf_management_object;
+
+/** CTC ONU Alarm ID 
+ */
+typedef enum bcmolt_epon_oam_ctc_onu_alarm_id
+{
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_EQUIPMENT_ALARM                                    = 1,        /**< ONU Equipment Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_POWER_ALARM                                        = 2,        /**< ONU Power Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_BATTERY_MISSING                                    = 3,        /**< ONU Battery Missing */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_BATTERY_FAILURE                                    = 4,        /**< ONU Battery Failure */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_BATTERY_VOLT_LOW                                   = 5,        /**< ONU Battery Volt Low */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_PHYSICAL_INSTRUCTION_ALARM                         = 6,        /**< Onu Physical Instruction Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_SELF_TEST_FAILURE                                  = 7,        /**< Onu Self Test Failure */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_TEMP_HIGH_ALARM                                    = 9,        /**< Onu Temp High Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_TEMP_LOW_ALARM                                     = 10,       /**< Onu Temp Low Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_IAD_CONNECTION_FAILURE                             = 11,       /**< Onu Iad Connection Failure */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_PON_IF_SWITCH                                      = 12,       /**< Onu Pon If Switch */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ONU_SLEEP_STATUS_UPDATE                                = 13,       /**< Onu Sleep Status Update */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_RX_POWER_HIGH_ALARM                             = 257,      /**< Pon If Rx Power High Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_RX_POWER_LOW_ALARM                              = 258,      /**< Pon If Rx Power Low Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TX_POWER_HIGH_ALARM                             = 259,      /**< Pon If Tx Power High Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TX_POWER_LOW_ALARM                              = 260,      /**< Pon If Tx Power Low Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TX_BIAS_HIGH_ALARM                              = 261,      /**< Pon If Tx Bias High Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TX_BIAS_LOW_ALARM                               = 262,      /**< Pon If Tx Bias Low Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_VCC_HIGH_ALARM                                  = 263,      /**< Pon If Vcc High Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_VCC_LOW_ALARM                                   = 264,      /**< Pon If Vcc Low Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TEMP_HIGH_ALARM                                 = 265,      /**< Pon If Temp High Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TEMP_LOW_ALARM                                  = 266,      /**< Pon If Temp Low Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_RX_POWER_HIGH_WARNING                           = 267,      /**< Pon If Rx Power High Warning */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_RX_POWER_LOW_WARNING                            = 268,      /**< Pon If Rx Power Low Warning */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TX_POWER_HIGH_WARNING                           = 269,      /**< Pon If Tx Power High Warning */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TX_POWER_LOW_WARNING                            = 270,      /**< Pon If Tx Power Low Warning */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TX_BIAS_HIGH_WARNING                            = 271,      /**< Pon If Tx Bias High Warning */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TX_BIAS_LOW_WARNING                             = 272,      /**< Pon If Tx Bias Low Warning */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_VCC_HIGH_WARNING                                = 273,      /**< Pon If Vcc High Warning */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_VCC_LOW_WARNING                                 = 274,      /**< Pon If Vcc Low Warning */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TEMP_HIGH_WARNING                               = 275,      /**< Pon If Temp High Warning */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_TEMP_LOW_WARNING                                = 276,      /**< Pon If Temp Low Warning */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_DROP_EVENTS_ALARM                    = 277,      /**< Pon If Downstream Drop Events Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_DROP_EVENTS_ALARM                      = 278,      /**< Pon If Upstream Drop Events Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_CRC_ERROR_FRAMES_ALARM               = 279,      /**< Pon If Downstream CRC Error Frames Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_CRC_ERROR_FRAMES_ALARM                 = 280,      /**< Pon If Upstream CRC Error Frames Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_UNDERSIZE_FRAMES_ALARM               = 281,      /**< Pon If Downstream Undersize Frames Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_UNDERSIZE_FRAMES_ALARM                 = 282,      /**< Pon If Upstream Undersize Frames Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_OVERSIZE_FRAMES_ALARM                = 283,      /**< Pon If Downstream Oversize Frames Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_OVERSIZE_FRAMES_ALARM                  = 284,      /**< Pon If Upstream Oversize Frames Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_FRAGMENTS_ALARM                      = 285,      /**< Pon If Downstream Fragments Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_FRAGMENTS_ALARM                        = 286,      /**< Pon If Upstream Fragments Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_JABBERS_ALARM                        = 287,      /**< Pon If Downstream Jabbers Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_JABBERS_ALARM                          = 288,      /**< Pon If Upstream Jabbers Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_DISCARDS_ALARM                       = 289,      /**< Pon If Downstream Discards Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_DISCARDS_ALARM                         = 290,      /**< Pon If Upstream Discards Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_ERRORS_ALARM                         = 291,      /**< Pon If Downstream Errors Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_ERROS_ALARM                            = 292,      /**< Pon If Upstream Erros Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_DROP_EVERNTS_WARNING                 = 293,      /**< Pon If Downstream Drop Evernts Warning */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_DROP_EVENTS_WARNING                    = 294,      /**< Pon If Upstream Drop Events Warning */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_CRC_ERROR_FRAMES_WARNING             = 295,      /**< Pon If Downstream CRC Error Frames Warning */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_CRC_ERROR_FRAMES_WARNING               = 296,      /**< Pon If Upstream CRC Error Frames Warning */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_UNDERSIZE_FRAMES_WARNING             = 297,      /**< Pon If Downstream Undersize Frames Warning */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_UNDERSIZE_FRAMES_WARNING               = 298,      /**< Pon If Upstream Undersize Frames Warning */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_OVERSIZE_FRAMES_WARNING              = 299,      /**< Pon If Downstream Oversize Frames Warning */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_OVERSIZE_FRAMES_WARNING                = 300,      /**< Pon If Upstream Oversize Frames Warning */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_FRAGMENTS_WARNING                    = 301,      /**< Pon If Downstream Fragments Warning */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_FRAGMENTS_WARNING                      = 302,      /**< Pon If Upstream Fragments Warning */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_JABBERS_WARNING                      = 303,      /**< Pon If Downstream Jabbers Warning */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_JABBERS_WARNING                        = 304,      /**< Pon If Upstream Jabbers Warning */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_DISCARDS_WARNING                     = 305,      /**< Pon If Downstream Discards Warning */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_DISCARDS_WARNING                       = 306,      /**< Pon If Upstream Discards Warning */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_DOWNSTREAM_ERRORS_WARNING                       = 307,      /**< Pon If Downstream Errors Warning */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PON_IF_UPSTREAM_ERROS_WARNING                          = 308,      /**< Pon If Upstream Erros Warning */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_CARD_ALARM                                             = 513,      /**< Card Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_CARD_SELF_TEST_FAILURE                                 = 514,      /**< Card Self Test Failure */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ETH_PORT_AUTO_NEG_FAILURE                              = 769,      /**< Eth Port Auto Neg Failure */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ETH_PORT_LOS                                           = 770,      /**< Eth Port Los */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ETH_PORT_FAILURE                                       = 771,      /**< Eth Port Failure */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ETH_PORT_LOOPBACK                                      = 772,      /**< Eth Port Loopback */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_ETH_PORT_CONGESTION                                    = 773,      /**< Eth Port Congestion */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_DROP_EVENTS_ALARM                      = 774,      /**< Port Downstream Drop Events Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_DROP_EVENTS_ALARM                        = 775,      /**< Port Upstream Drop Events Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_CRC_ERROR_FRAMES_ALARM                 = 776,      /**< Port Downstream CRC Error Frames Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_CRC_ERROR_FRAMES_ALARM                   = 777,      /**< Port Upstream CRC Error Frames Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_UNDERSIZE_FRAMES_ALARM                 = 778,      /**< Port Downstream Undersize Frames Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_UNDERSIZE_FRAMES_ALARM                   = 779,      /**< Port Upstream Undersize Frames Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_OVERSIZE_FRAMES_ALARM                  = 780,      /**< Port Downstream Oversize Frames Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_OVERSIZE_FRAMES_ALARM                    = 781,      /**< Port Upstream Oversize Frames Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_FRAGMENTS_ALARM                        = 782,      /**< Port Downstream Fragments Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_FRAGMENTS_ALARM                          = 783,      /**< Port Upstream Fragments Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_JABBERS_ALARM                          = 784,      /**< Port Downstream Jabbers Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_JABBERS_ALARM                            = 785,      /**< Port Upstream Jabbers Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_DISCARDS_ALARM                         = 786,      /**< Port Downstream Discards Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_DISCARDS_ALARM                           = 787,      /**< Port Upstream Discards Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_ERRORS_ALARM                           = 788,      /**< Port Downstream Errors Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_ERRORS_ALARM                             = 789,      /**< Port Upstream Errors Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_STATUS_CHANGE_TIMES_ALARM                         = 790,      /**< Port Status Change Times Alarm */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_DROP_EVENTS_WARNING                    = 791,      /**< Port Downstream Drop Events Warning */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_DROP_EVENTS_WARNING                      = 792,      /**< Port Upstream Drop Events Warning */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_CRC_ERROR_FRAMES_WARNING               = 793,      /**< Port Downstream CRC Error Frames Warning */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_CRC_ERROR_FRAMES_WARNING                 = 794,      /**< Port Upstream CRC Error Frames Warning */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_UNDERSIZE_FRAMES_WARNING               = 795,      /**< Port Downstream Undersize Frames Warning */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_UNDERSIZE_FRAMES_WARNING                 = 796,      /**< Port Upstream Undersize Frames Warning */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_OVERSIZE_FRAMES_WARNING                = 797,      /**< Port Downstream Oversize Frames Warning */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_OVERSIZE_FRAMES_WARNING                  = 798,      /**< Port Upstream Oversize Frames Warning */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_FRAGMENTS_WARNING                      = 799,      /**< Port Downstream Fragments Warning */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_FRAGMENTS_WARNING                        = 800,      /**< Port Upstream Fragments Warning */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_JABBERS_WARNING                        = 801,      /**< Port Downstream Jabbers Warning */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_JABBERS_WARNING                          = 802,      /**< Port Upstream Jabbers Warning */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_DISCARDS_WARNING                       = 803,      /**< Port Downstream Discards Warning */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_DISCARDS_WARNING                         = 804,      /**< Port Upstream Discards Warning */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_DOWNSTREAM_ERRORS_WARNING                         = 805,      /**< Port Downstream Errors Warning */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_UPSTREAM_ERRORS_WARNING                           = 806,      /**< Port Upstream Errors Warning */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_PORT_STATUS_CHANGE_TIMES_WARNING                       = 807,      /**< Port Status Change Times Warning */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_POTS_PORT_FAILURE                                      = 1025,     /**< P O T S Port Failure */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_E1PORT_FAILURE                                         = 1281,     /**< E1 Port Failure */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_E1TIMING_UNLOCK                                        = 1282,     /**< E1 Timing Unlock */
+    BCMOLT_EPON_OAM_CTC_ONU_ALARM_ID_E1LOS                                                  = 1283      /**< E1 Los */
+} bcmolt_epon_oam_ctc_onu_alarm_id;
+
+/** CTC ONU Power Alarm Code 
+ */
+typedef enum bcmolt_epon_oam_ctc_power_alarm_code
+{
+    BCMOLT_EPON_OAM_CTC_POWER_ALARM_CODE_NEVER_MATCH                                        = 0,        /**< Never match */
+    BCMOLT_EPON_OAM_CTC_POWER_ALARM_CODE_POWER_DOWN                                         = 1,        /**< Power down */
+    BCMOLT_EPON_OAM_CTC_POWER_ALARM_CODE_POWER_VOLT_OVER                                    = 2,        /**< Power Voltage Over */
+    BCMOLT_EPON_OAM_CTC_POWER_ALARM_CODE_POWER_VOLT_LESS                                    = 3         /**< Power Voltage Less */
+} bcmolt_epon_oam_ctc_power_alarm_code;
+
+/** CTC PON IF Switch Code 
+ */
+typedef enum bcmolt_epon_oam_ctc_pon_if_switch_code
+{
+    BCMOLT_EPON_OAM_CTC_PON_IF_SWITCH_CODE_NEVER_MATCH                                      = 0,        /**< Never match */
+    BCMOLT_EPON_OAM_CTC_PON_IF_SWITCH_CODE_SIGNAL_LOS                                       = 1,        /**< Signal Los */
+    BCMOLT_EPON_OAM_CTC_PON_IF_SWITCH_CODE_SIGNAL_DEGRADE                                   = 2,        /**< Signal Degrade */
+    BCMOLT_EPON_OAM_CTC_PON_IF_SWITCH_CODE_HARDWARE_FAULT                                   = 3         /**< Hardware Fault */
+} bcmolt_epon_oam_ctc_pon_if_switch_code;
+
+/** Var Leaf Attribute. 
+ */
+typedef enum bcmolt_epon_oam_var_leaf_attribute
+{
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_ID                                               = 1,        /**< MAC ID. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAMES_TX_OK                                     = 2,        /**< MAC Frames Tx Ok. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_SINGLE_COLL_FRAMES                               = 3,        /**< MAC Single Coll Frames. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_MULTIPLE_COLL_FRAMES                             = 4,        /**< MAC Multiple Coll Frames. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAMES_RX_OK                                     = 5,        /**< MAC Frames Rx Ok. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FCS_ERR                                          = 6,        /**< MAC FCS Err. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_ALIGN_ERR                                        = 7,        /**< MAC Align Err. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_OCTETS_TX_OK                                     = 8,        /**< MAC Octets Tx Ok. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAMES_DEFERRED                                  = 9,        /**< MAC Frames Deferred. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_LATE_COLLISIONS                                  = 10,       /**< MAC Late Collisions. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_EXCESSIVE_COLLISIONS                             = 11,       /**< MAC Excessive Collisions. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAMES_LOST_MAC_TX_ERR                           = 12,       /**< MAC Frames Lost MAC Tx Err. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CARRIER_SENSE_ERR                                = 13,       /**< MAC Carrier Sense Err. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_OCTETS_RX_OK                                     = 14,       /**< MAC Octets Rx Ok. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAMES_LOST_MAC_RX_ERR                           = 15,       /**< MAC Frames Lost MAC Rx Err. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_PROMISCUOUS_STATUS                               = 16,       /**< MAC Promiscuous Status. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_MCAST_ADDR_LIST                                  = 17,       /**< MAC Mcast Addr List. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_MCAST_FRAMES_TX_OK                               = 18,       /**< MAC Mcast Frames Tx Ok. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_BCAST_FRAMES_TX_OK                               = 19,       /**< MAC Bcast Frames Tx Ok. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FR_EXCESSIVE_DEFERRAL                            = 20,       /**< MAC Fr Excessive Deferral. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_MCAST_FRAMES_RX_OK                               = 21,       /**< MAC Mcast Frames Rx Ok. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_BCAST_FRAMES_RX_OK                               = 22,       /**< MAC Bcast Frames Rx Ok. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_IN_RANGE_LEN_ERR                                 = 23,       /**< MAC In Range Len Err. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_OUT_OF_RANGE_LEN_ERR                             = 24,       /**< MAC Out Of Range Len Err. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_FRAME_TOO_LONG                                   = 25,       /**< MAC Frame Too Long. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_ENABLE_STATUS                                    = 26,       /**< MAC Enable Status. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_TX_ENABLE                                        = 27,       /**< MAC Tx Enable. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_MCAST_RX_STATUS                                  = 28,       /**< MAC Mcast Rx Status. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_ADDR                                             = 29,       /**< MAC Addr. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_COLLISION_FRAMES                                 = 30,       /**< MAC Collision Frames. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_ID                                               = 31,       /**< PHY ID. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_TYPE                                             = 32,       /**< PHY Type. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_TYPE_LIST                                        = 33,       /**< PHY Type List. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_SQE_TEST_ERR                                     = 34,       /**< PHY SQE Test Err. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_SYMBOL_ERR_DURING_CARRIER                        = 35,       /**< PHY Symbol Err During Carrier. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_MII_DETECT                                       = 36,       /**< PHY MII Detect. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PHY_ADMIN_STATE                                      = 37,       /**< PHY Admin State. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_ID                                               = 38,       /**< Report ID. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_TYPE                                             = 39,       /**< Report Type. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_GROUP_CAPACITY                                   = 40,       /**< Report Group Capacity. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_GROUP_MAP                                        = 41,       /**< Report Group Map. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_HEALTH_STATE                                     = 42,       /**< Report Health State. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_HEALTH_TEXT                                      = 43,       /**< Report Health Text. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_HEALTH_DATA                                      = 44,       /**< Report Health Data. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_RPT_TX_COLLISIONS                                    = 45,       /**< Report Tx Collisions. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_GROUP_ID                                             = 46,       /**< Group ID. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_GROUP_PORT_CAPACITY                                  = 47,       /**< Group Port Capacity. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_GROUP_PORT_MAP                                       = 48,       /**< Group Port Map. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_ID                                              = 49,       /**< Port ID. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_ADMIN_STATE                                     = 50,       /**< Port Admin State. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_AUTO_PART_STATE                                 = 51,       /**< Port Auto Part State. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_READABLE_FRAMES                                 = 52,       /**< Port Readable Frames. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_READABLE_OCTETS                                 = 53,       /**< Port Readable Octets. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_FCS_ERR                                         = 54,       /**< Port FCS Err. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_ALIGN_ERR                                       = 55,       /**< Port Align Err. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_FRAMES_TOO_LONG                                 = 56,       /**< Port Frames Too Long. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_SHORT_EVENTS                                    = 57,       /**< Port Short Events. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_RUNTS                                           = 58,       /**< Port Runts. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_COLLISIONS                                      = 59,       /**< Port Collisions. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_LATE_EVENTS                                     = 60,       /**< Port Late Events. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_VERY_LONG_EVENTS                                = 61,       /**< Port Very Long Events. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_DATA_RATE_MISMATCHES                            = 62,       /**< Port Data Rate Mismatches. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_AUTO_PARTITIONS                                 = 63,       /**< Port Auto Partitions. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_ISOLATES                                        = 64,       /**< Port Isolates. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_SYM_ERR_DURING_PKT                              = 65,       /**< Port Sym Err During Pkt. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_LAST_SOURCE_ADDR                                = 66,       /**< Port Last Source Addr. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_SOURCE_ADDR_CHANGES                             = 67,       /**< Port Source Addr Changes. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_PORT_BURSTS                                          = 100,      /**< Port Bursts. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_ID                                               = 68,       /**< MAU ID. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_TYPE                                             = 69,       /**< MAU Type. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_TYPE_LIST                                        = 70,       /**< MAU Type List. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_MEDIA_AVAIL                                      = 71,       /**< MAU Media Avail. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_LOSE_MEDIA_CTR                                   = 72,       /**< MAU Lose Media Ctr. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_JABBER                                           = 73,       /**< MAU Jabber. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_ADMIN_STATE                                      = 74,       /**< MAU Admin State. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_BAND_SPLIT_TYPE                                  = 75,       /**< MAU Band Split Type. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_BAND_SPLIT_FREQ                                  = 76,       /**< MAU Band Split Freq. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_FALSE_CARRIERS                                   = 77,       /**< MAU False Carriers. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_ID                                          = 78,       /**< Auto Neg ID. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_ADMIN_STATE                                 = 79,       /**< Auto Neg Admin State. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_REMOTE_SIG                                  = 80,       /**< Auto Neg Remote Sig. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_AUTO_CFG                                    = 81,       /**< Auto Neg Auto Cfg. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_LOCAL_TECH_ABILITY                          = 82,       /**< Auto Neg Local Tech Ability. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_ADVERTISED_TECH_ABILITY                     = 83,       /**< Auto Neg Advertised Tech Ability. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_RX_TECH                                     = 84,       /**< Auto Neg Rx Tech. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_LOCAL_SELECT_ABLE                           = 85,       /**< Auto Neg Local Select Able. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_AD_SELECT_ABLE                              = 86,       /**< Auto Neg Ad Select Able. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AUTO_NEG_RX_SELECT_ABLE                              = 87,       /**< Auto Neg Rx Select Able. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CAPABILITIES                                     = 89,       /**< MAC Capabilities. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_DUPLEX_STATUS                                    = 90,       /**< MAC Duplex Status. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAU_IDLE_ERROR_COUNT                                 = 91,       /**< MAU Idle Error Count. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_ID                                          = 92,       /**< MAC Ctrl ID. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_FUNCS_SUPPORTED                             = 93,       /**< MAC Ctrl Funcs Supported. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_FRAMES_TX                                   = 94,       /**< MAC Ctrl Frames Tx. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_FRAMES_RX                                   = 95,       /**< MAC Ctrl Frames Rx. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_UNSUPPORTED_OP_RX                           = 96,       /**< MAC Ctrl Unsupported Op Rx. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_PAUSE_DELAY                                 = 97,       /**< MAC Ctrl Pause Delay. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_PAUSE_TX                                    = 98,       /**< MAC Ctrl Pause Tx. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MAC_CTRL_PAUSE_RX                                    = 99,       /**< MAC Ctrl Pause Rx. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ID                                               = 101,      /**< Agg ID. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_DESC                                             = 102,      /**< Agg Desc. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_NAME                                             = 103,      /**< Agg Name. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ACTOR_SYS_ID                                     = 104,      /**< Agg Actor Sys ID. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ACTOR_SYS_PRI                                    = 105,      /**< Agg Actor Sys Pri. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_AGG_OR_INDIVIDUAL                                = 106,      /**< Agg Agg Or Individual. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ACTOR_ADMIN_KEY                                  = 107,      /**< Agg Actor Admin Key. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ACTOR_OPER_KEY                                   = 108,      /**< Agg Actor Oper Key. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_MAC_ADDR                                         = 109,      /**< Agg MAC Addr. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_PARTNER_SYS_ID                                   = 110,      /**< Agg Partner Sys ID. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_PARTNER_SYS_PRI                                  = 111,      /**< Agg Partner Sys Pri. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_PARTNER_OPER_KEY                                 = 112,      /**< Agg Partner Oper Key. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_ADMIN_STATE                                      = 113,      /**< Agg Admin State. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_OPER_STATE                                       = 114,      /**< Agg Oper State. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_TIME_OF_LAST_OPER_CHANGE                         = 115,      /**< Agg Time Of Last Oper Change. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_DATA_RATE                                        = 116,      /**< Agg Data Rate. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_TX_OCTETS                                        = 117,      /**< Agg Tx Octets. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_RX_OCTETS                                        = 118,      /**< Agg Rx Octets. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_FRAMES_TX                                        = 119,      /**< Agg Frames Tx. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_FRAMES_RX                                        = 120,      /**< Agg Frames Rx. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_MCAST_TX                                         = 121,      /**< Agg Mcast Tx. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_MCAST_RX                                         = 122,      /**< Agg Mcast Rx. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_BCAST_TX                                         = 123,      /**< Agg Bcast Tx. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_BCAST_RX                                         = 124,      /**< Agg Bcast Rx. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_TX_DISCARD                                       = 125,      /**< Agg Tx Discard. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_RX_DISCARD                                       = 126,      /**< Agg Rx Discard. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_TX_ERR_FRAMES                                    = 127,      /**< Agg Tx Err Frames. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_RX_ERR_FRAMES                                    = 128,      /**< Agg Rx Err Frames. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_UNK_PROTOCOL                                     = 129,      /**< Agg Unk Protocol. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_LINK_UP_DOWN_NOTIFY_EN                           = 130,      /**< Agg Link Up Down Notify En. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_PORT_LIST                                        = 131,      /**< Agg Port List. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_AGG_COLLECTOR_MAX_DELAY                              = 132,      /**< Agg Collector Max Delay. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_ID                                               = 200,      /**< OAM ID. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_ADMIN_STATE                                      = 201,      /**< OAM Admin State. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_MODE                                             = 202,      /**< OAM Mode. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_MAC_ADDR                                  = 203,      /**< OAM Remote MAC Addr. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_CONFIG                                    = 204,      /**< OAM Remote Config. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_PDU_CONFIG                                = 205,      /**< OAM Remote PDU Config. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_FLAGS                                      = 206,      /**< OAM Local Flags. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_FLAGS                                     = 207,      /**< OAM Remote Flags. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_STATE                                     = 208,      /**< OAM Remote State. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_VENDOR_OUI                                = 209,      /**< OAM Remote Vendor OUI. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_VENDOR_DEVICE                             = 210,      /**< OAM Remote Vendor Device. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_VENDOR_VERSION                            = 211,      /**< OAM Remote Vendor Version. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_PDU_TX                                           = 212,      /**< OAM PDU Tx. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_PDU_RX                                           = 213,      /**< OAM PDU Rx. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_UNSUPPORTED_OPCODES                              = 214,      /**< OAM Unsupported Opcodes. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_INFO_TX                                          = 215,      /**< OAM Info Tx. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_INFO_RX                                          = 216,      /**< OAM Info Rx. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_EVENT_TX                                         = 217,      /**< OAM Event Tx. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_UNIQUE_EVENT_RX                                  = 218,      /**< OAM Unique Event Rx. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_DUP_EVENT_RX                                     = 219,      /**< OAM Dup Event Rx. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOOP_TX                                          = 220,      /**< OAM Loop Tx. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOOP_RX                                          = 221,      /**< OAM Loop Rx. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_VAR_REQ_TX                                       = 222,      /**< OAM Var Req Tx. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_VAR_REQ_RX                                       = 223,      /**< OAM Var Req Rx. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_VAR_RESP_TX                                      = 224,      /**< OAM Var Resp Tx. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_VAR_RESP_RX                                      = 225,      /**< OAM Var Resp Rx. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_ORG_SPECIFIC_TX                                  = 226,      /**< OAM Org Specific Tx. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_ORG_SPECIFIC_RX                                  = 227,      /**< OAM Org Specific Rx. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_SYM_PERIOD_WIN                         = 228,      /**< OAM Local Err Sym Period Win. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_SYM_PERIOD_THRESH                      = 229,      /**< OAM Local Err Sym Period Thresh. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_SYM_PERIOD_EVENT                       = 230,      /**< OAM Local Err Sym Period Event. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_SECS_WIN                         = 231,      /**< OAM Local Err Frame Secs Win. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_SECS_THRESH                      = 232,      /**< OAM Local Err Frame Secs Thresh. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_SECS_EVENT                       = 233,      /**< OAM Local Err Frame Secs Event. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_PERIOD_WIN                       = 234,      /**< OAM Local Err Frame Period Win. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_PERIOD_THRESH                    = 235,      /**< OAM Local Err Frame Period Thresh. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FRAME_PERIOD_EVENT                     = 236,      /**< OAM Local Err Frame Period Event. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FR_SEC_SUM_WIN                         = 237,      /**< OAM Local Err Fr Sec Sum Win. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FR_SEC_SUM_THRESH                      = 238,      /**< OAM Local Err Fr Sec Sum Thresh. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_LOCAL_ERR_FR_SEC_SUM_EVENT                       = 239,      /**< OAM Local Err Fr Sec Sum Event. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_SECS_WIN                        = 240,      /**< OAM Remote Err Frame Secs Win. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_SECS_THRESH                     = 241,      /**< OAM Remote Err Frame Secs Thresh. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_SECS_EVENT                      = 242,      /**< OAM Remote Err Frame Secs Event. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_PERIOD_WIN                      = 243,      /**< OAM Remote Err Frame Period Win. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_PERIOD_THRESH                   = 244,      /**< OAM Remote Err Frame Period Thresh. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_REMOTE_ERR_FRAME_PERIOD_EVENT                    = 245,      /**< OAM Remote Err Frame Period Event. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_FRAMES_LOST_OAM_ERR                              = 246,      /**< OAM Frames Lost OAM Err. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_EMUL_ID                                          = 247,      /**< OAM Emul ID. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_EMUL_SPD_ERR                                     = 248,      /**< OAM Emul Spd Err. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_EMUL_CRC8ERR                                     = 249,      /**< OAM Emul CRC8 Err. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_OAM_EMUL_BAD_LLID_ERR                                = 250,      /**< OAM Emul Bad LLID Err. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_MAC_CTRL_FRAMES_TX                              = 280,      /**< MPCP MAC Ctrl Frames Tx. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_MAC_CTRL_FRAMES_RX                              = 281,      /**< MPCP MAC Ctrl Frames Rx. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_DISCOVERY_WINDOW_TX                             = 288,      /**< MPCP Discovery Window Tx. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_DISCOVERY_TIMEOUT                               = 290,      /**< MPCP Discovery Timeout. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_FEC_CORRECTED_BLOCKS                                 = 292,      /**< FEC Corrected Blocks. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_FEC_UNCORRECTABLE_BLOCKS                             = 293,      /**< FEC Uncorrectable Blocks. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_FEC_ABILITY                                          = 313,      /**< FEC Ability. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_FEC_MODE                                             = 314,      /**< FEC Mode. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_TX_GATE                                         = 315,      /**< MPCP Tx Gate. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_TX_REG_ACK                                      = 316,      /**< MPCP Tx Reg Ack. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_TX_REGISTER                                     = 317,      /**< MPCP Tx Register. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_TX_REG_REQUEST                                  = 318,      /**< MPCP Tx Reg Request. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_TX_REPORT                                       = 319,      /**< MPCP Tx Report. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_RX_GATE                                         = 320,      /**< MPCP Rx Gate. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_RX_REG_ACK                                      = 321,      /**< MPCP Rx Reg Ack. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_RX_REGISTER                                     = 322,      /**< MPCP Rx Register. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_RX_REG_REQUEST                                  = 323,      /**< MPCP Rx Reg Request. */
+    BCMOLT_EPON_OAM_VAR_LEAF_ATTRIBUTE_MPCP_RX_REPORT                                       = 324       /**< MPCP Rx Report. */
+} bcmolt_epon_oam_var_leaf_attribute;
+
+/** CTC FEC Support. 
+ */
+typedef enum bcmolt_epon_oam_ctc_fec_support
+{
+    BCMOLT_EPON_OAM_CTC_FEC_SUPPORT_UNKNOWN                                                 = 1,        /**< Unknown. */
+    BCMOLT_EPON_OAM_CTC_FEC_SUPPORT_SUPPORTED                                               = 2,        /**< Supported. */
+    BCMOLT_EPON_OAM_CTC_FEC_SUPPORT_NOT_SUPPORTED                                           = 3         /**< Not Supported. */
+} bcmolt_epon_oam_ctc_fec_support;
+
+/** CTC FEC State. 
+ */
+typedef enum bcmolt_epon_oam_ctc_fec_state
+{
+    BCMOLT_EPON_OAM_CTC_FEC_STATE_UNKNOWN                                                   = 1,        /**< Unknown. */
+    BCMOLT_EPON_OAM_CTC_FEC_STATE_ENABLED                                                   = 2,        /**< Enabled. */
+    BCMOLT_EPON_OAM_CTC_FEC_STATE_DISABLED                                                  = 3         /**< Disabled. */
+} bcmolt_epon_oam_ctc_fec_state;
+
+/** CTC Churning Op Code. 
+ */
+typedef enum bcmolt_epon_oam_ctc_churning_op_code
+{
+    BCMOLT_EPON_OAM_CTC_CHURNING_OP_CODE_NEW_KEY_REQUEST                                    = 0,        /**< New Key Request. */
+    BCMOLT_EPON_OAM_CTC_CHURNING_OP_CODE_NEW_CHURNING_KEY                                   = 1         /**< New Churning Key. */
+} bcmolt_epon_oam_ctc_churning_op_code;
+
+/** CTC Classification Operation. 
+ */
+typedef enum bcmolt_epon_oam_ctc_classification_operation
+{
+    BCMOLT_EPON_OAM_CTC_CLASSIFICATION_OPERATION_DELETE                                     = 0,        /**< Delete. */
+    BCMOLT_EPON_OAM_CTC_CLASSIFICATION_OPERATION_ADD                                        = 1,        /**< Add. */
+    BCMOLT_EPON_OAM_CTC_CLASSIFICATION_OPERATION_CLEAR                                      = 2,        /**< Clear. */
+    BCMOLT_EPON_OAM_CTC_CLASSIFICATION_OPERATION_LIST                                       = 3         /**< List. */
+} bcmolt_epon_oam_ctc_classification_operation;
+
+/** CTC Commit Image Ack. 
+ */
+typedef enum bcmolt_epon_oam_ctc_commit_image_ack
+{
+    BCMOLT_EPON_OAM_CTC_COMMIT_IMAGE_ACK_SUCCESS                                            = 0,        /**< Success. */
+    BCMOLT_EPON_OAM_CTC_COMMIT_IMAGE_ACK_PARAMETER_ERROR                                    = 1,        /**< Parameter Error. */
+    BCMOLT_EPON_OAM_CTC_COMMIT_IMAGE_ACK_NOT_SUPPORTED                                      = 2,        /**< Not Supported. */
+    BCMOLT_EPON_OAM_CTC_COMMIT_IMAGE_ACK_LOADING_FAILURE                                    = 3         /**< Loading Failure. */
+} bcmolt_epon_oam_ctc_commit_image_ack;
+
+/** CTC Commit Image Opcode. 
+ */
+typedef enum bcmolt_epon_oam_ctc_commit_image_opcode
+{
+    BCMOLT_EPON_OAM_CTC_COMMIT_IMAGE_OPCODE_COMMIT_IMAGE_REQUEST                            = 10,       /**< Commit Image Request. */
+    BCMOLT_EPON_OAM_CTC_COMMIT_IMAGE_OPCODE_COMMIT_IMAGE_RESPONSE                           = 11        /**< Commit Image Response. */
+} bcmolt_epon_oam_ctc_commit_image_opcode;
+
+/** CTC Commit Image Flag. 
+ */
+typedef enum bcmolt_epon_oam_ctc_commit_image_flag
+{
+    BCMOLT_EPON_OAM_CTC_COMMIT_IMAGE_FLAG_SWAP_ACTIVE_BACKUP                                = 0         /**< Swap Active/Backup. */
+} bcmolt_epon_oam_ctc_commit_image_flag;
+
+/** CTC DBA Op Code. 
+ */
+typedef enum bcmolt_epon_oam_ctc_dba_op_code
+{
+    BCMOLT_EPON_OAM_CTC_DBA_OP_CODE_GET_REQUEST                                             = 0,        /**< Get Request. */
+    BCMOLT_EPON_OAM_CTC_DBA_OP_CODE_GET_RESPONSE                                            = 1,        /**< Get Response. */
+    BCMOLT_EPON_OAM_CTC_DBA_OP_CODE_SET_REQUEST                                             = 2,        /**< Set Request. */
+    BCMOLT_EPON_OAM_CTC_DBA_OP_CODE_SET_RESPONSE                                            = 3         /**< Set Response. */
+} bcmolt_epon_oam_ctc_dba_op_code;
+
+/** CTC Early Wake Up Mode. 
+ */
+typedef enum bcmolt_epon_oam_ctc_early_wake_up_mode
+{
+    BCMOLT_EPON_OAM_CTC_EARLY_WAKE_UP_MODE_ENABLE                                           = 0,        /**< Enable. */
+    BCMOLT_EPON_OAM_CTC_EARLY_WAKE_UP_MODE_DISABLE                                          = 1,        /**< Disable. */
+    BCMOLT_EPON_OAM_CTC_EARLY_WAKE_UP_MODE_NOT_SUPPORTED                                    = 255       /**< Not Supported. */
+} bcmolt_epon_oam_ctc_early_wake_up_mode;
+
+/** CTC Branch. 
+ */
+typedef enum bcmolt_epon_oam_ctc_branch
+{
+    BCMOLT_EPON_OAM_CTC_BRANCH_END                                                          = 0,        /**< End. */
+    BCMOLT_EPON_OAM_CTC_BRANCH_ATTRIBUTE                                                    = 7,        /**< Attribute. */
+    BCMOLT_EPON_OAM_CTC_BRANCH_ACTION                                                       = 9,        /**< Action. */
+    BCMOLT_EPON_OAM_CTC_BRANCH_OLD_MANAGEMENT_OBJECT                                        = 54,       /**< Old Management Object. */
+    BCMOLT_EPON_OAM_CTC_BRANCH_MANAGEMENT_OBJECT                                            = 55,       /**< Management Object. */
+    BCMOLT_EPON_OAM_CTC_BRANCH_EXT_ATTRIBUTE                                                = 199,      /**< Ext Attribute. */
+    BCMOLT_EPON_OAM_CTC_BRANCH_EXT_ACTION                                                   = 201,      /**< Ext Action. */
+    BCMOLT_EPON_OAM_CTC_BRANCH_KTATTRIBUTE                                                  = 167,      /**< KT Attribute. */
+    BCMOLT_EPON_OAM_CTC_BRANCH_KTACTION                                                     = 169       /**< KT Action. */
+} bcmolt_epon_oam_ctc_branch;
+
+/** OAM Error Code. 
+ */
+typedef enum bcmolt_epon_oam_oam_error_code
+{
+    BCMOLT_EPON_OAM_OAM_ERROR_CODE_NO_ERROR                                                 = 128,      /**< No Error. */
+    BCMOLT_EPON_OAM_OAM_ERROR_CODE_UNDETERMINED                                             = 129,      /**< Undetermined. */
+    BCMOLT_EPON_OAM_OAM_ERROR_CODE_UNSUPPORTED                                              = 130,      /**< Unsupported. */
+    BCMOLT_EPON_OAM_OAM_ERROR_CODE_OVERFLOW                                                 = 131,      /**< Overflow. */
+    BCMOLT_EPON_OAM_OAM_ERROR_CODE_TOO_LONG                                                 = 132,      /**< Too Long. */
+    BCMOLT_EPON_OAM_OAM_ERROR_CODE_TO_BE_CONTINUED                                          = 133,      /**< To Be Continued. */
+    BCMOLT_EPON_OAM_OAM_ERROR_CODE_BAD_PARAMETERS                                           = 134,      /**< Bad Parameters. */
+    BCMOLT_EPON_OAM_OAM_ERROR_CODE_NO_RESOURCES                                             = 135,      /**< No Resources. */
+    BCMOLT_EPON_OAM_OAM_ERROR_CODE_SYSTEM_BUSY                                              = 136,      /**< System Busy. */
+    BCMOLT_EPON_OAM_OAM_ERROR_CODE_STD_OAM_ATTR_UNDETERMINED                                = 160,      /**< STD Oam Attr Undetermined. */
+    BCMOLT_EPON_OAM_OAM_ERROR_CODE_STD_OAM_ATTR_MAY_BE_CORRUPTED                            = 161,      /**< STD Oam Attr May Be Corrupted. */
+    BCMOLT_EPON_OAM_OAM_ERROR_CODE_STD_OAM_ATTR_UNSUPPORTED                                 = 162,      /**< STD Oam Attr Unsupported. */
+    BCMOLT_EPON_OAM_OAM_ERROR_CODE_STD_OAM_ATTR_HW_FAILURE                                  = 163,      /**< STD Oam Attr Hw Failure. */
+    BCMOLT_EPON_OAM_OAM_ERROR_CODE_STD_OAM_ATTR_OVERFLOW                                    = 164,      /**< STD Oam Attr Overflow. */
+    BCMOLT_EPON_OAM_OAM_ERROR_CODE_STD_OAM_OBJ_END                                          = 192,      /**< STD Oam Object End. */
+    BCMOLT_EPON_OAM_OAM_ERROR_CODE_STD_OAM_OBJ_UNDERTERMINED                                = 193,      /**< STD Oam Object Undertermined. */
+    BCMOLT_EPON_OAM_OAM_ERROR_CODE_STD_OAM_OBJ_UNSUPPORTED                                  = 194,      /**< STD Oam Object Unsupported. */
+    BCMOLT_EPON_OAM_OAM_ERROR_CODE_STD_OAM_OBJ_MAY_BE_CORRUPTED                             = 195,      /**< STD Oam Object May Be Corrupted. */
+    BCMOLT_EPON_OAM_OAM_ERROR_CODE_STD_OAM_OBJ_HW_FAILURE                                   = 196       /**< STD Oam Object Hw Failure. */
+} bcmolt_epon_oam_oam_error_code;
+
+/** CTC Leaf Old Management Object. 
+ */
+typedef enum bcmolt_epon_oam_ctc_leaf_old_management_object
+{
+    BCMOLT_EPON_OAM_CTC_LEAF_OLD_MANAGEMENT_OBJECT_PORT                                     = 1         /**< Port. */
+} bcmolt_epon_oam_ctc_leaf_old_management_object;
+
+/** CTC Port Type. 
+ */
+typedef enum bcmolt_epon_oam_ctc_port_type
+{
+    BCMOLT_EPON_OAM_CTC_PORT_TYPE_ETHERNET                                                  = 1,        /**< Ethernet. */
+    BCMOLT_EPON_OAM_CTC_PORT_TYPE_VOIP                                                      = 2,        /**< VoIP. */
+    BCMOLT_EPON_OAM_CTC_PORT_TYPE_ADSL2PLUS                                                 = 3,        /**< ADSL2+. */
+    BCMOLT_EPON_OAM_CTC_PORT_TYPE_VDSL2                                                     = 4,        /**< VDSL2. */
+    BCMOLT_EPON_OAM_CTC_PORT_TYPE_E1                                                        = 5         /**< E1. */
+} bcmolt_epon_oam_ctc_port_type;
+
+/** CTC Leaf Ext Attribute. 
+ */
+typedef enum bcmolt_epon_oam_ctc_leaf_ext_attribute
+{
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_END                                              = 0,        /**< End. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_SERIAL_NUMBER                                = 1,        /**< ONU Serial Number. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_FIRMWARE_VERSION                                 = 2,        /**< Firmware Version. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_CHIPSET_ID                                       = 3,        /**< Chipset ID. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_CAPABILITIES1                                = 4,        /**< ONU Capabilities-1. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_OPTICAL_TRANSCEIVER_DIAGNOSIS                    = 5,        /**< Optical Transceiver Diagnosis. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_SERVICE_SLA                                      = 6,        /**< Service SLA. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_CAPABILITIES2                                = 7,        /**< ONU Capabilities-2. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_HOLDOVER_CONFIG                                  = 8,        /**< Holdover Config. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_MXU_MANAGE_GLOBAL_PARAMETER                      = 9,        /**< MxU Manage Global Parameter. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_MXU_MANAGE_SNMP_PARAMETER                        = 10,       /**< MxU Manage SNMP Parameter. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ACTIVE_PON_IFADMIN                               = 11,       /**< Active PON I/F Admin. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_CAPABILITIES3                                = 12,       /**< ONU Capabilities-3. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_POWER_SAVING_CAPABILITIES                    = 13,       /**< ONU Power Saving Capabilities. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_POWER_SAVING_CONFIG                          = 14,       /**< ONU Power Saving Config. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PROTECTION_PARAMETERS                        = 15,       /**< ONU Protection Parameters. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ETH_LINK_STATE                                   = 17,       /**< Eth Link State. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ETH_PORT_PAUSE                                   = 18,       /**< Eth Port Pause. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ETH_PORT_POLICING                                = 19,       /**< Eth Port Policing. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_VOIP_PORT                                        = 20,       /**< VoIP Port. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_E1PORT                                           = 21,       /**< E1 Port. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ETH_PORT_DOWN_RATE_LIMITING                      = 22,       /**< Eth Port Down Rate Limiting. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_PORT_LOOP_DETECT                                 = 23,       /**< Port Loop Detect. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_PORT_DISABLE_ON_LOOP_DETECTED                    = 24,       /**< Port Disable On Loop Detected. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_VLAN                                             = 33,       /**< VLAN. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_CLASSIFICATION_AND_MARKING                       = 49,       /**< Classification And Marking. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_MULTICAST_VLAN                                   = 65,       /**< Multicast VLAN. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_MULTICAST_TAG_OPERATION                          = 66,       /**< Multicast Tag Operation. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_MULTICAST_SWITCH                                 = 67,       /**< Multicast Switch. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_MULTICAST_CONTROL                                = 68,       /**< Multicast Control. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_GROUP_MAX                                        = 69,       /**< Group Max. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_FAST_LEAVE_ABILITY                               = 70,       /**< Fast Leave Ability. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_FAST_LEAVE_ADMIN_STATE                           = 71,       /**< Fast Leave Admin State. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_LLID_QUEUE_CONFIG                                = 81,       /**< LLID/Queue Config. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_IAD_INFORMATION                                  = 97,       /**< IAD Information. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_VOIP_GLOBAL_PARAMETERS                           = 98,       /**< VoIP Global Parameters. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_H248PARAMETERS                                   = 99,       /**< H.248 Parameters. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_H248USER_TID_INFORMATION                         = 100,      /**< H.248 User TID Information. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_H248RTP_TID_CONFIGURATION                        = 101,      /**< H.248 RTP TID Configuration. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_H248RTP_TID_INFORMATION                          = 102,      /**< H.248 RTP TID Information. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_SIP_PARAMETERS                                   = 103,      /**< SIP Parameters. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_SIP_USER_PARAMETERS                              = 104,      /**< SIP User Parameters. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_FAX_MODEM_CONFIGURATION                          = 105,      /**< Fax/Modem Configuration. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_H248IAD_OPERATION_STATUS                         = 106,      /**< H.248 IAD Operation Status. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_POTS_STATUS                                      = 107,      /**< POTS Status. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_IAD_OPERATION                                    = 108,      /**< IAD Operation. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_SIP_DIGIT_MAP                                    = 109,      /**< SIP Digit Map. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ALARM_ADMIN_STATE                                = 129,      /**< Alarm Admin State. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ALARM_THRESHOLD                                  = 130,      /**< Alarm Threshold. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_TX_POWER_SUPPLY_CONTROL                      = 161,      /**< Onu Tx Power Supply Control. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_MAC_AGING_TIME                                   = 164,      /**< MAC Aging Time. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_PERFORMANCE_MONITORING_STATUS                    = 177,      /**< Performance Monitoring Status. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_PERFORMANCE_MONITORING_CURRENT_DATA              = 178,      /**< Performance Monitoring Current Data. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_PERFORMANCE_MONITORING_HISTORY_DATA              = 179,      /**< Performance Monitoring History Data. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_VERSION_SERVER_PARA                              = 32770U,   /**< Version Server Para. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_MAC_LIMIT                                    = 32771U,   /**< ONU MAC Limit. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_MAC_AGING_TIME                               = 32772U,   /**< ONU MAC Aging Time. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PORT_MAC_FILTER                              = 32773U,   /**< ONU Port MAC Filter. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PORT_MAC_BINDING                             = 32774U,   /**< ONU Port MAC Binding. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PORT_MAC_STATIC                              = 32775U,   /**< ONU Port MAC Static. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PERFORMANCE_STAT                             = 32784U,   /**< ONU Performance Stat. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PORT_ISOLATE                                 = 32776U,   /**< ONU Port Isolate. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_MAC_ADDRESS_TABLE_QUERY                      = 32786U,   /**< ONU MAC Address Table Query. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PON_MAC_DOWNSTREAM_SHAPING                   = 32787U,   /**< ONU PON MAC Downstream Shaping. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PON_MAC_USDSBUFFER                           = 32788U,   /**< ONU PON MAC US/DS Buffer. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PON_MAC_USDSBUFFER_CAPABILITY_QUERY          = 32789U,   /**< ONU PON MAC US/DS Buffer Capability Query. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PORT_STATISTICS_COLLECT_CONTROL              = 32790U,   /**< ONU Port Statistics Collect Control. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PORT_STATISTICS_COUNTER_RESET                = 32791U,   /**< ONU Port Statistics Counter Reset. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PORT_FLUX_STATISTICS_COUNTER                 = 32792U,   /**< ONU Port Flux Statistics Counter. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_LIGHT_EXCEPTION                              = 32793U,   /**< ONU Light Exception. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_LIGHT_CONTROL                                = 32794U,   /**< ONU Light Control. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PON_PORT_STATISTICS_GET1                     = 32795U,   /**< ONU PON Port Statistics Get1. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ONU_PON_PORT_STATISTICS_GET2                     = 32796U,   /**< ONU PON Port Statistics Get2. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ALARM_CONFIG                                     = 32769U,   /**< Alarm Config. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_ROUGUE_ONU_EXCL_ABILITY                          = 32797U,   /**< RougueOnuExclAbility. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_PPPO_ETEST_CONFIGURATION                         = 32931U,   /**< PPPoETestConfiguration. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ATTRIBUTE_PPPO_ETEST_RESULT                                = 32932U    /**< PPPoETestResult. */
+} bcmolt_epon_oam_ctc_leaf_ext_attribute;
+
+/** CTC Leaf Ext Action. 
+ */
+typedef enum bcmolt_epon_oam_ctc_leaf_ext_action
+{
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ACTION_RESET_ONU                                           = 1,        /**< Reset ONU. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ACTION_SLEEP_CONTROL                                       = 2,        /**< Sleep Control. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ACTION_FAST_LEAVE_ADMIN_CONTROL                            = 72,       /**< Fast Leave Admin Control. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ACTION_MULTI_LLID_ADMIN_CONTROL                            = 514,      /**< Multi-LLID Admin Control. */
+    BCMOLT_EPON_OAM_CTC_LEAF_EXT_ACTION_RESET_CARD                                          = 1025      /**< Reset Card. */
+} bcmolt_epon_oam_ctc_leaf_ext_action;
+
+/** KT Leaf Attribute. 
+ */
+typedef enum bcmolt_epon_oam_ktleaf_attribute
+{
+    BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_PORT_DOWNSTREAM_RATE_SHAPING                           = 1,        /**< Port Downstream Rate Shaping. */
+    BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_ONU_MAC_LIMIT                                          = 2,        /**< ONU MAC Limit. */
+    BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_BLOCK_UNBLOCK_ONU_TRAFFIC                              = 3,        /**< Block/Unblock ONU Traffic. */
+    BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_ONU_DIAGNOSTICS                                        = 4,        /**< ONU Diagnostics. */
+    BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_ONU_QUEUE_DROP_COUNTER                                 = 5,        /**< ONU Queue Drop Counter. */
+    BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_ETHERNET_PORT_COUNTER                                  = 17,       /**< Ethernet Port Counter. */
+    BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_ETHERNET_PORT_RSTP                                     = 18,       /**< Ethernet Port RSTP. */
+    BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_LOOP_DETECT                                            = 19,       /**< Loop Detect. */
+    BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_ONU_MPCP_COUNTER                                       = 20,       /**< ONU MPCP Counter. */
+    BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_STATIC_MAC                                             = 21,       /**< Static MAC. */
+    BCMOLT_EPON_OAM_KTLEAF_ATTRIBUTE_OPTICAL_POWER_ALARM_STATUS                             = 22        /**< Optical Power Alarm Status. */
+} bcmolt_epon_oam_ktleaf_attribute;
+
+/** CTC Eth Port Policing Enable. 
+ */
+typedef enum bcmolt_epon_oam_ctc_eth_port_policing_enable
+{
+    BCMOLT_EPON_OAM_CTC_ETH_PORT_POLICING_ENABLE_DISABLED                                   = 0,        /**< Disabled. */
+    BCMOLT_EPON_OAM_CTC_ETH_PORT_POLICING_ENABLE_ENABLED                                    = 1         /**< Enabled. */
+} bcmolt_epon_oam_ctc_eth_port_policing_enable;
+
+/** CTC Event Sub Type. 
+ */
+typedef enum bcmolt_epon_oam_ctc_event_sub_type
+{
+    BCMOLT_EPON_OAM_CTC_EVENT_SUB_TYPE_STATUS_REQUEST                                       = 1,        /**< Status Request. */
+    BCMOLT_EPON_OAM_CTC_EVENT_SUB_TYPE_STATUS_SET                                           = 2,        /**< Status Set. */
+    BCMOLT_EPON_OAM_CTC_EVENT_SUB_TYPE_STATUS_RESPONSE                                      = 3,        /**< Status Response. */
+    BCMOLT_EPON_OAM_CTC_EVENT_SUB_TYPE_THRESHOLD_REQUEST                                    = 4,        /**< Threshold Request. */
+    BCMOLT_EPON_OAM_CTC_EVENT_SUB_TYPE_THRESHOLD_SET                                        = 5,        /**< Threshold Set. */
+    BCMOLT_EPON_OAM_CTC_EVENT_SUB_TYPE_THRESHOLD_RESPONSE                                   = 6         /**< Threshold Response. */
+} bcmolt_epon_oam_ctc_event_sub_type;
+
+/** CTC Event Status. 
+ */
+typedef enum bcmolt_epon_oam_ctc_event_status
+{
+    BCMOLT_EPON_OAM_CTC_EVENT_STATUS_DISABLED                                               = 0,        /**< Disabled */
+    BCMOLT_EPON_OAM_CTC_EVENT_STATUS_ENABLED                                                = 1,        /**< Enabled */
+    BCMOLT_EPON_OAM_CTC_EVENT_STATUS_NOT_FOUND                                              = 4294967295UL  /**< Not Found */
+} bcmolt_epon_oam_ctc_event_status;
+
+/** CTC ONU Sleep Flag. 
+ */
+typedef enum bcmolt_epon_oam_ctc_onu_sleep_flag
+{
+    BCMOLT_EPON_OAM_CTC_ONU_SLEEP_FLAG_LEAVE                                                = 0,            /**< ONU leaves from power saving state */
+    BCMOLT_EPON_OAM_CTC_ONU_SLEEP_FLAG_ENTER                                                = 1,            /**< ONU enters power saving state */
+    BCMOLT_EPON_OAM_CTC_ONU_SLEEP_FLAG_CHANGE                                               = 2             /**< Change ONU power saving mode, sleep time and wake time */
+} bcmolt_epon_oam_ctc_onu_sleep_flag;
+
+/** Ctc Onu Sleep Mode. 
+ */
+typedef enum bcmolt_epon_oam_ctc_onu_sleep_mode
+{
+    BCMOLT_EPON_OAM_CTC_ONU_SLEEP_MODE_NOT_SUPPORT                                          = 0,            /**< Don't support sleep mode */
+    BCMOLT_EPON_OAM_CTC_ONU_SLEEP_MODE_TX_ONLY                                              = 1,            /**< In this case, only support Tx sleep mode */
+    BCMOLT_EPON_OAM_CTC_ONU_SLEEP_MODE_TRX                                                  = 2,            /**< In this case, Tx and Rx can only sleep at the same time */
+    BCMOLT_EPON_OAM_CTC_ONU_SLEEP_MODE_TX_AND_TRX                                           = 3             /**< In this case, both support Tx sleep and Tx Rx both sleep */
+} bcmolt_epon_oam_ctc_onu_sleep_mode;
+
+/** PP Po E Test Status. 
+ */
+typedef enum bcmolt_epon_oam_pppo_etest_status
+{
+    BCMOLT_EPON_OAM_PPPO_ETEST_STATUS_UN_START                                              = 0,            /**< UnStart. */
+    BCMOLT_EPON_OAM_PPPO_ETEST_STATUS_TESTING                                               = 1,            /**< Testing. */
+    BCMOLT_EPON_OAM_PPPO_ETEST_STATUS_TEST_OVER_AND_PASS                                    = 2,            /**< TestOverAndPass. */
+    BCMOLT_EPON_OAM_PPPO_ETEST_STATUS_TEST_OVER_AND_FAIL                                    = 3             /**< TestOverAndFail. */
+} bcmolt_epon_oam_pppo_etest_status;
+
+/** PP Po E Test Fail Reason. 
+ */
+typedef enum bcmolt_epon_oam_pppo_etest_fail_reason
+{
+    BCMOLT_EPON_OAM_PPPO_ETEST_FAIL_REASON_NULL                                             = 0,            /**< Null. */
+    BCMOLT_EPON_OAM_PPPO_ETEST_FAIL_REASON_UNKNOWN                                          = 1,            /**< Unknown. */
+    BCMOLT_EPON_OAM_PPPO_ETEST_FAIL_REASON_HARDWARE_NOT_SUPPORT                             = 2,            /**< HardwareNotSupport. */
+    BCMOLT_EPON_OAM_PPPO_ETEST_FAIL_REASON_VLAN_NOT_CONFIGURE                               = 3,            /**< VlanNotConfigure. */
+    BCMOLT_EPON_OAM_PPPO_ETEST_FAIL_REASON_TIMEOUT_FOR_PADI                                 = 4,            /**< TimeoutForPADI. */
+    BCMOLT_EPON_OAM_PPPO_ETEST_FAIL_REASON_TIMEOUT_FOR_PADR                                 = 5,            /**< TimeoutForPADR. */
+    BCMOLT_EPON_OAM_PPPO_ETEST_FAIL_REASON_LCPNEG_FAIL                                      = 6,            /**< LCPNegFail. */
+    BCMOLT_EPON_OAM_PPPO_ETEST_FAIL_REASON_AUTH_FAIL                                        = 7,            /**< AuthFail. */
+    BCMOLT_EPON_OAM_PPPO_ETEST_FAIL_REASON_IPNEG_FAIL                                       = 8             /**< IPNegFail. */
+} bcmolt_epon_oam_pppo_etest_fail_reason;
+
+/** Start Or Stop Indication. 
+ */
+typedef enum bcmolt_epon_oam_start_or_stop_indication
+{
+    BCMOLT_EPON_OAM_START_OR_STOP_INDICATION_STOP_TEST                                      = 0,            /**< StopTest. */
+    BCMOLT_EPON_OAM_START_OR_STOP_INDICATION_START_TEST                                     = 1             /**< StartTest. */
+} bcmolt_epon_oam_start_or_stop_indication;
+
+/** PP Po E Auth Mode. 
+ */
+typedef enum bcmolt_epon_oam_pppo_eauth_mode
+{
+    BCMOLT_EPON_OAM_PPPO_EAUTH_MODE_AUTO                                                    = 0,            /**< Auto. */
+    BCMOLT_EPON_OAM_PPPO_EAUTH_MODE_PAP                                                     = 1,            /**< Pap. */
+    BCMOLT_EPON_OAM_PPPO_EAUTH_MODE_CHAP                                                    = 2             /**< Chap. */
+} bcmolt_epon_oam_pppo_eauth_mode;
+
+/** CTC Supported Services. 
+ */
+typedef enum bcmolt_epon_oam_ctc_supported_services
+{
+    BCMOLT_EPON_OAM_CTC_SUPPORTED_SERVICES_NONE                                             = 0,
+    BCMOLT_EPON_OAM_CTC_SUPPORTED_SERVICES_GEPORT                                           = 0x0001,       /**< GE Port. */
+    BCMOLT_EPON_OAM_CTC_SUPPORTED_SERVICES_FEPORT                                           = 0x0002,       /**< FE Port. */
+    BCMOLT_EPON_OAM_CTC_SUPPORTED_SERVICES_VOIP                                             = 0x0004,       /**< VoIP. */
+    BCMOLT_EPON_OAM_CTC_SUPPORTED_SERVICES_TDM                                              = 0x0008        /**< TDM. */
+} bcmolt_epon_oam_ctc_supported_services;
+
+/** CTC Service SLA Operation. 
+ */
+typedef enum bcmolt_epon_oam_ctc_service_sla_operation
+{
+    BCMOLT_EPON_OAM_CTC_SERVICE_SLA_OPERATION_DEACTIVATE                                    = 0,            /**< Deactivate. */
+    BCMOLT_EPON_OAM_CTC_SERVICE_SLA_OPERATION_ACTIVATE                                      = 1             /**< Activate. */
+} bcmolt_epon_oam_ctc_service_sla_operation;
+
+/** CTC 2.1 ONU DBA Scheduling Scheme 
+ */
+typedef enum bcmolt_epon_oam_ctc_onu_dba_scheduling_scheme
+{
+    BCMOLT_EPON_OAM_CTC_ONU_DBA_SCHEDULING_SCHEME_STRICT_PRIORITY                           = 0,            /**< Strict Priority */
+    BCMOLT_EPON_OAM_CTC_ONU_DBA_SCHEDULING_SCHEME_WEIGHTED_ROUND_ROBIN                      = 1,            /**< Weighted Round-Robin */
+    BCMOLT_EPON_OAM_CTC_ONU_DBA_SCHEDULING_SCHEME_SPPLUS_WRR                                = 2             /**< SP+WRR */
+} bcmolt_epon_oam_ctc_onu_dba_scheduling_scheme;
+
+/** CTC ONU Type 
+ */
+typedef enum bcmolt_epon_oam_ctc_onu_type
+{
+    BCMOLT_EPON_OAM_CTC_ONU_TYPE_SFU                                                        = 0,            /**< SFU */
+    BCMOLT_EPON_OAM_CTC_ONU_TYPE_HGU                                                        = 1,            /**< HGU */
+    BCMOLT_EPON_OAM_CTC_ONU_TYPE_SBU                                                        = 2,            /**< SBU */
+    BCMOLT_EPON_OAM_CTC_ONU_TYPE_BOX_MDU                                                    = 3,            /**< Box MDU (Ethernet Port) */
+    BCMOLT_EPON_OAM_CTC_ONU_TYPE_SMALL_LCMDU                                                = 4,            /**< Small LC MDU (Ethernet Port) */
+    BCMOLT_EPON_OAM_CTC_ONU_TYPE_BOX_LCMDU                                                  = 5,            /**< Box LC MDU (DSL Port) */
+    BCMOLT_EPON_OAM_CTC_ONU_TYPE_CHASSIS_LCMDU                                              = 6,            /**< Chassis LC MDU (DSL Port) */
+    BCMOLT_EPON_OAM_CTC_ONU_TYPE_LCMDU                                                      = 7,            /**< L/C MDU (support mixing insertion of Ethernet port L/C and DSL Port L/C) */
+    BCMOLT_EPON_OAM_CTC_ONU_TYPE_CMC                                                        = 9             /**< CMC */
+} bcmolt_epon_oam_ctc_onu_type;
+
+/** CTC ONU Protection Type 
+ */
+typedef enum bcmolt_epon_oam_ctc_onu_protection_type
+{
+    BCMOLT_EPON_OAM_CTC_ONU_PROTECTION_TYPE_NOT_SUPPORTED                                   = 0,            /**< Not Support */
+    BCMOLT_EPON_OAM_CTC_ONU_PROTECTION_TYPE_TYPE_C                                          = 1,            /**< Type C */
+    BCMOLT_EPON_OAM_CTC_ONU_PROTECTION_TYPE_TYPE_D                                          = 2             /**< Type D */
+} bcmolt_epon_oam_ctc_onu_protection_type;
+
+/** CTC 2.1 ONU Interface Type 
+ */
+typedef enum bcmolt_epon_oam_ctc_onu_interface_type
+{
+    BCMOLT_EPON_OAM_CTC_ONU_INTERFACE_TYPE_GE                                               = 0,            /**< Gagabit Ethernet */
+    BCMOLT_EPON_OAM_CTC_ONU_INTERFACE_TYPE_FE                                               = 1,            /**< Fast Ethernet */
+    BCMOLT_EPON_OAM_CTC_ONU_INTERFACE_TYPE_VOIP                                             = 2,            /**< VoIP */
+    BCMOLT_EPON_OAM_CTC_ONU_INTERFACE_TYPE_TDM                                              = 3,            /**< TDM */
+    BCMOLT_EPON_OAM_CTC_ONU_INTERFACE_TYPE_ADSL2PLUS                                        = 4,            /**< ADSL2+ */
+    BCMOLT_EPON_OAM_CTC_ONU_INTERFACE_TYPE_VDSL2                                            = 5,            /**< VDSL2 */
+    BCMOLT_EPON_OAM_CTC_ONU_INTERFACE_TYPE_WLAN                                             = 6,            /**< WLAN */
+    BCMOLT_EPON_OAM_CTC_ONU_INTERFACE_TYPE_USB                                              = 7,            /**< USB */
+    BCMOLT_EPON_OAM_CTC_ONU_INTERFACE_TYPE_CATV_RF                                          = 8             /**< CATV RF */
+} bcmolt_epon_oam_ctc_onu_interface_type;
+
+/** CTC MxU Global Params Width. 
+ */
+typedef enum bcmolt_epon_oam_ctc_mxu_global_params_width
+{
+    BCMOLT_EPON_OAM_CTC_MXU_GLOBAL_PARAMS_WIDTH_IPV4                                        = 17,           /**< IPv4. */
+    BCMOLT_EPON_OAM_CTC_MXU_GLOBAL_PARAMS_WIDTH_IPV6                                        = 41            /**< IPv6. */
+} bcmolt_epon_oam_ctc_mxu_global_params_width;
+
+/** CTC MxU SNMP Params Width. 
+ */
+typedef enum bcmolt_epon_oam_ctc_mxu_snmp_params_width
+{
+    BCMOLT_EPON_OAM_CTC_MXU_SNMP_PARAMS_WIDTH_IPV4                                          = 105,          /**< IPv4. */
+    BCMOLT_EPON_OAM_CTC_MXU_SNMP_PARAMS_WIDTH_IPV6                                          = 117           /**< IPv6. */
+} bcmolt_epon_oam_ctc_mxu_snmp_params_width;
+
+/** CTC ONU Power Supply Control 
+ */
+typedef enum bcmolt_epon_oam_ctc_onu_power_supply_control_type
+{
+    BCMOLT_EPON_OAM_CTC_ONU_POWER_SUPPLY_CONTROL_TYPE_NOT_SUPPORT                           = 0,            /**< Don't Support ONU Power Supply Control */
+    BCMOLT_EPON_OAM_CTC_ONU_POWER_SUPPLY_CONTROL_TYPE_TX_CTRL                               = 1,            /**< In this case, Tx and Rx power supply can only be controlled together whereby power for Rx is also shutdown when the power to Tx is shutdown */
+    BCMOLT_EPON_OAM_CTC_ONU_POWER_SUPPLY_CONTROL_TYPE_TX_RX_CTRL                            = 2             /**< In this case, tx and rx can be controlled separately whereby power to Rx is still on while the power to Tx is shutdown */
+} bcmolt_epon_oam_ctc_onu_power_supply_control_type;
+
+/** CTC Vlan Mode. 
+ */
+typedef enum bcmolt_epon_oam_ctc_vlan_mode
+{
+    BCMOLT_EPON_OAM_CTC_VLAN_MODE_TRANSPARENT                                               = 0,            /**< Transparent. */
+    BCMOLT_EPON_OAM_CTC_VLAN_MODE_TAG                                                       = 1,            /**< Tag. */
+    BCMOLT_EPON_OAM_CTC_VLAN_MODE_TRANSLATION                                               = 2,            /**< Translation. */
+    BCMOLT_EPON_OAM_CTC_VLAN_MODE_AGGREGATE                                                 = 3,            /**< Aggregate. */
+    BCMOLT_EPON_OAM_CTC_VLAN_MODE_TRUNK                                                     = 4,            /**< Trunk. */
+    BCMOLT_EPON_OAM_CTC_VLAN_MODE_SPECIAL_TRANSPARENT                                       = 255,          /**< Special Transparent. */
+    BCMOLT_EPON_OAM_CTC_VLAN_MODE_TRUNK_MDU                                                 = 19,           /**< Trunk MDU. */
+    BCMOLT_EPON_OAM_CTC_VLAN_MODE_HYBRID                                                    = 20            /**< Hybrid. */
+} bcmolt_epon_oam_ctc_vlan_mode;
+
+/** CTC classification field selectors 
+ */
+typedef enum bcmolt_epon_oam_ctc_onu_classif_field
+{
+    BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_DA                                                = 0,            /**< MAC destination address */
+    BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_SA                                                = 1,            /**< MAC source address */
+    BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_VLAN_PRI                                          = 2,            /**< VLAN priority (CoS) */
+    BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_VLAN_ID                                           = 3,            /**< VLAN ID */
+    BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_ETH_TYPE                                          = 4,            /**< EtherType */
+    BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_DEST_IP                                           = 5,            /**< IP destination address */
+    BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_SOURCE_IP                                         = 6,            /**< IP source address */
+    BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_IP_TYPE                                           = 7,            /**< IP protocol type */
+    BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_IP_TOS                                            = 8,            /**< IP ToS */
+    BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_IP_PREC                                           = 9,            /**< IP precedence */
+    BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_SOURCE_PORT                                       = 10,           /**< UDP source port */
+    BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_DEST_PORT                                         = 11,           /**< UDP desintation port */
+    BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_IP_VER                                            = 12,           /**< IP Version (v4 or v6) */
+    BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_IP_FLOW_LABEL                                     = 13,           /**< IP Flow Label (IPv6) */
+    BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_DST_IPV6                                          = 14,           /**< Destination IPv6 */
+    BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_SRC_IPV6                                          = 15,           /**< Source Ipv6 */
+    BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_DST_IPV6PRE                                       = 16,           /**< Destination IPv6 Prefix */
+    BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_SRC_IPV6PRE                                       = 17,           /**< Source IPv6 Prefix */
+    BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_FIELD_NXT_HDR                                           = 18            /**< Next Header (IPv6)(such as TCP/IP/ICMPv4/IGMP,etc) */
+} bcmolt_epon_oam_ctc_onu_classif_field;
+
+/** CTC classification operators 
+ */
+typedef enum bcmolt_epon_oam_ctc_onu_classif_operator
+{
+    BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_OPERATOR_NEVER_MATCH                                    = 0,            /**< Never match */
+    BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_OPERATOR_EQUAL                                          = 1,            /**< LHS == RHS */
+    BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_OPERATOR_NOT_EQUAL                                      = 2,            /**< LHS != RHS */
+    BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_OPERATOR_LTEQ                                           = 3,            /**< LHS <= RHS */
+    BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_OPERATOR_GTEQ                                           = 4,            /**< LHS >= RHS */
+    BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_OPERATOR_EXIST                                          = 5,            /**< Match if the field exists */
+    BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_OPERATOR_NOT_EXIST                                      = 6,            /**< Match if the field does not exist */
+    BCMOLT_EPON_OAM_CTC_ONU_CLASSIF_OPERATOR_ALWAYS_MATCH                                   = 7             /**< Always match */
+} bcmolt_epon_oam_ctc_onu_classif_operator;
+
+/** CTC Multicast VLAN Operation. 
+ */
+typedef enum bcmolt_epon_oam_ctc_multicast_vlan_operation
+{
+    BCMOLT_EPON_OAM_CTC_MULTICAST_VLAN_OPERATION_DELETE                                     = 0,            /**< Delete. */
+    BCMOLT_EPON_OAM_CTC_MULTICAST_VLAN_OPERATION_ADD                                        = 1,            /**< Add. */
+    BCMOLT_EPON_OAM_CTC_MULTICAST_VLAN_OPERATION_CLEAR                                      = 2,            /**< Clear. */
+    BCMOLT_EPON_OAM_CTC_MULTICAST_VLAN_OPERATION_LIST                                       = 3             /**< List. */
+} bcmolt_epon_oam_ctc_multicast_vlan_operation;
+
+/** CTC Multicast Tag Mode. 
+ */
+typedef enum bcmolt_epon_oam_ctc_multicast_tag_mode
+{
+    BCMOLT_EPON_OAM_CTC_MULTICAST_TAG_MODE_DO_NOT_STRIP                                     = 0,            /**< Do Not Strip. */
+    BCMOLT_EPON_OAM_CTC_MULTICAST_TAG_MODE_STRIP_DATA_QUERY                                 = 1,            /**< Strip Data/Query. */
+    BCMOLT_EPON_OAM_CTC_MULTICAST_TAG_MODE_STRIP_DATA_QUERY_IPTV                            = 2             /**< Strip Data/Query/IPTV. */
+} bcmolt_epon_oam_ctc_multicast_tag_mode;
+
+/** CTC Multicast Switch Mode. 
+ */
+typedef enum bcmolt_epon_oam_ctc_multicast_switch_mode
+{
+    BCMOLT_EPON_OAM_CTC_MULTICAST_SWITCH_MODE_IGMP_MLD_SNOOPING                             = 0,            /**< IGMP/MLD Snooping dual stack mode */
+    BCMOLT_EPON_OAM_CTC_MULTICAST_SWITCH_MODE_CTC_CONTROLLABLE_IGMP_MLD                     = 1,            /**< CTC controllable IGMP/MLD mode, snooping disabled */
+    BCMOLT_EPON_OAM_CTC_MULTICAST_SWITCH_MODE_IGMP_SNOOPING                                 = 2,            /**< IGMP snooping mode */
+    BCMOLT_EPON_OAM_CTC_MULTICAST_SWITCH_MODE_CTC_CONTROLLABLE_IGMP                         = 3,            /**< CTC controllable IGMP mode, snooping disabled */
+    BCMOLT_EPON_OAM_CTC_MULTICAST_SWITCH_MODE_UNDEFINED                                     = 127           /**< Undefined mode, has not been set yet */
+} bcmolt_epon_oam_ctc_multicast_switch_mode;
+
+/** CTC Multicast Control Action. 
+ */
+typedef enum bcmolt_epon_oam_ctc_multicast_control_action
+{
+    BCMOLT_EPON_OAM_CTC_MULTICAST_CONTROL_ACTION_DELETE                                     = 0,            /**< Delete. */
+    BCMOLT_EPON_OAM_CTC_MULTICAST_CONTROL_ACTION_ADD                                        = 1,            /**< Add. */
+    BCMOLT_EPON_OAM_CTC_MULTICAST_CONTROL_ACTION_CLEAR                                      = 2,            /**< Clear. */
+    BCMOLT_EPON_OAM_CTC_MULTICAST_CONTROL_ACTION_LIST                                       = 3             /**< List. */
+} bcmolt_epon_oam_ctc_multicast_control_action;
+
+/** CTC Multicast Control Type. 
+ */
+typedef enum bcmolt_epon_oam_ctc_multicast_control_type
+{
+    BCMOLT_EPON_OAM_CTC_MULTICAST_CONTROL_TYPE_GDA_MAC_ONLY                                 = 0,            /**< GDA MAC Only. */
+    BCMOLT_EPON_OAM_CTC_MULTICAST_CONTROL_TYPE_GDA_MAC_PLUS_VLAN_ID                         = 1,            /**< GDA MAC + VLAN ID. */
+    BCMOLT_EPON_OAM_CTC_MULTICAST_CONTROL_TYPE_GDA_MAC_PLUS_IPV4SA                          = 2,            /**< GDA MAC + IPv4 SA. */
+    BCMOLT_EPON_OAM_CTC_MULTICAST_CONTROL_TYPE_GDA_IPPLUS_MCAST_VLAN_ID                     = 3,            /**< GDA IP + Mcast VLAN ID. */
+    BCMOLT_EPON_OAM_CTC_MULTICAST_CONTROL_TYPE_GDA_IPV6PLUS_MCAST_VLAN_ID                   = 4,            /**< GDA IPv6 + Mcast VLAN ID. */
+    BCMOLT_EPON_OAM_CTC_MULTICAST_CONTROL_TYPE_GDA_MAC_PLUS_IPV6SA                          = 5             /**< GDA MAC + IPv6 SA. */
+} bcmolt_epon_oam_ctc_multicast_control_type;
+
+/** CTC 2.1 possible VoIP protocols 
+ */
+typedef enum bcmolt_epon_oam_ctc_voip_protocol
+{
+    BCMOLT_EPON_OAM_CTC_VOIP_PROTOCOL_H248                                                  = 0,            /**< H248 */
+    BCMOLT_EPON_OAM_CTC_VOIP_PROTOCOL_SIP                                                   = 1             /**< SIP */
+} bcmolt_epon_oam_ctc_voip_protocol;
+
+/** CTC 2.1 Voice IP Mode 
+ */
+typedef enum bcmolt_epon_oam_ctc_voice_ipmode
+{
+    BCMOLT_EPON_OAM_CTC_VOICE_IPMODE_STATIC_IP                                              = 0,            /**< Static IP address */
+    BCMOLT_EPON_OAM_CTC_VOICE_IPMODE_DHCP                                                   = 1,            /**< DHCP */
+    BCMOLT_EPON_OAM_CTC_VOICE_IPMODE_PPPOE                                                  = 2             /**< PPPoE/PPPoE+ */
+} bcmolt_epon_oam_ctc_voice_ipmode;
+
+/** CTC PPPoE Mode 
+ */
+typedef enum bcmolt_epon_oam_ctc_pppoe_mode
+{
+    BCMOLT_EPON_OAM_CTC_PPPOE_MODE_AUTO                                                     = 0,            /**< Auto  */
+    BCMOLT_EPON_OAM_CTC_PPPOE_MODE_CHAP                                                     = 1,            /**< Challenge Handshake Authentication Protocol */
+    BCMOLT_EPON_OAM_CTC_PPPOE_MODE_PAP                                                      = 2             /**< Password Authentication Protocol */
+} bcmolt_epon_oam_ctc_pppoe_mode;
+
+/** CTC 2.1 Voice Tagging Mode 
+ */
+typedef enum bcmolt_epon_oam_ctc_voice_tagging_mode
+{
+    BCMOLT_EPON_OAM_CTC_VOICE_TAGGING_MODE_PASS_THROUGH                                     = 0,            /**< Pass Through */
+    BCMOLT_EPON_OAM_CTC_VOICE_TAGGING_MODE_TAG                                              = 1,            /**< Tag */
+    BCMOLT_EPON_OAM_CTC_VOICE_TAGGING_MODE_VLAN_STACKING                                    = 2             /**< VLAN Stacking */
+} bcmolt_epon_oam_ctc_voice_tagging_mode;
+
+/** CTC 2.1 H248 Registration Mode 
+ */
+typedef enum bcmolt_epon_oam_ctc_h248reg_mode
+{
+    BCMOLT_EPON_OAM_CTC_H248REG_MODE_IPADDRESS                                              = 0,            /**< IP address */
+    BCMOLT_EPON_OAM_CTC_H248REG_MODE_DOMAIN                                                 = 1,            /**< Domain name */
+    BCMOLT_EPON_OAM_CTC_H248REG_MODE_DEVICE                                                 = 2             /**< Device name */
+} bcmolt_epon_oam_ctc_h248reg_mode;
+
+/** CTC 2.1 H248 Heartbeat Mode 
+ */
+typedef enum bcmolt_epon_oam_ctc_h248heartbeat_mode
+{
+    BCMOLT_EPON_OAM_CTC_H248HEARTBEAT_MODE_CLOSE                                            = 0,            /**< Close */
+    BCMOLT_EPON_OAM_CTC_H248HEARTBEAT_MODE_H248CTC                                          = 1             /**< H.248-CTC standard Notify command */
+} bcmolt_epon_oam_ctc_h248heartbeat_mode;
+
+/** Possible CTC 2.1 RTP TID configuration modes 
+ */
+typedef enum bcmolt_epon_oam_ctc_rtp_tid_mode
+{
+    BCMOLT_EPON_OAM_CTC_RTP_TID_MODE_ALIGNMENT                                              = 0,            /**< Alignment. */
+    BCMOLT_EPON_OAM_CTC_RTP_TID_MODE_NON_ALIGNMENT                                          = 1             /**< Non-Alignment. */
+} bcmolt_epon_oam_ctc_rtp_tid_mode;
+
+/** CTC 2.1 Voice T38 Mode 
+ */
+typedef enum bcmolt_epon_oam_ctc_voice_t38mode
+{
+    BCMOLT_EPON_OAM_CTC_VOICE_T38MODE_PASSTHROUGH                                           = 0,            /**< Voice passthrough mode (T30) */
+    BCMOLT_EPON_OAM_CTC_VOICE_T38MODE_T38MODE                                               = 1             /**< T38 Mode */
+} bcmolt_epon_oam_ctc_voice_t38mode;
+
+/** CTC 2.1 Voice/Fax Modem Control Mode 
+ */
+typedef enum bcmolt_epon_oam_ctc_voice_fax_modem_control_mode
+{
+    BCMOLT_EPON_OAM_CTC_VOICE_FAX_MODEM_CONTROL_MODE_NEGOTIATION                            = 0,            /**< Negotiation Mode */
+    BCMOLT_EPON_OAM_CTC_VOICE_FAX_MODEM_CONTROL_MODE_AUTO_BVD                               = 1             /**< Auto BVD */
+} bcmolt_epon_oam_ctc_voice_fax_modem_control_mode;
+
+/** CTC 2.1 IAD Operation Status 
+ */
+typedef enum bcmolt_epon_oam_ctc_iad_operation_status
+{
+    BCMOLT_EPON_OAM_CTC_IAD_OPERATION_STATUS_REGISTERING                                    = 0,            /**< Registering */
+    BCMOLT_EPON_OAM_CTC_IAD_OPERATION_STATUS_REG_SUCCESSFUL                                 = 1,            /**< Registration Successful */
+    BCMOLT_EPON_OAM_CTC_IAD_OPERATION_STATUS_IAD_FAULT                                      = 2,            /**< IAD Fault */
+    BCMOLT_EPON_OAM_CTC_IAD_OPERATION_STATUS_LOGOUT                                         = 3,            /**< Logout */
+    BCMOLT_EPON_OAM_CTC_IAD_OPERATION_STATUS_IAD_RESTARTING                                 = 4             /**< IAD Restarting */
+} bcmolt_epon_oam_ctc_iad_operation_status;
+
+/** CTC 2.1 IAD Port Status 
+ */
+typedef enum bcmolt_epon_oam_ctc_iad_port_status
+{
+    BCMOLT_EPON_OAM_CTC_IAD_PORT_STATUS_REGISTRING                                          = 0,            /**< Port is registring */
+    BCMOLT_EPON_OAM_CTC_IAD_PORT_STATUS_IDLE                                                = 1,            /**< Port is idle */
+    BCMOLT_EPON_OAM_CTC_IAD_PORT_STATUS_PICKUP                                              = 2,            /**< Pick up */
+    BCMOLT_EPON_OAM_CTC_IAD_PORT_STATUS_DIALING                                             = 3,            /**< Dialing */
+    BCMOLT_EPON_OAM_CTC_IAD_PORT_STATUS_RINGING                                             = 4,            /**< Ringing */
+    BCMOLT_EPON_OAM_CTC_IAD_PORT_STATUS_RINGBACK                                            = 5,            /**< Ringing back */
+    BCMOLT_EPON_OAM_CTC_IAD_PORT_STATUS_CONNECTING                                          = 6,            /**< Connecting */
+    BCMOLT_EPON_OAM_CTC_IAD_PORT_STATUS_CONNECTED                                           = 7,            /**< Connected */
+    BCMOLT_EPON_OAM_CTC_IAD_PORT_STATUS_RELEASING_CONNECTION                                = 8,            /**< Releasing Connection */
+    BCMOLT_EPON_OAM_CTC_IAD_PORT_STATUS_REGISTRATION_FAILURE                                = 9,            /**< Port Registration Failure */
+    BCMOLT_EPON_OAM_CTC_IAD_PORT_STATUS_NOT_ACTIVATED                                       = 10            /**< Port is not activated */
+} bcmolt_epon_oam_ctc_iad_port_status;
+
+/** CTC 2.1 IAD Port Service State 
+ */
+typedef enum bcmolt_epon_oam_ctc_iad_port_service_state
+{
+    BCMOLT_EPON_OAM_CTC_IAD_PORT_SERVICE_STATE_END_LOCAL                                    = 0,            /**< Local end terminates service, caused by 'user disable port' */
+    BCMOLT_EPON_OAM_CTC_IAD_PORT_SERVICE_STATE_END_REMOTE                                   = 1,            /**< Remote and terminates service, caused by 'MGC sends down command' */
+    BCMOLT_EPON_OAM_CTC_IAD_PORT_SERVICE_STATE_END_AUTO                                     = 2,            /**< Automatically terminate service, caused by MGC fault */
+    BCMOLT_EPON_OAM_CTC_IAD_PORT_SERVICE_STATE_NORMAL                                       = 3             /**< Normal service normal */
+} bcmolt_epon_oam_ctc_iad_port_service_state;
+
+/** CTC 2.1 IAD Port Codec Mode 
+ */
+typedef enum bcmolt_epon_oam_ctc_iad_port_codec_mode
+{
+    BCMOLT_EPON_OAM_CTC_IAD_PORT_CODEC_MODE_G711A                                           = 0,            /**< G.711 A */
+    BCMOLT_EPON_OAM_CTC_IAD_PORT_CODEC_MODE_G729                                            = 1,            /**< G.729 */
+    BCMOLT_EPON_OAM_CTC_IAD_PORT_CODEC_MODE_G711U                                           = 2,            /**< G.711 U */
+    BCMOLT_EPON_OAM_CTC_IAD_PORT_CODEC_MODE_G723                                            = 3,            /**< G.723 */
+    BCMOLT_EPON_OAM_CTC_IAD_PORT_CODEC_MODE_G726                                            = 4,            /**< G.726 */
+    BCMOLT_EPON_OAM_CTC_IAD_PORT_CODEC_MODE_T38                                             = 5             /**< T.38 */
+} bcmolt_epon_oam_ctc_iad_port_codec_mode;
+
+/** CTC 2.1 IAD Operation 
+ */
+typedef enum bcmolt_epon_oam_ctc_iad_operation
+{
+    BCMOLT_EPON_OAM_CTC_IAD_OPERATION_RE_REGISTER                                           = 0,            /**< Re-Register for softswitch platform */
+    BCMOLT_EPON_OAM_CTC_IAD_OPERATION_LOGOUT                                                = 1,            /**< Logout from softswitch platform */
+    BCMOLT_EPON_OAM_CTC_IAD_OPERATION_RESET                                                 = 2             /**< Reset, only for voice module */
+} bcmolt_epon_oam_ctc_iad_operation;
+
+/** Zte Onu Port Mac Operation. 
+ */
+typedef enum bcmolt_epon_oam_zte_onu_port_mac_operation
+{
+    BCMOLT_EPON_OAM_ZTE_ONU_PORT_MAC_OPERATION_DELETE                                       = 0,            /**< Delete. */
+    BCMOLT_EPON_OAM_ZTE_ONU_PORT_MAC_OPERATION_ADD                                          = 1,            /**< Add. */
+    BCMOLT_EPON_OAM_ZTE_ONU_PORT_MAC_OPERATION_CLEAR                                        = 2,            /**< Clear. */
+    BCMOLT_EPON_OAM_ZTE_ONU_PORT_MAC_OPERATION_LIST                                         = 3             /**< List. */
+} bcmolt_epon_oam_zte_onu_port_mac_operation;
+
+/** Zte Isolate Mode. 
+ */
+typedef enum bcmolt_epon_oam_zte_isolate_mode
+{
+    BCMOLT_EPON_OAM_ZTE_ISOLATE_MODE_NOT_ISOLATE                                            = 0,            /**< Ethernet port do not isolate */
+    BCMOLT_EPON_OAM_ZTE_ISOLATE_MODE_ISOLATE                                                = 1             /**< Ethernet port isolate */
+} bcmolt_epon_oam_zte_isolate_mode;
+
+/** Zte Buffer Manage Mode. 
+ */
+typedef enum bcmolt_epon_oam_zte_buffer_manage_mode
+{
+    BCMOLT_EPON_OAM_ZTE_BUFFER_MANAGE_MODE_NOTSUPPORTBUFFERMANAGE                           = 0,            /**< NotSupportBufferManage. */
+    BCMOLT_EPON_OAM_ZTE_BUFFER_MANAGE_MODE_SUPPORTBUFFERMANAGE                              = 1             /**< SupportBufferManage. */
+} bcmolt_epon_oam_zte_buffer_manage_mode;
+
+/** Zte DS Buf Direction. 
+ */
+typedef enum bcmolt_epon_oam_zte_dsbuf_direction
+{
+    BCMOLT_EPON_OAM_ZTE_DSBUF_DIRECTION_UPSTREAM                                            = 0,            /**< Upstream. */
+    BCMOLT_EPON_OAM_ZTE_DSBUF_DIRECTION_DOWNSTREAM                                          = 1,            /**< Downstream. */
+    BCMOLT_EPON_OAM_ZTE_DSBUF_DIRECTION_BOTH_UPSTREAM_AND_DOWNSTREAM                        = 2             /**< Both Upstream And Downstream. */
+} bcmolt_epon_oam_zte_dsbuf_direction;
+
+/** Zte Statistics Action Mode. 
+ */
+typedef enum bcmolt_epon_oam_zte_statistics_action_mode
+{
+    BCMOLT_EPON_OAM_ZTE_STATISTICS_ACTION_MODE_ONU_UNI_STOP_STATISTICS                      = 0,            /**< OnuUNIStopStatistics. */
+    BCMOLT_EPON_OAM_ZTE_STATISTICS_ACTION_MODE_ONU_UNI_START_STATISTICS                     = 1             /**< OnuUNIStartStatistics. */
+} bcmolt_epon_oam_zte_statistics_action_mode;
+
+/** Zte Statistics Reset Mode. 
+ */
+typedef enum bcmolt_epon_oam_zte_statistics_reset_mode
+{
+    BCMOLT_EPON_OAM_ZTE_STATISTICS_RESET_MODE_ONU_RESET_STATISTICS_COUNTER                  = 0,            /**< Onu Reset Statistics Counter. */
+    BCMOLT_EPON_OAM_ZTE_STATISTICS_RESET_MODE_KEEP_STATISTICS_COUNTER                       = 1             /**< Keep Statistics Counter. */
+} bcmolt_epon_oam_zte_statistics_reset_mode;
+
+/** Uni Flow Statistics Collect Control Mode. 
+ */
+typedef enum bcmolt_epon_oam_uni_flow_statistics_collect_control_mode
+{
+    BCMOLT_EPON_OAM_UNI_FLOW_STATISTICS_COLLECT_CONTROL_MODE_DISABLE                        = 0,            /**< Disable. */
+    BCMOLT_EPON_OAM_UNI_FLOW_STATISTICS_COLLECT_CONTROL_MODE_ENABLE                         = 1             /**< Enable. */
+} bcmolt_epon_oam_uni_flow_statistics_collect_control_mode;
+
+/** Light Indication Mode. 
+ */
+typedef enum bcmolt_epon_oam_light_indication_mode
+{
+    BCMOLT_EPON_OAM_LIGHT_INDICATION_MODE_NORMAL                                            = 0,            /**< Normal. */
+    BCMOLT_EPON_OAM_LIGHT_INDICATION_MODE_EXCEPTION                                         = 1             /**< Exception. */
+} bcmolt_epon_oam_light_indication_mode;
+
+/** Match Mac Address. 
+ */
+typedef enum bcmolt_epon_oam_match_mac_address_mode
+{
+    BCMOLT_EPON_OAM_MATCH_MAC_ADDRESS_MODE_IGNORE                                           = 0,            /**< Ignore. */
+    BCMOLT_EPON_OAM_MATCH_MAC_ADDRESS_MODE_EXCUTE_MATCH                                     = 1             /**< Excute Match. */
+} bcmolt_epon_oam_match_mac_address_mode;
+
+/** Zte Light Control Action Mode. 
+ */
+typedef enum bcmolt_epon_oam_zte_light_control_action_mode
+{
+    BCMOLT_EPON_OAM_ZTE_LIGHT_CONTROL_ACTION_MODE_OPEN_TRANSFER                             = 0,            /**< Open Transfer. */
+    BCMOLT_EPON_OAM_ZTE_LIGHT_CONTROL_ACTION_MODE_CLOSE_TRANSFER                            = 1,            /**< Close Transfer. */
+    BCMOLT_EPON_OAM_ZTE_LIGHT_CONTROL_ACTION_MODE_CLOSE_OPTICAL_MODEL                       = 2             /**< Close Optical Model. */
+} bcmolt_epon_oam_zte_light_control_action_mode;
+
+/** ONU Excl Ability. 
+ */
+typedef enum bcmolt_epon_oam_onu_excl_ability
+{
+    BCMOLT_EPON_OAM_ONU_EXCL_ABILITY_NOTSUPPORT                                             = 0,            /**< NotSupport. */
+    BCMOLT_EPON_OAM_ONU_EXCL_ABILITY_SUPPORT                                                = 1             /**< Support. */
+} bcmolt_epon_oam_onu_excl_ability;
+
+/** CTC ONU Early Wake Capability. 
+ */
+typedef enum bcmolt_epon_oam_ctc_onu_early_wake_capability
+{
+    BCMOLT_EPON_OAM_CTC_ONU_EARLY_WAKE_CAPABILITY_SUPPORTED                                 = 0,            /**< Supported. */
+    BCMOLT_EPON_OAM_CTC_ONU_EARLY_WAKE_CAPABILITY_NOT_SUPPORTED                             = 1             /**< Not Supported. */
+} bcmolt_epon_oam_ctc_onu_early_wake_capability;
+
+/** CTC Port Disable On Loop Detected State. 
+ */
+typedef enum bcmolt_epon_oam_ctc_port_disable_on_loop_detected_state
+{
+    BCMOLT_EPON_OAM_CTC_PORT_DISABLE_ON_LOOP_DETECTED_STATE_DISABLED                        = 0,            /**< When port loopback is detected, do not disable this port */
+    BCMOLT_EPON_OAM_CTC_PORT_DISABLE_ON_LOOP_DETECTED_STATE_ENABLED                         = 1             /**< When port loopback is detected, disable this port automatically */
+} bcmolt_epon_oam_ctc_port_disable_on_loop_detected_state;
+
+/** CTC Monitoring Status. 
+ */
+typedef enum bcmolt_epon_oam_ctc_monitoring_status
+{
+    BCMOLT_EPON_OAM_CTC_MONITORING_STATUS_DISABLED                                          = 1,            /**< Disable ONU performance monitoring */
+    BCMOLT_EPON_OAM_CTC_MONITORING_STATUS_ENABLED                                           = 2             /**< Enable ONU performance monitoring */
+} bcmolt_epon_oam_ctc_monitoring_status;
+
+/** CTC File Check Opcode. 
+ */
+typedef enum bcmolt_epon_oam_ctc_file_check_opcode
+{
+    BCMOLT_EPON_OAM_CTC_FILE_CHECK_OPCODE_END_DOWNLOAD_REQUEST                              = 6,            /**< End Download Request. */
+    BCMOLT_EPON_OAM_CTC_FILE_CHECK_OPCODE_END_DOWNLOAD_RESPONSE                             = 7             /**< End Download Response. */
+} bcmolt_epon_oam_ctc_file_check_opcode;
+
+/** CTC RPS Code. 
+ */
+typedef enum bcmolt_epon_oam_ctc_rps_code
+{
+    BCMOLT_EPON_OAM_CTC_RPS_CODE_CHECK_SUCCESS                                              = 0,            /**< Check Success. */
+    BCMOLT_EPON_OAM_CTC_RPS_CODE_WRITING                                                    = 1,            /**< Writing. */
+    BCMOLT_EPON_OAM_CTC_RPS_CODE_CHECK_ERROR                                                = 2,            /**< Check Error. */
+    BCMOLT_EPON_OAM_CTC_RPS_CODE_PARAMETER_ERROR                                            = 3,            /**< Parameter Error. */
+    BCMOLT_EPON_OAM_CTC_RPS_CODE_NOT_SUPPORTED                                              = 4             /**< Not Supported. */
+} bcmolt_epon_oam_ctc_rps_code;
+
+/** CTC ONU Auth Code. 
+ */
+typedef enum bcmolt_epon_oam_ctc_onu_auth_code
+{
+    BCMOLT_EPON_OAM_CTC_ONU_AUTH_CODE_AUTH_REQUEST                                          = 1,            /**< Auth Request. */
+    BCMOLT_EPON_OAM_CTC_ONU_AUTH_CODE_AUTH_RESPONSE                                         = 2,            /**< Auth Response. */
+    BCMOLT_EPON_OAM_CTC_ONU_AUTH_CODE_AUTH_SUCCESS                                          = 3,            /**< Auth Success. */
+    BCMOLT_EPON_OAM_CTC_ONU_AUTH_CODE_AUTH_FAILURE                                          = 4             /**< Auth Failure. */
+} bcmolt_epon_oam_ctc_onu_auth_code;
+
+/** Well-known company OUIs. 
+ */
+typedef enum bcmolt_epon_oam_well_known_oui
+{
+    BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DPOE                                                     = 4096,         /**< DPoE OUI */
+    BCMOLT_EPON_OAM_WELL_KNOWN_OUI_CTC                                                      = 1118481UL,    /**< CTC's OUI */
+    BCMOLT_EPON_OAM_WELL_KNOWN_OUI_TEK                                                      = 3510,         /**< Tek's OUI */
+    BCMOLT_EPON_OAM_WELL_KNOWN_OUI_KT                                                       = 11184810UL,   /**< KT's OUI */
+    BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DASAN                                                    = 53451UL,      /**< Dasan's OUI */
+    BCMOLT_EPON_OAM_WELL_KNOWN_OUI_PMC                                                      = 3285,         /**< PMC's OUI */
+    BCMOLT_EPON_OAM_WELL_KNOWN_OUI_BRCM                                                     = 4120,         /**< Broadcom's OUI */
+    BCMOLT_EPON_OAM_WELL_KNOWN_OUI_SIEPON_A                                                 = 5820559UL     /**< SIEPON OUI_A */
+} bcmolt_epon_oam_well_known_oui;
+
+/** CTC classification operators 
+ */
+typedef enum bcmolt_epon_oam_ctc_rule_operator
+{
+    BCMOLT_EPON_OAM_CTC_RULE_OPERATOR_NEVER_MATCH                                           = 0,            /**< Never match */
+    BCMOLT_EPON_OAM_CTC_RULE_OPERATOR_EQUAL                                                 = 1,            /**< LHS == RHS */
+    BCMOLT_EPON_OAM_CTC_RULE_OPERATOR_NOT_EQUAL                                             = 2,            /**< LHS != RHS */
+    BCMOLT_EPON_OAM_CTC_RULE_OPERATOR_LTEQ                                                  = 3,            /**< LHS <= RHS */
+    BCMOLT_EPON_OAM_CTC_RULE_OPERATOR_GTEQ                                                  = 4,            /**< LHS >= RHS */
+    BCMOLT_EPON_OAM_CTC_RULE_OPERATOR_EXIST                                                 = 5,            /**< Match if the field exists */
+    BCMOLT_EPON_OAM_CTC_RULE_OPERATOR_NOT_EXIST                                             = 6,            /**< Match if the field does not exist */
+    BCMOLT_EPON_OAM_CTC_RULE_OPERATOR_ALWAYS_MATCH                                          = 7             /**< Always match */
+} bcmolt_epon_oam_ctc_rule_operator;
+
+/** CTC Software Download Data Type. 
+ */
+typedef enum bcmolt_epon_oam_ctc_software_download_data_type
+{
+    BCMOLT_EPON_OAM_CTC_SOFTWARE_DOWNLOAD_DATA_TYPE_TFTP                                    = 1,            /**< TFTP. */
+    BCMOLT_EPON_OAM_CTC_SOFTWARE_DOWNLOAD_DATA_TYPE_DATA_CHECKING                           = 2,            /**< Data Checking. */
+    BCMOLT_EPON_OAM_CTC_SOFTWARE_DOWNLOAD_DATA_TYPE_SWMIRRORING                             = 3,            /**< S/W Mirroring. */
+    BCMOLT_EPON_OAM_CTC_SOFTWARE_DOWNLOAD_DATA_TYPE_COMMIT_IMAGE                            = 4             /**< Commit Image. */
+} bcmolt_epon_oam_ctc_software_download_data_type;
+
+/** CTC TFTP Op Code. 
+ */
+typedef enum bcmolt_epon_oam_ctc_tftp_op_code
+{
+    BCMOLT_EPON_OAM_CTC_TFTP_OP_CODE_WRITE_REQUEST                                          = 2,            /**< Write Request. */
+    BCMOLT_EPON_OAM_CTC_TFTP_OP_CODE_DATA                                                   = 3,            /**< Data. */
+    BCMOLT_EPON_OAM_CTC_TFTP_OP_CODE_ACK                                                    = 4,            /**< Ack. */
+    BCMOLT_EPON_OAM_CTC_TFTP_OP_CODE_ERROR                                                  = 5             /**< Error. */
+} bcmolt_epon_oam_ctc_tftp_op_code;
+
+/** CTC S/W Mirror Opcode. 
+ */
+typedef enum bcmolt_epon_oam_ctc_swmirror_opcode
+{
+    BCMOLT_EPON_OAM_CTC_SWMIRROR_OPCODE_ACTIVATE_IMAGE_REQUEST                              = 8,            /**< Activate Image Request. */
+    BCMOLT_EPON_OAM_CTC_SWMIRROR_OPCODE_ACTIVATE_IMAGE_RESPONSE                             = 9             /**< Activate Image Response. */
+} bcmolt_epon_oam_ctc_swmirror_opcode;
+
+/** CTC S/W Mirror Activate Image Flag. 
+ */
+typedef enum bcmolt_epon_oam_ctc_swmirror_activate_image_flag
+{
+    BCMOLT_EPON_OAM_CTC_SWMIRROR_ACTIVATE_IMAGE_FLAG_RUN_BACKUP                             = 0             /**< Run Backup. */
+} bcmolt_epon_oam_ctc_swmirror_activate_image_flag;
+
+/** CTC S/W Mirror Ack. 
+ */
+typedef enum bcmolt_epon_oam_ctc_swmirror_ack
+{
+    BCMOLT_EPON_OAM_CTC_SWMIRROR_ACK_SUCCESS                                                = 0,            /**< Success. */
+    BCMOLT_EPON_OAM_CTC_SWMIRROR_ACK_PARAMETER_ERROR                                        = 1,            /**< Parameter Error. */
+    BCMOLT_EPON_OAM_CTC_SWMIRROR_ACK_NOT_SUPPORTED                                          = 2,            /**< Not Supported. */
+    BCMOLT_EPON_OAM_CTC_SWMIRROR_ACK_LOADING_FAILURE                                        = 3             /**< Loading Failure. */
+} bcmolt_epon_oam_ctc_swmirror_ack;
+
+/** KT Optical Power Alarm Status. 
+ */
+typedef enum bcmolt_epon_oam_ktoptical_power_alarm_status
+{
+    BCMOLT_EPON_OAM_KTOPTICAL_POWER_ALARM_STATUS_ALARM                                      = 1,            /**< Alarm is active (line LED is orange) */
+    BCMOLT_EPON_OAM_KTOPTICAL_POWER_ALARM_STATUS_CLEAR                                      = 2             /**< Alarm is clear (line LED is green) */
+} bcmolt_epon_oam_ktoptical_power_alarm_status;
+
+/** KT Leaf Action. 
+ */
+typedef enum bcmolt_epon_oam_ktleaf_action
+{
+    BCMOLT_EPON_OAM_KTLEAF_ACTION_END                                                       = 0,            /**< End. */
+    BCMOLT_EPON_OAM_KTLEAF_ACTION_ONU_COUNTER_CLEAR                                         = 1,            /**< ONU Counter Clear. */
+    BCMOLT_EPON_OAM_KTLEAF_ACTION_RESTORE_ONU                                               = 2,            /**< Restore ONU. */
+    BCMOLT_EPON_OAM_KTLEAF_ACTION_TXPOWER_OFF                                               = 3             /**< TX Power Off. */
+} bcmolt_epon_oam_ktleaf_action;
+
+/** CTC Opcode. 
+ */
+typedef enum bcmolt_epon_oam_ctc_opcode
+{
+    BCMOLT_EPON_OAM_CTC_OPCODE_GET_REQUEST                                                  = 1,            /**< Get Request. */
+    BCMOLT_EPON_OAM_CTC_OPCODE_GET_RESPONSE                                                 = 2,            /**< Get Response. */
+    BCMOLT_EPON_OAM_CTC_OPCODE_SET_REQUEST                                                  = 3,            /**< Set Request. */
+    BCMOLT_EPON_OAM_CTC_OPCODE_SET_RESPONSE                                                 = 4,            /**< Set Response. */
+    BCMOLT_EPON_OAM_CTC_OPCODE_ONU_AUTHENTICATION                                           = 5,            /**< ONU Authentication. */
+    BCMOLT_EPON_OAM_CTC_OPCODE_SOFTWARE_DOWNLOAD                                            = 6,            /**< Software Download. */
+    BCMOLT_EPON_OAM_CTC_OPCODE_CHURNING                                                     = 9,            /**< Churning. */
+    BCMOLT_EPON_OAM_CTC_OPCODE_DBA                                                          = 10,           /**< DBA. */
+    BCMOLT_EPON_OAM_CTC_OPCODE_KTONU_EVENT                                                  = 15,           /**< KT ONU Event. */
+    BCMOLT_EPON_OAM_CTC_OPCODE_EVENT                                                        = 255           /**< Event. */
+} bcmolt_epon_oam_ctc_opcode;
+
+/** KT ONU Event Type. 
+ */
+typedef enum bcmolt_epon_oam_ktonu_event_type
+{
+    BCMOLT_EPON_OAM_KTONU_EVENT_TYPE_END                                                    = 0,            /**< End. */
+    BCMOLT_EPON_OAM_KTONU_EVENT_TYPE_LOOP_DETECT                                            = 1,            /**< Loop Detect. */
+    BCMOLT_EPON_OAM_KTONU_EVENT_TYPE_OPTICAL_POWER_ALARM                                    = 2             /**< Optical Power Alarm. */
+} bcmolt_epon_oam_ktonu_event_type;
+
+/** KT Loop Detect Event. 
+ */
+typedef enum bcmolt_epon_oam_ktloop_detect_event
+{
+    BCMOLT_EPON_OAM_KTLOOP_DETECT_EVENT_DETECTED                                            = 1,            /**< Loop detect detected */
+    BCMOLT_EPON_OAM_KTLOOP_DETECT_EVENT_REPAIRED                                            = 2             /**< Loop detect repaired */
+} bcmolt_epon_oam_ktloop_detect_event;
+
+/** KT Optical Power Alarm Event. 
+ */
+typedef enum bcmolt_epon_oam_ktoptical_power_alarm_event
+{
+    BCMOLT_EPON_OAM_KTOPTICAL_POWER_ALARM_EVENT_RAISED                                      = 1,            /**< Optical power alarm raised */
+    BCMOLT_EPON_OAM_KTOPTICAL_POWER_ALARM_EVENT_RELEASED                                    = 2             /**< Optical power alarm released */
+} bcmolt_epon_oam_ktoptical_power_alarm_event;
+
+/** Dasan Classifier Command. 
+ */
+typedef enum bcmolt_epon_oam_dasan_classifier_command
+{
+    BCMOLT_EPON_OAM_DASAN_CLASSIFIER_COMMAND_ADD_FILTER                                     = 2052,         /**< Add Filter. */
+    BCMOLT_EPON_OAM_DASAN_CLASSIFIER_COMMAND_REMOVE_FILTER                                  = 2053,         /**< Remove Filter. */
+    BCMOLT_EPON_OAM_DASAN_CLASSIFIER_COMMAND_QUEUE_MAP                                      = 2054,         /**< Queue Map. */
+    BCMOLT_EPON_OAM_DASAN_CLASSIFIER_COMMAND_ADD_PRIORITY_FOR_VLAN                          = 2055          /**< Add Priority for VLAN. */
+} bcmolt_epon_oam_dasan_classifier_command;
+
+/** Dasan Direction. 
+ */
+typedef enum bcmolt_epon_oam_dasan_direction
+{
+    BCMOLT_EPON_OAM_DASAN_DIRECTION_UPSTREAM                                                = 0,            /**< Upstream. */
+    BCMOLT_EPON_OAM_DASAN_DIRECTION_DOWNSTREAM                                              = 1             /**< Downstream. */
+} bcmolt_epon_oam_dasan_direction;
+
+/** Dasan Filter Field. 
+ */
+typedef enum bcmolt_epon_oam_dasan_filter_field
+{
+    BCMOLT_EPON_OAM_DASAN_FILTER_FIELD_ETHER_TYPE                                           = 0,            /**< EtherType. */
+    BCMOLT_EPON_OAM_DASAN_FILTER_FIELD_VLAN                                                 = 1,            /**< VLAN. */
+    BCMOLT_EPON_OAM_DASAN_FILTER_FIELD_IPPROTOCOL                                           = 2             /**< IP Protocol. */
+} bcmolt_epon_oam_dasan_filter_field;
+
+/** Dasan Filter Action. 
+ */
+typedef enum bcmolt_epon_oam_dasan_filter_action
+{
+    BCMOLT_EPON_OAM_DASAN_FILTER_ACTION_DO_NOT_PASS                                         = 0,            /**< Do Not Pass. */
+    BCMOLT_EPON_OAM_DASAN_FILTER_ACTION_PASS                                                = 1             /**< Pass. */
+} bcmolt_epon_oam_dasan_filter_action;
+
+/** Dasan Pri Type. 
+ */
+typedef enum bcmolt_epon_oam_dasan_pri_type
+{
+    BCMOLT_EPON_OAM_DASAN_PRI_TYPE_COS                                                      = 0,            /**< CoS. */
+    BCMOLT_EPON_OAM_DASAN_PRI_TYPE_TOS                                                      = 1             /**< ToS. */
+} bcmolt_epon_oam_dasan_pri_type;
+
+/** Dasan Opcode. 
+ */
+typedef enum bcmolt_epon_oam_dasan_opcode
+{
+    BCMOLT_EPON_OAM_DASAN_OPCODE_PORT_CONFIG                                                = 1,            /**< Port Config. */
+    BCMOLT_EPON_OAM_DASAN_OPCODE_SET_VLAN                                                   = 2,            /**< Set VLAN. */
+    BCMOLT_EPON_OAM_DASAN_OPCODE_GET_ONU_CONFIG                                             = 513,          /**< Get ONU Config. */
+    BCMOLT_EPON_OAM_DASAN_OPCODE_SET_STP                                                    = 17,           /**< Set STP. */
+    BCMOLT_EPON_OAM_DASAN_OPCODE_SET_TXPOWER_OFF                                            = 18,           /**< Set TX Power Off. */
+    BCMOLT_EPON_OAM_DASAN_OPCODE_SET_LOOP_DETECT                                            = 19,           /**< Set Loop Detect. */
+    BCMOLT_EPON_OAM_DASAN_OPCODE_SET_LOOP_DETECT_UNBLOCK                                    = 20,           /**< Set Loop Detect Unblock. */
+    BCMOLT_EPON_OAM_DASAN_OPCODE_CLASSIFIER                                                 = 2048,         /**< Classifier. */
+    BCMOLT_EPON_OAM_DASAN_OPCODE_ONU_VERSION                                                = 2304,         /**< ONU Version. */
+    BCMOLT_EPON_OAM_DASAN_OPCODE_ONU_FLASH_FIRMWARE_VERSION                                 = 2311,         /**< ONU Flash Firmware Version. */
+    BCMOLT_EPON_OAM_DASAN_OPCODE_ONU_ACTIVE_IMAGE_TIME                                      = 2314,         /**< ONU Active Image Time. */
+    BCMOLT_EPON_OAM_DASAN_OPCODE_ONU_STATISTIC                                              = 2305,         /**< ONU Statistic. */
+    BCMOLT_EPON_OAM_DASAN_OPCODE_ONU_STATISTIC_CLEAR                                        = 2306,         /**< ONU Statistic Clear. */
+    BCMOLT_EPON_OAM_DASAN_OPCODE_ONU_STATISTIC_GET                                          = 2319,         /**< ONU Statistic Get. */
+    BCMOLT_EPON_OAM_DASAN_OPCODE_ONU_IGMP_SET                                               = 2307,         /**< ONU IGMP Set. */
+    BCMOLT_EPON_OAM_DASAN_OPCODE_ONU_PORT_IGMP_FILTER                                       = 2308,         /**< ONU Port Igmp Filter. */
+    BCMOLT_EPON_OAM_DASAN_OPCODE_ONU_SHAPING                                                = 2317          /**< ONU Shaping. */
+} bcmolt_epon_oam_dasan_opcode;
+
+/** Dasan Stats Seq Type. 
+ */
+typedef enum bcmolt_epon_oam_dasan_stats_seq_type
+{
+    BCMOLT_EPON_OAM_DASAN_STATS_SEQ_TYPE_PORT0AND1                                          = 1,            /**< Port 0 and 1. */
+    BCMOLT_EPON_OAM_DASAN_STATS_SEQ_TYPE_PORT2AND3                                          = 2,            /**< Port 2 and 3. */
+    BCMOLT_EPON_OAM_DASAN_STATS_SEQ_TYPE_ERRORS                                             = 3             /**< Errors. */
+} bcmolt_epon_oam_dasan_stats_seq_type;
+
+/** Dasan Stat ID. 
+ */
+typedef enum bcmolt_epon_oam_dasan_stat_id
+{
+    BCMOLT_EPON_OAM_DASAN_STAT_ID_MULTICAST_FRAMES_TXOK                                     = 0,            /**< Multicast Frames TX OK. */
+    BCMOLT_EPON_OAM_DASAN_STAT_ID_BROADCAST_FRAMES_TXOK                                     = 1,            /**< Broadcast Frames TX OK. */
+    BCMOLT_EPON_OAM_DASAN_STAT_ID_MULTICAST_FRAMES_RXOK                                     = 2,            /**< Multicast Frames RX OK. */
+    BCMOLT_EPON_OAM_DASAN_STAT_ID_BROADCAST_FRAMES_RXOK                                     = 3,            /**< Broadcast Frames RX OK. */
+    BCMOLT_EPON_OAM_DASAN_STAT_ID_SYSTEM_FRAMES_RXOK                                        = 4,            /**< System Frames RX OK. */
+    BCMOLT_EPON_OAM_DASAN_STAT_ID_SYSTEM_FRAMES_RXERROR                                     = 5,            /**< System Frames RX Error. */
+    BCMOLT_EPON_OAM_DASAN_STAT_ID_SYSTEM_OCTETS_RXERROR                                     = 6,            /**< System Octets RX Error. */
+    BCMOLT_EPON_OAM_DASAN_STAT_ID_SYSTEM_OCTETS_RXOK                                        = 7,            /**< System Octets RX OK. */
+    BCMOLT_EPON_OAM_DASAN_STAT_ID_SYSTEM_FRAME_TOO_LONG_ERRORS_RX                           = 8,            /**< System Frame Too Long Errors RX. */
+    BCMOLT_EPON_OAM_DASAN_STAT_ID_PON_FCS_ERRORS                                            = 9,            /**< PON FCS Errors. */
+    BCMOLT_EPON_OAM_DASAN_STAT_ID_PON_ERROR_OCTETS_RX                                       = 10            /**< PON Error Octets RX. */
+} bcmolt_epon_oam_dasan_stat_id;
+
+/** Standard direction enum 
+ */
+typedef enum bcmolt_epon_oam_direction
+{
+    BCMOLT_EPON_OAM_DIRECTION_UPSTREAM                                                      = 0,            /**< Upstream. */
+    BCMOLT_EPON_OAM_DIRECTION_DOWNSTREAM                                                    = 1             /**< Downstream. */
+} bcmolt_epon_oam_direction;
+
+/** Domain Option. 
+ */
+typedef enum bcmolt_epon_oam_domain_option
+{
+    BCMOLT_EPON_OAM_DOMAIN_OPTION_DEFAULT_SNOOPING                                          = 0,            /**< Default Snooping. */
+    BCMOLT_EPON_OAM_DOMAIN_OPTION_DISABLE_DN_AUTO_SNOOP                                     = 1,            /**< Disable Dn Auto Snoop. */
+    BCMOLT_EPON_OAM_DOMAIN_OPTION_DISABLE_UP_AUTO_SNOOP                                     = 2,            /**< Disable Up Auto Snoop. */
+    BCMOLT_EPON_OAM_DOMAIN_OPTION_UNBLOCK_MLD_IF_LIMIT_EXCEEDED                             = 4,            /**< Unblock Mld If Limit Exceeded. */
+    BCMOLT_EPON_OAM_DOMAIN_OPTION_PROXY_JOIN                                                = 8,            /**< Proxy Join. */
+    BCMOLT_EPON_OAM_DOMAIN_OPTION_PROXY_LEAVE                                               = 16            /**< Proxy Leave. */
+} bcmolt_epon_oam_domain_option;
+
+/** DPoE Leaf Action. 
+ */
+typedef enum bcmolt_epon_oam_dpoe_leaf_action
+{
+    BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_RESET_ONU                                              = 1,            /**< This attribute resets the ONU, as if from power on.  */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_CLEAR_DYN_LEARN_TABLE                                  = 257,          /**< Clear Dyn Learn Table. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_ADD_DYN_MAC_ADDR                                       = 258,          /**< Add Dyn MAC Addr. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_DEL_DYN_MAC_ADDR                                       = 259,          /**< Del Dyn MAC Addr. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_CLEAR_STATIC_LEARN_TABLE                               = 260,          /**< Clear Static Learn Table. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_ADD_STATIC_MAC_ADDR                                    = 261,          /**< Add Static MAC Addr. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_DEL_STATIC_MAC_ADDR                                    = 262,          /**< Del Static MAC Addr. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_CONFIGURE_MCAST_LLID                                   = 263,          /**< Configure Mcast LLID. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_CLEAR_STATS                                            = 513,          /**< Clear Stats. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_RETRIEVE_CURRENT_ALARM_SUMMARY                         = 769,          /**< Retrieve Current Alarm Summary. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_CLEAR_INGRESS_RULES                                    = 1281,         /**< Clear Ingress Rules. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_ADD_INGRESS_RULES                                      = 1282,         /**< Add Ingress Rules. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_DEL_INGRESS_RULES                                      = 1283,         /**< Del Ingress Rules. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_ENABLE_USER_TRAFFIC                                    = 1537,         /**< Enable User Traffic. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_DISABLE_USER_TRAFFIC                                   = 1538,         /**< Disable User Traffic. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_LOOPBACK_ENABLE                                        = 1539,         /**< Loopback Enable. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_LOOPBACK_DISABLE                                       = 1540,         /**< Loopback Disable. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_LASER_TX_POWER_OFF                                     = 1541          /**< Laser Tx Power Off. */
+} bcmolt_epon_oam_dpoe_leaf_action;
+
+/** DPoE Loopback Location. 
+ */
+typedef enum bcmolt_epon_oam_dpoe_loopback_location
+{
+    BCMOLT_EPON_OAM_DPOE_LOOPBACK_LOCATION_PHY                                              = 0,            /**< PHY. */
+    BCMOLT_EPON_OAM_DPOE_LOOPBACK_LOCATION_MAC                                              = 1,            /**< MAC. */
+    BCMOLT_EPON_OAM_DPOE_LOOPBACK_LOCATION_LINK                                             = 2             /**< Link. */
+} bcmolt_epon_oam_dpoe_loopback_location;
+
+/** DPoE Llid Action. 
+ */
+typedef enum bcmolt_epon_oam_dpoe_llid_action
+{
+    BCMOLT_EPON_OAM_DPOE_LLID_ACTION_ADD_LLID                                               = 0,            /**< Add Llid. */
+    BCMOLT_EPON_OAM_DPOE_LLID_ACTION_DELETE_LLID                                            = 1,            /**< Delete Llid. */
+    BCMOLT_EPON_OAM_DPOE_LLID_ACTION_DELETE_ALL                                             = 2             /**< Delete All. */
+} bcmolt_epon_oam_dpoe_llid_action;
+
+/** DPoE Alarm Code. 
+ */
+typedef enum bcmolt_epon_oam_dpoe_alarm_code
+{
+    BCMOLT_EPON_OAM_DPOE_ALARM_CODE_LOS                                                     = 17,           /**< LOS. */
+    BCMOLT_EPON_OAM_DPOE_ALARM_CODE_KEYEXCHANGE_FAILURE                                     = 18,           /**< KeyExchange Failure. */
+    BCMOLT_EPON_OAM_DPOE_ALARM_CODE_PORT_DISABLED                                           = 33,           /**< Port Disabled. */
+    BCMOLT_EPON_OAM_DPOE_ALARM_CODE_POWER_FAILURE                                           = 65,           /**< Power Failure. */
+    BCMOLT_EPON_OAM_DPOE_ALARM_CODE_STATISTICS_ALARM                                        = 129,          /**< Statistics Alarm. */
+    BCMOLT_EPON_OAM_DPOE_ALARM_CODE_ONU_BUSY                                                = 130,          /**< ONU Busy. */
+    BCMOLT_EPON_OAM_DPOE_ALARM_CODE_MAC_TABLE_OVERFLOW                                      = 131           /**< Mac Table Overflow. */
+} bcmolt_epon_oam_dpoe_alarm_code;
+
+/** DPoE Leaf Attribute. 
+ */
+typedef enum bcmolt_epon_oam_dpoe_leaf_attribute
+{
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_SEQUENCE_NUMBER                                     = 1,            /**< Sequence Number. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ONU_ID                                              = 2,            /**< ONU ID. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_FIRMWARE_INFO                                       = 3,            /**< Firmware Info. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_CHIP_INFO                                           = 4,            /**< Chip Info. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DATE_OF_MANUFACTURE                                 = 5,            /**< Date Of Manufacture. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_MANUFACTURER_INFO                                   = 6,            /**< Manufacturer Info. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_MAX_LOGICAL_LINKS                                   = 7,            /**< Max Logical Links. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_NUM_EPON_PORTS                                      = 8,            /**< Num EPON Ports. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_NUM_UNI_PORTS                                       = 9,            /**< Num UNI Ports. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_PACKET_BUFFER                                       = 10,           /**< Packet Buffer. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_REPORT_THRESHOLDS                                   = 11,           /**< Report Thresholds. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_LINK_STATE                                          = 12,           /**< Link State. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_OAM_RATE                                            = 13,           /**< OAM Rate. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_MFR_NAME                                            = 14,           /**< Mfr Name. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_FWARE_MFG_TIME_VAR_CTRL                             = 15,           /**< Fware Mfg Time Var Ctrl. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DONU_PORT_TYPE                                      = 16,           /**< D-ONU Port Type. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_VENDOR_NAME                                         = 17,           /**< Vendor Name. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_MODEL_NUMBER                                        = 18,           /**< Model Number. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_HW_VERSION                                          = 19,           /**< Hw Version. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_LINE_RATE_MODE                                      = 20,           /**< Line Rate Mode. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DYN_LEARN_TABLE_SIZE                                = 257,          /**< Dyn Learn Table Size. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DYN_LEARN_AGE_LIMIT                                 = 258,          /**< Dyn Learn Age Limit. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DYN_MAC_TABLE                                       = 259,          /**< This attribute represents the dynamically learned MAC address rules of one Ethernet port. MAC address are repeated within a single attribute until that attribute is full (21 addresses = 126 bytes). If necessary, such attributes are repeated as an attribute list until the entire table has been reported. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_STATIC_MAC_TABLE                                    = 260,          /**< This attribute represents the statically provisioned MAC address table. The data structure is the same as the Get Dynamic MAC Table attribute above. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_PORT_CAPABILITY                                     = 261,          /**< Port Capability. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DYN_LEARN_MODE                                      = 262,          /**< Dyn Learn Mode. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_MIN_MAC_LIMIT                                       = 263,          /**< Min MAC Limit. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_MAX_MAC_ALLOWED                                     = 264,          /**< Max MAC Allowed. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_AGG_MAC_LIMIT                                       = 265,          /**< Agg MAC Limit. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_LEN_ERR_DISCARD                                     = 266,          /**< Len Err Discard. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_FLOOD_UNKNOWN                                       = 267,          /**< Flood Unknown. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_LOCAL_SWITCHING                                     = 268,          /**< Local Switching. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_QUEUE_CONFIG                                        = 269,          /**< Queue Config. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_FIRMWARE_FILENAME                                   = 270,          /**< Firmware Filename. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_UNI_MAC_TABLE_FULL_BEHAVIOR                         = 271,          /**< Uni Mac Table Full Behavior. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ONU_MCAST_LLID                                      = 272,          /**< Onu Mcast LLID. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_UNI_MAC_LEARNED                                     = 273,          /**< Uni Mac Learned. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ONU_MAX_FRAME_SIZE_CAPABILITY                       = 274,          /**< Onu Max Frame Size Capability. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_UNI_MAX_FRAME_SIZE_LIMIT                            = 275,          /**< Uni Max Frame Size Limit. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_UNICAST_FRAMES                                   = 513,          /**< Rx Unicast Frames. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_UNICAST_FRAMES                                   = 514,          /**< Tx Unicast Frames. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAME_TOO_SHORT                                  = 515,          /**< Rx Frame Too Short. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAME64                                          = 516,          /**< Rx Frame 64. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAME65127                                       = 517,          /**< Rx Frame 65_127. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAME128255                                      = 518,          /**< Rx Frame 128_255. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAME256511                                      = 519,          /**< Rx Frame 256_511. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAME5121023                                     = 520,          /**< Rx Frame 512_1023. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAME10241518                                    = 521,          /**< Rx Frame 1024_1518. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAME1519PLUS                                    = 522,          /**< Rx Frame 1519 Plus. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAME64                                          = 523,          /**< Tx Frame 64. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAME65127                                       = 524,          /**< Tx Frame 65_127. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAME128255                                      = 525,          /**< Tx Frame 128_255. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAME256511                                      = 526,          /**< Tx Frame 256_511. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAME5121023                                     = 527,          /**< Tx Frame 512_1023. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAME10241518                                    = 528,          /**< Tx Frame 1024_1518. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAME1519PLUS                                    = 529,          /**< Tx Frame 1519 Plus. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_QUEUE_DELAY_THRESH                                  = 530,          /**< Queue Delay Thresh. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_QUEUE_DELAY                                         = 531,          /**< Queue Delay. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_FRAMES_DROPPED                                      = 532,          /**< Frames Dropped. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_BYTES_DROPPED                                       = 533,          /**< Bytes Dropped. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_BYTES_DELAYED                                       = 534,          /**< Bytes Delayed. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_BYTES_UNUSED                                     = 535,          /**< Tx Bytes Unused. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_OPT_MON_TEMPERATURE                                 = 541,          /**< Opt Mon Temperature. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_OPT_MON_VCC                                         = 542,          /**< Opt Mon Vcc. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_OPT_MON_TX_BIAS                                     = 543,          /**< Opt Mon Tx Bias. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_OPT_MON_TX_POWER                                    = 544,          /**< Opt Mon Tx Power. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_OPT_MON_RX_POWER                                    = 545,          /**< Opt Mon Rx Power. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAMES_YELLOW                                    = 546,          /**< Rx Frames Yellow. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAMES_YELLOW                                    = 547,          /**< Tx Frames Yellow. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_BYTES_GREEN                                      = 548,          /**< Tx Bytes Green. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_BYTES_YELLOW                                     = 549,          /**< Rx Bytes Yellow. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_BYTES_GREEN                                      = 550,          /**< Rx Bytes Green. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_BYTES_YELLOW                                     = 551,          /**< Tx Bytes Yellow. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAMES_UNICAST                                   = 552,          /**< Tx Frames Unicast. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAMES_MULTICAST                                 = 553,          /**< Tx Frames Multicast. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_FRAMES_BROADCAST                                 = 554,          /**< Tx Frames Broadcast. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAMES_UNICAST                                   = 555,          /**< Rx Frames Unicast. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAMES_MULTICAST                                 = 556,          /**< Rx Frames Multicast. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_FRAME_BROADCAST                                  = 557,          /**< Rx Frame Broadcast. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_NUMBER_OF_PROGRAMMABLE_COUNTERS                     = 558,          /**< Number Of Programmable Counters. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_L2CP_FRAMES_RX                                      = 559,          /**< L2CP Frames Rx. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_L2CP_OCTETS_RX                                      = 560,          /**< L2CP Octets Rx. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_L2CP_FRAMES_TX                                      = 561,          /**< L2CP Frames Tx. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_L2CP_OCTETS_TX                                      = 562,          /**< L2CP Octets Tx. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_L2CP_FRAMES_DISCARDED                               = 563,          /**< L2CP Frames Discarded. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_L2CP_OCTETS_DISCARDED                               = 564,          /**< L2CP Octets Discarded. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TX_L2ERRORS                                         = 565,          /**< Tx L2 Errors. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RX_L2ERRORS                                         = 566,          /**< Rx L2 Errors. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_PORT_STAT_THRESH                                    = 769,          /**< Port Stat Thresh. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_LINK_STAT_THRESH                                    = 770,          /**< Link Stat Thresh. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_SUSPEND_RESUME_ALARM_REPORTING                      = 771,          /**< Suspend / Resume Alarm Reporting. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_KEY_EXPIRY_TIME                                     = 1025,         /**< Key Expiry Time. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ENCRYPT_MODE                                        = 1026,         /**< Encrypt Mode. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_PORT_INGRESS_RULE                                   = 1281,         /**< Port Ingress Rule. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_LUE_FIELD                                           = 1282,         /**< LUE Field. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ALT_CVLAN_ETHERTYPE                                 = 1283,         /**< Alt C VLAN Ethertype. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ALT_SVLAN_ETHERTYPE                                 = 1284,         /**< Alt S VLAN Ethertype. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_IPMC_FORWARDING_RULE_CONFIGURATION                  = 1285,         /**< IPMC Forwarding Rule Configuration. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ITPID                                               = 1286,         /**< I-TPID. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_BTPID                                               = 1287,         /**< B-TPID. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_BC_RATE_LIMIT                                       = 1537,         /**< Bc Rate Limit. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_EGRESS_SHAPING                                      = 1538,         /**< Egress Shaping. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_INGRESS_POLICING                                    = 1539,         /**< Ingress Policing. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_QUEUE_CIR                                           = 1540,         /**< Queue CIR. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_FEC_MODE                                            = 1541,         /**< FEC Mode. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_QUEUE_EIR                                           = 1542,         /**< Queue EIR. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_QUEUE_COLOR_MARKING                                 = 1543,         /**< Queue Color Marking. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_QUEUE_RATE_LIMITER_CAPABILITIES                     = 1544,         /**< Queue Rate Limiter Capabilities. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_COUPLING_FLAG                                       = 1545,         /**< Coupling Flag. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_CLOCK_TRANSPORT_CAPABILITIES                        = 1793,         /**< Clock Transport Capabilities. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ENABLE_CLOCK_TRANSPORT                              = 1794,         /**< Enable Clock Transport. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_TIME_TRANSFER                                       = 1795,         /**< Time Transfer. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_PROPAGATION_PARAMETERS                              = 1796,         /**< Propagation Parameters. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_RTT                                                 = 1797,         /**< RTT. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DAC_CONFIGURATION                                   = 2048,         /**< DAC Configuration. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DAC_CONFIGURATION_FLAGS                             = 2049,         /**< DAC Configuration Flags. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DAC_PASSWORD_CHALLENGE                              = 2050,         /**< DAC Password Challenge. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_DAC_CONFIGURATION_ENABLE_DISABLE                    = 2051,         /**< DAC Configuration Enable / Disable. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ENERGY_EFFICIENT_ETHERNET_STATUS                    = 2080,         /**< Energy Efficient Ethernet Status. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_PWR_OVER_ETHERNET_STATUS                            = 2081,         /**< Power Over Ethernet Status. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_MEDIA_TYPE                                          = 2082,         /**< Media Type. */
+    BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ONU_PWR_SAVING_CAP                                  = 65535U        /**< Onu Power Saving Capabilities. */
+} bcmolt_epon_oam_dpoe_leaf_attribute;
+
+/** DPoE Link State. 
+ */
+typedef enum bcmolt_epon_oam_dpoe_link_state
+{
+    BCMOLT_EPON_OAM_DPOE_LINK_STATE_DISABLE                                                 = 0,            /**< Disable. */
+    BCMOLT_EPON_OAM_DPOE_LINK_STATE_ENABLE                                                  = 1             /**< Enable. */
+} bcmolt_epon_oam_dpoe_link_state;
+
+/** DPoE Learning Mode. 
+ */
+typedef enum bcmolt_epon_oam_dpoe_learning_mode
+{
+    BCMOLT_EPON_OAM_DPOE_LEARNING_MODE_DMODE                                                = 0,            /**< 802.1d Mode. */
+    BCMOLT_EPON_OAM_DPOE_LEARNING_MODE_MAC_ACCESS_CONTROL_MODE                              = 1             /**< MAC Access Control Mode. */
+} bcmolt_epon_oam_dpoe_learning_mode;
+
+/** DPoE Branch. 
+ */
+typedef enum bcmolt_epon_oam_dpoe_branch
+{
+    BCMOLT_EPON_OAM_DPOE_BRANCH_END                                                         = 0,            /**< End. */
+    BCMOLT_EPON_OAM_DPOE_BRANCH_STANDARD_ATTRIBUTE                                          = 7,            /**< Standard Attribute. */
+    BCMOLT_EPON_OAM_DPOE_BRANCH_STANDARD_ACTION                                             = 9,            /**< Standard Action. */
+    BCMOLT_EPON_OAM_DPOE_BRANCH_OBJECT                                                      = 214,          /**< Object. */
+    BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ATTRIBUTE                                          = 215,          /**< Extended Attribute. */
+    BCMOLT_EPON_OAM_DPOE_BRANCH_PROGRAMMABLE_COUNTER                                        = 216,          /**< Programmable Counter. */
+    BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ACTION                                             = 217           /**< Extended Action. */
+} bcmolt_epon_oam_dpoe_branch;
+
+/** DPoE Object Type. 
+ */
+typedef enum bcmolt_epon_oam_dpoe_object_type
+{
+    BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_ONU                                                    = 0,            /**< ONU. */
+    BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_NETWORK_PON                                            = 1,            /**< Network PON. */
+    BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_LINK                                                   = 2,            /**< Link. */
+    BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_USER_PORT                                              = 3,            /**< User Port. */
+    BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_QUEUE                                                  = 4,            /**< Queue. */
+    BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_MEP                                                    = 5,            /**< MEP. */
+    BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_MCAST_LINK                                             = 6,            /**< Multicast Logical Link. */
+    BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_BRIDGE                                                 = 130,          /**< Bridge. */
+    BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_BRIDGE_PORT                                            = 131           /**< Bridge Port. */
+} bcmolt_epon_oam_dpoe_object_type;
+
+/** DPoE Encryption Mode. 
+ */
+typedef enum bcmolt_epon_oam_dpoe_encryption_mode
+{
+    BCMOLT_EPON_OAM_DPOE_ENCRYPTION_MODE_NONE                                               = 0,            /**< None. */
+    BCMOLT_EPON_OAM_DPOE_ENCRYPTION_MODE_ONE_DOWN                                           = 1,            /**< 1Down. */
+    BCMOLT_EPON_OAM_DPOE_ENCRYPTION_MODE_TEN_DOWN                                           = 2,            /**< 10Down. */
+    BCMOLT_EPON_OAM_DPOE_ENCRYPTION_MODE_TEN_BI                                             = 3             /**< 10Bi. */
+} bcmolt_epon_oam_dpoe_encryption_mode;
+
+/** Rule Type. 
+ */
+typedef enum bcmolt_epon_oam_rule_type
+{
+    BCMOLT_EPON_OAM_RULE_TYPE_TERMINATOR                                                    = 0,            /**< Terminator. */
+    BCMOLT_EPON_OAM_RULE_TYPE_HEADER                                                        = 1,            /**< Header. */
+    BCMOLT_EPON_OAM_RULE_TYPE_CLAUSE                                                        = 2,            /**< Clause. */
+    BCMOLT_EPON_OAM_RULE_TYPE_RESULT                                                        = 3,            /**< Result. */
+    BCMOLT_EPON_OAM_RULE_TYPE_ENTRY                                                         = 4             /**< Entry. */
+} bcmolt_epon_oam_rule_type;
+
+/** DPoE OAM field codes 
+ */
+typedef enum bcmolt_epon_oam_dpoe_field_code
+{
+    BCMOLT_EPON_OAM_DPOE_FIELD_CODE_LOGICAL_LINK_INDEX                                      = 0,            /**< Logical Link Index. */
+    BCMOLT_EPON_OAM_DPOE_FIELD_CODE_L2DA                                                    = 1,            /**< L2 DA. */
+    BCMOLT_EPON_OAM_DPOE_FIELD_CODE_L2SA                                                    = 2,            /**< L2 SA. */
+    BCMOLT_EPON_OAM_DPOE_FIELD_CODE_L2TYPE                                                  = 3,            /**< L2 Type. */
+    BCMOLT_EPON_OAM_DPOE_FIELD_CODE_BDA                                                     = 4,            /**< B-DA. */
+    BCMOLT_EPON_OAM_DPOE_FIELD_CODE_BSA                                                     = 5,            /**< B-SA. */
+    BCMOLT_EPON_OAM_DPOE_FIELD_CODE_ITAG                                                    = 6,            /**< I-Tag. */
+    BCMOLT_EPON_OAM_DPOE_FIELD_CODE_SVLAN                                                   = 7,            /**< S-VLAN. */
+    BCMOLT_EPON_OAM_DPOE_FIELD_CODE_CVLAN                                                   = 8,            /**< C-VLAN. */
+    BCMOLT_EPON_OAM_DPOE_FIELD_CODE_MPLS                                                    = 9,            /**< MPLS. */
+    BCMOLT_EPON_OAM_DPOE_FIELD_CODE_IPV4TOS                                                 = 10,           /**< IPv4 TOS. */
+    BCMOLT_EPON_OAM_DPOE_FIELD_CODE_IPV4TTL                                                 = 11,           /**< IPv4 TTL. */
+    BCMOLT_EPON_OAM_DPOE_FIELD_CODE_IP_PROTOCOL_TYPE                                        = 12,           /**< IP Protocol Type. */
+    BCMOLT_EPON_OAM_DPOE_FIELD_CODE_IPV4SA                                                  = 13,           /**< IPv4 SA. */
+    BCMOLT_EPON_OAM_DPOE_FIELD_CODE_IPV6SA                                                  = 14,           /**< IPv6 SA. */
+    BCMOLT_EPON_OAM_DPOE_FIELD_CODE_IPV4DA                                                  = 15,           /**< IPv4 DA. */
+    BCMOLT_EPON_OAM_DPOE_FIELD_CODE_IPV6DA                                                  = 16,           /**< IPv6 DA. */
+    BCMOLT_EPON_OAM_DPOE_FIELD_CODE_IPV6NEXT_HEADER                                         = 17,           /**< IPv 6 Next Header. */
+    BCMOLT_EPON_OAM_DPOE_FIELD_CODE_IPV6FLOW_LABEL                                          = 18,           /**< IPv 6 Flow Label. */
+    BCMOLT_EPON_OAM_DPOE_FIELD_CODE_TCP_UDP_SOURCE_PORT                                     = 19,           /**< TCP/UDP Source Port. */
+    BCMOLT_EPON_OAM_DPOE_FIELD_CODE_TCP_UDP_DEST_PORT                                       = 20,           /**< TCP/UDP Dest Port. */
+    BCMOLT_EPON_OAM_DPOE_FIELD_CODE_BTAG                                                    = 21,           /**< B- Tag. */
+    BCMOLT_EPON_OAM_DPOE_FIELD_CODE_CUSTOM0                                                 = 24,           /**< Custom 0. */
+    BCMOLT_EPON_OAM_DPOE_FIELD_CODE_CUSTOM1                                                 = 25,           /**< Custom 1. */
+    BCMOLT_EPON_OAM_DPOE_FIELD_CODE_CUSTOM2                                                 = 26,           /**< Custom 2. */
+    BCMOLT_EPON_OAM_DPOE_FIELD_CODE_CUSTOM3                                                 = 27,           /**< Custom 3. */
+    BCMOLT_EPON_OAM_DPOE_FIELD_CODE_CUSTOM4                                                 = 28,           /**< Custom 4. */
+    BCMOLT_EPON_OAM_DPOE_FIELD_CODE_CUSTOM5                                                 = 29,           /**< Custom 5. */
+    BCMOLT_EPON_OAM_DPOE_FIELD_CODE_CUSTOM6                                                 = 30,           /**< Custom 6. */
+    BCMOLT_EPON_OAM_DPOE_FIELD_CODE_CUSTOM7                                                 = 31,           /**< Custom 7. */
+    BCMOLT_EPON_OAM_DPOE_FIELD_CODE_RESERVED                                                = 32,           /**< Reserved. */
+    BCMOLT_EPON_OAM_DPOE_FIELD_CODE_LLID_VALUE                                              = 33            /**< LLID Value. */
+} bcmolt_epon_oam_dpoe_field_code;
+
+/** Rule Operator. 
+ */
+typedef enum bcmolt_epon_oam_rule_operator
+{
+    BCMOLT_EPON_OAM_RULE_OPERATOR_NEVER_MATCH                                               = 0,            /**< Never Match. */
+    BCMOLT_EPON_OAM_RULE_OPERATOR_EQUAL_TO                                                  = 1,            /**< Equal To. */
+    BCMOLT_EPON_OAM_RULE_OPERATOR_NOT_EQUAL_TO                                              = 2,            /**< Not Equal To. */
+    BCMOLT_EPON_OAM_RULE_OPERATOR_LESS_THAN_OR_EQUAL_TO                                     = 3,            /**< Less Than Or Equal To. */
+    BCMOLT_EPON_OAM_RULE_OPERATOR_GREATER_THAN_OR_EQUAL_TO                                  = 4,            /**< Greater Than Or Equal To. */
+    BCMOLT_EPON_OAM_RULE_OPERATOR_EXISTS                                                    = 5,            /**< Exists. */
+    BCMOLT_EPON_OAM_RULE_OPERATOR_NOT_EXISTS                                                = 6,            /**< Not Exists. */
+    BCMOLT_EPON_OAM_RULE_OPERATOR_ALWAYS_MATCH                                              = 7             /**< Always Match. */
+} bcmolt_epon_oam_rule_operator;
+
+/** DPoE OAM rule result 
+ */
+typedef enum bcmolt_epon_oam_dpoe_result
+{
+    BCMOLT_EPON_OAM_DPOE_RESULT_NOP                                                         = 0,            /**< NOP. */
+    BCMOLT_EPON_OAM_DPOE_RESULT_DISCARD                                                     = 1,            /**< Discard. */
+    BCMOLT_EPON_OAM_DPOE_RESULT_FORWARD                                                     = 2,            /**< Forward. */
+    BCMOLT_EPON_OAM_DPOE_RESULT_QUEUE                                                       = 3,            /**< Queue. */
+    BCMOLT_EPON_OAM_DPOE_RESULT_SET                                                         = 4,            /**< Set. */
+    BCMOLT_EPON_OAM_DPOE_RESULT_COPY                                                        = 5,            /**< Copy. */
+    BCMOLT_EPON_OAM_DPOE_RESULT_DELETE                                                      = 6,            /**< Delete. */
+    BCMOLT_EPON_OAM_DPOE_RESULT_INSERT                                                      = 7,            /**< Insert. */
+    BCMOLT_EPON_OAM_DPOE_RESULT_REPLACE                                                     = 8,            /**< Replace. */
+    BCMOLT_EPON_OAM_DPOE_RESULT_CLEAR_DELETE                                                = 9,            /**< Clear Delete. */
+    BCMOLT_EPON_OAM_DPOE_RESULT_CLEAR_INSERT                                                = 10            /**< Clear Insert. */
+} bcmolt_epon_oam_dpoe_result;
+
+/** DPoE Layer Select. 
+ */
+typedef enum bcmolt_epon_oam_dpoe_layer_select
+{
+    BCMOLT_EPON_OAM_DPOE_LAYER_SELECT_PREAMBLE_L2                                           = 0,            /**< Preamble/L2. */
+    BCMOLT_EPON_OAM_DPOE_LAYER_SELECT_PREAMBLE8021AH                                        = 1,            /**< Preamble/802.1ah. */
+    BCMOLT_EPON_OAM_DPOE_LAYER_SELECT_ETHERTYPE                                             = 2,            /**< EtherType. */
+    BCMOLT_EPON_OAM_DPOE_LAYER_SELECT_SVLAN_TAGS                                            = 3,            /**< S-VLAN Tags. */
+    BCMOLT_EPON_OAM_DPOE_LAYER_SELECT_CVLAN_TAGS                                            = 4,            /**< C-VLAN Tags. */
+    BCMOLT_EPON_OAM_DPOE_LAYER_SELECT_MPLS_TAGS                                             = 5,            /**< MPLS Tags. */
+    BCMOLT_EPON_OAM_DPOE_LAYER_SELECT_IPV4                                                  = 6,            /**< IPv4. */
+    BCMOLT_EPON_OAM_DPOE_LAYER_SELECT_IPV6                                                  = 7,            /**< IPv6. */
+    BCMOLT_EPON_OAM_DPOE_LAYER_SELECT_GENERIC_L3                                            = 8,            /**< Generic L3. */
+    BCMOLT_EPON_OAM_DPOE_LAYER_SELECT_TCP_UDP                                               = 9,            /**< TCP/UDP. */
+    BCMOLT_EPON_OAM_DPOE_LAYER_SELECT_GENERIC_L4                                            = 10            /**< Generic L4. */
+} bcmolt_epon_oam_dpoe_layer_select;
+
+/** Traffic Bitmap. 
+ */
+typedef enum bcmolt_epon_oam_traffic_bitmap
+{
+    BCMOLT_EPON_OAM_TRAFFIC_BITMAP_NONE                                                     = 0,
+    BCMOLT_EPON_OAM_TRAFFIC_BITMAP_BROADCAST                                                = 0x0001,       /**< Broadcast. */
+    BCMOLT_EPON_OAM_TRAFFIC_BITMAP_MULTICAST                                                = 0x0002,       /**< Multicast. */
+    BCMOLT_EPON_OAM_TRAFFIC_BITMAP_DRESERVED_GROUP                                          = 0x0004,       /**< 802.1d Reserved Group. */
+    BCMOLT_EPON_OAM_TRAFFIC_BITMAP_UNICAST                                                  = 0x0008,       /**< Unicast. */
+    BCMOLT_EPON_OAM_TRAFFIC_BITMAP_FLOODED_UNICAST                                          = 0x0010        /**< Flooded Unicast. */
+} bcmolt_epon_oam_traffic_bitmap;
+
+/** Rate Units. 
+ */
+typedef enum bcmolt_epon_oam_rate_units
+{
+    BCMOLT_EPON_OAM_RATE_UNITS_KBPS                                                         = 0,            /**< Kbps. */
+    BCMOLT_EPON_OAM_RATE_UNITS_FRAMES_SECOND                                                = 1             /**< Frames/second. */
+} bcmolt_epon_oam_rate_units;
+
+/** DPoE FEC Mode. 
+ */
+typedef enum bcmolt_epon_oam_dpoe_fec_mode
+{
+    BCMOLT_EPON_OAM_DPOE_FEC_MODE_OFF                                                       = 0,            /**< No FEC */
+    BCMOLT_EPON_OAM_DPOE_FEC_MODE_ON                                                        = 1,            /**< FEC is ON for all links */
+    BCMOLT_EPON_OAM_DPOE_FEC_MODE_PER_LINK                                                  = 2             /**< FEC is settable per link (with the Per Link message) */
+} bcmolt_epon_oam_dpoe_fec_mode;
+
+/** DPoE Port Type. 
+ */
+typedef enum bcmolt_epon_oam_dpoe_port_type
+{
+    BCMOLT_EPON_OAM_DPOE_PORT_TYPE_UNSPECIFIED                                              = 0,            /**< Unspecified. */
+    BCMOLT_EPON_OAM_DPOE_PORT_TYPE_EMTA                                                     = 1,            /**< EMTA. */
+    BCMOLT_EPON_OAM_DPOE_PORT_TYPE_ESTB_IP                                                  = 2,            /**< ESTB-IP. */
+    BCMOLT_EPON_OAM_DPOE_PORT_TYPE_ESTB_DSG                                                 = 3,            /**< ESTB-DSG. */
+    BCMOLT_EPON_OAM_DPOE_PORT_TYPE_ETEA                                                     = 4,            /**< ETEA. */
+    BCMOLT_EPON_OAM_DPOE_PORT_TYPE_ESG                                                      = 5,            /**< ESG. */
+    BCMOLT_EPON_OAM_DPOE_PORT_TYPE_EROUTER                                                  = 6,            /**< E Router. */
+    BCMOLT_EPON_OAM_DPOE_PORT_TYPE_EDVA                                                     = 7             /**< EDVA. */
+} bcmolt_epon_oam_dpoe_port_type;
+
+/** Dpoe Ipmc Forwarding Flags. 
+ */
+typedef enum bcmolt_epon_oam_dpoe_ipmc_forwarding_flags
+{
+    BCMOLT_EPON_OAM_DPOE_IPMC_FORWARDING_FLAGS_NONE                                         = 0,
+    BCMOLT_EPON_OAM_DPOE_IPMC_FORWARDING_FLAGS_LLID                                         = 0x0001,       /**< LLID. */
+    BCMOLT_EPON_OAM_DPOE_IPMC_FORWARDING_FLAGS_L2DA                                         = 0x0002,       /**< L2 DA. */
+    BCMOLT_EPON_OAM_DPOE_IPMC_FORWARDING_FLAGS_L2SA                                         = 0x0004,       /**< L2 SA. */
+    BCMOLT_EPON_OAM_DPOE_IPMC_FORWARDING_FLAGS_IPDA                                         = 0x0008,       /**< IP DA. */
+    BCMOLT_EPON_OAM_DPOE_IPMC_FORWARDING_FLAGS_IPSA                                         = 0x0010        /**< IP SA. */
+} bcmolt_epon_oam_dpoe_ipmc_forwarding_flags;
+
+/** DPoE Power Saving Mode. 
+ */
+typedef enum bcmolt_epon_oam_dpoe_power_saving_mode
+{
+    BCMOLT_EPON_OAM_DPOE_POWER_SAVING_MODE_NONE                                             = 0,            /**< None. */
+    BCMOLT_EPON_OAM_DPOE_POWER_SAVING_MODE_TX                                               = 1,            /**< Tx. */
+    BCMOLT_EPON_OAM_DPOE_POWER_SAVING_MODE_TRX                                              = 2,            /**< Trx. */
+    BCMOLT_EPON_OAM_DPOE_POWER_SAVING_MODE_TX_TRX                                           = 3             /**< Tx_Trx. */
+} bcmolt_epon_oam_dpoe_power_saving_mode;
+
+/** DPoE Error Code. 
+ */
+typedef enum bcmolt_epon_oam_dpoe_error_code
+{
+    BCMOLT_EPON_OAM_DPOE_ERROR_CODE_NO_ERROR                                                = 128,          /**< No Error. */
+    BCMOLT_EPON_OAM_DPOE_ERROR_CODE_TOO_LONG                                                = 129,          /**< Too Long. */
+    BCMOLT_EPON_OAM_DPOE_ERROR_CODE_BAD_PARAMS                                              = 134,          /**< Bad Params. */
+    BCMOLT_EPON_OAM_DPOE_ERROR_CODE_NO_RESOURCES                                            = 135,          /**< No Resources. */
+    BCMOLT_EPON_OAM_DPOE_ERROR_CODE_SYSTEM_BUSY                                             = 136,          /**< System Busy. */
+    BCMOLT_EPON_OAM_DPOE_ERROR_CODE_UNDETERMINED                                            = 160,          /**< Undetermined. */
+    BCMOLT_EPON_OAM_DPOE_ERROR_CODE_UNSUPPORTED                                             = 161,          /**< Unsupported. */
+    BCMOLT_EPON_OAM_DPOE_ERROR_CODE_CORRUPTED                                               = 162,          /**< Corrupted. */
+    BCMOLT_EPON_OAM_DPOE_ERROR_CODE_HW_FAILURE                                              = 163,          /**< Hw Failure. */
+    BCMOLT_EPON_OAM_DPOE_ERROR_CODE_OVERFLOW                                                = 164           /**< Overflow. */
+} bcmolt_epon_oam_dpoe_error_code;
+
+/** DPoE File Transfer Opcode. 
+ */
+typedef enum bcmolt_epon_oam_dpoe_file_transfer_opcode
+{
+    BCMOLT_EPON_OAM_DPOE_FILE_TRANSFER_OPCODE_FILE_READ                                     = 0,            /**< File Read. */
+    BCMOLT_EPON_OAM_DPOE_FILE_TRANSFER_OPCODE_FILE_WRITE                                    = 1,            /**< File Write. */
+    BCMOLT_EPON_OAM_DPOE_FILE_TRANSFER_OPCODE_FILE_DATA                                     = 2,            /**< File Data. */
+    BCMOLT_EPON_OAM_DPOE_FILE_TRANSFER_OPCODE_FILE_ACK                                      = 3             /**< File Ack. */
+} bcmolt_epon_oam_dpoe_file_transfer_opcode;
+
+/** DPoE File Type. 
+ */
+typedef enum bcmolt_epon_oam_dpoe_file_type
+{
+    BCMOLT_EPON_OAM_DPOE_FILE_TYPE_BOOT                                                     = 0,            /**< Boot. */
+    BCMOLT_EPON_OAM_DPOE_FILE_TYPE_APP                                                      = 1,            /**< App. */
+    BCMOLT_EPON_OAM_DPOE_FILE_TYPE_CONFIG                                                   = 2,            /**< Config. */
+    BCMOLT_EPON_OAM_DPOE_FILE_TYPE_DIAG                                                     = 3             /**< Diag. */
+} bcmolt_epon_oam_dpoe_file_type;
+
+/** DPoE File Transfer Error. 
+ */
+typedef enum bcmolt_epon_oam_dpoe_file_transfer_error
+{
+    BCMOLT_EPON_OAM_DPOE_FILE_TRANSFER_ERROR_OK                                             = 0,            /**< Ok. */
+    BCMOLT_EPON_OAM_DPOE_FILE_TRANSFER_ERROR_UNDEFINED                                      = 1,            /**< Undefined. */
+    BCMOLT_EPON_OAM_DPOE_FILE_TRANSFER_ERROR_NOT_FOUND                                      = 2,            /**< Not Found. */
+    BCMOLT_EPON_OAM_DPOE_FILE_TRANSFER_ERROR_NO_ACCESS                                      = 3,            /**< No Access. */
+    BCMOLT_EPON_OAM_DPOE_FILE_TRANSFER_ERROR_FULL                                           = 4,            /**< Full. */
+    BCMOLT_EPON_OAM_DPOE_FILE_TRANSFER_ERROR_ILLEGAL_OP                                     = 5,            /**< Illegal Op. */
+    BCMOLT_EPON_OAM_DPOE_FILE_TRANSFER_ERROR_UNKNOWN_ID                                     = 6,            /**< Unknown ID. */
+    BCMOLT_EPON_OAM_DPOE_FILE_TRANSFER_ERROR_BAD_BLOCK                                      = 7,            /**< Bad Block. */
+    BCMOLT_EPON_OAM_DPOE_FILE_TRANSFER_ERROR_TIMEOUT                                        = 8,            /**< Timeout. */
+    BCMOLT_EPON_OAM_DPOE_FILE_TRANSFER_ERROR_BUSY                                           = 9,            /**< Busy. */
+    BCMOLT_EPON_OAM_DPOE_FILE_TRANSFER_ERROR_INCOMPATIBLE                                   = 10,           /**< Incompatible. */
+    BCMOLT_EPON_OAM_DPOE_FILE_TRANSFER_ERROR_CORRUPTED                                      = 11            /**< Corrupted. */
+} bcmolt_epon_oam_dpoe_file_transfer_error;
+
+/** DPoE Info TLV Type. 
+ */
+typedef enum bcmolt_epon_oam_dpoe_info_tlv_type
+{
+    BCMOLT_EPON_OAM_DPOE_INFO_TLV_TYPE_DPOE_OAM_SUPPORT                                     = 0             /**< DPoE OAM Support. */
+} bcmolt_epon_oam_dpoe_info_tlv_type;
+
+/** DPoE Mcast Ctrl Action. 
+ */
+typedef enum bcmolt_epon_oam_dpoe_mcast_ctrl_action
+{
+    BCMOLT_EPON_OAM_DPOE_MCAST_CTRL_ACTION_ADD                                              = 0,            /**< Add one entry */
+    BCMOLT_EPON_OAM_DPOE_MCAST_CTRL_ACTION_REMOVE                                           = 1,            /**< Delete one entry */
+    BCMOLT_EPON_OAM_DPOE_MCAST_CTRL_ACTION_CLEAR                                            = 2             /**< Remove all entries */
+} bcmolt_epon_oam_dpoe_mcast_ctrl_action;
+
+/** Dpoe Mcast Ctrl Resp Code. 
+ */
+typedef enum bcmolt_epon_oam_dpoe_mcast_ctrl_resp_code
+{
+    BCMOLT_EPON_OAM_DPOE_MCAST_CTRL_RESP_CODE_FAILURE                                       = 0,            /**< Failure. */
+    BCMOLT_EPON_OAM_DPOE_MCAST_CTRL_RESP_CODE_SUCCESS                                       = 1             /**< Success. */
+} bcmolt_epon_oam_dpoe_mcast_ctrl_resp_code;
+
+/** DPoE Mcast Reg Code. 
+ */
+typedef enum bcmolt_epon_oam_dpoe_mcast_reg_code
+{
+    BCMOLT_EPON_OAM_DPOE_MCAST_REG_CODE_DEREGISTER                                          = 2,            /**< Deregister. */
+    BCMOLT_EPON_OAM_DPOE_MCAST_REG_CODE_REG                                                 = 3             /**< Register. */
+} bcmolt_epon_oam_dpoe_mcast_reg_code;
+
+/** Phy type -- corresponds to OamPhyType in Oam.h 
+ */
+typedef enum bcmolt_epon_oam_std_phy_type
+{
+    BCMOLT_EPON_OAM_STD_PHY_TYPE_OTHER                                                      = 1,            /**< Other. */
+    BCMOLT_EPON_OAM_STD_PHY_TYPE_UNKNOWN                                                    = 2,            /**< Unknown. */
+    BCMOLT_EPON_OAM_STD_PHY_TYPE_NONE                                                       = 3,            /**< None. */
+    BCMOLT_EPON_OAM_STD_PHY_TYPE_TEN                                                        = 7,            /**< 10. */
+    BCMOLT_EPON_OAM_STD_PHY_TYPE_ONE_HUNDRED_T4                                             = 23,           /**< 100 T4. */
+    BCMOLT_EPON_OAM_STD_PHY_TYPE_ONE_HUNDRED_X                                              = 24,           /**< 100 X. */
+    BCMOLT_EPON_OAM_STD_PHY_TYPE_ONE_HUNDRED_T2                                             = 32,           /**< 100 T2. */
+    BCMOLT_EPON_OAM_STD_PHY_TYPE_ONE_THOUSAND_X                                             = 36,           /**< 1000 X. */
+    BCMOLT_EPON_OAM_STD_PHY_TYPE_ONE_THOUSAND_T                                             = 40,           /**< 1000 T. */
+    BCMOLT_EPON_OAM_STD_PHY_TYPE_TEN_GX                                                     = 48,           /**< 10G X. */
+    BCMOLT_EPON_OAM_STD_PHY_TYPE_TEN_GR                                                     = 49,           /**< 10G R. */
+    BCMOLT_EPON_OAM_STD_PHY_TYPE_TEN_W                                                      = 50,           /**< 10 W. */
+    BCMOLT_EPON_OAM_STD_PHY_TYPE_TEN_GT                                                     = 55            /**< 10G T. */
+} bcmolt_epon_oam_std_phy_type;
+
+/** OAM State. 
+ */
+typedef enum bcmolt_epon_oam_oam_state
+{
+    BCMOLT_EPON_OAM_OAM_STATE_DISABLED                                                      = 1,            /**< Disabled. */
+    BCMOLT_EPON_OAM_OAM_STATE_ENABLED                                                       = 2             /**< Enabled. */
+} bcmolt_epon_oam_oam_state;
+
+/** Mau Media Available. 
+ */
+typedef enum bcmolt_epon_oam_mau_media_available
+{
+    BCMOLT_EPON_OAM_MAU_MEDIA_AVAILABLE_OTHER                                               = 1,            /**< Other. */
+    BCMOLT_EPON_OAM_MAU_MEDIA_AVAILABLE_UNKNOWN                                             = 2,            /**< Unknown. */
+    BCMOLT_EPON_OAM_MAU_MEDIA_AVAILABLE_AVAILABLE                                           = 3,            /**< Available. */
+    BCMOLT_EPON_OAM_MAU_MEDIA_AVAILABLE_NOT_AVAILABLE                                       = 4,            /**< Not Available. */
+    BCMOLT_EPON_OAM_MAU_MEDIA_AVAILABLE_REMOTE_FAULT                                        = 5,            /**< Remote Fault. */
+    BCMOLT_EPON_OAM_MAU_MEDIA_AVAILABLE_INV_SIGNAL                                          = 6,            /**< Inv Signal. */
+    BCMOLT_EPON_OAM_MAU_MEDIA_AVAILABLE_REMOTE_JABBER                                       = 7,            /**< Remote Jabber. */
+    BCMOLT_EPON_OAM_MAU_MEDIA_AVAILABLE_REMOTE_LINK_LOSS                                    = 8,            /**< Remote Link Loss. */
+    BCMOLT_EPON_OAM_MAU_MEDIA_AVAILABLE_REMOTE_TEST                                         = 9,            /**< Remote Test. */
+    BCMOLT_EPON_OAM_MAU_MEDIA_AVAILABLE_OFFLINE                                             = 10,           /**< Offline. */
+    BCMOLT_EPON_OAM_MAU_MEDIA_AVAILABLE_AUTO_NEG_ERROR                                      = 11            /**< Auto Neg Error. */
+} bcmolt_epon_oam_mau_media_available;
+
+/** Std Auto Negoitation Capability. 
+ */
+typedef enum bcmolt_epon_oam_std_auto_negoitation_capability
+{
+    BCMOLT_EPON_OAM_STD_AUTO_NEGOITATION_CAPABILITY_GLOBAL                                  = 0,            /**< Global. */
+    BCMOLT_EPON_OAM_STD_AUTO_NEGOITATION_CAPABILITY_OTHER                                   = 1,            /**< Other. */
+    BCMOLT_EPON_OAM_STD_AUTO_NEGOITATION_CAPABILITY_UNKNOWN                                 = 2,            /**< Unknown. */
+    BCMOLT_EPON_OAM_STD_AUTO_NEGOITATION_CAPABILITY_TEN_T                                   = 14,           /**< 10 T. */
+    BCMOLT_EPON_OAM_STD_AUTO_NEGOITATION_CAPABILITY_TEN_TFD                                 = 142,          /**< 10 TFD. */
+    BCMOLT_EPON_OAM_STD_AUTO_NEGOITATION_CAPABILITY_ONE_HUNDRED_T4                          = 23,           /**< 100 T4. */
+    BCMOLT_EPON_OAM_STD_AUTO_NEGOITATION_CAPABILITY_ONE_HUNDRED_TX                          = 25,           /**< 100 TX. */
+    BCMOLT_EPON_OAM_STD_AUTO_NEGOITATION_CAPABILITY_ONE_HUNDRED_TXFD                        = 252,          /**< 100 TXFD. */
+    BCMOLT_EPON_OAM_STD_AUTO_NEGOITATION_CAPABILITY_FDX_PAUSE                               = 312,          /**< Fdx Pause. */
+    BCMOLT_EPON_OAM_STD_AUTO_NEGOITATION_CAPABILITY_FDX_APAUSE                              = 313,          /**< Fdx A Pause. */
+    BCMOLT_EPON_OAM_STD_AUTO_NEGOITATION_CAPABILITY_FDX_SPAUSE                              = 314,          /**< Fdx S Pause. */
+    BCMOLT_EPON_OAM_STD_AUTO_NEGOITATION_CAPABILITY_FDX_BPAUSE                              = 315,          /**< Fdx B Pause. */
+    BCMOLT_EPON_OAM_STD_AUTO_NEGOITATION_CAPABILITY_ONE_HUNDRED_T2                          = 32,           /**< 100 T2. */
+    BCMOLT_EPON_OAM_STD_AUTO_NEGOITATION_CAPABILITY_ONE_HUNDRED_T2FD                        = 322,          /**< 100 T2 FD. */
+    BCMOLT_EPON_OAM_STD_AUTO_NEGOITATION_CAPABILITY_ONE_THOUSAND_X                          = 36,           /**< 1000 X. */
+    BCMOLT_EPON_OAM_STD_AUTO_NEGOITATION_CAPABILITY_ONE_THOUSAND_XFD                        = 362,          /**< 1000 XFD. */
+    BCMOLT_EPON_OAM_STD_AUTO_NEGOITATION_CAPABILITY_ONE_THOUSAND_T                          = 40,           /**< 1000 T. */
+    BCMOLT_EPON_OAM_STD_AUTO_NEGOITATION_CAPABILITY_ONE_THOUSAND_TFD                        = 402,          /**< 1000 TFD. */
+    BCMOLT_EPON_OAM_STD_AUTO_NEGOITATION_CAPABILITY_REM_FAULT1                              = 37,           /**< Rem Fault 1. */
+    BCMOLT_EPON_OAM_STD_AUTO_NEGOITATION_CAPABILITY_REM_FAULT2                              = 372,          /**< Rem Fault 2. */
+    BCMOLT_EPON_OAM_STD_AUTO_NEGOITATION_CAPABILITY_TEN_GBASE_X                             = 48,           /**< 10 G Base X. */
+    BCMOLT_EPON_OAM_STD_AUTO_NEGOITATION_CAPABILITY_TEN_GBASE_LX4                           = 481,          /**< 10 G Base L X4. */
+    BCMOLT_EPON_OAM_STD_AUTO_NEGOITATION_CAPABILITY_TEN_GBASE_R                             = 49,           /**< 10 G Base R. */
+    BCMOLT_EPON_OAM_STD_AUTO_NEGOITATION_CAPABILITY_TEN_GBASE_ER                            = 491,          /**< 10 G Base ER. */
+    BCMOLT_EPON_OAM_STD_AUTO_NEGOITATION_CAPABILITY_TEN_GBASE_LR                            = 492,          /**< 10 G Base LR. */
+    BCMOLT_EPON_OAM_STD_AUTO_NEGOITATION_CAPABILITY_TEN_GBASE_SR                            = 493,          /**< 10 G Base SR. */
+    BCMOLT_EPON_OAM_STD_AUTO_NEGOITATION_CAPABILITY_TEN_GBASE_W                             = 50,           /**< 10 G Base W. */
+    BCMOLT_EPON_OAM_STD_AUTO_NEGOITATION_CAPABILITY_TEN_GBASE_EW                            = 501,          /**< 10 G Base EW. */
+    BCMOLT_EPON_OAM_STD_AUTO_NEGOITATION_CAPABILITY_TEN_GBASE_LW                            = 502,          /**< 10 G Base LW. */
+    BCMOLT_EPON_OAM_STD_AUTO_NEGOITATION_CAPABILITY_TEN_GBASE_SW                            = 503,          /**< 10 G Base SW. */
+    BCMOLT_EPON_OAM_STD_AUTO_NEGOITATION_CAPABILITY_ISO_ETHERNET                            = 8029          /**< Iso Ethernet. */
+} bcmolt_epon_oam_std_auto_negoitation_capability;
+
+/** MAC Duplex Status. 
+ */
+typedef enum bcmolt_epon_oam_mac_duplex_status
+{
+    BCMOLT_EPON_OAM_MAC_DUPLEX_STATUS_OAM_MAC_DUPLEX_HALF                                   = 1,            /**< OAM MAC Duplex Half. */
+    BCMOLT_EPON_OAM_MAC_DUPLEX_STATUS_OAM_MAC_DUPLEX_FULL                                   = 2,            /**< OAM MAC Duplex Full. */
+    BCMOLT_EPON_OAM_MAC_DUPLEX_STATUS_OAM_MAC_DUPLEX_UNKNOWN                                = 3             /**< OAM MAC Duplex Unknown. */
+} bcmolt_epon_oam_mac_duplex_status;
+
+/** FEC Support. 
+ */
+typedef enum bcmolt_epon_oam_fec_support
+{
+    BCMOLT_EPON_OAM_FEC_SUPPORT_UNKNOWN                                                     = 1,            /**< Unknown. */
+    BCMOLT_EPON_OAM_FEC_SUPPORT_SUPPORTED                                                   = 2,            /**< Supported. */
+    BCMOLT_EPON_OAM_FEC_SUPPORT_NOT_SUPPORTED                                               = 3             /**< Not Supported. */
+} bcmolt_epon_oam_fec_support;
+
+/** Std FEC Mode. 
+ */
+typedef enum bcmolt_epon_oam_std_fec_mode
+{
+    BCMOLT_EPON_OAM_STD_FEC_MODE_UNKNOWN                                                    = 1,            /**< Unknown. */
+    BCMOLT_EPON_OAM_STD_FEC_MODE_ENABLED                                                    = 2,            /**< Enabled. */
+    BCMOLT_EPON_OAM_STD_FEC_MODE_DISABLED                                                   = 3             /**< Disabled. */
+} bcmolt_epon_oam_std_fec_mode;
+
+/** DPoE Opcode. 
+ */
+typedef enum bcmolt_epon_oam_dpoe_opcode
+{
+    BCMOLT_EPON_OAM_DPOE_OPCODE_RESERVED                                                    = 0,            /**< Reserved. */
+    BCMOLT_EPON_OAM_DPOE_OPCODE_GET_REQUEST                                                 = 1,            /**< Get Request. */
+    BCMOLT_EPON_OAM_DPOE_OPCODE_GET_RESPONSE                                                = 2,            /**< Get Response. */
+    BCMOLT_EPON_OAM_DPOE_OPCODE_SET_REQUEST                                                 = 3,            /**< Set Request. */
+    BCMOLT_EPON_OAM_DPOE_OPCODE_SET_RESPONSE                                                = 4,            /**< Set Response. */
+    BCMOLT_EPON_OAM_DPOE_OPCODE_DYNAMIC_IPMCAST_CTRL                                        = 5,            /**< Dynamic IP Multicast Control. */
+    BCMOLT_EPON_OAM_DPOE_OPCODE_MCAST_REG                                                   = 6,            /**< Mcast Reg. */
+    BCMOLT_EPON_OAM_DPOE_OPCODE_MCAST_REG_RESP                                              = 7,            /**< Mcast Reg Resp. */
+    BCMOLT_EPON_OAM_DPOE_OPCODE_KEY_EXCHANGE                                                = 8,            /**< Key Exchange. */
+    BCMOLT_EPON_OAM_DPOE_OPCODE_FILE_TRANSFER                                               = 9,            /**< File Transfer. */
+    BCMOLT_EPON_OAM_DPOE_OPCODE_DYNAMIC_IPMCAST_CTRL_RESP                                   = 10,           /**< Dynamic IP Multicast Control Response. */
+    BCMOLT_EPON_OAM_DPOE_OPCODE_STATIC_IPMCAST_CTRL                                         = 11,           /**< Static IP Multicast Control. */
+    BCMOLT_EPON_OAM_DPOE_OPCODE_STATIC_IPMCAST_CTRL_RESP                                    = 12            /**< Static IP Multicast Control Response. */
+} bcmolt_epon_oam_dpoe_opcode;
+
+/** DPoE Version. 
+ */
+typedef enum bcmolt_epon_oam_dpoe_version
+{
+    BCMOLT_EPON_OAM_DPOE_VERSION_DPOE10                                                     = 1,            /**< DPoE 1.0. */
+    BCMOLT_EPON_OAM_DPOE_VERSION_PRE_DPOE_WITHOUT_CERTIFICATE                               = 2,            /**< Pre-DPoE Without Certificate. */
+    BCMOLT_EPON_OAM_DPOE_VERSION_PRE_DPOE_WITH_CERTIFICATE                                  = 3,            /**< Pre-DPoE With Certificate. */
+    BCMOLT_EPON_OAM_DPOE_VERSION_DPOE10I04                                                  = 16,           /**< DPoE 1.0 I04. */
+    BCMOLT_EPON_OAM_DPOE_VERSION_DPOE10I05                                                  = 17,           /**< DPoE 1.0 I05. */
+    BCMOLT_EPON_OAM_DPOE_VERSION_DPOE20                                                     = 32            /**< DPoE 2.0. */
+} bcmolt_epon_oam_dpoe_version;
+
+/** EAP Code. 
+ */
+typedef enum bcmolt_epon_oam_eap_code
+{
+    BCMOLT_EPON_OAM_EAP_CODE_REQUEST                                                        = 1,            /**< Request. */
+    BCMOLT_EPON_OAM_EAP_CODE_RESPONSE                                                       = 2,            /**< Response. */
+    BCMOLT_EPON_OAM_EAP_CODE_SUCCESS                                                        = 3,            /**< Success. */
+    BCMOLT_EPON_OAM_EAP_CODE_FAILURE                                                        = 4             /**< Failure. */
+} bcmolt_epon_oam_eap_code;
+
+/** TLS Subtype. 
+ */
+typedef enum bcmolt_epon_oam_tls_subtype
+{
+    BCMOLT_EPON_OAM_TLS_SUBTYPE_AUTHENTICATION                                              = 13            /**< Authentication. */
+} bcmolt_epon_oam_tls_subtype;
+
+/** TLS Flags. 
+ */
+typedef enum bcmolt_epon_oam_tls_flags
+{
+    BCMOLT_EPON_OAM_TLS_FLAGS_NONE                                                          = 0,
+    BCMOLT_EPON_OAM_TLS_FLAGS_START                                                         = 0x0020,       /**< Start. */
+    BCMOLT_EPON_OAM_TLS_FLAGS_MORE                                                          = 0x0040,       /**< More. */
+    BCMOLT_EPON_OAM_TLS_FLAGS_LENGTH                                                        = 0x0080        /**< Length. */
+} bcmolt_epon_oam_tls_flags;
+
+/** TLS Content Type. 
+ */
+typedef enum bcmolt_epon_oam_tls_content_type
+{
+    BCMOLT_EPON_OAM_TLS_CONTENT_TYPE_CHANGE_CIPHER_SPEC                                     = 20,           /**< Change Cipher Spec. */
+    BCMOLT_EPON_OAM_TLS_CONTENT_TYPE_ALERT                                                  = 21,           /**< Alert. */
+    BCMOLT_EPON_OAM_TLS_CONTENT_TYPE_HANDSHAKE                                              = 22,           /**< Handshake. */
+    BCMOLT_EPON_OAM_TLS_CONTENT_TYPE_APPLICATION_DATA                                       = 23            /**< Application Data. */
+} bcmolt_epon_oam_tls_content_type;
+
+/** TLS Handshake Type. 
+ */
+typedef enum bcmolt_epon_oam_tls_handshake_type
+{
+    BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_HELLO_REQUEST                                        = 0,            /**< Hello Request. */
+    BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_CLIENT_HELLO                                         = 1,            /**< Client Hello. */
+    BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_SERVER_HELLO                                         = 2,            /**< Server Hello. */
+    BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_CERTIFICATE                                          = 11,           /**< Certificate. */
+    BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_SERVER_KEY_EXCHANGE                                  = 12,           /**< Server Key Exchange. */
+    BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_CERTIFICATE_REQUEST                                  = 13,           /**< Certificate Request. */
+    BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_SERVER_HELLO_DONE                                    = 14,           /**< Server Hello Done. */
+    BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_CERTIFICATE_VERIFY                                   = 15,           /**< Certificate Verify. */
+    BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_CLIENT_KEY_EXCHANGE                                  = 16,           /**< Client Key Exchange. */
+    BCMOLT_EPON_OAM_TLS_HANDSHAKE_TYPE_FINISHED                                             = 20            /**< Finished. */
+} bcmolt_epon_oam_tls_handshake_type;
+
+/** TLS Ciphersuite. 
+ */
+typedef enum bcmolt_epon_oam_tls_ciphersuite
+{
+    BCMOLT_EPON_OAM_TLS_CIPHERSUITE_TLS_NULL_WITH_NULL_NULL                                 = 0,            /**< TLS Null With Null Null. */
+    BCMOLT_EPON_OAM_TLS_CIPHERSUITE_TLS_RSA_WITH_NULL_MD5                                   = 1,            /**< TLS RSA With Null MD5. */
+    BCMOLT_EPON_OAM_TLS_CIPHERSUITE_TLS_RSA_WITH_NULL_SHA                                   = 2,            /**< TLS RSA With Null SHA. */
+    BCMOLT_EPON_OAM_TLS_CIPHERSUITE_TLS_RSA_WITH_RC4128MD5                                  = 4,            /**< TLS RSA With RC4 128 MD5. */
+    BCMOLT_EPON_OAM_TLS_CIPHERSUITE_TLS_RSA_WITH_RC4128SHA                                  = 5,            /**< TLS RSA With RC4 128 SHA. */
+    BCMOLT_EPON_OAM_TLS_CIPHERSUITE_TLS_RSA_WITH_IDEA_CBC_SHA                               = 7,            /**< TLS RSA With IDEA CBC SHA. */
+    BCMOLT_EPON_OAM_TLS_CIPHERSUITE_TLS_RSA_WITH_DES_CBC_SHA                                = 9,            /**< TLS RSA With DES CBC SHA. */
+    BCMOLT_EPON_OAM_TLS_CIPHERSUITE_TLS_RSA_WITH3DES_EDE_CBC_SHA                            = 10            /**< TLS RSA With 3DES EDE CBC SHA. */
+} bcmolt_epon_oam_tls_ciphersuite;
+
+/** TLS Compression Method. 
+ */
+typedef enum bcmolt_epon_oam_tls_compression_method
+{
+    BCMOLT_EPON_OAM_TLS_COMPRESSION_METHOD_NULL                                             = 0             /**< Null. */
+} bcmolt_epon_oam_tls_compression_method;
+
+/** TLS Certificate Type. 
+ */
+typedef enum bcmolt_epon_oam_tls_certificate_type
+{
+    BCMOLT_EPON_OAM_TLS_CERTIFICATE_TYPE_RSA_SIGN                                           = 1,            /**< RSA Sign. */
+    BCMOLT_EPON_OAM_TLS_CERTIFICATE_TYPE_DSS_SIGN                                           = 2,            /**< DSS Sign. */
+    BCMOLT_EPON_OAM_TLS_CERTIFICATE_TYPE_RSA_FIXED_DH                                       = 3,            /**< RSA Fixed DH. */
+    BCMOLT_EPON_OAM_TLS_CERTIFICATE_TYPE_DSS_FIXED_DH                                       = 4,            /**< DSS Fixed DH. */
+    BCMOLT_EPON_OAM_TLS_CERTIFICATE_TYPE_RSA_EPHEMERAL_DHRESERVED                           = 5,            /**< RSA Ephemeral DH (RESERVED). */
+    BCMOLT_EPON_OAM_TLS_CERTIFICATE_TYPE_DSS_EPEHEMERAL_DHRESERVED                          = 6,            /**< DSS Epehemeral DH (RESERVED). */
+    BCMOLT_EPON_OAM_TLS_CERTIFICATE_TYPE_FORTEZZA_DMS_RESERVED                              = 20            /**< Fortezza DMS (RESERVED). */
+} bcmolt_epon_oam_tls_certificate_type;
+
+/** EAPOL Type. 
+ */
+typedef enum bcmolt_epon_oam_eapol_type
+{
+    BCMOLT_EPON_OAM_EAPOL_TYPE_PACKET                                                       = 0,            /**< Packet. */
+    BCMOLT_EPON_OAM_EAPOL_TYPE_START                                                        = 1,            /**< Start. */
+    BCMOLT_EPON_OAM_EAPOL_TYPE_LOGOFF                                                       = 2,            /**< Logoff. */
+    BCMOLT_EPON_OAM_EAPOL_TYPE_KEY                                                          = 3,            /**< Key. */
+    BCMOLT_EPON_OAM_EAPOL_TYPE_ASF_ALERT                                                    = 4,            /**< ASF Alert. */
+    BCMOLT_EPON_OAM_EAPOL_TYPE_MKA                                                          = 5             /**< MKA. */
+} bcmolt_epon_oam_eapol_type;
+
+/** EAPOL Version. 
+ */
+typedef enum bcmolt_epon_oam_eapol_version
+{
+    BCMOLT_EPON_OAM_EAPOL_VERSION_VERSION2                                                  = 2             /**< Version 2. */
+} bcmolt_epon_oam_eapol_version;
+
+/** EPOC CMC Stat Index. 
+ */
+typedef enum bcmolt_epon_oam_epoc_cmc_stat_index
+{
+    BCMOLT_EPON_OAM_EPOC_CMC_STAT_INDEX_TBM_UP_OK_SDM_FRAMES                                = 0,            /**< Transmit packet from SDM upstream with good timestamp<StatInfo> */
+    BCMOLT_EPON_OAM_EPOC_CMC_STAT_INDEX_TBM_UP_OK_CMI_FRAMES                                = 1,            /**< Transmit packet from CMI upstream with good timestamp<StatInfo> */
+    BCMOLT_EPON_OAM_EPOC_CMC_STAT_INDEX_TBM_UP_DROPPED_SDM_FRAMES                           = 2,            /**< Statistic for dropping frame due to timestamp error */
+    BCMOLT_EPON_OAM_EPOC_CMC_STAT_INDEX_TBM_UP_DROPPED_CMI_FRAMES                           = 3,            /**< Statistic for dropping frame due to timestamp error */
+    BCMOLT_EPON_OAM_EPOC_CMC_STAT_INDEX_TBM_DOWN_OK_FRAMES                                  = 4,            /**< Statistic recieving frame downstream */
+    BCMOLT_EPON_OAM_EPOC_CMC_STAT_INDEX_TBM_DOWN_DROPPED_CRC8FRAMES                         = 5,            /**< Drop frame because of CRC 8 error */
+    BCMOLT_EPON_OAM_EPOC_CMC_STAT_INDEX_TBM_DOWN_DROPPED_LINECODE_FRAMES                    = 6,            /**< Drop frame because of line coding error */
+    BCMOLT_EPON_OAM_EPOC_CMC_STAT_INDEX_TBM_DOWN_DROPPED_MAXSIZE_FRAMES                     = 7,            /**< Drop frame for being too long */
+    BCMOLT_EPON_OAM_EPOC_CMC_STAT_INDEX_GFI_DOWN_TIME_UPDATE                                = 8,            /**< Valid Timestamp Update */
+    BCMOLT_EPON_OAM_EPOC_CMC_STAT_INDEX_GFI_DOWN_GRANT_RECEIVED                             = 9,            /**< Valid Grant Received */
+    BCMOLT_EPON_OAM_EPOC_CMC_STAT_INDEX_GFI_DOWN_DROPPED                                    = 10,           /**< <StatInfo> */
+    BCMOLT_EPON_OAM_EPOC_CMC_STAT_INDEX_GFI_GATE_DIF_PEAK                                   = 11,           /**<  */
+    BCMOLT_EPON_OAM_EPOC_CMC_STAT_INDEX_GFI_GRT_PHY_DISC                                    = 12,           /**< <StatInfo> */
+    BCMOLT_EPON_OAM_EPOC_CMC_STAT_INDEX_GFI_GRT_DISC                                        = 13,           /**< <StatInfo> */
+    BCMOLT_EPON_OAM_EPOC_CMC_STAT_INDEX_GFI_GRT_DATA                                        = 14,           /**< <StatInfo> */
+    BCMOLT_EPON_OAM_EPOC_CMC_STAT_INDEX_GFI_GRT_TUNING                                      = 15,           /**< Statistic that counts discovery gates converted to tuning grants */
+    BCMOLT_EPON_OAM_EPOC_CMC_STAT_INDEX_SDI_RX_PACKET_OVER_DROP                             = 16,           /**< This indicates an down burst header with a good CRC 32. */
+    BCMOLT_EPON_OAM_EPOC_CMC_STAT_INDEX_SDI_DOWN_CRC32DROPPED_HEADERS                       = 17,           /**< This indicates an down burst header with a good CRC 32. */
+    BCMOLT_EPON_OAM_EPOC_CMC_STAT_INDEX_SDI_DOWN_OK_HEADERS                                 = 18,           /**< Count good burst headers <StatInfo  IsMirror="True"> */
+    BCMOLT_EPON_OAM_EPOC_CMC_STAT_INDEX_FEC_UP_BAD_BLOCKS                                   = 19,           /**< <StatInfo IsMirror="True" IsRate="True"> */
+    BCMOLT_EPON_OAM_EPOC_CMC_STAT_INDEX_FEC_UP_CORRECTED_BLOCKS                             = 20,           /**< <StatInfo IsMirror="True" IsRate="True"> */
+    BCMOLT_EPON_OAM_EPOC_CMC_STAT_INDEX_FEC_UP_OK_BLOCKS                                    = 21,           /**< <StatInfo IsMirror="True" IsRate="True"> */
+    BCMOLT_EPON_OAM_EPOC_CMC_STAT_INDEX_FEC_UP_ERR_BYTES                                    = 22,           /**< <StatInfo IsMirror="True" IsRate="True"> */
+    BCMOLT_EPON_OAM_EPOC_CMC_STAT_INDEX_FEC_UP_ERR_BITS                                     = 23,           /**< <StatInfo IsMirror="True" IsRate="True"> */
+    BCMOLT_EPON_OAM_EPOC_CMC_STAT_INDEX_DEF_UP_CRC32FRAMES_DROPPED                          = 24,           /**< We check the CRC 32 on upstream frames. This indicates a frame discard. */
+    BCMOLT_EPON_OAM_EPOC_CMC_STAT_INDEX_DEF_UP_OK_FRAMES                                    = 25,           /**< Number of good packets in the upstream rx */
+    BCMOLT_EPON_OAM_EPOC_CMC_STAT_INDEX_DEF_UP_CRC8FRAMES_DROPPED                           = 26,           /**< Number of crc-8 errors in the upstream rx */
+    BCMOLT_EPON_OAM_EPOC_CMC_STAT_INDEX_CMI_UP_DROPPED_MAXSIZE_FRAMES                       = 27,           /**< Drop frame for being too long */
+    BCMOLT_EPON_OAM_EPOC_CMC_STAT_INDEX_CMI_UP_OK_FRAMES                                    = 28,           /**< Statistic recieving frame upstream */
+    BCMOLT_EPON_OAM_EPOC_CMC_STAT_INDEX_CMI_UP_DROPPED_CRC8FRAMES                           = 29,           /**< Drop frame because of CRC 8 error */
+    BCMOLT_EPON_OAM_EPOC_CMC_STAT_INDEX_CMI_UP_DROPPED_LINECODE_FRAMES                      = 30,           /**< Drop frame because of line coding error */
+    BCMOLT_EPON_OAM_EPOC_CMC_STAT_INDEX_DFI_DOWN_OK_MPCP_FRAMES                             = 31,           /**< Enqueued MPCP frame */
+    BCMOLT_EPON_OAM_EPOC_CMC_STAT_INDEX_DFI_DOWN_OK_OAM_FRAMES                              = 32,           /**< Enqueued Oam Frame */
+    BCMOLT_EPON_OAM_EPOC_CMC_STAT_INDEX_DFI_DOWN_OK_DATA_FRAMES                             = 33,           /**< Enqueued Data frame */
+    BCMOLT_EPON_OAM_EPOC_CMC_STAT_INDEX_DFI_DOWN_DROPPED_MPCP_FRAMES                        = 34,           /**< Overrun MPCP fifo */
+    BCMOLT_EPON_OAM_EPOC_CMC_STAT_INDEX_DFI_DOWN_DROPPED_OAM_FRAMES                         = 35,           /**< Overrun Oam fifo */
+    BCMOLT_EPON_OAM_EPOC_CMC_STAT_INDEX_DFI_DOWN_DROPPED_DATA_FRAMES                        = 36,           /**< Overrun data fifo */
+    BCMOLT_EPON_OAM_EPOC_CMC_STAT_INDEX_SDM_DOWN_SYMBOL_COUNT                               = 37,           /**< How many symbols have gone by */
+    BCMOLT_EPON_OAM_EPOC_CMC_STAT_INDEX_SES_DOWN_SYMBOL_COLLECTED                           = 38,           /**< How many symbols have we collected stats on ? */
+    BCMOLT_EPON_OAM_EPOC_CMC_STAT_INDEX_SES_DOWN_SYMBOL_BIT_ERRORS                          = 39,           /**< Count of bit errors in collected symbols. Used to verify collector working */
+    BCMOLT_EPON_OAM_EPOC_CMC_STAT_INDEX_FRA_GRANT_DROP                                      = 40,           /**< <StatInfo IsMirror="False" IsRate="False"> */
+    BCMOLT_EPON_OAM_EPOC_CMC_STAT_INDEX_FRA_PKT_DROP                                        = 41            /**< <StatInfo IsMirror="False" IsRate="False"> */
+} bcmolt_epon_oam_epoc_cmc_stat_index;
+
+/** EPOC CNU Stat Index. 
+ */
+typedef enum bcmolt_epon_oam_epoc_cnu_stat_index
+{
+    BCMOLT_EPON_OAM_EPOC_CNU_STAT_INDEX_EMI_UP_DROPPED_LINECODE_FRAMES                      = 0,            /**< Drop frame because of line coding error */
+    BCMOLT_EPON_OAM_EPOC_CNU_STAT_INDEX_EMI_UP_DROPPED_CRC8FRAMES                           = 1,            /**< Drop frame because of CRC 8 error */
+    BCMOLT_EPON_OAM_EPOC_CNU_STAT_INDEX_EMI_UP_OK_FRAMES                                    = 2,            /**< Upstream good packet count */
+    BCMOLT_EPON_OAM_EPOC_CNU_STAT_INDEX_EMI_UP_DROPPED_MAXSIZE_FRAMES                       = 3,            /**< Max Frame Size Packet Drop */
+    BCMOLT_EPON_OAM_EPOC_CNU_STAT_INDEX_GPR_DOWN_OAM_TIME_PEAK                              = 4,            /**< Gpr Oam Time Peak */
+    BCMOLT_EPON_OAM_EPOC_CNU_STAT_INDEX_GPR_DOWN_MPCP_TIME_PEAK                             = 5,            /**< Gpr Mpcp Time Peak */
+    BCMOLT_EPON_OAM_EPOC_CNU_STAT_INDEX_GPR_DOWN_DATA_TIME_PEAK                             = 6,            /**< Gpr Data Time Peak */
+    BCMOLT_EPON_OAM_EPOC_CNU_STAT_INDEX_GPR_GRT_PHY_DISC                                    = 7,            /**< <StatInfo> */
+    BCMOLT_EPON_OAM_EPOC_CNU_STAT_INDEX_GPR_GRT_TUNING                                      = 8,            /**< <StatInfo> */
+    BCMOLT_EPON_OAM_EPOC_CNU_STAT_INDEX_GPR_GRT_DISC                                        = 9,            /**< <StatInfo> */
+    BCMOLT_EPON_OAM_EPOC_CNU_STAT_INDEX_GPR_GRT_DATA                                        = 10,           /**< <StatInfo> */
+    BCMOLT_EPON_OAM_EPOC_CNU_STAT_INDEX_GPR_MPCP_PEAK                                       = 11,           /**< Difference between local MPCP time reference and update to the ONU */
+    BCMOLT_EPON_OAM_EPOC_CNU_STAT_INDEX_GPR_GATE_DIFF_PEAK                                  = 12,           /**< Difference between local MPCP time reference and update to the ONU */
+    BCMOLT_EPON_OAM_EPOC_CNU_STAT_INDEX_SDI_RX_NO_VLD_CNT_PEAK                              = 13,           /**< SdiRxNoVldCntPeak. */
+    BCMOLT_EPON_OAM_EPOC_CNU_STAT_INDEX_SDI_RX_PACKET_OVER_DROP                             = 14,           /**< <StatInfo> */
+    BCMOLT_EPON_OAM_EPOC_CNU_STAT_INDEX_SDI_DOWN_CRC32DROPPED_HEADERS                       = 15,           /**< This indicates an down burst header with a good CRC 32. */
+    BCMOLT_EPON_OAM_EPOC_CNU_STAT_INDEX_SDI_DOWN_OK_HEADERS                                 = 16,           /**< Count good burst headers <StatInfo  IsMirror="True"> */
+    BCMOLT_EPON_OAM_EPOC_CNU_STAT_INDEX_FEC_DOWN_BAD_BLOCKS                                 = 17,           /**< <StatInfo IsMirror="True" IsRate="True"> */
+    BCMOLT_EPON_OAM_EPOC_CNU_STAT_INDEX_FEC_DOWN_CORRECTED_BLOCKS                           = 18,           /**< <StatInfo IsMirror="True" IsRate="True"> */
+    BCMOLT_EPON_OAM_EPOC_CNU_STAT_INDEX_FEC_DOWN_OK_BLOCKS                                  = 19,           /**< <StatInfo IsMirror="True" IsRate="True"> */
+    BCMOLT_EPON_OAM_EPOC_CNU_STAT_INDEX_FEC_DOWN_ERR_BYTES                                  = 20,           /**< <StatInfo IsMirror="True" IsRate="True"> */
+    BCMOLT_EPON_OAM_EPOC_CNU_STAT_INDEX_FEC_DOWN_ERR_BITS                                   = 21,           /**< <StatInfo IsMirror="True" IsRate="True"> */
+    BCMOLT_EPON_OAM_EPOC_CNU_STAT_INDEX_DEF_DOWN_OK                                         = 22,           /**< Number of good packets in the upstream rx */
+    BCMOLT_EPON_OAM_EPOC_CNU_STAT_INDEX_DEF_DOWN_CRC8FRAMES_DROPPED                         = 23,           /**< Number of crc-8 errors in the upstream rx */
+    BCMOLT_EPON_OAM_EPOC_CNU_STAT_INDEX_DEF_DOWN_CRC32FRAMES_DROPPED                        = 24,           /**< CRC 32 Error */
+    BCMOLT_EPON_OAM_EPOC_CNU_STAT_INDEX_RPR_FRAMES                                          = 25,           /**< RprFrames. */
+    BCMOLT_EPON_OAM_EPOC_CNU_STAT_INDEX_SDM_DOWN_SYMBOL_COUNT                               = 26,           /**< How many symbols have gone by */
+    BCMOLT_EPON_OAM_EPOC_CNU_STAT_INDEX_SES_DOWN_SYMBOL_COLLECTED                           = 27,           /**< How many symbols have we collected stats on ? */
+    BCMOLT_EPON_OAM_EPOC_CNU_STAT_INDEX_SES_DOWN_SYMBOL_BIT_ERRORS                          = 28,           /**< Count of bit errors in collected symbols. Used to verify collector working */
+    BCMOLT_EPON_OAM_EPOC_CNU_STAT_INDEX_DFO_DOWN_OK_MPCP_FRAMES                             = 29,           /**< Enqueued MPCP frame */
+    BCMOLT_EPON_OAM_EPOC_CNU_STAT_INDEX_DFO_DOWN_OK_OAM_FRAMES                              = 30,           /**< Enqueued Oam frame */
+    BCMOLT_EPON_OAM_EPOC_CNU_STAT_INDEX_DFO_DOWN_OK_DATA_FRAMES                             = 31,           /**< Enqueued data frame */
+    BCMOLT_EPON_OAM_EPOC_CNU_STAT_INDEX_DFO_DOWN_DROPPED_MPCP_FRAMES                        = 32,           /**< Overrun MPCP fifo */
+    BCMOLT_EPON_OAM_EPOC_CNU_STAT_INDEX_DFO_DOWN_DROPPED_OAM_FRAMES                         = 33,           /**< Overrun Oam fifo */
+    BCMOLT_EPON_OAM_EPOC_CNU_STAT_INDEX_DFO_DOWN_DROPPED_DATA_FRAMES                        = 34,           /**< Overrun data fifo */
+    BCMOLT_EPON_OAM_EPOC_CNU_STAT_INDEX_FRA_GRANT_DROP                                      = 35,           /**< <StatInfo IsMirror="False" IsRate="False"> */
+    BCMOLT_EPON_OAM_EPOC_CNU_STAT_INDEX_FRA_PKT_DROP                                        = 36,           /**< <StatInfo IsMirror="False" IsRate="False"> */
+    BCMOLT_EPON_OAM_EPOC_CNU_STAT_INDEX_UFO_UP_DROP                                         = 37,           /**< <StatInfo IsMirror="False" IsRate="False"> */
+    BCMOLT_EPON_OAM_EPOC_CNU_STAT_INDEX_UFO_UP_FRAME                                        = 38            /**< <StatInfo IsMirror="False" IsRate="False"> */
+} bcmolt_epon_oam_epoc_cnu_stat_index;
+
+/** EPOC SDM 250 Stat Index. 
+ */
+typedef enum bcmolt_epon_oam_epoc_sdm250stat_index
+{
+    BCMOLT_EPON_OAM_EPOC_SDM250STAT_INDEX_SLIDE_DIFF_CNT                                    = 0,            /**< SlideDiffCnt. */
+    BCMOLT_EPON_OAM_EPOC_SDM250STAT_INDEX_DAC_CLIP_I                                        = 1,            /**< DacClipI. */
+    BCMOLT_EPON_OAM_EPOC_SDM250STAT_INDEX_DAC_CLIP_Q                                        = 2,            /**< DacClipQ. */
+    BCMOLT_EPON_OAM_EPOC_SDM250STAT_INDEX_D2A_CLK_ERR_A                                     = 3,            /**< D2aClkErrA. */
+    BCMOLT_EPON_OAM_EPOC_SDM250STAT_INDEX_D2A_CLK_ERR_B                                     = 4,            /**< D2aClkErrB. */
+    BCMOLT_EPON_OAM_EPOC_SDM250STAT_INDEX_RX_DEM_SYNC_DET                                   = 5,            /**< Increments when the SDM sees a sync pulse */
+    BCMOLT_EPON_OAM_EPOC_SDM250STAT_INDEX_RX_DEM_NOT4SYNC_DET                               = 6,            /**< Increments when the SDM sees a sync, but it is not followed by 4 other syncs within 32 us */
+    BCMOLT_EPON_OAM_EPOC_SDM250STAT_INDEX_JCPLL_UNLOCK                                      = 7,            /**< The JC PLL lock signal transitioned from high to low */
+    BCMOLT_EPON_OAM_EPOC_SDM250STAT_INDEX_RFPLL_UNLOCK                                      = 8,            /**< The RF PLL lock signal transitioned from high to low */
+    BCMOLT_EPON_OAM_EPOC_SDM250STAT_INDEX_SDM_RX_BURST_END                                  = 9,            /**< The RF PLL lock signal transitioned from high to low */
+    BCMOLT_EPON_OAM_EPOC_SDM250STAT_INDEX_SDM_TX_BURST_END                                  = 10,           /**< The RF PLL lock signal transitioned from high to low */
+    BCMOLT_EPON_OAM_EPOC_SDM250STAT_INDEX_A2D_MIN_PEAK                                      = 11,           /**< <StatInfo> */
+    BCMOLT_EPON_OAM_EPOC_SDM250STAT_INDEX_A2D_MAX_PEAK                                      = 12,           /**< <StatInfo> */
+    BCMOLT_EPON_OAM_EPOC_SDM250STAT_INDEX_D2A_IMAX_PEAK                                     = 13,           /**< <StatInfo> */
+    BCMOLT_EPON_OAM_EPOC_SDM250STAT_INDEX_D2A_IMIN_PEAK                                     = 14,           /**< <StatInfo> */
+    BCMOLT_EPON_OAM_EPOC_SDM250STAT_INDEX_D2A_QMAX_PEAK                                     = 15,           /**< <StatInfo> */
+    BCMOLT_EPON_OAM_EPOC_SDM250STAT_INDEX_D2A_QMIN_PEAK                                     = 16,           /**< <StatInfo> */
+    BCMOLT_EPON_OAM_EPOC_SDM250STAT_INDEX_QES_DOWN_SYMBOL_COLLECTED                         = 17,           /**< How many symbols have we collected stats on ? */
+    BCMOLT_EPON_OAM_EPOC_SDM250STAT_INDEX_MIF_TX_START                                      = 18,           /**< <StatInfo> */
+    BCMOLT_EPON_OAM_EPOC_SDM250STAT_INDEX_MIF_RX_START                                      = 19,           /**< <StatInfo> */
+    BCMOLT_EPON_OAM_EPOC_SDM250STAT_INDEX_MIF_BURST_TYPE_NORMAL                             = 20,           /**< <StatInfo> */
+    BCMOLT_EPON_OAM_EPOC_SDM250STAT_INDEX_MIF_BURST_TYPE_DISCOVERY                          = 21,           /**< <StatInfo> */
+    BCMOLT_EPON_OAM_EPOC_SDM250STAT_INDEX_MIF_BURST_TYPE_TUNING                             = 22,           /**< <StatInfo> */
+    BCMOLT_EPON_OAM_EPOC_SDM250STAT_INDEX_MIF_BURST_TYPE_RESERVED                           = 23,           /**< <StatInfo> */
+    BCMOLT_EPON_OAM_EPOC_SDM250STAT_INDEX_MIF_BURST_LENGTH                                  = 24,           /**< <StatInfo> */
+    BCMOLT_EPON_OAM_EPOC_SDM250STAT_INDEX_SLIDE_LOST                                        = 25,           /**< Slide was good, but then preamble bad happened */
+    BCMOLT_EPON_OAM_EPOC_SDM250STAT_INDEX_SLIDE_TIMEOUT                                     = 26,           /**< While waiting for syncs on the next SF, didn't see them */
+    BCMOLT_EPON_OAM_EPOC_SDM250STAT_INDEX_SLIDE_STEADY_FAIL                                 = 27,           /**< wasn't able to get rx slide good in rx slide wait time */
+    BCMOLT_EPON_OAM_EPOC_SDM250STAT_INDEX_SLIDE_SYNC_WAIT_FAIL                              = 28            /**< When waiting for the next sync pulse (within a few symbols) we didn't see it. */
+} bcmolt_epon_oam_epoc_sdm250stat_index;
+
+/** EPOC Stat Gather Modes. 
+ */
+typedef enum bcmolt_epon_oam_epoc_stat_gather_modes
+{
+    BCMOLT_EPON_OAM_EPOC_STAT_GATHER_MODES_NONE                                             = 0,
+    BCMOLT_EPON_OAM_EPOC_STAT_GATHER_MODES_GET_COUNTER                                      = 0x0001,       /**< Get Counter. */
+    BCMOLT_EPON_OAM_EPOC_STAT_GATHER_MODES_CLEAR_COUNTER                                    = 0x0002,       /**< Clear Counter. */
+    BCMOLT_EPON_OAM_EPOC_STAT_GATHER_MODES_GET_RATE                                         = 0x0004        /**< Get Rate. */
+} bcmolt_epon_oam_epoc_stat_gather_modes;
+
+/** Protocol Type. 
+ */
+typedef enum bcmolt_epon_oam_protocol_type
+{
+    BCMOLT_EPON_OAM_PROTOCOL_TYPE_ZERO                                                      = 0,            /**< Zero. */
+    BCMOLT_EPON_OAM_PROTOCOL_TYPE_IPV4                                                      = 2048,         /**< IPv4. */
+    BCMOLT_EPON_OAM_PROTOCOL_TYPE_ARP                                                       = 2054,         /**< ARP. */
+    BCMOLT_EPON_OAM_PROTOCOL_TYPE_CVLAN                                                     = 33024U,       /**< C-VLAN. */
+    BCMOLT_EPON_OAM_PROTOCOL_TYPE_IPV6                                                      = 34525U,       /**< IPv6. */
+    BCMOLT_EPON_OAM_PROTOCOL_TYPE_MPCP                                                      = 34824U,       /**< MPCP. */
+    BCMOLT_EPON_OAM_PROTOCOL_TYPE_SLOW_PROTOCOL                                             = 34825U,       /**< Slow Protocol. */
+    BCMOLT_EPON_OAM_PROTOCOL_TYPE_SVLAN                                                     = 34984U,       /**< S-VLAN. */
+    BCMOLT_EPON_OAM_PROTOCOL_TYPE_EAPOL                                                     = 34958U,       /**< EAPOL. */
+    BCMOLT_EPON_OAM_PROTOCOL_TYPE_ITAG                                                      = 35047U,       /**< I-Tag. */
+    BCMOLT_EPON_OAM_PROTOCOL_TYPE_LOOPBACK                                                  = 36864U        /**< Loopback. */
+} bcmolt_epon_oam_protocol_type;
+
+/** Slow Protocol Subtype. 
+ */
+typedef enum bcmolt_epon_oam_slow_protocol_subtype
+{
+    BCMOLT_EPON_OAM_SLOW_PROTOCOL_SUBTYPE_LACP                                              = 1,            /**< LACP. */
+    BCMOLT_EPON_OAM_SLOW_PROTOCOL_SUBTYPE_LAMP                                              = 2,            /**< LAMP. */
+    BCMOLT_EPON_OAM_SLOW_PROTOCOL_SUBTYPE_OAM                                               = 3,            /**< OAM. */
+    BCMOLT_EPON_OAM_SLOW_PROTOCOL_SUBTYPE_ORGANIZATION_SPECIFIC                             = 10            /**< Organization Specific. */
+} bcmolt_epon_oam_slow_protocol_subtype;
+
+/** OAM Flags. 
+ */
+typedef enum bcmolt_epon_oam_oam_flags
+{
+    BCMOLT_EPON_OAM_OAM_FLAGS_NONE                                                          = 0,
+    BCMOLT_EPON_OAM_OAM_FLAGS_LINK_FAULT                                                    = 0x0001,       /**< Link Fault. */
+    BCMOLT_EPON_OAM_OAM_FLAGS_DYING_GASP                                                    = 0x0002,       /**< Dying Gasp. */
+    BCMOLT_EPON_OAM_OAM_FLAGS_CRITICAL_EVENT                                                = 0x0004,       /**< Critical Event. */
+    BCMOLT_EPON_OAM_OAM_FLAGS_LOCAL_EVALUATING                                              = 0x0008,       /**< Local Evaluating. */
+    BCMOLT_EPON_OAM_OAM_FLAGS_LOCAL_STABLE                                                  = 0x0010,       /**< Local Stable. */
+    BCMOLT_EPON_OAM_OAM_FLAGS_REMOTE_EVALUATING                                             = 0x0020,       /**< Remote Evaluating. */
+    BCMOLT_EPON_OAM_OAM_FLAGS_REMOTE_STABLE                                                 = 0x0040        /**< Remote Stable. */
+} bcmolt_epon_oam_oam_flags;
+
+/** OAM Opcode. 
+ */
+typedef enum bcmolt_epon_oam_oam_opcode
+{
+    BCMOLT_EPON_OAM_OAM_OPCODE_INFO                                                         = 0,            /**< Information. */
+    BCMOLT_EPON_OAM_OAM_OPCODE_EVENT_NOTIFICATION                                           = 1,            /**< Event Notification. */
+    BCMOLT_EPON_OAM_OAM_OPCODE_VAR_REQUEST                                                  = 2,            /**< Variable Request. */
+    BCMOLT_EPON_OAM_OAM_OPCODE_VAR_RESPONSE                                                 = 3,            /**< Variable Response. */
+    BCMOLT_EPON_OAM_OAM_OPCODE_LOOPBACK_CONTROL                                             = 4,            /**< Loopback Control. */
+    BCMOLT_EPON_OAM_OAM_OPCODE_ORGANIZATION_SPECIFIC                                        = 254           /**< Organization Specific. */
+} bcmolt_epon_oam_oam_opcode;
+
+/** Information TLV Type. 
+ */
+typedef enum bcmolt_epon_oam_info_tlv_type
+{
+    BCMOLT_EPON_OAM_INFO_TLV_TYPE_END                                                       = 0,            /**< End. */
+    BCMOLT_EPON_OAM_INFO_TLV_TYPE_LOCAL                                                     = 1,            /**< Local. */
+    BCMOLT_EPON_OAM_INFO_TLV_TYPE_REMOTE                                                    = 2,            /**< Remote. */
+    BCMOLT_EPON_OAM_INFO_TLV_TYPE_ORGANIZATION_SPECIFIC                                     = 254           /**< Organization Specific. */
+} bcmolt_epon_oam_info_tlv_type;
+
+/** Tek Info TLV Type. 
+ */
+typedef enum bcmolt_epon_oam_tek_info_tlv_type
+{
+    BCMOLT_EPON_OAM_TEK_INFO_TLV_TYPE_LINK                                                  = 0,            /**< Link. */
+    BCMOLT_EPON_OAM_TEK_INFO_TLV_TYPE_KEY                                                   = 1,            /**< Key. */
+    BCMOLT_EPON_OAM_TEK_INFO_TLV_TYPE_ALARM_REQUEST                                         = 2,            /**< Alarm Request. */
+    BCMOLT_EPON_OAM_TEK_INFO_TLV_TYPE_EXTENSION_SUPPORT                                     = 3             /**< Extension Support. */
+} bcmolt_epon_oam_tek_info_tlv_type;
+
+/** Tek Report Modes. 
+ */
+typedef enum bcmolt_epon_oam_tek_report_modes
+{
+    BCMOLT_EPON_OAM_TEK_REPORT_MODES_NONE                                                   = 0,
+    BCMOLT_EPON_OAM_TEK_REPORT_MODES_SIMPLE                                                 = 0x0000,       /**< Up to 4 queue sets, 1 priority value */
+    BCMOLT_EPON_OAM_TEK_REPORT_MODES_TEKNOVUS                                               = 0x0001,       /**< Up to 4 queue sets, 1 priority value */
+    BCMOLT_EPON_OAM_TEK_REPORT_MODES_CTC                                                    = 0x0002,       /**< 1 queue set, 8 priority values */
+    BCMOLT_EPON_OAM_TEK_REPORT_MODES_NTT                                                    = 0x0004,       /**< NTT (2 queue sets, reversed, subtract granted data) */
+    BCMOLT_EPON_OAM_TEK_REPORT_MODES_MANUAL                                                 = 0x0008,       /**< As specified in ONU personality */
+    BCMOLT_EPON_OAM_TEK_REPORT_MODES_TDM_NO_FORCE                                           = 0x0010        /**< TDM No Force. */
+} bcmolt_epon_oam_tek_report_modes;
+
+/** Local/Remote Info State. 
+ */
+typedef enum bcmolt_epon_oam_local_remote_info_state
+{
+    BCMOLT_EPON_OAM_LOCAL_REMOTE_INFO_STATE_NONE                                            = 0,
+    BCMOLT_EPON_OAM_LOCAL_REMOTE_INFO_STATE_PARSER_ACTION0                                  = 0x0001,       /**< Parser Action 0. */
+    BCMOLT_EPON_OAM_LOCAL_REMOTE_INFO_STATE_PARSER_ACTION1                                  = 0x0002,       /**< Parser Action 1. */
+    BCMOLT_EPON_OAM_LOCAL_REMOTE_INFO_STATE_MULTIPLEXER_ACTION                              = 0x0004        /**< Multiplexer Action. */
+} bcmolt_epon_oam_local_remote_info_state;
+
+/** Local/Remote Info Config. 
+ */
+typedef enum bcmolt_epon_oam_local_remote_info_config
+{
+    BCMOLT_EPON_OAM_LOCAL_REMOTE_INFO_CONFIG_NONE                                           = 0,
+    BCMOLT_EPON_OAM_LOCAL_REMOTE_INFO_CONFIG_OAM_MODE                                       = 0x0001,       /**< OAM Mode. */
+    BCMOLT_EPON_OAM_LOCAL_REMOTE_INFO_CONFIG_UNIDIRECTIONAL_SUPPORT                         = 0x0002,       /**< Unidirectional Support. */
+    BCMOLT_EPON_OAM_LOCAL_REMOTE_INFO_CONFIG_OAM_REMOTE_LOOPBACK_SUPPORT                    = 0x0004,       /**< OAM Remote Loopback Support. */
+    BCMOLT_EPON_OAM_LOCAL_REMOTE_INFO_CONFIG_LINK_EVENTS                                    = 0x0008,       /**< Link Events. */
+    BCMOLT_EPON_OAM_LOCAL_REMOTE_INFO_CONFIG_VARIABLE_RETRIEVAL                             = 0x0010        /**< Variable Retrieval. */
+} bcmolt_epon_oam_local_remote_info_config;
+
+/** Link Event Type. 
+ */
+typedef enum bcmolt_epon_oam_link_event_type
+{
+    BCMOLT_EPON_OAM_LINK_EVENT_TYPE_END                                                     = 0,            /**< End. */
+    BCMOLT_EPON_OAM_LINK_EVENT_TYPE_ERRORED_SYMBOL_PERIOD                                   = 1,            /**< Errored Symbol Period. */
+    BCMOLT_EPON_OAM_LINK_EVENT_TYPE_ERRORED_FRAME                                           = 2,            /**< Errored Frame. */
+    BCMOLT_EPON_OAM_LINK_EVENT_TYPE_ERRORED_FRAME_PERIOD                                    = 3,            /**< Errored Frame Period. */
+    BCMOLT_EPON_OAM_LINK_EVENT_TYPE_ERRORED_FRAME_SECONDS_SUMMARY                           = 4,            /**< Errored Frame Seconds Summary. */
+    BCMOLT_EPON_OAM_LINK_EVENT_TYPE_ORGANIZATION_SPECIFIC                                   = 254           /**< Organization Specific. */
+} bcmolt_epon_oam_link_event_type;
+
+/** Tek Alarm Code. 
+ */
+typedef enum bcmolt_epon_oam_tek_alarm_code
+{
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_LINK_FAULT                                               = 16,           /**< Link Fault. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_LOSS_OF_SIGNAL                                           = 17,           /**< Loss of Signal. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_TX_FAIL                                                  = 18,           /**< Tx Fail. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_TRANSMIT_DEGRADE                                         = 19,           /**< Transmit Degrade. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_QUEUE_OVERFLOW                                           = 20,           /**< Queue Overflow. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_LEARN_TABLE_OVERFLOW                                     = 21,           /**< Learn Table Overflow. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_FLOW_CONTROL_TIMEOUT                                     = 22,           /**< Flow Control Timeout. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_REPORT_FAIL                                              = 23,           /**< Report Fail. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_GATE_TIMEOUT                                             = 24,           /**< Gate Timeout. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_OAM_TIMEOUT                                              = 25,           /**< OAM Timeout. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_KEY_EXCHANGE                                             = 26,           /**< Key Exchange. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_AUTO_NEG_FAILURE                                         = 27,           /**< Auto Neg Failure. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_GPIO_LINK_FAULT                                          = 28,           /**< Gpio Link Fault. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_LOOPBACK                                                 = 32,           /**< Loopback. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_PORT_DISABLED                                            = 33,           /**< Port Disabled. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_DYING_GASP                                               = 64,           /**< Dying Gasp. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER                                                    = 65,           /**< Power. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_GPIO_DYING_GASP                                          = 66,           /**< Gpio Dying Gasp. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_CRITICAL_EVENT                                           = 96,           /**< Critical Event. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_REG                                                      = 97,           /**< Register. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_GPIO_CRITICAL_EVENT                                      = 98,           /**< Gpio Critical Event. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_SYSTEM                                                   = 128,          /**< System. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_TEMPERATURE                                              = 129,          /**< Temperature. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_GPIO_OTHER                                               = 130,          /**< Gpio Other. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_AUTH_UNAVAIL                                             = 131,          /**< Auth Unavail. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_STAT_ALARM                                               = 134,          /**< Stat Alarm. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_FLASH_BUSY                                               = 135,          /**< Flash Busy. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_STANDBY_LOS                                              = 136,          /**< Standby Los. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_PROT_SWITCH                                              = 137,          /**< Prot Switch. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_CTC_ALARM                                                = 144,          /**< Ctc Alarm. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_LINK_OAM_DISC_COMPLETE                                   = 145,          /**< Link OAM Disc Complete. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_IPN_LOS                                                  = 146,          /**< Ipn Los. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_DIAG_LOAD                                                = 147,          /**< Diag Load. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_BOOT_INVALID                                             = 160,          /**< Boot Invalid. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_ONU_READY                                                = 176,          /**< ONU Ready. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_ONU_PON_DISABLE                                          = 177,          /**< ONU Pon Disable. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_CTC_DISCOVER                                             = 178,          /**< Ctc Discover. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_LASER_ALWAYS_ON                                          = 179,          /**< Laser Always On. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_LINK_REG_START                                           = 184,          /**< Link Reg Start. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_LINK_REG_SUCCESS                                         = 185,          /**< Link Reg Success. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_LINK_REG_FAIL                                            = 186,          /**< Link Reg Fail. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_FAN_FAULT                                                = 189,          /**< Fan Fault. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_TEMP_HIGH                                      = 190,          /**< Power Mon Temperature High. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_TEMP_LOW                                       = 191,          /**< Power Mon Temperature Low. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_VCC_HIGH                                       = 192,          /**< Power Mon Vcc High. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_VCC_LOW                                        = 193,          /**< Power Mon Vcc Low. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_TX_BIAS_HIGH                                   = 194,          /**< Power Mon Tx Bias High. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_TX_BIAS_LOW                                    = 195,          /**< Power Mon Tx Bias Low. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_TX_POWER_HIGH                                  = 196,          /**< Power Mon Tx Power High. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_TX_POWER_LOW                                   = 197,          /**< Power Mon Tx Power Low. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_RX_POWER_HIGH                                  = 198,          /**< Power Mon Rx Power High. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CODE_POWER_MON_RX_POWER_LOW                                   = 199           /**< Power Mon Rx Power Low. */
+} bcmolt_epon_oam_tek_alarm_code;
+
+/** Tek Alarm Context. 
+ */
+typedef enum bcmolt_epon_oam_tek_alarm_context
+{
+    BCMOLT_EPON_OAM_TEK_ALARM_CONTEXT_ONU                                                   = 0,            /**< ONU. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CONTEXT_PORT                                                  = 1,            /**< Port. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CONTEXT_LINK                                                  = 2,            /**< Link. */
+    BCMOLT_EPON_OAM_TEK_ALARM_CONTEXT_QUEUE                                                 = 3             /**< Queue. */
+} bcmolt_epon_oam_tek_alarm_context;
+
+/** Var Branch. 
+ */
+typedef enum bcmolt_epon_oam_var_branch
+{
+    BCMOLT_EPON_OAM_VAR_BRANCH_END                                                          = 0,            /**< End. */
+    BCMOLT_EPON_OAM_VAR_BRANCH_OBJECT                                                       = 3,            /**< Object. */
+    BCMOLT_EPON_OAM_VAR_BRANCH_PACKAGE                                                      = 4,            /**< Package. */
+    BCMOLT_EPON_OAM_VAR_BRANCH_NAME_BINDING                                                 = 6,            /**< Name Binding. */
+    BCMOLT_EPON_OAM_VAR_BRANCH_ATTRIBUTE                                                    = 7,            /**< Attribute. */
+    BCMOLT_EPON_OAM_VAR_BRANCH_ACTION                                                       = 9             /**< Action. */
+} bcmolt_epon_oam_var_branch;
+
+/** Var Leaf Object. 
+ */
+typedef enum bcmolt_epon_oam_var_leaf_object
+{
+    BCMOLT_EPON_OAM_VAR_LEAF_OBJECT_MAC_ENTITY                                              = 1,            /**< MAC Entity. */
+    BCMOLT_EPON_OAM_VAR_LEAF_OBJECT_PHY_ENTITY                                              = 2,            /**< PHY Entity. */
+    BCMOLT_EPON_OAM_VAR_LEAF_OBJECT_MAC_CTRL                                                = 8             /**< MAC Ctrl. */
+} bcmolt_epon_oam_var_leaf_object;
+
+/** Var Leaf Package. 
+ */
+typedef enum bcmolt_epon_oam_var_leaf_package
+{
+    BCMOLT_EPON_OAM_VAR_LEAF_PACKAGE_ILLEGAL                                                = 0,            /**< Illegal. */
+    BCMOLT_EPON_OAM_VAR_LEAF_PACKAGE_MAC_MANDATORY                                          = 1,            /**< MAC Mandatory. */
+    BCMOLT_EPON_OAM_VAR_LEAF_PACKAGE_MAC_RECOMMENDED                                        = 2,            /**< MAC Recommended. */
+    BCMOLT_EPON_OAM_VAR_LEAF_PACKAGE_MAC_OPTIONAL                                           = 3,            /**< MAC Optional. */
+    BCMOLT_EPON_OAM_VAR_LEAF_PACKAGE_MAC_ARRAY                                              = 4,            /**< MAC Array. */
+    BCMOLT_EPON_OAM_VAR_LEAF_PACKAGE_MAC_EXCESSIVE_DEFERRAL                                 = 5,            /**< MAC Excessive Deferral. */
+    BCMOLT_EPON_OAM_VAR_LEAF_PACKAGE_PHY_RECOMMENDED                                        = 6,            /**< PHY Recommended. */
+    BCMOLT_EPON_OAM_VAR_LEAF_PACKAGE_PHY_MULTIPLE_PHY                                       = 7,            /**< PHY Multiple PHY. */
+    BCMOLT_EPON_OAM_VAR_LEAF_PACKAGE_PHY100MPBS_MONITOR                                     = 8,            /**< PHY 100 Mpbs Monitor. */
+    BCMOLT_EPON_OAM_VAR_LEAF_PACKAGE_REPEATER_PERF_MONITOR                                  = 9,            /**< Repeater Perf Monitor. */
+    BCMOLT_EPON_OAM_VAR_LEAF_PACKAGE_PORT_PERF_MONITOR                                      = 10,           /**< Port Perf Monitor. */
+    BCMOLT_EPON_OAM_VAR_LEAF_PACKAGE_PORT_ADDR_TRACK                                        = 11,           /**< Port Addr Track. */
+    BCMOLT_EPON_OAM_VAR_LEAF_PACKAGE_MAU_CONTROL                                            = 13,           /**< MAU Control. */
+    BCMOLT_EPON_OAM_VAR_LEAF_PACKAGE_MEDIA_LOW_TRACKING                                     = 14,           /**< Media Low Tracking. */
+    BCMOLT_EPON_OAM_VAR_LEAF_PACKAGE_BROADBAND_MAU                                          = 15,           /**< Broadband MAU. */
+    BCMOLT_EPON_OAM_VAR_LEAF_PACKAGE_MAC_CONTROL_RECOMMENDED                                = 17            /**< MAC Control Recommended. */
+} bcmolt_epon_oam_var_leaf_package;
+
+/** Var Leaf Name Binding. 
+ */
+typedef enum bcmolt_epon_oam_var_leaf_name_binding
+{
+    BCMOLT_EPON_OAM_VAR_LEAF_NAME_BINDING_MAC_NAME                                          = 1,            /**< MAC Name. */
+    BCMOLT_EPON_OAM_VAR_LEAF_NAME_BINDING_MAC_MONITOR                                       = 2,            /**< MAC Monitor. */
+    BCMOLT_EPON_OAM_VAR_LEAF_NAME_BINDING_PHY_NAME                                          = 3,            /**< PHY Name. */
+    BCMOLT_EPON_OAM_VAR_LEAF_NAME_BINDING_PHY_MONITOR                                       = 4,            /**< PHY Monitor. */
+    BCMOLT_EPON_OAM_VAR_LEAF_NAME_BINDING_MAC_CTRL_SYSTEM                                   = 18,           /**< MAC Ctrl System. */
+    BCMOLT_EPON_OAM_VAR_LEAF_NAME_BINDING_MAC_CTRL_MONITOR                                  = 15,           /**< MAC Ctrl Monitor. */
+    BCMOLT_EPON_OAM_VAR_LEAF_NAME_BINDING_REPEATER_NAME                                     = 5,            /**< Repeater Name. */
+    BCMOLT_EPON_OAM_VAR_LEAF_NAME_BINDING_REPEATER_MONITOR                                  = 6,            /**< Repeater Monitor. */
+    BCMOLT_EPON_OAM_VAR_LEAF_NAME_BINDING_GROUP_NAME                                        = 7,            /**< Group Name. */
+    BCMOLT_EPON_OAM_VAR_LEAF_NAME_BINDING_PORT_NAME                                         = 8,            /**< Port Name. */
+    BCMOLT_EPON_OAM_VAR_LEAF_NAME_BINDING_MAU_RPT_NAME                                      = 9,            /**< MAU Report Name. */
+    BCMOLT_EPON_OAM_VAR_LEAF_NAME_BINDING_MAU_DTE_NAME                                      = 10,           /**< MAU DTE Name. */
+    BCMOLT_EPON_OAM_VAR_LEAF_NAME_BINDING_RSRC_MAC                                          = 12,           /**< RSRC MAC. */
+    BCMOLT_EPON_OAM_VAR_LEAF_NAME_BINDING_RSRC_REPEATER                                     = 13,           /**< RSRC Repeater. */
+    BCMOLT_EPON_OAM_VAR_LEAF_NAME_BINDING_RSRC_MAU                                          = 14            /**< RSRC MAU. */
+} bcmolt_epon_oam_var_leaf_name_binding;
+
+/** Remote Loopback Command. 
+ */
+typedef enum bcmolt_epon_oam_remote_loopback_command
+{
+    BCMOLT_EPON_OAM_REMOTE_LOOPBACK_COMMAND_ENABLE                                          = 1,            /**< Enable. */
+    BCMOLT_EPON_OAM_REMOTE_LOOPBACK_COMMAND_DISABLE                                         = 2             /**< Disable. */
+} bcmolt_epon_oam_remote_loopback_command;
+
+/** Tek Opcode. 
+ */
+typedef enum bcmolt_epon_oam_tek_opcode
+{
+    BCMOLT_EPON_OAM_TEK_OPCODE_INFO                                                         = 0,            /**< Info. */
+    BCMOLT_EPON_OAM_TEK_OPCODE_GET_REQUEST                                                  = 1,            /**< Get Request. */
+    BCMOLT_EPON_OAM_TEK_OPCODE_GET_RESPONSE                                                 = 2,            /**< Get Response. */
+    BCMOLT_EPON_OAM_TEK_OPCODE_SET_REQUEST                                                  = 3,            /**< Set Request. */
+    BCMOLT_EPON_OAM_TEK_OPCODE_SET_RESPONSE                                                 = 4,            /**< Set Response. */
+    BCMOLT_EPON_OAM_TEK_OPCODE_MULTICAST_REQUEST                                            = 5,            /**< Multicast Request. */
+    BCMOLT_EPON_OAM_TEK_OPCODE_MULTICAST_REGISTER                                           = 6,            /**< Multicast Register. */
+    BCMOLT_EPON_OAM_TEK_OPCODE_MULTICAST_REGISTER_RESPONSE                                  = 7,            /**< Multicast Register Response. */
+    BCMOLT_EPON_OAM_TEK_OPCODE_KEY_EXCHANGE                                                 = 8,            /**< Key Exchange. */
+    BCMOLT_EPON_OAM_TEK_OPCODE_FILE_READ_REQUEST                                            = 9,            /**< File Read Request. */
+    BCMOLT_EPON_OAM_TEK_OPCODE_FILE_WRITE_REQUEST                                           = 10,           /**< File Write Request. */
+    BCMOLT_EPON_OAM_TEK_OPCODE_FILE_DATA                                                    = 11,           /**< File Data. */
+    BCMOLT_EPON_OAM_TEK_OPCODE_FILE_ACK                                                     = 12,           /**< File Ack. */
+    BCMOLT_EPON_OAM_TEK_OPCODE_I2C_BSC_READ_REQUEST                                         = 13,           /**< I²C (BSC) Read Request. */
+    BCMOLT_EPON_OAM_TEK_OPCODE_I2C_BSC_READ_RESPONSE                                        = 14,           /**< I²C (BSC) Read Response. */
+    BCMOLT_EPON_OAM_TEK_OPCODE_I2C_BSC_WRITE_REQUEST                                        = 15,           /**< I²C (BSC) Write Request. */
+    BCMOLT_EPON_OAM_TEK_OPCODE_I2C_BSC_WRITE_RESPONSE                                       = 16,           /**< I²C (BSC) Write Response. */
+    BCMOLT_EPON_OAM_TEK_OPCODE_UNACKED_ACTION                                               = 17,           /**< UnAcked Action. */
+    BCMOLT_EPON_OAM_TEK_OPCODE_LOOP_DETECT                                                  = 18            /**< Loop Detect. */
+} bcmolt_epon_oam_tek_opcode;
+
+/** Tek Branch. 
+ */
+typedef enum bcmolt_epon_oam_tek_branch
+{
+    BCMOLT_EPON_OAM_TEK_BRANCH_END                                                          = 0,            /**< End. */
+    BCMOLT_EPON_OAM_TEK_BRANCH_OBJECT                                                       = 3,            /**< Object. */
+    BCMOLT_EPON_OAM_TEK_BRANCH_PACKAGE                                                      = 4,            /**< Package. */
+    BCMOLT_EPON_OAM_TEK_BRANCH_NAME_BINDING                                                 = 6,            /**< Name Binding. */
+    BCMOLT_EPON_OAM_TEK_BRANCH_ATTRIBUTE                                                    = 7,            /**< Attribute. */
+    BCMOLT_EPON_OAM_TEK_BRANCH_ACTION                                                       = 9             /**< Action. */
+} bcmolt_epon_oam_tek_branch;
+
+/** Tek Object Type. 
+ */
+typedef enum bcmolt_epon_oam_tek_object_type
+{
+    BCMOLT_EPON_OAM_TEK_OBJECT_TYPE_LOGICAL_LINK                                            = 1,            /**< Logical Link. */
+    BCMOLT_EPON_OAM_TEK_OBJECT_TYPE_QUEUE_NAME                                              = 2,            /**< Queue Name. */
+    BCMOLT_EPON_OAM_TEK_OBJECT_TYPE_PORT                                                    = 3,            /**< Port. */
+    BCMOLT_EPON_OAM_TEK_OBJECT_TYPE_ALL_QUEUES                                              = 4,            /**< All Queues. */
+    BCMOLT_EPON_OAM_TEK_OBJECT_TYPE_NETWORK_PON                                             = 5,            /**< Network PON. */
+    BCMOLT_EPON_OAM_TEK_OBJECT_TYPE_USER_PON                                                = 6,            /**< User PON. */
+    BCMOLT_EPON_OAM_TEK_OBJECT_TYPE_FLOW_DIRECTION                                          = 7,            /**< Flow Direction. */
+    BCMOLT_EPON_OAM_TEK_OBJECT_TYPE_BRIDGE                                                  = 130,          /**< Bridge. */
+    BCMOLT_EPON_OAM_TEK_OBJECT_TYPE_BRIDGE_PORT                                             = 131           /**< Bridge Port. */
+} bcmolt_epon_oam_tek_object_type;
+
+/** Flow Direction. 
+ */
+typedef enum bcmolt_epon_oam_flow_direction
+{
+    BCMOLT_EPON_OAM_FLOW_DIRECTION_INGRESS                                                  = 0,            /**< Ingress. */
+    BCMOLT_EPON_OAM_FLOW_DIRECTION_EGRESS                                                   = 1,            /**< Egress. */
+    BCMOLT_EPON_OAM_FLOW_DIRECTION_UPSTREAM                                                 = 2,            /**< Upstream. */
+    BCMOLT_EPON_OAM_FLOW_DIRECTION_DOWNSTREAM                                               = 3,            /**< Downstream. */
+    BCMOLT_EPON_OAM_FLOW_DIRECTION_EGRESS_LOCAL                                             = 4             /**< Egress Local. */
+} bcmolt_epon_oam_flow_direction;
+
+/** Tek Leaf Attribute. 
+ */
+typedef enum bcmolt_epon_oam_tek_leaf_attribute
+{
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LUE_FIELD_SELECT                                     = 32746,        /**< LUE Field Select. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_ID                                           = 1,            /**< Std MAC ID. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAMES_TX_OK                                 = 2,            /**< Std MAC Frames Tx Ok. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_SINGLE_COLL_FRAMES                           = 3,            /**< Std MAC Single Coll Frames. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_MULTIPLE_COLL_FRAMES                         = 4,            /**< Std MAC Multiple Coll Frames. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAMES_RX_OK                                 = 5,            /**< Std MAC Frames Rx Ok. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FCS_ERR                                      = 6,            /**< Std MAC FCS Err. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_ALIGN_ERR                                    = 7,            /**< Std MAC Align Err. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_OCTETS_TX_OK                                 = 8,            /**< Std MAC Octets Tx Ok. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAMES_DEFERRED                              = 9,            /**< Std MAC Frames Deferred. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_LATE_COLLISIONS                              = 10,           /**< Std MAC Late Collisions. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_EXCESSIVE_COLLISIONS                         = 11,           /**< Std MAC Excessive Collisions. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAMES_LOST_MAC_TX_ERR                       = 12,           /**< Std MAC Frames Lost MAC Tx Err. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CARRIER_SENSE_ERR                            = 13,           /**< Std MAC Carrier Sense Err. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_OCTETS_RX_OK                                 = 14,           /**< Std MAC Octets Rx Ok. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAMES_LOST_MAC_RX_ERR                       = 15,           /**< Std MAC Frames Lost MAC Rx Err. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_PROMISCUOUS_STATUS                           = 16,           /**< Std MAC Promiscuous Status. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_MCAST_ADDR_LIST                              = 17,           /**< Std MAC Mcast Addr List. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_MCAST_FRAMES_TX_OK                           = 18,           /**< Std MAC Mcast Frames Tx Ok. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_BCAST_FRAMES_TX_OK                           = 19,           /**< Std MAC Bcast Frames Tx Ok. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FR_EXCESSIVE_DEFERRAL                        = 20,           /**< Std MAC Fr Excessive Deferral. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_MCAST_FRAMES_RX_OK                           = 21,           /**< Std MAC Mcast Frames Rx Ok. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_BCAST_FRAMES_RX_OK                           = 22,           /**< Std MAC Bcast Frames Rx Ok. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_IN_RANGE_LEN_ERR                             = 23,           /**< Std MAC In Range Len Err. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_OUT_OF_RANGE_LEN_ERR                         = 24,           /**< Std MAC Out Of Range Len Err. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_FRAME_TOO_LONG                               = 25,           /**< Std MAC Frame Too Long. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_ENABLE_STATUS                                = 26,           /**< Std MAC Enable Status. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_TX_ENABLE                                    = 27,           /**< Std MAC Tx Enable. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_MCAST_RX_STATUS                              = 28,           /**< Std MAC Mcast Rx Status. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_ADDR                                         = 29,           /**< Std MAC Addr. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_COLLISION_FRAMES                             = 30,           /**< Std MAC Collision Frames. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_PHY_TYPE                                         = 32,           /**< Std PHY Type. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_PHY_TYPE_LIST                                    = 33,           /**< Std PHY Type List. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_PHY_SYMBOL_ERR_DURING_CARRIER                    = 35,           /**< Std PHY Symbol Err During Carrier. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_PHY_ADMIN_STATE                                  = 37,           /**< Std PHY Admin State. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAU_MEDIA_AVAIL                                  = 71,           /**< Std MAU Media Avail. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_ID                                      = 78,           /**< Std Auto Neg ID. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_ADMIN_STATE                             = 79,           /**< Std Auto Neg Admin State. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_REMOTE_SIG                              = 80,           /**< Std Auto Neg Remote Sig. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_AUTO_CFG                                = 81,           /**< Std Auto Neg Auto Cfg. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_LOCAL_TECH                              = 82,           /**< Std Auto Neg Local Tech. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_AD_TECH                                 = 83,           /**< Std Auto Neg Ad Tech. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_RX_TECH                                 = 84,           /**< Std Auto Neg Rx Tech. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_LOCAL_SELECT_ABLE                       = 85,           /**< Std Auto Neg Local Select Able. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_AD_SELECT_ABLE                          = 86,           /**< Std Auto Neg Ad Select Able. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_AUTO_NEG_RX_SELECT_ABLE                          = 87,           /**< Std Auto Neg Rx Select Able. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CAPABILITIES                                 = 89,           /**< Std MAC Capabilities. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_DUPLEX_STATUS                                = 90,           /**< Std MAC Duplex Status. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_ID                                      = 92,           /**< Std MAC Ctrl ID. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_FUNCS_SUPPORTED                         = 93,           /**< Std MAC Ctrl Funcs Supported. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_FRAMES_TX                               = 94,           /**< Std MAC Ctrl Frames Tx. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_FRAMES_RX                               = 95,           /**< Std MAC Ctrl Frames Rx. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_UNSUPPORTED_OP_RX                       = 96,           /**< Std MAC Ctrl Unsupported Op Rx. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_PAUSE_DELAY                             = 97,           /**< Std MAC Ctrl Pause Delay. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_PAUSE_TX                                = 98,           /**< Std MAC Ctrl Pause Tx. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MAC_CTRL_PAUSE_RX                                = 99,           /**< Std MAC Ctrl Pause Rx. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_OAM_LOCAL_ERR_FRAME_SECS_EVENT                   = 233,          /**< Std OAM Local Err Frame Secs Event. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_OAM_EMUL_CRC8ERR                                 = 249,          /**< Std OAM Emul Crc8 Err. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_MAC_CTRL_FRAMES_TX                          = 280,          /**< Std MPCP MAC Ctrl Frames Tx. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_MAC_CTRL_FRAMES_RX                          = 281,          /**< Std MPCP MAC Ctrl Frames Rx. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_DISCOVERY_WINDOW_TX                         = 288,          /**< Std MPCP Discovery Window Tx. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_DISCOVERY_TIMEOUT                           = 290,          /**< Std MPCP Discovery Timeout. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_FEC_CORRECTED_BLOCKS                             = 292,          /**< Std FEC Corrected Blocks. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_FEC_UNCORRECTABLE_BLOCKS                         = 293,          /**< Std FEC Uncorrectable Blocks. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_FEC_ABILITY                                      = 313,          /**< Std FEC Ability. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_FEC_MODE                                         = 314,          /**< Std FEC Mode. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_TX_GATE                                     = 315,          /**< Std MPCP Tx Gate. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_TX_REG_ACK                                  = 316,          /**< Std MPCP Tx Reg Ack. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_TX_REGISTER                                 = 317,          /**< Std MPCP Tx Register. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_TX_REG_REQUEST                              = 318,          /**< Std MPCP Tx Reg Request. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_TX_REPORT                                   = 319,          /**< Std MPCP Tx Report. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_RX_GATE                                     = 320,          /**< Std MPCP Rx Gate. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_RX_REG_ACK                                  = 321,          /**< Std MPCP Rx Reg Ack. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_RX_REGISTER                                 = 322,          /**< Std MPCP Rx Register. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_RX_REG_REQUEST                              = 323,          /**< Std MPCP Rx Reg Request. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STD_MPCP_RX_REPORT                                   = 324,          /**< Std MPCP Rx Report. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FIRMWARE_VER                                         = 128,          /**< Firmware Ver. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EXTENDED_ID                                          = 129,          /**< Extended ID. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DYN_LEARN_TBL_SIZE                                   = 130,          /**< Dyn Learn Tbl Size. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DYN_LEARN_AGE_LIMIT                                  = 131,          /**< Dyn Learn Age Limit. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_UNICAST_FRAMES                                    = 132,          /**< Rx Unicast Frames. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_UNICAST_FRAMES                                    = 133,          /**< Tx Unicast Frames. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME_TOO_SHORT                                   = 134,          /**< Rx Frame Too Short. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME64                                           = 135,          /**< Rx Frame 64. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME65TO127                                      = 136,          /**< Rx Frame 65–127. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME128TO255                                     = 137,          /**< Rx Frame 128–255. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME256TO511                                     = 138,          /**< Rx Frame 256–511. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME512TO1023                                    = 139,          /**< Rx Frame 512–1023. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME1024TO1518                                   = 140,          /**< Rx Frame 1024–1518. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAME1519PLUS                                     = 141,          /**< Rx Frame 1519 Plus. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME64                                           = 142,          /**< Tx Frame 64. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME65TO127                                      = 143,          /**< Tx Frame 65–127. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME128TO255                                     = 144,          /**< Tx Frame 128–255. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME256TO511                                     = 145,          /**< Tx Frame 256–511. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME512TO1023                                    = 146,          /**< Tx Frame 512–1023. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME1024TO1518                                   = 147,          /**< Tx Frame 1024–1518. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAME1519PLUS                                     = 148,          /**< Tx Frame 1519 Plus. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_DELAY_THRESHOLD                                   = 149,          /**< Tx Delay Threshold. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_DELAY                                             = 150,          /**< Tx Delay. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_FRAMES_DROPPED                                    = 151,          /**< Tx Frames Dropped. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_BYTES_DROPPED                                     = 152,          /**< Tx Bytes Dropped. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_BYTES_DELAYED                                     = 153,          /**< Tx Bytes Delayed. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TX_BYTES_UNUSED                                      = 154,          /**< Tx Bytes Unused. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_DELAY_THRESHOLD                                   = 155,          /**< Rx Delay Threshold. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_DELAY                                             = 156,          /**< Rx Delay. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_FRAMES_DROPPED                                    = 157,          /**< Rx Frames Dropped. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_BYTES_DROPPED                                     = 158,          /**< Rx Bytes Dropped. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_RX_BYTES_DELAYED                                     = 159,          /**< Rx Bytes Delayed. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_STAT_THRESHOLD                                  = 160,          /**< Port Stat Threshold. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LINK_STAT_THRESHOLD                                  = 161,          /**< Link Stat Threshold. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ENCRYPT_KEY_EXPIRY_TIME                              = 162,          /**< Encrypt Key Expiry Time. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LEN_ERROR_DISCARD                                    = 163,          /**< Len Error Discard. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DYN_MAC_TBL                                          = 164,          /**< Dyn MAC Tbl. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_STATIC_MAC_TBL                                       = 165,          /**< Static MAC Tbl. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_UP_FILTER_TBL                                        = 166,          /**< Up Filter Tbl. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DN_FILTER_TBL                                        = 167,          /**< Dn Filter Tbl. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_REPORT_THRESHOLDS                                    = 168,          /**< Report Thresholds. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_BCAST_RATE_LIMIT                                     = 169,          /**< Bcast Rate Limit. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_VLAN_ETHERTYPE                                       = 172,          /**< VLAN Ethertype. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_CAPABILITY                                      = 174,          /**< Port Capability. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_CTL_VLAN_ID                                          = 175,          /**< Ctl VLAN I D. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MDI_CROSSOVER                                        = 176,          /**< MDI Crossover. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_NEW_DN_FILTER_TBL                                    = 177,          /**< New Dn Filter Tbl. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_NEW_UP_FILTER_TBL                                    = 178,          /**< New Up Filter Tbl. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_JEDEC_ID                                             = 179,          /**< JEDEC ID. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_CHIP_ID                                              = 180,          /**< Chip ID. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_CHIP_VERSION                                         = 181,          /**< Chip Version. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MPCP_CLOCK                                           = 182,          /**< MPCP Clock. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MPCP_CLOCK_COMPENSATE                                = 183,          /**< MPCP Clock Compensate. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EGRESS_SHAPING                                       = 184,          /**< Egress Shaping. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_INGRESS_POLICING                                     = 185,          /**< Ingress Policing. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_COS_TRANSLATION                                      = 186,          /**< CoS Translation. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PRI_ENQUEUING                                        = 187,          /**< Pri Enqueuing. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_VLAN_POLICY                                     = 188,          /**< Port VLAN Policy. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_VLAN_MEMBERSHIP                                 = 189,          /**< Port VLAN Membership. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ARP_REPLICATE_DEST                                   = 190,          /**< ARP Replicate Dest. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LACP_DEST                                            = 191,          /**< LACP Dest. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ONU_IGMP_VLAN                                        = 196,          /**< ONU IGMP VLAN. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DYN_LEARNING_MODE                                    = 208,          /**< Dyn Learning Mode. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MIN_MAC_LIMIT                                        = 209,          /**< Min MAC Limit. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ONU_AGGREGATE_LIMIT                                  = 210,          /**< ONU Aggregate Limit. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_NVS_SCRATCHPAD                                       = 211,          /**< NVS Scratchpad. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FLOOD_UNKNOWN                                        = 212,          /**< Flood Unknown. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LOCAL_SWITCHING                                      = 213,          /**< Local Switching. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_DOWN_BURST_TOLL                                      = 214,          /**< Down Burst Toll. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FEC_MODE                                             = 215,          /**< FEC Mode. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LEARN_MODE_RULE_UPDATE                               = 218,          /**< Learn Mode Rule Update. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POWER_MON_TEMPERATURE                                = 219,          /**< Power Mon Temperature. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POWER_MON_VCC                                        = 220,          /**< Power Mon Vcc. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POWER_MON_TX_BIAS                                    = 221,          /**< Power Mon Tx Bias. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POWER_MON_TX_POWER                                   = 222,          /**< Power Mon Tx Power. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POWER_MON_RX_POWER                                   = 223,          /**< Power Mon Rx Power. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MCAST_DOMAIN_CONFIG                                  = 224,          /**< Mcast Domain Config. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MCAST_GLOBAL_CONFIG                                  = 225,          /**< Mcast Global Config. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MCAST_GROUP_INFO                                     = 226,          /**< Mcast Group Info. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LINK_STATE                                           = 227,          /**< Link State. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_IGMP_FRAME_RATE_LIMIT                                = 228,          /**< IGMP Frame Rate Limit. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ONU_HOLDOVER                                         = 230,          /**< ONU Holdover. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_IPMC_UNKNOWN_LEAVE_FWD                               = 231,          /**< IPMC Unknown Leave Fwd. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_NETWORK_PON_MAP                                      = 234,          /**< Network PON Map. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PSSTATE                                              = 235,          /**< PS State. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_SLE_MODE                                             = 236,          /**< SLE Mode. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LEARN_TABLE_MODE                                     = 237,          /**< Learn Table Mode. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_VLAN_DESTINATIONS                                    = 240,          /**< VLAN Destinations. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TRANSCEIVER_SIGNAL_DETECT                            = 242,          /**< Transceiver Signal Detect. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_CROSSBAR_CONFIG                                      = 243,          /**< Crossbar Config. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_TRANSCEIVER_BURST_ACTIVITY                           = 244,          /**< Transceiver Burst Activity. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_CONTROL_PORT                                         = 245,          /**< Control Port. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ENCRYPTION_MODE                                      = 248,          /**< Encryption Mode. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_UNI_SHAPER                                           = 32764,        /**< UNI Shaper. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_DYNAMIC_ENTRIES                                 = 32747,        /**< Port Dynamic Entries. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_POLICER                                              = 32765,        /**< Policer. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ONU_RULE                                             = 32766,        /**< ONU Rule. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_INTERNAL_VERSION                                     = 251,          /**< Internal Version. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FIRMWARE_TIMESTAMP                                   = 252,          /**< Firmware Timestamp. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_BYPASS_SOFT_LEARN                                    = 325,          /**< Bypass Soft Learn. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EXT_FIRMWARE_VERSION                                 = 32761,        /**< Ext Firmware Version. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ENCRYPTION_KEY                                       = 32760,        /**< Encryption Key. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FILE_INFO                                            = 32759,        /**< File Info. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_SYSTEM_RULE_OPTIONS                                  = 238,          /**< System Rule Options. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_MTU                                                  = 32758,        /**< MTU. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_NVS_STATE                                            = 32757,        /**< NVS State. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_QUEUEPRIMAP                                          = 32756,        /**< Queueprimap. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_SDM_AMPLITUDE                                   = 250,          /**< EPoC SDM Amplitude. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_DOWN_BIT_LOADING                                = 253,          /**< EPoC Down Bit Loading. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UP_BIT_LOADING                                  = 254,          /**< EPoC Up Bit Loading. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_SDM_PHASE                                       = 255,          /**< EPoC SDM Phase. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_SDM_QUANTIZER                                   = 239,          /**< EPoC SDM Quantizer. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UNUSED0                                         = 229,          /**< EPoC Unused 0. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UNUSED1                                         = 204,          /**< EPoC Unused 1. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UNUSED2                                         = 205,          /**< EPoC Unused 2. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UNUSED3                                         = 206,          /**< EPoC Unused 3. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_EPOC_UNUSED4                                         = 207,          /**< EPoC Unused 4. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FEATURE_SET                                          = 32762,        /**< Feature Set. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LUE_FIELD_SELECT_LIST                                = 32745,        /**< LUE Field Select List. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_SEARCH_CONFIG                                        = 32752,        /**< Search Config. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_SEQUENCE_NUMBER                                      = 216,          /**< Sequence Number. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_QUEUE_CONFIG_V2                                      = 32753,        /**< Queue Config V2. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_ALARM_THRESHOLD                                      = 32741,        /**< Alarm Threshold. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_FAILSAFE                                             = 246,          /**< Failsafe. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_PORT_STATS_THRESHOLD_INTERVAL                        = 416,          /**< Port Stats Threshold Interval. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ATTRIBUTE_LINK_STATS_THRESHOLD_INTERVAL                        = 417           /**< Link Stats Threshold Interval. */
+} bcmolt_epon_oam_tek_leaf_attribute;
+
+/** Tek Leaf Action. 
+ */
+typedef enum bcmolt_epon_oam_tek_leaf_action
+{
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAC_INIT                                            = 1,            /**< Std MAC Init. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAC_ADD_GROUP_ADDR                                  = 2,            /**< Std MAC Add Group Addr. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAC_DEL_GROUP_ADDR                                  = 3,            /**< Std MAC Del Group Addr. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAC_SELF_TEST                                       = 4,            /**< Std MAC Self Test. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_PHY_ADMIN_CONTROL                                   = 5,            /**< Std PHY Admin Control. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_RPT_RESET                                           = 6,            /**< Std Report Reset. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_RPT_IN_SERVICE_TEST                                 = 7,            /**< Std Report In Service Test. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_PORT_ADMIN_CTRL                                     = 8,            /**< Std Port Admin Ctrl. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAU_RESET                                           = 9,            /**< Std MAU Reset. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_MAU_ADMIN_CTRL                                      = 10,           /**< Std MAU Admin Ctrl. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_AUTO_RENEGOTIATE                                    = 11,           /**< Std Auto Renegotiate. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_STD_AUTO_ADMIN_CTRL                                     = 12,           /**< Std Auto Admin Ctrl. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_DYN_LEARN_TBL                                     = 128,          /**< Clear Dyn Learn Tbl. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ADD_STATIC_ENTRY                                        = 129,          /**< Add Static Entry. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DEL_STATIC_ENTRY                                        = 130,          /**< Del Static Entry. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_UP_FILTER_TBL                                     = 131,          /**< Clear Up Filter Tbl. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_DN_FILTER_TBL                                     = 132,          /**< Clear Dn Filter Tbl. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ADD_RULE                                                = 133,          /**< Add Rule. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DELETE_RULE                                             = 134,          /**< Delete Rule. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_RESET_ONU                                               = 135,          /**< Reset ONU. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_STATS                                             = 136,          /**< Clear Stats. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_GPIO_CONFIG                                         = 137,          /**< Get GPIO Config. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_GPIO_CONFIG                                         = 138,          /**< Set GPIO Config. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_GPIO_VALUE                                          = 139,          /**< Get GPIO Value. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_GPIO_VALUE                                          = 140,          /**< Set GPIO Value. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_MDIO                                                = 141,          /**< Get MDIO. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_MDIO                                                = 142,          /**< Set MDIO. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_LOOPBACK_ENABLE                                         = 143,          /**< Loopback Enable. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_LOOPBACK_DISABLE                                        = 144,          /**< Loopback Disable. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLR_UP_CLASS                                            = 145,          /**< Clr Up Class. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLR_DN_CLASS                                            = 146,          /**< Clr Dn Class. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_QUEUE_CONFIG                                        = 147,          /**< Set Queue Config. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_QUEUE_CONFIG                                        = 148,          /**< Get Queue Config. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ERASE_NVS                                               = 149,          /**< Erase NVS. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_IGMP_CONFIG                                         = 150,          /**< Set IGMP Config. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_IGMP_CONFIG                                         = 151,          /**< Get IGMP Config. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_IGMP_GROUP_INFO                                     = 152,          /**< Get IGMP Group Info. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DEL_IGMP_GROUP                                          = 153,          /**< Del IGMP Group. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ADD_IGMP_GROUP                                          = 154,          /**< Add IGMP Group. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_QUEUE_RATE_CONTROL                                  = 155,          /**< Set Queue Rate Control. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_QUEUE_RATE_CONTROL                                  = 156,          /**< Get Queue Rate Control. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_PORT_RATE_CONTROL                                   = 157,          /**< Set Port Rate Control. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_PORT_RATE_CONTROL                                   = 158,          /**< Get Port Rate Control. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_PHY_ADDR_MDIO                                       = 159,          /**< Set PHY Addr MDIO. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_PHY_ADDR_MDIO                                       = 160,          /**< Get PHY Addr MDIO. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_NEW_ADD_RULE                                            = 161,          /**< New Add Rule. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ONU_ENABLE_USER_TRAFFIC                                 = 162,          /**< ONU Enable User Traffic. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ONU_DISABLE_USER_TRAFFIC                                = 163,          /**< ONU Disable User Traffic. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_DN_BCAST_QUEUE                                      = 164,          /**< Set Dn Bcast Queue. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_DN_BCAST_QUEUE                                      = 165,          /**< Get Dn Bcast Queue. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_OAM_RATE                                            = 166,          /**< Set OAM Rate. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_OAM_RATE                                            = 167,          /**< Get OAM Rate. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SET_LUE_FIELD                                           = 168,          /**< Set LUE Field. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_LUE_FIELD                                           = 169,          /**< Get LUE Field. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_LOAD_INFO                                           = 170,          /**< Get Load Info. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_NEW_DEL_RULE                                            = 171,          /**< New Del Rule. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_UP_USER_RULES                                     = 172,          /**< Clear Up User Rules. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_DN_USER_RULES                                     = 173,          /**< Clear Dn User Rules. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DELETE_MCAST_DOMAIN_CONFIG                              = 174,          /**< Delete Mcast Domain Config. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DELETE_MCAST_GROUP                                      = 175,          /**< Delete Mcast Group. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_LASER_TX_POWER_OFF                                      = 176,          /**< Laser Tx Power Off. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_BC_LASER_POWER_OFF                                      = 177,          /**< Bc Laser Power Off. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_SLEEP                                                   = 178,          /**< Sleep. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_PROTECTION_SWITCH                                       = 179,          /**< Protection Switch. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ADD_LUE_RULE                                            = 181,          /**< Add LUE Rule. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DEL_LUE_RULE                                            = 182,          /**< Del LUE Rule. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_ENABLE_POLICER                                          = 183,          /**< Enable Policer. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_DISABLE_POLICER                                         = 184,          /**< Disable Policer. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_EPOC_UNUSED0                                            = 202,          /**< Epoc Unused 0. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_EPOC_UNUSED1                                            = 203,          /**< Epoc Unused 1. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_FIND_LUE_RULE                                           = 207,          /**< Find LUE Rule. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_CLEAR_LUE_RULE_TABLE                                    = 208,          /**< Clear LUE Rule Table. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_EPOC_SDM_STATS                                      = 209,          /**< Get EPoC SDM Stats. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_EPOC_CMC_STATS                                      = 210,          /**< Get EPoC CMC Stats. */
+    BCMOLT_EPON_OAM_TEK_LEAF_ACTION_GET_EPOC_CNU_STATS                                      = 211           /**< Get EPoC CNU Stats. */
+} bcmolt_epon_oam_tek_leaf_action;
+
+/** Tek ONU Rule Flags. 
+ */
+typedef enum bcmolt_epon_oam_tek_onu_rule_flags
+{
+    BCMOLT_EPON_OAM_TEK_ONU_RULE_FLAGS_NONE                                                 = 0,
+    BCMOLT_EPON_OAM_TEK_ONU_RULE_FLAGS_VOLATILE                                             = 0x0001        /**< Volatile. */
+} bcmolt_epon_oam_tek_onu_rule_flags;
+
+/** Tek ONU Rule Action. 
+ */
+typedef enum bcmolt_epon_oam_tek_onu_rule_action
+{
+    BCMOLT_EPON_OAM_TEK_ONU_RULE_ACTION_FORWARD_UNAFFECTED                                  = 0,            /**< Forward Unaffected. */
+    BCMOLT_EPON_OAM_TEK_ONU_RULE_ACTION_RESERVED1                                           = 1,            /**< Reserved1. */
+    BCMOLT_EPON_OAM_TEK_ONU_RULE_ACTION_SET_DESTINATION                                     = 2,            /**< Set Destination. */
+    BCMOLT_EPON_OAM_TEK_ONU_RULE_ACTION_ADD_VLAN_TAG                                        = 3,            /**< Add VLAN Tag. */
+    BCMOLT_EPON_OAM_TEK_ONU_RULE_ACTION_DELETE_VLAN_TAG                                     = 4,            /**< Delete VLAN Tag. */
+    BCMOLT_EPON_OAM_TEK_ONU_RULE_ACTION_SET_VID_ADD_VLAN_TAG                                = 5,            /**< Set VID Add VLAN Tag. */
+    BCMOLT_EPON_OAM_TEK_ONU_RULE_ACTION_SET_COS                                             = 6,            /**< Set CoS. */
+    BCMOLT_EPON_OAM_TEK_ONU_RULE_ACTION_DELETE_TAG_ADD_TAG                                  = 7,            /**< Delete Tag Add Tag. */
+    BCMOLT_EPON_OAM_TEK_ONU_RULE_ACTION_DELETE_TAG_ADD_TAG_SET_VID                          = 8,            /**< Delete Tag Add Tag Set VID. */
+    BCMOLT_EPON_OAM_TEK_ONU_RULE_ACTION_CLEAR_ADD_TAG                                       = 9,            /**< Clear Add Tag. */
+    BCMOLT_EPON_OAM_TEK_ONU_RULE_ACTION_CLEAR_DEL_TAG                                       = 10,           /**< Clear Del Tag. */
+    BCMOLT_EPON_OAM_TEK_ONU_RULE_ACTION_CLEAR_DEL_TAG_AND_ADD_TAG                           = 11,           /**< Clear Del Tag And Add Tag. */
+    BCMOLT_EPON_OAM_TEK_ONU_RULE_ACTION_COPY_FIELD_TO_COS                                   = 12,           /**< Copy Field To CoS. */
+    BCMOLT_EPON_OAM_TEK_ONU_RULE_ACTION_COPY_FIELD_TO_VID                                   = 13,           /**< Copy Field To VID. */
+    BCMOLT_EPON_OAM_TEK_ONU_RULE_ACTION_DISCARD                                             = 14,           /**< Discard. */
+    BCMOLT_EPON_OAM_TEK_ONU_RULE_ACTION_RESERVED2                                           = 15,           /**< Reserved2. */
+    BCMOLT_EPON_OAM_TEK_ONU_RULE_ACTION_FORWARD_CLEAR_DISCARD                               = 16,           /**< Forward Clear Discard. */
+    BCMOLT_EPON_OAM_TEK_ONU_RULE_ACTION_RESERVED3                                           = 17,           /**< Reserved3. */
+    BCMOLT_EPON_OAM_TEK_ONU_RULE_ACTION_SET_DESTINATION_FORWARD                             = 18,           /**< Set Destination Forward. */
+    BCMOLT_EPON_OAM_TEK_ONU_RULE_ACTION_ADD_TAG_FORWARD                                     = 19,           /**< Add Tag Forward. */
+    BCMOLT_EPON_OAM_TEK_ONU_RULE_ACTION_DELETE_TAG_FORWARD                                  = 20,           /**< Delete Tag Forward. */
+    BCMOLT_EPON_OAM_TEK_ONU_RULE_ACTION_SET_VID_ADD_TAG_FORWARD                             = 21,           /**< Set VID Add Tag Forward. */
+    BCMOLT_EPON_OAM_TEK_ONU_RULE_ACTION_SET_COS_FORWARD                                     = 22,           /**< Set CoS Forward. */
+    BCMOLT_EPON_OAM_TEK_ONU_RULE_ACTION_DELETE_TAG_ADD_TAG_REPLACE_TAG_FORWARD              = 23,           /**< Delete Tag Add Tag Replace Tag Forward. */
+    BCMOLT_EPON_OAM_TEK_ONU_RULE_ACTION_DELETE_TAG_ADD_TAG_SET_VID_FORWARD                  = 24,           /**< Delete Tag Add Tag Set VID Forward. */
+    BCMOLT_EPON_OAM_TEK_ONU_RULE_ACTION_CLEAR_ADD_TAG_FORWARD                               = 25,           /**< Clear Add Tag Forward. */
+    BCMOLT_EPON_OAM_TEK_ONU_RULE_ACTION_CLEAR_DEL_TAG_FORWARD                               = 26,           /**< Clear Del Tag Forward. */
+    BCMOLT_EPON_OAM_TEK_ONU_RULE_ACTION_CLEAR_DEL_TAG_AND_ADD_TAG_FORWARD                   = 27,           /**< Clear Del Tag And Add Tag Forward. */
+    BCMOLT_EPON_OAM_TEK_ONU_RULE_ACTION_COPY_FIELD_TO_COS_FORWARD                           = 28,           /**< Copy Field To CoS Forward. */
+    BCMOLT_EPON_OAM_TEK_ONU_RULE_ACTION_COPY_FIELD_TO_VID_FORWARD                           = 29,           /**< Copy Field To VID Forward. */
+    BCMOLT_EPON_OAM_TEK_ONU_RULE_ACTION_RESERVED4                                           = 30,           /**< Reserved4. */
+    BCMOLT_EPON_OAM_TEK_ONU_RULE_ACTION_RESERVED5                                           = 31            /**< Reserved5. */
+} bcmolt_epon_oam_tek_onu_rule_action;
+
+/** Tek ONU Field Select. 
+ */
+typedef enum bcmolt_epon_oam_tek_onu_field_select
+{
+    BCMOLT_EPON_OAM_TEK_ONU_FIELD_SELECT_DA                                                 = 0,            /**< DA. */
+    BCMOLT_EPON_OAM_TEK_ONU_FIELD_SELECT_SA                                                 = 1,            /**< SA. */
+    BCMOLT_EPON_OAM_TEK_ONU_FIELD_SELECT_LLID                                               = 2,            /**< LLID. */
+    BCMOLT_EPON_OAM_TEK_ONU_FIELD_SELECT_ETHER_TYPE                                         = 3,            /**< EtherType. */
+    BCMOLT_EPON_OAM_TEK_ONU_FIELD_SELECT_VLAN                                               = 4,            /**< VLAN. */
+    BCMOLT_EPON_OAM_TEK_ONU_FIELD_SELECT_USER_FS                                            = 5,            /**< User FS. */
+    BCMOLT_EPON_OAM_TEK_ONU_FIELD_SELECT_IPPROTOCOL                                         = 6,            /**< IP Protocol. */
+    BCMOLT_EPON_OAM_TEK_ONU_FIELD_SELECT_CTC_ETH_COS                                        = 10,           /**< CTC Eth CoS. */
+    BCMOLT_EPON_OAM_TEK_ONU_FIELD_SELECT_L3PROTOCOL_TYPE                                    = 11            /**< L3 Protocol Type. */
+} bcmolt_epon_oam_tek_onu_field_select;
+
+/** Tek ONU Rule Operator. 
+ */
+typedef enum bcmolt_epon_oam_tek_onu_rule_operator
+{
+    BCMOLT_EPON_OAM_TEK_ONU_RULE_OPERATOR_NEVER_MATCH                                       = 0,            /**< Never Match. */
+    BCMOLT_EPON_OAM_TEK_ONU_RULE_OPERATOR_EQUAL_TO                                          = 1,            /**< Equal To. */
+    BCMOLT_EPON_OAM_TEK_ONU_RULE_OPERATOR_NOT_EQUAL_TO                                      = 2,            /**< Not Equal To. */
+    BCMOLT_EPON_OAM_TEK_ONU_RULE_OPERATOR_LESS_THAN_OR_EQUAL_TO                             = 3,            /**< Less Than Or Equal To. */
+    BCMOLT_EPON_OAM_TEK_ONU_RULE_OPERATOR_GREATER_THAN_OR_EQUAL_TO                          = 4,            /**< Greater Than Or Equal To. */
+    BCMOLT_EPON_OAM_TEK_ONU_RULE_OPERATOR_EXISTS                                            = 5,            /**< Exists. */
+    BCMOLT_EPON_OAM_TEK_ONU_RULE_OPERATOR_NOT_EXISTS                                        = 6,            /**< Not Exists. */
+    BCMOLT_EPON_OAM_TEK_ONU_RULE_OPERATOR_ALWAYS_MATCH                                      = 7             /**< Always Match. */
+} bcmolt_epon_oam_tek_onu_rule_operator;
+
+/** ONU PS State. 
+ */
+typedef enum bcmolt_epon_oam_onu_psstate
+{
+    BCMOLT_EPON_OAM_ONU_PSSTATE_NONE                                                        = 0,
+    BCMOLT_EPON_OAM_ONU_PSSTATE_SWITCHED                                                    = 0x0001,       /**< Switched. */
+    BCMOLT_EPON_OAM_ONU_PSSTATE_SIGNAL_DETECT_A                                             = 0x0002,       /**< Signal Detect A. */
+    BCMOLT_EPON_OAM_ONU_PSSTATE_SIGNAL_DETECT_B                                             = 0x0004        /**< Signal Detect B. */
+} bcmolt_epon_oam_onu_psstate;
+
+/** Tek Learn Table Mode. 
+ */
+typedef enum bcmolt_epon_oam_tek_learn_table_mode
+{
+    BCMOLT_EPON_OAM_TEK_LEARN_TABLE_MODE_OVERFLOW                                           = 0,            /**< Overflow. */
+    BCMOLT_EPON_OAM_TEK_LEARN_TABLE_MODE_OVERWRITE                                          = 1             /**< Overwrite. */
+} bcmolt_epon_oam_tek_learn_table_mode;
+
+/** Tek VLAN Destination Match Mode. 
+ */
+typedef enum bcmolt_epon_oam_tek_vlan_destination_match_mode
+{
+    BCMOLT_EPON_OAM_TEK_VLAN_DESTINATION_MATCH_MODE_DA                                      = 0,            /**< DA. */
+    BCMOLT_EPON_OAM_TEK_VLAN_DESTINATION_MATCH_MODE_VID                                     = 1,            /**< VID. */
+    BCMOLT_EPON_OAM_TEK_VLAN_DESTINATION_MATCH_MODE_COS                                     = 2,            /**< CoS. */
+    BCMOLT_EPON_OAM_TEK_VLAN_DESTINATION_MATCH_MODE_VID_COS                                 = 3             /**< VID/CoS. */
+} bcmolt_epon_oam_tek_vlan_destination_match_mode;
+
+/** Tek VLAN Destination Flags. 
+ */
+typedef enum bcmolt_epon_oam_tek_vlan_destination_flags
+{
+    BCMOLT_EPON_OAM_TEK_VLAN_DESTINATION_FLAGS_NONE                                         = 0,
+    BCMOLT_EPON_OAM_TEK_VLAN_DESTINATION_FLAGS_DROP_UNTAGGED                                = 0x0001,       /**< Drop Untagged. */
+    BCMOLT_EPON_OAM_TEK_VLAN_DESTINATION_FLAGS_STRIP_VLAN_TAG                               = 0x0002        /**< Strip VLAN Tag. */
+} bcmolt_epon_oam_tek_vlan_destination_flags;
+
+/** Tek Encryption Mode. 
+ */
+typedef enum bcmolt_epon_oam_tek_encryption_mode
+{
+    BCMOLT_EPON_OAM_TEK_ENCRYPTION_MODE_DISABLED                                            = 0,            /**< Disabled. */
+    BCMOLT_EPON_OAM_TEK_ENCRYPTION_MODE_AES                                                 = 1,            /**< AES. */
+    BCMOLT_EPON_OAM_TEK_ENCRYPTION_MODE_ZOH                                                 = 2,            /**< ZOH. */
+    BCMOLT_EPON_OAM_TEK_ENCRYPTION_MODE_CTC                                                 = 3             /**< CTC. */
+} bcmolt_epon_oam_tek_encryption_mode;
+
+/** Tek Encryption Options. 
+ */
+typedef enum bcmolt_epon_oam_tek_encryption_options
+{
+    BCMOLT_EPON_OAM_TEK_ENCRYPTION_OPTIONS_NONE                                             = 0,
+    BCMOLT_EPON_OAM_TEK_ENCRYPTION_OPTIONS_BI_DIRECTIONAL                                   = 0x0001        /**< Bi-Directional. */
+} bcmolt_epon_oam_tek_encryption_options;
+
+/** Rule Field Select. 
+ */
+typedef enum bcmolt_epon_oam_rule_field_select
+{
+    BCMOLT_EPON_OAM_RULE_FIELD_SELECT_L2DA                                                  = 0,            /**< L2 DA. */
+    BCMOLT_EPON_OAM_RULE_FIELD_SELECT_L2SA                                                  = 1,            /**< L2 SA. */
+    BCMOLT_EPON_OAM_RULE_FIELD_SELECT_L2TYPE                                                = 2,            /**< L2 Type. */
+    BCMOLT_EPON_OAM_RULE_FIELD_SELECT_L2SVLAN                                               = 3,            /**< L2 SVlan. */
+    BCMOLT_EPON_OAM_RULE_FIELD_SELECT_L2CVLAN                                               = 4,            /**< L2 CVlan. */
+    BCMOLT_EPON_OAM_RULE_FIELD_SELECT_UDP_TCP_SOURCE_PORT                                   = 5,            /**< Udp Tcp Source Port. */
+    BCMOLT_EPON_OAM_RULE_FIELD_SELECT_UDP_TCP_DESTINATION_PORT                              = 6,            /**< Udp Tcp Destination Port. */
+    BCMOLT_EPON_OAM_RULE_FIELD_SELECT_IP_PROTOCOL                                           = 7,            /**< Ip Protocol. */
+    BCMOLT_EPON_OAM_RULE_FIELD_SELECT_IPV4TTL_IPV6HOP_LIMIT                                 = 8,            /**< IPV4 Ttl IPV6 Hop Limit. */
+    BCMOLT_EPON_OAM_RULE_FIELD_SELECT_IPV4TOS_IPV6CLASS                                     = 9,            /**< IPV4 Tos IPV6 Class. */
+    BCMOLT_EPON_OAM_RULE_FIELD_SELECT_IPV4IPV6DA                                            = 10,           /**< IPV4 IPV6 DA. */
+    BCMOLT_EPON_OAM_RULE_FIELD_SELECT_IPV6DAHI                                              = 11,           /**< IPV6 DA Hi. */
+    BCMOLT_EPON_OAM_RULE_FIELD_SELECT_IPV4IPV6SA                                            = 12,           /**< IPV4 IPV6 SA. */
+    BCMOLT_EPON_OAM_RULE_FIELD_SELECT_IPV6SAHI                                              = 13,           /**< IPV6 SA Hi. */
+    BCMOLT_EPON_OAM_RULE_FIELD_SELECT_IPV6NEXT_HEADER_BIT                                   = 14,           /**< IPV6 Next Header Bit. */
+    BCMOLT_EPON_OAM_RULE_FIELD_SELECT_LLID_MAC_ID                                           = 15,           /**< LLID Mac Id. */
+    BCMOLT_EPON_OAM_RULE_FIELD_SELECT_USER16BIT_FIELD0                                      = 16,           /**< User 16 Bit Field 0. */
+    BCMOLT_EPON_OAM_RULE_FIELD_SELECT_USER16BIT_FIELD1                                      = 17,           /**< User 16 Bit Field 1. */
+    BCMOLT_EPON_OAM_RULE_FIELD_SELECT_USER16BIT_FIELD2                                      = 18,           /**< User 16 Bit Field 2. */
+    BCMOLT_EPON_OAM_RULE_FIELD_SELECT_USER16BIT_FIELD3                                      = 19,           /**< User 16 Bit Field 3. */
+    BCMOLT_EPON_OAM_RULE_FIELD_SELECT_USER16BIT_FIELD4                                      = 20,           /**< User 16 Bit Field 4. */
+    BCMOLT_EPON_OAM_RULE_FIELD_SELECT_USER32BIT_FIELD5                                      = 21,           /**< User 32 Bit Field 5. */
+    BCMOLT_EPON_OAM_RULE_FIELD_SELECT_USER32BIT_FIELD6                                      = 22,           /**< User 32 Bit Field 6. */
+    BCMOLT_EPON_OAM_RULE_FIELD_SELECT_PTP_TIME_STAMP                                        = 23,           /**< PTP Time Stamp. */
+    BCMOLT_EPON_OAM_RULE_FIELD_SELECT_POLICER_ELEMENT                                       = 24,           /**< Policer Element. */
+    BCMOLT_EPON_OAM_RULE_FIELD_SELECT_VAR_QUEUE                                             = 25,           /**< Var Queue. */
+    BCMOLT_EPON_OAM_RULE_FIELD_SELECT_VAR_LEARNING_DOMAIN                                   = 26,           /**< Var Learning Domain. */
+    BCMOLT_EPON_OAM_RULE_FIELD_SELECT_VAR_PORT_DISCARD                                      = 27,           /**< Var Port Discard. */
+    BCMOLT_EPON_OAM_RULE_FIELD_SELECT_VAR_STATISTIC_POINTER                                 = 28,           /**< Var Statistic Pointer. */
+    BCMOLT_EPON_OAM_RULE_FIELD_SELECT_VAR_SWITCHING_DOMAIN                                  = 29,           /**< Var Switching Domain. */
+    BCMOLT_EPON_OAM_RULE_FIELD_SELECT_VAR_POLICER1                                          = 30,           /**< Var Policer 1. */
+    BCMOLT_EPON_OAM_RULE_FIELD_SELECT_VAR_POLICER2                                          = 31,           /**< Var Policer 2. */
+    BCMOLT_EPON_OAM_RULE_FIELD_SELECT_VAR_POLICER3                                          = 32,           /**< Var Policer 3. */
+    BCMOLT_EPON_OAM_RULE_FIELD_SELECT_VAR_POLICER4                                          = 33,           /**< Var Policer 4. */
+    BCMOLT_EPON_OAM_RULE_FIELD_SELECT_VAR_SSM_SOURCE_ID                                     = 34,           /**< Var Ssm Source Id. */
+    BCMOLT_EPON_OAM_RULE_FIELD_SELECT_VAR_INDEX_TABLE_POINTER                               = 35,           /**< Var Index Table Pointer. */
+    BCMOLT_EPON_OAM_RULE_FIELD_SELECT_FRAME_LENGTH                                          = 36,           /**< Frame Length. */
+    BCMOLT_EPON_OAM_RULE_FIELD_SELECT_FRAME_DISCARD                                         = 37            /**< Frame Discard. */
+} bcmolt_epon_oam_rule_field_select;
+
+/** Rule Action. 
+ */
+typedef enum bcmolt_epon_oam_rule_action
+{
+    BCMOLT_EPON_OAM_RULE_ACTION_STOP                                                        = 0,            /**< Stop. */
+    BCMOLT_EPON_OAM_RULE_ACTION_NOP                                                         = 1,            /**< Nop. */
+    BCMOLT_EPON_OAM_RULE_ACTION_VLAN_ADD_SET                                                = 2,            /**< Vlan Add Set. */
+    BCMOLT_EPON_OAM_RULE_ACTION_VLAN_ADD_CLEAR                                              = 3,            /**< Vlan Add Clear. */
+    BCMOLT_EPON_OAM_RULE_ACTION_VLAN_DEL_SET                                                = 4,            /**< Vlan Del Set. */
+    BCMOLT_EPON_OAM_RULE_ACTION_VLAN_DEL_CLEAR                                              = 5,            /**< Vlan Del Clear. */
+    BCMOLT_EPON_OAM_RULE_ACTION_DISCARD_SET                                                 = 6,            /**< Discard Set. */
+    BCMOLT_EPON_OAM_RULE_ACTION_DISCARD_CLEAR                                               = 7,            /**< Discard Clear. */
+    BCMOLT_EPON_OAM_RULE_ACTION_SET_QUEUE                                                   = 8,            /**< Set Queue. */
+    BCMOLT_EPON_OAM_RULE_ACTION_SET_LEARNING_DOMAIN                                         = 9,            /**< Set Learning Domain. */
+    BCMOLT_EPON_OAM_RULE_ACTION_SET_PORT_DISCARD                                            = 10,           /**< Set Port Discard. */
+    BCMOLT_EPON_OAM_RULE_ACTION_SET_STATISTIC_POINTER                                       = 11,           /**< Set Statistic Pointer. */
+    BCMOLT_EPON_OAM_RULE_ACTION_SET_SWITCHING_DOMAIN                                        = 12,           /**< Set Switching Domain. */
+    BCMOLT_EPON_OAM_RULE_ACTION_SET_POLICER1                                                = 13,           /**< Set Policer 1. */
+    BCMOLT_EPON_OAM_RULE_ACTION_SET_POLICER2                                                = 14,           /**< Set Policer 2. */
+    BCMOLT_EPON_OAM_RULE_ACTION_SET_POLICER3                                                = 15,           /**< Set Policer 3. */
+    BCMOLT_EPON_OAM_RULE_ACTION_SET_POLICER4                                                = 16,           /**< Set Policer 4. */
+    BCMOLT_EPON_OAM_RULE_ACTION_SET_SSM_SOURCE_ID                                           = 17,           /**< Set Ssm Source Id. */
+    BCMOLT_EPON_OAM_RULE_ACTION_SET_INDEX_TABLE_POINTER                                     = 18,           /**< Set Index Table Pointer. */
+    BCMOLT_EPON_OAM_RULE_ACTION_SET_VID_CFI                                                 = 19,           /**< Set Vid Cfi. */
+    BCMOLT_EPON_OAM_RULE_ACTION_SET_COS                                                     = 20,           /**< Set Cos. */
+    BCMOLT_EPON_OAM_RULE_ACTION_SET_TPID                                                    = 21,           /**< Set Tpid. */
+    BCMOLT_EPON_OAM_RULE_ACTION_OR_QUEUE                                                    = 22,           /**< Or Queue. */
+    BCMOLT_EPON_OAM_RULE_ACTION_OR_LEARNING_DOMAIN                                          = 23,           /**< Or Learning Domain. */
+    BCMOLT_EPON_OAM_RULE_ACTION_OR_PORT_DISCARD                                             = 24,           /**< Or Port Discard. */
+    BCMOLT_EPON_OAM_RULE_ACTION_OR_STATISTIC_POINTER                                        = 25,           /**< Or Statistic Pointer. */
+    BCMOLT_EPON_OAM_RULE_ACTION_OR_SWITCHING_DOMAIN                                         = 26,           /**< Or Switching Domain. */
+    BCMOLT_EPON_OAM_RULE_ACTION_OR_POLICER1                                                 = 27,           /**< Or Policer 1. */
+    BCMOLT_EPON_OAM_RULE_ACTION_OR_POLICER2                                                 = 28,           /**< Or Policer 2. */
+    BCMOLT_EPON_OAM_RULE_ACTION_OR_POLICER3                                                 = 29,           /**< Or Policer 3. */
+    BCMOLT_EPON_OAM_RULE_ACTION_OR_POLICER4                                                 = 30,           /**< Or Policer 4. */
+    BCMOLT_EPON_OAM_RULE_ACTION_OR_SSM_SOURCE_ID                                            = 31,           /**< Or Ssm Source Id. */
+    BCMOLT_EPON_OAM_RULE_ACTION_OR_INDEX_TABLE_POINTER                                      = 32,           /**< Or Index Table Pointer. */
+    BCMOLT_EPON_OAM_RULE_ACTION_OR_VID_CFI                                                  = 33,           /**< Or Vid Cfi. */
+    BCMOLT_EPON_OAM_RULE_ACTION_OR_COS                                                      = 34,           /**< Or Cos. */
+    BCMOLT_EPON_OAM_RULE_ACTION_OR_TPID                                                     = 35,           /**< Or Tpid. */
+    BCMOLT_EPON_OAM_RULE_ACTION_AND_QUEUE                                                   = 36,           /**< And Queue. */
+    BCMOLT_EPON_OAM_RULE_ACTION_AND_LEARNING_DOMAIN                                         = 37,           /**< And Learning Domain. */
+    BCMOLT_EPON_OAM_RULE_ACTION_AND_PORT_DISCARD                                            = 38,           /**< And Port Discard. */
+    BCMOLT_EPON_OAM_RULE_ACTION_AND_STATISTIC_POINTER                                       = 39,           /**< And Statistic Pointer. */
+    BCMOLT_EPON_OAM_RULE_ACTION_AND_SWITCHING_DOMAIN                                        = 40,           /**< And Switching Domain. */
+    BCMOLT_EPON_OAM_RULE_ACTION_AND_POLICER1                                                = 41,           /**< And Policer 1. */
+    BCMOLT_EPON_OAM_RULE_ACTION_AND_POLICER2                                                = 42,           /**< And Policer 2. */
+    BCMOLT_EPON_OAM_RULE_ACTION_AND_POLICER3                                                = 43,           /**< And Policer 3. */
+    BCMOLT_EPON_OAM_RULE_ACTION_AND_POLICER4                                                = 44,           /**< And Policer 4. */
+    BCMOLT_EPON_OAM_RULE_ACTION_AND_SSM_SOURCE_ID                                           = 45,           /**< And Ssm Source Id. */
+    BCMOLT_EPON_OAM_RULE_ACTION_AND_INDEX_TABLE_POINTER                                     = 46,           /**< And Index Table Pointer. */
+    BCMOLT_EPON_OAM_RULE_ACTION_AND_VID_CFI                                                 = 47,           /**< And Vid Cfi. */
+    BCMOLT_EPON_OAM_RULE_ACTION_AND_COS                                                     = 48,           /**< And Cos. */
+    BCMOLT_EPON_OAM_RULE_ACTION_AND_TPID                                                    = 49,           /**< And Tpid. */
+    BCMOLT_EPON_OAM_RULE_ACTION_ADDQUEUE                                                    = 50,           /**< AddQueue. */
+    BCMOLT_EPON_OAM_RULE_ACTION_ADD_LEARNING_DOMAIN                                         = 51,           /**< Add Learning Domain. */
+    BCMOLT_EPON_OAM_RULE_ACTION_ADD_PORT_DISCARD                                            = 52,           /**< Add Port Discard. */
+    BCMOLT_EPON_OAM_RULE_ACTION_ADD_STATISTIC_POINTER                                       = 53,           /**< Add Statistic Pointer. */
+    BCMOLT_EPON_OAM_RULE_ACTION_ADD_SWITCHING_DOMAIN                                        = 54,           /**< Add Switching Domain. */
+    BCMOLT_EPON_OAM_RULE_ACTION_ADD_POLICER1                                                = 55,           /**< Add Policer 1. */
+    BCMOLT_EPON_OAM_RULE_ACTION_ADD_POLICER2                                                = 56,           /**< Add Policer 2. */
+    BCMOLT_EPON_OAM_RULE_ACTION_ADD_POLICER3                                                = 57,           /**< Add Policer 3. */
+    BCMOLT_EPON_OAM_RULE_ACTION_ADD_POLICER4                                                = 58,           /**< Add Policer 4. */
+    BCMOLT_EPON_OAM_RULE_ACTION_ADD_SSM_SOURCE_ID                                           = 59,           /**< Add Ssm Source Id. */
+    BCMOLT_EPON_OAM_RULE_ACTION_ADD_INDEX_TABLE_POINTER                                     = 60,           /**< Add Index Table Pointer. */
+    BCMOLT_EPON_OAM_RULE_ACTION_ADD_VID_CFI                                                 = 61,           /**< Add Vid Cfi. */
+    BCMOLT_EPON_OAM_RULE_ACTION_ADD_COD                                                     = 62,           /**< Add Cod. */
+    BCMOLT_EPON_OAM_RULE_ACTION_ADD_TPID                                                    = 63,           /**< Add Tpid. */
+    BCMOLT_EPON_OAM_RULE_ACTION_SHIFT_QUEUE                                                 = 64,           /**< Shift Queue. */
+    BCMOLT_EPON_OAM_RULE_ACTION_SHIFT_LEARNING_DOMAIN                                       = 65,           /**< Shift Learning Domain. */
+    BCMOLT_EPON_OAM_RULE_ACTION_SHIFT_PORT_DISCARD                                          = 66,           /**< Shift Port Discard. */
+    BCMOLT_EPON_OAM_RULE_ACTION_SHIFT_STATISTIC_POINTER                                     = 67,           /**< Shift Statistic Pointer. */
+    BCMOLT_EPON_OAM_RULE_ACTION_SHIFT_SWITCHING_DOMAIN                                      = 68,           /**< Shift Switching Domain. */
+    BCMOLT_EPON_OAM_RULE_ACTION_SHIFT_POLICER1                                              = 69,           /**< Shift Policer 1. */
+    BCMOLT_EPON_OAM_RULE_ACTION_SHIFT_POLICER2                                              = 70,           /**< Shift Policer 2. */
+    BCMOLT_EPON_OAM_RULE_ACTION_SHIFT_POLICER3                                              = 71,           /**< Shift Policer 3. */
+    BCMOLT_EPON_OAM_RULE_ACTION_SHIFT_POLICER4                                              = 72,           /**< Shift Policer 4. */
+    BCMOLT_EPON_OAM_RULE_ACTION_SHIFT_SSM_SOURCE_ID                                         = 73,           /**< Shift Ssm Source Id. */
+    BCMOLT_EPON_OAM_RULE_ACTION_SHIFT_INDEX_TABLE_POINTER                                   = 74,           /**< Shift Index Table Pointer. */
+    BCMOLT_EPON_OAM_RULE_ACTION_SHIFT_VID_CFI                                               = 75,           /**< Shift Vid Cfi. */
+    BCMOLT_EPON_OAM_RULE_ACTION_SHIFT_COD                                                   = 76,           /**< Shift Cod. */
+    BCMOLT_EPON_OAM_RULE_ACTION_SHIFT_TPID                                                  = 77,           /**< Shift Tpid. */
+    BCMOLT_EPON_OAM_RULE_ACTION_COPY_QUEUE                                                  = 78,           /**< Copy Queue. */
+    BCMOLT_EPON_OAM_RULE_ACTION_COPY_LEARNING_DOMAIN                                        = 79,           /**< Copy Learning Domain. */
+    BCMOLT_EPON_OAM_RULE_ACTION_COPY_PORT_DISCARD                                           = 80,           /**< Copy Port Discard. */
+    BCMOLT_EPON_OAM_RULE_ACTION_COPY_STATISTIC_POINTER                                      = 81,           /**< Copy Statistic Pointer. */
+    BCMOLT_EPON_OAM_RULE_ACTION_COPY_SWITCHING_DOMAIN                                       = 82,           /**< Copy Switching Domain. */
+    BCMOLT_EPON_OAM_RULE_ACTION_COPY_POLICER1                                               = 83,           /**< Copy Policer 1. */
+    BCMOLT_EPON_OAM_RULE_ACTION_COPY_POLICER2                                               = 84,           /**< Copy Policer 2. */
+    BCMOLT_EPON_OAM_RULE_ACTION_COPY_POLICER3                                               = 85,           /**< Copy Policer 3. */
+    BCMOLT_EPON_OAM_RULE_ACTION_COPY_POLICER4                                               = 86,           /**< Copy Policer 4. */
+    BCMOLT_EPON_OAM_RULE_ACTION_COPY_SSM_SOURCE_ID                                          = 87,           /**< Copy Ssm Source Id. */
+    BCMOLT_EPON_OAM_RULE_ACTION_COPY_INDEX_TABLE_POINTER                                    = 88,           /**< Copy Index Table Pointer. */
+    BCMOLT_EPON_OAM_RULE_ACTION_COPY_VID_CFI                                                = 89,           /**< Copy Vid Cfi. */
+    BCMOLT_EPON_OAM_RULE_ACTION_COPY_COD                                                    = 90,           /**< Copy Cod. */
+    BCMOLT_EPON_OAM_RULE_ACTION_COPY_TPID                                                   = 91            /**< Copy Tpid. */
+} bcmolt_epon_oam_rule_action;
+
+/** Version maturity 
+ */
+typedef enum bcmolt_epon_oam_tek_maturity
+{
+    BCMOLT_EPON_OAM_TEK_MATURITY_RELEASE                                                    = 82,           /**< Release. */
+    BCMOLT_EPON_OAM_TEK_MATURITY_CUSTOM                                                     = 67,           /**< Custom. */
+    BCMOLT_EPON_OAM_TEK_MATURITY_BETA                                                       = 66,           /**< Beta. */
+    BCMOLT_EPON_OAM_TEK_MATURITY_ALPHA                                                      = 65,           /**< Alpha. */
+    BCMOLT_EPON_OAM_TEK_MATURITY_ENGINEERING                                                = 69,           /**< Engineering. */
+    BCMOLT_EPON_OAM_TEK_MATURITY_DEVELOPMENT                                                = 68            /**< Development. */
+} bcmolt_epon_oam_tek_maturity;
+
+/** File Type. 
+ */
+typedef enum bcmolt_epon_oam_file_type
+{
+    BCMOLT_EPON_OAM_FILE_TYPE_BOOT                                                          = 0,            /**< Boot. */
+    BCMOLT_EPON_OAM_FILE_TYPE_APP_MAIN                                                      = 1,            /**< App Main. */
+    BCMOLT_EPON_OAM_FILE_TYPE_APP_BACKUP                                                    = 2             /**< App Backup. */
+} bcmolt_epon_oam_file_type;
+
+/** NVS State. 
+ */
+typedef enum bcmolt_epon_oam_nvs_state
+{
+    BCMOLT_EPON_OAM_NVS_STATE_ENABLED                                                       = 0,            /**< Enabled. */
+    BCMOLT_EPON_OAM_NVS_STATE_DISABLED                                                      = 1             /**< Disabled. */
+} bcmolt_epon_oam_nvs_state;
+
+/** Tek Queue Config V2 Subtype. 
+ */
+typedef enum bcmolt_epon_oam_tek_queue_config_v2subtype
+{
+    BCMOLT_EPON_OAM_TEK_QUEUE_CONFIG_V2SUBTYPE_TERMINATOR                                   = 0,            /**< Used to end a queue config container chain */
+    BCMOLT_EPON_OAM_TEK_QUEUE_CONFIG_V2SUBTYPE_HEADER                                       = 1,            /**< Used to start a queue config container chain */
+    BCMOLT_EPON_OAM_TEK_QUEUE_CONFIG_V2SUBTYPE_LINK                                         = 2,            /**< Used to define a link queue config */
+    BCMOLT_EPON_OAM_TEK_QUEUE_CONFIG_V2SUBTYPE_PORT                                         = 3             /**< Used to define a port queue config */
+} bcmolt_epon_oam_tek_queue_config_v2subtype;
+
+/** Tek Report Mode. 
+ */
+typedef enum bcmolt_epon_oam_tek_report_mode
+{
+    BCMOLT_EPON_OAM_TEK_REPORT_MODE_FRAME_ALIGNED_SINGLE_PRIORITY                           = 1,            /**< Frame Aligned (Single Priority). */
+    BCMOLT_EPON_OAM_TEK_REPORT_MODE_MULTI_PRIORITY3                                         = 19,           /**< Multi-priority 3. */
+    BCMOLT_EPON_OAM_TEK_REPORT_MODE_MULTI_PRIORITY4                                         = 20,           /**< Multi-priority 4. */
+    BCMOLT_EPON_OAM_TEK_REPORT_MODE_MULTI_PRIORITY8                                         = 24            /**< Multi-priority 8. */
+} bcmolt_epon_oam_tek_report_mode;
+
+/** Tek Feature Set. 
+ */
+typedef enum bcmolt_epon_oam_tek_feature_set
+{
+    BCMOLT_EPON_OAM_TEK_FEATURE_SET_STANDARD                                                = 0,            /**< Standard. */
+    BCMOLT_EPON_OAM_TEK_FEATURE_SET_DPOE                                                    = 1,            /**< DPoE. */
+    BCMOLT_EPON_OAM_TEK_FEATURE_SET_SDK                                                     = 2,            /**< SDK. */
+    BCMOLT_EPON_OAM_TEK_FEATURE_SET_ZTE                                                     = 3,            /**< ZTE. */
+    BCMOLT_EPON_OAM_TEK_FEATURE_SET_KOREA                                                   = 4             /**< Korea. */
+} bcmolt_epon_oam_tek_feature_set;
+
+/** Mcast Snoop Mode. 
+ */
+typedef enum bcmolt_epon_oam_mcast_snoop_mode
+{
+    BCMOLT_EPON_OAM_MCAST_SNOOP_MODE_IGMP_MODE                                              = 1,            /**< IGMP Mode. */
+    BCMOLT_EPON_OAM_MCAST_SNOOP_MODE_IGMP_V3MODE                                            = 2,            /**< IGMP V3 Mode. */
+    BCMOLT_EPON_OAM_MCAST_SNOOP_MODE_IGMP_COMPAT_MODE                                       = 3,            /**< IGMP Compat Mode. */
+    BCMOLT_EPON_OAM_MCAST_SNOOP_MODE_IGMP_MLD_COMPAT_MODE                                   = 4,            /**< IGMP Mld Compat Mode. */
+    BCMOLT_EPON_OAM_MCAST_SNOOP_MODE_MLD_MODE                                               = 5,            /**< Mld Mode. */
+    BCMOLT_EPON_OAM_MCAST_SNOOP_MODE_MLD_V2MODE                                             = 6,            /**< Mld V2 Mode. */
+    BCMOLT_EPON_OAM_MCAST_SNOOP_MODE_MLD_COMPAT_MODE                                        = 7,            /**< Mld Compat Mode. */
+    BCMOLT_EPON_OAM_MCAST_SNOOP_MODE_SNOOP_MODE_DISABLED                                    = 8,            /**< Snoop Mode Disabled. */
+    BCMOLT_EPON_OAM_MCAST_SNOOP_MODE_SNOOP_MODE_INVALID                                     = 255           /**< Snoop Mode Invalid. */
+} bcmolt_epon_oam_mcast_snoop_mode;
+
+/** IPMC Global Options. 
+ */
+typedef enum bcmolt_epon_oam_ipmc_global_options
+{
+    BCMOLT_EPON_OAM_IPMC_GLOBAL_OPTIONS_IPMC_OPTION_NONE                                    = 0,            /**< Ipmc Option None. */
+    BCMOLT_EPON_OAM_IPMC_GLOBAL_OPTIONS_IPMC_OPTION_DISCARD_UNKNOWN                         = 1,            /**< Ipmc Option Discard Unknown. */
+    BCMOLT_EPON_OAM_IPMC_GLOBAL_OPTIONS_IPMC_OPTION_ALLOW_NULL                              = 2,            /**< Ipmc Option Allow Null. */
+    BCMOLT_EPON_OAM_IPMC_GLOBAL_OPTIONS_IPMC_OPTION_ALLOW_ALL                               = 3             /**< Ipmc Option Allow All. */
+} bcmolt_epon_oam_ipmc_global_options;
+
+/** Forward Qualifier. 
+ */
+typedef enum bcmolt_epon_oam_forward_qualifier
+{
+    BCMOLT_EPON_OAM_FORWARD_QUALIFIER_QUAL_BY_L2DA                                          = 1,            /**< Qual By L2 Da. */
+    BCMOLT_EPON_OAM_FORWARD_QUALIFIER_QUAL_BY_VID                                           = 2,            /**< Qual By Vid. */
+    BCMOLT_EPON_OAM_FORWARD_QUALIFIER_QUAL_BY_IP_DA                                         = 4,            /**< Qual By IP Da. */
+    BCMOLT_EPON_OAM_FORWARD_QUALIFIER_QUAL_BY_IP_SA                                         = 8,            /**< Qual By IP Sa. */
+    BCMOLT_EPON_OAM_FORWARD_QUALIFIER_QUAL_BY_LLID                                          = 16            /**< Qual By LLID. */
+} bcmolt_epon_oam_forward_qualifier;
+
+/** Tek Holdover Flags. 
+ */
+typedef enum bcmolt_epon_oam_tek_holdover_flags
+{
+    BCMOLT_EPON_OAM_TEK_HOLDOVER_FLAGS_NONE                                                 = 0,
+    BCMOLT_EPON_OAM_TEK_HOLDOVER_FLAGS_RE_RANGE                                             = 0x0001        /**< Send register request to re-range ONU. */
+} bcmolt_epon_oam_tek_holdover_flags;
+
+/** MDI Mode 
+ */
+typedef enum bcmolt_epon_oam_mdi_mode
+{
+    BCMOLT_EPON_OAM_MDI_MODE_NONE                                                           = 0,            /**< None */
+    BCMOLT_EPON_OAM_MDI_MODE_AUTO                                                           = 1,            /**< Auto */
+    BCMOLT_EPON_OAM_MDI_MODE_MANUAL                                                         = 2,            /**< Manual */
+    BCMOLT_EPON_OAM_MDI_MODE_CROSSOVER                                                      = 3             /**< Crossover */
+} bcmolt_epon_oam_mdi_mode;
+
+/** Tek IGMP Forwarding Qualifer. 
+ */
+typedef enum bcmolt_epon_oam_tek_igmp_forwarding_qualifer
+{
+    BCMOLT_EPON_OAM_TEK_IGMP_FORWARDING_QUALIFER_NONE                                       = 0,
+    BCMOLT_EPON_OAM_TEK_IGMP_FORWARDING_QUALIFER_L2DA                                       = 0x0001,       /**< L2 DA. */
+    BCMOLT_EPON_OAM_TEK_IGMP_FORWARDING_QUALIFER_VID                                        = 0x0002,       /**< Vid. */
+    BCMOLT_EPON_OAM_TEK_IGMP_FORWARDING_QUALIFER_IP_DA                                      = 0x0004,       /**< IP DA. */
+    BCMOLT_EPON_OAM_TEK_IGMP_FORWARDING_QUALIFER_IP_SA                                      = 0x0008,       /**< IP SA. */
+    BCMOLT_EPON_OAM_TEK_IGMP_FORWARDING_QUALIFER_LOGICAL_LINK                               = 0x0010        /**< Logical Link. */
+} bcmolt_epon_oam_tek_igmp_forwarding_qualifer;
+
+/** Tek IGMP Snooping Options. 
+ */
+typedef enum bcmolt_epon_oam_tek_igmp_snooping_options
+{
+    BCMOLT_EPON_OAM_TEK_IGMP_SNOOPING_OPTIONS_DISABLE_DOWNSTREAM                            = 1,            /**< Disable Downstream. */
+    BCMOLT_EPON_OAM_TEK_IGMP_SNOOPING_OPTIONS_DISABLE_UPSTREAM                              = 2             /**< Disable Upstream. */
+} bcmolt_epon_oam_tek_igmp_snooping_options;
+
+/** Sleep Options. 
+ */
+typedef enum bcmolt_epon_oam_sleep_options
+{
+    BCMOLT_EPON_OAM_SLEEP_OPTIONS_NONE                                                      = 0,
+    BCMOLT_EPON_OAM_SLEEP_OPTIONS_TX_ONLY                                                   = 0x0001,       /**< Tx Only. */
+    BCMOLT_EPON_OAM_SLEEP_OPTIONS_RX_LASER                                                  = 0x0002,       /**< Rx Laser. */
+    BCMOLT_EPON_OAM_SLEEP_OPTIONS_SERDES                                                    = 0x0004        /**< SerDes. */
+} bcmolt_epon_oam_sleep_options;
+
+/** Ieee Register Flags. 
+ */
+typedef enum bcmolt_epon_oam_ieee_register_flags
+{
+    BCMOLT_EPON_OAM_IEEE_REGISTER_FLAGS_REREGISTER                                          = 1,            /**< Reregister. */
+    BCMOLT_EPON_OAM_IEEE_REGISTER_FLAGS_DEREGISTER                                          = 2,            /**< Deregister. */
+    BCMOLT_EPON_OAM_IEEE_REGISTER_FLAGS_ACK                                                 = 3,            /**< Ack. */
+    BCMOLT_EPON_OAM_IEEE_REGISTER_FLAGS_NACK                                                = 4             /**< Nack. */
+} bcmolt_epon_oam_ieee_register_flags;
+
+/** Ieee Register Ack Flags. 
+ */
+typedef enum bcmolt_epon_oam_ieee_register_ack_flags
+{
+    BCMOLT_EPON_OAM_IEEE_REGISTER_ACK_FLAGS_NACK                                            = 0,            /**< Nack. */
+    BCMOLT_EPON_OAM_IEEE_REGISTER_ACK_FLAGS_ACK                                             = 1             /**< Ack. */
+} bcmolt_epon_oam_ieee_register_ack_flags;
+
+/** Tek File Transfer Error. 
+ */
+typedef enum bcmolt_epon_oam_tek_file_transfer_error
+{
+    BCMOLT_EPON_OAM_TEK_FILE_TRANSFER_ERROR_OK                                              = 0,            /**< Ok. */
+    BCMOLT_EPON_OAM_TEK_FILE_TRANSFER_ERROR_UNDEFINED                                       = 1,            /**< Undefined. */
+    BCMOLT_EPON_OAM_TEK_FILE_TRANSFER_ERROR_NOT_FOUND                                       = 2,            /**< Not Found. */
+    BCMOLT_EPON_OAM_TEK_FILE_TRANSFER_ERROR_NO_ACCESS                                       = 3,            /**< No Access. */
+    BCMOLT_EPON_OAM_TEK_FILE_TRANSFER_ERROR_FULL                                            = 4,            /**< Full. */
+    BCMOLT_EPON_OAM_TEK_FILE_TRANSFER_ERROR_ILLEGAL_OP                                      = 5,            /**< Illegal Op. */
+    BCMOLT_EPON_OAM_TEK_FILE_TRANSFER_ERROR_UNKNOWN_ID                                      = 6,            /**< Unknown ID. */
+    BCMOLT_EPON_OAM_TEK_FILE_TRANSFER_ERROR_BAD_BLOCK                                       = 7,            /**< Bad Block. */
+    BCMOLT_EPON_OAM_TEK_FILE_TRANSFER_ERROR_TIMEOUT                                         = 8,            /**< Timeout. */
+    BCMOLT_EPON_OAM_TEK_FILE_TRANSFER_ERROR_BUSY                                            = 9             /**< Busy. */
+} bcmolt_epon_oam_tek_file_transfer_error;
+
+/** Tek File Type. 
+ */
+typedef enum bcmolt_epon_oam_tek_file_type
+{
+    BCMOLT_EPON_OAM_TEK_FILE_TYPE_BOOT                                                      = 0,            /**< Boot. */
+    BCMOLT_EPON_OAM_TEK_FILE_TYPE_APP                                                       = 1,            /**< App. */
+    BCMOLT_EPON_OAM_TEK_FILE_TYPE_CONFIG                                                    = 2,            /**< Config. */
+    BCMOLT_EPON_OAM_TEK_FILE_TYPE_DIAG                                                      = 3             /**< Diag. */
+} bcmolt_epon_oam_tek_file_type;
+
+/** PMC Op Code. 
+ */
+typedef enum bcmolt_epon_oam_pmc_op_code
+{
+    BCMOLT_EPON_OAM_PMC_OP_CODE_SET_ALARM_THRESHOLDS                                        = 112,          /**< Set Alarm Thresholds. */
+    BCMOLT_EPON_OAM_PMC_OP_CODE_RE_REGISTER                                                 = 113,          /**< Re Register. */
+    BCMOLT_EPON_OAM_PMC_OP_CODE_FIRMWARE_UPDATE                                             = 114,          /**< Firmware Update. */
+    BCMOLT_EPON_OAM_PMC_OP_CODE_GET_ONU_VERSIONS_REQUEST                                    = 115,          /**< Get ONU Versions Request. */
+    BCMOLT_EPON_OAM_PMC_OP_CODE_GET_ONU_VERSIONS_RESPONSE                                   = 116,          /**< Get ONU Versions Response. */
+    BCMOLT_EPON_OAM_PMC_OP_CODE_REMOTE_ACCESS                                               = 117,          /**< Remote Access. */
+    BCMOLT_EPON_OAM_PMC_OP_CODE_ACKNOWLEDGE                                                 = 128,          /**< Acknowledge. */
+    BCMOLT_EPON_OAM_PMC_OP_CODE_AUTHENTICATE_ONU                                            = 129,          /**< Authenticate ONU. */
+    BCMOLT_EPON_OAM_PMC_OP_CODE_TURN_ONU_IN_TO_OFF_MODE                                     = 130,          /**< Turn ONU In To Off Mode. */
+    BCMOLT_EPON_OAM_PMC_OP_CODE_IGMP_SNOOPING_PACKETS                                       = 131,          /**< IGMP Snooping Packets. */
+    BCMOLT_EPON_OAM_PMC_OP_CODE_UNI_PORT_STATUS_REQUEST                                     = 132,          /**< UNI Port Status Request. */
+    BCMOLT_EPON_OAM_PMC_OP_CODE_UNI_PORT_STATUS_RESPONSE                                    = 133,          /**< UNI Port Status Response. */
+    BCMOLT_EPON_OAM_PMC_OP_CODE_UNI_PORT_CONFIGURE                                          = 134,          /**< UNI Port Configure. */
+    BCMOLT_EPON_OAM_PMC_OP_CODE_ENCRYPTION_ENABLE_DISABLE                                   = 135,          /**< Encryption Enable Disable. */
+    BCMOLT_EPON_OAM_PMC_OP_CODE_ENCRYPTION_KEY                                              = 136,          /**< Encryption Key. */
+    BCMOLT_EPON_OAM_PMC_OP_CODE_THRESHOLD_REPORT_VALUES                                     = 137,          /**< Threshold Report Values. */
+    BCMOLT_EPON_OAM_PMC_OP_CODE_PHY_LOOP_BACK_CONTROL                                       = 138,          /**< PHY Loop Back Control. */
+    BCMOLT_EPON_OAM_PMC_OP_CODE_PING_REQUEST                                                = 139,          /**< Ping Request. */
+    BCMOLT_EPON_OAM_PMC_OP_CODE_PING_RESPONSE                                               = 140,          /**< Ping Response. */
+    BCMOLT_EPON_OAM_PMC_OP_CODE_MAGIC_NUMBER                                                = 255           /**< Magic Number. */
+} bcmolt_epon_oam_pmc_op_code;
+
+/** PMC File Op. 
+ */
+typedef enum bcmolt_epon_oam_pmc_file_op
+{
+    BCMOLT_EPON_OAM_PMC_FILE_OP_HEAD                                                        = 0,            /**< Head. */
+    BCMOLT_EPON_OAM_PMC_FILE_OP_DATA                                                        = 256,          /**< Data. */
+    BCMOLT_EPON_OAM_PMC_FILE_OP_END                                                         = 512,          /**< End. */
+    BCMOLT_EPON_OAM_PMC_FILE_OP_IDX                                                         = 768,          /**< Index. */
+    BCMOLT_EPON_OAM_PMC_FILE_OP_ACK                                                         = 29184         /**< Ack. */
+} bcmolt_epon_oam_pmc_file_op;
+
+/** PMC Error Code. 
+ */
+typedef enum bcmolt_epon_oam_pmc_error_code
+{
+    BCMOLT_EPON_OAM_PMC_ERROR_CODE_OK                                                       = 0,            /**< OK. */
+    BCMOLT_EPON_OAM_PMC_ERROR_CODE_BAD_SIZE                                                 = 1536,         /**< Bad Size. */
+    BCMOLT_EPON_OAM_PMC_ERROR_CODE_BAD_BLOCK_INDEX                                          = 2048,         /**< Bad Block Index. */
+    BCMOLT_EPON_OAM_PMC_ERROR_CODE_BAD_CRC                                                  = 2304,         /**< Bad CRC. */
+    BCMOLT_EPON_OAM_PMC_ERROR_CODE_UNKNOWN_TYPE                                             = 3584,         /**< Unknown Type. */
+    BCMOLT_EPON_OAM_PMC_ERROR_CODE_NO_HEADER_RECEIVE                                        = 4352,         /**< No Header Receive. */
+    BCMOLT_EPON_OAM_PMC_ERROR_CODE_NOT_STARTED                                              = 4608          /**< Not Started. */
+} bcmolt_epon_oam_pmc_error_code;
+
+/** ONU Master Protocol. 
+ */
+typedef enum bcmolt_epon_oam_onu_master_protocol
+{
+    BCMOLT_EPON_OAM_ONU_MASTER_PROTOCOL_PING                                                = 0,            /**< Ping. */
+    BCMOLT_EPON_OAM_ONU_MASTER_PROTOCOL_ENCAPSULATED_FRAME                                  = 1,            /**< Encapsulated Frame. */
+    BCMOLT_EPON_OAM_ONU_MASTER_PROTOCOL_OAM_CONTENT                                         = 2,            /**< OAM Content. */
+    BCMOLT_EPON_OAM_ONU_MASTER_PROTOCOL_BROADCOM_SDK                                        = 3,            /**< Broadcom SDK. */
+    BCMOLT_EPON_OAM_ONU_MASTER_PROTOCOL_REGISTERED_OAM                                      = 4,            /**< Registered OAM. */
+    BCMOLT_EPON_OAM_ONU_MASTER_PROTOCOL_MASTER_COMMUNICATION                                = 5,            /**< Master Communication. */
+    BCMOLT_EPON_OAM_ONU_MASTER_PROTOCOL_MASTER_PROTOCOL_TEK_UNKNOWN                         = 32766         /**< Master Protocol Tek Unknown. */
+} bcmolt_epon_oam_onu_master_protocol;
+
+/** ONU Master Ping Flags. 
+ */
+typedef enum bcmolt_epon_oam_onu_master_ping_flags
+{
+    BCMOLT_EPON_OAM_ONU_MASTER_PING_FLAGS_NONE                                              = 0,
+    BCMOLT_EPON_OAM_ONU_MASTER_PING_FLAGS_SATISFIED                                         = 0x0001,       /**< Satisfied. */
+    BCMOLT_EPON_OAM_ONU_MASTER_PING_FLAGS_PAUSE                                             = 0x8000U       /**< Pause. */
+} bcmolt_epon_oam_onu_master_ping_flags;
+
+/** Master End Point Type. 
+ */
+typedef enum bcmolt_epon_oam_master_end_point_type
+{
+    BCMOLT_EPON_OAM_MASTER_END_POINT_TYPE_ONU                                               = 0,            /**< ONU. */
+    BCMOLT_EPON_OAM_MASTER_END_POINT_TYPE_ONU_MASTER                                        = 1,            /**< ONU Master. */
+    BCMOLT_EPON_OAM_MASTER_END_POINT_TYPE_OLT                                               = 2             /**< OLT. */
+} bcmolt_epon_oam_master_end_point_type;
+
+/** ONU Master Communication Type. 
+ */
+typedef enum bcmolt_epon_oam_onu_master_communication_type
+{
+    BCMOLT_EPON_OAM_ONU_MASTER_COMMUNICATION_TYPE_COMMAND                                   = 0,            /**< Command. */
+    BCMOLT_EPON_OAM_ONU_MASTER_COMMUNICATION_TYPE_RESPONSE                                  = 128           /**< Response. */
+} bcmolt_epon_oam_onu_master_communication_type;
+
+/** ONU Master Command ID. 
+ */
+typedef enum bcmolt_epon_oam_onu_master_command_id
+{
+    BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_TERMINATOR                                        = 0,            /**< Terminator. */
+    BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_ENABLE_ONU                                        = 1,            /**< Enable ONU. */
+    BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_DISABLE_ONU                                       = 2,            /**< Disable ONU. */
+    BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_GET_ONU_STATE                                     = 3,            /**< Get ONU State. */
+    BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_GET_OAM_REGISTRATION                              = 257,          /**< Get OAM Registration. */
+    BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_SET_OAM_REGISTRATION                              = 258,          /**< Set OAM Registration. */
+    BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_GET_NEGOTIATED_OAM                                = 259,          /**< Get Negotiated OAM. */
+    BCMOLT_EPON_OAM_ONU_MASTER_COMMAND_ID_SET_NEGOTIATED_OAM                                = 260           /**< Set Negotiated OAM. */
+} bcmolt_epon_oam_onu_master_command_id;
+
+/** OAM Registration Action. 
+ */
+typedef enum bcmolt_epon_oam_oam_registration_action
+{
+    BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_CONT                                            = 0,            /**< Do not modify the registration state; provide more qualifiers. */
+    BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REG                                             = 1,            /**< Set the registration state to registered. */
+    BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER                                      = 2,            /**< Set the registration state to not registered. */
+    BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_REGISTER_AND_CONTINUE                           = 129,          /**< Set the registration state to registered, but allow for further qualifiers. */
+    BCMOLT_EPON_OAM_OAM_REGISTRATION_ACTION_UNREGISTER_AND_CONTINUE                         = 130           /**< Set the registration state to not registered, but allow for further qualifiers. */
+} bcmolt_epon_oam_oam_registration_action;
+
+/** OAM Reg Info Type. 
+ */
+typedef enum bcmolt_epon_oam_oam_reg_info_type
+{
+    BCMOLT_EPON_OAM_OAM_REG_INFO_TYPE_VENDOR                                                = 254           /**< Vendor. */
+} bcmolt_epon_oam_oam_reg_info_type;
+
+/** Master Context Type. 
+ */
+typedef enum bcmolt_epon_oam_master_context_type
+{
+    BCMOLT_EPON_OAM_MASTER_CONTEXT_TYPE_ONU                                                 = 0,            /**< ONU. */
+    BCMOLT_EPON_OAM_MASTER_CONTEXT_TYPE_NETWORK_PON                                         = 1,            /**< Network Pon. */
+    BCMOLT_EPON_OAM_MASTER_CONTEXT_TYPE_LINK                                                = 2,            /**< Link. */
+    BCMOLT_EPON_OAM_MASTER_CONTEXT_TYPE_USER_PORT                                           = 3             /**< User Port. */
+} bcmolt_epon_oam_master_context_type;
+
+/** CTC Version 
+ */
+typedef enum bcmolt_epon_oam_ctc_version
+{
+    BCMOLT_EPON_OAM_CTC_VERSION_LATEST_VERSION                                              = 0,            /**< Latest Supported Version, currently,  It's CTC 2.1. */
+    BCMOLT_EPON_OAM_CTC_VERSION_CTC10                                                       = 1,            /**< CTC 1.0 */
+    BCMOLT_EPON_OAM_CTC_VERSION_CTC13                                                       = 19,           /**< CTC 1.3 */
+    BCMOLT_EPON_OAM_CTC_VERSION_CTC20                                                       = 32,           /**< CTC 2.0 */
+    BCMOLT_EPON_OAM_CTC_VERSION_CTC21                                                       = 33,           /**< CTC 2.1 */
+    BCMOLT_EPON_OAM_CTC_VERSION_CTC30                                                       = 48,           /**< CTC 3.0 */
+    BCMOLT_EPON_OAM_CTC_VERSION_CUC10                                                       = 193,          /**< CUC 1.0 */
+    BCMOLT_EPON_OAM_CTC_VERSION_CUC20                                                       = 194,          /**< CUC 2.0 */
+    BCMOLT_EPON_OAM_CTC_VERSION_CUC30                                                       = 195           /**< CUC 3.0 */
+} bcmolt_epon_oam_ctc_version;
+
+/** ONU Master Response Code. 
+ */
+typedef enum bcmolt_epon_oam_onu_master_response_code
+{
+    BCMOLT_EPON_OAM_ONU_MASTER_RESPONSE_CODE_SUCCESS                                        = 0,            /**< Success. */
+    BCMOLT_EPON_OAM_ONU_MASTER_RESPONSE_CODE_NOT_SUPPORTED                                  = 1,            /**< Not Supported. */
+    BCMOLT_EPON_OAM_ONU_MASTER_RESPONSE_CODE_BAD_PARAMETERS                                 = 2,            /**< Bad Parameters. */
+    BCMOLT_EPON_OAM_ONU_MASTER_RESPONSE_CODE_NO_RESOURCES                                   = 3,            /**< No Resources. */
+    BCMOLT_EPON_OAM_ONU_MASTER_RESPONSE_CODE_HARDWARE_FAILURE                               = 4,            /**< Hardware Failure. */
+    BCMOLT_EPON_OAM_ONU_MASTER_RESPONSE_CODE_BAD_ID                                         = 5,            /**< Bad ID. */
+    BCMOLT_EPON_OAM_ONU_MASTER_RESPONSE_CODE_SYSTEM_BUSY                                    = 6             /**< System Busy. */
+} bcmolt_epon_oam_onu_master_response_code;
+
+/** ONU state. 
+ */
+typedef enum bcmolt_epon_oam_onu_state
+{
+    BCMOLT_EPON_OAM_ONU_STATE_DISABLED                                                      = 0,            /**< Disabled. */
+    BCMOLT_EPON_OAM_ONU_STATE_ENABLED                                                       = 1             /**< Enabled. */
+} bcmolt_epon_oam_onu_state;
+
+/** Mdi Crossover. 
+ */
+typedef enum bcmolt_epon_oam_mdi_crossover
+{
+    BCMOLT_EPON_OAM_MDI_CROSSOVER_OAM_MDI_AUTO                                              = 0,            /**< OAM Mdi Auto. */
+    BCMOLT_EPON_OAM_MDI_CROSSOVER_OAM_MDI                                                   = 1,            /**< OAM Mdi. */
+    BCMOLT_EPON_OAM_MDI_CROSSOVER_OAM_MDI_X                                                 = 2             /**< OAM Mdi X. */
+} bcmolt_epon_oam_mdi_crossover;
+
+/** Sdm Stat. 
+ */
+typedef enum bcmolt_epon_oam_sdm_stat
+{
+    BCMOLT_EPON_OAM_SDM_STAT_QUANTIZER                                                      = 0,            /**< Quantizer. */
+    BCMOLT_EPON_OAM_SDM_STAT_AMPLITUDE                                                      = 1,            /**< Amplitude. */
+    BCMOLT_EPON_OAM_SDM_STAT_PHASE                                                          = 2             /**< Phase. */
+} bcmolt_epon_oam_sdm_stat;
+
+/** TLS Hash Algorithm. 
+ */
+typedef enum bcmolt_epon_oam_tls_hash_algorithm
+{
+    BCMOLT_EPON_OAM_TLS_HASH_ALGORITHM_NONE                                                 = 0,            /**< None. */
+    BCMOLT_EPON_OAM_TLS_HASH_ALGORITHM_MD5                                                  = 1,            /**< MD5. */
+    BCMOLT_EPON_OAM_TLS_HASH_ALGORITHM_SHA1                                                 = 2,            /**< SHA1. */
+    BCMOLT_EPON_OAM_TLS_HASH_ALGORITHM_SHA224                                               = 3,            /**< SHA224. */
+    BCMOLT_EPON_OAM_TLS_HASH_ALGORITHM_SHA256                                               = 4,            /**< SHA256. */
+    BCMOLT_EPON_OAM_TLS_HASH_ALGORITHM_SHA384                                               = 5,            /**< SHA384. */
+    BCMOLT_EPON_OAM_TLS_HASH_ALGORITHM_SHA512                                               = 6             /**< SHA512. */
+} bcmolt_epon_oam_tls_hash_algorithm;
+
+/** TLS Signature Algorithm. 
+ */
+typedef enum bcmolt_epon_oam_tls_signature_algorithm
+{
+    BCMOLT_EPON_OAM_TLS_SIGNATURE_ALGORITHM_ANONYMOUS                                       = 0,            /**< Anonymous. */
+    BCMOLT_EPON_OAM_TLS_SIGNATURE_ALGORITHM_RSA                                             = 1,            /**< RSA. */
+    BCMOLT_EPON_OAM_TLS_SIGNATURE_ALGORITHM_DSA                                             = 2,            /**< DSA. */
+    BCMOLT_EPON_OAM_TLS_SIGNATURE_ALGORITHM_ECDSA                                           = 3             /**< ECDSA. */
+} bcmolt_epon_oam_tls_signature_algorithm;
+
+/** Binary Entry CVID. 
+ */
+typedef struct bcmolt_epon_oam_binary_entry_cvid
+{
+    uint16_t cvid;  /**< CVID. */
+} bcmolt_epon_oam_binary_entry_cvid;
+
+/** Binary Entry MAC. 
+ */
+typedef struct bcmolt_epon_oam_binary_entry_mac
+{
+    uint16_t switching_domain;  /**< Switching Domain. */
+    bcmos_mac_address mac;      /**< MAC. */
+    uint8_t link_id;            /**< Link Id. */
+} bcmolt_epon_oam_binary_entry_mac;
+
+/** Binary Entry Programmable. 
+ */
+typedef struct bcmolt_epon_oam_binary_entry_programmable
+{
+    uint32_t programmable_field0;   /**< Programmable Field 0. */
+    uint32_t programmable_field1;   /**< Programmable Field 1. */
+} bcmolt_epon_oam_binary_entry_programmable;
+
+/** Binary Entry SSM IP. 
+ */
+typedef struct bcmolt_epon_oam_binary_entry_ssm_ip
+{
+    uint16_t switching_domain;      /**< Switching Domain. */
+    uint16_t ssm_source_id;         /**< SSM Source ID. */
+    bcmos_ipv4_address ipaddress;   /**< IP Address. */
+} bcmolt_epon_oam_binary_entry_ssm_ip;
+
+/** Binary Entry SVLAN + CVLAN. 
+ */
+typedef struct bcmolt_epon_oam_binary_entry_svlan_plus_cvlan
+{
+    uint16_t svid;  /**< SVID. */
+    uint16_t cvid;  /**< CVID. */
+} bcmolt_epon_oam_binary_entry_svlan_plus_cvlan;
+
+/** Per-channel command option 
+ */
+typedef struct bcmolt_epon_oam_brcm_channel_option
+{
+    uint8_t channel_id; /**< Channel index */
+    bcmolt_epon_oam_brcm_cmc_request_option option_code;    /**< Operation code */
+} bcmolt_epon_oam_brcm_channel_option;
+
+/** Per-channel results 
+ */
+typedef struct bcmolt_epon_oam_brcm_channel_result
+{
+    uint8_t channel_id; /**< Channel index */
+    bcmolt_epon_oam_brcm_cmc_result_code result_code;   /**< Operation result code */
+} bcmolt_epon_oam_brcm_channel_result;
+
+/** CMC Classifier configuration data format 
+ */
+typedef struct bcmolt_epon_oam_brcm_cmc_classifier_config_data
+{
+    uint32_t svc_flow_id;           /**< Service Flow ID */
+    uint32_t classifier_id;         /**< Classifier ID */
+    uint8_t direction;              /**< Classifier Direction (1 = Downstream, 2 = Upstream) */
+    uint8_t state;                  /**< Classifier State (1 = Active, 2 = Inactive) */
+    uint32_t priority;              /**< Rule Priority (1..255) */
+    uint8_t iptos_low;              /**< Low value of IP ToS range */
+    uint8_t iptos_high;             /**< High value of IP ToS range */
+    uint8_t iptos_mask;             /**< IP ToS Mask value */
+    uint32_t ipproto;               /**< IP Protocol value */
+    uint8_t ipaddr_type;            /**< IP Address Type (0 = Unknown, 1 = IPv4, 2 = IPv6, 3 = IPv4z, 4 = IPv6z, 16 = DNS) */
+    uint8_t ipsrc_addr_length;      /**< Length of IP Source Address field */
+    uint8_t *ipsrc_addr;            /**< IP Source Address */
+    uint8_t ipsrc_mask_length;      /**< Length of IP Source Mask field */
+    uint8_t *ipsrc_mask;            /**< IP Source Mask */
+    uint8_t ipdst_addr_length;      /**< Length of IP Destination Address field */
+    uint8_t *ipdst_addr;            /**< IP Destination Address */
+    uint8_t ipdst_mask_length;      /**< Length of IP Destination Mask field */
+    uint8_t *ipdst_mask;            /**< IP Destination Mask */
+    uint32_t src_port_start;        /**< TCP/UDP Source Port range start */
+    uint32_t src_port_end;          /**< TCP/UDP Source Port range end */
+    uint32_t dst_port_start;        /**< TCP/UDP Destination Port range start */
+    uint32_t dst_port_end;          /**< TCP/UDP Destination Port range end */
+    bcmos_mac_address dst_mac_addr; /**< Destination MAC Address */
+    bcmos_mac_address dst_mac_mask; /**< Destination MAC Mask */
+    bcmos_mac_address src_mac_addr; /**< Source MAC Address */
+    uint8_t l2proto_type;           /**< Type of L2 Protocol to classify on (0 = None, 1 = Ethertype, 2 = DSAP, 3 = MAC, 4 = All) */
+    uint32_t l2proto_value;         /**< L2 Protocol Value */
+    uint32_t user_priority_low;     /**< 802.1q COS range, low value */
+    uint32_t user_priority_high;    /**< 802.1q COS range, high value */
+    uint32_t vlan_id;               /**< 802.1q VLAN ID */
+    uint24_t bitmap;                /**< Bitmap indicating explicitly configured fields */
+    uint32_t flow_label;            /**< IPv6 Flow Label  */
+    uint32_t cmim;                  /**< Cable Modem Interface Mask */
+    uint64_t pkt_matches;           /**< Count of packets matching this classifier */
+} bcmolt_epon_oam_brcm_cmc_classifier_config_data;
+
+/** CMC Interface Response format 
+ */
+typedef struct bcmolt_epon_oam_brcm_cmc_interface_data
+{
+    uint16_t intf_index;                /**< Unique interface index within CMC */
+    uint8_t intf_description_length;    /**< Length of Interface Description field */
+    uint8_t *intf_description;          /**< Interface Description */
+    bcmolt_epon_oam_brcm_cmc_intf_type intf_type;   /**< Interface Type */
+    uint8_t intf_phy_addr_length;                   /**< Length of Interface Physical Address field */
+    uint8_t *intf_phy_addr;         /**< Interface Physical Address field */
+    uint8_t intf_alias_name_length; /**< Length of Interface Alias Name */
+    uint8_t *intf_alias_name;       /**< Interface Alias Name */
+} bcmolt_epon_oam_brcm_cmc_interface_data;
+
+/** CMC interface statistics data format 
+ */
+typedef struct bcmolt_epon_oam_brcm_cmc_intf_stats_data
+{
+    uint16_t if_index;  /**< ifIndex of network interface */
+    uint16_t if_mtu;    /**< ifMtu of network interface */
+    uint32_t if_speed;  /**< ifSpeed of network interface (in Mbps) */
+    bcmolt_epon_oam_brcm_cmc_interface_status if_admin_status;  /**< ifAdminStatus of network interface */
+    bcmolt_epon_oam_brcm_cmc_interface_status if_oper_status;   /**< ifOperStatus of network interface */
+    uint32_t if_last_change;                /**< ifLastChange of network interface */
+    uint64_t if_hcin_octets;                /**< Count of US Bytes Received */
+    uint64_t if_hcin_ucast_pkts;            /**< Count of US Unicast Pkts Received */
+    uint64_t if_hcin_multicast_pkts;        /**< Count of US Multicast Pkts Received */
+    uint64_t if_hcin_broadcast_pkts;        /**< Count of US Broadcast Pkts Received */
+    uint32_t if_in_discards;                /**< Count of US Pkts Discarded */
+    uint32_t if_in_errors;                  /**< Count of US Pkts Received with Errors */
+    uint32_t if_in_unknown_protos;          /**< Count of US Pkts Received of Unknown Protocol Type */
+    uint64_t if_hcout_octets;               /**< Count of DS Bytes Transmitted */
+    uint64_t if_hcout_ucast_pkts;           /**< Count of DS Unicast Pkts Transmitted */
+    uint64_t if_hcout_multicast_pkts;       /**< Count of DS Multicast Pkts Transmitted */
+    uint64_t if_hcout_broadcast_pkts;       /**< Count of DS Broadcast Pkts Transmitted */
+    uint32_t if_out_discards;               /**< Count of DS Pkts Discarded */
+    uint32_t if_out_errors;                 /**< Count of DS Pkts not transmitted due to Errors */
+    uint8_t if_link_up_down_trap_enable;    /**< Whether link up/down traps should be generated */
+    uint8_t if_promiscuous_mode;            /**< Whether interface is in promiscuous mode or not */
+    uint8_t if_connector_present;           /**< Whether physical connector exists on interface */
+    uint32_t if_counter_discontinuity_time; /**< Time when any counter suffered a discontinuity */
+} bcmolt_epon_oam_brcm_cmc_intf_stats_data;
+
+/** CMC Service Flow configuration data format 
+ */
+typedef struct bcmolt_epon_oam_brcm_cmc_sf_config_data
+{
+    uint32_t svc_flow_id;                   /**< Service Flow ID */
+    uint16_t sid;                           /**< Service Identifier (SID) */
+    uint8_t direction;                      /**< Flow Direction (1 = Downstream, 2 = Upstream) */
+    uint8_t flow_type;                      /**< Flow Type (1 = Primary, 2 = Secondary) */
+    uint8_t qos_type;                       /**< Qos Set Type (0 = Active, 1 = Admitted, 2 = Provisioned) */
+    uint32_t channel_set_id;                /**< Channel set associated with the Service Flow */
+    uint24_t dsid;                          /**< DSID associated with the Service Flow */
+    uint8_t max_requests_per_sid_cluster;   /**< Max requests before SID cluster must switch */
+    uint32_t max_bytes_per_sid_cluster;     /**< Max bytes that can be outstanding for SID cluster */
+    uint32_t total_bytes_per_sid_cluster;   /**< Total bytes that can be requested for SID cluster */
+    uint16_t max_time_per_sid_cluster;      /**< Max time (in msec) that can be used for SID cluster */
+    uint8_t service_class_length;           /**< Length of Service Class Name */
+    uint8_t *service_class;                 /**< Service Class Name */
+    uint8_t priority;                       /**< Traffic Priority (0..7) */
+    uint8_t reseq_dsid_support;             /**< DSID Support (1 = True, 2 = False, 3 = N/A) */
+    uint32_t max_rate;                      /**< Maximum Sustained Traffic Rate in bps */
+    uint32_t max_burst;                     /**< Maximum Traffic Burst in bytes */
+    uint32_t min_rate;                      /**< Minimum Guaranteed Rate in bps */
+    uint16_t min_pkt_size;                  /**< Assumed Minimum Packet size in bytes */
+    uint16_t active_timeout;                /**< Active Parameter Set timeout in seconds */
+    uint16_t admitted_timeout;              /**< Admitted Parameter Set timeout in seconds */
+    uint16_t max_concat_burst;              /**< Maximum Concatenated Burst in bytes */
+    uint8_t scheduling_type;                /**< Upstream Scheduling Type */
+    uint32_t nom_poll_intvl;                /**< Nominal Polling Interval in usec */
+    uint32_t tol_poll_jitter;               /**< Tolerated Poll Jitter in usec */
+    uint16_t unsol_grant_size;              /**< Unsolicited Grant Size in bytes */
+    uint32_t nom_grant_intvl;               /**< Nominal Grant Interval in usec */
+    uint32_t tol_grant_jitter;              /**< Tolerated Grant Jitter in usec */
+    uint8_t tos_and_mask_length;            /**< Length of ToS AND Mask */
+    uint8_t *tos_and_mask;                  /**< ToS AND Mask */
+    uint8_t tos_or_mask_length;             /**< Length of ToS OR Mask */
+    uint8_t *tos_or_mask;                   /**< ToS OR Mask */
+    uint32_t max_latency;                   /**< Maximum Latency in usec */
+    uint8_t req_trans_policy_length;        /**< Length of Request/Transmission Policy */
+    uint8_t *req_trans_policy;              /**< Request/Transmission Policy */
+    uint32_t bitmap;                        /**< Bitmap indicating explicitly configured fields */
+    uint32_t reqd_attrib_mask;              /**< Required attribute mask */
+    uint32_t forbid_attrib_mask;            /**< Forbidden attribute mask */
+    uint32_t attrib_aggr_mask;              /**< Attribute aggregation mask */
+    uint8_t attrib_mask_success;            /**< Indicates if channel adheres to masks (1 = True, 2 = False) */
+    uint8_t application_idlength;           /**< Length of Application Identifier */
+    uint8_t *application_id;                /**< Application Identifier */
+    uint8_t cont_req_window_multi;          /**< Multiplier for data contention request backoff */
+    uint8_t bw_req_multi;                   /**< Multiplier for bandwidth request */
+    uint32_t peak_rate;                     /**< Peak Traffic Rate in bps */
+    uint32_t create_time;                   /**< Timestamp in ticks when Service Flow was created */
+} bcmolt_epon_oam_brcm_cmc_sf_config_data;
+
+/** CNU Service Flow statistics data format 
+ */
+typedef struct bcmolt_epon_oam_brcm_cmc_sf_stats_data
+{
+    uint32_t svc_flow_id;       /**< Service Flow ID */
+    uint64_t total_pkt_count;   /**< Total Data Pkts Rx/Tx */
+    uint64_t total_byte_count;  /**< Count of all post-HCS bytes Rx/Tx */
+    uint32_t active_time;       /**< Time that flow's been active, in seconds */
+    uint32_t invalid_phs_count; /**< Pkts Rx with invalid PHSI (upstream only) */
+    uint32_t pkts_dropped;      /**< Count of DS Pkts dropped */
+    uint32_t pkts_delayed;      /**< Count of DS Pkts delayed due to Rate Limiting */
+} bcmolt_epon_oam_brcm_cmc_sf_stats_data;
+
+/** CNU MAC Address Range 
+ */
+typedef struct bcmolt_epon_oam_brcm_cnu_mac_addr_range
+{
+    bcmos_mac_address cnu_mac_address_start;    /**< Start of CNU Mac Address Range */
+    bcmos_mac_address cnu_mac_address_end;      /**< End of CNU Mac Address Range */
+} bcmolt_epon_oam_brcm_cnu_mac_addr_range;
+
+/** CNU US Chan data format 
+ */
+typedef struct bcmolt_epon_oam_brcm_cnu_us_chan_data
+{
+    uint8_t channel_id;                 /**< CNU's 1st Upstream Channel ID */
+    uint16_t power_level;               /**< Power Level in 1/10th dBmV */
+    uint32_t high_res_timing_offset;    /**< CNU timing offset in (6.25 usec / (64 * 256)) */
+    uint8_t equalization_data_length;   /**< Length of Equalization Data Field */
+    uint8_t *equalization_data;         /**< Equalization Data */
+    uint64_t unerroreds;                /**< Number of unerrored codewords */
+    uint64_t correcteds;                /**< Number of corrected codewords */
+    uint64_t uncorrectables;            /**< Number of uncorrectable codewords */
+    uint32_t snr;                       /**< Signal to Noise Ratio in units of 1/10 dB */
+    uint8_t micro_reflections;          /**< Measured microreflections in units of dBc */
+} bcmolt_epon_oam_brcm_cnu_us_chan_data;
+
+/** CNU Status Response format 
+ */
+typedef struct bcmolt_epon_oam_brcm_cnu_status_data
+{
+    uint32_t idx;                   /**< Unique CNU index within CMC */
+    bcmos_mac_address mac_address;  /**< MAC Address of CNU */
+    uint8_t uschan_count;           /**< Number of CNUs active US Chans */
+    bcmolt_epon_oam_brcm_cnu_us_chan_data *uschan_data;             /**< CNU Per-US channel data */
+    bcmolt_epon_oam_brcm_cnu_connectivity_state connectivity_state; /**< Connectivity State */
+    bcmolt_epon_oam_brcm_cnu_docsis_version docsis_version;         /**< Version of DOCSIS that CNU is operating in */
+    bcmolt_epon_oam_brcm_cnu_ipaddr_type ipaddr_type;               /**< Type of IP Addr */
+    uint8_t ipaddr_length;          /**< Length of IP Addr value field */
+    uint8_t *ipaddr_value;          /**< IPv4 or IPv6 Address */
+    uint32_t timestamp;             /**< Value of sysUptime when last updated */
+    uint8_t sflow_count;            /**< Number of Service Flows on CNU */
+    uint32_t *sflow_id;             /**< List of Service Flow IDs */
+    uint8_t link_local_addr_length; /**< Length of Link Local Address */
+    uint8_t *link_local_addr;       /**< Link Local Address */
+    uint16_t mac_domain_index;      /**< CMC MAC index where CNU is registered */
+    uint32_t service_group_id;      /**< CMC MAC Domain Service Group Id */
+    uint8_t rcp_idlength;           /**< Length of RCP-ID */
+    uint8_t *rcp_id;                /**< RCP-ID Value */
+    uint32_t rcc_id;                /**< RCC-ID */
+    uint32_t rcs_id;                /**< RCS-ID */
+    uint32_t tcs_id;                /**< TCS-ID */
+    uint32_t last_register_time;    /**< Timestamp when CNU last registered */
+    uint32_t addr_resolve_requests; /**< Number of requests received relating to IP resolution for CNU */
+} bcmolt_epon_oam_brcm_cnu_status_data;
+
+/** Per-downstream channel properties 
+ */
+typedef struct bcmolt_epon_oam_brcm_downstream_channel_properties
+{
+    uint8_t channel_id;         /**< Downstream channel index */
+    bcmos_bool is_enabled;      /**< Whether or not the channel is enabled */
+    uint32_t center_frequency;  /**< Center frequency in Hz */
+    bcmolt_epon_oam_brcm_cmc_modulation modulation;     /**< Channel modulation type */
+    bcmolt_epon_oam_brcm_cmc_annex annex;               /**< Channel annex type */
+    bcmolt_epon_oam_brcm_cmc_interleaver interleaver;   /**< Channel interleaver depth value */
+    uint16_t power_level;       /**< Power level for channel in tenths dBmV */
+    uint16_t interface_index;   /**< Interface index on a get / reserved on a set */
+} bcmolt_epon_oam_brcm_downstream_channel_properties;
+
+/** Per-upstream channel properties 
+ */
+typedef struct bcmolt_epon_oam_brcm_upstream_channel_properties
+{
+    uint8_t channel_id;         /**< Upstream channel index */
+    bcmos_bool is_enabled;      /**< Whether or not the channel is enabled */
+    uint32_t center_frequency;  /**< Center frequency in Hz */
+    uint32_t channel_width;     /**< Width of channel in Hz */
+    bcmolt_epon_oam_brcm_cmc_us_profile_type channel_profile_type;  /**< Channel profile type */
+    bcmos_bool is_sac2sinc2enabled;     /**< Whether or not Sac2Sinc2 mode is enabled */
+    uint32_t minislot_size;             /**< Channel Minislot Size in 6.25 usec tick units */
+    uint32_t transmit_timing_offset;    /**< Timing offset in 1/64th of 6.25 usec tick units */
+    uint8_t initial_ranging_backoff;    /**< Ranging Backoff Window Start */
+    uint8_t final_ranging_backoff;      /**< Ranging Backoff Window End */
+    uint8_t initial_data_backoff;       /**< Data Backoff Window Start */
+    uint8_t final_data_backoff;         /**< Data Backoff Window End */
+    uint8_t active_scdma_codes;         /**< Active SCDMA Codes */
+    uint8_t codes_per_slot;             /**< SCDMA Codes per Minislot */
+    uint8_t scdma_frame_size;           /**< SCDMA Frame Size in units of spreading intervals */
+    uint16_t hopping_seed;              /**< SCDMA Code Hopping Seed */
+    bcmolt_epon_oam_brcm_cmc_us_modulation_type modulation_type;    /**< Channel modulation type */
+    uint8_t pre_equalization_setting;   /**< Pre-Equalization Setting (1-on, 2-off) */
+    uint16_t interface_index;           /**< Interface index on a get / reserved on a set */
+} bcmolt_epon_oam_brcm_upstream_channel_properties;
+
+/** Per-upstream channel signal quality info 
+ */
+typedef struct bcmolt_epon_oam_brcm_upstream_signal_quality
+{
+    uint16_t interface_index;       /**< Upstream channel ifIndex */
+    uint8_t contention_intervals;   /**< Are contention intervals included in counts (1=yes, 2=no) */
+    uint64_t unerroreds;            /**< Number of unerrored codewords */
+    uint64_t correcteds;            /**< Number of corrected codewords */
+    uint64_t uncorrectables;        /**< Number of uncorrectable codewords */
+    uint32_t snr;                   /**< Signal to Noise Ratio in units of 1/10 dB */
+    uint8_t micro_reflections;      /**< Measured microreflections in units of dBc */
+} bcmolt_epon_oam_brcm_upstream_signal_quality;
+
+/** Per-upstream channel power 
+ */
+typedef struct bcmolt_epon_oam_brcm_upstream_channel_power
+{
+    uint8_t channel_id;         /**< Upstream channel index */
+    uint16_t input_power_level; /**< Input Power Level (in tenths dB) */
+} bcmolt_epon_oam_brcm_upstream_channel_power;
+
+/** CMC OAM PDU base structure 
+ */
+typedef struct bcmolt_epon_oam_brcm_oam_pdu_base
+{
+    uint8_t version;    /**< Version number */
+    uint16_t packet_id; /**< A unique identifier for the specific BRCM OAM transaction. */
+    bcmolt_epon_oam_brcm_oam_pdu_opcode opcode; /**< The actual command\function being referenced by the OAM message */
+    union
+    {
+        struct
+        {
+            uint8_t downstream_channels_count;  /**< Number of elements in Downstream Channels */
+            bcmolt_epon_oam_brcm_downstream_channel_properties *downstream_channels;    /**< Per downstream channel properties */
+        } set_downstream_config_request;
+
+        struct
+        {
+            uint8_t downstream_channels_count;  /**< Number of elements in Downstream Channels */
+            bcmolt_epon_oam_brcm_channel_result *downstream_channels;   /**< Per downstream channel results */
+        } set_downstream_config_response;
+
+        struct
+        {
+            uint8_t downstream_channels_count;  /**< Number of elements in Downstream Channels */
+            uint8_t *downstream_channels;       /**< Per downstream channel IDs to get */
+        } get_downstream_config_request;
+
+        struct
+        {
+            uint8_t downstream_channels_count;  /**< Number of elements in Downstream Channels */
+            bcmolt_epon_oam_brcm_downstream_channel_properties *downstream_channels;    /**< Per downstream channel results */
+        } get_downstream_config_response;
+
+        struct
+        {
+            uint8_t upstream_channels_count;    /**< Number of elements in Upstream Channels */
+            bcmolt_epon_oam_brcm_upstream_channel_properties *upstream_channels;    /**< Per upstream channel properties */
+        } set_upstream_config_request;
+
+        struct
+        {
+            uint8_t upstream_channels_count;                        /**< Number of elements in Upstream Channels */
+            bcmolt_epon_oam_brcm_channel_result *upstream_channels; /**< Per upstream channel results */
+        } set_upstream_config_response;
+
+        struct
+        {
+            uint8_t upstream_channels_count;                        /**< Number of elements in Upstream Channels */
+            uint8_t *upstream_channels;         /**< Per upstream channel IDs to get */
+        } get_upstream_config_request;
+
+        struct
+        {
+            uint8_t upstream_channels_count;    /**< Number of elements in Upstream Channels */
+            bcmolt_epon_oam_brcm_upstream_channel_properties *upstream_channels;    /**< Per upstream channel results */
+        } get_upstream_config_response;
+
+        struct
+        {
+            uint8_t group_id;   /**< Group Identifier */
+            bcmolt_epon_oam_brcm_cmc_load_balance_method method;    /**< Load Balancing Method */
+            bcmolt_epon_oam_brcm_cmc_request_option request_option; /**< Request Option */
+        } set_create_load_balancing_group_request;
+
+        struct
+        {
+            uint8_t group_id;   /**< Group Identifier */
+            bcmolt_epon_oam_brcm_cmc_result_code result_code;   /**< Result Code */
+        } set_create_load_balancing_group_response;
+
+        struct
+        {
+            uint8_t group_id;                   /**< Group ID. */
+            uint8_t downstream_channels_count;  /**< Number of elements in Downstream Channels */
+            bcmolt_epon_oam_brcm_channel_option *downstream_channels;   /**< Per downstream channel options */
+        } set_add_downstreams_to_load_balancing_group_request;
+
+        struct
+        {
+            uint8_t group_id;                   /**< Group ID. */
+            uint8_t downstream_channels_count;  /**< Number of elements in Downstream Channels */
+            bcmolt_epon_oam_brcm_channel_result *downstream_channels;   /**< Per downstream channel results */
+        } set_add_downstreams_to_load_balancing_group_response;
+
+        struct
+        {
+            uint8_t group_id;                   /**< Group ID. */
+            uint8_t upstream_channels_count;    /**< Number of elements in Upstream Channels */
+            bcmolt_epon_oam_brcm_channel_option *upstream_channels; /**< Per upstream channel options */
+        } set_add_upstreams_to_load_balancing_group_request;
+
+        struct
+        {
+            uint8_t group_id;                   /**< Group ID. */
+            uint8_t upstream_channels_count;    /**< Number of elements in Upstream Channels */
+            bcmolt_epon_oam_brcm_channel_result *upstream_channels; /**< Per upstream channel results */
+        } set_add_upstreams_to_load_balancing_group_response;
+
+        struct
+        {
+            uint8_t upstream_interfaces_count;                      /**< Number of elements in Upstream Interfaces */
+            uint16_t *upstream_interfaces;      /**< Per upstream ifIndices to get */
+        } get_signal_quality_request;
+
+        struct
+        {
+            uint8_t upstream_interfaces_count;  /**< Number of elements in Upstream Interfaces */
+            bcmolt_epon_oam_brcm_upstream_signal_quality *upstream_interfaces;  /**< Per upstream ifIndices to get */
+        } get_signal_quality_response;
+
+        struct
+        {
+            uint16_t cnu_count;                 /**< Number of CNUs to retrieve status from */
+            bcmos_mac_address *cnu_mac_address; /**< List of CNU MAC Addresses */
+        } get_cnu_status_request;
+
+        struct
+        {
+            uint16_t cnu_count;                 /**< Number of CNUs with info in the response */
+            bcmolt_epon_oam_brcm_cnu_status_data *cnu_status_data;  /**< List of CNU Status Data structures */
+        } get_cnu_status_response;
+
+        struct
+        {
+            uint8_t svc_flow_idcount;   /**< Number of Service Flow IDs in request */
+            uint16_t *svc_flow_ids;     /**< Service Flow ID List */
+        } get_qos_service_flow_statistics_request;
+
+        struct
+        {
+            uint8_t svc_flow_idcount;   /**< Number of Service Flows in response */
+            bcmolt_epon_oam_brcm_cmc_sf_stats_data *svc_flow_data;  /**< Service Flow data list */
+        } get_qos_service_flow_statistics_response;
+
+        struct
+        {
+            uint16_t intf_count;    /**< Number of CMC Interfaces with info in the response */
+            uint32_t timestamp;     /**< Timestamp when interfaces table was last modified */
+            bcmolt_epon_oam_brcm_cmc_interface_data *cmc_interface_data;    /**< List of CMC Interface Data structures */
+        } get_cmc_interfaces_response;
+
+        struct
+        {
+            uint16_t interface_index;   /**< MAC Domain ifIndex */
+            uint32_t invalid_rng_reqs;  /**< Count of invalid range requests received */
+            uint32_t rng_aborts;        /**< Count of ranging attempts aborted */
+            uint32_t invalid_reg_reqs;  /**< Count of invalid REG-REQ messages received */
+            uint32_t failed_reg_reqs;   /**< Count of failed registration attempts */
+            uint32_t invalid_data_reqs; /**< Count of invalid data request messages received */
+            uint32_t t5timeouts;        /**< Count of T5 Timer expirations */
+        } get_cmc_mac_statistics_response;
+
+        struct
+        {
+            uint8_t intf_count;         /**< Number of CMC interfaces to retrieve status from */
+            uint16_t *intf_index;       /**< List of CMC interface ifIndices */
+        } get_cmc_interfaces_statistics_request;
+
+        struct
+        {
+            uint8_t interfaces_count;   /**< Number of elements in Network Interfaces */
+            bcmolt_epon_oam_brcm_cmc_intf_stats_data *network_interfaces;   /**< Per network interface stats data */
+        } get_cmc_interfaces_statistics_response;
+
+        struct
+        {
+            uint8_t svc_flow_idcount;   /**< Number of Service Flow IDs in request */
+            uint16_t *svc_flow_ids;     /**< Service Flow ID List */
+        } get_qos_service_flow_config_request;
+
+        struct
+        {
+            uint8_t svc_flow_count;     /**< Number of Service Flows in response */
+            bcmolt_epon_oam_brcm_cmc_sf_config_data *svc_flow_data; /**< Service Flow confiiguration data list */
+        } get_qos_service_flow_config_response;
+
+        struct
+        {
+            uint8_t svc_flow_idcount;   /**< Number of Service Flow IDs in request */
+            uint16_t *svc_flow_ids;     /**< Service Flow ID List */
+        } get_qos_packet_classifier_config_request;
+
+        struct
+        {
+            uint8_t classifier_count;   /**< Number of Service Flow/Classifier pairs in response */
+            bcmolt_epon_oam_brcm_cmc_classifier_config_data *classifier_data;   /**< Service Flow/Classifier pair data list */
+        } get_qos_packet_classifier_config_response;
+
+        struct
+        {
+            uint8_t upstream_channels_count;    /**< Number of elements in Upstream Channels */
+            uint8_t *upstream_channels;         /**< Per upstream channel IDs to get */
+        } get_upstream_input_power_request;
+
+        struct
+        {
+            uint8_t upstream_channels_count;    /**< Number of elements in Upstream Channels */
+            bcmolt_epon_oam_brcm_upstream_channel_power *upstream_channels; /**< Per upstream channel results */
+        } get_upstream_input_power_response;
+
+        struct
+        {
+            uint8_t upstream_channels_count;    /**< Number of elements in Upstream Channels */
+            bcmolt_epon_oam_brcm_upstream_channel_power *upstream_channels; /**< Per upstream channel results */
+        } set_upstream_input_power_request;
+
+        struct
+        {
+            bcmolt_epon_oam_brcm_cmc_result_code result_code;               /**< Result of operation */
+            uint16_t channel_one_power;     /**< Input power level for US Channel 1 */
+            uint16_t channel_two_power;     /**< Input power level for US Channel 2 */
+            uint16_t channel_three_power;   /**< Input power level for US Channel 3 */
+            uint16_t channel_four_power;    /**< Input power level for US Channel 4 */
+        } set_upstream_input_power_response;
+
+        struct
+        {
+            uint8_t group_id;               /**< Group Identifier */
+            bcmolt_epon_oam_brcm_cmc_request_option request_option; /**< Request Option */
+            bcmolt_epon_oam_brcm_cnu_mac_addr_range cnu_mac_range;  /**< CNU Mac Address Range */
+        } set_add_cnus_to_load_balancing_group_request;
+
+        struct
+        {
+            uint8_t group_id;   /**< Group Identifier */
+            bcmolt_epon_oam_brcm_cmc_result_code result_code;       /**< Result Code */
+        } set_add_cnus_to_load_balancing_group_response;
+
+        struct
+        {
+            bcmolt_epon_oam_brcm_cmc_request_option request_option; /**< Request Option */
+            bcmos_mac_address cnu_mac_address_start;                /**< Start of CNU Mac Address Range */
+            bcmos_mac_address cnu_mac_address_end;                  /**< End of CNU Mac Address Range */
+        } set_exclude_cnus_from_load_balancing_request;
+
+        struct
+        {
+            bcmolt_epon_oam_brcm_cmc_result_code result_code;       /**< Result Code */
+        } set_exclude_cnus_from_load_balancing_response;
+
+        struct
+        {
+            uint8_t group_id;   /**< Group Identifier */
+            bcmolt_epon_oam_brcm_cmc_load_balance_method method;    /**< Load Balancing Method */
+            uint8_t downstream_channels_count;                      /**< Number of elements in Downstream Channels */
+            uint8_t *downstream_channels;                           /**< List of Downstream Channel IDs */
+            uint8_t upstream_channels_count;                        /**< Number of elements in Upstream Channels */
+            uint8_t *upstream_channels;                             /**< List of Upstream Channel IDs */
+            uint8_t restrictions_count;                             /**< Number of elements in Restrictions */
+            bcmolt_epon_oam_brcm_cnu_mac_addr_range *restrictions;  /**< List of Restriction ranges */
+        } set_full_load_balancing_group_request;
+
+        struct
+        {
+            uint8_t group_id;   /**< Group Identifier */
+            bcmolt_epon_oam_brcm_cmc_result_code result_code;   /**< Result Code */
+        } set_full_load_balancing_group_response;
+    } u;
+} bcmolt_epon_oam_brcm_oam_pdu_base;
+
+/** Certificate. 
+ */
+typedef struct bcmolt_epon_oam_certificate
+{
+    uint24_t size;              /**< Size. */
+    uint8_t *certificate_data;  /**< Certificate Data. */
+} bcmolt_epon_oam_certificate;
+
+/** CTC Action Value. 
+ */
+typedef struct bcmolt_epon_oam_ctc_action_value
+{
+    bcmolt_epon_oam_var_leaf_action leaf;               /**< Leaf. */
+    union
+    {
+        struct
+        {
+            uint8_t width;                              /**< Width. */
+            bcmolt_epon_oam_ctc_enabled_state state;    /**< State. */
+        } phy_admin_control;
+
+        struct
+        {
+            uint8_t width;  /**< Width. */
+            bcmolt_epon_oam_ctc_enabled_state state;    /**< State. */
+        } auto_admin_control;
+    } u;
+} bcmolt_epon_oam_ctc_action_value;
+
+/** Ctc Alarm Entry. 
+ */
+typedef struct bcmolt_epon_oam_ctc_alarm_entry
+{
+    bcmolt_epon_oam_ctc_leaf_management_object object_type; /**< Object Type. */
+    uint32_t object_instance;                                   /**< Object Instance. */
+    bcmolt_epon_oam_ctc_onu_alarm_id alarm_id;                  /**< Alarm ID. */
+    union
+    {
+        struct
+        {
+            uint16_t time_stamp;                                /**< Time Stamp. */
+            uint8_t state;                                      /**< 0x00 : Reporting Alarm */
+        } def;
+
+        struct
+        {
+            uint16_t time_stamp;                                /**< Time Stamp. */
+            uint8_t state;                                      /**< 0x00 : Reporting Alarm */
+            bcmolt_epon_oam_ctc_power_alarm_code alarm_code;    /**< Alarm Code. */
+        } onu_power_alarm;
+
+        struct
+        {
+            uint16_t time_stamp;    /**< Time Stamp. */
+            uint8_t state;          /**< 0x00 : Reporting Alarm */
+            bcmolt_epon_oam_ctc_pon_if_switch_code alarm_code;  /**< Alarm Code. */
+        } onu_pon_if_switch;
+    } u;
+} bcmolt_epon_oam_ctc_alarm_entry;
+
+/** CTC Attribute Value Base. 
+ */
+typedef struct bcmolt_epon_oam_ctc_attribute_value_base
+{
+    bcmolt_epon_oam_var_leaf_attribute leaf;    /**< Leaf. */
+    uint8_t width;  /**< Width. */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_ctc_enabled_state state;    /**< State. */
+        } phy_admin_state;
+
+        struct
+        {
+            bcmolt_epon_oam_ctc_enabled_state state;    /**< State. */
+        } auto_neg_admin_state;
+
+        struct
+        {
+            uint32_t technologies_count;                /**< Number of elements in Technologies */
+            uint32_t *technologies;                     /**< Auto-negotiation technology bitmaps (IEEE 802.3-2005 clause 40) */
+        } auto_neg_local_tech_ability;
+
+        struct
+        {
+            uint32_t technologies_count;                /**< Number of elements in Technologies */
+            uint32_t *technologies;                     /**< Auto-negotiation technology bitmaps (IEEE 802.3-2005 clause 40) */
+        } auto_neg_advertised_tech_ability;
+
+        struct
+        {
+            bcmolt_epon_oam_ctc_fec_support support;    /**< Support. */
+        } fec_ability;
+
+        struct
+        {
+            bcmolt_epon_oam_ctc_fec_state state;        /**< State. */
+        } fec_mode;
+    } u;
+} bcmolt_epon_oam_ctc_attribute_value_base;
+
+/** CTC Churning Prov Base. 
+ */
+typedef struct bcmolt_epon_oam_ctc_churning_prov_base
+{
+    bcmolt_epon_oam_ctc_churning_op_code code;  /**< Code. */
+    union
+    {
+        struct
+        {
+            uint8_t in_use_key_index;           /**< In-Use Key Index. */
+        } new_key_request;
+
+        struct
+        {
+            uint8_t new_key_index;              /**< New Key Index. */
+            uint8_t churning_key0[3];           /**< 3-byte churning key 0.  For 1G, this is the only key.  For 10G, this is the first of 3 3-byte keys. */
+            uint8_t churning_key1[3];           /**< 3-byte churning key 1.  Only present in 10G. */
+            uint8_t churning_key2[3];           /**< 3-byte churning key 2.  Only present in 10G. */
+        } new_churning_key;
+    } u;
+} bcmolt_epon_oam_ctc_churning_prov_base;
+
+/** CTC Commit Image Base. 
+ */
+typedef struct bcmolt_epon_oam_ctc_commit_image_base
+{
+    bcmolt_epon_oam_ctc_commit_image_opcode opcode;     /**< Opcode. */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_ctc_commit_image_flag flag; /**< Flag. */
+        } commit_image_request;
+
+        struct
+        {
+            bcmolt_epon_oam_ctc_commit_image_ack ack;   /**< Ack. */
+        } commit_image_response;
+    } u;
+} bcmolt_epon_oam_ctc_commit_image_base;
+
+/** CTC DBA reporting queue set. 
+ */
+typedef struct bcmolt_epon_oam_ctc_dba_queue_set
+{
+    uint8_t report_bitmap;  /**< Bitmap of which queues are present in the queue set. */
+    uint16_t queue0;        /**< Queue 0. */
+    uint16_t queue1;        /**< Queue 1. */
+    uint16_t queue2;        /**< Queue 2. */
+    uint16_t queue3;        /**< Queue 3. */
+    uint16_t queue4;        /**< Queue 4. */
+    uint16_t queue5;        /**< Queue 5. */
+    uint16_t queue6;        /**< Queue 6. */
+    uint16_t queue7;        /**< Queue 7. */
+} bcmolt_epon_oam_ctc_dba_queue_set;
+
+/** CTC Dba Prov Base. 
+ */
+typedef struct bcmolt_epon_oam_ctc_dba_prov_base
+{
+    bcmolt_epon_oam_ctc_dba_op_code dba_code;   /**< DBA Code. */
+    union
+    {
+        struct
+        {
+            uint8_t queue_sets_count;           /**< Queue Sets Count. */
+            bcmolt_epon_oam_ctc_dba_queue_set *queue_sets;  /**< Queue Sets. */
+        } get_response;
+
+        struct
+        {
+            uint8_t queue_sets_count;                       /**< Queue Sets Count. */
+            bcmolt_epon_oam_ctc_dba_queue_set *queue_sets;  /**< Queue Sets. */
+        } set_request;
+
+        struct
+        {
+            uint8_t queue_sets_count;                       /**< Queue Sets Count. */
+            bcmolt_epon_oam_ctc_dba_queue_set *queue_sets;  /**< Queue Sets. */
+        } set_response;
+    } u;
+} bcmolt_epon_oam_ctc_dba_prov_base;
+
+/** CTC Old Management Object Base. 
+ */
+typedef struct bcmolt_epon_oam_ctc_old_management_object_base
+{
+    bcmolt_epon_oam_ctc_leaf_old_management_object leaf;    /**< Leaf. */
+    uint8_t length;         /**< Length. */
+    union
+    {
+        struct
+        {
+            uint8_t port;   /**< Port. */
+        } port;
+    } u;
+} bcmolt_epon_oam_ctc_old_management_object_base;
+
+/** CTC Management Object Base. 
+ */
+typedef struct bcmolt_epon_oam_ctc_management_object_base
+{
+    bcmolt_epon_oam_ctc_leaf_management_object leaf;    /**< Leaf. */
+    uint8_t length; /**< Length. */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_ctc_port_type port_type;    /**< Port Type. */
+            uint8_t cascade_slot_number;                /**< Cascade / Slot Number. */
+            uint16_t port_number;                       /**< Port Number. */
+        } port;
+
+        struct
+        {
+            uint32_t card;      /**< Card. */
+        } card;
+
+        struct
+        {
+            uint32_t llid;      /**< LLID. */
+        } llid;
+
+        struct
+        {
+            uint32_t pon_if;    /**< PON I/F. */
+        } pon_if;
+    } u;
+} bcmolt_epon_oam_ctc_management_object_base;
+
+/** CTC Empty Var Container Base. 
+ */
+typedef struct bcmolt_epon_oam_ctc_empty_var_container_base
+{
+    bcmolt_epon_oam_ctc_branch branch;  /**< Branch. */
+    union
+    {
+        struct
+        {
+            uint16_t leaf;              /**< Leaf. */
+            bcmolt_epon_oam_oam_error_code error;                   /**< Error. */
+        } def;
+
+        struct
+        {
+            uint32_t unknown_count;                                 /**< Number of elements in unknown. */
+            uint8_t *unknown;                                       /**< Unknown. */
+        } end;
+
+        struct
+        {
+            bcmolt_epon_oam_var_leaf_attribute leaf;                /**< Leaf. */
+            bcmolt_epon_oam_oam_error_code error;                   /**< Error. */
+        } attribute;
+
+        struct
+        {
+            bcmolt_epon_oam_var_leaf_action leaf;                   /**< Leaf. */
+            bcmolt_epon_oam_oam_error_code error;                   /**< Error. */
+        } action;
+
+        struct
+        {
+            bcmolt_epon_oam_ctc_old_management_object_base object;  /**< Object. */
+        } old_management_object;
+
+        struct
+        {
+            bcmolt_epon_oam_ctc_management_object_base object;      /**< Object. */
+        } management_object;
+
+        struct
+        {
+            bcmolt_epon_oam_ctc_leaf_ext_attribute leaf;            /**< Leaf. */
+            bcmolt_epon_oam_oam_error_code error;                   /**< Error. */
+        } ext_attribute;
+
+        struct
+        {
+            bcmolt_epon_oam_ctc_leaf_ext_action leaf;               /**< Leaf. */
+            bcmolt_epon_oam_oam_error_code error;                   /**< Error. */
+        } ext_action;
+
+        struct
+        {
+            bcmolt_epon_oam_ktleaf_attribute leaf;                  /**< Leaf. */
+            bcmolt_epon_oam_oam_error_code error;                   /**< Error. */
+        } ktattribute;
+
+        struct
+        {
+            bcmolt_epon_oam_ktleaf_attribute leaf;                  /**< Leaf. */
+            bcmolt_epon_oam_oam_error_code error;                   /**< Error. */
+        } ktaction;
+    } u;
+} bcmolt_epon_oam_ctc_empty_var_container_base;
+
+/** CTC Eth Port Policing Config Base. 
+ */
+typedef struct bcmolt_epon_oam_ctc_eth_port_policing_config_base
+{
+    bcmolt_epon_oam_ctc_eth_port_policing_enable state; /**< State. */
+    union
+    {
+        struct
+        {
+            uint32_t unknown_count;                     /**< Number of elements in unknown. */
+            uint8_t *unknown;       /**< Unknown. */
+        } def;
+
+        struct
+        {
+            uint24_t cir;           /**< CIR. */
+            uint24_t bucket;        /**< Bucket. */
+            uint24_t extra_burst;   /**< Extra Burst. */
+        } enabled;
+    } u;
+} bcmolt_epon_oam_ctc_eth_port_policing_config_base;
+
+/** CTC Event Entry. 
+ */
+typedef struct bcmolt_epon_oam_ctc_event_entry
+{
+    bcmolt_epon_oam_ctc_leaf_management_object object_type; /**< Object Type. */
+    uint32_t object_instance;                   /**< Object Instance. */
+    bcmolt_epon_oam_ctc_onu_alarm_id alarm_id;  /**< Alarm ID. */
+} bcmolt_epon_oam_ctc_event_entry;
+
+/** CTC Event Status Entry. 
+ */
+typedef struct bcmolt_epon_oam_ctc_event_status_entry
+{
+    bcmolt_epon_oam_ctc_event_entry event_entry;    /**< Event Entry. */
+    bcmolt_epon_oam_ctc_event_status event_status;  /**< Event Status. */
+} bcmolt_epon_oam_ctc_event_status_entry;
+
+/** CTC Event Threshold Entry. 
+ */
+typedef struct bcmolt_epon_oam_ctc_event_threshold_entry
+{
+    bcmolt_epon_oam_ctc_event_entry event_entry;    /**< Event Entry. */
+    uint32_t set_threshold;     /**< Set Threshold. */
+    uint32_t clear_threshold;   /**< Clear Threshold. */
+} bcmolt_epon_oam_ctc_event_threshold_entry;
+
+/** CTC Event Base. 
+ */
+typedef struct bcmolt_epon_oam_ctc_event_base
+{
+    bcmolt_epon_oam_ctc_event_sub_type sub_type;                /**< Sub Type. */
+    union
+    {
+        struct
+        {
+            uint16_t entry_count;                               /**< Entry Count. */
+            bcmolt_epon_oam_ctc_event_entry *entries;           /**< Entries. */
+        } status_request;
+
+        struct
+        {
+            uint16_t entry_count;                               /**< Entry Count. */
+            bcmolt_epon_oam_ctc_event_status_entry *entries;    /**< Entries. */
+        } status_set;
+
+        struct
+        {
+            uint16_t entry_count;   /**< Entry Count. */
+            bcmolt_epon_oam_ctc_event_status_entry *entries;    /**< Entries. */
+        } status_response;
+
+        struct
+        {
+            uint16_t entry_count;                       /**< Entry Count. */
+            bcmolt_epon_oam_ctc_event_entry *entries;   /**< Entries. */
+        } threshold_request;
+
+        struct
+        {
+            uint16_t entry_count;                       /**< Entry Count. */
+            bcmolt_epon_oam_ctc_event_threshold_entry *entries; /**< Entries. */
+        } threshold_set;
+
+        struct
+        {
+            uint16_t entry_count;   /**< Entry Count. */
+            bcmolt_epon_oam_ctc_event_threshold_entry *entries; /**< Entries. */
+        } threshold_response;
+    } u;
+} bcmolt_epon_oam_ctc_event_base;
+
+/** CTC Ext Action Value Base. 
+ */
+typedef struct bcmolt_epon_oam_ctc_ext_action_value_base
+{
+    bcmolt_epon_oam_ctc_leaf_ext_action leaf;                   /**< Leaf. */
+    union
+    {
+        struct
+        {
+            uint8_t width;                                      /**< Width. */
+        } def;
+
+        struct
+        {
+            uint8_t width;                                      /**< Width. */
+            bcmolt_epon_oam_ctc_activation activate_fast_leave; /**< Activate Fast Leave. */
+        } fast_leave_admin_control;
+
+        struct
+        {
+            uint8_t width;              /**< Width. */
+            uint32_t num_llids;         /**< Number of LLIDs to Activate */
+        } multi_llid_admin_control;
+
+        struct
+        {
+            uint8_t width;              /**< Width. */
+            uint32_t sleep_duration;    /**< Sleep Duration (Unit: TQ) */
+            uint32_t wake_duration;     /**< Wake Duration (Unit: TQ) */
+            bcmolt_epon_oam_ctc_onu_sleep_flag sleep_flag;  /**< Sleep Flag. */
+            bcmolt_epon_oam_ctc_onu_sleep_mode sleep_mode;  /**< Sleep Mode. */
+        } sleep_control;
+    } u;
+} bcmolt_epon_oam_ctc_ext_action_value_base;
+
+/** CTC 2.1 ONU Service SLA Table 
+ */
+typedef struct bcmolt_epon_oam_ctc_onu_service_sla_table
+{
+    uint8_t queue_number;           /**< Queue number of service */
+    uint16_t fixed_packet_size;     /**< Fixed Packet size of service */
+    uint16_t fixed_bandwidth;       /**< Fixed bandwidth of service */
+    uint16_t guaranteed_bandwidth;  /**< Guaranteed bandwidth of service */
+    uint16_t best_effort_bandwidth; /**< Best effort bandwidth of service */
+    uint8_t wrr_weight;             /**< WRR weight of service */
+} bcmolt_epon_oam_ctc_onu_service_sla_table;
+
+/** CTC ONU Service SLA Base. 
+ */
+typedef struct bcmolt_epon_oam_ctc_onu_service_sla_base
+{
+    bcmolt_epon_oam_ctc_service_sla_operation operation_of_service_dba; /**< Operation of Service DBA */
+    union
+    {
+        struct
+        {
+            uint32_t services_count;    /**< Number of elements in services. */
+            uint8_t *services;          /**< Services. */
+        } def;
+
+        struct
+        {
+            bcmolt_epon_oam_ctc_onu_dba_scheduling_scheme scheme;   /**< Best effort scheduling scheme */
+            uint8_t priority;       /**< High priority boundary */
+            uint32_t cycle_length;  /**< Cycle Length */
+            uint8_t services_count; /**< Number of elements in Services */
+            bcmolt_epon_oam_ctc_onu_service_sla_table *services;    /**< Ctc Onu SLA Table */
+        } activate;
+    } u;
+} bcmolt_epon_oam_ctc_onu_service_sla_base;
+
+/** CTC 2.1 ONU Interface 
+ */
+typedef struct bcmolt_epon_oam_ctc_onu_interface
+{
+    bcmolt_epon_oam_ctc_onu_interface_type type;    /**< CTC ONU Interface Type */
+    uint16_t num_ports; /**< Number of Ports */
+} bcmolt_epon_oam_ctc_onu_interface;
+
+/** CTC MxU Global Params Base. 
+ */
+typedef struct bcmolt_epon_oam_ctc_mxu_global_params_base
+{
+    bcmolt_epon_oam_ctc_mxu_global_params_width width;  /**< Width. */
+    union
+    {
+        struct
+        {
+            bcmos_ipv4_address onu_ipaddress;           /**< Management ONU IP Address */
+            bcmos_ipv4_address onu_network_mask;        /**< Management ONU Mask Address */
+            bcmos_ipv4_address onu_default_gw;          /**< Management ONU default Gateway */
+            uint16_t data_cvlan;                        /**< Management Data Customer VLAN */
+            uint16_t data_svlan;                        /**< Management Data Service VLAN */
+            uint8_t data_priority;                      /**< Management Data Priority */
+        } ipv4;
+
+        struct
+        {
+            bcmos_ipv6_address onu_ipaddress;           /**< Management ONU IP Address */
+            uint32_t ipv6prefix_length;                 /**< Management ONU IPv6 prefix length */
+            bcmos_ipv6_address onu_default_gw;          /**< Management ONU default Gateway */
+            uint16_t data_cvlan;                        /**< Management Data Customer VLAN */
+            uint16_t data_svlan;                        /**< Management Data Service VLAN */
+            uint8_t data_priority;                      /**< Management Data Priority */
+        } ipv6;
+    } u;
+} bcmolt_epon_oam_ctc_mxu_global_params_base;
+
+/** CTC MxU SNMP Params Base. 
+ */
+typedef struct bcmolt_epon_oam_ctc_mxu_snmp_params_base
+{
+    bcmolt_epon_oam_ctc_mxu_snmp_params_width width;    /**< Width. */
+    union
+    {
+        struct
+        {
+            uint8_t snmp_version;                       /**< SNMP Version */
+            bcmos_ipv4_address trap_host_ip;            /**< Trap Host IP Address */
+            uint16_t trap_port;                 /**< Trap Port */
+            uint16_t snmp_port;                 /**< SNMP Port */
+            uint8_t security_name[32];          /**< Security Name */
+            uint8_t community_for_read[32];     /**< Community For Read */
+            uint8_t community_for_write[32];    /**< Community For Write */
+        } ipv4;
+
+        struct
+        {
+            uint8_t snmp_version;               /**< SNMP Version */
+            bcmos_ipv6_address trap_host_ip;    /**< Trap Host IP Address */
+            uint16_t trap_port;                 /**< Trap Port */
+            uint16_t snmp_port;                 /**< SNMP Port */
+            uint8_t security_name[32];          /**< Security Name */
+            uint8_t community_for_read[32];     /**< Community For Read */
+            uint8_t community_for_write[32];    /**< Community For Write */
+        } ipv6;
+    } u;
+} bcmolt_epon_oam_ctc_mxu_snmp_params_base;
+
+/** CTC VLAN Element. 
+ */
+typedef struct bcmolt_epon_oam_ctc_vlan_element
+{
+    uint16_t ether_type;        /**< EtherType. */
+    bcmos_vlan_tag vlan_tag;    /**< VLAN Tag. */
+} bcmolt_epon_oam_ctc_vlan_element;
+
+/** CTC VLAN Translation. 
+ */
+typedef struct bcmolt_epon_oam_ctc_vlan_translation
+{
+    bcmolt_epon_oam_ctc_vlan_element old_vlan;  /**< Old VLAN. */
+    bcmolt_epon_oam_ctc_vlan_element new_vlan;  /**< New VLAN. */
+} bcmolt_epon_oam_ctc_vlan_translation;
+
+/** CTC VLAN Aggregate Table. 
+ */
+typedef struct bcmolt_epon_oam_ctc_vlan_aggregate_table
+{
+    uint16_t vlans_count;                       /**< VLANs Count. */
+    bcmolt_epon_oam_ctc_vlan_element svlan;     /**< S-VLAN. */
+    bcmolt_epon_oam_ctc_vlan_element *vlans;    /**< VLANs. */
+} bcmolt_epon_oam_ctc_vlan_aggregate_table;
+
+/** CTC Vlan Prov Base. 
+ */
+typedef struct bcmolt_epon_oam_ctc_vlan_prov_base
+{
+    bcmolt_epon_oam_ctc_vlan_mode mode; /**< Mode. */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_ctc_vlan_element vlan;              /**< VLAN. */
+        } tag;
+
+        struct
+        {
+            bcmolt_epon_oam_ctc_vlan_element default_vlan;      /**< Default VLAN. */
+            uint32_t translations_count;                        /**< Number of elements in translations. */
+            bcmolt_epon_oam_ctc_vlan_translation *translations; /**< Translations. */
+        } translation;
+
+        struct
+        {
+            bcmolt_epon_oam_ctc_vlan_element default_vlan;      /**< Default VLAN. */
+            uint32_t permitted_vlans_count;                     /**< Number of elements in permitted_vlans. */
+            bcmolt_epon_oam_ctc_vlan_element *permitted_vlans;  /**< Permitted VLANs. */
+        } trunk;
+
+        struct
+        {
+            bcmolt_epon_oam_ctc_vlan_element default_vlan;      /**< Default VLAN. */
+            uint16_t tables_count;  /**< Tables Count. */
+            bcmolt_epon_oam_ctc_vlan_aggregate_table *tables;   /**< Tables. */
+        } aggregate;
+
+        struct
+        {
+            uint32_t permitted_vlans_count;                     /**< Number of elements in permitted_vlans. */
+            bcmolt_epon_oam_ctc_vlan_element *permitted_vlans;  /**< Permitted VLANs. */
+        } trunk_mdu;
+
+        struct
+        {
+            bcmolt_epon_oam_ctc_vlan_element default_vlan;      /**< Default VLAN. */
+            uint32_t permitted_vlans_count;                     /**< Number of elements in permitted_vlans. */
+            bcmolt_epon_oam_ctc_vlan_element *permitted_vlans;  /**< Permitted VLANs. */
+        } hybrid;
+    } u;
+} bcmolt_epon_oam_ctc_vlan_prov_base;
+
+/** Ctc ONU classification Field 
+ */
+typedef struct bcmolt_epon_oam_ctc_onu_classif_clause_base
+{
+    bcmolt_epon_oam_ctc_onu_classif_field field;            /**< CTC ONU Classification Field */
+    union
+    {
+        struct
+        {
+            uint8_t val[16];                                /**< The value to match */
+            bcmolt_epon_oam_ctc_onu_classif_operator op;    /**< The operation to perform if matched */
+        } def;
+
+        struct
+        {
+            bcmos_mac_address val;  /**< The value to match */
+            bcmolt_epon_oam_ctc_onu_classif_operator op;    /**< The operation to perform if matched */
+        } da;
+
+        struct
+        {
+            bcmos_mac_address val;  /**< The value to match */
+            bcmolt_epon_oam_ctc_onu_classif_operator op;    /**< The operation to perform if matched */
+        } sa;
+
+        struct
+        {
+            uint8_t reserved[5];    /**< Reserved bytes (set to 0) */
+            uint8_t val;            /**< The value to match */
+            bcmolt_epon_oam_ctc_onu_classif_operator op;    /**< The operation to perform if matched */
+        } vlan_pri;
+
+        struct
+        {
+            uint8_t reserved[4];    /**< Reserved bytes (set to 0) */
+            uint16_t val;           /**< The value to match */
+            bcmolt_epon_oam_ctc_onu_classif_operator op;    /**< The operation to perform if matched */
+        } vlan_id;
+
+        struct
+        {
+            uint8_t reserved[4];    /**< Reserved bytes (set to 0) */
+            uint16_t val;           /**< The value to match */
+            bcmolt_epon_oam_ctc_onu_classif_operator op;    /**< The operation to perform if matched */
+        } eth_type;
+
+        struct
+        {
+            uint8_t reserved[2];    /**< Reserved bytes (set to 0) */
+            bcmos_ipv4_address val; /**< The value to match */
+            bcmolt_epon_oam_ctc_onu_classif_operator op;    /**< The operation to perform if matched */
+        } dest_ip;
+
+        struct
+        {
+            uint8_t reserved[2];    /**< Reserved bytes (set to 0) */
+            bcmos_ipv4_address val; /**< The value to match */
+            bcmolt_epon_oam_ctc_onu_classif_operator op;    /**< The operation to perform if matched */
+        } source_ip;
+
+        struct
+        {
+            uint8_t reserved[5];    /**< Reserved bytes (set to 0) */
+            uint8_t val;            /**< The value to match */
+            bcmolt_epon_oam_ctc_onu_classif_operator op;    /**< The operation to perform if matched */
+        } ip_type;
+
+        struct
+        {
+            uint8_t reserved[5];    /**< Reserved bytes (set to 0) */
+            uint8_t val;            /**< The value to match */
+            bcmolt_epon_oam_ctc_onu_classif_operator op;    /**< The operation to perform if matched */
+        } ip_tos;
+
+        struct
+        {
+            uint8_t reserved[5];    /**< Reserved bytes (set to 0) */
+            uint8_t val;            /**< The value to match */
+            bcmolt_epon_oam_ctc_onu_classif_operator op;    /**< The operation to perform if matched */
+        } ip_prec;
+
+        struct
+        {
+            uint8_t reserved[4];    /**< Reserved bytes (set to 0) */
+            uint16_t val;           /**< The value to match */
+            bcmolt_epon_oam_ctc_onu_classif_operator op;    /**< The operation to perform if matched */
+        } source_port;
+
+        struct
+        {
+            uint8_t reserved[4];    /**< Reserved bytes (set to 0) */
+            uint16_t val;           /**< The value to match */
+            bcmolt_epon_oam_ctc_onu_classif_operator op;    /**< The operation to perform if matched */
+        } dest_port;
+
+        struct
+        {
+            uint8_t reserved[15];   /**< Reserved bytes (set to 0) */
+            uint8_t val;            /**< The value to match */
+            bcmolt_epon_oam_ctc_onu_classif_operator op;    /**< The operation to perform if matched */
+        } ip_ver;
+
+        struct
+        {
+            uint8_t reserved[12];   /**< Reserved bytes (set to 0) */
+            uint32_t val;           /**< The value to match */
+            bcmolt_epon_oam_ctc_onu_classif_operator op;    /**< The operation to perform if matched */
+        } ip_flow_label;
+
+        struct
+        {
+            bcmos_ipv6_address val; /**< The value to match */
+            bcmolt_epon_oam_ctc_onu_classif_operator op;    /**< The operation to perform if matched */
+        } dst_ipv6;
+
+        struct
+        {
+            bcmos_ipv6_address val; /**< The value to match */
+            bcmolt_epon_oam_ctc_onu_classif_operator op;    /**< The operation to perform if matched */
+        } src_ipv6;
+
+        struct
+        {
+            bcmos_ipv6_address val; /**< The value to match (the prefix length must be packed into the LSB) */
+            bcmolt_epon_oam_ctc_onu_classif_operator op;    /**< The operation to perform if matched */
+        } dst_ipv6pre;
+
+        struct
+        {
+            bcmos_ipv6_address val; /**< The value to match (the prefix length must be packed into the LSB) */
+            bcmolt_epon_oam_ctc_onu_classif_operator op;    /**< The operation to perform if matched */
+        } src_ipv6pre;
+
+        struct
+        {
+            uint8_t reserved[15];   /**< Reserved bytes (set to 0) */
+            uint8_t val;            /**< The value to match */
+            bcmolt_epon_oam_ctc_onu_classif_operator op;    /**< The operation to perform if matched */
+        } nxt_hdr;
+    } u;
+} bcmolt_epon_oam_ctc_onu_classif_clause_base;
+
+/** CTC Rule. 
+ */
+typedef struct bcmolt_epon_oam_ctc_rule
+{
+    uint8_t precedence;     /**< Precedence. */
+    uint8_t queue;          /**< Queue. */
+    uint8_t pri_marking;    /**< Pri Marking. */
+    uint8_t clauses_count;  /**< Clauses Count. */
+    bcmolt_epon_oam_ctc_onu_classif_clause_base *clauses;   /**< Clauses. */
+} bcmolt_epon_oam_ctc_rule;
+
+/** CTC Multicast VLAN Prov. 
+ */
+typedef struct bcmolt_epon_oam_ctc_multicast_vlan_prov
+{
+    bcmolt_epon_oam_ctc_multicast_vlan_operation operation; /**< Operation. */
+    union
+    {
+        struct
+        {
+            uint32_t multicast_vlans_count;                 /**< Number of elements in multicast_vlans. */
+            bcmos_vlan_tag *multicast_vlans;                /**< Multicast VLANs. */
+        }
+        delete;
+
+        struct
+        {
+            uint32_t multicast_vlans_count;                 /**< Number of elements in multicast_vlans. */
+            bcmos_vlan_tag *multicast_vlans;                /**< Multicast VLANs. */
+        } add;
+
+        struct
+        {
+            uint32_t multicast_vlans_count;                 /**< Number of elements in multicast_vlans. */
+            bcmos_vlan_tag *multicast_vlans;                /**< Multicast VLANs. */
+        } list;
+    } u;
+} bcmolt_epon_oam_ctc_multicast_vlan_prov;
+
+/** CTC IPTV VLAN Entry. 
+ */
+typedef struct bcmolt_epon_oam_ctc_iptv_vlan_entry
+{
+    bcmos_vlan_tag multicast_vlan;  /**< Multicast VLAN. */
+    bcmos_vlan_tag iptv_user_vlan;  /**< IPTV User VLAN. */
+} bcmolt_epon_oam_ctc_iptv_vlan_entry;
+
+/** CTC Multicast Tag Operation Base. 
+ */
+typedef struct bcmolt_epon_oam_ctc_multicast_tag_operation_base
+{
+    bcmolt_epon_oam_ctc_multicast_tag_mode tag_mode;    /**< Tag Mode. */
+    union
+    {
+        struct
+        {
+            uint8_t multicast_vlans_count;              /**< Number of elements in Multicast VLANs */
+            bcmolt_epon_oam_ctc_iptv_vlan_entry *multicast_vlans;   /**< Multicast VLANs. */
+        } strip_data_query_iptv;
+    } u;
+} bcmolt_epon_oam_ctc_multicast_tag_operation_base;
+
+/** CTC Multicast Control Entry GDA MAC Only. 
+ */
+typedef struct bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_only
+{
+    uint16_t user_id;                       /**< User ID. */
+    uint16_t reserved;                      /**< Reserved. */
+    bcmos_mac_address group_mac_address;    /**< Group MAC Address. */
+} bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_only;
+
+/** CTC Multicast Control Entry GDA MAC + VLAN ID. 
+ */
+typedef struct bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_vlan_id
+{
+    uint16_t user_id;                       /**< User ID. */
+    uint16_t multicast_vlan;                /**< Multicast VLAN. */
+    bcmos_mac_address group_mac_address;    /**< Group MAC Address. */
+} bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_vlan_id;
+
+/** CTC Multicast Control Entry GDA MAC + IPv4 SA. 
+ */
+typedef struct bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_ipv4sa
+{
+    uint16_t user_id;                       /**< User ID. */
+    bcmos_mac_address group_mac_address;    /**< Group MAC Address. */
+    bcmos_ipv4_address ipsource_address;    /**< IP Source Address. */
+} bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_ipv4sa;
+
+/** CTC Multicast Control Entry GDA IP + Mcast VLAN ID. 
+ */
+typedef struct bcmolt_epon_oam_ctc_multicast_control_entry_gda_ipplus_mcast_vlan_id
+{
+    uint16_t user_id;                       /**< User ID. */
+    uint16_t multicast_vlan;                /**< Multicast VLAN. */
+    uint16_t reserved;                      /**< Reserved. */
+    bcmos_ipv4_address ipmulticast_address; /**< IP Multicast Address. */
+} bcmolt_epon_oam_ctc_multicast_control_entry_gda_ipplus_mcast_vlan_id;
+
+/** CTC Multicast Control Entry GDA IPv6 + Mcast VLAN ID. 
+ */
+typedef struct bcmolt_epon_oam_ctc_multicast_control_entry_gda_ipv6plus_mcast_vlan_id
+{
+    uint16_t user_id;           /**< User ID. */
+    uint16_t multicast_vlan;    /**< Multicast VLAN. */
+    bcmos_ipv6_address ipv6multicast_address;   /**< IPv6 Multicast Address. */
+} bcmolt_epon_oam_ctc_multicast_control_entry_gda_ipv6plus_mcast_vlan_id;
+
+/** CTC Multicast Control Entry GDA MAC + IPv6 SA. 
+ */
+typedef struct bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_ipv6sa
+{
+    uint16_t user_id;                       /**< User ID. */
+    bcmos_mac_address group_mac_address;    /**< Group MAC Address. */
+    bcmos_ipv6_address ipsource_address;    /**< IP Source Address. */
+} bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_ipv6sa;
+
+/** CTC Multicast Control. 
+ */
+typedef struct bcmolt_epon_oam_ctc_multicast_control
+{
+    bcmolt_epon_oam_ctc_multicast_control_action action;    /**< Action. */
+    bcmolt_epon_oam_ctc_multicast_control_type type;        /**< Type. */
+    union
+    {
+        struct
+        {
+            uint8_t total_entries_count;                    /**< Number of remaining list elements in all remaining variable containers */
+            uint32_t entries_count; /**< Number of elements in entries. */
+            bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_only *entries;  /**< Entries. */
+        } gda_mac_only;
+
+        struct
+        {
+            uint8_t total_entries_count;    /**< Number of remaining list elements in all remaining variable containers */
+            uint32_t entries_count;         /**< Number of elements in entries. */
+            bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_vlan_id *entries;  /**< Entries. */
+        } gda_mac_plus_vlan_id;
+
+        struct
+        {
+            uint8_t total_entries_count;    /**< Number of remaining list elements in all remaining variable containers */
+            uint32_t entries_count;         /**< Number of elements in entries. */
+            bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_ipv4sa *entries;   /**< Entries. */
+        } gda_mac_plus_ipv4sa;
+
+        struct
+        {
+            uint8_t total_entries_count;    /**< Number of remaining list elements in all remaining variable containers */
+            uint32_t entries_count;         /**< Number of elements in entries. */
+            bcmolt_epon_oam_ctc_multicast_control_entry_gda_ipplus_mcast_vlan_id *entries;  /**< Entries. */
+        } gda_ipplus_mcast_vlan_id;
+
+        struct
+        {
+            uint8_t total_entries_count;    /**< Number of remaining list elements in all remaining variable containers */
+            uint32_t entries_count;         /**< Number of elements in entries. */
+            bcmolt_epon_oam_ctc_multicast_control_entry_gda_ipv6plus_mcast_vlan_id *entries;    /**< Entries. */
+        } gda_ipv6plus_mcast_vlan_id;
+
+        struct
+        {
+            uint8_t total_entries_count;    /**< Number of remaining list elements in all remaining variable containers */
+            uint32_t entries_count;         /**< Number of elements in entries. */
+            bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_ipv6sa *entries;   /**< Entries. */
+        } gda_mac_plus_ipv6sa;
+    } u;
+} bcmolt_epon_oam_ctc_multicast_control;
+
+/** CTC 2.1 ONU LLID/Queue 
+ */
+typedef struct bcmolt_epon_oam_ctc_onu_llid_queue
+{
+    uint16_t queue_id;      /**< ID of queue number for the LLID */
+    uint16_t wrr_weight;    /**< WRR Weight of queue number */
+} bcmolt_epon_oam_ctc_onu_llid_queue;
+
+/** Zte Vlan Mac. 
+ */
+typedef struct bcmolt_epon_oam_zte_vlan_mac
+{
+    bcmos_vlan_tag vlan_id;         /**< Vlan ID. */
+    bcmos_mac_address mac_filter;   /**< Mac Filter. */
+} bcmolt_epon_oam_zte_vlan_mac;
+
+/** CTC Ext Attribute Value Base. 
+ */
+typedef struct bcmolt_epon_oam_ctc_ext_attribute_value_base
+{
+    bcmolt_epon_oam_ctc_leaf_ext_attribute leaf;    /**< Leaf. */
+    union
+    {
+        struct
+        {
+            uint8_t width;  /**< Width. */
+            bcmolt_epon_oam_pppo_etest_status status;       /**< Status. */
+            bcmolt_epon_oam_pppo_etest_fail_reason reason;  /**< Reason. */
+        } pppo_etest_result;
+
+        struct
+        {
+            uint8_t width;  /**< Width. */
+            bcmolt_epon_oam_start_or_stop_indication start_or_stop; /**< StartOrStop. */
+            uint8_t user_name[64];                  /**< UserName. */
+            uint8_t password[32];                   /**< Password. */
+            bcmolt_epon_oam_pppo_eauth_mode mode;   /**< Mode. */
+            uint16_t vlan;                      /**< Vlan. */
+        } pppo_etest_configuration;
+
+        struct
+        {
+            uint8_t width;                      /**< Width. */
+            uint32_t unknown_count;             /**< Number of elements in unknown. */
+            uint8_t *unknown;                   /**< Unknown. */
+        } def;
+
+        struct
+        {
+            uint8_t width;                      /**< Width. */
+            uint32_t unknown_count;             /**< Number of elements in unknown. */
+            uint8_t *unknown;                   /**< Unknown. */
+        } end;
+
+        struct
+        {
+            uint8_t width;                      /**< Width. */
+            uint8_t vendor_id[4];               /**< Vendor ID. */
+            uint32_t onu_model;                 /**< ONU Model. */
+            bcmos_mac_address onu_mac;          /**< ONU MAC. */
+            uint8_t hwversion[8];               /**< HW Version. */
+            uint8_t swversion[16];              /**< SW Version. */
+            uint8_t ext_onu_model[16];          /**< Ext ONU Model. */
+        } onu_serial_number;
+
+        struct
+        {
+            uint8_t width;                      /**< Width. */
+            uint32_t firmware_version_count;    /**< Number of elements in firmware_version. */
+            uint8_t *firmware_version;          /**< Firmware Version. */
+        } firmware_version;
+
+        struct
+        {
+            uint8_t width;                      /**< Width. */
+            uint16_t vendor_id;                 /**< Vendor ID. */
+            uint16_t chip_model;                /**< Chip Model. */
+            uint8_t revision;                   /**< Revision. */
+            uint8_t design_date[3];             /**< Design Date. */
+        } chipset_id;
+
+        struct
+        {
+            uint8_t width;                      /**< Width. */
+            bcmolt_epon_oam_ctc_supported_services services;    /**< Services. */
+            uint8_t num_geports;                                    /**< Num GE Ports. */
+            uint64_t gebitmap;                                      /**< GE Bitmap. */
+            uint8_t num_feports;                                    /**< Num FE Ports. */
+            uint64_t febitmap;                                      /**< FE Bitmap. */
+            uint8_t num_pots_ports;                                 /**< Num POTS Ports. */
+            uint8_t num_e1ports;                                    /**< Num E1 Ports. */
+            uint8_t num_upstream_queues;                            /**< Num Upstream Queues. */
+            uint8_t max_queues_per_port_up;                         /**< Max Queues Per Port Up. */
+            uint8_t num_downstream_queues;                          /**< Num Downstream Queues. */
+            uint8_t max_queues_per_port_down;                       /**< Max Queues Per Port Down. */
+            uint8_t battery_backup;                                 /**< Battery Backup. */
+        } onu_capabilities1;
+
+        struct
+        {
+            uint8_t width;                                          /**< Width. */
+            uint16_t transceiver_temperature;                       /**< Transceiver Temperature */
+            uint16_t supply_vcc;                                    /**< Supply Voltage (Vcc) */
+            uint16_t tx_bias_cur;                                   /**< Tx Bias Current */
+            uint16_t tx_power_out;                                  /**< Tx Power Output */
+            uint16_t rx_power_in;                                   /**< Rx Power Input */
+        } optical_transceiver_diagnosis;
+
+        struct
+        {
+            uint8_t width;                                          /**< Width. */
+            bcmolt_epon_oam_ctc_onu_service_sla_base service_sla;   /**< Service SLA */
+        } service_sla;
+
+        struct
+        {
+            uint8_t width;  /**< Width. */
+            bcmolt_epon_oam_ctc_onu_type onu_type;                      /**< CTC ONU Type */
+            uint8_t num_links;                                          /**< Number of links the ONU supports */
+            bcmolt_epon_oam_ctc_onu_protection_type protection_type;    /**< CTC ONU Protection Type */
+            uint8_t num_pon_ifs;        /**< Number of PON Interfaces */
+            uint8_t num_slots;          /**< Number of Slot */
+            uint8_t interfaces_count;   /**< Number of elements in Interfaces */
+            bcmolt_epon_oam_ctc_onu_interface *interfaces;  /**< List of interfaces */
+            bcmos_bool battery_backup;                      /**< Battery Backup */
+        } onu_capabilities2;
+
+        struct
+        {
+            uint8_t width;  /**< Width. */
+            bcmolt_epon_oam_ctc_enabled_state holdover_state;   /**< Current state of ONU holdover */
+            uint32_t holdover_time; /**< ONU state holdover time, in ms */
+        } holdover_config;
+
+        struct
+        {
+            bcmolt_epon_oam_ctc_mxu_global_params_base params;  /**< Parameters */
+        } mxu_manage_global_parameter;
+
+        struct
+        {
+            bcmolt_epon_oam_ctc_mxu_snmp_params_base params;    /**< Parameters */
+        } mxu_manage_snmp_parameter;
+
+        struct
+        {
+            uint8_t width;              /**< Width. */
+            uint8_t pon_number;         /**< Active PON Port Number */
+        } active_pon_ifadmin;
+
+        struct
+        {
+            uint8_t width;              /**< Width. */
+            bcmos_bool is_ipv6aware;    /**< If this is set, IPv6 aware is supported */
+            bcmolt_epon_oam_ctc_onu_power_supply_control_type power_control_type;   /**< ONU Power Supply Control */
+            uint8_t service_sla;    /**< 0x01: Not support Service SLA. 0x02-0x08: The number of service supported */
+        } onu_capabilities3;
+
+        struct
+        {
+            uint8_t width;          /**< Width. */
+            bcmos_bool link_state;  /**< Link State. */
+        } eth_link_state;
+
+        struct
+        {
+            uint8_t width;          /**< Width. */
+            bcmos_bool enabled;     /**< Enabled. */
+        } eth_port_pause;
+
+        struct
+        {
+            uint8_t width;          /**< Width. */
+            bcmolt_epon_oam_ctc_eth_port_policing_config_base config;   /**< Config. */
+        } eth_port_policing;
+
+        struct
+        {
+            uint8_t width;                      /**< Width. */
+            bcmos_bool port_state;              /**< Port State. */
+        } voip_port;
+
+        struct
+        {
+            uint8_t width;                      /**< Width. */
+            bcmos_bool port_state;              /**< Port State. */
+        } e1port;
+
+        struct
+        {
+            uint8_t width;                      /**< Width. */
+            bcmos_bool rate_limiting_enabled;   /**< Rate Limiting Enabled. */
+            uint24_t cir;                       /**< Downstream Committed Information Rate in Kbps */
+            uint24_t pir;                       /**< Downstream Peak Information Rate in Kbps */
+        } eth_port_down_rate_limiting;
+
+        struct
+        {
+            uint8_t width;                      /**< Width. */
+            bcmolt_epon_oam_ctc_enabled_state state;    /**< State of the loopback detection feature */
+        } port_loop_detect;
+
+        struct
+        {
+            uint8_t width;  /**< Width. */
+            bcmolt_epon_oam_ctc_vlan_prov_base vlan_info;   /**< VLAN Info. */
+        } vlan;
+
+        struct
+        {
+            uint8_t width;  /**< Width. */
+            bcmolt_epon_oam_ctc_classification_operation op;    /**< Op. */
+            uint8_t rules_count;                                /**< Rules Count. */
+            bcmolt_epon_oam_ctc_rule *rules;                    /**< Rules. */
+        } classification_and_marking;
+
+        struct
+        {
+            uint8_t width;                                      /**< Width. */
+            bcmolt_epon_oam_ctc_multicast_vlan_prov vlan_info;  /**< VLAN Info. */
+        } multicast_vlan;
+
+        struct
+        {
+            uint8_t width;  /**< Width. */
+            bcmolt_epon_oam_ctc_multicast_tag_operation_base tag_operation; /**< Tag Operation. */
+        } multicast_tag_operation;
+
+        struct
+        {
+            uint8_t width;  /**< Width. */
+            bcmolt_epon_oam_ctc_multicast_switch_mode mode; /**< Mode. */
+        } multicast_switch;
+
+        struct
+        {
+            uint8_t width;  /**< Width. */
+            bcmolt_epon_oam_ctc_multicast_control value;    /**< Value. */
+        } multicast_control;
+
+        struct
+        {
+            uint8_t width;                      /**< Width. */
+            uint8_t max_groups;                 /**< Max Groups. */
+        } group_max;
+
+        struct
+        {
+            uint8_t width;                      /**< Width. */
+            uint32_t fast_leave_modes_count;    /**< Number of elements in Fast Leave Modes */
+            uint32_t *fast_leave_modes;         /**< Bitmaps for each enumerated fast leave mode */
+        } fast_leave_ability;
+
+        struct
+        {
+            uint8_t width;                      /**< Width. */
+            bcmolt_epon_oam_ctc_enabled_state state;    /**< State. */
+        } fast_leave_admin_state;
+
+        struct
+        {
+            uint8_t width;                  /**< Width. */
+            uint8_t llid_queue_table_count; /**< Number of elements in LLID/Queue Table */
+            bcmolt_epon_oam_ctc_onu_llid_queue *llid_queue_table;   /**< CTC 2.1 ONU LLID Queue Configuration Table */
+        } llid_queue_config;
+
+        struct
+        {
+            uint8_t width;              /**< Width. */
+            bcmos_mac_address iad_mac;  /**< IAD MAC Address */
+            bcmolt_epon_oam_ctc_voip_protocol protocol_support; /**< Protocol Support */
+            uint8_t iad_software_ver[32];                       /**< IAD Software version */
+            uint8_t iad_software_time[32];                      /**< IAD software time, version time format uses:YYYYMMDDHHMMSS */
+            uint8_t voip_user_count;                        /**< Indicate POTS number of IAD module */
+        } iad_information;
+
+        struct
+        {
+            uint8_t width;                                  /**< Width. */
+            bcmolt_epon_oam_ctc_voice_ipmode voice_ipmode;  /**< CTC Voice IP Mode */
+            bcmos_ipv4_address iad_ipaddr;                  /**< IAD IP Address */
+            bcmos_ipv4_address iad_net_mask;                /**< IAD Net Mask Address */
+            bcmos_ipv4_address iad_default_gw;              /**< IAD Default Gateway */
+            bcmolt_epon_oam_ctc_pppoe_mode pppoe_mode;      /**< PPPoE Mode */
+            uint8_t pppoe_username[32];                     /**< PPPoE Username */
+            uint8_t pppoe_password[32];                     /**< PPPoE Password */
+            bcmolt_epon_oam_ctc_voice_tagging_mode tagging_mode;    /**< Tagging Mode */
+            uint16_t voice_cvlan;                       /**< Voice CVLAN */
+            uint16_t voice_svlan;                       /**< Voice SVLAN */
+            uint8_t voice_pri;                          /**< Voice Priority */
+        } voip_global_parameters;
+
+        struct
+        {
+            uint8_t width;                              /**< Width. */
+            uint16_t mgport_number;                     /**< MG Port Number */
+            bcmos_ipv4_address mgc_ip;                  /**< Activate softswitch platform IP address */
+            uint16_t mgc_com_port;                      /**< Activate softswitch platform COM port number */
+            bcmos_ipv4_address backup_mgc_ip;           /**< Backup softswitch platform IP address. If it is 0x00000000, dual homing is not enable */
+            uint16_t backup_mgc_com_port;               /**< Backup softswitch platform COM port number, if it is 0, dual homing is not enabled */
+            bcmos_bool use_active_mgc;                  /**< Should we use the active softswitch platform instead of the backup? */
+            bcmolt_epon_oam_ctc_h248reg_mode reg_mode;  /**< H248 Reg Mode */
+            uint8_t mid[64];    /**< MID */
+            bcmolt_epon_oam_ctc_h248heartbeat_mode heartbeat_mode;  /**< Heartbeat Mode */
+            uint16_t heartbeat_cycle;                       /**< Heartbeat Cycle */
+            uint8_t heartbeat_count;                        /**< Heartbeat Count */
+        } h248parameters;
+
+        struct
+        {
+            uint8_t width;                                  /**< Width. */
+            uint8_t name[32];                               /**< User TID Name */
+        } h248user_tid_information;
+
+        struct
+        {
+            uint8_t width;                                  /**< Width. */
+            uint8_t num_rtp_tids;                           /**< Number of RTP TIDs */
+            uint8_t prefix[16];                             /**< Prefix in ASCII */
+            uint64_t digit_begin;                           /**< RTP TID digital portion start value */
+            bcmolt_epon_oam_ctc_rtp_tid_mode rtp_tid_mode;  /**< RTP TID Mode */
+            uint8_t rtp_tid_length;                     /**< RTP TID Digit Length */
+        } h248rtp_tid_configuration;
+
+        struct
+        {
+            uint8_t width;                              /**< Width. */
+            uint8_t num_rtp_tids;                       /**< Number of RTP TIDs */
+            uint8_t first_rtp_tid_name[32];             /**< Frist RTP TID Name */
+        } h248rtp_tid_information;
+
+        struct
+        {
+            uint8_t width;                              /**< Width. */
+            uint16_t mgport_number;                     /**< MG Port Number */
+            bcmos_ipv4_address active_sip_ip;           /**< Active SIP agent server IP address */
+            uint16_t active_sip_com_port;               /**< Active SIP agent server port number */
+            bcmos_ipv4_address backup_sip_ip;           /**< Backup SIP agent server IP address */
+            uint16_t backup_sip_com_port;               /**< Backup SIP Proxy Server Com Port Number */
+            bcmos_ipv4_address active_sip_proxy_server; /**< Active SIP Proxy Server */
+            bcmos_ipv4_address active_sip_registration_server_ip;   /**< SIP Register Server IP */
+            uint16_t active_sip_registration_server_com_port;       /**< Active SIP registration server port number */
+            bcmos_ipv4_address backup_sip_reg_ip;                   /**< Backup SIP Registration Server IP */
+            uint16_t backup_sip_reg_com_port;                       /**< Backup SIP Registration Server Com Port Number */
+            bcmos_ipv4_address outbound_server_ip;                  /**< Out Bound Server IP */
+            uint16_t outbound_server_port;          /**< Out Bound Server Port Number */
+            uint32_t sip_registration_interval;     /**< Registration refresh cycle, unit is second, and the default value is 3600s */
+            bcmos_bool disable_heartbeat_switch;    /**< Disable Heartbeat Switch Feature */
+            uint16_t heartbeat_cycle;               /**< Heartbeat Cycle */
+            uint16_t heartbeat_count;               /**< Heartbeat Count */
+        } sip_parameters;
+
+        struct
+        {
+            uint8_t width;          /**< Width. */
+            uint8_t account[16];    /**< User account, User phone number, and should use ASCII code */
+            uint8_t name[32];       /**< User name, SIP port username, and should use ASCII code */
+            uint8_t password[16];   /**< User password, SIP port password, and should use ASCII code. */
+        } sip_user_parameters;
+
+        struct
+        {
+            uint8_t width;          /**< Width. */
+            bcmolt_epon_oam_ctc_voice_t38mode voice_t38enable;  /**< Ctc Voice T38 Enable Mode */
+            bcmolt_epon_oam_ctc_voice_fax_modem_control_mode voice_fax_modem_control;   /**< CTC Voice Fax Modem Control Mode */
+        } fax_modem_configuration;
+
+        struct
+        {
+            uint8_t width;  /**< Width. */
+            bcmolt_epon_oam_ctc_iad_operation_status iad_operation_status;  /**< CTC IAD Operation Status */
+        } h248iad_operation_status;
+
+        struct
+        {
+            uint8_t width;  /**< Width. */
+            bcmolt_epon_oam_ctc_iad_port_status iad_port_status;                /**< CTC IAD Port Status */
+            bcmolt_epon_oam_ctc_iad_port_service_state iad_port_service_state;  /**< CTC IAD Port Service State */
+            bcmolt_epon_oam_ctc_iad_port_codec_mode iad_port_codec_mode;        /**< CTC IAD Port Codec Mode */
+        } pots_status;
+
+        struct
+        {
+            uint8_t width;  /**< Width. */
+            bcmolt_epon_oam_ctc_iad_operation iad_operation;    /**< CTC IAD Operation */
+        } iad_operation;
+
+        struct
+        {
+            uint8_t width;                  /**< Width. */
+            uint16_t sip_digital_map_count; /**< Number of elements in SIP Digital Map */
+            uint8_t *sip_digital_map;       /**< SIP Protocol Digital Map, ASCII code type */
+        } sip_digit_map;
+
+        struct
+        {
+            uint8_t width;                  /**< Width. */
+            bcmolt_epon_oam_ctc_onu_alarm_id id;        /**< Alarm ID */
+            bcmolt_epon_oam_ctc_enabled_state config;   /**< Alarm configuration state */
+        } alarm_admin_state;
+
+        struct
+        {
+            uint8_t width;  /**< Width. */
+            bcmolt_epon_oam_ctc_onu_alarm_id id;    /**< Alarm ID */
+            uint32_t threshold;                     /**< Alarm Threshold */
+            uint32_t clearing_threshold;            /**< Clearing Alarm Threshold */
+        } alarm_threshold;
+
+        struct
+        {
+            uint8_t width;                  /**< Width. */
+            bcmos_ipv4_address ipaddress;   /**< IP Address. */
+            bcmos_ipv4_address ipmask;      /**< IP Mask. */
+            bcmos_ipv4_address gateway;     /**< GateWay. */
+            bcmos_vlan_tag vlan_id;         /**< Vlan ID. */
+            uint8_t user_name[8];           /**< User Name. */
+            uint8_t password[8];            /**< Password. */
+            uint8_t action;                 /**< Action. */
+            uint8_t version_number;         /**< Version Number. */
+            uint8_t ver1name[16];           /**< Ver1 Name. */
+            uint8_t ver2name[16];           /**< Ver2 Name. */
+            uint8_t ver3name[16];           /**< Ver3 Name. */
+        } version_server_para;
+
+        struct
+        {
+            uint8_t width;                  /**< Width. */
+            uint16_t mac_limit_number;      /**< Mac Limit Number. */
+        } onu_mac_limit;
+
+        struct
+        {
+            uint8_t width;                  /**< Width. */
+            uint32_t mac_aging_time;        /**< Mac Aging Time. */
+        } onu_mac_aging_time;
+
+        struct
+        {
+            uint8_t width;                  /**< Width. */
+            bcmolt_epon_oam_zte_onu_port_mac_operation op;  /**< Op. */
+            uint8_t number_of_entries;                      /**< Number Of Entries. */
+            bcmolt_epon_oam_zte_vlan_mac *clause;           /**< Clause. */
+        } onu_port_mac_filter;
+
+        struct
+        {
+            uint8_t width;  /**< Width. */
+            bcmolt_epon_oam_zte_onu_port_mac_operation op;  /**< Op. */
+            uint8_t number_of_entries;                      /**< Number Of Entries. */
+            bcmolt_epon_oam_zte_vlan_mac *clause;           /**< Clause. */
+        } onu_port_mac_binding;
+
+        struct
+        {
+            uint8_t width;  /**< Width. */
+            bcmolt_epon_oam_zte_onu_port_mac_operation op;  /**< Op. */
+            uint8_t number_of_entries;                      /**< Number Of Entries. */
+            bcmolt_epon_oam_zte_vlan_mac *clause;           /**< Clause. */
+        } onu_port_mac_static;
+
+        struct
+        {
+            uint8_t width;              /**< Width. */
+            uint64_t ifinoctets;        /**< IfInOctets. */
+            uint64_t ifinucastpkts;     /**< IfInUcastPkts. */
+            uint64_t ifinnucastpkts;    /**< IfInNUcastPkts. */
+            uint64_t ifindiscards;      /**< IfInDiscards. */
+            uint64_t ifinerrors;        /**< IfInErrors. */
+            uint64_t ifoutoctets;       /**< IfOutOctets. */
+            uint64_t ifoutucastpkts;    /**< IfOutUcastPkts. */
+            uint64_t ifoutnucastpkts;   /**< IfOutNUcastPkts. */
+            uint64_t ifoutdiscards;     /**< IfOutDiscards. */
+            uint64_t ifouterrors;       /**< IfOutErrors. */
+            uint64_t reserved1;         /**< Reserved1. */
+            uint64_t reserved2;         /**< Reserved2. */
+            uint64_t reserved3;         /**< Reserved3. */
+            uint64_t reserved4;         /**< Reserved4. */
+        } onu_performance_stat;
+
+        struct
+        {
+            uint8_t width;              /**< Width. */
+            bcmolt_epon_oam_zte_isolate_mode port_isolate;  /**< Port Isolate. */
+        } onu_port_isolate;
+
+        struct
+        {
+            uint8_t width;  /**< Width. */
+        } onu_mac_address_table_query;
+
+        struct
+        {
+            uint8_t width;  /**< Width. */
+            bcmos_bool ponmacdsratelimitingenable;  /**< PonMacDSrateLimitingEnable. */
+            uint24_t cir;   /**< CIR. */
+            uint24_t cbs;   /**< CBS. */
+        } onu_pon_mac_downstream_shaping;
+
+        struct
+        {
+            uint8_t width;  /**< Width. */
+            bcmolt_epon_oam_zte_buffer_manage_mode buffer_management_capability;    /**< Buffer Management Capability. */
+            uint24_t dsbuffer_size_minimum_value;   /**< DS Buffer Size Minimum Value. */
+            uint24_t dsbuffer_size_maximum_value;   /**< DS Buffer Size Maximum Value. */
+            uint24_t usbuffer_size_minimum_value;   /**< US Buffer Size Minimum Value. */
+            uint24_t usbuffer_size_maximum_value;   /**< US Buffer Size Maximum Value. */
+        } onu_pon_mac_usdsbuffer_capability_query;
+
+        struct
+        {
+            uint8_t width;  /**< Width. */
+            bcmos_bool buffer_management_indication;        /**< Buffer Management Indication. */
+            bcmolt_epon_oam_zte_dsbuf_direction direction;  /**< Direction. */
+            uint24_t buffer_size;   /**< Buffer Size. */
+        } onu_pon_mac_usdsbuffer;
+
+        struct
+        {
+            uint8_t width;          /**< Width. */
+            bcmolt_epon_oam_zte_statistics_action_mode statistics_action;   /**< Statistics Action. */
+            uint24_t statistics_interval;       /**< Statistics Interval. */
+            uint32_t statistics_duration_time;  /**< Statistics Duration Time. */
+        } onu_port_statistics_collect_control;
+
+        struct
+        {
+            uint8_t width;                      /**< Width. */
+            bcmolt_epon_oam_zte_statistics_reset_mode statistics_reset; /**< Statistics Reset. */
+        } onu_port_statistics_counter_reset;
+
+        struct
+        {
+            uint8_t width;  /**< Width. */
+            bcmolt_epon_oam_uni_flow_statistics_collect_control_mode uniflowstatisticscollectcontrolindication; /**< UniFlowStatisticsCollectControlIndication. */
+            uint64_t ifinoctets;        /**< IfInOctets. */
+            uint64_t ifinucastpkts;     /**< IfInUcastPkts. */
+            uint64_t ifinnucastpkts;    /**< IfInNUcastPkts. */
+            uint64_t ifindiscards;      /**< IfInDiscards. */
+            uint64_t ifinerrors;        /**< IfInErrors. */
+            uint64_t ifoutoctets;       /**< IfOutOctets. */
+            uint64_t ifoutucastpkts;    /**< IfOutUcastPkts. */
+            uint64_t ifoutnucastpkts;   /**< IfOutNUcastPkts. */
+            uint64_t ifoutdiscards;     /**< IfOutDiscards. */
+            uint64_t ifouterrors;       /**< IfOutErrors. */
+        } onu_port_flux_statistics_counter;
+
+        struct
+        {
+            uint8_t width;              /**< Width. */
+            uint8_t ponportnumber;      /**< PonPortNumber. */
+            bcmolt_epon_oam_light_indication_mode main_light_indication;    /**< Main Light Indication. */
+            bcmolt_epon_oam_light_indication_mode reserve_light_indication; /**< Reserve Light Indication. */
+        } onu_light_exception;
+
+        struct
+        {
+            uint8_t width;  /**< Width. */
+            bcmolt_epon_oam_match_mac_address_mode match_mac_address;   /**< Match MAC Address. */
+            bcmos_mac_address pon_mac_address;                      /**< Pon MAC Address. */
+            bcmolt_epon_oam_zte_light_control_action_mode action;   /**< Action. */
+            uint16_t duration_time;                 /**< Duration Time. */
+        } onu_light_control;
+
+        struct
+        {
+            uint8_t width;                          /**< Width. */
+            uint64_t frames_transmittedok;          /**< Frames TransmittedOK. */
+            uint64_t octets_transmittedok;          /**< Octets TransmittedOK. */
+            uint64_t multicast_framesxmitted_ok;    /**< Multicast FramesXmitted OK. */
+            uint64_t broadcast_framesxmitted_ok;    /**< Broadcast FramesXmitted OK. */
+            uint64_t frames_received_ok;            /**< Frames Received OK. */
+            uint64_t octets_received_ok;            /**< Octets Received OK. */
+            uint64_t multicast_frames_received_ok;  /**< Multicast Frames Received OK. */
+            uint64_t broadcast_frames_received_ok;  /**< Broadcast Frames Received OK. */
+        } onu_pon_port_statistics_get1;
+
+        struct
+        {
+            uint8_t width;                      /**< Width. */
+            uint64_t crc8errors;                /**< CRC8 Errors. */
+            uint64_t fec_corrected_blocks;      /**< FEC Corrected Blocks. */
+            uint64_t fec_uncorrectable_blocks;  /**< FEC Uncorrectable Blocks. */
+            uint64_t mpcp_mac_ctrl_frames_transmitted;  /**< Mpcp Mac Ctrl Frames Transmitted. */
+            uint64_t mpcp_mac_ctrl_frames_received;     /**< Mpcp Mac Ctrl Frames Received. */
+            uint64_t mpcp_tx_register;                  /**< Mpcp Tx Register. */
+            uint64_t mpcp_tx_regrequest;                /**< Mpcp Tx RegRequest. */
+            uint64_t mpcp_tx_report;                    /**< Mpcp Tx Report. */
+            uint64_t mpcp_rx_gate;                      /**< Mpcp Rx Gate. */
+            uint64_t mpcp_rx_registe;                   /**< Mpcp Rx Registe. */
+        } onu_pon_port_statistics_get2;
+
+        struct
+        {
+            uint8_t width;  /**< Width. */
+            bcmolt_epon_oam_alarm_config_mode alarm_config; /**< Alarm Config. */
+        } alarm_config;
+
+        struct
+        {
+            uint8_t width;  /**< Width. */
+            bcmolt_epon_oam_onu_excl_ability ability;   /**< Ability. */
+        } rougue_onu_excl_ability;
+
+        struct
+        {
+            uint8_t width;  /**< Width. */
+            bcmolt_epon_oam_ctc_onu_sleep_mode sleep_mode_capability;               /**< ONU Sleep Mode Capability */
+            bcmolt_epon_oam_ctc_onu_early_wake_capability early_wake_up_capability; /**< ONU Early Wake-Up Capability */
+        } onu_power_saving_capabilities;
+
+        struct
+        {
+            uint8_t width;  /**< Width. */
+            bcmolt_epon_oam_ctc_early_wake_up_mode early_wake_up;   /**< 0x00: Enable; 0x01: Disable; 0xFF: Not Supported; Others: Reserved */
+            uint8_t sleep_duration_max[6];  /**< Maximum refresh time in power saving (Unit: TQ) */
+        } onu_power_saving_config;
+
+        struct
+        {
+            uint8_t width;                  /**< Width. */
+            uint16_t optical_los_time;      /**< Time of Optical LoS in Protection Switching (Unit: ms) */
+            uint16_t mac_los_time;          /**< Time of MAC LoS in Protection Switching (Unit: ms) */
+        } onu_protection_parameters;
+
+        struct
+        {
+            uint8_t width;                  /**< Width. */
+            bcmolt_epon_oam_ctc_port_disable_on_loop_detected_state state;  /**< Indicates whether disable port automatically when detecting the port loopback */
+        } port_disable_on_loop_detected;
+
+        struct
+        {
+            uint8_t width;          /**< Width. */
+            uint32_t aging_time;    /**< MAC Aging Time (Unit: s) */
+        } mac_aging_time;
+
+        struct
+        {
+            uint8_t width;          /**< Width. */
+            bcmolt_epon_oam_ctc_monitoring_status monitoring_status;    /**< Monitoring Status. */
+            uint32_t monitoring_period; /**< Performance Monitoring Period (Unit: s) */
+        } performance_monitoring_status;
+
+        struct
+        {
+            uint8_t width;              /**< Width. */
+            uint64_t stats_field1;      /**< Downstream DropEvents, Downstream Fragments, Downstream Discards */
+            uint64_t stats_field2;      /**< Upstream DropEvents, Upstream Fragments, Upstream Discards */
+            uint64_t stats_field3;      /**< Downstream Octets, Downstream Jabbers, Downstream Erros */
+            uint64_t stats_field4;      /**< Upstream Octets, Upstream Jabbers, Upstream Errors */
+            uint64_t stats_field5;      /**< Downstream Frames, Downstream Frames 64 Octets, Status Change Times */
+            uint64_t stats_field6;      /**< Upstream Frames, Downstream Frames 65 to 127 Octets */
+            uint64_t stats_field7;      /**< Downstream Broadcast Frames, Downstream Frames 128 to 255 Octets */
+            uint64_t stats_field8;      /**< Upstream Broadcast Frames, Downstream Frames 256 to 511 Octets */
+            uint64_t stats_field9;      /**< Downstream Multicast Frames, Downstream Frames 512 to 1023 Octets */
+            uint64_t stats_field10;     /**< Upstream Multicast Frames, Downstream Frames 1024 to 1518 Octets */
+            uint64_t stats_field11;     /**< Downstream CRC Errored Frames, Upstream Frames 64 Octets */
+            uint64_t stats_field12;     /**< Upstream CRC Errored Frames, Upstream Frames 65 to 127 Octets */
+            uint64_t stats_field13;     /**< Downstream Undersize Frames, Upstream Frames 128 to 255 Octets */
+            uint64_t stats_field14;     /**< Upstream Undersize Frames, Upstream Frames 256 to 511 Octets */
+            uint64_t stats_field15;     /**< Downstream Oversize Frames, Upstream Frames 512 to 1023 Octets */
+            uint64_t stats_field16;     /**< Upstream Oversize Frames, Upstream Frames 1024 to 1518 Octets */
+        } performance_monitoring_current_data;
+
+        struct
+        {
+            uint8_t width;              /**< Width. */
+            uint64_t stats_field1;      /**< Downstream DropEvents, Downstream Fragments, Downstream Discards */
+            uint64_t stats_field2;      /**< Upstream DropEvents, Upstream Fragments, Upstream Discards */
+            uint64_t stats_field3;      /**< Downstream Octets, Downstream Jabbers, Downstream Erros */
+            uint64_t stats_field4;      /**< Upstream Octets, Upstream Jabbers, Upstream Errors */
+            uint64_t stats_field5;      /**< Downstream Frames, Downstream Frames 64 Octets, Status Change Times */
+            uint64_t stats_field6;      /**< Upstream Frames, Downstream Frames 65 to 127 Octets */
+            uint64_t stats_field7;      /**< Downstream Broadcast Frames, Downstream Frames 128 to 255 Octets */
+            uint64_t stats_field8;      /**< Upstream Broadcast Frames, Downstream Frames 256 to 511 Octets */
+            uint64_t stats_field9;      /**< Downstream Multicast Frames, Downstream Frames 512 to 1023 Octets */
+            uint64_t stats_field10;     /**< Upstream Multicast Frames, Downstream Frames 1024 to 1518 Octets */
+            uint64_t stats_field11;     /**< Downstream CRC Errored Frames, Upstream Frames 64 Octets */
+            uint64_t stats_field12;     /**< Upstream CRC Errored Frames, Upstream Frames 65 to 127 Octets */
+            uint64_t stats_field13;     /**< Downstream Undersize Frames, Upstream Frames 128 to 255 Octets */
+            uint64_t stats_field14;     /**< Upstream Undersize Frames, Upstream Frames 256 to 511 Octets */
+            uint64_t stats_field15;     /**< Downstream Oversize Frames, Upstream Frames 512 to 1023 Octets */
+            uint64_t stats_field16;     /**< Upstream Oversize Frames, Upstream Frames 1024 to 1518 Octets */
+        } performance_monitoring_history_data;
+
+        struct
+        {
+            uint16_t action;            /**< Action. */
+            bcmos_mac_address onu_id;   /**< Onu Id. */
+            uint32_t opt_id;            /**< Optical Transmitter Id. */
+        } onu_tx_power_supply_control;
+    } u;
+} bcmolt_epon_oam_ctc_ext_attribute_value_base;
+
+/** CTC File Check Base. 
+ */
+typedef struct bcmolt_epon_oam_ctc_file_check_base
+{
+    bcmolt_epon_oam_ctc_file_check_opcode opcode;   /**< Opcode. */
+    union
+    {
+        struct
+        {
+            uint32_t file_size;                     /**< File Size. */
+        } end_download_request;
+
+        struct
+        {
+            bcmolt_epon_oam_ctc_rps_code rps_code;  /**< RPS Code. */
+        } end_download_response;
+    } u;
+} bcmolt_epon_oam_ctc_file_check_base;
+
+/** CTC OUI Version Pair. 
+ */
+typedef struct bcmolt_epon_oam_ctc_oui_version_pair
+{
+    bcmolt_epon_oam_well_known_oui oui; /**< OUI. */
+    uint8_t version;                    /**< Version. */
+} bcmolt_epon_oam_ctc_oui_version_pair;
+
+/** CTC Performance Monitoring Data. 
+ */
+typedef struct bcmolt_epon_oam_ctc_performance_monitoring_data
+{
+    uint64_t downstream_drop_events;            /**< Downstream Drop Events. */
+    uint64_t upstream_drop_events;              /**< Upstream Drop Events. */
+    uint64_t downstream_octets;                 /**< Downstream Octets. */
+    uint64_t upstream_octets;                   /**< Upstream Octets. */
+    uint64_t downstream_frames;                 /**< Downstream Frames. */
+    uint64_t upstream_frames;                   /**< Upstream Frames. */
+    uint64_t downstream_broadcast_frames;       /**< Downstream Broadcast Frames. */
+    uint64_t upstream_broadcast_frames;         /**< Upstream Broadcast Frames. */
+    uint64_t downstream_multicast_frames;       /**< Downstream Multicast Frames. */
+    uint64_t upstream_multicast_frames;         /**< Upstream Multicast Frames. */
+    uint64_t downstream_crc_errored_frames;     /**< Downstream CRC Errored Frames. */
+    uint64_t upstream_crc_errored_frames;       /**< Upstream CRC Errored Frames. */
+    uint64_t downstream_undersize_frames;       /**< Downstream Undersize Frames. */
+    uint64_t upstream_undersize_frames;         /**< Upstream Undersize Frames. */
+    uint64_t downstream_oversize_frames;        /**< Downstream Oversize Frames. */
+    uint64_t upstream_oversize_frames;          /**< Upstream Oversize Frames. */
+    uint64_t downstream_fragments;              /**< Downstream Fragments. */
+    uint64_t upstream_fragments;                /**< Upstream Fragments. */
+    uint64_t downstream_jabbers;                /**< Downstream Jabbers. */
+    uint64_t upstream_jabbers;                  /**< Upstream Jabbers. */
+    uint64_t downstream_frames64octets;         /**< Downstream Frames 64 Octets. */
+    uint64_t downstream_frames65to127octets;    /**< Downstream Frames 65 to 127 Octets. */
+    uint64_t downstream_frames128to255octets;   /**< Downstream Frames 128 to 255 Octets. */
+    uint64_t downstream_frames256to511octets;   /**< Downstream Frames 256 to 511 Octets. */
+    uint64_t downstream_frames512to1023octets;  /**< Downstream Frames 512 to 1023 Octets. */
+    uint64_t downstream_frames1024to1518octets; /**< Downstream Frames 1024 to 1518 Octets. */
+    uint64_t upstream_frames64octets;           /**< Upstream Frames 64 Octets. */
+    uint64_t upstream_frames65to127octets;      /**< Upstream Frames 65 to 127 Octets. */
+    uint64_t upstream_frames128to255octets;     /**< Upstream Frames 128 to 255 Octets. */
+    uint64_t upstream_frames256to511octets;     /**< Upstream Frames 256 to 511 Octets. */
+    uint64_t upstream_frames512to1023octets;    /**< Upstream Frames 512 to 1023 Octets. */
+    uint64_t upstream_frames1024to1518octets;   /**< Upstream Frames 1024 to 1518 Octets. */
+    uint64_t downstream_discards;               /**< Downstream Discards. */
+    uint64_t upstream_discards;                 /**< Upstream Discards. */
+    uint64_t downstream_errors;                 /**< Downstream Errors. */
+    uint64_t upstream_errors;                   /**< Upstream Errors. */
+    uint64_t status_change_times;               /**< Status Change Times. */
+} bcmolt_epon_oam_ctc_performance_monitoring_data;
+
+/** CTC TFTP Base. 
+ */
+typedef struct bcmolt_epon_oam_ctc_tftp_base
+{
+    bcmolt_epon_oam_ctc_tftp_op_code opcode;    /**< Opcode. */
+    union
+    {
+        struct
+        {
+            uint32_t filename_count;            /**< Number of elements in filename. */
+            uint8_t *filename;                  /**< Filename. */
+            uint32_t mode_count;                /**< Number of elements in mode. */
+            uint8_t *mode;                      /**< Mode. */
+        } write_request;
+
+        struct
+        {
+            uint16_t block_number;              /**< Block Number. */
+            uint32_t data_count;                /**< Number of elements in data. */
+            uint8_t *data;                      /**< Data. */
+        } data;
+
+        struct
+        {
+            uint16_t block_number;              /**< Block Number. */
+        } ack;
+
+        struct
+        {
+            uint16_t code;                      /**< Code. */
+            uint32_t message_count;             /**< Number of elements in message. */
+            uint8_t *message;                   /**< Message. */
+        } error;
+    } u;
+} bcmolt_epon_oam_ctc_tftp_base;
+
+/** CTC S/W Mirror Base. 
+ */
+typedef struct bcmolt_epon_oam_ctc_swmirror_base
+{
+    bcmolt_epon_oam_ctc_swmirror_opcode opcode;                     /**< Opcode. */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_ctc_swmirror_activate_image_flag flag;  /**< Flag. */
+        } activate_image_request;
+
+        struct
+        {
+            bcmolt_epon_oam_ctc_swmirror_ack ack;                   /**< Ack. */
+        } activate_image_response;
+    } u;
+} bcmolt_epon_oam_ctc_swmirror_base;
+
+/** CTC Software Download Prov Base. 
+ */
+typedef struct bcmolt_epon_oam_ctc_software_download_prov_base
+{
+    bcmolt_epon_oam_ctc_software_download_data_type data_type;  /**< Data Type. */
+    union
+    {
+        struct
+        {
+            uint16_t tid;                       /**< TID. */
+            bcmolt_epon_oam_ctc_tftp_base tftp; /**< TFTP. */
+        } tftp;
+
+        struct
+        {
+            uint16_t tid;                       /**< TID. */
+            bcmolt_epon_oam_ctc_file_check_base file_check; /**< File Check. */
+        } data_checking;
+
+        struct
+        {
+            uint16_t tid;   /**< TID. */
+            bcmolt_epon_oam_ctc_swmirror_base swmirror; /**< S/W Mirror. */
+        } swmirroring;
+
+        struct
+        {
+            uint16_t tid;   /**< TID. */
+            bcmolt_epon_oam_ctc_commit_image_base commit_image; /**< Commit Image. */
+        } commit_image;
+    } u;
+} bcmolt_epon_oam_ctc_software_download_prov_base;
+
+/** KT Queue Drop Counter. 
+ */
+typedef struct bcmolt_epon_oam_ktqueue_drop_counter
+{
+    uint32_t txbytes;           /**< TX Bytes. */
+    uint32_t dropped_frames;    /**< Dropped Frames. */
+} bcmolt_epon_oam_ktqueue_drop_counter;
+
+/** KT Attribute Value Base. 
+ */
+typedef struct bcmolt_epon_oam_ktattribute_value_base
+{
+    bcmolt_epon_oam_ktleaf_attribute leaf;  /**< Leaf. */
+    uint8_t width;                      /**< Width. */
+    union
+    {
+        struct
+        {
+            bcmos_bool is_activated;    /**< Whether or not shaping is enabled */
+            uint24_t rate;              /**< Downstream shaping rate of the port in Kbps */
+        } port_downstream_rate_shaping;
+
+        struct
+        {
+            bcmos_bool is_activated;    /**< Whether or not this feature is enabled */
+            uint8_t limit;              /**< Max number of learned MACs */
+        } onu_mac_limit;
+
+        struct
+        {
+            bcmos_bool block;           /**< Whether or not to block user traffic */
+        } block_unblock_onu_traffic;
+
+        struct
+        {
+            uint16_t optics_module_temperature;                     /**< Optics Module Temperature. */
+            uint16_t txoptics_power;                                /**< TX Optics Power. */
+            uint16_t rxoptics_power;                                /**< RX Optics Power. */
+        } onu_diagnostics;
+
+        struct
+        {
+            uint8_t upstream_queues_count;                          /**< Number of elements in Upstream Queues */
+            bcmolt_epon_oam_ktqueue_drop_counter *upstream_queues;  /**< Upstream Queues. */
+        } onu_queue_drop_counter;
+
+        struct
+        {
+            uint16_t counter_bit_mask;  /**< Counter Bit Mask. */
+            uint64_t txframes;          /**< TX Frames. */
+            uint64_t txbytes;           /**< TX Bytes. */
+            uint64_t txmulticast;       /**< TX Multicast. */
+            uint64_t txbroadcast;       /**< TX Broadcast. */
+            uint64_t txdropped;         /**< TX Dropped. */
+            uint64_t rxframes;          /**< RX Frames. */
+            uint64_t rxbytes;           /**< RX Bytes. */
+            uint64_t rxmulticast;       /**< RX Multicast. */
+            uint64_t rxbroadcast;       /**< RX Broadcast. */
+            uint64_t rxoversized;       /**< RX Oversized. */
+            uint64_t rxundersized;      /**< RX Undersized. */
+            uint64_t rxcrc_errors;      /**< RX CRC Errors. */
+        } ethernet_port_counter;
+
+        struct
+        {
+            bcmos_bool enabled;         /**< Whether or not RSTP is enabled */
+        } ethernet_port_rstp;
+
+        struct
+        {
+            bcmos_bool enabled;         /**< Whether or not loop detect is enabled */
+            uint8_t interval;           /**< The sending interval of hello packet in seconds */
+            uint8_t block_time;         /**< The block time of the looped port in seconds (0 for permanent) */
+        } loop_detect;
+
+        struct
+        {
+            uint16_t counter_bit_mask;  /**< Counter Bit Mask. */
+            uint64_t rxhec_errors;      /**< RX HEC Errors. */
+            uint64_t rxregister;        /**< RX Register. */
+            uint64_t txregister_ack;    /**< TX Register ACK. */
+            uint64_t rxgate_frames;     /**< RX Gate Frames. */
+            uint64_t txreport_frames;   /**< TX Report Frames. */
+        } onu_mpcp_counter;
+
+        struct
+        {
+            bcmos_bool enabled;         /**< Whether or not optical power alarm is enabled */
+            bcmolt_epon_oam_ktoptical_power_alarm_status alarm_status;  /**< Alarm Status. */
+        } optical_power_alarm_status;
+
+        struct
+        {
+            uint8_t macs_count;         /**< Number of elements in Macs */
+            bcmos_mac_address *macs;    /**< Macs. */
+        } static_mac;
+    } u;
+} bcmolt_epon_oam_ktattribute_value_base;
+
+/** KT Action Value Base. 
+ */
+typedef struct bcmolt_epon_oam_ktaction_value_base
+{
+    bcmolt_epon_oam_ktleaf_action leaf; /**< Leaf. */
+    union
+    {
+        struct
+        {
+            uint32_t unknown_count;     /**< Number of elements in unknown. */
+            uint8_t *unknown;           /**< Unknown. */
+        } restore_onu;
+
+        struct
+        {
+            uint8_t length;             /**< The length of this structure */
+            bcmos_bool is_power_off;    /**< Whether or not the power should be off */
+            uint8_t duration;           /**< The length of time to power off for in seconds (0xFF for permanent) */
+        } txpower_off;
+    } u;
+} bcmolt_epon_oam_ktaction_value_base;
+
+/** CTC Var Container Base. 
+ */
+typedef struct bcmolt_epon_oam_ctc_var_container_base
+{
+    bcmolt_epon_oam_ctc_branch branch;  /**< Branch. */
+    union
+    {
+        struct
+        {
+            uint16_t leaf;              /**< Leaf. */
+            uint8_t length;             /**< Length. */
+        } def;
+
+        struct
+        {
+            uint32_t unknown_count;     /**< Number of elements in unknown. */
+            uint8_t *unknown;           /**< Unknown. */
+        } end;
+
+        struct
+        {
+            bcmolt_epon_oam_ctc_attribute_value_base attribute;     /**< Attribute. */
+        } attribute;
+
+        struct
+        {
+            bcmolt_epon_oam_ctc_action_value action;                /**< Action. */
+        } action;
+
+        struct
+        {
+            bcmolt_epon_oam_ctc_old_management_object_base object;  /**< Object. */
+        } old_management_object;
+
+        struct
+        {
+            bcmolt_epon_oam_ctc_management_object_base object;      /**< Object. */
+        } management_object;
+
+        struct
+        {
+            bcmolt_epon_oam_ctc_ext_attribute_value_base attribute; /**< Attribute. */
+        } ext_attribute;
+
+        struct
+        {
+            bcmolt_epon_oam_ctc_ext_action_value_base attribute;    /**< Attribute. */
+        } ext_action;
+
+        struct
+        {
+            bcmolt_epon_oam_ktattribute_value_base attribute;       /**< Attribute. */
+        } ktattribute;
+
+        struct
+        {
+            bcmolt_epon_oam_ktaction_value_base attribute;          /**< Attribute. */
+        } ktaction;
+    } u;
+} bcmolt_epon_oam_ctc_var_container_base;
+
+/** CTC Var Descriptor. 
+ */
+typedef struct bcmolt_epon_oam_ctc_var_descriptor
+{
+    bcmolt_epon_oam_ctc_branch branch;                  /**< Branch. */
+    union
+    {
+        struct
+        {
+            uint16_t leaf;                              /**< Leaf. */
+        } def;
+
+        struct
+        {
+            uint32_t unknown_count;                     /**< Number of elements in unknown. */
+            uint8_t *unknown;                           /**< Unknown. */
+        } end;
+
+        struct
+        {
+            bcmolt_epon_oam_var_leaf_attribute leaf;    /**< Leaf. */
+        } attribute;
+
+        struct
+        {
+            bcmolt_epon_oam_var_leaf_action leaf;       /**< Leaf. */
+        } action;
+
+        struct
+        {
+            bcmolt_epon_oam_ctc_old_management_object_base value;   /**< Value. */
+        } old_management_object;
+
+        struct
+        {
+            bcmolt_epon_oam_ctc_management_object_base value;       /**< Value. */
+        } management_object;
+
+        struct
+        {
+            bcmolt_epon_oam_ctc_leaf_ext_attribute leaf;            /**< Leaf. */
+        } ext_attribute;
+
+        struct
+        {
+            bcmolt_epon_oam_ctc_leaf_ext_action leaf;               /**< Leaf. */
+        } ext_action;
+
+        struct
+        {
+            bcmolt_epon_oam_ktleaf_attribute leaf;                  /**< Leaf. */
+        } ktattribute;
+
+        struct
+        {
+            bcmolt_epon_oam_ktleaf_action leaf;                     /**< Leaf. */
+        } ktaction;
+    } u;
+} bcmolt_epon_oam_ctc_var_descriptor;
+
+/** KT ONU Event Base. 
+ */
+typedef struct bcmolt_epon_oam_ktonu_event_base
+{
+    bcmolt_epon_oam_ktonu_event_type type;                      /**< Type. */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_ktloop_detect_event event;          /**< Event. */
+        } loop_detect;
+
+        struct
+        {
+            bcmolt_epon_oam_ktoptical_power_alarm_event event;  /**< Event. */
+        } optical_power_alarm;
+    } u;
+} bcmolt_epon_oam_ktonu_event_base;
+
+/** CTC Vendor Extended Base. 
+ */
+typedef struct bcmolt_epon_oam_ctc_vendor_extended_base
+{
+    bcmolt_epon_oam_ctc_opcode op;                      /**< Op. */
+    union
+    {
+        struct
+        {
+            uint32_t vars_count;                        /**< Number of elements in vars. */
+            bcmolt_epon_oam_ctc_var_descriptor *vars;   /**< Vars. */
+        } get_request;
+
+        struct
+        {
+            uint32_t vars_count;                        /**< Number of elements in vars. */
+            bcmolt_epon_oam_ctc_var_container_base *vars;   /**< Vars. */
+        } get_response;
+
+        struct
+        {
+            uint32_t vars_count;    /**< Number of elements in vars. */
+            bcmolt_epon_oam_ctc_var_container_base *vars;   /**< Vars. */
+        } set_request;
+
+        struct
+        {
+            uint32_t vars_count;    /**< Number of elements in vars. */
+            bcmolt_epon_oam_ctc_empty_var_container_base *vars; /**< Vars. */
+        } set_response;
+
+        struct
+        {
+            uint32_t messages_count;    /**< Number of elements in messages. */
+            bcmolt_epon_oam_ctc_software_download_prov_base *messages;  /**< Messages. */
+        } software_download;
+
+        struct
+        {
+            bcmolt_epon_oam_ctc_onu_auth_code code;                     /**< Code. */
+            uint16_t authentication_data_count;             /**< Number of elements in Authentication Data */
+            uint8_t *authentication_data;                   /**< Authentication Data. */
+        } onu_authentication;
+
+        struct
+        {
+            bcmolt_epon_oam_ctc_churning_prov_base value;   /**< Value. */
+        } churning;
+
+        struct
+        {
+            bcmolt_epon_oam_ctc_dba_prov_base value;        /**< Value. */
+        } dba;
+
+        struct
+        {
+            uint32_t events_count;                      /**< Number of elements in events. */
+            bcmolt_epon_oam_ktonu_event_base *events;   /**< Events. */
+        } ktonu_event;
+
+        struct
+        {
+            bcmolt_epon_oam_ctc_event_base events;      /**< Events. */
+        } event;
+    } u;
+} bcmolt_epon_oam_ctc_vendor_extended_base;
+
+/** Dasan Classifier Base. 
+ */
+typedef struct bcmolt_epon_oam_dasan_classifier_base
+{
+    bcmolt_epon_oam_dasan_classifier_command command;   /**< Command. */
+    bcmolt_epon_oam_dasan_direction direction;          /**< Direction. */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_dasan_filter_field field;   /**< Field. */
+            uint16_t value; /**< Value. */
+            bcmolt_epon_oam_dasan_filter_action action; /**< Action. */
+        } add_filter;
+
+        struct
+        {
+            bcmolt_epon_oam_dasan_filter_field field;   /**< Field. */
+            uint16_t value; /**< Value. */
+            bcmolt_epon_oam_dasan_filter_action action; /**< Action. */
+        } remove_filter;
+
+        struct
+        {
+            bcmolt_epon_oam_dasan_pri_type pri_type;    /**< Pri Type. */
+            uint8_t in_priority;                        /**< In Priority. */
+            uint8_t out_priority;                       /**< Out Priority. */
+        } queue_map;
+
+        struct
+        {
+            bcmolt_epon_oam_dasan_filter_field field;   /**< Field. */
+            uint16_t value;     /**< Value. */
+            uint8_t pri_vlan;   /**< Pri VLAN. */
+            uint8_t pri_queue;  /**< The queue id the frame will be to */
+        } add_priority_for_vlan;
+    } u;
+} bcmolt_epon_oam_dasan_classifier_base;
+
+/** Dasan Port. 
+ */
+typedef struct bcmolt_epon_oam_dasan_port
+{
+    uint16_t port_number;                   /**< Port Number. */
+    bcmos_bool enabled;                     /**< Enabled. */
+    bcmos_bool auto_negotiation_enabled;    /**< Auto-Negotiation Enabled. */
+    uint16_t speed;                 /**< Speed. */
+    uint8_t reserved;               /**< Reserved. */
+    bcmos_bool is_full_duplex;      /**< Is Full Duplex. */
+    uint16_t learning_table_size;   /**< Learning Table Size. */
+} bcmolt_epon_oam_dasan_port;
+
+/** Dasan VLAN. 
+ */
+typedef struct bcmolt_epon_oam_dasan_vlan
+{
+    uint8_t reserved;       /**< Reserved. */
+    bcmos_bool is_tagged;   /**< Is Tagged. */
+    uint16_t vlan_id;       /**< VLAN ID. */
+} bcmolt_epon_oam_dasan_vlan;
+
+/** Dasan VLAN Port. 
+ */
+typedef struct bcmolt_epon_oam_dasan_vlan_port
+{
+    uint16_t port_number;               /**< Port Number. */
+    uint16_t vlans_count;               /**< Number of elements in VLANs */
+    bcmolt_epon_oam_dasan_vlan *vlans;  /**< VLANs. */
+    uint16_t pvid;                      /**< PVID. */
+} bcmolt_epon_oam_dasan_vlan_port;
+
+/** Dasan Port Config. 
+ */
+typedef struct bcmolt_epon_oam_dasan_port_config
+{
+    uint8_t port_number;        /**< Port Number. */
+    bcmos_bool is_linked;       /**< Is Linked. */
+    uint8_t speed;              /**< Speed in Mbps */
+    bcmos_bool is_full_duplex;  /**< Is Full Duplex. */
+} bcmolt_epon_oam_dasan_port_config;
+
+/** Dasan Port Stats. 
+ */
+typedef struct bcmolt_epon_oam_dasan_port_stats
+{
+    uint64_t in_good_octets;    /**< In Good Octets. */
+    uint32_t in_good_frames;    /**< In Good Frames. */
+    uint32_t in_broadcast;      /**< In Broadcast. */
+    uint32_t in_multicast;      /**< In Multicast. */
+    uint64_t out_good_octets;   /**< Out Good Octets. */
+    uint32_t out_good_frames;   /**< Out Good Frames. */
+    uint32_t out_broadcast;     /**< Out Broadcast. */
+    uint32_t out_multicast;     /**< Out Multicast. */
+} bcmolt_epon_oam_dasan_port_stats;
+
+/** Dasan Port Error Stats. 
+ */
+typedef struct bcmolt_epon_oam_dasan_port_error_stats
+{
+    uint32_t undersized;            /**< Undersized. */
+    uint32_t oversized;             /**< Oversized. */
+    uint32_t jabber;                /**< Jabber. */
+    uint32_t in_mac_receive_error;  /**< In MAC Receive Error. */
+    uint32_t in_fcs_error;          /**< In FCS Error. */
+} bcmolt_epon_oam_dasan_port_error_stats;
+
+/** Dasan Stats Seq Base. 
+ */
+typedef struct bcmolt_epon_oam_dasan_stats_seq_base
+{
+    bcmolt_epon_oam_dasan_stats_seq_type type;              /**< Type. */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_dasan_port_stats port0;         /**< Port 0. */
+            bcmolt_epon_oam_dasan_port_stats port1;         /**< Port 1. */
+        } port0and1;
+
+        struct
+        {
+            bcmolt_epon_oam_dasan_port_stats port2;         /**< Port 2. */
+            bcmolt_epon_oam_dasan_port_stats port3;         /**< Port 3. */
+        } port2and3;
+
+        struct
+        {
+            bcmolt_epon_oam_dasan_port_error_stats port0;   /**< Port 0. */
+            bcmolt_epon_oam_dasan_port_error_stats port1;   /**< Port 1. */
+            bcmolt_epon_oam_dasan_port_error_stats port2;   /**< Port 2. */
+            bcmolt_epon_oam_dasan_port_error_stats port3;   /**< Port 3. */
+        } errors;
+    } u;
+} bcmolt_epon_oam_dasan_stats_seq_base;
+
+/** Dasan Stat Value. 
+ */
+typedef struct bcmolt_epon_oam_dasan_stat_value
+{
+    bcmolt_epon_oam_dasan_stat_id id;   /**< ID. */
+    uint32_t value;                     /**< Value. */
+} bcmolt_epon_oam_dasan_stat_value;
+
+/** Dasan Config Base. 
+ */
+typedef struct bcmolt_epon_oam_dasan_config_base
+{
+    bcmolt_epon_oam_dasan_opcode opcode;            /**< Opcode. */
+    union
+    {
+        struct
+        {
+            uint16_t ports_count;                   /**< Number of elements in Ports */
+            bcmolt_epon_oam_dasan_port *ports;      /**< Ports. */
+        } port_config;
+
+        struct
+        {
+            uint16_t ports_count;                   /**< Number of elements in Ports */
+            bcmolt_epon_oam_dasan_vlan_port *ports; /**< Ports. */
+        } set_vlan;
+
+        struct
+        {
+            uint16_t llid;          /**< LLID. */
+            uint64_t op;            /**< Op. */
+            uint16_t profile_op;    /**< Profile Op. */
+            uint16_t value_size;    /**< Value Size. */
+            uint8_t ports_count;    /**< Number of elements in Ports */
+            bcmolt_epon_oam_dasan_port_config *ports;   /**< Ports. */
+        } get_onu_config;
+
+        struct
+        {
+            uint8_t reserved;           /**< Reserved. */
+            bcmos_bool enable;          /**< Enable. */
+            uint16_t max_age;           /**< The amount of time in seconds that the bridge spends in the Blocking state without receiving a BPDU before it transitions to the Listening state */
+            uint16_t forward_delay;     /**< The amount of time in seconds the bridge spends in the Listening and Learning states before forwarding packets */
+            uint16_t hello_time;        /**< The amount of time in seconds the Root Bridge waits between sending BPDUs */
+        } set_stp;
+
+        struct
+        {
+            uint16_t enable_time;       /**< Time in seconds to re-enable the TX */
+        } set_txpower_off;
+
+        struct
+        {
+            uint64_t llid_bitmap;       /**< LLID Bitmap. */
+            bcmos_bool enable;          /**< Enable. */
+            uint8_t block_cap;          /**< Block Cap. */
+            uint8_t send_cap;           /**< Send Cap. */
+            uint8_t olt_mac_cap;        /**< OLT MAC Cap. */
+            uint32_t send_period;       /**< Hello time in RSTP terms */
+            uint32_t block_time;        /**< Time to disable port if looped */
+            bcmos_mac_address olt_mac;  /**< OLT MAC. */
+        } set_loop_detect;
+
+        struct
+        {
+            uint64_t llid_bitmap;       /**< LLID Bitmap. */
+        } set_loop_detect_unblock;
+
+        struct
+        {
+            bcmolt_epon_oam_dasan_classifier_base classifier;   /**< Classifier. */
+        } classifier;
+
+        struct
+        {
+            uint16_t llid;              /**< LLID. */
+            uint32_t op;                /**< Op. */
+            uint16_t info_count;        /**< Number of elements in Info */
+            uint8_t *info;              /**< Info. */
+        } onu_version;
+
+        struct
+        {
+            uint16_t llid;              /**< LLID. */
+            uint8_t boot_mode;          /**< Boot Mode. */
+            uint8_t active;             /**< Active. */
+            uint8_t image1string[16];   /**< Image 1 String. */
+            uint8_t image2string[16];   /**< Image 2 String. */
+        } onu_flash_firmware_version;
+
+        struct
+        {
+            uint16_t llid;              /**< LLID. */
+            uint8_t active;             /**< Active. */
+            uint64_t build_time;        /**< Build Time. */
+        } onu_active_image_time;
+
+        struct
+        {
+            uint16_t llid;              /**< LLID. */
+            uint64_t op;                /**< Op. */
+            uint32_t sequences_count;   /**< Number of elements in sequences. */
+            bcmolt_epon_oam_dasan_stats_seq_base *sequences;    /**< Sequences. */
+        } onu_statistic;
+
+        struct
+        {
+            uint16_t llid_bitmap;       /**< LLID Bitmap. */
+            uint8_t statistics_count;   /**< Number of elements in Statistics */
+            bcmolt_epon_oam_dasan_stat_value *statistics;   /**< Statistics. */
+        } onu_statistic_get;
+
+        struct
+        {
+            bcmos_bool enable;  /**< Enable. */
+            uint8_t max_groups; /**< Max Groups. */
+        } onu_igmp_set;
+
+        struct
+        {
+            bcmos_bool enable;  /**< Enable. */
+        } onu_port_igmp_filter;
+
+        struct
+        {
+            uint8_t reserved;   /**< Reserved. */
+            bcmos_bool enable;  /**< Enable. */
+            uint32_t rate;      /**< Data rate in kbps */
+        } onu_shaping;
+    } u;
+} bcmolt_epon_oam_dasan_config_base;
+
+/** Distinguished Name. 
+ */
+typedef struct bcmolt_epon_oam_distinguished_name
+{
+    uint8_t length; /**< Length. */
+    uint8_t *name;  /**< Name. */
+} bcmolt_epon_oam_distinguished_name;
+
+/** Distinguished Name List. 
+ */
+typedef struct bcmolt_epon_oam_distinguished_name_list
+{
+    uint32_t names_count;   /**< Number of elements in names. */
+    bcmolt_epon_oam_distinguished_name *names;  /**< Names. */
+} bcmolt_epon_oam_distinguished_name_list;
+
+/** A list of MAC addresses in DPoE OAM format 
+ */
+typedef struct bcmolt_epon_oam_dpoe_mac_table
+{
+    uint32_t mac_address_count;     /**< Number of elements in mac_address. */
+    bcmos_mac_address *mac_address; /**< List of MAC addresses */
+} bcmolt_epon_oam_dpoe_mac_table;
+
+/** DPoE Action Value Base. 
+ */
+typedef struct bcmolt_epon_oam_dpoe_action_value_base
+{
+    bcmolt_epon_oam_dpoe_leaf_action leaf;  /**< Leaf. */
+    uint8_t width;  /**< Width. */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_dpoe_mac_table mac_addess;          /**< MAC Addess. */
+        } add_dyn_mac_addr;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_mac_table mac_address;         /**< MAC Address. */
+        } del_dyn_mac_addr;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_mac_table mac_address;         /**< MAC Address. */
+        } add_static_mac_addr;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_mac_table mac_address;         /**< MAC Address. */
+        } del_static_mac_addr;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_loopback_location location;    /**< Location. */
+        } loopback_enable;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_loopback_location location;    /**< Location. */
+        } loopback_disable;
+
+        struct
+        {
+            uint16_t disable_time;  /**< Units: seconds */
+        } laser_tx_power_off;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_llid_action llid_action;   /**< LLID Action. */
+            uint16_t llid_value;    /**< LLID Value. */
+        } configure_mcast_llid;
+    } u;
+} bcmolt_epon_oam_dpoe_action_value_base;
+
+/** DPoE Queue Set. 
+ */
+typedef struct bcmolt_epon_oam_dpoe_queue_set
+{
+    uint8_t queue_count;    /**< Queue Count. */
+    uint8_t *queue_sizes;   /**< Queue Sizes. */
+} bcmolt_epon_oam_dpoe_queue_set;
+
+/** DPoE Queue. 
+ */
+typedef struct bcmolt_epon_oam_dpoe_queue
+{
+    bcmolt_epon_oam_dpoe_object_type type;  /**< Type. */
+    uint8_t instance;                       /**< Instance. */
+    uint8_t queue;  /**< Queue. */
+} bcmolt_epon_oam_dpoe_queue;
+
+/** DPoE Object Context Base. 
+ */
+typedef struct bcmolt_epon_oam_dpoe_object_context_base
+{
+    bcmolt_epon_oam_dpoe_object_type object_type;   /**< Object Type. */
+    uint8_t length;                 /**< Length. */
+    union
+    {
+        struct
+        {
+            uint8_t instance;       /**< Instance. */
+        } onu;
+
+        struct
+        {
+            uint32_t pon_count;     /**< Number of elements in pon. */
+            uint8_t *pon;           /**< PON. */
+        } network_pon;
+
+        struct
+        {
+            uint32_t link_count;    /**< Number of elements in link. */
+            uint8_t *link;          /**< Link. */
+        } link;
+
+        struct
+        {
+            uint32_t port_count;    /**< Number of elements in port. */
+            uint8_t *port;          /**< Port. */
+        } user_port;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_queue queue;   /**< Queue. */
+        } queue;
+
+        struct
+        {
+            uint16_t mcast_llid;                /**< Mcast LLID. */
+        } mcast_link;
+
+        struct
+        {
+            uint32_t bridge_count;              /**< Number of elements in bridge. */
+            uint8_t *bridge;                    /**< Bridge. */
+        } bridge;
+
+        struct
+        {
+            uint32_t port_count;                /**< Number of elements in port. */
+            uint8_t *port;                      /**< Port. */
+        } bridge_port;
+    } u;
+} bcmolt_epon_oam_dpoe_object_context_base;
+
+/** DPoE Var Descriptor. 
+ */
+typedef struct bcmolt_epon_oam_dpoe_var_descriptor
+{
+    bcmolt_epon_oam_dpoe_branch branch;                 /**< Branch. */
+    union
+    {
+        struct
+        {
+            uint16_t leaf;                              /**< Leaf. */
+        } def;
+
+        struct
+        {
+            uint32_t unknown_count;                     /**< Number of elements in unknown. */
+            uint8_t *unknown;                           /**< Unknown. */
+        } end;
+
+        struct
+        {
+            bcmolt_epon_oam_var_leaf_attribute leaf;    /**< Leaf. */
+        } standard_attribute;
+
+        struct
+        {
+            bcmolt_epon_oam_var_leaf_action leaf;       /**< Leaf. */
+        } standard_action;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_object_context_base object_context;    /**< Object Context. */
+        } object;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_leaf_attribute leaf;                   /**< Leaf. */
+        } extended_attribute;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_leaf_action leaf;                      /**< Leaf. */
+        } extended_action;
+    } u;
+} bcmolt_epon_oam_dpoe_var_descriptor;
+
+/** DPoE Statistic Threshold. 
+ */
+typedef struct bcmolt_epon_oam_dpoe_statistic_threshold
+{
+    bcmolt_epon_oam_dpoe_var_descriptor statistic;  /**< Statistic. */
+    uint32_t rising_threshold;                      /**< Threshold at which to set alarm (0 to disable) */
+    uint32_t falling_threshold;                     /**< Threshold at which to clear alarm */
+} bcmolt_epon_oam_dpoe_statistic_threshold;
+
+/** DPoE Field. 
+ */
+typedef struct bcmolt_epon_oam_dpoe_field
+{
+    bcmolt_epon_oam_dpoe_field_code code;   /**< Code. */
+    uint8_t instance;                       /**< Instance. */
+} bcmolt_epon_oam_dpoe_field;
+
+/** DPoE Rule Result Field V2. 
+ */
+typedef struct bcmolt_epon_oam_dpoe_rule_result_field_v2
+{
+    bcmolt_epon_oam_dpoe_field field;   /**< Field. */
+    uint8_t msb_mask;                   /**< MSB Mask. */
+    uint8_t lsb_mask;                   /**< LSB Mask. */
+} bcmolt_epon_oam_dpoe_rule_result_field_v2;
+
+/** DPoE Rule Result Field. 
+ */
+typedef struct bcmolt_epon_oam_dpoe_rule_result_field
+{
+    bcmolt_epon_oam_dpoe_field field;   /**< Field. */
+} bcmolt_epon_oam_dpoe_rule_result_field;
+
+/** A single result of the rule 
+ */
+typedef struct bcmolt_epon_oam_dpoe_rule_result
+{
+    bcmolt_epon_oam_dpoe_result result;         /**< Result of the rule */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_dpoe_queue queue;   /**< Target queue */
+        } queue;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_rule_result_field_v2 field;    /**< Field to set */
+            uint32_t value_count;   /**< Number of elements in value. */
+            uint8_t *value;         /**< Value to set */
+        } set;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_rule_result_field_v2 field;    /**< Field. */
+        } copy;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_rule_result_field field;       /**< Field. */
+        }
+        delete;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_rule_result_field field;       /**< Field. */
+        } insert;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_rule_result_field field;       /**< Field. */
+        } replace;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_rule_result_field field;       /**< Field. */
+        } clear_delete;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_rule_result_field field;       /**< Field. */
+        } clear_insert;
+    } u;
+} bcmolt_epon_oam_dpoe_rule_result;
+
+/** Part of a DPoE OAM rule 
+ */
+typedef struct bcmolt_epon_oam_dpoe_rule
+{
+    bcmolt_epon_oam_rule_type subtype;                  /**< The Subtype of this piece of the rule */
+    union
+    {
+        struct
+        {
+            uint8_t precedence;                         /**< Precedence of the rule */
+        } header;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_field field_code;      /**< The field to match */
+            uint8_t msb_mask;                           /**< Left mask */
+            uint8_t lsb_mask;                           /**< Right mask */
+            bcmolt_epon_oam_rule_operator operator;     /**< Match operation */
+            uint8_t match_value_length;                 /**< Bytes in match value */
+            uint8_t *match_value;                       /**< Value to match */
+        } clause;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_rule_result result;    /**< Result. */
+        } result;
+    } u;
+} bcmolt_epon_oam_dpoe_rule;
+
+/** DPoE Shaper. 
+ */
+typedef struct bcmolt_epon_oam_dpoe_shaper
+{
+    uint8_t queue_bitmap;   /**< Queue Bitmap. */
+    uint32_t maximum_rate;  /**< Maximum Rate. */
+    uint16_t burst_size;    /**< Burst Size. */
+} bcmolt_epon_oam_dpoe_shaper;
+
+/** DPoE Rate Level. 
+ */
+typedef struct bcmolt_epon_oam_dpoe_rate_level
+{
+    bcmolt_epon_oam_traffic_bitmap traffic_type;    /**< Traffic Type. */
+    uint32_t maximum_rate;  /**< Maximum Rate. */
+} bcmolt_epon_oam_dpoe_rate_level;
+
+/** DPoE Event Options. 
+ */
+typedef struct bcmolt_epon_oam_dpoe_event_options
+{
+    uint8_t event_code;         /**< Event Code. */
+    uint8_t enabled_disabled;   /**< Enabled / Disabled. */
+} bcmolt_epon_oam_dpoe_event_options;
+
+/** Variable-length list of U16. 
+ */
+typedef struct bcmolt_epon_oam_u16_list_u8
+{
+    uint8_t len;    /**< List length. */
+    uint16_t *val;  /**< List contents. */
+} bcmolt_epon_oam_u16_list_u8;
+
+/** DPoE Attribute Value Base. 
+ */
+typedef struct bcmolt_epon_oam_dpoe_attribute_value_base
+{
+    bcmolt_epon_oam_dpoe_leaf_attribute leaf;   /**< Leaf. */
+    uint8_t width;                      /**< Width. */
+    union
+    {
+        struct
+        {
+            uint32_t unknown_count;     /**< Number of elements in unknown. */
+            uint8_t *unknown;           /**< Unknown. */
+        } def;
+
+        struct
+        {
+            uint16_t sequnce_number;    /**< Bit 15, when set, indicates that this is the last message of its sequence.  */
+        } sequence_number;
+
+        struct
+        {
+            bcmos_mac_address id;       /**< The lowest (numerically smallest) MAC address among all MAC addresses associated with the TU interface port of a DPoE ONU */
+        } onu_id;
+
+        struct
+        {
+            uint16_t boot_version;      /**< Version of bootstrap loader (if any) */
+            uint32_t boot_crc32;        /**< CRC-32 of boot loader serves as additional unique identifier and verification */
+            uint16_t application_version;               /**< Version of main application software running on the DPoE ONU */
+            uint32_t application_crc32;                 /**< CRC-32 of application software serves as unique ID and verification */
+        } firmware_info;
+
+        struct
+        {
+            uint16_t jedec_id;                          /**< 16-bit chip manufacturer ID code as assigned by JEDEC */
+            uint32_t chip_model;                        /**< Identifies the particular kind of EPN chip. Format defined by chipset vendor */
+            uint32_t chip_version;                      /**< Identifies the version or stepping of the chip model. Format defined by chipset vendor */
+        } chip_info;
+
+        struct
+        {
+            uint16_t year;                              /**< BCD */
+            uint8_t month;                              /**< BCD */
+            uint8_t day;                                /**< BCD */
+        } date_of_manufacture;
+
+        struct
+        {
+            uint32_t def_count;                         /**< Number of elements in def. */
+            uint8_t *def;                               /**< Format is defined by the ONU vendor. */
+        } manufacturer_info;
+
+        struct
+        {
+            uint16_t bidirectional;                     /**< Maximum number of links which can both transmit and receive. */
+            uint16_t downstream_only;                   /**< In addition to the bidirectional links, the maximum number of LLIDs which can receive data, but not transmit (unidirectional, downstream only) */
+        } max_logical_links;
+
+        struct
+        {
+            uint16_t port_count;                        /**< The total number of TU interface ports on the ONU. */
+        } num_epon_ports;
+
+        struct
+        {
+            uint16_t port_count;                        /**< The number of S1 interfaces on the DPoE ONU. */
+        } num_uni_ports;
+
+        struct
+        {
+            uint8_t upstream_queues;                    /**< Total number of queues available to be assigned to logical links in the upstream direction */
+            uint8_t up_queues_max_per_link;             /**< Maximum number of queues which can be assigned to a single logical link in the upstream direction */
+            uint8_t up_queue_increment;                 /**< The smallest allocatable increment of packet buffer memory in the upstream direction, in kilobytes. */
+            uint8_t downstream_queues;                  /**< Total number of queues available to be assigned to logical links in the downstream direction */
+            uint8_t dn_queues_max_per_port;             /**< Maximum number of queues which can be assigned to a single UNI port in the downstream direction */
+            uint8_t dn_queue_increment;                 /**< The smallest allocatable increment of packet buffer memory in the downstream direction, in kilobytes. */
+            uint16_t total_packet_buffer;               /**< Total packet buffer memory on the ONU (KB) */
+            uint16_t upstream_packet_buffer;            /**< Maximum amount of packet buffer memory which can be allocated to upstream queues */
+            uint16_t downsream_packet_buffer;           /**< Maximum amount of packet buffer memory which can be allocated to downstream queues */
+        } packet_buffer;
+
+        struct
+        {
+            uint8_t number_of_queue_sets;               /**< Number of Queue Sets */
+            uint8_t report_values_per_queue_set;        /**< Report Values Per Queue Set */
+            uint16_t *queue_set0;                       /**< Report Thresholds for Queue Set 0 */
+            uint16_t *queue_set1;                       /**< Report Thresholds for Queue Set 1 */
+            uint16_t *queue_set2;                       /**< Report Thresholds for Queue Set 2 */
+            uint16_t *queue_set3;                       /**< Report Thresholds for Queue Set 3 */
+        } report_thresholds;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_link_state link_state; /**< Link State. */
+        } link_state;
+
+        struct
+        {
+            uint8_t maximum_oam_rate;                   /**< Maximum OAM Rate. */
+            uint8_t minimum_oam_rate;                   /**< Minimum OAM Rate. */
+        } oam_rate;
+
+        struct
+        {
+            uint16_t max_mac_allowed;                   /**< Maximum allowed limit */
+        } dyn_learn_table_size;
+
+        struct
+        {
+            uint16_t dynamic_address_age_limit;         /**< Units 8.75 ms */
+        } dyn_learn_age_limit;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_mac_table mac_address; /**< MAC Address. */
+        } dyn_mac_table;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_mac_table mac_address; /**< MAC Address. */
+        } static_mac_table;
+
+        struct
+        {
+            bcmolt_epon_oam_auto_negotiation_capability maximum_capabilities;   /**< Maximum Capabilities. */
+            bcmolt_epon_oam_auto_negotiation_capability current_capabilities;   /**< Current Capabilities. */
+        } port_capability;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_learning_mode learning_mode;                   /**< 802.1 learning mode always forwards frames. MAC access control mode forwards frames only if the SA of the frame is in the MAC address table for that port; that is, the address has been learned on that port, or provisioned on that port by management. A frame with the same SA attempting to ingress some other port would be discarded. */
+        } dyn_learn_mode;
+
+        struct
+        {
+            uint16_t minimum_guaranteed_limit;                  /**< Minimum Guaranteed Limit. */
+        } min_mac_limit;
+
+        struct
+        {
+            uint16_t max_allowed;                               /**< Max Allowed. */
+        } max_mac_allowed;
+
+        struct
+        {
+            uint16_t aggregate_mac_limit;                       /**< The ONU aggregate dynamic MAC address limit */
+        } agg_mac_limit;
+
+        struct
+        {
+            bcmos_bool len_error_discard;                       /**< If Length Error Discard Enable */
+        } len_err_discard;
+
+        struct
+        {
+            bcmos_bool flood_unknown;                           /**< Flood Unknown DA option */
+        } flood_unknown;
+
+        struct
+        {
+            bcmos_bool local_switching;                         /**< Local Switching option */
+        } local_switching;
+
+        struct
+        {
+            uint8_t number_of_links;                            /**< The number of links to configure. */
+            bcmolt_epon_oam_dpoe_queue_set *link_configuration; /**< Link Configuration. */
+            uint8_t number_of_ports;    /**< The number of Ports to configure. */
+            bcmolt_epon_oam_dpoe_queue_set *port_configuration; /**< Port Configuration. */
+        } queue_config;
+
+        struct
+        {
+            uint32_t firmware_filename_count;                   /**< Number of elements in firmware_filename. */
+            uint8_t *firmware_filename; /**< The filename is a null-terminated ASCII string representing the name of the file as received from the OSS by the vCM. */
+        } firmware_filename;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_statistic_threshold stat_threshold;    /**< Stat Threshold. */
+        } port_stat_thresh;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_statistic_threshold stat_threshold;    /**< Stat Threshold. */
+        } link_stat_thresh;
+
+        struct
+        {
+            uint16_t time;  /**< Timeout value in sec */
+        } key_expiry_time;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_encryption_mode encryption_method; /**< Encryption Method. */
+        } encrypt_mode;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_rule rule;                 /**< Rule. */
+        } port_ingress_rule;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_field_code field_code;     /**< Field Code. */
+            bcmolt_epon_oam_dpoe_layer_select layer_select; /**< Layer Select. */
+            uint8_t bit_word_offset;                        /**< 32-bit Word Offset. */
+            uint8_t bit_offset;                             /**< Bit Offset. */
+            uint8_t bit_width;                              /**< Bit Width. */
+            uint8_t reference_count;                        /**< Reference Count. */
+        } lue_field;
+
+        struct
+        {
+            uint16_t tpid;                                  /**< Alternate C-VLAN TPID */
+            bcmos_bool insert;                              /**< Use this TPID when inserting C-VLAN tags */
+        } alt_cvlan_ethertype;
+
+        struct
+        {
+            uint16_t tpid;                                  /**< Alternate S-VLAN TPID */
+            bcmos_bool insert;                              /**< Use this TPID when inserting S-VLAN tags */
+        } alt_svlan_ethertype;
+
+        struct
+        {
+            uint32_t limit;                                 /**< The maximum number of broadcast packets allowed from Ethernet port 1 in 1 second. */
+        } bc_rate_limit;
+
+        struct
+        {
+            bcmolt_epon_oam_traffic_bitmap traffic_types;   /**< Traffic Types. */
+            bcmolt_epon_oam_rate_units rate_units;          /**< Rate Units. */
+            uint8_t number_of_shapers;                      /**< Number of Shapers. */
+            bcmolt_epon_oam_dpoe_shaper *shapers;           /**< Shapers. */
+        } egress_shaping;
+
+        struct
+        {
+            bcmolt_epon_oam_rate_units rate_units;          /**< Rate Units. */
+            uint8_t number_of_rate_levels;                  /**< Number of Rate Levels. */
+            bcmolt_epon_oam_dpoe_rate_level *rate_levels;   /**< Rate Levels. */
+        } ingress_policing;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_fec_mode rx_down;          /**< Rx/Down. */
+            bcmolt_epon_oam_dpoe_fec_mode tx_up;            /**< Tx/Up. */
+        } fec_mode;
+
+        struct
+        {
+            uint32_t man_name_count;                        /**< Number of elements in man_name. */
+            uint8_t *man_name;                  /**< Man Name. */
+        } mfr_name;
+
+        struct
+        {
+            uint8_t code_access_start[13];      /**< Code Access Start. */
+            uint8_t cvc_access_start[13];       /**< CVC Access Start. */
+        } fware_mfg_time_var_ctrl;
+
+        struct
+        {
+            uint32_t vendor_name_count;         /**< Number of elements in vendor_name. */
+            uint8_t *vendor_name;               /**< ONU Vendor Name */
+        } vendor_name;
+
+        struct
+        {
+            uint32_t model_number_count;        /**< Number of elements in model_number. */
+            uint8_t *model_number;              /**< ONU Model Number */
+        } model_number;
+
+        struct
+        {
+            uint32_t hw_version_count;          /**< Number of elements in hw_version. */
+            uint8_t *hw_version;                /**< ONU Hardware Version */
+        } hw_version;
+
+        struct
+        {
+            uint32_t current_temperature_count; /**< Number of elements in current_temperature. */
+            uint16_t *current_temperature;      /**< Current Temperature. */
+        } opt_mon_temperature;
+
+        struct
+        {
+            uint32_t current_vcc_count;         /**< Number of elements in current_vcc. */
+            uint16_t *current_vcc;              /**< Current Vcc. */
+        } opt_mon_vcc;
+
+        struct
+        {
+            uint32_t current_tx_bias_count;     /**< Number of elements in current_tx_bias. */
+            uint16_t *current_tx_bias;          /**< Current Tx Bias. */
+        } opt_mon_tx_bias;
+
+        struct
+        {
+            uint32_t current_tx_power_count;    /**< Number of elements in current_tx_power. */
+            uint16_t *current_tx_power;         /**< Current Tx Power. */
+        } opt_mon_tx_power;
+
+        struct
+        {
+            uint32_t current_rx_power_count;    /**< Number of elements in current_rx_power. */
+            uint16_t *current_rx_power;         /**< Current Rx Power. */
+        } opt_mon_rx_power;
+
+        struct
+        {
+            uint64_t rx_unicast_frames;         /**< Rx Unicast Frames. */
+        } rx_unicast_frames;
+
+        struct
+        {
+            uint64_t tx_unicast_frames;         /**< Tx Unicast Frames. */
+        } tx_unicast_frames;
+
+        struct
+        {
+            uint64_t rx_frames_too_short;       /**< Rx Frames Too Short. */
+        } rx_frame_too_short;
+
+        struct
+        {
+            uint64_t rx_frames64;               /**< Rx Frames 64. */
+        } rx_frame64;
+
+        struct
+        {
+            uint64_t rx_frames65127;            /**< Rx Frames 65_127. */
+        } rx_frame65127;
+
+        struct
+        {
+            uint64_t rx_frames128255;           /**< Rx Frames 128_255. */
+        } rx_frame128255;
+
+        struct
+        {
+            uint64_t rx_frames256511;           /**< Rx Frames 256_511. */
+        } rx_frame256511;
+
+        struct
+        {
+            uint64_t rx_frames5121023;          /**< Rx Frames 512_1023. */
+        } rx_frame5121023;
+
+        struct
+        {
+            uint64_t rx_frames10241518;         /**< Rx Frames 1024_1518. */
+        } rx_frame10241518;
+
+        struct
+        {
+            uint64_t rx_frames1519plus;         /**< Rx Frames 1519 Plus. */
+        } rx_frame1519plus;
+
+        struct
+        {
+            uint64_t tx_frames64;               /**< Tx Frames 64. */
+        } tx_frame64;
+
+        struct
+        {
+            uint64_t tx_frames65127;            /**< Tx Frames 65_127. */
+        } tx_frame65127;
+
+        struct
+        {
+            uint64_t tx_frames128255;           /**< Tx Frames 128_255. */
+        } tx_frame128255;
+
+        struct
+        {
+            uint64_t tx_frames256511;           /**< Tx Frames 256_511. */
+        } tx_frame256511;
+
+        struct
+        {
+            uint64_t tx_frames5121023;          /**< Tx Frames 512_1023. */
+        } tx_frame5121023;
+
+        struct
+        {
+            uint64_t tx_frames10241518;         /**< Tx Frames 1024_1518. */
+        } tx_frame10241518;
+
+        struct
+        {
+            uint64_t tx_frames1519plus;         /**< Tx Frames 1519 Plus. */
+        } tx_frame1519plus;
+
+        struct
+        {
+            uint8_t queue_delay_threshold;      /**< Queue Delay Threshold. */
+        } queue_delay_thresh;
+
+        struct
+        {
+            uint64_t queue_delay;               /**< Queue Delay . */
+        } queue_delay;
+
+        struct
+        {
+            uint64_t frames_dropped;            /**< Frames Dropped. */
+        } frames_dropped;
+
+        struct
+        {
+            uint64_t bytes_dropped;             /**< Bytes Dropped. */
+        } bytes_dropped;
+
+        struct
+        {
+            uint64_t bytes_delayed;             /**< Bytes Delayed. */
+        } bytes_delayed;
+
+        struct
+        {
+            uint64_t tx_bytes_unused;           /**< Tx Bytes Unused. */
+        } tx_bytes_unused;
+
+        struct
+        {
+            uint32_t port_type_count;           /**< Number of elements in port_type. */
+            bcmolt_epon_oam_dpoe_port_type *port_type;  /**< Port Type. */
+        } donu_port_type;
+
+        struct
+        {
+            uint32_t def_count; /**< Number of elements in def. */
+            bcmolt_epon_oam_dpoe_event_options *def;                    /**< Default. */
+        } suspend_resume_alarm_reporting;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_ipmc_forwarding_flags field_bitmap;    /**< Field Bitmap. */
+        } ipmc_forwarding_rule_configuration;
+
+        struct
+        {
+            uint16_t alternate_itpid;                               /**< Alternate I-TPID. */
+            bcmos_bool insert_this_tpid;                            /**< Insert This TPID. */
+        } itpid;
+
+        struct
+        {
+            uint16_t alternate_btpid;                               /**< Alternate B-TPID. */
+            bcmos_bool insert_this_tpid;                            /**< Insert This TPID. */
+        } btpid;
+
+        struct
+        {
+            uint16_t commited_burst_size;                           /**< 256 Bytes */
+            uint32_t commited_information_rate;                     /**< 1 Kbps */
+        } queue_cir;
+
+        struct
+        {
+            uint16_t excess_burst_size;                             /**< 256 Bytes */
+            uint32_t queue_eir;                                     /**< 1 Kbps */
+        } queue_eir;
+
+        struct
+        {
+            bcmos_bool enable_color_marking;                        /**< Enable Color Marking. */
+            uint8_t field_code;                                     /**< Field Code. */
+            uint8_t field_instance;                                 /**< Field Instance. */
+            uint8_t msb_mask;                                       /**< MSB Mask. */
+            uint8_t lsb_mask;                                       /**< LSB Mask. */
+            uint8_t green_value;                                    /**< Green Value. */
+            uint8_t yellow_value;                                   /**< Yellow Value. */
+        } queue_color_marking;
+
+        struct
+        {
+            uint16_t number_of_rate_limiters;                       /**< Number Of Rate Limiters. */
+            uint16_t cbs_min_increment;                             /**< CBS Min Increment. */
+            uint16_t cir_min_increment;                             /**< CIR Min Increment. */
+            uint16_t ebs_min_increment;                             /**< EBS Min Increment. */
+            uint16_t eir_min_increment;                             /**< EIR Min Increment. */
+            uint8_t color_aware;                                    /**< Color Aware. */
+            uint8_t coupling_configurable;                          /**< Coupling Configurable. */
+            uint8_t coupling_behaviro_default;                      /**< Coupling Behaviro Default. */
+            uint8_t color_marking_support;                          /**< Color Marking Support. */
+            uint8_t smart_color_drop;                               /**< Smart Color Drop. */
+        } queue_rate_limiter_capabilities;
+
+        struct
+        {
+            uint8_t coupling_flag;                                  /**< Coupling Flag. */
+        } coupling_flag;
+
+        struct
+        {
+            bcmos_bool pps_pulse_support;                           /**< 1PPS Pulse Support. */
+            bcmos_bool tod_string_support;                          /**< TOD String Support. */
+            bcmos_bool v2frame_support;                             /**< [1588v2] Frame Support. */
+        } clock_transport_capabilities;
+
+        struct
+        {
+            bcmos_bool pps_pulse_output;                            /**< 1 PPS Pulse Output. */
+            bcmos_bool tod_string_output;                           /**< TOD String Output. */
+            bcmos_bool v2frame_output;                              /**< [1588v2] Frame Output. */
+        } enable_clock_transport;
+
+        struct
+        {
+            uint32_t mpcp_reference_point;                          /**< MPCP Reference Point. */
+            uint32_t tod_string_count;                              /**< Number of elements in tod_string. */
+            uint8_t *tod_string;                                    /**< TOD String. */
+        } time_transfer;
+
+        struct
+        {
+            uint32_t ndown;                                         /**< Ndown. */
+            uint32_t nup;                                           /**< Nup. */
+        } propagation_parameters;
+
+        struct
+        {
+            uint32_t rtt;                                           /**< RTT. */
+        } rtt;
+
+        struct
+        {
+            uint32_t stag;                                          /**< S-TAG. */
+            uint32_t ctag;                                          /**< C-TAG. */
+        } dac_configuration;
+
+        struct
+        {
+            bcmos_bool lldp_instance_status;                        /**< LLDP Instance Status. */
+        } dac_configuration_enable_disable;
+
+        struct
+        {
+            uint64_t rx_broadcast_frames;                           /**< Rx Broadcast Frames. */
+        } rx_frame_broadcast;
+
+        struct
+        {
+            uint64_t tx_broadcast_frames;                           /**< Tx Broadcast Frames. */
+        } tx_frames_broadcast;
+
+        struct
+        {
+            uint64_t tx_multicast_frames;                           /**< Tx Multicast Frames. */
+        } tx_frames_multicast;
+
+        struct
+        {
+            uint64_t rx_multicast_frames;                           /**< Rx Multicast Frames. */
+        } rx_frames_multicast;
+
+        struct
+        {
+            uint64_t tx_bytes_green;                                /**< Tx Bytes Green. */
+        } tx_bytes_green;
+
+        struct
+        {
+            uint64_t rx_bytes_green;                                /**< Rx Bytes Green. */
+        } rx_bytes_green;
+
+        struct
+        {
+            bcmolt_epon_oam_u16_list_u8 llid_value;                 /**< LLID Value. */
+        } onu_mcast_llid;
+
+        struct
+        {
+            bcmos_mac_address mac_address;                          /**< Mac Address. */
+            uint8_t uni_port;                                       /**< Uni Port. */
+        } uni_mac_learned;
+
+        struct
+        {
+            bcmos_bool over_write;                                  /**< 0: Discard; 1: Overwrite */
+        } uni_mac_table_full_behavior;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_power_saving_mode pwr_saving_mode; /**< Pwr Saving Mode. */
+            bcmos_bool early_wake_up_support;                       /**< Early Wake Up Support. */
+            uint8_t ven_spec_field_size;    /**< Ven Spec Field Size. */
+            uint8_t *ven_spec_field;        /**< Ven Spec Field . */
+        } onu_pwr_saving_cap;
+    } u;
+} bcmolt_epon_oam_dpoe_attribute_value_base;
+
+/** DPoE Attribute Value MAC Table. 
+ */
+typedef struct bcmolt_epon_oam_dpoe_attribute_value_mac_table
+{
+    uint32_t mac_address_count;     /**< Number of elements in mac_address. */
+    bcmos_mac_address *mac_address; /**< MAC Address. */
+} bcmolt_epon_oam_dpoe_attribute_value_mac_table;
+
+/** DPoE Event Base. 
+ */
+typedef struct bcmolt_epon_oam_dpoe_event_base
+{
+    bcmolt_epon_oam_dpoe_alarm_code event_code; /**< Event Code. */
+    union
+    {
+        struct
+        {
+            bcmos_bool raised;                  /**< Raised. */
+            bcmolt_epon_oam_dpoe_object_type object_type;   /**< Object Type. */
+            uint16_t object_instance;                       /**< Object Instance. */
+        } def;
+
+        struct
+        {
+            bcmos_bool raised;  /**< Raised. */
+            bcmolt_epon_oam_dpoe_object_type object_type;   /**< Object Type. */
+            uint16_t object_instance;                       /**< Object Instance. */
+            uint8_t stat_branch;    /**< Stat Branch. */
+            uint16_t stat_leaf;     /**< Stat Leaf. */
+        } statistics_alarm;
+    } u;
+} bcmolt_epon_oam_dpoe_event_base;
+
+/** DPoE File Transfer Base. 
+ */
+typedef struct bcmolt_epon_oam_dpoe_file_transfer_base
+{
+    bcmolt_epon_oam_dpoe_file_transfer_opcode opcode;   /**< Opcode. */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_dpoe_file_type file_type;   /**< File Type. */
+        } file_read;
+
+        struct
+        {
+            uint32_t filename_count;                    /**< Number of elements in filename. */
+            uint8_t *filename;  /**< Filename. */
+        } file_write;
+
+        struct
+        {
+            uint16_t block;     /**< Block. */
+            uint16_t length;    /**< Length. */
+            uint8_t *data;      /**< Data. */
+        } file_data;
+
+        struct
+        {
+            uint16_t block;     /**< Block. */
+            bcmolt_epon_oam_dpoe_file_transfer_error error; /**< Error. */
+        } file_ack;
+    } u;
+} bcmolt_epon_oam_dpoe_file_transfer_base;
+
+/** DPoE Info TLV. 
+ */
+typedef struct bcmolt_epon_oam_dpoe_info_tlv
+{
+    bcmolt_epon_oam_dpoe_info_tlv_type type;    /**< Type. */
+    union
+    {
+        struct
+        {
+            uint8_t dpoe_oam_version;           /**< DPoE OAM Version. */
+        } dpoe_oam_support;
+    } u;
+} bcmolt_epon_oam_dpoe_info_tlv;
+
+/** A structure containing a numeric 8-bit value. 
+ */
+typedef struct bcmolt_epon_oam_u8value
+{
+    uint8_t value;  /**< An 8-bit numeric value. */
+} bcmolt_epon_oam_u8value;
+
+/** A structure containing a numeric 64-bit value. 
+ */
+typedef struct bcmolt_epon_oam_u64value
+{
+    uint64_t value; /**< A 64-bit numeric value. */
+} bcmolt_epon_oam_u64value;
+
+/** Std Attribute Value. 
+ */
+typedef struct bcmolt_epon_oam_std_attribute_value
+{
+    bcmolt_epon_oam_var_leaf_attribute leaf;    /**< Leaf. */
+    uint8_t width;  /**< Width. */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_u8value value;                      /**< Value. */
+        } mac_id;
+
+        struct
+        {
+            bcmolt_epon_oam_u64value value;                     /**< Value. */
+        } mac_frames_tx_ok;
+
+        struct
+        {
+            bcmolt_epon_oam_u64value value;                     /**< Value. */
+        } mac_single_coll_frames;
+
+        struct
+        {
+            bcmolt_epon_oam_u64value value;                     /**< Value. */
+        } mac_multiple_coll_frames;
+
+        struct
+        {
+            bcmolt_epon_oam_u64value value;                     /**< Value. */
+        } mac_frames_rx_ok;
+
+        struct
+        {
+            bcmolt_epon_oam_u64value value;                     /**< Value. */
+        } mac_fcs_err;
+
+        struct
+        {
+            bcmolt_epon_oam_u64value value;                     /**< Value. */
+        } mac_align_err;
+
+        struct
+        {
+            bcmolt_epon_oam_u64value value;                     /**< Value. */
+        } mac_octets_tx_ok;
+
+        struct
+        {
+            bcmolt_epon_oam_u8value value;                      /**< Value. */
+        } mac_frames_deferred;
+
+        struct
+        {
+            bcmolt_epon_oam_u64value value;                     /**< Value. */
+        } mac_late_collisions;
+
+        struct
+        {
+            bcmolt_epon_oam_u64value value;                     /**< Value. */
+        } mac_excessive_collisions;
+
+        struct
+        {
+            bcmolt_epon_oam_u64value value;                     /**< Value. */
+        } mac_frames_lost_mac_tx_err;
+
+        struct
+        {
+            bcmolt_epon_oam_u8value value;                      /**< Value. */
+        } mac_carrier_sense_err;
+
+        struct
+        {
+            bcmolt_epon_oam_u64value value;                     /**< Value. */
+        } mac_octets_rx_ok;
+
+        struct
+        {
+            bcmolt_epon_oam_u64value value;                     /**< Value. */
+        } mac_frames_lost_mac_rx_err;
+
+        struct
+        {
+            bcmolt_epon_oam_u64value value;                     /**< Value. */
+        } mac_mcast_frames_tx_ok;
+
+        struct
+        {
+            bcmolt_epon_oam_u64value value;                     /**< Value. */
+        } mac_bcast_frames_tx_ok;
+
+        struct
+        {
+            bcmolt_epon_oam_u8value value;                      /**< Value. */
+        } mac_fr_excessive_deferral;
+
+        struct
+        {
+            bcmolt_epon_oam_u64value value;                     /**< Value. */
+        } mac_mcast_frames_rx_ok;
+
+        struct
+        {
+            bcmolt_epon_oam_u64value value;                     /**< Value. */
+        } mac_bcast_frames_rx_ok;
+
+        struct
+        {
+            bcmolt_epon_oam_u64value value;                     /**< Value. */
+        } mac_in_range_len_err;
+
+        struct
+        {
+            bcmolt_epon_oam_u64value value;                     /**< Value. */
+        } mac_out_of_range_len_err;
+
+        struct
+        {
+            bcmolt_epon_oam_u64value value;                     /**< Value. */
+        } mac_frame_too_long;
+
+        struct
+        {
+            bcmos_bool status;                                  /**< Status. */
+        } mac_enable_status;
+
+        struct
+        {
+            bcmos_mac_address mac_address;                      /**< MAC Address. */
+        } mac_addr;
+
+        struct
+        {
+            bcmolt_epon_oam_std_phy_type type;                  /**< Type. */
+        } phy_type;
+
+        struct
+        {
+            bcmolt_epon_oam_u64value value;                     /**< Value. */
+        } phy_symbol_err_during_carrier;
+
+        struct
+        {
+            bcmolt_epon_oam_oam_state state;                    /**< State. */
+        } phy_admin_state;
+
+        struct
+        {
+            bcmolt_epon_oam_mau_media_available value;          /**< Value. */
+        } mau_media_avail;
+
+        struct
+        {
+            bcmolt_epon_oam_u8value value;                      /**< Value. */
+        } auto_neg_id;
+
+        struct
+        {
+            bcmolt_epon_oam_autonegotiate_admin_state value;    /**< Value. */
+        } auto_neg_admin_state;
+
+        struct
+        {
+            bcmolt_epon_oam_auto_remote_sig value;              /**< Value. */
+        } auto_neg_remote_sig;
+
+        struct
+        {
+            bcmolt_epon_oam_auto_negotiation_auto_config value; /**< Value. */
+        } auto_neg_auto_cfg;
+
+        struct
+        {
+            uint32_t capabilities_count;                        /**< Number of elements in capabilities. */
+            bcmolt_epon_oam_std_auto_negoitation_capability *capabilities;  /**< Capabilities. */
+        } auto_neg_local_tech_ability;
+
+        struct
+        {
+            uint32_t capabilities_count;    /**< Number of elements in capabilities. */
+            bcmolt_epon_oam_std_auto_negoitation_capability *capabilities;  /**< Capabilities. */
+        } auto_neg_advertised_tech_ability;
+
+        struct
+        {
+            uint32_t capabilities_count;    /**< Number of elements in capabilities. */
+            bcmolt_epon_oam_std_auto_negoitation_capability *capabilities;  /**< Capabilities. */
+        } auto_neg_rx_tech;
+
+        struct
+        {
+            bcmolt_epon_oam_auto_selector value;        /**< Value. */
+        } auto_neg_local_select_able;
+
+        struct
+        {
+            bcmolt_epon_oam_auto_selector value;        /**< Value. */
+        } auto_neg_ad_select_able;
+
+        struct
+        {
+            bcmolt_epon_oam_auto_selector value;        /**< Value. */
+        } auto_neg_rx_select_able;
+
+        struct
+        {
+            bcmolt_epon_oam_mac_duplex_status value;    /**< Value. */
+        } mac_duplex_status;
+
+        struct
+        {
+            uint32_t functions_count;                   /**< Number of elements in functions. */
+            uint16_t *functions;                        /**< Functions. */
+        } mac_ctrl_funcs_supported;
+
+        struct
+        {
+            bcmolt_epon_oam_u64value value;             /**< Value. */
+        } mac_ctrl_frames_tx;
+
+        struct
+        {
+            bcmolt_epon_oam_u64value value;             /**< Value. */
+        } mac_ctrl_frames_rx;
+
+        struct
+        {
+            bcmolt_epon_oam_u64value value;             /**< Value. */
+        } mac_ctrl_unsupported_op_rx;
+
+        struct
+        {
+            bcmolt_epon_oam_u64value value;             /**< Value. */
+        } mac_ctrl_pause_delay;
+
+        struct
+        {
+            bcmolt_epon_oam_u64value value;             /**< Value. */
+        } mac_ctrl_pause_tx;
+
+        struct
+        {
+            bcmolt_epon_oam_u64value value;             /**< Value. */
+        } mac_ctrl_pause_rx;
+
+        struct
+        {
+            bcmolt_epon_oam_u64value value;             /**< Value. */
+        } oam_local_err_frame_secs_event;
+
+        struct
+        {
+            bcmolt_epon_oam_u64value value;             /**< Value. */
+        } oam_local_err_frame_period_event;
+
+        struct
+        {
+            bcmolt_epon_oam_u64value value;             /**< Value. */
+        } oam_local_err_fr_sec_sum_event;
+
+        struct
+        {
+            bcmolt_epon_oam_u64value value;             /**< Value. */
+        } oam_emul_crc8err;
+
+        struct
+        {
+            bcmolt_epon_oam_u64value value;             /**< Value. */
+        } mpcp_mac_ctrl_frames_tx;
+
+        struct
+        {
+            bcmolt_epon_oam_u64value value;             /**< Value. */
+        } mpcp_mac_ctrl_frames_rx;
+
+        struct
+        {
+            bcmolt_epon_oam_u64value value;             /**< Value. */
+        } mpcp_discovery_window_tx;
+
+        struct
+        {
+            bcmolt_epon_oam_u64value value;             /**< Value. */
+        } mpcp_discovery_timeout;
+
+        struct
+        {
+            uint32_t value;                     /**< Value. */
+        } fec_corrected_blocks;
+
+        struct
+        {
+            uint32_t value;                     /**< Value. */
+        } fec_uncorrectable_blocks;
+
+        struct
+        {
+            bcmolt_epon_oam_fec_support value;  /**< Value. */
+        } fec_ability;
+
+        struct
+        {
+            bcmolt_epon_oam_std_fec_mode value; /**< Value. */
+        } fec_mode;
+
+        struct
+        {
+            bcmolt_epon_oam_u64value value;     /**< Value. */
+        } mpcp_tx_gate;
+
+        struct
+        {
+            bcmolt_epon_oam_u64value value;     /**< Value. */
+        } mpcp_tx_reg_ack;
+
+        struct
+        {
+            bcmolt_epon_oam_u64value value;     /**< Value. */
+        } mpcp_tx_register;
+
+        struct
+        {
+            bcmolt_epon_oam_u64value value;     /**< Value. */
+        } mpcp_tx_reg_request;
+
+        struct
+        {
+            bcmolt_epon_oam_u64value value;     /**< Value. */
+        } mpcp_tx_report;
+
+        struct
+        {
+            bcmolt_epon_oam_u64value value;     /**< Value. */
+        } mpcp_rx_gate;
+
+        struct
+        {
+            bcmolt_epon_oam_u64value value;     /**< Value. */
+        } mpcp_rx_reg_ack;
+
+        struct
+        {
+            bcmolt_epon_oam_u64value value;     /**< Value. */
+        } mpcp_rx_register;
+
+        struct
+        {
+            bcmolt_epon_oam_u64value value;     /**< Value. */
+        } mpcp_rx_reg_request;
+
+        struct
+        {
+            bcmolt_epon_oam_u64value value;     /**< Value. */
+        } mpcp_rx_report;
+
+        struct
+        {
+            uint64_t value;                     /**< Value. */
+        } mac_collision_frames;
+    } u;
+} bcmolt_epon_oam_std_attribute_value;
+
+/** Std Action Value Base. 
+ */
+typedef struct bcmolt_epon_oam_std_action_value_base
+{
+    bcmolt_epon_oam_var_leaf_action leaf;   /**< Leaf. */
+    uint8_t width;  /**< Width. */
+} bcmolt_epon_oam_std_action_value_base;
+
+/** DPoE Var Container Base. 
+ */
+typedef struct bcmolt_epon_oam_dpoe_var_container_base
+{
+    bcmolt_epon_oam_dpoe_branch branch; /**< Branch. */
+    union
+    {
+        struct
+        {
+            uint16_t leaf;              /**< Leaf. */
+            uint8_t width;              /**< Width. */
+        } def;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_object_context_base object_context;    /**< Object Context. */
+        } object;
+
+        struct
+        {
+            bcmolt_epon_oam_std_attribute_value attribute;              /**< Attribute. */
+        } standard_attribute;
+
+        struct
+        {
+            bcmolt_epon_oam_std_action_value_base action;               /**< Action. */
+        } standard_action;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_attribute_value_base attribute;        /**< Attribute. */
+        } extended_attribute;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_action_value_base action;              /**< Action. */
+        } extended_action;
+
+        struct
+        {
+            uint32_t unknown_count; /**< Number of elements in unknown. */
+            uint8_t *unknown;       /**< Unknown. */
+        } end;
+    } u;
+} bcmolt_epon_oam_dpoe_var_container_base;
+
+/** DPoE Vendor Extended Base. 
+ */
+typedef struct bcmolt_epon_oam_dpoe_vendor_extended_base
+{
+    bcmolt_epon_oam_dpoe_opcode op;                     /**< Op. */
+    union
+    {
+        struct
+        {
+            uint32_t vars_count;                        /**< Number of elements in vars. */
+            bcmolt_epon_oam_dpoe_var_descriptor *vars;  /**< Vars. */
+        } get_request;
+
+        struct
+        {
+            uint32_t vars_count;                        /**< Number of elements in vars. */
+            bcmolt_epon_oam_dpoe_var_container_base *vars;  /**< Vars. */
+        } get_response;
+
+        struct
+        {
+            uint32_t vars_count;    /**< Number of elements in vars. */
+            bcmolt_epon_oam_dpoe_var_container_base *vars;  /**< Vars. */
+        } set_request;
+
+        struct
+        {
+            uint32_t vars_count;    /**< Number of elements in vars. */
+            bcmolt_epon_oam_dpoe_var_container_base *vars;      /**< Vars. */
+        } set_response;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_mcast_reg_code action_code;    /**< Action Code. */
+            uint16_t multicast_llid;    /**< Multicast LLID. */
+        } mcast_reg;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_mcast_ctrl_resp_code status;   /**< Status. */
+            uint16_t multicast_llid;    /**< Multicast LLID. */
+        } mcast_reg_resp;
+
+        struct
+        {
+            uint8_t key_number;         /**< Key Number. */
+            uint8_t key_length;         /**< Key Length. */
+            uint8_t *key_data;          /**< Key Data. */
+        } key_exchange;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_file_transfer_base file_transfer;  /**< File Transfer. */
+        } file_transfer;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_mcast_ctrl_action action;          /**< Action. */
+            uint16_t llid;                  /**< LLID. */
+            uint8_t ipsa[16];               /**< IP SA. */
+            uint8_t ipda[16];               /**< IP DA. */
+            bcmos_mac_address client_mac;   /**< Client Mac. */
+        } dynamic_ipmcast_ctrl;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_mcast_ctrl_resp_code result_code;  /**< Result Code. */
+        } dynamic_ipmcast_ctrl_resp;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_mcast_ctrl_action action;          /**< Action. */
+            uint16_t llid;      /**< LLID. */
+            uint8_t ipsa[16];   /**< IP SA. */
+            uint8_t ipda[16];   /**< IP DA. */
+            uint8_t port;       /**< Port. */
+        } static_ipmcast_ctrl;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_mcast_ctrl_resp_code result_code;  /**< Result Code. */
+        } static_ipmcast_ctrl_resp;
+    } u;
+} bcmolt_epon_oam_dpoe_vendor_extended_base;
+
+/** TLS Version. 
+ */
+typedef struct bcmolt_epon_oam_tls_version
+{
+    uint8_t major;  /**< Major. */
+    uint8_t minor;  /**< Minor. */
+} bcmolt_epon_oam_tls_version;
+
+/** TLS Random. 
+ */
+typedef struct bcmolt_epon_oam_tls_random
+{
+    uint32_t unix_time; /**< Unix Time. */
+    uint8_t random[28]; /**< Random. */
+} bcmolt_epon_oam_tls_random;
+
+/** TLS Session ID. 
+ */
+typedef struct bcmolt_epon_oam_tls_session_id
+{
+    uint8_t length;         /**< Length. */
+    uint8_t *session_id;    /**< Session ID. */
+} bcmolt_epon_oam_tls_session_id;
+
+/** TLS Ciphersuite List. 
+ */
+typedef struct bcmolt_epon_oam_tls_ciphersuite_list
+{
+    uint16_t length;    /**< Length. */
+    bcmolt_epon_oam_tls_ciphersuite *ciphersuites;  /**< Ciphersuites. */
+} bcmolt_epon_oam_tls_ciphersuite_list;
+
+/** TLS Compression List. 
+ */
+typedef struct bcmolt_epon_oam_tls_compression_list
+{
+    uint8_t length; /**< Length. */
+    bcmolt_epon_oam_tls_compression_method *methods;    /**< Methods. */
+} bcmolt_epon_oam_tls_compression_list;
+
+/** TLS Certificate List. 
+ */
+typedef struct bcmolt_epon_oam_tls_certificate_list
+{
+    uint32_t certificate_list_count;                /**< Number of elements in certificate_list. */
+    bcmolt_epon_oam_certificate *certificate_list;  /**< Certificate List. */
+} bcmolt_epon_oam_tls_certificate_list;
+
+/** TLS Certificate Type List. 
+ */
+typedef struct bcmolt_epon_oam_tls_certificate_type_list
+{
+    uint8_t length; /**< Length. */
+    bcmolt_epon_oam_tls_certificate_type *certificate_types;    /**< Certificate Types. */
+} bcmolt_epon_oam_tls_certificate_type_list;
+
+/** TLS Handshake. 
+ */
+typedef struct bcmolt_epon_oam_tls_handshake
+{
+    bcmolt_epon_oam_tls_handshake_type id;                      /**< ID. */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_tls_version version;                /**< Version. */
+            bcmolt_epon_oam_tls_random random;                  /**< Random. */
+            bcmolt_epon_oam_tls_session_id session_id;          /**< Session ID. */
+            bcmolt_epon_oam_tls_ciphersuite_list cipher_suites; /**< Cipher Suites. */
+            bcmolt_epon_oam_tls_compression_list compression_methods;   /**< Compression Methods. */
+        } client_hello;
+
+        struct
+        {
+            bcmolt_epon_oam_tls_version version;                        /**< Version. */
+            bcmolt_epon_oam_tls_random random;              /**< Random. */
+            bcmolt_epon_oam_tls_session_id session_id;      /**< Session ID. */
+            bcmolt_epon_oam_tls_ciphersuite ciphersuite;    /**< Ciphersuite. */
+            bcmolt_epon_oam_tls_compression_method compression_method;          /**< Compression Method. */
+        } server_hello;
+
+        struct
+        {
+            bcmolt_epon_oam_tls_certificate_list value;                         /**< Value. */
+        } certificate;
+
+        struct
+        {
+            bcmolt_epon_oam_tls_certificate_type_list certificate_types;        /**< Certificate Types. */
+            bcmolt_epon_oam_distinguished_name_list certificate_authorities;    /**< Certificate Authorities. */
+        } certificate_request;
+
+        struct
+        {
+            uint16_t hash_size;                     /**< Hash Size. */
+            uint8_t *encrypted_hash;                /**< Encrypted Hash. */
+        } certificate_verify;
+
+        struct
+        {
+            uint16_t size;                          /**< Size. */
+            uint8_t *encrypted_pre_master_secret;   /**< Encrypted Pre Master Secret. */
+        } client_key_exchange;
+
+        struct
+        {
+            uint32_t verify_data_count;             /**< Number of elements in verify_data. */
+            uint8_t *verify_data;                   /**< Verify Data. */
+        } finished;
+    } u;
+} bcmolt_epon_oam_tls_handshake;
+
+/** TLS Record. 
+ */
+typedef struct bcmolt_epon_oam_tls_record
+{
+    bcmolt_epon_oam_tls_content_type content_type;              /**< Content Type. */
+    bcmolt_epon_oam_tls_version version;                        /**< Version. */
+    union
+    {
+        struct
+        {
+            uint32_t handshake_records_count;                   /**< Number of elements in handshake_records. */
+            bcmolt_epon_oam_tls_handshake *handshake_records;   /**< Handshake Records. */
+        } handshake;
+    } u;
+} bcmolt_epon_oam_tls_record;
+
+/** EAP TLS Message. 
+ */
+typedef struct bcmolt_epon_oam_eap_tls_message
+{
+    bcmolt_epon_oam_tls_flags flags;            /**< Flags. */
+    uint32_t length;                            /**< Length. */
+    uint32_t tls_records_count;                 /**< Number of elements in tls_records. */
+    bcmolt_epon_oam_tls_record *tls_records;    /**< TLS Records. */
+} bcmolt_epon_oam_eap_tls_message;
+
+/** EAP TLS Header. 
+ */
+typedef struct bcmolt_epon_oam_eap_tls_header
+{
+    bcmolt_epon_oam_tls_subtype sub_type;           /**< Sub Type. */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_eap_tls_message value;  /**< Value. */
+        } authentication;
+    } u;
+} bcmolt_epon_oam_eap_tls_header;
+
+/** EAP Frame. 
+ */
+typedef struct bcmolt_epon_oam_eap_frame
+{
+    bcmolt_epon_oam_eap_code code;                  /**< Code. */
+    uint8_t id;                                     /**< ID. */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_eap_tls_header value;   /**< Value. */
+        } request;
+
+        struct
+        {
+            bcmolt_epon_oam_eap_tls_header value;   /**< Value. */
+        } response;
+    } u;
+} bcmolt_epon_oam_eap_frame;
+
+/** EAPOL PDU. 
+ */
+typedef struct bcmolt_epon_oam_eapol_pdu
+{
+    bcmolt_epon_oam_eapol_type type;            /**< Type. */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_eap_frame value;    /**< Value. */
+        } packet;
+    } u;
+} bcmolt_epon_oam_eapol_pdu;
+
+/** EAPOL Protocol. 
+ */
+typedef struct bcmolt_epon_oam_eapol_protocol
+{
+    bcmolt_epon_oam_eapol_version version;      /**< Version. */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_eapol_pdu value;    /**< Value. */
+        } def;
+    } u;
+} bcmolt_epon_oam_eapol_protocol;
+
+/** VLAN Value. 
+ */
+typedef struct bcmolt_epon_oam_vlan_value
+{
+    uint8_t pcp;    /**< PCP. */
+    uint8_t cfi;    /**< CFI. */
+    uint16_t vid;   /**< VID. */
+} bcmolt_epon_oam_vlan_value;
+
+/** I-Tag Value. 
+ */
+typedef struct bcmolt_epon_oam_itag_value
+{
+    uint8_t pcp;    /**< PCP. */
+    uint8_t dei;    /**< DEI. */
+    uint8_t uca;    /**< UCA. */
+    uint8_t res;    /**< RES. */
+    uint32_t isid;  /**< I-SID. */
+} bcmolt_epon_oam_itag_value;
+
+/** Tek Info TLV. 
+ */
+typedef struct bcmolt_epon_oam_tek_info_tlv
+{
+    bcmolt_epon_oam_tek_info_tlv_type type;                 /**< Type. */
+    union
+    {
+        struct
+        {
+            uint8_t version;                                /**< Version. */
+            bcmolt_epon_oam_tek_report_modes report_mode;   /**< For the OLT these are the supported modes */
+            bcmolt_epon_oam_tek_report_modes preferred_report_mode; /**< Only sent by OLT */
+        } extension_support;
+    } u;
+} bcmolt_epon_oam_tek_info_tlv;
+
+/** Organization Specific Info. 
+ */
+typedef struct bcmolt_epon_oam_organization_specific_info
+{
+    bcmolt_epon_oam_well_known_oui oui;                         /**< OUI. */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_tek_info_tlv tlvs;                  /**< TLVs. */
+        } tek;
+
+        struct
+        {
+            uint8_t extension_support;                          /**< Extension Support. */
+            uint8_t version;                                    /**< Version. */
+            uint32_t supp_version_count;                        /**< Number of elements in supp_version. */
+            bcmolt_epon_oam_ctc_oui_version_pair *supp_version; /**< Supp Version. */
+        } ctc;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_info_tlv dpoe_info_tlv;        /**< DPoE Info TLV. */
+        } dpoe;
+    } u;
+} bcmolt_epon_oam_organization_specific_info;
+
+/** Local/Remote Information. 
+ */
+typedef struct bcmolt_epon_oam_local_remote_info
+{
+    uint8_t oam_version;    /**< OAM Version. */
+    uint16_t revision;      /**< Revision. */
+    bcmolt_epon_oam_local_remote_info_state state;          /**< State. */
+    bcmolt_epon_oam_local_remote_info_config oam_config;    /**< OAM Configuration. */
+    uint16_t max_pdu_size;                  /**< Max PDU Size. */
+    bcmolt_epon_oam_well_known_oui oui;     /**< OUI. */
+    uint8_t vendor_specific_information[4]; /**< Vendor Specific Information. */
+} bcmolt_epon_oam_local_remote_info;
+
+/** Info TLV Base. 
+ */
+typedef struct bcmolt_epon_oam_info_tlv_base
+{
+    bcmolt_epon_oam_info_tlv_type type; /**< Type. */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_organization_specific_info value;   /**< Value. */
+        } organization_specific;
+
+        struct
+        {
+            uint32_t unknown_count;                 /**< Number of elements in unknown. */
+            uint8_t *unknown;                       /**< Unknown. */
+        } end;
+
+        struct
+        {
+            bcmolt_epon_oam_local_remote_info info; /**< Info. */
+        } remote;
+
+        struct
+        {
+            bcmolt_epon_oam_local_remote_info info; /**< Info. */
+        } local;
+    } u;
+} bcmolt_epon_oam_info_tlv_base;
+
+/** Organization Specific Link Event Base. 
+ */
+typedef struct bcmolt_epon_oam_organization_specific_link_event_base
+{
+    bcmolt_epon_oam_well_known_oui oui;                 /**< OUI. */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_tek_alarm_code alarm_code;  /**< Alarm Code. */
+            bcmos_bool raised;  /**< Raised. */
+            uint16_t port;      /**< Port. */
+            uint16_t link;      /**< Link. */
+            uint16_t queue;     /**< Queue. */
+            bcmolt_epon_oam_tek_alarm_context alarm_context;    /**< Alarm Context. */
+        } tek;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_event_base value;              /**< Value. */
+        } dpoe;
+
+        struct
+        {
+            bcmolt_epon_oam_ctc_alarm_entry value;              /**< Value. */
+        } ctc;
+    } u;
+} bcmolt_epon_oam_organization_specific_link_event_base;
+
+/** Link Event TLV Base. 
+ */
+typedef struct bcmolt_epon_oam_link_event_tlv_base
+{
+    bcmolt_epon_oam_link_event_type type;   /**< Type. */
+    union
+    {
+        struct
+        {
+            uint32_t unknown_count;         /**< Number of elements in unknown. */
+            uint8_t *unknown;               /**< Unknown. */
+        } end;
+
+        struct
+        {
+            bcmolt_epon_oam_organization_specific_link_event_base value;    /**< Value. */
+        } organization_specific;
+    } u;
+} bcmolt_epon_oam_link_event_tlv_base;
+
+/** Var Descriptor Base. 
+ */
+typedef struct bcmolt_epon_oam_var_descriptor_base
+{
+    bcmolt_epon_oam_var_branch branch;                  /**< Branch. */
+    union
+    {
+        struct
+        {
+            uint16_t leaf;                              /**< Leaf. */
+        } def;
+
+        struct
+        {
+            uint32_t unknown_count;                     /**< Number of elements in unknown. */
+            uint8_t *unknown;                           /**< Unknown. */
+        } end;
+
+        struct
+        {
+            bcmolt_epon_oam_var_leaf_object leaf;       /**< Leaf. */
+        } object;
+
+        struct
+        {
+            bcmolt_epon_oam_var_leaf_package leaf;      /**< Leaf. */
+        } package;
+
+        struct
+        {
+            bcmolt_epon_oam_var_leaf_name_binding leaf; /**< Leaf. */
+        } name_binding;
+
+        struct
+        {
+            bcmolt_epon_oam_var_leaf_attribute leaf;    /**< Leaf. */
+        } attribute;
+
+        struct
+        {
+            bcmolt_epon_oam_var_leaf_action leaf;       /**< Leaf. */
+        } action;
+    } u;
+} bcmolt_epon_oam_var_descriptor_base;
+
+/** Var Container Base. 
+ */
+typedef struct bcmolt_epon_oam_var_container_base
+{
+    bcmolt_epon_oam_var_branch branch;              /**< Branch. */
+    union
+    {
+        struct
+        {
+            uint16_t leaf;                          /**< Leaf. */
+            uint8_t width;                          /**< Width. */
+        } def;
+
+        struct
+        {
+            uint32_t unknown_count;                 /**< Number of elements in unknown. */
+            uint8_t *unknown;                       /**< Unknown. */
+        } end;
+
+        struct
+        {
+            bcmolt_epon_oam_var_leaf_object leaf;   /**< Leaf. */
+            uint8_t width;          /**< Width. */
+            uint32_t value_count;   /**< Number of elements in value. */
+            uint8_t *value;         /**< Value. */
+        } object;
+
+        struct
+        {
+            bcmolt_epon_oam_var_leaf_package leaf;  /**< Leaf. */
+            uint8_t width;          /**< Width. */
+            uint32_t value_count;   /**< Number of elements in value. */
+            uint8_t *value;         /**< Value. */
+        } package;
+
+        struct
+        {
+            bcmolt_epon_oam_var_leaf_name_binding leaf; /**< Leaf. */
+            uint8_t width;          /**< Width. */
+            uint32_t value_count;   /**< Number of elements in value. */
+            uint8_t *value;         /**< Value. */
+        } name_binding;
+
+        struct
+        {
+            bcmolt_epon_oam_var_leaf_attribute leaf;    /**< Leaf. */
+            uint8_t width;          /**< Width. */
+            uint32_t value_count;   /**< Number of elements in value. */
+            uint8_t *value;         /**< Value. */
+        } attribute;
+
+        struct
+        {
+            bcmolt_epon_oam_var_leaf_action leaf;   /**< Leaf. */
+            uint8_t width;          /**< Width. */
+            uint32_t value_count;   /**< Number of elements in value. */
+            uint8_t *value;         /**< Value. */
+        } action;
+    } u;
+} bcmolt_epon_oam_var_container_base;
+
+/** Tek Object Queue Name. 
+ */
+typedef struct bcmolt_epon_oam_tek_object_queue_name
+{
+    uint16_t port_number;   /**< Port Number. */
+    uint16_t link_number;   /**< Link Number. */
+    uint16_t queue_number;  /**< Queue Number. */
+} bcmolt_epon_oam_tek_object_queue_name;
+
+/** Tek Object Context. 
+ */
+typedef struct bcmolt_epon_oam_tek_object_context
+{
+    bcmolt_epon_oam_tek_object_type object_type;    /**< Object Type. */
+    uint8_t length;                     /**< Length. */
+    union
+    {
+        struct
+        {
+            uint32_t link_number_count; /**< Number of elements in link_number. */
+            uint8_t *link_number;       /**< Link Number. */
+        } logical_link;
+
+        struct
+        {
+            bcmolt_epon_oam_tek_object_queue_name value;    /**< Value. */
+        } queue_name;
+
+        struct
+        {
+            uint32_t port_number_count;                     /**< Number of elements in port_number. */
+            uint8_t *port_number;   /**< Port Number. */
+        } port;
+
+        struct
+        {
+            bcmolt_epon_oam_tek_object_queue_name value;    /**< Value. */
+        } all_queues;
+
+        struct
+        {
+            uint32_t pon_number_count;                      /**< Number of elements in pon_number. */
+            uint8_t *pon_number;                        /**< PON Number. */
+        } network_pon;
+
+        struct
+        {
+            uint32_t pon_number_count;                  /**< Number of elements in pon_number. */
+            uint8_t *pon_number;                        /**< PON Number. */
+        } user_pon;
+
+        struct
+        {
+            bcmolt_epon_oam_flow_direction direction;   /**< Direction. */
+        } flow_direction;
+
+        struct
+        {
+            uint32_t bridge_number_count;               /**< Number of elements in bridge_number. */
+            uint8_t *bridge_number;                     /**< Bridge Number. */
+        } bridge;
+
+        struct
+        {
+            uint32_t port_number_count;                 /**< Number of elements in port_number. */
+            uint8_t *port_number;                       /**< Port Number. */
+        } bridge_port;
+    } u;
+} bcmolt_epon_oam_tek_object_context;
+
+/** Tek Var Descriptor. 
+ */
+typedef struct bcmolt_epon_oam_tek_var_descriptor
+{
+    bcmolt_epon_oam_tek_branch branch;  /**< Branch. */
+    union
+    {
+        struct
+        {
+            uint16_t leaf;              /**< Leaf. */
+        } def;
+
+        struct
+        {
+            uint32_t unknown_count;     /**< Number of elements in unknown. */
+            uint8_t *unknown;           /**< Unknown. */
+        } end;
+
+        struct
+        {
+            bcmolt_epon_oam_tek_object_context object_context;  /**< Object Context. */
+        } name_binding;
+
+        struct
+        {
+            bcmolt_epon_oam_tek_leaf_attribute leaf;            /**< Leaf. */
+            bcmolt_epon_oam_tek_alarm_code alarm_code;          /**< Alarm Code. */
+        } attribute;
+
+        struct
+        {
+            bcmolt_epon_oam_tek_leaf_action leaf;               /**< Leaf. */
+        } action;
+    } u;
+} bcmolt_epon_oam_tek_var_descriptor;
+
+/** LUE Field Select Entry. 
+ */
+typedef struct bcmolt_epon_oam_lue_field_select_entry
+{
+    uint8_t layer_select;   /**< Layer Select. */
+    uint8_t dword_offset;   /**< Dword offset. */
+    uint8_t field_length;   /**< Field Length. */
+    uint8_t bit_offset;     /**< Bit offset. */
+} bcmolt_epon_oam_lue_field_select_entry;
+
+/** Tek ONU Rule Clause. 
+ */
+typedef struct bcmolt_epon_oam_tek_onu_rule_clause
+{
+    bcmolt_epon_oam_tek_onu_field_select field_select;  /**< Field Select. */
+    uint64_t lookup_value;                      /**< Lookup Value. */
+    bcmolt_epon_oam_tek_onu_rule_operator op;   /**< Op. */
+} bcmolt_epon_oam_tek_onu_rule_clause;
+
+/** Tek ONU Rule. 
+ */
+typedef struct bcmolt_epon_oam_tek_onu_rule
+{
+    uint8_t direction;  /**< Direction. */
+    bcmolt_epon_oam_tek_onu_rule_flags flags;   /**< Flags. */
+    uint8_t port_link;  /**< Port/Link. */
+    uint8_t queue;      /**< Queue. */
+    uint16_t vid_cos;   /**< VID/CoS. */
+    uint8_t reserved;   /**< Reserved. */
+    uint8_t precedence; /**< Precedence. */
+    bcmolt_epon_oam_tek_onu_rule_action action;     /**< Action. */
+    uint8_t clauses_count;                          /**< Clauses Count. */
+    bcmolt_epon_oam_tek_onu_rule_clause *clauses;   /**< Clauses. */
+} bcmolt_epon_oam_tek_onu_rule;
+
+/** Tek ONU IGMP VLAN. 
+ */
+typedef struct bcmolt_epon_oam_tek_onu_igmp_vlan
+{
+    bcmos_vlan_tag epon_vlan;   /**< EPON VLAN. */
+    bcmos_vlan_tag user_vlan;   /**< User VLAN. */
+    uint8_t max_allowed_groups; /**< Max Allowed Groups. */
+} bcmolt_epon_oam_tek_onu_igmp_vlan;
+
+/** Tek VLAN Destination Mapping. 
+ */
+typedef struct bcmolt_epon_oam_tek_vlan_destination_mapping
+{
+    bcmos_vlan_tag vlan_tag;    /**< VLAN Tag. */
+    uint8_t link_index;         /**< Link Index. */
+    uint8_t queue_index;        /**< Queue Index. */
+} bcmolt_epon_oam_tek_vlan_destination_mapping;
+
+/** Load Timestamp 
+ */
+typedef struct bcmolt_epon_oam_tek_firmware_timestamp
+{
+    uint16_t year;  /**< Year. */
+    uint8_t month;  /**< Month. */
+    uint8_t day;    /**< Day. */
+    uint8_t hour;   /**< Hour. */
+    uint8_t min;    /**< Min. */
+    uint8_t sec;    /**< Sec. */
+} bcmolt_epon_oam_tek_firmware_timestamp;
+
+/** Rule Entry. 
+ */
+typedef struct bcmolt_epon_oam_rule_entry
+{
+    uint16_t learning_domain;   /**< Learning Domain. */
+    uint8_t stat;               /**< Static. */
+    uint8_t right_mask;         /**< Right Mask. */
+    bcmolt_epon_oam_binary_field_select_type binselect;             /**< BinSelect. */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_binary_entry_mac value;                 /**< Value. */
+        } sa;
+
+        struct
+        {
+            bcmolt_epon_oam_binary_entry_mac value;                 /**< Value. */
+        } da;
+
+        struct
+        {
+            bcmolt_epon_oam_binary_entry_ssm_ip value;              /**< Value. */
+        } ssm_plus_ipda;
+
+        struct
+        {
+            bcmolt_epon_oam_binary_entry_programmable value;        /**< Value. */
+        } prog_field;
+
+        struct
+        {
+            bcmolt_epon_oam_binary_entry_cvid value;                /**< Value. */
+        } cvlan_vid;
+
+        struct
+        {
+            bcmolt_epon_oam_binary_entry_svlan_plus_cvlan value;    /**< Value. */
+        } svlan_vid_cvlan_vid;
+    } u;
+} bcmolt_epon_oam_rule_entry;
+
+/** Tek Attribute Value Rule. 
+ */
+typedef struct bcmolt_epon_oam_tek_attribute_value_rule
+{
+    bcmolt_epon_oam_rule_type leaf; /**< Leaf. */
+    union
+    {
+        struct
+        {
+            uint8_t priority;       /**< Priority. */
+        } header;
+
+        struct
+        {
+            bcmolt_epon_oam_rule_field_select field_select; /**< Field Select. */
+            uint8_t field_instance;                 /**< Field Instance. */
+            uint8_t msb_mask;                       /**< MSB Mask. */
+            uint8_t lsb_mask;                       /**< LSB Mask. */
+            bcmolt_epon_oam_rule_operator operator; /**< Operator. */
+            uint32_t match_value_count;             /**< Number of elements in match_value. */
+            uint8_t *match_value;                   /**< Match Value. */
+        } clause;
+
+        struct
+        {
+            bcmolt_epon_oam_rule_action result;     /**< Result. */
+            uint32_t parameter_count;               /**< Number of elements in parameter. */
+            uint8_t *parameter;                     /**< Parameter. */
+        } result;
+
+        struct
+        {
+            bcmolt_epon_oam_rule_entry value;       /**< Value. */
+        } entry;
+    } u;
+} bcmolt_epon_oam_tek_attribute_value_rule;
+
+/** Uni Shaper. 
+ */
+typedef struct bcmolt_epon_oam_uni_shaper
+{
+    uint32_t queue_bitmap;  /**< Queue Bitmap. */
+    uint32_t shape_rate;    /**< Units 2 kbps */
+    uint16_t burst_size;    /**< Unit 256 bytes */
+} bcmolt_epon_oam_uni_shaper;
+
+/** Detailed version number 
+ */
+typedef struct bcmolt_epon_oam_extended_version_number
+{
+    uint8_t major;  /**< Major version number */
+    uint8_t minor;  /**< Minor version number */
+    uint16_t patch; /**< Patch revision number */
+} bcmolt_epon_oam_extended_version_number;
+
+/** Extended Load Label. 
+ */
+typedef struct bcmolt_epon_oam_extended_load_label
+{
+    bcmolt_epon_oam_tek_maturity maturity;              /**< Maturity. */
+    bcmolt_epon_oam_extended_version_number version;    /**< Version. */
+} bcmolt_epon_oam_extended_load_label;
+
+/** File Info Firmware. 
+ */
+typedef struct bcmolt_epon_oam_file_info_firmware
+{
+    uint16_t legacy_version;    /**< Legacy Version. */
+    bcmolt_epon_oam_extended_load_label new_version;    /**< New Version. */
+    uint32_t stream;    /**< Stream. */
+    uint32_t revision;  /**< Revision. */
+    uint32_t crc;       /**< CRC. */
+    bcmolt_epon_oam_tek_firmware_timestamp timestamp;   /**< Timestamp. */
+} bcmolt_epon_oam_file_info_firmware;
+
+/** File Info Base. 
+ */
+typedef struct bcmolt_epon_oam_file_info_base
+{
+    bcmolt_epon_oam_file_type file_type;                /**< File Type. */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_file_info_firmware info;    /**< Info. */
+        } boot;
+
+        struct
+        {
+            bcmolt_epon_oam_file_info_firmware info;    /**< Info. */
+        } app_main;
+
+        struct
+        {
+            bcmolt_epon_oam_file_info_firmware info;    /**< Info. */
+        } app_backup;
+    } u;
+} bcmolt_epon_oam_file_info_base;
+
+/** OAM EPoC Bit Load. 
+ */
+typedef struct bcmolt_epon_oam_oam_epoc_bit_load
+{
+    uint8_t idx;    /**< Band index */
+    uint8_t value;  /**< Loading Value */
+} bcmolt_epon_oam_oam_epoc_bit_load;
+
+/** Oam Epoc Bit Loading. 
+ */
+typedef struct bcmolt_epon_oam_oam_epoc_bit_loading
+{
+    bcmolt_epon_oam_oam_epoc_bit_load load[32]; /**< Load. */
+} bcmolt_epon_oam_oam_epoc_bit_loading;
+
+/** Oam Epoc Stat. 
+ */
+typedef struct bcmolt_epon_oam_oam_epoc_stat
+{
+    uint16_t idx;           /**< Statistic index */
+    uint32_t value_count;   /**< Number of elements in value. */
+    uint8_t *value;         /**< Statistic value */
+} bcmolt_epon_oam_oam_epoc_stat;
+
+/** Defines a link/port priority 
+ */
+typedef struct bcmolt_epon_oam_tek_queue_config_v2priority
+{
+    uint8_t level;          /**< Priority level of this priority */
+    uint8_t weight;         /**< Percentage weight of this priority (0 for SP) */
+    uint8_t queue_count;    /**< Number of queues at this priority */
+    uint16_t *queue_sizes;  /**< Queue sizes */
+} bcmolt_epon_oam_tek_queue_config_v2priority;
+
+/** Tek Queue Config V2 Base. 
+ */
+typedef struct bcmolt_epon_oam_tek_queue_config_v2base
+{
+    bcmolt_epon_oam_tek_queue_config_v2subtype subtype;     /**< Type of data in this variable container */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_tek_report_mode report_config;  /**< Reporting mode for ONU */
+        } header;
+
+        struct
+        {
+            uint8_t priority_count; /**< Number of priorities for this link */
+            bcmolt_epon_oam_tek_queue_config_v2priority *priorities;    /**< Definition of priorities */
+        } link;
+
+        struct
+        {
+            uint8_t priority_count; /**< Number of priorities for this port */
+            bcmolt_epon_oam_tek_queue_config_v2priority *priorities;    /**< Definition of priorities */
+        } port;
+    } u;
+} bcmolt_epon_oam_tek_queue_config_v2base;
+
+/** Tek Sequence Number. 
+ */
+typedef struct bcmolt_epon_oam_tek_sequence_number
+{
+    bcmos_bool end_of_sequence; /**< End of sequence. */
+    uint16_t sequence_number;   /**< Sequence Number. */
+} bcmolt_epon_oam_tek_sequence_number;
+
+/** ONU Clock Transport Config. 
+ */
+typedef struct bcmolt_epon_oam_onu_clock_transport_config
+{
+    bcmolt_epon_oam_clock_transport_key key;    /**< Key. */
+    bcmos_bool re_init;             /**< Re- Init. */
+    bcmos_bool tod_enable;          /**< TOD Enable. */
+    bcmos_bool one_pps_enable;      /**< 1PPS Enable. */
+    int32_t one_pps_offset;         /**< 1PPS Offset. */
+    uint32_t round_trip_time;       /**< Round Trip Time. */
+    uint32_t one_pps_half_period;   /**< 1PPS Half Period. */
+} bcmolt_epon_oam_onu_clock_transport_config;
+
+/** OAM Mcast Domain Port Info. 
+ */
+typedef struct bcmolt_epon_oam_oam_mcast_domain_port_info
+{
+    uint8_t port;           /**< Port. */
+    uint8_t group_limit;    /**< Group Limit. */
+    uint8_t fc_limit;       /**< For later use */
+    uint8_t action;         /**< For later use */
+    uint16_t up_epon_vid;   /**< Up EPON Vid. */
+    uint16_t up_uni_vid;    /**< Up Uni Vid. */
+    uint8_t up_link;        /**< Not port relative */
+    uint8_t dnq;            /**< DnQ. */
+    uint8_t upq;            /**< UpQ. */
+} bcmolt_epon_oam_oam_mcast_domain_port_info;
+
+/** Oam Mcast Domain Info. 
+ */
+typedef struct bcmolt_epon_oam_oam_mcast_domain_info
+{
+    uint8_t id;         /**< ID. */
+    uint8_t dn_link;    /**< Dn Link. */
+    bcmolt_epon_oam_domain_option options;      /**< Options. */
+    bcmolt_epon_oam_forward_qualifier fwd_qual; /**< Fwd Qual. */
+    uint8_t reserved;       /**< Reserved. */
+    uint8_t action;         /**< Action. */
+    uint16_t dn_epon_vid;   /**< Dn EPON Vid. */
+    uint16_t dn_uni_vid;    /**< Dn Uni Vid. */
+    uint8_t num_port;       /**< Num Port. */
+    bcmolt_epon_oam_oam_mcast_domain_port_info *port_info;  /**< Port Info. */
+} bcmolt_epon_oam_oam_mcast_domain_info;
+
+/** Oam Mcast Domain Record. 
+ */
+typedef struct bcmolt_epon_oam_oam_mcast_domain_record
+{
+    uint8_t num_domains;    /**< Num Domains. */
+    bcmolt_epon_oam_oam_mcast_domain_info *domain;  /**< Domain. */
+} bcmolt_epon_oam_oam_mcast_domain_record;
+
+/** Tek Attribute Value. 
+ */
+typedef struct bcmolt_epon_oam_tek_attribute_value
+{
+    bcmolt_epon_oam_tek_leaf_attribute leaf;    /**< Leaf. */
+    uint8_t width;          /**< Width. */
+    union
+    {
+        struct
+        {
+            uint8_t idx;    /**< Index. */
+            bcmolt_epon_oam_lue_field_select_entry def; /**< Default. */
+        } lue_field_select;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } std_mac_frames_tx_ok;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } std_mac_single_coll_frames;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } std_mac_multiple_coll_frames;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } std_mac_frames_rx_ok;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } std_mac_fcs_err;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } std_mac_align_err;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } std_mac_octets_tx_ok;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } std_mac_late_collisions;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } std_mac_excessive_collisions;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } std_mac_octets_rx_ok;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } std_mac_mcast_frames_tx_ok;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } std_mac_bcast_frames_tx_ok;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } std_mac_mcast_frames_rx_ok;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } std_mac_bcast_frames_rx_ok;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } std_mac_in_range_len_err;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } std_mac_frame_too_long;
+
+        struct
+        {
+            uint8_t enabled;                /**< Enabled. */
+        } std_mac_enable_status;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } std_phy_symbol_err_during_carrier;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } std_mac_ctrl_pause_tx;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } std_mac_ctrl_pause_rx;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } std_oam_local_err_frame_secs_event;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } std_oam_emul_crc8err;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } std_mpcp_mac_ctrl_frames_tx;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } std_mpcp_mac_ctrl_frames_rx;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } std_mpcp_tx_reg_ack;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } std_mpcp_tx_reg_request;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } std_mpcp_tx_report;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } std_mpcp_rx_gate;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } std_mpcp_rx_register;
+
+        struct
+        {
+            uint16_t table_size;            /**< Table Size. */
+        } dyn_learn_tbl_size;
+
+        struct
+        {
+            uint16_t age_limit;             /**< Age Limit. */
+        } dyn_learn_age_limit;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } rx_unicast_frames;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } tx_unicast_frames;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } rx_frame_too_short;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } rx_frame64;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } rx_frame65to127;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } rx_frame128to255;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } rx_frame256to511;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } rx_frame512to1023;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } rx_frame1024to1518;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } rx_frame1519plus;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } tx_frame64;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } tx_frame65to127;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } tx_frame128to255;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } tx_frame256to511;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } tx_frame512to1023;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } tx_frame1024to1518;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } tx_frame1519plus;
+
+        struct
+        {
+            uint8_t delay_threshold;        /**< Delay Threshold. */
+        } tx_delay_threshold;
+
+        struct
+        {
+            uint64_t delay;                 /**< Delay. */
+        } tx_delay;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } tx_frames_dropped;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } tx_bytes_dropped;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } tx_bytes_delayed;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } tx_bytes_unused;
+
+        struct
+        {
+            uint8_t delay_threshold;        /**< Delay Threshold. */
+        } rx_delay_threshold;
+
+        struct
+        {
+            uint64_t delay;                 /**< Delay. */
+        } rx_delay;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } rx_frames_dropped;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } rx_bytes_dropped;
+
+        struct
+        {
+            uint64_t value;                 /**< Value. */
+        } rx_bytes_delayed;
+
+        struct
+        {
+            uint16_t statistic_id;          /**< Statistic ID. */
+            uint32_t rising_threshold;      /**< Rising Threshold. */
+            uint32_t falling_threshold;     /**< Falling Threshold. */
+        } port_stat_threshold;
+
+        struct
+        {
+            uint16_t statistic_id;          /**< Statistic ID. */
+            uint32_t rising_threshold;      /**< Rising Threshold. */
+            uint32_t falling_threshold;     /**< Falling Threshold. */
+        } link_stat_threshold;
+
+        struct
+        {
+            uint16_t time;                  /**< Time. */
+        } encrypt_key_expiry_time;
+
+        struct
+        {
+            uint8_t len_error_discard;      /**< Len Error Discard. */
+        } len_error_discard;
+
+        struct
+        {
+            uint32_t thresholds_count;      /**< Number of elements in thresholds. */
+            uint16_t *thresholds;           /**< Thresholds. */
+        } report_thresholds;
+
+        struct
+        {
+            uint16_t vlan_ether_type;       /**< Vlan EtherType. */
+            bcmos_bool use_for_upstream;    /**< Use For Upstream. */
+            bcmos_bool use_for_downstream;  /**< Use For Downstream. */
+        } vlan_ethertype;
+
+        struct
+        {
+            uint16_t current_caps;          /**< Current Caps. */
+            uint16_t physical_caps;         /**< Physical Caps. */
+        } port_capability;
+
+        struct
+        {
+            uint32_t rules_count;           /**< Number of elements in rules. */
+            bcmolt_epon_oam_tek_onu_rule *rules;        /**< Rules. */
+        } new_dn_filter_tbl;
+
+        struct
+        {
+            uint32_t rules_count;                       /**< Number of elements in rules. */
+            bcmolt_epon_oam_tek_onu_rule *rules;        /**< Rules. */
+        } new_up_filter_tbl;
+
+        struct
+        {
+            uint16_t destination_bitmap;                /**< Destination Bitmap. */
+        } arp_replicate_dest;
+
+        struct
+        {
+            uint16_t destination_bitmap;                /**< Destination Bitmap. */
+        } lacp_dest;
+
+        struct
+        {
+            uint8_t action_for_unman_grp;               /**< Action For Unman Grp. */
+            uint8_t vlans_count;                        /**< Vlans Count. */
+            bcmolt_epon_oam_tek_onu_igmp_vlan *vlans;   /**< Vlans. */
+        } onu_igmp_vlan;
+
+        struct
+        {
+            uint8_t learning_mode;                      /**< Learning Mode. */
+        } dyn_learning_mode;
+
+        struct
+        {
+            uint16_t limit;                     /**< Limit. */
+        } min_mac_limit;
+
+        struct
+        {
+            uint8_t limit;                      /**< Limit. */
+        } onu_aggregate_limit;
+
+        struct
+        {
+            uint32_t data_count;                /**< Number of elements in data. */
+            uint8_t *data;                      /**< Data. */
+        } nvs_scratchpad;
+
+        struct
+        {
+            uint8_t flood_unknown_opt;          /**< Flood Unknown Opt. */
+        } flood_unknown;
+
+        struct
+        {
+            uint8_t local_switch_opt;           /**< Local Switch Opt. */
+        } local_switching;
+
+        struct
+        {
+            uint8_t down_burst_toll_opt;        /**< Down Burst Toll Opt. */
+        } down_burst_toll;
+
+        struct
+        {
+            uint8_t downstream_fec;             /**< Downstream FEC. */
+            uint8_t upstream_fec;               /**< Upstream FEC. */
+        } fec_mode;
+
+        struct
+        {
+            uint64_t temperature;               /**< Temperature. */
+        } power_mon_temperature;
+
+        struct
+        {
+            uint64_t vcc;                       /**< VCC. */
+        } power_mon_vcc;
+
+        struct
+        {
+            uint64_t bias;                      /**< Bias. */
+        } power_mon_tx_bias;
+
+        struct
+        {
+            uint64_t power;                     /**< Power. */
+        } power_mon_tx_power;
+
+        struct
+        {
+            uint64_t power;                     /**< Power. */
+        } power_mon_rx_power;
+
+        struct
+        {
+            uint8_t network_epon_ports_count;   /**< Number of elements in Network EPON Ports */
+            uint8_t *network_epon_ports;        /**< Network EPON Ports. */
+        } network_pon_map;
+
+        struct
+        {
+            bcmolt_epon_oam_onu_psstate state;  /**< State. */
+        } psstate;
+
+        struct
+        {
+            uint8_t field_select;               /**< The field select to use for SLE (0 means disable) */
+        } sle_mode;
+
+        struct
+        {
+            bcmolt_epon_oam_tek_learn_table_mode learn_table_mode;  /**< Learn Table Mode. */
+        } learn_table_mode;
+
+        struct
+        {
+            bcmos_bool signal_detect;                                   /**< Whether or not signal is detected */
+        } transceiver_signal_detect;
+
+        struct
+        {
+            uint8_t user_port_to_network_port_count;                    /**< Number of elements in User Port To Network Port */
+            uint8_t *user_port_to_network_port;                         /**< Which network port each user port is currently connected to (0xFF for not connected) */
+        } crossbar_config;
+
+        struct
+        {
+            bcmos_bool burst_activity;                                  /**< Whether or not there is any burst activity (LoS) */
+        } transceiver_burst_activity;
+
+        struct
+        {
+            uint8_t network_port;                                       /**< Which network port the IPN should use for management */
+        } control_port;
+
+        struct
+        {
+            bcmolt_epon_oam_tek_vlan_destination_match_mode match_mode; /**< Match Mode. */
+            bcmolt_epon_oam_tek_vlan_destination_flags flags;           /**< Flags. */
+            uint8_t default_link_index;     /**< Default Link Index. */
+            uint8_t default_queue_index;    /**< Default Queue Index. */
+            uint8_t mappings_count;         /**< Number of elements in Mappings */
+            bcmolt_epon_oam_tek_vlan_destination_mapping *mappings; /**< Mappings. */
+        } vlan_destinations;
+
+        struct
+        {
+            bcmolt_epon_oam_tek_encryption_mode mode;               /**< Mode. */
+            bcmolt_epon_oam_tek_encryption_options options;         /**< Options. */
+        } encryption_mode;
+
+        struct
+        {
+            uint32_t stream;    /**< Stream. */
+            uint32_t revision;  /**< Revision. */
+        } internal_version;
+
+        struct
+        {
+            bcmolt_epon_oam_tek_firmware_timestamp timestamp;   /**< Timestamp. */
+        } firmware_timestamp;
+
+        struct
+        {
+            bcmolt_epon_oam_tek_attribute_value_rule rule;      /**< Rule. */
+        } onu_rule;
+
+        struct
+        {
+            bcmolt_epon_oam_flow_direction direction;           /**< Direction. */
+            uint8_t policer_id;                     /**< Policer Id. */
+            uint32_t burst_size;                    /**< Burst Size. */
+            uint32_t traffic_rate;                  /**< Traffic Rate. */
+        } policer;
+
+        struct
+        {
+            uint8_t number_of_shapers;              /**< Number of Shapers. */
+            bcmolt_epon_oam_uni_shaper *uni_shaper; /**< Uni Shaper. */
+        } uni_shaper;
+
+        struct
+        {
+            bcmolt_epon_oam_extended_load_label version;    /**< Maturity of frimware */
+        } ext_firmware_version;
+
+        struct
+        {
+            bcmolt_epon_oam_direction direction;            /**< Direction of key */
+            uint8_t key_index;  /**< Index of key */
+            uint8_t key_length; /**< Byte count of key data */
+            uint8_t *key_data;  /**< Key data */
+        } encryption_key;
+
+        struct
+        {
+            bcmolt_epon_oam_file_info_base file_info;   /**< File Info. */
+        } file_info;
+
+        struct
+        {
+            uint8_t system_rule_options;                /**< Options for system rules */
+        } system_rule_options;
+
+        struct
+        {
+            uint16_t mtu;                       /**< MTU. */
+        } mtu;
+
+        struct
+        {
+            bcmolt_epon_oam_nvs_state state;    /**< State. */
+        } nvs_state;
+
+        struct
+        {
+            uint8_t priority_count;             /**< Priority Count. */
+            uint8_t *priority_map;              /**< Priority Map. */
+        } queueprimap;
+
+        struct
+        {
+            bcmolt_epon_oam_oam_epoc_bit_loading value;             /**< Value. */
+        } epoc_down_bit_loading;
+
+        struct
+        {
+            bcmolt_epon_oam_oam_epoc_bit_loading value;             /**< Value. */
+        } epoc_up_bit_loading;
+
+        struct
+        {
+            bcmolt_epon_oam_oam_epoc_stat value;                    /**< Value. */
+        } epoc_sdm_phase;
+
+        struct
+        {
+            bcmolt_epon_oam_oam_epoc_stat value;                    /**< Value. */
+        } epoc_sdm_amplitude;
+
+        struct
+        {
+            bcmolt_epon_oam_oam_epoc_stat value;                    /**< Value. */
+        } epoc_sdm_quantizer;
+
+        struct
+        {
+            bcmolt_epon_oam_oam_epoc_stat value;                    /**< Value. */
+        } epoc_unused0;
+
+        struct
+        {
+            bcmolt_epon_oam_oam_epoc_stat value;                    /**< Value. */
+        } epoc_unused1;
+
+        struct
+        {
+            bcmolt_epon_oam_oam_epoc_stat value;                    /**< Value. */
+        } epoc_unused2;
+
+        struct
+        {
+            bcmolt_epon_oam_oam_epoc_stat value;                    /**< Value. */
+        } epoc_unused3;
+
+        struct
+        {
+            bcmolt_epon_oam_oam_epoc_stat value;                    /**< Value. */
+        } epoc_unused4;
+
+        struct
+        {
+            bcmolt_epon_oam_tek_queue_config_v2base queue_config;   /**< Queue Config. */
+        } queue_config_v2;
+
+        struct
+        {
+            bcmolt_epon_oam_tek_feature_set feature_set;            /**< Feature Set. */
+        } feature_set;
+
+        struct
+        {
+            bcmolt_epon_oam_std_phy_type value;                     /**< Value. */
+        } std_phy_type;
+
+        struct
+        {
+            bcmolt_epon_oam_tek_sequence_number value;              /**< Value. */
+        } sequence_number;
+
+        struct
+        {
+            uint32_t pulse_time;    /**< MPCP time to pulse. */
+        } mpcp_clock;
+
+        struct
+        {
+            bcmolt_epon_oam_onu_clock_transport_config value;   /**< Value. */
+        } mpcp_clock_compensate;
+
+        struct
+        {
+            uint8_t robustness_count;                       /**< Robustness Count. */
+            uint8_t lmq_count;                              /**< LMQ Count. */
+            bcmos_bool fast_leave_enable;                   /**< Fast Leave Enable. */
+            bcmolt_epon_oam_mcast_snoop_mode mode;          /**< Mode. */
+            bcmolt_epon_oam_ipmc_global_options options;    /**< Options. */
+        } mcast_global_config;
+
+        struct
+        {
+            bcmolt_epon_oam_oam_mcast_domain_record value;  /**< Value. */
+        } mcast_domain_config;
+
+        struct
+        {
+            uint8_t time;   /**< The amount of time the ONU should wait after loss of signal or loss of gate to reset the links in 10 ms increments. */
+            bcmolt_epon_oam_tek_holdover_flags flags;   /**< ONU holdover configuration flags. */
+        } onu_holdover;
+
+        struct
+        {
+            bcmolt_epon_oam_tek_alarm_code alarm_code;  /**< Alarm Code. */
+            uint32_t raise_threshold;                   /**< Raise Threshold. */
+            uint32_t clear_threshold;                   /**< Clear Threshold. */
+        } alarm_threshold;
+
+        struct
+        {
+            uint8_t count_of_failsafe_mech;             /**< Count Of Failsafe Mech. */
+            bcmos_bool failsafe_state;                  /**< Failsafe State. */
+        } failsafe;
+
+        struct
+        {
+            uint16_t statistic_id;                      /**< Statistic ID. */
+            uint16_t interval;      /**< Interval. */
+        } port_stats_threshold_interval;
+
+        struct
+        {
+            uint16_t statistic_id;  /**< Statistic ID. */
+            uint16_t interval;      /**< Interval. */
+        } link_stats_threshold_interval;
+
+        struct
+        {
+            bcmolt_epon_oam_mac_duplex_status status;           /**< Status. */
+        } std_mac_duplex_status;
+
+        struct
+        {
+            bcmolt_epon_oam_autonegotiate_admin_state state;    /**< State. */
+        } std_auto_neg_admin_state;
+
+        struct
+        {
+            bcmolt_epon_oam_mau_media_available status;         /**< Status. */
+        } std_mau_media_avail;
+
+        struct
+        {
+            bcmolt_epon_oam_mdi_mode mode;                      /**< Mode. */
+        } mdi_crossover;
+
+        struct
+        {
+            bcmos_mac_address address;  /**< Address. */
+        } std_mac_addr;
+    } u;
+} bcmolt_epon_oam_tek_attribute_value;
+
+/** Tek ONU Queue Config. 
+ */
+typedef struct bcmolt_epon_oam_tek_onu_queue_config
+{
+    uint8_t queue_sizes_count;  /**< Queue Sizes Count. */
+    uint8_t *queue_sizes;       /**< Queue Sizes. */
+} bcmolt_epon_oam_tek_onu_queue_config;
+
+/** Tek IGMP Snooping Port Config. 
+ */
+typedef struct bcmolt_epon_oam_tek_igmp_snooping_port_config
+{
+    uint8_t number_of_igmp_groups;              /**< Number Of IGMP Groups. */
+    uint8_t relative_queue_for_classification;  /**< Relative Queue For Classification. */
+} bcmolt_epon_oam_tek_igmp_snooping_port_config;
+
+/** Tek ONU IGMP Group No VID. 
+ */
+typedef struct bcmolt_epon_oam_tek_onu_igmp_group_no_vid
+{
+    bcmos_ipv4_address group;   /**< Group. */
+    uint8_t ports;              /**< Ports. */
+} bcmolt_epon_oam_tek_onu_igmp_group_no_vid;
+
+/** Tek Action Value Base. 
+ */
+typedef struct bcmolt_epon_oam_tek_action_value_base
+{
+    bcmolt_epon_oam_tek_leaf_action leaf;   /**< Leaf. */
+    uint8_t width;                  /**< Width. */
+    union
+    {
+        struct
+        {
+            bcmos_mac_address mac;  /**< MAC. */
+        } add_static_entry;
+
+        struct
+        {
+            bcmos_mac_address mac;  /**< MAC. */
+        } del_static_entry;
+
+        struct
+        {
+            uint32_t rules_count;   /**< Number of elements in rules. */
+            bcmolt_epon_oam_tek_onu_rule *rules;            /**< Rules. */
+        } add_rule;
+
+        struct
+        {
+            bcmolt_epon_oam_tek_onu_rule rules;             /**< Rules. */
+        } new_add_rule;
+
+        struct
+        {
+            uint32_t rules_count;                           /**< Number of elements in rules. */
+            bcmolt_epon_oam_tek_onu_rule *rules;            /**< Rules. */
+        } new_del_rule;
+
+        struct
+        {
+            uint32_t rules_count;                           /**< Number of elements in rules. */
+            bcmolt_epon_oam_tek_onu_rule *rules;            /**< Rules. */
+        } delete_rule;
+
+        struct
+        {
+            uint32_t gpio_config;                           /**< GPIO Config. */
+        } set_gpio_config;
+
+        struct
+        {
+            uint8_t links_count;                            /**< Links Count. */
+            bcmolt_epon_oam_tek_onu_queue_config *links;    /**< Links. */
+            uint8_t ports_count;    /**< Ports Count. */
+            bcmolt_epon_oam_tek_onu_queue_config *ports;    /**< Ports. */
+            bcmolt_epon_oam_tek_onu_queue_config multicast; /**< Multicast. */
+        } set_queue_config;
+
+        struct
+        {
+            uint8_t robustness_count;                       /**< Robustness Count. */
+            uint8_t last_member_query_count;                /**< Last Member Query Count. */
+            uint8_t ports_count;    /**< Ports Count. */
+            bcmolt_epon_oam_tek_igmp_snooping_port_config *ports;       /**< Ports. */
+            bcmolt_epon_oam_tek_igmp_forwarding_qualifer grp_forward;   /**< Grp Forward. */
+            bcmolt_epon_oam_tek_igmp_snooping_options options;          /**< Options. */
+        } set_igmp_config;
+
+        struct
+        {
+            uint8_t groups_count;   /**< Groups Count. */
+            bcmolt_epon_oam_tek_onu_igmp_group_no_vid *groups;  /**< Groups. */
+        } add_igmp_group;
+
+        struct
+        {
+            uint8_t max_oam_rate;                       /**< Max OAM Rate. */
+            uint8_t min_oam_rate;                       /**< Min OAM Rate. */
+        } set_oam_rate;
+
+        struct
+        {
+            uint16_t off_time;                          /**< Off Time. */
+        } bc_laser_power_off;
+
+        struct
+        {
+            uint16_t time;                              /**< Time. */
+            bcmolt_epon_oam_sleep_options options;      /**< Options. */
+        } sleep;
+
+        struct
+        {
+            bcmolt_epon_oam_flow_direction direction;   /**< Direction. */
+            uint8_t policer_id;     /**< Policer Id. */
+            uint32_t burst_size;    /**< Burst Size. */
+            uint32_t traffic_rate;  /**< Traffic Rate. */
+        } enable_policer;
+
+        struct
+        {
+            bcmolt_epon_oam_flow_direction direction;   /**< Direction. */
+            uint8_t policer_id; /**< Policer Id. */
+        } disable_policer;
+
+        struct
+        {
+            bcmolt_epon_oam_epoc_stat_gather_modes mode;        /**< Mode. */
+            bcmolt_epon_oam_epoc_sdm250stat_index stat_index;   /**< Stat Index. */
+        } get_epoc_sdm_stats;
+
+        struct
+        {
+            bcmolt_epon_oam_epoc_stat_gather_modes mode;        /**< Mode. */
+            bcmolt_epon_oam_epoc_cmc_stat_index stat_index;     /**< Stat Index. */
+        } get_epoc_cmc_stats;
+
+        struct
+        {
+            bcmolt_epon_oam_epoc_stat_gather_modes mode;        /**< Mode. */
+            bcmolt_epon_oam_epoc_cnu_stat_index stat_index;     /**< Stat Index. */
+        } get_epoc_cnu_stats;
+
+        struct
+        {
+            uint8_t port_count;         /**< Number of UNI ports. */
+            uint8_t *queue_per_port;    /**< Which logical queue number to use, indexed by UNI port. */
+        } set_dn_bcast_queue;
+    } u;
+} bcmolt_epon_oam_tek_action_value_base;
+
+/** Tek Var Container. 
+ */
+typedef struct bcmolt_epon_oam_tek_var_container
+{
+    bcmolt_epon_oam_tek_branch branch;  /**< Branch. */
+    union
+    {
+        struct
+        {
+            uint16_t leaf;              /**< Leaf. */
+            uint8_t width;              /**< Width. */
+        } def;
+
+        struct
+        {
+            uint32_t unknown_count;     /**< Number of elements in unknown. */
+            uint8_t *unknown;           /**< Unknown. */
+        } end;
+
+        struct
+        {
+            bcmolt_epon_oam_tek_object_context object_context;  /**< Object Context. */
+        } name_binding;
+
+        struct
+        {
+            bcmolt_epon_oam_tek_attribute_value attribute;      /**< Attribute. */
+        } attribute;
+
+        struct
+        {
+            bcmolt_epon_oam_tek_action_value_base action;       /**< Action. */
+        } action;
+    } u;
+} bcmolt_epon_oam_tek_var_container;
+
+/** Tek Set Resp Action Value Base. 
+ */
+typedef struct bcmolt_epon_oam_tek_set_resp_action_value_base
+{
+    bcmolt_epon_oam_tek_leaf_action leaf;   /**< Leaf. */
+    uint8_t width;                  /**< Width. */
+    union
+    {
+        struct
+        {
+            uint32_t unknown_count; /**< Number of elements in unknown. */
+            uint8_t *unknown;       /**< Unknown. */
+        } def;
+
+        struct
+        {
+            uint8_t links_count;    /**< Links Count. */
+            bcmolt_epon_oam_tek_onu_queue_config *links;    /**< Links. */
+            uint8_t ports_count;    /**< Ports Count. */
+            bcmolt_epon_oam_tek_onu_queue_config *ports;    /**< Ports. */
+            bcmolt_epon_oam_tek_onu_queue_config multicast; /**< Multicast. */
+        } get_queue_config;
+
+        struct
+        {
+            uint8_t robustness_count;                       /**< Robustness Count. */
+            uint8_t last_member_query_count;                /**< Last Member Query Count. */
+            uint8_t ports_count;    /**< Ports Count. */
+            bcmolt_epon_oam_tek_igmp_snooping_port_config *ports;       /**< Ports. */
+            bcmolt_epon_oam_tek_igmp_forwarding_qualifer grp_forward;   /**< Grp Forward. */
+            bcmolt_epon_oam_tek_igmp_snooping_options options;          /**< Options. */
+        } get_igmp_config;
+
+        struct
+        {
+            uint8_t groups_count;   /**< Groups Count. */
+            bcmolt_epon_oam_tek_onu_igmp_group_no_vid *groups;  /**< Groups. */
+        } get_igmp_group_info;
+
+        struct
+        {
+            uint8_t max_oam_rate;                               /**< Max OAM Rate. */
+            uint8_t min_oam_rate;                               /**< Min OAM Rate. */
+        } get_oam_rate;
+
+        struct
+        {
+            uint16_t boot_version;                              /**< Boot Version. */
+            uint32_t boot_crc;                                  /**< Boot CRC. */
+            uint16_t personality_version;                       /**< Personality Version. */
+            uint32_t personality_crc;                           /**< Personality CRC. */
+            uint16_t app0version;                               /**< APP0 Version. */
+            uint32_t app0crc;                                   /**< APP0 CRC. */
+            uint16_t app1version;                               /**< APP1 Version. */
+            uint32_t app1crc;                                   /**< APP1 CRC. */
+            uint16_t diagnostic_version;                        /**< Diagnostic Version. */
+            uint32_t diagnostic_crc;                            /**< Diagnostic CRC. */
+        } get_load_info;
+
+        struct
+        {
+            bcmolt_epon_oam_epoc_sdm250stat_index stat_index;   /**< Stat Index. */
+            uint8_t counter_value_count;                        /**< Number of elements in Counter Value */
+            uint8_t *counter_value;         /**< Length of zero if not applicable */
+            uint8_t rate_value_count;       /**< Number of elements in Rate Value */
+            uint8_t *rate_value;            /**< Length of zero if not applicable */
+            uint8_t rate_interval_count;    /**< Number of elements in Rate Interval */
+            uint8_t *rate_interval;         /**< Length of zero if not applicable */
+        } get_epoc_sdm_stats;
+
+        struct
+        {
+            bcmolt_epon_oam_epoc_cmc_stat_index stat_index; /**< Stat Index. */
+            uint8_t counter_value_count;                    /**< Number of elements in Counter Value */
+            uint8_t *counter_value;         /**< Length of zero if not applicable */
+            uint8_t rate_value_count;       /**< Number of elements in Rate Value */
+            uint8_t *rate_value;            /**< Length of zero if not applicable */
+            uint8_t rate_interval_count;    /**< Number of elements in Rate Interval */
+            uint8_t *rate_interval;         /**< Length of zero if not applicable */
+        } get_epoc_cmc_stats;
+
+        struct
+        {
+            bcmolt_epon_oam_epoc_cnu_stat_index stat_index; /**< Number of elements in Counter Value */
+            uint8_t counter_value_count;                    /**< Number of elements in Counter Value */
+            uint8_t *counter_value;         /**< Length of zero if not applicable */
+            uint8_t rate_value_count;       /**< Number of elements in Rate Value */
+            uint8_t *rate_value;            /**< Length of zero if not applicable */
+            uint8_t rate_interval_count;    /**< Number of elements in Rate Interval */
+            uint8_t *rate_interval;         /**< Length of zero if not applicable */
+        } get_epoc_cnu_stats;
+
+        struct
+        {
+            uint8_t port_count;             /**< Number of UNI ports. */
+            uint8_t *queue_per_port;        /**< Which logical queue number to use, indexed by UNI port. */
+        } get_dn_bcast_queue;
+    } u;
+} bcmolt_epon_oam_tek_set_resp_action_value_base;
+
+/** Tek Set Resp Var Container Base. 
+ */
+typedef struct bcmolt_epon_oam_tek_set_resp_var_container_base
+{
+    bcmolt_epon_oam_tek_branch branch;  /**< Branch. */
+    union
+    {
+        struct
+        {
+            uint16_t leaf;              /**< Leaf. */
+            uint8_t width;              /**< Width. */
+        } def;
+
+        struct
+        {
+            uint32_t unknown_count;     /**< Number of elements in unknown. */
+            uint8_t *unknown;           /**< Unknown. */
+        } end;
+
+        struct
+        {
+            bcmolt_epon_oam_tek_object_context object_context;      /**< Object Context. */
+        } name_binding;
+
+        struct
+        {
+            bcmolt_epon_oam_tek_attribute_value attribute;          /**< Attribute. */
+        } attribute;
+
+        struct
+        {
+            bcmolt_epon_oam_tek_set_resp_action_value_base action;  /**< Action. */
+        } action;
+    } u;
+} bcmolt_epon_oam_tek_set_resp_var_container_base;
+
+/** Tek Vendor Extended. 
+ */
+typedef struct bcmolt_epon_oam_tek_vendor_extended
+{
+    bcmolt_epon_oam_tek_opcode op;                      /**< Op. */
+    union
+    {
+        struct
+        {
+            uint16_t firmware_version;                  /**< Firmware Version. */
+            uint8_t oui[3];                             /**< OUI. */
+            uint16_t product_id;                        /**< Product ID. */
+            uint16_t version;                           /**< Version. */
+            uint8_t extended_id[64];                    /**< Extended ID. */
+            bcmos_mac_address base_mac;                 /**< Base MAC. */
+            uint8_t max_links;                          /**< Max Links. */
+            uint8_t num_ports;                          /**< Num Ports. */
+            uint8_t num_assignable_upstream_queues;     /**< Num Assignable Upstream Queues. */
+            uint8_t max_queues_per_link_upstream;       /**< Max Queues Per Link Upstream. */
+            uint8_t queue_increment_upstream;           /**< Queue Increment Upstream. */
+            uint8_t num_assignable_downstream_queues;   /**< Num Assignable Downstream Queues. */
+            uint8_t max_queues_per_link_downstream;     /**< Max Queues Per Link Downstream. */
+            uint8_t queue_increment_downstream;         /**< Queue Increment Downstream. */
+            uint16_t upstream_buffer_available;         /**< Upstream Buffer Available. */
+            uint16_t downstream_buffer_available;       /**< Downstream Buffer Available. */
+            uint16_t jedec_manufacturer_id;             /**< JEDEC Manufacturer ID. */
+            uint16_t chip_id;       /**< Chip ID. */
+            uint32_t chip_version;  /**< Chip Version. */
+        } info;
+
+        struct
+        {
+            uint32_t vars_count;    /**< Number of elements in vars. */
+            bcmolt_epon_oam_tek_var_descriptor *vars;               /**< Vars. */
+        } get_request;
+
+        struct
+        {
+            uint32_t vars_count;                                    /**< Number of elements in vars. */
+            bcmolt_epon_oam_tek_var_container *vars;                /**< Vars. */
+        } get_response;
+
+        struct
+        {
+            uint32_t vars_count;                                    /**< Number of elements in vars. */
+            bcmolt_epon_oam_tek_var_container *vars;                /**< Vars. */
+        } set_request;
+
+        struct
+        {
+            uint32_t vars_count;                                    /**< Number of elements in vars. */
+            bcmolt_epon_oam_tek_set_resp_var_container_base *vars;  /**< Vars. */
+        } set_response;
+
+        struct
+        {
+            bcmolt_epon_oam_ieee_register_flags flags;              /**< Flags. */
+            uint16_t multicast_llid;                        /**< Multicast LLID. */
+            uint16_t unicast_llid;                          /**< Unicast LLID. */
+        } multicast_register;
+
+        struct
+        {
+            bcmolt_epon_oam_ieee_register_ack_flags flags;  /**< Flags. */
+            uint16_t multicast_llid;                        /**< Multicast LLID. */
+            uint16_t unicast_llid;  /**< Unicast LLID. */
+        } multicast_register_response;
+
+        struct
+        {
+            uint8_t key_number;     /**< Key Number. */
+            uint8_t key_length;     /**< Key Length. */
+            uint8_t *key_data;      /**< Key Data. */
+        } key_exchange;
+
+        struct
+        {
+            uint16_t block;         /**< Block. */
+            bcmolt_epon_oam_tek_file_transfer_error error;  /**< Error. */
+        } file_ack;
+
+        struct
+        {
+            uint16_t block;     /**< Block. */
+            uint16_t length;    /**< Length. */
+            uint8_t *data;      /**< Data. */
+        } file_data;
+
+        struct
+        {
+            bcmolt_epon_oam_tek_file_type file_type;                /**< File Type. */
+        } file_read_request;
+
+        struct
+        {
+            bcmolt_epon_oam_tek_file_type file_type;                /**< File Type. */
+        } file_write_request;
+
+        struct
+        {
+            uint32_t variable_containers_count;                     /**< Number of elements in variable_containers. */
+            bcmolt_epon_oam_tek_var_container *variable_containers; /**< Variable Containers. */
+        } unacked_action;
+    } u;
+} bcmolt_epon_oam_tek_vendor_extended;
+
+/** PMC File Base. 
+ */
+typedef struct bcmolt_epon_oam_pmc_file_base
+{
+    bcmolt_epon_oam_pmc_file_op file_op;                /**< File Op. */
+    union
+    {
+        struct
+        {
+            uint32_t file;                              /**< File. */
+            uint32_t not_file;                          /**< Not File. */
+            uint16_t crc;                               /**< Crc. */
+        } head;
+
+        struct
+        {
+            uint16_t length;                            /**< Length. */
+            uint16_t block;                             /**< Block. */
+            uint32_t data_count;                        /**< Number of elements in data. */
+            uint8_t *data;                              /**< Data. */
+        } data;
+
+        struct
+        {
+            uint16_t idx;                               /**< Index. */
+        } idx;
+
+        struct
+        {
+            bcmolt_epon_oam_pmc_file_op frame_type_ack; /**< Frame Type Ack. */
+            bcmolt_epon_oam_pmc_error_code error_code;  /**< Error Code. */
+            uint16_t block_rx;  /**< Block Rx. */
+        } ack;
+    } u;
+} bcmolt_epon_oam_pmc_file_base;
+
+/** PMC Vendor Extended Base. 
+ */
+typedef struct bcmolt_epon_oam_pmc_vendor_extended_base
+{
+    bcmolt_epon_oam_pmc_op_code op; /**< Op. */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_pmc_file_base file_info;    /**< File Info. */
+        } firmware_update;
+    } u;
+} bcmolt_epon_oam_pmc_vendor_extended_base;
+
+/** Vendor Extended OAM Base. 
+ */
+typedef struct bcmolt_epon_oam_vendor_extended_oam_base
+{
+    bcmolt_epon_oam_well_known_oui oui;                     /**< OUI. */
+    union
+    {
+        struct
+        {
+            uint32_t unknown_count;                         /**< Number of elements in unknown. */
+            uint8_t *unknown;                               /**< Unknown. */
+        } def;
+
+        struct
+        {
+            bcmolt_epon_oam_ctc_vendor_extended_base value; /**< Value. */
+        } ctc;
+
+        struct
+        {
+            bcmolt_epon_oam_tek_vendor_extended value;      /**< Value. */
+        } tek;
+
+        struct
+        {
+            bcmolt_epon_oam_pmc_vendor_extended_base value; /**< Value. */
+        } pmc;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_vendor_extended_base value;    /**< Value. */
+        } dpoe;
+
+        struct
+        {
+            bcmolt_epon_oam_ctc_vendor_extended_base value;     /**< Value. */
+        } kt;
+
+        struct
+        {
+            bcmolt_epon_oam_dasan_config_base config;           /**< Config. */
+        } dasan;
+
+        struct
+        {
+            uint8_t version;                        /**< Version number */
+            uint16_t sequence_number;               /**< Sequence number of the frame within the context of the OAM message */
+            uint16_t num_total_expected_packets;    /**< The number of packets required for the OAM message to be complete */
+            bcmolt_epon_oam_brcm_oam_pdu_base pdu;  /**< The BRCM OAM PDU data */
+        } brcm;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_vendor_extended_base value;    /**< Value. */
+        } siepon_a;
+    } u;
+} bcmolt_epon_oam_vendor_extended_oam_base;
+
+/** Root structure for OAM messages 
+ */
+typedef struct bcmolt_epon_oam_oam_pdu_content
+{
+    bcmolt_epon_oam_oam_opcode code;                            /**< Code. */
+    union
+    {
+        struct
+        {
+            uint32_t tlvs_count;                                /**< Number of elements in tlvs. */
+            bcmolt_epon_oam_info_tlv_base *tlvs;                /**< TLVs. */
+        } info;
+
+        struct
+        {
+            uint16_t sequence_number;                           /**< Sequence Number. */
+            uint32_t tlvs_count;                                /**< Number of elements in tlvs. */
+            bcmolt_epon_oam_link_event_tlv_base *tlvs;          /**< TLVs. */
+        } event_notification;
+
+        struct
+        {
+            uint32_t vars_count;                                /**< Number of elements in vars. */
+            bcmolt_epon_oam_var_descriptor_base *vars;          /**< Vars. */
+        } var_request;
+
+        struct
+        {
+            uint32_t vars_count;                                /**< Number of elements in vars. */
+            bcmolt_epon_oam_var_container_base *vars;           /**< Vars. */
+        } var_response;
+
+        struct
+        {
+            bcmolt_epon_oam_remote_loopback_command command;    /**< Command. */
+        } loopback_control;
+
+        struct
+        {
+            bcmolt_epon_oam_vendor_extended_oam_base value;     /**< Value. */
+        } organization_specific;
+    } u;
+} bcmolt_epon_oam_oam_pdu_content;
+
+/** Master End Point. 
+ */
+typedef struct bcmolt_epon_oam_master_end_point
+{
+    bcmolt_epon_oam_master_end_point_type type; /**< Type. */
+    uint8_t id; /**< ID. */
+} bcmolt_epon_oam_master_end_point;
+
+/** ONU Master OAM Content. 
+ */
+typedef struct bcmolt_epon_oam_onu_master_oam_content
+{
+    uint16_t link;  /**< Link. */
+    bcmolt_epon_oam_oam_pdu_content oam_content;    /**< OAM Content. */
+} bcmolt_epon_oam_onu_master_oam_content;
+
+/** OAM Reg Info Vendor OUI. 
+ */
+typedef struct bcmolt_epon_oam_oam_reg_info_vendor_oui
+{
+    uint24_t oui;   /**< Vendor OUI to register */
+    bcmolt_epon_oam_oam_registration_action action; /**< Registration action to perform for vendor OUI (MUST be Register or Unregister). */
+    uint16_t length_reserved;                       /**< Number of bytes to follow */
+} bcmolt_epon_oam_oam_reg_info_vendor_oui;
+
+/** OAM Reg Info Vendor. 
+ */
+typedef struct bcmolt_epon_oam_oam_reg_info_vendor
+{
+    bcmolt_epon_oam_oam_registration_action action;                     /**< Registration action to perform for vendor specific Info TLVs. */
+    union
+    {
+        struct
+        {
+            uint8_t vendor_oui_reg_count;                               /**< Number of vendor OUI registrations */
+            bcmolt_epon_oam_oam_reg_info_vendor_oui *vendor_oui_reg;    /**< Vendor OUI registrations */
+        } cont;
+    } u;
+} bcmolt_epon_oam_oam_reg_info_vendor;
+
+/** OAM Reg Info TLV. 
+ */
+typedef struct bcmolt_epon_oam_oam_reg_info_tlv
+{
+    bcmolt_epon_oam_oam_reg_info_type type;                 /**< Info TLV type to register */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_oam_registration_action action; /**< Registration action to perform for Info TLV type. */
+            uint16_t length_reserved;                       /**< Number of bytes to follow */
+        } def;
+
+        struct
+        {
+            bcmolt_epon_oam_oam_reg_info_vendor value;      /**< Value. */
+        } vendor;
+    } u;
+} bcmolt_epon_oam_oam_reg_info_tlv;
+
+/** OAM Reg Info Cont. 
+ */
+typedef struct bcmolt_epon_oam_oam_reg_info_cont
+{
+    uint8_t info_reg_count;                     /**< Number of Info TLV type registrations (maximum one registration per type). */
+    bcmolt_epon_oam_oam_reg_info_tlv *info_reg; /**< Info TLV type registrations */
+} bcmolt_epon_oam_oam_reg_info_cont;
+
+/** OAM Reg Info. 
+ */
+typedef struct bcmolt_epon_oam_oam_reg_info
+{
+    bcmolt_epon_oam_oam_registration_action action;     /**< Registration action to perform for info frames */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_oam_reg_info_cont value;    /**< Value. */
+        } cont;
+
+        struct
+        {
+            bcmolt_epon_oam_oam_reg_info_cont value;    /**< Value. */
+        } register_and_continue;
+
+        struct
+        {
+            bcmolt_epon_oam_oam_reg_info_cont value;    /**< Value. */
+        } unregister_and_continue;
+    } u;
+} bcmolt_epon_oam_oam_reg_info;
+
+/** OAM Reg CTC Var Desc. 
+ */
+typedef struct bcmolt_epon_oam_oam_reg_ctc_var_desc
+{
+    bcmolt_epon_oam_ctc_branch branch;                      /**< Branch. */
+    union
+    {
+        struct
+        {
+            uint16_t leaf;                                  /**< Leaf. */
+        } def;
+
+        struct
+        {
+            bcmolt_epon_oam_var_leaf_attribute leaf;        /**< Leaf. */
+        } attribute;
+
+        struct
+        {
+            bcmolt_epon_oam_var_leaf_action leaf;           /**< Leaf. */
+        } action;
+
+        struct
+        {
+            bcmolt_epon_oam_ctc_leaf_ext_attribute leaf;    /**< Leaf. */
+        } ext_attribute;
+
+        struct
+        {
+            bcmolt_epon_oam_ctc_leaf_ext_action leaf;       /**< Leaf. */
+        } ext_action;
+
+        struct
+        {
+            bcmolt_epon_oam_ktleaf_attribute leaf;          /**< Leaf. */
+        } ktattribute;
+
+        struct
+        {
+            bcmolt_epon_oam_ktleaf_action leaf;             /**< Leaf. */
+        } ktaction;
+    } u;
+} bcmolt_epon_oam_oam_reg_ctc_var_desc;
+
+/** OAM Reg CTC Variable. 
+ */
+typedef struct bcmolt_epon_oam_oam_reg_ctc_variable
+{
+    bcmolt_epon_oam_oam_reg_ctc_var_desc descriptor;    /**< CTC variable descriptor */
+    bcmolt_epon_oam_oam_registration_action action;     /**< Registration action to perform for variable descriptor (MUST be Register or Unregister). */
+    uint16_t length_reserved;   /**< Number of bytes to follow */
+} bcmolt_epon_oam_oam_reg_ctc_variable;
+
+/** OAM Reg CTC Variable List. 
+ */
+typedef struct bcmolt_epon_oam_oam_reg_ctc_variable_list
+{
+    uint8_t variable_count; /**< Number of CTC variable registrations */
+    bcmolt_epon_oam_oam_reg_ctc_variable *variables;    /**< CTC variable registrations */
+} bcmolt_epon_oam_oam_reg_ctc_variable_list;
+
+/** OAM Reg CTC Op Variable. 
+ */
+typedef struct bcmolt_epon_oam_oam_reg_ctc_op_variable
+{
+    bcmolt_epon_oam_oam_registration_action action;             /**< Registration action to perform for CTC variable requests. */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_oam_reg_ctc_variable_list value;    /**< Value. */
+        } cont;
+
+        struct
+        {
+            bcmolt_epon_oam_oam_reg_ctc_variable_list value;    /**< Value. */
+        } register_and_continue;
+
+        struct
+        {
+            bcmolt_epon_oam_oam_reg_ctc_variable_list value;    /**< Value. */
+        } unregister_and_continue;
+    } u;
+} bcmolt_epon_oam_oam_reg_ctc_op_variable;
+
+/** OAM Reg CTC Opcode. 
+ */
+typedef struct bcmolt_epon_oam_oam_reg_ctc_opcode
+{
+    bcmolt_epon_oam_ctc_opcode opcode;                      /**< Opcode to register */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_oam_registration_action action; /**< Registration action to perform for CTC opcode */
+            uint16_t length_reserved;                       /**< Number of bytes to follow */
+        } def;
+
+        struct
+        {
+            bcmolt_epon_oam_oam_reg_ctc_op_variable value;  /**< Value. */
+        } get_request;
+
+        struct
+        {
+            bcmolt_epon_oam_oam_reg_ctc_op_variable value;  /**< Value. */
+        } set_request;
+    } u;
+} bcmolt_epon_oam_oam_reg_ctc_opcode;
+
+/** OAM Reg CTC Cont. 
+ */
+typedef struct bcmolt_epon_oam_oam_reg_ctc_cont
+{
+    uint8_t opcode_count;   /**< Number of CTC opcode registrations */
+    bcmolt_epon_oam_oam_reg_ctc_opcode *opcodes;    /**< CTC opcode registrations */
+} bcmolt_epon_oam_oam_reg_ctc_cont;
+
+/** OAM Reg CTC. 
+ */
+typedef struct bcmolt_epon_oam_oam_reg_ctc
+{
+    bcmolt_epon_oam_oam_registration_action action; /**< Registration action to perform for CTC OUI */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_oam_reg_ctc_cont value; /**< Value. */
+        } cont;
+
+        struct
+        {
+            bcmolt_epon_oam_oam_reg_ctc_cont value; /**< Value. */
+        } register_and_continue;
+
+        struct
+        {
+            bcmolt_epon_oam_oam_reg_ctc_cont value; /**< Value. */
+        } unregister_and_continue;
+    } u;
+} bcmolt_epon_oam_oam_reg_ctc;
+
+/** OAM Reg Tek Var Desc. 
+ */
+typedef struct bcmolt_epon_oam_oam_reg_tek_var_desc
+{
+    bcmolt_epon_oam_tek_branch branch;                  /**< Branch. */
+    union
+    {
+        struct
+        {
+            uint16_t leaf;                              /**< Leaf. */
+        } def;
+
+        struct
+        {
+            bcmolt_epon_oam_tek_leaf_attribute leaf;    /**< Leaf. */
+        } attribute;
+
+        struct
+        {
+            bcmolt_epon_oam_tek_leaf_action leaf;       /**< Leaf. */
+        } action;
+    } u;
+} bcmolt_epon_oam_oam_reg_tek_var_desc;
+
+/** OAM Reg Tek Variable. 
+ */
+typedef struct bcmolt_epon_oam_oam_reg_tek_variable
+{
+    bcmolt_epon_oam_oam_reg_tek_var_desc descriptor;    /**< Tek variable descriptor */
+    bcmolt_epon_oam_oam_registration_action action;     /**< Registration action to perform for variable descriptor (MUST be Register or Unregister). */
+    uint16_t length_reserved;   /**< Number of bytes to follow */
+} bcmolt_epon_oam_oam_reg_tek_variable;
+
+/** OAM Reg Tek Variable List. 
+ */
+typedef struct bcmolt_epon_oam_oam_reg_tek_variable_list
+{
+    uint8_t variable_count; /**< Number of Tek variable registrations */
+    bcmolt_epon_oam_oam_reg_tek_variable *variables;    /**< Tek variable registrations */
+} bcmolt_epon_oam_oam_reg_tek_variable_list;
+
+/** OAM Reg Tek Op Variable. 
+ */
+typedef struct bcmolt_epon_oam_oam_reg_tek_op_variable
+{
+    bcmolt_epon_oam_oam_registration_action action;             /**< Registration action to perform for Tek variable requests. */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_oam_reg_tek_variable_list value;    /**< Value. */
+        } cont;
+
+        struct
+        {
+            bcmolt_epon_oam_oam_reg_tek_variable_list value;    /**< Value. */
+        } register_and_continue;
+
+        struct
+        {
+            bcmolt_epon_oam_oam_reg_tek_variable_list value;    /**< Value. */
+        } unregister_and_continue;
+    } u;
+} bcmolt_epon_oam_oam_reg_tek_op_variable;
+
+/** OAM Reg Tek Opcode. 
+ */
+typedef struct bcmolt_epon_oam_oam_reg_tek_opcode
+{
+    bcmolt_epon_oam_tek_opcode opcode;                      /**< Opcode to register */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_oam_registration_action action; /**< Registration action to perform for Tek opcode */
+            uint16_t length_reserved;                       /**< Number of bytes to follow */
+        } def;
+
+        struct
+        {
+            bcmolt_epon_oam_oam_reg_tek_op_variable value;  /**< Value. */
+        } get_request;
+
+        struct
+        {
+            bcmolt_epon_oam_oam_reg_tek_op_variable value;  /**< Value. */
+        } set_request;
+    } u;
+} bcmolt_epon_oam_oam_reg_tek_opcode;
+
+/** OAM Reg Tek Cont. 
+ */
+typedef struct bcmolt_epon_oam_oam_reg_tek_cont
+{
+    uint8_t opcode_count;   /**< Number of Tek opcode registrations */
+    bcmolt_epon_oam_oam_reg_tek_opcode *opcodes;    /**< Tek opcode registrations */
+} bcmolt_epon_oam_oam_reg_tek_cont;
+
+/** OAM Reg Tek. 
+ */
+typedef struct bcmolt_epon_oam_oam_reg_tek
+{
+    bcmolt_epon_oam_oam_registration_action action; /**< Registration action to perform for Tek OUI */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_oam_reg_tek_cont value; /**< Value. */
+        } cont;
+
+        struct
+        {
+            bcmolt_epon_oam_oam_reg_tek_cont value; /**< Value. */
+        } register_and_continue;
+
+        struct
+        {
+            bcmolt_epon_oam_oam_reg_tek_cont value; /**< Value. */
+        } unregister_and_continue;
+    } u;
+} bcmolt_epon_oam_oam_reg_tek;
+
+/** OAM Reg DPoE Var Desc. 
+ */
+typedef struct bcmolt_epon_oam_oam_reg_dpoe_var_desc
+{
+    bcmolt_epon_oam_dpoe_branch branch;                 /**< Branch. */
+    union
+    {
+        struct
+        {
+            uint16_t leaf;                              /**< Leaf. */
+        } def;
+
+        struct
+        {
+            bcmolt_epon_oam_var_leaf_attribute leaf;    /**< Leaf. */
+        } standard_attribute;
+
+        struct
+        {
+            bcmolt_epon_oam_var_leaf_action leaf;       /**< Leaf. */
+        } standard_action;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_leaf_attribute leaf;   /**< Leaf. */
+        } extended_attribute;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_leaf_action leaf;      /**< Leaf. */
+        } extended_action;
+    } u;
+} bcmolt_epon_oam_oam_reg_dpoe_var_desc;
+
+/** OAM Reg DPoE Variable. 
+ */
+typedef struct bcmolt_epon_oam_oam_reg_dpoe_variable
+{
+    bcmolt_epon_oam_oam_reg_dpoe_var_desc descriptor;   /**< DPoE variable descriptor */
+    bcmolt_epon_oam_oam_registration_action action;     /**< Registration action to perform for variable descriptor (MUST be Register or Unregister). */
+    uint16_t length_reserved;   /**< Number of bytes to follow */
+} bcmolt_epon_oam_oam_reg_dpoe_variable;
+
+/** OAM Reg DPoE Variable List. 
+ */
+typedef struct bcmolt_epon_oam_oam_reg_dpoe_variable_list
+{
+    uint8_t variable_count; /**< Number of DPoE variable registrations */
+    bcmolt_epon_oam_oam_reg_dpoe_variable *variables;   /**< DPoE variable registrations */
+} bcmolt_epon_oam_oam_reg_dpoe_variable_list;
+
+/** OAM Reg DPoE Op Variable. 
+ */
+typedef struct bcmolt_epon_oam_oam_reg_dpoe_op_variable
+{
+    bcmolt_epon_oam_oam_registration_action action;             /**< Registration action to perform for DPoE variable requests. */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_oam_reg_dpoe_variable_list value;   /**< Value. */
+        } cont;
+
+        struct
+        {
+            bcmolt_epon_oam_oam_reg_dpoe_variable_list value;   /**< Value. */
+        } register_and_continue;
+
+        struct
+        {
+            bcmolt_epon_oam_oam_reg_dpoe_variable_list value;   /**< Value. */
+        } unregister_and_continue;
+    } u;
+} bcmolt_epon_oam_oam_reg_dpoe_op_variable;
+
+/** OAM Reg DPoE Opcode. 
+ */
+typedef struct bcmolt_epon_oam_oam_reg_dpoe_opcode
+{
+    bcmolt_epon_oam_dpoe_opcode opcode;                     /**< Opcode to register */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_oam_registration_action action; /**< Registration action to perform for DPoE opcode. */
+            uint16_t length_reserved;                       /**< Number of bytes to follow */
+        } def;
+
+        struct
+        {
+            bcmolt_epon_oam_oam_reg_dpoe_op_variable value; /**< Value. */
+        } get_request;
+
+        struct
+        {
+            bcmolt_epon_oam_oam_reg_dpoe_op_variable value; /**< Value. */
+        } set_request;
+    } u;
+} bcmolt_epon_oam_oam_reg_dpoe_opcode;
+
+/** OAM Reg DPoE Cont. 
+ */
+typedef struct bcmolt_epon_oam_oam_reg_dpoe_cont
+{
+    uint8_t opcode_count;   /**< Number of DPoE opcode registrations */
+    bcmolt_epon_oam_oam_reg_dpoe_opcode *opcodes;   /**< DPoE opcode registrations */
+} bcmolt_epon_oam_oam_reg_dpoe_cont;
+
+/** OAM Reg DPoE. 
+ */
+typedef struct bcmolt_epon_oam_oam_reg_dpoe
+{
+    bcmolt_epon_oam_oam_registration_action action;     /**< Registration action to perform for DPoE OUI */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_oam_reg_dpoe_cont value;    /**< Value. */
+        } cont;
+
+        struct
+        {
+            bcmolt_epon_oam_oam_reg_dpoe_cont value;    /**< Value. */
+        } register_and_continue;
+
+        struct
+        {
+            bcmolt_epon_oam_oam_reg_dpoe_cont value;    /**< Value. */
+        } unregister_and_continue;
+    } u;
+} bcmolt_epon_oam_oam_reg_dpoe;
+
+/** OAM Reg Vendor OUI. 
+ */
+typedef struct bcmolt_epon_oam_oam_reg_vendor_oui
+{
+    bcmolt_epon_oam_well_known_oui oui;                     /**< Vendor OUI to register */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_oam_registration_action action; /**< Registration action to perform for vendor OUI (MUST be Register or Unregister) */
+            uint16_t length;                    /**< Number of bytes to follow */
+        } def;
+
+        struct
+        {
+            bcmolt_epon_oam_oam_reg_ctc value;  /**< Value. */
+        } ctc;
+
+        struct
+        {
+            bcmolt_epon_oam_oam_reg_tek value;  /**< Value. */
+        } tek;
+
+        struct
+        {
+            bcmolt_epon_oam_oam_reg_dpoe value; /**< Value. */
+        } dpoe;
+    } u;
+} bcmolt_epon_oam_oam_reg_vendor_oui;
+
+/** OAM Reg Vendor Cont. 
+ */
+typedef struct bcmolt_epon_oam_oam_reg_vendor_cont
+{
+    uint8_t vendor_oui_reg_count;   /**< Number of Vendor OUI registrations */
+    bcmolt_epon_oam_oam_reg_vendor_oui *vendor_oui_reg; /**< Vendor OUI registrations */
+} bcmolt_epon_oam_oam_reg_vendor_cont;
+
+/** OAM Reg Vendor. 
+ */
+typedef struct bcmolt_epon_oam_oam_reg_vendor
+{
+    bcmolt_epon_oam_oam_registration_action action;     /**< Registration action to perform for organization specific frames. */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_oam_reg_vendor_cont value;  /**< Value. */
+        } cont;
+
+        struct
+        {
+            bcmolt_epon_oam_oam_reg_vendor_cont value;  /**< Value. */
+        } register_and_continue;
+
+        struct
+        {
+            bcmolt_epon_oam_oam_reg_vendor_cont value;  /**< Value. */
+        } unregister_and_continue;
+    } u;
+} bcmolt_epon_oam_oam_reg_vendor;
+
+/** OAM Reg Opcode. 
+ */
+typedef struct bcmolt_epon_oam_oam_reg_opcode
+{
+    bcmolt_epon_oam_oam_opcode opcode;                      /**< IEEE OAM opcode to register */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_oam_registration_action action; /**< Registration action to perform for opcode (MUST be Register or Unregister). */
+            uint16_t length_reserved;                       /**< Number of bytes to follow */
+        } def;
+
+        struct
+        {
+            bcmolt_epon_oam_oam_reg_info value;             /**< Value. */
+        } info;
+
+        struct
+        {
+            bcmolt_epon_oam_oam_reg_vendor value;           /**< Value. */
+        } organization_specific;
+    } u;
+} bcmolt_epon_oam_oam_reg_opcode;
+
+/** OAM Registration. 
+ */
+typedef struct bcmolt_epon_oam_oam_registration
+{
+    uint8_t master_id;  /**< The ID of the master that this registration applies to. */
+    bcmolt_epon_oam_oam_registration_action action;         /**< Reserved (must be Continue) */
+    union
+    {
+        struct
+        {
+            uint8_t registration_count;                     /**< Number of OAM opcode registrations for this master (maximum one registration per opcode). */
+            bcmolt_epon_oam_oam_reg_opcode *registration;   /**< OAM opcode registrations */
+        } cont;
+    } u;
+} bcmolt_epon_oam_oam_registration;
+
+/** This record is used in the case where the ONU Master does NOT have the OAM 
+ * Master option enabled. It can be used to indicate certain OAM messages that 
+ * the master wishes to process itself. Rather than processing these messages, 
+ * the ONU will send these messages to the master.  By default all OAM frames 
+ * are considered Unregistered and will be processed by the ONU, unless this 
+ * record specifically contains a Register action for that type of frame. This 
+ * record is hierarchical allowing high level actions to be overridden by lower 
+ * level actions. For example, if you have the following three conditionals 
+ * (each successively nested under the previous):  * If X Then Register And 
+ * Continue * If Y Then Unregister And Continue * If Z Then Register  Then 
+ * frames which match only X or X, Y and Z would be forwarded, while frames 
+ * matching X and Y, but not Z would be processed by the ONU. Note that due to 
+ * the hierarchical organization of the structure it is logically impossible 
+ * for a frame to match Y or Z without matching X.  Note that there are some 
+ * limitations when registering branch/leaf codes (Variables). For variables 
+ * that are read/write, it is necessary to register the variable under both the 
+ * get request and set request opcodes. A single get or set request can also 
+ * contain multiple variables which may have conflicting registration states. A 
+ * frame will be forwarded to the master if it was registered at a higher level 
+ * and contains no variables which were explicitly unregistered or if it 
+ * contains any variables that were explicitly registered. 
+ */
+typedef struct bcmolt_epon_oam_oam_registration_list
+{
+    uint8_t registrations_count;                        /**< Number of ONU Master OAM registrations (maximum 1 per master). */
+    bcmolt_epon_oam_oam_registration *registrations;    /**< ONU Master OAM registrations */
+} bcmolt_epon_oam_oam_registration_list;
+
+/** Master Context TLV. 
+ */
+typedef struct bcmolt_epon_oam_master_context_tlv
+{
+    bcmolt_epon_oam_master_context_type type;   /**< Type. */
+    union
+    {
+        struct
+        {
+            uint8_t port_index;                 /**< Port Index. */
+        } network_pon;
+
+        struct
+        {
+            uint8_t link_index;                 /**< Link Index. */
+        } link;
+
+        struct
+        {
+            uint8_t port_index;                 /**< Port Index. */
+        } user_port;
+    } u;
+} bcmolt_epon_oam_master_context_tlv;
+
+/** Negotiated OAM. 
+ */
+typedef struct bcmolt_epon_oam_negotiated_oam
+{
+    bcmolt_epon_oam_well_known_oui oui;             /**< OUI. */
+    bcmos_bool negotiated;                          /**< Negotiated. */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_ctc_version version;    /**< Version. */
+        } ctc;
+
+        struct
+        {
+            bcmolt_epon_oam_dpoe_version version;   /**< Version. */
+        } dpoe;
+    } u;
+} bcmolt_epon_oam_negotiated_oam;
+
+/** Negotiated OAM List. 
+ */
+typedef struct bcmolt_epon_oam_negotiated_oam_list
+{
+    uint8_t count;  /**< Count. */
+    bcmolt_epon_oam_negotiated_oam *negotiated_oams;    /**< Negotiated OAMs. */
+} bcmolt_epon_oam_negotiated_oam_list;
+
+/** ONU Master Command. 
+ */
+typedef struct bcmolt_epon_oam_onu_master_command
+{
+    bcmolt_epon_oam_onu_master_command_id command;                      /**< Command. */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_oam_registration_list oam_registrations;    /**< OAM Registrations. */
+        } set_oam_registration;
+
+        struct
+        {
+            bcmolt_epon_oam_master_context_tlv link_context;            /**< Link Context. */
+        } get_negotiated_oam;
+
+        struct
+        {
+            bcmolt_epon_oam_master_context_tlv link_context;            /**< Link Context. */
+            bcmolt_epon_oam_negotiated_oam_list negotiated_oam;         /**< Negotiated OAM. */
+        } set_negotiated_oam;
+    } u;
+} bcmolt_epon_oam_onu_master_command;
+
+/** ONU Master Response. 
+ */
+typedef struct bcmolt_epon_oam_onu_master_response
+{
+    bcmolt_epon_oam_onu_master_command_id command;                      /**< Command. */
+    bcmolt_epon_oam_onu_master_response_code response_code;             /**< Response Code. */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_onu_state state;                            /**< State. */
+        } get_onu_state;
+
+        struct
+        {
+            bcmolt_epon_oam_oam_registration_list oam_registrations;    /**< OAM Registrations. */
+        } get_oam_registration;
+
+        struct
+        {
+            bcmolt_epon_oam_master_context_tlv link_context;            /**< Link Context. */
+            bcmolt_epon_oam_negotiated_oam_list negotiated_oam;         /**< Negotiated OAM. */
+        } get_negotiated_oam;
+
+        struct
+        {
+            bcmolt_epon_oam_master_context_tlv link_context;            /**< Link Context. */
+        } set_negotiated_oam;
+    } u;
+} bcmolt_epon_oam_onu_master_response;
+
+/** ONU Master Communication. 
+ */
+typedef struct bcmolt_epon_oam_onu_master_communication
+{
+    bcmolt_epon_oam_onu_master_communication_type type; /**< Type. */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_onu_master_command value;   /**< Value. */
+        } command;
+
+        struct
+        {
+            bcmolt_epon_oam_onu_master_response value;  /**< Value. */
+        } response;
+    } u;
+} bcmolt_epon_oam_onu_master_communication;
+
+/** Master PDU Common. 
+ */
+typedef struct bcmolt_epon_oam_master_pdu_common
+{
+    bcmolt_epon_oam_onu_master_protocol protocol;           /**< Protocol. */
+    uint16_t correlation_tag;                               /**< Correlation Tag. */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_onu_master_ping_flags flags;    /**< Flags. */
+        } ping;
+
+        struct
+        {
+            bcmolt_epon_oam_master_end_point dmep;          /**< DMEP. */
+            bcmolt_epon_oam_master_end_point smep;          /**< SMEP. */
+            uint16_t frame_length;  /**< Frame Length. */
+            uint8_t *frame_data;    /**< Frame Data. */
+        } encapsulated_frame;
+
+        struct
+        {
+            bcmolt_epon_oam_onu_master_oam_content value;   /**< Value. */
+        } oam_content;
+
+        struct
+        {
+            bcmolt_epon_oam_onu_master_oam_content value;   /**< Value. */
+        } registered_oam;
+
+        struct
+        {
+            bcmolt_epon_oam_onu_master_communication value; /**< Value. */
+        } master_communication;
+    } u;
+} bcmolt_epon_oam_master_pdu_common;
+
+/** Organization Specific Slow Protocol. 
+ */
+typedef struct bcmolt_epon_oam_organization_specific_slow_protocol
+{
+    bcmolt_epon_oam_well_known_oui oui;                 /**< OUI. */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_master_pdu_common value;    /**< Value. */
+        } tek;
+    } u;
+} bcmolt_epon_oam_organization_specific_slow_protocol;
+
+/** Slow Protocol. 
+ */
+typedef struct bcmolt_epon_oam_slow_protocol
+{
+    bcmolt_epon_oam_slow_protocol_subtype subtype;      /**< Subtype. */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_oam_flags flags;            /**< Flags. */
+            bcmolt_epon_oam_oam_pdu_content content;    /**< Content. */
+        } oam;
+
+        struct
+        {
+            bcmolt_epon_oam_organization_specific_slow_protocol value;  /**< Value. */
+        } organization_specific;
+    } u;
+} bcmolt_epon_oam_slow_protocol;
+
+/** Ethernet Protocol. 
+ */
+typedef struct bcmolt_epon_oam_ethernet_protocol
+{
+    bcmolt_epon_oam_protocol_type ethertype;        /**< Ethertype. */
+    union
+    {
+        struct
+        {
+            uint32_t unknown_count;                 /**< Number of elements in unknown. */
+            uint8_t *unknown;                       /**< Unknown. */
+        } def;
+
+        struct
+        {
+            uint32_t padding_count;                 /**< Number of elements in padding. */
+            uint8_t *padding;                       /**< Padding. */
+        } zero;
+
+        struct
+        {
+            bcmolt_epon_oam_vlan_value value;       /**< Value. */
+        } cvlan;
+
+        struct
+        {
+            bcmolt_epon_oam_vlan_value value;       /**< Value. */
+        } svlan;
+
+        struct
+        {
+            bcmolt_epon_oam_itag_value value;       /**< Value. */
+        } itag;
+
+        struct
+        {
+            bcmolt_epon_oam_slow_protocol value;    /**< Value. */
+        } slow_protocol;
+
+        struct
+        {
+            bcmolt_epon_oam_eapol_protocol value;   /**< Value. */
+        } eapol;
+    } u;
+} bcmolt_epon_oam_ethernet_protocol;
+
+/** Ethernet Frame. 
+ */
+typedef struct bcmolt_epon_oam_ethernet_frame
+{
+    bcmos_mac_address da;       /**< Destination Address. */
+    bcmos_mac_address sa;       /**< Source Address. */
+    uint32_t protocols_count;   /**< Number of elements in protocols. */
+    bcmolt_epon_oam_ethernet_protocol *protocols;   /**< Protocols. */
+} bcmolt_epon_oam_ethernet_frame;
+
+/** OAM Pdu Base. 
+ */
+typedef struct bcmolt_epon_oam_oam_pdu_base
+{
+    bcmos_mac_address da;   /**< Destination Address. */
+    bcmos_mac_address sa;   /**< Source Address. */
+    bcmolt_epon_oam_protocol_type protocol_type;    /**< Protocol Type. */
+    bcmolt_epon_oam_slow_protocol_subtype subtype;  /**< Subtype. */
+    bcmolt_epon_oam_oam_flags flags;                /**< Flags. */
+    bcmolt_epon_oam_oam_pdu_content content;        /**< Content. */
+} bcmolt_epon_oam_oam_pdu_base;
+
+/** OAM Tek Event GPIO. 
+ */
+typedef struct bcmolt_epon_oam_oam_tek_event_gpio
+{
+    uint32_t reserved;      /**< Reserved. */
+    uint32_t gpio_state1g;  /**< GPIO State (1G). */
+    uint64_t gpio_state10g; /**< GPIO State (10G). */
+} bcmolt_epon_oam_oam_tek_event_gpio;
+
+/** OAM Tek Event. 
+ */
+typedef struct bcmolt_epon_oam_oam_tek_event
+{
+    bcmolt_epon_oam_tek_alarm_code alarm_code;  /**< Alarm Code. */
+    bcmos_bool raised;  /**< Raised. */
+    uint16_t port;      /**< Port. */
+    uint16_t link;      /**< Link. */
+    uint16_t queue;     /**< Queue. */
+    bcmolt_epon_oam_tek_alarm_context alarm_context;    /**< Alarm Context. */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_tek_leaf_attribute stat_id; /**< Stat ID. */
+        } stat_alarm;
+
+        struct
+        {
+            bcmolt_epon_oam_oam_tek_event_gpio value;   /**< Value. */
+        } gpio_link_fault;
+
+        struct
+        {
+            bcmolt_epon_oam_oam_tek_event_gpio value;   /**< Value. */
+        } gpio_dying_gasp;
+
+        struct
+        {
+            bcmolt_epon_oam_oam_tek_event_gpio value;   /**< Value. */
+        } gpio_critical_event;
+
+        struct
+        {
+            bcmolt_epon_oam_oam_tek_event_gpio value;   /**< Value. */
+        } gpio_other;
+    } u;
+} bcmolt_epon_oam_oam_tek_event;
+
+/** Std MAC Address. 
+ */
+typedef struct bcmolt_epon_oam_std_mac_address
+{
+    bcmos_mac_address address;  /**< Address. */
+} bcmolt_epon_oam_std_mac_address;
+
+/** Tek Var Desc Attr Base. 
+ */
+typedef struct bcmolt_epon_oam_tek_var_desc_attr_base
+{
+    bcmolt_epon_oam_tek_leaf_attribute attribute;   /**< Attribute. */
+    union
+    {
+        struct
+        {
+            bcmolt_epon_oam_tek_leaf_attribute stat;    /**< Stat. */
+        } port_stat_threshold;
+
+        struct
+        {
+            bcmolt_epon_oam_tek_leaf_attribute stat;    /**< Stat. */
+        } link_stat_threshold;
+    } u;
+} bcmolt_epon_oam_tek_var_desc_attr_base;
+
+/** TLS Record Continued. 
+ */
+typedef struct bcmolt_epon_oam_tls_record_continued
+{
+    bcmolt_epon_oam_tls_content_type content_type;  /**< Content Type. */
+    bcmolt_epon_oam_tls_version version;            /**< Version. */
+    union
+    {
+        struct
+        {
+            uint32_t data_count;                    /**< Number of elements in data. */
+            uint8_t *data;  /**< Data. */
+        } def;
+    } u;
+} bcmolt_epon_oam_tls_record_continued;
+
+/** TLS Signature And Hash Algorithm. 
+ */
+typedef struct bcmolt_epon_oam_tls_signature_and_hash_algorithm
+{
+    bcmolt_epon_oam_tls_hash_algorithm hash;    /**< Hash. */
+    bcmolt_epon_oam_tls_signature_algorithm signature;  /**< Signature. */
+} bcmolt_epon_oam_tls_signature_and_hash_algorithm;
+
+/** TLS Signature And Hash Algorithm List. 
+ */
+typedef struct bcmolt_epon_oam_tls_signature_and_hash_algorithm_list
+{
+    uint32_t supported_signature_algorithms_count;  /**< Number of elements in supported_signature_algorithms. */
+    bcmolt_epon_oam_tls_signature_and_hash_algorithm *supported_signature_algorithms;   /**< Supported Signature Algorithms. */
+} bcmolt_epon_oam_tls_signature_and_hash_algorithm_list;
+
+/** @} */
+
+/** Packs a bcmolt_epon_oam_alarm_config_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_alarm_config_mode_pack(bcmolt_epon_oam_alarm_config_mode this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_alarm_config_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_alarm_config_mode_unpack(bcmolt_epon_oam_alarm_config_mode *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_autonegotiate_admin_state to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_autonegotiate_admin_state_pack(bcmolt_epon_oam_autonegotiate_admin_state this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_autonegotiate_admin_state from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_autonegotiate_admin_state_unpack(bcmolt_epon_oam_autonegotiate_admin_state *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_auto_negotiation_auto_config to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_auto_negotiation_auto_config_pack(bcmolt_epon_oam_auto_negotiation_auto_config this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_auto_negotiation_auto_config from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_auto_negotiation_auto_config_unpack(bcmolt_epon_oam_auto_negotiation_auto_config *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_auto_negotiation_capability to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_auto_negotiation_capability_pack(bcmolt_epon_oam_auto_negotiation_capability this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_auto_negotiation_capability from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_auto_negotiation_capability_unpack(bcmolt_epon_oam_auto_negotiation_capability *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_auto_remote_sig to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_auto_remote_sig_pack(bcmolt_epon_oam_auto_remote_sig this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_auto_remote_sig from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_auto_remote_sig_unpack(bcmolt_epon_oam_auto_remote_sig *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_auto_selector to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_auto_selector_pack(bcmolt_epon_oam_auto_selector this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_auto_selector from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_auto_selector_unpack(bcmolt_epon_oam_auto_selector *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_binary_field_select_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_binary_field_select_type_pack(bcmolt_epon_oam_binary_field_select_type this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_binary_field_select_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_binary_field_select_type_unpack(bcmolt_epon_oam_binary_field_select_type *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_brcm_cmc_request_option to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cmc_request_option_pack(bcmolt_epon_oam_brcm_cmc_request_option this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_brcm_cmc_request_option from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cmc_request_option_unpack(bcmolt_epon_oam_brcm_cmc_request_option *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_brcm_cmc_result_code to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cmc_result_code_pack(bcmolt_epon_oam_brcm_cmc_result_code this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_brcm_cmc_result_code from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cmc_result_code_unpack(bcmolt_epon_oam_brcm_cmc_result_code *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_brcm_cmc_annex to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cmc_annex_pack(bcmolt_epon_oam_brcm_cmc_annex this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_brcm_cmc_annex from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cmc_annex_unpack(bcmolt_epon_oam_brcm_cmc_annex *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_brcm_cmc_intf_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cmc_intf_type_pack(bcmolt_epon_oam_brcm_cmc_intf_type this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_brcm_cmc_intf_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cmc_intf_type_unpack(bcmolt_epon_oam_brcm_cmc_intf_type *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_brcm_cmc_interface_status to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cmc_interface_status_pack(bcmolt_epon_oam_brcm_cmc_interface_status this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_brcm_cmc_interface_status from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cmc_interface_status_unpack(bcmolt_epon_oam_brcm_cmc_interface_status *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_brcm_cmc_interleaver to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cmc_interleaver_pack(bcmolt_epon_oam_brcm_cmc_interleaver this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_brcm_cmc_interleaver from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cmc_interleaver_unpack(bcmolt_epon_oam_brcm_cmc_interleaver *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_brcm_cmc_load_balance_method to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cmc_load_balance_method_pack(bcmolt_epon_oam_brcm_cmc_load_balance_method this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_brcm_cmc_load_balance_method from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cmc_load_balance_method_unpack(bcmolt_epon_oam_brcm_cmc_load_balance_method *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_brcm_cmc_modulation to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cmc_modulation_pack(bcmolt_epon_oam_brcm_cmc_modulation this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_brcm_cmc_modulation from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cmc_modulation_unpack(bcmolt_epon_oam_brcm_cmc_modulation *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_brcm_cmc_us_modulation_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cmc_us_modulation_type_pack(bcmolt_epon_oam_brcm_cmc_us_modulation_type this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_brcm_cmc_us_modulation_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cmc_us_modulation_type_unpack(bcmolt_epon_oam_brcm_cmc_us_modulation_type *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_brcm_cmc_us_profile_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cmc_us_profile_type_pack(bcmolt_epon_oam_brcm_cmc_us_profile_type this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_brcm_cmc_us_profile_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cmc_us_profile_type_unpack(bcmolt_epon_oam_brcm_cmc_us_profile_type *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_brcm_cnu_connectivity_state to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cnu_connectivity_state_pack(bcmolt_epon_oam_brcm_cnu_connectivity_state this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_brcm_cnu_connectivity_state from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cnu_connectivity_state_unpack(bcmolt_epon_oam_brcm_cnu_connectivity_state *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_brcm_cnu_docsis_version to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cnu_docsis_version_pack(bcmolt_epon_oam_brcm_cnu_docsis_version this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_brcm_cnu_docsis_version from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cnu_docsis_version_unpack(bcmolt_epon_oam_brcm_cnu_docsis_version *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_brcm_cnu_ipaddr_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cnu_ipaddr_type_pack(bcmolt_epon_oam_brcm_cnu_ipaddr_type this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_brcm_cnu_ipaddr_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cnu_ipaddr_type_unpack(bcmolt_epon_oam_brcm_cnu_ipaddr_type *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_brcm_oam_pdu_opcode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_oam_pdu_opcode_pack(bcmolt_epon_oam_brcm_oam_pdu_opcode this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_brcm_oam_pdu_opcode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_oam_pdu_opcode_unpack(bcmolt_epon_oam_brcm_oam_pdu_opcode *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_clock_transport_key to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_clock_transport_key_pack(bcmolt_epon_oam_clock_transport_key this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_clock_transport_key from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_clock_transport_key_unpack(bcmolt_epon_oam_clock_transport_key *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_var_leaf_action to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_var_leaf_action_pack(bcmolt_epon_oam_var_leaf_action this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_var_leaf_action from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_var_leaf_action_unpack(bcmolt_epon_oam_var_leaf_action *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_enabled_state to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_enabled_state_pack(bcmolt_epon_oam_ctc_enabled_state this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_enabled_state from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_enabled_state_unpack(bcmolt_epon_oam_ctc_enabled_state *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_activation to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_activation_pack(bcmolt_epon_oam_ctc_activation this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_activation from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_activation_unpack(bcmolt_epon_oam_ctc_activation *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_leaf_management_object to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_leaf_management_object_pack(bcmolt_epon_oam_ctc_leaf_management_object this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_leaf_management_object from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_leaf_management_object_unpack(bcmolt_epon_oam_ctc_leaf_management_object *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_onu_alarm_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_onu_alarm_id_pack(bcmolt_epon_oam_ctc_onu_alarm_id this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_onu_alarm_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_onu_alarm_id_unpack(bcmolt_epon_oam_ctc_onu_alarm_id *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_power_alarm_code to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_power_alarm_code_pack(bcmolt_epon_oam_ctc_power_alarm_code this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_power_alarm_code from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_power_alarm_code_unpack(bcmolt_epon_oam_ctc_power_alarm_code *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_pon_if_switch_code to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_pon_if_switch_code_pack(bcmolt_epon_oam_ctc_pon_if_switch_code this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_pon_if_switch_code from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_pon_if_switch_code_unpack(bcmolt_epon_oam_ctc_pon_if_switch_code *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_var_leaf_attribute to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_var_leaf_attribute_pack(bcmolt_epon_oam_var_leaf_attribute this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_var_leaf_attribute from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_var_leaf_attribute_unpack(bcmolt_epon_oam_var_leaf_attribute *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_fec_support to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_fec_support_pack(bcmolt_epon_oam_ctc_fec_support this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_fec_support from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_fec_support_unpack(bcmolt_epon_oam_ctc_fec_support *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_fec_state to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_fec_state_pack(bcmolt_epon_oam_ctc_fec_state this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_fec_state from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_fec_state_unpack(bcmolt_epon_oam_ctc_fec_state *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_churning_op_code to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_churning_op_code_pack(bcmolt_epon_oam_ctc_churning_op_code this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_churning_op_code from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_churning_op_code_unpack(bcmolt_epon_oam_ctc_churning_op_code *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_classification_operation to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_classification_operation_pack(bcmolt_epon_oam_ctc_classification_operation this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_classification_operation from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_classification_operation_unpack(bcmolt_epon_oam_ctc_classification_operation *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_commit_image_ack to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_commit_image_ack_pack(bcmolt_epon_oam_ctc_commit_image_ack this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_commit_image_ack from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_commit_image_ack_unpack(bcmolt_epon_oam_ctc_commit_image_ack *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_commit_image_opcode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_commit_image_opcode_pack(bcmolt_epon_oam_ctc_commit_image_opcode this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_commit_image_opcode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_commit_image_opcode_unpack(bcmolt_epon_oam_ctc_commit_image_opcode *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_commit_image_flag to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_commit_image_flag_pack(bcmolt_epon_oam_ctc_commit_image_flag this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_commit_image_flag from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_commit_image_flag_unpack(bcmolt_epon_oam_ctc_commit_image_flag *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_dba_op_code to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_dba_op_code_pack(bcmolt_epon_oam_ctc_dba_op_code this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_dba_op_code from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_dba_op_code_unpack(bcmolt_epon_oam_ctc_dba_op_code *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_early_wake_up_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_early_wake_up_mode_pack(bcmolt_epon_oam_ctc_early_wake_up_mode this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_early_wake_up_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_early_wake_up_mode_unpack(bcmolt_epon_oam_ctc_early_wake_up_mode *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_branch to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_branch_pack(bcmolt_epon_oam_ctc_branch this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_branch from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_branch_unpack(bcmolt_epon_oam_ctc_branch *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_oam_error_code to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_oam_error_code_pack(bcmolt_epon_oam_oam_error_code this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_oam_error_code from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_oam_error_code_unpack(bcmolt_epon_oam_oam_error_code *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_leaf_old_management_object to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_leaf_old_management_object_pack(bcmolt_epon_oam_ctc_leaf_old_management_object this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_leaf_old_management_object from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_leaf_old_management_object_unpack(bcmolt_epon_oam_ctc_leaf_old_management_object *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_port_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_port_type_pack(bcmolt_epon_oam_ctc_port_type this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_port_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_port_type_unpack(bcmolt_epon_oam_ctc_port_type *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_leaf_ext_attribute to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_leaf_ext_attribute_pack(bcmolt_epon_oam_ctc_leaf_ext_attribute this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_leaf_ext_attribute from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_leaf_ext_attribute_unpack(bcmolt_epon_oam_ctc_leaf_ext_attribute *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_leaf_ext_action to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_leaf_ext_action_pack(bcmolt_epon_oam_ctc_leaf_ext_action this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_leaf_ext_action from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_leaf_ext_action_unpack(bcmolt_epon_oam_ctc_leaf_ext_action *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ktleaf_attribute to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ktleaf_attribute_pack(bcmolt_epon_oam_ktleaf_attribute this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ktleaf_attribute from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ktleaf_attribute_unpack(bcmolt_epon_oam_ktleaf_attribute *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_eth_port_policing_enable to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_eth_port_policing_enable_pack(bcmolt_epon_oam_ctc_eth_port_policing_enable this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_eth_port_policing_enable from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_eth_port_policing_enable_unpack(bcmolt_epon_oam_ctc_eth_port_policing_enable *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_event_sub_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_event_sub_type_pack(bcmolt_epon_oam_ctc_event_sub_type this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_event_sub_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_event_sub_type_unpack(bcmolt_epon_oam_ctc_event_sub_type *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_event_status to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_event_status_pack(bcmolt_epon_oam_ctc_event_status this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_event_status from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_event_status_unpack(bcmolt_epon_oam_ctc_event_status *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_onu_sleep_flag to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_onu_sleep_flag_pack(bcmolt_epon_oam_ctc_onu_sleep_flag this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_onu_sleep_flag from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_onu_sleep_flag_unpack(bcmolt_epon_oam_ctc_onu_sleep_flag *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_onu_sleep_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_onu_sleep_mode_pack(bcmolt_epon_oam_ctc_onu_sleep_mode this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_onu_sleep_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_onu_sleep_mode_unpack(bcmolt_epon_oam_ctc_onu_sleep_mode *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_pppo_etest_status to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_pppo_etest_status_pack(bcmolt_epon_oam_pppo_etest_status this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_pppo_etest_status from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_pppo_etest_status_unpack(bcmolt_epon_oam_pppo_etest_status *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_pppo_etest_fail_reason to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_pppo_etest_fail_reason_pack(bcmolt_epon_oam_pppo_etest_fail_reason this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_pppo_etest_fail_reason from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_pppo_etest_fail_reason_unpack(bcmolt_epon_oam_pppo_etest_fail_reason *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_start_or_stop_indication to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_start_or_stop_indication_pack(bcmolt_epon_oam_start_or_stop_indication this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_start_or_stop_indication from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_start_or_stop_indication_unpack(bcmolt_epon_oam_start_or_stop_indication *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_pppo_eauth_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_pppo_eauth_mode_pack(bcmolt_epon_oam_pppo_eauth_mode this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_pppo_eauth_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_pppo_eauth_mode_unpack(bcmolt_epon_oam_pppo_eauth_mode *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_supported_services to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_supported_services_pack(bcmolt_epon_oam_ctc_supported_services this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_supported_services from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_supported_services_unpack(bcmolt_epon_oam_ctc_supported_services *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_service_sla_operation to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_service_sla_operation_pack(bcmolt_epon_oam_ctc_service_sla_operation this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_service_sla_operation from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_service_sla_operation_unpack(bcmolt_epon_oam_ctc_service_sla_operation *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_onu_dba_scheduling_scheme to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_onu_dba_scheduling_scheme_pack(bcmolt_epon_oam_ctc_onu_dba_scheduling_scheme this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_onu_dba_scheduling_scheme from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_onu_dba_scheduling_scheme_unpack(bcmolt_epon_oam_ctc_onu_dba_scheduling_scheme *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_onu_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_onu_type_pack(bcmolt_epon_oam_ctc_onu_type this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_onu_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_onu_type_unpack(bcmolt_epon_oam_ctc_onu_type *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_onu_protection_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_onu_protection_type_pack(bcmolt_epon_oam_ctc_onu_protection_type this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_onu_protection_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_onu_protection_type_unpack(bcmolt_epon_oam_ctc_onu_protection_type *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_onu_interface_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_onu_interface_type_pack(bcmolt_epon_oam_ctc_onu_interface_type this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_onu_interface_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_onu_interface_type_unpack(bcmolt_epon_oam_ctc_onu_interface_type *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_mxu_global_params_width to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_mxu_global_params_width_pack(bcmolt_epon_oam_ctc_mxu_global_params_width this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_mxu_global_params_width from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_mxu_global_params_width_unpack(bcmolt_epon_oam_ctc_mxu_global_params_width *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_mxu_snmp_params_width to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_mxu_snmp_params_width_pack(bcmolt_epon_oam_ctc_mxu_snmp_params_width this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_mxu_snmp_params_width from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_mxu_snmp_params_width_unpack(bcmolt_epon_oam_ctc_mxu_snmp_params_width *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_onu_power_supply_control_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_onu_power_supply_control_type_pack(bcmolt_epon_oam_ctc_onu_power_supply_control_type this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_onu_power_supply_control_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_onu_power_supply_control_type_unpack(bcmolt_epon_oam_ctc_onu_power_supply_control_type *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_vlan_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_vlan_mode_pack(bcmolt_epon_oam_ctc_vlan_mode this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_vlan_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_vlan_mode_unpack(bcmolt_epon_oam_ctc_vlan_mode *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_onu_classif_field to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_onu_classif_field_pack(bcmolt_epon_oam_ctc_onu_classif_field this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_onu_classif_field from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_onu_classif_field_unpack(bcmolt_epon_oam_ctc_onu_classif_field *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_onu_classif_operator to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_onu_classif_operator_pack(bcmolt_epon_oam_ctc_onu_classif_operator this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_onu_classif_operator from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_onu_classif_operator_unpack(bcmolt_epon_oam_ctc_onu_classif_operator *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_multicast_vlan_operation to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_multicast_vlan_operation_pack(bcmolt_epon_oam_ctc_multicast_vlan_operation this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_multicast_vlan_operation from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_multicast_vlan_operation_unpack(bcmolt_epon_oam_ctc_multicast_vlan_operation *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_multicast_tag_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_multicast_tag_mode_pack(bcmolt_epon_oam_ctc_multicast_tag_mode this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_multicast_tag_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_multicast_tag_mode_unpack(bcmolt_epon_oam_ctc_multicast_tag_mode *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_multicast_switch_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_multicast_switch_mode_pack(bcmolt_epon_oam_ctc_multicast_switch_mode this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_multicast_switch_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_multicast_switch_mode_unpack(bcmolt_epon_oam_ctc_multicast_switch_mode *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_multicast_control_action to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_action_pack(bcmolt_epon_oam_ctc_multicast_control_action this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_multicast_control_action from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_action_unpack(bcmolt_epon_oam_ctc_multicast_control_action *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_multicast_control_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_type_pack(bcmolt_epon_oam_ctc_multicast_control_type this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_multicast_control_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_type_unpack(bcmolt_epon_oam_ctc_multicast_control_type *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_voip_protocol to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_voip_protocol_pack(bcmolt_epon_oam_ctc_voip_protocol this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_voip_protocol from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_voip_protocol_unpack(bcmolt_epon_oam_ctc_voip_protocol *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_voice_ipmode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_voice_ipmode_pack(bcmolt_epon_oam_ctc_voice_ipmode this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_voice_ipmode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_voice_ipmode_unpack(bcmolt_epon_oam_ctc_voice_ipmode *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_pppoe_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_pppoe_mode_pack(bcmolt_epon_oam_ctc_pppoe_mode this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_pppoe_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_pppoe_mode_unpack(bcmolt_epon_oam_ctc_pppoe_mode *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_voice_tagging_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_voice_tagging_mode_pack(bcmolt_epon_oam_ctc_voice_tagging_mode this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_voice_tagging_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_voice_tagging_mode_unpack(bcmolt_epon_oam_ctc_voice_tagging_mode *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_h248reg_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_h248reg_mode_pack(bcmolt_epon_oam_ctc_h248reg_mode this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_h248reg_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_h248reg_mode_unpack(bcmolt_epon_oam_ctc_h248reg_mode *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_h248heartbeat_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_h248heartbeat_mode_pack(bcmolt_epon_oam_ctc_h248heartbeat_mode this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_h248heartbeat_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_h248heartbeat_mode_unpack(bcmolt_epon_oam_ctc_h248heartbeat_mode *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_rtp_tid_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_rtp_tid_mode_pack(bcmolt_epon_oam_ctc_rtp_tid_mode this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_rtp_tid_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_rtp_tid_mode_unpack(bcmolt_epon_oam_ctc_rtp_tid_mode *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_voice_t38mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_voice_t38mode_pack(bcmolt_epon_oam_ctc_voice_t38mode this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_voice_t38mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_voice_t38mode_unpack(bcmolt_epon_oam_ctc_voice_t38mode *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_voice_fax_modem_control_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_voice_fax_modem_control_mode_pack(bcmolt_epon_oam_ctc_voice_fax_modem_control_mode this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_voice_fax_modem_control_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_voice_fax_modem_control_mode_unpack(bcmolt_epon_oam_ctc_voice_fax_modem_control_mode *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_iad_operation_status to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_iad_operation_status_pack(bcmolt_epon_oam_ctc_iad_operation_status this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_iad_operation_status from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_iad_operation_status_unpack(bcmolt_epon_oam_ctc_iad_operation_status *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_iad_port_status to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_iad_port_status_pack(bcmolt_epon_oam_ctc_iad_port_status this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_iad_port_status from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_iad_port_status_unpack(bcmolt_epon_oam_ctc_iad_port_status *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_iad_port_service_state to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_iad_port_service_state_pack(bcmolt_epon_oam_ctc_iad_port_service_state this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_iad_port_service_state from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_iad_port_service_state_unpack(bcmolt_epon_oam_ctc_iad_port_service_state *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_iad_port_codec_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_iad_port_codec_mode_pack(bcmolt_epon_oam_ctc_iad_port_codec_mode this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_iad_port_codec_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_iad_port_codec_mode_unpack(bcmolt_epon_oam_ctc_iad_port_codec_mode *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_iad_operation to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_iad_operation_pack(bcmolt_epon_oam_ctc_iad_operation this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_iad_operation from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_iad_operation_unpack(bcmolt_epon_oam_ctc_iad_operation *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_zte_onu_port_mac_operation to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_zte_onu_port_mac_operation_pack(bcmolt_epon_oam_zte_onu_port_mac_operation this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_zte_onu_port_mac_operation from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_zte_onu_port_mac_operation_unpack(bcmolt_epon_oam_zte_onu_port_mac_operation *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_zte_isolate_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_zte_isolate_mode_pack(bcmolt_epon_oam_zte_isolate_mode this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_zte_isolate_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_zte_isolate_mode_unpack(bcmolt_epon_oam_zte_isolate_mode *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_zte_buffer_manage_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_zte_buffer_manage_mode_pack(bcmolt_epon_oam_zte_buffer_manage_mode this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_zte_buffer_manage_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_zte_buffer_manage_mode_unpack(bcmolt_epon_oam_zte_buffer_manage_mode *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_zte_dsbuf_direction to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_zte_dsbuf_direction_pack(bcmolt_epon_oam_zte_dsbuf_direction this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_zte_dsbuf_direction from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_zte_dsbuf_direction_unpack(bcmolt_epon_oam_zte_dsbuf_direction *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_zte_statistics_action_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_zte_statistics_action_mode_pack(bcmolt_epon_oam_zte_statistics_action_mode this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_zte_statistics_action_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_zte_statistics_action_mode_unpack(bcmolt_epon_oam_zte_statistics_action_mode *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_zte_statistics_reset_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_zte_statistics_reset_mode_pack(bcmolt_epon_oam_zte_statistics_reset_mode this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_zte_statistics_reset_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_zte_statistics_reset_mode_unpack(bcmolt_epon_oam_zte_statistics_reset_mode *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_uni_flow_statistics_collect_control_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_uni_flow_statistics_collect_control_mode_pack(bcmolt_epon_oam_uni_flow_statistics_collect_control_mode this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_uni_flow_statistics_collect_control_mode from 
+ * bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_uni_flow_statistics_collect_control_mode_unpack(bcmolt_epon_oam_uni_flow_statistics_collect_control_mode *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_light_indication_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_light_indication_mode_pack(bcmolt_epon_oam_light_indication_mode this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_light_indication_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_light_indication_mode_unpack(bcmolt_epon_oam_light_indication_mode *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_match_mac_address_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_match_mac_address_mode_pack(bcmolt_epon_oam_match_mac_address_mode this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_match_mac_address_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_match_mac_address_mode_unpack(bcmolt_epon_oam_match_mac_address_mode *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_zte_light_control_action_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_zte_light_control_action_mode_pack(bcmolt_epon_oam_zte_light_control_action_mode this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_zte_light_control_action_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_zte_light_control_action_mode_unpack(bcmolt_epon_oam_zte_light_control_action_mode *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_onu_excl_ability to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_onu_excl_ability_pack(bcmolt_epon_oam_onu_excl_ability this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_onu_excl_ability from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_onu_excl_ability_unpack(bcmolt_epon_oam_onu_excl_ability *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_onu_early_wake_capability to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_onu_early_wake_capability_pack(bcmolt_epon_oam_ctc_onu_early_wake_capability this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_onu_early_wake_capability from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_onu_early_wake_capability_unpack(bcmolt_epon_oam_ctc_onu_early_wake_capability *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_port_disable_on_loop_detected_state to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_port_disable_on_loop_detected_state_pack(bcmolt_epon_oam_ctc_port_disable_on_loop_detected_state this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_port_disable_on_loop_detected_state from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_port_disable_on_loop_detected_state_unpack(bcmolt_epon_oam_ctc_port_disable_on_loop_detected_state *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_monitoring_status to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_monitoring_status_pack(bcmolt_epon_oam_ctc_monitoring_status this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_monitoring_status from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_monitoring_status_unpack(bcmolt_epon_oam_ctc_monitoring_status *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_file_check_opcode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_file_check_opcode_pack(bcmolt_epon_oam_ctc_file_check_opcode this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_file_check_opcode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_file_check_opcode_unpack(bcmolt_epon_oam_ctc_file_check_opcode *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_rps_code to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_rps_code_pack(bcmolt_epon_oam_ctc_rps_code this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_rps_code from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_rps_code_unpack(bcmolt_epon_oam_ctc_rps_code *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_onu_auth_code to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_onu_auth_code_pack(bcmolt_epon_oam_ctc_onu_auth_code this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_onu_auth_code from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_onu_auth_code_unpack(bcmolt_epon_oam_ctc_onu_auth_code *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_well_known_oui to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_well_known_oui_pack(bcmolt_epon_oam_well_known_oui this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_well_known_oui from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_well_known_oui_unpack(bcmolt_epon_oam_well_known_oui *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_rule_operator to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_rule_operator_pack(bcmolt_epon_oam_ctc_rule_operator this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_rule_operator from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_rule_operator_unpack(bcmolt_epon_oam_ctc_rule_operator *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_software_download_data_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_software_download_data_type_pack(bcmolt_epon_oam_ctc_software_download_data_type this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_software_download_data_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_software_download_data_type_unpack(bcmolt_epon_oam_ctc_software_download_data_type *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_tftp_op_code to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_tftp_op_code_pack(bcmolt_epon_oam_ctc_tftp_op_code this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_tftp_op_code from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_tftp_op_code_unpack(bcmolt_epon_oam_ctc_tftp_op_code *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_swmirror_opcode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_swmirror_opcode_pack(bcmolt_epon_oam_ctc_swmirror_opcode this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_swmirror_opcode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_swmirror_opcode_unpack(bcmolt_epon_oam_ctc_swmirror_opcode *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_swmirror_activate_image_flag to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_swmirror_activate_image_flag_pack(bcmolt_epon_oam_ctc_swmirror_activate_image_flag this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_swmirror_activate_image_flag from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_swmirror_activate_image_flag_unpack(bcmolt_epon_oam_ctc_swmirror_activate_image_flag *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_swmirror_ack to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_swmirror_ack_pack(bcmolt_epon_oam_ctc_swmirror_ack this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_swmirror_ack from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_swmirror_ack_unpack(bcmolt_epon_oam_ctc_swmirror_ack *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ktoptical_power_alarm_status to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ktoptical_power_alarm_status_pack(bcmolt_epon_oam_ktoptical_power_alarm_status this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ktoptical_power_alarm_status from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ktoptical_power_alarm_status_unpack(bcmolt_epon_oam_ktoptical_power_alarm_status *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ktleaf_action to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ktleaf_action_pack(bcmolt_epon_oam_ktleaf_action this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ktleaf_action from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ktleaf_action_unpack(bcmolt_epon_oam_ktleaf_action *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_opcode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_opcode_pack(bcmolt_epon_oam_ctc_opcode this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_opcode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_opcode_unpack(bcmolt_epon_oam_ctc_opcode *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ktonu_event_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ktonu_event_type_pack(bcmolt_epon_oam_ktonu_event_type this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ktonu_event_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ktonu_event_type_unpack(bcmolt_epon_oam_ktonu_event_type *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ktloop_detect_event to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ktloop_detect_event_pack(bcmolt_epon_oam_ktloop_detect_event this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ktloop_detect_event from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ktloop_detect_event_unpack(bcmolt_epon_oam_ktloop_detect_event *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ktoptical_power_alarm_event to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ktoptical_power_alarm_event_pack(bcmolt_epon_oam_ktoptical_power_alarm_event this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ktoptical_power_alarm_event from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ktoptical_power_alarm_event_unpack(bcmolt_epon_oam_ktoptical_power_alarm_event *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_dasan_classifier_command to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_classifier_command_pack(bcmolt_epon_oam_dasan_classifier_command this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dasan_classifier_command from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_classifier_command_unpack(bcmolt_epon_oam_dasan_classifier_command *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_dasan_direction to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_direction_pack(bcmolt_epon_oam_dasan_direction this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dasan_direction from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_direction_unpack(bcmolt_epon_oam_dasan_direction *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_dasan_filter_field to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_filter_field_pack(bcmolt_epon_oam_dasan_filter_field this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dasan_filter_field from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_filter_field_unpack(bcmolt_epon_oam_dasan_filter_field *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_dasan_filter_action to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_filter_action_pack(bcmolt_epon_oam_dasan_filter_action this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dasan_filter_action from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_filter_action_unpack(bcmolt_epon_oam_dasan_filter_action *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_dasan_pri_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_pri_type_pack(bcmolt_epon_oam_dasan_pri_type this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dasan_pri_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_pri_type_unpack(bcmolt_epon_oam_dasan_pri_type *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_dasan_opcode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_opcode_pack(bcmolt_epon_oam_dasan_opcode this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dasan_opcode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_opcode_unpack(bcmolt_epon_oam_dasan_opcode *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_dasan_stats_seq_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_stats_seq_type_pack(bcmolt_epon_oam_dasan_stats_seq_type this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dasan_stats_seq_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_stats_seq_type_unpack(bcmolt_epon_oam_dasan_stats_seq_type *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_dasan_stat_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_stat_id_pack(bcmolt_epon_oam_dasan_stat_id this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dasan_stat_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_stat_id_unpack(bcmolt_epon_oam_dasan_stat_id *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_direction to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_direction_pack(bcmolt_epon_oam_direction this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_direction from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_direction_unpack(bcmolt_epon_oam_direction *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_domain_option to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_domain_option_pack(bcmolt_epon_oam_domain_option this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_domain_option from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_domain_option_unpack(bcmolt_epon_oam_domain_option *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_dpoe_leaf_action to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_leaf_action_pack(bcmolt_epon_oam_dpoe_leaf_action this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_leaf_action from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_leaf_action_unpack(bcmolt_epon_oam_dpoe_leaf_action *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_dpoe_loopback_location to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_loopback_location_pack(bcmolt_epon_oam_dpoe_loopback_location this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_loopback_location from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_loopback_location_unpack(bcmolt_epon_oam_dpoe_loopback_location *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_dpoe_llid_action to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_llid_action_pack(bcmolt_epon_oam_dpoe_llid_action this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_llid_action from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_llid_action_unpack(bcmolt_epon_oam_dpoe_llid_action *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_dpoe_alarm_code to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_alarm_code_pack(bcmolt_epon_oam_dpoe_alarm_code this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_alarm_code from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_alarm_code_unpack(bcmolt_epon_oam_dpoe_alarm_code *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_dpoe_leaf_attribute to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_leaf_attribute_pack(bcmolt_epon_oam_dpoe_leaf_attribute this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_leaf_attribute from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_leaf_attribute_unpack(bcmolt_epon_oam_dpoe_leaf_attribute *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_dpoe_link_state to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_link_state_pack(bcmolt_epon_oam_dpoe_link_state this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_link_state from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_link_state_unpack(bcmolt_epon_oam_dpoe_link_state *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_dpoe_learning_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_learning_mode_pack(bcmolt_epon_oam_dpoe_learning_mode this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_learning_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_learning_mode_unpack(bcmolt_epon_oam_dpoe_learning_mode *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_dpoe_branch to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_branch_pack(bcmolt_epon_oam_dpoe_branch this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_branch from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_branch_unpack(bcmolt_epon_oam_dpoe_branch *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_dpoe_object_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_object_type_pack(bcmolt_epon_oam_dpoe_object_type this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_object_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_object_type_unpack(bcmolt_epon_oam_dpoe_object_type *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_dpoe_encryption_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_encryption_mode_pack(bcmolt_epon_oam_dpoe_encryption_mode this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_encryption_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_encryption_mode_unpack(bcmolt_epon_oam_dpoe_encryption_mode *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_rule_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_rule_type_pack(bcmolt_epon_oam_rule_type this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_rule_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_rule_type_unpack(bcmolt_epon_oam_rule_type *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_dpoe_field_code to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_field_code_pack(bcmolt_epon_oam_dpoe_field_code this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_field_code from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_field_code_unpack(bcmolt_epon_oam_dpoe_field_code *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_rule_operator to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_rule_operator_pack(bcmolt_epon_oam_rule_operator this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_rule_operator from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_rule_operator_unpack(bcmolt_epon_oam_rule_operator *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_dpoe_result to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_result_pack(bcmolt_epon_oam_dpoe_result this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_result from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_result_unpack(bcmolt_epon_oam_dpoe_result *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_dpoe_layer_select to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_layer_select_pack(bcmolt_epon_oam_dpoe_layer_select this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_layer_select from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_layer_select_unpack(bcmolt_epon_oam_dpoe_layer_select *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_traffic_bitmap to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_traffic_bitmap_pack(bcmolt_epon_oam_traffic_bitmap this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_traffic_bitmap from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_traffic_bitmap_unpack(bcmolt_epon_oam_traffic_bitmap *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_rate_units to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_rate_units_pack(bcmolt_epon_oam_rate_units this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_rate_units from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_rate_units_unpack(bcmolt_epon_oam_rate_units *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_dpoe_fec_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_fec_mode_pack(bcmolt_epon_oam_dpoe_fec_mode this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_fec_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_fec_mode_unpack(bcmolt_epon_oam_dpoe_fec_mode *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_dpoe_port_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_port_type_pack(bcmolt_epon_oam_dpoe_port_type this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_port_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_port_type_unpack(bcmolt_epon_oam_dpoe_port_type *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_dpoe_ipmc_forwarding_flags to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_ipmc_forwarding_flags_pack(bcmolt_epon_oam_dpoe_ipmc_forwarding_flags this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_ipmc_forwarding_flags from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_ipmc_forwarding_flags_unpack(bcmolt_epon_oam_dpoe_ipmc_forwarding_flags *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_dpoe_power_saving_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_power_saving_mode_pack(bcmolt_epon_oam_dpoe_power_saving_mode this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_power_saving_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_power_saving_mode_unpack(bcmolt_epon_oam_dpoe_power_saving_mode *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_dpoe_error_code to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_error_code_pack(bcmolt_epon_oam_dpoe_error_code this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_error_code from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_error_code_unpack(bcmolt_epon_oam_dpoe_error_code *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_dpoe_file_transfer_opcode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_file_transfer_opcode_pack(bcmolt_epon_oam_dpoe_file_transfer_opcode this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_file_transfer_opcode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_file_transfer_opcode_unpack(bcmolt_epon_oam_dpoe_file_transfer_opcode *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_dpoe_file_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_file_type_pack(bcmolt_epon_oam_dpoe_file_type this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_file_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_file_type_unpack(bcmolt_epon_oam_dpoe_file_type *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_dpoe_file_transfer_error to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_file_transfer_error_pack(bcmolt_epon_oam_dpoe_file_transfer_error this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_file_transfer_error from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_file_transfer_error_unpack(bcmolt_epon_oam_dpoe_file_transfer_error *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_dpoe_info_tlv_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_info_tlv_type_pack(bcmolt_epon_oam_dpoe_info_tlv_type this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_info_tlv_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_info_tlv_type_unpack(bcmolt_epon_oam_dpoe_info_tlv_type *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_dpoe_mcast_ctrl_action to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_mcast_ctrl_action_pack(bcmolt_epon_oam_dpoe_mcast_ctrl_action this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_mcast_ctrl_action from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_mcast_ctrl_action_unpack(bcmolt_epon_oam_dpoe_mcast_ctrl_action *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_dpoe_mcast_ctrl_resp_code to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_mcast_ctrl_resp_code_pack(bcmolt_epon_oam_dpoe_mcast_ctrl_resp_code this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_mcast_ctrl_resp_code from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_mcast_ctrl_resp_code_unpack(bcmolt_epon_oam_dpoe_mcast_ctrl_resp_code *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_dpoe_mcast_reg_code to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_mcast_reg_code_pack(bcmolt_epon_oam_dpoe_mcast_reg_code this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_mcast_reg_code from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_mcast_reg_code_unpack(bcmolt_epon_oam_dpoe_mcast_reg_code *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_std_phy_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_std_phy_type_pack(bcmolt_epon_oam_std_phy_type this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_std_phy_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_std_phy_type_unpack(bcmolt_epon_oam_std_phy_type *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_oam_state to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_oam_state_pack(bcmolt_epon_oam_oam_state this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_oam_state from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_oam_state_unpack(bcmolt_epon_oam_oam_state *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_mau_media_available to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_mau_media_available_pack(bcmolt_epon_oam_mau_media_available this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_mau_media_available from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_mau_media_available_unpack(bcmolt_epon_oam_mau_media_available *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_std_auto_negoitation_capability to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_std_auto_negoitation_capability_pack(bcmolt_epon_oam_std_auto_negoitation_capability this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_std_auto_negoitation_capability from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_std_auto_negoitation_capability_unpack(bcmolt_epon_oam_std_auto_negoitation_capability *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_mac_duplex_status to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_mac_duplex_status_pack(bcmolt_epon_oam_mac_duplex_status this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_mac_duplex_status from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_mac_duplex_status_unpack(bcmolt_epon_oam_mac_duplex_status *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_fec_support to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_fec_support_pack(bcmolt_epon_oam_fec_support this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_fec_support from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_fec_support_unpack(bcmolt_epon_oam_fec_support *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_std_fec_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_std_fec_mode_pack(bcmolt_epon_oam_std_fec_mode this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_std_fec_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_std_fec_mode_unpack(bcmolt_epon_oam_std_fec_mode *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_dpoe_opcode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_opcode_pack(bcmolt_epon_oam_dpoe_opcode this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_opcode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_opcode_unpack(bcmolt_epon_oam_dpoe_opcode *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_dpoe_version to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_version_pack(bcmolt_epon_oam_dpoe_version this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_version from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_version_unpack(bcmolt_epon_oam_dpoe_version *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_eap_code to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_eap_code_pack(bcmolt_epon_oam_eap_code this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_eap_code from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_eap_code_unpack(bcmolt_epon_oam_eap_code *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tls_subtype to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tls_subtype_pack(bcmolt_epon_oam_tls_subtype this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tls_subtype from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tls_subtype_unpack(bcmolt_epon_oam_tls_subtype *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tls_flags to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tls_flags_pack(bcmolt_epon_oam_tls_flags this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tls_flags from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tls_flags_unpack(bcmolt_epon_oam_tls_flags *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tls_content_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tls_content_type_pack(bcmolt_epon_oam_tls_content_type this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tls_content_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tls_content_type_unpack(bcmolt_epon_oam_tls_content_type *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tls_handshake_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tls_handshake_type_pack(bcmolt_epon_oam_tls_handshake_type this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tls_handshake_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tls_handshake_type_unpack(bcmolt_epon_oam_tls_handshake_type *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tls_ciphersuite to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tls_ciphersuite_pack(bcmolt_epon_oam_tls_ciphersuite this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tls_ciphersuite from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tls_ciphersuite_unpack(bcmolt_epon_oam_tls_ciphersuite *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tls_compression_method to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tls_compression_method_pack(bcmolt_epon_oam_tls_compression_method this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tls_compression_method from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tls_compression_method_unpack(bcmolt_epon_oam_tls_compression_method *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tls_certificate_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tls_certificate_type_pack(bcmolt_epon_oam_tls_certificate_type this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tls_certificate_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tls_certificate_type_unpack(bcmolt_epon_oam_tls_certificate_type *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_eapol_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_eapol_type_pack(bcmolt_epon_oam_eapol_type this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_eapol_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_eapol_type_unpack(bcmolt_epon_oam_eapol_type *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_eapol_version to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_eapol_version_pack(bcmolt_epon_oam_eapol_version this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_eapol_version from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_eapol_version_unpack(bcmolt_epon_oam_eapol_version *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_epoc_cmc_stat_index to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_epoc_cmc_stat_index_pack(bcmolt_epon_oam_epoc_cmc_stat_index this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_epoc_cmc_stat_index from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_epoc_cmc_stat_index_unpack(bcmolt_epon_oam_epoc_cmc_stat_index *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_epoc_cnu_stat_index to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_epoc_cnu_stat_index_pack(bcmolt_epon_oam_epoc_cnu_stat_index this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_epoc_cnu_stat_index from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_epoc_cnu_stat_index_unpack(bcmolt_epon_oam_epoc_cnu_stat_index *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_epoc_sdm250stat_index to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_epoc_sdm250stat_index_pack(bcmolt_epon_oam_epoc_sdm250stat_index this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_epoc_sdm250stat_index from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_epoc_sdm250stat_index_unpack(bcmolt_epon_oam_epoc_sdm250stat_index *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_epoc_stat_gather_modes to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_epoc_stat_gather_modes_pack(bcmolt_epon_oam_epoc_stat_gather_modes this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_epoc_stat_gather_modes from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_epoc_stat_gather_modes_unpack(bcmolt_epon_oam_epoc_stat_gather_modes *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_protocol_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_protocol_type_pack(bcmolt_epon_oam_protocol_type this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_protocol_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_protocol_type_unpack(bcmolt_epon_oam_protocol_type *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_slow_protocol_subtype to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_slow_protocol_subtype_pack(bcmolt_epon_oam_slow_protocol_subtype this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_slow_protocol_subtype from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_slow_protocol_subtype_unpack(bcmolt_epon_oam_slow_protocol_subtype *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_oam_flags to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_oam_flags_pack(bcmolt_epon_oam_oam_flags this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_oam_flags from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_oam_flags_unpack(bcmolt_epon_oam_oam_flags *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_oam_opcode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_oam_opcode_pack(bcmolt_epon_oam_oam_opcode this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_oam_opcode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_oam_opcode_unpack(bcmolt_epon_oam_oam_opcode *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_info_tlv_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_info_tlv_type_pack(bcmolt_epon_oam_info_tlv_type this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_info_tlv_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_info_tlv_type_unpack(bcmolt_epon_oam_info_tlv_type *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tek_info_tlv_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_info_tlv_type_pack(bcmolt_epon_oam_tek_info_tlv_type this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tek_info_tlv_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_info_tlv_type_unpack(bcmolt_epon_oam_tek_info_tlv_type *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tek_report_modes to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_report_modes_pack(bcmolt_epon_oam_tek_report_modes this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tek_report_modes from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_report_modes_unpack(bcmolt_epon_oam_tek_report_modes *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_local_remote_info_state to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_local_remote_info_state_pack(bcmolt_epon_oam_local_remote_info_state this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_local_remote_info_state from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_local_remote_info_state_unpack(bcmolt_epon_oam_local_remote_info_state *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_local_remote_info_config to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_local_remote_info_config_pack(bcmolt_epon_oam_local_remote_info_config this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_local_remote_info_config from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_local_remote_info_config_unpack(bcmolt_epon_oam_local_remote_info_config *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_link_event_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_link_event_type_pack(bcmolt_epon_oam_link_event_type this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_link_event_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_link_event_type_unpack(bcmolt_epon_oam_link_event_type *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tek_alarm_code to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_alarm_code_pack(bcmolt_epon_oam_tek_alarm_code this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tek_alarm_code from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_alarm_code_unpack(bcmolt_epon_oam_tek_alarm_code *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tek_alarm_context to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_alarm_context_pack(bcmolt_epon_oam_tek_alarm_context this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tek_alarm_context from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_alarm_context_unpack(bcmolt_epon_oam_tek_alarm_context *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_var_branch to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_var_branch_pack(bcmolt_epon_oam_var_branch this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_var_branch from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_var_branch_unpack(bcmolt_epon_oam_var_branch *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_var_leaf_object to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_var_leaf_object_pack(bcmolt_epon_oam_var_leaf_object this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_var_leaf_object from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_var_leaf_object_unpack(bcmolt_epon_oam_var_leaf_object *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_var_leaf_package to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_var_leaf_package_pack(bcmolt_epon_oam_var_leaf_package this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_var_leaf_package from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_var_leaf_package_unpack(bcmolt_epon_oam_var_leaf_package *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_var_leaf_name_binding to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_var_leaf_name_binding_pack(bcmolt_epon_oam_var_leaf_name_binding this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_var_leaf_name_binding from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_var_leaf_name_binding_unpack(bcmolt_epon_oam_var_leaf_name_binding *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_remote_loopback_command to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_remote_loopback_command_pack(bcmolt_epon_oam_remote_loopback_command this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_remote_loopback_command from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_remote_loopback_command_unpack(bcmolt_epon_oam_remote_loopback_command *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tek_opcode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_opcode_pack(bcmolt_epon_oam_tek_opcode this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tek_opcode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_opcode_unpack(bcmolt_epon_oam_tek_opcode *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tek_branch to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_branch_pack(bcmolt_epon_oam_tek_branch this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tek_branch from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_branch_unpack(bcmolt_epon_oam_tek_branch *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tek_object_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_object_type_pack(bcmolt_epon_oam_tek_object_type this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tek_object_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_object_type_unpack(bcmolt_epon_oam_tek_object_type *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_flow_direction to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_flow_direction_pack(bcmolt_epon_oam_flow_direction this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_flow_direction from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_flow_direction_unpack(bcmolt_epon_oam_flow_direction *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tek_leaf_attribute to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_leaf_attribute_pack(bcmolt_epon_oam_tek_leaf_attribute this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tek_leaf_attribute from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_leaf_attribute_unpack(bcmolt_epon_oam_tek_leaf_attribute *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tek_leaf_action to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_leaf_action_pack(bcmolt_epon_oam_tek_leaf_action this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tek_leaf_action from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_leaf_action_unpack(bcmolt_epon_oam_tek_leaf_action *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tek_onu_rule_flags to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_onu_rule_flags_pack(bcmolt_epon_oam_tek_onu_rule_flags this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tek_onu_rule_flags from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_onu_rule_flags_unpack(bcmolt_epon_oam_tek_onu_rule_flags *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tek_onu_rule_action to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_onu_rule_action_pack(bcmolt_epon_oam_tek_onu_rule_action this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tek_onu_rule_action from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_onu_rule_action_unpack(bcmolt_epon_oam_tek_onu_rule_action *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tek_onu_field_select to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_onu_field_select_pack(bcmolt_epon_oam_tek_onu_field_select this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tek_onu_field_select from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_onu_field_select_unpack(bcmolt_epon_oam_tek_onu_field_select *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tek_onu_rule_operator to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_onu_rule_operator_pack(bcmolt_epon_oam_tek_onu_rule_operator this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tek_onu_rule_operator from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_onu_rule_operator_unpack(bcmolt_epon_oam_tek_onu_rule_operator *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_onu_psstate to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_onu_psstate_pack(bcmolt_epon_oam_onu_psstate this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_onu_psstate from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_onu_psstate_unpack(bcmolt_epon_oam_onu_psstate *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tek_learn_table_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_learn_table_mode_pack(bcmolt_epon_oam_tek_learn_table_mode this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tek_learn_table_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_learn_table_mode_unpack(bcmolt_epon_oam_tek_learn_table_mode *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tek_vlan_destination_match_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_vlan_destination_match_mode_pack(bcmolt_epon_oam_tek_vlan_destination_match_mode this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tek_vlan_destination_match_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_vlan_destination_match_mode_unpack(bcmolt_epon_oam_tek_vlan_destination_match_mode *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tek_vlan_destination_flags to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_vlan_destination_flags_pack(bcmolt_epon_oam_tek_vlan_destination_flags this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tek_vlan_destination_flags from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_vlan_destination_flags_unpack(bcmolt_epon_oam_tek_vlan_destination_flags *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tek_encryption_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_encryption_mode_pack(bcmolt_epon_oam_tek_encryption_mode this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tek_encryption_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_encryption_mode_unpack(bcmolt_epon_oam_tek_encryption_mode *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tek_encryption_options to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_encryption_options_pack(bcmolt_epon_oam_tek_encryption_options this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tek_encryption_options from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_encryption_options_unpack(bcmolt_epon_oam_tek_encryption_options *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_rule_field_select to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_rule_field_select_pack(bcmolt_epon_oam_rule_field_select this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_rule_field_select from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_rule_field_select_unpack(bcmolt_epon_oam_rule_field_select *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_rule_action to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_rule_action_pack(bcmolt_epon_oam_rule_action this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_rule_action from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_rule_action_unpack(bcmolt_epon_oam_rule_action *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tek_maturity to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_maturity_pack(bcmolt_epon_oam_tek_maturity this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tek_maturity from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_maturity_unpack(bcmolt_epon_oam_tek_maturity *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_file_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_file_type_pack(bcmolt_epon_oam_file_type this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_file_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_file_type_unpack(bcmolt_epon_oam_file_type *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_nvs_state to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_nvs_state_pack(bcmolt_epon_oam_nvs_state this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_nvs_state from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_nvs_state_unpack(bcmolt_epon_oam_nvs_state *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tek_queue_config_v2subtype to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_queue_config_v2subtype_pack(bcmolt_epon_oam_tek_queue_config_v2subtype this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tek_queue_config_v2subtype from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_queue_config_v2subtype_unpack(bcmolt_epon_oam_tek_queue_config_v2subtype *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tek_report_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_report_mode_pack(bcmolt_epon_oam_tek_report_mode this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tek_report_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_report_mode_unpack(bcmolt_epon_oam_tek_report_mode *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tek_feature_set to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_feature_set_pack(bcmolt_epon_oam_tek_feature_set this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tek_feature_set from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_feature_set_unpack(bcmolt_epon_oam_tek_feature_set *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_mcast_snoop_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_mcast_snoop_mode_pack(bcmolt_epon_oam_mcast_snoop_mode this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_mcast_snoop_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_mcast_snoop_mode_unpack(bcmolt_epon_oam_mcast_snoop_mode *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ipmc_global_options to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ipmc_global_options_pack(bcmolt_epon_oam_ipmc_global_options this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ipmc_global_options from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ipmc_global_options_unpack(bcmolt_epon_oam_ipmc_global_options *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_forward_qualifier to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_forward_qualifier_pack(bcmolt_epon_oam_forward_qualifier this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_forward_qualifier from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_forward_qualifier_unpack(bcmolt_epon_oam_forward_qualifier *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tek_holdover_flags to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_holdover_flags_pack(bcmolt_epon_oam_tek_holdover_flags this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tek_holdover_flags from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_holdover_flags_unpack(bcmolt_epon_oam_tek_holdover_flags *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_mdi_mode to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_mdi_mode_pack(bcmolt_epon_oam_mdi_mode this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_mdi_mode from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_mdi_mode_unpack(bcmolt_epon_oam_mdi_mode *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tek_igmp_forwarding_qualifer to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_igmp_forwarding_qualifer_pack(bcmolt_epon_oam_tek_igmp_forwarding_qualifer this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tek_igmp_forwarding_qualifer from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_igmp_forwarding_qualifer_unpack(bcmolt_epon_oam_tek_igmp_forwarding_qualifer *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tek_igmp_snooping_options to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_igmp_snooping_options_pack(bcmolt_epon_oam_tek_igmp_snooping_options this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tek_igmp_snooping_options from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_igmp_snooping_options_unpack(bcmolt_epon_oam_tek_igmp_snooping_options *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_sleep_options to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_sleep_options_pack(bcmolt_epon_oam_sleep_options this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_sleep_options from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_sleep_options_unpack(bcmolt_epon_oam_sleep_options *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ieee_register_flags to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ieee_register_flags_pack(bcmolt_epon_oam_ieee_register_flags this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ieee_register_flags from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ieee_register_flags_unpack(bcmolt_epon_oam_ieee_register_flags *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ieee_register_ack_flags to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ieee_register_ack_flags_pack(bcmolt_epon_oam_ieee_register_ack_flags this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ieee_register_ack_flags from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ieee_register_ack_flags_unpack(bcmolt_epon_oam_ieee_register_ack_flags *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tek_file_transfer_error to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_file_transfer_error_pack(bcmolt_epon_oam_tek_file_transfer_error this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tek_file_transfer_error from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_file_transfer_error_unpack(bcmolt_epon_oam_tek_file_transfer_error *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tek_file_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_file_type_pack(bcmolt_epon_oam_tek_file_type this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tek_file_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tek_file_type_unpack(bcmolt_epon_oam_tek_file_type *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_pmc_op_code to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_pmc_op_code_pack(bcmolt_epon_oam_pmc_op_code this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_pmc_op_code from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_pmc_op_code_unpack(bcmolt_epon_oam_pmc_op_code *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_pmc_file_op to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_pmc_file_op_pack(bcmolt_epon_oam_pmc_file_op this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_pmc_file_op from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_pmc_file_op_unpack(bcmolt_epon_oam_pmc_file_op *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_pmc_error_code to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_pmc_error_code_pack(bcmolt_epon_oam_pmc_error_code this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_pmc_error_code from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_pmc_error_code_unpack(bcmolt_epon_oam_pmc_error_code *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_onu_master_protocol to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_onu_master_protocol_pack(bcmolt_epon_oam_onu_master_protocol this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_onu_master_protocol from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_onu_master_protocol_unpack(bcmolt_epon_oam_onu_master_protocol *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_onu_master_ping_flags to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_onu_master_ping_flags_pack(bcmolt_epon_oam_onu_master_ping_flags this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_onu_master_ping_flags from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_onu_master_ping_flags_unpack(bcmolt_epon_oam_onu_master_ping_flags *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_master_end_point_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_master_end_point_type_pack(bcmolt_epon_oam_master_end_point_type this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_master_end_point_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_master_end_point_type_unpack(bcmolt_epon_oam_master_end_point_type *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_onu_master_communication_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_onu_master_communication_type_pack(bcmolt_epon_oam_onu_master_communication_type this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_onu_master_communication_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_onu_master_communication_type_unpack(bcmolt_epon_oam_onu_master_communication_type *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_onu_master_command_id to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_onu_master_command_id_pack(bcmolt_epon_oam_onu_master_command_id this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_onu_master_command_id from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_onu_master_command_id_unpack(bcmolt_epon_oam_onu_master_command_id *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_oam_registration_action to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_oam_registration_action_pack(bcmolt_epon_oam_oam_registration_action this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_oam_registration_action from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_oam_registration_action_unpack(bcmolt_epon_oam_oam_registration_action *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_oam_reg_info_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_info_type_pack(bcmolt_epon_oam_oam_reg_info_type this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_oam_reg_info_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_info_type_unpack(bcmolt_epon_oam_oam_reg_info_type *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_master_context_type to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_master_context_type_pack(bcmolt_epon_oam_master_context_type this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_master_context_type from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_master_context_type_unpack(bcmolt_epon_oam_master_context_type *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_version to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_version_pack(bcmolt_epon_oam_ctc_version this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_version from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_version_unpack(bcmolt_epon_oam_ctc_version *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_onu_master_response_code to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_onu_master_response_code_pack(bcmolt_epon_oam_onu_master_response_code this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_onu_master_response_code from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_onu_master_response_code_unpack(bcmolt_epon_oam_onu_master_response_code *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_onu_state to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_onu_state_pack(bcmolt_epon_oam_onu_state this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_onu_state from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_onu_state_unpack(bcmolt_epon_oam_onu_state *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_mdi_crossover to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_mdi_crossover_pack(bcmolt_epon_oam_mdi_crossover this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_mdi_crossover from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_mdi_crossover_unpack(bcmolt_epon_oam_mdi_crossover *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_sdm_stat to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_sdm_stat_pack(bcmolt_epon_oam_sdm_stat this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_sdm_stat from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_sdm_stat_unpack(bcmolt_epon_oam_sdm_stat *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tls_hash_algorithm to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tls_hash_algorithm_pack(bcmolt_epon_oam_tls_hash_algorithm this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tls_hash_algorithm from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tls_hash_algorithm_unpack(bcmolt_epon_oam_tls_hash_algorithm *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tls_signature_algorithm to bytes 
+ *
+ * \param this The enumeration to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the pack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tls_signature_algorithm_pack(bcmolt_epon_oam_tls_signature_algorithm this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tls_signature_algorithm from bytes 
+ *
+ * \param this Pointer to the enumeration to unpack 
+ * \param buf Pointer to the buffer to write to 
+ * \return Whether or not the unpack was successful 
+ */
+bcmos_bool bcmolt_epon_oam_tls_signature_algorithm_unpack(bcmolt_epon_oam_tls_signature_algorithm *this, bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_binary_entry_cvid to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_binary_entry_cvid_pack(bcmolt_epon_oam_binary_entry_cvid *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_binary_entry_cvid from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_binary_entry_cvid_unpack(bcmolt_epon_oam_binary_entry_cvid *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_binary_entry_cvid struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_binary_entry_cvid_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_binary_entry_mac to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_binary_entry_mac_pack(bcmolt_epon_oam_binary_entry_mac *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_binary_entry_mac from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_binary_entry_mac_unpack(bcmolt_epon_oam_binary_entry_mac *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_binary_entry_mac struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_binary_entry_mac_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_binary_entry_programmable to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_binary_entry_programmable_pack(bcmolt_epon_oam_binary_entry_programmable *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_binary_entry_programmable from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_binary_entry_programmable_unpack(bcmolt_epon_oam_binary_entry_programmable *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_binary_entry_programmable struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_binary_entry_programmable_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_binary_entry_ssm_ip to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_binary_entry_ssm_ip_pack(bcmolt_epon_oam_binary_entry_ssm_ip *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_binary_entry_ssm_ip from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_binary_entry_ssm_ip_unpack(bcmolt_epon_oam_binary_entry_ssm_ip *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_binary_entry_ssm_ip struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_binary_entry_ssm_ip_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_binary_entry_svlan_plus_cvlan to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_binary_entry_svlan_plus_cvlan_pack(bcmolt_epon_oam_binary_entry_svlan_plus_cvlan *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_binary_entry_svlan_plus_cvlan from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_binary_entry_svlan_plus_cvlan_unpack(bcmolt_epon_oam_binary_entry_svlan_plus_cvlan *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_binary_entry_svlan_plus_cvlan struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_binary_entry_svlan_plus_cvlan_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_brcm_channel_option to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_channel_option_pack(bcmolt_epon_oam_brcm_channel_option *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_brcm_channel_option from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_channel_option_unpack(bcmolt_epon_oam_brcm_channel_option *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_brcm_channel_option struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_channel_option_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_brcm_channel_result to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_channel_result_pack(bcmolt_epon_oam_brcm_channel_result *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_brcm_channel_result from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_channel_result_unpack(bcmolt_epon_oam_brcm_channel_result *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_brcm_channel_result struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_channel_result_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_brcm_cmc_classifier_config_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cmc_classifier_config_data_pack(bcmolt_epon_oam_brcm_cmc_classifier_config_data *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a 
+ * bcmolt_epon_oam_brcm_cmc_classifier_config_data would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_brcm_cmc_classifier_config_data_get_packed_length(bcmolt_epon_oam_brcm_cmc_classifier_config_data *this);
+
+/** Unpacks a bcmolt_epon_oam_brcm_cmc_classifier_config_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cmc_classifier_config_data_unpack(bcmolt_epon_oam_brcm_cmc_classifier_config_data *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_brcm_cmc_classifier_config_data struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cmc_classifier_config_data_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_brcm_cmc_interface_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cmc_interface_data_pack(bcmolt_epon_oam_brcm_cmc_interface_data *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_brcm_cmc_interface_data 
+ * would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_brcm_cmc_interface_data_get_packed_length(bcmolt_epon_oam_brcm_cmc_interface_data *this);
+
+/** Unpacks a bcmolt_epon_oam_brcm_cmc_interface_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cmc_interface_data_unpack(bcmolt_epon_oam_brcm_cmc_interface_data *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_brcm_cmc_interface_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cmc_interface_data_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_brcm_cmc_intf_stats_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cmc_intf_stats_data_pack(bcmolt_epon_oam_brcm_cmc_intf_stats_data *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_brcm_cmc_intf_stats_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cmc_intf_stats_data_unpack(bcmolt_epon_oam_brcm_cmc_intf_stats_data *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_brcm_cmc_intf_stats_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cmc_intf_stats_data_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_brcm_cmc_sf_config_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cmc_sf_config_data_pack(bcmolt_epon_oam_brcm_cmc_sf_config_data *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_brcm_cmc_sf_config_data 
+ * would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_brcm_cmc_sf_config_data_get_packed_length(bcmolt_epon_oam_brcm_cmc_sf_config_data *this);
+
+/** Unpacks a bcmolt_epon_oam_brcm_cmc_sf_config_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cmc_sf_config_data_unpack(bcmolt_epon_oam_brcm_cmc_sf_config_data *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_brcm_cmc_sf_config_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cmc_sf_config_data_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_brcm_cmc_sf_stats_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cmc_sf_stats_data_pack(bcmolt_epon_oam_brcm_cmc_sf_stats_data *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_brcm_cmc_sf_stats_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cmc_sf_stats_data_unpack(bcmolt_epon_oam_brcm_cmc_sf_stats_data *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_brcm_cmc_sf_stats_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cmc_sf_stats_data_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_brcm_cnu_mac_addr_range to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cnu_mac_addr_range_pack(bcmolt_epon_oam_brcm_cnu_mac_addr_range *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_brcm_cnu_mac_addr_range from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cnu_mac_addr_range_unpack(bcmolt_epon_oam_brcm_cnu_mac_addr_range *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_brcm_cnu_mac_addr_range struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cnu_mac_addr_range_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_brcm_cnu_us_chan_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cnu_us_chan_data_pack(bcmolt_epon_oam_brcm_cnu_us_chan_data *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_brcm_cnu_us_chan_data would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_brcm_cnu_us_chan_data_get_packed_length(bcmolt_epon_oam_brcm_cnu_us_chan_data *this);
+
+/** Unpacks a bcmolt_epon_oam_brcm_cnu_us_chan_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cnu_us_chan_data_unpack(bcmolt_epon_oam_brcm_cnu_us_chan_data *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_brcm_cnu_us_chan_data struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cnu_us_chan_data_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_brcm_cnu_status_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cnu_status_data_pack(bcmolt_epon_oam_brcm_cnu_status_data *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_brcm_cnu_status_data would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_brcm_cnu_status_data_get_packed_length(bcmolt_epon_oam_brcm_cnu_status_data *this);
+
+/** Unpacks a bcmolt_epon_oam_brcm_cnu_status_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cnu_status_data_unpack(bcmolt_epon_oam_brcm_cnu_status_data *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_brcm_cnu_status_data struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_cnu_status_data_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_brcm_downstream_channel_properties to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_downstream_channel_properties_pack(bcmolt_epon_oam_brcm_downstream_channel_properties *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_brcm_downstream_channel_properties from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_downstream_channel_properties_unpack(bcmolt_epon_oam_brcm_downstream_channel_properties *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_brcm_downstream_channel_properties 
+ * struct and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_downstream_channel_properties_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_brcm_upstream_channel_properties to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_upstream_channel_properties_pack(bcmolt_epon_oam_brcm_upstream_channel_properties *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_brcm_upstream_channel_properties from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_upstream_channel_properties_unpack(bcmolt_epon_oam_brcm_upstream_channel_properties *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_brcm_upstream_channel_properties struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_upstream_channel_properties_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_brcm_upstream_signal_quality to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_upstream_signal_quality_pack(bcmolt_epon_oam_brcm_upstream_signal_quality *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_brcm_upstream_signal_quality from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_upstream_signal_quality_unpack(bcmolt_epon_oam_brcm_upstream_signal_quality *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_brcm_upstream_signal_quality struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_upstream_signal_quality_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_brcm_upstream_channel_power to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_upstream_channel_power_pack(bcmolt_epon_oam_brcm_upstream_channel_power *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_brcm_upstream_channel_power from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_upstream_channel_power_unpack(bcmolt_epon_oam_brcm_upstream_channel_power *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_brcm_upstream_channel_power struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_upstream_channel_power_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_brcm_oam_pdu_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_oam_pdu_base_pack(bcmolt_epon_oam_brcm_oam_pdu_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_brcm_oam_pdu_base would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_brcm_oam_pdu_base_get_packed_length(bcmolt_epon_oam_brcm_oam_pdu_base *this);
+
+/** Unpacks a bcmolt_epon_oam_brcm_oam_pdu_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_oam_pdu_base_unpack(bcmolt_epon_oam_brcm_oam_pdu_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_brcm_oam_pdu_base struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_brcm_oam_pdu_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_certificate to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_certificate_pack(bcmolt_epon_oam_certificate *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_certificate would occupy on 
+ * the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_certificate_get_packed_length(bcmolt_epon_oam_certificate *this);
+
+/** Unpacks a bcmolt_epon_oam_certificate from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_certificate_unpack(bcmolt_epon_oam_certificate *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_certificate struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_certificate_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_ctc_action_value to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_action_value_pack(bcmolt_epon_oam_ctc_action_value *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_ctc_action_value would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_ctc_action_value_get_packed_length(bcmolt_epon_oam_ctc_action_value *this);
+
+/** Unpacks a bcmolt_epon_oam_ctc_action_value from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_action_value_unpack(bcmolt_epon_oam_ctc_action_value *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ctc_action_value struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_action_value_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_ctc_alarm_entry to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_alarm_entry_pack(bcmolt_epon_oam_ctc_alarm_entry *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_ctc_alarm_entry would occupy 
+ * on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_ctc_alarm_entry_get_packed_length(bcmolt_epon_oam_ctc_alarm_entry *this);
+
+/** Unpacks a bcmolt_epon_oam_ctc_alarm_entry from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_alarm_entry_unpack(bcmolt_epon_oam_ctc_alarm_entry *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ctc_alarm_entry struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_alarm_entry_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_ctc_attribute_value_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_attribute_value_base_pack(bcmolt_epon_oam_ctc_attribute_value_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_ctc_attribute_value_base 
+ * would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_ctc_attribute_value_base_get_packed_length(bcmolt_epon_oam_ctc_attribute_value_base *this);
+
+/** Unpacks a bcmolt_epon_oam_ctc_attribute_value_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_attribute_value_base_unpack(bcmolt_epon_oam_ctc_attribute_value_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ctc_attribute_value_base struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_attribute_value_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_ctc_churning_prov_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_churning_prov_base_pack(bcmolt_epon_oam_ctc_churning_prov_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_ctc_churning_prov_base would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_ctc_churning_prov_base_get_packed_length(bcmolt_epon_oam_ctc_churning_prov_base *this);
+
+/** Unpacks a bcmolt_epon_oam_ctc_churning_prov_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_churning_prov_base_unpack(bcmolt_epon_oam_ctc_churning_prov_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ctc_churning_prov_base struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_churning_prov_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_ctc_commit_image_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_commit_image_base_pack(bcmolt_epon_oam_ctc_commit_image_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_ctc_commit_image_base would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_ctc_commit_image_base_get_packed_length(bcmolt_epon_oam_ctc_commit_image_base *this);
+
+/** Unpacks a bcmolt_epon_oam_ctc_commit_image_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_commit_image_base_unpack(bcmolt_epon_oam_ctc_commit_image_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ctc_commit_image_base struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_commit_image_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_ctc_dba_queue_set to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_dba_queue_set_pack(bcmolt_epon_oam_ctc_dba_queue_set *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_dba_queue_set from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_dba_queue_set_unpack(bcmolt_epon_oam_ctc_dba_queue_set *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ctc_dba_queue_set struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_dba_queue_set_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_ctc_dba_prov_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_dba_prov_base_pack(bcmolt_epon_oam_ctc_dba_prov_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_ctc_dba_prov_base would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_ctc_dba_prov_base_get_packed_length(bcmolt_epon_oam_ctc_dba_prov_base *this);
+
+/** Unpacks a bcmolt_epon_oam_ctc_dba_prov_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_dba_prov_base_unpack(bcmolt_epon_oam_ctc_dba_prov_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ctc_dba_prov_base struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_dba_prov_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_ctc_old_management_object_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_old_management_object_base_pack(bcmolt_epon_oam_ctc_old_management_object_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a 
+ * bcmolt_epon_oam_ctc_old_management_object_base would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_ctc_old_management_object_base_get_packed_length(bcmolt_epon_oam_ctc_old_management_object_base *this);
+
+/** Unpacks a bcmolt_epon_oam_ctc_old_management_object_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_old_management_object_base_unpack(bcmolt_epon_oam_ctc_old_management_object_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ctc_old_management_object_base struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_old_management_object_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_ctc_management_object_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_management_object_base_pack(bcmolt_epon_oam_ctc_management_object_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_ctc_management_object_base 
+ * would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_ctc_management_object_base_get_packed_length(bcmolt_epon_oam_ctc_management_object_base *this);
+
+/** Unpacks a bcmolt_epon_oam_ctc_management_object_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_management_object_base_unpack(bcmolt_epon_oam_ctc_management_object_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ctc_management_object_base struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_management_object_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_ctc_empty_var_container_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_empty_var_container_base_pack(bcmolt_epon_oam_ctc_empty_var_container_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_ctc_empty_var_container_base 
+ * would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_ctc_empty_var_container_base_get_packed_length(bcmolt_epon_oam_ctc_empty_var_container_base *this);
+
+/** Unpacks a bcmolt_epon_oam_ctc_empty_var_container_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_empty_var_container_base_unpack(bcmolt_epon_oam_ctc_empty_var_container_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ctc_empty_var_container_base struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_empty_var_container_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_ctc_empty_var_container_base_end_count_unknown(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_eth_port_policing_config_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_eth_port_policing_config_base_pack(bcmolt_epon_oam_ctc_eth_port_policing_config_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a 
+ * bcmolt_epon_oam_ctc_eth_port_policing_config_base would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_ctc_eth_port_policing_config_base_get_packed_length(bcmolt_epon_oam_ctc_eth_port_policing_config_base *this);
+
+/** Unpacks a bcmolt_epon_oam_ctc_eth_port_policing_config_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_eth_port_policing_config_base_unpack(bcmolt_epon_oam_ctc_eth_port_policing_config_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ctc_eth_port_policing_config_base struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_eth_port_policing_config_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_ctc_eth_port_policing_config_base_def_count_unknown(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_event_entry to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_event_entry_pack(bcmolt_epon_oam_ctc_event_entry *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_event_entry from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_event_entry_unpack(bcmolt_epon_oam_ctc_event_entry *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ctc_event_entry struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_event_entry_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_ctc_event_status_entry to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_event_status_entry_pack(bcmolt_epon_oam_ctc_event_status_entry *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_event_status_entry from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_event_status_entry_unpack(bcmolt_epon_oam_ctc_event_status_entry *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ctc_event_status_entry struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_event_status_entry_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_ctc_event_threshold_entry to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_event_threshold_entry_pack(bcmolt_epon_oam_ctc_event_threshold_entry *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_event_threshold_entry from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_event_threshold_entry_unpack(bcmolt_epon_oam_ctc_event_threshold_entry *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ctc_event_threshold_entry struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_event_threshold_entry_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_ctc_event_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_event_base_pack(bcmolt_epon_oam_ctc_event_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_ctc_event_base would occupy 
+ * on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_ctc_event_base_get_packed_length(bcmolt_epon_oam_ctc_event_base *this);
+
+/** Unpacks a bcmolt_epon_oam_ctc_event_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_event_base_unpack(bcmolt_epon_oam_ctc_event_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ctc_event_base struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_event_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_ctc_ext_action_value_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_ext_action_value_base_pack(bcmolt_epon_oam_ctc_ext_action_value_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_ctc_ext_action_value_base 
+ * would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_ctc_ext_action_value_base_get_packed_length(bcmolt_epon_oam_ctc_ext_action_value_base *this);
+
+/** Unpacks a bcmolt_epon_oam_ctc_ext_action_value_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_ext_action_value_base_unpack(bcmolt_epon_oam_ctc_ext_action_value_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ctc_ext_action_value_base struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_ext_action_value_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_ctc_onu_service_sla_table to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_onu_service_sla_table_pack(bcmolt_epon_oam_ctc_onu_service_sla_table *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_onu_service_sla_table from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_onu_service_sla_table_unpack(bcmolt_epon_oam_ctc_onu_service_sla_table *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ctc_onu_service_sla_table struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_onu_service_sla_table_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_ctc_onu_service_sla_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_onu_service_sla_base_pack(bcmolt_epon_oam_ctc_onu_service_sla_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_ctc_onu_service_sla_base 
+ * would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_ctc_onu_service_sla_base_get_packed_length(bcmolt_epon_oam_ctc_onu_service_sla_base *this);
+
+/** Unpacks a bcmolt_epon_oam_ctc_onu_service_sla_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_onu_service_sla_base_unpack(bcmolt_epon_oam_ctc_onu_service_sla_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ctc_onu_service_sla_base struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_onu_service_sla_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_ctc_onu_service_sla_base_def_count_services(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_onu_interface to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_onu_interface_pack(bcmolt_epon_oam_ctc_onu_interface *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_onu_interface from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_onu_interface_unpack(bcmolt_epon_oam_ctc_onu_interface *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ctc_onu_interface struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_onu_interface_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_ctc_mxu_global_params_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_mxu_global_params_base_pack(bcmolt_epon_oam_ctc_mxu_global_params_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_ctc_mxu_global_params_base 
+ * would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_ctc_mxu_global_params_base_get_packed_length(bcmolt_epon_oam_ctc_mxu_global_params_base *this);
+
+/** Unpacks a bcmolt_epon_oam_ctc_mxu_global_params_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_mxu_global_params_base_unpack(bcmolt_epon_oam_ctc_mxu_global_params_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ctc_mxu_global_params_base struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_mxu_global_params_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_ctc_mxu_snmp_params_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_mxu_snmp_params_base_pack(bcmolt_epon_oam_ctc_mxu_snmp_params_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_ctc_mxu_snmp_params_base 
+ * would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_ctc_mxu_snmp_params_base_get_packed_length(bcmolt_epon_oam_ctc_mxu_snmp_params_base *this);
+
+/** Unpacks a bcmolt_epon_oam_ctc_mxu_snmp_params_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_mxu_snmp_params_base_unpack(bcmolt_epon_oam_ctc_mxu_snmp_params_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ctc_mxu_snmp_params_base struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_mxu_snmp_params_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_ctc_vlan_element to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_vlan_element_pack(bcmolt_epon_oam_ctc_vlan_element *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_vlan_element from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_vlan_element_unpack(bcmolt_epon_oam_ctc_vlan_element *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ctc_vlan_element struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_vlan_element_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_ctc_vlan_translation to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_vlan_translation_pack(bcmolt_epon_oam_ctc_vlan_translation *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_vlan_translation from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_vlan_translation_unpack(bcmolt_epon_oam_ctc_vlan_translation *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ctc_vlan_translation struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_vlan_translation_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_ctc_vlan_aggregate_table to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_vlan_aggregate_table_pack(bcmolt_epon_oam_ctc_vlan_aggregate_table *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_ctc_vlan_aggregate_table 
+ * would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_ctc_vlan_aggregate_table_get_packed_length(bcmolt_epon_oam_ctc_vlan_aggregate_table *this);
+
+/** Unpacks a bcmolt_epon_oam_ctc_vlan_aggregate_table from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_vlan_aggregate_table_unpack(bcmolt_epon_oam_ctc_vlan_aggregate_table *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ctc_vlan_aggregate_table struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_vlan_aggregate_table_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_ctc_vlan_prov_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_vlan_prov_base_pack(bcmolt_epon_oam_ctc_vlan_prov_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_ctc_vlan_prov_base would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_ctc_vlan_prov_base_get_packed_length(bcmolt_epon_oam_ctc_vlan_prov_base *this);
+
+/** Unpacks a bcmolt_epon_oam_ctc_vlan_prov_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_vlan_prov_base_unpack(bcmolt_epon_oam_ctc_vlan_prov_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ctc_vlan_prov_base struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_vlan_prov_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_ctc_vlan_prov_base_translation_count_translations(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_ctc_vlan_prov_base_trunk_count_permitted_vlans(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_ctc_vlan_prov_base_trunk_mdu_count_permitted_vlans(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_ctc_vlan_prov_base_hybrid_count_permitted_vlans(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_onu_classif_clause_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_onu_classif_clause_base_pack(bcmolt_epon_oam_ctc_onu_classif_clause_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_ctc_onu_classif_clause_base 
+ * would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_ctc_onu_classif_clause_base_get_packed_length(bcmolt_epon_oam_ctc_onu_classif_clause_base *this);
+
+/** Unpacks a bcmolt_epon_oam_ctc_onu_classif_clause_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_onu_classif_clause_base_unpack(bcmolt_epon_oam_ctc_onu_classif_clause_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ctc_onu_classif_clause_base struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_onu_classif_clause_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_ctc_rule to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_rule_pack(bcmolt_epon_oam_ctc_rule *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_ctc_rule would occupy on the 
+ * wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_ctc_rule_get_packed_length(bcmolt_epon_oam_ctc_rule *this);
+
+/** Unpacks a bcmolt_epon_oam_ctc_rule from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_rule_unpack(bcmolt_epon_oam_ctc_rule *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ctc_rule struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_rule_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_ctc_multicast_vlan_prov to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_multicast_vlan_prov_pack(bcmolt_epon_oam_ctc_multicast_vlan_prov *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_ctc_multicast_vlan_prov 
+ * would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_ctc_multicast_vlan_prov_get_packed_length(bcmolt_epon_oam_ctc_multicast_vlan_prov *this);
+
+/** Unpacks a bcmolt_epon_oam_ctc_multicast_vlan_prov from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_multicast_vlan_prov_unpack(bcmolt_epon_oam_ctc_multicast_vlan_prov *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ctc_multicast_vlan_prov struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_multicast_vlan_prov_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_ctc_multicast_vlan_prov_delete_count_multicast_vlans(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_ctc_multicast_vlan_prov_add_count_multicast_vlans(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_ctc_multicast_vlan_prov_list_count_multicast_vlans(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_iptv_vlan_entry to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_iptv_vlan_entry_pack(bcmolt_epon_oam_ctc_iptv_vlan_entry *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_iptv_vlan_entry from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_iptv_vlan_entry_unpack(bcmolt_epon_oam_ctc_iptv_vlan_entry *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ctc_iptv_vlan_entry struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_iptv_vlan_entry_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_ctc_multicast_tag_operation_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_multicast_tag_operation_base_pack(bcmolt_epon_oam_ctc_multicast_tag_operation_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a 
+ * bcmolt_epon_oam_ctc_multicast_tag_operation_base would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_ctc_multicast_tag_operation_base_get_packed_length(bcmolt_epon_oam_ctc_multicast_tag_operation_base *this);
+
+/** Unpacks a bcmolt_epon_oam_ctc_multicast_tag_operation_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_multicast_tag_operation_base_unpack(bcmolt_epon_oam_ctc_multicast_tag_operation_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ctc_multicast_tag_operation_base struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_multicast_tag_operation_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_only to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_only_pack(bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_only *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_only from 
+ * bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_only_unpack(bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_only *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_only 
+ * struct and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_only_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_vlan_id to 
+ * bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_vlan_id_pack(bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_vlan_id *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_vlan_id 
+ * from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_vlan_id_unpack(bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_vlan_id *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed 
+ * bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_vlan_id struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_vlan_id_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_ipv4sa to 
+ * bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_ipv4sa_pack(bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_ipv4sa *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_ipv4sa 
+ * from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_ipv4sa_unpack(bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_ipv4sa *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed 
+ * bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_ipv4sa struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_ipv4sa_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_ctc_multicast_control_entry_gda_ipplus_mcast_vlan_id 
+ * to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_entry_gda_ipplus_mcast_vlan_id_pack(bcmolt_epon_oam_ctc_multicast_control_entry_gda_ipplus_mcast_vlan_id *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a 
+ * bcmolt_epon_oam_ctc_multicast_control_entry_gda_ipplus_mcast_vlan_id from 
+ * bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_entry_gda_ipplus_mcast_vlan_id_unpack(bcmolt_epon_oam_ctc_multicast_control_entry_gda_ipplus_mcast_vlan_id *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed 
+ * bcmolt_epon_oam_ctc_multicast_control_entry_gda_ipplus_mcast_vlan_id struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_entry_gda_ipplus_mcast_vlan_id_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a 
+ * bcmolt_epon_oam_ctc_multicast_control_entry_gda_ipv6plus_mcast_vlan_id to 
+ * bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_entry_gda_ipv6plus_mcast_vlan_id_pack(bcmolt_epon_oam_ctc_multicast_control_entry_gda_ipv6plus_mcast_vlan_id *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a 
+ * bcmolt_epon_oam_ctc_multicast_control_entry_gda_ipv6plus_mcast_vlan_id from 
+ * bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_entry_gda_ipv6plus_mcast_vlan_id_unpack(bcmolt_epon_oam_ctc_multicast_control_entry_gda_ipv6plus_mcast_vlan_id *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed 
+ * bcmolt_epon_oam_ctc_multicast_control_entry_gda_ipv6plus_mcast_vlan_id 
+ * struct and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_entry_gda_ipv6plus_mcast_vlan_id_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_ipv6sa to 
+ * bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_ipv6sa_pack(bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_ipv6sa *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_ipv6sa 
+ * from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_ipv6sa_unpack(bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_ipv6sa *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed 
+ * bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_ipv6sa struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_entry_gda_mac_plus_ipv6sa_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_ctc_multicast_control to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_pack(bcmolt_epon_oam_ctc_multicast_control *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_ctc_multicast_control would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_ctc_multicast_control_get_packed_length(bcmolt_epon_oam_ctc_multicast_control *this);
+
+/** Unpacks a bcmolt_epon_oam_ctc_multicast_control from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_unpack(bcmolt_epon_oam_ctc_multicast_control *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ctc_multicast_control struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_multicast_control_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_ctc_multicast_control_gda_mac_only_count_entries(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_ctc_multicast_control_gda_mac_plus_vlan_id_count_entries(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_ctc_multicast_control_gda_mac_plus_ipv4sa_count_entries(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_ctc_multicast_control_gda_ipplus_mcast_vlan_id_count_entries(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_ctc_multicast_control_gda_ipv6plus_mcast_vlan_id_count_entries(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_ctc_multicast_control_gda_mac_plus_ipv6sa_count_entries(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_onu_llid_queue to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_onu_llid_queue_pack(bcmolt_epon_oam_ctc_onu_llid_queue *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_onu_llid_queue from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_onu_llid_queue_unpack(bcmolt_epon_oam_ctc_onu_llid_queue *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ctc_onu_llid_queue struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_onu_llid_queue_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_zte_vlan_mac to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_zte_vlan_mac_pack(bcmolt_epon_oam_zte_vlan_mac *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_zte_vlan_mac from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_zte_vlan_mac_unpack(bcmolt_epon_oam_zte_vlan_mac *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_zte_vlan_mac struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_zte_vlan_mac_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_ctc_ext_attribute_value_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_ext_attribute_value_base_pack(bcmolt_epon_oam_ctc_ext_attribute_value_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_ctc_ext_attribute_value_base 
+ * would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_ctc_ext_attribute_value_base_get_packed_length(bcmolt_epon_oam_ctc_ext_attribute_value_base *this);
+
+/** Unpacks a bcmolt_epon_oam_ctc_ext_attribute_value_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_ext_attribute_value_base_unpack(bcmolt_epon_oam_ctc_ext_attribute_value_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ctc_ext_attribute_value_base struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_ext_attribute_value_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_ctc_ext_attribute_value_base_def_count_unknown(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_ctc_ext_attribute_value_base_end_count_unknown(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_ctc_ext_attribute_value_base_firmware_version_count_firmware_version(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_file_check_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_file_check_base_pack(bcmolt_epon_oam_ctc_file_check_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_ctc_file_check_base would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_ctc_file_check_base_get_packed_length(bcmolt_epon_oam_ctc_file_check_base *this);
+
+/** Unpacks a bcmolt_epon_oam_ctc_file_check_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_file_check_base_unpack(bcmolt_epon_oam_ctc_file_check_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ctc_file_check_base struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_file_check_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_ctc_oui_version_pair to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_oui_version_pair_pack(bcmolt_epon_oam_ctc_oui_version_pair *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_oui_version_pair from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_oui_version_pair_unpack(bcmolt_epon_oam_ctc_oui_version_pair *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ctc_oui_version_pair struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_oui_version_pair_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_ctc_performance_monitoring_data to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_performance_monitoring_data_pack(bcmolt_epon_oam_ctc_performance_monitoring_data *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ctc_performance_monitoring_data from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_performance_monitoring_data_unpack(bcmolt_epon_oam_ctc_performance_monitoring_data *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ctc_performance_monitoring_data struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_performance_monitoring_data_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_ctc_tftp_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_tftp_base_pack(bcmolt_epon_oam_ctc_tftp_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_ctc_tftp_base would occupy 
+ * on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_ctc_tftp_base_get_packed_length(bcmolt_epon_oam_ctc_tftp_base *this);
+
+/** Unpacks a bcmolt_epon_oam_ctc_tftp_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_tftp_base_unpack(bcmolt_epon_oam_ctc_tftp_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ctc_tftp_base struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_tftp_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_ctc_tftp_base_write_request_count_filename(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_ctc_tftp_base_write_request_count_mode(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_ctc_tftp_base_data_count_data(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_ctc_tftp_base_error_count_message(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_swmirror_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_swmirror_base_pack(bcmolt_epon_oam_ctc_swmirror_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_ctc_swmirror_base would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_ctc_swmirror_base_get_packed_length(bcmolt_epon_oam_ctc_swmirror_base *this);
+
+/** Unpacks a bcmolt_epon_oam_ctc_swmirror_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_swmirror_base_unpack(bcmolt_epon_oam_ctc_swmirror_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ctc_swmirror_base struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_swmirror_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_ctc_software_download_prov_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_software_download_prov_base_pack(bcmolt_epon_oam_ctc_software_download_prov_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a 
+ * bcmolt_epon_oam_ctc_software_download_prov_base would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_ctc_software_download_prov_base_get_packed_length(bcmolt_epon_oam_ctc_software_download_prov_base *this);
+
+/** Unpacks a bcmolt_epon_oam_ctc_software_download_prov_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_software_download_prov_base_unpack(bcmolt_epon_oam_ctc_software_download_prov_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ctc_software_download_prov_base struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_software_download_prov_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_ktqueue_drop_counter to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ktqueue_drop_counter_pack(bcmolt_epon_oam_ktqueue_drop_counter *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_ktqueue_drop_counter from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ktqueue_drop_counter_unpack(bcmolt_epon_oam_ktqueue_drop_counter *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ktqueue_drop_counter struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ktqueue_drop_counter_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_ktattribute_value_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ktattribute_value_base_pack(bcmolt_epon_oam_ktattribute_value_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_ktattribute_value_base would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_ktattribute_value_base_get_packed_length(bcmolt_epon_oam_ktattribute_value_base *this);
+
+/** Unpacks a bcmolt_epon_oam_ktattribute_value_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ktattribute_value_base_unpack(bcmolt_epon_oam_ktattribute_value_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ktattribute_value_base struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ktattribute_value_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_ktaction_value_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ktaction_value_base_pack(bcmolt_epon_oam_ktaction_value_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_ktaction_value_base would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_ktaction_value_base_get_packed_length(bcmolt_epon_oam_ktaction_value_base *this);
+
+/** Unpacks a bcmolt_epon_oam_ktaction_value_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ktaction_value_base_unpack(bcmolt_epon_oam_ktaction_value_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ktaction_value_base struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ktaction_value_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_ktaction_value_base_restore_onu_count_unknown(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_var_container_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_var_container_base_pack(bcmolt_epon_oam_ctc_var_container_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_ctc_var_container_base would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_ctc_var_container_base_get_packed_length(bcmolt_epon_oam_ctc_var_container_base *this);
+
+/** Unpacks a bcmolt_epon_oam_ctc_var_container_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_var_container_base_unpack(bcmolt_epon_oam_ctc_var_container_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ctc_var_container_base struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_var_container_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_ctc_var_container_base_end_count_unknown(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ctc_var_descriptor to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_var_descriptor_pack(bcmolt_epon_oam_ctc_var_descriptor *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_ctc_var_descriptor would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_ctc_var_descriptor_get_packed_length(bcmolt_epon_oam_ctc_var_descriptor *this);
+
+/** Unpacks a bcmolt_epon_oam_ctc_var_descriptor from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_var_descriptor_unpack(bcmolt_epon_oam_ctc_var_descriptor *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ctc_var_descriptor struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_var_descriptor_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_ctc_var_descriptor_end_count_unknown(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ktonu_event_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ktonu_event_base_pack(bcmolt_epon_oam_ktonu_event_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_ktonu_event_base would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_ktonu_event_base_get_packed_length(bcmolt_epon_oam_ktonu_event_base *this);
+
+/** Unpacks a bcmolt_epon_oam_ktonu_event_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ktonu_event_base_unpack(bcmolt_epon_oam_ktonu_event_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ktonu_event_base struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ktonu_event_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_ctc_vendor_extended_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_vendor_extended_base_pack(bcmolt_epon_oam_ctc_vendor_extended_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_ctc_vendor_extended_base 
+ * would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_ctc_vendor_extended_base_get_packed_length(bcmolt_epon_oam_ctc_vendor_extended_base *this);
+
+/** Unpacks a bcmolt_epon_oam_ctc_vendor_extended_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_vendor_extended_base_unpack(bcmolt_epon_oam_ctc_vendor_extended_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ctc_vendor_extended_base struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ctc_vendor_extended_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_ctc_vendor_extended_base_get_request_count_vars(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_ctc_vendor_extended_base_get_response_count_vars(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_ctc_vendor_extended_base_set_request_count_vars(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_ctc_vendor_extended_base_set_response_count_vars(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_ctc_vendor_extended_base_software_download_count_messages(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_ctc_vendor_extended_base_ktonu_event_count_events(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_dasan_classifier_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_classifier_base_pack(bcmolt_epon_oam_dasan_classifier_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_dasan_classifier_base would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_dasan_classifier_base_get_packed_length(bcmolt_epon_oam_dasan_classifier_base *this);
+
+/** Unpacks a bcmolt_epon_oam_dasan_classifier_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_classifier_base_unpack(bcmolt_epon_oam_dasan_classifier_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_dasan_classifier_base struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_classifier_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_dasan_port to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_port_pack(bcmolt_epon_oam_dasan_port *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dasan_port from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_port_unpack(bcmolt_epon_oam_dasan_port *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_dasan_port struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_port_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_dasan_vlan to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_vlan_pack(bcmolt_epon_oam_dasan_vlan *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dasan_vlan from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_vlan_unpack(bcmolt_epon_oam_dasan_vlan *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_dasan_vlan struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_vlan_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_dasan_vlan_port to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_vlan_port_pack(bcmolt_epon_oam_dasan_vlan_port *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_dasan_vlan_port would occupy 
+ * on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_dasan_vlan_port_get_packed_length(bcmolt_epon_oam_dasan_vlan_port *this);
+
+/** Unpacks a bcmolt_epon_oam_dasan_vlan_port from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_vlan_port_unpack(bcmolt_epon_oam_dasan_vlan_port *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_dasan_vlan_port struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_vlan_port_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_dasan_port_config to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_port_config_pack(bcmolt_epon_oam_dasan_port_config *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dasan_port_config from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_port_config_unpack(bcmolt_epon_oam_dasan_port_config *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_dasan_port_config struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_port_config_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_dasan_port_stats to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_port_stats_pack(bcmolt_epon_oam_dasan_port_stats *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dasan_port_stats from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_port_stats_unpack(bcmolt_epon_oam_dasan_port_stats *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_dasan_port_stats struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_port_stats_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_dasan_port_error_stats to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_port_error_stats_pack(bcmolt_epon_oam_dasan_port_error_stats *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dasan_port_error_stats from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_port_error_stats_unpack(bcmolt_epon_oam_dasan_port_error_stats *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_dasan_port_error_stats struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_port_error_stats_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_dasan_stats_seq_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_stats_seq_base_pack(bcmolt_epon_oam_dasan_stats_seq_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_dasan_stats_seq_base would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_dasan_stats_seq_base_get_packed_length(bcmolt_epon_oam_dasan_stats_seq_base *this);
+
+/** Unpacks a bcmolt_epon_oam_dasan_stats_seq_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_stats_seq_base_unpack(bcmolt_epon_oam_dasan_stats_seq_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_dasan_stats_seq_base struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_stats_seq_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_dasan_stat_value to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_stat_value_pack(bcmolt_epon_oam_dasan_stat_value *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dasan_stat_value from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_stat_value_unpack(bcmolt_epon_oam_dasan_stat_value *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_dasan_stat_value struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_stat_value_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_dasan_config_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_config_base_pack(bcmolt_epon_oam_dasan_config_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_dasan_config_base would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_dasan_config_base_get_packed_length(bcmolt_epon_oam_dasan_config_base *this);
+
+/** Unpacks a bcmolt_epon_oam_dasan_config_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_config_base_unpack(bcmolt_epon_oam_dasan_config_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_dasan_config_base struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_dasan_config_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_dasan_config_base_onu_statistic_count_sequences(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_distinguished_name to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_distinguished_name_pack(bcmolt_epon_oam_distinguished_name *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_distinguished_name would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_distinguished_name_get_packed_length(bcmolt_epon_oam_distinguished_name *this);
+
+/** Unpacks a bcmolt_epon_oam_distinguished_name from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_distinguished_name_unpack(bcmolt_epon_oam_distinguished_name *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_distinguished_name struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_distinguished_name_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_distinguished_name_list to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_distinguished_name_list_pack(bcmolt_epon_oam_distinguished_name_list *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_distinguished_name_list 
+ * would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_distinguished_name_list_get_packed_length(bcmolt_epon_oam_distinguished_name_list *this);
+
+/** Unpacks a bcmolt_epon_oam_distinguished_name_list from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_distinguished_name_list_unpack(bcmolt_epon_oam_distinguished_name_list *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_distinguished_name_list struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_distinguished_name_list_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_distinguished_name_list_count_names(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_dpoe_mac_table to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_mac_table_pack(bcmolt_epon_oam_dpoe_mac_table *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_dpoe_mac_table would occupy 
+ * on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_dpoe_mac_table_get_packed_length(bcmolt_epon_oam_dpoe_mac_table *this);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_mac_table from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_mac_table_unpack(bcmolt_epon_oam_dpoe_mac_table *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_dpoe_mac_table struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_mac_table_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_dpoe_mac_table_count_mac_address(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_dpoe_action_value_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_action_value_base_pack(bcmolt_epon_oam_dpoe_action_value_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_dpoe_action_value_base would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_dpoe_action_value_base_get_packed_length(bcmolt_epon_oam_dpoe_action_value_base *this);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_action_value_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_action_value_base_unpack(bcmolt_epon_oam_dpoe_action_value_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_dpoe_action_value_base struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_action_value_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_dpoe_queue_set to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_queue_set_pack(bcmolt_epon_oam_dpoe_queue_set *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_dpoe_queue_set would occupy 
+ * on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_dpoe_queue_set_get_packed_length(bcmolt_epon_oam_dpoe_queue_set *this);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_queue_set from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_queue_set_unpack(bcmolt_epon_oam_dpoe_queue_set *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_dpoe_queue_set struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_queue_set_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_dpoe_queue to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_queue_pack(bcmolt_epon_oam_dpoe_queue *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_queue from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_queue_unpack(bcmolt_epon_oam_dpoe_queue *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_dpoe_queue struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_queue_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_dpoe_object_context_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_object_context_base_pack(bcmolt_epon_oam_dpoe_object_context_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_dpoe_object_context_base 
+ * would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_dpoe_object_context_base_get_packed_length(bcmolt_epon_oam_dpoe_object_context_base *this);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_object_context_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_object_context_base_unpack(bcmolt_epon_oam_dpoe_object_context_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_dpoe_object_context_base struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_object_context_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_dpoe_object_context_base_network_pon_count_pon(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_dpoe_object_context_base_link_count_link(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_dpoe_object_context_base_user_port_count_port(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_dpoe_object_context_base_bridge_count_bridge(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_dpoe_object_context_base_bridge_port_count_port(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_dpoe_var_descriptor to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_var_descriptor_pack(bcmolt_epon_oam_dpoe_var_descriptor *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_dpoe_var_descriptor would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_dpoe_var_descriptor_get_packed_length(bcmolt_epon_oam_dpoe_var_descriptor *this);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_var_descriptor from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_var_descriptor_unpack(bcmolt_epon_oam_dpoe_var_descriptor *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_dpoe_var_descriptor struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_var_descriptor_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_dpoe_var_descriptor_end_count_unknown(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_dpoe_statistic_threshold to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_statistic_threshold_pack(bcmolt_epon_oam_dpoe_statistic_threshold *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_dpoe_statistic_threshold 
+ * would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_dpoe_statistic_threshold_get_packed_length(bcmolt_epon_oam_dpoe_statistic_threshold *this);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_statistic_threshold from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_statistic_threshold_unpack(bcmolt_epon_oam_dpoe_statistic_threshold *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_dpoe_statistic_threshold struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_statistic_threshold_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_dpoe_field to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_field_pack(bcmolt_epon_oam_dpoe_field *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_field from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_field_unpack(bcmolt_epon_oam_dpoe_field *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_dpoe_field struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_field_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_dpoe_rule_result_field_v2 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_rule_result_field_v2_pack(bcmolt_epon_oam_dpoe_rule_result_field_v2 *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_rule_result_field_v2 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_rule_result_field_v2_unpack(bcmolt_epon_oam_dpoe_rule_result_field_v2 *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_dpoe_rule_result_field_v2 struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_rule_result_field_v2_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_dpoe_rule_result_field to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_rule_result_field_pack(bcmolt_epon_oam_dpoe_rule_result_field *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_rule_result_field from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_rule_result_field_unpack(bcmolt_epon_oam_dpoe_rule_result_field *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_dpoe_rule_result_field struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_rule_result_field_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_dpoe_rule_result to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_rule_result_pack(bcmolt_epon_oam_dpoe_rule_result *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_dpoe_rule_result would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_dpoe_rule_result_get_packed_length(bcmolt_epon_oam_dpoe_rule_result *this);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_rule_result from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_rule_result_unpack(bcmolt_epon_oam_dpoe_rule_result *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_dpoe_rule_result struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_rule_result_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_dpoe_rule_result_set_count_value(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_dpoe_rule to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_rule_pack(bcmolt_epon_oam_dpoe_rule *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_dpoe_rule would occupy on 
+ * the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_dpoe_rule_get_packed_length(bcmolt_epon_oam_dpoe_rule *this);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_rule from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_rule_unpack(bcmolt_epon_oam_dpoe_rule *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_dpoe_rule struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_rule_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_dpoe_shaper to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_shaper_pack(bcmolt_epon_oam_dpoe_shaper *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_shaper from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_shaper_unpack(bcmolt_epon_oam_dpoe_shaper *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_dpoe_shaper struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_shaper_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_dpoe_rate_level to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_rate_level_pack(bcmolt_epon_oam_dpoe_rate_level *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_rate_level from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_rate_level_unpack(bcmolt_epon_oam_dpoe_rate_level *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_dpoe_rate_level struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_rate_level_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_dpoe_event_options to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_event_options_pack(bcmolt_epon_oam_dpoe_event_options *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_event_options from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_event_options_unpack(bcmolt_epon_oam_dpoe_event_options *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_dpoe_event_options struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_event_options_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_u16_list_u8 to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_u16_list_u8_pack(bcmolt_epon_oam_u16_list_u8 *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_u16_list_u8 would occupy on 
+ * the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_u16_list_u8_get_packed_length(bcmolt_epon_oam_u16_list_u8 *this);
+
+/** Unpacks a bcmolt_epon_oam_u16_list_u8 from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_u16_list_u8_unpack(bcmolt_epon_oam_u16_list_u8 *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_u16_list_u8 struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_u16_list_u8_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_dpoe_attribute_value_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_attribute_value_base_pack(bcmolt_epon_oam_dpoe_attribute_value_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_dpoe_attribute_value_base 
+ * would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_dpoe_attribute_value_base_get_packed_length(bcmolt_epon_oam_dpoe_attribute_value_base *this);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_attribute_value_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_attribute_value_base_unpack(bcmolt_epon_oam_dpoe_attribute_value_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_dpoe_attribute_value_base struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_attribute_value_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_dpoe_attribute_value_base_def_count_unknown(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_dpoe_attribute_value_base_manufacturer_info_count_def(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_dpoe_attribute_value_base_firmware_filename_count_firmware_filename(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_dpoe_attribute_value_base_mfr_name_count_man_name(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_dpoe_attribute_value_base_vendor_name_count_vendor_name(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_dpoe_attribute_value_base_model_number_count_model_number(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_dpoe_attribute_value_base_hw_version_count_hw_version(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_dpoe_attribute_value_base_opt_mon_temperature_count_current_temperature(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_dpoe_attribute_value_base_opt_mon_vcc_count_current_vcc(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_dpoe_attribute_value_base_opt_mon_tx_bias_count_current_tx_bias(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_dpoe_attribute_value_base_opt_mon_tx_power_count_current_tx_power(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_dpoe_attribute_value_base_opt_mon_rx_power_count_current_rx_power(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_dpoe_attribute_value_base_donu_port_type_count_port_type(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_dpoe_attribute_value_base_suspend_resume_alarm_reporting_count_def(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_dpoe_attribute_value_base_time_transfer_count_tod_string(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_dpoe_attribute_value_mac_table to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_attribute_value_mac_table_pack(bcmolt_epon_oam_dpoe_attribute_value_mac_table *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a 
+ * bcmolt_epon_oam_dpoe_attribute_value_mac_table would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_dpoe_attribute_value_mac_table_get_packed_length(bcmolt_epon_oam_dpoe_attribute_value_mac_table *this);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_attribute_value_mac_table from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_attribute_value_mac_table_unpack(bcmolt_epon_oam_dpoe_attribute_value_mac_table *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_dpoe_attribute_value_mac_table struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_attribute_value_mac_table_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_dpoe_attribute_value_mac_table_count_mac_address(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_dpoe_event_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_event_base_pack(bcmolt_epon_oam_dpoe_event_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_dpoe_event_base would occupy 
+ * on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_dpoe_event_base_get_packed_length(bcmolt_epon_oam_dpoe_event_base *this);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_event_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_event_base_unpack(bcmolt_epon_oam_dpoe_event_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_dpoe_event_base struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_event_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_dpoe_file_transfer_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_file_transfer_base_pack(bcmolt_epon_oam_dpoe_file_transfer_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_dpoe_file_transfer_base 
+ * would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_dpoe_file_transfer_base_get_packed_length(bcmolt_epon_oam_dpoe_file_transfer_base *this);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_file_transfer_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_file_transfer_base_unpack(bcmolt_epon_oam_dpoe_file_transfer_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_dpoe_file_transfer_base struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_file_transfer_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_dpoe_file_transfer_base_file_write_count_filename(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_dpoe_info_tlv to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_info_tlv_pack(bcmolt_epon_oam_dpoe_info_tlv *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_dpoe_info_tlv would occupy 
+ * on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_dpoe_info_tlv_get_packed_length(bcmolt_epon_oam_dpoe_info_tlv *this);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_info_tlv from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_info_tlv_unpack(bcmolt_epon_oam_dpoe_info_tlv *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_dpoe_info_tlv struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_info_tlv_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_u8value to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_u8value_pack(bcmolt_epon_oam_u8value *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_u8value from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_u8value_unpack(bcmolt_epon_oam_u8value *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_u8value struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_u8value_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_u64value to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_u64value_pack(bcmolt_epon_oam_u64value *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_u64value from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_u64value_unpack(bcmolt_epon_oam_u64value *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_u64value struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_u64value_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_std_attribute_value to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_std_attribute_value_pack(bcmolt_epon_oam_std_attribute_value *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_std_attribute_value would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_std_attribute_value_get_packed_length(bcmolt_epon_oam_std_attribute_value *this);
+
+/** Unpacks a bcmolt_epon_oam_std_attribute_value from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_std_attribute_value_unpack(bcmolt_epon_oam_std_attribute_value *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_std_attribute_value struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_std_attribute_value_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_std_attribute_value_auto_neg_local_tech_ability_count_capabilities(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_std_attribute_value_auto_neg_advertised_tech_ability_count_capabilities(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_std_attribute_value_auto_neg_rx_tech_count_capabilities(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_std_attribute_value_mac_ctrl_funcs_supported_count_functions(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_std_action_value_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_std_action_value_base_pack(bcmolt_epon_oam_std_action_value_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_std_action_value_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_std_action_value_base_unpack(bcmolt_epon_oam_std_action_value_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_std_action_value_base struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_std_action_value_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_dpoe_var_container_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_var_container_base_pack(bcmolt_epon_oam_dpoe_var_container_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_dpoe_var_container_base 
+ * would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_dpoe_var_container_base_get_packed_length(bcmolt_epon_oam_dpoe_var_container_base *this);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_var_container_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_var_container_base_unpack(bcmolt_epon_oam_dpoe_var_container_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_dpoe_var_container_base struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_var_container_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_dpoe_var_container_base_end_count_unknown(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_dpoe_vendor_extended_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_vendor_extended_base_pack(bcmolt_epon_oam_dpoe_vendor_extended_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_dpoe_vendor_extended_base 
+ * would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_dpoe_vendor_extended_base_get_packed_length(bcmolt_epon_oam_dpoe_vendor_extended_base *this);
+
+/** Unpacks a bcmolt_epon_oam_dpoe_vendor_extended_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_vendor_extended_base_unpack(bcmolt_epon_oam_dpoe_vendor_extended_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_dpoe_vendor_extended_base struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_dpoe_vendor_extended_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_dpoe_vendor_extended_base_get_request_count_vars(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_dpoe_vendor_extended_base_get_response_count_vars(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_dpoe_vendor_extended_base_set_request_count_vars(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_dpoe_vendor_extended_base_set_response_count_vars(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tls_version to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tls_version_pack(bcmolt_epon_oam_tls_version *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tls_version from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tls_version_unpack(bcmolt_epon_oam_tls_version *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_tls_version struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_tls_version_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_tls_random to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tls_random_pack(bcmolt_epon_oam_tls_random *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tls_random from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tls_random_unpack(bcmolt_epon_oam_tls_random *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_tls_random struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_tls_random_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_tls_session_id to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tls_session_id_pack(bcmolt_epon_oam_tls_session_id *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_tls_session_id would occupy 
+ * on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_tls_session_id_get_packed_length(bcmolt_epon_oam_tls_session_id *this);
+
+/** Unpacks a bcmolt_epon_oam_tls_session_id from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tls_session_id_unpack(bcmolt_epon_oam_tls_session_id *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_tls_session_id struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_tls_session_id_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_tls_ciphersuite_list to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tls_ciphersuite_list_pack(bcmolt_epon_oam_tls_ciphersuite_list *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_tls_ciphersuite_list would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_tls_ciphersuite_list_get_packed_length(bcmolt_epon_oam_tls_ciphersuite_list *this);
+
+/** Unpacks a bcmolt_epon_oam_tls_ciphersuite_list from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tls_ciphersuite_list_unpack(bcmolt_epon_oam_tls_ciphersuite_list *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_tls_ciphersuite_list struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_tls_ciphersuite_list_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_tls_compression_list to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tls_compression_list_pack(bcmolt_epon_oam_tls_compression_list *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_tls_compression_list would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_tls_compression_list_get_packed_length(bcmolt_epon_oam_tls_compression_list *this);
+
+/** Unpacks a bcmolt_epon_oam_tls_compression_list from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tls_compression_list_unpack(bcmolt_epon_oam_tls_compression_list *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_tls_compression_list struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_tls_compression_list_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_tls_certificate_list to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tls_certificate_list_pack(bcmolt_epon_oam_tls_certificate_list *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_tls_certificate_list would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_tls_certificate_list_get_packed_length(bcmolt_epon_oam_tls_certificate_list *this);
+
+/** Unpacks a bcmolt_epon_oam_tls_certificate_list from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tls_certificate_list_unpack(bcmolt_epon_oam_tls_certificate_list *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_tls_certificate_list struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_tls_certificate_list_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_tls_certificate_list_count_certificate_list(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tls_certificate_type_list to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tls_certificate_type_list_pack(bcmolt_epon_oam_tls_certificate_type_list *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_tls_certificate_type_list 
+ * would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_tls_certificate_type_list_get_packed_length(bcmolt_epon_oam_tls_certificate_type_list *this);
+
+/** Unpacks a bcmolt_epon_oam_tls_certificate_type_list from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tls_certificate_type_list_unpack(bcmolt_epon_oam_tls_certificate_type_list *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_tls_certificate_type_list struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_tls_certificate_type_list_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_tls_handshake to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tls_handshake_pack(bcmolt_epon_oam_tls_handshake *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_tls_handshake would occupy 
+ * on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_tls_handshake_get_packed_length(bcmolt_epon_oam_tls_handshake *this);
+
+/** Unpacks a bcmolt_epon_oam_tls_handshake from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tls_handshake_unpack(bcmolt_epon_oam_tls_handshake *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_tls_handshake struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_tls_handshake_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_tls_handshake_finished_count_verify_data(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tls_record to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tls_record_pack(bcmolt_epon_oam_tls_record *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_tls_record would occupy on 
+ * the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_tls_record_get_packed_length(bcmolt_epon_oam_tls_record *this);
+
+/** Unpacks a bcmolt_epon_oam_tls_record from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tls_record_unpack(bcmolt_epon_oam_tls_record *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_tls_record struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_tls_record_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_tls_record_handshake_count_handshake_records(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_eap_tls_message to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_eap_tls_message_pack(bcmolt_epon_oam_eap_tls_message *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_eap_tls_message would occupy 
+ * on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_eap_tls_message_get_packed_length(bcmolt_epon_oam_eap_tls_message *this);
+
+/** Unpacks a bcmolt_epon_oam_eap_tls_message from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_eap_tls_message_unpack(bcmolt_epon_oam_eap_tls_message *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_eap_tls_message struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_eap_tls_message_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_eap_tls_message_count_tls_records(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_eap_tls_header to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_eap_tls_header_pack(bcmolt_epon_oam_eap_tls_header *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_eap_tls_header would occupy 
+ * on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_eap_tls_header_get_packed_length(bcmolt_epon_oam_eap_tls_header *this);
+
+/** Unpacks a bcmolt_epon_oam_eap_tls_header from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_eap_tls_header_unpack(bcmolt_epon_oam_eap_tls_header *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_eap_tls_header struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_eap_tls_header_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_eap_frame to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_eap_frame_pack(bcmolt_epon_oam_eap_frame *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_eap_frame would occupy on 
+ * the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_eap_frame_get_packed_length(bcmolt_epon_oam_eap_frame *this);
+
+/** Unpacks a bcmolt_epon_oam_eap_frame from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_eap_frame_unpack(bcmolt_epon_oam_eap_frame *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_eap_frame struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_eap_frame_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_eapol_pdu to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_eapol_pdu_pack(bcmolt_epon_oam_eapol_pdu *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_eapol_pdu would occupy on 
+ * the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_eapol_pdu_get_packed_length(bcmolt_epon_oam_eapol_pdu *this);
+
+/** Unpacks a bcmolt_epon_oam_eapol_pdu from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_eapol_pdu_unpack(bcmolt_epon_oam_eapol_pdu *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_eapol_pdu struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_eapol_pdu_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_eapol_protocol to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_eapol_protocol_pack(bcmolt_epon_oam_eapol_protocol *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_eapol_protocol would occupy 
+ * on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_eapol_protocol_get_packed_length(bcmolt_epon_oam_eapol_protocol *this);
+
+/** Unpacks a bcmolt_epon_oam_eapol_protocol from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_eapol_protocol_unpack(bcmolt_epon_oam_eapol_protocol *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_eapol_protocol struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_eapol_protocol_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_vlan_value to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_vlan_value_pack(bcmolt_epon_oam_vlan_value *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_vlan_value from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_vlan_value_unpack(bcmolt_epon_oam_vlan_value *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_vlan_value struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_vlan_value_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_itag_value to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_itag_value_pack(bcmolt_epon_oam_itag_value *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_itag_value from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_itag_value_unpack(bcmolt_epon_oam_itag_value *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_itag_value struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_itag_value_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_tek_info_tlv to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_info_tlv_pack(bcmolt_epon_oam_tek_info_tlv *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_tek_info_tlv would occupy on 
+ * the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_tek_info_tlv_get_packed_length(bcmolt_epon_oam_tek_info_tlv *this);
+
+/** Unpacks a bcmolt_epon_oam_tek_info_tlv from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_info_tlv_unpack(bcmolt_epon_oam_tek_info_tlv *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_tek_info_tlv struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_tek_info_tlv_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_organization_specific_info to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_organization_specific_info_pack(bcmolt_epon_oam_organization_specific_info *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_organization_specific_info 
+ * would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_organization_specific_info_get_packed_length(bcmolt_epon_oam_organization_specific_info *this);
+
+/** Unpacks a bcmolt_epon_oam_organization_specific_info from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_organization_specific_info_unpack(bcmolt_epon_oam_organization_specific_info *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_organization_specific_info struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_organization_specific_info_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_organization_specific_info_ctc_count_supp_version(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_local_remote_info to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_local_remote_info_pack(bcmolt_epon_oam_local_remote_info *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_local_remote_info from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_local_remote_info_unpack(bcmolt_epon_oam_local_remote_info *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_local_remote_info struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_local_remote_info_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_info_tlv_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_info_tlv_base_pack(bcmolt_epon_oam_info_tlv_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_info_tlv_base would occupy 
+ * on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_info_tlv_base_get_packed_length(bcmolt_epon_oam_info_tlv_base *this);
+
+/** Unpacks a bcmolt_epon_oam_info_tlv_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_info_tlv_base_unpack(bcmolt_epon_oam_info_tlv_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_info_tlv_base struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_info_tlv_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_info_tlv_base_end_count_unknown(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_organization_specific_link_event_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_organization_specific_link_event_base_pack(bcmolt_epon_oam_organization_specific_link_event_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a 
+ * bcmolt_epon_oam_organization_specific_link_event_base would occupy on the 
+ * wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_organization_specific_link_event_base_get_packed_length(bcmolt_epon_oam_organization_specific_link_event_base *this);
+
+/** Unpacks a bcmolt_epon_oam_organization_specific_link_event_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_organization_specific_link_event_base_unpack(bcmolt_epon_oam_organization_specific_link_event_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_organization_specific_link_event_base 
+ * struct and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_organization_specific_link_event_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_link_event_tlv_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_link_event_tlv_base_pack(bcmolt_epon_oam_link_event_tlv_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_link_event_tlv_base would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_link_event_tlv_base_get_packed_length(bcmolt_epon_oam_link_event_tlv_base *this);
+
+/** Unpacks a bcmolt_epon_oam_link_event_tlv_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_link_event_tlv_base_unpack(bcmolt_epon_oam_link_event_tlv_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_link_event_tlv_base struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_link_event_tlv_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_link_event_tlv_base_end_count_unknown(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_var_descriptor_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_var_descriptor_base_pack(bcmolt_epon_oam_var_descriptor_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_var_descriptor_base would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_var_descriptor_base_get_packed_length(bcmolt_epon_oam_var_descriptor_base *this);
+
+/** Unpacks a bcmolt_epon_oam_var_descriptor_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_var_descriptor_base_unpack(bcmolt_epon_oam_var_descriptor_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_var_descriptor_base struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_var_descriptor_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_var_descriptor_base_end_count_unknown(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_var_container_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_var_container_base_pack(bcmolt_epon_oam_var_container_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_var_container_base would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_var_container_base_get_packed_length(bcmolt_epon_oam_var_container_base *this);
+
+/** Unpacks a bcmolt_epon_oam_var_container_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_var_container_base_unpack(bcmolt_epon_oam_var_container_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_var_container_base struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_var_container_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_var_container_base_end_count_unknown(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_var_container_base_object_count_value(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_var_container_base_package_count_value(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_var_container_base_name_binding_count_value(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_var_container_base_attribute_count_value(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_var_container_base_action_count_value(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tek_object_queue_name to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_object_queue_name_pack(bcmolt_epon_oam_tek_object_queue_name *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tek_object_queue_name from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_object_queue_name_unpack(bcmolt_epon_oam_tek_object_queue_name *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_tek_object_queue_name struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_tek_object_queue_name_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_tek_object_context to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_object_context_pack(bcmolt_epon_oam_tek_object_context *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_tek_object_context would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_tek_object_context_get_packed_length(bcmolt_epon_oam_tek_object_context *this);
+
+/** Unpacks a bcmolt_epon_oam_tek_object_context from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_object_context_unpack(bcmolt_epon_oam_tek_object_context *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_tek_object_context struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_tek_object_context_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_tek_object_context_logical_link_count_link_number(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_tek_object_context_port_count_port_number(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_tek_object_context_network_pon_count_pon_number(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_tek_object_context_user_pon_count_pon_number(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_tek_object_context_bridge_count_bridge_number(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_tek_object_context_bridge_port_count_port_number(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tek_var_descriptor to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_var_descriptor_pack(bcmolt_epon_oam_tek_var_descriptor *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_tek_var_descriptor would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_tek_var_descriptor_get_packed_length(bcmolt_epon_oam_tek_var_descriptor *this);
+
+/** Unpacks a bcmolt_epon_oam_tek_var_descriptor from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_var_descriptor_unpack(bcmolt_epon_oam_tek_var_descriptor *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_tek_var_descriptor struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_tek_var_descriptor_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_tek_var_descriptor_end_count_unknown(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_lue_field_select_entry to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_lue_field_select_entry_pack(bcmolt_epon_oam_lue_field_select_entry *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_lue_field_select_entry from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_lue_field_select_entry_unpack(bcmolt_epon_oam_lue_field_select_entry *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_lue_field_select_entry struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_lue_field_select_entry_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_tek_onu_rule_clause to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_onu_rule_clause_pack(bcmolt_epon_oam_tek_onu_rule_clause *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tek_onu_rule_clause from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_onu_rule_clause_unpack(bcmolt_epon_oam_tek_onu_rule_clause *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_tek_onu_rule_clause struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_tek_onu_rule_clause_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_tek_onu_rule to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_onu_rule_pack(bcmolt_epon_oam_tek_onu_rule *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_tek_onu_rule would occupy on 
+ * the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_tek_onu_rule_get_packed_length(bcmolt_epon_oam_tek_onu_rule *this);
+
+/** Unpacks a bcmolt_epon_oam_tek_onu_rule from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_onu_rule_unpack(bcmolt_epon_oam_tek_onu_rule *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_tek_onu_rule struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_tek_onu_rule_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_tek_onu_igmp_vlan to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_onu_igmp_vlan_pack(bcmolt_epon_oam_tek_onu_igmp_vlan *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tek_onu_igmp_vlan from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_onu_igmp_vlan_unpack(bcmolt_epon_oam_tek_onu_igmp_vlan *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_tek_onu_igmp_vlan struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_tek_onu_igmp_vlan_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_tek_vlan_destination_mapping to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_vlan_destination_mapping_pack(bcmolt_epon_oam_tek_vlan_destination_mapping *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tek_vlan_destination_mapping from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_vlan_destination_mapping_unpack(bcmolt_epon_oam_tek_vlan_destination_mapping *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_tek_vlan_destination_mapping struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_tek_vlan_destination_mapping_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_tek_firmware_timestamp to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_firmware_timestamp_pack(bcmolt_epon_oam_tek_firmware_timestamp *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tek_firmware_timestamp from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_firmware_timestamp_unpack(bcmolt_epon_oam_tek_firmware_timestamp *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_tek_firmware_timestamp struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_tek_firmware_timestamp_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_rule_entry to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_rule_entry_pack(bcmolt_epon_oam_rule_entry *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_rule_entry would occupy on 
+ * the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_rule_entry_get_packed_length(bcmolt_epon_oam_rule_entry *this);
+
+/** Unpacks a bcmolt_epon_oam_rule_entry from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_rule_entry_unpack(bcmolt_epon_oam_rule_entry *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_rule_entry struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_rule_entry_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_tek_attribute_value_rule to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_attribute_value_rule_pack(bcmolt_epon_oam_tek_attribute_value_rule *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_tek_attribute_value_rule 
+ * would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_tek_attribute_value_rule_get_packed_length(bcmolt_epon_oam_tek_attribute_value_rule *this);
+
+/** Unpacks a bcmolt_epon_oam_tek_attribute_value_rule from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_attribute_value_rule_unpack(bcmolt_epon_oam_tek_attribute_value_rule *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_tek_attribute_value_rule struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_tek_attribute_value_rule_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_tek_attribute_value_rule_clause_count_match_value(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_tek_attribute_value_rule_result_count_parameter(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_uni_shaper to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_uni_shaper_pack(bcmolt_epon_oam_uni_shaper *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_uni_shaper from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_uni_shaper_unpack(bcmolt_epon_oam_uni_shaper *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_uni_shaper struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_uni_shaper_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_extended_version_number to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_extended_version_number_pack(bcmolt_epon_oam_extended_version_number *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_extended_version_number from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_extended_version_number_unpack(bcmolt_epon_oam_extended_version_number *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_extended_version_number struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_extended_version_number_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_extended_load_label to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_extended_load_label_pack(bcmolt_epon_oam_extended_load_label *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_extended_load_label from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_extended_load_label_unpack(bcmolt_epon_oam_extended_load_label *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_extended_load_label struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_extended_load_label_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_file_info_firmware to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_file_info_firmware_pack(bcmolt_epon_oam_file_info_firmware *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_file_info_firmware from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_file_info_firmware_unpack(bcmolt_epon_oam_file_info_firmware *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_file_info_firmware struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_file_info_firmware_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_file_info_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_file_info_base_pack(bcmolt_epon_oam_file_info_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_file_info_base would occupy 
+ * on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_file_info_base_get_packed_length(bcmolt_epon_oam_file_info_base *this);
+
+/** Unpacks a bcmolt_epon_oam_file_info_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_file_info_base_unpack(bcmolt_epon_oam_file_info_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_file_info_base struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_file_info_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_oam_epoc_bit_load to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_epoc_bit_load_pack(bcmolt_epon_oam_oam_epoc_bit_load *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_oam_epoc_bit_load from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_epoc_bit_load_unpack(bcmolt_epon_oam_oam_epoc_bit_load *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_oam_epoc_bit_load struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_oam_epoc_bit_load_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_oam_epoc_bit_loading to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_epoc_bit_loading_pack(bcmolt_epon_oam_oam_epoc_bit_loading *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_oam_epoc_bit_loading from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_epoc_bit_loading_unpack(bcmolt_epon_oam_oam_epoc_bit_loading *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_oam_epoc_bit_loading struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_oam_epoc_bit_loading_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_oam_epoc_stat to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_epoc_stat_pack(bcmolt_epon_oam_oam_epoc_stat *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_oam_epoc_stat would occupy 
+ * on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_oam_epoc_stat_get_packed_length(bcmolt_epon_oam_oam_epoc_stat *this);
+
+/** Unpacks a bcmolt_epon_oam_oam_epoc_stat from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_epoc_stat_unpack(bcmolt_epon_oam_oam_epoc_stat *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_oam_epoc_stat struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_oam_epoc_stat_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_oam_epoc_stat_count_value(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tek_queue_config_v2priority to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_queue_config_v2priority_pack(bcmolt_epon_oam_tek_queue_config_v2priority *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_tek_queue_config_v2priority 
+ * would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_tek_queue_config_v2priority_get_packed_length(bcmolt_epon_oam_tek_queue_config_v2priority *this);
+
+/** Unpacks a bcmolt_epon_oam_tek_queue_config_v2priority from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_queue_config_v2priority_unpack(bcmolt_epon_oam_tek_queue_config_v2priority *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_tek_queue_config_v2priority struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_tek_queue_config_v2priority_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_tek_queue_config_v2base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_queue_config_v2base_pack(bcmolt_epon_oam_tek_queue_config_v2base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_tek_queue_config_v2base 
+ * would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_tek_queue_config_v2base_get_packed_length(bcmolt_epon_oam_tek_queue_config_v2base *this);
+
+/** Unpacks a bcmolt_epon_oam_tek_queue_config_v2base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_queue_config_v2base_unpack(bcmolt_epon_oam_tek_queue_config_v2base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_tek_queue_config_v2base struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_tek_queue_config_v2base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_tek_sequence_number to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_sequence_number_pack(bcmolt_epon_oam_tek_sequence_number *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tek_sequence_number from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_sequence_number_unpack(bcmolt_epon_oam_tek_sequence_number *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_tek_sequence_number struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_tek_sequence_number_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_onu_clock_transport_config to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_onu_clock_transport_config_pack(bcmolt_epon_oam_onu_clock_transport_config *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_onu_clock_transport_config from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_onu_clock_transport_config_unpack(bcmolt_epon_oam_onu_clock_transport_config *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_onu_clock_transport_config struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_onu_clock_transport_config_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_oam_mcast_domain_port_info to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_mcast_domain_port_info_pack(bcmolt_epon_oam_oam_mcast_domain_port_info *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_oam_mcast_domain_port_info from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_mcast_domain_port_info_unpack(bcmolt_epon_oam_oam_mcast_domain_port_info *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_oam_mcast_domain_port_info struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_oam_mcast_domain_port_info_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_oam_mcast_domain_info to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_mcast_domain_info_pack(bcmolt_epon_oam_oam_mcast_domain_info *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_oam_mcast_domain_info would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_oam_mcast_domain_info_get_packed_length(bcmolt_epon_oam_oam_mcast_domain_info *this);
+
+/** Unpacks a bcmolt_epon_oam_oam_mcast_domain_info from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_mcast_domain_info_unpack(bcmolt_epon_oam_oam_mcast_domain_info *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_oam_mcast_domain_info struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_oam_mcast_domain_info_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_oam_mcast_domain_record to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_mcast_domain_record_pack(bcmolt_epon_oam_oam_mcast_domain_record *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_oam_mcast_domain_record 
+ * would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_oam_mcast_domain_record_get_packed_length(bcmolt_epon_oam_oam_mcast_domain_record *this);
+
+/** Unpacks a bcmolt_epon_oam_oam_mcast_domain_record from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_mcast_domain_record_unpack(bcmolt_epon_oam_oam_mcast_domain_record *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_oam_mcast_domain_record struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_oam_mcast_domain_record_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_tek_attribute_value to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_attribute_value_pack(bcmolt_epon_oam_tek_attribute_value *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_tek_attribute_value would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_tek_attribute_value_get_packed_length(bcmolt_epon_oam_tek_attribute_value *this);
+
+/** Unpacks a bcmolt_epon_oam_tek_attribute_value from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_attribute_value_unpack(bcmolt_epon_oam_tek_attribute_value *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_tek_attribute_value struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_tek_attribute_value_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_tek_attribute_value_report_thresholds_count_thresholds(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_tek_attribute_value_new_dn_filter_tbl_count_rules(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_tek_attribute_value_new_up_filter_tbl_count_rules(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_tek_attribute_value_nvs_scratchpad_count_data(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tek_onu_queue_config to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_onu_queue_config_pack(bcmolt_epon_oam_tek_onu_queue_config *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_tek_onu_queue_config would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_tek_onu_queue_config_get_packed_length(bcmolt_epon_oam_tek_onu_queue_config *this);
+
+/** Unpacks a bcmolt_epon_oam_tek_onu_queue_config from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_onu_queue_config_unpack(bcmolt_epon_oam_tek_onu_queue_config *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_tek_onu_queue_config struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_tek_onu_queue_config_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_tek_igmp_snooping_port_config to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_igmp_snooping_port_config_pack(bcmolt_epon_oam_tek_igmp_snooping_port_config *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tek_igmp_snooping_port_config from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_igmp_snooping_port_config_unpack(bcmolt_epon_oam_tek_igmp_snooping_port_config *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_tek_igmp_snooping_port_config struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_tek_igmp_snooping_port_config_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_tek_onu_igmp_group_no_vid to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_onu_igmp_group_no_vid_pack(bcmolt_epon_oam_tek_onu_igmp_group_no_vid *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tek_onu_igmp_group_no_vid from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_onu_igmp_group_no_vid_unpack(bcmolt_epon_oam_tek_onu_igmp_group_no_vid *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_tek_onu_igmp_group_no_vid struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_tek_onu_igmp_group_no_vid_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_tek_action_value_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_action_value_base_pack(bcmolt_epon_oam_tek_action_value_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_tek_action_value_base would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_tek_action_value_base_get_packed_length(bcmolt_epon_oam_tek_action_value_base *this);
+
+/** Unpacks a bcmolt_epon_oam_tek_action_value_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_action_value_base_unpack(bcmolt_epon_oam_tek_action_value_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_tek_action_value_base struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_tek_action_value_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_tek_action_value_base_add_rule_count_rules(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_tek_action_value_base_new_del_rule_count_rules(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_tek_action_value_base_delete_rule_count_rules(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tek_var_container to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_var_container_pack(bcmolt_epon_oam_tek_var_container *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_tek_var_container would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_tek_var_container_get_packed_length(bcmolt_epon_oam_tek_var_container *this);
+
+/** Unpacks a bcmolt_epon_oam_tek_var_container from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_var_container_unpack(bcmolt_epon_oam_tek_var_container *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_tek_var_container struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_tek_var_container_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_tek_var_container_end_count_unknown(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tek_set_resp_action_value_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_set_resp_action_value_base_pack(bcmolt_epon_oam_tek_set_resp_action_value_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a 
+ * bcmolt_epon_oam_tek_set_resp_action_value_base would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_tek_set_resp_action_value_base_get_packed_length(bcmolt_epon_oam_tek_set_resp_action_value_base *this);
+
+/** Unpacks a bcmolt_epon_oam_tek_set_resp_action_value_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_set_resp_action_value_base_unpack(bcmolt_epon_oam_tek_set_resp_action_value_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_tek_set_resp_action_value_base struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_tek_set_resp_action_value_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_tek_set_resp_action_value_base_def_count_unknown(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tek_set_resp_var_container_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_set_resp_var_container_base_pack(bcmolt_epon_oam_tek_set_resp_var_container_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a 
+ * bcmolt_epon_oam_tek_set_resp_var_container_base would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_tek_set_resp_var_container_base_get_packed_length(bcmolt_epon_oam_tek_set_resp_var_container_base *this);
+
+/** Unpacks a bcmolt_epon_oam_tek_set_resp_var_container_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_set_resp_var_container_base_unpack(bcmolt_epon_oam_tek_set_resp_var_container_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_tek_set_resp_var_container_base struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_tek_set_resp_var_container_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_tek_set_resp_var_container_base_end_count_unknown(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tek_vendor_extended to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_vendor_extended_pack(bcmolt_epon_oam_tek_vendor_extended *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_tek_vendor_extended would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_tek_vendor_extended_get_packed_length(bcmolt_epon_oam_tek_vendor_extended *this);
+
+/** Unpacks a bcmolt_epon_oam_tek_vendor_extended from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_vendor_extended_unpack(bcmolt_epon_oam_tek_vendor_extended *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_tek_vendor_extended struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_tek_vendor_extended_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_tek_vendor_extended_get_request_count_vars(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_tek_vendor_extended_get_response_count_vars(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_tek_vendor_extended_set_request_count_vars(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_tek_vendor_extended_set_response_count_vars(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_tek_vendor_extended_unacked_action_count_variable_containers(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_pmc_file_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_pmc_file_base_pack(bcmolt_epon_oam_pmc_file_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_pmc_file_base would occupy 
+ * on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_pmc_file_base_get_packed_length(bcmolt_epon_oam_pmc_file_base *this);
+
+/** Unpacks a bcmolt_epon_oam_pmc_file_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_pmc_file_base_unpack(bcmolt_epon_oam_pmc_file_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_pmc_file_base struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_pmc_file_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_pmc_file_base_data_count_data(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_pmc_vendor_extended_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_pmc_vendor_extended_base_pack(bcmolt_epon_oam_pmc_vendor_extended_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_pmc_vendor_extended_base 
+ * would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_pmc_vendor_extended_base_get_packed_length(bcmolt_epon_oam_pmc_vendor_extended_base *this);
+
+/** Unpacks a bcmolt_epon_oam_pmc_vendor_extended_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_pmc_vendor_extended_base_unpack(bcmolt_epon_oam_pmc_vendor_extended_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_pmc_vendor_extended_base struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_pmc_vendor_extended_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_vendor_extended_oam_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_vendor_extended_oam_base_pack(bcmolt_epon_oam_vendor_extended_oam_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_vendor_extended_oam_base 
+ * would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_vendor_extended_oam_base_get_packed_length(bcmolt_epon_oam_vendor_extended_oam_base *this);
+
+/** Unpacks a bcmolt_epon_oam_vendor_extended_oam_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_vendor_extended_oam_base_unpack(bcmolt_epon_oam_vendor_extended_oam_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_vendor_extended_oam_base struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_vendor_extended_oam_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_vendor_extended_oam_base_def_count_unknown(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_oam_pdu_content to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_pdu_content_pack(bcmolt_epon_oam_oam_pdu_content *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_oam_pdu_content would occupy 
+ * on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_oam_pdu_content_get_packed_length(bcmolt_epon_oam_oam_pdu_content *this);
+
+/** Unpacks a bcmolt_epon_oam_oam_pdu_content from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_pdu_content_unpack(bcmolt_epon_oam_oam_pdu_content *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_oam_pdu_content struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_oam_pdu_content_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_oam_pdu_content_info_count_tlvs(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_oam_pdu_content_event_notification_count_tlvs(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_oam_pdu_content_var_request_count_vars(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_oam_pdu_content_var_response_count_vars(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_master_end_point to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_master_end_point_pack(bcmolt_epon_oam_master_end_point *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_master_end_point from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_master_end_point_unpack(bcmolt_epon_oam_master_end_point *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_master_end_point struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_master_end_point_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_onu_master_oam_content to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_onu_master_oam_content_pack(bcmolt_epon_oam_onu_master_oam_content *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_onu_master_oam_content would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_onu_master_oam_content_get_packed_length(bcmolt_epon_oam_onu_master_oam_content *this);
+
+/** Unpacks a bcmolt_epon_oam_onu_master_oam_content from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_onu_master_oam_content_unpack(bcmolt_epon_oam_onu_master_oam_content *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_onu_master_oam_content struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_onu_master_oam_content_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_oam_reg_info_vendor_oui to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_info_vendor_oui_pack(bcmolt_epon_oam_oam_reg_info_vendor_oui *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_oam_reg_info_vendor_oui from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_info_vendor_oui_unpack(bcmolt_epon_oam_oam_reg_info_vendor_oui *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_oam_reg_info_vendor_oui struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_info_vendor_oui_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_oam_reg_info_vendor to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_info_vendor_pack(bcmolt_epon_oam_oam_reg_info_vendor *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_oam_reg_info_vendor would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_oam_reg_info_vendor_get_packed_length(bcmolt_epon_oam_oam_reg_info_vendor *this);
+
+/** Unpacks a bcmolt_epon_oam_oam_reg_info_vendor from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_info_vendor_unpack(bcmolt_epon_oam_oam_reg_info_vendor *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_oam_reg_info_vendor struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_info_vendor_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_oam_reg_info_tlv to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_info_tlv_pack(bcmolt_epon_oam_oam_reg_info_tlv *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_oam_reg_info_tlv would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_oam_reg_info_tlv_get_packed_length(bcmolt_epon_oam_oam_reg_info_tlv *this);
+
+/** Unpacks a bcmolt_epon_oam_oam_reg_info_tlv from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_info_tlv_unpack(bcmolt_epon_oam_oam_reg_info_tlv *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_oam_reg_info_tlv struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_info_tlv_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_oam_reg_info_cont to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_info_cont_pack(bcmolt_epon_oam_oam_reg_info_cont *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_oam_reg_info_cont would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_oam_reg_info_cont_get_packed_length(bcmolt_epon_oam_oam_reg_info_cont *this);
+
+/** Unpacks a bcmolt_epon_oam_oam_reg_info_cont from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_info_cont_unpack(bcmolt_epon_oam_oam_reg_info_cont *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_oam_reg_info_cont struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_info_cont_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_oam_reg_info to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_info_pack(bcmolt_epon_oam_oam_reg_info *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_oam_reg_info would occupy on 
+ * the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_oam_reg_info_get_packed_length(bcmolt_epon_oam_oam_reg_info *this);
+
+/** Unpacks a bcmolt_epon_oam_oam_reg_info from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_info_unpack(bcmolt_epon_oam_oam_reg_info *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_oam_reg_info struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_info_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_oam_reg_ctc_var_desc to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_ctc_var_desc_pack(bcmolt_epon_oam_oam_reg_ctc_var_desc *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_oam_reg_ctc_var_desc from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_ctc_var_desc_unpack(bcmolt_epon_oam_oam_reg_ctc_var_desc *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_oam_reg_ctc_var_desc struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_ctc_var_desc_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_oam_reg_ctc_variable to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_ctc_variable_pack(bcmolt_epon_oam_oam_reg_ctc_variable *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_oam_reg_ctc_variable from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_ctc_variable_unpack(bcmolt_epon_oam_oam_reg_ctc_variable *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_oam_reg_ctc_variable struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_ctc_variable_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_oam_reg_ctc_variable_list to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_ctc_variable_list_pack(bcmolt_epon_oam_oam_reg_ctc_variable_list *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_oam_reg_ctc_variable_list 
+ * would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_oam_reg_ctc_variable_list_get_packed_length(bcmolt_epon_oam_oam_reg_ctc_variable_list *this);
+
+/** Unpacks a bcmolt_epon_oam_oam_reg_ctc_variable_list from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_ctc_variable_list_unpack(bcmolt_epon_oam_oam_reg_ctc_variable_list *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_oam_reg_ctc_variable_list struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_ctc_variable_list_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_oam_reg_ctc_op_variable to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_ctc_op_variable_pack(bcmolt_epon_oam_oam_reg_ctc_op_variable *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_oam_reg_ctc_op_variable 
+ * would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_oam_reg_ctc_op_variable_get_packed_length(bcmolt_epon_oam_oam_reg_ctc_op_variable *this);
+
+/** Unpacks a bcmolt_epon_oam_oam_reg_ctc_op_variable from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_ctc_op_variable_unpack(bcmolt_epon_oam_oam_reg_ctc_op_variable *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_oam_reg_ctc_op_variable struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_ctc_op_variable_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_oam_reg_ctc_opcode to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_ctc_opcode_pack(bcmolt_epon_oam_oam_reg_ctc_opcode *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_oam_reg_ctc_opcode would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_oam_reg_ctc_opcode_get_packed_length(bcmolt_epon_oam_oam_reg_ctc_opcode *this);
+
+/** Unpacks a bcmolt_epon_oam_oam_reg_ctc_opcode from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_ctc_opcode_unpack(bcmolt_epon_oam_oam_reg_ctc_opcode *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_oam_reg_ctc_opcode struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_ctc_opcode_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_oam_reg_ctc_cont to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_ctc_cont_pack(bcmolt_epon_oam_oam_reg_ctc_cont *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_oam_reg_ctc_cont would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_oam_reg_ctc_cont_get_packed_length(bcmolt_epon_oam_oam_reg_ctc_cont *this);
+
+/** Unpacks a bcmolt_epon_oam_oam_reg_ctc_cont from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_ctc_cont_unpack(bcmolt_epon_oam_oam_reg_ctc_cont *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_oam_reg_ctc_cont struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_ctc_cont_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_oam_reg_ctc to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_ctc_pack(bcmolt_epon_oam_oam_reg_ctc *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_oam_reg_ctc would occupy on 
+ * the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_oam_reg_ctc_get_packed_length(bcmolt_epon_oam_oam_reg_ctc *this);
+
+/** Unpacks a bcmolt_epon_oam_oam_reg_ctc from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_ctc_unpack(bcmolt_epon_oam_oam_reg_ctc *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_oam_reg_ctc struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_ctc_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_oam_reg_tek_var_desc to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_tek_var_desc_pack(bcmolt_epon_oam_oam_reg_tek_var_desc *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_oam_reg_tek_var_desc from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_tek_var_desc_unpack(bcmolt_epon_oam_oam_reg_tek_var_desc *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_oam_reg_tek_var_desc struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_tek_var_desc_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_oam_reg_tek_variable to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_tek_variable_pack(bcmolt_epon_oam_oam_reg_tek_variable *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_oam_reg_tek_variable from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_tek_variable_unpack(bcmolt_epon_oam_oam_reg_tek_variable *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_oam_reg_tek_variable struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_tek_variable_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_oam_reg_tek_variable_list to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_tek_variable_list_pack(bcmolt_epon_oam_oam_reg_tek_variable_list *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_oam_reg_tek_variable_list 
+ * would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_oam_reg_tek_variable_list_get_packed_length(bcmolt_epon_oam_oam_reg_tek_variable_list *this);
+
+/** Unpacks a bcmolt_epon_oam_oam_reg_tek_variable_list from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_tek_variable_list_unpack(bcmolt_epon_oam_oam_reg_tek_variable_list *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_oam_reg_tek_variable_list struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_tek_variable_list_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_oam_reg_tek_op_variable to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_tek_op_variable_pack(bcmolt_epon_oam_oam_reg_tek_op_variable *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_oam_reg_tek_op_variable 
+ * would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_oam_reg_tek_op_variable_get_packed_length(bcmolt_epon_oam_oam_reg_tek_op_variable *this);
+
+/** Unpacks a bcmolt_epon_oam_oam_reg_tek_op_variable from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_tek_op_variable_unpack(bcmolt_epon_oam_oam_reg_tek_op_variable *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_oam_reg_tek_op_variable struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_tek_op_variable_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_oam_reg_tek_opcode to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_tek_opcode_pack(bcmolt_epon_oam_oam_reg_tek_opcode *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_oam_reg_tek_opcode would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_oam_reg_tek_opcode_get_packed_length(bcmolt_epon_oam_oam_reg_tek_opcode *this);
+
+/** Unpacks a bcmolt_epon_oam_oam_reg_tek_opcode from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_tek_opcode_unpack(bcmolt_epon_oam_oam_reg_tek_opcode *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_oam_reg_tek_opcode struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_tek_opcode_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_oam_reg_tek_cont to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_tek_cont_pack(bcmolt_epon_oam_oam_reg_tek_cont *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_oam_reg_tek_cont would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_oam_reg_tek_cont_get_packed_length(bcmolt_epon_oam_oam_reg_tek_cont *this);
+
+/** Unpacks a bcmolt_epon_oam_oam_reg_tek_cont from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_tek_cont_unpack(bcmolt_epon_oam_oam_reg_tek_cont *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_oam_reg_tek_cont struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_tek_cont_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_oam_reg_tek to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_tek_pack(bcmolt_epon_oam_oam_reg_tek *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_oam_reg_tek would occupy on 
+ * the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_oam_reg_tek_get_packed_length(bcmolt_epon_oam_oam_reg_tek *this);
+
+/** Unpacks a bcmolt_epon_oam_oam_reg_tek from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_tek_unpack(bcmolt_epon_oam_oam_reg_tek *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_oam_reg_tek struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_tek_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_oam_reg_dpoe_var_desc to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_dpoe_var_desc_pack(bcmolt_epon_oam_oam_reg_dpoe_var_desc *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_oam_reg_dpoe_var_desc from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_dpoe_var_desc_unpack(bcmolt_epon_oam_oam_reg_dpoe_var_desc *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_oam_reg_dpoe_var_desc struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_dpoe_var_desc_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_oam_reg_dpoe_variable to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_dpoe_variable_pack(bcmolt_epon_oam_oam_reg_dpoe_variable *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_oam_reg_dpoe_variable from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_dpoe_variable_unpack(bcmolt_epon_oam_oam_reg_dpoe_variable *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_oam_reg_dpoe_variable struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_dpoe_variable_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_oam_reg_dpoe_variable_list to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_dpoe_variable_list_pack(bcmolt_epon_oam_oam_reg_dpoe_variable_list *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_oam_reg_dpoe_variable_list 
+ * would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_oam_reg_dpoe_variable_list_get_packed_length(bcmolt_epon_oam_oam_reg_dpoe_variable_list *this);
+
+/** Unpacks a bcmolt_epon_oam_oam_reg_dpoe_variable_list from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_dpoe_variable_list_unpack(bcmolt_epon_oam_oam_reg_dpoe_variable_list *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_oam_reg_dpoe_variable_list struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_dpoe_variable_list_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_oam_reg_dpoe_op_variable to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_dpoe_op_variable_pack(bcmolt_epon_oam_oam_reg_dpoe_op_variable *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_oam_reg_dpoe_op_variable 
+ * would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_oam_reg_dpoe_op_variable_get_packed_length(bcmolt_epon_oam_oam_reg_dpoe_op_variable *this);
+
+/** Unpacks a bcmolt_epon_oam_oam_reg_dpoe_op_variable from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_dpoe_op_variable_unpack(bcmolt_epon_oam_oam_reg_dpoe_op_variable *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_oam_reg_dpoe_op_variable struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_dpoe_op_variable_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_oam_reg_dpoe_opcode to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_dpoe_opcode_pack(bcmolt_epon_oam_oam_reg_dpoe_opcode *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_oam_reg_dpoe_opcode would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_oam_reg_dpoe_opcode_get_packed_length(bcmolt_epon_oam_oam_reg_dpoe_opcode *this);
+
+/** Unpacks a bcmolt_epon_oam_oam_reg_dpoe_opcode from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_dpoe_opcode_unpack(bcmolt_epon_oam_oam_reg_dpoe_opcode *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_oam_reg_dpoe_opcode struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_dpoe_opcode_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_oam_reg_dpoe_cont to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_dpoe_cont_pack(bcmolt_epon_oam_oam_reg_dpoe_cont *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_oam_reg_dpoe_cont would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_oam_reg_dpoe_cont_get_packed_length(bcmolt_epon_oam_oam_reg_dpoe_cont *this);
+
+/** Unpacks a bcmolt_epon_oam_oam_reg_dpoe_cont from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_dpoe_cont_unpack(bcmolt_epon_oam_oam_reg_dpoe_cont *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_oam_reg_dpoe_cont struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_dpoe_cont_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_oam_reg_dpoe to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_dpoe_pack(bcmolt_epon_oam_oam_reg_dpoe *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_oam_reg_dpoe would occupy on 
+ * the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_oam_reg_dpoe_get_packed_length(bcmolt_epon_oam_oam_reg_dpoe *this);
+
+/** Unpacks a bcmolt_epon_oam_oam_reg_dpoe from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_dpoe_unpack(bcmolt_epon_oam_oam_reg_dpoe *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_oam_reg_dpoe struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_dpoe_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_oam_reg_vendor_oui to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_vendor_oui_pack(bcmolt_epon_oam_oam_reg_vendor_oui *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_oam_reg_vendor_oui would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_oam_reg_vendor_oui_get_packed_length(bcmolt_epon_oam_oam_reg_vendor_oui *this);
+
+/** Unpacks a bcmolt_epon_oam_oam_reg_vendor_oui from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_vendor_oui_unpack(bcmolt_epon_oam_oam_reg_vendor_oui *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_oam_reg_vendor_oui struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_vendor_oui_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_oam_reg_vendor_cont to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_vendor_cont_pack(bcmolt_epon_oam_oam_reg_vendor_cont *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_oam_reg_vendor_cont would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_oam_reg_vendor_cont_get_packed_length(bcmolt_epon_oam_oam_reg_vendor_cont *this);
+
+/** Unpacks a bcmolt_epon_oam_oam_reg_vendor_cont from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_vendor_cont_unpack(bcmolt_epon_oam_oam_reg_vendor_cont *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_oam_reg_vendor_cont struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_vendor_cont_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_oam_reg_vendor to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_vendor_pack(bcmolt_epon_oam_oam_reg_vendor *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_oam_reg_vendor would occupy 
+ * on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_oam_reg_vendor_get_packed_length(bcmolt_epon_oam_oam_reg_vendor *this);
+
+/** Unpacks a bcmolt_epon_oam_oam_reg_vendor from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_vendor_unpack(bcmolt_epon_oam_oam_reg_vendor *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_oam_reg_vendor struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_vendor_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_oam_reg_opcode to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_opcode_pack(bcmolt_epon_oam_oam_reg_opcode *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_oam_reg_opcode would occupy 
+ * on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_oam_reg_opcode_get_packed_length(bcmolt_epon_oam_oam_reg_opcode *this);
+
+/** Unpacks a bcmolt_epon_oam_oam_reg_opcode from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_opcode_unpack(bcmolt_epon_oam_oam_reg_opcode *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_oam_reg_opcode struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_oam_reg_opcode_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_oam_registration to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_registration_pack(bcmolt_epon_oam_oam_registration *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_oam_registration would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_oam_registration_get_packed_length(bcmolt_epon_oam_oam_registration *this);
+
+/** Unpacks a bcmolt_epon_oam_oam_registration from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_registration_unpack(bcmolt_epon_oam_oam_registration *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_oam_registration struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_oam_registration_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_oam_registration_list to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_registration_list_pack(bcmolt_epon_oam_oam_registration_list *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_oam_registration_list would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_oam_registration_list_get_packed_length(bcmolt_epon_oam_oam_registration_list *this);
+
+/** Unpacks a bcmolt_epon_oam_oam_registration_list from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_registration_list_unpack(bcmolt_epon_oam_oam_registration_list *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_oam_registration_list struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_oam_registration_list_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_master_context_tlv to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_master_context_tlv_pack(bcmolt_epon_oam_master_context_tlv *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_master_context_tlv would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_master_context_tlv_get_packed_length(bcmolt_epon_oam_master_context_tlv *this);
+
+/** Unpacks a bcmolt_epon_oam_master_context_tlv from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_master_context_tlv_unpack(bcmolt_epon_oam_master_context_tlv *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_master_context_tlv struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_master_context_tlv_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_negotiated_oam to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_negotiated_oam_pack(bcmolt_epon_oam_negotiated_oam *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_negotiated_oam would occupy 
+ * on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_negotiated_oam_get_packed_length(bcmolt_epon_oam_negotiated_oam *this);
+
+/** Unpacks a bcmolt_epon_oam_negotiated_oam from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_negotiated_oam_unpack(bcmolt_epon_oam_negotiated_oam *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_negotiated_oam struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_negotiated_oam_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_negotiated_oam_list to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_negotiated_oam_list_pack(bcmolt_epon_oam_negotiated_oam_list *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_negotiated_oam_list would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_negotiated_oam_list_get_packed_length(bcmolt_epon_oam_negotiated_oam_list *this);
+
+/** Unpacks a bcmolt_epon_oam_negotiated_oam_list from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_negotiated_oam_list_unpack(bcmolt_epon_oam_negotiated_oam_list *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_negotiated_oam_list struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_negotiated_oam_list_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_onu_master_command to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_onu_master_command_pack(bcmolt_epon_oam_onu_master_command *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_onu_master_command would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_onu_master_command_get_packed_length(bcmolt_epon_oam_onu_master_command *this);
+
+/** Unpacks a bcmolt_epon_oam_onu_master_command from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_onu_master_command_unpack(bcmolt_epon_oam_onu_master_command *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_onu_master_command struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_onu_master_command_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_onu_master_response to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_onu_master_response_pack(bcmolt_epon_oam_onu_master_response *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_onu_master_response would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_onu_master_response_get_packed_length(bcmolt_epon_oam_onu_master_response *this);
+
+/** Unpacks a bcmolt_epon_oam_onu_master_response from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_onu_master_response_unpack(bcmolt_epon_oam_onu_master_response *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_onu_master_response struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_onu_master_response_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_onu_master_communication to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_onu_master_communication_pack(bcmolt_epon_oam_onu_master_communication *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_onu_master_communication 
+ * would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_onu_master_communication_get_packed_length(bcmolt_epon_oam_onu_master_communication *this);
+
+/** Unpacks a bcmolt_epon_oam_onu_master_communication from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_onu_master_communication_unpack(bcmolt_epon_oam_onu_master_communication *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_onu_master_communication struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_onu_master_communication_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_master_pdu_common to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_master_pdu_common_pack(bcmolt_epon_oam_master_pdu_common *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_master_pdu_common would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_master_pdu_common_get_packed_length(bcmolt_epon_oam_master_pdu_common *this);
+
+/** Unpacks a bcmolt_epon_oam_master_pdu_common from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_master_pdu_common_unpack(bcmolt_epon_oam_master_pdu_common *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_master_pdu_common struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_master_pdu_common_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_organization_specific_slow_protocol to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_organization_specific_slow_protocol_pack(bcmolt_epon_oam_organization_specific_slow_protocol *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a 
+ * bcmolt_epon_oam_organization_specific_slow_protocol would occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_organization_specific_slow_protocol_get_packed_length(bcmolt_epon_oam_organization_specific_slow_protocol *this);
+
+/** Unpacks a bcmolt_epon_oam_organization_specific_slow_protocol from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_organization_specific_slow_protocol_unpack(bcmolt_epon_oam_organization_specific_slow_protocol *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_organization_specific_slow_protocol 
+ * struct and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_organization_specific_slow_protocol_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_slow_protocol to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_slow_protocol_pack(bcmolt_epon_oam_slow_protocol *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_slow_protocol would occupy 
+ * on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_slow_protocol_get_packed_length(bcmolt_epon_oam_slow_protocol *this);
+
+/** Unpacks a bcmolt_epon_oam_slow_protocol from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_slow_protocol_unpack(bcmolt_epon_oam_slow_protocol *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_slow_protocol struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_slow_protocol_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_ethernet_protocol to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ethernet_protocol_pack(bcmolt_epon_oam_ethernet_protocol *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_ethernet_protocol would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_ethernet_protocol_get_packed_length(bcmolt_epon_oam_ethernet_protocol *this);
+
+/** Unpacks a bcmolt_epon_oam_ethernet_protocol from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ethernet_protocol_unpack(bcmolt_epon_oam_ethernet_protocol *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ethernet_protocol struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ethernet_protocol_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_ethernet_protocol_def_count_unknown(bcmolt_epon_oam_buf *buf);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_ethernet_protocol_zero_count_padding(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_ethernet_frame to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ethernet_frame_pack(bcmolt_epon_oam_ethernet_frame *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_ethernet_frame would occupy 
+ * on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_ethernet_frame_get_packed_length(bcmolt_epon_oam_ethernet_frame *this);
+
+/** Unpacks a bcmolt_epon_oam_ethernet_frame from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_ethernet_frame_unpack(bcmolt_epon_oam_ethernet_frame *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_ethernet_frame struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_ethernet_frame_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_ethernet_frame_count_protocols(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_oam_pdu_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_pdu_base_pack(bcmolt_epon_oam_oam_pdu_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_oam_pdu_base would occupy on 
+ * the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_oam_pdu_base_get_packed_length(bcmolt_epon_oam_oam_pdu_base *this);
+
+/** Unpacks a bcmolt_epon_oam_oam_pdu_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_pdu_base_unpack(bcmolt_epon_oam_oam_pdu_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_oam_pdu_base struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_oam_pdu_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_oam_tek_event_gpio to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_tek_event_gpio_pack(bcmolt_epon_oam_oam_tek_event_gpio *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_oam_tek_event_gpio from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_tek_event_gpio_unpack(bcmolt_epon_oam_oam_tek_event_gpio *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_oam_tek_event_gpio struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_oam_tek_event_gpio_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_oam_tek_event to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_tek_event_pack(bcmolt_epon_oam_oam_tek_event *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_oam_tek_event would occupy 
+ * on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_oam_tek_event_get_packed_length(bcmolt_epon_oam_oam_tek_event *this);
+
+/** Unpacks a bcmolt_epon_oam_oam_tek_event from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_oam_tek_event_unpack(bcmolt_epon_oam_oam_tek_event *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_oam_tek_event struct and collects memory 
+ * requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_oam_tek_event_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_std_mac_address to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_std_mac_address_pack(bcmolt_epon_oam_std_mac_address *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_std_mac_address from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_std_mac_address_unpack(bcmolt_epon_oam_std_mac_address *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_std_mac_address struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_std_mac_address_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_tek_var_desc_attr_base to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_var_desc_attr_base_pack(bcmolt_epon_oam_tek_var_desc_attr_base *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_tek_var_desc_attr_base would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_tek_var_desc_attr_base_get_packed_length(bcmolt_epon_oam_tek_var_desc_attr_base *this);
+
+/** Unpacks a bcmolt_epon_oam_tek_var_desc_attr_base from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tek_var_desc_attr_base_unpack(bcmolt_epon_oam_tek_var_desc_attr_base *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_tek_var_desc_attr_base struct and 
+ * collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_tek_var_desc_attr_base_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_tls_record_continued to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tls_record_continued_pack(bcmolt_epon_oam_tls_record_continued *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a bcmolt_epon_oam_tls_record_continued would 
+ * occupy on the wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_tls_record_continued_get_packed_length(bcmolt_epon_oam_tls_record_continued *this);
+
+/** Unpacks a bcmolt_epon_oam_tls_record_continued from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tls_record_continued_unpack(bcmolt_epon_oam_tls_record_continued *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_tls_record_continued struct and collects 
+ * memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_tls_record_continued_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_tls_record_continued_def_count_data(bcmolt_epon_oam_buf *buf);
+
+/** Packs a bcmolt_epon_oam_tls_signature_and_hash_algorithm to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tls_signature_and_hash_algorithm_pack(bcmolt_epon_oam_tls_signature_and_hash_algorithm *this, bcmolt_epon_oam_buf *buf);
+
+/** Unpacks a bcmolt_epon_oam_tls_signature_and_hash_algorithm from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tls_signature_and_hash_algorithm_unpack(bcmolt_epon_oam_tls_signature_and_hash_algorithm *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_tls_signature_and_hash_algorithm struct 
+ * and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_tls_signature_and_hash_algorithm_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Packs a bcmolt_epon_oam_tls_signature_and_hash_algorithm_list to bytes 
+ *
+ * \param this Pointer to the object to pack 
+ * \param buf Pointer to the buffer to write to 
+ * \return TRUE if the pack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tls_signature_and_hash_algorithm_list_pack(bcmolt_epon_oam_tls_signature_and_hash_algorithm_list *this, bcmolt_epon_oam_buf *buf);
+
+/** Gets the number of bytes that a 
+ * bcmolt_epon_oam_tls_signature_and_hash_algorithm_list would occupy on the 
+ * wire 
+ *
+ * \return The structure size in bytes 
+ */
+uint32_t bcmolt_epon_oam_tls_signature_and_hash_algorithm_list_get_packed_length(bcmolt_epon_oam_tls_signature_and_hash_algorithm_list *this);
+
+/** Unpacks a bcmolt_epon_oam_tls_signature_and_hash_algorithm_list from bytes 
+ *
+ * \param this Pointer to the object to unpack 
+ * \param buf Pointer to the buffer to read from 
+ * \param extra_mem Pointer to the first location in memory to use to store 
+ * pointer fields that are NULL.  Setting this to NULL will cause an error when 
+ * a NULL pointer is encountered. 
+ * \return TRUE if the unpack was successful, FALSE otherwise 
+ */
+bcmos_bool bcmolt_epon_oam_tls_signature_and_hash_algorithm_list_unpack(bcmolt_epon_oam_tls_signature_and_hash_algorithm_list *this, bcmolt_epon_oam_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmolt_epon_oam_tls_signature_and_hash_algorithm_list 
+ * struct and collects memory requirements above and beyond sizeof() 
+ *
+ * \param packed A stream pointing to the packed byte stream 
+ * \param extra_mem Number of additional storage bytes required 
+ * \return TRUE on success, FALSE on failure 
+ */
+bcmos_bool bcmolt_epon_oam_tls_signature_and_hash_algorithm_list_scan(bcmolt_epon_oam_buf *packed, uint32_t *extra_mem);
+
+/** Counts the number of elements in the continuous list 
+ *
+ * \param buf Buffer pointing to packed list 
+ * \return Number of elements in the list 
+ */
+uint32_t bcmolt_epon_oam_tls_signature_and_hash_algorithm_list_count_supported_signature_algorithms(bcmolt_epon_oam_buf *buf);
+#endif /* BCMOLT_EPON_OAM_TYPES_H_ */
diff --git a/bcm68620_release/release/host_reference/dev_log/Makefile b/bcm68620_release/release/host_reference/dev_log/Makefile
new file mode 100644
index 0000000..18d244e
--- /dev/null
+++ b/bcm68620_release/release/host_reference/dev_log/Makefile
@@ -0,0 +1,43 @@
+# Stack
+#
+MOD_NAME = dev_log
+MOD_TYPE = lib
+
+ifeq ("$(ENABLE_LOG)", "y")
+	MOD_DEPS = cli utils
+	MOD_DEFS = -DENABLE_LOG
+	USE_LINT = yes
+	srcs = bcm_dev_log.c bcm_dev_log_task.c
+	ifeq ("$(FEATURE_LOG)", "y")
+		MOD_DEFS += -DTRIGGER_LOGGER_FEATURE
+	endif
+
+	ifeq ("$(DEV_LOG_DEBUG)", "y")
+		MOD_DEFS += -DDEV_LOG_DEBUG
+	endif
+	
+	ifeq ("$(ENABLE_CLI)", "y")
+		srcs += bcm_dev_log_cli.c
+	endif
+	
+	ifeq ("$(TOOLCHAIN)", "gcc")
+		EXTRA_CFLAGS  += -Wno-format-security
+	endif
+	
+	ifeq ("$(SUBSYSTEM)", "host")
+       ifeq ("$(OS_KERNEL)", "linux")
+           ifeq ("$(RELEASE_BUILD)", "y")
+               EXTRA_INCLUDES += -I$(TOP_DIR)/host_reference/dev_log_linux
+           else
+               EXTRA_INCLUDES += -I$(TOP_DIR)/host/dev_log_linux
+           endif
+       endif
+	endif
+	
+    ifeq ("$(OS)", "posix")
+        ENABLE_LOG_SYSLOG ?= y
+        ifeq ("$(ENABLE_LOG_SYSLOG)", "y")
+            MOD_DEFS += -DDEV_LOG_SYSLOG
+        endif                      
+    endif
+endif
diff --git a/bcm68620_release/release/host_reference/dev_log/bcm_dev_log.c b/bcm68620_release/release/host_reference/dev_log/bcm_dev_log.c
new file mode 100644
index 0000000..8c8cc25
--- /dev/null
+++ b/bcm68620_release/release/host_reference/dev_log/bcm_dev_log.c
@@ -0,0 +1,409 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifdef ENABLE_LOG
+
+#include "bcm_dev_log_task.h"
+#include "bcm_dev_log_task_internal.h"
+#include "bcm_dev_log.h"
+
+static bcmos_timer dev_log_timer;
+
+/* Store timestamp per every rate-limited log ID. */
+static uint64_t rate_limit_id2timestamp[DEV_LOG_RATE_LIMIT_ID__NUM_OF];
+
+const char *dev_log_basename(const char *str)
+{
+    const char *slash;
+    if ((slash = strchr(str, '/')))
+    {
+        const char *str0 = str;
+        str = strchr(slash+1, ' ');
+        /* If log format string was created by BCM_LOG macro and there is no corruption of some kind
+         * str above is guaranteed to be != NULL. However, making str!=NULL assumption makes dev_log
+         * vulnerable to bugs in the caller. In this case the following inexpensive check prevents crash
+         * in dev_Log and helps in identifying the real culprit.
+         */
+        if (!str)
+            return str0;
+        while (str[0] != '/')
+            str--;
+        str++;
+    }
+    return str;
+}
+
+#ifdef TRIGGER_LOGGER_FEATURE
+
+/* check if the message fits the level and the other criteria for a trigger
+   return 1 if yes, the message will be printed
+   and returns 0 if the message will not be printed
+*/
+static bcmos_bool check_trigger(dev_log_id_parm *xi_id, bcm_dev_log_level xi_log_level)
+{
+    /* the level of the message must be exactly the trigger level */
+    if (xi_id->trigger_log_level != xi_log_level)
+        return BCMOS_FALSE; /* do not print the message  - the level does not fit */
+    
+    xi_id->trigger.counter++;
+    if (xi_id->trigger.counter >= xi_id->trigger.start_threshold)
+    {
+        if (xi_id->trigger.counter >= xi_id->trigger.stop_threshold)
+        {
+            /* trigger finished, check repeat */
+            if (xi_id->trigger.repeat_threshold)
+            {
+                xi_id->trigger.repeat++;
+                if (xi_id->trigger.repeat < xi_id->trigger.repeat_threshold)
+                {
+                    /* rewind trigger conditions */
+                    xi_id->trigger.counter = 0;
+                }
+            }
+        }
+        else /* trigger is active : counter greater than start and less than end */
+            return BCMOS_TRUE; /* print the message */
+    }
+    return BCMOS_FALSE;/* do not print the message  - still less than start threshold */
+}
+
+/* check if the message fits the level and the criteria for throttle
+   return 1 if yes, the message will be printed
+   and returns 0 if the message will not be printed
+*/
+static bcmos_bool check_throttle(dev_log_id_parm *xi_id, bcm_dev_log_level xi_log_level)
+{
+    /* check if any throttle is defined */
+    if (xi_id->throttle_log_level != DEV_LOG_LEVEL_NO_LOG)
+        return BCMOS_TRUE; /* print the message  - no trigger is set */
+    
+    /* the level of the message must be exactly the throttle level */
+    if (xi_id->throttle_log_level != xi_log_level)
+        return BCMOS_FALSE; /* do not print the message  - the level does not fit */
+    
+    xi_id->throttle.counter++;
+    if (xi_id->throttle.counter >= xi_id->throttle.threshold)
+    {
+        xi_id->throttle.counter = 0;
+        return BCMOS_TRUE;
+    }
+    return BCMOS_FALSE;/* do not print the message  - still less than start threshold */
+}
+
+#endif
+
+static bcmos_timer_rc bcm_dev_log_msg_send_timer_cb(bcmos_timer *timer, long data)
+{
+    bcmos_msg *msg = (bcmos_msg *)data;
+    bcmos_msg_send(&dev_log.save_queue, msg, BCMOS_MSG_SEND_AUTO_FREE);
+    return BCMOS_TIMER_OK;
+}
+
+uint8_t bcm_dev_log_pool_occupancy_percent_get(void)
+{
+    bcmos_msg_pool_info msg_pool_info;
+    bcmos_errno error = bcmos_msg_pool_query(&dev_log.pool, &msg_pool_info);
+    if (error != BCM_ERR_OK)
+    {
+        DEV_LOG_ERROR_PRINTF("bcmos_msg_pool_query() returned %s (%d)\n", bcmos_strerror(error), error);
+        return 0;
+    }
+    return (uint8_t)((100 * (msg_pool_info.parm.size - msg_pool_info.stat.free)) / msg_pool_info.parm.size);
+}
+
+static bcmos_bool bcm_dev_log_should_drop(
+    dev_log_id_parm *id,
+    bcm_dev_log_level log_level,
+    uint32_t rate_us,
+    dev_log_rate_limit_id rate_limit_id)
+{
+    /* If the msg pool is sufficiently full, drop all non-error messages */
+    if (!bcm_dev_log_level_is_error(log_level) &&
+        bcm_dev_log_pool_occupancy_percent_get() >= DEV_LOG_ERROR_ONLY_THRESHOLD_PERCENT)
+    {
+        bcm_dev_log_drop_report();
+        return BCMOS_TRUE;
+    }
+    
+#ifdef TRIGGER_LOGGER_FEATURE
+    /* if trigger defined - ignore throttle and printing level */
+    if (id->trigger_log_level != DEV_LOG_LEVEL_NO_LOG)
+        return check_trigger(id, log_level);
+#endif
+    
+    /* if trigger is not fullfilled - check other conditions */
+    if (log_level > id->log_level_print && log_level > id->log_level_save)
+        return BCMOS_TRUE;
+    
+#ifdef TRIGGER_LOGGER_FEATURE
+    if (!check_throttle(id, log_level))
+        return BCMOS_TRUE;
+#endif
+
+    if (rate_us && rate_limit_id != DEV_LOG_RATE_LIMIT_ID_NONE)
+    {
+        uint64_t curr_timestamp;
+
+        /* Do rate limit. */
+        curr_timestamp = bcmos_timestamp64();
+        if (curr_timestamp - rate_limit_id2timestamp[rate_limit_id] < rate_us)
+            return BCMOS_TRUE; /* Filter out this message. */
+        rate_limit_id2timestamp[rate_limit_id] = curr_timestamp;
+    }
+
+    return BCMOS_FALSE;
+}
+
+static void _bcm_dev_log_vlog(dev_log_id xi_id,
+    bcm_dev_log_level xi_log_level,
+    uint32_t xi_flags,
+    uint32_t rate_us,
+    dev_log_rate_limit_id rate_limit_id, 
+    const char *fmt,
+    va_list args)
+{
+    dev_log_id_parm *id = (dev_log_id_parm *)xi_id;
+    dev_log_queue_msg *log_queue_msg;
+    bcmos_errno error = BCM_ERR_OK;
+    bcmos_msg *msg;
+
+    if (dev_log.state != BCM_DEV_LOG_STATE_ENABLED)
+    {
+        if (dev_log.flags & BCM_DEV_LOG_FLAG_DISABLED_WITH_PRINTF)
+            DEV_LOG_VPRINTF(fmt, args);
+        return;
+    }
+    if (!xi_id || (xi_id == DEV_LOG_INVALID_ID))
+    {
+        /* If this ID was not registered - or registered incorrectly */
+        DEV_LOG_ERROR_PRINTF("Error: xi_id not valid (0x%x)\n", (unsigned int)xi_id);
+        DEV_LOG_VPRINTF(fmt, args); /* This will allow us to debug what line caused the bug. */
+        return;
+    }
+    if ((xi_log_level >= DEV_LOG_LEVEL_NUM_OF) || (xi_log_level == DEV_LOG_LEVEL_NO_LOG))
+    {
+        DEV_LOG_ERROR_PRINTF("xi_log_level (%u) is invalid\n", xi_log_level);
+        DEV_LOG_VPRINTF(fmt, args); /* This will allow us to debug what line caused the bug. */
+        return;
+    }
+    if (id->log_type == DEV_LOG_ID_TYPE_NONE)
+    {
+        return;
+    }
+#ifdef BCM_SUBSYSTEM_HOST
+    /* Always use CALLER_FMT mode on the host to avoid portability issues with
+     * transferring va_list as an array */
+    xi_flags |= BCM_LOG_FLAG_CALLER_FMT;
+#endif
+
+    /* Update log id counters  */
+    id->counters[xi_log_level]++;
+
+    if (bcm_dev_log_should_drop(id, xi_log_level, rate_us, rate_limit_id))
+        return;
+
+    msg = bcmos_msg_pool_alloc(&dev_log.pool);
+    if (!msg)
+    {
+        bcm_dev_log_drop_report();
+        return;
+    }
+    log_queue_msg = msg->data;
+    /* Create log message */
+    log_queue_msg->log_id = id;
+    log_queue_msg->time_stamp = dev_log.dev_log_parm.get_time_cb();
+    log_queue_msg->msg_level = xi_log_level;
+    log_queue_msg->flags = xi_flags;
+#ifndef BCM_SUBSYSTEM_HOST
+    /* It is not really necessary to compile out non CALLER_FMT case on the host.
+     * However, keeping unused code will make Coverity unhappy */
+    if (unlikely(xi_flags & BCM_LOG_FLAG_CALLER_FMT))
+    {
+#endif /* #ifndef BCM_SUBSYSTEM_HOST */
+        vsnprintf(log_queue_msg->u.str, MAX_DEV_LOG_STRING_SIZE, (xi_flags & BCM_LOG_FLAG_FILENAME_IN_FMT) ? dev_log_basename(fmt) : fmt, args);
+#ifndef BCM_SUBSYSTEM_HOST
+    }
+    else
+    {
+        uint32_t i;
+        uint32_t offset;
+        log_queue_msg->u.fmt_args.fmt = fmt;
+
+        offset = ((long)log_queue_msg->u.fmt_args.args % 8 == 0) ? 0 : 1; /* start on an 8-byte boundary */
+        for (i = 0; i < DEV_LOG_MAX_ARGS; i++)
+        {
+            log_queue_msg->u.fmt_args.args[i + offset] = va_arg(args, void *);
+        }
+    }
+#endif /* #ifndef BCM_SUBSYSTEM_HOST */
+
+    if (bcmos_sem_post_is_allowed())
+    {
+        error = bcmos_msg_send(&dev_log.save_queue, msg, BCMOS_MSG_SEND_AUTO_FREE);
+    }
+    else
+    {
+        bcmos_timer_parm timer_params =
+        {
+            .name = "dev_log_timer",
+            .handler = bcm_dev_log_msg_send_timer_cb,
+        };
+
+        if (!(dev_log_timer.flags & BCMOS_TIMER_FLAG_VALID))
+            bcmos_timer_create(&dev_log_timer, &timer_params);
+        /* Limitation: We don't send more than 1 logger message even if _bcm_dev_log_vlog() was called multiple timers in IRQs disabled mode because we have a single timer. */
+        if (!bcmos_timer_is_running(&dev_log_timer))
+        {
+            bcmos_timer_handler_set(&dev_log_timer, bcm_dev_log_msg_send_timer_cb, (long)msg);
+            bcmos_timer_start(&dev_log_timer, 0);
+        }
+    }
+
+    if (error != BCM_ERR_OK)
+    {
+        id->lost_msg_cnt++;
+    }
+}
+
+void bcm_dev_log_vlog(dev_log_id xi_id,
+    bcm_dev_log_level xi_log_level,
+    uint32_t xi_flags,
+    const char *fmt,
+    va_list args)
+{
+    _bcm_dev_log_vlog(xi_id, xi_log_level, xi_flags, 0, DEV_LOG_RATE_LIMIT_ID_NONE, fmt, args);
+}
+
+/* IMPORTANT!!!
+ * The function bcm_dev_log_log() must have even number of arguments before the '...' (see comments on header file).
+ */
+void bcm_dev_log_log(dev_log_id xi_id,
+    bcm_dev_log_level xi_log_level,
+    uint32_t xi_flags,
+    const char *fmt,
+    ...)
+{
+    va_list args;
+
+    va_start(args, fmt);
+    bcm_dev_log_vlog(xi_id, xi_log_level, xi_flags, fmt, args);
+    va_end(args);
+}
+
+void bcm_dev_log_log_ratelimit(dev_log_id xi_id,
+    bcm_dev_log_level xi_log_level,
+    uint32_t xi_flags,
+    uint32_t rate_us,
+    dev_log_rate_limit_id rate_limit_id,
+    const char *fmt,
+    ...)
+{
+    va_list args;
+
+    va_start(args, fmt);
+    _bcm_dev_log_vlog(xi_id, xi_log_level, xi_flags, rate_us, rate_limit_id, fmt, args);
+    va_end(args);
+}
+
+#ifdef BCMOS_TRACE_IN_DEV_LOG
+
+static dev_log_id bcmos_trace_dev_log_id[] =
+{
+    [BCMOS_TRACE_LEVEL_NONE] = DEV_LOG_INVALID_ID,
+    [BCMOS_TRACE_LEVEL_ERROR] = DEV_LOG_INVALID_ID,
+    [BCMOS_TRACE_LEVEL_INFO] = DEV_LOG_INVALID_ID,
+    [BCMOS_TRACE_LEVEL_VERBOSE] = DEV_LOG_INVALID_ID,
+    [BCMOS_TRACE_LEVEL_DEBUG] = DEV_LOG_INVALID_ID
+};
+
+static bcm_dev_log_level bcmos_trace_dev_log_level[] =
+{
+    [BCMOS_TRACE_LEVEL_ERROR] = DEV_LOG_LEVEL_ERROR,
+    [BCMOS_TRACE_LEVEL_INFO] = DEV_LOG_LEVEL_INFO,
+    [BCMOS_TRACE_LEVEL_VERBOSE] = DEV_LOG_LEVEL_INFO,
+    [BCMOS_TRACE_LEVEL_DEBUG] = DEV_LOG_LEVEL_DEBUG
+};
+
+#endif
+
+/********************************************************************************************/
+/*                                                                                          */
+/* Name: bcm_dev_log_os_trace_init                                                          */
+/*                                                                                          */
+/* Abstract: Direct bcmos_trace() output to log                                             */
+/* Arguments: NONE                                                                          */
+/*                                                                                          */
+/* Return Value:                                                                            */
+/*   bcmos_errno - Success code (BCM_ERR_OK) or Error code (see bcmos_errno.h)              */
+/*                                                                                          */
+/********************************************************************************************/
+bcmos_errno bcm_dev_log_os_trace_init(void)
+{
+#ifdef BCMOS_TRACE_IN_DEV_LOG
+    bcmos_trace_dev_log_id[BCMOS_TRACE_LEVEL_ERROR] = bcm_dev_log_id_register("trace_error",
+        DEV_LOG_LEVEL_ERROR, DEV_LOG_ID_TYPE_BOTH);
+    bcmos_trace_dev_log_id[BCMOS_TRACE_LEVEL_INFO] = bcm_dev_log_id_register("trace_info",
+        DEV_LOG_LEVEL_INFO, DEV_LOG_ID_TYPE_BOTH);
+    bcmos_trace_dev_log_id[BCMOS_TRACE_LEVEL_VERBOSE] = bcmos_trace_dev_log_id[BCMOS_TRACE_LEVEL_INFO];
+    bcmos_trace_dev_log_id[BCMOS_TRACE_LEVEL_DEBUG] = bcm_dev_log_id_register("trace_debug",
+        DEV_LOG_LEVEL_DEBUG, DEV_LOG_ID_TYPE_BOTH);
+    if (bcmos_trace_dev_log_id[BCMOS_TRACE_LEVEL_ERROR] == DEV_LOG_INVALID_ID ||
+        bcmos_trace_dev_log_id[BCMOS_TRACE_LEVEL_INFO]  == DEV_LOG_INVALID_ID ||
+        bcmos_trace_dev_log_id[BCMOS_TRACE_LEVEL_DEBUG] == DEV_LOG_INVALID_ID)
+    {
+        return BCM_ERR_NORES;
+    }
+    return BCM_ERR_OK;
+#else /* #ifdef BCMOS_TRACE_IN_DEV_LOG */
+    return BCM_ERR_NOT_SUPPORTED;
+#endif
+}
+
+#ifdef BCMOS_TRACE_IN_DEV_LOG
+
+/* Direct OS trace to dev_log */
+void bcmos_trace(bcmos_trace_level level, const char *format, ...)
+{
+    va_list args;
+
+    va_start(args, format);
+    if (bcmos_trace_dev_log_id[level] != DEV_LOG_INVALID_ID && dev_log.state == BCM_DEV_LOG_STATE_ENABLED)
+    {
+        if (level == BCMOS_TRACE_LEVEL_ERROR)
+            bcm_dev_log_vlog(bcmos_trace_dev_log_id[level], bcmos_trace_dev_log_level[level], BCM_LOG_FLAG_CALLER_FMT, format, args);
+        else
+            bcm_dev_log_vlog(bcmos_trace_dev_log_id[level], bcmos_trace_dev_log_level[level], 0, format, args);
+    }
+
+    va_end(args);
+}
+
+#endif
+
+#endif /* ENABLE_LOG */
diff --git a/bcm68620_release/release/host_reference/dev_log/bcm_dev_log.h b/bcm68620_release/release/host_reference/dev_log/bcm_dev_log.h
new file mode 100644
index 0000000..19e156e
--- /dev/null
+++ b/bcm68620_release/release/host_reference/dev_log/bcm_dev_log.h
@@ -0,0 +1,224 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef __BCM_DEV_LOG_H_
+#define __BCM_DEV_LOG_H_
+
+#ifdef ENABLE_LOG
+
+#include <bcmos_system.h>
+#include "bcm_dev_log_task.h"
+#ifdef ENABLE_CLI
+#include "bcm_dev_log_cli.h"
+#endif
+
+/********************************************/
+/*                                          */
+/* Log macros                               */
+/*                                          */
+/********************************************/
+
+#define MACRO_ARG_N(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,N,...) N
+#define MACROS_ARGS_SEQUENCE 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
+#define MACRO_NUM_ARGS_HELPER(...)    MACRO_ARG_N(__VA_ARGS__)
+#define MACRO_NUM_ARGS(...)     MACRO_NUM_ARGS_HELPER(__VA_ARGS__, MACROS_ARGS_SEQUENCE)
+
+/* IMPORTANT! DO NOT USE THESE MACROS, USE BCM_LOG ONLY ! */
+/* These macros force number of arguments in compile time. A single macro for each number of arguments (including the format) */
+#ifdef __BASENAME__
+#define _BCM_LOG_ARGS1(level, id, flags, ...) \
+    bcm_dev_log_log(id, level, flags, STRINGIFY_EXPAND(__BASENAME__) " " STRINGIFY_EXPAND(__LINE__) "| " __VA_ARGS__)
+#else
+#define _BCM_LOG_ARGS1(level, id, flags, ...) \
+    bcm_dev_log_log(id, level, flags | BCM_LOG_FLAG_FILENAME_IN_FMT, __FILE__ " " STRINGIFY_EXPAND(__LINE__) "| " __VA_ARGS__)
+#endif
+#define _BCM_LOG_ARGS2(...) _BCM_LOG_ARGS1(__VA_ARGS__)
+#define _BCM_LOG_ARGS3(...) _BCM_LOG_ARGS1(__VA_ARGS__)
+#define _BCM_LOG_ARGS4(...) _BCM_LOG_ARGS1(__VA_ARGS__)
+#define _BCM_LOG_ARGS5(...) _BCM_LOG_ARGS1(__VA_ARGS__)
+#define _BCM_LOG_ARGS6(...) _BCM_LOG_ARGS1(__VA_ARGS__)
+#define _BCM_LOG_ARGS7(...) _BCM_LOG_ARGS1(__VA_ARGS__)
+#define _BCM_LOG_ARGS8(...) _BCM_LOG_ARGS1(__VA_ARGS__)
+#define _BCM_LOG_ARGS9(...) _BCM_LOG_ARGS1(__VA_ARGS__)
+#define _BCM_LOG_ARGS10(...) _BCM_LOG_ARGS1(__VA_ARGS__)
+#define _BCM_LOG_ARGS11(...) _BCM_LOG_ARGS1(__VA_ARGS__)
+#define _BCM_LOG_ARGS12(...) _BCM_LOG_ARGS1(__VA_ARGS__)
+#define _BCM_LOG_ARGS13(...) _BCM_LOG_ARGS1(__VA_ARGS__)
+#define _BCM_LOG_ARGS14(...) _BCM_LOG_ARGS1(__VA_ARGS__)
+#define _BCM_LOG_ARGS15(...) _BCM_LOG_ARGS1(__VA_ARGS__)
+#define _BCM_LOG_ARGS16(...) _BCM_LOG_ARGS1(__VA_ARGS__)
+#define _BCM_LOG_ARGS17(...) _BCM_LOG_ARGS1(__VA_ARGS__)
+#define _BCM_LOG_ARGS18(...) _BCM_LOG_ARGS1(__VA_ARGS__)
+#define _BCM_LOG_ARGS19(...) _BCM_LOG_ARGS1(__VA_ARGS__)
+#define _BCM_LOG_ARGS20(...) _BCM_LOG_ARGS1(__VA_ARGS__)
+#define _BCM_LOG_ARGS21(...) _BCM_LOG_ARGS1(__VA_ARGS__)
+#define _BCM_LOG_ARGS22(...) _BCM_LOG_ARGS1(__VA_ARGS__)
+#define _BCM_LOG_ARGS23(...) _BCM_LOG_ARGS1(__VA_ARGS__)
+#define _BCM_LOG_ARGS24(...) _BCM_LOG_ARGS1(__VA_ARGS__)
+#define _BCM_LOG_ARGS25(...) _BCM_LOG_ARGS1(__VA_ARGS__)
+#define _BCM_LOG_ARGS26(...) _BCM_LOG_ARGS1(__VA_ARGS__)
+#define _BCM_LOG_ARGS27(...) _BCM_LOG_ARGS1(__VA_ARGS__)
+#define _BCM_LOG_ARGS28(...) _BCM_LOG_ARGS1(__VA_ARGS__)
+#define _BCM_LOG_ARGS29(...) _BCM_LOG_ARGS1(__VA_ARGS__)
+#define _BCM_LOG_ARGS30(...) _BCM_LOG_ARGS1(__VA_ARGS__)
+#define _BCM_LOG_ARGS31(...) _BCM_LOG_ARGS1(__VA_ARGS__)
+#define _BCM_LOG_ARGS32(...) _BCM_LOG_ARGS1(__VA_ARGS__)
+#define _BCM_LOG_ARGS33(...) _BCM_LOG_ARGS1(__VA_ARGS__)
+#define _BCM_LOG_ARGS34(...) _BCM_LOG_ARGS1(__VA_ARGS__)
+#define _BCM_LOG_ARGS35(...) _BCM_LOG_ARGS1(__VA_ARGS__)
+#define _BCM_LOG_ARGS36(...) _BCM_LOG_ARGS1(__VA_ARGS__)
+#define _BCM_LOG_ARGS(n) _BCM_LOG_ARGS##n
+#define _BCM_LOG_EXPAND(n,...) _BCM_LOG_ARGS(n) (__VA_ARGS__)
+
+/*
+ * IMPORTANT! you should use only this macro for logging
+ *
+ * 1. Support prints up to DEV_LOG_MAX_ARGS parameters each with maximum size of 32bits
+ * 2. Support also prints of arguments with size 64bits but each one counted as two arguments of 32bits,
+ *    so you can only print up to (DEV_LOG_MAX_ARGS/2) arguments of 64bits.
+ *    Mix of 64 and 32 are allowed as long you don't exceed DEV_LOG_MAX_ARGS.
+ * 3. Any possible combination of mix 32 and 64 arguments are allowed.
+ */
+#define BCM_LOG(level, id, ...) _BCM_LOG_EXPAND(MACRO_NUM_ARGS(__VA_ARGS__), DEV_LOG_LEVEL_##level, id, 0, __VA_ARGS__)
+/* Same as BCM_LOG(), but overrides BCM_LOG() default behavior by letting the format be done in the context of the caller task. This allows using stack/heap strings
+ * for fmt and args. See comment for BCM_LOG_FLAG_CALLER_FMT. */
+#define BCM_LOG_CALLER_FMT(level, id, ...) _BCM_LOG_EXPAND(MACRO_NUM_ARGS(__VA_ARGS__), DEV_LOG_LEVEL_##level, id, BCM_LOG_FLAG_CALLER_FMT, __VA_ARGS__)
+
+/* Same as BCM_LOG(), but the level is not given as a token for concatenation, but as a regular enum. */
+#define BCM_LOG_LEVEL(level, id, ...) _BCM_LOG_EXPAND(MACRO_NUM_ARGS(__VA_ARGS__), level, id, 0, __VA_ARGS__)
+
+#define BCM_LOG_FLAG_NONE 0
+#define BCM_LOG_FLAG_NO_HEADER (1 << 0) /* Avoid inserting header to each message. */
+#define BCM_LOG_FLAG_CALLER_FMT (1 << 1) /* The log message will be formatted in the context of the caller task, not the logger task (override default behavior).
+                                          * This has a penalty - bcm_dev_log_log() becomes slower. */
+#define BCM_LOG_FLAG_FILENAME_IN_FMT (1 << 2) /* Indicates that __FILE__ is inserted at the beginning of the message format. */
+#define BCM_LOG_FLAG_DONT_SKIP_PRINT (1 << 3) /* The message should always be printed even if the msg pool is nearly full. */
+
+/********************************************/
+/*                                          */
+/* Callbacks functions                      */
+/*                                          */
+/********************************************/
+
+/********************************************/
+/*                                          */
+/* Functions prototypes                     */
+/*                                          */
+/********************************************/
+
+const char *dev_log_basename(const char *str);
+
+/****************************************************************************************/
+/*                                                                                      */
+/* Name: bcm_dev_log_log                                                                */
+/* Abstract: Log function                                                               */
+/*           It is better using the macros and not the function directly.               */
+/*                                                                                      */
+/* Arguments:                                                                           */
+/*   - xi_id            - The Log ID this message is connected to.                      */
+/*                        (The ID we got form bcm_dev_log_id_register)                  */
+/*   - xi_log_level     - The Log level of this message                                 */
+/*   - xi_flags         - Can be one of BCM_LOG_FLAG_XXX above.                         */
+/*   - fmt              - The print format                                              */
+/*     Note:              The default behavior is to format the string in the logger    */
+/*                        task context, not the caller task context, to reduce the      */
+/*                        penalty of calling bcm_dev_log_log(). This means 'fmt' can    */
+/*                        point only to strings in data segment, but not to head/stack. */
+/*                        You can override this behavior with BCM_LOG_FLAG_CALLER_FMT.  */
+/*                                                                                      */
+/*   - param1           - Format parameter No. 1. Like 'fmt', can reside only in data   */
+/*                        segment, unless choosing BCM_LOG_FLAG_CALLER_FMT              */
+/*   - ...                                                                              */
+/*   - paramN           - Format parameter No. N                                        */
+/*                                                                                      */
+/* IMPORTANT!                                                                           */
+/* 1. The function bcm_dev_log_log() must have even number of arguments before the '...'*/
+/*    This comes from the 64bits limitation that must be align to 8bytes in some        */
+/*    platforms who doesn't support unaligned access,                                   */
+/*    on xponsw (x86) it doesn't matter but on device (arm) you must have that.         */
+/*                                                                                      */
+/****************************************************************************************/
+void bcm_dev_log_log(dev_log_id xi_id,
+    bcm_dev_log_level xi_log_level,
+    uint32_t xi_flags,
+    const char *fmt,
+    ...) __attribute__((format(__printf__, 4, 5))); /* compiler attribute to check as printf style for arguments 4 (fmt) and 5 (all other) */
+
+void bcm_dev_log_vlog(dev_log_id xi_id,
+    bcm_dev_log_level xi_log_level,
+    uint32_t xi_flags,
+    const char *fmt,
+    va_list args);
+
+typedef enum
+{
+    DEV_LOG_RATE_LIMIT_ID_NONE,
+    DEV_LOG_RATE_LIMIT_ID_BWS_DBA_BD_ADD_ALLOC_FAILED,
+    DEV_LOG_RATE_LIMIT_ID_BWS_CBR_RT_ADD_ALLOC_FAILED,
+    DEV_LOG_RATE_LIMIT_ID_BWS_CBR_RT_ADD_ACCESS_FAILED,
+    DEV_LOG_RATE_LIMIT_ID_BWS_QW_CBR_RT_ADD_ACCESS_FAILED,
+    DEV_LOG_RATE_LIMIT_ID_BWS_CBR_NRT_ADD_ALLOC_FAILED,
+    DEV_LOG_RATE_LIMIT_ID_BWS_CBR_COMPENSATION_ADD_ACCESS_FAILED,
+    DEV_LOG_RATE_LIMIT_ID_BWS_CBR_NO_COMPENSATION_ADD_ACCESS_FAILED,
+    DEV_LOG_RATE_LIMIT_ID_BWS_CBR_COPY_COMPENSATION_ADD_ACCESS_FAILED,
+    DEV_LOG_RATE_LIMIT_ID_BWS_CBR_RT_SAVE_ACCESS_FOR_COMPENSATION_FAILED,
+    DEV_LOG_RATE_LIMIT_ID_BWS_CBR_NRT_SAVE_ACCESS_FOR_COMPENSATION_FAILED,
+    DEV_LOG_RATE_LIMIT_ID_BWS_CBR_FLUSH_FAILED,
+    DEV_LOG_RATE_LIMIT_ID__NUM_OF,
+} dev_log_rate_limit_id;
+
+void bcm_dev_log_log_ratelimit(dev_log_id xi_id,
+    bcm_dev_log_level xi_log_level,
+    uint32_t xi_flags,
+    uint32_t rate_us,
+    dev_log_rate_limit_id rate_limit_id,
+    const char *fmt,
+    ...) __attribute__((format(__printf__, 6, 7))); /* compiler attribute to check as printf style for arguments 6 (fmt) and 7 (all other) */
+
+/********************************************************************************************/
+/*                                                                                          */
+/* Name: bcm_dev_log_os_trace_init                                                          */
+/*                                                                                          */
+/* Abstract: Direct bcmos_trace() output to log                                             */
+/* Arguments: NONE                                                                          */
+/*                                                                                          */
+/* Return Value:                                                                            */
+/*   bcmos_errno - Success code (BCM_ERR_OK) or Error code (see bcmos_errno.h)              */
+/*                                                                                          */
+/********************************************************************************************/
+bcmos_errno bcm_dev_log_os_trace_init(void);
+
+#else /* #ifndef ENABLE_LOG */
+
+#define BCM_LOG(level, id, ...)
+#define BCM_LOG_CALLER_FMT(level, id, ...)
+
+#endif /* ENABLE_LOG */
+
+#endif /* __BCM_DEV_LOG_H_ */
diff --git a/bcm68620_release/release/host_reference/dev_log/bcm_dev_log_cli.c b/bcm68620_release/release/host_reference/dev_log/bcm_dev_log_cli.c
new file mode 100644
index 0000000..cdffb59
--- /dev/null
+++ b/bcm68620_release/release/host_reference/dev_log/bcm_dev_log_cli.c
@@ -0,0 +1,684 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#include <bcmos_system.h>
+#include <bcm_dev_log.h>
+#include <bcm_dev_log_task_internal.h>
+
+/* We don't support dev_log CLI in linux kernel space */
+#ifndef __KERNEL__
+
+/* Dev log CLI session supports receiving long lines - we shall simply split them into shorter log messages. */
+#define DEV_LOG_CLI_SESSION_MAX_MSG_SIZE (MAX_DEV_LOG_STRING_NET_SIZE * 10)
+
+enum
+{
+    ID_BY_INDEX,
+    ID_BY_NAME,
+};
+
+static bcmos_errno bcm_dev_log_file_print(uint32_t file_index, int32_t xi_msgs_num, bcm_dev_log_print_cb xi_print_callback, void *arg, bcmos_bool clear)
+{
+    bcm_dev_log_file *file;
+    char log_string[MAX_DEV_LOG_STRING_SIZE];
+    int length;
+    uint32_t num_msgs;
+    uint32_t i;
+    uint32_t offset = 0;
+    bcmos_errno err = BCM_ERR_OK;
+
+    file = bcm_dev_log_file_get(file_index);
+    if (!file)
+        return BCM_ERR_PARM;
+
+    num_msgs = bcm_dev_log_get_num_of_messages(file);
+    if (xi_msgs_num && xi_msgs_num < num_msgs)
+        num_msgs = xi_msgs_num;
+
+    DEV_LOG_INFO_PRINTF("file=%p, print %d msgs from file (orig: %d)\n", (void *)file, (int)num_msgs, (int)xi_msgs_num);
+
+    /* Print file */
+    for (i = 0; (i < xi_msgs_num) || !xi_msgs_num; i++)
+    {
+        /* Read from file */
+        length = bcm_dev_log_file_read(file, &offset, log_string, sizeof(log_string));
+        if (!length)
+            break;
+        xi_print_callback(arg, log_string);
+    }
+
+    if (clear == BCMOS_TRUE)
+        err = bcm_dev_log_file_clear(file);
+
+    return err;
+}
+
+static const char *dev_log_str_style(bcm_dev_log_style style)
+{
+    static const char *strings[] =
+    {
+        [BCM_DEV_LOG_STYLE_NORMAL] = "NORMAL",
+        [BCM_DEV_LOG_STYLE_BOLD] = "BOLD",
+        [BCM_DEV_LOG_STYLE_UNDERLINE] = "UNDERLINE",
+        [BCM_DEV_LOG_STYLE_BLINK] = "BLINK",
+        [BCM_DEV_LOG_STYLE_REVERSE_VIDEO] = "REVERSE_VIDEO",
+    };
+    return strings[style > BCM_DEV_LOG_STYLE_REVERSE_VIDEO ? BCM_DEV_LOG_STYLE_REVERSE_VIDEO : style];
+}
+#ifdef TRIGGER_LOGGER_FEATURE
+static void bcm_dev_log_cli_session_print_features(bcmcli_session *session, const char *tabs, const dev_log_id_parm *id_parm)
+{
+    bcmcli_session_print(session,
+        "%sthrottle : level = %c, threshold = %-5u\n",
+        tabs,
+        log_level_str[id_parm->throttle_log_level],
+        id_parm->throttle.threshold);
+
+    bcmcli_session_print(session,
+        "%strigger : level = %c, start = %-5u, stop = %-5u, repeat = %-5u\n",
+        tabs,
+        log_level_str[id_parm->trigger_log_level],
+        id_parm->trigger.start_threshold,
+        id_parm->trigger.stop_threshold,
+        id_parm->trigger.repeat_threshold);
+}
+#endif
+
+static void bcm_dev_log_cli_session_print_id_parm(bcmcli_session *session, const char *tabs, const dev_log_id_parm *id_parm)
+{
+    bcmcli_session_print(session,
+        "name=%16s, log_type=%u, default_log_type=%u, log_level_print=%c (%u), log_level_save=%c (%u), default_log_level=%c (%u), style=%s (%u), lost_msg_cnt=%u, print_skipped_count=%u\n",
+        id_parm->name,
+        id_parm->log_type,
+        id_parm->default_log_type,
+        log_level_str[id_parm->log_level_print],
+        id_parm->log_level_print,
+        log_level_str[id_parm->log_level_save],
+        id_parm->log_level_save,
+        log_level_str[id_parm->default_log_level],
+        id_parm->default_log_level,
+        dev_log_str_style(id_parm->style),
+        id_parm->style,
+        id_parm->lost_msg_cnt,
+        id_parm->print_skipped_count);
+    bcmcli_session_print(session,
+        "%scounters          = {%c %-5u,%c %-5u,%c %-5u,%c %-5u,%c %-5u,%c %-5u}\n",
+        tabs,
+        log_level_str[DEV_LOG_LEVEL_NO_LOG],
+        id_parm->counters[DEV_LOG_LEVEL_NO_LOG],
+        log_level_str[DEV_LOG_LEVEL_FATAL],
+        id_parm->counters[DEV_LOG_LEVEL_FATAL],
+        log_level_str[DEV_LOG_LEVEL_ERROR],
+        id_parm->counters[DEV_LOG_LEVEL_ERROR],
+        log_level_str[DEV_LOG_LEVEL_WARNING],
+        id_parm->counters[DEV_LOG_LEVEL_WARNING],
+        log_level_str[DEV_LOG_LEVEL_INFO],
+        id_parm->counters[DEV_LOG_LEVEL_INFO],
+        log_level_str[DEV_LOG_LEVEL_DEBUG],
+        id_parm->counters[DEV_LOG_LEVEL_DEBUG]);
+#ifdef TRIGGER_LOGGER_FEATURE
+    bcm_dev_log_cli_session_print_features(session, tabs, id_parm);
+#endif
+}
+
+static bcmos_errno bcm_dev_log_cli_print_dev_log(
+    bcmcli_session *session,
+    const bcmcli_cmd_parm parm[],
+    uint16_t n_parms)
+{
+    uint32_t i;
+    bcm_dev_log_file *file;
+
+    for (i = 0; i < DEV_LOG_MAX_FILES; i++)
+    {
+        file = bcm_dev_log_file_get(i);
+        if (!file)
+            continue;
+        bcmcli_session_print(session, TAB  "file[%u]:\n", i);
+        bcmcli_session_print(session, TAB2 "max_msgs = %u\n", bcm_dev_log_get_num_of_messages(file));
+        bcmcli_session_print(session, TAB2 "file_parm:\n");
+        bcmcli_session_print(session, TAB3 "start_addr = %p\n", dev_log.files[i].file_parm.start_addr);
+        bcmcli_session_print(session, TAB3 "size       = %u\n", dev_log.files[i].file_parm.size);
+        bcmcli_session_print(session, TAB3 "read_cb    = %p\n", (void *)dev_log.files[i].file_parm.read_cb);
+        bcmcli_session_print(session, TAB3 "write_cb   = %p\n", (void *)dev_log.files[i].file_parm.write_cb);
+        bcmcli_session_print(session, TAB3 "flags      = %x\n", dev_log.files[i].file_parm.flags);
+    }
+    bcmcli_session_print(session, TAB "state     = %u\n", dev_log.state);
+    bcmcli_session_print(session, TAB "msg_count = %u\n", dev_log.msg_count);
+    bcmcli_session_print(session, TAB "save_queue:\n");
+    bcmcli_session_print(session, TAB2 "is_waiting  = %u\n", dev_log.save_queue.is_waiting);
+    bcmcli_session_print(session, TAB "print_queue:\n");
+    bcmcli_session_print(session, TAB2 "is_waiting  = %u\n", dev_log.print_queue.is_waiting);
+    bcmcli_session_print(session, TAB "save_task:\n");
+    bcmcli_session_print(session, TAB2 "active_modules  = %u\n", dev_log.save_task.active_modules);
+    bcmcli_session_print(session, TAB2 "current_module  = %u\n", dev_log.save_task.current_module);
+    bcmcli_session_print(session, TAB "print_task:\n");
+    bcmcli_session_print(session, TAB2 "active_modules  = %u\n", dev_log.print_task.active_modules);
+    bcmcli_session_print(session, TAB2 "current_module  = %u\n", dev_log.print_task.current_module);
+
+    bcmcli_session_print(session, TAB "num_ids = %u\n", dev_log.num_ids);
+    bcmcli_session_print(session, TAB  "ids[]:\n");
+    for (i = 0; i < dev_log.num_ids; i++)
+    {
+        bcmcli_session_print(session, TAB2  "ids[%2u]: ", i);
+        bcm_dev_log_cli_session_print_id_parm(session, TAB3, &dev_log.ids[i]);
+    }
+
+    for (i = 0; i < log_name_table_index; i++)
+    {
+        if (logs_names[i].first_instance == LOG_NAME_NO_INSTANCE)
+        {
+            bcmcli_session_print(session, TAB2  "%s\n", logs_names[i].name);
+        }
+        else
+        {
+            bcmcli_session_print(session, TAB2  "%s %d - %d\n", logs_names[i].name, logs_names[i].first_instance, logs_names[i].last_instance);
+        }
+    }
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno bcm_dev_log_cli_logger_control(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    bcm_dev_log_set_control(parm[0].value.unumber != 0);
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno bcm_dev_log_cli_file_print(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    return bcm_dev_log_file_print(
+        parm[0].value.unumber,
+        0,
+        (bcm_dev_log_print_cb)bcmcli_session_print,
+        session,
+        (bcmos_bool)parm[1].value.unumber);
+}
+
+static bcmos_errno bcm_dev_log_cli_file_clear(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    bcm_dev_log_file *file = bcm_dev_log_file_get(parm[0].value.unumber);
+    if (!file)
+        return BCM_ERR_PARM;
+    return bcm_dev_log_file_clear(file);
+}
+
+static bcmos_errno bcm_dev_log_cli_file_set_flags(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    dev_log.files[parm[0].value.unumber].file_parm.flags |= (bcm_dev_log_file_flags)parm[1].value.unumber;
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno bcm_dev_log_cli_file_reset_flags(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    dev_log.files[parm[0].value.unumber].file_parm.flags = 0;
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno bcm_dev_log_cli_id_get(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    dev_log_id id;
+    dev_log_id_parm id_parm;
+    bcmos_errno err;
+
+    id = parm[0].value.unumber == ID_BY_INDEX ? bcm_dev_log_id_get_by_index(parm[1].value.unumber) :
+        bcm_dev_log_id_get_by_name(parm[1].value.string);
+    if (id == DEV_LOG_INVALID_ID)
+        return BCM_ERR_NOENT;
+
+    err = bcm_dev_log_id_get(id, &id_parm);
+    if (err)
+    {
+        bcmcli_session_print(session, "Error: can get id (err: %d)\n", err);
+        return err;
+    }
+
+    bcm_dev_log_cli_session_print_id_parm(session, TAB, &id_parm);
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno bcm_dev_log_cli_id_set_type(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    dev_log_id id;
+
+    id = bcm_dev_log_id_get_by_index(parm[0].value.unumber);
+    if (id == DEV_LOG_INVALID_ID)
+        return BCM_ERR_NOENT;
+
+    return bcm_dev_log_id_set_type(id, (bcm_dev_log_id_type)parm[1].value.unumber);
+}
+
+static bcmos_errno bcm_dev_log_cli_id_set_level(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    dev_log_id id;
+
+    id = bcm_dev_log_id_get_by_index(parm[0].value.unumber);
+    if (id == DEV_LOG_INVALID_ID)
+        return BCM_ERR_NOENT;
+
+    return bcm_dev_log_id_set_level(
+        id,
+        (bcm_dev_log_level)parm[1].value.unumber,
+        (bcm_dev_log_level)parm[2].value.unumber);
+}
+
+static bcmos_errno bcm_dev_log_cli_name_set_level(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    dev_log_id id;
+
+    id = bcm_dev_log_id_get_by_name(parm[0].value.string);
+    if (id == DEV_LOG_INVALID_ID)
+    {
+        return BCM_ERR_NOENT;
+    }
+
+    return bcm_dev_log_id_set_level(
+        id,
+        (bcm_dev_log_level)parm[1].value.unumber,
+        (bcm_dev_log_level)parm[2].value.unumber);
+}
+
+static bcmos_errno bcm_dev_log_cli_id_set_to_default(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    dev_log_id id;
+
+    id = bcm_dev_log_id_get_by_index(parm[0].value.unumber);
+    if (id == DEV_LOG_INVALID_ID)
+        return BCM_ERR_NOENT;
+
+    return bcm_dev_log_id_set_levels_and_type_to_default(id);
+}
+
+static bcmos_errno bcm_dev_log_cli_id_set_style(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    dev_log_id id;
+    bcm_dev_log_style style;
+
+    id = bcm_dev_log_id_get_by_index(bcmcli_find_named_parm(session, "index")->value.unumber);
+    if (id == DEV_LOG_INVALID_ID)
+        return BCM_ERR_NOENT;
+    style = (bcm_dev_log_style)bcmcli_find_named_parm(session, "style")->value.unumber;
+
+    return bcm_dev_log_id_set_style(id, style);
+}
+
+static bcmos_errno bcm_dev_log_cli_id_clear_counters(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    dev_log_id id;
+
+    id = bcm_dev_log_id_get_by_index(parm[0].value.unumber);
+    if (id == DEV_LOG_INVALID_ID)
+        return BCM_ERR_NOENT;
+
+    return bcm_dev_log_id_clear_counters(id);
+}
+
+static bcmos_errno bcm_dev_log_cli_log(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    dev_log_id id;
+    bcm_dev_log_level log_level;
+    uint32_t count = 1;
+    const char *string;
+    bcmcli_cmd_parm *cmd_parm;
+
+    id = bcm_dev_log_id_get_by_index(parm[0].value.unumber);
+    if (id == DEV_LOG_INVALID_ID)
+        return BCM_ERR_NOENT;
+
+    if ((cmd_parm = bcmcli_find_named_parm(session, "count")))
+    {
+        count = cmd_parm->value.unumber;
+        if (!count)
+        {
+            count = 1;
+        }
+    }
+
+    log_level = (bcm_dev_log_level)parm[1].value.unumber;
+    string = parm[2].value.string;
+
+    while (count--)
+    {
+        bcm_dev_log_log(id, log_level, BCM_LOG_FLAG_NONE, "%5u| Message: %s\n", count, string);
+    }
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno bcm_dev_log_cli_instance_enable(
+    bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    static char log_name[MAX_DEV_LOG_ID_NAME];
+    bcmos_bool enable = (bcmos_bool)bcmcli_find_named_parm(session, "enable")->value.unumber;
+    uint32_t inst = bcmcli_find_named_parm(session, "instance")->value.unumber;
+    dev_log_id log_id;
+    bcmos_errno err;
+    uint32_t i;
+
+    for (i = 0; i < log_name_table_index; i++)
+    {
+        if (logs_names[i].first_instance != LOG_NAME_NO_INSTANCE &&
+            inst >= logs_names[i].first_instance &&
+            inst <= logs_names[i].last_instance)
+        {
+            snprintf(log_name, sizeof(log_name), "%s%u", logs_names[i].name, inst);
+            log_id = bcm_dev_log_id_get_by_name(log_name);
+            if (log_id == DEV_LOG_INVALID_ID)
+            {
+                bcmcli_session_print(session, "Error: log ID not found: %s\n", log_name);
+                return BCM_ERR_INTERNAL;
+            }
+            err = bcm_dev_log_id_set_type(log_id, enable ? DEV_LOG_ID_TYPE_BOTH : DEV_LOG_ID_TYPE_NONE);
+            if (err != BCM_ERR_OK)
+            {
+                bcmcli_session_print(session, "Error setting log type: %s\n", bcmos_strerror(err));
+                return err;
+            }
+            bcmcli_session_print(session, "Log '%s' %s\n", log_name, enable ? "enabled" : "disabled");
+        }
+    }
+
+    return BCM_ERR_OK;
+}
+
+#ifdef TRIGGER_LOGGER_FEATURE
+static bcmos_errno bcm_dev_log_cli_throttle(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    dev_log_id id;
+
+    id = bcm_dev_log_id_get_by_index(parm[0].value.unumber);
+    if (id == DEV_LOG_INVALID_ID)
+        return BCM_ERR_NOENT;
+
+    return bcm_dev_log_set_throttle(id, parm[1].value.unumber, parm[2].value.unumber);
+}
+
+static bcmos_errno bcm_dev_log_cli_trigger(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    dev_log_id id;
+    int32_t repeat = 0;
+    bcmcli_cmd_parm *cmd_parm;
+
+    id = bcm_dev_log_id_get_by_index(parm[0].value.unumber);
+    if (id == DEV_LOG_INVALID_ID)
+        return BCM_ERR_NOENT;
+
+    if ((cmd_parm = bcmcli_find_named_parm(session, "repeat")))
+        repeat = cmd_parm->value.number;
+
+    return bcm_dev_log_set_trigger(id, parm[1].value.unumber, parm[2].value.unumber, parm[3].value.unumber, repeat);
+}
+
+static bcmos_errno bcm_dev_log_cli_get_features(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    dev_log_id id;
+    dev_log_id_parm id_parm;
+    bcmos_errno err;
+
+    id = bcm_dev_log_id_get_by_index(parm[0].value.unumber);
+    if (id == DEV_LOG_INVALID_ID)
+        return BCM_ERR_NOENT;
+
+    err = bcm_dev_log_id_get(id, &id_parm);
+    if (err)
+    {
+        bcmcli_session_print(session, "Error: can get id (err: %d)\n", err);
+        return err;
+    }
+
+    bcm_dev_log_cli_session_print_features(session, TAB, &id_parm);
+
+    return BCM_ERR_OK;
+}
+#endif
+
+static int dev_log_cli_session_write_cb(bcmcli_session *cli_session, const char *buf, uint32_t size)
+{
+    bcm_dev_log_cli_session *session = bcmcli_session_user_priv(cli_session);
+    char tmp_str[DEV_LOG_CLI_SESSION_MAX_MSG_SIZE] = {};
+    char *p;
+    uint32_t tmp_str_len;
+
+    strncpy(tmp_str, buf, sizeof(tmp_str) - 1); /* leave room for the terminator */
+
+    p = tmp_str;
+    tmp_str_len = strlen(tmp_str);
+    while (tmp_str_len > session->free_len)
+    {
+        /* Not enough space in 'str' for concatenating what's in 'p' -> split it. */
+        strncat(session->str, p, session->free_len);
+        bcm_dev_log_log(
+            session->log_id, session->log_level, BCM_LOG_FLAG_NO_HEADER | BCM_LOG_FLAG_CALLER_FMT, "%s", session->str);
+        *session->str = '\0';
+        p += session->free_len;
+        tmp_str_len -= session->free_len;
+        session->free_len = MAX_DEV_LOG_STRING_NET_SIZE - 1;
+    }
+
+    /* Enough space in 'str' for concatenating what's in 'p'. */
+    strncat(session->str, p, tmp_str_len);
+    session->free_len -= tmp_str_len;
+
+    /* If the message is not terminated by '\n', do not submit the message to logger yet
+     * (rather save it, waiting for a later message with '\n'). */
+    if (session->str[strlen(session->str) - 1] == '\n')
+    {
+        bcm_dev_log_log(
+            session->log_id, session->log_level, BCM_LOG_FLAG_NO_HEADER | BCM_LOG_FLAG_CALLER_FMT, "%s", session->str);
+        *session->str = '\0';
+        session->free_len = MAX_DEV_LOG_STRING_NET_SIZE - 1;
+    }
+
+    return size;
+}
+
+bcmos_errno bcm_dev_log_cli_session_create(
+    dev_log_id log_id,
+    bcm_dev_log_level log_level,
+    bcm_dev_log_cli_session **session)
+{
+    bcmos_errno err;
+    bcmcli_session_parm session_params = { .write = dev_log_cli_session_write_cb };
+
+    *session = bcmos_calloc(sizeof(bcm_dev_log_cli_session));
+    if (*session == NULL)
+    {
+        return BCM_ERR_NOMEM;
+    }
+
+    session_params.user_priv = *session;
+    err = bcmcli_session_open(&session_params, &((*session)->session));
+    if (err != BCM_ERR_OK)
+    {
+        bcmos_free(*session);
+        *session = NULL;
+        return err;
+    }
+
+    (*session)->log_id = log_id;
+    (*session)->log_level = log_level;
+    (*session)->free_len = MAX_DEV_LOG_STRING_NET_SIZE - 1;
+    return BCM_ERR_OK;
+}
+
+bcmcli_entry *bcm_dev_log_cli_init(bcmcli_entry *root_dir)
+{
+    bcmcli_entry *dir;
+    static bcmcli_enum_val enum_table_log_level[] =
+    {
+        { .name = "NO_LOG", .val = (long)DEV_LOG_LEVEL_NO_LOG },
+        { .name = "FATAL", .val = (long)DEV_LOG_LEVEL_FATAL },
+        { .name = "ERROR", .val = (long)DEV_LOG_LEVEL_ERROR },
+        { .name = "WARNING", .val = (long)DEV_LOG_LEVEL_WARNING},
+        { .name = "INFO", .val = (long)DEV_LOG_LEVEL_INFO },
+        { .name = "DEBUG", .val = (long)DEV_LOG_LEVEL_DEBUG },
+        BCMCLI_ENUM_LAST
+    };
+
+    if ((dir = bcmcli_dir_find(NULL, "logger")) != NULL)
+        return dir;
+
+    dir = bcmcli_dir_add(root_dir, "logger", "Dev Log", BCMCLI_ACCESS_GUEST, NULL);
+
+    {
+        BCMCLI_MAKE_CMD_NOPARM(dir, "print_dev_log", "Print Dev log", bcm_dev_log_cli_print_dev_log);
+    }
+    {
+        BCMCLI_MAKE_CMD(dir, "logger_control", "Logger Control", bcm_dev_log_cli_logger_control,
+            BCMCLI_MAKE_PARM_RANGE("enable", "enable", BCMCLI_PARM_UDECIMAL, 0, 0, 1));
+    }
+    {
+        BCMCLI_MAKE_CMD(dir, "file_print", "Print logger file", bcm_dev_log_cli_file_print,
+            BCMCLI_MAKE_PARM("index", "index", BCMCLI_PARM_UDECIMAL, 0),
+            BCMCLI_MAKE_PARM_RANGE("clear", "clear", BCMCLI_PARM_UDECIMAL, 0, 0, 1));
+    }
+    {
+        BCMCLI_MAKE_CMD(dir, "file_clear", "Clear file", bcm_dev_log_cli_file_clear,
+            BCMCLI_MAKE_PARM("index", "index", BCMCLI_PARM_UDECIMAL, 0));
+    }
+    {
+        static bcmcli_enum_val enum_table_file_flags[] =
+        {
+            { .name = "VALID", .val = (long)BCM_DEV_LOG_FILE_FLAG_VALID },
+            { .name = "WRAP_AROUND", .val = (long)BCM_DEV_LOG_FILE_FLAG_WRAP_AROUND },
+            { .name = "STOP_WHEN_FULL", .val = (long)BCM_DEV_LOG_FILE_FLAG_STOP_WHEN_FULL },
+            BCMCLI_ENUM_LAST
+        };
+        BCMCLI_MAKE_CMD(dir, "file_set_flags", "Set file flags", bcm_dev_log_cli_file_set_flags,
+            BCMCLI_MAKE_PARM_RANGE("index", "index", BCMCLI_PARM_UDECIMAL, 0, 0, DEV_LOG_MAX_FILES-1),
+            BCMCLI_MAKE_PARM_ENUM("flags", "flags", enum_table_file_flags, 0));
+    }
+    {
+        BCMCLI_MAKE_CMD(dir, "file_reset_flags", "Reset file flags", bcm_dev_log_cli_file_reset_flags,
+            BCMCLI_MAKE_PARM_RANGE("index", "index", BCMCLI_PARM_UDECIMAL, 0, 0, DEV_LOG_MAX_FILES-1));
+    }
+    {
+        static bcmcli_cmd_parm set1[]=
+        {
+            BCMCLI_MAKE_PARM("index", "index", BCMCLI_PARM_UDECIMAL, 0),
+            BCMCLI_PARM_LIST_TERMINATOR
+        };
+        static bcmcli_cmd_parm set2[] =
+        {
+            BCMCLI_MAKE_PARM("name", "name", BCMCLI_PARM_STRING, 0),
+            BCMCLI_PARM_LIST_TERMINATOR
+        };
+        static bcmcli_enum_val selector_table[] =
+        {
+            { .name = "by_index", .val = ID_BY_INDEX, .parms = set1 },
+            { .name = "by_name", .val = ID_BY_NAME, .parms = set2 },
+            BCMCLI_ENUM_LAST
+        };
+        BCMCLI_MAKE_CMD(dir, "id_get", "id_get", bcm_dev_log_cli_id_get,
+            BCMCLI_MAKE_PARM_SELECTOR("by", "by", selector_table, 0));
+    }
+    {
+        static bcmcli_enum_val enum_table[] =
+        {
+            { .name = "none", .val = (long)DEV_LOG_ID_TYPE_NONE },
+            { .name = "print", .val = (long)DEV_LOG_ID_TYPE_PRINT },
+            { .name = "save", .val = (long)DEV_LOG_ID_TYPE_SAVE },
+            { .name = "both", .val = (long)DEV_LOG_ID_TYPE_BOTH },
+            BCMCLI_ENUM_LAST
+        };
+        BCMCLI_MAKE_CMD(dir, "id_set_type", "id_set_type", bcm_dev_log_cli_id_set_type,
+            BCMCLI_MAKE_PARM("index", "index", BCMCLI_PARM_UDECIMAL, 0),
+            BCMCLI_MAKE_PARM_ENUM("log_type", "log_type", enum_table, 0));
+    }
+    {
+        BCMCLI_MAKE_CMD(dir, "id_set_level", "id_set_level", bcm_dev_log_cli_id_set_level,
+            BCMCLI_MAKE_PARM("index", "index", BCMCLI_PARM_UDECIMAL, 0),
+            BCMCLI_MAKE_PARM_ENUM("log_level_print", "log_level", enum_table_log_level, 0),
+            BCMCLI_MAKE_PARM_ENUM("log_level_save", "log_level", enum_table_log_level, 0));
+    }
+    {
+        BCMCLI_MAKE_CMD(dir, "name_set_level", "name_set_level", bcm_dev_log_cli_name_set_level,
+            BCMCLI_MAKE_PARM("name", "name", BCMCLI_PARM_STRING, 0),
+            BCMCLI_MAKE_PARM_ENUM("log_level_print", "log_level", enum_table_log_level, 0),
+            BCMCLI_MAKE_PARM_ENUM("log_level_save", "log_level", enum_table_log_level, 0));
+    }
+    {
+        BCMCLI_MAKE_CMD(dir, "id_set_to_default", "id_set_to_default", bcm_dev_log_cli_id_set_to_default,
+            BCMCLI_MAKE_PARM("index", "index", BCMCLI_PARM_UDECIMAL, 0));
+    }
+    {
+        static bcmcli_enum_val enum_table_log_style[] =
+        {
+            { .name = "normal", .val = (long)BCM_DEV_LOG_STYLE_NORMAL },
+            { .name = "bold", .val = (long)BCM_DEV_LOG_STYLE_BOLD },
+            { .name = "underline", .val = (long)BCM_DEV_LOG_STYLE_UNDERLINE },
+            { .name = "blink", .val = (long)BCM_DEV_LOG_STYLE_BLINK },
+            { .name = "reverse_video", .val = (long)BCM_DEV_LOG_STYLE_REVERSE_VIDEO },
+            BCMCLI_ENUM_LAST
+        };
+        BCMCLI_MAKE_CMD(dir, "id_set_style", "id_set_style", bcm_dev_log_cli_id_set_style,
+            BCMCLI_MAKE_PARM("index", "index", BCMCLI_PARM_UDECIMAL, 0),
+            BCMCLI_MAKE_PARM_ENUM("style", "style", enum_table_log_style, 0));
+    }
+    {
+        BCMCLI_MAKE_CMD(dir, "id_clear_counters", "id_clear_counters", bcm_dev_log_cli_id_clear_counters,
+            BCMCLI_MAKE_PARM("index", "index", BCMCLI_PARM_UDECIMAL, 0));
+    }
+    {
+        BCMCLI_MAKE_CMD(dir, "log", "log", bcm_dev_log_cli_log,
+            BCMCLI_MAKE_PARM("index", "index", BCMCLI_PARM_UDECIMAL, 0),
+            BCMCLI_MAKE_PARM_ENUM("log_level_print", "log_level", enum_table_log_level, 0),
+            BCMCLI_MAKE_PARM("string", "string", BCMCLI_PARM_STRING, 0),
+            BCMCLI_MAKE_PARM("count", "Number of messages to send", BCMCLI_PARM_UDECIMAL, BCMCLI_PARM_FLAG_OPTIONAL));
+    }
+    {
+        BCMCLI_MAKE_CMD(dir, "instance_enable", "enable/disable instance number", bcm_dev_log_cli_instance_enable,
+            BCMCLI_MAKE_PARM_ENUM("enable", "enable", bcmcli_enum_bool_table, 0),
+            BCMCLI_MAKE_PARM("instance", "instance number", BCMCLI_PARM_UDECIMAL, 0));
+    }
+#ifdef TRIGGER_LOGGER_FEATURE
+    {
+        BCMCLI_MAKE_CMD(dir, "id_set_throttle", "set throttle", bcm_dev_log_cli_throttle,
+            BCMCLI_MAKE_PARM("index", "index", BCMCLI_PARM_UDECIMAL, 0),
+            BCMCLI_MAKE_PARM_ENUM("log_level_print", "log_level", enum_table_log_level, 0),
+            BCMCLI_MAKE_PARM("throttle", "throttle", BCMCLI_PARM_UDECIMAL, 0));
+    }
+    {
+        BCMCLI_MAKE_CMD(dir, "id_set_trigger", "set trigger", bcm_dev_log_cli_trigger,
+            BCMCLI_MAKE_PARM("index", "index", BCMCLI_PARM_UDECIMAL, 0),
+            BCMCLI_MAKE_PARM_ENUM("log_level_print", "log_level", enum_table_log_level, 0),
+            BCMCLI_MAKE_PARM("start", "start", BCMCLI_PARM_UDECIMAL, 0),
+            BCMCLI_MAKE_PARM("stop", "stop", BCMCLI_PARM_UDECIMAL, 0),
+            BCMCLI_MAKE_PARM("repeat", "repeat", BCMCLI_PARM_DECIMAL, BCMCLI_PARM_FLAG_OPTIONAL));
+    }
+    {
+        BCMCLI_MAKE_CMD(dir, "id_get_feature", "get feature", bcm_dev_log_cli_get_features,
+           BCMCLI_MAKE_PARM("index", "index", BCMCLI_PARM_UDECIMAL, 0));
+    }
+#endif
+    return dir;
+}
+
+#endif /* #ifndef __KERNEL__ */
diff --git a/bcm68620_release/release/host_reference/dev_log/bcm_dev_log_cli.h b/bcm68620_release/release/host_reference/dev_log/bcm_dev_log_cli.h
new file mode 100644
index 0000000..da090b4
--- /dev/null
+++ b/bcm68620_release/release/host_reference/dev_log/bcm_dev_log_cli.h
@@ -0,0 +1,55 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef BCM_DEV_LOG_CLI_H_
+#define BCM_DEV_LOG_CLI_H_
+
+#include <bcmcli.h>
+#include <bcmcli_session.h>
+#include "bcm_dev_log_task.h"
+
+typedef struct
+{
+    bcmcli_session *session;
+    dev_log_id log_id;
+    bcm_dev_log_level log_level;
+    char str[MAX_DEV_LOG_STRING_NET_SIZE];
+    uint32_t free_len;
+} bcm_dev_log_cli_session;
+
+/* create a CLI session adaptation layer that outputs to a dev log instead of to a CLI shell */
+bcmos_errno bcm_dev_log_cli_session_create(
+    dev_log_id log_id,
+    bcm_dev_log_level log_level,
+    bcm_dev_log_cli_session **session);
+
+/* initialize the dev log CLI functions */
+bcmcli_entry *bcm_dev_log_cli_init(bcmcli_entry *root_dir);
+
+#endif /* BCM_DEV_LOG_CLI_H_ */
diff --git a/bcm68620_release/release/host_reference/dev_log/bcm_dev_log_task.c b/bcm68620_release/release/host_reference/dev_log/bcm_dev_log_task.c
new file mode 100644
index 0000000..6665588
--- /dev/null
+++ b/bcm68620_release/release/host_reference/dev_log/bcm_dev_log_task.c
@@ -0,0 +1,1752 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifdef ENABLE_LOG
+
+#include "bcm_dev_log_task.h"
+#include "bcm_dev_log_task_internal.h"
+#include "bcm_dev_log.h"
+#if defined(LINUX_KERNEL_SPACE) && !defined(__KERNEL__)
+#include "bcmolt_dev_log_linux.h"
+#endif
+
+#ifdef DEV_LOG_SYSLOG
+#include <syslog.h>
+#endif
+
+#define USE_ANSI_ESCAPE_CODES
+
+#ifdef USE_ANSI_ESCAPE_CODES
+#define DEV_LOG_STYLE_NORMAL        "\033[0m\033#5"
+#define DEV_LOG_STYLE_BOLD          "\033[1m"
+#define DEV_LOG_STYLE_UNDERLINE     "\033[4m"
+#define DEV_LOG_STYLE_BLINK         "\033[5m"
+#define DEV_LOG_STYLE_REVERSE_VIDEO "\033[7m"
+#else
+#define DEV_LOG_STYLE_NORMAL        "    "
+#define DEV_LOG_STYLE_BOLD          "*** "
+#define DEV_LOG_STYLE_UNDERLINE     "___ "
+#define DEV_LOG_STYLE_BLINK         "o_o "
+#define DEV_LOG_STYLE_REVERSE_VIDEO "!!! "
+#endif
+
+#define DEV_LOG_MSG_START_CHAR      0x1e        /* record separator character */
+
+#define MEM_FILE_HDR_SIZE       sizeof(dev_log_mem_file_header)
+
+#define LOG_MIN(a,b)        (((int)(a) <= (int)(b)) ? (a) : (b))
+
+dev_log_id def_log_id;
+
+static bcm_dev_log_style dev_log_level2style[DEV_LOG_LEVEL_NUM_OF] =
+{
+    [DEV_LOG_LEVEL_FATAL] = BCM_DEV_LOG_STYLE_NORMAL,
+    [DEV_LOG_LEVEL_ERROR] = BCM_DEV_LOG_STYLE_NORMAL,
+    [DEV_LOG_LEVEL_WARNING] = BCM_DEV_LOG_STYLE_NORMAL,
+    [DEV_LOG_LEVEL_INFO] = BCM_DEV_LOG_STYLE_NORMAL,
+    [DEV_LOG_LEVEL_DEBUG] = BCM_DEV_LOG_STYLE_NORMAL,
+};
+
+static const char *dev_log_style_array[] =
+{
+    [BCM_DEV_LOG_STYLE_NORMAL] = DEV_LOG_STYLE_NORMAL,
+    [BCM_DEV_LOG_STYLE_BOLD] = DEV_LOG_STYLE_BOLD,
+    [BCM_DEV_LOG_STYLE_UNDERLINE] = DEV_LOG_STYLE_UNDERLINE,
+    [BCM_DEV_LOG_STYLE_BLINK] = DEV_LOG_STYLE_BLINK,
+    [BCM_DEV_LOG_STYLE_REVERSE_VIDEO] = DEV_LOG_STYLE_REVERSE_VIDEO,
+};
+
+bcm_dev_log dev_log = {{0}};
+const char *log_level_str = "?FEWID";
+
+static void bcm_dev_log_shutdown_msg_release(bcmos_msg *m)
+{
+    (void)m; /* do nothing, the message is statically allocated */
+}
+
+static bcmos_msg shutdown_msg = { .release = bcm_dev_log_shutdown_msg_release };
+
+static void bcm_dev_log_file_save_msg(bcm_dev_log_file *files, const char *message)
+{
+    uint32_t i;
+    uint32_t len = strlen(message) + 1; /* including 0 terminator */
+
+    for (i = 0; (i < DEV_LOG_MAX_FILES) && (files[i].file_parm.flags & BCM_DEV_LOG_FILE_FLAG_VALID); i++)
+    {
+        files[i].file_parm.write_cb(&files[i], message, len);
+    }
+}
+
+static void dev_log_save_task_handle_message(bcmos_msg *msg)
+{
+    static char log_string[MAX_DEV_LOG_STRING_SIZE];
+    uint32_t length;
+    char time_str[17];
+    dev_log_queue_msg *receive_msg = msg->data;
+    dev_log_id_parm *log_id = receive_msg->log_id;
+    bcm_dev_log_level msg_level = receive_msg->msg_level;
+
+    /* Build message header */
+    *log_string = '\0';
+    if (!(receive_msg->flags & BCM_LOG_FLAG_NO_HEADER))
+    {
+        length = sizeof(time_str);
+        dev_log.dev_log_parm.time_to_str_cb(receive_msg->time_stamp, time_str, length);
+        snprintf(
+            log_string,
+            sizeof(log_string),
+            "[%s: %c %-20s] ",
+            time_str,
+            log_level_str[msg_level],
+            log_id->name);
+    }
+
+    /* Modify the __FILE__ format so it would print the filename only without the path.
+     * If using BCM_LOG_FLAG_CALLER_FMT, it is done in caller context, because filename might be long, taking a lot of
+     * the space of the message itself. */
+    if ((receive_msg->flags & BCM_LOG_FLAG_FILENAME_IN_FMT) && !(receive_msg->flags & BCM_LOG_FLAG_CALLER_FMT))
+        receive_msg->u.fmt_args.fmt = dev_log_basename(receive_msg->u.fmt_args.fmt);
+
+    if (receive_msg->flags & BCM_LOG_FLAG_CALLER_FMT)
+    {
+        /* Copy user string to buffer */
+        strncat(log_string, receive_msg->u.str, sizeof(log_string) - strlen(log_string) - 1);
+    }
+    else
+    {
+        uint32_t offset = ((long)receive_msg->u.fmt_args.args % 8 == 0) ? 0 : 1; /* start on an 8-byte boundary */
+        va_list ap;
+        *(void **)&ap = &receive_msg->u.fmt_args.args[offset];
+
+        /* Copy user string to buffer */
+        vsnprintf(log_string + strlen(log_string),
+            sizeof(log_string) - strlen(log_string),
+            receive_msg->u.fmt_args.fmt,
+            ap);
+    }
+
+    /* Force last char to be end of string */
+    log_string[MAX_DEV_LOG_STRING_SIZE - 1] = '\0';
+
+    /* At this point, if the message is going to be sent to the print task, save the formatted string then forward it.
+     * Otherwise, we can release the message before writing it to RAM. */
+    if ((log_id->log_type & DEV_LOG_ID_TYPE_PRINT) &&
+        (msg_level <= log_id->log_level_print))
+    {
+        if (!bcm_dev_log_level_is_error(msg_level) &&
+            (receive_msg->flags & BCM_LOG_FLAG_DONT_SKIP_PRINT) != 0 &&
+            bcm_dev_log_pool_occupancy_percent_get() >= DEV_LOG_SKIP_PRINT_THRESHOLD_PERCENT)
+        {
+            log_id->print_skipped_count++;
+            bcmos_msg_free(msg);
+        }
+        else
+        {
+            strcpy(receive_msg->u.str, log_string); /* so the print task doesn't need to re-format it */
+            bcmos_msg_send(&dev_log.print_queue, msg, 0);
+        }
+    }
+    else
+    {
+        bcmos_msg_free(msg);
+    }
+
+    /* Save to file */
+    if ((log_id->log_type & DEV_LOG_ID_TYPE_SAVE) &&
+        (msg_level <= log_id->log_level_save))
+    {
+        bcm_dev_log_file_save_msg(dev_log.files, log_string);
+    }
+}
+
+static void dev_log_print_task_handle_message(bcmos_msg *msg)
+{
+    static char log_string[MAX_DEV_LOG_STRING_SIZE];
+    dev_log_queue_msg *receive_msg = msg->data;
+    dev_log_id_parm *log_id = receive_msg->log_id;
+    bcm_dev_log_level msg_level = receive_msg->msg_level;
+
+    /* make a local copy of the pre-formatted string (it was formatted in the save task) */
+    strcpy(log_string, receive_msg->u.str);
+
+    /* free the message ASAP since printing might take some time */
+    bcmos_msg_free(msg);
+
+    if (log_id->style == BCM_DEV_LOG_STYLE_NORMAL &&
+        dev_log_level2style[msg_level] == BCM_DEV_LOG_STYLE_NORMAL)
+    {
+        dev_log.dev_log_parm.print_cb(dev_log.dev_log_parm.print_cb_arg, "%s", log_string);
+    }
+    else
+    {
+        /* If style was set per log id, then use it. */
+        if (log_id->style != BCM_DEV_LOG_STYLE_NORMAL)
+        {
+            dev_log.dev_log_parm.print_cb(
+                dev_log.dev_log_parm.print_cb_arg,
+                "%s%s%s",
+                dev_log_style_array[log_id->style],
+                log_string,
+                dev_log_style_array[BCM_DEV_LOG_STYLE_NORMAL]);
+        }
+        else
+        {
+            /* Otherwise - style was set per log level. */
+            dev_log.dev_log_parm.print_cb(
+                dev_log.dev_log_parm.print_cb_arg,
+                "%s%s%s",
+                dev_log_style_array[dev_log_level2style[msg_level]],
+                log_string,
+                dev_log_style_array[BCM_DEV_LOG_STYLE_NORMAL]);
+        }
+    }
+}
+
+static int dev_log_print_task(long data)
+{
+    bcmos_msg *m;
+    bcmos_errno error;
+    const char error_str[MAX_DEV_LOG_STRING_SIZE] = "Error: Can't receive from queue - dev_log print task exit\n";
+
+    while (1)
+    {
+        error = bcmos_msg_recv(&dev_log.print_queue, BCMOS_WAIT_FOREVER, &m);
+        if (error != BCM_ERR_OK)
+        {
+            DEV_LOG_ERROR_PRINTF("%s", error_str);
+            dev_log.dev_log_parm.print_cb(dev_log.dev_log_parm.print_cb_arg, "%s", error_str);
+            bcm_dev_log_file_save_msg(dev_log.files, error_str);
+            return (int)error;
+        }
+
+        if (m == &shutdown_msg)
+        {
+            bcmos_msg_free(m);
+            break; /* shut down gracefully */
+        }
+        else
+        {
+            dev_log_print_task_handle_message(m);
+        }
+    }
+
+    bcmos_sem_post(&dev_log.print_task_is_terminated);
+
+    return 0;
+}
+
+static int dev_log_save_task(long data)
+{
+    bcmos_msg *m;
+    bcmos_errno error;
+    const char error_str[MAX_DEV_LOG_STRING_SIZE] = "Error: Can't receive from queue - dev_log save task exit\n";
+
+    while (1)
+    {
+        error = bcmos_msg_recv(&dev_log.save_queue, BCMOS_WAIT_FOREVER, &m);
+        if (error != BCM_ERR_OK)
+        {
+            DEV_LOG_ERROR_PRINTF("%s", error_str);
+            dev_log.dev_log_parm.print_cb(dev_log.dev_log_parm.print_cb_arg, "%s", error_str);
+            bcm_dev_log_file_save_msg(dev_log.files, error_str);
+            return (int)error;
+        }
+
+        if (m == &shutdown_msg)
+        {
+            bcmos_msg_free(m);
+            break; /* shut down gracefully */
+        }
+        else
+        {
+            dev_log_save_task_handle_message(m);
+        }
+    }
+
+    bcmos_sem_post(&dev_log.save_task_is_terminated);
+
+    return 0;
+}
+
+static int default_time_to_str(uint32_t time_stamp, char *time_str, int time_str_size)
+{
+    return snprintf(time_str, time_str_size, "%u", time_stamp);
+}
+
+static uint32_t default_get_time(void)
+{
+    return 0;
+}
+
+static int default_print(void *arg, const char *format, ...)
+{
+    va_list args;
+
+    va_start(args, format);
+    bcmos_vprintf(format, args);
+    va_end(args);
+    return 0;
+}
+
+static bcmos_errno default_open_callback_cond_reset(const bcm_dev_log_file_parm *file_parm, bcm_dev_log_file *file, bcmos_bool is_rewind)
+{
+    bcmos_errno err;
+
+    if (!file->file_parm.start_addr || file->file_parm.size <= MEM_FILE_HDR_SIZE)
+        return BCM_ERR_PARM;
+
+    /* Create file mutex */
+    err = bcmos_mutex_create(&file->u.mem_file.mutex, 0, NULL);
+    if (err != BCM_ERR_OK)
+    {
+        DEV_LOG_ERROR_PRINTF("Error: Can't create mutex (error: %d)\n", (int)err);
+        return err;
+    }
+
+    /* Check file magic string */
+    memcpy(&file->u.mem_file.file_header, (uint8_t *)file->file_parm.start_addr, MEM_FILE_HDR_SIZE);
+    if (memcmp(FILE_MAGIC_STR, file->u.mem_file.file_header.file_magic, FILE_MAGIC_STR_SIZE))
+    {
+        DEV_LOG_INFO_PRINTF("No file magic string - file is empty/corrupt\n");
+        if (!is_rewind || !file->file_parm.rewind_cb)
+        {
+            bcmos_mutex_destroy(&file->u.mem_file.mutex);
+            return BCM_ERR_NOENT;
+        }
+        return file->file_parm.rewind_cb(file);
+    }
+
+    DEV_LOG_INFO_PRINTF("Attached to existing file\n");
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno default_open_callback(const bcm_dev_log_file_parm *file_parm, bcm_dev_log_file *file)
+{
+    return default_open_callback_cond_reset(file_parm, file, BCMOS_TRUE);
+}
+
+static bcmos_errno default_close_callback(bcm_dev_log_file *file)
+{
+    bcmos_mutex_destroy(&file->u.mem_file.mutex);
+    return BCM_ERR_OK;
+}
+
+/* Look for start of msg character */
+static int get_msg_start_offset(bcm_dev_log_file *file, uint32_t offset, uint32_t max_len)
+{
+    uint8_t *buf, *msg;
+
+    buf = (uint8_t *)file->file_parm.start_addr + offset + MEM_FILE_HDR_SIZE;
+    msg = memchr(buf, DEV_LOG_MSG_START_CHAR, max_len);
+    if (!msg)
+        return -1;
+    return (msg - buf + 1);
+}
+
+/* Look for 0-terminator */
+static int get_msg_end_offset(bcm_dev_log_file *file, uint32_t offset, uint32_t max_len)
+{
+    uint8_t *buf, *end;
+
+    buf = (uint8_t *)file->file_parm.start_addr + offset + MEM_FILE_HDR_SIZE;
+    end = memchr(buf, 0, max_len);
+    if (!end)
+        return -1;
+    return (end - buf + 1);
+}
+
+static int default_read_callback(bcm_dev_log_file *log_file, uint32_t *p_offset, void *buf, uint32_t length)
+{
+    uint32_t offset = *p_offset;
+    uint32_t real_length = 0;
+    int start, end;
+
+    /* If file wrapped around, offset starts from write_offset, otherwise,
+     * it starts from the beginning
+     */
+    if (log_file->u.mem_file.file_header.file_wrap_cnt)
+    {
+        if (offset + length >= log_file->u.mem_file.file_header.data_size)
+        {
+            length = log_file->u.mem_file.file_header.data_size - offset;
+            if (length <= 0)
+                return 0;
+        }
+        offset += log_file->u.mem_file.file_header.write_offset;
+        if (offset >= log_file->u.mem_file.file_header.data_size)
+            offset -= log_file->u.mem_file.file_header.data_size;
+        /* Find beginning of the next message */
+        start = get_msg_start_offset(log_file, offset, LOG_MIN(log_file->u.mem_file.file_header.data_size - offset,
+            MAX_DEV_LOG_STRING_SIZE));
+        if (start < 0)
+        {
+            /* Didn't find any up to the end of buffer. Look from the start */
+            offset = 0;
+            if (!log_file->u.mem_file.file_header.write_offset)
+                return 0;
+            start = get_msg_start_offset(log_file, 0, LOG_MIN(log_file->u.mem_file.file_header.write_offset - 1,
+                MAX_DEV_LOG_STRING_SIZE));
+            if (start <= 0)
+                return 0;
+        }
+        offset += start;
+    }
+    else
+    {
+        /* Start beginning of message. Without wrap-around it should be right at the offset,
+         * so, it is just a precaution */
+        start = get_msg_start_offset(log_file, offset, LOG_MIN(log_file->u.mem_file.file_header.data_size - offset,
+            MAX_DEV_LOG_STRING_SIZE));
+        if (start <= 0)
+            return 0;
+        offset += start;
+        /* Stop reading when reached write_offset */
+        if (offset + length >= log_file->u.mem_file.file_header.write_offset)
+        {
+            if (offset >= log_file->u.mem_file.file_header.write_offset)
+                return 0;
+            length = log_file->u.mem_file.file_header.write_offset - offset;
+        }
+    }
+
+    /* We have the beginning. Now find the end of message and copy to the user
+     * buffer if there is enough room */
+    if (offset + length > log_file->u.mem_file.file_header.data_size)
+    {
+        uint32_t length1 = offset + length - log_file->u.mem_file.file_header.data_size; /* tail length */
+        length -= length1;
+        end = get_msg_end_offset(log_file, offset, length);
+        if (end >= 0)
+        {
+            memcpy(buf, (uint8_t *)log_file->file_parm.start_addr + offset + MEM_FILE_HDR_SIZE, end);
+            *p_offset += end + start;
+            return end;
+        }
+
+        /* Didn't find end of message in the end of file data buffer. wrap around */
+        memcpy(buf, (uint8_t *)log_file->file_parm.start_addr + offset + MEM_FILE_HDR_SIZE, length);
+        real_length = length;
+        buf = (uint8_t *)buf + length;
+        length = length1;
+        offset = 0;
+    }
+    end = get_msg_end_offset(log_file, offset, MAX_DEV_LOG_STRING_SIZE);
+    if (end <= 0)
+    {
+        /* something is wrong. msg is not terminated */
+        return 0;
+    }
+    /* If there is no room for the whole message - return overflow */
+    if (end > length)
+        return (int)BCM_ERR_OVERFLOW;
+
+    memcpy(buf, (uint8_t *)log_file->file_parm.start_addr + offset + MEM_FILE_HDR_SIZE, end);
+    real_length += end;
+
+    *p_offset += real_length + start;
+
+    return real_length;
+}
+
+static int get_num_of_overwritten_messages(uint8_t *buf, uint32_t length)
+{
+    uint8_t *p;
+    int n = 0;
+
+    do
+    {
+        p = memchr(buf, DEV_LOG_MSG_START_CHAR, length);
+        if (p == NULL)
+            break;
+        ++n;
+        length -= (p + 1 - buf);
+        buf = p + 1;
+    } while(length);
+
+    return n;
+}
+
+static int default_write_callback(bcm_dev_log_file *file, const void *buf, uint32_t length)
+{
+    uint32_t offset, next_offset;
+    uint8_t *p;
+    int n_overwritten = 0;
+
+    if ((file->file_parm.flags & BCM_DEV_LOG_FILE_FLAG_STOP_WHEN_FULL) && file->is_full)
+        return 0;
+
+    if (!length)
+        return 0;
+
+    bcmos_mutex_lock(&file->u.mem_file.mutex);
+
+    offset = file->u.mem_file.file_header.write_offset;
+    next_offset = offset + length + 1; /* 1 extra character for record delimiter */
+
+    /* Handle overflow */
+    if (next_offset >= file->u.mem_file.file_header.data_size)
+    {
+        uint32_t tail_length;
+
+        /* Split buffer in 2 */
+        tail_length = next_offset - file->u.mem_file.file_header.data_size;   /* 2nd segment length */
+
+        if ((file->file_parm.flags & BCM_DEV_LOG_FILE_FLAG_STOP_WHEN_FULL) && tail_length)
+        {
+            file->is_full = BCMOS_TRUE;
+            bcmos_mutex_unlock(&file->u.mem_file.mutex);
+            return 0;
+        }
+
+        length -= tail_length;
+        /* "if (next_offset >= file->u.mem_file.file_header.data_size)" condition
+         * guarantees that there is room for at least 1 character in the end of file */
+        p = (uint8_t *)file->file_parm.start_addr + offset + MEM_FILE_HDR_SIZE;
+        if (file->u.mem_file.file_header.file_wrap_cnt)
+            n_overwritten += get_num_of_overwritten_messages(p, length + 1);
+        *p = DEV_LOG_MSG_START_CHAR;
+        if (length)
+        {
+            memcpy(p + 1, buf, length);
+            buf = (const uint8_t *)buf + length;
+        }
+        if (tail_length)
+        {
+            p = (uint8_t *)file->file_parm.start_addr + MEM_FILE_HDR_SIZE;
+            if (file->u.mem_file.file_header.file_wrap_cnt)
+                n_overwritten += get_num_of_overwritten_messages(p, tail_length);
+            memcpy(p, buf, tail_length);
+            ++file->u.mem_file.file_header.file_wrap_cnt;
+        }
+        next_offset = tail_length;
+    }
+    else
+    {
+        p = (uint8_t *)file->file_parm.start_addr + MEM_FILE_HDR_SIZE + offset;
+        if (file->u.mem_file.file_header.file_wrap_cnt)
+            n_overwritten += get_num_of_overwritten_messages(p, length + 1);
+        *(p++) = DEV_LOG_MSG_START_CHAR;
+        memcpy(p, buf, length);
+    }
+    file->u.mem_file.file_header.write_offset = next_offset;
+    file->u.mem_file.file_header.num_msgs += (1 - n_overwritten);
+
+    /* update the header */
+    memcpy((uint8_t *)file->file_parm.start_addr, &file->u.mem_file.file_header, MEM_FILE_HDR_SIZE);
+
+    /* send almost full indication if necessary */
+    if (file->almost_full.send_ind_cb &&
+        !file->almost_full.ind_sent &&
+        file->u.mem_file.file_header.write_offset > file->almost_full.threshold)
+    {
+        file->almost_full.ind_sent = (file->almost_full.send_ind_cb(file->almost_full.priv) == BCM_ERR_OK);
+    }
+
+    bcmos_mutex_unlock(&file->u.mem_file.mutex);
+
+    return length;
+}
+
+static bcmos_errno default_rewind_callback(bcm_dev_log_file *file)
+{
+    bcmos_mutex_lock(&file->u.mem_file.mutex);
+
+    DEV_LOG_INFO_PRINTF("Clear file\n");
+    file->u.mem_file.file_header.file_wrap_cnt = 0;
+    file->u.mem_file.file_header.write_offset = 0;
+    file->u.mem_file.file_header.data_size = file->file_parm.size - MEM_FILE_HDR_SIZE;
+    file->u.mem_file.file_header.num_msgs = 0;
+    strcpy(file->u.mem_file.file_header.file_magic, FILE_MAGIC_STR);
+    memcpy((uint8_t *)file->file_parm.start_addr, &file->u.mem_file.file_header, MEM_FILE_HDR_SIZE);
+    file->almost_full.ind_sent = BCMOS_FALSE;
+
+    bcmos_mutex_unlock(&file->u.mem_file.mutex);
+
+    return BCM_ERR_OK;
+}
+
+
+static void set_default_file_callbacks(bcm_dev_log_file *file)
+{
+    file->file_parm.open_cb  = default_open_callback;
+    file->file_parm.close_cb  = default_close_callback;
+    file->file_parm.read_cb  = default_read_callback;
+    file->file_parm.write_cb = default_write_callback;
+    file->file_parm.rewind_cb = default_rewind_callback;
+}
+
+static inline bcmos_bool bcm_dev_log_is_memory_file(bcm_dev_log_file *file)
+{
+    return (file->file_parm.open_cb == default_open_callback);
+}
+
+bcmos_errno bcm_dev_log_file_clear(bcm_dev_log_file *file)
+{
+    if (!file || !(file->file_parm.flags & BCM_DEV_LOG_FILE_FLAG_VALID))
+        return BCM_ERR_PARM;
+
+    if (!file->file_parm.rewind_cb)
+        return BCM_ERR_NOT_SUPPORTED;
+
+    return file->file_parm.rewind_cb(file);
+}
+
+/* File index to file handle */
+bcm_dev_log_file *bcm_dev_log_file_get(uint32_t file_index)
+{
+    bcm_dev_log_file *file = &dev_log.files[file_index];
+
+    if ((file_index >= DEV_LOG_MAX_FILES) || !(file->file_parm.flags & BCM_DEV_LOG_FILE_FLAG_VALID))
+        return NULL;
+    return file;
+}
+
+/* Read from file */
+int bcm_dev_log_file_read(bcm_dev_log_file *file, uint32_t *offset, char *buf, uint32_t buf_len)
+{
+    int len;
+    if (!file || !buf || !(file->file_parm.flags & BCM_DEV_LOG_FILE_FLAG_VALID))
+        return (int)BCM_ERR_PARM;
+
+    len = file->file_parm.read_cb(file, offset, buf, buf_len);
+    /* If nothing more to read and CLEAR_AFTER_READ mode, read again under lock and clear if no new records */
+    if (!len && bcm_dev_log_is_memory_file(file) && (file->file_parm.flags & BCM_DEV_LOG_FILE_FLAG_CLEAR_AFTER_READ))
+    {
+        bcmos_mutex_lock(&file->u.mem_file.mutex);
+        len = file->file_parm.read_cb(file, offset, buf, buf_len);
+        if (!len)
+            file->file_parm.rewind_cb(file);
+        bcmos_mutex_unlock(&file->u.mem_file.mutex);
+    }
+    return len;
+}
+
+/* Attach file to memory buffer */
+bcmos_errno bcm_dev_log_file_attach(void *buf, uint32_t buf_len, bcm_dev_log_file *file)
+{
+    bcmos_errno rc;
+    dev_log_mem_file_header *hdr = (dev_log_mem_file_header *)buf;
+
+    if (!buf || !file || buf_len <= MEM_FILE_HDR_SIZE)
+        return BCM_ERR_PARM;
+
+    if (memcmp(FILE_MAGIC_STR, hdr->file_magic, FILE_MAGIC_STR_SIZE))
+        return BCM_ERR_NOENT;
+
+#if DEV_LOG_ENDIAN != BCM_CPU_ENDIAN
+    hdr->file_wrap_cnt = bcmos_endian_swap_u32(hdr->file_wrap_cnt);
+    hdr->write_offset = bcmos_endian_swap_u32(hdr->write_offset);
+    hdr->data_size = bcmos_endian_swap_u32(hdr->data_size);
+    hdr->num_msgs = bcmos_endian_swap_u32(hdr->num_msgs);
+#endif
+
+    memset(file, 0, sizeof(*file));
+    file->file_parm.start_addr = buf;
+    file->file_parm.size = buf_len;
+    file->file_parm.flags = BCM_DEV_LOG_FILE_FLAG_VALID;
+    set_default_file_callbacks(file);
+    rc = default_open_callback_cond_reset(&file->file_parm, file, BCMOS_FALSE);
+    if (rc)
+        return rc;
+
+    if (!file->u.mem_file.file_header.num_msgs)
+        return BCM_ERR_NOENT;
+
+    return BCM_ERR_OK;
+}
+
+/* Detach file handle from memory buffer */
+bcmos_errno bcm_dev_log_file_detach(bcm_dev_log_file *file)
+{
+    if (!file || !(file->file_parm.flags & BCM_DEV_LOG_FILE_FLAG_VALID))
+        return BCM_ERR_PARM;
+    file->file_parm.flags = BCM_DEV_LOG_FILE_FLAG_VALID;
+    bcmos_mutex_destroy(&file->u.mem_file.mutex);
+    return BCM_ERR_OK;
+}
+
+
+#ifdef BCM_OS_POSIX
+    /* Regular file callbacks */
+
+/****************************************************************************************/
+/* OPEN CALLBACK: open memory/file                                                      */
+/* file_parm - file parameters                                                          */
+/* file      - file                                                                     */
+/****************************************************************************************/
+static bcmos_errno _dev_log_reg_file_open(const bcm_dev_log_file_parm *file_parm, bcm_dev_log_file *file)
+{
+    bcmos_errno err = BCM_ERR_OK;
+
+    file->file_parm = *file_parm;
+    file->u.reg_file_handle = fopen((char *)file_parm->udef_parms, "w+");
+    if (!file->u.reg_file_handle)
+    {
+        bcmos_printf("DEV_LOG: can't open file %s for writing\n", (char *)file_parm->udef_parms);
+        err = BCM_ERR_IO;
+    }
+    return err;
+}
+
+/****************************************************************************************/
+/* CLOSE CALLBACK: close memory/file                                                      */
+/* file      - file handle                                                              */
+/****************************************************************************************/
+static bcmos_errno _dev_log_reg_file_close(bcm_dev_log_file *file)
+{
+    if (file->u.reg_file_handle)
+    {
+        fclose(file->u.reg_file_handle);
+        file->u.reg_file_handle = NULL;
+    }
+    return BCM_ERR_OK;
+}
+
+/****************************************************************************************/
+/* REWIND CALLBACK: clears memory/file                                                  */
+/* file      - file handle                                                              */
+/****************************************************************************************/
+static bcmos_errno _dev_log_reg_file_rewind(bcm_dev_log_file *file)
+{
+    bcmos_errno err = BCM_ERR_OK;
+    FILE *f;
+
+    if (file->u.reg_file_handle)
+    {
+        f = freopen((const char *)file->file_parm.udef_parms, "w+", file->u.reg_file_handle);
+        if (NULL != f)
+        {
+            file->u.reg_file_handle = f;
+        }
+        else
+        {
+            err = BCM_ERR_IO;
+            bcmos_printf("DEV_LOG: can't open file %s for writing\n", (char *)file->file_parm.udef_parms);
+        }
+
+    }
+    return err;
+}
+
+/****************************************************************************************/
+/* READ_CALLBACK: read form memory/file                                                 */
+/* offset - the offset in bytes to read from, output                                    */
+/* buf    - Where to put the result                                                     */
+/* length - Buffer length                                                               */
+/* This function should return the number of bytes actually read from file or 0 if EOF  */
+/****************************************************************************************/
+static int _dev_log_reg_file_read(bcm_dev_log_file *file, uint32_t *offset, void *buf, uint32_t length)
+{
+    int n = 0;
+    if (file->u.reg_file_handle)
+    {
+        if (!fseek(file->u.reg_file_handle, SEEK_SET, *offset))
+            n = fread(buf, 1, length, file->u.reg_file_handle);
+        *offset = ftell(file->u.reg_file_handle);
+    }
+    return (n < 0) ? 0 : n;
+}
+
+/****************************************************************************************/
+/* WRITE_CALLBACK: write form memory/file                                               */
+/* buf    - The buffer that should be written                                           */
+/* length - The number of bytes to write                                                */
+/* This function should return the number of bytes actually written to file or 0 if EOF */
+/****************************************************************************************/
+static int _dev_log_reg_file_write(bcm_dev_log_file *file, const void *buf, uint32_t length)
+{
+    const char *cbuf = (const char *)buf;
+    int n = 0;
+    if (file->u.reg_file_handle)
+    {
+        /* Remove 0 terminator */
+        if (length && !cbuf[length-1])
+            --length;
+        n = fwrite(buf, 1, length, file->u.reg_file_handle);
+        fflush(file->u.reg_file_handle);
+    }
+    return n;
+}
+
+static void set_regular_file_callbacks(bcm_dev_log_file *file)
+{
+    file->file_parm.open_cb  = _dev_log_reg_file_open;
+    file->file_parm.close_cb  = _dev_log_reg_file_close;
+    file->file_parm.read_cb  = _dev_log_reg_file_read;
+    file->file_parm.write_cb = _dev_log_reg_file_write;
+    file->file_parm.rewind_cb = _dev_log_reg_file_rewind;
+}
+
+#endif /* #ifdef BCM_OS_POSIX */
+
+#ifdef DEV_LOG_SYSLOG
+    /* linux syslog integration */
+/****************************************************************************************/
+/* OPEN CALLBACK: open syslog interface                                                 */
+/* file_parm->udef_parm contains optional log ident                                     */
+/****************************************************************************************/
+static bcmos_errno _dev_log_syslog_file_open(const bcm_dev_log_file_parm *file_parm, bcm_dev_log_file *file)
+{
+    file->file_parm = *file_parm;
+    openlog((const char *)file_parm->udef_parms, 0, LOG_USER);
+    return BCM_ERR_OK;
+}
+
+/****************************************************************************************/
+/* CLOSE CALLBACK: close syslog interface                                               */
+/****************************************************************************************/
+static bcmos_errno _dev_log_syslog_file_close(bcm_dev_log_file *file)
+{
+    closelog();
+    return BCM_ERR_OK;
+}
+
+/****************************************************************************************/
+/* REWIND CALLBACK: not supported by syslog. Return OK to prevent request failure       */
+/****************************************************************************************/
+static bcmos_errno _dev_log_syslog_file_rewind(bcm_dev_log_file *file)
+{
+    return BCM_ERR_OK;
+}
+
+/****************************************************************************************/
+/* READ_CALLBACK: reading from syslog is not supported                                  */
+/****************************************************************************************/
+static int _dev_log_syslog_file_read(bcm_dev_log_file *file, uint32_t *offset, void *buf, uint32_t length)
+{
+    return 0;
+}
+
+/****************************************************************************************/
+/* WRITE_CALLBACK: write to syslog                                                      */
+/* buf    - The buffer that should be written                                           */
+/* length - The number of bytes to write                                                */
+/* This function should return the number of bytes actually written to file or 0 if EOF */
+/****************************************************************************************/
+static int _dev_log_syslog_file_write(bcm_dev_log_file *file, const void *buf, uint32_t length)
+{
+    const char *cbuf = (const char *)buf;
+    static int log_priority = LOG_DEBUG;
+
+    /* Identify log lovel */
+    if (cbuf && cbuf[0] == '[')
+    {
+        const char *clevel = strchr(cbuf, ' ');
+        if (clevel)
+        {
+            switch (*(clevel + 1))
+            {
+            case 'F':
+                log_priority = LOG_CRIT;
+                break;
+            case 'E':
+                log_priority = LOG_ERR;
+                break;
+            case 'W':
+                log_priority = LOG_WARNING;
+                break;
+            case 'I':
+                log_priority = LOG_INFO;
+                break;
+            case 'D':
+                log_priority = LOG_DEBUG;
+                break;
+            default:
+                break;
+            }
+        }
+    }
+    syslog(log_priority, "%s", cbuf);
+    return length;
+}
+
+static void set_syslog_file_callbacks(bcm_dev_log_file *file)
+{
+    file->file_parm.open_cb  = _dev_log_syslog_file_open;
+    file->file_parm.close_cb  = _dev_log_syslog_file_close;
+    file->file_parm.read_cb  = _dev_log_syslog_file_read;
+    file->file_parm.write_cb = _dev_log_syslog_file_write;
+    file->file_parm.rewind_cb = _dev_log_syslog_file_rewind;
+}
+
+#endif /* #ifdef DEV_LOG_SYSLOG */
+
+static bcmos_errno bcm_dev_log_create(
+    const bcm_dev_log_parm *dev_log_parm,
+    const bcmos_task_parm *save_task_parm,
+    const bcmos_task_parm *print_task_parm,
+    const bcmos_msg_queue_parm *save_queue_parm,
+    const bcmos_msg_queue_parm *print_queue_parm,
+    const bcmos_msg_pool_parm *pool_parm)
+{
+    bcmos_errno err;
+    int i;
+
+    if (!dev_log_parm)
+        return BCM_ERR_PARM;
+
+    if (dev_log.state != BCM_DEV_LOG_STATE_UNINITIALIZED)
+        return BCM_ERR_ALREADY;
+
+    /* Set user callbacks */
+    dev_log.dev_log_parm = *dev_log_parm;
+    if (!dev_log.dev_log_parm.print_cb)
+        dev_log.dev_log_parm.print_cb = default_print;
+    if (!dev_log.dev_log_parm.get_time_cb)
+        dev_log.dev_log_parm.get_time_cb = default_get_time;
+    if (!dev_log.dev_log_parm.time_to_str_cb)
+        dev_log.dev_log_parm.time_to_str_cb = default_time_to_str;
+
+    for (i = 0; (i < DEV_LOG_MAX_FILES) && (dev_log_parm->log_file[i].flags & BCM_DEV_LOG_FILE_FLAG_VALID); i++)
+    {
+        /* Copy log files */
+        dev_log.files[i].file_parm = dev_log_parm->log_file[i];
+        if (!dev_log.files[i].file_parm.open_cb)
+        {
+            if (dev_log.files[i].file_parm.type == BCM_DEV_LOG_FILE_MEMORY)
+                set_default_file_callbacks(&dev_log.files[i]);
+#ifdef BCM_OS_POSIX
+            else if (dev_log.files[i].file_parm.type == BCM_DEV_LOG_FILE_REGULAR)
+                set_regular_file_callbacks(&dev_log.files[i]);
+#endif
+#ifdef DEV_LOG_SYSLOG
+            else if (dev_log.files[i].file_parm.type == BCM_DEV_LOG_FILE_SYSLOG)
+                set_syslog_file_callbacks(&dev_log.files[i]);
+#endif
+            else
+            {
+                DEV_LOG_ERROR_PRINTF("file%d: open_cb must be set for user-defined file\n\n", i);
+                continue;
+            }
+        }
+        err = dev_log.files[i].file_parm.open_cb(&dev_log.files[i].file_parm, &dev_log.files[i]);
+        if (err)
+        {
+            DEV_LOG_ERROR_PRINTF("file%d: open failed: %s (%d)\n\n", i, bcmos_strerror(err), err );
+            continue;
+        }
+        DEV_LOG_INFO_PRINTF("file: start_addr: 0x%p, size: %u, max msg size %u\n",
+            dev_log.files[i].file_parm.start_addr, dev_log.files[i].file_parm.size, MAX_DEV_LOG_STRING_SIZE);
+    }
+
+    /* Create pool */
+    err = bcmos_msg_pool_create(&dev_log.pool, pool_parm);
+    if (err != BCM_ERR_OK)
+    {
+        DEV_LOG_ERROR_PRINTF("Error: Can't create pool (error: %d)\n", (int)err);
+        return err;
+    }
+
+    /* Create message queues */
+    err = bcmos_msg_queue_create(&dev_log.save_queue, save_queue_parm);
+    if (err != BCM_ERR_OK)
+    {
+        DEV_LOG_ERROR_PRINTF("(%s) Error: Can't create save queue (error: %d)\n", __FUNCTION__, (int)err);
+        return err;
+    }
+    err = bcmos_msg_queue_create(&dev_log.print_queue, print_queue_parm);
+    if (err != BCM_ERR_OK)
+    {
+        DEV_LOG_ERROR_PRINTF("(%s) Error: Can't create print queue (error: %d)\n", __FUNCTION__, (int)err);
+        return err;
+    }
+
+    /* Create tasks */
+    err = bcmos_task_create(&dev_log.save_task, save_task_parm);
+    if (err != BCM_ERR_OK)
+    {
+        DEV_LOG_ERROR_PRINTF("Error: Can't spawn save task (error: %d)\n", (int)err);
+        return err;
+    }
+    err = bcmos_task_create(&dev_log.print_task, print_task_parm);
+    if (err != BCM_ERR_OK)
+    {
+        DEV_LOG_ERROR_PRINTF("Error: Can't spawn print task (error: %d)\n", (int)err);
+        return err;
+    }
+
+    bcmos_sem_create(&dev_log.save_task_is_terminated, 0, 0, "save_task_sem");
+    bcmos_sem_create(&dev_log.print_task_is_terminated, 0, 0, "print_task_sem");
+
+    dev_log.state = BCM_DEV_LOG_STATE_ENABLED;
+
+    return BCM_ERR_OK;
+}
+
+void bcm_dev_log_destroy(void)
+{
+    bcmos_errno err;
+    uint32_t i;
+    bcmos_msg_send_flags msg_flags;
+
+    if (dev_log.state == BCM_DEV_LOG_STATE_UNINITIALIZED)
+    {
+        return;
+    }
+
+    /* Send a shutdown message to each task. When received by the main loops, it will tear down the tasks gracefully.
+     * If the flag is set to tear down immediately, we'll send an URGENT teardown message, so it'll be handled before
+     * all oustanding log messages (the oustanding log messages will be freed during bcmos_msg_queue_destroy). */
+    msg_flags = BCMOS_MSG_SEND_NOLIMIT;
+    if ((dev_log.flags & BCM_DEV_LOG_FLAG_DESTROY_IMMEDIATELY) != 0)
+        msg_flags |= BCMOS_MSG_SEND_URGENT;
+
+    /* The save task depends on the print task, so we terminate the save task first. */
+    bcmos_msg_send(&dev_log.save_queue, &shutdown_msg, msg_flags);
+    bcmos_sem_wait(&dev_log.save_task_is_terminated, BCMOS_WAIT_FOREVER);
+
+    bcmos_msg_send(&dev_log.print_queue, &shutdown_msg, msg_flags);
+    bcmos_sem_wait(&dev_log.print_task_is_terminated, BCMOS_WAIT_FOREVER);
+
+    bcmos_sem_destroy(&dev_log.save_task_is_terminated);
+    bcmos_sem_destroy(&dev_log.print_task_is_terminated);
+
+    err = bcmos_task_destroy(&dev_log.save_task);
+    if (err != BCM_ERR_OK)
+    {
+        DEV_LOG_ERROR_PRINTF("Error: Can't destroy dev_log save task (error: %d)\n", (int)err);
+    }
+
+    err = bcmos_task_destroy(&dev_log.print_task);
+    if (err != BCM_ERR_OK)
+    {
+        DEV_LOG_ERROR_PRINTF("Error: Can't destroy dev_log print task (error: %d)\n", (int)err);
+    }
+
+    err = bcmos_msg_queue_destroy(&dev_log.save_queue);
+    if (err != BCM_ERR_OK)
+    {
+        DEV_LOG_ERROR_PRINTF("Error: Can't destroy save queue (error: %d)\n", (int)err);
+    }
+
+    err = bcmos_msg_queue_destroy(&dev_log.print_queue);
+    if (err != BCM_ERR_OK)
+    {
+        DEV_LOG_ERROR_PRINTF("Error: Can't destroy print queue (error: %d)\n", (int)err);
+    }
+
+    err = bcmos_msg_pool_destroy(&dev_log.pool);
+    if (err != BCM_ERR_OK)
+    {
+        DEV_LOG_ERROR_PRINTF("Error: Can't destroy pool (error: %d)\n", (int)err);
+    }
+
+    for (i = 0; (i < DEV_LOG_MAX_FILES) && (dev_log.dev_log_parm.log_file[i].flags & BCM_DEV_LOG_FILE_FLAG_VALID); i++)
+    {
+        dev_log.files[i].file_parm.close_cb(&dev_log.files[i]);
+    }
+
+    dev_log.state = BCM_DEV_LOG_STATE_UNINITIALIZED;
+}
+
+typedef struct
+{
+    bcmos_msg msg;
+    dev_log_queue_msg log_queue_msg;
+    bcmos_bool lock;
+    bcmos_fastlock fastlock;
+} bcm_dev_log_drop_msg;
+
+typedef struct
+{
+    bcm_dev_log_drop_msg msg;
+    uint32_t drops;
+    uint32_t reported_drops;
+    bcmos_timer timer;
+    uint32_t last_report_timestamp;
+} bcm_dev_log_drop;
+
+static bcm_dev_log_drop dev_log_drop;
+
+static void bcm_dev_log_log_message_release_drop(bcmos_msg *m)
+{
+    unsigned long flags;
+
+    flags = bcmos_fastlock_lock(&dev_log_drop.msg.fastlock);
+    dev_log_drop.msg.lock = BCMOS_FALSE;
+    bcmos_fastlock_unlock(&dev_log_drop.msg.fastlock, flags);
+
+    /* Schedule a timer to report extra drops, because we may not meet DEV_LOG_DROP_REPORT_DROP_THRESHOLD soon. */
+    bcmos_timer_start(&dev_log_drop.timer, DEV_LOG_DROP_REPORT_RATE_US);
+}
+
+static void _bcm_dev_log_drop_report(void)
+{
+    bcmos_msg *msg;
+    dev_log_queue_msg *log_queue_msg;
+
+    msg = &dev_log_drop.msg.msg;
+    msg->release = bcm_dev_log_log_message_release_drop;
+    log_queue_msg = &dev_log_drop.msg.log_queue_msg;
+    log_queue_msg->flags = BCM_LOG_FLAG_DONT_SKIP_PRINT;
+    log_queue_msg->time_stamp = dev_log.dev_log_parm.get_time_cb();
+    log_queue_msg->msg_level = DEV_LOG_LEVEL_ERROR;
+    log_queue_msg->u.fmt_args.fmt = "Log message pool exhausted, dropped message count=%u\n";
+    log_queue_msg->u.fmt_args.args[0] = (const void *)(unsigned long)(dev_log_drop.drops - dev_log_drop.reported_drops);
+    log_queue_msg->u.fmt_args.args[1] =
+        log_queue_msg->u.fmt_args.args[0]; /* args[0] may or may not be skipped depending on alignment */
+    log_queue_msg->log_id = (dev_log_id_parm *)def_log_id;
+    log_queue_msg->time_stamp = dev_log.dev_log_parm.get_time_cb();
+    dev_log_drop.reported_drops = dev_log_drop.drops;
+    dev_log_drop.last_report_timestamp = bcmos_timestamp();
+
+    msg->data = log_queue_msg;
+    msg->size = sizeof(*log_queue_msg);
+    bcmos_msg_send(&dev_log.save_queue, msg, 0);
+}
+
+void bcm_dev_log_drop_report(void)
+{
+    unsigned long flags;
+
+    dev_log_drop.drops++;
+
+    flags = bcmos_fastlock_lock(&dev_log_drop.msg.fastlock);
+    /* The 1st drop report will be done immediately, because although DEV_LOG_DROP_REPORT_DROP_THRESHOLD isn't reached, the time difference is greater than
+     * DEV_LOG_DROP_REPORT_RATE_US. */
+    if (dev_log_drop.msg.lock ||
+        ((dev_log_drop.drops - dev_log_drop.reported_drops < DEV_LOG_DROP_REPORT_DROP_THRESHOLD) &&
+        (bcmos_timestamp() - dev_log_drop.last_report_timestamp < DEV_LOG_DROP_REPORT_RATE_US)))
+    {
+        bcmos_fastlock_unlock(&dev_log_drop.msg.fastlock, flags);
+        return;
+    }
+
+    dev_log_drop.msg.lock = BCMOS_TRUE;
+    bcmos_fastlock_unlock(&dev_log_drop.msg.fastlock, flags);
+
+    /* Do the actual report. */
+    _bcm_dev_log_drop_report();
+}
+
+static bcmos_timer_rc bcm_dev_log_drop_timer_cb(bcmos_timer *timer, long data)
+{
+    unsigned long flags;
+
+    flags = bcmos_fastlock_lock(&dev_log_drop.msg.fastlock);
+    if (dev_log_drop.msg.lock)
+    {
+        bcmos_fastlock_unlock(&dev_log_drop.msg.fastlock, flags);
+        /* Logger task hasn't released the lock yet (the drop message hasn't been reported yet) -> reschedule the timer. */
+        bcmos_timer_start(&dev_log_drop.timer, DEV_LOG_DROP_REPORT_RATE_US);
+    }
+    else
+    {
+        if (dev_log_drop.drops == dev_log_drop.reported_drops)
+        {
+            /* No new drops to report. */
+            bcmos_fastlock_unlock(&dev_log_drop.msg.fastlock, flags);
+            return BCMOS_TIMER_OK;
+        }
+        dev_log_drop.msg.lock = BCMOS_TRUE;
+        bcmos_fastlock_unlock(&dev_log_drop.msg.fastlock, flags);
+
+        /* Do the actual report. */
+        _bcm_dev_log_drop_report();
+    }
+
+    return BCMOS_TIMER_OK;
+}
+
+bcmos_errno bcm_dev_log_init_default_logger_ext(
+    bcm_dev_log_parm *dev_log_parm,
+    uint32_t num_files,
+    uint32_t stack_size,
+    bcmos_task_priority priority,
+    uint32_t pool_size)
+{
+    bcmos_errno err;
+    bcmos_task_parm save_task_parm = {0};
+    bcmos_task_parm print_task_parm = {0};
+    bcmos_msg_queue_parm print_queue_parm = {0};
+    bcmos_msg_queue_parm save_queue_parm = {0};
+    bcmos_msg_pool_parm pool_parm = {0};
+    bcmos_timer_parm timer_params =
+    {
+        .name = "dev_log_drop_timer",
+        .owner = BCMOS_MODULE_ID_NONE, /* Will be called in ISR context */
+        .handler = bcm_dev_log_drop_timer_cb,
+    };
+
+    if (!dev_log_parm)
+    {
+        DEV_LOG_ERROR_PRINTF("Error: dev_log_parm must be set\n");
+        return BCM_ERR_PARM;
+    }
+
+    save_task_parm.priority = priority;
+    save_task_parm.stack_size = stack_size;
+    save_task_parm.name = "dev_log_save";
+    save_task_parm.handler = dev_log_save_task;
+    save_task_parm.data = 0;
+
+    print_task_parm.priority = priority;
+    print_task_parm.stack_size = stack_size;
+    print_task_parm.name = "dev_log_print";
+    print_task_parm.handler = dev_log_print_task;
+    print_task_parm.data = 0;
+
+    /* It is important to avoid terminating logger task during an exception, as logger task is low priority and might have backlog of unhandled messages.
+     * Even if as a result of the exception the logger task will be in a deadlock waiting for a resource (semaphore/mutex/timer), it is in lower priority than CLI and thus should not block
+     * CLI. */
+    save_task_parm.flags = BCMOS_TASK_FLAG_NO_SUSPEND_ON_OOPS;
+    print_task_parm.flags = BCMOS_TASK_FLAG_NO_SUSPEND_ON_OOPS;
+
+    save_queue_parm.name = "dev_log_save";
+    save_queue_parm.size = 0; /* unlimited */
+    print_queue_parm.name = "dev_log_print";
+    print_queue_parm.size = 0; /* unlimited */
+
+    pool_parm.name = "dev_log";
+    pool_parm.size = pool_size;
+    pool_parm.data_size = sizeof(dev_log_queue_msg);
+
+    def_log_id = bcm_dev_log_id_register("default", DEV_LOG_LEVEL_INFO, DEV_LOG_ID_TYPE_BOTH);
+    err = bcmos_timer_create(&dev_log_drop.timer, &timer_params);
+    BCMOS_TRACE_CHECK_RETURN(err, err, "bcmos_timer_create");
+    bcmos_fastlock_init(&dev_log_drop.msg.fastlock, 0);
+
+    if (!dev_log_parm->get_time_cb)
+        dev_log_parm->get_time_cb = bcmos_timestamp;
+
+    err = bcm_dev_log_create(
+        dev_log_parm,
+        &save_task_parm,
+        &print_task_parm,
+        &save_queue_parm,
+        &print_queue_parm,
+        &pool_parm);
+    BCMOS_TRACE_CHECK_RETURN(err, err, "bcm_dev_log_create");
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_dev_log_init_default_logger(void **start_addresses,
+    uint32_t *sizes,
+    bcm_dev_log_file_flags *flags,
+    uint32_t num_files,
+    uint32_t stack_size,
+    bcmos_task_priority priority,
+    uint32_t pool_size)
+{
+    bcm_dev_log_parm dev_log_parm = {0};
+    uint32_t i;
+
+    for (i = 0; i < num_files; i++)
+    {
+        dev_log_parm.log_file[i].start_addr = start_addresses[i];
+        dev_log_parm.log_file[i].size = sizes[i];
+        /* size[i] might be 0 in simulation build for sram buffer. */
+        dev_log_parm.log_file[i].flags = (sizes[i] ? BCM_DEV_LOG_FILE_FLAG_VALID : BCM_DEV_LOG_FILE_FLAG_NONE) |
+            (flags ? flags[i] : BCM_DEV_LOG_FILE_FLAG_WRAP_AROUND);
+    }
+
+    return bcm_dev_log_init_default_logger_ext(&dev_log_parm, num_files, stack_size, priority,
+        pool_size);
+}
+
+log_name_table logs_names[DEV_LOG_MAX_IDS];
+uint8_t log_name_table_index = 0;
+
+static void dev_log_add_log_name_to_table(const char *xi_name)
+{
+    char name[MAX_DEV_LOG_ID_NAME + 1] = {};
+    char *p = name;
+    char *p_end;
+    int i = 0;
+    long val = -1;
+
+    strncpy(name, xi_name, MAX_DEV_LOG_ID_NAME);
+    while (*p)
+    {
+        /* While there are more characters to process... */
+        if (isdigit(*p))
+        {
+            /* Upon finding a digit, ... */
+            val = strtol(p, &p_end, 10); /* Read a number, ... */
+            if ((name + strlen(name)) != p_end)
+            {
+                DEV_LOG_ERROR_PRINTF("Error: dev_log_add_log_name_to_table %s)\n", xi_name);
+            }
+            *p = '\0';
+            break;
+
+        }
+        else
+        {
+            /* Otherwise, move on to the next character. */
+            p++;
+        }
+    }
+    for (i = 0; i < log_name_table_index; i++)
+    {
+        if (strcmp(name, logs_names[i].name) == 0)
+        {
+            if (val < logs_names[i].first_instance)
+            {
+                logs_names[i].first_instance = val;
+            }
+            if (val > logs_names[i].last_instance)
+            {
+                logs_names[i].last_instance = val;
+            }
+            break;
+        }
+    }
+    if ((i == log_name_table_index) && (i < DEV_LOG_MAX_IDS))
+    {
+        strncpy(logs_names[i].name, name, MAX_DEV_LOG_ID_NAME);
+        if (val == -1)
+        {
+            val = LOG_NAME_NO_INSTANCE;
+        }
+        logs_names[i].last_instance = val;
+        logs_names[i].first_instance = val;
+        log_name_table_index++;
+    }
+}
+
+void dev_log_get_log_name_table(char *buffer, uint32_t buf_len)
+{
+    uint32_t i = 0;
+    uint32_t buf_len_free  = buf_len;
+
+    buffer[0] = '\0';
+    for (i = 0; i < log_name_table_index; i++)
+    {
+        if (logs_names[i].first_instance == LOG_NAME_NO_INSTANCE)
+        {
+            snprintf(&buffer[strlen(buffer)], buf_len_free, "%s\n", logs_names[i].name);
+        }
+        else
+        {
+            snprintf(&buffer[strlen(buffer)], buf_len_free, "%s %d - %d\n", logs_names[i].name, logs_names[i].first_instance, logs_names[i].last_instance);
+        }
+        buffer[buf_len - 1] = '\0';
+        buf_len_free = buf_len - strlen(buffer);
+        if (buf_len_free <= 1)
+        {
+            DEV_LOG_ERROR_PRINTF("Error: dev_log_get_log_name_table too long\n");
+            break;
+        }
+    }
+}
+
+dev_log_id bcm_dev_log_id_register(const char *xi_name,
+    bcm_dev_log_level xi_default_log_level,
+    bcm_dev_log_id_type xi_default_log_type)
+{
+    dev_log_id_parm *new_id;
+
+    /* Check that we have room for one more ID */
+    if (dev_log.num_ids == BCM_SIZEOFARRAY(dev_log.ids))
+    {
+        DEV_LOG_ERROR_PRINTF("Error: wrong parameters\n");
+        return DEV_LOG_INVALID_ID;
+    }
+
+    /* Get next free log_id in array and increment next_id.
+     * The new_id structure is clean because the whole dev_log array is in BSS
+     */
+    new_id = &dev_log.ids[dev_log.num_ids++];
+
+    /* Add prefix for kernel log_ids in order to avoid clash with similarly-names logs in the user space */
+#ifdef __KERNEL__
+    strcpy(new_id->name, "k_");
+#endif
+
+    /* Set log_id parameters */
+    strncat(new_id->name, xi_name, sizeof(new_id->name)-strlen(new_id->name));
+    new_id->name[MAX_DEV_LOG_ID_NAME-1] = '\0';
+
+    new_id->default_log_type  = xi_default_log_type;
+    new_id->default_log_level = xi_default_log_level;
+
+    dev_log_add_log_name_to_table(new_id->name);
+
+    bcm_dev_log_id_set_levels_and_type_to_default((dev_log_id)new_id);
+    new_id->style = BCM_DEV_LOG_STYLE_NORMAL;
+
+    return (dev_log_id)new_id;
+}
+
+bcmos_errno bcm_dev_log_id_set_type(dev_log_id xi_id, bcm_dev_log_id_type xi_log_type)
+{
+    dev_log_id_parm *id = (dev_log_id_parm *)xi_id;
+
+    if (!xi_id || (xi_id == DEV_LOG_INVALID_ID))
+    {
+        DEV_LOG_ERROR_PRINTF("Error: xi_id not valid (0x%x)\n", (unsigned int)xi_id);
+        return BCM_ERR_PARM;
+    }
+
+    /* In linux kernel we only support save */
+#ifdef __KERNEL__
+    if (xi_log_type & DEV_LOG_ID_TYPE_BOTH)
+        xi_log_type = DEV_LOG_ID_TYPE_SAVE;
+#endif
+
+    DEV_LOG_INFO_PRINTF("ID: 0x%lx, New log type: %d\n", xi_id, (int)xi_log_type);
+
+    id->log_type = xi_log_type;
+
+    /* In linux user space we need to notify kernel integration code */
+#if defined(LINUX_KERNEL_SPACE) && !defined(__KERNEL__)
+    bcm_dev_log_linux_id_set_type(xi_id, xi_log_type);
+#endif
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_dev_log_id_set_level(dev_log_id xi_id, bcm_dev_log_level xi_log_level_print, bcm_dev_log_level xi_log_level_save)
+{
+    dev_log_id_parm *id = (dev_log_id_parm *)xi_id;
+
+    if (!xi_id || (xi_id == DEV_LOG_INVALID_ID))
+    {
+        DEV_LOG_ERROR_PRINTF("Error: xi_id not valid (0x%x)\n", (unsigned int)xi_id);
+        return BCM_ERR_PARM;
+    }
+
+    if ((xi_log_level_print >= DEV_LOG_LEVEL_NUM_OF) || (xi_log_level_save >= DEV_LOG_LEVEL_NUM_OF))
+    {
+        DEV_LOG_ERROR_PRINTF("Error: wrong parameters\n");
+        return BCM_ERR_PARM;
+    }
+
+    DEV_LOG_INFO_PRINTF("ID: 0x%p, New: xi_log_level_print=%u, xi_log_level_save=%u\n",
+        (void *)id,
+        xi_log_level_print,
+        xi_log_level_save);
+
+    id->log_level_print = xi_log_level_print;
+    id->log_level_save = xi_log_level_save;
+
+    /* In linux user space we need to notify kernel integration code */
+#if defined(LINUX_KERNEL_SPACE) && !defined(__KERNEL__)
+    bcm_dev_log_linux_id_set_level(xi_id, xi_log_level_print, xi_log_level_save);
+#endif
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_dev_log_id_set_levels_and_type_to_default(dev_log_id xi_id)
+{
+    dev_log_id_parm *id = (dev_log_id_parm *)xi_id;
+
+    if (!xi_id || (xi_id == DEV_LOG_INVALID_ID))
+    {
+        DEV_LOG_ERROR_PRINTF("Error: xi_id not valid (0x%x)\n", (unsigned int)xi_id);
+        return BCM_ERR_PARM;
+    }
+
+    id->log_level_print = id->default_log_level;
+    id->log_level_save = id->default_log_level;
+    id->log_type = id->default_log_type;
+
+#ifdef TRIGGER_LOGGER_FEATURE
+    memset(&id->throttle,0, sizeof(dev_log_id_throttle));
+    memset(&id->trigger, 0, sizeof(dev_log_id_trigger));
+    id->throttle_log_level = DEV_LOG_LEVEL_NO_LOG;
+    id->trigger_log_level = DEV_LOG_LEVEL_NO_LOG;
+#endif
+
+    /* In linux kernel space we don't support PRINT, only SAVE */
+#ifdef __KERNEL__
+    if (id->log_type & DEV_LOG_ID_TYPE_BOTH)
+        id->log_type = DEV_LOG_ID_TYPE_SAVE;
+#endif
+
+    return BCM_ERR_OK;
+}
+
+void bcm_dev_log_level_set_style(bcm_dev_log_level level, bcm_dev_log_style xi_style)
+{
+    dev_log_level2style[level] = xi_style;
+}
+
+bcmos_errno bcm_dev_log_id_set_style(dev_log_id xi_id, bcm_dev_log_style xi_style)
+{
+    dev_log_id_parm *id = (dev_log_id_parm *)xi_id;
+
+    if (!xi_id || (xi_id == DEV_LOG_INVALID_ID))
+    {
+        DEV_LOG_ERROR_PRINTF("Error: xi_id not valid (0x%x)\n", (unsigned int)xi_id);
+        return BCM_ERR_PARM;
+    }
+    id->style = xi_style;
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_dev_log_id_clear_counters(dev_log_id xi_id)
+{
+    dev_log_id_parm *id = (dev_log_id_parm *)xi_id;
+
+    if (!xi_id || (xi_id == DEV_LOG_INVALID_ID))
+    {
+        DEV_LOG_ERROR_PRINTF("Error: xi_id not valid (0x%x)\n", (unsigned int)xi_id);
+        return BCM_ERR_PARM;
+    }
+    memset(id->counters, 0, sizeof(id->counters));
+    id->lost_msg_cnt = 0;
+    id->print_skipped_count = 0;
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_dev_log_id_get(dev_log_id xi_id, dev_log_id_parm *xo_id)
+{
+    dev_log_id_parm *id = (dev_log_id_parm *)xi_id;
+
+    if (!xi_id || (xi_id == DEV_LOG_INVALID_ID))
+    {
+        DEV_LOG_ERROR_PRINTF("Error: xi_id not valid (0x%x)\n", (unsigned int)xi_id);
+        return BCM_ERR_PARM;
+    }
+
+    *xo_id = *id;
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_dev_log_id_set(dev_log_id xi_id, dev_log_id_parm *parms)
+{
+    dev_log_id_parm *id = (dev_log_id_parm *)xi_id;
+
+    if (!xi_id || (xi_id == DEV_LOG_INVALID_ID))
+    {
+        DEV_LOG_ERROR_PRINTF("Error: xi_id not valid (0x%x)\n", (unsigned int)xi_id);
+        return BCM_ERR_PARM;
+    }
+
+    *id = *parms;
+
+    return BCM_ERR_OK;
+}
+
+dev_log_id bcm_dev_log_id_get_by_index(uint32_t xi_index)
+{
+    if (xi_index >= dev_log.num_ids)
+    {
+        return DEV_LOG_INVALID_ID;
+    }
+    return (dev_log_id)&(dev_log.ids[xi_index]);
+}
+
+uint32_t bcm_dev_log_get_index_by_id(dev_log_id xi_id)
+{
+    uint32_t idx = (dev_log_id_parm *)xi_id - &dev_log.ids[0];
+    if (idx >= dev_log.num_ids)
+        idx = DEV_LOG_INVALID_INDEX;
+    return idx;
+}
+
+dev_log_id bcm_dev_log_id_get_by_name(const char *xi_name)
+{
+    uint32_t i;
+
+    if (xi_name == NULL)
+    {
+        return DEV_LOG_INVALID_ID;
+    }
+
+    for (i = 0; i<dev_log.num_ids; i++)
+    {
+        if (!strcmp(dev_log.ids[i].name, xi_name))
+        {
+            return (dev_log_id)&(dev_log.ids[i]);
+        }
+    }
+
+    DEV_LOG_ERROR_PRINTF("Error: can't find name\n");
+    return DEV_LOG_INVALID_ID;
+}
+
+uint32_t bcm_dev_log_get_num_of_entries(void)
+{
+    return dev_log.num_ids;
+}
+
+bcmos_bool bcm_dev_log_get_control(void)
+{
+    return dev_log.state == BCM_DEV_LOG_STATE_ENABLED;
+}
+
+uint32_t bcm_dev_log_get_num_of_messages(bcm_dev_log_file *file)
+{
+    return file->u.mem_file.file_header.num_msgs;
+}
+
+void bcm_dev_log_set_control(bcmos_bool control)
+{
+    if (control && dev_log.state == BCM_DEV_LOG_STATE_DISABLED)
+        dev_log.state = BCM_DEV_LOG_STATE_ENABLED;
+    else if (!control && dev_log.state == BCM_DEV_LOG_STATE_ENABLED)
+        dev_log.state = BCM_DEV_LOG_STATE_DISABLED;
+}
+
+bcm_dev_log_file_flags bcm_dev_log_get_file_flags(uint32_t file_id)
+{
+    return dev_log.files[file_id].file_parm.flags;
+}
+
+void bcm_dev_log_set_file_flags(uint32_t file_id, bcm_dev_log_file_flags flags)
+{
+    dev_log.files[file_id].file_parm.flags = flags;
+}
+
+bcm_dev_log_flags bcm_dev_log_get_flags(void)
+{
+    return dev_log.flags;
+}
+
+void bcm_dev_log_set_flags(bcm_dev_log_flags flags)
+{
+    dev_log.flags = flags;
+}
+
+void bcm_dev_log_set_print_cb(bcm_dev_log_print_cb cb)
+{
+    dev_log.dev_log_parm.print_cb = cb;
+}
+
+void bcm_dev_log_set_get_time_cb(bcm_dev_log_get_time_cb cb)
+{
+    dev_log.dev_log_parm.get_time_cb = cb;
+}
+
+void bcm_dev_log_set_time_to_str_cb(bcm_dev_log_time_to_str_cb cb)
+{
+    dev_log.dev_log_parm.time_to_str_cb = cb;
+}
+
+#ifdef TRIGGER_LOGGER_FEATURE
+/********************************************************************************************/
+/*																							*/
+/* Name: bcm_dev_log_set_throttle															*/
+/*																							*/
+/* Abstract: Set throttle level for the specific log is and its level						*/
+/*																							*/
+/* Arguments:																				*/
+/*   - xi_id		- The ID in the Dev log (what we got form bcm_dev_log_id_register)		*/
+/*   - xi_log_level	- log level												                */
+/*   - xi_throttle	- throttle number, 0 - no throttle										*/
+/*																							*/
+/* Return Value:																			*/
+/*   bcmos_errno - Success code (BCM_ERR_OK) or Error code (see bcmos_errno.h)              */
+/*																							*/
+/********************************************************************************************/
+bcmos_errno bcm_dev_log_set_throttle(dev_log_id xi_id, bcm_dev_log_level xi_log_level, uint32_t xi_throttle)
+{
+    dev_log_id_parm *id = (dev_log_id_parm *)xi_id;
+
+    if (!xi_id || (xi_id == DEV_LOG_INVALID_ID))
+    {
+        DEV_LOG_ERROR_PRINTF("Error: xi_id not valid (0x%x)\n", (unsigned int)xi_id);
+        return BCM_ERR_PARM;
+    }
+    id->throttle_log_level = xi_log_level;
+    id->throttle.threshold = xi_throttle;
+    id->throttle.counter = 0;
+
+    return BCM_ERR_OK;
+}
+
+/********************************************************************************************/
+/*																							*/
+/* Name: bcm_dev_log_set_trigger															*/
+/*																							*/
+/* Abstract: Set trigger counters for the specific log is and its level						*/
+/*																							*/
+/* Arguments:																				*/
+/*   - xi_id		- The ID in the Dev log (what we got form bcm_dev_log_id_register)		*/
+/*   - xi_log_level	- log level											                	*/
+/*   - xi_start 	- start printing after this number, 0 - no trigger						*/
+/*   - xi_stop   	- stop printing after this number,  0 - do not stop						*/
+/*   - xi_repeat 	- start printing after this number, 0 - no repeat, -1 always			*/
+/*																							*/
+/* Return Value:																			*/
+/*   bcmos_errno - Success code (BCM_ERR_OK) or Error code (see bcmos_errno.h)              */
+/*																							*/
+/********************************************************************************************/
+bcmos_errno bcm_dev_log_set_trigger(dev_log_id xi_id, bcm_dev_log_level xi_log_level, uint32_t xi_start, uint32_t xi_stop, int32_t xi_repeat)
+{
+    dev_log_id_parm *id = (dev_log_id_parm *)xi_id;
+
+    if (!xi_id || (xi_id == DEV_LOG_INVALID_ID))
+    {
+        DEV_LOG_ERROR_PRINTF("Error: xi_id not valid (0x%x)\n", (unsigned int)xi_id);
+        return BCM_ERR_PARM;
+    }
+    id->trigger_log_level = xi_log_level;
+    id->trigger.start_threshold = xi_start;
+    id->trigger.stop_threshold = xi_stop;
+    id->trigger.repeat_threshold = xi_repeat;
+    id->trigger.counter = 0;
+    id->trigger.repeat = 0;
+
+    return BCM_ERR_OK;
+}
+#endif /* TRIGGER_LOGGER_FEATURE */
+
+/* Get file info: max data size, used bytes */
+bcmos_errno bcm_dev_log_get_file_info(bcm_dev_log_file *file, uint32_t *file_size, uint32_t *used_bytes)
+{
+    if (!file || !file_size || !used_bytes)
+        return BCM_ERR_PARM;
+    /* Only supported for memory files */
+    if (!bcm_dev_log_is_memory_file(file))
+        return BCM_ERR_NOT_SUPPORTED;
+    *file_size = file->u.mem_file.file_header.data_size;
+    *used_bytes = (file->u.mem_file.file_header.file_wrap_cnt || file->is_full) ?
+        file->u.mem_file.file_header.data_size : file->u.mem_file.file_header.write_offset;
+    return BCM_ERR_OK;
+}
+
+/* Register indication to be sent when file utilization crosses threshold */
+bcmos_errno bcm_dev_log_almost_full_ind_register(bcm_dev_log_file *file, uint32_t used_bytes_threshold,
+    F_dev_log_file_almost_full send_ind_cb, long ind_cb_priv)
+{
+    if (!file || (used_bytes_threshold && !send_ind_cb))
+        return BCM_ERR_PARM;
+    /* Only supported for memory files */
+    if (!bcm_dev_log_is_memory_file(file))
+        return BCM_ERR_NOT_SUPPORTED;
+
+    bcmos_mutex_lock(&file->u.mem_file.mutex);
+    file->almost_full.threshold = used_bytes_threshold;
+    file->almost_full.send_ind_cb = send_ind_cb;
+    file->almost_full.priv = ind_cb_priv;
+    file->almost_full.ind_sent = BCMOS_FALSE;
+    bcmos_mutex_unlock(&file->u.mem_file.mutex);
+
+    return BCM_ERR_OK;
+}
+
+#endif /* ENABLE_LOG */
diff --git a/bcm68620_release/release/host_reference/dev_log/bcm_dev_log_task.h b/bcm68620_release/release/host_reference/dev_log/bcm_dev_log_task.h
new file mode 100644
index 0000000..227bb12
--- /dev/null
+++ b/bcm68620_release/release/host_reference/dev_log/bcm_dev_log_task.h
@@ -0,0 +1,651 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef __BCM_DEV_LOG_TASK_H_
+#define __BCM_DEV_LOG_TASK_H_
+
+/* Because we cast from dev_log_id to pointer type in bcm_dev_log.c, we want it to be the same size as a pointer size (e.g: "typedef uint32_t dev_log_id" won't work
+ * on 64bit platform). */
+typedef unsigned long dev_log_id;
+
+#define DEV_LOG_INVALID_ID              (dev_log_id)UINT_MAX
+
+#ifdef ENABLE_LOG
+
+/* Uncomment the following line to enable info prints for dev_log debugging */
+/* #define DEV_LOG_DEBUG */
+
+#include <bcmos_system.h>
+
+/********************************************/
+/*                                          */
+/* Log macros                               */
+/*                                          */
+/********************************************/
+
+/********************************************/
+/*                                          */
+/* Defines/Typedefs                         */
+/*                                          */
+/********************************************/
+
+#define STRINGIFY(x) #x
+#define STRINGIFY_EXPAND(str) STRINGIFY(str)
+
+#ifdef __KERNEL__
+#define DEV_LOG_PRINTF printk
+#define DEV_LOG_VPRINTF vprintk
+#else
+#define DEV_LOG_PRINTF bcmos_printf
+#define DEV_LOG_VPRINTF bcmos_vprintf
+#endif
+
+#ifdef DEV_LOG_DEBUG
+#define DEV_LOG_INFO_PRINTF(fmt, args...) DEV_LOG_PRINTF("(%s:" STRINGIFY_EXPAND(__LINE__) ") " fmt, __FUNCTION__, ##args)
+#else
+static inline void dev_log_info_printf_ignore(const char *fmt, ...) { }
+#define DEV_LOG_INFO_PRINTF(fmt, args...) dev_log_info_printf_ignore(fmt, ##args)
+#endif
+#define DEV_LOG_ERROR_PRINTF(fmt, args...) DEV_LOG_PRINTF("(%s:" STRINGIFY_EXPAND(__LINE__) ") " fmt, __FUNCTION__, ##args)
+
+/* IMPORTANT! when modifying DEV_LOG_MAX_ARGS,
+ * don't forget to add/remove _BCM_LOG_ARGS... macros in order to force number of arguments in compile time
+ */
+#define DEV_LOG_MAX_ARGS                36
+/* String bigger than this size will be cut                     */
+#define MAX_DEV_LOG_ID_NAME             32  /* Maximum size of log_id name */
+#define DEV_LOG_MAX_IDS                 512
+#define DEV_LOG_MAX_FILES               2
+#define MAX_DEV_LOG_STRING_SIZE         256 /* Note that this size includes header. */
+#define MAX_DEV_LOG_HEADER_SIZE         (7 + 16 + 20) /* (time=16, ID=20, delimiters=7) */
+#define MAX_DEV_LOG_STRING_NET_SIZE     (MAX_DEV_LOG_STRING_SIZE - MAX_DEV_LOG_HEADER_SIZE)
+#define DEV_LOG_INVALID_INDEX           UINT_MAX
+#define DEV_LOG_DROP_REPORT_RATE_US     1000000 /* 1 second */
+#define DEV_LOG_DROP_REPORT_DROP_THRESHOLD 1000
+#define DEV_LOG_ENDIAN                  BCMOS_ENDIAN_LITTLE
+
+/* If the log message pool utilization is >= this percentage, do not print messages (only save them).
+ * (note that error/fatal messages will not objey this rule). */
+#define DEV_LOG_SKIP_PRINT_THRESHOLD_PERCENT 50
+
+/* If the log message pool utilization is >= this percentage, drop all messages that aren't 'error' or 'fatal' level. */
+#define DEV_LOG_ERROR_ONLY_THRESHOLD_PERCENT 75
+
+/* Log level enum */
+typedef enum
+{
+    DEV_LOG_LEVEL_NO_LOG = 0,
+    DEV_LOG_LEVEL_FATAL,
+    DEV_LOG_LEVEL_ERROR,
+    DEV_LOG_LEVEL_WARNING,
+    DEV_LOG_LEVEL_INFO,
+    DEV_LOG_LEVEL_DEBUG,
+
+    DEV_LOG_LEVEL_NUM_OF
+} bcm_dev_log_level;
+
+/* Log type enum */
+typedef enum
+{
+    /* Bit[0] - Print Enable, Bit[1] - Save Enable */
+    DEV_LOG_ID_TYPE_NONE = 0,       /* NO SAVE, NO PRINT*/
+    DEV_LOG_ID_TYPE_PRINT = 1,
+    DEV_LOG_ID_TYPE_SAVE = 1 << 1,
+    DEV_LOG_ID_TYPE_BOTH = DEV_LOG_ID_TYPE_PRINT | DEV_LOG_ID_TYPE_SAVE, /* SAVE & PRINT */
+} bcm_dev_log_id_type;
+
+typedef enum
+{
+    BCM_DEV_LOG_FLAG_NONE = 0,
+
+    /* Even if logger is disabled, BCM_LOG() calls are redirected to bcmos_printf(). */
+    BCM_DEV_LOG_FLAG_DISABLED_WITH_PRINTF = 1 << 0,
+
+    /* When bcm_dev_log_destroy() is called, do not wait for outstanding log messages to be drained. Discard the
+     * messages and destroy the task immediately. */
+    BCM_DEV_LOG_FLAG_DESTROY_IMMEDIATELY = 1 << 1,
+} bcm_dev_log_flags;
+
+typedef enum
+{
+    BCM_DEV_LOG_FILE_FLAG_NONE = 0,
+    BCM_DEV_LOG_FILE_FLAG_VALID = 1, /**< file is valid */
+    BCM_DEV_LOG_FILE_FLAG_WRAP_AROUND = 1 << 1, /**< new messages will override old */
+    BCM_DEV_LOG_FILE_FLAG_STOP_WHEN_FULL = 1 << 2, /**< stop logging if the file is full */
+    BCM_DEV_LOG_FILE_FLAG_CLEAR_AFTER_READ = 1 << 4, /**< auto-clear log when it is fully read */
+} bcm_dev_log_file_flags;
+
+typedef enum
+{
+    BCM_DEV_LOG_STYLE_NORMAL,
+    BCM_DEV_LOG_STYLE_BOLD,
+    BCM_DEV_LOG_STYLE_UNDERLINE,
+    BCM_DEV_LOG_STYLE_BLINK,
+    BCM_DEV_LOG_STYLE_REVERSE_VIDEO,
+} bcm_dev_log_style;
+
+/********************************************/
+/*                                          */
+/* Callbacks functions                      */
+/*                                          */
+/********************************************/
+
+/* Default logger ID */
+extern dev_log_id def_log_id;
+
+/* Log file type */
+typedef enum
+{
+    BCM_DEV_LOG_FILE_MEMORY,    /**< Memory file */
+#ifdef BCM_OS_POSIX
+    BCM_DEV_LOG_FILE_REGULAR,   /**< Regular file */
+#endif
+#ifdef DEV_LOG_SYSLOG
+    BCM_DEV_LOG_FILE_SYSLOG,    /**< syslog "file" */
+#endif
+    BCM_DEV_LOG_FILE_UDEF       /**< User-defined file */
+} bcm_dev_log_file_type;
+
+typedef struct bcm_dev_log_file_parm bcm_dev_log_file_parm;
+typedef struct bcm_dev_log_file bcm_dev_log_file;
+
+/****************************************************************************************/
+/* OPEN CALLBACK: open memory/file                                                      */
+/* file_parm - file parameters                                                          */
+/* file      - file                                                                     */
+/****************************************************************************************/
+typedef bcmos_errno (*bcm_dev_log_file_open_cb)(const bcm_dev_log_file_parm *file_parm, bcm_dev_log_file *file);
+
+/****************************************************************************************/
+/* CLOSE CALLBACK: close memory/file                                                      */
+/* file      - file handle                                                              */
+/****************************************************************************************/
+typedef bcmos_errno (*bcm_dev_log_file_close_cb)(bcm_dev_log_file *file);
+
+/****************************************************************************************/
+/* REWIND CALLBACK: clears memory/file                                                  */
+/* file      - file handle                                                              */
+/****************************************************************************************/
+typedef bcmos_errno (*bcm_dev_log_file_rewind_cb)(bcm_dev_log_file *file);
+
+/****************************************************************************************/
+/* READ_CALLBACK: read form memory/file                                                 */
+/* offset - the offset in bytes to read from, output                                    */
+/* buf    - Where to put the result                                                     */
+/* length - Buffer length                                                               */
+/* This function should return the number of bytes actually read from file or 0 if EOF  */
+/****************************************************************************************/
+typedef int (*bcm_dev_log_file_read_cb)(bcm_dev_log_file *file, uint32_t *offset, void *buf, uint32_t length);
+
+/****************************************************************************************/
+/* WRITE_CALLBACK: write form memory/file                                               */
+/* buf    - The buffer that should be written                                           */
+/* length - The number of bytes to write                                                */
+/* This function should return the number of bytes actually written to file or 0 if EOF */
+/****************************************************************************************/
+typedef int (*bcm_dev_log_file_write_cb)(bcm_dev_log_file *file, const void *buf, uint32_t length);
+
+/* File almost full indication callback prototype */
+typedef bcmos_errno (*F_dev_log_file_almost_full)(long priv);
+
+/* File parameters */
+struct bcm_dev_log_file_parm
+{
+    bcm_dev_log_file_type type;
+    /* File-access callbacks can be NULL for memory files, in this case start_addr    */
+    /* should be a valid memory address, all read/writes options will be        */
+    /* performed directly to this memory                                        */
+    void *start_addr;
+    uint32_t size;
+    bcm_dev_log_file_open_cb open_cb;
+    bcm_dev_log_file_close_cb close_cb;
+    bcm_dev_log_file_write_cb write_cb;
+    bcm_dev_log_file_read_cb read_cb;
+    bcm_dev_log_file_rewind_cb rewind_cb;
+    bcm_dev_log_file_flags flags;
+    void *udef_parms;
+};
+
+#define FILE_MAGIC_STR_SIZE             16
+#define FILE_MAGIC_STR "@LOGFILE MAGIC@" /* length should be FILE_MAGIC_STR_SIZE (including '\0') */
+
+/* File almost full indication control info */
+typedef struct dev_log_almost_full_info
+{
+    F_dev_log_file_almost_full send_ind_cb;
+    uint32_t threshold;
+    bcmos_bool ind_sent;
+    long priv;
+} dev_log_almost_full_info;
+
+/* Memory file header */
+typedef struct dev_log_mem_file_header
+{
+    uint32_t file_wrap_cnt;
+    uint32_t write_offset;
+    uint32_t data_size;
+    uint32_t num_msgs;
+    char file_magic[FILE_MAGIC_STR_SIZE];
+    char msg_buffer[0];
+} dev_log_mem_file_header;
+
+struct bcm_dev_log_file
+{
+    bcm_dev_log_file_parm file_parm;
+    dev_log_almost_full_info almost_full;
+    bcmos_bool is_full;
+    union
+    {
+        /* Memory file */
+        struct
+        {
+            bcmos_mutex mutex; /* Mutex to lock file access while printing it */
+            dev_log_mem_file_header file_header;
+        } mem_file;
+
+#ifdef BCM_OS_POSIX
+        FILE *reg_file_handle;
+#endif
+
+        /* User-defined file handle */
+        unsigned long udef_handle;
+    } u;
+};
+
+/*******************************************************************************************************/
+/* Get time callback should return an integer representing time. If NULL time prints will be disabled. */
+/*******************************************************************************************************/
+typedef uint32_t (*bcm_dev_log_get_time_cb)(void);
+
+/********************************************************************************************************/
+/* Time to string callback receives timestamp (us) and should convert into time_str                     */
+/* time_str_size is the maximum number of bytes to be copied. In the end function should update the     */
+/* number bytes actually written                                                                        */
+/* If NULL time will printed as an unsigned integer.                                                    */
+/********************************************************************************************************/
+typedef int (*bcm_dev_log_time_to_str_cb)(uint32_t time, char *time_str, int time_str_size);
+typedef int (*bcm_dev_log_print_cb)(void *arg, const char *fmt, ...);
+
+/********************************************/
+/*                                          */
+/* Structs                                  */
+/*                                          */
+/********************************************/
+
+typedef struct
+{
+    bcm_dev_log_get_time_cb get_time_cb;
+    bcm_dev_log_time_to_str_cb time_to_str_cb;
+    bcm_dev_log_print_cb print_cb;
+    void *print_cb_arg;
+    bcm_dev_log_file_parm log_file[DEV_LOG_MAX_FILES];
+} bcm_dev_log_parm;
+
+#ifdef TRIGGER_LOGGER_FEATURE
+typedef struct
+{
+   uint32_t threshold;  /* every threshold messages, print one */
+   uint32_t counter;    /* current index - runs from 0 to threshold, periodically */
+} dev_log_id_throttle;
+
+typedef struct
+{
+   uint32_t start_threshold; /* start printing when threshold is reached */
+   uint32_t stop_threshold;  /* stop printing when threshold is reached, starting counting from start, if 0, do no stop */
+   uint32_t counter;         /* current index - runs : first - from 0 to start_threshold
+                                                       second - from start_threshold to stop_threshold */
+   int32_t repeat_threshold;/* the trigger period, how many times the trigger is set, -1 = always */
+   int32_t repeat;          /* current repeat counter */
+} dev_log_id_trigger;
+#endif
+typedef struct
+{
+    char name[MAX_DEV_LOG_ID_NAME];
+    bcm_dev_log_id_type log_type;
+    bcm_dev_log_id_type default_log_type;
+    bcm_dev_log_level log_level_print;
+    bcm_dev_log_level log_level_save;
+    bcm_dev_log_level default_log_level;
+    bcm_dev_log_style style;
+    uint32_t lost_msg_cnt;
+    uint32_t print_skipped_count; /* see DEV_LOG_SKIP_PRINT_THRESHOLD_PERCENT */
+    uint32_t counters[DEV_LOG_LEVEL_NUM_OF];
+#ifdef TRIGGER_LOGGER_FEATURE
+    bcm_dev_log_level throttle_log_level;
+    dev_log_id_throttle throttle;
+    bcm_dev_log_level trigger_log_level;
+    dev_log_id_trigger trigger;
+#endif
+} dev_log_id_parm;
+
+/********************************************/
+/*                                          */
+/* Functions prototypes                     */
+/*                                          */
+/********************************************/
+
+/** Tear down the dev_log, freeing all OS resources. */
+void bcm_dev_log_destroy(void);
+
+/* This function creates default logger that supports logging on the screen and
+ * into 0 or more memory files.
+ */
+bcmos_errno bcm_dev_log_init_default_logger(void **start_addresses,
+    uint32_t *sizes,
+    bcm_dev_log_file_flags *flags,
+    uint32_t num_files,
+    uint32_t stack_size,
+    bcmos_task_priority priority,
+    uint32_t pool_size);
+
+/* This function is more flexible comparing with bcm_dev_log_init_default_logger().
+ * It creates logger that supports logging on the screen and into 0 or more
+ * memory, regular and user-defined files.
+ */
+bcmos_errno bcm_dev_log_init_default_logger_ext(
+    bcm_dev_log_parm *dev_log_parm,
+    uint32_t num_files,
+    uint32_t stack_size,
+    bcmos_task_priority priority,
+    uint32_t pool_size);
+
+/************************************************************************/
+/*                                                                      */
+/* Name: bcm_dev_log_id_register                                        */
+/*                                                                      */
+/* Abstract: Add new ID to dev_log and return it to user                */
+/*                                                                      */
+/* Arguments:                                                           */
+/*   xi_name                - ID name                                   */
+/*   xi_default_log_level   - ID default log level                      */
+/*   xi_default_log_type    - ID default log type                       */
+/*                                                                      */
+/* Return Value:                                                        */
+/*   new ID                                                             */
+/*                                                                      */
+/************************************************************************/
+dev_log_id bcm_dev_log_id_register(const char *xi_name,
+    bcm_dev_log_level xi_default_log_level,
+    bcm_dev_log_id_type xi_default_log_type);
+
+/********************************************************************************************/
+/*                                                                                          */
+/* Name: bcm_dev_log_id_set_type                                                            */
+/*                                                                                          */
+/* Abstract: Set current log type for an ID                                                 */
+/*                                                                                          */
+/* Arguments:                                                                               */
+/*   - xi_id        - The ID in the Dev log (what we got form bcm_dev_log_id_register)      */
+/*   - xi_log_type  - New log type                                                          */
+/*                                                                                          */
+/* Return Value:                                                                            */
+/*   bcmos_errno - Success code (BCM_ERR_OK) or Error code (see bcmos_errno.h)              */
+/*                                                                                          */
+/********************************************************************************************/
+bcmos_errno bcm_dev_log_id_set_type(dev_log_id xi_id, bcm_dev_log_id_type xi_log_type);
+
+/********************************************************************************************/
+/*                                                                                          */
+/* Name: bcm_dev_log_id_set_level                                                           */
+/*                                                                                          */
+/* Abstract: Set current log level for an ID                                                */
+/*                                                                                          */
+/* Arguments:                                                                               */
+/*   - xi_id        - The ID in the Dev log (what we got form bcm_dev_log_id_register)      */
+/*   - xi_log_level - New log level                                                         */
+/*                                                                                          */
+/* Return Value:                                                                            */
+/*   bcmos_errno - Success code (BCM_ERR_OK) or Error code (see bcmos_errno.h)              */
+/*                                                                                          */
+/********************************************************************************************/
+bcmos_errno bcm_dev_log_id_set_level(dev_log_id xi_id, bcm_dev_log_level xi_log_level_print, bcm_dev_log_level xi_log_level_save);
+
+/********************************************************************************************/
+/*                                                                                          */
+/* Name: bcm_dev_log_id_set_to_default                                                      */
+/*                                                                                          */
+/* Abstract: Set log_type and log_level to default (creation) values for an ID              */
+/*                                                                                          */
+/* Arguments:                                                                               */
+/*   - xi_id    - The ID in the Dev log (what we got form bcm_dev_log_id_register)          */
+/*                                                                                          */
+/* Return Value:                                                                            */
+/*   bcmos_errno - Success code (BCM_ERR_OK) or Error code (see bcmos_errno.h)              */
+/*                                                                                          */
+/********************************************************************************************/
+bcmos_errno bcm_dev_log_id_set_levels_and_type_to_default(dev_log_id xi_id);
+
+/********************************************************************************************/
+/*                                                                                          */
+/* Name: bcm_dev_log_level_set_style                                                        */
+/*                                                                                          */
+/* Abstract: Set log style per level                                                        */
+/*                                                                                          */
+/* Arguments:                                                                               */
+/*   - xi_level    - Log level                                                              */
+/*   - xi_style    - The style of the log, NORMAL, BOLD, UNDERLINE, BLINK, REVERSE_VIDEO    */
+/*                                                                                          */
+/* Return Value:                                                                            */
+/*   bcmos_errno - Success code (BCM_ERR_OK) or Error code (see bcmos_errno.h)              */
+/*                                                                                          */
+/********************************************************************************************/
+void bcm_dev_log_level_set_style(bcm_dev_log_level level, bcm_dev_log_style xi_style);
+
+/********************************************************************************************/
+/*                                                                                          */
+/* Name: bcm_dev_log_id_set_style                                                           */
+/*                                                                                          */
+/* Abstract: Set log style per log id                                                       */
+/*                                                                                          */
+/* Arguments:                                                                               */
+/*   - xi_id    - The ID in the Dev log (what we got form bcm_dev_log_id_register)          */
+/*   - xi_style    - The style of the log, NORMAL, BOLD, UNDERLINE, BLINK, REVERSE_VIDEO    */
+/*                                                                                          */
+/* Return Value:                                                                            */
+/*   bcmos_errno - Success code (BCM_ERR_OK) or Error code (see bcmos_errno.h)              */
+/*                                                                                          */
+/********************************************************************************************/
+bcmos_errno bcm_dev_log_id_set_style(dev_log_id xi_id, bcm_dev_log_style xi_style);
+
+/************************************************************************************************/
+/*                                                                                              */
+/* Name: bcm_dev_log_id_clear_counters                                                          */
+/*                                                                                              */
+/* Abstract: Clear counter for an ID                                                            */
+/*                                                                                              */
+/* Arguments:                                                                                   */
+/*   - xi_id                - The ID in the Dev log (what we got form bcm_dev_log_id_register)  */
+/*                                                                                              */
+/* Return Value:                                                                                */
+/*   bcmos_errno - Success code (BCM_ERR_OK) or Error code (see bcmos_errno.h)                  */
+/*                                                                                              */
+/************************************************************************************************/
+bcmos_errno bcm_dev_log_id_clear_counters(dev_log_id xi_id);
+
+/********************************************************************************************/
+/*                                                                                          */
+/* Name: bcm_dev_log_id_get                                                                 */
+/*                                                                                          */
+/* Abstract: Get the ID status (type, level, counters ...)                                  */
+/*                                                                                          */
+/* Arguments:                                                                               */
+/*   - xi_id            - The ID in the Dev log (what we got form bcm_dev_log_id_register)  */
+/*   - xo_id_status     - Returned status structure                                         */
+/*                                                                                          */
+/* Return Value:                                                                            */
+/*   bcmos_errno - Success code (BCM_ERR_OK) or Error code (see bcmos_errno.h)              */
+/*                                                                                          */
+/********************************************************************************************/
+bcmos_errno bcm_dev_log_id_get(dev_log_id xi_id, dev_log_id_parm *xo_id_status);
+
+/********************************************************************************************/
+/*                                                                                          */
+/* Name: bcm_dev_log_id_set                                                                 */
+/*                                                                                          */
+/* Abstract: set the ID status (type, level, style ...)                                     */
+/*                                                                                          */
+/* Arguments:                                                                               */
+/*   - xi_id            - The ID in the Dev log (what we got form bcm_dev_log_id_register)  */
+/*   - xi_parms         - structure to set                                                  */
+/*                                                                                          */
+/* Return Value:                                                                            */
+/*   bcmos_errno - Success code (BCM_ERR_OK) or Error code (see bcmos_errno.h)              */
+/*                                                                                          */
+/********************************************************************************************/
+bcmos_errno bcm_dev_log_id_set(dev_log_id xi_id, dev_log_id_parm *xi_parms);
+
+/********************************************************************************/
+/*                                                                              */
+/* Name: bcm_dev_log_id_get_by_index                                            */
+/*                                                                              */
+/* Abstract: Return ID for index, if no such index return (DEV_LOG_INVALID_ID)  */
+/*                                                                              */
+/* Arguments:                                                                   */
+/* xi_index         - The index of the ID in the global array.                  */
+/*                                                                              */
+/* Return Value:                                                                */
+/*   uint32_t - The ID (DEV_LOG_INVALID_ID if index is not valid)               */
+/*                                                                              */
+/********************************************************************************/
+dev_log_id bcm_dev_log_id_get_by_index(uint32_t xi_index);
+
+/********************************************************************************/
+/*                                                                              */
+/* Name: bcm_dev_log_get_index_by_id                                            */
+/*                                                                              */
+/* Abstract: Return ID for index, if no such index return (DEV_LOG_INVALID_ID)  */
+/*                                                                              */
+/* Arguments:                                                                   */
+/* xi_id                        - Log id.                                       */
+/*                                                                              */
+/* Return Value:                                                                */
+/*   uint32_t - The index ID (DEV_LOG_INVALID_INDEX if id is not valid)         */
+/*                                                                              */
+/********************************************************************************/
+uint32_t bcm_dev_log_get_index_by_id(dev_log_id xi_id);
+
+/********************************************************************************/
+/*                                                                              */
+/* Name: bcm_dev_log_id_get_by_name                                             */
+/*                                                                              */
+/* Abstract: Return ID index for name                                           */
+/*                                                                              */
+/* Arguments:                                                                   */
+/* xi__name         - The name of the ID                                        */
+/*                                                                              */
+/* Return Value:                                                                */
+/*   int32_t - The ID index (-1 if name is not valid)                           */
+/*                                                                              */
+/********************************************************************************/
+dev_log_id bcm_dev_log_id_get_by_name(const char* xi_name);
+
+uint32_t bcm_dev_log_get_num_of_entries(void);
+
+bcmos_bool bcm_dev_log_get_control(void);
+void bcm_dev_log_set_control(bcmos_bool control);
+
+bcm_dev_log_file_flags bcm_dev_log_get_file_flags(uint32_t file_id);
+void bcm_dev_log_set_file_flags(uint32_t file_id, bcm_dev_log_file_flags flags);
+
+bcm_dev_log_flags bcm_dev_log_get_flags(void);
+void bcm_dev_log_set_flags(bcm_dev_log_flags flags);
+
+void bcm_dev_log_set_print_cb(bcm_dev_log_print_cb cb);
+void bcm_dev_log_set_get_time_cb(bcm_dev_log_get_time_cb cb);
+void bcm_dev_log_set_time_to_str_cb(bcm_dev_log_time_to_str_cb cb);
+
+/* File index to file handle */
+bcm_dev_log_file *bcm_dev_log_file_get(uint32_t file_index);
+
+/* Get number of messages stored in the file */
+uint32_t bcm_dev_log_get_num_of_messages(bcm_dev_log_file *file);
+
+/* Get file info: max data size, used bytes */
+bcmos_errno bcm_dev_log_get_file_info(bcm_dev_log_file *file, uint32_t *file_size, uint32_t *used_bytes);
+
+/* Read from file.
+ * \param[in]           file    File to read from
+ * \param[in,out]       offset  offset to read from. 0=read from the start
+ * \param[in,out]       buf     buffer to read records to
+ * \param[in]           buf_len buf size
+ * \returns - number of bytes read >= 0 or bcmos_errno < 0
+ * 0 = no more records to read
+ * BCM_ERR_OVERFLOW - buffer is too short for log record
+ */
+int bcm_dev_log_file_read(bcm_dev_log_file *file, uint32_t *offset, char *buf, uint32_t buf_len);
+
+/* Clear file
+ * \param[in]           file    File handle
+ * \returns     bcmos_errno error code
+ */
+bcmos_errno bcm_dev_log_file_clear(bcm_dev_log_file *file);
+
+/* Attach file to memory buffer.
+ * The file data can be read using bcm_dev_log_file_read or bcm_dev_log_file_read_cut
+ * \param[in]           buf     buffer to be interpreted as memory file
+ * \param[in]           buf_len buf size
+ * \param[out]          file    File handle.
+ * file_handle has to be destroyed using bcm_dev_log_file_detach() when no longer needed.
+ * \returns     bcmos_errno error code
+ */
+bcmos_errno bcm_dev_log_file_attach(void *buf, uint32_t buf_len, bcm_dev_log_file *file);
+
+/* Detach file handle from memory buffer.
+ * Following this call, the file handle becomes invalid
+ * \param[in]           file    File handle.
+ * \returns     bcmos_errno error code
+ */
+bcmos_errno bcm_dev_log_file_detach(bcm_dev_log_file *file);
+
+/* Register indication to be sent when file utilization crosses threshold */
+bcmos_errno bcm_dev_log_almost_full_ind_register(bcm_dev_log_file *file, uint32_t used_bytes_threshold,
+    F_dev_log_file_almost_full send_ind_cb, long ind_cb_priv);
+
+void dev_log_get_log_name_table(char *buffer, uint32_t buf_len);
+
+void bcm_dev_log_drop_report(void);
+
+/** Helper function to determine if a given log level qualifies as an error. */
+static inline bcmos_bool bcm_dev_log_level_is_error(bcm_dev_log_level log_level)
+{
+    return log_level == DEV_LOG_LEVEL_FATAL || log_level == DEV_LOG_LEVEL_ERROR;
+}
+
+/** Returns the percentage (0 - 100) of the msg pool that is currently in use. */
+uint8_t bcm_dev_log_pool_occupancy_percent_get(void);
+
+#ifdef TRIGGER_LOGGER_FEATURE
+bcmos_errno bcm_dev_log_set_throttle(dev_log_id xi_id, bcm_dev_log_level xi_log_level, uint32_t xi_throttle);
+
+bcmos_errno bcm_dev_log_set_trigger(dev_log_id xi_id, bcm_dev_log_level xi_log_level, uint32_t xi_start, uint32_t xi_stop, int32_t xi_repeat);
+#endif /* TRIGGER_LOGGER_FEATURE */
+
+#endif /* ENABLE_LOG */
+
+#endif /* __BCM_DEV_LOG_TASK_H_ */
diff --git a/bcm68620_release/release/host_reference/dev_log/bcm_dev_log_task_internal.h b/bcm68620_release/release/host_reference/dev_log/bcm_dev_log_task_internal.h
new file mode 100644
index 0000000..aaa3e81
--- /dev/null
+++ b/bcm68620_release/release/host_reference/dev_log/bcm_dev_log_task_internal.h
@@ -0,0 +1,101 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef __BCM_DEV_LOG_TASK_INTERNAL_H_
+#define __BCM_DEV_LOG_TASK_INTERNAL_H_
+
+#ifdef ENABLE_LOG
+
+#include <bcmos_system.h>
+
+#define LOG_NAME_NO_INSTANCE 0xff
+#define LOG_NAME_LENGTH      100
+
+typedef enum
+{
+    BCM_DEV_LOG_STATE_UNINITIALIZED,
+    BCM_DEV_LOG_STATE_DISABLED,
+    BCM_DEV_LOG_STATE_ENABLED,
+} bcm_dev_log_state;
+
+typedef struct
+{
+    bcm_dev_log_parm dev_log_parm;
+    bcm_dev_log_file files[DEV_LOG_MAX_FILES]; /* log files */
+    uint32_t msg_count; /* Message counter */
+    dev_log_id_parm ids[DEV_LOG_MAX_IDS]; /* dev_log IDS array */
+    uint32_t num_ids; /* Number of actually registered ids */
+    bcm_dev_log_state state;
+    bcmos_msg_queue save_queue; /* Log messages to be saved to RAM (first stage of pipeline) */
+    bcmos_msg_queue print_queue; /* Log messages to be printed (second stage of pipeline) */
+    bcmos_task save_task;
+    bcmos_task print_task;
+    bcmos_sem save_task_is_terminated;
+    bcmos_sem print_task_is_terminated;
+    bcmos_msg_pool pool;
+    bcm_dev_log_flags flags; /* General flags applied on the entire feature (unlike file flags which reside in 'files' sub-structure). */
+} bcm_dev_log;
+
+typedef struct
+{
+    dev_log_id_parm *log_id;
+    uint32_t time_stamp;
+    bcm_dev_log_level msg_level;
+    uint32_t flags;
+    union
+    {
+        struct
+        {
+            const char *fmt;
+            /* Room for MAX + 1 arguments since the argument list needs to start on an 8-byte boundary - the first
+             * entry may be unused if the array doesn't naturally start on an 8-byte boundary. */
+            const void *args[DEV_LOG_MAX_ARGS + 1];
+        } fmt_args; /* Relevant in default mode - when not using BCM_LOG_FLAG_CALLER_FMT */
+        char str[MAX_DEV_LOG_STRING_SIZE]; /* Relevant only if using BCM_LOG_FLAG_CALLER_FMT */
+    } u;
+} dev_log_queue_msg;
+
+typedef struct
+{
+    char name[LOG_NAME_LENGTH];
+    uint8_t first_instance;
+    uint8_t last_instance;
+}log_name_table;
+
+extern bcm_dev_log dev_log;
+extern const char *log_level_str;
+
+extern log_name_table logs_names[DEV_LOG_MAX_IDS];
+extern uint8_t log_name_table_index;
+
+bcmos_errno _bcm_dev_log_file_clear_no_lock(uint32_t file_index);
+
+#endif /* ENABLE_LOG */
+
+#endif /* __BCM_DEV_LOG_TASK_INTERNAL_H_ */
diff --git a/bcm68620_release/release/host_reference/dev_log_linux/Makefile b/bcm68620_release/release/host_reference/dev_log_linux/Makefile
new file mode 100644
index 0000000..3882cbc
--- /dev/null
+++ b/bcm68620_release/release/host_reference/dev_log_linux/Makefile
@@ -0,0 +1,17 @@
+# dev_log linux support
+# linux user space
+# 
+
+ifeq ("$(OS_KERNEL)", "linux")
+
+MOD_NAME = dev_log_linux
+MOD_TYPE = lib
+
+ifeq ("$(ENABLE_LOG)", "y")
+
+MOD_DEPS = dev_log
+srcs = bcmolt_dev_log_linux.c
+
+endif
+
+endif
diff --git a/bcm68620_release/release/host_reference/dev_log_linux/bcmolt_dev_log_linux.c b/bcm68620_release/release/host_reference/dev_log_linux/bcmolt_dev_log_linux.c
new file mode 100644
index 0000000..35a2ad5
--- /dev/null
+++ b/bcm68620_release/release/host_reference/dev_log_linux/bcmolt_dev_log_linux.c
@@ -0,0 +1,270 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+/*
+ * bcm_dev_log_linux.c
+ *
+ * Linux-specific code. User space
+ */
+
+#include <bcmolt_dev_log_linux.h>
+#include <kernel/bcmolt_dev_log_ioctl.h>
+
+#include <stdio.h>
+#include <sys/ioctl.h>
+#include <sys/types.h>
+#include <fcntl.h>
+
+#define BCM_DEV_LOG_FILE_NAME           "/dev/bcm_log"
+#define BCM_DEV_LOG_POLL_INTERVAL_US    10000
+
+static int dev_log_file;
+static bcmos_task dev_log_read_task;
+static int max_kernel_id_index;
+/*
+ * Internal helpers
+ */
+
+/* read kernel DB */
+static bcmos_errno _dev_log_kernel_db_read(void)
+{
+    dev_log_io_param io_param;
+    int i;
+
+    if (ioctl(dev_log_file, DEV_LOG_CHRDEV_DB_READ, &io_param) == -1)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_IO, "Can't read kernel data base. Error %s\n", strerror(errno));
+    }
+
+    /* Register kernel log ids */
+    for (i=0; i<io_param.db_read.num_ids; i++)
+    {
+        bcm_dev_log_id_register(io_param.db_read.ids[i].name,
+            io_param.db_read.ids[i].default_level,
+            io_param.db_read.ids[i].default_type);
+    }
+    max_kernel_id_index = i;
+
+    return BCM_ERR_OK;
+}
+
+/* identify log level by level char */
+static bcm_dev_log_level _dev_log_level_by_char(char clevel)
+{
+    bcm_dev_log_level level;
+
+    switch (clevel)
+    {
+    case 'F': level = DEV_LOG_LEVEL_FATAL; break;
+    case 'E': level = DEV_LOG_LEVEL_ERROR; break;
+    case 'W': level = DEV_LOG_LEVEL_WARNING; break;
+    case 'I': level = DEV_LOG_LEVEL_INFO; break;
+    case 'D': level = DEV_LOG_LEVEL_DEBUG; break;
+    default: level = DEV_LOG_LEVEL_NO_LOG; break;
+    }
+
+    return level;
+}
+
+/* read_buf task handler */
+static int _dev_log_read_kernel_buf_handler(long data)
+{
+    dev_log_io_param io_param = {};
+    unsigned long log_time;
+    char level_char;
+    char log_name[MAX_DEV_LOG_ID_NAME];
+    int n;
+    dev_log_id id;
+    bcm_dev_log_level level;
+
+    while (dev_log_file)
+    {
+        if (ioctl(dev_log_file, DEV_LOG_CHRDEV_MSG_READ, &io_param) < 0)
+        {
+            /* If no entries - sleep ant retry. Otherwise - stop */
+            if (errno == EAGAIN)
+            {
+                bcmos_usleep(BCM_DEV_LOG_POLL_INTERVAL_US);
+                continue;
+            }
+            BCMOS_TRACE_ERR("ioctl()->%d (%s)\n", errno, strerror(errno));
+            break;
+        }
+
+        /* parse kernel message */
+        n = sscanf(io_param.msg_read.msg, "[%lu: %c %20s]", &log_time, &level_char, log_name);
+        if (n < 3)
+        {
+            BCMOS_TRACE_ERR("Can't parse kernel log: %s\n", io_param.msg_read.msg);
+            continue;
+        }
+
+        /* Identify log_id */
+        id = bcm_dev_log_id_get_by_name(log_name);
+        if (id == DEV_LOG_INVALID_ID)
+        {
+            BCMOS_TRACE_ERR("Can't identify log id: %s\n", io_param.msg_read.msg);
+            continue;
+        }
+
+        /* Identify log_level */
+        level = _dev_log_level_by_char(level_char);
+        if (level == DEV_LOG_LEVEL_NO_LOG)
+        {
+            BCMOS_TRACE_ERR("Can't identify log level: %s\n", io_param.msg_read.msg);
+            continue;
+        }
+
+        /* log kernel message in user-space logger.
+         * Do not generate header. It is already in the message
+         */
+        bcm_dev_log_log(id, level, BCM_LOG_FLAG_NO_HEADER | BCM_LOG_FLAG_CALLER_FMT, "%s", io_param.msg_read.msg);
+    }
+    BCMOS_TRACE_INFO("Kernel logger daemon terminated\n");
+
+    return 0;
+}
+
+/** Linux-specific init */
+bcmos_errno bcm_dev_log_linux_init(void)
+{
+    static char *task_name = "kernel_log";
+    bcmos_task_parm taskp =
+    {
+        .name = task_name,
+        .priority = TASK_PRIORITY_DEV_LOG_KERNEL,
+        .handler = _dev_log_read_kernel_buf_handler
+    };
+    bcmos_errno rc;
+
+    if (dev_log_file)
+        return BCM_ERR_ALREADY;
+
+    /* Read kernel registrations */
+    dev_log_file = open(BCM_DEV_LOG_FILE_NAME, O_RDWR);
+    if (dev_log_file < 0)
+    {
+        dev_log_file = 0;
+        BCMOS_TRACE_RETURN(BCM_ERR_NOENT, "Can't open %s for read/write. Error %s\n",
+            BCM_DEV_LOG_FILE_NAME, strerror(errno));
+    }
+
+    /* Read kernel data base */
+    rc = _dev_log_kernel_db_read();
+    if (rc)
+    {
+        close(dev_log_file);
+        dev_log_file = 0;
+        return rc;
+    }
+
+    /* Create a task that will poll kernel buffer */
+    rc = bcmos_task_create(&dev_log_read_task, &taskp);
+    if (rc)
+    {
+        close(dev_log_file);
+        dev_log_file = 0;
+        BCMOS_TRACE_RETURN(rc, "Can't create read_kernel_buf task\n");
+    }
+
+    return BCM_ERR_OK;
+}
+
+/** Linux-specific cleanup */
+void bcm_dev_log_linux_exit(void)
+{
+    int f = dev_log_file;
+    if (!dev_log_file)
+        return;
+    dev_log_file = 0;
+    close(f); /* will cause pending ioctl to unlock */
+    bcmos_task_destroy(&dev_log_read_task);
+}
+
+/* notify dev_log in kernel space about log_type change */
+bcmos_errno bcm_dev_log_linux_id_set_type(dev_log_id log_id, bcm_dev_log_id_type log_type)
+{
+    dev_log_io_param io_param;
+    uint32_t idx;
+
+    if (!dev_log_file)
+        return BCM_ERR_STATE;
+
+    /* map to index. id in kernel space is different */
+    idx = bcm_dev_log_get_index_by_id(log_id);
+    if (idx == DEV_LOG_INVALID_INDEX)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_PARM, "Can't map log_id to index\n");
+    }
+
+    /* Ignore the request if log_id is not in th ekernel */
+    if (idx > max_kernel_id_index)
+        return BCM_ERR_OK;
+
+    io_param.type_set.index = idx;
+    io_param.type_set.type = log_type;
+    if (ioctl(dev_log_file, DEV_LOG_CHRDEV_TYPE_SET, &io_param) == -1)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_IO, "Can't set type for kernel log id %lu. Error %s\n", log_id, strerror(errno));
+    }
+
+    return BCM_ERR_OK;
+}
+
+/* notify dev_log in kernel space about log_level change */
+bcmos_errno bcm_dev_log_linux_id_set_level(dev_log_id log_id, bcm_dev_log_level log_level_print, bcm_dev_log_level log_level_save)
+{
+    uint32_t idx;
+    dev_log_io_param io_param;
+
+    if (!dev_log_file)
+        return BCM_ERR_STATE;
+
+    /* map to index. id in kernel space is different */
+    idx = bcm_dev_log_get_index_by_id(log_id);
+    if (idx == DEV_LOG_INVALID_INDEX)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_PARM, "Can't map log_id to index\n");
+    }
+
+    /* Ignore the request if log_id is not in the kernel */
+    if (idx > max_kernel_id_index)
+        return BCM_ERR_OK;
+
+    io_param.level_set.index = idx;
+    io_param.level_set.level_print = log_level_print;
+    io_param.level_set.level_save = log_level_save;
+
+    if (ioctl(dev_log_file, DEV_LOG_CHRDEV_LEVEL_SET, &io_param) == -1)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_IO, "Can't set level for kernel log id %lu. Error %s\n", log_id, strerror(errno));
+    }
+
+    return BCM_ERR_OK;
+}
diff --git a/bcm68620_release/release/host_reference/dev_log_linux/bcmolt_dev_log_linux.h b/bcm68620_release/release/host_reference/dev_log_linux/bcmolt_dev_log_linux.h
new file mode 100644
index 0000000..b036e13
--- /dev/null
+++ b/bcm68620_release/release/host_reference/dev_log_linux/bcmolt_dev_log_linux.h
@@ -0,0 +1,69 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+/*
+ * bcm_dev_log_linux.h
+ *
+ * Linux-specific code. User space
+ */
+
+#ifndef BCMOLT_DEV_LOG_LINUX_H_
+#define BCMOLT_DEV_LOG_LINUX_H_
+
+#include <bcmos_system.h>
+#include <bcm_dev_log.h>
+
+/** Linux-specific init */
+bcmos_errno bcm_dev_log_linux_init(void);
+
+/** Linux-specific cleanup */
+void bcm_dev_log_linux_exit(void);
+
+/*******************************************************************************************
+ * Abstract: Set current log type for an ID
+ *
+ * \param[in]   log_id      Log id
+ * \param[in]   log_type    Log type
+ *
+ * \returns 0=OK or error code <0
+ ******************************************************************************************/
+bcmos_errno bcm_dev_log_linux_id_set_type(dev_log_id log_id, bcm_dev_log_id_type log_type);
+
+/*******************************************************************************************
+ * Abstract: Set current log level for an ID
+ *
+ * \param[in]   log_id          Log id
+ * \param[in]   log_level_print Print level
+ * \param[in]   log_level_save  Save level
+ *
+ * \returns 0=OK or error code <0
+ ******************************************************************************************/
+bcmos_errno bcm_dev_log_linux_id_set_level(dev_log_id log_id, bcm_dev_log_level log_level_print, bcm_dev_log_level log_level_save);
+
+#endif
diff --git a/bcm68620_release/release/host_reference/dev_log_linux/kernel/Makefile b/bcm68620_release/release/host_reference/dev_log_linux/kernel/Makefile
new file mode 100644
index 0000000..b7e4158
--- /dev/null
+++ b/bcm68620_release/release/host_reference/dev_log_linux/kernel/Makefile
@@ -0,0 +1,24 @@
+# dev_log - kernel support
+#
+ifeq ("$(OS_KERNEL)", "linux")
+
+MOD_NAME = dev_log_kernel
+MOD_TYPE = linux_lib
+
+ifeq ("$(ENABLE_LOG)", "y")
+
+MOD_DEFS = -DENABLE_LOG
+
+srcs = bcm_dev_log.c bcm_dev_log_task.c bcmolt_dev_log_kernel.c 
+
+# If called by linux kernel builder - add include paths manually.
+# It is not elegant, but we'll not have many linux modules
+ifneq ("$(KBUILD_SRC)", "")
+    -include $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
+endif
+
+# ifeq ("$(ENABLE_LOG)", "y")
+endif
+
+# ifeq ("$(OS_KERNEL)", "linux")
+endif
diff --git a/bcm68620_release/release/host_reference/dev_log_linux/kernel/bcm_dev_log.c b/bcm68620_release/release/host_reference/dev_log_linux/kernel/bcm_dev_log.c
new file mode 120000
index 0000000..07b79ad
--- /dev/null
+++ b/bcm68620_release/release/host_reference/dev_log_linux/kernel/bcm_dev_log.c
@@ -0,0 +1 @@
+../../../host_reference/dev_log/bcm_dev_log.c
\ No newline at end of file
diff --git a/bcm68620_release/release/host_reference/dev_log_linux/kernel/bcm_dev_log.h b/bcm68620_release/release/host_reference/dev_log_linux/kernel/bcm_dev_log.h
new file mode 120000
index 0000000..ed301bd
--- /dev/null
+++ b/bcm68620_release/release/host_reference/dev_log_linux/kernel/bcm_dev_log.h
@@ -0,0 +1 @@
+../../../host_reference/dev_log/bcm_dev_log.h
\ No newline at end of file
diff --git a/bcm68620_release/release/host_reference/dev_log_linux/kernel/bcm_dev_log_cli.c b/bcm68620_release/release/host_reference/dev_log_linux/kernel/bcm_dev_log_cli.c
new file mode 120000
index 0000000..aa316a7
--- /dev/null
+++ b/bcm68620_release/release/host_reference/dev_log_linux/kernel/bcm_dev_log_cli.c
@@ -0,0 +1 @@
+../../../host_reference/dev_log/bcm_dev_log_cli.c
\ No newline at end of file
diff --git a/bcm68620_release/release/host_reference/dev_log_linux/kernel/bcm_dev_log_cli.h b/bcm68620_release/release/host_reference/dev_log_linux/kernel/bcm_dev_log_cli.h
new file mode 120000
index 0000000..c4480eb
--- /dev/null
+++ b/bcm68620_release/release/host_reference/dev_log_linux/kernel/bcm_dev_log_cli.h
@@ -0,0 +1 @@
+../../../host_reference/dev_log/bcm_dev_log_cli.h
\ No newline at end of file
diff --git a/bcm68620_release/release/host_reference/dev_log_linux/kernel/bcm_dev_log_task.c b/bcm68620_release/release/host_reference/dev_log_linux/kernel/bcm_dev_log_task.c
new file mode 120000
index 0000000..c4a8b2b
--- /dev/null
+++ b/bcm68620_release/release/host_reference/dev_log_linux/kernel/bcm_dev_log_task.c
@@ -0,0 +1 @@
+../../../host_reference/dev_log/bcm_dev_log_task.c
\ No newline at end of file
diff --git a/bcm68620_release/release/host_reference/dev_log_linux/kernel/bcm_dev_log_task.h b/bcm68620_release/release/host_reference/dev_log_linux/kernel/bcm_dev_log_task.h
new file mode 120000
index 0000000..99acd6d
--- /dev/null
+++ b/bcm68620_release/release/host_reference/dev_log_linux/kernel/bcm_dev_log_task.h
@@ -0,0 +1 @@
+../../../host_reference/dev_log/bcm_dev_log_task.h
\ No newline at end of file
diff --git a/bcm68620_release/release/host_reference/dev_log_linux/kernel/bcm_dev_log_task_internal.h b/bcm68620_release/release/host_reference/dev_log_linux/kernel/bcm_dev_log_task_internal.h
new file mode 120000
index 0000000..5573882
--- /dev/null
+++ b/bcm68620_release/release/host_reference/dev_log_linux/kernel/bcm_dev_log_task_internal.h
@@ -0,0 +1 @@
+../../../host_reference/dev_log/bcm_dev_log_task_internal.h
\ No newline at end of file
diff --git a/bcm68620_release/release/host_reference/dev_log_linux/kernel/bcmolt_dev_log_ioctl.h b/bcm68620_release/release/host_reference/dev_log_linux/kernel/bcmolt_dev_log_ioctl.h
new file mode 100644
index 0000000..5c3536c
--- /dev/null
+++ b/bcm68620_release/release/host_reference/dev_log_linux/kernel/bcmolt_dev_log_ioctl.h
@@ -0,0 +1,86 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef BCMOLT_DEV_LOG_IOCTL_H_
+#define BCMOLT_DEV_LOG_IOCTL_H_
+
+#include <linux/ioctl.h>
+
+#include <bcm_dev_log.h>
+
+#define DEV_LOG_CHRDEV_MAX_KERNEL_IDS   32
+
+/* ID descriptor */
+typedef struct dev_log_id_info
+{
+    uint32_t index;
+    char name[MAX_DEV_LOG_ID_NAME + 1];
+    bcm_dev_log_level default_level;
+    bcm_dev_log_id_type default_type;
+} dev_log_id_info;
+
+/* ioctl parameters */
+typedef union dev_log_io_param
+{
+    struct
+    {
+        int num_ids;
+        dev_log_id_info ids[DEV_LOG_CHRDEV_MAX_KERNEL_IDS];
+    } db_read;
+
+    struct
+    {
+        uint32_t index;
+        bcm_dev_log_level level_print;
+        bcm_dev_log_level level_save;
+    } level_set;
+
+    struct
+    {
+        uint32_t index;
+        bcm_dev_log_id_type type;
+    } type_set;
+
+    struct
+    {
+        uint32_t offset;
+        char msg[MAX_DEV_LOG_STRING_SIZE + 1];
+    } msg_read;
+
+} dev_log_io_param;
+
+/* Use 'S' as magic number */
+#define DEV_LOG_CHRDEV_IOC_MAGIC  'S'
+
+#define DEV_LOG_CHRDEV_DB_READ          _IOR(DEV_LOG_CHRDEV_IOC_MAGIC, 1, dev_log_io_param)
+#define DEV_LOG_CHRDEV_LEVEL_SET        _IOW(DEV_LOG_CHRDEV_IOC_MAGIC, 2, dev_log_io_param)
+#define DEV_LOG_CHRDEV_TYPE_SET         _IOW(DEV_LOG_CHRDEV_IOC_MAGIC, 3, dev_log_io_param)
+#define DEV_LOG_CHRDEV_MSG_READ         _IOR(DEV_LOG_CHRDEV_IOC_MAGIC, 4, dev_log_io_param)
+
+#endif
diff --git a/bcm68620_release/release/host_reference/dev_log_linux/kernel/bcmolt_dev_log_kernel.c b/bcm68620_release/release/host_reference/dev_log_linux/kernel/bcmolt_dev_log_kernel.c
new file mode 100644
index 0000000..ec33674
--- /dev/null
+++ b/bcm68620_release/release/host_reference/dev_log_linux/kernel/bcmolt_dev_log_kernel.c
@@ -0,0 +1,328 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#include <linux/module.h>
+#include <linux/moduleparam.h>
+#include <linux/fs.h>       /* everything... */
+#include <linux/fcntl.h>    /* O_ACCMODE */
+#include <linux/aio.h>
+#include <linux/cdev.h>
+#include <asm/uaccess.h>
+#include <linux/vmalloc.h>
+
+#include <bcm_dev_log_task.h>
+#include <bcmolt_dev_log_kernel.h>
+#include <bcmolt_dev_log_ioctl.h>
+
+int dev_log_chrdev_major = 215;         /* Should comply the value in targets/makeDev */
+module_param(dev_log_chrdev_major, int, S_IRUSR | S_IRGRP | S_IWGRP);
+MODULE_PARM_DESC(dev_log_chrdev_major, "devlog_major");
+
+int dev_log_buffer_size_kb = 2048;      /* Buffer size in kB */
+module_param(dev_log_buffer_size_kb, int, S_IRUSR | S_IRGRP | S_IWGRP);
+MODULE_PARM_DESC(dev_log_buffer_size_kb, "devlog_bufsize_kb");
+
+int dev_log_queue_size = 256;           /* Queue size */
+module_param(dev_log_queue_size, int, S_IRUSR | S_IRGRP | S_IWGRP);
+MODULE_PARM_DESC(dev_log_queue_size, "devlog_qsize");
+
+static bcmos_mutex dev_log_lock;
+static int dev_log_num_users;
+static char *dev_log_buffer;
+
+/*
+ * Open and close
+ */
+static int dev_log_chrdev_open(struct inode *inode, struct file *filp)
+{
+    BCMOS_TRACE_DEBUG("\n");
+    bcmos_mutex_lock(&dev_log_lock);
+    if (dev_log_num_users >= 1)
+    {
+        bcmos_mutex_unlock(&dev_log_lock);
+        return -EBUSY;
+    }
+    ++dev_log_num_users;
+    bcmos_mutex_unlock(&dev_log_lock);
+    return 0;
+}
+
+
+static int dev_log_chrdev_release(struct inode *inode, struct file *filp)
+{
+    BCMOS_TRACE_DEBUG("\n");
+    --dev_log_num_users;
+    return 0;
+}
+
+static ssize_t dev_log_chrdev_write(struct file *filp, const char __user *buf,
+    size_t count, loff_t *f_pos)
+{
+    return -EOPNOTSUPP;
+}
+
+static long dev_log_chrdev_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
+{
+    int linux_rc = 0;
+    bcmos_errno rc;
+    dev_log_io_param io_param;
+    dev_log_id id;
+
+    /* don't even decode wrong cmds: better returning  ENOTTY than EFAULT */
+    if (_IOC_TYPE(cmd) != DEV_LOG_CHRDEV_IOC_MAGIC)
+        return -ENOTTY;
+
+    /*
+     * the type is a bitmask, and VERIFY_WRITE catches R/W
+     * transfers. Note that the type is user-oriented, while
+     * verify_area is kernel-oriented, so the concept of "read" and
+     * "write" is reversed
+     */
+    if (_IOC_DIR(cmd) & _IOC_READ)
+        linux_rc = !access_ok(VERIFY_WRITE, (void __user *)arg, _IOC_SIZE(cmd));
+    else if (_IOC_DIR(cmd) & _IOC_WRITE)
+        linux_rc =  !access_ok(VERIFY_READ, (void __user *)arg, _IOC_SIZE(cmd));
+    if (linux_rc)
+        return -EFAULT;
+
+    switch (cmd)
+    {
+
+    case DEV_LOG_CHRDEV_DB_READ:
+    {
+        int i;
+
+        for (i = 0; i < bcm_dev_log_get_num_of_entries(); i++)
+        {
+            dev_log_id_parm id_parm = {};
+
+            id = bcm_dev_log_id_get_by_index(i);
+            if (id == DEV_LOG_INVALID_ID)
+            {
+                break;
+            }
+            bcm_dev_log_id_get(id, &id_parm);
+            io_param.db_read.ids[i].index = i;
+            strncpy(io_param.db_read.ids[i].name, id_parm.name, sizeof(io_param.db_read.ids[i].name));
+            io_param.db_read.ids[i].default_type = id_parm.default_log_type;
+            io_param.db_read.ids[i].default_level = id_parm.default_log_level;
+            /* Reset to defaults to keep in sync with the user space */
+            bcm_dev_log_id_set_levels_and_type_to_default(id);
+        }
+        io_param.db_read.num_ids = i;
+        linux_rc = copy_to_user((char *)arg, (char *)&io_param.db_read, sizeof(io_param.db_read));
+    }
+    break;
+
+    case DEV_LOG_CHRDEV_LEVEL_SET:
+    {
+        linux_rc = copy_from_user((char *)&io_param.level_set, (char *)arg, sizeof(io_param.level_set));
+        if (linux_rc < 0)
+            break;
+        id = bcm_dev_log_id_get_by_index(io_param.level_set.index);
+        if (id == DEV_LOG_INVALID_ID)
+        {
+            BCMOS_TRACE_ERR("log_id index %u is invalid\n", io_param.level_set.index);
+        }
+        rc = bcm_dev_log_id_set_level(id, io_param.level_set.level_print, io_param.level_set.level_save);
+        if (rc)
+        {
+            BCMOS_TRACE_ERR("bcm_dev_log_id_set_level(%ld,%d,%d)->%s\n",
+                (long)id, (int)io_param.level_set.level_print, (int)io_param.level_set.level_save, bcmos_strerror(rc));
+            linux_rc = -EINVAL;
+        }
+    }
+    break;
+
+    case DEV_LOG_CHRDEV_TYPE_SET:
+    {
+        linux_rc = copy_from_user((char *)&io_param.type_set, (char *)arg, sizeof(io_param.type_set));
+        if (linux_rc < 0)
+            break;
+        /* Map index to log id */
+        id = bcm_dev_log_id_get_by_index(io_param.type_set.index);
+        if (id == DEV_LOG_INVALID_ID)
+        {
+            BCMOS_TRACE_ERR("log_id index %u is invalid\n", io_param.type_set.index);
+        }
+        rc = bcm_dev_log_id_set_type(id, io_param.type_set.type);
+        if (rc)
+        {
+            BCMOS_TRACE_ERR("bcm_dev_log_id_set_type(%ld,%d)->%s\n",
+                (long)id, (int)io_param.type_set.type, bcmos_strerror(rc));
+            linux_rc = -EINVAL;
+        }
+    }
+    break;
+
+    case DEV_LOG_CHRDEV_MSG_READ:
+    {
+        uint32_t buf_len = sizeof(io_param.msg_read.msg);
+        bcm_dev_log_file *log_file = bcm_dev_log_file_get(0);
+
+        if (!log_file)
+        {
+            linux_rc = -EINVAL;
+            break;
+        }
+
+        linux_rc = copy_from_user((char *)&io_param.msg_read, (char *)arg, sizeof(io_param.msg_read.offset));
+        if (linux_rc < 0)
+            break;
+
+        rc = bcm_dev_log_file_read(log_file, &io_param.msg_read.offset, io_param.msg_read.msg, buf_len);
+        if (rc <= 0)
+        {
+            if (rc == 0)
+                linux_rc = -EAGAIN;
+            else
+                linux_rc = -EINVAL;
+            break;
+        }
+        linux_rc = copy_to_user((char *)arg, (char *)&io_param.msg_read,
+            offsetof(dev_log_io_param, msg_read.msg) + rc);
+    }
+    break;
+
+    default:  /* redundant, as cmd was checked against MAXNR */
+        rc = -ENOTTY;
+        break;
+    }
+
+    return linux_rc;
+}
+
+/*
+ * The fops
+ */
+static struct file_operations dev_log_chrdev_fops =
+{
+    .owner = THIS_MODULE,
+    .open = dev_log_chrdev_open,
+    .release = dev_log_chrdev_release,
+    .write = dev_log_chrdev_write,
+    .unlocked_ioctl = dev_log_chrdev_ioctl
+};
+
+static struct cdev dev_log_chrdev_cdev;
+static int is_chrdev_reg, is_cdev_add;
+
+static bcmos_errno dev_log_chrdev_init(void)
+{
+    dev_t dev = MKDEV(dev_log_chrdev_major, 0);
+    int linux_rc;
+
+    is_chrdev_reg = 0;
+    is_cdev_add = 0;
+    /*
+     * Register your major, and accept a dynamic number.
+     */
+    if (!dev_log_chrdev_major)
+        return -1;
+    linux_rc = register_chrdev_region(dev, 0, "dev_log");
+    if (linux_rc < 0)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_IO, "register_chrdev_region()->%d\n", linux_rc);
+    }
+    is_chrdev_reg = 1;
+
+    cdev_init(&dev_log_chrdev_cdev, &dev_log_chrdev_fops);
+    linux_rc = cdev_add(&dev_log_chrdev_cdev, dev, 1);
+    if (linux_rc < 0)
+    {
+        BCMOS_TRACE_RETURN(BCM_ERR_IO, "cdev_add()->%d\n", linux_rc);
+    }
+    is_cdev_add = 1;
+
+    return BCM_ERR_OK;
+}
+
+static void dev_log_chrdev_exit(void)
+{
+    if (is_cdev_add)
+        cdev_del(&dev_log_chrdev_cdev);
+    if (is_chrdev_reg)
+        unregister_chrdev_region(MKDEV(dev_log_chrdev_major, 0), 1);
+}
+
+static int dev_log_time_to_str_cb(uint32_t time_stamp, char *time_str, int time_str_size)
+{
+    return snprintf(time_str, time_str_size, "%u", time_stamp / 1000); /* Convert from usec to msec. */
+}
+
+/** Initialize dev_log linux kernel support */
+bcmos_errno bcm_dev_log_linux_init(void)
+{
+    void *addresses[1];
+    uint32_t sizes[1] = { dev_log_buffer_size_kb * 1024 };
+    uint32_t flags[1] = { BCM_DEV_LOG_FILE_FLAG_WRAP_AROUND };
+    bcmos_errno rc;
+
+    if (!dev_log_queue_size || !dev_log_buffer_size_kb)
+        return BCM_ERR_PARM;
+
+    rc = dev_log_chrdev_init();
+    if (rc)
+        return rc;
+
+    /* Initialize logger */
+    dev_log_buffer = vmalloc(dev_log_buffer_size_kb * 1024);
+    if (!dev_log_buffer)
+    {
+        dev_log_chrdev_exit();
+        BCMOS_TRACE_ERR("Can't allocate dev_log buffer (%d bytes)\n", dev_log_buffer_size_kb * 1024);
+        return BCM_ERR_NOMEM;
+    }
+    addresses[0] = dev_log_buffer;
+    rc = bcm_dev_log_init_default_logger(addresses, sizes, flags, BCM_SIZEOFARRAY(addresses), 0x4000, TASK_PRIORITY_DEV_LOG, dev_log_queue_size);
+    if (rc)
+    {
+        dev_log_chrdev_exit();
+        vfree(dev_log_buffer);
+        BCMOS_TRACE_ERR("Failed to create logger. Error %s\n", bcmos_strerror(rc));
+        return rc;
+    }
+
+    bcm_dev_log_set_time_to_str_cb(dev_log_time_to_str_cb);
+
+    bcmos_mutex_create(&dev_log_lock, 0, NULL);
+
+    return BCM_ERR_OK;
+}
+
+/** Clean-up dev_log linux kernel support */
+void bcm_dev_log_linux_exit(void)
+{
+    dev_log_chrdev_exit();
+    if (dev_log_buffer)
+    {
+        vfree(dev_log_buffer);
+    }
+    bcmos_mutex_destroy(&dev_log_lock);
+}
diff --git a/bcm68620_release/release/host_reference/dev_log_linux/kernel/bcmolt_dev_log_kernel.h b/bcm68620_release/release/host_reference/dev_log_linux/kernel/bcmolt_dev_log_kernel.h
new file mode 100644
index 0000000..d9ee3c1
--- /dev/null
+++ b/bcm68620_release/release/host_reference/dev_log_linux/kernel/bcmolt_dev_log_kernel.h
@@ -0,0 +1,42 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef BCMOLT_DEV_LOG_KERNEL_H_
+#define BCMOLT_DEV_LOG_KERNEL_H_
+
+#include <bcmos_system.h>
+
+/** Initialize dev_log linux kernel support */
+bcmos_errno bcm_dev_log_linux_init(void);
+
+/** Clean-up dev_log linux kernel support */
+void bcm_dev_log_linux_exit(void);
+
+
+#endif
diff --git a/bcm68620_release/release/host_reference/device_selector/Makefile b/bcm68620_release/release/host_reference/device_selector/Makefile
new file mode 100644
index 0000000..4b24f22
--- /dev/null
+++ b/bcm68620_release/release/host_reference/device_selector/Makefile
@@ -0,0 +1,6 @@
+# Current devioce selector
+#
+MOD_NAME = device_selector
+MOD_TYPE = lib
+MOD_DEPS = common_api model cli
+srcs = bcmolt_dev_selector.c
diff --git a/bcm68620_release/release/host_reference/device_selector/bcmolt_dev_selector.c b/bcm68620_release/release/host_reference/device_selector/bcmolt_dev_selector.c
new file mode 100644
index 0000000..c945383
--- /dev/null
+++ b/bcm68620_release/release/host_reference/device_selector/bcmolt_dev_selector.c
@@ -0,0 +1,106 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+/*
+ * bcmolt_dev_selector.c
+ * Set / get current device for all CLI commands
+ */
+#include <bcmos_system.h>
+#include <bcmcli.h>
+#include <bcmolt_dev_selector.h>
+
+/* Current device. External variable */
+
+/* Device change callback registration structure */
+typedef struct dev_sel_subscriber dev_sel_subscriber;
+struct dev_sel_subscriber
+{
+    F_current_device_change_ind cb;     /* Subscriber's callback */
+    STAILQ_ENTRY(dev_sel_subscriber) next;
+};
+
+static STAILQ_HEAD(dev_sel_subscriber_list, dev_sel_subscriber) subscriber_list;
+
+/* Get/set the current device CLI handler
+ */
+static bcmos_errno _dev_sel_device_handler(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    /* If current device was set - notify all subscribers.
+     * Do not check if it changed here. Sometimes it is good to be able
+     * to refresh.
+     */
+    if (nparms)
+    {
+        dev_sel_subscriber *subs;
+
+        current_device = parm[0].value.number;
+
+        /* Notify all subscribers */
+        STAILQ_FOREACH(subs, &subscriber_list, next)
+        {
+            subs->cb(session, current_device);
+        }
+    }
+
+    bcmcli_session_print(session, "Current device: %ld\n", (long)current_device);
+
+    return BCM_ERR_OK;
+}
+
+
+/* Register for current device change notification.
+ * Multiple clients can register.
+ */
+bcmos_errno bcmolt_dev_sel_ind_register(F_current_device_change_ind cb)
+{
+    dev_sel_subscriber *subs = bcmos_calloc(sizeof(dev_sel_subscriber));
+
+    if (!subs)
+        return BCM_ERR_NOMEM;
+
+    subs->cb = cb;
+    STAILQ_INSERT_TAIL(&subscriber_list, subs, next);
+
+    return BCM_ERR_OK;
+}
+
+/* Initialize device selector module */
+bcmos_errno bcmolt_dev_sel_init(bcmcli_entry *parent_dir)
+{
+    STAILQ_INIT(&subscriber_list);
+
+    /* Get/set current device */
+    BCMCLI_MAKE_CMD(parent_dir, "device", "Get/Set the current device", _dev_sel_device_handler,
+        BCMCLI_MAKE_PARM_RANGE("device", "Device index", BCMCLI_PARM_NUMBER, BCMCLI_PARM_FLAG_OPTIONAL,
+            0, BCMTR_MAX_OLTS-1));
+
+    return BCM_ERR_OK;
+}
+
+
diff --git a/bcm68620_release/release/host_reference/device_selector/bcmolt_dev_selector.h b/bcm68620_release/release/host_reference/device_selector/bcmolt_dev_selector.h
new file mode 100644
index 0000000..13dfb08
--- /dev/null
+++ b/bcm68620_release/release/host_reference/device_selector/bcmolt_dev_selector.h
@@ -0,0 +1,53 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+/*
+ * bcmolt_dev_selector.h
+ * Set / get current device for all CLI commands
+ */
+
+#ifndef _BCMOLT_DEV_SELECTOR_H_
+#define _BCMOLT_DEV_SELECTOR_H_
+
+#include <bcmolt_model_types.h>
+#include <bcmcli.h>
+
+/* Current device change notification callback */
+typedef void (*F_current_device_change_ind)(bcmcli_session *session, bcmolt_devid dev);
+
+/* Register for current device change notification.
+ * Multiple clients can register.
+ */
+bcmos_errno bcmolt_dev_sel_ind_register(F_current_device_change_ind cb);
+
+/* Initialize device selector module */
+bcmos_errno bcmolt_dev_sel_init(bcmcli_entry *parent_dir);
+
+
+#endif /* _BCMOLT_DEV_SELECTOR_H_ */
diff --git a/bcm68620_release/release/host_reference/linenoise/Makefile b/bcm68620_release/release/host_reference/linenoise/Makefile
new file mode 100644
index 0000000..4c11f03
--- /dev/null
+++ b/bcm68620_release/release/host_reference/linenoise/Makefile
@@ -0,0 +1,22 @@
+# linenoise - simple line editing library
+# should work on any VT-100-compatible terminal
+MOD_NAME = linenoise
+MOD_TYPE = lib
+MOD_DEFS = -DCONFIG_LINENOISE -DCONFIG_EDITLINE
+
+srcs = linenoise.c
+
+# The following defines should be set for OS that doesn't have support for tty and/or file IO
+LINENOISE_DISABLE_IOCTL ?= n
+LINENOISE_DISABLE_TERMIOS ?= n
+LINENOISE_DISABLE_HIST_SAVE ?= n
+
+ifeq ("$(LINENOISE_DISABLE_IOCTL)", "y")
+    EXTRA_DEFINES += -DLINENOISE_DISABLE_IOCTL
+endif
+ifeq ("$(LINENOISE_DISABLE_TERMIOS)", "y")
+    EXTRA_DEFINES += -DLINENOISE_DISABLE_TERMIOS
+endif
+ifeq ("$(LINENOISE_DISABLE_HIST_SAVE)", "y")
+    EXTRA_DEFINES += -DLINENOISE_DISABLE_HIST_SAVE
+endif
diff --git a/bcm68620_release/release/host_reference/linenoise/linenoise.c b/bcm68620_release/release/host_reference/linenoise/linenoise.c
new file mode 100644
index 0000000..6312a1a
--- /dev/null
+++ b/bcm68620_release/release/host_reference/linenoise/linenoise.c
@@ -0,0 +1,1358 @@
+/* linenoise.c -- guerrilla line editing library against the idea that a
+ * line editing lib needs to be 20,000 lines of C code.
+ *
+ * You can find the latest source code at:
+ *
+ *   http://github.com/antirez/linenoise
+ *
+ * Does a number of crazy assumptions that happen to be true in 99.9999% of
+ * the 2010 UNIX computers around.
+ *
+ * ------------------------------------------------------------------------
+ *
+ * Copyright (c) 2010-2013, Salvatore Sanfilippo <antirez at gmail dot com>
+ * Copyright (c) 2010-2013, Pieter Noordhuis <pcnoordhuis at gmail dot com>
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *  *  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *  *  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ------------------------------------------------------------------------
+ *
+ * References:
+ * - http://invisible-island.net/xterm/ctlseqs/ctlseqs.html
+ * - http://www.3waylabs.com/nw/WWW/products/wizcon/vt220.html
+ *
+ * Todo list:
+ * - Filter bogus Ctrl+<char> combinations.
+ * - Win32 support
+ *
+ * Bloat:
+ * - History search like Ctrl+r in readline?
+ *
+ * List of escape sequences used by this program, we do everything just
+ * with three sequences. In order to be so cheap we may have some
+ * flickering effect with some slow terminal, but the lesser sequences
+ * the more compatible.
+ *
+ * CHA (Cursor Horizontal Absolute)
+ *    Sequence: ESC [ n G
+ *    Effect: moves cursor to column n
+ *
+ * EL (Erase Line)
+ *    Sequence: ESC [ n K
+ *    Effect: if n is 0 or missing, clear from cursor to end of line
+ *    Effect: if n is 1, clear from beginning of line to cursor
+ *    Effect: if n is 2, clear entire line
+ *
+ * CUF (CUrsor Forward)
+ *    Sequence: ESC [ n C
+ *    Effect: moves cursor forward of n chars
+ *
+ * When multi line mode is enabled, we also use an additional escape
+ * sequence. However multi line editing is disabled by default.
+ *
+ * CUU (Cursor Up)
+ *    Sequence: ESC [ n A
+ *    Effect: moves cursor up of n chars.
+ *
+ * CUD (Cursor Down)
+ *    Sequence: ESC [ n B
+ *    Effect: moves cursor down of n chars.
+ *
+ * The following are used to clear the screen: ESC [ H ESC [ 2 J
+ * This is actually composed of two sequences:
+ *
+ * cursorhome
+ *    Sequence: ESC [ H
+ *    Effect: moves the cursor to upper left corner
+ *
+ * ED2 (Clear entire screen)
+ *    Sequence: ESC [ 2 J
+ *    Effect: clear the whole screen
+ *
+ */
+#include <bcmos_system.h>
+#ifndef LINENOISE_DISABLE_TERMIOS
+#include <termios.h>
+#endif
+#ifndef LINENOISE_DISABLE_IOCTL
+#include <sys/ioctl.h>
+#endif
+#include "linenoise.h"
+
+#ifndef STDIN_FILENO
+#define STDIN_FILENO  0
+#endif
+
+#ifndef STDOUT_FILENO
+#define STDOUT_FILENO 1
+#endif
+
+#define LINENOISE_DEFAULT_HISTORY_MAX_LEN 100
+#define LINENOISE_MAX_LINE 4096
+
+/* The linenoiseState structure represents the state during line editing.
+ * We pass this state to functions implementing specific editing
+ * functionalities. */
+struct linenoiseState {
+    long ifd;           /* Terminal stdin file descriptor. */
+    char *buf;          /* Edited line buffer. */
+    int buflen;         /* Edited line buffer size. */
+    const char *prompt; /* Prompt to display. */
+    int plen;           /* Prompt length. */
+    int pos;            /* Current cursor position. */
+    int oldpos;         /* Previous refresh cursor position. */
+    int len;            /* Current edited line length. */
+    int cols;           /* Number of columns in terminal. */
+    int maxrows;        /* Maximum num of rows used so far (multiline mode) */
+    int history_index;  /* The history index we are currently editing. */
+};
+
+/* Session */
+struct linenoiseSession {
+    struct linenoiseSession *next;
+    struct linenoiseState state;
+    linenoiseSessionIO io;
+    linenoiseCompletionCallback *completionCallback;
+    char *read_ahead_buf;
+    int read_ahead_pos;
+    int history_max_len;
+    int history_len;
+    char **history;
+    int mlmode;         /* Multi line mode. Default is single line. */
+    int rawmode;        /* For atexit() function to check if restore is needed*/
+#ifndef LINENOISE_DISABLE_TERMIOS
+    struct termios orig_termios; /* In order to restore at exit.*/
+#endif
+    int dumb_terminal;
+    int forced_dumb;
+    int ncolreqs;        /* Outstandige get columns requests */
+    void *session_data;
+};
+
+enum KEY_ACTION{
+    KEY_NULL = 0,	/* NULL */
+    CTRL_A = 1,         /* Ctrl+a */
+    CTRL_B = 2,         /* Ctrl-b */
+    CTRL_C = 3,         /* Ctrl-c */
+    CTRL_D = 4,         /* Ctrl-d */
+    CTRL_E = 5,         /* Ctrl-e */
+    CTRL_F = 6,         /* Ctrl-f */
+    CTRL_H = 8,         /* Ctrl-h */
+    KEY_TAB = 9,        /* Tab */
+    CTRL_K = 11,        /* Ctrl+k */
+    CTRL_L = 12,        /* Ctrl+l */
+    KEY_LF = 10,        /* Enter: \n */
+    KEY_CR = 13,        /* Enter: \r */
+    CTRL_N = 14,        /* Ctrl-n */
+    CTRL_P = 16,        /* Ctrl-p */
+    CTRL_T = 20,        /* Ctrl-t */
+    CTRL_U = 21,        /* Ctrl+u */
+    CTRL_W = 23,        /* Ctrl+w */
+    ESC = 27,           /* Escape */
+    BACKSPACE =  127    /* Backspace */
+};
+
+static void refreshLine(linenoiseSession *session);
+static void freeHistory(linenoiseSession *session);
+static int linenoiseRaw(linenoiseSession *session, char *buf, size_t buflen, const char *prompt);
+
+/* Debugging macro. */
+/* #define LINENOISE_DEBUG_MODE */
+
+#ifdef LINENOISE_DEBUG_MODE
+#define lndebug(fmt, args...) \
+    do {\
+        bcmos_printf("%s:%d " fmt, __FUNCTION__, __LINE__, ##args);\
+    } while(0)
+#else
+#define lndebug(fmt, ...)
+#endif
+
+
+/* Session list. ToDo: protect update */
+static linenoiseSession *sessions;
+
+/* ======================= Low level terminal handling ====================== */
+
+/* Set if to use or not the multi line mode. */
+void linenoiseSetMultiLine(linenoiseSession *session, int ml) {
+    session->mlmode = ml;
+}
+
+int linenoiseGetMultiLine(linenoiseSession *session) {
+    return session->mlmode;
+}
+
+int linenoiseGetDumbTerminal(linenoiseSession *session) {
+    return session->dumb_terminal;
+}
+
+/* Raw mode: 1960 magic shit. */
+static int enableRawMode(linenoiseSession *session) {
+#ifndef LINENOISE_DISABLE_TERMIOS
+    struct termios raw;
+
+    if (tcgetattr(session->state.ifd, &session->orig_termios) == -1) goto fatal;
+
+    raw = session->orig_termios;  /* modify the original mode */
+    /* input modes: no break, no CR to NL, no parity check, no strip char,
+     * no start/stop output control. */
+    raw.c_iflag &= ~(BRKINT | IGNBRK | ICRNL | INPCK | ISTRIP | IXON | IXOFF);
+
+    /* output modes - disable post processing */
+    /* raw.c_oflag &= ~(OPOST); */
+
+    /* control modes - set 8 bit chars */
+    raw.c_cflag |= (CS8 /* | ISIG */);
+
+    /* local modes - echoing off, canonical off, no extended functions,
+     * no signal chars (^Z,^C) */
+    raw.c_lflag &= ~(ECHO | ICANON | IEXTEN);
+    /* control chars - set return condition: min number of bytes and timer.
+     * We want read to return every single byte, without timeout. */
+    raw.c_cc[VMIN] = 1; raw.c_cc[VTIME] = 0; /* 1 byte, no timer */
+
+    /* put terminal in raw mode after flushing */
+    if (tcsetattr(session->state.ifd, TCSAFLUSH, &raw) < 0) goto fatal;
+    session->rawmode = 1;
+    return 0;
+
+fatal:
+    errno = ENOTTY;
+    return -1;
+#else
+    session->rawmode = 1;
+    return 0; /* assume raw mode */
+#endif
+}
+
+static void disableRawMode(linenoiseSession *session) {
+    /* Don't even check the return value as it's too late. */
+#ifndef LINENOISE_DISABLE_TERMIOS
+    if (session->rawmode && tcsetattr(session->state.ifd,TCSAFLUSH,&session->orig_termios) != -1)
+        session->rawmode = 0;
+#endif
+}
+
+
+/* write ESC sequence */
+static int writeEscSequence(linenoiseSession *session, const char *seq, int seq_len)
+{
+    int n;
+    if (!seq_len)
+        seq_len = strlen(seq);
+    n = session->io.write(session->io.fd_out, seq, seq_len);
+    return n;
+}
+
+
+/* Try to get the number of columns in the current terminal, or assume 80
+ * if it fails. */
+static int getColumnsRequest(linenoiseSession *session) {
+    struct linenoiseState *l = &session->state;
+#ifndef LINENOISE_DISABLE_IOCTL
+    struct winsize ws;
+    if (ioctl(1, TIOCGWINSZ, &ws) == 0 && ws.ws_col != 0)
+    {
+        l->cols = ws.ws_col;
+    }
+#endif
+    {
+        /* 4 sequences: store position, go to right margin, request position, restore position. */
+        if (writeEscSequence(session, "\x1b" "7" "\x1b" "[999C" "\x1b" "[6n" "\x1b" "8", 14) != 14)
+            goto failed;
+        ++session->ncolreqs;
+    }
+    return l->cols;
+
+failed:
+    lndebug("getColumnsRequest failed: cols=80\n");
+    return 80;
+}
+
+/* Clear the screen. Used to handle ctrl+l */
+void linenoiseClearScreen(linenoiseSession *session) {
+#ifndef LINENOISE_DEBUG_MODE
+    if (writeEscSequence(session, "\x1b[H\x1b[2J", 7) <= 0) {
+        /* nothing to do, just to avoid warning. */
+    }
+#endif
+}
+
+/* Beep, used for completion when there is nothing to complete or when all
+ * the choices were already shown. */
+static void linenoiseBeep(void) {
+    fprintf(stderr, "\x7");
+    fflush(stderr);
+}
+
+static int linenoiseDefaultReadChar(long fd_in, char *c)
+{
+	int n;
+    do {
+        n = read(fd_in, c, 1);
+    } while(!n || (n==1 && ! *c));
+    return n;
+}
+
+static int linenoiseDefaultWrite(long fd_out, const char *buf, size_t len)
+{
+    return write(fd_out, buf, len);
+}
+
+int linenoiseSessionOpen(const linenoiseSessionIO *io, void *session_data, linenoiseSession **session)
+{
+    linenoiseSession *s;
+    if (!io || !session)
+        return -1;
+    s = bcmos_calloc(sizeof(*s));
+    if (!s)
+        return -1;
+    s->history_max_len = LINENOISE_DEFAULT_HISTORY_MAX_LEN;
+    s->io = *io;
+    s->dumb_terminal = io->dumb_terminal;
+    s->session_data = session_data;
+    *session = s;
+    s->next = sessions;
+    sessions = s;
+
+    if (!s->io.read_char)
+    {
+        s->io.read_char = linenoiseDefaultReadChar;
+        if (!s->io.fd_in)
+            s->io.fd_in = STDIN_FILENO;
+    }
+    if (!s->io.write)
+    {
+        s->io.write = linenoiseDefaultWrite;
+        if (!s->io.fd_out)
+            s->io.fd_out = STDOUT_FILENO;
+    }
+
+    /* IT: temp */
+    s->mlmode = 1;
+    s->state.ifd = STDIN_FILENO;
+
+    return 0;
+}
+
+
+void linenoiseSessionClose(linenoiseSession *session)
+{
+    linenoiseSession *s = sessions, *prev=NULL;
+    while (s && s != session)
+    {
+        prev = s;
+        s = s->next;
+    }
+    if (s)
+    {
+        if (prev)
+            prev->next = s->next;
+        else
+            sessions = s->next;
+        disableRawMode(s);
+        freeHistory(s);
+        if (s->read_ahead_buf)
+            bcmos_free(s->read_ahead_buf);
+        bcmos_free(s);
+    }
+}
+
+void *linenoiseSessionData(linenoiseSession *session) {
+    return session->session_data;
+}
+
+
+void linenoiseSetDumbTerminal(linenoiseSession *session, int dumb) {
+    if (!session->io.dumb_terminal)
+    {
+        session->dumb_terminal = dumb;
+        session->forced_dumb = dumb;
+    }
+}
+
+/* ============================== Completion ================================ */
+
+/* This is an helper function for linenoiseEdit() and is called when the
+ * user types the <tab> key in order to complete the string currently in the
+ * input. It can call linenoiseSetBuffer in order to replace the current edit buffer
+ */
+static void completeLine(linenoiseSession *session) {
+    struct linenoiseState *ls = &session->state;
+
+    if (!session->completionCallback(session, ls->buf, ls->pos))
+    {
+        linenoiseBeep();
+    }
+    refreshLine(session);
+}
+
+/* Register a callback function to be called for tab-completion. */
+void linenoiseSetCompletionCallback(linenoiseSession *session, linenoiseCompletionCallback *fn) {
+    session->completionCallback = fn;
+}
+
+/* This function is used by the callback function registered by the user
+ * in order to add completion options given the input string when the
+ * user typed <tab>. See the example.c source code for a very easy to
+ * understand example. */
+void linenoiseSetBuffer(linenoiseSession *session, const char *buf, int pos)
+{
+    if (!session->state.buf)
+        return;
+    strncpy(session->state.buf, buf, session->state.buflen - 1);
+    session->state.buf[session->state.buflen - 1] = 0;
+    session->state.len = strlen(session->state.buf);
+    session->state.pos = (pos >= 0 && pos < session->state.len) ? pos : session->state.len;
+    refreshLine(session);
+}
+
+/* =========================== Line editing ================================= */
+
+/* We define a very simple "append buffer" structure, that is an heap
+ * allocated string where we can append to. This is useful in order to
+ * write all the escape sequences in a buffer and flush them to the standard
+ * output in a single call, to avoid flickering effects. */
+struct abuf {
+    char *b;
+    int len;
+};
+
+static void abInit(struct abuf *ab) {
+    ab->b = NULL;
+    ab->len = 0;
+}
+
+static void abAppend(struct abuf *ab, const char *s, int len) {
+    char *new = bcmos_alloc(ab->len+len);
+    if (new == NULL) return;
+    memcpy(new,ab->b,ab->len);
+    memcpy(new+ab->len,s,len);
+    bcmos_free(ab->b);
+    ab->b = new;
+    ab->len += len;
+}
+
+static void abFree(struct abuf *ab) {
+    bcmos_free(ab->b);
+}
+
+/* Single line low level cursor refresh.
+ */
+static void refreshCursorSingleLine(linenoiseSession *session) {
+    struct linenoiseState *l = &session->state;
+    char seq[64];
+    size_t plen = strlen(l->prompt);
+    char *buf = l->buf;
+    size_t len = l->len;
+    size_t pos = l->pos;
+    struct abuf ab;
+
+    while((plen+pos) >= l->cols) {
+        buf++;
+        len--;
+        pos--;
+    }
+    while (plen+len > l->cols) {
+        len--;
+    }
+
+    abInit(&ab);
+    /* Cursor to left edge */
+    snprintf(seq,64,"\x1b[999D");
+    abAppend(&ab,seq,strlen(seq));
+    if (pos+plen)
+    {
+        snprintf(seq,64,"\x1b[%dC", (int)(pos+plen));
+        abAppend(&ab,seq,strlen(seq));
+    }
+    if (writeEscSequence(session, ab.b, ab.len) == -1) {} /* Can't recover from write error. */
+    abFree(&ab);
+}
+
+/* Single line low level line refresh.
+ *
+ * Rewrite the currently edited line accordingly to the buffer content,
+ * cursor position, and number of columns of the terminal. */
+static void refreshSingleLine(linenoiseSession *session) {
+    struct linenoiseState *l = &session->state;
+    char seq[64];
+    size_t plen = strlen(l->prompt);
+    char *buf = l->buf;
+    size_t len = l->len;
+    size_t pos = l->pos;
+    struct abuf ab;
+
+    while((plen+pos) >= l->cols) {
+        buf++;
+        len--;
+        pos--;
+    }
+    while (plen+len > l->cols) {
+        len--;
+    }
+
+    abInit(&ab);
+    /* Cursor to left edge */
+    snprintf(seq,64,"\x1b[999D");
+    abAppend(&ab,seq,strlen(seq));
+    /* Write the prompt and the current buffer content */
+    abAppend(&ab,l->prompt,strlen(l->prompt));
+    abAppend(&ab,buf,len);
+    /* Erase to right */
+    snprintf(seq,64,"\x1b[0K");
+    abAppend(&ab,seq,strlen(seq));
+    /* Move cursor to original position. */
+    snprintf(seq,64,"\x1b[999D");
+    abAppend(&ab,seq,strlen(seq));
+    if (pos+plen)
+    {
+        snprintf(seq,64,"\x1b[%dC", (int)(pos+plen));
+        abAppend(&ab,seq,strlen(seq));
+    }
+    if (writeEscSequence(session, ab.b, ab.len) == -1) {} /* Can't recover from write error. */
+    abFree(&ab);
+}
+
+/* Multi line low level cursor position refresh.
+ *
+ * Rewrite the currently edited line accordingly to the buffer content,
+ * cursor position, and number of columns of the terminal. */
+static void refreshCursorMultiLine(linenoiseSession *session) {
+    struct linenoiseState *l = &session->state;
+    char seq[64];
+    int plen = strlen(l->prompt);
+    int old_rpos = (plen+l->oldpos+l->cols)/l->cols; /* cursor relative row. */
+    int new_rpos = (plen+l->pos+l->cols)/l->cols; /* cursor relative row. */
+    int old_cpos = (plen+l->oldpos)%l->cols; /* cursor relative row. */
+    int new_cpos = (plen+l->pos)%l->cols; /* cursor relative row. */
+    struct abuf ab;
+
+    /* Update maxrows if needed. */
+    if (new_rpos > (int)l->maxrows) new_rpos = l->maxrows;
+
+    lndebug("oldp=%d newp=%d or=%d nr=%d oc=%d nc=%d\n\n", l->oldpos, l->pos, old_rpos, new_rpos, old_cpos, new_cpos);
+
+    abInit(&ab);
+
+    /* Handle row */
+    if (new_rpos > old_rpos)
+    {
+        snprintf(seq,64,"\x1b[%dB", new_rpos - old_rpos);
+        abAppend(&ab,seq,strlen(seq));
+    }
+    else if (new_rpos < old_rpos)
+    {
+        snprintf(seq,64,"\x1b[%dA", old_rpos - new_rpos);
+        abAppend(&ab,seq,strlen(seq));
+    }
+
+    /* Handle column */
+    if (new_cpos > old_cpos)
+    {
+        snprintf(seq,64,"\x1b[%dC", new_cpos - old_cpos);
+        abAppend(&ab,seq,strlen(seq));
+    }
+    else if (new_cpos < old_cpos)
+    {
+        snprintf(seq,64,"\x1b[%dD", old_cpos - new_cpos);
+        abAppend(&ab,seq,strlen(seq));
+    }
+
+    l->oldpos = l->pos;
+
+    if (writeEscSequence(session, ab.b, ab.len) == -1) {} /* Can't recover from write error. */
+    abFree(&ab);
+}
+
+/* Multi line low level line refresh.
+ *
+ * Rewrite the currently edited line accordingly to the buffer content,
+ * cursor position, and number of columns of the terminal. */
+static void refreshMultiLine(linenoiseSession *session) {
+    struct linenoiseState *l = &session->state;
+    char seq[64];
+    int plen = strlen(l->prompt);
+    int rows = (plen+l->len+l->cols-1)/l->cols; /* rows used by current buf. */
+    int rpos = (plen+l->oldpos+l->cols)/l->cols; /* cursor relative row. */
+    int rpos2; /* rpos after refresh. */
+    int old_rows = l->maxrows;
+    int pos;
+    int j;
+    struct abuf ab;
+
+    /* Update maxrows if needed. */
+    if (rows > (int)l->maxrows) l->maxrows = rows;
+
+    /* First step: clear all the lines used before. To do so start by
+     * going to the last row. */
+    abInit(&ab);
+    if (old_rows-rpos > 0) {
+        lndebug("go down %d", old_rows-rpos);
+        snprintf(seq,64,"\x1b[%dB", old_rows-rpos);
+        abAppend(&ab,seq,strlen(seq));
+    }
+
+    /* Now for every row clear it, go up. */
+    for (j = 0; j < old_rows-1; j++) {
+        lndebug("clear+up");
+        snprintf(seq,64,"\x1b[999D\x1b[0K\x1b[1A");
+        abAppend(&ab,seq,strlen(seq));
+    }
+
+    /* Clean the top line. */
+    lndebug("clear");
+    snprintf(seq,64,"\x1b[999D\x1b[0K");
+    abAppend(&ab,seq,strlen(seq));
+
+    /* Write the prompt and the current buffer content */
+    abAppend(&ab,l->prompt,strlen(l->prompt));
+    abAppend(&ab,l->buf,l->len);
+
+    /* If we are at the very end of the screen with our prompt, we need to
+     * emit a newline and move the prompt to the first column. */
+    if (l->pos &&
+        l->pos == l->len &&
+        (l->pos+plen) % l->cols == 0)
+    {
+        lndebug("<newline>");
+        abAppend(&ab,"\n",1);
+        snprintf(seq,64,"\x1b[999D");
+        abAppend(&ab,seq,strlen(seq));
+        rows++;
+        if (rows > (int)l->maxrows) l->maxrows = rows;
+    }
+
+    /* Move cursor to right position. */
+    rpos2 = (plen+l->pos+l->cols)/l->cols; /* current cursor relative row. */
+    lndebug("rpos2 %d", rpos2);
+
+    /* Go up till we reach the expected positon. */
+    if (rows-rpos2 > 0) {
+        lndebug("go-up %d", rows-rpos2);
+        snprintf(seq,64,"\x1b[%dA", rows-rpos2);
+        abAppend(&ab,seq,strlen(seq));
+    }
+
+    /* Set column. */
+    lndebug("set col %d", 1+((plen+(int)l->pos) % (int)l->cols));
+    snprintf(seq,64,"\x1b[999D");
+    abAppend(&ab,seq,strlen(seq));
+    pos = ((plen+(int)l->pos) % (int)l->cols);
+    if (pos)
+    {
+        snprintf(seq,64,"\x1b[%dC", pos);
+        abAppend(&ab,seq,strlen(seq));
+    }
+    lndebug("\n");
+    l->oldpos = l->pos;
+
+    if (writeEscSequence(session, ab.b, ab.len) == -1) {} /* Can't recover from write error. */
+    abFree(&ab);
+
+    lndebug(" - out\n");
+}
+
+/* Calls the two low level functions refreshCursorSingleLine() or
+ * refreshCursorMultiLine() according to the selected mode. */
+static void refreshCursor(linenoiseSession *session) {
+    if (session->mlmode)
+        refreshCursorMultiLine(session);
+    else
+        refreshCursorSingleLine(session);
+}
+
+/* Calls the two low level functions refreshSingleLine() or
+ * refreshMultiLine() according to the selected mode. */
+static void refreshLine(linenoiseSession *session) {
+    if (session->mlmode)
+        refreshMultiLine(session);
+    else
+        refreshSingleLine(session);
+}
+
+/* Insert the character 'c' at cursor current position.
+ *
+ * On error writing to the terminal -1 is returned, otherwise 0. */
+static int linenoiseEditInsert(linenoiseSession *session, char c) {
+    struct linenoiseState *l = &session->state;
+    if (l->len < l->buflen) {
+        if (l->len == l->pos) {
+            int plen = strlen(l->prompt);
+            int rows = (plen+l->len+l->cols)/l->cols;
+
+            l->buf[l->pos] = c;
+            l->pos++;
+            l->len++;
+            l->buf[l->len] = '\0';
+            lndebug(" plen=%d len=%d pos=%d cols=%d buf=<%s>\n",
+                (int)l->plen, (int)l->len, (int)l->pos, (int)l->cols, l->buf);
+            if (session->io.write(session->io.fd_out, &c, 1) == -1) return -1;
+            l->oldpos = l->pos;
+            l->maxrows = rows;
+        } else {
+            memmove(l->buf+l->pos+1,l->buf+l->pos,l->len-l->pos);
+            l->buf[l->pos] = c;
+            l->len++;
+            l->pos++;
+            l->buf[l->len] = '\0';
+            lndebug(" plen=%d len=%d pos=%d cols=%d buf=<%s>\n",
+                l->plen, l->len, l->pos, l->cols, l->buf);
+            refreshLine(session);
+        }
+    }
+    return 0;
+}
+
+/* Move cursor on the left. */
+static void linenoiseEditMoveLeft(linenoiseSession *session) {
+    struct linenoiseState *l = &session->state;
+    if (l->pos > 0) {
+        l->pos--;
+        refreshCursor(session);
+    }
+}
+
+/* Move cursor on the right. */
+static void linenoiseEditMoveRight(linenoiseSession *session) {
+    struct linenoiseState *l = &session->state;
+    if (l->pos != l->len) {
+        l->pos++;
+        refreshCursor(session);
+    }
+}
+
+/* Move cursor to the start of the line. */
+static void linenoiseEditMoveHome(linenoiseSession *session) {
+    struct linenoiseState *l = &session->state;
+    if (l->pos != 0) {
+        l->pos = 0;
+        refreshCursor(session);
+    }
+}
+
+/* Move cursor to the end of the line. */
+static void linenoiseEditMoveEnd(linenoiseSession *session) {
+    struct linenoiseState *l = &session->state;
+    if (l->pos != l->len) {
+        l->pos = l->len;
+        refreshCursor(session);
+    }
+}
+
+/* strdup implementation */
+static inline char *linenoise_strdup(const char *s)
+{
+    size_t size = strlen(s) + 1;
+    char *new = bcmos_alloc(size);
+    if (new)
+        memcpy(new, s, size);
+    return new;
+}
+
+/* Substitute the currently edited line with the next or previous history
+ * entry as specified by 'dir'. */
+#define LINENOISE_HISTORY_NEXT 0
+#define LINENOISE_HISTORY_PREV 1
+static void linenoiseEditHistoryNext(linenoiseSession *session, int dir) {
+    struct linenoiseState *l = &session->state;
+    if (session->history_len > 1) {
+        /* Update the current history entry before to
+         * overwrite it with the next one. */
+        bcmos_free(session->history[session->history_len - 1 - l->history_index]);
+        session->history[session->history_len - 1 - l->history_index] = linenoise_strdup(l->buf);
+        /* Show the new entry */
+        l->history_index += (dir == LINENOISE_HISTORY_PREV) ? 1 : -1;
+        if (l->history_index < 0) {
+            l->history_index = 0;
+            return;
+        } else if (l->history_index >= session->history_len) {
+            l->history_index = session->history_len-1;
+            return;
+        }
+        strncpy(l->buf,session->history[session->history_len - 1 - l->history_index],l->buflen);
+        l->buf[l->buflen-1] = '\0';
+        l->len = l->pos = strlen(l->buf);
+        refreshLine(session);
+    }
+}
+
+/* Delete the character at the right of the cursor without altering the cursor
+ * position. Basically this is what happens with the "Delete" keyboard key. */
+static void linenoiseEditDelete(linenoiseSession *session) {
+    struct linenoiseState *l = &session->state;
+    if (l->len > 0 && l->pos < l->len) {
+        memmove(l->buf+l->pos,l->buf+l->pos+1,l->len-l->pos-1);
+        l->len--;
+        l->buf[l->len] = '\0';
+        refreshLine(session);
+    }
+}
+
+/* Backspace implementation. */
+static void linenoiseEditBackspace(linenoiseSession *session) {
+    struct linenoiseState *l = &session->state;
+    if (l->pos > 0 && l->len > 0) {
+        memmove(l->buf+l->pos-1,l->buf+l->pos,l->len-l->pos);
+        l->pos--;
+        l->len--;
+        l->buf[l->len] = '\0';
+        refreshLine(session);
+    }
+}
+
+/* Delete the previosu word, maintaining the cursor at the start of the
+ * current word. */
+static void linenoiseEditDeletePrevWord(linenoiseSession *session) {
+    struct linenoiseState *l = &session->state;
+    size_t old_pos = l->pos;
+    size_t diff;
+
+    while (l->pos > 0 && l->buf[l->pos-1] == ' ')
+        l->pos--;
+    while (l->pos > 0 && l->buf[l->pos-1] != ' ')
+        l->pos--;
+    diff = old_pos - l->pos;
+    memmove(l->buf+l->pos,l->buf+old_pos,l->len-old_pos+1);
+    l->len -= diff;
+    refreshLine(session);
+}
+
+static int linenoiseReadChar(linenoiseSession *session, char *c)
+{
+    int n;
+
+    do {
+        if (session->read_ahead_buf)
+        {
+            *c = session->read_ahead_buf[session->read_ahead_pos++];
+            lndebug("read char from buf %d(%c)\n", *c, *c);
+            if (*c)
+                return 1;
+            bcmos_free(session->read_ahead_buf);
+            session->read_ahead_buf = NULL;
+            /* Fall through */
+        }
+        n = session->io.read_char(session->io.fd_in, c);
+    } while (!n || (n == 1 && ! *c));
+    lndebug("read char from io %d(%c) n=%d\n", *c, *c, n);
+    return n;
+}
+
+static int linenoiseHandleEscSequence(linenoiseSession *session)
+{
+    struct linenoiseState *l = &session->state;
+    char seq[32];
+
+    /* Read the next two bytes representing the escape sequence.
+     * Use two calls to handle slow terminals returning the two
+     * chars at different times. */
+    if (linenoiseReadChar(session, seq) == -1) return -1;
+    if (linenoiseReadChar(session, seq+1) == -1) return -1;
+    lndebug("seq=%02x(%c) seq1=%02x(%c)\n", seq[0], seq[0], seq[1], seq[1]);
+
+    /* ESC [ sequences. */
+    if (seq[0] == '[') {
+        if (seq[1] >= '0' && seq[1] <= '9') {
+            int n = 2;
+            char terminator = 0;
+
+            /* Extended escape, read additional byte(s) */
+            while (linenoiseReadChar(session, seq+n) != -1 && n < sizeof(seq) - 1)
+            {
+                terminator = seq[n++];
+                if ( !(terminator >= '0' && terminator <= '9') && terminator != ';')
+                    break;
+            }
+            seq[n] = 0;
+            switch (terminator ) {
+                case '~':
+                    linenoiseEditDelete(session);
+                    break;
+                case 'R':
+                {
+                    int row, col;
+                    /* Position report */
+                    seq[n-1] = 0; /* Cut R */
+                    sscanf(seq+1, "%d;%d", &row, &col);
+                    l->cols = col;
+                    session->ncolreqs = 0;
+                    lndebug("position report row=%d col=%d\n", row, col);
+                }
+                default:
+                    break;
+            }
+        } else {
+            switch(seq[1]) {
+            case 'A': /* Up */
+                linenoiseEditHistoryNext(session, LINENOISE_HISTORY_PREV);
+                break;
+            case 'B': /* Down */
+                linenoiseEditHistoryNext(session, LINENOISE_HISTORY_NEXT);
+                break;
+            case 'C': /* Right */
+                linenoiseEditMoveRight(session);
+                break;
+            case 'D': /* Left */
+                linenoiseEditMoveLeft(session);
+                break;
+            case 'H': /* Home */
+                linenoiseEditMoveHome(session);
+                break;
+            case 'F': /* End*/
+                linenoiseEditMoveEnd(session);
+                break;
+            default:
+                break;
+            }
+        }
+    }
+
+    /* ESC O sequences. */
+    else if (seq[0] == 'O') {
+        switch(seq[1]) {
+        case 'H': /* Home */
+            linenoiseEditMoveHome(session);
+            break;
+        case 'F': /* End*/
+            linenoiseEditMoveEnd(session);
+            break;
+        default:
+            break;
+        }
+    }
+    return 0;
+}
+
+/* This function is the core of the line editing capability of linenoise.
+ * It expects 'fd' to be already in "raw mode" so that every key pressed
+ * will be returned ASAP to read().
+ *
+ * The resulting string is put into 'buf' when the user type enter, or
+ * when ctrl+d is typed.
+ *
+ * The function returns the length of the current buffer. */
+static int linenoiseEdit(linenoiseSession *session, char *buf, size_t buflen, const char *prompt)
+{
+    struct linenoiseState *l = &session->state;
+    int nread = 0;
+
+    /* Populate the linenoise state that we pass to functions implementing
+     * specific editing functionalities. */
+    l->buf = buf;
+    l->buflen = buflen;
+    l->prompt = prompt;
+    l->plen = strlen(prompt);
+    l->oldpos = l->pos = 0;
+    l->len = 0;
+    if (!l->cols)
+        l->cols = 80;
+    getColumnsRequest(session);
+    l->maxrows = 0;
+    l->history_index = 0;
+
+    /* Buffer starts empty. */
+    l->buf[0] = '\0';
+    l->buflen--; /* Make sure there is always space for the nulterm */
+
+    /* The latest history entry is always our current buffer, that
+     * initially is just an empty string. */
+    linenoiseHistoryAdd(session, "");
+    if (l->plen && session->io.write(session->io.fd_out, prompt, l->plen) == -1) return -1;
+    while(1) {
+        char c;
+
+        nread = linenoiseReadChar(session, &c);
+        if (nread <= 0) goto edit_out;
+
+        lndebug("c=%02x(%c)\n", c, c);
+        /* Only autocomplete when the callback is set. It returns < 0 when
+         * there was an error reading from fd. Otherwise it will return the
+         * character that should be handled next. */
+        if (c == KEY_TAB && session->completionCallback != NULL) {
+            completeLine(session);
+            continue;
+        }
+
+        switch(c) {
+        case KEY_CR:    /* enter */
+        case KEY_LF:    /* enter */
+            session->history_len--;
+            bcmos_free(session->history[session->history_len]);
+            goto edit_out;
+        case CTRL_C:     /* ctrl-c */
+            return -1;
+        case BACKSPACE:   /* backspace */
+        case 8:     /* ctrl-h */
+            linenoiseEditBackspace(session);
+            break;
+        case CTRL_D:     /* ctrl-d, remove char at right of cursor, or of the
+                       line is empty, act as end-of-file. */
+            if (l->len > 0) {
+                linenoiseEditDelete(session);
+            } else {
+                session->history_len--;
+                bcmos_free(session->history[session->history_len]);
+                return -1;
+            }
+            break;
+        case CTRL_T:    /* ctrl-t, swaps current character with previous. */
+            if (l->pos > 0 && l->pos < l->len) {
+                int aux = buf[l->pos-1];
+                buf[l->pos-1] = buf[l->pos];
+                buf[l->pos] = aux;
+                if (l->pos != l->len-1) l->pos++;
+                refreshLine(session);
+            }
+            break;
+        case CTRL_B:     /* ctrl-b */
+            linenoiseEditMoveLeft(session);
+            break;
+        case CTRL_F:     /* ctrl-f */
+            linenoiseEditMoveRight(session);
+            break;
+        case CTRL_P:    /* ctrl-p */
+            linenoiseEditHistoryNext(session, LINENOISE_HISTORY_PREV);
+            break;
+        case CTRL_N:    /* ctrl-n */
+            linenoiseEditHistoryNext(session, LINENOISE_HISTORY_NEXT);
+            break;
+        case ESC:    /* escape sequence */
+            linenoiseHandleEscSequence(session);
+            break;
+        default:
+            if (linenoiseEditInsert(session,c))
+            {
+                lndebug("editInsert failed\n");
+                return -1;
+            };
+            break;
+        case CTRL_U: /* Ctrl+u, delete the whole line. */
+            buf[0] = '\0';
+            l->pos = l->len = 0;
+            refreshLine(session);
+            break;
+        case CTRL_K: /* Ctrl+k, delete from current to end of line. */
+            buf[l->pos] = '\0';
+            l->len = l->pos;
+            refreshLine(session);
+            break;
+        case CTRL_A: /* Ctrl+a, go to the start of the line */
+            linenoiseEditMoveHome(session);
+            break;
+        case CTRL_E: /* ctrl+e, go to the end of the line */
+            linenoiseEditMoveEnd(session);
+            break;
+        case CTRL_L: /* ctrl+l, clear screen */
+            linenoiseClearScreen(session);
+            refreshLine(session);
+            break;
+        case CTRL_W: /* ctrl+w, delete previous word */
+            linenoiseEditDeletePrevWord(session);
+            break;
+        }
+    }
+edit_out:
+    lndebug(" - out. len=%d buf=<%s>\n", l->len, buf);
+    return (nread >= 0) ? l->len : -1;
+}
+
+/* Get without editing */
+static int linenoiseNoedit(linenoiseSession *session, char *buf, size_t buflen) {
+    char c;
+    int len = 0;
+    int switch_to_smart_mode = 0;
+    int nread = 0;
+#ifndef LINENOISE_DISABLE_TERMIOS
+    int atty_term = isatty(STDIN_FILENO);
+#else
+    int atty_term = 1;
+#endif
+
+    while ((nread = linenoiseReadChar(session, &c)) != -1 && len < buflen - 1)
+    {
+        if (c == '\n' || c == '\r')
+            break;
+        buf[len++] = c;
+        /* If buffer contains ESC sequence - perhaps the terminal is not dumb after all */
+        if (c == ESC && !session->io.dumb_terminal && !session->forced_dumb && atty_term)
+        {
+            switch_to_smart_mode = 1;
+            break;
+        }
+        /* Echo here is terminal is in raw mode */
+        if (session->rawmode)
+        {
+            session->io.write(session->io.fd_out, &c, 1);
+        }
+    }
+    buf[len] = 0;
+    if (switch_to_smart_mode)
+    {
+        /* Copy buffer into read-ahead buffer and re-parse */
+        lndebug("switching to smart mode\n");
+        /* If there already is read_ahead buf - realloc it */
+        if (session->read_ahead_buf)
+        {
+            char *new_buf;
+            new_buf = bcmos_alloc(strlen(session->read_ahead_buf) - session->read_ahead_pos + len + 1);
+            if (!new_buf)
+                return -1;
+            memcpy(new_buf, buf, len);
+            strcpy(&new_buf[len], &session->read_ahead_buf[session->read_ahead_pos]);
+            bcmos_free(session->read_ahead_buf);
+            session->read_ahead_buf = new_buf;
+        }
+        else
+        {
+            session->read_ahead_buf = bcmos_alloc(len + 1);
+            if (!session->read_ahead_buf)
+                return -1;
+            strcpy(session->read_ahead_buf, buf);
+        }
+        session->read_ahead_pos = 0;
+        session->dumb_terminal = 0;
+        session->ncolreqs = 0;
+        *buf = 0;
+        nread = linenoiseEdit(session, buf, buflen, "");
+    }
+    lndebug(" - out. len=%d buf=<%s> nread=%d\n", (int)strlen(buf), buf, nread);
+    return (nread >=0) ? strlen(buf) : -1;
+}
+
+
+/* This function calls the line editing function linenoiseEdit() using
+ * the STDIN file descriptor set in raw mode. */
+static int linenoiseRaw(linenoiseSession *session, char *buf, size_t buflen, const char *prompt) {
+    int rc = 0;
+
+    lndebug("\n");
+#ifndef LINENOISE_DISABLE_TERMIOS
+    if (!isatty(STDIN_FILENO)) {
+        /* Not a tty: read from file / pipe. */
+	rc = linenoiseNoedit(session, buf, buflen);
+	if (rc >= 0)
+	    session->io.write(session->io.fd_out, "\n", 1);
+    }
+    else
+#endif
+    {
+        /* Interactive editing. */
+        if (enableRawMode(session) == -1) return -1;
+
+        if (!session->dumb_terminal && session->ncolreqs > 1)
+        {
+            session->dumb_terminal = 1;
+            lndebug("dumb_terminal=%d\n", session->dumb_terminal);
+        }
+        if (session->dumb_terminal) {
+            session->io.write(session->io.fd_out, prompt, strlen(prompt));
+            rc = linenoiseNoedit(session, buf, buflen);
+        } else {
+            rc = linenoiseEdit(session, buf, buflen, prompt);
+        }
+
+        disableRawMode(session);
+        if (rc >= 0)
+            session->io.write(session->io.fd_out, "\n", 1);
+    }
+    lndebug(" - out. len=%d buf=<%s> rc=%d\n", (int)strlen(buf), buf, rc);
+    return rc;
+}
+
+/* The high level function that is the main API of the linenoise library.
+ * This function checks if the terminal has basic capabilities, just checking
+ * for a blacklist of stupid terminals, and later either calls the line
+ * editing function or uses dummy fgets() so that you will be able to type
+ * something even in the most desperate of the conditions. */
+char *linenoise(linenoiseSession *session, const char *prompt, char *buf, size_t size) {
+
+    if (size == 0) {
+        errno = EINVAL;
+        return NULL;
+    }
+
+    /* Configure terminal as dumb if it doesn't support basic ESC sequences */
+    if (session->io.dumb_terminal || session->forced_dumb) {
+        int rc;
+
+        session->io.write(session->io.fd_out, prompt, strlen(prompt));
+        rc = linenoiseNoedit(session, buf, size);
+        session->io.write(session->io.fd_out, "\n", 1);
+        lndebug(" - out. len=%d buf=<%s>\n", (int)strlen(buf), buf);
+        return (rc == -1) ? NULL : buf;
+    } else {
+        if (linenoiseRaw(session, buf, size, prompt) == -1) return NULL;
+        lndebug(" - out. len=%d buf=<%s>\n", (int)strlen(buf), buf);
+        return buf;
+    }
+}
+
+/* ================================ History ================================= */
+
+/* Free the history, but does not reset it. Only used when we have to
+ * exit() to avoid memory leaks are reported by valgrind & co. */
+static void freeHistory(linenoiseSession *session) {
+    if (session->history) {
+        int j;
+
+        for (j = 0; j < session->history_len; j++)
+            bcmos_free(session->history[j]);
+        bcmos_free(session->history);
+        session->history = NULL;
+    }
+}
+
+/* This is the API call to add a new entry in the linenoise history.
+ * It uses a fixed array of char pointers that are shifted (memmoved)
+ * when the history max length is reached in order to remove the older
+ * entry and make room for the new one, so it is not exactly suitable for huge
+ * histories, but will work well for a few hundred of entries.
+ *
+ * Using a circular buffer is smarter, but a bit more complex to handle. */
+int linenoiseHistoryAdd(linenoiseSession *session, const char *line) {
+    char *linecopy;
+
+    if (session->history_max_len == 0) return 0;
+
+    /* Initialization on first call. */
+    if (session->history == NULL) {
+        session->history = bcmos_alloc(sizeof(char*)*session->history_max_len);
+        if (session->history == NULL) return 0;
+        memset(session->history,0,(sizeof(char*)*session->history_max_len));
+    }
+
+    /* Don't add duplicated lines. */
+    if (session->history_len && !strcmp(session->history[session->history_len-1], line)) return 0;
+
+    /* Add an heap allocated copy of the line in the history.
+     * If we reached the max length, remove the older line. */
+    linecopy = linenoise_strdup(line);
+    if (!linecopy) return 0;
+    if (session->history_len == session->history_max_len) {
+        bcmos_free(session->history[0]);
+        memmove(session->history,session->history+1,sizeof(char*)*(session->history_max_len-1));
+        session->history_len--;
+    }
+    session->history[session->history_len] = linecopy;
+    session->history_len++;
+    return 1;
+}
+
+/* Set the maximum length for the history. This function can be called even
+ * if there is already some history, the function will make sure to retain
+ * just the latest 'len' elements if the new history length value is smaller
+ * than the amount of items already inside the history. */
+int linenoiseHistorySetMaxLen(linenoiseSession *session, int len) {
+    char **new;
+
+    if (len < 1) return 0;
+    if (session->history) {
+        int tocopy = session->history_len;
+
+        new = bcmos_alloc(sizeof(char*)*len);
+        if (new == NULL) return 0;
+
+        /* If we can't copy everything, free the elements we'll not use. */
+        if (len < tocopy) {
+            int j;
+
+            for (j = 0; j < tocopy-len; j++) bcmos_free(session->history[j]);
+            tocopy = len;
+        }
+        memset(new,0,sizeof(char*)*len);
+        memcpy(new,session->history+(session->history_len-tocopy), sizeof(char*)*tocopy);
+        bcmos_free(session->history);
+        session->history = new;
+    }
+    session->history_max_len = len;
+    if (session->history_len > session->history_max_len)
+        session->history_len = session->history_max_len;
+    return 1;
+}
+
+int linenoiseSetRaw(linenoiseSession *session, int raw)
+{
+    int rc = 0;
+    if (raw)
+        rc = enableRawMode(session);
+    else
+        disableRawMode(session);
+    return rc;
+}
+
+int linenoiseGetRaw(linenoiseSession *session)
+{
+    return session->rawmode;
+}
+
+#ifndef LINENOISE_DISABLE_HIST_SAVE
+
+/* Save the history in the specified file. On success 0 is returned
+ * otherwise -1 is returned. */
+int linenoiseHistorySave(linenoiseSession *session, const char *filename) {
+    FILE *fp = fopen(filename,"w");
+    int j;
+
+    if (fp == NULL) return -1;
+    for (j = 0; j < session->history_len; j++)
+        fprintf(fp,"%s\n",session->history[j]);
+    fclose(fp);
+    return 0;
+}
+
+/* Load the history from the specified file. If the file does not exist
+ * zero is returned and no operation is performed.
+ *
+ * If the file exists and the operation succeeded 0 is returned, otherwise
+ * on error -1 is returned. */
+int linenoiseHistoryLoad(linenoiseSession *session, const char *filename) {
+    FILE *fp = fopen(filename,"r");
+    char *buf;
+
+    if (fp == NULL) return -1;
+    buf = bcmos_alloc(LINENOISE_MAX_LINE);
+    if (!buf)
+    {
+        fclose(fp);
+        return -1;
+    }
+
+    while (fgets(buf,LINENOISE_MAX_LINE,fp) != NULL) {
+        char *p;
+
+        p = strchr(buf,'\r');
+        if (!p) p = strchr(buf,'\n');
+        if (p) *p = '\0';
+        linenoiseHistoryAdd(session, buf);
+    }
+    fclose(fp);
+    bcmos_free(buf);
+    return 0;
+}
+
+#endif
diff --git a/bcm68620_release/release/host_reference/linenoise/linenoise.h b/bcm68620_release/release/host_reference/linenoise/linenoise.h
new file mode 100644
index 0000000..b98048b
--- /dev/null
+++ b/bcm68620_release/release/host_reference/linenoise/linenoise.h
@@ -0,0 +1,79 @@
+/* linenoise.h -- guerrilla line editing library against the idea that a
+ * line editing lib needs to be 20,000 lines of C code.
+ *
+ * See linenoise.c for more information.
+ *
+ * ------------------------------------------------------------------------
+ *
+ * Copyright (c) 2010, Salvatore Sanfilippo <antirez at gmail dot com>
+ * Copyright (c) 2010, Pieter Noordhuis <pcnoordhuis at gmail dot com>
+ *
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * 
+ *  *  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *  *  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __LINENOISE_H
+#define __LINENOISE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct linenoiseSessionIO
+{
+    long fd_in;
+    long fd_out;
+    int (*read_char)(long fd_in, char *c);
+    int (*write)(long fd_out, const char *buf, size_t len);
+    int dumb_terminal; /* 1=dumb terminal. do not use escape sequences */
+} linenoiseSessionIO;
+
+typedef struct linenoiseSession linenoiseSession;
+
+typedef int (linenoiseCompletionCallback)(linenoiseSession *session, const char *, int pos);
+int linenoiseSessionOpen(const linenoiseSessionIO *io, void *session_data, linenoiseSession **session);
+void linenoiseSessionClose(linenoiseSession *session);
+void *linenoiseSessionData(linenoiseSession *session);
+void linenoiseSetCompletionCallback(linenoiseSession *session, linenoiseCompletionCallback *);
+void linenoiseSetBuffer(linenoiseSession *session, const char *buf, int pos);
+
+char *linenoise(linenoiseSession *session, const char *prompt, char *buf, size_t size);
+int linenoiseHistoryAdd(linenoiseSession *session, const char *line);
+int linenoiseHistorySetMaxLen(linenoiseSession *session, int len);
+int linenoiseHistorySave(linenoiseSession *session, const char *filename);
+int linenoiseHistoryLoad(linenoiseSession *session, const char *filename);
+void linenoiseClearScreen(linenoiseSession *session);
+void linenoiseSetMultiLine(linenoiseSession *session, int ml);
+void linenoiseSetDumbTerminal(linenoiseSession *session, int dumb);
+int linenoiseGetMultiLine(linenoiseSession *session);
+int linenoiseGetDumbTerminal(linenoiseSession *session);
+int linenoiseSetRaw(linenoiseSession *session, int raw);
+int linenoiseGetRaw(linenoiseSession *session);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __LINENOISE_H */
diff --git a/bcm68620_release/release/host_reference/remote_cli/Makefile b/bcm68620_release/release/host_reference/remote_cli/Makefile
new file mode 100644
index 0000000..ee2fe6e
--- /dev/null
+++ b/bcm68620_release/release/host_reference/remote_cli/Makefile
@@ -0,0 +1,9 @@
+ifeq ("$(OS)", "posix")

+ifeq ("$(ENABLE_CLI)", "y")

+    MOD_NAME = bcm_remote_cli

+    MOD_TYPE = lib

+    MOD_DEPS = cli api_cli

+    srcs = bcmolt_remote_cli.c

+    USE_LINT = yes

+endif

+endif

diff --git a/bcm68620_release/release/host_reference/remote_cli/bcmolt_remote_cli.c b/bcm68620_release/release/host_reference/remote_cli/bcmolt_remote_cli.c
new file mode 100644
index 0000000..9ca9d2e
--- /dev/null
+++ b/bcm68620_release/release/host_reference/remote_cli/bcmolt_remote_cli.c
@@ -0,0 +1,543 @@
+/*

+<:copyright-BRCM:2016:DUAL/GPL:standard

+

+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom

+   All Rights Reserved

+

+Unless you and Broadcom execute a separate written software license

+agreement governing use of this software, this software is licensed

+to you under the terms of the GNU General Public License version 2

+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,

+with the following added to such license:

+

+   As a special exception, the copyright holders of this software give

+   you permission to link this software with independent modules, and

+   to copy and distribute the resulting executable under terms of your

+   choice, provided that you also meet, for each linked independent

+   module, the terms and conditions of the license of that module.

+   An independent module is a module which is not derived from this

+   software.  The special exception does not apply to any modifications

+   of the software.

+

+Not withstanding the above, under no circumstances may you combine

+this software in any way with any other Broadcom software provided

+under a license other than the GPL, without Broadcom's express prior

+written consent.

+

+:>

+ */

+

+#include <bcmos_system.h>

+#include <bcmtr_interface.h>

+#include <bcmtr_header.h>

+#include <bcmolt_api.h>

+#include <bcm_api_cli_helpers.h>

+#include <bcmtr_debug.h>

+#include <bcmcli_session.h>

+#include "bcmolt_remote_cli.h"

+#ifdef ENABLE_LOG

+#include "bcm_dev_log.h"

+#endif

+

+#define REMOTE_CLI_BUFFER_MAX 65635 /* Max reassembled packet plus header */

+#define REMOTE_CLI_MESSAGE_QUEUE_DEPTH BCMOS_MSG_POOL_DEFAULT_SIZE

+

+typedef enum

+{

+    REMOTE_CLI_OPCODE_CLI_COMMAND,

+    REMOTE_CLI_OPCODE_INDICATION,

+    REMOTE_CLI_OPCODE_PROXY_RX

+} remote_cli_opcode;

+

+/* Statistics */

+typedef struct

+{

+    unsigned long rx_requests;

+    unsigned long tx_responses;

+    unsigned long indications;

+    unsigned long proxy_rxs;

+    unsigned long unpack_errors;

+    unsigned long pack_errors;

+    unsigned long correlation_errors;

+    unsigned long tx_socket_errors;

+    unsigned long rx_socket_errors;

+    unsigned long message_errors;

+} remote_cli_stats;

+

+typedef struct

+{

+    bcmos_task output_task;

+    bcmos_task socket_task;

+    struct sockaddr_in client;

+    uint16_t port;

+    int client_socket;

+    bcmos_bool is_running;

+    dev_log_id log_id;

+    bcmos_bool output_pending;

+    uint8_t input_buffer[REMOTE_CLI_BUFFER_MAX];

+    char *input_str;

+    uint8_t output_buffer[REMOTE_CLI_BUFFER_MAX];

+    uint16_t output_current_char;

+    bcmos_mutex output_lock;

+    int current_corr_tag;

+    bcmcli_session *session;

+    remote_cli_stats stats;

+} remote_cli_control_block;

+

+static remote_cli_control_block remote_cli_data[BCMTR_MAX_OLTS];

+

+static bcmos_errno remote_cli_stats_cmd(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)

+{

+    int device = (int)parm[0].value.number;

+

+    if (device >= BCMTR_MAX_OLTS)

+    {

+        return BCM_ERR_RANGE;

+    }

+

+    bcmcli_print(session, "%-16s: %lu\n", "rx_requests", remote_cli_data[device].stats.rx_requests);

+    bcmcli_print(session, "%-16s: %lu\n", "tx_responses", remote_cli_data[device].stats.tx_responses);

+    bcmcli_print(session, "%-16s: %lu\n", "indications", remote_cli_data[device].stats.indications);

+    bcmcli_print(session, "%-16s: %lu\n", "proxy_rxs", remote_cli_data[device].stats.proxy_rxs);

+    bcmcli_print(session, "%-16s: %lu\n", "unpack_errors", remote_cli_data[device].stats.unpack_errors);

+    bcmcli_print(session, "%-16s: %lu\n", "pack_errors", remote_cli_data[device].stats.pack_errors);

+    bcmcli_print(session, "%-16s: %lu\n", "tx_socket_errors", remote_cli_data[device].stats.tx_socket_errors);

+    bcmcli_print(session, "%-16s: %lu\n", "rx_socket_errors", remote_cli_data[device].stats.rx_socket_errors);

+    bcmcli_print(session, "%-16s: %lu\n", "message_errors", remote_cli_data[device].stats.message_errors);

+    memset(&remote_cli_data[device].stats, 0, sizeof(remote_cli_stats));

+

+    return BCM_ERR_OK;

+}

+

+static void send_output_packets(bcmolt_devid device, remote_cli_opcode opcode, uint16_t corr_tag)

+{

+    bcmolt_buf buf = {};

+    static uint8_t scratch_buffer[REMOTE_CLI_BUFFER_MAX];

+    ssize_t len;

+    bcmos_bool ok = BCMOS_TRUE;

+

+    if (remote_cli_data[device].output_current_char == 0)

+    {

+        return;

+    }

+

+    bcmolt_buf_init(&buf, REMOTE_CLI_BUFFER_MAX, scratch_buffer, BCMOLT_BUF_ENDIAN_FIXED);

+    ok = ok && bcmolt_buf_write_u8(&buf, (uint8_t)opcode);

+    ok = ok && bcmolt_buf_write_u16_be(&buf, corr_tag);

+    ok = ok && bcmolt_buf_write(

+        &buf,

+        remote_cli_data[device].output_buffer,

+        remote_cli_data[device].output_current_char);

+

+    if (!ok)

+    {

+        ++remote_cli_data[device].stats.pack_errors;

+        return;

+    }

+

+    /* Send to client */

+    len = sendto(

+        remote_cli_data[device].client_socket,

+        buf.start,

+        bcmolt_buf_get_used(&buf),

+        0,

+        (struct sockaddr *)&remote_cli_data[device].client,

+        sizeof(remote_cli_data[device].client));

+

+    if (len <= 0)

+    {

+        ++remote_cli_data[device].stats.tx_socket_errors;

+    }

+}

+

+static void process_cli_input(bcmolt_devid device)

+{

+    bcmos_mutex_lock(&remote_cli_data[device].output_lock);

+    remote_cli_data[device].output_current_char = 0;

+    memset(remote_cli_data[device].output_buffer, 0, sizeof(remote_cli_data[device].output_buffer));

+    bcmcli_parse(remote_cli_data[device].session, remote_cli_data[device].input_str);

+    bcmos_mutex_unlock(&remote_cli_data[device].output_lock);

+}

+

+static int remote_cli_session_write_cb(bcmcli_session *session, const char *buf, uint32_t size)

+{

+    int i;

+    bcmolt_devid device = *((bcmolt_devid *)bcmcli_session_user_priv(session));

+

+    bcmos_mutex_lock(&remote_cli_data[device].output_lock);

+    for (i = 0; i < size; ++i)

+    {

+        remote_cli_data[device].output_buffer[remote_cli_data[device].output_current_char] = buf[i];

+        ++remote_cli_data[device].output_current_char;

+    }

+    bcmos_mutex_unlock(&remote_cli_data[device].output_lock);

+

+    return size;

+}

+

+static bcmos_errno remote_cli_open_session(bcmolt_devid device)

+{

+    bcmos_errno rc;

+    bcmcli_session_parm sess_parm = {};

+    sess_parm.access_right = BCMCLI_ACCESS_DEBUG;

+    sess_parm.write = remote_cli_session_write_cb;

+    sess_parm.user_priv = bcmos_calloc(sizeof(device));

+    sess_parm.line_edit_mode = BCMCLI_LINE_EDIT_DISABLE;

+    BUG_ON(sess_parm.user_priv == NULL);

+    *((bcmolt_devid *)sess_parm.user_priv) = device;

+    rc = bcmcli_session_open(&sess_parm, &remote_cli_data[device].session);

+

+    if (rc != BCM_ERR_OK)

+    {

+        perror("Can't open session");

+#ifdef ENABLE_LOG

+        BCM_LOG(

+            ERROR,

+            remote_cli_data[device].log_id,

+            "Can't open session\n");

+#endif

+        shutdown(remote_cli_data[device].client_socket, SHUT_RDWR);

+    }

+    return rc;

+}

+

+static bcmos_errno remote_cli_open_socket(bcmolt_devid device)

+{

+    struct sockaddr_in sa = {};

+    /* Start listening on port */

+    remote_cli_data[device].client_socket = socket(AF_INET, SOCK_DGRAM, 0);

+    if (remote_cli_data[device].client_socket < 0)

+    {

+        perror("Can't create socket");

+#ifdef ENABLE_LOG

+        BCM_LOG(

+            ERROR,

+            remote_cli_data[device].log_id,

+            "Can't create socket\n");

+#endif

+        return BCM_ERR_INTERNAL;

+    }

+

+    /* Bind local */

+    sa.sin_family = AF_INET;

+    sa.sin_port = (in_port_t)htons(remote_cli_data[device].port);

+    sa.sin_addr.s_addr = INADDR_ANY;

+    if (bind(remote_cli_data[device].client_socket, (struct sockaddr*)&sa, sizeof(sa)) == -1)

+    {

+        perror("Can't bind to socket");

+#ifdef ENABLE_LOG

+        BCM_LOG(

+            ERROR,

+            remote_cli_data[device].log_id,

+            "Can't bind socket to port %u\n",

+            remote_cli_data[device].port);

+#endif

+        shutdown(remote_cli_data[device].client_socket, SHUT_RDWR);

+        return BCM_ERR_INTERNAL;

+    }

+    return BCM_ERR_OK;

+}

+

+static void remote_cli_indication_cb(bcmos_module_id module_id, bcmos_msg *msg)

+{

+    bcmolt_devid device = (bcmolt_devid)(module_id - BCMOS_MODULE_ID_REMOTE_CLI_DEV0);

+    bcmolt_msg *ind = msg->data;

+

+    bcmos_mutex_lock(&remote_cli_data[device].output_lock);

+    remote_cli_data[device].output_current_char = 0;

+    memset(remote_cli_data[device].output_buffer, 0, sizeof(remote_cli_data[device].output_buffer));

+

+    apicli_msg_dump(remote_cli_data[device].session, ind);

+    if (ind->group == BCMOLT_MGT_GROUP_AUTO)

+    {

+        send_output_packets(device, REMOTE_CLI_OPCODE_INDICATION, ind->corr_tag);

+        ++remote_cli_data[device].stats.indications;

+    }

+    else if (ind->group == BCMOLT_MGT_GROUP_PROXY_RX)

+    {

+        send_output_packets(device, REMOTE_CLI_OPCODE_PROXY_RX, ind->corr_tag);

+        ++remote_cli_data[device].stats.proxy_rxs;

+    }

+    else

+    {

+#ifdef ENABLE_LOG

+        BCM_LOG(

+            ERROR,

+            remote_cli_data[device].log_id,

+            "Unknown group type %u\n",

+            ind->group);

+#endif

+    }

+    bcmos_mutex_unlock(&remote_cli_data[device].output_lock);

+

+    bcmolt_msg_free(ind);

+}

+

+static void remote_cli_output_cb(bcmos_module_id module_id, bcmos_msg *msg)

+{

+    bcmolt_devid device = (bcmolt_devid)(module_id - BCMOS_MODULE_ID_REMOTE_CLI_DEV0);

+    process_cli_input(device);

+    send_output_packets(device, REMOTE_CLI_OPCODE_CLI_COMMAND, remote_cli_data[device].current_corr_tag);

+    remote_cli_data[device].output_pending = BCMOS_FALSE;

+    ++remote_cli_data[device].stats.tx_responses;

+}

+

+static int remote_cli_socket_task(long data)

+{

+    bcmolt_devid device = (bcmolt_devid)data;

+    struct sockaddr_in sender;

+    socklen_t sendsize = sizeof(sender);

+    bcmolt_buf buf;

+    ssize_t len;

+    uint8_t opcode = 0;

+    uint16_t corr_tag = 0;

+    bcmos_bool ok = BCMOS_TRUE;

+    bcmos_msg output_msg = { .handler = remote_cli_output_cb };

+    bcmos_errno rc;

+

+    rc = remote_cli_open_socket(device);

+    BCMOS_CHECK_RETURN(rc != BCM_ERR_OK, rc, -1);

+    rc = remote_cli_open_session(device);

+    BCMOS_CHECK_RETURN(rc != BCM_ERR_OK, rc, -1);

+

+    while (remote_cli_data[device].is_running)

+    {

+        if (remote_cli_data[device].output_pending)

+        {

+            bcmos_usleep(1000);

+            continue;

+        }

+

+        remote_cli_data[device].current_corr_tag = -1;

+        memset(remote_cli_data[device].input_buffer, 0, sizeof(remote_cli_data[device].input_buffer));

+

+        memset(&sender, 0, sizeof(sender));

+        len = recvfrom(

+            remote_cli_data[device].client_socket,

+            remote_cli_data[device].input_buffer,

+            sizeof(remote_cli_data[device].input_buffer),

+            0,

+            (struct sockaddr *)&sender,

+            &sendsize);

+        if (len < 0)

+        {

+            bcmos_usleep(1000000);

+            continue;

+        }

+        ++remote_cli_data[device].stats.rx_requests;

+

+        if ((remote_cli_data[device].client.sin_addr.s_addr != sender.sin_addr.s_addr) ||

+            (remote_cli_data[device].client.sin_port != sender.sin_port))

+        {

+            remote_cli_data[device].client = sender;

+        }

+

+        /* Unpack received message */

+        bcmolt_buf_init(&buf, (uint32_t)len, remote_cli_data[device].input_buffer, BCMOLT_BUF_ENDIAN_FIXED);

+        ok = ok && bcmolt_buf_read_u8(&buf, &opcode);

+        ok = ok && bcmolt_buf_read_u16_be(&buf, &corr_tag);

+

+        if (!ok)

+        {

+            ++remote_cli_data[device].stats.unpack_errors;

+            continue;

+        }

+

+        if ((remote_cli_opcode)opcode != REMOTE_CLI_OPCODE_CLI_COMMAND)

+        {

+            ++remote_cli_data[device].stats.unpack_errors;

+            continue;

+        }

+

+        if ((remote_cli_data[device].current_corr_tag != corr_tag) && (remote_cli_data[device].current_corr_tag >= 0))

+        {

+            ++remote_cli_data[device].stats.correlation_errors;

+            continue;

+        }

+

+        remote_cli_data[device].input_str = (char *)bcmolt_buf_snap_get(&buf);

+        remote_cli_data[device].input_str[bcmolt_buf_get_remaining_size(&buf)] = '\0';

+        remote_cli_data[device].current_corr_tag = corr_tag;

+        remote_cli_data[device].output_pending = BCMOS_TRUE;

+        rc = bcmos_msg_send_to_module(

+            bcmos_module_id_for_device(BCMOS_MODULE_ID_REMOTE_CLI_DEV0, device),

+            &output_msg,

+            BCMOS_MSG_SEND_AUTO_FREE);

+        if (rc != BCM_ERR_OK)

+        {

+            ++remote_cli_data[device].stats.message_errors;

+        }

+    }

+

+    bcmos_free(bcmcli_session_user_priv(remote_cli_data[device].session));

+    bcmcli_session_close(remote_cli_data[device].session);

+    shutdown(remote_cli_data[device].client_socket, SHUT_RDWR);

+    remote_cli_data[device].socket_task.destroyed = BCMOS_TRUE;

+    return 0;

+}

+

+static bcmos_errno remote_cli_start(bcmolt_devid device, uint32_t remote_cli_port)

+{

+    bcmos_errno rc;

+    bcmos_task_parm output_task_params =

+    {

+        .name = "remote_cli_indication",

+        .priority = TASK_PRIORITY_TRANSPORT_REMOTE_CLI

+    };

+

+    bcmos_task_parm socket_task_params =

+    {

+        .name = "remote_cli_main",

+        .handler = remote_cli_socket_task,

+        .priority = TASK_PRIORITY_TRANSPORT_REMOTE_CLI,

+        .data = (long)device

+    };

+

+    bcmos_module_parm module_params =

+    {

+        .qparm = { .name = "remote_cli", .size = REMOTE_CLI_MESSAGE_QUEUE_DEPTH }

+    };

+

+    remote_cli_data[device].port = remote_cli_port;

+    remote_cli_data[device].current_corr_tag = -1;

+    remote_cli_data[device].is_running = BCMOS_TRUE;

+

+    /* Create thread listening for incoming APIs */

+    rc = bcmos_task_create(&remote_cli_data[device].socket_task, &socket_task_params);

+    BUG_ON(BCM_ERR_OK != rc);

+    rc = bcmos_task_create(&remote_cli_data[device].output_task, &output_task_params);

+    BUG_ON(BCM_ERR_OK != rc);

+    bcmos_mutex_create(&remote_cli_data[device].output_lock, 0, "remote_cli");

+

+    rc = bcmos_module_create(

+        bcmos_module_id_for_device(BCMOS_MODULE_ID_REMOTE_CLI_DEV0, device),

+        &remote_cli_data[device].output_task,

+        &module_params);

+    BUG_ON(BCM_ERR_OK != rc);

+

+#ifdef ENABLE_LOG

+    BCM_LOG(

+        INFO,

+        remote_cli_data[device].log_id,

+        "BCM68620 remote cli for device %d is listening on port %u\n",

+        (int)device,

+        remote_cli_data[device].port);

+#endif

+

+    return BCM_ERR_OK;

+}

+

+/* Auto / proxy message handler */

+void bcmolt_remote_cli_auto_rx_cb(bcmolt_devid device, bcmolt_msg *msg)

+{

+    bcmos_errno err;

+    bcmolt_msg *ind_clone = NULL;

+

+    if (device >= BCMTR_MAX_OLTS)

+    {

+        return;

+    }

+

+    if (remote_cli_data[device].is_running)

+    {

+        err = bcmolt_msg_clone(&ind_clone, msg);

+        if (err != BCM_ERR_OK)

+        {

+#ifdef ENABLE_LOG

+            BCM_LOG(ERROR, remote_cli_data[device].log_id, "Indication clone failed: %s\n", bcmos_strerror(err));

+#endif

+            return;

+        }

+

+        ind_clone->os_msg.handler = remote_cli_indication_cb;

+        ind_clone->os_msg.data = ind_clone;

+        err = bcmos_msg_send_to_module(

+            bcmos_module_id_for_device(BCMOS_MODULE_ID_REMOTE_CLI_DEV0, device),

+            &ind_clone->os_msg,

+            0);

+        if (err != BCM_ERR_OK)

+        {

+            ++remote_cli_data[device].stats.message_errors;

+        }

+    }

+}

+

+bcmos_errno bcmolt_remote_cli_init(bcmcli_entry *root, bcmolt_devid device, uint32_t remote_cli_port)

+{

+    bcmcli_entry *dir;

+    if (device >= BCMTR_MAX_OLTS)

+    {

+        return BCM_ERR_PARM;

+    }

+

+    if (remote_cli_data[device].is_running)

+    {

+        return BCM_ERR_ALREADY;

+    }

+

+    BCM_MEMZERO_STRUCT(&remote_cli_data[device]);

+

+#ifdef ENABLE_LOG

+    {

+    char log_id[32];

+    snprintf(log_id, sizeof(log_id) - 1, "remote_cli_%d", (int)device);

+    remote_cli_data[device].log_id =

+        bcm_dev_log_id_register(log_id, DEV_LOG_LEVEL_INFO, DEV_LOG_ID_TYPE_BOTH);

+    }

+#else

+    remote_cli_data[device].log_id = DEV_LOG_INVALID_ID;

+#endif

+

+    dir = bcmcli_dir_add(root, "remote_cli", "Remote CLI", BCMCLI_ACCESS_GUEST, NULL);

+    if (!dir)

+    {

+#ifdef ENABLE_LOG

+        BCM_LOG(ERROR, remote_cli_data[device].log_id, "Can't create remote CLI directory\n");

+#endif

+        BUG();

+    }

+

+    BCMCLI_MAKE_CMD(dir, "stat", "Remote CLI statistics", remote_cli_stats_cmd,

+        BCMCLI_MAKE_PARM_RANGE(

+            "device",

+            "Device index",

+            BCMCLI_PARM_NUMBER,

+            BCMCLI_PARM_FLAG_OPTIONAL,

+            0,

+            BCMTR_MAX_OLTS - 1));

+

+    return remote_cli_start(device, remote_cli_port);

+}

+

+void bcmolt_remote_cli_stop(void)

+{

+    int i;

+    bcmos_bool was_running[BCMTR_MAX_OLTS] = {};

+

+    for (i = 0; i < BCMTR_MAX_OLTS; i++)

+    {

+        was_running[i] = remote_cli_data[i].is_running;

+        if (was_running[i])

+        {

+            shutdown(remote_cli_data[i].client_socket, SHUT_RDWR);

+            remote_cli_data[i].is_running = BCMOS_FALSE;

+        }

+    }

+

+    for (i = 0; i < BCMTR_MAX_OLTS; i++)

+    {

+        if (!was_running[i])

+        {

+            continue;

+        }

+        while (!remote_cli_data[i].socket_task.destroyed)

+        {

+            bcmos_usleep(10000);

+        }

+        bcmos_task_destroy(&remote_cli_data[i].socket_task);

+        bcmos_module_destroy(bcmos_module_id_for_device(BCMOS_MODULE_ID_REMOTE_CLI_DEV0, (bcmolt_devid)i));

+        bcmos_task_destroy(&remote_cli_data[i].output_task);

+        bcmos_mutex_destroy(&remote_cli_data[i].output_lock);

+    }

+}

+

diff --git a/bcm68620_release/release/host_reference/remote_cli/bcmolt_remote_cli.h b/bcm68620_release/release/host_reference/remote_cli/bcmolt_remote_cli.h
new file mode 100644
index 0000000..e20a64b
--- /dev/null
+++ b/bcm68620_release/release/host_reference/remote_cli/bcmolt_remote_cli.h
@@ -0,0 +1,44 @@
+/*

+<:copyright-BRCM:2016:DUAL/GPL:standard

+

+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom

+   All Rights Reserved

+

+Unless you and Broadcom execute a separate written software license

+agreement governing use of this software, this software is licensed

+to you under the terms of the GNU General Public License version 2

+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,

+with the following added to such license:

+

+   As a special exception, the copyright holders of this software give

+   you permission to link this software with independent modules, and

+   to copy and distribute the resulting executable under terms of your

+   choice, provided that you also meet, for each linked independent

+   module, the terms and conditions of the license of that module.

+   An independent module is a module which is not derived from this

+   software.  The special exception does not apply to any modifications

+   of the software.

+

+Not withstanding the above, under no circumstances may you combine

+this software in any way with any other Broadcom software provided

+under a license other than the GPL, without Broadcom's express prior

+written consent.

+

+:>

+ */

+

+#ifndef _BCMOLT_REMOTE_CLI_H_

+#define _BCMOLT_REMOTE_CLI_H_

+

+#include <bcmos_system.h>

+#include <bcmolt_msg.h>

+

+void bcmolt_remote_cli_auto_rx_cb(bcmolt_devid olt, bcmolt_msg *msg);

+

+bcmos_errno bcmolt_remote_cli_init(bcmcli_entry *root, bcmolt_devid device, uint32_t remote_cli_port);

+

+void bcmolt_remote_cli_stop(void);

+

+#endif

+

+

diff --git a/bcm68620_release/release/host_reference/time_measurement/Makefile b/bcm68620_release/release/host_reference/time_measurement/Makefile
new file mode 100755
index 0000000..b7b50da
--- /dev/null
+++ b/bcm68620_release/release/host_reference/time_measurement/Makefile
@@ -0,0 +1,11 @@
+# Common API
+#
+MOD_NAME = time_measurement
+MOD_TYPE = lib
+MOD_DEPS = dev_log
+
+ifeq ("$(ENABLE_LOG)", "y")
+    srcs = bcmolt_time_measurement.c
+endif
+
+USE_LINT = yes
diff --git a/bcm68620_release/release/host_reference/time_measurement/bcmolt_time_measurement.c b/bcm68620_release/release/host_reference/time_measurement/bcmolt_time_measurement.c
new file mode 100755
index 0000000..9665095
--- /dev/null
+++ b/bcm68620_release/release/host_reference/time_measurement/bcmolt_time_measurement.c
@@ -0,0 +1,117 @@
+/*
+<:copyright-BRCM:2014:proprietary:standard
+ 
+   Copyright (c) 2014 Broadcom Corporation
+   All Rights Reserved
+ 
+This program is the proprietary software of Broadcom Corporation and/or its
+licensors, and may only be used, duplicated, modified or distributed pursuant
+to the terms and conditions of a separate, written license agreement executed
+between you and Broadcom (an "Authorized License").  Except as set forth in
+an Authorized License, Broadcom grants no license (express or implied), right
+to use, or waiver of any kind with respect to the Software, and Broadcom
+expressly reserves all rights in and to the Software and all intellectual
+property rights therein.  IF YOU HAVE NO AUTHORIZED LICENSE, THEN YOU HAVE
+NO RIGHT TO USE THIS SOFTWARE IN ANY WAY, AND SHOULD IMMEDIATELY NOTIFY
+BROADCOM AND DISCONTINUE ALL USE OF THE SOFTWARE.
+ 
+Except as expressly set forth in the Authorized License,
+ 
+1. This program, including its structure, sequence and organization,
+    constitutes the valuable trade secrets of Broadcom, and you shall use
+    all reasonable efforts to protect the confidentiality thereof, and to
+    use this information only in connection with your use of Broadcom
+    integrated circuit products.
+ 
+2. TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
+    AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES, REPRESENTATIONS OR
+    WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH
+    RESPECT TO THE SOFTWARE.  BROADCOM SPECIFICALLY DISCLAIMS ANY AND
+    ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY, NONINFRINGEMENT,
+    FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES, ACCURACY OR
+    COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR CORRESPONDENCE
+    TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING OUT OF USE OR
+    PERFORMANCE OF THE SOFTWARE.
+ 
+3. TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM OR
+    ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL, INCIDENTAL, SPECIAL,
+    INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER ARISING OUT OF OR IN ANY
+    WAY RELATING TO YOUR USE OF OR INABILITY TO USE THE SOFTWARE EVEN
+    IF BROADCOM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES;
+    OR (ii) ANY AMOUNT IN EXCESS OF THE AMOUNT ACTUALLY PAID FOR THE
+    SOFTWARE ITSELF OR U.S. $1, WHICHEVER IS GREATER. THESE LIMITATIONS
+    SHALL APPLY NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY
+    LIMITED REMEDY.
+:>
+*/
+
+#include <bcmos_system.h>
+#include "bcmolt_time_measurement.h"
+
+typedef struct
+{
+    dev_log_id log_id;
+    uint32_t num_cycles_for_average;
+    F_bcmolt_time_measurement_ticks_to_ns ticks_to_ns;
+    F_bcmolt_time_measurement_avg_done avg_done;
+    uint32_t cycle_num;
+} bcmolt_time_measurement_context;
+
+static bcmolt_time_measurement_context time_measurement_context = { DEV_LOG_INVALID_ID, 0, NULL, NULL, 0 };
+
+void bcmolt_time_measurement_init(
+    dev_log_id log_id,
+    uint32_t num_cycles_for_average,
+    F_bcmolt_time_measurement_ticks_to_ns ticks_to_ns,
+    F_bcmolt_time_measurement_avg_done avg_done)
+{
+    time_measurement_context = (bcmolt_time_measurement_context)
+        { log_id, num_cycles_for_average, ticks_to_ns, avg_done, 0 };
+}
+
+void bcmolt_time_measurement_sample_end(uint64_t *total_ticks, uint32_t *num_of_samples, const char *measurement_name)
+{
+    /* Don't do anything if we haven't run enough cycles to produce an average. */
+    if (time_measurement_context.cycle_num < (time_measurement_context.num_cycles_for_average - 1))
+    {
+        return;
+    }
+
+    if (*num_of_samples != 0 && time_measurement_context.ticks_to_ns != NULL)
+    {
+        /* Convert the sample time from ticks to ns. */
+        uint64_t duration_average_ns = time_measurement_context.ticks_to_ns(*total_ticks / *num_of_samples);
+
+        /* The ":" is used as delimiter when importing to excel. */
+        BCM_LOG(
+            DEBUG,
+            time_measurement_context.log_id,
+            ":%s: %llu.%03llu us (%u hits)\n",
+            measurement_name,
+            (long long unsigned int)(duration_average_ns / 1000),
+            (long long unsigned int)(duration_average_ns % 1000),
+            *num_of_samples);
+    }
+
+    *total_ticks = 0;
+    *num_of_samples = 0;
+}
+
+void bcmolt_time_measurement_cycle_end(void)
+{
+    if (time_measurement_context.cycle_num == (time_measurement_context.num_cycles_for_average - 1))
+    {
+        if (time_measurement_context.avg_done != NULL)
+        {
+            time_measurement_context.avg_done();
+        }
+
+        /* Print a delimiting line. */
+        BCM_LOG(DEBUG, time_measurement_context.log_id, "\n");
+        time_measurement_context.cycle_num = 0;
+    }
+    else
+    {
+        ++time_measurement_context.cycle_num;
+    }
+}
diff --git a/bcm68620_release/release/host_reference/time_measurement/bcmolt_time_measurement.h b/bcm68620_release/release/host_reference/time_measurement/bcmolt_time_measurement.h
new file mode 100755
index 0000000..bb41b84
--- /dev/null
+++ b/bcm68620_release/release/host_reference/time_measurement/bcmolt_time_measurement.h
@@ -0,0 +1,143 @@
+/*
+<:copyright-BRCM:2014:proprietary:standard
+ 
+   Copyright (c) 2014 Broadcom Corporation
+   All Rights Reserved
+ 
+This program is the proprietary software of Broadcom Corporation and/or its
+licensors, and may only be used, duplicated, modified or distributed pursuant
+to the terms and conditions of a separate, written license agreement executed
+between you and Broadcom (an "Authorized License").  Except as set forth in
+an Authorized License, Broadcom grants no license (express or implied), right
+to use, or waiver of any kind with respect to the Software, and Broadcom
+expressly reserves all rights in and to the Software and all intellectual
+property rights therein.  IF YOU HAVE NO AUTHORIZED LICENSE, THEN YOU HAVE
+NO RIGHT TO USE THIS SOFTWARE IN ANY WAY, AND SHOULD IMMEDIATELY NOTIFY
+BROADCOM AND DISCONTINUE ALL USE OF THE SOFTWARE.
+ 
+Except as expressly set forth in the Authorized License,
+ 
+1. This program, including its structure, sequence and organization,
+    constitutes the valuable trade secrets of Broadcom, and you shall use
+    all reasonable efforts to protect the confidentiality thereof, and to
+    use this information only in connection with your use of Broadcom
+    integrated circuit products.
+ 
+2. TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
+    AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES, REPRESENTATIONS OR
+    WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH
+    RESPECT TO THE SOFTWARE.  BROADCOM SPECIFICALLY DISCLAIMS ANY AND
+    ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY, NONINFRINGEMENT,
+    FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES, ACCURACY OR
+    COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR CORRESPONDENCE
+    TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING OUT OF USE OR
+    PERFORMANCE OF THE SOFTWARE.
+ 
+3. TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM OR
+    ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL, INCIDENTAL, SPECIAL,
+    INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER ARISING OUT OF OR IN ANY
+    WAY RELATING TO YOUR USE OF OR INABILITY TO USE THE SOFTWARE EVEN
+    IF BROADCOM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES;
+    OR (ii) ANY AMOUNT IN EXCESS OF THE AMOUNT ACTUALLY PAID FOR THE
+    SOFTWARE ITSELF OR U.S. $1, WHICHEVER IS GREATER. THESE LIMITATIONS
+    SHALL APPLY NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY
+    LIMITED REMEDY.
+:>
+*/
+#ifndef _BCMOLT_TIME_MEASUREMENT_H_
+#define _BCMOLT_TIME_MEASUREMENT_H_
+
+#include <bcmos_common.h>
+#include <bcm_dev_log.h>
+
+/* How to use the time measurement library:
+ * 
+ * Before including bcmolt_time_measurement.h, you must define BCMOLT_TIME_MEASUREMENT_TIMESTAMP.  This macro must be
+ * defined in such a way that this is legal: "uint32_t timestamp_in_ticks = BCMOLT_TIME_MEASUREMENT_TIMESTAMP()".  We
+ * use a macro instead of a function to optimize for time (we want to avoid the overhead of a function call).
+ *
+ * You can have as many named measurement categories as desired.  For each category, you need to call either:
+ * - BCMOLT_TIME_MEASUREMENT_SAMPLE_DECL_STATIC() - if the measurements are all taken in the same file
+ * or:
+ * - BCMOLT_TIME_MEASUREMENT_SAMPLE_DECL() + BCMOLT_TIME_MEASUREMENT_SAMPLE_DECL_EXTERN()
+ *
+ * At init time, you must call bcmolt_time_measurement_init().
+ *
+ * For the actual measurements, you must surround the code you're trying to measure with 
+ * BCMOLT_TIME_MEASUREMENTS_SAMPLE_BEFORE() and BCMOLT_TIME_MEASUREMENTS_SAMPLE_AFTER().  At the end of a full
+ * measurement cycle, you must call BCMOLT_TIME_MEASUREMENTS_SAMPLE_END() for each named measurement category, then
+ * finally call BCMOLT_TIME_MEASUREMENTS_CYCLE_END().
+ */
+
+typedef uint64_t (*F_bcmolt_time_measurement_ticks_to_ns)(uint64_t ticks);
+typedef void (*F_bcmolt_time_measurement_avg_done)(void);
+
+/** Called for each measurement category at compile time (see how-to at top of file). */
+#define BCMOLT_TIME_MEASUREMENT_SAMPLE_DECL_STATIC(measurement_name) \
+    static uint32_t measurement_name ## _start_tick; \
+    static uint64_t measurement_name ## _total_ticks; \
+    static uint32_t measurement_name ## _num_of_samples;
+
+/** Called for each measurement category at compile time (see how-to at top of file). */
+#define BCMOLT_TIME_MEASUREMENT_SAMPLE_DECL(measurement_name) \
+    uint32_t measurement_name ## _start_tick; \
+    uint64_t measurement_name ## _total_ticks; \
+    uint32_t measurement_name ## _num_of_samples;
+
+/** Called for each measurement category at compile time (see how-to at top of file). */
+#define BCMOLT_TIME_MEASUREMENT_SAMPLE_DECL_EXTERN(measurement_name) \
+    extern uint32_t measurement_name ## _start_tick; \
+    extern uint64_t measurement_name ## _total_ticks; \
+    extern uint32_t measurement_name ## _num_of_samples;
+
+/** Called before each block of code that needs to be timed (see how-to at top of file). */
+#define BCMOLT_TIME_MEASUREMENTS_SAMPLE_BEFORE(measurement_name) \
+    do \
+    { \
+        measurement_name ## _start_tick = BCMOLT_TIME_MEASUREMENT_TIMESTAMP(); \
+    } \
+    while (0)
+
+/** Called after each block of code that needs to be timed (see how-to at top of file). */
+#define BCMOLT_TIME_MEASUREMENTS_SAMPLE_AFTER(measurement_name) \
+    do \
+    { \
+        /* Even if timestamp overflows we are still ok - unsigned arithmetic will still be valid. */ \
+        measurement_name ## _total_ticks += BCMOLT_TIME_MEASUREMENT_TIMESTAMP() - measurement_name ## _start_tick; \
+        ++measurement_name ## _num_of_samples; \
+    } \
+    while (0)
+
+/** Called for each measurement category at the end of a cycle (see how-to at top of file). */
+#define BCMOLT_TIME_MEASUREMENTS_SAMPLE_END(measurement_name) \
+    do \
+    { \
+        bcmolt_time_measurement_sample_end( \
+            &measurement_name ## _total_ticks, \
+            &measurement_name ## _num_of_samples, \
+            # measurement_name); \
+    } \
+    while (0)
+
+/** Called when the entire measurement cycle is complete (see how-to at top of file). */
+#define BCMOLT_TIME_MEASUREMENTS_CYCLE_END() bcmolt_time_measurement_cycle_end()
+
+/** Must be called at init time to initialize the time measurement library.
+ * \param log_id                 Log ID to use for displaying data (will use 'DEBUG' log level).
+ * \param num_cycles_for_average Number of measurement cycles to run before calculating and logging averages.
+ * \param ticks_to_ns            Function that translates timestamp resolution (ticks) into nanoseconds.
+ * \param avg_done               Function to call after averages have been computed (e.g. to log a custom header).
+ */
+void bcmolt_time_measurement_init(
+    dev_log_id log_id,
+    uint32_t num_cycles_for_average,
+    F_bcmolt_time_measurement_ticks_to_ns ticks_to_ns,
+    F_bcmolt_time_measurement_avg_done avg_done);
+
+/** Do not call this directly - call BCMOLT_TIME_MEASUREMENTS_SAMPLE_END() instead. */
+void bcmolt_time_measurement_sample_end(uint64_t *total_ticks, uint32_t *num_of_samples, const char *measurement_name);
+
+/** Do not call this directly - call BCMOLT_TIME_MEASUREMENTS_CYCLE_END() instead. */
+void bcmolt_time_measurement_cycle_end(void);
+
+#endif /* _BCMOLT_TIME_MEASUREMENT_H_ */
diff --git a/bcm68620_release/release/host_reference/user_appl/Makefile b/bcm68620_release/release/host_reference/user_appl/Makefile
new file mode 100644
index 0000000..37df795
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/Makefile
@@ -0,0 +1,28 @@
+ifeq ("$(ENABLE_CLI)", "y")
+	MOD_NAME = bcm_user_appl
+	MOD_TYPE = app
+	MOD_DEPS = host_api api_dev_log bcm_board bcm_user_appl_ps bcm_user_appl_eon bcm_user_appl_omon \
+                bcm_user_appl_epon_oam bcm_user_appl_epon_oam_cli pcie pcie_mod \
+                bcm_user_appl_epon_hde bcm_api_proxy common_epon_oam common_gpon bcm_image_transfer bcm_sw_upgrade \
+                device_selector bcm_remote_cli bcm_user_appl_playback bcm_user_appl_dpoe_sec
+
+ifneq ("$(RELEASE_BUILD)", "y")
+    MOD_DEPS +=	bcm_user_appl_gpon_stress bcm_user_appl_gpon_ds_omci \
+                bcm_user_appl_gpon_sn_acquisition bcm_user_appl_gpon_statistics \
+                bcm_user_appl_gpon_mac_learning bcm_user_appl_gpon_rssi \
+		bcm_user_appl_omci_swdl bcm_user_appl_remote_logger bcm_user_appl_onu_tuning
+endif
+
+	MOD_INC_DIRS = $(TOP)/host/board/wrx $(TOP)/common/drivers/maple/pcie
+	srcs = bcmolt_user_appl.c bcmolt_user_appl_cli.c bcmolt_user_appl_ex_cli.c bcmolt_user_appl_gpon_utils.c
+
+	ifeq ("$(OS_KERNEL)", "linux")
+		MOD_DEPS += dev_log_linux
+	endif
+	ifeq ($(ENABLE_KT2), y)
+		MOD_DEFS += -DENABLE_KT2
+		#EXTRA_INCLUDES += -I$(TOP_DIR)/common/cli
+	endif
+
+	MOD_DEPS += transport
+endif
diff --git a/bcm68620_release/release/host_reference/user_appl/bcmolt_user_appl.c b/bcm68620_release/release/host_reference/user_appl/bcmolt_user_appl.c
new file mode 100644
index 0000000..279c314
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/bcmolt_user_appl.c
@@ -0,0 +1,520 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#include <bcmolt_host_api.h>
+#include <bcmolt_board.h>
+#include <bcmolt_board_cli.h>
+#include <bcmolt_user_appl_cli.h>
+#include <bcmolt_user_appl_ex_cli.h>
+#include <bcmolt_user_appl_epon_oam.h>
+#if defined(LINUX_KERNEL_SPACE)
+#include <bcmolt_dev_log_linux.h>
+#endif
+#include <bcmolt_dev_selector.h>
+#include <bcm_api_cli.h>
+#include <bcmolt_api_proxy.h>
+#include <bcmolt_remote_cli.h>
+#include <bcmolt_image_transfer.h>
+
+#ifdef SIMULATION_BUILD
+    static void using_inband_set(bcmos_bool using_inband){}
+    static bcmos_bool using_inband_get(void)
+    {
+        return BCMOS_FALSE;
+    }
+    extern uint32_t bcmtr_host_ip;
+    extern uint16_t bcmtr_host_udp_port;
+    extern uint32_t bcmtr_olt_ip[BCMTR_MAX_OLTS];
+    extern uint16_t bcmtr_olt_udp_port[BCMTR_MAX_OLTS];
+#else
+    #include <bcmtr_plugin.h>
+#endif
+
+
+#define CLI_HOST_PROMPT_FORMAT "BCM.%u> "
+
+static bcmcli_session *current_session;
+
+//#if defined(SIMULATION_BUILD) && defined(LINUX_USER_SPACE)
+//extern uint32_t bcmtr_host_ip;
+//extern uint16_t bcmtr_host_udp_port;
+//extern uint32_t bcmtr_olt_ip[BCMTR_MAX_OLTS];
+//extern uint16_t bcmtr_olt_udp_port[BCMTR_MAX_OLTS];
+//#endif
+
+#ifdef ENABLE_LOG
+static int nologger=0;
+#endif
+
+static int _cmd_using_inband(bcmcli_session *sess, const bcmcli_cmd_parm parm[], uint16_t nParms)
+{
+    bcmcli_session_print(sess, "Maple management using %s\n", (using_inband_get())? "In-Band" : "PCIe");
+    return 0;
+}
+
+static int _cli_help(const char *cmd)
+{
+    const char *p;
+
+    while ((p = strchr(cmd, '/')))
+    {
+        cmd = p + 1;
+    }
+
+    fprintf(stderr,
+            "%s [-l <level>]"
+#if defined(SIMULATION_BUILD) && defined(LINUX_USER_SPACE)
+            " [-p udp_port_device1] [-p udp_port_device2] ...\n"
+            "OR\n"
+            " [-olt ip_device1:port_device1] [-olt ip_device2:port_device2] ...\n"
+            " [-listen ip:port]\n"
+#endif
+#ifdef ENABLE_LOG
+            " [-nl]\n"
+#endif
+            " [-ne]\n"
+            " [-dev]\n"
+            " [-if_mask mask]\n"
+            " [-proxy proxy_port_device1] [-proxy proxy_port_device2] ...\n"
+            " [-ud]\n"
+            " [-on_ready cmd]\n", cmd);
+    fprintf(stderr,
+            "\t\t level == guest | admin | debug\n"
+#ifdef ENABLE_LOG
+            "\t\t -nl - disable kernel logger integration\n"
+#endif
+            "\t\t -ne - disable line editing\n"
+            "\t\t -dev - device ID to auto-register for indications and run proxy on (default 0)\n"
+            "\t\t -if_mask - PON NI mask to apply to auto-registration of indications\n"
+            "\t\t -proxy - run the API proxy listening on this UDP port\n"
+            "\t\t -ud - use a unix domain connection to a user space device control"
+            "\t\t -on_ready - command for API proxy to execute after receiving device ready indication\n");
+    return -EINVAL;
+}
+
+/* quit command handler */
+static int _cmd_quit(bcmcli_session *sess, const bcmcli_cmd_parm parm[], uint16_t nParms)
+{
+    bcmcli_stop(sess);
+    bcmcli_session_print(sess, "Maple CLI terminated by 'Quit' command\n");
+    return 0;
+}
+
+#if defined(SIMULATION_BUILD) && defined(LINUX_USER_SPACE)
+/* parse ip:port */
+static bcmos_errno _parse_ip_port(const char *s, uint32_t *ip, uint16_t *port)
+{
+    int n;
+    uint32_t ip1, ip2, ip3, ip4, pp;
+
+    n = sscanf(s, "%u.%u.%u.%u:%u", &ip1, &ip2, &ip3, &ip4, &pp);
+    if (n != 5 || ip1 > 0xff || ip2 > 0xff || ip3 > 0xff || ip4 > 0xff || pp > 0xffff)
+    {
+        fprintf(stderr, "Can't parse %s. Must be ip_address:port\n", s);
+        return BCM_ERR_PARM;
+    }
+    *ip = (ip1 << 24) | (ip2 << 16) | (ip3 << 8) | ip4;
+    *port = pp;
+    return BCM_ERR_OK;
+}
+#endif
+
+/* Try to learn system mode */
+static bcmolt_system_mode _get_system_mode(bcmolt_devid dev)
+{
+    bcmolt_device_key key = {};
+    bcmolt_device_cfg dev_cfg;
+    bcmos_errno rc;
+
+    BCMOLT_CFG_INIT(&dev_cfg, device, key);
+    BCMOLT_CFG_PROP_GET(&dev_cfg, device, system_mode);
+    rc = bcmolt_cfg_get(dev, &dev_cfg.hdr);
+    if (rc != BCM_ERR_OK)
+    {
+        bcmos_printf("Device %u: failed to read system mode (%s). Waiting for configuration\n",
+            (unsigned)dev, bcmos_strerror(rc));
+        return BCMOLT_SYSTEM_MODE__NUM_OF;
+    }
+    bcmos_printf("Device %u: System mode: %s\n",
+        (unsigned)dev, bcmolt_system_mode_name(dev_cfg.data.system_mode));
+    return dev_cfg.data.system_mode;
+}
+
+#ifdef ENABLE_LOG
+static int dev_log_time_to_str_cb(uint32_t time_stamp, char *time_str, int time_str_size)
+{
+    return snprintf(time_str, time_str_size, "%u", time_stamp / 1000); /* convert from usec to msec. */
+}
+
+static bcmos_errno bcm_init_logger(void)
+{
+#define DEV_LOG_SIZE1 1<<11
+#define DEV_LOG_SIZE2 1<<13
+#define DEV_LOG_QUEUE_SIZE 1000
+
+    static uint8_t logger_buf1[DEV_LOG_SIZE1];
+    static uint8_t logger_buf2[DEV_LOG_SIZE2];
+    bcmos_errno err;
+    void *addresses[DEV_LOG_MAX_FILES] = {logger_buf1, logger_buf2};
+    uint32_t sizes[DEV_LOG_MAX_FILES] = {sizeof(logger_buf1), sizeof(logger_buf2)};
+    uint32_t flags[DEV_LOG_MAX_FILES] = {BCM_DEV_LOG_FILE_FLAG_STOP_WHEN_FULL, BCM_DEV_LOG_FILE_FLAG_WRAP_AROUND};
+
+    err = bcm_dev_log_init_default_logger(addresses, sizes, flags, BCM_SIZEOFARRAY(addresses), 0x4000, TASK_PRIORITY_DEV_LOG, DEV_LOG_QUEUE_SIZE);
+    BCMOS_TRACE_CHECK_RETURN(err, err, "bcm_dev_log_initialize_dev_logger_default()\n");
+
+    bcm_dev_log_level_set_style(DEV_LOG_LEVEL_FATAL, BCM_DEV_LOG_STYLE_BOLD);
+    bcm_dev_log_level_set_style(DEV_LOG_LEVEL_ERROR, BCM_DEV_LOG_STYLE_BOLD);
+
+    bcm_dev_log_set_time_to_str_cb(dev_log_time_to_str_cb);
+
+#if defined(LINUX_KERNEL_SPACE)
+    if (!nologger)
+    {
+        err = bcm_dev_log_linux_init();
+        BCMOS_TRACE_CHECK_RETURN(err, err, "bcm_dev_log_linux_init()\n");
+    }
+#endif
+
+    BCM_LOG(INFO, def_log_id, "Hello Logger\n");
+
+    return BCM_ERR_OK;
+}
+#endif
+
+static void handle_system_mode_change(bcmolt_devid dev)
+{
+    bcmcli_entry *cur_dir = bcmcli_dir_get(current_session);
+    char old_dir_name[32] = "";
+    bcmolt_system_mode system_mode;
+
+    bcmolt_system_mode_get(dev, &system_mode);
+    bcm_common_gpon_init(system_mode);
+
+    if (dev == current_device)
+    {
+        if (cur_dir)
+            strncpy(old_dir_name, bcmcli_token_name(cur_dir), sizeof(old_dir_name) - 1);
+
+        api_cli_set_commands(current_session);
+
+        /* Restore current CLI directory */
+        cur_dir = bcmcli_dir_find(NULL, old_dir_name);
+        if (cur_dir)
+            bcmcli_dir_set(current_session, cur_dir);
+    }
+
+    bcmolt_user_appl_cli_handle_system_mode_change(dev);
+}
+
+static void cli_get_prompt(bcmcli_session *session, char *buf, uint32_t max_len)
+{
+    snprintf(buf, max_len, CLI_HOST_PROMPT_FORMAT, current_device);
+}
+
+int main(int argc, char *argv[])
+{
+    bcmcli_session_parm mon_session_parm;
+#ifndef SIMULATION_BUILD
+    uint32_t fpga_version;
+#endif
+    int noedit = 0;
+    int rc;
+    int i;
+    bcmolt_host_init_params params =
+    {
+#ifdef ENABLE_LOG
+        .logger_init_cb = bcm_init_logger,
+#endif
+        .run_dev_ctrl = BCMOS_FALSE
+    };
+    bcmolt_devid device = 0;
+    bcmos_bool specific_device = BCMOS_FALSE;
+    bcmos_bool run_proxy = BCMOS_FALSE;
+    bcmos_bool run_remote_cli = BCMOS_FALSE;
+    uint32_t proxy_port[BCMTR_MAX_OLTS] = {};
+    uint32_t remote_cli_port = 0;
+    int cur_proxy_dev = 0;
+    char *on_ready_cmd = NULL;
+    struct bcmolt_rx_cfg rx_cfg =
+    {
+        .obj_type = BCMOLT_OBJECT_ANY,
+        .flags = BCMOLT_AUTO_FLAGS_NONE,
+    };
+#if defined(SIMULATION_BUILD) && defined(LINUX_USER_SPACE)
+    int cur_olt = 0;
+#endif
+
+    (void)noedit; /* prevent warning */
+
+    memset(&mon_session_parm, 0, sizeof(mon_session_parm));
+    mon_session_parm.get_prompt = cli_get_prompt;
+    mon_session_parm.access_right = BCMCLI_ACCESS_ADMIN;
+
+    for (i = 1; i < argc; i++)
+    {
+        if (!strcmp(argv[i], "-l"))
+        {
+            ++i;
+            if (!strcmp(argv[i], "admin"))
+                mon_session_parm.access_right = BCMCLI_ACCESS_ADMIN;
+            else if (!strcmp(argv[i], "guest"))
+                mon_session_parm.access_right = BCMCLI_ACCESS_GUEST;
+            else if (!strcmp(argv[i], "debug"))
+                mon_session_parm.access_right = BCMCLI_ACCESS_DEBUG;
+            else
+                return _cli_help(argv[0]);
+        }
+        else if (!strcmp(argv[i], "-ne"))
+        {
+            noedit = 1;
+        }
+#ifdef ENABLE_LOG
+        else if (!strcmp(argv[i], "-nl"))
+        {
+            nologger = 1;
+        }
+#endif
+#if defined(SIMULATION_BUILD) && defined(LINUX_USER_SPACE)
+        else if (!strcmp(argv[i], "-p"))
+        {
+            if (cur_olt >= BCMTR_MAX_OLTS)
+            {
+                printf("Too many -p and/or -olt options\n");
+                return -1;
+            }
+            ++i;
+            bcmtr_olt_udp_port[cur_olt] = strtol(argv[i], NULL, 0);
+            ++cur_olt;
+        }
+        else if (!strcmp(argv[i], "-olt"))
+        {
+            if (cur_olt >= BCMTR_MAX_OLTS)
+            {
+                printf("Too many -p and/or -olt options\n");
+                return -1;
+            }
+            ++i;
+            if (_parse_ip_port(argv[i], &bcmtr_olt_ip[cur_olt], &bcmtr_olt_udp_port[cur_olt]) != BCM_ERR_OK)
+                return -1;
+            ++cur_olt;
+        }
+        else if (!strcmp(argv[i], "-listen"))
+        {
+            ++i;
+            if (_parse_ip_port(argv[i], &bcmtr_host_ip, &bcmtr_host_udp_port) != BCM_ERR_OK)
+                return -1;
+        }
+#endif
+        else if (!strcmp(argv[i], "-dev"))
+        {
+            ++i;
+            device = (bcmolt_devid)strtoul(argv[i], NULL, 0);
+            if (device >= BCMTR_MAX_OLTS)
+            {
+                printf("Invalid device ID\n");
+                return -1;
+            }
+            current_device = device;
+            specific_device = BCMOS_TRUE;
+        }
+        else if (!strcmp(argv[i], "-if_mask"))
+        {
+            ++i;
+            rx_cfg.pon_ni_mask = (uint32_t)strtoul(argv[i], NULL, 0);
+        }
+        else if (!strcmp(argv[i], "-proxy"))
+        {
+            if (cur_proxy_dev >= BCMTR_MAX_OLTS)
+            {
+                printf("Too many -proxy options\n");
+                return -1;
+            }
+            ++i;
+            run_proxy = BCMOS_TRUE;
+            proxy_port[cur_proxy_dev] = (uint32_t)strtoul(argv[i], NULL, 0);
+            if (proxy_port[cur_proxy_dev] > 0xffff)
+            {
+                printf("Invalid proxy port %u\n", (unsigned)proxy_port[cur_proxy_dev]);
+                return -1;
+            }
+            ++cur_proxy_dev;
+        }
+        else if (!strcmp(argv[i], "-remote"))
+        {
+            ++i;
+            run_remote_cli = BCMOS_TRUE;
+            remote_cli_port = (uint32_t)strtoul(argv[i], NULL, 0);
+        }
+        else if (!strcmp(argv[i], "-ud"))
+        {
+            using_inband_set(BCMOS_TRUE);
+        }
+        else if (!strcmp(argv[i], "-on_ready"))
+        {
+            ++i;
+            on_ready_cmd = argv[i];
+        }
+        else
+        {
+            return _cli_help(argv[0]);
+        }
+    }
+
+    rc = bcmolt_host_init(&params);
+    BUG_ON(rc);
+
+    bcmos_trace_level_set(BCMOS_TRACE_LEVEL_DEBUG);
+
+    if (noedit)
+    {
+        mon_session_parm.line_edit_mode = BCMCLI_LINE_EDIT_DISABLE;
+    }
+    if (bcmcli_session_open(&mon_session_parm, &current_session))
+    {
+        printf("Can't open CLI session\n");
+        return -EINVAL;
+    }
+
+    /* Try to learn system mode for all devices */
+    if (specific_device)
+    {
+        bcmolt_system_mode_set(current_device, _get_system_mode(current_device));
+    }
+    else
+    {
+        for (i = 0; i < BCMTR_MAX_OLTS; i++)
+            bcmolt_system_mode_set(i, _get_system_mode(i));
+    }
+
+    /* Init device selector */
+    rc = bcmolt_dev_sel_init(NULL);
+
+    /* Add Maple API commands */
+    rc = rc ? rc : api_cli_init(NULL, current_session);
+
+    /* (x)GPON init. Does nothing if system mode is not (x)GPON */
+    if (rc == BCM_ERR_OK)
+    {
+        bcmolt_system_mode system_mode = BCMOLT_SYSTEM_MODE__NUM_OF;
+        bcmolt_system_mode_get(current_device, &system_mode);
+        bcm_common_gpon_init(system_mode);
+    }
+
+    /* Add transport commands */
+    rc = rc ? rc : bcmtr_cli_init();
+
+    /* Add capture, log, debug commands */
+    rc = rc ? rc : bcmtr_cld_init(current_session);
+
+    /* Initialize embedded CLI module */
+    rc = rc ? rc : bcm_embedded_cli_init();
+
+    rc = rc ? rc : bcmos_cli_init(NULL);
+
+    rc = rc ? rc : bcmolt_user_appl_cli_init(NULL);
+
+    rc = rc ? rc : bcmolt_user_appl_ex_cli_init();
+
+
+#if defined(LINUX_KERNEL_SPACE)
+    rc = rc ? rc : bcm_board_init();
+    rc = rc ? rc : bcm_board_cli_init(NULL);
+#endif
+
+#ifdef ENABLE_LOG
+    /* logger CLI directory */
+    bcm_dev_log_cli_init(NULL);
+#endif
+
+    if (run_proxy)
+    {
+        /* If executing for specific device, run only 1 proxy instance.
+         * Otherwise, create as many instances as requested
+         */
+        if (specific_device)
+            rc = rc ? rc : bcmolt_api_proxy_init(NULL, device, proxy_port[0], on_ready_cmd);
+        else
+        {
+            for (i = 0; i < cur_proxy_dev; i++)
+            {
+                rc = rc ? rc : bcmolt_api_proxy_init(NULL, i, proxy_port[i], on_ready_cmd);
+            }
+        }
+    }
+
+    if (run_remote_cli)
+    {
+        rc = rc ? rc : bcmolt_remote_cli_init(NULL, device, remote_cli_port);
+    }
+
+    /* Add other commands, e.g., access to embedded CLI */
+    if (rc)
+        return rc;
+
+    rx_cfg.rx_cb = bcmolt_user_appl_indication_cb;
+    rc = bcmolt_auto_rx_cb_set(device, &rx_cfg);
+    BUG_ON(BCM_ERR_OK != rc);
+    rx_cfg.rx_cb = bcmolt_user_appl_proxy_rx_cb;
+    rc = bcmolt_proxy_rx_cb_set(device, &rx_cfg);
+    BUG_ON(BCM_ERR_OK != rc);
+
+    bcmolt_user_mftp_init();
+
+    sm_change_cb = handle_system_mode_change;
+
+    BCMCLI_MAKE_CMD_NOPARM(NULL, "quit", "Quit", _cmd_quit);
+    BCMCLI_MAKE_CMD_NOPARM(NULL, "using_inband", "Using In Band", _cmd_using_inband);
+
+#ifndef SIMULATION_BUILD
+    bcm_board_fpga_version_get(&fpga_version);
+    bcmcli_session_print(current_session, "FPGA version: %d\n", fpga_version);
+#endif
+
+    /* Process user input until EOF or quit command */
+    bcmcli_driver(current_session);
+
+#if defined(LINUX_KERNEL_SPACE)
+    bcm_board_uninit();
+#endif
+    bcmtr_exit();
+    bcmcli_session_close(current_session);
+    bcmcli_token_destroy(NULL);
+
+    if (run_proxy)
+    {
+        bcmolt_api_proxy_stop();
+    }
+
+    if (run_remote_cli)
+    {
+        bcmolt_remote_cli_stop();
+    }
+
+    return 0;
+}
diff --git a/bcm68620_release/release/host_reference/user_appl/bcmolt_user_appl_cli.c b/bcm68620_release/release/host_reference/user_appl/bcmolt_user_appl_cli.c
new file mode 100644
index 0000000..8c621da
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/bcmolt_user_appl_cli.c
@@ -0,0 +1,568 @@
+/*
+  <:copyright-BRCM:2016:DUAL/GPL:standard
+
+  Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+  All Rights Reserved
+
+  Unless you and Broadcom execute a separate written software license
+  agreement governing use of this software, this software is licensed
+  to you under the terms of the GNU General Public License version 2
+  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+  with the following added to such license:
+
+  As a special exception, the copyright holders of this software give
+  you permission to link this software with independent modules, and
+  to copy and distribute the resulting executable under terms of your
+  choice, provided that you also meet, for each linked independent
+  module, the terms and conditions of the license of that module.
+  An independent module is a module which is not derived from this
+  software.  The special exception does not apply to any modifications
+  of the software.
+
+  Not withstanding the above, under no circumstances may you combine
+  this software in any way with any other Broadcom software provided
+  under a license other than the GPL, without Broadcom's express prior
+  written consent.
+
+  :>
+*/
+
+#include <bcmolt_msg.h>
+#include <bcmolt_api.h>
+#include <bcmcli.h>
+#include <bcm_api_cli.h>
+#include <bcm_api_dev_log.h>
+#include <bcm_dev_log.h>
+#include <bcmolt_msg_pack.h>
+#include "bcmolt_user_appl_cli.h"
+#include "bcmolt_user_appl_gpon_utils.h"
+#include "bcmolt_user_appl_ps.h"
+#include "bcmolt_user_appl_ps_cli.h"
+#ifndef RELEASE_BUILD
+#include "bcmolt_user_appl_omci_swdl_cli.h"
+#include "bcmolt_user_appl_omci_swdl.h"
+#include "bcmolt_user_appl_gpon_mac_learning_cli.h"
+#include "bcmolt_user_appl_gpon_mac_learning.h"
+#include "bcmolt_user_appl_gpon_stress_cli.h"
+#include "bcmolt_user_appl_gpon_stress.h"
+#include "bcmolt_user_appl_gpon_sn_acquisition_cli.h"
+#include "bcmolt_user_appl_gpon_sn_acquisition.h"
+#include "bcmolt_user_appl_gpon_ds_omci_cli.h"
+#include "bcmolt_user_appl_gpon_ds_omci.h"
+#include "bcmolt_user_appl_gpon_statistics_cli.h"
+#include "bcmolt_user_appl_gpon_statistics.h"
+#include "bcmolt_user_appl_gpon_rssi_cli.h"
+#include "bcmolt_user_appl_gpon_rssi.h"
+#include "bcmolt_user_appl_remote_logger_cli.h"
+#include "bcmolt_user_appl_remote_logger.h"
+#include "bcmolt_user_appl_onu_tuning_cli.h"
+#include "bcmolt_user_appl_onu_tuning.h"
+#endif /* Not RELEASE_BUILD */
+#include "bcmolt_eon.h"
+#include "bcmolt_epon_hde.h"
+#ifndef SIMULATION_BUILD
+#include "omon.h"
+#include <bcmolt_dev_ctrl_ioctl.h>
+#include <bcmtr_pcie.h>
+#endif /* #endif SIMULATION_BUILD */
+#include "bcmolt_board.h"
+#include "bcmolt_api_proxy.h"
+#include "bcmolt_remote_cli.h"
+#include "bcmolt_user_appl_epon_oam_cli.h"
+#include "bcmolt_user_appl_epon_oam.h"
+#include "bcmolt_image_transfer_cli.h"
+#include "bcmolt_sw_upgrade_cli.h"
+#include "bcmolt_user_appl_playback.h"
+#include "bcmolt_user_appl_dpoe_sec.h"
+
+#ifdef ENABLE_LOG
+static uint32_t *bcmlcli_pci_dumpptr;
+static dev_log_id user_appl_log_id;
+static dev_log_id ind_log_id[BCMTR_MAX_INSTANCES];
+static bcmcli_entry *user_dir;
+static bcmos_bool sys_mode_set[BCMTR_MAX_OLTS] = {};
+
+static void user_appl_api_msg_dump(const char *title, bcmolt_msg *msg)
+{
+    uint8_t inst = bcmolt_msg_instance(msg);
+    inst = (inst > BCMTR_MAX_INSTANCES) ? 0 : inst;
+    bcmolt_msg_log(ind_log_id[inst], msg);
+}
+
+#ifndef RELEASE_BUILD
+static bcmos_errno bcmolt_user_appl_process_exception_ind(bcmolt_devid device_id, bcmolt_auto *ind)
+{
+    switch (ind->hdr.obj_type)
+    {
+    case BCMOLT_OBJ_ID_DEVICE:
+        switch (ind->hdr.subgroup)
+        {
+        case BCMOLT_DEVICE_AUTO_CFG_ID_SW_EXCEPTION:
+        case BCMOLT_DEVICE_AUTO_CFG_ID_SW_ERROR:
+            /* Stop all user application tasks. */
+            if (bcmolt_gpon_mac_learning_appl_is_running(device_id))
+                bcmolt_gpon_mac_learning_appl_stop(device_id);
+            if (bcmolt_gpon_stress_appl_is_running(device_id))
+                bcmolt_gpon_stress_appl_stop(device_id);
+            if (bcmolt_gpon_sn_acquisition_appl_is_running(device_id))
+                bcmolt_gpon_sn_acquisition_appl_stop(device_id);
+            if (bcmolt_user_appl_gpon_statistics_is_running(device_id))
+                bcmolt_user_appl_gpon_statistics_stop(device_id);
+            if (bcmolt_gpon_ds_omci_appl_is_running(device_id))
+                bcmolt_gpon_ds_omci_appl_stop(device_id);
+            if (bcmolt_gpon_rssi_appl_is_running(device_id))
+                bcmolt_gpon_rssi_appl_stop(device_id);
+        default:
+            break;
+        }
+        break;
+    default:
+        break;
+    }
+
+    return BCM_ERR_OK;
+}
+#endif
+
+void bcmolt_user_appl_indication_cb(bcmolt_devid device_id, bcmolt_msg *msg)
+{
+    uint8_t instance  = bcmolt_msg_instance(msg);
+    bcmolt_auto *ind = (bcmolt_auto *)msg;
+    bcmolt_ps_pon ps_pon = { device_id, instance };
+
+    user_appl_api_msg_dump("Indication", msg);
+    bcmolt_ps_process_ind(&ps_pon, ind);
+
+#ifndef RELEASE_BUILD
+    bcmolt_user_appl_process_exception_ind(device_id, ind);
+    /* Forward the indication to each user application.  These applications will ignore indications that aren't
+     * relevant and errors will be printed to dedicated log IDs per application. */
+    bcmolt_gpon_mac_learning_process_ind(device_id, ind);
+    bcmolt_gpon_stress_process_ind(device_id, ind);
+    bcmolt_gpon_sn_acquisition_process_ind(device_id, ind);
+    bcmolt_user_appl_gpon_statistics_process_ind(device_id, ind);
+    bcmolt_gpon_ds_omci_process_ind(device_id, ind);
+    bcmolt_gpon_rssi_process_ind(device_id, ind);
+    bcmolt_onu_tuning_process_ind(device_id, ind);
+#endif /* Not RELEASE_BUILD */
+
+#ifndef SIMULATION_BUILD
+    bcmolt_user_appl_omon_handle_ind(device_id, instance, ind);
+#endif
+
+    bcmolt_api_proxy_auto_rx_cb(device_id, msg);
+    bcmolt_remote_cli_auto_rx_cb(device_id, msg);
+
+    /* Free the indication since we're done processing it */
+    bcmolt_msg_free(msg);
+}
+
+void bcmolt_user_appl_proxy_rx_cb(bcmolt_devid device_id, bcmolt_msg *msg)
+{
+    bcmolt_proxy_rx *proxy_rx = (bcmolt_proxy_rx *)msg;
+
+#ifndef RELEASE_BUILD
+    bcmolt_omci_swdl_process_proxy_rx(device_id, proxy_rx);
+
+    /* Dump RX packet if OMCI SWDL is Not running*/
+    if (!bcmolt_omci_swdl_appl_is_running(device_id))
+    {
+        user_appl_api_msg_dump("Proxy Rx", msg);
+    }
+#else
+    user_appl_api_msg_dump("Proxy Rx", msg);
+#endif /* Not RELEASE_BUILD */
+
+    bcmolt_api_proxy_auto_rx_cb(device_id, msg);
+    bcmolt_remote_cli_auto_rx_cb(device_id, msg);
+    bcmolt_user_appl_eon_process_rx(device_id, proxy_rx);
+    bcmolt_epon_hde_process_rx(device_id, bcmolt_msg_instance(msg), proxy_rx);
+    bcmolt_user_appl_epon_oam_handle_rx(device_id, proxy_rx, NULL);
+    bcmolt_user_appl_dpoe_sec_process_proxy_rx(device_id, proxy_rx);
+    bcmolt_msg_free(msg);
+}
+
+/* example on how to read the embedded logger from the host */
+static bcmos_errno _apicli_read_embedded_logger(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    bcmolt_logger_cfg  cfg;
+    bcmolt_logger_key key = {.file_id = parm[0].value.unumber, .reserved = 0};
+    int rc;
+
+    bcm_dev_log_log(
+        user_appl_log_id, DEV_LOG_LEVEL_DEBUG, BCM_LOG_FLAG_NO_HEADER,
+        "%s", "--------------------------------------------------------------------------------------------------\n");
+    bcm_dev_log_log(
+        user_appl_log_id, DEV_LOG_LEVEL_DEBUG, BCM_LOG_FLAG_NO_HEADER,
+              "| device %u logger                                                                                 |\n", current_device);
+    bcm_dev_log_log(user_appl_log_id, DEV_LOG_LEVEL_DEBUG, BCM_LOG_FLAG_NO_HEADER,
+        "%s", "|-------------------------------------------------------------------------------------------------|\n");
+
+    while (1)
+    {
+        BCMOLT_CFG_INIT(&cfg, logger, key);
+        BCMOLT_CFG_PROP_GET(&cfg, logger, buffer);
+        rc = bcmolt_cfg_get(current_device, &cfg.hdr);
+        if (rc > 0)
+        {
+            bcmos_printf("get obj error %d\n", rc);
+        }
+        bcmos_printf("%s", cfg.data.buffer.buff);
+        if (cfg.data.buffer.msg_to_read == 0)
+        {
+            break;
+        }
+    }
+    return BCM_ERR_OK;
+}
+
+/* example on how to read all the embedded log entries from the host */
+static bcmos_errno _apicli_get_all_log_entries(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    bcmolt_log_entry_cfg  cfg;
+    bcmolt_log_entry_key key = {.log_id = 0, .reserved=0};
+    int rc;
+
+    char *_log_level[] =
+    {
+        "NO_LOG",
+        "FATAL",
+        "ERROR",
+        "WARNING",
+        "INFO" ,
+        "DEBUG"
+    };
+
+    char *_log_type[] =
+    {
+        "NONE",
+        "PRINT",
+        "SAVE",
+        "BOTH"
+    };
+
+    char *_log_style[] =
+    {
+        "NORMAL",
+        "BOLD",
+        "UNDERLINE",
+        "BLIK",
+        "REVERSE_VIDEO"
+    };
+
+    bcm_dev_log_log(
+        user_appl_log_id, DEV_LOG_LEVEL_DEBUG, BCM_LOG_FLAG_NO_HEADER,
+        "%s", "--------------------------------------------------------------------------------------------------\n");
+    bcm_dev_log_log(
+        user_appl_log_id, DEV_LOG_LEVEL_DEBUG, BCM_LOG_FLAG_NO_HEADER,
+        "%s", "| LOG ID |        LOG NAME       | LOG level print | LOG level save  | log type |    log style    |\n");
+    bcm_dev_log_log(user_appl_log_id, DEV_LOG_LEVEL_DEBUG, BCM_LOG_FLAG_NO_HEADER,
+        "%s", "|-------------------------------------------------------------------------------------------------|\n");
+
+    while (1)
+    {
+        BCMOLT_CFG_INIT(&cfg, log_entry, key);
+        BCMOLT_CFG_PROP_GET(&cfg, log_entry, all_properties);
+        rc = bcmolt_cfg_get(current_device, &cfg.hdr);
+        if (rc)
+        {
+            break;
+        }
+        bcm_dev_log_log(user_appl_log_id, DEV_LOG_LEVEL_DEBUG, BCM_LOG_FLAG_NO_HEADER | BCM_LOG_FLAG_CALLER_FMT,
+            "|%-8d|%-23s|%-17s|%-17s|%-10s|%-17s|\n",
+            key.log_id,
+            cfg.data.log_name.str,
+            _log_level[cfg.data.log_level_print],
+            _log_level[cfg.data.log_level_save],
+            _log_type[cfg.data.log_type],
+            _log_style[cfg.data.log_style]);
+        bcm_dev_log_log(user_appl_log_id, DEV_LOG_LEVEL_DEBUG, BCM_LOG_FLAG_NO_HEADER,
+            "%s", "|-------------------------------------------------------------------------------------------------|\n");
+        key.log_id++;
+
+    }
+    bcm_dev_log_log(user_appl_log_id, DEV_LOG_LEVEL_DEBUG, BCM_LOG_FLAG_NO_HEADER,
+        "%s", "|-------------------------------------------------------------------------------------------------|\n");
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno _apicli_indication_handler(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    struct bcmolt_rx_cfg rx_cfg =
+    {
+        .obj_type = BCMOLT_OBJECT_ANY,
+        .rx_cb = bcmolt_user_appl_indication_cb,
+        .flags = BCMOLT_AUTO_FLAGS_NONE,
+        .pon_ni_mask = parm[0].value.unumber
+    };
+    return bcmolt_auto_rx_cb_set(current_device, &rx_cfg);
+}
+
+static bcmos_errno _apicli_proxy_rx_handler(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    struct bcmolt_rx_cfg rx_cfg =
+    {
+        .obj_type = BCMOLT_OBJECT_ANY,
+        .rx_cb = bcmolt_user_appl_proxy_rx_cb,
+        .flags = BCMOLT_AUTO_FLAGS_NONE,
+        .pon_ni_mask = parm[0].value.unumber
+    };
+    return bcmolt_proxy_rx_cb_set(current_device, &rx_cfg);
+}
+#endif
+
+#ifndef SIMULATION_BUILD
+static bcmos_errno _apicli_pcistat(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    bcmos_errno rc;
+    uint8_t start;
+    bcm_pcied_stat *stat;
+
+    start = 0;
+    if (n_parms > 0)
+    {
+        if (!strncmp(parm[0].value.string, "yes", strlen("yes")))
+            start = 1;
+    }
+
+    rc = bcm_board_pci_debug(0, MAPLE_DEV_CTRL_IOCTL_OP_PCI_STAT, start, 0, bcmlcli_pci_dumpptr);
+    stat = (bcm_pcied_stat *)bcmlcli_pci_dumpptr;
+    BCMOS_TRACE_CHECK_RETURN(rc, rc, "bcm_board_pci_debug() failed\n");
+    bcmcli_session_print(session, "Received     : %d\n", stat->rx_counter);
+    bcmcli_session_print(session, "Send         : %d\n", stat->tx_counter);
+    bcmcli_session_print(session, "Rx Done Isr  : %d\n", stat->rx_done_isr_counter);
+    bcmcli_session_print(session, "Rx Err Isr   : %d\n", stat->rx_err_isr_counter);
+    bcmcli_session_print(session, "Tx Done Isr  : %d\n", stat->tx_done_isr_counter);
+    bcmcli_session_print(session, "Tx Err Isr   : %d\n", stat->tx_err_isr_counter);
+    bcmcli_session_print(session, "Rx empty     : %d\n", stat->rx_pcie_empty_counter);
+    bcmcli_session_print(session, "Tx full      : %d\n\n", stat->tx_pcie_full_counter);
+
+    return BCM_ERR_OK;
+}
+static bcmos_errno _apicli_pcidump(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    bcmos_errno rc;
+    uint32_t command;
+    int32_t start, howmany;
+
+    start = -1;
+    howmany = 1;
+
+    if (n_parms > 1)
+    {
+        start = parm[1].value.number;
+        howmany = 1;
+        if (n_parms > 2)
+            howmany = parm[2].value.number;
+    }
+    if (!strncmp(parm[0].value.string, "tx", strlen("tx")))
+    {
+        command = MAPLE_DEV_CTRL_IOCTL_OP_PCI_DUMP_TX;
+    }
+    else if (!strncmp(parm[0].value.string, "rx", strlen("rx")))
+    {
+        command = MAPLE_DEV_CTRL_IOCTL_OP_PCI_DUMP_RX;
+    }
+    else
+    {
+        bcmcli_session_print(session, "Error - wrong command: %s\n", parm[0].value.string);
+        return BCM_ERR_PARM;
+    }
+
+    rc = bcm_board_pci_debug(0, command, start, howmany, bcmlcli_pci_dumpptr);
+    BCMOS_TRACE_CHECK_RETURN(rc, rc, "bcm_board_pci_debug() failed\n");
+    bcmcli_session_print(session, "%s", (char *)bcmlcli_pci_dumpptr);
+
+    return BCM_ERR_OK;
+}
+#endif
+
+static void bcmolt_user_appl_cli_start_epon(void)
+{
+    bcmolt_user_appl_epon_oam_init();
+    bcmolt_user_appl_epon_oam_cli_init(user_dir);
+
+    bcmolt_user_appl_eon_init();
+    bcmolt_user_appl_eon_cli_init(user_dir);
+
+#ifndef SIMULATION_BUILD
+    bcmolt_epon_omon_appl_init();
+    bcmolt_user_appl_epon_omon_cli_init(user_dir);
+
+    bcmolt_epon_hde_appl_init();
+    bcmolt_epon_hde_appl_cli_init(user_dir);
+#endif
+
+    bcmolt_user_appl_dpoe_sec_init();
+    bcmolt_user_appl_dpoe_sec_cli_init(user_dir);
+}
+
+static void bcmolt_user_appl_cli_start_gpon(bcmolt_devid dev)
+{
+    bcmolt_user_appl_gpon_utils_init(user_dir);
+
+#ifndef RELEASE_BUILD
+    bcmolt_gpon_mac_learning_appl_init(dev);
+    bcmolt_user_appl_gpon_mac_learning_cli_init(user_dir);
+
+    bcmolt_gpon_stress_appl_init(dev);
+    bcmolt_user_appl_gpon_stress_cli_init(user_dir);
+
+    bcmolt_gpon_sn_acquisition_appl_init(dev);
+    bcmolt_user_appl_gpon_sn_acquisition_cli_init(user_dir);
+
+    bcmolt_user_appl_gpon_statistics_init(dev);
+    bcmolt_user_appl_gpon_statistics_cli_init(user_dir);
+
+    bcmolt_gpon_ds_omci_appl_init(dev);
+    bcmolt_user_appl_gpon_ds_omci_cli_init(user_dir);
+
+    bcmolt_omci_swdl_appl_init(dev);
+    bcmolt_user_appl_omci_swdl_cli_init(user_dir);
+
+    bcmolt_gpon_rssi_appl_init(dev);
+    bcmolt_user_appl_gpon_rssi_cli_init(user_dir);
+#endif /* Not RELEASE_BUILD */
+}
+
+static void bcmolt_user_appl_cli_start_xgpon(bcmolt_devid dev)
+{
+    bcmolt_user_appl_gpon_utils_init(user_dir);
+
+#ifndef RELEASE_BUILD
+
+    bcmolt_gpon_stress_appl_init(dev);
+    bcmolt_user_appl_gpon_stress_cli_init(user_dir);
+
+    bcmolt_gpon_sn_acquisition_appl_init(dev);
+    bcmolt_user_appl_gpon_sn_acquisition_cli_init(user_dir);
+
+    bcmolt_user_appl_gpon_statistics_init(dev);
+    bcmolt_user_appl_gpon_statistics_cli_init(user_dir);
+
+    bcmolt_gpon_ds_omci_appl_init(dev);
+    bcmolt_user_appl_gpon_ds_omci_cli_init(user_dir);
+
+    bcmolt_gpon_rssi_appl_init(dev);
+    bcmolt_user_appl_gpon_rssi_cli_init(user_dir);
+
+    bcmolt_onu_tuning_appl_init(dev);
+    bcmolt_user_appl_onu_tuning_cli_init(user_dir);
+#endif /* Not RELEASE_BUILD */
+}
+
+void bcmolt_user_appl_cli_handle_system_mode_change(bcmolt_devid dev)
+{
+    bcmolt_system_mode sys_mode;
+
+    if (sys_mode_set[dev] == BCMOS_TRUE)
+    {
+        return; /* only run once */
+    }
+
+    sys_mode_set[dev] = BCMOS_TRUE;
+    (void)bcmolt_system_mode_get(dev, &sys_mode);
+    switch (sys_mode)
+    {
+    case BCMOLT_SYSTEM_MODE_EPON__16_X:
+    case BCMOLT_SYSTEM_MODE_EPON__8_X:
+    case BCMOLT_SYSTEM_MODE_EPON__4_X:
+    case BCMOLT_SYSTEM_MODE_EPON__8_X_COEXISTENCE_TDMA:
+    case BCMOLT_SYSTEM_MODE_EPON__4_X_COEXISTENCE_TDMA:
+    case BCMOLT_SYSTEM_MODE_EPON__8_X_10_G:
+    case BCMOLT_SYSTEM_MODE_EPON__4_X_10_G:
+    case BCMOLT_SYSTEM_MODE_EPON__2_X_10_G:
+        bcmolt_user_appl_cli_start_epon();
+        break;
+    case BCMOLT_SYSTEM_MODE_GPON__16_X:
+    case BCMOLT_SYSTEM_MODE_GPON__8_X:
+    case BCMOLT_SYSTEM_MODE_GPON__4_X:
+        bcmolt_user_appl_cli_start_gpon(dev);
+        break;
+    case BCMOLT_SYSTEM_MODE_XGPON_1__8_X:
+    case BCMOLT_SYSTEM_MODE_XGPON_1__4_X:
+    case BCMOLT_SYSTEM_MODE_XGS__2_X_10_G:
+    case BCMOLT_SYSTEM_MODE_NGPON2__2_X_10_G:
+        bcmolt_user_appl_cli_start_xgpon(dev);
+        break;
+    case BCMOLT_SYSTEM_MODE__NUM_OF: /* unconfigured */
+        sys_mode_set[dev] = BCMOS_FALSE;
+        break;
+    default:
+        /* do nothing */
+        break;
+    }
+}
+
+bcmos_errno bcmolt_user_appl_cli_init(bcmcli_entry *top_dir)
+{
+    bcmos_errno err;
+    bcmlcli_pci_dumpptr = bcmos_alloc(1024*5);
+    uint8_t inst;
+
+    if (!bcmlcli_pci_dumpptr)
+    {
+        BCMOS_CHECK_RETURN_ERROR(!bcmlcli_pci_dumpptr, BCM_ERR_NOMEM);
+        return BCM_ERR_NULL;
+    }
+#ifdef ENABLE_LOG
+    static bcmcli_enum_val enum_table_file_id[] =
+    {
+        { .name = "SRAM", .val = BCMOLT_LOG_FILE_ID_SRAM },
+        { .name = "DDR", .val = BCMOLT_LOG_FILE_ID_DDR },
+        BCMCLI_ENUM_LAST
+    };
+
+    bcmolt_msg_log_init(); /* initialize API/logger integration */
+    user_appl_log_id = bcm_dev_log_id_register("user_appl", DEV_LOG_LEVEL_DEBUG, DEV_LOG_ID_TYPE_BOTH);
+    for (inst = 0; inst < BCMTR_MAX_INSTANCES; inst++)
+    {
+        char log_name[MAX_DEV_LOG_ID_NAME];
+        sprintf(log_name, "ind_msg%u", inst);
+        ind_log_id[inst] = bcm_dev_log_id_register(log_name, DEV_LOG_LEVEL_DEBUG, DEV_LOG_ID_TYPE_BOTH);
+    }
+#endif
+    user_dir = bcmcli_dir_add(top_dir, "user", "User application", BCMCLI_ACCESS_ADMIN, NULL);
+    BCMOS_CHECK_RETURN_ERROR(!user_dir, BCM_ERR_NOMEM);
+#ifdef ENABLE_LOG
+    BCMCLI_MAKE_CMD(user_dir, "register_indication_handler", "Register indication handler", _apicli_indication_handler,
+        BCMCLI_MAKE_PARM_DEFVAL("pon_ni_mask", "PON_NI interface bitmask. 0=all", BCMCLI_PARM_UNUMBER, 0, 0));
+    BCMCLI_MAKE_CMD(user_dir, "register_proxy_rx_handler", "Register Proxy Rx handler", _apicli_proxy_rx_handler,
+        BCMCLI_MAKE_PARM_DEFVAL("pon_ni_mask", "PON_NI interface bitmask. 0=all", BCMCLI_PARM_UNUMBER, 0, 0));
+    BCMCLI_MAKE_CMD(user_dir, "read_embedded_logger", "Read embedded logger", _apicli_read_embedded_logger,
+        BCMCLI_MAKE_PARM_ENUM("file_id", "file_id", enum_table_file_id, 0));
+
+    BCMCLI_MAKE_CMD_NOPARM(user_dir, "get_all_log_entries", "Get all embedded log entries", _apicli_get_all_log_entries);
+#endif
+
+#ifndef SIMULATION_BUILD
+    BCMCLI_MAKE_CMD(user_dir, "pcistat", "Print PCIe statistics", _apicli_pcistat,
+        BCMCLI_MAKE_PARM("clear", "clear", BCMCLI_PARM_STRING, BCMCLI_PARM_FLAG_OPTIONAL));
+    BCMCLI_MAKE_CMD(user_dir, "pcidump", "Print PCIe ring", _apicli_pcidump,
+        BCMCLI_MAKE_PARM("dir", "direction: tx or rx", BCMCLI_PARM_STRING, 0),
+        BCMCLI_MAKE_PARM("from", "start index", BCMCLI_PARM_NUMBER, BCMCLI_PARM_FLAG_OPTIONAL),
+        BCMCLI_MAKE_PARM("howmany", "howmany", BCMCLI_PARM_NUMBER, BCMCLI_PARM_FLAG_OPTIONAL));
+#endif
+
+#ifndef RELEASE_BUILD
+    bcmolt_remote_logger_appl_init();
+    bcmolt_remote_logger_appl_cli_init(user_dir);
+#endif
+
+    err = bcmolt_user_appl_cli_image_transfer_init(user_dir);
+    BCMOS_CHECK_RETURN_ERROR(err != BCM_ERR_OK, err);
+
+    err = bcmolt_user_appl_cli_sw_upgrade_init(user_dir);
+    BCMOS_CHECK_RETURN_ERROR(err != BCM_ERR_OK, err);
+
+    bcmolt_ps_appl_init();
+    err = bcmolt_user_appl_ps_cli_init(user_dir);
+    BCMOS_CHECK_RETURN_ERROR(err != BCM_ERR_OK, err);
+
+    bcmolt_user_appl_playback_init();
+    bcmolt_user_appl_playback_cli_init(user_dir);
+
+    bcmolt_user_appl_cli_handle_system_mode_change(current_device);
+
+    return err;
+}
diff --git a/bcm68620_release/release/host_reference/user_appl/bcmolt_user_appl_cli.h b/bcm68620_release/release/host_reference/user_appl/bcmolt_user_appl_cli.h
new file mode 100644
index 0000000..43a105e
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/bcmolt_user_appl_cli.h
@@ -0,0 +1,45 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef _BCMOLT_USER_APPL_CLI_H_
+#define _BCMOLT_USER_APPL_CLI_H_
+
+#include <bcmos_system.h>
+#include <bcmolt_msg.h>
+
+void bcmolt_user_appl_indication_cb(bcmolt_devid dev, bcmolt_msg *msg);
+
+void bcmolt_user_appl_proxy_rx_cb(bcmolt_devid dev, bcmolt_msg *msg);
+
+void bcmolt_user_appl_cli_handle_system_mode_change(bcmolt_devid dev);
+
+bcmos_errno bcmolt_user_appl_cli_init(bcmcli_entry *top_dir);
+
+
+#endif
diff --git a/bcm68620_release/release/host_reference/user_appl/bcmolt_user_appl_ex_cli.c b/bcm68620_release/release/host_reference/user_appl/bcmolt_user_appl_ex_cli.c
new file mode 100644
index 0000000..b6ac016
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/bcmolt_user_appl_ex_cli.c
@@ -0,0 +1,771 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#include <bcmolt_msg.h>
+#include <bcmolt_api.h>
+#include <bcmcli.h>
+#include <bcm_api_cli.h>
+#include <bcm_api_cli_helpers.h>
+#include <bcm_dev_log.h>
+#include "bcmolt_user_appl_ex_cli.h"
+
+#ifdef ENABLE_LOG
+static dev_log_id user_appl_ex_log_id;
+
+static void user_appl_general_indication_cb(bcmolt_devid olt, bcmolt_msg *msg)
+{
+    bcm_dev_log_log(user_appl_ex_log_id, DEV_LOG_LEVEL_DEBUG, BCM_LOG_FLAG_NO_HEADER,
+        "[-- Dev %u: Indication Received --]\n", olt);
+    switch (msg->obj_type)
+    {
+        case BCMOLT_OBJ_ID_DEBUG:
+            break;
+        case BCMOLT_OBJ_ID_GPON_NI:
+            switch (msg->subgroup)
+            {
+                case BCMOLT_GPON_NI_AUTO_ID_LOS:
+                    break;
+                case BCMOLT_GPON_NI_AUTO_ID_STATE_CHANGE_COMPLETED:
+                {
+                    bcmolt_gpon_ni_state_change_completed *ind = (bcmolt_gpon_ni_state_change_completed*)msg;
+                    bcm_dev_log_log(user_appl_ex_log_id, DEV_LOG_LEVEL_DEBUG, BCM_LOG_FLAG_NO_HEADER,
+                        "Dev %u: pon ni state changed new_state %d, prev state %d, result %d \n",
+                        olt, ind->data.new_state, ind->data.previous_state, ind->data.result);
+                    break;
+               }
+
+                default:
+                    break;
+            /* ... */
+           }
+            break;
+        case BCMOLT_OBJ_ID_GPON_ONU:
+            break;
+        default:
+            break;
+        /* ... */
+    }
+    bcmolt_msg_free(msg);
+}
+
+static void user_appl_pon_ni_indication_cb(bcmolt_devid olt, bcmolt_msg *msg)
+{
+    bcm_dev_log_log(user_appl_ex_log_id, DEV_LOG_LEVEL_DEBUG, BCM_LOG_FLAG_NO_HEADER,
+        "[-- Dev %u: Pon NI Indication Received --]\n", olt);
+    switch (msg->obj_type)
+    {
+        case BCMOLT_OBJ_ID_GPON_NI:
+            switch (msg->subgroup)
+            {
+                case BCMOLT_GPON_NI_AUTO_ID_LOS:
+                    break;
+                case BCMOLT_GPON_NI_AUTO_ID_STATE_CHANGE_COMPLETED:
+                {
+                    bcmolt_gpon_ni_state_change_completed *ind = (bcmolt_gpon_ni_state_change_completed*)msg;
+                    bcm_dev_log_log(user_appl_ex_log_id, DEV_LOG_LEVEL_DEBUG, BCM_LOG_FLAG_NO_HEADER,
+                        "Dev %u: pon ni state changed new_state %d, prev state %d, result %d \n",
+                        olt, ind->data.new_state, ind->data.previous_state, ind->data.result);
+                    break;
+               }
+                default:
+                    break;
+           }
+            break;
+        default:
+            bcm_dev_log_log(user_appl_ex_log_id, DEV_LOG_LEVEL_DEBUG, BCM_LOG_FLAG_NO_HEADER,
+                "[-- Dev %u: some other indication  --]\n", olt);
+            break;
+        /* ... */
+    }
+    bcmolt_msg_free(msg);
+}
+
+static void user_appl_device_logger_indication_cb(bcmolt_devid olt, bcmolt_msg *msg)
+{
+    if (msg->subgroup == BCMOLT_DEBUG_AUTO_ID_CLI_OUTPUT)
+    {
+        bcmolt_debug_cli_output *ind = (bcmolt_debug_cli_output *)msg;
+        bcm_dev_log_log(user_appl_ex_log_id, DEV_LOG_LEVEL_DEBUG, BCM_LOG_FLAG_NO_HEADER,
+            "Dev %u: [device logger] %s\n", olt, ind->data.data.val);
+   }
+}
+
+static bcmos_errno user_appl_indication_handler(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    bcmolt_rx_cfg rx_cfg;
+    bcmos_errno rc;
+
+    rx_cfg.obj_type = BCMOLT_OBJ_ID_DEBUG;
+    rx_cfg.rx_cb =user_appl_device_logger_indication_cb;
+    rx_cfg.flags = BCMOLT_AUTO_FLAGS_NONE;
+    rc = bcmolt_auto_rx_cb_set(current_device, &rx_cfg);
+    if (rc != BCM_ERR_OK)
+    {
+        return rc;
+    }
+
+    rx_cfg.obj_type = BCMOLT_OBJ_ID_GPON_NI;
+    rx_cfg.rx_cb = user_appl_pon_ni_indication_cb;
+    rx_cfg.flags = BCMOLT_AUTO_FLAGS_NONE;
+    rc = bcmolt_auto_rx_cb_set(current_device, &rx_cfg);
+    if (rc != BCM_ERR_OK)
+    {
+        return rc;
+    }
+
+    rx_cfg.obj_type = BCMOLT_OBJECT_ANY;
+    rx_cfg.rx_cb = user_appl_general_indication_cb;
+    rx_cfg.flags = BCMOLT_AUTO_FLAGS_NONE;
+    return bcmolt_auto_rx_cb_set(current_device, &rx_cfg);
+}
+
+static bcmos_errno user_appl_log_entry_set(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    bcmos_errno err;
+    bcmolt_log_entry_cfg cfg; /**< declare main API struct */
+    bcmolt_log_entry_key key = {.log_id= 0}; /**< declare key */
+
+    /* init the API struct */
+    BCMOLT_CFG_INIT(&cfg, log_entry, key);
+
+    BCMOLT_CFG_PROP_SET(&cfg, log_entry, log_level_print, BCMOLT_LOG_LEVEL_INFO);
+    BCMOLT_CFG_PROP_SET(&cfg, log_entry, log_level_save, BCMOLT_LOG_LEVEL_DEBUG);
+    /* call API */
+    err = bcmolt_cfg_set(0, &cfg.hdr);
+    return err;
+}
+
+static bcmos_errno user_appl_gpon_ni_disable_indication (bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    bcmos_errno err;
+    bcmolt_gpon_ni_auto_cfg cfg; /**< declare main API struct */
+    bcmolt_gpon_ni_key key = {.pon_ni= 0}; /**< declare key */
+
+    /* init the API struct */
+    BCMOLT_AUTO_CFG_INIT(&cfg, gpon_ni, key);
+
+    BCMOLT_AUTO_CFG_PROP_SET(&cfg, gpon_ni, serial_number_acquisition_cycle_start, BCMOS_FALSE);
+    BCMOLT_AUTO_CFG_PROP_SET(&cfg, gpon_ni, stat_alarm_cleared, BCMOS_FALSE);
+    /* call API */
+    err = bcmolt_auto_cfg_set(0, &cfg.hdr);
+    return err;
+}
+
+static bcmos_errno user_appl_redirect_device_logger (bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    bcmolt_debug_cfg cfg;
+    bcmolt_debug_key key = {};
+
+    BCMOLT_CFG_INIT(&cfg, debug, key);
+    BCMOLT_CFG_PROP_SET(&cfg, debug, console_redirection, BCMOLT_CONSOLE_REDIRECTION_CLONE);
+    bcmolt_cfg_set(0, &cfg.hdr);
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno user_appl_gpon_device_init(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    bcmolt_device_cfg cfg;
+    bcmos_errno err;
+    bcmolt_device_key key = {.reserved = 0};
+    bcmolt_device_nni_speed nni_speed = {}; /**< Device network interface speed configuration */
+    bcmolt_device_connect oper;
+
+    nni_speed.first_half = BCMOLT_NNI_SPEED_GBPS_1;
+    nni_speed.second_half = BCMOLT_NNI_SPEED_GBPS_1;
+
+    BCMOLT_CFG_INIT(&cfg, device, key);
+    BCMOLT_CFG_PROP_SET(&cfg, device, system_mode, BCMOLT_SYSTEM_MODE_GPON__16_X);
+    BCMOLT_CFG_PROP_SET(&cfg, device, keepalive_interval, 5);
+    BCMOLT_CFG_PROP_SET(&cfg, device, keepalive_tolerance, 5);
+    BCMOLT_CFG_PROP_SET(&cfg, device, nni_speed, nni_speed);
+    err = bcmolt_cfg_set(0, &cfg.hdr);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    BCMOLT_OPER_INIT(&oper, device, connect, key);
+    err = bcmolt_oper_submit(0, &oper.hdr);
+    return err;
+}
+
+static bcmos_errno user_appl_gpon_set_trx(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    bcmolt_gpon_trx_cfg cfg;
+    bcmolt_gpon_trx_key key = {.pon_ni = 0};
+
+    BCMOLT_CFG_INIT(&cfg, gpon_trx, key);
+    BCMOLT_CFG_PROP_SET(&cfg, gpon_trx, transceiver_type, BCMOLT_TRX_TYPE_SOURCE_PHOTONICS);
+    return bcmolt_cfg_set(0, &cfg.hdr);
+}
+
+static bcmos_errno user_appl_gpon_set_interworking_mode(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    bcmolt_gpon_iwf_cfg cfg;
+    bcmolt_gpon_iwf_key key = {.pon_ni = 0};
+
+    BCMOLT_CFG_INIT(&cfg, gpon_iwf, key);
+    BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf, iwf_mode, BCMOLT_IWF_MODE_PER_FLOW_MODE);
+    return bcmolt_cfg_set(0, &cfg.hdr);
+
+}
+
+static bcmos_errno user_appl_gpon_set_mac_table_config(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    bcmolt_gpon_iwf_cfg cfg_iwf;
+    bcmolt_gpon_iwf_key key_iwf = {.pon_ni = 0};
+    bcmolt_mac_table_configuration mac_table_configuration;
+    mac_table_configuration.aging_time = 10000;
+    mac_table_configuration.automatic_mac_aging = BCMOLT_CONTROL_STATE_DISABLE;
+    mac_table_configuration.automatic_mac_learning = BCMOLT_CONTROL_STATE_DISABLE;
+    mac_table_configuration.automatic_mac_move = BCMOLT_CONTROL_STATE_DISABLE;
+    mac_table_configuration.automatic_static_mode = BCMOLT_CONTROL_STATE_DISABLE;
+    mac_table_configuration.default_flow_id = 600;
+    mac_table_configuration.learning_mode = BCMOLT_MAC_TABLE_LEARNING_MODE_NORMAL;
+    mac_table_configuration.miss_fallback = BCMOLT_MAC_TABLE_MISS_FALLBACK_DEFAULT_FLOW;
+
+    BCMOLT_CFG_INIT(&cfg_iwf, gpon_iwf, key_iwf);
+    BCMOLT_CFG_PROP_SET(&cfg_iwf, gpon_iwf, mac_table_configuration, mac_table_configuration);
+    /* must set the IWF to per fow for mac table mapping to work */
+    BCMOLT_CFG_PROP_SET(&cfg_iwf, gpon_iwf, iwf_mode, BCMOLT_IWF_MODE_PER_FLOW_MODE);
+    return bcmolt_cfg_set(0, &cfg_iwf.hdr);
+}
+
+static bcmos_errno user_appl_gpon_activate_pon(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    bcmolt_gpon_ni_set_pon_state oper_ni;
+    bcmolt_gpon_ni_key key_ni = {.pon_ni = 0};
+
+    BCMOLT_OPER_INIT(&oper_ni, gpon_ni, set_pon_state, key_ni);
+    BCMOLT_OPER_PROP_SET(&oper_ni, gpon_ni, set_pon_state, pon_state, BCMOLT_PON_OPERATION_ACTIVE_WORKING);
+    return bcmolt_oper_submit(0, &oper_ni.hdr);
+}
+
+static bcmos_errno user_appl_gpon_start_sn_acquisition(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    bcmolt_gpon_ni_cfg cfg_ni;
+    bcmolt_gpon_ni_key key_ni = {.pon_ni = 0};
+    bcmolt_gpon_sn_acquisition sn_acquisition;
+
+    sn_acquisition.control = BCMOLT_CONTROL_STATE_ENABLE;
+    sn_acquisition.interval = 77000;
+    sn_acquisition.onu_post_discovery_mode = BCMOLT_ONU_POST_DISCOVERY_MODE_DISABLE;
+
+    BCMOLT_CFG_INIT(&cfg_ni, gpon_ni, key_ni);
+    BCMOLT_CFG_PROP_SET(&cfg_ni, gpon_ni, sn_acquisition, sn_acquisition);
+    return bcmolt_cfg_set(0, &cfg_ni.hdr);
+}
+
+static bcmos_errno user_appl_gpon_ni_get_stats(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    bcmolt_gpon_ni_stat stat; /**< declare main API struct */
+    bcmolt_gpon_ni_key key = {}; /**< declare key */
+
+    /* init the API struct */
+    BCMOLT_STAT_INIT(&stat, gpon_ni, key);
+    BCMOLT_STAT_PROP_GET(&stat, gpon_ni, all_properties);
+    return bcmolt_stat_get(0, &stat.hdr, BCMOS_TRUE);
+}
+
+static bcmos_errno user_appl_gpon_onu_config(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    bcmolt_gpon_onu_cfg cfg;
+    bcmolt_gpon_onu_key key = {.pon_ni = 0, .onu_id = 2};
+    bcmolt_serial_number serial_number = {.vendor_id = {0x00,0x00,0x00, 0x00}, .vendor_specific = {0x00,0x00,0x00, 0x02}};
+    bcmolt_arr_u8_10 password = {.arr = {0x00,0x00,0x00, 0x00, 0x00,0x00,0x00, 0x00, 0x00, 0x00}};
+
+    BCMOLT_CFG_INIT(&cfg, gpon_onu, key);
+    BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, serial_number, serial_number);
+    BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, password, password);
+    BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, auto_password_learning, BCMOS_TRUE);
+    BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, us_fec, BCMOS_FALSE);
+    BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, omci_port_id, 2);
+    BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, ds_ber_reporting_interval, 5000);
+    return bcmolt_cfg_set(0, &cfg.hdr);
+}
+
+static bcmos_errno user_appl_gpon_activate_onu(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    bcmolt_gpon_onu_set_onu_state oper;
+    bcmolt_gpon_onu_key key = {.pon_ni = 0, .onu_id = 2};
+
+    BCMOLT_OPER_INIT(&oper, gpon_onu, set_onu_state, key);
+    BCMOLT_OPER_PROP_SET(&oper, gpon_onu, set_onu_state, onu_state, BCMOLT_ONU_OPERATION_ACTIVE);
+    return bcmolt_oper_submit(0, &oper.hdr);
+}
+
+static bcmos_errno user_appl_gpon_alloc_id_config(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    bcmolt_gpon_alloc_cfg cfg;
+    bcmolt_gpon_alloc_key key = {.pon_ni = 0, .alloc_id = 320};
+
+    bcmolt_pon_alloc_sla sla; /**< Alloc ID SLA. */
+
+    sla.additional_bw_eligibility = BCMOLT_ADDITIONAL_BW_ELIGIBILITY_NON_ASSURED;
+    sla.cbr_rt_bw = 0;
+    sla.cbr_nrt_bw = 140000000;
+    sla.guaranteed_bw = 140000000;
+    sla.maximum_bw = 140000000;
+    sla.alloc_type = BCMOLT_ALLOC_TYPE_NSR;
+    sla.cbr_rt_compensation = BCMOS_FALSE;
+    sla.cbr_nrt_ap_index = 0;
+    sla.cbr_rt_ap_index = 0;
+    sla.weight = 0;
+    sla.priority = 0;
+
+    BCMOLT_CFG_INIT(&cfg, gpon_alloc, key);
+    BCMOLT_CFG_PROP_SET(&cfg, gpon_alloc, onu_id, 2);
+    BCMOLT_CFG_PROP_SET(&cfg, gpon_alloc, sla, sla);
+    return bcmolt_cfg_set(0, &cfg.hdr);
+}
+
+/* Configure a GEM - for DS or bidirectional traffic */
+static bcmos_errno user_appl_gpon_gem_port_config(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    bcmolt_gpon_gem_port_cfg cfg;
+    bcmolt_gpon_gem_port_key key = {.pon_ni = 0, .gem_port_id = 320};
+
+    bcmolt_gem_port_configuration configuration = {.direction = BCMOLT_GEM_PORT_DIRECTION_BIDIRECTIONAL, .type = BCMOLT_GEM_PORT_TYPE_UNICAST};
+    BCMOLT_CFG_INIT(&cfg, gpon_gem_port, key);
+    BCMOLT_CFG_PROP_SET(&cfg, gpon_gem_port, onu_id, 2);
+    BCMOLT_CFG_PROP_SET(&cfg, gpon_gem_port, downstream_encryption_mode, BCMOLT_CONTROL_STATE_DISABLE);
+    BCMOLT_CFG_PROP_SET(&cfg, gpon_gem_port, configuration, configuration);
+    BCMOLT_CFG_PROP_SET(&cfg, gpon_gem_port, upstream_destination_queue, BCMOLT_US_GEM_PORT_DESTINATION_DATA);
+    BCMOLT_CFG_PROP_SET(&cfg, gpon_gem_port, control, BCMOLT_CONTROL_STATE_ENABLE);
+    return bcmolt_cfg_set(0, &cfg.hdr);
+}
+
+static bcmos_errno user_appl_gpon_ds_gem_port_modify(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    /* this can only be called in PER flow mode */
+    /* set DS port mapping initial GEM 300, final GEM 320 */
+    bcmolt_gpon_iwf_ds_egress_flow_key key = {.pon_ni = 0, .flow_id = 300};
+    bcmolt_gpon_iwf_ds_egress_flow_cfg cfg;
+
+    BCMOLT_CFG_INIT(&cfg, gpon_iwf_ds_egress_flow, key);
+    BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_ds_egress_flow, gem_port, 320);
+    return bcmolt_cfg_set(0, &cfg.hdr);
+}
+
+static bcmos_errno user_appl_gpon_set_ds_per_vlan_mapping_method(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    /* When working with per flow mode the user must add an entry for each VID (flow) this way */
+    bcmolt_gpon_iwf_ds_ingress_flow_key key = {.pon_ni = 0, .vlan_id = 300};
+    bcmolt_gpon_iwf_ds_ingress_flow_cfg cfg;
+
+    BCMOLT_CFG_INIT(&cfg, gpon_iwf_ds_ingress_flow, key);
+    BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_ds_ingress_flow, mapping_method, BCMOLT_VLAN_TO_FLOW_MAPPING_METHOD_VID);
+    BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_ds_ingress_flow, mapping_tag, BCMOLT_MAPPING_TAG_METHOD_OUTER_VID);
+    BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_ds_ingress_flow, vlan_action, BCMOLT_DS_VLAN_ACTION_TRANSPARENT);
+    return bcmolt_cfg_set(0, &cfg.hdr);
+}
+
+static bcmos_errno user_appl_gpon_send_omci_packet(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    bcmolt_gpon_onu_cpu_packets proxy; /**< declare main API struct */
+    bcmolt_gpon_onu_key key = {.pon_ni = 0, .onu_id = 2}; /**< declare key */
+    bcmolt_u8_list_u32_max_2048 buffer;
+    uint8_t cpu_buf[100];
+    buffer.len = 48;
+    buffer.val = cpu_buf;
+
+    /* init the API struct */
+    BCMOLT_PROXY_INIT(&proxy, gpon_onu, cpu_packets, key);
+    BCMOLT_PROXY_PROP_SET(&proxy, gpon_onu, cpu_packets, packet_type, BCMOLT_PACKET_TYPE_OMCI);
+    BCMOLT_PROXY_PROP_SET(&proxy, gpon_onu, cpu_packets, calc_crc, BCMOS_TRUE);
+    BCMOLT_PROXY_PROP_SET(&proxy, gpon_onu, cpu_packets, number_of_packets, 1);
+    BCMOLT_PROXY_PROP_SET(&proxy, gpon_onu, cpu_packets, packet_size, 48);
+    BCMOLT_PROXY_PROP_SET(&proxy, gpon_onu, cpu_packets, buffer, buffer);
+
+    /* call API */
+    return bcmolt_proxy_send(0, &proxy.hdr);
+}
+
+static bcmos_errno user_appl_gpon_send_cpu_packets_over_gem_ports(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    bcmolt_gpon_ni_cpu_packets proxy; /**< declare main API struct */
+    bcmolt_gpon_ni_key key = {.pon_ni = 0}; /**< declare key */
+    bcmolt_gpon_gem_id gem_port_id_array[10];
+    bcmolt_gpon_gem_id_list_u8_max_16 gem_port_list;
+    bcmolt_u8_list_u32_max_2048 buffer;
+    uint8_t cpu_buf[100];
+    buffer.len = 96;
+    buffer.val = cpu_buf;
+
+    gem_port_list.len = 10;
+    gem_port_list.val = gem_port_id_array;
+
+    /* init the API struct */
+    BCMOLT_PROXY_INIT(&proxy, gpon_ni, cpu_packets, key);
+    BCMOLT_PROXY_PROP_SET(&proxy, gpon_ni, cpu_packets, packet_type, BCMOLT_PACKET_TYPE_CPU);
+    BCMOLT_PROXY_PROP_SET(&proxy, gpon_ni, cpu_packets, calc_crc, BCMOS_TRUE);
+    BCMOLT_PROXY_PROP_SET(&proxy, gpon_ni, cpu_packets, gem_port_list, gem_port_list);
+    BCMOLT_PROXY_PROP_SET(&proxy, gpon_ni, cpu_packets, buffer, buffer);
+
+    /* call API */
+    return bcmolt_proxy_send(0, &proxy.hdr);
+}
+
+static bcmos_errno user_appl_gpon_add_mac_entry(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    /* this can only be called in per flow mode. */
+    /* In order to pass traffic you must also add an entry to IWF ingress port as described in _gpon_set_per_vlan_mapping_method */
+    bcmolt_gpon_iwf_mac_table_cfg cfg;
+    bcmolt_gpon_iwf_mac_table_key key = {.pon_ni = 0, .mac_address.u8 = {0x00,0x00,0x00, 0x00, 0x00,0x00}, .vlan = 320};
+
+    BCMOLT_CFG_INIT(&cfg, gpon_iwf_mac_table, key);
+    BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_mac_table, flow_id, 320);
+    return bcmolt_cfg_set(0, &cfg.hdr);
+}
+
+static bcmos_errno user_appl_gpon_dump_mac_table(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    const uint16_t max_msgs_per_call = 10;
+    const bcmolt_devid device = 0;
+    const uint16_t pon = 0;
+
+    bcmos_errno err;
+    bcmolt_msg_set *msg_set;
+    bcmolt_gpon_iwf_mac_table_cfg filter;
+    uint16_t i;
+    uint16_t count = 0;
+
+    /* a key of all Fs means "start from the beginning" */
+    bcmolt_gpon_iwf_mac_table_key wildcard_key =
+        { .pon_ni = pon, .mac_address.u8 = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, .vlan = 0xFFFF };
+
+    /* allocate space for the return values */
+    err = bcmolt_msg_set_alloc(BCMOLT_OBJ_ID_GPON_IWF_MAC_TABLE, BCMOLT_MGT_GROUP_CFG, max_msgs_per_call, &msg_set);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    /* initialize the filter structure and ask to read the flow ID / static flag */
+    BCMOLT_CFG_INIT(&filter, gpon_iwf_mac_table, wildcard_key);
+    BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf_mac_table, flow_id);
+    BCMOLT_MSGSET_CFG_PROP_GET(msg_set, gpon_iwf_mac_table, stat);
+
+    /* filter to only include non-static entries (you could also filter on flow ID, or omit this to include all) */
+    BCMOLT_CFG_PROP_SET(&filter, gpon_iwf_mac_table, stat, BCMOS_FALSE);
+
+    do
+    {
+        /* call get multiple objects API function */
+        err = bcmolt_cfg_get_multi(device, &filter.hdr, BCMOLT_FILTER_FLAGS_NONE, msg_set);
+        if (err != BCM_ERR_OK)
+        {
+            bcmcli_session_print(session, "bcmolt_cfg_get_multi returned error: %s (%d)\n", bcmos_strerror(err), err);
+            break;
+        }
+
+        /* print each key/config structure that was received */
+        for (i = 0; i < msg_set->num_instances; i++)
+        {
+            bcmolt_gpon_iwf_mac_table_cfg *cfg = (bcmolt_gpon_iwf_mac_table_cfg *)msg_set->msg[i];
+            bcmcli_session_print(
+                session,
+                "entry[%d] MAC: %02X:%02X:%02X:%02X:%02X:%02X\n",
+                count,
+                cfg->key.mac_address.u8[0],
+                cfg->key.mac_address.u8[1],
+                cfg->key.mac_address.u8[2],
+                cfg->key.mac_address.u8[3],
+                cfg->key.mac_address.u8[4],
+                cfg->key.mac_address.u8[5]);
+            bcmcli_session_print(session, "entry[%d] VID: %d\n", count, cfg->key.vlan);
+            bcmcli_session_print(session, "entry[%d] flow ID: %d\n", count, cfg->data.flow_id);
+            bcmcli_session_print(session, "entry[%d] static: %s\n", count, cfg->data.stat ? "yes" : "no");
+            count++;
+        }
+
+        /* update the key for next call */
+        filter.key = *((bcmolt_gpon_iwf_mac_table_key *)msg_set->next_key);
+
+    /* keep calling the function until we have retrieved all entries */
+    } while (msg_set->more);
+
+    bcmolt_msg_set_free(msg_set);
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno user_appl_gpon_set_us_flow_configuration(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    bcmolt_gpon_iwf_us_flow_cfg cfg;
+    bcmolt_gpon_iwf_us_flow_key key = {.pon_ni = 0, .gem_port_id = 320};
+    bcmolt_vlan_tag vlan_tag;
+
+    /* vlad tag parameters for the add vlan */
+    vlan_tag.pbit = 9;
+    vlan_tag.vlan_id = 300;
+
+    BCMOLT_CFG_INIT(&cfg, gpon_iwf_us_flow, key);
+    BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_us_flow, flow_id, 320);
+    BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_us_flow, mac_learning, BCMOS_FALSE);
+    BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_us_flow, vlan_action, BCMOLT_US_VLAN_ACTION_ADD);
+    BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_us_flow, vlan_tag, vlan_tag);
+    /* what is the tpid index */
+    BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_us_flow, tpid_index, 0);
+    return bcmolt_cfg_set(0, &cfg.hdr);
+}
+
+static bcmos_errno user_appl_gpon_configure_and_activate_pon(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    /* TRX and PON Link configuration structures + PON control operation */
+    bcmos_errno rc;
+    bcmolt_gpon_ni_key key_ni = {.pon_ni = 0};
+    bcmolt_gpon_ni_cfg cfg_ni;
+    bcmolt_gpon_ni_set_pon_state oper_ni;
+
+    bcmolt_gpon_sn_acquisition sn_acquisition = {.control = BCMOLT_CONTROL_STATE_ENABLE, .interval = 10000, .onu_post_discovery_mode = BCMOLT_ONU_POST_DISCOVERY_MODE_NONE};
+    bcmolt_pon_drift_control drift_control = {.drift_interval = 1000, .drift_limit = 4, .transmission_control_limit = 8};
+    bcmolt_ber_monitor_params ber_monitor = {.us_ber_interval = 1000, .sd_threshold = 5, .sf_threshold = 3};
+    bcmolt_gpon_trx_key key_trx = {.pon_ni = 0};
+    bcmolt_gpon_trx_cfg cfg_trx;
+    bcmolt_trx_delimiter delimiter = {};
+
+    /* overide only the relevant parameters */
+    delimiter.pattern[0] = 0x0B;
+    delimiter.pattern[1] = 0x59;
+    delimiter.pattern[2] = 0x83;
+    delimiter.size = 3;
+    delimiter.window_size = 124;
+
+    BCMOLT_CFG_INIT(&cfg_trx, gpon_trx, key_trx);
+    BCMOLT_CFG_PROP_SET(&cfg_trx, gpon_trx, transceiver_type, BCMOLT_TRX_TYPE_SOURCE_PHOTONICS);
+    BCMOLT_CFG_PROP_SET(&cfg_trx, gpon_trx, delimiter, delimiter);
+    rc = bcmolt_cfg_set(0, &cfg_trx.hdr);
+    if (rc != BCM_ERR_OK)
+    {
+        bcm_dev_log_log(user_appl_ex_log_id, DEV_LOG_LEVEL_DEBUG, BCM_LOG_FLAG_NO_HEADER,
+        "Error in set trx %d", rc);
+    }
+
+    /* Initialize and configure PON */
+    BCMOLT_CFG_INIT(&cfg_ni, gpon_ni, key_ni);
+    BCMOLT_CFG_PROP_SET(&cfg_ni, gpon_ni, sn_acquisition, sn_acquisition);
+    BCMOLT_CFG_PROP_SET(&cfg_ni, gpon_ni, drift_control, drift_control);
+    BCMOLT_CFG_PROP_SET(&cfg_ni, gpon_ni, ber_monitor, ber_monitor);
+    BCMOLT_CFG_PROP_SET(&cfg_ni, gpon_ni, ds_ber_reporting_interval, 1000);
+    BCMOLT_CFG_PROP_SET(&cfg_ni, gpon_ni, preassigned_equalization_delay, 0);
+    rc = bcmolt_cfg_set(0, &cfg_ni.hdr);
+    if (rc != BCM_ERR_OK)
+    {
+        return rc;
+    }
+
+    BCMOLT_OPER_INIT(&oper_ni, gpon_ni, set_pon_state, key_ni);
+    BCMOLT_OPER_PROP_SET(&oper_ni, gpon_ni, set_pon_state, pon_state, BCMOLT_PON_OPERATION_ACTIVE_WORKING);
+    return bcmolt_oper_submit(0, &oper_ni.hdr);
+}
+
+static bcmos_errno gpon_add_activate_onu (bcmolt_devid dev, bcmolt_gpon_ni pon_ni, bcmolt_gpon_onu_id onu_id, bcmolt_serial_number serial_number)
+{
+    bcmolt_gpon_onu_cfg onu_cfg;
+    bcmolt_gpon_onu_key onu_key = {.pon_ni = pon_ni, .onu_id = onu_id};
+    bcmolt_gpon_onu_set_onu_state onu_oper;
+    bcmolt_arr_u8_10 password = {.arr = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}};
+    bcmolt_gpon_gem_port_cfg gem_cfg;
+    bcmolt_gpon_gem_port_key gem_key = {.pon_ni = pon_ni, .gem_port_id = onu_id};
+    bcmos_errno rc;
+
+    BCMOLT_CFG_INIT(&onu_cfg, gpon_onu, onu_key);
+    BCMOLT_CFG_PROP_SET(&onu_cfg, gpon_onu, serial_number, serial_number);
+    BCMOLT_CFG_PROP_SET(&onu_cfg, gpon_onu, password, password);
+    BCMOLT_CFG_PROP_SET(&onu_cfg, gpon_onu, auto_password_learning, BCMOS_TRUE);
+    BCMOLT_CFG_PROP_SET(&onu_cfg, gpon_onu, us_fec, BCMOS_TRUE);
+    BCMOLT_CFG_PROP_SET(&onu_cfg, gpon_onu, omci_port_id, 2);
+    BCMOLT_CFG_PROP_SET(&onu_cfg, gpon_onu, ds_ber_reporting_interval, 5000);
+    rc = bcmolt_cfg_set(dev, &onu_cfg.hdr);
+    if (rc)
+    {
+        return rc;
+    }
+
+    BCMOLT_CFG_INIT(&gem_cfg, gpon_gem_port, gem_key);
+    BCMOLT_CFG_PROP_SET(&gem_cfg, gpon_gem_port, downstream_encryption_mode, BCMOLT_CONTROL_STATE_ENABLE);
+    rc = bcmolt_cfg_set(dev, &gem_cfg.hdr);
+    if (rc)
+    {
+        return rc;
+    }
+
+    BCMOLT_OPER_INIT(&onu_oper, gpon_onu, set_onu_state, onu_key);
+    BCMOLT_OPER_PROP_SET(&onu_oper, gpon_onu, set_onu_state, onu_state, BCMOLT_ONU_OPERATION_ACTIVE);
+    rc = bcmolt_oper_submit(dev, &onu_oper.hdr);
+    return rc;
+}
+
+static bcmos_errno user_appl_gpon_config_and_activate_onu (bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t nparms)
+{
+    bcmolt_serial_number serial_number = {.vendor_id = {0x00,0x00,0x00, 0x00}, .vendor_specific = {0x00,0x00,0x00, 0x02}};
+    return gpon_add_activate_onu(0, 0, 2, serial_number);
+}
+
+static bcmos_errno user_appl_epon_get_all_link_alarms(bcmcli_session *session,
+                                                      const bcmcli_cmd_parm parm[],
+                                                      uint16_t nparms)
+{
+    const uint16_t max_msgs_per_call = 10;
+    const bcmolt_devid device_id = 0;
+    const uint16_t pon = 0;
+    /* configure filter to select only links which do NOT have all alarms off */
+    const bcmolt_filter_flags flags = BCMOLT_FILTER_FLAGS_INVERT_SELECTION;
+    const bcmolt_epon_link_alarm_state alarm_state_filter =
+        {
+            .invalid_mpcp_report_received = BCMOLT_STATUS_OFF,
+            .key_exchange_failure = BCMOLT_STATUS_OFF,
+            .mpcp_report_timeout = BCMOLT_STATUS_OFF,
+            .oam_keepalive_timeout = BCMOLT_STATUS_OFF,
+        };
+
+    bcmos_errno err = BCM_ERR_OK;
+    bcmolt_msg_set *msg_set;
+    bcmolt_epon_link_cfg filter;
+    bcmolt_epon_link_key wildcard_key;
+    uint16_t i;
+
+    /* retrieve the EPON NI MAC address */
+    bcmolt_epon_ni_cfg pon_cfg;
+    bcmolt_epon_ni_key pon_key = { .epon_ni = pon };
+
+    BCMOLT_CFG_INIT(&pon_cfg, epon_ni, pon_key);
+    BCMOLT_CFG_PROP_GET(&pon_cfg, epon_ni, mac_address);
+    err = bcmolt_cfg_get(device_id, &pon_cfg.hdr);
+    if (BCM_ERR_OK != err)
+    {
+        bcmcli_session_print(session, "Failed to retrieve EPON NI MAC address!\n");
+        return err;
+    }
+
+    /* a key with the EPON NI MAC address means "start from the beginning" */
+    wildcard_key.epon_ni = pon;
+    wildcard_key.mac_address = pon_cfg.data.mac_address;
+
+    /* allocate space for the return values */
+    err = bcmolt_msg_set_alloc(BCMOLT_OBJ_ID_EPON_LINK, BCMOLT_MGT_GROUP_CFG, max_msgs_per_call, &msg_set);
+    if (BCM_ERR_OK != err)
+    {
+        bcmcli_session_print(session, "Failed to allocate space for return!\n");
+        return err;
+    }
+
+    /* initialize the filter structure and ask to read the alarm state */
+    BCMOLT_CFG_INIT(&filter, epon_link, wildcard_key);
+    BCMOLT_MSGSET_CFG_PROP_GET(msg_set, epon_link, alarm_state);
+
+    /* apply filter */
+    BCMOLT_CFG_PROP_SET(&filter, epon_link, alarm_state, alarm_state_filter);
+
+    do
+    {
+        /* call get multiple objects API function */
+        err = bcmolt_cfg_get_multi(device_id, &filter.hdr, flags, msg_set);
+        if (BCM_ERR_OK != err)
+        {
+            bcmcli_session_print(session, "bcmolt_cfg_get_multi returned error: %s (%d)\n", bcmos_strerror(err), err);
+            break;
+        }
+
+        /* print each key/config that was received */
+        for (i = 0; i < msg_set->num_instances; i++)
+        {
+            bcmolt_epon_link_cfg *cfg = (bcmolt_epon_link_cfg*)msg_set->msg[i];
+            bcmcli_session_print(session, "Link: NI %u, MAC %02x%02x%02x%02x%02x%02x\n",
+                                 cfg->key.epon_ni,
+                                 cfg->key.mac_address.u8[0],
+                                 cfg->key.mac_address.u8[1],
+                                 cfg->key.mac_address.u8[2],
+                                 cfg->key.mac_address.u8[3],
+                                 cfg->key.mac_address.u8[4],
+                                 cfg->key.mac_address.u8[5]);
+            bcmcli_session_print(session, "\tInvalid MPCP Report Received: %u\n",
+                                 cfg->data.alarm_state.invalid_mpcp_report_received);
+            bcmcli_session_print(session, "\tKey Exchange failure: %u\n",
+                                 cfg->data.alarm_state.key_exchange_failure);
+            bcmcli_session_print(session, "\tMPCP Report Timeout: %u\n",
+                                 cfg->data.alarm_state.mpcp_report_timeout);
+            bcmcli_session_print(session, "\tOAM Keepalive Timeout: %u\n",
+                                 cfg->data.alarm_state.oam_keepalive_timeout);
+        }
+
+        /* update the key for next call */
+        filter.key = *((bcmolt_epon_link_key*)msg_set->next_key);
+
+        /* keep calling the function until we have retrieved all entries */
+    } while (msg_set->more);
+
+    bcmolt_msg_set_free(msg_set);
+    return err;
+}
+#endif
+
+bcmos_errno bcmolt_user_appl_ex_cli_init(void)
+{
+    bcmcli_entry *parent = bcmcli_dir_find(NULL, "user");
+    bcmcli_entry *dir;
+
+#ifdef ENABLE_LOG
+    user_appl_ex_log_id = bcm_dev_log_id_register("user_appl_ex", DEV_LOG_LEVEL_DEBUG, DEV_LOG_ID_TYPE_BOTH);
+#endif
+
+    dir = bcmcli_dir_add(parent, "example", "User application", BCMCLI_ACCESS_ADMIN, NULL);
+    BCMOS_CHECK_RETURN_ERROR(!dir, BCM_ERR_NOMEM);
+#ifdef ENABLE_LOG
+
+    BCMCLI_MAKE_CMD_NOPARM(dir, "gpon_device_init", "gpon device init", user_appl_gpon_device_init);
+    BCMCLI_MAKE_CMD_NOPARM(dir, "indication_handler", "indication handler", user_appl_indication_handler);
+    BCMCLI_MAKE_CMD_NOPARM(dir, "log_entry_set", "log enrty set", user_appl_log_entry_set);
+    BCMCLI_MAKE_CMD_NOPARM(dir, "redirect_device_logger", "redirect device logger", user_appl_redirect_device_logger);
+    BCMCLI_MAKE_CMD_NOPARM(dir, "gpon_ni_disable_indication", "gpon_ni_disable_indication", user_appl_gpon_ni_disable_indication);
+    BCMCLI_MAKE_CMD_NOPARM(dir, "gpon_ni_get_stats", "gpon_ni_get_stats", user_appl_gpon_ni_get_stats);
+    BCMCLI_MAKE_CMD_NOPARM(dir, "gpon_start_sn_acquisition", "gpon start sn acquisition", user_appl_gpon_start_sn_acquisition);
+    BCMCLI_MAKE_CMD_NOPARM(dir, "gpon_set_mac_table_config", "gpon set mac table config", user_appl_gpon_set_mac_table_config);
+    BCMCLI_MAKE_CMD_NOPARM(dir, "gpon_set_interworking_mode", "gpon set interworking mode", user_appl_gpon_set_interworking_mode);
+    BCMCLI_MAKE_CMD_NOPARM(dir, "gpon_set_trx", "gpon set trx", user_appl_gpon_set_trx);
+    BCMCLI_MAKE_CMD_NOPARM(dir, "gpon_activate_pon", "gpon activate pon", user_appl_gpon_activate_pon);
+    BCMCLI_MAKE_CMD_NOPARM(dir, "gpon_onu_config", "gpon onu config", user_appl_gpon_onu_config);
+    BCMCLI_MAKE_CMD_NOPARM(dir, "gpon_activate_onu", "gpon activate onu", user_appl_gpon_activate_onu);
+    BCMCLI_MAKE_CMD_NOPARM(dir, "gpon_alloc_id_config", "gpon alloc config", user_appl_gpon_alloc_id_config);
+    BCMCLI_MAKE_CMD_NOPARM(dir, "gpon_gem_port_config", "gpon gem port config", user_appl_gpon_gem_port_config);
+    BCMCLI_MAKE_CMD_NOPARM(dir, "gpon_add_mac_entry", "gpon add mac entry", user_appl_gpon_add_mac_entry);
+    BCMCLI_MAKE_CMD_NOPARM(dir, "gpon_dump_mac_table", "print entire GPON MAC table", user_appl_gpon_dump_mac_table);
+    BCMCLI_MAKE_CMD_NOPARM(dir, "gpon_ds_gem_port_modify", " gpon ds gem port modify", user_appl_gpon_ds_gem_port_modify);
+    BCMCLI_MAKE_CMD_NOPARM(dir, "gpon_set_per_vlan_mapping_method", "gpon set per vlan mapping method", user_appl_gpon_set_ds_per_vlan_mapping_method);
+    BCMCLI_MAKE_CMD_NOPARM(dir, "gpon_set_us_flow_configuration", "gpon set us flow configuration", user_appl_gpon_set_us_flow_configuration);
+    BCMCLI_MAKE_CMD_NOPARM(dir, "gpon_send_omci_packet", "appl gpon send omci packet", user_appl_gpon_send_omci_packet);
+    BCMCLI_MAKE_CMD_NOPARM(dir, "gpon_send_cpu_packets_over_gem_ports", "gpon send cpu packets over gem ports", user_appl_gpon_send_cpu_packets_over_gem_ports);
+    BCMCLI_MAKE_CMD_NOPARM(dir, "gpon_configure_and_activate_pon", "configure and activate pon", user_appl_gpon_configure_and_activate_pon);
+    BCMCLI_MAKE_CMD_NOPARM(dir, "gpon_config_and_activate_onu", "config and activate onu", user_appl_gpon_config_and_activate_onu);
+    BCMCLI_MAKE_CMD_NOPARM(dir, "epon_get_all_link_alarms", "retrieve all link alarms", user_appl_epon_get_all_link_alarms);
+#endif
+    return BCM_ERR_OK;
+}
+
diff --git a/bcm68620_release/release/host_reference/user_appl/bcmolt_user_appl_ex_cli.h b/bcm68620_release/release/host_reference/user_appl/bcmolt_user_appl_ex_cli.h
new file mode 100644
index 0000000..1f5e544
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/bcmolt_user_appl_ex_cli.h
@@ -0,0 +1,38 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef _BCMOLT_USER_APPL_EX_CLI_H_
+#define _BCMOLT_USER_APPL_EX_CLI_H_
+
+#include <bcmos_system.h>
+#include <bcmolt_msg.h>
+
+bcmos_errno bcmolt_user_appl_ex_cli_init(void);
+
+#endif
diff --git a/bcm68620_release/release/host_reference/user_appl/bcmolt_user_appl_gpon_utils.c b/bcm68620_release/release/host_reference/user_appl/bcmolt_user_appl_gpon_utils.c
new file mode 100644
index 0000000..ad8d4a7
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/bcmolt_user_appl_gpon_utils.c
@@ -0,0 +1,768 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#include <bcmolt_host_api.h>
+#include "bcmolt_user_appl_gpon_utils.h"
+#include <bcmolt_dev_selector.h>
+
+static bcmcli_entry *gpon_utils_cli_dir;
+static bcmcli_entry *gpon_utils_cli_top_dir;
+static bcmos_bool gpon_utils_is_registered;
+
+static bcmos_errno bcmolt_user_appl_gpon_utils_create(bcmcli_entry *top_dir);
+
+#define MAX_GEM_PORTS_FOR_SEND     64
+#define MAX_ONUS_FOR_SEND          64
+#define MAX_PACKET_SIZE            2048
+
+typedef enum
+{
+    GENERATED_PACKET_PATTERN_BYTE_CYCLE,
+    GENERATED_PACKET_PATTERN_WORD_CYCLE,
+    GENERATED_PACKET_PATTERN_CONST
+} generated_packet_pattern;
+
+typedef enum
+{
+    PON_MODE_GPON,
+    PON_MODE_XGPON,
+    PON_MODE_INVALID
+} pon_mode;
+
+static uint8_t saved_packet[MAX_PACKET_SIZE];
+static bcmolt_packet_type saved_packet_type;
+static bcmos_bool saved_packet_calc_crc;
+static uint16_t saved_packet_len = 0;
+
+static void gpon_utils_cli_dir_cli_destroy(void)
+{
+    if (gpon_utils_cli_dir)
+    {
+        bcmcli_token_destroy(gpon_utils_cli_dir);
+        gpon_utils_cli_dir = NULL;
+    }
+}
+
+/* Current device change indication */
+static void bcmolt_user_appl_gpon_utils_device_change_ind(bcmcli_session *session, bcmolt_devid dev)
+{
+    bcmolt_system_mode system_mode;
+    bcmos_errno err = bcmolt_system_mode_get(dev, &system_mode);
+
+    if (err != BCM_ERR_OK)
+    {
+        bcmcli_session_print(session, "Error device Id\n");
+        return;
+    }
+
+    if (system_mode == BCMOLT_SYSTEM_MODE_GPON__16_X ||
+        system_mode == BCMOLT_SYSTEM_MODE_GPON__8_X ||
+        system_mode == BCMOLT_SYSTEM_MODE_GPON__4_X ||
+        system_mode == BCMOLT_SYSTEM_MODE_XGPON_1__8_X ||
+        system_mode == BCMOLT_SYSTEM_MODE_XGPON_1__4_X ||
+        system_mode == BCMOLT_SYSTEM_MODE_XGS__2_X_10_G ||
+        system_mode == BCMOLT_SYSTEM_MODE_NGPON2__2_X_10_G)
+    {
+        bcmcli_session_print(session, "Building gpon_utils CLI for device %d\n", dev);
+
+        err = bcmolt_user_appl_gpon_utils_create(gpon_utils_cli_top_dir);
+        if (err)
+        {
+            bcmcli_session_print(session, "Error building gpon_utils CLI\n");
+        }
+    }
+    else
+    {
+        gpon_utils_cli_dir_cli_destroy();
+    }
+}
+
+static inline pon_mode pon_mode_get(bcmolt_pon_ni pon_id)
+{
+    bcmolt_system_mode system_mode;
+    bcmos_errno err = bcmolt_system_mode_get(current_device, &system_mode);
+    if (err != BCM_ERR_OK)
+    {
+        return PON_MODE_INVALID;
+    }
+
+    if (system_mode == BCMOLT_SYSTEM_MODE_GPON_8_XGPON_4_X_COEXISTENCE)
+    {
+        /* special handling for the 8x GPON / 4x XGPON co-existence mode */
+        return pon_id < 8 ? PON_MODE_XGPON : PON_MODE_GPON;
+    }
+    else if (bcmolt_obj_tag_valid_for_system_mode(system_mode, BCMOLT_OBJ_TAG_GPON))
+    {
+        return PON_MODE_GPON;
+    }
+    else if (bcmolt_obj_tag_valid_for_system_mode(system_mode, BCMOLT_OBJ_TAG_XGPON))
+    {
+        return PON_MODE_XGPON;
+    }
+    else
+    {
+        return PON_MODE_INVALID;
+    }
+}
+
+static bcmos_errno build_packet(bcmcli_session *session, bcmolt_packet_type type)
+{
+    uint16_t i;
+    bcmos_bool calc_crc = (bcmos_bool)bcmcli_find_named_parm(session, "calc_crc")->value.unumber;
+    uint16_t packet_size = (uint16_t)bcmcli_find_named_parm(session, "packet_size")->value.unumber;
+    generated_packet_pattern pattern = 
+        (generated_packet_pattern)bcmcli_find_named_parm(session, "pattern")->value.unumber;
+    uint8_t const_value = (uint8_t)bcmcli_find_named_parm(session, "const_value")->value.unumber;
+    uint16_t data_offset;
+    
+    /* save packet type / size / CRC flag */
+    saved_packet_type = type;
+    saved_packet_len = packet_size;
+    saved_packet_calc_crc = calc_crc;
+
+    if (type == BCMOLT_PACKET_TYPE_CPU)
+    {
+        bcmos_mac_address eth_da = bcmcli_find_named_parm(session, "eth_da")->value.mac;
+        bcmos_mac_address eth_sa = bcmcli_find_named_parm(session, "eth_sa")->value.mac;
+
+        /* copy destination MAC */
+        memcpy(saved_packet, &eth_da, 6);
+
+        /* copy source MAC */
+        memcpy(&saved_packet[6], &eth_sa, 6);
+
+        /* write EtherType of 0000 */
+        memset(&saved_packet[12], 0, 2);
+
+        /* data starts after EtherType */
+        data_offset = 14;
+    }
+    else
+    {
+        /* fill the entire packet */
+        data_offset = 0;
+    }
+
+    /* fill the rest of the buffer using the specified data pattern */
+    switch (pattern)
+    {
+    case GENERATED_PACKET_PATTERN_BYTE_CYCLE:
+        const_value = 0;
+        for (i = data_offset; i < packet_size; i++)
+        {
+            saved_packet[i] = const_value++;
+        }
+        break;
+    case GENERATED_PACKET_PATTERN_WORD_CYCLE:
+        /* first 4 bytes = 00000000, next 4 = 11111111, next 4 = 22222222, etc */
+        const_value = 0;
+        for (i = data_offset; i < packet_size; i += 4)
+        {
+            uint16_t j;
+            for (j = i; j < i + 4 && j < packet_size; j++)
+            {
+                saved_packet[j] = const_value;
+            }
+            const_value = (const_value == 0xFF) ? 0 : const_value + 0x11;
+        }
+        break;
+    case GENERATED_PACKET_PATTERN_CONST:
+        for (i = data_offset; i < packet_size; i++)
+        {
+            saved_packet[i] = const_value;
+        }
+        break;
+    default:
+        bcmcli_session_print(session, "[Error] Invalid pattern: %u\n", pattern);
+        return BCM_ERR_INTERNAL;
+    }
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno build_cpu_packet_cb(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    bcmos_errno err = build_packet(session, BCMOLT_PACKET_TYPE_CPU);
+    if (err == BCM_ERR_OK)
+    {
+        bcmcli_session_print(session, "CPU packet buffer saved successfully\n");
+    }
+    else
+    {
+        bcmcli_session_print(session, "[Error] saving CPU packet buffer: %s\n", bcmos_strerror(err));
+    }
+    return err;
+}
+
+static bcmos_errno build_omci_packet_cb(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    bcmos_errno err = build_packet(session, BCMOLT_PACKET_TYPE_OMCI);
+    if (err == BCM_ERR_OK)
+    {
+        bcmcli_session_print(session, "OMCI packet buffer saved successfully\n");
+    }
+    else
+    {
+        bcmcli_session_print(session, "[Error] saving OMCI packet buffer: %s\n", bcmos_strerror(err));
+    }
+    return err;
+}
+
+static bcmos_errno send_packet_to_gpon_gem_list(bcmcli_session *session, uint16_t gem_count, bcmolt_gpon_gem_id *gems)
+{
+    uint16_t count = 1;
+    uint16_t i;
+    uint16_t gem_idx;
+    bcmos_errno err;
+    bcmcli_cmd_parm *parm;
+    bcmolt_devid device = (bcmolt_devid)bcmcli_find_named_parm(session, "device")->value.unumber;
+    bcmolt_pon_ni pon_ni = (bcmolt_pon_ni)bcmcli_find_named_parm(session, "pon_ni")->value.unumber;
+    bcmolt_gpon_ni_key pon_ni_key = { .pon_ni = pon_ni };
+    bcmolt_gpon_gem_id_list_u8_max_16 gem_port_list;
+    bcmolt_gpon_ni_cpu_packets proxy;
+    bcmolt_u8_list_u32_max_2048 buffer = { .len = saved_packet_len, .val = saved_packet };
+
+    if (saved_packet_len == 0)
+    {
+        bcmcli_session_print(session, "[Error] you must build/save a packet before you can send it\n");
+        return BCM_ERR_PARM;
+    }
+
+    parm = bcmcli_find_named_parm(session, "count");
+    if (parm != NULL)
+    {
+        count = (uint16_t)parm->value.unumber;
+    }
+
+    bcmcli_session_print(
+        session,
+        "Sending %u proxy packet%s to %u GEM port%s...\n",
+        count,
+        count == 1 ? "" : "s",
+        gem_count,
+        gem_count == 1 ? "" : "s");
+
+    /* build the proxy API message, except the GEM port list */
+    BCMOLT_PROXY_INIT(&proxy, gpon_ni, cpu_packets, pon_ni_key);
+    BCMOLT_PROXY_PROP_SET(&proxy, gpon_ni, cpu_packets, packet_type, saved_packet_type);
+    BCMOLT_PROXY_PROP_SET(&proxy, gpon_ni, cpu_packets, calc_crc, saved_packet_calc_crc);
+    BCMOLT_PROXY_PROP_SET(&proxy, gpon_ni, cpu_packets, buffer, buffer);
+
+    /* call the proxy API <count> times */
+    for (i = 0; i < count; i++)
+    {
+        /* we may need to split this up into multiple API calls (only 16 GEM ports are allowed per proxy API) */
+        for (gem_idx = 0; gem_idx < gem_count; gem_idx += 16)
+        {
+            gem_port_list.len = MIN(16, gem_count - gem_idx);
+            gem_port_list.val = &gems[gem_idx];
+            BCMOLT_PROXY_PROP_SET(&proxy, gpon_ni, cpu_packets, gem_port_list, gem_port_list);
+
+            err = bcmolt_proxy_send(device, &proxy.hdr);
+            if (err != BCM_ERR_OK)
+            {
+                bcmcli_session_print(
+                    session,
+                    "[Error] proxy send: packet index %u GEM index %u: %s\n",
+                    i,
+                    gem_idx,
+                    bcmos_strerror(err));
+                return err;
+            }
+        }
+    }
+
+    bcmcli_session_print(session, "%u proxy packet%s sent successfully!\n", count, count == 1 ? "" : "s");
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno send_packet_to_xgpon_gem_list(bcmcli_session *session, uint16_t gem_count, bcmolt_xgpon_gem_id *gems)
+{
+    uint16_t count = 1;
+    uint16_t i;
+    uint16_t gem_idx;
+    bcmos_errno err;
+    bcmcli_cmd_parm *parm;
+    bcmolt_devid device = (bcmolt_devid)bcmcli_find_named_parm(session, "device")->value.unumber;
+    bcmolt_pon_ni pon_ni = (bcmolt_pon_ni)bcmcli_find_named_parm(session, "pon_ni")->value.unumber;
+    bcmolt_xgpon_ni_key pon_ni_key = { .pon_ni = pon_ni };
+    bcmolt_xgpon_gem_id_list_u8_max_16 gem_port_list;
+    bcmolt_xgpon_ni_cpu_packets proxy;
+    bcmolt_u8_list_u32_max_2048 buffer = { .len = saved_packet_len, .val = saved_packet };
+
+    if (saved_packet_len == 0)
+    {
+        bcmcli_session_print(session, "[Error] you must build/save a packet before you can send it\n");
+        return BCM_ERR_PARM;
+    }
+
+    parm = bcmcli_find_named_parm(session, "count");
+    if (parm != NULL)
+    {
+        count = (uint16_t)parm->value.unumber;
+    }
+
+    bcmcli_session_print(
+        session,
+        "Sending %u proxy packet%s to %u GEM port%s...\n",
+        count,
+        count == 1 ? "" : "s",
+        gem_count,
+        gem_count == 1 ? "" : "s");
+
+    /* build the proxy API message, except the GEM port list */
+    BCMOLT_PROXY_INIT(&proxy, xgpon_ni, cpu_packets, pon_ni_key);
+    BCMOLT_PROXY_PROP_SET(&proxy, xgpon_ni, cpu_packets, packet_type, saved_packet_type);
+    BCMOLT_PROXY_PROP_SET(&proxy, xgpon_ni, cpu_packets, calc_crc, saved_packet_calc_crc);
+    BCMOLT_PROXY_PROP_SET(&proxy, xgpon_ni, cpu_packets, buffer, buffer);
+
+    /* call the proxy API <count> times */
+    for (i = 0; i < count; i++)
+    {
+        /* we may need to split this up into multiple API calls (only 16 GEM ports are allowed per proxy API) */
+        for (gem_idx = 0; gem_idx < gem_count; gem_idx += 16)
+        {
+            gem_port_list.len = MIN(16, gem_count - gem_idx);
+            gem_port_list.val = &gems[gem_idx];
+            BCMOLT_PROXY_PROP_SET(&proxy, xgpon_ni, cpu_packets, gem_port_list, gem_port_list);
+
+            err = bcmolt_proxy_send(device, &proxy.hdr);
+            if (err != BCM_ERR_OK)
+            {
+                bcmcli_session_print(
+                    session,
+                    "[Error] proxy send: packet index %u GEM index %u: %s\n",
+                    i,
+                    gem_idx,
+                    bcmos_strerror(err));
+                return err;
+            }
+        }
+    }
+
+    bcmcli_session_print(session, "%u proxy packet%s sent successfully!\n", count, count == 1 ? "" : "s");
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno send_to_gem_cb(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    bcmcli_cmd_parm *gem_parm = bcmcli_find_named_parm(session, "gem");
+    bcmolt_pon_ni pon_id = (bcmolt_pon_ni)bcmcli_find_named_parm(session, "pon_ni")->value.unumber;
+    uint16_t i;
+    pon_mode mode = pon_mode_get(pon_id);
+
+    if (mode == PON_MODE_GPON)
+    {
+        static bcmolt_gpon_gem_id gem_id_buf[MAX_GEM_PORTS_FOR_SEND];
+        for (i = 0; i < gem_parm->array_size; i++)
+        {
+            gem_id_buf[i] = (bcmolt_gpon_gem_id)gem_parm->values[i].unumber;
+        }
+        return send_packet_to_gpon_gem_list(session, (uint16_t)gem_parm->array_size, gem_id_buf);
+    } 
+    else if (mode == PON_MODE_XGPON)
+    {
+        static bcmolt_xgpon_gem_id gem_id_buf[MAX_GEM_PORTS_FOR_SEND];
+        for (i = 0; i < gem_parm->array_size; i++)
+        {
+            gem_id_buf[i] = (bcmolt_xgpon_gem_id)gem_parm->values[i].unumber;
+        }
+        return send_packet_to_xgpon_gem_list(session, (uint16_t)gem_parm->array_size, gem_id_buf);
+    }
+    else
+    {
+        bcmcli_session_print(session, "[Error] Invalid system mode\n");
+        return BCM_ERR_INTERNAL;
+    }
+}
+
+static bcmos_errno send_packet_to_gpon_onu_list(bcmcli_session *session, uint16_t onu_count, bcmolt_gpon_onu_id *onus)
+{
+    uint16_t count = 1;
+    uint16_t i;
+    uint16_t onu_idx;
+    bcmos_errno err;
+    bcmcli_cmd_parm *parm;
+    bcmolt_devid device = (bcmolt_devid)bcmcli_find_named_parm(session, "device")->value.unumber;
+    bcmolt_pon_ni pon_ni = (bcmolt_pon_ni)bcmcli_find_named_parm(session, "pon_ni")->value.unumber;
+
+    if (saved_packet_len == 0)
+    {
+        bcmcli_session_print(session, "[Error] you must build/save a packet before you can send it\n");
+        return BCM_ERR_PARM;
+    }
+
+    parm = bcmcli_find_named_parm(session, "count");
+    if (parm != NULL)
+    {
+        count = (uint16_t)parm->value.unumber;
+    }
+
+    bcmcli_session_print(
+        session,
+        "Sending %u proxy packet%s to %u ONU%s...\n",
+        count,
+        count == 1 ? "" : "s",
+        onu_count,
+        onu_count == 1 ? "" : "s");
+
+    /* call the proxy API (potentially several times) for each ONU */
+    for (onu_idx = 0; onu_idx < onu_count; onu_idx++)
+    {
+        bcmolt_gpon_onu_key onu_key = { .pon_ni = pon_ni, .onu_id = onus[onu_idx] };
+        bcmolt_u8_list_u32_max_2048 buffer = { .val = saved_packet };
+        bcmolt_gpon_onu_cpu_packets proxy;
+        uint16_t packets_per_proxy;
+
+        /* build the proxy API message, except the buffer/number of packets */
+        BCMOLT_PROXY_INIT(&proxy, gpon_onu, cpu_packets, onu_key);
+        BCMOLT_PROXY_PROP_SET(&proxy, gpon_onu, cpu_packets, packet_type, saved_packet_type);
+        BCMOLT_PROXY_PROP_SET(&proxy, gpon_onu, cpu_packets, calc_crc, saved_packet_calc_crc);
+        BCMOLT_PROXY_PROP_SET(&proxy, gpon_onu, cpu_packets, packet_size, saved_packet_len);
+
+        /* calculate the number of packets we can fit per invocation of the proxy API */
+        packets_per_proxy = MIN(count, 2048 / saved_packet_len);
+        BCMOLT_PROXY_PROP_SET(&proxy, gpon_onu, cpu_packets, number_of_packets, packets_per_proxy);
+
+        /* prepare the buffer data with several copies of the same packet in a row */
+        for (i = 1; i < packets_per_proxy; i++)
+        {
+            memcpy(&saved_packet[i * saved_packet_len], saved_packet, saved_packet_len); 
+        }
+
+        /* call the proxy API enough times to send the requested number of packets */
+        for (i = 0; i < count; i += packets_per_proxy)
+        {
+            uint16_t number_of_packets = MIN(packets_per_proxy, count - i);
+            BCMOLT_PROXY_PROP_SET(&proxy, gpon_onu, cpu_packets, number_of_packets, number_of_packets);
+
+            buffer.len = number_of_packets * saved_packet_len;
+            BCMOLT_PROXY_PROP_SET(&proxy, gpon_onu, cpu_packets, buffer, buffer);
+
+            err = bcmolt_proxy_send(device, &proxy.hdr);
+            if (err != BCM_ERR_OK)
+            {
+                bcmcli_session_print(
+                    session,
+                    "[Error] proxy send: ONU %u packet index %u: %s\n",
+                    onus[onu_idx],
+                    i,
+                    bcmos_strerror(err));
+                return err;
+            }
+        }
+    }
+
+    bcmcli_session_print(session, "%u proxy packet%s sent successfully!\n", count, count == 1 ? "" : "s");
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno send_packet_to_xgpon_onu_list(bcmcli_session *session, uint16_t onu_count, bcmolt_xgpon_onu_id *onus)
+{
+    uint16_t count = 1;
+    uint16_t i;
+    uint16_t onu_idx;
+    bcmos_errno err;
+    bcmcli_cmd_parm *parm;
+    bcmolt_devid device = (bcmolt_devid)bcmcli_find_named_parm(session, "device")->value.unumber;
+    bcmolt_pon_ni pon_ni = (bcmolt_pon_ni)bcmcli_find_named_parm(session, "pon_ni")->value.unumber;
+
+    if (saved_packet_len == 0)
+    {
+        bcmcli_session_print(session, "[Error] you must build/save a packet before you can send it\n");
+        return BCM_ERR_PARM;
+    }
+
+    parm = bcmcli_find_named_parm(session, "count");
+    if (parm != NULL)
+    {
+        count = (uint16_t)parm->value.unumber;
+    }
+
+    bcmcli_session_print(
+        session,
+        "Sending %u proxy packet%s to %u ONU%s...\n",
+        count,
+        count == 1 ? "" : "s",
+        onu_count,
+        onu_count == 1 ? "" : "s");
+
+    /* call the proxy API (potentially several times) for each ONU */
+    for (onu_idx = 0; onu_idx < onu_count; onu_idx++)
+    {
+        bcmolt_xgpon_onu_key onu_key = { .pon_ni = pon_ni, .onu_id = onus[onu_idx] };
+        bcmolt_u8_list_u32_max_2048 buffer = { .val = saved_packet };
+        bcmolt_xgpon_onu_cpu_packets proxy;
+        uint16_t packets_per_proxy;
+
+        /* build the proxy API message, except the buffer/number of packets */
+        BCMOLT_PROXY_INIT(&proxy, xgpon_onu, cpu_packets, onu_key);
+        BCMOLT_PROXY_PROP_SET(&proxy, xgpon_onu, cpu_packets, packet_type, saved_packet_type);
+        BCMOLT_PROXY_PROP_SET(&proxy, xgpon_onu, cpu_packets, calc_crc, saved_packet_calc_crc);
+        BCMOLT_PROXY_PROP_SET(&proxy, xgpon_onu, cpu_packets, packet_size, saved_packet_len);
+
+        /* calculate the number of packets we can fit per invocation of the proxy API */
+        packets_per_proxy = MIN(count, 2048 / saved_packet_len);
+        BCMOLT_PROXY_PROP_SET(&proxy, xgpon_onu, cpu_packets, number_of_packets, packets_per_proxy);
+
+        /* prepare the buffer data with several copies of the same packet in a row */
+        for (i = 1; i < packets_per_proxy; i++)
+        {
+            memcpy(&saved_packet[i * saved_packet_len], saved_packet, saved_packet_len); 
+        }
+
+        /* call the proxy API enough times to send the requested number of packets */
+        for (i = 0; i < count; i += packets_per_proxy)
+        {
+            uint16_t number_of_packets = MIN(packets_per_proxy, count - i);
+            BCMOLT_PROXY_PROP_SET(&proxy, xgpon_onu, cpu_packets, number_of_packets, number_of_packets);
+
+            buffer.len = number_of_packets * saved_packet_len;
+            BCMOLT_PROXY_PROP_SET(&proxy, xgpon_onu, cpu_packets, buffer, buffer);
+
+            err = bcmolt_proxy_send(device, &proxy.hdr);
+            if (err != BCM_ERR_OK)
+            {
+                bcmcli_session_print(
+                    session,
+                    "[Error] proxy send: ONU %u packet index %u: %s\n",
+                    onus[onu_idx],
+                    i,
+                    bcmos_strerror(err));
+                return err;
+            }
+        }
+    }
+
+    bcmcli_session_print(session, "%u proxy packet%s sent successfully!\n", count, count == 1 ? "" : "s");
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno send_to_onu_cb(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    bcmcli_cmd_parm *onu_parm = bcmcli_find_named_parm(session, "onu");
+    bcmolt_pon_ni pon_id = (bcmolt_pon_ni)bcmcli_find_named_parm(session, "pon_ni")->value.unumber;
+    uint16_t i;
+    pon_mode mode = pon_mode_get(pon_id);
+
+    if (mode == PON_MODE_GPON)
+    {
+        static bcmolt_gpon_onu_id onu_id_buf[MAX_ONUS_FOR_SEND];
+        for (i = 0; i < onu_parm->array_size; i++)
+        {
+            onu_id_buf[i] = (bcmolt_gpon_onu_id)onu_parm->values[i].unumber;
+        }
+        return send_packet_to_gpon_onu_list(session, (uint16_t)onu_parm->array_size, onu_id_buf);
+    } 
+    else if (mode == PON_MODE_XGPON)
+    {
+        static bcmolt_xgpon_onu_id onu_id_buf[MAX_ONUS_FOR_SEND];
+        for (i = 0; i < onu_parm->array_size; i++)
+        {
+            onu_id_buf[i] = (bcmolt_xgpon_onu_id)onu_parm->values[i].unumber;
+        }
+        return send_packet_to_xgpon_onu_list(session, (uint16_t)onu_parm->array_size, onu_id_buf);
+    }
+    else
+    {
+        bcmcli_session_print(session, "[Error] Invalid system mode\n");
+        return BCM_ERR_STATE;
+    }
+}
+
+static void dump_saved_mac(bcmcli_session *session, uint16_t offset)
+{
+    uint16_t i;
+    for (i = 0; i < 6; i++)
+    {
+        if (i != 0)
+        {
+            bcmcli_session_print(session, ":");
+        }
+        bcmcli_session_print(session, "%02X", saved_packet[offset + i]);
+    }
+}
+
+static bcmos_errno dump_packet_cb(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    uint16_t i;
+    uint16_t data_offset;
+
+    if (saved_packet_len == 0)
+    {
+        bcmcli_session_print(session, "No packet has been built yet\n");
+        return BCM_ERR_OK;
+    }
+
+    bcmcli_session_print(session, "Saved packet parameters:\n");
+    bcmcli_session_print(session, "    Type: %s\n", saved_packet_type == BCMOLT_PACKET_TYPE_CPU ? "CPU" : "OMCI");
+    bcmcli_session_print(session, "    Length: %u\n", saved_packet_len);
+    bcmcli_session_print(session, "    Auto-calculate CRC: %s\n", saved_packet_calc_crc ? "yes" : "no");
+
+    if (saved_packet_type == BCMOLT_PACKET_TYPE_CPU)
+    {
+        bcmcli_session_print(session, "    Ethernet DA: ");
+        dump_saved_mac(session, 0);
+        bcmcli_session_print(session, "\n");
+
+        bcmcli_session_print(session, "    Ethernet SA: ");
+        dump_saved_mac(session, 6);
+        bcmcli_session_print(session, "\n");
+
+        bcmcli_session_print(session, "    EtherType: 0x%02X%02X\n", saved_packet[12], saved_packet[13]);
+        data_offset = 14;
+    }
+    else
+    {
+        data_offset = 0;
+    }
+
+    bcmcli_session_print(session, "Data bytes (starting at offset %u):", data_offset);
+    for (i = data_offset; i < saved_packet_len; i++)
+    {
+        if ((i - data_offset) % 16 == 0)
+        {
+            bcmcli_session_print(session, "\n    ");
+        }
+        else
+        {
+            bcmcli_session_print(session, " ");
+        }
+        bcmcli_session_print(session, "%02X", saved_packet[i]);
+    }
+    bcmcli_session_print(session, "\n");
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcmolt_user_appl_gpon_utils_init(bcmcli_entry *top_dir)
+{
+    bcmos_errno err = BCM_ERR_OK;
+
+    if (!gpon_utils_is_registered)
+    {
+        gpon_utils_is_registered = BCMOS_TRUE;
+
+        /* Subscribe for device change indication */
+        err = bcmolt_dev_sel_ind_register(bcmolt_user_appl_gpon_utils_device_change_ind);
+    }
+    return err ? err : bcmolt_user_appl_gpon_utils_create(top_dir);
+}
+
+static bcmos_errno bcmolt_user_appl_gpon_utils_create(bcmcli_entry *top_dir)
+{
+    static bcmcli_enum_val generated_packet_pattern_table[] =
+    {
+        { .name = "byte_cycle", .val = GENERATED_PACKET_PATTERN_BYTE_CYCLE },
+        { .name = "word_cycle", .val = GENERATED_PACKET_PATTERN_WORD_CYCLE },
+        { .name = "const",      .val = GENERATED_PACKET_PATTERN_CONST },
+        BCMCLI_ENUM_LAST
+    };
+
+    static bcmcli_parm_value gem_port_ids[MAX_GEM_PORTS_FOR_SEND];
+    static bcmcli_parm_value onu_ids[MAX_ONUS_FOR_SEND];
+
+    bcmcli_entry *dir;
+
+    if (bcmcli_dir_find(top_dir, "gpon"))
+    {
+        return BCM_ERR_OK;
+    }
+
+    gpon_utils_cli_dir_cli_destroy();
+
+    dir = bcmcli_dir_add(top_dir, "gpon", "Common GPON/XGPON functions", BCMCLI_ACCESS_ADMIN, NULL);
+    BCMOS_CHECK_RETURN_ERROR(!dir, BCM_ERR_NOMEM);
+
+    BCMCLI_MAKE_CMD(
+        dir,
+        "build_cpu_packet",
+        "Build and save CPU packet",
+        build_cpu_packet_cb,
+        BCMCLI_MAKE_PARM_ENUM("calc_crc", "Auto-calculate CRC", bcmcli_enum_bool_table, BCMCLI_PARM_FLAG_NONE),
+        BCMCLI_MAKE_PARM_RANGE(
+            "packet_size", "Full packet size", BCMCLI_PARM_UNUMBER, BCMCLI_PARM_FLAG_NONE, 0, MAX_PACKET_SIZE),
+        BCMCLI_MAKE_PARM_ENUM("pattern", "Background pattern", generated_packet_pattern_table, BCMCLI_PARM_FLAG_NONE),
+        BCMCLI_MAKE_PARM_RANGE("const_value", "Const value", BCMCLI_PARM_UNUMBER, BCMCLI_PARM_FLAG_NONE, 0, 0xFF),
+        BCMCLI_MAKE_PARM("eth_da", "Ethernet destination address", BCMCLI_PARM_MAC, BCMCLI_PARM_FLAG_NONE),
+        BCMCLI_MAKE_PARM("eth_sa", "Ethernet source address", BCMCLI_PARM_MAC, BCMCLI_PARM_FLAG_NONE));
+
+    BCMCLI_MAKE_CMD(
+        dir,
+        "build_omci_packet",
+        "Build and save OMCI packet",
+        build_omci_packet_cb,
+        BCMCLI_MAKE_PARM_ENUM("calc_crc", "Auto-calculate CRC", bcmcli_enum_bool_table, BCMCLI_PARM_FLAG_NONE),
+        BCMCLI_MAKE_PARM_RANGE(
+            "packet_size", "Full packet size", BCMCLI_PARM_UNUMBER, BCMCLI_PARM_FLAG_NONE, 0, MAX_PACKET_SIZE),
+        BCMCLI_MAKE_PARM_ENUM("pattern", "Background pattern", generated_packet_pattern_table, BCMCLI_PARM_FLAG_NONE),
+        BCMCLI_MAKE_PARM_RANGE("const_value", "Const value", BCMCLI_PARM_UNUMBER, BCMCLI_PARM_FLAG_NONE, 0, 0xFF));
+
+    BCMCLI_MAKE_CMD(
+        dir,
+        "send_to_gem",
+        "Send saved CPU/OMCI packet to GEM port(s)",
+        send_to_gem_cb,
+        BCMCLI_MAKE_PARM("device", "Device ID", BCMCLI_PARM_UNUMBER, BCMCLI_PARM_FLAG_NONE),
+        BCMCLI_MAKE_PARM("pon_ni", "PON NI", BCMCLI_PARM_UNUMBER, BCMCLI_PARM_FLAG_NONE),
+        BCMCLI_MAKE_PARM_ARRAY(
+            "gem",
+            "GEM port IDs, comma separated",
+            BCMCLI_PARM_UNUMBER,
+            BCMCLI_PARM_FLAG_NONE,
+            MAX_GEM_PORTS_FOR_SEND,
+            gem_port_ids),
+        BCMCLI_MAKE_PARM("count", "Number of packets (default 1)", BCMCLI_PARM_UNUMBER, BCMCLI_PARM_FLAG_OPTIONAL));
+
+    BCMCLI_MAKE_CMD(
+        dir,
+        "send_to_onu",
+        "Send saved CPU/OMCI packet to ONU(s) (OMCI GEM port)",
+        send_to_onu_cb,
+        BCMCLI_MAKE_PARM("device", "Device ID", BCMCLI_PARM_UNUMBER, BCMCLI_PARM_FLAG_NONE),
+        BCMCLI_MAKE_PARM("pon_ni", "PON NI", BCMCLI_PARM_UNUMBER, BCMCLI_PARM_FLAG_NONE),
+        BCMCLI_MAKE_PARM_ARRAY(
+            "onu",
+            "ONU IDs, comma separated",
+            BCMCLI_PARM_UNUMBER,
+            BCMCLI_PARM_FLAG_NONE,
+            MAX_ONUS_FOR_SEND,
+            onu_ids),
+        BCMCLI_MAKE_PARM("count", "Number of packets (default 1)", BCMCLI_PARM_UNUMBER, BCMCLI_PARM_FLAG_OPTIONAL));
+
+    BCMCLI_MAKE_CMD_NOPARM(
+        dir,
+        "dump_packet",
+        "Print saved CPU/OMCI packet data",
+        dump_packet_cb);
+
+    gpon_utils_cli_dir = dir;
+    gpon_utils_cli_top_dir = top_dir;
+    return BCM_ERR_OK;
+}
diff --git a/bcm68620_release/release/host_reference/user_appl/bcmolt_user_appl_gpon_utils.h b/bcm68620_release/release/host_reference/user_appl/bcmolt_user_appl_gpon_utils.h
new file mode 100644
index 0000000..b1380c9
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/bcmolt_user_appl_gpon_utils.h
@@ -0,0 +1,37 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef _BCMOLT_USER_APPL_GPON_UTILS_H_
+#define _BCMOLT_USER_APPL_GPON_UTILS_H_
+
+#include <bcmolt_host_api.h>
+
+bcmos_errno bcmolt_user_appl_gpon_utils_init(bcmcli_entry *top_dir);
+
+#endif
diff --git a/bcm68620_release/release/host_reference/user_appl/dpoe_sec/Makefile b/bcm68620_release/release/host_reference/user_appl/dpoe_sec/Makefile
new file mode 100644
index 0000000..8167e23
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/dpoe_sec/Makefile
@@ -0,0 +1,12 @@
+# DPoE Security
+
+ifeq ("$(ENABLE_CLI)", "y")
+
+	MOD_NAME = bcm_user_appl_dpoe_sec
+	MOD_TYPE = lib
+	MOD_DEPS = os host_api bcm_user_appl_epon_oam
+
+	srcs = bcmolt_user_appl_dpoe_sec.c dpoe_eap_tls.c dpoe_sec_fsm.c dpoe_sec_mka_fsm.c dpoe_sec_util.c mka.c
+
+endif
+
diff --git a/bcm68620_release/release/host_reference/user_appl/dpoe_sec/bcmolt_user_appl_dpoe_sec.c b/bcm68620_release/release/host_reference/user_appl/dpoe_sec/bcmolt_user_appl_dpoe_sec.c
new file mode 100644
index 0000000..14bcb12
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/dpoe_sec/bcmolt_user_appl_dpoe_sec.c
@@ -0,0 +1,136 @@
+/*
+  <:copyright-BRCM:2016:DUAL/GPL:standard
+
+  Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+  All Rights Reserved
+
+  Unless you and Broadcom execute a separate written software license
+  agreement governing use of this software, this software is licensed
+  to you under the terms of the GNU General Public License version 2
+  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+  with the following added to such license:
+
+  As a special exception, the copyright holders of this software give
+  you permission to link this software with independent modules, and
+  to copy and distribute the resulting executable under terms of your
+  choice, provided that you also meet, for each linked independent
+  module, the terms and conditions of the license of that module.
+  An independent module is a module which is not derived from this
+  software.  The special exception does not apply to any modifications
+  of the software.
+
+  Not withstanding the above, under no circumstances may you combine
+  this software in any way with any other Broadcom software provided
+  under a license other than the GPL, without Broadcom's express prior
+  written consent.
+
+  :>
+*/
+
+#include "bcmos_system.h"
+#include "bcmolt_model_types.h"
+#include "bcmolt_epon_oam_types.h"
+#include "bcmolt_user_appl_dpoe_sec.h"
+#include "dpoe_sec_fsm.h"
+
+static bcmos_bool is_running = BCMOS_FALSE;
+
+static bcmos_bool cert_authority_trust_placeholder(dpoe_sec_link_rec* link_rec)
+{
+    BCM_LOG(INFO, dpoe_sec_log_id[link_rec->device], "This function should validate the certificate information stored in the link record and decide whether to accept this authentication.\n");
+    return BCMOS_TRUE;
+}
+
+static void fsm_complete_placeholder(bcmolt_devid device, bcmolt_epon_link_key link_key, bcmos_errno status)
+{
+    if (status == BCM_ERR_OK)
+    {
+        BCM_LOG(INFO, dpoe_sec_log_id[device], "The DPoE Security FSM completed successfully. This link can now be configured for service.\n");
+    }
+    else
+    {
+        BCM_LOG(INFO, dpoe_sec_log_id[device], "The DPoE Security FSM failed due to %s (%d). Appropriate action should be taken to correct this error.\n", bcmos_strerror(status), status);
+    }
+}
+
+#ifdef ENABLE_CLI
+static bcmos_errno dpoe_sec_cli_auth(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    bcmolt_epon_link_key link_key;
+    dpoe_sec_fsm_start_data cfg;
+
+    link_key.epon_ni = (bcmolt_epon_ni)bcmcli_find_named_parm(session, "pon")->value.unumber;
+    link_key.mac_address = bcmcli_find_named_parm(session, "onu")->value.mac;
+    cfg.enc_mode = (bcmolt_epon_oam_dpoe_encryption_mode)bcmcli_find_named_parm(session, "mode")->value.enum_val;
+    cfg.auth = BCMOS_TRUE;
+
+    return dpoe_sec_fsm_link_start(current_device, link_key, &cfg);
+}
+#endif
+
+void bcmolt_user_appl_dpoe_sec_cli_init(bcmcli_entry *top_dir)
+{
+#ifdef ENABLE_CLI
+    static const char *dir_name = "dpoe_sec";
+
+    if (bcmcli_dir_find(top_dir, dir_name))
+    {
+        return;
+    }
+
+    bcmcli_entry *dpoe_sec_dir = bcmcli_dir_add(top_dir, dir_name, "DPoE Security", BCMCLI_ACCESS_ADMIN, NULL);
+    BUG_ON(NULL == dpoe_sec_dir);
+
+    static bcmcli_enum_val enc_mode_table[] =
+    {
+        {"none", (long)BCMOLT_EPON_OAM_DPOE_ENCRYPTION_MODE_NONE},
+        {"1down", (long)BCMOLT_EPON_OAM_DPOE_ENCRYPTION_MODE_ONE_DOWN},
+        {"10down", (long)BCMOLT_EPON_OAM_DPOE_ENCRYPTION_MODE_TEN_DOWN},
+        {"10bi", (long)BCMOLT_EPON_OAM_DPOE_ENCRYPTION_MODE_TEN_BI},
+        BCMCLI_ENUM_LAST
+    };
+
+    BCMCLI_MAKE_CMD(dpoe_sec_dir, "auth", "Authenticate ONU", dpoe_sec_cli_auth,
+        BCMCLI_MAKE_PARM("pon", "PON NI", BCMCLI_PARM_UDECIMAL, BCMCLI_PARM_FLAG_NONE),
+        BCMCLI_MAKE_PARM("onu", "ONU MAC", BCMCLI_PARM_MAC, BCMCLI_PARM_FLAG_NONE),
+        BCMCLI_MAKE_PARM_ENUM("mode", "Encryption mode", enc_mode_table, BCMCLI_PARM_FLAG_NONE));
+#endif
+}
+
+void bcmolt_user_appl_dpoe_sec_process_proxy_rx(bcmolt_devid device_id, bcmolt_proxy_rx *proxy_rx)
+{
+    const bcmolt_epon_link_frame_captured *cap = (bcmolt_epon_link_frame_captured*)proxy_rx;
+
+    if ((BCMOLT_OBJ_ID_EPON_LINK == proxy_rx->hdr.obj_type) &&
+        (BCMOLT_EPON_LINK_PROXY_RX_ID_FRAME_CAPTURED == proxy_rx->hdr.subgroup))
+    {
+        if ((cap->data.frame.val[12] == 0x88) &&
+            (cap->data.frame.val[13] == 0x09) &&
+            (cap->data.frame.val[14] == 0x03))
+        {
+            uint8_t *frame_copy;
+
+            frame_copy = bcmos_alloc(cap->data.frame.len);
+            memcpy(frame_copy, cap->data.frame.val, cap->data.frame.len);
+
+            dpoe_sec_fsm_link_rx_oam(device_id, cap->key, frame_copy, cap->data.frame.len);
+        }
+    }
+    else
+    {
+        return; /* not a frame captured on a link - ignore */
+    }
+}
+
+void bcmolt_user_appl_dpoe_sec_init(void)
+{
+    if (is_running)
+    {
+        return;
+    }
+
+    dpoe_sec_fsm_init(cert_authority_trust_placeholder, fsm_complete_placeholder);
+
+    is_running = BCMOS_TRUE;
+}
+
diff --git a/bcm68620_release/release/host_reference/user_appl/dpoe_sec/bcmolt_user_appl_dpoe_sec.h b/bcm68620_release/release/host_reference/user_appl/dpoe_sec/bcmolt_user_appl_dpoe_sec.h
new file mode 100644
index 0000000..6872f8c
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/dpoe_sec/bcmolt_user_appl_dpoe_sec.h
@@ -0,0 +1,43 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef _BCMOLT_USER_APPL_DPOE_SEC_H_
+#define _BCMOLT_USER_APPL_DPOE_SEC_H_
+
+#include "bcmcli.h"
+
+void bcmolt_user_appl_dpoe_sec_process_proxy_rx(bcmolt_devid device_id, bcmolt_proxy_rx *proxy_rx);
+
+void bcmolt_user_appl_dpoe_sec_cli_init(bcmcli_entry *top_dir);
+
+void bcmolt_user_appl_dpoe_sec_init(void);
+
+#endif /* _BCMOLT_USER_APPL_DPOE_SEC_H_ */
+
+
diff --git a/bcm68620_release/release/host_reference/user_appl/dpoe_sec/dpoe_eap_tls.c b/bcm68620_release/release/host_reference/user_appl/dpoe_sec/dpoe_eap_tls.c
new file mode 100644
index 0000000..22ea80a
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/dpoe_sec/dpoe_eap_tls.c
@@ -0,0 +1,1483 @@
+/*
+  <:copyright-BRCM:2016:DUAL/GPL:standard
+
+  Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+  All Rights Reserved
+
+  Unless you and Broadcom execute a separate written software license
+  agreement governing use of this software, this software is licensed
+  to you under the terms of the GNU General Public License version 2
+  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+  with the following added to such license:
+
+  As a special exception, the copyright holders of this software give
+  you permission to link this software with independent modules, and
+  to copy and distribute the resulting executable under terms of your
+  choice, provided that you also meet, for each linked independent
+  module, the terms and conditions of the license of that module.
+  An independent module is a module which is not derived from this
+  software.  The special exception does not apply to any modifications
+  of the software.
+
+  Not withstanding the above, under no circumstances may you combine
+  this software in any way with any other Broadcom software provided
+  under a license other than the GPL, without Broadcom's express prior
+  written consent.
+
+  :>
+*/
+
+#include "dpoe_eap_tls.h"
+#include "bcmolt_buf.h"
+#include "dpoe_sec_fsm.h"
+
+/* The destination multicast MAC address for EAPOL packets. */
+static const bcmos_mac_address eapol_dst_mac = { { 0x01, 0x80, 0xc2, 0x00, 0x00, 0x03 } };
+
+/* The length of the RSA key used in the server_key_exchange TLS message sent to the ONU during DPoE bi-directional
+   authentication. */
+#define DPOE_BI_RSA_KEY_SIZE 2048
+
+/* 2 1200 byte certs + some overhead.... */
+#define EAPOL_PKT_SIZE 5000
+
+typedef enum
+{
+    EAP_CODE_REQUEST = 1,
+    EAP_CODE_RESPONSE,
+    EAP_CODE_SUCCESS,
+    EAP_CODE_FAILURE
+} eap_code;
+
+typedef struct
+{
+    uint8_t eap_code;
+    uint8_t id;
+    uint16_t length;
+} eap_frame;
+
+#define EAP_FRAME_SIZE 4
+
+typedef enum
+{
+    EAP_TYPE_IDENTITY = 1,
+    EAP_TYPE_NOTIFICATION,
+    EAP_TYPE_NAK,
+    EAP_TYPE_MD5,
+    EAP_TYPE_OTP,
+    EAP_TYPE_GENERIC_TOKEN_CARD,
+    EAP_TYPE_TLS = 13
+} eap_type;
+
+#define TLS_MAJOR_VERSION 3
+#define TLS_MINOR_VERSION 2
+
+/* First the EAP structures.... */
+typedef struct
+{
+    uint8_t auth_sub_type;
+    uint8_t eap_tls_flags;
+} eap_tls_hdr;
+
+#define EAP_TLS_HDR_SIZE 2
+
+#define EAP_HDR_SIZE (EAP_FRAME_SIZE + EAP_TLS_HDR_SIZE)
+
+typedef enum
+{
+    TLS_CHANGE_CIPHER_SPEC_ID = 20,
+    TLS_ALERT_ID = 21,
+    TLS_HANDSHAKE_ID = 22,
+    TLS_APPLICATION_DATA_ID = 23,
+} tls_content_type;
+
+typedef struct
+{
+    uint8_t content_type;
+    tls_protocol_version tls_version;
+    uint16_t tls_record_length;
+} tls_record_hdr;
+
+#define TLS_RECORD_HDR_SIZE (3 + PROTOCOL_VERSION_SIZE)
+
+#define EAP_TLS_FLAG_LENGTH_OFFSET 7
+#define EAP_TLS_FLAG_MORE_OFFSET 6
+#define EAP_TLS_FLAG_START_OFFSET 5
+#define EAP_TLS_FLAG_LENGTH_BIT (1U << EAP_TLS_FLAG_LENGTH_OFFSET)
+#define EAP_TLS_FLAG_MORE_BIT (1U << EAP_TLS_FLAG_MORE_OFFSET)
+#define EAP_TLS_FLAG_START_BIT (1U << EAP_TLS_FLAG_START_OFFSET)
+
+typedef struct
+{
+    eap_frame hdr;
+    eap_tls_hdr tls;
+} eap_msg_buf;
+
+typedef struct
+{
+    eapol_msg_hdr hdr;
+    eap_msg_buf eap_msg;
+} eapol_msg;
+
+/* Now the TLS records. */
+typedef struct tls_session_id
+{
+    uint8_t length;
+    uint8_t session_id[SIZE_OF_TLS_SESSION_ID];
+} tls_session_id;
+
+typedef enum
+{
+    cm_null = 0
+} compression_method;
+
+typedef struct
+{
+    uint8_t length;
+    uint8_t compression_method;
+} compression_methods;
+
+typedef enum
+{
+    RSA_SIGN                          = 1,
+    DSS_SIGN                          = 2,
+    RSA_FIXED_DH                      = 3,
+    DSS_FIXED_DH                      = 4,
+    RSA_EPHEMERAL_DH_RESERVED         = 5,
+    DSS_EPHEMERAL_DH_RESERVED         = 6,
+    FORTEZZA_DMS_RESERVED             = 20,
+} client_certificate_type;
+
+/* For 2048 bit RSA key */
+#define SIZE_OF_RSA_MODULUS 256
+#define SIZE_OF_RSA_EXPONENT 3
+
+typedef enum
+{
+    HS_HELLO_REQUEST = 0,
+    HS_CLIENT_HELLO = 1,
+    HS_SERVER_HELLO = 2,
+    HS_CERTIFICATE = 11,
+    HS_SERVER_KEY_EXCHANGE = 12,
+    HS_CERTIFICATE_REQUEST = 13,
+    HS_SERVER_HELLO_DONE = 14,
+    HS_CERTIFICATE_VERIFY = 15,
+    HS_CLIENT_KEY_EXCHANGE = 16,
+    HS_FINISHED = 20,
+} handshake_type;
+
+typedef struct
+{
+    uint8_t msg_id;
+    uint32_t msg_length; /* actually U24 */
+} tls_handshake;
+
+#define TLS_HANDSHAKE_SIZE 4
+
+typedef struct
+{
+    uint8_t *eapol;
+    uint8_t *eap;
+    uint8_t *eap_tls;
+    uint8_t *tls_rec;
+} eap_length_fields;
+
+static f_dpoe_sec_cert_trust_cb _cert_trust;
+static f_dpoe_sec_auth_cb _auth_complete;
+
+static void _buffer_hash_data(dpoe_sec_link_rec *link_rec, const uint8_t *buf, uint32_t len)
+{
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(buf == NULL);
+
+    dpoe_sec_sha1_update(&link_rec->auth_ctrl.trans_data.sha1_hash, buf, len);
+    dpoe_sec_md5_update(&link_rec->auth_ctrl.trans_data.md5_hash, buf, len);
+}
+
+static void _dpoe_eap_tls_compute_master_session_key(auth_trans_data *trans_data)
+{
+    uint8_t seed[(2* COUNT_OF_RANDOM_BYTES)];
+    uint32_t seed_len = 0;
+
+    /* Parameter checks. */
+    BUG_ON(trans_data == NULL);
+
+    /* The seed to the PRF is the client random value concatenated with the server random value. */
+    memcpy(&seed[seed_len], trans_data->client_random, COUNT_OF_RANDOM_BYTES);
+    seed_len += COUNT_OF_RANDOM_BYTES;
+    memcpy(&seed[seed_len], trans_data->server_random, COUNT_OF_RANDOM_BYTES);
+    seed_len += COUNT_OF_RANDOM_BYTES;
+
+    dpoe_sec_prf_expand_4346(
+        trans_data->pre_master_secret,
+        sizeof(trans_data->pre_master_secret),
+        (const uint8_t *)"master secret",
+        strlen("master secret"),
+        seed,
+        seed_len,
+        trans_data->master_secret,
+        sizeof(trans_data->master_secret));
+    dpoe_sec_prf_expand_4346(
+        trans_data->master_secret,
+        sizeof(trans_data->master_secret),
+        (const uint8_t *)"client EAP encryption",
+        strlen("client EAP encryption"),
+        seed,
+        seed_len,
+        trans_data->key_material,
+        sizeof(trans_data->key_material));
+
+    memcpy(trans_data->master_session_key, trans_data->key_material, sizeof(trans_data->master_session_key));
+}
+
+static bcmos_bool _dpoe_eap_tls_prepare_security_data(dpoe_sec_link_rec *link_rec)
+{
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+
+    /* If bidirectional, compute the master session key and generate the RSA public/private key pair */
+    if (link_rec->cfg.enc_mode == BCMOLT_EPON_OAM_DPOE_ENCRYPTION_MODE_TEN_BI)
+    {
+        _dpoe_eap_tls_compute_master_session_key(&link_rec->auth_ctrl.trans_data);
+    }
+
+    return BCMOS_TRUE;
+}
+
+static bcmos_bool _dpoe_eap_tls_skip_length(bcmolt_buf *buf, uint32_t skip, uint8_t** len)
+{
+    *len = bcmolt_buf_snap_get(buf);
+    return bcmolt_buf_skip(buf, skip);
+}
+
+static bcmos_bool _dpoe_eap_tls_init_eap_hdr(
+    dpoe_sec_link_rec *link_rec,
+    bcmolt_buf *buf,
+    eap_code code,
+    eap_length_fields *lf)
+{
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(buf == NULL);
+
+    return
+        bcmolt_buf_write_mac_address(buf, eapol_dst_mac) &&
+        bcmolt_buf_write_mac_address(buf, link_rec->ni_mac) &&
+        bcmolt_buf_write_u16_be(buf, ETHERTYPE_EAPOL) &&
+        bcmolt_buf_write_u8(buf, EAPOL_PROTOCOL_VERSION_DPOE) &&
+        bcmolt_buf_write_u8(buf, EAPOL_TYPE_PACKET) &&
+        /* Eapol Length - we re-compute this after building the packet */
+        _dpoe_eap_tls_skip_length(buf, sizeof(uint16_t), &lf->eapol) &&
+        /* EAP layer headers */
+        bcmolt_buf_write_u8(buf, code) &&
+        bcmolt_buf_write_u8(buf, link_rec->auth_ctrl.current_packet_id++) &&
+        /* EAP length - again, computed when the packet is packed! */
+        _dpoe_eap_tls_skip_length(buf, sizeof(uint16_t), &lf->eap);
+}
+
+static bcmos_bool _dpoe_eap_tls_init_tls_hdr(bcmolt_buf *buf, uint8_t eapTlsFlags, eap_length_fields *lf)
+{
+    bcmos_bool rc = BCMOS_FALSE;
+
+    /* Parameter checks. */
+    BUG_ON(buf == NULL);
+
+    if (bcmolt_buf_write_u8(buf, EAP_TYPE_TLS) &&
+        bcmolt_buf_write_u8(buf, eapTlsFlags))
+    {
+        if ((eapTlsFlags & EAP_TLS_FLAG_LENGTH_BIT) == EAP_TLS_FLAG_LENGTH_BIT)
+        {
+            /* EAP-TLS length - computed at pack completion only allocate room for this if EapTlsFlagLengthBit is set
+               But if the EapTlsFlagLengthBit is set, we also write the TLS Record header. */
+            if (_dpoe_eap_tls_skip_length(buf, sizeof(uint32_t), &lf->eap_tls) &&
+                bcmolt_buf_write_u8(buf, TLS_HANDSHAKE_ID) &&
+                bcmolt_buf_write_u8(buf, TLS_MAJOR_VERSION) &&
+                bcmolt_buf_write_u8(buf, TLS_MINOR_VERSION) &&
+                /* Another length field, the TLS record length */
+                _dpoe_eap_tls_skip_length(buf, sizeof(uint16_t), &lf->tls_rec))
+            {
+                rc = BCMOS_TRUE;
+            }
+        }
+        else
+        {
+            rc = BCMOS_TRUE;
+        }
+    }
+
+    return rc;
+}
+
+static void _dpoe_eap_tls_pack_handshake_length(
+    dpoe_sec_link_rec *link_rec,
+    bcmolt_buf *buf,
+    uint8_t *start,
+    uint8_t *len)
+{
+    uint32_t rec_len;
+    uint8_t *end;
+
+    /* Now go back and fill in the length field.  This is the length of the TlsHandshake record */
+    end = bcmolt_buf_snap_get(buf);
+    rec_len = end - start;
+    bcmolt_buf_snap_restore(buf, len);
+    bcmolt_buf_write_u24(buf, uint32_to_24(rec_len - TLS_HANDSHAKE_SIZE));
+    bcmolt_buf_snap_restore(buf, end);
+    _buffer_hash_data(link_rec, start, rec_len);
+}
+
+static bcmos_bool _dpoe_eap_tls_pack_server_hello_hs(dpoe_sec_link_rec *link_rec, bcmolt_buf *buf)
+{
+    uint8_t *start;
+    uint8_t *len;
+
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(buf == NULL);
+
+    start = bcmolt_buf_snap_get(buf);
+    if (bcmolt_buf_write_u8(buf, HS_SERVER_HELLO) &&
+        (len = bcmolt_buf_snap_get(buf), bcmolt_buf_skip(buf, sizeof(uint24_t))) &&
+        bcmolt_buf_write_u8(buf, link_rec->auth_ctrl.version.major) &&
+        bcmolt_buf_write_u8(buf, link_rec->auth_ctrl.version.minor) &&
+        bcmolt_buf_write(buf, link_rec->auth_ctrl.trans_data.server_random, COUNT_OF_RANDOM_BYTES) &&
+        bcmolt_buf_write_u8(buf, COUNT_OF_RANDOM_BYTES) &&
+        bcmolt_buf_write(buf, link_rec->auth_ctrl.trans_data.server_random, COUNT_OF_RANDOM_BYTES) &&
+
+        /* Cipher Suites - we write 0 as the length of the Cipher Suites
+           Short circuit if using pre-release authentication */
+        ((link_rec->auth_ctrl.version.minor == 3) || bcmolt_buf_write_u16_be(buf, 0)) &&
+
+        /* CompressionMethods also write 0 as the length */
+        bcmolt_buf_write_u8(buf, 0))
+    {
+        _dpoe_eap_tls_pack_handshake_length(link_rec, buf, start, len);
+        return BCMOS_TRUE;
+    }
+    return BCMOS_FALSE;
+}
+
+static bcmos_bool _dpoe_eap_tls_pack_server_key_exchange_hs(dpoe_sec_link_rec *link_rec, bcmolt_buf *buf)
+{
+    uint8_t *start;
+    uint8_t *len;
+    uint8_t rsa_modulus[SIZE_OF_RSA_MODULUS] = {};
+    uint8_t rsa_exponent[SIZE_OF_RSA_EXPONENT] = {};
+
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(buf == NULL);
+
+    /* If not bidirectional, just return BCMOS_TRUE */
+    if (link_rec->cfg.enc_mode != BCMOLT_EPON_OAM_DPOE_ENCRYPTION_MODE_TEN_BI)
+    {
+        return BCMOS_TRUE;
+    }
+
+    /* Verify that the length of the public key (modulus) of the private key matches the expected length. Also, verify
+       that the modulus is successfully read from the RSA key. */
+    start = bcmolt_buf_snap_get(buf);
+    if ((dpoe_sec_rsa_public_get(link_rec->auth_ctrl.trans_data.rsa, rsa_modulus, rsa_exponent)) &&
+        bcmolt_buf_write_u8(buf, HS_SERVER_KEY_EXCHANGE) &&
+        (len = bcmolt_buf_snap_get(buf), bcmolt_buf_skip(buf, sizeof(uint24_t))) &&
+        bcmolt_buf_write(buf, rsa_modulus, sizeof(rsa_modulus)) &&
+        bcmolt_buf_write(buf, rsa_exponent, sizeof(rsa_exponent)))
+    {
+        _dpoe_eap_tls_pack_handshake_length(link_rec, buf, start, len);
+        return BCMOS_TRUE;
+    }
+    return BCMOS_FALSE;
+}
+
+static bcmos_bool _dpoe_eap_tls_pack_cert_req_hs(dpoe_sec_link_rec *link_rec, bcmolt_buf *buf)
+{
+    uint8_t *start;
+    uint8_t *len;
+
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(buf == NULL);
+
+    start = bcmolt_buf_snap_get(buf);
+    if (bcmolt_buf_write_u8(buf, HS_CERTIFICATE_REQUEST) &&
+        (len = bcmolt_buf_snap_get(buf), bcmolt_buf_skip(buf, sizeof(uint24_t))) &&
+        bcmolt_buf_write_u8(buf, 1) && /* length of 'Certificate Type' */
+        bcmolt_buf_write_u8(buf, RSA_SIGN) && /* Certificate Type */
+        bcmolt_buf_write_u16_be(buf, 0)) /* zero length for cert authorities */
+    {
+        _dpoe_eap_tls_pack_handshake_length(link_rec, buf, start, len);
+        return BCMOS_TRUE;
+    }
+    return BCMOS_FALSE;
+}
+
+static bcmos_bool _dpoe_eap_tls_pack_server_hello_done_hs(dpoe_sec_link_rec *link_rec, bcmolt_buf *buf)
+{
+    uint8_t *start;
+    uint8_t *len;
+
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(buf == NULL);
+
+    start = bcmolt_buf_snap_get(buf);
+    if (bcmolt_buf_write_u8(buf, HS_SERVER_HELLO_DONE) &&
+        (len = bcmolt_buf_snap_get(buf), bcmolt_buf_skip(buf, sizeof(uint24_t))))
+    {
+        _dpoe_eap_tls_pack_handshake_length(link_rec, buf, start, len);
+        return BCMOS_TRUE;
+    }
+    return BCMOS_FALSE;
+}
+
+static bcmos_bool _dpoe_eap_tls_pack_finished_hs(dpoe_sec_link_rec *link_rec, bcmolt_buf *buf)
+{
+    uint8_t *start;
+    uint8_t *len;
+
+    start = bcmolt_buf_snap_get(buf);
+    if (bcmolt_buf_write_u8(buf, HS_FINISHED) &&
+        (len = bcmolt_buf_snap_get(buf), bcmolt_buf_skip(buf, sizeof(uint24_t))))
+    {
+        _dpoe_eap_tls_pack_handshake_length(link_rec, buf, start, len);
+        return BCMOS_TRUE;
+    }
+    return BCMOS_FALSE;
+}
+
+static bcmos_bool _dpoe_eap_tls_pack_msg_lengths(bcmolt_buf *buf, uint8_t eap_tls_flags, eap_length_fields *lf)
+{
+    uint16_t eapol_length;
+    uint32_t eap_tls_length;
+    uint8_t *snap = bcmolt_buf_snap_get(buf);
+
+    /* Parameter checks. */
+    BUG_ON(buf == NULL);
+    BUG_ON(lf == NULL);
+
+    eapol_length = bcmolt_buf_get_used(buf) - EAPOL_MSG_HDR_SIZE;
+
+    /* Seems odd that these two would be the same. But eapolLength is defined as the length of the body fields of the
+       Eapol buffer, which does not include the Eapol header. EAP is different, the EAP length is define to include the
+       entire EAP packet, including the header. */
+    bcmolt_buf_snap_restore(buf, lf->eapol);
+    if (!bcmolt_buf_write_u16_be(buf, eapol_length))
+    {
+        bcmolt_buf_snap_restore(buf, snap);
+        return BCMOS_FALSE;
+    }
+
+    bcmolt_buf_snap_restore(buf, lf->eap);
+    if (!bcmolt_buf_write_u16_be(buf, eapol_length))
+    {
+        bcmolt_buf_snap_restore(buf, snap);
+        return BCMOS_FALSE;
+    }
+
+    if ((eap_tls_flags & EAP_TLS_FLAG_LENGTH_BIT) == EAP_TLS_FLAG_LENGTH_BIT)
+    {
+        /* The TLS message length - take away the EapTlsHdr, AND the EapMsgHdr which, surprisingly was not removed in
+           the previous step. */
+        eap_tls_length = eapol_length - (EAP_FRAME_SIZE + EAP_TLS_HDR_SIZE + sizeof(uint32_t));
+
+        bcmolt_buf_snap_restore(buf, lf->eap_tls);
+        if (!bcmolt_buf_write_u32_be(buf, eap_tls_length))
+        {
+            bcmolt_buf_snap_restore(buf, snap);
+            return BCMOS_FALSE;
+        }
+
+        bcmolt_buf_snap_restore(buf, lf->tls_rec);
+        if (!bcmolt_buf_write_u16_be(buf, (uint16_t)eap_tls_length - TLS_RECORD_HDR_SIZE))
+        {
+            bcmolt_buf_snap_restore(buf, snap);
+            return BCMOS_FALSE;
+        }
+    }
+
+    bcmolt_buf_snap_restore(buf, snap);
+    return BCMOS_TRUE;
+}
+
+static bcmos_errno _dpoe_eap_tls_pack_start(dpoe_sec_link_rec *link_rec, bcmolt_buf *buf)
+{
+    bcmos_errno rc = BCM_ERR_NOMEM;
+    uint8_t flags = EAP_TLS_FLAG_START_BIT;
+    eap_length_fields lf;
+
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(buf == NULL);
+
+    if (_dpoe_eap_tls_init_eap_hdr(link_rec, buf, EAP_CODE_REQUEST, &lf) &&
+        _dpoe_eap_tls_init_tls_hdr(buf, flags, &lf) &&
+        _dpoe_eap_tls_pack_msg_lengths(buf, flags, &lf))
+    {
+        rc = BCM_ERR_OK;
+    }
+
+    return rc;
+}
+
+static bcmos_bool _dpoe_eap_tls_send_cert_request(dpoe_sec_link_rec *link_rec)
+{
+    bcmos_bool rc = BCMOS_FALSE;
+    bcmos_errno err;
+    bcmolt_buf buf;
+    uint8_t *msg = NULL;
+    eap_length_fields lf;
+
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+
+    msg = bcmos_calloc(EAPOL_PKT_SIZE);
+    if (msg == NULL)
+    {
+        return BCMOS_FALSE;
+    }
+
+    /* Initialize the maximum supported length EAP-TLS message buffer. The various TLS records contained in an EAP-TLS
+       message are variable size. However, this can only be a combined maximum length. */
+    bcmolt_buf_init(&buf, EAPOL_PKT_SIZE, msg, BCMOLT_BUF_ENDIAN_FIXED);
+    if (_dpoe_eap_tls_init_eap_hdr(link_rec, &buf, EAP_CODE_REQUEST, &lf) &&
+        _dpoe_eap_tls_init_tls_hdr(&buf, EAP_TLS_FLAG_LENGTH_BIT, &lf))
+    {
+        /* The Cert request contains 3 or 4 TLS records (3 for DS-only and 4 for bi-directional). The TLS records are
+           ordered as:
+           - Server Hello
+           - Server Key Exchange (if bi-directional)
+           - Certificate Request
+           - Server Hello Done */
+        if (_dpoe_eap_tls_pack_server_hello_hs(link_rec, &buf) &&
+            _dpoe_eap_tls_pack_server_key_exchange_hs(link_rec, &buf) &&
+            _dpoe_eap_tls_pack_cert_req_hs(link_rec, &buf) &&
+            _dpoe_eap_tls_pack_server_hello_done_hs(link_rec, &buf))
+        {
+            _dpoe_eap_tls_pack_msg_lengths(&buf, EAP_TLS_FLAG_LENGTH_BIT, &lf);
+
+            /* Send the message */
+            err = dpoe_sec_send_eapol(link_rec->device, &link_rec->key, msg, bcmolt_buf_get_used(&buf));
+            if (err != BCM_ERR_OK)
+            {
+                bcmos_free(msg);
+                return BCMOS_FALSE;
+            }
+
+            /* Authentication has begun. */
+            link_rec->auth_ctrl.onu_auth_state = DPOE_ONU_AUTH_STATE_EAP_START;
+            rc = BCMOS_TRUE;
+        }
+    }
+
+    /* Free the message. */
+    bcmos_free(msg);
+
+    return rc;
+}
+
+static bcmos_errno _dpoe_eap_tls_send_finished_hs(dpoe_sec_link_rec *link_rec)
+{
+    bcmos_errno rc = BCM_ERR_OVERFLOW;
+    bcmolt_buf buf;
+    uint8_t *msg = NULL;
+    eap_length_fields lf;
+
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+
+    msg = bcmos_calloc(EAPOL_PKT_SIZE);
+    if (msg == NULL)
+    {
+        return BCM_ERR_NOMEM;
+    }
+
+    /* Initialize the EAP-TLS message buffer. */
+    bcmolt_buf_init(&buf, EAPOL_PKT_SIZE, msg, BCMOLT_BUF_ENDIAN_FIXED);
+    if (_dpoe_eap_tls_init_eap_hdr(link_rec, &buf, EAP_CODE_REQUEST, &lf) &&
+        _dpoe_eap_tls_init_tls_hdr(&buf, EAP_TLS_FLAG_LENGTH_BIT, &lf) &&
+        _dpoe_eap_tls_pack_finished_hs(link_rec, &buf))
+    {
+        _dpoe_eap_tls_pack_msg_lengths(&buf, EAP_TLS_FLAG_LENGTH_BIT, &lf);
+        /* No error detection here. We have already authenticated. this message is just for standards compliance */
+        rc = dpoe_sec_send_eapol(link_rec->device, &link_rec->key, msg, bcmolt_buf_get_used(&buf));
+    }
+
+    /* Free the message. */
+    bcmos_free(msg);
+
+    return rc;
+}
+
+static bcmos_errno _dpoe_eap_tls_send_result(dpoe_sec_link_rec *link_rec, eap_code result)
+{
+    uint8_t *msg;
+    bcmolt_buf buf;
+    bcmos_errno rc = BCM_ERR_INTERNAL;
+    eap_length_fields lf;
+
+    /* Parameter checks */
+    BUG_ON(link_rec == NULL);
+
+    msg = bcmos_calloc(EAPOL_PKT_SIZE);
+    if (msg == NULL)
+    {
+        return BCM_ERR_NOMEM;
+    }
+
+    /* Initialize the EAP-TLS message buffer. */
+    bcmolt_buf_init(&buf, EAPOL_PKT_SIZE, msg, BCMOLT_BUF_ENDIAN_FIXED);
+    /* Encode the EAP-Success message to the buffer. */
+    if (_dpoe_eap_tls_init_eap_hdr(link_rec, &buf, result, &lf) &&
+        _dpoe_eap_tls_pack_msg_lengths(&buf, 0, &lf))
+    {
+        rc = dpoe_sec_send_eapol(link_rec->device, &link_rec->key, msg, bcmolt_buf_get_used(&buf));
+    }
+
+    bcmos_free(msg);
+
+    return rc;
+}
+
+static bcmos_bool _dpoe_eap_tls_parse_certificate(dpoe_sec_link_rec *link_rec, bcmolt_buf *buf)
+{
+    bcmos_bool            rc = BCMOS_FALSE;
+    uint24_t length;
+
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(buf == NULL);
+
+    link_rec->auth_ctrl.certificate = bcmos_calloc(EAPOL_PKT_SIZE);
+    if (link_rec->auth_ctrl.certificate == NULL)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (bcmolt_buf_read_u24(buf, &length) &&
+        ((link_rec->auth_ctrl.certLen = (uint16_t)uint24_to_32(length)), (link_rec->auth_ctrl.certLen <= EAPOL_PKT_SIZE)) &&
+        bcmolt_buf_read(buf, link_rec->auth_ctrl.certificate, link_rec->auth_ctrl.certLen))
+    {
+        rc = BCMOS_TRUE;
+    }
+
+    return rc;
+}
+
+static bcmos_bool _dpoe_eap_tls_parse_client_key_exchange(dpoe_sec_link_rec *link_rec, bcmolt_buf *buf)
+{
+    bcmos_bool rc = BCMOS_FALSE;
+    uint16_t length;
+    uint8_t encrypted_buf[SIZE_OF_RSA_ENCRYPTED_BLOCK] = {};
+
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(buf == NULL);
+
+    if (bcmolt_buf_read_u16_be(buf, &length) &&
+        (length == (SIZE_OF_RSA_ENCRYPTED_BLOCK)) &&
+        bcmolt_buf_read(buf, encrypted_buf, sizeof(encrypted_buf)))
+    {
+        int val;
+
+        val = dpoe_sec_rsa_private_decrypt(
+            sizeof(encrypted_buf),
+            encrypted_buf,
+            link_rec->auth_ctrl.trans_data.pre_master_secret,
+            link_rec->auth_ctrl.trans_data.rsa);
+
+        if (val == SIZE_OF_PRE_MASTER_SECRET)
+        {
+            /* We now need the security data - we have the "client random", "server random", and "pre master secret". */
+            _dpoe_eap_tls_prepare_security_data(link_rec);
+            rc = BCMOS_TRUE;
+        }
+        else
+        {
+            DPOE_SEC_LINK_LOG(ERROR, link_rec, "RSA decrypt pre-master secret failed: %d\n", val);
+        }
+    }
+    else
+    {
+        DPOE_SEC_LINK_LOG(ERROR, link_rec, "Failed to parse client key exchange: %u\n", length);
+    }
+
+    return rc;
+}
+
+static bcmos_bool _dpoe_eap_tls_parse_cert_verify(dpoe_sec_link_rec *link_rec, bcmolt_buf *buf)
+{
+    uint16_t length;
+    bcmos_bool ret = BCMOS_FALSE;
+
+    if (bcmolt_buf_read_u16_be(buf, &length) &&
+        (length <= (2 * SIZE_OF_RSA_ENCRYPTED_BLOCK)))
+    {
+        bcmolt_buf cert_buf;
+        uint24_t temp;
+        const uint8_t *cert;
+        uint32_t cert_len = 0;
+        uint8_t cert_verify[sizeof(dpoe_sec_sha1_digest) + sizeof(dpoe_sec_md5_digest)];
+        uint8_t *enc_buf;
+        dpoe_sec_rsa_key *rsa;
+
+        bcmolt_buf_init(&cert_buf, link_rec->auth_ctrl.certLen, link_rec->auth_ctrl.certificate, BCMOLT_BUF_ENDIAN_FIXED);
+
+        /* Get the pointer to the ONU cert and its length */
+        bcmolt_buf_read_u24(&cert_buf, &temp);
+        cert_len = uint24_to_32(temp);
+        cert = bcmolt_buf_snap_get(&cert_buf);
+
+        enc_buf = bcmolt_buf_snap_get(buf);
+        bcmolt_buf_skip(buf, length);
+
+        /* Get the public key from the ONU cert. */
+        rsa = dpoe_sec_x509_pub_key_get(cert, cert_len);
+
+        /* decrypt the remainder of the buf with the ONU cert. */
+        if (rsa != NULL)
+        {
+            if (dpoe_sec_rsa_public_decrypt(length, enc_buf, cert_verify, rsa) >= 0)
+            {
+                /* RSA_size() returns the size of the modulus in bytes. Convert to bits. */
+                link_rec->auth_ctrl.onu_cert_key_size = dpoe_sec_rsa_size(rsa) * 8;
+
+                /* Compare the output (should be 36 bytes) to sha1/md5 messages digests If they match, we are good */
+                if ((memcmp(&cert_verify[0],
+                            link_rec->auth_ctrl.trans_data.md5_digest,
+                            sizeof(dpoe_sec_md5_digest)) == 0) &&
+                    (memcmp(&cert_verify[sizeof(dpoe_sec_md5_digest)],
+                            link_rec->auth_ctrl.trans_data.sha1_digest,
+                            sizeof(dpoe_sec_sha1_digest)) == 0))
+                {
+                    bcmolt_buf_init(&cert_buf, link_rec->auth_ctrl.certLen, link_rec->auth_ctrl.certificate, BCMOLT_BUF_ENDIAN_FIXED);
+
+                    /* Get the pointer to the ONU certificate. */
+                    bcmolt_buf_read_u24(&cert_buf, &temp);
+                    link_rec->auth_ctrl.onu_cert_len = uint24_to_32(temp);
+                    link_rec->auth_ctrl.onu_cert = bcmolt_buf_snap_get(&cert_buf);
+
+                    bcmolt_buf_skip(&cert_buf, link_rec->auth_ctrl.onu_cert_len);
+
+                    /* Get the pointer to the Manufacturer CA certificate. */
+                    bcmolt_buf_read_u24(&cert_buf, &temp);
+                    link_rec->auth_ctrl.mfg_cert_len = uint24_to_32(temp);
+                    link_rec->auth_ctrl.mfg_cert = bcmolt_buf_snap_get(&cert_buf);
+
+                    ret = BCMOS_TRUE;
+                }
+                else
+                {
+                    DPOE_SEC_LINK_LOG(ERROR, link_rec, "Cert Verify failed\n");
+                }
+            }
+            else
+            {
+                DPOE_SEC_LINK_LOG(ERROR, link_rec, "RSA public decrypt/verify failed\n");
+            }
+        }
+        else
+        {
+            DPOE_SEC_LINK_LOG(ERROR, link_rec, "Failed to retrieve RSA key\n");
+        }
+
+        dpoe_sec_rsa_key_free(rsa);
+    }
+
+    return ret;
+}
+
+static bcmos_bool _dpoe_eap_tls_parse_verify_data(dpoe_sec_link_rec *link_rec)
+{
+    bcmos_bool rc = BCMOS_FALSE;
+
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+
+    if (link_rec->auth_ctrl.version.minor == TLS_MINOR_VERSION)
+    {
+        /* This version of authentication does not parse verify data */
+        rc = BCMOS_TRUE;
+    }
+    return rc;
+}
+
+static bcmos_bool _dpoe_eap_tls_parse_client_hello(dpoe_sec_link_rec *link_rec, bcmolt_buf *buf)
+{
+    tls_protocol_version version;
+    tls_session_id session_id;
+
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(buf == NULL);
+
+    if (bcmolt_buf_read_u8(buf, &version.major) &&
+        (version.major == TLS_MAJOR_VERSION) &&
+        bcmolt_buf_read_u8(buf, &version.minor) &&
+        (version.minor >= TLS_MINOR_VERSION) &&
+        bcmolt_buf_read(buf, link_rec->auth_ctrl.trans_data.client_random, COUNT_OF_RANDOM_BYTES) &&
+        bcmolt_buf_read_u8(buf, &session_id.length) &&
+        (session_id.length <= sizeof(session_id.session_id)) &&
+        bcmolt_buf_read(buf, session_id.session_id, session_id.length))
+    {
+        compression_methods comp_methods;
+        uint16_t tlvLen;
+        uint8_t cipher_suites[2];
+        uint8_t *cm_snap = bcmolt_buf_snap_get(buf);
+
+        memset(&comp_methods, 0, sizeof(comp_methods));
+
+        /* Cipher Suites may be present -if so parse over it and it will be ignored. Still check that comp methods is
+           NULL */
+        if (bcmolt_buf_read_u16_be(buf, &tlvLen) && /* Cipher Suites */
+            (tlvLen <= sizeof(uint16_t)) &&
+            bcmolt_buf_read(buf, cipher_suites, tlvLen) &&
+            bcmolt_buf_read_u8(buf, &comp_methods.length) && /* Compression Methods */
+            (comp_methods.length == sizeof(comp_methods.compression_method)) &&
+            bcmolt_buf_read(buf, &comp_methods.compression_method, comp_methods.length) &&
+            (comp_methods.compression_method == cm_null) )
+        {
+            link_rec->auth_ctrl.version.major = version.major;
+            link_rec->auth_ctrl.version.minor = version.minor;
+            return BCMOS_TRUE;
+        }
+
+        /* No cipher suites, check that comp method is null */
+        memset(&comp_methods, 0, sizeof(comp_methods));
+        bcmolt_buf_snap_restore(buf, cm_snap);
+        if (bcmolt_buf_read_u8(buf, &comp_methods.length) &&  /* Compression Methods */
+           (comp_methods.length == sizeof(comp_methods.compression_method)) &&
+           bcmolt_buf_read(buf, &comp_methods.compression_method, comp_methods.length) &&
+           (comp_methods.compression_method == cm_null) )
+        {
+            link_rec->auth_ctrl.version.major = version.major;
+            link_rec->auth_ctrl.version.minor = version.minor;
+            return BCMOS_TRUE;
+        }
+
+        /* Ok we failed to decode what was sent as cipher suites and comp methods. Do we care? Absolutely Not! */
+        link_rec->auth_ctrl.version.major = version.major;
+        link_rec->auth_ctrl.version.minor = version.minor;
+        return BCMOS_TRUE;
+    }
+
+    return BCMOS_FALSE;
+}
+
+static bcmos_bool _dpoe_eap_tls_handle_client_hello_hs(dpoe_sec_link_rec *link_rec, bcmolt_buf *buf)
+{
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(buf == NULL);
+
+    if (_dpoe_eap_tls_parse_client_hello(link_rec, buf))
+    {
+        /* We now have the data, build the EAP session ID (see RFC 5216) */
+        link_rec->auth_ctrl.trans_data.session_id[0] = 0xd;
+        memcpy(
+            &link_rec->auth_ctrl.trans_data.session_id[1],
+            link_rec->auth_ctrl.trans_data.client_random,
+            COUNT_OF_RANDOM_BYTES);
+        memcpy(
+            &link_rec->auth_ctrl.trans_data.session_id[COUNT_OF_RANDOM_BYTES + 1],
+            link_rec->auth_ctrl.trans_data.server_random,
+            COUNT_OF_RANDOM_BYTES);
+
+        if (_dpoe_eap_tls_send_cert_request(link_rec))
+        {
+            link_rec->auth_ctrl.onu_auth_state = DPOE_ONU_AUTH_STATE_CERT_REQUEST;
+            return BCMOS_TRUE;
+        }
+    }
+
+    return BCMOS_FALSE;
+}
+
+static bcmos_bool _dpoe_eap_tls_handle_certificate_hs(dpoe_sec_link_rec *link_rec, bcmolt_buf *buf)
+{
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(buf == NULL);
+
+    if (_dpoe_eap_tls_parse_certificate(link_rec, buf))
+    {
+        if (link_rec->auth_ctrl.version.minor == TLS_MINOR_VERSION)
+        {
+            link_rec->auth_ctrl.onu_auth_state = DPOE_ONU_AUTH_STATE_CERT_RECEIVED;
+            return BCMOS_TRUE;
+        }
+    }
+    return BCMOS_FALSE;
+}
+
+/******************************************************************************/
+static bcmos_bool _dpoe_eap_tls_handle_client_key_exchange_hs(dpoe_sec_link_rec *link_rec, bcmolt_buf *buf)
+{
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(buf == NULL);
+
+    if (_dpoe_eap_tls_parse_client_key_exchange(link_rec, buf))
+    {
+        if (link_rec->auth_ctrl.version.minor == TLS_MINOR_VERSION)
+        {
+            link_rec->auth_ctrl.onu_auth_state = DPOE_ONU_AUTH_STATE_CLIENT_KEY_RECEIVED;
+            return BCMOS_TRUE;
+        }
+        else
+        {
+            DPOE_SEC_LINK_LOG(ERROR, link_rec, "Wrong TLS version in client key exchange: %u\n",
+                              link_rec->auth_ctrl.version.minor);
+        }
+    }
+    else
+    {
+        DPOE_SEC_LINK_LOG(ERROR, link_rec, "Failed to parse client key exchange\n");
+    }
+
+    return BCMOS_FALSE;
+}
+
+static bcmos_bool _dpoe_eap_tls_handle_cert_verify_hs(dpoe_sec_link_rec *link_rec, bcmolt_buf *buf)
+{
+    bcmos_bool success;
+
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(buf == NULL);
+
+    success = _dpoe_eap_tls_parse_cert_verify(link_rec, buf);
+
+    if (success)
+    {
+        link_rec->auth_ctrl.onu_auth_state = DPOE_ONU_AUTH_STATE_CERT_VALIDATED;
+    }
+    else
+    {
+        link_rec->auth_ctrl.onu_auth_state = DPOE_ONU_AUTH_STATE_FAILED;
+        if (_auth_complete != NULL)
+        {
+            _auth_complete(link_rec, BCM_ERR_ONU_ERR_RESP);
+        }
+    }
+
+    return success;
+}
+
+static bcmos_bool _dpoe_eap_tls_handle_finished_hs(dpoe_sec_link_rec *link_rec)
+{
+    bcmos_bool success;
+
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+
+    success = _dpoe_eap_tls_parse_verify_data(link_rec);
+
+    /* And send the final Finished Hs to the ONU */
+    if (link_rec->auth_ctrl.version.minor == TLS_MINOR_VERSION)
+    {
+        _dpoe_eap_tls_send_finished_hs(link_rec);
+    }
+
+    if (success)
+    {
+        if ((_cert_trust == NULL) || (_cert_trust(link_rec)))
+        {
+            link_rec->auth_ctrl.onu_auth_state = DPOE_ONU_AUTH_STATE_AUTHENTICATED;
+            _dpoe_eap_tls_send_result(link_rec, EAP_CODE_SUCCESS);
+            if (_auth_complete != NULL)
+            {
+                _auth_complete(link_rec, BCM_ERR_OK);
+            }
+        }
+        else
+        {
+            link_rec->auth_ctrl.onu_auth_state = DPOE_ONU_AUTH_STATE_FAILED;
+            _dpoe_eap_tls_send_result(link_rec, EAP_CODE_FAILURE);
+            success = BCMOS_FALSE;
+            if (_auth_complete != NULL)
+            {
+                _auth_complete(link_rec, BCM_ERR_INTERNAL);
+            }
+        }
+    }
+    else
+    {
+        /* Reset ALL the state variables! */
+        memset(&link_rec->auth_ctrl, 0, sizeof(link_rec->auth_ctrl));
+    }
+
+    return success;
+}
+
+static bcmos_bool _dpoe_eap_tls_alloc_tls_frag_buffer(onu_auth_control *auth_ctrl)
+{
+    /* Parameter checks. */
+    BUG_ON(auth_ctrl == NULL);
+
+    if (auth_ctrl->tls_frag_buffer == NULL)
+    {
+        auth_ctrl->tls_frag_buffer = bcmos_calloc(EAPOL_PKT_SIZE);
+        auth_ctrl->tls_frag_length = 0;
+        auth_ctrl->tls_total_length = 0;
+    }
+
+    if (auth_ctrl->tls_frag_buffer == NULL)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+static void _dpoe_eap_tls_free_tls_frag_buffer(onu_auth_control *auth_ctrl)
+{
+    /* Parameter checks. */
+    BUG_ON(auth_ctrl == NULL);
+
+    if (auth_ctrl->tls_frag_buffer != NULL)
+    {
+        bcmos_free(auth_ctrl->tls_frag_buffer);
+        auth_ctrl->tls_frag_buffer = NULL;
+        auth_ctrl->tls_frag_length = 0;
+        auth_ctrl->tls_total_length = 0;
+    }
+}
+
+static bcmos_errno _dpoe_eap_tls_send_tls_frag_ack_to_onu(dpoe_sec_link_rec *link_rec)
+{
+    bcmos_errno rc;
+    bcmolt_buf buf;
+    uint8_t *msg;
+    eap_length_fields lf;
+
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+
+    /* Allocate a message buffer */
+    msg = bcmos_calloc(EAPOL_PKT_SIZE);
+    if (NULL == msg)
+    {
+        return BCM_ERR_NOMEM;
+    }
+
+    /* Initialize the EAP-TLS buffer. */
+    bcmolt_buf_init(&buf, EAPOL_PKT_SIZE, msg, BCMOLT_BUF_ENDIAN_FIXED);
+    if (_dpoe_eap_tls_init_eap_hdr(link_rec, &buf, EAP_CODE_REQUEST, &lf) &&
+        _dpoe_eap_tls_init_tls_hdr(&buf, 0, &lf) &&
+        _dpoe_eap_tls_pack_msg_lengths(&buf, 0, &lf))
+    {
+        /* Send the message */
+        rc = dpoe_sec_send_eapol(link_rec->device, &link_rec->key, msg, bcmolt_buf_get_used(&buf));
+        if (rc != BCM_ERR_OK)
+        {
+            bcmos_free(msg);
+            return rc;
+        }
+    }
+    else
+    {
+        rc = BCM_ERR_OVERFLOW;
+    }
+
+    bcmos_free(msg);
+
+    return rc;
+}
+
+static bcmos_bool _dpoe_eap_tls_unpack_tls_handshake(bcmolt_buf *buf, tls_handshake* hs)
+{
+    uint24_t temp;
+    bcmos_bool rc = BCMOS_FALSE;
+
+    if (bcmolt_buf_read_u8(buf, &hs->msg_id) &&
+        bcmolt_buf_read_u24(buf, &temp))
+    {
+        hs->msg_length = uint24_to_32(temp);
+        rc = BCMOS_TRUE;
+    }
+
+    return rc;
+}
+
+static bcmos_errno _dpoe_eap_tls_run_auth_state_machine(dpoe_sec_link_rec *link_rec, bcmolt_buf *buf)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    uint8_t *hs_snap;
+    tls_handshake handshake;
+
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+
+    while (hs_snap = bcmolt_buf_snap_get(buf), _dpoe_eap_tls_unpack_tls_handshake(buf, &handshake))
+    {
+        bcmos_bool success = BCMOS_TRUE;
+
+        if (handshake.msg_length > EAPOL_PKT_SIZE)
+        {
+            DPOE_SEC_LINK_LOG(DEBUG, link_rec, "Handshake length is insane: msg %u, len %u\n",
+                              handshake.msg_id, handshake.msg_length);
+            return BCM_ERR_PARSE;
+        }
+
+        if ((handshake.msg_id == HS_CLIENT_HELLO) &&
+            (link_rec->auth_ctrl.onu_auth_state == DPOE_ONU_AUTH_STATE_EAP_START))
+        {
+            DPOE_SEC_LINK_LOG(DEBUG, link_rec, "EAP TLS RX msg %u in state %u\n",
+                              handshake.msg_id, link_rec->auth_ctrl.onu_auth_state);
+            _buffer_hash_data(link_rec, hs_snap, handshake.msg_length + TLS_HANDSHAKE_SIZE);
+            success = _dpoe_eap_tls_handle_client_hello_hs(link_rec, buf);
+            DPOE_SEC_LINK_LOG(DEBUG, link_rec, "New auth state %u\n", link_rec->auth_ctrl.onu_auth_state);
+        }
+        else if ((handshake.msg_id == HS_CERTIFICATE) &&
+                 (link_rec->auth_ctrl.onu_auth_state == DPOE_ONU_AUTH_STATE_CERT_REQUEST))
+        {
+            DPOE_SEC_LINK_LOG(DEBUG, link_rec, "EAP TLS RX msg %u in state %u\n",
+                              handshake.msg_id, link_rec->auth_ctrl.onu_auth_state);
+            _buffer_hash_data(link_rec, hs_snap, handshake.msg_length + TLS_HANDSHAKE_SIZE);
+            success = _dpoe_eap_tls_handle_certificate_hs(link_rec, buf);
+            DPOE_SEC_LINK_LOG(DEBUG, link_rec, "New auth state %u\n", link_rec->auth_ctrl.onu_auth_state);
+        }
+        else if ((handshake.msg_id == HS_CLIENT_KEY_EXCHANGE) &&
+                 (link_rec->auth_ctrl.onu_auth_state == DPOE_ONU_AUTH_STATE_CERT_RECEIVED))
+        {
+            DPOE_SEC_LINK_LOG(DEBUG, link_rec, "EAP TLS RX msg %u in state %u\n",
+                              handshake.msg_id, link_rec->auth_ctrl.onu_auth_state);
+            _buffer_hash_data(link_rec, hs_snap, handshake.msg_length + TLS_HANDSHAKE_SIZE);
+            success = _dpoe_eap_tls_handle_client_key_exchange_hs(link_rec, buf);
+            DPOE_SEC_LINK_LOG(DEBUG, link_rec, "New auth state %u\n", link_rec->auth_ctrl.onu_auth_state);
+        }
+        else if ((handshake.msg_id == HS_CERTIFICATE_VERIFY) &&
+                 ((link_rec->auth_ctrl.onu_auth_state == DPOE_ONU_AUTH_STATE_CERT_RECEIVED) ||
+                  (link_rec->auth_ctrl.onu_auth_state == DPOE_ONU_AUTH_STATE_CLIENT_KEY_RECEIVED)))
+
+        {
+            DPOE_SEC_LINK_LOG(DEBUG, link_rec, "EAP TLS RX msg %u in state %u\n",
+                              handshake.msg_id, link_rec->auth_ctrl.onu_auth_state);
+            dpoe_sec_sha1_final(link_rec->auth_ctrl.trans_data.sha1_digest, &link_rec->auth_ctrl.trans_data.sha1_hash);
+            dpoe_sec_md5_final(link_rec->auth_ctrl.trans_data.md5_digest, &link_rec->auth_ctrl.trans_data.md5_hash);
+            success = _dpoe_eap_tls_handle_cert_verify_hs(link_rec, buf);
+            DPOE_SEC_LINK_LOG(DEBUG, link_rec, "New auth state %u\n", link_rec->auth_ctrl.onu_auth_state);
+        }
+        else if ((handshake.msg_id == HS_FINISHED) &&
+                 (link_rec->auth_ctrl.onu_auth_state == DPOE_ONU_AUTH_STATE_CERT_VALIDATED))
+        {
+            DPOE_SEC_LINK_LOG(DEBUG, link_rec, "EAP TLS RX msg %u in state %u\n",
+                              handshake.msg_id, link_rec->auth_ctrl.onu_auth_state);
+            success = _dpoe_eap_tls_handle_finished_hs(link_rec);
+            DPOE_SEC_LINK_LOG(DEBUG, link_rec, "New auth state %u\n", link_rec->auth_ctrl.onu_auth_state);
+        }
+        else
+        {
+            DPOE_SEC_LINK_LOG(DEBUG, link_rec, "EAP TLS RX msg %u in state %u\n",
+                              handshake.msg_id, link_rec->auth_ctrl.onu_auth_state);
+            success = BCMOS_FALSE;
+        }
+
+        if (!success)
+        {
+            /* Something went wrong, just abort... */
+            DPOE_SEC_LINK_LOG(DEBUG, link_rec, "EAP TLS handshake processing failed: %u\n", handshake.msg_id);
+            rc = BCM_ERR_PARSE;
+        }
+    }
+
+    return rc;
+}
+
+static bcmos_bool _dpoe_eap_tls_unpack_tls_record_hdr(bcmolt_buf *buf, tls_record_hdr *msg)
+{
+    return bcmolt_buf_read_u8(buf, &msg->content_type) &&
+        bcmolt_buf_read_u8(buf, &msg->tls_version.major) &&
+        bcmolt_buf_read_u8(buf, &msg->tls_version.minor) &&
+        bcmolt_buf_read_u16_be(buf, &msg->tls_record_length);
+}
+
+static bcmos_errno _dpoe_eap_tls_process_tls_records(dpoe_sec_link_rec *link_rec)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcmolt_buf buf;
+    tls_record_hdr tls_hdr;
+
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+
+    bcmolt_buf_init(&buf, link_rec->auth_ctrl.tls_frag_length, link_rec->auth_ctrl.tls_frag_buffer, BCMOLT_BUF_ENDIAN_FIXED);
+    while ((rc == BCM_ERR_OK) && _dpoe_eap_tls_unpack_tls_record_hdr(&buf, &tls_hdr))
+    {
+        rc = _dpoe_eap_tls_run_auth_state_machine(link_rec, &buf);
+    }
+
+    return rc;
+}
+
+static bcmos_bool _dpoe_eap_tls_check_tls_version(const tls_record_hdr *tls_rec_hdr)
+{
+    /* Parameter checks. */
+    BUG_ON(tls_rec_hdr == NULL);
+
+    if ((tls_rec_hdr->content_type != TLS_HANDSHAKE_ID) ||
+        (tls_rec_hdr->tls_version.major != TLS_MAJOR_VERSION) ||
+        (tls_rec_hdr->tls_version.minor < TLS_MINOR_VERSION))
+    {
+        return BCMOS_TRUE;
+    }
+    return BCMOS_FALSE;
+}
+
+static void _dpoe_eap_tls_buffer_tls_data(dpoe_sec_link_rec *link_rec, const void *data, uint32_t length)
+{
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(data == NULL);
+
+    /* do not overrun the buffer, no matter how much data received */
+    if ((link_rec->auth_ctrl.tls_frag_length + length) > EAPOL_PKT_SIZE)
+    {
+        length = EAPOL_PKT_SIZE - link_rec->auth_ctrl.tls_frag_length;
+    }
+
+    memcpy(&link_rec->auth_ctrl.tls_frag_buffer[link_rec->auth_ctrl.tls_frag_length], data, length);
+    link_rec->auth_ctrl.tls_frag_length += length;
+}
+
+static bcmos_bool _dpoe_eap_tls_unpack_msg(bcmolt_buf *buf, eapol_msg *msg)
+{
+    return dpoe_sec_eapol_unpack(buf, &msg->hdr) &&
+        bcmolt_buf_read_u8(buf, &msg->eap_msg.hdr.eap_code) &&
+        bcmolt_buf_read_u8(buf, &msg->eap_msg.hdr.id) &&
+        bcmolt_buf_read_u16_be(buf, &msg->eap_msg.hdr.length) &&
+        bcmolt_buf_read_u8(buf, &msg->eap_msg.tls.auth_sub_type) &&
+        bcmolt_buf_read_u8(buf, &msg->eap_msg.tls.eap_tls_flags);
+}
+
+static bcmos_errno _dpoe_eap_tls_gen_key(auth_trans_data *trans_data)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    dpoe_sec_rsa_key *rsa = NULL;
+
+    /* Parameter checks */
+    BUG_ON(trans_data == NULL);
+
+    /* Generate the RSA key to be used in the ServerKeyExchange and ClientKeyExchange */
+    rsa = dpoe_sec_rsa_generate_key(DPOE_BI_RSA_KEY_SIZE);
+    if (rsa == NULL)
+    {
+        rc = BCM_ERR_INTERNAL;
+    }
+    else
+    {
+        /* Store the pointer to the key. */
+        trans_data->rsa = rsa;
+    }
+
+    return rc;
+}
+
+bcmos_errno dpoe_eap_tls_send_start(dpoe_sec_link_rec *link_rec)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcmolt_buf buf;
+    uint8_t *msg;
+    time_t unix_time;
+
+    /* Parameter checks */
+    BUG_ON(link_rec == NULL);
+
+    /* Initialize the authentication control data. */
+    memset(&link_rec->auth_ctrl, 0, sizeof(link_rec->auth_ctrl));
+    dpoe_sec_sha1_init(&link_rec->auth_ctrl.trans_data.sha1_hash);
+    dpoe_sec_md5_init(&link_rec->auth_ctrl.trans_data.md5_hash);
+
+    /* Per standard, the first four bytes of the server random value should be "unix time" */
+    unix_time = time(NULL);
+    memcpy(link_rec->auth_ctrl.trans_data.server_random, &unix_time, sizeof(unix_time));
+    dpoe_sec_generate_n_byte_random_number(&link_rec->auth_ctrl.trans_data.server_random[sizeof(unix_time)], COUNT_OF_RANDOM_BYTES - sizeof(unix_time));
+
+    /* If bidirectional, generate the RSA public/private key pair for the ServerKeyExchange and ClientKeyExchange. */
+    if (link_rec->cfg.enc_mode == BCMOLT_EPON_OAM_DPOE_ENCRYPTION_MODE_TEN_BI)
+    {
+        rc = _dpoe_eap_tls_gen_key(&link_rec->auth_ctrl.trans_data);
+        BCMOS_CHECK_RETURN_ERROR(BCM_ERR_OK != rc, rc);
+    }
+
+    /* Allocate a message buffer */
+    msg = bcmos_calloc(EAPOL_PKT_SIZE);
+    if (NULL == msg)
+    {
+        return BCM_ERR_NOMEM;
+    }
+
+    /* Initialize the EAP-TLS buffer. */
+    bcmolt_buf_init(&buf, EAPOL_PKT_SIZE, msg, BCMOLT_BUF_ENDIAN_FIXED);
+
+    /* Encode the EAP-TLS Start message to the buffer. */
+    _dpoe_eap_tls_pack_start(link_rec, &buf);
+
+    /* Send the message */
+    rc = dpoe_sec_send_eapol(link_rec->device, &link_rec->key, msg, bcmolt_buf_get_used(&buf));
+    bcmos_free(msg);
+    BCMOS_CHECK_RETURN_ERROR(BCM_ERR_OK != rc, rc);
+
+    /* Authentication has begun. */
+    link_rec->auth_ctrl.onu_auth_state = DPOE_ONU_AUTH_STATE_EAP_START;
+
+    return rc;
+}
+
+bcmos_errno dpoe_eap_tls_process_eapol_pkt(dpoe_sec_link_rec *link_rec, uint8_t *msg, uint32_t msg_len)
+{
+    bcmos_errno rc = BCM_ERR_INTERNAL;
+    uint32_t eap_tls_length;
+    tls_record_hdr tls_rec_hdr;
+    eapol_msg unpacked_msg;
+    bcmolt_buf buf;
+
+    /* Parameter checks */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(msg == NULL);
+
+    bcmolt_buf_init(&buf, msg_len, msg, BCMOLT_BUF_ENDIAN_FIXED);
+    _dpoe_eap_tls_unpack_msg(&buf, &unpacked_msg);
+
+    if (unpacked_msg.eap_msg.tls.auth_sub_type == EAP_TYPE_NAK)
+    {
+        link_rec->auth_ctrl.onu_auth_state = DPOE_ONU_AUTH_STATE_FAILED;
+        return BCM_ERR_ONU_ERR_RESP;
+    }
+
+    if (unpacked_msg.hdr.eapol_length != unpacked_msg.eap_msg.hdr.length)
+    {
+        return BCM_ERR_PARSE;
+    }
+
+    /* We should only read the length if the length bit is set. */
+    if ((unpacked_msg.eap_msg.tls.eap_tls_flags & EAP_TLS_FLAG_LENGTH_BIT) != 0)
+    {
+        bcmolt_buf_read_u32_be(&buf, &eap_tls_length);
+        uint8_t *tls_data = bcmolt_buf_snap_get(&buf);
+        _dpoe_eap_tls_unpack_tls_record_hdr(&buf, &tls_rec_hdr);
+        if (_dpoe_eap_tls_check_tls_version(&tls_rec_hdr))
+        {
+            /* Invalid TLS record, discard... */
+            return BCM_ERR_PARSE;
+        }
+
+        /* Allocate the fragmentation buffer. Multiple calls to the frag alloc function is allowed since it allocates a
+           new buffer only if there is no frag buffer currently allocated. The frag buffer is also freed if the EAP-TLS
+           session goes down for some reason. */
+        if (!_dpoe_eap_tls_alloc_tls_frag_buffer(&link_rec->auth_ctrl))
+        {
+            return BCM_ERR_NOMEM;
+        }
+
+        /* If the length bit is set, and the more bit is not, this is likely a single fragment packet.  In that case
+           the TlsMsg length must be present, and match the size of the buffer. It is also possible that this is a
+           subsequent fragment and the client always adds the length (which per standard is the length of the set of
+           fragments), in which case we cannot validate this now. The best we can do is save this size, and validate
+           when all fragments have been received. */
+        if (link_rec->auth_ctrl.tls_total_length == 0)
+        {
+            link_rec->auth_ctrl.tls_total_length = eap_tls_length;
+        }
+
+        if (link_rec->auth_ctrl.tls_total_length != eap_tls_length)
+        {
+            return BCM_ERR_PARSE;
+        }
+
+        _dpoe_eap_tls_buffer_tls_data(
+            link_rec,
+            tls_data,
+            unpacked_msg.hdr.eapol_length - (EAP_FRAME_SIZE + EAP_TLS_HDR_SIZE + sizeof(uint32_t)));
+
+        if ((unpacked_msg.eap_msg.tls.eap_tls_flags & EAP_TLS_FLAG_MORE_BIT) != 0)
+        {
+            /* Need to acknowledge the fragment */
+            _dpoe_eap_tls_send_tls_frag_ack_to_onu(link_rec);
+            rc = BCM_ERR_IN_PROGRESS;
+        }
+        else
+        {
+            /* Either a single fragment packet, or the last fragment of a multi-fragment packet. If it is the last
+               fragment of a multi-fragment, then all we can check is that eapTlsLength is one TlsRecordHdr bigger than
+               the buffered (authCtrl->tlsFragLen) data stream. The same logic works on a single frag packet. */
+            if ((eap_tls_length != link_rec->auth_ctrl.tls_total_length) ||
+                (eap_tls_length != link_rec->auth_ctrl.tls_frag_length))
+            {
+                return BCM_ERR_PARSE;
+            }
+
+            rc = _dpoe_eap_tls_process_tls_records(link_rec);
+            _dpoe_eap_tls_free_tls_frag_buffer(&link_rec->auth_ctrl);
+        }
+    }
+    else
+    {
+        uint8_t *tls_data = bcmolt_buf_snap_get(&buf);
+
+        /* No length field - must be fragmented, and not first */
+        if (link_rec->auth_ctrl.tls_frag_buffer == NULL)
+        {
+            return BCM_ERR_OUT_OF_SYNC;
+        }
+
+        _dpoe_eap_tls_buffer_tls_data(
+            link_rec,
+            tls_data,
+            unpacked_msg.hdr.eapol_length - (EAP_FRAME_SIZE + EAP_TLS_HDR_SIZE));
+
+        /* If the more bit is set, wait for the next fragment. Otherwise dump what we have into the state machine. */
+        if ((unpacked_msg.eap_msg.tls.eap_tls_flags & EAP_TLS_FLAG_MORE_BIT) != 0)
+        {
+            /* Need to acknowledge the fragment? The standard does not define a message set that will get us here. */
+            _dpoe_eap_tls_send_tls_frag_ack_to_onu(link_rec);
+            rc = BCM_ERR_IN_PROGRESS;
+        }
+        else
+        {
+            if (link_rec->auth_ctrl.tls_total_length != link_rec->auth_ctrl.tls_frag_length)
+            {
+                return BCM_ERR_PARSE;
+            }
+
+            rc = _dpoe_eap_tls_process_tls_records(link_rec);
+            _dpoe_eap_tls_free_tls_frag_buffer(&link_rec->auth_ctrl);
+        }
+    }
+
+    return rc;
+}
+
+void dpoe_eap_tls_cleanup(dpoe_sec_link_rec *link_rec)
+{
+    /* Parameter checks */
+    BUG_ON(link_rec == NULL);
+
+    // We are done with this.
+    if (link_rec->auth_ctrl.certificate != NULL)
+    {
+        bcmos_free(link_rec->auth_ctrl.certificate);
+    }
+
+    if (link_rec->auth_ctrl.trans_data.rsa != NULL)
+    {
+        dpoe_sec_rsa_key_free(link_rec->auth_ctrl.trans_data.rsa);
+        link_rec->auth_ctrl.trans_data.rsa = NULL;
+    }
+
+    link_rec->auth_ctrl.certLen = 0;
+
+    _dpoe_eap_tls_free_tls_frag_buffer(&link_rec->auth_ctrl);
+
+    memset(&link_rec->auth_ctrl, 0, sizeof(link_rec->auth_ctrl));
+}
+
+bcmos_errno dpoe_eap_tls_init(f_dpoe_sec_auth_cb auth_cb, f_dpoe_sec_cert_trust_cb cert_trust_cb)
+{
+    _auth_complete = auth_cb;
+    _cert_trust = cert_trust_cb;
+
+    return dpoe_sec_rng_seed();
+}
+
diff --git a/bcm68620_release/release/host_reference/user_appl/dpoe_sec/dpoe_eap_tls.h b/bcm68620_release/release/host_reference/user_appl/dpoe_sec/dpoe_eap_tls.h
new file mode 100644
index 0000000..984d555
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/dpoe_sec/dpoe_eap_tls.h
@@ -0,0 +1,122 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#if !defined(_DPOE_EAP_TLS_H_)
+#define _DPOE_EAP_TLS_H_
+
+#include "bcmos_system.h"
+#include "dpoe_sec_util.h"
+
+#define COUNT_OF_RANDOM_BYTES 32
+#define SIZE_OF_MASTER_SECRET 48
+#define SIZE_OF_MASTER_SESSION_KEY 64
+#define SIZE_OF_KEY_MATERIAL 128
+#define SIZE_OF_RSA_ENCRYPTED_BLOCK 256
+#define SIZE_OF_EAP_SESSION_ID 65
+#define SIZE_OF_TLS_SESSION_ID 32
+
+/* Total length of the PreMasterSecret */
+#define SIZE_OF_PRE_MASTER_SECRET 48
+
+typedef enum
+{
+    DPOE_ONU_AUTH_STATE_UNAUTHENTICATED,
+    DPOE_ONU_AUTH_STATE_EAP_START,
+    DPOE_ONU_AUTH_STATE_CERT_REQUEST,
+    DPOE_ONU_AUTH_STATE_CLIENT_KEY_RECEIVED,
+    DPOE_ONU_AUTH_STATE_CERT_RECEIVED,
+    DPOE_ONU_AUTH_STATE_CERT_VALIDATED,
+    DPOE_ONU_AUTH_STATE_AUTHENTICATED,
+    DPOE_ONU_AUTH_STATE_FAILED
+} dpoe_onu_auth_state;
+
+typedef struct
+{
+    uint8_t major;
+    uint8_t minor;
+} tls_protocol_version;
+
+#define PROTOCOL_VERSION_SIZE 2
+
+/* DPoE Authentication transient data */
+typedef struct
+{
+    uint8_t client_random[COUNT_OF_RANDOM_BYTES];
+    uint8_t server_random[COUNT_OF_RANDOM_BYTES];
+    uint8_t session_id[SIZE_OF_EAP_SESSION_ID];
+    uint8_t master_secret[SIZE_OF_MASTER_SECRET];
+    uint8_t key_material[SIZE_OF_KEY_MATERIAL];
+    uint8_t pre_master_secret[SIZE_OF_PRE_MASTER_SECRET];
+    dpoe_sec_sha1_hash sha1_hash;
+    dpoe_sec_sha1_digest sha1_digest;
+    dpoe_sec_md5_hash md5_hash;
+    dpoe_sec_md5_digest md5_digest;
+    /*  Allow the key to double in size before we break. */
+    uint8_t encrypted_cak[2 * SIZE_OF_RSA_ENCRYPTED_BLOCK];
+    uint8_t master_session_key[SIZE_OF_MASTER_SESSION_KEY];
+    dpoe_sec_rsa_key *rsa;
+} auth_trans_data;
+
+typedef struct onu_auth_control
+{
+    dpoe_onu_auth_state onu_auth_state;
+    tls_protocol_version version;
+    uint32_t current_packet_id;
+    uint8_t *certificate;
+    uint16_t certLen;
+    uint8_t *onu_cert;
+    uint16_t onu_cert_len;
+    uint32_t onu_cert_key_size;
+    uint8_t *mfg_cert;
+    uint16_t mfg_cert_len;
+    uint8_t *tls_frag_buffer;
+    uint32_t tls_frag_length;
+    uint32_t tls_total_length;
+    auth_trans_data trans_data;
+} onu_auth_control;
+
+struct dpoe_sec_link_rec;
+
+/* callbacks */
+
+typedef void (*f_dpoe_sec_auth_cb)(struct dpoe_sec_link_rec*, bcmos_errno status);
+
+typedef bcmos_bool (*f_dpoe_sec_cert_trust_cb)(struct dpoe_sec_link_rec*);
+
+/* functions */
+
+bcmos_errno dpoe_eap_tls_send_start(struct dpoe_sec_link_rec *link);
+
+bcmos_errno dpoe_eap_tls_process_eapol_pkt(struct dpoe_sec_link_rec *link, uint8_t *msg, uint32_t msg_len);
+
+void dpoe_eap_tls_cleanup(struct dpoe_sec_link_rec *link);
+
+bcmos_errno dpoe_eap_tls_init(f_dpoe_sec_auth_cb auth_cb, f_dpoe_sec_cert_trust_cb cert_trust_cb);
+
+#endif /* _DPOE_EAP_TLS_H_ */
diff --git a/bcm68620_release/release/host_reference/user_appl/dpoe_sec/dpoe_sec_fsm.c b/bcm68620_release/release/host_reference/user_appl/dpoe_sec/dpoe_sec_fsm.c
new file mode 100644
index 0000000..a6c96de
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/dpoe_sec/dpoe_sec_fsm.c
@@ -0,0 +1,826 @@
+/*
+  <:copyright-BRCM:2016:DUAL/GPL:standard
+
+  Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+  All Rights Reserved
+
+  Unless you and Broadcom execute a separate written software license
+  agreement governing use of this software, this software is licensed
+  to you under the terms of the GNU General Public License version 2
+  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+  with the following added to such license:
+
+  As a special exception, the copyright holders of this software give
+  you permission to link this software with independent modules, and
+  to copy and distribute the resulting executable under terms of your
+  choice, provided that you also meet, for each linked independent
+  module, the terms and conditions of the license of that module.
+  An independent module is a module which is not derived from this
+  software.  The special exception does not apply to any modifications
+  of the software.
+
+  Not withstanding the above, under no circumstances may you combine
+  this software in any way with any other Broadcom software provided
+  under a license other than the GPL, without Broadcom's express prior
+  written consent.
+
+  :>
+*/
+
+#include "dpoe_sec_fsm.h"
+#include "dpoe_sec_util.h"
+#include "bcmos_hash_table.h"
+#include "bcmolt_epon_oam_types.h"
+#include "bcmolt_utils.h"
+#include "bcmolt_user_appl_epon_oam.h"
+#include "bcmolt_api.h"
+
+#define DPOE_SEC_FSM_MAX_LINKS 64
+#define DPOE_SEC_FSM_TASK_MSG_Q_SIZE 64
+
+static const uint16_t DPOE_SEC_FSM_DEFAULT_OAM_KEY_EXCHANGE_PERIOD = 600; /* 10 minutes */
+/**
+ * @brief  Maximum ONU Authentication timeout value
+ * DPoE specification indicates that this value is 5 minutes.
+ */
+static const uint32_t DPOE_SEC_AUTH_TIMEOUT = 5 * 60 * 1000 * 1000;
+
+typedef struct
+{
+    bcmos_task task;
+    char task_name[MAX_TASK_NAME_SIZE];
+    char msg_queue_name[MAX_MSG_QUEUE_NAME_SIZE];
+    hash_table *link_map;
+} dpoe_sec_fsm_ctxt;
+
+dpoe_sec_fsm_ctxt ctxt[BCMTR_MAX_OLTS];
+
+typedef void (*f_dpoe_sec_fsm)(dpoe_sec_link_rec*, dpoe_sec_fsm_event_data*);
+
+/* DPoE Security FSM Event type to string definitions used for debug output */
+static const char *dpoe_sec_fsm_event_name[DPOE_SEC_FSM_EVENT__COUNT] =
+{
+    [DPOE_SEC_FSM_EVENT_ENCRYPT_START] = "Start Encryption",
+    [DPOE_SEC_FSM_EVENT_AUTH_START] = "Start Authentication",
+    [DPOE_SEC_FSM_EVENT_RX_OAM] = "Receive OAM",
+    [DPOE_SEC_FSM_EVENT_RX_EAPOL] = "Receive EAPOL",
+    [DPOE_SEC_FSM_EVENT_AUTH_COMPLETE] = "Authentication Complete",
+    [DPOE_SEC_FSM_EVENT_MKA_COMPLETE] = "MKA Complete",
+    [DPOE_SEC_FSM_EVENT_TIMEOUT] = "Timeout"
+};
+
+
+/* DPoE Security FSM State to string definitions used for debug output */
+static const char *dpoe_sec_fsm_state_name[DPOE_SEC_FSM_STATE__COUNT] =
+{
+    [DPOE_SEC_FSM_STATE_IDLE] = "Idle",
+    [DPOE_SEC_FSM_STATE_AUTH_WAIT] = "Authentication in progress",
+    [DPOE_SEC_FSM_STATE_ENCRYPT_DOWN_WAIT] = "OAM Key Exchange in progress",
+    [DPOE_SEC_FSM_STATE_ENCRYPT_BI_WAIT] = "MKA in progress",
+    [DPOE_SEC_FSM_STATE_COMPLETE] = "Authentication/Encryption Complete"
+};
+
+static f_dpoe_sec_fsm_cb _fsm_complete;
+
+static bcmos_bool _dpoe_sec_fsm_event_type_is_valid(dpoe_sec_fsm_event type)
+{
+    return type < DPOE_SEC_FSM_EVENT__COUNT;
+}
+
+static bcmos_bool _dpoe_sec_fsm_state_is_valid(dpoe_sec_fsm_state state)
+{
+    return state < DPOE_SEC_FSM_STATE__COUNT;
+}
+
+static const char *_dpoe_sec_fsm_event_name(dpoe_sec_fsm_event type)
+{
+    if (_dpoe_sec_fsm_event_type_is_valid(type))
+    {
+        return dpoe_sec_fsm_event_name[type];
+    }
+    else
+    {
+        return "Unknown Event";
+    }
+}
+
+static const char *_dpoe_sec_fsm_state_name(dpoe_sec_fsm_state state)
+{
+    if (_dpoe_sec_fsm_state_is_valid(state))
+    {
+        return dpoe_sec_fsm_state_name[state];
+    }
+    else
+    {
+        return "Unknown State";
+    }
+}
+
+static void _dpoe_sec_fsm_complete(dpoe_sec_link_rec *link_rec)
+{
+    /* Parameter checks */
+    BUG_ON(link_rec == NULL);
+
+    if (_fsm_complete != NULL)
+    {
+        _fsm_complete(link_rec->device, link_rec->key, link_rec->status);
+    }
+}
+
+static void _dpoe_sec_fsm_success(dpoe_sec_link_rec *link_rec)
+{
+    /* Parameter checks */
+    BUG_ON(link_rec == NULL);
+
+    link_rec->fsm_state = DPOE_SEC_FSM_STATE_COMPLETE;
+    link_rec->status = BCM_ERR_OK;
+
+    switch (link_rec->cfg.enc_mode)
+    {
+        case BCMOLT_EPON_OAM_DPOE_ENCRYPTION_MODE_NONE:
+        case BCMOLT_EPON_OAM_DPOE_ENCRYPTION_MODE_TEN_BI:
+            break;
+        case BCMOLT_EPON_OAM_DPOE_ENCRYPTION_MODE_ONE_DOWN:
+        case BCMOLT_EPON_OAM_DPOE_ENCRYPTION_MODE_TEN_DOWN:
+            bcmos_timer_start(
+                &link_rec->timeout,
+                (DPOE_SEC_FSM_DEFAULT_OAM_KEY_EXCHANGE_PERIOD * 1000 * 1000) + DPOE_SEC_OAM_TIMEOUT);
+            break;
+        default:
+            BUG();
+    }
+
+    _dpoe_sec_fsm_complete(link_rec);
+}
+
+static void _dpoe_sec_fsm_stop(dpoe_sec_link_rec *link_rec, bcmos_errno reason)
+{
+    /* Parameter checks */
+    BUG_ON(link_rec == NULL);
+
+    link_rec->fsm_state = DPOE_SEC_FSM_STATE_IDLE;
+    link_rec->status = reason;
+
+    bcmos_timer_stop(&link_rec->timeout);
+
+    /* Cleanup any EAP-TLS state. */
+    dpoe_eap_tls_cleanup(link_rec);
+
+    _dpoe_sec_fsm_complete(link_rec);
+}
+
+static void _dpoe_sec_fsm_auth_start(dpoe_sec_link_rec *link_rec, dpoe_sec_fsm_event_data *evt)
+{
+    bcmos_errno rc;
+
+    /* Parameter checks */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(evt == NULL);
+
+    /* Start ONU Authentication */
+    rc = dpoe_eap_tls_send_start(link_rec);
+    if (BCM_ERR_OK != rc)
+    {
+        DPOE_SEC_LINK_LOG(ERROR, link_rec, "Failed to start authentication: %s (%d)\n", bcmos_strerror(rc), rc);
+        _dpoe_sec_fsm_stop(link_rec, rc);
+    }
+    else
+    {
+        link_rec->fsm_state = DPOE_SEC_FSM_STATE_AUTH_WAIT;
+        bcmos_timer_start(&link_rec->timeout, DPOE_SEC_AUTH_TIMEOUT);
+        DPOE_SEC_LINK_LOG(DEBUG, link_rec, "Starting authentication\n");
+    }
+}
+
+static void _dpoe_sec_fsm_mka_start(dpoe_sec_link_rec *link_rec)
+{
+    bcmos_errno rc = dpoe_sec_mka_fsm_start(link_rec);
+    if (BCM_ERR_OK != rc)
+    {
+        DPOE_SEC_LINK_LOG(ERROR, link_rec, "Failed to start MKA: %s (%d)\n", bcmos_strerror(rc), rc);
+        _dpoe_sec_fsm_stop(link_rec, rc);
+    }
+    else
+    {
+        link_rec->fsm_state = DPOE_SEC_FSM_STATE_ENCRYPT_BI_WAIT;
+        DPOE_SEC_LINK_LOG(DEBUG, link_rec, "Starting MKA\n");
+    }
+}
+
+static void _dpoe_sec_fsm_encrypt_start(dpoe_sec_link_rec *link_rec, dpoe_sec_fsm_event_data *evt)
+{
+    bcmos_errno rc;
+
+    /* Parameter checks */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(evt == NULL);
+
+    if (link_rec->cfg.enc_mode == BCMOLT_EPON_OAM_DPOE_ENCRYPTION_MODE_TEN_BI)
+    {
+        _dpoe_sec_fsm_mka_start(link_rec);
+    }
+    else
+    {
+        rc = epon_oam_dpoe_set_encryption(
+            link_rec->device,
+            link_rec->key.epon_ni,
+            &link_rec->key.mac_address,
+            link_rec->cfg.enc_mode,
+            DPOE_SEC_FSM_DEFAULT_OAM_KEY_EXCHANGE_PERIOD);
+        if (BCM_ERR_OK != rc)
+        {
+            DPOE_SEC_LINK_LOG(ERROR, link_rec, "Failed to set encryption: %s (%d)\n", bcmos_strerror(rc), rc);
+            _dpoe_sec_fsm_stop(link_rec, rc);
+        }
+        else
+        {
+            link_rec->fsm_state = DPOE_SEC_FSM_STATE_ENCRYPT_DOWN_WAIT;
+            bcmos_timer_start(&link_rec->timeout, DPOE_SEC_OAM_TIMEOUT);
+        }
+    }
+}
+
+static void _dpoe_sec_fsm_auth_rx_eapol(dpoe_sec_link_rec *link_rec, dpoe_sec_fsm_event_data *evt)
+{
+    bcmos_errno rc;
+
+    /* Parameter checks */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(evt == NULL);
+
+    rc = dpoe_eap_tls_process_eapol_pkt(link_rec, evt->data.rx_frame.val, evt->data.rx_frame.len);
+    if ((BCM_ERR_OK != rc) && (BCM_ERR_IN_PROGRESS != rc))
+    {
+        DPOE_SEC_LINK_LOG(ERROR, link_rec, "Error processing EAPOL packet: %s (%d)\n", bcmos_strerror(rc), rc);
+        _dpoe_sec_fsm_stop(link_rec, rc);
+    }
+}
+
+static void _dpoe_sec_fsm_auth_complete(dpoe_sec_link_rec *link_rec, dpoe_sec_fsm_event_data *evt)
+{
+    /* Parameter checks */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(evt == NULL);
+
+    bcmos_timer_stop(&link_rec->timeout);
+    if (BCM_ERR_OK == evt->data.sub_status)
+    {
+        if (link_rec->cfg.enc_mode == BCMOLT_EPON_OAM_DPOE_ENCRYPTION_MODE_TEN_BI)
+        {
+            _dpoe_sec_fsm_mka_start(link_rec);
+        }
+        else
+        {
+            _dpoe_sec_fsm_success(link_rec);
+        }
+    }
+    else
+    {
+        _dpoe_sec_fsm_stop(link_rec, evt->data.sub_status);
+    }
+}
+
+static bcmos_errno _dpoe_sec_fsm_install_dn_key(
+    dpoe_sec_link_rec *link_rec,
+    bcmolt_epon_oam_dpoe_vendor_extended_base *dpoe)
+{
+    bcmolt_encryption_information_container key_info;
+
+    if (BCMOLT_EPON_OAM_DPOE_ENCRYPTION_MODE_ONE_DOWN == link_rec->cfg.enc_mode)
+    {
+        key_info.format = BCMOLT_EPON_ENCRYPTION_INFORMATION_FORMAT_CFB;
+        memcpy(key_info.u.cfb.key, dpoe->u.key_exchange.key_data, sizeof(key_info.u.cfb.key));
+    }
+    else
+    {
+        key_info.format = BCMOLT_EPON_ENCRYPTION_INFORMATION_FORMAT_CTR;
+        memcpy(key_info.u.ctr.key, dpoe->u.key_exchange.key_data, sizeof(key_info.u.ctr.key));
+        memcpy(key_info.u.ctr.sci, link_rec->ni_mac.u8, BCMOS_ETH_ALEN);
+        key_info.u.ctr.sci[6] = (link_rec->llid >> 8) & 0xff;
+        key_info.u.ctr.sci[7] = (link_rec->llid >> 0) & 0xff;
+    }
+
+    return bcmolt_epon_link_encryption_key_set(
+        link_rec->device,
+        &link_rec->key,
+        BCMOS_FALSE,
+        BCMOLT_EPON_ENCRYPTION_MODE_EPON_ZERO_OVERHEAD_AES,
+        (bcmolt_epon_key_choice)dpoe->u.key_exchange.key_number,
+        &key_info);
+}
+
+static void _dpoe_sec_fsm_enc_dn_rx_oam(dpoe_sec_link_rec *link_rec, dpoe_sec_fsm_event_data *evt)
+{
+    bcmolt_epon_oam_ethernet_frame *oam_frame;
+    bcmolt_epon_oam_dpoe_vendor_extended_base *dpoe;
+
+    /* Parameter checks */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(evt == NULL);
+
+    oam_frame = epon_oam_unpack(link_rec->device, evt->data.rx_frame.len, evt->data.rx_frame.val);
+    if (NULL == oam_frame)
+    {
+        DPOE_SEC_LINK_LOG(WARNING, link_rec, "Failed to parse OAM frame\n");
+        return;
+    }
+
+    if (!epon_oam_is_dpoe(oam_frame))
+    {
+        bcmos_free(oam_frame);
+        return;
+    }
+
+    dpoe = &oam_frame->protocols[0].u.slow_protocol.value.u.oam.content.u.organization_specific.value.u.dpoe.value;
+
+    if (epon_oam_is_dpoe_encrypt_response(dpoe))
+    {
+        if ((dpoe->u.set_response.vars[0].u.extended_attribute.attribute.width == 0x80) &&
+            (dpoe->u.set_response.vars[1].u.extended_attribute.attribute.width == 0x80))
+        {
+            bcmos_timer_start(&link_rec->timeout, DPOE_SEC_OAM_TIMEOUT); /* restart timer to wait for key */
+        }
+        else
+        {
+            DPOE_SEC_LINK_LOG(ERROR, link_rec, "ONU rejected encryption: [0] = 0x%x, [1] = 0x%x\n",
+                              dpoe->u.set_response.vars[0].u.extended_attribute.attribute.width,
+                              dpoe->u.set_response.vars[1].u.extended_attribute.attribute.width);
+            _dpoe_sec_fsm_stop(link_rec, BCM_ERR_ONU_ERR_RESP);
+        }
+    }
+    else if (BCMOLT_EPON_OAM_DPOE_OPCODE_KEY_EXCHANGE == dpoe->op)
+    {
+        _dpoe_sec_fsm_install_dn_key(link_rec, dpoe);
+        if (link_rec->cfg.auth)
+        {
+            _dpoe_sec_fsm_auth_start(link_rec, evt);
+        }
+        else
+        {
+            _dpoe_sec_fsm_success(link_rec);
+        }
+    }
+    else
+    {
+        /* ignore other OAM */
+    }
+
+    bcmos_free(oam_frame);
+}
+
+static void _dpoe_sec_fsm_enc_bi_rx_oam(dpoe_sec_link_rec *link_rec, dpoe_sec_fsm_event_data *evt)
+{
+    /* Parameter checks */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(evt == NULL);
+
+    dpoe_sec_mka_fsm_rx_oam(link_rec, evt->data.rx_frame.val, evt->data.rx_frame.len);
+}
+
+static void _dpoe_sec_fsm_enc_bi_rx_eapol(dpoe_sec_link_rec *link_rec, dpoe_sec_fsm_event_data *evt)
+{
+    /* Parameter checks */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(evt == NULL);
+
+    dpoe_sec_mka_fsm_rx_eapol(link_rec, evt->data.rx_frame.val, evt->data.rx_frame.len);
+}
+
+static void _dpoe_sec_fsm_mka_complete(dpoe_sec_link_rec *link_rec, dpoe_sec_fsm_event_data *evt)
+{
+    /* Parameter checks */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(evt == NULL);
+
+    if (BCM_ERR_OK == evt->data.sub_status)
+    {
+        _dpoe_sec_fsm_success(link_rec);
+    }
+    else
+    {
+        _dpoe_sec_fsm_stop(link_rec, evt->data.sub_status);
+    }
+}
+
+static void _dpoe_sec_fsm_comp_rx_oam(dpoe_sec_link_rec *link_rec, dpoe_sec_fsm_event_data *evt)
+{
+    /* Parameter checks */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(evt == NULL);
+
+    if ((link_rec->cfg.enc_mode == BCMOLT_EPON_OAM_DPOE_ENCRYPTION_MODE_ONE_DOWN) ||
+        (link_rec->cfg.enc_mode == BCMOLT_EPON_OAM_DPOE_ENCRYPTION_MODE_TEN_DOWN))
+    {
+        bcmolt_epon_oam_ethernet_frame *oam_frame;
+        bcmolt_epon_oam_dpoe_vendor_extended_base *dpoe;
+
+        oam_frame = epon_oam_unpack(link_rec->device, evt->data.rx_frame.len, evt->data.rx_frame.val);
+        if (NULL == oam_frame)
+        {
+            DPOE_SEC_LINK_LOG(WARNING, link_rec, "Failed to parse OAM frame\n");
+            return;
+        }
+
+        if (!epon_oam_is_dpoe(oam_frame))
+        {
+            bcmos_free(oam_frame);
+            return;
+        }
+
+        dpoe = &oam_frame->protocols[0].u.slow_protocol.value.u.oam.content.u.organization_specific.value.u.dpoe.value;
+
+        if (BCMOLT_EPON_OAM_DPOE_OPCODE_KEY_EXCHANGE == dpoe->op)
+        {
+            _dpoe_sec_fsm_install_dn_key(link_rec, dpoe);
+        }
+    }
+}
+
+static void _dpoe_sec_fsm_comp_rx_eapol(dpoe_sec_link_rec *link_rec, dpoe_sec_fsm_event_data *evt)
+{
+    /* Parameter checks */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(evt == NULL);
+
+    if (link_rec->cfg.enc_mode == BCMOLT_EPON_OAM_DPOE_ENCRYPTION_MODE_TEN_BI)
+    {
+        dpoe_sec_mka_fsm_rx_eapol(link_rec, evt->data.rx_frame.val, evt->data.rx_frame.len);
+    }
+}
+
+static void _dpoe_sec_fsm_timeout(dpoe_sec_link_rec *link_rec, dpoe_sec_fsm_event_data *evt)
+{
+    /* Parameter checks */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(evt == NULL);
+
+    _dpoe_sec_fsm_stop(link_rec, BCM_ERR_TIMEOUT);
+}
+
+static f_dpoe_sec_fsm dpoe_sec_fsm[DPOE_SEC_FSM_STATE__COUNT][DPOE_SEC_FSM_EVENT__COUNT] =
+{
+    [DPOE_SEC_FSM_STATE_IDLE] =
+    {
+        [DPOE_SEC_FSM_EVENT_AUTH_START] = _dpoe_sec_fsm_auth_start,
+        [DPOE_SEC_FSM_EVENT_ENCRYPT_START] = _dpoe_sec_fsm_encrypt_start
+    },
+    [DPOE_SEC_FSM_STATE_AUTH_WAIT] =
+    {
+        [DPOE_SEC_FSM_EVENT_RX_EAPOL] = _dpoe_sec_fsm_auth_rx_eapol,
+        [DPOE_SEC_FSM_EVENT_AUTH_COMPLETE] = _dpoe_sec_fsm_auth_complete,
+        [DPOE_SEC_FSM_EVENT_TIMEOUT] = _dpoe_sec_fsm_timeout
+    },
+    [DPOE_SEC_FSM_STATE_ENCRYPT_DOWN_WAIT] =
+    {
+        [DPOE_SEC_FSM_EVENT_RX_OAM] = _dpoe_sec_fsm_enc_dn_rx_oam,
+        [DPOE_SEC_FSM_EVENT_TIMEOUT] = _dpoe_sec_fsm_timeout
+    },
+    [DPOE_SEC_FSM_STATE_ENCRYPT_BI_WAIT] =
+    {
+        [DPOE_SEC_FSM_EVENT_RX_OAM] = _dpoe_sec_fsm_enc_bi_rx_oam,
+        [DPOE_SEC_FSM_EVENT_RX_EAPOL] = _dpoe_sec_fsm_enc_bi_rx_eapol,
+        [DPOE_SEC_FSM_EVENT_MKA_COMPLETE] = _dpoe_sec_fsm_mka_complete,
+        [DPOE_SEC_FSM_EVENT_TIMEOUT] = _dpoe_sec_fsm_timeout
+    },
+    [DPOE_SEC_FSM_STATE_COMPLETE] =
+    {
+        [DPOE_SEC_FSM_EVENT_RX_OAM] = _dpoe_sec_fsm_comp_rx_oam,
+        [DPOE_SEC_FSM_EVENT_RX_EAPOL] = _dpoe_sec_fsm_comp_rx_eapol,
+        [DPOE_SEC_FSM_EVENT_TIMEOUT] = _dpoe_sec_fsm_timeout
+    }
+};
+
+static void _dpoe_sec_fsm_unexpected(dpoe_sec_link_rec *link_rec, dpoe_sec_fsm_event_data *evt)
+{
+    /* Parameter checks */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(evt == NULL);
+
+    DPOE_SEC_LINK_LOG(WARNING, link_rec, "Unexpected event %s (%u) in state %s (%u)\n",
+                      _dpoe_sec_fsm_event_name(evt->type), evt->type, _dpoe_sec_fsm_state_name(link_rec->fsm_state), link_rec->fsm_state);
+}
+
+static void _dpoe_sec_fsm_exec(dpoe_sec_link_rec *link_rec, dpoe_sec_fsm_event_data *evt)
+{
+    /* Parameter checks */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(evt == NULL);
+
+    if (evt->type < DPOE_SEC_FSM_EVENT__COUNT)
+    {
+        dpoe_sec_fsm_state pre_state = link_rec->fsm_state;
+
+        if (dpoe_sec_fsm[link_rec->fsm_state][evt->type] != NULL)
+        {
+            DPOE_SEC_LINK_LOG(DEBUG, link_rec, "processing event %s in state %s\n",
+                              _dpoe_sec_fsm_event_name(evt->type), _dpoe_sec_fsm_state_name(link_rec->fsm_state));
+            dpoe_sec_fsm[link_rec->fsm_state][evt->type](link_rec, evt);
+        }
+        else
+        {
+            _dpoe_sec_fsm_unexpected(link_rec, evt);
+        }
+
+        if (link_rec->fsm_state != pre_state)
+        {
+            DPOE_SEC_LINK_LOG(DEBUG, link_rec, "transition from %s to %s\n",
+                              _dpoe_sec_fsm_state_name(pre_state), _dpoe_sec_fsm_state_name(link_rec->fsm_state));
+        }
+    }
+    else
+    {
+        DPOE_SEC_LINK_LOG(ERROR, link_rec, "Unknown event: %u", evt->type);
+    }
+}
+
+static bcmos_timer_rc _dpoe_sec_fsm_link_timer_expired(bcmos_timer *timer, long data)
+{
+    dpoe_sec_link_rec *link_rec = (dpoe_sec_link_rec*)data;
+    dpoe_sec_fsm_event_data evt;
+
+    evt.type = DPOE_SEC_FSM_EVENT_TIMEOUT;
+
+    _dpoe_sec_fsm_exec(link_rec, &evt);
+
+    return BCMOS_TIMER_OK;
+}
+
+static void _dpoe_sec_fsm_link_start_handle(bcmos_module_id module_id, bcmos_msg *os_msg)
+{
+    dpoe_sec_fsm_msg *msg = (dpoe_sec_fsm_msg*)os_msg;
+    bcmolt_devid device = os_msg->instance;
+    dpoe_sec_link_rec *link_rec;
+    dpoe_sec_fsm_event_data evt;
+    bcmos_errno err;
+
+    link_rec = hash_table_get(ctxt[device].link_map, (const uint8_t*)&msg->link);
+    if (link_rec == NULL)
+    {
+        dpoe_sec_link_rec new_link;
+        bcmolt_epon_ni_cfg pon_cfg;
+        bcmolt_epon_link_cfg link_cfg;
+        bcmolt_epon_ni_key pon_key = { .epon_ni = msg->link.epon_ni };
+        bcmos_timer_parm tp =
+        {
+            .name = "dpoe_sec_fsm_timer",
+            .owner = BCMOS_MODULE_ID_USER_APPL_DPOE_SEC + device,
+            .periodic = BCMOS_FALSE,
+            .handler = _dpoe_sec_fsm_link_timer_expired,
+            .flags = BCMOS_TIMER_PARM_FLAGS_NON_URGENT
+        };
+
+        /* retrieve the EPON NI MAC address */
+        BCMOLT_CFG_INIT(&pon_cfg, epon_ni, pon_key);
+        BCMOLT_CFG_PROP_GET(&pon_cfg, epon_ni, mac_address);
+        err = bcmolt_cfg_get(device, &pon_cfg.hdr);
+        BUG_ON(BCM_ERR_OK != err);
+
+        BCMOLT_CFG_INIT(&link_cfg, epon_link, msg->link);
+        BCMOLT_CFG_PROP_GET(&link_cfg, epon_link, llid);
+        err = bcmolt_cfg_get(device, &link_cfg.hdr);
+        if (BCM_ERR_OK != err)
+        {
+            BCM_LOG(ERROR, dpoe_sec_log_id[device], "Failed to get LLID\n");
+        }
+
+        new_link.device = device;
+        new_link.key = msg->link;
+        new_link.ni_mac = pon_cfg.data.mac_address;
+        new_link.llid = link_cfg.data.llid;
+        new_link.fsm_state = DPOE_SEC_FSM_STATE_IDLE;
+        new_link.status = BCM_ERR_IN_PROGRESS;
+
+        /* add new rec to hash table */
+        link_rec = hash_table_put(ctxt[device].link_map, (uint8_t*)&msg->link, &new_link);
+        if (link_rec == NULL)
+        {
+            DPOE_SEC_LINK_LOG(ERROR, &new_link, "Failed to store link record\n");
+        }
+
+        tp.data = (long)link_rec;
+        err = bcmos_timer_create(&link_rec->timeout, &tp);
+        BUG_ON(BCM_ERR_OK != err);
+    }
+
+    link_rec->cfg = msg->data.start;
+
+    if (!link_rec->cfg.auth || (link_rec->cfg.enc_mode != BCMOLT_EPON_OAM_DPOE_ENCRYPTION_MODE_TEN_BI))
+    {
+        evt.type = DPOE_SEC_FSM_EVENT_ENCRYPT_START;
+    }
+    else
+    {
+        evt.type = DPOE_SEC_FSM_EVENT_AUTH_START;
+    }
+
+    _dpoe_sec_fsm_exec(link_rec, &evt);
+
+    bcmos_free(os_msg);
+}
+
+static void _dpoe_sec_fsm_link_rx_oam_handle(bcmos_module_id module_id, bcmos_msg *os_msg)
+{
+    dpoe_sec_fsm_msg *msg = (dpoe_sec_fsm_msg*)os_msg;
+    bcmolt_devid device = os_msg->instance;
+    dpoe_sec_link_rec *link_rec;
+    dpoe_sec_fsm_event_data evt;
+
+    link_rec = hash_table_get(ctxt[device].link_map, (uint8_t*)&msg->link);
+    if (link_rec == NULL)
+    {
+        BCM_LOG(DEBUG, dpoe_sec_log_id[device], "Failed to find link: PON %u, "BCMOS_MACADDR_FMT_STR"\n",
+                msg->link.epon_ni, BCMOS_MACADDR_PARAMS(&msg->link.mac_address));
+    }
+    else
+    {
+        evt.type = DPOE_SEC_FSM_EVENT_RX_OAM;
+        evt.data.rx_frame.val = msg->data.rx_frame.frame;
+        evt.data.rx_frame.len = msg->data.rx_frame.length;
+        _dpoe_sec_fsm_exec(link_rec, &evt);
+    }
+
+    bcmos_free(msg->data.rx_frame.frame);
+    bcmos_free(os_msg);
+}
+
+static void _dpoe_sec_fsm_link_rx_eapol_handle(bcmos_module_id module_id, bcmos_msg *os_msg)
+{
+    dpoe_sec_fsm_msg *msg = (dpoe_sec_fsm_msg*)os_msg;
+    bcmolt_devid device = os_msg->instance;
+    dpoe_sec_link_rec *link_rec;
+    dpoe_sec_fsm_event_data evt;
+
+    link_rec = hash_table_get(ctxt[device].link_map, (uint8_t*)&msg->link);
+    if (link_rec == NULL)
+    {
+        BCM_LOG(INFO, dpoe_sec_log_id[device], "Failed to find link: PON %u, "BCMOS_MACADDR_FMT_STR"\n",
+                msg->link.epon_ni, BCMOS_MACADDR_PARAMS(&msg->link.mac_address));
+    }
+    else
+    {
+        evt.type = DPOE_SEC_FSM_EVENT_RX_EAPOL;
+        evt.data.rx_frame.val = msg->data.rx_frame.frame;
+        evt.data.rx_frame.len = msg->data.rx_frame.length;
+        _dpoe_sec_fsm_exec(link_rec, &evt);
+    }
+
+    bcmos_free(os_msg);
+}
+
+static void _dpoe_sec_fsm_link_auth_complete(dpoe_sec_link_rec* link_rec, bcmos_errno status)
+{
+    dpoe_sec_fsm_event_data evt;
+
+    evt.type = DPOE_SEC_FSM_EVENT_AUTH_COMPLETE;
+    evt.data.sub_status = status;
+
+    _dpoe_sec_fsm_exec(link_rec, &evt);
+}
+
+static void _dpoe_sec_fsm_link_mka_complete(dpoe_sec_link_rec* link_rec, bcmos_errno status)
+{
+    dpoe_sec_fsm_event_data evt;
+
+    evt.type = DPOE_SEC_FSM_EVENT_MKA_COMPLETE;
+    evt.data.sub_status = status;
+
+    _dpoe_sec_fsm_exec(link_rec, &evt);
+}
+
+static bcmos_errno _dpoe_sec_fsm_init_task(bcmolt_devid device)
+{
+    bcmos_task_parm task_params =
+    {
+        .name         = ctxt[device].task_name,
+        .priority     = TASK_PRIORITY_USER_APPL_DPOE_SEC,
+        .core         = BCMOS_CPU_CORE_ANY, /* No CPU affinity */
+        .init_handler = NULL
+    };
+    snprintf(ctxt[device].task_name, sizeof(ctxt[device].task_name), "user_appl_dpoe_sec%u", device);
+    bcmos_errno rc = bcmos_task_create(&ctxt[device].task, &task_params);
+
+    return rc;
+}
+
+
+static bcmos_errno _dpoe_sec_fsm_init_module(bcmolt_devid device)
+{
+    bcmos_module_parm module_params =
+    {
+        .qparm = { .name = ctxt[device].msg_queue_name, .size = DPOE_SEC_FSM_TASK_MSG_Q_SIZE },
+        .init = NULL
+    };
+    snprintf(ctxt[device].msg_queue_name, sizeof(ctxt[device].msg_queue_name), "dpoe_sec_msg_q%u", device);
+    return bcmos_module_create(BCMOS_MODULE_ID_USER_APPL_DPOE_SEC + device, &ctxt[device].task, &module_params);
+}
+
+static bcmos_errno _dpoe_sec_fsm_send_os_msg(
+    bcmolt_devid device,
+    bcmolt_epon_link_key link_key,
+    bcmos_msg_id type,
+    dpoe_sec_fsm_msg_data *data)
+{
+    bcmos_errno rc;
+    dpoe_sec_fsm_msg *msg = bcmos_calloc(sizeof(*msg));
+    if (msg == NULL)
+    {
+        BCM_LOG(ERROR, dpoe_sec_log_id[device], "OS Message calloc failed\n");
+        return BCM_ERR_NOMEM;
+    }
+
+    msg->os_msg.instance = device;
+    msg->os_msg.type = type;
+    msg->link = link_key;
+    msg->data = *data;
+    rc = bcmos_msg_dispatch(&msg->os_msg, BCMOS_MSG_SEND_AUTO_FREE);
+    if (BCM_ERR_OK != rc)
+    {
+        BCM_LOG(ERROR, dpoe_sec_log_id[device], "OS Message send failed (%s)\n", bcmos_strerror(rc));
+    }
+
+    return rc;
+}
+
+bcmos_errno dpoe_sec_fsm_link_start(bcmolt_devid device, bcmolt_epon_link_key link_key, dpoe_sec_fsm_start_data *cfg)
+{
+    dpoe_sec_fsm_msg_data data;
+
+    data.start = *cfg;
+
+    return _dpoe_sec_fsm_send_os_msg(device, link_key, BCMOS_MSG_ID_DPOE_SEC_START, &data);
+}
+
+bcmos_errno dpoe_sec_fsm_link_rx_oam(bcmolt_devid device, bcmolt_epon_link_key link_key, uint8_t *oam, uint16_t length)
+{
+    dpoe_sec_fsm_msg_data data;
+
+    data.rx_frame.frame = oam;
+    data.rx_frame.length = length;
+
+    return _dpoe_sec_fsm_send_os_msg(device, link_key, BCMOS_MSG_ID_DPOE_SEC_RX_OAM, &data);
+}
+
+bcmos_errno dpoe_sec_fsm_link_rx_eapol(
+    bcmolt_devid device,
+    bcmolt_epon_link_key link_key,
+    uint8_t *eapol,
+    uint16_t length)
+{
+    dpoe_sec_fsm_msg_data data;
+
+    data.rx_frame.frame = eapol;
+    data.rx_frame.length = length;
+
+    return _dpoe_sec_fsm_send_os_msg(device, link_key, BCMOS_MSG_ID_DPOE_SEC_RX_EAPOL, &data);
+}
+
+bcmos_errno dpoe_sec_fsm_init(
+    f_dpoe_sec_cert_trust_cb cert_trust_cb,
+    f_dpoe_sec_fsm_cb fsm_complete_cb)
+{
+    bcmos_errno rc;
+
+    for (uint32_t device = 0; device < BCMTR_MAX_OLTS; device++)
+    {
+        rc = _dpoe_sec_fsm_init_task(device);
+        BUG_ON(rc != BCM_ERR_OK);
+
+        rc = _dpoe_sec_fsm_init_module(device);
+        BUG_ON(rc != BCM_ERR_OK);
+
+        char log_name[MAX_DEV_LOG_ID_NAME];
+        snprintf(log_name, sizeof(log_name), "user_appl_dpoe_sec%u", device);
+        dpoe_sec_log_id[device] = bcm_dev_log_id_register(log_name, DEV_LOG_LEVEL_INFO, DEV_LOG_ID_TYPE_BOTH);
+
+        bcmos_msg_register(
+            BCMOS_MSG_ID_DPOE_SEC_START,
+            device,
+            BCMOS_MODULE_ID_USER_APPL_DPOE_SEC + device,
+            _dpoe_sec_fsm_link_start_handle);
+        bcmos_msg_register(
+            BCMOS_MSG_ID_DPOE_SEC_RX_OAM,
+            device,
+            BCMOS_MODULE_ID_USER_APPL_DPOE_SEC + device,
+            _dpoe_sec_fsm_link_rx_oam_handle);
+        bcmos_msg_register(
+            BCMOS_MSG_ID_DPOE_SEC_RX_EAPOL,
+            device,
+            BCMOS_MODULE_ID_USER_APPL_DPOE_SEC + device,
+            _dpoe_sec_fsm_link_rx_eapol_handle);
+
+        ctxt[device].link_map = hash_table_create(
+            DPOE_SEC_FSM_MAX_LINKS,
+            sizeof(dpoe_sec_link_rec),
+            sizeof(bcmolt_epon_link_key),
+            "dpoe_sec_link_state");
+        BUG_ON(ctxt[device].link_map == NULL);
+    }
+
+    _fsm_complete = fsm_complete_cb;
+
+    dpoe_eap_tls_init(_dpoe_sec_fsm_link_auth_complete, cert_trust_cb);
+    dpoe_sec_mka_fsm_init(_dpoe_sec_fsm_link_mka_complete);
+
+    return rc;
+}
+
diff --git a/bcm68620_release/release/host_reference/user_appl/dpoe_sec/dpoe_sec_fsm.h b/bcm68620_release/release/host_reference/user_appl/dpoe_sec/dpoe_sec_fsm.h
new file mode 100644
index 0000000..fa8b3ad
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/dpoe_sec/dpoe_sec_fsm.h
@@ -0,0 +1,130 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef _DPOE_SEC_FSM_H_
+#define _DPOE_SEC_FSM_H_
+
+#include "bcmos_system.h"
+#include "bcmolt_model_types.h"
+#include "bcmolt_epon_oam_types.h"
+#include "dpoe_eap_tls.h"
+#include "dpoe_sec_mka_fsm.h"
+
+/* DPoE Security FSM Event Type definitions */
+typedef enum dpoe_sec_fsm_event
+{
+    DPOE_SEC_FSM_EVENT__FIRST,
+    DPOE_SEC_FSM_EVENT_ENCRYPT_START = DPOE_SEC_FSM_EVENT__FIRST,
+    DPOE_SEC_FSM_EVENT_AUTH_START,
+    DPOE_SEC_FSM_EVENT_RX_OAM,
+    DPOE_SEC_FSM_EVENT_RX_EAPOL,
+    DPOE_SEC_FSM_EVENT_AUTH_COMPLETE,
+    DPOE_SEC_FSM_EVENT_MKA_COMPLETE,
+    DPOE_SEC_FSM_EVENT_TIMEOUT,
+
+    DPOE_SEC_FSM_EVENT__COUNT
+} dpoe_sec_fsm_event;
+
+/* DPoE Security FSM State definitions */
+typedef enum dpoe_sec_fsm_state
+{
+    DPOE_SEC_FSM_STATE__FIRST,
+    DPOE_SEC_FSM_STATE_IDLE = DPOE_SEC_FSM_STATE__FIRST,
+    DPOE_SEC_FSM_STATE_AUTH_WAIT,
+    DPOE_SEC_FSM_STATE_ENCRYPT_DOWN_WAIT,
+    DPOE_SEC_FSM_STATE_ENCRYPT_BI_WAIT,
+    DPOE_SEC_FSM_STATE_COMPLETE,
+
+    DPOE_SEC_FSM_STATE__COUNT
+} dpoe_sec_fsm_state;
+
+/* DPoE Security FSM Event contents. This is a union of information required by the DPoE Security FSM. This data type
+ * permits a common function prototype for the state machine function table. */
+typedef struct dpoe_sec_fsm_event_data
+{
+    dpoe_sec_fsm_event type;
+    union
+    {
+        bcmolt_u8_list_u16 rx_frame;
+        bcmos_errno sub_status;
+    } data;
+} dpoe_sec_fsm_event_data;
+
+struct dpoe_sec_link_rec;
+
+typedef struct
+{
+    bcmolt_epon_oam_dpoe_encryption_mode enc_mode;
+    bcmos_bool auth;
+} dpoe_sec_fsm_start_data;
+
+typedef struct dpoe_sec_link_rec
+{
+    bcmolt_devid device;
+    bcmolt_epon_link_key key;
+    dpoe_sec_fsm_start_data cfg;
+    bcmos_mac_address ni_mac;
+    bcmolt_epon_llid llid;
+    dpoe_sec_fsm_state fsm_state;
+    bcmos_errno status;
+    bcmos_timer timeout;
+    onu_auth_control auth_ctrl;
+    dpoe_sec_mka_fsm_ctrl mka_ctrl;
+} dpoe_sec_link_rec;
+
+typedef struct
+{
+    uint8_t *frame;
+    uint16_t length;
+} dpoe_sec_fsm_rx_frame_data;
+
+typedef union
+{
+    dpoe_sec_fsm_start_data start;
+    dpoe_sec_fsm_rx_frame_data rx_frame;
+} dpoe_sec_fsm_msg_data;
+
+typedef struct
+{
+    bcmos_msg os_msg;
+    bcmolt_epon_link_key link;
+    dpoe_sec_fsm_msg_data data;
+} dpoe_sec_fsm_msg;
+
+typedef void (*f_dpoe_sec_fsm_cb)(bcmolt_devid, bcmolt_epon_link_key, bcmos_errno);
+
+bcmos_errno dpoe_sec_fsm_link_start(bcmolt_devid device, bcmolt_epon_link_key link_key, dpoe_sec_fsm_start_data *cfg);
+
+bcmos_errno dpoe_sec_fsm_link_rx_oam(bcmolt_devid device, bcmolt_epon_link_key link, uint8_t *oam, uint16_t length);
+
+bcmos_errno dpoe_sec_fsm_link_rx_eapol(bcmolt_devid device, bcmolt_epon_link_key link, uint8_t *eapol, uint16_t length);
+
+bcmos_errno dpoe_sec_fsm_init(f_dpoe_sec_cert_trust_cb cert_trust_cb, f_dpoe_sec_fsm_cb fsm_complete_cb);
+
+#endif /* _DPOE_SEC_FSM_H_ */
diff --git a/bcm68620_release/release/host_reference/user_appl/dpoe_sec/dpoe_sec_mka_fsm.c b/bcm68620_release/release/host_reference/user_appl/dpoe_sec/dpoe_sec_mka_fsm.c
new file mode 100644
index 0000000..3174d63
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/dpoe_sec/dpoe_sec_mka_fsm.c
@@ -0,0 +1,830 @@
+/*
+  <:copyright-BRCM:2016:DUAL/GPL:standard
+
+  Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+  All Rights Reserved
+
+  Unless you and Broadcom execute a separate written software license
+  agreement governing use of this software, this software is licensed
+  to you under the terms of the GNU General Public License version 2
+  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+  with the following added to such license:
+
+  As a special exception, the copyright holders of this software give
+  you permission to link this software with independent modules, and
+  to copy and distribute the resulting executable under terms of your
+  choice, provided that you also meet, for each linked independent
+  module, the terms and conditions of the license of that module.
+  An independent module is a module which is not derived from this
+  software.  The special exception does not apply to any modifications
+  of the software.
+
+  Not withstanding the above, under no circumstances may you combine
+  this software in any way with any other Broadcom software provided
+  under a license other than the GPL, without Broadcom's express prior
+  written consent.
+
+  :>
+*/
+
+#include "dpoe_sec_fsm.h"
+#include "dpoe_sec_mka_fsm.h"
+#include "bcmolt_user_appl_epon_oam.h"
+#include "dpoe_sec_util.h"
+
+typedef enum dpoe_sec_mka_fsm_event_type
+{
+    DPOE_SEC_MKA_FSM_EVENT__INVALID     = -1, /**< permits event validation */
+
+    DPOE_SEC_MKA_FSM_EVENT_INIT         =  0,
+    DPOE_SEC_MKA_FSM_EVENT_RX_OAM       ,
+    DPOE_SEC_MKA_FSM_EVENT_RX_EAPOL     ,
+    DPOE_SEC_MKA_FSM_EVENT_RX_TIMEOUT  ,
+    DPOE_SEC_MKA_FSM_EVENT_TX_TIMEOUT  ,
+    DPOE_SEC_MKA_FSM_EVENT_STOP         ,
+
+    DPOE_SEC_MKA_FSM_EVENT__COUNT
+} dpoe_sec_mka_fsm_event_type;
+
+/* MKA FSM Event contents. This is a union of information required by the MKA FSM. This data type permits a common
+ * function prototype for the state machine function table. */
+typedef struct dpoe_sec_mka_fsm_event
+{
+    dpoe_sec_mka_fsm_event_type type; /**< Type of event*/
+    union
+    {
+        bcmolt_u8_list_u16 rx_frame;
+    } data;
+} dpoe_sec_mka_fsm_event;
+
+typedef bcmos_errno (*f_dpoe_sec_mka_fsm)(dpoe_sec_link_rec *mka_ctrl, dpoe_sec_mka_fsm_event *evt);
+
+static const char *dpoe_sec_mka_fsm_event_name[DPOE_SEC_MKA_FSM_EVENT__COUNT] =
+{
+    [DPOE_SEC_MKA_FSM_EVENT_INIT] = "Initialization",
+    [DPOE_SEC_MKA_FSM_EVENT_RX_OAM] = "OAM Response",
+    [DPOE_SEC_MKA_FSM_EVENT_RX_EAPOL] = "RX EAPOL",
+    [DPOE_SEC_MKA_FSM_EVENT_RX_TIMEOUT] = "FSM Timeout",
+    [DPOE_SEC_MKA_FSM_EVENT_TX_TIMEOUT] = "MKA Timeout",
+    [DPOE_SEC_MKA_FSM_EVENT_STOP] = "Stop"
+};
+
+static const char *dpoe_sec_mka_fsm_state_name[DPOE_SEC_MKA_FSM_STATE__COUNT] =
+{
+    [DPOE_SEC_MKA_FSM_STATE_NULL] = "Null",
+    [DPOE_SEC_MKA_FSM_STATE_SET_ENCRYPTION] = "Set Encryption",
+    [DPOE_SEC_MKA_FSM_STATE_START_MKA ] = "Start MKA",
+    [DPOE_SEC_MKA_FSM_STATE_SEND_SAK] = "Send SAK",
+    [DPOE_SEC_MKA_FSM_STATE_OPERATIONAL] = "Operational",
+    [DPOE_SEC_MKA_FSM_STATE_SEND_NEW_SAK] = "Send New SAK"
+};
+
+static f_dpoe_sec_mka_cb _mka_done_cb;
+
+static bcmos_errno _dpoe_sec_mka_fsm_exec(dpoe_sec_link_rec *link, dpoe_sec_mka_fsm_event *evt);
+
+static bcmos_bool _dpoe_sec_mka_fsm_event_type_is_valid(dpoe_sec_mka_fsm_event_type type)
+{
+    return (type > DPOE_SEC_MKA_FSM_EVENT__INVALID) && (type < DPOE_SEC_MKA_FSM_EVENT__COUNT);
+}
+
+static bcmos_bool _dpoe_sec_mka_fsm_state_is_valid(dpoe_sec_mka_fsm_state state)
+{
+    return (state > DPOE_SEC_MKA_FSM_STATE__INVALID) && (state < DPOE_SEC_MKA_FSM_STATE__COUNT);
+}
+
+static const char *_dpoe_sec_mka_fsm_event_name(dpoe_sec_mka_fsm_event_type type)
+{
+    if (_dpoe_sec_mka_fsm_event_type_is_valid(type))
+    {
+        return dpoe_sec_mka_fsm_event_name[type];
+    }
+    else
+    {
+        return "Unknown Event";
+    }
+}
+
+static const char *_dpoe_sec_mka_fsm_state_name(dpoe_sec_mka_fsm_state state)
+{
+    if (_dpoe_sec_mka_fsm_state_is_valid(state))
+    {
+        return dpoe_sec_mka_fsm_state_name[state];
+    }
+    else
+    {
+        return "Unknown State";
+    }
+}
+
+static bcmos_errno _dpoe_sec_mka_fsm_error(dpoe_sec_link_rec *link_rec, dpoe_sec_mka_fsm_event *evt)
+{
+    /* Parameter checks */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(link_rec->mka_ctrl.mka_fsm_info == NULL);
+    BUG_ON(evt == NULL);
+
+    /* TODO: log unexpected event */
+
+    return BCM_ERR_OK;
+}
+
+static void _dpoe_sec_mka_fsm_cleanup(dpoe_sec_mka_fsm_ctrl *mka_ctrl)
+{
+    /* Parameter checks. */
+    BUG_ON(mka_ctrl == NULL);
+
+    if (mka_ctrl->mka_info != NULL)
+    {
+        /* Clear all MKA information before freeing. */
+        memset(mka_ctrl->mka_info, 0, sizeof(*mka_ctrl->mka_info));
+        bcmos_free(mka_ctrl->mka_info);
+        mka_ctrl->mka_info = NULL;
+    }
+
+    if (mka_ctrl->mka_fsm_info != NULL)
+    {
+        /* Clear all MKA FSM information before freeing. */
+        memset(mka_ctrl->mka_fsm_info, 0, sizeof(*mka_ctrl->mka_fsm_info));
+        bcmos_free(mka_ctrl->mka_fsm_info);
+        mka_ctrl->mka_fsm_info = NULL;
+    }
+
+    mka_ctrl->mka_fsm_state = DPOE_SEC_MKA_FSM_STATE_NULL;
+}
+
+static bcmos_errno _dpoe_sec_mka_fsm_stop(dpoe_sec_link_rec *link_rec, dpoe_sec_mka_fsm_event *evt)
+{
+    /* Parameter checks */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(link_rec->mka_ctrl.mka_fsm_info == NULL);
+    BUG_ON(evt == NULL);
+
+    /* The stop function is called each time the Link deregisters regardless of whether the MKA FSM is running or not.
+       Handle the case where it is not running. */
+    if (link_rec->mka_ctrl.mka_fsm_info == NULL)
+    {
+        return BCM_ERR_OK;
+    }
+
+    /* Stop any timers that may be running. */
+    bcmos_timer_stop(&link_rec->mka_ctrl.mka_fsm_info->rx_timer);
+    bcmos_timer_stop(&link_rec->mka_ctrl.mka_fsm_info->tx_timer);
+
+    /* Change to the NULL state */
+    link_rec->mka_ctrl.mka_fsm_state = DPOE_SEC_MKA_FSM_STATE_NULL;
+
+    /* Free dynamic MKA resources associated with the link. */
+    _dpoe_sec_mka_fsm_cleanup(&link_rec->mka_ctrl);
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_timer_rc _dpoe_sec_mka_fsm_rx_timer_expire(bcmos_timer *timer, long data)
+{
+    dpoe_sec_link_rec *link_rec = (dpoe_sec_link_rec*)data;
+    dpoe_sec_mka_fsm_event evnt = {};
+
+    /* Parameter Checks */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(link_rec->mka_ctrl.mka_fsm_info == NULL);
+
+    /* Set up the event */
+    evnt.type = DPOE_SEC_MKA_FSM_EVENT_RX_TIMEOUT;
+
+    /* Execute the state machine */
+    _dpoe_sec_mka_fsm_exec(link_rec, &evnt);
+
+    return BCMOS_TIMER_OK;
+}
+
+static bcmos_timer_rc _dpoe_sec_mka_fsm_tx_timer_expire(bcmos_timer *timer, long data)
+{
+    dpoe_sec_link_rec *link_rec = (dpoe_sec_link_rec*)data;
+    dpoe_sec_mka_fsm_event evnt = {};
+
+    /* Parameter Checks */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(link_rec->mka_ctrl.mka_fsm_info == NULL);
+
+    /* Set up the event */
+    evnt.type = DPOE_SEC_MKA_FSM_EVENT_TX_TIMEOUT;
+
+    /* Execute the state machine */
+    _dpoe_sec_mka_fsm_exec(link_rec, &evnt);
+
+    return BCMOS_TIMER_OK;
+}
+
+static bcmos_errno _dpoe_sec_mka_fsm_initialize(dpoe_sec_link_rec *link_rec, dpoe_sec_mka_fsm_event *evt)
+{
+    bcmos_errno err;
+    bcmos_timer_parm rx_tp =
+    {
+        .name = "dpoe_sec_mka_fsm_timer",
+        .owner = BCMOS_MODULE_ID_USER_APPL_DPOE_SEC + link_rec->device,
+        .periodic = BCMOS_FALSE,
+        .handler = _dpoe_sec_mka_fsm_rx_timer_expire,
+        .data = (long)link_rec,
+        .flags = BCMOS_TIMER_PARM_FLAGS_NON_URGENT
+    };
+    bcmos_timer_parm tx_tp =
+    {
+        .name = "dpoe_sec_mka_mka_timer",
+        .owner = BCMOS_MODULE_ID_USER_APPL_DPOE_SEC + link_rec->device,
+        .periodic = BCMOS_TRUE,
+        .handler = _dpoe_sec_mka_fsm_tx_timer_expire,
+        .data = (long)link_rec,
+        .flags = BCMOS_TIMER_PARM_FLAGS_NON_URGENT
+    };
+
+    /* Parameter checks */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(evt == NULL);
+
+    /* Allocate the MKA information structure. */
+    link_rec->mka_ctrl.mka_info = bcmos_calloc(sizeof(*link_rec->mka_ctrl.mka_info));
+    if (link_rec->mka_ctrl.mka_info == NULL)
+    {
+        return BCM_ERR_NOMEM;
+    }
+
+    /* Allocate the MKA FSM information structure. */
+    link_rec->mka_ctrl.mka_fsm_info = bcmos_calloc(sizeof(*link_rec->mka_ctrl.mka_fsm_info));
+    if (link_rec->mka_ctrl.mka_fsm_info == NULL)
+    {
+        _dpoe_sec_mka_fsm_cleanup(&link_rec->mka_ctrl);
+        return BCM_ERR_NOMEM;
+    }
+
+    err = bcmos_timer_create(&link_rec->mka_ctrl.mka_fsm_info->rx_timer, &rx_tp);
+    if (BCM_ERR_OK != err)
+    {
+        _dpoe_sec_mka_fsm_cleanup(&link_rec->mka_ctrl);
+        return err;
+    }
+
+    err = bcmos_timer_create(&link_rec->mka_ctrl.mka_fsm_info->tx_timer, &tx_tp);
+    if (BCM_ERR_OK != err)
+    {
+        _dpoe_sec_mka_fsm_cleanup(&link_rec->mka_ctrl);
+        return err;
+    }
+
+    /* Change to the SET_LINK_ENCRYPTION_MODE state */
+    link_rec->mka_ctrl.mka_fsm_state = DPOE_SEC_MKA_FSM_STATE_SET_ENCRYPTION;
+    bcmos_timer_start(&link_rec->mka_ctrl.mka_fsm_info->rx_timer, DPOE_SEC_OAM_TIMEOUT);
+
+    return epon_oam_dpoe_set_encryption(
+        link_rec->device,
+        link_rec->key.epon_ni,
+        &link_rec->key.mac_address,
+        link_rec->cfg.enc_mode,
+        0);
+}
+
+static bcmos_errno _dpoe_sec_mka_fsm_send_success(dpoe_sec_link_rec *link_rec)
+{
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(_mka_done_cb == NULL);
+
+    _mka_done_cb(link_rec, BCM_ERR_OK);
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno _dpoe_sec_mka_fsm_send_failure(dpoe_sec_link_rec *link_rec, bcmos_errno reason)
+{
+    dpoe_sec_mka_fsm_event event = { .type = DPOE_SEC_MKA_FSM_EVENT_STOP };
+
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(_mka_done_cb == NULL);
+
+    DPOE_SEC_LINK_LOG(ERROR, link_rec, "MKA stopping!\n");
+
+    /* Notify the DPoE Security FSM of the MKA error. */
+    _mka_done_cb(link_rec, reason);
+
+    /* Stop the FSM due to the error. */
+    return _dpoe_sec_mka_fsm_stop(link_rec, &event);
+}
+
+static bcmos_errno _dpoe_sec_mka_fsm_rx_timeout(dpoe_sec_link_rec *link_rec, dpoe_sec_mka_fsm_event *evt)
+{
+    /* Parameter checks */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(link_rec->mka_ctrl.mka_fsm_info == NULL);
+    BUG_ON(evt == NULL);
+
+    DPOE_SEC_LINK_LOG(ERROR, link_rec, "TIMEOUT error!\n");
+
+    /* Notify the DPoE Security FSM of the MKA error. */
+    return _dpoe_sec_mka_fsm_send_failure(link_rec, BCM_ERR_TIMEOUT);
+}
+
+static bcmos_errno _dpoe_sec_mka_fsm_rx_oam(dpoe_sec_link_rec *link_rec, dpoe_sec_mka_fsm_event *evt)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcmolt_epon_oam_ethernet_frame *oam_frame;
+    bcmolt_epon_oam_dpoe_vendor_extended_base *dpoe;
+
+    /* Parameter checks */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(link_rec->mka_ctrl.mka_fsm_info == NULL);
+    BUG_ON(evt == NULL);
+    BUG_ON(evt->data.rx_frame.val == NULL);
+
+    oam_frame = epon_oam_unpack(link_rec->device, evt->data.rx_frame.len, evt->data.rx_frame.val);
+    if (NULL == oam_frame)
+    {
+        DPOE_SEC_LINK_LOG(ERROR, link_rec, "OAM unpack failed!\n");
+        return BCM_ERR_OK;
+    }
+
+    if (!epon_oam_is_dpoe(oam_frame))
+    {
+        bcmos_free(oam_frame);
+        return BCM_ERR_OK;
+    }
+
+    dpoe = &oam_frame->protocols[0].u.slow_protocol.value.u.oam.content.u.organization_specific.value.u.dpoe.value;
+
+    if (epon_oam_is_dpoe_encrypt_response(dpoe))
+    {
+        if ((dpoe->u.set_response.vars[0].u.extended_attribute.attribute.width == 0x80) &&
+            (dpoe->u.set_response.vars[1].u.extended_attribute.attribute.width == 0x80))
+        {
+            bcmos_timer_stop(&link_rec->mka_ctrl.mka_fsm_info->rx_timer);
+
+            /* Change to the START_MKA state */
+            link_rec->mka_ctrl.mka_fsm_state = DPOE_SEC_MKA_FSM_STATE_START_MKA;
+
+            /* Send the initial MKA packet to the ONU for the specified link. */
+            rc = mka_start(link_rec);
+        }
+        else
+        {
+            DPOE_SEC_LINK_LOG(ERROR, link_rec, "ONU rejected encryption: [0] = 0x%x, [1] = 0x%x\n",
+                              dpoe->u.set_response.vars[0].u.extended_attribute.attribute.width,
+                              dpoe->u.set_response.vars[1].u.extended_attribute.attribute.width);
+            /* Notify the DPoE Security FSM of the MKA error. */
+            rc = _dpoe_sec_mka_fsm_send_failure(link_rec, BCM_ERR_ONU_ERR_RESP);
+        }
+    }
+    else
+    {
+        /* ignore other OAM */
+    }
+
+    bcmos_free(oam_frame);
+
+    return rc;
+}
+
+static bcmos_errno _dpoe_sec_mka_fsm_start_timeout(dpoe_sec_link_rec *link_rec, dpoe_sec_mka_fsm_event *evt)
+{
+    /* Parameter checks */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(link_rec->mka_ctrl.mka_fsm_info == NULL);
+    BUG_ON(evt == NULL);
+
+    return mka_process_timeout(link_rec, MKA_OP_START_TIMEOUT);
+}
+
+static bcmos_errno _dpoe_sec_mka_fsm_start_rx_eapol(dpoe_sec_link_rec *link_rec, dpoe_sec_mka_fsm_event *evt)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+
+    /* Parameter checks */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(link_rec->mka_ctrl.mka_fsm_info == NULL);
+    BUG_ON(evt == NULL);
+
+    rc = mka_process_packet(link_rec, evt->data.rx_frame, MKA_OP_START_RSP);
+    if (rc == BCM_ERR_OK)
+    {
+        bcmolt_encryption_information_container key_info;
+
+        /* Re-start the rx timer */
+        bcmos_timer_start(&link_rec->mka_ctrl.mka_fsm_info->rx_timer, MKA_LIFE_TIME * 1000);
+
+        /* Generate the initial SAK. */
+        mka_generate_sak(link_rec, BCMOS_TRUE);
+
+        key_info.format = BCMOLT_EPON_ENCRYPTION_INFORMATION_FORMAT_CTR;
+        memcpy(key_info.u.ctr.key, link_rec->mka_ctrl.mka_info->sak, sizeof(key_info.u.ctr.key));
+        memcpy(key_info.u.ctr.sci, link_rec->mka_ctrl.mka_info->onu_sci, sizeof(key_info.u.ctr.sci));
+
+        /* Install the SAK as the US encryption key for this link. */
+        rc = bcmolt_epon_link_encryption_key_set(
+            link_rec->device,
+            &link_rec->key,
+            BCMOS_TRUE,
+            BCMOLT_EPON_ENCRYPTION_MODE_EPON_ZERO_OVERHEAD_AES,
+            (bcmolt_epon_key_choice)((link_rec->mka_ctrl.mka_info->key_number + 1) % 2),
+            &key_info);
+        if (rc == BCM_ERR_OK)
+        {
+            rc = mka_send_sak(link_rec, link_rec->mka_ctrl.mka_info->sak);
+            if (rc == BCM_ERR_OK)
+            {
+                /* Change to the SEND_SAK state */
+                link_rec->mka_ctrl.mka_fsm_state = DPOE_SEC_MKA_FSM_STATE_SEND_SAK;
+            }
+            else
+            {
+                DPOE_SEC_LINK_LOG(ERROR, link_rec, "send SAK failed!\n");
+            }
+        }
+        else
+        {
+            DPOE_SEC_LINK_LOG(ERROR, link_rec, "key set failed %d!\n", rc);
+        }
+    }
+    else
+    {
+        DPOE_SEC_LINK_LOG(ERROR, link_rec, "MKA process packet failed!\n");
+    }
+
+    if (rc != BCM_ERR_OK)
+    {
+        /* Notify the DPoE Security FSM of the MKA error. */
+        _dpoe_sec_mka_fsm_send_failure(link_rec, rc);
+    }
+
+    return rc;
+}
+
+static bcmos_errno _dpoe_sec_mka_fsm_sak_timeout(dpoe_sec_link_rec *link_rec, dpoe_sec_mka_fsm_event *evt)
+{
+    /* Parameter checks */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(link_rec->mka_ctrl.mka_fsm_info == NULL);
+    BUG_ON(evt == NULL);
+
+    return mka_process_timeout(link_rec, MKA_OP_SAK_TIMEOUT);
+}
+
+static bcmos_errno _dpoe_sec_mka_fsm_sak_rx_eapol(dpoe_sec_link_rec *link_rec, dpoe_sec_mka_fsm_event *evt)
+{
+    bcmos_errno rc;
+
+    /* Parameter checks */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(link_rec->mka_ctrl.mka_fsm_info == NULL);
+    BUG_ON(evt == NULL);
+
+    rc = mka_process_packet(link_rec, evt->data.rx_frame, MKA_OP_SAK_RSP);
+    if (rc == BCM_ERR_OK)
+    {
+        bcmolt_encryption_information_container key_info;
+
+        /* Re-start the rx timer */
+        bcmos_timer_start(&link_rec->mka_ctrl.mka_fsm_info->rx_timer, MKA_LIFE_TIME * 1000);
+
+        key_info.format = BCMOLT_EPON_ENCRYPTION_INFORMATION_FORMAT_CTR;
+        memcpy(key_info.u.ctr.key, link_rec->mka_ctrl.mka_info->sak, sizeof(key_info.u.ctr.key));
+        memcpy(key_info.u.ctr.sci, link_rec->ni_mac.u8, BCMOS_ETH_ALEN);
+        key_info.u.ctr.sci[6] = (link_rec->llid >> 8) & 0xff;
+        key_info.u.ctr.sci[7] = (link_rec->llid >> 0) & 0xff;
+
+        /* Install the SAK as the US and DS encryption key for this link. */
+        rc = bcmolt_epon_link_encryption_key_set(
+            link_rec->device,
+            &link_rec->key,
+            BCMOS_FALSE,
+            BCMOLT_EPON_ENCRYPTION_MODE_EPON_ZERO_OVERHEAD_AES,
+            (bcmolt_epon_key_choice)((link_rec->mka_ctrl.mka_info->key_number + 1) % 2),
+            &key_info);
+        if (rc == BCM_ERR_OK)
+        {
+            rc = mka_send_sak_confirm(link_rec);
+            if (rc == BCM_ERR_OK)
+            {
+                /* Notify the DPoE Security FSM of the MKA result. */
+                rc = _dpoe_sec_mka_fsm_send_success(link_rec);
+
+                /* Change to the OPERATIONAL state */
+                link_rec->mka_ctrl.mka_fsm_state = DPOE_SEC_MKA_FSM_STATE_OPERATIONAL;
+            }
+        }
+    }
+
+    if (rc != BCM_ERR_OK)
+    {
+        /* Notify the DPoE Security FSM of the MKA error. */
+        _dpoe_sec_mka_fsm_send_failure(link_rec, rc);
+    }
+
+    return rc;
+}
+
+static bcmos_errno _dpoe_sec_mka_fsm_send_keep_alive(dpoe_sec_link_rec *link_rec, dpoe_sec_mka_fsm_event *evt)
+{
+    /* Parameter checks */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(link_rec->mka_ctrl.mka_fsm_info == NULL);
+    BUG_ON(evt == NULL);
+
+    return mka_process_timeout(link_rec, MKA_OP_SEND_KEEP_ALIVE);
+}
+
+static bcmos_errno _dpoe_sec_mka_fsm_sak_refresh(dpoe_sec_link_rec *link_rec, dpoe_sec_mka_fsm_event *evt)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+
+    /* Parameter checks */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(link_rec->mka_ctrl.mka_fsm_info == NULL);
+    BUG_ON(evt == NULL);
+
+    bcmolt_encryption_information_container key_info;
+
+    /* Generate the new SAK. */
+    mka_generate_sak(link_rec, BCMOS_FALSE);
+
+    key_info.format = BCMOLT_EPON_ENCRYPTION_INFORMATION_FORMAT_CTR;
+    memcpy(key_info.u.ctr.key, link_rec->mka_ctrl.mka_info->sak, sizeof(key_info.u.ctr.key));
+    memcpy(key_info.u.ctr.sci, link_rec->mka_ctrl.mka_info->onu_sci, sizeof(key_info.u.ctr.sci));
+
+    /* Install the new SAK as the US encryption key for this link. */
+    rc = bcmolt_epon_link_encryption_key_set(
+        link_rec->device,
+        &link_rec->key,
+        BCMOS_TRUE,
+        BCMOLT_EPON_ENCRYPTION_MODE_EPON_ZERO_OVERHEAD_AES,
+        (bcmolt_epon_key_choice)((link_rec->mka_ctrl.mka_info->key_number + 1) % 2),
+        &key_info);
+    if (rc == BCM_ERR_OK)
+    {
+        rc = mka_send_sak(link_rec, link_rec->mka_ctrl.mka_info->new_sak);
+        if (rc == BCM_ERR_OK)
+        {
+            /* Change to the SEND_SAK state */
+            link_rec->mka_ctrl.mka_fsm_state = DPOE_SEC_MKA_FSM_STATE_SEND_NEW_SAK;
+        }
+    }
+
+    if (BCM_ERR_OK != rc)
+    {
+        /* Notify the DPoE Security FSM of the MKA error. */
+        _dpoe_sec_mka_fsm_send_failure(link_rec, rc);
+    }
+
+    return rc;
+}
+
+static bcmos_errno _dpoe_sec_mka_fsm_handle_keep_alive(dpoe_sec_link_rec *link_rec, dpoe_sec_mka_fsm_event *evt)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+
+    /* Parameter checks */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(link_rec->mka_ctrl.mka_fsm_info == NULL);
+    BUG_ON(link_rec->mka_ctrl.mka_info == NULL);
+    BUG_ON(evt == NULL);
+
+    /* Pass the keep alive message to the MKA proper code. It's okay to ignore the return status. Failure to maintain
+       the MKA connection through MKA keep alive messages will tear down the MKA connection. */
+    rc = mka_process_packet(link_rec, evt->data.rx_frame, MKA_OP_KEEP_ALIVE);
+
+    /* Check if a SAK refresh is needed. */
+    if (rc == BCM_ERR_OK)
+    {
+        /* Re-start the rx timer */
+        bcmos_timer_start(&link_rec->mka_ctrl.mka_fsm_info->rx_timer, MKA_LIFE_TIME * 1000);
+
+        if (link_rec->mka_ctrl.mka_info->sak_refresh_needed)
+        {
+            /* Start the SAK refresh process. */
+            _dpoe_sec_mka_fsm_sak_refresh(link_rec, evt);
+
+            /* Clear the SAK refresh flag since the SAK refresh process has been started. */
+            link_rec->mka_ctrl.mka_info->sak_refresh_needed = BCMOS_FALSE;
+        }
+    }
+
+    return rc;
+}
+
+static bcmos_errno _dpoe_sec_mka_fsm_new_sak_rx_eapol(dpoe_sec_link_rec *link_rec, dpoe_sec_mka_fsm_event *evt)
+{
+    bcmos_errno rc;
+
+    /* Parameter checks */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(link_rec->mka_ctrl.mka_fsm_info == NULL);
+    BUG_ON(link_rec->mka_ctrl.mka_info == NULL);
+    BUG_ON(evt == NULL);
+
+    rc = mka_process_packet(link_rec, evt->data.rx_frame, MKA_OP_SAK_RSP);
+    if (rc == BCM_ERR_OK)
+    {
+        /* Re-start the rx timer */
+        bcmos_timer_start(&link_rec->mka_ctrl.mka_fsm_info->rx_timer, MKA_LIFE_TIME * 1000);
+
+        bcmolt_encryption_information_container key_info;
+
+        key_info.format = BCMOLT_EPON_ENCRYPTION_INFORMATION_FORMAT_CTR;
+        memcpy(key_info.u.ctr.key, link_rec->mka_ctrl.mka_info->sak, sizeof(key_info.u.ctr.key));
+        memcpy(key_info.u.ctr.sci, link_rec->ni_mac.u8, BCMOS_ETH_ALEN);
+        key_info.u.ctr.sci[6] = (link_rec->llid >> 8) & 0xff;
+        key_info.u.ctr.sci[7] = (link_rec->llid >> 0) & 0xff;
+
+        /* Install the new SAK as the US and DS encryption key for this link. */
+        rc = bcmolt_epon_link_encryption_key_set(
+            link_rec->device,
+            &link_rec->key,
+            BCMOS_FALSE,
+            BCMOLT_EPON_ENCRYPTION_MODE_EPON_ZERO_OVERHEAD_AES,
+            (bcmolt_epon_key_choice)((link_rec->mka_ctrl.mka_info->key_number + 1) % 2),
+            &key_info);
+        if (rc == BCM_ERR_OK)
+        {
+            rc = mka_send_sak_confirm(link_rec);
+            if (rc == BCM_ERR_OK)
+            {
+                /* Update the current SAK with the new SAK */
+                memcpy(link_rec->mka_ctrl.mka_info->sak, link_rec->mka_ctrl.mka_info->new_sak,
+                       sizeof(link_rec->mka_ctrl.mka_info->sak));
+
+                /* Change to the OPERATIONAL state */
+                link_rec->mka_ctrl.mka_fsm_state = DPOE_SEC_MKA_FSM_STATE_OPERATIONAL;
+            }
+        }
+    }
+
+    if (rc != BCM_ERR_OK)
+    {
+        /* Notify the DPoE Security FSM of the MKA error. */
+        _dpoe_sec_mka_fsm_send_failure(link_rec, rc);
+    }
+
+    return rc;
+}
+
+/** This is the ONU FSM Jump Table, indexed by STATE and EVENT. */
+static f_dpoe_sec_mka_fsm dpoe_sec_mka_fsm[DPOE_SEC_MKA_FSM_STATE__COUNT][DPOE_SEC_MKA_FSM_EVENT__COUNT] =
+{
+    [DPOE_SEC_MKA_FSM_STATE_NULL] =
+    {
+        [DPOE_SEC_MKA_FSM_EVENT_INIT] = _dpoe_sec_mka_fsm_initialize
+    },
+    [DPOE_SEC_MKA_FSM_STATE_SET_ENCRYPTION] =
+    {
+        [DPOE_SEC_MKA_FSM_EVENT_RX_OAM] = _dpoe_sec_mka_fsm_rx_oam,
+        [DPOE_SEC_MKA_FSM_EVENT_RX_TIMEOUT] = _dpoe_sec_mka_fsm_rx_timeout,
+        [DPOE_SEC_MKA_FSM_EVENT_STOP] = _dpoe_sec_mka_fsm_stop,
+    },
+    [DPOE_SEC_MKA_FSM_STATE_START_MKA] =
+    {
+        [DPOE_SEC_MKA_FSM_EVENT_RX_EAPOL] = _dpoe_sec_mka_fsm_start_rx_eapol,
+        [DPOE_SEC_MKA_FSM_EVENT_RX_TIMEOUT] = _dpoe_sec_mka_fsm_rx_timeout,
+        [DPOE_SEC_MKA_FSM_EVENT_TX_TIMEOUT] = _dpoe_sec_mka_fsm_start_timeout,
+        [DPOE_SEC_MKA_FSM_EVENT_STOP] = _dpoe_sec_mka_fsm_stop
+    },
+    [DPOE_SEC_MKA_FSM_STATE_SEND_SAK] =
+    {
+        [DPOE_SEC_MKA_FSM_EVENT_RX_EAPOL] = _dpoe_sec_mka_fsm_sak_rx_eapol,
+        [DPOE_SEC_MKA_FSM_EVENT_RX_TIMEOUT] = _dpoe_sec_mka_fsm_rx_timeout,
+        [DPOE_SEC_MKA_FSM_EVENT_TX_TIMEOUT] = _dpoe_sec_mka_fsm_sak_timeout,
+        [DPOE_SEC_MKA_FSM_EVENT_STOP] = _dpoe_sec_mka_fsm_stop
+    },
+    [DPOE_SEC_MKA_FSM_STATE_OPERATIONAL] =
+    {
+        [DPOE_SEC_MKA_FSM_EVENT_RX_EAPOL] = _dpoe_sec_mka_fsm_handle_keep_alive,
+        [DPOE_SEC_MKA_FSM_EVENT_RX_TIMEOUT] = _dpoe_sec_mka_fsm_rx_timeout,
+        [DPOE_SEC_MKA_FSM_EVENT_TX_TIMEOUT] = _dpoe_sec_mka_fsm_send_keep_alive,
+        [DPOE_SEC_MKA_FSM_EVENT_STOP] = _dpoe_sec_mka_fsm_stop
+    },
+    [DPOE_SEC_MKA_FSM_STATE_SEND_NEW_SAK] =
+    {
+        [DPOE_SEC_MKA_FSM_EVENT_RX_EAPOL] = _dpoe_sec_mka_fsm_new_sak_rx_eapol,
+        [DPOE_SEC_MKA_FSM_EVENT_RX_TIMEOUT] = _dpoe_sec_mka_fsm_rx_timeout,
+        [DPOE_SEC_MKA_FSM_EVENT_TX_TIMEOUT] = _dpoe_sec_mka_fsm_send_keep_alive,
+        [DPOE_SEC_MKA_FSM_EVENT_STOP] = _dpoe_sec_mka_fsm_stop
+    }
+};
+
+static bcmos_errno _dpoe_sec_mka_fsm_exec(dpoe_sec_link_rec *link_rec, dpoe_sec_mka_fsm_event *evt)
+{
+    bcmos_errno rc = BCM_ERR_PARM;
+
+    /* Parameter checks */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(evt == NULL);
+
+    if (_dpoe_sec_mka_fsm_event_type_is_valid(evt->type))
+    {
+        dpoe_sec_mka_fsm_state pre_state = link_rec->mka_ctrl.mka_fsm_state;
+
+        DPOE_SEC_LINK_LOG(DEBUG, link_rec, "MKA: processing event %s in state %s\n",
+                          _dpoe_sec_mka_fsm_event_name(evt->type), _dpoe_sec_mka_fsm_state_name(pre_state));
+
+        /* call the FSM */
+        if (NULL != dpoe_sec_mka_fsm[link_rec->mka_ctrl.mka_fsm_state][evt->type])
+        {
+            rc = dpoe_sec_mka_fsm[link_rec->mka_ctrl.mka_fsm_state][evt->type](link_rec, evt);
+        }
+        else
+        {
+            rc = _dpoe_sec_mka_fsm_error(link_rec, evt);
+        }
+
+        if (pre_state != link_rec->mka_ctrl.mka_fsm_state)
+        {
+            DPOE_SEC_LINK_LOG(DEBUG, link_rec, "MKA: transitioning from %s to %s\n",
+                              _dpoe_sec_mka_fsm_state_name(pre_state),
+                              _dpoe_sec_mka_fsm_state_name(link_rec->mka_ctrl.mka_fsm_state));
+        }
+    }
+
+    return rc;
+}
+
+void dpoe_sec_mka_fsm_rx_oam(dpoe_sec_link_rec *link_rec, uint8_t *frame, uint16_t length)
+{
+    dpoe_sec_mka_fsm_event evnt = {};
+
+    BUG_ON(link_rec == NULL);
+
+    /* Send the OAM PDU to the state machine. */
+    evnt.type = DPOE_SEC_MKA_FSM_EVENT_RX_OAM;
+    evnt.data.rx_frame.val = frame;
+    evnt.data.rx_frame.len = length;
+
+    /* Execute the state machine */
+    _dpoe_sec_mka_fsm_exec(link_rec, &evnt);
+}
+
+void dpoe_sec_mka_fsm_rx_eapol(dpoe_sec_link_rec *link_rec, uint8_t *frame, uint16_t length)
+{
+    dpoe_sec_mka_fsm_event evnt = {};
+
+    BUG_ON(link_rec == NULL);
+
+    /* Send the OAM PDU to the state machine. */
+    evnt.type = DPOE_SEC_MKA_FSM_EVENT_RX_EAPOL;
+    evnt.data.rx_frame.val = frame;
+    evnt.data.rx_frame.len = length;
+
+    /* Execute the state machine */
+    _dpoe_sec_mka_fsm_exec(link_rec, &evnt);
+}
+
+bcmos_errno dpoe_sec_mka_fsm_start(dpoe_sec_link_rec *link_rec)
+{
+    dpoe_sec_mka_fsm_event event = {};
+
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+
+    /* Inject an INIT_EVENT into the FSM. */
+    event.type = DPOE_SEC_MKA_FSM_EVENT_INIT;
+
+    return _dpoe_sec_mka_fsm_exec(link_rec, &event);
+}
+
+bcmos_bool dpoe_sec_mka_fsm_running(dpoe_sec_link_rec *link_rec)
+{
+    bcmos_bool rc = BCMOS_FALSE;
+
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+
+    if ((link_rec->mka_ctrl.mka_fsm_info != NULL) &&
+        (link_rec->mka_ctrl.mka_fsm_state > DPOE_SEC_MKA_FSM_STATE_NULL))
+    {
+        rc = BCMOS_TRUE;
+    }
+
+    return rc;
+}
+
+bcmos_errno dpoe_sec_mka_fsm_deregister(dpoe_sec_link_rec *link_rec)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    dpoe_sec_mka_fsm_event evnt = {};
+
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+
+    /* The deregister function is called each time the Link deregisters regardless of whether the MKA FSM is running or
+       not. Handle the case where it is not running. */
+    if (link_rec->mka_ctrl.mka_fsm_info != NULL)
+    {
+        /* Inject a stop into the MKA FSM. */
+        evnt.type = DPOE_SEC_MKA_FSM_EVENT_STOP;
+        rc = _dpoe_sec_mka_fsm_exec(link_rec, &evnt);
+    }
+
+    return rc;
+}
+
+void dpoe_sec_mka_fsm_init(f_dpoe_sec_mka_cb mka_cb)
+{
+    _mka_done_cb = mka_cb;
+}
+
diff --git a/bcm68620_release/release/host_reference/user_appl/dpoe_sec/dpoe_sec_mka_fsm.h b/bcm68620_release/release/host_reference/user_appl/dpoe_sec/dpoe_sec_mka_fsm.h
new file mode 100644
index 0000000..f7209bb
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/dpoe_sec/dpoe_sec_mka_fsm.h
@@ -0,0 +1,90 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef _DPOE_SEC_MKA_FSM_H_
+#define _DPOE_SEC_MKA_FSM_H_
+
+#include "bcmos_system.h"
+#include "dpoe_sec_util.h"
+#include "mka.h"
+
+/* --- Types --- */
+
+typedef enum dpoe_sec_mka_fsm_state
+{
+    DPOE_SEC_MKA_FSM_STATE__INVALID         = -1, /**< permits event validation */
+
+    DPOE_SEC_MKA_FSM_STATE_NULL             =  0,
+    DPOE_SEC_MKA_FSM_STATE_SET_ENCRYPTION   ,
+    DPOE_SEC_MKA_FSM_STATE_START_MKA        ,
+    DPOE_SEC_MKA_FSM_STATE_SEND_SAK         ,
+    DPOE_SEC_MKA_FSM_STATE_OPERATIONAL      ,
+    DPOE_SEC_MKA_FSM_STATE_SEND_NEW_SAK     ,
+
+    DPOE_SEC_MKA_FSM_STATE__COUNT
+} dpoe_sec_mka_fsm_state;
+
+/* DPoE Security MKA information stored with each link. */
+typedef struct dpoe_sec_mka_fsm_info
+{
+    bcmos_timer rx_timer; /**< Timer entry for MKA FSM */
+    bcmos_timer tx_timer; /**< Timer entry for MKA messages */
+} dpoe_sec_mka_fsm_info;
+
+typedef struct
+{
+    mka_link_info *mka_info; /**< MKA information */
+    dpoe_sec_mka_fsm_info *mka_fsm_info; /**< MKA FSM information */
+    dpoe_sec_mka_fsm_state mka_fsm_state; /**< State of the DPoE Security MKA FSM */
+} dpoe_sec_mka_fsm_ctrl;
+
+struct dpoe_sec_link_rec;
+
+typedef void (*f_dpoe_sec_mka_cb)(struct dpoe_sec_link_rec*, bcmos_errno status);
+
+/* --- Function prototypes --- */
+
+/* Start MKA on a link */
+bcmos_errno dpoe_sec_mka_fsm_start(struct dpoe_sec_link_rec *link);
+
+/* Handle reception of an OAM frame */
+void dpoe_sec_mka_fsm_rx_oam(struct dpoe_sec_link_rec *link, uint8_t *frame, uint16_t length);
+
+/* Handle reception of an EAPOL frame */
+void dpoe_sec_mka_fsm_rx_eapol(struct dpoe_sec_link_rec *link, uint8_t *frame, uint16_t length);
+
+/* Is the MKA FSM running on a link? */
+bcmos_bool dpoe_sec_mka_fsm_running(struct dpoe_sec_link_rec *link);
+
+/* Handle link de-registration (stop the MKA FSM) */
+bcmos_errno dpoe_sec_mka_fsm_deregister(struct dpoe_sec_link_rec *link);
+
+void dpoe_sec_mka_fsm_init(f_dpoe_sec_mka_cb mka_cb);
+
+#endif /* _DPOE_SEC_MKA_FSM_H_ */
diff --git a/bcm68620_release/release/host_reference/user_appl/dpoe_sec/dpoe_sec_user_cfg.h b/bcm68620_release/release/host_reference/user_appl/dpoe_sec/dpoe_sec_user_cfg.h
new file mode 100644
index 0000000..e06d3e9
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/dpoe_sec/dpoe_sec_user_cfg.h
@@ -0,0 +1,200 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef _DPOE_SEC_USER_CFG_H_
+#define _DPOE_SEC_USER_CFG_H_
+
+#include "bcm_dev_log.h"
+
+extern dev_log_id dpoe_sec_log_id[];
+
+typedef void* dpoe_sec_sha1_hash; /* A data type for holding an SHA1 hash context */
+typedef uint8_t dpoe_sec_sha1_digest[20]; /* A data type for holding an SHA1 hash */
+typedef void* dpoe_sec_md5_hash; /* A data type for holding an MD5 hash context */
+typedef uint8_t dpoe_sec_md5_digest[16]; /* A data type for holding an MD5 hash */
+typedef void* dpoe_sec_rsa_key; /* A data type for holding an RSA key */
+typedef void* dpoe_sec_aes_key; /* A data type for holding an AES key */
+
+static inline void dpoe_sec_sha1_init(dpoe_sec_sha1_hash *sha1)
+{
+    BCM_LOG(ERROR, dpoe_sec_log_id[current_device], "This function should initialize/reset an SHA1 hash context\n");
+    BUG();
+}
+
+static inline void dpoe_sec_sha1_update(dpoe_sec_sha1_hash *sha1, const void* data, size_t len)
+{
+    BCM_LOG(ERROR, dpoe_sec_log_id[current_device], "This function should update an SHA1 hash context\n");
+    BUG();
+}
+
+static inline void dpoe_sec_sha1_final(dpoe_sec_sha1_digest md, dpoe_sec_sha1_hash *sha1)
+{
+    BCM_LOG(ERROR, dpoe_sec_log_id[current_device], "This function should finalize an SHA1 hash context\n");
+    BUG();
+}
+
+static inline void dpoe_sec_md5_init(dpoe_sec_md5_hash *md5)
+{
+    BCM_LOG(ERROR, dpoe_sec_log_id[current_device], "This function should initialize/reset an MD5 hash context\n");
+    BUG();
+}
+
+static inline void dpoe_sec_md5_update(dpoe_sec_md5_hash *md5, const void* data, size_t len)
+{
+    BCM_LOG(ERROR, dpoe_sec_log_id[current_device], "This function should update an MD5 hash context\n");
+    BUG();
+}
+
+static inline void dpoe_sec_md5_final(dpoe_sec_md5_digest md, dpoe_sec_md5_hash *md5)
+{
+    BCM_LOG(ERROR, dpoe_sec_log_id[current_device], "This function should finalize an MD5 hash context\n");
+    BUG();
+}
+
+static inline void dpoe_sec_prf_expand_4346(
+    uint8_t *secret,
+    uint32_t secret_len,
+    const uint8_t *label,
+    uint32_t label_len,
+    const uint8_t *seed,
+    uint32_t seed_len,
+    uint8_t *output,
+    uint32_t output_len)
+{
+    BCM_LOG(ERROR, dpoe_sec_log_id[current_device], "This function should perform the pseudo-random function for expansion of secrets as defined in RFC 4346, section 5\n");
+    BUG();
+}
+
+static inline dpoe_sec_rsa_key *dpoe_sec_rsa_generate_key(int bits)
+{
+    BCM_LOG(ERROR, dpoe_sec_log_id[current_device], "This function should generate an RSA key\n");
+    BUG();
+}
+
+static inline void dpoe_sec_rsa_key_free(dpoe_sec_rsa_key *rsa)
+{
+    BCM_LOG(ERROR, dpoe_sec_log_id[current_device], "This function should release any resources allocated for an RSA key by either dpoe_sec_rsa_generate_key or dpoe_sec_x509_pub_key_get\n");
+    BUG();
+}
+
+static inline bcmos_bool dpoe_sec_rsa_public_get(dpoe_sec_rsa_key *rsa, uint8_t *rsa_modulus, uint8_t *rsa_exp)
+{
+    BCM_LOG(ERROR, dpoe_sec_log_id[current_device], "This function should retrieve the public modulus and exponent of an RSA key\n");
+    BUG();
+}
+
+static inline int dpoe_sec_rsa_size(dpoe_sec_rsa_key *rsa)
+{
+    BCM_LOG(ERROR, dpoe_sec_log_id[current_device], "This function should return the size of an RSA key in bytes\n");
+    BUG();
+}
+
+static inline int dpoe_sec_rsa_private_decrypt(
+    int flen,
+    const uint8_t *from,
+    uint8_t *to,
+    dpoe_sec_rsa_key *rsa)
+{
+    BCM_LOG(ERROR, dpoe_sec_log_id[current_device], "This function should perform RSA decryption using a private key\n");
+    BUG();
+}
+
+static inline int dpoe_sec_rsa_public_decrypt(
+    int flen,
+    const uint8_t *from,
+    uint8_t *to,
+    dpoe_sec_rsa_key *rsa)
+{
+    BCM_LOG(ERROR, dpoe_sec_log_id[current_device], "This function should perform RSA decryption using a public key (also known as signature verification)\n");
+    BUG();
+}
+
+static inline dpoe_sec_rsa_key *dpoe_sec_x509_pub_key_get(const uint8_t *cert, uint32_t cert_len)
+{
+    BCM_LOG(ERROR, dpoe_sec_log_id[current_device], "This function should retrieve an RSA public key from an X.509 cetificate\n");
+    BUG();
+}
+
+static inline void dpoe_sec_aes_set_encrypt_key(const uint8_t *user_key, const int bits, dpoe_sec_aes_key *key)
+{
+    BCM_LOG(ERROR, dpoe_sec_log_id[current_device], "This function should initialize the AES key with the provided data\n");
+    BUG();
+}
+
+static inline void dpoe_sec_aes_wrap_key(
+    dpoe_sec_aes_key *key,
+    uint8_t *out,
+    const uint8_t *in,
+    uint32_t len)
+{
+    BCM_LOG(ERROR, dpoe_sec_log_id[current_device], "This function should perform an AES key wrap on in\n");
+    BUG();
+}
+
+static inline void dpoe_sec_aes_cmac(uint8_t *key, uint8_t *msg, uint32_t len, uint8_t *code)
+{
+    BCM_LOG(ERROR, dpoe_sec_log_id[current_device], "This function should perform AES CMAC\n");
+    BUG();
+}
+
+static inline void dpoe_sec_aes_cmac_kdf(
+    uint8_t *key,
+    const char *label,
+    uint8_t *ctx,
+    uint32_t ctx_len,
+    uint8_t *out_buf)
+{
+    BCM_LOG(ERROR, dpoe_sec_log_id[current_device], "This function should perform the AES CMAC key derivation function\n");
+    BUG();
+}
+
+static inline bcmos_errno dpoe_sec_send_eapol(
+    bcmolt_devid device,
+    bcmolt_epon_link_key *link_key,
+    uint8_t *eapol,
+    uint16_t length)
+{
+    BCM_LOG(ERROR, dpoe_sec_log_id[current_device], "This function should transmit an EAPOL frame to the specified link\n");
+    BUG();
+}
+
+static inline bcmos_errno dpoe_sec_rng_seed(void)
+{
+    BCM_LOG(INFO, dpoe_sec_log_id[current_device], "This function should seed a cryptographically valid pseudo-random number generator\n");
+    return BCM_ERR_OK;
+}
+
+static inline void dpoe_sec_generate_n_byte_random_number(uint8_t *output, int length)
+{
+    BCM_LOG(ERROR, dpoe_sec_log_id[current_device], "This function should generate a pseudo-random number of the specified length\n");
+    BUG();
+}
+
+#endif /* _DPOE_SEC_USER_CFG_H_ */
+
diff --git a/bcm68620_release/release/host_reference/user_appl/dpoe_sec/dpoe_sec_util.c b/bcm68620_release/release/host_reference/user_appl/dpoe_sec/dpoe_sec_util.c
new file mode 100644
index 0000000..593047a
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/dpoe_sec/dpoe_sec_util.c
@@ -0,0 +1,77 @@
+/*
+  <:copyright-BRCM:2016:DUAL/GPL:standard
+
+  Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+  All Rights Reserved
+
+  Unless you and Broadcom execute a separate written software license
+  agreement governing use of this software, this software is licensed
+  to you under the terms of the GNU General Public License version 2
+  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+  with the following added to such license:
+
+  As a special exception, the copyright holders of this software give
+  you permission to link this software with independent modules, and
+  to copy and distribute the resulting executable under terms of your
+  choice, provided that you also meet, for each linked independent
+  module, the terms and conditions of the license of that module.
+  An independent module is a module which is not derived from this
+  software.  The special exception does not apply to any modifications
+  of the software.
+
+  Not withstanding the above, under no circumstances may you combine
+  this software in any way with any other Broadcom software provided
+  under a license other than the GPL, without Broadcom's express prior
+  written consent.
+
+  :>
+*/
+
+#include "dpoe_sec_util.h"
+#include "bcmolt_api.h"
+
+dev_log_id dpoe_sec_log_id[BCMTR_MAX_OLTS];
+
+bcmos_bool dpoe_sec_eapol_unpack(bcmolt_buf *buf, eapol_msg_hdr *eapol)
+{
+    return
+        bcmolt_buf_read_mac_address(buf, &eapol->da) &&
+        bcmolt_buf_read_mac_address(buf, &eapol->sa) &&
+        bcmolt_buf_read_u16_be(buf, &eapol->ether_type) &&
+        bcmolt_buf_read_u8(buf, &eapol->eapol_version) &&
+        bcmolt_buf_read_u8(buf, &eapol->eapol_packet_type) &&
+        bcmolt_buf_read_u16_be(buf, &eapol->eapol_length);
+}
+
+bcmos_errno bcmolt_epon_link_encryption_key_set(
+    bcmolt_devid device,
+    bcmolt_epon_link_key *link_key,
+    bcmos_bool up, /* TODO: create explicit up/down type for clarity */
+    bcmolt_epon_encryption_mode mode,
+    bcmolt_epon_key_choice key_choice,
+    bcmolt_encryption_information_container *key_info)
+{
+    bcmos_errno rc;
+    bcmolt_epon_link_cfg cfg;
+
+    BCMOLT_CFG_INIT(&cfg, epon_link, *link_key);
+    BCMOLT_CFG_PROP_GET(&cfg, epon_link, epon_encryption);
+    rc = bcmolt_cfg_get(device, &cfg.hdr);
+    BCMOS_CHECK_RETURN_ERROR(BCM_ERR_OK != rc, rc);
+
+    if (up)
+    {
+        cfg.data.epon_encryption.upstream_mode = mode;
+        cfg.data.epon_encryption.upstream_key_choice = key_choice;
+        cfg.data.epon_encryption.upstream_encryption_information = *key_info;
+    }
+    else
+    {
+        cfg.data.epon_encryption.downstream_mode = mode;
+        cfg.data.epon_encryption.downstream_key_choice = key_choice;
+        cfg.data.epon_encryption.downstream_encryption_information = *key_info;
+    }
+
+    return bcmolt_cfg_set(device, &cfg.hdr);
+}
+
diff --git a/bcm68620_release/release/host_reference/user_appl/dpoe_sec/dpoe_sec_util.h b/bcm68620_release/release/host_reference/user_appl/dpoe_sec/dpoe_sec_util.h
new file mode 100644
index 0000000..b42fddc
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/dpoe_sec/dpoe_sec_util.h
@@ -0,0 +1,86 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef _DPOE_SEC_UTIL_H_
+#define _DPOE_SEC_UTIL_H_
+
+#include "bcmos_system.h"
+#include "bcm_dev_log.h"
+#include "bcmolt_buf.h"
+#include "bcmolt_utils.h"
+#include "bcmolt_model_types.h"
+#include "dpoe_sec_user_cfg.h"
+
+/* the EAPOL Ethernet type */
+#define ETHERTYPE_EAPOL 0x888e
+
+#define EAPOL_PROTOCOL_VERSION_DPOE 3
+
+typedef enum
+{
+    EAPOL_TYPE_PACKET,
+    EAPOL_TYPE_START,
+    EAPOL_TYPE_LOG_OFF,
+    EAPOL_TYPE_KEY,
+    EAPOL_TYPE_ASF_ALERT,
+    EAPOL_TYPE_MKA
+} eapol_type;
+
+typedef struct
+{
+    bcmos_mac_address da;
+    bcmos_mac_address sa;
+    uint16_t ether_type;
+    uint8_t eapol_version;
+    uint8_t eapol_packet_type;
+    uint16_t eapol_length;
+} eapol_msg_hdr;
+
+#define EAPOL_MSG_HDR_SIZE 18
+
+#define LINK_KEY_FMT_STR "PON %u, "BCMOS_MACADDR_FMT_STR
+#define LINK_KEY_DATA(lr) (lr)->key.epon_ni, BCMOS_MACADDR_PARAMS(&(lr)->key.mac_address)
+
+#define DPOE_SEC_LINK_LOG(level, lr, fmt, args...) \
+    BCM_LOG(level, dpoe_sec_log_id[(lr)->device], LINK_KEY_FMT_STR": "fmt, LINK_KEY_DATA(lr), ##args)
+
+static const uint32_t DPOE_SEC_OAM_TIMEOUT = 2 * 1000 * 1000; /* 2 seconds */
+
+bcmos_bool dpoe_sec_eapol_unpack(bcmolt_buf *buf, eapol_msg_hdr *eapol);
+
+bcmos_errno bcmolt_epon_link_encryption_key_set(
+    bcmolt_devid device,
+    bcmolt_epon_link_key *link_key,
+    bcmos_bool up,
+    bcmolt_epon_encryption_mode mode,
+    bcmolt_epon_key_choice key_choice,
+    bcmolt_encryption_information_container *key_info);
+
+#endif /* _DPOE_SEC_UTIL_H_ */
+
diff --git a/bcm68620_release/release/host_reference/user_appl/dpoe_sec/mka.c b/bcm68620_release/release/host_reference/user_appl/dpoe_sec/mka.c
new file mode 100644
index 0000000..999eb23
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/dpoe_sec/mka.c
@@ -0,0 +1,1434 @@
+/*
+  <:copyright-BRCM:2016:DUAL/GPL:standard
+
+  Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+  All Rights Reserved
+
+  Unless you and Broadcom execute a separate written software license
+  agreement governing use of this software, this software is licensed
+  to you under the terms of the GNU General Public License version 2
+  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+  with the following added to such license:
+
+  As a special exception, the copyright holders of this software give
+  you permission to link this software with independent modules, and
+  to copy and distribute the resulting executable under terms of your
+  choice, provided that you also meet, for each linked independent
+  module, the terms and conditions of the license of that module.
+  An independent module is a module which is not derived from this
+  software.  The special exception does not apply to any modifications
+  of the software.
+
+  Not withstanding the above, under no circumstances may you combine
+  this software in any way with any other Broadcom software provided
+  under a license other than the GPL, without Broadcom's express prior
+  written consent.
+
+  :>
+*/
+
+/** @file mka.c
+ *  @brief Publicly accessible APIs provided to process MKA request/responses.
+ *
+ *  This file contains all of the public/private APIs used to process MKA frames.
+ *
+ * MKA Exchange Sequence :
+ *
+ * 1.  If bidirectional encryption is enabled, the OLT will generate an MKPDU
+ *     containing the basic parameter set and empty live and potential peer
+ *     lists.
+ * 2.  When the ONU receives this, it will add the OLT to its potential peers
+ *     list.
+ * 3.  Having discovered a new potential peer, the ONU will transmit an MKPDU
+ *     containing the basic parameter set, and empty live peers list, and a
+ *     potential peer list containing the OLT.
+ * 4.  When the OLT receives this, it will add the ONU to its live peers list.
+ * 5.  Having added a new live peer, the OLT will generate a new SAK and install
+ *     it for receive (using the ONUs SCI).
+ * 6.  The OLT then transmits an MKPDU containing the basic parameter set, a
+ *     live peer list containing the ONU, an empty potential peer list, a
+ *     distributed SAK, and a SAK usage parameter set indicating that the new
+ *     SAK has been installed for receive.
+ * 7.  When the ONU receives this, it will:
+ *     a. Add the OLT to its live peers list
+ *     b. Install the new SAK for receive (using the OLTs SCI)
+ *     c. Because the OLT reported the SAK in use for receive, the ONU will
+ *        install the SAK for transmit (using the ONUs SCI).
+ * 8.  The ONU will then transmit an MKPDU containing the basic parameter set,
+ *     a live peers list containing the OLT, an empty potential peer list,
+ *     and a SAK usage parameter set indicating that the SAK has been installed
+ *     for receive and transmit.
+ * 9.  When the OLT receives this, it will see that the ONU has installed the
+ *     SAK for receive and will install the SAK for transmit
+ *     (using the OLTs SCI).
+ * 10. The OLT will then transmit an MKPDU containing the basic parameter set,
+ *     a live peer list containing the ONU, an empty potential peer list and
+ *     a SAK usage parameter set indicating the SAK has been installed for
+ *     receive and transmit.  (I¡®m not sure if this step is necessary)
+ * 11. This message will produce no state change at the ONU, so it will not
+ *     respond immediately. (both the ONU and OLT will need to start a 2 second
+ *     timer every time an MKPDU is transmitted ? if they have not transmitted
+ *     an MKPDU due to a state change when the timer expires, they will
+ *     transmit an MKPDU containing the basic parameter set and live and
+ *     potential peer lists.  If either side does not receive an MKPDU from
+ *     the other for 6 seconds they must remove them from their peer lists.)
+ * 12. When the OLT determines that a new SAK is needed this protocol will
+ *     repeat steps 5-11. (modifications to the peer lists, such as 7a, should
+ *     not be required)
+ *
+ *  @defgroup mka MKA
+ *  @ingroup cmCtrl
+ *
+ */
+
+#include "mka.h"
+#include "dpoe_sec_util.h"
+#include "dpoe_sec_fsm.h"
+
+/* The destination multicast MAC address for MKA packets. */
+static const bcmos_mac_address mka_dst_mac_addr = { .u8 = { 0x01, 0x80, 0xc2, 0x00, 0x00, 0x03 } };
+
+#if 0
+static const char *mka_state_names[MKA_STATE__COUNT] =
+{
+    "Initial",
+    "WaitingInitialPeerResp",
+    "SakSent",
+    "MkaDone"
+};
+#endif
+
+#define MKA_VERSION                 1
+#define MKA_SERVER_PRIORITY         0x30
+#define MKA_INIT_RETRY_CNT          3
+#define MKA_BASIC_PARAM_SET_LEN     44 /* 48 - header len (4 byte) */
+#define MKA_BASIC_PARAM_SET_OPT     0x60 /* KeyServer:0, MACsecDesired:1, MACsec Capability:2 & high 4 bits of
+                                            Parameter set body length (0) */
+
+#define MKA_ALGORITHM_AGILITY       0x0080c201
+#define MKA_MN_LEN                  4 /* Message Number */
+#define MKA_KN_LEN                  4 /* Key Number */
+#define MKA_PDU_MAX_FRAME_LEN       300
+#define MKA_HELLO_TIME              2000 /* Ms, 2 seconds */
+#define MKA_MAX_HELLO_RETRIES       3 /* Max Hello retries */
+#define MKA_OLT_INIT_FRAME_LEN      76 /* basic param set(48) + null live peer list (4) + null potential peer list (4) +
+                                          Icv Indicator (4) + ICV(16) */
+#define MKA_ONE_PEER_LEN            16 /* one live peer len */
+#define MKA_DISTRIBUTED_SAK_LEN     32
+#define MKA_ICV_LEN                 16
+#define MKA_PDU_MIN_LENGTH          32
+#define MKA_KEY_WRAPPED_SAK_LEN     24
+#define MKA_SAK_USE_PARAM_BODY_LEN  40
+#define MKA_SAK_USE_PARAM_LEM       44
+#define MKA_MAX_ACCEPTABLE_PN       0xC0000000
+
+#define MKA_SAK_USE_PARAM_AN_SHIFT          6
+#define MKA_SAK_USE_PARAM_LK_TX_SHIFT       5
+#define MKA_SAK_USE_PARAM_LK_RX_SHIFT       4
+#define MKA_SAK_USE_PARAM_OLD_KEY_AN_MASK   3
+#define MKA_SAK_USE_PARAM_OLD_KEY_AN_SFT    2
+#define MKA_SAK_USE_PARAM_OLD_KEY_TX_RX     3
+#define MKA_SAK_USE_PARAM_SECOND_OPT_BYTE   0xC0
+
+#define MKA_KEY_LEN                 16 /* common key size */
+
+#define MKA_KEK_LABEL_LEN           12 /* label length */
+#define MKA_KEK_CONTEXT_LEN         16
+
+#define MKA_SAK_KEY_WRAPPED_LEN     24
+
+#define MKA_ICK_LABEL_LEN           12 /* label length */
+#define MKA_ICK_CONTEXT_LEN         16
+
+#define MKA_CKN_LABEL_LEN           16 /* label length */
+#define MKA_CKN_CONTEXT_LEN         (SIZE_OF_EAP_SESSION_ID + (BCMOS_ETH_ALEN * 2)) /* 77 */
+
+#define MKA_CAK_LABEL_LEN           16 /* label length */
+#define MKA_CAK_CONTEXT_LEN         12 /* context length */
+
+/* MKPDU Parameter set type */
+typedef enum
+{
+    MKPDU_PARAM_SET_LIVE_PEER_LIST      = 1,
+    MKPDU_PARAM_SET_POTENTIAL_PEER_LIST = 2,
+    MKPDU_PARAM_SET_MACSEC_SAK_USE      = 3,
+    MKPDU_PARAM_SET_DIST_SAK            = 4,
+    MKPDU_PARAM_SET_DIST_CAK            = 5,
+    MKPDU_PARAM_SET_KMD                 = 6,
+    MKPDU_PARAM_SET_ANNOUNCEMENT        = 7,
+    MKPDU_PARAM_SET_ICV_INDICATOR       = 255,
+} mkpdu_param_set_type;
+
+typedef enum
+{
+    MKA_MSG_TIMEOUT,
+    MKA_MSG_DATA_IND
+} mka_msg_type;
+
+typedef struct
+{
+    mka_msg_type type;
+    eapol_msg_hdr *msg;
+    bcmolt_buf *buf;
+} mka_event;
+
+/* Calculate Key Encryption Key */
+static void _mka_calc_kek(uint8_t *kek, uint8_t *cak, uint8_t *ckn)
+{
+    char kek_label[MKA_KEK_LABEL_LEN + 1] = "IEEE8021 KEK";
+
+    /* Parameter checks. */
+    BUG_ON(kek == NULL);
+    BUG_ON(cak == NULL);
+    BUG_ON(ckn == NULL);
+
+    dpoe_sec_aes_cmac_kdf(cak, kek_label, ckn, MKA_KEK_CONTEXT_LEN, kek);
+}
+
+/* Calculate Integrity Check value Key */
+static void _mka_calc_ick(uint8_t *ick, uint8_t *cak, uint8_t *ckn)
+{
+    char ick_label[MKA_ICK_LABEL_LEN + 1] = "IEEE8021 ICK";
+
+    /* Parameter checks. */
+    BUG_ON(ick == NULL);
+    BUG_ON(cak == NULL);
+    BUG_ON(ckn == NULL);
+
+    dpoe_sec_aes_cmac_kdf(cak, ick_label, ckn, MKA_ICK_CONTEXT_LEN, ick);
+}
+
+/* calculate Integrity Check Value */
+static void _mka_calc_icv(uint8_t *icv, uint8_t *ick, uint8_t *msdu, uint16_t msdu_len)
+{
+    /* Parameter checks. */
+    BUG_ON(icv == NULL);
+    BUG_ON(ick == NULL);
+    BUG_ON(msdu == NULL);
+
+    dpoe_sec_aes_cmac(ick, msdu, msdu_len, icv);
+}
+
+/* Calculate Secure Connectivity Association Key Name */
+static void _mka_calc_ckn(dpoe_sec_link_rec *link_rec, uint8_t eap_sess_id_len)
+{
+    char ckn_label[MKA_CKN_LABEL_LEN + 1] = "IEEE8021 EAP CKN";
+    uint8_t ckn_context[MKA_CKN_CONTEXT_LEN];
+
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(link_rec->mka_ctrl.mka_info == NULL);
+    BUG_ON(link_rec->mka_ctrl.mka_info->ckn == NULL);
+    BUG_ON(link_rec->auth_ctrl.trans_data.master_session_key == NULL);
+    BUG_ON(link_rec->auth_ctrl.trans_data.session_id == NULL);
+
+    memcpy(&ckn_context[0], link_rec->auth_ctrl.trans_data.session_id, eap_sess_id_len);
+    memcpy(&ckn_context[eap_sess_id_len], link_rec->mka_ctrl.mka_info->lesser_mac.u8, BCMOS_ETH_ALEN);
+    memcpy(&ckn_context[eap_sess_id_len + BCMOS_ETH_ALEN], link_rec->mka_ctrl.mka_info->greater_mac.u8, BCMOS_ETH_ALEN);
+    dpoe_sec_aes_cmac_kdf(link_rec->auth_ctrl.trans_data.master_session_key, ckn_label, ckn_context, MKA_CKN_CONTEXT_LEN, link_rec->mka_ctrl.mka_info->ckn);
+}
+
+/* Calculate Secure Connectivity Association Key */
+static void _mka_calc_cak(dpoe_sec_link_rec *link_rec)
+{
+    char cak_label[MKA_CAK_LABEL_LEN + 1] = "IEEE8021 EAP CAK";
+    uint8_t cak_context[MKA_CAK_CONTEXT_LEN];
+
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(link_rec->mka_ctrl.mka_info == NULL);
+    BUG_ON(link_rec->mka_ctrl.mka_info->cak == NULL);
+    BUG_ON(link_rec->auth_ctrl.trans_data.master_session_key == NULL);
+
+    memcpy(&cak_context[0], link_rec->mka_ctrl.mka_info->lesser_mac.u8, BCMOS_ETH_ALEN);
+    memcpy(&cak_context[BCMOS_ETH_ALEN], link_rec->mka_ctrl.mka_info->greater_mac.u8, BCMOS_ETH_ALEN);
+    dpoe_sec_aes_cmac_kdf(link_rec->auth_ctrl.trans_data.master_session_key, cak_label, cak_context, MKA_CAK_CONTEXT_LEN, link_rec->mka_ctrl.mka_info->cak);
+}
+
+/* Get OLT port Mac and link Mac & compare. This is needed for calculating CAK */
+static void _mka_get_olt_and_link_mac(dpoe_sec_link_rec *link_rec)
+{
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(link_rec->mka_ctrl.mka_info == NULL);
+
+    /* compare OLT and Link MAC addresses */
+    if (memcmp(link_rec->ni_mac.u8, link_rec->key.mac_address.u8, sizeof(BCMOS_ETH_ALEN)) >= 0)
+    {
+        link_rec->mka_ctrl.mka_info->lesser_mac = link_rec->key.mac_address;
+        link_rec->mka_ctrl.mka_info->greater_mac = link_rec->ni_mac;
+    }
+    else
+    {
+        link_rec->mka_ctrl.mka_info->lesser_mac = link_rec->ni_mac;
+        link_rec->mka_ctrl.mka_info->greater_mac = link_rec->key.mac_address;
+    }
+}
+
+/* Initialize link MKA info structure */
+static void _mka_init_link_info(dpoe_sec_link_rec *link_rec)
+{
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(link_rec->mka_ctrl.mka_info == NULL);
+
+    /* initialize all local values */
+    memset(link_rec->mka_ctrl.mka_info, 0, sizeof(*link_rec->mka_ctrl.mka_info));
+    dpoe_sec_generate_n_byte_random_number(link_rec->mka_ctrl.mka_info->olt_member_id, MKA_MI_LEN);
+    link_rec->mka_ctrl.mka_info->curr_msg_num = 1; /* start from 1 */
+    link_rec->mka_ctrl.mka_info->key_number = 1; /* start from 1 */
+    _mka_get_olt_and_link_mac(link_rec);
+    _mka_calc_cak(link_rec);
+    _mka_calc_ckn(link_rec, SIZE_OF_EAP_SESSION_ID);
+    _mka_calc_ick(link_rec->mka_ctrl.mka_info->ick, link_rec->mka_ctrl.mka_info->cak, link_rec->mka_ctrl.mka_info->ckn);
+    _mka_calc_kek(link_rec->mka_ctrl.mka_info->kek, link_rec->mka_ctrl.mka_info->cak, link_rec->mka_ctrl.mka_info->ckn);
+}
+
+static void _mka_clear_link_info(dpoe_sec_link_rec *link_rec)
+{
+    /* Parameter checks. */
+    BUG_ON(link_rec->mka_ctrl.mka_info == NULL);
+
+    memset(link_rec->mka_ctrl.mka_info, 0, sizeof(*link_rec->mka_ctrl.mka_info));
+}
+
+/* Build EAPOL header for MKPDU */
+static bcmos_bool _mka_build_eapol_header(dpoe_sec_link_rec *link_rec, bcmolt_buf *out_buf, uint16_t length)
+{
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(out_buf == NULL);
+
+    return
+        bcmolt_buf_write_mac_address(out_buf, mka_dst_mac_addr) &&
+        bcmolt_buf_write_mac_address(out_buf, link_rec->ni_mac) &&
+        bcmolt_buf_write_u16_be(out_buf, ETHERTYPE_EAPOL) &&
+        bcmolt_buf_write_u8(out_buf, EAPOL_PROTOCOL_VERSION_DPOE) &&
+        bcmolt_buf_write_u8(out_buf, EAPOL_TYPE_MKA) &&
+        bcmolt_buf_write_u16_be(out_buf, length);
+}
+
+/* Build Basic parameter set. This parameter set is required for every MKPDU */
+static bcmos_bool _mka_build_basic_parameter_set(dpoe_sec_link_rec *link_rec, bcmolt_buf *out_buf)
+{
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(out_buf == NULL);
+    BUG_ON(link_rec->mka_ctrl.mka_info == NULL);
+
+    return
+        bcmolt_buf_write_u8(out_buf, MKA_VERSION) && /* Version Number, 802.1X Pg.98 */
+        bcmolt_buf_write_u8(out_buf, MKA_SERVER_PRIORITY) && /* Key Server Priority */
+        bcmolt_buf_write_u8(out_buf, MKA_BASIC_PARAM_SET_OPT) &&
+        bcmolt_buf_write_u8(out_buf, MKA_BASIC_PARAM_SET_LEN) &&
+        bcmolt_buf_write_mac_address(out_buf, link_rec->ni_mac) && /* 6 byte of SCI */
+        bcmolt_buf_write_u16_be(out_buf, link_rec->llid) && /* lower 2 byte SCI */
+        bcmolt_buf_write(out_buf, link_rec->mka_ctrl.mka_info->olt_member_id, MKA_MI_LEN) &&
+        bcmolt_buf_write_u32_be(out_buf, link_rec->mka_ctrl.mka_info->curr_msg_num++) && /* Important !! */
+        bcmolt_buf_write_u32_be(out_buf, MKA_ALGORITHM_AGILITY) &&
+        bcmolt_buf_write(out_buf, link_rec->mka_ctrl.mka_info->ckn, MKA_CKN_LEN / 8); /* CAK Name(CKN) */
+}
+
+/* Build an empty Live Peer or Potential Peer list parameter set */
+static bcmos_bool _mka_build_empty_peer_list(bcmolt_buf *out_buf, uint8_t type)
+{
+    /* Parameter checks. */
+    BUG_ON(out_buf == NULL);
+
+    return
+        bcmolt_buf_write_u8(out_buf, type) && /* Parameter set type */
+        bcmolt_buf_write_u8(out_buf, 0) &&
+        bcmolt_buf_write_u8(out_buf, 0) && /* options & 4 bit length */
+        bcmolt_buf_write_u8(out_buf, 0); /* Parameter set body length. */
+}
+
+/* Build Live Peer List or Potential Peer List parameter set */
+static bcmos_bool _mka_build_peer_list(
+    bcmolt_buf *out_buf,
+    uint8_t type,
+    const uint8_t *member_id,
+    uint32_t message_num)
+{
+    /* Parameter checks. */
+    BUG_ON(out_buf == NULL);
+    BUG_ON(member_id == NULL);
+
+    return
+        bcmolt_buf_write_u8(out_buf, type) && /* Parameter set type */
+        bcmolt_buf_write_u8(out_buf, 0) &&
+        bcmolt_buf_write_u8(out_buf, 0) && /* options & 4 bit length */
+        bcmolt_buf_write_u8(out_buf, MKA_MI_LEN + sizeof(uint32_t)) && /* Parameter set body length. */
+        bcmolt_buf_write(out_buf, member_id, MKA_MI_LEN) &&
+        bcmolt_buf_write_u32_be(out_buf, message_num);
+}
+
+/* Build ICV Indicator parameter set */
+static bcmos_bool _mka_build_icv_indicator(bcmolt_buf *out_buf)
+{
+    /* Parameter checks. */
+    BUG_ON(out_buf == NULL);
+
+    return
+        bcmolt_buf_write_u8(out_buf, MKPDU_PARAM_SET_ICV_INDICATOR) &&
+        bcmolt_buf_write_u8(out_buf, 0) &&
+        bcmolt_buf_write_u8(out_buf, 0) && /* options & 4 bit length */
+        bcmolt_buf_write_u8(out_buf, MKA_ICV_LEN); /* Parameter set body length. */
+}
+
+/* Build Distributed SAK parameter set (GCM-AES-128) */
+static bcmos_bool _mka_build_distributed_sak(
+    const dpoe_sec_link_rec *link_rec,
+    bcmolt_buf *out_buf,
+    const uint8_t *key_wrapped_sak)
+{
+    uint8_t option;
+
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(link_rec->mka_ctrl.mka_info == NULL);
+    BUG_ON(out_buf == NULL);
+    BUG_ON(key_wrapped_sak == NULL);
+
+    /* need Distributed AN & Confidentiality Offset (bit 5,4. use 0) */
+    option = link_rec->mka_ctrl.mka_info->association_number;
+
+    option <<= MKA_SAK_USE_PARAM_AN_SHIFT; /* move to bit 7,6 */
+
+    /* key number & AN will be increased from the caller */
+    if (!bcmolt_buf_write_u8(out_buf, MKPDU_PARAM_SET_DIST_SAK) ||
+        !bcmolt_buf_write_u8(out_buf, option) ||
+        !bcmolt_buf_write_u8(out_buf, 0) || /* options & 4 bit length */
+        !bcmolt_buf_write_u8(out_buf, MKA_KEY_WRAPPED_SAK_LEN + MKA_KN_LEN) ||
+        !bcmolt_buf_write_u32_be(out_buf, link_rec->mka_ctrl.mka_info->key_number) ||
+        !bcmolt_buf_write(out_buf, key_wrapped_sak, MKA_KEY_WRAPPED_SAK_LEN))
+    {
+        return BCMOS_FALSE;
+    }
+    return BCMOS_TRUE;
+}
+
+/* Build MACsec SAK Use paramater set */
+static bcmos_bool _mka_build_sak_use_param(
+    const dpoe_sec_link_rec *link_rec,
+    bcmolt_buf *out_buf,
+    bcmos_bool set_tx,
+    bcmos_bool set_rx)
+{
+    uint8_t option1 = 0;
+    uint8_t option2 = 0;
+    uint8_t tmp = 0;
+    uint32_t old_kn;
+
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(link_rec->mka_ctrl.mka_info == NULL);
+    BUG_ON(out_buf == NULL);
+
+    /* option 1: Latest Key AN(7:6), Latest Key Tx(5), Latest Key Rx(4) Old Key AN(3:2), Old Key Tx(1), Old Key Rx(0) */
+    option1 = link_rec->mka_ctrl.mka_info->association_number;
+    option1 <<= MKA_SAK_USE_PARAM_AN_SHIFT; /* move to bit 7,6 (AN) */
+
+    if (set_tx)
+    {
+        tmp = 1 << MKA_SAK_USE_PARAM_LK_TX_SHIFT; /* Latest Key TX */
+    }
+    if (set_rx)
+    {
+        tmp = tmp | (1 << MKA_SAK_USE_PARAM_LK_RX_SHIFT); /* Latest Key Rx */
+    }
+
+    /* for first frame, all 0 is used for old key info */
+    if (link_rec->mka_ctrl.mka_info->refresh_cnt != 0)
+    {
+        /* for OLD AN, tx, rx bits */
+        tmp = tmp | ((link_rec->mka_ctrl.mka_info->association_number & MKA_SAK_USE_PARAM_OLD_KEY_AN_MASK) << MKA_SAK_USE_PARAM_OLD_KEY_AN_SFT);
+        tmp = tmp | MKA_SAK_USE_PARAM_OLD_KEY_TX_RX; /* should have been tx & rx */
+    }
+    option1 |= tmp;
+
+    /* option 2: only set bit 7,6(plain tx & plain rx). all other bits including 4 bits length field should be 0 */
+    option2 = MKA_SAK_USE_PARAM_SECOND_OPT_BYTE;
+
+    /* need to decrement key number for old key (because key numer may be already incremented) */
+    if (link_rec->mka_ctrl.mka_info->key_number == 1) /* initial number */
+    {
+        old_kn = 1;
+    }
+    else
+    {
+        old_kn = link_rec->mka_ctrl.mka_info->key_number - 1;
+    }
+
+    if (!bcmolt_buf_write_u8(out_buf, MKPDU_PARAM_SET_MACSEC_SAK_USE) ||
+        !bcmolt_buf_write_u8(out_buf, option1) ||
+        !bcmolt_buf_write_u8(out_buf, option2) ||
+        !bcmolt_buf_write_u8(out_buf, MKA_SAK_USE_PARAM_BODY_LEN) ||
+        !bcmolt_buf_write(out_buf, link_rec->mka_ctrl.mka_info->olt_member_id, MKA_MI_LEN) ||
+        !bcmolt_buf_write_u32_be(out_buf, link_rec->mka_ctrl.mka_info->key_number) ||
+        !bcmolt_buf_write_u32_be(out_buf, 1) || /* Lowest acceptable PN, start from 1 */
+        !bcmolt_buf_write(out_buf, link_rec->mka_ctrl.mka_info->olt_member_id, MKA_MI_LEN) ||
+        !bcmolt_buf_write_u32_be(out_buf, old_kn) ||
+        !bcmolt_buf_write_u32_be(out_buf, 1))
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/* Calculate ICV and attach it at the end of MKPDU */
+static bcmos_bool _mka_calc_and_attach_icv(mka_link_info *mka_info, bcmolt_buf *out_buf)
+{
+    uint8_t ick[MKA_KEY_LEN];
+    uint8_t icv[MKA_KEY_LEN];
+
+    /* Parameter checks. */
+    BUG_ON(mka_info == NULL);
+    BUG_ON(out_buf == NULL);
+
+    _mka_calc_ick(ick, mka_info->cak, mka_info->ckn);
+
+    /* ICV will be calculated from DA to end of ICV indicator */
+    _mka_calc_icv(icv, ick, out_buf->start, (uint16_t)bcmolt_buf_get_used(out_buf));
+
+    return bcmolt_buf_write(out_buf, icv, MKA_KEY_LEN);
+}
+
+/* Send the first MKA frame to ONU */
+static bcmos_bool _mka_send_init_frame(dpoe_sec_link_rec *link_rec)
+{
+    bcmolt_buf out_buf;
+    uint8_t frame[MKA_PDU_MAX_FRAME_LEN];
+    bcmos_bool ret = BCMOS_FALSE;
+
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(link_rec->mka_ctrl.mka_info == NULL);
+
+    bcmolt_buf_init(&out_buf, MKA_PDU_MAX_FRAME_LEN, frame, BCMOLT_BUF_ENDIAN_FIXED);
+    /* construct frame */
+    if (!_mka_build_eapol_header(link_rec, &out_buf, MKA_OLT_INIT_FRAME_LEN) ||
+        !_mka_build_basic_parameter_set(link_rec, &out_buf) ||
+        !_mka_build_empty_peer_list(&out_buf, MKPDU_PARAM_SET_LIVE_PEER_LIST) ||
+        !_mka_build_empty_peer_list(&out_buf, MKPDU_PARAM_SET_POTENTIAL_PEER_LIST) ||
+        !_mka_build_icv_indicator(&out_buf) ||
+        !_mka_calc_and_attach_icv(link_rec->mka_ctrl.mka_info, &out_buf)) /* last important step. Calc & attach ICV */
+    {
+        return ret;
+    }
+
+    if (BCM_ERR_OK == dpoe_sec_send_eapol(link_rec->device, &link_rec->key, frame, bcmolt_buf_get_used(&out_buf)))
+    {
+        bcmos_timer_start(&link_rec->mka_ctrl.mka_fsm_info->rx_timer, MKA_LIFE_TIME * 1000);
+        bcmos_timer_start(&link_rec->mka_ctrl.mka_fsm_info->tx_timer, MKA_HELLO_TIME * 1000);
+        ret = BCMOS_TRUE;
+    }
+
+    return ret;
+}
+
+/* Generate a SAK using RNG */
+void mka_generate_sak(dpoe_sec_link_rec *link_rec, bcmos_bool initial)
+{
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(link_rec->mka_ctrl.mka_info == NULL);
+
+    /* Generate SAK */
+    if (initial)
+    {
+        _mka_calc_kek(link_rec->mka_ctrl.mka_info->kek, link_rec->mka_ctrl.mka_info->cak, link_rec->mka_ctrl.mka_info->ckn);
+        dpoe_sec_generate_n_byte_random_number(link_rec->mka_ctrl.mka_info->sak, MKA_KEY_LEN);
+    }
+    else
+    {
+        dpoe_sec_generate_n_byte_random_number(link_rec->mka_ctrl.mka_info->new_sak, MKA_KEY_LEN);
+    }
+}
+
+/* Send the SAK to the ONU */
+bcmos_errno mka_send_sak(dpoe_sec_link_rec *link_rec, uint8_t *sak)
+{
+    bcmolt_buf out_buf;
+    uint8_t frame[MKA_PDU_MAX_FRAME_LEN];
+    uint8_t key_wrapped_sak[MKA_KEY_LEN * 2] = {};
+    bcmos_errno rc = BCM_ERR_COMM_FAIL;
+    dpoe_sec_aes_key aes_key;
+
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(link_rec->mka_ctrl.mka_info == NULL);
+
+    bcmolt_buf_init(&out_buf, MKA_PDU_MAX_FRAME_LEN, frame, BCMOLT_BUF_ENDIAN_FIXED);
+    /* key wrap sak using kek */
+    dpoe_sec_aes_set_encrypt_key(link_rec->mka_ctrl.mka_info->kek, MKA_KEK_LEN, &aes_key);
+    dpoe_sec_aes_wrap_key(&aes_key, key_wrapped_sak, sak, MKA_SAK_LEN);
+
+    /* construct frame */
+    if (!_mka_build_eapol_header(
+            link_rec,
+            &out_buf,
+            MKA_OLT_INIT_FRAME_LEN + MKA_ONE_PEER_LEN + MKA_DISTRIBUTED_SAK_LEN + MKA_SAK_USE_PARAM_LEM) ||
+        !_mka_build_basic_parameter_set(link_rec, &out_buf) ||
+        !_mka_build_peer_list(
+            &out_buf,
+            MKPDU_PARAM_SET_LIVE_PEER_LIST,
+            link_rec->mka_ctrl.mka_info->link_memeber_id,
+            link_rec->mka_ctrl.mka_info->link_msg_num) ||
+        !_mka_build_empty_peer_list(&out_buf, MKPDU_PARAM_SET_POTENTIAL_PEER_LIST) ||
+        !_mka_build_distributed_sak(link_rec, &out_buf, key_wrapped_sak) ||
+        !_mka_build_sak_use_param(link_rec, &out_buf, BCMOS_FALSE, BCMOS_TRUE) || /* set RX only */
+        !_mka_build_icv_indicator(&out_buf))
+    {
+        return BCM_ERR_OVERFLOW;
+    }
+
+    /* last important step. Calc & attach ICV */
+    _mka_calc_and_attach_icv(link_rec->mka_ctrl.mka_info, &out_buf);
+
+    if (BCM_ERR_OK == dpoe_sec_send_eapol(link_rec->device, &link_rec->key, frame, bcmolt_buf_get_used(&out_buf)))
+    {
+        bcmos_timer_start(&link_rec->mka_ctrl.mka_fsm_info->tx_timer, MKA_HELLO_TIME * 1000);
+        rc = BCM_ERR_OK;
+    }
+
+    return rc;
+}
+
+/* Received SAK response. Send confirm frame to ONU */
+static bcmos_bool _mka_send_sak_confirm_frame(dpoe_sec_link_rec *link_rec)
+{
+    bcmolt_buf out_buf;
+    uint8_t frame[MKA_PDU_MAX_FRAME_LEN];
+
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(link_rec->mka_ctrl.mka_info == NULL);
+
+    bcmolt_buf_init(&out_buf, MKA_PDU_MAX_FRAME_LEN, frame, BCMOLT_BUF_ENDIAN_FIXED);
+    if (!_mka_build_eapol_header(link_rec, &out_buf, MKA_OLT_INIT_FRAME_LEN + MKA_ONE_PEER_LEN + MKA_SAK_USE_PARAM_LEM) ||
+        !_mka_build_basic_parameter_set(link_rec, &out_buf) ||
+        !_mka_build_peer_list(
+            &out_buf, MKPDU_PARAM_SET_LIVE_PEER_LIST,
+            link_rec->mka_ctrl.mka_info->link_memeber_id,
+            link_rec->mka_ctrl.mka_info->link_msg_num) ||
+        !_mka_build_empty_peer_list(&out_buf, MKPDU_PARAM_SET_POTENTIAL_PEER_LIST) ||
+        !_mka_build_sak_use_param(link_rec, &out_buf, BCMOS_TRUE, BCMOS_TRUE) ||
+        !_mka_build_icv_indicator(&out_buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    /* last important step. Calc & attach ICV */
+    _mka_calc_and_attach_icv(link_rec->mka_ctrl.mka_info, &out_buf);
+
+    return BCM_ERR_OK == dpoe_sec_send_eapol(link_rec->device, &link_rec->key, frame, bcmolt_buf_get_used(&out_buf));
+}
+
+/* send keep-alive frame every 2 seconds */
+static bcmos_bool _mka_send_keepalive_frame(dpoe_sec_link_rec *link_rec)
+{
+    bcmolt_buf out_buf;
+    uint8_t frame[MKA_PDU_MAX_FRAME_LEN];
+
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(link_rec->mka_ctrl.mka_info == NULL);
+
+    bcmolt_buf_init(&out_buf, MKA_PDU_MAX_FRAME_LEN, frame, BCMOLT_BUF_ENDIAN_FIXED);
+    if (!_mka_build_eapol_header(link_rec, &out_buf, MKA_OLT_INIT_FRAME_LEN + MKA_ONE_PEER_LEN) ||
+        !_mka_build_basic_parameter_set(link_rec, &out_buf) ||
+        !_mka_build_peer_list(
+            &out_buf,
+            MKPDU_PARAM_SET_LIVE_PEER_LIST,
+            link_rec->mka_ctrl.mka_info->link_memeber_id,
+            link_rec->mka_ctrl.mka_info->link_msg_num) ||
+        !_mka_build_empty_peer_list(&out_buf, MKPDU_PARAM_SET_POTENTIAL_PEER_LIST) ||
+        !_mka_build_icv_indicator(&out_buf))
+    {
+        return BCMOS_FALSE;
+    }
+
+    /* last important step. Calc & attach ICV */
+    _mka_calc_and_attach_icv(link_rec->mka_ctrl.mka_info, &out_buf);
+
+    return BCM_ERR_OK == dpoe_sec_send_eapol(link_rec->device, &link_rec->key, frame, bcmolt_buf_get_used(&out_buf));
+}
+
+/* Entry point for MKA process. It is called to start the MKA exchange with the ONU that owns the specified link. */
+bcmos_errno mka_start(dpoe_sec_link_rec *link_rec)
+{
+    bcmos_errno rc;
+
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(link_rec->mka_ctrl.mka_info == NULL);
+
+    /* initialize link MKA info */
+    _mka_init_link_info(link_rec);
+
+    /* send initial frame (basic param + empty live & potential peer list */
+    if (_mka_send_init_frame(link_rec))
+    {
+        rc = BCM_ERR_OK;
+    }
+    else
+    {
+        rc = BCM_ERR_COMM_FAIL;
+    }
+
+    return rc;
+}
+
+/* Calculate the ICV over the message and compare with the ICV in the message. */
+static bcmos_errno _mka_compare_icv(mka_link_info *info, const mka_event *msg, uint8_t *rx_icv)
+{
+    uint16_t len = 0;
+    uint8_t icv[MKA_ICV_LEN];
+
+    /* Parameter checks. */
+    BUG_ON(info == NULL);
+    BUG_ON(msg == NULL);
+
+    /* If the ICV pointer is NULL, then there was no ICV in the received MKA packet. Just return an error. */
+    if (rx_icv == NULL)
+    {
+        return BCM_ERR_PARM;
+    }
+
+    /* Calculate the length of the buffer over which to calculate the ICV. */
+    len = (EAPOL_MSG_HDR_SIZE + msg->msg->eapol_length) - MKA_ICV_LEN;
+
+    _mka_calc_icv(icv, info->ick, msg->buf->start, len);
+
+    if (memcmp(icv, rx_icv, sizeof(icv)) != 0)
+    {
+        return BCM_ERR_ONU_ERR_RESP;
+    }
+
+    return BCM_ERR_OK;
+}
+
+/* Parse the Basic Parameter Set in MKA PDUs */
+static bcmos_errno _mka_parse_basic_param_set(
+    dpoe_sec_link_rec *link_rec,
+    bcmolt_buf *buf,
+    uint16_t *bytes_read,
+    uint16_t body_len,
+    uint8_t *sci,
+    uint8_t *member_id,
+    uint32_t *msg_num)
+{
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(buf == NULL);
+    BUG_ON(bytes_read == NULL);
+
+    /* Read the ONU SCI */
+    if (!bcmolt_buf_read(buf, sci, MKA_SCI_LEN))
+    {
+        return BCM_ERR_PARSE;
+    }
+
+    /* Read the Member ID */
+    if (!bcmolt_buf_read(buf, member_id, MKA_MI_LEN))
+    {
+        return BCM_ERR_PARSE;
+    }
+
+    /* Read the ONU message number. */
+    if (!bcmolt_buf_read_u32_be(buf, msg_num))
+    {
+        return BCM_ERR_PARSE;
+    }
+
+    /* The SCI, MI, and MN were read from the packet. */
+    *bytes_read = MKA_SCI_LEN + MKA_MI_LEN + MKA_MN_LEN;
+
+    /* Skip the rest */
+    if (!bcmolt_buf_skip(buf, body_len - *bytes_read))
+    {
+        return BCM_ERR_PARSE;
+    }
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno _mka_waiting_initial_response_data_ind(mka_event *msg, dpoe_sec_link_rec *link_rec)
+{
+    bcmos_errno rc = BCM_ERR_PARSE;
+    uint8_t *icv_ptr;
+    uint8_t param_set_type;
+    uint16_t body_len;
+    bcmos_bool basic_param_set_exist = BCMOS_FALSE;
+    bcmos_bool live_peer_list_exist = BCMOS_FALSE;
+    bcmos_bool potential_peer_list_exist = BCMOS_FALSE;
+    uint16_t bytes_read;
+
+    /* Validate the msg pointer. */
+    BUG_ON(msg->buf == NULL);
+    BUG_ON(msg->msg == NULL);
+
+    /* mark ICV field offset */
+    icv_ptr = msg->buf->curr + (msg->msg->eapol_length - MKA_ICV_LEN);
+
+    /* Validate the Integrity Check Value before continuing to process the packet. */
+    rc = _mka_compare_icv(link_rec->mka_ctrl.mka_info, msg, icv_ptr);
+    BCMOS_CHECK_RETURN_ERROR(BCM_ERR_OK != rc, rc);
+
+    while (bcmolt_buf_get_remaining_size(msg->buf) > 0)
+    {
+        /* Don't parse past the ICV Parameter Set */
+        if (bcmolt_buf_snap_get(msg->buf) >= icv_ptr)
+        {
+            break;
+        }
+
+        /* Read what should be the Basic Parameter Set header. */
+        if (!bcmolt_buf_read_u8(msg->buf, &param_set_type) ||
+            !bcmolt_buf_skip(msg->buf, 1) ||
+            !bcmolt_buf_read_u16_be(msg->buf, &body_len))
+        {
+            break;
+        }
+
+        /* The body length is really 12-bits. */
+        body_len &= 0x0fff;
+
+        if (param_set_type == MKPDU_PARAM_SET_LIVE_PEER_LIST)
+        {
+            /* need to find out whether it is Basic parameter set OR Live Peer List */
+            if (body_len >= MKA_BASIC_PARAM_SET_LEN)
+            {
+                rc = _mka_parse_basic_param_set(
+                    link_rec,
+                    msg->buf,
+                    &bytes_read,
+                    body_len,
+                    link_rec->mka_ctrl.mka_info->onu_sci,
+                    link_rec->mka_ctrl.mka_info->link_memeber_id,
+                    &link_rec->mka_ctrl.mka_info->link_msg_num);
+                if (rc != BCM_ERR_OK)
+                {
+                    DPOE_SEC_LINK_LOG(ERROR, link_rec, "parse basic param set failed!\n");
+                    break;
+                }
+
+                /* Mark that the Basic Parameter Set was found. */
+                basic_param_set_exist = BCMOS_TRUE;
+            }
+            else
+            {
+                /* Live Peer List. skip */
+                if (!bcmolt_buf_skip(msg->buf, body_len))
+                {
+                    DPOE_SEC_LINK_LOG(ERROR, link_rec, "parse live peer list failed!\n");
+                    rc = BCM_ERR_PARSE;
+                    break;
+                }
+
+                /* Mark that the Live Peer List Parameter Set was found. */
+                live_peer_list_exist = BCMOS_TRUE;
+            }
+        }
+        else if (param_set_type == MKPDU_PARAM_SET_POTENTIAL_PEER_LIST)
+        {
+            uint8_t mi[MKA_MI_LEN];
+
+            if (!bcmolt_buf_read(msg->buf, mi, sizeof(mi)))
+            {
+                DPOE_SEC_LINK_LOG(ERROR, link_rec, "parse potential peer list failed!\n");
+                rc = BCM_ERR_PARSE;
+                break;
+            }
+
+            /* Verify that the OLT member ID in the Potential Peer List Parameter Set matches the expected OLT member
+               ID. */
+            if (memcmp(mi, link_rec->mka_ctrl.mka_info->olt_member_id, MKA_MI_LEN) != 0)
+            {
+                DPOE_SEC_LINK_LOG(ERROR, link_rec, "wrong member ID!\n");
+                rc = BCM_ERR_ONU_ERR_RESP;
+                break;
+            }
+
+            /* Skip the remaining bytes. */
+            if (!bcmolt_buf_skip(msg->buf, body_len - MKA_MI_LEN))
+            {
+                DPOE_SEC_LINK_LOG(ERROR, link_rec, "buffer overflow!\n");
+                rc = BCM_ERR_PARSE;
+                break;
+            }
+
+            /* Mark that the Potential Peer List Parameter Set was found. */
+            potential_peer_list_exist = BCMOS_TRUE;
+        }
+        else
+        {
+            /* Skip other Parameter Set data. */
+            if (!bcmolt_buf_skip(msg->buf, body_len))
+            {
+                DPOE_SEC_LINK_LOG(ERROR, link_rec, "buffer overflow!\n");
+                rc = BCM_ERR_PARSE;
+                break;
+            }
+        }
+    }
+
+    if ((rc == BCM_ERR_OK) &&
+        basic_param_set_exist &&
+        live_peer_list_exist &&
+        potential_peer_list_exist &&
+        (link_rec->mka_ctrl.mka_info->peer_state != MKA_PEER_STATE_LIVE))
+    {
+        /* proceed to next state */
+        link_rec->mka_ctrl.mka_info->peer_state = MKA_PEER_STATE_LIVE;
+    }
+    else
+    {
+        rc = BCM_ERR_ONU_ERR_RESP;
+    }
+
+    return rc;
+}
+
+/* Handler for initial response from the ONU */
+static bcmos_errno _mka_waiting_initial_response(mka_event *msg, dpoe_sec_link_rec *link_rec)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+
+    /* Parameter checks. */
+    BUG_ON(msg == NULL);
+    BUG_ON(link_rec == NULL);
+    BUG_ON(link_rec->mka_ctrl.mka_info == NULL);
+
+    switch (msg->type)
+    {
+        case MKA_MSG_TIMEOUT:
+            /* retry 3 times */
+            if (link_rec->mka_ctrl.mka_info->retry_cnt < MKA_INIT_RETRY_CNT)
+            {
+                link_rec->mka_ctrl.mka_info->retry_cnt++;
+                (void)_mka_send_init_frame(link_rec);
+            }
+            else
+            {
+                _mka_clear_link_info(link_rec);
+                rc = BCM_ERR_TIMEOUT;
+            }
+            break;
+
+        case MKA_MSG_DATA_IND:
+            rc = _mka_waiting_initial_response_data_ind(msg, link_rec);
+            break;
+
+        default:
+            rc = BCM_ERR_ONU_ERR_RESP;
+            break;
+    }
+
+    return rc;
+}
+
+static bcmos_errno _mka_initial_sak_sent_data_ind(mka_event *msg, dpoe_sec_link_rec *link_rec)
+{
+    bcmos_errno rc = BCM_ERR_PARSE;
+    uint8_t *icv_ptr;
+    uint8_t param_set_type;
+    uint8_t ks_priority;
+    uint16_t body_len;
+    bcmos_bool basic_param_ok = BCMOS_FALSE;
+    bcmos_bool live_peer_list_ok = BCMOS_FALSE;
+    bcmos_bool potential_peer_list_ok = BCMOS_FALSE;
+    bcmos_bool sak_use_param_ok = BCMOS_FALSE;
+    uint16_t bytes_read;
+
+    /* Validate the msg pointer. */
+    BUG_ON(msg->msg == NULL);
+    BUG_ON(msg->buf == NULL);
+
+    /* mark ICV field offset */
+    icv_ptr = msg->buf->curr + (msg->msg->eapol_length - MKA_ICV_LEN);
+
+    /* Validate the Integrity Check Value before continuing to process the packet. */
+    rc = _mka_compare_icv(link_rec->mka_ctrl.mka_info, msg, icv_ptr);
+    BCMOS_CHECK_RETURN_ERROR(BCM_ERR_OK != rc, rc);
+
+    while (bcmolt_buf_get_remaining_size(msg->buf) > 0)
+    {
+        /* Don't parse past the ICV Parameter Set */
+        if (bcmolt_buf_snap_get(msg->buf) >= icv_ptr)
+        {
+            break;
+        }
+
+        /* Read what should be the Basic Parameter Set header. */
+        if (!bcmolt_buf_read_u8(msg->buf, &param_set_type) ||
+            !bcmolt_buf_read_u8(msg->buf, &ks_priority) ||
+            !bcmolt_buf_read_u16_be(msg->buf, &body_len))
+        {
+            rc = BCM_ERR_PARSE;
+            break;
+        }
+
+        /* The body length is really 12-bits. */
+        body_len &= 0x0fff;
+
+        if (param_set_type == MKPDU_PARAM_SET_LIVE_PEER_LIST)
+        {
+            /* need to find out whether it is Basic parameter set OR Live Peer List */
+            if (body_len >= MKA_BASIC_PARAM_SET_LEN)
+            {
+                /* in our environment, ONU can not have more than one live peer. So, just seeing param set body len
+                   should be good enough. */
+                uint32_t link_mn;
+                uint8_t sci[MKA_SCI_LEN];
+                uint8_t mi[MKA_MI_LEN];
+
+                rc = _mka_parse_basic_param_set(link_rec, msg->buf, &bytes_read, body_len, sci, mi, &link_mn);
+                if (rc != BCM_ERR_OK)
+                {
+                    break;
+                }
+
+                /* Verify that ONU SCI is what's expected. */
+                if (memcmp(link_rec->mka_ctrl.mka_info->onu_sci, sci, MKA_SCI_LEN) != 0)
+                {
+                    rc = BCM_ERR_ONU_ERR_RESP;
+                    break;
+                }
+
+                /* Verify that ONU MI is what's expected. */
+                if (memcmp(link_rec->mka_ctrl.mka_info->link_memeber_id, mi, MKA_MI_LEN) != 0)
+                {
+                    rc = BCM_ERR_ONU_ERR_RESP;
+                    break;
+                }
+
+                /* Verify that the MN is what's expected. */
+                if (link_rec->mka_ctrl.mka_info->link_msg_num < link_mn)
+                {
+                    /* correct MN! */
+                    link_rec->mka_ctrl.mka_info->link_msg_num = link_mn;
+                    basic_param_ok = BCMOS_TRUE;
+                }
+            }
+            else
+            {
+                /* Live Peer List. skip */
+                if (!bcmolt_buf_skip(msg->buf, body_len))
+                {
+                    rc = BCM_ERR_PARSE;
+                    break;
+                }
+
+                /* Mark that the Live Peer List Parameter Set was found. */
+                live_peer_list_ok = BCMOS_TRUE;
+            }
+        }
+        else if (param_set_type == MKPDU_PARAM_SET_POTENTIAL_PEER_LIST)
+        {
+            /* Skip Potential Peer List Parameter Set. */
+            if (!bcmolt_buf_skip(msg->buf, body_len))
+            {
+                rc = BCM_ERR_PARSE;
+                break;
+            }
+
+            /* Mark that the Potential Peer List Parameter Set was found. */
+            potential_peer_list_ok = BCMOS_TRUE;
+        }
+        else if (param_set_type == MKPDU_PARAM_SET_MACSEC_SAK_USE)
+        {
+            /* check only Latest key tx & rx bits (bit 4 & 5) */
+            if ((ks_priority & 0x30) == 0x30)
+            {
+                sak_use_param_ok = BCMOS_TRUE;
+            }
+
+            /* Skip the MKA SAK Use Parameter Set. */
+            if (!bcmolt_buf_skip(msg->buf, body_len))
+            {
+                rc = BCM_ERR_PARSE;
+                break;
+            }
+        }
+        else
+        {
+            /* Skip all other Parameter Set data. */
+            if (!bcmolt_buf_skip(msg->buf, body_len))
+            {
+                rc = BCM_ERR_PARSE;
+                break;
+            }
+        }
+    }
+
+    /* Everything looks good so far? */
+    if ((rc == BCM_ERR_OK) &&
+        basic_param_ok &&
+        live_peer_list_ok &&
+        potential_peer_list_ok &&
+        sak_use_param_ok)
+    {
+        DPOE_SEC_LINK_LOG(DEBUG, link_rec, "Got good MKA SAK response\n");
+    }
+
+    return rc;
+}
+
+/* Response frame handler for the first SAK from the OLT */
+static bcmos_errno _mka_initial_sak_sent(mka_event *msg, dpoe_sec_link_rec *link_rec)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+
+    /* Parameter checks. */
+    BUG_ON(msg == NULL);
+    BUG_ON(link_rec == NULL);
+    BUG_ON(link_rec->mka_ctrl.mka_info == NULL);
+
+    switch (msg->type)
+    {
+        case MKA_MSG_TIMEOUT:
+            _mka_clear_link_info(link_rec);
+            rc = BCM_ERR_TIMEOUT;
+            break;
+
+        case MKA_MSG_DATA_IND:
+            rc = _mka_initial_sak_sent_data_ind(msg, link_rec);
+            break;
+
+        default:
+            rc = BCM_ERR_ONU_ERR_RESP;
+            break;
+    }
+
+    return rc;
+}
+
+static bcmos_errno _mka_sak_done_data_ind(mka_event *msg, dpoe_sec_link_rec *link_rec)
+{
+    bcmos_errno rc = BCM_ERR_PARSE;
+    uint8_t *icv_ptr;
+    uint8_t param_set_type;
+    uint16_t body_len;
+    uint8_t ks_priority;
+    uint16_t bytes_read;
+
+    /* Validate the msg pointer. */
+    BUG_ON(msg->msg == NULL);
+    BUG_ON(msg->buf == NULL);
+
+    /* mark ICV field offset */
+    icv_ptr = msg->buf->curr + (msg->msg->eapol_length - MKA_ICV_LEN);
+
+    /* Validate the Integrity Check Value before continuing to process the packet. */
+    rc = _mka_compare_icv(link_rec->mka_ctrl.mka_info, msg, icv_ptr);
+    BCMOS_CHECK_RETURN_ERROR(BCM_ERR_OK != rc, rc);
+
+    while (bcmolt_buf_get_remaining_size(msg->buf) > 0)
+    {
+        /* Don't parse past the ICV Parameter Set */
+        if (bcmolt_buf_snap_get(msg->buf) >= icv_ptr)
+        {
+            break;
+        }
+
+        /* Read what should be the Basic Parameter Set header. */
+        if (!bcmolt_buf_read_u8(msg->buf, &param_set_type) ||
+            !bcmolt_buf_read_u8(msg->buf, &ks_priority) ||
+            !bcmolt_buf_read_u16_be(msg->buf, &body_len))
+        {
+            rc = BCM_ERR_PARSE;
+            break;
+        }
+
+        /* The body length is really 12-bits. */
+        body_len &= 0x0fff;
+
+        if (param_set_type == MKPDU_PARAM_SET_LIVE_PEER_LIST)
+        {
+            /* need to find out whether it is Basic parameter set OR Live Peer List */
+            if (body_len >= MKA_BASIC_PARAM_SET_LEN)
+            {
+                /* in our environment, ONU can not have more than one live peer. So, just seeing param set body len
+                   should be good enough. */
+                uint32_t link_mn;
+                uint8_t sci[MKA_SCI_LEN];
+                uint8_t mi[MKA_MI_LEN];
+
+                rc = _mka_parse_basic_param_set(link_rec, msg->buf, &bytes_read, body_len, sci, mi, &link_mn);
+                if (rc != BCM_ERR_OK)
+                {
+                    break;
+                }
+
+                /* Verify that ONU SCI is what's expected. */
+                if (memcmp(link_rec->mka_ctrl.mka_info->onu_sci, sci, MKA_SCI_LEN) != 0)
+                {
+                    rc = BCM_ERR_ONU_ERR_RESP;
+                    break;
+                }
+
+                /* Verify that ONU MI is what's expected. */
+                if (memcmp(link_rec->mka_ctrl.mka_info->link_memeber_id, mi, MKA_MI_LEN) != 0)
+                {
+                    rc = BCM_ERR_ONU_ERR_RESP;
+                    break;
+                }
+
+                if (link_rec->mka_ctrl.mka_info->link_msg_num < link_mn)
+                {
+                    /* correct MN! */
+                    link_rec->mka_ctrl.mka_info->link_msg_num = link_mn;
+                }
+            }
+            else
+            {
+                /* Live Peer List. skip */
+                if (!bcmolt_buf_skip(msg->buf, body_len))
+                {
+                    rc = BCM_ERR_PARSE;
+                    break;
+                }
+            }
+        }
+        else if (param_set_type == MKPDU_PARAM_SET_MACSEC_SAK_USE)
+        {
+            uint32_t llpn;
+
+            /* Skip to the LLPN. */
+            if (!bcmolt_buf_skip(msg->buf, MKA_MI_LEN + MKA_KN_LEN))
+            {
+                rc = BCM_ERR_PARSE;
+                break;
+            }
+
+            /* read Latest Lowest Acceptable PN */
+            if (!bcmolt_buf_read_u32_be(msg->buf, &llpn))
+            {
+                rc = BCM_ERR_PARSE;
+                break;
+            }
+
+            if (llpn > MKA_MAX_ACCEPTABLE_PN)
+            {
+                /* Set flag to indicate SAK refresh is needed. */
+                link_rec->mka_ctrl.mka_info->sak_refresh_needed = BCMOS_TRUE;
+            }
+
+            /* check only Latest key tx & rx bits (bit 4 & 5) */
+            if ((ks_priority & 0x30) != 0x30)
+            {
+                /* Wrong LK Flag */ /* TODO: why isn't this an error? */
+            }
+
+            /* The MI, KN, and LLPN were read. */
+            bytes_read = body_len - (MKA_MI_LEN + MKA_KN_LEN + sizeof(uint32_t));
+
+            /* Skip the rest */
+            if (!bcmolt_buf_skip(msg->buf, bytes_read))
+            {
+                rc = BCM_ERR_PARSE;
+                break;
+            }
+        }
+        else
+        {
+            /* Skip all other Parameter Set data. */
+            if (!bcmolt_buf_skip(msg->buf, body_len))
+            {
+                rc = BCM_ERR_PARSE;
+                break;
+            }
+        }
+    }
+
+    /* refresh retry count. This is a Critical counter */
+    link_rec->mka_ctrl.mka_info->retry_cnt = 0;
+
+    return rc;
+}
+
+/* MKA frame handler for stable state */
+static bcmos_errno _mka_sak_done(mka_event *msg, dpoe_sec_link_rec *link_rec)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+
+    /* Parameter checks. */
+    BUG_ON(msg == NULL);
+    BUG_ON(link_rec == NULL);
+    BUG_ON(link_rec->mka_ctrl.mka_info == NULL);
+
+    switch (msg->type)
+    {
+        case MKA_MSG_TIMEOUT:
+            /* send keepalive frame at every 2 seconds */
+            (void)_mka_send_keepalive_frame(link_rec);
+            break;
+
+        case MKA_MSG_DATA_IND:
+            rc = _mka_sak_done_data_ind(msg, link_rec);
+            break;
+
+        default:
+            rc = BCM_ERR_ONU_ERR_RESP;
+            break;
+    }
+
+    return rc;
+}
+
+/* Validate the MKA packet. */
+static bcmos_bool _mka_validate_pkt(bcmolt_u8_list_u16 mka_msg, eapol_msg_hdr *eapol)
+{
+    /* Parameter checks. */
+    BUG_ON(eapol == NULL);
+
+    /* This had better be an MKA packet. */
+    if (eapol->eapol_packet_type != EAPOL_TYPE_MKA)
+    {
+        return BCMOS_FALSE;
+    }
+
+    /* The EAPOL length plus the size of the EapolMsgHdr must equal the length of the received packet. */
+    if (mka_msg.len != (eapol->eapol_length + EAPOL_MSG_HDR_SIZE))
+    {
+        return BCMOS_FALSE;
+    }
+
+    /* The EAPOL length must be greater than the minimum supported length, Ethernet + EAPOL header length. */
+    if (eapol->eapol_length < MKA_PDU_MIN_LENGTH)
+    {
+        return BCMOS_FALSE;
+    }
+
+    /* The EAPOL length must be a multiple of four. */
+    if ((eapol->eapol_length % 4) != 0)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+/* Wrapper into the MKA code that sends an SAK Confirm response to the ONU. */
+bcmos_errno mka_send_sak_confirm(dpoe_sec_link_rec *link_rec)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(link_rec->mka_ctrl.mka_info == NULL);
+
+    /* proceed to next state */
+    if (_mka_send_sak_confirm_frame(link_rec))
+    {
+        /* Everything looks good so far. Update AN and Key Number */
+        link_rec->mka_ctrl.mka_info->key_number += 1;
+        link_rec->mka_ctrl.mka_info->association_number += 1;
+        if (link_rec->mka_ctrl.mka_info->association_number == 4)
+        {
+            /* The association number is concatenated with the OLT SCI to identify a secure association between OLT and
+               ONU. The AN value starts at zero and cycles through values 0 - 3 as a new SAK is distributed to the ONU.
+               */
+            link_rec->mka_ctrl.mka_info->association_number = 0; /* AN = 0 ~ 3 */
+        }
+
+        link_rec->mka_ctrl.mka_info->state = MKA_STATE_MKA_DONE;
+        link_rec->mka_ctrl.mka_info->refresh_cnt += 1;
+        link_rec->mka_ctrl.mka_info->retry_cnt = 0;
+
+        /* start keepalive timer (2 second) */
+        bcmos_timer_start(&link_rec->mka_ctrl.mka_fsm_info->tx_timer, MKA_HELLO_TIME * 1000);
+    }
+    else
+    {
+        rc = BCM_ERR_COMM_FAIL;
+    }
+
+    return rc;
+}
+
+/* Wrapper into the MKA code that handles MKA PDUs from the ONU. */
+bcmos_errno mka_process_packet(dpoe_sec_link_rec *link_rec, bcmolt_u8_list_u16 rx_frame, mka_op_type op_type)
+{
+    bcmos_errno rc = BCM_ERR_PARM;
+    mka_event mka_msg;
+    bcmolt_buf buf;
+    eapol_msg_hdr eapol;
+
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+    BUG_ON(rx_frame.val == NULL);
+    BUG_ON((op_type <= MKA_OP__INVALID) || (op_type > MKA_OP_KEEP_ALIVE));
+
+    bcmolt_buf_init(&buf, rx_frame.len, rx_frame.val, BCMOLT_BUF_ENDIAN_FIXED);
+    if (!dpoe_sec_eapol_unpack(&buf, &eapol))
+    {
+        DPOE_SEC_LINK_LOG(ERROR, link_rec, "failed to unpack EAPOL header!\n");
+        return BCM_ERR_PARSE;
+    }
+
+    /* Validate the MKA packet length before processing. */
+    if (!_mka_validate_pkt(rx_frame, &eapol))
+    {
+        DPOE_SEC_LINK_LOG(ERROR, link_rec, "Invalid MKA packet!\n");
+        return BCM_ERR_PARSE;
+    }
+
+    /* Pass the packet to the handler. */
+    mka_msg.type = MKA_MSG_DATA_IND;
+    mka_msg.msg = &eapol;
+    mka_msg.buf = &buf;
+
+    /* Process the MKA packet. */
+    switch (op_type)
+    {
+        case MKA_OP_START_RSP:
+            rc = _mka_waiting_initial_response(&mka_msg, link_rec);
+            break;
+        case MKA_OP_SAK_RSP:
+            rc = _mka_initial_sak_sent(&mka_msg, link_rec);
+            break;
+        case MKA_OP_KEEP_ALIVE:
+            rc = _mka_sak_done(&mka_msg, link_rec);
+            break;
+        default:
+            break;
+    }
+
+    return rc;
+}
+
+/* Wrapper into the MKA code that handles MKA timeouts. */
+bcmos_errno mka_process_timeout(dpoe_sec_link_rec *link_rec, mka_op_type op_type)
+{
+    bcmos_errno rc = BCM_ERR_TIMEOUT;
+    mka_event mka_msg;
+
+    /* Parameter checks. */
+    BUG_ON(link_rec == NULL);
+    BUG_ON((op_type < MKA_OP_START_TIMEOUT) || (op_type >= MKA_OP__COUNT));
+
+    /* Pass the packet to the handler. */
+    mka_msg.type = MKA_MSG_TIMEOUT;
+
+    /* Process the MKA packet. */
+    switch (op_type)
+    {
+        case MKA_OP_START_TIMEOUT:
+            rc = _mka_waiting_initial_response(&mka_msg, link_rec);
+            break;
+        case MKA_OP_SAK_TIMEOUT:
+            rc  = _mka_initial_sak_sent(&mka_msg, link_rec);
+            break;
+        case MKA_OP_SEND_KEEP_ALIVE:
+            rc = _mka_sak_done(&mka_msg, link_rec);
+            break;
+        default:
+            break;
+    }
+
+    return rc;
+}
+
diff --git a/bcm68620_release/release/host_reference/user_appl/dpoe_sec/mka.h b/bcm68620_release/release/host_reference/user_appl/dpoe_sec/mka.h
new file mode 100644
index 0000000..b195864
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/dpoe_sec/mka.h
@@ -0,0 +1,130 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#if !defined(MKA_H)
+#define MKA_H
+
+#include "bcmos_system.h"
+#include "bcmolt_model_types.h"
+
+#define MKA_LIFE_TIME               6000 /* Ms, 6 seconds */
+
+#define MKA_SCI_LEN                 8 /* common SCI size */
+#define MKA_MI_LEN                  12 /* Member Identifier */
+
+/* KEK */
+#define MKA_KEK_LEN                 128 /* bit length. 16 bytes */
+
+/* SAK */
+#define MKA_SAK_LEN                 16
+
+/* ICK */
+#define MKA_ICK_LEN                 128 /* bit length. 16 bytes */
+
+/* CKN */
+#define MKA_CKN_LEN                 128 /* bit length. 16 bytes */
+
+/* CAK */
+#define MKA_CAK_LEN                 128 /* bit length. 16 bytes */
+
+/* for MACSec Key Agreement */
+typedef enum
+{
+    MKA_STATE_INITIAL                   = 0,
+    MKA_STATE_WAITING_INITIAL_PEER_RESP = 1,
+    MKA_STATE_SAK_SENT                  = 2,
+    MKA_STATE_MKA_DONE                  = 3,
+
+    MKA_STATE__COUNT
+} mka_state;
+
+typedef enum
+{
+    MKA_PEER_STATE_NONE = 0,
+    MKA_PEER_STATE_LIVE = 1,
+    MKA_PEER_STATE_POTENTIAL = 2,
+} mka_peer_state;
+
+typedef struct
+{
+    uint8_t  onu_sci[MKA_SCI_LEN]; /**< ONU's SCI */
+    uint8_t  olt_member_id[MKA_MI_LEN]; /**< OLT MI */
+    uint32_t curr_msg_num; /**< Current OLT MN */
+    uint8_t  link_memeber_id[MKA_MI_LEN]; /**< Link MI */
+    uint32_t link_msg_num; /**< Current Link MN */
+    uint8_t  cak[MKA_CAK_LEN/8]; /**< Derived CAK */
+    uint8_t  ckn[MKA_CKN_LEN/8]; /**< Derived CKN */
+    uint8_t  sak[MKA_SAK_LEN]; /**< Derived SAK (a.k.a TEK) */
+    uint8_t  new_sak[MKA_SAK_LEN]; /**< New derived SAK for key refresh */
+    uint8_t  kek[MKA_KEK_LEN/8]; /**< Derived KEK */
+    uint8_t  ick[MKA_ICK_LEN/8]; /**< Derived ICK */
+    uint32_t key_number; /**< Current KN */
+    uint8_t  association_number; /**< AN */
+    bcmos_mac_address lesser_mac; /**< Lowest MAC address of MKA peers */
+    bcmos_mac_address greater_mac; /**< Greatest MAC address of MKA peers */
+    mka_state state; /**< State of MKA proper SM */
+    mka_peer_state peer_state; /**< State of MKA peer */
+    uint8_t  retry_cnt; /**< MKA message retry count */
+    uint8_t  refresh_cnt; /**< Important for building SAK Use Param set */
+    bcmos_bool sak_refresh_needed; /**< SAK refresh needed flag */
+} mka_link_info;
+
+/* The type of MKA operation to process. */
+typedef enum mka_op_type
+{
+    MKA_OP__INVALID = -1,
+
+    /* Packet operations. */
+    MKA_OP_START_RSP,
+    MKA_OP_SAK_RSP,
+    MKA_OP_KEEP_ALIVE,
+
+    /* Timeout operations. */
+    MKA_OP_START_TIMEOUT,
+    MKA_OP_SAK_TIMEOUT,
+    MKA_OP_SEND_KEEP_ALIVE,
+
+    MKA_OP__COUNT
+} mka_op_type;
+
+struct dpoe_sec_link_rec;
+
+bcmos_errno mka_start(struct dpoe_sec_link_rec *link);
+
+void mka_generate_sak(struct dpoe_sec_link_rec *link, bcmos_bool initial);
+
+bcmos_errno mka_send_sak(struct dpoe_sec_link_rec *link, uint8_t *sak);
+
+bcmos_errno mka_send_sak_confirm(struct dpoe_sec_link_rec *link);
+
+bcmos_errno mka_process_packet(struct dpoe_sec_link_rec *link, bcmolt_u8_list_u16 rx_frame, mka_op_type op_type);
+
+bcmos_errno mka_process_timeout(struct dpoe_sec_link_rec *link, mka_op_type op_type);
+
+#endif /* MKA_H */
diff --git a/bcm68620_release/release/host_reference/user_appl/eon/Makefile b/bcm68620_release/release/host_reference/user_appl/eon/Makefile
new file mode 100644
index 0000000..ac4c3a5
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/eon/Makefile
@@ -0,0 +1,33 @@
+# EPON OAM Negotiation user application
+
+ifeq ("$(ENABLE_CLI)", "y")
+
+	MOD_NAME = bcm_user_appl_eon
+	MOD_TYPE = lib
+	MOD_DEPS = host_api bcm_user_appl_epon_oam common_epon_oam
+
+	ifeq ("$(OS_KERNEL)", "linux")
+		MOD_DEPS += dev_log_linux
+	endif
+
+	srcs = bcmolt_eon.c oam_sets/oam_common.c
+
+	ENABLE_DPOE_OAM ?= y
+	ifeq ("$(ENABLE_DPOE_OAM)", "y")
+		EXTRA_DEFINES += -DEON_OAM_SET_DPOE_SUPPORTED
+		srcs += oam_sets/dpoe/dpoe.c
+	endif # ENABLE_DPOE_OAM
+
+	ENABLE_BRCM_OAM ?= y
+	ifeq ("$(ENABLE_BRCM_OAM)", "y")
+		EXTRA_DEFINES += -DEON_OAM_SET_BRCM_SUPPORTED
+		srcs += oam_sets/brcm/brcm.c
+	endif # ENABLE_BRCM_OAM
+
+	ENABLE_CTC_OAM ?= y
+	ifeq ("$(ENABLE_CTC_OAM)", "y")
+		EXTRA_DEFINES += -DEON_OAM_SET_CTC_SUPPORTED
+		srcs += oam_sets/ctc/ctc.c
+	endif # ENABLE_CTC_OAM
+
+endif
diff --git a/bcm68620_release/release/host_reference/user_appl/eon/bcmolt_eon.c b/bcm68620_release/release/host_reference/user_appl/eon/bcmolt_eon.c
new file mode 100644
index 0000000..e193148
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/eon/bcmolt_eon.c
@@ -0,0 +1,783 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+*/
+
+/*  This file is the master event handler for the EPON OAM negotiation task -
+    It accepts events from the embedded software and the host interface, supported events are
+    1.  Start OAM negotiaton (from host interface)
+    2.  Stop OAM negotiation (from host interface)
+    3.  RX Frame (from ONU via embedded firmware)
+    4.  Timeout
+
+    It dispatches these events to the OAM specific state machine. Currently we support
+    OAM negotiation for BRCM, DPoE, and CTC OAM standards.
+*/
+
+#include "bcmolt_eon_private.h"
+#include <bcmolt_api.h>
+#include <bcmolt_model_types.h>
+#include <bcmolt_msg_pack.h>
+#include "oam_sets/oam_common.h"
+
+#define EON_TASK_MSG_Q_SIZE 64
+
+typedef enum
+{
+    EON_EVENT_TYPE_FRAME_RX,
+    EON_EVENT_TYPE_OAM_NEG_START,
+    EON_EVENT_TYPE_OAM_NEG_STOP,
+    EON_EVENT_TYPE_OAM_TIMER_EXPIRE,
+
+    EON_EVENT_TYPE_COUNT
+} eon_event_type;
+
+typedef union
+{
+    eon_frame_data frame_rx;
+} eon_event_data;
+
+typedef struct
+{
+    eon_event_type type;
+    eon_link_state *link;
+    eon_event_data data;
+} eon_event;
+
+typedef bcmos_errno (*eon_event_handler)(const eon_event* in_event);
+
+static const char* _evname[EON_EVENT_TYPE_COUNT] =
+{
+    [EON_EVENT_TYPE_FRAME_RX] = "eon_event_type_frame_rx",
+    [EON_EVENT_TYPE_OAM_NEG_START] = "eon_event_type_oam_neg_start",
+    [EON_EVENT_TYPE_OAM_NEG_STOP] = "eon_event_type_oam_neg_stop",
+    [EON_EVENT_TYPE_OAM_TIMER_EXPIRE] = "eon_event_type_oam_timer_expire"
+};
+
+static bcmcli_enum_val eon_oam_set_id_table[EON_OAM_SET_ID_COUNT+1] =
+{
+    { .name = "dpoe", .val = EON_OAM_SET_ID_DPOE },
+    { .name = "brcm", .val = EON_OAM_SET_ID_BRCM },
+    { .name = "ctc", .val = EON_OAM_SET_ID_CTC },
+    BCMCLI_ENUM_LAST
+};
+
+eon_global_state eon_state[BCMTR_MAX_OLTS] = {};
+
+#define HEARTBEAT_SEND_PERIOD 1
+#define HEARTBEAT_SEND_OFFSET 15
+#define HEARTBEAT_RECEIVE_TIMEOUT 5
+#define OAM_TIMEOUT_US (HEARTBEAT_RECEIVE_TIMEOUT * 1000 * 1000)
+
+static bcmos_bool  epon_oam_neg_running = BCMOS_FALSE;
+
+static inline int _link_key_cmp(const eon_link_state* a, const eon_link_state* b)
+{
+    return memcmp(&a->link_key.link, &b->link_key.link, sizeof(a->link_key.link));
+}
+
+RB_GENERATE_INLINE(link_state_map, eon_link_state, rb_entry, _link_key_cmp);
+
+
+static bcmos_errno _eon_init_task(bcmolt_devid device)
+{
+    bcmos_task_parm task_params =
+    {
+        .name         = eon_state[device].task_name,
+        .priority     = TASK_PRIORITY_USER_APPL_EON,
+        .core         = BCMOS_CPU_CORE_ANY, /* No CPU affinity */
+        .init_handler = NULL
+    };
+    snprintf(eon_state[device].task_name, sizeof(eon_state[device].task_name), "user_appl_eon%u", device);
+    bcmos_errno rc = bcmos_task_create(&eon_state[device].task, &task_params);
+
+    return rc;
+}
+
+
+static bcmos_errno _eon_init_module(bcmolt_devid device)
+{
+    bcmos_module_parm module_params =
+    {
+        .qparm = { .name = eon_state[device].msg_queue_name, .size = EON_TASK_MSG_Q_SIZE },
+        .init = NULL
+    };
+    snprintf(eon_state[device].msg_queue_name, sizeof(eon_state[device].msg_queue_name), "eon_msg_q%u", device);
+    return bcmos_module_create(BCMOS_MODULE_ID_USER_APPL_EON + device, &eon_state[device].task, &module_params);
+}
+
+static bcmos_errno _eon_send_os_msg(bcmolt_devid device, bcmos_msg_id type, eon_task_msg_data *data)
+{
+    bcmos_errno rc;
+    eon_task_msg *msg = bcmos_calloc(sizeof(*msg));
+    if (msg == NULL)
+    {
+        EON_LOG(ERROR, device, "OS Message calloc failed\n");
+        return BCM_ERR_NOMEM;
+    }
+
+    msg->os_msg.instance = device;
+    msg->os_msg.type = type;
+    msg->data = *data;
+    rc = bcmos_msg_dispatch(&msg->os_msg, BCMOS_MSG_SEND_AUTO_FREE);
+    if (BCM_ERR_OK != rc)
+    {
+        EON_LOG(ERROR, device, "OS Message send failed (%s)\n", bcmos_strerror(rc));
+    }
+
+    return rc;
+}
+
+static void _eon_destroy_link_state(eon_link_state* link_state)
+{
+    EON_LINK_LOG(DEBUG, &link_state->link_key, "Destroying link\n");
+    bcmos_timer_destroy(&link_state->oam_timer);
+    RB_REMOVE(link_state_map, &eon_state[link_state->link_key.device_id].link_state_map, link_state);
+    if (NULL != link_state->tx.payload)
+    {
+        bcmos_free(link_state->tx.payload);
+    }
+    if (NULL != link_state->rx.payload)
+    {
+        bcmos_free(link_state->rx.payload);
+    }
+    if (NULL != link_state->org_spec_state)
+    {
+        bcmos_free(link_state->org_spec_state);
+    }
+    bcmos_free(link_state);
+}
+
+static eon_link_state* _eon_find_link_state(const eon_link_key* link_key)
+{
+    eon_link_state query_key = { .link_key.link = link_key->link };
+
+    return RB_FIND(link_state_map, &eon_state[link_key->device_id].link_state_map, &query_key);
+}
+
+static void _eon_default_callback_fn(void *context, const eon_link_key* link_key, bcmos_errno result)
+{
+    eon_link_state *link_state = _eon_find_link_state(link_key);
+
+    EON_LINK_LOG(
+        INFO, link_key, "OAM negotiation completed (%s), flags %04x\n", bcmos_strerror(result), link_state->oam_state);
+}
+
+static bcmos_errno _eon_inject_frame(eon_link_key* link_key, uint16_t payload_length, uint8_t *payload_addr)
+{
+    bcmos_errno rc;
+    bcmolt_epon_link_inject_frame inject_frame;
+    bcmolt_epon_link_key epon_link_key = link_key->link;
+    bcmolt_ethernet_frame_unmasked frame =
+        {
+            .frame_octets =
+            {
+                .len = payload_length,
+                .val = payload_addr
+            }
+        };
+
+    BCMOLT_PROXY_INIT(&inject_frame, epon_link, inject_frame, epon_link_key);
+    BCMOLT_PROXY_PROP_SET(&inject_frame, epon_link, inject_frame, frame, frame);
+    rc = bcmolt_proxy_send(link_key->device_id, &inject_frame.hdr);
+    if (BCM_ERR_OK != rc)
+    {
+        EON_LINK_LOG(ERROR, link_key, "inject operation failed (%s)\n", bcmos_strerror(rc));
+    }
+
+    return rc;
+}
+
+static bcmos_errno _eon_clear_prov(eon_link_key *link_key)
+{
+    bcmos_errno err;
+    bcmolt_epon_link_key key = link_key->link;
+    bcmolt_epon_link_oam_keepalive_timer_stop stop_oper;
+    bcmolt_oam_heartbeat_config hb_cfg = {};
+    bcmolt_epon_link_cfg link_cfg;
+
+    BCMOLT_OPER_INIT(&stop_oper, epon_link, oam_keepalive_timer_stop, key);
+    err = bcmolt_oper_submit(link_key->device_id, &stop_oper.hdr);
+    if (BCM_ERR_OK != err)
+    {
+        return err;
+    }
+
+    hb_cfg.transmit_frame.len = 0;
+    hb_cfg.transmit_frame.val = NULL;
+    hb_cfg.ignored_receive_frame_template.frame_octets.len = 0;
+    hb_cfg.ignored_receive_frame_template.frame_octets.val = NULL;
+    hb_cfg.ignored_receive_frame_template.mask_octets.len = 0;
+    hb_cfg.ignored_receive_frame_template.mask_octets.val = NULL;
+    hb_cfg.receive_timeout = 5;
+    hb_cfg.maximum_receive_size = 0;
+    BCMOLT_CFG_INIT(&link_cfg, epon_link, key);
+    BCMOLT_CFG_PROP_SET(&link_cfg, epon_link, oam_heartbeat_config, hb_cfg);
+    err = bcmolt_cfg_set(link_key->device_id, &link_cfg.hdr);
+
+    return err;
+}
+
+static bcmos_errno _eon_set_oam_heartbeat_config(const eon_link_state *link_state)
+{
+    bcmos_errno rc;
+    bcmolt_oam_heartbeat_config oam_heartbeat_config = {};
+
+    oam_heartbeat_config.receive_timeout = HEARTBEAT_RECEIVE_TIMEOUT;
+    oam_heartbeat_config.maximum_receive_size = link_state->max_pdu_size;
+
+    /* The BCM68620 TX heartbeat provisioning does not include the first 15 bytes - SA, DA, EtherType or Subtype */
+    oam_heartbeat_config.transmit_frame.val = &link_state->tx.payload[HEARTBEAT_SEND_OFFSET];
+    oam_heartbeat_config.transmit_frame.len = link_state->tx.length - HEARTBEAT_SEND_OFFSET;
+
+    oam_heartbeat_config.ignored_receive_frame_template.frame_octets.val = link_state->rx.payload;
+    oam_heartbeat_config.ignored_receive_frame_template.frame_octets.len = link_state->rx.length;
+
+    /* forward OAM frames with any differences to the host */
+    oam_heartbeat_config.ignored_receive_frame_template.mask_octets.val = bcmos_calloc(link_state->rx.length);
+    if (NULL != oam_heartbeat_config.ignored_receive_frame_template.mask_octets.val)
+    {
+        memset(oam_heartbeat_config.ignored_receive_frame_template.mask_octets.val, 0xFF, link_state->rx.length);
+        oam_heartbeat_config.ignored_receive_frame_template.mask_octets.len = link_state->rx.length;
+    }
+    else
+    {
+        return BCM_ERR_NOMEM;
+    }
+
+    bcmolt_epon_link_cfg link_cfg;
+    BCMOLT_CFG_INIT(&link_cfg, epon_link, link_state->link_key.link);
+    BCMOLT_CFG_PROP_SET(&link_cfg, epon_link, oam_heartbeat_config, oam_heartbeat_config);
+    rc = bcmolt_cfg_set(link_state->link_key.device_id, &link_cfg.hdr); /* call API */
+
+    bcmos_free(oam_heartbeat_config.ignored_receive_frame_template.mask_octets.val);
+
+    return rc;
+}
+
+static bcmos_errno _eon_start_oam_heartbeat(eon_link_state *link_state)
+{
+    bcmos_errno rc;
+
+    rc = _eon_set_oam_heartbeat_config(link_state);
+    if (BCM_ERR_OK == rc)
+    {
+        bcmolt_epon_link_key emb_link_key = link_state->link_key.link;
+        bcmolt_epon_link_oam_keepalive_timer_start start_heartbeat_op;
+        BCMOLT_OPER_INIT(&start_heartbeat_op, epon_link, oam_keepalive_timer_start, emb_link_key);
+        BCMOLT_OPER_PROP_SET(
+            &start_heartbeat_op,
+            epon_link,
+            oam_keepalive_timer_start,
+            send_period,
+            HEARTBEAT_SEND_PERIOD);
+        rc = bcmolt_oper_submit(link_state->link_key.device_id, &start_heartbeat_op.hdr);
+        if (BCM_ERR_OK != rc)
+        {
+            EON_LINK_LOG(ERROR, &link_state->link_key, "keepalive start operation submit failed (%s)\n",
+                         bcmos_strerror(rc));
+        }
+    }
+    else
+    {
+        EON_LINK_LOG(ERROR, &link_state->link_key, "failed to set heartbeat configuration(%s)\n", bcmos_strerror(rc));
+    }
+
+    return rc;
+}
+
+static bcmos_errno _eon_send_info_frame(eon_link_state *link_state)
+{
+    eon_frame_data frame_tx_req;
+    bcmos_errno rc;
+
+    rc = build_tx_info_frame(link_state, &frame_tx_req);
+    if (BCM_ERR_OK == rc)
+    {
+        rc = _eon_inject_frame(&link_state->link_key, frame_tx_req.length, frame_tx_req.payload);
+        if (BCM_ERR_OK == rc)
+        {
+            bcmos_timer_start(&link_state->oam_timer, OAM_TIMEOUT_US); /* start timer for rx frame */
+        }
+        else
+        {
+            EON_LINK_LOG(WARNING, &link_state->link_key, "failed to inject frame (%s)\n", bcmos_strerror(rc));
+        }
+        bcmos_free(frame_tx_req.payload);
+    }
+
+    return rc;
+}
+
+static bcmos_errno _eon_complete_negotiation(eon_link_state *link_state, uint8_t *rx_payload, uint16_t rx_length)
+{
+    bcmos_errno rc;
+    eon_frame_data frame_tx_req;
+
+    rc = build_tx_info_frame(link_state, &frame_tx_req);
+    if (BCM_ERR_OK != rc)
+    {
+        return rc;
+    }
+    link_state->tx.payload = frame_tx_req.payload;
+    link_state->tx.length = frame_tx_req.length;
+    EON_LINK_LOG(DEBUG, &link_state->link_key, "Setting TX payload\n");
+
+    link_state->rx.payload = bcmos_calloc(rx_length);
+    if (NULL == link_state->rx.payload)
+    {
+        return BCM_ERR_NOMEM;
+    }
+    memcpy(link_state->rx.payload, rx_payload, rx_length);
+    link_state->rx.length = rx_length;
+    EON_LINK_LOG(DEBUG, &link_state->link_key, "Setting RX mask\n");
+
+    if (link_state->is_heartbeat_autostart)
+    {
+        rc = _eon_start_oam_heartbeat(link_state);
+        EON_LINK_LOG(INFO, &link_state->link_key, "start OAM heartbeat: %s\n", bcmos_strerror(rc));
+    }
+    link_state->callback(link_state->context, &link_state->link_key, rc);
+    _eon_destroy_link_state(link_state);
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno _eon_event_handler_frame_rx(const eon_event* event)
+{
+    bcmos_errno rc;
+
+    EON_LINK_LOG(DEBUG, &event->link->link_key, "received %u-byte frame beginning at %p\n",
+                 event->data.frame_rx.length, event->data.frame_rx.payload);
+
+    /* validates frame, updates flags */
+    rc = handle_rx_info_frame(event->link, event->data.frame_rx.length, event->data.frame_rx.payload);
+    switch (rc)
+    {
+        case BCM_ERR_OK: /* Completed Negotiation */
+            rc = _eon_complete_negotiation(event->link, event->data.frame_rx.payload, event->data.frame_rx.length);
+            break;
+        case BCM_ERR_IN_PROGRESS:
+            rc = _eon_send_info_frame(event->link);
+            break;
+        case BCM_ERR_PARSE:
+            EON_LINK_LOG(INFO, &event->link->link_key, "received non info frame; ignoring\n");
+            rc = BCM_ERR_OK; /* ...and keep running */
+            break;
+        default:
+            break;
+    }
+
+    return rc;
+}
+
+static bcmos_errno _eon_event_handler_start(const eon_event* event)
+{
+    bcmos_errno rc;
+
+    rc = _eon_clear_prov(&event->link->link_key);
+    if (BCM_ERR_OK == rc)
+    {
+        event->link->oam_state = BCMOLT_EPON_OAM_OAM_FLAGS_LOCAL_EVALUATING;
+        rc = _eon_send_info_frame(event->link);
+    }
+    return rc;
+}
+
+static bcmos_errno _eon_event_handler_stop(const eon_event* event)
+{
+    EON_LINK_LOG(INFO, &event->link->link_key, "OAM stop command received\n");
+    _eon_destroy_link_state(event->link);
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno _eon_event_handler_oam_timer_expire(const eon_event* event)
+{
+    EON_LINK_LOG(WARNING, &event->link->link_key, "OAM timer expired\n");
+    return BCM_ERR_TIMEOUT;
+}
+
+static const eon_event_handler event_sm[EON_EVENT_TYPE_COUNT] =
+{
+    [EON_EVENT_TYPE_FRAME_RX] = _eon_event_handler_frame_rx,
+    [EON_EVENT_TYPE_OAM_NEG_START] = _eon_event_handler_start,
+    [EON_EVENT_TYPE_OAM_NEG_STOP] = _eon_event_handler_stop,
+    [EON_EVENT_TYPE_OAM_TIMER_EXPIRE] = _eon_event_handler_oam_timer_expire
+};
+
+static bcmos_errno _eon_event_handler(const eon_event* event)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+
+    if (event->type < EON_EVENT_TYPE_COUNT)
+    {
+        EON_LINK_LOG(DEBUG, &event->link->link_key, "event %s\n", _evname[event->type]);
+        rc = event_sm[event->type](event);
+    }
+    else
+    {
+        EON_LINK_LOG(ERROR, &event->link->link_key, "unknown event %d\n", event->type);
+    }
+
+    return rc;
+}
+
+static void _eon_event_dispatch(const eon_event* event_in)
+{
+    bcmos_errno rc;
+
+    rc = _eon_event_handler(event_in);
+    if (rc != BCM_ERR_OK)
+    {
+        event_in->link->callback(event_in->link->context, &event_in->link->link_key, rc);
+        _eon_destroy_link_state(event_in->link);
+    }
+}
+
+static bcmos_timer_rc _eon_oam_timer_expire(bcmos_timer* timer, long pUser)
+{
+    eon_event event = { .type = EON_EVENT_TYPE_OAM_TIMER_EXPIRE, .link = (eon_link_state *)pUser };
+
+    _eon_event_dispatch(&event);
+
+    return BCMOS_TIMER_OK;
+}
+
+static bcmos_errno _eon_create_link_state(
+    eon_link_state **state,
+    eon_link_key* link_key,
+    eon_oam_set_id oam_set,
+    bcmolt_eon_result_cb cb,
+    void *context,
+    bcmos_bool is_heartbeat_autostart)
+{
+    bcmos_errno rc;
+    eon_link_state *link_state;
+
+    link_state = _eon_find_link_state(link_key);
+    if (link_state != NULL)
+    {
+        EON_LINK_LOG(ERROR, link_key, "OAM negotiation is already in progress\n");
+        return BCM_ERR_ALREADY;
+    }
+
+    link_state = bcmos_calloc(sizeof(*link_state));
+    if (link_state == NULL)
+    {
+        EON_LINK_LOG(ERROR, link_key, "Failed to allocate state record\n");
+        return BCM_ERR_NOMEM;
+    }
+
+    bcmolt_epon_ni_key ni_key = { .epon_ni = link_key->link.epon_ni };
+    bcmolt_epon_ni_cfg ni_cfg;
+
+    BCMOLT_CFG_INIT(&ni_cfg, epon_ni, ni_key);
+    BCMOLT_CFG_PROP_GET(&ni_cfg, epon_ni, mac_address);
+    rc = bcmolt_cfg_get(link_key->device_id, &ni_cfg.hdr);
+    if (BCM_ERR_OK == rc)
+    {
+        link_state->epon_ni_mac_addr = ni_cfg.data.mac_address;
+    }
+    else
+    {
+        EON_LINK_LOG(ERROR, link_key, "Failed to retrieve EPON NI MAC address: %s\n", bcmos_strerror(rc));
+        bcmos_free(link_state);
+        return rc;
+    }
+
+    bcmos_timer_parm timer_spec =
+    {
+        .owner   = BCMOS_MODULE_ID_USER_APPL_EON + link_key->device_id,
+        .handler = _eon_oam_timer_expire,
+        .data    = (long)link_state
+    };
+    rc = bcmos_timer_create(&link_state->oam_timer, &timer_spec);
+    if (BCM_ERR_OK != rc)
+    {
+        EON_LINK_LOG(ERROR, link_key, "Failed to create timer: %s\n", bcmos_strerror(rc));
+        bcmos_free(link_state);
+        return rc;
+    }
+
+    link_state->link_key = *link_key;
+    link_state->callback = cb ? cb : _eon_default_callback_fn;
+    link_state->context = context;
+    link_state->is_heartbeat_autostart = is_heartbeat_autostart;
+    link_state->oam_set = oam_set;
+    link_state->max_pdu_size = 1536;
+
+    RB_INSERT(link_state_map, &eon_state[link_key->device_id].link_state_map, link_state);
+
+    *state = link_state;
+
+    return BCM_ERR_OK;
+}
+
+static void _eon_task_process_rx(bcmolt_devid device_id, const bcmolt_proxy_rx *rx)
+{
+    eon_event event  = { .type = EON_EVENT_TYPE_FRAME_RX };
+
+    const bcmolt_epon_link_key* epon_link_key = (const bcmolt_epon_link_key*)(rx + 1);
+    eon_link_key link_key = { .device_id = device_id, .link = *epon_link_key };
+    eon_link_state *link_state = _eon_find_link_state(&link_key);
+
+    if (link_state != NULL)
+    {
+        EON_LINK_LOG(DEBUG, &link_key, "found existing link\n");
+        const bcmolt_u8_list_u32 frame = ((const bcmolt_epon_link_frame_captured*)rx)->data.frame;
+        event.link = link_state;
+        event.data.frame_rx.payload = frame.val;
+        event.data.frame_rx.length  = frame.len;
+        _eon_event_dispatch(&event);
+    }
+    else
+    {
+        EON_LINK_LOG(DEBUG, &link_key, "rx on unknown link\n");
+    }
+}
+
+static void _eon_handle_proxy_rx(bcmos_module_id module_id, bcmos_msg *os_msg)
+{
+    eon_task_msg *msg = (eon_task_msg*)os_msg;
+
+    _eon_task_process_rx(os_msg->instance, msg->data.proxy_rx.rx);
+
+    bcmolt_msg_free(&msg->data.proxy_rx.rx->hdr); /* free cloned indication */
+    bcmos_free(os_msg);
+}
+
+static void _eon_handle_start(bcmos_module_id module_id, bcmos_msg *os_msg)
+{
+    eon_task_msg *msg = (eon_task_msg*)os_msg;
+    eon_link_key link_key = { .device_id = os_msg->instance, .link = msg->data.start.link_key };
+    eon_event event = { .type = EON_EVENT_TYPE_OAM_NEG_START };
+
+    if (BCM_ERR_OK == _eon_create_link_state(
+        &event.link,
+        &link_key,
+        msg->data.start.oam_set,
+        msg->data.start.cb,
+        msg->data.start.context,
+        msg->data.start.is_heartbeat_autostart))
+    {
+        _eon_event_dispatch(&event);
+    }
+
+    bcmos_free(os_msg);
+}
+
+static void _eon_handle_stop(bcmos_module_id module_id, bcmos_msg *os_msg)
+{
+    eon_task_msg *msg = (eon_task_msg*)os_msg;
+    eon_link_key link_key = { .device_id = os_msg->instance, .link = msg->data.stop.link_key };
+    eon_event event = { .type = EON_EVENT_TYPE_OAM_NEG_STOP, .link = _eon_find_link_state(&link_key) };
+
+    if (NULL != event.link)
+    {
+        _eon_event_dispatch(&event);
+    }
+
+    bcmos_free(os_msg);
+}
+
+static bcmos_errno _eon_cmd_start(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    bcmos_errno rc;
+    eon_task_msg_data msg_data;
+
+    msg_data.start.link_key.epon_ni = (bcmolt_epon_ni)bcmcli_find_named_parm(session, "epon_ni")->value.unumber;
+    msg_data.start.link_key.mac_address = bcmcli_find_named_parm(session, "mac_address")->value.mac;
+    msg_data.start.oam_set = (eon_oam_set_id)bcmcli_find_named_parm(session, "oam_set")->value.enum_val;
+    msg_data.start.cb = NULL;
+    msg_data.start.context = NULL;
+    msg_data.start.is_heartbeat_autostart = BCMOS_TRUE;
+
+    rc = _eon_send_os_msg(current_device, BCMOS_MSG_ID_EON_START, &msg_data);
+
+    return rc;
+}
+
+static bcmos_errno _eon_cmd_stop(bcmcli_session *session,
+                                 const bcmcli_cmd_parm parm[],
+                                 uint16_t n_parms)
+{
+    bcmos_errno rc;
+    eon_task_msg_data msg_data;
+
+    msg_data.stop.link_key.epon_ni = (bcmolt_epon_ni)bcmcli_find_named_parm(session, "epon_ni")->value.unumber;
+    msg_data.stop.link_key.mac_address = bcmcli_find_named_parm(session, "mac_address")->value.mac;
+
+    rc = _eon_send_os_msg(current_device, BCMOS_MSG_ID_EON_STOP, &msg_data);
+
+    return rc;
+}
+
+
+static bcmos_errno _eon_cmd_show(
+    bcmcli_session        *session,
+    const bcmcli_cmd_parm  parm[],
+    uint16_t               n_parms)
+{
+    eon_link_state*   link_state;
+    bcmos_bool          no_links = BCMOS_TRUE;
+
+    RB_FOREACH(link_state, link_state_map, &eon_state[current_device].link_state_map)
+    {
+        no_links = BCMOS_FALSE;
+        bcmcli_session_print(session,
+                             "-->  "LINK_KEY_FMT_STR"  OAM set %u   state %04x\n",
+                             LINK_KEY_DATA(&link_state->link_key),
+                             link_state->oam_set,
+                             link_state->oam_state);
+    }
+    if (no_links)
+    {
+        bcmcli_session_print(session, "no links\n");
+    }
+
+    return BCM_ERR_OK;
+}
+
+
+void bcmolt_user_appl_eon_cli_init(bcmcli_entry *top_dir)
+{
+    static const char *dir_name = "eon";
+
+    if (bcmcli_dir_find(top_dir, dir_name))
+    {
+        return;
+    }
+
+    bcmcli_entry *dir = bcmcli_dir_add(top_dir,
+                                       dir_name,
+                                       "EPON OAM negotiation commands",
+                                       BCMCLI_ACCESS_ADMIN, NULL);
+    BUG_ON(dir == NULL);
+
+    BCMCLI_MAKE_CMD_NOPARM(dir,
+                           "show",
+                           "Show current EON configuration and state",
+                           _eon_cmd_show);
+
+    BCMCLI_MAKE_CMD(dir,
+                    "start_oam_negotiation",
+                    "Start OAM negotiation for an EPON link",
+                    _eon_cmd_start,
+                    BCMCLI_MAKE_PARM("epon_ni", "EPON NI", BCMCLI_PARM_UNUMBER, BCMCLI_PARM_FLAG_NONE),
+                    BCMCLI_MAKE_PARM("mac_address", "MAC address", BCMCLI_PARM_MAC, BCMCLI_PARM_FLAG_NONE),
+                    BCMCLI_MAKE_PARM_ENUM("oam_set", "OAM set", eon_oam_set_id_table, BCMCLI_PARM_FLAG_NONE));
+
+
+    BCMCLI_MAKE_CMD(dir,
+                    "stop_oam_negotiation",
+                    "Stop in progress OAM negotiation for an EPON link",
+                    _eon_cmd_stop,
+                    BCMCLI_MAKE_PARM("epon_ni", "EPON NI", BCMCLI_PARM_NUMBER, BCMCLI_PARM_FLAG_NONE),
+                    BCMCLI_MAKE_PARM("mac_address", "MAC address", BCMCLI_PARM_MAC, BCMCLI_PARM_FLAG_NONE) );
+}
+
+
+void bcmolt_user_appl_eon_init(void)
+{
+    bcmos_errno rc;
+
+    if (epon_oam_neg_running)
+    {
+        return;
+    }
+
+    for (bcmolt_devid device = 0; device < BCMTR_MAX_OLTS; device++)
+    {
+        rc = _eon_init_task(device);
+        BUG_ON(rc != BCM_ERR_OK);
+
+        rc = _eon_init_module(device);
+        BUG_ON(rc != BCM_ERR_OK);
+
+        char log_name[MAX_DEV_LOG_ID_NAME];
+        snprintf(log_name, sizeof(log_name), "user_appl_eon%u", device);
+        eon_state[device].log_id = bcm_dev_log_id_register(log_name, DEV_LOG_LEVEL_INFO, DEV_LOG_ID_TYPE_BOTH);
+
+        bcmos_msg_register(
+            BCMOS_MSG_ID_EON_START,
+            device,
+            BCMOS_MODULE_ID_USER_APPL_EON + device,
+            _eon_handle_start);
+        bcmos_msg_register(
+            BCMOS_MSG_ID_EON_STOP,
+            device,
+            BCMOS_MODULE_ID_USER_APPL_EON + device,
+            _eon_handle_stop);
+        bcmos_msg_register(
+            BCMOS_MSG_ID_EON_PROXY_RX,
+            device,
+            BCMOS_MODULE_ID_USER_APPL_EON + device,
+            _eon_handle_proxy_rx);
+
+        // initialize the state map
+        RB_INIT(&eon_state[device].link_state_map);
+    }
+
+    epon_oam_neg_running = BCMOS_TRUE;
+}
+
+// public indication handler interface -- called in transport layer context
+bcmos_errno bcmolt_user_appl_eon_process_rx(bcmolt_devid device_id, bcmolt_proxy_rx *rx)
+{
+     bcmos_errno rc;
+     eon_task_msg_data msg_data = {};
+
+     /* Not running --> silently ignore  */
+     if (!epon_oam_neg_running)
+     {
+         return BCM_ERR_OK;
+     }
+
+     /* Not our message --> silenty ignore */
+     if ( (BCMOLT_OBJ_ID_EPON_LINK != rx->hdr.obj_type) ||
+          (BCMOLT_EPON_LINK_PROXY_RX_ID_FRAME_CAPTURED != rx->hdr.subgroup) )
+     {
+         return BCM_ERR_OK;
+     }
+
+     /* This is something this application does care about - so clone the message into
+        newly-allocated memory so we can handle it after the original message has been freed */
+     rc = bcmolt_msg_clone((bcmolt_msg**)&msg_data.proxy_rx.rx, &rx->hdr);
+     if (rc != BCM_ERR_OK)
+     {
+         EON_LOG(ERROR, device_id, "Message clone failed: %s\n", bcmos_strerror(rc));
+         return rc;
+     }
+
+     rc = _eon_send_os_msg(device_id, BCMOS_MSG_ID_EON_PROXY_RX, &msg_data);
+     if (rc != BCM_ERR_OK)
+     {
+         bcmolt_msg_free(&msg_data.proxy_rx.rx->hdr);
+     }
+     return rc;
+}
+
diff --git a/bcm68620_release/release/host_reference/user_appl/eon/bcmolt_eon.h b/bcm68620_release/release/host_reference/user_appl/eon/bcmolt_eon.h
new file mode 100644
index 0000000..c93fcd1
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/eon/bcmolt_eon.h
@@ -0,0 +1,98 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+*/
+
+#ifndef _BCMOLT_EON_H_
+#define _BCMOLT_EON_H_
+
+#include <bcmos_system.h>
+#include <bcmolt_api.h>
+#include <bcmolt_model_types.h>
+#include <bcmcli.h>
+
+/* uniquely identifies specific EPON links under management by this application */
+typedef struct
+{
+     bcmolt_devid          device_id;
+     bcmolt_epon_link_key  link;
+} eon_link_key;
+
+typedef enum
+{
+     EON_OAM_SET_ID_DPOE,
+     EON_OAM_SET_ID_BRCM,
+     EON_OAM_SET_ID_CTC,
+
+     EON_OAM_SET_ID_COUNT
+} eon_oam_set_id;
+
+/* signature of optional callback function used to report outcomes of OAM negotiations */
+typedef void (*bcmolt_eon_result_cb)(void *context, const eon_link_key *link_key, bcmos_errno result);
+
+typedef struct
+{
+    bcmolt_epon_link_key link_key;
+    eon_oam_set_id oam_set;
+    bcmolt_eon_result_cb cb;
+    void *context;
+    bcmos_bool is_heartbeat_autostart;
+} eon_task_start_data;
+
+typedef struct
+{
+    bcmolt_epon_link_key link_key;
+} eon_task_stop_data;
+
+typedef struct
+{
+    bcmolt_proxy_rx *rx;
+} eon_task_proxy_rx_data;
+
+typedef union
+{
+    eon_task_start_data start;
+    eon_task_stop_data stop;
+    eon_task_proxy_rx_data proxy_rx;
+} eon_task_msg_data;
+
+typedef struct
+{
+    bcmos_msg os_msg;
+    eon_task_msg_data data;
+} eon_task_msg;
+
+// initialize the EPON OAM negotiation application (should be called as part of user application startup)
+extern void bcmolt_user_appl_eon_init(void);
+
+// process a proxy rx
+bcmos_errno bcmolt_user_appl_eon_process_rx(bcmolt_devid device_id, bcmolt_proxy_rx *proxy_rx);
+
+// initialize EON CLI
+void bcmolt_user_appl_eon_cli_init(bcmcli_entry *top_dir);
+
+#endif
diff --git a/bcm68620_release/release/host_reference/user_appl/eon/bcmolt_eon_private.h b/bcm68620_release/release/host_reference/user_appl/eon/bcmolt_eon_private.h
new file mode 100644
index 0000000..f40b453
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/eon/bcmolt_eon_private.h
@@ -0,0 +1,92 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+*/
+
+#ifndef _BCMOLT_EON_PRIVATE_H_
+#define _BCMOLT_EON_PRIVATE_H_
+
+/* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+   x This file is for internal use within the EPON OAM negotiation application. x
+   x                                                                            x
+   x Outside code should not refer to anything defined or declared herein!      x
+   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx */
+
+#include "bcmolt_eon.h" /* the private interface extends the public interface */
+#include "bcmolt_epon_oam_types.h"
+#include "bcm_dev_log.h"
+#include "bcmolt_utils.h"
+
+typedef struct
+{
+    uint8_t* payload; /* payload bytes in [DA,FCS) */
+    uint16_t length; /* frame length from DA to just before FCS */
+} eon_frame_data;
+
+/* map containing state of all EPON links with OAM negotiation underway or completed */
+typedef struct eon_link_state eon_link_state;
+typedef struct link_state_map link_state_map;
+RB_HEAD(link_state_map, eon_link_state);
+
+struct eon_link_state
+{
+    eon_link_key                 link_key;                  /* globally unique opaque entity id */
+    bcmos_timer                  oam_timer;                 /* timer used when awaiting oam responses */
+    eon_oam_set_id               oam_set;                   /* OAM set applicable to the link */
+    bcmolt_epon_oam_oam_flags    oam_state;                 /* OAM link negotiation state */
+    uint16_t                     revision;                  /* Local revision */
+    uint16_t                     max_pdu_size;              /* max PDU size */
+    bcmolt_eon_result_cb         callback;                  /* callback when negotiation is complete */
+    void                         *context;                  /* context for the above callback function */
+    bcmolt_epon_oam_local_remote_info remote_info;          /* previous TLV received from the remote */
+    bcmos_mac_address            epon_ni_mac_addr;          /* MAC address to use for SA of egress OAM frames */
+    eon_frame_data               rx;                        /* Final received OAM */
+    eon_frame_data               tx;                        /* Final sent OAM */
+    bcmos_bool                   is_heartbeat_autostart;    /* start heartbeat upon successful negotiation completion */
+    void                        *org_spec_state;            /* State specific to the selected OAM set */
+    RB_ENTRY(eon_link_state)     rb_entry;
+};
+
+typedef struct
+{
+    bcmos_task task;
+    char task_name[MAX_TASK_NAME_SIZE];
+    char msg_queue_name[MAX_MSG_QUEUE_NAME_SIZE];
+    dev_log_id log_id;
+    link_state_map link_state_map;
+} eon_global_state;
+
+#define LINK_KEY_FMT_STR "PON %u, "BCMOS_MACADDR_FMT_STR
+#define LINK_KEY_DATA(lkey) (lkey)->link.epon_ni, BCMOS_MACADDR_PARAMS(&(lkey)->link.mac_address)
+
+#define EON_LOG(level, device, format, args...) BCM_LOG(level, eon_state[device].log_id, format, ##args)
+#define EON_LINK_LOG(level, link_key, fmt, args...) \
+    BCM_LOG(level, eon_state[(link_key)->device_id].log_id, LINK_KEY_FMT_STR": "fmt, LINK_KEY_DATA(link_key), ##args)
+
+extern eon_global_state eon_state[BCMTR_MAX_OLTS];
+
+#endif // _BCMOLT_EON_PRIVATE_H_
diff --git a/bcm68620_release/release/host_reference/user_appl/eon/oam_sets/brcm/brcm.c b/bcm68620_release/release/host_reference/user_appl/eon/oam_sets/brcm/brcm.c
new file mode 100644
index 0000000..c6170f6
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/eon/oam_sets/brcm/brcm.c
@@ -0,0 +1,108 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+*/
+
+/* This file contains the pieces of the OAM negotiation state machine that are specific to BRCM OAM. */
+
+#include "bcmolt_eon_private.h"
+#include "../oam_common.h"
+#include "brcm.h"
+
+/* Org specific TLV to send to the ONU */
+static const bcmolt_epon_oam_organization_specific_info brcm_tx_tlv =
+{
+    .oui = BCMOLT_EPON_OAM_WELL_KNOWN_OUI_TEK,
+    .u =
+    {
+        .tek =
+        {
+            .tlvs =
+            {
+                .type = BCMOLT_EPON_OAM_TEK_INFO_TLV_TYPE_EXTENSION_SUPPORT,
+                .u =
+                {
+                    .extension_support =
+                    {
+                        .version = 0,
+                        .report_mode = BCMOLT_EPON_OAM_TEK_REPORT_MODES_TEKNOVUS,
+                        .preferred_report_mode = BCMOLT_EPON_OAM_TEK_REPORT_MODES_TEKNOVUS
+                    }
+                }
+            }
+        }
+    }
+};
+
+void brcm_tx_add_tlv(eon_link_state *link_state, bcmolt_epon_oam_oam_pdu_content *oam)
+{
+    if (LOCAL_STABLE_REMOTE_STABLE == link_state->oam_state)
+    {
+        oam->u.info.tlvs[oam->u.info.tlvs_count].type = BCMOLT_EPON_OAM_INFO_TLV_TYPE_ORGANIZATION_SPECIFIC;
+        oam->u.info.tlvs[oam->u.info.tlvs_count].u.organization_specific.value = brcm_tx_tlv;
+        oam->u.info.tlvs_count++;
+    }
+}
+
+void brcm_rx_tlv(
+    eon_link_state *link_state,
+    bcmolt_epon_oam_organization_specific_info *org_spec,
+    bcmos_errno *rc)
+{
+    if (link_state->oam_state == LOCAL_STABLE_REMOTE_STABLE)
+    {
+        if ((NULL == org_spec) ||
+            (BCMOLT_EPON_OAM_WELL_KNOWN_OUI_TEK != org_spec->oui) ||
+            (BCMOLT_EPON_OAM_TEK_INFO_TLV_TYPE_EXTENSION_SUPPORT != org_spec->u.tek.tlvs.type))
+        {
+            EON_LINK_LOG(INFO, &link_state->link_key, "Didn't get BRCM TLV\n");
+            *rc = BCM_ERR_ONU_ERR_RESP;
+        }
+        else
+        {
+            if ((0 != org_spec->u.tek.tlvs.u.extension_support.version) ||
+                (0 ==
+                 (BCMOLT_EPON_OAM_TEK_REPORT_MODES_TEKNOVUS & org_spec->u.tek.tlvs.u.extension_support.report_mode)))
+            {
+                EON_LINK_LOG(
+                    INFO, &link_state->link_key, "BRCM TLV contained bad info: version %u rpt modes %02x\n",
+                    org_spec->u.tek.tlvs.u.extension_support.version,
+                    org_spec->u.tek.tlvs.u.extension_support.report_mode);
+                *rc = BCM_ERR_NOT_SUPPORTED;
+            }
+        }
+    }
+    else
+    {
+        if (NULL != org_spec)
+        {
+            EON_LINK_LOG(INFO, &link_state->link_key, "Got unexpected organization specific TLV\n");
+            *rc = BCM_ERR_ONU_ERR_RESP;
+        }
+    }
+}
+
diff --git a/bcm68620_release/release/host_reference/user_appl/eon/oam_sets/brcm/brcm.h b/bcm68620_release/release/host_reference/user_appl/eon/oam_sets/brcm/brcm.h
new file mode 100644
index 0000000..34c8878
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/eon/oam_sets/brcm/brcm.h
@@ -0,0 +1,41 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+*/
+
+#ifndef _BCMOLT_EON_BRCM_H_
+#define _BCMOLT_EON_BRCM_H_
+
+void brcm_tx_add_tlv(eon_link_state *link_state, bcmolt_epon_oam_oam_pdu_content *oam);
+
+void brcm_rx_tlv(
+    eon_link_state *link_state,
+    bcmolt_epon_oam_organization_specific_info *org_spec,
+    bcmos_errno *rc);
+
+#endif // _BCMOLT_EON_BRCM_H_
+
diff --git a/bcm68620_release/release/host_reference/user_appl/eon/oam_sets/ctc/ctc.c b/bcm68620_release/release/host_reference/user_appl/eon/oam_sets/ctc/ctc.c
new file mode 100644
index 0000000..768c8b9
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/eon/oam_sets/ctc/ctc.c
@@ -0,0 +1,212 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+*/
+
+/* This file contains the pieces of the OAM negotiation state machine that are specific to CTC OAM. */
+
+#include "bcmolt_eon_private.h"
+#include "../oam_common.h"
+#include "ctc.h"
+
+#define CTC_EXTENSION_SUPPORT 0x1
+#define CTC_PREFERRED_VERSION 0x30
+
+typedef enum
+{
+    CTC_NEG_ADVERTISING,
+    CTC_NEG_CONFIRMING,
+    CTC_NEG_DONE
+} ctc_neg_state;
+
+typedef struct
+{
+    ctc_neg_state state;
+    uint8_t selected_version;
+} ctc_state;
+
+static bcmolt_epon_oam_ctc_oui_version_pair ctc_advertised_versions[] =
+{
+    { .oui = BCMOLT_EPON_OAM_WELL_KNOWN_OUI_CTC, .version = 0x30 },
+    { .oui = BCMOLT_EPON_OAM_WELL_KNOWN_OUI_CTC, .version = 0x21 },
+    { .oui = BCMOLT_EPON_OAM_WELL_KNOWN_OUI_CTC, .version = 0x20 },
+    { .oui = BCMOLT_EPON_OAM_WELL_KNOWN_OUI_CTC, .version = 0x13 },
+    { .oui = BCMOLT_EPON_OAM_WELL_KNOWN_OUI_CTC, .version = 0x01 }
+};
+
+/* Org specific TLV to send to the ONU */
+static const bcmolt_epon_oam_organization_specific_info ctc_tx_advertise_tlv =
+{
+    .oui = BCMOLT_EPON_OAM_WELL_KNOWN_OUI_CTC,
+    .u =
+    {
+        .ctc =
+        {
+            .extension_support = CTC_EXTENSION_SUPPORT,
+            .version = CTC_PREFERRED_VERSION,
+            .supp_version_count = NUM_ELEM(ctc_advertised_versions),
+            .supp_version = ctc_advertised_versions
+        }
+    }
+};
+
+void ctc_tx_add_tlv(eon_link_state *link_state, bcmolt_epon_oam_oam_pdu_content *oam)
+{
+    ctc_state *ctc = link_state->org_spec_state;
+
+    if (ctc != NULL)
+    {
+        switch (ctc->state)
+        {
+            case CTC_NEG_ADVERTISING:
+                oam->u.info.tlvs[oam->u.info.tlvs_count].type = BCMOLT_EPON_OAM_INFO_TLV_TYPE_ORGANIZATION_SPECIFIC;
+                oam->u.info.tlvs[oam->u.info.tlvs_count].u.organization_specific.value = ctc_tx_advertise_tlv;
+                oam->u.info.tlvs_count++;
+                break;
+            case CTC_NEG_CONFIRMING:
+                oam->u.info.tlvs[oam->u.info.tlvs_count].type = BCMOLT_EPON_OAM_INFO_TLV_TYPE_ORGANIZATION_SPECIFIC;
+                oam->u.info.tlvs[oam->u.info.tlvs_count].u.organization_specific.value.oui =
+                    BCMOLT_EPON_OAM_WELL_KNOWN_OUI_CTC;
+                oam->u.info.tlvs[oam->u.info.tlvs_count].u.organization_specific.value.u.ctc.extension_support =
+                    CTC_EXTENSION_SUPPORT;
+                oam->u.info.tlvs[oam->u.info.tlvs_count].u.organization_specific.value.u.ctc.version =
+                    ctc->selected_version;
+                oam->u.info.tlvs[oam->u.info.tlvs_count].u.organization_specific.value.u.ctc.supp_version_count = 0;
+                oam->u.info.tlvs[oam->u.info.tlvs_count].u.organization_specific.value.u.ctc.supp_version = NULL;
+                oam->u.info.tlvs_count++;
+                break;
+            case CTC_NEG_DONE:
+                break; /* don't add a TLV */
+            default:
+                EON_LINK_LOG(ERROR, &link_state->link_key, "Unknown CTC state %d\n", ctc->state);
+                break;
+        }
+    }
+}
+
+void ctc_rx_tlv(
+    eon_link_state *link_state,
+    bcmolt_epon_oam_organization_specific_info *org_spec,
+    bcmos_errno *rc)
+{
+    *rc = BCM_ERR_IN_PROGRESS;
+
+    if (link_state->org_spec_state != NULL)
+    {
+        ctc_state *ctc = link_state->org_spec_state;
+
+        switch (ctc->state)
+        {
+            case CTC_NEG_ADVERTISING:
+                if ((NULL == org_spec) || (BCMOLT_EPON_OAM_WELL_KNOWN_OUI_CTC != org_spec->oui))
+                {
+                    EON_LINK_LOG(INFO, &link_state->link_key, "Didn't get CTC advertise TLV\n");
+                    *rc = BCM_ERR_ONU_ERR_RESP;
+                }
+                else
+                {
+                    /* find highest common version */
+                    ctc->selected_version = 0;
+                    for (uint8_t i = 0; i < org_spec->u.ctc.supp_version_count; i++)
+                    {
+                        for (uint8_t j = 0; j < NUM_ELEM(ctc_advertised_versions); j++)
+                        {
+                            if ((org_spec->u.ctc.supp_version[i].oui == ctc_advertised_versions[j].oui) &&
+                                (org_spec->u.ctc.supp_version[i].version == ctc_advertised_versions[j].version))
+                            {
+                                if (ctc_advertised_versions[j].version > ctc->selected_version)
+                                {
+                                    ctc->selected_version = ctc_advertised_versions[j].version;
+                                }
+                            }
+                        }
+                    }
+                    if (ctc->selected_version == 0)
+                    {
+                        *rc = BCM_ERR_NOT_SUPPORTED; /* no common version found */
+                    }
+                    else
+                    {
+                        ctc->state = CTC_NEG_CONFIRMING;
+                    }
+                }
+                break;
+            case CTC_NEG_CONFIRMING:
+                if ((NULL == org_spec) || (BCMOLT_EPON_OAM_WELL_KNOWN_OUI_CTC != org_spec->oui))
+                {
+                    EON_LINK_LOG(INFO, &link_state->link_key, "Didn't get CTC confirm TLV\n");
+                    *rc = BCM_ERR_ONU_ERR_RESP;
+                }
+                else
+                {
+                    if (org_spec->u.ctc.supp_version_count == 0)
+                    {
+                        if (org_spec->u.ctc.version != ctc->selected_version)
+                        {
+                            *rc = BCM_ERR_NOT_SUPPORTED;
+                        }
+                        else
+                        {
+                            ctc->state = CTC_NEG_DONE;
+                        }
+                    }
+                }
+                break;
+            case CTC_NEG_DONE:
+                if ((NULL != org_spec) && (org_spec->oui == BCMOLT_EPON_OAM_WELL_KNOWN_OUI_CTC))
+                {
+                    EON_LINK_LOG(
+                        INFO, &link_state->link_key, "Got unexpected CTC TLV after negotiation\n");
+                    *rc = BCM_ERR_ONU_ERR_RESP;
+                }
+                else
+                {
+                    *rc = BCM_ERR_OK;
+                }
+                break;
+            default:
+                break;
+        }
+    }
+    else
+    {
+        if ((NULL != org_spec) && (org_spec->oui == BCMOLT_EPON_OAM_WELL_KNOWN_OUI_CTC))
+        {
+            EON_LINK_LOG(
+                INFO, &link_state->link_key, "Got unexpected CTC TLV before negotiation\n");
+            *rc = BCM_ERR_ONU_ERR_RESP;
+        }
+
+        if (LOCAL_STABLE_REMOTE_STABLE == link_state->oam_state)
+        {
+            ctc_state *ctc = bcmos_calloc(sizeof(ctc_state));
+            ctc->state = CTC_NEG_ADVERTISING;
+            link_state->org_spec_state = ctc;
+        }
+    }
+}
+
diff --git a/bcm68620_release/release/host_reference/user_appl/eon/oam_sets/ctc/ctc.h b/bcm68620_release/release/host_reference/user_appl/eon/oam_sets/ctc/ctc.h
new file mode 100644
index 0000000..a2107b4
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/eon/oam_sets/ctc/ctc.h
@@ -0,0 +1,42 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+*/
+
+#ifndef _BCMOLT_EON_CTC_H_
+#define _BCMOLT_EON_CTC_H_
+
+void ctc_tx_add_tlv(eon_link_state *link_state, bcmolt_epon_oam_oam_pdu_content *oam);
+
+void ctc_rx_tlv(
+    eon_link_state *link_state,
+    bcmolt_epon_oam_organization_specific_info *org_spec,
+    bcmos_errno *rc);
+
+#endif // _BCMOLT_EON_CTC_H_
+
+
diff --git a/bcm68620_release/release/host_reference/user_appl/eon/oam_sets/dpoe/dpoe.c b/bcm68620_release/release/host_reference/user_appl/eon/oam_sets/dpoe/dpoe.c
new file mode 100644
index 0000000..6b0acf1
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/eon/oam_sets/dpoe/dpoe.c
@@ -0,0 +1,122 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+*/
+
+/* This file contains the pieces of the OAM negotiation state machine that are specific to DPoE OAM. */
+
+#include "bcmolt_eon_private.h"
+#include "../oam_common.h"
+#include "dpoe.h"
+
+/* Org specific TLV to send to the ONU */
+static const bcmolt_epon_oam_organization_specific_info dpoe_tx_tlv =
+{
+    .oui = BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DPOE,
+    .u =
+    {
+        .dpoe =
+        {
+            .dpoe_info_tlv =
+            {
+                .type = BCMOLT_EPON_OAM_DPOE_INFO_TLV_TYPE_DPOE_OAM_SUPPORT,
+                .u =
+                {
+                    .dpoe_oam_support =
+                    {
+                        .dpoe_oam_version = 0x11
+                    }
+                }
+            }
+        }
+    }
+};
+
+void dpoe_tx_add_tlv(eon_link_state *link_state, bcmolt_epon_oam_oam_pdu_content *oam)
+{
+    if ((LOCAL_EVAL_REMOTE_EVAL == link_state->oam_state) ||
+        (LOCAL_STABLE_REMOTE_EVAL == link_state->oam_state))
+    {
+        oam->u.info.tlvs[oam->u.info.tlvs_count].type = BCMOLT_EPON_OAM_INFO_TLV_TYPE_ORGANIZATION_SPECIFIC;
+        oam->u.info.tlvs[oam->u.info.tlvs_count].u.organization_specific.value = dpoe_tx_tlv;
+        oam->u.info.tlvs_count++;
+    }
+}
+
+void dpoe_rx_tlv(
+    eon_link_state *link_state,
+    bcmolt_epon_oam_organization_specific_info *org_spec,
+    bcmos_errno *rc)
+{
+    if (link_state->oam_state == LOCAL_STABLE_REMOTE_STABLE)
+    {
+        if (NULL != org_spec)
+        {
+            EON_LINK_LOG(INFO, &link_state->link_key, "Got unexpected organization specific TLV\n");
+            *rc = BCM_ERR_ONU_ERR_RESP;
+        }
+    }
+    else
+    {
+        if ((NULL == org_spec) ||
+            (BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DPOE != org_spec->oui) ||
+            (BCMOLT_EPON_OAM_DPOE_INFO_TLV_TYPE_DPOE_OAM_SUPPORT != org_spec->u.dpoe.dpoe_info_tlv.type))
+        {
+            EON_LINK_LOG(INFO, &link_state->link_key, "Didn't get DPoE TLV\n");
+            *rc = BCM_ERR_ONU_ERR_RESP;
+        }
+        else
+        {
+            switch (org_spec->u.dpoe.dpoe_info_tlv.u.dpoe_oam_support.dpoe_oam_version)
+            {
+                case 0x22:
+                case 0x21:
+                case 0x20:
+                case 0x11: /* DPoE v1.0 I05 and higher */
+                    break;
+                case 0x01: /* backwards compatibility, same as 0x10 */
+                case 0x02: /* pre-DPoE OAM, no Certificate Authority support */
+                case 0x03: /* pre-DPoE OAM, with Certificate Authority support */
+                case 0x10: /* DPoE v1.0 I04 and lower */
+                    EON_LINK_LOG(
+                        WARNING, &link_state->link_key,
+                        "DPoE TLV contained old version: %u (some features may not work)\n",
+                        org_spec->u.dpoe.dpoe_info_tlv.u.dpoe_oam_support.dpoe_oam_version);
+                    break;
+                case 0x00: /* workaround for EASW-17839 */
+                    break;
+                default:
+                    EON_LINK_LOG(
+                        ERROR, &link_state->link_key, "DPoE TLV contained bad version: %u\n",
+                        org_spec->u.dpoe.dpoe_info_tlv.u.dpoe_oam_support.dpoe_oam_version);
+                    *rc = BCM_ERR_NOT_SUPPORTED;
+                    break;
+            }
+        }
+    }
+}
+
diff --git a/bcm68620_release/release/host_reference/user_appl/eon/oam_sets/dpoe/dpoe.h b/bcm68620_release/release/host_reference/user_appl/eon/oam_sets/dpoe/dpoe.h
new file mode 100644
index 0000000..2b6d6f2
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/eon/oam_sets/dpoe/dpoe.h
@@ -0,0 +1,41 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+*/
+
+#ifndef _BCMOLT_EON_DPOE_H_
+#define _BCMOLT_EON_DPOE_H_
+
+void dpoe_tx_add_tlv(eon_link_state *link_state, bcmolt_epon_oam_oam_pdu_content *oam);
+
+void dpoe_rx_tlv(
+    eon_link_state *link_state,
+    bcmolt_epon_oam_organization_specific_info *org_spec,
+    bcmos_errno *rc);
+
+#endif // _BCMOLT_EON_DPOE_H_
+
diff --git a/bcm68620_release/release/host_reference/user_appl/eon/oam_sets/oam_common.c b/bcm68620_release/release/host_reference/user_appl/eon/oam_sets/oam_common.c
new file mode 100644
index 0000000..cd92c92
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/eon/oam_sets/oam_common.c
@@ -0,0 +1,361 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+*/
+
+/* This file contains the pieces of the OAM negotiation state machine that are common to all OAM. */
+
+#include "oam_common.h"
+#include "bcmolt_utils.h"
+#include "bcmolt_math.h"
+#include "bcmolt_eon_private.h"
+#include "bcmolt_user_appl_epon_oam.h"
+#include "dpoe/dpoe.h"
+#include "brcm/brcm.h"
+#include "ctc/ctc.h"
+
+static const oam_info_add_tlv add_org_spec_tlv[EON_OAM_SET_ID_COUNT] =
+{
+    [EON_OAM_SET_ID_DPOE] = dpoe_tx_add_tlv,
+    [EON_OAM_SET_ID_BRCM] = brcm_tx_add_tlv,
+    [EON_OAM_SET_ID_CTC] = ctc_tx_add_tlv
+};
+
+static const oam_rx_org_spec_tlv rx_org_spec_tlv[EON_OAM_SET_ID_COUNT] =
+{
+    [EON_OAM_SET_ID_DPOE] = dpoe_rx_tlv,
+    [EON_OAM_SET_ID_BRCM] = brcm_rx_tlv,
+    [EON_OAM_SET_ID_CTC] = ctc_rx_tlv
+};
+
+static uint8_t get_oam_version(void)
+{
+    return 0x01; /* only version currently supported */
+}
+
+static void fill_local_tlv(const eon_link_state *link_state, bcmolt_epon_oam_local_remote_info *tlv)
+{
+    tlv->oam_version = get_oam_version();
+    tlv->revision = link_state->revision;
+    tlv->state =
+        BCMOLT_EPON_OAM_LOCAL_REMOTE_INFO_STATE_PARSER_ACTION1 |
+        BCMOLT_EPON_OAM_LOCAL_REMOTE_INFO_STATE_MULTIPLEXER_ACTION;
+    tlv->oam_config =
+        BCMOLT_EPON_OAM_LOCAL_REMOTE_INFO_CONFIG_OAM_MODE |
+        BCMOLT_EPON_OAM_LOCAL_REMOTE_INFO_CONFIG_UNIDIRECTIONAL_SUPPORT |
+        BCMOLT_EPON_OAM_LOCAL_REMOTE_INFO_CONFIG_LINK_EVENTS;
+    tlv->max_pdu_size = link_state->max_pdu_size;
+    tlv->oui = BCMOLT_EPON_OAM_WELL_KNOWN_OUI_TEK;
+    tlv->vendor_specific_information[0] = 0x06;
+    tlv->vendor_specific_information[1] = 0x86;
+    tlv->vendor_specific_information[2] = 0x20;
+    tlv->vendor_specific_information[3] = 0xA0;
+}
+
+static void dump_std_info_tlv(const eon_link_key *link_key, const char *type, bcmolt_epon_oam_local_remote_info *info)
+{
+    EON_LINK_LOG(
+        DEBUG,
+        link_key,
+        "%s: ver %02x rev %04x state %02x cfg %02x pdu %5u oui %06x vendor %02x%02x%02x%02x\n",
+        type,
+        info->oam_version,
+        info->revision,
+        info->state,
+        info->oam_config,
+        info->max_pdu_size,
+        info->oui,
+        info->vendor_specific_information[0],
+        info->vendor_specific_information[1],
+        info->vendor_specific_information[2],
+        info->vendor_specific_information[3]);
+}
+
+static void dump_org_spec_tlv(const eon_link_key *link_key, bcmolt_epon_oam_organization_specific_info *org_spec)
+{
+    switch (org_spec->oui)
+    {
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_TEK:
+            if (BCMOLT_EPON_OAM_TEK_INFO_TLV_TYPE_EXTENSION_SUPPORT == org_spec->u.tek.tlvs.type)
+            {
+                EON_LINK_LOG(
+                    DEBUG, link_key, "BRCM Ext Support: ver %02x rpt %02x pref %02x\n",
+                    org_spec->u.tek.tlvs.u.extension_support.version,
+                    org_spec->u.tek.tlvs.u.extension_support.report_mode,
+                    org_spec->u.tek.tlvs.u.extension_support.preferred_report_mode);
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DPOE:
+            if (BCMOLT_EPON_OAM_DPOE_INFO_TLV_TYPE_DPOE_OAM_SUPPORT == org_spec->u.dpoe.dpoe_info_tlv.type)
+            {
+                EON_LINK_LOG(
+                    DEBUG, link_key, "DPoE Support: ver %02x\n",
+                    org_spec->u.dpoe.dpoe_info_tlv.u.dpoe_oam_support.dpoe_oam_version);
+            }
+            break;
+        case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_CTC:
+            EON_LINK_LOG(
+                DEBUG, link_key, "CTC Extension Support %u, Preferred Version 0x%02x, Supports (%u):\n",
+                org_spec->u.ctc.extension_support,
+                org_spec->u.ctc.version,
+                org_spec->u.ctc.supp_version_count);
+            for (uint32_t i = 0; i < org_spec->u.ctc.supp_version_count; i++)
+            {
+                EON_LINK_LOG(
+                    DEBUG, link_key, "\tOUI %06x, Version 0x%02x\n",
+                    org_spec->u.ctc.supp_version[i].oui, org_spec->u.ctc.supp_version[i].version);
+            }
+            break;
+        default:
+            EON_LINK_LOG(WARNING, link_key, "No support for %06x\n", org_spec->oui);
+            break;
+    }
+}
+
+static void dump_info_frame(const bcmolt_epon_oam_ethernet_frame *oam, const eon_link_state* link_state)
+{
+    static const char* entname[] = {"ONU","OLT"};
+    char da_buf[MAC_STR_LEN];
+    char sa_buf[MAC_STR_LEN];
+    bcmolt_epon_oam_oam_flags flags = oam->protocols[0].u.slow_protocol.value.u.oam.flags;
+    uint8_t is_olt = (0 == memcmp(link_state->epon_ni_mac_addr.u8, oam->sa.u8, BCMOS_ETH_ALEN));
+    uint8_t olt_stab = 0 !=
+        (flags & (is_olt ? BCMOLT_EPON_OAM_OAM_FLAGS_LOCAL_STABLE : BCMOLT_EPON_OAM_OAM_FLAGS_REMOTE_STABLE));
+    uint8_t onu_stab = 0 !=
+        (flags & (is_olt ? BCMOLT_EPON_OAM_OAM_FLAGS_REMOTE_STABLE : BCMOLT_EPON_OAM_OAM_FLAGS_LOCAL_STABLE));
+    uint8_t olt_eval = 0 !=
+        (flags & (is_olt ? BCMOLT_EPON_OAM_OAM_FLAGS_LOCAL_EVALUATING : BCMOLT_EPON_OAM_OAM_FLAGS_REMOTE_EVALUATING));
+    uint8_t onu_eval = 0 !=
+        (flags & (is_olt ? BCMOLT_EPON_OAM_OAM_FLAGS_REMOTE_EVALUATING : BCMOLT_EPON_OAM_OAM_FLAGS_LOCAL_EVALUATING));
+
+    EON_LINK_LOG(
+        DEBUG, &link_state->link_key, "from %s: OLT %s  ONU %s\n", entname[is_olt],
+        olt_stab ? "stab" : (olt_eval ? "eval" : "NONE"),
+        onu_stab ? "stab" : (onu_eval ? "eval" : "NONE"));
+
+    EON_LINK_LOG(DEBUG, &link_state->link_key, "               da                sa  eth su flgs cd\n");
+    EON_LINK_LOG(
+        DEBUG, &link_state->link_key, "%s %s %04x %02x %04x %02x\n",
+        bcmos_mac_2_str(&oam->da, da_buf), bcmos_mac_2_str(&oam->sa, sa_buf),
+        oam->protocols[0].ethertype, oam->protocols[0].u.slow_protocol.value.subtype,
+        oam->protocols[0].u.slow_protocol.value.u.oam.flags,
+        oam->protocols[0].u.slow_protocol.value.u.oam.content.code);
+    EON_LINK_LOG(
+        DEBUG, &link_state->link_key, "TLVS: (%u)\n",
+        oam->protocols[0].u.slow_protocol.value.u.oam.content.u.info.tlvs_count);
+    for (uint8_t i = 0; i < oam->protocols[0].u.slow_protocol.value.u.oam.content.u.info.tlvs_count; i++)
+    {
+        switch (oam->protocols[0].u.slow_protocol.value.u.oam.content.u.info.tlvs[i].type)
+        {
+            case BCMOLT_EPON_OAM_INFO_TLV_TYPE_LOCAL:
+                dump_std_info_tlv(
+                    &link_state->link_key,
+                    "LOCAL",
+                    &oam->protocols[0].u.slow_protocol.value.u.oam.content.u.info.tlvs[i].u.local.info);
+                break;
+            case BCMOLT_EPON_OAM_INFO_TLV_TYPE_REMOTE:
+                dump_std_info_tlv(
+                    &link_state->link_key,
+                    "REMOTE",
+                    &oam->protocols[0].u.slow_protocol.value.u.oam.content.u.info.tlvs[i].u.remote.info);
+                break;
+            case BCMOLT_EPON_OAM_INFO_TLV_TYPE_ORGANIZATION_SPECIFIC:
+                dump_org_spec_tlv(
+                    &link_state->link_key,
+                    &oam->protocols[0].u.slow_protocol.value.u.oam.content.u.info.tlvs[i].u.organization_specific.value);
+                break;
+            default:
+                break;
+        }
+    }
+}
+
+bcmos_errno build_tx_info_frame(eon_link_state *link_state, eon_frame_data *frame_data)
+{
+    bcmos_bool have_remote_info = link_state->remote_info.oam_version == get_oam_version();
+    bcmolt_epon_oam_ethernet_frame oam_frame = {};
+    bcmolt_epon_oam_ethernet_protocol protocol = {};
+    bcmolt_epon_oam_info_tlv_base tlvs[4] = {};
+
+    EON_LINK_LOG(DEBUG, &link_state->link_key, "BUILDING INFO FRAME, current state %04x\n", link_state->oam_state);
+
+    oam_frame.da = slow_protocol_multicast_mac;
+    oam_frame.sa = link_state->epon_ni_mac_addr;
+    oam_frame.protocols_count = 1;
+    oam_frame.protocols = &protocol;
+    protocol.ethertype = BCMOLT_EPON_OAM_PROTOCOL_TYPE_SLOW_PROTOCOL;
+    protocol.u.slow_protocol.value.subtype = BCMOLT_EPON_OAM_SLOW_PROTOCOL_SUBTYPE_OAM;
+    protocol.u.slow_protocol.value.u.oam.flags = link_state->oam_state;
+    protocol.u.slow_protocol.value.u.oam.content.code = BCMOLT_EPON_OAM_OAM_OPCODE_INFO;
+    protocol.u.slow_protocol.value.u.oam.content.u.info.tlvs_count = 1;
+    protocol.u.slow_protocol.value.u.oam.content.u.info.tlvs = tlvs;
+    tlvs[0].type = BCMOLT_EPON_OAM_INFO_TLV_TYPE_LOCAL;
+    fill_local_tlv(link_state, &tlvs[0].u.local.info);
+    if (have_remote_info)
+    {
+        tlvs[1].type = BCMOLT_EPON_OAM_INFO_TLV_TYPE_REMOTE;
+        tlvs[1].u.remote.info = link_state->remote_info;
+        protocol.u.slow_protocol.value.u.oam.content.u.info.tlvs_count++;
+    }
+    add_org_spec_tlv[link_state->oam_set](link_state, &protocol.u.slow_protocol.value.u.oam.content);
+    tlvs[protocol.u.slow_protocol.value.u.oam.content.u.info.tlvs_count].type = BCMOLT_EPON_OAM_INFO_TLV_TYPE_END;
+    protocol.u.slow_protocol.value.u.oam.content.u.info.tlvs_count++;
+
+    dump_info_frame(&oam_frame, link_state);
+
+    return epon_oam_pack_frame(&oam_frame, &frame_data->payload, &frame_data->length);
+}
+
+/* OK = done
+   in_progress = send next frame
+   parse = ignore
+   other = stop
+   */
+bcmos_errno handle_rx_info_frame(eon_link_state *link_state, uint16_t rx_length, uint8_t *rx_payload)
+{
+    bcmos_errno rc = BCM_ERR_IN_PROGRESS;
+    bcmolt_epon_oam_oam_flags start_state;
+    bcmolt_epon_oam_ethernet_frame *frame;
+    bcmolt_epon_oam_slow_protocol *sp;
+    bcmolt_epon_oam_organization_specific_info *org_spec = NULL;
+
+    start_state = link_state->oam_state;
+    EON_LINK_LOG(DEBUG, &link_state->link_key, "RECEIVED INFO FRAME, current state %04x\n", start_state);
+
+    frame = epon_oam_unpack(link_state->link_key.device_id, rx_length, rx_payload);
+
+    if ((frame->protocols_count == 0) ||
+        (frame->protocols[0].ethertype != BCMOLT_EPON_OAM_PROTOCOL_TYPE_SLOW_PROTOCOL) ||
+        (frame->protocols[0].u.slow_protocol.value.subtype != BCMOLT_EPON_OAM_SLOW_PROTOCOL_SUBTYPE_OAM) ||
+        (frame->protocols[0].u.slow_protocol.value.u.oam.content.code != BCMOLT_EPON_OAM_OAM_OPCODE_INFO))
+    {
+        /* not an info frame, ignore */
+        bcmos_free(frame);
+        return BCM_ERR_PARSE;
+    }
+
+    dump_info_frame(frame, link_state);
+    sp = &frame->protocols[0].u.slow_protocol.value;
+
+    /* capture link's TLV for subsequent retransmission */
+    if ((sp->u.oam.content.u.info.tlvs_count > 0) &&
+        (sp->u.oam.content.u.info.tlvs[0].type == BCMOLT_EPON_OAM_INFO_TLV_TYPE_LOCAL))
+    {
+        link_state->remote_info = sp->u.oam.content.u.info.tlvs[0].u.local.info;
+    }
+    else
+    {
+        bcmos_free(frame);
+        return BCM_ERR_ONU_ERR_RESP; /* no local info */
+    }
+
+    if (0 != memcmp(frame->da.u8, slow_protocol_multicast_mac.u8, sizeof(slow_protocol_multicast_mac)))
+    {
+        rc = BCM_ERR_ONU_ERR_RESP;
+        EON_LINK_LOG(WARNING, &link_state->link_key,
+                     "DA mismatch "BCMOS_MACADDR_FMT_STR" expected vs. "BCMOS_MACADDR_FMT_STR" actual\n",
+                     BCMOS_MACADDR_PARAMS(&slow_protocol_multicast_mac), BCMOS_MACADDR_PARAMS(&frame->da));
+    }
+
+    if (0 != memcmp(frame->sa.u8, &link_state->link_key.link.mac_address, sizeof(frame->sa)))
+    {
+        rc = BCM_ERR_ONU_ERR_RESP;
+        EON_LINK_LOG(WARNING, &link_state->link_key,
+                     "SA mismatch "BCMOS_MACADDR_FMT_STR"  expected vs. "BCMOS_MACADDR_FMT_STR" actual\n",
+                     BCMOS_MACADDR_PARAMS(&link_state->link_key.link.mac_address), BCMOS_MACADDR_PARAMS(&frame->sa));
+    }
+
+    if (sp->u.oam.content.u.info.tlvs[0].u.local.info.oam_version != get_oam_version())
+    {
+        rc = BCM_ERR_ONU_ERR_RESP;
+        EON_LINK_LOG(WARNING, &link_state->link_key, "oam version mismatch 0x%02x expected vs. 0x%02x actual\n",
+                     get_oam_version(), sp->u.oam.content.u.info.tlvs[0].u.local.info.oam_version);
+    }
+
+    /* Is the far end echoing the TLV we sent? */
+    if ((sp->u.oam.content.u.info.tlvs_count > 1) &&
+        (sp->u.oam.content.u.info.tlvs[1].type == BCMOLT_EPON_OAM_INFO_TLV_TYPE_REMOTE))
+    {
+        if (sp->u.oam.content.u.info.tlvs[0].u.local.info.max_pdu_size !=
+            sp->u.oam.content.u.info.tlvs[1].u.remote.info.max_pdu_size)
+        {
+            link_state->max_pdu_size = MIN(
+                sp->u.oam.content.u.info.tlvs[0].u.local.info.max_pdu_size,
+                sp->u.oam.content.u.info.tlvs[1].u.remote.info.max_pdu_size);
+            link_state->revision++;
+        }
+        else
+        {
+            bcmolt_epon_oam_local_remote_info loc_tlv = {};
+            fill_local_tlv(link_state, &loc_tlv);
+            if (0 == memcmp(&loc_tlv, &sp->u.oam.content.u.info.tlvs[1].u.remote.info, sizeof(loc_tlv)))
+            {
+                link_state->oam_state = (link_state->oam_state | BCMOLT_EPON_OAM_OAM_FLAGS_LOCAL_STABLE) &
+                                        (~BCMOLT_EPON_OAM_OAM_FLAGS_LOCAL_EVALUATING);
+                EON_LINK_LOG(DEBUG, &link_state->link_key, "setting LOCAL STABLE flag\n");
+            }
+            else
+            {
+                EON_LINK_LOG(WARNING, &link_state->link_key, "Remote TLV from ONU does NOT match what we sent\n");
+            }
+        }
+    }
+
+    if (sp->u.oam.flags & BCMOLT_EPON_OAM_OAM_FLAGS_LOCAL_EVALUATING)
+    {
+        link_state->oam_state = (link_state->oam_state | BCMOLT_EPON_OAM_OAM_FLAGS_REMOTE_EVALUATING) &
+                                (~BCMOLT_EPON_OAM_OAM_FLAGS_REMOTE_STABLE);
+        EON_LINK_LOG(DEBUG, &link_state->link_key, "setting REMOTE EVAL flag\n");
+    }
+
+    if (sp->u.oam.flags & BCMOLT_EPON_OAM_OAM_FLAGS_LOCAL_STABLE)
+    {
+        link_state->oam_state = (link_state->oam_state | BCMOLT_EPON_OAM_OAM_FLAGS_REMOTE_STABLE) &
+                                (~BCMOLT_EPON_OAM_OAM_FLAGS_REMOTE_EVALUATING);
+        EON_LINK_LOG(DEBUG, &link_state->link_key, "setting REMOTE STABLE flag\n");
+    }
+
+    if (LOCAL_STABLE_REMOTE_STABLE == link_state->oam_state)
+    {
+        rc = BCM_ERR_OK; /* basic negotiation complete */
+    }
+
+    if ((sp->u.oam.content.u.info.tlvs_count > 2) &&
+        (sp->u.oam.content.u.info.tlvs[2].type == BCMOLT_EPON_OAM_INFO_TLV_TYPE_ORGANIZATION_SPECIFIC))
+    {
+        org_spec = &sp->u.oam.content.u.info.tlvs[2].u.organization_specific.value;
+    }
+    rx_org_spec_tlv[link_state->oam_set](link_state, org_spec, &rc);
+
+    EON_LINK_LOG(DEBUG, &link_state->link_key, "state %04x -> %04x (%s)\n",
+                 start_state, link_state->oam_state, bcmos_strerror(rc));
+
+    bcmos_free(frame);
+
+    return rc;
+}
+
diff --git a/bcm68620_release/release/host_reference/user_appl/eon/oam_sets/oam_common.h b/bcm68620_release/release/host_reference/user_appl/eon/oam_sets/oam_common.h
new file mode 100644
index 0000000..50f08b2
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/eon/oam_sets/oam_common.h
@@ -0,0 +1,56 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+*/
+
+/* This file contains the pieces of the OAM negotiation state machine that are common to all OAM. */
+
+#ifndef _OAM_COMMON_H_
+#define _OAM_COMMON_H_
+
+#include "bcmolt_eon_private.h"
+
+#define LOCAL_EVAL_REMOTE_EVAL\
+    (BCMOLT_EPON_OAM_OAM_FLAGS_LOCAL_EVALUATING | BCMOLT_EPON_OAM_OAM_FLAGS_REMOTE_EVALUATING)
+#define LOCAL_STABLE_REMOTE_EVAL\
+    (BCMOLT_EPON_OAM_OAM_FLAGS_LOCAL_STABLE | BCMOLT_EPON_OAM_OAM_FLAGS_REMOTE_EVALUATING)
+#define LOCAL_STABLE_REMOTE_STABLE\
+    (BCMOLT_EPON_OAM_OAM_FLAGS_LOCAL_STABLE | BCMOLT_EPON_OAM_OAM_FLAGS_REMOTE_STABLE)
+
+typedef void (*oam_info_add_tlv)(eon_link_state *link_state, bcmolt_epon_oam_oam_pdu_content *oam);
+
+typedef void (*oam_rx_org_spec_tlv)(
+    eon_link_state *link_state,
+    bcmolt_epon_oam_organization_specific_info *org_spec,
+    bcmos_errno *rc);
+
+bcmos_errno build_tx_info_frame(eon_link_state *link_state, eon_frame_data *frame_data);
+
+bcmos_errno handle_rx_info_frame(eon_link_state *link_state, uint16_t rx_length, uint8_t *rx_payload);
+
+#endif // _OAM_COMMON_H
+
diff --git a/bcm68620_release/release/host_reference/user_appl/epon_hde/Makefile b/bcm68620_release/release/host_reference/user_appl/epon_hde/Makefile
new file mode 100644
index 0000000..36f10f1
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/epon_hde/Makefile
@@ -0,0 +1,11 @@
+# EPON Host Driven Encryption

+

+ifeq ("$(ENABLE_CLI)", "y")

+

+	MOD_NAME = bcm_user_appl_epon_hde

+	MOD_TYPE = lib

+	MOD_DEPS = host_api

+

+	srcs = bcmolt_epon_hde.c encrypt_oam.c

+

+endif

diff --git a/bcm68620_release/release/host_reference/user_appl/epon_hde/bcmolt_epon_hde.c b/bcm68620_release/release/host_reference/user_appl/epon_hde/bcmolt_epon_hde.c
new file mode 100644
index 0000000..60cb073
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/epon_hde/bcmolt_epon_hde.c
@@ -0,0 +1,693 @@
+/*
+ <:copyright-BRCM:2016:DUAL/GPL:standard
+
+ Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+ All Rights Reserved
+
+ Unless you and Broadcom execute a separate written software license
+ agreement governing use of this software, this software is licensed
+ to you under the terms of the GNU General Public License version 2
+ (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ with the following added to such license:
+
+ As a special exception, the copyright holders of this software give
+ you permission to link this software with independent modules, and
+ to copy and distribute the resulting executable under terms of your
+ choice, provided that you also meet, for each linked independent
+ module, the terms and conditions of the license of that module.
+ An independent module is a module which is not derived from this
+ software.  The special exception does not apply to any modifications
+ of the software.
+
+ Not withstanding the above, under no circumstances may you combine
+ this software in any way with any other Broadcom software provided
+ under a license other than the GPL, without Broadcom's express prior
+ written consent.
+
+ :>
+ */
+
+#include <bcmos_system.h>
+#include <bcmolt_api.h>
+#include <bcmolt_model_types.h>
+#include <bcmcli_session.h>
+#include <bcmolt_msg_pack.h>
+#include <bcm_dev_log.h>
+#include <encrypt_oam.h>
+#include <oam_defs.h>
+#include "bcmolt_epon_hde.h"
+
+#define HDE_TASK_MSG_Q_SIZE 64
+#define ENC_KEY_LENGTH_KEY 16
+#define HDE_MAX_NUM_LINKS 512
+#define KEY_EXCHANGE_PERIOD 15
+
+typedef enum
+{
+    HDE_EVENT_ENABLE_ENCRYPTION,
+    HDE_EVENT_DISABLE_ENCRYPTION,
+    HDE_EVENT_FRAME_RX,
+    HDE_EVENT_OAM_TIMEOUT,
+    HDE_EVENT__NUM_OF
+} hde_event;
+
+typedef enum
+{
+    HDE_STATE_NOT_ENCRYPTED,
+    HDE_STATE_ENCRYPTED,
+    HDE_STATE_WAITING_FOR_OAM_ACK,
+    HDE_STATE__NUM_OF
+} hde_state;
+
+typedef struct
+{
+    bcmos_msg os_msg;
+    bcmolt_msg *rx;
+    hde_key key;
+    hde_event event;
+} hde_task_msg;
+
+typedef struct
+{
+    hde_key hde_link;
+    hde_state state;
+    bcmos_timer oam_timeout_timer;
+    bcmolt_epon_link_rate link_rate;
+    bcmolt_epon_llid llid;
+    bcmos_mac_address corresponding_pon_port_mac;
+} hde_link_data;
+
+static struct
+{
+    bcmos_task task;
+    dev_log_id log_id[BCMTR_MAX_OLTS];
+    hde_link_data *links;
+    uint16_t num_links;
+} hde_data;
+
+static bcmos_bool is_running = BCMOS_FALSE;
+
+typedef void (*link_state_handler)(hde_link_data *hde_link, const bcmolt_msg *ind);
+
+static const char *get_state_string(hde_state state)
+{
+    switch (state)
+    {
+    case HDE_STATE_NOT_ENCRYPTED:
+        return "not encrypted";
+    case HDE_STATE_ENCRYPTED:
+        return "encrypted";
+    case HDE_STATE_WAITING_FOR_OAM_ACK:
+        return "waiting for oam ack";
+    default:
+        return "UNKNOWN STATE!!!";
+    }
+}
+
+static bcmos_errno set_new_key(const hde_key *hde_link, bcmolt_encryption_information_container *new_key, bcmolt_epon_key_choice key_choice, bcmolt_epon_encryption_mode mode)
+{
+    bcmolt_epon_link_cfg link_cfg;
+    bcmolt_epon_encryption_config encryption_config = { };
+
+    // Up/down format must match even when doing DS only
+    encryption_config.upstream_encryption_information.format = new_key->format;
+
+    encryption_config.downstream_encryption_information = *new_key;
+    encryption_config.downstream_key_choice = key_choice;
+    encryption_config.downstream_mode = mode;
+    bcmolt_epon_link_key link_key =
+    {
+        .epon_ni = hde_link->epon_ni,
+        .mac_address = hde_link->mac_addr
+    };
+    BCMOLT_CFG_INIT(&link_cfg, epon_link, link_key);
+    BCMOLT_CFG_PROP_SET(&link_cfg, epon_link, epon_encryption, encryption_config);
+    return bcmolt_cfg_set(hde_link->device_id, &link_cfg.hdr);
+}
+
+static bcmos_errno set_pon_encryption_if_needed(const hde_key *hde_link)
+{
+    // First check the current state of the PON's encryption mode.
+    bcmos_errno rc;
+    bcmolt_epon_ni_cfg pon_cfg;
+    bcmolt_epon_ni_key pon_key = { .epon_ni = hde_link->epon_ni };
+    BCMOLT_CFG_INIT(&pon_cfg, epon_ni, pon_key);
+    BCMOLT_CFG_PROP_GET(&pon_cfg, epon_ni, encryption_cfg);
+    rc = bcmolt_cfg_get(hde_link->device_id, &pon_cfg.hdr);
+    if (rc != BCM_ERR_OK)
+    {
+        BCM_LOG(ERROR, hde_data.log_id[hde_link->device_id], "Failure - Cannot query PON encryption mode!.\n");
+        return rc;
+    }
+
+    if (pon_cfg.data.encryption_cfg.downstream_encryption_mode != BCMOLT_EPON_ENCRYPTION_MODE_EPON_ZERO_OVERHEAD_AES)
+    {
+        // Encryption mode is not correctly set on the PON, so set it now.
+        pon_cfg.data.encryption_cfg.downstream_encryption_mode = BCMOLT_EPON_ENCRYPTION_MODE_EPON_ZERO_OVERHEAD_AES;
+        pon_cfg.data.encryption_cfg.upstream_encryption_mode = BCMOLT_EPON_ENCRYPTION_MODE_NO_ENCRYPTION;
+        rc = bcmolt_cfg_set(hde_link->device_id, &pon_cfg.hdr);
+        if (rc != BCM_ERR_OK)
+        {
+            BCM_LOG(ERROR, hde_data.log_id[hde_link->device_id], "Failure - Cannot set PON encryption mode!.\n");
+            return rc;
+        }
+    }
+
+    return BCM_ERR_OK;
+}
+
+static bcmolt_epon_link_rate get_link_rate(const hde_key *hde_link)
+{
+    bcmos_errno rc;
+    bcmolt_epon_link_cfg link_cfg;
+    bcmolt_epon_link_key link_key =
+    {
+        .epon_ni = hde_link->epon_ni,
+        .mac_address = hde_link->mac_addr
+    };
+    BCMOLT_CFG_INIT(&link_cfg, epon_link, link_key);
+    BCMOLT_CFG_PROP_GET(&link_cfg, epon_link, link_rate);
+    rc = bcmolt_cfg_get(hde_link->device_id, &link_cfg.hdr);
+    if (rc != BCM_ERR_OK)
+    {
+        BCM_LOG(
+            ERROR,
+            hde_data.log_id[hde_link->device_id],
+            "Failure - cannot query link rate for link %02x:%02x:%02x:%02x:%02x:%02x!.\n",
+            hde_link->mac_addr.u8[0],
+            hde_link->mac_addr.u8[1],
+            hde_link->mac_addr.u8[2],
+            hde_link->mac_addr.u8[3],
+            hde_link->mac_addr.u8[4],
+            hde_link->mac_addr.u8[5]);
+    }
+    return link_cfg.data.link_rate;
+}
+
+static bcmos_mac_address get_pon_mac(const hde_key *hde_link)
+{
+    bcmos_errno rc;
+    bcmolt_epon_ni_cfg pon_cfg;
+    bcmolt_epon_ni_key pon_key = { .epon_ni = hde_link->epon_ni };
+    BCMOLT_CFG_INIT(&pon_cfg, epon_ni, pon_key);
+    BCMOLT_CFG_PROP_GET(&pon_cfg, epon_ni, mac_address);
+    rc = bcmolt_cfg_get(hde_link->device_id, &pon_cfg.hdr);
+    if (rc != BCM_ERR_OK)
+    {
+        BCM_LOG(ERROR, hde_data.log_id[hde_link->device_id], "Failure - Cannot query PON mac address!.\n");
+    }
+    return pon_cfg.data.mac_address;
+}
+
+static bcmolt_epon_llid get_llid(const hde_key *hde_link)
+{
+    bcmos_errno rc;
+    bcmolt_epon_link_cfg link_cfg;
+    bcmolt_epon_link_key link_key =
+    {
+        .epon_ni = hde_link->epon_ni,
+        .mac_address = hde_link->mac_addr
+    };
+    BCMOLT_CFG_INIT(&link_cfg, epon_link, link_key);
+    BCMOLT_CFG_PROP_GET(&link_cfg, epon_link, llid);
+    rc = bcmolt_cfg_get(hde_link->device_id, &link_cfg.hdr);
+    if (rc != BCM_ERR_OK)
+    {
+        BCM_LOG(
+            ERROR,
+            hde_data.log_id[hde_link->device_id],
+            "Failure - cannot query LLID for link %02x:%02x:%02x:%02x:%02x:%02x!.\n",
+            hde_link->mac_addr.u8[0],
+            hde_link->mac_addr.u8[1],
+            hde_link->mac_addr.u8[2],
+            hde_link->mac_addr.u8[3],
+            hde_link->mac_addr.u8[4],
+            hde_link->mac_addr.u8[5]);
+    }
+    return link_cfg.data.llid;
+}
+
+/* By spec the SCI is the LLID of the link appended to the corresponding epon port mac address */
+static void create_sci(const bcmos_mac_address *epon_port_mac, bcmolt_epon_llid llid, uint8_t *sci)
+{
+    sci[7] = (uint8_t) llid;
+    sci[6] = (uint8_t) (llid >> 8);
+    sci[5] = epon_port_mac->u8[5];
+    sci[4] = epon_port_mac->u8[4];
+    sci[3] = epon_port_mac->u8[3];
+    sci[2] = epon_port_mac->u8[2];
+    sci[1] = epon_port_mac->u8[1];
+    sci[0] = epon_port_mac->u8[0];
+}
+
+static void handle_not_encrypted_enable_encryption(hde_link_data *hde_link, const bcmolt_msg *ind)
+{
+    dpoe_encrypt_mode mode = DPOE_ENCRYPT_MODE_NONE;
+    // Retreive useful link info and store it to save messages later.
+    hde_link->link_rate = get_link_rate(&hde_link->hde_link);
+    hde_link->corresponding_pon_port_mac = get_pon_mac(&hde_link->hde_link);
+    hde_link->llid = get_llid(&hde_link->hde_link);
+
+    if (hde_link->link_rate == BCMOLT_EPON_LINK_RATE_TEN_TEN || hde_link->link_rate == BCMOLT_EPON_LINK_RATE_TEN_ONE)
+    {
+        mode = DPOE_ENCRYPT_MODE_10DOWN;
+    }
+    else if (hde_link->link_rate == BCMOLT_EPON_LINK_RATE_ONE_ONE)
+    {
+        mode = DPOE_ENCRYPT_MODE_1DOWN;
+    }
+    else
+    {
+        BCM_LOG(ERROR, hde_data.log_id[hde_link->hde_link.device_id], "Failure - UNKNOWN LINK RATE!!!.\n");
+    }
+
+    dpoe_encrypt_oam_set_request_send(
+        &hde_link->hde_link,
+        KEY_EXCHANGE_PERIOD,
+        mode,
+        hde_link->corresponding_pon_port_mac);
+
+    bcmos_timer_start(&hde_link->oam_timeout_timer, HDE_ENABLE_OAM_WAIT_US + OAM_TIMEOUT_GRACE_PERIOD_US);
+
+    hde_link->state = HDE_STATE_WAITING_FOR_OAM_ACK;
+}
+
+static void handle_encrypted_disable_encryption(hde_link_data *hde_link, const bcmolt_msg *ind)
+{
+    bcmolt_encryption_information_container empty_key = { };
+    bcmos_errno rc;
+
+    // Turn off encryption on the embedded side.
+    rc = set_new_key(&hde_link->hde_link, &empty_key, BCMOLT_EPON_KEY_CHOICE_KEY_0, BCMOLT_EPON_ENCRYPTION_MODE_NO_ENCRYPTION);
+    if (rc != BCM_ERR_OK)
+    {
+        BCM_LOG(ERROR, hde_data.log_id[hde_link->hde_link.device_id],
+            "Failure - Cannot communicate with the embedded!.\n");
+    }
+
+    // Send the disable OAM to the link. Don't bother waiting for a response.
+    dpoe_encrypt_oam_set_request_send(&hde_link->hde_link, 0, DPOE_ENCRYPT_MODE_NONE, get_pon_mac(&hde_link->hde_link));
+
+    hde_link->state = HDE_STATE_NOT_ENCRYPTED;
+}
+
+static void handle_encrypted_frame_rx(hde_link_data *hde_link, const bcmolt_msg *ind)
+{
+    const bcmolt_epon_link_frame_captured *frame_captured = (const bcmolt_epon_link_frame_captured*) ind;
+    uint8_t new_key[16];
+    bcmolt_epon_key_choice key_choice;
+    bcmos_errno rc;
+    bcmolt_encryption_information_container key_for_embedded;
+    rc = dpoe_encrypt_oam_parse_new_key(&frame_captured->data.frame, new_key, &key_choice);
+    if (rc != BCM_ERR_OK)
+    {
+        // Not a DPoE new key, ignore it
+        return;
+    }
+
+    if (hde_link->link_rate == BCMOLT_EPON_LINK_RATE_TEN_TEN || hde_link->link_rate == BCMOLT_EPON_LINK_RATE_TEN_ONE)
+    {
+        uint8_t sci[8];
+        create_sci(&hde_link->corresponding_pon_port_mac, hde_link->llid, sci);
+        key_for_embedded.format = BCMOLT_EPON_ENCRYPTION_INFORMATION_FORMAT_CTR;
+        memcpy(key_for_embedded.u.ctr.key, new_key, sizeof(new_key));
+        memcpy(key_for_embedded.u.ctr.sci, sci, sizeof(sci));
+    }
+    else if (hde_link->link_rate == BCMOLT_EPON_LINK_RATE_ONE_ONE)
+    {
+        key_for_embedded.format = BCMOLT_EPON_ENCRYPTION_INFORMATION_FORMAT_CFB;
+        memcpy(key_for_embedded.u.cfb.key, new_key, sizeof(new_key));
+    }
+    else
+    {
+        BCM_LOG(ERROR, hde_data.log_id[hde_link->hde_link.device_id], "Failure - UNKNOWN LINK RATE!!!.\n");
+    }
+
+    rc = set_new_key(&hde_link->hde_link, &key_for_embedded, key_choice, BCMOLT_EPON_ENCRYPTION_MODE_EPON_ZERO_OVERHEAD_AES);
+    if (rc != BCM_ERR_OK)
+    {
+        BCM_LOG(ERROR, hde_data.log_id[hde_link->hde_link.device_id],
+            "Failure - Cannot communicate with the embedded!.\n");
+    }
+}
+
+static void handle_waiting_for_oam_ack_oam_timeout(hde_link_data *hde_link, const bcmolt_msg *ind)
+{
+    BCM_LOG(ERROR, hde_data.log_id[hde_link->hde_link.device_id], "Failure - No response to initial OAM.\n");
+    hde_link->state = HDE_STATE_NOT_ENCRYPTED;
+}
+
+static void handle_waiting_for_oam_ack_frame_rx(hde_link_data *hde_link, const bcmolt_msg *ind)
+{
+    const bcmolt_epon_link_frame_captured *frame_captured = (const bcmolt_epon_link_frame_captured*) ind;
+    uint8_t encrypt_mode_response;
+    uint8_t key_expiry_response;
+    bcmos_errno rc;
+
+    rc = dpoe_encrypt_oam_parse_set_response(&frame_captured->data.frame, &encrypt_mode_response, &key_expiry_response);
+    if (rc != BCM_ERR_OK)
+    {
+        // Not a encryption set reponse, ignore it
+        return;
+    }
+
+    /* 0 represents 'no error'. */
+    if ((encrypt_mode_response != 0) || (key_expiry_response != 0))
+    {
+        BCM_LOG(ERROR, hde_data.log_id[hde_link->hde_link.device_id],
+            "Failure - The link refused one of the requested TLVs.\n");
+        hde_link->state = HDE_STATE_NOT_ENCRYPTED;
+        return;
+    }
+
+    // We have an appropriate response, so move on normally.
+    bcmos_timer_stop(&hde_link->oam_timeout_timer);
+    hde_link->state = HDE_STATE_ENCRYPTED;
+}
+
+static void handle_waiting_for_oam_ack_disable_encryption(hde_link_data *hde_link, const bcmolt_msg *ind)
+{
+    hde_link->state = HDE_STATE_NOT_ENCRYPTED;
+}
+
+static void handle_ignore(hde_link_data *hde_link, const bcmolt_msg *ind)
+{
+    // Literally do nothing
+}
+
+static void handle_error(hde_link_data *hde_link, const bcmolt_msg *ind)
+{
+    BCM_LOG(ERROR, hde_data.log_id[hde_link->hde_link.device_id], "Unexpected event in state %s\n",
+        get_state_string(hde_link->state));
+}
+
+static link_state_handler link_state_machine[HDE_STATE__NUM_OF][HDE_EVENT__NUM_OF] =
+{
+    [HDE_STATE_NOT_ENCRYPTED] =
+    {
+        [HDE_EVENT_ENABLE_ENCRYPTION] = handle_not_encrypted_enable_encryption,
+        [HDE_EVENT_DISABLE_ENCRYPTION] = handle_error,
+        [HDE_EVENT_FRAME_RX] = handle_ignore,
+        [HDE_EVENT_OAM_TIMEOUT] = handle_ignore,
+    },
+    [HDE_STATE_ENCRYPTED] =
+    {
+        [HDE_EVENT_ENABLE_ENCRYPTION] = handle_error,
+        [HDE_EVENT_DISABLE_ENCRYPTION] = handle_encrypted_disable_encryption,
+        [HDE_EVENT_FRAME_RX] = handle_encrypted_frame_rx,
+        [HDE_EVENT_OAM_TIMEOUT] = handle_ignore,
+    },
+    [HDE_STATE_WAITING_FOR_OAM_ACK] =
+    {
+        [HDE_EVENT_ENABLE_ENCRYPTION] = handle_error,
+        [HDE_EVENT_DISABLE_ENCRYPTION] = handle_waiting_for_oam_ack_disable_encryption,
+        [HDE_EVENT_FRAME_RX] = handle_waiting_for_oam_ack_frame_rx,
+        [HDE_EVENT_OAM_TIMEOUT] = handle_waiting_for_oam_ack_oam_timeout,
+    }
+};
+
+static int32_t find_table_index(const hde_key *hde_link)
+{
+    uint16_t i;
+    for (i = 0; i < hde_data.num_links; ++i)
+    {
+        if (memcmp(hde_link, &hde_data.links[i], sizeof(*hde_link)) == 0)
+        {
+            return i;
+        }
+    }
+    return -1;
+}
+
+static void remove_link_from_table(int32_t link_index)
+{
+    int32_t i;
+    for (i = link_index; i < hde_data.num_links - 1; ++i)
+    {
+        /* Backwards copy all data expect for the timer handle */
+        hde_data.links[i].hde_link = hde_data.links[i + 1].hde_link;
+        hde_data.links[i].link_rate = hde_data.links[i + 1].link_rate;
+        hde_data.links[i].llid = hde_data.links[i + 1].llid;
+        hde_data.links[i].state = hde_data.links[i + 1].state;
+    }
+    /* also clear the state of the now empty link */
+    hde_data.links[hde_data.num_links - 1].state = HDE_STATE_NOT_ENCRYPTED;
+    hde_data.num_links--;
+}
+
+static void run_state_machine(int32_t link_index, const hde_task_msg *task_msg)
+{
+    if (link_index < 0) // We don't know of this link yet.
+    {
+        if (hde_data.num_links == HDE_MAX_NUM_LINKS)
+        {
+            BCM_LOG(ERROR, hde_data.log_id[task_msg->key.device_id], "Failure - Cannot add any more links!.\n");
+            return;
+        }
+
+        link_index = hde_data.num_links;
+        hde_data.links[link_index].hde_link = task_msg->key;
+        link_state_machine[hde_data.links[link_index].state][task_msg->event](&hde_data.links[link_index], task_msg->rx);
+
+        if (hde_data.links[link_index].state != HDE_STATE_NOT_ENCRYPTED)
+        {
+            // This link did not end in the state 'not encrypted', so we need to start tracking him.
+            ++hde_data.num_links;
+        }
+    }
+    else // We already know of this link.
+    {
+        link_state_machine[hde_data.links[link_index].state][task_msg->event](&hde_data.links[link_index], task_msg->rx);
+
+        if (hde_data.links[link_index].state == HDE_STATE_NOT_ENCRYPTED)
+        {
+            // The link has is no longer encrypted so lets forget about him.
+            remove_link_from_table(link_index);
+        }
+    }
+}
+
+static void hde_handle_event(bcmos_module_id module_id, bcmos_msg *os_msg)
+{
+    hde_task_msg *task_msg = (hde_task_msg *) os_msg;
+
+    int32_t link_index;
+
+    link_index = find_table_index(&task_msg->key);
+    run_state_machine(link_index, task_msg);
+
+    if (task_msg->rx != NULL)
+    {
+        bcmolt_msg_free(task_msg->rx);
+    }
+    bcmos_free(task_msg);
+}
+
+static bcmos_timer_rc oam_response_timeout(bcmos_timer *timer, long data)
+{
+    hde_task_msg *task_msg = bcmos_calloc(sizeof(*task_msg));
+
+    BUG_UNLESS(task_msg);
+
+    task_msg->key = hde_data.links[data].hde_link;
+    task_msg->event = HDE_EVENT_OAM_TIMEOUT;
+    task_msg->os_msg.handler = hde_handle_event;
+
+    bcmos_msg_send_to_module(BCMOS_MODULE_ID_USER_APPL_EPON_HDE, &task_msg->os_msg, BCMOS_MSG_SEND_AUTO_FREE);
+    return BCMOS_TIMER_OK;
+}
+
+static bcmos_errno hde_set_encryption(hde_key* key, bcmos_bool enabled)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+
+    hde_task_msg *task_msg = bcmos_calloc(sizeof(*task_msg));
+
+    BUG_UNLESS(task_msg);
+
+    task_msg->key = *key;
+    task_msg->event = enabled ? HDE_EVENT_ENABLE_ENCRYPTION : HDE_EVENT_DISABLE_ENCRYPTION;
+    task_msg->os_msg.handler = hde_handle_event;
+
+    rc = bcmos_msg_send_to_module(BCMOS_MODULE_ID_USER_APPL_EPON_HDE, &task_msg->os_msg, BCMOS_MSG_SEND_AUTO_FREE);
+    BUG_ON(rc != BCM_ERR_OK);
+    return rc;
+}
+
+static bcmos_errno hde_cli_enable(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    hde_key key =
+    {
+        .device_id = current_device,
+        .epon_ni = (bcmolt_epon_ni)(bcmcli_find_named_parm(session, "epon_ni")->value.number),
+        .mac_addr = (bcmos_mac_address)(bcmcli_find_named_parm(session, "mac_address")->value.mac)
+    };
+
+    rc = set_pon_encryption_if_needed(&key);
+    if (rc != BCM_ERR_OK)
+    {
+        return rc;
+    }
+    return hde_set_encryption(&key, BCMOS_TRUE);
+}
+
+static bcmos_errno hde_cli_disable(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    hde_key key =
+    {
+        .device_id = current_device,
+        .epon_ni = (bcmolt_epon_ni)(bcmcli_find_named_parm(session, "epon_ni")->value.number),
+        .mac_addr = (bcmos_mac_address)(bcmcli_find_named_parm(session, "mac_address")->value.mac)
+    };
+
+    return hde_set_encryption(&key, BCMOS_FALSE);
+}
+
+// public indication handler interface -- called in transport layer context
+bcmos_errno bcmolt_epon_hde_process_rx(bcmolt_devid device_id, uint8_t instance, bcmolt_proxy_rx *rx)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    bcmolt_epon_link_frame_captured* actual_rx;
+    hde_task_msg *task_msg;
+    hde_key key;
+
+    if (!is_running)
+    {
+        return BCM_ERR_OK;
+    }
+
+    // We only look at message targetting epon links.
+    if (rx->hdr.obj_type != BCMOLT_OBJ_ID_EPON_LINK)
+    {
+        // Not an error, we just don't care about this object.
+        return BCM_ERR_OK;
+    }
+
+    // This is the only kind of proxy RX currently supported.
+    if (rx->hdr.subgroup != BCMOLT_EPON_LINK_PROXY_RX_ID_FRAME_CAPTURED)
+    {
+        return BCM_ERR_OK;
+    }
+
+    // This is safe due to the above subgroup check.
+    actual_rx = (bcmolt_epon_link_frame_captured*) rx;
+    key.device_id = device_id;
+    key.epon_ni = instance;
+    key.mac_addr = actual_rx->key.mac_address;
+
+    task_msg = bcmos_calloc(sizeof(*task_msg));
+    if (task_msg == NULL)
+    {
+        rc = BCM_ERR_NOMEM;
+    }
+    else
+    {
+        bcmolt_msg *rx_clone = NULL;
+        rc = bcmolt_msg_clone(&rx_clone, &rx->hdr);
+        if (rc != BCM_ERR_OK)
+        {
+            bcmos_free(task_msg);
+            return rc;
+        }
+        actual_rx = (bcmolt_epon_link_frame_captured*) rx_clone;
+
+        task_msg->rx = rx_clone;
+        task_msg->key = key;
+        task_msg->event = HDE_EVENT_FRAME_RX;
+        task_msg->os_msg.handler = hde_handle_event;
+        rc = bcmos_msg_send_to_module(BCMOS_MODULE_ID_USER_APPL_EPON_HDE, &task_msg->os_msg, BCMOS_MSG_SEND_AUTO_FREE);
+        if (rc != BCM_ERR_OK)
+        {
+            BCM_LOG(ERROR, hde_data.log_id[device_id], "Message send failed!\n");
+            bcmolt_msg_free(rx_clone);
+        }
+    }
+
+    return rc;
+}
+
+void bcmolt_epon_hde_appl_cli_init(bcmcli_entry *top_dir)
+{
+    static const char *dir_name = "hde";
+
+    if (bcmcli_dir_find(top_dir, dir_name))
+    {
+        return;
+    }
+
+    bcmcli_entry *dir = bcmcli_dir_add(top_dir, dir_name, "EPON OAM negotiation commands", BCMCLI_ACCESS_ADMIN, NULL);
+    BUG_ON(dir == NULL);
+
+    BCMCLI_MAKE_CMD(
+        dir,
+        "enable",
+        "Enable encryption for an EPON link",
+        hde_cli_enable,
+        BCMCLI_MAKE_PARM("epon_ni", "EPON NI", BCMCLI_PARM_NUMBER, 0),
+        BCMCLI_MAKE_PARM("mac_address", "MAC address", BCMCLI_PARM_MAC, 0));
+
+    BCMCLI_MAKE_CMD(
+        dir,
+        "disable",
+        "Disable encryption for an EPON link",
+        hde_cli_disable,
+        BCMCLI_MAKE_PARM("epon_ni", "EPON NI", BCMCLI_PARM_NUMBER, 0),
+        BCMCLI_MAKE_PARM("mac_address", "MAC address", BCMCLI_PARM_MAC, 0));
+}
+
+void bcmolt_epon_hde_appl_init(void)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+    uint32_t i;
+
+    bcmos_task_parm task_params =
+    {
+        .name = "user_appl_hde",
+        .priority = TASK_PRIORITY_USER_APPL_EPON_HDE,
+        .core = BCMOS_CPU_CORE_ANY, /* No CPU affinity */
+        .init_handler = NULL
+    };
+
+    bcmos_timer_parm timer_parm =
+    {
+        .name = "oam_timeout_timer",
+        .owner = BCMOS_MODULE_ID_NONE,
+        .periodic = BCMOS_FALSE,
+        .handler = oam_response_timeout
+    };
+
+    if (is_running)
+    {
+        return;
+    }
+
+    is_running = BCMOS_TRUE;
+
+    for (i=0; i<BCMTR_MAX_OLTS; i++)
+    {
+        char log_name[MAX_DEV_LOG_ID_NAME];
+        snprintf(log_name, sizeof(log_name)-1, "user_appl_hde_%d", i);
+        hde_data.log_id[i] = bcm_dev_log_id_register(log_name, DEV_LOG_LEVEL_ERROR, DEV_LOG_ID_TYPE_BOTH);
+    }
+
+    hde_data.links = bcmos_calloc(HDE_MAX_NUM_LINKS * sizeof(hde_data.links[0]));
+    BUG_ON(hde_data.links == NULL);
+
+    rc = bcmos_task_create(&hde_data.task, &task_params);
+    BUG_ON(rc != BCM_ERR_OK);
+
+    bcmos_module_parm module_params =
+    {
+        .qparm = { .name = "user_appl_hde", .size = HDE_TASK_MSG_Q_SIZE }
+    };
+    rc = bcmos_module_create(BCMOS_MODULE_ID_USER_APPL_EPON_HDE, &hde_data.task, &module_params);
+    BUG_ON(rc != BCM_ERR_OK);
+
+    for (i = 0; i < HDE_MAX_NUM_LINKS; ++i)
+    {
+        timer_parm.data = i;
+        rc = bcmos_timer_create(&hde_data.links[i].oam_timeout_timer, &timer_parm);
+        BUG_ON(rc != BCM_ERR_OK);
+    }
+}
diff --git a/bcm68620_release/release/host_reference/user_appl/epon_hde/bcmolt_epon_hde.h b/bcm68620_release/release/host_reference/user_appl/epon_hde/bcmolt_epon_hde.h
new file mode 100644
index 0000000..ce7f95b
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/epon_hde/bcmolt_epon_hde.h
@@ -0,0 +1,55 @@
+/*
+ <:copyright-BRCM:2016:DUAL/GPL:standard
+
+ Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+ All Rights Reserved
+
+ Unless you and Broadcom execute a separate written software license
+ agreement governing use of this software, this software is licensed
+ to you under the terms of the GNU General Public License version 2
+ (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ with the following added to such license:
+
+ As a special exception, the copyright holders of this software give
+ you permission to link this software with independent modules, and
+ to copy and distribute the resulting executable under terms of your
+ choice, provided that you also meet, for each linked independent
+ module, the terms and conditions of the license of that module.
+ An independent module is a module which is not derived from this
+ software.  The special exception does not apply to any modifications
+ of the software.
+
+ Not withstanding the above, under no circumstances may you combine
+ this software in any way with any other Broadcom software provided
+ under a license other than the GPL, without Broadcom's express prior
+ written consent.
+
+ :>
+ */
+
+#ifndef BCMOLT_EPON_HDE_H_
+#define BCMOLT_EPON_HDE_H_
+
+#include <bcmos_system.h>
+#include <bcmolt_api.h>
+#include <bcmolt_model_types.h>
+#include <bcmolt_utils.h>
+#include <bcmcli.h>
+
+typedef struct
+{
+    bcmolt_devid device_id;
+    bcmolt_epon_ni epon_ni;
+    bcmos_mac_address mac_addr;
+} hde_key;
+
+// initialize the EPON OAM negotiation application (should be called as part of user application startup)
+void bcmolt_epon_hde_appl_init(void);
+
+// process an indication.
+bcmos_errno bcmolt_epon_hde_process_rx(bcmolt_devid device_id, uint8_t instance, bcmolt_proxy_rx *rx);
+
+// initialize HDE CLI
+void bcmolt_epon_hde_appl_cli_init(bcmcli_entry *top_dir);
+
+#endif /* BCMOLT_EPON_HDE_H_ */
diff --git a/bcm68620_release/release/host_reference/user_appl/epon_hde/encrypt_oam.c b/bcm68620_release/release/host_reference/user_appl/epon_hde/encrypt_oam.c
new file mode 100644
index 0000000..13ef632
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/epon_hde/encrypt_oam.c
@@ -0,0 +1,291 @@
+/*
+ <:copyright-BRCM:2016:DUAL/GPL:standard
+
+ Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+ All Rights Reserved
+
+ Unless you and Broadcom execute a separate written software license
+ agreement governing use of this software, this software is licensed
+ to you under the terms of the GNU General Public License version 2
+ (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ with the following added to such license:
+
+ As a special exception, the copyright holders of this software give
+ you permission to link this software with independent modules, and
+ to copy and distribute the resulting executable under terms of your
+ choice, provided that you also meet, for each linked independent
+ module, the terms and conditions of the license of that module.
+ An independent module is a module which is not derived from this
+ software.  The special exception does not apply to any modifications
+ of the software.
+
+ Not withstanding the above, under no circumstances may you combine
+ this software in any way with any other Broadcom software provided
+ under a license other than the GPL, without Broadcom's express prior
+ written consent.
+
+ :>
+ */
+
+#include "bcmos_system.h"
+#include "bcmolt_model_types.h"
+#include "bcmolt_api.h"
+#include "oam_defs.h"
+#include "bcmolt_math.h"
+#include <encrypt_oam.h>
+
+static const bcmos_mac_address slow_prot_mcast_mac =
+{
+    .u8 = { 0x01, 0x80, 0xC2, 0x00, 0x00, 0x02 }
+};
+
+static uint8_t oam_buffer[OAM_MAX_PACKET_SIZE];
+
+static bcmos_bool oam_var_add_tlv_header(bcmolt_buf *buf, oam_var_branch branch, uint16_t leaf, uint8_t len)
+{
+    bcmos_bool ok = BCMOS_TRUE;
+    uint8_t *snap = bcmolt_buf_snap_get(buf);
+
+    ok = ok && (len <= OAM_MAX_TLV_LENGTH);
+    ok = ok && bcmolt_buf_write_u8(buf, (uint8_t) branch);
+    ok = ok && bcmolt_buf_write_u16_be(buf, leaf);
+    ok = ok && bcmolt_buf_write_u8(buf, oam_var_tlv_length_encode(len));
+    ok = ok && (bcmolt_buf_get_remaining_size(buf) >= len);
+    if (!ok)
+    {
+        bcmolt_buf_snap_restore(buf, snap);
+    }
+    return ok;
+}
+
+static bcmos_bool dpoe_encrypt_tlv_add(bcmolt_buf *oambuf, uint16_t period, dpoe_encrypt_mode mode)
+{
+    bcmos_bool ok = BCMOS_TRUE;
+
+    // encryption mode TLV
+    ok = ok && oam_var_add_tlv_header(oambuf, OAM_VAR_BRANCH_DPOE_ATTRIBUTE, (uint16_t) OAM_DPOE_ATTR_ENCRYPT_MODE, 1);
+    ok = ok && bcmolt_buf_write_u8(oambuf, (uint8_t) mode);
+
+    /* Key Expiry Time TLV */
+    ok = ok && oam_var_add_tlv_header(oambuf, OAM_VAR_BRANCH_DPOE_ATTRIBUTE, (uint16_t) OAM_DPOE_ATTR_KEY_EXPIRY_TIME, 2);
+    ok = ok && bcmolt_buf_write_u16_be(oambuf, period);
+
+    return ok;
+}
+
+static bcmos_bool oam_pdu_build_common(bcmos_mac_address pon_mac, bcmolt_buf *outbuf)
+{
+    bcmos_bool ok = BCMOS_TRUE;
+
+    ok = ok && bcmolt_buf_write_mac_address(outbuf, slow_prot_mcast_mac);        // DA
+    ok = ok && bcmolt_buf_write_mac_address(outbuf, pon_mac);                    // SA
+    ok = ok && bcmolt_buf_write_u16_be(outbuf, ETHERTYPE_SLOWPROTOCOLS);         // Type
+    ok = ok && bcmolt_buf_write_u8(outbuf, (uint8_t) SLOW_PROTOCOL_SUBTYPE_OAM); // Subtype
+
+    return ok;
+}
+
+/* Sends OAM frame 'frame' to a link via the inject frame operation */
+static bcmos_bool oam_pdu_transmit(const hde_key* hde_link, uint8_t *frame, uint16_t len)
+{
+    bcmolt_ethernet_frame_unmasked oam_frame;
+    bcmolt_epon_link_inject_frame  inject_frame;
+
+    oam_frame.frame_octets.len = len;
+    oam_frame.frame_octets.val = frame;
+    bcmolt_epon_link_key link_key =
+    {
+        .epon_ni = hde_link->epon_ni,
+        .mac_address = hde_link->mac_addr
+    };
+
+    BCMOLT_PROXY_INIT(&inject_frame, epon_link, inject_frame, link_key);
+    BCMOLT_PROXY_PROP_SET(&inject_frame, epon_link, inject_frame, frame, oam_frame);
+    if (bcmolt_proxy_send(hde_link->device_id, &inject_frame.hdr) != BCM_ERR_OK)
+    {
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+static bcmos_bool oam_var_get_next(bcmolt_buf *buf, oam_var_generic *oamvar)
+{
+    bcmos_bool ok = BCMOS_TRUE;
+    uint8_t branch = OAM_VAR_BRANCH_TERMINATION;
+
+    memset(oamvar, 0, sizeof(*oamvar));
+    ok = ok && (bcmolt_buf_get_remaining_size(buf) != 0);
+    ok = ok && bcmolt_buf_read_u8(buf, &branch); // Read the branch.
+    if (ok)
+    {
+        switch (branch)
+        {
+        case OAM_VAR_BRANCH_ATTRIBUTE:
+        case OAM_VAR_BRANCH_ACTION:
+        case OAM_VAR_BRANCH_DPOE_ACT:
+        case OAM_VAR_BRANCH_DPOE_ATTRIBUTE:
+        case OAM_VAR_BRANCH_DPOE_OBJECT:
+            oamvar->branch = (oam_var_branch) branch;
+            ok = ok && bcmolt_buf_read_u16_be(buf, &oamvar->leaf); // Read leaf
+            ok = ok && bcmolt_buf_read_u8(buf, &oamvar->width); // Read Width
+            oamvar->value = bcmolt_buf_snap_get(buf); // Keep the position of value
+            oamvar->width = oam_var_tlv_length_encode(oamvar->width); // Re-encode width via OAM spec
+            ok = ok && bcmolt_buf_skip(buf, oamvar->width); // Skip a 'width' amount
+            break;
+
+        case OAM_VAR_BRANCH_TERMINATION:
+        default:
+            ok = BCMOS_FALSE;
+            break;
+        }
+    }
+
+    ok = ok && bcmolt_buf_skip(buf, oamvar->width);
+    return ok;
+}
+
+/* Loops through 'oam_resp' looking for the provided branch/leaf. If found it will return it. */
+static bcmos_bool oam_var_get_branch_leaf(uint8_t *oam_resp, uint32_t oam_resp_len, oam_var_branch branch, uint16_t leaf, oam_var_generic *oam_var)
+{
+    bcmolt_buf buf;
+    oam_var_generic var;
+
+    bcmolt_buf_init(&buf, oam_resp_len, oam_resp, (bcmos_endian) BCMOLT_BUF_ENDIAN_FIXED);
+
+    while (oam_var_get_next(&buf, &var)) // Keep going through all OAM vars.
+    {
+        if ((var.branch == branch) && (var.leaf == leaf)) // Check to see it is the one we are looking for.
+        {
+            *oam_var = var;
+            return BCMOS_TRUE;
+        }
+    }
+    return BCMOS_FALSE;
+}
+
+static bcmos_bool oam_parse_to_dpoe_opcode(bcmolt_buf *buf, oam_dpoe_opcode opcode)
+{
+    bcmos_bool ok = BCMOS_TRUE;
+    uint24_t dpoe_oui = { .low_hi = { .hi = 0x00, .mid = 0x10, .low = 0x00 } };
+    uint16_t u16;
+    uint8_t u8;
+    uint24_t u24;
+    ok = ok && bcmolt_buf_skip(buf, 12); // Skip both mac addresses
+    ok = ok && bcmolt_buf_read_u16_be(buf, &u16); // Read ethertype
+    ok = ok && u16 == ETHERTYPE_SLOWPROTOCOLS; // Make sure it is slow protocol
+    ok = ok && bcmolt_buf_read_u8(buf, &u8); // Read the subtype
+    ok = ok && u8 == SLOW_PROTOCOL_SUBTYPE_OAM; // Make sure it is OAM
+    ok = ok && bcmolt_buf_skip(buf, 2); // Skip flags
+    ok = ok && bcmolt_buf_read_u8(buf, &u8); // Read the code
+    ok = ok && u8 == OAM_PDU_CODE_ORG_EXT; // Make sure it is organization specific
+    ok = ok && bcmolt_buf_read_u24(buf, &u24); // Read the OUI
+    ok = ok && memcmp(&dpoe_oui, &u24, sizeof(uint24_t)) == 0; // Make sure it is the DPoE OUI
+    ok = ok && bcmolt_buf_read_u8(buf, &u8); // Read the opcode
+    ok = ok && opcode == u8; // Make sure it matches the provided opcode
+    return ok;
+}
+
+bcmos_errno dpoe_encrypt_oam_set_request_send(const hde_key *hde_link, uint16_t period, dpoe_encrypt_mode encrypt_mode, bcmos_mac_address pon_mac)
+{
+    // send the encrypt mode and key expiry time TLVs to ONU.
+    bcmolt_buf buf;
+    ieee_oui dpoe_oui = { { 0x00, 0x10, 0x00 } };
+    bcmos_bool ok = BCMOS_TRUE;
+
+    memset(oam_buffer, 0, sizeof(oam_buffer));
+
+    bcmolt_buf_init(&buf, OAM_MAX_PACKET_SIZE, oam_buffer, BCMOLT_BUF_ENDIAN_FIXED);
+    ok = ok && oam_pdu_build_common(pon_mac, &buf);
+    ok = ok && bcmolt_buf_write_u16_be(&buf, (uint16_t) OAM_PDU_FLAG_SEND_ANY); /* write flags */
+    ok = ok && bcmolt_buf_write_u8(&buf, (uint8_t) OAM_PDU_CODE_ORG_EXT); /* write  code */
+    ok = ok && bcmolt_buf_write(&buf, dpoe_oui.byte, 3); /* write oui */
+    ok = ok && bcmolt_buf_write_u8(&buf, OAM_DPOE_OPCODE_SET_REQUEST); /* write opcode */
+    ok = ok && dpoe_encrypt_tlv_add(&buf, period, encrypt_mode); /* write encryption TLVs */
+    ok = ok && bcmolt_buf_write_u16_be(&buf, 0); /* write END */
+    ok = ok && oam_pdu_transmit(hde_link, oam_buffer, MAX(bcmolt_buf_get_used(&buf), 60)); /* Send it */
+
+    if (!ok)
+    {
+        return BCM_ERR_NOMEM;
+    }
+    else
+    {
+        return BCM_ERR_OK;
+    }
+    return ok;
+}
+
+bcmos_errno dpoe_encrypt_oam_parse_set_response(const bcmolt_u8_list_u32 *frame, uint8_t *encrypt_mode_response, uint8_t *key_expiry_response)
+{
+    oam_var_generic encrypt_mode;
+    oam_var_generic key_expiry_time;
+    bcmolt_buf buf;
+    bcmolt_buf_init(&buf, frame->len, frame->val, BCMOLT_BUF_ENDIAN_FIXED);
+
+    // Move the OAM buffer forward to the opcode
+    if (!oam_parse_to_dpoe_opcode(&buf, OAM_DPOE_OPCODE_SET_RESPONSE))
+    {
+        return BCM_ERR_PARSE;
+    }
+
+    // Check for encrypt mode TLV
+    if (!oam_var_get_branch_leaf(
+        bcmolt_buf_snap_get(&buf),
+        bcmolt_buf_get_remaining_size(&buf),
+        OAM_VAR_BRANCH_DPOE_ATTRIBUTE,
+        OAM_DPOE_ATTR_ENCRYPT_MODE,
+        &encrypt_mode))
+    {
+        return BCM_ERR_PARSE;
+    }
+
+    // Check for key expiry time TLV
+    if (!oam_var_get_branch_leaf(
+        bcmolt_buf_snap_get(&buf),
+        bcmolt_buf_get_remaining_size(&buf),
+        OAM_VAR_BRANCH_DPOE_ATTRIBUTE,
+        OAM_DPOE_ATTR_KEY_EXPIRY_TIME,
+        &key_expiry_time))
+    {
+        return BCM_ERR_PARSE;
+    }
+
+    *encrypt_mode_response = encrypt_mode.width;
+    *key_expiry_response = key_expiry_time.width;
+    return BCM_ERR_OK;
+}
+
+bcmos_errno dpoe_encrypt_oam_parse_new_key(const bcmolt_u8_list_u32 *frame, uint8_t *new_key, bcmolt_epon_key_choice *key_choice)
+{
+    bcmos_bool ok = BCMOS_TRUE;
+    uint8_t key_number;
+    uint8_t key_length;
+    bcmolt_buf buf;
+    bcmolt_buf_init(&buf, frame->len, frame->val, BCMOLT_BUF_ENDIAN_FIXED);
+    ok = oam_parse_to_dpoe_opcode(&buf, OAM_DPOE_OPCODE_KEY_EXCHANGE);
+    ok = ok && bcmolt_buf_read_u8(&buf, &key_number); // Read key number
+    ok = ok && bcmolt_buf_read_u8(&buf, &key_length); // Read key length
+    ok = ok && key_length == 16; // Make sure the key is 16 byte length
+    ok = ok && bcmolt_buf_read(&buf, new_key, 16); // Read the key
+
+    if (!ok)
+    {
+        return BCM_ERR_PARSE;
+    }
+
+    if (key_number == 0)
+    {
+        *key_choice = BCMOLT_EPON_KEY_CHOICE_KEY_0;
+    }
+    else if (key_number == 1)
+    {
+        *key_choice = BCMOLT_EPON_KEY_CHOICE_KEY_1;
+    }
+    else
+    {
+        return BCM_ERR_PARSE;
+    }
+
+    return BCM_ERR_OK;
+}
diff --git a/bcm68620_release/release/host_reference/user_appl/epon_hde/encrypt_oam.h b/bcm68620_release/release/host_reference/user_appl/epon_hde/encrypt_oam.h
new file mode 100644
index 0000000..18cd2eb
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/epon_hde/encrypt_oam.h
@@ -0,0 +1,59 @@
+/*

+ <:copyright-BRCM:2016:DUAL/GPL:standard

+

+ Broadcom Proprietary and Confidential.(c) 2016 Broadcom

+ All Rights Reserved

+

+ Unless you and Broadcom execute a separate written software license

+ agreement governing use of this software, this software is licensed

+ to you under the terms of the GNU General Public License version 2

+ (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,

+ with the following added to such license:

+

+ As a special exception, the copyright holders of this software give

+ you permission to link this software with independent modules, and

+ to copy and distribute the resulting executable under terms of your

+ choice, provided that you also meet, for each linked independent

+ module, the terms and conditions of the license of that module.

+ An independent module is a module which is not derived from this

+ software.  The special exception does not apply to any modifications

+ of the software.

+

+ Not withstanding the above, under no circumstances may you combine

+ this software in any way with any other Broadcom software provided

+ under a license other than the GPL, without Broadcom's express prior

+ written consent.

+

+ :>

+ */

+

+#ifndef ENCRYPT_OAM_H_

+#define ENCRYPT_OAM_H_

+

+#include "oam_defs.h"

+#include "bcmolt_epon_hde.h"

+

+/* Send a Encryption Request OAM to ONU. */

+bcmos_errno dpoe_encrypt_oam_set_request_send(

+    const hde_key *hde_link,

+    uint16_t period,

+    dpoe_encrypt_mode encrypt_mode,

+    bcmos_mac_address pon_mac);

+

+/* Attempt to parse a DPoE set response and fill in the values of the two TLVs we initially sent down.

+ * This will return BCM_ERR_PARSE if it fails to fill in either of the TLVs.

+ */

+bcmos_errno dpoe_encrypt_oam_parse_set_response(

+    const bcmolt_u8_list_u32 *frame,

+    uint8_t *encrypt_mode_response,

+    uint8_t *key_expiry_response);

+

+/* Attempts to parse an OAM frame and fill in the values of new_key and key_choice from that frame.

+ * This will return BCM_ERR_PARSE if it fails to fill in either new_key or key_choice.

+ */

+bcmos_errno dpoe_encrypt_oam_parse_new_key(

+    const bcmolt_u8_list_u32 *frame,

+    uint8_t *new_key,

+    bcmolt_epon_key_choice *key_choice);

+

+#endif /* ENCRYPT_OAM_H_ */

diff --git a/bcm68620_release/release/host_reference/user_appl/epon_hde/oam_defs.h b/bcm68620_release/release/host_reference/user_appl/epon_hde/oam_defs.h
new file mode 100644
index 0000000..276d5eb
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/epon_hde/oam_defs.h
@@ -0,0 +1,153 @@
+/*

+ <:copyright-BRCM:2016:DUAL/GPL:standard

+

+ Broadcom Proprietary and Confidential.(c) 2016 Broadcom

+ All Rights Reserved

+

+ Unless you and Broadcom execute a separate written software license

+ agreement governing use of this software, this software is licensed

+ to you under the terms of the GNU General Public License version 2

+ (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,

+ with the following added to such license:

+

+ As a special exception, the copyright holders of this software give

+ you permission to link this software with independent modules, and

+ to copy and distribute the resulting executable under terms of your

+ choice, provided that you also meet, for each linked independent

+ module, the terms and conditions of the license of that module.

+ An independent module is a module which is not derived from this

+ software.  The special exception does not apply to any modifications

+ of the software.

+

+ Not withstanding the above, under no circumstances may you combine

+ this software in any way with any other Broadcom software provided

+ under a license other than the GPL, without Broadcom's express prior

+ written consent.

+

+ :>

+ */

+

+#ifndef OAM_DEFS_H_

+#define OAM_DEFS_H_

+

+#include "bcmolt_model_types.h"

+

+#define ETHERTYPE_SLOWPROTOCOLS 0x8809

+#define OAM_TIMEOUT_GRACE_PERIOD_US 100000

+#define HDE_ENABLE_OAM_WAIT_US 3e6 // 3 seconds
#define OAM_MAX_PACKET_SIZE 1518

+#define OAM_MAX_TLV_LENGTH 128

+

+/* Common OAMPDU Structure */

+typedef enum

+{

+    SLOW_PROTOCOL_SUBTYPE_LACP     = 0x01, /* Link Agregation Control Protocol */

+    SLOW_PROTOCOL_SUBTYPE_LAMP     = 0x02, /* Link Agregation Marker Protocol */

+    SLOW_PROTOCOL_SUBTYPE_OAM      = 0x03, /* OAM */

+    SLOW_PROTOCOL_SUBTYPE_ORG_SPEC = 0x0A  /* Organization Specific Subtype */

+} slow_protocol_subtype;

+

+/* Standard OAM Flags field.  IEEE802.3-2008_section5, ch.57.4.2.1 */

+typedef enum

+{

+    OAM_PDU_FLAG_LINK_FAULT     = (1 << 0), /* 0x0001 */

+    OAM_PDU_FLAG_DYING_GASP     = (1 << 1), /* 0x0002 */

+    OAM_PDU_FLAG_CRITICAL_EVENT = (1 << 2), /* 0x0004 */

+    OAM_PDU_FLAG_LOCAL_EVAL     = (1 << 3), /* 0x0008 */

+    OAM_PDU_FLAG_LOCAL_STABLE   = (1 << 4), /* 0x0010 */

+    OAM_PDU_FLAG_REMOTE_EVAL    = (1 << 5), /* 0x0020 */

+    OAM_PDU_FLAG_REMOTE_STABLE  = (1 << 6), /* 0x0040 */

+    OAM_PDU_FLAG_SEND_ANY       = (OAM_PDU_FLAG_LOCAL_STABLE | OAM_PDU_FLAG_REMOTE_STABLE)

+} oam_pdu_flag;

+

+/* Standard OAM Code field.  IEEE802.3-2008_section5, ch.57.4.2.2 */

+typedef enum

+{

+    OAM_PDU_CODE_INFO              = 0x0,

+    OAM_PDU_CODE_EVENTNOTIFICATION = 0x01,

+    OAM_PDU_CODE_VARREQUEST        = 0x02,

+    OAM_PDU_CODE_VARRESPONSE       = 0x03,

+    OAM_PDU_CODE_LOOPBACK          = 0x04,

+    OAM_PDU_CODE_ORG_EXT           = 0xfe

+} oam_pdu_code;

+

+/* IEEE Organization Unique Identifier */

+typedef struct

+{

+    uint8_t byte[3];

+} ieee_oui;

+

+/* Branch types */

+typedef enum

+{

+    OAM_VAR_BRANCH_TERMINATION    = 0x00,

+    OAM_VAR_BRANCH_ATTRIBUTE      = 0x07,

+    OAM_VAR_BRANCH_ACTION         = 0x09,

+    OAM_VAR_BRANCH_DPOE_OBJECT    = 0xD6,

+    OAM_VAR_BRANCH_DPOE_ATTRIBUTE = 0xD7,

+    OAM_VAR_BRANCH_DPOE_PROG_CTR  = 0xD8,

+    OAM_VAR_BRANCH_DPOE_ACT       = 0xD9

+} oam_var_branch;

+

+typedef enum

+{

+    OAM_DPOE_OPCODE_RESERVED       = 0,

+    OAM_DPOE_OPCODE_GET_REQUEST    = 1,

+    OAM_DPOE_OPCODE_GET_RESPONSE   = 2,

+    OAM_DPOE_OPCODE_SET_REQUEST    = 3,

+    OAM_DPOE_OPCODE_SET_RESPONSE   = 4,

+    OAM_DPOE_OPCODE_IPMC_CTRL      = 5,

+    OAM_DPOE_OPCODE_MCAST_REG      = 6,

+    OAM_DPOE_OPCODE_MCAST_REG_RESP = 7,

+    OAM_DPOE_OPCODE_KEY_EXCHANGE   = 8,

+    OAM_DPOE_OPCODE_FILE_TRANSFER  = 9,

+    OAM_DPOE_OPCODE_IPMC_CTRL_RESP = 0x0a /* DPoE 2.0 */

+} oam_dpoe_opcode;

+

+typedef enum

+{

+    OAM_DPOE_ATTR_KEY_EXPIRY_TIME = 0x0401,

+    OAM_DPOE_ATTR_ENCRYPT_MODE = 0x0402

+} oam_dpoe_attr;

+

+/* DPoE Key Exchange OAM TLV encryption mode */

+typedef enum

+{

+    DPOE_ENCRYPT_MODE_NONE,

+    DPOE_ENCRYPT_MODE_1DOWN,

+    DPOE_ENCRYPT_MODE_10DOWN,

+    DPOE_ENCRYPT_MODE_10BI

+} dpoe_encrypt_mode;

+

+/* generic OAM Variable format */

+typedef struct

+{

+    oam_var_branch branch;

+    uint16_t leaf;

+    uint8_t width;

+    uint8_t *value;

+} oam_var_generic;

+

+/** In the OAM protocol length 0 tlv is encoded as 0x80 (no error).

+ *  Length (1-127) are encoded with no change and 128 is encoded as 0.

+ *

+ * \param   width   TLV width field value

+ * \return  encoded value for the width field

+ * \ref     IEEE802.3-2008_section5, Ch. 57.6.2.1

+ */

+static inline uint8_t oam_var_tlv_length_encode(uint8_t width)

+{

+    if (width == 0)

+    {

+        return OAM_MAX_TLV_LENGTH; /* 0x00 equals 128 octets. */

+    }

+    else if (width == OAM_MAX_TLV_LENGTH)

+    {

+        return 0; /* 0x80 represents 'no error'. No 'Value' field. */

+    }

+    else

+    {

+        return width; /* represents the length of 'Value'. */

+    }

+}

+

+#endif /* OAM_DEFS_H_ */

diff --git a/bcm68620_release/release/host_reference/user_appl/epon_oam/Makefile b/bcm68620_release/release/host_reference/user_appl/epon_oam/Makefile
new file mode 100644
index 0000000..ff56b8f
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/epon_oam/Makefile
@@ -0,0 +1,10 @@
+ifeq ("$(ENABLE_CLI)", "y")
+    MOD_NAME = bcm_user_appl_epon_oam
+    MOD_TYPE = lib
+	MOD_DEPS = utils dev_log common_epon_oam common_api
+    srcs = bcmolt_user_appl_epon_oam.c
+    ifeq ("$(OS_KERNEL)", "linux")
+	MOD_DEPS += dev_log_linux
+    endif
+endif
+
diff --git a/bcm68620_release/release/host_reference/user_appl/epon_oam/bcmolt_user_appl_epon_oam.c b/bcm68620_release/release/host_reference/user_appl/epon_oam/bcmolt_user_appl_epon_oam.c
new file mode 100644
index 0000000..558594c
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/epon_oam/bcmolt_user_appl_epon_oam.c
@@ -0,0 +1,1436 @@
+/*
+  <:copyright-BRCM:2016:DUAL/GPL:standard
+
+  Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+  All Rights Reserved
+
+  Unless you and Broadcom execute a separate written software license
+  agreement governing use of this software, this software is licensed
+  to you under the terms of the GNU General Public License version 2
+  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+  with the following added to such license:
+
+  As a special exception, the copyright holders of this software give
+  you permission to link this software with independent modules, and
+  to copy and distribute the resulting executable under terms of your
+  choice, provided that you also meet, for each linked independent
+  module, the terms and conditions of the license of that module.
+  An independent module is a module which is not derived from this
+  software.  The special exception does not apply to any modifications
+  of the software.
+
+  Not withstanding the above, under no circumstances may you combine
+  this software in any way with any other Broadcom software provided
+  under a license other than the GPL, without Broadcom's express prior
+  written consent.
+
+  :>
+*/
+
+#include "bcmos_system.h"
+#include "bcmolt_math.h"
+#include "bcmolt_utils.h"
+#include "bcm_dev_log.h"
+#include "bcmolt_msg.h"
+#include "bcmolt_msg_pack.h"
+#include "bcmolt_api.h"
+#include "bcmolt_model_types.h"
+#include "bcmolt_user_appl_epon_oam.h"
+#include "bcmos_hash_table.h"
+
+#define MAX_CONCURRENT_LINKS    2048
+
+typedef struct
+{
+    bcmolt_devid device_id;
+    bcmolt_epon_link_key key;
+    FILE *file;
+    void *buf;
+    uint16_t block_size;
+    uint16_t last_block;
+    uint16_t last_block_size;
+    uint8_t retries;
+    bcmos_bool done;
+    bcmos_timer timer;
+    uint32_t timeout_us;
+    uint32_t last_time;
+} epon_oam_dpoe_fw_upgrade_state;
+
+typedef struct
+{
+    bcmolt_devid device_id;
+    bcmolt_proxy_rx *rx;
+    bcmolt_user_appl_epon_oam_handle_rx_cb cb;
+} epon_oam_proxy_rx_data;
+
+typedef struct
+{
+    epon_oam_dpoe_fw_upgrade_state *state;
+} epon_oam_timeout_data;
+
+typedef union
+{
+    epon_oam_proxy_rx_data proxy_rx;
+    epon_oam_timeout_data timeout;
+} epon_oam_msg_data;
+
+typedef struct
+{
+    bcmos_msg os_msg;
+    epon_oam_msg_data data;
+} epon_oam_msg;
+
+static bcmos_bool is_running = BCMOS_FALSE;
+static dev_log_id epon_oam_log[BCMTR_MAX_OLTS];
+static char mac_buf[MAC_STR_LEN];
+static bcmos_task epon_oam_task;
+static hash_table *dpoe_fw_upgrade_state;
+
+static void epon_oam_handle_os_msg(bcmos_module_id module_id, bcmos_msg *os_msg);
+
+#define EPON_OAM_LOG(level, device, link, fmt, args...)     \
+    BCM_LOG_CALLER_FMT(level, epon_oam_log[device], "%u-%s: "fmt, (link)->epon_ni, bcmos_mac_2_str(&(link)->mac_address, mac_buf), ##args)
+
+static bcmos_errno epon_oam_get_mac_da(bcmolt_devid device_id, bcmolt_epon_ni epon, bcmos_mac_address *mac)
+{
+    bcmos_errno err;
+    bcmolt_epon_ni_cfg pon_cfg;
+    bcmolt_epon_ni_key pon_key = { .epon_ni = epon };
+
+    /* retrieve the EPON NI MAC address */
+    BCMOLT_CFG_INIT(&pon_cfg, epon_ni, pon_key);
+    BCMOLT_CFG_PROP_GET(&pon_cfg, epon_ni, mac_address);
+    err = bcmolt_cfg_get(device_id, &pon_cfg.hdr);
+    if (BCM_ERR_OK != err)
+    {
+        BCM_LOG(ERROR, epon_oam_log[device_id], "Failed to retrieve EPON NI MAC address!\n");
+    }
+    else
+    {
+        *mac = pon_cfg.data.mac_address;
+    }
+    return err;
+}
+
+bcmos_errno epon_oam_pack_frame(bcmolt_epon_oam_ethernet_frame *oam_frame, uint8_t **buffer, uint16_t *length)
+{
+    bcmolt_buf buf;
+
+    *length = MAX(bcmolt_epon_oam_ethernet_frame_get_packed_length(oam_frame), 60);
+    *buffer = bcmos_calloc(*length);
+    if (NULL == *buffer)
+    {
+        return BCM_ERR_NOMEM;
+    }
+    bcmolt_buf_init(&buf, *length, *buffer, BCMOLT_BUF_ENDIAN_FIXED);
+    if (!bcmolt_epon_oam_ethernet_frame_pack(oam_frame, &buf))
+    {
+        bcmos_free(*buffer);
+        return BCM_ERR_INTERNAL;
+    }
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno epon_oam_pack_and_send(bcmolt_devid device_id,
+                                   bcmolt_epon_ni epon,
+                                   const bcmos_mac_address *mac,
+                                   bcmolt_epon_oam_ethernet_frame *oam_frame)
+{
+    bcmos_errno err;
+    bcmolt_epon_link_inject_frame inject_frame;
+    bcmolt_epon_link_key link_key = { .epon_ni = epon, .mac_address = *mac };
+    bcmolt_ethernet_frame_unmasked frame;
+
+    err = epon_oam_pack_frame(oam_frame, &frame.frame_octets.val, &frame.frame_octets.len);
+    if (BCM_ERR_OK != err)
+    {
+        EPON_OAM_LOG(ERROR, device_id, &link_key, "Failed to pack OAM frame: %s!\n", bcmos_strerror(err));
+        return err;
+    }
+
+    BCMOLT_PROXY_INIT(&inject_frame, epon_link, inject_frame, link_key);
+    BCMOLT_PROXY_PROP_SET(&inject_frame, epon_link, inject_frame, frame, frame);
+    err = bcmolt_proxy_send(device_id, &inject_frame.hdr);
+
+    bcmos_free(frame.frame_octets.val);
+
+    return err;
+}
+
+bcmolt_epon_oam_ethernet_frame *epon_oam_unpack(bcmolt_devid device_id, uint32_t len, uint8_t *bytes)
+{
+    bcmolt_buf buf;
+    uint32_t unpack_bytes = sizeof(bcmolt_epon_oam_ethernet_frame);
+    void *unpack_mem;
+    bcmolt_epon_oam_ethernet_frame *frame;
+    void *extra_mem;
+
+    /* We don't know how much space we'll need to unpack the OAM frame. Starting with the known fixed size, we scan the
+       frame to determine the exact space needed */
+    bcmolt_buf_init(&buf, len, bytes, BCMOLT_BUF_ENDIAN_FIXED);
+    if (!bcmolt_epon_oam_ethernet_frame_scan(&buf, &unpack_bytes))
+    {
+        BCM_LOG(ERROR, epon_oam_log[device_id], "Failed to scan OAM frame\n");
+        return NULL;
+    }
+    unpack_mem = bcmos_calloc(unpack_bytes);
+    if (NULL == unpack_mem)
+    {
+        BCM_LOG(ERROR, epon_oam_log[device_id], "Failed to allocate %u bytes required to unpack\n", unpack_bytes);
+        return NULL;
+    }
+    else
+    {
+        BCM_LOG(DEBUG, epon_oam_log[device_id], "Successfully allocated %u bytes required to unpack\n", unpack_bytes);
+    }
+    /* Now that we have an appropriately sized buffer to unpack into, point the fixed structure to the start of the
+       buffer and direct the unpacker to store any additional data immediately after that */
+    frame = (bcmolt_epon_oam_ethernet_frame*)unpack_mem;
+    extra_mem = (void*)(frame + 1);
+
+    bcmolt_buf_init(&buf, len, bytes, BCMOLT_BUF_ENDIAN_FIXED);
+    if (!bcmolt_epon_oam_ethernet_frame_unpack(frame, &buf, &extra_mem))
+    {
+        BCM_LOG(ERROR, epon_oam_log[device_id], "Failed to unpack OAM frame\n");
+        bcmos_free(unpack_mem);
+        return NULL;
+    }
+
+    return frame;
+}
+
+static bcmos_errno epon_oam_make_dpoe_frame(bcmolt_devid device_id,
+                                            bcmolt_epon_ni epon,
+                                            bcmolt_epon_oam_ethernet_frame *oam_frame,
+                                            bcmolt_epon_oam_ethernet_protocol *protocol)
+{
+    bcmos_errno err;
+
+    oam_frame->da = slow_protocol_multicast_mac;
+    err = epon_oam_get_mac_da(device_id, epon, &oam_frame->sa);
+    BCMOS_CHECK_RETURN_ERROR(BCM_ERR_OK != err, err);
+    oam_frame->protocols_count = 1;
+    oam_frame->protocols = protocol;
+    protocol->ethertype = BCMOLT_EPON_OAM_PROTOCOL_TYPE_SLOW_PROTOCOL;
+    protocol->u.slow_protocol.value.subtype = BCMOLT_EPON_OAM_SLOW_PROTOCOL_SUBTYPE_OAM;
+    protocol->u.slow_protocol.value.u.oam.flags =
+        BCMOLT_EPON_OAM_OAM_FLAGS_LOCAL_STABLE | BCMOLT_EPON_OAM_OAM_FLAGS_REMOTE_STABLE;
+    protocol->u.slow_protocol.value.u.oam.content.code = BCMOLT_EPON_OAM_OAM_OPCODE_ORGANIZATION_SPECIFIC;
+    protocol->u.slow_protocol.value.u.oam.content.u.organization_specific.value.oui =
+        BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DPOE;
+
+    return err;
+}
+
+static bcmos_errno epon_oam_send_os_msg(bcmos_msg_id type, epon_oam_msg_data *msg_data)
+{
+    bcmos_errno rc;
+    epon_oam_msg *msg = bcmos_calloc(sizeof(*msg));
+
+    if (msg == NULL)
+    {
+        BCM_LOG(ERROR, epon_oam_log[msg_data->proxy_rx.device_id], "OS msg calloc failed\n");
+        return BCM_ERR_NOMEM;
+    }
+
+    msg->os_msg.type = type;
+    msg->os_msg.handler = epon_oam_handle_os_msg;
+    msg->data = *msg_data;
+    rc = bcmos_msg_send_to_module(BCMOS_MODULE_ID_USER_APPL_EPON_OAM, &msg->os_msg, 0);
+    if (BCM_ERR_OK != rc)
+    {
+        BCM_LOG(ERROR, epon_oam_log[msg_data->proxy_rx.device_id], "OS msg send failed\n");
+    }
+    return rc;
+}
+
+bcmos_errno epon_oam_dpoe_get_critical_info(bcmolt_devid device_id,
+                                            bcmolt_epon_ni epon,
+                                            bcmos_mac_address *mac)
+{
+    bcmos_errno err = BCM_ERR_OK;
+
+    /* OAM stuff */
+    bcmolt_epon_oam_ethernet_frame oam_frame;
+    bcmolt_epon_oam_ethernet_protocol protocol;
+    bcmolt_epon_oam_dpoe_var_descriptor vars[3] = {};
+
+    err = epon_oam_make_dpoe_frame(device_id, epon, &oam_frame, &protocol);
+    BCMOS_CHECK_RETURN_ERROR(BCM_ERR_OK != err, err);
+    protocol.u.slow_protocol.value.u.oam.content.u.organization_specific.value.u.dpoe.value.op =
+        BCMOLT_EPON_OAM_DPOE_OPCODE_GET_REQUEST;
+    protocol.u.slow_protocol.value.u.oam.content.u.organization_specific.value.u.dpoe.value.u.get_request.vars_count =
+        3;
+    protocol.u.slow_protocol.value.u.oam.content.u.organization_specific.value.u.dpoe.value.u.get_request.vars = vars;
+    vars[0].branch = BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ATTRIBUTE;
+    vars[0].u.extended_attribute.leaf = BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ONU_ID;
+    vars[1].branch = BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ATTRIBUTE;
+    vars[1].u.extended_attribute.leaf = BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_MAX_LOGICAL_LINKS;
+    vars[2].branch = BCMOLT_EPON_OAM_DPOE_BRANCH_END;
+    vars[2].u.end.unknown_count = 0;
+    vars[2].u.end.unknown = NULL;
+
+    return epon_oam_pack_and_send(device_id, epon, mac, &oam_frame);
+}
+
+bcmos_errno epon_oam_dpoe_set_oam_rate(bcmolt_devid device_id,
+                                       bcmolt_epon_ni epon,
+                                       bcmos_mac_address *mac,
+                                       uint8_t min,
+                                       uint8_t max)
+{
+    bcmos_errno err = BCM_ERR_OK;
+
+    /* OAM stuff */
+    bcmolt_epon_oam_ethernet_frame oam_frame;
+    bcmolt_epon_oam_ethernet_protocol protocol;
+    bcmolt_epon_oam_dpoe_var_container_base vars[2] = {};
+
+    err = epon_oam_make_dpoe_frame(device_id, epon, &oam_frame, &protocol);
+    BCMOS_CHECK_RETURN_ERROR(BCM_ERR_OK != err, err);
+    protocol.u.slow_protocol.value.u.oam.content.u.organization_specific.value.u.dpoe.value.op =
+        BCMOLT_EPON_OAM_DPOE_OPCODE_SET_REQUEST;
+    protocol.u.slow_protocol.value.u.oam.content.u.organization_specific.value.u.dpoe.value.u.set_request.vars_count =
+        2;
+    protocol.u.slow_protocol.value.u.oam.content.u.organization_specific.value.u.dpoe.value.u.set_request.vars = vars;
+    vars[0].branch = BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ATTRIBUTE;
+    vars[0].u.extended_attribute.attribute.leaf = BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_OAM_RATE;
+    vars[0].u.extended_attribute.attribute.u.oam_rate.minimum_oam_rate = min;
+    vars[0].u.extended_attribute.attribute.u.oam_rate.maximum_oam_rate = max;
+    vars[1].branch = BCMOLT_EPON_OAM_DPOE_BRANCH_END;
+    vars[1].u.end.unknown_count = 0;
+    vars[1].u.end.unknown = NULL;
+
+    return epon_oam_pack_and_send(device_id, epon, mac, &oam_frame);
+}
+
+bcmos_errno epon_oam_dpoe_set_report_thresholds(bcmolt_devid device_id,
+                                                bcmolt_epon_ni epon,
+                                                bcmos_mac_address *mac,
+                                                uint8_t report_values_per_queue_set,
+                                                bcmolt_epon_oam_queue_sets queue_sets,
+                                                uint8_t num_queue_sets)
+{
+    bcmos_errno err = BCM_ERR_OK;
+
+    /* OAM stuff */
+    bcmolt_epon_oam_ethernet_frame oam_frame;
+    bcmolt_epon_oam_ethernet_protocol protocol;
+    bcmolt_epon_oam_dpoe_var_container_base vars[2] = {};
+
+    err = epon_oam_make_dpoe_frame(device_id, epon, &oam_frame, &protocol);
+    BCMOS_CHECK_RETURN_ERROR(BCM_ERR_OK != err, err);
+    protocol.u.slow_protocol.value.u.oam.content.u.organization_specific.value.u.dpoe.value.op =
+        BCMOLT_EPON_OAM_DPOE_OPCODE_SET_REQUEST;
+    protocol.u.slow_protocol.value.u.oam.content.u.organization_specific.value.u.dpoe.value.u.set_request.vars_count =
+        2;
+    protocol.u.slow_protocol.value.u.oam.content.u.organization_specific.value.u.dpoe.value.u.set_request.vars = vars;
+    vars[0].branch = BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ATTRIBUTE;
+    vars[0].u.extended_attribute.attribute.leaf = BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_REPORT_THRESHOLDS;
+    vars[0].u.extended_attribute.attribute.u.report_thresholds.number_of_queue_sets = num_queue_sets;
+    vars[0].u.extended_attribute.attribute.u.report_thresholds.report_values_per_queue_set =
+        report_values_per_queue_set;
+    vars[0].u.extended_attribute.attribute.u.report_thresholds.queue_set0 = queue_sets[0];
+    vars[0].u.extended_attribute.attribute.u.report_thresholds.queue_set1 = queue_sets[1];
+    vars[0].u.extended_attribute.attribute.u.report_thresholds.queue_set2 = queue_sets[2];
+    vars[0].u.extended_attribute.attribute.u.report_thresholds.queue_set3 = queue_sets[3];
+    vars[1].branch = BCMOLT_EPON_OAM_DPOE_BRANCH_END;
+    vars[1].u.end.unknown_count = 0;
+    vars[1].u.end.unknown = NULL;
+
+    return epon_oam_pack_and_send(device_id, epon, mac, &oam_frame);
+}
+
+bcmos_errno epon_oam_dpoe_set_encryption(
+    bcmolt_devid device_id,
+    bcmolt_epon_ni epon,
+    bcmos_mac_address *mac,
+    bcmolt_epon_oam_dpoe_encryption_mode enc_mode,
+    uint16_t period)
+{
+    bcmos_errno err = BCM_ERR_OK;
+
+    /* OAM stuff */
+    bcmolt_epon_oam_ethernet_frame oam_frame;
+    bcmolt_epon_oam_ethernet_protocol protocol;
+    bcmolt_epon_oam_dpoe_var_container_base vars[3] = {};
+
+    err = epon_oam_make_dpoe_frame(device_id, epon, &oam_frame, &protocol);
+    BCMOS_CHECK_RETURN_ERROR(BCM_ERR_OK != err, err);
+    protocol.u.slow_protocol.value.u.oam.content.u.organization_specific.value.u.dpoe.value.op =
+        BCMOLT_EPON_OAM_DPOE_OPCODE_SET_REQUEST;
+    protocol.u.slow_protocol.value.u.oam.content.u.organization_specific.value.u.dpoe.value.u.set_request.vars_count =
+        3;
+    protocol.u.slow_protocol.value.u.oam.content.u.organization_specific.value.u.dpoe.value.u.set_request.vars = vars;
+    vars[0].branch = BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ATTRIBUTE;
+    vars[0].u.extended_attribute.attribute.leaf = BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ENCRYPT_MODE;
+    vars[0].u.extended_attribute.attribute.u.encrypt_mode.encryption_method = enc_mode;
+    vars[1].branch = BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ATTRIBUTE;
+    vars[1].u.extended_attribute.attribute.leaf = BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_KEY_EXPIRY_TIME;
+    vars[1].u.extended_attribute.attribute.u.key_expiry_time.time = period;
+    vars[2].branch = BCMOLT_EPON_OAM_DPOE_BRANCH_END;
+    vars[2].u.end.unknown_count = 0;
+    vars[2].u.end.unknown = NULL;
+
+    return epon_oam_pack_and_send(device_id, epon, mac, &oam_frame);
+}
+
+bcmos_bool epon_oam_is_dpoe(bcmolt_epon_oam_ethernet_frame *oam)
+{
+    return ((oam->protocols_count > 0) &&
+        (BCMOLT_EPON_OAM_PROTOCOL_TYPE_SLOW_PROTOCOL == oam->protocols[0].ethertype) &&
+        (BCMOLT_EPON_OAM_SLOW_PROTOCOL_SUBTYPE_OAM == oam->protocols[0].u.slow_protocol.value.subtype) &&
+        (BCMOLT_EPON_OAM_OAM_OPCODE_ORGANIZATION_SPECIFIC ==
+         oam->protocols[0].u.slow_protocol.value.u.oam.content.code) &&
+        (BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DPOE ==
+         oam->protocols[0].u.slow_protocol.value.u.oam.content.u.organization_specific.value.oui));
+}
+
+bcmos_bool epon_oam_is_dpoe_encrypt_response(bcmolt_epon_oam_dpoe_vendor_extended_base *dpoe)
+{
+    return (BCMOLT_EPON_OAM_DPOE_OPCODE_SET_RESPONSE == dpoe->op) &&
+        (dpoe->u.set_response.vars_count > 2) &&
+        (BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ATTRIBUTE == dpoe->u.set_response.vars[0].branch) &&
+        (BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ENCRYPT_MODE ==
+         dpoe->u.set_response.vars[0].u.extended_attribute.attribute.leaf) &&
+        (BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ATTRIBUTE == dpoe->u.set_response.vars[1].branch) &&
+        (BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_KEY_EXPIRY_TIME ==
+         dpoe->u.set_response.vars[1].u.extended_attribute.attribute.leaf);
+}
+
+static bcmos_errno epon_oam_dpoe_clear_ingress_rules_make_frame(bcmolt_devid device_id,
+                                                                bcmolt_epon_ni epon,
+                                                                bcmos_mac_address *mac,
+                                                                bcmolt_epon_oam_ethernet_frame *oam_frame,
+                                                                bcmolt_epon_oam_ethernet_protocol *protocol,
+                                                                bcmolt_epon_oam_dpoe_var_container_base *vars)
+{
+    bcmos_errno err = BCM_ERR_OK;
+
+    /* OAM stuff */
+    err = epon_oam_make_dpoe_frame(device_id, epon, oam_frame, protocol);
+    BCMOS_CHECK_RETURN_ERROR(BCM_ERR_OK != err, err);
+    protocol->u.slow_protocol.value.u.oam.content.u.organization_specific.value.u.dpoe.value.op =
+        BCMOLT_EPON_OAM_DPOE_OPCODE_SET_REQUEST;
+    protocol->u.slow_protocol.value.u.oam.content.u.organization_specific.value.u.dpoe.value.u.set_request.vars_count =
+        3;
+    protocol->u.slow_protocol.value.u.oam.content.u.organization_specific.value.u.dpoe.value.u.set_request.vars = vars;
+    vars[0].branch = BCMOLT_EPON_OAM_DPOE_BRANCH_OBJECT;
+    vars[1].branch = BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ACTION;
+    vars[1].u.extended_action.action.leaf = BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_CLEAR_INGRESS_RULES;
+    vars[2].branch = BCMOLT_EPON_OAM_DPOE_BRANCH_END;
+    vars[2].u.end.unknown_count = 0;
+    vars[2].u.end.unknown = NULL;
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno epon_oam_dpoe_clear_ingress_rules_network_pon(bcmolt_devid device_id,
+                                                          bcmolt_epon_ni epon,
+                                                          bcmos_mac_address *mac)
+{
+    bcmos_errno err = BCM_ERR_OK;
+
+    /* OAM stuff */
+    bcmolt_epon_oam_ethernet_frame oam_frame;
+    bcmolt_epon_oam_ethernet_protocol protocol;
+    bcmolt_epon_oam_dpoe_var_container_base vars[3] = {};
+    uint8_t port = 0;
+
+    epon_oam_dpoe_clear_ingress_rules_make_frame(device_id, epon, mac, &oam_frame, &protocol, vars);
+    BCMOS_CHECK_RETURN_ERROR(BCM_ERR_OK != err, err);
+
+    vars[0].u.object.object_context.object_type = BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_NETWORK_PON;
+    vars[0].u.object.object_context.u.network_pon.pon_count = 1;
+    vars[0].u.object.object_context.u.network_pon.pon = &port;
+
+    return epon_oam_pack_and_send(device_id, epon, mac, &oam_frame);
+}
+
+bcmos_errno epon_oam_dpoe_clear_ingress_rules_user_port(bcmolt_devid device_id,
+                                                        bcmolt_epon_ni epon,
+                                                        bcmos_mac_address *mac)
+{
+    bcmos_errno err = BCM_ERR_OK;
+
+    /* OAM stuff */
+    bcmolt_epon_oam_ethernet_frame oam_frame;
+    bcmolt_epon_oam_ethernet_protocol protocol;
+    bcmolt_epon_oam_dpoe_var_container_base vars[3] = {};
+    uint8_t port = 0;
+
+    epon_oam_dpoe_clear_ingress_rules_make_frame(device_id, epon, mac, &oam_frame, &protocol, vars);
+    BCMOS_CHECK_RETURN_ERROR(BCM_ERR_OK != err, err);
+
+    vars[0].u.object.object_context.object_type = BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_USER_PORT;
+    vars[0].u.object.object_context.u.user_port.port_count = 1;
+    vars[0].u.object.object_context.u.user_port.port = &port;
+
+    return epon_oam_pack_and_send(device_id, epon, mac, &oam_frame);
+}
+
+bcmos_errno epon_oam_dpoe_clear_ingress_rules(bcmolt_devid device_id,
+                                              bcmolt_epon_ni epon,
+                                              bcmos_mac_address *mac)
+{
+    bcmos_errno err = BCM_ERR_OK;
+
+    err = epon_oam_dpoe_clear_ingress_rules_network_pon(device_id, epon, mac);
+    BCMOS_CHECK_RETURN_ERROR(BCM_ERR_OK != err, err);
+
+    return epon_oam_dpoe_clear_ingress_rules_user_port(device_id, epon, mac);
+}
+
+bcmos_errno epon_oam_dpoe_set_basic_queue_config(bcmolt_devid device_id,
+                                                 bcmolt_epon_ni epon,
+                                                 bcmos_mac_address *mac,
+                                                 uint8_t up_queue_size,
+                                                 uint8_t dn_queue_size)
+{
+    bcmos_errno err = BCM_ERR_OK;
+
+    /* OAM stuff */
+    bcmolt_epon_oam_ethernet_frame oam_frame;
+    bcmolt_epon_oam_ethernet_protocol protocol;
+    bcmolt_epon_oam_dpoe_var_container_base vars[2] = {};
+    bcmolt_epon_oam_dpoe_queue_set up_queue_set;
+    bcmolt_epon_oam_dpoe_queue_set dn_queue_set;
+
+    err = epon_oam_make_dpoe_frame(device_id, epon, &oam_frame, &protocol);
+    BCMOS_CHECK_RETURN_ERROR(BCM_ERR_OK != err, err);
+    protocol.u.slow_protocol.value.u.oam.content.u.organization_specific.value.u.dpoe.value.op =
+        BCMOLT_EPON_OAM_DPOE_OPCODE_SET_REQUEST;
+    protocol.u.slow_protocol.value.u.oam.content.u.organization_specific.value.u.dpoe.value.u.set_request.vars_count =
+        2;
+    protocol.u.slow_protocol.value.u.oam.content.u.organization_specific.value.u.dpoe.value.u.set_request.vars = vars;
+    vars[0].branch = BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ATTRIBUTE;
+    vars[0].u.extended_attribute.attribute.leaf = BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_QUEUE_CONFIG;
+    vars[0].u.extended_attribute.attribute.u.queue_config.number_of_links = 1;
+    vars[0].u.extended_attribute.attribute.u.queue_config.link_configuration = &up_queue_set;
+    up_queue_set.queue_count = 1;
+    up_queue_set.queue_sizes = &up_queue_size;
+    vars[0].u.extended_attribute.attribute.u.queue_config.number_of_ports = 1;
+    vars[0].u.extended_attribute.attribute.u.queue_config.port_configuration = &dn_queue_set;
+    dn_queue_set.queue_count = 1;
+    dn_queue_set.queue_sizes = &dn_queue_size;
+    vars[1].branch = BCMOLT_EPON_OAM_DPOE_BRANCH_END;
+    vars[1].u.end.unknown_count = 0;
+    vars[1].u.end.unknown = NULL;
+
+    return epon_oam_pack_and_send(device_id, epon, mac, &oam_frame);
+}
+
+static bcmos_errno epon_oam_dpoe_add_ingress_rules_make_frame(bcmolt_devid device_id,
+                                                              bcmolt_epon_ni epon,
+                                                              bcmos_mac_address *mac,
+                                                              bcmolt_epon_oam_ethernet_frame *oam_frame,
+                                                              bcmolt_epon_oam_ethernet_protocol *protocol,
+                                                              bcmolt_epon_oam_dpoe_var_container_base *vars,
+                                                              dpoe_rule_vlan_mode vlan_mode,
+                                                              uint8_t vlan_tag[4])
+{
+    static const uint32_t var_count[DPOE_RULE_VLAN_MODE_COUNT] =
+    {
+        [DPOE_RULE_VLAN_MODE_NONE] = 8,
+        [DPOE_RULE_VLAN_MODE_ADD] = 10,
+        [DPOE_RULE_VLAN_MODE_REMOVE] = 9
+    };
+    bcmos_errno err = BCM_ERR_OK;
+
+    /* OAM stuff */
+    err = epon_oam_make_dpoe_frame(device_id, epon, oam_frame, protocol);
+    BCMOS_CHECK_RETURN_ERROR(BCM_ERR_OK != err, err);
+    protocol->u.slow_protocol.value.u.oam.content.u.organization_specific.value.u.dpoe.value.op =
+        BCMOLT_EPON_OAM_DPOE_OPCODE_SET_REQUEST;
+    protocol->u.slow_protocol.value.u.oam.content.u.organization_specific.value.u.dpoe.value.u.set_request.vars_count =
+        var_count[vlan_mode];
+    protocol->u.slow_protocol.value.u.oam.content.u.organization_specific.value.u.dpoe.value.u.set_request.vars = vars;
+    vars[0].branch = BCMOLT_EPON_OAM_DPOE_BRANCH_OBJECT;
+    vars[1].branch = BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ATTRIBUTE;
+    vars[1].u.extended_attribute.attribute.leaf = BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_PORT_INGRESS_RULE;
+    vars[1].u.extended_attribute.attribute.u.port_ingress_rule.rule.subtype = BCMOLT_EPON_OAM_RULE_TYPE_HEADER;
+    vars[1].u.extended_attribute.attribute.u.port_ingress_rule.rule.u.header.precedence = 10;
+    vars[2].branch = BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ATTRIBUTE;
+    vars[2].u.extended_attribute.attribute.leaf = BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_PORT_INGRESS_RULE;
+    vars[2].u.extended_attribute.attribute.u.port_ingress_rule.rule.subtype = BCMOLT_EPON_OAM_RULE_TYPE_CLAUSE;
+    vars[2].u.extended_attribute.attribute.u.port_ingress_rule.rule.u.clause.field_code.code =
+        BCMOLT_EPON_OAM_DPOE_FIELD_CODE_L2DA;
+    vars[2].u.extended_attribute.attribute.u.port_ingress_rule.rule.u.clause.field_code.instance = 0;
+    vars[2].u.extended_attribute.attribute.u.port_ingress_rule.rule.u.clause.msb_mask = 0;
+    vars[2].u.extended_attribute.attribute.u.port_ingress_rule.rule.u.clause.lsb_mask = 0;
+    vars[2].u.extended_attribute.attribute.u.port_ingress_rule.rule.u.clause.operator =
+        BCMOLT_EPON_OAM_RULE_OPERATOR_ALWAYS_MATCH;
+    vars[2].u.extended_attribute.attribute.u.port_ingress_rule.rule.u.clause.match_value_length = 0;
+    vars[2].u.extended_attribute.attribute.u.port_ingress_rule.rule.u.clause.match_value = NULL;
+    vars[3].branch = BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ATTRIBUTE;
+    vars[3].u.extended_attribute.attribute.leaf = BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_PORT_INGRESS_RULE;
+    vars[3].u.extended_attribute.attribute.u.port_ingress_rule.rule.subtype = BCMOLT_EPON_OAM_RULE_TYPE_RESULT;
+    vars[3].u.extended_attribute.attribute.u.port_ingress_rule.rule.u.result.result.result =
+        BCMOLT_EPON_OAM_DPOE_RESULT_QUEUE;
+    vars[4].branch = BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ATTRIBUTE;
+    vars[4].u.extended_attribute.attribute.leaf = BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_PORT_INGRESS_RULE;
+    vars[4].u.extended_attribute.attribute.u.port_ingress_rule.rule.subtype = BCMOLT_EPON_OAM_RULE_TYPE_RESULT;
+    vars[4].u.extended_attribute.attribute.u.port_ingress_rule.rule.u.result.result.result =
+        BCMOLT_EPON_OAM_DPOE_RESULT_FORWARD;
+
+    switch (vlan_mode)
+    {
+        case DPOE_RULE_VLAN_MODE_NONE:
+            break; /* nothing to do */
+        case DPOE_RULE_VLAN_MODE_ADD:
+            vars[5].branch = BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ATTRIBUTE;
+            vars[5].u.extended_attribute.attribute.leaf = BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_PORT_INGRESS_RULE;
+            vars[5].u.extended_attribute.attribute.u.port_ingress_rule.rule.subtype = BCMOLT_EPON_OAM_RULE_TYPE_RESULT;
+            vars[5].u.extended_attribute.attribute.u.port_ingress_rule.rule.u.result.result.result =
+                BCMOLT_EPON_OAM_DPOE_RESULT_INSERT;
+            vars[5].u.extended_attribute.attribute.u.port_ingress_rule.rule.u.result.result.u.insert.field.field.code =
+                BCMOLT_EPON_OAM_DPOE_FIELD_CODE_CVLAN;
+            vars[5].u.extended_attribute.attribute.u.port_ingress_rule.rule.u.result.result.u.insert.field.field.instance = 0;
+            vars[6].branch = BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ATTRIBUTE;
+            vars[6].u.extended_attribute.attribute.leaf = BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_PORT_INGRESS_RULE;
+            vars[6].u.extended_attribute.attribute.u.port_ingress_rule.rule.subtype = BCMOLT_EPON_OAM_RULE_TYPE_RESULT;
+            vars[6].u.extended_attribute.attribute.u.port_ingress_rule.rule.u.result.result.result =
+                BCMOLT_EPON_OAM_DPOE_RESULT_SET;
+            vars[6].u.extended_attribute.attribute.u.port_ingress_rule.rule.u.result.result.u.set.field.field.code =
+                BCMOLT_EPON_OAM_DPOE_FIELD_CODE_CVLAN;
+            vars[6].u.extended_attribute.attribute.u.port_ingress_rule.rule.u.result.result.u.set.field.field.instance = 0;
+            vars[6].u.extended_attribute.attribute.u.port_ingress_rule.rule.u.result.result.u.set.value_count = 4;
+            vars[6].u.extended_attribute.attribute.u.port_ingress_rule.rule.u.result.result.u.set.value = vlan_tag;
+            break;
+        case DPOE_RULE_VLAN_MODE_REMOVE:
+            vars[5].branch = BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ATTRIBUTE;
+            vars[5].u.extended_attribute.attribute.leaf = BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_PORT_INGRESS_RULE;
+            vars[5].u.extended_attribute.attribute.u.port_ingress_rule.rule.subtype = BCMOLT_EPON_OAM_RULE_TYPE_RESULT;
+            vars[5].u.extended_attribute.attribute.u.port_ingress_rule.rule.u.result.result.result =
+                BCMOLT_EPON_OAM_DPOE_RESULT_DELETE;
+            vars[5].u.extended_attribute.attribute.u.port_ingress_rule.rule.u.result.result.u.delete.field.field.code =
+                BCMOLT_EPON_OAM_DPOE_FIELD_CODE_CVLAN;
+            vars[5].u.extended_attribute.attribute.u.port_ingress_rule.rule.u.result.result.u.delete.field.field.instance = 0;
+            break;
+        default:
+            return BCM_ERR_PARM;
+    }
+
+    vars[var_count[vlan_mode]-3].branch = BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ATTRIBUTE;
+    vars[var_count[vlan_mode]-3].u.extended_attribute.attribute.leaf = BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_PORT_INGRESS_RULE;
+    vars[var_count[vlan_mode]-3].u.extended_attribute.attribute.u.port_ingress_rule.rule.subtype = BCMOLT_EPON_OAM_RULE_TYPE_TERMINATOR;
+    vars[var_count[vlan_mode]-2].branch = BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ACTION;
+    vars[var_count[vlan_mode]-2].u.extended_action.action.leaf = BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_ADD_INGRESS_RULES;
+    vars[var_count[vlan_mode]-1].branch = BCMOLT_EPON_OAM_DPOE_BRANCH_END;
+    vars[var_count[vlan_mode]-1].u.end.unknown_count = 0;
+    vars[var_count[vlan_mode]-1].u.end.unknown = NULL;
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno epon_oam_dpoe_add_ingress_rules_network_pon(bcmolt_devid device_id,
+                                                        bcmolt_epon_ni epon,
+                                                        bcmos_mac_address *mac,
+                                                        dpoe_rule_vlan_mode vlan_mode,
+                                                        uint8_t vlan_tag[4])
+{
+    bcmos_errno err = BCM_ERR_OK;
+
+    /* OAM stuff */
+    bcmolt_epon_oam_ethernet_frame oam_frame;
+    bcmolt_epon_oam_ethernet_protocol protocol;
+    bcmolt_epon_oam_dpoe_var_container_base vars[10] = {};
+    uint8_t port = 0;
+
+    err = epon_oam_dpoe_add_ingress_rules_make_frame(device_id,
+                                                     epon,
+                                                     mac,
+                                                     &oam_frame,
+                                                     &protocol,
+                                                     vars,
+                                                     vlan_mode,
+                                                     vlan_tag);
+    BCMOS_CHECK_RETURN_ERROR(BCM_ERR_OK != err, err);
+
+    vars[0].u.object.object_context.object_type = BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_NETWORK_PON;
+    vars[0].u.object.object_context.u.network_pon.pon_count = 1;
+    vars[0].u.object.object_context.u.network_pon.pon = &port;
+    vars[3].u.extended_attribute.attribute.u.port_ingress_rule.rule.u.result.result.u.queue.queue.type =
+        BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_USER_PORT;
+    vars[3].u.extended_attribute.attribute.u.port_ingress_rule.rule.u.result.result.u.queue.queue.instance = 0;
+    vars[3].u.extended_attribute.attribute.u.port_ingress_rule.rule.u.result.result.u.queue.queue.queue = 0;
+
+    return epon_oam_pack_and_send(device_id, epon, mac, &oam_frame);
+}
+
+bcmos_errno epon_oam_dpoe_add_ingress_rules_user_port(bcmolt_devid device_id,
+                                                      bcmolt_epon_ni epon,
+                                                      bcmos_mac_address *mac,
+                                                      dpoe_rule_vlan_mode vlan_mode,
+                                                      uint8_t vlan_tag[4])
+{
+    bcmos_errno err = BCM_ERR_OK;
+
+    /* OAM stuff */
+    bcmolt_epon_oam_ethernet_frame oam_frame;
+    bcmolt_epon_oam_ethernet_protocol protocol;
+    bcmolt_epon_oam_dpoe_var_container_base vars[10] = {};
+    uint8_t port = 0;
+
+    err = epon_oam_dpoe_add_ingress_rules_make_frame(device_id,
+                                                     epon,
+                                                     mac,
+                                                     &oam_frame,
+                                                     &protocol,
+                                                     vars,
+                                                     vlan_mode,
+                                                     vlan_tag);
+    BCMOS_CHECK_RETURN_ERROR(BCM_ERR_OK != err, err);
+
+    vars[0].u.object.object_context.object_type = BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_USER_PORT;
+    vars[0].u.object.object_context.u.user_port.port_count = 1;
+    vars[0].u.object.object_context.u.user_port.port = &port;
+    vars[3].u.extended_attribute.attribute.u.port_ingress_rule.rule.u.result.result.u.queue.queue.type =
+        BCMOLT_EPON_OAM_DPOE_OBJECT_TYPE_LINK;
+    vars[3].u.extended_attribute.attribute.u.port_ingress_rule.rule.u.result.result.u.queue.queue.instance = 0;
+    vars[3].u.extended_attribute.attribute.u.port_ingress_rule.rule.u.result.result.u.queue.queue.queue = 0;
+    return epon_oam_pack_and_send(device_id, epon, mac, &oam_frame);
+}
+
+bcmos_errno epon_oam_dpoe_add_ingress_rules(bcmolt_devid device_id,
+                                            bcmolt_epon_ni epon,
+                                            bcmos_mac_address *mac)
+{
+    bcmos_errno err = BCM_ERR_OK;
+
+    err = epon_oam_dpoe_add_ingress_rules_network_pon(device_id, epon, mac, DPOE_RULE_VLAN_MODE_NONE, NULL);
+    BCMOS_CHECK_RETURN_ERROR(BCM_ERR_OK != err, err);
+
+    return epon_oam_dpoe_add_ingress_rules_user_port(device_id, epon, mac, DPOE_RULE_VLAN_MODE_NONE, NULL);
+}
+
+bcmos_errno epon_oam_dpoe_add_ingress_rules_with_vlan(bcmolt_devid device_id,
+                                                      bcmolt_epon_ni epon,
+                                                      bcmos_mac_address *mac,
+                                                      uint8_t vlan_tag[4])
+{
+    static uint8_t example_vlan[4] = { 0x81, 0x00, 0x12, 0x34 };
+    bcmos_errno err = BCM_ERR_OK;
+
+    err = epon_oam_dpoe_add_ingress_rules_network_pon(device_id, epon, mac, DPOE_RULE_VLAN_MODE_REMOVE, NULL);
+    BCMOS_CHECK_RETURN_ERROR(BCM_ERR_OK != err, err);
+
+    if (NULL == vlan_tag)
+    {
+        vlan_tag = example_vlan;
+    }
+    return epon_oam_dpoe_add_ingress_rules_user_port(device_id, epon, mac, DPOE_RULE_VLAN_MODE_ADD, vlan_tag);
+}
+
+static bcmos_errno _epon_oam_dpoe_user_traffic_set_action(bcmolt_devid device_id,
+                                                          bcmolt_epon_ni epon,
+                                                          bcmos_mac_address *mac,
+                                                          bcmolt_epon_oam_dpoe_leaf_action action)
+{
+    bcmos_errno err = BCM_ERR_OK;
+
+    /* OAM stuff */
+    bcmolt_epon_oam_ethernet_frame oam_frame;
+    bcmolt_epon_oam_ethernet_protocol protocol;
+    bcmolt_epon_oam_dpoe_var_container_base vars[2] = {};
+
+    err = epon_oam_make_dpoe_frame(device_id, epon, &oam_frame, &protocol);
+    BCMOS_CHECK_RETURN_ERROR(BCM_ERR_OK != err, err);
+    protocol.u.slow_protocol.value.u.oam.content.u.organization_specific.value.u.dpoe.value.op =
+        BCMOLT_EPON_OAM_DPOE_OPCODE_SET_REQUEST;
+    protocol.u.slow_protocol.value.u.oam.content.u.organization_specific.value.u.dpoe.value.u.set_request.vars_count =
+        2;
+    protocol.u.slow_protocol.value.u.oam.content.u.organization_specific.value.u.dpoe.value.u.set_request.vars = vars;
+    vars[0].branch = BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ACTION;
+    vars[0].u.extended_action.action.leaf = action;
+    vars[1].branch = BCMOLT_EPON_OAM_DPOE_BRANCH_END;
+    vars[1].u.end.unknown_count = 0;
+    vars[1].u.end.unknown = NULL;
+
+    return epon_oam_pack_and_send(device_id, epon, mac, &oam_frame);
+}
+
+bcmos_errno epon_oam_dpoe_disable_user_traffic(bcmolt_devid device_id,
+                                               bcmolt_epon_ni epon,
+                                               bcmos_mac_address *mac)
+{
+    return _epon_oam_dpoe_user_traffic_set_action(device_id,
+                                                  epon,
+                                                  mac,
+                                                  BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_DISABLE_USER_TRAFFIC);
+}
+
+bcmos_errno epon_oam_dpoe_enable_user_traffic(bcmolt_devid device_id,
+                                              bcmolt_epon_ni epon,
+                                              bcmos_mac_address *mac)
+{
+    return _epon_oam_dpoe_user_traffic_set_action(device_id,
+                                                  epon,
+                                                  mac,
+                                                  BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_ENABLE_USER_TRAFFIC);
+}
+
+static epon_oam_dpoe_fw_upgrade_state *epon_oam_dpoe_fw_upgrade_state_add(const bcmolt_epon_link_key *key)
+{
+    epon_oam_dpoe_fw_upgrade_state state = {};
+    return hash_table_put(dpoe_fw_upgrade_state, (const uint8_t*)key, &state);
+}
+
+static epon_oam_dpoe_fw_upgrade_state* epon_oam_dpoe_fw_upgrade_state_get(const bcmolt_epon_link_key *key)
+{
+    return hash_table_get(dpoe_fw_upgrade_state, (const uint8_t*)key);
+}
+
+static void epon_oam_dpoe_fw_upgrade_state_release(epon_oam_dpoe_fw_upgrade_state *state)
+{
+    if (NULL == state)
+    {
+        BCM_LOG(ERROR, epon_oam_log[0], "Tried to release NULL state\n");
+        return;
+    }
+
+    if (NULL != state->file)
+    {
+        fclose(state->file);
+    }
+    bcmos_free(state->buf);
+    bcmos_timer_destroy(&state->timer);
+    if (!hash_table_remove(dpoe_fw_upgrade_state, (const uint8_t*)&state->key))
+    {
+        BCM_LOG(ERROR, epon_oam_log[state->device_id], "Unable to remove from hash table\n");
+    }
+}
+
+static void epon_oam_dpoe_send_block(bcmolt_devid device_id,
+                                     const bcmolt_epon_link_key *key,
+                                     uint16_t block,
+                                     uint8_t *data,
+                                     uint16_t length)
+{
+    bcmos_errno err;
+    /* OAM stuff */
+    bcmolt_epon_oam_ethernet_frame oam_frame;
+    bcmolt_epon_oam_ethernet_protocol protocol;
+
+    err = epon_oam_make_dpoe_frame(device_id, key->epon_ni, &oam_frame, &protocol);
+    BCMOS_RETURN_ON_ERROR(err);
+    protocol.u.slow_protocol.value.u.oam.content.u.organization_specific.value.u.dpoe.value.op =
+        BCMOLT_EPON_OAM_DPOE_OPCODE_FILE_TRANSFER;
+    protocol.u.slow_protocol.value.u.oam.content.u.organization_specific.value.u.dpoe.value.u.file_transfer.file_transfer.opcode = BCMOLT_EPON_OAM_DPOE_FILE_TRANSFER_OPCODE_FILE_DATA;
+    protocol.u.slow_protocol.value.u.oam.content.u.organization_specific.value.u.dpoe.value.u.file_transfer.file_transfer.u.file_data.block = block;
+    protocol.u.slow_protocol.value.u.oam.content.u.organization_specific.value.u.dpoe.value.u.file_transfer.file_transfer.u.file_data.length = length;
+    protocol.u.slow_protocol.value.u.oam.content.u.organization_specific.value.u.dpoe.value.u.file_transfer.file_transfer.u.file_data.data = data;
+
+    if (BCM_ERR_OK != epon_oam_pack_and_send(device_id, key->epon_ni, &key->mac_address, &oam_frame))
+    {
+        EPON_OAM_LOG(ERROR, device_id, key, "Failed to send fw upgrade block %u\n", block);
+    }
+    else
+    {
+        EPON_OAM_LOG(DEBUG, device_id, key, "Sent block %u\n", block);
+    }
+}
+
+static void epon_oam_dpoe_send_ack(bcmolt_devid device_id,
+                                   const bcmolt_epon_link_key *key,
+                                   bcmolt_epon_oam_dpoe_file_transfer_error error)
+{
+    bcmos_errno err;
+    /* OAM stuff */
+    bcmolt_epon_oam_ethernet_frame oam_frame;
+    bcmolt_epon_oam_ethernet_protocol protocol;
+
+    err = epon_oam_make_dpoe_frame(device_id, key->epon_ni, &oam_frame, &protocol);
+    BCMOS_RETURN_ON_ERROR(err);
+    protocol.u.slow_protocol.value.u.oam.content.u.organization_specific.value.u.dpoe.value.op =
+        BCMOLT_EPON_OAM_DPOE_OPCODE_FILE_TRANSFER;
+    protocol.u.slow_protocol.value.u.oam.content.u.organization_specific.value.u.dpoe.value.u.file_transfer.file_transfer.opcode = BCMOLT_EPON_OAM_DPOE_FILE_TRANSFER_OPCODE_FILE_ACK;
+    protocol.u.slow_protocol.value.u.oam.content.u.organization_specific.value.u.dpoe.value.u.file_transfer.file_transfer.u.file_ack.block = 0;
+    protocol.u.slow_protocol.value.u.oam.content.u.organization_specific.value.u.dpoe.value.u.file_transfer.file_transfer.u.file_ack.error = error;
+
+    if (BCM_ERR_OK != epon_oam_pack_and_send(device_id, key->epon_ni, &key->mac_address, &oam_frame))
+    {
+        EPON_OAM_LOG(ERROR, device_id, key, "Failed to send fw upgrade ack\n");
+    }
+    else
+    {
+        EPON_OAM_LOG(DEBUG, device_id, key, "Sent ack: error %u\n", error);
+    }
+}
+
+static void epon_oam_dpoe_reset_timeout(epon_oam_dpoe_fw_upgrade_state *state)
+{
+    EPON_OAM_LOG(DEBUG, state->device_id, &state->key, "ONU took %u us to respond\n", bcmos_timestamp() - state->last_time);
+    state->last_time = bcmos_timestamp();
+    bcmos_timer_start(&state->timer, state->timeout_us);
+}
+
+static void epon_oam_dpoe_handle_ack(bcmolt_devid device_id,
+                                     const bcmolt_epon_link_key *key,
+                                     const bcmolt_epon_oam_dpoe_file_transfer_base *ft,
+                                     bcmolt_user_appl_epon_oam_handle_rx_cb cb)
+{
+    epon_oam_dpoe_fw_upgrade_state *state;
+    int block_size;
+
+    state = epon_oam_dpoe_fw_upgrade_state_get(key);
+
+    if (NULL == state)
+    {
+        EPON_OAM_LOG(DEBUG, device_id, key, "Rx unexpected ack\n");
+        return;
+    }
+
+    if (state->done)
+    {
+        if (ft->u.file_ack.block != 0)
+        {
+            EPON_OAM_LOG(ERROR, device_id, key, "Final ack contained non-zero block: %u\n", ft->u.file_ack.block);
+        }
+        switch (ft->u.file_ack.error)
+        {
+            case BCMOLT_EPON_OAM_DPOE_FILE_TRANSFER_ERROR_OK:
+                EPON_OAM_LOG(INFO, device_id, key, "Upgrade successful\n");
+                break;
+            default:
+                EPON_OAM_LOG(ERROR, device_id, key, "Upgrade failed with error %u\n", ft->u.file_ack.error);
+                break;
+        }
+        epon_oam_dpoe_fw_upgrade_state_release(state);
+        return;
+    }
+
+    state->last_block++;
+    if ((state->last_block - 1) == ft->u.file_ack.block)
+    { /* retry last block */
+        state->last_block--;
+        state->retries++;
+        if (state->retries > 3)
+        {
+            EPON_OAM_LOG(ERROR, device_id, key, "Exceeded retry limit on block %u\n", ft->u.file_ack.block);
+            epon_oam_dpoe_send_ack(device_id, key, BCMOLT_EPON_OAM_DPOE_FILE_TRANSFER_ERROR_TIMEOUT);
+            epon_oam_dpoe_fw_upgrade_state_release(state);
+        }
+        else
+        {
+            epon_oam_dpoe_send_block(device_id, key, ft->u.file_ack.block, state->buf, state->last_block_size);
+            epon_oam_dpoe_reset_timeout(state);
+        }
+    }
+    else if (state->last_block == ft->u.file_ack.block)
+    { /* send next block */
+        state->retries = 0;
+        block_size = fread(state->buf, 1, state->block_size, state->file);
+        if (block_size > 0)
+        {
+            epon_oam_dpoe_send_block(device_id, key, ft->u.file_ack.block, state->buf, block_size);
+        }
+        else
+        {
+            state->done = BCMOS_TRUE;
+            epon_oam_dpoe_send_ack(device_id, key, BCMOLT_EPON_OAM_DPOE_FILE_TRANSFER_ERROR_OK);
+        }
+        state->last_block_size = block_size;
+        epon_oam_dpoe_reset_timeout(state);
+    }
+    else
+    { /* unexpected block */
+        EPON_OAM_LOG(ERROR, device_id, key, "Unexpected block requested: %u (expecting %u)\n",
+                     ft->u.file_ack.block, state->last_block + 1);
+        epon_oam_dpoe_send_ack(device_id, key, BCMOLT_EPON_OAM_DPOE_FILE_TRANSFER_ERROR_BAD_BLOCK);
+        epon_oam_dpoe_fw_upgrade_state_release(state);
+    }
+}
+
+static bcmos_timer_rc epon_oam_dpoe_fw_upgrade_timeout(bcmos_timer *timer, long data)
+{
+    epon_oam_msg_data msg_data;
+
+    msg_data.timeout.state = (epon_oam_dpoe_fw_upgrade_state*)data;
+    epon_oam_send_os_msg(BCMOS_MSG_ID_EPON_OAM_TIMEOUT, &msg_data);
+
+    return BCMOS_TIMER_OK;
+}
+
+bcmos_errno epon_oam_dpoe_start_upgrade(bcmolt_devid device_id,
+                                        bcmolt_epon_ni epon,
+                                        bcmos_mac_address *mac,
+                                        const char *fw_file,
+                                        uint16_t block_size,
+                                        uint8_t timeout_sec)
+{
+    bcmos_errno err = BCM_ERR_OK;
+    bcmolt_epon_link_key link_key = { .epon_ni = epon, .mac_address = *mac };
+    bcmos_timer_parm tp =
+    {
+        .name = "fw_upgrade_timer",
+        .owner = BCMOS_MODULE_ID_USER_APPL_EPON_OAM,
+        .periodic = BCMOS_FALSE,
+        .handler = epon_oam_dpoe_fw_upgrade_timeout
+    };
+    /* OAM stuff */
+    bcmolt_epon_oam_ethernet_frame oam_frame;
+    bcmolt_epon_oam_ethernet_protocol protocol;
+    epon_oam_dpoe_fw_upgrade_state *state;
+
+    if (NULL != epon_oam_dpoe_fw_upgrade_state_get(&link_key))
+    {
+        return BCM_ERR_ALREADY;
+    }
+    state = epon_oam_dpoe_fw_upgrade_state_add(&link_key);
+    if (NULL == state)
+    {
+        return BCM_ERR_NOMEM;
+    }
+
+    state->device_id = device_id;
+    state->key = link_key;
+    state->file = fopen(fw_file, "rb");
+    if (NULL == state->file)
+    {
+        epon_oam_dpoe_fw_upgrade_state_release(state);
+        return BCM_ERR_IO;
+    }
+    state->block_size = block_size;
+    state->buf = bcmos_calloc(block_size);
+    if (NULL == state->buf)
+    {
+        epon_oam_dpoe_fw_upgrade_state_release(state);
+        return BCM_ERR_NOMEM;
+    }
+    state->last_block = 0xffff;/*-1*/
+    state->retries = 0;
+    state->done = BCMOS_FALSE;
+    tp.data = (long)state;
+    err = bcmos_timer_create(&state->timer, &tp);
+    if (BCM_ERR_OK != err)
+    {
+        epon_oam_dpoe_fw_upgrade_state_release(state);
+        return err;
+    }
+    state->timeout_us = timeout_sec * 1000 * 1000;
+    state->last_time = bcmos_timestamp();
+    bcmos_timer_start(&state->timer, state->timeout_us);
+
+    err = epon_oam_make_dpoe_frame(device_id, epon, &oam_frame, &protocol);
+    if (BCM_ERR_OK != err)
+    {
+        epon_oam_dpoe_fw_upgrade_state_release(state);
+        return err;
+    }
+    protocol.u.slow_protocol.value.u.oam.content.u.organization_specific.value.u.dpoe.value.op =
+        BCMOLT_EPON_OAM_DPOE_OPCODE_FILE_TRANSFER;
+    protocol.u.slow_protocol.value.u.oam.content.u.organization_specific.value.u.dpoe.value.u.file_transfer.file_transfer.opcode = BCMOLT_EPON_OAM_DPOE_FILE_TRANSFER_OPCODE_FILE_WRITE;
+    protocol.u.slow_protocol.value.u.oam.content.u.organization_specific.value.u.dpoe.value.u.file_transfer.file_transfer.u.file_write.filename_count = 0;
+    protocol.u.slow_protocol.value.u.oam.content.u.organization_specific.value.u.dpoe.value.u.file_transfer.file_transfer.u.file_write.filename = NULL;
+
+    err = epon_oam_pack_and_send(device_id, epon, mac, &oam_frame);
+    if (BCM_ERR_OK != err)
+    {
+        epon_oam_dpoe_fw_upgrade_state_release(state);
+    }
+    return err;
+}
+
+bcmos_errno epon_oam_dpoe_reset_onu(bcmolt_devid device_id, bcmolt_epon_ni epon, bcmos_mac_address *mac)
+{
+    bcmos_errno err = BCM_ERR_OK;
+
+    /* OAM stuff */
+    bcmolt_epon_oam_ethernet_frame oam_frame;
+    bcmolt_epon_oam_ethernet_protocol protocol;
+    bcmolt_epon_oam_dpoe_var_container_base vars[2] = {};
+
+    err = epon_oam_make_dpoe_frame(device_id, epon, &oam_frame, &protocol);
+    BCMOS_CHECK_RETURN_ERROR(BCM_ERR_OK != err, err);
+    protocol.u.slow_protocol.value.u.oam.content.u.organization_specific.value.u.dpoe.value.op =
+        BCMOLT_EPON_OAM_DPOE_OPCODE_SET_REQUEST;
+    protocol.u.slow_protocol.value.u.oam.content.u.organization_specific.value.u.dpoe.value.u.set_request.vars_count =
+        2;
+    protocol.u.slow_protocol.value.u.oam.content.u.organization_specific.value.u.dpoe.value.u.set_request.vars = vars;
+    vars[0].branch = BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ACTION;
+    vars[0].u.extended_action.action.leaf = BCMOLT_EPON_OAM_DPOE_LEAF_ACTION_RESET_ONU;
+    vars[1].branch = BCMOLT_EPON_OAM_DPOE_BRANCH_END;
+    vars[1].u.end.unknown_count = 0;
+    vars[1].u.end.unknown = NULL;
+
+    return epon_oam_pack_and_send(device_id, epon, mac, &oam_frame);
+}
+
+static void epon_oam_handle_event(bcmolt_devid device_id,
+                                  bcmolt_epon_oam_oam_pdu_content *content,
+                                  const bcmolt_epon_link_key *key,
+                                  bcmolt_user_appl_epon_oam_handle_rx_cb cb)
+{
+    for (uint32_t i = 0; i < content->u.event_notification.tlvs_count; i++)
+    {
+        if (BCMOLT_EPON_OAM_LINK_EVENT_TYPE_ORGANIZATION_SPECIFIC == content->u.event_notification.tlvs[i].type)
+        {
+            switch (content->u.event_notification.tlvs[i].u.organization_specific.value.oui)
+            {
+                case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DPOE:
+                    if (NULL != cb)
+                    {
+                        cb(device_id, key->epon_ni, &key->mac_address, BCMOLT_USER_APPL_EPON_OAM_RX_ID_DPOE_EVENT, BCM_ERR_OK);
+                    }
+                    EPON_OAM_LOG(INFO, device_id, key, "Received DPoE event %u\n",
+                        content->u.event_notification.tlvs[i].u.organization_specific.value.u.dpoe.value.event_code);
+                    break;
+                default:
+                    break;
+            }
+        }
+    }
+}
+
+static void epon_oam_handle_dpoe_get_response(bcmolt_devid device_id,
+                                              bcmolt_epon_oam_dpoe_vendor_extended_base *dpoe,
+                                              const bcmolt_epon_link_key *key,
+                                              bcmolt_user_appl_epon_oam_handle_rx_cb cb)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+
+    EPON_OAM_LOG(DEBUG, device_id, key, "Rx %u vars\n", dpoe->u.get_response.vars_count);
+    for (uint32_t i = 0; i < dpoe->u.get_response.vars_count; i++)
+    {
+        EPON_OAM_LOG(DEBUG, device_id, key, " %u: branch %u\n", i, dpoe->u.get_response.vars[i].branch);
+        if (BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ATTRIBUTE == dpoe->u.get_response.vars[i].branch)
+        {
+            if (dpoe->u.get_response.vars[i].u.extended_attribute.attribute.width >
+                BCMOLT_EPON_OAM_DPOE_ERROR_CODE_NO_ERROR)
+            {
+                EPON_OAM_LOG(ERROR, device_id, key, "Error 0x%x getting DPoE extended attribute 0x%04x\n",
+                             dpoe->u.get_response.vars[i].u.extended_attribute.attribute.width,
+                             dpoe->u.get_response.vars[i].u.extended_attribute.attribute.leaf);
+                rc = BCM_ERR_ONU_ERR_RESP;
+            }
+            switch (dpoe->u.get_response.vars[i].u.extended_attribute.attribute.leaf)
+            {
+                case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_ONU_ID:
+                    EPON_OAM_LOG(INFO, device_id, key, "Got DPoE ONUID %02x%02x%02x%02x%02x%02x\n",
+                                 dpoe->u.get_response.vars[i].u.extended_attribute.attribute.u.onu_id.id.u8[0],
+                                 dpoe->u.get_response.vars[i].u.extended_attribute.attribute.u.onu_id.id.u8[1],
+                                 dpoe->u.get_response.vars[i].u.extended_attribute.attribute.u.onu_id.id.u8[2],
+                                 dpoe->u.get_response.vars[i].u.extended_attribute.attribute.u.onu_id.id.u8[3],
+                                 dpoe->u.get_response.vars[i].u.extended_attribute.attribute.u.onu_id.id.u8[4],
+                                 dpoe->u.get_response.vars[i].u.extended_attribute.attribute.u.onu_id.id.u8[5]);
+                    break;
+                case BCMOLT_EPON_OAM_DPOE_LEAF_ATTRIBUTE_MAX_LOGICAL_LINKS:
+                    EPON_OAM_LOG(INFO, device_id, key, "Got DPoE Max Logical Links BiDir %u, DownOnly %u\n",
+                                 dpoe->u.get_response.vars[i].u.extended_attribute.attribute.u.max_logical_links.bidirectional,
+                                 dpoe->u.get_response.vars[i].u.extended_attribute.attribute.u.max_logical_links.downstream_only);
+                    break;
+                default:
+                    break;
+            }
+        }
+    }
+    if (NULL != cb)
+    {
+        cb(device_id, key->epon_ni, &key->mac_address, BCMOLT_USER_APPL_EPON_OAM_RX_ID_DPOE_GET_RESPONSE, rc);
+    }
+}
+
+static void epon_oam_handle_dpoe_set_response(bcmolt_devid device_id,
+                                              bcmolt_epon_oam_dpoe_vendor_extended_base *dpoe,
+                                              const bcmolt_epon_link_key *key,
+                                              bcmolt_user_appl_epon_oam_handle_rx_cb cb)
+{
+    bcmos_errno rc = BCM_ERR_OK;
+
+    EPON_OAM_LOG(DEBUG, device_id, key, "Rx %u vars\n", dpoe->u.set_response.vars_count);
+    for (uint32_t i = 0; i < dpoe->u.set_response.vars_count; i++)
+    {
+        EPON_OAM_LOG(DEBUG, device_id, key, " %u: branch %u\n", i, dpoe->u.set_response.vars[i].branch);
+        switch (dpoe->u.set_response.vars[i].branch)
+        {
+            case BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ATTRIBUTE:
+                if (dpoe->u.set_response.vars[i].u.extended_attribute.attribute.width >
+                    BCMOLT_EPON_OAM_DPOE_ERROR_CODE_NO_ERROR)
+                {
+                    EPON_OAM_LOG(ERROR, device_id, key, "Error 0x%x setting DPoE extended attribute 0x%04x\n",
+                                 dpoe->u.set_response.vars[i].u.extended_attribute.attribute.width,
+                                 dpoe->u.set_response.vars[i].u.extended_attribute.attribute.leaf);
+                    rc = BCM_ERR_ONU_ERR_RESP;
+                }
+                else
+                {
+                    EPON_OAM_LOG(INFO, device_id, key, "Successfully set DPoE extended attribute 0x%04x\n",
+                                 dpoe->u.set_response.vars[i].u.extended_attribute.attribute.leaf);
+                }
+                break;
+            case BCMOLT_EPON_OAM_DPOE_BRANCH_EXTENDED_ACTION:
+                if (dpoe->u.set_response.vars[i].u.extended_action.action.width >
+                    BCMOLT_EPON_OAM_DPOE_ERROR_CODE_NO_ERROR)
+                {
+                    EPON_OAM_LOG(ERROR, device_id, key, "Error 0x%x performing DPoE extended action 0x%04x\n",
+                                 dpoe->u.set_response.vars[i].u.extended_action.action.width,
+                                 dpoe->u.set_response.vars[i].u.extended_action.action.leaf);
+                    rc = BCM_ERR_ONU_ERR_RESP;
+                }
+                else
+                {
+                    EPON_OAM_LOG(INFO, device_id, key, "Successfully performed DPoE extended action 0x%04x\n",
+                                 dpoe->u.set_response.vars[i].u.extended_action.action.leaf);
+                }
+                break;
+            default:
+                break;
+        }
+    }
+    if (NULL != cb)
+    {
+        cb(device_id, key->epon_ni, &key->mac_address, BCMOLT_USER_APPL_EPON_OAM_RX_ID_DPOE_SET_RESPONSE, rc);
+    }
+}
+
+static void epon_oam_handle_dpoe_file_transfer(bcmolt_devid device_id,
+                                               bcmolt_epon_oam_dpoe_vendor_extended_base *dpoe,
+                                               const bcmolt_epon_link_key *key,
+                                               bcmolt_user_appl_epon_oam_handle_rx_cb cb)
+{
+    EPON_OAM_LOG(DEBUG, device_id, key, "Got DPoE File Transfer: %u\n", dpoe->u.file_transfer.file_transfer.opcode);
+    switch (dpoe->u.file_transfer.file_transfer.opcode)
+    {
+        case BCMOLT_EPON_OAM_DPOE_FILE_TRANSFER_OPCODE_FILE_ACK:
+            EPON_OAM_LOG(DEBUG, device_id, key, "Rx ack block %u error %u\n",
+                         dpoe->u.file_transfer.file_transfer.u.file_ack.block,
+                         dpoe->u.file_transfer.file_transfer.u.file_ack.error);
+            switch (dpoe->u.file_transfer.file_transfer.u.file_ack.error)
+            {
+                case BCMOLT_EPON_OAM_DPOE_FILE_TRANSFER_ERROR_OK:
+                    epon_oam_dpoe_handle_ack(device_id, key, &dpoe->u.file_transfer.file_transfer, cb);
+                    break;
+                default:
+                    EPON_OAM_LOG(ERROR, device_id, key, "File transfer failed on block %u with error %u\n",
+                                 dpoe->u.file_transfer.file_transfer.u.file_ack.block,
+                                 dpoe->u.file_transfer.file_transfer.u.file_ack.error);
+                    break;
+            }
+            break;
+        case BCMOLT_EPON_OAM_DPOE_FILE_TRANSFER_OPCODE_FILE_DATA:
+            EPON_OAM_LOG(DEBUG, device_id, key, "Rx data\n");
+            break;
+        case BCMOLT_EPON_OAM_DPOE_FILE_TRANSFER_OPCODE_FILE_READ:
+            EPON_OAM_LOG(ERROR, device_id, key, "Rx read request\n");
+            break;
+        case BCMOLT_EPON_OAM_DPOE_FILE_TRANSFER_OPCODE_FILE_WRITE:
+            EPON_OAM_LOG(ERROR, device_id, key, "Rx write request\n");
+            break;
+        default:
+            EPON_OAM_LOG(ERROR, device_id, key, "Unknown DPoE File Transfer opcode: %u\n",
+                         dpoe->u.file_transfer.file_transfer.opcode);
+            break;
+    }
+}
+
+static void epon_oam_handle_dpoe(bcmolt_devid device_id,
+                                 bcmolt_epon_oam_dpoe_vendor_extended_base *dpoe,
+                                 const bcmolt_epon_link_key *key,
+                                 bcmolt_user_appl_epon_oam_handle_rx_cb cb)
+{
+    EPON_OAM_LOG(DEBUG, device_id, key, "Rx DPoE opcode %u\n", dpoe->op);
+    switch (dpoe->op)
+    {
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_GET_RESPONSE:
+            epon_oam_handle_dpoe_get_response(device_id, dpoe, key, cb);
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_SET_RESPONSE:
+            epon_oam_handle_dpoe_set_response(device_id, dpoe, key, cb);
+            break;
+        case BCMOLT_EPON_OAM_DPOE_OPCODE_FILE_TRANSFER:
+            epon_oam_handle_dpoe_file_transfer(device_id, dpoe, key, cb);
+            break;
+        default:
+            break;
+    }
+}
+
+static void bcmolt_user_appl_epon_oam_handle_proxy_rx(epon_oam_proxy_rx_data *data)
+{
+    const bcmolt_epon_link_frame_captured *cap = (bcmolt_epon_link_frame_captured*)data->rx;
+    bcmolt_epon_oam_ethernet_frame *oam_frame;
+
+    oam_frame = epon_oam_unpack(data->device_id, cap->data.frame.len, cap->data.frame.val);
+    if (NULL == oam_frame)
+    {
+        return;
+    }
+
+    if (oam_frame->protocols_count == 0)
+    {
+        EPON_OAM_LOG(ERROR, data->device_id, &cap->key, "No protocols in OAM frame\n");
+        bcmos_free(oam_frame);
+        return;
+    }
+
+    EPON_OAM_LOG(DEBUG, data->device_id, &cap->key, "Rx ethertype %04x subtype %02x\n",
+                 oam_frame->protocols[0].ethertype, oam_frame->protocols[0].u.slow_protocol.value.subtype);
+    if ((BCMOLT_EPON_OAM_PROTOCOL_TYPE_SLOW_PROTOCOL == oam_frame->protocols[0].ethertype) &&
+        (BCMOLT_EPON_OAM_SLOW_PROTOCOL_SUBTYPE_OAM == oam_frame->protocols[0].u.slow_protocol.value.subtype))
+    {
+        if (oam_frame->protocols[0].u.slow_protocol.value.u.oam.flags & BCMOLT_EPON_OAM_OAM_FLAGS_LINK_FAULT)
+        {
+            if (NULL != data->cb)
+            {
+                data->cb(data->device_id, cap->key.epon_ni, &cap->key.mac_address, BCMOLT_USER_APPL_EPON_OAM_RX_ID_LINK_FAULT, BCM_ERR_OK);
+            }
+            EPON_OAM_LOG(ERROR, data->device_id, &cap->key, "Received OAM link fault\n");
+        }
+        if (oam_frame->protocols[0].u.slow_protocol.value.u.oam.flags & BCMOLT_EPON_OAM_OAM_FLAGS_DYING_GASP)
+        {
+            if (NULL != data->cb)
+            {
+                data->cb(data->device_id, cap->key.epon_ni, &cap->key.mac_address, BCMOLT_USER_APPL_EPON_OAM_RX_ID_DYING_GASP, BCM_ERR_OK);
+            }
+            EPON_OAM_LOG(ERROR, data->device_id, &cap->key, "Received OAM dying gasp\n");
+        }
+        if (oam_frame->protocols[0].u.slow_protocol.value.u.oam.flags & BCMOLT_EPON_OAM_OAM_FLAGS_CRITICAL_EVENT)
+        {
+            if (NULL != data->cb)
+            {
+                data->cb(data->device_id, cap->key.epon_ni, &cap->key.mac_address, BCMOLT_USER_APPL_EPON_OAM_RX_ID_CRITICAL_EVENT, BCM_ERR_OK);
+            }
+            EPON_OAM_LOG(ERROR, data->device_id, &cap->key, "Received OAM critical event\n");
+        }
+        EPON_OAM_LOG(DEBUG, data->device_id, &cap->key, "Rx opcode %u\n",
+                     oam_frame->protocols[0].u.slow_protocol.value.u.oam.content.code);
+        switch (oam_frame->protocols[0].u.slow_protocol.value.u.oam.content.code)
+        {
+            case BCMOLT_EPON_OAM_OAM_OPCODE_INFO:
+                break; /* ignore info - this should be handled by eon */
+            case BCMOLT_EPON_OAM_OAM_OPCODE_EVENT_NOTIFICATION:
+                epon_oam_handle_event(data->device_id, &oam_frame->protocols[0].u.slow_protocol.value.u.oam.content, &cap->key, data->cb);
+                break;
+            case BCMOLT_EPON_OAM_OAM_OPCODE_ORGANIZATION_SPECIFIC:
+                EPON_OAM_LOG(DEBUG, data->device_id, &cap->key, "Rx OUI %u\n",
+                             oam_frame->protocols[0].u.slow_protocol.value.u.oam.content.u.organization_specific.value.oui);
+                switch (oam_frame->protocols[0].u.slow_protocol.value.u.oam.content.u.organization_specific.value.oui)
+                {
+                    case BCMOLT_EPON_OAM_WELL_KNOWN_OUI_DPOE:
+                        epon_oam_handle_dpoe(data->device_id, &oam_frame->protocols[0].u.slow_protocol.value.u.oam.content.u.organization_specific.value.u.dpoe.value, &cap->key, data->cb);
+                        break;
+                    default:
+                        break;
+                }
+                break;
+            default:
+                break;
+        }
+    }
+
+    bcmos_free(oam_frame);
+    bcmolt_msg_free(&data->rx->hdr);
+}
+
+static void epon_oam_dpoe_handle_fw_upgrade_timeout(epon_oam_dpoe_fw_upgrade_state *state)
+{
+    EPON_OAM_LOG(ERROR, state->device_id, &state->key, "Firmware upgrade timed out\n");
+    epon_oam_dpoe_send_ack(state->device_id, &state->key, BCMOLT_EPON_OAM_DPOE_FILE_TRANSFER_ERROR_TIMEOUT);
+    epon_oam_dpoe_fw_upgrade_state_release(state);
+}
+
+static void epon_oam_handle_os_msg(bcmos_module_id module_id, bcmos_msg *os_msg)
+{
+    epon_oam_msg *msg = (epon_oam_msg*)os_msg;
+
+    switch (msg->os_msg.type)
+    {
+        case BCMOS_MSG_ID_EPON_OAM_PROXY_RX:
+            bcmolt_user_appl_epon_oam_handle_proxy_rx(&msg->data.proxy_rx);
+            break;
+        case BCMOS_MSG_ID_EPON_OAM_TIMEOUT:
+            epon_oam_dpoe_handle_fw_upgrade_timeout(msg->data.timeout.state);
+            break;
+        default:
+            BCM_LOG(ERROR, epon_oam_log[0], "Unknown OS message %u\n", msg->os_msg.type);
+            break;
+    }
+    bcmos_free(os_msg);
+}
+
+void bcmolt_user_appl_epon_oam_handle_rx(bcmolt_devid device_id,
+                                         bcmolt_proxy_rx *rx,
+                                         bcmolt_user_appl_epon_oam_handle_rx_cb cb)
+{
+    bcmos_errno rc;
+    const bcmolt_epon_link_frame_captured *cap = (bcmolt_epon_link_frame_captured*)rx;
+    epon_oam_msg_data msg_data = {};
+
+    if (!is_running)
+    {
+        return;
+    }
+
+    if ((BCMOLT_OBJ_ID_EPON_LINK != rx->hdr.obj_type) ||
+        (BCMOLT_EPON_LINK_PROXY_RX_ID_FRAME_CAPTURED != rx->hdr.subgroup) ||
+        (cap->data.frame.val[12] != 0x88) ||
+        (cap->data.frame.val[13] != 0x09) ||
+        (cap->data.frame.val[14] != 0x03))
+    {
+        return; /* not OAM frame captured on a link - ignore */
+    }
+
+    msg_data.proxy_rx.device_id = device_id;
+    msg_data.proxy_rx.cb = cb;
+    rc = bcmolt_msg_clone((bcmolt_msg**)&msg_data.proxy_rx.rx, &rx->hdr);
+    if (rc != BCM_ERR_OK)
+    {
+        BCM_LOG(ERROR, epon_oam_log[device_id], "Proxy Rx clone failed: %s\n", bcmos_strerror(rc));
+        return;
+    }
+
+    if (BCM_ERR_OK != epon_oam_send_os_msg(BCMOS_MSG_ID_EPON_OAM_PROXY_RX, &msg_data))
+    {
+        bcmolt_msg_free(&msg_data.proxy_rx.rx->hdr);
+    }
+}
+
+void bcmolt_user_appl_epon_oam_init(void)
+{
+    bcmos_module_parm module_params =
+    {
+        .qparm =
+        {
+            .name = "user_appl_epon_oam_module",
+            .size = MAX_CONCURRENT_LINKS
+        }
+    };
+    bcmos_task_parm task_params =
+    {
+        .name         = "user_appl_epon_oam_task",
+        .priority     = BCMOS_TASK_PRIORITY_12,
+        .core         = BCMOS_CPU_CORE_ANY, /* No CPU affinity */
+        .init_handler = NULL
+    };
+
+    if (is_running)
+    {
+        return;
+    }
+
+#ifdef ENABLE_LOG
+    int i;
+    char log_name[MAX_DEV_LOG_ID_NAME] = {};
+    for (i=0; i<BCMTR_MAX_OLTS; i++)
+    {
+        snprintf(log_name, sizeof(log_name)-1, "epon_oam%d", i);
+        epon_oam_log[i] = bcm_dev_log_id_register(log_name, DEV_LOG_LEVEL_INFO, DEV_LOG_ID_TYPE_BOTH);
+    }
+#endif
+    dpoe_fw_upgrade_state = hash_table_create(MAX_CONCURRENT_LINKS,
+                                              sizeof(epon_oam_dpoe_fw_upgrade_state),
+                                              sizeof(bcmolt_epon_link_key),
+                                              "dpoe_fw_upgrade_state");
+    if (BCM_ERR_OK != bcmos_task_create(&epon_oam_task, &task_params))
+    {
+        BCM_LOG(FATAL, epon_oam_log[0], "Failed to create EPON OAM task!\n");
+    }
+    if (BCM_ERR_OK != bcmos_module_create(BCMOS_MODULE_ID_USER_APPL_EPON_OAM, &epon_oam_task, &module_params))
+    {
+        BCM_LOG(FATAL, epon_oam_log[0], "Failed to create EPON OAM module!\n");
+    }
+    is_running = BCMOS_TRUE;
+}
+
diff --git a/bcm68620_release/release/host_reference/user_appl/epon_oam/bcmolt_user_appl_epon_oam.h b/bcm68620_release/release/host_reference/user_appl/epon_oam/bcmolt_user_appl_epon_oam.h
new file mode 100644
index 0000000..c5dc9ed
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/epon_oam/bcmolt_user_appl_epon_oam.h
@@ -0,0 +1,167 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef _BCMOLT_USER_APPL_EPON_OAM_H_
+#define _BCMOLT_USER_APPL_EPON_OAM_H_
+
+#include "bcmcli.h"
+#include "bcmolt_msg.h"
+#include "bcmolt_epon_oam_types.h"
+
+#define MAX_QUEUE_SETS          4
+#define MAX_REPORT_THRESHOLDS   8
+
+static const bcmos_mac_address slow_protocol_multicast_mac = {{0x01,0x80,0xc2,0x00,0x00,0x02}};
+
+/* Typedef required for conveying a 2-dimensional array to epon_oam_dpoe_set_report_thresholds(). */
+typedef uint16_t bcmolt_epon_oam_queue_sets[MAX_QUEUE_SETS][MAX_REPORT_THRESHOLDS];
+
+typedef enum
+{
+    BCMOLT_USER_APPL_EPON_OAM_RX_ID_LINK_FAULT,
+    BCMOLT_USER_APPL_EPON_OAM_RX_ID_DYING_GASP,
+    BCMOLT_USER_APPL_EPON_OAM_RX_ID_CRITICAL_EVENT,
+    BCMOLT_USER_APPL_EPON_OAM_RX_ID_DPOE_EVENT,
+    BCMOLT_USER_APPL_EPON_OAM_RX_ID_DPOE_GET_RESPONSE,
+    BCMOLT_USER_APPL_EPON_OAM_RX_ID_DPOE_SET_RESPONSE,
+} bcmolt_user_appl_epon_oam_rx_id;
+
+typedef enum
+{
+    DPOE_RULE_VLAN_MODE_NONE,
+    DPOE_RULE_VLAN_MODE_ADD,
+    DPOE_RULE_VLAN_MODE_REMOVE,
+
+    DPOE_RULE_VLAN_MODE_COUNT
+} dpoe_rule_vlan_mode;
+
+/* During parsing of OAM indication, this optional callback may be called. */
+typedef void (*bcmolt_user_appl_epon_oam_handle_rx_cb)(bcmolt_devid device_id,
+                                                       bcmolt_epon_ni epon_ni,
+                                                       const bcmos_mac_address *mac,
+                                                       bcmolt_user_appl_epon_oam_rx_id id,
+                                                       bcmos_errno rc);
+
+/* Callback 'cb' is optional. */
+void bcmolt_user_appl_epon_oam_handle_rx(bcmolt_devid device_id,
+                                         bcmolt_proxy_rx *rx,
+                                         bcmolt_user_appl_epon_oam_handle_rx_cb cb);
+
+bcmos_errno epon_oam_pack_frame(bcmolt_epon_oam_ethernet_frame *oam_frame, uint8_t **buffer, uint16_t *length);
+
+bcmos_errno epon_oam_pack_and_send(bcmolt_devid device_id,
+                                   bcmolt_epon_ni epon,
+                                   const bcmos_mac_address *mac,
+                                   bcmolt_epon_oam_ethernet_frame *oam_frame);
+
+bcmolt_epon_oam_ethernet_frame *epon_oam_unpack(bcmolt_devid device_id, uint32_t len, uint8_t *bytes);
+
+bcmos_errno epon_oam_dpoe_get_critical_info(bcmolt_devid device_id,
+                                            bcmolt_epon_ni epon,
+                                            bcmos_mac_address *mac);
+
+bcmos_errno epon_oam_dpoe_set_oam_rate(bcmolt_devid device_id,
+                                       bcmolt_epon_ni epon,
+                                       bcmos_mac_address *mac,
+                                       uint8_t min,
+                                       uint8_t max);
+
+bcmos_errno epon_oam_dpoe_set_report_thresholds(bcmolt_devid device_id,
+                                                bcmolt_epon_ni epon,
+                                                bcmos_mac_address *mac,
+                                                uint8_t report_values_per_queue_set,
+                                                bcmolt_epon_oam_queue_sets queue_sets,
+                                                uint8_t num_queue_sets);
+
+bcmos_errno epon_oam_dpoe_set_encryption(
+    bcmolt_devid device_id,
+    bcmolt_epon_ni epon,
+    bcmos_mac_address *mac,
+    bcmolt_epon_oam_dpoe_encryption_mode enc_mode,
+    uint16_t period);
+
+bcmos_bool epon_oam_is_dpoe(bcmolt_epon_oam_ethernet_frame *oam);
+
+bcmos_bool epon_oam_is_dpoe_encrypt_response(bcmolt_epon_oam_dpoe_vendor_extended_base *dpoe);
+
+bcmos_errno epon_oam_dpoe_clear_ingress_rules_network_pon(bcmolt_devid device_id,
+                                                          bcmolt_epon_ni epon,
+                                                          bcmos_mac_address *mac);
+bcmos_errno epon_oam_dpoe_clear_ingress_rules_user_port(bcmolt_devid device_id,
+                                                        bcmolt_epon_ni epon,
+                                                        bcmos_mac_address *mac);
+bcmos_errno epon_oam_dpoe_clear_ingress_rules(bcmolt_devid device_id,
+                                              bcmolt_epon_ni epon,
+                                              bcmos_mac_address *mac);
+
+bcmos_errno epon_oam_dpoe_set_basic_queue_config(bcmolt_devid device_id,
+                                                 bcmolt_epon_ni epon,
+                                                 bcmos_mac_address *mac,
+                                                 uint8_t up_queue_size,
+                                                 uint8_t dn_queue_size);
+
+bcmos_errno epon_oam_dpoe_add_ingress_rules_network_pon(bcmolt_devid device_id,
+                                                        bcmolt_epon_ni epon,
+                                                        bcmos_mac_address *mac,
+                                                        dpoe_rule_vlan_mode vlan_mode,
+                                                        uint8_t vlan_tag[4]);
+bcmos_errno epon_oam_dpoe_add_ingress_rules_user_port(bcmolt_devid device_id,
+                                                      bcmolt_epon_ni epon,
+                                                      bcmos_mac_address *mac,
+                                                      dpoe_rule_vlan_mode vlan_mode,
+                                                      uint8_t vlan_tag[4]);
+bcmos_errno epon_oam_dpoe_add_ingress_rules(bcmolt_devid device_id,
+                                            bcmolt_epon_ni epon,
+                                            bcmos_mac_address *mac);
+
+bcmos_errno epon_oam_dpoe_add_ingress_rules_with_vlan(bcmolt_devid device_id,
+                                                      bcmolt_epon_ni epon,
+                                                      bcmos_mac_address *mac,
+                                                      uint8_t vlan_tag[4]);
+
+bcmos_errno epon_oam_dpoe_enable_user_traffic(bcmolt_devid device_id,
+                                              bcmolt_epon_ni epon,
+                                              bcmos_mac_address *mac);
+
+bcmos_errno epon_oam_dpoe_disable_user_traffic(bcmolt_devid device_id,
+                                               bcmolt_epon_ni epon,
+                                               bcmos_mac_address *mac);
+
+bcmos_errno epon_oam_dpoe_start_upgrade(bcmolt_devid device_id,
+                                        bcmolt_epon_ni epon,
+                                        bcmos_mac_address *mac,
+                                        const char *fw_file,
+                                        uint16_t block_size,
+                                        uint8_t timeout_sec);
+
+bcmos_errno epon_oam_dpoe_reset_onu(bcmolt_devid device_id, bcmolt_epon_ni epon, bcmos_mac_address *mac);
+
+void bcmolt_user_appl_epon_oam_init(void);
+
+#endif
diff --git a/bcm68620_release/release/host_reference/user_appl/epon_oam_cli/Makefile b/bcm68620_release/release/host_reference/user_appl/epon_oam_cli/Makefile
new file mode 100644
index 0000000..8bc0811
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/epon_oam_cli/Makefile
@@ -0,0 +1,10 @@
+ifeq ("$(ENABLE_CLI)", "y")
+    MOD_NAME = bcm_user_appl_epon_oam_cli
+    MOD_TYPE = lib
+	MOD_DEPS = utils dev_log common_epon_oam bcm_user_appl_epon_oam
+    srcs = bcmolt_user_appl_epon_oam_cli.c
+    ifeq ("$(OS_KERNEL)", "linux")
+	MOD_DEPS += dev_log_linux
+    endif
+endif
+
diff --git a/bcm68620_release/release/host_reference/user_appl/epon_oam_cli/bcmolt_user_appl_epon_oam_cli.c b/bcm68620_release/release/host_reference/user_appl/epon_oam_cli/bcmolt_user_appl_epon_oam_cli.c
new file mode 100644
index 0000000..ba8eaa6
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/epon_oam_cli/bcmolt_user_appl_epon_oam_cli.c
@@ -0,0 +1,360 @@
+/*
+  <:copyright-BRCM:2016:DUAL/GPL:standard
+
+  Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+  All Rights Reserved
+
+  Unless you and Broadcom execute a separate written software license
+  agreement governing use of this software, this software is licensed
+  to you under the terms of the GNU General Public License version 2
+  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+  with the following added to such license:
+
+  As a special exception, the copyright holders of this software give
+  you permission to link this software with independent modules, and
+  to copy and distribute the resulting executable under terms of your
+  choice, provided that you also meet, for each linked independent
+  module, the terms and conditions of the license of that module.
+  An independent module is a module which is not derived from this
+  software.  The special exception does not apply to any modifications
+  of the software.
+
+  Not withstanding the above, under no circumstances may you combine
+  this software in any way with any other Broadcom software provided
+  under a license other than the GPL, without Broadcom's express prior
+  written consent.
+
+  :>
+*/
+
+#include "bcmos_system.h"
+#include "bcmolt_math.h"
+#include "bcm_dev_log.h"
+#include "bcmolt_api.h"
+#include "bcmolt_model_types.h"
+#include "bcmolt_user_appl_epon_oam.h"
+#include "bcmolt_user_appl_epon_oam_cli.h"
+#include "bcmolt_epon_oam_types.h"
+
+static bcmos_errno epon_oam_dpoe_get_critical_info_cli(bcmcli_session *session,
+                                                       const bcmcli_cmd_parm parm[],
+                                                       uint16_t n_parms)
+{
+    bcmolt_epon_ni epon = (bcmolt_epon_ni)bcmcli_find_named_parm(session, "epon_ni")->value.unumber;
+    bcmos_mac_address mac = bcmcli_find_named_parm(session, "mac_address")->value.mac;
+
+    return epon_oam_dpoe_get_critical_info(current_device, epon, &mac);
+}
+
+static bcmos_errno epon_oam_dpoe_set_oam_rate_cli(bcmcli_session *session,
+                                                  const bcmcli_cmd_parm parm[],
+                                                  uint16_t n_parms)
+{
+    bcmolt_epon_ni epon = (bcmolt_epon_ni)bcmcli_find_named_parm(session, "epon_ni")->value.unumber;
+    bcmos_mac_address mac = bcmcli_find_named_parm(session, "mac_address")->value.mac;
+    uint8_t min = (uint8_t)bcmcli_find_named_parm(session, "min")->value.unumber;
+    uint8_t max = (uint8_t)bcmcli_find_named_parm(session, "max")->value.unumber;
+
+    return epon_oam_dpoe_set_oam_rate(current_device, epon, &mac, min, max);
+}
+
+static bcmos_errno epon_oam_dpoe_set_report_thresholds_cli(bcmcli_session *session,
+                                                           const bcmcli_cmd_parm parm[],
+                                                           uint16_t n_parms)
+{
+    bcmolt_epon_ni epon = (bcmolt_epon_ni)bcmcli_find_named_parm(session, "epon_ni")->value.unumber;
+    bcmos_mac_address mac = bcmcli_find_named_parm(session, "mac_address")->value.mac;
+    bcmcli_cmd_parm *queue_set_parms[MAX_QUEUE_SETS];
+
+    /* OAM stuff */
+    bcmolt_epon_oam_queue_sets queue_sets;
+    uint8_t i, j, num_queue_sets = 0;
+
+    /* process input */
+    queue_set_parms[0] = bcmcli_find_named_parm(session, "queue_0");
+    queue_set_parms[1] = bcmcli_find_named_parm(session, "queue_1");
+    queue_set_parms[2] = bcmcli_find_named_parm(session, "queue_2");
+    queue_set_parms[3] = bcmcli_find_named_parm(session, "queue_3");
+    for (i = 0; i < MAX_QUEUE_SETS; i++)
+    {
+        if (NULL != queue_set_parms[i])
+        {
+            num_queue_sets++;
+            if (queue_set_parms[i]->array_size != queue_set_parms[0]->array_size)
+            {
+                bcmcli_session_print(session, "All queue sets must have the same number of report thresholds!\n");
+                return BCM_ERR_PARM;
+            }
+            for (j = 0; j < queue_set_parms[i]->array_size; j++)
+            {
+                if (queue_set_parms[i]->values[j].unumber > 65535)
+                {
+                    bcmcli_session_print(session, "Queue Set %u, Threshold %u: %lu is not a valid report threshold!\n",
+                                         i, j, queue_set_parms[i]->values[j].unumber);
+                    return BCM_ERR_PARM;
+                }
+                queue_sets[i][j] = (uint16_t)queue_set_parms[i]->values[j].unumber;
+            }
+        }
+        else
+        {
+            for (j = i + 1; j < MAX_QUEUE_SETS; j++)
+            {
+                if (NULL != queue_set_parms[j])
+                {
+                    bcmcli_session_print(session, "Included queue sets must be sequential from 0!\n");
+                    return BCM_ERR_PARM;
+                }
+            }
+        }
+    }
+
+    return epon_oam_dpoe_set_report_thresholds(current_device,
+                                               epon,
+                                               &mac,
+                                               queue_set_parms[0]->array_size,
+                                               queue_sets,
+                                               num_queue_sets);
+}
+
+static bcmos_errno epon_oam_dpoe_clear_ingress_rules_network_pon_cli(bcmcli_session *session,
+                                                                     const bcmcli_cmd_parm parm[],
+                                                                     uint16_t n_parms)
+{
+    bcmolt_epon_ni epon = (bcmolt_epon_ni)bcmcli_find_named_parm(session, "epon_ni")->value.unumber;
+    bcmos_mac_address mac = bcmcli_find_named_parm(session, "mac_address")->value.mac;
+
+    return epon_oam_dpoe_clear_ingress_rules_network_pon(current_device, epon, &mac);
+}
+
+static bcmos_errno epon_oam_dpoe_clear_ingress_rules_user_port_cli(bcmcli_session *session,
+                                                                   const bcmcli_cmd_parm parm[],
+                                                                   uint16_t n_parms)
+{
+    bcmolt_epon_ni epon = (bcmolt_epon_ni)bcmcli_find_named_parm(session, "epon_ni")->value.unumber;
+    bcmos_mac_address mac = bcmcli_find_named_parm(session, "mac_address")->value.mac;
+
+    return epon_oam_dpoe_clear_ingress_rules_user_port(current_device, epon, &mac);
+}
+
+static bcmos_errno epon_oam_dpoe_clear_ingress_rules_cli(bcmcli_session *session,
+                                                         const bcmcli_cmd_parm parm[],
+                                                         uint16_t n_parms)
+{
+    bcmolt_epon_ni epon = (bcmolt_epon_ni)bcmcli_find_named_parm(session, "epon_ni")->value.unumber;
+    bcmos_mac_address mac = bcmcli_find_named_parm(session, "mac_address")->value.mac;
+
+    return epon_oam_dpoe_clear_ingress_rules(current_device, epon, &mac);
+}
+
+static bcmos_errno epon_oam_dpoe_set_basic_queue_config_cli(bcmcli_session *session,
+                                                            const bcmcli_cmd_parm parm[],
+                                                            uint16_t n_parms)
+{
+    bcmolt_epon_ni epon = (bcmolt_epon_ni)bcmcli_find_named_parm(session, "epon_ni")->value.unumber;
+    bcmos_mac_address mac = bcmcli_find_named_parm(session, "mac_address")->value.mac;
+    uint8_t up_queue_size = (uint8_t)bcmcli_find_named_parm(session, "up_size")->value.unumber;
+    uint8_t dn_queue_size = (uint8_t)bcmcli_find_named_parm(session, "dn_size")->value.unumber;
+
+    return epon_oam_dpoe_set_basic_queue_config(current_device, epon, &mac, up_queue_size, dn_queue_size);
+}
+
+static bcmos_errno epon_oam_dpoe_add_ingress_rules_network_pon_cli(bcmcli_session *session,
+                                                                   const bcmcli_cmd_parm parm[],
+                                                                   uint16_t n_parms)
+{
+    bcmolt_epon_ni epon = (bcmolt_epon_ni)bcmcli_find_named_parm(session, "epon_ni")->value.unumber;
+    bcmos_mac_address mac = bcmcli_find_named_parm(session, "mac_address")->value.mac;
+
+    return epon_oam_dpoe_add_ingress_rules_network_pon(current_device, epon, &mac, DPOE_RULE_VLAN_MODE_NONE, NULL);
+}
+
+static bcmos_errno epon_oam_dpoe_add_ingress_rules_user_port_cli(bcmcli_session *session,
+                                                                 const bcmcli_cmd_parm parm[],
+                                                                 uint16_t n_parms)
+{
+    bcmolt_epon_ni epon = (bcmolt_epon_ni)bcmcli_find_named_parm(session, "epon_ni")->value.unumber;
+    bcmos_mac_address mac = bcmcli_find_named_parm(session, "mac_address")->value.mac;
+
+    return epon_oam_dpoe_add_ingress_rules_user_port(current_device, epon, &mac, DPOE_RULE_VLAN_MODE_NONE, NULL);
+}
+
+static bcmos_errno epon_oam_dpoe_add_ingress_rules_cli(bcmcli_session *session,
+                                                       const bcmcli_cmd_parm parm[],
+                                                       uint16_t n_parms)
+{
+    bcmolt_epon_ni epon = (bcmolt_epon_ni)bcmcli_find_named_parm(session, "epon_ni")->value.unumber;
+    bcmos_mac_address mac = bcmcli_find_named_parm(session, "mac_address")->value.mac;
+
+    return epon_oam_dpoe_add_ingress_rules(current_device, epon, &mac);
+}
+
+static bcmos_errno epon_oam_dpoe_add_ingress_rules_with_vlan_cli(bcmcli_session *session,
+                                                                 const bcmcli_cmd_parm parm[],
+                                                                 uint16_t n_parms)
+{
+    bcmolt_epon_ni epon = (bcmolt_epon_ni)bcmcli_find_named_parm(session, "epon_ni")->value.unumber;
+    bcmos_mac_address mac = bcmcli_find_named_parm(session, "mac_address")->value.mac;
+    uint32_t vlan = bcmcli_find_named_parm(session, "vlan")->value.unumber;
+    uint8_t vlan_tag[4];
+
+    vlan = BCMOS_ENDIAN_CPU_TO_BIG_U32(vlan);
+    vlan_tag[0] = (vlan >> 24) & 0xff;
+    vlan_tag[1] = (vlan >> 16) & 0xff;
+    vlan_tag[2] = (vlan >> 8) & 0xff;
+    vlan_tag[3] = (vlan >> 0) & 0xff;
+
+    return epon_oam_dpoe_add_ingress_rules_with_vlan(current_device, epon, &mac, vlan_tag);
+}
+
+static bcmos_errno epon_oam_dpoe_enable_user_traffic_cli(bcmcli_session *session,
+                                                         const bcmcli_cmd_parm parm[],
+                                                         uint16_t n_parms)
+{
+    bcmolt_epon_ni epon = (bcmolt_epon_ni)bcmcli_find_named_parm(session, "epon_ni")->value.unumber;
+    bcmos_mac_address mac = bcmcli_find_named_parm(session, "mac_address")->value.mac;
+
+    return epon_oam_dpoe_enable_user_traffic(current_device, epon, &mac);
+}
+
+static bcmos_errno epon_oam_dpoe_start_upgrade_cli(bcmcli_session *session,
+                                                   const bcmcli_cmd_parm parm[],
+                                                   uint16_t n_parms)
+{
+    bcmolt_epon_ni epon = (bcmolt_epon_ni)bcmcli_find_named_parm(session, "epon_ni")->value.unumber;
+    bcmos_mac_address mac = bcmcli_find_named_parm(session, "mac_address")->value.mac;
+    const char *fw_file = bcmcli_find_named_parm(session, "fw_file")->value.string;
+    /* This should be based on the negotiated PDU size! */
+    uint16_t block_size = (uint16_t)bcmcli_find_named_parm(session, "block_size")->value.unumber;
+    uint8_t timeout = (uint8_t)bcmcli_find_named_parm(session, "timeout")->value.unumber;
+
+    return epon_oam_dpoe_start_upgrade(current_device, epon, &mac, fw_file, block_size, timeout);
+}
+
+static bcmos_errno epon_oam_dpoe_reset_onu_cli(bcmcli_session *session,
+                                               const bcmcli_cmd_parm parm[],
+                                               uint16_t n_parms)
+{
+    bcmolt_epon_ni epon = (bcmolt_epon_ni)bcmcli_find_named_parm(session, "epon_ni")->value.unumber;
+    bcmos_mac_address mac = bcmcli_find_named_parm(session, "mac_address")->value.mac;
+
+    return epon_oam_dpoe_reset_onu(current_device, epon, &mac);
+}
+
+void bcmolt_user_appl_epon_oam_cli_init(bcmcli_entry *top_dir)
+{
+#ifdef ENABLE_CLI
+    static const char *dir_name = "epon_oam";
+
+    if (bcmcli_dir_find(top_dir, dir_name))
+    {
+        return;
+    }
+
+    bcmcli_entry *oam_dir = bcmcli_dir_add(top_dir, dir_name, "EPON OAM", BCMCLI_ACCESS_ADMIN, NULL);
+    BUG_ON(NULL == oam_dir);
+
+    static bcmcli_parm_value queue_0[MAX_REPORT_THRESHOLDS];
+    static bcmcli_parm_value queue_1[MAX_REPORT_THRESHOLDS];
+    static bcmcli_parm_value queue_2[MAX_REPORT_THRESHOLDS];
+    static bcmcli_parm_value queue_3[MAX_REPORT_THRESHOLDS];
+
+    BCMCLI_MAKE_CMD(oam_dir, "dpoe_get_critical_info", "DPoE get ONU ID and max links",
+                    epon_oam_dpoe_get_critical_info_cli,
+                    BCMCLI_MAKE_PARM("epon_ni", "EPON NI", BCMCLI_PARM_UNUMBER, 0),
+                    BCMCLI_MAKE_PARM("mac_address", "link MAC", BCMCLI_PARM_MAC, 0));
+
+    BCMCLI_MAKE_CMD(oam_dir, "dpoe_set_oam_rate", "DPoE set OAM rate",
+                    epon_oam_dpoe_set_oam_rate_cli,
+                    BCMCLI_MAKE_PARM("epon_ni", "EPON NI", BCMCLI_PARM_UNUMBER, 0),
+                    BCMCLI_MAKE_PARM("mac_address", "link MAC", BCMCLI_PARM_MAC, 0),
+                    BCMCLI_MAKE_PARM("min", "Minimum OAM rate", BCMCLI_PARM_UNUMBER, 0),
+                    BCMCLI_MAKE_PARM("max", "Maximum OAM rate", BCMCLI_PARM_UNUMBER, 0));
+
+    BCMCLI_MAKE_CMD(oam_dir, "dpoe_set_report_thresholds", "DPoE set report threhsolds",
+                    epon_oam_dpoe_set_report_thresholds_cli,
+                    BCMCLI_MAKE_PARM("epon_ni", "EPON NI", BCMCLI_PARM_UNUMBER, 0),
+                    BCMCLI_MAKE_PARM("mac_address", "link MAC", BCMCLI_PARM_MAC, 0),
+                    BCMCLI_MAKE_PARM_ARRAY("queue_0",
+                                           "Report threhsold for queue set 0",
+                                           BCMCLI_PARM_UNUMBER,
+                                           BCMCLI_PARM_FLAG_NONE,
+                                           MAX_REPORT_THRESHOLDS,
+                                           queue_0),
+                    BCMCLI_MAKE_PARM_ARRAY("queue_1",
+                                           "Report threhsold for queue set 0",
+                                           BCMCLI_PARM_UNUMBER,
+                                           BCMCLI_PARM_FLAG_OPTIONAL,
+                                           MAX_REPORT_THRESHOLDS,
+                                           queue_1),
+                    BCMCLI_MAKE_PARM_ARRAY("queue_2",
+                                           "Report threhsold for queue set 0",
+                                           BCMCLI_PARM_UNUMBER,
+                                           BCMCLI_PARM_FLAG_OPTIONAL,
+                                           MAX_REPORT_THRESHOLDS,
+                                           queue_2),
+                    BCMCLI_MAKE_PARM_ARRAY("queue_3",
+                                           "Report threhsold for queue set 0",
+                                           BCMCLI_PARM_UNUMBER,
+                                           BCMCLI_PARM_FLAG_OPTIONAL,
+                                           MAX_REPORT_THRESHOLDS,
+                                           queue_3));
+
+    BCMCLI_MAKE_CMD(oam_dir, "dpoe_clear_ingress_rules_network_pon", "DPoE clear ingress rules for network PON",
+                    epon_oam_dpoe_clear_ingress_rules_network_pon_cli,
+                    BCMCLI_MAKE_PARM("epon_ni", "EPON NI", BCMCLI_PARM_UNUMBER, 0),
+                    BCMCLI_MAKE_PARM("mac_address", "link MAC", BCMCLI_PARM_MAC, 0));
+    BCMCLI_MAKE_CMD(oam_dir, "dpoe_clear_ingress_rules_user_port", "DPoE clear ingress rules for user port",
+                    epon_oam_dpoe_clear_ingress_rules_user_port_cli,
+                    BCMCLI_MAKE_PARM("epon_ni", "EPON NI", BCMCLI_PARM_UNUMBER, 0),
+                    BCMCLI_MAKE_PARM("mac_address", "link MAC", BCMCLI_PARM_MAC, 0));
+    BCMCLI_MAKE_CMD(oam_dir, "dpoe_clear_ingress_rules", "DPoE clear ingress rules",
+                    epon_oam_dpoe_clear_ingress_rules_cli,
+                    BCMCLI_MAKE_PARM("epon_ni", "EPON NI", BCMCLI_PARM_UNUMBER, 0),
+                    BCMCLI_MAKE_PARM("mac_address", "link MAC", BCMCLI_PARM_MAC, 0));
+
+    BCMCLI_MAKE_CMD(oam_dir, "dpoe_set_basic_queue_config", "DPoE set basic queue config for 1 link/1 port",
+                    epon_oam_dpoe_set_basic_queue_config_cli,
+                    BCMCLI_MAKE_PARM("epon_ni", "EPON NI", BCMCLI_PARM_UNUMBER, 0),
+                    BCMCLI_MAKE_PARM("mac_address", "link MAC", BCMCLI_PARM_MAC, 0),
+                    BCMCLI_MAKE_PARM("up_size", "upstream queue size", BCMCLI_PARM_UNUMBER, 0),
+                    BCMCLI_MAKE_PARM("dn_size", "downstream queue size", BCMCLI_PARM_UNUMBER, 0));
+
+    BCMCLI_MAKE_CMD(oam_dir, "dpoe_add_ingress_rules_network_pon", "DPoE add ingress rules for network PON",
+                    epon_oam_dpoe_add_ingress_rules_network_pon_cli,
+                    BCMCLI_MAKE_PARM("epon_ni", "EPON NI", BCMCLI_PARM_UNUMBER, 0),
+                    BCMCLI_MAKE_PARM("mac_address", "link MAC", BCMCLI_PARM_MAC, 0));
+    BCMCLI_MAKE_CMD(oam_dir, "dpoe_add_ingress_rules_user_port", "DPoE add ingress rules for user port",
+                    epon_oam_dpoe_add_ingress_rules_user_port_cli,
+                    BCMCLI_MAKE_PARM("epon_ni", "EPON NI", BCMCLI_PARM_UNUMBER, 0),
+                    BCMCLI_MAKE_PARM("mac_address", "link MAC", BCMCLI_PARM_MAC, 0));
+    BCMCLI_MAKE_CMD(oam_dir, "dpoe_add_ingress_rules", "DPoE add ingress rules",
+                    epon_oam_dpoe_add_ingress_rules_cli,
+                    BCMCLI_MAKE_PARM("epon_ni", "EPON NI", BCMCLI_PARM_UNUMBER, 0),
+                    BCMCLI_MAKE_PARM("mac_address", "link MAC", BCMCLI_PARM_MAC, 0));
+    BCMCLI_MAKE_CMD(oam_dir, "dpoe_add_ingress_rules_with_vlan", "DPoE add ingress rules with VLAN",
+                    epon_oam_dpoe_add_ingress_rules_with_vlan_cli,
+                    BCMCLI_MAKE_PARM("epon_ni", "EPON NI", BCMCLI_PARM_UNUMBER, 0),
+                    BCMCLI_MAKE_PARM("mac_address", "link MAC", BCMCLI_PARM_MAC, 0),
+                    BCMCLI_MAKE_PARM("vlan", "VLAN", BCMCLI_PARM_UNUMBER, 0));
+
+    BCMCLI_MAKE_CMD(oam_dir, "dpoe_enable_user_traffic", "DPoE enable user traffic",
+                    epon_oam_dpoe_enable_user_traffic_cli,
+                    BCMCLI_MAKE_PARM("epon_ni", "EPON NI", BCMCLI_PARM_UNUMBER, 0),
+                    BCMCLI_MAKE_PARM("mac_address", "link MAC", BCMCLI_PARM_MAC, 0));
+
+    BCMCLI_MAKE_CMD(oam_dir, "dpoe_fw_upgrade", "DPoE firwmare upgrade",
+                    epon_oam_dpoe_start_upgrade_cli,
+                    BCMCLI_MAKE_PARM("epon_ni", "EPON NI", BCMCLI_PARM_UNUMBER, 0),
+                    BCMCLI_MAKE_PARM("mac_address", "link MAC", BCMCLI_PARM_MAC, 0),
+                    BCMCLI_MAKE_PARM("fw_file", "Firmware file", BCMCLI_PARM_STRING, 0),
+                    BCMCLI_MAKE_PARM("block_size", "Block size", BCMCLI_PARM_UNUMBER, 0),
+                    BCMCLI_MAKE_PARM("timeout", "Timeout in seconds", BCMCLI_PARM_UNUMBER, 0));
+
+    BCMCLI_MAKE_CMD(oam_dir, "dpoe_reset_onu", "DPoE reset ONU",
+                    epon_oam_dpoe_reset_onu_cli,
+                    BCMCLI_MAKE_PARM("epon_ni", "EPON NI", BCMCLI_PARM_UNUMBER, 0),
+                    BCMCLI_MAKE_PARM("mac_address", "link MAC", BCMCLI_PARM_MAC, 0));
+#endif
+}
+
diff --git a/bcm68620_release/release/host_reference/user_appl/epon_oam_cli/bcmolt_user_appl_epon_oam_cli.h b/bcm68620_release/release/host_reference/user_appl/epon_oam_cli/bcmolt_user_appl_epon_oam_cli.h
new file mode 100644
index 0000000..99b4ae8
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/epon_oam_cli/bcmolt_user_appl_epon_oam_cli.h
@@ -0,0 +1,38 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef _BCMOLT_USER_APPL_EPON_OAM_CLI_H_
+#define _BCMOLT_USER_APPL_EPON_OAM_CLI_H_
+
+#include "bcmcli.h"
+#include "bcmolt_msg.h"
+
+void bcmolt_user_appl_epon_oam_cli_init(bcmcli_entry *top_dir);
+
+#endif
diff --git a/bcm68620_release/release/host_reference/user_appl/image_transfer/Makefile b/bcm68620_release/release/host_reference/user_appl/image_transfer/Makefile
new file mode 100644
index 0000000..e2392f5
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/image_transfer/Makefile
@@ -0,0 +1,12 @@
+# File transfer application
+
+ifeq ("$(ENABLE_CLI)", "y")
+    MOD_NAME = bcm_image_transfer
+    MOD_TYPE = lib
+    MOD_DEPS = host_api
+    srcs = bcmolt_image_transfer.c bcmolt_image_transfer_user.c bcmolt_image_transfer_cli.c
+    
+    ifeq ("$(OS_KERNEL)", "linux")
+        MOD_DEPS += dev_log_linux
+    endif
+endif
diff --git a/bcm68620_release/release/host_reference/user_appl/image_transfer/bcmolt_image_transfer.c b/bcm68620_release/release/host_reference/user_appl/image_transfer/bcmolt_image_transfer.c
new file mode 100644
index 0000000..7085eaa
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/image_transfer/bcmolt_image_transfer.c
@@ -0,0 +1,507 @@
+/*
+<:copyright-BRCM:2014:DUAL/GPL:standard
+
+   Copyright (c) 2014 Broadcom Corporation
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#include <bcmtr_interface.h>
+#include <bcmcli.h>
+#include <libgen.h>
+#include "bcmolt_api.h"
+#include "bcm_dev_log.h"
+#include "bcmolt_image_transfer.h"
+#include "bcmolt_image_transfer_user.h"
+
+static bcmuser_mftp_block_size_get mftp_block_size_get;
+static bcmuser_mftp_crc_get mftp_crc_get_cb;
+static bcmuser_mftp_image_read mftp_read_data_cb;
+static bcmuser_mftp_notification_rx mftp_notify_user_cb;
+static mftp_context mftp_context_db[BCMTR_MAX_OLTS];
+
+static bcmos_errno mftp_ind_rx_cb_register(bcmolt_devid device);
+static bcmos_errno mftp_ind_rx_cb_unregister(bcmolt_devid device);
+
+/* ========================================================================== */
+static bcmolt_image_transfer_status mftp_err_to_status(bcmos_errno err)
+{
+    bcmolt_image_transfer_status status;
+    switch (err)
+    {
+    case BCM_ERR_OK:
+        status = BCMOLT_IMAGE_TRANSFER_STATUS_SUCCESS;
+        break;
+    case BCM_ERR_NOMEM:
+        status = BCMOLT_IMAGE_TRANSFER_STATUS_MEMORY_ALLOCATION_FAILURE;
+        break;
+    case BCM_ERR_INCOMPLETE_TERMINATION:
+        status = BCMOLT_IMAGE_TRANSFER_STATUS_PREMATURE_TERMINATION;
+        break;
+    case BCM_ERR_CHECKSUM:
+        status = BCMOLT_IMAGE_TRANSFER_STATUS_CRC_ERROR;
+        break;
+    case BCM_ERR_OVERFLOW:
+        status = BCMOLT_IMAGE_TRANSFER_STATUS_INTERNAL_ERROR;
+        break;
+    case BCM_ERR_OUT_OF_SYNC:
+        status = BCMOLT_IMAGE_TRANSFER_STATUS_BLOCK_OUT_OF_SYNC;
+        break;
+    case BCM_ERR_STATE:
+        status = BCMOLT_IMAGE_TRANSFER_STATUS_INVALID_STATE;
+        break;
+    case BCM_ERR_IMAGE_TYPE:
+        status = BCMOLT_IMAGE_TRANSFER_STATUS_UNSUPPORTED_FILE_TYPE;
+        break;
+    default:
+        status = BCMOLT_IMAGE_TRANSFER_STATUS_INTERNAL_ERROR;
+        break;
+    }
+    return status;
+}
+
+/* ========================================================================== */
+const char *bcmolt_user_mftp_status_to_str(bcmolt_image_transfer_status status)
+{
+    static const char *mftp_status_to_str_table[BCMOLT_IMAGE_TRANSFER_STATUS__NUM_OF] =
+    {
+        [BCMOLT_IMAGE_TRANSFER_STATUS_SUCCESS] = "Succeeded",
+        [BCMOLT_IMAGE_TRANSFER_STATUS_MEMORY_ALLOCATION_FAILURE] = "ERROR: Memory allocation",
+        [BCMOLT_IMAGE_TRANSFER_STATUS_UNSUPPORTED_FILE_TYPE] = "ERROR: Invalid image type",
+        [BCMOLT_IMAGE_TRANSFER_STATUS_CRC_ERROR] = "ERROR: Checksum",
+        [BCMOLT_IMAGE_TRANSFER_STATUS_BLOCK_OUT_OF_SYNC] = "ERROR: Block out-of-sync",
+        [BCMOLT_IMAGE_TRANSFER_STATUS_INTERNAL_ERROR] = "ERROR: Buffer overflow",
+        [BCMOLT_IMAGE_TRANSFER_STATUS_INVALID_STATE] = "ERROR: Invalid state",
+        [BCMOLT_IMAGE_TRANSFER_STATUS_PREMATURE_TERMINATION] = "ERROR: Premature termination",
+        [BCMOLT_IMAGE_TRANSFER_STATUS_ACK_TIMEOUT] = "ERROR: ACK timeout"
+    };
+    return (status >= BCMOLT_IMAGE_TRANSFER_STATUS__NUM_OF) ? "<unknown>" : mftp_status_to_str_table[status];
+}
+
+/* ========================================================================== */
+static inline mftp_context *mftp_context_get(bcmolt_devid device)
+{
+    return &mftp_context_db[device];
+}
+
+/* ========================================================================== */
+/** convert device ID to module ID */
+static inline bcmos_module_id mftp_device_id_to_module_id(bcmolt_devid device)
+{
+    return (BCMOS_MODULE_ID_USER_APPL_IMAGE_TRANSFER0 + device);
+}
+
+/* ========================================================================== */
+/** examines the ACK response. */
+static bcmolt_image_transfer_status mftp_check_params(mftp_context *context,
+    bcmolt_device_image_transfer_complete_data *ack_data)
+{
+    bcmolt_image_transfer_status status = BCMOLT_IMAGE_TRANSFER_STATUS_SUCCESS;
+
+    if (context->block_num != ack_data->block_number)
+    {
+        BCM_LOG(DEBUG, context->log_id, "ACK block # mismatch: exp=%u ack=%u\n", context->block_num, ack_data->block_number);
+        status = BCMOLT_IMAGE_TRANSFER_STATUS_BLOCK_OUT_OF_SYNC;
+    }
+    else if (context->image_type != ack_data->image_type)
+    {
+        BCM_LOG(DEBUG, context->log_id, "ACK image type mismatch: exp=%u ack=%u\n", context->image_type, ack_data->image_type);
+        status = BCMOLT_IMAGE_TRANSFER_STATUS_UNSUPPORTED_FILE_TYPE;
+    }
+    else if (ack_data->status != BCMOLT_IMAGE_TRANSFER_STATUS_SUCCESS)
+    {
+        BCM_LOG(DEBUG, context->log_id, "OLT returned an error: %s\n", bcmolt_user_mftp_status_to_str(ack_data->status));
+        status = ack_data->status;
+    }
+    return status;
+}
+
+/* ========================================================================== */
+static void mftp_terminate(bcmolt_devid device, bcmolt_device_image_type image_type,
+    uint32_t block_num, bcmolt_image_transfer_status status)
+{
+    mftp_context *context = mftp_context_get(device);
+    bcmos_errno rc = mftp_ind_rx_cb_unregister(device);
+
+    if (rc != BCM_ERR_OK)
+    {
+        BCM_LOG(ERROR, context->log_id, "Failed to un-register IND callback\n");
+    }
+    mftp_notify_user_cb(device, image_type, block_num, status);
+    context->status = MFTP_STATUS_DISABLED;
+}
+
+/* ========================================================================== */
+/** Sends the image transfer start operation to the OLT. */
+static bcmos_errno mftp_send_wrq(bcmolt_devid device, bcmolt_device_image_type image_type,
+    uint32_t image_size, uint32_t crc32, bcmolt_str_64 *image_name)
+{
+    bcmolt_device_image_transfer_start oper;
+    bcmolt_device_key key = { };
+
+    BCMOLT_OPER_INIT(&oper, device, image_transfer_start, key);
+    BCMOLT_OPER_PROP_SET(&oper, device, image_transfer_start, image_type, image_type);
+    BCMOLT_OPER_PROP_SET(&oper, device, image_transfer_start, image_size, image_size);
+    BCMOLT_OPER_PROP_SET(&oper, device, image_transfer_start, crc32, crc32);
+    BCMOLT_OPER_PROP_SET(&oper, device, image_transfer_start, image_name, *image_name);
+    return bcmolt_oper_submit(device, &oper.hdr);
+}
+
+/* ========================================================================== */
+/** Sends a data block to the OLT. */
+static bcmos_errno mftp_send_data(bcmolt_devid device, uint8_t *buf, uint32_t buf_size,
+    uint32_t block_number, bcmos_bool more_data)
+{
+    bcmolt_device_key key = {.reserved = 0};
+    bcmolt_device_image_transfer_data oper = {};
+    bcmolt_u8_list_u16_hex data;
+    data.len = buf_size;
+    data.val = buf;
+
+    /* Builds a transport message for BCMOLT_DEVICE_OPER_ID_IMAGE_TRANSFER_DATA */
+    BCMOLT_OPER_INIT(&oper, device, image_transfer_data, key);
+    oper.hdr.hdr.type = BCMOLT_MSG_TYPE_SET;
+    BCMOLT_OPER_PROP_SET(&oper, device, image_transfer_data, block_number, block_number);
+    BCMOLT_OPER_PROP_SET(&oper, device, image_transfer_data, more_data, more_data);
+    BCMOLT_OPER_PROP_SET(&oper, device, image_transfer_data, data, data);
+    return bcmolt_oper_submit(device, &oper.hdr);
+}
+
+/* ========================================================================== */
+/* handler for the OPERATION device.image_transfer_start. */
+bcmos_errno bcmolt_user_mftp_start(bcmolt_devid device, bcmolt_device_image_type image_type)
+{
+    mftp_context *context = mftp_context_get(device);
+    uint32_t image_size;
+    uint32_t crc32;
+    const char *path_name;
+    char file_name[MFTP_MAX_PATH_NAME_LEN];
+    char *base_name;
+    bcmolt_str_64 image_name;
+    bcmos_errno rc = BCM_ERR_OK;
+
+    if (context->status != MFTP_STATUS_DISABLED)
+    {
+        return BCM_ERR_IN_PROGRESS;
+    }
+
+    rc = bcmuser_image_transfer_file_size_get(device, image_type, &image_size);
+    if (rc != BCM_ERR_OK)
+    {
+        BCM_LOG(ERROR, context->log_id, "Failed to get the image size\n");
+        return rc;
+    }
+
+    path_name = bcmuser_device_image_name_get(image_type);
+    if (path_name == NULL)
+    {
+        BCM_LOG(ERROR, context->log_id, "File not found\n");
+        return BCM_ERR_PARM;
+    }
+    if (strlen(path_name) >= sizeof(file_name))
+    {
+        BCM_LOG(ERROR, context->log_id, "Path name too long\n");
+        return BCM_ERR_PARM;
+    }
+    (void)strcpy(file_name, path_name);       /* to make lint happy. */
+
+    base_name = basename(file_name);
+    if (strlen(base_name) >= sizeof(image_name))
+    {
+        BCM_LOG(ERROR, context->log_id, "File name too long\n");
+        return BCM_ERR_PARM;
+    }
+    (void)strcpy(image_name.str, base_name);
+
+    context->status = MFTP_STATUS_WAITING_ACK;
+    context->block_num = 0;
+    context->image_type = image_type;
+    crc32 = mftp_crc_get_cb(device, image_type);
+    BCM_LOG(DEBUG, context->log_id, "Image size=%u crc=0x%x\n", image_size, crc32);
+
+    rc = mftp_ind_rx_cb_register(device);
+    if (rc != BCM_ERR_OK)
+    {
+        BCM_LOG(ERROR, context->log_id, "Failed to register IND callback\n");
+        BUG();
+    }
+
+    rc = mftp_send_wrq(device, image_type, image_size, crc32, &image_name);
+    if (BCM_ERR_OK != rc)
+    {
+        BCM_LOG(DEBUG, context->log_id, "WRQ OPER failed. %s\n", bcmos_strerror(rc));
+        (void)mftp_ind_rx_cb_unregister(device);
+        context->status = MFTP_STATUS_DISABLED;
+    }
+    else
+    {
+        bcmos_timer_start(&context->timer, MFTP_ACK_TIMEOUT_US);
+    }
+    return rc;
+}
+
+/* ========================================================================== */
+static void mftp_process_last_ack(bcmolt_devid device, bcmolt_device_image_transfer_complete_data *ack_data)
+{
+    bcmolt_image_transfer_status status;
+    mftp_context *context = mftp_context_get(device);
+
+    status = mftp_check_params(context, ack_data);
+    mftp_terminate(device, ack_data->image_type, ack_data->block_number, status);
+}
+
+/* ========================================================================== */
+/* reads a data block using customer-provided callback and sends it to the embedded. */
+static void mftp_process_ack(bcmolt_devid device, bcmolt_device_image_transfer_complete_data *ack_data)
+{
+    uint32_t offset = 0;    /* file-position*/
+    uint32_t bytes_read = 0;
+    bcmos_bool more_data;
+    bcmos_errno rc = BCM_ERR_OK;
+    bcmolt_image_transfer_status status;
+    mftp_context *context = mftp_context_get(device);
+
+    status = mftp_check_params(context, ack_data);
+    if (status != BCMOLT_IMAGE_TRANSFER_STATUS_SUCCESS)
+    {
+        mftp_terminate(device, context->image_type, ack_data->block_number, status);
+        return;
+    }
+
+    offset = (context->block_num * context->block_size);
+    context->block_num++;
+
+    /* CALL CUSTOMER-PROVIDED CALLBACK */
+    bytes_read = mftp_read_data_cb(device, context->image_type, offset,
+        context->buf, context->block_size);  /* bcmuser_mftp_read_data() */
+
+    more_data = !(bytes_read < context->block_size);
+
+    rc = mftp_send_data(device, context->buf, bytes_read, context->block_num, more_data);
+    if (BCM_ERR_OK != rc)
+    {
+        BCM_LOG(DEBUG, context->log_id, "DATA OPER failed. Block %u. %s\n", context->block_num, bcmos_strerror(rc));
+        mftp_terminate(device, ack_data->image_type, ack_data->block_number, mftp_err_to_status(rc));
+        return;
+    }
+
+    BCM_LOG(DEBUG, context->log_id, "Sent block#=%u buf_size=%u more=%u\n", context->block_num, bytes_read, more_data);
+
+    context->status = (more_data) ? MFTP_STATUS_WAITING_ACK : MFTP_STATUS_WAITING_LAST_ACK;
+
+    bcmos_timer_start(&context->timer, MFTP_ACK_TIMEOUT_US);
+}
+
+/* ========================================================================== */
+/* ACK indication callback */
+static void mftp_process_ind(bcmolt_devid olt, bcmolt_msg *msg)
+{
+    mftp_context *context = mftp_context_get(olt);
+    bcmolt_device_image_transfer_complete *ack;
+    bcmolt_device_image_transfer_complete_data *ack_data;
+
+    ack = (bcmolt_device_image_transfer_complete *)msg;
+    ack_data = &ack->data;
+
+    BCM_LOG(DEBUG, context->log_id, "## ACK: obj=%u, group=%u, image=%u, block=%u, status=%u\n",
+        msg->obj_type, msg->group, ack_data->image_type, ack_data->block_number, ack_data->status);
+
+    switch (context->status)
+    {
+    case MFTP_STATUS_WAITING_ACK:
+        bcmos_timer_stop(&context->timer);
+        mftp_process_ack(olt, ack_data);
+        break;
+    case MFTP_STATUS_WAITING_LAST_ACK:
+        bcmos_timer_stop(&context->timer);
+        mftp_process_last_ack(olt, ack_data);
+        break;
+    default:
+        /* This could happen when the START operation fails. */
+        BCM_LOG(DEBUG, context->log_id, "Unexpected ACK\n");
+        break;
+    }
+
+    bcmolt_msg_free(msg);
+}
+
+/* ========================================================================== */
+static bcmos_errno mftp_ind_rx_cb_register(bcmolt_devid device)
+{
+    bcmtr_handler_parm tparm = {
+        .group = BCMOLT_MGT_GROUP_AUTO,
+        .object = BCMOLT_OBJ_ID_DEVICE,
+        .subgroup = BCMOLT_DEVICE_AUTO_ID_IMAGE_TRANSFER_COMPLETE,
+        .app_cb = mftp_process_ind,
+        .flags = BCMOLT_AUTO_FLAGS_DISPATCH,
+    };
+    mftp_context *context = mftp_context_get(device);
+    uint8_t inst;
+    bcmos_errno rc = BCM_ERR_OK;
+
+    tparm.module = context->module_id;
+
+    for (inst = 0; (inst < BCMTR_MAX_INSTANCES) && (rc == BCM_ERR_OK); inst++)
+    {
+        tparm.instance = inst;
+        rc = bcmtr_msg_handler_unregister(device, &tparm);
+        rc = (rc == BCM_ERR_OK) ? bcmtr_msg_handler_register(device, &tparm) : rc;
+    }
+    return rc;
+}
+
+/* ========================================================================== */
+static bcmos_errno mftp_ind_rx_cb_unregister(bcmolt_devid device)
+{
+    bcmtr_handler_parm tparm = {
+        .group = BCMOLT_MGT_GROUP_AUTO,
+        .object = BCMOLT_OBJ_ID_DEVICE,
+        .subgroup = BCMOLT_DEVICE_AUTO_ID_IMAGE_TRANSFER_COMPLETE,
+    };
+    uint8_t inst;
+    bcmos_errno rc = BCM_ERR_OK;
+
+    for (inst = 0; (inst < BCMTR_MAX_INSTANCES) && (rc == BCM_ERR_OK); inst++)
+    {
+        tparm.instance = inst;
+        rc = bcmtr_msg_handler_unregister(device, &tparm);
+    }
+    return rc;
+}
+
+/* ========================================================================== */
+/* ACK response timeout handler */
+static bcmos_timer_rc mftp_ack_timeout_handler(bcmos_timer *timer, long data)
+{
+    bcmolt_devid device = (bcmolt_devid)data;
+    mftp_context *context = mftp_context_get(device);
+
+    if ((context->status == MFTP_STATUS_WAITING_ACK) || (context->status == MFTP_STATUS_WAITING_LAST_ACK))
+    {
+        mftp_terminate(device, context->image_type, context->block_num, BCMOLT_IMAGE_TRANSFER_STATUS_ACK_TIMEOUT);
+    }
+    else
+    {
+        BCM_LOG(INFO, context->log_id, "timer in irrelevant state\n");
+    }
+    return BCMOS_TIMER_STOP;
+}
+
+/* ========================================================================== */
+static bcmos_errno mftp_init_timers(bcmolt_devid device)
+{
+    mftp_context *context = mftp_context_get(device);
+    bcmos_timer_parm timer_params = {};
+    bcmos_errno rc = BCM_ERR_OK;
+
+    /* If timer was already created, then we don't need to re-create it */
+    if ((context->timer.flags & BCMOS_TIMER_FLAG_VALID) != 0)
+        return BCM_ERR_OK;
+
+    timer_params.name     = context->name;
+    timer_params.owner    = context->module_id;
+    timer_params.periodic = BCMOS_FALSE;
+    timer_params.handler  = mftp_ack_timeout_handler;
+    timer_params.data     = (long)device;
+
+    rc = bcmos_timer_create(&context->timer, &timer_params);
+    if (rc != BCM_ERR_OK)
+    {
+        BCM_LOG(ERROR, context->log_id, "Timer creation failed. %s\n", bcmos_strerror(rc));
+    }
+    return rc;
+}
+
+/* ========================================================================== */
+static bcmos_errno mftp_init_tasks(bcmolt_devid device)
+{
+    mftp_context    *context = mftp_context_get(device);
+    bcmos_task_parm  task_params = {};
+    bcmos_errno      rc = BCM_ERR_OK;
+
+    task_params.name         = context->name;
+    task_params.priority     = TASK_PRIORITY_USER_APPL_IMAGE_TRANSFER;
+    task_params.core         = BCMOS_CPU_CORE_ANY; /* No CPU affinity */
+    task_params.init_handler = NULL;
+    task_params.data         = (long)device;
+
+    rc = bcmos_task_create(&context->task, &task_params);
+    if (rc != BCM_ERR_OK)
+    {
+        BCM_LOG(ERROR, context->log_id, "Task creation failed. %s \n", bcmos_strerror(rc));
+    }
+    return rc;
+}
+
+/* ========================================================================== */
+static bcmos_errno mftp_init_modules(bcmolt_devid device)
+{
+    mftp_context      *context = mftp_context_get(device);
+    bcmos_module_parm  module_params = {};
+    bcmos_errno        rc = BCM_ERR_OK;
+
+    context->module_id = mftp_device_id_to_module_id(device);
+    module_params.qparm.name = context->name;
+    module_params.qparm.size = BCMOS_MSG_POOL_DEFAULT_SIZE;
+    module_params.init       = NULL;
+
+    rc = bcmos_module_create(context->module_id, &context->task, &module_params);
+    if (rc != BCM_ERR_OK)
+    {
+        BCM_LOG(ERROR, context->log_id, "Module creation failed. %s \n", bcmos_strerror(rc));
+    }
+    return rc;
+}
+
+/* ========================================================================== */
+/* Initializes the MFTP parameters. */
+void bcmolt_user_mftp_init(void)
+{
+    mftp_context *context;
+    bcmolt_devid device;
+    bcmos_errno rc = BCM_ERR_OK;
+
+    /* The customer should provide these callback functions. */
+    mftp_read_data_cb = bcmuser_image_transfer_read_data;
+    mftp_notify_user_cb = bcmuser_image_transfer_notification_rx;
+    mftp_block_size_get = bcmuser_image_transfer_block_size_get;
+    mftp_crc_get_cb = bcmuser_image_transfer_crc_get;
+
+    /* initialize some parameters, i.e. the .status and .timer.
+       other parameters are (re)built upon START, so no need to init. */
+    for (device = 0; (device < BCMTR_MAX_OLTS) && (rc == BCM_ERR_OK); device++)
+    {
+        context = mftp_context_get(device);
+        context->status = MFTP_STATUS_DISABLED;
+        context->block_size = mftp_block_size_get();
+        context->buf = bcmos_calloc(context->block_size);
+        rc = (context->buf == NULL) ? BCM_ERR_NOMEM : rc;
+        snprintf(context->name, sizeof(context->name), "mftp%u", device);
+        rc = (rc == BCM_ERR_OK) ? mftp_init_tasks(device) : rc;
+        rc = (rc == BCM_ERR_OK) ? mftp_init_modules(device) : rc;
+        rc = (rc == BCM_ERR_OK) ? mftp_init_timers(device) : rc;
+        context->log_id = bcm_dev_log_id_register(context->name, DEV_LOG_LEVEL_INFO, DEV_LOG_ID_TYPE_BOTH);
+    }
+}
+
diff --git a/bcm68620_release/release/host_reference/user_appl/image_transfer/bcmolt_image_transfer.h b/bcm68620_release/release/host_reference/user_appl/image_transfer/bcmolt_image_transfer.h
new file mode 100644
index 0000000..0ffea3c
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/image_transfer/bcmolt_image_transfer.h
@@ -0,0 +1,86 @@
+/*
+<:copyright-BRCM:2014:DUAL/GPL:standard
+
+   Copyright (c) 2014 Broadcom Corporation
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef _BCMOLT_IMAGE_TRANSFER_H_
+#define _BCMOLT_IMAGE_TRANSFER_H_
+
+#include <bcmolt_model_types.h>
+#include <bcmos_system.h>
+
+/* Returns a data block of given size of given image type at given offset. */
+typedef int (*bcmuser_mftp_image_read)(bcmolt_devid device, bcmolt_device_image_type image_type,
+    uint32_t offset, uint8_t *buf, uint32_t buf_size);
+
+/* Returns the size of data block which is used for the data transfer. */
+typedef uint32_t (*bcmuser_mftp_block_size_get)(void);
+
+/* Returns the CRC32 checksum of entire image. */
+typedef uint32_t (*bcmuser_mftp_crc_get)(bcmolt_devid device,
+    bcmolt_device_image_type image_type);
+
+/* Callback to notify the user of the completion of the image transfer. */
+typedef void (*bcmuser_mftp_notification_rx)(bcmolt_devid device,
+    bcmolt_device_image_type image_type, uint32_t block_num, bcmolt_image_transfer_status status);
+
+typedef enum
+{
+    MFTP_STATUS_DISABLED,
+    MFTP_STATUS_WAITING_ACK,
+    MFTP_STATUS_WAITING_LAST_ACK
+} mftp_status;
+
+typedef struct
+{
+    /* runtime parameters */
+    mftp_status status;
+    uint32_t block_num;     /* block number sent. */
+    bcmolt_device_image_type image_type;
+
+    /* init-time parameters */
+    uint32_t block_size;
+    uint8_t *buf;
+    char name[MAX_TIMER_NAME_SIZE];
+    bcmos_task task;
+    bcmos_module_id module_id;
+    bcmos_timer timer;
+    dev_log_id log_id;
+} mftp_context;
+
+
+const char *bcmolt_user_mftp_status_to_str(bcmolt_image_transfer_status status);
+
+/** handler for the OPERATION device.image_transfer_start. */
+bcmos_errno bcmolt_user_mftp_start(bcmolt_devid device, bcmolt_device_image_type image_type);
+
+/** Initializes the MFTP parameters. */
+void bcmolt_user_mftp_init(void);
+
+#endif
+
+
diff --git a/bcm68620_release/release/host_reference/user_appl/image_transfer/bcmolt_image_transfer_cli.c b/bcm68620_release/release/host_reference/user_appl/image_transfer/bcmolt_image_transfer_cli.c
new file mode 100644
index 0000000..a29243a
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/image_transfer/bcmolt_image_transfer_cli.c
@@ -0,0 +1,87 @@
+/*
+<:copyright-BRCM:2014:DUAL/GPL:standard
+
+   Copyright (c) 2014 Broadcom Corporation
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+*/
+
+#include <bcmos_system.h>
+#include <bcmcli.h>
+#include <bcmolt_model_types.h>
+#include <bcmolt_msg.h>
+#include <bcmolt_api.h>
+#include <bcm_api_cli_helpers.h>
+#include "bcmolt_image_transfer.h"
+#include "bcmolt_image_transfer_cli.h"
+
+static bcmos_bool bcmolt_user_appl_device_state_is_ready(bcmolt_devid device)
+{
+    bcmos_errno err;
+    bcmolt_device_cfg cfg = {};
+    bcmolt_device_key key = {};
+
+    BCMOLT_CFG_INIT(&cfg, device, key);
+    BCMOLT_CFG_PROP_GET(&cfg, device, state);
+    err = bcmolt_cfg_get(device, &cfg.hdr);
+    return (err == BCM_ERR_OK) && (cfg.data.state == BCMOLT_DEVICE_STATE_READY);
+}
+
+/** start the image transfer.
+ */
+static bcmos_errno bcmolt_user_appl_cli_image_transfer_start(bcmcli_session *session,
+    const bcmcli_cmd_parm parms[], uint16_t n_parms)
+{
+    bcmolt_device_image_type image_type;
+    bcmolt_devid device = 0;
+    bcmos_errno err;
+
+    if (!bcmolt_user_appl_device_state_is_ready(device))
+    {
+        bcmcli_session_print(session, "device not connected\n");
+        return BCM_ERR_NOT_CONNECTED;
+    }
+
+    image_type = bcmcli_find_named_parm(session, "image_type")->value.unumber;
+
+    err = bcmolt_user_mftp_start(device, image_type);
+    if (err != BCM_ERR_OK)
+    {
+        bcmcli_session_print(session, "%s\n", bcmos_strerror(err));
+    }
+    return err;
+}
+
+bcmos_errno bcmolt_user_appl_cli_image_transfer_init(bcmcli_entry *top_dir)
+{
+    bcmcli_entry *dir = bcmcli_dir_add(top_dir, "image_transfer",
+        "Image Transfer user application", BCMCLI_ACCESS_ADMIN, NULL);
+    BCMOS_CHECK_RETURN_ERROR(!dir, BCM_ERR_NOMEM);
+
+    BCMCLI_MAKE_CMD(dir, "start", "Start Image Transfer application", bcmolt_user_appl_cli_image_transfer_start,
+        BCMCLI_MAKE_PARM_ENUM("image_type", "Image type", bcmolt_device_image_type_string_table, BCMCLI_PARM_FLAG_NONE));
+
+    return BCM_ERR_OK;
+}
+
diff --git a/bcm68620_release/release/host_reference/user_appl/image_transfer/bcmolt_image_transfer_cli.h b/bcm68620_release/release/host_reference/user_appl/image_transfer/bcmolt_image_transfer_cli.h
new file mode 100644
index 0000000..469f6d8
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/image_transfer/bcmolt_image_transfer_cli.h
@@ -0,0 +1,38 @@
+/*
+<:copyright-BRCM:2014:DUAL/GPL:standard
+
+   Copyright (c) 2014 Broadcom Corporation
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+*/
+
+#ifndef _BCMOLT_IMAGE_TRANSFER_CLI_H_
+#define _BCMOLT_IMAGE_TRANSFER_CLI_H_
+
+#include <bcmos_system.h>
+#include <bcmcli.h>
+
+bcmos_errno bcmolt_user_appl_cli_image_transfer_init(bcmcli_entry *top_dir);
+
+#endif
diff --git a/bcm68620_release/release/host_reference/user_appl/image_transfer/bcmolt_image_transfer_user.c b/bcm68620_release/release/host_reference/user_appl/image_transfer/bcmolt_image_transfer_user.c
new file mode 100644
index 0000000..b60fc83
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/image_transfer/bcmolt_image_transfer_user.c
@@ -0,0 +1,212 @@
+/*
+<:copyright-BRCM:2014:DUAL/GPL:standard
+
+   Copyright (c) 2014 Broadcom Corporation
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+/*
+ * This file is contains the customer-provided code.
+ * This file is provided as an example.
+ * The customer may change the file path/names.
+ * The customer may change the file access functions.
+ * The customer may adjust the data block size.
+ * Adding a new image type requires the object model change and sync up with
+ * the embedded size, which should be done by the Broadcom engineering.
+ */
+
+#include <bcmolt_conv.h>
+#include "bcmolt_image_transfer.h"
+#include "bcmolt_image_transfer_user.h"
+#include "bcmolt_utils.h"
+
+/* example names for debugging purpose only */
+#define BOOT_FILE "/opt/bcm68620/bcm68620_boot.bin"
+#define APPL_FILE "/opt/bcm68620/bcm68620_appl.bin"
+#define ITU_PON_ONU_FW_FILE "/opt/bcm68620/gpon_onu_fw.w"
+#define EPON_ONU_FW_FILE "/opt/bcm68620/epon_onu_fw.tkf"
+
+static int2str_t image_type2str[] =
+{
+    {BCMOLT_DEVICE_IMAGE_TYPE_BOOTLOADER, BOOT_FILE},
+    {BCMOLT_DEVICE_IMAGE_TYPE_APPLICATION, APPL_FILE},
+    {BCMOLT_DEVICE_IMAGE_TYPE_ITU_PON_ONU_FIRMWARE, ITU_PON_ONU_FW_FILE},
+    {BCMOLT_DEVICE_IMAGE_TYPE_EPON_ONU_FIRMWARE, EPON_ONU_FW_FILE},
+    {-1}
+};
+
+/** Get the device file name.
+ * 
+ * \param[in]   image_type      Image type. defined in the object model.
+ * 
+ * \return      string          Pointer to device image name, including the path.
+ */
+const char *bcmuser_device_image_name_get(bcmolt_device_image_type image_type)
+{
+    if (image_type < BCMOLT_DEVICE_IMAGE_TYPE__NUM_OF)
+    {
+        return int2str(image_type2str, image_type);
+    }
+    return NULL;
+}
+
+/** Open a file with given image type.
+ *
+ * \param[in]   image_type      Image type. defined in the object model.
+ * \param[out]  fpp             File pointer
+ *
+ * \return      bcmos_errno     Error code
+ */
+static bcmos_errno bcmuser_image_transfer_file_open(bcmolt_device_image_type image_type, FILE **fpp)
+{
+    bcmos_errno rc = BCM_ERR_PARM;
+
+    if (image_type < BCMOLT_DEVICE_IMAGE_TYPE__NUM_OF)
+    {
+        FILE *fp;
+        const char *fname = bcmuser_device_image_name_get(image_type);
+        fp = fopen(fname, "rb");
+        if (fp != NULL)
+        {
+            *fpp = fp;
+            rc = BCM_ERR_OK;
+        }
+    }
+    return rc;
+}
+
+/** Get the size of the file. 
+ * 
+ * \param[in]   device          Device ID
+ * \param[in]   image_type      Image type. defined in the object model.
+ * \param[out]  fsize           File size
+ * 
+ * \return      bcmos_errno 
+ */
+bcmos_errno bcmuser_image_transfer_file_size_get(bcmolt_devid device,
+    bcmolt_device_image_type image_type, uint32_t *fsize)
+{
+    FILE *fp;
+    long fp_prev;
+    bcmos_errno rc = BCM_ERR_OK;
+    (void)device;
+
+    rc = bcmuser_image_transfer_file_open(image_type, &fp);
+    if (rc == BCM_ERR_OK)
+    {
+        fp_prev = ftell(fp);
+        BUG_ON(fp_prev < 0);
+        BUG_ON(fseek(fp, 0, SEEK_END) != 0);
+        *fsize = ftell(fp);
+        BUG_ON(fseek(fp, fp_prev, SEEK_SET) != 0); /* go back to where we were. */
+        BUG_ON(fclose(fp) != 0);
+    }
+    return rc;
+}
+
+/** Read data from given offset.
+ *
+ * \param[in]   device          Device ID
+ * \param[in]   image_type      Image type. defined in the object model.
+ * \param[in]   offset          File position indicator
+ * \param[out]  buf             Buffer to store the data
+ * \param[in]   buf_size        Buffer size
+ *
+ * \return      Bytes read
+ */
+int bcmuser_image_transfer_read_data(bcmolt_devid device, bcmolt_device_image_type image_type,
+    uint32_t offset, uint8_t *buf, uint32_t buf_size)
+{
+    FILE *fp;
+    uint32_t bytes_read = 0;
+    (void)device;
+
+    if (bcmuser_image_transfer_file_open(image_type, &fp) == BCM_ERR_OK)
+    {
+        BUG_ON(fseek(fp, 0, SEEK_END) != 0);
+        if (offset < ftell(fp))
+        {
+            BUG_ON(fseek(fp, offset, SEEK_SET) != 0);
+            bytes_read = fread(buf, 1, buf_size, fp);
+        }
+        BUG_ON(fclose(fp) != 0);
+    }
+    return bytes_read;
+}
+
+/** Get the unit size of the transfer data block.
+ *
+ * \return      Size of the block in bytes.
+ */
+uint32_t bcmuser_image_transfer_block_size_get(void)
+{
+    return MFTP_DATA_BLOCK_SIZE;
+}
+
+/** Returns the CRC32 checksum of entire image.
+ * 
+ * \param[in]   device          Device ID
+ * \param[in]   image_type      Image type. defined in the object model.
+ * 
+ * \return      CRC32 checksum 
+ */
+uint32_t bcmuser_image_transfer_crc_get(bcmolt_devid device, bcmolt_device_image_type image_type)
+{
+    FILE *fp;
+    uint32_t crc = 0;
+    (void)device;
+
+    if (bcmuser_image_transfer_file_open(image_type, &fp) == BCM_ERR_OK)
+    {
+        while (1)
+        {
+            char buf[512]; /* any size is OK. */
+            uint32_t bytes_read;
+
+            bytes_read = fread(buf, 1, sizeof(buf), fp);
+            if (bytes_read == 0)
+                break;
+            crc = eth_calc_crc32(crc, buf, bytes_read);
+        }
+        BUG_ON(fclose(fp) != 0);
+    }
+    return crc;
+}
+
+/** Process the notification from the image transfer module.
+ *
+ * \param[in]   device          Device ID
+ * \param[in]   image_type      Image type. defined in the object model. 
+ * \param[in]   block_num       last block number 
+ * \param[in]   status          Image transfer status 
+ */
+void bcmuser_image_transfer_notification_rx(bcmolt_devid device,
+    bcmolt_device_image_type image_type, uint32_t block_num,
+    bcmolt_image_transfer_status status)
+{
+    const char *str = bcmolt_user_mftp_status_to_str(status);
+    bcmos_printf("Image transfer: %s: type=%u block=%u\n", str, image_type, block_num);
+}
+
diff --git a/bcm68620_release/release/host_reference/user_appl/image_transfer/bcmolt_image_transfer_user.h b/bcm68620_release/release/host_reference/user_appl/image_transfer/bcmolt_image_transfer_user.h
new file mode 100644
index 0000000..3a0366b
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/image_transfer/bcmolt_image_transfer_user.h
@@ -0,0 +1,100 @@
+/*
+<:copyright-BRCM:2014:DUAL/GPL:standard
+
+   Copyright (c) 2014 Broadcom Corporation
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef _BCMOLT_IMAGE_TRANSFER_USER_H_
+#define _BCMOLT_IMAGE_TRANSFER_USER_H_
+
+#include <bcmolt_model_types.h>
+#include <bcmos_system.h>
+
+#define MFTP_DATA_BLOCK_SIZE  512
+
+#define MFTP_ACK_TIMEOUT_US   (2 * 1000000)
+
+#define MFTP_MAX_PATH_NAME_LEN  256
+
+/** Get the device file name.
+ * 
+ * \param[in]   image_type      Image type. defined in the object model.
+ * 
+ * \return      string          Device image name, including the path.
+ */
+const char *bcmuser_device_image_name_get(bcmolt_device_image_type image_type);
+
+/** Get the size of the file. 
+ * 
+ * \param[in]   device          Device ID
+ * \param[in]   image_type      Image type. defined in the object model.
+ * \param[out]  fsize           File size
+ * 
+ * \return      bcmos_errno 
+ */
+bcmos_errno bcmuser_image_transfer_file_size_get(bcmolt_devid device,
+    bcmolt_device_image_type image_type, uint32_t *fsize);
+
+/** Read data from given offset.
+ *
+ * \param[in]   device          Device ID
+ * \param[in]   image_type      Image type. defined in the object model.
+ * \param[in]   offset          File position indicator
+ * \param[out]  buf             Buffer to store the data
+ * \param[in]   buf_size        Buffer size
+ *
+ * \return      Bytes read
+ */
+int bcmuser_image_transfer_read_data(bcmolt_devid device, bcmolt_device_image_type image_type,
+    uint32_t offset, uint8_t *buf, uint32_t buf_size);
+
+/** Get the unit size of the transfer data block.
+ *
+ * \return      Size of the block in bytes.
+ */
+uint32_t bcmuser_image_transfer_block_size_get(void);
+
+/** Returns the CRC32 checksum of entire image.
+ * 
+ * \param[in]   device          Device ID
+ * \param[in]   image_type      Image type. defined in the object model.
+ * 
+ * \return      CRC32 checksum 
+ */
+uint32_t bcmuser_image_transfer_crc_get(bcmolt_devid device, bcmolt_device_image_type image_type);
+
+/** Process the notification from the image transfer module.
+ *
+ * \param[in]   device          Device ID
+ * \param[in]   image_type      Image type. defined in the object model. 
+ * \param[in]   block_num       last block number 
+ * \param[in]   status          Image transfer status 
+ */
+void bcmuser_image_transfer_notification_rx(bcmolt_devid device,
+    bcmolt_device_image_type image_type, uint32_t block_num, bcmolt_image_transfer_status status);
+
+#endif
+
diff --git a/bcm68620_release/release/host_reference/user_appl/ngpon2_onu_tuning/Makefile b/bcm68620_release/release/host_reference/user_appl/ngpon2_onu_tuning/Makefile
new file mode 100755
index 0000000..9756ee5
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/ngpon2_onu_tuning/Makefile
@@ -0,0 +1,12 @@
+# ONU tuning application
+
+ifeq ("$(ENABLE_CLI)", "y")
+    MOD_NAME = bcm_user_appl_onu_tuning
+    MOD_TYPE = lib
+    MOD_DEPS = host_api common_gpon bcm_board
+    srcs = bcmolt_user_appl_onu_tuning.c bcmolt_user_appl_onu_tuning_cli.c
+    ifeq ("$(OS_KERNEL)", "linux")
+	MOD_DEPS += dev_log_linux
+    endif
+endif
+
diff --git a/bcm68620_release/release/host_reference/user_appl/ngpon2_onu_tuning/bcmolt_user_appl_onu_tuning.c b/bcm68620_release/release/host_reference/user_appl/ngpon2_onu_tuning/bcmolt_user_appl_onu_tuning.c
new file mode 100755
index 0000000..8d3b97b
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/ngpon2_onu_tuning/bcmolt_user_appl_onu_tuning.c
@@ -0,0 +1,312 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+*/
+
+#include <bcmolt_host_api.h>
+#include "bcmolt_user_appl_onu_tuning.h"
+
+#define ONU_TUNING_TASK_MSG_Q_SIZE 256
+
+typedef struct
+{
+    bcmos_msg os_msg;
+    bcmolt_auto *ind;
+    bcmolt_devid device_id;
+} ot_task_msg;
+
+static bcmolt_onu_tuning_context ot_context[BCMTR_MAX_OLTS];
+
+
+static bcmos_errno onu_tuning_init_task(bcmolt_devid device_id)
+{
+    bcmos_errno rc;
+    bcmos_task_parm task_params = {};
+    snprintf(ot_context[device_id].task.name, sizeof(ot_context[device_id].task.name), "user_appl_onu_tuning%u", device_id);
+    task_params.name = ot_context[device_id].task.name;
+    task_params.priority = TASK_PRIORITY_USER_APPL_ONU_TUNING;
+    task_params.core = BCMOS_CPU_CORE_ANY; /* No CPU affinity */
+    task_params.init_handler = NULL;
+    task_params.data = (long)device_id;
+    rc = bcmos_task_create(&ot_context[device_id].task, &task_params);
+    BCMOS_TRACE_CHECK_RETURN(rc, rc, "bcmos_task_create()\n");
+
+    return rc;
+}
+
+static bcmos_errno onu_tuning_init_module(bcmolt_devid device_id)
+{
+    /* This value is used inside bcmolt_onu_tuning_module_init for timer owner */
+    ot_context[device_id].device = device_id;
+    bcmos_module_parm module_params =
+    {
+        .qparm = { .name = "user_appl_onu_tuning",
+		.size = ONU_TUNING_TASK_MSG_Q_SIZE },
+    };
+
+    return bcmos_module_create(BCMOS_MODULE_ID_USER_APPL_ONU_TUNING_DEV0 + device_id, &ot_context[device_id].task, &module_params);
+}
+
+void bcmolt_onu_tuning_appl_init(bcmolt_devid device_id)
+{
+    bcmos_errno err;
+
+#ifdef ENABLE_LOG
+    char log_name[MAX_DEV_LOG_ID_NAME] = {};
+    snprintf(log_name, sizeof(log_name) - 1, "user_appl_onu_tuning%u", device_id);
+    ot_context[device_id].log_id = bcm_dev_log_id_register(log_name, DEV_LOG_LEVEL_DEBUG, DEV_LOG_ID_TYPE_BOTH);
+#endif
+
+    err = bcmos_mutex_create(&ot_context[device_id].mutex, 0, NULL);
+    BUG_ON(err != BCM_ERR_OK);
+
+    err = onu_tuning_init_task(device_id);
+    BUG_ON(err != BCM_ERR_OK);
+
+    err = onu_tuning_init_module(device_id);
+    BUG_ON(err != BCM_ERR_OK);
+
+}
+
+bcmos_errno bcmolt_onu_tuning_appl_start(bcmolt_devid device_id)
+{
+    bcmos_errno ret = BCM_ERR_OK;
+
+    bcmos_mutex_lock(&ot_context[device_id].mutex);
+
+    if (ot_context[device_id].is_running)
+    {
+        BCM_LOG(ERROR, ot_context[device_id].log_id, "ONU tuning application already running on device=%u\n", device_id);
+        ret = BCM_ERR_STATE;
+        goto exit;
+    }
+
+    ot_context[device_id].is_running = BCMOS_TRUE;
+    ot_context[device_id].device = device_id;
+
+    BCM_LOG(INFO, ot_context[device_id].log_id, "ONU tuning application started on device=%u\n", device_id);
+    ret = BCM_ERR_OK;
+
+exit:
+    bcmos_mutex_unlock(&ot_context[device_id].mutex);
+    return ret;
+}
+
+bcmos_errno bcmolt_onu_tuning_appl_stop(bcmolt_devid device_id)
+{
+    bcmos_errno ret;
+
+    bcmos_mutex_lock(&ot_context[device_id].mutex);
+
+    if (!ot_context[device_id].is_running)
+    {
+        ret = BCM_ERR_STATE;
+        goto exit;
+    }
+
+    ot_context[device_id].is_running = BCMOS_FALSE;
+    bcmos_timer_stop(&ot_context[device_id].timer);
+    BCM_LOG(INFO, ot_context[device_id].log_id, "ONU tuning application stopped on device=%u\n", device_id);
+    ret = BCM_ERR_OK;
+
+exit:
+    bcmos_mutex_unlock(&ot_context[device_id].mutex);
+    return ret;
+}
+
+bcmos_bool bcmolt_onu_tuning_appl_is_running(bcmolt_devid device_id)
+{
+    bcmos_bool ret;
+
+    bcmos_mutex_lock(&ot_context[device_id].mutex);
+    ret = ot_context[device_id].is_running;
+    bcmos_mutex_unlock(&ot_context[device_id].mutex);
+
+    return ret;
+}
+
+static bcmos_bool bcmolt_onu_tuning_is_interested(bcmolt_auto *ind)
+{
+    switch (ind->hdr.obj_type)
+    {
+    case BCMOLT_OBJ_ID_XGPON_ONU:
+        switch (ind->hdr.subgroup)
+        {
+        case BCMOLT_XGPON_ONU_AUTO_ID_TUNING_RESPONSE:
+            return BCMOS_TRUE;
+        case BCMOLT_XGPON_ONU_AUTO_ID_ONU_TUNING_IN_COMPLETED:
+		   return BCMOS_TRUE;
+	    default:
+		   break;
+        }
+        break;
+    default:
+        break;
+    }
+
+    return BCMOS_FALSE;
+}
+
+static void bcmolt_onu_tuning_ind_cb(bcmos_module_id module_id, bcmos_msg *os_msg)
+{
+	ot_task_msg *msg = (ot_task_msg *)os_msg;
+	bcmolt_pon_ni pon_ni;
+	bcmolt_pon_onu_id onu_id;
+	bcmolt_auto *ind = msg->ind;
+	bcmos_errno rc;
+
+	switch (msg->ind->hdr.obj_type)
+	{
+	case BCMOLT_OBJ_ID_XGPON_ONU:
+		switch (msg->ind->hdr.subgroup)
+		{
+			case BCMOLT_XGPON_ONU_AUTO_ID_TUNING_RESPONSE:
+			{
+				bcmolt_xgpon_onu_tuning_response *onu_tuning_response = (bcmolt_xgpon_onu_tuning_response *)ind;
+				onu_id = onu_tuning_response->key.onu_id;
+				pon_ni = onu_tuning_response->key.pon_ni;
+
+				if (onu_tuning_response->data.ack == BCMOS_TRUE && onu_tuning_response->data.result == BCMOLT_RESULT_SUCCESS)
+				{
+					BCM_LOG(INFO, ot_context[msg->device_id].log_id, "Indication BCMOLT_XGPON_ONU_AUTO_ID_TUNING_RESPONSE handled: PON:%u ONU:%u target_pon_ni=%u\n", pon_ni, onu_id, ot_context[msg->device_id].onu_db[onu_id].target_pon_ni);
+
+					/* start tuning in onu on target pon id */
+					bcmolt_xgpon_onu_key key = { .pon_ni = ot_context[msg->device_id].onu_db[onu_id].target_pon_ni, .onu_id = onu_id };
+					bcmolt_xgpon_onu_onu_tuning_in onu_tuning_in;
+
+					BCMOLT_OPER_INIT(&onu_tuning_in, xgpon_onu, onu_tuning_in, key);
+					rc = bcmolt_oper_submit(msg->device_id, &onu_tuning_in.hdr);
+					if (rc != BCM_ERR_OK)
+						BCM_LOG(ERROR, ot_context[msg->device_id].log_id, "ONU=%u tuning in to PON=%u failed\n", onu_id, ot_context[msg->device_id].onu_db[onu_id].target_pon_ni);
+				}
+
+				break;
+			}
+			case BCMOLT_XGPON_ONU_AUTO_ID_ONU_TUNING_IN_COMPLETED:
+			{
+				bcmolt_xgpon_onu_onu_tuning_in_completed *onu_tuning_in_completed = (bcmolt_xgpon_onu_onu_tuning_in_completed *)ind;
+				onu_id = onu_tuning_in_completed->key.onu_id;
+				pon_ni = onu_tuning_in_completed->key.pon_ni;
+				if (onu_tuning_in_completed->data.result == BCMOLT_RESULT_SUCCESS)
+				{
+					BCM_LOG(INFO, ot_context[msg->device_id].log_id, "Indication BCMOLT_XGPON_ONU_AUTO_ID_ONU_TUNING_IN_COMPLETED handled: PON:%u ONU:%u\n", pon_ni, onu_id);
+
+					/* start tuning out onu on source pon id */
+					bcmolt_xgpon_onu_key key = { .pon_ni = ot_context[msg->device_id].onu_db[onu_id].source_pon_ni, .onu_id = onu_id };
+					bcmolt_xgpon_onu_onu_tuning_out onu_tuning_out;
+
+					BCMOLT_OPER_INIT(&onu_tuning_out, xgpon_onu, onu_tuning_out, key);
+					BCMOLT_OPER_PROP_SET(&onu_tuning_out, xgpon_onu, onu_tuning_out, target_ds_pon_id, ot_context[msg->device_id].onu_db[onu_id].target_pon_id);
+					BCMOLT_OPER_PROP_SET(&onu_tuning_out, xgpon_onu, onu_tuning_out, target_us_pon_id, ot_context[msg->device_id].onu_db[onu_id].target_pon_id);
+					BCMOLT_OPER_PROP_SET(&onu_tuning_out, xgpon_onu, onu_tuning_out, time_to_switch, 1000);
+					BCMOLT_OPER_PROP_SET(&onu_tuning_out, xgpon_onu, onu_tuning_out, rollback, BCMOS_FALSE);
+					BCMOLT_OPER_PROP_SET(&onu_tuning_out, xgpon_onu, onu_tuning_out, status, BCMOLT_STATUS_OFF);
+					rc = bcmolt_oper_submit(msg->device_id, &onu_tuning_out.hdr);
+					if (rc != BCM_ERR_OK)
+						BCM_LOG(ERROR, ot_context[msg->device_id].log_id, "ONU=%u tuning out from PON=%u failed\n", onu_id, ot_context[msg->device_id].onu_db[onu_id].source_pon_ni);
+				}
+				break;
+			}
+			default:
+				break;
+		}
+	break;
+	default:
+		break;
+	}
+
+	/* free the cloned indication since we're done processing it */
+	bcmolt_msg_free(&msg->ind->hdr);
+	/* free the internal OS message handle */
+	bcmos_free(os_msg);
+}
+
+bcmos_errno bcmolt_onu_tuning_process_ind(bcmolt_devid device_id, bcmolt_auto *ind)
+{
+    bcmos_errno err;
+    bcmolt_msg *ind_clone = NULL;
+
+    /* if the application isn't running, don't listen to any indications */
+    if (!bcmolt_onu_tuning_appl_is_running(device_id))
+        return BCM_ERR_OK;
+
+    /* check to see if we have a handler for this type of indication */
+    if (!bcmolt_onu_tuning_is_interested(ind))
+        return BCM_ERR_OK;
+
+    /* clone the indication into newly-allocated memory so we can handle it after the original message has been freed */
+    err = bcmolt_msg_clone(&ind_clone, &ind->hdr);
+    if (err != BCM_ERR_OK)
+    {
+        BCM_LOG(ERROR, ot_context[device_id].log_id, "Indication clone failed: %s\n", bcmos_strerror(err));
+        return err;
+    }
+
+    /* send the clone to the internal task's message queue */
+    ot_task_msg *msg = bcmos_calloc(sizeof(*msg));
+    if (msg == NULL)
+    {
+        BCM_LOG(ERROR, ot_context[device_id].log_id, "Message calloc failed: %s\n", bcmos_strerror(err));
+        bcmolt_msg_free(ind_clone);
+        return BCM_ERR_NOMEM;
+    }
+    msg->os_msg.handler = bcmolt_onu_tuning_ind_cb;
+    msg->os_msg.release = bcmolt_os_msg_release_cb;
+    msg->device_id = device_id;
+    msg->ind = (bcmolt_auto *)ind_clone;
+
+    err = bcmos_msg_send_to_module(TASK_PRIORITY_USER_APPL_ONU_TUNING + device_id, &msg->os_msg, 0);
+    if (err != BCM_ERR_OK)
+    {
+        BCM_LOG(ERROR, ot_context[device_id].log_id, "Message send failed: %s\n", bcmos_strerror(err));
+        bcmolt_msg_free(ind_clone);
+        return err;
+    }
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno onu_tuning_update_onu_db (bcmolt_devid device_id, bcmolt_xgpon_onu_id onu_id, bcmolt_pon_ni source_pon_ni, bcmolt_pon_ni target_pon_ni, bcmolt_pon_id target_pon_id, bcmos_bool rollback)
+{
+	bcmos_errno ret;
+	 bcmos_mutex_lock(&ot_context[device_id].mutex);
+
+	    if (!ot_context[device_id].is_running)
+	    {
+	        ret = BCM_ERR_STATE;
+	        goto exit;
+	    }
+	    ot_context[device_id].onu_db[onu_id].target_pon_ni = target_pon_ni;
+	    ot_context[device_id].onu_db[onu_id].source_pon_ni = source_pon_ni;
+	    ot_context[device_id].onu_db[onu_id].target_pon_id = target_pon_id;
+	    ot_context[device_id].onu_db[onu_id].rollback = rollback;
+	    ret = BCM_ERR_OK;
+
+exit:
+	bcmos_mutex_unlock(&ot_context[device_id].mutex);
+	return ret;
+}
diff --git a/bcm68620_release/release/host_reference/user_appl/ngpon2_onu_tuning/bcmolt_user_appl_onu_tuning.h b/bcm68620_release/release/host_reference/user_appl/ngpon2_onu_tuning/bcmolt_user_appl_onu_tuning.h
new file mode 100755
index 0000000..681fcc2
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/ngpon2_onu_tuning/bcmolt_user_appl_onu_tuning.h
@@ -0,0 +1,98 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+*/
+
+#ifndef _BCMOLT_USER_APPL_ONU_TUNING_H_
+#define _BCMOLT_USER_APPL_ONU_TUNING_H_
+
+#include <bcmolt_host_api.h>
+
+typedef struct
+{
+	bcmolt_pon_ni target_pon_ni;
+	bcmolt_pon_ni source_pon_ni;
+	bcmolt_pon_id target_pon_id;
+	uint32_t time_to_switch;
+	bcmos_bool rollback;
+}bcmolt_onu_tuning_onu_db;
+
+typedef struct
+{
+    bcmos_task task;
+    bcmos_msg_pool msg_pool;
+    bcmos_mutex mutex;
+    bcmos_timer timer;
+    dev_log_id log_id;
+    bcmos_bool is_running;
+    bcmolt_devid device;
+    uint32_t *timeouts;
+    bcmolt_onu_tuning_onu_db onu_db[XGPON_MAX_NUM_OF_ONUS];
+} bcmolt_onu_tuning_context;
+
+typedef enum
+{
+
+	ONU_TUNING_MODE,
+} bcmolt_onu_tuning_mode;
+
+/** Initialize the ONU Tuning application (this should be called as part of application startup). */
+void bcmolt_onu_tuning_appl_init(bcmolt_devid device_id);
+
+/** Start the ONU Tuning application.
+ *
+ * \param[in] device            The device ID on which the application will be started.
+ * \return        BCM_ERR_OK if the application was started successfully, <0 otherwise.
+ */
+bcmos_errno bcmolt_onu_tuning_appl_start(bcmolt_devid device_id);
+
+/** Stop the ONU Tuning application.
+ *
+ * \return        BCM_ERR_OK if the application was stopped successfully, <0 otherwise.
+ */
+bcmos_errno bcmolt_onu_tuning_appl_stop(bcmolt_devid device_id);
+
+/** Query whether the ONU Tuning application is currently running.
+ *
+ * \return        BCMOS_TRUE if the application is running, BCMOS_FALSE otherwise.
+ */
+bcmos_bool bcmolt_onu_tuning_appl_is_running(bcmolt_devid device_id);
+
+/** Process an indication received.  If the ONU Tuning application is interested in the indication, the
+ * appropriate action will be taken.  If the application is not interested, the indication will be ignored.
+ *
+ *
+ * Note: this function does not free the indication.
+ * The caller must free it using bcmos_msg_free() after calling this function.
+ *
+ * \param[in] ind The indication that was received.
+ * \return        BCM_ERR_OK if the indication was processed successfully or ignored, <0 otherwise.
+ */
+bcmos_errno bcmolt_onu_tuning_process_ind(bcmolt_devid device_id, bcmolt_auto *ind);
+bcmos_errno onu_tuning_update_onu_db (bcmolt_devid device_id, bcmolt_xgpon_onu_id onu_id, bcmolt_pon_ni source_pon_ni, bcmolt_pon_ni target_pon_ni, bcmolt_pon_id target_pon_id, bcmos_bool rollback);
+
+#endif
diff --git a/bcm68620_release/release/host_reference/user_appl/ngpon2_onu_tuning/bcmolt_user_appl_onu_tuning_cli.c b/bcm68620_release/release/host_reference/user_appl/ngpon2_onu_tuning/bcmolt_user_appl_onu_tuning_cli.c
new file mode 100755
index 0000000..9d529e3
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/ngpon2_onu_tuning/bcmolt_user_appl_onu_tuning_cli.c
@@ -0,0 +1,187 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+*/
+
+#include <bcmolt_host_api.h>
+#include "bcmolt_user_appl_onu_tuning.h"
+#include "bcmolt_user_appl_onu_tuning_cli.h"
+#include <bcmolt_dev_selector.h>
+
+static bcmos_errno bcmolt_user_appl_onu_tuning_cli_create(bcmcli_entry *top_dir);
+
+static bcmcli_entry *onu_tuning_cli_dir;
+static bcmcli_entry *onu_tuning_cli_top_dir;
+static bcmos_bool onu_tuning_is_registered;
+
+/* Destroy CLI commands */
+static void onu_tuning_cli_destroy(void)
+{
+    if (onu_tuning_cli_dir)
+    {
+        bcmcli_token_destroy(onu_tuning_cli_dir);
+        onu_tuning_cli_dir = NULL;
+    }
+}
+
+/* Current device change indication */
+static void bcmolt_user_appl_onu_tuning_device_change_ind(bcmcli_session *session, bcmolt_devid dev)
+{
+    bcmolt_system_mode system_mode;
+    bcmos_errno err = bcmolt_system_mode_get(dev, &system_mode);
+
+    if (err != BCM_ERR_OK)
+    {
+        bcmcli_session_print(session, "Error device Id\n");
+        return;
+    }
+
+    if (system_mode == BCMOLT_SYSTEM_MODE_NGPON2__2_X_10_G)
+    {
+        bcmcli_session_print(session, "Building onu_tuning CLI for device %d\n", dev);
+
+        err = bcmolt_user_appl_onu_tuning_cli_create(onu_tuning_cli_top_dir);
+        if (err)
+        {
+            bcmcli_session_print(session, "Error building onu_tuning CLI\n");
+        }
+    }
+    else
+    {
+    	onu_tuning_cli_destroy();
+    }
+}
+
+static bcmos_errno onu_tuning_cmd_start(bcmcli_session *session, const bcmcli_cmd_parm parms[], uint16_t n_parms)
+{
+    return bcmolt_onu_tuning_appl_start(current_device);
+}
+
+static bcmos_errno onu_tuning_cmd_stop(bcmcli_session *session, const bcmcli_cmd_parm parms[], uint16_t n_parms)
+{
+    return bcmolt_onu_tuning_appl_stop(current_device);
+}
+
+static bcmos_errno onu_handover_cmd(bcmcli_session *session, const bcmcli_cmd_parm parms[], uint16_t n_parms)
+{
+	bcmolt_xgpon_onu_id onu_id;
+	bcmolt_pon_ni target_pon_ni;
+	bcmolt_pon_ni source_pon_ni;
+	uint32_t target_pon_administrative_label;
+	uint8_t target_pon_dwlch_id;
+	uint32_t time_to_switch;        /* Time to switch in ms */
+	bcmcli_cmd_parm *rollback_parm = bcmcli_find_named_parm(session, "rollback");
+	bcmos_bool rollback;
+	bcmos_errno rc = BCM_ERR_OK;
+	bcmolt_pon_id target_pon_id;
+
+
+	source_pon_ni = (bcmolt_pon_ni)bcmcli_find_named_parm(session, "source_pon_ni")->value.unumber;
+	target_pon_ni = (bcmolt_pon_ni)bcmcli_find_named_parm(session, "target_pon_ni")->value.unumber;
+	onu_id = (bcmolt_pon_onu_id)bcmcli_find_named_parm(session, "onu")->value.unumber;
+	target_pon_administrative_label = (uint32_t)bcmcli_find_named_parm(session, "target_pon_id_administrative_label")->value.unumber;
+	target_pon_dwlch_id = (uint8_t)bcmcli_find_named_parm(session, "target_pon_id_dwlch_id")->value.unumber;
+	target_pon_id.administrative_label = target_pon_administrative_label;
+	target_pon_id.dwlch_id = target_pon_dwlch_id;
+	time_to_switch = (uint32_t)bcmcli_find_named_parm(session, "time_to_switch")->value.unumber;
+
+	if (rollback_parm->value.unumber == 0)
+		rollback = BCMOS_FALSE;
+	else
+		rollback = BCMOS_TRUE;
+	/* update tuning in parameters in data base */
+	onu_tuning_update_onu_db(current_device, onu_id, source_pon_ni, target_pon_ni, target_pon_id, rollback);
+
+	bcmcli_session_print(session, "Tuning out ONU=%u source_pon_ni=%u target_pon_ni=%u \n", onu_id, source_pon_ni, target_pon_ni);
+
+	/* start tuning out onu on source pon id */
+	bcmolt_xgpon_onu_key key = { .pon_ni = source_pon_ni, .onu_id = onu_id };
+	bcmolt_xgpon_onu_onu_tuning_out onu_tuning_out;
+
+	BCMOLT_OPER_INIT(&onu_tuning_out, xgpon_onu, onu_tuning_out, key);
+	BCMOLT_OPER_PROP_SET(&onu_tuning_out, xgpon_onu, onu_tuning_out, target_ds_pon_id, target_pon_id);
+	BCMOLT_OPER_PROP_SET(&onu_tuning_out, xgpon_onu, onu_tuning_out, target_us_pon_id, target_pon_id);
+	BCMOLT_OPER_PROP_SET(&onu_tuning_out, xgpon_onu, onu_tuning_out, time_to_switch, time_to_switch);
+	BCMOLT_OPER_PROP_SET(&onu_tuning_out, xgpon_onu, onu_tuning_out, rollback, BCMOS_TRUE);
+	BCMOLT_OPER_PROP_SET(&onu_tuning_out, xgpon_onu, onu_tuning_out, status, BCMOLT_STATUS_ON);
+	rc = bcmolt_oper_submit(current_device, &onu_tuning_out.hdr);
+	if (rc != BCM_ERR_OK)
+		bcmcli_session_print(session, "ONU=%u tuning out from PON=%u failed\n", onu_id, source_pon_ni);
+
+	return BCM_ERR_OK;
+}
+
+bcmos_errno bcmolt_user_appl_onu_tuning_cli_init(bcmcli_entry *top_dir)
+{
+    bcmos_errno err = BCM_ERR_OK;
+
+    /* Subscribe for device change indication */
+    if (!onu_tuning_is_registered)
+    {
+    	onu_tuning_is_registered = BCMOS_TRUE;
+
+        err = bcmolt_dev_sel_ind_register(bcmolt_user_appl_onu_tuning_device_change_ind);
+    }
+    return err ? err : bcmolt_user_appl_onu_tuning_cli_create(top_dir);
+}
+
+static bcmos_errno bcmolt_user_appl_onu_tuning_cli_create(bcmcli_entry *top_dir)
+{
+    bcmcli_entry *dir;
+
+    if (bcmcli_dir_find(top_dir, "onu_tuning"))
+    {
+        return BCM_ERR_OK;
+    }
+
+    dir = bcmcli_dir_add(
+        top_dir,
+        "onu_tuning",
+        "NGPON2 ONU tuning user application",
+        BCMCLI_ACCESS_ADMIN,
+        NULL);
+    BCMOS_CHECK_RETURN_ERROR(!dir, BCM_ERR_NOMEM);
+
+    BCMCLI_MAKE_CMD_NOPARM(dir, "start", "Start ONU tuning application", onu_tuning_cmd_start);
+
+    BCMCLI_MAKE_CMD_NOPARM(dir, "stop", "Stop ONU tuning application", onu_tuning_cmd_stop);
+
+    BCMCLI_MAKE_CMD(dir, "onu_handover", "ONU handover", onu_handover_cmd,
+		BCMCLI_MAKE_PARM("onu", "ONU ID", BCMCLI_PARM_NUMBER, BCMCLI_PARM_FLAG_NONE),
+		BCMCLI_MAKE_PARM("source_pon_ni", "Source PON_NI", BCMCLI_PARM_NUMBER, BCMCLI_PARM_FLAG_NONE),
+		BCMCLI_MAKE_PARM("target_pon_ni", "Target PON_NI", BCMCLI_PARM_NUMBER, BCMCLI_PARM_FLAG_NONE),
+		BCMCLI_MAKE_PARM("target_pon_id_administrative_label", "Target PON ID Administrative label", BCMCLI_PARM_NUMBER, BCMCLI_PARM_FLAG_NONE),
+		BCMCLI_MAKE_PARM("target_pon_id_dwlch_id", "Target PON ID Channel id", BCMCLI_PARM_NUMBER, BCMCLI_PARM_FLAG_NONE),
+		BCMCLI_MAKE_PARM("time_to_switch", "Time_To_Switch", BCMCLI_PARM_NUMBER, BCMCLI_PARM_FLAG_NONE),
+		BCMCLI_MAKE_PARM_ENUM("rollback", "Rollback", bcmcli_enum_bool_table, BCMCLI_PARM_FLAG_OPTIONAL));
+
+
+    onu_tuning_cli_dir = dir;
+    onu_tuning_cli_top_dir = top_dir;
+
+    return BCM_ERR_OK;
+}
diff --git a/bcm68620_release/release/host_reference/user_appl/ngpon2_onu_tuning/bcmolt_user_appl_onu_tuning_cli.h b/bcm68620_release/release/host_reference/user_appl/ngpon2_onu_tuning/bcmolt_user_appl_onu_tuning_cli.h
new file mode 100755
index 0000000..ba9d764
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/ngpon2_onu_tuning/bcmolt_user_appl_onu_tuning_cli.h
@@ -0,0 +1,37 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+*/
+
+#ifndef _BCMOLT_USER_APPL_ONU_TUNING_CLI_H_
+#define _BCMOLT_USER_APPL_ONU_TUNING_CLI_H_
+
+#include <bcmolt_host_api.h>
+
+bcmos_errno bcmolt_user_appl_onu_tuning_cli_init(bcmcli_entry *top_dir);
+
+#endif
diff --git a/bcm68620_release/release/host_reference/user_appl/omon/Makefile b/bcm68620_release/release/host_reference/user_appl/omon/Makefile
new file mode 100644
index 0000000..e400562
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/omon/Makefile
@@ -0,0 +1,20 @@
+# EPON optical monitoring application
+
+ifeq ("$(ENABLE_CLI)", "y")
+
+	MOD_NAME = bcm_user_appl_omon
+	MOD_TYPE = lib
+	MOD_DEPS = host_api
+	ifneq ("$(SIMULATION_BUILD)", "y")
+		MOD_DEPS +=  bcm_board i2c_devs
+	endif
+
+	ifeq ("$(OS_KERNEL)", "linux")
+		MOD_DEPS += dev_log_linux
+	endif
+
+	ifneq ("$(SIMULATION_BUILD)", "y")
+		srcs = omon.c
+	endif
+
+endif
diff --git a/bcm68620_release/release/host_reference/user_appl/omon/omon.c b/bcm68620_release/release/host_reference/user_appl/omon/omon.c
new file mode 100644
index 0000000..f32ff7e
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/omon/omon.c
@@ -0,0 +1,1383 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+*/
+
+#include <bcmos_system.h>
+#include <bcmolt_api.h>
+#include <bcmolt_model_types.h>
+#include <bcm_dev_log.h>
+#include <bcmolt_board.h>
+#include "omon.h"
+#include "bcmolt_utils.h"
+/* These macros need to be defined before the following include. */
+#define BCM_I2C_DEV_ADDR_START typedef enum {
+#define BCM_I2C_DEV_ADDR(name, desc, val) name = val,
+#define BCM_I2C_DEV_ADDR_END } bcm_i2c_dev_addr;
+#include "bcmolt_i2c_devs_addr.h"
+
+
+/* Fixed sample delay exceeds the sum of the maximum grant size and a worst case
+   retrieval time based on various optics modules' data sheets */
+#define OMON_FIXED_SAMPLE_DELAY_US      12000
+#define SFF_8472_IDENTIFIER_ADDR        0x00    /* SFP and XFP Identifier byte*/
+#define SFF_8077i_IDENTIFIER_ADDR       128     /* XFP Identifier byte */
+#define SFF_8472_RX_POWER_ADDR          104     /* SFP offeset into A2 */
+#define SFF_8077i_RX_POWER_ADDR         104     /* XFP byte 104/105 into A0  (yes A0) */
+#define SFF_8077i_VENDOR_NAME_ADDR      148     /* XFP bytes 163-148 into A0   */
+#define SFF_8077i_VENDOR_NAME_LEN       16      /* XFP name length  */
+#define SFF_8077i_VENDOR_PN_ADDR        168     /* XFP bytes 183-168 into A0   */
+#define SFF_8077i_VENDOR_PN_LEN         16      /* XFP part number length   */
+#define SFF_8077i_VENDOR_REV_ADDR       184     /* XFP bytes 185-184 into A0   */
+#define SFF_8077i_VENDOR_REV_LEN        2       /* XFP revision len   */
+#define SFF_8077i_VENDOR_SN_ADDR        196     /* XFP bytes 211-196 into A0   */
+#define SFF_8077i_VENDOR_SN_LEN         16      /* XFP serial number len   */
+#define OMON_TASK_MSG_Q_SIZE            16      /* allow one message per port */
+#define SFF_PAGE_ADDR1                  0       /* use SFP_I2C_ADDR1 for I2C read A0 */
+#define SFF_PAGE_ADDR2                  1       /* use SFP_I2C_ADDR2 for 12C read A2 */
+
+#define SFF_8472_VENDOR_NAME_ADDR      20      /* SFP bytes 20-35 into A0   */
+#define SFF_8472_VENDOR_NAME_LEN       16      /* SFP name length  */
+#define SFF_8472_VENDOR_OUI_ADDR       37      /* SFP bytes 37-39 into A0   */
+#define SFF_8472_VENDOR_OUI_LEN        3       /* SFP oui length  */
+#define SFF_8472_VENDOR_PN_ADDR        40      /* SFP bytes 40-55 into A0   */
+#define SFF_8472_VENDOR_PN_LEN         16      /* SFP part number length   */
+#define SFF_8472_VENDOR_REV_ADDR       56      /* SFP bytes 56-59 into A0   */
+#define SFF_8472_VENDOR_REV_LEN        4       /* SFP revision len   */
+#define SFF_8472_VENDOR_SN_ADDR        68      /* SFP bytes 68-83 into A0   */
+#define SFF_8472_VENDOR_SN_LEN         16      /* SFP serial number len   */
+#define SFF_8472_VENDOR_SFF_ADDR       94      /* SFP bytes 94 into A0   */
+#define SFF_8472_VENDOR_SFF_LEN        1       /* SFP SFF-8472 Compliance revision len   */
+
+#define SFF_8472_DIAG_MON_ADDR         92      /* SFP bytes 92 into A0   */
+#define SFF_8472_ENHANCED_OPT_ADDR     93      /* SFP bytes 93 into A0   */
+#define SFF_8472_TEMPERATURE_ADDR      96      /* SFP bytes 96 into A0   */
+#define SFF_8472_DIAG_MON_LEN          1       /* SFP SFF-8472 Diagnostic Monitoring Type len   */
+
+/* Table 32 5.2 Identifier values SFF8077i*/
+#define SFF_IDENTIFIER_SFP  0x03
+#define SFF_IDENTIFIER_XFP  0x06
+
+typedef uint32_t omon_rssi_value;
+
+
+/* Uniquely identifies specific EPON links under management by this
+   application */
+typedef struct
+{
+    bcmolt_devid device_id;
+    bcmolt_epon_ni epon_ni;
+    bcmos_mac_address mac_address;
+} omon_link_key;
+
+
+typedef struct
+{
+    uint32_t  caddr;    /* I2C switch control address */
+    uint32_t  sctrl;    /* I2C switch control command value */
+} i2c_coords;
+
+
+typedef struct
+{
+    bcmos_msg os_msg;
+    omon_link_key link_key;
+    uint16_t trigger_width_ns;
+    uint16_t trigger_delay_ns;
+    uint16_t sample_period_us;
+    bcmcli_session *session;
+    bcmolt_epon_llid llid;
+    uint8_t scan_mode;
+} omon_task_msg;
+
+
+static dev_log_id omon_log_id = DEV_LOG_INVALID_ID;
+static bcmos_task omon_task;
+static bcmos_bool is_running = BCMOS_FALSE;
+
+
+/*******************************************************************************
+ * BCM968620 platform dependent I2C access
+ ******************************************************************************/
+
+
+uint8_t bcm968620_client_switchctrl_sfp[16][2] =
+{
+    {   0x72,     0x80, },
+    {   0x72,     0x40, },
+    {   0x72,     0x20, },
+    {   0x72,     0x10, },
+    {   0x72,      0x8, },
+    {   0x72,      0x4, },
+    {   0x72,      0x2, },
+    {   0x72,      0x1, },
+    {   0x73,     0x10, },
+    {   0x73,     0x20, },
+    {   0x73,     0x40, },
+    {   0x73,     0x80, },
+    {   0x73,      0x1, },
+    {   0x73,      0x2, },
+    {   0x73,      0x4, },
+    {   0x73,      0x8, },
+};
+
+
+uint8_t bcm968620_client_switchctrl_xfp[8][2] =
+{
+    /* caddr,    sctrl */
+    {   0x72,      0x8, },
+    {   0x72,      0x4, },
+    {   0x72,      0x2, },
+    {   0x72,      0x1, },
+    {   0x73,     0x10, },
+    {   0x73,     0x20, },
+    {   0x73,     0x40, },
+    {   0x73,     0x80, },
+};
+
+static bcmos_bool omon_is_epon_ni_valid(bcmolt_epon_ni epon)
+{
+    bcmolt_system_mode system_mode;
+
+    bcmolt_system_mode_get(current_device, &system_mode);
+
+    switch (system_mode)
+    {
+        case BCMOLT_SYSTEM_MODE_EPON__16_X:
+            return epon < 16;
+        case BCMOLT_SYSTEM_MODE_EPON__8_X_COEXISTENCE_TDMA:
+        case BCMOLT_SYSTEM_MODE_EPON__8_X_10_G:
+        case BCMOLT_SYSTEM_MODE_EPON__8_X:
+            return epon < 8;
+        case BCMOLT_SYSTEM_MODE_EPON__4_X_COEXISTENCE_TDMA:
+        case BCMOLT_SYSTEM_MODE_EPON__4_X_10_G:
+        case BCMOLT_SYSTEM_MODE_EPON__4_X:
+            return epon < 4;
+        case BCMOLT_SYSTEM_MODE_EPON__2_X_10_G:
+            return epon < 2;
+        default:
+            return BCMOS_FALSE;
+    }
+}
+
+static bcmos_bool trx_id_from_epon_ni(bcmolt_epon_ni epon, uint8_t *trx_id)
+{
+    static const uint8_t epon_4x[4] = { 2, 3, 6, 7 };
+    static const uint8_t epon_2x_10g[2] = { 3, 4 };
+    bcmolt_system_mode system_mode;
+
+    bcmolt_system_mode_get(current_device, &system_mode);
+
+    switch (system_mode)
+    {
+        case BCMOLT_SYSTEM_MODE_EPON__16_X:
+        case BCMOLT_SYSTEM_MODE_EPON__8_X:
+        case BCMOLT_SYSTEM_MODE_EPON__8_X_COEXISTENCE_TDMA:
+        case BCMOLT_SYSTEM_MODE_EPON__4_X_COEXISTENCE_TDMA:
+        case BCMOLT_SYSTEM_MODE_EPON__8_X_10_G:
+        case BCMOLT_SYSTEM_MODE_EPON__4_X_10_G:
+            *trx_id = (uint8_t)epon;
+            return BCMOS_TRUE;
+        case BCMOLT_SYSTEM_MODE_EPON__4_X:
+            *trx_id = epon_4x[epon];
+            return BCMOS_TRUE;
+        case BCMOLT_SYSTEM_MODE_EPON__2_X_10_G:
+            *trx_id = epon_2x_10g[epon];
+            return BCMOS_TRUE;
+        default:
+            *trx_id = (uint8_t)-1;
+            return BCMOS_FALSE;
+    }
+}
+
+static char * bcmolt_get_scan_result(bcmolt_rogue_scan_status status)
+{
+    switch (status)
+    {
+        case BCMOLT_ROGUE_SCAN_STATUS_COMPLETE:
+            return "OK: EPON ROGUE SCAN IS COMPLETE";
+        case BCMOLT_ROGUE_SCAN_STATUS_LLID_STATE_IS_BAD:
+            return "FAIL: REQUESTED LLID IS IN USE";
+        case BCMOLT_ROGUE_SCAN_STATUS_SCAN_ERR_INTERNAL:
+            return "FAIL: SCAN HAD AN INTERNAL SW ERROR";
+        case BCMOLT_ROGUE_SCAN_STATUS_SCAN_ERR_NORES:
+            return "FAIL: NO RESOURCES AVAILABLE";
+        case BCMOLT_ROGUE_SCAN_STATUS_LLID_IS_OOR:
+            return "FAIL: REQUESTED LLID IS OUT OF RANGE";
+        default:
+            return "OK: BCMOLT_ROGUE_SCAN_STATUS_COMPLETE";
+    }
+}
+
+/**
+ * \brief Get I2C address
+ *
+ * This function returns the I2C mux target address for the given link_key
+ * object.
+ *
+ * \param epon_ni EPON port index
+ * \param coords I2C mux target container
+ *
+ * \return
+ * None
+ */
+static
+void omon_get_i2c_coords(uint8_t trx_id, i2c_coords* coords)
+{
+    bcmolt_system_mode system_mode;
+
+    bcmolt_system_mode_get(0, &system_mode);
+
+    if (system_mode == BCMOLT_SYSTEM_MODE_EPON__8_X_COEXISTENCE_TDMA)
+    {
+        coords->caddr  = bcm968620_client_switchctrl_xfp[trx_id][0];
+        coords->sctrl  = bcm968620_client_switchctrl_xfp[trx_id][1];
+    }
+    else
+    {
+        coords->caddr  = bcm968620_client_switchctrl_sfp[trx_id][0];
+        coords->sctrl  = bcm968620_client_switchctrl_sfp[trx_id][1];
+    }
+} /* omon_get_i2c_coords */
+
+
+/**
+ * \brief Configure I2C mux
+ *
+ * This function configures the I2C mux to target the correct optics module for
+ * the currently executing RSSI measurement.
+ *
+ * \param epon_ni EPON port index
+ *
+ * \return
+ * BCM_ERR_OK if successful, error code if not
+ */
+static
+bcmos_errno omon_platform_configure_i2c(uint8_t trx_id, uint8_t page)
+{
+
+     i2c_coords coords;
+     bcmos_errno rc;
+
+     omon_get_i2c_coords(trx_id, &coords);
+
+     rc = bcm_board_dev_change(coords.caddr);
+     if (rc != BCM_ERR_OK)
+     {
+          BCM_LOG(WARNING, omon_log_id,
+                  "bcm_board_dev_change(%u) failed\n", coords.caddr);
+     }
+     else
+     {
+         rc = bcm_board_switch_write(coords.sctrl);
+         if (rc != BCM_ERR_OK)
+         {
+              BCM_LOG(WARNING, omon_log_id,
+                      "bcm_board_switch_write(%u) failed\n", coords.sctrl);
+         }
+         else
+         {
+             if (page == SFF_PAGE_ADDR1)
+             {
+                 rc = bcm_board_dev_change(SFP_I2C_ADDR1);
+             }
+             else
+             {   // SFF_PAGE_ADDR2
+                 rc = bcm_board_dev_change(SFP_I2C_ADDR2);
+             }
+             if (rc != BCM_ERR_OK)
+             {
+                 BCM_LOG(WARNING, omon_log_id,
+                           "bcm_board_dev_change(%u) failed\n", (SFP_I2C_ADDR1+page));
+             }
+         }
+     }
+     return rc;
+
+} /* omon_platform_configure_i2c */
+
+
+/**
+ * \brief Read Manufacturing data from Optic Module
+ *
+ * This function reads the XFP Tranceiver Data (according to
+ * SFF8077i for an XFP) from an optics module. The result is
+ * displayed for this sample code.
+ *
+ * \param epon_ni EPON NI to take measurement
+ *
+ * \return
+ * BCM_ERR_OK if successful, error code if not
+ */
+static
+bcmos_errno omon_trx_status_read(bcmolt_epon_ni epon_ni, bcmcli_session *session)
+{
+    uint32_t sff_identifier = 1;
+    bcmos_errno rc = BCM_ERR_OK;
+    uint8_t i;
+
+    // 80771 XFP Specific stuff
+    uint32_t raw_vendorId_8077i;
+    uint8_t vendorId_8077i[SFF_8077i_VENDOR_NAME_LEN+1];
+    uint32_t raw_vendorPn_8077i;
+    uint8_t vendorPn_8077i[SFF_8077i_VENDOR_PN_LEN+1];
+    uint32_t raw_vendorSn_8077i;
+    uint8_t vendorSn_8077i[SFF_8077i_VENDOR_SN_LEN+1];
+    uint32_t raw_vendorRev_8077i;
+    uint8_t vendorRev_8077i[SFF_8077i_VENDOR_REV_LEN+1];
+
+    memset(&vendorId_8077i, 0, sizeof(vendorId_8077i));
+    memset(&vendorPn_8077i, 0, sizeof(vendorPn_8077i));
+    memset(&vendorSn_8077i, 0, sizeof(vendorSn_8077i));
+    memset(&vendorRev_8077i, 0, sizeof(vendorRev_8077i));
+
+    // 8472 SFP Specific stuff
+    uint32_t raw_vendorId_8472;
+    uint8_t vendorId_8472[SFF_8472_VENDOR_NAME_LEN+1];
+    uint32_t raw_vendorPn_8472;
+    uint8_t vendorPn_8472[SFF_8472_VENDOR_PN_LEN+1];
+    uint32_t raw_vendorSn_8472;
+    uint8_t vendorSn_8472[SFF_8472_VENDOR_SN_LEN+1];
+    uint32_t raw_vendorRev_8472;
+    uint8_t vendorRev_8472[SFF_8472_VENDOR_REV_LEN+1];
+    uint32_t raw_vendorSff_8472;
+    uint8_t vendorSff_8472[SFF_8472_VENDOR_SFF_LEN+1];
+    uint32_t raw_vendorOui_8472;
+    uint8_t vendorOui_8472[SFF_8472_VENDOR_OUI_LEN+1];
+    uint32_t raw_diagMon_8472;
+    uint8_t diagMon_8472 = 0;
+    uint32_t raw_enhancedOpt_8472;
+    uint8_t enhancedOpt_8472 = 0;
+
+    memset(&vendorId_8472, 0, sizeof(vendorId_8472));
+    memset(&vendorPn_8472, 0, sizeof(vendorPn_8472));
+    memset(&vendorSn_8472, 0, sizeof(vendorSn_8472));
+    memset(&vendorRev_8472, 0, sizeof(vendorRev_8472));
+    memset(&vendorSff_8472, 0, sizeof(vendorSff_8472));
+    memset(&vendorOui_8472, 0, sizeof(vendorOui_8472));
+
+    uint8_t* tmpresult;
+    int16_t temp_result = 0;
+    uint32_t raw_temp_result = 0;
+
+    uint8_t trx_id;
+
+    if ( ! trx_id_from_epon_ni(epon_ni, &trx_id) )
+    {
+        BCM_LOG(ERROR, omon_log_id,
+                "TRX Id is invalid for EPON NI %d \n", epon_ni);
+        return BCM_ERR_RANGE;
+    }
+
+    char *pSfpType;
+
+    pSfpType = "UNKN";
+
+
+    // Check for transevier presence
+    if ( (rc = omon_platform_configure_i2c(trx_id, SFF_PAGE_ADDR1)) == BCM_ERR_OK)
+    {
+        /* Read module identifier */
+        if ( (rc = bcm_board_dev_read(8, SFF_8472_IDENTIFIER_ADDR, &sff_identifier)) == BCM_ERR_OK)
+        {
+            switch (sff_identifier & 0x000F)
+            {
+                case SFF_IDENTIFIER_SFP:
+                    pSfpType = "SFP\0";
+                    // Read the vendor Id
+                    for (i=0; i<SFF_8472_VENDOR_NAME_LEN; i++)
+                    {
+                        rc = rc | bcm_board_dev_read(8, SFF_8472_VENDOR_NAME_ADDR+i, &raw_vendorId_8472);
+                        vendorId_8472[i] = (uint8_t)raw_vendorId_8472;
+                    }
+
+                    // Read the part Number, serial number, SFF revision, and Revision
+                    for (i=0; i<SFF_8472_VENDOR_PN_LEN; i++)
+                    {
+                        rc = rc | bcm_board_dev_read(8, SFF_8472_VENDOR_PN_ADDR+i, &raw_vendorPn_8472);
+                        vendorPn_8472[i] = (uint8_t)raw_vendorPn_8472;
+                    }
+
+                    for (i=0; i<SFF_8472_VENDOR_SN_LEN; i++)
+                    {
+                        rc = rc | bcm_board_dev_read(8, SFF_8472_VENDOR_SN_ADDR+i, &raw_vendorSn_8472);
+                        vendorSn_8472[i] = (uint8_t)raw_vendorSn_8472;
+                    }
+
+                    for (i=0; i<SFF_8472_VENDOR_REV_LEN; i++)
+                    {
+                        rc = rc | bcm_board_dev_read(8, SFF_8472_VENDOR_REV_ADDR+i, &raw_vendorRev_8472);
+                        vendorRev_8472[i] = (uint8_t)raw_vendorRev_8472;
+                    }
+
+                    for (i=0; i<SFF_8472_VENDOR_SFF_LEN; i++)
+                    {
+                        rc = rc | bcm_board_dev_read(8, SFF_8472_VENDOR_SFF_ADDR+i, &raw_vendorSff_8472);
+                        vendorSff_8472[i] = (uint8_t)raw_vendorSff_8472;
+                    }
+                    for (i=0; i<SFF_8472_VENDOR_OUI_LEN; i++)
+                    {
+                        rc = rc | bcm_board_dev_read(8, SFF_8472_VENDOR_OUI_ADDR+i, &raw_vendorOui_8472);
+                        vendorOui_8472[i] = (uint8_t)raw_vendorOui_8472;
+                    }
+
+                    rc = rc | bcm_board_dev_read(8, SFF_8472_DIAG_MON_ADDR, &raw_diagMon_8472);
+                    diagMon_8472 = (uint8_t)raw_diagMon_8472;
+
+                    rc = rc | bcm_board_dev_read(8, SFF_8472_ENHANCED_OPT_ADDR, &raw_enhancedOpt_8472);
+                    enhancedOpt_8472 = (uint8_t)raw_enhancedOpt_8472;
+
+                    // Shift to A2
+                    rc = rc | omon_platform_configure_i2c(trx_id, SFF_PAGE_ADDR2);
+                    rc = rc | bcm_board_dev_read(16, SFF_8472_TEMPERATURE_ADDR, &raw_temp_result);
+
+                    tmpresult = (uint8_t*)(&raw_temp_result);
+
+                    temp_result = tmpresult[3];
+                    temp_result = (temp_result << 8) | tmpresult[2];
+
+                    break;
+
+                case SFF_IDENTIFIER_XFP:
+
+                    pSfpType = "XFP\0";
+                    // Read the vendor Id
+                    for (i=0; i<SFF_8077i_VENDOR_NAME_LEN; i++)
+                    {
+                        rc = rc | bcm_board_dev_read(8, SFF_8077i_VENDOR_NAME_ADDR+i, &raw_vendorId_8077i);
+                        vendorId_8077i[i] = (uint8_t)raw_vendorId_8077i;
+                    }
+
+                    // Read the part Number, SN, and Revision
+                    for (i=0; i<SFF_8077i_VENDOR_PN_LEN; i++)
+                    {
+                        rc = rc | bcm_board_dev_read(8, SFF_8077i_VENDOR_PN_ADDR+i, &raw_vendorPn_8077i);
+                        vendorPn_8077i[i] = (uint8_t)raw_vendorPn_8077i;
+                    }
+
+                    for (i=0; i<SFF_8077i_VENDOR_SN_LEN; i++)
+                    {
+                        rc = rc | bcm_board_dev_read(8, SFF_8077i_VENDOR_SN_ADDR+i, &raw_vendorSn_8077i);
+                        vendorSn_8077i[i] = (uint8_t)raw_vendorSn_8077i;
+                    }
+
+                    for (i=0; i<SFF_8077i_VENDOR_REV_LEN; i++)
+                    {
+                        rc = rc | bcm_board_dev_read(8, SFF_8077i_VENDOR_REV_ADDR+i, &raw_vendorRev_8077i);
+                        vendorRev_8077i[i] = (uint8_t)raw_vendorRev_8077i;
+                    }
+
+                    break;
+                default:
+                    rc = BCM_ERR_NODEV;
+                    break;
+            }
+        }
+        else
+        {
+            BCM_LOG(ERROR, omon_log_id,
+                    "TRX Could not read device : SFF_8472_IDENTIFIER_ADDR for PON %d rc %d (%s)\n",
+                    epon_ni, rc, bcmos_strerror(rc));
+        }
+    }
+    else
+    {
+        BCM_LOG(ERROR, omon_log_id,
+                "TRX Could not configure platform : SFF_PAGE_ADDR1 for PON %d rc %d (%s)\n",
+                epon_ni, rc, bcmos_strerror(rc));
+        rc = BCM_ERR_NODEV;
+    }
+
+
+    if (rc == BCM_ERR_OK)
+    {
+        if ( (sff_identifier & 0x000F) == SFF_IDENTIFIER_XFP)
+        {
+        bcmcli_session_print(session,
+                             "\n[OMON] %s Tranceiver is present on PON %d\r\n"
+                             "  [OMON] Trx Vendor Id is: %s\r\n "
+                             " [OMON] Vendor Part Number: %s\r\n "
+                             " [OMON] Vendor Serial Number: %s\r\n "
+                             " [OMON] Vendor Revision: %s\r\n ",
+                                 pSfpType, epon_ni, vendorId_8077i,
+                                 vendorPn_8077i, vendorSn_8077i, vendorRev_8077i);
+        }
+        else
+        {
+            // SFP stuff
+            bcmcli_session_print(session,
+                                 "\n[OMON] %s Tranceiver is present on PON %d\r\n"
+                                 "  [OMON] Trx Vendor Id is: %s\r\n "
+                                 " [OMON] Vendor Part Number: %s\r\n "
+                                 " [OMON] Vendor Serial Number: %s\r\n "
+                                 " [OMON] Vendor Revision: %s\r\n "
+                                 " [OMON] Vendor OUI: %s\r\n "
+                                 " [OMON] Transceiver Temperature: %dC\r\n "
+                                 " [OMON] Enhanced Options SFF-8472 Byte 93: %x\r\n "
+                                 " [OMON] Diagnostic Monitor Type SFF-8472 Byte 92: %x\r\n ",
+                                 pSfpType, epon_ni, vendorId_8472,
+                                 vendorPn_8472, vendorSn_8472, vendorRev_8472, vendorOui_8472,
+                                 temp_result/256, enhancedOpt_8472, diagMon_8472 );
+        }
+    }
+
+    return rc;
+} /* omon_rssi_read */
+
+/**
+ * \brief Read RSSI results from I2C
+ *
+ * This function reads the RX Power Measurement (SFF8472 for an
+ * SFP and SFF8077i for an XFP) from an optics module. The
+ * result is stored in the global omon_state.
+ *
+ * \param epon_ni EPON NI to take measurement
+ * \param rssi_value Returned RSSI value if successful
+ *
+ * \return
+ * BCM_ERR_OK if successful, error code if not
+ */
+static
+bcmos_errno omon_rssi_read(bcmolt_epon_ni epon_ni, uint32_t *rssi_value)
+{
+    uint32_t raw_rssi_result = 0;
+    uint32_t sff_identifier = 1;
+    uint8_t trx_id;
+    uint32_t rssi_result = 0;
+    bcmos_errno rc = BCM_ERR_OK;
+    uint8_t* result;
+
+    if ( ! trx_id_from_epon_ni(epon_ni, &trx_id) )
+    {
+        BCM_LOG(ERROR, omon_log_id,
+                "TRX Id is invalid for EPON NI %d \n", epon_ni);
+        return BCM_ERR_RANGE;
+    }
+
+    // Check for transevier presence
+    if (bcm_board_trx_present(trx_id) == BCM_ERR_OK)
+    {
+        rc = omon_platform_configure_i2c(trx_id, SFF_PAGE_ADDR1);
+        /* Read module identifier */
+
+        if (rc == BCM_ERR_OK)
+        {
+            /* Read module identifier */
+            rc = bcm_board_dev_read(8, SFF_8472_IDENTIFIER_ADDR, &sff_identifier);
+
+            if (rc == BCM_ERR_OK)
+            {
+                result = (uint8_t*)(&raw_rssi_result);
+
+                switch (sff_identifier & 0x000F)
+                {
+                    case SFF_IDENTIFIER_SFP:
+                        rc = omon_platform_configure_i2c(trx_id, SFF_PAGE_ADDR2);
+                        if (rc == BCM_ERR_OK)
+                        {
+                            rc = bcm_board_dev_read(16, SFF_8472_RX_POWER_ADDR, &raw_rssi_result);
+                        }
+                        break;
+                    case SFF_IDENTIFIER_XFP:
+
+                        rc = bcm_board_dev_read(16, SFF_8077i_RX_POWER_ADDR, &raw_rssi_result);
+
+                        break;
+                    default:
+                        rc = BCM_ERR_NODEV;
+                        break;
+                }
+
+                if (rc == BCM_ERR_OK)
+                {
+                    rssi_result = result[3];
+                    rssi_result = (rssi_result << 8) | result[2];
+
+                    *rssi_value = rssi_result;
+
+                }
+            }
+            else
+            {
+                BCM_LOG(ERROR, omon_log_id,
+                        "TRX Could not read device : SFF_8472_IDENTIFIER_ADDR for PON %d rc %d (%s)\n",
+                        epon_ni, rc, bcmos_strerror(rc));
+                rc = BCM_ERR_IO;
+            }
+        }
+        else
+        {
+            BCM_LOG(ERROR, omon_log_id,
+                    "TRX Could not read platform : SFF_PAGE_ADDR1 for PON %d rc %d (%s)\n",
+                    epon_ni, rc, bcmos_strerror(rc));
+            rc = BCM_ERR_IO;
+        }
+    }
+    else
+    {
+        rc = BCM_ERR_NODEV;
+    }
+
+    return rc;
+} /* omon_rssi_read */
+
+
+/*******************************************************************************
+ * Platform independent RSSI measurement
+ ******************************************************************************/
+
+/**
+ * \brief Read XFP/SFP Data from Transceiver Module1
+ *
+ * This function reads the manufacturing data from the SFP
+ * module via I2C.
+ *
+ * \param link_key EPON NI
+ *
+ * \return
+ * None
+ */
+static
+void omon_trx_status_initiate(bcmcli_session *session,
+                                     omon_link_key *link_key)
+{
+
+    bcmos_errno rc;
+
+    /* Perform the I2C operations specified in SFF-8472 (SFP)/SFF-8077i (XFP) to
+       retrieve the pmanufacturer data from the optics module. */
+
+    if (! omon_is_epon_ni_valid(link_key->epon_ni))
+    {
+        BCM_LOG(ERROR, omon_log_id,
+                "[OMON] TRX Status: epon_ni of (%d) is out of range for platform\n", link_key->epon_ni);
+        return ;
+    }
+    // Check for transceiver presence
+
+    uint8_t trx_id;
+
+    if ( ! trx_id_from_epon_ni(link_key->epon_ni, &trx_id) )
+    {
+        BCM_LOG(ERROR, omon_log_id,
+                "[OMON] TRX Id is invalid for EPON NI %d \n", link_key->epon_ni);
+        return;
+    }
+
+    rc = bcm_board_trx_present(trx_id);
+
+    if (rc == BCM_ERR_NODEV)
+    {
+        bcmcli_session_print(session,
+                "[OMON] TRX Status: Trx_id %d Not Present on PON %d\r\n ", trx_id, link_key->epon_ni);
+        return;
+    }
+
+    rc = omon_trx_status_read(trx_id, session);
+
+    if (rc != BCM_ERR_OK)
+    {
+        BCM_LOG(ERROR, omon_log_id,
+                "[OMON] Issue TRX Status: Read operation failed with rc %d (%s)\n",
+                rc, bcmos_strerror(rc));
+        return;
+    }
+
+    /* Notify external host code of the outcome through an optional callback,
+       defaulting to output in the CLI session where the command was initiated
+       if no callback is supplied. */
+
+    bcmcli_session_print(session,
+                         "\n[OMON] TRX Status: Data on PON %d Complete\r\n", link_key->epon_ni);
+}
+/**
+ * \brief Read RSSI Measurement Result from Transceiver Module
+ *
+ * This function reads the stored RSSI measurement from the
+ * XFP/SFP module via I2C.
+ *
+ * \param link_key EPON NI
+ *
+ * \return
+ * None
+ */
+static
+void omon_rssi_read_initiate(bcmcli_session *session,
+                                     omon_link_key *link_key)
+{
+    uint32_t rssi_value = 0;
+    bcmos_errno rc;
+
+    if (! omon_is_epon_ni_valid(link_key->epon_ni))
+    {
+        BCM_LOG(ERROR, omon_log_id,
+                "[OMON] Rssi Read: epon_ni of (%d) is out of range for platform\n", link_key->epon_ni);
+        return ;
+    }
+
+    /* Perform the I2C operations specified in SFF-8472 (SFP)/SFF-8077i (XFP) to
+       retrieve the power measurements from the optics module. */
+    rc = omon_rssi_read(link_key->epon_ni, &rssi_value);
+
+    if (rc == BCM_ERR_NODEV)
+    {
+        bcmcli_session_print(session,
+                "[OMON] Rssi Read: TRX Not Present on PON %d\r\n ", link_key->epon_ni);
+        return;
+    }
+
+    if (rc == BCM_ERR_IO)
+    {
+        bcmcli_session_print(session,
+            "[OMON] Rssi Read: Could not read device for PON %d \n",link_key->epon_ni);
+        return;
+    }
+
+    if (rc != BCM_ERR_OK)
+    {
+        bcmcli_session_print(session,
+                "Issue RSSI Read operation failed with rc %d (%s)\n",
+                rc, bcmos_strerror(rc));
+        return;
+    }
+    /* Notify external host code of the outcome through an optional callback,
+       defaulting to output in the CLI session where the command was initiated
+       if no callback is supplied. */
+
+    bcmcli_session_print(session,
+            "[OMON] RSSI Read RX Power: Pon_ni=%d rx power %d.%duW\r\n",
+            link_key->epon_ni,
+            rssi_value/10,
+            rssi_value%10);
+
+    bcmcli_session_print(session,
+                         "\n[OMON] RSSI Read on PON %d Complete\r\n",
+                         link_key->epon_ni);
+}
+/*omon_rssi_read_initiate*/
+
+
+/**
+ * \brief Request Maple Firmware to run the Rogue ONU LLID scan.
+ *
+ * This function sends an API message to the OLT to run a scan
+ * on a specific EPON LLID or across all LLIDs in the PON.
+ * Results are returned upon completion. Rogue LLIDs are marked
+ * and quarentined for the host to examine.
+ *
+ * \param link_key EPON link information
+ * \param epopn_llid  Specific LLID to scan
+ * \param scan_mode   Specifies a single LLID or All.
+ *
+ * \return
+ * None
+ */
+
+static
+void omon_run_rogue_llid_scan(bcmcli_session *session,
+                                     omon_link_key *link_key,
+                                     bcmolt_epon_llid llid,
+                                     uint8_t scan_mode)
+{
+    const bcmolt_epon_ni_key ni_key = { .epon_ni = link_key->epon_ni };
+    bcmolt_epon_ni_rogue_llid_scan issue_llid_scan_op;
+    bcmos_errno rc = BCM_ERR_OK;
+
+    /* Perform an API operation directing the Maple firmware to issue an bcmolt_epon_ni_issue_rogue_rx_power
+       RSSI grant to the specified EPON link. BCMOLT_EPON_NI_OPER_ID_ISSUE_ROGUE_RX_POWER*/
+
+    BCMOLT_OPER_INIT(&issue_llid_scan_op, epon_ni, rogue_llid_scan , ni_key);
+    BCMOLT_OPER_PROP_SET(&issue_llid_scan_op, epon_ni, rogue_llid_scan, mode, scan_mode);
+    BCMOLT_OPER_PROP_SET(&issue_llid_scan_op, epon_ni, rogue_llid_scan, llid, llid);
+
+    BCM_LOG_CALLER_FMT(INFO, omon_log_id,
+            "Issue Rogue Scan Operation for LLID 0x%x, Pon_ni=%d\r\n", llid, link_key->epon_ni);
+
+    rc = bcmolt_oper_submit(link_key->device_id, &issue_llid_scan_op.hdr);
+
+    if (rc != BCM_ERR_OK)
+    {
+        BCM_LOG(ERROR, omon_log_id,
+                "Rogue Scan Operation Failed with rc %d (%s)\n",
+                rc, bcmos_strerror(rc));
+
+        return;
+    }
+}/*omon_run_rogue_llid_scan*/
+
+/**
+ * \brief Execute RSSI measurement
+ *
+ * This function sends an API message to the OLT to issue an RSSI grant.  It
+ * then reads back the results via I2C. Set grant_length_tq to 0 to retreive the
+ * RSSI value without issuing the strobe command to the OLT.
+ *
+ * \param link_key EPON RSSI link information
+ * \param grant_length_tq Size of the RSSI grant
+ * \param start_offset Strobe offset from start of the RSSI grant
+ * \param end_offset Strobe offset from the end of the RSSI grant
+ *
+ * \return
+ * None
+ */
+static
+void omon_rssi_measurement_initiate(bcmcli_session *session,
+                                    omon_link_key *link_key,
+                                    uint16_t trigger_width_tq,
+                                    uint16_t trigger_delay_tq,
+                                    uint16_t sample_period)
+{
+    const bcmolt_epon_ni_key ni_key = { .epon_ni = link_key->epon_ni };
+    bcmolt_epon_ni_issue_rssi_grant issue_rssi_grant_op;
+    bcmos_errno rc = BCM_ERR_OK;
+
+    if (! omon_is_epon_ni_valid(link_key->epon_ni))
+    {
+        BCM_LOG(ERROR, omon_log_id,
+                "[OMON] Rx Power: epon_ni of (%d) is out of range for platform\n", link_key->epon_ni);
+        return ;
+    }
+
+    uint8_t trx_id;
+
+    if ( ! trx_id_from_epon_ni(link_key->epon_ni, &trx_id) )
+    {
+        BCM_LOG(ERROR, omon_log_id,
+                "[OMON] Rx Power: TRX Id is invalid for EPON NI %d \n", link_key->epon_ni);
+        return;
+    }
+
+    // Check for transevier presence
+    rc = bcm_board_trx_present(trx_id);
+
+    if (rc == BCM_ERR_NODEV)
+    {
+        bcmcli_session_print(session,
+                "[OMON] Rx Power: TRX Not Present on PON %d\r\n ", link_key->epon_ni);
+        return;
+    }
+
+    /* Perform an API operation directing the Maple firmware to issue an bcmolt_epon_ni_issue_rogue_rx_power
+       RSSI grant to the specified EPON link. BCMOLT_EPON_NI_OPER_ID_ISSUE_ROGUE_RX_POWER*/
+
+    BCMOLT_OPER_INIT(&issue_rssi_grant_op, epon_ni, issue_rssi_grant , ni_key);
+    BCMOLT_OPER_PROP_SET(&issue_rssi_grant_op, epon_ni, issue_rssi_grant,
+                         granted_link, link_key->mac_address);
+    BCMOLT_OPER_PROP_SET(&issue_rssi_grant_op, epon_ni, issue_rssi_grant,
+                         trigger_width, trigger_width_tq);
+    BCMOLT_OPER_PROP_SET(&issue_rssi_grant_op, epon_ni, issue_rssi_grant,
+                         trigger_delay, trigger_delay_tq);
+    BCMOLT_OPER_PROP_SET(&issue_rssi_grant_op, epon_ni, issue_rssi_grant,
+                         sample_period, sample_period);
+
+    rc = bcmolt_oper_submit(link_key->device_id, &issue_rssi_grant_op.hdr);
+    if (rc != BCM_ERR_OK)
+    {
+        BCM_LOG(ERROR, omon_log_id,
+                "issue RSSI grant operation failed with rc %d (%s)\n",
+                rc, bcmos_strerror(rc));
+
+        return;
+    }
+}
+/*omon_rssi_measurement_initiate*/
+
+// rssi specific indication handler interface --
+static bcmos_errno bcmolt_user_appl_rssi_handle_ind(bcmolt_devid device_id,
+                                                    uint8_t instance,
+                                                    bcmolt_auto *ind)
+{
+
+    bcmolt_epon_ni_rssi_measurement_completed* omon_ind;
+    uint32_t rssi_value = 0;
+    bcmolt_epon_ni epon_ni;
+    bcmos_errno rc = BCM_ERR_OK;
+    char tBuf[40];
+
+    omon_ind = (bcmolt_epon_ni_rssi_measurement_completed *) ind;
+    epon_ni = omon_ind->key.epon_ni;
+
+    if (omon_ind->data.status == BCMOLT_RESULT_SUCCESS)
+    {
+        /* Perform the I2C operations specified in SFF-8472 (SFP)/SFF-8077i (XFP) to
+           retrieve the power measurements from the optics module. */
+        rc = omon_rssi_read(epon_ni, &rssi_value);
+
+    }
+    /* Notify external host code of the outcome through an optional callback,
+       defaulting to output in the CLI session where the command was initiated
+       if no callback is supplied. */
+
+    BCM_LOG_CALLER_FMT(INFO, omon_log_id,
+            " RSSI Indication Rcv: for Link Mac %s, LLID 0x%x, Dev=%01d, Pon_ni=%d\r\n",
+                       bcmos_mac_2_str(&omon_ind->data.link_mac, tBuf),
+                         omon_ind->data.llid,
+                         device_id,
+                         omon_ind->key.epon_ni);
+
+    if (rc == BCM_ERR_OK)
+    {
+        BCM_LOG(INFO, omon_log_id,
+                 " %s measured rx power %d.%duW raw_data %d\n",
+                   (omon_ind->data.status == BCMOLT_RESULT_SUCCESS ? "Succeeded" : "Failed"),
+                   rssi_value/10, rssi_value%10, rssi_value);
+    }
+    else
+    {
+        BCM_LOG(INFO, omon_log_id,
+            "pon %d, failed with errno %d (%s)\n",
+                  epon_ni, rc, bcmos_strerror(rc));
+    }
+    return rc;
+}
+
+// epon rogue onu specific indication handler interface --
+static bcmos_errno bcmolt_user_appl_rogue_handle_ind(bcmolt_devid device_id,
+                                                     uint8_t instance,
+                                                     bcmolt_auto *ind)
+{
+    (void)instance;
+    bcmolt_epon_denied_link_rogue_violation* rogue_ind;
+    char tBuf[40];
+
+    rogue_ind = (bcmolt_epon_denied_link_rogue_violation *) ind;
+
+    /* Notify external host code of the outcome through an optional callback,
+       defaulting to output in the CLI session where the command was initiated
+       if no callback is supplied. */
+
+    BCM_LOG_CALLER_FMT(INFO, omon_log_id,
+            "Rogue ONU Scan Violation: AlmState = %s, Link Mac %s, LLID 0x%x, Range=%0d, Pon_ni=%2d\r\n",
+                       (rogue_ind->data.alarm_status.alarm_status == BCMOLT_STATUS_ON ? "ON" : "OFF"),
+                       bcmos_mac_2_str(&rogue_ind->key.mac_address, tBuf),
+                         rogue_ind->data.alarm_status.denied_llid,
+                         rogue_ind->data.alarm_status.denied_range,
+                         rogue_ind->key.epon_ni);
+
+    return BCM_ERR_OK;
+}
+
+// epon rogue scan complete specific indication handler interface --
+static bcmos_errno bcmolt_user_appl_rogue_complete_handle_ind(bcmolt_devid device_id,
+                                                              uint8_t instance,
+                                                              bcmolt_auto *ind)
+{
+    (void)instance;
+    bcmolt_epon_ni_rogue_scan_complete* rogue_ind;
+
+    rogue_ind = (bcmolt_epon_ni_rogue_scan_complete *) ind;
+
+    /* Notify external host code of the outcome through an optional callback,
+       defaulting to output in the CLI session where the command was initiated
+       if no callback is supplied. */
+
+    BCM_LOG_CALLER_FMT(INFO, omon_log_id,
+            "Rogue ONU scan complete for Pon %d, Status = %s\r\n",
+                       rogue_ind->key.epon_ni,
+                       bcmolt_get_scan_result(rogue_ind->data.return_ind_status));
+    return BCM_ERR_OK;
+}
+
+// public indication handler interface -- called in transport layer context
+bcmos_errno bcmolt_user_appl_omon_handle_ind(bcmolt_devid device_id, uint8_t instance, bcmolt_auto *ind)
+{
+
+    // Not an error, we just don't care about this indication.
+    bcmos_errno rc = BCM_ERR_OK;
+
+    // We look at message targetting epon ni.
+    if (ind->hdr.obj_type == BCMOLT_OBJ_ID_EPON_NI)
+    {
+        // We look at RSSI Completion event indications.
+        if (ind->hdr.subgroup == (uint16_t)BCMOLT_EPON_NI_AUTO_ID_RSSI_MEASUREMENT_COMPLETED)
+        {
+            rc = bcmolt_user_appl_rssi_handle_ind(device_id,instance,ind);
+        }
+        else
+        {
+            // We look for Rogue Scan Complete event indications.
+            if (ind->hdr.subgroup == (uint16_t)BCMOLT_EPON_NI_AUTO_ID_ROGUE_SCAN_COMPLETE)
+            {
+                rc = bcmolt_user_appl_rogue_complete_handle_ind(device_id, instance, ind);
+            }
+        }
+
+        if (rc != BCM_ERR_OK )
+        {
+            BCM_LOG_CALLER_FMT(INFO, omon_log_id,
+                    "OMON Handle Indication Error: Pon %d, Type %d, Rc %d\r\n",
+                               instance, ind->hdr.subgroup, rc);
+        }
+
+        // Not an error, we just don't care about this indication.
+        return BCM_ERR_OK;
+    }
+
+    // We look at message targetting epon denied links.
+    if (ind->hdr.obj_type == BCMOLT_OBJ_ID_EPON_DENIED_LINK)
+    {
+        // We look at Denied Link Events of this type.
+        if (ind->hdr.subgroup == BCMOLT_EPON_DENIED_LINK_AUTO_ID_ROGUE_VIOLATION)
+        {
+            rc = bcmolt_user_appl_rogue_handle_ind(device_id, instance, ind);
+        }
+        else
+        {
+            // Not an error, we just don't care about this object.
+            return BCM_ERR_OK;
+        }
+    }
+    return rc;
+
+} /* bcmolt_user_appl_omon_handle_ind */
+
+/**
+ * \brief Optical monitoring task message handler
+ *
+ * This function is the optical monitoring task handler.  At this time the only
+ * message is BCMOS_MSG_ID_INITIATE_RSSI_SAMPLE which starts the RSSI
+ * measurement on the OLT.
+ *
+ * \param module_id BCMOS_MODULE_ID_USER_APPL_OMON
+ * \param os_msg Message contents
+ */
+static
+void omon_os_msg_handle(bcmos_module_id module_id, bcmos_msg *os_msg)
+{
+    omon_task_msg *msg = (omon_task_msg *)os_msg;
+
+    switch (msg->os_msg.type)
+    {
+    case BCMOS_MSG_ID_INITIATE_RX_POWER:
+            omon_rssi_measurement_initiate(msg->session,
+                                       &msg->link_key,
+                                       msg->trigger_width_ns ,
+                                       msg->trigger_delay_ns,
+                                       msg->sample_period_us);
+        break;
+    case BCMOS_MSG_ID_INITIATE_TRX_STATUS:
+
+            omon_trx_status_initiate(msg->session,
+                                     &msg->link_key);
+            break;
+        case BCMOS_MSG_ID_INITIATE_ROGUE_SCAN:
+            omon_run_rogue_llid_scan(msg->session,
+                                     &msg->link_key,
+                                     msg->llid,
+                                     msg->scan_mode);
+
+        break;
+    case BCMOS_MSG_ID_INITIATE_RSSI_READ:
+            omon_rssi_read_initiate(msg->session,
+                                     &msg->link_key);
+      break;
+    default:
+        break;
+    }
+    bcmos_free(os_msg);
+} /* omon_os_msg_handle */
+
+
+/**
+ * \brief Start the optical monitoring task
+ *
+ * This function starts the user level optical monitoring task and creates the
+ * optical monitoring module.  It should only be called once at start up.
+ *
+ * \return
+ * None
+ */
+void bcmolt_epon_omon_appl_init(void)
+{
+    bcmos_errno rc;
+    bcmos_task_parm task_params =
+    {
+        .name = "user_appl_omon",
+        .priority = TASK_PRIORITY_USER_APPL_OMON,
+        .core = BCMOS_CPU_CORE_ANY, /* No CPU affinity */
+        .init_handler = NULL
+    };
+    bcmos_module_parm module_params =
+    {
+        .qparm =
+        {
+            .name = "user_appl_omon",
+            .size = OMON_TASK_MSG_Q_SIZE
+        }
+    };
+
+    if (is_running)
+    {
+        return;
+    }
+
+    omon_log_id = bcm_dev_log_id_register("user_appl_omon",
+                                           DEV_LOG_LEVEL_INFO,
+                                           DEV_LOG_ID_TYPE_BOTH);
+    BUG_ON(DEV_LOG_INVALID_ID == omon_log_id);
+
+    rc = bcmos_task_create(&omon_task, &task_params);
+    BUG_ON(rc != BCM_ERR_OK);
+
+    rc = bcmos_module_create(BCMOS_MODULE_ID_USER_APPL_OMON, &omon_task,
+                             &module_params);
+    BUG_ON(rc != BCM_ERR_OK);
+
+    is_running = BCMOS_TRUE;
+} /* bcmolt_epon_omon_appl_init */
+
+
+/*******************************************************************************
+ * CLI
+ ******************************************************************************/
+
+
+/**
+ * \brief RX power sample CLI command
+ *
+ * This function handles the "sample" CLI command.  It processes the CLI
+ * parameters and dispatches a start sample message to the optical monitoring
+ * task.
+ *
+ * \param session CLI session ID
+ * \param parm Command parameters
+ * \param n_parms Number of parameters
+ *
+ * \return
+ * BCM_ERR_OK if successful, error code if not
+ */
+static
+bcmos_errno omon_cmd_rx_power(bcmcli_session *session,
+                            const bcmcli_cmd_parm parm[],
+                            uint16_t n_parms)
+{
+    omon_link_key link_key;
+    bcmos_errno rc;
+    bcmcli_cmd_parm *epon_ni;
+    bcmcli_cmd_parm *mac_addr;
+    bcmcli_cmd_parm *Twidth_ns;
+    bcmcli_cmd_parm *Tdelay_ns;
+    bcmcli_cmd_parm *Tsample_us;
+    omon_task_msg *msg;
+
+    /* Get the CLI parameters. */
+    epon_ni    = bcmcli_find_named_parm(session, "epon_ni");
+    mac_addr   = bcmcli_find_named_parm(session, "granted_link");
+    Twidth_ns  = bcmcli_find_named_parm(session, "trigger_width");  // RSSI Twidth in ns
+    Tdelay_ns  = bcmcli_find_named_parm(session, "trigger_delay");  // RSSI Tdelay in ns
+    Tsample_us = bcmcli_find_named_parm(session, "sample_period");  // RSSI Tsample in us
+
+    link_key.device_id = current_device;
+    link_key.epon_ni = (bcmolt_epon_ni)epon_ni->value.number;
+    link_key.mac_address = (bcmos_mac_address)mac_addr->value.mac;
+
+    /* Send an indication to the internal task's message queue to be
+       processed. */
+    msg = bcmos_calloc(sizeof(*msg));
+    BUG_ON(msg == NULL);
+    msg->os_msg.type = BCMOS_MSG_ID_INITIATE_RX_POWER;
+    msg->os_msg.handler = omon_os_msg_handle;
+    msg->link_key = link_key;
+    msg->trigger_width_ns = Twidth_ns->value.number;
+    msg->trigger_delay_ns = Tdelay_ns->value.number;
+    msg->sample_period_us = Tsample_us->value.number;
+    msg->session = session;
+    rc = bcmos_msg_send_to_module(BCMOS_MODULE_ID_USER_APPL_OMON,
+                                  &msg->os_msg, 0);
+    BUG_ON(rc);
+
+
+    return rc;
+} /* omon_cmd_sample */
+
+static
+bcmos_errno omon_cmd_trx_data(bcmcli_session *session,
+                              const bcmcli_cmd_parm parm[],
+                              uint16_t n_parms)
+{
+    omon_link_key link_key;
+    bcmos_errno rc;
+    bcmcli_cmd_parm *epon_ni;
+    omon_task_msg *msg;
+
+    /* Get the CLI parameters. */
+    epon_ni = bcmcli_find_named_parm(session, "epon_ni");
+
+    link_key.device_id = current_device;
+    link_key.epon_ni = (bcmolt_epon_ni)epon_ni->value.number;
+
+    /* Send an indication to the internal task's message queue to be
+       processed. */
+    msg = bcmos_calloc(sizeof(*msg));
+    BUG_ON(msg == NULL);
+    msg->os_msg.type = BCMOS_MSG_ID_INITIATE_TRX_STATUS;
+    msg->os_msg.handler = omon_os_msg_handle;
+    msg->link_key = link_key;
+    msg->session = session;
+    rc = bcmos_msg_send_to_module(BCMOS_MODULE_ID_USER_APPL_OMON,
+                                  &msg->os_msg, 0);
+    BUG_ON(rc);
+
+
+    return rc;
+}
+/* omon_cmd_trx_data */
+
+static
+bcmos_errno omon_cmd_read_rssi_result(bcmcli_session *session,
+                              const bcmcli_cmd_parm parm[],
+                              uint16_t n_parms)
+{
+    omon_link_key link_key;
+    bcmos_errno rc;
+    bcmcli_cmd_parm *epon_ni;
+    omon_task_msg *msg;
+
+    /* Get the CLI parameters. */
+    epon_ni = bcmcli_find_named_parm(session, "epon_ni");
+
+    link_key.device_id = current_device;
+    link_key.epon_ni = (bcmolt_epon_ni)epon_ni->value.number;
+
+    /* Send an indication to the internal task's message queue to be
+       processed. */
+    msg = bcmos_calloc(sizeof(*msg));
+    BUG_ON(msg == NULL);
+    msg->os_msg.type = BCMOS_MSG_ID_INITIATE_RSSI_READ;
+    msg->os_msg.handler = omon_os_msg_handle;
+    msg->link_key = link_key;
+    msg->session = session;
+    rc = bcmos_msg_send_to_module(BCMOS_MODULE_ID_USER_APPL_OMON,
+                                  &msg->os_msg, 0);
+    BUG_ON(rc);
+
+
+    return rc;
+}
+/* omon_cmd_read_rssi_result */
+
+static
+bcmos_errno omon_cmd_llid_scan(bcmcli_session *session,
+                              const bcmcli_cmd_parm parm[],
+                              uint16_t n_parms)
+{
+    omon_link_key link_key;
+    bcmos_errno rc;
+    bcmcli_cmd_parm *epon_ni;
+    bcmcli_cmd_parm *epon_llid;
+    bcmcli_cmd_parm *epon_mode;
+    omon_task_msg *msg;
+
+    /* Get the CLI parameters. */
+    epon_ni = bcmcli_find_named_parm(session, "epon_ni");
+    epon_mode = bcmcli_find_named_parm(session, "scan_mode");
+    epon_llid = bcmcli_find_named_parm(session, "epon_llid");
+
+    link_key.device_id = current_device;
+    link_key.epon_ni = (bcmolt_epon_ni)epon_ni->value.number;
+
+    /* Send an indication to the internal task's message queue to be
+       processed. */
+    msg = bcmos_calloc(sizeof(*msg));
+    BUG_ON(msg == NULL);
+    msg->os_msg.type = BCMOS_MSG_ID_INITIATE_ROGUE_SCAN;
+    msg->os_msg.handler = omon_os_msg_handle;
+    msg->link_key = link_key;
+    msg->session = session;
+    msg->llid = epon_llid->value.number;
+    msg->scan_mode = epon_mode->value.number;
+    rc = bcmos_msg_send_to_module(BCMOS_MODULE_ID_USER_APPL_OMON,
+                                  &msg->os_msg, 0);
+    BUG_ON(rc);
+
+
+    return rc;
+}
+
+
+/**
+ * \brief Install CLI commands
+ *
+ * This function creates and optical monitoring command directoy "omon" and
+ * installs optical monitoring CLI commands to this directory.
+ *
+ * \param top_dir Parent of "omon" directory
+ *
+ * \return
+ * BCM_ERR_OK if successful, error code if not
+ */
+void bcmolt_user_appl_epon_omon_cli_init(bcmcli_entry *top_dir)
+{
+    static const char *dir_name = "omon";
+
+    if (bcmcli_dir_find(top_dir, dir_name))
+    {
+        return;
+    }
+
+    bcmcli_entry *dir = bcmcli_dir_add(top_dir,
+                                       dir_name,
+                                       "EPON optical monitoring commands",
+                                       BCMCLI_ACCESS_ADMIN, NULL);
+    BUG_ON(dir == NULL);
+
+    BCMCLI_MAKE_CMD(dir, "rx_power", "Issue RX Power Measurement", omon_cmd_rx_power,
+            BCMCLI_MAKE_PARM("epon_ni", "EPON NI", BCMCLI_PARM_NUMBER, 0),
+            BCMCLI_MAKE_PARM("granted_link", "Link mac address, 000000000000 for Idle Power", BCMCLI_PARM_MAC, 0),
+            BCMCLI_MAKE_PARM("trigger_width",
+                             "RSSI Trigger Width (Tw) in ns, Desired width of RSSI Trigger based on the Optical Module Specifications."
+                             "This is a mandatory parameter used for all RX Power measurements ( including Idle power) and must not be 0."
+                             "Note: The granularity of the device is 1 TQ (16ns) the input will be rounded up to the next TQ."
+                             , BCMCLI_PARM_NUMBER, 0),
+            BCMCLI_MAKE_PARM("trigger_delay",
+                             "RSSI Trigger Delay (Td) in ns, Desired delay to meet the trigger delay timing requirement of the Optical Module Specifications."
+                             "The rssi trigger delay is measured from the start of sync_time and is adjusted as needed. "
+                             "The trigger delay moves the assertion of the RSSI Trigger strobe into the grant window."
+                             "Note: The granularity of the device is 1 TQ (16ns) the input will be rounded up to the next TQ."
+                             , BCMCLI_PARM_NUMBER, 0),
+            BCMCLI_MAKE_PARM("sample_period",
+                             "(Ti2c) Sample period in uS, internal I2C hold/prohibit time where access to device is not allowed."
+                             "During this period the internal RSSI data is invalid and I2C opertions on this device must not be executed."
+                             "A value of 500uS is recommended for most applications. "
+                             , BCMCLI_PARM_NUMBER, 0));
+
+    BCMCLI_MAKE_CMD(dir, "trx_data", "Read Tranceiver Data", omon_cmd_trx_data,
+            BCMCLI_MAKE_PARM("epon_ni", "EPON NI", BCMCLI_PARM_NUMBER, 0));
+
+    BCMCLI_MAKE_CMD(dir, "read_rssi", "Read RSSI Result from Tranceiver", omon_cmd_read_rssi_result,
+            BCMCLI_MAKE_PARM("epon_ni", "EPON NI", BCMCLI_PARM_NUMBER, 0));
+
+    BCMCLI_MAKE_CMD(dir, "llid_scan", "Run Rogue ONU LLID Scan", omon_cmd_llid_scan,
+            BCMCLI_MAKE_PARM("epon_ni", "EPON NI", BCMCLI_PARM_NUMBER, 0),
+            BCMCLI_MAKE_PARM("scan_mode", "LLID scan mode 1 for full pon scan, 0 for targeted (llid required for targeted)", BCMCLI_PARM_NUMBER, 0),
+            BCMCLI_MAKE_PARM("epon_llid", "EPON llid to scan when mode=0", BCMCLI_PARM_HEX, 0));
+}
+/* bcmolt_user_appl_epon_omon_cli_init */
+
+
+/* End of file omon.c */
+
diff --git a/bcm68620_release/release/host_reference/user_appl/omon/omon.h b/bcm68620_release/release/host_reference/user_appl/omon/omon.h
new file mode 100644
index 0000000..0e31b7a
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/omon/omon.h
@@ -0,0 +1,69 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+*/
+
+#ifndef _OMON_H_
+#define _OMON_H_
+
+#include <bcmos_system.h>
+#include <bcmolt_api.h>
+#include <bcmolt_model_types.h>
+#include <bcmolt_utils.h>
+#include <bcm_dev_log.h>
+
+
+
+/**
+ * \brief Start the optical monitoring task
+ *
+ * This function starts the user level optical monitoring task and creates the
+ * optical monitoring module.  It should only be called once at start up.
+ *
+ * \return
+ * None
+ */
+extern
+void bcmolt_epon_omon_appl_init (void);
+
+
+/**
+ * \brief Install CLI commands
+ *
+ * This function creates and optical monitoring command directoy "omon" and
+ * installs optical monitoring CLI commands to this directory.
+ *
+ * \param top_dir Parent of "omon" directory
+ */
+
+void bcmolt_user_appl_epon_omon_cli_init(bcmcli_entry *top_dir);
+
+
+bcmos_errno bcmolt_user_appl_omon_handle_ind(bcmolt_devid device_id, uint8_t instance, bcmolt_auto *ind);
+
+
+#endif /* End of file omon.h */
diff --git a/bcm68620_release/release/host_reference/user_appl/playback/Makefile b/bcm68620_release/release/host_reference/user_appl/playback/Makefile
new file mode 100644
index 0000000..0374028
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/playback/Makefile
@@ -0,0 +1,12 @@
+ifeq ("$(ENABLE_CLI)", "y")
+    MOD_NAME = bcm_user_appl_playback
+    MOD_TYPE = lib
+    MOD_DEPS = utils dev_log common_api transport
+    srcs = bcmolt_user_appl_playback.c
+    ifeq ("$(OS_KERNEL)", "linux")
+	MOD_DEPS += dev_log_linux
+    endif
+
+    USE_LINT=yes
+endif
+
diff --git a/bcm68620_release/release/host_reference/user_appl/playback/bcmolt_user_appl_playback.c b/bcm68620_release/release/host_reference/user_appl/playback/bcmolt_user_appl_playback.c
new file mode 100644
index 0000000..a3b463b
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/playback/bcmolt_user_appl_playback.c
@@ -0,0 +1,1573 @@
+/*
+  <:copyright-BRCM:2016:DUAL/GPL:standard
+
+  Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+  All Rights Reserved
+
+  Unless you and Broadcom execute a separate written software license
+  agreement governing use of this software, this software is licensed
+  to you under the terms of the GNU General Public License version 2
+  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+  with the following added to such license:
+
+  As a special exception, the copyright holders of this software give
+  you permission to link this software with independent modules, and
+  to copy and distribute the resulting executable under terms of your
+  choice, provided that you also meet, for each linked independent
+  module, the terms and conditions of the license of that module.
+  An independent module is a module which is not derived from this
+  software.  The special exception does not apply to any modifications
+  of the software.
+
+  Not withstanding the above, under no circumstances may you combine
+  this software in any way with any other Broadcom software provided
+  under a license other than the GPL, without Broadcom's express prior
+  written consent.
+
+  :>
+*/
+
+#include "bcmos_system.h"
+#include "bcm_dev_log.h"
+#include "bcmolt_api.h"
+#include "bcm_api_cli_helpers.h"
+#include "bcmolt_model_types.h"
+#include "bcmtr_debug.h"
+#include "bcmtr_interface.h"
+#include "bcmolt_user_appl_playback.h"
+#include "bcmolt_bit_utils.h"
+
+/* 'MPBx' in ASCII (M)aple (P)lay(b)ack version x */
+#define VERSION0    0x4d504230
+#define VERSION1    0x4d504231
+
+static const uint32_t CHUNK_SIZE = 2000;
+
+static const char *cap_loc_str[BCMOLT_API_CAPTURE_LOCATION__NUM_OF] =
+{
+    "device",
+    "host"
+};
+
+typedef struct
+{
+    dev_log_id log_id;
+} playback_context;
+
+static playback_context pb_ctxt[BCMTR_MAX_OLTS];
+
+typedef enum
+{
+    PB_FORMAT_API_CLI,
+    PB_FORMAT_C_API,
+
+    PB_FORMAT__COUNT
+} pb_format;
+
+typedef enum
+{
+    PB_CLI_EXTRA_NONE,
+    PB_CLI_EXTRA_MULTI,
+    PB_CLI_EXTRA_STAT,
+    PB_CLI_EXTRA_SUBGROUP
+} pb_cli_extra;
+
+typedef enum
+{
+    PB_FIELDS_NONE,
+    PB_FIELDS_GET,
+    PB_FIELDS_MULTI,
+    PB_FIELDS_SET
+} pb_fields;
+
+typedef struct
+{
+    uint32_t version;
+    bcmolt_api_capture_location location;
+    bcmolt_firmware_sw_version fw_ver;
+    bcmolt_host_sw_version host_ver;
+    uint32_t buf_size;
+    void *capture_buffer;
+} bcmolt_playback;
+
+typedef struct
+{
+    bcmolt_buf buf;
+    bcmtr_capture_entry hdr;
+    uint8_t *msg_start;
+} playback_iterator_raw;
+
+typedef struct
+{
+    playback_iterator_raw raw;
+    bcmolt_buf msg_buf;
+    bcmolt_msg *msg;
+    bcmos_errno err;
+} playback_iterator;
+
+#define FOR_EACH_CAPTURE_ENTRY(it, buffer, size) \
+    bcmolt_buf_init(&(it).buf, size, buffer, BCMOLT_BUF_ENDIAN_FIXED); \
+    while (bcmtr_capture_entry_get_next(&(it).buf, &(it).hdr, &(it).msg_start))
+
+#define FOR_EACH_PLAYBACK_MSG(it, buffer, size) \
+    bcmolt_buf_init(&(it).raw.buf, size, buffer, BCMOLT_BUF_ENDIAN_FIXED); \
+    (it).msg = NULL; \
+    while (playback_next_entry_unpacked(&(it)))
+
+#define DEVICE_REF "device_id"
+#define RC_REF "rc"
+#define VAL_REF "val"
+#define MSG_REF "msg"
+#define KEY_REF "key"
+#define LIST_MEM_REF "list_mem"
+#define MSG_SET_REF "msg_set"
+#define MAX_MSGS_REF "max_msgs"
+#define INVERT_FILTER_REF "invert_filter"
+#define STAT_FLAGS_REF "stat_flags"
+#define DYN_LIST_SIZE "APICLI_DYNAMIC_LIST_BUFFER_SIZE"
+
+static void playback_iterator_cleanup(playback_iterator *it)
+{
+    if ((it->err == BCM_ERR_OK) && (it->msg != NULL))
+    {
+        bcmolt_msg_free(it->msg);
+        it->msg = NULL;
+    }
+}
+
+static bcmos_bool playback_next_entry_unpacked(playback_iterator *it)
+{
+    playback_iterator_cleanup(it);
+    bcmos_bool ret = bcmtr_capture_entry_get_next(&it->raw.buf, &it->raw.hdr, &it->raw.msg_start);
+    if (ret)
+    {
+        bcmolt_buf_init(&it->msg_buf, it->raw.hdr.msg_size, it->raw.msg_start, BCMOLT_BUF_ENDIAN_FIXED);
+        it->err = bcmolt_msg_unpack(&it->msg_buf, &it->msg);
+    }
+    return ret;
+}
+
+static bcmos_errno playback_read_block(uint32_t offset, uint32_t size, uint8_t *buf)
+{
+    bcmos_errno err;
+    bcmolt_debug_cfg debug_cfg;
+    bcmolt_debug_key debug_key = { };
+    bcmolt_api_capture_buffer_reader reader = { .offset = offset, .size = size };
+
+    BCMOLT_CFG_INIT(&debug_cfg, debug, debug_key);
+    BCMOLT_CFG_PROP_SET(&debug_cfg, debug, api_capture_buffer_read, reader);
+    err = bcmolt_cfg_set(current_device, &debug_cfg.hdr);
+    if (BCM_ERR_OK != err)
+    {
+        BCM_LOG(ERROR, pb_ctxt[current_device].log_id, "Failed to update reader (%u, %u)!\n", offset, size);
+    }
+    else
+    {
+        BCMOLT_CFG_INIT(&debug_cfg, debug, debug_key);
+        BCMOLT_CFG_PROP_GET(&debug_cfg, debug, api_capture_buffer);
+        debug_cfg.data.api_capture_buffer.val = buf;
+        err = bcmolt_cfg_get(current_device, &debug_cfg.hdr);
+        if (BCM_ERR_OK != err)
+        {
+            BCM_LOG(ERROR, pb_ctxt[current_device].log_id, "Failed to retrieve capture buffer chunk (%u, %u)!\n",
+                offset, size);
+        }
+    }
+
+    return err;
+}
+
+static bcmos_errno playback_read(void **buffer, uint32_t *length, bcmolt_api_capture_location *capture_location)
+{
+    bcmos_errno err;
+    bcmolt_debug_cfg debug_cfg;
+    bcmolt_debug_key debug_key = { };
+
+    if ((buffer == NULL) || (length == NULL))
+    {
+        BCM_LOG(ERROR, pb_ctxt[current_device].log_id, "buffer (%p) and length (%p) cannot be NULL\n", buffer, length);
+    }
+
+    BCMOLT_CFG_INIT(&debug_cfg, debug, debug_key);
+    BCMOLT_CFG_PROP_GET(&debug_cfg, debug, api_capture_stats);
+    BCMOLT_CFG_PROP_GET(&debug_cfg, debug, api_capture_cfg);
+    err = bcmolt_cfg_get(current_device, &debug_cfg.hdr);
+    if (BCM_ERR_OK != err)
+    {
+        BCM_LOG(ERROR, pb_ctxt[current_device].log_id, "Failed to retrieve capture stats!\n");
+    }
+    else
+    {
+        void *capture_buffer;
+        uint32_t buf_size = debug_cfg.data.api_capture_stats.readable_bytes;
+        uint32_t offset = 0;
+
+        *capture_location = debug_cfg.data.api_capture_cfg.location;
+
+        BCM_LOG(DEBUG, pb_ctxt[current_device].log_id, "Retrieving %u byte buffer\n", buf_size);
+        capture_buffer = bcmos_alloc(buf_size);
+        if (NULL != capture_buffer)
+        {
+            while ((offset + CHUNK_SIZE) < buf_size)
+            {
+                BCM_LOG(DEBUG, pb_ctxt[current_device].log_id, "Reading bytes %u - %u\n", offset, offset + CHUNK_SIZE);
+                err = playback_read_block(offset, CHUNK_SIZE, (uint8_t*)capture_buffer + offset);
+                if (BCM_ERR_OK != err)
+                {
+                    break;
+                }
+                offset += CHUNK_SIZE;
+            }
+
+            if (BCM_ERR_OK == err)
+            {
+                BCM_LOG(DEBUG, pb_ctxt[current_device].log_id, "Reading bytes %u - %u\n", offset, buf_size);
+                err = playback_read_block(offset, buf_size - offset, (uint8_t*)capture_buffer + offset);
+            }
+        }
+
+        *buffer = capture_buffer;
+        *length = buf_size;
+    }
+
+    return err;
+}
+
+static bcmos_errno playback_dump(bcmcli_session *session, void *capture_buf, uint32_t buf_size)
+{
+    playback_iterator it;
+    bcmos_errno err = BCM_ERR_OK;
+
+    FOR_EACH_PLAYBACK_MSG(it, capture_buf, buf_size)
+    {
+        BCM_LOG(DEBUG, pb_ctxt[current_device].log_id, "Dumping message at %u of %u (%u)\n",
+                bcmolt_buf_get_used(&it.raw.buf), buf_size, it.raw.hdr.msg_size);
+        bcmcli_session_print(session, "\n%08x %u:\n", it.raw.hdr.timestamp, it.raw.hdr.event);
+        if (BCM_ERR_OK == it.err)
+        {
+            err = apicli_msg_dump(session, it.msg);
+            BCM_LOG(DEBUG, pb_ctxt[current_device].log_id, "Dump status: %s\n", bcmos_strerror(err));
+        }
+        else
+        {
+            BCM_LOG(DEBUG, pb_ctxt[current_device].log_id, "Unpacking failed: %s\n", bcmos_strerror(err));
+            if ((it.raw.msg_start + it.raw.hdr.msg_size) > (it.raw.buf.start + it.raw.buf.len))
+            {
+                bcmcli_session_print(session, "Message length is insane!\n");
+            }
+            else
+            {
+                bcmcli_session_hexdump(session, it.raw.msg_start, 0, it.raw.hdr.msg_size, NULL);
+            }
+        }
+    }
+
+    return err;
+}
+
+static bcmos_bool playback_should_send(bcmolt_api_capture_location capture_location, bcmtr_cld_event_type event_type)
+{
+    switch (capture_location)
+    {
+        case BCMOLT_API_CAPTURE_LOCATION_DEVICE:
+            switch (event_type)
+            {
+                case BCMTR_CLD_EV_RECV:
+                case BCMTR_CLD_EV_RECV_DISCARD:
+                    return BCMOS_TRUE;
+                default:
+                    return BCMOS_FALSE;
+            }
+        case BCMOLT_API_CAPTURE_LOCATION_HOST:
+            switch (event_type)
+            {
+                case BCMTR_CLD_EV_SEND:
+                case BCMTR_CLD_EV_RESEND:
+                    return BCMOS_TRUE;
+                default:
+                    return BCMOS_FALSE;
+            }
+        default:
+            return BCMOS_FALSE;
+    }
+}
+
+/*lint -e{429} */
+static bcmos_errno playback_replay(
+    bcmolt_devid device,
+    void *capture_buf,
+    uint32_t buf_size,
+    bcmolt_api_capture_location location,
+    bcmos_bool keep_time)
+{
+    bcmos_errno err = BCM_ERR_OK;
+    playback_iterator_raw it;
+    uint32_t last_time_us = 0;
+    bcmos_bool first = BCMOS_TRUE;
+
+    FOR_EACH_CAPTURE_ENTRY(it, capture_buf, buf_size)
+    {
+        bcmolt_buf msg_buf;
+        bcmolt_msg *msg = NULL;
+
+        BCM_LOG(DEBUG, pb_ctxt[device].log_id, "Processing message (%u,%u,%u)\n",
+                it.hdr.event, it.hdr.timestamp, it.hdr.msg_size);
+        if (playback_should_send(location, (bcmtr_cld_event_type)it.hdr.event))
+        {
+            if (keep_time)
+            {
+                if (!first)
+                {
+                    /* approximate original timing; doesn't account for processing time in this code - this could be
+                       improved */
+                    BCM_LOG(DEBUG, pb_ctxt[device].log_id, "Sleeping for %u us\n", it.hdr.timestamp - last_time_us);
+                    bcmos_usleep(it.hdr.timestamp - last_time_us);
+                }
+                else
+                {
+                    first = BCMOS_FALSE;
+                }
+                last_time_us = it.hdr.timestamp;
+            }
+            BCM_LOG(DEBUG, pb_ctxt[device].log_id, "Unpacking message\n");
+            bcmolt_buf_init(&msg_buf, it.hdr.msg_size, it.msg_start, BCMOLT_BUF_ENDIAN_FIXED);
+            err = bcmolt_msg_unpack(&msg_buf, &msg);
+            if (BCM_ERR_OK == err)
+            {
+                BCM_LOG(DEBUG, pb_ctxt[device].log_id, "Sending message\n");
+                err = bcmtr_send(device, msg, BCMTR_SEND_FLAGS_NONE);
+                bcmolt_msg_free(msg);
+                if (BCM_ERR_OK != err)
+                {
+                    BCM_LOG(INFO, pb_ctxt[device].log_id, "Sending failed: %s\n", bcmos_strerror(err));
+                    return err;
+                }
+            }
+            else
+            {
+                BCM_LOG(INFO, pb_ctxt[device].log_id, "Unpacking failed: %s\n", bcmos_strerror(err));
+                return err;
+            }
+        }
+    }
+
+    return err;
+}
+
+static bcmos_errno playback_cli_dump(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    bcmos_errno err;
+    void *capture_buffer;
+    uint32_t buf_size;
+    bcmolt_api_capture_location location;
+
+    err = playback_read(&capture_buffer, &buf_size, &location);
+
+    if (BCM_ERR_OK == err)
+    {
+        bcmcli_print(session, "Capture from %s:\n", cap_loc_str[location]);
+        playback_dump(session, capture_buffer, buf_size);
+    }
+
+    bcmos_free(capture_buffer);
+
+    return err;
+}
+
+static void playback_fw_version_get(bcmolt_devid device, bcmolt_firmware_sw_version *fw)
+{
+    bcmos_errno err;
+    bcmolt_device_cfg dev_cfg;
+    bcmolt_device_key dev_key = { };
+
+    BCMOLT_CFG_INIT(&dev_cfg, device, dev_key);
+    BCMOLT_CFG_PROP_GET(&dev_cfg, device, firmware_sw_version);
+    err = bcmolt_cfg_get(device, &dev_cfg.hdr);
+    if (BCM_ERR_OK != err)
+    {
+        BCM_LOG(WARNING, pb_ctxt[device].log_id, "Failed to retrieve fw version!\n");
+    }
+    else
+    {
+        *fw = dev_cfg.data.firmware_sw_version;
+    }
+}
+
+static void playback_host_version_get(bcmolt_devid device, bcmolt_host_sw_version *host)
+{
+    bcmos_errno err;
+    bcmolt_device_cfg dev_cfg;
+    bcmolt_device_key dev_key = { };
+
+    BCMOLT_CFG_INIT(&dev_cfg, device, dev_key);
+    BCMOLT_CFG_PROP_GET(&dev_cfg, device, host_sw_version);
+    err = bcmolt_cfg_get(device, &dev_cfg.hdr);
+    if (BCM_ERR_OK != err)
+    {
+        BCM_LOG(WARNING, pb_ctxt[device].log_id, "Failed to retrieve host version!\n");
+    }
+    else
+    {
+        *host = dev_cfg.data.host_sw_version;
+    }
+}
+
+static bcmos_errno playback_cli_save(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    const char *filename = bcmcli_find_named_parm(session, "file")->value.string;
+    bcmolt_playback mpb = {};
+    bcmos_errno err;
+    FILE *file;
+    uint32_t temp;
+
+    err = playback_read(&mpb.capture_buffer, &mpb.buf_size, &mpb.location);
+
+    if (BCM_ERR_OK == err)
+    {
+        playback_fw_version_get(current_device, &mpb.fw_ver);
+        playback_host_version_get(current_device, &mpb.host_ver);
+
+        file = fopen(filename, "wb");
+        /* write file version */
+        temp = BCMOLT_BUF_ENDIAN_CPU_TO_BUF(U32, VERSION1);
+        fwrite(&temp, sizeof(uint32_t), 1, file);
+        /* write capture location */
+        temp = BCMOLT_BUF_ENDIAN_CPU_TO_BUF(U32, (uint32_t)mpb.location);
+        fwrite(&temp, sizeof(uint32_t), 1, file);
+        /* write firmware version */
+        fwrite(&mpb.fw_ver.major, sizeof(uint8_t), 1, file);
+        fwrite(&mpb.fw_ver.minor, sizeof(uint8_t), 1, file);
+        fwrite(&mpb.fw_ver.revision, sizeof(uint8_t), 1, file);
+        temp = BCMOLT_BUF_ENDIAN_CPU_TO_BUF(U32, mpb.fw_ver.model);
+        fwrite(&temp, sizeof(uint32_t), 1, file);
+        fwrite(mpb.fw_ver.build_time, sizeof(mpb.fw_ver.build_time), 1, file);
+        /* write host version */
+        fwrite(&mpb.host_ver.major, sizeof(uint8_t), 1, file);
+        fwrite(&mpb.host_ver.minor, sizeof(uint8_t), 1, file);
+        fwrite(&mpb.host_ver.revision, sizeof(uint8_t), 1, file);
+        temp = BCMOLT_BUF_ENDIAN_CPU_TO_BUF(U32, mpb.host_ver.model);
+        fwrite(&temp, sizeof(uint32_t), 1, file);
+        fwrite(mpb.host_ver.build_time, sizeof(mpb.host_ver.build_time), 1, file);
+        /* write capture buffer */
+        temp = BCMOLT_BUF_ENDIAN_CPU_TO_BUF(U32, mpb.buf_size);
+        fwrite(&temp, sizeof(uint32_t), 1, file);
+        fwrite(mpb.capture_buffer, mpb.buf_size, 1, file);
+        fclose(file);
+    }
+
+    bcmos_free(mpb.capture_buffer);
+
+    return err;
+}
+
+static bcmos_bool playback_version_match(const bcmolt_playback *mpb)
+{
+    bcmolt_firmware_sw_version fw_curr = {};
+    bcmolt_host_sw_version host_curr = {};
+
+    playback_fw_version_get(current_device, &fw_curr);
+    playback_host_version_get(current_device, &host_curr);
+
+    if ((mpb->fw_ver.model != fw_curr.model) || (mpb->host_ver.model != host_curr.model) ||
+        (fw_curr.model == 0) || (host_curr.model == 0))
+    {
+        BCM_LOG(WARNING, pb_ctxt[current_device].log_id,
+                "Possible version mismatch: Capture FW %u, HOST %u; Current FW %u, HOST %u\n",
+                mpb->fw_ver.model, mpb->host_ver.model, fw_curr.model, host_curr.model);
+        return BCMOS_FALSE;
+    }
+
+    return BCMOS_TRUE;
+}
+
+static bcmos_errno playback_file_open(const char *filename, bcmolt_playback *mpb)
+{
+    FILE *file;
+    uint32_t temp;
+    bcmos_errno err = BCM_ERR_OK;
+    uint32_t items_read;
+
+    file = fopen(filename, "rb");
+    items_read = fread(&temp, sizeof(uint32_t), 1, file);
+    if (items_read != 1)
+        return BCM_ERR_PARSE;
+
+    mpb->version = BCMOLT_BUF_ENDIAN_BUF_TO_CPU(U32, temp);
+    switch (mpb->version)
+    {
+        case VERSION0:
+            items_read = fread(&temp, sizeof(uint32_t), 1, file);
+            if (items_read != 1)
+                break;
+            temp = BCMOLT_BUF_ENDIAN_BUF_TO_CPU(U32, temp);
+            mpb->location = (bcmolt_api_capture_location)temp;
+            items_read = fread(&temp, sizeof(uint32_t), 1, file);
+            if (items_read != 1)
+                break;
+            mpb->buf_size = BCMOLT_BUF_ENDIAN_BUF_TO_CPU(U32, temp);
+            mpb->capture_buffer = bcmos_alloc(mpb->buf_size);
+            items_read = fread(mpb->capture_buffer, mpb->buf_size, 1, file);
+            if (items_read != 1)
+                break;
+            break;
+        case VERSION1:
+            /* read capture location */
+            items_read = fread(&temp, sizeof(uint32_t), 1, file);
+            if (items_read != 1)
+                break;
+            temp = BCMOLT_BUF_ENDIAN_BUF_TO_CPU(U32, temp);
+            mpb->location = (bcmolt_api_capture_location)temp;
+            /* read firmware version */
+            items_read = fread(&mpb->fw_ver.major, sizeof(uint8_t), 1, file);
+            if (items_read != 1)
+                break;
+            items_read = fread(&mpb->fw_ver.minor, sizeof(uint8_t), 1, file);
+            if (items_read != 1)
+                break;
+            items_read = fread(&mpb->fw_ver.revision, sizeof(uint8_t), 1, file);
+            if (items_read != 1)
+                break;
+            items_read = fread(&temp, sizeof(uint32_t), 1, file);
+            if (items_read != 1)
+                break;
+            mpb->fw_ver.model = BCMOLT_BUF_ENDIAN_BUF_TO_CPU(U32, temp);
+            items_read = fread(mpb->fw_ver.build_time, sizeof(mpb->fw_ver.build_time), 1, file);
+            if (items_read != 1)
+                break;
+            /* read host version */
+            items_read = fread(&mpb->host_ver.major, sizeof(uint8_t), 1, file);
+            if (items_read != 1)
+                break;
+            items_read = fread(&mpb->host_ver.minor, sizeof(uint8_t), 1, file);
+            if (items_read != 1)
+                break;
+            items_read = fread(&mpb->host_ver.revision, sizeof(uint8_t), 1, file);
+            if (items_read != 1)
+                break;
+            items_read = fread(&temp, sizeof(uint32_t), 1, file);
+            if (items_read != 1)
+                break;
+            mpb->host_ver.model = BCMOLT_BUF_ENDIAN_BUF_TO_CPU(U32, temp);
+            items_read = fread(mpb->host_ver.build_time, sizeof(mpb->host_ver.build_time), 1, file);
+            if (items_read != 1)
+                break;
+            /* read capture buffer */
+            items_read = fread(&temp, sizeof(uint32_t), 1, file);
+            if (items_read != 1)
+                break;
+            mpb->buf_size = BCMOLT_BUF_ENDIAN_BUF_TO_CPU(U32, temp);
+            mpb->capture_buffer = bcmos_alloc(mpb->buf_size);
+            items_read = fread(mpb->capture_buffer, mpb->buf_size, 1, file);
+            if (items_read != 1)
+                break;
+            break;
+        default:
+            BCM_LOG(ERROR, pb_ctxt[current_device].log_id, "Unknown version: %u\n", mpb->version);
+            err = BCM_ERR_PARSE;
+            break;
+    }
+
+    fclose(file);
+
+    return err;
+}
+
+static bcmos_errno playback_cli_replay(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    const char *filename = bcmcli_find_named_parm(session, "file")->value.string;
+    bcmos_bool ignore_ver = BCMOS_FALSE;
+    bcmos_errno err;
+    bcmolt_playback mpb = {};
+
+    bcmcli_cmd_parm *iv_parm = bcmcli_find_named_parm(session, "ignore_version");
+    if (iv_parm != NULL)
+    {
+        ignore_ver = iv_parm->value.enum_val == (long)BCMOS_TRUE;
+    }
+
+    err = playback_file_open(filename, &mpb);
+
+    if (BCM_ERR_OK == err)
+    {
+        if (playback_version_match(&mpb) || ignore_ver)
+        {
+            err = playback_replay(current_device, mpb.capture_buffer, mpb.buf_size, mpb.location, BCMOS_TRUE);
+        }
+        else
+        {
+            bcmcli_print(session, "Possible version mismatch; use ignore_version=yes to force playback\n");
+            err = BCM_ERR_IMAGE_TYPE;
+        }
+        bcmos_free(mpb.capture_buffer);
+    }
+
+    return err;
+}
+
+static bcmos_errno playback_api_cli_append_prop(
+    bcmolt_string *api_cli,
+    uint32_t size,
+    void *data,
+    const bcmcli_prop_descr *pd,
+    const char *prefix)
+{
+    bcmos_errno err;
+    bcmcli_session *str;
+    void *prop_data = (void *)((long)data + pd->offset);
+
+    BCMOS_CHECK_RETURN_ERROR(pd->offset >= size, BCM_ERR_INTERNAL);
+    err = bcmcli_session_open_string(&str, api_cli);
+    BCMOS_RETURN_IF_ERROR(err);
+    err = apicli_dump_prop_param(str, pd, prop_data, prefix);
+    bcmcli_session_close(str);
+    BCMOS_RETURN_IF_ERROR(err);
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno playback_api_cli_key_write(
+    bcmolt_string* api_cli,
+    const bcmolt_msg* msg,
+    uint32_t key_size,
+    uint32_t key_offset)
+{
+    bcmos_errno err;
+    const bcmcli_prop_descr *pd;
+    void *data = (void *)((long)msg + key_offset);
+
+    for (uint16_t prop = 0;
+         api_cli_object_property(msg->obj_type, BCMOLT_MGT_GROUP_KEY, 0, prop, &pd) == BCM_ERR_OK;
+         ++prop)
+    {
+        err = playback_api_cli_append_prop(api_cli, key_size, data, pd, " ");
+        BCMOS_RETURN_IF_ERROR(err);
+    }
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno playback_api_cli_pm_write(bcmolt_string *api_cli, const bcmolt_msg* msg, bcmolt_presence_mask pm)
+{
+    int n;
+    const bcmcli_prop_descr *pd;
+
+    for (uint16_t prop = 0;
+         api_cli_object_property(msg->obj_type, msg->group, msg->subgroup, prop, &pd) == BCM_ERR_OK;
+         ++prop)
+    {
+        if (!(pm & (1ULL << prop)))
+        {
+            continue;
+        }
+        n = bcmolt_string_append(api_cli, " %s=yes", pd->name);
+        BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+    }
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno playback_api_cli_props_write(
+    bcmolt_string *api_cli,
+    const bcmolt_msg* msg,
+    const char *prefix,
+    uint32_t size,
+    uint32_t offset)
+{
+    bcmos_errno err;
+    const bcmcli_prop_descr *pd;
+    void *data = (void *)((long)msg + offset);
+
+    for (uint16_t prop = 0;
+         api_cli_object_property(msg->obj_type, msg->group, msg->subgroup, prop, &pd) == BCM_ERR_OK;
+         ++prop)
+    {
+        if (!(msg->presence_mask & (1ULL << prop)))
+        {
+            continue;
+        }
+        err = playback_api_cli_append_prop(api_cli, size, data, pd, prefix);
+        BCMOS_RETURN_IF_ERROR(err);
+    }
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno playback_api_cli_cmd_get(
+    bcmolt_string *api_cli,
+    const bcmolt_msg* msg,
+    const char *cmd,
+    pb_cli_extra extra_parms,
+    pb_fields field_parms)
+{
+    int n;
+    bcmos_errno err;
+    const char *name;
+    const char *desc;
+    uint32_t key_size;
+    uint32_t key_offset;
+    uint32_t data_size;
+    uint32_t data_offset;
+
+    BCM_LOG(DEBUG, pb_ctxt[current_device].log_id, "Start %s\n", cmd);
+
+    err = api_cli_object_name(msg->obj_type, &name, &desc);
+    BCMOS_RETURN_IF_ERROR(err);
+
+    n = bcmolt_string_append(api_cli, "/api/%s object=%s", cmd, name);
+    BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+
+    switch (extra_parms)
+    {
+        case PB_CLI_EXTRA_MULTI:
+            n = bcmolt_string_append(
+                api_cli,
+                " max_msgs=%u filter_invert=%s",
+                msg->msg_set->max_instances,
+                BITS_SET(msg->msg_set->filter_flags, BCMOLT_FILTER_FLAGS_INVERT_SELECTION) ? "yes" : "no");
+            BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+            break;
+        case PB_CLI_EXTRA_STAT:
+            n = bcmolt_string_append(api_cli, " clear=%s", BITS_SET(msg->type, BCMOLT_MSG_TYPE_CLEAR) ? "yes" : "no");
+            BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+            break;
+        case PB_CLI_EXTRA_SUBGROUP:
+            err = api_cli_object_subgroup_name(msg->obj_type, msg->group, msg->subgroup, &name, &desc);
+            BCMOS_RETURN_IF_ERROR(err);
+            n = bcmolt_string_append(api_cli, " sub=%s", name);
+            BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+            break;
+        default:
+            break;
+    }
+
+    /* get message info */
+    err = api_cli_object_struct_size(
+        msg->obj_type,
+        msg->group,
+        msg->subgroup,
+        &key_size,
+        &key_offset,
+        &data_size,
+        &data_offset);
+    BCMOS_RETURN_IF_ERROR(err);
+
+    if (BCMOLT_MGT_GROUP_AUTO_CFG != msg->group)
+    {
+        /* write key */
+        err = playback_api_cli_key_write(api_cli, msg, key_size, key_offset);
+        BCMOS_RETURN_IF_ERROR(err);
+    }
+
+    switch (field_parms)
+    {
+        case PB_FIELDS_GET:
+            /* write presence mask */
+            err = playback_api_cli_pm_write(api_cli, msg, msg->presence_mask);
+            BCMOS_RETURN_IF_ERROR(err);
+            break;
+        case PB_FIELDS_MULTI:
+            /* write filter */
+            err = playback_api_cli_props_write(api_cli, msg, " filter.", data_size, data_offset);
+            BCMOS_RETURN_IF_ERROR(err);
+            /* write presence mask */
+            err = playback_api_cli_pm_write(api_cli, msg, msg->msg_set->presence_mask);
+            BCMOS_RETURN_IF_ERROR(err);
+            break;
+        case PB_FIELDS_SET:
+            /* write properties */
+            err = playback_api_cli_props_write(api_cli, msg, " ", data_size, data_offset);
+            BCMOS_RETURN_IF_ERROR(err);
+            break;
+        default:
+            break;
+    }
+
+    n = bcmolt_string_append(api_cli, "\n");
+    BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+
+    BCM_LOG(DEBUG, pb_ctxt[current_device].log_id, "End %s\n", cmd);
+
+    return err;
+}
+
+static bcmos_errno playback_api_cli_get(bcmolt_string* api_cli, const bcmolt_msg* msg)
+{
+    switch (msg->group)
+    {
+        case BCMOLT_MGT_GROUP_CFG:
+            switch (msg->type)
+            {
+                case BCMOLT_MSG_TYPE_GET:
+                    return playback_api_cli_cmd_get(api_cli, msg, "get", PB_CLI_EXTRA_NONE, PB_FIELDS_GET);
+                case BCMOLT_MSG_TYPE_GET_MULTI:
+                    return playback_api_cli_cmd_get(api_cli, msg, "multiget", PB_CLI_EXTRA_MULTI, PB_FIELDS_MULTI);
+                case BCMOLT_MSG_TYPE_SET:
+                    return playback_api_cli_cmd_get(api_cli, msg, "set", PB_CLI_EXTRA_NONE, PB_FIELDS_SET);
+                case BCMOLT_MSG_TYPE_CLEAR:
+                    return playback_api_cli_cmd_get(api_cli, msg, "clear", PB_CLI_EXTRA_NONE, PB_FIELDS_NONE);
+                default:
+                    return BCM_ERR_INTERNAL;
+            }
+            break;
+        case BCMOLT_MGT_GROUP_STAT:
+            return playback_api_cli_cmd_get(api_cli, msg, "stat", PB_CLI_EXTRA_STAT, PB_FIELDS_GET);
+        case BCMOLT_MGT_GROUP_STAT_CFG:
+            switch (msg->type)
+            {
+                case BCMOLT_MSG_TYPE_GET:
+                    return playback_api_cli_cmd_get(api_cli, msg, "saget", PB_CLI_EXTRA_SUBGROUP, PB_FIELDS_NONE);
+                case BCMOLT_MSG_TYPE_SET:
+                    return playback_api_cli_cmd_get(api_cli, msg, "saset", PB_CLI_EXTRA_SUBGROUP, PB_FIELDS_SET);
+                default:
+                    return BCM_ERR_INTERNAL;
+            }
+            break;
+        case BCMOLT_MGT_GROUP_AUTO_CFG:
+            switch (msg->type)
+            {
+                case BCMOLT_MSG_TYPE_GET:
+                    return playback_api_cli_cmd_get(api_cli, msg, "acget", PB_CLI_EXTRA_NONE, PB_FIELDS_GET);
+                case BCMOLT_MSG_TYPE_SET:
+                    return playback_api_cli_cmd_get(api_cli, msg, "acset", PB_CLI_EXTRA_NONE, PB_FIELDS_SET);
+                default:
+                    return BCM_ERR_INTERNAL;
+            }
+            break;
+        case BCMOLT_MGT_GROUP_OPER:
+            return playback_api_cli_cmd_get(api_cli, msg, "oper", PB_CLI_EXTRA_SUBGROUP, PB_FIELDS_SET);
+        case BCMOLT_MGT_GROUP_PROXY:
+            return playback_api_cli_cmd_get(api_cli, msg, "send", PB_CLI_EXTRA_SUBGROUP, PB_FIELDS_SET);
+        default:
+            return BCM_ERR_INTERNAL;
+    }
+}
+
+static bcmos_errno playback_convert_api_cli(bcmolt_playback *mpb, FILE *out_file)
+{
+    playback_iterator it;
+    bcmos_errno err;
+    bcmolt_string *str;
+
+    err = bcmolt_string_create(&str, 2048);
+    BCMOS_RETURN_IF_ERROR(err);
+    FOR_EACH_PLAYBACK_MSG(it, mpb->capture_buffer, mpb->buf_size)
+    {
+        if (playback_should_send(mpb->location, (bcmtr_cld_event_type)it.raw.hdr.event))
+        {
+            if (BCM_ERR_OK == it.err)
+            {
+                bcmolt_string_reset(str);
+                err = playback_api_cli_get(str, it.msg);
+                fwrite(bcmolt_string_get(str), sizeof(char), strlen(bcmolt_string_get(str)), out_file);
+            }
+            else
+            {
+                err = it.err;
+                BCM_LOG(ERROR, pb_ctxt[current_device].log_id, "Unpacking failed: %s\n", bcmos_strerror(err));
+            }
+        }
+    }
+    bcmolt_string_destroy(str);
+
+    return err;
+}
+
+static bcmos_bool playback_field_contains_var_list(const bcmcli_type_descr *type)
+{
+    if (type == NULL)
+    {
+        return BCMOS_FALSE;
+    }
+
+    if (type->base_type == BCMOLT_BASE_TYPE_ID_ARR_DYN)
+    {
+        return BCMOS_TRUE;
+    }
+    else if (type->base_type == BCMOLT_BASE_TYPE_ID_ARR_FIXED)
+    {
+        return playback_field_contains_var_list(type->x.arr_fixed.elem_type);
+    }
+    else if (type->base_type == BCMOLT_BASE_TYPE_ID_STRUCT)
+    {
+        for (uint16_t i = 0; i < type->x.s.num_fields; ++i)
+        {
+            if (playback_field_contains_var_list(type->x.s.fields[i].type))
+            {
+                return BCMOS_TRUE;
+            }
+        }
+    }
+    else if (type->base_type == BCMOLT_BASE_TYPE_ID_UNION)
+    {
+        for (uint16_t i = 0; i < type->x.u.num_common_fields; ++i)
+        {
+            if (playback_field_contains_var_list(type->x.u.common_fields[i].type))
+            {
+                return BCMOS_TRUE;
+            }
+        }
+        for (uint16_t i = 0; type->x.u.common_fields[type->x.u.classifier_idx].type->x.e[i].name != NULL; ++i)
+        {
+            if (playback_field_contains_var_list(type->x.u.union_fields[i].type))
+            {
+                return BCMOS_TRUE;
+            }
+        }
+    }
+    else
+    {
+        /* not a variable sized list */
+    }
+
+    return BCMOS_FALSE;
+}
+
+static bcmos_bool playback_msg_contains_var_list(const bcmolt_msg* msg)
+{
+    const bcmcli_prop_descr *pd;
+
+    for (uint16_t prop = 0;
+         api_cli_object_property(msg->obj_type, msg->group, msg->subgroup, prop, &pd) == BCM_ERR_OK;
+         ++prop)
+    {
+        if (playback_field_contains_var_list(pd->type))
+        {
+            return BCMOS_TRUE;
+        }
+    }
+
+    return BCMOS_FALSE;
+}
+
+static bcmos_errno playback_string_write_upper(bcmolt_string *dest, const char* src)
+{
+    int n;
+
+    while (*src != '\0')
+    {
+        n = bcmolt_string_append(dest, "%c", (char)toupper((int)*src));
+        BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+        ++src;
+    }
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno playback_c_api_pm_write(
+    bcmolt_string *c_api,
+    const bcmolt_msg* msg,
+    bcmolt_presence_mask pm,
+    const char *extra,
+    const char *field,
+    const char *obj)
+{
+    int n;
+    bcmos_errno err;
+    const bcmcli_prop_descr *pd;
+
+    for (uint16_t prop = 0;
+         api_cli_object_property(msg->obj_type, msg->group, msg->subgroup, prop, &pd) == BCM_ERR_OK;
+         ++prop)
+    {
+        if (!(pm & (1ULL << prop)))
+        {
+            continue;
+        }
+        n = bcmolt_string_append(c_api, "\tBCMOLT_%s", extra);
+        BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+        err = playback_string_write_upper(c_api, apicli_mgt_group_to_str(msg->group));
+        BCMOS_RETURN_IF_ERROR(err);
+        n = bcmolt_string_append(c_api, "_PROP_GET(%s, %s, %s);\n", field, obj, pd->name);
+        BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+    }
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno playback_c_api_append_init(
+    bcmolt_string *c_api,
+    void *data,
+    const bcmcli_type_descr *td,
+    const char* name)
+{
+    bcmos_errno rc;
+    bcmcli_session *str;
+
+    rc = bcmcli_session_open_string(&str, c_api);
+    BCMOS_RETURN_IF_ERROR(rc);
+    rc = apicli_dump_dyn_array(str, td, data, name);
+    bcmcli_session_close(str);
+    BCMOS_RETURN_IF_ERROR(rc);
+
+    return BCM_ERR_OK;
+}
+
+
+static bcmos_errno playback_c_api_append_prop(
+    bcmolt_string *c_api,
+    uint32_t size,
+    void *data,
+    const bcmcli_prop_descr *pd)
+{
+    bcmos_errno err;
+    bcmcli_session *str;
+    void *prop_data = (void *)((long)data + pd->offset);
+
+    BCMOS_CHECK_RETURN_ERROR(pd->offset >= size, BCM_ERR_INTERNAL);
+    err = bcmcli_session_open_string(&str, c_api);
+    BCMOS_RETURN_IF_ERROR(err);
+    err = apicli_dump_prop_initializer(str, pd, prop_data);
+    bcmcli_session_close(str);
+    BCMOS_RETURN_IF_ERROR(err);
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno playback_c_api_make_var_lists(
+    bcmolt_string *c_api,
+    const bcmcli_type_descr *type,
+    void *data,
+    const char *name)
+{
+    int n;
+    bcmos_errno rc;
+
+    if (type == NULL)
+    {
+        return BCM_ERR_OK;
+    }
+
+    if (type->base_type == BCMOLT_BASE_TYPE_ID_ARR_DYN)
+    {
+        n = bcmolt_string_append(c_api, "\t%s %s[] = ", type->x.arr_dyn.elem_type->name, name);
+        BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+        rc = playback_c_api_append_init(c_api, data, type, name);
+        BCMOS_RETURN_IF_ERROR(rc);
+        n = bcmolt_string_append(c_api, ";\n");
+        BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+    }
+    else if (type->base_type == BCMOLT_BASE_TYPE_ID_ARR_FIXED)
+    {
+        for (uint16_t i = 0; i < type->x.arr_fixed.size; ++i)
+        {
+            char index_name[64];
+
+            sprintf(index_name, "%s%u", name, i);
+            rc = playback_c_api_make_var_lists(c_api, type->x.arr_fixed.elem_type, data, index_name);
+            BCMOS_RETURN_IF_ERROR(rc);
+            data = (void*)((long)data + type->x.arr_fixed.elem_type->size);
+        }
+    }
+    else if (type->base_type == BCMOLT_BASE_TYPE_ID_STRUCT)
+    {
+        for (uint16_t i = 0; i < type->x.s.num_fields; ++i)
+        {
+            const bcmcli_field_descr *field = &type->x.s.fields[i];
+            rc = playback_c_api_make_var_lists(c_api, field->type, (void*)((long)data + field->offset), field->name);
+            BCMOS_RETURN_IF_ERROR(rc);
+        }
+    }
+    else if (type->base_type == BCMOLT_BASE_TYPE_ID_UNION)
+    {
+        for (uint16_t i = 0; i < type->x.u.num_common_fields; ++i)
+        {
+            const bcmcli_field_descr *field = &type->x.u.common_fields[i];
+            rc = playback_c_api_make_var_lists(c_api, field->type, (void*)((long)data + field->offset), field->name);
+            BCMOS_RETURN_IF_ERROR(rc);
+        }
+        for (uint16_t i = 0; type->x.u.common_fields[type->x.u.classifier_idx].type->x.e[i].name != NULL; ++i)
+        {
+            const bcmcli_field_descr *field = &type->x.u.union_fields[i];
+            rc = playback_c_api_make_var_lists(c_api, field->type, (void*)((long)data + field->offset), field->name);
+            BCMOS_RETURN_IF_ERROR(rc);
+        }
+    }
+    else
+    {
+        /* not a variable sized list */
+    }
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno playback_c_api_props_write(
+    bcmolt_string *c_api,
+    const bcmolt_msg* msg,
+    const char* object,
+    uint32_t size,
+    uint32_t offset)
+{
+    int n;
+    bcmos_errno err;
+    const char *subgroup;
+    const char *desc;
+    const bcmcli_prop_descr *pd;
+    void *data = (void *)((long)msg + offset);
+
+    for (uint16_t prop = 0;
+         api_cli_object_property(msg->obj_type, msg->group, msg->subgroup, prop, &pd) == BCM_ERR_OK;
+         ++prop)
+    {
+        if (!(msg->presence_mask & (1ULL << prop)))
+        {
+            continue;
+        }
+        playback_c_api_make_var_lists(c_api, pd->type, (void*)((long)data + pd->offset), pd->name);
+    }
+
+    for (uint16_t prop = 0;
+         api_cli_object_property(msg->obj_type, msg->group, msg->subgroup, prop, &pd) == BCM_ERR_OK;
+         ++prop)
+    {
+        if (!(msg->presence_mask & (1ULL << prop)))
+        {
+            continue;
+        }
+        if ((pd->type->base_type == BCMOLT_BASE_TYPE_ID_STRUCT) ||
+            (pd->type->base_type == BCMOLT_BASE_TYPE_ID_UNION) ||
+            (pd->type->base_type == BCMOLT_BASE_TYPE_ID_ARR_DYN) ||
+            (pd->type->base_type == BCMOLT_BASE_TYPE_ID_ARR_FIXED))
+        {
+            n = bcmolt_string_append(c_api, "\t%s "VAL_REF" = ", pd->type->name);
+            BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+            err = playback_c_api_append_prop(c_api, size, data, pd);
+            BCMOS_RETURN_IF_ERROR(err);
+            n = bcmolt_string_append(c_api, ";\n");
+            BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+            n = bcmolt_string_append(c_api, "\tBCMOLT_");
+            BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+            err = playback_string_write_upper(c_api, apicli_mgt_group_to_str(msg->group));
+            BCMOS_RETURN_IF_ERROR(err);
+            n = bcmolt_string_append(c_api, "_PROP_SET(&msg, %s", object);
+            BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+            if ((msg->group == BCMOLT_MGT_GROUP_OPER) || (msg->group == BCMOLT_MGT_GROUP_PROXY))
+            {
+                err = api_cli_object_subgroup_name(msg->obj_type, msg->group, msg->subgroup, &subgroup, &desc);
+                BCMOS_RETURN_IF_ERROR(err);
+                n = bcmolt_string_append(c_api, ", %s", subgroup);
+                BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+            }
+            n = bcmolt_string_append(c_api, ", %s, "VAL_REF");\n", pd->name);
+            BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+        }
+        else
+        {
+            n = bcmolt_string_append(c_api, "\tBCMOLT_");
+            BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+            err = playback_string_write_upper(c_api, apicli_mgt_group_to_str(msg->group));
+            BCMOS_RETURN_IF_ERROR(err);
+            n = bcmolt_string_append(c_api, "_PROP_SET(&msg, %s", object);
+            BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+            if ((msg->group == BCMOLT_MGT_GROUP_OPER) || (msg->group == BCMOLT_MGT_GROUP_PROXY))
+            {
+                err = api_cli_object_subgroup_name(msg->obj_type, msg->group, msg->subgroup, &subgroup, &desc);
+                BCMOS_RETURN_IF_ERROR(err);
+                n = bcmolt_string_append(c_api, ", %s", subgroup);
+                BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+            }
+            n = bcmolt_string_append(c_api, ", %s, ", pd->name);
+            BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+            err = playback_c_api_append_prop(c_api, size, data, pd);
+            BCMOS_RETURN_IF_ERROR(err);
+            n = bcmolt_string_append(c_api, ");\n");
+            BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+        }
+    }
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno playback_c_api_code_get(
+    bcmolt_string* c_api,
+    const bcmolt_msg* msg,
+    const char *call,
+    pb_fields field_parms)
+{
+    int n;
+    bcmos_errno err;
+    const char *object;
+    const char *group;
+    const char *subgroup;
+    const char *desc;
+    uint32_t key_size;
+    uint32_t key_offset;
+    uint32_t data_size;
+    uint32_t data_offset;
+    void *data;
+    const bcmcli_prop_descr *pd;
+    bcmos_bool var_list = (BCMOLT_MSG_TYPE_GET == msg->type) && playback_msg_contains_var_list(msg);
+
+    err = api_cli_object_name(msg->obj_type, &object, &desc);
+    BCMOS_RETURN_IF_ERROR(err);
+    err = api_cli_object_subgroup_name(msg->obj_type, msg->group, msg->subgroup, &subgroup, &desc);
+    BCMOS_RETURN_IF_ERROR(err);
+
+    group = apicli_mgt_group_to_str(msg->group);
+
+    /* get message info */
+    err = api_cli_object_struct_size(
+        msg->obj_type,
+        msg->group,
+        msg->subgroup,
+        &key_size,
+        &key_offset,
+        &data_size,
+        &data_offset);
+    BCMOS_RETURN_IF_ERROR(err);
+
+    /* init variables */
+    n = bcmolt_string_append(c_api, "\t{\n");
+    BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+    if ((msg->group == BCMOLT_MGT_GROUP_OPER) || (msg->group == BCMOLT_MGT_GROUP_PROXY))
+    {
+        n = bcmolt_string_append(c_api, "\tbcmolt_%s_%s "MSG_REF";\n", object, subgroup);
+        BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+    }
+    else
+    {
+        n = bcmolt_string_append(c_api, "\tbcmolt_%s_%s "MSG_REF";\n", object, group);
+        BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+    }
+    n = bcmolt_string_append(c_api, "\tbcmolt_%s_key "KEY_REF" = { };\n", object);
+    BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+
+    if (var_list)
+    {
+        n = bcmolt_string_append(c_api, "\tuint8_t* "LIST_MEM_REF";\n");
+        BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+    }
+
+    if (msg->type == BCMOLT_MSG_TYPE_GET_MULTI)
+    {
+        n = bcmolt_string_append(c_api, "\tbcmolt_msg_set* "MSG_SET_REF" = NULL;\n");
+        BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+        n = bcmolt_string_append(c_api, "\tuint32_t "MAX_MSGS_REF";\n");
+        BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+        n = bcmolt_string_append(c_api, "\tbcmos_bool "INVERT_FILTER_REF";\n\n");
+        BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+        n = bcmolt_string_append(c_api, "\t"MAX_MSGS_REF" = %d;\n", msg->msg_set->max_instances);
+        BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+        n = bcmolt_string_append(c_api, "\t"INVERT_FILTER_REF" = %s;\n", BITS_SET(msg->msg_set->filter_flags, BCMOLT_FILTER_FLAGS_INVERT_SELECTION) ? "BCMOS_TRUE" : "BCMOS_FALSE");
+        BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+        n = bcmolt_string_append(c_api, "\tbcmolt_msg_set_alloc(BCMOLT_OBJ_ID_");
+        err = playback_string_write_upper(c_api, object);
+        BCMOS_RETURN_IF_ERROR(err);
+        n = bcmolt_string_append(c_api, ", BCMOLT_MGT_GROUP_");
+        BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+        err = playback_string_write_upper(c_api, group);
+        BCMOS_RETURN_IF_ERROR(err);
+        n = bcmolt_string_append(c_api, ", "MAX_MSGS_REF", &"MSG_SET_REF");\n");
+        BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+    }
+    else if (msg->group == BCMOLT_MGT_GROUP_STAT)
+    {
+        n = bcmolt_string_append(c_api, "\tbcmolt_stat_flags "STAT_FLAGS_REF";\n\n");
+        BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+        n = bcmolt_string_append(c_api, "\t"STAT_FLAGS_REF" = %s;\n", BITS_SET(msg->type, BCMOLT_MSG_TYPE_CLEAR) ? "BCMOLT_STAT_FLAGS_CLEAR_ON_READ" : "BCMOLT_STAT_FLAGS_NONE");
+        BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+    }
+    else
+    {
+        n = bcmolt_string_append(c_api, "\n");
+        BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+    }
+
+    /* set key */
+    if (BCMOLT_MGT_GROUP_AUTO_CFG != msg->group)
+    {
+        /* write key */
+        data = (void *)((long)msg + key_offset);
+        for (uint16_t prop = 0;
+             api_cli_object_property(msg->obj_type, BCMOLT_MGT_GROUP_KEY, 0, prop, &pd) == BCM_ERR_OK;
+             ++prop)
+        {
+            n = bcmolt_string_append(c_api, "\t"KEY_REF".%s = ", pd->name);
+            BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+            if ((BCMOLT_BASE_TYPE_ID_MAC == pd->type->base_type) ||
+                (BCMOLT_BASE_TYPE_ID_IPV4 == pd->type->base_type) ||
+                (BCMOLT_BASE_TYPE_ID_STRUCT == pd->type->base_type) ||
+                (BCMOLT_BASE_TYPE_ID_UNION == pd->type->base_type))
+            {
+                n = bcmolt_string_append(c_api, "(%s)", pd->type->name);
+                BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+            }
+            err = playback_c_api_append_prop(c_api, key_size, data, pd);
+            BCMOS_RETURN_IF_ERROR(err);
+            n = bcmolt_string_append(c_api, ";\n");
+            BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+        }
+    }
+
+    /* set properties */
+    n = bcmolt_string_append(c_api, "\tBCMOLT_");
+    BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+    err = playback_string_write_upper(c_api, group);
+    BCMOS_RETURN_IF_ERROR(err);
+    n = bcmolt_string_append(c_api, "_INIT(&"MSG_REF", %s", object);
+    BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+    if ((msg->group == BCMOLT_MGT_GROUP_STAT_CFG) ||
+        (msg->group == BCMOLT_MGT_GROUP_OPER) ||
+        (msg->group == BCMOLT_MGT_GROUP_PROXY))
+    {
+        n = bcmolt_string_append(c_api, ", %s", subgroup);
+        BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+    }
+    n = bcmolt_string_append(c_api, ", "KEY_REF");\n");
+    BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+
+    switch (field_parms)
+    {
+        case PB_FIELDS_GET:
+            /* write presence mask */
+            err = playback_c_api_pm_write(c_api, msg, msg->presence_mask, "", "&"MSG_REF, object);
+            BCMOS_RETURN_IF_ERROR(err);
+            if (var_list)
+            {
+                n = bcmolt_string_append(c_api, "\t"LIST_MEM_REF" = bcmos_calloc("DYN_LIST_SIZE");\n");
+                BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+                n = bcmolt_string_append(
+                    c_api,
+                    "\tBCMOLT_CFG_LIST_BUF_SET(&"MSG_REF", %s, "LIST_MEM_REF", "DYN_LIST_SIZE");\n", object);
+                BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+            }
+            break;
+        case PB_FIELDS_MULTI:
+            /* write filter */
+            err = playback_c_api_props_write(c_api, msg, object, data_size, data_offset);
+            BCMOS_RETURN_IF_ERROR(err);
+            /* write presence mask */
+            err = playback_c_api_pm_write(c_api, msg, msg->presence_mask, "MSGSET_", MSG_SET_REF, object);
+            BCMOS_RETURN_IF_ERROR(err);
+            break;
+        case PB_FIELDS_SET:
+            /* write properties */
+            err = playback_c_api_props_write(c_api, msg, object, data_size, data_offset);
+            BCMOS_RETURN_IF_ERROR(err);
+            break;
+        default:
+            break;
+    }
+
+    /* call API */
+    n = bcmolt_string_append(c_api, "\t"RC_REF" = bcmolt_%s_%s("DEVICE_REF", &"MSG_REF".hdr", group, call);
+    BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+    if (msg->type == BCMOLT_MSG_TYPE_GET_MULTI)
+    {
+        n = bcmolt_string_append(
+            c_api,
+            ", ("INVERT_FILTER_REF") ? BCMOLT_FILTER_FLAGS_INVERT_SELECTION : BCMOLT_FILTER_FLAGS_NONE, "MSG_SET_REF);
+        BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+    }
+    else if (msg->group == BCMOLT_MGT_GROUP_STAT)
+    {
+        n = bcmolt_string_append(c_api, ", "STAT_FLAGS_REF);
+        BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+    }
+    else
+    {
+        /* do nothing */
+    }
+    n = bcmolt_string_append(c_api, ");\n");
+    BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+    n = bcmolt_string_append(c_api, "\tbcmos_printf(\"bcmolt_%s_%s returned %%s (%%d)\\n\", bcmos_strerror("RC_REF"), "RC_REF");\n", group, call);
+    BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+    n = bcmolt_string_append(c_api, "\t}\n\n");
+    BCMOS_CHECK_RETURN_ERROR(n <= 0, BCM_ERR_INTERNAL);
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno playback_c_api_get(bcmolt_string* c_api, const bcmolt_msg* msg)
+{
+    switch (msg->group)
+    {
+        case BCMOLT_MGT_GROUP_CFG:
+            switch (msg->type)
+            {
+                case BCMOLT_MSG_TYPE_GET:
+                    return playback_c_api_code_get(c_api, msg, "get", PB_FIELDS_GET);
+                case BCMOLT_MSG_TYPE_GET_MULTI:
+                    return playback_c_api_code_get(c_api, msg, "get_multi", PB_FIELDS_MULTI);
+                case BCMOLT_MSG_TYPE_SET:
+                    return playback_c_api_code_get(c_api, msg, "set", PB_FIELDS_SET);
+                case BCMOLT_MSG_TYPE_CLEAR:
+                    return playback_c_api_code_get(c_api, msg, "clear", PB_FIELDS_NONE);
+                default:
+                    return BCM_ERR_INTERNAL;
+            }
+            break;
+        case BCMOLT_MGT_GROUP_STAT:
+            return playback_c_api_code_get(c_api, msg, "get", PB_FIELDS_GET);
+        case BCMOLT_MGT_GROUP_STAT_CFG:
+            switch (msg->type)
+            {
+                case BCMOLT_MSG_TYPE_GET:
+                    return playback_c_api_code_get(c_api, msg, "get", PB_FIELDS_NONE);
+                case BCMOLT_MSG_TYPE_SET:
+                    return playback_c_api_code_get(c_api, msg, "set", PB_FIELDS_SET);
+                default:
+                    return BCM_ERR_INTERNAL;
+            }
+            break;
+        case BCMOLT_MGT_GROUP_AUTO_CFG:
+            switch (msg->type)
+            {
+                case BCMOLT_MSG_TYPE_GET:
+                    return playback_c_api_code_get(c_api, msg, "get", PB_FIELDS_GET);
+                case BCMOLT_MSG_TYPE_SET:
+                    return playback_c_api_code_get(c_api, msg, "set", PB_FIELDS_SET);
+                default:
+                    return BCM_ERR_INTERNAL;
+            }
+            break;
+        case BCMOLT_MGT_GROUP_OPER:
+            return playback_c_api_code_get(c_api, msg, "submit", PB_FIELDS_SET);
+        case BCMOLT_MGT_GROUP_PROXY:
+            return playback_c_api_code_get(c_api, msg, "send", PB_FIELDS_SET);
+        default:
+            return BCM_ERR_INTERNAL;
+    }
+}
+
+static bcmos_errno playback_convert_c_api(bcmolt_playback *mpb, FILE *out_file)
+{
+    playback_iterator it;
+    bcmos_errno err;
+    bcmolt_string *str;
+    uint32_t last_time_us = 0;
+    bcmos_bool first = BCMOS_TRUE;
+
+    err = bcmolt_string_create(&str, 16384);
+    BCMOS_RETURN_IF_ERROR(err);
+    fprintf(out_file, "void run_playback(void)\n{\n");
+    fprintf(out_file, "\tbcmolt_devid "DEVICE_REF" = %d;\n", current_device);
+    fprintf(out_file, "\tbcmos_errno "RC_REF" = BCM_ERR_OK;\n\n");
+    FOR_EACH_PLAYBACK_MSG(it, mpb->capture_buffer, mpb->buf_size)
+    {
+        if (playback_should_send(mpb->location, (bcmtr_cld_event_type)it.raw.hdr.event))
+        {
+            if (BCM_ERR_OK == it.err)
+            {
+                if (!first)
+                {
+                    /* approximate original timing; doesn't account for processing time in this code - this could be
+                       improved */
+                    fprintf(out_file, "\n\tbcmos_usleep(%u);\n\n", it.raw.hdr.timestamp - last_time_us);
+                }
+                else
+                {
+                    first = BCMOS_FALSE;
+                }
+                last_time_us = it.raw.hdr.timestamp;
+                bcmolt_string_reset(str);
+                err = playback_c_api_get(str, it.msg);
+                fwrite(bcmolt_string_get(str), sizeof(char), strlen(bcmolt_string_get(str)), out_file);
+            }
+            else
+            {
+                err = it.err;
+                BCM_LOG(ERROR, pb_ctxt[current_device].log_id, "Unpacking failed: %s\n", bcmos_strerror(err));
+            }
+        }
+    }
+    fprintf(out_file, "}\n");
+    bcmolt_string_destroy(str);
+
+    return err;
+}
+
+static bcmos_errno playback_convert(bcmolt_playback *mpb, pb_format format, FILE *out_file)
+{
+    bcmos_errno err;
+
+    switch (format)
+    {
+        case PB_FORMAT_API_CLI:
+            err = playback_convert_api_cli(mpb, out_file);
+            break;
+        case PB_FORMAT_C_API:
+            err = playback_convert_c_api(mpb, out_file);
+            break;
+        default:
+            err = BCM_ERR_PARM;
+            BCM_LOG(ERROR, pb_ctxt[current_device].log_id, "Unknown format: %d\n", format);
+            break;
+    }
+
+    return err;
+}
+
+static bcmos_errno playback_cli_conv(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+    const char *infilename = bcmcli_find_named_parm(session, "infile")->value.string;
+    const char *outfilename = bcmcli_find_named_parm(session, "outfile")->value.string;
+    pb_format format = (pb_format)bcmcli_find_named_parm(session, "format")->value.enum_val;
+    bcmos_bool ignore_ver = BCMOS_FALSE;
+    bcmos_errno err;
+    bcmolt_playback mpb = {};
+    FILE *out_file;
+
+    bcmcli_cmd_parm *iv_parm = bcmcli_find_named_parm(session, "ignore_version");
+    if (iv_parm != NULL)
+    {
+        ignore_ver = iv_parm->value.enum_val == (long)BCMOS_TRUE;
+    }
+
+    err = playback_file_open(infilename, &mpb);
+
+    if (BCM_ERR_OK == err)
+    {
+        if (playback_version_match(&mpb) || ignore_ver)
+        {
+            out_file = fopen(outfilename, "wb");
+            playback_convert(&mpb, format, out_file);
+            fclose(out_file);
+        }
+        else
+        {
+            bcmcli_print(session, "Possible version mismatch; use ignore_version=yes to force conversion\n");
+            err = BCM_ERR_IMAGE_TYPE;
+        }
+        bcmos_free(mpb.capture_buffer);
+    }
+
+    return err;
+}
+
+void bcmolt_user_appl_playback_cli_init(bcmcli_entry *top_dir)
+{
+#ifdef ENABLE_CLI
+    bcmcli_entry *plb_dir = bcmcli_dir_add(top_dir, "playback", "playback", BCMCLI_ACCESS_ADMIN, NULL);
+    BUG_ON(NULL == plb_dir);
+
+    static bcmcli_enum_val format_enum_table[PB_FORMAT__COUNT+1] =
+    {
+        {.name = "api_cli", .val = (long)PB_FORMAT_API_CLI},
+        {.name = "c_api", .val = (long)PB_FORMAT_C_API},
+        BCMCLI_ENUM_LAST
+    };
+
+    BCMCLI_MAKE_CMD_NOPARM(plb_dir, "dump", "dump capture", playback_cli_dump);
+    BCMCLI_MAKE_CMD(plb_dir, "save", "save capture", playback_cli_save,
+        BCMCLI_MAKE_PARM("file", "filename", BCMCLI_PARM_STRING, BCMCLI_PARM_FLAG_NONE));
+    BCMCLI_MAKE_CMD(plb_dir, "replay", "replay capture", playback_cli_replay,
+        BCMCLI_MAKE_PARM("file", "filename", BCMCLI_PARM_STRING, BCMCLI_PARM_FLAG_NONE),
+        BCMCLI_MAKE_PARM_ENUM("ignore_version", "Ignore version mismatch", bcmcli_enum_bool_table, BCMCLI_PARM_FLAG_OPTIONAL));
+    BCMCLI_MAKE_CMD(plb_dir, "conv", "Convert capture", playback_cli_conv,
+        BCMCLI_MAKE_PARM("infile", "Input filename", BCMCLI_PARM_STRING, BCMCLI_PARM_FLAG_NONE),
+        BCMCLI_MAKE_PARM("outfile", "Output filename", BCMCLI_PARM_STRING, BCMCLI_PARM_FLAG_NONE),
+        BCMCLI_MAKE_PARM_ENUM("format", "Output format", format_enum_table, BCMCLI_PARM_FLAG_NONE),
+        BCMCLI_MAKE_PARM_ENUM("ignore_version", "Ignore version mismatch", bcmcli_enum_bool_table, BCMCLI_PARM_FLAG_OPTIONAL));
+#endif
+}
+
+void bcmolt_user_appl_playback_init(void)
+{
+    for (uint32_t i = 0; i < BCMTR_MAX_OLTS; i++)
+    {
+        char log_name[MAX_DEV_LOG_ID_NAME];
+        snprintf(log_name, sizeof(log_name)-1, "user_appl_playback_%u", i);
+        pb_ctxt[i].log_id = bcm_dev_log_id_register(log_name, DEV_LOG_LEVEL_INFO, DEV_LOG_ID_TYPE_BOTH);
+    }
+}
+
diff --git a/bcm68620_release/release/host_reference/user_appl/playback/bcmolt_user_appl_playback.h b/bcm68620_release/release/host_reference/user_appl/playback/bcmolt_user_appl_playback.h
new file mode 100644
index 0000000..cb37c61
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/playback/bcmolt_user_appl_playback.h
@@ -0,0 +1,40 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef _BCMOLT_USER_APPL_PLAYBACK_H_
+#define _BCMOLT_USER_APPL_PLAYBACK_H_
+
+#include "bcmcli.h"
+
+void bcmolt_user_appl_playback_cli_init(bcmcli_entry *top_dir);
+
+void bcmolt_user_appl_playback_init(void);
+
+#endif /* _BCMOLT_USER_APPL_PLAYBACK_H_ */
+
diff --git a/bcm68620_release/release/host_reference/user_appl/protection_switching/Makefile b/bcm68620_release/release/host_reference/user_appl/protection_switching/Makefile
new file mode 100644
index 0000000..dff2e55
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/protection_switching/Makefile
@@ -0,0 +1,17 @@
+# protection switching user application
+
+ifeq ("$(ENABLE_CLI)", "y")
+    MOD_NAME = bcm_user_appl_ps
+    MOD_TYPE = lib
+    MOD_DEPS = host_api bcm_board
+    srcs = bcmolt_user_appl_ps.c \
+	   bcmolt_user_appl_ps_cli.c \
+	   bcmolt_user_appl_ps_gpon.c \
+	   bcmolt_user_appl_ps_epon.c \
+	   bcmolt_user_appl_ps_xgpon.c
+
+    ifeq ("$(OS_KERNEL)", "linux")
+	MOD_DEPS += dev_log_linux
+    endif
+endif
+
diff --git a/bcm68620_release/release/host_reference/user_appl/protection_switching/bcmolt_user_appl_ps.c b/bcm68620_release/release/host_reference/user_appl/protection_switching/bcmolt_user_appl_ps.c
new file mode 100644
index 0000000..3fc8d31
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/protection_switching/bcmolt_user_appl_ps.c
@@ -0,0 +1,756 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+*/
+
+#include <bcmos_system.h>
+#include <bcmolt_api.h>
+#include <bcmolt_msg_pack.h>
+#include <bcmolt_model_types.h>
+#include <bcm_dev_log.h>
+#include "bcmolt_user_appl_ps.h"
+#include "bcmolt_user_appl_ps_internal.h"
+
+#ifndef SIMULATION_BUILD
+#include <bcmolt_board.h>
+#endif
+
+#define PS_DEFAULT_MAX_PAIRS 16
+#define PS_TASK_MSG_Q_SIZE 64
+
+typedef struct
+{
+    bcmolt_ps_pair pair;
+    bcmos_bool is_valid;
+} ps_pair_state;
+
+typedef struct
+{
+    bcmos_bool is_running;
+    bcmolt_ps_global_cfg cfg;
+    ps_pair_state *pairs;
+    uint32_t switch_start_time_us;
+} ps_global_state;
+
+typedef struct
+{
+    bcmos_msg os_msg;
+    bcmolt_ps_pon pon;
+    bcmolt_auto *ind;
+} ps_task_msg;
+
+typedef enum
+{
+    PS_PON_MODE_INVALID,
+    PS_PON_MODE_GPON,
+    PS_PON_MODE_EPON,
+    PS_PON_MODE_XGPON,
+} ps_pon_mode;
+
+static ps_global_state ps_state = {};
+static bcmos_mutex ps_mutex;
+static bcmos_task ps_task;
+
+#ifdef ENABLE_LOG
+static dev_log_id ps_log_id;
+dev_log_id ps_get_log_id(void)
+{
+    return ps_log_id;
+}
+#endif
+
+static inline bcmos_bool ps_pon_equal(const bcmolt_ps_pon *a, const bcmolt_ps_pon *b)
+{
+    return a->device_id == b->device_id && a->pon_id == b->pon_id;
+}
+
+static inline bcmos_bool ps_pair_equal(const bcmolt_ps_pair *a, const bcmolt_ps_pair *b)
+{
+    return ps_pon_equal(&a->standby, &b->standby) && ps_pon_equal(&a->working, &b->working);
+}
+
+static bcmos_errno bcmolt_ps_pon_pair_get(const bcmolt_ps_pon *pon, bcmolt_ps_pair **pair)
+{
+    uint16_t i;
+
+    if (!ps_state.is_running)
+    {
+        *pair = NULL;
+        PS_ERR("PS application not running\n");
+        return BCM_ERR_STATE;
+    }
+
+    for (i = 0; i < ps_state.cfg.max_num_pairs; i++)
+    {
+        if (ps_state.pairs[i].is_valid)
+        {
+            if (ps_pon_equal(pon, &ps_state.pairs[i].pair.standby) ||
+                ps_pon_equal(pon, &ps_state.pairs[i].pair.working))
+            {
+                *pair = &ps_state.pairs[i].pair;
+                return BCM_ERR_OK;
+            }
+        }
+    }
+
+    return BCM_ERR_NOENT;
+}
+
+static bcmos_errno ps_init_task(void)
+{
+    bcmos_task_parm task_params =
+    {
+        .name = "user_appl_ps",
+        .priority = TASK_PRIORITY_USER_APPL_PS,
+        .core = BCMOS_CPU_CORE_ANY, /* No CPU affinity */
+        .init_handler = NULL
+    };
+
+    return bcmos_task_create(&ps_task, &task_params);
+}
+
+static bcmos_errno ps_init_module(void)
+{
+    bcmos_module_parm module_params =
+    {
+        .qparm = { .name = "user_appl_ps", .size = PS_TASK_MSG_Q_SIZE }
+    };
+
+    return bcmos_module_create(BCMOS_MODULE_ID_USER_APPL_PS, &ps_task, &module_params);
+}
+
+static ps_pon_mode ps_pon_mode_get(bcmolt_devid dev)
+{
+    bcmos_errno err;
+    bcmolt_system_mode system_mode;
+
+    err = bcmolt_system_mode_get(dev, &system_mode);
+    if (err != BCM_ERR_OK)
+    {
+        return PS_PON_MODE_INVALID;
+    }
+    switch (system_mode)
+    {
+    case BCMOLT_SYSTEM_MODE_GPON__4_X:
+    case BCMOLT_SYSTEM_MODE_GPON__8_X:
+    case BCMOLT_SYSTEM_MODE_GPON__16_X:
+        return PS_PON_MODE_GPON;
+    case BCMOLT_SYSTEM_MODE_EPON__16_X:
+    case BCMOLT_SYSTEM_MODE_EPON__8_X:
+    case BCMOLT_SYSTEM_MODE_EPON__4_X:
+    case BCMOLT_SYSTEM_MODE_EPON__8_X_COEXISTENCE_TDMA:
+    case BCMOLT_SYSTEM_MODE_EPON__4_X_COEXISTENCE_TDMA:
+    case BCMOLT_SYSTEM_MODE_EPON__8_X_10_G:
+    case BCMOLT_SYSTEM_MODE_EPON__4_X_10_G:
+    case BCMOLT_SYSTEM_MODE_EPON__2_X_10_G:
+        return PS_PON_MODE_EPON;
+    case BCMOLT_SYSTEM_MODE_XGPON_1__4_X:
+    case BCMOLT_SYSTEM_MODE_XGPON_1__8_X:
+    case BCMOLT_SYSTEM_MODE_XGS__2_X_10_G:
+    case BCMOLT_SYSTEM_MODE_NGPON2__2_X_10_G:
+        return PS_PON_MODE_XGPON;
+    default:
+        return PS_PON_MODE_INVALID;
+    }
+}
+
+static void ps_handle_msg(bcmos_module_id module_id, bcmos_msg *os_msg)
+{
+    ps_task_msg *msg = (ps_task_msg *)os_msg;
+    bcmos_errno err;
+
+    /* process the indication */
+    if (msg->ind->hdr.obj_type == BCMOLT_OBJ_ID_DEVICE || msg->ind->hdr.obj_type == BCMOLT_OBJ_ID_DEBUG)
+    {
+        /* there's no need to mirror device-level indications */
+        err = BCM_ERR_OK;
+    }
+    else
+    {
+        switch (ps_pon_mode_get(msg->pon.device_id))
+        {
+        case PS_PON_MODE_GPON:
+            err = ps_process_ind_gpon(&msg->pon, msg->ind);
+            break;
+        case PS_PON_MODE_EPON:
+            err = ps_process_ind_epon(&msg->pon, msg->ind);
+            break;
+        case PS_PON_MODE_XGPON:
+            err = ps_process_ind_xgpon(&msg->pon, msg->ind);
+            break;
+        default:
+            err = BCM_ERR_STATE; /* not a supported system mode */
+            break;
+        }
+    }
+
+    if (err != BCM_ERR_OK)
+    {
+        bcmolt_auto *ind = msg->ind;
+
+        PS_ERR("Error processing indication (obj_type=%u, subgroup=%u): %s\n", ind->hdr.obj_type, ind->hdr.subgroup, bcmos_strerror(err));
+    }
+
+    /* free the cloned indication since we're done processing it */
+    bcmolt_msg_free(&msg->ind->hdr);
+
+    /* free the internal OS message handle */
+    bcmos_free(os_msg);
+}
+
+void bcmolt_ps_appl_init(void)
+{
+    bcmos_errno err;
+
+#ifdef ENABLE_LOG
+    ps_log_id = bcm_dev_log_id_register("user_appl_ps", DEV_LOG_LEVEL_INFO, DEV_LOG_ID_TYPE_BOTH);
+#endif
+
+    err = bcmos_mutex_create(&ps_mutex, 0, NULL);
+    BUG_ON(err != BCM_ERR_OK);
+
+    err = ps_init_task();
+    BUG_ON(err != BCM_ERR_OK);
+
+    err = ps_init_module();
+    BUG_ON(err != BCM_ERR_OK);
+}
+
+bcmos_errno bcmolt_ps_appl_start(const bcmolt_ps_global_cfg *cfg)
+{
+    bcmos_mutex_lock(&ps_mutex);
+
+    if (ps_state.is_running)
+    {
+        bcmos_mutex_unlock(&ps_mutex);
+        PS_ERR("PS application already running\n");
+        return BCM_ERR_STATE;
+    }
+
+    ps_state.cfg = *cfg;
+    ps_state.cfg.max_num_pairs = (ps_state.cfg.max_num_pairs == 0) ? PS_DEFAULT_MAX_PAIRS : ps_state.cfg.max_num_pairs;
+    ps_state.pairs = bcmos_calloc(sizeof(*ps_state.pairs) * ps_state.cfg.max_num_pairs);
+    if (ps_state.pairs == NULL)
+    {
+        BCM_MEMZERO_STRUCT(&ps_state);
+        bcmos_mutex_unlock(&ps_mutex);
+        PS_ERR("memory allocation failed\n");
+        return BCM_ERR_NOMEM;
+    }
+
+    ps_state.is_running = BCMOS_TRUE;
+
+    bcmos_mutex_unlock(&ps_mutex);
+    PS_INFO("PS application started\n");
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcmolt_ps_appl_stop(void)
+{
+    bcmos_mutex_lock(&ps_mutex);
+
+    if (!ps_state.is_running)
+    {
+        bcmos_mutex_unlock(&ps_mutex);
+        PS_ERR("PS application not running\n");
+        return BCM_ERR_STATE;
+    }
+
+    ps_state.is_running = BCMOS_FALSE;
+
+    bcmos_free(ps_state.pairs);
+    BCM_MEMZERO_STRUCT(&ps_state);
+
+    bcmos_mutex_unlock(&ps_mutex);
+    PS_INFO("PS application stopped\n");
+    return BCM_ERR_OK;
+}
+
+bcmos_bool bcmolt_ps_appl_is_running(void)
+{
+    bcmos_bool ret;
+    bcmos_mutex_lock(&ps_mutex);
+    ret = ps_state.is_running;
+    bcmos_mutex_unlock(&ps_mutex);
+    return ret;
+}
+
+bcmos_errno bcmolt_ps_global_cfg_get(bcmolt_ps_global_cfg *cfg)
+{
+    bcmos_errno err;
+    bcmos_mutex_lock(&ps_mutex);
+
+    if (!ps_state.is_running)
+    {
+        PS_ERR("PS application not running\n");
+        err = BCM_ERR_STATE;
+    }
+    else
+    {
+        *cfg = ps_state.cfg;
+        err = BCM_ERR_OK;
+    }
+
+    bcmos_mutex_unlock(&ps_mutex);
+    return err;
+}
+
+bcmos_errno bcmolt_ps_global_cfg_update(const bcmolt_ps_global_cfg *cfg)
+{
+    bcmos_errno err;
+    bcmos_mutex_lock(&ps_mutex);
+
+    if (!ps_state.is_running)
+    {
+        PS_ERR("PS application not running\n");
+        err = BCM_ERR_STATE;
+    }
+    else if (cfg->max_num_pairs != ps_state.cfg.max_num_pairs)
+    {
+        PS_ERR("cannot change max number of protected pairs while running\n");
+        err = BCM_ERR_PARM;
+    }
+    else
+    {
+        ps_state.cfg = *cfg;
+        err = BCM_ERR_OK;
+    }
+
+    bcmos_mutex_unlock(&ps_mutex);
+    return err;
+}
+
+bcmos_errno bcmolt_ps_pairs_get(uint16_t array_len, bcmolt_ps_pair *pairs, uint16_t *num_written)
+{
+    bcmos_errno err;
+    uint16_t i;
+
+    bcmos_mutex_lock(&ps_mutex);
+
+    if (!ps_state.is_running)
+    {
+        PS_ERR("PS application not running\n");
+        err = BCM_ERR_STATE;
+    }
+    else
+    {
+        *num_written = 0;
+        err = BCM_ERR_OK;
+        for (i = 0; i < ps_state.cfg.max_num_pairs; i++)
+        {
+            if (ps_state.pairs[i].is_valid)
+            {
+                if (*num_written == array_len)
+                {
+                    PS_ERR("array size too small to collect all pairs\n");
+                    err = BCM_ERR_PARM;
+                    break;
+                }
+                pairs[*num_written] = ps_state.pairs[i].pair;
+                (*num_written)++;
+            }
+        }
+    }
+
+    bcmos_mutex_unlock(&ps_mutex);
+    return err;
+}
+
+bcmos_errno bcmolt_ps_pair_add(const bcmolt_ps_pair *pair)
+{
+    uint16_t i;
+    bcmos_errno err;
+
+    bcmos_mutex_lock(&ps_mutex);
+
+    if (!ps_state.is_running)
+    {
+        PS_ERR("PS application not running\n");
+        err = BCM_ERR_STATE;
+    }
+    else if (ps_pon_equal(&pair->working, &pair->standby))
+    {
+        PS_ERR("A PON cannot protect itself\n");
+        err = BCM_ERR_PARM;
+    }
+    else
+    {
+        err = BCM_ERR_OK;
+        for (i = 0; i < ps_state.cfg.max_num_pairs; i++)
+        {
+            if (ps_state.pairs[i].is_valid &&
+                (ps_pon_equal(&pair->working, &ps_state.pairs[i].pair.working) ||
+                ps_pon_equal(&pair->working, &ps_state.pairs[i].pair.standby) ||
+                ps_pon_equal(&pair->standby, &ps_state.pairs[i].pair.working) ||
+                ps_pon_equal(&pair->standby, &ps_state.pairs[i].pair.standby)))
+            {
+                PS_ERR("One of the PONs was already present in an existing pair\n");
+                err = BCM_ERR_ALREADY;
+                break;
+            }
+        }
+
+        if (err == BCM_ERR_OK)
+        {
+            err = BCM_ERR_NORES;
+            for (i = 0; i < ps_state.cfg.max_num_pairs; i++)
+            {
+                if (!ps_state.pairs[i].is_valid)
+                {
+                    ps_state.pairs[i].pair = *pair;
+                    ps_state.pairs[i].is_valid = BCMOS_TRUE;
+                    err = BCM_ERR_OK;
+                    break;
+                }
+            }
+            if (err == BCM_ERR_NORES)
+            {
+                PS_ERR("Not enough memory available to add pair\n");
+            }
+        }
+    }
+
+    bcmos_mutex_unlock(&ps_mutex);
+    return err;
+}
+
+bcmos_errno bcmolt_ps_pon_remove(const bcmolt_ps_pon *pon)
+{
+    uint16_t i;
+    bcmos_errno err;
+
+    bcmos_mutex_lock(&ps_mutex);
+
+    if (!ps_state.is_running)
+    {
+        PS_ERR("PS application not running\n");
+        err = BCM_ERR_STATE;
+    }
+    else
+    {
+        err = BCM_ERR_NOENT;
+        for (i = 0; i < ps_state.cfg.max_num_pairs; i++)
+        {
+            if (ps_state.pairs[i].is_valid &&
+                (ps_pon_equal(pon, &ps_state.pairs[i].pair.working) ||
+                ps_pon_equal(pon, &ps_state.pairs[i].pair.standby)))
+            {
+                ps_state.pairs[i].is_valid = BCMOS_FALSE;
+                err = BCM_ERR_OK;
+                break;
+            }
+        }
+        if (err == BCM_ERR_NOENT)
+        {
+            PS_ERR("Specified PON not found\n");
+        }
+    }
+
+    bcmos_mutex_unlock(&ps_mutex);
+    return err;
+}
+
+bcmos_errno bcmolt_ps_pon_state_get(const bcmolt_ps_pon *pon, bcmolt_ps_pon_state *state, bcmolt_ps_pon *partner)
+{
+    bcmos_errno err;
+    bcmolt_ps_pair *pair;
+
+    bcmos_mutex_lock(&ps_mutex);
+    err = bcmolt_ps_pon_pair_get(pon, &pair);
+    bcmos_mutex_unlock(&ps_mutex);
+
+    if (err == BCM_ERR_OK)
+    {
+        if (ps_pon_equal(pon, &pair->standby))
+        {
+            *state = BCMOLT_PS_PON_STATE_STANDBY;
+            *partner = pair->working;
+        }
+        else
+        {
+            *state = BCMOLT_PS_PON_STATE_WORKING;
+            *partner = pair->standby;
+        }
+        return BCM_ERR_OK;
+    }
+    else if (err == BCM_ERR_NOENT)
+    {
+        *state = BCMOLT_PS_PON_STATE_UNASSOCIATED;
+        return BCM_ERR_OK;
+    }
+    else
+    {
+        return err;
+    }
+}
+
+bcmos_errno bcmolt_ps_process_ind(const bcmolt_ps_pon *pon, bcmolt_auto *ind)
+{
+    bcmos_errno err;
+    bcmolt_msg *ind_clone = NULL;
+
+    if (!bcmolt_ps_appl_is_running())
+    {
+        return BCM_ERR_OK;
+    }
+
+    /* Make a copy of all indications received so they can be handled later asynchronously. We don't validate PON state
+     * here since it might change before we get around to handling it.
+     *
+     * Note that this could be optimized to filter out indications that aren't relevant for protection switching before
+     * copying them, but this is left out for simplicity. */
+    err = bcmolt_msg_clone(&ind_clone, &ind->hdr);
+    if (err != BCM_ERR_OK)
+    {
+        PS_ERR("Indication clone failed: %s\n", bcmos_strerror(err));
+        return err;
+    }
+
+    /* send this indication to the internal task's message queue to be processed */
+    ps_task_msg *msg = bcmos_calloc(sizeof(*msg));
+    if (msg == NULL)
+    {
+        PS_ERR("Message calloc failed\n");
+        bcmolt_msg_free(ind_clone);
+        return BCM_ERR_NOMEM;
+    }
+
+    msg->os_msg.handler = ps_handle_msg;
+    msg->os_msg.release = bcmolt_os_msg_release_cb;
+    msg->pon = *pon;
+    msg->ind = (bcmolt_auto *)ind_clone;
+
+    err = bcmos_msg_send_to_module(BCMOS_MODULE_ID_USER_APPL_PS, &msg->os_msg, 0);
+    if (err != BCM_ERR_OK)
+    {
+        PS_ERR("Message send failed: %s\n", bcmos_strerror(err));
+        return err;
+    }
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno bcmolt_ps_change_pon_to_standby(const bcmolt_ps_pon *pon)
+{
+    bcmos_errno err;
+
+    PS_INFO("Switching PON <%d:%d> working->standby\n", pon->device_id, pon->pon_id);
+    switch (ps_pon_mode_get(pon->device_id))
+    {
+    case PS_PON_MODE_GPON:
+        err = ps_move_to_standby_gpon(pon);
+        break;
+    case PS_PON_MODE_EPON:
+        err = ps_move_to_standby_epon(pon);
+        break;
+    case PS_PON_MODE_XGPON:
+        err = ps_move_to_standby_xgpon(pon);
+        break;
+    default:
+        err = BCM_ERR_STATE; /* not a supported system mode */
+        break;
+    }
+    if (err != BCM_ERR_OK)
+    {
+        PS_ERR("<%d:%d> working->standby API failed: %s\n", pon->device_id, pon->pon_id, bcmos_strerror(err));
+    }
+    return err;
+}
+
+static bcmos_errno bcmolt_ps_change_pon_to_working(const bcmolt_ps_pon *pon)
+{
+    bcmos_errno err;
+
+    PS_INFO("Switching PON <%d:%d> standby->working\n", pon->device_id, pon->pon_id);
+    switch (ps_pon_mode_get(pon->device_id))
+    {
+    case PS_PON_MODE_GPON:
+        err = ps_move_to_working_gpon(pon);
+        break;
+    case PS_PON_MODE_EPON:
+        err = ps_move_to_working_epon(pon);
+        break;
+    case PS_PON_MODE_XGPON:
+        err = ps_move_to_working_xgpon(pon);
+        break;
+    default:
+        err = BCM_ERR_STATE; /* not a supported system mode */
+        break;
+    }
+    if (err != BCM_ERR_OK)
+    {
+        PS_ERR("<%d:%d> standby->working API failed: %s\n", pon->device_id, pon->pon_id, bcmos_strerror(err));
+    }
+    return err;
+}
+
+static bcmos_errno bcmolt_ps_disable_tx_optics(const bcmolt_ps_pon *pon)
+{
+    PS_INFO("Disabling TRX for PON <%d:%d:%d>\n", pon->device_id, pon->pon_id, pon->transceiver_id);
+
+    /* This disables the TX optical channel on a given PON port on the BCM68620 SVK board.
+       For other boards, this must be changed to match the board design. */
+#ifndef SIMULATION_BUILD
+    return bcm_board_trx_enable(pon->transceiver_id, BCMOS_FALSE);
+#else
+    return BCM_ERR_OK;
+#endif
+}
+
+static bcmos_errno bcmolt_ps_enable_tx_optics(const bcmolt_ps_pon *pon)
+{
+#ifndef SIMULATION_BUILD
+    bcmos_errno ret;
+#endif
+
+    PS_INFO("Enabling TRX for PON <%d:%d:%d>\n", pon->device_id, pon->pon_id, pon->transceiver_id);
+
+    /* This enables the TX optical channel on a given PON port on the BCM68620 SVK board.
+       For other boards, this must be changed to match the board design. */
+#ifndef SIMULATION_BUILD
+    ret = bcm_board_trx_enable(pon->transceiver_id, BCMOS_TRUE);
+    bcmos_usleep(ps_state.cfg.trx_warming_delay);
+    return ret;
+#else
+    return BCM_ERR_OK;
+#endif
+}
+
+bcmos_errno bcmolt_ps_switch_perform(const bcmolt_ps_pon *pon)
+{
+    bcmos_errno err;
+    bcmolt_ps_pair *pair;
+    bcmolt_ps_pon temp_pon;
+
+    bcmos_mutex_lock(&ps_mutex);
+    ps_state.switch_start_time_us = bcmos_timestamp();
+    err = bcmolt_ps_pon_pair_get(pon, &pair);
+    bcmos_mutex_unlock(&ps_mutex);
+
+    if (err != BCM_ERR_OK)
+    {
+        goto exit;
+    }
+
+    if (ps_state.cfg.switch_sequence == BCMOLT_PS_SWITCH_SEQUENCE_TRX_FIRST)
+    {
+        /* step 1: disable optical TX channel of the working PON */
+        err = bcmolt_ps_disable_tx_optics(&pair->working);
+        if (err != BCM_ERR_OK)
+        {
+            goto exit;
+        }
+
+        /* step 2: enable optical TX channel of the standby PON */
+        err = bcmolt_ps_enable_tx_optics(&pair->standby);
+        if (err != BCM_ERR_OK)
+        {
+            goto exit;
+        }
+
+        /* step 3: change the standby PON state to working */
+        err = bcmolt_ps_change_pon_to_working(&pair->standby);
+        if (err != BCM_ERR_OK)
+        {
+            goto exit;
+        }
+
+        /* step 4: change the working PON state to standby */
+        err = bcmolt_ps_change_pon_to_standby(&pair->working);
+        if (err != BCM_ERR_OK)
+        {
+            goto exit;
+        }
+    }
+    else /* ps_state.cfg.switch_sequence == BCMOLT_PS_SWITCH_SEQUENCE_STANDARD */
+    {
+        /* step 1: change the working PON state to standby */
+        err = bcmolt_ps_change_pon_to_standby(&pair->working);
+        if (err != BCM_ERR_OK)
+        {
+            goto exit;
+        }
+
+        /* step 2: disable optical TX channel of the working PON */
+        err = bcmolt_ps_disable_tx_optics(&pair->working);
+        if (err != BCM_ERR_OK)
+        {
+            goto exit;
+        }
+
+        /* step 3: enable optical TX channel of the standby PON */
+        err = bcmolt_ps_enable_tx_optics(&pair->standby);
+        if (err != BCM_ERR_OK)
+        {
+            goto exit;
+        }
+
+        /* step 4: change the standby PON state to working */
+        err = bcmolt_ps_change_pon_to_working(&pair->standby);
+        if (err != BCM_ERR_OK)
+        {
+            goto exit;
+        }
+    }
+
+    /* step 5: update internal database for new PON states */
+    bcmos_mutex_lock(&ps_mutex);
+    temp_pon = pair->working;
+    pair->working = pair->standby;
+    pair->standby = temp_pon;
+    bcmos_mutex_unlock(&ps_mutex);
+
+exit:
+    if (err == BCM_ERR_OK)
+    {
+        PS_INFO(
+            "<%d:%d> switchover started successfully (<%d:%d> is now standby)\n",
+            pair->working.device_id,
+            pair->working.pon_id,
+            pair->standby.device_id,
+            pair->standby.pon_id);
+    }
+    else if (pair)
+    {
+        PS_INFO(
+            "<%d:%d> switchover encountered an error: %s\n",
+            pair->working.device_id,
+            pair->working.pon_id,
+            bcmos_strerror(err));
+    }
+
+    return err;
+}
+
+uint32_t ps_get_last_switch_start_time_us(void)
+{
+    uint32_t ret;
+    bcmos_mutex_lock(&ps_mutex);
+    ret = ps_state.switch_start_time_us;
+    bcmos_mutex_unlock(&ps_mutex);
+    return ret;
+}
diff --git a/bcm68620_release/release/host_reference/user_appl/protection_switching/bcmolt_user_appl_ps.h b/bcm68620_release/release/host_reference/user_appl/protection_switching/bcmolt_user_appl_ps.h
new file mode 100644
index 0000000..50224be
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/protection_switching/bcmolt_user_appl_ps.h
@@ -0,0 +1,210 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+*/
+
+#ifndef _BCMOLT_USER_APPL_PS_H_
+#define _BCMOLT_USER_APPL_PS_H_
+
+#include <bcmos_system.h>
+#include <bcmolt_api.h>
+#include <bcmolt_model_types.h>
+
+/** Conditions that can cause a protection switch to be performed. */
+typedef enum
+{
+    BCMOLT_PS_SWITCH_CONDITION_LOS,    /**< Switch when LoS alarm is received for a working PON. */
+    BCMOLT_PS_SWITCH_CONDITION_MANUAL, /**< Do not switch automatically. */
+} bcmolt_ps_switch_condition;
+
+/** How provisioning should be mirrored from working to standby. */
+typedef enum
+{
+    BCMOLT_PS_MIRROR_MODE_AUTO, /**< Whenever an indication is received on the working PON, mirror all necessary
+                                     configuration to standby PON. */
+    BCMOLT_PS_MIRROR_MODE_NONE, /**< Do not automatically mirror any provisioning from working to standby. */
+} bcmolt_ps_mirror_mode;
+
+/** What the order of operations should be when performing a switchover. */
+typedef enum
+{
+    BCMOLT_PS_SWITCH_SEQUENCE_STANDARD,  /**< "standard" order:
+                                              1: Change the working PON state to standby.
+                                              2: Disable optical TX channel of working PON.
+                                              3: Enable optical TX channel of standby PON.
+                                              4: Change the standby PON state to working. */
+    BCMOLT_PS_SWITCH_SEQUENCE_TRX_FIRST, /**< Perform transceiver enable/disable first:
+                                              1: Disable optical TX channel of working PON.
+                                              2: Enable optical TX channel of standby PON.
+                                              3: Change the standby PON state to working.
+                                              4: Change the working PON state to standby. */
+} bcmolt_ps_switch_sequence;
+
+/** Global configuration for the protection switching application. */
+typedef struct
+{
+    uint16_t max_num_pairs;                        /**< Maximum number of protected pairs supported. */
+    bcmolt_ps_switch_condition switch_condition;   /**< Condition that should cause a switchover. */
+    bcmolt_ps_switch_sequence switch_sequence;     /**< Order of operations when performing a switchover. */
+
+    /* The following properties are only used in GPON mode. */
+    bcmolt_ps_mirror_mode mirror_mode;             /**< How provisioning should be mirrored from working to standby. */
+    bcmos_bool mirror_mac_entries;                 /**< If TRUE, mirror all MAC learning entries to the standby PON
+                                                        when learning indications are received from the working PON.
+                                                        This will also cause entries to be automatically deleted when
+                                                        aging indications are received and moved when MAC move
+                                                        indications are received. */
+    bcmos_bool static_mac_entries;                 /**< If TRUE, when entries are mirrored to the standby PON, treat
+                                                        them as "static" (not aged). */
+    uint32_t trx_warming_delay;                    /**< Delay (in usec) to wait after TRX enable, in order to
+                                                        guarantee that POPUP PLOAMs are correctly seen by ONUs. */
+} bcmolt_ps_global_cfg;
+
+/** A single PON on an OLT device - half of a protected pair. */
+typedef struct
+{
+    bcmolt_devid device_id;
+    bcmolt_pon_ni pon_id;
+    bcmolt_pon_ni transceiver_id;
+} bcmolt_ps_pon;
+
+/** A protected pair of PONs, on the same OLT device or different devices. */
+typedef struct
+{
+    bcmolt_ps_pon working;
+    bcmolt_ps_pon standby;
+} bcmolt_ps_pair;
+
+/** Possible states for a single PON from a protection switching point-of-view. */
+typedef enum
+{
+    BCMOLT_PS_PON_STATE_UNASSOCIATED, /**< The PON is not part of a protected pair. */
+    BCMOLT_PS_PON_STATE_WORKING,      /**< The PON is designated as working with the TRX enabled while active. */
+    BCMOLT_PS_PON_STATE_STANDBY,      /**< The PON is designated as standby with the TRX disabled while active. */
+} bcmolt_ps_pon_state;
+
+/** Initialize the protection switching application (this should be called as part of application startup). */
+void bcmolt_ps_appl_init(void);
+
+/** Start the protection switching application (this is global for the entire system).
+ *
+ * \param[in] cfg Global protection switching configuration.
+ * \return        BCM_ERR_OK if the application was started successfully, <0 otherwise.
+ */
+bcmos_errno bcmolt_ps_appl_start(const bcmolt_ps_global_cfg *cfg);
+
+/** Stop the protection switching application (this is global for the entire system).
+ *
+ * \return        BCM_ERR_OK if the application was stopped successfully, <0 otherwise.
+ */
+bcmos_errno bcmolt_ps_appl_stop(void);
+
+/** Query whether the protection switching application is currently running.
+ *
+ * \return        BCMOS_TRUE if the application is running, BCMOS_FALSE otherwise.
+ */
+bcmos_bool bcmolt_ps_appl_is_running(void);
+
+/** Get the configuration of the running protection switching application (this is global for the entire system).
+ *
+ * \param[out] cfg Global protection switching configuration.
+ * \return         BCM_ERR_OK if the configuration was retrieved successfully, <0 otherwise.
+ */
+bcmos_errno bcmolt_ps_global_cfg_get(bcmolt_ps_global_cfg *cfg);
+
+/** Change the configuration of the running protection switching application (this is global for the entire system).
+ *
+ * \param[in] cfg Global protection switching configuration.
+ * \return        BCM_ERR_OK if the configuration was updated successfully, <0 otherwise.
+ */
+bcmos_errno bcmolt_ps_global_cfg_update(const bcmolt_ps_global_cfg *cfg);
+
+/** Get the list of all protected pairs currently tracked by the protection switching application.
+ *
+ * \param[in]  array_len   The length of the pairs array.
+ * \param[out] pairs       An array of protected pairs to fill.
+ * \param[out] num_written The number of pairs written to the array.
+ * \return                 BCM_ERR_OK if the array was written successfully, <0 otherwise.
+ */
+bcmos_errno bcmolt_ps_pairs_get(uint16_t array_len, bcmolt_ps_pair *pairs, uint16_t *num_written);
+
+/** Add a protected pair to the protection switching database.
+ *
+ * After this has been called, provisioning will be mirrored from the working PON to the standby PON according to the
+ * mirror_mode global parameter, and a switch will be performed per the switch_condition global parameter.
+ *
+ * \param[in] pair A pair of PONs to add - they can be on the same OLT device or different devices.
+ * \return         BCM_ERR_OK if the pair was added successfully, <0 otherwise.
+ */
+bcmos_errno bcmolt_ps_pair_add(const bcmolt_ps_pair *pair);
+
+/** Remove the protected pair containing the specified PON from the protection switching database.
+*
+* \param[in] pon A PON that is a member of a protection pair.
+* \return        BCM_ERR_OK if the PON was removed successfully, <0 otherwise.
+*/
+bcmos_errno bcmolt_ps_pon_remove(const bcmolt_ps_pon *pon);
+
+/** Query for the current state of a protected PON.
+*
+* \param[in]  pon     The PON to query.
+* \param[out] state   The protection state of the PON (e.g. working/standby).
+* \param[out] partner If this PON is protected, the other half of the protected pair.
+* \return             BCM_ERR_OK if the PON was queried successfully, <0 otherwise.
+*/
+bcmos_errno bcmolt_ps_pon_state_get(const bcmolt_ps_pon *pon, bcmolt_ps_pon_state *state, bcmolt_ps_pon *partner);
+
+/** Process an indication received by the working PON.
+ *
+ * The action taken will depend on the object/indication type and the mirror_mode global parameter.
+ * If the application isn't running, the supplied PON isn't in a protected working state or the indication isn't
+ * relevant for protection switching, the indication will be ignored.
+ *
+ * Note: this function does not free the indication.
+ * The caller must free it using bcmos_msg_free() after calling this function.
+ *
+ * \param[in] pon The PON on which the indication was received.
+ * \param[in] ind The indication that was received.
+ * \return        BCM_ERR_OK if the indication was processed successfully or ignored, <0 otherwise.
+ */
+bcmos_errno bcmolt_ps_process_ind(const bcmolt_ps_pon *pon, bcmolt_auto *ind);
+
+/** Immediately perform a protection switch on the given PON, which must belong to a protected pair.
+ *
+ * This function is primarily intended for use with the BCMOLT_PS_SWITCH_CONDITION_MANUAL switch condition, or for
+ * debugging purposes.
+ *
+ * Note that this doesn't wait for the switch to complete - it merely just configures the transceivers and initiates
+ * the PON state transitions.  To wait for completion, the host must wait for the PON NI state change complete or
+ * "protection_switching_traffic_resume" indications to be received.
+ *
+ * \param[in] pair The PON on which to perform the switch (either the working or standby PON of a protected pair).
+ * \return         BCM_ERR_OK if the switch was successful, <0 otherwise.
+ */
+bcmos_errno bcmolt_ps_switch_perform(const bcmolt_ps_pon *pon);
+
+#endif
diff --git a/bcm68620_release/release/host_reference/user_appl/protection_switching/bcmolt_user_appl_ps_cli.c b/bcm68620_release/release/host_reference/user_appl/protection_switching/bcmolt_user_appl_ps_cli.c
new file mode 100644
index 0000000..d75bd00
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/protection_switching/bcmolt_user_appl_ps_cli.c
@@ -0,0 +1,291 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+*/
+
+#include <bcmos_system.h>
+#include <bcmcli.h>
+#include "bcmolt_user_appl_ps_cli.h"
+#include "bcmolt_user_appl_ps.h"
+
+static bcmos_errno ps_cmd_start(bcmcli_session *session, const bcmcli_cmd_parm parms[], uint16_t n_parms)
+{
+    bcmcli_cmd_parm *parm;
+    bcmolt_ps_global_cfg cfg = {};
+
+    parm = bcmcli_find_named_parm(session, "max_pairs");
+    if (parm != NULL)
+    {
+        cfg.max_num_pairs = (uint16_t)parm->value.number;
+    }
+
+    parm = bcmcli_find_named_parm(session, "switch_condition");
+    if (parm != NULL)
+    {
+        cfg.switch_condition = (bcmolt_ps_switch_condition)parm->value.number;
+    }
+
+    parm = bcmcli_find_named_parm(session, "switch_sequence");
+    if (parm != NULL)
+    {
+        cfg.switch_sequence = (bcmolt_ps_switch_sequence)parm->value.number;
+    }
+
+    parm = bcmcli_find_named_parm(session, "mirror_mode");
+    if (parm != NULL)
+    {
+        cfg.mirror_mode = (bcmolt_ps_mirror_mode)parm->value.number;
+    }
+
+    parm = bcmcli_find_named_parm(session, "mirror_mac_entries");
+    if (parm != NULL)
+    {
+        cfg.mirror_mac_entries = (bcmos_bool)parm->value.number;
+    }
+
+    parm = bcmcli_find_named_parm(session, "static_mac_entries");
+    if (parm != NULL)
+    {
+        cfg.static_mac_entries = (bcmos_bool)parm->value.number;
+    }
+
+    parm = bcmcli_find_named_parm(session, "trx_warming_delay");
+    if (parm != NULL)
+    {
+        cfg.trx_warming_delay = parm->value.number;
+    }
+
+    return bcmolt_ps_appl_start(&cfg);
+}
+
+static bcmos_errno ps_cmd_stop(bcmcli_session *session, const bcmcli_cmd_parm parms[], uint16_t n_parms)
+{
+    return bcmolt_ps_appl_stop();
+}
+
+static bcmos_errno ps_cmd_get_cfg(bcmcli_session *session, const bcmcli_cmd_parm parms[], uint16_t n_parms)
+{
+    bcmos_errno err;
+    bcmolt_ps_global_cfg cfg;
+    
+    err = bcmolt_ps_global_cfg_get(&cfg);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    bcmcli_session_print(session, "max_pairs=%d\n", cfg.max_num_pairs);
+    bcmcli_session_print(
+        session,
+        "switch_condition=%s\n",
+        cfg.switch_condition == BCMOLT_PS_SWITCH_CONDITION_LOS ? "los" : "manual");
+    bcmcli_session_print(
+        session,
+        "switch_sequence=%s\n",
+        cfg.switch_sequence == BCMOLT_PS_SWITCH_SEQUENCE_STANDARD ? "std" : "trx_first");
+    bcmcli_session_print(
+        session,
+        "mirror_mode=%s\n",
+        cfg.mirror_mode == BCMOLT_PS_MIRROR_MODE_AUTO ? "auto" : "none");
+    bcmcli_session_print(session, "mirror_mac_entries=%s\n", cfg.mirror_mac_entries ? "yes" : "no");
+    bcmcli_session_print(session, "static_mac_entries=%s\n", cfg.static_mac_entries ? "yes" : "no");
+    bcmcli_session_print(session, "trx_warming_delay=%u\n", cfg.trx_warming_delay);
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno ps_cmd_show_pairs(bcmcli_session *session, const bcmcli_cmd_parm parms[], uint16_t n_parms)
+{
+    bcmos_errno err;
+    bcmolt_ps_global_cfg cfg;
+    bcmolt_ps_pair *pairs;
+    uint16_t num_written;
+
+    err = bcmolt_ps_global_cfg_get(&cfg);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    pairs = bcmos_calloc(sizeof(*pairs) * cfg.max_num_pairs);
+
+    err = bcmolt_ps_pairs_get(cfg.max_num_pairs, pairs, &num_written);
+    if (err == BCM_ERR_OK)
+    {
+        uint16_t i;
+
+        bcmcli_session_print(session, "      working  | standby\n");
+        bcmcli_session_print(session, "      =========+=========\n");
+        for (i = 0; i < num_written; i++)
+        {
+            bcmcli_session_print(
+                session,
+                "[%2d]: %2d.%2d.%2d | %2d.%2d.%2d\n",
+                i,
+                pairs[i].working.device_id,
+                pairs[i].working.pon_id,
+                pairs[i].working.transceiver_id,
+                pairs[i].standby.device_id,
+                pairs[i].standby.pon_id,
+                pairs[i].standby.transceiver_id);
+        }
+    }
+
+    bcmos_free(pairs);
+    return err;
+}
+
+static bcmos_errno ps_cmd_add_pair(bcmcli_session *session, const bcmcli_cmd_parm parms[], uint16_t n_parms)
+{
+    bcmcli_cmd_parm *working_device = bcmcli_find_named_parm(session, "working.device");
+    bcmcli_cmd_parm *working_pon = bcmcli_find_named_parm(session, "working.pon");
+    bcmcli_cmd_parm *working_transceiver = bcmcli_find_named_parm(session, "working.transceiver");
+    bcmcli_cmd_parm *standby_device = bcmcli_find_named_parm(session, "standby.device");
+    bcmcli_cmd_parm *standby_pon = bcmcli_find_named_parm(session, "standby.pon");
+    bcmcli_cmd_parm *standby_transceiver = bcmcli_find_named_parm(session, "standby.transceiver");
+
+    bcmolt_ps_pair pair =
+    {
+        .working =
+        {
+            .device_id = (bcmolt_devid)working_device->value.number,
+            .pon_id = (bcmolt_pon_ni)working_pon->value.number,
+            .transceiver_id = (bcmolt_pon_ni)working_transceiver->value.number
+        },
+        .standby =
+        {
+            .device_id = (bcmolt_devid)standby_device->value.number,
+            .pon_id = (bcmolt_pon_ni)standby_pon->value.number,
+            .transceiver_id = (bcmolt_pon_ni)standby_transceiver->value.number
+        },
+    };
+
+    // Set transceiver_id to pon_id if default
+    if (pair.working.transceiver_id == (bcmolt_pon_ni)-1)
+    {
+        pair.working.transceiver_id = pair.working.pon_id;
+    }
+    if (pair.standby.transceiver_id == (bcmolt_pon_ni)-1)
+    {
+        pair.standby.transceiver_id = pair.standby.pon_id;
+    }
+
+    return bcmolt_ps_pair_add(&pair);
+}
+
+static bcmos_errno ps_cmd_remove_pon(bcmcli_session *session, const bcmcli_cmd_parm parms[], uint16_t n_parms)
+{
+    bcmcli_cmd_parm *device = bcmcli_find_named_parm(session, "device");
+    bcmcli_cmd_parm *pon = bcmcli_find_named_parm(session, "pon");
+
+    bcmolt_ps_pon ps_pon =
+    {
+        .device_id = (bcmolt_devid)device->value.number,
+        .pon_id = (bcmolt_pon_ni)pon->value.number
+    };
+
+    return bcmolt_ps_pon_remove(&ps_pon);
+}
+
+static bcmos_errno ps_cmd_perform_switch(bcmcli_session *session, const bcmcli_cmd_parm parms[], uint16_t n_parms)
+{
+    bcmcli_cmd_parm *device = bcmcli_find_named_parm(session, "device");
+    bcmcli_cmd_parm *pon = bcmcli_find_named_parm(session, "pon");
+
+    bcmolt_ps_pon ps_pon =
+    {
+        .device_id = (bcmolt_devid)device->value.number,
+        .pon_id = (bcmolt_pon_ni)pon->value.number
+    };
+
+    return bcmolt_ps_switch_perform(&ps_pon);
+}
+
+bcmos_errno bcmolt_user_appl_ps_cli_init(bcmcli_entry *top_dir)
+{
+    static bcmcli_enum_val switch_cond_table[] =
+    {
+        { .name = "los",    .val = BCMOLT_PS_SWITCH_CONDITION_LOS },
+        { .name = "manual", .val = BCMOLT_PS_SWITCH_CONDITION_MANUAL },
+        BCMCLI_ENUM_LAST
+    };
+
+    static bcmcli_enum_val switch_seq_table[] =
+    {
+        { .name = "std",       .val = BCMOLT_PS_SWITCH_SEQUENCE_STANDARD },
+        { .name = "trx_first", .val = BCMOLT_PS_SWITCH_SEQUENCE_TRX_FIRST },
+        BCMCLI_ENUM_LAST
+    };
+
+    static bcmcli_enum_val mirror_mode_table[] =
+    {
+        { .name = "auto", .val = BCMOLT_PS_MIRROR_MODE_AUTO },
+        { .name = "none", .val = BCMOLT_PS_MIRROR_MODE_NONE },
+        BCMCLI_ENUM_LAST
+    };
+
+    bcmcli_entry *dir =
+        bcmcli_dir_add(top_dir, "ps", "Protection switching user application", BCMCLI_ACCESS_ADMIN, NULL);
+    BCMOS_CHECK_RETURN_ERROR(!dir, BCM_ERR_NOMEM);
+
+    BCMCLI_MAKE_CMD(dir, "start", "Start protection switching application", ps_cmd_start,
+        BCMCLI_MAKE_PARM("max_pairs", "Max number of protected pairs", BCMCLI_PARM_NUMBER, BCMCLI_PARM_FLAG_OPTIONAL),
+        BCMCLI_MAKE_PARM_ENUM("switch_condition", "Switch condition", switch_cond_table, BCMCLI_PARM_FLAG_OPTIONAL),
+        BCMCLI_MAKE_PARM_ENUM("switch_sequence", "Switch sequence", switch_seq_table, BCMCLI_PARM_FLAG_OPTIONAL),
+        BCMCLI_MAKE_PARM_ENUM("mirror_mode", "Mirror mode", mirror_mode_table, BCMCLI_PARM_FLAG_OPTIONAL),
+        BCMCLI_MAKE_PARM_ENUM(
+            "mirror_mac_entries", "Mirror MAC entries", bcmcli_enum_bool_table, BCMCLI_PARM_FLAG_OPTIONAL),
+        BCMCLI_MAKE_PARM_ENUM(
+            "static_mac_entries", "Static MAC entries", bcmcli_enum_bool_table, BCMCLI_PARM_FLAG_OPTIONAL),
+        BCMCLI_MAKE_PARM("trx_warming_delay", "TRX warming delay (in usec)", BCMCLI_PARM_UDECIMAL, BCMCLI_PARM_FLAG_OPTIONAL));
+
+    BCMCLI_MAKE_CMD_NOPARM(dir, "stop", "Stop protection switching application", ps_cmd_stop);
+
+    BCMCLI_MAKE_CMD_NOPARM(dir, "get_cfg", "Show running configuration parameters", ps_cmd_get_cfg);
+
+    BCMCLI_MAKE_CMD_NOPARM(dir, "show_pairs", "Show current protected pairs", ps_cmd_show_pairs);
+
+    BCMCLI_MAKE_CMD(dir, "add_pair", "Add protected pair", ps_cmd_add_pair,
+        BCMCLI_MAKE_PARM("working.device", "Device ID of the working PON", BCMCLI_PARM_NUMBER, 0),
+        BCMCLI_MAKE_PARM("working.pon", "PON NI of the working PON", BCMCLI_PARM_NUMBER, 0),
+        BCMCLI_MAKE_PARM_DEFVAL("working.transceiver", "Transceiver Id of the working PON",
+                                BCMCLI_PARM_NUMBER, BCMCLI_PARM_FLAG_OPTIONAL, -1),
+        BCMCLI_MAKE_PARM("standby.device", "Device ID of the standby PON", BCMCLI_PARM_NUMBER, 0),
+        BCMCLI_MAKE_PARM("standby.pon", "PON NI of the standby PON", BCMCLI_PARM_NUMBER, 0),
+        BCMCLI_MAKE_PARM_DEFVAL("standby.transceiver", "Transceiver Id of the standby PON",
+                                BCMCLI_PARM_NUMBER, BCMCLI_PARM_FLAG_OPTIONAL, -1));
+
+    BCMCLI_MAKE_CMD(dir, "remove_pon", "Remove protected pair for (either) PON", ps_cmd_remove_pon,
+        BCMCLI_MAKE_PARM("device", "Device ID of the either working/standby PON", BCMCLI_PARM_NUMBER, 0),
+        BCMCLI_MAKE_PARM("pon", "PON NI of the either working/standby PON", BCMCLI_PARM_NUMBER, 0));
+
+    BCMCLI_MAKE_CMD(dir, "perform_switch", "Perform protection switch manually", ps_cmd_perform_switch,
+        BCMCLI_MAKE_PARM("device", "Device ID of the either working/standby PON", BCMCLI_PARM_NUMBER, 0),
+        BCMCLI_MAKE_PARM("pon", "PON NI of the either working/standby PON", BCMCLI_PARM_NUMBER, 0));
+
+    return BCM_ERR_OK;
+}
diff --git a/bcm68620_release/release/host_reference/user_appl/protection_switching/bcmolt_user_appl_ps_cli.h b/bcm68620_release/release/host_reference/user_appl/protection_switching/bcmolt_user_appl_ps_cli.h
new file mode 100644
index 0000000..db77c09
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/protection_switching/bcmolt_user_appl_ps_cli.h
@@ -0,0 +1,38 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+*/
+
+#ifndef _BCMOLT_USER_APPL_PS_CLI_H_
+#define _BCMOLT_USER_APPL_PS_CLI_H_
+
+#include <bcmos_system.h>
+#include <bcmcli.h>
+
+bcmos_errno bcmolt_user_appl_ps_cli_init(bcmcli_entry *top_dir);
+
+#endif
diff --git a/bcm68620_release/release/host_reference/user_appl/protection_switching/bcmolt_user_appl_ps_epon.c b/bcm68620_release/release/host_reference/user_appl/protection_switching/bcmolt_user_appl_ps_epon.c
new file mode 100644
index 0000000..dab93cb
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/protection_switching/bcmolt_user_appl_ps_epon.c
@@ -0,0 +1,188 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+*/
+
+#include <bcmos_system.h>
+#include <bcmolt_api.h>
+#include <bcmolt_model_types.h>
+#include <bcm_dev_log.h>
+#include <bcmos_common.h>
+#include "bcmolt_user_appl_ps.h"
+#include "bcmolt_user_appl_ps_internal.h"
+
+
+static bcmos_errno ps_handle_ni_no_reports(bcmolt_ps_global_cfg * global_cfg, const bcmolt_ps_pon *pon, const bcmolt_epon_ni_no_reports * ind)
+{
+    if (ind->data.alarm_status == BCMOLT_STATUS_OFF)
+    {
+        PS_INFO("<%d:%d> LoS alarm cleared\n", pon->device_id, pon->pon_id);
+        return BCM_ERR_OK;
+    }
+
+    PS_INFO("<%d:%d> LoS alarm raised\n", pon->device_id, pon->pon_id);
+
+    if (global_cfg->switch_condition == BCMOLT_PS_SWITCH_CONDITION_MANUAL)
+    {
+        /* don't react to the switch if we're in manual switch mode */
+        return BCM_ERR_OK;
+    }
+    else
+    {
+        return bcmolt_ps_switch_perform(pon);
+    }
+}
+
+static bcmos_errno ps_handle_logical_link_discovered(bcmolt_ps_global_cfg * global_cfg, const bcmolt_ps_pon *pon, const bcmolt_epon_link_mpcp_discovered * ind)
+{
+    bcmolt_ps_pon_state state;
+    bcmolt_ps_pon partner;
+    bcmos_errno result;
+
+    if (global_cfg->mirror_mode != BCMOLT_PS_MIRROR_MODE_AUTO)
+    {
+        return BCM_ERR_OK;
+    }
+    
+    //At this point we know we have a link discovered on a PON that is in the PROTECTED WORKING state.
+    //This means we want to make sure that is is setup on the PROCTECTED STANDBY PON.  It is possible
+    //That this link has been previously configured on the STANDBY PON so we have to handle that case
+    //gracefully as well.
+    result = bcmolt_ps_pon_state_get(pon, &state, &partner);
+    PS_INFO("pon %d, bcmolt_ps_pon_state_get result == %d, state == %d, partner.pon_id == %d\n", pon->pon_id, result, state, partner.pon_id);
+    if ((BCM_ERR_OK == result) && (state == BCMOLT_PS_PON_STATE_WORKING))
+    {
+        bcmolt_epon_ni_add_protected_standby_link add_standby = {};
+        bcmolt_epon_ni_key key = {};
+        PS_INFO("Mirroring received link discovered on working PON\n");
+
+        key.epon_ni = (bcmolt_epon_ni)partner.pon_id;  //Setup the standby PON as the location to add the link.
+        
+        //Setup operation key for api call.
+        BCMOLT_OPER_INIT(&add_standby, epon_ni, add_protected_standby_link, key);
+
+        //Copy over the data from the received messages:
+        BCMOLT_OPER_PROP_SET(&add_standby, epon_ni, add_protected_standby_link, mac_address, ind->key.mac_address);
+        BCMOLT_OPER_PROP_SET(&add_standby, epon_ni, add_protected_standby_link, working_link_info, ind->data.link_info);
+
+        result = bcmolt_oper_submit(partner.device_id, &add_standby.hdr);
+
+        //We have multiple acceptable return codes here:  
+        //  BCM_ERR_OK      - Indicates new entry created.
+        //  BCM_ERR_ALREADY - Indicates the entry already exists (possible after deregistration/reregistration).
+        PS_INFO("Mirroring add protected standby link result %d\n", result);
+
+        if ( (result == BCM_ERR_OK) || (result == BCM_ERR_ALREADY) )
+        {
+            bcmolt_epon_link_static_registration static_reg = {};
+            bcmolt_epon_link_key link_key = {};
+
+            link_key.epon_ni = (bcmolt_epon_ni)partner.pon_id;
+            link_key.mac_address = ind->key.mac_address;
+
+            //Setup operation key for api call.
+            BCMOLT_OPER_INIT(&static_reg, epon_link, static_registration, link_key);
+            BCMOLT_OPER_PROP_SET(&static_reg, epon_link, static_registration, laseron_time_tq, ind->data.link_info.onu_laser_on_time_tq);
+            BCMOLT_OPER_PROP_SET(&static_reg, epon_link, static_registration, laseroff_time_tq, ind->data.link_info.onu_laser_off_time_tq);
+            BCMOLT_OPER_PROP_SET(&static_reg, epon_link, static_registration, range_value_tq, ind->data.link_info.range_value_tq);
+            BCMOLT_OPER_PROP_SET(&static_reg, epon_link, static_registration, pending_grants, ind->data.link_info.pending_grants);
+            result = bcmolt_oper_submit(partner.device_id, &static_reg.hdr);
+            if (result != BCM_ERR_OK)
+            {
+                PS_ERR("Static registration failed %d\n", result);
+            }
+            else
+            {
+                PS_INFO("Static registration success\n");
+            }
+        }
+        else
+        {
+            PS_ERR("Add protected standby failed %d\n", result);
+        }
+    }
+    return BCM_ERR_OK;
+}
+
+bcmos_errno ps_process_ind_epon(const bcmolt_ps_pon *pon, const bcmolt_auto *ind)
+{
+    bcmos_errno err;
+    bcmolt_ps_global_cfg global_cfg;
+
+    err = bcmolt_ps_global_cfg_get(&global_cfg);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    PS_INFO("ps_process_ind_epon Type: %d CFG_ID: %d\n", ind->hdr.obj_type, ind->hdr.subgroup);
+    switch (ind->hdr.obj_type)
+    {
+    case BCMOLT_OBJ_ID_EPON_NI:
+        switch (ind->hdr.subgroup)
+        {
+        case BCMOLT_EPON_NI_AUTO_CFG_ID_NO_REPORTS:
+            return ps_handle_ni_no_reports(&global_cfg, pon, ((const bcmolt_epon_ni_no_reports *)ind));
+        default:
+            return BCM_ERR_OK;
+        }
+    case BCMOLT_OBJ_ID_EPON_LINK:
+        switch (ind->hdr.subgroup)
+        {
+        case BCMOLT_EPON_LINK_AUTO_CFG_ID_MPCP_DISCOVERED:
+            return ps_handle_logical_link_discovered(&global_cfg, pon, ((const bcmolt_epon_link_mpcp_discovered *)ind));
+        default:
+            return BCM_ERR_OK;
+        }
+    default:
+        return BCM_ERR_OK;
+    }
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno ps_move_to_standby_epon(const bcmolt_ps_pon *pon)
+{
+    bcmolt_epon_ni_set_epon_ni_en_state set_pon_state; 
+    bcmolt_epon_ni_key key = {};
+    key.epon_ni = pon->pon_id;
+
+    BCMOLT_OPER_INIT(&set_pon_state, epon_ni, set_epon_ni_en_state, key);
+    BCMOLT_OPER_PROP_SET(&set_pon_state, epon_ni, set_epon_ni_en_state, new_state, BCMOLT_EPON_NI_EN_STATE_PROTECTED_STANDBY);
+    return bcmolt_oper_submit(pon->device_id, &set_pon_state.hdr);
+}
+
+bcmos_errno ps_move_to_working_epon(const bcmolt_ps_pon *pon)
+{
+    bcmolt_epon_ni_set_epon_ni_en_state set_pon_state;
+    bcmolt_epon_ni_key key = {};
+    key.epon_ni = pon->pon_id;
+
+    BCMOLT_OPER_INIT(&set_pon_state, epon_ni, set_epon_ni_en_state, key);
+    BCMOLT_OPER_PROP_SET(&set_pon_state, epon_ni, set_epon_ni_en_state, new_state, BCMOLT_EPON_NI_EN_STATE_PROTECTED_WORKING);
+    return bcmolt_oper_submit(pon->device_id, &set_pon_state.hdr);
+}
\ No newline at end of file
diff --git a/bcm68620_release/release/host_reference/user_appl/protection_switching/bcmolt_user_appl_ps_gpon.c b/bcm68620_release/release/host_reference/user_appl/protection_switching/bcmolt_user_appl_ps_gpon.c
new file mode 100644
index 0000000..f43e7fb
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/protection_switching/bcmolt_user_appl_ps_gpon.c
@@ -0,0 +1,878 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+*/
+
+#include <bcmolt_host_api.h>
+#include "bcmolt_user_appl_ps.h"
+#include "bcmolt_user_appl_ps_internal.h"
+
+static bcmos_errno ps_handle_ni_los(
+    const bcmolt_ps_global_cfg *global_cfg,
+    const bcmolt_ps_pon *pon,
+    const bcmolt_gpon_ni_los *ind)
+{
+    if (ind->data.status == BCMOLT_STATUS_OFF)
+    {
+        PS_INFO("<%d:%d> LoS alarm cleared\n", pon->device_id, pon->pon_id);
+        return BCM_ERR_OK;
+    }
+
+    PS_INFO("<%d:%d> LoS alarm raised\n", pon->device_id, pon->pon_id);
+
+    if (global_cfg->switch_condition == BCMOLT_PS_SWITCH_CONDITION_MANUAL)
+    {
+        /* don't react to the switch if we're in manual switch mode */
+        return BCM_ERR_OK;
+    }
+    else
+    {
+        return bcmolt_ps_switch_perform(pon);
+    }
+}
+
+static bcmos_errno ps_handle_ni_state_changed(
+    const bcmolt_ps_pon *partner,
+    const bcmolt_gpon_ni_state_change_completed *ind)
+{
+    bcmolt_gpon_ni_key key = { partner->pon_id };
+    bcmolt_gpon_ni_set_pon_state oper;
+
+    BCMOLT_OPER_INIT(&oper, gpon_ni, set_pon_state, key);
+
+    if (ind->data.previous_state == BCMOLT_PON_STATE_INACTIVE &&
+        ind->data.new_state == BCMOLT_PON_STATE_ACTIVE_WORKING)
+    {
+        PS_INFO("%s: activating PON <%d:%d>\n", __FUNCTION__, partner->device_id, key.pon_ni);
+        BCMOLT_OPER_PROP_SET(&oper, gpon_ni, set_pon_state, pon_state, BCMOLT_PON_OPERATION_ACTIVE_STANDBY);
+    }
+    else if (ind->data.previous_state == BCMOLT_PON_STATE_ACTIVE_WORKING &&
+        ind->data.new_state == BCMOLT_PON_STATE_INACTIVE)
+    {
+        PS_INFO("%s: deactivating PON <%d:%d>\n", __FUNCTION__, partner->device_id, key.pon_ni);
+        BCMOLT_OPER_PROP_SET(&oper, gpon_ni, set_pon_state, pon_state, BCMOLT_PON_OPERATION_INACTIVE);
+    }
+    else
+    {
+        /* only change the standby PON's state if we're pre-provisioning the working PON
+          (the switchover is handled separately) */
+        return BCM_ERR_OK;
+    }
+
+    return bcmolt_oper_submit(partner->device_id, &oper.hdr);
+}
+
+static bcmos_errno ps_handle_ni_traffic_resume(
+    const bcmolt_ps_pon *pon,
+    const bcmolt_gpon_ni_protection_switching_traffic_resume *ind)
+{
+    uint32_t after_us  = bcmos_timestamp();
+    uint32_t before_us = ps_get_last_switch_start_time_us();
+    uint32_t time_taken_us = (after_us > before_us) ? after_us - before_us : before_us - after_us;
+    const char *traffic_resume_result_str = NULL;
+
+    switch (ind->data.result)
+    {
+    case BCMOLT_TRAFFIC_RESUME_RESULT_SUCCESS:
+        traffic_resume_result_str = "success";
+        break;
+    case BCMOLT_TRAFFIC_RESUME_RESULT_FAILURE:
+        traffic_resume_result_str = "failure";
+        break;
+    case BCMOLT_TRAFFIC_RESUME_RESULT_SUSPECTED_LOS:
+        traffic_resume_result_str = "suspected_los";
+        break;
+    default:
+        break;
+    }
+
+    PS_INFO(
+        "<%d:%d> Traffic resume %s. Time since start of switch: %d ms.\n",
+        pon->device_id,
+        pon->pon_id,
+        traffic_resume_result_str,
+        time_taken_us / 1000);
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno ps_handle_ni_onus_ranged(
+    const bcmolt_ps_pon *partner,
+    const bcmolt_gpon_ni_protection_switching_onus_ranged *ind)
+{
+    uint32_t i;
+    bcmos_errno last_err = BCM_ERR_OK;
+
+    /* apply all of the new ONU EQDs to the standby PON */
+    for (i = 0; i < ind->data.onus.len; i++)
+    {
+        bcmolt_gpon_onu_key key = { partner->pon_id, ind->data.onus.val[i].onu_id };
+        bcmolt_gpon_onu_cfg cfg;
+        bcmos_errno err;
+
+        PS_INFO(
+            "%s: updating EQD <%d:%d> ONU %d -> %d\n",
+            __FUNCTION__,
+            partner->device_id,
+            key.pon_ni,
+            key.onu_id,
+            ind->data.onus.val[i].eqd);
+
+        BCMOLT_CFG_INIT(&cfg, gpon_onu, key);
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, ranging_time, ind->data.onus.val[i].eqd);
+        err = bcmolt_cfg_set(partner->device_id, &cfg.hdr);
+        if (err != BCM_ERR_OK)
+        {
+            PS_ERR("EQD update failed: %s\n", bcmos_strerror(err));
+            last_err = err;
+        }
+    }
+
+    return last_err;
+}
+
+static bcmos_errno ps_handle_onu_ranging_completed(
+    const bcmolt_ps_pon *partner,
+    const bcmolt_gpon_onu_ranging_completed *ind)
+{
+    bcmolt_gpon_onu_key key = { partner->pon_id, ind->key.onu_id };
+    bcmolt_gpon_onu_cfg cfg;
+
+    /* only react to success indications */
+    if (ind->data.status != BCMOLT_RESULT_SUCCESS)
+    {
+        return BCM_ERR_OK;
+    }
+
+    PS_INFO(
+        "%s: updating EQD <%d:%d> ONU %d -> %d\n",
+        __FUNCTION__,
+        partner->device_id,
+        key.pon_ni,
+        key.onu_id,
+        ind->data.eqd);
+
+    BCMOLT_CFG_INIT(&cfg, gpon_onu, key);
+    BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, ranging_time, ind->data.eqd);
+    return bcmolt_cfg_set(partner->device_id, &cfg.hdr);
+}
+
+static bcmos_errno ps_handle_onu_key_exchange_completed(
+    const bcmolt_ps_pon *partner,
+    const bcmolt_gpon_onu_key_exchange_completed *ind)
+{
+    bcmolt_gpon_onu_key key = { partner->pon_id, ind->key.onu_id };
+    bcmolt_gpon_onu_cfg cfg;
+
+    PS_INFO("%s: updating AES key <%d:%d> ONU %d\n", __FUNCTION__, partner->device_id, key.pon_ni, key.onu_id);
+
+    BCMOLT_CFG_INIT(&cfg, gpon_onu, key);
+    BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, aes_encryption_key, ind->data.new_key);
+    return bcmolt_cfg_set(partner->device_id, &cfg.hdr);
+}
+
+static bcmos_errno ps_handle_onu_password_authentication_completed(
+    const bcmolt_ps_pon *partner,
+    const bcmolt_gpon_onu_password_authentication_completed *ind)
+{
+    bcmolt_gpon_onu_key key = { partner->pon_id, ind->key.onu_id };
+    bcmolt_gpon_onu_cfg cfg;
+
+    /* only react to success indications */
+    if (ind->data.status != BCMOLT_RESULT_SUCCESS)
+    {
+        return BCM_ERR_OK;
+    }
+
+    PS_INFO("%s: updating password <%d:%d> ONU %d\n", __FUNCTION__, partner->device_id, key.pon_ni, key.onu_id);
+
+    BCMOLT_CFG_INIT(&cfg, gpon_onu, key);
+    BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, password, ind->data.password);
+    return bcmolt_cfg_set(partner->device_id, &cfg.hdr);
+}
+
+static bcmos_errno ps_handle_onu_activation_completed(
+    const bcmolt_ps_pon *partner,
+    const bcmolt_gpon_onu_onu_activation_completed *ind)
+{
+    bcmolt_gpon_onu_key key = { partner->pon_id, ind->key.onu_id };
+    bcmolt_gpon_onu_set_onu_state oper;
+
+    /* only react to success indications */
+    if (ind->data.status != BCMOLT_RESULT_SUCCESS)
+    {
+        return BCM_ERR_OK;
+    }
+
+    PS_INFO("%s: activating <%d:%d> ONU %d\n", __FUNCTION__, partner->device_id, key.pon_ni, key.onu_id);
+
+    BCMOLT_OPER_INIT(&oper, gpon_onu, set_onu_state, key);
+    BCMOLT_OPER_PROP_SET(&oper, gpon_onu, set_onu_state, onu_state, BCMOLT_ONU_OPERATION_ACTIVE);
+    return bcmolt_oper_submit(partner->device_id, &oper.hdr);
+}
+
+static bcmos_errno ps_handle_onu_deactivation_completed(
+    const bcmolt_ps_pon *partner,
+    const bcmolt_gpon_onu_onu_deactivation_completed *ind)
+{
+    bcmolt_gpon_onu_key key = { partner->pon_id, ind->key.onu_id };
+    bcmolt_gpon_onu_set_onu_state oper;
+
+    /* Note: we react to this indication whether or not the deactivation was successful.  Failure indicates that the
+     * ONU didn't respond to the deactivation, but we still remove the ONU from OLT hardware so it must be mirrored. */
+
+    PS_INFO("%s: deactivating <%d:%d> ONU %d\n", __FUNCTION__, partner->device_id, key.pon_ni, key.onu_id);
+
+    BCMOLT_OPER_INIT(&oper, gpon_onu, set_onu_state, key);
+    BCMOLT_OPER_PROP_SET(&oper, gpon_onu, set_onu_state, onu_state, BCMOLT_ONU_OPERATION_INACTIVE);
+    return bcmolt_oper_submit(partner->device_id, &oper.hdr);
+}
+
+static bcmos_errno ps_handle_onu_enable_completed(
+    const bcmolt_ps_pon *partner,
+    const bcmolt_gpon_onu_onu_enable_completed *ind)
+{
+    bcmolt_gpon_onu_key key = { partner->pon_id, ind->key.onu_id };
+    bcmolt_gpon_onu_set_onu_state oper;
+
+    /* don't try to mirror broadcast enable/disable */
+    if (key.onu_id == BCMOLT_GPON_ONU_ID_INVALID)
+    {
+        return BCM_ERR_OK;
+    }
+
+    PS_INFO("%s: enabling <%d:%d> ONU %d\n", __FUNCTION__, partner->device_id, key.pon_ni, key.onu_id);
+
+    BCMOLT_OPER_INIT(&oper, gpon_onu, set_onu_state, key);
+    BCMOLT_OPER_PROP_SET(&oper, gpon_onu, set_onu_state, onu_state, BCMOLT_ONU_OPERATION_ENABLE);
+    return bcmolt_oper_submit(partner->device_id, &oper.hdr);
+}
+
+static bcmos_errno ps_handle_onu_disable_completed(
+    const bcmolt_ps_pon *partner,
+    const bcmolt_gpon_onu_onu_disable_completed *ind)
+{
+    bcmolt_gpon_onu_key key = { partner->pon_id, ind->key.onu_id };
+    bcmolt_gpon_onu_set_onu_state oper;
+
+    /* don't try to mirror broadcast enable/disable */
+    if (key.onu_id == BCMOLT_GPON_ONU_ID_INVALID)
+    {
+        return BCM_ERR_OK;
+    }
+
+    PS_INFO("%s: disabling <%d:%d> ONU %d\n", __FUNCTION__, partner->device_id, key.pon_ni, key.onu_id);
+
+    BCMOLT_OPER_INIT(&oper, gpon_onu, set_onu_state, key);
+    BCMOLT_OPER_PROP_SET(&oper, gpon_onu, set_onu_state, onu_state, BCMOLT_ONU_OPERATION_DISABLE);
+    return bcmolt_oper_submit(partner->device_id, &oper.hdr);
+}
+
+static void ps_alarm_state_init(bcmolt_gpon_onu_alarm_state *alarm_state)
+{
+    alarm_state->losi = BCMOLT_STATUS_NO_CHANGE;
+    alarm_state->lofi = BCMOLT_STATUS_NO_CHANGE;
+    alarm_state->loami = BCMOLT_STATUS_NO_CHANGE;
+    alarm_state->dgi = BCMOLT_STATUS_NO_CHANGE;
+    alarm_state->tiwi = BCMOLT_STATUS_NO_CHANGE;
+    alarm_state->dowi = BCMOLT_STATUS_NO_CHANGE;
+    alarm_state->sufi = BCMOLT_STATUS_NO_CHANGE;
+    alarm_state->sfi = BCMOLT_STATUS_NO_CHANGE;
+    alarm_state->sdi = BCMOLT_STATUS_NO_CHANGE;
+    alarm_state->dfi = BCMOLT_STATUS_NO_CHANGE;
+    alarm_state->loai = BCMOLT_STATUS_NO_CHANGE;
+    alarm_state->loki = BCMOLT_STATUS_NO_CHANGE;
+}
+
+static bcmos_errno ps_handle_onu_alarm(const bcmolt_ps_pon *partner, const bcmolt_gpon_onu_onu_alarm *ind)
+{
+    bcmolt_gpon_onu_key key = { partner->pon_id, ind->key.onu_id };
+    bcmolt_gpon_onu_cfg cfg;
+    bcmolt_gpon_onu_alarm_state alarm_state;
+
+    ps_alarm_state_init(&alarm_state);
+    alarm_state.losi = ind->data.onu_alarm.losi;
+    alarm_state.lofi = ind->data.onu_alarm.lofi;
+    alarm_state.loami = ind->data.onu_alarm.loami;
+    
+    PS_INFO(
+        "%s: updating ONU alarms <%d:%d> ONU %d -> %d/%d/%d\n",
+        __FUNCTION__,
+        partner->device_id,
+        key.pon_ni,
+        key.onu_id,
+        alarm_state.losi,
+        alarm_state.lofi,
+        alarm_state.loami);
+
+    BCMOLT_CFG_INIT(&cfg, gpon_onu, key);
+    BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, alarm_state, alarm_state);
+    return bcmolt_cfg_set(partner->device_id, &cfg.hdr);
+}
+
+static bcmos_errno ps_handle_onu_dowi(const bcmolt_ps_pon *partner, const bcmolt_gpon_onu_dowi *ind)
+{
+    bcmolt_gpon_onu_key key = { partner->pon_id, ind->key.onu_id };
+    bcmolt_gpon_onu_cfg cfg;
+    bcmolt_gpon_onu_alarm_state alarm_state;
+
+    PS_INFO(
+        "%s: updating DOWi <%d:%d> ONU %d -> %d (EQD %d)\n",
+        __FUNCTION__,
+        partner->device_id,
+        key.pon_ni,
+        key.onu_id,
+        ind->data.alarm_status,
+        ind->data.new_eqd);
+
+    ps_alarm_state_init(&alarm_state);
+    alarm_state.dowi = ind->data.alarm_status;
+
+    BCMOLT_CFG_INIT(&cfg, gpon_onu, key);
+    BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, alarm_state, alarm_state);
+
+    if (ind->data.alarm_status == BCMOLT_STATUS_ON)
+    {
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, ranging_time, ind->data.new_eqd);
+    }
+
+    return bcmolt_cfg_set(partner->device_id, &cfg.hdr);
+}
+
+static bcmos_errno ps_handle_onu_sfi(const bcmolt_ps_pon *partner, const bcmolt_gpon_onu_sfi *ind)
+{
+    bcmolt_gpon_onu_key key = { partner->pon_id, ind->key.onu_id };
+    bcmolt_gpon_onu_cfg cfg;
+    bcmolt_gpon_onu_alarm_state alarm_state;
+
+    PS_INFO(
+        "%s: updating SFI <%d:%d> ONU %d -> %d\n",
+        __FUNCTION__,
+        partner->device_id,
+        key.pon_ni,
+        key.onu_id,
+        ind->data.alarm_status);
+
+    ps_alarm_state_init(&alarm_state);
+    alarm_state.sfi = ind->data.alarm_status;
+
+    BCMOLT_CFG_INIT(&cfg, gpon_onu, key);
+    BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, alarm_state, alarm_state);
+    return bcmolt_cfg_set(partner->device_id, &cfg.hdr);
+}
+
+static bcmos_errno ps_handle_onu_sdi(const bcmolt_ps_pon *partner, const bcmolt_gpon_onu_sdi *ind)
+{
+    bcmolt_gpon_onu_key key = { partner->pon_id, ind->key.onu_id };
+    bcmolt_gpon_onu_cfg cfg;
+    bcmolt_gpon_onu_alarm_state alarm_state;
+
+    PS_INFO(
+        "%s: updating SDi <%d:%d> ONU %d -> %d\n",
+        __FUNCTION__,
+        partner->device_id,
+        key.pon_ni,
+        key.onu_id,
+        ind->data.alarm_status);
+
+    ps_alarm_state_init(&alarm_state);
+    alarm_state.sdi = ind->data.alarm_status;
+
+    BCMOLT_CFG_INIT(&cfg, gpon_onu, key);
+    BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, alarm_state, alarm_state);
+    return bcmolt_cfg_set(partner->device_id, &cfg.hdr);
+}
+
+static bcmos_errno ps_handle_onu_dfi(const bcmolt_ps_pon *partner, const bcmolt_gpon_onu_dfi *ind)
+{
+    bcmolt_gpon_onu_key key = { partner->pon_id, ind->key.onu_id };
+    bcmolt_gpon_onu_cfg cfg;
+    bcmolt_gpon_onu_alarm_state alarm_state;
+
+    PS_INFO(
+        "%s: updating DFi <%d:%d> ONU %d -> %d\n",
+        __FUNCTION__,
+        partner->device_id,
+        key.pon_ni,
+        key.onu_id,
+        ind->data.alarm_status);
+
+    ps_alarm_state_init(&alarm_state);
+    alarm_state.dfi = ind->data.alarm_status;
+
+    BCMOLT_CFG_INIT(&cfg, gpon_onu, key);
+    BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, alarm_state, alarm_state);
+    return bcmolt_cfg_set(partner->device_id, &cfg.hdr);
+}
+
+static bcmos_errno ps_handle_onu_sufi(const bcmolt_ps_pon *partner, const bcmolt_gpon_onu_sufi *ind)
+{
+    bcmolt_gpon_onu_key key = { partner->pon_id, ind->key.onu_id };
+    bcmolt_gpon_onu_cfg cfg;
+    bcmolt_gpon_onu_alarm_state alarm_state;
+
+    PS_INFO(
+        "%s: updating SUFi <%d:%d> ONU %d -> %d\n",
+        __FUNCTION__,
+        partner->device_id,
+        key.pon_ni,
+        key.onu_id,
+        ind->data.alarm_status);
+
+    ps_alarm_state_init(&alarm_state);
+    alarm_state.sufi = ind->data.alarm_status;
+
+    BCMOLT_CFG_INIT(&cfg, gpon_onu, key);
+    BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, alarm_state, alarm_state);
+    return bcmolt_cfg_set(partner->device_id, &cfg.hdr);
+}
+
+static bcmos_errno ps_handle_onu_loai(const bcmolt_ps_pon *partner, const bcmolt_gpon_onu_loai *ind)
+{
+    bcmolt_gpon_onu_key key = { partner->pon_id, ind->key.onu_id };
+    bcmolt_gpon_onu_cfg cfg;
+    bcmolt_gpon_onu_alarm_state alarm_state;
+
+    PS_INFO(
+        "%s: updating LOAi <%d:%d> ONU %d -> %d\n",
+        __FUNCTION__,
+        partner->device_id,
+        key.pon_ni,
+        key.onu_id,
+        ind->data.alarm_status);
+
+    ps_alarm_state_init(&alarm_state);
+    alarm_state.loai = ind->data.alarm_status;
+
+    BCMOLT_CFG_INIT(&cfg, gpon_onu, key);
+    BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, alarm_state, alarm_state);
+    return bcmolt_cfg_set(partner->device_id, &cfg.hdr);
+}
+
+static bcmos_errno ps_handle_onu_dgi(const bcmolt_ps_pon *partner, const bcmolt_gpon_onu_dgi *ind)
+{
+    bcmolt_gpon_onu_key key = { partner->pon_id, ind->key.onu_id };
+    bcmolt_gpon_onu_cfg cfg;
+    bcmolt_gpon_onu_alarm_state alarm_state;
+
+    PS_INFO(
+        "%s: updating DGi <%d:%d> ONU %d -> %d\n",
+        __FUNCTION__,
+        partner->device_id,
+        key.pon_ni,
+        key.onu_id,
+        ind->data.alarm_status);
+
+    ps_alarm_state_init(&alarm_state);
+    alarm_state.dgi = ind->data.alarm_status;
+
+    BCMOLT_CFG_INIT(&cfg, gpon_onu, key);
+    BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, alarm_state, alarm_state);
+    return bcmolt_cfg_set(partner->device_id, &cfg.hdr);
+}
+
+static bcmos_errno ps_handle_onu_tiwi(const bcmolt_ps_pon *partner, const bcmolt_gpon_onu_tiwi *ind)
+{
+    bcmolt_gpon_onu_key key = { partner->pon_id, ind->key.onu_id };
+    bcmolt_gpon_onu_cfg cfg;
+    bcmolt_gpon_onu_alarm_state alarm_state;
+
+    PS_INFO(
+        "%s: updating TIWi <%d:%d> ONU %d -> %d\n",
+        __FUNCTION__,
+        partner->device_id,
+        key.pon_ni,
+        key.onu_id,
+        ind->data.alarm_status);
+
+    ps_alarm_state_init(&alarm_state);
+    alarm_state.tiwi = ind->data.alarm_status;
+
+    BCMOLT_CFG_INIT(&cfg, gpon_onu, key);
+    BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, alarm_state, alarm_state);
+    return bcmolt_cfg_set(partner->device_id, &cfg.hdr);
+}
+
+static bcmos_errno ps_handle_onu_loki(const bcmolt_ps_pon *partner, const bcmolt_gpon_onu_loki *ind)
+{
+    bcmolt_gpon_onu_key key = { partner->pon_id, ind->key.onu_id };
+    bcmolt_gpon_onu_cfg cfg;
+    bcmolt_gpon_onu_alarm_state alarm_state;
+
+    PS_INFO(
+        "%s: updating LOKi <%d:%d> ONU %d -> %d\n",
+        __FUNCTION__,
+        partner->device_id,
+        key.pon_ni,
+        key.onu_id,
+        ind->data.alarm_status);
+
+    ps_alarm_state_init(&alarm_state);
+    alarm_state.loki = ind->data.alarm_status;
+
+    BCMOLT_CFG_INIT(&cfg, gpon_onu, key);
+    BCMOLT_CFG_PROP_SET(&cfg, gpon_onu, alarm_state, alarm_state);
+    return bcmolt_cfg_set(partner->device_id, &cfg.hdr);
+}
+
+static bcmos_errno ps_handle_onu_omci_port_configuration_completed(
+    const bcmolt_ps_pon *partner,
+    const bcmolt_gpon_onu_omci_port_id_configuration_completed *ind)
+{
+    bcmolt_gpon_gem_port_key key = { partner->pon_id, ind->data.gem_port };
+    bcmolt_gpon_gem_port_set_state oper;
+
+    BCMOLT_OPER_INIT(&oper, gpon_gem_port, set_state, key);
+
+    if (ind->data.operation == BCMOLT_OMCI_PORT_ID_OPERATION_CONFIGURE)
+    {
+        /* don't react to unsuccessful activations */
+        if (ind->data.status != BCMOLT_RESULT_SUCCESS)
+        {
+            return BCM_ERR_OK;
+        }
+
+        PS_INFO("%s: activating <%d:%d> GEM port ID %d\n", __FUNCTION__, partner->device_id, key.pon_ni, key.gem_port_id);
+        BCMOLT_OPER_PROP_SET(&oper, gpon_gem_port, set_state, state, BCMOLT_GEM_PORT_OPERATION_ACTIVATE);
+    }
+    else
+    {
+        PS_INFO(
+            "%s: deactivating <%d:%d> GEM port ID %d\n",
+            __FUNCTION__,
+            partner->device_id,
+            key.pon_ni,
+            key.gem_port_id);
+        BCMOLT_OPER_PROP_SET(&oper, gpon_gem_port, set_state, state, BCMOLT_GEM_PORT_OPERATION_DEACTIVATE);
+    }
+
+    return bcmolt_oper_submit(partner->device_id, &oper.hdr);
+}
+
+static bcmos_errno ps_handle_mac_table_new_mac(
+    const bcmolt_ps_global_cfg *global_cfg,
+    const bcmolt_ps_pon *partner,
+    const bcmolt_gpon_iwf_mac_table_new_mac *ind)
+{
+    bcmolt_gpon_iwf_mac_table_key key = { partner->pon_id, ind->key.mac_address, ind->key.vlan };
+    bcmolt_gpon_iwf_mac_table_cfg cfg;
+
+    if (!global_cfg->mirror_mac_entries)
+    {
+        return BCM_ERR_OK; /* we are not configured to mirror MAC entries */
+    }
+
+    BCMOLT_CFG_INIT(&cfg, gpon_iwf_mac_table, key);
+    BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_mac_table, flow_id, ind->data.flow_id);
+
+    if (global_cfg->static_mac_entries)
+    {
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_mac_table, stat, BCMOS_TRUE);
+    }
+    else
+    {
+        BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_mac_table, stat, BCMOS_FALSE);
+    }
+
+    return bcmolt_cfg_set(partner->device_id, &cfg.hdr);
+}
+
+static bcmos_errno ps_handle_mac_table_mac_aged(
+    const bcmolt_ps_global_cfg *global_cfg,
+    const bcmolt_ps_pon *partner,
+    const bcmolt_gpon_iwf_mac_table_mac_aged *ind)
+{
+    bcmolt_gpon_iwf_mac_table_key key = { partner->pon_id, ind->key.mac_address, ind->key.vlan };
+    bcmolt_gpon_iwf_mac_table_cfg cfg;
+
+    if (!global_cfg->mirror_mac_entries)
+    {
+        return BCM_ERR_OK; /* we are not configured to mirror MAC entries */
+    }
+
+    BCMOLT_CFG_INIT(&cfg, gpon_iwf_mac_table, key);
+    return bcmolt_cfg_clear(partner->device_id, &cfg.hdr);
+}
+
+static bcmos_errno ps_handle_mac_table_mac_move(
+    const bcmolt_ps_global_cfg *global_cfg,
+    const bcmolt_ps_pon *partner,
+    const bcmolt_gpon_iwf_mac_table_mac_move *ind)
+{
+    bcmolt_gpon_iwf_mac_table_key key = { partner->pon_id, ind->key.mac_address, ind->key.vlan };
+    bcmolt_gpon_iwf_mac_table_cfg cfg;
+
+    if (!global_cfg->mirror_mac_entries)
+    {
+        return BCM_ERR_OK; /* we are not configured to mirror MAC entries */
+    }
+
+    BCMOLT_CFG_INIT(&cfg, gpon_iwf_mac_table, key);
+    BCMOLT_CFG_PROP_SET(&cfg, gpon_iwf_mac_table, flow_id, ind->data.new_flow_id);
+    return bcmolt_cfg_set(partner->device_id, &cfg.hdr);
+}
+
+static bcmos_errno ps_handle_alloc_id_configuration_completed(
+    const bcmolt_ps_pon *partner,
+    const bcmolt_gpon_alloc_configuration_completed *ind)
+{
+    bcmolt_gpon_alloc_key key = { partner->pon_id, ind->key.alloc_id };
+    bcmolt_gpon_alloc_set_state oper;
+
+    BCMOLT_OPER_INIT(&oper, gpon_alloc, set_state, key);
+
+    if (ind->data.new_state == BCMOLT_ALLOC_STATE_ACTIVE)
+    {
+        /* don't react to unsuccessful activations */
+        if (ind->data.status != BCMOLT_RESULT_SUCCESS)
+        {
+            return BCM_ERR_OK;
+        }
+
+        PS_INFO("%s: activating <%d:%d> alloc %d\n", __FUNCTION__, partner->device_id, key.pon_ni, key.alloc_id);
+        BCMOLT_OPER_PROP_SET(&oper, gpon_alloc, set_state, state, BCMOLT_ALLOC_OPERATION_ACTIVATE);
+    }
+    else if (ind->data.new_state == BCMOLT_ALLOC_STATE_INACTIVE)
+    {
+        PS_INFO("%s: deactivating <%d:%d> alloc %d\n", __FUNCTION__, partner->device_id, key.pon_ni, key.alloc_id);
+        BCMOLT_OPER_PROP_SET(&oper, gpon_alloc, set_state, state, BCMOLT_ALLOC_OPERATION_DEACTIVATE);
+    }
+    else /* ind->data.new_state is something else (e.g. unprovisioned, if the alloc was cleared) */
+    {
+        return BCM_ERR_OK;
+    }
+
+    return bcmolt_oper_submit(partner->device_id, &oper.hdr);
+}
+
+static bcmos_errno ps_handle_gem_port_configuration_completed(
+    const bcmolt_ps_pon *partner,
+    const bcmolt_gpon_gem_port_configuration_completed *ind)
+{
+    bcmolt_gpon_gem_port_key key = { partner->pon_id, ind->key.gem_port_id };
+    bcmolt_gpon_gem_port_set_state oper;
+
+    BCMOLT_OPER_INIT(&oper, gpon_gem_port, set_state, key);
+
+    if (ind->data.new_state == BCMOLT_GPON_GEM_PORT_STATE_ACTIVE)
+    {
+        /* don't react to unsuccessful activations */
+        if (ind->data.status != BCMOLT_RESULT_SUCCESS)
+        {
+            return BCM_ERR_OK;
+        }
+
+        PS_INFO("%s: activating <%d:%d> GEM port ID %d\n", __FUNCTION__, partner->device_id, key.pon_ni, key.gem_port_id);
+        BCMOLT_OPER_PROP_SET(&oper, gpon_gem_port, set_state, state, BCMOLT_GEM_PORT_OPERATION_ACTIVATE);
+    }
+    else if (ind->data.new_state == BCMOLT_GPON_GEM_PORT_STATE_INACTIVE)
+    {
+        PS_INFO(
+            "%s: deactivating <%d:%d> GEM port ID %d\n",
+            __FUNCTION__,
+            partner->device_id,
+            key.pon_ni,
+            key.gem_port_id);
+        BCMOLT_OPER_PROP_SET(&oper, gpon_gem_port, set_state, state, BCMOLT_GEM_PORT_OPERATION_DEACTIVATE);
+    }
+    else /* ind->data.new_state is something else (e.g. unprovisioned, if the GEM port was cleared) */
+    {
+        return BCM_ERR_OK;
+    }
+
+    return bcmolt_oper_submit(partner->device_id, &oper.hdr);
+}
+
+bcmos_errno ps_process_ind_gpon(const bcmolt_ps_pon *pon, const bcmolt_auto *ind)
+{
+    bcmos_errno err;
+    bcmolt_ps_pon_state state;
+    bcmolt_ps_pon partner;
+    bcmolt_ps_global_cfg global_cfg;
+
+    err = bcmolt_ps_global_cfg_get(&global_cfg);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    if (global_cfg.mirror_mode != BCMOLT_PS_MIRROR_MODE_AUTO &&
+        ind->hdr.subgroup != BCMOLT_GPON_NI_AUTO_ID_LOS)
+    {
+        /* only handle most indications while in mirror mode 'auto', but perform a switchover on LoS in any case  */
+        return BCM_ERR_OK;
+    }
+
+    err = bcmolt_ps_pon_state_get(pon, &state, &partner);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    if (state != BCMOLT_PS_PON_STATE_WORKING)
+    {
+        return BCM_ERR_OK; /* ignore indications from PONs that aren't protected working */
+    }
+
+    switch (ind->hdr.obj_type)
+    {
+    case BCMOLT_OBJ_ID_GPON_NI:
+        switch (ind->hdr.subgroup)
+        {
+        case BCMOLT_GPON_NI_AUTO_ID_LOS:
+            return ps_handle_ni_los(&global_cfg, pon, ((const bcmolt_gpon_ni_los *)ind));
+        case BCMOLT_GPON_NI_AUTO_ID_STATE_CHANGE_COMPLETED:
+            return ps_handle_ni_state_changed(&partner, ((const bcmolt_gpon_ni_state_change_completed *)ind));
+        case BCMOLT_GPON_NI_AUTO_ID_PROTECTION_SWITCHING_TRAFFIC_RESUME:
+            return ps_handle_ni_traffic_resume(pon, ((const bcmolt_gpon_ni_protection_switching_traffic_resume *)ind));
+        case BCMOLT_GPON_NI_AUTO_ID_PROTECTION_SWITCHING_ONUS_RANGED:
+            return ps_handle_ni_onus_ranged(&partner, ((const bcmolt_gpon_ni_protection_switching_onus_ranged *)ind));
+        default:
+            return BCM_ERR_OK; /* silently ignore all other NI indications */
+        }
+
+    case BCMOLT_OBJ_ID_GPON_ONU:
+        switch (ind->hdr.subgroup)
+        {
+        case BCMOLT_GPON_ONU_AUTO_ID_RANGING_COMPLETED:
+            return ps_handle_onu_ranging_completed(&partner, ((const bcmolt_gpon_onu_ranging_completed *)ind));
+        case BCMOLT_GPON_ONU_AUTO_ID_KEY_EXCHANGE_COMPLETED:
+            return ps_handle_onu_key_exchange_completed(
+                &partner,
+                ((const bcmolt_gpon_onu_key_exchange_completed *)ind));
+        case BCMOLT_GPON_ONU_AUTO_ID_PASSWORD_AUTHENTICATION_COMPLETED:
+            return ps_handle_onu_password_authentication_completed(
+                &partner,
+                ((const bcmolt_gpon_onu_password_authentication_completed *)ind));
+        case BCMOLT_GPON_ONU_AUTO_ID_ONU_ACTIVATION_COMPLETED:
+            return ps_handle_onu_activation_completed(
+                &partner,
+                ((const bcmolt_gpon_onu_onu_activation_completed *)ind));
+        case BCMOLT_GPON_ONU_AUTO_ID_ONU_DEACTIVATION_COMPLETED:
+            return ps_handle_onu_deactivation_completed(
+                &partner,
+                ((const bcmolt_gpon_onu_onu_deactivation_completed *)ind));
+        case BCMOLT_GPON_ONU_AUTO_ID_ONU_ENABLE_COMPLETED:
+            return ps_handle_onu_enable_completed(&partner, ((const bcmolt_gpon_onu_onu_enable_completed *)ind));
+        case BCMOLT_GPON_ONU_AUTO_ID_ONU_DISABLE_COMPLETED:
+            return ps_handle_onu_disable_completed(&partner, ((const bcmolt_gpon_onu_onu_disable_completed *)ind));
+        case BCMOLT_GPON_ONU_AUTO_ID_ONU_ALARM:
+            return ps_handle_onu_alarm(&partner, ((const bcmolt_gpon_onu_onu_alarm *)ind));
+        case BCMOLT_GPON_ONU_AUTO_ID_DOWI:
+            return ps_handle_onu_dowi(&partner, ((const bcmolt_gpon_onu_dowi *)ind));
+        case BCMOLT_GPON_ONU_AUTO_ID_SFI:
+            return ps_handle_onu_sfi(&partner, ((const bcmolt_gpon_onu_sfi *)ind));
+        case BCMOLT_GPON_ONU_AUTO_ID_SDI:
+            return ps_handle_onu_sdi(&partner, ((const bcmolt_gpon_onu_sdi *)ind));
+        case BCMOLT_GPON_ONU_AUTO_ID_DFI:
+            return ps_handle_onu_dfi(&partner, ((const bcmolt_gpon_onu_dfi *)ind));
+        case BCMOLT_GPON_ONU_AUTO_ID_SUFI:
+            return ps_handle_onu_sufi(&partner, ((const bcmolt_gpon_onu_sufi *)ind));
+        case BCMOLT_GPON_ONU_AUTO_ID_LOAI:
+            return ps_handle_onu_loai(&partner, ((const bcmolt_gpon_onu_loai *)ind));
+        case BCMOLT_GPON_ONU_AUTO_ID_DGI:
+            return ps_handle_onu_dgi(&partner, ((const bcmolt_gpon_onu_dgi *)ind));
+        case BCMOLT_GPON_ONU_AUTO_ID_TIWI:
+            return ps_handle_onu_tiwi(&partner, ((const bcmolt_gpon_onu_tiwi *)ind));
+        case BCMOLT_GPON_ONU_AUTO_ID_LOKI:
+            return ps_handle_onu_loki(&partner, ((const bcmolt_gpon_onu_loki *)ind));
+        case BCMOLT_GPON_ONU_AUTO_ID_OMCI_PORT_ID_CONFIGURATION_COMPLETED:
+            return ps_handle_onu_omci_port_configuration_completed(
+                &partner,
+                ((const bcmolt_gpon_onu_omci_port_id_configuration_completed *)ind));
+        default:
+            return BCM_ERR_OK; /* silently ignore all other ONU indications */
+        }
+
+    case BCMOLT_OBJ_ID_GPON_ALLOC:
+        switch (ind->hdr.subgroup)
+        {
+        case BCMOLT_GPON_ALLOC_AUTO_ID_CONFIGURATION_COMPLETED:
+            return ps_handle_alloc_id_configuration_completed(
+                &partner,
+                ((const bcmolt_gpon_alloc_configuration_completed *)ind));
+        default:
+            return BCM_ERR_OK; /* silently ignore all other alloc indications */
+        }
+
+    case BCMOLT_OBJ_ID_GPON_GEM_PORT:
+        switch (ind->hdr.subgroup)
+        {
+        case BCMOLT_GPON_GEM_PORT_AUTO_ID_CONFIGURATION_COMPLETED:
+            return ps_handle_gem_port_configuration_completed(
+                &partner,
+                ((const bcmolt_gpon_gem_port_configuration_completed *)ind));
+        default:
+            return BCM_ERR_OK; /* silently ignore all other GEM port indications */
+        }
+
+    case BCMOLT_OBJ_ID_GPON_IWF_MAC_TABLE:
+        switch (ind->hdr.subgroup)
+        {
+        case BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID_NEW_MAC:
+            return ps_handle_mac_table_new_mac(
+                &global_cfg,
+                &partner,
+                (const bcmolt_gpon_iwf_mac_table_new_mac *)ind);
+        case BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID_MAC_AGED:
+            return ps_handle_mac_table_mac_aged(
+                &global_cfg,
+                &partner,
+                (const bcmolt_gpon_iwf_mac_table_mac_aged *)ind);
+        case BCMOLT_GPON_IWF_MAC_TABLE_AUTO_CFG_ID_MAC_MOVE:
+            return ps_handle_mac_table_mac_move(
+                &global_cfg, 
+                &partner,
+                (const bcmolt_gpon_iwf_mac_table_mac_move *)ind);
+        default:
+            return BCM_ERR_OK; /* silently ignore all other mac table indications */
+        }
+
+    default:
+        return BCM_ERR_NOT_SUPPORTED; /* someone else needs to handle this indication */
+    }
+}
+
+bcmos_errno ps_move_to_standby_gpon(const bcmolt_ps_pon *pon)
+{
+    bcmolt_gpon_ni_set_pon_state set_pon_state;
+    bcmolt_gpon_ni_key key = { (bcmolt_gpon_ni)pon->pon_id };
+
+    BCMOLT_OPER_INIT(&set_pon_state, gpon_ni, set_pon_state, key);
+    BCMOLT_OPER_PROP_SET(&set_pon_state, gpon_ni, set_pon_state, pon_state, BCMOLT_PON_OPERATION_ACTIVE_STANDBY);
+    return bcmolt_oper_submit(pon->device_id, &set_pon_state.hdr);
+}
+
+bcmos_errno ps_move_to_working_gpon(const bcmolt_ps_pon *pon)
+{
+    bcmolt_gpon_ni_set_pon_state set_pon_state;
+    bcmolt_gpon_ni_key key = { (bcmolt_gpon_ni)pon->pon_id };
+
+    BCMOLT_OPER_INIT(&set_pon_state, gpon_ni, set_pon_state, key);
+    BCMOLT_OPER_PROP_SET(&set_pon_state, gpon_ni, set_pon_state, pon_state, BCMOLT_PON_OPERATION_ACTIVE_WORKING);
+    return bcmolt_oper_submit(pon->device_id, &set_pon_state.hdr);
+}
diff --git a/bcm68620_release/release/host_reference/user_appl/protection_switching/bcmolt_user_appl_ps_internal.h b/bcm68620_release/release/host_reference/user_appl/protection_switching/bcmolt_user_appl_ps_internal.h
new file mode 100644
index 0000000..7c3f7d1
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/protection_switching/bcmolt_user_appl_ps_internal.h
@@ -0,0 +1,66 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+*/
+
+/* This file is for internal use within the protection switching user application -
+   no functions here should be called from anywhere else! */
+
+#ifndef _BCMOLT_USER_APPL_PS_INTERNAL_H_
+#define _BCMOLT_USER_APPL_PS_INTERNAL_H_
+
+#include <bcm_dev_log.h>
+#include "bcmolt_user_appl_ps.h"
+
+#ifdef ENABLE_LOG
+dev_log_id ps_get_log_id(void);
+#define PS_ERR(...) BCM_LOG(ERROR, ps_get_log_id(), __VA_ARGS__)
+#define PS_INFO(...) BCM_LOG(INFO, ps_get_log_id(), __VA_ARGS__)
+#else
+#define PS_ERR(...) bcmos_printf("[PS ERROR] " __VA_ARGS__)
+#define PS_INFO(...) bcmos_printf("[PS INFO] " __VA_ARGS__)
+#endif
+
+/* Helper functions */
+uint32_t ps_get_last_switch_start_time_us(void);
+
+/* GPON-specific functionality */
+bcmos_errno ps_process_ind_gpon(const bcmolt_ps_pon *pon, const bcmolt_auto *ind);
+bcmos_errno ps_move_to_standby_gpon(const bcmolt_ps_pon *pon);
+bcmos_errno ps_move_to_working_gpon(const bcmolt_ps_pon *pon);
+
+/* EPON-specific functionality */
+bcmos_errno ps_process_ind_epon(const bcmolt_ps_pon *pon, const bcmolt_auto *ind);
+bcmos_errno ps_move_to_standby_epon(const bcmolt_ps_pon *pon);
+bcmos_errno ps_move_to_working_epon(const bcmolt_ps_pon *pon);
+
+/* XGPON-specific functionality */
+bcmos_errno ps_process_ind_xgpon(const bcmolt_ps_pon *pon, const bcmolt_auto *ind);
+bcmos_errno ps_move_to_standby_xgpon(const bcmolt_ps_pon *pon);
+bcmos_errno ps_move_to_working_xgpon(const bcmolt_ps_pon *pon);
+
+#endif
diff --git a/bcm68620_release/release/host_reference/user_appl/protection_switching/bcmolt_user_appl_ps_xgpon.c b/bcm68620_release/release/host_reference/user_appl/protection_switching/bcmolt_user_appl_ps_xgpon.c
new file mode 100644
index 0000000..faa167a
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/protection_switching/bcmolt_user_appl_ps_xgpon.c
@@ -0,0 +1,655 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+*/
+
+#include <bcmolt_host_api.h>
+#include "bcmolt_user_appl_ps.h"
+#include "bcmolt_user_appl_ps_internal.h"
+
+static bcmos_errno ps_handle_ni_los(
+    const bcmolt_ps_global_cfg *global_cfg,
+    const bcmolt_ps_pon *pon,
+    const bcmolt_xgpon_ni_los *ind)
+{
+    if (ind->data.status == BCMOLT_STATUS_OFF)
+    {
+        PS_INFO("<%d:%d> LoS alarm cleared\n", pon->device_id, pon->pon_id);
+        return BCM_ERR_OK;
+    }
+
+    PS_INFO("<%d:%d> LoS alarm raised\n", pon->device_id, pon->pon_id);
+
+    if (global_cfg->switch_condition == BCMOLT_PS_SWITCH_CONDITION_MANUAL)
+    {
+        /* don't react to the switch if we're in manual switch mode */
+        return BCM_ERR_OK;
+    }
+    else
+    {
+        return bcmolt_ps_switch_perform(pon);
+    }
+}
+
+static bcmos_errno ps_handle_ni_state_changed(
+    const bcmolt_ps_pon *partner,
+    const bcmolt_xgpon_ni_state_change_completed *ind)
+{
+    bcmolt_xgpon_ni_key key = { partner->pon_id };
+    bcmolt_xgpon_ni_set_pon_state oper;
+
+    BCMOLT_OPER_INIT(&oper, xgpon_ni, set_pon_state, key);
+
+    if (ind->data.previous_state == BCMOLT_PON_STATE_INACTIVE &&
+        ind->data.new_state == BCMOLT_PON_STATE_ACTIVE_WORKING)
+    {
+        PS_INFO("%s: activating PON <%d:%d>\n", __FUNCTION__, partner->device_id, key.pon_ni);
+        BCMOLT_OPER_PROP_SET(&oper, xgpon_ni, set_pon_state, pon_state, BCMOLT_PON_OPERATION_ACTIVE_STANDBY);
+    }
+    else if (ind->data.previous_state == BCMOLT_PON_STATE_ACTIVE_WORKING &&
+        ind->data.new_state == BCMOLT_PON_STATE_INACTIVE)
+    {
+        PS_INFO("%s: deactivating PON <%d:%d>\n", __FUNCTION__, partner->device_id, key.pon_ni);
+        BCMOLT_OPER_PROP_SET(&oper, xgpon_ni, set_pon_state, pon_state, BCMOLT_PON_OPERATION_INACTIVE);
+    }
+    else
+    {
+        /* only change the standby PON's state if we're pre-provisioning the working PON
+          (the switchover is handled separately) */
+        return BCM_ERR_OK;
+    }
+
+    return bcmolt_oper_submit(partner->device_id, &oper.hdr);
+}
+
+static bcmos_errno ps_handle_ni_traffic_resume(
+    const bcmolt_ps_pon *pon,
+    const bcmolt_xgpon_ni_protection_switching_traffic_resume *ind)
+{
+    uint32_t after_us  = bcmos_timestamp();
+    uint32_t before_us = ps_get_last_switch_start_time_us();
+    uint32_t time_taken_us = (after_us > before_us) ? after_us - before_us : before_us - after_us;
+    const char *traffic_resume_result_str = NULL;
+
+    switch (ind->data.result)
+    {
+    case BCMOLT_TRAFFIC_RESUME_RESULT_SUCCESS:
+        traffic_resume_result_str = "success";
+        break;
+    case BCMOLT_TRAFFIC_RESUME_RESULT_FAILURE:
+        traffic_resume_result_str = "failure";
+        break;
+    case BCMOLT_TRAFFIC_RESUME_RESULT_SUSPECTED_LOS:
+        traffic_resume_result_str = "suspected_los";
+        break;
+    default:
+        break;
+    }
+
+    PS_INFO(
+        "<%d:%d> Traffic resume %s. Time since start of switch: %d ms.\n",
+        pon->device_id,
+        pon->pon_id,
+        traffic_resume_result_str,
+        time_taken_us / 1000);
+
+    return BCM_ERR_OK;
+}
+
+static bcmos_errno ps_handle_ni_onus_ranged(
+    const bcmolt_ps_pon *partner,
+    const bcmolt_xgpon_ni_protection_switching_onus_ranged *ind)
+{
+    uint32_t i;
+    bcmos_errno last_err = BCM_ERR_OK;
+
+    /* apply all of the new ONU EQDs to the standby PON */
+    for (i = 0; i < ind->data.onus.len; i++)
+    {
+        bcmolt_xgpon_onu_key key = { partner->pon_id, ind->data.onus.val[i].onu_id };
+        bcmolt_xgpon_onu_cfg cfg;
+        bcmos_errno err;
+
+        PS_INFO(
+            "%s: updating EQD <%d:%d> ONU %d -> %d\n",
+            __FUNCTION__,
+            partner->device_id,
+            key.pon_ni,
+            key.onu_id,
+            ind->data.onus.val[i].eqd);
+
+        BCMOLT_CFG_INIT(&cfg, xgpon_onu, key);
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, ranging_time, ind->data.onus.val[i].eqd);
+        err = bcmolt_cfg_set(partner->device_id, &cfg.hdr);
+        if (err != BCM_ERR_OK)
+        {
+            PS_ERR("EQD update failed: %s\n", bcmos_strerror(err));
+            last_err = err;
+        }
+    }
+
+    return last_err;
+}
+
+static bcmos_errno ps_handle_onu_ranging_completed(
+    const bcmolt_ps_pon *partner,
+    const bcmolt_xgpon_onu_ranging_completed *ind)
+{
+    bcmolt_xgpon_onu_key key = { partner->pon_id, ind->key.onu_id };
+    bcmolt_xgpon_onu_cfg cfg;
+
+    /* only react to success indications */
+    if (ind->data.status != BCMOLT_RESULT_SUCCESS)
+    {
+        return BCM_ERR_OK;
+    }
+
+    PS_INFO(
+        "%s: updating EQD <%d:%d> ONU %d -> %d\n",
+        __FUNCTION__,
+        partner->device_id,
+        key.pon_ni,
+        key.onu_id,
+        ind->data.eqd);
+
+    BCMOLT_CFG_INIT(&cfg, xgpon_onu, key);
+    BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, ranging_time, ind->data.eqd);
+    return bcmolt_cfg_set(partner->device_id, &cfg.hdr);
+}
+
+static bcmos_errno ps_handle_onu_key_exchange_completed(
+    const bcmolt_ps_pon *pon,
+    const bcmolt_ps_pon *partner,
+    const bcmolt_xgpon_onu_key_exchange_completed *ind)
+{
+    bcmolt_xgpon_onu_key key = { partner->pon_id, ind->key.onu_id };
+    bcmolt_xgpon_onu_cfg cfg;
+
+    PS_INFO("%s: updating AES key <%d:%d> ONU %d\n", __FUNCTION__, partner->device_id, key.pon_ni, key.onu_id);
+
+    BCMOLT_CFG_INIT(&cfg, xgpon_onu, key);
+    BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, current_encryption_key, ind->data.new_key);
+    return bcmolt_cfg_set(pon->device_id, &cfg.hdr);
+}
+
+static bcmos_errno ps_handle_onu_activation_completed(
+    const bcmolt_ps_pon *pon,
+    const bcmolt_ps_pon *partner,
+    const bcmolt_xgpon_onu_onu_activation_completed *ind)
+{
+    bcmolt_xgpon_onu_key key = { partner->pon_id, ind->key.onu_id };
+    bcmolt_xgpon_onu_cfg cfg;
+    bcmolt_xgpon_onu_set_onu_state oper;
+    bcmos_errno err;
+
+    /* only react to success indications */
+    if (ind->data.status != BCMOLT_RESULT_SUCCESS)
+    {
+        return BCM_ERR_OK;
+    }
+
+    PS_INFO(
+        "%s: provisioning registration ID / keys for newly-activated ONU <%d:%d> ONU %d\n",
+        __FUNCTION__,
+        partner->device_id,
+        key.pon_ni,
+        key.onu_id);
+
+    BCMOLT_CFG_INIT(&cfg, xgpon_onu, key);
+    BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, registration_id, ind->data.registration_id);
+    BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, registration_encryption_keys, ind->data.registration_encryption_keys);
+    err = bcmolt_cfg_set(partner->device_id, &cfg.hdr);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    PS_INFO("%s: activating <%d:%d> ONU %d\n", __FUNCTION__, partner->device_id, key.pon_ni, key.onu_id);
+
+    BCMOLT_OPER_INIT(&oper, xgpon_onu, set_onu_state, key);
+    BCMOLT_OPER_PROP_SET(&oper, xgpon_onu, set_onu_state, onu_state, BCMOLT_ONU_OPERATION_ACTIVE);
+    return bcmolt_oper_submit(partner->device_id, &oper.hdr);
+}
+
+static bcmos_errno ps_handle_onu_deactivation_completed(
+    const bcmolt_ps_pon *partner,
+    const bcmolt_xgpon_onu_onu_deactivation_completed *ind)
+{
+    bcmolt_xgpon_onu_key key = { partner->pon_id, ind->key.onu_id };
+    bcmolt_xgpon_onu_set_onu_state oper;
+
+    /* Note: we react to this indication whether or not the deactivation was successful.  Failure indicates that the
+     * ONU didn't respond to the deactivation, but we still remove the ONU from OLT hardware so it must be mirrored. */
+
+    PS_INFO("%s: deactivating <%d:%d> ONU %d\n", __FUNCTION__, partner->device_id, key.pon_ni, key.onu_id);
+
+    BCMOLT_OPER_INIT(&oper, xgpon_onu, set_onu_state, key);
+    BCMOLT_OPER_PROP_SET(&oper, xgpon_onu, set_onu_state, onu_state, BCMOLT_ONU_OPERATION_INACTIVE);
+    return bcmolt_oper_submit(partner->device_id, &oper.hdr);
+}
+
+static bcmos_errno ps_handle_onu_enable_completed(
+    const bcmolt_ps_pon *partner,
+    const bcmolt_xgpon_onu_onu_enable_completed *ind)
+{
+    bcmolt_xgpon_onu_key key = { partner->pon_id, ind->key.onu_id };
+    bcmolt_xgpon_onu_set_onu_state oper;
+
+    /* don't try to mirror broadcast enable/disable */
+    if (key.onu_id == BCMOLT_XGPON_ONU_ID_INVALID)
+    {
+        return BCM_ERR_OK;
+    }
+
+    PS_INFO("%s: enabling <%d:%d> ONU %d\n", __FUNCTION__, partner->device_id, key.pon_ni, key.onu_id);
+
+    BCMOLT_OPER_INIT(&oper, xgpon_onu, set_onu_state, key);
+    BCMOLT_OPER_PROP_SET(&oper, xgpon_onu, set_onu_state, onu_state, BCMOLT_ONU_OPERATION_ENABLE);
+    return bcmolt_oper_submit(partner->device_id, &oper.hdr);
+}
+
+static bcmos_errno ps_handle_onu_disable_completed(
+    const bcmolt_ps_pon *partner,
+    const bcmolt_xgpon_onu_onu_disable_completed *ind)
+{
+    bcmolt_xgpon_onu_key key = { partner->pon_id, ind->key.onu_id };
+    bcmolt_xgpon_onu_set_onu_state oper;
+
+    /* don't try to mirror broadcast enable/disable */
+    if (key.onu_id == BCMOLT_XGPON_ONU_ID_INVALID)
+    {
+        return BCM_ERR_OK;
+    }
+
+    PS_INFO("%s: disabling <%d:%d> ONU %d\n", __FUNCTION__, partner->device_id, key.pon_ni, key.onu_id);
+
+    BCMOLT_OPER_INIT(&oper, xgpon_onu, set_onu_state, key);
+    BCMOLT_OPER_PROP_SET(&oper, xgpon_onu, set_onu_state, onu_state, BCMOLT_ONU_OPERATION_DISABLE);
+    return bcmolt_oper_submit(partner->device_id, &oper.hdr);
+}
+
+static void ps_alarm_state_init(bcmolt_xgpon_onu_alarm_state *alarm_state)
+{
+    alarm_state->losi = BCMOLT_STATUS_NO_CHANGE;
+    alarm_state->lobi = BCMOLT_STATUS_NO_CHANGE;
+    alarm_state->lopci = BCMOLT_STATUS_NO_CHANGE;
+    alarm_state->lopci_mic_error = BCMOLT_STATUS_NO_CHANGE;
+    alarm_state->looci = BCMOLT_STATUS_NO_CHANGE;
+    alarm_state->tiwi = BCMOLT_STATUS_NO_CHANGE;
+    alarm_state->dowi = BCMOLT_STATUS_NO_CHANGE;
+    alarm_state->sufi = BCMOLT_STATUS_NO_CHANGE;
+    alarm_state->sfi = BCMOLT_STATUS_NO_CHANGE;
+    alarm_state->sdi = BCMOLT_STATUS_NO_CHANGE;
+    alarm_state->dfi = BCMOLT_STATUS_NO_CHANGE;
+    alarm_state->dgi = BCMOLT_STATUS_NO_CHANGE;
+    alarm_state->pqsi = BCMOLT_STATUS_NO_CHANGE;
+}
+
+static bcmos_errno ps_handle_onu_alarm(const bcmolt_ps_pon *partner, const bcmolt_xgpon_onu_onu_alarm *ind)
+{
+    bcmolt_xgpon_onu_key key = { partner->pon_id, ind->key.onu_id };
+    bcmolt_xgpon_onu_cfg cfg;
+    bcmolt_xgpon_onu_alarm_state alarm_state;
+
+    ps_alarm_state_init(&alarm_state);
+    alarm_state.losi = ind->data.onu_alarm.losi;
+    alarm_state.lobi = ind->data.onu_alarm.lobi;
+    alarm_state.lopci = ind->data.onu_alarm.lopci_miss;
+    alarm_state.lopci_mic_error = ind->data.onu_alarm.lopci_mic_error;
+
+    PS_INFO(
+        "%s: updating ONU alarms <%d:%d> ONU %d\n",
+        __FUNCTION__,
+        partner->device_id,
+        key.pon_ni,
+        key.onu_id);
+
+    BCMOLT_CFG_INIT(&cfg, xgpon_onu, key);
+    BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, alarm_state, alarm_state);
+    return bcmolt_cfg_set(partner->device_id, &cfg.hdr);
+}
+
+static bcmos_errno ps_handle_onu_dowi(const bcmolt_ps_pon *partner, const bcmolt_xgpon_onu_dowi *ind)
+{
+    bcmolt_xgpon_onu_key key = { partner->pon_id, ind->key.onu_id };
+    bcmolt_xgpon_onu_cfg cfg;
+    bcmolt_xgpon_onu_alarm_state alarm_state;
+
+    PS_INFO(
+        "%s: updating DOWi <%d:%d> ONU %d -> %d (EQD %d)\n",
+        __FUNCTION__,
+        partner->device_id,
+        key.pon_ni,
+        key.onu_id,
+        ind->data.alarm_status,
+        ind->data.new_eqd);
+
+    ps_alarm_state_init(&alarm_state);
+    alarm_state.dowi = ind->data.alarm_status;
+
+    BCMOLT_CFG_INIT(&cfg, xgpon_onu, key);
+    BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, alarm_state, alarm_state);
+
+    if (ind->data.alarm_status == BCMOLT_STATUS_ON)
+    {
+        BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, ranging_time, ind->data.new_eqd);
+    }
+
+    return bcmolt_cfg_set(partner->device_id, &cfg.hdr);
+}
+
+static bcmos_errno ps_handle_onu_sfi(const bcmolt_ps_pon *partner, const bcmolt_xgpon_onu_sfi *ind)
+{
+    bcmolt_xgpon_onu_key key = { partner->pon_id, ind->key.onu_id };
+    bcmolt_xgpon_onu_cfg cfg;
+    bcmolt_xgpon_onu_alarm_state alarm_state;
+
+    PS_INFO(
+        "%s: updating SFI <%d:%d> ONU %d -> %d\n",
+        __FUNCTION__,
+        partner->device_id,
+        key.pon_ni,
+        key.onu_id,
+        ind->data.alarm_status);
+
+    ps_alarm_state_init(&alarm_state);
+    alarm_state.sfi = ind->data.alarm_status;
+
+    BCMOLT_CFG_INIT(&cfg, xgpon_onu, key);
+    BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, alarm_state, alarm_state);
+    return bcmolt_cfg_set(partner->device_id, &cfg.hdr);
+}
+
+static bcmos_errno ps_handle_onu_sdi(const bcmolt_ps_pon *partner, const bcmolt_xgpon_onu_sdi *ind)
+{
+    bcmolt_xgpon_onu_key key = { partner->pon_id, ind->key.onu_id };
+    bcmolt_xgpon_onu_cfg cfg;
+    bcmolt_xgpon_onu_alarm_state alarm_state;
+
+    PS_INFO(
+        "%s: updating SDi <%d:%d> ONU %d -> %d\n",
+        __FUNCTION__,
+        partner->device_id,
+        key.pon_ni,
+        key.onu_id,
+        ind->data.alarm_status);
+
+    ps_alarm_state_init(&alarm_state);
+    alarm_state.sdi = ind->data.alarm_status;
+
+    BCMOLT_CFG_INIT(&cfg, xgpon_onu, key);
+    BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, alarm_state, alarm_state);
+    return bcmolt_cfg_set(partner->device_id, &cfg.hdr);
+}
+
+static bcmos_errno ps_handle_onu_dfi(const bcmolt_ps_pon *partner, const bcmolt_xgpon_onu_dfi *ind)
+{
+    bcmolt_xgpon_onu_key key = { partner->pon_id, ind->key.onu_id };
+    bcmolt_xgpon_onu_cfg cfg;
+    bcmolt_xgpon_onu_alarm_state alarm_state;
+
+    PS_INFO(
+        "%s: updating DFi <%d:%d> ONU %d -> %d\n",
+        __FUNCTION__,
+        partner->device_id,
+        key.pon_ni,
+        key.onu_id,
+        ind->data.alarm_status);
+
+    ps_alarm_state_init(&alarm_state);
+    alarm_state.dfi = ind->data.alarm_status;
+
+    BCMOLT_CFG_INIT(&cfg, xgpon_onu, key);
+    BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, alarm_state, alarm_state);
+    return bcmolt_cfg_set(partner->device_id, &cfg.hdr);
+}
+
+static bcmos_errno ps_handle_onu_sufi(const bcmolt_ps_pon *partner, const bcmolt_xgpon_onu_sufi *ind)
+{
+    bcmolt_xgpon_onu_key key = { partner->pon_id, ind->key.onu_id };
+    bcmolt_xgpon_onu_cfg cfg;
+    bcmolt_xgpon_onu_alarm_state alarm_state;
+
+    PS_INFO(
+        "%s: updating SUFi <%d:%d> ONU %d -> %d\n",
+        __FUNCTION__,
+        partner->device_id,
+        key.pon_ni,
+        key.onu_id,
+        ind->data.alarm_status);
+
+    ps_alarm_state_init(&alarm_state);
+    alarm_state.sufi = ind->data.alarm_status;
+
+    BCMOLT_CFG_INIT(&cfg, xgpon_onu, key);
+    BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, alarm_state, alarm_state);
+    return bcmolt_cfg_set(partner->device_id, &cfg.hdr);
+}
+
+static bcmos_errno ps_handle_onu_tiwi(const bcmolt_ps_pon *partner, const bcmolt_xgpon_onu_tiwi *ind)
+{
+    bcmolt_xgpon_onu_key key = { partner->pon_id, ind->key.onu_id };
+    bcmolt_xgpon_onu_cfg cfg;
+    bcmolt_xgpon_onu_alarm_state alarm_state;
+
+    PS_INFO(
+        "%s: updating TIWi <%d:%d> ONU %d -> %d\n",
+        __FUNCTION__,
+        partner->device_id,
+        key.pon_ni,
+        key.onu_id,
+        ind->data.alarm_status);
+
+    ps_alarm_state_init(&alarm_state);
+    alarm_state.tiwi = ind->data.alarm_status;
+
+    BCMOLT_CFG_INIT(&cfg, xgpon_onu, key);
+    BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, alarm_state, alarm_state);
+    return bcmolt_cfg_set(partner->device_id, &cfg.hdr);
+}
+
+static bcmos_errno ps_handle_onu_looci(const bcmolt_ps_pon *partner, const bcmolt_xgpon_onu_looci *ind)
+{
+    bcmolt_xgpon_onu_key key = { partner->pon_id, ind->key.onu_id };
+    bcmolt_xgpon_onu_cfg cfg;
+    bcmolt_xgpon_onu_alarm_state alarm_state;
+
+    PS_INFO(
+        "%s: updating LOOCi <%d:%d> ONU %d -> %d\n",
+        __FUNCTION__,
+        partner->device_id,
+        key.pon_ni,
+        key.onu_id,
+        ind->data.alarm_status);
+
+    ps_alarm_state_init(&alarm_state);
+    alarm_state.looci = ind->data.alarm_status;
+
+    BCMOLT_CFG_INIT(&cfg, xgpon_onu, key);
+    BCMOLT_CFG_PROP_SET(&cfg, xgpon_onu, alarm_state, alarm_state);
+    return bcmolt_cfg_set(partner->device_id, &cfg.hdr);
+}
+
+static bcmos_errno ps_handle_alloc_id_configuration_completed(
+    const bcmolt_ps_pon *partner,
+    const bcmolt_xgpon_alloc_configuration_completed *ind)
+{
+    bcmolt_xgpon_alloc_key key = { partner->pon_id, ind->key.alloc_id };
+    bcmolt_xgpon_alloc_set_state oper;
+
+    BCMOLT_OPER_INIT(&oper, xgpon_alloc, set_state, key);
+
+    if (ind->data.new_state == BCMOLT_ALLOC_STATE_ACTIVE)
+    {
+        /* only react to success indications */
+        if (ind->data.status != BCMOLT_RESULT_SUCCESS)
+        {
+            return BCM_ERR_OK;
+        }
+
+        PS_INFO("%s: activating <%d:%d> alloc %d\n", __FUNCTION__, partner->device_id, key.pon_ni, key.alloc_id);
+        BCMOLT_OPER_PROP_SET(&oper, xgpon_alloc, set_state, state, BCMOLT_ALLOC_OPERATION_ACTIVATE);
+    }
+    else if (ind->data.new_state == BCMOLT_ALLOC_STATE_INACTIVE)
+    {
+        PS_INFO("%s: deactivating <%d:%d> alloc %d\n", __FUNCTION__, partner->device_id, key.pon_ni, key.alloc_id);
+        BCMOLT_OPER_PROP_SET(&oper, xgpon_alloc, set_state, state, BCMOLT_ALLOC_OPERATION_DEACTIVATE);
+    }
+    else /* ind->data.new_state is something else (e.g. unprovisioned, if the alloc was cleared) */
+    {
+        return BCM_ERR_OK;
+    }
+
+    return bcmolt_oper_submit(partner->device_id, &oper.hdr);
+}
+
+bcmos_errno ps_process_ind_xgpon(const bcmolt_ps_pon *pon, const bcmolt_auto *ind)
+{
+    bcmos_errno err;
+    bcmolt_ps_pon_state state;
+    bcmolt_ps_pon partner;
+    bcmolt_ps_global_cfg global_cfg;
+
+    err = bcmolt_ps_global_cfg_get(&global_cfg);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    if (global_cfg.mirror_mode != BCMOLT_PS_MIRROR_MODE_AUTO &&
+        ind->hdr.subgroup != BCMOLT_XGPON_NI_AUTO_ID_LOS)
+    {
+        /* only handle most indications while in mirror mode 'auto', but perform a switchover on LoS in any case  */
+        return BCM_ERR_OK;
+    }
+
+    err = bcmolt_ps_pon_state_get(pon, &state, &partner);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    if (state != BCMOLT_PS_PON_STATE_WORKING)
+    {
+        return BCM_ERR_OK; /* ignore indications from PONs that aren't protected working */
+    }
+
+    switch (ind->hdr.obj_type)
+    {
+    case BCMOLT_OBJ_ID_XGPON_NI:
+        switch (ind->hdr.subgroup)
+        {
+        case BCMOLT_XGPON_NI_AUTO_ID_LOS:
+            return ps_handle_ni_los(&global_cfg, pon, ((const bcmolt_xgpon_ni_los *)ind));
+        case BCMOLT_XGPON_NI_AUTO_ID_STATE_CHANGE_COMPLETED:
+            return ps_handle_ni_state_changed(&partner, ((const bcmolt_xgpon_ni_state_change_completed *)ind));
+        case BCMOLT_XGPON_NI_AUTO_ID_PROTECTION_SWITCHING_TRAFFIC_RESUME:
+            return ps_handle_ni_traffic_resume(pon, ((const bcmolt_xgpon_ni_protection_switching_traffic_resume *)ind));
+        case BCMOLT_XGPON_NI_AUTO_ID_PROTECTION_SWITCHING_ONUS_RANGED:
+            return ps_handle_ni_onus_ranged(&partner, ((const bcmolt_xgpon_ni_protection_switching_onus_ranged *)ind));
+        default:
+            return BCM_ERR_OK; /* silently ignore all other NI indications */
+        }
+
+    case BCMOLT_OBJ_ID_XGPON_ONU:
+        switch (ind->hdr.subgroup)
+        {
+        case BCMOLT_XGPON_ONU_AUTO_ID_RANGING_COMPLETED:
+            return ps_handle_onu_ranging_completed(&partner, ((const bcmolt_xgpon_onu_ranging_completed *)ind));
+        case BCMOLT_XGPON_ONU_AUTO_ID_KEY_EXCHANGE_COMPLETED:
+            return ps_handle_onu_key_exchange_completed(
+                pon,
+                &partner,
+                ((const bcmolt_xgpon_onu_key_exchange_completed *)ind));
+        case BCMOLT_XGPON_ONU_AUTO_ID_ONU_ACTIVATION_COMPLETED:
+            return ps_handle_onu_activation_completed(
+                pon,
+                &partner,
+                ((const bcmolt_xgpon_onu_onu_activation_completed *)ind));
+        case BCMOLT_XGPON_ONU_AUTO_ID_ONU_DEACTIVATION_COMPLETED:
+            return ps_handle_onu_deactivation_completed(
+                &partner,
+                ((const bcmolt_xgpon_onu_onu_deactivation_completed *)ind));
+        case BCMOLT_XGPON_ONU_AUTO_ID_ONU_ENABLE_COMPLETED:
+            return ps_handle_onu_enable_completed(&partner, ((const bcmolt_xgpon_onu_onu_enable_completed *)ind));
+        case BCMOLT_XGPON_ONU_AUTO_ID_ONU_DISABLE_COMPLETED:
+            return ps_handle_onu_disable_completed(&partner, ((const bcmolt_xgpon_onu_onu_disable_completed *)ind));
+        case BCMOLT_XGPON_ONU_AUTO_ID_ONU_ALARM:
+            return ps_handle_onu_alarm(&partner, ((const bcmolt_xgpon_onu_onu_alarm *)ind));
+        case BCMOLT_XGPON_ONU_AUTO_ID_DOWI:
+            return ps_handle_onu_dowi(&partner, ((const bcmolt_xgpon_onu_dowi *)ind));
+        case BCMOLT_XGPON_ONU_AUTO_ID_SFI:
+            return ps_handle_onu_sfi(&partner, ((const bcmolt_xgpon_onu_sfi *)ind));
+        case BCMOLT_XGPON_ONU_AUTO_ID_SDI:
+            return ps_handle_onu_sdi(&partner, ((const bcmolt_xgpon_onu_sdi *)ind));
+        case BCMOLT_XGPON_ONU_AUTO_ID_DFI:
+            return ps_handle_onu_dfi(&partner, ((const bcmolt_xgpon_onu_dfi *)ind));
+        case BCMOLT_XGPON_ONU_AUTO_ID_SUFI:
+            return ps_handle_onu_sufi(&partner, ((const bcmolt_xgpon_onu_sufi *)ind));
+        case BCMOLT_XGPON_ONU_AUTO_ID_TIWI:
+            return ps_handle_onu_tiwi(&partner, ((const bcmolt_xgpon_onu_tiwi *)ind));
+        case BCMOLT_XGPON_ONU_AUTO_ID_LOOCI:
+            return ps_handle_onu_looci(&partner, ((const bcmolt_xgpon_onu_looci *)ind));
+        default:
+            return BCM_ERR_OK; /* silently ignore all other ONU indications */
+        }
+
+    case BCMOLT_OBJ_ID_XGPON_ALLOC:
+        switch (ind->hdr.subgroup)
+        {
+        case BCMOLT_XGPON_ALLOC_AUTO_ID_CONFIGURATION_COMPLETED:
+            return ps_handle_alloc_id_configuration_completed(
+                &partner,
+                ((const bcmolt_xgpon_alloc_configuration_completed *)ind));
+        default:
+            return BCM_ERR_OK; /* silently ignore all other alloc indications */
+        }
+
+    default:
+        return BCM_ERR_NOT_SUPPORTED; /* someone else needs to handle this indication */
+    }
+}
+
+bcmos_errno ps_move_to_standby_xgpon(const bcmolt_ps_pon *pon)
+{
+    bcmolt_xgpon_ni_set_pon_state set_pon_state;
+    bcmolt_xgpon_ni_key key = { (bcmolt_xgpon_ni)pon->pon_id };
+
+    BCMOLT_OPER_INIT(&set_pon_state, xgpon_ni, set_pon_state, key);
+    BCMOLT_OPER_PROP_SET(&set_pon_state, xgpon_ni, set_pon_state, pon_state, BCMOLT_PON_OPERATION_ACTIVE_STANDBY);
+    return bcmolt_oper_submit(pon->device_id, &set_pon_state.hdr);
+}
+
+bcmos_errno ps_move_to_working_xgpon(const bcmolt_ps_pon *pon)
+{
+    bcmolt_xgpon_ni_set_pon_state set_pon_state;
+    bcmolt_xgpon_ni_key key = { (bcmolt_xgpon_ni)pon->pon_id };
+
+    BCMOLT_OPER_INIT(&set_pon_state, xgpon_ni, set_pon_state, key);
+    BCMOLT_OPER_PROP_SET(&set_pon_state, xgpon_ni, set_pon_state, pon_state, BCMOLT_PON_OPERATION_ACTIVE_WORKING);
+    return bcmolt_oper_submit(pon->device_id, &set_pon_state.hdr);
+}
diff --git a/bcm68620_release/release/host_reference/user_appl/remote_logger/Makefile b/bcm68620_release/release/host_reference/user_appl/remote_logger/Makefile
new file mode 100644
index 0000000..61e7df6
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/remote_logger/Makefile
@@ -0,0 +1,15 @@
+# User application to copy log prints from the device to a local file on the host
+
+ifeq ("$(ENABLE_LOG)", "y")
+    ifeq ("$(ENABLE_CLI)", "y")
+	MOD_NAME = bcm_user_appl_remote_logger
+	MOD_TYPE = lib
+	MOD_DEPS = host_api dev_log
+	ifeq ("$(OS_KERNEL)", "linux")
+	    MOD_DEPS += dev_log_linux
+	endif
+	srcs = bcmolt_user_appl_remote_logger.c \
+	       bcmolt_user_appl_remote_logger_cli.c
+    endif
+endif
+
diff --git a/bcm68620_release/release/host_reference/user_appl/remote_logger/bcmolt_user_appl_remote_logger.c b/bcm68620_release/release/host_reference/user_appl/remote_logger/bcmolt_user_appl_remote_logger.c
new file mode 100644
index 0000000..8cbeddf
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/remote_logger/bcmolt_user_appl_remote_logger.c
@@ -0,0 +1,232 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+*/
+
+#include <bcmos_system.h>
+#include <bcm_dev_log.h>
+#include <bcmolt_api.h>
+#include <bcmolt_model_types.h>
+#include "bcmolt_user_appl_remote_logger.h"
+
+static struct
+{
+    FILE *file_handle;
+    uint64_t file_size;
+    bcmolt_remote_logger_cfg cfg;
+    bcmos_task task;
+    bcmos_timer timer;
+    dev_log_id log_id;
+} remote_logger[BCMTR_MAX_OLTS] = {};
+
+static bcmos_timer_rc remote_logger_timer_handler(bcmos_timer *timer, long data)
+{
+    bcmolt_devid device = (bcmolt_devid)data;
+    int written;
+    bcmos_errno err;
+    bcmolt_logger_cfg cfg;
+    bcmolt_logger_key key = { .file_id = BCMOLT_LOG_FILE_ID_DDR };
+
+    BCMOLT_CFG_INIT(&cfg, logger, key);
+    BCMOLT_CFG_PROP_GET(&cfg, logger, buffer);
+    err = bcmolt_cfg_get(device, &cfg.hdr);
+    if (err != BCM_ERR_OK)
+    {
+        BCM_LOG(ERROR, remote_logger[device].log_id, "Logger get API returned '%s' (%d)\n", bcmos_strerror(err), err);
+        bcmolt_remote_logger_appl_stop(device);
+        return BCMOS_TIMER_OK;
+    }
+
+    written = fprintf(
+        remote_logger[device].file_handle,
+        "%.*s",
+        (int)sizeof(cfg.data.buffer.buff),
+        cfg.data.buffer.buff);
+    if (written < 0)
+    {
+        BCM_LOG(ERROR, remote_logger[device].log_id, "File write returned %d\n", written);
+        bcmolt_remote_logger_appl_stop(device);
+        return BCMOS_TIMER_OK;
+    }
+
+    fflush(remote_logger[device].file_handle);
+
+    /* Check to see if we will exceed the max file size next time we write a chunk. */
+    remote_logger[device].file_size += written;
+    if (remote_logger[device].file_size + sizeof(cfg.data.buffer.buff) > remote_logger[device].cfg.max_file_size)
+    {
+        switch (remote_logger[device].cfg.max_file_size_reached_behavior)
+        {
+            case BCMOLT_REMOTE_LOGGER_FILE_SIZE_REACHED_BEHAVIOR_STOP:
+                BCM_LOG(INFO, remote_logger[device].log_id, "Max file size reached - remote logger stopped\n");
+                bcmolt_remote_logger_appl_stop(device);
+                return BCMOS_TIMER_OK;
+            case BCMOLT_REMOTE_LOGGER_FILE_SIZE_REACHED_BEHAVIOR_CLEAR:
+                BCM_LOG(INFO, remote_logger[device].log_id, "Max file size reached - log file cleared\n");
+                /* the easiest way to clear the file is to close/re-open it */
+                fclose(remote_logger[device].file_handle);
+                remote_logger[device].file_handle = fopen(remote_logger[device].cfg.filename, "w");
+                BUG_ON(remote_logger[device].file_handle == NULL);
+                break;
+            default:
+                break;
+        }
+    }
+
+    if (cfg.data.buffer.msg_to_read == 0)
+    {
+        /* There are no more messages to read right now, wait for the entire polling interval. */
+        bcmos_timer_start(
+            &remote_logger[device].timer,
+            remote_logger[device].cfg.polling_period_ms * 1000); /* ms to us */
+    }
+    else
+    {
+        /* There are more messages to read - wait for only the 'subsequent delay' time. */
+        bcmos_timer_start(
+            &remote_logger[device].timer,
+            remote_logger[device].cfg.subsequent_delay_ms * 1000); /* ms to us */
+    }
+
+    return BCMOS_TIMER_OK;
+}
+
+void bcmolt_remote_logger_appl_init()
+{
+    static bcmos_task_parm task_params =
+    {
+        .priority = TASK_PRIORITY_USER_APPL_REMOTE_LOGGER,
+        .core = BCMOS_CPU_CORE_ANY, /* No CPU affinity */
+        .init_handler = NULL
+    };
+    static bcmos_module_parm module_params =
+    {
+        .qparm = { .size = 1 } /* just the timer message */
+    };
+    static bcmos_timer_parm timer_params =
+    {
+        .periodic = BCMOS_FALSE, /* we will re-enable the timer after each tick */
+        .handler = remote_logger_timer_handler
+    };
+
+    bcmos_errno err;
+    bcmolt_devid device;
+
+    for (device = 0; device < BCMTR_MAX_OLTS; device++)
+    {
+        bcmos_module_id module_id = BCMOS_MODULE_ID_USER_APPL_REMOTE_LOGGER_DEV0 + device;
+        snprintf(
+            remote_logger[device].task.name,
+            sizeof(remote_logger[device].task.name),
+            "user_appl_remote_logger%u",
+            device);
+
+        task_params.name = remote_logger[device].task.name;
+        module_params.qparm.name = remote_logger[device].task.name;
+        timer_params.owner = module_id;
+        timer_params.name = remote_logger[device].task.name;
+        timer_params.data = (long)device;
+
+        err = bcmos_task_create(&remote_logger[device].task, &task_params);
+        BUG_ON(err != BCM_ERR_OK);
+
+        err = bcmos_module_create(module_id, &remote_logger[device].task, &module_params);
+        BUG_ON(err != BCM_ERR_OK);
+
+        err = bcmos_timer_create(&remote_logger[device].timer, &timer_params);
+        BUG_ON(err != BCM_ERR_OK);
+
+        remote_logger[device].log_id =
+            bcm_dev_log_id_register(remote_logger[device].task.name, DEV_LOG_LEVEL_WARNING, DEV_LOG_ID_TYPE_BOTH);
+    }
+}
+
+bcmos_errno bcmolt_remote_logger_appl_start(bcmolt_devid device)
+{
+    bcmos_errno err;
+    bcmolt_logger_cfg cfg;
+    bcmolt_logger_key key = { .file_id = BCMOLT_LOG_FILE_ID_DDR };
+
+    if (bcmolt_remote_logger_appl_is_running(device))
+    {
+        BCM_LOG(ERROR, remote_logger[device].log_id, "Remote logger application is already running.\n");
+        return BCM_ERR_ALREADY;
+    }
+
+    /* configure DDR log file to clear on read so we can always stay up-to-date */
+    BCMOLT_CFG_INIT(&cfg, logger, key);
+    BCMOLT_CFG_PROP_SET(&cfg, logger, enable_log, BCMOS_TRUE);
+    BCMOLT_CFG_PROP_SET(&cfg, logger, clear_after_read, BCMOS_TRUE);
+    err = bcmolt_cfg_set(0, &cfg.hdr);
+    if (err != BCM_ERR_OK)
+    {
+        BCM_LOG(ERROR, remote_logger[device].log_id, "Logger set API returned '%s' (%d)\n", bcmos_strerror(err), err);
+        return err;
+    }
+
+    remote_logger[device].file_handle = fopen(remote_logger[device].cfg.filename, "w");
+    if (remote_logger[device].file_handle == NULL)
+    {
+        BCM_LOG(ERROR, remote_logger[device].log_id, "Could not open file '%s'\n", remote_logger[device].cfg.filename);
+        return BCM_ERR_IO;
+    }
+    remote_logger[device].file_size = 0;
+
+    bcmos_timer_start(&remote_logger[device].timer, remote_logger[device].cfg.polling_period_ms * 1000); /* ms to us */
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcmolt_remote_logger_appl_stop(bcmolt_devid device)
+{
+    if (!bcmolt_remote_logger_appl_is_running(device))
+    {
+        BCM_LOG(ERROR, remote_logger[device].log_id, "Remote logger application is not running.\n");
+        return BCM_ERR_ALREADY;
+    }
+
+    bcmos_timer_stop(&remote_logger[device].timer);
+    fclose(remote_logger[device].file_handle);
+    remote_logger[device].file_handle = NULL;
+    return BCM_ERR_OK;
+}
+
+bcmos_bool bcmolt_remote_logger_appl_is_running(bcmolt_devid device)
+{
+    return bcmos_timer_is_running(&remote_logger[device].timer);
+}
+
+bcmos_errno bcmolt_remote_logger_appl_cfg_get(bcmolt_devid device, bcmolt_remote_logger_cfg *cfg)
+{
+    *cfg = remote_logger[device].cfg;
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcmolt_remote_logger_appl_cfg_update(bcmolt_devid device, const bcmolt_remote_logger_cfg *cfg)
+{
+    remote_logger[device].cfg = *cfg;
+    return BCM_ERR_OK;
+}
diff --git a/bcm68620_release/release/host_reference/user_appl/remote_logger/bcmolt_user_appl_remote_logger.h b/bcm68620_release/release/host_reference/user_appl/remote_logger/bcmolt_user_appl_remote_logger.h
new file mode 100644
index 0000000..75a22fd
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/remote_logger/bcmolt_user_appl_remote_logger.h
@@ -0,0 +1,89 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+*/
+
+#ifndef _BCMOLT_USER_APPL_REMOTE_LOGGER_H_
+#define _BCMOLT_USER_APPL_REMOTE_LOGGER_H_
+
+#include <bcmos_system.h>
+#include <bcmolt_msg.h>
+
+#define BCMOLT_REMOTE_LOGGER_FILENAME_MAX_LEN 128
+
+/** Possible actions to take when the max log file size is reached. */
+typedef enum
+{
+    BCMOLT_REMOTE_LOGGER_FILE_SIZE_REACHED_BEHAVIOR_STOP,  /**< Stop the remote logger application. */
+    BCMOLT_REMOTE_LOGGER_FILE_SIZE_REACHED_BEHAVIOR_CLEAR, /**< Clear all content from the file and continue. */
+} bcmolt_remote_logger_file_size_reached_behavior;
+
+/** Configuration for the remote logger application. */
+typedef struct
+{
+    uint32_t polling_period_ms;   /**< Time to wait in between polling API calls. */
+    uint32_t subsequent_delay_ms; /**< Minumum required time to wait in between susequent API calls. */
+    uint32_t max_file_size;       /**< Maximum size for the output file in bytes. */
+
+    /** Output file full path. */
+    char filename[BCMOLT_REMOTE_LOGGER_FILENAME_MAX_LEN];
+
+    /** Behavior when the max file size is reached. */
+    bcmolt_remote_logger_file_size_reached_behavior max_file_size_reached_behavior;
+} bcmolt_remote_logger_cfg;
+
+/** Initialize the remote logger application (this should be called as part of application startup). */
+void bcmolt_remote_logger_appl_init(void);
+
+/** Start the remote logger application.
+ * \return        BCM_ERR_OK if the application was started successfully, <0 otherwise.
+ */
+bcmos_errno bcmolt_remote_logger_appl_start(bcmolt_devid device);
+
+/** Stop the remote logger application.
+ * \return        BCM_ERR_OK if the application was stopped successfully, <0 otherwise.
+ */
+bcmos_errno bcmolt_remote_logger_appl_stop(bcmolt_devid device);
+
+/** Query whether the remote logger application is currently running.
+ * \return        BCMOS_TRUE if the application is running, BCMOS_FALSE otherwise.
+ */
+bcmos_bool bcmolt_remote_logger_appl_is_running(bcmolt_devid device);
+
+/** Get the configuration of the remote logger application.
+ * \param[out] cfg Remote logger configuration.
+ * \return         BCM_ERR_OK if the configuration was retrieved successfully, <0 otherwise.
+ */
+bcmos_errno bcmolt_remote_logger_appl_cfg_get(bcmolt_devid device, bcmolt_remote_logger_cfg *cfg);
+
+/** Change the configuration of the remote logger application.
+ * \param[in] cfg Remote logger configuration.
+ * \return        BCM_ERR_OK if the configuration was updated successfully, <0 otherwise.
+ */
+bcmos_errno bcmolt_remote_logger_appl_cfg_update(bcmolt_devid device, const bcmolt_remote_logger_cfg *cfg);
+
+#endif
diff --git a/bcm68620_release/release/host_reference/user_appl/remote_logger/bcmolt_user_appl_remote_logger_cli.c b/bcm68620_release/release/host_reference/user_appl/remote_logger/bcmolt_user_appl_remote_logger_cli.c
new file mode 100644
index 0000000..86c4fd5
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/remote_logger/bcmolt_user_appl_remote_logger_cli.c
@@ -0,0 +1,257 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+*/
+
+#include <bcmos_system.h>
+#include <bcmcli.h>
+#include <bcmolt_api.h>
+#include <bcmolt_model_types.h>
+#include "bcmolt_user_appl_remote_logger_cli.h"
+#include "bcmolt_user_appl_remote_logger.h"
+#include "bcmolt_conv.h"
+
+#define BCMOLT_REMOTE_LOGGER_DEFAULT_POLLING_PERIOD_MS     5000
+#define BCMOLT_REMOTE_LOGGER_DEFAULT_SUBSEQUENT_DELAY_MS   5
+#define BCMOLT_REMOTE_LOGGER_DEFAULT_MAX_FILE_SIZE         (200 * 1000000) 
+#define BCMOLT_REMOTE_LOGGER_DEFAULT_FILE_REACHED_BEHAVIOR "stop"
+#define BCMOLT_REMOTE_LOGGER_DEFAULT_FILENAME              "remote_log.txt"
+
+static bcmos_errno remote_logger_configure_log(
+    bcmolt_devid device,
+    const bcmolt_log_entry_key *key,
+    bcmolt_log_level log_level_save)
+{
+    bcmolt_log_entry_cfg cfg;
+    BCMOLT_CFG_INIT(&cfg, log_entry, *key);
+    BCMOLT_CFG_PROP_SET(&cfg, log_entry, log_level_save, log_level_save);
+    BCMOLT_CFG_PROP_SET(&cfg, log_entry, log_level_print, BCMOLT_LOG_LEVEL_WARNING);
+    return bcmolt_cfg_set(device, &cfg.hdr);
+}
+
+static bcmos_errno remote_logger_configure_logs(bcmolt_devid device)
+{
+    bcmos_errno err;
+    bcmolt_msg_set *msg_set;
+    bcmolt_log_entry_cfg multi_cfg;
+    bcmolt_log_entry_key multi_key = { .log_id = 0 }; /* start from the first log ID */
+    uint16_t i;
+
+    /* allocate space for multi-get return */
+    err = bcmolt_msg_set_alloc(BCMOLT_OBJ_ID_LOG_ENTRY, BCMOLT_MGT_GROUP_CFG, 50, &msg_set);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    /* initialize the multi-get config structure */
+    BCMOLT_CFG_INIT(&multi_cfg, log_entry, multi_key);
+    BCMOLT_MSGSET_CFG_PROP_GET(msg_set, log_entry, log_level_save);
+
+    do
+    {
+        /* call multi-get API */
+        err = bcmolt_cfg_get_multi(device, &multi_cfg.hdr, BCMOLT_FILTER_FLAGS_NONE, msg_set);
+        if (err != BCM_ERR_OK)
+        {
+            break;
+        }
+
+        /* for each log entry, reconfigure it to print only warning level and above to the screen (keeping current
+         * behavior for printing to RAM files) */
+        for (i = 0; i < msg_set->num_instances; i++)
+        {
+            bcmolt_log_entry_cfg *cfg = (bcmolt_log_entry_cfg *)msg_set->msg[i];
+            err = remote_logger_configure_log(device, &cfg->key, cfg->data.log_level_save);
+            if (err != BCM_ERR_OK)
+            {
+                break;
+            }
+        }
+
+        /* update the key for next call */
+        multi_cfg.key = *((bcmolt_log_entry_key *)msg_set->next_key);
+
+    /* keep calling the function until we have retrieved all entries */
+    } while (msg_set->more);
+
+    bcmolt_msg_set_free(msg_set);
+    return err;
+}
+
+static bcmos_errno remote_logger_cmd_start(bcmcli_session *session, const bcmcli_cmd_parm parms[], uint16_t n_parms)
+{
+    bcmos_errno err;
+
+    /* these parameters will always be non-NULL since they have default values */
+    bcmolt_remote_logger_cfg cfg = 
+    {
+        .max_file_size = bcmcli_find_named_parm(session, "max_file_size")->value.unumber,
+        .max_file_size_reached_behavior = (bcmolt_remote_logger_file_size_reached_behavior)
+            bcmcli_find_named_parm(session, "file_size_reached")->value.number,
+        .polling_period_ms = bcmcli_find_named_parm(session, "polling_period")->value.unumber,
+        .subsequent_delay_ms = bcmcli_find_named_parm(session, "subsequent_delay")->value.unumber,
+    };
+    strncpy(
+        cfg.filename,
+        bcmcli_find_named_parm(session, "filename")->value.string,
+        BCMOLT_REMOTE_LOGGER_FILENAME_MAX_LEN - 1); /* leave room for terminator */
+
+    /* if the user requested, set all logs on the device to print warnings/errors only */
+    if ((bcmos_bool)bcmcli_find_named_parm(session, "configure_logs")->value.number)
+    {
+        err = remote_logger_configure_logs(current_device);
+        if (err != BCM_ERR_OK)
+        {
+            return err;
+        }
+        bcmcli_session_print(session, "Reconfigured all log entries to print warning/error messages only\n");
+    }
+
+    err = bcmolt_remote_logger_appl_cfg_update(current_device, &cfg);
+    if (err != BCM_ERR_OK)
+    {
+        return err;
+    }
+
+    err = bcmolt_remote_logger_appl_start(current_device);
+    if (err == BCM_ERR_OK)
+    {
+        bcmcli_session_print(session, "Remote logger application started\n");
+    }
+    return err;
+}
+
+static bcmos_errno remote_logger_cmd_stop(bcmcli_session *session, const bcmcli_cmd_parm parms[], uint16_t n_parms)
+{
+    bcmos_errno err = bcmolt_remote_logger_appl_stop(current_device);
+    if (err == BCM_ERR_OK)
+    {
+        bcmcli_session_print(session, "Remote logger application stopped\n");
+    }
+    return err;
+}
+
+static bcmos_errno remote_logger_cmd_status(bcmcli_session *session, const bcmcli_cmd_parm parms[], uint16_t n_parms)
+{
+    static int2str_t file_size_reached2str[] =
+    {
+        { BCMOLT_REMOTE_LOGGER_FILE_SIZE_REACHED_BEHAVIOR_STOP, "stop" },
+        { BCMOLT_REMOTE_LOGGER_FILE_SIZE_REACHED_BEHAVIOR_CLEAR, "clear" },
+        { -1 }
+    };
+
+    bcmos_errno err;
+    bcmolt_remote_logger_cfg cfg;
+
+    if (bcmolt_remote_logger_appl_is_running(current_device))
+    {
+        bcmcli_session_print(session, "Remote logger application is running\n");
+        err = bcmolt_remote_logger_appl_cfg_get(current_device, &cfg);
+        if (err != BCM_ERR_OK)
+        {
+            return err;
+        }
+
+        bcmcli_session_print(session, "filename=%s\n", cfg.filename);
+        bcmcli_session_print(session, "max_file_size=%u\n", cfg.max_file_size);
+        bcmcli_session_print(
+            session,
+            "file_size_reached=%s\n",
+            int2str(file_size_reached2str, cfg.max_file_size_reached_behavior));
+        bcmcli_session_print(session, "polling_period=%u\n", cfg.polling_period_ms);
+        bcmcli_session_print(session, "subsequent_delay=%u\n", cfg.subsequent_delay_ms);
+    }
+    else
+    {
+        bcmcli_session_print(session, "Remote logger application is not running\n");
+    }
+
+    return BCM_ERR_OK;
+}
+
+bcmos_errno bcmolt_remote_logger_appl_cli_init(bcmcli_entry *top_dir)
+{
+    static bcmcli_enum_val file_size_reached_behavior_table[] =
+    {
+        { "stop", BCMOLT_REMOTE_LOGGER_FILE_SIZE_REACHED_BEHAVIOR_STOP },
+        { "clear", BCMOLT_REMOTE_LOGGER_FILE_SIZE_REACHED_BEHAVIOR_CLEAR },
+        BCMCLI_ENUM_LAST
+    };
+
+    bcmcli_entry *dir = bcmcli_dir_add(
+        top_dir,
+        "remote_logger",
+        "Periodically copy device log to local file",
+        BCMCLI_ACCESS_ADMIN,
+        NULL);
+    BCMOS_CHECK_RETURN_ERROR(!dir, BCM_ERR_NOMEM);
+
+    BCMCLI_MAKE_CMD(dir, "start", "Start periodically copying device log to host", remote_logger_cmd_start,
+        BCMCLI_MAKE_PARM_DEFVAL(
+            "filename",
+            "Output file path",
+            BCMCLI_PARM_STRING,
+            BCMCLI_PARM_FLAG_OPTIONAL,
+            (long)BCMOLT_REMOTE_LOGGER_DEFAULT_FILENAME),
+        BCMCLI_MAKE_PARM_DEFVAL(
+            "max_file_size",
+            "Maximum output file size in bytes",
+            BCMCLI_PARM_UNUMBER,
+            BCMCLI_PARM_FLAG_OPTIONAL,
+            BCMOLT_REMOTE_LOGGER_DEFAULT_MAX_FILE_SIZE),
+        BCMCLI_MAKE_PARM_ENUM_DEFVAL(
+            "file_size_reached",
+            "Behavior when max file size is reached",
+            file_size_reached_behavior_table,
+            BCMCLI_PARM_FLAG_OPTIONAL,
+            BCMOLT_REMOTE_LOGGER_DEFAULT_FILE_REACHED_BEHAVIOR),
+        BCMCLI_MAKE_PARM_DEFVAL(
+            "polling_period",
+            "Polling period in ms",
+            BCMCLI_PARM_UNUMBER,
+            BCMCLI_PARM_FLAG_OPTIONAL,
+            BCMOLT_REMOTE_LOGGER_DEFAULT_POLLING_PERIOD_MS),
+        BCMCLI_MAKE_PARM_DEFVAL(
+            "subsequent_delay",
+            "Delay between repeated API calls in ms",
+            BCMCLI_PARM_UNUMBER,
+            BCMCLI_PARM_FLAG_OPTIONAL,
+            BCMOLT_REMOTE_LOGGER_DEFAULT_SUBSEQUENT_DELAY_MS),
+        BCMCLI_MAKE_PARM_ENUM_DEFVAL(
+            "configure_logs",
+            "Configure all device logs to print error/warning only",
+            bcmcli_enum_bool_table,
+            BCMCLI_PARM_FLAG_OPTIONAL,
+            "yes"));
+
+    BCMCLI_MAKE_CMD_NOPARM(dir, "stop", "Stop periodically copying device log to host", remote_logger_cmd_stop);
+
+    BCMCLI_MAKE_CMD_NOPARM(dir, "status", "Show status / configuration parameters", remote_logger_cmd_status);
+
+    return BCM_ERR_OK;
+}
diff --git a/bcm68620_release/release/host_reference/user_appl/remote_logger/bcmolt_user_appl_remote_logger_cli.h b/bcm68620_release/release/host_reference/user_appl/remote_logger/bcmolt_user_appl_remote_logger_cli.h
new file mode 100644
index 0000000..191ef8b
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/remote_logger/bcmolt_user_appl_remote_logger_cli.h
@@ -0,0 +1,38 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+*/
+
+#ifndef _BCMOLT_USER_APPL_REMOTE_LEARNING_CLI_H_
+#define _BCMOLT_USER_APPL_REMOTE_LEARNING_CLI_H_
+
+#include <bcmos_system.h>
+#include <bcmcli.h>
+
+bcmos_errno bcmolt_remote_logger_appl_cli_init(bcmcli_entry *top_dir);
+
+#endif
diff --git a/bcm68620_release/release/host_reference/user_appl/sw_upgrade/Makefile b/bcm68620_release/release/host_reference/user_appl/sw_upgrade/Makefile
new file mode 100644
index 0000000..1641a6b
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/sw_upgrade/Makefile
@@ -0,0 +1,12 @@
+# SW upgrade application
+
+ifeq ("$(ENABLE_CLI)", "y")
+    MOD_NAME = bcm_sw_upgrade
+    MOD_TYPE = lib
+    MOD_DEPS = host_api
+    srcs = bcmolt_sw_upgrade_cli.c
+    
+    ifeq ("$(OS_KERNEL)", "linux")
+        MOD_DEPS += dev_log_linux
+    endif
+endif
diff --git a/bcm68620_release/release/host_reference/user_appl/sw_upgrade/bcmolt_sw_upgrade_cli.c b/bcm68620_release/release/host_reference/user_appl/sw_upgrade/bcmolt_sw_upgrade_cli.c
new file mode 100644
index 0000000..c9b03b4
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/sw_upgrade/bcmolt_sw_upgrade_cli.c
@@ -0,0 +1,70 @@
+/*
+<:copyright-BRCM:2014:DUAL/GPL:standard
+
+   Copyright (c) 2014 Broadcom Corporation
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+*/
+
+#include <bcmos_system.h>
+#include <bcmcli.h>
+#include <bcmolt_model_types.h>
+#include <bcmolt_msg.h>
+#include <bcmolt_api.h>
+#include <bcm_api_cli_helpers.h>
+#include "bcmolt_sw_upgrade_cli.h"
+
+static bcmos_errno bcmolt_user_appl_cli_sw_upgrade_activate(bcmcli_session *session, const bcmcli_cmd_parm parms[], uint16_t n_parms)
+{
+    bcmolt_device_key key = {};
+    bcmolt_device_sw_upgrade_activate oper_sw_upgrade_activate;
+    bcmolt_device_disconnect oper_disconnect;
+    bcmolt_device_connect oper_connect;
+    bcmos_errno err;
+
+    BCMOLT_OPER_INIT(&oper_sw_upgrade_activate, device, sw_upgrade_activate, key);
+    err = bcmolt_oper_submit(0, &oper_sw_upgrade_activate.hdr);
+    if (err)
+        return err;
+
+    BCMOLT_OPER_INIT(&oper_disconnect, device, disconnect, key);
+    err = bcmolt_oper_submit(0, &oper_disconnect.hdr);
+    if (err)
+        return err;
+
+    BCMOLT_OPER_INIT(&oper_connect, device, connect, key);
+    return bcmolt_oper_submit(0, &oper_connect.hdr);
+}
+
+bcmos_errno bcmolt_user_appl_cli_sw_upgrade_init(bcmcli_entry *top_dir)
+{
+    bcmcli_entry *dir = bcmcli_dir_add(top_dir, "sw_upgrade",
+        "Software upgrade user application", BCMCLI_ACCESS_ADMIN, NULL);
+    BCMOS_CHECK_RETURN_ERROR(!dir, BCM_ERR_NOMEM);
+
+    BCMCLI_MAKE_CMD_NOPARM(dir, "activate", "SW upgrade image activation", bcmolt_user_appl_cli_sw_upgrade_activate);
+
+    return BCM_ERR_OK;
+}
+
diff --git a/bcm68620_release/release/host_reference/user_appl/sw_upgrade/bcmolt_sw_upgrade_cli.h b/bcm68620_release/release/host_reference/user_appl/sw_upgrade/bcmolt_sw_upgrade_cli.h
new file mode 100644
index 0000000..9915a95
--- /dev/null
+++ b/bcm68620_release/release/host_reference/user_appl/sw_upgrade/bcmolt_sw_upgrade_cli.h
@@ -0,0 +1,38 @@
+/*
+<:copyright-BRCM:2014:DUAL/GPL:standard
+
+   Copyright (c) 2014 Broadcom Corporation
+   All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+   As a special exception, the copyright holders of this software give
+   you permission to link this software with independent modules, and
+   to copy and distribute the resulting executable under terms of your
+   choice, provided that you also meet, for each linked independent
+   module, the terms and conditions of the license of that module.
+   An independent module is a module which is not derived from this
+   software.  The special exception does not apply to any modifications
+   of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+*/
+
+#ifndef _BCMOLT_SW_UPGRADE_CLI_H_
+#define _BCMOLT_SW_UPGRADE_CLI_H_
+
+#include <bcmos_system.h>
+#include <bcmcli.h>
+
+bcmos_errno bcmolt_user_appl_cli_sw_upgrade_init(bcmcli_entry *top_dir);
+
+#endif
diff --git a/bcm68620_release/release/make/Makefile.config b/bcm68620_release/release/make/Makefile.config
new file mode 100644
index 0000000..908239a
--- /dev/null
+++ b/bcm68620_release/release/make/Makefile.config
@@ -0,0 +1,391 @@
+# Common Makefile configuration
+#
+
+# The following variables must be set
+# MOD_NAME - module name. Depending on MOD_TYPE can be encapsulated (e.g., MOD_NAME=os --> libos.a)
+# MOD_TYPE - module type. Supported types currently are "lib", "app", "linux_module" and "linux_lib"
+#                        Note:
+#                               For library module it is possible to specify "unitest" target in
+#                               $(MAKE_DEVICE_DIR)/modules.host / embedded.
+#                               In this case unitest.c is compiled and linked with its module library.
+#                               However, MOD_TYPE remains a "lib".
+#
+# The following variables are optional
+# srcs     - list of .c source files relative to SRC_DIR
+# as_srcs  - list of .s (lower case s)   source files relative to SRC_DIR
+# AS_srcs  - list of .S (upper case .S) source files relative to SRC_DIR
+# gen_srcs - list of .c that have to be generated as part of the build
+# MOD_DEPS - list of modules the "current" module depends on. OS abstraction layer dependency
+#                        (module "os") is always present implicitly. For example, api_cli module's Makefile
+#                        includes the following line:
+#                        MOD_DEPS = cli api utils model
+# MOD_INC_DIRS - used when module exports includes in directory(s) other than the module directory
+# MOD_DEFS - additional defines, including -D. the defines are added when compiling "this" module
+#                        and all modules depending on it
+# MOD_LIBS - additional libraries required by the module, including -l and -L
+# MOD_CUSTOM - if set "y", default rule for building the module is NOT provided.
+#                        In this case the rule for building $(MOD_TARGET) must be provided in module's Makefile
+#
+# The following variables are not required in most cases, but supported nonetheless
+# EXTRA_CFLAGS - extra CFLAGS the module requires for compilation
+# EXTRA_INCLUDES - extra include directories the module requires for compilation (with -I)
+# EXTRA_LIBS_PATH - additional library search paths
+# EXTRA_LIBS additional libraries to link with
+#
+# The following variables are pre-set and can be used in module-specific Makefile
+# TOP_DIR - fully qualified top directory
+# MOD_DIR - module directory relative to the top directory
+# OUT_DIR_BASE - output directory base
+# ALL_MODULES - list of all modules in the current subsystem (host/embedded)
+# ALL_LIB_MODULES - list of all lib modules in the current subsystem (host/embedded)
+# ALL_APP_MODULES - list of all app modules in the current subsystem (host/embedded)
+# SIMULATION_BUILD - set "y" for simulation build (CROSS_COMPILE is empty)
+# OS - OS
+# ENABLE_EPON - set "y" if EPON mode is included
+# ENABLE_GPON - set "y" if GPON mode is included
+# ENABLE_XGPON - set "y" if XGPON mode is included
+# ENABLE_GPON_OR_XGPON - set "y" if GPON or XGPON mode is included
+# ENABLE_CLI - set "n" if host CLI support is not required
+# ENABLE_LOG - set "n" if host logger support is not required
+#
+# USE_CLANG - set "y" to enable CLANG code pass for improved diagnostic
+#
+# The following variables are pre-set and can be used and/or overwritten in module-specific Makefile
+# SRC_DIR - fully-qualified source directory
+# OUT_DIR - module output directory
+# TARGET_LIB - library name for "lib" module. By default it is $(MOD_NAME)
+# TARGET_LIB_FNAME - module library file name including path. By default it is $(OUT_DIR)/lib$(TARGET_LIB).a
+# MOD_TARGET - module target name, including path. By default it is
+#       $(OUT_DIR)/$(MOD_NAME) for "app" modules
+#       $(TARGET_LIB_FNAME) for "lib" modules
+# CODEGEN_OUTPUT_DIR - output directory containing generated files
+
+TOOLCHAIN    ?= gcc
+OS           ?= posix
+DEBUG        ?= y
+BLD_DEP      ?= gcc
+USE_CLANG 	 ?= n
+
+export BOARD
+export TOOLCHAIN
+export OS
+export DEBUG
+export BLD_DEP
+export OS_KERNEL
+
+V ?= 0
+ifeq (x"$(V)", x"0")
+    SILENT_BUILD = @
+endif
+
+#
+# Compiler warning configuration
+# Some extra warnings are always enabled. Others must be opted in on the module level
+#
+ENABLE_EXTRA_WARNINGS ?= y
+export ENABLE_EXTRA_WARNINGS
+
+# Include optional platform-specific configuration
+-include $(MAKE_DEVICE_DIR)/Makefile.$(SUBSYSTEM).config
+
+ENABLE_EPON      ?= y
+ENABLE_GPON      ?= y
+ENABLE_XGPON ?= y
+
+ENABLE_GPON_OR_XGPON = n
+ifeq ("$(ENABLE_GPON)", "y")
+    ENABLE_GPON_OR_XGPON = y
+endif
+ifeq ("$(ENABLE_XGPON)", "y")
+    ENABLE_GPON_OR_XGPON = y
+endif
+export ENABLE_EPON
+export ENABLE_GPON
+export ENABLE_XGPON
+export ENABLE_GPON_OR_XGPON
+
+SRC_DIR          = $(TOP_DIR)/$(MOD_DIR)
+
+ifeq ("$(RELEASE_BUILD)", "y")
+    OUT_DIR_BASE ?= $(TOP_DIR)/build
+    OUT_DIR      = $(OUT_DIR_BASE)/$(MOD_DIR)
+    MODEL_OUT_DIR= $(TOP_DIR)/host_driver/model
+    CONFIG_DIR      = host_driver/config
+else
+    OUT_DIR_BASE ?= $(TOP_DIR)/build/$(PLATFORM)/$(SUBSYSTEM)
+    OUT_DIR      = $(OUT_DIR_BASE)/$(MOD_DIR)
+    MODEL_OUT_DIR= $(OUT_DIR_BASE)/common/model/$(PLATFORM)
+    CONFIG_DIR      = $(SUBSYSTEM)/config
+    OS_PLATFORM_DIR = $(SUBSYSTEM)/os_abstraction/$(PLATFORM)
+endif
+
+# Host CLI and logger support
+ENABLE_CLI ?= y
+ENABLE_LOG ?= y
+ENABLE_KT2 ?= n
+
+MOD_DEFS += -DUSE_DRIVER_CLI=1 -DFULL_DRIVER=1 -DCFE_DRIVER=0
+
+export ENABLE_CLI
+export ENABLE_LOG
+export ENABLE_KT2
+
+ifeq ("$(SUBSYSTEM)", "embedded")
+    override ENABLE_CLI = y
+    override ENABLE_LOG = y
+endif
+
+#
+### Include module Makefile
+# For MOD_CUSTOM only will be included in Makefile.rules second time for propagate custom rules
+#
+include $(SRC_DIR)/Makefile
+
+# Code-generator - related parameters
+CODEGEN_INPUT_DIR        = $(SRC_DIR)/codegen_templates
+CODEGEN_OUTPUT_DIR       = $(OUT_DIR)
+CODEGEN_DIR                      = $(TOP_DIR)/bin/codegen
+MODEL_FILE                       = $(TOP_DIR)/common/model/$(PLATFORM)/$(PLATFORM).objset
+CODEGEN_EXE                      = $(CODEGEN_DIR)/Teknovus.MetaStructure.CodeGenerator.exe
+MONO_VER            ?= 4.3.2.467
+MONO_PATH           ?= /opt/mono-$(MONO_VER)/bin/mono
+
+export SRC_DIR
+export OUT_DIR_BASE
+export OUT_DIR
+export MODEL_OUT_DIR
+
+ifeq ("$(wildcard $(MONO_PATH))", "")
+    # If we can't find Mono installed in the correct path, default to the current PATH version.
+    # In the future, we should always use Mono from a common tools directory.
+    # TODO: change this once the compiler/toolchain paths are better defined.
+    MONO_PATH        = mono
+endif
+
+# Treat "yes" and "y" the same
+ifeq ("$(USE_CLANG)", "yes")
+    USE_CLANG := y
+endif
+ifeq ("$(USE_CLANG)", "y")
+    include $(MAKE_DIR)/clang.opts
+endif
+
+# Disable code generation in release build
+ifeq ("$(RELEASE_BUILD)", "y")
+    srcs := $(srcs) $(gen_srcs)
+    gen_srcs :=
+    # Disable LINT and CLANG
+    USE_LINT = n
+    USE_CLANG = n
+	EXTRA_DEFINES += -DRELEASE_BUILD
+endif
+
+SRCS = $(strip $(srcs:%=$(SRC_DIR)/%))
+
+# In COMPILE_ALL_IN_ONE_GO mode all .c files of a module are compiled in
+# a single invocation of BLD_CC compiler. In result, objects files are created
+# in OUT_DIR even if module's .c files are spread in sub-directories
+ifeq ("$(COMPILE_ALL_IN_ONE_GO)", "y")
+    srcs_no_dir = $(notdir $(srcs))
+    _OBJS = $(srcs_no_dir:%.c=$(OUT_DIR)/%.o)
+else
+    _OBJS = $(srcs:%.c=$(OUT_DIR)/%.o)
+endif
+
+as_SRCS = $(strip $(as_srcs:%=$(SRC_DIR)/%))
+as_OBJS = $(as_srcs:%.s=$(OUT_DIR)/%.o)
+_OBJS  += $(as_OBJS)
+
+AS_SRCS = $(strip $(AS_srcs:%=$(SRC_DIR)/%))
+AS_OBJS = $(AS_srcs:%.S=$(OUT_DIR)/%.o)
+_OBJS  += $(AS_OBJS)
+
+ifneq ("$(gen_srcs)", "")
+    GEN_SRCS = $(strip $(gen_srcs:%=$(CODEGEN_OUTPUT_DIR)/%))
+    _OBJS += $(GEN_SRCS:%.c=%.o)
+endif
+OBJS = $(strip $(_OBJS))
+
+# Add default dependency on OS abstraction
+ifeq ("$(MOD_NAME)", "")
+    ifneq (x"$(V)", x"0")
+        $(info MOD_NAME is not set for $(SRC_DIR)/Makefile. Skipping..)
+    endif
+    MOD_TYPE = _skip_
+endif
+
+# Add default dependency on OS abstraction
+ifneq ("$(MOD_SUPPRESS_OS_DEP), "y)
+    ifeq ("$(MOD_TYPE)", "linux_module")
+        _kernel = y
+    endif
+    ifeq ("$(MOD_TYPE)", "linux_lib")
+        _kernel = y
+    endif
+    ifeq ("$(_kernel)", "y")
+         MOD_DEPS := os_linux $(MOD_DEPS)
+    else
+         MOD_DEPS := os $(MOD_DEPS)
+    endif
+endif
+
+# GEN_OBJTAGS define which objects are generated. If not set explicitly,
+# derive it from ENABLE_EPON, ENABLE_GPON, ENABLE_XGPON flags
+ifeq ("$(GEN_OBJTAGS)", "")
+    ifeq ("$(ENABLE_EPON)", "y")
+        GEN_OBJTAGS := $(GEN_OBJTAGS),EPON,AE
+    endif
+    ifeq ("$(ENABLE_GPON)", "y")
+        GEN_OBJTAGS := $(GEN_OBJTAGS),GPON
+    endif
+    ifeq ("$(ENABLE_XGPON)", "y")
+        GEN_OBJTAGS := $(GEN_OBJTAGS),XGPON
+    endif
+    ifeq ("$(GEN_OBJTAGS)", "")
+        $(error At least one of ENABLE_EPON, ENABLE_GPON, ENABLE_XGPON must be set =y)
+    endif
+endif
+
+# Extra types filter
+ifneq ("$(EXTRA_TYPES)", "")
+    EXTRA_TYPES := $(shell echo -n $(EXTRA_TYPES) | sed -e 's/ /\\|/g')
+    GEN_EXTRA_TYPES := -typeNameFilter=\^\($(EXTRA_TYPES)\)\$$
+endif
+
+OS_KERNEL ?= $(OS)
+UC_PLATFORM = $(shell echo $(PLATFORM) | tr a-z A-Z)
+UC_SUBSYSTEM = $(shell echo $(SUBSYSTEM) | tr a-z A-Z)
+UC_OS = $(shell echo $(OS) | tr a-z A-Z)
+UC_OS_KERNEL = $(shell echo $(OS_KERNEL) | tr a-z A-Z)
+
+BUILD_TIME = $(shell date +%s)
+BUILD_TIME_ZONE = $(shell date +%:z)
+EXTRA_CFLAGS += -DBUILD_TIME=$(BUILD_TIME) -DBUILD_TIME_ZONE='"$(BUILD_TIME_ZONE)"'
+
+EXTRA_DEFINES   += -DBCM_SUBSYSTEM_$(UC_SUBSYSTEM) -DBCM_PLATFORM_$(UC_PLATFORM) -DBCM_OS_$(UC_OS)
+EXTRA_DEFINES   += -D$(UC_OS_KERNEL)_KERNEL_SPACE
+ifeq ("$(ENABLE_EPON)", "y")
+    EXTRA_DEFINES       += -DBCM_EPON
+endif
+ifeq ("$(ENABLE_GPON)", "y")
+    EXTRA_DEFINES       += -DBCM_GPON
+endif
+ifeq ("$(ENABLE_XGPON)", "y")
+    EXTRA_DEFINES       += -DBCM_XGPON
+endif
+
+# Build unitests for simulation and from Jenkins jobs
+UNITEST ?= n
+
+ifeq ("$(SIMULATION_BUILD)", "y")
+    EXTRA_DEFINES += -DSIMULATION_BUILD
+    UNITEST = y
+endif
+
+ifeq ("$(JENKINS_BUILD)", "y")
+    UNITEST = y
+endif
+
+EXTRA_INCLUDES  += -I$(SRC_DIR)
+
+OPT_DISABLE_EMBEDDED ?= n
+OPT_DISABLE_HOST ?=n
+
+ifeq ("OPT_DISABLE_$(UC_SUBSYSTEM)", "OPT_DISABLE_EMBEDDED")
+    OPT_DISABLE := $(OPT_DISABLE_EMBEDDED)
+else
+    OPT_DISABLE := $(OPT_DISABLE_HOST)
+endif
+
+ARCH_CFLAGS = $(ARCH_FLAGS)
+ifeq ("$(OPT_DISABLE)", "y")
+    ARCH_CFLAGS		+= $(DEBUG_O_CFLAGS)
+    EXTRA_LFLAGS    += $(DEBUG_O_LFLAGS)
+    EXTRA_ASFLAGS   += $(DEBUG_O_ASFLAGS)
+    EXTRA_asFLAGS   += $(DEBUG_O_asLAGS)
+else
+    ARCH_CFLAGS     += $(RELEASE_O_CFLAGS)
+    EXTRA_LFLAGS    += $(RELEASE_O_LFLAGS)
+    EXTRA_ASFLAGS   += $(RELEASE_O_ASFLAGS)
+    EXTRA_asFLAGS   += $(RELEASE_O_asFLAGS)
+endif
+
+# Treat lib as shared lib if BUILD_SHARED_LIBS is y
+ifeq  ("$(BUILD_SHARED_LIBS)", "y")
+   ifeq  ("$(MOD_TYPE)", "lib")
+      MOD_TYPE = shared_lib
+   endif
+   SHARED_LIB_PATH ?= $(OUT_DIR_BASE)/shared_libs
+endif
+
+# Calculate MOD_TARGET based on MOD_TYPE
+ifeq  ("$(MOD_TYPE)", "lib")
+    ifneq ("$(OBJS)", "")
+        TARGET_LIB ?= $(MOD_NAME)
+        TARGET_LIB_FNAME ?= $(OUT_DIR)/lib$(TARGET_LIB).a
+    endif
+    MOD_TARGET ?= $(TARGET_LIB_FNAME)
+else ifeq  ("$(MOD_TYPE)", "shared_lib")
+	ifneq ("$(OBJS)", "")
+		TARGET_LIB ?= $(MOD_NAME)
+		TARGET_LIB_FNAME ?= $(OUT_DIR)/lib$(TARGET_LIB).so
+	endif
+	MOD_TARGET ?= $(TARGET_LIB_FNAME)
+else ifeq  ("$(MOD_TYPE)", "app")
+    MOD_TARGET ?= $(OUT_DIR)/$(MOD_NAME)
+else ifeq  ("$(MOD_TYPE)", "linux_module")
+    ifeq ("$(KERNELDIR)", "")
+        $(error KERNELDIR must be set in board profile)
+    endif
+    ifeq ("$(KERNEL_ARCH)", "")
+        $(error KERNEL_ARCH must be set in board profile)
+    endif
+    ifeq ("$(KERNEL_OUTDIR)", "")
+        KERNEL_OUTDIR := $(KERNELDIR)
+    endif
+    MOD_TARGET ?= $(SRC_DIR)/$(MOD_NAME).ko
+else ifeq ("$(MOD_TYPE)", "linux_lib")
+    MOD_TARGET ?= $(OUT_DIR_BASE)/$(MOD_NAME).linuxlib
+else ifeq ("$(MOD_TYPE)", "_skip_")
+    MOD_TARGET = .dummy
+else
+    $(error MOD_TYPE $(MOD_TYPE) is incorrect for module $(MOD_NAME). Must be lib or app)
+endif
+
+ifeq ("$(MOD_TARGET)", "")
+   MOD_TARGET = $(MOD_NAME)
+endif
+
+ifeq ("$(OS)", "posix")
+    EXTRA_DEFINES += -D_XOPEN_SOURCE=600
+    LIBS   = -lrt -lpthread -lm
+endif
+
+# Make sure that paths in EXTRA_INCLUDES are absolute
+ifneq ("$(EXTRA_INCLUDES)", "")
+    # Make sure that each directory is an absolute path
+    EXTRA_INCS = $(addprefix -I$(TOP_DIR)/, $(subst -I,,$(subst $(TOP_DIR)/,,$(EXTRA_INCLUDES))))
+endif
+ifneq ("$(EXTRA_ASINCLUDES)", "")
+    # Make sure that each directory is an absolute path
+    EXTRA_ASINCS = $(addprefix -I$(TOP_DIR)/, $(subst -I,,$(subst $(TOP_DIR)/,,$(EXTRA_ASINCLUDES))))
+endif
+ifneq ("$(EXTRA_asINCLUDES)", "")
+    # Make sure that each directory is an absolute path
+    EXTRA_asINCS = $(addprefix -I$(TOP_DIR)/, $(subst -I,,$(subst $(TOP_DIR)/,,$(EXTRA_asINCLUDES))))
+endif
+ifeq ("$(USE_LINT)", "y")
+    USE_LINT := yes
+endif    
+ifeq ("$(USE_LINT)", "yes")
+    EXTRA_DEFINES += -DUSE_LINT
+endif    
+
+EXTRA_DEFINES += $(USER_EXTRA_DEFINES) $(USER_EXTRA_$(UC_SUBSYSTEM)_DEFINES)
+EXTRA_CFLAGS += $(USER_EXTRA_CFLAGS) $(USER_EXTRA_$(UC_SUBSYSTEM)_CFLAGS)
+CFLAGS  += $(ARCH_CFLAGS) $(EXTRA_CFLAGS)  $(EXTRA_INCS) $(EXTRA_DEFINES)
+ASFLAGS += $(ARCH_FLAGS) $(EXTRA_ASFLAGS) $(EXTRA_ASINCS) $(EXTRA_ASDEFINES)
+asFLAGS += $(ARCH_FLAGS) $(EXTRA_asFLAGS) $(EXTRA_asINCS) $(EXTRA_asDEFINES)
+LFLAGS  += $(ARCH_FLAGS) $(EXTRA_LFLAGS)
+DEP_FLAGS += $(EXTRA_CFLAGS) $(EXTRA_INCS) $(EXTRA_DEFINES)
+CLANG_FLAGS += $(EXTRA_CFLAGS) $(EXTRA_INCS) $(EXTRA_DEFINES) $(CLANG_OPTS)
diff --git a/bcm68620_release/release/make/Makefile.initial_config b/bcm68620_release/release/make/Makefile.initial_config
new file mode 100644
index 0000000..541ec84
--- /dev/null
+++ b/bcm68620_release/release/make/Makefile.initial_config
@@ -0,0 +1,6 @@
+ifeq ("$(TERM)", "dumb")
+        BOLD_PRINT := printf "\n---- %s --------------------------------------------------\n"
+else
+        BOLD_PRINT?=printf "%s\n"
+endif
+export BOLD_PRINT
diff --git a/bcm68620_release/release/make/Makefile.main b/bcm68620_release/release/make/Makefile.main
new file mode 100644
index 0000000..2ddef1e
--- /dev/null
+++ b/bcm68620_release/release/make/Makefile.main
@@ -0,0 +1,153 @@
+# Main Makefile body
+# It is included in the central Makefile twice - for host and embedded subsystems
+# PARAMATER: SUBSYSTEM
+
+UC_SUBSYSTEM = $(shell echo $(SUBSYSTEM) | tr a-z A-Z)
+
+$(OUT_$(UC_SUBSYSTEM)_DIR)/.deps_$(SUBSYSTEM)_list_$(BOARD): $(MAKE_DEVICE_DIR)/modules.$(SUBSYSTEM) \
+        $(MAKE_DIR)/Makefile.config $(MAKE_DIR)/Makefile.rules $(MAKE_DIR)/Makefile.template $(MAKE_DIR)/Makefile.main
+	@if ! test -f $(OUT_$(UC_SUBSYSTEM)_DIR)/.deps_$(SUBSYSTEM)_list_$(BOARD); then\
+	    if ls $(OUT_$(UC_SUBSYSTEM)_DIR)/.deps_$(SUBSYSTEM)_list_* 2>/dev/null >/dev/null; then\
+	    	olddeps=`ls $(OUT_$(UC_SUBSYSTEM)_DIR)/.deps_$(SUBSYSTEM)_list_*` ; \
+	    	old_board=`echo $$olddeps | sed 's@$(OUT_$(UC_SUBSYSTEM)_DIR)/.deps_$(SUBSYSTEM)_list_@@'` ; \
+			$(BOLD_PRINT) "Previous build was for different board $$old_board. cleaning up..";\
+			$(MAKE) -s BOARD=$$old_board V=0 clean_$(SUBSYSTEM); \
+		fi;\
+	fi
+	@$(BOLD_PRINT) "Generating list of $(SUBSYSTEM) modules for $(PLATFORM)"
+	@rm -fr $(OUT_$(UC_SUBSYSTEM)_DIR)/.deps_$(SUBSYSTEM)_list_*
+	@rm -fr $(OUT_$(UC_SUBSYSTEM)_DIR)/all_modules.$(SUBSYSTEM)
+	@rm -fr $(OUT_$(UC_SUBSYSTEM)_DIR)/all_lib_modules.$(SUBSYSTEM)
+	@rm -fr $(OUT_$(UC_SUBSYSTEM)_DIR)/all_app_modules.$(SUBSYSTEM)
+	@mkdir -p $(OUT_$(UC_SUBSYSTEM)_DIR)
+	@touch $(OUT_$(UC_SUBSYSTEM)_DIR)/all_modules.$(SUBSYSTEM)
+	@touch $(OUT_$(UC_SUBSYSTEM)_DIR)/all_lib_modules.$(SUBSYSTEM)
+	@touch $(OUT_$(UC_SUBSYSTEM)_DIR)/all_app_modules.$(SUBSYSTEM)
+	@for mod_dir in `awk '{print $$1}' $(MAKE_DEVICE_DIR)/modules.$(SUBSYSTEM)`; do\
+		if test "$$mod_dir" = "" ; then continue; fi; \
+		mod_name=`$(MAKE) -s V=0 SUBSYSTEM=$(SUBSYSTEM) MOD_DIR=$$mod_dir SKIP_DEPS=yes -f $(MAKE_DIR)/Makefile.template module_name`;\
+		if test "$$mod_name" = "" ; then continue; fi; \
+		mod_name=$${mod_name}_$(SUBSYSTEM);\
+		mod_type=`grep -e '^[[:space:]]*MOD_TYPE[[:space:]]*=' $$mod_dir/Makefile | awk -F= '{sub(/\r/,""); print $$2}' | sed -e 's/^[ \t]*//'`; \
+		echo -n "$$mod_name " >> $(OUT_$(UC_SUBSYSTEM)_DIR)/all_modules.$(SUBSYSTEM); \
+		if test "`echo -n $$mod_type | sed -e 's/linux_lib lib/lib/' | sed -e 's/lib linux_lib/lib/'`" = "lib" ; then\
+			echo -n "$$mod_name " >> $(OUT_$(UC_SUBSYSTEM)_DIR)/all_lib_modules.$(SUBSYSTEM); \
+		fi;\
+		if test "$$mod_type" = "app" ; then\
+			echo -n "$$mod_name " >> $(OUT_$(UC_SUBSYSTEM)_DIR)/all_app_modules.$(SUBSYSTEM); \
+		fi;\
+	done
+	@touch $(OUT_$(UC_SUBSYSTEM)_DIR)/.deps_$(SUBSYSTEM)_list_$(BOARD)
+
+$(OUT_$(UC_SUBSYSTEM)_DIR)/.deps_$(SUBSYSTEM)_$(BOARD): $(OUT_$(UC_SUBSYSTEM)_DIR)/.deps_$(SUBSYSTEM)_list_$(BOARD)
+	@$(BOLD_PRINT) "Building $(BOARD) board environment for $(PLATFORM)"
+	$(MAKE) SUBSYSTEM=$(SUBSYSTEM) MOD_DIR=$$mod_dir OUT_DIR_BASE=$(OUT_$(UC_SUBSYSTEM)_DIR) SKIP_DEPS=yes \
+            ALL_MODULES="`cat $(OUT_$(UC_SUBSYSTEM)_DIR)/all_modules.$(SUBSYSTEM)`" \
+            ALL_LIB_MODULES="`cat $(OUT_$(UC_SUBSYSTEM)_DIR)/all_lib_modules.$(SUBSYSTEM)`" \
+            ALL_APP_MODULES="`cat $(OUT_$(UC_SUBSYSTEM)_DIR)/all_app_modules.$(SUBSYSTEM)`" \
+            -f $(MAKE_DIR)/Makefile.template board_env
+	@$(BOLD_PRINT) "Generating $(SUBSYSTEM) dependencies for $(PLATFORM)"
+	@for mod_dir in `awk '{print $$1}' $(MAKE_DEVICE_DIR)/modules.$(SUBSYSTEM)`; do\
+		if test "$$mod_dir" = "" ; then continue; fi; \
+		mod_name=`$(MAKE) -s V=0 SUBSYSTEM=$(SUBSYSTEM) MOD_DIR=$$mod_dir SKIP_DEPS=yes -f $(MAKE_DIR)/Makefile.template module_name`;\
+		if test "$$mod_name" = "" ; then continue; fi; \
+		if ! $(MAKE) $(SILENT) SUBSYSTEM=$(SUBSYSTEM) MOD_DIR=$$mod_dir OUT_DIR_BASE=$(OUT_$(UC_SUBSYSTEM)_DIR) SKIP_DEPS=yes \
+			ALL_MODULES="`cat $(OUT_$(UC_SUBSYSTEM)_DIR)/all_modules.$(SUBSYSTEM)`" \
+			ALL_LIB_MODULES="`cat $(OUT_$(UC_SUBSYSTEM)_DIR)/all_lib_modules.$(SUBSYSTEM)`" \
+			ALL_APP_MODULES="`cat $(OUT_$(UC_SUBSYSTEM)_DIR)/all_app_modules.$(SUBSYSTEM)`" \
+			-f $(MAKE_DIR)/Makefile.template moddep; then exit 1;\
+		fi;\
+	done
+	@touch $(OUT_$(UC_SUBSYSTEM)_DIR)/.deps_$(SUBSYSTEM)_$(BOARD)
+
+.PHONY:
+
+# Make sure that none of module Makefiles changed.
+# If there is a change - we need to regenerate dependencies
+_deps_$(SUBSYSTEM)_: $(OUT_$(UC_SUBSYSTEM)_DIR)/.deps_$(SUBSYSTEM)_$(BOARD) .PHONY
+	@cat $(MAKE_DEVICE_DIR)/modules.$(SUBSYSTEM) | while read -r mod_dir_targ; do\
+			mod_dir=`echo $$mod_dir_targ | awk '{print $$1}'`;\
+			if test "$$mod_dir" = "" ; then continue; fi; \
+			if test $(OUT_$(UC_SUBSYSTEM)_DIR)/.deps_$(SUBSYSTEM)_list_$(BOARD) -ot $$mod_dir/Makefile; then\
+				echo $$mod_dir/Makefile changed, must regenerate dependencies.;\
+				echo PLEASE RE-RUN make;\
+				rm -f $(OUT_$(UC_SUBSYSTEM)_DIR)/.deps_$(SUBSYSTEM)_list_$(BOARD);\
+				exit -1;\
+			fi;\
+		done
+
+build_$(SUBSYSTEM): _deps_$(SUBSYSTEM)_
+	@$(BOLD_PRINT) "Building $(SUBSYSTEM) image for $(PLATFORM)"
+	@cat $(MAKE_DEVICE_DIR)/modules.$(SUBSYSTEM) | while read -r mod_dir_targ; do\
+		mod_dir=`echo $$mod_dir_targ | awk '{print $$1}'`;\
+		if test "$$mod_dir" = "" ; then continue; fi; \
+		mod_targets=`echo $$mod_dir_targ | awk '{print $$2 $$3 $$4 $$5}'`;\
+		if ! $(MAKE) $(SILENT) SUBSYSTEM=$(SUBSYSTEM) MOD_DIR=$$mod_dir OUT_DIR_BASE=$(OUT_$(UC_SUBSYSTEM)_DIR) \
+			ALL_MODULES="`cat $(OUT_$(UC_SUBSYSTEM)_DIR)/all_modules.$(SUBSYSTEM)`" \
+			ALL_LIB_MODULES="`cat $(OUT_$(UC_SUBSYSTEM)_DIR)/all_lib_modules.$(SUBSYSTEM)`" \
+			ALL_APP_MODULES="`cat $(OUT_$(UC_SUBSYSTEM)_DIR)/all_app_modules.$(SUBSYSTEM)`" \
+			-f $(MAKE_DIR)/Makefile.template $$mod_targets; then exit 1;\
+		fi;\
+	done
+	@$(BOLD_PRINT) "Finished building $(SUBSYSTEM) image for $(PLATFORM)"
+
+clean_$(SUBSYSTEM): BOARD=$(shell ls $(OUT_$(UC_SUBSYSTEM)_DIR)/.deps_$(SUBSYSTEM)_list_* 2>/dev/null | sed 's@$(OUT_$(UC_SUBSYSTEM)_DIR)/.deps_$(SUBSYSTEM)_list_@@')
+
+clean_$(SUBSYSTEM):
+	@$(BOLD_PRINT) "Clean $(PLATFORM) $(SUBSYSTEM) BOARD=$(BOARD)"
+	@for mod_dir in `awk '{print $$1}' $(MAKE_DEVICE_DIR)/modules.$(SUBSYSTEM)`; do\
+		if test "$$mod_dir" = "" ; then continue; fi; \
+		if ! $(MAKE) $(SILENT) SUBSYSTEM=$(SUBSYSTEM) MOD_DIR=$$mod_dir OUT_DIR_BASE=$(OUT_$(UC_SUBSYSTEM)_DIR) SKIP_DEPS=yes \
+			-f $(MAKE_DIR)/Makefile.template clean_module; then exit 1; fi;\
+	done
+	$(SILENT_BUILD)rm -f $(OUT_$(UC_SUBSYSTEM)_DIR)/Makefile.config.*
+	$(SILENT_BUILD)rm -f $(OUT_$(UC_SUBSYSTEM)_DIR)/.deps_$(SUBSYSTEM)*
+	$(SILENT_BUILD)rm -f $(OUT_$(UC_SUBSYSTEM)_DIR)/all_*modules.$(SUBSYSTEM)
+	$(SILENT_BUILD)find $(SUBSYSTEM) -name '*~' -print0 2>/dev/null | xargs -0 rm -rf
+	$(SILENT_BUILD)find $(SUBSYSTEM) -name '*.ko' -print0 2>/dev/null | xargs -0 rm -rf
+	$(SILENT_BUILD)find $(SUBSYSTEM) -name '.*.cmd' -print0 2>/dev/null | xargs -0 rm -rf
+	$(SILENT_BUILD)find $(SUBSYSTEM) -name '*.o' -print0 2>/dev/null | xargs -0 rm -rf
+	$(SILENT_BUILD)find $(SUBSYSTEM) -name '*.mod.c' -print0 2>/dev/null | xargs -0 rm -rf
+	$(SILENT_BUILD)find $(SUBSYSTEM) -name modules.order -print0 2>/dev/null | xargs -0 rm -rf
+	$(SILENT_BUILD)find $(SUBSYSTEM) -name Module.symvers -print0 2>/dev/null | xargs -0 rm -rf
+	$(SILENT_BUILD)find $(SUBSYSTEM) -name .tmp_versions -print0 2>/dev/null | xargs -0 rm -rf
+ 
+help_$(SUBSYSTEM):
+	@echo "$$PLATFORM $(SUBSYSTEM) modules:"
+	@cat $(MAKE_DEVICE_DIR)/modules.$(SUBSYSTEM) | while read -r mod_dir_targ; do\
+		mod_dir=`echo $$mod_dir_targ | awk '{print $$1}'`;\
+		if test "$$mod_dir" = "" ; then continue; fi; \
+		mod_name=`$(MAKE) -s V=0 SUBSYSTEM=$(SUBSYSTEM) MOD_DIR=$$mod_dir SKIP_DEPS=yes -f $(MAKE_DIR)/Makefile.template module_name`;\
+		if test "$$mod_name" = "" ; then continue; fi; \
+		echo "  " $${mod_name}_$(SUBSYSTEM);\
+	done
+
+# Targets for building individual $(SUBSYSTEM) module
+%_$(SUBSYSTEM):: _deps_$(SUBSYSTEM)_
+	@while read -r mod_dir_targ; do\
+		mod_dir=`echo $$mod_dir_targ | awk '{print $$1}'`;\
+		if test "$$mod_dir" = "" ; then continue; fi; \
+		mod_name=`$(MAKE) -s V=0 SUBSYSTEM=$(SUBSYSTEM) MOD_DIR=$$mod_dir SKIP_DEPS=yes -f $(MAKE_DIR)/Makefile.template module_name`;\
+		if test "$$mod_name" = "" ; then continue; fi; \
+		mod_name=$${mod_name}_$(SUBSYSTEM);\
+		mod_targets=`echo $$mod_dir_targ | awk '{print $$2 $$3 $$4 $$5}'`;\
+		if test "$$mod_name" = "$@" ; then\
+			target_found=y;\
+			$(MAKE) $(SILENT) SUBSYSTEM=$(SUBSYSTEM) MOD_DIR=$$mod_dir OUT_DIR_BASE=$(OUT_$(UC_SUBSYSTEM)_DIR) \
+			ALL_MODULES="`cat $(OUT_$(UC_SUBSYSTEM)_DIR)/all_modules.$(SUBSYSTEM)`" \
+			ALL_LIB_MODULES="`cat $(OUT_$(UC_SUBSYSTEM)_DIR)/all_lib_modules.$(SUBSYSTEM)`" \
+			ALL_APP_MODULES="`cat $(OUT_$(UC_SUBSYSTEM)_DIR)/all_app_modules.$(SUBSYSTEM)`" \
+				-f $(MAKE_DIR)/Makefile.template $$mod_targets || exit 1;\
+		fi;\
+	done < $(MAKE_DEVICE_DIR)/modules.$(SUBSYSTEM);\
+	if test "$$target_found" != "y" ; then\
+		echo No rule to make target $@;\
+		exit 1;\
+	fi
+
+docs_$(SUBSYSTEM): _deps_$(SUBSYSTEM)_
+	mkdir -p $(OUT_DOCS_DIR)
+	sed -e 's@%OUT_DOCS_DIR@$(OUT_DOCS_DIR)@g' -e 's@%MODEL_DIR@$(OUT_$(UC_SUBSYSTEM)_DIR)/common/model/$(PLATFORM)@g' \
+		-e 's@%API_DIR@$(TOP_DIR)/$(SUBSYSTEM)/api/$(PLATFORM)@g' doc_config/Doxyfile > $(OUT_DOCS_DIR)/Doxyfile
+	doxygen $(OUT_DOCS_DIR)/Doxyfile
+ 
diff --git a/bcm68620_release/release/make/Makefile.rules b/bcm68620_release/release/make/Makefile.rules
new file mode 100644
index 0000000..21f4c0c
--- /dev/null
+++ b/bcm68620_release/release/make/Makefile.rules
@@ -0,0 +1,495 @@
+# Common Makefile rules
+#
+
+# For linux_lib we don't build anything. Object files are just added
+# when compiling modules depending on the libs
+
+ifeq  ("$(MOD_TYPE)", "linux_lib")
+	# Skip libraries that might have crept in dependencies
+    SKIP_LIB_MODULES = y
+    export SKIP_LIB_MODULES
+endif    
+
+ifeq  ("$(MOD_TYPE)", "linux_module")
+	# Skip libraries that might have crept in dependencies
+    SKIP_LIB_MODULES = y
+    export SKIP_LIB_MODULES
+endif    
+
+ifeq ("$(MOD_TYPE)", "lib")
+    MODULE_IS_A_LIBRARY = y
+else ifeq ("$(MOD_TYPE)", "shared_lib")
+    MODULE_IS_A_LIBRARY = y
+else
+    MODULE_IS_A_LIBRARY = n
+endif
+
+# Include module's own auto-generated Makefile.config.$(MODULE) file if any
+# It in turn includes all dependencies
+ifeq (x"$(V)", x"2")
+    $(info !!!MOD_NAME=$(MOD_NAME) MOD_TYPE=$(MOD_TYPE) MOD_TARGET=$(MOD_TARGET))
+    $(info !!!Including own dependency file: $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME))
+endif
+-include $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
+ifeq (x"$(V)", x"2")
+    $(info !!!After include of $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME))
+endif
+
+ifeq (x"$(V)", x"2")
+    $(info !!! Building $(MOD_TYPE) module $(MOD_NAME): depends on $(MOD_DEPS_FILES) SKIP_LIBS=$(SKIP_LIB_MODULES))
+endif
+
+# Skip default rules for custom module
+ifneq  ("$(MOD_CUSTOM)", "y")
+ 
+# Default lib rule
+ifeq  ("$(MOD_TYPE)", "lib")
+
+ifeq ("$(SKIP_LIB_MODULES)", "y")
+
+$(MOD_TARGET): 
+
+else
+
+# Rule to compile all module's C files in one go
+ifeq ("$(COMPILE_ALL_IN_ONE_GO)", "y") 
+
+$(MOD_TARGET): $(SRCS) $(AS_OBJS) $(as_OBJS)
+
+# Create library if there are any objects 
+ifneq ("$(SRCS)$(AS_SRCS)$(as_SRCS)$(GEN_SRCS)", "")
+
+ifneq  ("$(SRCS)$(GEN_SRCS)", "")
+ifeq (x"$(V)", x"0")
+	@echo "CC $(srcs) $(gen_srcs)"
+endif	
+	$(SILENT_BUILD)mkdir -p $(dir $@)
+	$(SILENT_BUILD)cd $(dir $@) && $(BLD_CC) $(CFLAGS) -c $(SRCS) $(GEN_SRCS)
+endif
+	$(SILENT_BUILD)cd $(dir $@) && $(BLD_AR) $(ARFLAGS) $@ $(OBJS)
+	$(SILENT_BUILD)touch $(OUT_DIR_BASE)/.$(MOD_NAME)
+	@$(BOLD_PRINT) "done: $@"
+# ifneq ("$(SRCS)$(AS_SRCS)$(as_SRCS)$(GEN_SRCS)", "")
+endif
+
+# ifeq ("$(COMPILE_ALL_IN_ONE_GO)", "y")
+else
+
+# Create library if there are any objects 
+$(MOD_TARGET): $(OBJS)
+ifneq ("$(OBJS)", "")
+	$(SILENT_BUILD)$(BLD_AR) $(ARFLAGS) $@ $(OBJS)
+	$(SILENT_BUILD)touch $(OUT_DIR_BASE)/.$(MOD_NAME)
+	@$(BOLD_PRINT) "done: $@"
+endif
+
+# end of ifeq ($(COMPILE_ALL_IN_ONE_GO), "y")
+endif
+
+# end of ifeq ("$(SKIP_LIB_MODULES)", "y")
+endif
+
+# end of ifeq  ("$(MOD_TYPE)", "lib")
+endif
+ 
+# Default shared_lib rule
+ifeq  ("$(MOD_TYPE)", "shared_lib")
+
+EXTRA_CFLAGS += -fPIC
+
+# Create library if there are any objects 
+$(MOD_TARGET): $(OBJS)
+ifneq ("$(OBJS)", "")
+	$(SILENT_BUILD)$(BLD_CC) -shared -rdynamic -o $@ $(OBJS) $(LFLAGS)
+	$(SILENT_BUILD)mkdir -p $(SHARED_LIB_PATH)/
+	$(SILENT_BUILD)cp $@ $(SHARED_LIB_PATH)/
+	@$(BOLD_PRINT) "done: $@"
+endif
+	$(SILENT_BUILD)touch $(OUT_DIR_BASE)/.$(MOD_NAME)
+
+# end of ifeq  ("$(MOD_TYPE)", "shared_lib")
+endif
+
+# Default app rule
+ifeq  ("$(MOD_TYPE)", "app")
+
+# Currently, ThreadX image doesn't support any applications, apart from the
+# image itself. Disable building applications for ThreadX
+ifneq ("$(OS)", "threadx")
+
+$(MOD_TARGET): $(OBJS) $(MOD_DEPS_FILES)
+	$(SILENT_BUILD)$(BLD_CC) -o $@ $(OBJS) $(LFLAGS) $(EXTRA_LIBS_PATH) $(LIBS_START_MARKER) $(EXTRA_LIBS) $(LIBS_END_MARKER) $(LIBS)
+	$(SILENT_BUILD)touch $(OUT_DIR_BASE)/.$(MOD_NAME)
+	@$(BOLD_PRINT) "done: $(OUT_DIR)/$(MOD_NAME)"
+
+# else of ifneq ("$(OS)", "threadx")
+else
+
+$(MOD_TARGET):
+
+
+# endif of ifneq ("$(OS)", "threadx")
+endif
+
+# endif of ifeq  ("$(MOD_TYPE)", "app")
+endif
+
+# For linux_lib we don't build anything. Object files are just added
+# when compiling modules depending on the libs
+ifeq  ("$(MOD_TYPE)", "linux_lib")
+    LINUX_LIB_OBJECTS := $(srcs:%.c=$(SRC_DIR)/%.o)
+
+$(MOD_TARGET): $(SRCS) $(GEN_SRCS) $(MOD_DEPS_FILES)
+	$(SILENT_BUILD)touch $(MOD_TARGET)
+	$(SILENT_BUILD)touch $(OUT_DIR_BASE)/.$(MOD_NAME)
+
+endif
+
+# Default linux_module$(srcs:%=$(SRC_DIR)/%)
+ifeq  ("$(MOD_TYPE)", "linux_module")
+    obj-m    += $(MOD_NAME).o
+    $(MOD_NAME)-objs := $(srcs:%.c=%.o)
+    LIB_OBJS_REL_PATH = $(foreach oo,$(ALL_LIB_OBJS),$(shell python -c "import os.path; print os.path.relpath('$(oo)', '$(SRC_DIR)')"))
+
+    _KERNEL_MAKEPARMS = -C $(KERNELDIR) M=$(SRC_DIR) KBUILD_EXTRA_SYMBOLS="$(KBUILD_EXTRA_SYMBOLS)" \
+    	O=$(KERNEL_OUTDIR) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(CROSS_COMPILE) V=$(V) EXTRA_CFLAGS="$(EXTRA_CFLAGS)" \
+    	obj-m=$(obj-m) $(MOD_NAME)-objs="$($(MOD_NAME)-objs) $(LIB_OBJS_REL_PATH)"
+    KERNEL_MAKEPARMS = $(_KERNEL_MAKEPARMS:%os_abstraction/posix=%os_abstraction/linux)
+
+	# Prevent parallel build    
+.NOTPARALLEL:
+
+    # Only build linux module if not already being built by another make thread.
+    # Otherwise, linux build system get confused
+    # Also, remove -s flag using MAKEFLAGS. Otherwise, linux build system will not print names of the files
+    # being compiled
+$(MOD_TARGET): $(SRCS) $(MOD_DEPS_FILES)
+ifneq  ("$(SRC_DIR)", "$(TOP_DIR)/$(MOD_DIR)")
+	@cp -f $(TOP_DIR)/$(MOD_DIR)/Makefile $(SRC_DIR)
+endif
+	$(SILENT_BUILD)if [ ! -f $(SRC_DIR)/.$(MOD_NAME)_in_progress ]; then \
+		touch $(SRC_DIR)/.$(MOD_NAME)_in_progress; \
+		MAKEFLAGS= $(MAKE) $(KERNEL_MAKEPARMS) ;\
+		if [[ "$$?" != "0" ]]; then \
+			rm -f $(SRC_DIR)/.$(MOD_NAME)_in_progress;\
+			exit -2;\
+		fi; \
+		mkdir -p $(OUT_DIR_BASE)/linux_modules ;\
+		touch -c $(MOD_TARGET) ;\
+		cp $(SRC_DIR)/$(MOD_NAME).ko $(OUT_DIR_BASE)/linux_modules/ ;\
+		touch $(OUT_DIR_BASE)/.$(MOD_NAME) ;\
+		$(BOLD_PRINT) "done: $(MOD_TARGET)" ;\
+		rm -f $(SRC_DIR)/.$(MOD_NAME)_in_progress ;\
+	fi
+
+# Take care of compiling generated code for linux kernel
+ifneq  ("$(SRC_DIR)", "$(TOP_DIR)/$(MOD_DIR)")
+
+$(SRC_DIR)/%.c : $(CODEGEN_OUTPUT_DIR)/../%.c
+	$(SILENT_BUILD)cp -f $(CODEGEN_OUTPUT_DIR)/../*.[c,h] $(SRC_DIR)/
+
+$(SRC_DIR)/%.h : $(CODEGEN_OUTPUT_DIR)/../%.h
+	$(SILENT_BUILD)cp -f $(CODEGEN_OUTPUT_DIR)/../*.[c,h] $(SRC_DIR)/
+
+endif
+
+# End of MOD_TYPE==linux_module
+endif
+
+else
+# only for MOD_CUSTOM include Module Makefile second time for propagate  
+# custom rules, first time included in Makefile.config for all modules 
+include $(SRC_DIR)/Makefile
+# End of ifneq ($(MOD_CUSTOM), y)
+endif
+
+$(OUT_DIR)/%.o: $(SRC_DIR)/%.c $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
+ifeq (x"$(V)", x"0")
+	@echo "CC $<"
+endif
+	$(SILENT_BUILD)mkdir -p $(dir $@)
+	$(SILENT_BUILD)$(BLD_CC) $(CFLAGS) -D__BASENAME__=`basename $<` -c -o $@ $<
+ifeq (x"$(USE_LINT)", x"yes")
+ifeq (x"$(V)", x"0")
+	@echo "LINT $<"
+endif
+	$(SILENT_BUILD)FORCE_LINT=$(FORCE_LINT) $(MAKE_DEVICE_DIR)/lint.sh $(LINT_FLAGS) $(filter -I% -D%, $(CFLAGS)) $< || { rm $@; false; }
+endif
+ifeq (x"$(USE_CLANG)", x"y")
+ifeq (x"$(V)", x"0")
+	_fn=`basename "$<" .c` ;\
+	eval "_disable_fn_set=\$${DISABLE_CLANG_$$_fn}"; \
+	if test "$$_disable_fn_set" != "y" ; then echo "CLANG $<"; else echo "CLANG $< ... skipped"; fi
+endif
+	_fn=`basename "$<" .c` ;\
+	eval "_disable_fn_set=\$${DISABLE_CLANG_$$_fn}"; \
+	if test "$$_disable_fn_set" != "y" ; then  $(CLANG) $(CLANG_FLAGS) -c $< -o $@.clang && rm -f $@.clang; fi
+# ifeq (x"$(USE_CLANG)", x"y")	
+endif	
+
+$(OUT_DIR)/%.o: $(SRC_DIR)/%.s $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
+ifeq (x"$(V)", x"0")
+	@echo "AS $<"
+endif
+	$(SILENT_BUILD)mkdir -p $(dir $@)
+	$(SILENT_BUILD)$(BLD_AS) $(asFLAGS) -o $@ $<
+
+$(OUT_DIR)/%.o: $(SRC_DIR)/%.S $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
+ifeq (x"$(V)", x"0")
+	@echo "AS $<"
+endif
+	$(SILENT_BUILD)mkdir -p $(dir $@)
+	$(SILENT_BUILD)$(BLD_CC) $(ASFLAGS) -o $@ $<
+
+
+$(OUT_DIR)/%.d: $(SRC_DIR)/%.c $(SRC_DIR)/Makefile
+ifneq ("$(BUILD_DEPS_IN_CC)", "y")
+ifeq (x"$(V)", x"0")
+	@echo "DP $<"
+endif
+	$(SILENT_BUILD)mkdir -p $(dir $@)
+	$(SILENT_BUILD)$(BLD_DEP) -MM -MT $(@:.d=.o) $(DEP_FLAGS) $<  > $@ && sed 's,\($*\.o\)[ :]*,\1 $@ : ,g' -i $@
+endif
+
+$(CODEGEN_OUTPUT_DIR)/%.o: $(CODEGEN_OUTPUT_DIR)/%.c $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
+ifeq (x"$(V)", x"0")
+	@echo "CC $<"
+endif
+	$(SILENT_BUILD)mkdir -p $(dir $@)
+	$(SILENT_BUILD)$(BLD_CC) $(CFLAGS) -D__BASENAME__=`basename $<` -c -o $@ $<
+
+$(CODEGEN_OUTPUT_DIR)/%.d: $(CODEGEN_OUTPUT_DIR)/%.c $(SRC_DIR)/Makefile
+ifneq ("$(BUILD_DEPS_IN_CC)", "y")
+ifeq (x"$(V)", x"0")
+	@echo "DP $<"
+endif
+	$(SILENT_BUILD)mkdir -p $(dir $@)
+	$(SILENT_BUILD)$(BLD_DEP) -MM -MT $(@:.d=.o) $(DEP_FLAGS) $<  > $@ && sed 's,\($*\.o\)[ :]*,\1 $@ : ,g' -i $@
+endif
+
+ifneq ("$(SKIP_DEPS)", "yes")
+ifneq  ("$(MOD_TYPE)", "linux_module")
+ifneq  ("$(MOD_TYPE)", "linux_lib")
+-include $(OBJS:.o=.d)
+endif
+endif
+endif
+
+BUILD_UNITEST = $(UNITEST)
+ifeq  ("$(OBJS)", "")
+    BUILD_UNITEST = n
+endif    
+ifeq ("$(OS)", "threadx")
+    BUILD_UNITEST = n
+endif    
+
+# Only build unitest if library objects are included
+ifeq  ("$(BUILD_UNITEST)", "y")
+
+unitest: $(OUT_DIR)/unitest
+
+$(OUT_DIR)/unitest: $(OUT_DIR)/unitest.o $(TARGET_LIB_FNAME) $(MOD_DEPS_FILES)
+	$(SILENT_BUILD)$(BLD_CC) -o $@ $(OUT_DIR)/unitest.o $(LFLAGS) $(EXTRA_LIBS_PATH) $(LIBS_START_MARKER) $(EXTRA_LIBS) $(LIBS_END_MARKER) $(LIBS)
+	$(SILENT_BUILD)touch $(OUT_DIR_BASE)/.$(MOD_NAME)
+	@$(BOLD_PRINT) "done: $@"
+
+# else of ifneq  ("$(BUILD_UNITEST)", "y")
+else 
+
+unitest: $(TARGET_LIB_FNAME) $(MOD_DEPS_FILES)
+	
+# endif of ifneq  ("$(BUILD_UNITEST)", "y")
+endif
+
+# Generate version header
+MODEL_REVISION_FILE = $(MODEL_OUT_DIR)/bcmolt_model_revision.h 
+
+ifneq ("$(RELEASE_BUILD)", "y")
+$(MODEL_REVISION_FILE): $(MODEL_FILE)
+	mkdir -p $(MODEL_OUT_DIR)
+	@$(TOP_DIR)/scripts/update_model_revision.sh $< $@
+
+# Generate sources if necessary
+ifneq ("$(GEN_SRCS)", "")
+ifneq ("$(CUSTOM_CODEGEN)", "y")
+
+$(CODEGEN_OUTPUT_DIR)/.generated: $(MODEL_FILE) $(wildcard $(CODEGEN_DIR)/*) $(wildcard $(CODEGEN_INPUT_DIR)/*) $(MODEL_REVISION_FILE)
+	$(SILENT_BUILD)rm -fr $@
+	@echo "Generating code in $(CODEGEN_OUTPUT_DIR) from model..."
+	@mkdir -p $(CODEGEN_OUTPUT_DIR)
+	$(SILENT_BUILD)$(MONO_PATH) $(CODEGEN_EXE) --genobjmodel -objtags=$(GEN_OBJTAGS) -objset=$(MODEL_FILE) \
+	      $(GEN_EXTRA_TYPES) -templatedir=$(CODEGEN_INPUT_DIR) -outdir=$(CODEGEN_OUTPUT_DIR)
+	$(SILENT_BUILD)touch $@
+	@echo "Code generation in $(CODEGEN_OUTPUT_DIR) complete!"
+
+$(GEN_SRCS): $(CODEGEN_OUTPUT_DIR)/.generated
+
+# ifneq ("$(CUSTOM_CODEGEN)", "y")
+endif
+
+# ifneq  ("$(GEN_SRCS)", "") 
+endif
+
+# ifneq ("$(RELEASE_BUILD)", "y")
+endif
+
+#
+# Dependency rules generation: --> Makefile.config.$(MOD_NAME)
+# 
+
+MOD_CONFIG_FILE = $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
+MOD_CONFIG_DEF  = $(MOD_NAME)_DEP_DEFINED
+ifneq ("$(MOD_INC_DIRS)", "")
+    # Make sure that each directory is an absolute path
+    MOD_INCS = $(addprefix -I$(TOP_DIR)/, $(subst $(TOP_DIR)/,,$(MOD_INC_DIRS)))
+else
+	MOD_INCS = -I$(SRC_DIR)
+endif
+
+# 
+# Generate Makefile.config.$(MODULE) capable of re-creating the module
+#
+moddep: $(GEN_SRCS)
+ifeq (x"$(V)", x"3")
+	@echo "!!!!!  moddep for  MOD_NAME=$(MOD_NAME) MOD_TYPE=$(MOD_TYPE) MOD_CUSTOM=$(MOD_CUSTOM)!!!"
+endif
+	$(SILENT_BUILD)mkdir -p $(OUT_DIR_BASE)
+	@rm -fr $(MOD_CONFIG_FILE)
+	@rm -fr $(OBJS:.o=.d)
+
+	@echo "ifeq (x\"$$""(V)\", x\"2\")"  >> $(MOD_CONFIG_FILE)
+	@echo "    $$""(info !!! MODULE=$$""(MOD_NAME) --> $(MOD_CONFIG_FILE): $(MOD_CONFIG_DEF)=$$""($(MOD_CONFIG_DEF)), DEPS=$(MOD_DEPS))" >> $(MOD_CONFIG_FILE)
+	@echo "endif"  >> $(MOD_CONFIG_FILE)
+
+    # Prevent double inclusion 
+	@echo "ifneq (\"$$""($(MOD_CONFIG_DEF))\", \"y\")" >> $(MOD_CONFIG_FILE)
+	@echo "" >> $(MOD_CONFIG_FILE)
+	@echo "$(MOD_CONFIG_DEF) := y" >> $(MOD_CONFIG_FILE)
+
+    ifeq  ("$(MODULE_IS_A_LIBRARY)", "y")
+		@echo "_skip_it := y" >> $(MOD_CONFIG_FILE)
+    else
+		@echo "_skip_it := n" >> $(MOD_CONFIG_FILE)
+    endif
+	@echo "ifneq (\"$$""(SKIP_LIB_MODULES)\", \"y\")" >> $(MOD_CONFIG_FILE)
+	@echo "    _skip_it := n" >> $(MOD_CONFIG_FILE)
+	@echo "endif" >> $(MOD_CONFIG_FILE)
+
+	@echo "ifneq (\"$$""(_skip_it)\", \"y\")"  >> $(MOD_CONFIG_FILE)
+
+    ifeq  ("$(MODULE_IS_A_LIBRARY)", "y")
+        ifneq ("$(OBJS)", "")
+			@echo "EXTRA_LIBS += $(LIBS_MARKER)$(TARGET_LIB)" >> $(MOD_CONFIG_FILE)
+			@echo "EXTRA_LIBS_PATH += $(LIBS_PATH_MARKER)$(OUT_DIR)" >> $(MOD_CONFIG_FILE)
+        endif
+        ifneq ("$(MOD_LIBS)", "")
+			@echo "EXTRA_LIBS += $(MOD_LIBS)" >> $(MOD_CONFIG_FILE)
+        endif
+		@echo "ifneq (x\"$$""(MOD_NAME)\", x\"$(MOD_NAME)\")"  >> $(MOD_CONFIG_FILE)
+		@echo "   MOD_DEPS_FILES += $(OUT_DIR_BASE)/.$(MOD_NAME)"  >> $(MOD_CONFIG_FILE)
+		@echo "endif"  >> $(MOD_CONFIG_FILE)
+        ifneq ("$(startup_src)", "")
+			@echo "" >> $(MOD_CONFIG_FILE)
+			@echo "ENTRY_POINT_SRC = $(SRC_DIR)/$(startup_src)"   >> $(MOD_CONFIG_FILE)
+			@echo "" >> $(MOD_CONFIG_FILE)
+        endif
+    endif
+
+    ifeq  ("$(MOD_TYPE)", "linux_lib")
+        ifneq ("$(OBJS)", "")
+			@echo "ALL_LIB_OBJS += $(LINUX_LIB_OBJECTS)"  >> $(MOD_CONFIG_FILE)
+        endif
+		@echo "ifneq (x\"$$""(MOD_NAME)\", x\"$(MOD_NAME)\")"  >> $(MOD_CONFIG_FILE)
+		@echo "   MOD_DEPS_FILES += $(OUT_DIR_BASE)/.$(MOD_NAME)"  >> $(MOD_CONFIG_FILE)
+		@echo "endif"  >> $(MOD_CONFIG_FILE)
+    endif
+
+    ifeq  ("$(MOD_TYPE)", "linux_module")
+		@echo "ifneq (x\"$$""(MOD_NAME)\", x\"$(MOD_NAME)\")"  >> $(MOD_CONFIG_FILE)
+			@echo "   KBUILD_EXTRA_SYMBOLS += $(SRC_DIR)/Module.symvers" >> $(MOD_CONFIG_FILE)
+			@echo "   MOD_DEPS_FILES += $(OUT_DIR_BASE)/.$(MOD_NAME)"  >> $(MOD_CONFIG_FILE)
+		@echo "endif"  >> $(MOD_CONFIG_FILE)
+    endif
+
+    # Module creation rules
+	@echo "$(MOD_NAME)_$(SUBSYSTEM): $(OUT_DIR_BASE)/.$(MOD_NAME)"  >> $(MOD_CONFIG_FILE)
+	@echo ""  >> $(MOD_CONFIG_FILE)
+	@echo "$(OUT_DIR_BASE)/.$(MOD_NAME): .FORCE"   >> $(MOD_CONFIG_FILE)
+    ifeq  ("$(MOD_CUSTOM)", "y")
+		@echo "		$$""(MAKE) MOD_DIR=$(MOD_DIR) -f $(MAKE_DIR)/Makefile.template $(MOD_TARGET)" >> $(MOD_CONFIG_FILE)
+    else
+    ifneq  ("$(OBJS)", "")
+		@echo "		$$""(MAKE) MOD_DIR=$(MOD_DIR) -f $(MAKE_DIR)/Makefile.template $(MOD_TARGET)" >> $(MOD_CONFIG_FILE)
+    endif
+    ifeq  ("$(OBJS)", "")
+		@echo "		if [ ! -f $(OUT_DIR_BASE)/.$(MOD_NAME) ]; then touch $(OUT_DIR_BASE)/.$(MOD_NAME); fi" >> $(MOD_CONFIG_FILE)
+    endif
+    endif
+	@echo ""  >> $(MOD_CONFIG_FILE)
+	@echo ".FORCE:"   >> $(MOD_CONFIG_FILE)
+	@echo ""  >> $(MOD_CONFIG_FILE)
+
+    ifneq ("$(MOD_DEFS)", "")
+		@echo "EXTRA_CFLAGS += $(MOD_DEFS)" >> $(MOD_CONFIG_FILE)
+    endif
+	
+	@echo "endif"  >> $(MOD_CONFIG_FILE)
+
+    # If it is a library and this file is included as someone's dependency - extend MOD_DEP_FULL_NAMES
+    # and generate a rule to rebuilt the library
+    ifneq ("$(MOD_DEPS)", "")
+		@echo "ifeq (x\"$$""(V)\", x\"2\")"  >> $(MOD_CONFIG_FILE)
+		@echo "   $$""(info !!! Now include dependencies $(MOD_DEPS))" >> $(MOD_CONFIG_FILE)
+		@echo "endif"  >> $(MOD_CONFIG_FILE)
+		@echo "$(MOD_NAME)_MOD_DEPS = $(MOD_DEPS)" >> $(MOD_CONFIG_FILE)
+		@echo "ifneq (x\"$$""(SKIP_DEPS)\", x\"yes\")"  >> $(MOD_CONFIG_FILE)
+		@echo "include $$""($(MOD_NAME)_MOD_DEPS:%=$(OUT_DIR_BASE)/Makefile.config.%)" >> $(MOD_CONFIG_FILE)
+		@echo "endif"  >> $(MOD_CONFIG_FILE)
+		@echo "ifeq (x\"$$""(V)\", x\"2\")"  >> $(MOD_CONFIG_FILE)
+		@echo "   $$""(info !!! $(MOD_NAME) finished including dependencies)" >> $(MOD_CONFIG_FILE)
+		@echo "endif"  >> $(MOD_CONFIG_FILE)
+    endif
+
+	@echo "EXTRA_CFLAGS += $(MOD_INCS)" >> $(MOD_CONFIG_FILE)
+
+	@echo "" >> $(MOD_CONFIG_FILE)
+	@echo "endif" >> $(MOD_CONFIG_FILE)
+# 
+# end of moddep: target
+#
+
+clean_module:
+ifeq  ("$(MOD_TYPE)", "linux_module")
+	$(SILENT_BUILD)-test -f $(SRC_DIR)/Makefile && $(MAKE) $(KERNEL_MAKEPARMS) clean
+	$(SILENT_BUILD)cd $(SRC_DIR) && rm -fr $($(MOD_NAME)-objs) $($(MOD_NAME)-objs:../%=../.%.cmd)
+	$(SILENT_BUILD)rm -fr $(OUT_DIR_BASE)/linux_modules/$(MOD_NAME).ko
+endif
+ifeq  ("$(MOD_TYPE)", "linux_lib")
+	$(SILENT_BUILD)rm -fr $(LINUX_LIB_OBJECTS)
+endif	
+	$(SILENT_BUILD)cd $(SRC_DIR) && rm -fr $(patsubst %.c,.%.o.cmd,$(srcs))
+	$(SILENT_BUILD)[ ! -d $(OUT_DIR) ] || find $(OUT_DIR) -name '*.[o,d,a]' -print0 | xargs -0 rm -rf
+	$(SILENT_BUILD)[ ! -d $(OUT_DIR) ] || find $(OUT_DIR) -name '*~'        -print0 | xargs -0 rm -rf
+	$(SILENT_BUILD)[ ! -d $(OUT_DIR) ] || find $(OUT_DIR) -name '*.ko'      -print0 | xargs -0 rm -rf
+	$(SILENT_BUILD)[ ! -d $(OUT_DIR) ] || find $(OUT_DIR) -name '.*.cmd'    -print0 | xargs -0 rm -rf
+	$(SILENT_BUILD)rm -fr $(SRC_DIR)/*.mod.c $(SRC_DIR)/modules.order $(SRC_DIR)/Module.symvers $(SRC_DIR)/.tmp_versions
+	$(SILENT_BUILD)rm -fr $(MOD_TARGET) $(OUT_DIR)/$(TARGET) $(OUT_DIR)/unitest $(TARGET_LIB_FNAME)
+	$(SILENT_BUILD)rm -fr $(ALL_LIB_OBJS)
+	$(SILENT_BUILD)rm -fr $(GEN_SRCS) $(CODEGEN_OUTPUT_DIR)/.generated
+ifneq ("$(MOD_NAME)", "")
+	$(SILENT_BUILD)rm -fr $(OUT_DIR_BASE)/.$(MOD_NAME)
+	$(SILENT_BUILD)rm -fr $(SRC_DIR)/.$(MOD_NAME)_in_progress
+endif	
+    
+clobber: clean_module
+	$(SILENT_BUILD)rm -fr $(OUT_DIR)
+
+# Optional platform-specific rules
+-include $(MAKE_DEVICE_DIR)/Makefile.$(SUBSYSTEM).rules
+
+# Generate board-specific environment if any
+board_env: $(BOARD_ENV_RULE)
+	
+
+module_name:
+	$(info $(MOD_NAME))
diff --git a/bcm68620_release/release/make/Makefile.template b/bcm68620_release/release/make/Makefile.template
new file mode 100644
index 0000000..633e962
--- /dev/null
+++ b/bcm68620_release/release/make/Makefile.template
@@ -0,0 +1,12 @@
+# Central Makefile template
+# Builds specific module
+# Input parameters:
+# MOD_DIR
+# TOP_DIR
+
+ifeq (x"$(V)", x"1")
+    $(info Building module $(MOD_DIR))
+endif
+
+include $(MAKE_DIR)/Makefile.config
+include $(MAKE_DIR)/Makefile.rules
diff --git a/bcm68620_release/release/make/bcm68620/Makefile.host.config b/bcm68620_release/release/make/bcm68620/Makefile.host.config
new file mode 100644
index 0000000..6f42b11
--- /dev/null
+++ b/bcm68620_release/release/make/bcm68620/Makefile.host.config
@@ -0,0 +1,23 @@
+# Maple host configuration
+#
+# Set environment, extra flags, etc.
+# In particular, set CROSS_COMPILE
+# For linux environment make sure to set also OS_KERNEL=linux, KERNELDIR, KERNEL_OUTDIR and KERNEL_ARCH
+ifneq ("$(BOARD)", "")
+    include $(MAKE_DEVICE_DIR)/board.$(BOARD).config
+endif
+
+include $(MAKE_DEVICE_DIR)/$(TOOLCHAIN).opts
+
+export KERNELDIR
+export KERNEL_OUTDIR
+export KERNEL_ARCH
+export OS_KERNEL
+
+ifeq ("$(USE_ONU_SIM)", "y")
+    CFLAGS += -DCONFIG_ONU_SIM
+    export CONFIG_ONU_SIM := y
+endif
+
+LINT_FLAGS = -e686 $(MAKE_DEVICE_DIR)/gcc.lnt $(MAKE_DEVICE_DIR)/config.lnt
+
diff --git a/bcm68620_release/release/make/bcm68620/Makefile.host.rules b/bcm68620_release/release/make/bcm68620/Makefile.host.rules
new file mode 100644
index 0000000..54c4c44
--- /dev/null
+++ b/bcm68620_release/release/make/bcm68620/Makefile.host.rules
@@ -0,0 +1,7 @@
+# Maple host rules
+#
+# Platform/board-specific rules
+# In particular, set BOARD_ENV_RULE if there is anything board-specific to be done
+ifneq ("$(BOARD)", "")
+    -include $(MAKE_DEVICE_DIR)/board.$(BOARD).rules
+endif
diff --git a/bcm68620_release/release/make/bcm68620/armcc.lnt b/bcm68620_release/release/make/bcm68620/armcc.lnt
new file mode 100644
index 0000000..99aa766
--- /dev/null
+++ b/bcm68620_release/release/make/bcm68620/armcc.lnt
@@ -0,0 +1,5 @@
+-i/projects/xpon_co_lint/sources/supp/lnt
+co-ARMCC-5.lnt
+-i/tools/arm/DS-5_5.18.0/Linux-64/include
+-d"__int64=long long"
+
diff --git a/bcm68620_release/release/make/bcm68620/board.remote_wrx.config b/bcm68620_release/release/make/bcm68620/board.remote_wrx.config
new file mode 100644
index 0000000..57cfb32
--- /dev/null
+++ b/bcm68620_release/release/make/bcm68620/board.remote_wrx.config
@@ -0,0 +1,25 @@
+# Remote WRX board
+#
+export CONFIG_TRANSPORT_RAW = n
+
+ifeq ("$(SUBSYSTEM)", "embedded")
+    $(error Can't build embedded subsystem for this board)
+else
+    ARCH_FLAGS      += -EB -mabi=64
+    TOOLCHAIN_PATH  ?= /opt/toolchains/maple/toolchains_bin/mipscross/linux/bin
+    CROSS_COMPILE   = $(TOOLCHAIN_PATH)/mips64-nlm-linux-
+
+    # a kludge here. If CONFIG_TRANSPORT_RAW is not set, that means that we are building for 
+    # wrx, but not the same wrx where Maple is. For example, building for WRX that controls 
+    # switch directly and maple remotely. In this case, we don't want any board-specific stuff
+    # to be compiled in (e.g., FPGA, I2C, etc.).
+    override BOARD =
+    
+    # OS for user space 
+    OS              = posix
+    
+    SIMULATION_BUILD = y
+   
+endif
+
+
diff --git a/bcm68620_release/release/make/bcm68620/board.wrx.config b/bcm68620_release/release/make/bcm68620/board.wrx.config
new file mode 100644
index 0000000..99bdf12
--- /dev/null
+++ b/bcm68620_release/release/make/bcm68620/board.wrx.config
@@ -0,0 +1,112 @@
+# WRX board
+#
+
+# Use raw transport
+export CONFIG_TRANSPORT_RAW = y
+
+ENABLE_PMC   ?= y
+
+ifeq ("$(ENABLE_PMC)", "y")
+    EXTRA_CFLAGS   += -DBCM_PMC_EXIST
+endif
+
+ifeq ("$(SUBSYSTEM)", "embedded")
+    TOOLCHAIN = armcc
+    OS=threadx
+	    
+    # We use gcc for dependency generation in order to speed up the build process
+    GCCVER ?= 4.8.1
+    
+    # Use raw transport
+    # Should be moved go common host/embedded section when the host environment is ready
+    COMPILE_ALL_IN_ONE_GO ?= n
+    export COMPILE_ALL_IN_ONE_GO
+
+    # Definition for enable Periodic  ARM DS-5 license model, up to 4X improvement for compilation time 
+    # the output from the /tools/bin/get_lic_servers arm5-periodic is optimized for each site, the 
+    # "38224@lic-tlva-001:38224@lic-blr-001:38224@lic-irva-350:38224@lic-irva-000" string is valide for HZ site
+    export ARMLMD_LICENSE_FILE :=$(shell if [ -f /tools/bin/get_lic_servers ] ; then /tools/bin/get_lic_servers arm5-periodic ; \
+else echo "38224@lic-tlva-001.broadcom.net:38224@lic-blr-001.broadcom.net:38224@lic-irva-350.broadcom.net:38224@lic-irva-000.broadcom.net"; fi)
+    export ARMCC5_CCOPT        :=--sitelicense --licretry
+    export ARMCC5_ASMOPT       :=--sitelicense --licretry
+    export ARMCC5_LINKOPT      :=--sitelicense --licretry
+    export ARMCC5_FROMELFOPT   :=--sitelicense --licretry
+    export ARMCC5_AROPT        :=--sitelicense --licretry
+   
+    USE_UNCACHE_BW_MAP ?= n
+    export USE_UNCACHE_BW_MAP 
+    USE_UNCACHE_SR_NSR_COUNTERS ?= n
+    export USE_UNCACHE_SR_NSR_COUNTERS
+
+    ifeq ("$(SIMULATION)", "y")
+        EXTRA_DEFINES += -DSIMULATION
+    endif
+	
+	USE_SYM_TAB ?= y
+	export USE_SYM_TAB
+	
+	ifeq ("$(USE_SYM_TAB)", "y")
+		
+		export SYMTAB_GEN_TOOLS = $(TOP_DIR)/scripts/bcmSymTlbGen.sh 
+		
+		ifeq ("$(SYMTAB_NO_DATA)", "y")
+		    export SYMTAB_ND=-nd
+	    endif
+	
+	    ifeq ("$(SYMTAB_NO_LDATA)", "y")
+		   export SYMTAB_NLD=-nld
+	    endif
+	
+	    ifeq ("$(SYMTAB_NO_LFANC)", "y")
+		    export SYMTAB_NLF=-nlf
+	    endif
+		
+		EXTRA_DEFINES += -DUSE_SYM_TAB	
+		
+		export DUMMY_SYMTAB = $(TOP_DIR)/embedded/sys/bsp/symtab.c
+	endif
+    
+    ifeq ("$(ENABLE_TRACE)", "y")
+        EXTRA_DEFINES += -DTX_ENABLE_EVENT_TRACE
+        ifeq ("$(DEBUG_TRACE_INIT)", "y")
+            EXTRA_DEFINES += -DDEBUG_TRACE_INIT
+        endif
+    endif
+    	
+    INT_CHECK    ?= y
+    ifeq ("$(INT_CHECK)", "y")
+        EXTRA_DEFINES += -DINTERRUPT_VALIDATION
+    endif
+else
+    BOARD_DIR       ?= $(TOP_DIR)/../boards/cur/$(BOARD)
+    KERNEL_BRCM_VER = 3.0.2-m1.01
+    TOOLCHAIN_PATH  ?= /opt/toolchains/maple/toolchains_bin/mipscross/linux/bin
+    CROSS_COMPILE   = $(TOOLCHAIN_PATH)/mips64-nlm-linux-
+    
+    KERNELDIR       = $(BOARD_DIR)/linux/$(KERNEL_BRCM_VER)/linux
+    KERNEL_OUTDIR  ?= $(KERNELDIR)
+    export KERNELDIR
+    export KERNEL_OUTDIR
+
+
+    # use Linux kernel
+    export OS_KERNEL= linux
+    # OS for user space 
+    OS              = posix
+    
+    # Architecture definition   
+    KERNEL_ARCH     = mips
+    ARCH_FLAGS      += -EB -mabi=64
+    
+    export KERNEL_ARCH
+    export ARCH_FLAGS
+    
+    export KERNEL_TAR_NAME  = wrx_linux-sdk.tar.bz2
+    export LIBS_TAR_NAME    = libraries.tar.bz2
+    
+    # Rule tu build wrx kernel. The rule itself is defined in board.wrx.rules
+    export BOARD_ENV_RULE   = wrx_linux_kernel 
+    
+endif
+
+
diff --git a/bcm68620_release/release/make/bcm68620/board.wrx.rules b/bcm68620_release/release/make/bcm68620/board.wrx.rules
new file mode 100644
index 0000000..3546f5d
--- /dev/null
+++ b/bcm68620_release/release/make/bcm68620/board.wrx.rules
@@ -0,0 +1,26 @@
+# WRX-specific rules
+
+ifeq ("$(SUBSYSTEM)", "host")
+    # Build linux kernel if not done yet
+
+wrx_linux_kernel:
+	if [ ! -d $(BOARD_DIR) ]; then\
+		$(BOLD_PRINT) "ERROR: $(BOARD_DIR) directory doesn't not exist" ; \
+		exit -1; \
+	fi;\
+    if [ -f  $(KERNEL_OUTDIR)/vmlinux ] ; then \
+        $(BOLD_PRINT) "found compiled $(BOARD) kernel in $(KERNEL_OUTDIR)" ;\
+        exit 0;\
+    fi;\
+	if [ ! -f $(BOARD_DIR)/linux/$(KERNEL_BRCM_VER)/$(KERNEL_TAR_NAME) ]; then\
+		$(BOLD_PRINT) "ERROR: Kernel tar file doesn't exist. Please get the latest version of $(BOARD_DIR)/linux/$(KERNEL_BRCM_VER)/$(KERNEL_TAR_NAME) ";\
+		exit -1;\
+	fi;\
+	if [ ! -f $(BOARD_DIR)/linux/$(KERNEL_BRCM_VER)/$(LIBS_TAR_NAME) ]; then \
+		$(BOLD_PRINT) "ERROR: Kernel Libraries tar file not exists. Please get latest version of $(BOARD_DIR)/linux/$(KERNEL_BRCM_VER)/$(LIBS_TAR_NAME) ";\
+		exit -1;\
+	fi;\
+	$(BOLD_PRINT) "Building wrx kernel";\
+	cd $(BOARD_DIR);  $(MAKE)
+
+endif
diff --git a/bcm68620_release/release/make/bcm68620/gcc.lnt b/bcm68620_release/release/make/bcm68620/gcc.lnt
new file mode 100644
index 0000000..3a3c198
--- /dev/null
+++ b/bcm68620_release/release/make/bcm68620/gcc.lnt
@@ -0,0 +1,5 @@
+-i/projects/xpon_co_lint/sources/supp/lnt
+co-gcc.lnt
+-emacro(633, BUG_ON)
+-parent(va_list, __gnuc_va_list)
+-parent(va_list, __builtin_va_list)
diff --git a/bcm68620_release/release/make/bcm68620/gcc.opts b/bcm68620_release/release/make/bcm68620/gcc.opts
new file mode 100644
index 0000000..718b403
--- /dev/null
+++ b/bcm68620_release/release/make/bcm68620/gcc.opts
@@ -0,0 +1,53 @@
+# Maple SDK requires C99
+EXTRA_CFLAGS    += -Wall -Werror
+ARFLAGS = r
+
+BLD_CC = $(CCACHE) $(CROSS_COMPILE)gcc
+BLD_AS = $(CCACHE) $(CROSS_COMPILE)gcc
+BLD_AR = $(CROSS_COMPILE)ar
+BLD_DEP = $(BLD_CC)
+
+CFLAGS    += -std=c99
+ifeq ("$(ENABLE_EXTRA_WARNINGS)", "y")
+    CFLAGS    += -Wextra -Wbad-function-cast -Wcast-align -Wcast-qual -Wchar-subscripts
+    CFLAGS    += -Wmissing-prototypes -Wnested-externs -Wpointer-arith -Wredundant-decls
+    CFLAGS    += -Wstrict-prototypes -Wparentheses -Wswitch -Wswitch-default -Wunused -Wuninitialized -Wunused-but-set-variable
+    CFLAGS    += -Wno-unused-parameter -Wno-missing-field-initializers -Wno-sign-compare
+    CFLAGS    += -Wshadow -Wno-inline
+endif
+
+BUILD_DEPS_IN_CC    ?= y
+export BUILD_DEPS_IN_CC
+
+ifeq ("$(BUILD_DEPS_IN_CC)", "y")
+    CFLAGS += -MMD -MP
+endif
+
+ifeq ("$(CROSS_COMPILE)", "")
+    ARCH_FLAGS += -m32 -march=i386
+    SIMULATION_BUILD ?= y
+    export SIMULATION_BUILD
+    GCCVER ?= 4.8.1
+    export GCCVER
+    # Temporary, until bad cast in bcm_dev_log_task.c is fixed (SWMAPLE-2123)
+    CFLAGS += -Wno-strict-aliasing
+endif
+
+ifeq ("$(EXPORT_DYNAMIC_SYMBOLS)", "y")
+    ARCH_FLAGS += -Wl,-export-dynamic 
+endif
+
+ifneq ("$(SIMULATION_BUILD)", "y")
+    EXTRA_CFLAGS    += -Wframe-larger-than=16384
+endif
+
+LIBS_MARKER =-l
+LIBS_PATH_MARKER =-L
+LIBS_START_MARKER = -Wl,--start-group
+LIBS_END_MARKER = -Wl,--end-group
+
+# Debug and release optimization options. Can be overwritten in Makefile.config.$(PLATFORM)
+DEBUG_O_CFLAGS      ?= -g -ggdb -O0
+DEBUG_O_LFLAGS      ?= -g
+RELEASE_O_CFLAGS    ?= -g -O2
+RELEASE_O_LFLAGS    ?= -g
diff --git a/bcm68620_release/release/make/bcm68620/modules.host b/bcm68620_release/release/make/bcm68620/modules.host
new file mode 100644
index 0000000..a7a0f59
--- /dev/null
+++ b/bcm68620_release/release/make/bcm68620/modules.host
@@ -0,0 +1,67 @@
+host_customized/dev_ctrl_linux
+host_customized/coop_dba_linux
+host_customized/embedded_cli
+host_customized/embedded_cli/main
+host_customized/os_abstraction
+host_customized/os_abstraction/linux
+host_customized/os_abstraction/os_cli
+host_customized/transport/nl_socket
+host_customized/transport/unix_socket
+host_customized/transport/plugin
+host_customized/transport/plugin/mux
+host_customized/transport/plugin/raw_nl
+host_customized/transport/plugin/raw_ud
+host_customized/transport/plugin/udp
+host_customized/user_config
+host_customized/user_config/board_selector
+host_customized/ll_pcie
+host_customized/pcie
+host_customized/i2c
+host_customized/board/wrx
+host_customized/model_linux
+host_customized/utils_linux
+host_customized/api_linux
+host_customized/host_api_linux
+host_driver/api
+host_driver/utils
+host_driver/debug
+host_driver/dev_ctrl
+host_driver/coop_dba
+host_driver/dev_ctrl_daemon
+host_driver/dev_ctrl_daemon/user
+host_driver/host_api
+host_driver/keep_alive
+host_driver/keep_alive/daemon
+host_driver/model
+host_driver/pcie
+host_driver/transport/inband
+host_driver/transport
+host_driver/transport/mux
+host_driver/transport/mux/daemon
+host_driver/transport/pcie_sw_queue
+host_driver/fld
+host_driver/common_gpon
+host_reference/api_cli
+host_reference/device_selector
+host_reference/cli
+host_reference/dev_log
+host_reference/dev_log_linux
+host_reference/dev_log_linux/kernel
+host_reference/api_dev_log
+host_reference/linenoise
+host_reference/user_appl
+host_reference/user_appl/eon
+host_reference/user_appl/omon
+host_reference/user_appl/epon_hde
+host_reference/user_appl/protection_switching
+host_reference/user_appl/epon_oam
+host_reference/user_appl/epon_oam_cli
+host_reference/user_appl/image_transfer
+host_reference/user_appl/sw_upgrade
+host_reference/user_appl/playback
+host_reference/user_appl/dpoe_sec
+host_reference/user_appl/ngpon2_onu_tuning
+host_reference/api_proxy
+host_reference/remote_cli
+host_reference/common_epon_oam
+host_reference/time_measurement
diff --git a/bcm68620_release/release/make/clang.opts b/bcm68620_release/release/make/clang.opts
new file mode 100644
index 0000000..1b383ef
--- /dev/null
+++ b/bcm68620_release/release/make/clang.opts
@@ -0,0 +1,6 @@
+# CLANG options
+
+# CLANG tool
+export CLANG ?= clang
+export CLANG_OPTS = -Wno-unused-function
+export LLVMVER ?= 3.6
diff --git a/bcm68620_release/release/make/copy_host_fs.sh b/bcm68620_release/release/make/copy_host_fs.sh
new file mode 100755
index 0000000..7cffbf3
--- /dev/null
+++ b/bcm68620_release/release/make/copy_host_fs.sh
@@ -0,0 +1,31 @@
+#! /bin/bash
+
+#set -x
+
+HOST_FS_TARGET=${OUT_HOST_DIR}/fs
+HOST_OUTPUT_TARGET=${OUT_HOST_DIR}/output
+
+echo -n "Copying host fs to ${HOST_FS_TARGET}..."
+mkdir -p ${HOST_FS_TARGET}
+rm -fr ${HOST_FS_TARGET}/*
+pushd ${HOST_FS_TARGET}
+ln -s ${OUT_HOST_DIR}/linux_modules/* .
+ln -s ${TOP_DIR}/host_customized/board/wrx/fs/* .
+ln -s ${TOP_DIR}/embedded_binaries/* .
+ln -s ${OUT_HOST_DIR}/host_reference/user_appl/bcm_user_appl .
+popd
+
+echo -n "Copying all modules and libraries to ${HOST_OUTPUT_TARGET}..."
+mkdir -p ${HOST_OUTPUT_TARGET}
+rm -fr ${HOST_OUTPUT_TARGET}/*
+pushd ${HOST_OUTPUT_TARGET}
+ln -s ${OUT_HOST_DIR}/linux_modules/* .
+ln -s `find ${OUT_HOST_DIR} -name 'lib*.a'` .
+ln -s ${OUT_HOST_DIR}/host_reference/user_appl/bcm_user_appl .
+popd
+
+# Extract i2c addresses from bcmolt_i2c_devs_addr.h into the tail of a target file called i2c_addrs.sh. svk_init.sh will include i2c_addrs.sh to access i2c addresses.
+grep -w "BCM_I2C_DEV_ADDR" ${TOP_DIR}/host_customized/i2c/bcmolt_i2c_devs_addr.h | sed -s "s/BCM_I2C_DEV_ADDR(\(.*\), \(.*\), 0x\(.*\))/\1=\3/" >> ${HOST_FS_TARGET}/i2c_addrs.sh
+
+echo "Done"
+
diff --git a/bcm68620_release/release/sdk_scripts/gpon_scripts/gpon_activate_onu.vbs b/bcm68620_release/release/sdk_scripts/gpon_scripts/gpon_activate_onu.vbs
new file mode 100755
index 0000000..202a556
--- /dev/null
+++ b/bcm68620_release/release/sdk_scripts/gpon_scripts/gpon_activate_onu.vbs
@@ -0,0 +1,17 @@
+# $language = "VBScript"

+# $interface = "1.0"

+

+Sub SendApplicationCommand(shell_command)

+    crt.Screen.Send shell_command & VbCr & VbCr

+	crt.sleep 1000

+End Sub

+

+Sub main

+

+	pon_ni = inputbox("PON NI: [0-15]" )

+	onu = inputbox("ONU ID: [0-127]" )

+

+	SendApplicationCommand "/api/oper object=gpon_onu sub=set_onu_state pon_ni=" & pon_ni & " onu_id=" & onu & " onu_state=active"  

+	crt.sleep 5

+

+End Sub

diff --git a/bcm68620_release/release/sdk_scripts/gpon_scripts/gpon_clear_onu.vbs b/bcm68620_release/release/sdk_scripts/gpon_scripts/gpon_clear_onu.vbs
new file mode 100755
index 0000000..a8e0d67
--- /dev/null
+++ b/bcm68620_release/release/sdk_scripts/gpon_scripts/gpon_clear_onu.vbs
@@ -0,0 +1,17 @@
+# $language = "VBScript"

+# $interface = "1.0"

+

+Sub SendApplicationCommand(shell_command)

+    crt.Screen.Send shell_command & VbCr & VbCr

+	crt.sleep 1000

+End Sub

+

+Sub main

+

+		pon_ni = inputbox("PON NI: [0-15]" )

+		onu = inputbox("ONU ID: [0-127]" )

+

+	SendApplicationCommand "/api/clear object=gpon_onu pon_ni=" & pon_ni & " onu_id=" & onu & " "  

+	crt.sleep 10

+

+End Sub

diff --git a/bcm68620_release/release/sdk_scripts/gpon_scripts/gpon_config_alloc.vbs b/bcm68620_release/release/sdk_scripts/gpon_scripts/gpon_config_alloc.vbs
new file mode 100755
index 0000000..9b415e7
--- /dev/null
+++ b/bcm68620_release/release/sdk_scripts/gpon_scripts/gpon_config_alloc.vbs
@@ -0,0 +1,22 @@
+# $language = "VBScript"

+# $interface = "1.0"

+

+Sub SendApplicationCommand(shell_command)

+    crt.Screen.Send shell_command & VbCr & VbCr

+	crt.sleep 1000

+End Sub

+

+Sub main

+

+	pon_ni = inputbox("PON NI: [0-15]" )

+	onu = inputbox("ONU ID: [0-127]" )

+	alloc = inputbox("Alloc ID?" )

+

+	SendApplicationCommand "/~ off "

+	crt.sleep 100

+	

+	SendApplicationCommand "/api/set object=gpon_alloc pon_ni=" & pon_ni & " alloc_id=" & alloc & " onu_id=" & onu & " sla.cbr_rt_bw=5120000 sla.cbr_nrt_bw=0 sla.guaranteed_bw=5120000 sla.maximum_bw=5120000 sla.alloc_type=none sla.additional_bw_eligibility=none sla.cbr_rt_compensation=no sla.cbr_rt_ap_index=0 sla.cbr_nrt_ap_index=0 sla.weight=0 sla.priority=0"

+	crt.sleep 100

+	SendApplicationCommand "/~ on"

+

+End Sub

diff --git a/bcm68620_release/release/sdk_scripts/gpon_scripts/gpon_config_gem.vbs b/bcm68620_release/release/sdk_scripts/gpon_scripts/gpon_config_gem.vbs
new file mode 100755
index 0000000..1d8fa12
--- /dev/null
+++ b/bcm68620_release/release/sdk_scripts/gpon_scripts/gpon_config_gem.vbs
@@ -0,0 +1,22 @@
+# $language = "VBScript"

+# $interface = "1.0"

+

+Sub SendApplicationCommand(shell_command)

+    crt.Screen.Send shell_command & VbCr & VbCr

+	crt.sleep 1000

+End Sub

+

+Sub main

+

+	pon_ni = inputbox("PON NI: [0-15]" )

+	onu = inputbox("ONU ID: [0-127]" )

+	gem = inputbox("GEM PORT ID?" )

+	

+	SendApplicationCommand "/~ off "

+	crt.sleep 100

+	SendApplicationCommand "/api/set object=gpon_gem_port pon_ni=" & pon_ni & " gem_port_id=" & gem & " configuration.direction=bidirectional configuration.type=unicast onu_id=" & onu & " downstream_encryption_mode=disable upstream_destination_queue=data control=enable"

+	crt.sleep 100

+	SendApplicationCommand "/~ on "

+	crt.sleep 100

+

+End Sub

diff --git a/bcm68620_release/release/sdk_scripts/gpon_scripts/gpon_config_onu.vbs b/bcm68620_release/release/sdk_scripts/gpon_scripts/gpon_config_onu.vbs
new file mode 100755
index 0000000..422b792
--- /dev/null
+++ b/bcm68620_release/release/sdk_scripts/gpon_scripts/gpon_config_onu.vbs
@@ -0,0 +1,21 @@
+# $language = "VBScript"

+# $interface = "1.0"

+

+Sub SendApplicationCommand(shell_command)

+    crt.Screen.Send shell_command & VbCr & VbCr

+	crt.sleep 1000

+End Sub

+

+Sub main

+

+	pon_ni = inputbox("PON NI: [0-15]" )

+	onu = inputbox("ONU ID: [0-127]" )

+

+	SendApplicationCommand "/~ off "

+	crt.sleep 10

+	serial = string(8 - Len(onu), "0") & onu 

+	SendApplicationCommand "/api/set object=gpon_onu pon_ni=" & pon_ni & " onu_id=" & onu & " serial_number.vendor_id=00000000 ds_ber_reporting_interval=1000000 serial_number.vendor_specific=" & serial & " omci_port_id=" & onu

+	crt.sleep 10

+	SendApplicationCommand "/~ on "

+

+End Sub

diff --git a/bcm68620_release/release/sdk_scripts/gpon_scripts/gpon_maple_init.vbs b/bcm68620_release/release/sdk_scripts/gpon_scripts/gpon_maple_init.vbs
new file mode 100755
index 0000000..6b7a1de
--- /dev/null
+++ b/bcm68620_release/release/sdk_scripts/gpon_scripts/gpon_maple_init.vbs
@@ -0,0 +1,68 @@
+# $language = "VBScript"

+# $interface = "1.0"

+

+

+Sub Sleep(timewait)

+ 

+  If crt.screen.waitforstring("pause", timewait) = true then msgbox "surprise"

+  

+End Sub

+

+Sub SendShellCommand(shell_command)

+	crt.Screen.Send shell_command & VbCr

+End Sub

+

+sub main

+

+SendShellCommand("root")

+crt.Sleep 100

+SendShellCommand("root")

+crt.Sleep 100

+SendShellCommand("cd /opt/bcm68620/")

+crt.screen.WaitForString "#"

+crt.Sleep 100

+SendShellCommand("./svk_init.sh")

+crt.screen.WaitForString ">"

+crt.Sleep 1000

+crt.Screen.Send VbCr

+

+'mandatory

+SendShellCommand("/api/set object=device system_mode=gpon__16_x")

+crt.Sleep 50

+

+'Optional - configure the NNI speed in order to work with a 1g traffic generator

+SendShellCommand("/api/set object=device nni_speed.first_half=gbps_1 nni_speed.second_half=gbps_1 ")

+crt.Sleep 50

+

+'Optional - configure the PCIe dma queues sizes or configure the system not to fail on bad AVS check.  

+SendShellCommand("/api/set object=device debug.host_dma_rx_queue_size=128 debug.host_dma_tx_queue_size=128 debug.avs_control=yes")

+crt.Sleep 50

+

+'Optional - configure the keep alive parameters  

+SendShellCommand("/api/set object=device keepalive_interval=5 keepalive_tolerance=3")

+

+crt.Screen.Send VbCr

+crt.screen.WaitForString ">"

+crt.Sleep 50

+crt.Screen.Send VbCr

+

+

+SendShellCommand("/user/register_indication_handler")

+crt.Screen.Send VbCr

+crt.Screen.Send VbCr

+crt.screen.WaitForString ">"

+

+crt.Screen.Send VbCr

+crt.Sleep 50

+SendShellCommand("/user/register_proxy_rx_handler ")

+crt.Screen.Send VbCr

+crt.Sleep 50

+crt.Screen.Send VbCr

+SendShellCommand("/api/oper object=device sub=connect ")

+crt.Screen.Send VbCr

+crt.screen.WaitForString ">"

+crt.Screen.Send VbCr

+

+crt.Sleep 50

+		

+End Sub

diff --git a/bcm68620_release/release/sdk_scripts/gpon_scripts/gpon_onu_statistics.vbs b/bcm68620_release/release/sdk_scripts/gpon_scripts/gpon_onu_statistics.vbs
new file mode 100755
index 0000000..47c87f9
--- /dev/null
+++ b/bcm68620_release/release/sdk_scripts/gpon_scripts/gpon_onu_statistics.vbs
@@ -0,0 +1,18 @@
+# $language = "VBScript"

+# $interface = "1.0"

+

+Sub SendApplicationCommand(shell_command)

+    crt.Screen.Send shell_command & VbCr & VbCr

+	crt.sleep 1000

+End Sub

+

+Sub main

+

+		pon_ni = inputbox("PON NI: [0-15]" )

+		onu = inputbox("ONU ID: [0-127]" )

+

+	SendApplicationCommand "/api/stat object=gpon_onu pon_ni=" & pon_ni & " onu_id=" & onu & " clear=no"  

+	crt.sleep 10

+

+

+End Sub

diff --git a/bcm68620_release/release/sdk_scripts/gpon_scripts/gpon_pon_activation.vbs b/bcm68620_release/release/sdk_scripts/gpon_scripts/gpon_pon_activation.vbs
new file mode 100755
index 0000000..ea2193f
--- /dev/null
+++ b/bcm68620_release/release/sdk_scripts/gpon_scripts/gpon_pon_activation.vbs
@@ -0,0 +1,18 @@
+# $language = "VBScript"

+# $interface = "1.0"

+

+Sub SendApplicationCommand(shell_command)

+    crt.Screen.Send shell_command & VbCr & VbCr

+	crt.sleep 1000

+End Sub

+

+Sub main

+

+	pon_ni = inputbox("PON NI: [0-15]" )

+

+	SendApplicationCommand "/board/trx_enable pon_id=" & pon_ni & " "   

+	crt.sleep 100

+	SendApplicationCommand "/api/oper object=gpon_ni sub=set_pon_state pon_ni=" & pon_ni & " pon_state=active_working"  

+	crt.sleep 100

+

+End Sub

diff --git a/bcm68620_release/release/sdk_scripts/gpon_scripts/gpon_rssi_i2c_read_result.vbs b/bcm68620_release/release/sdk_scripts/gpon_scripts/gpon_rssi_i2c_read_result.vbs
new file mode 100755
index 0000000..109ca80
--- /dev/null
+++ b/bcm68620_release/release/sdk_scripts/gpon_scripts/gpon_rssi_i2c_read_result.vbs
@@ -0,0 +1,42 @@
+# $language = "VBScript"

+# $interface = "1.0"

+

+Sub SendApplicationCommand(shell_command)

+    crt.Screen.Send shell_command & VbCr & VbCr

+	crt.sleep 1000

+End Sub

+

+Sub main

+

+	pon_ni = inputbox("PON NI: [0-15]" )

+

+	

+if pon_ni < 8 then

+	SendApplicationCommand "/board/i2c/dev_change dev=sw2"  

+	crt.sleep 100 

+	SendApplicationCommand "/board/i2c/dev_write width=8 addr=0 val=0x" & hex(2 ^ (7 - pon_ni)) &" "

+	crt.sleep 10

+else

+SendApplicationCommand "/board/i2c/dev_change dev=sw3"  

+	crt.sleep 100

+if pon_ni < 12 then

+	

+	SendApplicationCommand "/board/i2c/dev_write width=8 addr=0 val=0x" & hex(2 ^ ( pon_ni - 4)) &" "

+	crt.sleep 10

+else

+	SendApplicationCommand "/board/i2c/dev_write width=8 addr=0 val=0x" & hex(2 ^ ( pon_ni - 12)) &" "

+	crt.sleep 10

+

+

+end if

+

+end if

+	SendApplicationCommand "/board/i2c/dev_change sfp2 "

+	crt.sleep 10

+	SendApplicationCommand "/board/i2c/dev_read width=8 addr=0x68"

+	crt.sleep 10

+	SendApplicationCommand "/board/i2c/dev_read width=8 addr=0x69"

+	crt.sleep 10

+

+

+End Sub

diff --git a/bcm68620_release/release/sdk_scripts/gpon_scripts/gpon_start_sn_acquisition.vbs b/bcm68620_release/release/sdk_scripts/gpon_scripts/gpon_start_sn_acquisition.vbs
new file mode 100755
index 0000000..ed12089
--- /dev/null
+++ b/bcm68620_release/release/sdk_scripts/gpon_scripts/gpon_start_sn_acquisition.vbs
@@ -0,0 +1,18 @@
+# $language = "VBScript"

+# $interface = "1.0"

+

+Sub SendApplicationCommand(shell_command)

+    crt.Screen.Send shell_command & VbCr & VbCr

+	crt.sleep 1000

+End Sub

+

+Sub main

+

+		pon_ni = inputbox("PON NI: [0-15]" )

+		interval = inputbox("interval in MS" )

+		oper = inputbox("post_discovery_mode:none/disable/activate" )

+

+	SendApplicationCommand "/api/set object=gpon_ni pon_ni=" & pon_ni & " sn_acquisition.interval=" & interval & " sn_acquisition.onu_post_discovery_mode=" & oper & " sn_acquisition.control=enable "

+	crt.sleep 100

+

+End Sub

diff --git a/bcm68620_release/release/sdk_scripts/gpon_scripts/gpon_stop_sn_acquisition.vbs b/bcm68620_release/release/sdk_scripts/gpon_scripts/gpon_stop_sn_acquisition.vbs
new file mode 100755
index 0000000..bcf2c83
--- /dev/null
+++ b/bcm68620_release/release/sdk_scripts/gpon_scripts/gpon_stop_sn_acquisition.vbs
@@ -0,0 +1,18 @@
+# $language = "VBScript"

+# $interface = "1.0"

+

+Sub SendApplicationCommand(shell_command)

+    crt.Screen.Send shell_command & VbCr & VbCr

+	crt.sleep 1000

+End Sub

+

+Sub main

+

+		pon_ni = inputbox("PON NI: [0-15]" )

+		interval = 1000

+		oper = "none"

+

+	SendApplicationCommand "/api/set object=gpon_ni pon_ni=" & pon_ni & " sn_acquisition.interval=" & interval & " sn_acquisition.onu_post_discovery_mode=" & oper & " sn_acquisition.control=disable"

+	crt.sleep 100

+

+End Sub

diff --git a/bcm68620_release/release/sdk_scripts/xgpon_xgs_scripts/xgpon_maple_init.vbs b/bcm68620_release/release/sdk_scripts/xgpon_xgs_scripts/xgpon_maple_init.vbs
new file mode 100755
index 0000000..8197003
--- /dev/null
+++ b/bcm68620_release/release/sdk_scripts/xgpon_xgs_scripts/xgpon_maple_init.vbs
@@ -0,0 +1,64 @@
+# $language = "VBScript"
+# $interface = "1.0"
+
+
+Sub Sleep(timewait)
+ 
+  If crt.screen.waitforstring("pause", timewait) = true then msgbox "surprise"
+  
+End Sub
+
+Sub SendShellCommand(shell_command)
+	crt.Screen.Send shell_command & VbCr
+End Sub
+
+sub main
+
+SendShellCommand("root")
+crt.Sleep 100
+SendShellCommand("root")
+crt.Sleep 100
+SendShellCommand("cd /opt/bcm68620/")
+crt.screen.WaitForString "#"
+crt.Sleep 100
+SendShellCommand("./svk_init.sh")
+crt.screen.WaitForString ">"
+crt.Sleep 1000
+crt.Screen.Send VbCr
+
+
+SendShellCommand("/api/set object=device system_mode=xgpon_1__8_x")
+crt.Screen.Send VbCr
+crt.Screen.Send VbCr
+crt.Sleep 50
+' the following line is only if you would like to set the keep alive values 
+'SendShellCommand("/api/set object=device system_mode=xgpon_1__8_x keepalive_interval=5 keepalive_tolerance=3")
+'crt.Sleep 50
+'crt.Screen.Send VbCr
+'crt.Screen.Send VbCr
+
+
+SendShellCommand("/user/register_indication_handler")
+crt.Screen.Send VbCr
+crt.Screen.Send VbCr
+crt.Sleep 50
+SendShellCommand("/user/register_proxy_rx_handler ")
+crt.Screen.Send VbCr
+crt.Screen.Send VbCr
+crt.Sleep 50
+crt.Screen.Send VbCr
+SendShellCommand("/api/oper object=device sub=connect ")
+crt.Screen.Send VbCr
+crt.screen.WaitForString ">"
+crt.Screen.Send VbCr
+
+crt.Sleep 50
+
+
+
+
+
+
+
+		
+End Sub
diff --git a/bcm68620_release/release/sdk_scripts/xgpon_xgs_scripts/xgpon_xgs_config_alloc.vbs b/bcm68620_release/release/sdk_scripts/xgpon_xgs_scripts/xgpon_xgs_config_alloc.vbs
new file mode 100755
index 0000000..e0c0ef2
--- /dev/null
+++ b/bcm68620_release/release/sdk_scripts/xgpon_xgs_scripts/xgpon_xgs_config_alloc.vbs
@@ -0,0 +1,44 @@
+# $language = "VBScript"

+# $interface = "1.0"

+

+Sub SendApplicationCommand(shell_command)

+    crt.Screen.Send shell_command & VbCr & VbCr

+	crt.sleep 200

+End Sub

+

+Sub main

+

+	If crt.Arguments.Count>0 Then

+		pon_ni = crt.Arguments(0)

+	Else

+		pon_ni = inputbox("PON NI: XGPON:[0-7] XGS:[0-1]")

+	End If

+	

+	If crt.Arguments.Count>1 Then

+		onu_id = crt.Arguments(1)

+	Else

+		onu_id = inputbox("ONU id: [0-255]")

+	End IF

+	

+	If crt.Arguments.Count>2 Then

+		alloc_id = crt.Arguments(2)

+	Else

+		alloc_id = inputbox("Alloc id")

+	End IF

+	

+	' you can also comment all the input values out and set these values manually 	

+	cbr_rt_bw = inputbox("cbr_rt_bw [bytes/sec]")

+	cbr_nrt_bw = inputbox("cbr_nrt_bw [bytes/sec]")

+	guaranteed_bw = inputbox("guaranteed_bw [bytes/sec]")

+	maximum_bw = inputbox("maximum_bw [bytes/sec]")

+	cbr_rt_compensation = inputbox("cbr_rt_compensation [yes,no]")

+	

+	

+	SendApplicationCommand "/~ off"

+

+	'config alloc

+	SendApplicationCommand "/api/set object=xgpon_alloc pon_ni=" & pon_ni & " alloc_id=" & alloc_id & " onu_id=" & onu_id & " sla.cbr_rt_bw=" & cbr_rt_bw & " sla.cbr_nrt_bw=" & cbr_nrt_bw & " sla.guaranteed_bw=" & guaranteed_bw & " sla.maximum_bw=" & maximum_bw & " sla.additional_bw_eligibility=non_assured sla.cbr_rt_compensation=" & cbr_rt_compensation & " sla.cbr_rt_ap_index=0 sla.cbr_nrt_ap_index=0 sla.alloc_type=nsr sla.weight=0 sla.priority=0"

+	

+	SendApplicationCommand "/~ on"

+

+End Sub

diff --git a/bcm68620_release/release/sdk_scripts/xgpon_xgs_scripts/xgpon_xgs_config_and_active_onu.vbs b/bcm68620_release/release/sdk_scripts/xgpon_xgs_scripts/xgpon_xgs_config_and_active_onu.vbs
new file mode 100755
index 0000000..9137cd9
--- /dev/null
+++ b/bcm68620_release/release/sdk_scripts/xgpon_xgs_scripts/xgpon_xgs_config_and_active_onu.vbs
@@ -0,0 +1,40 @@
+# $language = "VBScript"

+# $interface = "1.0"

+

+Sub SendApplicationCommand(shell_command)

+    crt.Screen.Send shell_command & VbCr & VbCr

+	crt.sleep 200

+End Sub

+

+Sub main

+

+	If crt.Arguments.Count > 0 Then

+		pon_ni = crt.Arguments(0)

+	Else

+		pon_ni = inputbox("PON NI: XGPON:[0-7] XGS:[0-1]")

+	End If

+	

+	If crt.Arguments.Count > 1 Then

+		onu_id = crt.Arguments(1)

+	Else

+		onu_id = inputbox("ONU id: [0-255]")

+	End IF

+	

+	If crt.Arguments.Count > 2 Then

+		data_burst_profile = crt.Arguments(2)

+	Else

+		data_burst_profile = inputbox("Data burst profile: [0-3]" & VbCr & "0 - ranging" & VbCr & "1 - data" & VbCr & "2 - ranging FEC" & VbCr & "3 - data FEC")

+	End IF

+	

+	'SendApplicationCommand "/~ off"

+	

+	'config onu

+	serial = string(8 - Len(onu_id), "0") & onu_id

+	SendApplicationCommand "/api/set object=xgpon_onu pon_ni=" & pon_ni & " onu_id=" & onu_id & " serial_number.vendor_id=00000000 serial_number.vendor_specific=" & serial & " registration_id_auto_learning=yes ranging_burst_profile=0 data_burst_profile=" & data_burst_profile

+   

+    'activate onu

+    SendApplicationCommand "/api/oper object=xgpon_onu sub=set_onu_state pon_ni=" & pon_ni & " onu_id=" & onu_id & " onu_state=active"

+    

+    'SendApplicationCommand "/~ on"

+

+End Sub

diff --git a/bcm68620_release/release/sdk_scripts/xgpon_xgs_scripts/xgpon_xgs_config_gem_port.vbs b/bcm68620_release/release/sdk_scripts/xgpon_xgs_scripts/xgpon_xgs_config_gem_port.vbs
new file mode 100755
index 0000000..b8cfe70
--- /dev/null
+++ b/bcm68620_release/release/sdk_scripts/xgpon_xgs_scripts/xgpon_xgs_config_gem_port.vbs
@@ -0,0 +1,36 @@
+# $language = "VBScript"

+# $interface = "1.0"

+

+Sub SendApplicationCommand(shell_command)

+    crt.Screen.Send shell_command & VbCr & VbCr

+	crt.sleep 200

+End Sub

+

+Sub main

+

+	If crt.Arguments.Count>0 Then

+		pon_ni = crt.Arguments(0)

+	Else

+		pon_ni = inputbox("PON NI: XGPON:[0-7] XGS:[0-1]")

+	End If

+	

+	If crt.Arguments.Count>1 Then

+		onu_id = crt.Arguments(1)

+	Else

+		onu_id = inputbox("ONU id: [0-255]")

+	End IF

+

+	If crt.Arguments.Count>2 Then

+		port_id = crt.Arguments(2)

+	Else

+		port_id = inputbox("port_id")

+	End IF

+	

+	SendApplicationCommand "/~ off"

+	

+	'config port

+	SendApplicationCommand "/api/set object=xgpon_gem_port pon_ni=" & pon_ni & " gem_port_id=" & port_id & " onu_id=" & onu_id & " configuration.direction=bidirectional configuration.type=unicast encryption_mode=disable upstream_destination_queue=data control=enable"

+	

+	SendApplicationCommand "/~ on"

+

+End Sub

diff --git a/bcm68620_release/release/sdk_scripts/xgpon_xgs_scripts/xgpon_xgs_config_multigem_port.vbs b/bcm68620_release/release/sdk_scripts/xgpon_xgs_scripts/xgpon_xgs_config_multigem_port.vbs
new file mode 100755
index 0000000..478cd2b
--- /dev/null
+++ b/bcm68620_release/release/sdk_scripts/xgpon_xgs_scripts/xgpon_xgs_config_multigem_port.vbs
@@ -0,0 +1,36 @@
+# $language = "VBScript"

+# $interface = "1.0"

+

+Sub SendApplicationCommand(shell_command)

+    crt.Screen.Send shell_command & VbCr & VbCr

+	crt.sleep 200

+End Sub

+

+Sub main

+

+	If crt.Arguments.Count>0 Then

+		pon_ni = crt.Arguments(0)

+	Else

+		pon_ni = inputbox("PON NI: XGPON:[0-7] XGS:[0-1]")

+	End If

+	

+	If crt.Arguments.Count>1 Then

+		onu_id = crt.Arguments(1)

+	Else

+		onu_id = inputbox("ONU id: [0-255]")

+	End IF

+

+	If crt.Arguments.Count>2 Then

+		port_id = crt.Arguments(2)

+	Else

+		port_id = inputbox("port_id")

+	End IF

+	

+	SendApplicationCommand "/~ off"

+	

+	'config port

+	SendApplicationCommand "/api/set object=xgpon_gem_port pon_ni=" & pon_ni & " gem_port_id=" & port_id & " configuration.direction=bidirectional configuration.type=multicast downstream_encryption_mode=disable upstream_destination_queue=data control=enable"

+	

+	SendApplicationCommand "/~ on"

+

+End Sub

diff --git a/bcm68620_release/release/sdk_scripts/xgpon_xgs_scripts/xgpon_xgs_pon_activation.vbs b/bcm68620_release/release/sdk_scripts/xgpon_xgs_scripts/xgpon_xgs_pon_activation.vbs
new file mode 100755
index 0000000..8d13246
--- /dev/null
+++ b/bcm68620_release/release/sdk_scripts/xgpon_xgs_scripts/xgpon_xgs_pon_activation.vbs
@@ -0,0 +1,50 @@
+# $language = "VBScript"
+# $interface = "1.0"
+
+Sub SendApplicationCommand(shell_command)
+    crt.Screen.Send shell_command & VbCr & VbCr
+	crt.sleep 200
+End Sub
+
+Sub main
+	If crt.Arguments.Count>0 Then
+		sys_mode = crt.Arguments(0)
+	Else
+		sys_mode = inputbox("system mode: [0:XGPON  1:XGS  2:NGPON2]")
+	End If
+	
+	If crt.Arguments.Count>0 Then
+		pon_ni = crt.Arguments(0)
+	Else
+		If sys_mode=0 Then
+			pon_ni = inputbox("PON NI: [0-7]")
+		Else
+			pon_ni = inputbox("PON NI: [0-1]") ' used for XGS/NGPON2
+		End If
+	End If
+	
+	SendApplicationCommand "/~ off"
+	'enable the transceiver this command is board dependent
+	If sys_mode=0 Then
+		SendApplicationCommand "/board/Trx_enable pon_id=" & pon_ni & " "
+	Else
+		SendApplicationCommand "/board/Trx_enable pon_id=" & pon_ni + 3 & " "
+	End If
+	crt.sleep 100
+	                                                                   
+    ' optinal Set Pon
+    SendApplicationCommand "/api/set object=xgpon_ni pon_ni=" & pon_ni & " hw_pon_id.pon_id_1=0 hw_pon_id.pon_id_2=0 onu_alarms_thresholds.losi=4 onu_alarms_thresholds.lobi=4 onu_alarms_thresholds.looci=3 onu_alarms_thresholds.lopci=3 ploam_handling.ack_timeout=2000 ploam_handling.retrans_ranging_time=1 ploam_handling.retrans_assign_alloc_id=1 ploam_handling.retrans_key_control=1 ploam_handling.retrans_request_registration=1 pon_distance.max_log_distance=20 pon_distance.max_diff_reach=20"	                        
+	
+    If sys_mode=1 Then
+		SendApplicationCommand "/a/s object=xgpon_trx pon_ni=" & pon_ni & " transceiver_type=lth_5302_pc"
+	End If
+    If sys_mode=2 Then
+        SendApplicationCommand "/a/s object=xgpon_trx pon_ni=" & pon_ni & " transceiver_type=ltw_627x_pc" 
+	End If
+    
+	' Activate PON
+	SendApplicationCommand "/api/oper object=xgpon_ni sub=set_pon_state pon_ni=" & pon_ni & " pon_state=active_working"
+	
+	SendApplicationCommand "/~ on"
+
+End Sub
diff --git a/bcm68620_release/release/sdk_scripts/xgpon_xgs_scripts/xgpon_xgs_rssi_i2c_read_result.vbs b/bcm68620_release/release/sdk_scripts/xgpon_xgs_scripts/xgpon_xgs_rssi_i2c_read_result.vbs
new file mode 100755
index 0000000..d9df87d
--- /dev/null
+++ b/bcm68620_release/release/sdk_scripts/xgpon_xgs_scripts/xgpon_xgs_rssi_i2c_read_result.vbs
@@ -0,0 +1,37 @@
+# $language = "VBScript"

+# $interface = "1.0"

+

+Sub SendApplicationCommand(shell_command)

+    crt.Screen.Send shell_command & VbCr & VbCr

+	crt.sleep 1000

+End Sub

+

+Sub main

+

+	pon_ni = inputbox("PON NI: XGPON:[0-7] XGS:[0-1]" )

+

+	

+if pon_ni < 4 then

+	SendApplicationCommand "/board/i2c/dev_change dev=sw2"  

+	crt.sleep 100 

+	SendApplicationCommand "/board/i2c/dev_write width=8 addr=0 val=0x" & hex(2 ^ (3 - pon_ni)) &" "

+	crt.sleep 10

+else

+SendApplicationCommand "/board/i2c/dev_change dev=sw3"  

+	crt.sleep 100

+

+	

+	SendApplicationCommand "/board/i2c/dev_write width=8 addr=0 val=0x" & hex(2 ^ pon_ni) &" "

+	crt.sleep 10

+

+

+end if

+	SendApplicationCommand "/board/i2c/dev_change sfp1 "

+	crt.sleep 10

+	SendApplicationCommand "/board/i2c/dev_read width=8 addr=0x68"

+	crt.sleep 10

+	SendApplicationCommand "/board/i2c/dev_read width=8 addr=0x69"

+	crt.sleep 10

+

+

+End Sub

diff --git a/bcm68620_release/release/sdk_scripts/xgpon_xgs_scripts/xgpon_xgs_start_sn_acquisition.vbs b/bcm68620_release/release/sdk_scripts/xgpon_xgs_scripts/xgpon_xgs_start_sn_acquisition.vbs
new file mode 100755
index 0000000..4b6fb2e
--- /dev/null
+++ b/bcm68620_release/release/sdk_scripts/xgpon_xgs_scripts/xgpon_xgs_start_sn_acquisition.vbs
@@ -0,0 +1,18 @@
+# $language = "VBScript"

+# $interface = "1.0"

+

+Sub SendApplicationCommand(shell_command)

+    crt.Screen.Send shell_command & VbCr & VbCr

+	crt.sleep 1000

+End Sub

+

+Sub main

+

+		pon_ni = inputbox("PON NI: XGPON:[0-7] XGS:[0-1]" )

+		interval = inputbox("interval in MS" )

+		oper = inputbox("post_discovery_mode:none/disable/activate" )

+

+	SendApplicationCommand "/api/set object=xgpon_ni pon_ni=" & pon_ni & " sn_acquisition.interval=" & interval & " sn_acquisition.onu_post_discovery_mode=" & oper & " sn_acquisition.burst_profile=0 sn_acquisition.control=enable "

+	crt.sleep 100

+

+End Sub

diff --git a/bcm68620_release/release/sdk_scripts/xgpon_xgs_scripts/xgpon_xgs_stop_sn_acquisition.vbs b/bcm68620_release/release/sdk_scripts/xgpon_xgs_scripts/xgpon_xgs_stop_sn_acquisition.vbs
new file mode 100755
index 0000000..2b326a0
--- /dev/null
+++ b/bcm68620_release/release/sdk_scripts/xgpon_xgs_scripts/xgpon_xgs_stop_sn_acquisition.vbs
@@ -0,0 +1,18 @@
+# $language = "VBScript"

+# $interface = "1.0"

+

+Sub SendApplicationCommand(shell_command)

+    crt.Screen.Send shell_command & VbCr & VbCr

+	crt.sleep 1000

+End Sub

+

+Sub main

+

+		pon_ni = inputbox("PON NI: XGPON:[0-7] XGS:[0-1]" )

+		interval = 1000

+		oper = "none"

+

+	SendApplicationCommand "/api/set object=xgpon_ni pon_ni=" & pon_ni & " sn_acquisition.interval=" & interval & " sn_acquisition.onu_post_discovery_mode=" & oper & " sn_acquisition.burst_profile=0 sn_acquisition.control=disable"

+	crt.sleep 100

+

+End Sub

diff --git a/bcm68620_release/release/sdk_scripts/xgpon_xgs_scripts/xgs_maple_init.vbs b/bcm68620_release/release/sdk_scripts/xgpon_xgs_scripts/xgs_maple_init.vbs
new file mode 100644
index 0000000..91cc1c0
--- /dev/null
+++ b/bcm68620_release/release/sdk_scripts/xgpon_xgs_scripts/xgs_maple_init.vbs
@@ -0,0 +1,64 @@
+# $language = "VBScript"
+# $interface = "1.0"
+
+
+Sub Sleep(timewait)
+ 
+  If crt.screen.waitforstring("pause", timewait) = true then msgbox "surprise"
+  
+End Sub
+
+Sub SendShellCommand(shell_command)
+	crt.Screen.Send shell_command & VbCr
+End Sub
+
+sub main
+
+SendShellCommand("root")
+crt.Sleep 100
+SendShellCommand("root")
+crt.Sleep 100
+SendShellCommand("cd /opt/bcm68620/")
+crt.screen.WaitForString "#"
+crt.Sleep 100
+SendShellCommand("./svk_init.sh")
+crt.screen.WaitForString ">"
+crt.Sleep 1000
+crt.Screen.Send VbCr
+
+
+SendShellCommand("/api/set object=device system_mode=xgs__2_x_10_g")
+crt.Screen.Send VbCr
+crt.Screen.Send VbCr
+crt.Sleep 50
+' the following line is only if you would like to set the keep alive values 
+'SendShellCommand("/api/set object=device system_mode=xgs__2_x_10_g keepalive_interval=5 keepalive_tolerance=3")
+'crt.Sleep 50
+'crt.Screen.Send VbCr
+'crt.Screen.Send VbCr
+
+
+SendShellCommand("/user/register_indication_handler")
+crt.Screen.Send VbCr
+crt.Screen.Send VbCr
+crt.Sleep 50
+SendShellCommand("/user/register_proxy_rx_handler ")
+crt.Screen.Send VbCr
+crt.Screen.Send VbCr
+crt.Sleep 50
+crt.Screen.Send VbCr
+SendShellCommand("/api/oper object=device sub=connect ")
+crt.Screen.Send VbCr
+crt.screen.WaitForString ">"
+crt.Screen.Send VbCr
+
+crt.Sleep 50
+
+
+
+
+
+
+
+		
+End Sub
diff --git a/docs b/docs
new file mode 120000
index 0000000..fbc09a0
--- /dev/null
+++ b/docs
@@ -0,0 +1 @@
+bcm68620_release/release/docs
\ No newline at end of file